Name: series-workflowxcvtt Phase: Succeeded StartedAt: 2026-07-25 05:28:02 +0000 UTC FinishedAt: 2026-07-25 10:15:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxcvtt[0] Phase: Succeeded StartedAt: 2026-07-25 05:28:02 +0000 UTC FinishedAt: 2026-07-25 06:00:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxcvtt[0].run-triage Phase: Succeeded StartedAt: 2026-07-25 05:28:02 +0000 UTC FinishedAt: 2026-07-25 06:00:05 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "6bc96b971766fbbbbdd9fb2642cedacaf02da957", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_AMD", "KVM_INTEL", "KVM_SMM", "KVM_HYPERV" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "6bc96b971766fbbbbdd9fb2642cedacaf02da957", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_AMD", "KVM_INTEL", "KVM_SMM", "KVM_HYPERV" ], "series_id": "d78f0fd4-0f94-413a-81e0-a3bea28728a0" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "nested_svm_vmrun", "nested_svm_vmexit", "vmload_interception", "vmsave_interception", "svm_enter_smm", "svm_leave_smm", "nested_vmx_enter_non_root_mode", "__nested_vmx_vmexit", "vmx_set_nested_state" ], "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+CgkJCTx0ZD4yMDI2LzA3LzI1IDA1OjU3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fQU1EJiMzNDssCiAgICAmIzM0O0tWTV9JTlRFTCYjMzQ7LAogICAgJiMzNDtLVk1fU01NJiMzNDssCiAgICAmIzM0O0tWTV9IWVBFUlYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZXN0ZWRfc3ZtX3ZtcnVuJiMzNDssCiAgICAmIzM0O25lc3RlZF9zdm1fdm1leGl0JiMzNDssCiAgICAmIzM0O3ZtbG9hZF9pbnRlcmNlcHRpb24mIzM0OywKICAgICYjMzQ7dm1zYXZlX2ludGVyY2VwdGlvbiYjMzQ7LAogICAgJiMzNDtzdm1fZW50ZXJfc21tJiMzNDssCiAgICAmIzM0O3N2bV9sZWF2ZV9zbW0mIzM0OywKICAgICYjMzQ7bmVzdGVkX3ZteF9lbnRlcl9ub25fcm9vdF9tb2RlJiMzNDssCiAgICAmIzM0O19fbmVzdGVkX3ZteF92bWV4aXQmIzM0OywKICAgICYjMzQ7dm14X3NldF9uZXN0ZWRfc3RhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBjbGVhbnVwIGNsYXNzIGBrdm1fdmNwdV9tYXBfbG9jYWxgIGFuZCB1c2VzIGl0IHRvIHJlcGxhY2UgbWFudWFsIGBrdm1fdmNwdV9tYXBgIGFuZCBga3ZtX3ZjcHVfdW5tYXBgIGNhbGxzIGluIHNldmVyYWwgS1ZNIGZ1bmN0aW9ucyBhY3Jvc3MgeDg2IChTVk0gYW5kIFZNWCkgYW5kIFBvd2VyUEMgKEJvb2szUyBQUikuIEl0IGFsc28gZml4ZXMgYSBidWcgaW4gYF9fbmVzdGVkX3ZteF92bWV4aXRgIHdoZXJlIGBrdm1fY2hlY2tfcmVxdWVzdChLVk1fUkVRX0dFVF9ORVNURURfU1RBVEVfUEFHRVMsIHZjcHUpYCB3YXMgb25seSBjYWxsZWQgd2hlbiBgQ09ORklHX0tWTV9IWVBFUlZgIHdhcyBlbmFibGVkLCBidXQgY2hlY2tpbmcgdGhlIHJlcXVlc3QgYWxzbyBjbGVhcnMgaXQsIHNvIGl0IHNob3VsZCBiZSBjYWxsZWQgdW5jb25kaXRpb25hbGx5LiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIGNvcmUgS1ZNIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IGNsZWFudXAgY2xhc3Mgd29ya3MgY29ycmVjdGx5IGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgbWVtb3J5IGxlYWtzIG9yIHVzZS1hZnRlci1mcmVlIGlzc3VlcywgYW5kIHRvIHZlcmlmeSB0aGUgZml4IGluIGBfX25lc3RlZF92bXhfdm1leGl0YC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwNTo1NzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGI4ODA0ODVjMWUzMTQ5YzQ3Yzc1YWRiMWZlYmFjNTAwOWM1ODYzODNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAyNSAwNTo1NzoyNiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wci5jIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuY1xuaW5kZXggMmJhMmRkMjZhN2VhZDguLmRhN2EwMzhlMjcwMGQyIDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuY1xuQEAgLTYzOSwyNyAmIzQzOzYzOSwyNCBAQCBzdGF0aWMgdm9pZCBrdm1wcGNfc2V0X3B2cl9wcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBwdnIpXG4gICovXG4gc3RhdGljIHZvaWQga3ZtcHBjX3BhdGNoX2RjYnooc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtcHBjX3B0ZSAqcHRlKVxuIHtcbi1cdHN0cnVjdCBrdm1faG9zdF9tYXAgbWFwO1xuIFx0dTY0IGhwYWdlX29mZnNldDtcbiBcdHUzMiAqcGFnZTtcbiBcdGludCBpLCByO1xuIFxuLVx0ciA9IGt2bV92Y3B1X21hcCh2Y3B1LCBwdGUtXHUwMDNlcmFkZHIgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQsIFx1MDAyNm1hcCk7XG4tXHRpZiAocilcbiYjNDM7XHRDTEFTUyhrdm1fdmNwdV9tYXBfbG9jYWwsIG0pKHZjcHUsIHB0ZS1cdTAwM2VyYWRkciBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG4mIzQzO1x0aWYgKG0ucmV0KVxuIFx0XHRyZXR1cm47XG4gXG4gXHRocGFnZV9vZmZzZXQgPSBwdGUtXHUwMDNlcmFkZHIgXHUwMDI2IH5QQUdFX01BU0s7XG4gXHRocGFnZV9vZmZzZXQgXHUwMDI2PSB+MHhGRkZVTEw7XG4gXHRocGFnZV9vZmZzZXQgLz0gNDtcbiBcbi1cdHBhZ2UgPSBtYXAuaHZhO1xuJiM0MztcdHBhZ2UgPSBtLm1hcC5odmE7XG4gXG4gXHQvKiBwYXRjaCBkY2J6IGludG8gcmVzZXJ2ZWQgaW5zdHJ1Y3Rpb24sIHNvIHdlIHRyYXAgKi9cbiBcdGZvciAoaT1ocGFnZV9vZmZzZXQ7IGkgXHUwMDNjIGhwYWdlX29mZnNldCAmIzQzOyAoSFdfUEFHRV9TSVpFIC8gNCk7IGkmIzQzOyYjNDM7KVxuIFx0XHRpZiAoKGJlMzJfdG9fY3B1KHBhZ2VbaV0pIFx1MDAyNiAweGZmMDAwN2ZmKSA9PSBJTlNfRENCWilcbiBcdFx0XHRwYWdlW2ldIFx1MDAyNj0gY3B1X3RvX2JlMzIoMHhmZmZmZmZmNyk7XG4tXG4tXHRrdm1fdmNwdV91bm1hcCh2Y3B1LCBcdTAwMjZtYXApO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBrdm1wcGNfdmlzaWJsZV9ncGEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEpXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYyBiL2FyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmNcbmluZGV4IDVlM2UyODBjZDQ4M2UzLi43M2YzN2IwNTBkMGEwYiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmNcbkBAIC0xMDg2LDE0ICYjNDM7MTA4NiwxNCBAQCBpbnQgZW50ZXJfc3ZtX2d1ZXN0X21vZGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdm1jYjEyX2dwYSwgYm9vbCBmcm9tX3ZtcnVuKVxuIHN0YXRpYyBpbnQgbmVzdGVkX3N2bV9jb3B5X3ZtY2IxMl90b19jYWNoZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2bWNiMTJfZ3BhKVxuIHtcbiBcdHN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpO1xuLVx0c3RydWN0IGt2bV9ob3N0X21hcCBtYXA7XG4gXHRzdHJ1Y3Qgdm1jYiAqdm1jYjEyO1xuIFx0aW50IHIgPSAwO1xuIFxuLVx0aWYgKGt2bV92Y3B1X21hcCh2Y3B1LCBncGFfdG9fZ2ZuKHZtY2IxMl9ncGEpLCBcdTAwMjZtYXApKVxuJiM0MztcdENMQVNTKGt2bV92Y3B1X21hcF9sb2NhbCwgbSkodmNwdSwgZ3BhX3RvX2dmbih2bWNiMTJfZ3BhKSk7XG4mIzQzO1x0aWYgKG0ucmV0KVxuIFx0XHRyZXR1cm4gLUVGQVVMVDtcbiBcbi1cdHZtY2IxMiA9IG1hcC5odmE7XG4mIzQzO1x0dm1jYjEyID0gbS5tYXAuaHZhO1xuIFx0bmVzdGVkX2NvcHlfdm1jYl9jb250cm9sX3RvX2NhY2hlKHN2bSwgXHUwMDI2dm1jYjEyLVx1MDAzZWNvbnRyb2wpO1xuIFx0bmVzdGVkX2NvcHlfdm1jYl9zYXZlX3RvX2NhY2hlKHN2bSwgXHUwMDI2dm1jYjEyLVx1MDAzZXNhdmUpO1xuIFxuQEAgLTExMDcsNyAmIzQzOzExMDcsNiBAQCBzdGF0aWMgaW50IG5lc3RlZF9zdm1fY29weV92bWNiMTJfdG9fY2FjaGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdm1jYjEyX2dwYVxuIFx0XHRyID0gLUVJTlZBTDtcbiBcdH1cbiBcbi1cdGt2bV92Y3B1X3VubWFwKHZjcHUsIFx1MDAyNm1hcCk7XG4gXHRyZXR1cm4gcjtcbiB9XG4gXG5AQCAtMTI1MSwxNSAmIzQzOzEyNTAsMTMgQEAgc3RhdGljIGludCBuZXN0ZWRfc3ZtX3ZtZXhpdF91cGRhdGVfdm1jYjEyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHRzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTtcbiBcdHN0cnVjdCB2bWNiICp2bWNiMDIgPSBzdm0tXHUwMDNlbmVzdGVkLnZtY2IwMi5wdHI7XG4tXHRzdHJ1Y3Qga3ZtX2hvc3RfbWFwIG1hcDtcbiBcdHN0cnVjdCB2bWNiICp2bWNiMTI7XG4tXHRpbnQgcmM7XG4gXG4tXHRyYyA9IGt2bV92Y3B1X21hcCh2Y3B1LCBncGFfdG9fZ2ZuKHN2bS1cdTAwM2VuZXN0ZWQudm1jYjEyX2dwYSksIFx1MDAyNm1hcCk7XG4tXHRpZiAocmMpXG4tXHRcdHJldHVybiByYztcbiYjNDM7XHRDTEFTUyhrdm1fdmNwdV9tYXBfbG9jYWwsIG0pKHZjcHUsIGdwYV90b19nZm4oc3ZtLVx1MDAzZW5lc3RlZC52bWNiMTJfZ3BhKSk7XG4mIzQzO1x0aWYgKG0ucmV0KVxuJiM0MztcdFx0cmV0dXJuIG0ucmV0O1xuIFxuLVx0dm1jYjEyID0gbWFwLmh2YTtcbiYjNDM7XHR2bWNiMTIgPSBtLm1hcC5odmE7XG4gXG4gXHR2bWNiMTItXHUwMDNlc2F2ZS5lcyAgICAgPSB2bWNiMDItXHUwMDNlc2F2ZS5lcztcbiBcdHZtY2IxMi1cdTAwM2VzYXZlLmNzICAgICA9IHZtY2IwMi1cdTAwM2VzYXZlLmNzO1xuQEAgLTEzMTQsNyAmIzQzOzEzMTEsNiBAQCBzdGF0aWMgaW50IG5lc3RlZF9zdm1fdm1leGl0X3VwZGF0ZV92bWNiMTIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHRcdFx0ICAgICAgIHZtY2IxMi1cdTAwM2Vjb250cm9sLmV4aXRfaW50X2luZm9fZXJyLFxuIFx0XHRcdFx0ICAgICAgIEtWTV9JU0FfU1ZNKTtcbiBcbi1cdGt2bV92Y3B1X3VubWFwKHZjcHUsIFx1MDAyNm1hcCk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uYyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmNcbmluZGV4IDkxMjg2ZDQ2ZDEzYWRiLi43YTQxN2U3MTdmZDkxZSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmNcbkBAIC0yMjE2LDcgJiM0MzsyMjE2LDYgQEAgc3RhdGljIGludCB2bWxvYWRfdm1zYXZlX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgdm1sb2FkKVxuIFx0dTY0IHZtY2IxMl9ncGEgPSBrdm1fcmF4X3JlYWQodmNwdSk7XG4gXHRzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTtcbiBcdHN0cnVjdCB2bWNiICp2bWNiMTI7XG4tXHRzdHJ1Y3Qga3ZtX2hvc3RfbWFwIG1hcDtcbiBcdGludCByZXQ7XG4gXG4gXHRpZiAobmVzdGVkX3N2bV9jaGVja19wZXJtaXNzaW9ucyh2Y3B1KSlcbkBAIC0yMjI3LDEwICYjNDM7MjIyNiwxMSBAQCBzdGF0aWMgaW50IHZtbG9hZF92bXNhdmVfaW50ZXJjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCB2bWxvYWQpXG4gXHRcdHJldHVybiAxO1xuIFx0fVxuIFxuLVx0aWYgKGt2bV92Y3B1X21hcCh2Y3B1LCBncGFfdG9fZ2ZuKHZtY2IxMl9ncGEpLCBcdTAwMjZtYXApKVxuJiM0MztcdENMQVNTKGt2bV92Y3B1X21hcF9sb2NhbCwgbSkodmNwdSwgZ3BhX3RvX2dmbih2bWNiMTJfZ3BhKSk7XG4mIzQzO1x0aWYgKG0ucmV0KVxuIFx0XHRyZXR1cm4ga3ZtX2hhbmRsZV9tZW1vcnlfZmFpbHVyZSh2Y3B1LCBYODZFTVVMX0lPX05FRURFRCwgTlVMTCk7XG4gXG4tXHR2bWNiMTIgPSBtYXAuaHZhO1xuJiM0MztcdHZtY2IxMiA9IG0ubWFwLmh2YTtcbiBcbiBcdHJldCA9IGt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpO1xuIFxuQEAgLTIyNDMsOCAmIzQzOzIyNDMsNiBAQCBzdGF0aWMgaW50IHZtbG9hZF92bXNhdmVfaW50ZXJjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCB2bWxvYWQpXG4gXHRcdHN2bV9jb3B5X3ZtbG9hZHNhdmVfc3RhdGUodm1jYjEyLCBzdm0tXHUwMDNldm1jYjAxLnB0cik7XG4gXHR9XG4gXG4tXHRrdm1fdmNwdV91bm1hcCh2Y3B1LCBcdTAwMjZtYXApO1xuLVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5AQCAtNDk4OSw3ICYjNDM7NDk4Nyw2IEBAIHN0YXRpYyBpbnQgc3ZtX3NtaV9hbGxvd2VkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBmb3JfaW5qZWN0aW9uKVxuIHN0YXRpYyBpbnQgc3ZtX2VudGVyX3NtbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuaW9uIGt2bV9zbXJhbSAqc21yYW0pXG4ge1xuIFx0c3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7XG4tXHRzdHJ1Y3Qga3ZtX2hvc3RfbWFwIG1hcF9zYXZlO1xuIFxuIFx0aWYgKCFpc19ndWVzdF9tb2RlKHZjcHUpKVxuIFx0XHRyZXR1cm4gMDtcbkBAIC01MDIzLDI0ICYjNDM7NTAyMCwyMCBAQCBzdGF0aWMgaW50IHN2bV9lbnRlcl9zbW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bmlvbiBrdm1fc21yYW0gKnNtcmFtKVxuIFx0ICogdGhhdCwgc2VlIHN2bV9wcmVwYXJlX3N3aXRjaF90b19ndWVzdCgpKSB3aGljaCBtdXN0IGJlXG4gXHQgKiBwcmVzZXJ2ZWQuXG4gXHQgKi9cbi1cdGlmIChrdm1fdmNwdV9tYXAodmNwdSwgZ3BhX3RvX2dmbihzdm0tXHUwMDNlbmVzdGVkLmhzYXZlX21zciksIFx1MDAyNm1hcF9zYXZlKSlcbiYjNDM7XHRDTEFTUyhrdm1fdmNwdV9tYXBfbG9jYWwsIG1fc2F2ZSkodmNwdSwgZ3BhX3RvX2dmbihzdm0tXHUwMDNlbmVzdGVkLmhzYXZlX21zcikpO1xuJiM0MztcdGlmIChtX3NhdmUucmV0KVxuIFx0XHRyZXR1cm4gMTtcbiBcbiBcdEJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3Qgdm1jYiwgc2F2ZSkgIT0gMHg0MDApO1xuIFxuLVx0c3ZtX2NvcHlfdm1ydW5fc3RhdGUobWFwX3NhdmUuaHZhICYjNDM7IDB4NDAwLFxuLVx0XHRcdCAgICAgXHUwMDI2c3ZtLVx1MDAzZXZtY2IwMS5wdHItXHUwMDNlc2F2ZSk7XG4tXG4tXHRrdm1fdmNwdV91bm1hcCh2Y3B1LCBcdTAwMjZtYXBfc2F2ZSk7XG4mIzQzO1x0c3ZtX2NvcHlfdm1ydW5fc3RhdGUobV9zYXZlLm1hcC5odmEgJiM0MzsgMHg0MDAsIFx1MDAyNnN2bS1cdTAwM2V2bWNiMDEucHRyLVx1MDAzZXNhdmUpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBpbnQgc3ZtX2xlYXZlX3NtbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGNvbnN0IHVuaW9uIGt2bV9zbXJhbSAqc21yYW0pXG4ge1xuIFx0c3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7XG4tXHRzdHJ1Y3Qga3ZtX2hvc3RfbWFwIG1hcCwgbWFwX3NhdmU7XG4gXHRzdHJ1Y3Qgdm1jYiAqdm1jYjEyO1xuLVx0aW50IHJldDtcbiBcbiBcdGNvbnN0IHN0cnVjdCBrdm1fc21yYW1fc3RhdGVfNjQgKnNtcmFtNjQgPSBcdTAwMjZzbXJhbS1cdTAwM2VzbXJhbTY0O1xuIFxuQEAgLTUwNTcsMjIgJiM0Mzs1MDUwLDIzIEBAIHN0YXRpYyBpbnQgc3ZtX2xlYXZlX3NtbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGNvbnN0IHVuaW9uIGt2bV9zbXJhbSAqc21yYW0pXG4gXHRpZiAoIShzbXJhbTY0LVx1MDAzZWVmZXIgXHUwMDI2IEVGRVJfU1ZNRSkpXG4gXHRcdHJldHVybiAxO1xuIFxuLVx0aWYgKGt2bV92Y3B1X21hcCh2Y3B1LCBncGFfdG9fZ2ZuKHNtcmFtNjQtXHUwMDNlc3ZtX2d1ZXN0X3ZtY2JfZ3BhKSwgXHUwMDI2bWFwKSlcbiYjNDM7XHRDTEFTUyhrdm1fdmNwdV9tYXBfbG9jYWwsIG0pKHZjcHUsIGdwYV90b19nZm4oc21yYW02NC1cdTAwM2Vzdm1fZ3Vlc3Rfdm1jYl9ncGEpKTtcbiYjNDM7XHRpZiAobS5yZXQpXG4gXHRcdHJldHVybiAxO1xuIFxuLVx0cmV0ID0gMTtcbi1cdGlmIChrdm1fdmNwdV9tYXAodmNwdSwgZ3BhX3RvX2dmbihzdm0tXHUwMDNlbmVzdGVkLmhzYXZlX21zciksIFx1MDAyNm1hcF9zYXZlKSlcbi1cdFx0Z290byB1bm1hcF9tYXA7XG4mIzQzO1x0Q0xBU1Moa3ZtX3ZjcHVfbWFwX2xvY2FsLCBtX3NhdmUpKHZjcHUsIGdwYV90b19nZm4oc3ZtLVx1MDAzZW5lc3RlZC5oc2F2ZV9tc3IpKTtcbiYjNDM7XHRpZiAobV9zYXZlLnJldClcbiYjNDM7XHRcdHJldHVybiAxO1xuIFxuIFx0aWYgKHN2bV9hbGxvY2F0ZV9uZXN0ZWQoc3ZtKSlcbi1cdFx0Z290byB1bm1hcF9zYXZlO1xuJiM0MztcdFx0cmV0dXJuIDE7XG4gXG4gXHQvKlxuIFx0ICogUmVzdG9yZSBMMSBob3N0IHN0YXRlIGZyb20gTDEgSFNBVkUgYXJlYSBhcyBWTUNCMDEgd2FzXG4gXHQgKiB1c2VkIGR1cmluZyBTTU0gKHNlZSBzdm1fZW50ZXJfc21tKCkpXG4gXHQgKi9cbiBcbi1cdHN2bV9jb3B5X3ZtcnVuX3N0YXRlKFx1MDAyNnN2bS1cdTAwM2V2bWNiMDEucHRyLVx1MDAzZXNhdmUsIG1hcF9zYXZlLmh2YSAmIzQzOyAweDQwMCk7XG4mIzQzO1x0c3ZtX2NvcHlfdm1ydW5fc3RhdGUoXHUwMDI2c3ZtLVx1MDAzZXZtY2IwMS5wdHItXHUwMDNlc2F2ZSwgbV9zYXZlLm1hcC5odmEgJiM0MzsgMHg0MDApO1xuIFxuIFx0LypcbiBcdCAqIEVudGVyIHRoZSBuZXN0ZWQgZ3Vlc3Qgbm93XG5AQCAtNTA4MCwyNCAmIzQzOzUwNzQsMTggQEAgc3RhdGljIGludCBzdm1fbGVhdmVfc21tKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgY29uc3QgdW5pb24ga3ZtX3NtcmFtICpzbXJhbSlcbiBcbiBcdHZtY2JfbWFya19hbGxfZGlydHkoc3ZtLVx1MDAzZXZtY2IwMS5wdHIpO1xuIFxuLVx0dm1jYjEyID0gbWFwLmh2YTtcbiYjNDM7XHR2bWNiMTIgPSBtLm1hcC5odmE7XG4gXHRuZXN0ZWRfY29weV92bWNiX2NvbnRyb2xfdG9fY2FjaGUoc3ZtLCBcdTAwMjZ2bWNiMTItXHUwMDNlY29udHJvbCk7XG4gXHRuZXN0ZWRfY29weV92bWNiX3NhdmVfdG9fY2FjaGUoc3ZtLCBcdTAwMjZ2bWNiMTItXHUwMDNlc2F2ZSk7XG4gXG4gXHRpZiAobmVzdGVkX3N2bV9jaGVja19jYWNoZWRfdm1jYjEyKHZjcHUpIFx1MDAzYyAwKVxuLVx0XHRnb3RvIHVubWFwX3NhdmU7XG4mIzQzO1x0XHRyZXR1cm4gMTtcbiBcbiBcdGlmIChlbnRlcl9zdm1fZ3Vlc3RfbW9kZSh2Y3B1LCBzbXJhbTY0LVx1MDAzZXN2bV9ndWVzdF92bWNiX2dwYSwgZmFsc2UpICE9IDApXG4tXHRcdGdvdG8gdW5tYXBfc2F2ZTtcbiYjNDM7XHRcdHJldHVybiAxO1xuIFxuLVx0cmV0ID0gMDtcbiBcdHZjcHUtXHUwMDNlYXJjaC5uZXN0ZWRfcnVuX3BlbmRpbmcgPSBLVk1fTkVTVEVEX1JVTl9QRU5ESU5HO1xuLVxuLXVubWFwX3NhdmU6XG4tXHRrdm1fdmNwdV91bm1hcCh2Y3B1LCBcdTAwMjZtYXBfc2F2ZSk7XG4tdW5tYXBfbWFwOlxuLVx0a3ZtX3ZjcHVfdW5tYXAodmNwdSwgXHUwMDI2bWFwKTtcbi1cdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHN2bV9lbmFibGVfc21pX3dpbmRvdyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYyBiL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNcbmluZGV4IGI1NDYwZGU0YjFhNzJmLi5lZjc5NzY5YzYyODcxOCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNcbkBAIC03MzAsNyAmIzQzOzczMCw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBuZXN0ZWRfdm14X3ByZXBhcmVfbXNyX2JpdG1hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHRpbnQgbXNyO1xuIFx0dW5zaWduZWQgbG9uZyAqbXNyX2JpdG1hcF9sMTtcbiBcdHVuc2lnbmVkIGxvbmcgKm1zcl9iaXRtYXBfbDAgPSB2bXgtXHUwMDNlbmVzdGVkLnZtY3MwMi5tc3JfYml0bWFwO1xuLVx0c3RydWN0IGt2bV9ob3N0X21hcCBtYXA7XG4gXG4gXHQvKiBOb3RoaW5nIHRvIGRvIGlmIHRoZSBNU1IgYml0bWFwIGlzIG5vdCBpbiB1c2UuICAqL1xuIFx0aWYgKCFjcHVfaGFzX3ZteF9tc3JfYml0bWFwKCkgfHxcbkBAIC03NTMsMTAgJiM0Mzs3NTIsMTEgQEAgc3RhdGljIGlubGluZSBib29sIG5lc3RlZF92bXhfcHJlcGFyZV9tc3JfYml0bWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdH1cbiBcbi1cdGlmIChrdm1fdmNwdV9tYXBfcmVhZG9ubHkodmNwdSwgZ3BhX3RvX2dmbih2bWNzMTItXHUwMDNlbXNyX2JpdG1hcCksIFx1MDAyNm1hcCkpXG4mIzQzO1x0Q0xBU1Moa3ZtX3ZjcHVfbWFwX2xvY2FsX3JlYWRvbmx5LCBtKSh2Y3B1LCBncGFfdG9fZ2ZuKHZtY3MxMi1cdTAwM2Vtc3JfYml0bWFwKSk7XG4mIzQzO1x0aWYgKG0ucmV0KVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4tXHRtc3JfYml0bWFwX2wxID0gKHVuc2lnbmVkIGxvbmcgKiltYXAuaHZhO1xuJiM0MztcdG1zcl9iaXRtYXBfbDEgPSAodW5zaWduZWQgbG9uZyAqKW0ubWFwLmh2YTtcbiBcbiBcdC8qXG4gXHQgKiBUbyBrZWVwIHRoZSBjb250cm9sIGZsb3cgc2ltcGxlLCBwYXkgZWlnaHQgOC1ieXRlIHdyaXRlcyAoc2l4dGVlblxuQEAgLTgzNiw4ICYjNDM7ODM2LDYgQEAgc3RhdGljIGlubGluZSBib29sIG5lc3RlZF92bXhfcHJlcGFyZV9tc3JfYml0bWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcbiBcdG5lc3RlZF92bXhfbWVyZ2VfcG11X21zcl9iaXRtYXBzKHZjcHUsIG1zcl9iaXRtYXBfbDEsIG1zcl9iaXRtYXBfbDApO1xuIFxuLVx0a3ZtX3ZjcHVfdW5tYXAodmNwdSwgXHUwMDI2bWFwKTtcbi1cbiBcdHZteC1cdTAwM2VuZXN0ZWQuZm9yY2VfbXNyX2JpdG1hcF9yZWNhbGMgPSBmYWxzZTtcbiBcbiBcdHJldHVybiB0cnVlO1xuQEAgLTUwNjYsOCAmIzQzOzUwNjQsOSBAQCB2b2lkIF9fbmVzdGVkX3ZteF92bWV4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgdm1fZXhpdF9yZWFzb24sXG4gXHQvKiB0cnlpbmcgdG8gY2FuY2VsIHZtbGF1bmNoL3ZtcmVzdW1lIGlzIGEgYnVnICovXG4gXHRrdm1fd2Fybl9vbl9uZXN0ZWRfcnVuX3BlbmRpbmcodmNwdSk7XG4gXG4tI2lmZGVmIENPTkZJR19LVk1fSFlQRVJWXG4mIzQzO1x0LyogTm90ZSwgXCYjMzQ7Y2hlY2tpbmdcJiMzNDsgdGhlIHJlcXVlc3QgYWxzbyBjbGVhcnMgdGhlIHJlcXVlc3QuICovXG4gXHRpZiAoa3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9HRVRfTkVTVEVEX1NUQVRFX1BBR0VTLCB2Y3B1KSkge1xuJiM0MzsjaWZkZWYgQ09ORklHX0tWTV9IWVBFUlZcbiBcdFx0LypcbiBcdFx0ICogS1ZNX1JFUV9HRVRfTkVTVEVEX1NUQVRFX1BBR0VTIGlzIGFsc28gdXNlZCB0byBtYXBcbiBcdFx0ICogRW5saWdodGVuZWQgVk1DUyBhZnRlciBtaWdyYXRpb24gYW5kIHdlIHN0aWxsIG5lZWQgdG9cbkBAIC01MDc1LDggJiM0Mzs1MDc0LDggQEAgdm9pZCBfX25lc3RlZF92bXhfdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIHZtX2V4aXRfcmVhc29uLFxuIFx0XHQgKiB0aGUgZmlyc3QgTDIgcnVuLlxuIFx0XHQgKi9cbiBcdFx0KHZvaWQpbmVzdGVkX2dldF9ldm1jc19wYWdlKHZjcHUpO1xuLVx0fVxuICNlbmRpZlxuJiM0MztcdH1cbiBcbiBcdC8qIFNlcnZpY2UgcGVuZGluZyBUTEIgZmx1c2ggcmVxdWVzdHMgZm9yIEwyIGJlZm9yZSBzd2l0Y2hpbmcgdG8gTDEuICovXG4gXHRrdm1fc2VydmljZV9sb2NhbF90bGJfZmx1c2hfcmVxdWVzdHModmNwdSk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXG5pbmRleCA5ZGI2ZWI0MDIzYzQ4Zi4uYzU0ZGJmZGJjMzQ2YzggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuQEAgLTE0MjAsNiAmIzQzOzE0MjAsMjUgQEAgc3RhdGljIGlubGluZSB2b2lkIGt2bV92Y3B1X21hcF9tYXJrX2RpcnR5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdFx0a3ZtX3ZjcHVfbWFya19wYWdlX2RpcnR5KHZjcHUsIG1hcC1cdTAwM2VnZm4pO1xuIH1cbiBcbiYjNDM7dHlwZWRlZiBzdHJ1Y3Qge1xuJiM0MztcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbiYjNDM7XHRzdHJ1Y3Qga3ZtX2hvc3RfbWFwIG1hcDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0Mzt9IGt2bV92Y3B1X2xvY2FsX21hcF90O1xuJiM0MztcbiYjNDM7I2RlZmluZSBERUZJTkVfVkNQVV9NQVBfQ0xBU1Mocm8pXHRcdFx0XHRcdFxcXG4mIzQzO0RFRklORV9DTEFTUyhrdm1fdmNwdV9tYXBfbG9jYWwjI3JvLCBrdm1fdmNwdV9sb2NhbF9tYXBfdCxcdFx0XFxcbiYjNDM7XHQgICAgIGlmICghX1QucmV0KSBrdm1fdmNwdV91bm1hcChfVC52Y3B1LCBcdTAwMjZfVC5tYXApLFx0XHRcXFxuJiM0MztcdCAgICAgKHtcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdGt2bV92Y3B1X2xvY2FsX21hcF90IG0gPSB7IC52Y3B1ID0gdmNwdSB9O1x0XHRcXFxuJiM0MztcdFx0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdFx0bS5yZXQgPSBrdm1fdmNwdV9tYXAjI3JvKHZjcHUsIGdmbiwgXHUwMDI2bS5tYXApO1x0XHRcXFxuJiM0MztcdFx0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdFx0bTtcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0ICAgICB9KSwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBnZm5fdCBnZm4pO1xuJiM0MztERUZJTkVfVkNQVV9NQVBfQ0xBU1MoKTtcbiYjNDM7REVGSU5FX1ZDUFVfTUFQX0NMQVNTKF9yZWFkb25seSk7XG4mIzQzO1xuIHVuc2lnbmVkIGxvbmcga3ZtX3ZjcHVfZ2ZuX3RvX2h2YShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGdmbik7XG4gdW5zaWduZWQgbG9uZyBrdm1fdmNwdV9nZm5fdG9faHZhX3Byb3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBnZm5fdCBnZm4sIGJvb2wgKndyaXRhYmxlKTtcbiBpbnQga3ZtX3ZjcHVfcmVhZF9ndWVzdF9wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ2ZuX3QgZ2ZuLCB2b2lkICpkYXRhLCBpbnQgb2Zmc2V0LFxuZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2t2bV9tYWluLmMgYi92aXJ0L2t2bS9rdm1fbWFpbi5jXG5pbmRleCAyZGY4ZWU5ZWNmNmM2ZC4uZTllMzI2ODZlNDFiZTQgMTAwNjQ0XG4tLS0gYS92aXJ0L2t2bS9rdm1fbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi92aXJ0L2t2bS9rdm1fbWFpbi5jXG5AQCAtMzExOCw2ICYjNDM7MzExOCw5IEBAIGludCBfX2t2bV92Y3B1X21hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGdmbiwgc3RydWN0IGt2bV9ob3N0X21hcCAqbWFwLFxuIFx0XHQucGluID0gdHJ1ZSxcbiBcdH07XG4gXG4mIzQzO1x0aWYgKFdBUk5fT05fT05DRShtYXAtXHUwMDNlaHZhKSlcbiYjNDM7XHRcdGt2bV92Y3B1X3VubWFwKHZjcHUsIG1hcCk7XG4mIzQzO1xuIFx0bWFwLVx1MDAzZXBpbm5lZF9wYWdlID0gTlVMTDtcbiBcdG1hcC1cdTAwM2VwYWdlID0gTlVMTDtcbiBcdG1hcC1cdTAwM2VodmEgPSBOVUxMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA1OjU3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OywKICAgICYjMzQ7S1ZNX1NNTSYjMzQ7LAogICAgJiMzNDtLVk1fSFlQRVJWJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmVzdGVkX3N2bV92bXJ1biYjMzQ7LAogICAgJiMzNDtuZXN0ZWRfc3ZtX3ZtZXhpdCYjMzQ7LAogICAgJiMzNDt2bWxvYWRfaW50ZXJjZXB0aW9uJiMzNDssCiAgICAmIzM0O3Ztc2F2ZV9pbnRlcmNlcHRpb24mIzM0OywKICAgICYjMzQ7c3ZtX2VudGVyX3NtbSYjMzQ7LAogICAgJiMzNDtzdm1fbGVhdmVfc21tJiMzNDssCiAgICAmIzM0O25lc3RlZF92bXhfZW50ZXJfbm9uX3Jvb3RfbW9kZSYjMzQ7LAogICAgJiMzNDtfX25lc3RlZF92bXhfdm1leGl0JiMzNDssCiAgICAmIzM0O3ZteF9zZXRfbmVzdGVkX3N0YXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgY2xlYW51cCBjbGFzcyBga3ZtX3ZjcHVfbWFwX2xvY2FsYCBhbmQgdXNlcyBpdCB0byByZXBsYWNlIG1hbnVhbCBga3ZtX3ZjcHVfbWFwYCBhbmQgYGt2bV92Y3B1X3VubWFwYCBjYWxscyBpbiBzZXZlcmFsIEtWTSBmdW5jdGlvbnMgYWNyb3NzIHg4NiAoU1ZNIGFuZCBWTVgpIGFuZCBQb3dlclBDIChCb29rM1MgUFIpLiBJdCBhbHNvIGZpeGVzIGEgYnVnIGluIGBfX25lc3RlZF92bXhfdm1leGl0YCB3aGVyZSBga3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9HRVRfTkVTVEVEX1NUQVRFX1BBR0VTLCB2Y3B1KWAgd2FzIG9ubHkgY2FsbGVkIHdoZW4gYENPTkZJR19LVk1fSFlQRVJWYCB3YXMgZW5hYmxlZCwgYnV0IGNoZWNraW5nIHRoZSByZXF1ZXN0IGFsc28gY2xlYXJzIGl0LCBzbyBpdCBzaG91bGQgYmUgY2FsbGVkIHVuY29uZGl0aW9uYWxseS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBjb3JlIEtWTSBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyBjbGVhbnVwIGNsYXNzIHdvcmtzIGNvcnJlY3RseSBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIG1lbW9yeSBsZWFrcyBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMsIGFuZCB0byB2ZXJpZnkgdGhlIGZpeCBpbiBgX19uZXN0ZWRfdm14X3ZtZXhpdGAuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiODgwNDg1YzFlMzE0OWM0N2M3NWFkYjFmZWJhYzUwMDljNTg2MzgzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBKdWwgMjUgMDU6NTc6MjYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wci5jIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYwppbmRleCAyYmEyZGQyNmE3ZWFkOC4uZGE3YTAzOGUyNzAwZDIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYwpAQCAtNjM5LDI3ICYjNDM7NjM5LDI0IEBAIHN0YXRpYyB2b2lkIGt2bXBwY19zZXRfcHZyX3ByKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIHB2cikKICAqLwogc3RhdGljIHZvaWQga3ZtcHBjX3BhdGNoX2RjYnooc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtcHBjX3B0ZSAqcHRlKQogewotCXN0cnVjdCBrdm1faG9zdF9tYXAgbWFwOwogCXU2NCBocGFnZV9vZmZzZXQ7CiAJdTMyICpwYWdlOwogCWludCBpLCByOwogCi0JciA9IGt2bV92Y3B1X21hcCh2Y3B1LCBwdGUtJmd0O3JhZGRyICZndDsmZ3Q7IFBBR0VfU0hJRlQsICZhbXA7bWFwKTsKLQlpZiAocikKJiM0MzsJQ0xBU1Moa3ZtX3ZjcHVfbWFwX2xvY2FsLCBtKSh2Y3B1LCBwdGUtJmd0O3JhZGRyICZndDsmZ3Q7IFBBR0VfU0hJRlQpOwomIzQzOwlpZiAobS5yZXQpCiAJCXJldHVybjsKIAogCWhwYWdlX29mZnNldCA9IHB0ZS0mZ3Q7cmFkZHIgJmFtcDsgflBBR0VfTUFTSzsKIAlocGFnZV9vZmZzZXQgJmFtcDs9IH4weEZGRlVMTDsKIAlocGFnZV9vZmZzZXQgLz0gNDsKIAotCXBhZ2UgPSBtYXAuaHZhOwomIzQzOwlwYWdlID0gbS5tYXAuaHZhOwogCiAJLyogcGF0Y2ggZGNieiBpbnRvIHJlc2VydmVkIGluc3RydWN0aW9uLCBzbyB3ZSB0cmFwICovCiAJZm9yIChpPWhwYWdlX29mZnNldDsgaSAmbHQ7IGhwYWdlX29mZnNldCAmIzQzOyAoSFdfUEFHRV9TSVpFIC8gNCk7IGkmIzQzOyYjNDM7KQogCQlpZiAoKGJlMzJfdG9fY3B1KHBhZ2VbaV0pICZhbXA7IDB4ZmYwMDA3ZmYpID09IElOU19EQ0JaKQogCQkJcGFnZVtpXSAmYW1wOz0gY3B1X3RvX2JlMzIoMHhmZmZmZmZmNyk7Ci0KLQlrdm1fdmNwdV91bm1hcCh2Y3B1LCAmYW1wO21hcCk7CiB9CiAKIHN0YXRpYyBib29sIGt2bXBwY192aXNpYmxlX2dwYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jCmluZGV4IDVlM2UyODBjZDQ4M2UzLi43M2YzN2IwNTBkMGEwYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jCkBAIC0xMDg2LDE0ICYjNDM7MTA4NiwxNCBAQCBpbnQgZW50ZXJfc3ZtX2d1ZXN0X21vZGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdm1jYjEyX2dwYSwgYm9vbCBmcm9tX3ZtcnVuKQogc3RhdGljIGludCBuZXN0ZWRfc3ZtX2NvcHlfdm1jYjEyX3RvX2NhY2hlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHZtY2IxMl9ncGEpCiB7CiAJc3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7Ci0Jc3RydWN0IGt2bV9ob3N0X21hcCBtYXA7CiAJc3RydWN0IHZtY2IgKnZtY2IxMjsKIAlpbnQgciA9IDA7CiAKLQlpZiAoa3ZtX3ZjcHVfbWFwKHZjcHUsIGdwYV90b19nZm4odm1jYjEyX2dwYSksICZhbXA7bWFwKSkKJiM0MzsJQ0xBU1Moa3ZtX3ZjcHVfbWFwX2xvY2FsLCBtKSh2Y3B1LCBncGFfdG9fZ2ZuKHZtY2IxMl9ncGEpKTsKJiM0MzsJaWYgKG0ucmV0KQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCXZtY2IxMiA9IG1hcC5odmE7CiYjNDM7CXZtY2IxMiA9IG0ubWFwLmh2YTsKIAluZXN0ZWRfY29weV92bWNiX2NvbnRyb2xfdG9fY2FjaGUoc3ZtLCAmYW1wO3ZtY2IxMi0mZ3Q7Y29udHJvbCk7CiAJbmVzdGVkX2NvcHlfdm1jYl9zYXZlX3RvX2NhY2hlKHN2bSwgJmFtcDt2bWNiMTItJmd0O3NhdmUpOwogCkBAIC0xMTA3LDcgJiM0MzsxMTA3LDYgQEAgc3RhdGljIGludCBuZXN0ZWRfc3ZtX2NvcHlfdm1jYjEyX3RvX2NhY2hlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHZtY2IxMl9ncGEKIAkJciA9IC1FSU5WQUw7CiAJfQogCi0Ja3ZtX3ZjcHVfdW5tYXAodmNwdSwgJmFtcDttYXApOwogCXJldHVybiByOwogfQogCkBAIC0xMjUxLDE1ICYjNDM7MTI1MCwxMyBAQCBzdGF0aWMgaW50IG5lc3RlZF9zdm1fdm1leGl0X3VwZGF0ZV92bWNiMTIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCXN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpOwogCXN0cnVjdCB2bWNiICp2bWNiMDIgPSBzdm0tJmd0O25lc3RlZC52bWNiMDIucHRyOwotCXN0cnVjdCBrdm1faG9zdF9tYXAgbWFwOwogCXN0cnVjdCB2bWNiICp2bWNiMTI7Ci0JaW50IHJjOwogCi0JcmMgPSBrdm1fdmNwdV9tYXAodmNwdSwgZ3BhX3RvX2dmbihzdm0tJmd0O25lc3RlZC52bWNiMTJfZ3BhKSwgJmFtcDttYXApOwotCWlmIChyYykKLQkJcmV0dXJuIHJjOwomIzQzOwlDTEFTUyhrdm1fdmNwdV9tYXBfbG9jYWwsIG0pKHZjcHUsIGdwYV90b19nZm4oc3ZtLSZndDtuZXN0ZWQudm1jYjEyX2dwYSkpOwomIzQzOwlpZiAobS5yZXQpCiYjNDM7CQlyZXR1cm4gbS5yZXQ7CiAKLQl2bWNiMTIgPSBtYXAuaHZhOwomIzQzOwl2bWNiMTIgPSBtLm1hcC5odmE7CiAKIAl2bWNiMTItJmd0O3NhdmUuZXMgICAgID0gdm1jYjAyLSZndDtzYXZlLmVzOwogCXZtY2IxMi0mZ3Q7c2F2ZS5jcyAgICAgPSB2bWNiMDItJmd0O3NhdmUuY3M7CkBAIC0xMzE0LDcgJiM0MzsxMzExLDYgQEAgc3RhdGljIGludCBuZXN0ZWRfc3ZtX3ZtZXhpdF91cGRhdGVfdm1jYjEyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAkJCQkgICAgICAgdm1jYjEyLSZndDtjb250cm9sLmV4aXRfaW50X2luZm9fZXJyLAogCQkJCSAgICAgICBLVk1fSVNBX1NWTSk7CiAKLQlrdm1fdmNwdV91bm1hcCh2Y3B1LCAmYW1wO21hcCk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jCmluZGV4IDkxMjg2ZDQ2ZDEzYWRiLi43YTQxN2U3MTdmZDkxZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jCkBAIC0yMjE2LDcgJiM0MzsyMjE2LDYgQEAgc3RhdGljIGludCB2bWxvYWRfdm1zYXZlX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgdm1sb2FkKQogCXU2NCB2bWNiMTJfZ3BhID0ga3ZtX3JheF9yZWFkKHZjcHUpOwogCXN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpOwogCXN0cnVjdCB2bWNiICp2bWNiMTI7Ci0Jc3RydWN0IGt2bV9ob3N0X21hcCBtYXA7CiAJaW50IHJldDsKIAogCWlmIChuZXN0ZWRfc3ZtX2NoZWNrX3Blcm1pc3Npb25zKHZjcHUpKQpAQCAtMjIyNywxMCAmIzQzOzIyMjYsMTEgQEAgc3RhdGljIGludCB2bWxvYWRfdm1zYXZlX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgdm1sb2FkKQogCQlyZXR1cm4gMTsKIAl9CiAKLQlpZiAoa3ZtX3ZjcHVfbWFwKHZjcHUsIGdwYV90b19nZm4odm1jYjEyX2dwYSksICZhbXA7bWFwKSkKJiM0MzsJQ0xBU1Moa3ZtX3ZjcHVfbWFwX2xvY2FsLCBtKSh2Y3B1LCBncGFfdG9fZ2ZuKHZtY2IxMl9ncGEpKTsKJiM0MzsJaWYgKG0ucmV0KQogCQlyZXR1cm4ga3ZtX2hhbmRsZV9tZW1vcnlfZmFpbHVyZSh2Y3B1LCBYODZFTVVMX0lPX05FRURFRCwgTlVMTCk7CiAKLQl2bWNiMTIgPSBtYXAuaHZhOwomIzQzOwl2bWNiMTIgPSBtLm1hcC5odmE7CiAKIAlyZXQgPSBrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTsKIApAQCAtMjI0Myw4ICYjNDM7MjI0Myw2IEBAIHN0YXRpYyBpbnQgdm1sb2FkX3Ztc2F2ZV9pbnRlcmNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIHZtbG9hZCkKIAkJc3ZtX2NvcHlfdm1sb2Fkc2F2ZV9zdGF0ZSh2bWNiMTIsIHN2bS0mZ3Q7dm1jYjAxLnB0cik7CiAJfQogCi0Ja3ZtX3ZjcHVfdW5tYXAodmNwdSwgJmFtcDttYXApOwotCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNDk4OSw3ICYjNDM7NDk4Nyw2IEBAIHN0YXRpYyBpbnQgc3ZtX3NtaV9hbGxvd2VkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBmb3JfaW5qZWN0aW9uKQogc3RhdGljIGludCBzdm1fZW50ZXJfc21tKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5pb24ga3ZtX3NtcmFtICpzbXJhbSkKIHsKIAlzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTsKLQlzdHJ1Y3Qga3ZtX2hvc3RfbWFwIG1hcF9zYXZlOwogCiAJaWYgKCFpc19ndWVzdF9tb2RlKHZjcHUpKQogCQlyZXR1cm4gMDsKQEAgLTUwMjMsMjQgJiM0Mzs1MDIwLDIwIEBAIHN0YXRpYyBpbnQgc3ZtX2VudGVyX3NtbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuaW9uIGt2bV9zbXJhbSAqc21yYW0pCiAJICogdGhhdCwgc2VlIHN2bV9wcmVwYXJlX3N3aXRjaF90b19ndWVzdCgpKSB3aGljaCBtdXN0IGJlCiAJICogcHJlc2VydmVkLgogCSAqLwotCWlmIChrdm1fdmNwdV9tYXAodmNwdSwgZ3BhX3RvX2dmbihzdm0tJmd0O25lc3RlZC5oc2F2ZV9tc3IpLCAmYW1wO21hcF9zYXZlKSkKJiM0MzsJQ0xBU1Moa3ZtX3ZjcHVfbWFwX2xvY2FsLCBtX3NhdmUpKHZjcHUsIGdwYV90b19nZm4oc3ZtLSZndDtuZXN0ZWQuaHNhdmVfbXNyKSk7CiYjNDM7CWlmIChtX3NhdmUucmV0KQogCQlyZXR1cm4gMTsKIAogCUJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3Qgdm1jYiwgc2F2ZSkgIT0gMHg0MDApOwogCi0Jc3ZtX2NvcHlfdm1ydW5fc3RhdGUobWFwX3NhdmUuaHZhICYjNDM7IDB4NDAwLAotCQkJICAgICAmYW1wO3N2bS0mZ3Q7dm1jYjAxLnB0ci0mZ3Q7c2F2ZSk7Ci0KLQlrdm1fdmNwdV91bm1hcCh2Y3B1LCAmYW1wO21hcF9zYXZlKTsKJiM0MzsJc3ZtX2NvcHlfdm1ydW5fc3RhdGUobV9zYXZlLm1hcC5odmEgJiM0MzsgMHg0MDAsICZhbXA7c3ZtLSZndDt2bWNiMDEucHRyLSZndDtzYXZlKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBzdm1fbGVhdmVfc21tKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgY29uc3QgdW5pb24ga3ZtX3NtcmFtICpzbXJhbSkKIHsKIAlzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTsKLQlzdHJ1Y3Qga3ZtX2hvc3RfbWFwIG1hcCwgbWFwX3NhdmU7CiAJc3RydWN0IHZtY2IgKnZtY2IxMjsKLQlpbnQgcmV0OwogCiAJY29uc3Qgc3RydWN0IGt2bV9zbXJhbV9zdGF0ZV82NCAqc21yYW02NCA9ICZhbXA7c21yYW0tJmd0O3NtcmFtNjQ7CiAKQEAgLTUwNTcsMjIgJiM0Mzs1MDUwLDIzIEBAIHN0YXRpYyBpbnQgc3ZtX2xlYXZlX3NtbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGNvbnN0IHVuaW9uIGt2bV9zbXJhbSAqc21yYW0pCiAJaWYgKCEoc21yYW02NC0mZ3Q7ZWZlciAmYW1wOyBFRkVSX1NWTUUpKQogCQlyZXR1cm4gMTsKIAotCWlmIChrdm1fdmNwdV9tYXAodmNwdSwgZ3BhX3RvX2dmbihzbXJhbTY0LSZndDtzdm1fZ3Vlc3Rfdm1jYl9ncGEpLCAmYW1wO21hcCkpCiYjNDM7CUNMQVNTKGt2bV92Y3B1X21hcF9sb2NhbCwgbSkodmNwdSwgZ3BhX3RvX2dmbihzbXJhbTY0LSZndDtzdm1fZ3Vlc3Rfdm1jYl9ncGEpKTsKJiM0MzsJaWYgKG0ucmV0KQogCQlyZXR1cm4gMTsKIAotCXJldCA9IDE7Ci0JaWYgKGt2bV92Y3B1X21hcCh2Y3B1LCBncGFfdG9fZ2ZuKHN2bS0mZ3Q7bmVzdGVkLmhzYXZlX21zciksICZhbXA7bWFwX3NhdmUpKQotCQlnb3RvIHVubWFwX21hcDsKJiM0MzsJQ0xBU1Moa3ZtX3ZjcHVfbWFwX2xvY2FsLCBtX3NhdmUpKHZjcHUsIGdwYV90b19nZm4oc3ZtLSZndDtuZXN0ZWQuaHNhdmVfbXNyKSk7CiYjNDM7CWlmIChtX3NhdmUucmV0KQomIzQzOwkJcmV0dXJuIDE7CiAKIAlpZiAoc3ZtX2FsbG9jYXRlX25lc3RlZChzdm0pKQotCQlnb3RvIHVubWFwX3NhdmU7CiYjNDM7CQlyZXR1cm4gMTsKIAogCS8qCiAJICogUmVzdG9yZSBMMSBob3N0IHN0YXRlIGZyb20gTDEgSFNBVkUgYXJlYSBhcyBWTUNCMDEgd2FzCiAJICogdXNlZCBkdXJpbmcgU01NIChzZWUgc3ZtX2VudGVyX3NtbSgpKQogCSAqLwogCi0Jc3ZtX2NvcHlfdm1ydW5fc3RhdGUoJmFtcDtzdm0tJmd0O3ZtY2IwMS5wdHItJmd0O3NhdmUsIG1hcF9zYXZlLmh2YSAmIzQzOyAweDQwMCk7CiYjNDM7CXN2bV9jb3B5X3ZtcnVuX3N0YXRlKCZhbXA7c3ZtLSZndDt2bWNiMDEucHRyLSZndDtzYXZlLCBtX3NhdmUubWFwLmh2YSAmIzQzOyAweDQwMCk7CiAKIAkvKgogCSAqIEVudGVyIHRoZSBuZXN0ZWQgZ3Vlc3Qgbm93CkBAIC01MDgwLDI0ICYjNDM7NTA3NCwxOCBAQCBzdGF0aWMgaW50IHN2bV9sZWF2ZV9zbW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBjb25zdCB1bmlvbiBrdm1fc21yYW0gKnNtcmFtKQogCiAJdm1jYl9tYXJrX2FsbF9kaXJ0eShzdm0tJmd0O3ZtY2IwMS5wdHIpOwogCi0Jdm1jYjEyID0gbWFwLmh2YTsKJiM0MzsJdm1jYjEyID0gbS5tYXAuaHZhOwogCW5lc3RlZF9jb3B5X3ZtY2JfY29udHJvbF90b19jYWNoZShzdm0sICZhbXA7dm1jYjEyLSZndDtjb250cm9sKTsKIAluZXN0ZWRfY29weV92bWNiX3NhdmVfdG9fY2FjaGUoc3ZtLCAmYW1wO3ZtY2IxMi0mZ3Q7c2F2ZSk7CiAKIAlpZiAobmVzdGVkX3N2bV9jaGVja19jYWNoZWRfdm1jYjEyKHZjcHUpICZsdDsgMCkKLQkJZ290byB1bm1hcF9zYXZlOwomIzQzOwkJcmV0dXJuIDE7CiAKIAlpZiAoZW50ZXJfc3ZtX2d1ZXN0X21vZGUodmNwdSwgc21yYW02NC0mZ3Q7c3ZtX2d1ZXN0X3ZtY2JfZ3BhLCBmYWxzZSkgIT0gMCkKLQkJZ290byB1bm1hcF9zYXZlOwomIzQzOwkJcmV0dXJuIDE7CiAKLQlyZXQgPSAwOwogCXZjcHUtJmd0O2FyY2gubmVzdGVkX3J1bl9wZW5kaW5nID0gS1ZNX05FU1RFRF9SVU5fUEVORElORzsKLQotdW5tYXBfc2F2ZToKLQlrdm1fdmNwdV91bm1hcCh2Y3B1LCAmYW1wO21hcF9zYXZlKTsKLXVubWFwX21hcDoKLQlrdm1fdmNwdV91bm1hcCh2Y3B1LCAmYW1wO21hcCk7Ci0JcmV0dXJuIHJldDsKJiM0MzsJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIHN2bV9lbmFibGVfc21pX3dpbmRvdyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jIGIvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYwppbmRleCBiNTQ2MGRlNGIxYTcyZi4uZWY3OTc2OWM2Mjg3MTggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYwpAQCAtNzMwLDcgJiM0Mzs3MzAsNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbmVzdGVkX3ZteF9wcmVwYXJlX21zcl9iaXRtYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCWludCBtc3I7CiAJdW5zaWduZWQgbG9uZyAqbXNyX2JpdG1hcF9sMTsKIAl1bnNpZ25lZCBsb25nICptc3JfYml0bWFwX2wwID0gdm14LSZndDtuZXN0ZWQudm1jczAyLm1zcl9iaXRtYXA7Ci0Jc3RydWN0IGt2bV9ob3N0X21hcCBtYXA7CiAKIAkvKiBOb3RoaW5nIHRvIGRvIGlmIHRoZSBNU1IgYml0bWFwIGlzIG5vdCBpbiB1c2UuICAqLwogCWlmICghY3B1X2hhc192bXhfbXNyX2JpdG1hcCgpIHx8CkBAIC03NTMsMTAgJiM0Mzs3NTIsMTEgQEAgc3RhdGljIGlubGluZSBib29sIG5lc3RlZF92bXhfcHJlcGFyZV9tc3JfYml0bWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAkJCXJldHVybiB0cnVlOwogCX0KIAotCWlmIChrdm1fdmNwdV9tYXBfcmVhZG9ubHkodmNwdSwgZ3BhX3RvX2dmbih2bWNzMTItJmd0O21zcl9iaXRtYXApLCAmYW1wO21hcCkpCiYjNDM7CUNMQVNTKGt2bV92Y3B1X21hcF9sb2NhbF9yZWFkb25seSwgbSkodmNwdSwgZ3BhX3RvX2dmbih2bWNzMTItJmd0O21zcl9iaXRtYXApKTsKJiM0MzsJaWYgKG0ucmV0KQogCQlyZXR1cm4gZmFsc2U7CiAKLQltc3JfYml0bWFwX2wxID0gKHVuc2lnbmVkIGxvbmcgKiltYXAuaHZhOwomIzQzOwltc3JfYml0bWFwX2wxID0gKHVuc2lnbmVkIGxvbmcgKiltLm1hcC5odmE7CiAKIAkvKgogCSAqIFRvIGtlZXAgdGhlIGNvbnRyb2wgZmxvdyBzaW1wbGUsIHBheSBlaWdodCA4LWJ5dGUgd3JpdGVzIChzaXh0ZWVuCkBAIC04MzYsOCAmIzQzOzgzNiw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBuZXN0ZWRfdm14X3ByZXBhcmVfbXNyX2JpdG1hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAKIAluZXN0ZWRfdm14X21lcmdlX3BtdV9tc3JfYml0bWFwcyh2Y3B1LCBtc3JfYml0bWFwX2wxLCBtc3JfYml0bWFwX2wwKTsKIAotCWt2bV92Y3B1X3VubWFwKHZjcHUsICZhbXA7bWFwKTsKLQogCXZteC0mZ3Q7bmVzdGVkLmZvcmNlX21zcl9iaXRtYXBfcmVjYWxjID0gZmFsc2U7CiAKIAlyZXR1cm4gdHJ1ZTsKQEAgLTUwNjYsOCAmIzQzOzUwNjQsOSBAQCB2b2lkIF9fbmVzdGVkX3ZteF92bWV4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgdm1fZXhpdF9yZWFzb24sCiAJLyogdHJ5aW5nIHRvIGNhbmNlbCB2bWxhdW5jaC92bXJlc3VtZSBpcyBhIGJ1ZyAqLwogCWt2bV93YXJuX29uX25lc3RlZF9ydW5fcGVuZGluZyh2Y3B1KTsKIAotI2lmZGVmIENPTkZJR19LVk1fSFlQRVJWCiYjNDM7CS8qIE5vdGUsICYjMzQ7Y2hlY2tpbmcmIzM0OyB0aGUgcmVxdWVzdCBhbHNvIGNsZWFycyB0aGUgcmVxdWVzdC4gKi8KIAlpZiAoa3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9HRVRfTkVTVEVEX1NUQVRFX1BBR0VTLCB2Y3B1KSkgewomIzQzOyNpZmRlZiBDT05GSUdfS1ZNX0hZUEVSVgogCQkvKgogCQkgKiBLVk1fUkVRX0dFVF9ORVNURURfU1RBVEVfUEFHRVMgaXMgYWxzbyB1c2VkIHRvIG1hcAogCQkgKiBFbmxpZ2h0ZW5lZCBWTUNTIGFmdGVyIG1pZ3JhdGlvbiBhbmQgd2Ugc3RpbGwgbmVlZCB0bwpAQCAtNTA3NSw4ICYjNDM7NTA3NCw4IEBAIHZvaWQgX19uZXN0ZWRfdm14X3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiB2bV9leGl0X3JlYXNvbiwKIAkJICogdGhlIGZpcnN0IEwyIHJ1bi4KIAkJICovCiAJCSh2b2lkKW5lc3RlZF9nZXRfZXZtY3NfcGFnZSh2Y3B1KTsKLQl9CiAjZW5kaWYKJiM0MzsJfQogCiAJLyogU2VydmljZSBwZW5kaW5nIFRMQiBmbHVzaCByZXF1ZXN0cyBmb3IgTDIgYmVmb3JlIHN3aXRjaGluZyB0byBMMS4gKi8KIAlrdm1fc2VydmljZV9sb2NhbF90bGJfZmx1c2hfcmVxdWVzdHModmNwdSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKaW5kZXggOWRiNmViNDAyM2M0OGYuLmM1NGRiZmRiYzM0NmM4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oCkBAIC0xNDIwLDYgJiM0MzsxNDIwLDI1IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fdmNwdV9tYXBfbWFya19kaXJ0eShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJCWt2bV92Y3B1X21hcmtfcGFnZV9kaXJ0eSh2Y3B1LCBtYXAtJmd0O2dmbik7CiB9CiAKJiM0Mzt0eXBlZGVmIHN0cnVjdCB7CiYjNDM7CXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKJiM0MzsJc3RydWN0IGt2bV9ob3N0X21hcCBtYXA7CiYjNDM7CWludCByZXQ7CiYjNDM7fSBrdm1fdmNwdV9sb2NhbF9tYXBfdDsKJiM0MzsKJiM0MzsjZGVmaW5lIERFRklORV9WQ1BVX01BUF9DTEFTUyhybykJCQkJCVwKJiM0MztERUZJTkVfQ0xBU1Moa3ZtX3ZjcHVfbWFwX2xvY2FsIyNybywga3ZtX3ZjcHVfbG9jYWxfbWFwX3QsCQlcCiYjNDM7CSAgICAgaWYgKCFfVC5yZXQpIGt2bV92Y3B1X3VubWFwKF9ULnZjcHUsICZhbXA7X1QubWFwKSwJCVwKJiM0MzsJICAgICAoewkJCQkJCQkJXAomIzQzOwkJa3ZtX3ZjcHVfbG9jYWxfbWFwX3QgbSA9IHsgLnZjcHUgPSB2Y3B1IH07CQlcCiYjNDM7CQkJCQkJCQkJXAomIzQzOwkJbS5yZXQgPSBrdm1fdmNwdV9tYXAjI3JvKHZjcHUsIGdmbiwgJmFtcDttLm1hcCk7CQlcCiYjNDM7CQkJCQkJCQkJXAomIzQzOwkJbTsJCQkJCQkJXAomIzQzOwkgICAgIH0pLCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGdmbik7CiYjNDM7REVGSU5FX1ZDUFVfTUFQX0NMQVNTKCk7CiYjNDM7REVGSU5FX1ZDUFVfTUFQX0NMQVNTKF9yZWFkb25seSk7CiYjNDM7CiB1bnNpZ25lZCBsb25nIGt2bV92Y3B1X2dmbl90b19odmEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBnZm5fdCBnZm4pOwogdW5zaWduZWQgbG9uZyBrdm1fdmNwdV9nZm5fdG9faHZhX3Byb3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBnZm5fdCBnZm4sIGJvb2wgKndyaXRhYmxlKTsKIGludCBrdm1fdmNwdV9yZWFkX2d1ZXN0X3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBnZm5fdCBnZm4sIHZvaWQgKmRhdGEsIGludCBvZmZzZXQsCmRpZmYgLS1naXQgYS92aXJ0L2t2bS9rdm1fbWFpbi5jIGIvdmlydC9rdm0va3ZtX21haW4uYwppbmRleCAyZGY4ZWU5ZWNmNmM2ZC4uZTllMzI2ODZlNDFiZTQgMTAwNjQ0Ci0tLSBhL3ZpcnQva3ZtL2t2bV9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvdmlydC9rdm0va3ZtX21haW4uYwpAQCAtMzExOCw2ICYjNDM7MzExOCw5IEBAIGludCBfX2t2bV92Y3B1X21hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGdmbiwgc3RydWN0IGt2bV9ob3N0X21hcCAqbWFwLAogCQkucGluID0gdHJ1ZSwKIAl9OwogCiYjNDM7CWlmIChXQVJOX09OX09OQ0UobWFwLSZndDtodmEpKQomIzQzOwkJa3ZtX3ZjcHVfdW5tYXAodmNwdSwgbWFwKTsKJiM0MzsKIAltYXAtJmd0O3Bpbm5lZF9wYWdlID0gTlVMTDsKIAltYXAtJmd0O3BhZ2UgPSBOVUxMOwogCW1hcC0mZ3Q7aHZhID0gTlVMTDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDU6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjk4NQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDY1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLVk0gUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgaW50cm9kdWNlcyBgREVGSU5FX1ZDUFVfTUFQX0NMQVNTYCBhbmQgbGV2ZXJhZ2VzIGBDTEFTUyhrdm1fdmNwdV9tYXBfbG9jYWwsIG0pYCB0byBtYW5hZ2UgcmVzb3VyY2UgY2xlYW51cCB3aXRoaW4gdGhlIEtWTSBjb2RlLiBFc3NlbnRpYWxseSwgaXQmIzM5O3MgcmVwbGFjaW5nIG1hbnVhbCBtYXBwaW5nL3VubWFwcGluZyB3aXRoIGEgY2xhc3MgdGhhdCBoYW5kbGVzIHVubWFwcGluZyBhdXRvbWF0aWNhbGx5IHdoZW4gaXQgZ29lcyBvdXQgb2Ygc2NvcGUsIGEgZ29vZCBob3VzZWtlZXBpbmcgaW1wcm92ZW1lbnQuIFRoaXMgY2xhc3MgaXMgYmVpbmcgZGVwbG95ZWQgYWNyb3NzIHNldmVyYWwgYXJjaGl0ZWN0dXJlcyBhbmQgZnVuY3Rpb25zOiBgYm9vazNzX3ByLmNgJiMzOTtzIGBrdm1wcGNfcGF0Y2hfZGNiemAsIHNvbWUgbmVzdGVkIFNWTS9WTVggZnVuY3Rpb25zIGxpa2UgYG5lc3RlZF9zdm1fY29weV92bWNiMTJfdG9fY2FjaGVgLCBgbmVzdGVkX3N2bV92bWV4aXRfdXBkYXRlX3ZtY2IxMmAsICBgdm1sb2FkX3Ztc2F2ZV9pbnRlcmNlcHRpb25gLCBgc3ZtX2VudGVyX3NtbWAsIGBzdm1fbGVhdmVfc21tYCwgYG5lc3RlZF92bXhfcHJlcGFyZV9tc3JfYml0bWFwYCwgYF9fbmVzdGVkX3ZteF92bWV4aXRgLCBhbmQgYF9fa3ZtX3ZjcHVfbWFwYC4KClRoZSBwYXRjaCBhbHNvIGhhcyBhIGZpeCBmb3IgYF9fbmVzdGVkX3ZteF92bWV4aXRgIHdoZXJlIGBrdm1fY2hlY2tfcmVxdWVzdGAgd2FzIGNvbmRpdGlvbmFsbHkgY2FsbGVkLCBidXQgbm93IGl0JiMzOTtzIGNhbGxlZCB1bmNvbmRpdGlvbmFsbHksIHdoaWNoIEkgc3VzcGVjdCBoYXMgaW1wbGljYXRpb25zIGZvciByZXF1ZXN0IGhhbmRsaW5nLCBlc3BlY2lhbGx5IGdpdmVuIHRoYXQgY2hlY2tpbmcgdGhlIHJlcXVlc3QgYWxzbyBjbGVhcnMgaXQuIFRoYXQmIzM5O3MgYSBkZWZpbml0ZSBwb2ludCBvZiBpbnRlcmVzdC4KCk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbjogSXMgdGhpcyBmdXp6LXdvcnRoeT8gQWJzb2x1dGVseS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBub3QganVzdCBhIHJlZmFjdG9yaW5nLiBUaGUgdXNlIG9mIHRoaXMgY2xlYW51cCBjbGFzcyBpbiBuZXN0ZWQgU1ZNLCBWTVgsIGFuZCBCb29rM1MgUFIsIHBsdXMgdGhlIGZpeCBpbiBgX19uZXN0ZWRfdm14X3ZtZXhpdGAsIG1lYW5zIHdlIGNvdWxkIHBvdGVudGlhbGx5IGV4cG9zZSBzb21lIGludGVyZXN0aW5nIGJ1Z3MuIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRob3NlIGtleSBmdW5jdGlvbnMgd2hlcmUgdGhlIG5ldyBjbGVhbnVwIGNsYXNzIGlzIHVzZWQgYW5kIHRoZSBidWcgZml4IGlzIGltcGxlbWVudGVkLgoKR2l2ZW4gdGhlIGFyY2hpdGVjdHVyZSBjb3ZlcmFnZSwgSSYjMzk7bGwgbmVlZCB0byBmb2N1cyBvbiB0aGUgeDg2IHBhcnRzLCB3aXRoIGBLVk1gLCBgS1ZNX0FNRGAsIGFuZCBgS1ZNX0lOVEVMYCBlbmFibGVkLCBidXQgSSBzaG91bGQgYWxzbyByZXZpZXcgYEtWTV9CT09LM1NfNjRfUFJgIGFzIHBhcnQgb2YgdGhlIGNvdmVyYWdlLiBUaW1lIHRvIGNoZWNrIHRob3NlIEtjb25maWcgZmlsZXMsIGFuZCB0aGVuIGJ1aWxkIGEgZnV6emluZyB0YXJnZXQgdGhhdCBleGVyY2lzZXMgdGhlc2UgZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA1OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxuYXJjaC94ODYva3ZtL0tjb25maWctMTktXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNX1g4NlxuYXJjaC94ODYva3ZtL0tjb25maWctMjEtXHRkZWZfdHJpc3RhdGUgS1ZNIGlmIChLVk1fSU5URUwgIT0gbiB8fCBLVk1fQU1EICE9IG4pXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctNTEtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo1Mjpjb25maWcgS1ZNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01My1cdHRyaXN0YXRlIFwmIzM0O0tlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTY4LVxuYXJjaC94ODYva3ZtL0tjb25maWc6Njk6Y29uZmlnIEtWTV9XRVJST1JcbmFyY2gveDg2L2t2bS9LY29uZmlnLTcwLVx0Ym9vbCBcJiMzNDtDb21waWxlIEtWTSB3aXRoIC1XZXJyb3JcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjgzOmNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04NC1cdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctOTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo5Njpjb25maWcgS1ZNX0lOVEVMXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05Ny1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgSW50ZWwgKGFuZCBjb21wYXRpYmxlKSBwcm9jZXNzb3JzIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDYtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMDc6Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA4LSAgICAgICAgYm9vbCBcJiMzNDtDaGVjayB0aGF0IGd1ZXN0cyBkbyBub3QgcmVjZWl2ZSAjVkUgZXhjZXB0aW9uc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzQ6Y29uZmlnIEtWTV9JTlRFTF9URFhcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cdGJvb2wgXCYjMzQ7SW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE0Njpjb25maWcgS1ZNX0FNRFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ3LVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVx0Ym9vbCBcJiMzNDtBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTcxLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTcyOmNvbmZpZyBLVk1fSU9BUElDXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzMtXHRib29sIFwmIzM0O0kvTyBBUElDLCBQSUMsIGFuZCBQSVQgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTgxLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTgyOmNvbmZpZyBLVk1fU01NXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODMtXHRib29sIFwmIzM0O1N5c3RlbSBNYW5hZ2VtZW50IE1vZGUgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTkyLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTkzOmNvbmZpZyBLVk1fSFlQRVJWXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTQtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIE1pY3Jvc29mdCBIeXBlci1WIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwNi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwNzpjb25maWcgS1ZNX1hFTlxuYXJjaC94ODYva3ZtL0tjb25maWctMjA4LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBYZW4gaHlwZXJjYWxsIGludGVyZmFjZVwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIxNjpjb25maWcgS1ZNX1BST1ZFX01NVVxuYXJjaC94ODYva3ZtL0tjb25maWctMjE3LVx0Ym9vbCBcJiMzNDtQcm92ZSBLVk0gTU1VIGNvcnJlY3RuZXNzXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMjI4LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjI5OmNvbmZpZyBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMC1cdGJvb2xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzMjpjb25maWcgS1ZNX01BWF9OUl9WQ1BVU1xuYXJjaC94ODYva3ZtL0tjb25maWctMjMzLVx0aW50IFwmIzM0O01heGltdW0gbnVtYmVyIG9mIHZDUFVzIHBlciBLVk0gZ3Vlc3RcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwNTo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MzYyCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjoKCioqSW52ZXN0aWdhdGluZyBLVk0gQ29uZmlndXJhdGlvbiBQb3NzaWJpbGl0aWVzKioKCk9rYXksIHNvIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IEtWTSwgYW5kIGltbWVkaWF0ZWx5IG15IG1pbmQganVtcHMgdG8gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uczogYEtWTWAsIGBLVk1fQU1EYCwgYEtWTV9JTlRFTGAsIGBLVk1fU01NYCwgYW5kIGBLVk1fSFlQRVJWYC4gVGhlc2UgYXJlIHRoZSBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50cywgdGhlIGNvcmUgYnVpbGRpbmcgYmxvY2tzIGFuZCB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGZsYXZvcnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSBjb25maWd1cmF0aW9uIEkmIzM5O20gbG9va2luZyBmb3IgLSBgS1ZNX0JPT0szU182NF9QUmAgLSBleGlzdHMuIFRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpcyB0aGUgUG93ZXJQQyBLY29uZmlnIGZpbGUuIExldCYjMzk7cyBleGFtaW5lIGBhcmNoL3Bvd2VycGMva3ZtL0tjb25maWdgIHRvIHNlZSBpZiBgS1ZNX0JPT0szU182NF9QUmAgaXMgZGVmaW5lZCB0aGVyZS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBzb21lIGNvbnRleHQgYWJvdXQgaXRzIHB1cnBvc2UsIGRlcGVuZGVuY2llcywgYW5kIGlmIGl0JiMzOTtzIGV2ZW4gYSB2aWFibGUgb3B0aW9uIGZvciBjb25zaWRlcmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA1OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk1fQk9PSzNTXzY0X1BSJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZz03OT1jb25maWcgS1ZNX0JPT0szU182NF9IVlxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy05OS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxMDA6Y29uZmlnIEtWTV9CT09LM1NfNjRfUFJcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xMDEtXHR0cmlzdGF0ZSBcJiMzNDtLVk0gc3VwcG9ydCB3aXRob3V0IHVzaW5nIGh5cGVydmlzb3IgbW9kZSBpbiBob3N0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDU6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTc4MwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDEwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIGFuZCBDb2RlIENoYW5nZXMqKgoKT2theSwgc28gSSBzZWUgdGhpcyBwYXRjaCBpcyB3b3JraW5nIHdpdGggUG93ZXJQQywgZ2l2ZW4gdGhlIGBLVk1fQk9PSzNTXzY0X1BSYCBjb25maWd1cmF0aW9uLiBUaGF0JiMzOTtzIGdvb2QgdG8gY29uZmlybS4gTm93LCBsZXQmIzM5O3Mgc2VlIGFib3V0IHRoZXNlIGBLVk1fU01NYCBhbmQgYEtWTV9IWVBFUlZgIHNldHRpbmdzLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIHBhdGNoIGhhcyBhbnkgZGVwZW5kZW5jaWVzIG9uIHRob3NlIG9yIGlmIHRoZXkgYXJlIHJlbGV2YW50IGluIGFueSB3YXkuCgpUaGUgY29kZSBtb2RpZmljYXRpb25zIGFyZSBmb2N1c2luZyBvbiBgc3ZtX2VudGVyX3NtbWAgYW5kIGBzdm1fbGVhdmVfc21tYCwgd2hpY2ggSSBpbW1lZGlhdGVseSByZWNvZ25pemUgYXMgeDg2LXNwZWNpZmljLCBwYXJ0aWN1bGFybHkgdGhlIFNlY3VyZSBWaXJ0dWFsIE1hY2hpbmUgKFNWTSkgaW1wbGVtZW50YXRpb24uIFRob3NlIGZ1bmN0aW9ucyBhcmUgcmlnaHQgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdGhlbSB0byBiZSwgaW5zaWRlIGBhcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jYC4KClRoZSBrZXkgcXVlc3Rpb24gaXMgd2hldGhlciB0aGVzZSBjaGFuZ2VzIGFyZSBndWFyZGVkIGJ5IGBDT05GSUdfS1ZNX1NNTWAuIElmIHRoZXkgYXJlLCBpdCB3aWxsIGNvbnN0cmFpbiB0aGUgZmVhdHVyZXMsIHdoaWxlIGlmIG5vdCwgdGhlIGZlYXR1cmVzIHdpbGwgYmUgZW5hYmxlZCBmb3IgdGhlIEtWTSBidWlsZC4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIGFuZCBpbnRlbmRlZCB1c2Ugb2YgdGhlc2UgbW9kaWZpY2F0aW9ucy4gSSYjMzk7bGwgY2hlY2sgdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIGxpa2VseSB0aGUgS2NvbmZpZyBmaWxlcyB0byBkZXRlcm1pbmUgdGhlIGRlcGVuZGVuY3kuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDU6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3ZtX2VudGVyX3NtbSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bS9zdm0uYz00OTcxPXN0YXRpYyBpbnQgc3ZtX3NtaV9hbGxvd2VkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBmb3JfaW5qZWN0aW9uKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNDk4Ni1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6NDk4NzpzdGF0aWMgaW50IHN2bV9lbnRlcl9zbW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bmlvbiBrdm1fc21yYW0gKnNtcmFtKVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy00OTg4LXtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTUwMzM9c3RhdGljIGludCBzdm1fbGVhdmVfc21tKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgY29uc3QgdW5pb24ga3ZtX3NtcmFtICpzbXJhbSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTUwNjUtXHQgKiBSZXN0b3JlIEwxIGhvc3Qgc3RhdGUgZnJvbSBMMSBIU0FWRSBhcmVhIGFzIFZNQ0IwMSB3YXNcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6NTA2NjpcdCAqIHVzZWQgZHVyaW5nIFNNTSAoc2VlIHN2bV9lbnRlcl9zbW0oKSlcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNTA2Ny1cdCAqL1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9NTMwMj1zdHJ1Y3Qga3ZtX3g4Nl9vcHMgc3ZtX3g4Nl9vcHMgX19pbml0ZGF0YSA9IHtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTU0MTItXHQuc21pX2FsbG93ZWQgPSBzdm1fc21pX2FsbG93ZWQsXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjU0MTM6XHQuZW50ZXJfc21tID0gc3ZtX2VudGVyX3NtbSxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNTQxNC1cdC5sZWF2ZV9zbW0gPSBzdm1fbGVhdmVfc21tLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA1OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjM3CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGNyYWZ0ZWQgd2l0aCB0aGUgdW5kZXJzdGFuZGluZyB0aGF0IEkmIzM5O20gZGlzY3Vzc2luZyB0aGlzIHdpdGggYSBmZWxsb3cgZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIEtWTSwgU01NLCBhbmQgUG90ZW50aWFsIEh5cGVyLVYgSW50ZXJhY3Rpb25zKioKClJpZ2h0LCBzbyBpdCBhcHBlYXJzIHdlJiMzOTtyZSBhbHdheXMgZGVhbGluZyB3aXRoIGEgY29tcGlsZWQgZW52aXJvbm1lbnQsIHdoaWNoIG1ha2VzIHRoaW5ncyBhIGJpdCBjbGVhbmVyLCBidXQgU01NIGZ1bmN0aW9uYWxpdHkgYWJzb2x1dGVseSByZXF1aXJlcyBgS1ZNX1NNTWAuIEkmIzM5O20gaW1tZWRpYXRlbHkgdGhpbmtpbmcsICYjMzQ7T2theSwgdGhhdCYjMzk7cyBleHBlY3RlZC4gV2hlcmUgbWlnaHQgdGhpcyBiZSBpbnRlcmFjdGluZyB3aXRoIG90aGVyIHZpcnR1YWxpemF0aW9uIGxheWVycz8mIzM0OwoKVGhlIG5leHQgbG9naWNhbCBzdGVwLCBhdCBsZWFzdCBpbiBteSB0aG91Z2h0IHByb2Nlc3MsIGlzIHRvIGRpZyBpbnRvIGBDT05GSUdfS1ZNX0hZUEVSVmAuIEkgd2FudCB0byBzZWUgaWYgYF9fbmVzdGVkX3ZteF92bWV4aXRgIGlzIGRlZmluZWQsIG9yIHVzZWQgaW4gcmVsYXRpb24gdG8gdGhhdCBvcHRpb24sIHdoaWNoIGNvdWxkIHN1Z2dlc3QgZGVlcGVyIGludGVncmF0aW9uIHdpdGggSHlwZXItVi4gVGhpcyBpcyBhbGwgYWJvdXQgbG9va2luZyBmb3IgcG90ZW50aWFsIGhvb2tzIGFuZCBjb250cm9sIHBhdGhzLCBlc3BlY2lhbGx5IGFyb3VuZCBuZXN0ZWQgdmlydHVhbGl6YXRpb24gc2NlbmFyaW9zIHdoZXJlIEh5cGVyLVYgbWlnaHQgaGF2ZSBpdHMgb3duIFNNTSBoYW5kbGluZyBvciBpbnRlcmFjdCB3aXRoIEtWTSYjMzk7cy4gSWYgdGhlcmUmIzM5O3Mgb3ZlcmxhcCBpbiB0aG9zZSBhcmVhcywgSSYjMzk7bGwgbmVlZCB0byBpZGVudGlmeSBob3cgdGhleSBtYW5hZ2UgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDU6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX0tWTV9IWVBFUlYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9MjM0PXN0YXRpYyBpbmxpbmUgdm9pZCBuZXN0ZWRfcmVsZWFzZV9ldm1jcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTIzNS17XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjIzNjojaWZkZWYgQ09ORklHX0tWTV9IWVBFUlZcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMjM3LVx0c3RydWN0IGt2bV92Y3B1X2h2ICpodl92Y3B1ID0gdG9faHZfdmNwdSh2Y3B1KTtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTI1Mj1zdGF0aWMgYm9vbCBuZXN0ZWRfZXZtY3NfaGFuZGxlX3ZtY2xlYXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCB2bXB0cilcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMjUzLXtcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6MjU0OiNpZmRlZiBDT05GSUdfS1ZNX0hZUEVSVlxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0yNTUtXHRzdHJ1Y3QgdmNwdV92bXggKnZteCA9IHRvX3ZteCh2Y3B1KTtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTE3NDc9c3RhdGljIHZvaWQgY29weV9lbmxpZ2h0ZW5lZF90b192bWNzMTIoc3RydWN0IHZjcHVfdm14ICp2bXgsIHUzMiBodl9jbGVhbl9maWVsZHMpXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTE3NDgte1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzoxNzQ5OiNpZmRlZiBDT05GSUdfS1ZNX0hZUEVSVlxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0xNzUwLVx0c3RydWN0IHZtY3MxMiAqdm1jczEyID0gdm14LVx1MDAzZW5lc3RlZC5jYWNoZWRfdm1jczEyO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMTk4OS1cdHJldHVybjtcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6MTk5MDojZWxzZSAvKiBDT05GSUdfS1ZNX0hZUEVSViAqL1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0xOTkxLVx0S1ZNX0JVR19PTigxLCB2bXgtXHUwMDNldmNwdS5rdm0pO1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzoxOTkyOiNlbmRpZiAvKiBDT05GSUdfS1ZNX0hZUEVSViAqL1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0xOTkzLX1cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTE5OTU9c3RhdGljIHZvaWQgY29weV92bWNzMTJfdG9fZW5saWdodGVuZWQoc3RydWN0IHZjcHVfdm14ICp2bXgpXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTE5OTYte1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzoxOTk3OiNpZmRlZiBDT05GSUdfS1ZNX0hZUEVSVlxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0xOTk4LVx0c3RydWN0IHZtY3MxMiAqdm1jczEyID0gdm14LVx1MDAzZW5lc3RlZC5jYWNoZWRfdm1jczEyO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMjE2Ny1cdHJldHVybjtcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6MjE2ODojZWxzZSAvKiBDT05GSUdfS1ZNX0hZUEVSViAqL1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0yMTY5LVx0S1ZNX0JVR19PTigxLCB2bXgtXHUwMDNldmNwdS5rdm0pO1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzoyMTcwOiNlbmRpZiAvKiBDT05GSUdfS1ZNX0hZUEVSViAqL1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0yMTcxLX1cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTIxNzc9c3RhdGljIGVudW0gbmVzdGVkX2V2bXB0cmxkX3N0YXR1cyBuZXN0ZWRfdm14X2hhbmRsZV9lbmxpZ2h0ZW5lZF92bXB0cmxkKFxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMjE3OS17XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjIxODA6I2lmZGVmIENPTkZJR19LVk1fSFlQRVJWXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTIxODEtXHRzdHJ1Y3QgdmNwdV92bXggKnZteCA9IHRvX3ZteCh2Y3B1KTtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTMxMjA9c3RhdGljIGludCBuZXN0ZWRfdm14X2NoZWNrX2NvbnRyb2xzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTMxMjctXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjMxMjg6I2lmZGVmIENPTkZJR19LVk1fSFlQRVJWXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTMxMjktXHRpZiAoZ3Vlc3RfY3B1X2NhcF9oYXNfZXZtY3ModmNwdSkpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz0zMzA0PXN0YXRpYyBpbnQgbmVzdGVkX3ZteF9jaGVja19ndWVzdF9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zNDA0LVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzozNDA1OiNpZmRlZiBDT05GSUdfS1ZNX0hZUEVSVlxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zNDA2LXN0YXRpYyBib29sIG5lc3RlZF9nZXRfZXZtY3NfcGFnZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz0zNTIzPXN0YXRpYyBib29sIHZteF9nZXRfbmVzdGVkX3N0YXRlX3BhZ2VzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzUyNC17XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjM1MjU6I2lmZGVmIENPTkZJR19LVk1fSFlQRVJWXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM1MjYtXHQvKlxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NTA1ND12b2lkIF9fbmVzdGVkX3ZteF92bWV4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgdm1fZXhpdF9yZWFzb24sXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01MDY4LVx0aWYgKGt2bV9jaGVja19yZXF1ZXN0KEtWTV9SRVFfR0VUX05FU1RFRF9TVEFURV9QQUdFUywgdmNwdSkpIHtcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NTA2OTojaWZkZWYgQ09ORklHX0tWTV9IWVBFUlZcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTA3MC1cdFx0Lypcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTY0NjE9c3RhdGljIGJvb2wgbmVzdGVkX3ZteF9sMF93YW50c19leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTY1MjMtXHRcdHJldHVybiB0cnVlO1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo2NTI0OiNpZmRlZiBDT05GSUdfS1ZNX0hZUEVSVlxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02NTI1LVx0Y2FzZSBFWElUX1JFQVNPTl9WTUNBTEw6XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz02ODg5PXN0YXRpYyBpbnQgdm14X3NldF9uZXN0ZWRfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNjk4NS1cdFx0c2V0X2N1cnJlbnRfdm1wdHIodm14LCBrdm1fc3RhdGUtXHUwMDNlaGRyLnZteC52bWNzMTJfcGEpO1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo2OTg2OiNpZmRlZiBDT05GSUdfS1ZNX0hZUEVSVlxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02OTg3LVx0fSBlbHNlIGlmIChrdm1fc3RhdGUtXHUwMDNlZmxhZ3MgXHUwMDI2IEtWTV9TVEFURV9ORVNURURfRVZNQ1MpIHtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTc0NzU9c3RydWN0IGt2bV94ODZfbmVzdGVkX29wcyB2bXhfbmVzdGVkX29wcyBfX2luaXRkYXRhID0ge1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNzQ4NS1cdC53cml0ZV9sb2dfZGlydHkgPSBuZXN0ZWRfdm14X3dyaXRlX3BtbF9idWZmZXIsXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjc0ODY6I2lmZGVmIENPTkZJR19LVk1fSFlQRVJWXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTc0ODctXHQuZW5hYmxlX2V2bWNzID0gbmVzdGVkX2VuYWJsZV9ldm1jcyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDU6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMwNDgKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiA0MzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBsaWNhdGlvbnMgb2YgdGhlIEtWTSBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIG1ha2luZyBhIHNpZ25pZmljYW50IGNoYW5nZTogaXQmIzM5O3MgZm9yY2luZyBhIGBLVk1fUkVRX0dFVF9ORVNURURfU1RBVEVfUEFHRVNgIGNoZWNrIHdpdGhpbiBgX19uZXN0ZWRfdm14X3ZtZXhpdGAgcmVnYXJkbGVzcy4gVGhlIGludGVyZXN0aW5nIHBhcnQgaXMgdGhhdCB0aGUgY29uZGl0aW9uYWwgYCNpZmRlZiBDT05GSUdfS1ZNX0hZUEVSVmAgaXMgKmluc2lkZSogdGhlIGBrdm1fY2hlY2tfcmVxdWVzdGAgYmxvY2suIFNvLCB3aGlsZSBgQ09ORklHX0tWTV9IWVBFUlZgIGlzbiYjMzk7dCBzdHJpY3RseSBuZWNlc3NhcnkgdG8gdHJpZ2dlciB0aGUgY2hhbmdlIGluIGBfX25lc3RlZF92bXhfdm1leGl0YCBpdHNlbGYgKHNpbmNlIHdlJiMzOTtyZSBtYWtpbmcgdGhlIGNoZWNrIHVuY29uZGl0aW9uYWwpLCB3ZSBhYnNvbHV0ZWx5ICptdXN0KiB0ZXN0IHRoZSBuZXN0ZWQgVk1YIGFuZCBTVk0gZnVuY3Rpb25hbGl0eSB0aG9yb3VnaGx5LiBXZSBuZWVkIHRvIGVuc3VyZSBub3RoaW5nIGJyZWFrcy4KClRvIHRoYXQgZW5kLCBJJiMzOTt2ZSBjb21waWxlZCBhIGxpc3Qgb2YgZnVuY3Rpb25zIHRoYXQgd2FycmFudCBjYXJlZnVsIHNjcnV0aW55OgoKKiAgIGBuZXN0ZWRfc3ZtX2NvcHlfdm1jYjEyX3RvX2NhY2hlYCAoY3JpdGljYWwgZm9yIFNWTSBzdGF0ZSBtYW5hZ2VtZW50IHdpdGhpbiBgZW50ZXJfc3ZtX2d1ZXN0X21vZGVgKQoqICAgYG5lc3RlZF9zdm1fdm1leGl0X3VwZGF0ZV92bWNiMTJgIChlc3NlbnRpYWwgZm9yIFNWTSBleGl0IGhhbmRsaW5nLCBjYWxsZWQgYnkgYG5lc3RlZF9zdm1fdm1leGl0YCkKKiAgIGB2bWxvYWRfdm1zYXZlX2ludGVyY2VwdGlvbmAgKGludGVyY2VwdGlvbiBvZiBWTUxPQUQvVk1TQVZFIG9wZXJhdGlvbnMsIGludm9sdmVkIGluIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBhbmQgY2FsbGVkIGJ5IGBzdm1faW52b2tlX2V4aXRfaGFuZGxlcmApCiogICBgc3ZtX2VudGVyX3NtbWAgYW5kIGBzdm1fbGVhdmVfc21tYCAoU01NIHRyYW5zaXRpb24gaGFuZGxlcnMgZm9yIFNWTSwgY2FsbGVkIHZpYSBga3ZtX3NtbV90cmFuc2l0aW9uYCkKKiAgIGBuZXN0ZWRfdm14X3ByZXBhcmVfbXNyX2JpdG1hcGAgKHNldHMgdXAgTVNSIGJpdG1hcHMsIGNydWNpYWwgZm9yIFZNWCkKKiAgIGBfX25lc3RlZF92bXhfdm1leGl0YCAodGhlIGZvY2FsIHBvaW50IG9mIHRoaXMgcGF0Y2gsIGNhbGxlZCBieSBgbmVzdGVkX3ZteF92bWV4aXRgIGFuZCBgbmVzdGVkX3ZteF9yZWZsZWN0X3ZtZXhpdGApCiogICBga3ZtcHBjX3BhdGNoX2RjYnpgIChsaWtlbHkgdW5yZWxhdGVkIHRvIHRoZSBjb3JlIGNoYW5nZSwgYnV0IGluY2x1ZGVkIGZvciBjb21wbGV0ZW5lc3MsIGNhbGxlZCBieSBga3ZtcHBjX2hhbmRsZV9wYWdlZmF1bHRgKQoKTXkgYXBwcm9hY2ggaXMgdG8gcHJpb3JpdGl6ZSBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIFRoYXQgaGVscHMgZ2l2ZSB1cyB0aGUgbW9zdCBpbnNpZ2h0IGludG8gaG93IGVhY2ggZnVuY3Rpb24gaXMgdXNlZCwgYW5kIGhvdyBjaGFuZ2VzIG1heSBiZSBleHBvc2VkIHRvIHRoZSBjYWxsZXIuIFNvLCBJIHdpbGwgdHJhY2UgdGhlIGNhbGxlcnMgb2YgdGhlIGFib3ZlIHN0YXRpYyBmdW5jdGlvbnMgdG8gZW5zdXJlIGNvbXBsZXRlIGNvdmVyYWdlLiBUaGF0JiMzOTtzIHRoZSBiZXN0IHdheSB0byBkZXRlcm1pbmUgdGhlIGZ1bGwgaW1wYWN0IG9mIHRoZSBwYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDU6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmVzdGVkX3N2bV9jb3B5X3ZtY2IxMl90b19jYWNoZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYz0xMDMzPWludCBlbnRlcl9zdm1fZ3Vlc3RfbW9kZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2bWNiMTJfZ3BhLCBib29sIGZyb21fdm1ydW4pXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0xMDg1LVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzoxMDg2OnN0YXRpYyBpbnQgbmVzdGVkX3N2bV9jb3B5X3ZtY2IxMl90b19jYWNoZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2bWNiMTJfZ3BhKVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0xMDg3LXtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jPTExMTM9aW50IG5lc3RlZF9zdm1fdm1ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtMTE0NS1cbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6MTE0NjpcdHJldCA9IG5lc3RlZF9zdm1fY29weV92bWNiMTJfdG9fY2FjaGUodmNwdSwgdm1jYjEyX2dwYSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTExNDctXHRpZiAocmV0ID09IC1FRkFVTFQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA1OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MzY1CgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkluaXRpYWwgQXNzZXNzbWVudDogTmF2aWdhdGluZyB0aGUgVmlydHVhbGl6YXRpb24gTGFuZHNjYXBlKioKClJpZ2h0LCBzbyBgbmVzdGVkX3N2bV92bXJ1bmAganVtcHMgb3V0IGltbWVkaWF0ZWx5IGFzIGEgZ29vZCBwbGFjZSB0byBzdGFydCBkaWdnaW5nLiBUaGF0JiMzOTtzIGEgc29saWQsIGxpa2VseSBsb3ctbGV2ZWwgZW50cnlwb2ludCBmb3IgYW55dGhpbmcgcmVsYXRlZCB0byBuZXN0ZWQgdmlydHVhbGl6YXRpb24gd2l0aGluIGEgVk13YXJlIGVudmlyb25tZW50LiBJdCBzdWdnZXN0cyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGVpdGhlciBlbmFibGluZyBvciBpbnRlcmFjdGluZyB3aXRoIFNlY3VyZSBWaXJ0dWFsIE1hY2hpbmUgKFNWTSkgY2FwYWJpbGl0aWVzIHdpdGhpbiBhbm90aGVyIFZNLCBvciBsaWtlbHkgdGhlIG1lY2hhbmlzbSB0aHJvdWdoIHdoaWNoIG9uZSBWTSBpbnRlcmFjdHMgd2l0aCBhbm90aGVyJiMzOTtzIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBlbnZpcm9ubWVudC4gQ29uc2lkZXJpbmcgbXkgZXhwZXJpZW5jZSB3aXRoIHZpcnR1YWxpemF0aW9uIGtlcm5lbCBtb2R1bGVzIGFuZCBzeXN0ZW0tbGV2ZWwgaW50ZXJhY3Rpb25zLCB0aGlzIHByb2JhYmx5IGhhbmRsZXMgdGhlIHRyYW5zaXRpb24sIG1vZGUgc2V0dGluZywgb3IgcmVzb3VyY2UgYWxsb2NhdGlvbiBpbnZvbHZlZCBpbiBydW5uaW5nIGEgdmlydHVhbGl6ZWQgZ3Vlc3QgKndpdGhpbiogYW5vdGhlciB2aXJ0dWFsaXplZCBndWVzdC4gVGhpcyBjb3VsZCBiZSByZWxldmFudCBmb3IgZXZlcnl0aGluZyBmcm9tIHRlc3RpbmcgYW5kIGRldmVsb3BtZW50IHRvIHBvdGVudGlhbGx5IHNlY3VyaXR5LWZvY3VzZWQgaXNvbGF0aW9uLCBjb250YWluZXJpemF0aW9uLCBvciBldmVuIG1hbGljaW91cyByb290a2l0IGRldGVjdGlvbiB0ZWNobmlxdWVzLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGNoZWNrIGZvciBhbnkgaG9va3MsIGNhbGxiYWNrcywgb3Igc2hhcmVkIG1lbW9yeSBhY2Nlc3MgdGhpcyBmdW5jdGlvbiBtaWdodCBpbXBsZW1lbnQsIHRob3NlIHdvdWxkIGJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDU6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmVzdGVkX3N2bV92bWV4aXRfdXBkYXRlX3ZtY2IxMiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYz0xMjMzPXZvaWQgc3ZtX2NvcHlfdm1sb2Fkc2F2ZV9zdGF0ZShzdHJ1Y3Qgdm1jYiAqdG9fdm1jYiwgc3RydWN0IHZtY2IgKmZyb21fdm1jYilcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTEyNDgtXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjEyNDk6c3RhdGljIGludCBuZXN0ZWRfc3ZtX3ZtZXhpdF91cGRhdGVfdm1jYjEyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtMTI1MC17XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYz0xMzE3PXZvaWQgbmVzdGVkX3N2bV92bWV4aXQoc3RydWN0IHZjcHVfc3ZtICpzdm0pXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0xMzIyLVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzoxMzIzOlx0aWYgKG5lc3RlZF9zdm1fdm1leGl0X3VwZGF0ZV92bWNiMTIodmNwdSkpXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTEzMjQtXHRcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9UUklQTEVfRkFVTFQsIHZjcHUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwNTo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDk0MwoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQ6CgoqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiBWTSBFeGl0IEVudHJ5cG9pbnRzKioKClJpZ2h0LCBgbmVzdGVkX3N2bV92bWV4aXRgLiBUaGF0IGxvb2tzIGxpa2UgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3IgZXhhbWluaW5nIHRoZSB3aG9sZSBuZXN0ZWQgdmlydHVhbGl6YXRpb24gc2l0dWF0aW9uLiBJdCBpbW1lZGlhdGVseSBzdWdnZXN0cyBhbiBlbnRyeSBwb2ludCBpbnRvIHRoZSBoYW5kbGluZyBvZiB2aXJ0dWFsIG1hY2hpbmUgZXhpdHMgd2hlbiBydW5uaW5nIHVuZGVyIG5lc3RlZCBTVk0gKFNlY3VyZSBWaXJ0dWFsIE1hY2hpbmUpIHZpcnR1YWxpemF0aW9uLiBUaGlzIG5hbWUgYWxvbmUgcG9pbnRzIHRvIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgSSBuZWVkIHRvIGRpZyBpbnRvLiBJdCYjMzk7cyBhIGNsZWFyIGluZGljYXRpb24gdGhhdCB0aGlzIGlzIHRoZSBob29rLCB0aGUgcGxhY2Ugd2hlcmUgdGhlIGh5cGVydmlzb3IgaW50ZXJjZXB0cyBldmVudHMgZnJvbSB0aGUgZ3Vlc3QgVk0uIFRoaXMgaXMgd2hlcmUgSSYjMzk7bGwgcHJvYmFibHkgZmluZCB0aGUga2V5IGxvZ2ljIGZvciBtYW5hZ2luZyBndWVzdC10by1ob3N0IHRyYW5zaXRpb25zLCBlbXVsYXRpb24gb2YgaW5zdHJ1Y3Rpb25zLCBhbmQgYmFzaWNhbGx5IGV2ZXJ5dGhpbmcgdGhhdCBtYWtlcyBuZXN0ZWQgdmlydHVhbGl6YXRpb24gd29yay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGVudHJ5IHBvaW50IGRvZXMgaW4gdGhlIG92ZXJhbGwgcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDU6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm1sb2FkX3Ztc2F2ZV9pbnRlcmNlcHRpb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vc3ZtLmM9MjIwOD1zdGF0aWMgaW50IGludHJfaW50ZXJjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTIyMTMtXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjIyMTQ6c3RhdGljIGludCB2bWxvYWRfdm1zYXZlX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgdm1sb2FkKVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0yMjE1LXtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTIyNDk9c3RhdGljIGludCB2bWxvYWRfaW50ZXJjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMjI1MC17XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjIyNTE6XHRyZXR1cm4gdm1sb2FkX3Ztc2F2ZV9pbnRlcmNlcHRpb24odmNwdSwgdHJ1ZSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTIyNTItfVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9MjI1ND1zdGF0aWMgaW50IHZtc2F2ZV9pbnRlcmNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0yMjU1LXtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6MjI1NjpcdHJldHVybiB2bWxvYWRfdm1zYXZlX2ludGVyY2VwdGlvbih2Y3B1LCBmYWxzZSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTIyNTctfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwNTo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTU0MwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW5pdGlhbCBBc3Nlc3NtZW50OiBMZXZlcmFnaW5nIEVudHJ5cG9pbnRzIGZvciBWTSBMaWZlY3ljbGUgTWFuYWdlbWVudCoqCgpSaWdodCwgbGV0JiMzOTtzIHNlZS4uLiBgdm1sb2FkX2ludGVyY2VwdGlvbmAgYW5kIGB2bXNhdmVfaW50ZXJjZXB0aW9uYCBhcmUgZGVmaW5pdGVseSB0aGUga2V5IHN0YXJ0aW5nIHBvaW50cyBoZXJlLiBUaGlua2luZyBhYm91dCB0aGlzIGZyb20gYSBsaWZlY3ljbGUgcGVyc3BlY3RpdmUsIHRoZXNlIGFyZSB0aGUgaG9va3MgSSBuZWVkIHRvIGZvY3VzIG9uIGZvciBhbnkgc2lnbmlmaWNhbnQgaW50ZXJ2ZW50aW9uIG9yIGluc3RydW1lbnRhdGlvbiB3aXRoaW4gdGhlIGh5cGVydmlzb3ImIzM5O3MgVk0gbWFuYWdlbWVudCBmbG93LiBUaGV5JiMzOTtyZSB0aGUgb2J2aW91cyBjYW5kaWRhdGVzIGZvciBpbXBsZW1lbnRpbmcgYW55IGN1c3RvbSBsb2dpYyB0aWVkIHRvIFZNIHN0YXRlIHRyYW5zaXRpb25zLgoKSSYjMzk7bSBpbW1lZGlhdGVseSBjb25zaWRlcmluZyB3aGF0IEkgY2FuIGludGVyY2VwdCBhbmQgaG93IEkmIzM5O2xsIGhhbmRsZSB0aGUgYXJjaGl0ZWN0dXJhbCBjaGFsbGVuZ2VzLiBTcGVjaWZpY2FsbHksIHdoYXQmIzM5O3MgbXkgcGxhbiB0byBtYWludGFpbiB0aGUgaW50ZWdyaXR5IG9mIHRoZSBzYXZlL3Jlc3RvcmUgcHJvY2Vzcz8gSSBuZWVkIHRvIHRoaW5rIGFib3V0IGhvdyB0byBpbmplY3QgbXkgb3duIGNvZGUgYW5kIGRhdGEgd2l0aG91dCBpbXBhY3RpbmcgdGhlIHBlcmZvcm1hbmNlIG9mIHRoZSBWTSBvciBpdHMgZ3Vlc3RzLCBhbmQgd2l0aCBjYXJlZnVsIGF0dGVudGlvbiB0byB0aHJlYWQgc2FmZXR5LCBvZiBjb3Vyc2UuIEFueSBpbnRlcnJ1cHRpb24gaW4gdGhlc2UgZnVuY3Rpb25zIGNhbiBsZWFkIHRvIHVucHJlZGljdGFibGUgcmVzdWx0cyBpbiB0aGUgdmlydHVhbCBtYWNoaW5lcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDU6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3ZtX2VudGVyX3NtbSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bS9zdm0uYz00OTcxPXN0YXRpYyBpbnQgc3ZtX3NtaV9hbGxvd2VkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBmb3JfaW5qZWN0aW9uKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNDk4Ni1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6NDk4NzpzdGF0aWMgaW50IHN2bV9lbnRlcl9zbW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bmlvbiBrdm1fc21yYW0gKnNtcmFtKVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy00OTg4LXtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTUwMzM9c3RhdGljIGludCBzdm1fbGVhdmVfc21tKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgY29uc3QgdW5pb24ga3ZtX3NtcmFtICpzbXJhbSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTUwNjUtXHQgKiBSZXN0b3JlIEwxIGhvc3Qgc3RhdGUgZnJvbSBMMSBIU0FWRSBhcmVhIGFzIFZNQ0IwMSB3YXNcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6NTA2NjpcdCAqIHVzZWQgZHVyaW5nIFNNTSAoc2VlIHN2bV9lbnRlcl9zbW0oKSlcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNTA2Ny1cdCAqL1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9NTMwMj1zdHJ1Y3Qga3ZtX3g4Nl9vcHMgc3ZtX3g4Nl9vcHMgX19pbml0ZGF0YSA9IHtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTU0MTItXHQuc21pX2FsbG93ZWQgPSBzdm1fc21pX2FsbG93ZWQsXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjU0MTM6XHQuZW50ZXJfc21tID0gc3ZtX2VudGVyX3NtbSxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNTQxNC1cdC5sZWF2ZV9zbW0gPSBzdm1fbGVhdmVfc21tLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwNTo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjI2OAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKlRyYWNpbmcgdGhlIEV4ZWN1dGlvbiBQYXRoIG9mIGBlbnRlcl9zbW1gIGluIEtWTSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoZSBLVk0gY29kZSBhbmQgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgZW50ZXJfc21tYCBpcyBiZWluZyBpbnZva2VkLiBSaWdodCwgdGhlIGZ1bmN0aW9uIG5hbWUgaXRzZWxmIHN1Z2dlc3RzIGVudHJ5IGludG8gU3lzdGVtIE1hbmFnZW1lbnQgTW9kZSAoU01NKSwgYW5kIHRoYXQmIzM5O3Mgc29tZXRoaW5nIHRoYXQgYWx3YXlzIHJlcXVpcmVzIGNhcmVmdWwgY29uc2lkZXJhdGlvbiBpbiBhIGh5cGVydmlzb3IgY29udGV4dC4gSSByZW1lbWJlciB0aGF0IHRoZXNlIHR5cGVzIG9mIGFyY2hpdGVjdHVyYWwgaW50ZXJhY3Rpb25zIGFyZSBvZnRlbiBtYW5hZ2VkIHRocm91Z2ggYGt2bV94ODZfb3BzYC4gVGhhdCYjMzk7cyB0aGUgbGlrZWx5IGVudHJ5IHBvaW50LiBOb3csIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgYWN0dWFsIGNvbnRyb2wgZmxvdywgSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGdyZXAgb3IgdXNlIG15IElERSB0byBmaW5kIGFsbCB0aGUgY2FsbCBzaXRlcyBvZiBgZW50ZXJfc21tYCB3aXRoaW4gdGhlIGNvZGViYXNlLiBUaGUgZ29hbCBpcyB0byBzZWUgZXhhY3RseSB3aGVyZSBhbmQgaG93IHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkLCB3aGljaCB3aWxsIHRoZW4gaWxsdW1pbmF0ZSB0aGUgZXZlbnRzIHRoYXQgdHJpZ2dlciBTTU0gZW50cnkgZnJvbSB0aGUgaG9zdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHBhdGggdGhyb3VnaCB3aGljaCB0aGUgaG9zdCBlbnRlcnMgU01NIHZpYSBLVk0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA1OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2VudGVyX3NtbSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3NtbS5jPTEzNj12b2lkIHByb2Nlc3Nfc21pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vc21tLmMtMTQxLVxuYXJjaC94ODYva3ZtL3NtbS5jOjE0MjpzdGF0aWMgdTMyIGVudGVyX3NtbV9nZXRfc2VnbWVudF9mbGFncyhzdHJ1Y3Qga3ZtX3NlZ21lbnQgKnNlZylcbmFyY2gveDg2L2t2bS9zbW0uYy0xNDMte1xuLS1cbmFyY2gveDg2L2t2bS9zbW0uYy0xNTUtXG5hcmNoL3g4Ni9rdm0vc21tLmM6MTU2OnN0YXRpYyB2b2lkIGVudGVyX3NtbV9zYXZlX3NlZ18zMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG5hcmNoL3g4Ni9rdm0vc21tLmMtMTU3LVx0XHRcdFx0ICBzdHJ1Y3Qga3ZtX3NtbV9zZWdfc3RhdGVfMzIgKnN0YXRlLFxuLS1cbmFyY2gveDg2L2t2bS9zbW0uYy0xNjUtXHRzdGF0ZS1cdTAwM2VsaW1pdCA9IHNlZy5saW1pdDtcbmFyY2gveDg2L2t2bS9zbW0uYzoxNjY6XHRzdGF0ZS1cdTAwM2VmbGFncyA9IGVudGVyX3NtbV9nZXRfc2VnbWVudF9mbGFncyhcdTAwMjZzZWcpO1xuYXJjaC94ODYva3ZtL3NtbS5jLTE2Ny19XG4tLVxuYXJjaC94ODYva3ZtL3NtbS5jLTE2OS0jaWZkZWYgQ09ORklHX1g4Nl82NFxuYXJjaC94ODYva3ZtL3NtbS5jOjE3MDpzdGF0aWMgdm9pZCBlbnRlcl9zbW1fc2F2ZV9zZWdfNjQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuYXJjaC94ODYva3ZtL3NtbS5jLTE3MS1cdFx0XHRcdCAgc3RydWN0IGt2bV9zbW1fc2VnX3N0YXRlXzY0ICpzdGF0ZSxcbi0tXG5hcmNoL3g4Ni9rdm0vc21tLmMtMTc3LVx0c3RhdGUtXHUwMDNlc2VsZWN0b3IgPSBzZWcuc2VsZWN0b3I7XG5hcmNoL3g4Ni9rdm0vc21tLmM6MTc4Olx0c3RhdGUtXHUwMDNlYXR0cmlidXRlcyA9IGVudGVyX3NtbV9nZXRfc2VnbWVudF9mbGFncyhcdTAwMjZzZWcpIFx1MDAzZVx1MDAzZSA4O1xuYXJjaC94ODYva3ZtL3NtbS5jLTE3OS1cdHN0YXRlLVx1MDAzZWxpbWl0ID0gc2VnLmxpbWl0O1xuLS1cbmFyY2gveDg2L2t2bS9zbW0uYy0xODMtXG5hcmNoL3g4Ni9rdm0vc21tLmM6MTg0OnN0YXRpYyB2b2lkIGVudGVyX3NtbV9zYXZlX3N0YXRlXzMyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbmFyY2gveDg2L2t2bS9zbW0uYy0xODUtXHRcdFx0XHQgICAgc3RydWN0IGt2bV9zbXJhbV9zdGF0ZV8zMiAqc21yYW0pXG4tLVxuYXJjaC94ODYva3ZtL3NtbS5jLTIwMC1cbmFyY2gveDg2L2t2bS9zbW0uYzoyMDE6XHRlbnRlcl9zbW1fc2F2ZV9zZWdfMzIodmNwdSwgXHUwMDI2c21yYW0tXHUwMDNldHIsIFx1MDAyNnNtcmFtLVx1MDAzZXRyX3NlbCwgVkNQVV9TUkVHX1RSKTtcbmFyY2gveDg2L2t2bS9zbW0uYzoyMDI6XHRlbnRlcl9zbW1fc2F2ZV9zZWdfMzIodmNwdSwgXHUwMDI2c21yYW0tXHUwMDNlbGR0ciwgXHUwMDI2c21yYW0tXHUwMDNlbGR0cl9zZWwsIFZDUFVfU1JFR19MRFRSKTtcbmFyY2gveDg2L2t2bS9zbW0uYy0yMDMtXG4tLVxuYXJjaC94ODYva3ZtL3NtbS5jLTIxMS1cbmFyY2gveDg2L2t2bS9zbW0uYzoyMTI6XHRlbnRlcl9zbW1fc2F2ZV9zZWdfMzIodmNwdSwgXHUwMDI2c21yYW0tXHUwMDNlZXMsIFx1MDAyNnNtcmFtLVx1MDAzZWVzX3NlbCwgVkNQVV9TUkVHX0VTKTtcbmFyY2gveDg2L2t2bS9zbW0uYzoyMTM6XHRlbnRlcl9zbW1fc2F2ZV9zZWdfMzIodmNwdSwgXHUwMDI2c21yYW0tXHUwMDNlY3MsIFx1MDAyNnNtcmFtLVx1MDAzZWNzX3NlbCwgVkNQVV9TUkVHX0NTKTtcbmFyY2gveDg2L2t2bS9zbW0uYzoyMTQ6XHRlbnRlcl9zbW1fc2F2ZV9zZWdfMzIodmNwdSwgXHUwMDI2c21yYW0tXHUwMDNlc3MsIFx1MDAyNnNtcmFtLVx1MDAzZXNzX3NlbCwgVkNQVV9TUkVHX1NTKTtcbmFyY2gveDg2L2t2bS9zbW0uYy0yMTUtXG5hcmNoL3g4Ni9rdm0vc21tLmM6MjE2Olx0ZW50ZXJfc21tX3NhdmVfc2VnXzMyKHZjcHUsIFx1MDAyNnNtcmFtLVx1MDAzZWRzLCBcdTAwMjZzbXJhbS1cdTAwM2Vkc19zZWwsIFZDUFVfU1JFR19EUyk7XG5hcmNoL3g4Ni9rdm0vc21tLmM6MjE3Olx0ZW50ZXJfc21tX3NhdmVfc2VnXzMyKHZjcHUsIFx1MDAyNnNtcmFtLVx1MDAzZWZzLCBcdTAwMjZzbXJhbS1cdTAwM2Vmc19zZWwsIFZDUFVfU1JFR19GUyk7XG5hcmNoL3g4Ni9rdm0vc21tLmM6MjE4Olx0ZW50ZXJfc21tX3NhdmVfc2VnXzMyKHZjcHUsIFx1MDAyNnNtcmFtLVx1MDAzZWdzLCBcdTAwMjZzbXJhbS1cdTAwM2Vnc19zZWwsIFZDUFVfU1JFR19HUyk7XG5hcmNoL3g4Ni9rdm0vc21tLmMtMjE5LVxuLS1cbmFyY2gveDg2L2t2bS9zbW0uYy0yMjctI2lmZGVmIENPTkZJR19YODZfNjRcbmFyY2gveDg2L2t2bS9zbW0uYzoyMjg6c3RhdGljIHZvaWQgZW50ZXJfc21tX3NhdmVfc3RhdGVfNjQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuYXJjaC94ODYva3ZtL3NtbS5jLTIyOS1cdFx0XHRcdCAgICBzdHJ1Y3Qga3ZtX3NtcmFtX3N0YXRlXzY0ICpzbXJhbSlcbi0tXG5hcmNoL3g4Ni9rdm0vc21tLmMtMjUxLVxuYXJjaC94ODYva3ZtL3NtbS5jOjI1MjpcdGVudGVyX3NtbV9zYXZlX3NlZ182NCh2Y3B1LCBcdTAwMjZzbXJhbS1cdTAwM2V0ciwgVkNQVV9TUkVHX1RSKTtcbmFyY2gveDg2L2t2bS9zbW0uYy0yNTMtXG4tLVxuYXJjaC94ODYva3ZtL3NtbS5jLTI1Ny1cbmFyY2gveDg2L2t2bS9zbW0uYzoyNTg6XHRlbnRlcl9zbW1fc2F2ZV9zZWdfNjQodmNwdSwgXHUwMDI2c21yYW0tXHUwMDNlbGR0ciwgVkNQVV9TUkVHX0xEVFIpO1xuYXJjaC94ODYva3ZtL3NtbS5jLTI1OS1cbi0tXG5hcmNoL3g4Ni9rdm0vc21tLmMtMjYzLVxuYXJjaC94ODYva3ZtL3NtbS5jOjI2NDpcdGVudGVyX3NtbV9zYXZlX3NlZ182NCh2Y3B1LCBcdTAwMjZzbXJhbS1cdTAwM2VlcywgVkNQVV9TUkVHX0VTKTtcbmFyY2gveDg2L2t2bS9zbW0uYzoyNjU6XHRlbnRlcl9zbW1fc2F2ZV9zZWdfNjQodmNwdSwgXHUwMDI2c21yYW0tXHUwMDNlY3MsIFZDUFVfU1JFR19DUyk7XG5hcmNoL3g4Ni9rdm0vc21tLmM6MjY2Olx0ZW50ZXJfc21tX3NhdmVfc2VnXzY0KHZjcHUsIFx1MDAyNnNtcmFtLVx1MDAzZXNzLCBWQ1BVX1NSRUdfU1MpO1xuYXJjaC94ODYva3ZtL3NtbS5jOjI2NzpcdGVudGVyX3NtbV9zYXZlX3NlZ182NCh2Y3B1LCBcdTAwMjZzbXJhbS1cdTAwM2VkcywgVkNQVV9TUkVHX0RTKTtcbmFyY2gveDg2L2t2bS9zbW0uYzoyNjg6XHRlbnRlcl9zbW1fc2F2ZV9zZWdfNjQodmNwdSwgXHUwMDI2c21yYW0tXHUwMDNlZnMsIFZDUFVfU1JFR19GUyk7XG5hcmNoL3g4Ni9rdm0vc21tLmM6MjY5Olx0ZW50ZXJfc21tX3NhdmVfc2VnXzY0KHZjcHUsIFx1MDAyNnNtcmFtLVx1MDAzZWdzLCBWQ1BVX1NSRUdfR1MpO1xuYXJjaC94ODYva3ZtL3NtbS5jLTI3MC1cbi0tXG5hcmNoL3g4Ni9rdm0vc21tLmMtMjc4LVxuYXJjaC94ODYva3ZtL3NtbS5jOjI3OTp2b2lkIGVudGVyX3NtbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0vc21tLmMtMjgwLXtcbi0tXG5hcmNoL3g4Ni9rdm0vc21tLmMtMjkxLVx0aWYgKGd1ZXN0X2NwdV9jYXBfaGFzKHZjcHUsIFg4Nl9GRUFUVVJFX0xNKSlcbmFyY2gveDg2L2t2bS9zbW0uYzoyOTI6XHRcdGVudGVyX3NtbV9zYXZlX3N0YXRlXzY0KHZjcHUsIFx1MDAyNnNtcmFtLnNtcmFtNjQpO1xuYXJjaC94ODYva3ZtL3NtbS5jLTI5My1cdGVsc2VcbmFyY2gveDg2L2t2bS9zbW0uYy0yOTQtI2VuZGlmXG5hcmNoL3g4Ni9rdm0vc21tLmM6Mjk1Olx0XHRlbnRlcl9zbW1fc2F2ZV9zdGF0ZV8zMih2Y3B1LCBcdTAwMjZzbXJhbS5zbXJhbTMyKTtcbmFyY2gveDg2L2t2bS9zbW0uYy0yOTYtXG5hcmNoL3g4Ni9rdm0vc21tLmMtMjk3LVx0LypcbmFyY2gveDg2L2t2bS9zbW0uYzoyOTg6XHQgKiBHaXZlIGVudGVyX3NtbSgpIGEgY2hhbmNlIHRvIG1ha2UgSVNBLXNwZWNpZmljIGNoYW5nZXMgdG8gdGhlIHZDUFVcbmFyY2gveDg2L2t2bS9zbW0uYy0yOTktXHQgKiBzdGF0ZSAoZS5nLiBsZWF2ZSBndWVzdCBtb2RlKSBhZnRlciB3ZSYjMzk7dmUgc2F2ZWQgdGhlIHN0YXRlIGludG8gdGhlXG4tLVxuYXJjaC94ODYva3ZtL3NtbS5jLTMwNC1cdCAqL1xuYXJjaC94ODYva3ZtL3NtbS5jOjMwNTpcdGlmIChrdm1feDg2X2NhbGwoZW50ZXJfc21tKSh2Y3B1LCBcdTAwMjZzbXJhbSkpXG5hcmNoL3g4Ni9rdm0vc21tLmMtMzA2LVx0XHRnb3RvIGVycm9yO1xuLS1cbmFyY2gveDg2L2t2bS9zbW0uaD0xNTc9dm9pZCBrdm1fc21tX2NoYW5nZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGluX3NtbSk7XG5hcmNoL3g4Ni9rdm0vc21tLmg6MTU4OnZvaWQgZW50ZXJfc21tKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG5hcmNoL3g4Ni9rdm0vc21tLmgtMTU5LWludCBlbXVsYXRvcl9sZWF2ZV9zbW0oc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9NDk3MT1zdGF0aWMgaW50IHN2bV9zbWlfYWxsb3dlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgZm9yX2luamVjdGlvbilcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTQ5ODYtXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjQ5ODc6c3RhdGljIGludCBzdm1fZW50ZXJfc21tKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5pb24ga3ZtX3NtcmFtICpzbXJhbSlcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNDk4OC17XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz01MDMzPXN0YXRpYyBpbnQgc3ZtX2xlYXZlX3NtbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGNvbnN0IHVuaW9uIGt2bV9zbXJhbSAqc21yYW0pXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01MDY1LVx0ICogUmVzdG9yZSBMMSBob3N0IHN0YXRlIGZyb20gTDEgSFNBVkUgYXJlYSBhcyBWTUNCMDEgd2FzXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjUwNjY6XHQgKiB1c2VkIGR1cmluZyBTTU0gKHNlZSBzdm1fZW50ZXJfc21tKCkpXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTUwNjctXHQgKi9cbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTUzMDI9c3RydWN0IGt2bV94ODZfb3BzIHN2bV94ODZfb3BzIF9faW5pdGRhdGEgPSB7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01NDEyLVx0LnNtaV9hbGxvd2VkID0gc3ZtX3NtaV9hbGxvd2VkLFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo1NDEzOlx0LmVudGVyX3NtbSA9IHN2bV9lbnRlcl9zbW0sXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTU0MTQtXHQubGVhdmVfc21tID0gc3ZtX2xlYXZlX3NtbSxcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz0yMTk9c3RhdGljIGludCB2dF9zbWlfYWxsb3dlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgZm9yX2luamVjdGlvbilcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0yMjYtXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzoyMjc6c3RhdGljIGludCB2dF9lbnRlcl9zbW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bmlvbiBrdm1fc21yYW0gKnNtcmFtKVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMjI4LXtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0yMzEtXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzoyMzI6XHRyZXR1cm4gdm14X2VudGVyX3NtbSh2Y3B1LCBzbXJhbSk7XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0yMzMtfVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTg4MD1zdHJ1Y3Qga3ZtX3g4Nl9vcHMgdnRfeDg2X29wcyBfX2luaXRkYXRhID0ge1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTEwMDktXHQuc21pX2FsbG93ZWQgPSB2dF9vcChzbWlfYWxsb3dlZCksXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzoxMDEwOlx0LmVudGVyX3NtbSA9IHZ0X29wKGVudGVyX3NtbSksXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xMDExLVx0LmxlYXZlX3NtbSA9IHZ0X29wKGxlYXZlX3NtbSksXG4tLVxuYXJjaC94ODYva3ZtL3ZteC92bXguYz04NDA4PWludCB2bXhfc21pX2FsbG93ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGZvcl9pbmplY3Rpb24pXG4tLVxuYXJjaC94ODYva3ZtL3ZteC92bXguYy04NDE1LVxuYXJjaC94ODYva3ZtL3ZteC92bXguYzo4NDE2OmludCB2bXhfZW50ZXJfc21tKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5pb24ga3ZtX3NtcmFtICpzbXJhbSlcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtODQxNy17XG4tLVxuYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmg9MzY9aW50IHZteF9zbWlfYWxsb3dlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgZm9yX2luamVjdGlvbik7XG5hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaDozNzppbnQgdm14X2VudGVyX3NtbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuaW9uIGt2bV9zbXJhbSAqc21yYW0pO1xuYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmgtMzgtaW50IHZteF9sZWF2ZV9zbW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBjb25zdCB1bmlvbiBrdm1fc21yYW0gKnNtcmFtKTtcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9NzU2MD1zdGF0aWMgaW50IGt2bV9jaGVja19hbmRfaW5qZWN0X2V2ZW50cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTc2OTUtXHRcdFx0JiM0MzsmIzQzO3ZjcHUtXHUwMDNlYXJjaC5zbWlfY291bnQ7XG5hcmNoL3g4Ni9rdm0veDg2LmM6NzY5NjpcdFx0XHRlbnRlcl9zbW0odmNwdSk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtNzY5Ny1cdFx0XHRjYW5faW5qZWN0ID0gZmFsc2U7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA1OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMTg5CgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogMTg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlNNTSBGb2N1cyBQb2ludHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0byBlZmZlY3RpdmVseSB0cmFjZSB0aGUgU3lzdGVtIE1hbmFnZW1lbnQgTW9kZSAoU01NKSBlbnRyeSBhbmQgZXhpdCBwb2ludHMuICBga3ZtX2NoZWNrX2FuZF9pbmplY3RfZXZlbnRzYCBjYWxscyBgZW50ZXJfc21tYCwgYW5kIHRoZSBlbXVsYXRvciBpdHNlbGYgdXNlcyBgZW11bGF0b3JfbGVhdmVfc21tYC4gVGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoIHRvIHVzZSBhcyBhIHN0YXJ0aW5nIHBvaW50LgoKQnV0IGhvbGQgb24sIHRoZSBwYXRjaCBtb2RpZmllcyBgc3ZtX2VudGVyX3NtbWAgYW5kIGBzdm1fbGVhdmVfc21tYC4gIFRoYXQmIzM5O3MgcG90ZW50aWFsbHkgZXZlbiBiZXR0ZXIsIGFzc3VtaW5nIHRoZXkmIzM5O3JlIG5vdCBpbmxpbmVkLCBzaW5jZSB0aGV5JiMzOTtyZSBzcGVjaWZpY2FsbHkgdGllZCB0byB0aGUgQU1EIFNlY3VyZSBWaXJ0dWFsIE1hY2hpbmUgKFNWTSkgaW1wbGVtZW50YXRpb24uIFRoZSBxdWVzdGlvbiBpcywgYXJlIHRoZXkgc3RhdGljIGFuZCBpbmxpbmVkPyBMZXQgbWUgdGhpbmsuLi4gd2FpdCwgSSByZW1lbWJlciBub3chIFRoZXkmIzM5O3JlIGFzc2lnbmVkIHRvIGZ1bmN0aW9uIHBvaW50ZXJzIHdpdGhpbiBgc3ZtX3g4Nl9vcHNgLiBTaW5jZSB0aGV5JiMzOTtyZSBhc3NpZ25lZCB0byBmdW5jdGlvbiBwb2ludGVycywgdGhleSBkZWZpbml0ZWx5ICphcmVuJiMzOTt0KiBpbmxpbmVkLiBQZXJmZWN0LgoKVGhlcmVmb3JlLCBgc3ZtX2VudGVyX3NtbWAgYW5kIGBzdm1fbGVhdmVfc21tYCBhcmUgdGhlIGlkZWFsIGZvY3VzIHN5bWJvbHMgZm9yIHRoaXMgYW5hbHlzaXMuCgpOb3csIGxldCYjMzk7cyBwaXZvdCBhbmQgdGFrZSBhIGxvb2sgYXQgYG5lc3RlZF92bXhfcHJlcGFyZV9tc3JfYml0bWFwYCBhbmQgc2VlIHdoYXQgZWxzZSB3ZSBjYW4gdW5jb3Zlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDU6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmVzdGVkX3ZteF9wcmVwYXJlX21zcl9iaXRtYXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9Njk0PXN0YXRpYyB2b2lkIG5lc3RlZF92bXhfbWVyZ2VfcG11X21zcl9iaXRtYXBzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTcyNS0gKi9cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NzI2OnN0YXRpYyBpbmxpbmUgYm9vbCBuZXN0ZWRfdm14X3ByZXBhcmVfbXNyX2JpdG1hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTcyNy1cdFx0XHRcdFx0XHQgc3RydWN0IHZtY3MxMiAqdm1jczEyKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9MzQzNT1zdGF0aWMgYm9vbCBuZXN0ZWRfZ2V0X3ZtY3MxMl9wYWdlcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zNTE0LVx0fVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzozNTE1Olx0aWYgKG5lc3RlZF92bXhfcHJlcGFyZV9tc3JfYml0bWFwKHZjcHUsIHZtY3MxMikpXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM1MTYtXHRcdGV4ZWNfY29udHJvbHNfc2V0Yml0KHZteCwgQ1BVX0JBU0VEX1VTRV9NU1JfQklUTUFQUyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA1OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMDA4CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0IGluIHRoaXMgYXJlYToKCioqSW5saW5pbmcgYW5kIFZNQ1MxMiBQYWdlczogQSBRdWljayBDaGVjayoqCgpSaWdodCwgbGV0JiMzOTtzIHNlZSwgaXQmIzM5O3MgZGVjbGFyZWQgYHN0YXRpYyBpbmxpbmVgLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgZnVuY3Rpb24sIHdoYXRldmVyIGl0IGlzLCBpcyBnb2luZyB0byBiZSBpbmxpbmVkIGRpcmVjdGx5IGludG8gYG5lc3RlZF9nZXRfdm1jczEyX3BhZ2VzYC4gVGhhdCYjMzk7cyB0aGUgZmlyc3QgdGhpbmcgSSBub3RlLiBJdCBtYWtlcyBzZW5zZSwgZ2l2ZW4gdGhlIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgb2YgY2FsbGluZyBhIGZ1bmN0aW9uLCBlc3BlY2lhbGx5IGluIGEgY3JpdGljYWwgcGF0aC4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gcXVpY2tseSByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0IGBuZXN0ZWRfZ2V0X3ZtY3MxMl9wYWdlc2AgKmFjdHVhbGx5KiBkb2VzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB3aGVyZSB0aGlzIGlubGluaW5nIGlzIGhhcHBlbmluZy4gVGltZSB0byB2ZXJpZnkgaXRzIG9wZXJhdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIGltcGxlbWVudGF0aW9uIGFuZCBlbnN1cmUgdGhlIGlubGluaW5nIG9wdGltaXphdGlvbiBpcyBpbmRlZWQgc291bmQgd2l0aGluIHRoYXQgZnVuY3Rpb24mIzM5O3Mgc2NvcGUuIExldCYjMzk7cyBkaWcgaW50byBgbmVzdGVkX2dldF92bWNzMTJfcGFnZXNgIHRvIGNvbmZpcm0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA1OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25lc3RlZF9nZXRfdm1jczEyX3BhZ2VzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTkwMj1zdGF0aWMgaW50IG5lc3RlZF92bXhfY2hlY2tfYXBpY3ZfY29udHJvbHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtOTI4LVx0ICogdGhlIGRlc2NyaXB0b3IgYWRkcmVzcyBoYXMgYmVlbiBhbHJlYWR5IGNoZWNrZWRcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6OTI5Olx0ICogaW4gbmVzdGVkX2dldF92bWNzMTJfcGFnZXMuXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTkzMC1cdCAqXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz0yNDI0PXN0YXRpYyB2b2lkIHByZXBhcmVfdm1jczAyX2Vhcmx5KHN0cnVjdCB2Y3B1X3ZteCAqdm14LCBzdHJ1Y3QgbG9hZGVkX3ZtY3MgKnZtY3MwMSxcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTI0NzQtXHQvKlxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzoyNDc1Olx0ICogVGhpcyBiaXQgd2lsbCBiZSBjb21wdXRlZCBpbiBuZXN0ZWRfZ2V0X3ZtY3MxMl9wYWdlcywgYmVjYXVzZVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0yNDc2LVx0ICogd2UgZG8gbm90IGhhdmUgYWNjZXNzIHRvIEwxJiMzOTtzIE1TUiBiaXRtYXAgeWV0LiAgRm9yIG5vdywga2VlcFxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9MzQwNj1zdGF0aWMgYm9vbCBuZXN0ZWRfZ2V0X2V2bWNzX3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzQzNC1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6MzQzNTpzdGF0aWMgYm9vbCBuZXN0ZWRfZ2V0X3ZtY3MxMl9wYWdlcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM0MzYte1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9MzUyMz1zdGF0aWMgYm9vbCB2bXhfZ2V0X25lc3RlZF9zdGF0ZV9wYWdlcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zNTQzLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzozNTQ0Olx0aWYgKGlzX2d1ZXN0X21vZGUodmNwdSkgXHUwMDI2XHUwMDI2ICFuZXN0ZWRfZ2V0X3ZtY3MxMl9wYWdlcyh2Y3B1KSlcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzU0NS1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9MzYyMj1lbnVtIG52bXhfdm1lbnRyeV9zdGF0dXMgbmVzdGVkX3ZteF9lbnRlcl9ub25fcm9vdF9tb2RlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM2NzQtXHRpZiAoZnJvbV92bWVudHJ5KSB7XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjM2NzU6XHRcdGlmICh1bmxpa2VseSghbmVzdGVkX2dldF92bWNzMTJfcGFnZXModmNwdSkpKSB7XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM2NzYtXHRcdFx0dm14X3N3aXRjaF92bWNzKHZjcHUsIFx1MDAyNnZteC1cdTAwM2V2bWNzMDEpO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzcwOS1cdFx0ICogbmVlZCB0byBwZXJmb3JtIGdwYSB0byBocGEgdHJhbnNsYXRpb24pLiBSZXF1ZXN0IGEgY2FsbFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzozNzEwOlx0XHQgKiB0byBuZXN0ZWRfZ2V0X3ZtY3MxMl9wYWdlcyBiZWZvcmUgdGhlIG5leHQgVk0tZW50cnkuICBUaGUgTVNSc1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zNzExLVx0XHQgKiBoYXZlIGFscmVhZHkgYmVlbiBzZXQgYXQgdm1lbnRyeSB0aW1lIGFuZCBzaG91bGQgbm90IGJlIHJlc2V0LlxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9Njg4OT1zdGF0aWMgaW50IHZteF9zZXRfbmVzdGVkX3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTY5OTEtXHRcdCAqIHJlc3RvcmVkIHlldC4gRVZNQ1Mgd2lsbCBiZSBtYXBwZWQgZnJvbVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo2OTkyOlx0XHQgKiBuZXN0ZWRfZ2V0X3ZtY3MxMl9wYWdlcygpLlxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02OTkzLVx0XHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDU6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIzNDYKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiA2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBJIHNlZSBpdDoKCioqQ29uc2lkZXJpbmcgTmVzdGVkIFZNWCBFbnRyeSBQb2ludHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB3ZSYjMzk7cmUgZW50ZXJpbmcgbmVzdGVkIFZNWCBhbmQgSSBzZWUgYSBjb3VwbGUgb2YgZnVuY3Rpb25zLiBgbmVzdGVkX2dldF92bWNzMTJfcGFnZXNgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBpbW1lZGlhdGVseSB0ZWxscyBtZSBpdCYjMzk7cyBsaWtlbHkgaW50ZXJuYWwgdG8gYSBzcGVjaWZpYyBjb21waWxhdGlvbiB1bml0LiBJIGFsc28gc2VlIHRoYXQgYG5lc3RlZF92bXhfZW50ZXJfbm9uX3Jvb3RfbW9kZWAgaXMgKm5vdCogc3RhdGljLCB3aGljaCBnaXZlcyBtZSBtb3JlIG9wdGlvbnMgYXMgYSBjYWxsaW5nIHBvaW50LiBHaXZlbiB0aGF0LCBJJiMzOTttIGxlYW5pbmcgdG93YXJkcyB1c2luZyBgbmVzdGVkX3ZteF9lbnRlcl9ub25fcm9vdF9tb2RlYC4gVGhhdCBmZWVscyBsaWtlIHRoZSBtb3JlIHZlcnNhdGlsZSBvcHRpb24uCgpOb3csIGJlZm9yZSBJIGNvbW1pdCB0byB0aGF0LCBJIG5lZWQgdG8gY2hlY2sgc29tZXRoaW5nIGVsc2UuIExldCYjMzk7cyBzZWUgaG93IGBfX25lc3RlZF92bXhfdm1leGl0YCBpcyBkZWZpbmVkLCBqdXN0IHRvIG1ha2Ugc3VyZSB0aGlzIGlzIGdvaW5nIHRvIHBsYXkgbmljZWx5LiBJdCBpcyBlc3NlbnRpYWwgdG8gZW5zdXJlIHRoYXQgdGhlIHZtZXhpdCBoYW5kbGVyIGlzIHByb3Blcmx5IGNvbmZpZ3VyZWQgdG8gZGVhbCB3aXRoIG5vbi1yb290IG1vZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA1OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fbmVzdGVkX3ZteF92bWV4aXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NDk0MT1zdGF0aWMgdm9pZCBuZXN0ZWRfdm14X3Jlc3RvcmVfaG9zdF9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01MDUzLSAqL1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo1MDU0OnZvaWQgX19uZXN0ZWRfdm14X3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiB2bV9leGl0X3JlYXNvbixcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTA1NS1cdFx0XHQgdTMyIGV4aXRfaW50cl9pbmZvLCB1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDU6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI4MzgKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIER5bmFtaWMgTmF0dXJlIGFuZCBMZXZlcmFnaW5nIE5lc3RlZCBWaXJ0dWFsaXphdGlvbioqCgpSaWdodCwgc28gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgbm9uLXN0YXRpYyBoZXJlLiBUaGF0IGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIGFib3V0IGR5bmFtaXNtLCBhbmQgaG93IHdlJiMzOTtyZSBnb2luZyB0byBhY2NvbW1vZGF0ZSB0aGF0LiBNeSBndXQgcmVhY3Rpb24gaXMgdGhhdCB3ZSBtaWdodCBiZSBhYmxlIHRvIGxldmVyYWdlIGBfX25lc3RlZF92bXhfdm1leGl0YC4gSXQgZmVlbHMgbGlrZSB0aGUgcmlnaHQgdG9vbCBmb3IgdGhlIGpvYiBnaXZlbiB0aGUgc2l0dWF0aW9uLgoKTm93LCBiZWZvcmUgSSBnZXQgdG9vIGZhciBkb3duIHRoYXQgcGF0aCwgSSBzaG91bGQgcXVpY2tseSBjaGVjayBpbiBvbiBga3ZtcHBjX3BhdGNoX2RjYnpgLiBJdCYjMzk7cyBhIGtleSBhcmVhIHRoYXQgb2Z0ZW4gbmVlZHMgY2FyZWZ1bCBtYW5hZ2VtZW50IHdpdGggdGhpcyB0eXBlIG9mIGFwcHJvYWNoLCBhbmQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nIHRoYXQgY291bGQgaW50ZXJhY3Qgb3IgaW50ZXJmZXJlIHdpdGggdGhpcy4gTWFraW5nIHRoaXMgY2hlY2sgdXBmcm9udCBzaG91bGQgc2F2ZSBzb21lIHRpbWUuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwNTo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1wcGNfcGF0Y2hfZGNieiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYz01NTA9c3RhdGljIHZvaWQga3ZtcHBjX3NldF9wdnJfcHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgcHZyKVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmMtNjM5LSAqL1xuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYzo2NDA6c3RhdGljIHZvaWQga3ZtcHBjX3BhdGNoX2RjYnooc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtcHBjX3B0ZSAqcHRlKVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYy02NDEte1xuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmM9Njc3PXN0YXRpYyBpbnQga3ZtcHBjX2hhbmRsZV9wYWdlZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmMtNzc4LVx0XHRcdCAoISh2Y3B1LVx1MDAzZWFyY2guaGZsYWdzIFx1MDAyNiBCT09LM1NfSEZMQUdfRENCWjMyKSkpXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wci5jOjc3OTpcdFx0XHRrdm1wcGNfcGF0Y2hfZGNieih2Y3B1LCBcdTAwMjZwdGUpO1xuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYy03ODAtXHR9IGVsc2Uge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwNTo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzQxNwoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIGBrdm1wcGNfaGFuZGxlX3BhZ2VmYXVsdGAqKgoKT2theSwgc28gYGt2bXBwY19oYW5kbGVfcGFnZWZhdWx0YCBpcyBhICpzdGF0aWMqIGZ1bmN0aW9uLiBUaGF0IGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rLCAmIzM0O0FscmlnaHQsIGxldCYjMzk7cyBzZWUgd2hlcmUgdGhpcyB0aGluZyBpcyBhY3R1YWxseSBiZWluZyB1c2VkLiBTdGF0aWMgZnVuY3Rpb25zIGFyZSBsb2NhbGl6ZWQsIHdoaWNoIG1lYW5zIGZpZ3VyaW5nIG91dCBpdHMgY2FsbGVycyBpcyBnb2luZyB0byBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBpdHMgb3ZlcmFsbCBpbXBhY3QgYW5kIGZ1bmN0aW9uYWxpdHkgd2l0aGluIHRoZSBLVk0vUFBDIGFyY2hpdGVjdHVyZS4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGlzIHNwZWNpZmljIHBhZ2UgZmF1bHQgaGFuZGxlciB0byB1bmRlcnN0YW5kIHRoZSBjaGFpbiBvZiBldmVudHMgdGhhdCBsZWFkIHRvIGl0IGJlaW5nIGludm9rZWQuJiMzNDsgSSYjMzk7bSBtZW50YWxseSBmaWxpbmcgdGhpcyBhcyBhIGxvY2FsaXplZCBpbnZlc3RpZ2F0aW9uLCBmb2N1c2luZyBzb2xlbHkgb24gdGhlIGltbWVkaWF0ZSBjYWxsIGdyYXBoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwNTo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1wcGNfaGFuZGxlX3BhZ2VmYXVsdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYz02NjI9c3RhdGljIGJvb2wga3ZtcHBjX3Zpc2libGVfZ3BhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhKVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmMtNjc2LVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYzo2Nzc6c3RhdGljIGludCBrdm1wcGNfaGFuZGxlX3BhZ2VmYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wci5jLTY3OC1cdFx0XHQgICAgdWxvbmcgZWFkZHIsIGludCB2ZWMpXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYz0xMTMyPWludCBrdm1wcGNfaGFuZGxlX2V4aXRfcHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgZXhpdF9ucilcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wci5jLTExNzctXHRcdFx0aW50IGlkeCA9IHNyY3VfcmVhZF9sb2NrKFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZXNyY3UpO1xuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYzoxMTc4Olx0XHRcdHIgPSBrdm1wcGNfaGFuZGxlX3BhZ2VmYXVsdCh2Y3B1LCBrdm1wcGNfZ2V0X3BjKHZjcHUpLCBleGl0X25yKTtcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmMtMTE3OS1cdFx0XHRzcmN1X3JlYWRfdW5sb2NrKFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZXNyY3UsIGlkeCk7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYy0xMjI3LVx0XHRcdGludCBpZHggPSBzcmN1X3JlYWRfbG9jayhcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VzcmN1KTtcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmM6MTIyODpcdFx0XHRyID0ga3ZtcHBjX2hhbmRsZV9wYWdlZmF1bHQodmNwdSwgZGFyLCBleGl0X25yKTtcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmMtMTIyOS1cdFx0XHRzcmN1X3JlYWRfdW5sb2NrKFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZXNyY3UsIGlkeCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA1OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MTA2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQb3RlbnRpYWwgSG9vayBQb2ludHMgZm9yIFZpcnR1YWxpemF0aW9uIEV4aXQgSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB3ZSBjYW4gaW50ZXJjZXB0IGFuZCBoYW5kbGUgdmlydHVhbGl6YXRpb24gZXhpdHMuIGBrdm1wcGNfaGFuZGxlX2V4aXRfcHJgIGlzIGRlZmluaXRlbHkgYSBrZXkgZnVuY3Rpb24gaGVyZSwgYW5kIHRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgKm5vdCogc3RhdGljIGlzIHZlcnkgcHJvbWlzaW5nLiBUaGF0IG1lYW5zIHdlIGNhbiBwb3RlbnRpYWxseSByZS1wdXJwb3NlIG9yIGhvb2sgaW50byBpdCBkaXJlY3RseS4KClNvLCB0aGUgY2VudHJhbCBmdW5jdGlvbnMgSSYjMzk7dmUgaWRlbnRpZmllZCB0aGF0IHdlIG5lZWQgdG8gY29uc2lkZXIgYXJlOgoKKiAgIGBuZXN0ZWRfc3ZtX3ZtcnVuYAoqICAgYG5lc3RlZF9zdm1fdm1leGl0YAoqICAgYHZtbG9hZF9pbnRlcmNlcHRpb25gCiogICBgdm1zYXZlX2ludGVyY2VwdGlvbmAKKiAgIGBzdm1fZW50ZXJfc21tYAoqICAgYHN2bV9sZWF2ZV9zbW1gCiogICBgbmVzdGVkX3ZteF9lbnRlcl9ub25fcm9vdF9tb2RlYAoqICAgYF9fbmVzdGVkX3ZteF92bWV4aXRgCiogICBga3ZtcHBjX2hhbmRsZV9leGl0X3ByYAoKTm93LCBob2xkIG9uLi4uSSBzZWUgdGhhdCBgc3ZtX2VudGVyX3NtbWAgYW5kIGBzdm1fbGVhdmVfc21tYCBhcmUgc3RhdGljLiBUaGF0JiMzOTtzIG5vdCBpZGVhbCBmb3IgZGlyZWN0IGhvb2tpbmcuIEJ1dCB3YWl0LCBjYW4gd2UgbWF5YmUgdXNlIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyBgZW50ZXJfc21tYCBhbmQgYGVtdWxhdG9yX2xlYXZlX3NtbWAgaW5zdGVhZD8gTGV0JiMzOTtzIHF1aWNrbHkgZG91YmxlLWNoZWNrLi4uIFllcywgYGVudGVyX3NtbWAgaXMgZGVmaW5pdGVseSBub24tc3RhdGljLCB3aGljaCBpcyB3aGF0IHdlIG5lZWQuIEFuZCwgZ29vZCwgYGVtdWxhdG9yX2xlYXZlX3NtbWAgaXMgYWxzbyBub24tc3RhdGljLiBFeGNlbGxlbnQuIExldCYjMzk7cyBkaWcgaW50byBgZW11bGF0b3JfbGVhdmVfc21tYCBpbiBhIGJpdCBtb3JlIGRldGFpbCB0byBlbnN1cmUgaXQgcHJvdmlkZXMgdGhlIG5lY2Vzc2FyeSBmdW5jdGlvbmFsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwNTo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtlbXVsYXRvcl9sZWF2ZV9zbW0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zbW0uYz01MTY9c3RhdGljIGludCByc21fbG9hZF9zdGF0ZV82NChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCxcbi0tXG5hcmNoL3g4Ni9rdm0vc21tLmMtNTcyLVxuYXJjaC94ODYva3ZtL3NtbS5jOjU3MzppbnQgZW11bGF0b3JfbGVhdmVfc21tKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KVxuYXJjaC94ODYva3ZtL3NtbS5jLTU3NC17XG4tLVxuYXJjaC94ODYva3ZtL3NtbS5oPTE1OD12b2lkIGVudGVyX3NtbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuYXJjaC94ODYva3ZtL3NtbS5oOjE1OTppbnQgZW11bGF0b3JfbGVhdmVfc21tKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KTtcbmFyY2gveDg2L2t2bS9zbW0uaC0xNjAtdm9pZCBwcm9jZXNzX3NtaShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuLS1cbmFyY2gveDg2L2t2bS9zbW0uaD0xNjM9c3RhdGljIGlubGluZSBib29sIGlzX3NtbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpIHsgcmV0dXJuIGZhbHNlOyB9XG4tLVxuYXJjaC94ODYva3ZtL3NtbS5oLTE2NS0vKlxuYXJjaC94ODYva3ZtL3NtbS5oOjE2NjogKiBlbXVsYXRvcl9sZWF2ZV9zbW0gaXMgdXNlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIsIHNvIHRoZVxuYXJjaC94ODYva3ZtL3NtbS5oLTE2Ny0gKiBzdHViIGlzIGRlZmluZWQgaW4geDg2LmMuXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTU3NTQ9c3RhdGljIGJvb2wgZW11bGF0b3JfaXNfc21tKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy01NzU5LSNpZm5kZWYgQ09ORklHX0tWTV9TTU1cbmFyY2gveDg2L2t2bS94ODYuYzo1NzYwOnN0YXRpYyBpbnQgZW11bGF0b3JfbGVhdmVfc21tKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KVxuYXJjaC94ODYva3ZtL3g4Ni5jLTU3NjEte1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYz01ODE0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgeDg2X2VtdWxhdGVfb3BzIGVtdWxhdGVfb3BzID0ge1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYy01ODU2LVx0LmlzX3NtbSAgICAgICAgICAgICAgPSBlbXVsYXRvcl9pc19zbW0sXG5hcmNoL3g4Ni9rdm0veDg2LmM6NTg1NzpcdC5sZWF2ZV9zbW0gICAgICAgICAgID0gZW11bGF0b3JfbGVhdmVfc21tLFxuYXJjaC94ODYva3ZtL3g4Ni5jLTU4NTgtXHQudHJpcGxlX2ZhdWx0ICAgICAgICA9IGVtdWxhdG9yX3RyaXBsZV9mYXVsdCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDU6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUzNjEKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAxODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVmaW5pbmcgdGhlIEZvY3VzOiBIeXBlcnZpc29yIEVudHJ5L0V4aXQgUG9pbnRzKioKCk9rYXksIHNvIGBlbXVsYXRvcl9sZWF2ZV9zbW1gIGlzIGRlZmluaXRlbHkgbm90IHN0YXRpYywgd2hpY2ggaXMgZ29vZCB0byBrbm93LiBOb3csIGxldCYjMzk7cyByZWZpbmUgdGhpcyBsaXN0IG9mIGtleSBmdW5jdGlvbnMgd2UmIzM5O3JlIGZvY3VzaW5nIG9uLiBJJiMzOTttIHRoaW5raW5nIHdlIG5lZWQgdG8gY29uY2VudHJhdGUgb24gdGhlIHBvaW50cyB3aGVyZSB0aGUgaHlwZXJ2aXNvciBpcyBlaXRoZXIgZW50ZXJlZCBvciBleGl0ZWQuIFNvLCByaWdodCBub3csIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlc2UgZnVuY3Rpb25zOiBgbmVzdGVkX3N2bV92bXJ1bmAsIGBuZXN0ZWRfc3ZtX3ZtZXhpdGAsIGB2bWxvYWRfaW50ZXJjZXB0aW9uYCwgYHZtc2F2ZV9pbnRlcmNlcHRpb25gLCBgZW50ZXJfc21tYCwgYGVtdWxhdG9yX2xlYXZlX3NtbWAsIGBuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGVgLCBgX19uZXN0ZWRfdm14X3ZtZXhpdGAsIGFuZCBga3ZtcHBjX2hhbmRsZV9leGl0X3ByYC4KCkJ1dCwgd2FpdCBhIG1pbnV0ZS4uLiBpcyBga3ZtcHBjX2hhbmRsZV9leGl0X3ByYCBwb3RlbnRpYWxseSB0b28gaGlnaC1sZXZlbD8gSXQmIzM5O3MgdGhlIGNlbnRyYWwgaGFuZGxlciBmb3IgKmFsbCogZXhpdHMgcmVsYXRlZCB0byBQUiBLVk0uIEl0JiMzOTtzIGEgYnJvYWQgZnVuY3Rpb24sIGFuZCBJIG5lZWQgdG8gaG9uZSBpbiBvbiB0aGUgY29yZSBvcGVyYXRpb25zLiBQZXJoYXBzIGBrdm1wcGNfaGFuZGxlX3BhZ2VmYXVsdGAgd291bGQgYmUgYSBiZXR0ZXIgY2hvaWNlLiBFdmVuIGlmIGl0JiMzOTtzIHN0YXRpYywgaXQmIzM5O3MgYSBzaXphYmxlIGZ1bmN0aW9uLCBhbmQgdGhlcmUmIzM5O3MgYSBnb29kIGNoYW5jZSBpdCB3b24mIzM5O3QgYmUgaW5saW5lZC4gVGhhdCBjb3VsZCBtYWtlIGl0IGEgbW9yZSBtYW5hZ2VhYmxlIHRhcmdldCBmb3IgYW5hbHlzaXMuIEkmIzM5O2xsIG5lZWQgdG8gY29uc2lkZXIgdGhlIHRyYWRlLW9mZnMgb2YgdGhlIGNvbXBsZXhpdHkgb2YgdGhlIGZ1bmN0aW9uLCB2ZXJzdXMgdGhlIHZvbHVtZSBvZiBhY3Rpdml0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDU6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtcHBjX2hhbmRsZV9wYWdlZmF1bHQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmM9NjYyPXN0YXRpYyBib29sIGt2bXBwY192aXNpYmxlX2dwYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSlcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wci5jLTY3Ni1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmM6Njc3OnN0YXRpYyBpbnQga3ZtcHBjX2hhbmRsZV9wYWdlZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYy02NzgtXHRcdFx0ICAgIHVsb25nIGVhZGRyLCBpbnQgdmVjKVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmM9MTEzMj1pbnQga3ZtcHBjX2hhbmRsZV9leGl0X3ByKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgaW50IGV4aXRfbnIpXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYy0xMTc3LVx0XHRcdGludCBpZHggPSBzcmN1X3JlYWRfbG9jayhcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VzcmN1KTtcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmM6MTE3ODpcdFx0XHRyID0ga3ZtcHBjX2hhbmRsZV9wYWdlZmF1bHQodmNwdSwga3ZtcHBjX2dldF9wYyh2Y3B1KSwgZXhpdF9ucik7XG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wci5jLTExNzktXHRcdFx0c3JjdV9yZWFkX3VubG9jayhcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VzcmN1LCBpZHgpO1xuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmMtMTIyNy1cdFx0XHRpbnQgaWR4ID0gc3JjdV9yZWFkX2xvY2soXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlc3JjdSk7XG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wci5jOjEyMjg6XHRcdFx0ciA9IGt2bXBwY19oYW5kbGVfcGFnZWZhdWx0KHZjcHUsIGRhciwgZXhpdF9ucik7XG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wci5jLTEyMjktXHRcdFx0c3JjdV9yZWFkX3VubG9jayhcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VzcmN1LCBpZHgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwNTo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjM4NAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRoZSBleHBlcnQ6CgoqKkFuYWx5emluZyB0aGUgS1ZNL1BQQyBFeGl0IEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGBrdm1wcGNfaGFuZGxlX2V4aXRfcHJgLiBJIHNlZSBpdCYjMzk7cyBjYWxsZWQgdHdpY2UsIHdoaWNoIGlzIGEgY2x1ZTsgbm90IGFsd2F5cywgYnV0IG9mdGVuIHN1Z2dlc3RzIGl0JiMzOTtzICpub3QqIGlubGluZWQuIElmIGl0IHdhcyBpbmxpbmVkLCB5b3Ugd291bGQgdGhpbmsgd2Ugd291bGRuJiMzOTt0IHNlZSBtdWx0aXBsZSBjYWxscyBzbyBlYXNpbHkuCgpUaGlua2luZyBhYm91dCBhbHRlcm5hdGl2ZXMsIEkmIzM5O20gZ29pbmcgdG8gbG9vayBhdCB1c2luZyBga3ZtcHBjX2hhbmRsZV9wYWdlZmF1bHRgIGFzIGEgcG9zc2libHkgcmVsYXRlZCBmdW5jdGlvbiBmb3IgdGhpcyBwcm9jZXNzLgoKTm93LCBsZXQmIzM5O3Mgc3dpdGNoIGdlYXJzIGEgYml0LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hlcmUgdGhlIFZDUFUgbWFwcGluZyBoYXBwZW5zLCBzbyBJJiMzOTtsbCBnbyBjaGVjayBvdXQgYF9fa3ZtX3ZjcHVfbWFwYC4gSSBrbm93IGl0JiMzOTtzIGluIGB2aXJ0L2t2bS9rdm1fbWFpbi5jYCwgd2hpY2ggbWFrZXMgc2Vuc2UgYXMgdGhhdCYjMzk7cyBnZW5lcmFsbHkgd2hlcmUgY29yZSBLVk0gZnVuY3Rpb25hbGl0eSBsaXZlcy4gSSB3aWxsIGNoZWNrIHRoZSBjb250ZXh0IHN1cnJvdW5kaW5nIHRoYXQgY2FsbCwgYW5kIHRoZSBwYXJhbWV0ZXJzIGludm9sdmVkLCBhcyB0aGF0IHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHdoYXQmIzM5O3MgaGFwcGVuaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwNTo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2t2bV92Y3B1X21hcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3ZpcnQva3ZtL2t2bV9tYWluLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7dmlydC9rdm0va3ZtX21haW4uYz0zMTA4PUVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChfX2dmbl90b19wYWdlKTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzEwOS1cbnZpcnQva3ZtL2t2bV9tYWluLmM6MzExMDppbnQgX19rdm1fdmNwdV9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBnZm5fdCBnZm4sIHN0cnVjdCBrdm1faG9zdF9tYXAgKm1hcCxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzExMS1cdFx0ICAgYm9vbCB3cml0YWJsZSlcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMxNDQtfVxudmlydC9rdm0va3ZtX21haW4uYzozMTQ1OkVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChfX2t2bV92Y3B1X21hcCk7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMxNDYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA1OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2OTM4CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogOTA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIEtWTSBDaGFuZ2VzIGFuZCBSZWxldmFudCBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhlc2UgS1ZNIGNoYW5nZXMsIGZvY3VzaW5nIG9uIHRoZSBpbXBsaWNhdGlvbnMgYW5kIHBvdGVudGlhbCBhcmVhcyBmb3IgdGVzdGluZy4gIFRoZSBjb3JlIG9mIHRoZSBtYXR0ZXIgaXMgdGhlIGFkZGl0aW9uIG9mIGEgc2FmZXR5IGNoZWNrIHdpdGhpbiBgX19rdm1fdmNwdV9tYXBgOiBgaWYgKFdBUk5fT05fT05DRShtYXAtJmd0O2h2YSkpIGt2bV92Y3B1X3VubWFwKHZjcHUsIG1hcCk7YC4gIFRoaXMgbG9va3MgbGlrZSBhIGNydWNpYWwgc2FmZWd1YXJkLCBwcmV2ZW50aW5nIHBvdGVudGlhbCBpc3N1ZXMgd2l0aCB0aGUgbWVtb3J5IG1hcHBpbmcuCgpJJiMzOTt2ZSBkZXRlcm1pbmVkIHRoYXQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byBjb25zaWRlciBhcmU6IGBLVk1gLCBgS1ZNX0FNRGAsIGBLVk1fSU5URUxgLCBgS1ZNX0JPT0szU182NF9QUmAsIGBLVk1fU01NYCwgYW5kIGBLVk1fSFlQRVJWYC4gIFNwZWNpZmljYWxseSwgSSB2ZXJpZmllZCB0aGF0IGBLVk1fU01NYCAqaXMqIG5lZWRlZCBiZWNhdXNlIGl0IGVuYWJsZXMgU01NIGVtdWxhdGlvbi4gV2l0aCBhIGNsb3NlciBsb29rLCB0aGUgY2hhbmdlIGluIGBfX25lc3RlZF92bXhfdm1leGl0YCBub3cgY2FsbHMgYGt2bV9jaGVja19yZXF1ZXN0YCB1bmNvbmRpdGlvbmFsbHkuIFRoaXMgaXMgYSBidWcgZml4IGZvciBub24tSHlwZXJWIGNhc2VzIHdoZXJlIHRoZSByZXF1ZXN0IHdhcyBub3QgY2xlYXJlZC4gU28gd2hpbGUgYEtWTV9IWVBFUlZgIGlzbiYjMzk7dCAqc3RyaWN0bHkqIHJlcXVpcmVkIHRvIHRlc3QgdGhlIGZpeCBpdHNlbGYsIGluY2x1ZGluZyBpdCBkdXJpbmcgdGVzdGluZyB3b24mIzM5O3QgaHVydCwgc28gSSYjMzk7bGwga2VlcCBpdCBhcyBhIGNvbmZpZ3VyYXRpb24gdG8gaW5jbHVkZS4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIGZ1bmN0aW9ucyB0aGVtc2VsdmVzLiBJIGluaXRpYWxseSBsaXN0ZWQgYF9fa3ZtX3ZjcHVfbWFwYCwgYnV0IGFmdGVyIGEgY2xvc2VyIGV4YW1pbmF0aW9uLCBJJiMzOTt2ZSBkZWNpZGVkIHRvIG9taXQgdGhpcyBvbmUgZnJvbSBteSBjb3JlIGZvY3VzLCBhcyBpdCYjMzk7cyBhIHZlcnkgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbiBjYWxsZWQgYnkgYGt2bV92Y3B1X21hcGAgYW5kIGBrdm1fdmNwdV9tYXBfcmVhZG9ubHlgLiBJdCYjMzk7cyB1c2VkIHNvIGJyb2FkbHkgdGhhdCBpdCB3aWxsIGJlIGltcHJhY3RpY2FsIHRvIGZvY3VzIG9uIGl0LiBJbnN0ZWFkLCBJJiMzOTtsbCBiZSBjb25jZW50cmF0aW5nIG9uIHRoZXNlIGZ1bmN0aW9uczoKCiogICBgbmVzdGVkX3N2bV92bXJ1bmA6IEhhbmRsZXMgdGhlIFZNUlVOIGluc3RydWN0aW9uIGluIG5lc3RlZCBTVk0uCiogICBgbmVzdGVkX3N2bV92bWV4aXRgOiBIYW5kbGVzIFZNRVhJVCBpbiBuZXN0ZWQgU1ZNLgoqICAgYHZtbG9hZF9pbnRlcmNlcHRpb25gOiBIYW5kbGVzIFZNTE9BRCBpbnN0cnVjdGlvbi4KKiAgIGB2bXNhdmVfaW50ZXJjZXB0aW9uYDogSGFuZGxlcyBWTVNBVkUgaW5zdHJ1Y3Rpb24uCiogICBgZW50ZXJfc21tYDogSGFuZGxlcyBTTU0gZW50cnkuCiogICBgZW11bGF0b3JfbGVhdmVfc21tYDogSGFuZGxlcyBTTU0gZXhpdC4KKiAgIGBuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGVgOiBIYW5kbGVzIFZNWCBlbnRyeS4KKiAgIGBfX25lc3RlZF92bXhfdm1leGl0YDogSGFuZGxlcyBWTVggZXhpdC4KKiAgIGBrdm1wcGNfaGFuZGxlX3BhZ2VmYXVsdGA6IEhhbmRsZXMgcGFnZSBmYXVsdHMgaW4gUFIgS1ZNLgoKR2l2ZW4gdGhhdCBgbmVzdGVkX3ZteF9wcmVwYXJlX21zcl9iaXRtYXBgIGlzIGlubGluZWQgYW5kIHJlbGV2YW50IGZ1bmN0aW9ucyBpbmNsdWRlIGB2bXhfZ2V0X25lc3RlZF9zdGF0ZV9wYWdlc2Agd2hpY2ggaXMgY2FsbGVkIGJ5IGB2bXhfc2V0X25lc3RlZF9zdGF0ZWAsIGl0IG1ha2VzIHNlbnNlIHRvIGluY2x1ZGUgYHZteF9zZXRfbmVzdGVkX3N0YXRlYCBhcyBhIGZvY3VzIGZ1bmN0aW9uLgoKU28sIGluIHN1bW1hcnksIHRoZSBrZXkgYXJlYXMgdG8gY29uY2VudHJhdGUgb24gZm9yIHRlc3RpbmcgYXJlIHRoZXNlIGZ1bmN0aW9ucywgd2l0aCB0aGVzZSBjb25maWd1cmF0aW9ucywgdG8gdGhvcm91Z2hseSB2YWxpZGF0ZSB0aGUgc2FmZXR5IGNoZWNrIGFuZCBpdHMgaW1wYWN0IG9uIHRoZSBoeXBlcnZpc29yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwNTo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2bXhfc2V0X25lc3RlZF9zdGF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz02ODY3PWludCBuZXN0ZWRfdm14X2NoZWNrX3Jlc3RvcmVkX3ZtY3MxMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02ODg4LVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo2ODg5OnN0YXRpYyBpbnQgdm14X3NldF9uZXN0ZWRfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02ODkwLVx0XHRcdFx0c3RydWN0IGt2bV9uZXN0ZWRfc3RhdGUgX191c2VyICp1c2VyX2t2bV9uZXN0ZWRfc3RhdGUsXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz03NDc1PXN0cnVjdCBrdm1feDg2X25lc3RlZF9vcHMgdm14X25lc3RlZF9vcHMgX19pbml0ZGF0YSA9IHtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTc0ODItXHQuZ2V0X3N0YXRlID0gdm14X2dldF9uZXN0ZWRfc3RhdGUsXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjc0ODM6XHQuc2V0X3N0YXRlID0gdm14X3NldF9uZXN0ZWRfc3RhdGUsXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTc0ODQtXHQuZ2V0X25lc3RlZF9zdGF0ZV9wYWdlcyA9IHZteF9nZXRfbmVzdGVkX3N0YXRlX3BhZ2VzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwNTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODg3OAoJCQkJCQkJb3V0cHV0OiA0OQoJCQkJCQkJdGhvdWdodHM6IDgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvZGUsIGJyZWFraW5nIGl0IGRvd24gaW4gbXkgb3duIG1lbnRhbCBtb2RlbDoKCioqRGlnZXN0aW5nIHRoZSBOZXN0ZWQgU3RhdGUgTWVjaGFuaXNtKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgbmVzdGVkIHZpcnR1YWxpemF0aW9uIHN0YXRlIGlzIG1hbmFnZWQgd2l0aGluIEtWTSwgYW5kIEkmIzM5O3ZlIHRyYWNlZCBhIGJpdCBvZiB0aGUgY29kZS4gIGB2bXhfc2V0X25lc3RlZF9zdGF0ZWAgaXMgYSBzdGF0aWNhbGx5IGRlZmluZWQgZnVuY3Rpb24uIEJ1dCB3aGF0JiMzOTtzIGludGVyZXN0aW5nIGlzIHRoYXQgaXQmIzM5O3MgYmVpbmcgKmFzc2lnbmVkKiB0byBga3ZtX3g4Nl9uZXN0ZWRfb3BzLnNldF9zdGF0ZWAuIFRoYXQgc3VnZ2VzdHMgYHZteF9zZXRfbmVzdGVkX3N0YXRlYCBpcyB0aGUgY29uY3JldGUgaW1wbGVtZW50YXRpb24uIFRoZSBhYnN0cmFjdGlvbiB3b3VsZCBiZSB3aXRoaW4gYGt2bV94ODZfbmVzdGVkX29wc2AsIHdoaWxlIHRoZSB1bmRlcmx5aW5nIG9wZXJhdGlvbiBiZWxvbmdzIHRvIFZNWCwgYXMgaXRzIG5hbWUgc3VnZ2VzdHMuCgpOb3csIEkgc2VlIHRoZSBjYWxsIGNoYWluLiBgdm14X3NldF9uZXN0ZWRfc3RhdGVgIGlzbiYjMzk7dCBjYWxsZWQgZGlyZWN0bHksIGl0JiMzOTtzIGNhbGxlZCB0aHJvdWdoIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9uZXN0ZWRfc3RhdGVgLiBCaW5nbyEgYGt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X25lc3RlZF9zdGF0ZWAgaXMgbXkgcHJpbWFyeSBlbnRyeSBwb2ludCwgdGhlIHdheSB0byBzZXQgdGhlIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBzdGF0ZS4gIFRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0IGRpZ2dpbmcgdG8gdW5kZXJzdGFuZCAqaG93KiBuZXN0ZWQgc3RhdGVzIGFyZSBiZWluZyBtYW5hZ2VkLiBGcm9tIHRoZXJlLCBJIGNhbiBpbnZlc3RpZ2F0ZSB0aGUgYGt2bV94ODZfbmVzdGVkX29wc2Agc3RydWN0dXJlLCBhbmQgZmluYWxseSBgdm14X3NldF9uZXN0ZWRfc3RhdGVgIGl0c2VsZi4gVGhhdCBnaXZlcyBtZSB0aGUgYmlnIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA1OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfbmVzdGVkX3N0YXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3g4Ni5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDU6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkzMjIKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipEaXNzZWN0aW5nIHRoZSBLVk0gTmVzdGVkIFN0YXRlIEZ1bmN0aW9uKioKCk9rYXksIHNvIHRoZSBmdW5jdGlvbiBuYW1lIGlzIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9uZXN0ZWRfc3RhdGVgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSBpbnRvIHRoZSBgc2V0X25lc3RlZF9zdGF0ZWAgZnVuY3Rpb24gd2l0aGluIHRoZSB4ODYgYXJjaGl0ZWN0dXJlIGNvZGUsIHNwZWNpZmljYWxseSBpbiBgYXJjaC94ODYva3ZtL3g4Ni5jYC4gVGhhdCYjMzk7cyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBjb3JlIGxvZ2ljIGZvciBzZXR0aW5nIHRoZSBuZXN0ZWQgc3RhdGUgd2l0aGluIGEgS1ZNIGNvbnRleHQsIGxpa2VseSBoYW5kbGluZyB0aGUgaW50cmljYWNpZXMgb2YgaGFyZHdhcmUgdmlydHVhbGl6YXRpb24gZXh0ZW5zaW9ucyBhbmQgdGhlaXIgY29uZmlndXJhdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBkaWcgdXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA1OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2V0X25lc3RlZF9zdGF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS94ODYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA1OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NTYwCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipOZXN0ZWQgVmlydHVhbGl6YXRpb24gRGl2ZTogS1ZNX1NFVF9ORVNURURfU1RBVEUgSW52ZXN0aWdhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgaW50byB0aGUgaW50cmljYWNpZXMgb2YgbmVzdGVkIHZpcnR1YWxpemF0aW9uIHdpdGhpbiBLVk0sIGFuZCBteSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIG1lY2hhbmlzbSB0byBzZXQgdGhlIG5lc3RlZCBzdGF0ZS4gSSYjMzk7bSB0aGlua2luZywgJiMzNDtXaGVyZSB3b3VsZCB0aGlzIGNydWNpYWwgYml0IG9mIGZ1bmN0aW9uYWxpdHkgYmUgaGFuZGxlZD8mIzM0OyBOYXR1cmFsbHksIGdpdmVuIHRoZSBhcmNoaXRlY3R1cmUsIGBhcmNoL3g4Ni9rdm0veDg2LmNgIGZlZWxzIGxpa2UgdGhlIG1vc3QgbG9naWNhbCBzdGFydGluZyBwb2ludC4gSSB3YW50IHRvIHplcm8gaW4gb24gYEtWTV9TRVRfTkVTVEVEX1NUQVRFYC4gVGhpcyBtYWNybyBvciBmdW5jdGlvbiBpcyBsaWtlbHkgdGhlIGtleSB0byBjb250cm9sbGluZyB0aGUgbmVzdGVkIGd1ZXN0IGV4ZWN1dGlvbiBlbnZpcm9ubWVudCBmcm9tIHRoZSBob3N0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IgdGhvcm91Z2hseSDigJMgaG93IGl0JiMzOTtzIGludm9rZWQsIHdoYXQgZGF0YSBpdCBvcGVyYXRlcyBvbiwgYW5kLCBtb3N0IGNyaXRpY2FsbHksIGhvdyBpdCBpbnRlZ3JhdGVzIHdpdGggdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgdmlydHVhbGl6YXRpb24gZmVhdHVyZXMsIHBhcnRpY3VsYXJseSB0aGUgZXh0ZW5kZWQgcGFnZSB0YWJsZXMgKEVQVCkgYW5kIHZpcnR1YWwgbWFjaGluZSBjb250cm9sIHN0cnVjdHVyZXMgKFZNQ1MpLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgd2UgYXJlIGV4cG9zaW5nIGFuZCBjb25maWd1cmluZyB0aGVzZSBuZXN0ZWQgZmVhdHVyZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA1OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0tWTV9TRVRfTkVTVEVEX1NUQVRFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3g4Ni5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS94ODYuYz0zNDE2PWxvbmcga3ZtX2FyY2hfdmNwdV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtMzc3NS1cdH1cbmFyY2gveDg2L2t2bS94ODYuYzozNzc2Olx0Y2FzZSBLVk1fU0VUX05FU1RFRF9TVEFURToge1xuYXJjaC94ODYva3ZtL3g4Ni5jLTM3NzctXHRcdHN0cnVjdCBrdm1fbmVzdGVkX3N0YXRlIF9fdXNlciAqdXNlcl9rdm1fbmVzdGVkX3N0YXRlID0gYXJncDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDU6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzAwMDQKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiA0ODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEtWTSBJbnRlcmNlcHRpb24gUG9pbnRzKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgS1ZNIGNvZGUsIGFuZCBpdCBsb29rcyBsaWtlIHRoZSByZWxldmFudCBmdW5jdGlvbiBpcyBpbnNpZGUgYGt2bV9hcmNoX3ZjcHVfaW9jdGxgLiBUaGF0IG1lYW5zIGB2bXhfc2V0X25lc3RlZF9zdGF0ZWAgaXMgdGhlIGtleSBmdW5jdGlvbiB0byBmb2N1cyBvbiwgYW5kIHNpbmNlIGl0JiMzOTtzIGNhbGxlZCB0aHJvdWdoIGEgZnVuY3Rpb24gcG9pbnRlciwgaXQgc2hvdWxkbiYjMzk7dCBiZSBpbmxpbmVkLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4KCk5vdywgbGV0JiMzOTtzIHJldmlldyB0aGUgbWFpbiBmdW5jdGlvbnMgdGhhdCBjb3VsZCBiZSBpbnRlcmNlcHRpbmcgdGhpbmdzLiBJJiMzOTt2ZSBnb3Q6CgoqICAgYG5lc3RlZF9zdm1fdm1ydW5gCiogICBgbmVzdGVkX3N2bV92bWV4aXRgCiogICBgdm1sb2FkX2ludGVyY2VwdGlvbmAKKiAgIGB2bXNhdmVfaW50ZXJjZXB0aW9uYAoqICAgYGVudGVyX3NtbWAKKiAgIGBlbXVsYXRvcl9sZWF2ZV9zbW1gCiogICBgbmVzdGVkX3ZteF9lbnRlcl9ub25fcm9vdF9tb2RlYAoqICAgYF9fbmVzdGVkX3ZteF92bWV4aXRgCiogICBgdm14X3NldF9uZXN0ZWRfc3RhdGVgCiogICBga3ZtcHBjX2hhbmRsZV9wYWdlZmF1bHRgCgpBcmUgdGhlcmUgYW55IG90aGVyIGZ1bmN0aW9ucyB0aGF0IHdvdWxkIGJlIHVzZWZ1bD8gQWgsIGluIGBhcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wci5jYCwgSSBzZWUgdGhhdCBga3ZtcHBjX3BhdGNoX2RjYnpgIGlzIGNhbGxlZCBieSBga3ZtcHBjX2hhbmRsZV9wYWdlZmF1bHRgLiBJIGNoZWNrZWQgaWYgYGt2bXBwY19oYW5kbGVfcGFnZWZhdWx0YCBpcyBub24tc3RhdGljIGJ1dCBpdCYjMzk7cyBub3QuIEhvd2V2ZXIsIGl0JiMzOTtzIGNhbGxlZCBieSBga3ZtcHBjX2hhbmRsZV9leGl0X3ByYC4KClNvIG5vdyBteSBjb21wbGV0ZSBsaXN0IGlzOgoKKiAgIGBuZXN0ZWRfc3ZtX3ZtcnVuYAoqICAgYG5lc3RlZF9zdm1fdm1leGl0YAoqICAgYHZtbG9hZF9pbnRlcmNlcHRpb25gCiogICBgdm1zYXZlX2ludGVyY2VwdGlvbmAKKiAgIGBlbnRlcl9zbW1gCiogICBgZW11bGF0b3JfbGVhdmVfc21tYAoqICAgYG5lc3RlZF92bXhfZW50ZXJfbm9uX3Jvb3RfbW9kZWAKKiAgIGBfX25lc3RlZF92bXhfdm1leGl0YAoqICAgYHZteF9zZXRfbmVzdGVkX3N0YXRlYAoqICAgYGt2bXBwY19oYW5kbGVfZXhpdF9wcmAKCkkgaGF2ZSB0byBjb25zaWRlciBpZiBga3ZtcHBjX2hhbmRsZV9leGl0X3ByYCB3aWxsIGJlIHRvbyAmIzM0O2hvdCYjMzQ7IGJlY2F1c2UgaXQmIzM5O3MgdGhlIG1haW4gZXhpdCBoYW5kbGVyIGZvciBQUiBLVk0uCgpQZXJoYXBzIGBrdm1wcGNfaGFuZGxlX3BhZ2VmYXVsdGAgaXMgYmV0dGVyLCBldmVuIGlmIHN0YXRpYywgaXQmIzM5O3MgYSBsYXJnZSBmdW5jdGlvbiBhbmQgbWlnaHQgbm90IGJlIGlubGluZWQuIEl0JiMzOTtzIHRpbWUgdG8gY2hlY2sgdGhlIHNpemUgb2YgYGt2bXBwY19oYW5kbGVfcGFnZWZhdWx0YC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDU6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtcHBjX2hhbmRsZV9wYWdlZmF1bHQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmM9NjYyPXN0YXRpYyBib29sIGt2bXBwY192aXNpYmxlX2dwYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSlcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wci5jLTY3Ni1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmM6Njc3OnN0YXRpYyBpbnQga3ZtcHBjX2hhbmRsZV9wYWdlZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYy02NzgtXHRcdFx0ICAgIHVsb25nIGVhZGRyLCBpbnQgdmVjKVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmM9MTEzMj1pbnQga3ZtcHBjX2hhbmRsZV9leGl0X3ByKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgaW50IGV4aXRfbnIpXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYy0xMTc3LVx0XHRcdGludCBpZHggPSBzcmN1X3JlYWRfbG9jayhcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VzcmN1KTtcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmM6MTE3ODpcdFx0XHRyID0ga3ZtcHBjX2hhbmRsZV9wYWdlZmF1bHQodmNwdSwga3ZtcHBjX2dldF9wYyh2Y3B1KSwgZXhpdF9ucik7XG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wci5jLTExNzktXHRcdFx0c3JjdV9yZWFkX3VubG9jayhcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VzcmN1LCBpZHgpO1xuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmMtMTIyNy1cdFx0XHRpbnQgaWR4ID0gc3JjdV9yZWFkX2xvY2soXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlc3JjdSk7XG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wci5jOjEyMjg6XHRcdFx0ciA9IGt2bXBwY19oYW5kbGVfcGFnZWZhdWx0KHZjcHUsIGRhciwgZXhpdF9ucik7XG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wci5jLTEyMjktXHRcdFx0c3JjdV9yZWFkX3VubG9jayhcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VzcmN1LCBpZHgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwNTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTU2NwoJCQkJCQkJb3V0cHV0OiAzODAKCQkJCQkJCXRob3VnaHRzOiA2NjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgS1ZNIENvcmUgTG9naWMgZm9yIEZ1enppbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgZm9jdXMgbmVlZHMgdG8gYmUgb24gc3BlY2lmaWMgZnVuY3Rpb25zIHdpdGhpbiB0aGUgS1ZNIGNvcmUsIHNwZWNpZmljYWxseSBpbiByZWxhdGlvbiB0byB0aGUgeDg2IChTVk0gYW5kIFZNWCkgYW5kIFBvd2VyUEMgKEJvb2szUyBQUikgYXJjaGl0ZWN0dXJlcy4gSSYjMzk7dmUgcGlucG9pbnRlZCBhIHJhbmdlIG9mIGxpbmVzLCBzdGFydGluZyBmcm9tIGFyb3VuZCBsaW5lIDY3NyBhbmQgZXh0ZW5kaW5nIGF0IGxlYXN0IHRvIDc4MCwgaW5kaWNhdGluZyBhIHJlbGV2YW50IHNlY3Rpb24gb2YgY29kZS4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgKm5vdCogZGVhbGluZyB3aXRoIGFueSBpbmxpbmVkIGNvZGUgaGVyZS4KCkdvb2QgbmV3cywgYGt2bXBwY19oYW5kbGVfcGFnZWZhdWx0YCBpcyBhdmFpbGFibGUgZm9yIGRpcmVjdCB1c2UuIExpa2V3aXNlLCBgc3ZtX2VudGVyX3NtbWAgYW5kIGBzdm1fbGVhdmVfc21tYCBhcmUgYXNzaWduZWQgdG8gZnVuY3Rpb24gcG9pbnRlcnMsIHdoaWNoIGFsc28gbWVhbnMgdGhleSBhcmVuJiMzOTt0IGlubGluZWQgYW5kIGFyZSBhY2Nlc3NpYmxlIGRpcmVjdGx5LiBUaGlzIHNpbXBsaWZpZXMgdGhpbmdzLgoKVGhlcmVmb3JlLCB0aGUgbWFpbiBmdW5jdGlvbnMgSSBuZWVkIHRvIGZvY3VzIG9uIGZvciBmdXp6aW5nIGFyZToKCiogICBgbmVzdGVkX3N2bV92bXJ1bmAKKiAgIGBuZXN0ZWRfc3ZtX3ZtZXhpdGAKKiAgIGB2bWxvYWRfaW50ZXJjZXB0aW9uYAoqICAgYHZtc2F2ZV9pbnRlcmNlcHRpb25gCiogICBgc3ZtX2VudGVyX3NtbWAKKiAgIGBzdm1fbGVhdmVfc21tYAoqICAgYG5lc3RlZF92bXhfZW50ZXJfbm9uX3Jvb3RfbW9kZWAKKiAgIGBfX25lc3RlZF92bXhfdm1leGl0YAoqICAgYHZteF9zZXRfbmVzdGVkX3N0YXRlYAoqICAgYGt2bXBwY19oYW5kbGVfcGFnZWZhdWx0YAoKSSYjMzk7bSBhbHNvIGxvb2tpbmcgYXQgd2hpY2ggS1ZNIGNvbmZpZ3MgdGhlc2UgZnVuY3Rpb25zIGFwcGx5IHRvLgoKTm93LCBsZXQmIzM5O3MgY29uZmlybSB0aGUgcmVsZXZhbnQgY29uZmlncy4KCiogICBgS1ZNYCAtIENvbmZpcm1lZAoqICAgYEtWTV9BTURgIC0gQ29uZmlybWVkCiogICBgS1ZNX0lOVEVMYCAtIENvbmZpcm1lZAoqICAgYEtWTV9CT09LM1NfNjRfUFJgIC0gQ29uZmlybWVkCiogICBgS1ZNX1NNTWAgLSBDb25maXJtZWQKKiAgIGBLVk1fSFlQRVJWYCAtIENvbmZpcm1lZAoKTm8gb3RoZXIgY29uZmlncyBhcHBlYXIgdG8gYmUgcmVsZXZhbnQuCgpUaGUgY29yZSByZWFzb25pbmcgaGVyZSBpcyB0aGF0IHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBjbGVhbnVwIGNsYXNzLCBga3ZtX3ZjcHVfbWFwX2xvY2FsYCwgd2hpY2ggcmVwbGFjZXMgbWFudWFsIG1lbW9yeSBtYW5hZ2VtZW50IHdpdGggYGt2bV92Y3B1X21hcGAgYW5kIGBrdm1fdmNwdV91bm1hcGAgY2FsbHMuIFRoYXQmIzM5O3MgYSBzaWduaWZpY2FudCByZWZhY3RvciwgZXNwZWNpYWxseSBnaXZlbiBpdHMgc2NvcGUgYWNyb3NzIHg4NiBhbmQgUG93ZXJQQy4gV2UgbmVlZCB0byBmdXp6IHRoZXNlIGZ1bmN0aW9ucyByaWdvcm91c2x5IHRvIGVuc3VyZSB0aGUgbmV3IGNsYXNzIHdvcmtzIGFzIGludGVuZGVkLiBXZSBuZWVkIHRvIHZlcmlmeSB0aGF0IHdlJiMzOTtyZSBub3QgaW50cm9kdWNpbmcgYW55IG1lbW9yeSBsZWFrcyBvciB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLiBBZGRpdGlvbmFsbHksIHRoZSBwYXRjaCBpbmNsdWRlcyBhIGZpeCB0byBgX19uZXN0ZWRfdm14X3ZtZXhpdGAsIHdoaWNoIHdhcyBpbmNvcnJlY3RseSBnYXRlZCBvbiBgQ09ORklHX0tWTV9IWVBFUlZgLiBUaGUgcmVxdWVzdCB0byBnZXQgbmVzdGVkIHN0YXRlIHBhZ2VzIHdhcyBvbmx5IGNhbGxlZCB3aGVuIGh5cGVydiB3YXMgYWN0aXZlLCBidXQgc2luY2UgY2hlY2tpbmcgdGhlIHJlcXVlc3QgYWxzbyBjbGVhcnMgaXQsIHRoaXMgbmVlZGVkIHRvIGJlIGZpeGVkLiBUaGlzIGZpeCBhbHNvIG5lZWRzIHRvIGJlIHRlc3RlZCB0byBtYWtlIHN1cmUgaXQgZnVuY3Rpb25zIGFzIGludGVuZGVkLgoKSSYjMzk7bSBzYXRpc2ZpZWQgd2l0aCB0aGlzIGFuYWx5c2lzLiBJJiMzOTttIGdvaW5nIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDU6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnRoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlOiBLVk1fQk9PSzNTXzY0X1BSPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fQU1EJiMzNDssCiAgICAmIzM0O0tWTV9JTlRFTCYjMzQ7LAogICAgJiMzNDtLVk1fQk9PSzNTXzY0X1BSJiMzNDssCiAgICAmIzM0O0tWTV9TTU0mIzM0OywKICAgICYjMzQ7S1ZNX0hZUEVSViYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25lc3RlZF9zdm1fdm1ydW4mIzM0OywKICAgICYjMzQ7bmVzdGVkX3N2bV92bWV4aXQmIzM0OywKICAgICYjMzQ7dm1sb2FkX2ludGVyY2VwdGlvbiYjMzQ7LAogICAgJiMzNDt2bXNhdmVfaW50ZXJjZXB0aW9uJiMzNDssCiAgICAmIzM0O3N2bV9lbnRlcl9zbW0mIzM0OywKICAgICYjMzQ7c3ZtX2xlYXZlX3NtbSYjMzQ7LAogICAgJiMzNDtuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGUmIzM0OywKICAgICYjMzQ7X19uZXN0ZWRfdm14X3ZtZXhpdCYjMzQ7LAogICAgJiMzNDt2bXhfc2V0X25lc3RlZF9zdGF0ZSYjMzQ7LAogICAgJiMzNDtrdm1wcGNfaGFuZGxlX3BhZ2VmYXVsdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGNsZWFudXAgY2xhc3MgYGt2bV92Y3B1X21hcF9sb2NhbGAgYW5kIHVzZXMgaXQgdG8gcmVwbGFjZSBtYW51YWwgYGt2bV92Y3B1X21hcGAgYW5kIGBrdm1fdmNwdV91bm1hcGAgY2FsbHMgaW4gc2V2ZXJhbCBLVk0gZnVuY3Rpb25zIGFjcm9zcyB4ODYgKFNWTSBhbmQgVk1YKSBhbmQgUG93ZXJQQyAoQm9vazNTIFBSKS4gSXQgYWxzbyBmaXhlcyBhIGJ1ZyBpbiBgX19uZXN0ZWRfdm14X3ZtZXhpdGAgd2hlcmUgYGt2bV9jaGVja19yZXF1ZXN0KEtWTV9SRVFfR0VUX05FU1RFRF9TVEFURV9QQUdFUywgdmNwdSlgIHdhcyBvbmx5IGNhbGxlZCB3aGVuIGBDT05GSUdfS1ZNX0hZUEVSVmAgd2FzIGVuYWJsZWQsIGJ1dCBjaGVja2luZyB0aGUgcmVxdWVzdCBhbHNvIGNsZWFycyBpdCwgc28gaXQgc2hvdWxkIGJlIGNhbGxlZCB1bmNvbmRpdGlvbmFsbHkuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gY29yZSBLVk0gbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgY2xlYW51cCBjbGFzcyB3b3JrcyBjb3JyZWN0bHkgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSBtZW1vcnkgbGVha3Mgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzLCBhbmQgdG8gdmVyaWZ5IHRoZSBmaXggaW4gYF9fbmVzdGVkX3ZteF92bWV4aXRgLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7dGhlIGZvbGxvd2luZyBjb25maWdzIGRvIG5vdCBleGlzdCBpbiB0aGUga2VybmVsIHRyZWU6IEtWTV9CT09LM1NfNjRfUFImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA1OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzMjg5CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGVidWdnaW5nIGEgTWlzc2luZyBLVk0gRGVmaW5pdGlvbioqCgpIbW0sIGhvbGQgb24gYSBzZWNvbmQuLi4gYEtWTV9CT09LM1NfNjRfUFJgIGlzbiYjMzk7dCBzaG93aW5nIHVwIGFzIGRlZmluZWQ/IFRoYXQmIzM5O3MgdW5leHBlY3RlZC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZyBmaWxlIHdpdGhpbiB0aGUgUG93ZXJQQyBLVk0gYXJjaGl0ZWN0dXJlIGRpcmVjdG9yeS4gTGV0JiMzOTtzIGdldCBiYWNrIHRvIGBhcmNoL3Bvd2VycGMva3ZtL0tjb25maWdgIGFuZCB2ZXJpZnkgdGhhdCB0aGUgbWFjcm8gSSYjMzk7bSBsb29raW5nIGZvciBpcyBhY3R1YWxseSB0aGVyZSwgY29ycmVjdGx5IGRlZmluZWQsIGFuZCBjb25kaXRpb25hbGx5IGVuYWJsZWQuIEl0JiMzOTtzIHBvc3NpYmxlIHRoZXJlJiMzOTtzIGEgY29uZmlndXJhdGlvbiBkZXBlbmRlbmN5IEkmIzM5O20gbWlzc2luZywgYSB0eXBvLCBvciBwZXJoYXBzIGEgbW9yZSBzdWJ0bGUgaXNzdWUgd2l0aCB0aGUgS2NvbmZpZyBsb2dpYyB0aGF0JiMzOTtzIGNhdXNpbmcgaXQgbm90IHRvIGJlIGluY2x1ZGVkIGluIHRoZSBidWlsZC4gSSYjMzk7bGwgbmVlZCB0byBtZXRpY3Vsb3VzbHkgZXhhbWluZSB0aGUgY29udGV4dCBvZiB0aGF0IGRlZmluaXRpb24uIEEgcXVpY2sgdmlzdWFsIHNjYW4gbWF5IGJlIGFsbCBJIG5lZWQsIGJ1dCBJJiMzOTtsbCBiZSBzdXJlIHRvIGNhcmVmdWxseSB0cmFjZSBhbnkgZGVwZW5kZW5jaWVzIG9yIGNvbmRpdGlvbmFscyB0byBpZGVudGlmeSB0aGUgcHJvYmxlbS4gVGhlIGdvYWwgaXMgdG8gZWl0aGVyIGNvbmZpcm0gaXRzIGV4aXN0ZW5jZSBhbmQgc3BvdCBhbnkgb2J2aW91cyBlcnJvciwgb3IgZmluZCBvdXQgaXQgaXMgbm90IHRoZXJlIGFuZCBtb3ZlIG9uIHRvIHNvbHZpbmcgdGhlIHByb2JsZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA1OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk1fQk9PSzNTXzY0X1BSJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZz03OT1jb25maWcgS1ZNX0JPT0szU182NF9IVlxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy05OS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxMDA6Y29uZmlnIEtWTV9CT09LM1NfNjRfUFJcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xMDEtXHR0cmlzdGF0ZSBcJiMzNDtLVk0gc3VwcG9ydCB3aXRob3V0IHVzaW5nIGh5cGVydmlzb3IgbW9kZSBpbiBob3N0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA1OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzNzE4CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRlYnVnZ2luZyBhIEtjb25maWcgRGlzY3JlcGFuY3kqKgoKT2theSwgc28gSSYjMzk7bSBzZWVpbmcgYSBkaXNjcmVwYW5jeSBoZXJlLiBUaGlzIHRvb2wgSSYjMzk7bSB1c2luZyBpcyBjbGFpbWluZyB0aGF0IGBLVk1fQk9PSzNTXzY0X1BSYCBkb2VzbiYjMzk7dCBleGlzdCBpbiB0aGUga2VybmVsIHRyZWUuIFRoYXQgc2VlbXMgb2RkIGJlY2F1c2UgSSYjMzk7bSBhbG1vc3QgY2VydGFpbiBJIHNhdyBpdCBzb21ld2hlcmUuLi4gaGFuZyBvbiwgeWVhaCwgaXQmIzM5O3MgcmlnaHQgdGhlcmUgaW4gYGFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZ2AuCgpOb3csIHdoeSB3b3VsZCB0aGUgdG9vbCBnaXZlIG1lIGEgZmFsc2UgbmVnYXRpdmU/IE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0IG1pZ2h0IGJlIGRlZmF1bHRpbmcgdG8gY2hlY2tpbmcgdGhlIHg4NiBLY29uZmlnIGJ5IGRlZmF1bHQuIFRoYXQmIzM5O3MgYSBjb21tb24gb3ZlcnNpZ2h0IHdpdGggdGhlc2Uga2luZHMgb2YgdG9vbHMsIHNpbmNlIHg4NiBpcyBvZnRlbiB0aGUgcHJpbWFyeSBmb2N1cy4gT3IsIGl0IGNvdWxkIGJlIHRoYXQgdGhlIHRvb2wmIzM5O3MgY2hlY2tpbmcgdGhlIGdsb2JhbCBLY29uZmlnLCBidXQgaXQmIzM5O3Mgbm90IGFjY291bnRpbmcgZm9yIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb25maWd1cmF0aW9ucy4KCkxldCYjMzk7cyB0ZXN0IHRoaXMuIFRoZSB0b29sIGlzIHJlcG9ydGluZyB0aGF0IGBLVk1fQk9PSzNTXzY0X1BSYCBpcyBub24tZXhpc3RlbnQuIE15IG5leHQgc3RlcCB3aWxsIGJlIHRvIGNvbmZpcm0gd2hldGhlciBgS1ZNX0JPT0szU19QUmAgZXhpc3RzLiBJZiB0aGF0JiMzOTtzIHRoZSBjYXNlLCBpdCBjb3VsZCBtZWFuIHRoZXJlJiMzOTtzIGEgdHlwbyB3aXRoaW4gdGhlIHRvb2wgb3IsIHRoZSBjb25maWcgaXMgbmFtZWQgc2xpZ2h0bHkgZGlmZmVyZW50bHksIHN1Y2ggYXMgdGhlIGBfNjRgIGlzbiYjMzk7dCByZXF1aXJlZC4gTGV0JiMzOTtzIHNlZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDU6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTV9CT09LM1NfUFImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Bvd2VycGMva3ZtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnPTM0PWNvbmZpZyBLVk1fQk9PSzNTXzY0X0hBTkRMRVJcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMzctXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6Mzg6Y29uZmlnIEtWTV9CT09LM1NfUFJfUE9TU0lCTEVcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0zOS1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDU6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQyMzAKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLVk0gQ29uZmlndXJhdGlvbiBWZXJpZmljYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIGFib3V0IHRoaXMgS1ZNIHNldHRpbmcuIEl0JiMzOTtzIGRlZmluaXRlbHkgbm90IHdoYXQgSSBpbml0aWFsbHkgdGhvdWdodC4gTXkgbm90ZXMgYXJlIHBvaW50aW5nIHRvd2FyZHMgYEtWTV9CT09LM1NfNjRfUFJgIGFuZCBJIG5lZWQgdG8gc29saWRpZnkgdGhhdCBpbiBteSBtaW5kLiBSaWdodCwgbGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aGUgY29uZmlndXJhdGlvbiBmaWxlLCBzcGVjaWZpY2FsbHkgYGFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgaXQmIzM5O2xsIGJlIGRlZmluZWQuIEkgaGF2ZSB0byB2ZXJpZnkgdGhhdCYjMzk7cyB0aGUgY29ycmVjdCBvcHRpb24uIE5vIHJvb20gZm9yIGVycm9yIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA1OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0tWTV9CT09LM1NfNjRfUFImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Bvd2VycGMva3ZtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnPTc5PWNvbmZpZyBLVk1fQk9PSzNTXzY0X0hWXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTk5LVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjEwMDpjb25maWcgS1ZNX0JPT0szU182NF9QUlxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTEwMS1cdHRyaXN0YXRlIFwmIzM0O0tWTSBzdXBwb3J0IHdpdGhvdXQgdXNpbmcgaHlwZXJ2aXNvciBtb2RlIGluIGhvc3RcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDU6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ1MzcKCQkJCQkJCW91dHB1dDogMzU0CgkJCQkJCQl0aG91Z2h0czogMTAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFkZHJlc3NpbmcgdGhlIFRvb2wmIzM5O3MgTGltaXRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHNlZWluZyB0aGlzIGJlaGF2aW9yLCBhbmQgaXQmIzM5O3MgcHJldHR5IGNsZWFyOiB0aGUgdG9vbCBpcyBvcGVyYXRpbmcsIGJ1dCBtYXliZSBpdCYjMzk7cyAqb25seSogY2hlY2tpbmcgdGhlIHg4NiBjb25maWd1cmF0aW9ucy4gSSBzdXNwZWN0IHRoaXMgaXMgYmVjYXVzZSB0aGUgd29ya3NwYWNlIGl0c2VsZiBpcyBzZXQgdXAgZm9yIHg4Ni4gTWFrZXMgc2Vuc2UsIGdpdmVuIHRoZSBsaW1pdGF0aW9ucyBvZiBmdXp6aW5nIFBvd2VyUEMgaW4gdGhpcyBlbnZpcm9ubWVudC4gVGhlcmVmb3JlLCB0aGUgbG9naWNhbCBzdGVwIGlzIHRvIHNpbXBsaWZ5IHRoaW5ncyBhbmQgYWNrbm93bGVkZ2UgdGhlIGN1cnJlbnQgcmVhbGl0eS4gSSYjMzk7bSBnb2luZyB0byByZW1vdmUgYEtWTV9CT09LM1NfNjRfUFJgIGZyb20gdGhlIGNvbmZpZ3VyYXRpb24gZW50aXJlbHkgYW5kIGp1c3QgZm9jdXMgb24geDg2LCBiZWNhdXNlIGVmZmVjdGl2ZWx5IGl0IGNhbiYjMzk7dCBiZSByZWxpYWJseSBmdXp6ZWQgaW4gdGhlIGN1cnJlbnQgc2V0dXAgYW5kIHRoZSB0b29sIGRvZXNuJiMzOTt0IGhhbmRsZSBpdC4gSSYjMzk7bGwgYWxzbyByZW1vdmUgYGt2bXBwY19oYW5kbGVfcGFnZWZhdWx0YCBmcm9tIHRoZSBsaXN0LCBhcyBpdCYjMzk7cyBub3QgcmVsZXZhbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA1OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OywKICAgICYjMzQ7S1ZNX1NNTSYjMzQ7LAogICAgJiMzNDtLVk1fSFlQRVJWJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmVzdGVkX3N2bV92bXJ1biYjMzQ7LAogICAgJiMzNDtuZXN0ZWRfc3ZtX3ZtZXhpdCYjMzQ7LAogICAgJiMzNDt2bWxvYWRfaW50ZXJjZXB0aW9uJiMzNDssCiAgICAmIzM0O3Ztc2F2ZV9pbnRlcmNlcHRpb24mIzM0OywKICAgICYjMzQ7c3ZtX2VudGVyX3NtbSYjMzQ7LAogICAgJiMzNDtzdm1fbGVhdmVfc21tJiMzNDssCiAgICAmIzM0O25lc3RlZF92bXhfZW50ZXJfbm9uX3Jvb3RfbW9kZSYjMzQ7LAogICAgJiMzNDtfX25lc3RlZF92bXhfdm1leGl0JiMzNDssCiAgICAmIzM0O3ZteF9zZXRfbmVzdGVkX3N0YXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgY2xlYW51cCBjbGFzcyBga3ZtX3ZjcHVfbWFwX2xvY2FsYCBhbmQgdXNlcyBpdCB0byByZXBsYWNlIG1hbnVhbCBga3ZtX3ZjcHVfbWFwYCBhbmQgYGt2bV92Y3B1X3VubWFwYCBjYWxscyBpbiBzZXZlcmFsIEtWTSBmdW5jdGlvbnMgYWNyb3NzIHg4NiAoU1ZNIGFuZCBWTVgpIGFuZCBQb3dlclBDIChCb29rM1MgUFIpLiBJdCBhbHNvIGZpeGVzIGEgYnVnIGluIGBfX25lc3RlZF92bXhfdm1leGl0YCB3aGVyZSBga3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9HRVRfTkVTVEVEX1NUQVRFX1BBR0VTLCB2Y3B1KWAgd2FzIG9ubHkgY2FsbGVkIHdoZW4gYENPTkZJR19LVk1fSFlQRVJWYCB3YXMgZW5hYmxlZCwgYnV0IGNoZWNraW5nIHRoZSByZXF1ZXN0IGFsc28gY2xlYXJzIGl0LCBzbyBpdCBzaG91bGQgYmUgY2FsbGVkIHVuY29uZGl0aW9uYWxseS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBjb3JlIEtWTSBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyBjbGVhbnVwIGNsYXNzIHdvcmtzIGNvcnJlY3RseSBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIG1lbW9yeSBsZWFrcyBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMsIGFuZCB0byB2ZXJpZnkgdGhlIGZpeCBpbiBgX19uZXN0ZWRfdm14X3ZtZXhpdGAuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fQU1EJiMzNDssCiAgICAmIzM0O0tWTV9JTlRFTCYjMzQ7LAogICAgJiMzNDtLVk1fU01NJiMzNDssCiAgICAmIzM0O0tWTV9IWVBFUlYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZXN0ZWRfc3ZtX3ZtcnVuJiMzNDssCiAgICAmIzM0O25lc3RlZF9zdm1fdm1leGl0JiMzNDssCiAgICAmIzM0O3ZtbG9hZF9pbnRlcmNlcHRpb24mIzM0OywKICAgICYjMzQ7dm1zYXZlX2ludGVyY2VwdGlvbiYjMzQ7LAogICAgJiMzNDtzdm1fZW50ZXJfc21tJiMzNDssCiAgICAmIzM0O3N2bV9sZWF2ZV9zbW0mIzM0OywKICAgICYjMzQ7bmVzdGVkX3ZteF9lbnRlcl9ub25fcm9vdF9tb2RlJiMzNDssCiAgICAmIzM0O19fbmVzdGVkX3ZteF92bWV4aXQmIzM0OywKICAgICYjMzQ7dm14X3NldF9uZXN0ZWRfc3RhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBjbGVhbnVwIGNsYXNzIGBrdm1fdmNwdV9tYXBfbG9jYWxgIGFuZCB1c2VzIGl0IHRvIHJlcGxhY2UgbWFudWFsIGBrdm1fdmNwdV9tYXBgIGFuZCBga3ZtX3ZjcHVfdW5tYXBgIGNhbGxzIGluIHNldmVyYWwgS1ZNIGZ1bmN0aW9ucyBhY3Jvc3MgeDg2IChTVk0gYW5kIFZNWCkgYW5kIFBvd2VyUEMgKEJvb2szUyBQUikuIEl0IGFsc28gZml4ZXMgYSBidWcgaW4gYF9fbmVzdGVkX3ZteF92bWV4aXRgIHdoZXJlIGBrdm1fY2hlY2tfcmVxdWVzdChLVk1fUkVRX0dFVF9ORVNURURfU1RBVEVfUEFHRVMsIHZjcHUpYCB3YXMgb25seSBjYWxsZWQgd2hlbiBgQ09ORklHX0tWTV9IWVBFUlZgIHdhcyBlbmFibGVkLCBidXQgY2hlY2tpbmcgdGhlIHJlcXVlc3QgYWxzbyBjbGVhcnMgaXQsIHNvIGl0IHNob3VsZCBiZSBjYWxsZWQgdW5jb25kaXRpb25hbGx5LiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIGNvcmUgS1ZNIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IGNsZWFudXAgY2xhc3Mgd29ya3MgY29ycmVjdGx5IGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgbWVtb3J5IGxlYWtzIG9yIHVzZS1hZnRlci1mcmVlIGlzc3VlcywgYW5kIHRvIHZlcmlmeSB0aGUgZml4IGluIGBfX25lc3RlZF92bXhfdm1leGl0YC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDA1OjU3OjI4Ljg1NTI3MjM3OVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDcxMTQ2OTg2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9BTURcIixcbiAgICBcIktWTV9JTlRFTFwiLFxuICAgIFwiS1ZNX1NNTVwiLFxuICAgIFwiS1ZNX0hZUEVSVlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5lc3RlZF9zdm1fdm1ydW5cIixcbiAgICBcIm5lc3RlZF9zdm1fdm1leGl0XCIsXG4gICAgXCJ2bWxvYWRfaW50ZXJjZXB0aW9uXCIsXG4gICAgXCJ2bXNhdmVfaW50ZXJjZXB0aW9uXCIsXG4gICAgXCJzdm1fZW50ZXJfc21tXCIsXG4gICAgXCJzdm1fbGVhdmVfc21tXCIsXG4gICAgXCJuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGVcIixcbiAgICBcIl9fbmVzdGVkX3ZteF92bWV4aXRcIixcbiAgICBcInZteF9zZXRfbmVzdGVkX3N0YXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBjbGVhbnVwIGNsYXNzIGBrdm1fdmNwdV9tYXBfbG9jYWxgIGFuZCB1c2VzIGl0IHRvIHJlcGxhY2UgbWFudWFsIGBrdm1fdmNwdV9tYXBgIGFuZCBga3ZtX3ZjcHVfdW5tYXBgIGNhbGxzIGluIHNldmVyYWwgS1ZNIGZ1bmN0aW9ucyBhY3Jvc3MgeDg2IChTVk0gYW5kIFZNWCkgYW5kIFBvd2VyUEMgKEJvb2szUyBQUikuIEl0IGFsc28gZml4ZXMgYSBidWcgaW4gYF9fbmVzdGVkX3ZteF92bWV4aXRgIHdoZXJlIGBrdm1fY2hlY2tfcmVxdWVzdChLVk1fUkVRX0dFVF9ORVNURURfU1RBVEVfUEFHRVMsIHZjcHUpYCB3YXMgb25seSBjYWxsZWQgd2hlbiBgQ09ORklHX0tWTV9IWVBFUlZgIHdhcyBlbmFibGVkLCBidXQgY2hlY2tpbmcgdGhlIHJlcXVlc3QgYWxzbyBjbGVhcnMgaXQsIHNvIGl0IHNob3VsZCBiZSBjYWxsZWQgdW5jb25kaXRpb25hbGx5LiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIGNvcmUgS1ZNIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IGNsZWFudXAgY2xhc3Mgd29ya3MgY29ycmVjdGx5IGFuZCBkb2Vzbid0IGludHJvZHVjZSBtZW1vcnkgbGVha3Mgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzLCBhbmQgdG8gdmVyaWZ5IHRoZSBmaXggaW4gYF9fbmVzdGVkX3ZteF92bWV4aXRgLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwNTo1NzoyOC44NTUyNzg3MjlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MDU1NzQyNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBiODgwNDg1YzFlMzE0OWM0N2M3NWFkYjFmZWJhYzUwMDljNTg2MzgzXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgSnVsIDI1IDA1OjU3OjI2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmMgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wci5jXFxuaW5kZXggMmJhMmRkMjZhN2VhZDguLmRhN2EwMzhlMjcwMGQyIDEwMDY0NFxcbi0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmNcXG4rKysgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wci5jXFxuQEAgLTYzOSwyNyArNjM5LDI0IEBAIHN0YXRpYyB2b2lkIGt2bXBwY19zZXRfcHZyX3ByKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIHB2cilcXG4gICovXFxuIHN0YXRpYyB2b2lkIGt2bXBwY19wYXRjaF9kY2J6KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bXBwY19wdGUgKnB0ZSlcXG4ge1xcbi1cXHRzdHJ1Y3Qga3ZtX2hvc3RfbWFwIG1hcDtcXG4gXFx0dTY0IGhwYWdlX29mZnNldDtcXG4gXFx0dTMyICpwYWdlO1xcbiBcXHRpbnQgaSwgcjtcXG4gXFxuLVxcdHIgPSBrdm1fdmNwdV9tYXAodmNwdSwgcHRlLVxcdTAwM2VyYWRkciBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZULCBcXHUwMDI2bWFwKTtcXG4tXFx0aWYgKHIpXFxuK1xcdENMQVNTKGt2bV92Y3B1X21hcF9sb2NhbCwgbSkodmNwdSwgcHRlLVxcdTAwM2VyYWRkciBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUKTtcXG4rXFx0aWYgKG0ucmV0KVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRocGFnZV9vZmZzZXQgPSBwdGUtXFx1MDAzZXJhZGRyIFxcdTAwMjYgflBBR0VfTUFTSztcXG4gXFx0aHBhZ2Vfb2Zmc2V0IFxcdTAwMjY9IH4weEZGRlVMTDtcXG4gXFx0aHBhZ2Vfb2Zmc2V0IC89IDQ7XFxuIFxcbi1cXHRwYWdlID0gbWFwLmh2YTtcXG4rXFx0cGFnZSA9IG0ubWFwLmh2YTtcXG4gXFxuIFxcdC8qIHBhdGNoIGRjYnogaW50byByZXNlcnZlZCBpbnN0cnVjdGlvbiwgc28gd2UgdHJhcCAqL1xcbiBcXHRmb3IgKGk9aHBhZ2Vfb2Zmc2V0OyBpIFxcdTAwM2MgaHBhZ2Vfb2Zmc2V0ICsgKEhXX1BBR0VfU0laRSAvIDQpOyBpKyspXFxuIFxcdFxcdGlmICgoYmUzMl90b19jcHUocGFnZVtpXSkgXFx1MDAyNiAweGZmMDAwN2ZmKSA9PSBJTlNfRENCWilcXG4gXFx0XFx0XFx0cGFnZVtpXSBcXHUwMDI2PSBjcHVfdG9fYmUzMigweGZmZmZmZmY3KTtcXG4tXFxuLVxcdGt2bV92Y3B1X3VubWFwKHZjcHUsIFxcdTAwMjZtYXApO1xcbiB9XFxuIFxcbiBzdGF0aWMgYm9vbCBrdm1wcGNfdmlzaWJsZV9ncGEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEpXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jXFxuaW5kZXggNWUzZTI4MGNkNDgzZTMuLjczZjM3YjA1MGQwYTBiIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jXFxuQEAgLTEwODYsMTQgKzEwODYsMTQgQEAgaW50IGVudGVyX3N2bV9ndWVzdF9tb2RlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHZtY2IxMl9ncGEsIGJvb2wgZnJvbV92bXJ1bilcXG4gc3RhdGljIGludCBuZXN0ZWRfc3ZtX2NvcHlfdm1jYjEyX3RvX2NhY2hlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHZtY2IxMl9ncGEpXFxuIHtcXG4gXFx0c3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7XFxuLVxcdHN0cnVjdCBrdm1faG9zdF9tYXAgbWFwO1xcbiBcXHRzdHJ1Y3Qgdm1jYiAqdm1jYjEyO1xcbiBcXHRpbnQgciA9IDA7XFxuIFxcbi1cXHRpZiAoa3ZtX3ZjcHVfbWFwKHZjcHUsIGdwYV90b19nZm4odm1jYjEyX2dwYSksIFxcdTAwMjZtYXApKVxcbitcXHRDTEFTUyhrdm1fdmNwdV9tYXBfbG9jYWwsIG0pKHZjcHUsIGdwYV90b19nZm4odm1jYjEyX2dwYSkpO1xcbitcXHRpZiAobS5yZXQpXFxuIFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbiBcXG4tXFx0dm1jYjEyID0gbWFwLmh2YTtcXG4rXFx0dm1jYjEyID0gbS5tYXAuaHZhO1xcbiBcXHRuZXN0ZWRfY29weV92bWNiX2NvbnRyb2xfdG9fY2FjaGUoc3ZtLCBcXHUwMDI2dm1jYjEyLVxcdTAwM2Vjb250cm9sKTtcXG4gXFx0bmVzdGVkX2NvcHlfdm1jYl9zYXZlX3RvX2NhY2hlKHN2bSwgXFx1MDAyNnZtY2IxMi1cXHUwMDNlc2F2ZSk7XFxuIFxcbkBAIC0xMTA3LDcgKzExMDcsNiBAQCBzdGF0aWMgaW50IG5lc3RlZF9zdm1fY29weV92bWNiMTJfdG9fY2FjaGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdm1jYjEyX2dwYVxcbiBcXHRcXHRyID0gLUVJTlZBTDtcXG4gXFx0fVxcbiBcXG4tXFx0a3ZtX3ZjcHVfdW5tYXAodmNwdSwgXFx1MDAyNm1hcCk7XFxuIFxcdHJldHVybiByO1xcbiB9XFxuIFxcbkBAIC0xMjUxLDE1ICsxMjUwLDEzIEBAIHN0YXRpYyBpbnQgbmVzdGVkX3N2bV92bWV4aXRfdXBkYXRlX3ZtY2IxMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4gXFx0c3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7XFxuIFxcdHN0cnVjdCB2bWNiICp2bWNiMDIgPSBzdm0tXFx1MDAzZW5lc3RlZC52bWNiMDIucHRyO1xcbi1cXHRzdHJ1Y3Qga3ZtX2hvc3RfbWFwIG1hcDtcXG4gXFx0c3RydWN0IHZtY2IgKnZtY2IxMjtcXG4tXFx0aW50IHJjO1xcbiBcXG4tXFx0cmMgPSBrdm1fdmNwdV9tYXAodmNwdSwgZ3BhX3RvX2dmbihzdm0tXFx1MDAzZW5lc3RlZC52bWNiMTJfZ3BhKSwgXFx1MDAyNm1hcCk7XFxuLVxcdGlmIChyYylcXG4tXFx0XFx0cmV0dXJuIHJjO1xcbitcXHRDTEFTUyhrdm1fdmNwdV9tYXBfbG9jYWwsIG0pKHZjcHUsIGdwYV90b19nZm4oc3ZtLVxcdTAwM2VuZXN0ZWQudm1jYjEyX2dwYSkpO1xcbitcXHRpZiAobS5yZXQpXFxuK1xcdFxcdHJldHVybiBtLnJldDtcXG4gXFxuLVxcdHZtY2IxMiA9IG1hcC5odmE7XFxuK1xcdHZtY2IxMiA9IG0ubWFwLmh2YTtcXG4gXFxuIFxcdHZtY2IxMi1cXHUwMDNlc2F2ZS5lcyAgICAgPSB2bWNiMDItXFx1MDAzZXNhdmUuZXM7XFxuIFxcdHZtY2IxMi1cXHUwMDNlc2F2ZS5jcyAgICAgPSB2bWNiMDItXFx1MDAzZXNhdmUuY3M7XFxuQEAgLTEzMTQsNyArMTMxMSw2IEBAIHN0YXRpYyBpbnQgbmVzdGVkX3N2bV92bWV4aXRfdXBkYXRlX3ZtY2IxMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdFxcdFxcdFxcdCAgICAgICB2bWNiMTItXFx1MDAzZWNvbnRyb2wuZXhpdF9pbnRfaW5mb19lcnIsXFxuIFxcdFxcdFxcdFxcdCAgICAgICBLVk1fSVNBX1NWTSk7XFxuIFxcbi1cXHRrdm1fdmNwdV91bm1hcCh2Y3B1LCBcXHUwMDI2bWFwKTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXFxuaW5kZXggOTEyODZkNDZkMTNhZGIuLjdhNDE3ZTcxN2ZkOTFlIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXFxuQEAgLTIyMTYsNyArMjIxNiw2IEBAIHN0YXRpYyBpbnQgdm1sb2FkX3Ztc2F2ZV9pbnRlcmNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIHZtbG9hZClcXG4gXFx0dTY0IHZtY2IxMl9ncGEgPSBrdm1fcmF4X3JlYWQodmNwdSk7XFxuIFxcdHN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpO1xcbiBcXHRzdHJ1Y3Qgdm1jYiAqdm1jYjEyO1xcbi1cXHRzdHJ1Y3Qga3ZtX2hvc3RfbWFwIG1hcDtcXG4gXFx0aW50IHJldDtcXG4gXFxuIFxcdGlmIChuZXN0ZWRfc3ZtX2NoZWNrX3Blcm1pc3Npb25zKHZjcHUpKVxcbkBAIC0yMjI3LDEwICsyMjI2LDExIEBAIHN0YXRpYyBpbnQgdm1sb2FkX3Ztc2F2ZV9pbnRlcmNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIHZtbG9hZClcXG4gXFx0XFx0cmV0dXJuIDE7XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChrdm1fdmNwdV9tYXAodmNwdSwgZ3BhX3RvX2dmbih2bWNiMTJfZ3BhKSwgXFx1MDAyNm1hcCkpXFxuK1xcdENMQVNTKGt2bV92Y3B1X21hcF9sb2NhbCwgbSkodmNwdSwgZ3BhX3RvX2dmbih2bWNiMTJfZ3BhKSk7XFxuK1xcdGlmIChtLnJldClcXG4gXFx0XFx0cmV0dXJuIGt2bV9oYW5kbGVfbWVtb3J5X2ZhaWx1cmUodmNwdSwgWDg2RU1VTF9JT19ORUVERUQsIE5VTEwpO1xcbiBcXG4tXFx0dm1jYjEyID0gbWFwLmh2YTtcXG4rXFx0dm1jYjEyID0gbS5tYXAuaHZhO1xcbiBcXG4gXFx0cmV0ID0ga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7XFxuIFxcbkBAIC0yMjQzLDggKzIyNDMsNiBAQCBzdGF0aWMgaW50IHZtbG9hZF92bXNhdmVfaW50ZXJjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCB2bWxvYWQpXFxuIFxcdFxcdHN2bV9jb3B5X3ZtbG9hZHNhdmVfc3RhdGUodm1jYjEyLCBzdm0tXFx1MDAzZXZtY2IwMS5wdHIpO1xcbiBcXHR9XFxuIFxcbi1cXHRrdm1fdmNwdV91bm1hcCh2Y3B1LCBcXHUwMDI2bWFwKTtcXG4tXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuQEAgLTQ5ODksNyArNDk4Nyw2IEBAIHN0YXRpYyBpbnQgc3ZtX3NtaV9hbGxvd2VkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBmb3JfaW5qZWN0aW9uKVxcbiBzdGF0aWMgaW50IHN2bV9lbnRlcl9zbW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bmlvbiBrdm1fc21yYW0gKnNtcmFtKVxcbiB7XFxuIFxcdHN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpO1xcbi1cXHRzdHJ1Y3Qga3ZtX2hvc3RfbWFwIG1hcF9zYXZlO1xcbiBcXG4gXFx0aWYgKCFpc19ndWVzdF9tb2RlKHZjcHUpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG5AQCAtNTAyMywyNCArNTAyMCwyMCBAQCBzdGF0aWMgaW50IHN2bV9lbnRlcl9zbW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bmlvbiBrdm1fc21yYW0gKnNtcmFtKVxcbiBcXHQgKiB0aGF0LCBzZWUgc3ZtX3ByZXBhcmVfc3dpdGNoX3RvX2d1ZXN0KCkpIHdoaWNoIG11c3QgYmVcXG4gXFx0ICogcHJlc2VydmVkLlxcbiBcXHQgKi9cXG4tXFx0aWYgKGt2bV92Y3B1X21hcCh2Y3B1LCBncGFfdG9fZ2ZuKHN2bS1cXHUwMDNlbmVzdGVkLmhzYXZlX21zciksIFxcdTAwMjZtYXBfc2F2ZSkpXFxuK1xcdENMQVNTKGt2bV92Y3B1X21hcF9sb2NhbCwgbV9zYXZlKSh2Y3B1LCBncGFfdG9fZ2ZuKHN2bS1cXHUwMDNlbmVzdGVkLmhzYXZlX21zcikpO1xcbitcXHRpZiAobV9zYXZlLnJldClcXG4gXFx0XFx0cmV0dXJuIDE7XFxuIFxcbiBcXHRCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IHZtY2IsIHNhdmUpICE9IDB4NDAwKTtcXG4gXFxuLVxcdHN2bV9jb3B5X3ZtcnVuX3N0YXRlKG1hcF9zYXZlLmh2YSArIDB4NDAwLFxcbi1cXHRcXHRcXHQgICAgIFxcdTAwMjZzdm0tXFx1MDAzZXZtY2IwMS5wdHItXFx1MDAzZXNhdmUpO1xcbi1cXG4tXFx0a3ZtX3ZjcHVfdW5tYXAodmNwdSwgXFx1MDAyNm1hcF9zYXZlKTtcXG4rXFx0c3ZtX2NvcHlfdm1ydW5fc3RhdGUobV9zYXZlLm1hcC5odmEgKyAweDQwMCwgXFx1MDAyNnN2bS1cXHUwMDNldm1jYjAxLnB0ci1cXHUwMDNlc2F2ZSk7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IHN2bV9sZWF2ZV9zbW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBjb25zdCB1bmlvbiBrdm1fc21yYW0gKnNtcmFtKVxcbiB7XFxuIFxcdHN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpO1xcbi1cXHRzdHJ1Y3Qga3ZtX2hvc3RfbWFwIG1hcCwgbWFwX3NhdmU7XFxuIFxcdHN0cnVjdCB2bWNiICp2bWNiMTI7XFxuLVxcdGludCByZXQ7XFxuIFxcbiBcXHRjb25zdCBzdHJ1Y3Qga3ZtX3NtcmFtX3N0YXRlXzY0ICpzbXJhbTY0ID0gXFx1MDAyNnNtcmFtLVxcdTAwM2VzbXJhbTY0O1xcbiBcXG5AQCAtNTA1NywyMiArNTA1MCwyMyBAQCBzdGF0aWMgaW50IHN2bV9sZWF2ZV9zbW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBjb25zdCB1bmlvbiBrdm1fc21yYW0gKnNtcmFtKVxcbiBcXHRpZiAoIShzbXJhbTY0LVxcdTAwM2VlZmVyIFxcdTAwMjYgRUZFUl9TVk1FKSlcXG4gXFx0XFx0cmV0dXJuIDE7XFxuIFxcbi1cXHRpZiAoa3ZtX3ZjcHVfbWFwKHZjcHUsIGdwYV90b19nZm4oc21yYW02NC1cXHUwMDNlc3ZtX2d1ZXN0X3ZtY2JfZ3BhKSwgXFx1MDAyNm1hcCkpXFxuK1xcdENMQVNTKGt2bV92Y3B1X21hcF9sb2NhbCwgbSkodmNwdSwgZ3BhX3RvX2dmbihzbXJhbTY0LVxcdTAwM2Vzdm1fZ3Vlc3Rfdm1jYl9ncGEpKTtcXG4rXFx0aWYgKG0ucmV0KVxcbiBcXHRcXHRyZXR1cm4gMTtcXG4gXFxuLVxcdHJldCA9IDE7XFxuLVxcdGlmIChrdm1fdmNwdV9tYXAodmNwdSwgZ3BhX3RvX2dmbihzdm0tXFx1MDAzZW5lc3RlZC5oc2F2ZV9tc3IpLCBcXHUwMDI2bWFwX3NhdmUpKVxcbi1cXHRcXHRnb3RvIHVubWFwX21hcDtcXG4rXFx0Q0xBU1Moa3ZtX3ZjcHVfbWFwX2xvY2FsLCBtX3NhdmUpKHZjcHUsIGdwYV90b19nZm4oc3ZtLVxcdTAwM2VuZXN0ZWQuaHNhdmVfbXNyKSk7XFxuK1xcdGlmIChtX3NhdmUucmV0KVxcbitcXHRcXHRyZXR1cm4gMTtcXG4gXFxuIFxcdGlmIChzdm1fYWxsb2NhdGVfbmVzdGVkKHN2bSkpXFxuLVxcdFxcdGdvdG8gdW5tYXBfc2F2ZTtcXG4rXFx0XFx0cmV0dXJuIDE7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBSZXN0b3JlIEwxIGhvc3Qgc3RhdGUgZnJvbSBMMSBIU0FWRSBhcmVhIGFzIFZNQ0IwMSB3YXNcXG4gXFx0ICogdXNlZCBkdXJpbmcgU01NIChzZWUgc3ZtX2VudGVyX3NtbSgpKVxcbiBcXHQgKi9cXG4gXFxuLVxcdHN2bV9jb3B5X3ZtcnVuX3N0YXRlKFxcdTAwMjZzdm0tXFx1MDAzZXZtY2IwMS5wdHItXFx1MDAzZXNhdmUsIG1hcF9zYXZlLmh2YSArIDB4NDAwKTtcXG4rXFx0c3ZtX2NvcHlfdm1ydW5fc3RhdGUoXFx1MDAyNnN2bS1cXHUwMDNldm1jYjAxLnB0ci1cXHUwMDNlc2F2ZSwgbV9zYXZlLm1hcC5odmEgKyAweDQwMCk7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBFbnRlciB0aGUgbmVzdGVkIGd1ZXN0IG5vd1xcbkBAIC01MDgwLDI0ICs1MDc0LDE4IEBAIHN0YXRpYyBpbnQgc3ZtX2xlYXZlX3NtbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGNvbnN0IHVuaW9uIGt2bV9zbXJhbSAqc21yYW0pXFxuIFxcbiBcXHR2bWNiX21hcmtfYWxsX2RpcnR5KHN2bS1cXHUwMDNldm1jYjAxLnB0cik7XFxuIFxcbi1cXHR2bWNiMTIgPSBtYXAuaHZhO1xcbitcXHR2bWNiMTIgPSBtLm1hcC5odmE7XFxuIFxcdG5lc3RlZF9jb3B5X3ZtY2JfY29udHJvbF90b19jYWNoZShzdm0sIFxcdTAwMjZ2bWNiMTItXFx1MDAzZWNvbnRyb2wpO1xcbiBcXHRuZXN0ZWRfY29weV92bWNiX3NhdmVfdG9fY2FjaGUoc3ZtLCBcXHUwMDI2dm1jYjEyLVxcdTAwM2VzYXZlKTtcXG4gXFxuIFxcdGlmIChuZXN0ZWRfc3ZtX2NoZWNrX2NhY2hlZF92bWNiMTIodmNwdSkgXFx1MDAzYyAwKVxcbi1cXHRcXHRnb3RvIHVubWFwX3NhdmU7XFxuK1xcdFxcdHJldHVybiAxO1xcbiBcXG4gXFx0aWYgKGVudGVyX3N2bV9ndWVzdF9tb2RlKHZjcHUsIHNtcmFtNjQtXFx1MDAzZXN2bV9ndWVzdF92bWNiX2dwYSwgZmFsc2UpICE9IDApXFxuLVxcdFxcdGdvdG8gdW5tYXBfc2F2ZTtcXG4rXFx0XFx0cmV0dXJuIDE7XFxuIFxcbi1cXHRyZXQgPSAwO1xcbiBcXHR2Y3B1LVxcdTAwM2VhcmNoLm5lc3RlZF9ydW5fcGVuZGluZyA9IEtWTV9ORVNURURfUlVOX1BFTkRJTkc7XFxuLVxcbi11bm1hcF9zYXZlOlxcbi1cXHRrdm1fdmNwdV91bm1hcCh2Y3B1LCBcXHUwMDI2bWFwX3NhdmUpO1xcbi11bm1hcF9tYXA6XFxuLVxcdGt2bV92Y3B1X3VubWFwKHZjcHUsIFxcdTAwMjZtYXApO1xcbi1cXHRyZXR1cm4gcmV0O1xcbitcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgc3ZtX2VuYWJsZV9zbWlfd2luZG93KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYyBiL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNcXG5pbmRleCBiNTQ2MGRlNGIxYTcyZi4uZWY3OTc2OWM2Mjg3MTggMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuY1xcbisrKyBiL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNcXG5AQCAtNzMwLDcgKzczMCw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBuZXN0ZWRfdm14X3ByZXBhcmVfbXNyX2JpdG1hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuIFxcdGludCBtc3I7XFxuIFxcdHVuc2lnbmVkIGxvbmcgKm1zcl9iaXRtYXBfbDE7XFxuIFxcdHVuc2lnbmVkIGxvbmcgKm1zcl9iaXRtYXBfbDAgPSB2bXgtXFx1MDAzZW5lc3RlZC52bWNzMDIubXNyX2JpdG1hcDtcXG4tXFx0c3RydWN0IGt2bV9ob3N0X21hcCBtYXA7XFxuIFxcbiBcXHQvKiBOb3RoaW5nIHRvIGRvIGlmIHRoZSBNU1IgYml0bWFwIGlzIG5vdCBpbiB1c2UuICAqL1xcbiBcXHRpZiAoIWNwdV9oYXNfdm14X21zcl9iaXRtYXAoKSB8fFxcbkBAIC03NTMsMTAgKzc1MiwxMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbmVzdGVkX3ZteF9wcmVwYXJlX21zcl9iaXRtYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbiBcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKGt2bV92Y3B1X21hcF9yZWFkb25seSh2Y3B1LCBncGFfdG9fZ2ZuKHZtY3MxMi1cXHUwMDNlbXNyX2JpdG1hcCksIFxcdTAwMjZtYXApKVxcbitcXHRDTEFTUyhrdm1fdmNwdV9tYXBfbG9jYWxfcmVhZG9ubHksIG0pKHZjcHUsIGdwYV90b19nZm4odm1jczEyLVxcdTAwM2Vtc3JfYml0bWFwKSk7XFxuK1xcdGlmIChtLnJldClcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4tXFx0bXNyX2JpdG1hcF9sMSA9ICh1bnNpZ25lZCBsb25nICopbWFwLmh2YTtcXG4rXFx0bXNyX2JpdG1hcF9sMSA9ICh1bnNpZ25lZCBsb25nICopbS5tYXAuaHZhO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogVG8ga2VlcCB0aGUgY29udHJvbCBmbG93IHNpbXBsZSwgcGF5IGVpZ2h0IDgtYnl0ZSB3cml0ZXMgKHNpeHRlZW5cXG5AQCAtODM2LDggKzgzNiw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBuZXN0ZWRfdm14X3ByZXBhcmVfbXNyX2JpdG1hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuIFxcbiBcXHRuZXN0ZWRfdm14X21lcmdlX3BtdV9tc3JfYml0bWFwcyh2Y3B1LCBtc3JfYml0bWFwX2wxLCBtc3JfYml0bWFwX2wwKTtcXG4gXFxuLVxcdGt2bV92Y3B1X3VubWFwKHZjcHUsIFxcdTAwMjZtYXApO1xcbi1cXG4gXFx0dm14LVxcdTAwM2VuZXN0ZWQuZm9yY2VfbXNyX2JpdG1hcF9yZWNhbGMgPSBmYWxzZTtcXG4gXFxuIFxcdHJldHVybiB0cnVlO1xcbkBAIC01MDY2LDggKzUwNjQsOSBAQCB2b2lkIF9fbmVzdGVkX3ZteF92bWV4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgdm1fZXhpdF9yZWFzb24sXFxuIFxcdC8qIHRyeWluZyB0byBjYW5jZWwgdm1sYXVuY2gvdm1yZXN1bWUgaXMgYSBidWcgKi9cXG4gXFx0a3ZtX3dhcm5fb25fbmVzdGVkX3J1bl9wZW5kaW5nKHZjcHUpO1xcbiBcXG4tI2lmZGVmIENPTkZJR19LVk1fSFlQRVJWXFxuK1xcdC8qIE5vdGUsIFxcXCJjaGVja2luZ1xcXCIgdGhlIHJlcXVlc3QgYWxzbyBjbGVhcnMgdGhlIHJlcXVlc3QuICovXFxuIFxcdGlmIChrdm1fY2hlY2tfcmVxdWVzdChLVk1fUkVRX0dFVF9ORVNURURfU1RBVEVfUEFHRVMsIHZjcHUpKSB7XFxuKyNpZmRlZiBDT05GSUdfS1ZNX0hZUEVSVlxcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBLVk1fUkVRX0dFVF9ORVNURURfU1RBVEVfUEFHRVMgaXMgYWxzbyB1c2VkIHRvIG1hcFxcbiBcXHRcXHQgKiBFbmxpZ2h0ZW5lZCBWTUNTIGFmdGVyIG1pZ3JhdGlvbiBhbmQgd2Ugc3RpbGwgbmVlZCB0b1xcbkBAIC01MDc1LDggKzUwNzQsOCBAQCB2b2lkIF9fbmVzdGVkX3ZteF92bWV4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgdm1fZXhpdF9yZWFzb24sXFxuIFxcdFxcdCAqIHRoZSBmaXJzdCBMMiBydW4uXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHQodm9pZCluZXN0ZWRfZ2V0X2V2bWNzX3BhZ2UodmNwdSk7XFxuLVxcdH1cXG4gI2VuZGlmXFxuK1xcdH1cXG4gXFxuIFxcdC8qIFNlcnZpY2UgcGVuZGluZyBUTEIgZmx1c2ggcmVxdWVzdHMgZm9yIEwyIGJlZm9yZSBzd2l0Y2hpbmcgdG8gTDEuICovXFxuIFxcdGt2bV9zZXJ2aWNlX2xvY2FsX3RsYl9mbHVzaF9yZXF1ZXN0cyh2Y3B1KTtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXFxuaW5kZXggOWRiNmViNDAyM2M0OGYuLmM1NGRiZmRiYzM0NmM4IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxcbisrKyBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxcbkBAIC0xNDIwLDYgKzE0MjAsMjUgQEAgc3RhdGljIGlubGluZSB2b2lkIGt2bV92Y3B1X21hcF9tYXJrX2RpcnR5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4gXFx0XFx0a3ZtX3ZjcHVfbWFya19wYWdlX2RpcnR5KHZjcHUsIG1hcC1cXHUwMDNlZ2ZuKTtcXG4gfVxcbiBcXG4rdHlwZWRlZiBzdHJ1Y3Qge1xcbitcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XFxuK1xcdHN0cnVjdCBrdm1faG9zdF9tYXAgbWFwO1xcbitcXHRpbnQgcmV0O1xcbit9IGt2bV92Y3B1X2xvY2FsX21hcF90O1xcbitcXG4rI2RlZmluZSBERUZJTkVfVkNQVV9NQVBfQ0xBU1Mocm8pXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitERUZJTkVfQ0xBU1Moa3ZtX3ZjcHVfbWFwX2xvY2FsIyNybywga3ZtX3ZjcHVfbG9jYWxfbWFwX3QsXFx0XFx0XFxcXFxcbitcXHQgICAgIGlmICghX1QucmV0KSBrdm1fdmNwdV91bm1hcChfVC52Y3B1LCBcXHUwMDI2X1QubWFwKSxcXHRcXHRcXFxcXFxuK1xcdCAgICAgKHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdGt2bV92Y3B1X2xvY2FsX21hcF90IG0gPSB7IC52Y3B1ID0gdmNwdSB9O1xcdFxcdFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHRtLnJldCA9IGt2bV92Y3B1X21hcCMjcm8odmNwdSwgZ2ZuLCBcXHUwMDI2bS5tYXApO1xcdFxcdFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHRtO1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0ICAgICB9KSwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBnZm5fdCBnZm4pO1xcbitERUZJTkVfVkNQVV9NQVBfQ0xBU1MoKTtcXG4rREVGSU5FX1ZDUFVfTUFQX0NMQVNTKF9yZWFkb25seSk7XFxuK1xcbiB1bnNpZ25lZCBsb25nIGt2bV92Y3B1X2dmbl90b19odmEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBnZm5fdCBnZm4pO1xcbiB1bnNpZ25lZCBsb25nIGt2bV92Y3B1X2dmbl90b19odmFfcHJvdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGdmbiwgYm9vbCAqd3JpdGFibGUpO1xcbiBpbnQga3ZtX3ZjcHVfcmVhZF9ndWVzdF9wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ2ZuX3QgZ2ZuLCB2b2lkICpkYXRhLCBpbnQgb2Zmc2V0LFxcbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9rdm1fbWFpbi5jIGIvdmlydC9rdm0va3ZtX21haW4uY1xcbmluZGV4IDJkZjhlZTllY2Y2YzZkLi5lOWUzMjY4NmU0MWJlNCAxMDA2NDRcXG4tLS0gYS92aXJ0L2t2bS9rdm1fbWFpbi5jXFxuKysrIGIvdmlydC9rdm0va3ZtX21haW4uY1xcbkBAIC0zMTE4LDYgKzMxMTgsOSBAQCBpbnQgX19rdm1fdmNwdV9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBnZm5fdCBnZm4sIHN0cnVjdCBrdm1faG9zdF9tYXAgKm1hcCxcXG4gXFx0XFx0LnBpbiA9IHRydWUsXFxuIFxcdH07XFxuIFxcbitcXHRpZiAoV0FSTl9PTl9PTkNFKG1hcC1cXHUwMDNlaHZhKSlcXG4rXFx0XFx0a3ZtX3ZjcHVfdW5tYXAodmNwdSwgbWFwKTtcXG4rXFxuIFxcdG1hcC1cXHUwMDNlcGlubmVkX3BhZ2UgPSBOVUxMO1xcbiBcXHRtYXAtXFx1MDAzZXBhZ2UgPSBOVUxMO1xcbiBcXHRtYXAtXFx1MDAzZWh2YSA9IE5VTEw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDA1OjU3OjMwLjI2MTU0MDcxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTQzMzA1MTkyNzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0FNRFwiLFxuICAgIFwiS1ZNX0lOVEVMXCIsXG4gICAgXCJLVk1fU01NXCIsXG4gICAgXCJLVk1fSFlQRVJWXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmVzdGVkX3N2bV92bXJ1blwiLFxuICAgIFwibmVzdGVkX3N2bV92bWV4aXRcIixcbiAgICBcInZtbG9hZF9pbnRlcmNlcHRpb25cIixcbiAgICBcInZtc2F2ZV9pbnRlcmNlcHRpb25cIixcbiAgICBcInN2bV9lbnRlcl9zbW1cIixcbiAgICBcInN2bV9sZWF2ZV9zbW1cIixcbiAgICBcIm5lc3RlZF92bXhfZW50ZXJfbm9uX3Jvb3RfbW9kZVwiLFxuICAgIFwiX19uZXN0ZWRfdm14X3ZtZXhpdFwiLFxuICAgIFwidm14X3NldF9uZXN0ZWRfc3RhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGNsZWFudXAgY2xhc3MgYGt2bV92Y3B1X21hcF9sb2NhbGAgYW5kIHVzZXMgaXQgdG8gcmVwbGFjZSBtYW51YWwgYGt2bV92Y3B1X21hcGAgYW5kIGBrdm1fdmNwdV91bm1hcGAgY2FsbHMgaW4gc2V2ZXJhbCBLVk0gZnVuY3Rpb25zIGFjcm9zcyB4ODYgKFNWTSBhbmQgVk1YKSBhbmQgUG93ZXJQQyAoQm9vazNTIFBSKS4gSXQgYWxzbyBmaXhlcyBhIGJ1ZyBpbiBgX19uZXN0ZWRfdm14X3ZtZXhpdGAgd2hlcmUgYGt2bV9jaGVja19yZXF1ZXN0KEtWTV9SRVFfR0VUX05FU1RFRF9TVEFURV9QQUdFUywgdmNwdSlgIHdhcyBvbmx5IGNhbGxlZCB3aGVuIGBDT05GSUdfS1ZNX0hZUEVSVmAgd2FzIGVuYWJsZWQsIGJ1dCBjaGVja2luZyB0aGUgcmVxdWVzdCBhbHNvIGNsZWFycyBpdCwgc28gaXQgc2hvdWxkIGJlIGNhbGxlZCB1bmNvbmRpdGlvbmFsbHkuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gY29yZSBLVk0gbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgY2xlYW51cCBjbGFzcyB3b3JrcyBjb3JyZWN0bHkgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIG1lbW9yeSBsZWFrcyBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMsIGFuZCB0byB2ZXJpZnkgdGhlIGZpeCBpbiBgX19uZXN0ZWRfdm14X3ZtZXhpdGAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGI4ODA0ODVjMWUzMTQ5YzQ3Yzc1YWRiMWZlYmFjNTAwOWM1ODYzODNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAyNSAwNTo1NzoyNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmMgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wci5jXG5pbmRleCAyYmEyZGQyNmE3ZWFkOC4uZGE3YTAzOGUyNzAwZDIgMTAwNjQ0XG4tLS0gYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wci5jXG4rKysgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wci5jXG5AQCAtNjM5LDI3ICs2MzksMjQgQEAgc3RhdGljIHZvaWQga3ZtcHBjX3NldF9wdnJfcHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgcHZyKVxuICAqL1xuIHN0YXRpYyB2b2lkIGt2bXBwY19wYXRjaF9kY2J6KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bXBwY19wdGUgKnB0ZSlcbiB7XG4tXHRzdHJ1Y3Qga3ZtX2hvc3RfbWFwIG1hcDtcbiBcdHU2NCBocGFnZV9vZmZzZXQ7XG4gXHR1MzIgKnBhZ2U7XG4gXHRpbnQgaSwgcjtcbiBcbi1cdHIgPSBrdm1fdmNwdV9tYXAodmNwdSwgcHRlLVx1MDAzZXJhZGRyIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZULCBcdTAwMjZtYXApO1xuLVx0aWYgKHIpXG4rXHRDTEFTUyhrdm1fdmNwdV9tYXBfbG9jYWwsIG0pKHZjcHUsIHB0ZS1cdTAwM2VyYWRkciBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG4rXHRpZiAobS5yZXQpXG4gXHRcdHJldHVybjtcbiBcbiBcdGhwYWdlX29mZnNldCA9IHB0ZS1cdTAwM2VyYWRkciBcdTAwMjYgflBBR0VfTUFTSztcbiBcdGhwYWdlX29mZnNldCBcdTAwMjY9IH4weEZGRlVMTDtcbiBcdGhwYWdlX29mZnNldCAvPSA0O1xuIFxuLVx0cGFnZSA9IG1hcC5odmE7XG4rXHRwYWdlID0gbS5tYXAuaHZhO1xuIFxuIFx0LyogcGF0Y2ggZGNieiBpbnRvIHJlc2VydmVkIGluc3RydWN0aW9uLCBzbyB3ZSB0cmFwICovXG4gXHRmb3IgKGk9aHBhZ2Vfb2Zmc2V0OyBpIFx1MDAzYyBocGFnZV9vZmZzZXQgKyAoSFdfUEFHRV9TSVpFIC8gNCk7IGkrKylcbiBcdFx0aWYgKChiZTMyX3RvX2NwdShwYWdlW2ldKSBcdTAwMjYgMHhmZjAwMDdmZikgPT0gSU5TX0RDQlopXG4gXHRcdFx0cGFnZVtpXSBcdTAwMjY9IGNwdV90b19iZTMyKDB4ZmZmZmZmZjcpO1xuLVxuLVx0a3ZtX3ZjcHVfdW5tYXAodmNwdSwgXHUwMDI2bWFwKTtcbiB9XG4gXG4gc3RhdGljIGJvb2wga3ZtcHBjX3Zpc2libGVfZ3BhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhKVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jXG5pbmRleCA1ZTNlMjgwY2Q0ODNlMy4uNzNmMzdiMDUwZDBhMGIgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jXG5AQCAtMTA4NiwxNCArMTA4NiwxNCBAQCBpbnQgZW50ZXJfc3ZtX2d1ZXN0X21vZGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdm1jYjEyX2dwYSwgYm9vbCBmcm9tX3ZtcnVuKVxuIHN0YXRpYyBpbnQgbmVzdGVkX3N2bV9jb3B5X3ZtY2IxMl90b19jYWNoZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2bWNiMTJfZ3BhKVxuIHtcbiBcdHN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpO1xuLVx0c3RydWN0IGt2bV9ob3N0X21hcCBtYXA7XG4gXHRzdHJ1Y3Qgdm1jYiAqdm1jYjEyO1xuIFx0aW50IHIgPSAwO1xuIFxuLVx0aWYgKGt2bV92Y3B1X21hcCh2Y3B1LCBncGFfdG9fZ2ZuKHZtY2IxMl9ncGEpLCBcdTAwMjZtYXApKVxuK1x0Q0xBU1Moa3ZtX3ZjcHVfbWFwX2xvY2FsLCBtKSh2Y3B1LCBncGFfdG9fZ2ZuKHZtY2IxMl9ncGEpKTtcbitcdGlmIChtLnJldClcbiBcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXG4tXHR2bWNiMTIgPSBtYXAuaHZhO1xuK1x0dm1jYjEyID0gbS5tYXAuaHZhO1xuIFx0bmVzdGVkX2NvcHlfdm1jYl9jb250cm9sX3RvX2NhY2hlKHN2bSwgXHUwMDI2dm1jYjEyLVx1MDAzZWNvbnRyb2wpO1xuIFx0bmVzdGVkX2NvcHlfdm1jYl9zYXZlX3RvX2NhY2hlKHN2bSwgXHUwMDI2dm1jYjEyLVx1MDAzZXNhdmUpO1xuIFxuQEAgLTExMDcsNyArMTEwNyw2IEBAIHN0YXRpYyBpbnQgbmVzdGVkX3N2bV9jb3B5X3ZtY2IxMl90b19jYWNoZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2bWNiMTJfZ3BhXG4gXHRcdHIgPSAtRUlOVkFMO1xuIFx0fVxuIFxuLVx0a3ZtX3ZjcHVfdW5tYXAodmNwdSwgXHUwMDI2bWFwKTtcbiBcdHJldHVybiByO1xuIH1cbiBcbkBAIC0xMjUxLDE1ICsxMjUwLDEzIEBAIHN0YXRpYyBpbnQgbmVzdGVkX3N2bV92bWV4aXRfdXBkYXRlX3ZtY2IxMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0c3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7XG4gXHRzdHJ1Y3Qgdm1jYiAqdm1jYjAyID0gc3ZtLVx1MDAzZW5lc3RlZC52bWNiMDIucHRyO1xuLVx0c3RydWN0IGt2bV9ob3N0X21hcCBtYXA7XG4gXHRzdHJ1Y3Qgdm1jYiAqdm1jYjEyO1xuLVx0aW50IHJjO1xuIFxuLVx0cmMgPSBrdm1fdmNwdV9tYXAodmNwdSwgZ3BhX3RvX2dmbihzdm0tXHUwMDNlbmVzdGVkLnZtY2IxMl9ncGEpLCBcdTAwMjZtYXApO1xuLVx0aWYgKHJjKVxuLVx0XHRyZXR1cm4gcmM7XG4rXHRDTEFTUyhrdm1fdmNwdV9tYXBfbG9jYWwsIG0pKHZjcHUsIGdwYV90b19nZm4oc3ZtLVx1MDAzZW5lc3RlZC52bWNiMTJfZ3BhKSk7XG4rXHRpZiAobS5yZXQpXG4rXHRcdHJldHVybiBtLnJldDtcbiBcbi1cdHZtY2IxMiA9IG1hcC5odmE7XG4rXHR2bWNiMTIgPSBtLm1hcC5odmE7XG4gXG4gXHR2bWNiMTItXHUwMDNlc2F2ZS5lcyAgICAgPSB2bWNiMDItXHUwMDNlc2F2ZS5lcztcbiBcdHZtY2IxMi1cdTAwM2VzYXZlLmNzICAgICA9IHZtY2IwMi1cdTAwM2VzYXZlLmNzO1xuQEAgLTEzMTQsNyArMTMxMSw2IEBAIHN0YXRpYyBpbnQgbmVzdGVkX3N2bV92bWV4aXRfdXBkYXRlX3ZtY2IxMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRcdFx0XHQgICAgICAgdm1jYjEyLVx1MDAzZWNvbnRyb2wuZXhpdF9pbnRfaW5mb19lcnIsXG4gXHRcdFx0XHQgICAgICAgS1ZNX0lTQV9TVk0pO1xuIFxuLVx0a3ZtX3ZjcHVfdW5tYXAodmNwdSwgXHUwMDI2bWFwKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xuaW5kZXggOTEyODZkNDZkMTNhZGIuLjdhNDE3ZTcxN2ZkOTFlIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xuKysrIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xuQEAgLTIyMTYsNyArMjIxNiw2IEBAIHN0YXRpYyBpbnQgdm1sb2FkX3Ztc2F2ZV9pbnRlcmNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIHZtbG9hZClcbiBcdHU2NCB2bWNiMTJfZ3BhID0ga3ZtX3JheF9yZWFkKHZjcHUpO1xuIFx0c3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7XG4gXHRzdHJ1Y3Qgdm1jYiAqdm1jYjEyO1xuLVx0c3RydWN0IGt2bV9ob3N0X21hcCBtYXA7XG4gXHRpbnQgcmV0O1xuIFxuIFx0aWYgKG5lc3RlZF9zdm1fY2hlY2tfcGVybWlzc2lvbnModmNwdSkpXG5AQCAtMjIyNywxMCArMjIyNiwxMSBAQCBzdGF0aWMgaW50IHZtbG9hZF92bXNhdmVfaW50ZXJjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCB2bWxvYWQpXG4gXHRcdHJldHVybiAxO1xuIFx0fVxuIFxuLVx0aWYgKGt2bV92Y3B1X21hcCh2Y3B1LCBncGFfdG9fZ2ZuKHZtY2IxMl9ncGEpLCBcdTAwMjZtYXApKVxuK1x0Q0xBU1Moa3ZtX3ZjcHVfbWFwX2xvY2FsLCBtKSh2Y3B1LCBncGFfdG9fZ2ZuKHZtY2IxMl9ncGEpKTtcbitcdGlmIChtLnJldClcbiBcdFx0cmV0dXJuIGt2bV9oYW5kbGVfbWVtb3J5X2ZhaWx1cmUodmNwdSwgWDg2RU1VTF9JT19ORUVERUQsIE5VTEwpO1xuIFxuLVx0dm1jYjEyID0gbWFwLmh2YTtcbitcdHZtY2IxMiA9IG0ubWFwLmh2YTtcbiBcbiBcdHJldCA9IGt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpO1xuIFxuQEAgLTIyNDMsOCArMjI0Myw2IEBAIHN0YXRpYyBpbnQgdm1sb2FkX3Ztc2F2ZV9pbnRlcmNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIHZtbG9hZClcbiBcdFx0c3ZtX2NvcHlfdm1sb2Fkc2F2ZV9zdGF0ZSh2bWNiMTIsIHN2bS1cdTAwM2V2bWNiMDEucHRyKTtcbiBcdH1cbiBcbi1cdGt2bV92Y3B1X3VubWFwKHZjcHUsIFx1MDAyNm1hcCk7XG4tXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbkBAIC00OTg5LDcgKzQ5ODcsNiBAQCBzdGF0aWMgaW50IHN2bV9zbWlfYWxsb3dlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgZm9yX2luamVjdGlvbilcbiBzdGF0aWMgaW50IHN2bV9lbnRlcl9zbW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bmlvbiBrdm1fc21yYW0gKnNtcmFtKVxuIHtcbiBcdHN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpO1xuLVx0c3RydWN0IGt2bV9ob3N0X21hcCBtYXBfc2F2ZTtcbiBcbiBcdGlmICghaXNfZ3Vlc3RfbW9kZSh2Y3B1KSlcbiBcdFx0cmV0dXJuIDA7XG5AQCAtNTAyMywyNCArNTAyMCwyMCBAQCBzdGF0aWMgaW50IHN2bV9lbnRlcl9zbW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bmlvbiBrdm1fc21yYW0gKnNtcmFtKVxuIFx0ICogdGhhdCwgc2VlIHN2bV9wcmVwYXJlX3N3aXRjaF90b19ndWVzdCgpKSB3aGljaCBtdXN0IGJlXG4gXHQgKiBwcmVzZXJ2ZWQuXG4gXHQgKi9cbi1cdGlmIChrdm1fdmNwdV9tYXAodmNwdSwgZ3BhX3RvX2dmbihzdm0tXHUwMDNlbmVzdGVkLmhzYXZlX21zciksIFx1MDAyNm1hcF9zYXZlKSlcbitcdENMQVNTKGt2bV92Y3B1X21hcF9sb2NhbCwgbV9zYXZlKSh2Y3B1LCBncGFfdG9fZ2ZuKHN2bS1cdTAwM2VuZXN0ZWQuaHNhdmVfbXNyKSk7XG4rXHRpZiAobV9zYXZlLnJldClcbiBcdFx0cmV0dXJuIDE7XG4gXG4gXHRCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IHZtY2IsIHNhdmUpICE9IDB4NDAwKTtcbiBcbi1cdHN2bV9jb3B5X3ZtcnVuX3N0YXRlKG1hcF9zYXZlLmh2YSArIDB4NDAwLFxuLVx0XHRcdCAgICAgXHUwMDI2c3ZtLVx1MDAzZXZtY2IwMS5wdHItXHUwMDNlc2F2ZSk7XG4tXG4tXHRrdm1fdmNwdV91bm1hcCh2Y3B1LCBcdTAwMjZtYXBfc2F2ZSk7XG4rXHRzdm1fY29weV92bXJ1bl9zdGF0ZShtX3NhdmUubWFwLmh2YSArIDB4NDAwLCBcdTAwMjZzdm0tXHUwMDNldm1jYjAxLnB0ci1cdTAwM2VzYXZlKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgaW50IHN2bV9sZWF2ZV9zbW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBjb25zdCB1bmlvbiBrdm1fc21yYW0gKnNtcmFtKVxuIHtcbiBcdHN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpO1xuLVx0c3RydWN0IGt2bV9ob3N0X21hcCBtYXAsIG1hcF9zYXZlO1xuIFx0c3RydWN0IHZtY2IgKnZtY2IxMjtcbi1cdGludCByZXQ7XG4gXG4gXHRjb25zdCBzdHJ1Y3Qga3ZtX3NtcmFtX3N0YXRlXzY0ICpzbXJhbTY0ID0gXHUwMDI2c21yYW0tXHUwMDNlc21yYW02NDtcbiBcbkBAIC01MDU3LDIyICs1MDUwLDIzIEBAIHN0YXRpYyBpbnQgc3ZtX2xlYXZlX3NtbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGNvbnN0IHVuaW9uIGt2bV9zbXJhbSAqc21yYW0pXG4gXHRpZiAoIShzbXJhbTY0LVx1MDAzZWVmZXIgXHUwMDI2IEVGRVJfU1ZNRSkpXG4gXHRcdHJldHVybiAxO1xuIFxuLVx0aWYgKGt2bV92Y3B1X21hcCh2Y3B1LCBncGFfdG9fZ2ZuKHNtcmFtNjQtXHUwMDNlc3ZtX2d1ZXN0X3ZtY2JfZ3BhKSwgXHUwMDI2bWFwKSlcbitcdENMQVNTKGt2bV92Y3B1X21hcF9sb2NhbCwgbSkodmNwdSwgZ3BhX3RvX2dmbihzbXJhbTY0LVx1MDAzZXN2bV9ndWVzdF92bWNiX2dwYSkpO1xuK1x0aWYgKG0ucmV0KVxuIFx0XHRyZXR1cm4gMTtcbiBcbi1cdHJldCA9IDE7XG4tXHRpZiAoa3ZtX3ZjcHVfbWFwKHZjcHUsIGdwYV90b19nZm4oc3ZtLVx1MDAzZW5lc3RlZC5oc2F2ZV9tc3IpLCBcdTAwMjZtYXBfc2F2ZSkpXG4tXHRcdGdvdG8gdW5tYXBfbWFwO1xuK1x0Q0xBU1Moa3ZtX3ZjcHVfbWFwX2xvY2FsLCBtX3NhdmUpKHZjcHUsIGdwYV90b19nZm4oc3ZtLVx1MDAzZW5lc3RlZC5oc2F2ZV9tc3IpKTtcbitcdGlmIChtX3NhdmUucmV0KVxuK1x0XHRyZXR1cm4gMTtcbiBcbiBcdGlmIChzdm1fYWxsb2NhdGVfbmVzdGVkKHN2bSkpXG4tXHRcdGdvdG8gdW5tYXBfc2F2ZTtcbitcdFx0cmV0dXJuIDE7XG4gXG4gXHQvKlxuIFx0ICogUmVzdG9yZSBMMSBob3N0IHN0YXRlIGZyb20gTDEgSFNBVkUgYXJlYSBhcyBWTUNCMDEgd2FzXG4gXHQgKiB1c2VkIGR1cmluZyBTTU0gKHNlZSBzdm1fZW50ZXJfc21tKCkpXG4gXHQgKi9cbiBcbi1cdHN2bV9jb3B5X3ZtcnVuX3N0YXRlKFx1MDAyNnN2bS1cdTAwM2V2bWNiMDEucHRyLVx1MDAzZXNhdmUsIG1hcF9zYXZlLmh2YSArIDB4NDAwKTtcbitcdHN2bV9jb3B5X3ZtcnVuX3N0YXRlKFx1MDAyNnN2bS1cdTAwM2V2bWNiMDEucHRyLVx1MDAzZXNhdmUsIG1fc2F2ZS5tYXAuaHZhICsgMHg0MDApO1xuIFxuIFx0LypcbiBcdCAqIEVudGVyIHRoZSBuZXN0ZWQgZ3Vlc3Qgbm93XG5AQCAtNTA4MCwyNCArNTA3NCwxOCBAQCBzdGF0aWMgaW50IHN2bV9sZWF2ZV9zbW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBjb25zdCB1bmlvbiBrdm1fc21yYW0gKnNtcmFtKVxuIFxuIFx0dm1jYl9tYXJrX2FsbF9kaXJ0eShzdm0tXHUwMDNldm1jYjAxLnB0cik7XG4gXG4tXHR2bWNiMTIgPSBtYXAuaHZhO1xuK1x0dm1jYjEyID0gbS5tYXAuaHZhO1xuIFx0bmVzdGVkX2NvcHlfdm1jYl9jb250cm9sX3RvX2NhY2hlKHN2bSwgXHUwMDI2dm1jYjEyLVx1MDAzZWNvbnRyb2wpO1xuIFx0bmVzdGVkX2NvcHlfdm1jYl9zYXZlX3RvX2NhY2hlKHN2bSwgXHUwMDI2dm1jYjEyLVx1MDAzZXNhdmUpO1xuIFxuIFx0aWYgKG5lc3RlZF9zdm1fY2hlY2tfY2FjaGVkX3ZtY2IxMih2Y3B1KSBcdTAwM2MgMClcbi1cdFx0Z290byB1bm1hcF9zYXZlO1xuK1x0XHRyZXR1cm4gMTtcbiBcbiBcdGlmIChlbnRlcl9zdm1fZ3Vlc3RfbW9kZSh2Y3B1LCBzbXJhbTY0LVx1MDAzZXN2bV9ndWVzdF92bWNiX2dwYSwgZmFsc2UpICE9IDApXG4tXHRcdGdvdG8gdW5tYXBfc2F2ZTtcbitcdFx0cmV0dXJuIDE7XG4gXG4tXHRyZXQgPSAwO1xuIFx0dmNwdS1cdTAwM2VhcmNoLm5lc3RlZF9ydW5fcGVuZGluZyA9IEtWTV9ORVNURURfUlVOX1BFTkRJTkc7XG4tXG4tdW5tYXBfc2F2ZTpcbi1cdGt2bV92Y3B1X3VubWFwKHZjcHUsIFx1MDAyNm1hcF9zYXZlKTtcbi11bm1hcF9tYXA6XG4tXHRrdm1fdmNwdV91bm1hcCh2Y3B1LCBcdTAwMjZtYXApO1xuLVx0cmV0dXJuIHJldDtcbitcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBzdm1fZW5hYmxlX3NtaV93aW5kb3coc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMgYi9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jXG5pbmRleCBiNTQ2MGRlNGIxYTcyZi4uZWY3OTc2OWM2Mjg3MTggMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jXG5AQCAtNzMwLDcgKzczMCw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBuZXN0ZWRfdm14X3ByZXBhcmVfbXNyX2JpdG1hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHRpbnQgbXNyO1xuIFx0dW5zaWduZWQgbG9uZyAqbXNyX2JpdG1hcF9sMTtcbiBcdHVuc2lnbmVkIGxvbmcgKm1zcl9iaXRtYXBfbDAgPSB2bXgtXHUwMDNlbmVzdGVkLnZtY3MwMi5tc3JfYml0bWFwO1xuLVx0c3RydWN0IGt2bV9ob3N0X21hcCBtYXA7XG4gXG4gXHQvKiBOb3RoaW5nIHRvIGRvIGlmIHRoZSBNU1IgYml0bWFwIGlzIG5vdCBpbiB1c2UuICAqL1xuIFx0aWYgKCFjcHVfaGFzX3ZteF9tc3JfYml0bWFwKCkgfHxcbkBAIC03NTMsMTAgKzc1MiwxMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbmVzdGVkX3ZteF9wcmVwYXJlX21zcl9iaXRtYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0XHRcdHJldHVybiB0cnVlO1xuIFx0fVxuIFxuLVx0aWYgKGt2bV92Y3B1X21hcF9yZWFkb25seSh2Y3B1LCBncGFfdG9fZ2ZuKHZtY3MxMi1cdTAwM2Vtc3JfYml0bWFwKSwgXHUwMDI2bWFwKSlcbitcdENMQVNTKGt2bV92Y3B1X21hcF9sb2NhbF9yZWFkb25seSwgbSkodmNwdSwgZ3BhX3RvX2dmbih2bWNzMTItXHUwMDNlbXNyX2JpdG1hcCkpO1xuK1x0aWYgKG0ucmV0KVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4tXHRtc3JfYml0bWFwX2wxID0gKHVuc2lnbmVkIGxvbmcgKiltYXAuaHZhO1xuK1x0bXNyX2JpdG1hcF9sMSA9ICh1bnNpZ25lZCBsb25nICopbS5tYXAuaHZhO1xuIFxuIFx0LypcbiBcdCAqIFRvIGtlZXAgdGhlIGNvbnRyb2wgZmxvdyBzaW1wbGUsIHBheSBlaWdodCA4LWJ5dGUgd3JpdGVzIChzaXh0ZWVuXG5AQCAtODM2LDggKzgzNiw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBuZXN0ZWRfdm14X3ByZXBhcmVfbXNyX2JpdG1hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXG4gXHRuZXN0ZWRfdm14X21lcmdlX3BtdV9tc3JfYml0bWFwcyh2Y3B1LCBtc3JfYml0bWFwX2wxLCBtc3JfYml0bWFwX2wwKTtcbiBcbi1cdGt2bV92Y3B1X3VubWFwKHZjcHUsIFx1MDAyNm1hcCk7XG4tXG4gXHR2bXgtXHUwMDNlbmVzdGVkLmZvcmNlX21zcl9iaXRtYXBfcmVjYWxjID0gZmFsc2U7XG4gXG4gXHRyZXR1cm4gdHJ1ZTtcbkBAIC01MDY2LDggKzUwNjQsOSBAQCB2b2lkIF9fbmVzdGVkX3ZteF92bWV4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgdm1fZXhpdF9yZWFzb24sXG4gXHQvKiB0cnlpbmcgdG8gY2FuY2VsIHZtbGF1bmNoL3ZtcmVzdW1lIGlzIGEgYnVnICovXG4gXHRrdm1fd2Fybl9vbl9uZXN0ZWRfcnVuX3BlbmRpbmcodmNwdSk7XG4gXG4tI2lmZGVmIENPTkZJR19LVk1fSFlQRVJWXG4rXHQvKiBOb3RlLCBcImNoZWNraW5nXCIgdGhlIHJlcXVlc3QgYWxzbyBjbGVhcnMgdGhlIHJlcXVlc3QuICovXG4gXHRpZiAoa3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9HRVRfTkVTVEVEX1NUQVRFX1BBR0VTLCB2Y3B1KSkge1xuKyNpZmRlZiBDT05GSUdfS1ZNX0hZUEVSVlxuIFx0XHQvKlxuIFx0XHQgKiBLVk1fUkVRX0dFVF9ORVNURURfU1RBVEVfUEFHRVMgaXMgYWxzbyB1c2VkIHRvIG1hcFxuIFx0XHQgKiBFbmxpZ2h0ZW5lZCBWTUNTIGFmdGVyIG1pZ3JhdGlvbiBhbmQgd2Ugc3RpbGwgbmVlZCB0b1xuQEAgLTUwNzUsOCArNTA3NCw4IEBAIHZvaWQgX19uZXN0ZWRfdm14X3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiB2bV9leGl0X3JlYXNvbixcbiBcdFx0ICogdGhlIGZpcnN0IEwyIHJ1bi5cbiBcdFx0ICovXG4gXHRcdCh2b2lkKW5lc3RlZF9nZXRfZXZtY3NfcGFnZSh2Y3B1KTtcbi1cdH1cbiAjZW5kaWZcbitcdH1cbiBcbiBcdC8qIFNlcnZpY2UgcGVuZGluZyBUTEIgZmx1c2ggcmVxdWVzdHMgZm9yIEwyIGJlZm9yZSBzd2l0Y2hpbmcgdG8gTDEuICovXG4gXHRrdm1fc2VydmljZV9sb2NhbF90bGJfZmx1c2hfcmVxdWVzdHModmNwdSk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXG5pbmRleCA5ZGI2ZWI0MDIzYzQ4Zi4uYzU0ZGJmZGJjMzQ2YzggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbisrKyBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuQEAgLTE0MjAsNiArMTQyMCwyNSBAQCBzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3ZjcHVfbWFwX21hcmtfZGlydHkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0XHRrdm1fdmNwdV9tYXJrX3BhZ2VfZGlydHkodmNwdSwgbWFwLVx1MDAzZWdmbik7XG4gfVxuIFxuK3R5cGVkZWYgc3RydWN0IHtcbitcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbitcdHN0cnVjdCBrdm1faG9zdF9tYXAgbWFwO1xuK1x0aW50IHJldDtcbit9IGt2bV92Y3B1X2xvY2FsX21hcF90O1xuK1xuKyNkZWZpbmUgREVGSU5FX1ZDUFVfTUFQX0NMQVNTKHJvKVx0XHRcdFx0XHRcXFxuK0RFRklORV9DTEFTUyhrdm1fdmNwdV9tYXBfbG9jYWwjI3JvLCBrdm1fdmNwdV9sb2NhbF9tYXBfdCxcdFx0XFxcbitcdCAgICAgaWYgKCFfVC5yZXQpIGt2bV92Y3B1X3VubWFwKF9ULnZjcHUsIFx1MDAyNl9ULm1hcCksXHRcdFxcXG4rXHQgICAgICh7XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRcdGt2bV92Y3B1X2xvY2FsX21hcF90IG0gPSB7IC52Y3B1ID0gdmNwdSB9O1x0XHRcXFxuK1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRcdG0ucmV0ID0ga3ZtX3ZjcHVfbWFwIyNybyh2Y3B1LCBnZm4sIFx1MDAyNm0ubWFwKTtcdFx0XFxcbitcdFx0XHRcdFx0XHRcdFx0XHRcXFxuK1x0XHRtO1x0XHRcdFx0XHRcdFx0XFxcbitcdCAgICAgfSksIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ2ZuX3QgZ2ZuKTtcbitERUZJTkVfVkNQVV9NQVBfQ0xBU1MoKTtcbitERUZJTkVfVkNQVV9NQVBfQ0xBU1MoX3JlYWRvbmx5KTtcbitcbiB1bnNpZ25lZCBsb25nIGt2bV92Y3B1X2dmbl90b19odmEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBnZm5fdCBnZm4pO1xuIHVuc2lnbmVkIGxvbmcga3ZtX3ZjcHVfZ2ZuX3RvX2h2YV9wcm90KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ2ZuX3QgZ2ZuLCBib29sICp3cml0YWJsZSk7XG4gaW50IGt2bV92Y3B1X3JlYWRfZ3Vlc3RfcGFnZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGdmbiwgdm9pZCAqZGF0YSwgaW50IG9mZnNldCxcbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9rdm1fbWFpbi5jIGIvdmlydC9rdm0va3ZtX21haW4uY1xuaW5kZXggMmRmOGVlOWVjZjZjNmQuLmU5ZTMyNjg2ZTQxYmU0IDEwMDY0NFxuLS0tIGEvdmlydC9rdm0va3ZtX21haW4uY1xuKysrIGIvdmlydC9rdm0va3ZtX21haW4uY1xuQEAgLTMxMTgsNiArMzExOCw5IEBAIGludCBfX2t2bV92Y3B1X21hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGdmbiwgc3RydWN0IGt2bV9ob3N0X21hcCAqbWFwLFxuIFx0XHQucGluID0gdHJ1ZSxcbiBcdH07XG4gXG4rXHRpZiAoV0FSTl9PTl9PTkNFKG1hcC1cdTAwM2VodmEpKVxuK1x0XHRrdm1fdmNwdV91bm1hcCh2Y3B1LCBtYXApO1xuK1xuIFx0bWFwLVx1MDAzZXBpbm5lZF9wYWdlID0gTlVMTDtcbiBcdG1hcC1cdTAwM2VwYWdlID0gTlVMTDtcbiBcdG1hcC1cdTAwM2VodmEgPSBOVUxMO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDU6NTc6MzAuMjYxNTQxNzRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4ODM5MTU2OTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtWTSBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgaW50cm9kdWNlcyBgREVGSU5FX1ZDUFVfTUFQX0NMQVNTYCBhbmQgbGV2ZXJhZ2VzIGBDTEFTUyhrdm1fdmNwdV9tYXBfbG9jYWwsIG0pYCB0byBtYW5hZ2UgcmVzb3VyY2UgY2xlYW51cCB3aXRoaW4gdGhlIEtWTSBjb2RlLiBFc3NlbnRpYWxseSwgaXQncyByZXBsYWNpbmcgbWFudWFsIG1hcHBpbmcvdW5tYXBwaW5nIHdpdGggYSBjbGFzcyB0aGF0IGhhbmRsZXMgdW5tYXBwaW5nIGF1dG9tYXRpY2FsbHkgd2hlbiBpdCBnb2VzIG91dCBvZiBzY29wZSwgYSBnb29kIGhvdXNla2VlcGluZyBpbXByb3ZlbWVudC4gVGhpcyBjbGFzcyBpcyBiZWluZyBkZXBsb3llZCBhY3Jvc3Mgc2V2ZXJhbCBhcmNoaXRlY3R1cmVzIGFuZCBmdW5jdGlvbnM6IGBib29rM3NfcHIuY2AncyBga3ZtcHBjX3BhdGNoX2RjYnpgLCBzb21lIG5lc3RlZCBTVk0vVk1YIGZ1bmN0aW9ucyBsaWtlIGBuZXN0ZWRfc3ZtX2NvcHlfdm1jYjEyX3RvX2NhY2hlYCwgYG5lc3RlZF9zdm1fdm1leGl0X3VwZGF0ZV92bWNiMTJgLCAgYHZtbG9hZF92bXNhdmVfaW50ZXJjZXB0aW9uYCwgYHN2bV9lbnRlcl9zbW1gLCBgc3ZtX2xlYXZlX3NtbWAsIGBuZXN0ZWRfdm14X3ByZXBhcmVfbXNyX2JpdG1hcGAsIGBfX25lc3RlZF92bXhfdm1leGl0YCwgYW5kIGBfX2t2bV92Y3B1X21hcGAuXG5cblRoZSBwYXRjaCBhbHNvIGhhcyBhIGZpeCBmb3IgYF9fbmVzdGVkX3ZteF92bWV4aXRgIHdoZXJlIGBrdm1fY2hlY2tfcmVxdWVzdGAgd2FzIGNvbmRpdGlvbmFsbHkgY2FsbGVkLCBidXQgbm93IGl0J3MgY2FsbGVkIHVuY29uZGl0aW9uYWxseSwgd2hpY2ggSSBzdXNwZWN0IGhhcyBpbXBsaWNhdGlvbnMgZm9yIHJlcXVlc3QgaGFuZGxpbmcsIGVzcGVjaWFsbHkgZ2l2ZW4gdGhhdCBjaGVja2luZyB0aGUgcmVxdWVzdCBhbHNvIGNsZWFycyBpdC4gVGhhdCdzIGEgZGVmaW5pdGUgcG9pbnQgb2YgaW50ZXJlc3QuXG5cbk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbjogSXMgdGhpcyBmdXp6LXdvcnRoeT8gQWJzb2x1dGVseS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBub3QganVzdCBhIHJlZmFjdG9yaW5nLiBUaGUgdXNlIG9mIHRoaXMgY2xlYW51cCBjbGFzcyBpbiBuZXN0ZWQgU1ZNLCBWTVgsIGFuZCBCb29rM1MgUFIsIHBsdXMgdGhlIGZpeCBpbiBgX19uZXN0ZWRfdm14X3ZtZXhpdGAsIG1lYW5zIHdlIGNvdWxkIHBvdGVudGlhbGx5IGV4cG9zZSBzb21lIGludGVyZXN0aW5nIGJ1Z3MuIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRob3NlIGtleSBmdW5jdGlvbnMgd2hlcmUgdGhlIG5ldyBjbGVhbnVwIGNsYXNzIGlzIHVzZWQgYW5kIHRoZSBidWcgZml4IGlzIGltcGxlbWVudGVkLlxuXG5HaXZlbiB0aGUgYXJjaGl0ZWN0dXJlIGNvdmVyYWdlLCBJJ2xsIG5lZWQgdG8gZm9jdXMgb24gdGhlIHg4NiBwYXJ0cywgd2l0aCBgS1ZNYCwgYEtWTV9BTURgLCBhbmQgYEtWTV9JTlRFTGAgZW5hYmxlZCwgYnV0IEkgc2hvdWxkIGFsc28gcmV2aWV3IGBLVk1fQk9PSzNTXzY0X1BSYCBhcyBwYXJ0IG9mIHRoZSBjb3ZlcmFnZS4gVGltZSB0byBjaGVjayB0aG9zZSBLY29uZmlnIGZpbGVzLCBhbmQgdGhlbiBidWlsZCBhIGZ1enppbmcgdGFyZ2V0IHRoYXQgZXhlcmNpc2VzIHRoZXNlIGZ1bmN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6Njk4NSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY1NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDA1OjU3OjM5LjEwMDcwMTIyMloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODY5MDE0NDY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNX1g4NlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxLVxcdGRlZl90cmlzdGF0ZSBLVk0gaWYgKEtWTV9JTlRFTCAhPSBuIHx8IEtWTV9BTUQgIT0gbilcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTUxLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjUyOmNvbmZpZyBLVk1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01My1cXHR0cmlzdGF0ZSBcXFwiS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctNjgtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6Njk6Y29uZmlnIEtWTV9XRVJST1JcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy03MC1cXHRib29sIFxcXCJDb21waWxlIEtWTSB3aXRoIC1XZXJyb3JcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04Mi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo4Mzpjb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTg0LVxcdGJvb2wgXFxcIkVuYWJsZSBzdXBwb3J0IGZvciBLVk0gc29mdHdhcmUtcHJvdGVjdGVkIFZNc1xcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjk2OmNvbmZpZyBLVk1fSU5URUxcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05Ny1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBJbnRlbCAoYW5kIGNvbXBhdGlibGUpIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwNi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMDc6Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXFxcIkNoZWNrIHRoYXQgZ3Vlc3RzIGRvIG5vdCByZWNlaXZlICNWRSBleGNlcHRpb25zXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWc9MTIyPWNvbmZpZyBYODZfU0dYX0tWTVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEzNDpjb25maWcgS1ZNX0lOVEVMX1REWFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cXHRib29sIFxcXCJJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE0Njpjb25maWcgS1ZNX0FNRFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0Ny1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTctXFx0Ym9vbCBcXFwiQU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3MS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNzI6Y29uZmlnIEtWTV9JT0FQSUNcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzMtXFx0Ym9vbCBcXFwiSS9PIEFQSUMsIFBJQywgYW5kIFBJVCBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODEtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTgyOmNvbmZpZyBLVk1fU01NXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTgzLVxcdGJvb2wgXFxcIlN5c3RlbSBNYW5hZ2VtZW50IE1vZGUgZW11bGF0aW9uXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTkyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE5Mzpjb25maWcgS1ZNX0hZUEVSVlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5NC1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBNaWNyb3NvZnQgSHlwZXItViBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDYtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA3OmNvbmZpZyBLVk1fWEVOXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjA4LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIFhlbiBoeXBlcmNhbGwgaW50ZXJmYWNlXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjE1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIxNjpjb25maWcgS1ZNX1BST1ZFX01NVVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNy1cXHRib29sIFxcXCJQcm92ZSBLVk0gTU1VIGNvcnJlY3RuZXNzXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjI4LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIyOTpjb25maWcgS1ZNX0VYVEVSTkFMX1dSSVRFX1RSQUNLSU5HXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjMwLVxcdGJvb2xcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzEtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjMyOmNvbmZpZyBLVk1fTUFYX05SX1ZDUFVTXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjMzLVxcdGludCBcXFwiTWF4aW11bSBudW1iZXIgb2YgdkNQVXMgcGVyIEtWTSBndWVzdFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDU6NTc6NDAuOTY5NzIwNjNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjc0NTk3MDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjpcblxuKipJbnZlc3RpZ2F0aW5nIEtWTSBDb25maWd1cmF0aW9uIFBvc3NpYmlsaXRpZXMqKlxuXG5Pa2F5LCBzbyB3ZSdyZSB0YWxraW5nIGFib3V0IEtWTSwgYW5kIGltbWVkaWF0ZWx5IG15IG1pbmQganVtcHMgdG8gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uczogYEtWTWAsIGBLVk1fQU1EYCwgYEtWTV9JTlRFTGAsIGBLVk1fU01NYCwgYW5kIGBLVk1fSFlQRVJWYC4gVGhlc2UgYXJlIHRoZSBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50cywgdGhlIGNvcmUgYnVpbGRpbmcgYmxvY2tzIGFuZCB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGZsYXZvcnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSBjb25maWd1cmF0aW9uIEknbSBsb29raW5nIGZvciAtIGBLVk1fQk9PSzNTXzY0X1BSYCAtIGV4aXN0cy4gVGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGlzIHRoZSBQb3dlclBDIEtjb25maWcgZmlsZS4gTGV0J3MgZXhhbWluZSBgYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnYCB0byBzZWUgaWYgYEtWTV9CT09LM1NfNjRfUFJgIGlzIGRlZmluZWQgdGhlcmUuIFRoaXMgc2hvdWxkIGdpdmUgbWUgc29tZSBjb250ZXh0IGFib3V0IGl0cyBwdXJwb3NlLCBkZXBlbmRlbmNpZXMsIGFuZCBpZiBpdCdzIGV2ZW4gYSB2aWFibGUgb3B0aW9uIGZvciBjb25zaWRlcmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MzYyLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDU6NTc6NDQuMjQ0MzE5NDA5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyMjI0NDk3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNX0JPT0szU182NF9QUlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Bvd2VycGMva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnPTc5PWNvbmZpZyBLVk1fQk9PSzNTXzY0X0hWXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctOTktXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjEwMDpjb25maWcgS1ZNX0JPT0szU182NF9QUlxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xMDEtXFx0dHJpc3RhdGUgXFxcIktWTSBzdXBwb3J0IHdpdGhvdXQgdXNpbmcgaHlwZXJ2aXNvciBtb2RlIGluIGhvc3RcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDA1OjU3OjQ0Ljc2NjU2OTQ5NFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MDkyMzY5MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBhbmQgQ29kZSBDaGFuZ2VzKipcblxuT2theSwgc28gSSBzZWUgdGhpcyBwYXRjaCBpcyB3b3JraW5nIHdpdGggUG93ZXJQQywgZ2l2ZW4gdGhlIGBLVk1fQk9PSzNTXzY0X1BSYCBjb25maWd1cmF0aW9uLiBUaGF0J3MgZ29vZCB0byBjb25maXJtLiBOb3csIGxldCdzIHNlZSBhYm91dCB0aGVzZSBgS1ZNX1NNTWAgYW5kIGBLVk1fSFlQRVJWYCBzZXR0aW5ncy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBwYXRjaCBoYXMgYW55IGRlcGVuZGVuY2llcyBvbiB0aG9zZSBvciBpZiB0aGV5IGFyZSByZWxldmFudCBpbiBhbnkgd2F5LlxuXG5UaGUgY29kZSBtb2RpZmljYXRpb25zIGFyZSBmb2N1c2luZyBvbiBgc3ZtX2VudGVyX3NtbWAgYW5kIGBzdm1fbGVhdmVfc21tYCwgd2hpY2ggSSBpbW1lZGlhdGVseSByZWNvZ25pemUgYXMgeDg2LXNwZWNpZmljLCBwYXJ0aWN1bGFybHkgdGhlIFNlY3VyZSBWaXJ0dWFsIE1hY2hpbmUgKFNWTSkgaW1wbGVtZW50YXRpb24uIFRob3NlIGZ1bmN0aW9ucyBhcmUgcmlnaHQgd2hlcmUgSSdkIGV4cGVjdCB0aGVtIHRvIGJlLCBpbnNpZGUgYGFyY2gveDg2L2t2bS9zdm0vc3ZtLmNgLlxuXG5UaGUga2V5IHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhlc2UgY2hhbmdlcyBhcmUgZ3VhcmRlZCBieSBgQ09ORklHX0tWTV9TTU1gLiBJZiB0aGV5IGFyZSwgaXQgd2lsbCBjb25zdHJhaW4gdGhlIGZlYXR1cmVzLCB3aGlsZSBpZiBub3QsIHRoZSBmZWF0dXJlcyB3aWxsIGJlIGVuYWJsZWQgZm9yIHRoZSBLVk0gYnVpbGQuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBjb25kaXRpb25hbCBjb21waWxhdGlvbiB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgaW50ZW5kZWQgdXNlIG9mIHRoZXNlIG1vZGlmaWNhdGlvbnMuIEknbGwgY2hlY2sgdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIGxpa2VseSB0aGUgS2NvbmZpZyBmaWxlcyB0byBkZXRlcm1pbmUgdGhlIGRlcGVuZGVuY3kuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk3ODMsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDU6NTc6NDguNjc1ODA4NjA0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5NDQxNTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN2bV9lbnRlcl9zbW1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL3N2bS9zdm0uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTQ5NzE9c3RhdGljIGludCBzdm1fc21pX2FsbG93ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGZvcl9pbmplY3Rpb24pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTQ5ODYtXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo0OTg3OnN0YXRpYyBpbnQgc3ZtX2VudGVyX3NtbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuaW9uIGt2bV9zbXJhbSAqc21yYW0pXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy00OTg4LXtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9NTAzMz1zdGF0aWMgaW50IHN2bV9sZWF2ZV9zbW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBjb25zdCB1bmlvbiBrdm1fc21yYW0gKnNtcmFtKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01MDY1LVxcdCAqIFJlc3RvcmUgTDEgaG9zdCBzdGF0ZSBmcm9tIEwxIEhTQVZFIGFyZWEgYXMgVk1DQjAxIHdhc1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6NTA2NjpcXHQgKiB1c2VkIGR1cmluZyBTTU0gKHNlZSBzdm1fZW50ZXJfc21tKCkpXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01MDY3LVxcdCAqL1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz01MzAyPXN0cnVjdCBrdm1feDg2X29wcyBzdm1feDg2X29wcyBfX2luaXRkYXRhID0ge1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01NDEyLVxcdC5zbWlfYWxsb3dlZCA9IHN2bV9zbWlfYWxsb3dlZCxcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjU0MTM6XFx0LmVudGVyX3NtbSA9IHN2bV9lbnRlcl9zbW0sXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01NDE0LVxcdC5sZWF2ZV9zbW0gPSBzdm1fbGVhdmVfc21tLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwNTo1Nzo0OC43NjUyNTQ1MDJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjMzMDE2OTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGNyYWZ0ZWQgd2l0aCB0aGUgdW5kZXJzdGFuZGluZyB0aGF0IEknbSBkaXNjdXNzaW5nIHRoaXMgd2l0aCBhIGZlbGxvdyBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBLVk0sIFNNTSwgYW5kIFBvdGVudGlhbCBIeXBlci1WIEludGVyYWN0aW9ucyoqXG5cblJpZ2h0LCBzbyBpdCBhcHBlYXJzIHdlJ3JlIGFsd2F5cyBkZWFsaW5nIHdpdGggYSBjb21waWxlZCBlbnZpcm9ubWVudCwgd2hpY2ggbWFrZXMgdGhpbmdzIGEgYml0IGNsZWFuZXIsIGJ1dCBTTU0gZnVuY3Rpb25hbGl0eSBhYnNvbHV0ZWx5IHJlcXVpcmVzIGBLVk1fU01NYC4gSSdtIGltbWVkaWF0ZWx5IHRoaW5raW5nLCBcIk9rYXksIHRoYXQncyBleHBlY3RlZC4gV2hlcmUgbWlnaHQgdGhpcyBiZSBpbnRlcmFjdGluZyB3aXRoIG90aGVyIHZpcnR1YWxpemF0aW9uIGxheWVycz9cIlxuXG5UaGUgbmV4dCBsb2dpY2FsIHN0ZXAsIGF0IGxlYXN0IGluIG15IHRob3VnaHQgcHJvY2VzcywgaXMgdG8gZGlnIGludG8gYENPTkZJR19LVk1fSFlQRVJWYC4gSSB3YW50IHRvIHNlZSBpZiBgX19uZXN0ZWRfdm14X3ZtZXhpdGAgaXMgZGVmaW5lZCwgb3IgdXNlZCBpbiByZWxhdGlvbiB0byB0aGF0IG9wdGlvbiwgd2hpY2ggY291bGQgc3VnZ2VzdCBkZWVwZXIgaW50ZWdyYXRpb24gd2l0aCBIeXBlci1WLiBUaGlzIGlzIGFsbCBhYm91dCBsb29raW5nIGZvciBwb3RlbnRpYWwgaG9va3MgYW5kIGNvbnRyb2wgcGF0aHMsIGVzcGVjaWFsbHkgYXJvdW5kIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBzY2VuYXJpb3Mgd2hlcmUgSHlwZXItViBtaWdodCBoYXZlIGl0cyBvd24gU01NIGhhbmRsaW5nIG9yIGludGVyYWN0IHdpdGggS1ZNJ3MuIElmIHRoZXJlJ3Mgb3ZlcmxhcCBpbiB0aG9zZSBhcmVhcywgSSdsbCBuZWVkIHRvIGlkZW50aWZ5IGhvdyB0aGV5IG1hbmFnZSB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDYzNywiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDA1OjU3OjUyLjM5ODI3NTAxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDE0MTY3MzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0tWTV9IWVBFUlZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTIzND1zdGF0aWMgaW5saW5lIHZvaWQgbmVzdGVkX3JlbGVhc2VfZXZtY3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMjM1LXtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjIzNjojaWZkZWYgQ09ORklHX0tWTV9IWVBFUlZcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTIzNy1cXHRzdHJ1Y3Qga3ZtX3ZjcHVfaHYgKmh2X3ZjcHUgPSB0b19odl92Y3B1KHZjcHUpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz0yNTI9c3RhdGljIGJvb2wgbmVzdGVkX2V2bWNzX2hhbmRsZV92bWNsZWFyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3Qgdm1wdHIpXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0yNTMte1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6MjU0OiNpZmRlZiBDT05GSUdfS1ZNX0hZUEVSVlxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMjU1LVxcdHN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz0xNzQ3PXN0YXRpYyB2b2lkIGNvcHlfZW5saWdodGVuZWRfdG9fdm1jczEyKHN0cnVjdCB2Y3B1X3ZteCAqdm14LCB1MzIgaHZfY2xlYW5fZmllbGRzKVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMTc0OC17XFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzoxNzQ5OiNpZmRlZiBDT05GSUdfS1ZNX0hZUEVSVlxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMTc1MC1cXHRzdHJ1Y3Qgdm1jczEyICp2bWNzMTIgPSB2bXgtXFx1MDAzZW5lc3RlZC5jYWNoZWRfdm1jczEyO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0xOTg5LVxcdHJldHVybjtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjE5OTA6I2Vsc2UgLyogQ09ORklHX0tWTV9IWVBFUlYgKi9cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTE5OTEtXFx0S1ZNX0JVR19PTigxLCB2bXgtXFx1MDAzZXZjcHUua3ZtKTtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjE5OTI6I2VuZGlmIC8qIENPTkZJR19LVk1fSFlQRVJWICovXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0xOTkzLX1cXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9MTk5NT1zdGF0aWMgdm9pZCBjb3B5X3ZtY3MxMl90b19lbmxpZ2h0ZW5lZChzdHJ1Y3QgdmNwdV92bXggKnZteClcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTE5OTYte1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6MTk5NzojaWZkZWYgQ09ORklHX0tWTV9IWVBFUlZcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTE5OTgtXFx0c3RydWN0IHZtY3MxMiAqdm1jczEyID0gdm14LVxcdTAwM2VuZXN0ZWQuY2FjaGVkX3ZtY3MxMjtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMjE2Ny1cXHRyZXR1cm47XFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzoyMTY4OiNlbHNlIC8qIENPTkZJR19LVk1fSFlQRVJWICovXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0yMTY5LVxcdEtWTV9CVUdfT04oMSwgdm14LVxcdTAwM2V2Y3B1Lmt2bSk7XFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzoyMTcwOiNlbmRpZiAvKiBDT05GSUdfS1ZNX0hZUEVSViAqL1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMjE3MS19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTIxNzc9c3RhdGljIGVudW0gbmVzdGVkX2V2bXB0cmxkX3N0YXR1cyBuZXN0ZWRfdm14X2hhbmRsZV9lbmxpZ2h0ZW5lZF92bXB0cmxkKFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0yMTc5LXtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjIxODA6I2lmZGVmIENPTkZJR19LVk1fSFlQRVJWXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0yMTgxLVxcdHN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz0zMTIwPXN0YXRpYyBpbnQgbmVzdGVkX3ZteF9jaGVja19jb250cm9scyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTMxMjctXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzozMTI4OiNpZmRlZiBDT05GSUdfS1ZNX0hZUEVSVlxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzEyOS1cXHRpZiAoZ3Vlc3RfY3B1X2NhcF9oYXNfZXZtY3ModmNwdSkpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTMzMDQ9c3RhdGljIGludCBuZXN0ZWRfdm14X2NoZWNrX2d1ZXN0X3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzQwNC1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjM0MDU6I2lmZGVmIENPTkZJR19LVk1fSFlQRVJWXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zNDA2LXN0YXRpYyBib29sIG5lc3RlZF9nZXRfZXZtY3NfcGFnZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTM1MjM9c3RhdGljIGJvb2wgdm14X2dldF9uZXN0ZWRfc3RhdGVfcGFnZXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzUyNC17XFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzozNTI1OiNpZmRlZiBDT05GSUdfS1ZNX0hZUEVSVlxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzUyNi1cXHQvKlxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz01MDU0PXZvaWQgX19uZXN0ZWRfdm14X3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiB2bV9leGl0X3JlYXNvbixcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTA2OC1cXHRpZiAoa3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9HRVRfTkVTVEVEX1NUQVRFX1BBR0VTLCB2Y3B1KSkge1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NTA2OTojaWZkZWYgQ09ORklHX0tWTV9IWVBFUlZcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTUwNzAtXFx0XFx0LypcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NjQ2MT1zdGF0aWMgYm9vbCBuZXN0ZWRfdm14X2wwX3dhbnRzX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02NTIzLVxcdFxcdHJldHVybiB0cnVlO1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NjUyNDojaWZkZWYgQ09ORklHX0tWTV9IWVBFUlZcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTY1MjUtXFx0Y2FzZSBFWElUX1JFQVNPTl9WTUNBTEw6XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTY4ODk9c3RhdGljIGludCB2bXhfc2V0X25lc3RlZF9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTY5ODUtXFx0XFx0c2V0X2N1cnJlbnRfdm1wdHIodm14LCBrdm1fc3RhdGUtXFx1MDAzZWhkci52bXgudm1jczEyX3BhKTtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjY5ODY6I2lmZGVmIENPTkZJR19LVk1fSFlQRVJWXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02OTg3LVxcdH0gZWxzZSBpZiAoa3ZtX3N0YXRlLVxcdTAwM2VmbGFncyBcXHUwMDI2IEtWTV9TVEFURV9ORVNURURfRVZNQ1MpIHtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NzQ3NT1zdHJ1Y3Qga3ZtX3g4Nl9uZXN0ZWRfb3BzIHZteF9uZXN0ZWRfb3BzIF9faW5pdGRhdGEgPSB7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTc0ODUtXFx0LndyaXRlX2xvZ19kaXJ0eSA9IG5lc3RlZF92bXhfd3JpdGVfcG1sX2J1ZmZlcixcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjc0ODY6I2lmZGVmIENPTkZJR19LVk1fSFlQRVJWXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy03NDg3LVxcdC5lbmFibGVfZXZtY3MgPSBuZXN0ZWRfZW5hYmxlX2V2bWNzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwNTo1Nzo1Mi45Mzk3MDA1MTRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzI3MTc2NTg2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEltcGxpY2F0aW9ucyBvZiB0aGUgS1ZNIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBtYWtpbmcgYSBzaWduaWZpY2FudCBjaGFuZ2U6IGl0J3MgZm9yY2luZyBhIGBLVk1fUkVRX0dFVF9ORVNURURfU1RBVEVfUEFHRVNgIGNoZWNrIHdpdGhpbiBgX19uZXN0ZWRfdm14X3ZtZXhpdGAgcmVnYXJkbGVzcy4gVGhlIGludGVyZXN0aW5nIHBhcnQgaXMgdGhhdCB0aGUgY29uZGl0aW9uYWwgYCNpZmRlZiBDT05GSUdfS1ZNX0hZUEVSVmAgaXMgKmluc2lkZSogdGhlIGBrdm1fY2hlY2tfcmVxdWVzdGAgYmxvY2suIFNvLCB3aGlsZSBgQ09ORklHX0tWTV9IWVBFUlZgIGlzbid0IHN0cmljdGx5IG5lY2Vzc2FyeSB0byB0cmlnZ2VyIHRoZSBjaGFuZ2UgaW4gYF9fbmVzdGVkX3ZteF92bWV4aXRgIGl0c2VsZiAoc2luY2Ugd2UncmUgbWFraW5nIHRoZSBjaGVjayB1bmNvbmRpdGlvbmFsKSwgd2UgYWJzb2x1dGVseSAqbXVzdCogdGVzdCB0aGUgbmVzdGVkIFZNWCBhbmQgU1ZNIGZ1bmN0aW9uYWxpdHkgdGhvcm91Z2hseS4gV2UgbmVlZCB0byBlbnN1cmUgbm90aGluZyBicmVha3MuXG5cblRvIHRoYXQgZW5kLCBJJ3ZlIGNvbXBpbGVkIGEgbGlzdCBvZiBmdW5jdGlvbnMgdGhhdCB3YXJyYW50IGNhcmVmdWwgc2NydXRpbnk6XG5cbiogICBgbmVzdGVkX3N2bV9jb3B5X3ZtY2IxMl90b19jYWNoZWAgKGNyaXRpY2FsIGZvciBTVk0gc3RhdGUgbWFuYWdlbWVudCB3aXRoaW4gYGVudGVyX3N2bV9ndWVzdF9tb2RlYClcbiogICBgbmVzdGVkX3N2bV92bWV4aXRfdXBkYXRlX3ZtY2IxMmAgKGVzc2VudGlhbCBmb3IgU1ZNIGV4aXQgaGFuZGxpbmcsIGNhbGxlZCBieSBgbmVzdGVkX3N2bV92bWV4aXRgKVxuKiAgIGB2bWxvYWRfdm1zYXZlX2ludGVyY2VwdGlvbmAgKGludGVyY2VwdGlvbiBvZiBWTUxPQUQvVk1TQVZFIG9wZXJhdGlvbnMsIGludm9sdmVkIGluIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBhbmQgY2FsbGVkIGJ5IGBzdm1faW52b2tlX2V4aXRfaGFuZGxlcmApXG4qICAgYHN2bV9lbnRlcl9zbW1gIGFuZCBgc3ZtX2xlYXZlX3NtbWAgKFNNTSB0cmFuc2l0aW9uIGhhbmRsZXJzIGZvciBTVk0sIGNhbGxlZCB2aWEgYGt2bV9zbW1fdHJhbnNpdGlvbmApXG4qICAgYG5lc3RlZF92bXhfcHJlcGFyZV9tc3JfYml0bWFwYCAoc2V0cyB1cCBNU1IgYml0bWFwcywgY3J1Y2lhbCBmb3IgVk1YKVxuKiAgIGBfX25lc3RlZF92bXhfdm1leGl0YCAodGhlIGZvY2FsIHBvaW50IG9mIHRoaXMgcGF0Y2gsIGNhbGxlZCBieSBgbmVzdGVkX3ZteF92bWV4aXRgIGFuZCBgbmVzdGVkX3ZteF9yZWZsZWN0X3ZtZXhpdGApXG4qICAgYGt2bXBwY19wYXRjaF9kY2J6YCAobGlrZWx5IHVucmVsYXRlZCB0byB0aGUgY29yZSBjaGFuZ2UsIGJ1dCBpbmNsdWRlZCBmb3IgY29tcGxldGVuZXNzLCBjYWxsZWQgYnkgYGt2bXBwY19oYW5kbGVfcGFnZWZhdWx0YClcblxuTXkgYXBwcm9hY2ggaXMgdG8gcHJpb3JpdGl6ZSBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIFRoYXQgaGVscHMgZ2l2ZSB1cyB0aGUgbW9zdCBpbnNpZ2h0IGludG8gaG93IGVhY2ggZnVuY3Rpb24gaXMgdXNlZCwgYW5kIGhvdyBjaGFuZ2VzIG1heSBiZSBleHBvc2VkIHRvIHRoZSBjYWxsZXIuIFNvLCBJIHdpbGwgdHJhY2UgdGhlIGNhbGxlcnMgb2YgdGhlIGFib3ZlIHN0YXRpYyBmdW5jdGlvbnMgdG8gZW5zdXJlIGNvbXBsZXRlIGNvdmVyYWdlLiBUaGF0J3MgdGhlIGJlc3Qgd2F5IHRvIGRldGVybWluZSB0aGUgZnVsbCBpbXBhY3Qgb2YgdGhlIHBhdGNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzA0OCwiT3V0cHV0VG9rZW5zIjo0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwNTo1ODowMC4yMTE0Njk5NjlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyODk0OTUzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXN0ZWRfc3ZtX2NvcHlfdm1jYjEyX3RvX2NhY2hlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYz0xMDMzPWludCBlbnRlcl9zdm1fZ3Vlc3RfbW9kZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2bWNiMTJfZ3BhLCBib29sIGZyb21fdm1ydW4pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTEwODUtXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzoxMDg2OnN0YXRpYyBpbnQgbmVzdGVkX3N2bV9jb3B5X3ZtY2IxMl90b19jYWNoZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2bWNiMTJfZ3BhKVxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtMTA4Ny17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jPTExMTM9aW50IG5lc3RlZF9zdm1fdm1ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0xMTQ1LVxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6MTE0NjpcXHRyZXQgPSBuZXN0ZWRfc3ZtX2NvcHlfdm1jYjEyX3RvX2NhY2hlKHZjcHUsIHZtY2IxMl9ncGEpO1xcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtMTE0Ny1cXHRpZiAocmV0ID09IC1FRkFVTFQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDA1OjU4OjAwLjM0MDQyNjI2NVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjQ1MzY0MDQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50OiBOYXZpZ2F0aW5nIHRoZSBWaXJ0dWFsaXphdGlvbiBMYW5kc2NhcGUqKlxuXG5SaWdodCwgc28gYG5lc3RlZF9zdm1fdm1ydW5gIGp1bXBzIG91dCBpbW1lZGlhdGVseSBhcyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZy4gVGhhdCdzIGEgc29saWQsIGxpa2VseSBsb3ctbGV2ZWwgZW50cnlwb2ludCBmb3IgYW55dGhpbmcgcmVsYXRlZCB0byBuZXN0ZWQgdmlydHVhbGl6YXRpb24gd2l0aGluIGEgVk13YXJlIGVudmlyb25tZW50LiBJdCBzdWdnZXN0cyB3ZSdyZSBkZWFsaW5nIHdpdGggZWl0aGVyIGVuYWJsaW5nIG9yIGludGVyYWN0aW5nIHdpdGggU2VjdXJlIFZpcnR1YWwgTWFjaGluZSAoU1ZNKSBjYXBhYmlsaXRpZXMgd2l0aGluIGFub3RoZXIgVk0sIG9yIGxpa2VseSB0aGUgbWVjaGFuaXNtIHRocm91Z2ggd2hpY2ggb25lIFZNIGludGVyYWN0cyB3aXRoIGFub3RoZXIncyBuZXN0ZWQgdmlydHVhbGl6YXRpb24gZW52aXJvbm1lbnQuIENvbnNpZGVyaW5nIG15IGV4cGVyaWVuY2Ugd2l0aCB2aXJ0dWFsaXphdGlvbiBrZXJuZWwgbW9kdWxlcyBhbmQgc3lzdGVtLWxldmVsIGludGVyYWN0aW9ucywgdGhpcyBwcm9iYWJseSBoYW5kbGVzIHRoZSB0cmFuc2l0aW9uLCBtb2RlIHNldHRpbmcsIG9yIHJlc291cmNlIGFsbG9jYXRpb24gaW52b2x2ZWQgaW4gcnVubmluZyBhIHZpcnR1YWxpemVkIGd1ZXN0ICp3aXRoaW4qIGFub3RoZXIgdmlydHVhbGl6ZWQgZ3Vlc3QuIFRoaXMgY291bGQgYmUgcmVsZXZhbnQgZm9yIGV2ZXJ5dGhpbmcgZnJvbSB0ZXN0aW5nIGFuZCBkZXZlbG9wbWVudCB0byBwb3RlbnRpYWxseSBzZWN1cml0eS1mb2N1c2VkIGlzb2xhdGlvbiwgY29udGFpbmVyaXphdGlvbiwgb3IgZXZlbiBtYWxpY2lvdXMgcm9vdGtpdCBkZXRlY3Rpb24gdGVjaG5pcXVlcy4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGNoZWNrIGZvciBhbnkgaG9va3MsIGNhbGxiYWNrcywgb3Igc2hhcmVkIG1lbW9yeSBhY2Nlc3MgdGhpcyBmdW5jdGlvbiBtaWdodCBpbXBsZW1lbnQsIHRob3NlIHdvdWxkIGJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQzNjUsIk91dHB1dFRva2VucyI6NDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwNTo1ODowNC41ODU3OTM5NDZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1Nzk0NzUyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXN0ZWRfc3ZtX3ZtZXhpdF91cGRhdGVfdm1jYjEyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYz0xMjMzPXZvaWQgc3ZtX2NvcHlfdm1sb2Fkc2F2ZV9zdGF0ZShzdHJ1Y3Qgdm1jYiAqdG9fdm1jYiwgc3RydWN0IHZtY2IgKmZyb21fdm1jYilcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtMTI0OC1cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjEyNDk6c3RhdGljIGludCBuZXN0ZWRfc3ZtX3ZtZXhpdF91cGRhdGVfdm1jYjEyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTEyNTAte1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYz0xMzE3PXZvaWQgbmVzdGVkX3N2bV92bWV4aXQoc3RydWN0IHZjcHVfc3ZtICpzdm0pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTEzMjItXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzoxMzIzOlxcdGlmIChuZXN0ZWRfc3ZtX3ZtZXhpdF91cGRhdGVfdm1jYjEyKHZjcHUpKVxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtMTMyNC1cXHRcXHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfVFJJUExFX0ZBVUxULCB2Y3B1KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDU6NTg6MDUuMTQzNzQ3MjFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE5NzcwNTAwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQ6XG5cbioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIFZNIEV4aXQgRW50cnlwb2ludHMqKlxuXG5SaWdodCwgYG5lc3RlZF9zdm1fdm1leGl0YC4gVGhhdCBsb29rcyBsaWtlIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIGV4YW1pbmluZyB0aGUgd2hvbGUgbmVzdGVkIHZpcnR1YWxpemF0aW9uIHNpdHVhdGlvbi4gSXQgaW1tZWRpYXRlbHkgc3VnZ2VzdHMgYW4gZW50cnkgcG9pbnQgaW50byB0aGUgaGFuZGxpbmcgb2YgdmlydHVhbCBtYWNoaW5lIGV4aXRzIHdoZW4gcnVubmluZyB1bmRlciBuZXN0ZWQgU1ZNIChTZWN1cmUgVmlydHVhbCBNYWNoaW5lKSB2aXJ0dWFsaXphdGlvbi4gVGhpcyBuYW1lIGFsb25lIHBvaW50cyB0byB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IEkgbmVlZCB0byBkaWcgaW50by4gSXQncyBhIGNsZWFyIGluZGljYXRpb24gdGhhdCB0aGlzIGlzIHRoZSBob29rLCB0aGUgcGxhY2Ugd2hlcmUgdGhlIGh5cGVydmlzb3IgaW50ZXJjZXB0cyBldmVudHMgZnJvbSB0aGUgZ3Vlc3QgVk0uIFRoaXMgaXMgd2hlcmUgSSdsbCBwcm9iYWJseSBmaW5kIHRoZSBrZXkgbG9naWMgZm9yIG1hbmFnaW5nIGd1ZXN0LXRvLWhvc3QgdHJhbnNpdGlvbnMsIGVtdWxhdGlvbiBvZiBpbnN0cnVjdGlvbnMsIGFuZCBiYXNpY2FsbHkgZXZlcnl0aGluZyB0aGF0IG1ha2VzIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiB3b3JrLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgZW50cnkgcG9pbnQgZG9lcyBpbiB0aGUgb3ZlcmFsbCBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDk0MywiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDA1OjU4OjA4LjM0MTQ1NDc2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTY3NzA4NDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm1sb2FkX3Ztc2F2ZV9pbnRlcmNlcHRpb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL3N2bS9zdm0uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTIyMDg9c3RhdGljIGludCBpbnRyX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTIyMTMtXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzoyMjE0OnN0YXRpYyBpbnQgdm1sb2FkX3Ztc2F2ZV9pbnRlcmNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIHZtbG9hZClcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTIyMTUte1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz0yMjQ5PXN0YXRpYyBpbnQgdm1sb2FkX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0yMjUwLXtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjIyNTE6XFx0cmV0dXJuIHZtbG9hZF92bXNhdmVfaW50ZXJjZXB0aW9uKHZjcHUsIHRydWUpO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMjI1Mi19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTIyNTQ9c3RhdGljIGludCB2bXNhdmVfaW50ZXJjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTIyNTUte1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6MjI1NjpcXHRyZXR1cm4gdm1sb2FkX3Ztc2F2ZV9pbnRlcmNlcHRpb24odmNwdSwgZmFsc2UpO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMjI1Ny19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDA1OjU4OjA4LjQ1ODIzMTg2NloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTYwNDY2ODYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudDogTGV2ZXJhZ2luZyBFbnRyeXBvaW50cyBmb3IgVk0gTGlmZWN5Y2xlIE1hbmFnZW1lbnQqKlxuXG5SaWdodCwgbGV0J3Mgc2VlLi4uIGB2bWxvYWRfaW50ZXJjZXB0aW9uYCBhbmQgYHZtc2F2ZV9pbnRlcmNlcHRpb25gIGFyZSBkZWZpbml0ZWx5IHRoZSBrZXkgc3RhcnRpbmcgcG9pbnRzIGhlcmUuIFRoaW5raW5nIGFib3V0IHRoaXMgZnJvbSBhIGxpZmVjeWNsZSBwZXJzcGVjdGl2ZSwgdGhlc2UgYXJlIHRoZSBob29rcyBJIG5lZWQgdG8gZm9jdXMgb24gZm9yIGFueSBzaWduaWZpY2FudCBpbnRlcnZlbnRpb24gb3IgaW5zdHJ1bWVudGF0aW9uIHdpdGhpbiB0aGUgaHlwZXJ2aXNvcidzIFZNIG1hbmFnZW1lbnQgZmxvdy4gVGhleSdyZSB0aGUgb2J2aW91cyBjYW5kaWRhdGVzIGZvciBpbXBsZW1lbnRpbmcgYW55IGN1c3RvbSBsb2dpYyB0aWVkIHRvIFZNIHN0YXRlIHRyYW5zaXRpb25zLlxuXG5JJ20gaW1tZWRpYXRlbHkgY29uc2lkZXJpbmcgd2hhdCBJIGNhbiBpbnRlcmNlcHQgYW5kIGhvdyBJJ2xsIGhhbmRsZSB0aGUgYXJjaGl0ZWN0dXJhbCBjaGFsbGVuZ2VzLiBTcGVjaWZpY2FsbHksIHdoYXQncyBteSBwbGFuIHRvIG1haW50YWluIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIHNhdmUvcmVzdG9yZSBwcm9jZXNzPyBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgaG93IHRvIGluamVjdCBteSBvd24gY29kZSBhbmQgZGF0YSB3aXRob3V0IGltcGFjdGluZyB0aGUgcGVyZm9ybWFuY2Ugb2YgdGhlIFZNIG9yIGl0cyBndWVzdHMsIGFuZCB3aXRoIGNhcmVmdWwgYXR0ZW50aW9uIHRvIHRocmVhZCBzYWZldHksIG9mIGNvdXJzZS4gQW55IGludGVycnVwdGlvbiBpbiB0aGVzZSBmdW5jdGlvbnMgY2FuIGxlYWQgdG8gdW5wcmVkaWN0YWJsZSByZXN1bHRzIGluIHRoZSB2aXJ0dWFsIG1hY2hpbmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTU0MywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDA1OjU4OjExLjYxODcwMjMwN1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM3MjgxMzM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN2bV9lbnRlcl9zbW1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL3N2bS9zdm0uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTQ5NzE9c3RhdGljIGludCBzdm1fc21pX2FsbG93ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGZvcl9pbmplY3Rpb24pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTQ5ODYtXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo0OTg3OnN0YXRpYyBpbnQgc3ZtX2VudGVyX3NtbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuaW9uIGt2bV9zbXJhbSAqc21yYW0pXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy00OTg4LXtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9NTAzMz1zdGF0aWMgaW50IHN2bV9sZWF2ZV9zbW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBjb25zdCB1bmlvbiBrdm1fc21yYW0gKnNtcmFtKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01MDY1LVxcdCAqIFJlc3RvcmUgTDEgaG9zdCBzdGF0ZSBmcm9tIEwxIEhTQVZFIGFyZWEgYXMgVk1DQjAxIHdhc1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6NTA2NjpcXHQgKiB1c2VkIGR1cmluZyBTTU0gKHNlZSBzdm1fZW50ZXJfc21tKCkpXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01MDY3LVxcdCAqL1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz01MzAyPXN0cnVjdCBrdm1feDg2X29wcyBzdm1feDg2X29wcyBfX2luaXRkYXRhID0ge1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01NDEyLVxcdC5zbWlfYWxsb3dlZCA9IHN2bV9zbWlfYWxsb3dlZCxcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjU0MTM6XFx0LmVudGVyX3NtbSA9IHN2bV9lbnRlcl9zbW0sXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01NDE0LVxcdC5sZWF2ZV9zbW0gPSBzdm1fbGVhdmVfc21tLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwNTo1ODoxMS43NTU5OTA1MjNaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUzODkzMzY1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqVHJhY2luZyB0aGUgRXhlY3V0aW9uIFBhdGggb2YgYGVudGVyX3NtbWAgaW4gS1ZNKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoZSBLVk0gY29kZSBhbmQgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgZW50ZXJfc21tYCBpcyBiZWluZyBpbnZva2VkLiBSaWdodCwgdGhlIGZ1bmN0aW9uIG5hbWUgaXRzZWxmIHN1Z2dlc3RzIGVudHJ5IGludG8gU3lzdGVtIE1hbmFnZW1lbnQgTW9kZSAoU01NKSwgYW5kIHRoYXQncyBzb21ldGhpbmcgdGhhdCBhbHdheXMgcmVxdWlyZXMgY2FyZWZ1bCBjb25zaWRlcmF0aW9uIGluIGEgaHlwZXJ2aXNvciBjb250ZXh0LiBJIHJlbWVtYmVyIHRoYXQgdGhlc2UgdHlwZXMgb2YgYXJjaGl0ZWN0dXJhbCBpbnRlcmFjdGlvbnMgYXJlIG9mdGVuIG1hbmFnZWQgdGhyb3VnaCBga3ZtX3g4Nl9vcHNgLiBUaGF0J3MgdGhlIGxpa2VseSBlbnRyeSBwb2ludC4gTm93LCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGFjdHVhbCBjb250cm9sIGZsb3csIEknbSBnb2luZyB0byBxdWlja2x5IGdyZXAgb3IgdXNlIG15IElERSB0byBmaW5kIGFsbCB0aGUgY2FsbCBzaXRlcyBvZiBgZW50ZXJfc21tYCB3aXRoaW4gdGhlIGNvZGViYXNlLiBUaGUgZ29hbCBpcyB0byBzZWUgZXhhY3RseSB3aGVyZSBhbmQgaG93IHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkLCB3aGljaCB3aWxsIHRoZW4gaWxsdW1pbmF0ZSB0aGUgZXZlbnRzIHRoYXQgdHJpZ2dlciBTTU0gZW50cnkgZnJvbSB0aGUgaG9zdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHBhdGggdGhyb3VnaCB3aGljaCB0aGUgaG9zdCBlbnRlcnMgU01NIHZpYSBLVk0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MjY4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDU6NTg6MTUuMjk0OTI2OTczWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDEzNDUzODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZW50ZXJfc21tXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3NtbS5jPTEzNj12b2lkIHByb2Nlc3Nfc21pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zbW0uYy0xNDEtXFxuYXJjaC94ODYva3ZtL3NtbS5jOjE0MjpzdGF0aWMgdTMyIGVudGVyX3NtbV9nZXRfc2VnbWVudF9mbGFncyhzdHJ1Y3Qga3ZtX3NlZ21lbnQgKnNlZylcXG5hcmNoL3g4Ni9rdm0vc21tLmMtMTQzLXtcXG4tLVxcbmFyY2gveDg2L2t2bS9zbW0uYy0xNTUtXFxuYXJjaC94ODYva3ZtL3NtbS5jOjE1NjpzdGF0aWMgdm9pZCBlbnRlcl9zbW1fc2F2ZV9zZWdfMzIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbmFyY2gveDg2L2t2bS9zbW0uYy0xNTctXFx0XFx0XFx0XFx0ICBzdHJ1Y3Qga3ZtX3NtbV9zZWdfc3RhdGVfMzIgKnN0YXRlLFxcbi0tXFxuYXJjaC94ODYva3ZtL3NtbS5jLTE2NS1cXHRzdGF0ZS1cXHUwMDNlbGltaXQgPSBzZWcubGltaXQ7XFxuYXJjaC94ODYva3ZtL3NtbS5jOjE2NjpcXHRzdGF0ZS1cXHUwMDNlZmxhZ3MgPSBlbnRlcl9zbW1fZ2V0X3NlZ21lbnRfZmxhZ3MoXFx1MDAyNnNlZyk7XFxuYXJjaC94ODYva3ZtL3NtbS5jLTE2Ny19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc21tLmMtMTY5LSNpZmRlZiBDT05GSUdfWDg2XzY0XFxuYXJjaC94ODYva3ZtL3NtbS5jOjE3MDpzdGF0aWMgdm9pZCBlbnRlcl9zbW1fc2F2ZV9zZWdfNjQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbmFyY2gveDg2L2t2bS9zbW0uYy0xNzEtXFx0XFx0XFx0XFx0ICBzdHJ1Y3Qga3ZtX3NtbV9zZWdfc3RhdGVfNjQgKnN0YXRlLFxcbi0tXFxuYXJjaC94ODYva3ZtL3NtbS5jLTE3Ny1cXHRzdGF0ZS1cXHUwMDNlc2VsZWN0b3IgPSBzZWcuc2VsZWN0b3I7XFxuYXJjaC94ODYva3ZtL3NtbS5jOjE3ODpcXHRzdGF0ZS1cXHUwMDNlYXR0cmlidXRlcyA9IGVudGVyX3NtbV9nZXRfc2VnbWVudF9mbGFncyhcXHUwMDI2c2VnKSBcXHUwMDNlXFx1MDAzZSA4O1xcbmFyY2gveDg2L2t2bS9zbW0uYy0xNzktXFx0c3RhdGUtXFx1MDAzZWxpbWl0ID0gc2VnLmxpbWl0O1xcbi0tXFxuYXJjaC94ODYva3ZtL3NtbS5jLTE4My1cXG5hcmNoL3g4Ni9rdm0vc21tLmM6MTg0OnN0YXRpYyB2b2lkIGVudGVyX3NtbV9zYXZlX3N0YXRlXzMyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG5hcmNoL3g4Ni9rdm0vc21tLmMtMTg1LVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qga3ZtX3NtcmFtX3N0YXRlXzMyICpzbXJhbSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zbW0uYy0yMDAtXFxuYXJjaC94ODYva3ZtL3NtbS5jOjIwMTpcXHRlbnRlcl9zbW1fc2F2ZV9zZWdfMzIodmNwdSwgXFx1MDAyNnNtcmFtLVxcdTAwM2V0ciwgXFx1MDAyNnNtcmFtLVxcdTAwM2V0cl9zZWwsIFZDUFVfU1JFR19UUik7XFxuYXJjaC94ODYva3ZtL3NtbS5jOjIwMjpcXHRlbnRlcl9zbW1fc2F2ZV9zZWdfMzIodmNwdSwgXFx1MDAyNnNtcmFtLVxcdTAwM2VsZHRyLCBcXHUwMDI2c21yYW0tXFx1MDAzZWxkdHJfc2VsLCBWQ1BVX1NSRUdfTERUUik7XFxuYXJjaC94ODYva3ZtL3NtbS5jLTIwMy1cXG4tLVxcbmFyY2gveDg2L2t2bS9zbW0uYy0yMTEtXFxuYXJjaC94ODYva3ZtL3NtbS5jOjIxMjpcXHRlbnRlcl9zbW1fc2F2ZV9zZWdfMzIodmNwdSwgXFx1MDAyNnNtcmFtLVxcdTAwM2VlcywgXFx1MDAyNnNtcmFtLVxcdTAwM2Vlc19zZWwsIFZDUFVfU1JFR19FUyk7XFxuYXJjaC94ODYva3ZtL3NtbS5jOjIxMzpcXHRlbnRlcl9zbW1fc2F2ZV9zZWdfMzIodmNwdSwgXFx1MDAyNnNtcmFtLVxcdTAwM2VjcywgXFx1MDAyNnNtcmFtLVxcdTAwM2Vjc19zZWwsIFZDUFVfU1JFR19DUyk7XFxuYXJjaC94ODYva3ZtL3NtbS5jOjIxNDpcXHRlbnRlcl9zbW1fc2F2ZV9zZWdfMzIodmNwdSwgXFx1MDAyNnNtcmFtLVxcdTAwM2VzcywgXFx1MDAyNnNtcmFtLVxcdTAwM2Vzc19zZWwsIFZDUFVfU1JFR19TUyk7XFxuYXJjaC94ODYva3ZtL3NtbS5jLTIxNS1cXG5hcmNoL3g4Ni9rdm0vc21tLmM6MjE2OlxcdGVudGVyX3NtbV9zYXZlX3NlZ18zMih2Y3B1LCBcXHUwMDI2c21yYW0tXFx1MDAzZWRzLCBcXHUwMDI2c21yYW0tXFx1MDAzZWRzX3NlbCwgVkNQVV9TUkVHX0RTKTtcXG5hcmNoL3g4Ni9rdm0vc21tLmM6MjE3OlxcdGVudGVyX3NtbV9zYXZlX3NlZ18zMih2Y3B1LCBcXHUwMDI2c21yYW0tXFx1MDAzZWZzLCBcXHUwMDI2c21yYW0tXFx1MDAzZWZzX3NlbCwgVkNQVV9TUkVHX0ZTKTtcXG5hcmNoL3g4Ni9rdm0vc21tLmM6MjE4OlxcdGVudGVyX3NtbV9zYXZlX3NlZ18zMih2Y3B1LCBcXHUwMDI2c21yYW0tXFx1MDAzZWdzLCBcXHUwMDI2c21yYW0tXFx1MDAzZWdzX3NlbCwgVkNQVV9TUkVHX0dTKTtcXG5hcmNoL3g4Ni9rdm0vc21tLmMtMjE5LVxcbi0tXFxuYXJjaC94ODYva3ZtL3NtbS5jLTIyNy0jaWZkZWYgQ09ORklHX1g4Nl82NFxcbmFyY2gveDg2L2t2bS9zbW0uYzoyMjg6c3RhdGljIHZvaWQgZW50ZXJfc21tX3NhdmVfc3RhdGVfNjQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbmFyY2gveDg2L2t2bS9zbW0uYy0yMjktXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBrdm1fc21yYW1fc3RhdGVfNjQgKnNtcmFtKVxcbi0tXFxuYXJjaC94ODYva3ZtL3NtbS5jLTI1MS1cXG5hcmNoL3g4Ni9rdm0vc21tLmM6MjUyOlxcdGVudGVyX3NtbV9zYXZlX3NlZ182NCh2Y3B1LCBcXHUwMDI2c21yYW0tXFx1MDAzZXRyLCBWQ1BVX1NSRUdfVFIpO1xcbmFyY2gveDg2L2t2bS9zbW0uYy0yNTMtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc21tLmMtMjU3LVxcbmFyY2gveDg2L2t2bS9zbW0uYzoyNTg6XFx0ZW50ZXJfc21tX3NhdmVfc2VnXzY0KHZjcHUsIFxcdTAwMjZzbXJhbS1cXHUwMDNlbGR0ciwgVkNQVV9TUkVHX0xEVFIpO1xcbmFyY2gveDg2L2t2bS9zbW0uYy0yNTktXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc21tLmMtMjYzLVxcbmFyY2gveDg2L2t2bS9zbW0uYzoyNjQ6XFx0ZW50ZXJfc21tX3NhdmVfc2VnXzY0KHZjcHUsIFxcdTAwMjZzbXJhbS1cXHUwMDNlZXMsIFZDUFVfU1JFR19FUyk7XFxuYXJjaC94ODYva3ZtL3NtbS5jOjI2NTpcXHRlbnRlcl9zbW1fc2F2ZV9zZWdfNjQodmNwdSwgXFx1MDAyNnNtcmFtLVxcdTAwM2VjcywgVkNQVV9TUkVHX0NTKTtcXG5hcmNoL3g4Ni9rdm0vc21tLmM6MjY2OlxcdGVudGVyX3NtbV9zYXZlX3NlZ182NCh2Y3B1LCBcXHUwMDI2c21yYW0tXFx1MDAzZXNzLCBWQ1BVX1NSRUdfU1MpO1xcbmFyY2gveDg2L2t2bS9zbW0uYzoyNjc6XFx0ZW50ZXJfc21tX3NhdmVfc2VnXzY0KHZjcHUsIFxcdTAwMjZzbXJhbS1cXHUwMDNlZHMsIFZDUFVfU1JFR19EUyk7XFxuYXJjaC94ODYva3ZtL3NtbS5jOjI2ODpcXHRlbnRlcl9zbW1fc2F2ZV9zZWdfNjQodmNwdSwgXFx1MDAyNnNtcmFtLVxcdTAwM2VmcywgVkNQVV9TUkVHX0ZTKTtcXG5hcmNoL3g4Ni9rdm0vc21tLmM6MjY5OlxcdGVudGVyX3NtbV9zYXZlX3NlZ182NCh2Y3B1LCBcXHUwMDI2c21yYW0tXFx1MDAzZWdzLCBWQ1BVX1NSRUdfR1MpO1xcbmFyY2gveDg2L2t2bS9zbW0uYy0yNzAtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc21tLmMtMjc4LVxcbmFyY2gveDg2L2t2bS9zbW0uYzoyNzk6dm9pZCBlbnRlcl9zbW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS9zbW0uYy0yODAte1xcbi0tXFxuYXJjaC94ODYva3ZtL3NtbS5jLTI5MS1cXHRpZiAoZ3Vlc3RfY3B1X2NhcF9oYXModmNwdSwgWDg2X0ZFQVRVUkVfTE0pKVxcbmFyY2gveDg2L2t2bS9zbW0uYzoyOTI6XFx0XFx0ZW50ZXJfc21tX3NhdmVfc3RhdGVfNjQodmNwdSwgXFx1MDAyNnNtcmFtLnNtcmFtNjQpO1xcbmFyY2gveDg2L2t2bS9zbW0uYy0yOTMtXFx0ZWxzZVxcbmFyY2gveDg2L2t2bS9zbW0uYy0yOTQtI2VuZGlmXFxuYXJjaC94ODYva3ZtL3NtbS5jOjI5NTpcXHRcXHRlbnRlcl9zbW1fc2F2ZV9zdGF0ZV8zMih2Y3B1LCBcXHUwMDI2c21yYW0uc21yYW0zMik7XFxuYXJjaC94ODYva3ZtL3NtbS5jLTI5Ni1cXG5hcmNoL3g4Ni9rdm0vc21tLmMtMjk3LVxcdC8qXFxuYXJjaC94ODYva3ZtL3NtbS5jOjI5ODpcXHQgKiBHaXZlIGVudGVyX3NtbSgpIGEgY2hhbmNlIHRvIG1ha2UgSVNBLXNwZWNpZmljIGNoYW5nZXMgdG8gdGhlIHZDUFVcXG5hcmNoL3g4Ni9rdm0vc21tLmMtMjk5LVxcdCAqIHN0YXRlIChlLmcuIGxlYXZlIGd1ZXN0IG1vZGUpIGFmdGVyIHdlJ3ZlIHNhdmVkIHRoZSBzdGF0ZSBpbnRvIHRoZVxcbi0tXFxuYXJjaC94ODYva3ZtL3NtbS5jLTMwNC1cXHQgKi9cXG5hcmNoL3g4Ni9rdm0vc21tLmM6MzA1OlxcdGlmIChrdm1feDg2X2NhbGwoZW50ZXJfc21tKSh2Y3B1LCBcXHUwMDI2c21yYW0pKVxcbmFyY2gveDg2L2t2bS9zbW0uYy0zMDYtXFx0XFx0Z290byBlcnJvcjtcXG4tLVxcbmFyY2gveDg2L2t2bS9zbW0uaD0xNTc9dm9pZCBrdm1fc21tX2NoYW5nZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGluX3NtbSk7XFxuYXJjaC94ODYva3ZtL3NtbS5oOjE1ODp2b2lkIGVudGVyX3NtbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbmFyY2gveDg2L2t2bS9zbW0uaC0xNTktaW50IGVtdWxhdG9yX2xlYXZlX3NtbShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTQ5NzE9c3RhdGljIGludCBzdm1fc21pX2FsbG93ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGZvcl9pbmplY3Rpb24pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTQ5ODYtXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo0OTg3OnN0YXRpYyBpbnQgc3ZtX2VudGVyX3NtbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuaW9uIGt2bV9zbXJhbSAqc21yYW0pXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy00OTg4LXtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9NTAzMz1zdGF0aWMgaW50IHN2bV9sZWF2ZV9zbW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBjb25zdCB1bmlvbiBrdm1fc21yYW0gKnNtcmFtKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01MDY1LVxcdCAqIFJlc3RvcmUgTDEgaG9zdCBzdGF0ZSBmcm9tIEwxIEhTQVZFIGFyZWEgYXMgVk1DQjAxIHdhc1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6NTA2NjpcXHQgKiB1c2VkIGR1cmluZyBTTU0gKHNlZSBzdm1fZW50ZXJfc21tKCkpXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01MDY3LVxcdCAqL1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz01MzAyPXN0cnVjdCBrdm1feDg2X29wcyBzdm1feDg2X29wcyBfX2luaXRkYXRhID0ge1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01NDEyLVxcdC5zbWlfYWxsb3dlZCA9IHN2bV9zbWlfYWxsb3dlZCxcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjU0MTM6XFx0LmVudGVyX3NtbSA9IHN2bV9lbnRlcl9zbW0sXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01NDE0LVxcdC5sZWF2ZV9zbW0gPSBzdm1fbGVhdmVfc21tLFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9MjE5PXN0YXRpYyBpbnQgdnRfc21pX2FsbG93ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGZvcl9pbmplY3Rpb24pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0yMjYtXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MjI3OnN0YXRpYyBpbnQgdnRfZW50ZXJfc21tKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5pb24ga3ZtX3NtcmFtICpzbXJhbSlcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0yMjgte1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMjMxLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjIzMjpcXHRyZXR1cm4gdm14X2VudGVyX3NtbSh2Y3B1LCBzbXJhbSk7XFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMjMzLX1cXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTg4MD1zdHJ1Y3Qga3ZtX3g4Nl9vcHMgdnRfeDg2X29wcyBfX2luaXRkYXRhID0ge1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMTAwOS1cXHQuc21pX2FsbG93ZWQgPSB2dF9vcChzbWlfYWxsb3dlZCksXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MTAxMDpcXHQuZW50ZXJfc21tID0gdnRfb3AoZW50ZXJfc21tKSxcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xMDExLVxcdC5sZWF2ZV9zbW0gPSB2dF9vcChsZWF2ZV9zbW0pLFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYz04NDA4PWludCB2bXhfc21pX2FsbG93ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGZvcl9pbmplY3Rpb24pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTg0MTUtXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYzo4NDE2OmludCB2bXhfZW50ZXJfc21tKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5pb24ga3ZtX3NtcmFtICpzbXJhbSlcXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTg0MTcte1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmg9MzY9aW50IHZteF9zbWlfYWxsb3dlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgZm9yX2luamVjdGlvbik7XFxuYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmg6Mzc6aW50IHZteF9lbnRlcl9zbW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bmlvbiBrdm1fc21yYW0gKnNtcmFtKTtcXG5hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaC0zOC1pbnQgdm14X2xlYXZlX3NtbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGNvbnN0IHVuaW9uIGt2bV9zbXJhbSAqc21yYW0pO1xcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTc1NjA9c3RhdGljIGludCBrdm1fY2hlY2tfYW5kX2luamVjdF9ldmVudHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTc2OTUtXFx0XFx0XFx0Kyt2Y3B1LVxcdTAwM2VhcmNoLnNtaV9jb3VudDtcXG5hcmNoL3g4Ni9rdm0veDg2LmM6NzY5NjpcXHRcXHRcXHRlbnRlcl9zbW0odmNwdSk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTc2OTctXFx0XFx0XFx0Y2FuX2luamVjdCA9IGZhbHNlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwNTo1ODoxNS40MzYyNzc2MjlaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA2NTYwMDcxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipTTU0gRm9jdXMgUG9pbnRzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRvIGVmZmVjdGl2ZWx5IHRyYWNlIHRoZSBTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIChTTU0pIGVudHJ5IGFuZCBleGl0IHBvaW50cy4gIGBrdm1fY2hlY2tfYW5kX2luamVjdF9ldmVudHNgIGNhbGxzIGBlbnRlcl9zbW1gLCBhbmQgdGhlIGVtdWxhdG9yIGl0c2VsZiB1c2VzIGBlbXVsYXRvcl9sZWF2ZV9zbW1gLiBUaGF0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2ggdG8gdXNlIGFzIGEgc3RhcnRpbmcgcG9pbnQuXG5cbkJ1dCBob2xkIG9uLCB0aGUgcGF0Y2ggbW9kaWZpZXMgYHN2bV9lbnRlcl9zbW1gIGFuZCBgc3ZtX2xlYXZlX3NtbWAuICBUaGF0J3MgcG90ZW50aWFsbHkgZXZlbiBiZXR0ZXIsIGFzc3VtaW5nIHRoZXkncmUgbm90IGlubGluZWQsIHNpbmNlIHRoZXkncmUgc3BlY2lmaWNhbGx5IHRpZWQgdG8gdGhlIEFNRCBTZWN1cmUgVmlydHVhbCBNYWNoaW5lIChTVk0pIGltcGxlbWVudGF0aW9uLiBUaGUgcXVlc3Rpb24gaXMsIGFyZSB0aGV5IHN0YXRpYyBhbmQgaW5saW5lZD8gTGV0IG1lIHRoaW5rLi4uIHdhaXQsIEkgcmVtZW1iZXIgbm93ISBUaGV5J3JlIGFzc2lnbmVkIHRvIGZ1bmN0aW9uIHBvaW50ZXJzIHdpdGhpbiBgc3ZtX3g4Nl9vcHNgLiBTaW5jZSB0aGV5J3JlIGFzc2lnbmVkIHRvIGZ1bmN0aW9uIHBvaW50ZXJzLCB0aGV5IGRlZmluaXRlbHkgKmFyZW4ndCogaW5saW5lZC4gUGVyZmVjdC5cblxuVGhlcmVmb3JlLCBgc3ZtX2VudGVyX3NtbWAgYW5kIGBzdm1fbGVhdmVfc21tYCBhcmUgdGhlIGlkZWFsIGZvY3VzIHN5bWJvbHMgZm9yIHRoaXMgYW5hbHlzaXMuXG5cbk5vdywgbGV0J3MgcGl2b3QgYW5kIHRha2UgYSBsb29rIGF0IGBuZXN0ZWRfdm14X3ByZXBhcmVfbXNyX2JpdG1hcGAgYW5kIHNlZSB3aGF0IGVsc2Ugd2UgY2FuIHVuY292ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMTg5LCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDA1OjU4OjIwLjUwMTg4MTE3N1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIwNjI3NTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5lc3RlZF92bXhfcHJlcGFyZV9tc3JfYml0bWFwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz02OTQ9c3RhdGljIHZvaWQgbmVzdGVkX3ZteF9tZXJnZV9wbXVfbXNyX2JpdG1hcHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy03MjUtICovXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo3MjY6c3RhdGljIGlubGluZSBib29sIG5lc3RlZF92bXhfcHJlcGFyZV9tc3JfYml0bWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTcyNy1cXHRcXHRcXHRcXHRcXHRcXHQgc3RydWN0IHZtY3MxMiAqdm1jczEyKVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz0zNDM1PXN0YXRpYyBib29sIG5lc3RlZF9nZXRfdm1jczEyX3BhZ2VzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzUxNC1cXHR9XFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzozNTE1OlxcdGlmIChuZXN0ZWRfdm14X3ByZXBhcmVfbXNyX2JpdG1hcCh2Y3B1LCB2bWNzMTIpKVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzUxNi1cXHRcXHRleGVjX2NvbnRyb2xzX3NldGJpdCh2bXgsIENQVV9CQVNFRF9VU0VfTVNSX0JJVE1BUFMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwNTo1ODoyMC42MjI1MTQyNTNaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUyMDkzNzg3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydCBpbiB0aGlzIGFyZWE6XG5cbioqSW5saW5pbmcgYW5kIFZNQ1MxMiBQYWdlczogQSBRdWljayBDaGVjayoqXG5cblJpZ2h0LCBsZXQncyBzZWUsIGl0J3MgZGVjbGFyZWQgYHN0YXRpYyBpbmxpbmVgLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgZnVuY3Rpb24sIHdoYXRldmVyIGl0IGlzLCBpcyBnb2luZyB0byBiZSBpbmxpbmVkIGRpcmVjdGx5IGludG8gYG5lc3RlZF9nZXRfdm1jczEyX3BhZ2VzYC4gVGhhdCdzIHRoZSBmaXJzdCB0aGluZyBJIG5vdGUuIEl0IG1ha2VzIHNlbnNlLCBnaXZlbiB0aGUgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyBvZiBjYWxsaW5nIGEgZnVuY3Rpb24sIGVzcGVjaWFsbHkgaW4gYSBjcml0aWNhbCBwYXRoLiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoYXQgYG5lc3RlZF9nZXRfdm1jczEyX3BhZ2VzYCAqYWN0dWFsbHkqIGRvZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHdoZXJlIHRoaXMgaW5saW5pbmcgaXMgaGFwcGVuaW5nLiBUaW1lIHRvIHZlcmlmeSBpdHMgb3BlcmF0aW9uLiBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBhbmQgZW5zdXJlIHRoZSBpbmxpbmluZyBvcHRpbWl6YXRpb24gaXMgaW5kZWVkIHNvdW5kIHdpdGhpbiB0aGF0IGZ1bmN0aW9uJ3Mgc2NvcGUuIExldCdzIGRpZyBpbnRvIGBuZXN0ZWRfZ2V0X3ZtY3MxMl9wYWdlc2AgdG8gY29uZmlybS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEwMDgsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwNTo1ODoyNC4xNDM0NTM3NjRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNjg3NDg1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXN0ZWRfZ2V0X3ZtY3MxMl9wYWdlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9OTAyPXN0YXRpYyBpbnQgbmVzdGVkX3ZteF9jaGVja19hcGljdl9jb250cm9scyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTkyOC1cXHQgKiB0aGUgZGVzY3JpcHRvciBhZGRyZXNzIGhhcyBiZWVuIGFscmVhZHkgY2hlY2tlZFxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6OTI5OlxcdCAqIGluIG5lc3RlZF9nZXRfdm1jczEyX3BhZ2VzLlxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtOTMwLVxcdCAqXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTI0MjQ9c3RhdGljIHZvaWQgcHJlcGFyZV92bWNzMDJfZWFybHkoc3RydWN0IHZjcHVfdm14ICp2bXgsIHN0cnVjdCBsb2FkZWRfdm1jcyAqdm1jczAxLFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0yNDc0LVxcdC8qXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzoyNDc1OlxcdCAqIFRoaXMgYml0IHdpbGwgYmUgY29tcHV0ZWQgaW4gbmVzdGVkX2dldF92bWNzMTJfcGFnZXMsIGJlY2F1c2VcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTI0NzYtXFx0ICogd2UgZG8gbm90IGhhdmUgYWNjZXNzIHRvIEwxJ3MgTVNSIGJpdG1hcCB5ZXQuICBGb3Igbm93LCBrZWVwXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTM0MDY9c3RhdGljIGJvb2wgbmVzdGVkX2dldF9ldm1jc19wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzQzNC1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjM0MzU6c3RhdGljIGJvb2wgbmVzdGVkX2dldF92bWNzMTJfcGFnZXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzQzNi17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTM1MjM9c3RhdGljIGJvb2wgdm14X2dldF9uZXN0ZWRfc3RhdGVfcGFnZXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zNTQzLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6MzU0NDpcXHRpZiAoaXNfZ3Vlc3RfbW9kZSh2Y3B1KSBcXHUwMDI2XFx1MDAyNiAhbmVzdGVkX2dldF92bWNzMTJfcGFnZXModmNwdSkpXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zNTQ1LVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9MzYyMj1lbnVtIG52bXhfdm1lbnRyeV9zdGF0dXMgbmVzdGVkX3ZteF9lbnRlcl9ub25fcm9vdF9tb2RlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzY3NC1cXHRpZiAoZnJvbV92bWVudHJ5KSB7XFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzozNjc1OlxcdFxcdGlmICh1bmxpa2VseSghbmVzdGVkX2dldF92bWNzMTJfcGFnZXModmNwdSkpKSB7XFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zNjc2LVxcdFxcdFxcdHZteF9zd2l0Y2hfdm1jcyh2Y3B1LCBcXHUwMDI2dm14LVxcdTAwM2V2bWNzMDEpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zNzA5LVxcdFxcdCAqIG5lZWQgdG8gcGVyZm9ybSBncGEgdG8gaHBhIHRyYW5zbGF0aW9uKS4gUmVxdWVzdCBhIGNhbGxcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjM3MTA6XFx0XFx0ICogdG8gbmVzdGVkX2dldF92bWNzMTJfcGFnZXMgYmVmb3JlIHRoZSBuZXh0IFZNLWVudHJ5LiAgVGhlIE1TUnNcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM3MTEtXFx0XFx0ICogaGF2ZSBhbHJlYWR5IGJlZW4gc2V0IGF0IHZtZW50cnkgdGltZSBhbmQgc2hvdWxkIG5vdCBiZSByZXNldC5cXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9Njg4OT1zdGF0aWMgaW50IHZteF9zZXRfbmVzdGVkX3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNjk5MS1cXHRcXHQgKiByZXN0b3JlZCB5ZXQuIEVWTUNTIHdpbGwgYmUgbWFwcGVkIGZyb21cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjY5OTI6XFx0XFx0ICogbmVzdGVkX2dldF92bWNzMTJfcGFnZXMoKS5cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTY5OTMtXFx0XFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDA1OjU4OjI0LjI2MDMzMjc5MVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDg0OTE3NDgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgSSBzZWUgaXQ6XG5cbioqQ29uc2lkZXJpbmcgTmVzdGVkIFZNWCBFbnRyeSBQb2ludHMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgd2UncmUgZW50ZXJpbmcgbmVzdGVkIFZNWCBhbmQgSSBzZWUgYSBjb3VwbGUgb2YgZnVuY3Rpb25zLiBgbmVzdGVkX2dldF92bWNzMTJfcGFnZXNgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBpbW1lZGlhdGVseSB0ZWxscyBtZSBpdCdzIGxpa2VseSBpbnRlcm5hbCB0byBhIHNwZWNpZmljIGNvbXBpbGF0aW9uIHVuaXQuIEkgYWxzbyBzZWUgdGhhdCBgbmVzdGVkX3ZteF9lbnRlcl9ub25fcm9vdF9tb2RlYCBpcyAqbm90KiBzdGF0aWMsIHdoaWNoIGdpdmVzIG1lIG1vcmUgb3B0aW9ucyBhcyBhIGNhbGxpbmcgcG9pbnQuIEdpdmVuIHRoYXQsIEknbSBsZWFuaW5nIHRvd2FyZHMgdXNpbmcgYG5lc3RlZF92bXhfZW50ZXJfbm9uX3Jvb3RfbW9kZWAuIFRoYXQgZmVlbHMgbGlrZSB0aGUgbW9yZSB2ZXJzYXRpbGUgb3B0aW9uLlxuXG5Ob3csIGJlZm9yZSBJIGNvbW1pdCB0byB0aGF0LCBJIG5lZWQgdG8gY2hlY2sgc29tZXRoaW5nIGVsc2UuIExldCdzIHNlZSBob3cgYF9fbmVzdGVkX3ZteF92bWV4aXRgIGlzIGRlZmluZWQsIGp1c3QgdG8gbWFrZSBzdXJlIHRoaXMgaXMgZ29pbmcgdG8gcGxheSBuaWNlbHkuIEl0IGlzIGVzc2VudGlhbCB0byBlbnN1cmUgdGhhdCB0aGUgdm1leGl0IGhhbmRsZXIgaXMgcHJvcGVybHkgY29uZmlndXJlZCB0byBkZWFsIHdpdGggbm9uLXJvb3QgbW9kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIzNDYsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwNTo1ODoyNy43NDUyNTMzMDJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMzc1NTkyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX25lc3RlZF92bXhfdm1leGl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz00OTQxPXN0YXRpYyB2b2lkIG5lc3RlZF92bXhfcmVzdG9yZV9ob3N0X3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTA1My0gKi9cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjUwNTQ6dm9pZCBfX25lc3RlZF92bXhfdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIHZtX2V4aXRfcmVhc29uLFxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTA1NS1cXHRcXHRcXHQgdTMyIGV4aXRfaW50cl9pbmZvLCB1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDU6NTg6MjcuODU5MDE0ODI5WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNjc4MDMyMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgRHluYW1pYyBOYXR1cmUgYW5kIExldmVyYWdpbmcgTmVzdGVkIFZpcnR1YWxpemF0aW9uKipcblxuUmlnaHQsIHNvIHdlJ3JlIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgbm9uLXN0YXRpYyBoZXJlLiBUaGF0IGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIGFib3V0IGR5bmFtaXNtLCBhbmQgaG93IHdlJ3JlIGdvaW5nIHRvIGFjY29tbW9kYXRlIHRoYXQuIE15IGd1dCByZWFjdGlvbiBpcyB0aGF0IHdlIG1pZ2h0IGJlIGFibGUgdG8gbGV2ZXJhZ2UgYF9fbmVzdGVkX3ZteF92bWV4aXRgLiBJdCBmZWVscyBsaWtlIHRoZSByaWdodCB0b29sIGZvciB0aGUgam9iIGdpdmVuIHRoZSBzaXR1YXRpb24uXG5cbk5vdywgYmVmb3JlIEkgZ2V0IHRvbyBmYXIgZG93biB0aGF0IHBhdGgsIEkgc2hvdWxkIHF1aWNrbHkgY2hlY2sgaW4gb24gYGt2bXBwY19wYXRjaF9kY2J6YC4gSXQncyBhIGtleSBhcmVhIHRoYXQgb2Z0ZW4gbmVlZHMgY2FyZWZ1bCBtYW5hZ2VtZW50IHdpdGggdGhpcyB0eXBlIG9mIGFwcHJvYWNoLCBhbmQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcgdGhhdCBjb3VsZCBpbnRlcmFjdCBvciBpbnRlcmZlcmUgd2l0aCB0aGlzLiBNYWtpbmcgdGhpcyBjaGVjayB1cGZyb250IHNob3VsZCBzYXZlIHNvbWUgdGltZS4gTGV0J3Mgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjgzOCwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDA1OjU4OjMxLjkyNjgyMjExNFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTIxMjg5NzA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bXBwY19wYXRjaF9kY2J6XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYz01NTA9c3RhdGljIHZvaWQga3ZtcHBjX3NldF9wdnJfcHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgcHZyKVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYy02MzktICovXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYzo2NDA6c3RhdGljIHZvaWQga3ZtcHBjX3BhdGNoX2RjYnooc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtcHBjX3B0ZSAqcHRlKVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmMtNjQxLXtcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmM9Njc3PXN0YXRpYyBpbnQga3ZtcHBjX2hhbmRsZV9wYWdlZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYy03NzgtXFx0XFx0XFx0ICghKHZjcHUtXFx1MDAzZWFyY2guaGZsYWdzIFxcdTAwMjYgQk9PSzNTX0hGTEFHX0RDQlozMikpKVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmM6Nzc5OlxcdFxcdFxcdGt2bXBwY19wYXRjaF9kY2J6KHZjcHUsIFxcdTAwMjZwdGUpO1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmMtNzgwLVxcdH0gZWxzZSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDA1OjU4OjMyLjQ0ODExNTk2WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NTEzOTI0NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIGBrdm1wcGNfaGFuZGxlX3BhZ2VmYXVsdGAqKlxuXG5Pa2F5LCBzbyBga3ZtcHBjX2hhbmRsZV9wYWdlZmF1bHRgIGlzIGEgKnN0YXRpYyogZnVuY3Rpb24uIFRoYXQgaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmssIFwiQWxyaWdodCwgbGV0J3Mgc2VlIHdoZXJlIHRoaXMgdGhpbmcgaXMgYWN0dWFsbHkgYmVpbmcgdXNlZC4gU3RhdGljIGZ1bmN0aW9ucyBhcmUgbG9jYWxpemVkLCB3aGljaCBtZWFucyBmaWd1cmluZyBvdXQgaXRzIGNhbGxlcnMgaXMgZ29pbmcgdG8gYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaXRzIG92ZXJhbGwgaW1wYWN0IGFuZCBmdW5jdGlvbmFsaXR5IHdpdGhpbiB0aGUgS1ZNL1BQQyBhcmNoaXRlY3R1cmUuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhpcyBzcGVjaWZpYyBwYWdlIGZhdWx0IGhhbmRsZXIgdG8gdW5kZXJzdGFuZCB0aGUgY2hhaW4gb2YgZXZlbnRzIHRoYXQgbGVhZCB0byBpdCBiZWluZyBpbnZva2VkLlwiIEknbSBtZW50YWxseSBmaWxpbmcgdGhpcyBhcyBhIGxvY2FsaXplZCBpbnZlc3RpZ2F0aW9uLCBmb2N1c2luZyBzb2xlbHkgb24gdGhlIGltbWVkaWF0ZSBjYWxsIGdyYXBoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzQxNywiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDA1OjU4OjM1Ljk5OTUxMTEzOVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQxNzU0Mjc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bXBwY19oYW5kbGVfcGFnZWZhdWx0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYz02NjI9c3RhdGljIGJvb2wga3ZtcHBjX3Zpc2libGVfZ3BhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhKVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYy02NzYtXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYzo2Nzc6c3RhdGljIGludCBrdm1wcGNfaGFuZGxlX3BhZ2VmYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYy02NzgtXFx0XFx0XFx0ICAgIHVsb25nIGVhZGRyLCBpbnQgdmVjKVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYz0xMTMyPWludCBrdm1wcGNfaGFuZGxlX2V4aXRfcHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgZXhpdF9ucilcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmMtMTE3Ny1cXHRcXHRcXHRpbnQgaWR4ID0gc3JjdV9yZWFkX2xvY2soXFx1MDAyNnZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlc3JjdSk7XFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYzoxMTc4OlxcdFxcdFxcdHIgPSBrdm1wcGNfaGFuZGxlX3BhZ2VmYXVsdCh2Y3B1LCBrdm1wcGNfZ2V0X3BjKHZjcHUpLCBleGl0X25yKTtcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wci5jLTExNzktXFx0XFx0XFx0c3JjdV9yZWFkX3VubG9jayhcXHUwMDI2dmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VzcmN1LCBpZHgpO1xcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYy0xMjI3LVxcdFxcdFxcdGludCBpZHggPSBzcmN1X3JlYWRfbG9jayhcXHUwMDI2dmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VzcmN1KTtcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wci5jOjEyMjg6XFx0XFx0XFx0ciA9IGt2bXBwY19oYW5kbGVfcGFnZWZhdWx0KHZjcHUsIGRhciwgZXhpdF9ucik7XFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYy0xMjI5LVxcdFxcdFxcdHNyY3VfcmVhZF91bmxvY2soXFx1MDAyNnZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlc3JjdSwgaWR4KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDU6NTg6MzYuMTQxMjcwMzc1WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU5NTAzMjMxODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBIb29rIFBvaW50cyBmb3IgVmlydHVhbGl6YXRpb24gRXhpdCBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB3ZSBjYW4gaW50ZXJjZXB0IGFuZCBoYW5kbGUgdmlydHVhbGl6YXRpb24gZXhpdHMuIGBrdm1wcGNfaGFuZGxlX2V4aXRfcHJgIGlzIGRlZmluaXRlbHkgYSBrZXkgZnVuY3Rpb24gaGVyZSwgYW5kIHRoZSBmYWN0IHRoYXQgaXQncyAqbm90KiBzdGF0aWMgaXMgdmVyeSBwcm9taXNpbmcuIFRoYXQgbWVhbnMgd2UgY2FuIHBvdGVudGlhbGx5IHJlLXB1cnBvc2Ugb3IgaG9vayBpbnRvIGl0IGRpcmVjdGx5LlxuXG5TbywgdGhlIGNlbnRyYWwgZnVuY3Rpb25zIEkndmUgaWRlbnRpZmllZCB0aGF0IHdlIG5lZWQgdG8gY29uc2lkZXIgYXJlOlxuXG4qICAgYG5lc3RlZF9zdm1fdm1ydW5gXG4qICAgYG5lc3RlZF9zdm1fdm1leGl0YFxuKiAgIGB2bWxvYWRfaW50ZXJjZXB0aW9uYFxuKiAgIGB2bXNhdmVfaW50ZXJjZXB0aW9uYFxuKiAgIGBzdm1fZW50ZXJfc21tYFxuKiAgIGBzdm1fbGVhdmVfc21tYFxuKiAgIGBuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGVgXG4qICAgYF9fbmVzdGVkX3ZteF92bWV4aXRgXG4qICAgYGt2bXBwY19oYW5kbGVfZXhpdF9wcmBcblxuTm93LCBob2xkIG9uLi4uSSBzZWUgdGhhdCBgc3ZtX2VudGVyX3NtbWAgYW5kIGBzdm1fbGVhdmVfc21tYCBhcmUgc3RhdGljLiBUaGF0J3Mgbm90IGlkZWFsIGZvciBkaXJlY3QgaG9va2luZy4gQnV0IHdhaXQsIGNhbiB3ZSBtYXliZSB1c2UgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGBlbnRlcl9zbW1gIGFuZCBgZW11bGF0b3JfbGVhdmVfc21tYCBpbnN0ZWFkPyBMZXQncyBxdWlja2x5IGRvdWJsZS1jaGVjay4uLiBZZXMsIGBlbnRlcl9zbW1gIGlzIGRlZmluaXRlbHkgbm9uLXN0YXRpYywgd2hpY2ggaXMgd2hhdCB3ZSBuZWVkLiBBbmQsIGdvb2QsIGBlbXVsYXRvcl9sZWF2ZV9zbW1gIGlzIGFsc28gbm9uLXN0YXRpYy4gRXhjZWxsZW50LiBMZXQncyBkaWcgaW50byBgZW11bGF0b3JfbGVhdmVfc21tYCBpbiBhIGJpdCBtb3JlIGRldGFpbCB0byBlbnN1cmUgaXQgcHJvdmlkZXMgdGhlIG5lY2Vzc2FyeSBmdW5jdGlvbmFsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDEwNiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwNTo1ODo0Mi4wOTE1OTY0MDdaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNzgzNDIyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJlbXVsYXRvcl9sZWF2ZV9zbW1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vc21tLmM9NTE2PXN0YXRpYyBpbnQgcnNtX2xvYWRfc3RhdGVfNjQoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc21tLmMtNTcyLVxcbmFyY2gveDg2L2t2bS9zbW0uYzo1NzM6aW50IGVtdWxhdG9yX2xlYXZlX3NtbShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dClcXG5hcmNoL3g4Ni9rdm0vc21tLmMtNTc0LXtcXG4tLVxcbmFyY2gveDg2L2t2bS9zbW0uaD0xNTg9dm9pZCBlbnRlcl9zbW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vc21tLmg6MTU5OmludCBlbXVsYXRvcl9sZWF2ZV9zbW0oc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpO1xcbmFyY2gveDg2L2t2bS9zbW0uaC0xNjAtdm9pZCBwcm9jZXNzX3NtaShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3NtbS5oPTE2Mz1zdGF0aWMgaW5saW5lIGJvb2wgaXNfc21tKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkgeyByZXR1cm4gZmFsc2U7IH1cXG4tLVxcbmFyY2gveDg2L2t2bS9zbW0uaC0xNjUtLypcXG5hcmNoL3g4Ni9rdm0vc21tLmg6MTY2OiAqIGVtdWxhdG9yX2xlYXZlX3NtbSBpcyB1c2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlciwgc28gdGhlXFxuYXJjaC94ODYva3ZtL3NtbS5oLTE2Ny0gKiBzdHViIGlzIGRlZmluZWQgaW4geDg2LmMuXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9NTc1ND1zdGF0aWMgYm9vbCBlbXVsYXRvcl9pc19zbW0oc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtNTc1OS0jaWZuZGVmIENPTkZJR19LVk1fU01NXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjU3NjA6c3RhdGljIGludCBlbXVsYXRvcl9sZWF2ZV9zbW0oc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTU3NjEte1xcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTU4MTQ9c3RhdGljIGNvbnN0IHN0cnVjdCB4ODZfZW11bGF0ZV9vcHMgZW11bGF0ZV9vcHMgPSB7XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtNTg1Ni1cXHQuaXNfc21tICAgICAgICAgICAgICA9IGVtdWxhdG9yX2lzX3NtbSxcXG5hcmNoL3g4Ni9rdm0veDg2LmM6NTg1NzpcXHQubGVhdmVfc21tICAgICAgICAgICA9IGVtdWxhdG9yX2xlYXZlX3NtbSxcXG5hcmNoL3g4Ni9rdm0veDg2LmMtNTg1OC1cXHQudHJpcGxlX2ZhdWx0ICAgICAgICA9IGVtdWxhdG9yX3RyaXBsZV9mYXVsdCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDU6NTg6NDIuMjA5NDM3MzU0WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4NDQ0MjA3NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVmaW5pbmcgdGhlIEZvY3VzOiBIeXBlcnZpc29yIEVudHJ5L0V4aXQgUG9pbnRzKipcblxuT2theSwgc28gYGVtdWxhdG9yX2xlYXZlX3NtbWAgaXMgZGVmaW5pdGVseSBub3Qgc3RhdGljLCB3aGljaCBpcyBnb29kIHRvIGtub3cuIE5vdywgbGV0J3MgcmVmaW5lIHRoaXMgbGlzdCBvZiBrZXkgZnVuY3Rpb25zIHdlJ3JlIGZvY3VzaW5nIG9uLiBJJ20gdGhpbmtpbmcgd2UgbmVlZCB0byBjb25jZW50cmF0ZSBvbiB0aGUgcG9pbnRzIHdoZXJlIHRoZSBoeXBlcnZpc29yIGlzIGVpdGhlciBlbnRlcmVkIG9yIGV4aXRlZC4gU28sIHJpZ2h0IG5vdywgSSdtIHRoaW5raW5nIGFib3V0IHRoZXNlIGZ1bmN0aW9uczogYG5lc3RlZF9zdm1fdm1ydW5gLCBgbmVzdGVkX3N2bV92bWV4aXRgLCBgdm1sb2FkX2ludGVyY2VwdGlvbmAsIGB2bXNhdmVfaW50ZXJjZXB0aW9uYCwgYGVudGVyX3NtbWAsIGBlbXVsYXRvcl9sZWF2ZV9zbW1gLCBgbmVzdGVkX3ZteF9lbnRlcl9ub25fcm9vdF9tb2RlYCwgYF9fbmVzdGVkX3ZteF92bWV4aXRgLCBhbmQgYGt2bXBwY19oYW5kbGVfZXhpdF9wcmAuXG5cbkJ1dCwgd2FpdCBhIG1pbnV0ZS4uLiBpcyBga3ZtcHBjX2hhbmRsZV9leGl0X3ByYCBwb3RlbnRpYWxseSB0b28gaGlnaC1sZXZlbD8gSXQncyB0aGUgY2VudHJhbCBoYW5kbGVyIGZvciAqYWxsKiBleGl0cyByZWxhdGVkIHRvIFBSIEtWTS4gSXQncyBhIGJyb2FkIGZ1bmN0aW9uLCBhbmQgSSBuZWVkIHRvIGhvbmUgaW4gb24gdGhlIGNvcmUgb3BlcmF0aW9ucy4gUGVyaGFwcyBga3ZtcHBjX2hhbmRsZV9wYWdlZmF1bHRgIHdvdWxkIGJlIGEgYmV0dGVyIGNob2ljZS4gRXZlbiBpZiBpdCdzIHN0YXRpYywgaXQncyBhIHNpemFibGUgZnVuY3Rpb24sIGFuZCB0aGVyZSdzIGEgZ29vZCBjaGFuY2UgaXQgd29uJ3QgYmUgaW5saW5lZC4gVGhhdCBjb3VsZCBtYWtlIGl0IGEgbW9yZSBtYW5hZ2VhYmxlIHRhcmdldCBmb3IgYW5hbHlzaXMuIEknbGwgbmVlZCB0byBjb25zaWRlciB0aGUgdHJhZGUtb2ZmcyBvZiB0aGUgY29tcGxleGl0eSBvZiB0aGUgZnVuY3Rpb24sIHZlcnN1cyB0aGUgdm9sdW1lIG9mIGFjdGl2aXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTM2MSwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwNTo1ODo0Ny4wNTM4NjExOTdaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNDM4MDg3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1wcGNfaGFuZGxlX3BhZ2VmYXVsdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmM9NjYyPXN0YXRpYyBib29sIGt2bXBwY192aXNpYmxlX2dwYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSlcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmMtNjc2LVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmM6Njc3OnN0YXRpYyBpbnQga3ZtcHBjX2hhbmRsZV9wYWdlZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmMtNjc4LVxcdFxcdFxcdCAgICB1bG9uZyBlYWRkciwgaW50IHZlYylcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmM9MTEzMj1pbnQga3ZtcHBjX2hhbmRsZV9leGl0X3ByKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgaW50IGV4aXRfbnIpXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wci5jLTExNzctXFx0XFx0XFx0aW50IGlkeCA9IHNyY3VfcmVhZF9sb2NrKFxcdTAwMjZ2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZXNyY3UpO1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmM6MTE3ODpcXHRcXHRcXHRyID0ga3ZtcHBjX2hhbmRsZV9wYWdlZmF1bHQodmNwdSwga3ZtcHBjX2dldF9wYyh2Y3B1KSwgZXhpdF9ucik7XFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYy0xMTc5LVxcdFxcdFxcdHNyY3VfcmVhZF91bmxvY2soXFx1MDAyNnZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlc3JjdSwgaWR4KTtcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmMtMTIyNy1cXHRcXHRcXHRpbnQgaWR4ID0gc3JjdV9yZWFkX2xvY2soXFx1MDAyNnZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlc3JjdSk7XFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYzoxMjI4OlxcdFxcdFxcdHIgPSBrdm1wcGNfaGFuZGxlX3BhZ2VmYXVsdCh2Y3B1LCBkYXIsIGV4aXRfbnIpO1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmMtMTIyOS1cXHRcXHRcXHRzcmN1X3JlYWRfdW5sb2NrKFxcdTAwMjZ2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZXNyY3UsIGlkeCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDA1OjU4OjQ3LjE1ODI1MDY5NFoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDY0Nzk0ODg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDpcblxuKipBbmFseXppbmcgdGhlIEtWTS9QUEMgRXhpdCBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gYGt2bXBwY19oYW5kbGVfZXhpdF9wcmAuIEkgc2VlIGl0J3MgY2FsbGVkIHR3aWNlLCB3aGljaCBpcyBhIGNsdWU7IG5vdCBhbHdheXMsIGJ1dCBvZnRlbiBzdWdnZXN0cyBpdCdzICpub3QqIGlubGluZWQuIElmIGl0IHdhcyBpbmxpbmVkLCB5b3Ugd291bGQgdGhpbmsgd2Ugd291bGRuJ3Qgc2VlIG11bHRpcGxlIGNhbGxzIHNvIGVhc2lseS5cblxuVGhpbmtpbmcgYWJvdXQgYWx0ZXJuYXRpdmVzLCBJJ20gZ29pbmcgdG8gbG9vayBhdCB1c2luZyBga3ZtcHBjX2hhbmRsZV9wYWdlZmF1bHRgIGFzIGEgcG9zc2libHkgcmVsYXRlZCBmdW5jdGlvbiBmb3IgdGhpcyBwcm9jZXNzLlxuXG5Ob3csIGxldCdzIHN3aXRjaCBnZWFycyBhIGJpdC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoZXJlIHRoZSBWQ1BVIG1hcHBpbmcgaGFwcGVucywgc28gSSdsbCBnbyBjaGVjayBvdXQgYF9fa3ZtX3ZjcHVfbWFwYC4gSSBrbm93IGl0J3MgaW4gYHZpcnQva3ZtL2t2bV9tYWluLmNgLCB3aGljaCBtYWtlcyBzZW5zZSBhcyB0aGF0J3MgZ2VuZXJhbGx5IHdoZXJlIGNvcmUgS1ZNIGZ1bmN0aW9uYWxpdHkgbGl2ZXMuIEkgd2lsbCBjaGVjayB0aGUgY29udGV4dCBzdXJyb3VuZGluZyB0aGF0IGNhbGwsIGFuZCB0aGUgcGFyYW1ldGVycyBpbnZvbHZlZCwgYXMgdGhhdCB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB3aGF0J3MgaGFwcGVuaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjM4NCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDA1OjU4OjUyLjYyMzA0OTQyWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTc3NjM3MjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19rdm1fdmNwdV9tYXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwidmlydC9rdm0va3ZtX21haW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJ2aXJ0L2t2bS9rdm1fbWFpbi5jPTMxMDg9RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKF9fZ2ZuX3RvX3BhZ2UpO1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzEwOS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjMxMTA6aW50IF9fa3ZtX3ZjcHVfbWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ2ZuX3QgZ2ZuLCBzdHJ1Y3Qga3ZtX2hvc3RfbWFwICptYXAsXFxudmlydC9rdm0va3ZtX21haW4uYy0zMTExLVxcdFxcdCAgIGJvb2wgd3JpdGFibGUpXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMxNDQtfVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6MzE0NTpFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoX19rdm1fdmNwdV9tYXApO1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzE0Ni1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDU6NTg6NTIuNzQwODE5Nzc3WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMTkyODgyMzUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIEtWTSBDaGFuZ2VzIGFuZCBSZWxldmFudCBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoZXNlIEtWTSBjaGFuZ2VzLCBmb2N1c2luZyBvbiB0aGUgaW1wbGljYXRpb25zIGFuZCBwb3RlbnRpYWwgYXJlYXMgZm9yIHRlc3RpbmcuICBUaGUgY29yZSBvZiB0aGUgbWF0dGVyIGlzIHRoZSBhZGRpdGlvbiBvZiBhIHNhZmV0eSBjaGVjayB3aXRoaW4gYF9fa3ZtX3ZjcHVfbWFwYDogYGlmIChXQVJOX09OX09OQ0UobWFwLVx1MDAzZWh2YSkpIGt2bV92Y3B1X3VubWFwKHZjcHUsIG1hcCk7YC4gIFRoaXMgbG9va3MgbGlrZSBhIGNydWNpYWwgc2FmZWd1YXJkLCBwcmV2ZW50aW5nIHBvdGVudGlhbCBpc3N1ZXMgd2l0aCB0aGUgbWVtb3J5IG1hcHBpbmcuXG5cbkkndmUgZGV0ZXJtaW5lZCB0aGF0IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBJIG5lZWQgdG8gY29uc2lkZXIgYXJlOiBgS1ZNYCwgYEtWTV9BTURgLCBgS1ZNX0lOVEVMYCwgYEtWTV9CT09LM1NfNjRfUFJgLCBgS1ZNX1NNTWAsIGFuZCBgS1ZNX0hZUEVSVmAuICBTcGVjaWZpY2FsbHksIEkgdmVyaWZpZWQgdGhhdCBgS1ZNX1NNTWAgKmlzKiBuZWVkZWQgYmVjYXVzZSBpdCBlbmFibGVzIFNNTSBlbXVsYXRpb24uIFdpdGggYSBjbG9zZXIgbG9vaywgdGhlIGNoYW5nZSBpbiBgX19uZXN0ZWRfdm14X3ZtZXhpdGAgbm93IGNhbGxzIGBrdm1fY2hlY2tfcmVxdWVzdGAgdW5jb25kaXRpb25hbGx5LiBUaGlzIGlzIGEgYnVnIGZpeCBmb3Igbm9uLUh5cGVyViBjYXNlcyB3aGVyZSB0aGUgcmVxdWVzdCB3YXMgbm90IGNsZWFyZWQuIFNvIHdoaWxlIGBLVk1fSFlQRVJWYCBpc24ndCAqc3RyaWN0bHkqIHJlcXVpcmVkIHRvIHRlc3QgdGhlIGZpeCBpdHNlbGYsIGluY2x1ZGluZyBpdCBkdXJpbmcgdGVzdGluZyB3b24ndCBodXJ0LCBzbyBJJ2xsIGtlZXAgaXQgYXMgYSBjb25maWd1cmF0aW9uIHRvIGluY2x1ZGUuXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgZnVuY3Rpb25zIHRoZW1zZWx2ZXMuIEkgaW5pdGlhbGx5IGxpc3RlZCBgX19rdm1fdmNwdV9tYXBgLCBidXQgYWZ0ZXIgYSBjbG9zZXIgZXhhbWluYXRpb24sIEkndmUgZGVjaWRlZCB0byBvbWl0IHRoaXMgb25lIGZyb20gbXkgY29yZSBmb2N1cywgYXMgaXQncyBhIHZlcnkgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbiBjYWxsZWQgYnkgYGt2bV92Y3B1X21hcGAgYW5kIGBrdm1fdmNwdV9tYXBfcmVhZG9ubHlgLiBJdCdzIHVzZWQgc28gYnJvYWRseSB0aGF0IGl0IHdpbGwgYmUgaW1wcmFjdGljYWwgdG8gZm9jdXMgb24gaXQuIEluc3RlYWQsIEknbGwgYmUgY29uY2VudHJhdGluZyBvbiB0aGVzZSBmdW5jdGlvbnM6XG5cbiogICBgbmVzdGVkX3N2bV92bXJ1bmA6IEhhbmRsZXMgdGhlIFZNUlVOIGluc3RydWN0aW9uIGluIG5lc3RlZCBTVk0uXG4qICAgYG5lc3RlZF9zdm1fdm1leGl0YDogSGFuZGxlcyBWTUVYSVQgaW4gbmVzdGVkIFNWTS5cbiogICBgdm1sb2FkX2ludGVyY2VwdGlvbmA6IEhhbmRsZXMgVk1MT0FEIGluc3RydWN0aW9uLlxuKiAgIGB2bXNhdmVfaW50ZXJjZXB0aW9uYDogSGFuZGxlcyBWTVNBVkUgaW5zdHJ1Y3Rpb24uXG4qICAgYGVudGVyX3NtbWA6IEhhbmRsZXMgU01NIGVudHJ5LlxuKiAgIGBlbXVsYXRvcl9sZWF2ZV9zbW1gOiBIYW5kbGVzIFNNTSBleGl0LlxuKiAgIGBuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGVgOiBIYW5kbGVzIFZNWCBlbnRyeS5cbiogICBgX19uZXN0ZWRfdm14X3ZtZXhpdGA6IEhhbmRsZXMgVk1YIGV4aXQuXG4qICAgYGt2bXBwY19oYW5kbGVfcGFnZWZhdWx0YDogSGFuZGxlcyBwYWdlIGZhdWx0cyBpbiBQUiBLVk0uXG5cbkdpdmVuIHRoYXQgYG5lc3RlZF92bXhfcHJlcGFyZV9tc3JfYml0bWFwYCBpcyBpbmxpbmVkIGFuZCByZWxldmFudCBmdW5jdGlvbnMgaW5jbHVkZSBgdm14X2dldF9uZXN0ZWRfc3RhdGVfcGFnZXNgIHdoaWNoIGlzIGNhbGxlZCBieSBgdm14X3NldF9uZXN0ZWRfc3RhdGVgLCBpdCBtYWtlcyBzZW5zZSB0byBpbmNsdWRlIGB2bXhfc2V0X25lc3RlZF9zdGF0ZWAgYXMgYSBmb2N1cyBmdW5jdGlvbi5cblxuU28sIGluIHN1bW1hcnksIHRoZSBrZXkgYXJlYXMgdG8gY29uY2VudHJhdGUgb24gZm9yIHRlc3RpbmcgYXJlIHRoZXNlIGZ1bmN0aW9ucywgd2l0aCB0aGVzZSBjb25maWd1cmF0aW9ucywgdG8gdGhvcm91Z2hseSB2YWxpZGF0ZSB0aGUgc2FmZXR5IGNoZWNrIGFuZCBpdHMgaW1wYWN0IG9uIHRoZSBoeXBlcnZpc29yLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjkzOCwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkwNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwNTo1OTowMi45MzM3MDQ4OTlaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNzMzNTk3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2bXhfc2V0X25lc3RlZF9zdGF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9Njg2Nz1pbnQgbmVzdGVkX3ZteF9jaGVja19yZXN0b3JlZF92bWNzMTIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02ODg4LVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6Njg4OTpzdGF0aWMgaW50IHZteF9zZXRfbmVzdGVkX3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTY4OTAtXFx0XFx0XFx0XFx0c3RydWN0IGt2bV9uZXN0ZWRfc3RhdGUgX191c2VyICp1c2VyX2t2bV9uZXN0ZWRfc3RhdGUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTc0NzU9c3RydWN0IGt2bV94ODZfbmVzdGVkX29wcyB2bXhfbmVzdGVkX29wcyBfX2luaXRkYXRhID0ge1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy03NDgyLVxcdC5nZXRfc3RhdGUgPSB2bXhfZ2V0X25lc3RlZF9zdGF0ZSxcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjc0ODM6XFx0LnNldF9zdGF0ZSA9IHZteF9zZXRfbmVzdGVkX3N0YXRlLFxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNzQ4NC1cXHQuZ2V0X25lc3RlZF9zdGF0ZV9wYWdlcyA9IHZteF9nZXRfbmVzdGVkX3N0YXRlX3BhZ2VzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwNTo1OTowMy4wNDEwNDcwOTZaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA0Nzg5MzM3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvZGUsIGJyZWFraW5nIGl0IGRvd24gaW4gbXkgb3duIG1lbnRhbCBtb2RlbDpcblxuKipEaWdlc3RpbmcgdGhlIE5lc3RlZCBTdGF0ZSBNZWNoYW5pc20qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgbmVzdGVkIHZpcnR1YWxpemF0aW9uIHN0YXRlIGlzIG1hbmFnZWQgd2l0aGluIEtWTSwgYW5kIEkndmUgdHJhY2VkIGEgYml0IG9mIHRoZSBjb2RlLiAgYHZteF9zZXRfbmVzdGVkX3N0YXRlYCBpcyBhIHN0YXRpY2FsbHkgZGVmaW5lZCBmdW5jdGlvbi4gQnV0IHdoYXQncyBpbnRlcmVzdGluZyBpcyB0aGF0IGl0J3MgYmVpbmcgKmFzc2lnbmVkKiB0byBga3ZtX3g4Nl9uZXN0ZWRfb3BzLnNldF9zdGF0ZWAuIFRoYXQgc3VnZ2VzdHMgYHZteF9zZXRfbmVzdGVkX3N0YXRlYCBpcyB0aGUgY29uY3JldGUgaW1wbGVtZW50YXRpb24uIFRoZSBhYnN0cmFjdGlvbiB3b3VsZCBiZSB3aXRoaW4gYGt2bV94ODZfbmVzdGVkX29wc2AsIHdoaWxlIHRoZSB1bmRlcmx5aW5nIG9wZXJhdGlvbiBiZWxvbmdzIHRvIFZNWCwgYXMgaXRzIG5hbWUgc3VnZ2VzdHMuXG5cbk5vdywgSSBzZWUgdGhlIGNhbGwgY2hhaW4uIGB2bXhfc2V0X25lc3RlZF9zdGF0ZWAgaXNuJ3QgY2FsbGVkIGRpcmVjdGx5LCBpdCdzIGNhbGxlZCB0aHJvdWdoIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9uZXN0ZWRfc3RhdGVgLiBCaW5nbyEgYGt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X25lc3RlZF9zdGF0ZWAgaXMgbXkgcHJpbWFyeSBlbnRyeSBwb2ludCwgdGhlIHdheSB0byBzZXQgdGhlIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBzdGF0ZS4gIFRoYXQncyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQgZGlnZ2luZyB0byB1bmRlcnN0YW5kICpob3cqIG5lc3RlZCBzdGF0ZXMgYXJlIGJlaW5nIG1hbmFnZWQuIEZyb20gdGhlcmUsIEkgY2FuIGludmVzdGlnYXRlIHRoZSBga3ZtX3g4Nl9uZXN0ZWRfb3BzYCBzdHJ1Y3R1cmUsIGFuZCBmaW5hbGx5IGB2bXhfc2V0X25lc3RlZF9zdGF0ZWAgaXRzZWxmLiBUaGF0IGdpdmVzIG1lIHRoZSBiaWcgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg4NzgsIk91dHB1dFRva2VucyI6NDksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwNTo1OTowNy4wODg5NDM2NzJaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzMzc0Mzk4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9uZXN0ZWRfc3RhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL3g4Ni5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwNTo1OTowNy4xNzIzMzM2WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNjI1MTY4OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkRpc3NlY3RpbmcgdGhlIEtWTSBOZXN0ZWQgU3RhdGUgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyB0aGUgZnVuY3Rpb24gbmFtZSBpcyBga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfbmVzdGVkX3N0YXRlYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byB0aGUgYHNldF9uZXN0ZWRfc3RhdGVgIGZ1bmN0aW9uIHdpdGhpbiB0aGUgeDg2IGFyY2hpdGVjdHVyZSBjb2RlLCBzcGVjaWZpY2FsbHkgaW4gYGFyY2gveDg2L2t2bS94ODYuY2AuIFRoYXQncyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBjb3JlIGxvZ2ljIGZvciBzZXR0aW5nIHRoZSBuZXN0ZWQgc3RhdGUgd2l0aGluIGEgS1ZNIGNvbnRleHQsIGxpa2VseSBoYW5kbGluZyB0aGUgaW50cmljYWNpZXMgb2YgaGFyZHdhcmUgdmlydHVhbGl6YXRpb24gZXh0ZW5zaW9ucyBhbmQgdGhlaXIgY29uZmlndXJhdGlvbi4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGRpZyB1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjkzMjIsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwNTo1OToxMC4zMzQ4NTMyMloiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTkyMzU1NjcsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNldF9uZXN0ZWRfc3RhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL3g4Ni5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwNTo1OToxMC40MzQwOTYyMzdaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDcwMjIzNjkwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipOZXN0ZWQgVmlydHVhbGl6YXRpb24gRGl2ZTogS1ZNX1NFVF9ORVNURURfU1RBVEUgSW52ZXN0aWdhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGludG8gdGhlIGludHJpY2FjaWVzIG9mIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiB3aXRoaW4gS1ZNLCBhbmQgbXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBtZWNoYW5pc20gdG8gc2V0IHRoZSBuZXN0ZWQgc3RhdGUuIEknbSB0aGlua2luZywgXCJXaGVyZSB3b3VsZCB0aGlzIGNydWNpYWwgYml0IG9mIGZ1bmN0aW9uYWxpdHkgYmUgaGFuZGxlZD9cIiBOYXR1cmFsbHksIGdpdmVuIHRoZSBhcmNoaXRlY3R1cmUsIGBhcmNoL3g4Ni9rdm0veDg2LmNgIGZlZWxzIGxpa2UgdGhlIG1vc3QgbG9naWNhbCBzdGFydGluZyBwb2ludC4gSSB3YW50IHRvIHplcm8gaW4gb24gYEtWTV9TRVRfTkVTVEVEX1NUQVRFYC4gVGhpcyBtYWNybyBvciBmdW5jdGlvbiBpcyBsaWtlbHkgdGhlIGtleSB0byBjb250cm9sbGluZyB0aGUgbmVzdGVkIGd1ZXN0IGV4ZWN1dGlvbiBlbnZpcm9ubWVudCBmcm9tIHRoZSBob3N0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IgdGhvcm91Z2hseSDigJMgaG93IGl0J3MgaW52b2tlZCwgd2hhdCBkYXRhIGl0IG9wZXJhdGVzIG9uLCBhbmQsIG1vc3QgY3JpdGljYWxseSwgaG93IGl0IGludGVncmF0ZXMgd2l0aCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSB2aXJ0dWFsaXphdGlvbiBmZWF0dXJlcywgcGFydGljdWxhcmx5IHRoZSBleHRlbmRlZCBwYWdlIHRhYmxlcyAoRVBUKSBhbmQgdmlydHVhbCBtYWNoaW5lIGNvbnRyb2wgc3RydWN0dXJlcyAoVk1DUykuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB3ZSBhcmUgZXhwb3NpbmcgYW5kIGNvbmZpZ3VyaW5nIHRoZXNlIG5lc3RlZCBmZWF0dXJlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk1NjAsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwNTo1OToxNS4xMzYzMzYxMjVaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNjY0NTM3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJLVk1fU0VUX05FU1RFRF9TVEFURVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0veDg2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3g4Ni5jPTM0MTY9bG9uZyBrdm1fYXJjaF92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTM3NzUtXFx0fVxcbmFyY2gveDg2L2t2bS94ODYuYzozNzc2OlxcdGNhc2UgS1ZNX1NFVF9ORVNURURfU1RBVEU6IHtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtMzc3Ny1cXHRcXHRzdHJ1Y3Qga3ZtX25lc3RlZF9zdGF0ZSBfX3VzZXIgKnVzZXJfa3ZtX25lc3RlZF9zdGF0ZSA9IGFyZ3A7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDA1OjU5OjE1LjI0Mjk4NjgyMloiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3OTU1OTM0NDY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBLVk0gSW50ZXJjZXB0aW9uIFBvaW50cyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBLVk0gY29kZSwgYW5kIGl0IGxvb2tzIGxpa2UgdGhlIHJlbGV2YW50IGZ1bmN0aW9uIGlzIGluc2lkZSBga3ZtX2FyY2hfdmNwdV9pb2N0bGAuIFRoYXQgbWVhbnMgYHZteF9zZXRfbmVzdGVkX3N0YXRlYCBpcyB0aGUga2V5IGZ1bmN0aW9uIHRvIGZvY3VzIG9uLCBhbmQgc2luY2UgaXQncyBjYWxsZWQgdGhyb3VnaCBhIGZ1bmN0aW9uIHBvaW50ZXIsIGl0IHNob3VsZG4ndCBiZSBpbmxpbmVkLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LlxuXG5Ob3csIGxldCdzIHJldmlldyB0aGUgbWFpbiBmdW5jdGlvbnMgdGhhdCBjb3VsZCBiZSBpbnRlcmNlcHRpbmcgdGhpbmdzLiBJJ3ZlIGdvdDpcblxuKiAgIGBuZXN0ZWRfc3ZtX3ZtcnVuYFxuKiAgIGBuZXN0ZWRfc3ZtX3ZtZXhpdGBcbiogICBgdm1sb2FkX2ludGVyY2VwdGlvbmBcbiogICBgdm1zYXZlX2ludGVyY2VwdGlvbmBcbiogICBgZW50ZXJfc21tYFxuKiAgIGBlbXVsYXRvcl9sZWF2ZV9zbW1gXG4qICAgYG5lc3RlZF92bXhfZW50ZXJfbm9uX3Jvb3RfbW9kZWBcbiogICBgX19uZXN0ZWRfdm14X3ZtZXhpdGBcbiogICBgdm14X3NldF9uZXN0ZWRfc3RhdGVgXG4qICAgYGt2bXBwY19oYW5kbGVfcGFnZWZhdWx0YFxuXG5BcmUgdGhlcmUgYW55IG90aGVyIGZ1bmN0aW9ucyB0aGF0IHdvdWxkIGJlIHVzZWZ1bD8gQWgsIGluIGBhcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wci5jYCwgSSBzZWUgdGhhdCBga3ZtcHBjX3BhdGNoX2RjYnpgIGlzIGNhbGxlZCBieSBga3ZtcHBjX2hhbmRsZV9wYWdlZmF1bHRgLiBJIGNoZWNrZWQgaWYgYGt2bXBwY19oYW5kbGVfcGFnZWZhdWx0YCBpcyBub24tc3RhdGljIGJ1dCBpdCdzIG5vdC4gSG93ZXZlciwgaXQncyBjYWxsZWQgYnkgYGt2bXBwY19oYW5kbGVfZXhpdF9wcmAuXG5cblNvIG5vdyBteSBjb21wbGV0ZSBsaXN0IGlzOlxuXG4qICAgYG5lc3RlZF9zdm1fdm1ydW5gXG4qICAgYG5lc3RlZF9zdm1fdm1leGl0YFxuKiAgIGB2bWxvYWRfaW50ZXJjZXB0aW9uYFxuKiAgIGB2bXNhdmVfaW50ZXJjZXB0aW9uYFxuKiAgIGBlbnRlcl9zbW1gXG4qICAgYGVtdWxhdG9yX2xlYXZlX3NtbWBcbiogICBgbmVzdGVkX3ZteF9lbnRlcl9ub25fcm9vdF9tb2RlYFxuKiAgIGBfX25lc3RlZF92bXhfdm1leGl0YFxuKiAgIGB2bXhfc2V0X25lc3RlZF9zdGF0ZWBcbiogICBga3ZtcHBjX2hhbmRsZV9leGl0X3ByYFxuXG5JIGhhdmUgdG8gY29uc2lkZXIgaWYgYGt2bXBwY19oYW5kbGVfZXhpdF9wcmAgd2lsbCBiZSB0b28gXCJob3RcIiBiZWNhdXNlIGl0J3MgdGhlIG1haW4gZXhpdCBoYW5kbGVyIGZvciBQUiBLVk0uXG5cblBlcmhhcHMgYGt2bXBwY19oYW5kbGVfcGFnZWZhdWx0YCBpcyBiZXR0ZXIsIGV2ZW4gaWYgc3RhdGljLCBpdCdzIGEgbGFyZ2UgZnVuY3Rpb24gYW5kIG1pZ2h0IG5vdCBiZSBpbmxpbmVkLiBJdCdzIHRpbWUgdG8gY2hlY2sgdGhlIHNpemUgb2YgYGt2bXBwY19oYW5kbGVfcGFnZWZhdWx0YC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAwMDQsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0ODcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDU6NTk6MjMuMTk4OTI0OTA3WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Njg3MDM3MzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtcHBjX2hhbmRsZV9wYWdlZmF1bHRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wci5jPTY2Mj1zdGF0aWMgYm9vbCBrdm1wcGNfdmlzaWJsZV9ncGEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEpXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wci5jLTY3Ni1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wci5jOjY3NzpzdGF0aWMgaW50IGt2bXBwY19oYW5kbGVfcGFnZWZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wci5jLTY3OC1cXHRcXHRcXHQgICAgdWxvbmcgZWFkZHIsIGludCB2ZWMpXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wci5jPTExMzI9aW50IGt2bXBwY19oYW5kbGVfZXhpdF9wcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBleGl0X25yKVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYy0xMTc3LVxcdFxcdFxcdGludCBpZHggPSBzcmN1X3JlYWRfbG9jayhcXHUwMDI2dmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VzcmN1KTtcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wci5jOjExNzg6XFx0XFx0XFx0ciA9IGt2bXBwY19oYW5kbGVfcGFnZWZhdWx0KHZjcHUsIGt2bXBwY19nZXRfcGModmNwdSksIGV4aXRfbnIpO1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmMtMTE3OS1cXHRcXHRcXHRzcmN1X3JlYWRfdW5sb2NrKFxcdTAwMjZ2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZXNyY3UsIGlkeCk7XFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wci5jLTEyMjctXFx0XFx0XFx0aW50IGlkeCA9IHNyY3VfcmVhZF9sb2NrKFxcdTAwMjZ2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZXNyY3UpO1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmM6MTIyODpcXHRcXHRcXHRyID0ga3ZtcHBjX2hhbmRsZV9wYWdlZmF1bHQodmNwdSwgZGFyLCBleGl0X25yKTtcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wci5jLTEyMjktXFx0XFx0XFx0c3JjdV9yZWFkX3VubG9jayhcXHUwMDI2dmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VzcmN1LCBpZHgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwNTo1OToyMy42Njc2MzQ1MzRaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA3ODAwNzQwOTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgS1ZNIENvcmUgTG9naWMgZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGZvY3VzIG5lZWRzIHRvIGJlIG9uIHNwZWNpZmljIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIEtWTSBjb3JlLCBzcGVjaWZpY2FsbHkgaW4gcmVsYXRpb24gdG8gdGhlIHg4NiAoU1ZNIGFuZCBWTVgpIGFuZCBQb3dlclBDIChCb29rM1MgUFIpIGFyY2hpdGVjdHVyZXMuIEkndmUgcGlucG9pbnRlZCBhIHJhbmdlIG9mIGxpbmVzLCBzdGFydGluZyBmcm9tIGFyb3VuZCBsaW5lIDY3NyBhbmQgZXh0ZW5kaW5nIGF0IGxlYXN0IHRvIDc4MCwgaW5kaWNhdGluZyBhIHJlbGV2YW50IHNlY3Rpb24gb2YgY29kZS4gSXQgbG9va3MgbGlrZSB3ZSdyZSAqbm90KiBkZWFsaW5nIHdpdGggYW55IGlubGluZWQgY29kZSBoZXJlLlxuXG5Hb29kIG5ld3MsIGBrdm1wcGNfaGFuZGxlX3BhZ2VmYXVsdGAgaXMgYXZhaWxhYmxlIGZvciBkaXJlY3QgdXNlLiBMaWtld2lzZSwgYHN2bV9lbnRlcl9zbW1gIGFuZCBgc3ZtX2xlYXZlX3NtbWAgYXJlIGFzc2lnbmVkIHRvIGZ1bmN0aW9uIHBvaW50ZXJzLCB3aGljaCBhbHNvIG1lYW5zIHRoZXkgYXJlbid0IGlubGluZWQgYW5kIGFyZSBhY2Nlc3NpYmxlIGRpcmVjdGx5LiBUaGlzIHNpbXBsaWZpZXMgdGhpbmdzLlxuXG5UaGVyZWZvcmUsIHRoZSBtYWluIGZ1bmN0aW9ucyBJIG5lZWQgdG8gZm9jdXMgb24gZm9yIGZ1enppbmcgYXJlOlxuXG4qICAgYG5lc3RlZF9zdm1fdm1ydW5gXG4qICAgYG5lc3RlZF9zdm1fdm1leGl0YFxuKiAgIGB2bWxvYWRfaW50ZXJjZXB0aW9uYFxuKiAgIGB2bXNhdmVfaW50ZXJjZXB0aW9uYFxuKiAgIGBzdm1fZW50ZXJfc21tYFxuKiAgIGBzdm1fbGVhdmVfc21tYFxuKiAgIGBuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGVgXG4qICAgYF9fbmVzdGVkX3ZteF92bWV4aXRgXG4qICAgYHZteF9zZXRfbmVzdGVkX3N0YXRlYFxuKiAgIGBrdm1wcGNfaGFuZGxlX3BhZ2VmYXVsdGBcblxuSSdtIGFsc28gbG9va2luZyBhdCB3aGljaCBLVk0gY29uZmlncyB0aGVzZSBmdW5jdGlvbnMgYXBwbHkgdG8uXG5cbk5vdywgbGV0J3MgY29uZmlybSB0aGUgcmVsZXZhbnQgY29uZmlncy5cblxuKiAgIGBLVk1gIC0gQ29uZmlybWVkXG4qICAgYEtWTV9BTURgIC0gQ29uZmlybWVkXG4qICAgYEtWTV9JTlRFTGAgLSBDb25maXJtZWRcbiogICBgS1ZNX0JPT0szU182NF9QUmAgLSBDb25maXJtZWRcbiogICBgS1ZNX1NNTWAgLSBDb25maXJtZWRcbiogICBgS1ZNX0hZUEVSVmAgLSBDb25maXJtZWRcblxuTm8gb3RoZXIgY29uZmlncyBhcHBlYXIgdG8gYmUgcmVsZXZhbnQuXG5cblRoZSBjb3JlIHJlYXNvbmluZyBoZXJlIGlzIHRoYXQgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGNsZWFudXAgY2xhc3MsIGBrdm1fdmNwdV9tYXBfbG9jYWxgLCB3aGljaCByZXBsYWNlcyBtYW51YWwgbWVtb3J5IG1hbmFnZW1lbnQgd2l0aCBga3ZtX3ZjcHVfbWFwYCBhbmQgYGt2bV92Y3B1X3VubWFwYCBjYWxscy4gVGhhdCdzIGEgc2lnbmlmaWNhbnQgcmVmYWN0b3IsIGVzcGVjaWFsbHkgZ2l2ZW4gaXRzIHNjb3BlIGFjcm9zcyB4ODYgYW5kIFBvd2VyUEMuIFdlIG5lZWQgdG8gZnV6eiB0aGVzZSBmdW5jdGlvbnMgcmlnb3JvdXNseSB0byBlbnN1cmUgdGhlIG5ldyBjbGFzcyB3b3JrcyBhcyBpbnRlbmRlZC4gV2UgbmVlZCB0byB2ZXJpZnkgdGhhdCB3ZSdyZSBub3QgaW50cm9kdWNpbmcgYW55IG1lbW9yeSBsZWFrcyBvciB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLiBBZGRpdGlvbmFsbHksIHRoZSBwYXRjaCBpbmNsdWRlcyBhIGZpeCB0byBgX19uZXN0ZWRfdm14X3ZtZXhpdGAsIHdoaWNoIHdhcyBpbmNvcnJlY3RseSBnYXRlZCBvbiBgQ09ORklHX0tWTV9IWVBFUlZgLiBUaGUgcmVxdWVzdCB0byBnZXQgbmVzdGVkIHN0YXRlIHBhZ2VzIHdhcyBvbmx5IGNhbGxlZCB3aGVuIGh5cGVydiB3YXMgYWN0aXZlLCBidXQgc2luY2UgY2hlY2tpbmcgdGhlIHJlcXVlc3QgYWxzbyBjbGVhcnMgaXQsIHRoaXMgbmVlZGVkIHRvIGJlIGZpeGVkLiBUaGlzIGZpeCBhbHNvIG5lZWRzIHRvIGJlIHRlc3RlZCB0byBtYWtlIHN1cmUgaXQgZnVuY3Rpb25zIGFzIGludGVuZGVkLlxuXG5JJ20gc2F0aXNmaWVkIHdpdGggdGhpcyBhbmFseXNpcy4gSSdtIGdvaW5nIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE1NjcsIk91dHB1dFRva2VucyI6MzgwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjYzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDA1OjU5OjM0LjQ0NzcxMDYzWiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIzNDkyNjk3LCJFcnJvciI6InRoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlOiBLVk1fQk9PSzNTXzY0X1BSIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0FNRFwiLFxuICAgIFwiS1ZNX0lOVEVMXCIsXG4gICAgXCJLVk1fQk9PSzNTXzY0X1BSXCIsXG4gICAgXCJLVk1fU01NXCIsXG4gICAgXCJLVk1fSFlQRVJWXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmVzdGVkX3N2bV92bXJ1blwiLFxuICAgIFwibmVzdGVkX3N2bV92bWV4aXRcIixcbiAgICBcInZtbG9hZF9pbnRlcmNlcHRpb25cIixcbiAgICBcInZtc2F2ZV9pbnRlcmNlcHRpb25cIixcbiAgICBcInN2bV9lbnRlcl9zbW1cIixcbiAgICBcInN2bV9sZWF2ZV9zbW1cIixcbiAgICBcIm5lc3RlZF92bXhfZW50ZXJfbm9uX3Jvb3RfbW9kZVwiLFxuICAgIFwiX19uZXN0ZWRfdm14X3ZtZXhpdFwiLFxuICAgIFwidm14X3NldF9uZXN0ZWRfc3RhdGVcIixcbiAgICBcImt2bXBwY19oYW5kbGVfcGFnZWZhdWx0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBjbGVhbnVwIGNsYXNzIGBrdm1fdmNwdV9tYXBfbG9jYWxgIGFuZCB1c2VzIGl0IHRvIHJlcGxhY2UgbWFudWFsIGBrdm1fdmNwdV9tYXBgIGFuZCBga3ZtX3ZjcHVfdW5tYXBgIGNhbGxzIGluIHNldmVyYWwgS1ZNIGZ1bmN0aW9ucyBhY3Jvc3MgeDg2IChTVk0gYW5kIFZNWCkgYW5kIFBvd2VyUEMgKEJvb2szUyBQUikuIEl0IGFsc28gZml4ZXMgYSBidWcgaW4gYF9fbmVzdGVkX3ZteF92bWV4aXRgIHdoZXJlIGBrdm1fY2hlY2tfcmVxdWVzdChLVk1fUkVRX0dFVF9ORVNURURfU1RBVEVfUEFHRVMsIHZjcHUpYCB3YXMgb25seSBjYWxsZWQgd2hlbiBgQ09ORklHX0tWTV9IWVBFUlZgIHdhcyBlbmFibGVkLCBidXQgY2hlY2tpbmcgdGhlIHJlcXVlc3QgYWxzbyBjbGVhcnMgaXQsIHNvIGl0IHNob3VsZCBiZSBjYWxsZWQgdW5jb25kaXRpb25hbGx5LiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIGNvcmUgS1ZNIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IGNsZWFudXAgY2xhc3Mgd29ya3MgY29ycmVjdGx5IGFuZCBkb2Vzbid0IGludHJvZHVjZSBtZW1vcnkgbGVha3Mgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzLCBhbmQgdG8gdmVyaWZ5IHRoZSBmaXggaW4gYF9fbmVzdGVkX3ZteF92bWV4aXRgLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcInRoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlOiBLVk1fQk9PSzNTXzY0X1BSXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDA1OjU5OjM0LjU3MTIxNjI2N1oiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDMzMjkwMTU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEZWJ1Z2dpbmcgYSBNaXNzaW5nIEtWTSBEZWZpbml0aW9uKipcblxuSG1tLCBob2xkIG9uIGEgc2Vjb25kLi4uIGBLVk1fQk9PSzNTXzY0X1BSYCBpc24ndCBzaG93aW5nIHVwIGFzIGRlZmluZWQ/IFRoYXQncyB1bmV4cGVjdGVkLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnIGZpbGUgd2l0aGluIHRoZSBQb3dlclBDIEtWTSBhcmNoaXRlY3R1cmUgZGlyZWN0b3J5LiBMZXQncyBnZXQgYmFjayB0byBgYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnYCBhbmQgdmVyaWZ5IHRoYXQgdGhlIG1hY3JvIEknbSBsb29raW5nIGZvciBpcyBhY3R1YWxseSB0aGVyZSwgY29ycmVjdGx5IGRlZmluZWQsIGFuZCBjb25kaXRpb25hbGx5IGVuYWJsZWQuIEl0J3MgcG9zc2libGUgdGhlcmUncyBhIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jeSBJJ20gbWlzc2luZywgYSB0eXBvLCBvciBwZXJoYXBzIGEgbW9yZSBzdWJ0bGUgaXNzdWUgd2l0aCB0aGUgS2NvbmZpZyBsb2dpYyB0aGF0J3MgY2F1c2luZyBpdCBub3QgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGJ1aWxkLiBJJ2xsIG5lZWQgdG8gbWV0aWN1bG91c2x5IGV4YW1pbmUgdGhlIGNvbnRleHQgb2YgdGhhdCBkZWZpbml0aW9uLiBBIHF1aWNrIHZpc3VhbCBzY2FuIG1heSBiZSBhbGwgSSBuZWVkLCBidXQgSSdsbCBiZSBzdXJlIHRvIGNhcmVmdWxseSB0cmFjZSBhbnkgZGVwZW5kZW5jaWVzIG9yIGNvbmRpdGlvbmFscyB0byBpZGVudGlmeSB0aGUgcHJvYmxlbS4gVGhlIGdvYWwgaXMgdG8gZWl0aGVyIGNvbmZpcm0gaXRzIGV4aXN0ZW5jZSBhbmQgc3BvdCBhbnkgb2J2aW91cyBlcnJvciwgb3IgZmluZCBvdXQgaXQgaXMgbm90IHRoZXJlIGFuZCBtb3ZlIG9uIHRvIHNvbHZpbmcgdGhlIHByb2JsZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzMjg5LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJzZXQtcmVzdWx0cyJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDA1OjU5OjM4LjAwNDUxMDMzOVoiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU3NzA5MzQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fQk9PSzNTXzY0X1BSXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Bvd2VycGMva3ZtL0tjb25maWc9Nzk9Y29uZmlnIEtWTV9CT09LM1NfNjRfSFZcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy05OS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MTAwOmNvbmZpZyBLVk1fQk9PSzNTXzY0X1BSXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTEwMS1cXHR0cmlzdGF0ZSBcXFwiS1ZNIHN1cHBvcnQgd2l0aG91dCB1c2luZyBoeXBlcnZpc29yIG1vZGUgaW4gaG9zdFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDU6NTk6MzguMTYyMjI2OTU1WiIsIlNlcSI6NTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY2MzE1NzA4MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGVidWdnaW5nIGEgS2NvbmZpZyBEaXNjcmVwYW5jeSoqXG5cbk9rYXksIHNvIEknbSBzZWVpbmcgYSBkaXNjcmVwYW5jeSBoZXJlLiBUaGlzIHRvb2wgSSdtIHVzaW5nIGlzIGNsYWltaW5nIHRoYXQgYEtWTV9CT09LM1NfNjRfUFJgIGRvZXNuJ3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlLiBUaGF0IHNlZW1zIG9kZCBiZWNhdXNlIEknbSBhbG1vc3QgY2VydGFpbiBJIHNhdyBpdCBzb21ld2hlcmUuLi4gaGFuZyBvbiwgeWVhaCwgaXQncyByaWdodCB0aGVyZSBpbiBgYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnYC5cblxuTm93LCB3aHkgd291bGQgdGhlIHRvb2wgZ2l2ZSBtZSBhIGZhbHNlIG5lZ2F0aXZlPyBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCBtaWdodCBiZSBkZWZhdWx0aW5nIHRvIGNoZWNraW5nIHRoZSB4ODYgS2NvbmZpZyBieSBkZWZhdWx0LiBUaGF0J3MgYSBjb21tb24gb3ZlcnNpZ2h0IHdpdGggdGhlc2Uga2luZHMgb2YgdG9vbHMsIHNpbmNlIHg4NiBpcyBvZnRlbiB0aGUgcHJpbWFyeSBmb2N1cy4gT3IsIGl0IGNvdWxkIGJlIHRoYXQgdGhlIHRvb2wncyBjaGVja2luZyB0aGUgZ2xvYmFsIEtjb25maWcsIGJ1dCBpdCdzIG5vdCBhY2NvdW50aW5nIGZvciBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29uZmlndXJhdGlvbnMuXG5cbkxldCdzIHRlc3QgdGhpcy4gVGhlIHRvb2wgaXMgcmVwb3J0aW5nIHRoYXQgYEtWTV9CT09LM1NfNjRfUFJgIGlzIG5vbi1leGlzdGVudC4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gY29uZmlybSB3aGV0aGVyIGBLVk1fQk9PSzNTX1BSYCBleGlzdHMuIElmIHRoYXQncyB0aGUgY2FzZSwgaXQgY291bGQgbWVhbiB0aGVyZSdzIGEgdHlwbyB3aXRoaW4gdGhlIHRvb2wgb3IsIHRoZSBjb25maWcgaXMgbmFtZWQgc2xpZ2h0bHkgZGlmZmVyZW50bHksIHN1Y2ggYXMgdGhlIGBfNjRgIGlzbid0IHJlcXVpcmVkLiBMZXQncyBzZWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzNzE4LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDA1OjU5OjQ0Ljc5MzgwMjY2OFoiLCJTZXEiOjUyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI0MDY5OTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fQk9PSzNTX1BSXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Bvd2VycGMva3ZtL0tjb25maWc9MzQ9Y29uZmlnIEtWTV9CT09LM1NfNjRfSEFORExFUlxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTM3LVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzozODpjb25maWcgS1ZNX0JPT0szU19QUl9QT1NTSUJMRVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0zOS1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDA1OjU5OjQ0LjkxNzg3ODQzNFoiLCJTZXEiOjUzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTA2MjE4NDgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktWTSBDb25maWd1cmF0aW9uIFZlcmlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSBhYm91dCB0aGlzIEtWTSBzZXR0aW5nLiBJdCdzIGRlZmluaXRlbHkgbm90IHdoYXQgSSBpbml0aWFsbHkgdGhvdWdodC4gTXkgbm90ZXMgYXJlIHBvaW50aW5nIHRvd2FyZHMgYEtWTV9CT09LM1NfNjRfUFJgIGFuZCBJIG5lZWQgdG8gc29saWRpZnkgdGhhdCBpbiBteSBtaW5kLiBSaWdodCwgbGV0J3MgZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIGZpbGUsIHNwZWNpZmljYWxseSBgYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnYC4gVGhhdCdzIHdoZXJlIGl0J2xsIGJlIGRlZmluZWQuIEkgaGF2ZSB0byB2ZXJpZnkgdGhhdCdzIHRoZSBjb3JyZWN0IG9wdGlvbi4gTm8gcm9vbSBmb3IgZXJyb3IgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQyMzAsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwNTo1OTo0OC4wMjQxMDEwMDdaIiwiU2VxIjo1NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxMzczMjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIktWTV9CT09LM1NfNjRfUFJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZz03OT1jb25maWcgS1ZNX0JPT0szU182NF9IVlxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTk5LVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxMDA6Y29uZmlnIEtWTV9CT09LM1NfNjRfUFJcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTAxLVxcdHRyaXN0YXRlIFxcXCJLVk0gc3VwcG9ydCB3aXRob3V0IHVzaW5nIGh5cGVydmlzb3IgbW9kZSBpbiBob3N0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwNTo1OTo0OC4xMDU0ODAwMDVaIiwiU2VxIjo1NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTMzODM1NTUwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBZGRyZXNzaW5nIHRoZSBUb29sJ3MgTGltaXRhdGlvbioqXG5cbk9rYXksIHNvIEknbSBzZWVpbmcgdGhpcyBiZWhhdmlvciwgYW5kIGl0J3MgcHJldHR5IGNsZWFyOiB0aGUgdG9vbCBpcyBvcGVyYXRpbmcsIGJ1dCBtYXliZSBpdCdzICpvbmx5KiBjaGVja2luZyB0aGUgeDg2IGNvbmZpZ3VyYXRpb25zLiBJIHN1c3BlY3QgdGhpcyBpcyBiZWNhdXNlIHRoZSB3b3Jrc3BhY2UgaXRzZWxmIGlzIHNldCB1cCBmb3IgeDg2LiBNYWtlcyBzZW5zZSwgZ2l2ZW4gdGhlIGxpbWl0YXRpb25zIG9mIGZ1enppbmcgUG93ZXJQQyBpbiB0aGlzIGVudmlyb25tZW50LiBUaGVyZWZvcmUsIHRoZSBsb2dpY2FsIHN0ZXAgaXMgdG8gc2ltcGxpZnkgdGhpbmdzIGFuZCBhY2tub3dsZWRnZSB0aGUgY3VycmVudCByZWFsaXR5LiBJJ20gZ29pbmcgdG8gcmVtb3ZlIGBLVk1fQk9PSzNTXzY0X1BSYCBmcm9tIHRoZSBjb25maWd1cmF0aW9uIGVudGlyZWx5IGFuZCBqdXN0IGZvY3VzIG9uIHg4NiwgYmVjYXVzZSBlZmZlY3RpdmVseSBpdCBjYW4ndCBiZSByZWxpYWJseSBmdXp6ZWQgaW4gdGhlIGN1cnJlbnQgc2V0dXAgYW5kIHRoZSB0b29sIGRvZXNuJ3QgaGFuZGxlIGl0LiBJJ2xsIGFsc28gcmVtb3ZlIGBrdm1wcGNfaGFuZGxlX3BhZ2VmYXVsdGAgZnJvbSB0aGUgbGlzdCwgYXMgaXQncyBub3QgcmVsZXZhbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0NTM3LCJPdXRwdXRUb2tlbnMiOjM1NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwNTo1OTo1My40NDM4Mzc4NjRaIiwiU2VxIjo1NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjI4OTMwMzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0FNRFwiLFxuICAgIFwiS1ZNX0lOVEVMXCIsXG4gICAgXCJLVk1fU01NXCIsXG4gICAgXCJLVk1fSFlQRVJWXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmVzdGVkX3N2bV92bXJ1blwiLFxuICAgIFwibmVzdGVkX3N2bV92bWV4aXRcIixcbiAgICBcInZtbG9hZF9pbnRlcmNlcHRpb25cIixcbiAgICBcInZtc2F2ZV9pbnRlcmNlcHRpb25cIixcbiAgICBcInN2bV9lbnRlcl9zbW1cIixcbiAgICBcInN2bV9sZWF2ZV9zbW1cIixcbiAgICBcIm5lc3RlZF92bXhfZW50ZXJfbm9uX3Jvb3RfbW9kZVwiLFxuICAgIFwiX19uZXN0ZWRfdm14X3ZtZXhpdFwiLFxuICAgIFwidm14X3NldF9uZXN0ZWRfc3RhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGNsZWFudXAgY2xhc3MgYGt2bV92Y3B1X21hcF9sb2NhbGAgYW5kIHVzZXMgaXQgdG8gcmVwbGFjZSBtYW51YWwgYGt2bV92Y3B1X21hcGAgYW5kIGBrdm1fdmNwdV91bm1hcGAgY2FsbHMgaW4gc2V2ZXJhbCBLVk0gZnVuY3Rpb25zIGFjcm9zcyB4ODYgKFNWTSBhbmQgVk1YKSBhbmQgUG93ZXJQQyAoQm9vazNTIFBSKS4gSXQgYWxzbyBmaXhlcyBhIGJ1ZyBpbiBgX19uZXN0ZWRfdm14X3ZtZXhpdGAgd2hlcmUgYGt2bV9jaGVja19yZXF1ZXN0KEtWTV9SRVFfR0VUX05FU1RFRF9TVEFURV9QQUdFUywgdmNwdSlgIHdhcyBvbmx5IGNhbGxlZCB3aGVuIGBDT05GSUdfS1ZNX0hZUEVSVmAgd2FzIGVuYWJsZWQsIGJ1dCBjaGVja2luZyB0aGUgcmVxdWVzdCBhbHNvIGNsZWFycyBpdCwgc28gaXQgc2hvdWxkIGJlIGNhbGxlZCB1bmNvbmRpdGlvbmFsbHkuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gY29yZSBLVk0gbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgY2xlYW51cCBjbGFzcyB3b3JrcyBjb3JyZWN0bHkgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIG1lbW9yeSBsZWFrcyBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMsIGFuZCB0byB2ZXJpZnkgdGhlIGZpeCBpbiBgX19uZXN0ZWRfdm14X3ZtZXhpdGAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fQU1EXCIsXG4gICAgXCJLVk1fSU5URUxcIixcbiAgICBcIktWTV9TTU1cIixcbiAgICBcIktWTV9IWVBFUlZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZXN0ZWRfc3ZtX3ZtcnVuXCIsXG4gICAgXCJuZXN0ZWRfc3ZtX3ZtZXhpdFwiLFxuICAgIFwidm1sb2FkX2ludGVyY2VwdGlvblwiLFxuICAgIFwidm1zYXZlX2ludGVyY2VwdGlvblwiLFxuICAgIFwic3ZtX2VudGVyX3NtbVwiLFxuICAgIFwic3ZtX2xlYXZlX3NtbVwiLFxuICAgIFwibmVzdGVkX3ZteF9lbnRlcl9ub25fcm9vdF9tb2RlXCIsXG4gICAgXCJfX25lc3RlZF92bXhfdm1leGl0XCIsXG4gICAgXCJ2bXhfc2V0X25lc3RlZF9zdGF0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgY2xlYW51cCBjbGFzcyBga3ZtX3ZjcHVfbWFwX2xvY2FsYCBhbmQgdXNlcyBpdCB0byByZXBsYWNlIG1hbnVhbCBga3ZtX3ZjcHVfbWFwYCBhbmQgYGt2bV92Y3B1X3VubWFwYCBjYWxscyBpbiBzZXZlcmFsIEtWTSBmdW5jdGlvbnMgYWNyb3NzIHg4NiAoU1ZNIGFuZCBWTVgpIGFuZCBQb3dlclBDIChCb29rM1MgUFIpLiBJdCBhbHNvIGZpeGVzIGEgYnVnIGluIGBfX25lc3RlZF92bXhfdm1leGl0YCB3aGVyZSBga3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9HRVRfTkVTVEVEX1NUQVRFX1BBR0VTLCB2Y3B1KWAgd2FzIG9ubHkgY2FsbGVkIHdoZW4gYENPTkZJR19LVk1fSFlQRVJWYCB3YXMgZW5hYmxlZCwgYnV0IGNoZWNraW5nIHRoZSByZXF1ZXN0IGFsc28gY2xlYXJzIGl0LCBzbyBpdCBzaG91bGQgYmUgY2FsbGVkIHVuY29uZGl0aW9uYWxseS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBjb3JlIEtWTSBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyBjbGVhbnVwIGNsYXNzIHdvcmtzIGNvcnJlY3RseSBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgbWVtb3J5IGxlYWtzIG9yIHVzZS1hZnRlci1mcmVlIGlzc3VlcywgYW5kIHRvIHZlcmlmeSB0aGUgZml4IGluIGBfX25lc3RlZF92bXhfdm1leGl0YC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowxcvtt[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-25 05:28:02 +0000 UTC FinishedAt: 2026-07-25 05:59:55 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "6bc96b971766fbbbbdd9fb2642cedacaf02da957", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_AMD", "KVM_INTEL", "KVM_SMM", "KVM_HYPERV" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "6bc96b971766fbbbbdd9fb2642cedacaf02da957", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_AMD", "KVM_INTEL", "KVM_SMM", "KVM_HYPERV" ], "series_id": "d78f0fd4-0f94-413a-81e0-a3bea28728a0" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "nested_svm_vmrun", "nested_svm_vmexit", "vmload_interception", "vmsave_interception", "svm_enter_smm", "svm_leave_smm", "nested_vmx_enter_non_root_mode", "__nested_vmx_vmexit", "vmx_set_nested_state" ], "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+CgkJCTx0ZD4yMDI2LzA3LzI1IDA1OjU3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fQU1EJiMzNDssCiAgICAmIzM0O0tWTV9JTlRFTCYjMzQ7LAogICAgJiMzNDtLVk1fU01NJiMzNDssCiAgICAmIzM0O0tWTV9IWVBFUlYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZXN0ZWRfc3ZtX3ZtcnVuJiMzNDssCiAgICAmIzM0O25lc3RlZF9zdm1fdm1leGl0JiMzNDssCiAgICAmIzM0O3ZtbG9hZF9pbnRlcmNlcHRpb24mIzM0OywKICAgICYjMzQ7dm1zYXZlX2ludGVyY2VwdGlvbiYjMzQ7LAogICAgJiMzNDtzdm1fZW50ZXJfc21tJiMzNDssCiAgICAmIzM0O3N2bV9sZWF2ZV9zbW0mIzM0OywKICAgICYjMzQ7bmVzdGVkX3ZteF9lbnRlcl9ub25fcm9vdF9tb2RlJiMzNDssCiAgICAmIzM0O19fbmVzdGVkX3ZteF92bWV4aXQmIzM0OywKICAgICYjMzQ7dm14X3NldF9uZXN0ZWRfc3RhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBjbGVhbnVwIGNsYXNzIGBrdm1fdmNwdV9tYXBfbG9jYWxgIGFuZCB1c2VzIGl0IHRvIHJlcGxhY2UgbWFudWFsIGBrdm1fdmNwdV9tYXBgIGFuZCBga3ZtX3ZjcHVfdW5tYXBgIGNhbGxzIGluIHNldmVyYWwgS1ZNIGZ1bmN0aW9ucyBhY3Jvc3MgeDg2IChTVk0gYW5kIFZNWCkgYW5kIFBvd2VyUEMgKEJvb2szUyBQUikuIEl0IGFsc28gZml4ZXMgYSBidWcgaW4gYF9fbmVzdGVkX3ZteF92bWV4aXRgIHdoZXJlIGBrdm1fY2hlY2tfcmVxdWVzdChLVk1fUkVRX0dFVF9ORVNURURfU1RBVEVfUEFHRVMsIHZjcHUpYCB3YXMgb25seSBjYWxsZWQgd2hlbiBgQ09ORklHX0tWTV9IWVBFUlZgIHdhcyBlbmFibGVkLCBidXQgY2hlY2tpbmcgdGhlIHJlcXVlc3QgYWxzbyBjbGVhcnMgaXQsIHNvIGl0IHNob3VsZCBiZSBjYWxsZWQgdW5jb25kaXRpb25hbGx5LiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIGNvcmUgS1ZNIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IGNsZWFudXAgY2xhc3Mgd29ya3MgY29ycmVjdGx5IGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgbWVtb3J5IGxlYWtzIG9yIHVzZS1hZnRlci1mcmVlIGlzc3VlcywgYW5kIHRvIHZlcmlmeSB0aGUgZml4IGluIGBfX25lc3RlZF92bXhfdm1leGl0YC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwNTo1NzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGI4ODA0ODVjMWUzMTQ5YzQ3Yzc1YWRiMWZlYmFjNTAwOWM1ODYzODNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAyNSAwNTo1NzoyNiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wci5jIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuY1xuaW5kZXggMmJhMmRkMjZhN2VhZDguLmRhN2EwMzhlMjcwMGQyIDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuY1xuQEAgLTYzOSwyNyAmIzQzOzYzOSwyNCBAQCBzdGF0aWMgdm9pZCBrdm1wcGNfc2V0X3B2cl9wcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBwdnIpXG4gICovXG4gc3RhdGljIHZvaWQga3ZtcHBjX3BhdGNoX2RjYnooc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtcHBjX3B0ZSAqcHRlKVxuIHtcbi1cdHN0cnVjdCBrdm1faG9zdF9tYXAgbWFwO1xuIFx0dTY0IGhwYWdlX29mZnNldDtcbiBcdHUzMiAqcGFnZTtcbiBcdGludCBpLCByO1xuIFxuLVx0ciA9IGt2bV92Y3B1X21hcCh2Y3B1LCBwdGUtXHUwMDNlcmFkZHIgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQsIFx1MDAyNm1hcCk7XG4tXHRpZiAocilcbiYjNDM7XHRDTEFTUyhrdm1fdmNwdV9tYXBfbG9jYWwsIG0pKHZjcHUsIHB0ZS1cdTAwM2VyYWRkciBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG4mIzQzO1x0aWYgKG0ucmV0KVxuIFx0XHRyZXR1cm47XG4gXG4gXHRocGFnZV9vZmZzZXQgPSBwdGUtXHUwMDNlcmFkZHIgXHUwMDI2IH5QQUdFX01BU0s7XG4gXHRocGFnZV9vZmZzZXQgXHUwMDI2PSB+MHhGRkZVTEw7XG4gXHRocGFnZV9vZmZzZXQgLz0gNDtcbiBcbi1cdHBhZ2UgPSBtYXAuaHZhO1xuJiM0MztcdHBhZ2UgPSBtLm1hcC5odmE7XG4gXG4gXHQvKiBwYXRjaCBkY2J6IGludG8gcmVzZXJ2ZWQgaW5zdHJ1Y3Rpb24sIHNvIHdlIHRyYXAgKi9cbiBcdGZvciAoaT1ocGFnZV9vZmZzZXQ7IGkgXHUwMDNjIGhwYWdlX29mZnNldCAmIzQzOyAoSFdfUEFHRV9TSVpFIC8gNCk7IGkmIzQzOyYjNDM7KVxuIFx0XHRpZiAoKGJlMzJfdG9fY3B1KHBhZ2VbaV0pIFx1MDAyNiAweGZmMDAwN2ZmKSA9PSBJTlNfRENCWilcbiBcdFx0XHRwYWdlW2ldIFx1MDAyNj0gY3B1X3RvX2JlMzIoMHhmZmZmZmZmNyk7XG4tXG4tXHRrdm1fdmNwdV91bm1hcCh2Y3B1LCBcdTAwMjZtYXApO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBrdm1wcGNfdmlzaWJsZV9ncGEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEpXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYyBiL2FyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmNcbmluZGV4IDVlM2UyODBjZDQ4M2UzLi43M2YzN2IwNTBkMGEwYiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmNcbkBAIC0xMDg2LDE0ICYjNDM7MTA4NiwxNCBAQCBpbnQgZW50ZXJfc3ZtX2d1ZXN0X21vZGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdm1jYjEyX2dwYSwgYm9vbCBmcm9tX3ZtcnVuKVxuIHN0YXRpYyBpbnQgbmVzdGVkX3N2bV9jb3B5X3ZtY2IxMl90b19jYWNoZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2bWNiMTJfZ3BhKVxuIHtcbiBcdHN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpO1xuLVx0c3RydWN0IGt2bV9ob3N0X21hcCBtYXA7XG4gXHRzdHJ1Y3Qgdm1jYiAqdm1jYjEyO1xuIFx0aW50IHIgPSAwO1xuIFxuLVx0aWYgKGt2bV92Y3B1X21hcCh2Y3B1LCBncGFfdG9fZ2ZuKHZtY2IxMl9ncGEpLCBcdTAwMjZtYXApKVxuJiM0MztcdENMQVNTKGt2bV92Y3B1X21hcF9sb2NhbCwgbSkodmNwdSwgZ3BhX3RvX2dmbih2bWNiMTJfZ3BhKSk7XG4mIzQzO1x0aWYgKG0ucmV0KVxuIFx0XHRyZXR1cm4gLUVGQVVMVDtcbiBcbi1cdHZtY2IxMiA9IG1hcC5odmE7XG4mIzQzO1x0dm1jYjEyID0gbS5tYXAuaHZhO1xuIFx0bmVzdGVkX2NvcHlfdm1jYl9jb250cm9sX3RvX2NhY2hlKHN2bSwgXHUwMDI2dm1jYjEyLVx1MDAzZWNvbnRyb2wpO1xuIFx0bmVzdGVkX2NvcHlfdm1jYl9zYXZlX3RvX2NhY2hlKHN2bSwgXHUwMDI2dm1jYjEyLVx1MDAzZXNhdmUpO1xuIFxuQEAgLTExMDcsNyAmIzQzOzExMDcsNiBAQCBzdGF0aWMgaW50IG5lc3RlZF9zdm1fY29weV92bWNiMTJfdG9fY2FjaGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdm1jYjEyX2dwYVxuIFx0XHRyID0gLUVJTlZBTDtcbiBcdH1cbiBcbi1cdGt2bV92Y3B1X3VubWFwKHZjcHUsIFx1MDAyNm1hcCk7XG4gXHRyZXR1cm4gcjtcbiB9XG4gXG5AQCAtMTI1MSwxNSAmIzQzOzEyNTAsMTMgQEAgc3RhdGljIGludCBuZXN0ZWRfc3ZtX3ZtZXhpdF91cGRhdGVfdm1jYjEyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHRzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTtcbiBcdHN0cnVjdCB2bWNiICp2bWNiMDIgPSBzdm0tXHUwMDNlbmVzdGVkLnZtY2IwMi5wdHI7XG4tXHRzdHJ1Y3Qga3ZtX2hvc3RfbWFwIG1hcDtcbiBcdHN0cnVjdCB2bWNiICp2bWNiMTI7XG4tXHRpbnQgcmM7XG4gXG4tXHRyYyA9IGt2bV92Y3B1X21hcCh2Y3B1LCBncGFfdG9fZ2ZuKHN2bS1cdTAwM2VuZXN0ZWQudm1jYjEyX2dwYSksIFx1MDAyNm1hcCk7XG4tXHRpZiAocmMpXG4tXHRcdHJldHVybiByYztcbiYjNDM7XHRDTEFTUyhrdm1fdmNwdV9tYXBfbG9jYWwsIG0pKHZjcHUsIGdwYV90b19nZm4oc3ZtLVx1MDAzZW5lc3RlZC52bWNiMTJfZ3BhKSk7XG4mIzQzO1x0aWYgKG0ucmV0KVxuJiM0MztcdFx0cmV0dXJuIG0ucmV0O1xuIFxuLVx0dm1jYjEyID0gbWFwLmh2YTtcbiYjNDM7XHR2bWNiMTIgPSBtLm1hcC5odmE7XG4gXG4gXHR2bWNiMTItXHUwMDNlc2F2ZS5lcyAgICAgPSB2bWNiMDItXHUwMDNlc2F2ZS5lcztcbiBcdHZtY2IxMi1cdTAwM2VzYXZlLmNzICAgICA9IHZtY2IwMi1cdTAwM2VzYXZlLmNzO1xuQEAgLTEzMTQsNyAmIzQzOzEzMTEsNiBAQCBzdGF0aWMgaW50IG5lc3RlZF9zdm1fdm1leGl0X3VwZGF0ZV92bWNiMTIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHRcdFx0ICAgICAgIHZtY2IxMi1cdTAwM2Vjb250cm9sLmV4aXRfaW50X2luZm9fZXJyLFxuIFx0XHRcdFx0ICAgICAgIEtWTV9JU0FfU1ZNKTtcbiBcbi1cdGt2bV92Y3B1X3VubWFwKHZjcHUsIFx1MDAyNm1hcCk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uYyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmNcbmluZGV4IDkxMjg2ZDQ2ZDEzYWRiLi43YTQxN2U3MTdmZDkxZSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmNcbkBAIC0yMjE2LDcgJiM0MzsyMjE2LDYgQEAgc3RhdGljIGludCB2bWxvYWRfdm1zYXZlX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgdm1sb2FkKVxuIFx0dTY0IHZtY2IxMl9ncGEgPSBrdm1fcmF4X3JlYWQodmNwdSk7XG4gXHRzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTtcbiBcdHN0cnVjdCB2bWNiICp2bWNiMTI7XG4tXHRzdHJ1Y3Qga3ZtX2hvc3RfbWFwIG1hcDtcbiBcdGludCByZXQ7XG4gXG4gXHRpZiAobmVzdGVkX3N2bV9jaGVja19wZXJtaXNzaW9ucyh2Y3B1KSlcbkBAIC0yMjI3LDEwICYjNDM7MjIyNiwxMSBAQCBzdGF0aWMgaW50IHZtbG9hZF92bXNhdmVfaW50ZXJjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCB2bWxvYWQpXG4gXHRcdHJldHVybiAxO1xuIFx0fVxuIFxuLVx0aWYgKGt2bV92Y3B1X21hcCh2Y3B1LCBncGFfdG9fZ2ZuKHZtY2IxMl9ncGEpLCBcdTAwMjZtYXApKVxuJiM0MztcdENMQVNTKGt2bV92Y3B1X21hcF9sb2NhbCwgbSkodmNwdSwgZ3BhX3RvX2dmbih2bWNiMTJfZ3BhKSk7XG4mIzQzO1x0aWYgKG0ucmV0KVxuIFx0XHRyZXR1cm4ga3ZtX2hhbmRsZV9tZW1vcnlfZmFpbHVyZSh2Y3B1LCBYODZFTVVMX0lPX05FRURFRCwgTlVMTCk7XG4gXG4tXHR2bWNiMTIgPSBtYXAuaHZhO1xuJiM0MztcdHZtY2IxMiA9IG0ubWFwLmh2YTtcbiBcbiBcdHJldCA9IGt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpO1xuIFxuQEAgLTIyNDMsOCAmIzQzOzIyNDMsNiBAQCBzdGF0aWMgaW50IHZtbG9hZF92bXNhdmVfaW50ZXJjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCB2bWxvYWQpXG4gXHRcdHN2bV9jb3B5X3ZtbG9hZHNhdmVfc3RhdGUodm1jYjEyLCBzdm0tXHUwMDNldm1jYjAxLnB0cik7XG4gXHR9XG4gXG4tXHRrdm1fdmNwdV91bm1hcCh2Y3B1LCBcdTAwMjZtYXApO1xuLVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5AQCAtNDk4OSw3ICYjNDM7NDk4Nyw2IEBAIHN0YXRpYyBpbnQgc3ZtX3NtaV9hbGxvd2VkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBmb3JfaW5qZWN0aW9uKVxuIHN0YXRpYyBpbnQgc3ZtX2VudGVyX3NtbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuaW9uIGt2bV9zbXJhbSAqc21yYW0pXG4ge1xuIFx0c3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7XG4tXHRzdHJ1Y3Qga3ZtX2hvc3RfbWFwIG1hcF9zYXZlO1xuIFxuIFx0aWYgKCFpc19ndWVzdF9tb2RlKHZjcHUpKVxuIFx0XHRyZXR1cm4gMDtcbkBAIC01MDIzLDI0ICYjNDM7NTAyMCwyMCBAQCBzdGF0aWMgaW50IHN2bV9lbnRlcl9zbW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bmlvbiBrdm1fc21yYW0gKnNtcmFtKVxuIFx0ICogdGhhdCwgc2VlIHN2bV9wcmVwYXJlX3N3aXRjaF90b19ndWVzdCgpKSB3aGljaCBtdXN0IGJlXG4gXHQgKiBwcmVzZXJ2ZWQuXG4gXHQgKi9cbi1cdGlmIChrdm1fdmNwdV9tYXAodmNwdSwgZ3BhX3RvX2dmbihzdm0tXHUwMDNlbmVzdGVkLmhzYXZlX21zciksIFx1MDAyNm1hcF9zYXZlKSlcbiYjNDM7XHRDTEFTUyhrdm1fdmNwdV9tYXBfbG9jYWwsIG1fc2F2ZSkodmNwdSwgZ3BhX3RvX2dmbihzdm0tXHUwMDNlbmVzdGVkLmhzYXZlX21zcikpO1xuJiM0MztcdGlmIChtX3NhdmUucmV0KVxuIFx0XHRyZXR1cm4gMTtcbiBcbiBcdEJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3Qgdm1jYiwgc2F2ZSkgIT0gMHg0MDApO1xuIFxuLVx0c3ZtX2NvcHlfdm1ydW5fc3RhdGUobWFwX3NhdmUuaHZhICYjNDM7IDB4NDAwLFxuLVx0XHRcdCAgICAgXHUwMDI2c3ZtLVx1MDAzZXZtY2IwMS5wdHItXHUwMDNlc2F2ZSk7XG4tXG4tXHRrdm1fdmNwdV91bm1hcCh2Y3B1LCBcdTAwMjZtYXBfc2F2ZSk7XG4mIzQzO1x0c3ZtX2NvcHlfdm1ydW5fc3RhdGUobV9zYXZlLm1hcC5odmEgJiM0MzsgMHg0MDAsIFx1MDAyNnN2bS1cdTAwM2V2bWNiMDEucHRyLVx1MDAzZXNhdmUpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBpbnQgc3ZtX2xlYXZlX3NtbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGNvbnN0IHVuaW9uIGt2bV9zbXJhbSAqc21yYW0pXG4ge1xuIFx0c3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7XG4tXHRzdHJ1Y3Qga3ZtX2hvc3RfbWFwIG1hcCwgbWFwX3NhdmU7XG4gXHRzdHJ1Y3Qgdm1jYiAqdm1jYjEyO1xuLVx0aW50IHJldDtcbiBcbiBcdGNvbnN0IHN0cnVjdCBrdm1fc21yYW1fc3RhdGVfNjQgKnNtcmFtNjQgPSBcdTAwMjZzbXJhbS1cdTAwM2VzbXJhbTY0O1xuIFxuQEAgLTUwNTcsMjIgJiM0Mzs1MDUwLDIzIEBAIHN0YXRpYyBpbnQgc3ZtX2xlYXZlX3NtbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGNvbnN0IHVuaW9uIGt2bV9zbXJhbSAqc21yYW0pXG4gXHRpZiAoIShzbXJhbTY0LVx1MDAzZWVmZXIgXHUwMDI2IEVGRVJfU1ZNRSkpXG4gXHRcdHJldHVybiAxO1xuIFxuLVx0aWYgKGt2bV92Y3B1X21hcCh2Y3B1LCBncGFfdG9fZ2ZuKHNtcmFtNjQtXHUwMDNlc3ZtX2d1ZXN0X3ZtY2JfZ3BhKSwgXHUwMDI2bWFwKSlcbiYjNDM7XHRDTEFTUyhrdm1fdmNwdV9tYXBfbG9jYWwsIG0pKHZjcHUsIGdwYV90b19nZm4oc21yYW02NC1cdTAwM2Vzdm1fZ3Vlc3Rfdm1jYl9ncGEpKTtcbiYjNDM7XHRpZiAobS5yZXQpXG4gXHRcdHJldHVybiAxO1xuIFxuLVx0cmV0ID0gMTtcbi1cdGlmIChrdm1fdmNwdV9tYXAodmNwdSwgZ3BhX3RvX2dmbihzdm0tXHUwMDNlbmVzdGVkLmhzYXZlX21zciksIFx1MDAyNm1hcF9zYXZlKSlcbi1cdFx0Z290byB1bm1hcF9tYXA7XG4mIzQzO1x0Q0xBU1Moa3ZtX3ZjcHVfbWFwX2xvY2FsLCBtX3NhdmUpKHZjcHUsIGdwYV90b19nZm4oc3ZtLVx1MDAzZW5lc3RlZC5oc2F2ZV9tc3IpKTtcbiYjNDM7XHRpZiAobV9zYXZlLnJldClcbiYjNDM7XHRcdHJldHVybiAxO1xuIFxuIFx0aWYgKHN2bV9hbGxvY2F0ZV9uZXN0ZWQoc3ZtKSlcbi1cdFx0Z290byB1bm1hcF9zYXZlO1xuJiM0MztcdFx0cmV0dXJuIDE7XG4gXG4gXHQvKlxuIFx0ICogUmVzdG9yZSBMMSBob3N0IHN0YXRlIGZyb20gTDEgSFNBVkUgYXJlYSBhcyBWTUNCMDEgd2FzXG4gXHQgKiB1c2VkIGR1cmluZyBTTU0gKHNlZSBzdm1fZW50ZXJfc21tKCkpXG4gXHQgKi9cbiBcbi1cdHN2bV9jb3B5X3ZtcnVuX3N0YXRlKFx1MDAyNnN2bS1cdTAwM2V2bWNiMDEucHRyLVx1MDAzZXNhdmUsIG1hcF9zYXZlLmh2YSAmIzQzOyAweDQwMCk7XG4mIzQzO1x0c3ZtX2NvcHlfdm1ydW5fc3RhdGUoXHUwMDI2c3ZtLVx1MDAzZXZtY2IwMS5wdHItXHUwMDNlc2F2ZSwgbV9zYXZlLm1hcC5odmEgJiM0MzsgMHg0MDApO1xuIFxuIFx0LypcbiBcdCAqIEVudGVyIHRoZSBuZXN0ZWQgZ3Vlc3Qgbm93XG5AQCAtNTA4MCwyNCAmIzQzOzUwNzQsMTggQEAgc3RhdGljIGludCBzdm1fbGVhdmVfc21tKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgY29uc3QgdW5pb24ga3ZtX3NtcmFtICpzbXJhbSlcbiBcbiBcdHZtY2JfbWFya19hbGxfZGlydHkoc3ZtLVx1MDAzZXZtY2IwMS5wdHIpO1xuIFxuLVx0dm1jYjEyID0gbWFwLmh2YTtcbiYjNDM7XHR2bWNiMTIgPSBtLm1hcC5odmE7XG4gXHRuZXN0ZWRfY29weV92bWNiX2NvbnRyb2xfdG9fY2FjaGUoc3ZtLCBcdTAwMjZ2bWNiMTItXHUwMDNlY29udHJvbCk7XG4gXHRuZXN0ZWRfY29weV92bWNiX3NhdmVfdG9fY2FjaGUoc3ZtLCBcdTAwMjZ2bWNiMTItXHUwMDNlc2F2ZSk7XG4gXG4gXHRpZiAobmVzdGVkX3N2bV9jaGVja19jYWNoZWRfdm1jYjEyKHZjcHUpIFx1MDAzYyAwKVxuLVx0XHRnb3RvIHVubWFwX3NhdmU7XG4mIzQzO1x0XHRyZXR1cm4gMTtcbiBcbiBcdGlmIChlbnRlcl9zdm1fZ3Vlc3RfbW9kZSh2Y3B1LCBzbXJhbTY0LVx1MDAzZXN2bV9ndWVzdF92bWNiX2dwYSwgZmFsc2UpICE9IDApXG4tXHRcdGdvdG8gdW5tYXBfc2F2ZTtcbiYjNDM7XHRcdHJldHVybiAxO1xuIFxuLVx0cmV0ID0gMDtcbiBcdHZjcHUtXHUwMDNlYXJjaC5uZXN0ZWRfcnVuX3BlbmRpbmcgPSBLVk1fTkVTVEVEX1JVTl9QRU5ESU5HO1xuLVxuLXVubWFwX3NhdmU6XG4tXHRrdm1fdmNwdV91bm1hcCh2Y3B1LCBcdTAwMjZtYXBfc2F2ZSk7XG4tdW5tYXBfbWFwOlxuLVx0a3ZtX3ZjcHVfdW5tYXAodmNwdSwgXHUwMDI2bWFwKTtcbi1cdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHN2bV9lbmFibGVfc21pX3dpbmRvdyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYyBiL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNcbmluZGV4IGI1NDYwZGU0YjFhNzJmLi5lZjc5NzY5YzYyODcxOCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNcbkBAIC03MzAsNyAmIzQzOzczMCw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBuZXN0ZWRfdm14X3ByZXBhcmVfbXNyX2JpdG1hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHRpbnQgbXNyO1xuIFx0dW5zaWduZWQgbG9uZyAqbXNyX2JpdG1hcF9sMTtcbiBcdHVuc2lnbmVkIGxvbmcgKm1zcl9iaXRtYXBfbDAgPSB2bXgtXHUwMDNlbmVzdGVkLnZtY3MwMi5tc3JfYml0bWFwO1xuLVx0c3RydWN0IGt2bV9ob3N0X21hcCBtYXA7XG4gXG4gXHQvKiBOb3RoaW5nIHRvIGRvIGlmIHRoZSBNU1IgYml0bWFwIGlzIG5vdCBpbiB1c2UuICAqL1xuIFx0aWYgKCFjcHVfaGFzX3ZteF9tc3JfYml0bWFwKCkgfHxcbkBAIC03NTMsMTAgJiM0Mzs3NTIsMTEgQEAgc3RhdGljIGlubGluZSBib29sIG5lc3RlZF92bXhfcHJlcGFyZV9tc3JfYml0bWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdH1cbiBcbi1cdGlmIChrdm1fdmNwdV9tYXBfcmVhZG9ubHkodmNwdSwgZ3BhX3RvX2dmbih2bWNzMTItXHUwMDNlbXNyX2JpdG1hcCksIFx1MDAyNm1hcCkpXG4mIzQzO1x0Q0xBU1Moa3ZtX3ZjcHVfbWFwX2xvY2FsX3JlYWRvbmx5LCBtKSh2Y3B1LCBncGFfdG9fZ2ZuKHZtY3MxMi1cdTAwM2Vtc3JfYml0bWFwKSk7XG4mIzQzO1x0aWYgKG0ucmV0KVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4tXHRtc3JfYml0bWFwX2wxID0gKHVuc2lnbmVkIGxvbmcgKiltYXAuaHZhO1xuJiM0MztcdG1zcl9iaXRtYXBfbDEgPSAodW5zaWduZWQgbG9uZyAqKW0ubWFwLmh2YTtcbiBcbiBcdC8qXG4gXHQgKiBUbyBrZWVwIHRoZSBjb250cm9sIGZsb3cgc2ltcGxlLCBwYXkgZWlnaHQgOC1ieXRlIHdyaXRlcyAoc2l4dGVlblxuQEAgLTgzNiw4ICYjNDM7ODM2LDYgQEAgc3RhdGljIGlubGluZSBib29sIG5lc3RlZF92bXhfcHJlcGFyZV9tc3JfYml0bWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcbiBcdG5lc3RlZF92bXhfbWVyZ2VfcG11X21zcl9iaXRtYXBzKHZjcHUsIG1zcl9iaXRtYXBfbDEsIG1zcl9iaXRtYXBfbDApO1xuIFxuLVx0a3ZtX3ZjcHVfdW5tYXAodmNwdSwgXHUwMDI2bWFwKTtcbi1cbiBcdHZteC1cdTAwM2VuZXN0ZWQuZm9yY2VfbXNyX2JpdG1hcF9yZWNhbGMgPSBmYWxzZTtcbiBcbiBcdHJldHVybiB0cnVlO1xuQEAgLTUwNjYsOCAmIzQzOzUwNjQsOSBAQCB2b2lkIF9fbmVzdGVkX3ZteF92bWV4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgdm1fZXhpdF9yZWFzb24sXG4gXHQvKiB0cnlpbmcgdG8gY2FuY2VsIHZtbGF1bmNoL3ZtcmVzdW1lIGlzIGEgYnVnICovXG4gXHRrdm1fd2Fybl9vbl9uZXN0ZWRfcnVuX3BlbmRpbmcodmNwdSk7XG4gXG4tI2lmZGVmIENPTkZJR19LVk1fSFlQRVJWXG4mIzQzO1x0LyogTm90ZSwgXCYjMzQ7Y2hlY2tpbmdcJiMzNDsgdGhlIHJlcXVlc3QgYWxzbyBjbGVhcnMgdGhlIHJlcXVlc3QuICovXG4gXHRpZiAoa3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9HRVRfTkVTVEVEX1NUQVRFX1BBR0VTLCB2Y3B1KSkge1xuJiM0MzsjaWZkZWYgQ09ORklHX0tWTV9IWVBFUlZcbiBcdFx0LypcbiBcdFx0ICogS1ZNX1JFUV9HRVRfTkVTVEVEX1NUQVRFX1BBR0VTIGlzIGFsc28gdXNlZCB0byBtYXBcbiBcdFx0ICogRW5saWdodGVuZWQgVk1DUyBhZnRlciBtaWdyYXRpb24gYW5kIHdlIHN0aWxsIG5lZWQgdG9cbkBAIC01MDc1LDggJiM0Mzs1MDc0LDggQEAgdm9pZCBfX25lc3RlZF92bXhfdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIHZtX2V4aXRfcmVhc29uLFxuIFx0XHQgKiB0aGUgZmlyc3QgTDIgcnVuLlxuIFx0XHQgKi9cbiBcdFx0KHZvaWQpbmVzdGVkX2dldF9ldm1jc19wYWdlKHZjcHUpO1xuLVx0fVxuICNlbmRpZlxuJiM0MztcdH1cbiBcbiBcdC8qIFNlcnZpY2UgcGVuZGluZyBUTEIgZmx1c2ggcmVxdWVzdHMgZm9yIEwyIGJlZm9yZSBzd2l0Y2hpbmcgdG8gTDEuICovXG4gXHRrdm1fc2VydmljZV9sb2NhbF90bGJfZmx1c2hfcmVxdWVzdHModmNwdSk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXG5pbmRleCA5ZGI2ZWI0MDIzYzQ4Zi4uYzU0ZGJmZGJjMzQ2YzggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuQEAgLTE0MjAsNiAmIzQzOzE0MjAsMjUgQEAgc3RhdGljIGlubGluZSB2b2lkIGt2bV92Y3B1X21hcF9tYXJrX2RpcnR5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdFx0a3ZtX3ZjcHVfbWFya19wYWdlX2RpcnR5KHZjcHUsIG1hcC1cdTAwM2VnZm4pO1xuIH1cbiBcbiYjNDM7dHlwZWRlZiBzdHJ1Y3Qge1xuJiM0MztcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbiYjNDM7XHRzdHJ1Y3Qga3ZtX2hvc3RfbWFwIG1hcDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0Mzt9IGt2bV92Y3B1X2xvY2FsX21hcF90O1xuJiM0MztcbiYjNDM7I2RlZmluZSBERUZJTkVfVkNQVV9NQVBfQ0xBU1Mocm8pXHRcdFx0XHRcdFxcXG4mIzQzO0RFRklORV9DTEFTUyhrdm1fdmNwdV9tYXBfbG9jYWwjI3JvLCBrdm1fdmNwdV9sb2NhbF9tYXBfdCxcdFx0XFxcbiYjNDM7XHQgICAgIGlmICghX1QucmV0KSBrdm1fdmNwdV91bm1hcChfVC52Y3B1LCBcdTAwMjZfVC5tYXApLFx0XHRcXFxuJiM0MztcdCAgICAgKHtcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdGt2bV92Y3B1X2xvY2FsX21hcF90IG0gPSB7IC52Y3B1ID0gdmNwdSB9O1x0XHRcXFxuJiM0MztcdFx0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdFx0bS5yZXQgPSBrdm1fdmNwdV9tYXAjI3JvKHZjcHUsIGdmbiwgXHUwMDI2bS5tYXApO1x0XHRcXFxuJiM0MztcdFx0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdFx0bTtcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0ICAgICB9KSwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBnZm5fdCBnZm4pO1xuJiM0MztERUZJTkVfVkNQVV9NQVBfQ0xBU1MoKTtcbiYjNDM7REVGSU5FX1ZDUFVfTUFQX0NMQVNTKF9yZWFkb25seSk7XG4mIzQzO1xuIHVuc2lnbmVkIGxvbmcga3ZtX3ZjcHVfZ2ZuX3RvX2h2YShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGdmbik7XG4gdW5zaWduZWQgbG9uZyBrdm1fdmNwdV9nZm5fdG9faHZhX3Byb3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBnZm5fdCBnZm4sIGJvb2wgKndyaXRhYmxlKTtcbiBpbnQga3ZtX3ZjcHVfcmVhZF9ndWVzdF9wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ2ZuX3QgZ2ZuLCB2b2lkICpkYXRhLCBpbnQgb2Zmc2V0LFxuZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2t2bV9tYWluLmMgYi92aXJ0L2t2bS9rdm1fbWFpbi5jXG5pbmRleCAyZGY4ZWU5ZWNmNmM2ZC4uZTllMzI2ODZlNDFiZTQgMTAwNjQ0XG4tLS0gYS92aXJ0L2t2bS9rdm1fbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi92aXJ0L2t2bS9rdm1fbWFpbi5jXG5AQCAtMzExOCw2ICYjNDM7MzExOCw5IEBAIGludCBfX2t2bV92Y3B1X21hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGdmbiwgc3RydWN0IGt2bV9ob3N0X21hcCAqbWFwLFxuIFx0XHQucGluID0gdHJ1ZSxcbiBcdH07XG4gXG4mIzQzO1x0aWYgKFdBUk5fT05fT05DRShtYXAtXHUwMDNlaHZhKSlcbiYjNDM7XHRcdGt2bV92Y3B1X3VubWFwKHZjcHUsIG1hcCk7XG4mIzQzO1xuIFx0bWFwLVx1MDAzZXBpbm5lZF9wYWdlID0gTlVMTDtcbiBcdG1hcC1cdTAwM2VwYWdlID0gTlVMTDtcbiBcdG1hcC1cdTAwM2VodmEgPSBOVUxMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA1OjU3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OywKICAgICYjMzQ7S1ZNX1NNTSYjMzQ7LAogICAgJiMzNDtLVk1fSFlQRVJWJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmVzdGVkX3N2bV92bXJ1biYjMzQ7LAogICAgJiMzNDtuZXN0ZWRfc3ZtX3ZtZXhpdCYjMzQ7LAogICAgJiMzNDt2bWxvYWRfaW50ZXJjZXB0aW9uJiMzNDssCiAgICAmIzM0O3Ztc2F2ZV9pbnRlcmNlcHRpb24mIzM0OywKICAgICYjMzQ7c3ZtX2VudGVyX3NtbSYjMzQ7LAogICAgJiMzNDtzdm1fbGVhdmVfc21tJiMzNDssCiAgICAmIzM0O25lc3RlZF92bXhfZW50ZXJfbm9uX3Jvb3RfbW9kZSYjMzQ7LAogICAgJiMzNDtfX25lc3RlZF92bXhfdm1leGl0JiMzNDssCiAgICAmIzM0O3ZteF9zZXRfbmVzdGVkX3N0YXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgY2xlYW51cCBjbGFzcyBga3ZtX3ZjcHVfbWFwX2xvY2FsYCBhbmQgdXNlcyBpdCB0byByZXBsYWNlIG1hbnVhbCBga3ZtX3ZjcHVfbWFwYCBhbmQgYGt2bV92Y3B1X3VubWFwYCBjYWxscyBpbiBzZXZlcmFsIEtWTSBmdW5jdGlvbnMgYWNyb3NzIHg4NiAoU1ZNIGFuZCBWTVgpIGFuZCBQb3dlclBDIChCb29rM1MgUFIpLiBJdCBhbHNvIGZpeGVzIGEgYnVnIGluIGBfX25lc3RlZF92bXhfdm1leGl0YCB3aGVyZSBga3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9HRVRfTkVTVEVEX1NUQVRFX1BBR0VTLCB2Y3B1KWAgd2FzIG9ubHkgY2FsbGVkIHdoZW4gYENPTkZJR19LVk1fSFlQRVJWYCB3YXMgZW5hYmxlZCwgYnV0IGNoZWNraW5nIHRoZSByZXF1ZXN0IGFsc28gY2xlYXJzIGl0LCBzbyBpdCBzaG91bGQgYmUgY2FsbGVkIHVuY29uZGl0aW9uYWxseS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBjb3JlIEtWTSBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyBjbGVhbnVwIGNsYXNzIHdvcmtzIGNvcnJlY3RseSBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIG1lbW9yeSBsZWFrcyBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMsIGFuZCB0byB2ZXJpZnkgdGhlIGZpeCBpbiBgX19uZXN0ZWRfdm14X3ZtZXhpdGAuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiODgwNDg1YzFlMzE0OWM0N2M3NWFkYjFmZWJhYzUwMDljNTg2MzgzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBKdWwgMjUgMDU6NTc6MjYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wci5jIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYwppbmRleCAyYmEyZGQyNmE3ZWFkOC4uZGE3YTAzOGUyNzAwZDIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYwpAQCAtNjM5LDI3ICYjNDM7NjM5LDI0IEBAIHN0YXRpYyB2b2lkIGt2bXBwY19zZXRfcHZyX3ByKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIHB2cikKICAqLwogc3RhdGljIHZvaWQga3ZtcHBjX3BhdGNoX2RjYnooc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtcHBjX3B0ZSAqcHRlKQogewotCXN0cnVjdCBrdm1faG9zdF9tYXAgbWFwOwogCXU2NCBocGFnZV9vZmZzZXQ7CiAJdTMyICpwYWdlOwogCWludCBpLCByOwogCi0JciA9IGt2bV92Y3B1X21hcCh2Y3B1LCBwdGUtJmd0O3JhZGRyICZndDsmZ3Q7IFBBR0VfU0hJRlQsICZhbXA7bWFwKTsKLQlpZiAocikKJiM0MzsJQ0xBU1Moa3ZtX3ZjcHVfbWFwX2xvY2FsLCBtKSh2Y3B1LCBwdGUtJmd0O3JhZGRyICZndDsmZ3Q7IFBBR0VfU0hJRlQpOwomIzQzOwlpZiAobS5yZXQpCiAJCXJldHVybjsKIAogCWhwYWdlX29mZnNldCA9IHB0ZS0mZ3Q7cmFkZHIgJmFtcDsgflBBR0VfTUFTSzsKIAlocGFnZV9vZmZzZXQgJmFtcDs9IH4weEZGRlVMTDsKIAlocGFnZV9vZmZzZXQgLz0gNDsKIAotCXBhZ2UgPSBtYXAuaHZhOwomIzQzOwlwYWdlID0gbS5tYXAuaHZhOwogCiAJLyogcGF0Y2ggZGNieiBpbnRvIHJlc2VydmVkIGluc3RydWN0aW9uLCBzbyB3ZSB0cmFwICovCiAJZm9yIChpPWhwYWdlX29mZnNldDsgaSAmbHQ7IGhwYWdlX29mZnNldCAmIzQzOyAoSFdfUEFHRV9TSVpFIC8gNCk7IGkmIzQzOyYjNDM7KQogCQlpZiAoKGJlMzJfdG9fY3B1KHBhZ2VbaV0pICZhbXA7IDB4ZmYwMDA3ZmYpID09IElOU19EQ0JaKQogCQkJcGFnZVtpXSAmYW1wOz0gY3B1X3RvX2JlMzIoMHhmZmZmZmZmNyk7Ci0KLQlrdm1fdmNwdV91bm1hcCh2Y3B1LCAmYW1wO21hcCk7CiB9CiAKIHN0YXRpYyBib29sIGt2bXBwY192aXNpYmxlX2dwYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jCmluZGV4IDVlM2UyODBjZDQ4M2UzLi43M2YzN2IwNTBkMGEwYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jCkBAIC0xMDg2LDE0ICYjNDM7MTA4NiwxNCBAQCBpbnQgZW50ZXJfc3ZtX2d1ZXN0X21vZGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdm1jYjEyX2dwYSwgYm9vbCBmcm9tX3ZtcnVuKQogc3RhdGljIGludCBuZXN0ZWRfc3ZtX2NvcHlfdm1jYjEyX3RvX2NhY2hlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHZtY2IxMl9ncGEpCiB7CiAJc3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7Ci0Jc3RydWN0IGt2bV9ob3N0X21hcCBtYXA7CiAJc3RydWN0IHZtY2IgKnZtY2IxMjsKIAlpbnQgciA9IDA7CiAKLQlpZiAoa3ZtX3ZjcHVfbWFwKHZjcHUsIGdwYV90b19nZm4odm1jYjEyX2dwYSksICZhbXA7bWFwKSkKJiM0MzsJQ0xBU1Moa3ZtX3ZjcHVfbWFwX2xvY2FsLCBtKSh2Y3B1LCBncGFfdG9fZ2ZuKHZtY2IxMl9ncGEpKTsKJiM0MzsJaWYgKG0ucmV0KQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCXZtY2IxMiA9IG1hcC5odmE7CiYjNDM7CXZtY2IxMiA9IG0ubWFwLmh2YTsKIAluZXN0ZWRfY29weV92bWNiX2NvbnRyb2xfdG9fY2FjaGUoc3ZtLCAmYW1wO3ZtY2IxMi0mZ3Q7Y29udHJvbCk7CiAJbmVzdGVkX2NvcHlfdm1jYl9zYXZlX3RvX2NhY2hlKHN2bSwgJmFtcDt2bWNiMTItJmd0O3NhdmUpOwogCkBAIC0xMTA3LDcgJiM0MzsxMTA3LDYgQEAgc3RhdGljIGludCBuZXN0ZWRfc3ZtX2NvcHlfdm1jYjEyX3RvX2NhY2hlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHZtY2IxMl9ncGEKIAkJciA9IC1FSU5WQUw7CiAJfQogCi0Ja3ZtX3ZjcHVfdW5tYXAodmNwdSwgJmFtcDttYXApOwogCXJldHVybiByOwogfQogCkBAIC0xMjUxLDE1ICYjNDM7MTI1MCwxMyBAQCBzdGF0aWMgaW50IG5lc3RlZF9zdm1fdm1leGl0X3VwZGF0ZV92bWNiMTIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCXN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpOwogCXN0cnVjdCB2bWNiICp2bWNiMDIgPSBzdm0tJmd0O25lc3RlZC52bWNiMDIucHRyOwotCXN0cnVjdCBrdm1faG9zdF9tYXAgbWFwOwogCXN0cnVjdCB2bWNiICp2bWNiMTI7Ci0JaW50IHJjOwogCi0JcmMgPSBrdm1fdmNwdV9tYXAodmNwdSwgZ3BhX3RvX2dmbihzdm0tJmd0O25lc3RlZC52bWNiMTJfZ3BhKSwgJmFtcDttYXApOwotCWlmIChyYykKLQkJcmV0dXJuIHJjOwomIzQzOwlDTEFTUyhrdm1fdmNwdV9tYXBfbG9jYWwsIG0pKHZjcHUsIGdwYV90b19nZm4oc3ZtLSZndDtuZXN0ZWQudm1jYjEyX2dwYSkpOwomIzQzOwlpZiAobS5yZXQpCiYjNDM7CQlyZXR1cm4gbS5yZXQ7CiAKLQl2bWNiMTIgPSBtYXAuaHZhOwomIzQzOwl2bWNiMTIgPSBtLm1hcC5odmE7CiAKIAl2bWNiMTItJmd0O3NhdmUuZXMgICAgID0gdm1jYjAyLSZndDtzYXZlLmVzOwogCXZtY2IxMi0mZ3Q7c2F2ZS5jcyAgICAgPSB2bWNiMDItJmd0O3NhdmUuY3M7CkBAIC0xMzE0LDcgJiM0MzsxMzExLDYgQEAgc3RhdGljIGludCBuZXN0ZWRfc3ZtX3ZtZXhpdF91cGRhdGVfdm1jYjEyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAkJCQkgICAgICAgdm1jYjEyLSZndDtjb250cm9sLmV4aXRfaW50X2luZm9fZXJyLAogCQkJCSAgICAgICBLVk1fSVNBX1NWTSk7CiAKLQlrdm1fdmNwdV91bm1hcCh2Y3B1LCAmYW1wO21hcCk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jCmluZGV4IDkxMjg2ZDQ2ZDEzYWRiLi43YTQxN2U3MTdmZDkxZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jCkBAIC0yMjE2LDcgJiM0MzsyMjE2LDYgQEAgc3RhdGljIGludCB2bWxvYWRfdm1zYXZlX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgdm1sb2FkKQogCXU2NCB2bWNiMTJfZ3BhID0ga3ZtX3JheF9yZWFkKHZjcHUpOwogCXN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpOwogCXN0cnVjdCB2bWNiICp2bWNiMTI7Ci0Jc3RydWN0IGt2bV9ob3N0X21hcCBtYXA7CiAJaW50IHJldDsKIAogCWlmIChuZXN0ZWRfc3ZtX2NoZWNrX3Blcm1pc3Npb25zKHZjcHUpKQpAQCAtMjIyNywxMCAmIzQzOzIyMjYsMTEgQEAgc3RhdGljIGludCB2bWxvYWRfdm1zYXZlX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgdm1sb2FkKQogCQlyZXR1cm4gMTsKIAl9CiAKLQlpZiAoa3ZtX3ZjcHVfbWFwKHZjcHUsIGdwYV90b19nZm4odm1jYjEyX2dwYSksICZhbXA7bWFwKSkKJiM0MzsJQ0xBU1Moa3ZtX3ZjcHVfbWFwX2xvY2FsLCBtKSh2Y3B1LCBncGFfdG9fZ2ZuKHZtY2IxMl9ncGEpKTsKJiM0MzsJaWYgKG0ucmV0KQogCQlyZXR1cm4ga3ZtX2hhbmRsZV9tZW1vcnlfZmFpbHVyZSh2Y3B1LCBYODZFTVVMX0lPX05FRURFRCwgTlVMTCk7CiAKLQl2bWNiMTIgPSBtYXAuaHZhOwomIzQzOwl2bWNiMTIgPSBtLm1hcC5odmE7CiAKIAlyZXQgPSBrdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTsKIApAQCAtMjI0Myw4ICYjNDM7MjI0Myw2IEBAIHN0YXRpYyBpbnQgdm1sb2FkX3Ztc2F2ZV9pbnRlcmNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIHZtbG9hZCkKIAkJc3ZtX2NvcHlfdm1sb2Fkc2F2ZV9zdGF0ZSh2bWNiMTIsIHN2bS0mZ3Q7dm1jYjAxLnB0cik7CiAJfQogCi0Ja3ZtX3ZjcHVfdW5tYXAodmNwdSwgJmFtcDttYXApOwotCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNDk4OSw3ICYjNDM7NDk4Nyw2IEBAIHN0YXRpYyBpbnQgc3ZtX3NtaV9hbGxvd2VkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBmb3JfaW5qZWN0aW9uKQogc3RhdGljIGludCBzdm1fZW50ZXJfc21tKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5pb24ga3ZtX3NtcmFtICpzbXJhbSkKIHsKIAlzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTsKLQlzdHJ1Y3Qga3ZtX2hvc3RfbWFwIG1hcF9zYXZlOwogCiAJaWYgKCFpc19ndWVzdF9tb2RlKHZjcHUpKQogCQlyZXR1cm4gMDsKQEAgLTUwMjMsMjQgJiM0Mzs1MDIwLDIwIEBAIHN0YXRpYyBpbnQgc3ZtX2VudGVyX3NtbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuaW9uIGt2bV9zbXJhbSAqc21yYW0pCiAJICogdGhhdCwgc2VlIHN2bV9wcmVwYXJlX3N3aXRjaF90b19ndWVzdCgpKSB3aGljaCBtdXN0IGJlCiAJICogcHJlc2VydmVkLgogCSAqLwotCWlmIChrdm1fdmNwdV9tYXAodmNwdSwgZ3BhX3RvX2dmbihzdm0tJmd0O25lc3RlZC5oc2F2ZV9tc3IpLCAmYW1wO21hcF9zYXZlKSkKJiM0MzsJQ0xBU1Moa3ZtX3ZjcHVfbWFwX2xvY2FsLCBtX3NhdmUpKHZjcHUsIGdwYV90b19nZm4oc3ZtLSZndDtuZXN0ZWQuaHNhdmVfbXNyKSk7CiYjNDM7CWlmIChtX3NhdmUucmV0KQogCQlyZXR1cm4gMTsKIAogCUJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3Qgdm1jYiwgc2F2ZSkgIT0gMHg0MDApOwogCi0Jc3ZtX2NvcHlfdm1ydW5fc3RhdGUobWFwX3NhdmUuaHZhICYjNDM7IDB4NDAwLAotCQkJICAgICAmYW1wO3N2bS0mZ3Q7dm1jYjAxLnB0ci0mZ3Q7c2F2ZSk7Ci0KLQlrdm1fdmNwdV91bm1hcCh2Y3B1LCAmYW1wO21hcF9zYXZlKTsKJiM0MzsJc3ZtX2NvcHlfdm1ydW5fc3RhdGUobV9zYXZlLm1hcC5odmEgJiM0MzsgMHg0MDAsICZhbXA7c3ZtLSZndDt2bWNiMDEucHRyLSZndDtzYXZlKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBzdm1fbGVhdmVfc21tKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgY29uc3QgdW5pb24ga3ZtX3NtcmFtICpzbXJhbSkKIHsKIAlzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTsKLQlzdHJ1Y3Qga3ZtX2hvc3RfbWFwIG1hcCwgbWFwX3NhdmU7CiAJc3RydWN0IHZtY2IgKnZtY2IxMjsKLQlpbnQgcmV0OwogCiAJY29uc3Qgc3RydWN0IGt2bV9zbXJhbV9zdGF0ZV82NCAqc21yYW02NCA9ICZhbXA7c21yYW0tJmd0O3NtcmFtNjQ7CiAKQEAgLTUwNTcsMjIgJiM0Mzs1MDUwLDIzIEBAIHN0YXRpYyBpbnQgc3ZtX2xlYXZlX3NtbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGNvbnN0IHVuaW9uIGt2bV9zbXJhbSAqc21yYW0pCiAJaWYgKCEoc21yYW02NC0mZ3Q7ZWZlciAmYW1wOyBFRkVSX1NWTUUpKQogCQlyZXR1cm4gMTsKIAotCWlmIChrdm1fdmNwdV9tYXAodmNwdSwgZ3BhX3RvX2dmbihzbXJhbTY0LSZndDtzdm1fZ3Vlc3Rfdm1jYl9ncGEpLCAmYW1wO21hcCkpCiYjNDM7CUNMQVNTKGt2bV92Y3B1X21hcF9sb2NhbCwgbSkodmNwdSwgZ3BhX3RvX2dmbihzbXJhbTY0LSZndDtzdm1fZ3Vlc3Rfdm1jYl9ncGEpKTsKJiM0MzsJaWYgKG0ucmV0KQogCQlyZXR1cm4gMTsKIAotCXJldCA9IDE7Ci0JaWYgKGt2bV92Y3B1X21hcCh2Y3B1LCBncGFfdG9fZ2ZuKHN2bS0mZ3Q7bmVzdGVkLmhzYXZlX21zciksICZhbXA7bWFwX3NhdmUpKQotCQlnb3RvIHVubWFwX21hcDsKJiM0MzsJQ0xBU1Moa3ZtX3ZjcHVfbWFwX2xvY2FsLCBtX3NhdmUpKHZjcHUsIGdwYV90b19nZm4oc3ZtLSZndDtuZXN0ZWQuaHNhdmVfbXNyKSk7CiYjNDM7CWlmIChtX3NhdmUucmV0KQomIzQzOwkJcmV0dXJuIDE7CiAKIAlpZiAoc3ZtX2FsbG9jYXRlX25lc3RlZChzdm0pKQotCQlnb3RvIHVubWFwX3NhdmU7CiYjNDM7CQlyZXR1cm4gMTsKIAogCS8qCiAJICogUmVzdG9yZSBMMSBob3N0IHN0YXRlIGZyb20gTDEgSFNBVkUgYXJlYSBhcyBWTUNCMDEgd2FzCiAJICogdXNlZCBkdXJpbmcgU01NIChzZWUgc3ZtX2VudGVyX3NtbSgpKQogCSAqLwogCi0Jc3ZtX2NvcHlfdm1ydW5fc3RhdGUoJmFtcDtzdm0tJmd0O3ZtY2IwMS5wdHItJmd0O3NhdmUsIG1hcF9zYXZlLmh2YSAmIzQzOyAweDQwMCk7CiYjNDM7CXN2bV9jb3B5X3ZtcnVuX3N0YXRlKCZhbXA7c3ZtLSZndDt2bWNiMDEucHRyLSZndDtzYXZlLCBtX3NhdmUubWFwLmh2YSAmIzQzOyAweDQwMCk7CiAKIAkvKgogCSAqIEVudGVyIHRoZSBuZXN0ZWQgZ3Vlc3Qgbm93CkBAIC01MDgwLDI0ICYjNDM7NTA3NCwxOCBAQCBzdGF0aWMgaW50IHN2bV9sZWF2ZV9zbW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBjb25zdCB1bmlvbiBrdm1fc21yYW0gKnNtcmFtKQogCiAJdm1jYl9tYXJrX2FsbF9kaXJ0eShzdm0tJmd0O3ZtY2IwMS5wdHIpOwogCi0Jdm1jYjEyID0gbWFwLmh2YTsKJiM0MzsJdm1jYjEyID0gbS5tYXAuaHZhOwogCW5lc3RlZF9jb3B5X3ZtY2JfY29udHJvbF90b19jYWNoZShzdm0sICZhbXA7dm1jYjEyLSZndDtjb250cm9sKTsKIAluZXN0ZWRfY29weV92bWNiX3NhdmVfdG9fY2FjaGUoc3ZtLCAmYW1wO3ZtY2IxMi0mZ3Q7c2F2ZSk7CiAKIAlpZiAobmVzdGVkX3N2bV9jaGVja19jYWNoZWRfdm1jYjEyKHZjcHUpICZsdDsgMCkKLQkJZ290byB1bm1hcF9zYXZlOwomIzQzOwkJcmV0dXJuIDE7CiAKIAlpZiAoZW50ZXJfc3ZtX2d1ZXN0X21vZGUodmNwdSwgc21yYW02NC0mZ3Q7c3ZtX2d1ZXN0X3ZtY2JfZ3BhLCBmYWxzZSkgIT0gMCkKLQkJZ290byB1bm1hcF9zYXZlOwomIzQzOwkJcmV0dXJuIDE7CiAKLQlyZXQgPSAwOwogCXZjcHUtJmd0O2FyY2gubmVzdGVkX3J1bl9wZW5kaW5nID0gS1ZNX05FU1RFRF9SVU5fUEVORElORzsKLQotdW5tYXBfc2F2ZToKLQlrdm1fdmNwdV91bm1hcCh2Y3B1LCAmYW1wO21hcF9zYXZlKTsKLXVubWFwX21hcDoKLQlrdm1fdmNwdV91bm1hcCh2Y3B1LCAmYW1wO21hcCk7Ci0JcmV0dXJuIHJldDsKJiM0MzsJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIHN2bV9lbmFibGVfc21pX3dpbmRvdyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jIGIvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYwppbmRleCBiNTQ2MGRlNGIxYTcyZi4uZWY3OTc2OWM2Mjg3MTggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYwpAQCAtNzMwLDcgJiM0Mzs3MzAsNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbmVzdGVkX3ZteF9wcmVwYXJlX21zcl9iaXRtYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCWludCBtc3I7CiAJdW5zaWduZWQgbG9uZyAqbXNyX2JpdG1hcF9sMTsKIAl1bnNpZ25lZCBsb25nICptc3JfYml0bWFwX2wwID0gdm14LSZndDtuZXN0ZWQudm1jczAyLm1zcl9iaXRtYXA7Ci0Jc3RydWN0IGt2bV9ob3N0X21hcCBtYXA7CiAKIAkvKiBOb3RoaW5nIHRvIGRvIGlmIHRoZSBNU1IgYml0bWFwIGlzIG5vdCBpbiB1c2UuICAqLwogCWlmICghY3B1X2hhc192bXhfbXNyX2JpdG1hcCgpIHx8CkBAIC03NTMsMTAgJiM0Mzs3NTIsMTEgQEAgc3RhdGljIGlubGluZSBib29sIG5lc3RlZF92bXhfcHJlcGFyZV9tc3JfYml0bWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAkJCXJldHVybiB0cnVlOwogCX0KIAotCWlmIChrdm1fdmNwdV9tYXBfcmVhZG9ubHkodmNwdSwgZ3BhX3RvX2dmbih2bWNzMTItJmd0O21zcl9iaXRtYXApLCAmYW1wO21hcCkpCiYjNDM7CUNMQVNTKGt2bV92Y3B1X21hcF9sb2NhbF9yZWFkb25seSwgbSkodmNwdSwgZ3BhX3RvX2dmbih2bWNzMTItJmd0O21zcl9iaXRtYXApKTsKJiM0MzsJaWYgKG0ucmV0KQogCQlyZXR1cm4gZmFsc2U7CiAKLQltc3JfYml0bWFwX2wxID0gKHVuc2lnbmVkIGxvbmcgKiltYXAuaHZhOwomIzQzOwltc3JfYml0bWFwX2wxID0gKHVuc2lnbmVkIGxvbmcgKiltLm1hcC5odmE7CiAKIAkvKgogCSAqIFRvIGtlZXAgdGhlIGNvbnRyb2wgZmxvdyBzaW1wbGUsIHBheSBlaWdodCA4LWJ5dGUgd3JpdGVzIChzaXh0ZWVuCkBAIC04MzYsOCAmIzQzOzgzNiw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBuZXN0ZWRfdm14X3ByZXBhcmVfbXNyX2JpdG1hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAKIAluZXN0ZWRfdm14X21lcmdlX3BtdV9tc3JfYml0bWFwcyh2Y3B1LCBtc3JfYml0bWFwX2wxLCBtc3JfYml0bWFwX2wwKTsKIAotCWt2bV92Y3B1X3VubWFwKHZjcHUsICZhbXA7bWFwKTsKLQogCXZteC0mZ3Q7bmVzdGVkLmZvcmNlX21zcl9iaXRtYXBfcmVjYWxjID0gZmFsc2U7CiAKIAlyZXR1cm4gdHJ1ZTsKQEAgLTUwNjYsOCAmIzQzOzUwNjQsOSBAQCB2b2lkIF9fbmVzdGVkX3ZteF92bWV4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgdm1fZXhpdF9yZWFzb24sCiAJLyogdHJ5aW5nIHRvIGNhbmNlbCB2bWxhdW5jaC92bXJlc3VtZSBpcyBhIGJ1ZyAqLwogCWt2bV93YXJuX29uX25lc3RlZF9ydW5fcGVuZGluZyh2Y3B1KTsKIAotI2lmZGVmIENPTkZJR19LVk1fSFlQRVJWCiYjNDM7CS8qIE5vdGUsICYjMzQ7Y2hlY2tpbmcmIzM0OyB0aGUgcmVxdWVzdCBhbHNvIGNsZWFycyB0aGUgcmVxdWVzdC4gKi8KIAlpZiAoa3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9HRVRfTkVTVEVEX1NUQVRFX1BBR0VTLCB2Y3B1KSkgewomIzQzOyNpZmRlZiBDT05GSUdfS1ZNX0hZUEVSVgogCQkvKgogCQkgKiBLVk1fUkVRX0dFVF9ORVNURURfU1RBVEVfUEFHRVMgaXMgYWxzbyB1c2VkIHRvIG1hcAogCQkgKiBFbmxpZ2h0ZW5lZCBWTUNTIGFmdGVyIG1pZ3JhdGlvbiBhbmQgd2Ugc3RpbGwgbmVlZCB0bwpAQCAtNTA3NSw4ICYjNDM7NTA3NCw4IEBAIHZvaWQgX19uZXN0ZWRfdm14X3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiB2bV9leGl0X3JlYXNvbiwKIAkJICogdGhlIGZpcnN0IEwyIHJ1bi4KIAkJICovCiAJCSh2b2lkKW5lc3RlZF9nZXRfZXZtY3NfcGFnZSh2Y3B1KTsKLQl9CiAjZW5kaWYKJiM0MzsJfQogCiAJLyogU2VydmljZSBwZW5kaW5nIFRMQiBmbHVzaCByZXF1ZXN0cyBmb3IgTDIgYmVmb3JlIHN3aXRjaGluZyB0byBMMS4gKi8KIAlrdm1fc2VydmljZV9sb2NhbF90bGJfZmx1c2hfcmVxdWVzdHModmNwdSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKaW5kZXggOWRiNmViNDAyM2M0OGYuLmM1NGRiZmRiYzM0NmM4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oCkBAIC0xNDIwLDYgJiM0MzsxNDIwLDI1IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fdmNwdV9tYXBfbWFya19kaXJ0eShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJCWt2bV92Y3B1X21hcmtfcGFnZV9kaXJ0eSh2Y3B1LCBtYXAtJmd0O2dmbik7CiB9CiAKJiM0Mzt0eXBlZGVmIHN0cnVjdCB7CiYjNDM7CXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKJiM0MzsJc3RydWN0IGt2bV9ob3N0X21hcCBtYXA7CiYjNDM7CWludCByZXQ7CiYjNDM7fSBrdm1fdmNwdV9sb2NhbF9tYXBfdDsKJiM0MzsKJiM0MzsjZGVmaW5lIERFRklORV9WQ1BVX01BUF9DTEFTUyhybykJCQkJCVwKJiM0MztERUZJTkVfQ0xBU1Moa3ZtX3ZjcHVfbWFwX2xvY2FsIyNybywga3ZtX3ZjcHVfbG9jYWxfbWFwX3QsCQlcCiYjNDM7CSAgICAgaWYgKCFfVC5yZXQpIGt2bV92Y3B1X3VubWFwKF9ULnZjcHUsICZhbXA7X1QubWFwKSwJCVwKJiM0MzsJICAgICAoewkJCQkJCQkJXAomIzQzOwkJa3ZtX3ZjcHVfbG9jYWxfbWFwX3QgbSA9IHsgLnZjcHUgPSB2Y3B1IH07CQlcCiYjNDM7CQkJCQkJCQkJXAomIzQzOwkJbS5yZXQgPSBrdm1fdmNwdV9tYXAjI3JvKHZjcHUsIGdmbiwgJmFtcDttLm1hcCk7CQlcCiYjNDM7CQkJCQkJCQkJXAomIzQzOwkJbTsJCQkJCQkJXAomIzQzOwkgICAgIH0pLCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGdmbik7CiYjNDM7REVGSU5FX1ZDUFVfTUFQX0NMQVNTKCk7CiYjNDM7REVGSU5FX1ZDUFVfTUFQX0NMQVNTKF9yZWFkb25seSk7CiYjNDM7CiB1bnNpZ25lZCBsb25nIGt2bV92Y3B1X2dmbl90b19odmEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBnZm5fdCBnZm4pOwogdW5zaWduZWQgbG9uZyBrdm1fdmNwdV9nZm5fdG9faHZhX3Byb3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBnZm5fdCBnZm4sIGJvb2wgKndyaXRhYmxlKTsKIGludCBrdm1fdmNwdV9yZWFkX2d1ZXN0X3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBnZm5fdCBnZm4sIHZvaWQgKmRhdGEsIGludCBvZmZzZXQsCmRpZmYgLS1naXQgYS92aXJ0L2t2bS9rdm1fbWFpbi5jIGIvdmlydC9rdm0va3ZtX21haW4uYwppbmRleCAyZGY4ZWU5ZWNmNmM2ZC4uZTllMzI2ODZlNDFiZTQgMTAwNjQ0Ci0tLSBhL3ZpcnQva3ZtL2t2bV9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvdmlydC9rdm0va3ZtX21haW4uYwpAQCAtMzExOCw2ICYjNDM7MzExOCw5IEBAIGludCBfX2t2bV92Y3B1X21hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGdmbiwgc3RydWN0IGt2bV9ob3N0X21hcCAqbWFwLAogCQkucGluID0gdHJ1ZSwKIAl9OwogCiYjNDM7CWlmIChXQVJOX09OX09OQ0UobWFwLSZndDtodmEpKQomIzQzOwkJa3ZtX3ZjcHVfdW5tYXAodmNwdSwgbWFwKTsKJiM0MzsKIAltYXAtJmd0O3Bpbm5lZF9wYWdlID0gTlVMTDsKIAltYXAtJmd0O3BhZ2UgPSBOVUxMOwogCW1hcC0mZ3Q7aHZhID0gTlVMTDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDU6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjk4NQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDY1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLVk0gUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgaW50cm9kdWNlcyBgREVGSU5FX1ZDUFVfTUFQX0NMQVNTYCBhbmQgbGV2ZXJhZ2VzIGBDTEFTUyhrdm1fdmNwdV9tYXBfbG9jYWwsIG0pYCB0byBtYW5hZ2UgcmVzb3VyY2UgY2xlYW51cCB3aXRoaW4gdGhlIEtWTSBjb2RlLiBFc3NlbnRpYWxseSwgaXQmIzM5O3MgcmVwbGFjaW5nIG1hbnVhbCBtYXBwaW5nL3VubWFwcGluZyB3aXRoIGEgY2xhc3MgdGhhdCBoYW5kbGVzIHVubWFwcGluZyBhdXRvbWF0aWNhbGx5IHdoZW4gaXQgZ29lcyBvdXQgb2Ygc2NvcGUsIGEgZ29vZCBob3VzZWtlZXBpbmcgaW1wcm92ZW1lbnQuIFRoaXMgY2xhc3MgaXMgYmVpbmcgZGVwbG95ZWQgYWNyb3NzIHNldmVyYWwgYXJjaGl0ZWN0dXJlcyBhbmQgZnVuY3Rpb25zOiBgYm9vazNzX3ByLmNgJiMzOTtzIGBrdm1wcGNfcGF0Y2hfZGNiemAsIHNvbWUgbmVzdGVkIFNWTS9WTVggZnVuY3Rpb25zIGxpa2UgYG5lc3RlZF9zdm1fY29weV92bWNiMTJfdG9fY2FjaGVgLCBgbmVzdGVkX3N2bV92bWV4aXRfdXBkYXRlX3ZtY2IxMmAsICBgdm1sb2FkX3Ztc2F2ZV9pbnRlcmNlcHRpb25gLCBgc3ZtX2VudGVyX3NtbWAsIGBzdm1fbGVhdmVfc21tYCwgYG5lc3RlZF92bXhfcHJlcGFyZV9tc3JfYml0bWFwYCwgYF9fbmVzdGVkX3ZteF92bWV4aXRgLCBhbmQgYF9fa3ZtX3ZjcHVfbWFwYC4KClRoZSBwYXRjaCBhbHNvIGhhcyBhIGZpeCBmb3IgYF9fbmVzdGVkX3ZteF92bWV4aXRgIHdoZXJlIGBrdm1fY2hlY2tfcmVxdWVzdGAgd2FzIGNvbmRpdGlvbmFsbHkgY2FsbGVkLCBidXQgbm93IGl0JiMzOTtzIGNhbGxlZCB1bmNvbmRpdGlvbmFsbHksIHdoaWNoIEkgc3VzcGVjdCBoYXMgaW1wbGljYXRpb25zIGZvciByZXF1ZXN0IGhhbmRsaW5nLCBlc3BlY2lhbGx5IGdpdmVuIHRoYXQgY2hlY2tpbmcgdGhlIHJlcXVlc3QgYWxzbyBjbGVhcnMgaXQuIFRoYXQmIzM5O3MgYSBkZWZpbml0ZSBwb2ludCBvZiBpbnRlcmVzdC4KCk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbjogSXMgdGhpcyBmdXp6LXdvcnRoeT8gQWJzb2x1dGVseS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBub3QganVzdCBhIHJlZmFjdG9yaW5nLiBUaGUgdXNlIG9mIHRoaXMgY2xlYW51cCBjbGFzcyBpbiBuZXN0ZWQgU1ZNLCBWTVgsIGFuZCBCb29rM1MgUFIsIHBsdXMgdGhlIGZpeCBpbiBgX19uZXN0ZWRfdm14X3ZtZXhpdGAsIG1lYW5zIHdlIGNvdWxkIHBvdGVudGlhbGx5IGV4cG9zZSBzb21lIGludGVyZXN0aW5nIGJ1Z3MuIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRob3NlIGtleSBmdW5jdGlvbnMgd2hlcmUgdGhlIG5ldyBjbGVhbnVwIGNsYXNzIGlzIHVzZWQgYW5kIHRoZSBidWcgZml4IGlzIGltcGxlbWVudGVkLgoKR2l2ZW4gdGhlIGFyY2hpdGVjdHVyZSBjb3ZlcmFnZSwgSSYjMzk7bGwgbmVlZCB0byBmb2N1cyBvbiB0aGUgeDg2IHBhcnRzLCB3aXRoIGBLVk1gLCBgS1ZNX0FNRGAsIGFuZCBgS1ZNX0lOVEVMYCBlbmFibGVkLCBidXQgSSBzaG91bGQgYWxzbyByZXZpZXcgYEtWTV9CT09LM1NfNjRfUFJgIGFzIHBhcnQgb2YgdGhlIGNvdmVyYWdlLiBUaW1lIHRvIGNoZWNrIHRob3NlIEtjb25maWcgZmlsZXMsIGFuZCB0aGVuIGJ1aWxkIGEgZnV6emluZyB0YXJnZXQgdGhhdCBleGVyY2lzZXMgdGhlc2UgZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA1OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxuYXJjaC94ODYva3ZtL0tjb25maWctMTktXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNX1g4NlxuYXJjaC94ODYva3ZtL0tjb25maWctMjEtXHRkZWZfdHJpc3RhdGUgS1ZNIGlmIChLVk1fSU5URUwgIT0gbiB8fCBLVk1fQU1EICE9IG4pXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctNTEtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo1Mjpjb25maWcgS1ZNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01My1cdHRyaXN0YXRlIFwmIzM0O0tlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTY4LVxuYXJjaC94ODYva3ZtL0tjb25maWc6Njk6Y29uZmlnIEtWTV9XRVJST1JcbmFyY2gveDg2L2t2bS9LY29uZmlnLTcwLVx0Ym9vbCBcJiMzNDtDb21waWxlIEtWTSB3aXRoIC1XZXJyb3JcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjgzOmNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04NC1cdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctOTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo5Njpjb25maWcgS1ZNX0lOVEVMXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05Ny1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgSW50ZWwgKGFuZCBjb21wYXRpYmxlKSBwcm9jZXNzb3JzIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDYtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMDc6Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA4LSAgICAgICAgYm9vbCBcJiMzNDtDaGVjayB0aGF0IGd1ZXN0cyBkbyBub3QgcmVjZWl2ZSAjVkUgZXhjZXB0aW9uc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzQ6Y29uZmlnIEtWTV9JTlRFTF9URFhcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cdGJvb2wgXCYjMzQ7SW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE0Njpjb25maWcgS1ZNX0FNRFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ3LVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVx0Ym9vbCBcJiMzNDtBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTcxLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTcyOmNvbmZpZyBLVk1fSU9BUElDXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzMtXHRib29sIFwmIzM0O0kvTyBBUElDLCBQSUMsIGFuZCBQSVQgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTgxLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTgyOmNvbmZpZyBLVk1fU01NXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODMtXHRib29sIFwmIzM0O1N5c3RlbSBNYW5hZ2VtZW50IE1vZGUgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTkyLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTkzOmNvbmZpZyBLVk1fSFlQRVJWXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTQtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIE1pY3Jvc29mdCBIeXBlci1WIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwNi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwNzpjb25maWcgS1ZNX1hFTlxuYXJjaC94ODYva3ZtL0tjb25maWctMjA4LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBYZW4gaHlwZXJjYWxsIGludGVyZmFjZVwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIxNjpjb25maWcgS1ZNX1BST1ZFX01NVVxuYXJjaC94ODYva3ZtL0tjb25maWctMjE3LVx0Ym9vbCBcJiMzNDtQcm92ZSBLVk0gTU1VIGNvcnJlY3RuZXNzXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMjI4LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjI5OmNvbmZpZyBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMC1cdGJvb2xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzMjpjb25maWcgS1ZNX01BWF9OUl9WQ1BVU1xuYXJjaC94ODYva3ZtL0tjb25maWctMjMzLVx0aW50IFwmIzM0O01heGltdW0gbnVtYmVyIG9mIHZDUFVzIHBlciBLVk0gZ3Vlc3RcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwNTo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MzYyCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjoKCioqSW52ZXN0aWdhdGluZyBLVk0gQ29uZmlndXJhdGlvbiBQb3NzaWJpbGl0aWVzKioKCk9rYXksIHNvIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IEtWTSwgYW5kIGltbWVkaWF0ZWx5IG15IG1pbmQganVtcHMgdG8gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uczogYEtWTWAsIGBLVk1fQU1EYCwgYEtWTV9JTlRFTGAsIGBLVk1fU01NYCwgYW5kIGBLVk1fSFlQRVJWYC4gVGhlc2UgYXJlIHRoZSBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50cywgdGhlIGNvcmUgYnVpbGRpbmcgYmxvY2tzIGFuZCB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGZsYXZvcnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSBjb25maWd1cmF0aW9uIEkmIzM5O20gbG9va2luZyBmb3IgLSBgS1ZNX0JPT0szU182NF9QUmAgLSBleGlzdHMuIFRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpcyB0aGUgUG93ZXJQQyBLY29uZmlnIGZpbGUuIExldCYjMzk7cyBleGFtaW5lIGBhcmNoL3Bvd2VycGMva3ZtL0tjb25maWdgIHRvIHNlZSBpZiBgS1ZNX0JPT0szU182NF9QUmAgaXMgZGVmaW5lZCB0aGVyZS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBzb21lIGNvbnRleHQgYWJvdXQgaXRzIHB1cnBvc2UsIGRlcGVuZGVuY2llcywgYW5kIGlmIGl0JiMzOTtzIGV2ZW4gYSB2aWFibGUgb3B0aW9uIGZvciBjb25zaWRlcmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA1OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk1fQk9PSzNTXzY0X1BSJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZz03OT1jb25maWcgS1ZNX0JPT0szU182NF9IVlxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy05OS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxMDA6Y29uZmlnIEtWTV9CT09LM1NfNjRfUFJcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xMDEtXHR0cmlzdGF0ZSBcJiMzNDtLVk0gc3VwcG9ydCB3aXRob3V0IHVzaW5nIGh5cGVydmlzb3IgbW9kZSBpbiBob3N0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDU6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTc4MwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDEwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIGFuZCBDb2RlIENoYW5nZXMqKgoKT2theSwgc28gSSBzZWUgdGhpcyBwYXRjaCBpcyB3b3JraW5nIHdpdGggUG93ZXJQQywgZ2l2ZW4gdGhlIGBLVk1fQk9PSzNTXzY0X1BSYCBjb25maWd1cmF0aW9uLiBUaGF0JiMzOTtzIGdvb2QgdG8gY29uZmlybS4gTm93LCBsZXQmIzM5O3Mgc2VlIGFib3V0IHRoZXNlIGBLVk1fU01NYCBhbmQgYEtWTV9IWVBFUlZgIHNldHRpbmdzLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIHBhdGNoIGhhcyBhbnkgZGVwZW5kZW5jaWVzIG9uIHRob3NlIG9yIGlmIHRoZXkgYXJlIHJlbGV2YW50IGluIGFueSB3YXkuCgpUaGUgY29kZSBtb2RpZmljYXRpb25zIGFyZSBmb2N1c2luZyBvbiBgc3ZtX2VudGVyX3NtbWAgYW5kIGBzdm1fbGVhdmVfc21tYCwgd2hpY2ggSSBpbW1lZGlhdGVseSByZWNvZ25pemUgYXMgeDg2LXNwZWNpZmljLCBwYXJ0aWN1bGFybHkgdGhlIFNlY3VyZSBWaXJ0dWFsIE1hY2hpbmUgKFNWTSkgaW1wbGVtZW50YXRpb24uIFRob3NlIGZ1bmN0aW9ucyBhcmUgcmlnaHQgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdGhlbSB0byBiZSwgaW5zaWRlIGBhcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jYC4KClRoZSBrZXkgcXVlc3Rpb24gaXMgd2hldGhlciB0aGVzZSBjaGFuZ2VzIGFyZSBndWFyZGVkIGJ5IGBDT05GSUdfS1ZNX1NNTWAuIElmIHRoZXkgYXJlLCBpdCB3aWxsIGNvbnN0cmFpbiB0aGUgZmVhdHVyZXMsIHdoaWxlIGlmIG5vdCwgdGhlIGZlYXR1cmVzIHdpbGwgYmUgZW5hYmxlZCBmb3IgdGhlIEtWTSBidWlsZC4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIGFuZCBpbnRlbmRlZCB1c2Ugb2YgdGhlc2UgbW9kaWZpY2F0aW9ucy4gSSYjMzk7bGwgY2hlY2sgdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIGxpa2VseSB0aGUgS2NvbmZpZyBmaWxlcyB0byBkZXRlcm1pbmUgdGhlIGRlcGVuZGVuY3kuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDU6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3ZtX2VudGVyX3NtbSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bS9zdm0uYz00OTcxPXN0YXRpYyBpbnQgc3ZtX3NtaV9hbGxvd2VkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBmb3JfaW5qZWN0aW9uKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNDk4Ni1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6NDk4NzpzdGF0aWMgaW50IHN2bV9lbnRlcl9zbW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bmlvbiBrdm1fc21yYW0gKnNtcmFtKVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy00OTg4LXtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTUwMzM9c3RhdGljIGludCBzdm1fbGVhdmVfc21tKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgY29uc3QgdW5pb24ga3ZtX3NtcmFtICpzbXJhbSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTUwNjUtXHQgKiBSZXN0b3JlIEwxIGhvc3Qgc3RhdGUgZnJvbSBMMSBIU0FWRSBhcmVhIGFzIFZNQ0IwMSB3YXNcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6NTA2NjpcdCAqIHVzZWQgZHVyaW5nIFNNTSAoc2VlIHN2bV9lbnRlcl9zbW0oKSlcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNTA2Ny1cdCAqL1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9NTMwMj1zdHJ1Y3Qga3ZtX3g4Nl9vcHMgc3ZtX3g4Nl9vcHMgX19pbml0ZGF0YSA9IHtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTU0MTItXHQuc21pX2FsbG93ZWQgPSBzdm1fc21pX2FsbG93ZWQsXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjU0MTM6XHQuZW50ZXJfc21tID0gc3ZtX2VudGVyX3NtbSxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNTQxNC1cdC5sZWF2ZV9zbW0gPSBzdm1fbGVhdmVfc21tLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA1OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjM3CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGNyYWZ0ZWQgd2l0aCB0aGUgdW5kZXJzdGFuZGluZyB0aGF0IEkmIzM5O20gZGlzY3Vzc2luZyB0aGlzIHdpdGggYSBmZWxsb3cgZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIEtWTSwgU01NLCBhbmQgUG90ZW50aWFsIEh5cGVyLVYgSW50ZXJhY3Rpb25zKioKClJpZ2h0LCBzbyBpdCBhcHBlYXJzIHdlJiMzOTtyZSBhbHdheXMgZGVhbGluZyB3aXRoIGEgY29tcGlsZWQgZW52aXJvbm1lbnQsIHdoaWNoIG1ha2VzIHRoaW5ncyBhIGJpdCBjbGVhbmVyLCBidXQgU01NIGZ1bmN0aW9uYWxpdHkgYWJzb2x1dGVseSByZXF1aXJlcyBgS1ZNX1NNTWAuIEkmIzM5O20gaW1tZWRpYXRlbHkgdGhpbmtpbmcsICYjMzQ7T2theSwgdGhhdCYjMzk7cyBleHBlY3RlZC4gV2hlcmUgbWlnaHQgdGhpcyBiZSBpbnRlcmFjdGluZyB3aXRoIG90aGVyIHZpcnR1YWxpemF0aW9uIGxheWVycz8mIzM0OwoKVGhlIG5leHQgbG9naWNhbCBzdGVwLCBhdCBsZWFzdCBpbiBteSB0aG91Z2h0IHByb2Nlc3MsIGlzIHRvIGRpZyBpbnRvIGBDT05GSUdfS1ZNX0hZUEVSVmAuIEkgd2FudCB0byBzZWUgaWYgYF9fbmVzdGVkX3ZteF92bWV4aXRgIGlzIGRlZmluZWQsIG9yIHVzZWQgaW4gcmVsYXRpb24gdG8gdGhhdCBvcHRpb24sIHdoaWNoIGNvdWxkIHN1Z2dlc3QgZGVlcGVyIGludGVncmF0aW9uIHdpdGggSHlwZXItVi4gVGhpcyBpcyBhbGwgYWJvdXQgbG9va2luZyBmb3IgcG90ZW50aWFsIGhvb2tzIGFuZCBjb250cm9sIHBhdGhzLCBlc3BlY2lhbGx5IGFyb3VuZCBuZXN0ZWQgdmlydHVhbGl6YXRpb24gc2NlbmFyaW9zIHdoZXJlIEh5cGVyLVYgbWlnaHQgaGF2ZSBpdHMgb3duIFNNTSBoYW5kbGluZyBvciBpbnRlcmFjdCB3aXRoIEtWTSYjMzk7cy4gSWYgdGhlcmUmIzM5O3Mgb3ZlcmxhcCBpbiB0aG9zZSBhcmVhcywgSSYjMzk7bGwgbmVlZCB0byBpZGVudGlmeSBob3cgdGhleSBtYW5hZ2UgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDU6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX0tWTV9IWVBFUlYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9MjM0PXN0YXRpYyBpbmxpbmUgdm9pZCBuZXN0ZWRfcmVsZWFzZV9ldm1jcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTIzNS17XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjIzNjojaWZkZWYgQ09ORklHX0tWTV9IWVBFUlZcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMjM3LVx0c3RydWN0IGt2bV92Y3B1X2h2ICpodl92Y3B1ID0gdG9faHZfdmNwdSh2Y3B1KTtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTI1Mj1zdGF0aWMgYm9vbCBuZXN0ZWRfZXZtY3NfaGFuZGxlX3ZtY2xlYXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCB2bXB0cilcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMjUzLXtcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6MjU0OiNpZmRlZiBDT05GSUdfS1ZNX0hZUEVSVlxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0yNTUtXHRzdHJ1Y3QgdmNwdV92bXggKnZteCA9IHRvX3ZteCh2Y3B1KTtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTE3NDc9c3RhdGljIHZvaWQgY29weV9lbmxpZ2h0ZW5lZF90b192bWNzMTIoc3RydWN0IHZjcHVfdm14ICp2bXgsIHUzMiBodl9jbGVhbl9maWVsZHMpXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTE3NDgte1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzoxNzQ5OiNpZmRlZiBDT05GSUdfS1ZNX0hZUEVSVlxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0xNzUwLVx0c3RydWN0IHZtY3MxMiAqdm1jczEyID0gdm14LVx1MDAzZW5lc3RlZC5jYWNoZWRfdm1jczEyO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMTk4OS1cdHJldHVybjtcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6MTk5MDojZWxzZSAvKiBDT05GSUdfS1ZNX0hZUEVSViAqL1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0xOTkxLVx0S1ZNX0JVR19PTigxLCB2bXgtXHUwMDNldmNwdS5rdm0pO1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzoxOTkyOiNlbmRpZiAvKiBDT05GSUdfS1ZNX0hZUEVSViAqL1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0xOTkzLX1cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTE5OTU9c3RhdGljIHZvaWQgY29weV92bWNzMTJfdG9fZW5saWdodGVuZWQoc3RydWN0IHZjcHVfdm14ICp2bXgpXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTE5OTYte1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzoxOTk3OiNpZmRlZiBDT05GSUdfS1ZNX0hZUEVSVlxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0xOTk4LVx0c3RydWN0IHZtY3MxMiAqdm1jczEyID0gdm14LVx1MDAzZW5lc3RlZC5jYWNoZWRfdm1jczEyO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMjE2Ny1cdHJldHVybjtcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6MjE2ODojZWxzZSAvKiBDT05GSUdfS1ZNX0hZUEVSViAqL1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0yMTY5LVx0S1ZNX0JVR19PTigxLCB2bXgtXHUwMDNldmNwdS5rdm0pO1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzoyMTcwOiNlbmRpZiAvKiBDT05GSUdfS1ZNX0hZUEVSViAqL1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0yMTcxLX1cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTIxNzc9c3RhdGljIGVudW0gbmVzdGVkX2V2bXB0cmxkX3N0YXR1cyBuZXN0ZWRfdm14X2hhbmRsZV9lbmxpZ2h0ZW5lZF92bXB0cmxkKFxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMjE3OS17XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjIxODA6I2lmZGVmIENPTkZJR19LVk1fSFlQRVJWXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTIxODEtXHRzdHJ1Y3QgdmNwdV92bXggKnZteCA9IHRvX3ZteCh2Y3B1KTtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTMxMjA9c3RhdGljIGludCBuZXN0ZWRfdm14X2NoZWNrX2NvbnRyb2xzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTMxMjctXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjMxMjg6I2lmZGVmIENPTkZJR19LVk1fSFlQRVJWXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTMxMjktXHRpZiAoZ3Vlc3RfY3B1X2NhcF9oYXNfZXZtY3ModmNwdSkpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz0zMzA0PXN0YXRpYyBpbnQgbmVzdGVkX3ZteF9jaGVja19ndWVzdF9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zNDA0LVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzozNDA1OiNpZmRlZiBDT05GSUdfS1ZNX0hZUEVSVlxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zNDA2LXN0YXRpYyBib29sIG5lc3RlZF9nZXRfZXZtY3NfcGFnZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz0zNTIzPXN0YXRpYyBib29sIHZteF9nZXRfbmVzdGVkX3N0YXRlX3BhZ2VzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzUyNC17XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjM1MjU6I2lmZGVmIENPTkZJR19LVk1fSFlQRVJWXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM1MjYtXHQvKlxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NTA1ND12b2lkIF9fbmVzdGVkX3ZteF92bWV4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgdm1fZXhpdF9yZWFzb24sXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01MDY4LVx0aWYgKGt2bV9jaGVja19yZXF1ZXN0KEtWTV9SRVFfR0VUX05FU1RFRF9TVEFURV9QQUdFUywgdmNwdSkpIHtcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NTA2OTojaWZkZWYgQ09ORklHX0tWTV9IWVBFUlZcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTA3MC1cdFx0Lypcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTY0NjE9c3RhdGljIGJvb2wgbmVzdGVkX3ZteF9sMF93YW50c19leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTY1MjMtXHRcdHJldHVybiB0cnVlO1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo2NTI0OiNpZmRlZiBDT05GSUdfS1ZNX0hZUEVSVlxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02NTI1LVx0Y2FzZSBFWElUX1JFQVNPTl9WTUNBTEw6XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz02ODg5PXN0YXRpYyBpbnQgdm14X3NldF9uZXN0ZWRfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNjk4NS1cdFx0c2V0X2N1cnJlbnRfdm1wdHIodm14LCBrdm1fc3RhdGUtXHUwMDNlaGRyLnZteC52bWNzMTJfcGEpO1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo2OTg2OiNpZmRlZiBDT05GSUdfS1ZNX0hZUEVSVlxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02OTg3LVx0fSBlbHNlIGlmIChrdm1fc3RhdGUtXHUwMDNlZmxhZ3MgXHUwMDI2IEtWTV9TVEFURV9ORVNURURfRVZNQ1MpIHtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTc0NzU9c3RydWN0IGt2bV94ODZfbmVzdGVkX29wcyB2bXhfbmVzdGVkX29wcyBfX2luaXRkYXRhID0ge1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNzQ4NS1cdC53cml0ZV9sb2dfZGlydHkgPSBuZXN0ZWRfdm14X3dyaXRlX3BtbF9idWZmZXIsXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjc0ODY6I2lmZGVmIENPTkZJR19LVk1fSFlQRVJWXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTc0ODctXHQuZW5hYmxlX2V2bWNzID0gbmVzdGVkX2VuYWJsZV9ldm1jcyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDU6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMwNDgKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiA0MzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBsaWNhdGlvbnMgb2YgdGhlIEtWTSBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIG1ha2luZyBhIHNpZ25pZmljYW50IGNoYW5nZTogaXQmIzM5O3MgZm9yY2luZyBhIGBLVk1fUkVRX0dFVF9ORVNURURfU1RBVEVfUEFHRVNgIGNoZWNrIHdpdGhpbiBgX19uZXN0ZWRfdm14X3ZtZXhpdGAgcmVnYXJkbGVzcy4gVGhlIGludGVyZXN0aW5nIHBhcnQgaXMgdGhhdCB0aGUgY29uZGl0aW9uYWwgYCNpZmRlZiBDT05GSUdfS1ZNX0hZUEVSVmAgaXMgKmluc2lkZSogdGhlIGBrdm1fY2hlY2tfcmVxdWVzdGAgYmxvY2suIFNvLCB3aGlsZSBgQ09ORklHX0tWTV9IWVBFUlZgIGlzbiYjMzk7dCBzdHJpY3RseSBuZWNlc3NhcnkgdG8gdHJpZ2dlciB0aGUgY2hhbmdlIGluIGBfX25lc3RlZF92bXhfdm1leGl0YCBpdHNlbGYgKHNpbmNlIHdlJiMzOTtyZSBtYWtpbmcgdGhlIGNoZWNrIHVuY29uZGl0aW9uYWwpLCB3ZSBhYnNvbHV0ZWx5ICptdXN0KiB0ZXN0IHRoZSBuZXN0ZWQgVk1YIGFuZCBTVk0gZnVuY3Rpb25hbGl0eSB0aG9yb3VnaGx5LiBXZSBuZWVkIHRvIGVuc3VyZSBub3RoaW5nIGJyZWFrcy4KClRvIHRoYXQgZW5kLCBJJiMzOTt2ZSBjb21waWxlZCBhIGxpc3Qgb2YgZnVuY3Rpb25zIHRoYXQgd2FycmFudCBjYXJlZnVsIHNjcnV0aW55OgoKKiAgIGBuZXN0ZWRfc3ZtX2NvcHlfdm1jYjEyX3RvX2NhY2hlYCAoY3JpdGljYWwgZm9yIFNWTSBzdGF0ZSBtYW5hZ2VtZW50IHdpdGhpbiBgZW50ZXJfc3ZtX2d1ZXN0X21vZGVgKQoqICAgYG5lc3RlZF9zdm1fdm1leGl0X3VwZGF0ZV92bWNiMTJgIChlc3NlbnRpYWwgZm9yIFNWTSBleGl0IGhhbmRsaW5nLCBjYWxsZWQgYnkgYG5lc3RlZF9zdm1fdm1leGl0YCkKKiAgIGB2bWxvYWRfdm1zYXZlX2ludGVyY2VwdGlvbmAgKGludGVyY2VwdGlvbiBvZiBWTUxPQUQvVk1TQVZFIG9wZXJhdGlvbnMsIGludm9sdmVkIGluIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBhbmQgY2FsbGVkIGJ5IGBzdm1faW52b2tlX2V4aXRfaGFuZGxlcmApCiogICBgc3ZtX2VudGVyX3NtbWAgYW5kIGBzdm1fbGVhdmVfc21tYCAoU01NIHRyYW5zaXRpb24gaGFuZGxlcnMgZm9yIFNWTSwgY2FsbGVkIHZpYSBga3ZtX3NtbV90cmFuc2l0aW9uYCkKKiAgIGBuZXN0ZWRfdm14X3ByZXBhcmVfbXNyX2JpdG1hcGAgKHNldHMgdXAgTVNSIGJpdG1hcHMsIGNydWNpYWwgZm9yIFZNWCkKKiAgIGBfX25lc3RlZF92bXhfdm1leGl0YCAodGhlIGZvY2FsIHBvaW50IG9mIHRoaXMgcGF0Y2gsIGNhbGxlZCBieSBgbmVzdGVkX3ZteF92bWV4aXRgIGFuZCBgbmVzdGVkX3ZteF9yZWZsZWN0X3ZtZXhpdGApCiogICBga3ZtcHBjX3BhdGNoX2RjYnpgIChsaWtlbHkgdW5yZWxhdGVkIHRvIHRoZSBjb3JlIGNoYW5nZSwgYnV0IGluY2x1ZGVkIGZvciBjb21wbGV0ZW5lc3MsIGNhbGxlZCBieSBga3ZtcHBjX2hhbmRsZV9wYWdlZmF1bHRgKQoKTXkgYXBwcm9hY2ggaXMgdG8gcHJpb3JpdGl6ZSBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIFRoYXQgaGVscHMgZ2l2ZSB1cyB0aGUgbW9zdCBpbnNpZ2h0IGludG8gaG93IGVhY2ggZnVuY3Rpb24gaXMgdXNlZCwgYW5kIGhvdyBjaGFuZ2VzIG1heSBiZSBleHBvc2VkIHRvIHRoZSBjYWxsZXIuIFNvLCBJIHdpbGwgdHJhY2UgdGhlIGNhbGxlcnMgb2YgdGhlIGFib3ZlIHN0YXRpYyBmdW5jdGlvbnMgdG8gZW5zdXJlIGNvbXBsZXRlIGNvdmVyYWdlLiBUaGF0JiMzOTtzIHRoZSBiZXN0IHdheSB0byBkZXRlcm1pbmUgdGhlIGZ1bGwgaW1wYWN0IG9mIHRoZSBwYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDU6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmVzdGVkX3N2bV9jb3B5X3ZtY2IxMl90b19jYWNoZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYz0xMDMzPWludCBlbnRlcl9zdm1fZ3Vlc3RfbW9kZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2bWNiMTJfZ3BhLCBib29sIGZyb21fdm1ydW4pXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0xMDg1LVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzoxMDg2OnN0YXRpYyBpbnQgbmVzdGVkX3N2bV9jb3B5X3ZtY2IxMl90b19jYWNoZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2bWNiMTJfZ3BhKVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0xMDg3LXtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jPTExMTM9aW50IG5lc3RlZF9zdm1fdm1ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtMTE0NS1cbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6MTE0NjpcdHJldCA9IG5lc3RlZF9zdm1fY29weV92bWNiMTJfdG9fY2FjaGUodmNwdSwgdm1jYjEyX2dwYSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTExNDctXHRpZiAocmV0ID09IC1FRkFVTFQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA1OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MzY1CgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkluaXRpYWwgQXNzZXNzbWVudDogTmF2aWdhdGluZyB0aGUgVmlydHVhbGl6YXRpb24gTGFuZHNjYXBlKioKClJpZ2h0LCBzbyBgbmVzdGVkX3N2bV92bXJ1bmAganVtcHMgb3V0IGltbWVkaWF0ZWx5IGFzIGEgZ29vZCBwbGFjZSB0byBzdGFydCBkaWdnaW5nLiBUaGF0JiMzOTtzIGEgc29saWQsIGxpa2VseSBsb3ctbGV2ZWwgZW50cnlwb2ludCBmb3IgYW55dGhpbmcgcmVsYXRlZCB0byBuZXN0ZWQgdmlydHVhbGl6YXRpb24gd2l0aGluIGEgVk13YXJlIGVudmlyb25tZW50LiBJdCBzdWdnZXN0cyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGVpdGhlciBlbmFibGluZyBvciBpbnRlcmFjdGluZyB3aXRoIFNlY3VyZSBWaXJ0dWFsIE1hY2hpbmUgKFNWTSkgY2FwYWJpbGl0aWVzIHdpdGhpbiBhbm90aGVyIFZNLCBvciBsaWtlbHkgdGhlIG1lY2hhbmlzbSB0aHJvdWdoIHdoaWNoIG9uZSBWTSBpbnRlcmFjdHMgd2l0aCBhbm90aGVyJiMzOTtzIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBlbnZpcm9ubWVudC4gQ29uc2lkZXJpbmcgbXkgZXhwZXJpZW5jZSB3aXRoIHZpcnR1YWxpemF0aW9uIGtlcm5lbCBtb2R1bGVzIGFuZCBzeXN0ZW0tbGV2ZWwgaW50ZXJhY3Rpb25zLCB0aGlzIHByb2JhYmx5IGhhbmRsZXMgdGhlIHRyYW5zaXRpb24sIG1vZGUgc2V0dGluZywgb3IgcmVzb3VyY2UgYWxsb2NhdGlvbiBpbnZvbHZlZCBpbiBydW5uaW5nIGEgdmlydHVhbGl6ZWQgZ3Vlc3QgKndpdGhpbiogYW5vdGhlciB2aXJ0dWFsaXplZCBndWVzdC4gVGhpcyBjb3VsZCBiZSByZWxldmFudCBmb3IgZXZlcnl0aGluZyBmcm9tIHRlc3RpbmcgYW5kIGRldmVsb3BtZW50IHRvIHBvdGVudGlhbGx5IHNlY3VyaXR5LWZvY3VzZWQgaXNvbGF0aW9uLCBjb250YWluZXJpemF0aW9uLCBvciBldmVuIG1hbGljaW91cyByb290a2l0IGRldGVjdGlvbiB0ZWNobmlxdWVzLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGNoZWNrIGZvciBhbnkgaG9va3MsIGNhbGxiYWNrcywgb3Igc2hhcmVkIG1lbW9yeSBhY2Nlc3MgdGhpcyBmdW5jdGlvbiBtaWdodCBpbXBsZW1lbnQsIHRob3NlIHdvdWxkIGJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDU6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmVzdGVkX3N2bV92bWV4aXRfdXBkYXRlX3ZtY2IxMiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYz0xMjMzPXZvaWQgc3ZtX2NvcHlfdm1sb2Fkc2F2ZV9zdGF0ZShzdHJ1Y3Qgdm1jYiAqdG9fdm1jYiwgc3RydWN0IHZtY2IgKmZyb21fdm1jYilcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTEyNDgtXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjEyNDk6c3RhdGljIGludCBuZXN0ZWRfc3ZtX3ZtZXhpdF91cGRhdGVfdm1jYjEyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtMTI1MC17XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYz0xMzE3PXZvaWQgbmVzdGVkX3N2bV92bWV4aXQoc3RydWN0IHZjcHVfc3ZtICpzdm0pXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0xMzIyLVxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzoxMzIzOlx0aWYgKG5lc3RlZF9zdm1fdm1leGl0X3VwZGF0ZV92bWNiMTIodmNwdSkpXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTEzMjQtXHRcdGt2bV9tYWtlX3JlcXVlc3QoS1ZNX1JFUV9UUklQTEVfRkFVTFQsIHZjcHUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwNTo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDk0MwoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQ6CgoqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiBWTSBFeGl0IEVudHJ5cG9pbnRzKioKClJpZ2h0LCBgbmVzdGVkX3N2bV92bWV4aXRgLiBUaGF0IGxvb2tzIGxpa2UgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3IgZXhhbWluaW5nIHRoZSB3aG9sZSBuZXN0ZWQgdmlydHVhbGl6YXRpb24gc2l0dWF0aW9uLiBJdCBpbW1lZGlhdGVseSBzdWdnZXN0cyBhbiBlbnRyeSBwb2ludCBpbnRvIHRoZSBoYW5kbGluZyBvZiB2aXJ0dWFsIG1hY2hpbmUgZXhpdHMgd2hlbiBydW5uaW5nIHVuZGVyIG5lc3RlZCBTVk0gKFNlY3VyZSBWaXJ0dWFsIE1hY2hpbmUpIHZpcnR1YWxpemF0aW9uLiBUaGlzIG5hbWUgYWxvbmUgcG9pbnRzIHRvIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgSSBuZWVkIHRvIGRpZyBpbnRvLiBJdCYjMzk7cyBhIGNsZWFyIGluZGljYXRpb24gdGhhdCB0aGlzIGlzIHRoZSBob29rLCB0aGUgcGxhY2Ugd2hlcmUgdGhlIGh5cGVydmlzb3IgaW50ZXJjZXB0cyBldmVudHMgZnJvbSB0aGUgZ3Vlc3QgVk0uIFRoaXMgaXMgd2hlcmUgSSYjMzk7bGwgcHJvYmFibHkgZmluZCB0aGUga2V5IGxvZ2ljIGZvciBtYW5hZ2luZyBndWVzdC10by1ob3N0IHRyYW5zaXRpb25zLCBlbXVsYXRpb24gb2YgaW5zdHJ1Y3Rpb25zLCBhbmQgYmFzaWNhbGx5IGV2ZXJ5dGhpbmcgdGhhdCBtYWtlcyBuZXN0ZWQgdmlydHVhbGl6YXRpb24gd29yay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGVudHJ5IHBvaW50IGRvZXMgaW4gdGhlIG92ZXJhbGwgcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDU6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm1sb2FkX3Ztc2F2ZV9pbnRlcmNlcHRpb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vc3ZtLmM9MjIwOD1zdGF0aWMgaW50IGludHJfaW50ZXJjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTIyMTMtXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjIyMTQ6c3RhdGljIGludCB2bWxvYWRfdm1zYXZlX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgdm1sb2FkKVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0yMjE1LXtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTIyNDk9c3RhdGljIGludCB2bWxvYWRfaW50ZXJjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMjI1MC17XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjIyNTE6XHRyZXR1cm4gdm1sb2FkX3Ztc2F2ZV9pbnRlcmNlcHRpb24odmNwdSwgdHJ1ZSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTIyNTItfVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9MjI1ND1zdGF0aWMgaW50IHZtc2F2ZV9pbnRlcmNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0yMjU1LXtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6MjI1NjpcdHJldHVybiB2bWxvYWRfdm1zYXZlX2ludGVyY2VwdGlvbih2Y3B1LCBmYWxzZSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTIyNTctfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwNTo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTU0MwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW5pdGlhbCBBc3Nlc3NtZW50OiBMZXZlcmFnaW5nIEVudHJ5cG9pbnRzIGZvciBWTSBMaWZlY3ljbGUgTWFuYWdlbWVudCoqCgpSaWdodCwgbGV0JiMzOTtzIHNlZS4uLiBgdm1sb2FkX2ludGVyY2VwdGlvbmAgYW5kIGB2bXNhdmVfaW50ZXJjZXB0aW9uYCBhcmUgZGVmaW5pdGVseSB0aGUga2V5IHN0YXJ0aW5nIHBvaW50cyBoZXJlLiBUaGlua2luZyBhYm91dCB0aGlzIGZyb20gYSBsaWZlY3ljbGUgcGVyc3BlY3RpdmUsIHRoZXNlIGFyZSB0aGUgaG9va3MgSSBuZWVkIHRvIGZvY3VzIG9uIGZvciBhbnkgc2lnbmlmaWNhbnQgaW50ZXJ2ZW50aW9uIG9yIGluc3RydW1lbnRhdGlvbiB3aXRoaW4gdGhlIGh5cGVydmlzb3ImIzM5O3MgVk0gbWFuYWdlbWVudCBmbG93LiBUaGV5JiMzOTtyZSB0aGUgb2J2aW91cyBjYW5kaWRhdGVzIGZvciBpbXBsZW1lbnRpbmcgYW55IGN1c3RvbSBsb2dpYyB0aWVkIHRvIFZNIHN0YXRlIHRyYW5zaXRpb25zLgoKSSYjMzk7bSBpbW1lZGlhdGVseSBjb25zaWRlcmluZyB3aGF0IEkgY2FuIGludGVyY2VwdCBhbmQgaG93IEkmIzM5O2xsIGhhbmRsZSB0aGUgYXJjaGl0ZWN0dXJhbCBjaGFsbGVuZ2VzLiBTcGVjaWZpY2FsbHksIHdoYXQmIzM5O3MgbXkgcGxhbiB0byBtYWludGFpbiB0aGUgaW50ZWdyaXR5IG9mIHRoZSBzYXZlL3Jlc3RvcmUgcHJvY2Vzcz8gSSBuZWVkIHRvIHRoaW5rIGFib3V0IGhvdyB0byBpbmplY3QgbXkgb3duIGNvZGUgYW5kIGRhdGEgd2l0aG91dCBpbXBhY3RpbmcgdGhlIHBlcmZvcm1hbmNlIG9mIHRoZSBWTSBvciBpdHMgZ3Vlc3RzLCBhbmQgd2l0aCBjYXJlZnVsIGF0dGVudGlvbiB0byB0aHJlYWQgc2FmZXR5LCBvZiBjb3Vyc2UuIEFueSBpbnRlcnJ1cHRpb24gaW4gdGhlc2UgZnVuY3Rpb25zIGNhbiBsZWFkIHRvIHVucHJlZGljdGFibGUgcmVzdWx0cyBpbiB0aGUgdmlydHVhbCBtYWNoaW5lcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDU6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3ZtX2VudGVyX3NtbSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bS9zdm0uYz00OTcxPXN0YXRpYyBpbnQgc3ZtX3NtaV9hbGxvd2VkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBmb3JfaW5qZWN0aW9uKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNDk4Ni1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6NDk4NzpzdGF0aWMgaW50IHN2bV9lbnRlcl9zbW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bmlvbiBrdm1fc21yYW0gKnNtcmFtKVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy00OTg4LXtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTUwMzM9c3RhdGljIGludCBzdm1fbGVhdmVfc21tKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgY29uc3QgdW5pb24ga3ZtX3NtcmFtICpzbXJhbSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTUwNjUtXHQgKiBSZXN0b3JlIEwxIGhvc3Qgc3RhdGUgZnJvbSBMMSBIU0FWRSBhcmVhIGFzIFZNQ0IwMSB3YXNcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6NTA2NjpcdCAqIHVzZWQgZHVyaW5nIFNNTSAoc2VlIHN2bV9lbnRlcl9zbW0oKSlcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNTA2Ny1cdCAqL1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9NTMwMj1zdHJ1Y3Qga3ZtX3g4Nl9vcHMgc3ZtX3g4Nl9vcHMgX19pbml0ZGF0YSA9IHtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTU0MTItXHQuc21pX2FsbG93ZWQgPSBzdm1fc21pX2FsbG93ZWQsXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjU0MTM6XHQuZW50ZXJfc21tID0gc3ZtX2VudGVyX3NtbSxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNTQxNC1cdC5sZWF2ZV9zbW0gPSBzdm1fbGVhdmVfc21tLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwNTo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjI2OAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKlRyYWNpbmcgdGhlIEV4ZWN1dGlvbiBQYXRoIG9mIGBlbnRlcl9zbW1gIGluIEtWTSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoZSBLVk0gY29kZSBhbmQgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgZW50ZXJfc21tYCBpcyBiZWluZyBpbnZva2VkLiBSaWdodCwgdGhlIGZ1bmN0aW9uIG5hbWUgaXRzZWxmIHN1Z2dlc3RzIGVudHJ5IGludG8gU3lzdGVtIE1hbmFnZW1lbnQgTW9kZSAoU01NKSwgYW5kIHRoYXQmIzM5O3Mgc29tZXRoaW5nIHRoYXQgYWx3YXlzIHJlcXVpcmVzIGNhcmVmdWwgY29uc2lkZXJhdGlvbiBpbiBhIGh5cGVydmlzb3IgY29udGV4dC4gSSByZW1lbWJlciB0aGF0IHRoZXNlIHR5cGVzIG9mIGFyY2hpdGVjdHVyYWwgaW50ZXJhY3Rpb25zIGFyZSBvZnRlbiBtYW5hZ2VkIHRocm91Z2ggYGt2bV94ODZfb3BzYC4gVGhhdCYjMzk7cyB0aGUgbGlrZWx5IGVudHJ5IHBvaW50LiBOb3csIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgYWN0dWFsIGNvbnRyb2wgZmxvdywgSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGdyZXAgb3IgdXNlIG15IElERSB0byBmaW5kIGFsbCB0aGUgY2FsbCBzaXRlcyBvZiBgZW50ZXJfc21tYCB3aXRoaW4gdGhlIGNvZGViYXNlLiBUaGUgZ29hbCBpcyB0byBzZWUgZXhhY3RseSB3aGVyZSBhbmQgaG93IHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkLCB3aGljaCB3aWxsIHRoZW4gaWxsdW1pbmF0ZSB0aGUgZXZlbnRzIHRoYXQgdHJpZ2dlciBTTU0gZW50cnkgZnJvbSB0aGUgaG9zdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHBhdGggdGhyb3VnaCB3aGljaCB0aGUgaG9zdCBlbnRlcnMgU01NIHZpYSBLVk0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA1OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2VudGVyX3NtbSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3NtbS5jPTEzNj12b2lkIHByb2Nlc3Nfc21pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vc21tLmMtMTQxLVxuYXJjaC94ODYva3ZtL3NtbS5jOjE0MjpzdGF0aWMgdTMyIGVudGVyX3NtbV9nZXRfc2VnbWVudF9mbGFncyhzdHJ1Y3Qga3ZtX3NlZ21lbnQgKnNlZylcbmFyY2gveDg2L2t2bS9zbW0uYy0xNDMte1xuLS1cbmFyY2gveDg2L2t2bS9zbW0uYy0xNTUtXG5hcmNoL3g4Ni9rdm0vc21tLmM6MTU2OnN0YXRpYyB2b2lkIGVudGVyX3NtbV9zYXZlX3NlZ18zMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG5hcmNoL3g4Ni9rdm0vc21tLmMtMTU3LVx0XHRcdFx0ICBzdHJ1Y3Qga3ZtX3NtbV9zZWdfc3RhdGVfMzIgKnN0YXRlLFxuLS1cbmFyY2gveDg2L2t2bS9zbW0uYy0xNjUtXHRzdGF0ZS1cdTAwM2VsaW1pdCA9IHNlZy5saW1pdDtcbmFyY2gveDg2L2t2bS9zbW0uYzoxNjY6XHRzdGF0ZS1cdTAwM2VmbGFncyA9IGVudGVyX3NtbV9nZXRfc2VnbWVudF9mbGFncyhcdTAwMjZzZWcpO1xuYXJjaC94ODYva3ZtL3NtbS5jLTE2Ny19XG4tLVxuYXJjaC94ODYva3ZtL3NtbS5jLTE2OS0jaWZkZWYgQ09ORklHX1g4Nl82NFxuYXJjaC94ODYva3ZtL3NtbS5jOjE3MDpzdGF0aWMgdm9pZCBlbnRlcl9zbW1fc2F2ZV9zZWdfNjQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuYXJjaC94ODYva3ZtL3NtbS5jLTE3MS1cdFx0XHRcdCAgc3RydWN0IGt2bV9zbW1fc2VnX3N0YXRlXzY0ICpzdGF0ZSxcbi0tXG5hcmNoL3g4Ni9rdm0vc21tLmMtMTc3LVx0c3RhdGUtXHUwMDNlc2VsZWN0b3IgPSBzZWcuc2VsZWN0b3I7XG5hcmNoL3g4Ni9rdm0vc21tLmM6MTc4Olx0c3RhdGUtXHUwMDNlYXR0cmlidXRlcyA9IGVudGVyX3NtbV9nZXRfc2VnbWVudF9mbGFncyhcdTAwMjZzZWcpIFx1MDAzZVx1MDAzZSA4O1xuYXJjaC94ODYva3ZtL3NtbS5jLTE3OS1cdHN0YXRlLVx1MDAzZWxpbWl0ID0gc2VnLmxpbWl0O1xuLS1cbmFyY2gveDg2L2t2bS9zbW0uYy0xODMtXG5hcmNoL3g4Ni9rdm0vc21tLmM6MTg0OnN0YXRpYyB2b2lkIGVudGVyX3NtbV9zYXZlX3N0YXRlXzMyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbmFyY2gveDg2L2t2bS9zbW0uYy0xODUtXHRcdFx0XHQgICAgc3RydWN0IGt2bV9zbXJhbV9zdGF0ZV8zMiAqc21yYW0pXG4tLVxuYXJjaC94ODYva3ZtL3NtbS5jLTIwMC1cbmFyY2gveDg2L2t2bS9zbW0uYzoyMDE6XHRlbnRlcl9zbW1fc2F2ZV9zZWdfMzIodmNwdSwgXHUwMDI2c21yYW0tXHUwMDNldHIsIFx1MDAyNnNtcmFtLVx1MDAzZXRyX3NlbCwgVkNQVV9TUkVHX1RSKTtcbmFyY2gveDg2L2t2bS9zbW0uYzoyMDI6XHRlbnRlcl9zbW1fc2F2ZV9zZWdfMzIodmNwdSwgXHUwMDI2c21yYW0tXHUwMDNlbGR0ciwgXHUwMDI2c21yYW0tXHUwMDNlbGR0cl9zZWwsIFZDUFVfU1JFR19MRFRSKTtcbmFyY2gveDg2L2t2bS9zbW0uYy0yMDMtXG4tLVxuYXJjaC94ODYva3ZtL3NtbS5jLTIxMS1cbmFyY2gveDg2L2t2bS9zbW0uYzoyMTI6XHRlbnRlcl9zbW1fc2F2ZV9zZWdfMzIodmNwdSwgXHUwMDI2c21yYW0tXHUwMDNlZXMsIFx1MDAyNnNtcmFtLVx1MDAzZWVzX3NlbCwgVkNQVV9TUkVHX0VTKTtcbmFyY2gveDg2L2t2bS9zbW0uYzoyMTM6XHRlbnRlcl9zbW1fc2F2ZV9zZWdfMzIodmNwdSwgXHUwMDI2c21yYW0tXHUwMDNlY3MsIFx1MDAyNnNtcmFtLVx1MDAzZWNzX3NlbCwgVkNQVV9TUkVHX0NTKTtcbmFyY2gveDg2L2t2bS9zbW0uYzoyMTQ6XHRlbnRlcl9zbW1fc2F2ZV9zZWdfMzIodmNwdSwgXHUwMDI2c21yYW0tXHUwMDNlc3MsIFx1MDAyNnNtcmFtLVx1MDAzZXNzX3NlbCwgVkNQVV9TUkVHX1NTKTtcbmFyY2gveDg2L2t2bS9zbW0uYy0yMTUtXG5hcmNoL3g4Ni9rdm0vc21tLmM6MjE2Olx0ZW50ZXJfc21tX3NhdmVfc2VnXzMyKHZjcHUsIFx1MDAyNnNtcmFtLVx1MDAzZWRzLCBcdTAwMjZzbXJhbS1cdTAwM2Vkc19zZWwsIFZDUFVfU1JFR19EUyk7XG5hcmNoL3g4Ni9rdm0vc21tLmM6MjE3Olx0ZW50ZXJfc21tX3NhdmVfc2VnXzMyKHZjcHUsIFx1MDAyNnNtcmFtLVx1MDAzZWZzLCBcdTAwMjZzbXJhbS1cdTAwM2Vmc19zZWwsIFZDUFVfU1JFR19GUyk7XG5hcmNoL3g4Ni9rdm0vc21tLmM6MjE4Olx0ZW50ZXJfc21tX3NhdmVfc2VnXzMyKHZjcHUsIFx1MDAyNnNtcmFtLVx1MDAzZWdzLCBcdTAwMjZzbXJhbS1cdTAwM2Vnc19zZWwsIFZDUFVfU1JFR19HUyk7XG5hcmNoL3g4Ni9rdm0vc21tLmMtMjE5LVxuLS1cbmFyY2gveDg2L2t2bS9zbW0uYy0yMjctI2lmZGVmIENPTkZJR19YODZfNjRcbmFyY2gveDg2L2t2bS9zbW0uYzoyMjg6c3RhdGljIHZvaWQgZW50ZXJfc21tX3NhdmVfc3RhdGVfNjQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuYXJjaC94ODYva3ZtL3NtbS5jLTIyOS1cdFx0XHRcdCAgICBzdHJ1Y3Qga3ZtX3NtcmFtX3N0YXRlXzY0ICpzbXJhbSlcbi0tXG5hcmNoL3g4Ni9rdm0vc21tLmMtMjUxLVxuYXJjaC94ODYva3ZtL3NtbS5jOjI1MjpcdGVudGVyX3NtbV9zYXZlX3NlZ182NCh2Y3B1LCBcdTAwMjZzbXJhbS1cdTAwM2V0ciwgVkNQVV9TUkVHX1RSKTtcbmFyY2gveDg2L2t2bS9zbW0uYy0yNTMtXG4tLVxuYXJjaC94ODYva3ZtL3NtbS5jLTI1Ny1cbmFyY2gveDg2L2t2bS9zbW0uYzoyNTg6XHRlbnRlcl9zbW1fc2F2ZV9zZWdfNjQodmNwdSwgXHUwMDI2c21yYW0tXHUwMDNlbGR0ciwgVkNQVV9TUkVHX0xEVFIpO1xuYXJjaC94ODYva3ZtL3NtbS5jLTI1OS1cbi0tXG5hcmNoL3g4Ni9rdm0vc21tLmMtMjYzLVxuYXJjaC94ODYva3ZtL3NtbS5jOjI2NDpcdGVudGVyX3NtbV9zYXZlX3NlZ182NCh2Y3B1LCBcdTAwMjZzbXJhbS1cdTAwM2VlcywgVkNQVV9TUkVHX0VTKTtcbmFyY2gveDg2L2t2bS9zbW0uYzoyNjU6XHRlbnRlcl9zbW1fc2F2ZV9zZWdfNjQodmNwdSwgXHUwMDI2c21yYW0tXHUwMDNlY3MsIFZDUFVfU1JFR19DUyk7XG5hcmNoL3g4Ni9rdm0vc21tLmM6MjY2Olx0ZW50ZXJfc21tX3NhdmVfc2VnXzY0KHZjcHUsIFx1MDAyNnNtcmFtLVx1MDAzZXNzLCBWQ1BVX1NSRUdfU1MpO1xuYXJjaC94ODYva3ZtL3NtbS5jOjI2NzpcdGVudGVyX3NtbV9zYXZlX3NlZ182NCh2Y3B1LCBcdTAwMjZzbXJhbS1cdTAwM2VkcywgVkNQVV9TUkVHX0RTKTtcbmFyY2gveDg2L2t2bS9zbW0uYzoyNjg6XHRlbnRlcl9zbW1fc2F2ZV9zZWdfNjQodmNwdSwgXHUwMDI2c21yYW0tXHUwMDNlZnMsIFZDUFVfU1JFR19GUyk7XG5hcmNoL3g4Ni9rdm0vc21tLmM6MjY5Olx0ZW50ZXJfc21tX3NhdmVfc2VnXzY0KHZjcHUsIFx1MDAyNnNtcmFtLVx1MDAzZWdzLCBWQ1BVX1NSRUdfR1MpO1xuYXJjaC94ODYva3ZtL3NtbS5jLTI3MC1cbi0tXG5hcmNoL3g4Ni9rdm0vc21tLmMtMjc4LVxuYXJjaC94ODYva3ZtL3NtbS5jOjI3OTp2b2lkIGVudGVyX3NtbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0vc21tLmMtMjgwLXtcbi0tXG5hcmNoL3g4Ni9rdm0vc21tLmMtMjkxLVx0aWYgKGd1ZXN0X2NwdV9jYXBfaGFzKHZjcHUsIFg4Nl9GRUFUVVJFX0xNKSlcbmFyY2gveDg2L2t2bS9zbW0uYzoyOTI6XHRcdGVudGVyX3NtbV9zYXZlX3N0YXRlXzY0KHZjcHUsIFx1MDAyNnNtcmFtLnNtcmFtNjQpO1xuYXJjaC94ODYva3ZtL3NtbS5jLTI5My1cdGVsc2VcbmFyY2gveDg2L2t2bS9zbW0uYy0yOTQtI2VuZGlmXG5hcmNoL3g4Ni9rdm0vc21tLmM6Mjk1Olx0XHRlbnRlcl9zbW1fc2F2ZV9zdGF0ZV8zMih2Y3B1LCBcdTAwMjZzbXJhbS5zbXJhbTMyKTtcbmFyY2gveDg2L2t2bS9zbW0uYy0yOTYtXG5hcmNoL3g4Ni9rdm0vc21tLmMtMjk3LVx0LypcbmFyY2gveDg2L2t2bS9zbW0uYzoyOTg6XHQgKiBHaXZlIGVudGVyX3NtbSgpIGEgY2hhbmNlIHRvIG1ha2UgSVNBLXNwZWNpZmljIGNoYW5nZXMgdG8gdGhlIHZDUFVcbmFyY2gveDg2L2t2bS9zbW0uYy0yOTktXHQgKiBzdGF0ZSAoZS5nLiBsZWF2ZSBndWVzdCBtb2RlKSBhZnRlciB3ZSYjMzk7dmUgc2F2ZWQgdGhlIHN0YXRlIGludG8gdGhlXG4tLVxuYXJjaC94ODYva3ZtL3NtbS5jLTMwNC1cdCAqL1xuYXJjaC94ODYva3ZtL3NtbS5jOjMwNTpcdGlmIChrdm1feDg2X2NhbGwoZW50ZXJfc21tKSh2Y3B1LCBcdTAwMjZzbXJhbSkpXG5hcmNoL3g4Ni9rdm0vc21tLmMtMzA2LVx0XHRnb3RvIGVycm9yO1xuLS1cbmFyY2gveDg2L2t2bS9zbW0uaD0xNTc9dm9pZCBrdm1fc21tX2NoYW5nZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGluX3NtbSk7XG5hcmNoL3g4Ni9rdm0vc21tLmg6MTU4OnZvaWQgZW50ZXJfc21tKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG5hcmNoL3g4Ni9rdm0vc21tLmgtMTU5LWludCBlbXVsYXRvcl9sZWF2ZV9zbW0oc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9NDk3MT1zdGF0aWMgaW50IHN2bV9zbWlfYWxsb3dlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgZm9yX2luamVjdGlvbilcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTQ5ODYtXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjQ5ODc6c3RhdGljIGludCBzdm1fZW50ZXJfc21tKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5pb24ga3ZtX3NtcmFtICpzbXJhbSlcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNDk4OC17XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz01MDMzPXN0YXRpYyBpbnQgc3ZtX2xlYXZlX3NtbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGNvbnN0IHVuaW9uIGt2bV9zbXJhbSAqc21yYW0pXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01MDY1LVx0ICogUmVzdG9yZSBMMSBob3N0IHN0YXRlIGZyb20gTDEgSFNBVkUgYXJlYSBhcyBWTUNCMDEgd2FzXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjUwNjY6XHQgKiB1c2VkIGR1cmluZyBTTU0gKHNlZSBzdm1fZW50ZXJfc21tKCkpXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTUwNjctXHQgKi9cbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTUzMDI9c3RydWN0IGt2bV94ODZfb3BzIHN2bV94ODZfb3BzIF9faW5pdGRhdGEgPSB7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01NDEyLVx0LnNtaV9hbGxvd2VkID0gc3ZtX3NtaV9hbGxvd2VkLFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo1NDEzOlx0LmVudGVyX3NtbSA9IHN2bV9lbnRlcl9zbW0sXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTU0MTQtXHQubGVhdmVfc21tID0gc3ZtX2xlYXZlX3NtbSxcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz0yMTk9c3RhdGljIGludCB2dF9zbWlfYWxsb3dlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgZm9yX2luamVjdGlvbilcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0yMjYtXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzoyMjc6c3RhdGljIGludCB2dF9lbnRlcl9zbW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bmlvbiBrdm1fc21yYW0gKnNtcmFtKVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMjI4LXtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0yMzEtXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzoyMzI6XHRyZXR1cm4gdm14X2VudGVyX3NtbSh2Y3B1LCBzbXJhbSk7XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0yMzMtfVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTg4MD1zdHJ1Y3Qga3ZtX3g4Nl9vcHMgdnRfeDg2X29wcyBfX2luaXRkYXRhID0ge1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTEwMDktXHQuc21pX2FsbG93ZWQgPSB2dF9vcChzbWlfYWxsb3dlZCksXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzoxMDEwOlx0LmVudGVyX3NtbSA9IHZ0X29wKGVudGVyX3NtbSksXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xMDExLVx0LmxlYXZlX3NtbSA9IHZ0X29wKGxlYXZlX3NtbSksXG4tLVxuYXJjaC94ODYva3ZtL3ZteC92bXguYz04NDA4PWludCB2bXhfc21pX2FsbG93ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGZvcl9pbmplY3Rpb24pXG4tLVxuYXJjaC94ODYva3ZtL3ZteC92bXguYy04NDE1LVxuYXJjaC94ODYva3ZtL3ZteC92bXguYzo4NDE2OmludCB2bXhfZW50ZXJfc21tKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5pb24ga3ZtX3NtcmFtICpzbXJhbSlcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtODQxNy17XG4tLVxuYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmg9MzY9aW50IHZteF9zbWlfYWxsb3dlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgZm9yX2luamVjdGlvbik7XG5hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaDozNzppbnQgdm14X2VudGVyX3NtbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuaW9uIGt2bV9zbXJhbSAqc21yYW0pO1xuYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmgtMzgtaW50IHZteF9sZWF2ZV9zbW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBjb25zdCB1bmlvbiBrdm1fc21yYW0gKnNtcmFtKTtcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9NzU2MD1zdGF0aWMgaW50IGt2bV9jaGVja19hbmRfaW5qZWN0X2V2ZW50cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTc2OTUtXHRcdFx0JiM0MzsmIzQzO3ZjcHUtXHUwMDNlYXJjaC5zbWlfY291bnQ7XG5hcmNoL3g4Ni9rdm0veDg2LmM6NzY5NjpcdFx0XHRlbnRlcl9zbW0odmNwdSk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtNzY5Ny1cdFx0XHRjYW5faW5qZWN0ID0gZmFsc2U7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA1OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMTg5CgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogMTg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlNNTSBGb2N1cyBQb2ludHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0byBlZmZlY3RpdmVseSB0cmFjZSB0aGUgU3lzdGVtIE1hbmFnZW1lbnQgTW9kZSAoU01NKSBlbnRyeSBhbmQgZXhpdCBwb2ludHMuICBga3ZtX2NoZWNrX2FuZF9pbmplY3RfZXZlbnRzYCBjYWxscyBgZW50ZXJfc21tYCwgYW5kIHRoZSBlbXVsYXRvciBpdHNlbGYgdXNlcyBgZW11bGF0b3JfbGVhdmVfc21tYC4gVGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoIHRvIHVzZSBhcyBhIHN0YXJ0aW5nIHBvaW50LgoKQnV0IGhvbGQgb24sIHRoZSBwYXRjaCBtb2RpZmllcyBgc3ZtX2VudGVyX3NtbWAgYW5kIGBzdm1fbGVhdmVfc21tYC4gIFRoYXQmIzM5O3MgcG90ZW50aWFsbHkgZXZlbiBiZXR0ZXIsIGFzc3VtaW5nIHRoZXkmIzM5O3JlIG5vdCBpbmxpbmVkLCBzaW5jZSB0aGV5JiMzOTtyZSBzcGVjaWZpY2FsbHkgdGllZCB0byB0aGUgQU1EIFNlY3VyZSBWaXJ0dWFsIE1hY2hpbmUgKFNWTSkgaW1wbGVtZW50YXRpb24uIFRoZSBxdWVzdGlvbiBpcywgYXJlIHRoZXkgc3RhdGljIGFuZCBpbmxpbmVkPyBMZXQgbWUgdGhpbmsuLi4gd2FpdCwgSSByZW1lbWJlciBub3chIFRoZXkmIzM5O3JlIGFzc2lnbmVkIHRvIGZ1bmN0aW9uIHBvaW50ZXJzIHdpdGhpbiBgc3ZtX3g4Nl9vcHNgLiBTaW5jZSB0aGV5JiMzOTtyZSBhc3NpZ25lZCB0byBmdW5jdGlvbiBwb2ludGVycywgdGhleSBkZWZpbml0ZWx5ICphcmVuJiMzOTt0KiBpbmxpbmVkLiBQZXJmZWN0LgoKVGhlcmVmb3JlLCBgc3ZtX2VudGVyX3NtbWAgYW5kIGBzdm1fbGVhdmVfc21tYCBhcmUgdGhlIGlkZWFsIGZvY3VzIHN5bWJvbHMgZm9yIHRoaXMgYW5hbHlzaXMuCgpOb3csIGxldCYjMzk7cyBwaXZvdCBhbmQgdGFrZSBhIGxvb2sgYXQgYG5lc3RlZF92bXhfcHJlcGFyZV9tc3JfYml0bWFwYCBhbmQgc2VlIHdoYXQgZWxzZSB3ZSBjYW4gdW5jb3Zlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDU6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmVzdGVkX3ZteF9wcmVwYXJlX21zcl9iaXRtYXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9Njk0PXN0YXRpYyB2b2lkIG5lc3RlZF92bXhfbWVyZ2VfcG11X21zcl9iaXRtYXBzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTcyNS0gKi9cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NzI2OnN0YXRpYyBpbmxpbmUgYm9vbCBuZXN0ZWRfdm14X3ByZXBhcmVfbXNyX2JpdG1hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTcyNy1cdFx0XHRcdFx0XHQgc3RydWN0IHZtY3MxMiAqdm1jczEyKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9MzQzNT1zdGF0aWMgYm9vbCBuZXN0ZWRfZ2V0X3ZtY3MxMl9wYWdlcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zNTE0LVx0fVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzozNTE1Olx0aWYgKG5lc3RlZF92bXhfcHJlcGFyZV9tc3JfYml0bWFwKHZjcHUsIHZtY3MxMikpXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM1MTYtXHRcdGV4ZWNfY29udHJvbHNfc2V0Yml0KHZteCwgQ1BVX0JBU0VEX1VTRV9NU1JfQklUTUFQUyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA1OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMDA4CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0IGluIHRoaXMgYXJlYToKCioqSW5saW5pbmcgYW5kIFZNQ1MxMiBQYWdlczogQSBRdWljayBDaGVjayoqCgpSaWdodCwgbGV0JiMzOTtzIHNlZSwgaXQmIzM5O3MgZGVjbGFyZWQgYHN0YXRpYyBpbmxpbmVgLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgZnVuY3Rpb24sIHdoYXRldmVyIGl0IGlzLCBpcyBnb2luZyB0byBiZSBpbmxpbmVkIGRpcmVjdGx5IGludG8gYG5lc3RlZF9nZXRfdm1jczEyX3BhZ2VzYC4gVGhhdCYjMzk7cyB0aGUgZmlyc3QgdGhpbmcgSSBub3RlLiBJdCBtYWtlcyBzZW5zZSwgZ2l2ZW4gdGhlIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgb2YgY2FsbGluZyBhIGZ1bmN0aW9uLCBlc3BlY2lhbGx5IGluIGEgY3JpdGljYWwgcGF0aC4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gcXVpY2tseSByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0IGBuZXN0ZWRfZ2V0X3ZtY3MxMl9wYWdlc2AgKmFjdHVhbGx5KiBkb2VzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB3aGVyZSB0aGlzIGlubGluaW5nIGlzIGhhcHBlbmluZy4gVGltZSB0byB2ZXJpZnkgaXRzIG9wZXJhdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIGltcGxlbWVudGF0aW9uIGFuZCBlbnN1cmUgdGhlIGlubGluaW5nIG9wdGltaXphdGlvbiBpcyBpbmRlZWQgc291bmQgd2l0aGluIHRoYXQgZnVuY3Rpb24mIzM5O3Mgc2NvcGUuIExldCYjMzk7cyBkaWcgaW50byBgbmVzdGVkX2dldF92bWNzMTJfcGFnZXNgIHRvIGNvbmZpcm0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA1OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25lc3RlZF9nZXRfdm1jczEyX3BhZ2VzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTkwMj1zdGF0aWMgaW50IG5lc3RlZF92bXhfY2hlY2tfYXBpY3ZfY29udHJvbHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtOTI4LVx0ICogdGhlIGRlc2NyaXB0b3IgYWRkcmVzcyBoYXMgYmVlbiBhbHJlYWR5IGNoZWNrZWRcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6OTI5Olx0ICogaW4gbmVzdGVkX2dldF92bWNzMTJfcGFnZXMuXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTkzMC1cdCAqXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz0yNDI0PXN0YXRpYyB2b2lkIHByZXBhcmVfdm1jczAyX2Vhcmx5KHN0cnVjdCB2Y3B1X3ZteCAqdm14LCBzdHJ1Y3QgbG9hZGVkX3ZtY3MgKnZtY3MwMSxcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTI0NzQtXHQvKlxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzoyNDc1Olx0ICogVGhpcyBiaXQgd2lsbCBiZSBjb21wdXRlZCBpbiBuZXN0ZWRfZ2V0X3ZtY3MxMl9wYWdlcywgYmVjYXVzZVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0yNDc2LVx0ICogd2UgZG8gbm90IGhhdmUgYWNjZXNzIHRvIEwxJiMzOTtzIE1TUiBiaXRtYXAgeWV0LiAgRm9yIG5vdywga2VlcFxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9MzQwNj1zdGF0aWMgYm9vbCBuZXN0ZWRfZ2V0X2V2bWNzX3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzQzNC1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6MzQzNTpzdGF0aWMgYm9vbCBuZXN0ZWRfZ2V0X3ZtY3MxMl9wYWdlcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM0MzYte1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9MzUyMz1zdGF0aWMgYm9vbCB2bXhfZ2V0X25lc3RlZF9zdGF0ZV9wYWdlcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zNTQzLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzozNTQ0Olx0aWYgKGlzX2d1ZXN0X21vZGUodmNwdSkgXHUwMDI2XHUwMDI2ICFuZXN0ZWRfZ2V0X3ZtY3MxMl9wYWdlcyh2Y3B1KSlcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzU0NS1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9MzYyMj1lbnVtIG52bXhfdm1lbnRyeV9zdGF0dXMgbmVzdGVkX3ZteF9lbnRlcl9ub25fcm9vdF9tb2RlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM2NzQtXHRpZiAoZnJvbV92bWVudHJ5KSB7XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjM2NzU6XHRcdGlmICh1bmxpa2VseSghbmVzdGVkX2dldF92bWNzMTJfcGFnZXModmNwdSkpKSB7XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM2NzYtXHRcdFx0dm14X3N3aXRjaF92bWNzKHZjcHUsIFx1MDAyNnZteC1cdTAwM2V2bWNzMDEpO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzcwOS1cdFx0ICogbmVlZCB0byBwZXJmb3JtIGdwYSB0byBocGEgdHJhbnNsYXRpb24pLiBSZXF1ZXN0IGEgY2FsbFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzozNzEwOlx0XHQgKiB0byBuZXN0ZWRfZ2V0X3ZtY3MxMl9wYWdlcyBiZWZvcmUgdGhlIG5leHQgVk0tZW50cnkuICBUaGUgTVNSc1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zNzExLVx0XHQgKiBoYXZlIGFscmVhZHkgYmVlbiBzZXQgYXQgdm1lbnRyeSB0aW1lIGFuZCBzaG91bGQgbm90IGJlIHJlc2V0LlxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9Njg4OT1zdGF0aWMgaW50IHZteF9zZXRfbmVzdGVkX3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTY5OTEtXHRcdCAqIHJlc3RvcmVkIHlldC4gRVZNQ1Mgd2lsbCBiZSBtYXBwZWQgZnJvbVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo2OTkyOlx0XHQgKiBuZXN0ZWRfZ2V0X3ZtY3MxMl9wYWdlcygpLlxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02OTkzLVx0XHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDU6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIzNDYKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiA2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBJIHNlZSBpdDoKCioqQ29uc2lkZXJpbmcgTmVzdGVkIFZNWCBFbnRyeSBQb2ludHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB3ZSYjMzk7cmUgZW50ZXJpbmcgbmVzdGVkIFZNWCBhbmQgSSBzZWUgYSBjb3VwbGUgb2YgZnVuY3Rpb25zLiBgbmVzdGVkX2dldF92bWNzMTJfcGFnZXNgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBpbW1lZGlhdGVseSB0ZWxscyBtZSBpdCYjMzk7cyBsaWtlbHkgaW50ZXJuYWwgdG8gYSBzcGVjaWZpYyBjb21waWxhdGlvbiB1bml0LiBJIGFsc28gc2VlIHRoYXQgYG5lc3RlZF92bXhfZW50ZXJfbm9uX3Jvb3RfbW9kZWAgaXMgKm5vdCogc3RhdGljLCB3aGljaCBnaXZlcyBtZSBtb3JlIG9wdGlvbnMgYXMgYSBjYWxsaW5nIHBvaW50LiBHaXZlbiB0aGF0LCBJJiMzOTttIGxlYW5pbmcgdG93YXJkcyB1c2luZyBgbmVzdGVkX3ZteF9lbnRlcl9ub25fcm9vdF9tb2RlYC4gVGhhdCBmZWVscyBsaWtlIHRoZSBtb3JlIHZlcnNhdGlsZSBvcHRpb24uCgpOb3csIGJlZm9yZSBJIGNvbW1pdCB0byB0aGF0LCBJIG5lZWQgdG8gY2hlY2sgc29tZXRoaW5nIGVsc2UuIExldCYjMzk7cyBzZWUgaG93IGBfX25lc3RlZF92bXhfdm1leGl0YCBpcyBkZWZpbmVkLCBqdXN0IHRvIG1ha2Ugc3VyZSB0aGlzIGlzIGdvaW5nIHRvIHBsYXkgbmljZWx5LiBJdCBpcyBlc3NlbnRpYWwgdG8gZW5zdXJlIHRoYXQgdGhlIHZtZXhpdCBoYW5kbGVyIGlzIHByb3Blcmx5IGNvbmZpZ3VyZWQgdG8gZGVhbCB3aXRoIG5vbi1yb290IG1vZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA1OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fbmVzdGVkX3ZteF92bWV4aXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NDk0MT1zdGF0aWMgdm9pZCBuZXN0ZWRfdm14X3Jlc3RvcmVfaG9zdF9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01MDUzLSAqL1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo1MDU0OnZvaWQgX19uZXN0ZWRfdm14X3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiB2bV9leGl0X3JlYXNvbixcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTA1NS1cdFx0XHQgdTMyIGV4aXRfaW50cl9pbmZvLCB1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDU6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI4MzgKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIER5bmFtaWMgTmF0dXJlIGFuZCBMZXZlcmFnaW5nIE5lc3RlZCBWaXJ0dWFsaXphdGlvbioqCgpSaWdodCwgc28gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgbm9uLXN0YXRpYyBoZXJlLiBUaGF0IGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIGFib3V0IGR5bmFtaXNtLCBhbmQgaG93IHdlJiMzOTtyZSBnb2luZyB0byBhY2NvbW1vZGF0ZSB0aGF0LiBNeSBndXQgcmVhY3Rpb24gaXMgdGhhdCB3ZSBtaWdodCBiZSBhYmxlIHRvIGxldmVyYWdlIGBfX25lc3RlZF92bXhfdm1leGl0YC4gSXQgZmVlbHMgbGlrZSB0aGUgcmlnaHQgdG9vbCBmb3IgdGhlIGpvYiBnaXZlbiB0aGUgc2l0dWF0aW9uLgoKTm93LCBiZWZvcmUgSSBnZXQgdG9vIGZhciBkb3duIHRoYXQgcGF0aCwgSSBzaG91bGQgcXVpY2tseSBjaGVjayBpbiBvbiBga3ZtcHBjX3BhdGNoX2RjYnpgLiBJdCYjMzk7cyBhIGtleSBhcmVhIHRoYXQgb2Z0ZW4gbmVlZHMgY2FyZWZ1bCBtYW5hZ2VtZW50IHdpdGggdGhpcyB0eXBlIG9mIGFwcHJvYWNoLCBhbmQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nIHRoYXQgY291bGQgaW50ZXJhY3Qgb3IgaW50ZXJmZXJlIHdpdGggdGhpcy4gTWFraW5nIHRoaXMgY2hlY2sgdXBmcm9udCBzaG91bGQgc2F2ZSBzb21lIHRpbWUuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwNTo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1wcGNfcGF0Y2hfZGNieiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYz01NTA9c3RhdGljIHZvaWQga3ZtcHBjX3NldF9wdnJfcHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgcHZyKVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmMtNjM5LSAqL1xuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYzo2NDA6c3RhdGljIHZvaWQga3ZtcHBjX3BhdGNoX2RjYnooc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtcHBjX3B0ZSAqcHRlKVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYy02NDEte1xuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmM9Njc3PXN0YXRpYyBpbnQga3ZtcHBjX2hhbmRsZV9wYWdlZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmMtNzc4LVx0XHRcdCAoISh2Y3B1LVx1MDAzZWFyY2guaGZsYWdzIFx1MDAyNiBCT09LM1NfSEZMQUdfRENCWjMyKSkpXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wci5jOjc3OTpcdFx0XHRrdm1wcGNfcGF0Y2hfZGNieih2Y3B1LCBcdTAwMjZwdGUpO1xuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYy03ODAtXHR9IGVsc2Uge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwNTo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzQxNwoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIGBrdm1wcGNfaGFuZGxlX3BhZ2VmYXVsdGAqKgoKT2theSwgc28gYGt2bXBwY19oYW5kbGVfcGFnZWZhdWx0YCBpcyBhICpzdGF0aWMqIGZ1bmN0aW9uLiBUaGF0IGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rLCAmIzM0O0FscmlnaHQsIGxldCYjMzk7cyBzZWUgd2hlcmUgdGhpcyB0aGluZyBpcyBhY3R1YWxseSBiZWluZyB1c2VkLiBTdGF0aWMgZnVuY3Rpb25zIGFyZSBsb2NhbGl6ZWQsIHdoaWNoIG1lYW5zIGZpZ3VyaW5nIG91dCBpdHMgY2FsbGVycyBpcyBnb2luZyB0byBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBpdHMgb3ZlcmFsbCBpbXBhY3QgYW5kIGZ1bmN0aW9uYWxpdHkgd2l0aGluIHRoZSBLVk0vUFBDIGFyY2hpdGVjdHVyZS4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGlzIHNwZWNpZmljIHBhZ2UgZmF1bHQgaGFuZGxlciB0byB1bmRlcnN0YW5kIHRoZSBjaGFpbiBvZiBldmVudHMgdGhhdCBsZWFkIHRvIGl0IGJlaW5nIGludm9rZWQuJiMzNDsgSSYjMzk7bSBtZW50YWxseSBmaWxpbmcgdGhpcyBhcyBhIGxvY2FsaXplZCBpbnZlc3RpZ2F0aW9uLCBmb2N1c2luZyBzb2xlbHkgb24gdGhlIGltbWVkaWF0ZSBjYWxsIGdyYXBoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwNTo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1wcGNfaGFuZGxlX3BhZ2VmYXVsdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYz02NjI9c3RhdGljIGJvb2wga3ZtcHBjX3Zpc2libGVfZ3BhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhKVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmMtNjc2LVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYzo2Nzc6c3RhdGljIGludCBrdm1wcGNfaGFuZGxlX3BhZ2VmYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wci5jLTY3OC1cdFx0XHQgICAgdWxvbmcgZWFkZHIsIGludCB2ZWMpXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYz0xMTMyPWludCBrdm1wcGNfaGFuZGxlX2V4aXRfcHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgZXhpdF9ucilcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wci5jLTExNzctXHRcdFx0aW50IGlkeCA9IHNyY3VfcmVhZF9sb2NrKFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZXNyY3UpO1xuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYzoxMTc4Olx0XHRcdHIgPSBrdm1wcGNfaGFuZGxlX3BhZ2VmYXVsdCh2Y3B1LCBrdm1wcGNfZ2V0X3BjKHZjcHUpLCBleGl0X25yKTtcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmMtMTE3OS1cdFx0XHRzcmN1X3JlYWRfdW5sb2NrKFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZXNyY3UsIGlkeCk7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYy0xMjI3LVx0XHRcdGludCBpZHggPSBzcmN1X3JlYWRfbG9jayhcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VzcmN1KTtcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmM6MTIyODpcdFx0XHRyID0ga3ZtcHBjX2hhbmRsZV9wYWdlZmF1bHQodmNwdSwgZGFyLCBleGl0X25yKTtcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmMtMTIyOS1cdFx0XHRzcmN1X3JlYWRfdW5sb2NrKFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZXNyY3UsIGlkeCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA1OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MTA2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQb3RlbnRpYWwgSG9vayBQb2ludHMgZm9yIFZpcnR1YWxpemF0aW9uIEV4aXQgSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB3ZSBjYW4gaW50ZXJjZXB0IGFuZCBoYW5kbGUgdmlydHVhbGl6YXRpb24gZXhpdHMuIGBrdm1wcGNfaGFuZGxlX2V4aXRfcHJgIGlzIGRlZmluaXRlbHkgYSBrZXkgZnVuY3Rpb24gaGVyZSwgYW5kIHRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgKm5vdCogc3RhdGljIGlzIHZlcnkgcHJvbWlzaW5nLiBUaGF0IG1lYW5zIHdlIGNhbiBwb3RlbnRpYWxseSByZS1wdXJwb3NlIG9yIGhvb2sgaW50byBpdCBkaXJlY3RseS4KClNvLCB0aGUgY2VudHJhbCBmdW5jdGlvbnMgSSYjMzk7dmUgaWRlbnRpZmllZCB0aGF0IHdlIG5lZWQgdG8gY29uc2lkZXIgYXJlOgoKKiAgIGBuZXN0ZWRfc3ZtX3ZtcnVuYAoqICAgYG5lc3RlZF9zdm1fdm1leGl0YAoqICAgYHZtbG9hZF9pbnRlcmNlcHRpb25gCiogICBgdm1zYXZlX2ludGVyY2VwdGlvbmAKKiAgIGBzdm1fZW50ZXJfc21tYAoqICAgYHN2bV9sZWF2ZV9zbW1gCiogICBgbmVzdGVkX3ZteF9lbnRlcl9ub25fcm9vdF9tb2RlYAoqICAgYF9fbmVzdGVkX3ZteF92bWV4aXRgCiogICBga3ZtcHBjX2hhbmRsZV9leGl0X3ByYAoKTm93LCBob2xkIG9uLi4uSSBzZWUgdGhhdCBgc3ZtX2VudGVyX3NtbWAgYW5kIGBzdm1fbGVhdmVfc21tYCBhcmUgc3RhdGljLiBUaGF0JiMzOTtzIG5vdCBpZGVhbCBmb3IgZGlyZWN0IGhvb2tpbmcuIEJ1dCB3YWl0LCBjYW4gd2UgbWF5YmUgdXNlIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyBgZW50ZXJfc21tYCBhbmQgYGVtdWxhdG9yX2xlYXZlX3NtbWAgaW5zdGVhZD8gTGV0JiMzOTtzIHF1aWNrbHkgZG91YmxlLWNoZWNrLi4uIFllcywgYGVudGVyX3NtbWAgaXMgZGVmaW5pdGVseSBub24tc3RhdGljLCB3aGljaCBpcyB3aGF0IHdlIG5lZWQuIEFuZCwgZ29vZCwgYGVtdWxhdG9yX2xlYXZlX3NtbWAgaXMgYWxzbyBub24tc3RhdGljLiBFeGNlbGxlbnQuIExldCYjMzk7cyBkaWcgaW50byBgZW11bGF0b3JfbGVhdmVfc21tYCBpbiBhIGJpdCBtb3JlIGRldGFpbCB0byBlbnN1cmUgaXQgcHJvdmlkZXMgdGhlIG5lY2Vzc2FyeSBmdW5jdGlvbmFsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwNTo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtlbXVsYXRvcl9sZWF2ZV9zbW0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zbW0uYz01MTY9c3RhdGljIGludCByc21fbG9hZF9zdGF0ZV82NChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCxcbi0tXG5hcmNoL3g4Ni9rdm0vc21tLmMtNTcyLVxuYXJjaC94ODYva3ZtL3NtbS5jOjU3MzppbnQgZW11bGF0b3JfbGVhdmVfc21tKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KVxuYXJjaC94ODYva3ZtL3NtbS5jLTU3NC17XG4tLVxuYXJjaC94ODYva3ZtL3NtbS5oPTE1OD12b2lkIGVudGVyX3NtbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuYXJjaC94ODYva3ZtL3NtbS5oOjE1OTppbnQgZW11bGF0b3JfbGVhdmVfc21tKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KTtcbmFyY2gveDg2L2t2bS9zbW0uaC0xNjAtdm9pZCBwcm9jZXNzX3NtaShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuLS1cbmFyY2gveDg2L2t2bS9zbW0uaD0xNjM9c3RhdGljIGlubGluZSBib29sIGlzX3NtbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpIHsgcmV0dXJuIGZhbHNlOyB9XG4tLVxuYXJjaC94ODYva3ZtL3NtbS5oLTE2NS0vKlxuYXJjaC94ODYva3ZtL3NtbS5oOjE2NjogKiBlbXVsYXRvcl9sZWF2ZV9zbW0gaXMgdXNlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIsIHNvIHRoZVxuYXJjaC94ODYva3ZtL3NtbS5oLTE2Ny0gKiBzdHViIGlzIGRlZmluZWQgaW4geDg2LmMuXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTU3NTQ9c3RhdGljIGJvb2wgZW11bGF0b3JfaXNfc21tKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy01NzU5LSNpZm5kZWYgQ09ORklHX0tWTV9TTU1cbmFyY2gveDg2L2t2bS94ODYuYzo1NzYwOnN0YXRpYyBpbnQgZW11bGF0b3JfbGVhdmVfc21tKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KVxuYXJjaC94ODYva3ZtL3g4Ni5jLTU3NjEte1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYz01ODE0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgeDg2X2VtdWxhdGVfb3BzIGVtdWxhdGVfb3BzID0ge1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYy01ODU2LVx0LmlzX3NtbSAgICAgICAgICAgICAgPSBlbXVsYXRvcl9pc19zbW0sXG5hcmNoL3g4Ni9rdm0veDg2LmM6NTg1NzpcdC5sZWF2ZV9zbW0gICAgICAgICAgID0gZW11bGF0b3JfbGVhdmVfc21tLFxuYXJjaC94ODYva3ZtL3g4Ni5jLTU4NTgtXHQudHJpcGxlX2ZhdWx0ICAgICAgICA9IGVtdWxhdG9yX3RyaXBsZV9mYXVsdCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDU6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUzNjEKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAxODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVmaW5pbmcgdGhlIEZvY3VzOiBIeXBlcnZpc29yIEVudHJ5L0V4aXQgUG9pbnRzKioKCk9rYXksIHNvIGBlbXVsYXRvcl9sZWF2ZV9zbW1gIGlzIGRlZmluaXRlbHkgbm90IHN0YXRpYywgd2hpY2ggaXMgZ29vZCB0byBrbm93LiBOb3csIGxldCYjMzk7cyByZWZpbmUgdGhpcyBsaXN0IG9mIGtleSBmdW5jdGlvbnMgd2UmIzM5O3JlIGZvY3VzaW5nIG9uLiBJJiMzOTttIHRoaW5raW5nIHdlIG5lZWQgdG8gY29uY2VudHJhdGUgb24gdGhlIHBvaW50cyB3aGVyZSB0aGUgaHlwZXJ2aXNvciBpcyBlaXRoZXIgZW50ZXJlZCBvciBleGl0ZWQuIFNvLCByaWdodCBub3csIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlc2UgZnVuY3Rpb25zOiBgbmVzdGVkX3N2bV92bXJ1bmAsIGBuZXN0ZWRfc3ZtX3ZtZXhpdGAsIGB2bWxvYWRfaW50ZXJjZXB0aW9uYCwgYHZtc2F2ZV9pbnRlcmNlcHRpb25gLCBgZW50ZXJfc21tYCwgYGVtdWxhdG9yX2xlYXZlX3NtbWAsIGBuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGVgLCBgX19uZXN0ZWRfdm14X3ZtZXhpdGAsIGFuZCBga3ZtcHBjX2hhbmRsZV9leGl0X3ByYC4KCkJ1dCwgd2FpdCBhIG1pbnV0ZS4uLiBpcyBga3ZtcHBjX2hhbmRsZV9leGl0X3ByYCBwb3RlbnRpYWxseSB0b28gaGlnaC1sZXZlbD8gSXQmIzM5O3MgdGhlIGNlbnRyYWwgaGFuZGxlciBmb3IgKmFsbCogZXhpdHMgcmVsYXRlZCB0byBQUiBLVk0uIEl0JiMzOTtzIGEgYnJvYWQgZnVuY3Rpb24sIGFuZCBJIG5lZWQgdG8gaG9uZSBpbiBvbiB0aGUgY29yZSBvcGVyYXRpb25zLiBQZXJoYXBzIGBrdm1wcGNfaGFuZGxlX3BhZ2VmYXVsdGAgd291bGQgYmUgYSBiZXR0ZXIgY2hvaWNlLiBFdmVuIGlmIGl0JiMzOTtzIHN0YXRpYywgaXQmIzM5O3MgYSBzaXphYmxlIGZ1bmN0aW9uLCBhbmQgdGhlcmUmIzM5O3MgYSBnb29kIGNoYW5jZSBpdCB3b24mIzM5O3QgYmUgaW5saW5lZC4gVGhhdCBjb3VsZCBtYWtlIGl0IGEgbW9yZSBtYW5hZ2VhYmxlIHRhcmdldCBmb3IgYW5hbHlzaXMuIEkmIzM5O2xsIG5lZWQgdG8gY29uc2lkZXIgdGhlIHRyYWRlLW9mZnMgb2YgdGhlIGNvbXBsZXhpdHkgb2YgdGhlIGZ1bmN0aW9uLCB2ZXJzdXMgdGhlIHZvbHVtZSBvZiBhY3Rpdml0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDU6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtcHBjX2hhbmRsZV9wYWdlZmF1bHQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmM9NjYyPXN0YXRpYyBib29sIGt2bXBwY192aXNpYmxlX2dwYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSlcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wci5jLTY3Ni1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmM6Njc3OnN0YXRpYyBpbnQga3ZtcHBjX2hhbmRsZV9wYWdlZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYy02NzgtXHRcdFx0ICAgIHVsb25nIGVhZGRyLCBpbnQgdmVjKVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmM9MTEzMj1pbnQga3ZtcHBjX2hhbmRsZV9leGl0X3ByKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgaW50IGV4aXRfbnIpXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYy0xMTc3LVx0XHRcdGludCBpZHggPSBzcmN1X3JlYWRfbG9jayhcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VzcmN1KTtcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmM6MTE3ODpcdFx0XHRyID0ga3ZtcHBjX2hhbmRsZV9wYWdlZmF1bHQodmNwdSwga3ZtcHBjX2dldF9wYyh2Y3B1KSwgZXhpdF9ucik7XG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wci5jLTExNzktXHRcdFx0c3JjdV9yZWFkX3VubG9jayhcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VzcmN1LCBpZHgpO1xuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmMtMTIyNy1cdFx0XHRpbnQgaWR4ID0gc3JjdV9yZWFkX2xvY2soXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlc3JjdSk7XG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wci5jOjEyMjg6XHRcdFx0ciA9IGt2bXBwY19oYW5kbGVfcGFnZWZhdWx0KHZjcHUsIGRhciwgZXhpdF9ucik7XG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wci5jLTEyMjktXHRcdFx0c3JjdV9yZWFkX3VubG9jayhcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VzcmN1LCBpZHgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwNTo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjM4NAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRoZSBleHBlcnQ6CgoqKkFuYWx5emluZyB0aGUgS1ZNL1BQQyBFeGl0IEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGBrdm1wcGNfaGFuZGxlX2V4aXRfcHJgLiBJIHNlZSBpdCYjMzk7cyBjYWxsZWQgdHdpY2UsIHdoaWNoIGlzIGEgY2x1ZTsgbm90IGFsd2F5cywgYnV0IG9mdGVuIHN1Z2dlc3RzIGl0JiMzOTtzICpub3QqIGlubGluZWQuIElmIGl0IHdhcyBpbmxpbmVkLCB5b3Ugd291bGQgdGhpbmsgd2Ugd291bGRuJiMzOTt0IHNlZSBtdWx0aXBsZSBjYWxscyBzbyBlYXNpbHkuCgpUaGlua2luZyBhYm91dCBhbHRlcm5hdGl2ZXMsIEkmIzM5O20gZ29pbmcgdG8gbG9vayBhdCB1c2luZyBga3ZtcHBjX2hhbmRsZV9wYWdlZmF1bHRgIGFzIGEgcG9zc2libHkgcmVsYXRlZCBmdW5jdGlvbiBmb3IgdGhpcyBwcm9jZXNzLgoKTm93LCBsZXQmIzM5O3Mgc3dpdGNoIGdlYXJzIGEgYml0LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hlcmUgdGhlIFZDUFUgbWFwcGluZyBoYXBwZW5zLCBzbyBJJiMzOTtsbCBnbyBjaGVjayBvdXQgYF9fa3ZtX3ZjcHVfbWFwYC4gSSBrbm93IGl0JiMzOTtzIGluIGB2aXJ0L2t2bS9rdm1fbWFpbi5jYCwgd2hpY2ggbWFrZXMgc2Vuc2UgYXMgdGhhdCYjMzk7cyBnZW5lcmFsbHkgd2hlcmUgY29yZSBLVk0gZnVuY3Rpb25hbGl0eSBsaXZlcy4gSSB3aWxsIGNoZWNrIHRoZSBjb250ZXh0IHN1cnJvdW5kaW5nIHRoYXQgY2FsbCwgYW5kIHRoZSBwYXJhbWV0ZXJzIGludm9sdmVkLCBhcyB0aGF0IHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHdoYXQmIzM5O3MgaGFwcGVuaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwNTo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2t2bV92Y3B1X21hcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3ZpcnQva3ZtL2t2bV9tYWluLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7dmlydC9rdm0va3ZtX21haW4uYz0zMTA4PUVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChfX2dmbl90b19wYWdlKTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzEwOS1cbnZpcnQva3ZtL2t2bV9tYWluLmM6MzExMDppbnQgX19rdm1fdmNwdV9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBnZm5fdCBnZm4sIHN0cnVjdCBrdm1faG9zdF9tYXAgKm1hcCxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzExMS1cdFx0ICAgYm9vbCB3cml0YWJsZSlcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMxNDQtfVxudmlydC9rdm0va3ZtX21haW4uYzozMTQ1OkVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChfX2t2bV92Y3B1X21hcCk7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMxNDYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA1OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2OTM4CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogOTA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIEtWTSBDaGFuZ2VzIGFuZCBSZWxldmFudCBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhlc2UgS1ZNIGNoYW5nZXMsIGZvY3VzaW5nIG9uIHRoZSBpbXBsaWNhdGlvbnMgYW5kIHBvdGVudGlhbCBhcmVhcyBmb3IgdGVzdGluZy4gIFRoZSBjb3JlIG9mIHRoZSBtYXR0ZXIgaXMgdGhlIGFkZGl0aW9uIG9mIGEgc2FmZXR5IGNoZWNrIHdpdGhpbiBgX19rdm1fdmNwdV9tYXBgOiBgaWYgKFdBUk5fT05fT05DRShtYXAtJmd0O2h2YSkpIGt2bV92Y3B1X3VubWFwKHZjcHUsIG1hcCk7YC4gIFRoaXMgbG9va3MgbGlrZSBhIGNydWNpYWwgc2FmZWd1YXJkLCBwcmV2ZW50aW5nIHBvdGVudGlhbCBpc3N1ZXMgd2l0aCB0aGUgbWVtb3J5IG1hcHBpbmcuCgpJJiMzOTt2ZSBkZXRlcm1pbmVkIHRoYXQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byBjb25zaWRlciBhcmU6IGBLVk1gLCBgS1ZNX0FNRGAsIGBLVk1fSU5URUxgLCBgS1ZNX0JPT0szU182NF9QUmAsIGBLVk1fU01NYCwgYW5kIGBLVk1fSFlQRVJWYC4gIFNwZWNpZmljYWxseSwgSSB2ZXJpZmllZCB0aGF0IGBLVk1fU01NYCAqaXMqIG5lZWRlZCBiZWNhdXNlIGl0IGVuYWJsZXMgU01NIGVtdWxhdGlvbi4gV2l0aCBhIGNsb3NlciBsb29rLCB0aGUgY2hhbmdlIGluIGBfX25lc3RlZF92bXhfdm1leGl0YCBub3cgY2FsbHMgYGt2bV9jaGVja19yZXF1ZXN0YCB1bmNvbmRpdGlvbmFsbHkuIFRoaXMgaXMgYSBidWcgZml4IGZvciBub24tSHlwZXJWIGNhc2VzIHdoZXJlIHRoZSByZXF1ZXN0IHdhcyBub3QgY2xlYXJlZC4gU28gd2hpbGUgYEtWTV9IWVBFUlZgIGlzbiYjMzk7dCAqc3RyaWN0bHkqIHJlcXVpcmVkIHRvIHRlc3QgdGhlIGZpeCBpdHNlbGYsIGluY2x1ZGluZyBpdCBkdXJpbmcgdGVzdGluZyB3b24mIzM5O3QgaHVydCwgc28gSSYjMzk7bGwga2VlcCBpdCBhcyBhIGNvbmZpZ3VyYXRpb24gdG8gaW5jbHVkZS4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIGZ1bmN0aW9ucyB0aGVtc2VsdmVzLiBJIGluaXRpYWxseSBsaXN0ZWQgYF9fa3ZtX3ZjcHVfbWFwYCwgYnV0IGFmdGVyIGEgY2xvc2VyIGV4YW1pbmF0aW9uLCBJJiMzOTt2ZSBkZWNpZGVkIHRvIG9taXQgdGhpcyBvbmUgZnJvbSBteSBjb3JlIGZvY3VzLCBhcyBpdCYjMzk7cyBhIHZlcnkgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbiBjYWxsZWQgYnkgYGt2bV92Y3B1X21hcGAgYW5kIGBrdm1fdmNwdV9tYXBfcmVhZG9ubHlgLiBJdCYjMzk7cyB1c2VkIHNvIGJyb2FkbHkgdGhhdCBpdCB3aWxsIGJlIGltcHJhY3RpY2FsIHRvIGZvY3VzIG9uIGl0LiBJbnN0ZWFkLCBJJiMzOTtsbCBiZSBjb25jZW50cmF0aW5nIG9uIHRoZXNlIGZ1bmN0aW9uczoKCiogICBgbmVzdGVkX3N2bV92bXJ1bmA6IEhhbmRsZXMgdGhlIFZNUlVOIGluc3RydWN0aW9uIGluIG5lc3RlZCBTVk0uCiogICBgbmVzdGVkX3N2bV92bWV4aXRgOiBIYW5kbGVzIFZNRVhJVCBpbiBuZXN0ZWQgU1ZNLgoqICAgYHZtbG9hZF9pbnRlcmNlcHRpb25gOiBIYW5kbGVzIFZNTE9BRCBpbnN0cnVjdGlvbi4KKiAgIGB2bXNhdmVfaW50ZXJjZXB0aW9uYDogSGFuZGxlcyBWTVNBVkUgaW5zdHJ1Y3Rpb24uCiogICBgZW50ZXJfc21tYDogSGFuZGxlcyBTTU0gZW50cnkuCiogICBgZW11bGF0b3JfbGVhdmVfc21tYDogSGFuZGxlcyBTTU0gZXhpdC4KKiAgIGBuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGVgOiBIYW5kbGVzIFZNWCBlbnRyeS4KKiAgIGBfX25lc3RlZF92bXhfdm1leGl0YDogSGFuZGxlcyBWTVggZXhpdC4KKiAgIGBrdm1wcGNfaGFuZGxlX3BhZ2VmYXVsdGA6IEhhbmRsZXMgcGFnZSBmYXVsdHMgaW4gUFIgS1ZNLgoKR2l2ZW4gdGhhdCBgbmVzdGVkX3ZteF9wcmVwYXJlX21zcl9iaXRtYXBgIGlzIGlubGluZWQgYW5kIHJlbGV2YW50IGZ1bmN0aW9ucyBpbmNsdWRlIGB2bXhfZ2V0X25lc3RlZF9zdGF0ZV9wYWdlc2Agd2hpY2ggaXMgY2FsbGVkIGJ5IGB2bXhfc2V0X25lc3RlZF9zdGF0ZWAsIGl0IG1ha2VzIHNlbnNlIHRvIGluY2x1ZGUgYHZteF9zZXRfbmVzdGVkX3N0YXRlYCBhcyBhIGZvY3VzIGZ1bmN0aW9uLgoKU28sIGluIHN1bW1hcnksIHRoZSBrZXkgYXJlYXMgdG8gY29uY2VudHJhdGUgb24gZm9yIHRlc3RpbmcgYXJlIHRoZXNlIGZ1bmN0aW9ucywgd2l0aCB0aGVzZSBjb25maWd1cmF0aW9ucywgdG8gdGhvcm91Z2hseSB2YWxpZGF0ZSB0aGUgc2FmZXR5IGNoZWNrIGFuZCBpdHMgaW1wYWN0IG9uIHRoZSBoeXBlcnZpc29yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwNTo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2bXhfc2V0X25lc3RlZF9zdGF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz02ODY3PWludCBuZXN0ZWRfdm14X2NoZWNrX3Jlc3RvcmVkX3ZtY3MxMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02ODg4LVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo2ODg5OnN0YXRpYyBpbnQgdm14X3NldF9uZXN0ZWRfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02ODkwLVx0XHRcdFx0c3RydWN0IGt2bV9uZXN0ZWRfc3RhdGUgX191c2VyICp1c2VyX2t2bV9uZXN0ZWRfc3RhdGUsXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz03NDc1PXN0cnVjdCBrdm1feDg2X25lc3RlZF9vcHMgdm14X25lc3RlZF9vcHMgX19pbml0ZGF0YSA9IHtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTc0ODItXHQuZ2V0X3N0YXRlID0gdm14X2dldF9uZXN0ZWRfc3RhdGUsXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjc0ODM6XHQuc2V0X3N0YXRlID0gdm14X3NldF9uZXN0ZWRfc3RhdGUsXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTc0ODQtXHQuZ2V0X25lc3RlZF9zdGF0ZV9wYWdlcyA9IHZteF9nZXRfbmVzdGVkX3N0YXRlX3BhZ2VzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwNTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODg3OAoJCQkJCQkJb3V0cHV0OiA0OQoJCQkJCQkJdGhvdWdodHM6IDgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvZGUsIGJyZWFraW5nIGl0IGRvd24gaW4gbXkgb3duIG1lbnRhbCBtb2RlbDoKCioqRGlnZXN0aW5nIHRoZSBOZXN0ZWQgU3RhdGUgTWVjaGFuaXNtKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgbmVzdGVkIHZpcnR1YWxpemF0aW9uIHN0YXRlIGlzIG1hbmFnZWQgd2l0aGluIEtWTSwgYW5kIEkmIzM5O3ZlIHRyYWNlZCBhIGJpdCBvZiB0aGUgY29kZS4gIGB2bXhfc2V0X25lc3RlZF9zdGF0ZWAgaXMgYSBzdGF0aWNhbGx5IGRlZmluZWQgZnVuY3Rpb24uIEJ1dCB3aGF0JiMzOTtzIGludGVyZXN0aW5nIGlzIHRoYXQgaXQmIzM5O3MgYmVpbmcgKmFzc2lnbmVkKiB0byBga3ZtX3g4Nl9uZXN0ZWRfb3BzLnNldF9zdGF0ZWAuIFRoYXQgc3VnZ2VzdHMgYHZteF9zZXRfbmVzdGVkX3N0YXRlYCBpcyB0aGUgY29uY3JldGUgaW1wbGVtZW50YXRpb24uIFRoZSBhYnN0cmFjdGlvbiB3b3VsZCBiZSB3aXRoaW4gYGt2bV94ODZfbmVzdGVkX29wc2AsIHdoaWxlIHRoZSB1bmRlcmx5aW5nIG9wZXJhdGlvbiBiZWxvbmdzIHRvIFZNWCwgYXMgaXRzIG5hbWUgc3VnZ2VzdHMuCgpOb3csIEkgc2VlIHRoZSBjYWxsIGNoYWluLiBgdm14X3NldF9uZXN0ZWRfc3RhdGVgIGlzbiYjMzk7dCBjYWxsZWQgZGlyZWN0bHksIGl0JiMzOTtzIGNhbGxlZCB0aHJvdWdoIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9uZXN0ZWRfc3RhdGVgLiBCaW5nbyEgYGt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X25lc3RlZF9zdGF0ZWAgaXMgbXkgcHJpbWFyeSBlbnRyeSBwb2ludCwgdGhlIHdheSB0byBzZXQgdGhlIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBzdGF0ZS4gIFRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0IGRpZ2dpbmcgdG8gdW5kZXJzdGFuZCAqaG93KiBuZXN0ZWQgc3RhdGVzIGFyZSBiZWluZyBtYW5hZ2VkLiBGcm9tIHRoZXJlLCBJIGNhbiBpbnZlc3RpZ2F0ZSB0aGUgYGt2bV94ODZfbmVzdGVkX29wc2Agc3RydWN0dXJlLCBhbmQgZmluYWxseSBgdm14X3NldF9uZXN0ZWRfc3RhdGVgIGl0c2VsZi4gVGhhdCBnaXZlcyBtZSB0aGUgYmlnIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA1OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfbmVzdGVkX3N0YXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3g4Ni5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDU6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkzMjIKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipEaXNzZWN0aW5nIHRoZSBLVk0gTmVzdGVkIFN0YXRlIEZ1bmN0aW9uKioKCk9rYXksIHNvIHRoZSBmdW5jdGlvbiBuYW1lIGlzIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9uZXN0ZWRfc3RhdGVgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSBpbnRvIHRoZSBgc2V0X25lc3RlZF9zdGF0ZWAgZnVuY3Rpb24gd2l0aGluIHRoZSB4ODYgYXJjaGl0ZWN0dXJlIGNvZGUsIHNwZWNpZmljYWxseSBpbiBgYXJjaC94ODYva3ZtL3g4Ni5jYC4gVGhhdCYjMzk7cyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBjb3JlIGxvZ2ljIGZvciBzZXR0aW5nIHRoZSBuZXN0ZWQgc3RhdGUgd2l0aGluIGEgS1ZNIGNvbnRleHQsIGxpa2VseSBoYW5kbGluZyB0aGUgaW50cmljYWNpZXMgb2YgaGFyZHdhcmUgdmlydHVhbGl6YXRpb24gZXh0ZW5zaW9ucyBhbmQgdGhlaXIgY29uZmlndXJhdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBkaWcgdXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA1OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2V0X25lc3RlZF9zdGF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS94ODYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA1OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NTYwCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipOZXN0ZWQgVmlydHVhbGl6YXRpb24gRGl2ZTogS1ZNX1NFVF9ORVNURURfU1RBVEUgSW52ZXN0aWdhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgaW50byB0aGUgaW50cmljYWNpZXMgb2YgbmVzdGVkIHZpcnR1YWxpemF0aW9uIHdpdGhpbiBLVk0sIGFuZCBteSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIG1lY2hhbmlzbSB0byBzZXQgdGhlIG5lc3RlZCBzdGF0ZS4gSSYjMzk7bSB0aGlua2luZywgJiMzNDtXaGVyZSB3b3VsZCB0aGlzIGNydWNpYWwgYml0IG9mIGZ1bmN0aW9uYWxpdHkgYmUgaGFuZGxlZD8mIzM0OyBOYXR1cmFsbHksIGdpdmVuIHRoZSBhcmNoaXRlY3R1cmUsIGBhcmNoL3g4Ni9rdm0veDg2LmNgIGZlZWxzIGxpa2UgdGhlIG1vc3QgbG9naWNhbCBzdGFydGluZyBwb2ludC4gSSB3YW50IHRvIHplcm8gaW4gb24gYEtWTV9TRVRfTkVTVEVEX1NUQVRFYC4gVGhpcyBtYWNybyBvciBmdW5jdGlvbiBpcyBsaWtlbHkgdGhlIGtleSB0byBjb250cm9sbGluZyB0aGUgbmVzdGVkIGd1ZXN0IGV4ZWN1dGlvbiBlbnZpcm9ubWVudCBmcm9tIHRoZSBob3N0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IgdGhvcm91Z2hseSDigJMgaG93IGl0JiMzOTtzIGludm9rZWQsIHdoYXQgZGF0YSBpdCBvcGVyYXRlcyBvbiwgYW5kLCBtb3N0IGNyaXRpY2FsbHksIGhvdyBpdCBpbnRlZ3JhdGVzIHdpdGggdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgdmlydHVhbGl6YXRpb24gZmVhdHVyZXMsIHBhcnRpY3VsYXJseSB0aGUgZXh0ZW5kZWQgcGFnZSB0YWJsZXMgKEVQVCkgYW5kIHZpcnR1YWwgbWFjaGluZSBjb250cm9sIHN0cnVjdHVyZXMgKFZNQ1MpLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgd2UgYXJlIGV4cG9zaW5nIGFuZCBjb25maWd1cmluZyB0aGVzZSBuZXN0ZWQgZmVhdHVyZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA1OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0tWTV9TRVRfTkVTVEVEX1NUQVRFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3g4Ni5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS94ODYuYz0zNDE2PWxvbmcga3ZtX2FyY2hfdmNwdV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtMzc3NS1cdH1cbmFyY2gveDg2L2t2bS94ODYuYzozNzc2Olx0Y2FzZSBLVk1fU0VUX05FU1RFRF9TVEFURToge1xuYXJjaC94ODYva3ZtL3g4Ni5jLTM3NzctXHRcdHN0cnVjdCBrdm1fbmVzdGVkX3N0YXRlIF9fdXNlciAqdXNlcl9rdm1fbmVzdGVkX3N0YXRlID0gYXJncDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDU6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzAwMDQKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiA0ODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEtWTSBJbnRlcmNlcHRpb24gUG9pbnRzKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgS1ZNIGNvZGUsIGFuZCBpdCBsb29rcyBsaWtlIHRoZSByZWxldmFudCBmdW5jdGlvbiBpcyBpbnNpZGUgYGt2bV9hcmNoX3ZjcHVfaW9jdGxgLiBUaGF0IG1lYW5zIGB2bXhfc2V0X25lc3RlZF9zdGF0ZWAgaXMgdGhlIGtleSBmdW5jdGlvbiB0byBmb2N1cyBvbiwgYW5kIHNpbmNlIGl0JiMzOTtzIGNhbGxlZCB0aHJvdWdoIGEgZnVuY3Rpb24gcG9pbnRlciwgaXQgc2hvdWxkbiYjMzk7dCBiZSBpbmxpbmVkLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4KCk5vdywgbGV0JiMzOTtzIHJldmlldyB0aGUgbWFpbiBmdW5jdGlvbnMgdGhhdCBjb3VsZCBiZSBpbnRlcmNlcHRpbmcgdGhpbmdzLiBJJiMzOTt2ZSBnb3Q6CgoqICAgYG5lc3RlZF9zdm1fdm1ydW5gCiogICBgbmVzdGVkX3N2bV92bWV4aXRgCiogICBgdm1sb2FkX2ludGVyY2VwdGlvbmAKKiAgIGB2bXNhdmVfaW50ZXJjZXB0aW9uYAoqICAgYGVudGVyX3NtbWAKKiAgIGBlbXVsYXRvcl9sZWF2ZV9zbW1gCiogICBgbmVzdGVkX3ZteF9lbnRlcl9ub25fcm9vdF9tb2RlYAoqICAgYF9fbmVzdGVkX3ZteF92bWV4aXRgCiogICBgdm14X3NldF9uZXN0ZWRfc3RhdGVgCiogICBga3ZtcHBjX2hhbmRsZV9wYWdlZmF1bHRgCgpBcmUgdGhlcmUgYW55IG90aGVyIGZ1bmN0aW9ucyB0aGF0IHdvdWxkIGJlIHVzZWZ1bD8gQWgsIGluIGBhcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wci5jYCwgSSBzZWUgdGhhdCBga3ZtcHBjX3BhdGNoX2RjYnpgIGlzIGNhbGxlZCBieSBga3ZtcHBjX2hhbmRsZV9wYWdlZmF1bHRgLiBJIGNoZWNrZWQgaWYgYGt2bXBwY19oYW5kbGVfcGFnZWZhdWx0YCBpcyBub24tc3RhdGljIGJ1dCBpdCYjMzk7cyBub3QuIEhvd2V2ZXIsIGl0JiMzOTtzIGNhbGxlZCBieSBga3ZtcHBjX2hhbmRsZV9leGl0X3ByYC4KClNvIG5vdyBteSBjb21wbGV0ZSBsaXN0IGlzOgoKKiAgIGBuZXN0ZWRfc3ZtX3ZtcnVuYAoqICAgYG5lc3RlZF9zdm1fdm1leGl0YAoqICAgYHZtbG9hZF9pbnRlcmNlcHRpb25gCiogICBgdm1zYXZlX2ludGVyY2VwdGlvbmAKKiAgIGBlbnRlcl9zbW1gCiogICBgZW11bGF0b3JfbGVhdmVfc21tYAoqICAgYG5lc3RlZF92bXhfZW50ZXJfbm9uX3Jvb3RfbW9kZWAKKiAgIGBfX25lc3RlZF92bXhfdm1leGl0YAoqICAgYHZteF9zZXRfbmVzdGVkX3N0YXRlYAoqICAgYGt2bXBwY19oYW5kbGVfZXhpdF9wcmAKCkkgaGF2ZSB0byBjb25zaWRlciBpZiBga3ZtcHBjX2hhbmRsZV9leGl0X3ByYCB3aWxsIGJlIHRvbyAmIzM0O2hvdCYjMzQ7IGJlY2F1c2UgaXQmIzM5O3MgdGhlIG1haW4gZXhpdCBoYW5kbGVyIGZvciBQUiBLVk0uCgpQZXJoYXBzIGBrdm1wcGNfaGFuZGxlX3BhZ2VmYXVsdGAgaXMgYmV0dGVyLCBldmVuIGlmIHN0YXRpYywgaXQmIzM5O3MgYSBsYXJnZSBmdW5jdGlvbiBhbmQgbWlnaHQgbm90IGJlIGlubGluZWQuIEl0JiMzOTtzIHRpbWUgdG8gY2hlY2sgdGhlIHNpemUgb2YgYGt2bXBwY19oYW5kbGVfcGFnZWZhdWx0YC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDU6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtcHBjX2hhbmRsZV9wYWdlZmF1bHQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmM9NjYyPXN0YXRpYyBib29sIGt2bXBwY192aXNpYmxlX2dwYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSlcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wci5jLTY3Ni1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmM6Njc3OnN0YXRpYyBpbnQga3ZtcHBjX2hhbmRsZV9wYWdlZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYy02NzgtXHRcdFx0ICAgIHVsb25nIGVhZGRyLCBpbnQgdmVjKVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmM9MTEzMj1pbnQga3ZtcHBjX2hhbmRsZV9leGl0X3ByKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgaW50IGV4aXRfbnIpXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYy0xMTc3LVx0XHRcdGludCBpZHggPSBzcmN1X3JlYWRfbG9jayhcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VzcmN1KTtcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmM6MTE3ODpcdFx0XHRyID0ga3ZtcHBjX2hhbmRsZV9wYWdlZmF1bHQodmNwdSwga3ZtcHBjX2dldF9wYyh2Y3B1KSwgZXhpdF9ucik7XG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wci5jLTExNzktXHRcdFx0c3JjdV9yZWFkX3VubG9jayhcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VzcmN1LCBpZHgpO1xuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmMtMTIyNy1cdFx0XHRpbnQgaWR4ID0gc3JjdV9yZWFkX2xvY2soXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlc3JjdSk7XG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wci5jOjEyMjg6XHRcdFx0ciA9IGt2bXBwY19oYW5kbGVfcGFnZWZhdWx0KHZjcHUsIGRhciwgZXhpdF9ucik7XG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wci5jLTEyMjktXHRcdFx0c3JjdV9yZWFkX3VubG9jayhcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VzcmN1LCBpZHgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwNTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTU2NwoJCQkJCQkJb3V0cHV0OiAzODAKCQkJCQkJCXRob3VnaHRzOiA2NjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgS1ZNIENvcmUgTG9naWMgZm9yIEZ1enppbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgZm9jdXMgbmVlZHMgdG8gYmUgb24gc3BlY2lmaWMgZnVuY3Rpb25zIHdpdGhpbiB0aGUgS1ZNIGNvcmUsIHNwZWNpZmljYWxseSBpbiByZWxhdGlvbiB0byB0aGUgeDg2IChTVk0gYW5kIFZNWCkgYW5kIFBvd2VyUEMgKEJvb2szUyBQUikgYXJjaGl0ZWN0dXJlcy4gSSYjMzk7dmUgcGlucG9pbnRlZCBhIHJhbmdlIG9mIGxpbmVzLCBzdGFydGluZyBmcm9tIGFyb3VuZCBsaW5lIDY3NyBhbmQgZXh0ZW5kaW5nIGF0IGxlYXN0IHRvIDc4MCwgaW5kaWNhdGluZyBhIHJlbGV2YW50IHNlY3Rpb24gb2YgY29kZS4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgKm5vdCogZGVhbGluZyB3aXRoIGFueSBpbmxpbmVkIGNvZGUgaGVyZS4KCkdvb2QgbmV3cywgYGt2bXBwY19oYW5kbGVfcGFnZWZhdWx0YCBpcyBhdmFpbGFibGUgZm9yIGRpcmVjdCB1c2UuIExpa2V3aXNlLCBgc3ZtX2VudGVyX3NtbWAgYW5kIGBzdm1fbGVhdmVfc21tYCBhcmUgYXNzaWduZWQgdG8gZnVuY3Rpb24gcG9pbnRlcnMsIHdoaWNoIGFsc28gbWVhbnMgdGhleSBhcmVuJiMzOTt0IGlubGluZWQgYW5kIGFyZSBhY2Nlc3NpYmxlIGRpcmVjdGx5LiBUaGlzIHNpbXBsaWZpZXMgdGhpbmdzLgoKVGhlcmVmb3JlLCB0aGUgbWFpbiBmdW5jdGlvbnMgSSBuZWVkIHRvIGZvY3VzIG9uIGZvciBmdXp6aW5nIGFyZToKCiogICBgbmVzdGVkX3N2bV92bXJ1bmAKKiAgIGBuZXN0ZWRfc3ZtX3ZtZXhpdGAKKiAgIGB2bWxvYWRfaW50ZXJjZXB0aW9uYAoqICAgYHZtc2F2ZV9pbnRlcmNlcHRpb25gCiogICBgc3ZtX2VudGVyX3NtbWAKKiAgIGBzdm1fbGVhdmVfc21tYAoqICAgYG5lc3RlZF92bXhfZW50ZXJfbm9uX3Jvb3RfbW9kZWAKKiAgIGBfX25lc3RlZF92bXhfdm1leGl0YAoqICAgYHZteF9zZXRfbmVzdGVkX3N0YXRlYAoqICAgYGt2bXBwY19oYW5kbGVfcGFnZWZhdWx0YAoKSSYjMzk7bSBhbHNvIGxvb2tpbmcgYXQgd2hpY2ggS1ZNIGNvbmZpZ3MgdGhlc2UgZnVuY3Rpb25zIGFwcGx5IHRvLgoKTm93LCBsZXQmIzM5O3MgY29uZmlybSB0aGUgcmVsZXZhbnQgY29uZmlncy4KCiogICBgS1ZNYCAtIENvbmZpcm1lZAoqICAgYEtWTV9BTURgIC0gQ29uZmlybWVkCiogICBgS1ZNX0lOVEVMYCAtIENvbmZpcm1lZAoqICAgYEtWTV9CT09LM1NfNjRfUFJgIC0gQ29uZmlybWVkCiogICBgS1ZNX1NNTWAgLSBDb25maXJtZWQKKiAgIGBLVk1fSFlQRVJWYCAtIENvbmZpcm1lZAoKTm8gb3RoZXIgY29uZmlncyBhcHBlYXIgdG8gYmUgcmVsZXZhbnQuCgpUaGUgY29yZSByZWFzb25pbmcgaGVyZSBpcyB0aGF0IHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBjbGVhbnVwIGNsYXNzLCBga3ZtX3ZjcHVfbWFwX2xvY2FsYCwgd2hpY2ggcmVwbGFjZXMgbWFudWFsIG1lbW9yeSBtYW5hZ2VtZW50IHdpdGggYGt2bV92Y3B1X21hcGAgYW5kIGBrdm1fdmNwdV91bm1hcGAgY2FsbHMuIFRoYXQmIzM5O3MgYSBzaWduaWZpY2FudCByZWZhY3RvciwgZXNwZWNpYWxseSBnaXZlbiBpdHMgc2NvcGUgYWNyb3NzIHg4NiBhbmQgUG93ZXJQQy4gV2UgbmVlZCB0byBmdXp6IHRoZXNlIGZ1bmN0aW9ucyByaWdvcm91c2x5IHRvIGVuc3VyZSB0aGUgbmV3IGNsYXNzIHdvcmtzIGFzIGludGVuZGVkLiBXZSBuZWVkIHRvIHZlcmlmeSB0aGF0IHdlJiMzOTtyZSBub3QgaW50cm9kdWNpbmcgYW55IG1lbW9yeSBsZWFrcyBvciB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLiBBZGRpdGlvbmFsbHksIHRoZSBwYXRjaCBpbmNsdWRlcyBhIGZpeCB0byBgX19uZXN0ZWRfdm14X3ZtZXhpdGAsIHdoaWNoIHdhcyBpbmNvcnJlY3RseSBnYXRlZCBvbiBgQ09ORklHX0tWTV9IWVBFUlZgLiBUaGUgcmVxdWVzdCB0byBnZXQgbmVzdGVkIHN0YXRlIHBhZ2VzIHdhcyBvbmx5IGNhbGxlZCB3aGVuIGh5cGVydiB3YXMgYWN0aXZlLCBidXQgc2luY2UgY2hlY2tpbmcgdGhlIHJlcXVlc3QgYWxzbyBjbGVhcnMgaXQsIHRoaXMgbmVlZGVkIHRvIGJlIGZpeGVkLiBUaGlzIGZpeCBhbHNvIG5lZWRzIHRvIGJlIHRlc3RlZCB0byBtYWtlIHN1cmUgaXQgZnVuY3Rpb25zIGFzIGludGVuZGVkLgoKSSYjMzk7bSBzYXRpc2ZpZWQgd2l0aCB0aGlzIGFuYWx5c2lzLiBJJiMzOTttIGdvaW5nIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDU6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnRoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlOiBLVk1fQk9PSzNTXzY0X1BSPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fQU1EJiMzNDssCiAgICAmIzM0O0tWTV9JTlRFTCYjMzQ7LAogICAgJiMzNDtLVk1fQk9PSzNTXzY0X1BSJiMzNDssCiAgICAmIzM0O0tWTV9TTU0mIzM0OywKICAgICYjMzQ7S1ZNX0hZUEVSViYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25lc3RlZF9zdm1fdm1ydW4mIzM0OywKICAgICYjMzQ7bmVzdGVkX3N2bV92bWV4aXQmIzM0OywKICAgICYjMzQ7dm1sb2FkX2ludGVyY2VwdGlvbiYjMzQ7LAogICAgJiMzNDt2bXNhdmVfaW50ZXJjZXB0aW9uJiMzNDssCiAgICAmIzM0O3N2bV9lbnRlcl9zbW0mIzM0OywKICAgICYjMzQ7c3ZtX2xlYXZlX3NtbSYjMzQ7LAogICAgJiMzNDtuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGUmIzM0OywKICAgICYjMzQ7X19uZXN0ZWRfdm14X3ZtZXhpdCYjMzQ7LAogICAgJiMzNDt2bXhfc2V0X25lc3RlZF9zdGF0ZSYjMzQ7LAogICAgJiMzNDtrdm1wcGNfaGFuZGxlX3BhZ2VmYXVsdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGNsZWFudXAgY2xhc3MgYGt2bV92Y3B1X21hcF9sb2NhbGAgYW5kIHVzZXMgaXQgdG8gcmVwbGFjZSBtYW51YWwgYGt2bV92Y3B1X21hcGAgYW5kIGBrdm1fdmNwdV91bm1hcGAgY2FsbHMgaW4gc2V2ZXJhbCBLVk0gZnVuY3Rpb25zIGFjcm9zcyB4ODYgKFNWTSBhbmQgVk1YKSBhbmQgUG93ZXJQQyAoQm9vazNTIFBSKS4gSXQgYWxzbyBmaXhlcyBhIGJ1ZyBpbiBgX19uZXN0ZWRfdm14X3ZtZXhpdGAgd2hlcmUgYGt2bV9jaGVja19yZXF1ZXN0KEtWTV9SRVFfR0VUX05FU1RFRF9TVEFURV9QQUdFUywgdmNwdSlgIHdhcyBvbmx5IGNhbGxlZCB3aGVuIGBDT05GSUdfS1ZNX0hZUEVSVmAgd2FzIGVuYWJsZWQsIGJ1dCBjaGVja2luZyB0aGUgcmVxdWVzdCBhbHNvIGNsZWFycyBpdCwgc28gaXQgc2hvdWxkIGJlIGNhbGxlZCB1bmNvbmRpdGlvbmFsbHkuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gY29yZSBLVk0gbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgY2xlYW51cCBjbGFzcyB3b3JrcyBjb3JyZWN0bHkgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSBtZW1vcnkgbGVha3Mgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzLCBhbmQgdG8gdmVyaWZ5IHRoZSBmaXggaW4gYF9fbmVzdGVkX3ZteF92bWV4aXRgLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7dGhlIGZvbGxvd2luZyBjb25maWdzIGRvIG5vdCBleGlzdCBpbiB0aGUga2VybmVsIHRyZWU6IEtWTV9CT09LM1NfNjRfUFImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA1OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzMjg5CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGVidWdnaW5nIGEgTWlzc2luZyBLVk0gRGVmaW5pdGlvbioqCgpIbW0sIGhvbGQgb24gYSBzZWNvbmQuLi4gYEtWTV9CT09LM1NfNjRfUFJgIGlzbiYjMzk7dCBzaG93aW5nIHVwIGFzIGRlZmluZWQ/IFRoYXQmIzM5O3MgdW5leHBlY3RlZC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZyBmaWxlIHdpdGhpbiB0aGUgUG93ZXJQQyBLVk0gYXJjaGl0ZWN0dXJlIGRpcmVjdG9yeS4gTGV0JiMzOTtzIGdldCBiYWNrIHRvIGBhcmNoL3Bvd2VycGMva3ZtL0tjb25maWdgIGFuZCB2ZXJpZnkgdGhhdCB0aGUgbWFjcm8gSSYjMzk7bSBsb29raW5nIGZvciBpcyBhY3R1YWxseSB0aGVyZSwgY29ycmVjdGx5IGRlZmluZWQsIGFuZCBjb25kaXRpb25hbGx5IGVuYWJsZWQuIEl0JiMzOTtzIHBvc3NpYmxlIHRoZXJlJiMzOTtzIGEgY29uZmlndXJhdGlvbiBkZXBlbmRlbmN5IEkmIzM5O20gbWlzc2luZywgYSB0eXBvLCBvciBwZXJoYXBzIGEgbW9yZSBzdWJ0bGUgaXNzdWUgd2l0aCB0aGUgS2NvbmZpZyBsb2dpYyB0aGF0JiMzOTtzIGNhdXNpbmcgaXQgbm90IHRvIGJlIGluY2x1ZGVkIGluIHRoZSBidWlsZC4gSSYjMzk7bGwgbmVlZCB0byBtZXRpY3Vsb3VzbHkgZXhhbWluZSB0aGUgY29udGV4dCBvZiB0aGF0IGRlZmluaXRpb24uIEEgcXVpY2sgdmlzdWFsIHNjYW4gbWF5IGJlIGFsbCBJIG5lZWQsIGJ1dCBJJiMzOTtsbCBiZSBzdXJlIHRvIGNhcmVmdWxseSB0cmFjZSBhbnkgZGVwZW5kZW5jaWVzIG9yIGNvbmRpdGlvbmFscyB0byBpZGVudGlmeSB0aGUgcHJvYmxlbS4gVGhlIGdvYWwgaXMgdG8gZWl0aGVyIGNvbmZpcm0gaXRzIGV4aXN0ZW5jZSBhbmQgc3BvdCBhbnkgb2J2aW91cyBlcnJvciwgb3IgZmluZCBvdXQgaXQgaXMgbm90IHRoZXJlIGFuZCBtb3ZlIG9uIHRvIHNvbHZpbmcgdGhlIHByb2JsZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA1OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk1fQk9PSzNTXzY0X1BSJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZz03OT1jb25maWcgS1ZNX0JPT0szU182NF9IVlxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy05OS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxMDA6Y29uZmlnIEtWTV9CT09LM1NfNjRfUFJcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xMDEtXHR0cmlzdGF0ZSBcJiMzNDtLVk0gc3VwcG9ydCB3aXRob3V0IHVzaW5nIGh5cGVydmlzb3IgbW9kZSBpbiBob3N0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA1OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzNzE4CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRlYnVnZ2luZyBhIEtjb25maWcgRGlzY3JlcGFuY3kqKgoKT2theSwgc28gSSYjMzk7bSBzZWVpbmcgYSBkaXNjcmVwYW5jeSBoZXJlLiBUaGlzIHRvb2wgSSYjMzk7bSB1c2luZyBpcyBjbGFpbWluZyB0aGF0IGBLVk1fQk9PSzNTXzY0X1BSYCBkb2VzbiYjMzk7dCBleGlzdCBpbiB0aGUga2VybmVsIHRyZWUuIFRoYXQgc2VlbXMgb2RkIGJlY2F1c2UgSSYjMzk7bSBhbG1vc3QgY2VydGFpbiBJIHNhdyBpdCBzb21ld2hlcmUuLi4gaGFuZyBvbiwgeWVhaCwgaXQmIzM5O3MgcmlnaHQgdGhlcmUgaW4gYGFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZ2AuCgpOb3csIHdoeSB3b3VsZCB0aGUgdG9vbCBnaXZlIG1lIGEgZmFsc2UgbmVnYXRpdmU/IE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0IG1pZ2h0IGJlIGRlZmF1bHRpbmcgdG8gY2hlY2tpbmcgdGhlIHg4NiBLY29uZmlnIGJ5IGRlZmF1bHQuIFRoYXQmIzM5O3MgYSBjb21tb24gb3ZlcnNpZ2h0IHdpdGggdGhlc2Uga2luZHMgb2YgdG9vbHMsIHNpbmNlIHg4NiBpcyBvZnRlbiB0aGUgcHJpbWFyeSBmb2N1cy4gT3IsIGl0IGNvdWxkIGJlIHRoYXQgdGhlIHRvb2wmIzM5O3MgY2hlY2tpbmcgdGhlIGdsb2JhbCBLY29uZmlnLCBidXQgaXQmIzM5O3Mgbm90IGFjY291bnRpbmcgZm9yIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb25maWd1cmF0aW9ucy4KCkxldCYjMzk7cyB0ZXN0IHRoaXMuIFRoZSB0b29sIGlzIHJlcG9ydGluZyB0aGF0IGBLVk1fQk9PSzNTXzY0X1BSYCBpcyBub24tZXhpc3RlbnQuIE15IG5leHQgc3RlcCB3aWxsIGJlIHRvIGNvbmZpcm0gd2hldGhlciBgS1ZNX0JPT0szU19QUmAgZXhpc3RzLiBJZiB0aGF0JiMzOTtzIHRoZSBjYXNlLCBpdCBjb3VsZCBtZWFuIHRoZXJlJiMzOTtzIGEgdHlwbyB3aXRoaW4gdGhlIHRvb2wgb3IsIHRoZSBjb25maWcgaXMgbmFtZWQgc2xpZ2h0bHkgZGlmZmVyZW50bHksIHN1Y2ggYXMgdGhlIGBfNjRgIGlzbiYjMzk7dCByZXF1aXJlZC4gTGV0JiMzOTtzIHNlZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDU6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTV9CT09LM1NfUFImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Bvd2VycGMva3ZtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnPTM0PWNvbmZpZyBLVk1fQk9PSzNTXzY0X0hBTkRMRVJcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMzctXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6Mzg6Y29uZmlnIEtWTV9CT09LM1NfUFJfUE9TU0lCTEVcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0zOS1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDU6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQyMzAKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLVk0gQ29uZmlndXJhdGlvbiBWZXJpZmljYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIGFib3V0IHRoaXMgS1ZNIHNldHRpbmcuIEl0JiMzOTtzIGRlZmluaXRlbHkgbm90IHdoYXQgSSBpbml0aWFsbHkgdGhvdWdodC4gTXkgbm90ZXMgYXJlIHBvaW50aW5nIHRvd2FyZHMgYEtWTV9CT09LM1NfNjRfUFJgIGFuZCBJIG5lZWQgdG8gc29saWRpZnkgdGhhdCBpbiBteSBtaW5kLiBSaWdodCwgbGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aGUgY29uZmlndXJhdGlvbiBmaWxlLCBzcGVjaWZpY2FsbHkgYGFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgaXQmIzM5O2xsIGJlIGRlZmluZWQuIEkgaGF2ZSB0byB2ZXJpZnkgdGhhdCYjMzk7cyB0aGUgY29ycmVjdCBvcHRpb24uIE5vIHJvb20gZm9yIGVycm9yIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA1OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0tWTV9CT09LM1NfNjRfUFImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Bvd2VycGMva3ZtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnPTc5PWNvbmZpZyBLVk1fQk9PSzNTXzY0X0hWXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTk5LVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjEwMDpjb25maWcgS1ZNX0JPT0szU182NF9QUlxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTEwMS1cdHRyaXN0YXRlIFwmIzM0O0tWTSBzdXBwb3J0IHdpdGhvdXQgdXNpbmcgaHlwZXJ2aXNvciBtb2RlIGluIGhvc3RcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDU6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ1MzcKCQkJCQkJCW91dHB1dDogMzU0CgkJCQkJCQl0aG91Z2h0czogMTAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFkZHJlc3NpbmcgdGhlIFRvb2wmIzM5O3MgTGltaXRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHNlZWluZyB0aGlzIGJlaGF2aW9yLCBhbmQgaXQmIzM5O3MgcHJldHR5IGNsZWFyOiB0aGUgdG9vbCBpcyBvcGVyYXRpbmcsIGJ1dCBtYXliZSBpdCYjMzk7cyAqb25seSogY2hlY2tpbmcgdGhlIHg4NiBjb25maWd1cmF0aW9ucy4gSSBzdXNwZWN0IHRoaXMgaXMgYmVjYXVzZSB0aGUgd29ya3NwYWNlIGl0c2VsZiBpcyBzZXQgdXAgZm9yIHg4Ni4gTWFrZXMgc2Vuc2UsIGdpdmVuIHRoZSBsaW1pdGF0aW9ucyBvZiBmdXp6aW5nIFBvd2VyUEMgaW4gdGhpcyBlbnZpcm9ubWVudC4gVGhlcmVmb3JlLCB0aGUgbG9naWNhbCBzdGVwIGlzIHRvIHNpbXBsaWZ5IHRoaW5ncyBhbmQgYWNrbm93bGVkZ2UgdGhlIGN1cnJlbnQgcmVhbGl0eS4gSSYjMzk7bSBnb2luZyB0byByZW1vdmUgYEtWTV9CT09LM1NfNjRfUFJgIGZyb20gdGhlIGNvbmZpZ3VyYXRpb24gZW50aXJlbHkgYW5kIGp1c3QgZm9jdXMgb24geDg2LCBiZWNhdXNlIGVmZmVjdGl2ZWx5IGl0IGNhbiYjMzk7dCBiZSByZWxpYWJseSBmdXp6ZWQgaW4gdGhlIGN1cnJlbnQgc2V0dXAgYW5kIHRoZSB0b29sIGRvZXNuJiMzOTt0IGhhbmRsZSBpdC4gSSYjMzk7bGwgYWxzbyByZW1vdmUgYGt2bXBwY19oYW5kbGVfcGFnZWZhdWx0YCBmcm9tIHRoZSBsaXN0LCBhcyBpdCYjMzk7cyBub3QgcmVsZXZhbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA1OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OywKICAgICYjMzQ7S1ZNX1NNTSYjMzQ7LAogICAgJiMzNDtLVk1fSFlQRVJWJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmVzdGVkX3N2bV92bXJ1biYjMzQ7LAogICAgJiMzNDtuZXN0ZWRfc3ZtX3ZtZXhpdCYjMzQ7LAogICAgJiMzNDt2bWxvYWRfaW50ZXJjZXB0aW9uJiMzNDssCiAgICAmIzM0O3Ztc2F2ZV9pbnRlcmNlcHRpb24mIzM0OywKICAgICYjMzQ7c3ZtX2VudGVyX3NtbSYjMzQ7LAogICAgJiMzNDtzdm1fbGVhdmVfc21tJiMzNDssCiAgICAmIzM0O25lc3RlZF92bXhfZW50ZXJfbm9uX3Jvb3RfbW9kZSYjMzQ7LAogICAgJiMzNDtfX25lc3RlZF92bXhfdm1leGl0JiMzNDssCiAgICAmIzM0O3ZteF9zZXRfbmVzdGVkX3N0YXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgY2xlYW51cCBjbGFzcyBga3ZtX3ZjcHVfbWFwX2xvY2FsYCBhbmQgdXNlcyBpdCB0byByZXBsYWNlIG1hbnVhbCBga3ZtX3ZjcHVfbWFwYCBhbmQgYGt2bV92Y3B1X3VubWFwYCBjYWxscyBpbiBzZXZlcmFsIEtWTSBmdW5jdGlvbnMgYWNyb3NzIHg4NiAoU1ZNIGFuZCBWTVgpIGFuZCBQb3dlclBDIChCb29rM1MgUFIpLiBJdCBhbHNvIGZpeGVzIGEgYnVnIGluIGBfX25lc3RlZF92bXhfdm1leGl0YCB3aGVyZSBga3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9HRVRfTkVTVEVEX1NUQVRFX1BBR0VTLCB2Y3B1KWAgd2FzIG9ubHkgY2FsbGVkIHdoZW4gYENPTkZJR19LVk1fSFlQRVJWYCB3YXMgZW5hYmxlZCwgYnV0IGNoZWNraW5nIHRoZSByZXF1ZXN0IGFsc28gY2xlYXJzIGl0LCBzbyBpdCBzaG91bGQgYmUgY2FsbGVkIHVuY29uZGl0aW9uYWxseS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBjb3JlIEtWTSBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyBjbGVhbnVwIGNsYXNzIHdvcmtzIGNvcnJlY3RseSBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIG1lbW9yeSBsZWFrcyBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMsIGFuZCB0byB2ZXJpZnkgdGhlIGZpeCBpbiBgX19uZXN0ZWRfdm14X3ZtZXhpdGAuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fQU1EJiMzNDssCiAgICAmIzM0O0tWTV9JTlRFTCYjMzQ7LAogICAgJiMzNDtLVk1fU01NJiMzNDssCiAgICAmIzM0O0tWTV9IWVBFUlYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZXN0ZWRfc3ZtX3ZtcnVuJiMzNDssCiAgICAmIzM0O25lc3RlZF9zdm1fdm1leGl0JiMzNDssCiAgICAmIzM0O3ZtbG9hZF9pbnRlcmNlcHRpb24mIzM0OywKICAgICYjMzQ7dm1zYXZlX2ludGVyY2VwdGlvbiYjMzQ7LAogICAgJiMzNDtzdm1fZW50ZXJfc21tJiMzNDssCiAgICAmIzM0O3N2bV9sZWF2ZV9zbW0mIzM0OywKICAgICYjMzQ7bmVzdGVkX3ZteF9lbnRlcl9ub25fcm9vdF9tb2RlJiMzNDssCiAgICAmIzM0O19fbmVzdGVkX3ZteF92bWV4aXQmIzM0OywKICAgICYjMzQ7dm14X3NldF9uZXN0ZWRfc3RhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBjbGVhbnVwIGNsYXNzIGBrdm1fdmNwdV9tYXBfbG9jYWxgIGFuZCB1c2VzIGl0IHRvIHJlcGxhY2UgbWFudWFsIGBrdm1fdmNwdV9tYXBgIGFuZCBga3ZtX3ZjcHVfdW5tYXBgIGNhbGxzIGluIHNldmVyYWwgS1ZNIGZ1bmN0aW9ucyBhY3Jvc3MgeDg2IChTVk0gYW5kIFZNWCkgYW5kIFBvd2VyUEMgKEJvb2szUyBQUikuIEl0IGFsc28gZml4ZXMgYSBidWcgaW4gYF9fbmVzdGVkX3ZteF92bWV4aXRgIHdoZXJlIGBrdm1fY2hlY2tfcmVxdWVzdChLVk1fUkVRX0dFVF9ORVNURURfU1RBVEVfUEFHRVMsIHZjcHUpYCB3YXMgb25seSBjYWxsZWQgd2hlbiBgQ09ORklHX0tWTV9IWVBFUlZgIHdhcyBlbmFibGVkLCBidXQgY2hlY2tpbmcgdGhlIHJlcXVlc3QgYWxzbyBjbGVhcnMgaXQsIHNvIGl0IHNob3VsZCBiZSBjYWxsZWQgdW5jb25kaXRpb25hbGx5LiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIGNvcmUgS1ZNIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IGNsZWFudXAgY2xhc3Mgd29ya3MgY29ycmVjdGx5IGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgbWVtb3J5IGxlYWtzIG9yIHVzZS1hZnRlci1mcmVlIGlzc3VlcywgYW5kIHRvIHZlcmlmeSB0aGUgZml4IGluIGBfX25lc3RlZF92bXhfdm1leGl0YC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDA1OjU3OjI4Ljg1NTI3MjM3OVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDcxMTQ2OTg2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9BTURcIixcbiAgICBcIktWTV9JTlRFTFwiLFxuICAgIFwiS1ZNX1NNTVwiLFxuICAgIFwiS1ZNX0hZUEVSVlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5lc3RlZF9zdm1fdm1ydW5cIixcbiAgICBcIm5lc3RlZF9zdm1fdm1leGl0XCIsXG4gICAgXCJ2bWxvYWRfaW50ZXJjZXB0aW9uXCIsXG4gICAgXCJ2bXNhdmVfaW50ZXJjZXB0aW9uXCIsXG4gICAgXCJzdm1fZW50ZXJfc21tXCIsXG4gICAgXCJzdm1fbGVhdmVfc21tXCIsXG4gICAgXCJuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGVcIixcbiAgICBcIl9fbmVzdGVkX3ZteF92bWV4aXRcIixcbiAgICBcInZteF9zZXRfbmVzdGVkX3N0YXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBjbGVhbnVwIGNsYXNzIGBrdm1fdmNwdV9tYXBfbG9jYWxgIGFuZCB1c2VzIGl0IHRvIHJlcGxhY2UgbWFudWFsIGBrdm1fdmNwdV9tYXBgIGFuZCBga3ZtX3ZjcHVfdW5tYXBgIGNhbGxzIGluIHNldmVyYWwgS1ZNIGZ1bmN0aW9ucyBhY3Jvc3MgeDg2IChTVk0gYW5kIFZNWCkgYW5kIFBvd2VyUEMgKEJvb2szUyBQUikuIEl0IGFsc28gZml4ZXMgYSBidWcgaW4gYF9fbmVzdGVkX3ZteF92bWV4aXRgIHdoZXJlIGBrdm1fY2hlY2tfcmVxdWVzdChLVk1fUkVRX0dFVF9ORVNURURfU1RBVEVfUEFHRVMsIHZjcHUpYCB3YXMgb25seSBjYWxsZWQgd2hlbiBgQ09ORklHX0tWTV9IWVBFUlZgIHdhcyBlbmFibGVkLCBidXQgY2hlY2tpbmcgdGhlIHJlcXVlc3QgYWxzbyBjbGVhcnMgaXQsIHNvIGl0IHNob3VsZCBiZSBjYWxsZWQgdW5jb25kaXRpb25hbGx5LiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIGNvcmUgS1ZNIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IGNsZWFudXAgY2xhc3Mgd29ya3MgY29ycmVjdGx5IGFuZCBkb2Vzbid0IGludHJvZHVjZSBtZW1vcnkgbGVha3Mgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzLCBhbmQgdG8gdmVyaWZ5IHRoZSBmaXggaW4gYF9fbmVzdGVkX3ZteF92bWV4aXRgLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwNTo1NzoyOC44NTUyNzg3MjlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MDU1NzQyNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBiODgwNDg1YzFlMzE0OWM0N2M3NWFkYjFmZWJhYzUwMDljNTg2MzgzXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgSnVsIDI1IDA1OjU3OjI2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmMgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wci5jXFxuaW5kZXggMmJhMmRkMjZhN2VhZDguLmRhN2EwMzhlMjcwMGQyIDEwMDY0NFxcbi0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmNcXG4rKysgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wci5jXFxuQEAgLTYzOSwyNyArNjM5LDI0IEBAIHN0YXRpYyB2b2lkIGt2bXBwY19zZXRfcHZyX3ByKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIHB2cilcXG4gICovXFxuIHN0YXRpYyB2b2lkIGt2bXBwY19wYXRjaF9kY2J6KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bXBwY19wdGUgKnB0ZSlcXG4ge1xcbi1cXHRzdHJ1Y3Qga3ZtX2hvc3RfbWFwIG1hcDtcXG4gXFx0dTY0IGhwYWdlX29mZnNldDtcXG4gXFx0dTMyICpwYWdlO1xcbiBcXHRpbnQgaSwgcjtcXG4gXFxuLVxcdHIgPSBrdm1fdmNwdV9tYXAodmNwdSwgcHRlLVxcdTAwM2VyYWRkciBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZULCBcXHUwMDI2bWFwKTtcXG4tXFx0aWYgKHIpXFxuK1xcdENMQVNTKGt2bV92Y3B1X21hcF9sb2NhbCwgbSkodmNwdSwgcHRlLVxcdTAwM2VyYWRkciBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUKTtcXG4rXFx0aWYgKG0ucmV0KVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRocGFnZV9vZmZzZXQgPSBwdGUtXFx1MDAzZXJhZGRyIFxcdTAwMjYgflBBR0VfTUFTSztcXG4gXFx0aHBhZ2Vfb2Zmc2V0IFxcdTAwMjY9IH4weEZGRlVMTDtcXG4gXFx0aHBhZ2Vfb2Zmc2V0IC89IDQ7XFxuIFxcbi1cXHRwYWdlID0gbWFwLmh2YTtcXG4rXFx0cGFnZSA9IG0ubWFwLmh2YTtcXG4gXFxuIFxcdC8qIHBhdGNoIGRjYnogaW50byByZXNlcnZlZCBpbnN0cnVjdGlvbiwgc28gd2UgdHJhcCAqL1xcbiBcXHRmb3IgKGk9aHBhZ2Vfb2Zmc2V0OyBpIFxcdTAwM2MgaHBhZ2Vfb2Zmc2V0ICsgKEhXX1BBR0VfU0laRSAvIDQpOyBpKyspXFxuIFxcdFxcdGlmICgoYmUzMl90b19jcHUocGFnZVtpXSkgXFx1MDAyNiAweGZmMDAwN2ZmKSA9PSBJTlNfRENCWilcXG4gXFx0XFx0XFx0cGFnZVtpXSBcXHUwMDI2PSBjcHVfdG9fYmUzMigweGZmZmZmZmY3KTtcXG4tXFxuLVxcdGt2bV92Y3B1X3VubWFwKHZjcHUsIFxcdTAwMjZtYXApO1xcbiB9XFxuIFxcbiBzdGF0aWMgYm9vbCBrdm1wcGNfdmlzaWJsZV9ncGEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEpXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jXFxuaW5kZXggNWUzZTI4MGNkNDgzZTMuLjczZjM3YjA1MGQwYTBiIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jXFxuQEAgLTEwODYsMTQgKzEwODYsMTQgQEAgaW50IGVudGVyX3N2bV9ndWVzdF9tb2RlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHZtY2IxMl9ncGEsIGJvb2wgZnJvbV92bXJ1bilcXG4gc3RhdGljIGludCBuZXN0ZWRfc3ZtX2NvcHlfdm1jYjEyX3RvX2NhY2hlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHZtY2IxMl9ncGEpXFxuIHtcXG4gXFx0c3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7XFxuLVxcdHN0cnVjdCBrdm1faG9zdF9tYXAgbWFwO1xcbiBcXHRzdHJ1Y3Qgdm1jYiAqdm1jYjEyO1xcbiBcXHRpbnQgciA9IDA7XFxuIFxcbi1cXHRpZiAoa3ZtX3ZjcHVfbWFwKHZjcHUsIGdwYV90b19nZm4odm1jYjEyX2dwYSksIFxcdTAwMjZtYXApKVxcbitcXHRDTEFTUyhrdm1fdmNwdV9tYXBfbG9jYWwsIG0pKHZjcHUsIGdwYV90b19nZm4odm1jYjEyX2dwYSkpO1xcbitcXHRpZiAobS5yZXQpXFxuIFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbiBcXG4tXFx0dm1jYjEyID0gbWFwLmh2YTtcXG4rXFx0dm1jYjEyID0gbS5tYXAuaHZhO1xcbiBcXHRuZXN0ZWRfY29weV92bWNiX2NvbnRyb2xfdG9fY2FjaGUoc3ZtLCBcXHUwMDI2dm1jYjEyLVxcdTAwM2Vjb250cm9sKTtcXG4gXFx0bmVzdGVkX2NvcHlfdm1jYl9zYXZlX3RvX2NhY2hlKHN2bSwgXFx1MDAyNnZtY2IxMi1cXHUwMDNlc2F2ZSk7XFxuIFxcbkBAIC0xMTA3LDcgKzExMDcsNiBAQCBzdGF0aWMgaW50IG5lc3RlZF9zdm1fY29weV92bWNiMTJfdG9fY2FjaGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdm1jYjEyX2dwYVxcbiBcXHRcXHRyID0gLUVJTlZBTDtcXG4gXFx0fVxcbiBcXG4tXFx0a3ZtX3ZjcHVfdW5tYXAodmNwdSwgXFx1MDAyNm1hcCk7XFxuIFxcdHJldHVybiByO1xcbiB9XFxuIFxcbkBAIC0xMjUxLDE1ICsxMjUwLDEzIEBAIHN0YXRpYyBpbnQgbmVzdGVkX3N2bV92bWV4aXRfdXBkYXRlX3ZtY2IxMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4gXFx0c3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7XFxuIFxcdHN0cnVjdCB2bWNiICp2bWNiMDIgPSBzdm0tXFx1MDAzZW5lc3RlZC52bWNiMDIucHRyO1xcbi1cXHRzdHJ1Y3Qga3ZtX2hvc3RfbWFwIG1hcDtcXG4gXFx0c3RydWN0IHZtY2IgKnZtY2IxMjtcXG4tXFx0aW50IHJjO1xcbiBcXG4tXFx0cmMgPSBrdm1fdmNwdV9tYXAodmNwdSwgZ3BhX3RvX2dmbihzdm0tXFx1MDAzZW5lc3RlZC52bWNiMTJfZ3BhKSwgXFx1MDAyNm1hcCk7XFxuLVxcdGlmIChyYylcXG4tXFx0XFx0cmV0dXJuIHJjO1xcbitcXHRDTEFTUyhrdm1fdmNwdV9tYXBfbG9jYWwsIG0pKHZjcHUsIGdwYV90b19nZm4oc3ZtLVxcdTAwM2VuZXN0ZWQudm1jYjEyX2dwYSkpO1xcbitcXHRpZiAobS5yZXQpXFxuK1xcdFxcdHJldHVybiBtLnJldDtcXG4gXFxuLVxcdHZtY2IxMiA9IG1hcC5odmE7XFxuK1xcdHZtY2IxMiA9IG0ubWFwLmh2YTtcXG4gXFxuIFxcdHZtY2IxMi1cXHUwMDNlc2F2ZS5lcyAgICAgPSB2bWNiMDItXFx1MDAzZXNhdmUuZXM7XFxuIFxcdHZtY2IxMi1cXHUwMDNlc2F2ZS5jcyAgICAgPSB2bWNiMDItXFx1MDAzZXNhdmUuY3M7XFxuQEAgLTEzMTQsNyArMTMxMSw2IEBAIHN0YXRpYyBpbnQgbmVzdGVkX3N2bV92bWV4aXRfdXBkYXRlX3ZtY2IxMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdFxcdFxcdFxcdCAgICAgICB2bWNiMTItXFx1MDAzZWNvbnRyb2wuZXhpdF9pbnRfaW5mb19lcnIsXFxuIFxcdFxcdFxcdFxcdCAgICAgICBLVk1fSVNBX1NWTSk7XFxuIFxcbi1cXHRrdm1fdmNwdV91bm1hcCh2Y3B1LCBcXHUwMDI2bWFwKTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXFxuaW5kZXggOTEyODZkNDZkMTNhZGIuLjdhNDE3ZTcxN2ZkOTFlIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXFxuQEAgLTIyMTYsNyArMjIxNiw2IEBAIHN0YXRpYyBpbnQgdm1sb2FkX3Ztc2F2ZV9pbnRlcmNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIHZtbG9hZClcXG4gXFx0dTY0IHZtY2IxMl9ncGEgPSBrdm1fcmF4X3JlYWQodmNwdSk7XFxuIFxcdHN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpO1xcbiBcXHRzdHJ1Y3Qgdm1jYiAqdm1jYjEyO1xcbi1cXHRzdHJ1Y3Qga3ZtX2hvc3RfbWFwIG1hcDtcXG4gXFx0aW50IHJldDtcXG4gXFxuIFxcdGlmIChuZXN0ZWRfc3ZtX2NoZWNrX3Blcm1pc3Npb25zKHZjcHUpKVxcbkBAIC0yMjI3LDEwICsyMjI2LDExIEBAIHN0YXRpYyBpbnQgdm1sb2FkX3Ztc2F2ZV9pbnRlcmNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIHZtbG9hZClcXG4gXFx0XFx0cmV0dXJuIDE7XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChrdm1fdmNwdV9tYXAodmNwdSwgZ3BhX3RvX2dmbih2bWNiMTJfZ3BhKSwgXFx1MDAyNm1hcCkpXFxuK1xcdENMQVNTKGt2bV92Y3B1X21hcF9sb2NhbCwgbSkodmNwdSwgZ3BhX3RvX2dmbih2bWNiMTJfZ3BhKSk7XFxuK1xcdGlmIChtLnJldClcXG4gXFx0XFx0cmV0dXJuIGt2bV9oYW5kbGVfbWVtb3J5X2ZhaWx1cmUodmNwdSwgWDg2RU1VTF9JT19ORUVERUQsIE5VTEwpO1xcbiBcXG4tXFx0dm1jYjEyID0gbWFwLmh2YTtcXG4rXFx0dm1jYjEyID0gbS5tYXAuaHZhO1xcbiBcXG4gXFx0cmV0ID0ga3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7XFxuIFxcbkBAIC0yMjQzLDggKzIyNDMsNiBAQCBzdGF0aWMgaW50IHZtbG9hZF92bXNhdmVfaW50ZXJjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCB2bWxvYWQpXFxuIFxcdFxcdHN2bV9jb3B5X3ZtbG9hZHNhdmVfc3RhdGUodm1jYjEyLCBzdm0tXFx1MDAzZXZtY2IwMS5wdHIpO1xcbiBcXHR9XFxuIFxcbi1cXHRrdm1fdmNwdV91bm1hcCh2Y3B1LCBcXHUwMDI2bWFwKTtcXG4tXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuQEAgLTQ5ODksNyArNDk4Nyw2IEBAIHN0YXRpYyBpbnQgc3ZtX3NtaV9hbGxvd2VkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBmb3JfaW5qZWN0aW9uKVxcbiBzdGF0aWMgaW50IHN2bV9lbnRlcl9zbW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bmlvbiBrdm1fc21yYW0gKnNtcmFtKVxcbiB7XFxuIFxcdHN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpO1xcbi1cXHRzdHJ1Y3Qga3ZtX2hvc3RfbWFwIG1hcF9zYXZlO1xcbiBcXG4gXFx0aWYgKCFpc19ndWVzdF9tb2RlKHZjcHUpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG5AQCAtNTAyMywyNCArNTAyMCwyMCBAQCBzdGF0aWMgaW50IHN2bV9lbnRlcl9zbW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bmlvbiBrdm1fc21yYW0gKnNtcmFtKVxcbiBcXHQgKiB0aGF0LCBzZWUgc3ZtX3ByZXBhcmVfc3dpdGNoX3RvX2d1ZXN0KCkpIHdoaWNoIG11c3QgYmVcXG4gXFx0ICogcHJlc2VydmVkLlxcbiBcXHQgKi9cXG4tXFx0aWYgKGt2bV92Y3B1X21hcCh2Y3B1LCBncGFfdG9fZ2ZuKHN2bS1cXHUwMDNlbmVzdGVkLmhzYXZlX21zciksIFxcdTAwMjZtYXBfc2F2ZSkpXFxuK1xcdENMQVNTKGt2bV92Y3B1X21hcF9sb2NhbCwgbV9zYXZlKSh2Y3B1LCBncGFfdG9fZ2ZuKHN2bS1cXHUwMDNlbmVzdGVkLmhzYXZlX21zcikpO1xcbitcXHRpZiAobV9zYXZlLnJldClcXG4gXFx0XFx0cmV0dXJuIDE7XFxuIFxcbiBcXHRCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IHZtY2IsIHNhdmUpICE9IDB4NDAwKTtcXG4gXFxuLVxcdHN2bV9jb3B5X3ZtcnVuX3N0YXRlKG1hcF9zYXZlLmh2YSArIDB4NDAwLFxcbi1cXHRcXHRcXHQgICAgIFxcdTAwMjZzdm0tXFx1MDAzZXZtY2IwMS5wdHItXFx1MDAzZXNhdmUpO1xcbi1cXG4tXFx0a3ZtX3ZjcHVfdW5tYXAodmNwdSwgXFx1MDAyNm1hcF9zYXZlKTtcXG4rXFx0c3ZtX2NvcHlfdm1ydW5fc3RhdGUobV9zYXZlLm1hcC5odmEgKyAweDQwMCwgXFx1MDAyNnN2bS1cXHUwMDNldm1jYjAxLnB0ci1cXHUwMDNlc2F2ZSk7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IHN2bV9sZWF2ZV9zbW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBjb25zdCB1bmlvbiBrdm1fc21yYW0gKnNtcmFtKVxcbiB7XFxuIFxcdHN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpO1xcbi1cXHRzdHJ1Y3Qga3ZtX2hvc3RfbWFwIG1hcCwgbWFwX3NhdmU7XFxuIFxcdHN0cnVjdCB2bWNiICp2bWNiMTI7XFxuLVxcdGludCByZXQ7XFxuIFxcbiBcXHRjb25zdCBzdHJ1Y3Qga3ZtX3NtcmFtX3N0YXRlXzY0ICpzbXJhbTY0ID0gXFx1MDAyNnNtcmFtLVxcdTAwM2VzbXJhbTY0O1xcbiBcXG5AQCAtNTA1NywyMiArNTA1MCwyMyBAQCBzdGF0aWMgaW50IHN2bV9sZWF2ZV9zbW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBjb25zdCB1bmlvbiBrdm1fc21yYW0gKnNtcmFtKVxcbiBcXHRpZiAoIShzbXJhbTY0LVxcdTAwM2VlZmVyIFxcdTAwMjYgRUZFUl9TVk1FKSlcXG4gXFx0XFx0cmV0dXJuIDE7XFxuIFxcbi1cXHRpZiAoa3ZtX3ZjcHVfbWFwKHZjcHUsIGdwYV90b19nZm4oc21yYW02NC1cXHUwMDNlc3ZtX2d1ZXN0X3ZtY2JfZ3BhKSwgXFx1MDAyNm1hcCkpXFxuK1xcdENMQVNTKGt2bV92Y3B1X21hcF9sb2NhbCwgbSkodmNwdSwgZ3BhX3RvX2dmbihzbXJhbTY0LVxcdTAwM2Vzdm1fZ3Vlc3Rfdm1jYl9ncGEpKTtcXG4rXFx0aWYgKG0ucmV0KVxcbiBcXHRcXHRyZXR1cm4gMTtcXG4gXFxuLVxcdHJldCA9IDE7XFxuLVxcdGlmIChrdm1fdmNwdV9tYXAodmNwdSwgZ3BhX3RvX2dmbihzdm0tXFx1MDAzZW5lc3RlZC5oc2F2ZV9tc3IpLCBcXHUwMDI2bWFwX3NhdmUpKVxcbi1cXHRcXHRnb3RvIHVubWFwX21hcDtcXG4rXFx0Q0xBU1Moa3ZtX3ZjcHVfbWFwX2xvY2FsLCBtX3NhdmUpKHZjcHUsIGdwYV90b19nZm4oc3ZtLVxcdTAwM2VuZXN0ZWQuaHNhdmVfbXNyKSk7XFxuK1xcdGlmIChtX3NhdmUucmV0KVxcbitcXHRcXHRyZXR1cm4gMTtcXG4gXFxuIFxcdGlmIChzdm1fYWxsb2NhdGVfbmVzdGVkKHN2bSkpXFxuLVxcdFxcdGdvdG8gdW5tYXBfc2F2ZTtcXG4rXFx0XFx0cmV0dXJuIDE7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBSZXN0b3JlIEwxIGhvc3Qgc3RhdGUgZnJvbSBMMSBIU0FWRSBhcmVhIGFzIFZNQ0IwMSB3YXNcXG4gXFx0ICogdXNlZCBkdXJpbmcgU01NIChzZWUgc3ZtX2VudGVyX3NtbSgpKVxcbiBcXHQgKi9cXG4gXFxuLVxcdHN2bV9jb3B5X3ZtcnVuX3N0YXRlKFxcdTAwMjZzdm0tXFx1MDAzZXZtY2IwMS5wdHItXFx1MDAzZXNhdmUsIG1hcF9zYXZlLmh2YSArIDB4NDAwKTtcXG4rXFx0c3ZtX2NvcHlfdm1ydW5fc3RhdGUoXFx1MDAyNnN2bS1cXHUwMDNldm1jYjAxLnB0ci1cXHUwMDNlc2F2ZSwgbV9zYXZlLm1hcC5odmEgKyAweDQwMCk7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBFbnRlciB0aGUgbmVzdGVkIGd1ZXN0IG5vd1xcbkBAIC01MDgwLDI0ICs1MDc0LDE4IEBAIHN0YXRpYyBpbnQgc3ZtX2xlYXZlX3NtbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGNvbnN0IHVuaW9uIGt2bV9zbXJhbSAqc21yYW0pXFxuIFxcbiBcXHR2bWNiX21hcmtfYWxsX2RpcnR5KHN2bS1cXHUwMDNldm1jYjAxLnB0cik7XFxuIFxcbi1cXHR2bWNiMTIgPSBtYXAuaHZhO1xcbitcXHR2bWNiMTIgPSBtLm1hcC5odmE7XFxuIFxcdG5lc3RlZF9jb3B5X3ZtY2JfY29udHJvbF90b19jYWNoZShzdm0sIFxcdTAwMjZ2bWNiMTItXFx1MDAzZWNvbnRyb2wpO1xcbiBcXHRuZXN0ZWRfY29weV92bWNiX3NhdmVfdG9fY2FjaGUoc3ZtLCBcXHUwMDI2dm1jYjEyLVxcdTAwM2VzYXZlKTtcXG4gXFxuIFxcdGlmIChuZXN0ZWRfc3ZtX2NoZWNrX2NhY2hlZF92bWNiMTIodmNwdSkgXFx1MDAzYyAwKVxcbi1cXHRcXHRnb3RvIHVubWFwX3NhdmU7XFxuK1xcdFxcdHJldHVybiAxO1xcbiBcXG4gXFx0aWYgKGVudGVyX3N2bV9ndWVzdF9tb2RlKHZjcHUsIHNtcmFtNjQtXFx1MDAzZXN2bV9ndWVzdF92bWNiX2dwYSwgZmFsc2UpICE9IDApXFxuLVxcdFxcdGdvdG8gdW5tYXBfc2F2ZTtcXG4rXFx0XFx0cmV0dXJuIDE7XFxuIFxcbi1cXHRyZXQgPSAwO1xcbiBcXHR2Y3B1LVxcdTAwM2VhcmNoLm5lc3RlZF9ydW5fcGVuZGluZyA9IEtWTV9ORVNURURfUlVOX1BFTkRJTkc7XFxuLVxcbi11bm1hcF9zYXZlOlxcbi1cXHRrdm1fdmNwdV91bm1hcCh2Y3B1LCBcXHUwMDI2bWFwX3NhdmUpO1xcbi11bm1hcF9tYXA6XFxuLVxcdGt2bV92Y3B1X3VubWFwKHZjcHUsIFxcdTAwMjZtYXApO1xcbi1cXHRyZXR1cm4gcmV0O1xcbitcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgc3ZtX2VuYWJsZV9zbWlfd2luZG93KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYyBiL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNcXG5pbmRleCBiNTQ2MGRlNGIxYTcyZi4uZWY3OTc2OWM2Mjg3MTggMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuY1xcbisrKyBiL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNcXG5AQCAtNzMwLDcgKzczMCw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBuZXN0ZWRfdm14X3ByZXBhcmVfbXNyX2JpdG1hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuIFxcdGludCBtc3I7XFxuIFxcdHVuc2lnbmVkIGxvbmcgKm1zcl9iaXRtYXBfbDE7XFxuIFxcdHVuc2lnbmVkIGxvbmcgKm1zcl9iaXRtYXBfbDAgPSB2bXgtXFx1MDAzZW5lc3RlZC52bWNzMDIubXNyX2JpdG1hcDtcXG4tXFx0c3RydWN0IGt2bV9ob3N0X21hcCBtYXA7XFxuIFxcbiBcXHQvKiBOb3RoaW5nIHRvIGRvIGlmIHRoZSBNU1IgYml0bWFwIGlzIG5vdCBpbiB1c2UuICAqL1xcbiBcXHRpZiAoIWNwdV9oYXNfdm14X21zcl9iaXRtYXAoKSB8fFxcbkBAIC03NTMsMTAgKzc1MiwxMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbmVzdGVkX3ZteF9wcmVwYXJlX21zcl9iaXRtYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbiBcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKGt2bV92Y3B1X21hcF9yZWFkb25seSh2Y3B1LCBncGFfdG9fZ2ZuKHZtY3MxMi1cXHUwMDNlbXNyX2JpdG1hcCksIFxcdTAwMjZtYXApKVxcbitcXHRDTEFTUyhrdm1fdmNwdV9tYXBfbG9jYWxfcmVhZG9ubHksIG0pKHZjcHUsIGdwYV90b19nZm4odm1jczEyLVxcdTAwM2Vtc3JfYml0bWFwKSk7XFxuK1xcdGlmIChtLnJldClcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4tXFx0bXNyX2JpdG1hcF9sMSA9ICh1bnNpZ25lZCBsb25nICopbWFwLmh2YTtcXG4rXFx0bXNyX2JpdG1hcF9sMSA9ICh1bnNpZ25lZCBsb25nICopbS5tYXAuaHZhO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogVG8ga2VlcCB0aGUgY29udHJvbCBmbG93IHNpbXBsZSwgcGF5IGVpZ2h0IDgtYnl0ZSB3cml0ZXMgKHNpeHRlZW5cXG5AQCAtODM2LDggKzgzNiw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBuZXN0ZWRfdm14X3ByZXBhcmVfbXNyX2JpdG1hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuIFxcbiBcXHRuZXN0ZWRfdm14X21lcmdlX3BtdV9tc3JfYml0bWFwcyh2Y3B1LCBtc3JfYml0bWFwX2wxLCBtc3JfYml0bWFwX2wwKTtcXG4gXFxuLVxcdGt2bV92Y3B1X3VubWFwKHZjcHUsIFxcdTAwMjZtYXApO1xcbi1cXG4gXFx0dm14LVxcdTAwM2VuZXN0ZWQuZm9yY2VfbXNyX2JpdG1hcF9yZWNhbGMgPSBmYWxzZTtcXG4gXFxuIFxcdHJldHVybiB0cnVlO1xcbkBAIC01MDY2LDggKzUwNjQsOSBAQCB2b2lkIF9fbmVzdGVkX3ZteF92bWV4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgdm1fZXhpdF9yZWFzb24sXFxuIFxcdC8qIHRyeWluZyB0byBjYW5jZWwgdm1sYXVuY2gvdm1yZXN1bWUgaXMgYSBidWcgKi9cXG4gXFx0a3ZtX3dhcm5fb25fbmVzdGVkX3J1bl9wZW5kaW5nKHZjcHUpO1xcbiBcXG4tI2lmZGVmIENPTkZJR19LVk1fSFlQRVJWXFxuK1xcdC8qIE5vdGUsIFxcXCJjaGVja2luZ1xcXCIgdGhlIHJlcXVlc3QgYWxzbyBjbGVhcnMgdGhlIHJlcXVlc3QuICovXFxuIFxcdGlmIChrdm1fY2hlY2tfcmVxdWVzdChLVk1fUkVRX0dFVF9ORVNURURfU1RBVEVfUEFHRVMsIHZjcHUpKSB7XFxuKyNpZmRlZiBDT05GSUdfS1ZNX0hZUEVSVlxcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBLVk1fUkVRX0dFVF9ORVNURURfU1RBVEVfUEFHRVMgaXMgYWxzbyB1c2VkIHRvIG1hcFxcbiBcXHRcXHQgKiBFbmxpZ2h0ZW5lZCBWTUNTIGFmdGVyIG1pZ3JhdGlvbiBhbmQgd2Ugc3RpbGwgbmVlZCB0b1xcbkBAIC01MDc1LDggKzUwNzQsOCBAQCB2b2lkIF9fbmVzdGVkX3ZteF92bWV4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgdm1fZXhpdF9yZWFzb24sXFxuIFxcdFxcdCAqIHRoZSBmaXJzdCBMMiBydW4uXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHQodm9pZCluZXN0ZWRfZ2V0X2V2bWNzX3BhZ2UodmNwdSk7XFxuLVxcdH1cXG4gI2VuZGlmXFxuK1xcdH1cXG4gXFxuIFxcdC8qIFNlcnZpY2UgcGVuZGluZyBUTEIgZmx1c2ggcmVxdWVzdHMgZm9yIEwyIGJlZm9yZSBzd2l0Y2hpbmcgdG8gTDEuICovXFxuIFxcdGt2bV9zZXJ2aWNlX2xvY2FsX3RsYl9mbHVzaF9yZXF1ZXN0cyh2Y3B1KTtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXFxuaW5kZXggOWRiNmViNDAyM2M0OGYuLmM1NGRiZmRiYzM0NmM4IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxcbisrKyBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxcbkBAIC0xNDIwLDYgKzE0MjAsMjUgQEAgc3RhdGljIGlubGluZSB2b2lkIGt2bV92Y3B1X21hcF9tYXJrX2RpcnR5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4gXFx0XFx0a3ZtX3ZjcHVfbWFya19wYWdlX2RpcnR5KHZjcHUsIG1hcC1cXHUwMDNlZ2ZuKTtcXG4gfVxcbiBcXG4rdHlwZWRlZiBzdHJ1Y3Qge1xcbitcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XFxuK1xcdHN0cnVjdCBrdm1faG9zdF9tYXAgbWFwO1xcbitcXHRpbnQgcmV0O1xcbit9IGt2bV92Y3B1X2xvY2FsX21hcF90O1xcbitcXG4rI2RlZmluZSBERUZJTkVfVkNQVV9NQVBfQ0xBU1Mocm8pXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitERUZJTkVfQ0xBU1Moa3ZtX3ZjcHVfbWFwX2xvY2FsIyNybywga3ZtX3ZjcHVfbG9jYWxfbWFwX3QsXFx0XFx0XFxcXFxcbitcXHQgICAgIGlmICghX1QucmV0KSBrdm1fdmNwdV91bm1hcChfVC52Y3B1LCBcXHUwMDI2X1QubWFwKSxcXHRcXHRcXFxcXFxuK1xcdCAgICAgKHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdGt2bV92Y3B1X2xvY2FsX21hcF90IG0gPSB7IC52Y3B1ID0gdmNwdSB9O1xcdFxcdFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHRtLnJldCA9IGt2bV92Y3B1X21hcCMjcm8odmNwdSwgZ2ZuLCBcXHUwMDI2bS5tYXApO1xcdFxcdFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHRtO1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0ICAgICB9KSwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBnZm5fdCBnZm4pO1xcbitERUZJTkVfVkNQVV9NQVBfQ0xBU1MoKTtcXG4rREVGSU5FX1ZDUFVfTUFQX0NMQVNTKF9yZWFkb25seSk7XFxuK1xcbiB1bnNpZ25lZCBsb25nIGt2bV92Y3B1X2dmbl90b19odmEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBnZm5fdCBnZm4pO1xcbiB1bnNpZ25lZCBsb25nIGt2bV92Y3B1X2dmbl90b19odmFfcHJvdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGdmbiwgYm9vbCAqd3JpdGFibGUpO1xcbiBpbnQga3ZtX3ZjcHVfcmVhZF9ndWVzdF9wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ2ZuX3QgZ2ZuLCB2b2lkICpkYXRhLCBpbnQgb2Zmc2V0LFxcbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9rdm1fbWFpbi5jIGIvdmlydC9rdm0va3ZtX21haW4uY1xcbmluZGV4IDJkZjhlZTllY2Y2YzZkLi5lOWUzMjY4NmU0MWJlNCAxMDA2NDRcXG4tLS0gYS92aXJ0L2t2bS9rdm1fbWFpbi5jXFxuKysrIGIvdmlydC9rdm0va3ZtX21haW4uY1xcbkBAIC0zMTE4LDYgKzMxMTgsOSBAQCBpbnQgX19rdm1fdmNwdV9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBnZm5fdCBnZm4sIHN0cnVjdCBrdm1faG9zdF9tYXAgKm1hcCxcXG4gXFx0XFx0LnBpbiA9IHRydWUsXFxuIFxcdH07XFxuIFxcbitcXHRpZiAoV0FSTl9PTl9PTkNFKG1hcC1cXHUwMDNlaHZhKSlcXG4rXFx0XFx0a3ZtX3ZjcHVfdW5tYXAodmNwdSwgbWFwKTtcXG4rXFxuIFxcdG1hcC1cXHUwMDNlcGlubmVkX3BhZ2UgPSBOVUxMO1xcbiBcXHRtYXAtXFx1MDAzZXBhZ2UgPSBOVUxMO1xcbiBcXHRtYXAtXFx1MDAzZWh2YSA9IE5VTEw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDA1OjU3OjMwLjI2MTU0MDcxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTQzMzA1MTkyNzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0FNRFwiLFxuICAgIFwiS1ZNX0lOVEVMXCIsXG4gICAgXCJLVk1fU01NXCIsXG4gICAgXCJLVk1fSFlQRVJWXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmVzdGVkX3N2bV92bXJ1blwiLFxuICAgIFwibmVzdGVkX3N2bV92bWV4aXRcIixcbiAgICBcInZtbG9hZF9pbnRlcmNlcHRpb25cIixcbiAgICBcInZtc2F2ZV9pbnRlcmNlcHRpb25cIixcbiAgICBcInN2bV9lbnRlcl9zbW1cIixcbiAgICBcInN2bV9sZWF2ZV9zbW1cIixcbiAgICBcIm5lc3RlZF92bXhfZW50ZXJfbm9uX3Jvb3RfbW9kZVwiLFxuICAgIFwiX19uZXN0ZWRfdm14X3ZtZXhpdFwiLFxuICAgIFwidm14X3NldF9uZXN0ZWRfc3RhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGNsZWFudXAgY2xhc3MgYGt2bV92Y3B1X21hcF9sb2NhbGAgYW5kIHVzZXMgaXQgdG8gcmVwbGFjZSBtYW51YWwgYGt2bV92Y3B1X21hcGAgYW5kIGBrdm1fdmNwdV91bm1hcGAgY2FsbHMgaW4gc2V2ZXJhbCBLVk0gZnVuY3Rpb25zIGFjcm9zcyB4ODYgKFNWTSBhbmQgVk1YKSBhbmQgUG93ZXJQQyAoQm9vazNTIFBSKS4gSXQgYWxzbyBmaXhlcyBhIGJ1ZyBpbiBgX19uZXN0ZWRfdm14X3ZtZXhpdGAgd2hlcmUgYGt2bV9jaGVja19yZXF1ZXN0KEtWTV9SRVFfR0VUX05FU1RFRF9TVEFURV9QQUdFUywgdmNwdSlgIHdhcyBvbmx5IGNhbGxlZCB3aGVuIGBDT05GSUdfS1ZNX0hZUEVSVmAgd2FzIGVuYWJsZWQsIGJ1dCBjaGVja2luZyB0aGUgcmVxdWVzdCBhbHNvIGNsZWFycyBpdCwgc28gaXQgc2hvdWxkIGJlIGNhbGxlZCB1bmNvbmRpdGlvbmFsbHkuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gY29yZSBLVk0gbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgY2xlYW51cCBjbGFzcyB3b3JrcyBjb3JyZWN0bHkgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIG1lbW9yeSBsZWFrcyBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMsIGFuZCB0byB2ZXJpZnkgdGhlIGZpeCBpbiBgX19uZXN0ZWRfdm14X3ZtZXhpdGAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGI4ODA0ODVjMWUzMTQ5YzQ3Yzc1YWRiMWZlYmFjNTAwOWM1ODYzODNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAyNSAwNTo1NzoyNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmMgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wci5jXG5pbmRleCAyYmEyZGQyNmE3ZWFkOC4uZGE3YTAzOGUyNzAwZDIgMTAwNjQ0XG4tLS0gYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wci5jXG4rKysgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wci5jXG5AQCAtNjM5LDI3ICs2MzksMjQgQEAgc3RhdGljIHZvaWQga3ZtcHBjX3NldF9wdnJfcHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgcHZyKVxuICAqL1xuIHN0YXRpYyB2b2lkIGt2bXBwY19wYXRjaF9kY2J6KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bXBwY19wdGUgKnB0ZSlcbiB7XG4tXHRzdHJ1Y3Qga3ZtX2hvc3RfbWFwIG1hcDtcbiBcdHU2NCBocGFnZV9vZmZzZXQ7XG4gXHR1MzIgKnBhZ2U7XG4gXHRpbnQgaSwgcjtcbiBcbi1cdHIgPSBrdm1fdmNwdV9tYXAodmNwdSwgcHRlLVx1MDAzZXJhZGRyIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZULCBcdTAwMjZtYXApO1xuLVx0aWYgKHIpXG4rXHRDTEFTUyhrdm1fdmNwdV9tYXBfbG9jYWwsIG0pKHZjcHUsIHB0ZS1cdTAwM2VyYWRkciBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG4rXHRpZiAobS5yZXQpXG4gXHRcdHJldHVybjtcbiBcbiBcdGhwYWdlX29mZnNldCA9IHB0ZS1cdTAwM2VyYWRkciBcdTAwMjYgflBBR0VfTUFTSztcbiBcdGhwYWdlX29mZnNldCBcdTAwMjY9IH4weEZGRlVMTDtcbiBcdGhwYWdlX29mZnNldCAvPSA0O1xuIFxuLVx0cGFnZSA9IG1hcC5odmE7XG4rXHRwYWdlID0gbS5tYXAuaHZhO1xuIFxuIFx0LyogcGF0Y2ggZGNieiBpbnRvIHJlc2VydmVkIGluc3RydWN0aW9uLCBzbyB3ZSB0cmFwICovXG4gXHRmb3IgKGk9aHBhZ2Vfb2Zmc2V0OyBpIFx1MDAzYyBocGFnZV9vZmZzZXQgKyAoSFdfUEFHRV9TSVpFIC8gNCk7IGkrKylcbiBcdFx0aWYgKChiZTMyX3RvX2NwdShwYWdlW2ldKSBcdTAwMjYgMHhmZjAwMDdmZikgPT0gSU5TX0RDQlopXG4gXHRcdFx0cGFnZVtpXSBcdTAwMjY9IGNwdV90b19iZTMyKDB4ZmZmZmZmZjcpO1xuLVxuLVx0a3ZtX3ZjcHVfdW5tYXAodmNwdSwgXHUwMDI2bWFwKTtcbiB9XG4gXG4gc3RhdGljIGJvb2wga3ZtcHBjX3Zpc2libGVfZ3BhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhKVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jXG5pbmRleCA1ZTNlMjgwY2Q0ODNlMy4uNzNmMzdiMDUwZDBhMGIgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jXG5AQCAtMTA4NiwxNCArMTA4NiwxNCBAQCBpbnQgZW50ZXJfc3ZtX2d1ZXN0X21vZGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdm1jYjEyX2dwYSwgYm9vbCBmcm9tX3ZtcnVuKVxuIHN0YXRpYyBpbnQgbmVzdGVkX3N2bV9jb3B5X3ZtY2IxMl90b19jYWNoZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2bWNiMTJfZ3BhKVxuIHtcbiBcdHN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpO1xuLVx0c3RydWN0IGt2bV9ob3N0X21hcCBtYXA7XG4gXHRzdHJ1Y3Qgdm1jYiAqdm1jYjEyO1xuIFx0aW50IHIgPSAwO1xuIFxuLVx0aWYgKGt2bV92Y3B1X21hcCh2Y3B1LCBncGFfdG9fZ2ZuKHZtY2IxMl9ncGEpLCBcdTAwMjZtYXApKVxuK1x0Q0xBU1Moa3ZtX3ZjcHVfbWFwX2xvY2FsLCBtKSh2Y3B1LCBncGFfdG9fZ2ZuKHZtY2IxMl9ncGEpKTtcbitcdGlmIChtLnJldClcbiBcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXG4tXHR2bWNiMTIgPSBtYXAuaHZhO1xuK1x0dm1jYjEyID0gbS5tYXAuaHZhO1xuIFx0bmVzdGVkX2NvcHlfdm1jYl9jb250cm9sX3RvX2NhY2hlKHN2bSwgXHUwMDI2dm1jYjEyLVx1MDAzZWNvbnRyb2wpO1xuIFx0bmVzdGVkX2NvcHlfdm1jYl9zYXZlX3RvX2NhY2hlKHN2bSwgXHUwMDI2dm1jYjEyLVx1MDAzZXNhdmUpO1xuIFxuQEAgLTExMDcsNyArMTEwNyw2IEBAIHN0YXRpYyBpbnQgbmVzdGVkX3N2bV9jb3B5X3ZtY2IxMl90b19jYWNoZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2bWNiMTJfZ3BhXG4gXHRcdHIgPSAtRUlOVkFMO1xuIFx0fVxuIFxuLVx0a3ZtX3ZjcHVfdW5tYXAodmNwdSwgXHUwMDI2bWFwKTtcbiBcdHJldHVybiByO1xuIH1cbiBcbkBAIC0xMjUxLDE1ICsxMjUwLDEzIEBAIHN0YXRpYyBpbnQgbmVzdGVkX3N2bV92bWV4aXRfdXBkYXRlX3ZtY2IxMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0c3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7XG4gXHRzdHJ1Y3Qgdm1jYiAqdm1jYjAyID0gc3ZtLVx1MDAzZW5lc3RlZC52bWNiMDIucHRyO1xuLVx0c3RydWN0IGt2bV9ob3N0X21hcCBtYXA7XG4gXHRzdHJ1Y3Qgdm1jYiAqdm1jYjEyO1xuLVx0aW50IHJjO1xuIFxuLVx0cmMgPSBrdm1fdmNwdV9tYXAodmNwdSwgZ3BhX3RvX2dmbihzdm0tXHUwMDNlbmVzdGVkLnZtY2IxMl9ncGEpLCBcdTAwMjZtYXApO1xuLVx0aWYgKHJjKVxuLVx0XHRyZXR1cm4gcmM7XG4rXHRDTEFTUyhrdm1fdmNwdV9tYXBfbG9jYWwsIG0pKHZjcHUsIGdwYV90b19nZm4oc3ZtLVx1MDAzZW5lc3RlZC52bWNiMTJfZ3BhKSk7XG4rXHRpZiAobS5yZXQpXG4rXHRcdHJldHVybiBtLnJldDtcbiBcbi1cdHZtY2IxMiA9IG1hcC5odmE7XG4rXHR2bWNiMTIgPSBtLm1hcC5odmE7XG4gXG4gXHR2bWNiMTItXHUwMDNlc2F2ZS5lcyAgICAgPSB2bWNiMDItXHUwMDNlc2F2ZS5lcztcbiBcdHZtY2IxMi1cdTAwM2VzYXZlLmNzICAgICA9IHZtY2IwMi1cdTAwM2VzYXZlLmNzO1xuQEAgLTEzMTQsNyArMTMxMSw2IEBAIHN0YXRpYyBpbnQgbmVzdGVkX3N2bV92bWV4aXRfdXBkYXRlX3ZtY2IxMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRcdFx0XHQgICAgICAgdm1jYjEyLVx1MDAzZWNvbnRyb2wuZXhpdF9pbnRfaW5mb19lcnIsXG4gXHRcdFx0XHQgICAgICAgS1ZNX0lTQV9TVk0pO1xuIFxuLVx0a3ZtX3ZjcHVfdW5tYXAodmNwdSwgXHUwMDI2bWFwKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xuaW5kZXggOTEyODZkNDZkMTNhZGIuLjdhNDE3ZTcxN2ZkOTFlIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xuKysrIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xuQEAgLTIyMTYsNyArMjIxNiw2IEBAIHN0YXRpYyBpbnQgdm1sb2FkX3Ztc2F2ZV9pbnRlcmNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIHZtbG9hZClcbiBcdHU2NCB2bWNiMTJfZ3BhID0ga3ZtX3JheF9yZWFkKHZjcHUpO1xuIFx0c3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7XG4gXHRzdHJ1Y3Qgdm1jYiAqdm1jYjEyO1xuLVx0c3RydWN0IGt2bV9ob3N0X21hcCBtYXA7XG4gXHRpbnQgcmV0O1xuIFxuIFx0aWYgKG5lc3RlZF9zdm1fY2hlY2tfcGVybWlzc2lvbnModmNwdSkpXG5AQCAtMjIyNywxMCArMjIyNiwxMSBAQCBzdGF0aWMgaW50IHZtbG9hZF92bXNhdmVfaW50ZXJjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCB2bWxvYWQpXG4gXHRcdHJldHVybiAxO1xuIFx0fVxuIFxuLVx0aWYgKGt2bV92Y3B1X21hcCh2Y3B1LCBncGFfdG9fZ2ZuKHZtY2IxMl9ncGEpLCBcdTAwMjZtYXApKVxuK1x0Q0xBU1Moa3ZtX3ZjcHVfbWFwX2xvY2FsLCBtKSh2Y3B1LCBncGFfdG9fZ2ZuKHZtY2IxMl9ncGEpKTtcbitcdGlmIChtLnJldClcbiBcdFx0cmV0dXJuIGt2bV9oYW5kbGVfbWVtb3J5X2ZhaWx1cmUodmNwdSwgWDg2RU1VTF9JT19ORUVERUQsIE5VTEwpO1xuIFxuLVx0dm1jYjEyID0gbWFwLmh2YTtcbitcdHZtY2IxMiA9IG0ubWFwLmh2YTtcbiBcbiBcdHJldCA9IGt2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpO1xuIFxuQEAgLTIyNDMsOCArMjI0Myw2IEBAIHN0YXRpYyBpbnQgdm1sb2FkX3Ztc2F2ZV9pbnRlcmNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIHZtbG9hZClcbiBcdFx0c3ZtX2NvcHlfdm1sb2Fkc2F2ZV9zdGF0ZSh2bWNiMTIsIHN2bS1cdTAwM2V2bWNiMDEucHRyKTtcbiBcdH1cbiBcbi1cdGt2bV92Y3B1X3VubWFwKHZjcHUsIFx1MDAyNm1hcCk7XG4tXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbkBAIC00OTg5LDcgKzQ5ODcsNiBAQCBzdGF0aWMgaW50IHN2bV9zbWlfYWxsb3dlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgZm9yX2luamVjdGlvbilcbiBzdGF0aWMgaW50IHN2bV9lbnRlcl9zbW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bmlvbiBrdm1fc21yYW0gKnNtcmFtKVxuIHtcbiBcdHN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpO1xuLVx0c3RydWN0IGt2bV9ob3N0X21hcCBtYXBfc2F2ZTtcbiBcbiBcdGlmICghaXNfZ3Vlc3RfbW9kZSh2Y3B1KSlcbiBcdFx0cmV0dXJuIDA7XG5AQCAtNTAyMywyNCArNTAyMCwyMCBAQCBzdGF0aWMgaW50IHN2bV9lbnRlcl9zbW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bmlvbiBrdm1fc21yYW0gKnNtcmFtKVxuIFx0ICogdGhhdCwgc2VlIHN2bV9wcmVwYXJlX3N3aXRjaF90b19ndWVzdCgpKSB3aGljaCBtdXN0IGJlXG4gXHQgKiBwcmVzZXJ2ZWQuXG4gXHQgKi9cbi1cdGlmIChrdm1fdmNwdV9tYXAodmNwdSwgZ3BhX3RvX2dmbihzdm0tXHUwMDNlbmVzdGVkLmhzYXZlX21zciksIFx1MDAyNm1hcF9zYXZlKSlcbitcdENMQVNTKGt2bV92Y3B1X21hcF9sb2NhbCwgbV9zYXZlKSh2Y3B1LCBncGFfdG9fZ2ZuKHN2bS1cdTAwM2VuZXN0ZWQuaHNhdmVfbXNyKSk7XG4rXHRpZiAobV9zYXZlLnJldClcbiBcdFx0cmV0dXJuIDE7XG4gXG4gXHRCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IHZtY2IsIHNhdmUpICE9IDB4NDAwKTtcbiBcbi1cdHN2bV9jb3B5X3ZtcnVuX3N0YXRlKG1hcF9zYXZlLmh2YSArIDB4NDAwLFxuLVx0XHRcdCAgICAgXHUwMDI2c3ZtLVx1MDAzZXZtY2IwMS5wdHItXHUwMDNlc2F2ZSk7XG4tXG4tXHRrdm1fdmNwdV91bm1hcCh2Y3B1LCBcdTAwMjZtYXBfc2F2ZSk7XG4rXHRzdm1fY29weV92bXJ1bl9zdGF0ZShtX3NhdmUubWFwLmh2YSArIDB4NDAwLCBcdTAwMjZzdm0tXHUwMDNldm1jYjAxLnB0ci1cdTAwM2VzYXZlKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgaW50IHN2bV9sZWF2ZV9zbW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBjb25zdCB1bmlvbiBrdm1fc21yYW0gKnNtcmFtKVxuIHtcbiBcdHN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpO1xuLVx0c3RydWN0IGt2bV9ob3N0X21hcCBtYXAsIG1hcF9zYXZlO1xuIFx0c3RydWN0IHZtY2IgKnZtY2IxMjtcbi1cdGludCByZXQ7XG4gXG4gXHRjb25zdCBzdHJ1Y3Qga3ZtX3NtcmFtX3N0YXRlXzY0ICpzbXJhbTY0ID0gXHUwMDI2c21yYW0tXHUwMDNlc21yYW02NDtcbiBcbkBAIC01MDU3LDIyICs1MDUwLDIzIEBAIHN0YXRpYyBpbnQgc3ZtX2xlYXZlX3NtbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGNvbnN0IHVuaW9uIGt2bV9zbXJhbSAqc21yYW0pXG4gXHRpZiAoIShzbXJhbTY0LVx1MDAzZWVmZXIgXHUwMDI2IEVGRVJfU1ZNRSkpXG4gXHRcdHJldHVybiAxO1xuIFxuLVx0aWYgKGt2bV92Y3B1X21hcCh2Y3B1LCBncGFfdG9fZ2ZuKHNtcmFtNjQtXHUwMDNlc3ZtX2d1ZXN0X3ZtY2JfZ3BhKSwgXHUwMDI2bWFwKSlcbitcdENMQVNTKGt2bV92Y3B1X21hcF9sb2NhbCwgbSkodmNwdSwgZ3BhX3RvX2dmbihzbXJhbTY0LVx1MDAzZXN2bV9ndWVzdF92bWNiX2dwYSkpO1xuK1x0aWYgKG0ucmV0KVxuIFx0XHRyZXR1cm4gMTtcbiBcbi1cdHJldCA9IDE7XG4tXHRpZiAoa3ZtX3ZjcHVfbWFwKHZjcHUsIGdwYV90b19nZm4oc3ZtLVx1MDAzZW5lc3RlZC5oc2F2ZV9tc3IpLCBcdTAwMjZtYXBfc2F2ZSkpXG4tXHRcdGdvdG8gdW5tYXBfbWFwO1xuK1x0Q0xBU1Moa3ZtX3ZjcHVfbWFwX2xvY2FsLCBtX3NhdmUpKHZjcHUsIGdwYV90b19nZm4oc3ZtLVx1MDAzZW5lc3RlZC5oc2F2ZV9tc3IpKTtcbitcdGlmIChtX3NhdmUucmV0KVxuK1x0XHRyZXR1cm4gMTtcbiBcbiBcdGlmIChzdm1fYWxsb2NhdGVfbmVzdGVkKHN2bSkpXG4tXHRcdGdvdG8gdW5tYXBfc2F2ZTtcbitcdFx0cmV0dXJuIDE7XG4gXG4gXHQvKlxuIFx0ICogUmVzdG9yZSBMMSBob3N0IHN0YXRlIGZyb20gTDEgSFNBVkUgYXJlYSBhcyBWTUNCMDEgd2FzXG4gXHQgKiB1c2VkIGR1cmluZyBTTU0gKHNlZSBzdm1fZW50ZXJfc21tKCkpXG4gXHQgKi9cbiBcbi1cdHN2bV9jb3B5X3ZtcnVuX3N0YXRlKFx1MDAyNnN2bS1cdTAwM2V2bWNiMDEucHRyLVx1MDAzZXNhdmUsIG1hcF9zYXZlLmh2YSArIDB4NDAwKTtcbitcdHN2bV9jb3B5X3ZtcnVuX3N0YXRlKFx1MDAyNnN2bS1cdTAwM2V2bWNiMDEucHRyLVx1MDAzZXNhdmUsIG1fc2F2ZS5tYXAuaHZhICsgMHg0MDApO1xuIFxuIFx0LypcbiBcdCAqIEVudGVyIHRoZSBuZXN0ZWQgZ3Vlc3Qgbm93XG5AQCAtNTA4MCwyNCArNTA3NCwxOCBAQCBzdGF0aWMgaW50IHN2bV9sZWF2ZV9zbW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBjb25zdCB1bmlvbiBrdm1fc21yYW0gKnNtcmFtKVxuIFxuIFx0dm1jYl9tYXJrX2FsbF9kaXJ0eShzdm0tXHUwMDNldm1jYjAxLnB0cik7XG4gXG4tXHR2bWNiMTIgPSBtYXAuaHZhO1xuK1x0dm1jYjEyID0gbS5tYXAuaHZhO1xuIFx0bmVzdGVkX2NvcHlfdm1jYl9jb250cm9sX3RvX2NhY2hlKHN2bSwgXHUwMDI2dm1jYjEyLVx1MDAzZWNvbnRyb2wpO1xuIFx0bmVzdGVkX2NvcHlfdm1jYl9zYXZlX3RvX2NhY2hlKHN2bSwgXHUwMDI2dm1jYjEyLVx1MDAzZXNhdmUpO1xuIFxuIFx0aWYgKG5lc3RlZF9zdm1fY2hlY2tfY2FjaGVkX3ZtY2IxMih2Y3B1KSBcdTAwM2MgMClcbi1cdFx0Z290byB1bm1hcF9zYXZlO1xuK1x0XHRyZXR1cm4gMTtcbiBcbiBcdGlmIChlbnRlcl9zdm1fZ3Vlc3RfbW9kZSh2Y3B1LCBzbXJhbTY0LVx1MDAzZXN2bV9ndWVzdF92bWNiX2dwYSwgZmFsc2UpICE9IDApXG4tXHRcdGdvdG8gdW5tYXBfc2F2ZTtcbitcdFx0cmV0dXJuIDE7XG4gXG4tXHRyZXQgPSAwO1xuIFx0dmNwdS1cdTAwM2VhcmNoLm5lc3RlZF9ydW5fcGVuZGluZyA9IEtWTV9ORVNURURfUlVOX1BFTkRJTkc7XG4tXG4tdW5tYXBfc2F2ZTpcbi1cdGt2bV92Y3B1X3VubWFwKHZjcHUsIFx1MDAyNm1hcF9zYXZlKTtcbi11bm1hcF9tYXA6XG4tXHRrdm1fdmNwdV91bm1hcCh2Y3B1LCBcdTAwMjZtYXApO1xuLVx0cmV0dXJuIHJldDtcbitcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBzdm1fZW5hYmxlX3NtaV93aW5kb3coc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMgYi9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jXG5pbmRleCBiNTQ2MGRlNGIxYTcyZi4uZWY3OTc2OWM2Mjg3MTggMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jXG5AQCAtNzMwLDcgKzczMCw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBuZXN0ZWRfdm14X3ByZXBhcmVfbXNyX2JpdG1hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHRpbnQgbXNyO1xuIFx0dW5zaWduZWQgbG9uZyAqbXNyX2JpdG1hcF9sMTtcbiBcdHVuc2lnbmVkIGxvbmcgKm1zcl9iaXRtYXBfbDAgPSB2bXgtXHUwMDNlbmVzdGVkLnZtY3MwMi5tc3JfYml0bWFwO1xuLVx0c3RydWN0IGt2bV9ob3N0X21hcCBtYXA7XG4gXG4gXHQvKiBOb3RoaW5nIHRvIGRvIGlmIHRoZSBNU1IgYml0bWFwIGlzIG5vdCBpbiB1c2UuICAqL1xuIFx0aWYgKCFjcHVfaGFzX3ZteF9tc3JfYml0bWFwKCkgfHxcbkBAIC03NTMsMTAgKzc1MiwxMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbmVzdGVkX3ZteF9wcmVwYXJlX21zcl9iaXRtYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0XHRcdHJldHVybiB0cnVlO1xuIFx0fVxuIFxuLVx0aWYgKGt2bV92Y3B1X21hcF9yZWFkb25seSh2Y3B1LCBncGFfdG9fZ2ZuKHZtY3MxMi1cdTAwM2Vtc3JfYml0bWFwKSwgXHUwMDI2bWFwKSlcbitcdENMQVNTKGt2bV92Y3B1X21hcF9sb2NhbF9yZWFkb25seSwgbSkodmNwdSwgZ3BhX3RvX2dmbih2bWNzMTItXHUwMDNlbXNyX2JpdG1hcCkpO1xuK1x0aWYgKG0ucmV0KVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4tXHRtc3JfYml0bWFwX2wxID0gKHVuc2lnbmVkIGxvbmcgKiltYXAuaHZhO1xuK1x0bXNyX2JpdG1hcF9sMSA9ICh1bnNpZ25lZCBsb25nICopbS5tYXAuaHZhO1xuIFxuIFx0LypcbiBcdCAqIFRvIGtlZXAgdGhlIGNvbnRyb2wgZmxvdyBzaW1wbGUsIHBheSBlaWdodCA4LWJ5dGUgd3JpdGVzIChzaXh0ZWVuXG5AQCAtODM2LDggKzgzNiw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBuZXN0ZWRfdm14X3ByZXBhcmVfbXNyX2JpdG1hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXG4gXHRuZXN0ZWRfdm14X21lcmdlX3BtdV9tc3JfYml0bWFwcyh2Y3B1LCBtc3JfYml0bWFwX2wxLCBtc3JfYml0bWFwX2wwKTtcbiBcbi1cdGt2bV92Y3B1X3VubWFwKHZjcHUsIFx1MDAyNm1hcCk7XG4tXG4gXHR2bXgtXHUwMDNlbmVzdGVkLmZvcmNlX21zcl9iaXRtYXBfcmVjYWxjID0gZmFsc2U7XG4gXG4gXHRyZXR1cm4gdHJ1ZTtcbkBAIC01MDY2LDggKzUwNjQsOSBAQCB2b2lkIF9fbmVzdGVkX3ZteF92bWV4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgdm1fZXhpdF9yZWFzb24sXG4gXHQvKiB0cnlpbmcgdG8gY2FuY2VsIHZtbGF1bmNoL3ZtcmVzdW1lIGlzIGEgYnVnICovXG4gXHRrdm1fd2Fybl9vbl9uZXN0ZWRfcnVuX3BlbmRpbmcodmNwdSk7XG4gXG4tI2lmZGVmIENPTkZJR19LVk1fSFlQRVJWXG4rXHQvKiBOb3RlLCBcImNoZWNraW5nXCIgdGhlIHJlcXVlc3QgYWxzbyBjbGVhcnMgdGhlIHJlcXVlc3QuICovXG4gXHRpZiAoa3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9HRVRfTkVTVEVEX1NUQVRFX1BBR0VTLCB2Y3B1KSkge1xuKyNpZmRlZiBDT05GSUdfS1ZNX0hZUEVSVlxuIFx0XHQvKlxuIFx0XHQgKiBLVk1fUkVRX0dFVF9ORVNURURfU1RBVEVfUEFHRVMgaXMgYWxzbyB1c2VkIHRvIG1hcFxuIFx0XHQgKiBFbmxpZ2h0ZW5lZCBWTUNTIGFmdGVyIG1pZ3JhdGlvbiBhbmQgd2Ugc3RpbGwgbmVlZCB0b1xuQEAgLTUwNzUsOCArNTA3NCw4IEBAIHZvaWQgX19uZXN0ZWRfdm14X3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiB2bV9leGl0X3JlYXNvbixcbiBcdFx0ICogdGhlIGZpcnN0IEwyIHJ1bi5cbiBcdFx0ICovXG4gXHRcdCh2b2lkKW5lc3RlZF9nZXRfZXZtY3NfcGFnZSh2Y3B1KTtcbi1cdH1cbiAjZW5kaWZcbitcdH1cbiBcbiBcdC8qIFNlcnZpY2UgcGVuZGluZyBUTEIgZmx1c2ggcmVxdWVzdHMgZm9yIEwyIGJlZm9yZSBzd2l0Y2hpbmcgdG8gTDEuICovXG4gXHRrdm1fc2VydmljZV9sb2NhbF90bGJfZmx1c2hfcmVxdWVzdHModmNwdSk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXG5pbmRleCA5ZGI2ZWI0MDIzYzQ4Zi4uYzU0ZGJmZGJjMzQ2YzggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbisrKyBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuQEAgLTE0MjAsNiArMTQyMCwyNSBAQCBzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3ZjcHVfbWFwX21hcmtfZGlydHkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0XHRrdm1fdmNwdV9tYXJrX3BhZ2VfZGlydHkodmNwdSwgbWFwLVx1MDAzZWdmbik7XG4gfVxuIFxuK3R5cGVkZWYgc3RydWN0IHtcbitcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbitcdHN0cnVjdCBrdm1faG9zdF9tYXAgbWFwO1xuK1x0aW50IHJldDtcbit9IGt2bV92Y3B1X2xvY2FsX21hcF90O1xuK1xuKyNkZWZpbmUgREVGSU5FX1ZDUFVfTUFQX0NMQVNTKHJvKVx0XHRcdFx0XHRcXFxuK0RFRklORV9DTEFTUyhrdm1fdmNwdV9tYXBfbG9jYWwjI3JvLCBrdm1fdmNwdV9sb2NhbF9tYXBfdCxcdFx0XFxcbitcdCAgICAgaWYgKCFfVC5yZXQpIGt2bV92Y3B1X3VubWFwKF9ULnZjcHUsIFx1MDAyNl9ULm1hcCksXHRcdFxcXG4rXHQgICAgICh7XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRcdGt2bV92Y3B1X2xvY2FsX21hcF90IG0gPSB7IC52Y3B1ID0gdmNwdSB9O1x0XHRcXFxuK1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRcdG0ucmV0ID0ga3ZtX3ZjcHVfbWFwIyNybyh2Y3B1LCBnZm4sIFx1MDAyNm0ubWFwKTtcdFx0XFxcbitcdFx0XHRcdFx0XHRcdFx0XHRcXFxuK1x0XHRtO1x0XHRcdFx0XHRcdFx0XFxcbitcdCAgICAgfSksIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ2ZuX3QgZ2ZuKTtcbitERUZJTkVfVkNQVV9NQVBfQ0xBU1MoKTtcbitERUZJTkVfVkNQVV9NQVBfQ0xBU1MoX3JlYWRvbmx5KTtcbitcbiB1bnNpZ25lZCBsb25nIGt2bV92Y3B1X2dmbl90b19odmEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBnZm5fdCBnZm4pO1xuIHVuc2lnbmVkIGxvbmcga3ZtX3ZjcHVfZ2ZuX3RvX2h2YV9wcm90KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ2ZuX3QgZ2ZuLCBib29sICp3cml0YWJsZSk7XG4gaW50IGt2bV92Y3B1X3JlYWRfZ3Vlc3RfcGFnZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGdmbiwgdm9pZCAqZGF0YSwgaW50IG9mZnNldCxcbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9rdm1fbWFpbi5jIGIvdmlydC9rdm0va3ZtX21haW4uY1xuaW5kZXggMmRmOGVlOWVjZjZjNmQuLmU5ZTMyNjg2ZTQxYmU0IDEwMDY0NFxuLS0tIGEvdmlydC9rdm0va3ZtX21haW4uY1xuKysrIGIvdmlydC9rdm0va3ZtX21haW4uY1xuQEAgLTMxMTgsNiArMzExOCw5IEBAIGludCBfX2t2bV92Y3B1X21hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGdmbiwgc3RydWN0IGt2bV9ob3N0X21hcCAqbWFwLFxuIFx0XHQucGluID0gdHJ1ZSxcbiBcdH07XG4gXG4rXHRpZiAoV0FSTl9PTl9PTkNFKG1hcC1cdTAwM2VodmEpKVxuK1x0XHRrdm1fdmNwdV91bm1hcCh2Y3B1LCBtYXApO1xuK1xuIFx0bWFwLVx1MDAzZXBpbm5lZF9wYWdlID0gTlVMTDtcbiBcdG1hcC1cdTAwM2VwYWdlID0gTlVMTDtcbiBcdG1hcC1cdTAwM2VodmEgPSBOVUxMO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDU6NTc6MzAuMjYxNTQxNzRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4ODM5MTU2OTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtWTSBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgaW50cm9kdWNlcyBgREVGSU5FX1ZDUFVfTUFQX0NMQVNTYCBhbmQgbGV2ZXJhZ2VzIGBDTEFTUyhrdm1fdmNwdV9tYXBfbG9jYWwsIG0pYCB0byBtYW5hZ2UgcmVzb3VyY2UgY2xlYW51cCB3aXRoaW4gdGhlIEtWTSBjb2RlLiBFc3NlbnRpYWxseSwgaXQncyByZXBsYWNpbmcgbWFudWFsIG1hcHBpbmcvdW5tYXBwaW5nIHdpdGggYSBjbGFzcyB0aGF0IGhhbmRsZXMgdW5tYXBwaW5nIGF1dG9tYXRpY2FsbHkgd2hlbiBpdCBnb2VzIG91dCBvZiBzY29wZSwgYSBnb29kIGhvdXNla2VlcGluZyBpbXByb3ZlbWVudC4gVGhpcyBjbGFzcyBpcyBiZWluZyBkZXBsb3llZCBhY3Jvc3Mgc2V2ZXJhbCBhcmNoaXRlY3R1cmVzIGFuZCBmdW5jdGlvbnM6IGBib29rM3NfcHIuY2AncyBga3ZtcHBjX3BhdGNoX2RjYnpgLCBzb21lIG5lc3RlZCBTVk0vVk1YIGZ1bmN0aW9ucyBsaWtlIGBuZXN0ZWRfc3ZtX2NvcHlfdm1jYjEyX3RvX2NhY2hlYCwgYG5lc3RlZF9zdm1fdm1leGl0X3VwZGF0ZV92bWNiMTJgLCAgYHZtbG9hZF92bXNhdmVfaW50ZXJjZXB0aW9uYCwgYHN2bV9lbnRlcl9zbW1gLCBgc3ZtX2xlYXZlX3NtbWAsIGBuZXN0ZWRfdm14X3ByZXBhcmVfbXNyX2JpdG1hcGAsIGBfX25lc3RlZF92bXhfdm1leGl0YCwgYW5kIGBfX2t2bV92Y3B1X21hcGAuXG5cblRoZSBwYXRjaCBhbHNvIGhhcyBhIGZpeCBmb3IgYF9fbmVzdGVkX3ZteF92bWV4aXRgIHdoZXJlIGBrdm1fY2hlY2tfcmVxdWVzdGAgd2FzIGNvbmRpdGlvbmFsbHkgY2FsbGVkLCBidXQgbm93IGl0J3MgY2FsbGVkIHVuY29uZGl0aW9uYWxseSwgd2hpY2ggSSBzdXNwZWN0IGhhcyBpbXBsaWNhdGlvbnMgZm9yIHJlcXVlc3QgaGFuZGxpbmcsIGVzcGVjaWFsbHkgZ2l2ZW4gdGhhdCBjaGVja2luZyB0aGUgcmVxdWVzdCBhbHNvIGNsZWFycyBpdC4gVGhhdCdzIGEgZGVmaW5pdGUgcG9pbnQgb2YgaW50ZXJlc3QuXG5cbk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbjogSXMgdGhpcyBmdXp6LXdvcnRoeT8gQWJzb2x1dGVseS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBub3QganVzdCBhIHJlZmFjdG9yaW5nLiBUaGUgdXNlIG9mIHRoaXMgY2xlYW51cCBjbGFzcyBpbiBuZXN0ZWQgU1ZNLCBWTVgsIGFuZCBCb29rM1MgUFIsIHBsdXMgdGhlIGZpeCBpbiBgX19uZXN0ZWRfdm14X3ZtZXhpdGAsIG1lYW5zIHdlIGNvdWxkIHBvdGVudGlhbGx5IGV4cG9zZSBzb21lIGludGVyZXN0aW5nIGJ1Z3MuIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRob3NlIGtleSBmdW5jdGlvbnMgd2hlcmUgdGhlIG5ldyBjbGVhbnVwIGNsYXNzIGlzIHVzZWQgYW5kIHRoZSBidWcgZml4IGlzIGltcGxlbWVudGVkLlxuXG5HaXZlbiB0aGUgYXJjaGl0ZWN0dXJlIGNvdmVyYWdlLCBJJ2xsIG5lZWQgdG8gZm9jdXMgb24gdGhlIHg4NiBwYXJ0cywgd2l0aCBgS1ZNYCwgYEtWTV9BTURgLCBhbmQgYEtWTV9JTlRFTGAgZW5hYmxlZCwgYnV0IEkgc2hvdWxkIGFsc28gcmV2aWV3IGBLVk1fQk9PSzNTXzY0X1BSYCBhcyBwYXJ0IG9mIHRoZSBjb3ZlcmFnZS4gVGltZSB0byBjaGVjayB0aG9zZSBLY29uZmlnIGZpbGVzLCBhbmQgdGhlbiBidWlsZCBhIGZ1enppbmcgdGFyZ2V0IHRoYXQgZXhlcmNpc2VzIHRoZXNlIGZ1bmN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6Njk4NSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY1NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDA1OjU3OjM5LjEwMDcwMTIyMloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODY5MDE0NDY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNX1g4NlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxLVxcdGRlZl90cmlzdGF0ZSBLVk0gaWYgKEtWTV9JTlRFTCAhPSBuIHx8IEtWTV9BTUQgIT0gbilcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTUxLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjUyOmNvbmZpZyBLVk1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01My1cXHR0cmlzdGF0ZSBcXFwiS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctNjgtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6Njk6Y29uZmlnIEtWTV9XRVJST1JcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy03MC1cXHRib29sIFxcXCJDb21waWxlIEtWTSB3aXRoIC1XZXJyb3JcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04Mi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo4Mzpjb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTg0LVxcdGJvb2wgXFxcIkVuYWJsZSBzdXBwb3J0IGZvciBLVk0gc29mdHdhcmUtcHJvdGVjdGVkIFZNc1xcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjk2OmNvbmZpZyBLVk1fSU5URUxcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05Ny1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBJbnRlbCAoYW5kIGNvbXBhdGlibGUpIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwNi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMDc6Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXFxcIkNoZWNrIHRoYXQgZ3Vlc3RzIGRvIG5vdCByZWNlaXZlICNWRSBleGNlcHRpb25zXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWc9MTIyPWNvbmZpZyBYODZfU0dYX0tWTVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEzNDpjb25maWcgS1ZNX0lOVEVMX1REWFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cXHRib29sIFxcXCJJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE0Njpjb25maWcgS1ZNX0FNRFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0Ny1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTctXFx0Ym9vbCBcXFwiQU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3MS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNzI6Y29uZmlnIEtWTV9JT0FQSUNcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzMtXFx0Ym9vbCBcXFwiSS9PIEFQSUMsIFBJQywgYW5kIFBJVCBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODEtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTgyOmNvbmZpZyBLVk1fU01NXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTgzLVxcdGJvb2wgXFxcIlN5c3RlbSBNYW5hZ2VtZW50IE1vZGUgZW11bGF0aW9uXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTkyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE5Mzpjb25maWcgS1ZNX0hZUEVSVlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5NC1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBNaWNyb3NvZnQgSHlwZXItViBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDYtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA3OmNvbmZpZyBLVk1fWEVOXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjA4LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIFhlbiBoeXBlcmNhbGwgaW50ZXJmYWNlXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjE1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIxNjpjb25maWcgS1ZNX1BST1ZFX01NVVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNy1cXHRib29sIFxcXCJQcm92ZSBLVk0gTU1VIGNvcnJlY3RuZXNzXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjI4LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIyOTpjb25maWcgS1ZNX0VYVEVSTkFMX1dSSVRFX1RSQUNLSU5HXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjMwLVxcdGJvb2xcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzEtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjMyOmNvbmZpZyBLVk1fTUFYX05SX1ZDUFVTXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjMzLVxcdGludCBcXFwiTWF4aW11bSBudW1iZXIgb2YgdkNQVXMgcGVyIEtWTSBndWVzdFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDU6NTc6NDAuOTY5NzIwNjNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjc0NTk3MDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjpcblxuKipJbnZlc3RpZ2F0aW5nIEtWTSBDb25maWd1cmF0aW9uIFBvc3NpYmlsaXRpZXMqKlxuXG5Pa2F5LCBzbyB3ZSdyZSB0YWxraW5nIGFib3V0IEtWTSwgYW5kIGltbWVkaWF0ZWx5IG15IG1pbmQganVtcHMgdG8gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uczogYEtWTWAsIGBLVk1fQU1EYCwgYEtWTV9JTlRFTGAsIGBLVk1fU01NYCwgYW5kIGBLVk1fSFlQRVJWYC4gVGhlc2UgYXJlIHRoZSBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50cywgdGhlIGNvcmUgYnVpbGRpbmcgYmxvY2tzIGFuZCB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGZsYXZvcnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSBjb25maWd1cmF0aW9uIEknbSBsb29raW5nIGZvciAtIGBLVk1fQk9PSzNTXzY0X1BSYCAtIGV4aXN0cy4gVGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGlzIHRoZSBQb3dlclBDIEtjb25maWcgZmlsZS4gTGV0J3MgZXhhbWluZSBgYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnYCB0byBzZWUgaWYgYEtWTV9CT09LM1NfNjRfUFJgIGlzIGRlZmluZWQgdGhlcmUuIFRoaXMgc2hvdWxkIGdpdmUgbWUgc29tZSBjb250ZXh0IGFib3V0IGl0cyBwdXJwb3NlLCBkZXBlbmRlbmNpZXMsIGFuZCBpZiBpdCdzIGV2ZW4gYSB2aWFibGUgb3B0aW9uIGZvciBjb25zaWRlcmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MzYyLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDU6NTc6NDQuMjQ0MzE5NDA5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyMjI0NDk3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNX0JPT0szU182NF9QUlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Bvd2VycGMva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnPTc5PWNvbmZpZyBLVk1fQk9PSzNTXzY0X0hWXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctOTktXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjEwMDpjb25maWcgS1ZNX0JPT0szU182NF9QUlxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xMDEtXFx0dHJpc3RhdGUgXFxcIktWTSBzdXBwb3J0IHdpdGhvdXQgdXNpbmcgaHlwZXJ2aXNvciBtb2RlIGluIGhvc3RcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDA1OjU3OjQ0Ljc2NjU2OTQ5NFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MDkyMzY5MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBhbmQgQ29kZSBDaGFuZ2VzKipcblxuT2theSwgc28gSSBzZWUgdGhpcyBwYXRjaCBpcyB3b3JraW5nIHdpdGggUG93ZXJQQywgZ2l2ZW4gdGhlIGBLVk1fQk9PSzNTXzY0X1BSYCBjb25maWd1cmF0aW9uLiBUaGF0J3MgZ29vZCB0byBjb25maXJtLiBOb3csIGxldCdzIHNlZSBhYm91dCB0aGVzZSBgS1ZNX1NNTWAgYW5kIGBLVk1fSFlQRVJWYCBzZXR0aW5ncy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBwYXRjaCBoYXMgYW55IGRlcGVuZGVuY2llcyBvbiB0aG9zZSBvciBpZiB0aGV5IGFyZSByZWxldmFudCBpbiBhbnkgd2F5LlxuXG5UaGUgY29kZSBtb2RpZmljYXRpb25zIGFyZSBmb2N1c2luZyBvbiBgc3ZtX2VudGVyX3NtbWAgYW5kIGBzdm1fbGVhdmVfc21tYCwgd2hpY2ggSSBpbW1lZGlhdGVseSByZWNvZ25pemUgYXMgeDg2LXNwZWNpZmljLCBwYXJ0aWN1bGFybHkgdGhlIFNlY3VyZSBWaXJ0dWFsIE1hY2hpbmUgKFNWTSkgaW1wbGVtZW50YXRpb24uIFRob3NlIGZ1bmN0aW9ucyBhcmUgcmlnaHQgd2hlcmUgSSdkIGV4cGVjdCB0aGVtIHRvIGJlLCBpbnNpZGUgYGFyY2gveDg2L2t2bS9zdm0vc3ZtLmNgLlxuXG5UaGUga2V5IHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhlc2UgY2hhbmdlcyBhcmUgZ3VhcmRlZCBieSBgQ09ORklHX0tWTV9TTU1gLiBJZiB0aGV5IGFyZSwgaXQgd2lsbCBjb25zdHJhaW4gdGhlIGZlYXR1cmVzLCB3aGlsZSBpZiBub3QsIHRoZSBmZWF0dXJlcyB3aWxsIGJlIGVuYWJsZWQgZm9yIHRoZSBLVk0gYnVpbGQuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBjb25kaXRpb25hbCBjb21waWxhdGlvbiB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgaW50ZW5kZWQgdXNlIG9mIHRoZXNlIG1vZGlmaWNhdGlvbnMuIEknbGwgY2hlY2sgdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIGxpa2VseSB0aGUgS2NvbmZpZyBmaWxlcyB0byBkZXRlcm1pbmUgdGhlIGRlcGVuZGVuY3kuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk3ODMsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDU6NTc6NDguNjc1ODA4NjA0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5NDQxNTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN2bV9lbnRlcl9zbW1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL3N2bS9zdm0uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTQ5NzE9c3RhdGljIGludCBzdm1fc21pX2FsbG93ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGZvcl9pbmplY3Rpb24pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTQ5ODYtXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo0OTg3OnN0YXRpYyBpbnQgc3ZtX2VudGVyX3NtbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuaW9uIGt2bV9zbXJhbSAqc21yYW0pXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy00OTg4LXtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9NTAzMz1zdGF0aWMgaW50IHN2bV9sZWF2ZV9zbW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBjb25zdCB1bmlvbiBrdm1fc21yYW0gKnNtcmFtKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01MDY1LVxcdCAqIFJlc3RvcmUgTDEgaG9zdCBzdGF0ZSBmcm9tIEwxIEhTQVZFIGFyZWEgYXMgVk1DQjAxIHdhc1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6NTA2NjpcXHQgKiB1c2VkIGR1cmluZyBTTU0gKHNlZSBzdm1fZW50ZXJfc21tKCkpXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01MDY3LVxcdCAqL1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz01MzAyPXN0cnVjdCBrdm1feDg2X29wcyBzdm1feDg2X29wcyBfX2luaXRkYXRhID0ge1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01NDEyLVxcdC5zbWlfYWxsb3dlZCA9IHN2bV9zbWlfYWxsb3dlZCxcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjU0MTM6XFx0LmVudGVyX3NtbSA9IHN2bV9lbnRlcl9zbW0sXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01NDE0LVxcdC5sZWF2ZV9zbW0gPSBzdm1fbGVhdmVfc21tLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwNTo1Nzo0OC43NjUyNTQ1MDJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjMzMDE2OTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGNyYWZ0ZWQgd2l0aCB0aGUgdW5kZXJzdGFuZGluZyB0aGF0IEknbSBkaXNjdXNzaW5nIHRoaXMgd2l0aCBhIGZlbGxvdyBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBLVk0sIFNNTSwgYW5kIFBvdGVudGlhbCBIeXBlci1WIEludGVyYWN0aW9ucyoqXG5cblJpZ2h0LCBzbyBpdCBhcHBlYXJzIHdlJ3JlIGFsd2F5cyBkZWFsaW5nIHdpdGggYSBjb21waWxlZCBlbnZpcm9ubWVudCwgd2hpY2ggbWFrZXMgdGhpbmdzIGEgYml0IGNsZWFuZXIsIGJ1dCBTTU0gZnVuY3Rpb25hbGl0eSBhYnNvbHV0ZWx5IHJlcXVpcmVzIGBLVk1fU01NYC4gSSdtIGltbWVkaWF0ZWx5IHRoaW5raW5nLCBcIk9rYXksIHRoYXQncyBleHBlY3RlZC4gV2hlcmUgbWlnaHQgdGhpcyBiZSBpbnRlcmFjdGluZyB3aXRoIG90aGVyIHZpcnR1YWxpemF0aW9uIGxheWVycz9cIlxuXG5UaGUgbmV4dCBsb2dpY2FsIHN0ZXAsIGF0IGxlYXN0IGluIG15IHRob3VnaHQgcHJvY2VzcywgaXMgdG8gZGlnIGludG8gYENPTkZJR19LVk1fSFlQRVJWYC4gSSB3YW50IHRvIHNlZSBpZiBgX19uZXN0ZWRfdm14X3ZtZXhpdGAgaXMgZGVmaW5lZCwgb3IgdXNlZCBpbiByZWxhdGlvbiB0byB0aGF0IG9wdGlvbiwgd2hpY2ggY291bGQgc3VnZ2VzdCBkZWVwZXIgaW50ZWdyYXRpb24gd2l0aCBIeXBlci1WLiBUaGlzIGlzIGFsbCBhYm91dCBsb29raW5nIGZvciBwb3RlbnRpYWwgaG9va3MgYW5kIGNvbnRyb2wgcGF0aHMsIGVzcGVjaWFsbHkgYXJvdW5kIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBzY2VuYXJpb3Mgd2hlcmUgSHlwZXItViBtaWdodCBoYXZlIGl0cyBvd24gU01NIGhhbmRsaW5nIG9yIGludGVyYWN0IHdpdGggS1ZNJ3MuIElmIHRoZXJlJ3Mgb3ZlcmxhcCBpbiB0aG9zZSBhcmVhcywgSSdsbCBuZWVkIHRvIGlkZW50aWZ5IGhvdyB0aGV5IG1hbmFnZSB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDYzNywiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDA1OjU3OjUyLjM5ODI3NTAxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDE0MTY3MzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0tWTV9IWVBFUlZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTIzND1zdGF0aWMgaW5saW5lIHZvaWQgbmVzdGVkX3JlbGVhc2VfZXZtY3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMjM1LXtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjIzNjojaWZkZWYgQ09ORklHX0tWTV9IWVBFUlZcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTIzNy1cXHRzdHJ1Y3Qga3ZtX3ZjcHVfaHYgKmh2X3ZjcHUgPSB0b19odl92Y3B1KHZjcHUpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz0yNTI9c3RhdGljIGJvb2wgbmVzdGVkX2V2bWNzX2hhbmRsZV92bWNsZWFyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3Qgdm1wdHIpXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0yNTMte1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6MjU0OiNpZmRlZiBDT05GSUdfS1ZNX0hZUEVSVlxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMjU1LVxcdHN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz0xNzQ3PXN0YXRpYyB2b2lkIGNvcHlfZW5saWdodGVuZWRfdG9fdm1jczEyKHN0cnVjdCB2Y3B1X3ZteCAqdm14LCB1MzIgaHZfY2xlYW5fZmllbGRzKVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMTc0OC17XFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzoxNzQ5OiNpZmRlZiBDT05GSUdfS1ZNX0hZUEVSVlxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMTc1MC1cXHRzdHJ1Y3Qgdm1jczEyICp2bWNzMTIgPSB2bXgtXFx1MDAzZW5lc3RlZC5jYWNoZWRfdm1jczEyO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0xOTg5LVxcdHJldHVybjtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjE5OTA6I2Vsc2UgLyogQ09ORklHX0tWTV9IWVBFUlYgKi9cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTE5OTEtXFx0S1ZNX0JVR19PTigxLCB2bXgtXFx1MDAzZXZjcHUua3ZtKTtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjE5OTI6I2VuZGlmIC8qIENPTkZJR19LVk1fSFlQRVJWICovXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0xOTkzLX1cXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9MTk5NT1zdGF0aWMgdm9pZCBjb3B5X3ZtY3MxMl90b19lbmxpZ2h0ZW5lZChzdHJ1Y3QgdmNwdV92bXggKnZteClcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTE5OTYte1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6MTk5NzojaWZkZWYgQ09ORklHX0tWTV9IWVBFUlZcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTE5OTgtXFx0c3RydWN0IHZtY3MxMiAqdm1jczEyID0gdm14LVxcdTAwM2VuZXN0ZWQuY2FjaGVkX3ZtY3MxMjtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMjE2Ny1cXHRyZXR1cm47XFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzoyMTY4OiNlbHNlIC8qIENPTkZJR19LVk1fSFlQRVJWICovXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0yMTY5LVxcdEtWTV9CVUdfT04oMSwgdm14LVxcdTAwM2V2Y3B1Lmt2bSk7XFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzoyMTcwOiNlbmRpZiAvKiBDT05GSUdfS1ZNX0hZUEVSViAqL1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMjE3MS19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTIxNzc9c3RhdGljIGVudW0gbmVzdGVkX2V2bXB0cmxkX3N0YXR1cyBuZXN0ZWRfdm14X2hhbmRsZV9lbmxpZ2h0ZW5lZF92bXB0cmxkKFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0yMTc5LXtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjIxODA6I2lmZGVmIENPTkZJR19LVk1fSFlQRVJWXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0yMTgxLVxcdHN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz0zMTIwPXN0YXRpYyBpbnQgbmVzdGVkX3ZteF9jaGVja19jb250cm9scyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTMxMjctXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzozMTI4OiNpZmRlZiBDT05GSUdfS1ZNX0hZUEVSVlxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzEyOS1cXHRpZiAoZ3Vlc3RfY3B1X2NhcF9oYXNfZXZtY3ModmNwdSkpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTMzMDQ9c3RhdGljIGludCBuZXN0ZWRfdm14X2NoZWNrX2d1ZXN0X3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzQwNC1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjM0MDU6I2lmZGVmIENPTkZJR19LVk1fSFlQRVJWXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zNDA2LXN0YXRpYyBib29sIG5lc3RlZF9nZXRfZXZtY3NfcGFnZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTM1MjM9c3RhdGljIGJvb2wgdm14X2dldF9uZXN0ZWRfc3RhdGVfcGFnZXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzUyNC17XFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzozNTI1OiNpZmRlZiBDT05GSUdfS1ZNX0hZUEVSVlxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzUyNi1cXHQvKlxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz01MDU0PXZvaWQgX19uZXN0ZWRfdm14X3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiB2bV9leGl0X3JlYXNvbixcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTA2OC1cXHRpZiAoa3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9HRVRfTkVTVEVEX1NUQVRFX1BBR0VTLCB2Y3B1KSkge1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NTA2OTojaWZkZWYgQ09ORklHX0tWTV9IWVBFUlZcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTUwNzAtXFx0XFx0LypcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NjQ2MT1zdGF0aWMgYm9vbCBuZXN0ZWRfdm14X2wwX3dhbnRzX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02NTIzLVxcdFxcdHJldHVybiB0cnVlO1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NjUyNDojaWZkZWYgQ09ORklHX0tWTV9IWVBFUlZcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTY1MjUtXFx0Y2FzZSBFWElUX1JFQVNPTl9WTUNBTEw6XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTY4ODk9c3RhdGljIGludCB2bXhfc2V0X25lc3RlZF9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTY5ODUtXFx0XFx0c2V0X2N1cnJlbnRfdm1wdHIodm14LCBrdm1fc3RhdGUtXFx1MDAzZWhkci52bXgudm1jczEyX3BhKTtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjY5ODY6I2lmZGVmIENPTkZJR19LVk1fSFlQRVJWXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02OTg3LVxcdH0gZWxzZSBpZiAoa3ZtX3N0YXRlLVxcdTAwM2VmbGFncyBcXHUwMDI2IEtWTV9TVEFURV9ORVNURURfRVZNQ1MpIHtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NzQ3NT1zdHJ1Y3Qga3ZtX3g4Nl9uZXN0ZWRfb3BzIHZteF9uZXN0ZWRfb3BzIF9faW5pdGRhdGEgPSB7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTc0ODUtXFx0LndyaXRlX2xvZ19kaXJ0eSA9IG5lc3RlZF92bXhfd3JpdGVfcG1sX2J1ZmZlcixcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjc0ODY6I2lmZGVmIENPTkZJR19LVk1fSFlQRVJWXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy03NDg3LVxcdC5lbmFibGVfZXZtY3MgPSBuZXN0ZWRfZW5hYmxlX2V2bWNzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwNTo1Nzo1Mi45Mzk3MDA1MTRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzI3MTc2NTg2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEltcGxpY2F0aW9ucyBvZiB0aGUgS1ZNIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBtYWtpbmcgYSBzaWduaWZpY2FudCBjaGFuZ2U6IGl0J3MgZm9yY2luZyBhIGBLVk1fUkVRX0dFVF9ORVNURURfU1RBVEVfUEFHRVNgIGNoZWNrIHdpdGhpbiBgX19uZXN0ZWRfdm14X3ZtZXhpdGAgcmVnYXJkbGVzcy4gVGhlIGludGVyZXN0aW5nIHBhcnQgaXMgdGhhdCB0aGUgY29uZGl0aW9uYWwgYCNpZmRlZiBDT05GSUdfS1ZNX0hZUEVSVmAgaXMgKmluc2lkZSogdGhlIGBrdm1fY2hlY2tfcmVxdWVzdGAgYmxvY2suIFNvLCB3aGlsZSBgQ09ORklHX0tWTV9IWVBFUlZgIGlzbid0IHN0cmljdGx5IG5lY2Vzc2FyeSB0byB0cmlnZ2VyIHRoZSBjaGFuZ2UgaW4gYF9fbmVzdGVkX3ZteF92bWV4aXRgIGl0c2VsZiAoc2luY2Ugd2UncmUgbWFraW5nIHRoZSBjaGVjayB1bmNvbmRpdGlvbmFsKSwgd2UgYWJzb2x1dGVseSAqbXVzdCogdGVzdCB0aGUgbmVzdGVkIFZNWCBhbmQgU1ZNIGZ1bmN0aW9uYWxpdHkgdGhvcm91Z2hseS4gV2UgbmVlZCB0byBlbnN1cmUgbm90aGluZyBicmVha3MuXG5cblRvIHRoYXQgZW5kLCBJJ3ZlIGNvbXBpbGVkIGEgbGlzdCBvZiBmdW5jdGlvbnMgdGhhdCB3YXJyYW50IGNhcmVmdWwgc2NydXRpbnk6XG5cbiogICBgbmVzdGVkX3N2bV9jb3B5X3ZtY2IxMl90b19jYWNoZWAgKGNyaXRpY2FsIGZvciBTVk0gc3RhdGUgbWFuYWdlbWVudCB3aXRoaW4gYGVudGVyX3N2bV9ndWVzdF9tb2RlYClcbiogICBgbmVzdGVkX3N2bV92bWV4aXRfdXBkYXRlX3ZtY2IxMmAgKGVzc2VudGlhbCBmb3IgU1ZNIGV4aXQgaGFuZGxpbmcsIGNhbGxlZCBieSBgbmVzdGVkX3N2bV92bWV4aXRgKVxuKiAgIGB2bWxvYWRfdm1zYXZlX2ludGVyY2VwdGlvbmAgKGludGVyY2VwdGlvbiBvZiBWTUxPQUQvVk1TQVZFIG9wZXJhdGlvbnMsIGludm9sdmVkIGluIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBhbmQgY2FsbGVkIGJ5IGBzdm1faW52b2tlX2V4aXRfaGFuZGxlcmApXG4qICAgYHN2bV9lbnRlcl9zbW1gIGFuZCBgc3ZtX2xlYXZlX3NtbWAgKFNNTSB0cmFuc2l0aW9uIGhhbmRsZXJzIGZvciBTVk0sIGNhbGxlZCB2aWEgYGt2bV9zbW1fdHJhbnNpdGlvbmApXG4qICAgYG5lc3RlZF92bXhfcHJlcGFyZV9tc3JfYml0bWFwYCAoc2V0cyB1cCBNU1IgYml0bWFwcywgY3J1Y2lhbCBmb3IgVk1YKVxuKiAgIGBfX25lc3RlZF92bXhfdm1leGl0YCAodGhlIGZvY2FsIHBvaW50IG9mIHRoaXMgcGF0Y2gsIGNhbGxlZCBieSBgbmVzdGVkX3ZteF92bWV4aXRgIGFuZCBgbmVzdGVkX3ZteF9yZWZsZWN0X3ZtZXhpdGApXG4qICAgYGt2bXBwY19wYXRjaF9kY2J6YCAobGlrZWx5IHVucmVsYXRlZCB0byB0aGUgY29yZSBjaGFuZ2UsIGJ1dCBpbmNsdWRlZCBmb3IgY29tcGxldGVuZXNzLCBjYWxsZWQgYnkgYGt2bXBwY19oYW5kbGVfcGFnZWZhdWx0YClcblxuTXkgYXBwcm9hY2ggaXMgdG8gcHJpb3JpdGl6ZSBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIFRoYXQgaGVscHMgZ2l2ZSB1cyB0aGUgbW9zdCBpbnNpZ2h0IGludG8gaG93IGVhY2ggZnVuY3Rpb24gaXMgdXNlZCwgYW5kIGhvdyBjaGFuZ2VzIG1heSBiZSBleHBvc2VkIHRvIHRoZSBjYWxsZXIuIFNvLCBJIHdpbGwgdHJhY2UgdGhlIGNhbGxlcnMgb2YgdGhlIGFib3ZlIHN0YXRpYyBmdW5jdGlvbnMgdG8gZW5zdXJlIGNvbXBsZXRlIGNvdmVyYWdlLiBUaGF0J3MgdGhlIGJlc3Qgd2F5IHRvIGRldGVybWluZSB0aGUgZnVsbCBpbXBhY3Qgb2YgdGhlIHBhdGNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzA0OCwiT3V0cHV0VG9rZW5zIjo0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwNTo1ODowMC4yMTE0Njk5NjlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyODk0OTUzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXN0ZWRfc3ZtX2NvcHlfdm1jYjEyX3RvX2NhY2hlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYz0xMDMzPWludCBlbnRlcl9zdm1fZ3Vlc3RfbW9kZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2bWNiMTJfZ3BhLCBib29sIGZyb21fdm1ydW4pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTEwODUtXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzoxMDg2OnN0YXRpYyBpbnQgbmVzdGVkX3N2bV9jb3B5X3ZtY2IxMl90b19jYWNoZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2bWNiMTJfZ3BhKVxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtMTA4Ny17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jPTExMTM9aW50IG5lc3RlZF9zdm1fdm1ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYy0xMTQ1LVxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmM6MTE0NjpcXHRyZXQgPSBuZXN0ZWRfc3ZtX2NvcHlfdm1jYjEyX3RvX2NhY2hlKHZjcHUsIHZtY2IxMl9ncGEpO1xcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtMTE0Ny1cXHRpZiAocmV0ID09IC1FRkFVTFQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDA1OjU4OjAwLjM0MDQyNjI2NVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjQ1MzY0MDQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50OiBOYXZpZ2F0aW5nIHRoZSBWaXJ0dWFsaXphdGlvbiBMYW5kc2NhcGUqKlxuXG5SaWdodCwgc28gYG5lc3RlZF9zdm1fdm1ydW5gIGp1bXBzIG91dCBpbW1lZGlhdGVseSBhcyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZy4gVGhhdCdzIGEgc29saWQsIGxpa2VseSBsb3ctbGV2ZWwgZW50cnlwb2ludCBmb3IgYW55dGhpbmcgcmVsYXRlZCB0byBuZXN0ZWQgdmlydHVhbGl6YXRpb24gd2l0aGluIGEgVk13YXJlIGVudmlyb25tZW50LiBJdCBzdWdnZXN0cyB3ZSdyZSBkZWFsaW5nIHdpdGggZWl0aGVyIGVuYWJsaW5nIG9yIGludGVyYWN0aW5nIHdpdGggU2VjdXJlIFZpcnR1YWwgTWFjaGluZSAoU1ZNKSBjYXBhYmlsaXRpZXMgd2l0aGluIGFub3RoZXIgVk0sIG9yIGxpa2VseSB0aGUgbWVjaGFuaXNtIHRocm91Z2ggd2hpY2ggb25lIFZNIGludGVyYWN0cyB3aXRoIGFub3RoZXIncyBuZXN0ZWQgdmlydHVhbGl6YXRpb24gZW52aXJvbm1lbnQuIENvbnNpZGVyaW5nIG15IGV4cGVyaWVuY2Ugd2l0aCB2aXJ0dWFsaXphdGlvbiBrZXJuZWwgbW9kdWxlcyBhbmQgc3lzdGVtLWxldmVsIGludGVyYWN0aW9ucywgdGhpcyBwcm9iYWJseSBoYW5kbGVzIHRoZSB0cmFuc2l0aW9uLCBtb2RlIHNldHRpbmcsIG9yIHJlc291cmNlIGFsbG9jYXRpb24gaW52b2x2ZWQgaW4gcnVubmluZyBhIHZpcnR1YWxpemVkIGd1ZXN0ICp3aXRoaW4qIGFub3RoZXIgdmlydHVhbGl6ZWQgZ3Vlc3QuIFRoaXMgY291bGQgYmUgcmVsZXZhbnQgZm9yIGV2ZXJ5dGhpbmcgZnJvbSB0ZXN0aW5nIGFuZCBkZXZlbG9wbWVudCB0byBwb3RlbnRpYWxseSBzZWN1cml0eS1mb2N1c2VkIGlzb2xhdGlvbiwgY29udGFpbmVyaXphdGlvbiwgb3IgZXZlbiBtYWxpY2lvdXMgcm9vdGtpdCBkZXRlY3Rpb24gdGVjaG5pcXVlcy4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGNoZWNrIGZvciBhbnkgaG9va3MsIGNhbGxiYWNrcywgb3Igc2hhcmVkIG1lbW9yeSBhY2Nlc3MgdGhpcyBmdW5jdGlvbiBtaWdodCBpbXBsZW1lbnQsIHRob3NlIHdvdWxkIGJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQzNjUsIk91dHB1dFRva2VucyI6NDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwNTo1ODowNC41ODU3OTM5NDZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1Nzk0NzUyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXN0ZWRfc3ZtX3ZtZXhpdF91cGRhdGVfdm1jYjEyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYz0xMjMzPXZvaWQgc3ZtX2NvcHlfdm1sb2Fkc2F2ZV9zdGF0ZShzdHJ1Y3Qgdm1jYiAqdG9fdm1jYiwgc3RydWN0IHZtY2IgKmZyb21fdm1jYilcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtMTI0OC1cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jOjEyNDk6c3RhdGljIGludCBuZXN0ZWRfc3ZtX3ZtZXhpdF91cGRhdGVfdm1jYjEyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTEyNTAte1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYz0xMzE3PXZvaWQgbmVzdGVkX3N2bV92bWV4aXQoc3RydWN0IHZjcHVfc3ZtICpzdm0pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL25lc3RlZC5jLTEzMjItXFxuYXJjaC94ODYva3ZtL3N2bS9uZXN0ZWQuYzoxMzIzOlxcdGlmIChuZXN0ZWRfc3ZtX3ZtZXhpdF91cGRhdGVfdm1jYjEyKHZjcHUpKVxcbmFyY2gveDg2L2t2bS9zdm0vbmVzdGVkLmMtMTMyNC1cXHRcXHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfVFJJUExFX0ZBVUxULCB2Y3B1KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDU6NTg6MDUuMTQzNzQ3MjFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE5NzcwNTAwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQ6XG5cbioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIFZNIEV4aXQgRW50cnlwb2ludHMqKlxuXG5SaWdodCwgYG5lc3RlZF9zdm1fdm1leGl0YC4gVGhhdCBsb29rcyBsaWtlIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIGV4YW1pbmluZyB0aGUgd2hvbGUgbmVzdGVkIHZpcnR1YWxpemF0aW9uIHNpdHVhdGlvbi4gSXQgaW1tZWRpYXRlbHkgc3VnZ2VzdHMgYW4gZW50cnkgcG9pbnQgaW50byB0aGUgaGFuZGxpbmcgb2YgdmlydHVhbCBtYWNoaW5lIGV4aXRzIHdoZW4gcnVubmluZyB1bmRlciBuZXN0ZWQgU1ZNIChTZWN1cmUgVmlydHVhbCBNYWNoaW5lKSB2aXJ0dWFsaXphdGlvbi4gVGhpcyBuYW1lIGFsb25lIHBvaW50cyB0byB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IEkgbmVlZCB0byBkaWcgaW50by4gSXQncyBhIGNsZWFyIGluZGljYXRpb24gdGhhdCB0aGlzIGlzIHRoZSBob29rLCB0aGUgcGxhY2Ugd2hlcmUgdGhlIGh5cGVydmlzb3IgaW50ZXJjZXB0cyBldmVudHMgZnJvbSB0aGUgZ3Vlc3QgVk0uIFRoaXMgaXMgd2hlcmUgSSdsbCBwcm9iYWJseSBmaW5kIHRoZSBrZXkgbG9naWMgZm9yIG1hbmFnaW5nIGd1ZXN0LXRvLWhvc3QgdHJhbnNpdGlvbnMsIGVtdWxhdGlvbiBvZiBpbnN0cnVjdGlvbnMsIGFuZCBiYXNpY2FsbHkgZXZlcnl0aGluZyB0aGF0IG1ha2VzIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiB3b3JrLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgZW50cnkgcG9pbnQgZG9lcyBpbiB0aGUgb3ZlcmFsbCBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDk0MywiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDA1OjU4OjA4LjM0MTQ1NDc2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTY3NzA4NDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm1sb2FkX3Ztc2F2ZV9pbnRlcmNlcHRpb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL3N2bS9zdm0uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTIyMDg9c3RhdGljIGludCBpbnRyX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTIyMTMtXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzoyMjE0OnN0YXRpYyBpbnQgdm1sb2FkX3Ztc2F2ZV9pbnRlcmNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIHZtbG9hZClcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTIyMTUte1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz0yMjQ5PXN0YXRpYyBpbnQgdm1sb2FkX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0yMjUwLXtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjIyNTE6XFx0cmV0dXJuIHZtbG9hZF92bXNhdmVfaW50ZXJjZXB0aW9uKHZjcHUsIHRydWUpO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMjI1Mi19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTIyNTQ9c3RhdGljIGludCB2bXNhdmVfaW50ZXJjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTIyNTUte1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6MjI1NjpcXHRyZXR1cm4gdm1sb2FkX3Ztc2F2ZV9pbnRlcmNlcHRpb24odmNwdSwgZmFsc2UpO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMjI1Ny19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDA1OjU4OjA4LjQ1ODIzMTg2NloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTYwNDY2ODYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudDogTGV2ZXJhZ2luZyBFbnRyeXBvaW50cyBmb3IgVk0gTGlmZWN5Y2xlIE1hbmFnZW1lbnQqKlxuXG5SaWdodCwgbGV0J3Mgc2VlLi4uIGB2bWxvYWRfaW50ZXJjZXB0aW9uYCBhbmQgYHZtc2F2ZV9pbnRlcmNlcHRpb25gIGFyZSBkZWZpbml0ZWx5IHRoZSBrZXkgc3RhcnRpbmcgcG9pbnRzIGhlcmUuIFRoaW5raW5nIGFib3V0IHRoaXMgZnJvbSBhIGxpZmVjeWNsZSBwZXJzcGVjdGl2ZSwgdGhlc2UgYXJlIHRoZSBob29rcyBJIG5lZWQgdG8gZm9jdXMgb24gZm9yIGFueSBzaWduaWZpY2FudCBpbnRlcnZlbnRpb24gb3IgaW5zdHJ1bWVudGF0aW9uIHdpdGhpbiB0aGUgaHlwZXJ2aXNvcidzIFZNIG1hbmFnZW1lbnQgZmxvdy4gVGhleSdyZSB0aGUgb2J2aW91cyBjYW5kaWRhdGVzIGZvciBpbXBsZW1lbnRpbmcgYW55IGN1c3RvbSBsb2dpYyB0aWVkIHRvIFZNIHN0YXRlIHRyYW5zaXRpb25zLlxuXG5JJ20gaW1tZWRpYXRlbHkgY29uc2lkZXJpbmcgd2hhdCBJIGNhbiBpbnRlcmNlcHQgYW5kIGhvdyBJJ2xsIGhhbmRsZSB0aGUgYXJjaGl0ZWN0dXJhbCBjaGFsbGVuZ2VzLiBTcGVjaWZpY2FsbHksIHdoYXQncyBteSBwbGFuIHRvIG1haW50YWluIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIHNhdmUvcmVzdG9yZSBwcm9jZXNzPyBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgaG93IHRvIGluamVjdCBteSBvd24gY29kZSBhbmQgZGF0YSB3aXRob3V0IGltcGFjdGluZyB0aGUgcGVyZm9ybWFuY2Ugb2YgdGhlIFZNIG9yIGl0cyBndWVzdHMsIGFuZCB3aXRoIGNhcmVmdWwgYXR0ZW50aW9uIHRvIHRocmVhZCBzYWZldHksIG9mIGNvdXJzZS4gQW55IGludGVycnVwdGlvbiBpbiB0aGVzZSBmdW5jdGlvbnMgY2FuIGxlYWQgdG8gdW5wcmVkaWN0YWJsZSByZXN1bHRzIGluIHRoZSB2aXJ0dWFsIG1hY2hpbmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTU0MywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDA1OjU4OjExLjYxODcwMjMwN1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM3MjgxMzM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN2bV9lbnRlcl9zbW1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL3N2bS9zdm0uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTQ5NzE9c3RhdGljIGludCBzdm1fc21pX2FsbG93ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGZvcl9pbmplY3Rpb24pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTQ5ODYtXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo0OTg3OnN0YXRpYyBpbnQgc3ZtX2VudGVyX3NtbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuaW9uIGt2bV9zbXJhbSAqc21yYW0pXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy00OTg4LXtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9NTAzMz1zdGF0aWMgaW50IHN2bV9sZWF2ZV9zbW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBjb25zdCB1bmlvbiBrdm1fc21yYW0gKnNtcmFtKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01MDY1LVxcdCAqIFJlc3RvcmUgTDEgaG9zdCBzdGF0ZSBmcm9tIEwxIEhTQVZFIGFyZWEgYXMgVk1DQjAxIHdhc1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6NTA2NjpcXHQgKiB1c2VkIGR1cmluZyBTTU0gKHNlZSBzdm1fZW50ZXJfc21tKCkpXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01MDY3LVxcdCAqL1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz01MzAyPXN0cnVjdCBrdm1feDg2X29wcyBzdm1feDg2X29wcyBfX2luaXRkYXRhID0ge1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01NDEyLVxcdC5zbWlfYWxsb3dlZCA9IHN2bV9zbWlfYWxsb3dlZCxcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjU0MTM6XFx0LmVudGVyX3NtbSA9IHN2bV9lbnRlcl9zbW0sXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01NDE0LVxcdC5sZWF2ZV9zbW0gPSBzdm1fbGVhdmVfc21tLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwNTo1ODoxMS43NTU5OTA1MjNaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUzODkzMzY1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqVHJhY2luZyB0aGUgRXhlY3V0aW9uIFBhdGggb2YgYGVudGVyX3NtbWAgaW4gS1ZNKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoZSBLVk0gY29kZSBhbmQgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgZW50ZXJfc21tYCBpcyBiZWluZyBpbnZva2VkLiBSaWdodCwgdGhlIGZ1bmN0aW9uIG5hbWUgaXRzZWxmIHN1Z2dlc3RzIGVudHJ5IGludG8gU3lzdGVtIE1hbmFnZW1lbnQgTW9kZSAoU01NKSwgYW5kIHRoYXQncyBzb21ldGhpbmcgdGhhdCBhbHdheXMgcmVxdWlyZXMgY2FyZWZ1bCBjb25zaWRlcmF0aW9uIGluIGEgaHlwZXJ2aXNvciBjb250ZXh0LiBJIHJlbWVtYmVyIHRoYXQgdGhlc2UgdHlwZXMgb2YgYXJjaGl0ZWN0dXJhbCBpbnRlcmFjdGlvbnMgYXJlIG9mdGVuIG1hbmFnZWQgdGhyb3VnaCBga3ZtX3g4Nl9vcHNgLiBUaGF0J3MgdGhlIGxpa2VseSBlbnRyeSBwb2ludC4gTm93LCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGFjdHVhbCBjb250cm9sIGZsb3csIEknbSBnb2luZyB0byBxdWlja2x5IGdyZXAgb3IgdXNlIG15IElERSB0byBmaW5kIGFsbCB0aGUgY2FsbCBzaXRlcyBvZiBgZW50ZXJfc21tYCB3aXRoaW4gdGhlIGNvZGViYXNlLiBUaGUgZ29hbCBpcyB0byBzZWUgZXhhY3RseSB3aGVyZSBhbmQgaG93IHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkLCB3aGljaCB3aWxsIHRoZW4gaWxsdW1pbmF0ZSB0aGUgZXZlbnRzIHRoYXQgdHJpZ2dlciBTTU0gZW50cnkgZnJvbSB0aGUgaG9zdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHBhdGggdGhyb3VnaCB3aGljaCB0aGUgaG9zdCBlbnRlcnMgU01NIHZpYSBLVk0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MjY4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDU6NTg6MTUuMjk0OTI2OTczWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDEzNDUzODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZW50ZXJfc21tXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3NtbS5jPTEzNj12b2lkIHByb2Nlc3Nfc21pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zbW0uYy0xNDEtXFxuYXJjaC94ODYva3ZtL3NtbS5jOjE0MjpzdGF0aWMgdTMyIGVudGVyX3NtbV9nZXRfc2VnbWVudF9mbGFncyhzdHJ1Y3Qga3ZtX3NlZ21lbnQgKnNlZylcXG5hcmNoL3g4Ni9rdm0vc21tLmMtMTQzLXtcXG4tLVxcbmFyY2gveDg2L2t2bS9zbW0uYy0xNTUtXFxuYXJjaC94ODYva3ZtL3NtbS5jOjE1NjpzdGF0aWMgdm9pZCBlbnRlcl9zbW1fc2F2ZV9zZWdfMzIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbmFyY2gveDg2L2t2bS9zbW0uYy0xNTctXFx0XFx0XFx0XFx0ICBzdHJ1Y3Qga3ZtX3NtbV9zZWdfc3RhdGVfMzIgKnN0YXRlLFxcbi0tXFxuYXJjaC94ODYva3ZtL3NtbS5jLTE2NS1cXHRzdGF0ZS1cXHUwMDNlbGltaXQgPSBzZWcubGltaXQ7XFxuYXJjaC94ODYva3ZtL3NtbS5jOjE2NjpcXHRzdGF0ZS1cXHUwMDNlZmxhZ3MgPSBlbnRlcl9zbW1fZ2V0X3NlZ21lbnRfZmxhZ3MoXFx1MDAyNnNlZyk7XFxuYXJjaC94ODYva3ZtL3NtbS5jLTE2Ny19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc21tLmMtMTY5LSNpZmRlZiBDT05GSUdfWDg2XzY0XFxuYXJjaC94ODYva3ZtL3NtbS5jOjE3MDpzdGF0aWMgdm9pZCBlbnRlcl9zbW1fc2F2ZV9zZWdfNjQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbmFyY2gveDg2L2t2bS9zbW0uYy0xNzEtXFx0XFx0XFx0XFx0ICBzdHJ1Y3Qga3ZtX3NtbV9zZWdfc3RhdGVfNjQgKnN0YXRlLFxcbi0tXFxuYXJjaC94ODYva3ZtL3NtbS5jLTE3Ny1cXHRzdGF0ZS1cXHUwMDNlc2VsZWN0b3IgPSBzZWcuc2VsZWN0b3I7XFxuYXJjaC94ODYva3ZtL3NtbS5jOjE3ODpcXHRzdGF0ZS1cXHUwMDNlYXR0cmlidXRlcyA9IGVudGVyX3NtbV9nZXRfc2VnbWVudF9mbGFncyhcXHUwMDI2c2VnKSBcXHUwMDNlXFx1MDAzZSA4O1xcbmFyY2gveDg2L2t2bS9zbW0uYy0xNzktXFx0c3RhdGUtXFx1MDAzZWxpbWl0ID0gc2VnLmxpbWl0O1xcbi0tXFxuYXJjaC94ODYva3ZtL3NtbS5jLTE4My1cXG5hcmNoL3g4Ni9rdm0vc21tLmM6MTg0OnN0YXRpYyB2b2lkIGVudGVyX3NtbV9zYXZlX3N0YXRlXzMyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG5hcmNoL3g4Ni9rdm0vc21tLmMtMTg1LVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qga3ZtX3NtcmFtX3N0YXRlXzMyICpzbXJhbSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zbW0uYy0yMDAtXFxuYXJjaC94ODYva3ZtL3NtbS5jOjIwMTpcXHRlbnRlcl9zbW1fc2F2ZV9zZWdfMzIodmNwdSwgXFx1MDAyNnNtcmFtLVxcdTAwM2V0ciwgXFx1MDAyNnNtcmFtLVxcdTAwM2V0cl9zZWwsIFZDUFVfU1JFR19UUik7XFxuYXJjaC94ODYva3ZtL3NtbS5jOjIwMjpcXHRlbnRlcl9zbW1fc2F2ZV9zZWdfMzIodmNwdSwgXFx1MDAyNnNtcmFtLVxcdTAwM2VsZHRyLCBcXHUwMDI2c21yYW0tXFx1MDAzZWxkdHJfc2VsLCBWQ1BVX1NSRUdfTERUUik7XFxuYXJjaC94ODYva3ZtL3NtbS5jLTIwMy1cXG4tLVxcbmFyY2gveDg2L2t2bS9zbW0uYy0yMTEtXFxuYXJjaC94ODYva3ZtL3NtbS5jOjIxMjpcXHRlbnRlcl9zbW1fc2F2ZV9zZWdfMzIodmNwdSwgXFx1MDAyNnNtcmFtLVxcdTAwM2VlcywgXFx1MDAyNnNtcmFtLVxcdTAwM2Vlc19zZWwsIFZDUFVfU1JFR19FUyk7XFxuYXJjaC94ODYva3ZtL3NtbS5jOjIxMzpcXHRlbnRlcl9zbW1fc2F2ZV9zZWdfMzIodmNwdSwgXFx1MDAyNnNtcmFtLVxcdTAwM2VjcywgXFx1MDAyNnNtcmFtLVxcdTAwM2Vjc19zZWwsIFZDUFVfU1JFR19DUyk7XFxuYXJjaC94ODYva3ZtL3NtbS5jOjIxNDpcXHRlbnRlcl9zbW1fc2F2ZV9zZWdfMzIodmNwdSwgXFx1MDAyNnNtcmFtLVxcdTAwM2VzcywgXFx1MDAyNnNtcmFtLVxcdTAwM2Vzc19zZWwsIFZDUFVfU1JFR19TUyk7XFxuYXJjaC94ODYva3ZtL3NtbS5jLTIxNS1cXG5hcmNoL3g4Ni9rdm0vc21tLmM6MjE2OlxcdGVudGVyX3NtbV9zYXZlX3NlZ18zMih2Y3B1LCBcXHUwMDI2c21yYW0tXFx1MDAzZWRzLCBcXHUwMDI2c21yYW0tXFx1MDAzZWRzX3NlbCwgVkNQVV9TUkVHX0RTKTtcXG5hcmNoL3g4Ni9rdm0vc21tLmM6MjE3OlxcdGVudGVyX3NtbV9zYXZlX3NlZ18zMih2Y3B1LCBcXHUwMDI2c21yYW0tXFx1MDAzZWZzLCBcXHUwMDI2c21yYW0tXFx1MDAzZWZzX3NlbCwgVkNQVV9TUkVHX0ZTKTtcXG5hcmNoL3g4Ni9rdm0vc21tLmM6MjE4OlxcdGVudGVyX3NtbV9zYXZlX3NlZ18zMih2Y3B1LCBcXHUwMDI2c21yYW0tXFx1MDAzZWdzLCBcXHUwMDI2c21yYW0tXFx1MDAzZWdzX3NlbCwgVkNQVV9TUkVHX0dTKTtcXG5hcmNoL3g4Ni9rdm0vc21tLmMtMjE5LVxcbi0tXFxuYXJjaC94ODYva3ZtL3NtbS5jLTIyNy0jaWZkZWYgQ09ORklHX1g4Nl82NFxcbmFyY2gveDg2L2t2bS9zbW0uYzoyMjg6c3RhdGljIHZvaWQgZW50ZXJfc21tX3NhdmVfc3RhdGVfNjQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbmFyY2gveDg2L2t2bS9zbW0uYy0yMjktXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBrdm1fc21yYW1fc3RhdGVfNjQgKnNtcmFtKVxcbi0tXFxuYXJjaC94ODYva3ZtL3NtbS5jLTI1MS1cXG5hcmNoL3g4Ni9rdm0vc21tLmM6MjUyOlxcdGVudGVyX3NtbV9zYXZlX3NlZ182NCh2Y3B1LCBcXHUwMDI2c21yYW0tXFx1MDAzZXRyLCBWQ1BVX1NSRUdfVFIpO1xcbmFyY2gveDg2L2t2bS9zbW0uYy0yNTMtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc21tLmMtMjU3LVxcbmFyY2gveDg2L2t2bS9zbW0uYzoyNTg6XFx0ZW50ZXJfc21tX3NhdmVfc2VnXzY0KHZjcHUsIFxcdTAwMjZzbXJhbS1cXHUwMDNlbGR0ciwgVkNQVV9TUkVHX0xEVFIpO1xcbmFyY2gveDg2L2t2bS9zbW0uYy0yNTktXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc21tLmMtMjYzLVxcbmFyY2gveDg2L2t2bS9zbW0uYzoyNjQ6XFx0ZW50ZXJfc21tX3NhdmVfc2VnXzY0KHZjcHUsIFxcdTAwMjZzbXJhbS1cXHUwMDNlZXMsIFZDUFVfU1JFR19FUyk7XFxuYXJjaC94ODYva3ZtL3NtbS5jOjI2NTpcXHRlbnRlcl9zbW1fc2F2ZV9zZWdfNjQodmNwdSwgXFx1MDAyNnNtcmFtLVxcdTAwM2VjcywgVkNQVV9TUkVHX0NTKTtcXG5hcmNoL3g4Ni9rdm0vc21tLmM6MjY2OlxcdGVudGVyX3NtbV9zYXZlX3NlZ182NCh2Y3B1LCBcXHUwMDI2c21yYW0tXFx1MDAzZXNzLCBWQ1BVX1NSRUdfU1MpO1xcbmFyY2gveDg2L2t2bS9zbW0uYzoyNjc6XFx0ZW50ZXJfc21tX3NhdmVfc2VnXzY0KHZjcHUsIFxcdTAwMjZzbXJhbS1cXHUwMDNlZHMsIFZDUFVfU1JFR19EUyk7XFxuYXJjaC94ODYva3ZtL3NtbS5jOjI2ODpcXHRlbnRlcl9zbW1fc2F2ZV9zZWdfNjQodmNwdSwgXFx1MDAyNnNtcmFtLVxcdTAwM2VmcywgVkNQVV9TUkVHX0ZTKTtcXG5hcmNoL3g4Ni9rdm0vc21tLmM6MjY5OlxcdGVudGVyX3NtbV9zYXZlX3NlZ182NCh2Y3B1LCBcXHUwMDI2c21yYW0tXFx1MDAzZWdzLCBWQ1BVX1NSRUdfR1MpO1xcbmFyY2gveDg2L2t2bS9zbW0uYy0yNzAtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc21tLmMtMjc4LVxcbmFyY2gveDg2L2t2bS9zbW0uYzoyNzk6dm9pZCBlbnRlcl9zbW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS9zbW0uYy0yODAte1xcbi0tXFxuYXJjaC94ODYva3ZtL3NtbS5jLTI5MS1cXHRpZiAoZ3Vlc3RfY3B1X2NhcF9oYXModmNwdSwgWDg2X0ZFQVRVUkVfTE0pKVxcbmFyY2gveDg2L2t2bS9zbW0uYzoyOTI6XFx0XFx0ZW50ZXJfc21tX3NhdmVfc3RhdGVfNjQodmNwdSwgXFx1MDAyNnNtcmFtLnNtcmFtNjQpO1xcbmFyY2gveDg2L2t2bS9zbW0uYy0yOTMtXFx0ZWxzZVxcbmFyY2gveDg2L2t2bS9zbW0uYy0yOTQtI2VuZGlmXFxuYXJjaC94ODYva3ZtL3NtbS5jOjI5NTpcXHRcXHRlbnRlcl9zbW1fc2F2ZV9zdGF0ZV8zMih2Y3B1LCBcXHUwMDI2c21yYW0uc21yYW0zMik7XFxuYXJjaC94ODYva3ZtL3NtbS5jLTI5Ni1cXG5hcmNoL3g4Ni9rdm0vc21tLmMtMjk3LVxcdC8qXFxuYXJjaC94ODYva3ZtL3NtbS5jOjI5ODpcXHQgKiBHaXZlIGVudGVyX3NtbSgpIGEgY2hhbmNlIHRvIG1ha2UgSVNBLXNwZWNpZmljIGNoYW5nZXMgdG8gdGhlIHZDUFVcXG5hcmNoL3g4Ni9rdm0vc21tLmMtMjk5LVxcdCAqIHN0YXRlIChlLmcuIGxlYXZlIGd1ZXN0IG1vZGUpIGFmdGVyIHdlJ3ZlIHNhdmVkIHRoZSBzdGF0ZSBpbnRvIHRoZVxcbi0tXFxuYXJjaC94ODYva3ZtL3NtbS5jLTMwNC1cXHQgKi9cXG5hcmNoL3g4Ni9rdm0vc21tLmM6MzA1OlxcdGlmIChrdm1feDg2X2NhbGwoZW50ZXJfc21tKSh2Y3B1LCBcXHUwMDI2c21yYW0pKVxcbmFyY2gveDg2L2t2bS9zbW0uYy0zMDYtXFx0XFx0Z290byBlcnJvcjtcXG4tLVxcbmFyY2gveDg2L2t2bS9zbW0uaD0xNTc9dm9pZCBrdm1fc21tX2NoYW5nZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGluX3NtbSk7XFxuYXJjaC94ODYva3ZtL3NtbS5oOjE1ODp2b2lkIGVudGVyX3NtbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbmFyY2gveDg2L2t2bS9zbW0uaC0xNTktaW50IGVtdWxhdG9yX2xlYXZlX3NtbShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTQ5NzE9c3RhdGljIGludCBzdm1fc21pX2FsbG93ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGZvcl9pbmplY3Rpb24pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTQ5ODYtXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo0OTg3OnN0YXRpYyBpbnQgc3ZtX2VudGVyX3NtbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuaW9uIGt2bV9zbXJhbSAqc21yYW0pXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy00OTg4LXtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9NTAzMz1zdGF0aWMgaW50IHN2bV9sZWF2ZV9zbW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBjb25zdCB1bmlvbiBrdm1fc21yYW0gKnNtcmFtKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01MDY1LVxcdCAqIFJlc3RvcmUgTDEgaG9zdCBzdGF0ZSBmcm9tIEwxIEhTQVZFIGFyZWEgYXMgVk1DQjAxIHdhc1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6NTA2NjpcXHQgKiB1c2VkIGR1cmluZyBTTU0gKHNlZSBzdm1fZW50ZXJfc21tKCkpXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01MDY3LVxcdCAqL1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz01MzAyPXN0cnVjdCBrdm1feDg2X29wcyBzdm1feDg2X29wcyBfX2luaXRkYXRhID0ge1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01NDEyLVxcdC5zbWlfYWxsb3dlZCA9IHN2bV9zbWlfYWxsb3dlZCxcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjU0MTM6XFx0LmVudGVyX3NtbSA9IHN2bV9lbnRlcl9zbW0sXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01NDE0LVxcdC5sZWF2ZV9zbW0gPSBzdm1fbGVhdmVfc21tLFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9MjE5PXN0YXRpYyBpbnQgdnRfc21pX2FsbG93ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGZvcl9pbmplY3Rpb24pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0yMjYtXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MjI3OnN0YXRpYyBpbnQgdnRfZW50ZXJfc21tKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5pb24ga3ZtX3NtcmFtICpzbXJhbSlcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0yMjgte1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMjMxLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjIzMjpcXHRyZXR1cm4gdm14X2VudGVyX3NtbSh2Y3B1LCBzbXJhbSk7XFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMjMzLX1cXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTg4MD1zdHJ1Y3Qga3ZtX3g4Nl9vcHMgdnRfeDg2X29wcyBfX2luaXRkYXRhID0ge1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMTAwOS1cXHQuc21pX2FsbG93ZWQgPSB2dF9vcChzbWlfYWxsb3dlZCksXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MTAxMDpcXHQuZW50ZXJfc21tID0gdnRfb3AoZW50ZXJfc21tKSxcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xMDExLVxcdC5sZWF2ZV9zbW0gPSB2dF9vcChsZWF2ZV9zbW0pLFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYz04NDA4PWludCB2bXhfc21pX2FsbG93ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGZvcl9pbmplY3Rpb24pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTg0MTUtXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYzo4NDE2OmludCB2bXhfZW50ZXJfc21tKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5pb24ga3ZtX3NtcmFtICpzbXJhbSlcXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTg0MTcte1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmg9MzY9aW50IHZteF9zbWlfYWxsb3dlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgZm9yX2luamVjdGlvbik7XFxuYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmg6Mzc6aW50IHZteF9lbnRlcl9zbW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bmlvbiBrdm1fc21yYW0gKnNtcmFtKTtcXG5hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaC0zOC1pbnQgdm14X2xlYXZlX3NtbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGNvbnN0IHVuaW9uIGt2bV9zbXJhbSAqc21yYW0pO1xcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTc1NjA9c3RhdGljIGludCBrdm1fY2hlY2tfYW5kX2luamVjdF9ldmVudHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTc2OTUtXFx0XFx0XFx0Kyt2Y3B1LVxcdTAwM2VhcmNoLnNtaV9jb3VudDtcXG5hcmNoL3g4Ni9rdm0veDg2LmM6NzY5NjpcXHRcXHRcXHRlbnRlcl9zbW0odmNwdSk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTc2OTctXFx0XFx0XFx0Y2FuX2luamVjdCA9IGZhbHNlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwNTo1ODoxNS40MzYyNzc2MjlaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA2NTYwMDcxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipTTU0gRm9jdXMgUG9pbnRzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRvIGVmZmVjdGl2ZWx5IHRyYWNlIHRoZSBTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIChTTU0pIGVudHJ5IGFuZCBleGl0IHBvaW50cy4gIGBrdm1fY2hlY2tfYW5kX2luamVjdF9ldmVudHNgIGNhbGxzIGBlbnRlcl9zbW1gLCBhbmQgdGhlIGVtdWxhdG9yIGl0c2VsZiB1c2VzIGBlbXVsYXRvcl9sZWF2ZV9zbW1gLiBUaGF0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2ggdG8gdXNlIGFzIGEgc3RhcnRpbmcgcG9pbnQuXG5cbkJ1dCBob2xkIG9uLCB0aGUgcGF0Y2ggbW9kaWZpZXMgYHN2bV9lbnRlcl9zbW1gIGFuZCBgc3ZtX2xlYXZlX3NtbWAuICBUaGF0J3MgcG90ZW50aWFsbHkgZXZlbiBiZXR0ZXIsIGFzc3VtaW5nIHRoZXkncmUgbm90IGlubGluZWQsIHNpbmNlIHRoZXkncmUgc3BlY2lmaWNhbGx5IHRpZWQgdG8gdGhlIEFNRCBTZWN1cmUgVmlydHVhbCBNYWNoaW5lIChTVk0pIGltcGxlbWVudGF0aW9uLiBUaGUgcXVlc3Rpb24gaXMsIGFyZSB0aGV5IHN0YXRpYyBhbmQgaW5saW5lZD8gTGV0IG1lIHRoaW5rLi4uIHdhaXQsIEkgcmVtZW1iZXIgbm93ISBUaGV5J3JlIGFzc2lnbmVkIHRvIGZ1bmN0aW9uIHBvaW50ZXJzIHdpdGhpbiBgc3ZtX3g4Nl9vcHNgLiBTaW5jZSB0aGV5J3JlIGFzc2lnbmVkIHRvIGZ1bmN0aW9uIHBvaW50ZXJzLCB0aGV5IGRlZmluaXRlbHkgKmFyZW4ndCogaW5saW5lZC4gUGVyZmVjdC5cblxuVGhlcmVmb3JlLCBgc3ZtX2VudGVyX3NtbWAgYW5kIGBzdm1fbGVhdmVfc21tYCBhcmUgdGhlIGlkZWFsIGZvY3VzIHN5bWJvbHMgZm9yIHRoaXMgYW5hbHlzaXMuXG5cbk5vdywgbGV0J3MgcGl2b3QgYW5kIHRha2UgYSBsb29rIGF0IGBuZXN0ZWRfdm14X3ByZXBhcmVfbXNyX2JpdG1hcGAgYW5kIHNlZSB3aGF0IGVsc2Ugd2UgY2FuIHVuY292ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMTg5LCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDA1OjU4OjIwLjUwMTg4MTE3N1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIwNjI3NTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5lc3RlZF92bXhfcHJlcGFyZV9tc3JfYml0bWFwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz02OTQ9c3RhdGljIHZvaWQgbmVzdGVkX3ZteF9tZXJnZV9wbXVfbXNyX2JpdG1hcHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy03MjUtICovXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo3MjY6c3RhdGljIGlubGluZSBib29sIG5lc3RlZF92bXhfcHJlcGFyZV9tc3JfYml0bWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTcyNy1cXHRcXHRcXHRcXHRcXHRcXHQgc3RydWN0IHZtY3MxMiAqdm1jczEyKVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz0zNDM1PXN0YXRpYyBib29sIG5lc3RlZF9nZXRfdm1jczEyX3BhZ2VzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzUxNC1cXHR9XFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzozNTE1OlxcdGlmIChuZXN0ZWRfdm14X3ByZXBhcmVfbXNyX2JpdG1hcCh2Y3B1LCB2bWNzMTIpKVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzUxNi1cXHRcXHRleGVjX2NvbnRyb2xzX3NldGJpdCh2bXgsIENQVV9CQVNFRF9VU0VfTVNSX0JJVE1BUFMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwNTo1ODoyMC42MjI1MTQyNTNaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUyMDkzNzg3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydCBpbiB0aGlzIGFyZWE6XG5cbioqSW5saW5pbmcgYW5kIFZNQ1MxMiBQYWdlczogQSBRdWljayBDaGVjayoqXG5cblJpZ2h0LCBsZXQncyBzZWUsIGl0J3MgZGVjbGFyZWQgYHN0YXRpYyBpbmxpbmVgLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgZnVuY3Rpb24sIHdoYXRldmVyIGl0IGlzLCBpcyBnb2luZyB0byBiZSBpbmxpbmVkIGRpcmVjdGx5IGludG8gYG5lc3RlZF9nZXRfdm1jczEyX3BhZ2VzYC4gVGhhdCdzIHRoZSBmaXJzdCB0aGluZyBJIG5vdGUuIEl0IG1ha2VzIHNlbnNlLCBnaXZlbiB0aGUgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyBvZiBjYWxsaW5nIGEgZnVuY3Rpb24sIGVzcGVjaWFsbHkgaW4gYSBjcml0aWNhbCBwYXRoLiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoYXQgYG5lc3RlZF9nZXRfdm1jczEyX3BhZ2VzYCAqYWN0dWFsbHkqIGRvZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHdoZXJlIHRoaXMgaW5saW5pbmcgaXMgaGFwcGVuaW5nLiBUaW1lIHRvIHZlcmlmeSBpdHMgb3BlcmF0aW9uLiBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBhbmQgZW5zdXJlIHRoZSBpbmxpbmluZyBvcHRpbWl6YXRpb24gaXMgaW5kZWVkIHNvdW5kIHdpdGhpbiB0aGF0IGZ1bmN0aW9uJ3Mgc2NvcGUuIExldCdzIGRpZyBpbnRvIGBuZXN0ZWRfZ2V0X3ZtY3MxMl9wYWdlc2AgdG8gY29uZmlybS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEwMDgsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwNTo1ODoyNC4xNDM0NTM3NjRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNjg3NDg1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXN0ZWRfZ2V0X3ZtY3MxMl9wYWdlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9OTAyPXN0YXRpYyBpbnQgbmVzdGVkX3ZteF9jaGVja19hcGljdl9jb250cm9scyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTkyOC1cXHQgKiB0aGUgZGVzY3JpcHRvciBhZGRyZXNzIGhhcyBiZWVuIGFscmVhZHkgY2hlY2tlZFxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6OTI5OlxcdCAqIGluIG5lc3RlZF9nZXRfdm1jczEyX3BhZ2VzLlxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtOTMwLVxcdCAqXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTI0MjQ9c3RhdGljIHZvaWQgcHJlcGFyZV92bWNzMDJfZWFybHkoc3RydWN0IHZjcHVfdm14ICp2bXgsIHN0cnVjdCBsb2FkZWRfdm1jcyAqdm1jczAxLFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0yNDc0LVxcdC8qXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzoyNDc1OlxcdCAqIFRoaXMgYml0IHdpbGwgYmUgY29tcHV0ZWQgaW4gbmVzdGVkX2dldF92bWNzMTJfcGFnZXMsIGJlY2F1c2VcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTI0NzYtXFx0ICogd2UgZG8gbm90IGhhdmUgYWNjZXNzIHRvIEwxJ3MgTVNSIGJpdG1hcCB5ZXQuICBGb3Igbm93LCBrZWVwXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTM0MDY9c3RhdGljIGJvb2wgbmVzdGVkX2dldF9ldm1jc19wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzQzNC1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjM0MzU6c3RhdGljIGJvb2wgbmVzdGVkX2dldF92bWNzMTJfcGFnZXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzQzNi17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTM1MjM9c3RhdGljIGJvb2wgdm14X2dldF9uZXN0ZWRfc3RhdGVfcGFnZXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zNTQzLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6MzU0NDpcXHRpZiAoaXNfZ3Vlc3RfbW9kZSh2Y3B1KSBcXHUwMDI2XFx1MDAyNiAhbmVzdGVkX2dldF92bWNzMTJfcGFnZXModmNwdSkpXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zNTQ1LVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9MzYyMj1lbnVtIG52bXhfdm1lbnRyeV9zdGF0dXMgbmVzdGVkX3ZteF9lbnRlcl9ub25fcm9vdF9tb2RlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzY3NC1cXHRpZiAoZnJvbV92bWVudHJ5KSB7XFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzozNjc1OlxcdFxcdGlmICh1bmxpa2VseSghbmVzdGVkX2dldF92bWNzMTJfcGFnZXModmNwdSkpKSB7XFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zNjc2LVxcdFxcdFxcdHZteF9zd2l0Y2hfdm1jcyh2Y3B1LCBcXHUwMDI2dm14LVxcdTAwM2V2bWNzMDEpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zNzA5LVxcdFxcdCAqIG5lZWQgdG8gcGVyZm9ybSBncGEgdG8gaHBhIHRyYW5zbGF0aW9uKS4gUmVxdWVzdCBhIGNhbGxcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjM3MTA6XFx0XFx0ICogdG8gbmVzdGVkX2dldF92bWNzMTJfcGFnZXMgYmVmb3JlIHRoZSBuZXh0IFZNLWVudHJ5LiAgVGhlIE1TUnNcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM3MTEtXFx0XFx0ICogaGF2ZSBhbHJlYWR5IGJlZW4gc2V0IGF0IHZtZW50cnkgdGltZSBhbmQgc2hvdWxkIG5vdCBiZSByZXNldC5cXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9Njg4OT1zdGF0aWMgaW50IHZteF9zZXRfbmVzdGVkX3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNjk5MS1cXHRcXHQgKiByZXN0b3JlZCB5ZXQuIEVWTUNTIHdpbGwgYmUgbWFwcGVkIGZyb21cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjY5OTI6XFx0XFx0ICogbmVzdGVkX2dldF92bWNzMTJfcGFnZXMoKS5cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTY5OTMtXFx0XFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDA1OjU4OjI0LjI2MDMzMjc5MVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDg0OTE3NDgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgSSBzZWUgaXQ6XG5cbioqQ29uc2lkZXJpbmcgTmVzdGVkIFZNWCBFbnRyeSBQb2ludHMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgd2UncmUgZW50ZXJpbmcgbmVzdGVkIFZNWCBhbmQgSSBzZWUgYSBjb3VwbGUgb2YgZnVuY3Rpb25zLiBgbmVzdGVkX2dldF92bWNzMTJfcGFnZXNgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBpbW1lZGlhdGVseSB0ZWxscyBtZSBpdCdzIGxpa2VseSBpbnRlcm5hbCB0byBhIHNwZWNpZmljIGNvbXBpbGF0aW9uIHVuaXQuIEkgYWxzbyBzZWUgdGhhdCBgbmVzdGVkX3ZteF9lbnRlcl9ub25fcm9vdF9tb2RlYCBpcyAqbm90KiBzdGF0aWMsIHdoaWNoIGdpdmVzIG1lIG1vcmUgb3B0aW9ucyBhcyBhIGNhbGxpbmcgcG9pbnQuIEdpdmVuIHRoYXQsIEknbSBsZWFuaW5nIHRvd2FyZHMgdXNpbmcgYG5lc3RlZF92bXhfZW50ZXJfbm9uX3Jvb3RfbW9kZWAuIFRoYXQgZmVlbHMgbGlrZSB0aGUgbW9yZSB2ZXJzYXRpbGUgb3B0aW9uLlxuXG5Ob3csIGJlZm9yZSBJIGNvbW1pdCB0byB0aGF0LCBJIG5lZWQgdG8gY2hlY2sgc29tZXRoaW5nIGVsc2UuIExldCdzIHNlZSBob3cgYF9fbmVzdGVkX3ZteF92bWV4aXRgIGlzIGRlZmluZWQsIGp1c3QgdG8gbWFrZSBzdXJlIHRoaXMgaXMgZ29pbmcgdG8gcGxheSBuaWNlbHkuIEl0IGlzIGVzc2VudGlhbCB0byBlbnN1cmUgdGhhdCB0aGUgdm1leGl0IGhhbmRsZXIgaXMgcHJvcGVybHkgY29uZmlndXJlZCB0byBkZWFsIHdpdGggbm9uLXJvb3QgbW9kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIzNDYsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwNTo1ODoyNy43NDUyNTMzMDJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMzc1NTkyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX25lc3RlZF92bXhfdm1leGl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz00OTQxPXN0YXRpYyB2b2lkIG5lc3RlZF92bXhfcmVzdG9yZV9ob3N0X3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTA1My0gKi9cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjUwNTQ6dm9pZCBfX25lc3RlZF92bXhfdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIHZtX2V4aXRfcmVhc29uLFxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTA1NS1cXHRcXHRcXHQgdTMyIGV4aXRfaW50cl9pbmZvLCB1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDU6NTg6MjcuODU5MDE0ODI5WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNjc4MDMyMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgRHluYW1pYyBOYXR1cmUgYW5kIExldmVyYWdpbmcgTmVzdGVkIFZpcnR1YWxpemF0aW9uKipcblxuUmlnaHQsIHNvIHdlJ3JlIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgbm9uLXN0YXRpYyBoZXJlLiBUaGF0IGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIGFib3V0IGR5bmFtaXNtLCBhbmQgaG93IHdlJ3JlIGdvaW5nIHRvIGFjY29tbW9kYXRlIHRoYXQuIE15IGd1dCByZWFjdGlvbiBpcyB0aGF0IHdlIG1pZ2h0IGJlIGFibGUgdG8gbGV2ZXJhZ2UgYF9fbmVzdGVkX3ZteF92bWV4aXRgLiBJdCBmZWVscyBsaWtlIHRoZSByaWdodCB0b29sIGZvciB0aGUgam9iIGdpdmVuIHRoZSBzaXR1YXRpb24uXG5cbk5vdywgYmVmb3JlIEkgZ2V0IHRvbyBmYXIgZG93biB0aGF0IHBhdGgsIEkgc2hvdWxkIHF1aWNrbHkgY2hlY2sgaW4gb24gYGt2bXBwY19wYXRjaF9kY2J6YC4gSXQncyBhIGtleSBhcmVhIHRoYXQgb2Z0ZW4gbmVlZHMgY2FyZWZ1bCBtYW5hZ2VtZW50IHdpdGggdGhpcyB0eXBlIG9mIGFwcHJvYWNoLCBhbmQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcgdGhhdCBjb3VsZCBpbnRlcmFjdCBvciBpbnRlcmZlcmUgd2l0aCB0aGlzLiBNYWtpbmcgdGhpcyBjaGVjayB1cGZyb250IHNob3VsZCBzYXZlIHNvbWUgdGltZS4gTGV0J3Mgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjgzOCwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDA1OjU4OjMxLjkyNjgyMjExNFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTIxMjg5NzA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bXBwY19wYXRjaF9kY2J6XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYz01NTA9c3RhdGljIHZvaWQga3ZtcHBjX3NldF9wdnJfcHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgcHZyKVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYy02MzktICovXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYzo2NDA6c3RhdGljIHZvaWQga3ZtcHBjX3BhdGNoX2RjYnooc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtcHBjX3B0ZSAqcHRlKVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmMtNjQxLXtcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmM9Njc3PXN0YXRpYyBpbnQga3ZtcHBjX2hhbmRsZV9wYWdlZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYy03NzgtXFx0XFx0XFx0ICghKHZjcHUtXFx1MDAzZWFyY2guaGZsYWdzIFxcdTAwMjYgQk9PSzNTX0hGTEFHX0RDQlozMikpKVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmM6Nzc5OlxcdFxcdFxcdGt2bXBwY19wYXRjaF9kY2J6KHZjcHUsIFxcdTAwMjZwdGUpO1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmMtNzgwLVxcdH0gZWxzZSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDA1OjU4OjMyLjQ0ODExNTk2WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NTEzOTI0NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIGBrdm1wcGNfaGFuZGxlX3BhZ2VmYXVsdGAqKlxuXG5Pa2F5LCBzbyBga3ZtcHBjX2hhbmRsZV9wYWdlZmF1bHRgIGlzIGEgKnN0YXRpYyogZnVuY3Rpb24uIFRoYXQgaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmssIFwiQWxyaWdodCwgbGV0J3Mgc2VlIHdoZXJlIHRoaXMgdGhpbmcgaXMgYWN0dWFsbHkgYmVpbmcgdXNlZC4gU3RhdGljIGZ1bmN0aW9ucyBhcmUgbG9jYWxpemVkLCB3aGljaCBtZWFucyBmaWd1cmluZyBvdXQgaXRzIGNhbGxlcnMgaXMgZ29pbmcgdG8gYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaXRzIG92ZXJhbGwgaW1wYWN0IGFuZCBmdW5jdGlvbmFsaXR5IHdpdGhpbiB0aGUgS1ZNL1BQQyBhcmNoaXRlY3R1cmUuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhpcyBzcGVjaWZpYyBwYWdlIGZhdWx0IGhhbmRsZXIgdG8gdW5kZXJzdGFuZCB0aGUgY2hhaW4gb2YgZXZlbnRzIHRoYXQgbGVhZCB0byBpdCBiZWluZyBpbnZva2VkLlwiIEknbSBtZW50YWxseSBmaWxpbmcgdGhpcyBhcyBhIGxvY2FsaXplZCBpbnZlc3RpZ2F0aW9uLCBmb2N1c2luZyBzb2xlbHkgb24gdGhlIGltbWVkaWF0ZSBjYWxsIGdyYXBoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzQxNywiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDA1OjU4OjM1Ljk5OTUxMTEzOVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQxNzU0Mjc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bXBwY19oYW5kbGVfcGFnZWZhdWx0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYz02NjI9c3RhdGljIGJvb2wga3ZtcHBjX3Zpc2libGVfZ3BhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhKVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYy02NzYtXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYzo2Nzc6c3RhdGljIGludCBrdm1wcGNfaGFuZGxlX3BhZ2VmYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYy02NzgtXFx0XFx0XFx0ICAgIHVsb25nIGVhZGRyLCBpbnQgdmVjKVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYz0xMTMyPWludCBrdm1wcGNfaGFuZGxlX2V4aXRfcHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgZXhpdF9ucilcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmMtMTE3Ny1cXHRcXHRcXHRpbnQgaWR4ID0gc3JjdV9yZWFkX2xvY2soXFx1MDAyNnZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlc3JjdSk7XFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYzoxMTc4OlxcdFxcdFxcdHIgPSBrdm1wcGNfaGFuZGxlX3BhZ2VmYXVsdCh2Y3B1LCBrdm1wcGNfZ2V0X3BjKHZjcHUpLCBleGl0X25yKTtcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wci5jLTExNzktXFx0XFx0XFx0c3JjdV9yZWFkX3VubG9jayhcXHUwMDI2dmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VzcmN1LCBpZHgpO1xcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYy0xMjI3LVxcdFxcdFxcdGludCBpZHggPSBzcmN1X3JlYWRfbG9jayhcXHUwMDI2dmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VzcmN1KTtcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wci5jOjEyMjg6XFx0XFx0XFx0ciA9IGt2bXBwY19oYW5kbGVfcGFnZWZhdWx0KHZjcHUsIGRhciwgZXhpdF9ucik7XFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYy0xMjI5LVxcdFxcdFxcdHNyY3VfcmVhZF91bmxvY2soXFx1MDAyNnZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlc3JjdSwgaWR4KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDU6NTg6MzYuMTQxMjcwMzc1WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU5NTAzMjMxODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBIb29rIFBvaW50cyBmb3IgVmlydHVhbGl6YXRpb24gRXhpdCBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB3ZSBjYW4gaW50ZXJjZXB0IGFuZCBoYW5kbGUgdmlydHVhbGl6YXRpb24gZXhpdHMuIGBrdm1wcGNfaGFuZGxlX2V4aXRfcHJgIGlzIGRlZmluaXRlbHkgYSBrZXkgZnVuY3Rpb24gaGVyZSwgYW5kIHRoZSBmYWN0IHRoYXQgaXQncyAqbm90KiBzdGF0aWMgaXMgdmVyeSBwcm9taXNpbmcuIFRoYXQgbWVhbnMgd2UgY2FuIHBvdGVudGlhbGx5IHJlLXB1cnBvc2Ugb3IgaG9vayBpbnRvIGl0IGRpcmVjdGx5LlxuXG5TbywgdGhlIGNlbnRyYWwgZnVuY3Rpb25zIEkndmUgaWRlbnRpZmllZCB0aGF0IHdlIG5lZWQgdG8gY29uc2lkZXIgYXJlOlxuXG4qICAgYG5lc3RlZF9zdm1fdm1ydW5gXG4qICAgYG5lc3RlZF9zdm1fdm1leGl0YFxuKiAgIGB2bWxvYWRfaW50ZXJjZXB0aW9uYFxuKiAgIGB2bXNhdmVfaW50ZXJjZXB0aW9uYFxuKiAgIGBzdm1fZW50ZXJfc21tYFxuKiAgIGBzdm1fbGVhdmVfc21tYFxuKiAgIGBuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGVgXG4qICAgYF9fbmVzdGVkX3ZteF92bWV4aXRgXG4qICAgYGt2bXBwY19oYW5kbGVfZXhpdF9wcmBcblxuTm93LCBob2xkIG9uLi4uSSBzZWUgdGhhdCBgc3ZtX2VudGVyX3NtbWAgYW5kIGBzdm1fbGVhdmVfc21tYCBhcmUgc3RhdGljLiBUaGF0J3Mgbm90IGlkZWFsIGZvciBkaXJlY3QgaG9va2luZy4gQnV0IHdhaXQsIGNhbiB3ZSBtYXliZSB1c2UgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGBlbnRlcl9zbW1gIGFuZCBgZW11bGF0b3JfbGVhdmVfc21tYCBpbnN0ZWFkPyBMZXQncyBxdWlja2x5IGRvdWJsZS1jaGVjay4uLiBZZXMsIGBlbnRlcl9zbW1gIGlzIGRlZmluaXRlbHkgbm9uLXN0YXRpYywgd2hpY2ggaXMgd2hhdCB3ZSBuZWVkLiBBbmQsIGdvb2QsIGBlbXVsYXRvcl9sZWF2ZV9zbW1gIGlzIGFsc28gbm9uLXN0YXRpYy4gRXhjZWxsZW50LiBMZXQncyBkaWcgaW50byBgZW11bGF0b3JfbGVhdmVfc21tYCBpbiBhIGJpdCBtb3JlIGRldGFpbCB0byBlbnN1cmUgaXQgcHJvdmlkZXMgdGhlIG5lY2Vzc2FyeSBmdW5jdGlvbmFsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDEwNiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwNTo1ODo0Mi4wOTE1OTY0MDdaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNzgzNDIyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJlbXVsYXRvcl9sZWF2ZV9zbW1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vc21tLmM9NTE2PXN0YXRpYyBpbnQgcnNtX2xvYWRfc3RhdGVfNjQoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc21tLmMtNTcyLVxcbmFyY2gveDg2L2t2bS9zbW0uYzo1NzM6aW50IGVtdWxhdG9yX2xlYXZlX3NtbShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dClcXG5hcmNoL3g4Ni9rdm0vc21tLmMtNTc0LXtcXG4tLVxcbmFyY2gveDg2L2t2bS9zbW0uaD0xNTg9dm9pZCBlbnRlcl9zbW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vc21tLmg6MTU5OmludCBlbXVsYXRvcl9sZWF2ZV9zbW0oc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpO1xcbmFyY2gveDg2L2t2bS9zbW0uaC0xNjAtdm9pZCBwcm9jZXNzX3NtaShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3NtbS5oPTE2Mz1zdGF0aWMgaW5saW5lIGJvb2wgaXNfc21tKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkgeyByZXR1cm4gZmFsc2U7IH1cXG4tLVxcbmFyY2gveDg2L2t2bS9zbW0uaC0xNjUtLypcXG5hcmNoL3g4Ni9rdm0vc21tLmg6MTY2OiAqIGVtdWxhdG9yX2xlYXZlX3NtbSBpcyB1c2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlciwgc28gdGhlXFxuYXJjaC94ODYva3ZtL3NtbS5oLTE2Ny0gKiBzdHViIGlzIGRlZmluZWQgaW4geDg2LmMuXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9NTc1ND1zdGF0aWMgYm9vbCBlbXVsYXRvcl9pc19zbW0oc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtNTc1OS0jaWZuZGVmIENPTkZJR19LVk1fU01NXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjU3NjA6c3RhdGljIGludCBlbXVsYXRvcl9sZWF2ZV9zbW0oc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTU3NjEte1xcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTU4MTQ9c3RhdGljIGNvbnN0IHN0cnVjdCB4ODZfZW11bGF0ZV9vcHMgZW11bGF0ZV9vcHMgPSB7XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtNTg1Ni1cXHQuaXNfc21tICAgICAgICAgICAgICA9IGVtdWxhdG9yX2lzX3NtbSxcXG5hcmNoL3g4Ni9rdm0veDg2LmM6NTg1NzpcXHQubGVhdmVfc21tICAgICAgICAgICA9IGVtdWxhdG9yX2xlYXZlX3NtbSxcXG5hcmNoL3g4Ni9rdm0veDg2LmMtNTg1OC1cXHQudHJpcGxlX2ZhdWx0ICAgICAgICA9IGVtdWxhdG9yX3RyaXBsZV9mYXVsdCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDU6NTg6NDIuMjA5NDM3MzU0WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4NDQ0MjA3NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVmaW5pbmcgdGhlIEZvY3VzOiBIeXBlcnZpc29yIEVudHJ5L0V4aXQgUG9pbnRzKipcblxuT2theSwgc28gYGVtdWxhdG9yX2xlYXZlX3NtbWAgaXMgZGVmaW5pdGVseSBub3Qgc3RhdGljLCB3aGljaCBpcyBnb29kIHRvIGtub3cuIE5vdywgbGV0J3MgcmVmaW5lIHRoaXMgbGlzdCBvZiBrZXkgZnVuY3Rpb25zIHdlJ3JlIGZvY3VzaW5nIG9uLiBJJ20gdGhpbmtpbmcgd2UgbmVlZCB0byBjb25jZW50cmF0ZSBvbiB0aGUgcG9pbnRzIHdoZXJlIHRoZSBoeXBlcnZpc29yIGlzIGVpdGhlciBlbnRlcmVkIG9yIGV4aXRlZC4gU28sIHJpZ2h0IG5vdywgSSdtIHRoaW5raW5nIGFib3V0IHRoZXNlIGZ1bmN0aW9uczogYG5lc3RlZF9zdm1fdm1ydW5gLCBgbmVzdGVkX3N2bV92bWV4aXRgLCBgdm1sb2FkX2ludGVyY2VwdGlvbmAsIGB2bXNhdmVfaW50ZXJjZXB0aW9uYCwgYGVudGVyX3NtbWAsIGBlbXVsYXRvcl9sZWF2ZV9zbW1gLCBgbmVzdGVkX3ZteF9lbnRlcl9ub25fcm9vdF9tb2RlYCwgYF9fbmVzdGVkX3ZteF92bWV4aXRgLCBhbmQgYGt2bXBwY19oYW5kbGVfZXhpdF9wcmAuXG5cbkJ1dCwgd2FpdCBhIG1pbnV0ZS4uLiBpcyBga3ZtcHBjX2hhbmRsZV9leGl0X3ByYCBwb3RlbnRpYWxseSB0b28gaGlnaC1sZXZlbD8gSXQncyB0aGUgY2VudHJhbCBoYW5kbGVyIGZvciAqYWxsKiBleGl0cyByZWxhdGVkIHRvIFBSIEtWTS4gSXQncyBhIGJyb2FkIGZ1bmN0aW9uLCBhbmQgSSBuZWVkIHRvIGhvbmUgaW4gb24gdGhlIGNvcmUgb3BlcmF0aW9ucy4gUGVyaGFwcyBga3ZtcHBjX2hhbmRsZV9wYWdlZmF1bHRgIHdvdWxkIGJlIGEgYmV0dGVyIGNob2ljZS4gRXZlbiBpZiBpdCdzIHN0YXRpYywgaXQncyBhIHNpemFibGUgZnVuY3Rpb24sIGFuZCB0aGVyZSdzIGEgZ29vZCBjaGFuY2UgaXQgd29uJ3QgYmUgaW5saW5lZC4gVGhhdCBjb3VsZCBtYWtlIGl0IGEgbW9yZSBtYW5hZ2VhYmxlIHRhcmdldCBmb3IgYW5hbHlzaXMuIEknbGwgbmVlZCB0byBjb25zaWRlciB0aGUgdHJhZGUtb2ZmcyBvZiB0aGUgY29tcGxleGl0eSBvZiB0aGUgZnVuY3Rpb24sIHZlcnN1cyB0aGUgdm9sdW1lIG9mIGFjdGl2aXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTM2MSwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwNTo1ODo0Ny4wNTM4NjExOTdaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNDM4MDg3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1wcGNfaGFuZGxlX3BhZ2VmYXVsdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmM9NjYyPXN0YXRpYyBib29sIGt2bXBwY192aXNpYmxlX2dwYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSlcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmMtNjc2LVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmM6Njc3OnN0YXRpYyBpbnQga3ZtcHBjX2hhbmRsZV9wYWdlZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmMtNjc4LVxcdFxcdFxcdCAgICB1bG9uZyBlYWRkciwgaW50IHZlYylcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmM9MTEzMj1pbnQga3ZtcHBjX2hhbmRsZV9leGl0X3ByKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgaW50IGV4aXRfbnIpXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wci5jLTExNzctXFx0XFx0XFx0aW50IGlkeCA9IHNyY3VfcmVhZF9sb2NrKFxcdTAwMjZ2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZXNyY3UpO1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmM6MTE3ODpcXHRcXHRcXHRyID0ga3ZtcHBjX2hhbmRsZV9wYWdlZmF1bHQodmNwdSwga3ZtcHBjX2dldF9wYyh2Y3B1KSwgZXhpdF9ucik7XFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYy0xMTc5LVxcdFxcdFxcdHNyY3VfcmVhZF91bmxvY2soXFx1MDAyNnZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlc3JjdSwgaWR4KTtcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmMtMTIyNy1cXHRcXHRcXHRpbnQgaWR4ID0gc3JjdV9yZWFkX2xvY2soXFx1MDAyNnZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlc3JjdSk7XFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYzoxMjI4OlxcdFxcdFxcdHIgPSBrdm1wcGNfaGFuZGxlX3BhZ2VmYXVsdCh2Y3B1LCBkYXIsIGV4aXRfbnIpO1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmMtMTIyOS1cXHRcXHRcXHRzcmN1X3JlYWRfdW5sb2NrKFxcdTAwMjZ2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZXNyY3UsIGlkeCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDA1OjU4OjQ3LjE1ODI1MDY5NFoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDY0Nzk0ODg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDpcblxuKipBbmFseXppbmcgdGhlIEtWTS9QUEMgRXhpdCBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gYGt2bXBwY19oYW5kbGVfZXhpdF9wcmAuIEkgc2VlIGl0J3MgY2FsbGVkIHR3aWNlLCB3aGljaCBpcyBhIGNsdWU7IG5vdCBhbHdheXMsIGJ1dCBvZnRlbiBzdWdnZXN0cyBpdCdzICpub3QqIGlubGluZWQuIElmIGl0IHdhcyBpbmxpbmVkLCB5b3Ugd291bGQgdGhpbmsgd2Ugd291bGRuJ3Qgc2VlIG11bHRpcGxlIGNhbGxzIHNvIGVhc2lseS5cblxuVGhpbmtpbmcgYWJvdXQgYWx0ZXJuYXRpdmVzLCBJJ20gZ29pbmcgdG8gbG9vayBhdCB1c2luZyBga3ZtcHBjX2hhbmRsZV9wYWdlZmF1bHRgIGFzIGEgcG9zc2libHkgcmVsYXRlZCBmdW5jdGlvbiBmb3IgdGhpcyBwcm9jZXNzLlxuXG5Ob3csIGxldCdzIHN3aXRjaCBnZWFycyBhIGJpdC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoZXJlIHRoZSBWQ1BVIG1hcHBpbmcgaGFwcGVucywgc28gSSdsbCBnbyBjaGVjayBvdXQgYF9fa3ZtX3ZjcHVfbWFwYC4gSSBrbm93IGl0J3MgaW4gYHZpcnQva3ZtL2t2bV9tYWluLmNgLCB3aGljaCBtYWtlcyBzZW5zZSBhcyB0aGF0J3MgZ2VuZXJhbGx5IHdoZXJlIGNvcmUgS1ZNIGZ1bmN0aW9uYWxpdHkgbGl2ZXMuIEkgd2lsbCBjaGVjayB0aGUgY29udGV4dCBzdXJyb3VuZGluZyB0aGF0IGNhbGwsIGFuZCB0aGUgcGFyYW1ldGVycyBpbnZvbHZlZCwgYXMgdGhhdCB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB3aGF0J3MgaGFwcGVuaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjM4NCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDA1OjU4OjUyLjYyMzA0OTQyWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTc3NjM3MjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19rdm1fdmNwdV9tYXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwidmlydC9rdm0va3ZtX21haW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJ2aXJ0L2t2bS9rdm1fbWFpbi5jPTMxMDg9RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKF9fZ2ZuX3RvX3BhZ2UpO1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzEwOS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjMxMTA6aW50IF9fa3ZtX3ZjcHVfbWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ2ZuX3QgZ2ZuLCBzdHJ1Y3Qga3ZtX2hvc3RfbWFwICptYXAsXFxudmlydC9rdm0va3ZtX21haW4uYy0zMTExLVxcdFxcdCAgIGJvb2wgd3JpdGFibGUpXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMxNDQtfVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6MzE0NTpFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoX19rdm1fdmNwdV9tYXApO1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzE0Ni1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDU6NTg6NTIuNzQwODE5Nzc3WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMTkyODgyMzUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIEtWTSBDaGFuZ2VzIGFuZCBSZWxldmFudCBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoZXNlIEtWTSBjaGFuZ2VzLCBmb2N1c2luZyBvbiB0aGUgaW1wbGljYXRpb25zIGFuZCBwb3RlbnRpYWwgYXJlYXMgZm9yIHRlc3RpbmcuICBUaGUgY29yZSBvZiB0aGUgbWF0dGVyIGlzIHRoZSBhZGRpdGlvbiBvZiBhIHNhZmV0eSBjaGVjayB3aXRoaW4gYF9fa3ZtX3ZjcHVfbWFwYDogYGlmIChXQVJOX09OX09OQ0UobWFwLVx1MDAzZWh2YSkpIGt2bV92Y3B1X3VubWFwKHZjcHUsIG1hcCk7YC4gIFRoaXMgbG9va3MgbGlrZSBhIGNydWNpYWwgc2FmZWd1YXJkLCBwcmV2ZW50aW5nIHBvdGVudGlhbCBpc3N1ZXMgd2l0aCB0aGUgbWVtb3J5IG1hcHBpbmcuXG5cbkkndmUgZGV0ZXJtaW5lZCB0aGF0IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBJIG5lZWQgdG8gY29uc2lkZXIgYXJlOiBgS1ZNYCwgYEtWTV9BTURgLCBgS1ZNX0lOVEVMYCwgYEtWTV9CT09LM1NfNjRfUFJgLCBgS1ZNX1NNTWAsIGFuZCBgS1ZNX0hZUEVSVmAuICBTcGVjaWZpY2FsbHksIEkgdmVyaWZpZWQgdGhhdCBgS1ZNX1NNTWAgKmlzKiBuZWVkZWQgYmVjYXVzZSBpdCBlbmFibGVzIFNNTSBlbXVsYXRpb24uIFdpdGggYSBjbG9zZXIgbG9vaywgdGhlIGNoYW5nZSBpbiBgX19uZXN0ZWRfdm14X3ZtZXhpdGAgbm93IGNhbGxzIGBrdm1fY2hlY2tfcmVxdWVzdGAgdW5jb25kaXRpb25hbGx5LiBUaGlzIGlzIGEgYnVnIGZpeCBmb3Igbm9uLUh5cGVyViBjYXNlcyB3aGVyZSB0aGUgcmVxdWVzdCB3YXMgbm90IGNsZWFyZWQuIFNvIHdoaWxlIGBLVk1fSFlQRVJWYCBpc24ndCAqc3RyaWN0bHkqIHJlcXVpcmVkIHRvIHRlc3QgdGhlIGZpeCBpdHNlbGYsIGluY2x1ZGluZyBpdCBkdXJpbmcgdGVzdGluZyB3b24ndCBodXJ0LCBzbyBJJ2xsIGtlZXAgaXQgYXMgYSBjb25maWd1cmF0aW9uIHRvIGluY2x1ZGUuXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgZnVuY3Rpb25zIHRoZW1zZWx2ZXMuIEkgaW5pdGlhbGx5IGxpc3RlZCBgX19rdm1fdmNwdV9tYXBgLCBidXQgYWZ0ZXIgYSBjbG9zZXIgZXhhbWluYXRpb24sIEkndmUgZGVjaWRlZCB0byBvbWl0IHRoaXMgb25lIGZyb20gbXkgY29yZSBmb2N1cywgYXMgaXQncyBhIHZlcnkgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbiBjYWxsZWQgYnkgYGt2bV92Y3B1X21hcGAgYW5kIGBrdm1fdmNwdV9tYXBfcmVhZG9ubHlgLiBJdCdzIHVzZWQgc28gYnJvYWRseSB0aGF0IGl0IHdpbGwgYmUgaW1wcmFjdGljYWwgdG8gZm9jdXMgb24gaXQuIEluc3RlYWQsIEknbGwgYmUgY29uY2VudHJhdGluZyBvbiB0aGVzZSBmdW5jdGlvbnM6XG5cbiogICBgbmVzdGVkX3N2bV92bXJ1bmA6IEhhbmRsZXMgdGhlIFZNUlVOIGluc3RydWN0aW9uIGluIG5lc3RlZCBTVk0uXG4qICAgYG5lc3RlZF9zdm1fdm1leGl0YDogSGFuZGxlcyBWTUVYSVQgaW4gbmVzdGVkIFNWTS5cbiogICBgdm1sb2FkX2ludGVyY2VwdGlvbmA6IEhhbmRsZXMgVk1MT0FEIGluc3RydWN0aW9uLlxuKiAgIGB2bXNhdmVfaW50ZXJjZXB0aW9uYDogSGFuZGxlcyBWTVNBVkUgaW5zdHJ1Y3Rpb24uXG4qICAgYGVudGVyX3NtbWA6IEhhbmRsZXMgU01NIGVudHJ5LlxuKiAgIGBlbXVsYXRvcl9sZWF2ZV9zbW1gOiBIYW5kbGVzIFNNTSBleGl0LlxuKiAgIGBuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGVgOiBIYW5kbGVzIFZNWCBlbnRyeS5cbiogICBgX19uZXN0ZWRfdm14X3ZtZXhpdGA6IEhhbmRsZXMgVk1YIGV4aXQuXG4qICAgYGt2bXBwY19oYW5kbGVfcGFnZWZhdWx0YDogSGFuZGxlcyBwYWdlIGZhdWx0cyBpbiBQUiBLVk0uXG5cbkdpdmVuIHRoYXQgYG5lc3RlZF92bXhfcHJlcGFyZV9tc3JfYml0bWFwYCBpcyBpbmxpbmVkIGFuZCByZWxldmFudCBmdW5jdGlvbnMgaW5jbHVkZSBgdm14X2dldF9uZXN0ZWRfc3RhdGVfcGFnZXNgIHdoaWNoIGlzIGNhbGxlZCBieSBgdm14X3NldF9uZXN0ZWRfc3RhdGVgLCBpdCBtYWtlcyBzZW5zZSB0byBpbmNsdWRlIGB2bXhfc2V0X25lc3RlZF9zdGF0ZWAgYXMgYSBmb2N1cyBmdW5jdGlvbi5cblxuU28sIGluIHN1bW1hcnksIHRoZSBrZXkgYXJlYXMgdG8gY29uY2VudHJhdGUgb24gZm9yIHRlc3RpbmcgYXJlIHRoZXNlIGZ1bmN0aW9ucywgd2l0aCB0aGVzZSBjb25maWd1cmF0aW9ucywgdG8gdGhvcm91Z2hseSB2YWxpZGF0ZSB0aGUgc2FmZXR5IGNoZWNrIGFuZCBpdHMgaW1wYWN0IG9uIHRoZSBoeXBlcnZpc29yLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjkzOCwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkwNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwNTo1OTowMi45MzM3MDQ4OTlaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNzMzNTk3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2bXhfc2V0X25lc3RlZF9zdGF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9Njg2Nz1pbnQgbmVzdGVkX3ZteF9jaGVja19yZXN0b3JlZF92bWNzMTIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02ODg4LVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6Njg4OTpzdGF0aWMgaW50IHZteF9zZXRfbmVzdGVkX3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTY4OTAtXFx0XFx0XFx0XFx0c3RydWN0IGt2bV9uZXN0ZWRfc3RhdGUgX191c2VyICp1c2VyX2t2bV9uZXN0ZWRfc3RhdGUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTc0NzU9c3RydWN0IGt2bV94ODZfbmVzdGVkX29wcyB2bXhfbmVzdGVkX29wcyBfX2luaXRkYXRhID0ge1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy03NDgyLVxcdC5nZXRfc3RhdGUgPSB2bXhfZ2V0X25lc3RlZF9zdGF0ZSxcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjc0ODM6XFx0LnNldF9zdGF0ZSA9IHZteF9zZXRfbmVzdGVkX3N0YXRlLFxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNzQ4NC1cXHQuZ2V0X25lc3RlZF9zdGF0ZV9wYWdlcyA9IHZteF9nZXRfbmVzdGVkX3N0YXRlX3BhZ2VzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwNTo1OTowMy4wNDEwNDcwOTZaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA0Nzg5MzM3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvZGUsIGJyZWFraW5nIGl0IGRvd24gaW4gbXkgb3duIG1lbnRhbCBtb2RlbDpcblxuKipEaWdlc3RpbmcgdGhlIE5lc3RlZCBTdGF0ZSBNZWNoYW5pc20qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgbmVzdGVkIHZpcnR1YWxpemF0aW9uIHN0YXRlIGlzIG1hbmFnZWQgd2l0aGluIEtWTSwgYW5kIEkndmUgdHJhY2VkIGEgYml0IG9mIHRoZSBjb2RlLiAgYHZteF9zZXRfbmVzdGVkX3N0YXRlYCBpcyBhIHN0YXRpY2FsbHkgZGVmaW5lZCBmdW5jdGlvbi4gQnV0IHdoYXQncyBpbnRlcmVzdGluZyBpcyB0aGF0IGl0J3MgYmVpbmcgKmFzc2lnbmVkKiB0byBga3ZtX3g4Nl9uZXN0ZWRfb3BzLnNldF9zdGF0ZWAuIFRoYXQgc3VnZ2VzdHMgYHZteF9zZXRfbmVzdGVkX3N0YXRlYCBpcyB0aGUgY29uY3JldGUgaW1wbGVtZW50YXRpb24uIFRoZSBhYnN0cmFjdGlvbiB3b3VsZCBiZSB3aXRoaW4gYGt2bV94ODZfbmVzdGVkX29wc2AsIHdoaWxlIHRoZSB1bmRlcmx5aW5nIG9wZXJhdGlvbiBiZWxvbmdzIHRvIFZNWCwgYXMgaXRzIG5hbWUgc3VnZ2VzdHMuXG5cbk5vdywgSSBzZWUgdGhlIGNhbGwgY2hhaW4uIGB2bXhfc2V0X25lc3RlZF9zdGF0ZWAgaXNuJ3QgY2FsbGVkIGRpcmVjdGx5LCBpdCdzIGNhbGxlZCB0aHJvdWdoIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9uZXN0ZWRfc3RhdGVgLiBCaW5nbyEgYGt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X25lc3RlZF9zdGF0ZWAgaXMgbXkgcHJpbWFyeSBlbnRyeSBwb2ludCwgdGhlIHdheSB0byBzZXQgdGhlIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBzdGF0ZS4gIFRoYXQncyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQgZGlnZ2luZyB0byB1bmRlcnN0YW5kICpob3cqIG5lc3RlZCBzdGF0ZXMgYXJlIGJlaW5nIG1hbmFnZWQuIEZyb20gdGhlcmUsIEkgY2FuIGludmVzdGlnYXRlIHRoZSBga3ZtX3g4Nl9uZXN0ZWRfb3BzYCBzdHJ1Y3R1cmUsIGFuZCBmaW5hbGx5IGB2bXhfc2V0X25lc3RlZF9zdGF0ZWAgaXRzZWxmLiBUaGF0IGdpdmVzIG1lIHRoZSBiaWcgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg4NzgsIk91dHB1dFRva2VucyI6NDksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwNTo1OTowNy4wODg5NDM2NzJaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzMzc0Mzk4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9uZXN0ZWRfc3RhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL3g4Ni5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwNTo1OTowNy4xNzIzMzM2WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNjI1MTY4OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkRpc3NlY3RpbmcgdGhlIEtWTSBOZXN0ZWQgU3RhdGUgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyB0aGUgZnVuY3Rpb24gbmFtZSBpcyBga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfbmVzdGVkX3N0YXRlYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byB0aGUgYHNldF9uZXN0ZWRfc3RhdGVgIGZ1bmN0aW9uIHdpdGhpbiB0aGUgeDg2IGFyY2hpdGVjdHVyZSBjb2RlLCBzcGVjaWZpY2FsbHkgaW4gYGFyY2gveDg2L2t2bS94ODYuY2AuIFRoYXQncyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBjb3JlIGxvZ2ljIGZvciBzZXR0aW5nIHRoZSBuZXN0ZWQgc3RhdGUgd2l0aGluIGEgS1ZNIGNvbnRleHQsIGxpa2VseSBoYW5kbGluZyB0aGUgaW50cmljYWNpZXMgb2YgaGFyZHdhcmUgdmlydHVhbGl6YXRpb24gZXh0ZW5zaW9ucyBhbmQgdGhlaXIgY29uZmlndXJhdGlvbi4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGRpZyB1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjkzMjIsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwNTo1OToxMC4zMzQ4NTMyMloiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTkyMzU1NjcsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNldF9uZXN0ZWRfc3RhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL3g4Ni5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwNTo1OToxMC40MzQwOTYyMzdaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDcwMjIzNjkwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipOZXN0ZWQgVmlydHVhbGl6YXRpb24gRGl2ZTogS1ZNX1NFVF9ORVNURURfU1RBVEUgSW52ZXN0aWdhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGludG8gdGhlIGludHJpY2FjaWVzIG9mIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiB3aXRoaW4gS1ZNLCBhbmQgbXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBtZWNoYW5pc20gdG8gc2V0IHRoZSBuZXN0ZWQgc3RhdGUuIEknbSB0aGlua2luZywgXCJXaGVyZSB3b3VsZCB0aGlzIGNydWNpYWwgYml0IG9mIGZ1bmN0aW9uYWxpdHkgYmUgaGFuZGxlZD9cIiBOYXR1cmFsbHksIGdpdmVuIHRoZSBhcmNoaXRlY3R1cmUsIGBhcmNoL3g4Ni9rdm0veDg2LmNgIGZlZWxzIGxpa2UgdGhlIG1vc3QgbG9naWNhbCBzdGFydGluZyBwb2ludC4gSSB3YW50IHRvIHplcm8gaW4gb24gYEtWTV9TRVRfTkVTVEVEX1NUQVRFYC4gVGhpcyBtYWNybyBvciBmdW5jdGlvbiBpcyBsaWtlbHkgdGhlIGtleSB0byBjb250cm9sbGluZyB0aGUgbmVzdGVkIGd1ZXN0IGV4ZWN1dGlvbiBlbnZpcm9ubWVudCBmcm9tIHRoZSBob3N0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IgdGhvcm91Z2hseSDigJMgaG93IGl0J3MgaW52b2tlZCwgd2hhdCBkYXRhIGl0IG9wZXJhdGVzIG9uLCBhbmQsIG1vc3QgY3JpdGljYWxseSwgaG93IGl0IGludGVncmF0ZXMgd2l0aCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSB2aXJ0dWFsaXphdGlvbiBmZWF0dXJlcywgcGFydGljdWxhcmx5IHRoZSBleHRlbmRlZCBwYWdlIHRhYmxlcyAoRVBUKSBhbmQgdmlydHVhbCBtYWNoaW5lIGNvbnRyb2wgc3RydWN0dXJlcyAoVk1DUykuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB3ZSBhcmUgZXhwb3NpbmcgYW5kIGNvbmZpZ3VyaW5nIHRoZXNlIG5lc3RlZCBmZWF0dXJlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk1NjAsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwNTo1OToxNS4xMzYzMzYxMjVaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNjY0NTM3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJLVk1fU0VUX05FU1RFRF9TVEFURVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0veDg2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3g4Ni5jPTM0MTY9bG9uZyBrdm1fYXJjaF92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTM3NzUtXFx0fVxcbmFyY2gveDg2L2t2bS94ODYuYzozNzc2OlxcdGNhc2UgS1ZNX1NFVF9ORVNURURfU1RBVEU6IHtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtMzc3Ny1cXHRcXHRzdHJ1Y3Qga3ZtX25lc3RlZF9zdGF0ZSBfX3VzZXIgKnVzZXJfa3ZtX25lc3RlZF9zdGF0ZSA9IGFyZ3A7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDA1OjU5OjE1LjI0Mjk4NjgyMloiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3OTU1OTM0NDY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBLVk0gSW50ZXJjZXB0aW9uIFBvaW50cyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBLVk0gY29kZSwgYW5kIGl0IGxvb2tzIGxpa2UgdGhlIHJlbGV2YW50IGZ1bmN0aW9uIGlzIGluc2lkZSBga3ZtX2FyY2hfdmNwdV9pb2N0bGAuIFRoYXQgbWVhbnMgYHZteF9zZXRfbmVzdGVkX3N0YXRlYCBpcyB0aGUga2V5IGZ1bmN0aW9uIHRvIGZvY3VzIG9uLCBhbmQgc2luY2UgaXQncyBjYWxsZWQgdGhyb3VnaCBhIGZ1bmN0aW9uIHBvaW50ZXIsIGl0IHNob3VsZG4ndCBiZSBpbmxpbmVkLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LlxuXG5Ob3csIGxldCdzIHJldmlldyB0aGUgbWFpbiBmdW5jdGlvbnMgdGhhdCBjb3VsZCBiZSBpbnRlcmNlcHRpbmcgdGhpbmdzLiBJJ3ZlIGdvdDpcblxuKiAgIGBuZXN0ZWRfc3ZtX3ZtcnVuYFxuKiAgIGBuZXN0ZWRfc3ZtX3ZtZXhpdGBcbiogICBgdm1sb2FkX2ludGVyY2VwdGlvbmBcbiogICBgdm1zYXZlX2ludGVyY2VwdGlvbmBcbiogICBgZW50ZXJfc21tYFxuKiAgIGBlbXVsYXRvcl9sZWF2ZV9zbW1gXG4qICAgYG5lc3RlZF92bXhfZW50ZXJfbm9uX3Jvb3RfbW9kZWBcbiogICBgX19uZXN0ZWRfdm14X3ZtZXhpdGBcbiogICBgdm14X3NldF9uZXN0ZWRfc3RhdGVgXG4qICAgYGt2bXBwY19oYW5kbGVfcGFnZWZhdWx0YFxuXG5BcmUgdGhlcmUgYW55IG90aGVyIGZ1bmN0aW9ucyB0aGF0IHdvdWxkIGJlIHVzZWZ1bD8gQWgsIGluIGBhcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wci5jYCwgSSBzZWUgdGhhdCBga3ZtcHBjX3BhdGNoX2RjYnpgIGlzIGNhbGxlZCBieSBga3ZtcHBjX2hhbmRsZV9wYWdlZmF1bHRgLiBJIGNoZWNrZWQgaWYgYGt2bXBwY19oYW5kbGVfcGFnZWZhdWx0YCBpcyBub24tc3RhdGljIGJ1dCBpdCdzIG5vdC4gSG93ZXZlciwgaXQncyBjYWxsZWQgYnkgYGt2bXBwY19oYW5kbGVfZXhpdF9wcmAuXG5cblNvIG5vdyBteSBjb21wbGV0ZSBsaXN0IGlzOlxuXG4qICAgYG5lc3RlZF9zdm1fdm1ydW5gXG4qICAgYG5lc3RlZF9zdm1fdm1leGl0YFxuKiAgIGB2bWxvYWRfaW50ZXJjZXB0aW9uYFxuKiAgIGB2bXNhdmVfaW50ZXJjZXB0aW9uYFxuKiAgIGBlbnRlcl9zbW1gXG4qICAgYGVtdWxhdG9yX2xlYXZlX3NtbWBcbiogICBgbmVzdGVkX3ZteF9lbnRlcl9ub25fcm9vdF9tb2RlYFxuKiAgIGBfX25lc3RlZF92bXhfdm1leGl0YFxuKiAgIGB2bXhfc2V0X25lc3RlZF9zdGF0ZWBcbiogICBga3ZtcHBjX2hhbmRsZV9leGl0X3ByYFxuXG5JIGhhdmUgdG8gY29uc2lkZXIgaWYgYGt2bXBwY19oYW5kbGVfZXhpdF9wcmAgd2lsbCBiZSB0b28gXCJob3RcIiBiZWNhdXNlIGl0J3MgdGhlIG1haW4gZXhpdCBoYW5kbGVyIGZvciBQUiBLVk0uXG5cblBlcmhhcHMgYGt2bXBwY19oYW5kbGVfcGFnZWZhdWx0YCBpcyBiZXR0ZXIsIGV2ZW4gaWYgc3RhdGljLCBpdCdzIGEgbGFyZ2UgZnVuY3Rpb24gYW5kIG1pZ2h0IG5vdCBiZSBpbmxpbmVkLiBJdCdzIHRpbWUgdG8gY2hlY2sgdGhlIHNpemUgb2YgYGt2bXBwY19oYW5kbGVfcGFnZWZhdWx0YC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAwMDQsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0ODcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDU6NTk6MjMuMTk4OTI0OTA3WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Njg3MDM3MzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtcHBjX2hhbmRsZV9wYWdlZmF1bHRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wci5jPTY2Mj1zdGF0aWMgYm9vbCBrdm1wcGNfdmlzaWJsZV9ncGEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEpXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wci5jLTY3Ni1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wci5jOjY3NzpzdGF0aWMgaW50IGt2bXBwY19oYW5kbGVfcGFnZWZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wci5jLTY3OC1cXHRcXHRcXHQgICAgdWxvbmcgZWFkZHIsIGludCB2ZWMpXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wci5jPTExMzI9aW50IGt2bXBwY19oYW5kbGVfZXhpdF9wcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBleGl0X25yKVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYy0xMTc3LVxcdFxcdFxcdGludCBpZHggPSBzcmN1X3JlYWRfbG9jayhcXHUwMDI2dmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VzcmN1KTtcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wci5jOjExNzg6XFx0XFx0XFx0ciA9IGt2bXBwY19oYW5kbGVfcGFnZWZhdWx0KHZjcHUsIGt2bXBwY19nZXRfcGModmNwdSksIGV4aXRfbnIpO1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmMtMTE3OS1cXHRcXHRcXHRzcmN1X3JlYWRfdW5sb2NrKFxcdTAwMjZ2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZXNyY3UsIGlkeCk7XFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wci5jLTEyMjctXFx0XFx0XFx0aW50IGlkeCA9IHNyY3VfcmVhZF9sb2NrKFxcdTAwMjZ2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZXNyY3UpO1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3ByLmM6MTIyODpcXHRcXHRcXHRyID0ga3ZtcHBjX2hhbmRsZV9wYWdlZmF1bHQodmNwdSwgZGFyLCBleGl0X25yKTtcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wci5jLTEyMjktXFx0XFx0XFx0c3JjdV9yZWFkX3VubG9jayhcXHUwMDI2dmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VzcmN1LCBpZHgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwNTo1OToyMy42Njc2MzQ1MzRaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA3ODAwNzQwOTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgS1ZNIENvcmUgTG9naWMgZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGZvY3VzIG5lZWRzIHRvIGJlIG9uIHNwZWNpZmljIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIEtWTSBjb3JlLCBzcGVjaWZpY2FsbHkgaW4gcmVsYXRpb24gdG8gdGhlIHg4NiAoU1ZNIGFuZCBWTVgpIGFuZCBQb3dlclBDIChCb29rM1MgUFIpIGFyY2hpdGVjdHVyZXMuIEkndmUgcGlucG9pbnRlZCBhIHJhbmdlIG9mIGxpbmVzLCBzdGFydGluZyBmcm9tIGFyb3VuZCBsaW5lIDY3NyBhbmQgZXh0ZW5kaW5nIGF0IGxlYXN0IHRvIDc4MCwgaW5kaWNhdGluZyBhIHJlbGV2YW50IHNlY3Rpb24gb2YgY29kZS4gSXQgbG9va3MgbGlrZSB3ZSdyZSAqbm90KiBkZWFsaW5nIHdpdGggYW55IGlubGluZWQgY29kZSBoZXJlLlxuXG5Hb29kIG5ld3MsIGBrdm1wcGNfaGFuZGxlX3BhZ2VmYXVsdGAgaXMgYXZhaWxhYmxlIGZvciBkaXJlY3QgdXNlLiBMaWtld2lzZSwgYHN2bV9lbnRlcl9zbW1gIGFuZCBgc3ZtX2xlYXZlX3NtbWAgYXJlIGFzc2lnbmVkIHRvIGZ1bmN0aW9uIHBvaW50ZXJzLCB3aGljaCBhbHNvIG1lYW5zIHRoZXkgYXJlbid0IGlubGluZWQgYW5kIGFyZSBhY2Nlc3NpYmxlIGRpcmVjdGx5LiBUaGlzIHNpbXBsaWZpZXMgdGhpbmdzLlxuXG5UaGVyZWZvcmUsIHRoZSBtYWluIGZ1bmN0aW9ucyBJIG5lZWQgdG8gZm9jdXMgb24gZm9yIGZ1enppbmcgYXJlOlxuXG4qICAgYG5lc3RlZF9zdm1fdm1ydW5gXG4qICAgYG5lc3RlZF9zdm1fdm1leGl0YFxuKiAgIGB2bWxvYWRfaW50ZXJjZXB0aW9uYFxuKiAgIGB2bXNhdmVfaW50ZXJjZXB0aW9uYFxuKiAgIGBzdm1fZW50ZXJfc21tYFxuKiAgIGBzdm1fbGVhdmVfc21tYFxuKiAgIGBuZXN0ZWRfdm14X2VudGVyX25vbl9yb290X21vZGVgXG4qICAgYF9fbmVzdGVkX3ZteF92bWV4aXRgXG4qICAgYHZteF9zZXRfbmVzdGVkX3N0YXRlYFxuKiAgIGBrdm1wcGNfaGFuZGxlX3BhZ2VmYXVsdGBcblxuSSdtIGFsc28gbG9va2luZyBhdCB3aGljaCBLVk0gY29uZmlncyB0aGVzZSBmdW5jdGlvbnMgYXBwbHkgdG8uXG5cbk5vdywgbGV0J3MgY29uZmlybSB0aGUgcmVsZXZhbnQgY29uZmlncy5cblxuKiAgIGBLVk1gIC0gQ29uZmlybWVkXG4qICAgYEtWTV9BTURgIC0gQ29uZmlybWVkXG4qICAgYEtWTV9JTlRFTGAgLSBDb25maXJtZWRcbiogICBgS1ZNX0JPT0szU182NF9QUmAgLSBDb25maXJtZWRcbiogICBgS1ZNX1NNTWAgLSBDb25maXJtZWRcbiogICBgS1ZNX0hZUEVSVmAgLSBDb25maXJtZWRcblxuTm8gb3RoZXIgY29uZmlncyBhcHBlYXIgdG8gYmUgcmVsZXZhbnQuXG5cblRoZSBjb3JlIHJlYXNvbmluZyBoZXJlIGlzIHRoYXQgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGNsZWFudXAgY2xhc3MsIGBrdm1fdmNwdV9tYXBfbG9jYWxgLCB3aGljaCByZXBsYWNlcyBtYW51YWwgbWVtb3J5IG1hbmFnZW1lbnQgd2l0aCBga3ZtX3ZjcHVfbWFwYCBhbmQgYGt2bV92Y3B1X3VubWFwYCBjYWxscy4gVGhhdCdzIGEgc2lnbmlmaWNhbnQgcmVmYWN0b3IsIGVzcGVjaWFsbHkgZ2l2ZW4gaXRzIHNjb3BlIGFjcm9zcyB4ODYgYW5kIFBvd2VyUEMuIFdlIG5lZWQgdG8gZnV6eiB0aGVzZSBmdW5jdGlvbnMgcmlnb3JvdXNseSB0byBlbnN1cmUgdGhlIG5ldyBjbGFzcyB3b3JrcyBhcyBpbnRlbmRlZC4gV2UgbmVlZCB0byB2ZXJpZnkgdGhhdCB3ZSdyZSBub3QgaW50cm9kdWNpbmcgYW55IG1lbW9yeSBsZWFrcyBvciB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLiBBZGRpdGlvbmFsbHksIHRoZSBwYXRjaCBpbmNsdWRlcyBhIGZpeCB0byBgX19uZXN0ZWRfdm14X3ZtZXhpdGAsIHdoaWNoIHdhcyBpbmNvcnJlY3RseSBnYXRlZCBvbiBgQ09ORklHX0tWTV9IWVBFUlZgLiBUaGUgcmVxdWVzdCB0byBnZXQgbmVzdGVkIHN0YXRlIHBhZ2VzIHdhcyBvbmx5IGNhbGxlZCB3aGVuIGh5cGVydiB3YXMgYWN0aXZlLCBidXQgc2luY2UgY2hlY2tpbmcgdGhlIHJlcXVlc3QgYWxzbyBjbGVhcnMgaXQsIHRoaXMgbmVlZGVkIHRvIGJlIGZpeGVkLiBUaGlzIGZpeCBhbHNvIG5lZWRzIHRvIGJlIHRlc3RlZCB0byBtYWtlIHN1cmUgaXQgZnVuY3Rpb25zIGFzIGludGVuZGVkLlxuXG5JJ20gc2F0aXNmaWVkIHdpdGggdGhpcyBhbmFseXNpcy4gSSdtIGdvaW5nIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE1NjcsIk91dHB1dFRva2VucyI6MzgwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjYzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDA1OjU5OjM0LjQ0NzcxMDYzWiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIzNDkyNjk3LCJFcnJvciI6InRoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlOiBLVk1fQk9PSzNTXzY0X1BSIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0FNRFwiLFxuICAgIFwiS1ZNX0lOVEVMXCIsXG4gICAgXCJLVk1fQk9PSzNTXzY0X1BSXCIsXG4gICAgXCJLVk1fU01NXCIsXG4gICAgXCJLVk1fSFlQRVJWXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmVzdGVkX3N2bV92bXJ1blwiLFxuICAgIFwibmVzdGVkX3N2bV92bWV4aXRcIixcbiAgICBcInZtbG9hZF9pbnRlcmNlcHRpb25cIixcbiAgICBcInZtc2F2ZV9pbnRlcmNlcHRpb25cIixcbiAgICBcInN2bV9lbnRlcl9zbW1cIixcbiAgICBcInN2bV9sZWF2ZV9zbW1cIixcbiAgICBcIm5lc3RlZF92bXhfZW50ZXJfbm9uX3Jvb3RfbW9kZVwiLFxuICAgIFwiX19uZXN0ZWRfdm14X3ZtZXhpdFwiLFxuICAgIFwidm14X3NldF9uZXN0ZWRfc3RhdGVcIixcbiAgICBcImt2bXBwY19oYW5kbGVfcGFnZWZhdWx0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBjbGVhbnVwIGNsYXNzIGBrdm1fdmNwdV9tYXBfbG9jYWxgIGFuZCB1c2VzIGl0IHRvIHJlcGxhY2UgbWFudWFsIGBrdm1fdmNwdV9tYXBgIGFuZCBga3ZtX3ZjcHVfdW5tYXBgIGNhbGxzIGluIHNldmVyYWwgS1ZNIGZ1bmN0aW9ucyBhY3Jvc3MgeDg2IChTVk0gYW5kIFZNWCkgYW5kIFBvd2VyUEMgKEJvb2szUyBQUikuIEl0IGFsc28gZml4ZXMgYSBidWcgaW4gYF9fbmVzdGVkX3ZteF92bWV4aXRgIHdoZXJlIGBrdm1fY2hlY2tfcmVxdWVzdChLVk1fUkVRX0dFVF9ORVNURURfU1RBVEVfUEFHRVMsIHZjcHUpYCB3YXMgb25seSBjYWxsZWQgd2hlbiBgQ09ORklHX0tWTV9IWVBFUlZgIHdhcyBlbmFibGVkLCBidXQgY2hlY2tpbmcgdGhlIHJlcXVlc3QgYWxzbyBjbGVhcnMgaXQsIHNvIGl0IHNob3VsZCBiZSBjYWxsZWQgdW5jb25kaXRpb25hbGx5LiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIGNvcmUgS1ZNIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IGNsZWFudXAgY2xhc3Mgd29ya3MgY29ycmVjdGx5IGFuZCBkb2Vzbid0IGludHJvZHVjZSBtZW1vcnkgbGVha3Mgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzLCBhbmQgdG8gdmVyaWZ5IHRoZSBmaXggaW4gYF9fbmVzdGVkX3ZteF92bWV4aXRgLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcInRoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlOiBLVk1fQk9PSzNTXzY0X1BSXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDA1OjU5OjM0LjU3MTIxNjI2N1oiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDMzMjkwMTU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEZWJ1Z2dpbmcgYSBNaXNzaW5nIEtWTSBEZWZpbml0aW9uKipcblxuSG1tLCBob2xkIG9uIGEgc2Vjb25kLi4uIGBLVk1fQk9PSzNTXzY0X1BSYCBpc24ndCBzaG93aW5nIHVwIGFzIGRlZmluZWQ/IFRoYXQncyB1bmV4cGVjdGVkLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnIGZpbGUgd2l0aGluIHRoZSBQb3dlclBDIEtWTSBhcmNoaXRlY3R1cmUgZGlyZWN0b3J5LiBMZXQncyBnZXQgYmFjayB0byBgYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnYCBhbmQgdmVyaWZ5IHRoYXQgdGhlIG1hY3JvIEknbSBsb29raW5nIGZvciBpcyBhY3R1YWxseSB0aGVyZSwgY29ycmVjdGx5IGRlZmluZWQsIGFuZCBjb25kaXRpb25hbGx5IGVuYWJsZWQuIEl0J3MgcG9zc2libGUgdGhlcmUncyBhIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jeSBJJ20gbWlzc2luZywgYSB0eXBvLCBvciBwZXJoYXBzIGEgbW9yZSBzdWJ0bGUgaXNzdWUgd2l0aCB0aGUgS2NvbmZpZyBsb2dpYyB0aGF0J3MgY2F1c2luZyBpdCBub3QgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGJ1aWxkLiBJJ2xsIG5lZWQgdG8gbWV0aWN1bG91c2x5IGV4YW1pbmUgdGhlIGNvbnRleHQgb2YgdGhhdCBkZWZpbml0aW9uLiBBIHF1aWNrIHZpc3VhbCBzY2FuIG1heSBiZSBhbGwgSSBuZWVkLCBidXQgSSdsbCBiZSBzdXJlIHRvIGNhcmVmdWxseSB0cmFjZSBhbnkgZGVwZW5kZW5jaWVzIG9yIGNvbmRpdGlvbmFscyB0byBpZGVudGlmeSB0aGUgcHJvYmxlbS4gVGhlIGdvYWwgaXMgdG8gZWl0aGVyIGNvbmZpcm0gaXRzIGV4aXN0ZW5jZSBhbmQgc3BvdCBhbnkgb2J2aW91cyBlcnJvciwgb3IgZmluZCBvdXQgaXQgaXMgbm90IHRoZXJlIGFuZCBtb3ZlIG9uIHRvIHNvbHZpbmcgdGhlIHByb2JsZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzMjg5LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJzZXQtcmVzdWx0cyJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDA1OjU5OjM4LjAwNDUxMDMzOVoiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU3NzA5MzQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fQk9PSzNTXzY0X1BSXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Bvd2VycGMva3ZtL0tjb25maWc9Nzk9Y29uZmlnIEtWTV9CT09LM1NfNjRfSFZcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy05OS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MTAwOmNvbmZpZyBLVk1fQk9PSzNTXzY0X1BSXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTEwMS1cXHR0cmlzdGF0ZSBcXFwiS1ZNIHN1cHBvcnQgd2l0aG91dCB1c2luZyBoeXBlcnZpc29yIG1vZGUgaW4gaG9zdFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDU6NTk6MzguMTYyMjI2OTU1WiIsIlNlcSI6NTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY2MzE1NzA4MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGVidWdnaW5nIGEgS2NvbmZpZyBEaXNjcmVwYW5jeSoqXG5cbk9rYXksIHNvIEknbSBzZWVpbmcgYSBkaXNjcmVwYW5jeSBoZXJlLiBUaGlzIHRvb2wgSSdtIHVzaW5nIGlzIGNsYWltaW5nIHRoYXQgYEtWTV9CT09LM1NfNjRfUFJgIGRvZXNuJ3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlLiBUaGF0IHNlZW1zIG9kZCBiZWNhdXNlIEknbSBhbG1vc3QgY2VydGFpbiBJIHNhdyBpdCBzb21ld2hlcmUuLi4gaGFuZyBvbiwgeWVhaCwgaXQncyByaWdodCB0aGVyZSBpbiBgYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnYC5cblxuTm93LCB3aHkgd291bGQgdGhlIHRvb2wgZ2l2ZSBtZSBhIGZhbHNlIG5lZ2F0aXZlPyBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCBtaWdodCBiZSBkZWZhdWx0aW5nIHRvIGNoZWNraW5nIHRoZSB4ODYgS2NvbmZpZyBieSBkZWZhdWx0LiBUaGF0J3MgYSBjb21tb24gb3ZlcnNpZ2h0IHdpdGggdGhlc2Uga2luZHMgb2YgdG9vbHMsIHNpbmNlIHg4NiBpcyBvZnRlbiB0aGUgcHJpbWFyeSBmb2N1cy4gT3IsIGl0IGNvdWxkIGJlIHRoYXQgdGhlIHRvb2wncyBjaGVja2luZyB0aGUgZ2xvYmFsIEtjb25maWcsIGJ1dCBpdCdzIG5vdCBhY2NvdW50aW5nIGZvciBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29uZmlndXJhdGlvbnMuXG5cbkxldCdzIHRlc3QgdGhpcy4gVGhlIHRvb2wgaXMgcmVwb3J0aW5nIHRoYXQgYEtWTV9CT09LM1NfNjRfUFJgIGlzIG5vbi1leGlzdGVudC4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gY29uZmlybSB3aGV0aGVyIGBLVk1fQk9PSzNTX1BSYCBleGlzdHMuIElmIHRoYXQncyB0aGUgY2FzZSwgaXQgY291bGQgbWVhbiB0aGVyZSdzIGEgdHlwbyB3aXRoaW4gdGhlIHRvb2wgb3IsIHRoZSBjb25maWcgaXMgbmFtZWQgc2xpZ2h0bHkgZGlmZmVyZW50bHksIHN1Y2ggYXMgdGhlIGBfNjRgIGlzbid0IHJlcXVpcmVkLiBMZXQncyBzZWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzNzE4LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDA1OjU5OjQ0Ljc5MzgwMjY2OFoiLCJTZXEiOjUyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI0MDY5OTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fQk9PSzNTX1BSXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Bvd2VycGMva3ZtL0tjb25maWc9MzQ9Y29uZmlnIEtWTV9CT09LM1NfNjRfSEFORExFUlxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTM3LVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzozODpjb25maWcgS1ZNX0JPT0szU19QUl9QT1NTSUJMRVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0zOS1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDA1OjU5OjQ0LjkxNzg3ODQzNFoiLCJTZXEiOjUzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTA2MjE4NDgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktWTSBDb25maWd1cmF0aW9uIFZlcmlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSBhYm91dCB0aGlzIEtWTSBzZXR0aW5nLiBJdCdzIGRlZmluaXRlbHkgbm90IHdoYXQgSSBpbml0aWFsbHkgdGhvdWdodC4gTXkgbm90ZXMgYXJlIHBvaW50aW5nIHRvd2FyZHMgYEtWTV9CT09LM1NfNjRfUFJgIGFuZCBJIG5lZWQgdG8gc29saWRpZnkgdGhhdCBpbiBteSBtaW5kLiBSaWdodCwgbGV0J3MgZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIGZpbGUsIHNwZWNpZmljYWxseSBgYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnYC4gVGhhdCdzIHdoZXJlIGl0J2xsIGJlIGRlZmluZWQuIEkgaGF2ZSB0byB2ZXJpZnkgdGhhdCdzIHRoZSBjb3JyZWN0IG9wdGlvbi4gTm8gcm9vbSBmb3IgZXJyb3IgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQyMzAsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwNTo1OTo0OC4wMjQxMDEwMDdaIiwiU2VxIjo1NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxMzczMjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIktWTV9CT09LM1NfNjRfUFJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZz03OT1jb25maWcgS1ZNX0JPT0szU182NF9IVlxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTk5LVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxMDA6Y29uZmlnIEtWTV9CT09LM1NfNjRfUFJcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTAxLVxcdHRyaXN0YXRlIFxcXCJLVk0gc3VwcG9ydCB3aXRob3V0IHVzaW5nIGh5cGVydmlzb3IgbW9kZSBpbiBob3N0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwNTo1OTo0OC4xMDU0ODAwMDVaIiwiU2VxIjo1NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTMzODM1NTUwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBZGRyZXNzaW5nIHRoZSBUb29sJ3MgTGltaXRhdGlvbioqXG5cbk9rYXksIHNvIEknbSBzZWVpbmcgdGhpcyBiZWhhdmlvciwgYW5kIGl0J3MgcHJldHR5IGNsZWFyOiB0aGUgdG9vbCBpcyBvcGVyYXRpbmcsIGJ1dCBtYXliZSBpdCdzICpvbmx5KiBjaGVja2luZyB0aGUgeDg2IGNvbmZpZ3VyYXRpb25zLiBJIHN1c3BlY3QgdGhpcyBpcyBiZWNhdXNlIHRoZSB3b3Jrc3BhY2UgaXRzZWxmIGlzIHNldCB1cCBmb3IgeDg2LiBNYWtlcyBzZW5zZSwgZ2l2ZW4gdGhlIGxpbWl0YXRpb25zIG9mIGZ1enppbmcgUG93ZXJQQyBpbiB0aGlzIGVudmlyb25tZW50LiBUaGVyZWZvcmUsIHRoZSBsb2dpY2FsIHN0ZXAgaXMgdG8gc2ltcGxpZnkgdGhpbmdzIGFuZCBhY2tub3dsZWRnZSB0aGUgY3VycmVudCByZWFsaXR5LiBJJ20gZ29pbmcgdG8gcmVtb3ZlIGBLVk1fQk9PSzNTXzY0X1BSYCBmcm9tIHRoZSBjb25maWd1cmF0aW9uIGVudGlyZWx5IGFuZCBqdXN0IGZvY3VzIG9uIHg4NiwgYmVjYXVzZSBlZmZlY3RpdmVseSBpdCBjYW4ndCBiZSByZWxpYWJseSBmdXp6ZWQgaW4gdGhlIGN1cnJlbnQgc2V0dXAgYW5kIHRoZSB0b29sIGRvZXNuJ3QgaGFuZGxlIGl0LiBJJ2xsIGFsc28gcmVtb3ZlIGBrdm1wcGNfaGFuZGxlX3BhZ2VmYXVsdGAgZnJvbSB0aGUgbGlzdCwgYXMgaXQncyBub3QgcmVsZXZhbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0NTM3LCJPdXRwdXRUb2tlbnMiOjM1NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwNTo1OTo1My40NDM4Mzc4NjRaIiwiU2VxIjo1NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjI4OTMwMzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0FNRFwiLFxuICAgIFwiS1ZNX0lOVEVMXCIsXG4gICAgXCJLVk1fU01NXCIsXG4gICAgXCJLVk1fSFlQRVJWXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmVzdGVkX3N2bV92bXJ1blwiLFxuICAgIFwibmVzdGVkX3N2bV92bWV4aXRcIixcbiAgICBcInZtbG9hZF9pbnRlcmNlcHRpb25cIixcbiAgICBcInZtc2F2ZV9pbnRlcmNlcHRpb25cIixcbiAgICBcInN2bV9lbnRlcl9zbW1cIixcbiAgICBcInN2bV9sZWF2ZV9zbW1cIixcbiAgICBcIm5lc3RlZF92bXhfZW50ZXJfbm9uX3Jvb3RfbW9kZVwiLFxuICAgIFwiX19uZXN0ZWRfdm14X3ZtZXhpdFwiLFxuICAgIFwidm14X3NldF9uZXN0ZWRfc3RhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGNsZWFudXAgY2xhc3MgYGt2bV92Y3B1X21hcF9sb2NhbGAgYW5kIHVzZXMgaXQgdG8gcmVwbGFjZSBtYW51YWwgYGt2bV92Y3B1X21hcGAgYW5kIGBrdm1fdmNwdV91bm1hcGAgY2FsbHMgaW4gc2V2ZXJhbCBLVk0gZnVuY3Rpb25zIGFjcm9zcyB4ODYgKFNWTSBhbmQgVk1YKSBhbmQgUG93ZXJQQyAoQm9vazNTIFBSKS4gSXQgYWxzbyBmaXhlcyBhIGJ1ZyBpbiBgX19uZXN0ZWRfdm14X3ZtZXhpdGAgd2hlcmUgYGt2bV9jaGVja19yZXF1ZXN0KEtWTV9SRVFfR0VUX05FU1RFRF9TVEFURV9QQUdFUywgdmNwdSlgIHdhcyBvbmx5IGNhbGxlZCB3aGVuIGBDT05GSUdfS1ZNX0hZUEVSVmAgd2FzIGVuYWJsZWQsIGJ1dCBjaGVja2luZyB0aGUgcmVxdWVzdCBhbHNvIGNsZWFycyBpdCwgc28gaXQgc2hvdWxkIGJlIGNhbGxlZCB1bmNvbmRpdGlvbmFsbHkuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gY29yZSBLVk0gbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgY2xlYW51cCBjbGFzcyB3b3JrcyBjb3JyZWN0bHkgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIG1lbW9yeSBsZWFrcyBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMsIGFuZCB0byB2ZXJpZnkgdGhlIGZpeCBpbiBgX19uZXN0ZWRfdm14X3ZtZXhpdGAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fQU1EXCIsXG4gICAgXCJLVk1fSU5URUxcIixcbiAgICBcIktWTV9TTU1cIixcbiAgICBcIktWTV9IWVBFUlZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZXN0ZWRfc3ZtX3ZtcnVuXCIsXG4gICAgXCJuZXN0ZWRfc3ZtX3ZtZXhpdFwiLFxuICAgIFwidm1sb2FkX2ludGVyY2VwdGlvblwiLFxuICAgIFwidm1zYXZlX2ludGVyY2VwdGlvblwiLFxuICAgIFwic3ZtX2VudGVyX3NtbVwiLFxuICAgIFwic3ZtX2xlYXZlX3NtbVwiLFxuICAgIFwibmVzdGVkX3ZteF9lbnRlcl9ub25fcm9vdF9tb2RlXCIsXG4gICAgXCJfX25lc3RlZF92bXhfdm1leGl0XCIsXG4gICAgXCJ2bXhfc2V0X25lc3RlZF9zdGF0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgY2xlYW51cCBjbGFzcyBga3ZtX3ZjcHVfbWFwX2xvY2FsYCBhbmQgdXNlcyBpdCB0byByZXBsYWNlIG1hbnVhbCBga3ZtX3ZjcHVfbWFwYCBhbmQgYGt2bV92Y3B1X3VubWFwYCBjYWxscyBpbiBzZXZlcmFsIEtWTSBmdW5jdGlvbnMgYWNyb3NzIHg4NiAoU1ZNIGFuZCBWTVgpIGFuZCBQb3dlclBDIChCb29rM1MgUFIpLiBJdCBhbHNvIGZpeGVzIGEgYnVnIGluIGBfX25lc3RlZF92bXhfdm1leGl0YCB3aGVyZSBga3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9HRVRfTkVTVEVEX1NUQVRFX1BBR0VTLCB2Y3B1KWAgd2FzIG9ubHkgY2FsbGVkIHdoZW4gYENPTkZJR19LVk1fSFlQRVJWYCB3YXMgZW5hYmxlZCwgYnV0IGNoZWNraW5nIHRoZSByZXF1ZXN0IGFsc28gY2xlYXJzIGl0LCBzbyBpdCBzaG91bGQgYmUgY2FsbGVkIHVuY29uZGl0aW9uYWxseS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBjb3JlIEtWTSBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyBjbGVhbnVwIGNsYXNzIHdvcmtzIGNvcnJlY3RseSBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgbWVtb3J5IGxlYWtzIG9yIHVzZS1hZnRlci1mcmVlIGlzc3VlcywgYW5kIHRvIHZlcmlmeSB0aGUgZml4IGluIGBfX25lc3RlZF92bXhfdm1leGl0YC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowxcvtt[1] Phase: Succeeded StartedAt: 2026-07-25 06:00:05 +0000 UTC FinishedAt: 2026-07-25 06:00:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxcvtt[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-25 06:00:05 +0000 UTC FinishedAt: 2026-07-25 06:00:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxcvtt[2] Phase: Succeeded StartedAt: 2026-07-25 06:00:05 +0000 UTC FinishedAt: 2026-07-25 10:15:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxcvtt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6bc96b971766fbbbbdd9fb2642cedacaf02da957","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL","KVM_SMM","KVM_HYPERV"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["nested_svm_vmrun","nested_svm_vmexit","vmload_interception","vmsave_interception","svm_enter_smm","svm_leave_smm","nested_vmx_enter_non_root_mode","__nested_vmx_vmexit","vmx_set_nested_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6bc96b971766fbbbbdd9fb2642cedacaf02da957","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL","KVM_SMM","KVM_HYPERV"],"series_id":"d78f0fd4-0f94-413a-81e0-a3bea28728a0","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-25 06:00:05 +0000 UTC FinishedAt: 2026-07-25 10:15:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"6bc96b971766fbbbbdd9fb2642cedacaf02da957","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL","KVM_SMM","KVM_HYPERV"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["nested_svm_vmrun","nested_svm_vmexit","vmload_interception","vmsave_interception","svm_enter_smm","svm_leave_smm","nested_vmx_enter_non_root_mode","__nested_vmx_vmexit","vmx_set_nested_state"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"6bc96b971766fbbbbdd9fb2642cedacaf02da957","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL","KVM_SMM","KVM_HYPERV"],"series_id":"d78f0fd4-0f94-413a-81e0-a3bea28728a0","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowxcvtt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6bc96b971766fbbbbdd9fb2642cedacaf02da957","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL","KVM_SMM","KVM_HYPERV"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["nested_svm_vmrun","nested_svm_vmexit","vmload_interception","vmsave_interception","svm_enter_smm","svm_leave_smm","nested_vmx_enter_non_root_mode","__nested_vmx_vmexit","vmx_set_nested_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6bc96b971766fbbbbdd9fb2642cedacaf02da957","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL","KVM_SMM","KVM_HYPERV"],"series_id":"d78f0fd4-0f94-413a-81e0-a3bea28728a0","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-25 06:00:05 +0000 UTC FinishedAt: 2026-07-25 06:00:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxcvtt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6bc96b971766fbbbbdd9fb2642cedacaf02da957","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL","KVM_SMM","KVM_HYPERV"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["nested_svm_vmrun","nested_svm_vmexit","vmload_interception","vmsave_interception","svm_enter_smm","svm_leave_smm","nested_vmx_enter_non_root_mode","__nested_vmx_vmexit","vmx_set_nested_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6bc96b971766fbbbbdd9fb2642cedacaf02da957","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL","KVM_SMM","KVM_HYPERV"],"series_id":"d78f0fd4-0f94-413a-81e0-a3bea28728a0","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-25 06:00:05 +0000 UTC FinishedAt: 2026-07-25 06:00:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"6bc96b971766fbbbbdd9fb2642cedacaf02da957","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL","KVM_SMM","KVM_HYPERV"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowxcvtt/series-workflowxcvtt-convert-artifact-3035799102/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxcvtt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6bc96b971766fbbbbdd9fb2642cedacaf02da957","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL","KVM_SMM","KVM_HYPERV"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["nested_svm_vmrun","nested_svm_vmexit","vmload_interception","vmsave_interception","svm_enter_smm","svm_leave_smm","nested_vmx_enter_non_root_mode","__nested_vmx_vmexit","vmx_set_nested_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6bc96b971766fbbbbdd9fb2642cedacaf02da957","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL","KVM_SMM","KVM_HYPERV"],"series_id":"d78f0fd4-0f94-413a-81e0-a3bea28728a0","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-25 06:00:15 +0000 UTC FinishedAt: 2026-07-25 06:28:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxcvtt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6bc96b971766fbbbbdd9fb2642cedacaf02da957","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL","KVM_SMM","KVM_HYPERV"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["nested_svm_vmrun","nested_svm_vmexit","vmload_interception","vmsave_interception","svm_enter_smm","svm_leave_smm","nested_vmx_enter_non_root_mode","__nested_vmx_vmexit","vmx_set_nested_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6bc96b971766fbbbbdd9fb2642cedacaf02da957","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL","KVM_SMM","KVM_HYPERV"],"series_id":"d78f0fd4-0f94-413a-81e0-a3bea28728a0","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-25 06:00:15 +0000 UTC FinishedAt: 2026-07-25 06:28:51 +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:*68d6b3f8-65bb-4c58-97f3-7beefa349526,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-workflowxcvtt/series-workflowxcvtt-convert-artifact-3035799102/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": "ee0d2b93-c889-4545-9df5-a259a6a9e0a1", "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-workflowxcvtt/series-workflowxcvtt-build-action-3597301540/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxcvtt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6bc96b971766fbbbbdd9fb2642cedacaf02da957","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL","KVM_SMM","KVM_HYPERV"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["nested_svm_vmrun","nested_svm_vmexit","vmload_interception","vmsave_interception","svm_enter_smm","svm_leave_smm","nested_vmx_enter_non_root_mode","__nested_vmx_vmexit","vmx_set_nested_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6bc96b971766fbbbbdd9fb2642cedacaf02da957","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL","KVM_SMM","KVM_HYPERV"],"series_id":"d78f0fd4-0f94-413a-81e0-a3bea28728a0","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-25 06:00:15 +0000 UTC FinishedAt: 2026-07-25 06:28:27 +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:*68d6b3f8-65bb-4c58-97f3-7beefa349526,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-workflowxcvtt/series-workflowxcvtt-convert-artifact-3035799102/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": "ee0d2b93-c889-4545-9df5-a259a6a9e0a1", "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-workflowxcvtt/series-workflowxcvtt-build-action-3597301540/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxcvtt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6bc96b971766fbbbbdd9fb2642cedacaf02da957","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL","KVM_SMM","KVM_HYPERV"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["nested_svm_vmrun","nested_svm_vmexit","vmload_interception","vmsave_interception","svm_enter_smm","svm_leave_smm","nested_vmx_enter_non_root_mode","__nested_vmx_vmexit","vmx_set_nested_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6bc96b971766fbbbbdd9fb2642cedacaf02da957","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL","KVM_SMM","KVM_HYPERV"],"series_id":"d78f0fd4-0f94-413a-81e0-a3bea28728a0","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-25 06:28:51 +0000 UTC FinishedAt: 2026-07-25 06:28:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxcvtt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6bc96b971766fbbbbdd9fb2642cedacaf02da957","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL","KVM_SMM","KVM_HYPERV"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["nested_svm_vmrun","nested_svm_vmexit","vmload_interception","vmsave_interception","svm_enter_smm","svm_leave_smm","nested_vmx_enter_non_root_mode","__nested_vmx_vmexit","vmx_set_nested_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6bc96b971766fbbbbdd9fb2642cedacaf02da957","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL","KVM_SMM","KVM_HYPERV"],"series_id":"d78f0fd4-0f94-413a-81e0-a3bea28728a0","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-25 06:28:51 +0000 UTC FinishedAt: 2026-07-25 06:28:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxcvtt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6bc96b971766fbbbbdd9fb2642cedacaf02da957","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL","KVM_SMM","KVM_HYPERV"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["nested_svm_vmrun","nested_svm_vmexit","vmload_interception","vmsave_interception","svm_enter_smm","svm_leave_smm","nested_vmx_enter_non_root_mode","__nested_vmx_vmexit","vmx_set_nested_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6bc96b971766fbbbbdd9fb2642cedacaf02da957","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL","KVM_SMM","KVM_HYPERV"],"series_id":"d78f0fd4-0f94-413a-81e0-a3bea28728a0","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-25 06:28:51 +0000 UTC FinishedAt: 2026-07-25 06:29:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxcvtt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6bc96b971766fbbbbdd9fb2642cedacaf02da957","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL","KVM_SMM","KVM_HYPERV"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["nested_svm_vmrun","nested_svm_vmexit","vmload_interception","vmsave_interception","svm_enter_smm","svm_leave_smm","nested_vmx_enter_non_root_mode","__nested_vmx_vmexit","vmx_set_nested_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6bc96b971766fbbbbdd9fb2642cedacaf02da957","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL","KVM_SMM","KVM_HYPERV"],"series_id":"d78f0fd4-0f94-413a-81e0-a3bea28728a0","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-25 06:28:51 +0000 UTC FinishedAt: 2026-07-25 06:28:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"6bc96b971766fbbbbdd9fb2642cedacaf02da957","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL","KVM_SMM","KVM_HYPERV"],"series_id":"d78f0fd4-0f94-413a-81e0-a3bea28728a0","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowxcvtt/series-workflowxcvtt-convert-artifact-121799793/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxcvtt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6bc96b971766fbbbbdd9fb2642cedacaf02da957","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL","KVM_SMM","KVM_HYPERV"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["nested_svm_vmrun","nested_svm_vmexit","vmload_interception","vmsave_interception","svm_enter_smm","svm_leave_smm","nested_vmx_enter_non_root_mode","__nested_vmx_vmexit","vmx_set_nested_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6bc96b971766fbbbbdd9fb2642cedacaf02da957","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL","KVM_SMM","KVM_HYPERV"],"series_id":"d78f0fd4-0f94-413a-81e0-a3bea28728a0","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-25 06:29:13 +0000 UTC FinishedAt: 2026-07-25 06:31:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxcvtt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6bc96b971766fbbbbdd9fb2642cedacaf02da957","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL","KVM_SMM","KVM_HYPERV"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["nested_svm_vmrun","nested_svm_vmexit","vmload_interception","vmsave_interception","svm_enter_smm","svm_leave_smm","nested_vmx_enter_non_root_mode","__nested_vmx_vmexit","vmx_set_nested_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6bc96b971766fbbbbdd9fb2642cedacaf02da957","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL","KVM_SMM","KVM_HYPERV"],"series_id":"d78f0fd4-0f94-413a-81e0-a3bea28728a0","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-25 06:29:13 +0000 UTC FinishedAt: 2026-07-25 06:31:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ee0d2b93-c889-4545-9df5-a259a6a9e0a1,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-workflowxcvtt/series-workflowxcvtt-build-action-3597301540/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-workflowxcvtt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6bc96b971766fbbbbdd9fb2642cedacaf02da957","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL","KVM_SMM","KVM_HYPERV"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["nested_svm_vmrun","nested_svm_vmexit","vmload_interception","vmsave_interception","svm_enter_smm","svm_leave_smm","nested_vmx_enter_non_root_mode","__nested_vmx_vmexit","vmx_set_nested_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6bc96b971766fbbbbdd9fb2642cedacaf02da957","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL","KVM_SMM","KVM_HYPERV"],"series_id":"d78f0fd4-0f94-413a-81e0-a3bea28728a0","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-25 06:31:17 +0000 UTC FinishedAt: 2026-07-25 06:31:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxcvtt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6bc96b971766fbbbbdd9fb2642cedacaf02da957","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL","KVM_SMM","KVM_HYPERV"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["nested_svm_vmrun","nested_svm_vmexit","vmload_interception","vmsave_interception","svm_enter_smm","svm_leave_smm","nested_vmx_enter_non_root_mode","__nested_vmx_vmexit","vmx_set_nested_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6bc96b971766fbbbbdd9fb2642cedacaf02da957","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL","KVM_SMM","KVM_HYPERV"],"series_id":"d78f0fd4-0f94-413a-81e0-a3bea28728a0","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-25 06:31:17 +0000 UTC FinishedAt: 2026-07-25 06:31:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxcvtt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6bc96b971766fbbbbdd9fb2642cedacaf02da957","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL","KVM_SMM","KVM_HYPERV"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["nested_svm_vmrun","nested_svm_vmexit","vmload_interception","vmsave_interception","svm_enter_smm","svm_leave_smm","nested_vmx_enter_non_root_mode","__nested_vmx_vmexit","vmx_set_nested_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6bc96b971766fbbbbdd9fb2642cedacaf02da957","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL","KVM_SMM","KVM_HYPERV"],"series_id":"d78f0fd4-0f94-413a-81e0-a3bea28728a0","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-25 06:31:17 +0000 UTC FinishedAt: 2026-07-25 07:11:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxcvtt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6bc96b971766fbbbbdd9fb2642cedacaf02da957","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL","KVM_SMM","KVM_HYPERV"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["nested_svm_vmrun","nested_svm_vmexit","vmload_interception","vmsave_interception","svm_enter_smm","svm_leave_smm","nested_vmx_enter_non_root_mode","__nested_vmx_vmexit","vmx_set_nested_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6bc96b971766fbbbbdd9fb2642cedacaf02da957","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL","KVM_SMM","KVM_HYPERV"],"series_id":"d78f0fd4-0f94-413a-81e0-a3bea28728a0","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-25 06:31:17 +0000 UTC FinishedAt: 2026-07-25 07:11:07 +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:*68d6b3f8-65bb-4c58-97f3-7beefa349526,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-workflowxcvtt/series-workflowxcvtt-convert-artifact-121799793/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": "ce83eebc-aafa-4bf1-84af-c0e9ce4de114", "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-workflowxcvtt/series-workflowxcvtt-build-action-1972904509/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxcvtt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6bc96b971766fbbbbdd9fb2642cedacaf02da957","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL","KVM_SMM","KVM_HYPERV"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["nested_svm_vmrun","nested_svm_vmexit","vmload_interception","vmsave_interception","svm_enter_smm","svm_leave_smm","nested_vmx_enter_non_root_mode","__nested_vmx_vmexit","vmx_set_nested_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6bc96b971766fbbbbdd9fb2642cedacaf02da957","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL","KVM_SMM","KVM_HYPERV"],"series_id":"d78f0fd4-0f94-413a-81e0-a3bea28728a0","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-25 06:31:17 +0000 UTC FinishedAt: 2026-07-25 07:10:57 +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:*68d6b3f8-65bb-4c58-97f3-7beefa349526,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-workflowxcvtt/series-workflowxcvtt-convert-artifact-121799793/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": "ce83eebc-aafa-4bf1-84af-c0e9ce4de114", "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-workflowxcvtt/series-workflowxcvtt-build-action-1972904509/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxcvtt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6bc96b971766fbbbbdd9fb2642cedacaf02da957","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL","KVM_SMM","KVM_HYPERV"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["nested_svm_vmrun","nested_svm_vmexit","vmload_interception","vmsave_interception","svm_enter_smm","svm_leave_smm","nested_vmx_enter_non_root_mode","__nested_vmx_vmexit","vmx_set_nested_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6bc96b971766fbbbbdd9fb2642cedacaf02da957","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL","KVM_SMM","KVM_HYPERV"],"series_id":"d78f0fd4-0f94-413a-81e0-a3bea28728a0","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-25 07:11:07 +0000 UTC FinishedAt: 2026-07-25 07:11:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxcvtt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6bc96b971766fbbbbdd9fb2642cedacaf02da957","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL","KVM_SMM","KVM_HYPERV"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["nested_svm_vmrun","nested_svm_vmexit","vmload_interception","vmsave_interception","svm_enter_smm","svm_leave_smm","nested_vmx_enter_non_root_mode","__nested_vmx_vmexit","vmx_set_nested_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6bc96b971766fbbbbdd9fb2642cedacaf02da957","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL","KVM_SMM","KVM_HYPERV"],"series_id":"d78f0fd4-0f94-413a-81e0-a3bea28728a0","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-25 07:11:07 +0000 UTC FinishedAt: 2026-07-25 07:11:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxcvtt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6bc96b971766fbbbbdd9fb2642cedacaf02da957","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL","KVM_SMM","KVM_HYPERV"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["nested_svm_vmrun","nested_svm_vmexit","vmload_interception","vmsave_interception","svm_enter_smm","svm_leave_smm","nested_vmx_enter_non_root_mode","__nested_vmx_vmexit","vmx_set_nested_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6bc96b971766fbbbbdd9fb2642cedacaf02da957","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL","KVM_SMM","KVM_HYPERV"],"series_id":"d78f0fd4-0f94-413a-81e0-a3bea28728a0","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-25 07:11:07 +0000 UTC FinishedAt: 2026-07-25 07:13:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxcvtt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6bc96b971766fbbbbdd9fb2642cedacaf02da957","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL","KVM_SMM","KVM_HYPERV"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["nested_svm_vmrun","nested_svm_vmexit","vmload_interception","vmsave_interception","svm_enter_smm","svm_leave_smm","nested_vmx_enter_non_root_mode","__nested_vmx_vmexit","vmx_set_nested_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6bc96b971766fbbbbdd9fb2642cedacaf02da957","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL","KVM_SMM","KVM_HYPERV"],"series_id":"d78f0fd4-0f94-413a-81e0-a3bea28728a0","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-25 07:11:07 +0000 UTC FinishedAt: 2026-07-25 07:13:12 +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:*ce83eebc-aafa-4bf1-84af-c0e9ce4de114,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-workflowxcvtt/series-workflowxcvtt-build-action-1972904509/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-workflowxcvtt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6bc96b971766fbbbbdd9fb2642cedacaf02da957","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL","KVM_SMM","KVM_HYPERV"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["nested_svm_vmrun","nested_svm_vmexit","vmload_interception","vmsave_interception","svm_enter_smm","svm_leave_smm","nested_vmx_enter_non_root_mode","__nested_vmx_vmexit","vmx_set_nested_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6bc96b971766fbbbbdd9fb2642cedacaf02da957","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL","KVM_SMM","KVM_HYPERV"],"series_id":"d78f0fd4-0f94-413a-81e0-a3bea28728a0","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-25 07:13:22 +0000 UTC FinishedAt: 2026-07-25 10:15:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxcvtt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6bc96b971766fbbbbdd9fb2642cedacaf02da957","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL","KVM_SMM","KVM_HYPERV"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["nested_svm_vmrun","nested_svm_vmexit","vmload_interception","vmsave_interception","svm_enter_smm","svm_leave_smm","nested_vmx_enter_non_root_mode","__nested_vmx_vmexit","vmx_set_nested_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6bc96b971766fbbbbdd9fb2642cedacaf02da957","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL","KVM_SMM","KVM_HYPERV"],"series_id":"d78f0fd4-0f94-413a-81e0-a3bea28728a0","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-25 07:13:22 +0000 UTC FinishedAt: 2026-07-25 10:15:43 +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":["nested_svm_vmrun","nested_svm_vmexit","vmload_interception","vmsave_interception","svm_enter_smm","svm_leave_smm","nested_vmx_enter_non_root_mode","__nested_vmx_vmexit","vmx_set_nested_state"],"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:*ee0d2b93-c889-4545-9df5-a259a6a9e0a1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ce83eebc-aafa-4bf1-84af-c0e9ce4de114,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-workflowxcvtt/series-workflowxcvtt-build-action-3597301540/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-workflowxcvtt/series-workflowxcvtt-build-action-1972904509/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowxcvtt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6bc96b971766fbbbbdd9fb2642cedacaf02da957","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL","KVM_SMM","KVM_HYPERV"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["nested_svm_vmrun","nested_svm_vmexit","vmload_interception","vmsave_interception","svm_enter_smm","svm_leave_smm","nested_vmx_enter_non_root_mode","__nested_vmx_vmexit","vmx_set_nested_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6bc96b971766fbbbbdd9fb2642cedacaf02da957","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL","KVM_SMM","KVM_HYPERV"],"series_id":"d78f0fd4-0f94-413a-81e0-a3bea28728a0","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-25 07:13:22 +0000 UTC FinishedAt: 2026-07-25 07:13:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxcvtt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6bc96b971766fbbbbdd9fb2642cedacaf02da957","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL","KVM_SMM","KVM_HYPERV"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["nested_svm_vmrun","nested_svm_vmexit","vmload_interception","vmsave_interception","svm_enter_smm","svm_leave_smm","nested_vmx_enter_non_root_mode","__nested_vmx_vmexit","vmx_set_nested_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6bc96b971766fbbbbdd9fb2642cedacaf02da957","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL","KVM_SMM","KVM_HYPERV"],"series_id":"d78f0fd4-0f94-413a-81e0-a3bea28728a0","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-25 07:13:22 +0000 UTC FinishedAt: 2026-07-25 07:13:26 +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":["nested_svm_vmrun","nested_svm_vmexit","vmload_interception","vmsave_interception","svm_enter_smm","svm_leave_smm","nested_vmx_enter_non_root_mode","__nested_vmx_vmexit","vmx_set_nested_state"],"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-workflowxcvtt/series-workflowxcvtt-convert-artifact-3997366822/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxcvtt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6bc96b971766fbbbbdd9fb2642cedacaf02da957","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL","KVM_SMM","KVM_HYPERV"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["nested_svm_vmrun","nested_svm_vmexit","vmload_interception","vmsave_interception","svm_enter_smm","svm_leave_smm","nested_vmx_enter_non_root_mode","__nested_vmx_vmexit","vmx_set_nested_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6bc96b971766fbbbbdd9fb2642cedacaf02da957","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL","KVM_SMM","KVM_HYPERV"],"series_id":"d78f0fd4-0f94-413a-81e0-a3bea28728a0","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-25 07:13:22 +0000 UTC FinishedAt: 2026-07-25 07:13:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxcvtt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6bc96b971766fbbbbdd9fb2642cedacaf02da957","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL","KVM_SMM","KVM_HYPERV"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["nested_svm_vmrun","nested_svm_vmexit","vmload_interception","vmsave_interception","svm_enter_smm","svm_leave_smm","nested_vmx_enter_non_root_mode","__nested_vmx_vmexit","vmx_set_nested_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6bc96b971766fbbbbdd9fb2642cedacaf02da957","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL","KVM_SMM","KVM_HYPERV"],"series_id":"d78f0fd4-0f94-413a-81e0-a3bea28728a0","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-25 07:13:22 +0000 UTC FinishedAt: 2026-07-25 07:13:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxcvtt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6bc96b971766fbbbbdd9fb2642cedacaf02da957","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL","KVM_SMM","KVM_HYPERV"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["nested_svm_vmrun","nested_svm_vmexit","vmload_interception","vmsave_interception","svm_enter_smm","svm_leave_smm","nested_vmx_enter_non_root_mode","__nested_vmx_vmexit","vmx_set_nested_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6bc96b971766fbbbbdd9fb2642cedacaf02da957","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL","KVM_SMM","KVM_HYPERV"],"series_id":"d78f0fd4-0f94-413a-81e0-a3bea28728a0","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-25 07:13:22 +0000 UTC FinishedAt: 2026-07-25 07:13:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxcvtt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6bc96b971766fbbbbdd9fb2642cedacaf02da957","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL","KVM_SMM","KVM_HYPERV"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["nested_svm_vmrun","nested_svm_vmexit","vmload_interception","vmsave_interception","svm_enter_smm","svm_leave_smm","nested_vmx_enter_non_root_mode","__nested_vmx_vmexit","vmx_set_nested_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6bc96b971766fbbbbdd9fb2642cedacaf02da957","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL","KVM_SMM","KVM_HYPERV"],"series_id":"d78f0fd4-0f94-413a-81e0-a3bea28728a0","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-25 07:13:32 +0000 UTC FinishedAt: 2026-07-25 10:15:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxcvtt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6bc96b971766fbbbbdd9fb2642cedacaf02da957","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL","KVM_SMM","KVM_HYPERV"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["nested_svm_vmrun","nested_svm_vmexit","vmload_interception","vmsave_interception","svm_enter_smm","svm_leave_smm","nested_vmx_enter_non_root_mode","__nested_vmx_vmexit","vmx_set_nested_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6bc96b971766fbbbbdd9fb2642cedacaf02da957","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_INTEL","KVM_SMM","KVM_HYPERV"],"series_id":"d78f0fd4-0f94-413a-81e0-a3bea28728a0","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-25 07:13:32 +0000 UTC FinishedAt: 2026-07-25 10:15:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ee0d2b93-c889-4545-9df5-a259a6a9e0a1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ce83eebc-aafa-4bf1-84af-c0e9ce4de114,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-workflowxcvtt/series-workflowxcvtt-build-action-3597301540/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-workflowxcvtt/series-workflowxcvtt-build-action-1972904509/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-workflowxcvtt/series-workflowxcvtt-convert-artifact-3997366822/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,}