Name: series-workflow9v2k9 Phase: Succeeded StartedAt: 2026-07-28 19:43:51 +0000 UTC FinishedAt: 2026-07-29 00:09:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9v2k9[0] Phase: Succeeded StartedAt: 2026-07-28 19:43:51 +0000 UTC FinishedAt: 2026-07-28 20:11:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9v2k9[0].run-triage Phase: Succeeded StartedAt: 2026-07-28 19:43:51 +0000 UTC FinishedAt: 2026-07-28 20:11:03 +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": "567329869b9c75c9d3df74b35fe10af9b51c479d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL", "KVM_AMD", "KVM_SMM", "KVM_AMD_SEV", "KVM_INTEL_TDX", "INTEL_TDX_HOST", "CRYPTO_DEV_SP_PSP", "CRYPTO_DEV_CCP_DD", "AMD_IOMMU", "X86_X2APIC", "CMA", "X86_MCE" ], "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": "567329869b9c75c9d3df74b35fe10af9b51c479d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL", "KVM_AMD", "KVM_SMM", "KVM_AMD_SEV", "KVM_INTEL_TDX", "INTEL_TDX_HOST", "CRYPTO_DEV_SP_PSP", "CRYPTO_DEV_CCP_DD", "AMD_IOMMU", "X86_X2APIC", "CMA", "X86_MCE" ], "series_id": "137ee874-a8bb-4c16-87c2-d2afeb16e49f" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "emulator_leave_smm", "vmx_unhandleable_emulation_required", "tdx_vcpu_needs_initialization", "sev_vcpu_needs_initialization" ], "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+CgkJCTx0ZD4yMDI2LzA3LzI4IDIwOjA4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OywKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7LAogICAgJiMzNDtLVk1fU01NJiMzNDssCiAgICAmIzM0O0tWTV9BTURfU0VWJiMzNDssCiAgICAmIzM0O0tWTV9JTlRFTF9URFgmIzM0OywKICAgICYjMzQ7SU5URUxfVERYX0hPU1QmIzM0OywKICAgICYjMzQ7Q1JZUFRPX0RFVl9TUF9QU1AmIzM0OywKICAgICYjMzQ7Q1JZUFRPX0RFVl9DQ1BfREQmIzM0OywKICAgICYjMzQ7QU1EX0lPTU1VJiMzNDssCiAgICAmIzM0O1g4Nl9YMkFQSUMmIzM0OywKICAgICYjMzQ7Q01BJiMzNDssCiAgICAmIzM0O1g4Nl9NQ0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtlbXVsYXRvcl9sZWF2ZV9zbW0mIzM0OywKICAgICYjMzQ7dm14X3VuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQmIzM0OywKICAgICYjMzQ7dGR4X3ZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24mIzM0OywKICAgICYjMzQ7c2V2X3ZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBLVk0geDg2IG9wZXJhdGlvbiBgdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZGAgYW5kIHJlbmFtZXMgYHZjcHVfcHJlX3J1bmAgdG8gYHZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb25gLiBJdCBtb2RpZmllcyBob3cgS1ZNIGhhbmRsZXMgaW52YWxpZCBndWVzdCBzdGF0ZXMgYW5kIGVtdWxhdGlvbiBmYWlsdXJlcywgcGFydGljdWxhcmx5IHdoZW4gcmV0dXJuaW5nIGZyb20gU3lzdGVtIE1hbmFnZW1lbnQgTW9kZSAoU01NKSB2aWEgUlNNLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgS1ZNIHg4NiBsb2dpYyBhbmQgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMDowODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGIyNjAxNzAwMjY4ODIwNWVhN2YzMjk3NTRlNzVjZTYwM2ZlMzM1ZWJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1bCAyOCAyMDowODoxMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaFxuaW5kZXggNWNiMTMyZWNhM2MzNS4uZTIxM2M5YWUzZTMwMSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmhcbkBAIC02MywxMSAmIzQzOzYzLDEyIEBAIEtWTV9YODZfT1BfT1BUSU9OQUwoZmx1c2hfcmVtb3RlX3RsYnNfcmFuZ2UpXG4gI2VuZGlmXG4gS1ZNX1g4Nl9PUChmbHVzaF90bGJfZ3ZhKVxuIEtWTV9YODZfT1AoZmx1c2hfdGxiX2d1ZXN0KVxuLUtWTV9YODZfT1AodmNwdV9wcmVfcnVuKVxuJiM0MztLVk1fWDg2X09QX09QVElPTkFMX1JFVDAodmNwdV9uZWVkc19pbml0aWFsaXphdGlvbilcbiBLVk1fWDg2X09QKHZjcHVfcnVuKVxuIEtWTV9YODZfT1AoaGFuZGxlX2V4aXQpXG4gS1ZNX1g4Nl9PUChza2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKVxuIEtWTV9YODZfT1BfT1BUSU9OQUwodXBkYXRlX2VtdWxhdGVkX2luc3RydWN0aW9uKVxuJiM0MztLVk1fWDg2X09QX09QVElPTkFMX1JFVDAodW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZClcbiBLVk1fWDg2X09QKHNldF9pbnRlcnJ1cHRfc2hhZG93KVxuIEtWTV9YODZfT1AoZ2V0X2ludGVycnVwdF9zaGFkb3cpXG4gS1ZNX1g4Nl9PUChwYXRjaF9oeXBlcmNhbGwpXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbmluZGV4IDdhMjU4ODMxNjE2ZmEuLjI4Mzg0NzYxOWZmODggMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5AQCAtMTU4NiwxMyAmIzQzOzE1ODYsMTUgQEAgc3RydWN0IGt2bV94ODZfb3BzIHtcbiBcdCAqL1xuIFx0dm9pZCAoKmZsdXNoX3RsYl9ndWVzdCkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBcbi1cdGludCAoKnZjcHVfcHJlX3J1bikoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiYjNDM7XHRib29sICgqdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbikoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBcdGVudW0gZXhpdF9mYXN0cGF0aF9jb21wbGV0aW9uICgqdmNwdV9ydW4pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdFx0XHRcdFx0XHQgIHU2NCBydW5fZmxhZ3MpO1xuIFx0aW50ICgqaGFuZGxlX2V4aXQpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdFx0ZW51bSBleGl0X2Zhc3RwYXRoX2NvbXBsZXRpb24gZXhpdF9mYXN0cGF0aCk7XG4gXHRpbnQgKCpza2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIFx0dm9pZCAoKnVwZGF0ZV9lbXVsYXRlZF9pbnN0cnVjdGlvbikoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiYjNDM7XHRib29sICgqdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZCkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiYjNDM7XG4gXHR2b2lkICgqc2V0X2ludGVycnVwdF9zaGFkb3cpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IG1hc2spO1xuIFx0dTMyICgqZ2V0X2ludGVycnVwdF9zaGFkb3cpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gXHR2b2lkICgqcGF0Y2hfaHlwZXJjYWxsKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3NtbS5jIGIvYXJjaC94ODYva3ZtL3NtbS5jXG5pbmRleCBhNDQ2NDg3YmRkNWNmLi42NTZhMzhkYWQ3ZTdhIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3NtbS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vc21tLmNcbkBAIC02NDksNiAmIzQzOzY0OSwxMCBAQCBpbnQgZW11bGF0b3JfbGVhdmVfc21tKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KVxuICNlbmRpZlxuIFx0XHRyZXQgPSByc21fbG9hZF9zdGF0ZV8zMihjdHh0LCBcdTAwMjZzbXJhbS5zbXJhbTMyKTtcbiBcbiYjNDM7XHRpZiAocmV0ID09IFg4NkVNVUxfQ09OVElOVUUgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIGt2bV94ODZfY2FsbCh1bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKSh2Y3B1KSlcbiYjNDM7XHRcdHJldCA9IFg4NkVNVUxfVU5IQU5ETEVBQkxFO1xuJiM0MztcbiBcdC8qXG4gXHQgKiBJZiBSU00gZmFpbHMgYW5kIHRyaWdnZXJzIHNodXRkb3duLCBhcmNoaXRlY3R1cmFsbHkgdGhlIHNodXRkb3duXG4gXHQgKiBvY2N1cnMgKmJlZm9yZSogdGhlIHRyYW5zaXRpb24gdG8gZ3Vlc3QgbW9kZS4gIEJ1dCBkdWUgdG8gS1ZNJiMzOTtzXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuYyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcbmluZGV4IDkwYTA4ZDM2ZDg0M2QuLmZjYjQxZGZkZTRjMDIgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXG5AQCAtMzU1Niw2ICYjNDM7MzU1NiwxMSBAQCB2b2lkIHNldl9mcmVlX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0X19zZXZfZXNfdW5tYXBfZ2hjYihzdm0pO1xuIH1cbiBcbiYjNDM7Ym9vbCBzZXZfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gdG9fa3ZtX3Nldl9pbmZvKHZjcHUtXHUwMDNla3ZtKS1cdTAwM2VuZWVkX2luaXQ7XG4mIzQzO31cbiYjNDM7XG4gaW50IHByZV9zZXZfcnVuKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBpbnQgY3B1KVxuIHtcbiBcdHN0cnVjdCBzdm1fY3B1X2RhdGEgKnNkID0gcGVyX2NwdV9wdHIoXHUwMDI2c3ZtX2RhdGEsIGNwdSk7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uYyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmNcbmluZGV4IGQ2OGNiYTEyYzc3MmIuLmJjY2NhOWM1Yjk2NjcgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXG5AQCAtNDQwMiwxNiAmIzQzOzQ0MDIsNiBAQCBzdGF0aWMgdm9pZCBzdm1fY2FuY2VsX2luamVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRzdm1fY29tcGxldGVfaW50ZXJydXB0cyh2Y3B1KTtcbiB9XG4gXG4tc3RhdGljIGludCBzdm1fdmNwdV9wcmVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi17XG4tI2lmZGVmIENPTkZJR19LVk1fQU1EX1NFVlxuLVx0aWYgKHRvX2t2bV9zZXZfaW5mbyh2Y3B1LVx1MDAzZWt2bSktXHUwMDNlbmVlZF9pbml0KVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0jZW5kaWZcbi1cbi1cdHJldHVybiAxO1xuLX1cbi1cbiBzdGF0aWMgZmFzdHBhdGhfdCBzdm1fZXhpdF9oYW5kbGVyc19mYXN0cGF0aChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0c3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7XG5AQCAtNTM4OCw3ICYjNDM7NTM3OCw2IEBAIHN0cnVjdCBrdm1feDg2X29wcyBzdm1feDg2X29wcyBfX2luaXRkYXRhID0ge1xuIFx0LmZsdXNoX3RsYl9ndmEgPSBzdm1fZmx1c2hfdGxiX2d2YSxcbiBcdC5mbHVzaF90bGJfZ3Vlc3QgPSBzdm1fZmx1c2hfdGxiX2d1ZXN0LFxuIFxuLVx0LnZjcHVfcHJlX3J1biA9IHN2bV92Y3B1X3ByZV9ydW4sXG4gXHQudmNwdV9ydW4gPSBzdm1fdmNwdV9ydW4sXG4gXHQuaGFuZGxlX2V4aXQgPSBzdm1faGFuZGxlX2V4aXQsXG4gXHQuc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbiA9IHN2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uLFxuQEAgLTU0NDYsNiAmIzQzOzU0MzUsNyBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMgc3ZtX3g4Nl9vcHMgX19pbml0ZGF0YSA9IHtcbiAjZW5kaWZcbiBcbiAjaWZkZWYgQ09ORklHX0tWTV9BTURfU0VWXG4mIzQzO1x0LnZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24gPSBzZXZfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbixcbiBcdC5kZXZfZ2V0X2F0dHIgPSBzZXZfZGV2X2dldF9hdHRyLFxuIFx0Lm1lbV9lbmNfaW9jdGwgPSBzZXZfbWVtX2VuY19pb2N0bCxcbiBcdC5tZW1fZW5jX3JlZ2lzdGVyX3JlZ2lvbiA9IHNldl9tZW1fZW5jX3JlZ2lzdGVyX3JlZ2lvbixcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uaFxuaW5kZXggYTMyN2JmNzUxZWNkNS4uNjZiNDRiNTQ2MDhlOCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmhcbkBAIC05NzksNiAmIzQzOzk3OSw3IEBAIHZvaWQgc2V2X2VzX3ByZXBhcmVfc3dpdGNoX3RvX2d1ZXN0KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBzdHJ1Y3Qgc2V2X2VzX3NhdmVfYXJlXG4gdm9pZCBzZXZfZXNfdW5tYXBfZ2hjYihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSk7XG4gXG4gI2lmZGVmIENPTkZJR19LVk1fQU1EX1NFVlxuJiM0Mztib29sIHNldl92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gaW50IHNldl9tZW1fZW5jX2lvY3RsKHN0cnVjdCBrdm0gKmt2bSwgdm9pZCBfX3VzZXIgKmFyZ3ApO1xuIGludCBzZXZfbWVtX2VuY19yZWdpc3Rlcl9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxuIFx0XHRcdFx0c3RydWN0IGt2bV9lbmNfcmVnaW9uICpyYW5nZSk7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9tYWluLmMgYi9hcmNoL3g4Ni9rdm0vdm14L21haW4uY1xuaW5kZXggMDRmOTg2ZTNkNDM5YS4uMGZmMzIzMGZkOTVlOCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L21haW4uY1xuQEAgLTE0MCwxMiAmIzQzOzE0MCwxMCBAQCBzdGF0aWMgdm9pZCB2dF92Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHR2bXhfdmNwdV9wdXQodmNwdSk7XG4gfVxuIFxuLXN0YXRpYyBpbnQgdnRfdmNwdV9wcmVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiYjNDM7c3RhdGljIGJvb2wgdnRfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuLVx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXG4tXHRcdHJldHVybiB0ZHhfdmNwdV9wcmVfcnVuKHZjcHUpO1xuLVxuLVx0cmV0dXJuIHZteF92Y3B1X3ByZV9ydW4odmNwdSk7XG4mIzQzO1x0cmV0dXJuIGlzX3RkX3ZjcHUodmNwdSkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICAgIHRkeF92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uKHZjcHUpO1xuIH1cbiBcbiBzdGF0aWMgZmFzdHBhdGhfdCB2dF92Y3B1X3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBydW5fZmxhZ3MpXG5AQCAtMTY1LDYgJiM0MzsxNjMsMTYgQEAgc3RhdGljIGludCB2dF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHRyZXR1cm4gdm14X2hhbmRsZV9leGl0KHZjcHUsIGZhc3RwYXRoKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBib29sIHZ0X3VuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGlzX3RkX3ZjcHUodmNwdSkpIHtcbiYjNDM7XHRcdFdBUk5fT05fT05DRSh0b192dCh2Y3B1KS1cdTAwM2VlbXVsYXRpb25fcmVxdWlyZWQpO1xuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHZteF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKHZjcHUpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgdnRfc2V0X21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBtc3JfZGF0YSAqbXNyX2luZm8pXG4ge1xuIFx0aWYgKHVubGlrZWx5KGlzX3RkX3ZjcHUodmNwdSkpKVxuQEAgLTkzOSwxMSAmIzQzOzk0NywxMiBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMgdnRfeDg2X29wcyBfX2luaXRkYXRhID0ge1xuIFx0LmZsdXNoX3RsYl9ndmEgPSB2dF9vcChmbHVzaF90bGJfZ3ZhKSxcbiBcdC5mbHVzaF90bGJfZ3Vlc3QgPSB2dF9vcChmbHVzaF90bGJfZ3Vlc3QpLFxuIFxuLVx0LnZjcHVfcHJlX3J1biA9IHZ0X29wKHZjcHVfcHJlX3J1biksXG4mIzQzO1x0LnZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24gPSB2dF9vcF90ZHhfb25seSh2Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uKSxcbiBcdC52Y3B1X3J1biA9IHZ0X29wKHZjcHVfcnVuKSxcbiBcdC5oYW5kbGVfZXhpdCA9IHZ0X29wKGhhbmRsZV9leGl0KSxcbiBcdC5za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uID0gdm14X3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24sXG4gXHQudXBkYXRlX2VtdWxhdGVkX2luc3RydWN0aW9uID0gdm14X3VwZGF0ZV9lbXVsYXRlZF9pbnN0cnVjdGlvbixcbiYjNDM7XHQudW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZCA9IHZ0X29wKHVuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQpLFxuIFx0LnNldF9pbnRlcnJ1cHRfc2hhZG93ID0gdnRfb3Aoc2V0X2ludGVycnVwdF9zaGFkb3cpLFxuIFx0LmdldF9pbnRlcnJ1cHRfc2hhZG93ID0gdnRfb3AoZ2V0X2ludGVycnVwdF9zaGFkb3cpLFxuIFx0LnBhdGNoX2h5cGVyY2FsbCA9IHZ0X29wKHBhdGNoX2h5cGVyY2FsbCksXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC90ZHguYyBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcbmluZGV4IGQxYWYwYTc1MmU5N2UuLmIyNzJjMjA1ODZhNzQgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXG5AQCAtODk3LDEzICYjNDM7ODk3LDEwIEBAIHZvaWQgdGR4X3ZjcHVfZnJlZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHR0ZHgtXHUwMDNlc3RhdGUgPSBWQ1BVX1REX1NUQVRFX1VOSU5JVElBTElaRUQ7XG4gfVxuIFxuLWludCB0ZHhfdmNwdV9wcmVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiYjNDM7Ym9vbCB0ZHhfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuLVx0aWYgKHVubGlrZWx5KHRvX3RkeCh2Y3B1KS1cdTAwM2VzdGF0ZSAhPSBWQ1BVX1REX1NUQVRFX0lOSVRJQUxJWkVEIHx8XG4tXHRcdCAgICAgdG9fa3ZtX3RkeCh2Y3B1LVx1MDAzZWt2bSktXHUwMDNlc3RhdGUgIT0gVERfU1RBVEVfUlVOTkFCTEUpKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cbi1cdHJldHVybiAxO1xuJiM0MztcdHJldHVybiB0b190ZHgodmNwdSktXHUwMDNlc3RhdGUgIT0gVkNQVV9URF9TVEFURV9JTklUSUFMSVpFRCB8fFxuJiM0MztcdCAgICAgICB0b19rdm1fdGR4KHZjcHUtXHUwMDNla3ZtKS1cdTAwM2VzdGF0ZSAhPSBURF9TVEFURV9SVU5OQUJMRTtcbiB9XG4gXG4gc3RhdGljIF9fYWx3YXlzX2lubGluZSB1MzIgdGRjYWxsX3RvX3ZteF9leGl0X3JlYXNvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC92bXguYyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmNcbmluZGV4IGU0YjlhYzdmZWQ5ZjAuLjc2MTYwYWRmODI5NzAgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXG5AQCAtNjAzNSw3ICYjNDM7NjAzNSw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX25taV93aW5kb3coc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuICAqIHdpdGggdW5zcmVzdHJpY3RlZCBndWVzdCBtb2RlIGRpc2FibGVkKSBhbmQgS1ZNIGNhbiYjMzk7dCBmYWl0aGZ1bGx5IGVtdWxhdGUgdGhlXG4gICogY3VycmVudCB2Q1BVIHN0YXRlLlxuICAqL1xuLXN0YXRpYyBib29sIHZteF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiYjNDM7Ym9vbCB2bXhfdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0c3RydWN0IHZjcHVfdm14ICp2bXggPSB0b192bXgodmNwdSk7XG4gXG5AQCAtNjExMCwxNiAmIzQzOzYxMTAsNiBAQCBzdGF0aWMgaW50IGhhbmRsZV9pbnZhbGlkX2d1ZXN0X3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdHJldHVybiAxO1xuIH1cbiBcbi1pbnQgdm14X3ZjcHVfcHJlX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4te1xuLVx0aWYgKHZteF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKHZjcHUpKSB7XG4tXHRcdGt2bV9wcmVwYXJlX2VtdWxhdGlvbl9mYWlsdXJlX2V4aXQodmNwdSk7XG4tXHRcdHJldHVybiAwO1xuLVx0fVxuLVxuLVx0cmV0dXJuIDE7XG4tfVxuLVxuIC8qXG4gICogSW5kaWNhdGUgYSBidXN5LXdhaXRpbmcgdmNwdSBpbiBzcGlubG9jay4gV2UgZG8gbm90IGVuYWJsZSB0aGUgUEFVU0VcbiAgKiBleGl0aW5nLCBzbyBvbmx5IGdldCBoZXJlIG9uIGNwdSB3aXRoIFBBVVNFLUxvb3AtRXhpdGluZy5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaCBiL2FyY2gveDg2L2t2bS92bXgveDg2X29wcy5oXG5pbmRleCA0MDk4NTgwNzQyNDYyLi5jZGIzOGQ5NDBjZmI3IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgveDg2X29wcy5oXG5AQCAtMjEsNyAmIzQzOzIxLDYgQEAgaW50IHZteF92bV9pbml0KHN0cnVjdCBrdm0gKmt2bSk7XG4gdm9pZCB2bXhfdm1fZGVzdHJveShzdHJ1Y3Qga3ZtICprdm0pO1xuIGludCB2bXhfdmNwdV9wcmVjcmVhdGUoc3RydWN0IGt2bSAqa3ZtKTtcbiBpbnQgdm14X3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4taW50IHZteF92Y3B1X3ByZV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBmYXN0cGF0aF90IHZteF92Y3B1X3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBydW5fZmxhZ3MpO1xuIHZvaWQgdm14X3ZjcHVfZnJlZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIHZvaWQgdm14X3ZjcHVfcmVzZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGluaXRfZXZlbnQpO1xuQEAgLTMxLDYgJiM0MzszMCw3IEBAIGludCB2bXhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGV4aXRfZmFzdHBhdGgpO1xuIHZvaWQgdm14X2hhbmRsZV9leGl0X2lycW9mZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIGludCB2bXhfc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIHZvaWQgdm14X3VwZGF0ZV9lbXVsYXRlZF9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuJiM0Mztib29sIHZteF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gaW50IHZteF9zZXRfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IG1zcl9kYXRhICptc3JfaW5mbyk7XG4gI2lmZGVmIENPTkZJR19LVk1fU01NXG4gaW50IHZteF9zbWlfYWxsb3dlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgZm9yX2luamVjdGlvbik7XG5AQCAtMTM3LDcgJiM0MzsxMzcsNyBAQCBpbnQgdGR4X3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gdm9pZCB0ZHhfdmNwdV9yZXNldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaW5pdF9ldmVudCk7XG4gdm9pZCB0ZHhfdmNwdV9mcmVlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gdm9pZCB0ZHhfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSk7XG4taW50IHRkeF92Y3B1X3ByZV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiYjNDM7Ym9vbCB0ZHhfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIGZhc3RwYXRoX3QgdGR4X3ZjcHVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHJ1bl9mbGFncyk7XG4gdm9pZCB0ZHhfcHJlcGFyZV9zd2l0Y2hfdG9fZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiB2b2lkIHRkeF92Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuY1xuaW5kZXggMGYxYTgyOTAzMmMwNi4uZDk0YjU5MTQwYzQ1MiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS94ODYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3g4Ni5jXG5AQCAtODg2Nyw3ICYjNDM7ODg2NywxNSBAQCBzdGF0aWMgaW50IGt2bV94ODZfdmNwdV9wcmVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdCAgICAha3ZtX2FwaWNfaW5pdF9zaXBpX2FsbG93ZWQodmNwdSkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0cmV0dXJuIGt2bV94ODZfY2FsbCh2Y3B1X3ByZV9ydW4pKHZjcHUpO1xuJiM0MztcdGlmIChrdm1feDg2X2NhbGwodmNwdV9uZWVkc19pbml0aWFsaXphdGlvbikodmNwdSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0aWYgKGt2bV94ODZfY2FsbCh1bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKSh2Y3B1KSkge1xuJiM0MztcdFx0a3ZtX3ByZXBhcmVfZW11bGF0aW9uX2ZhaWx1cmVfZXhpdCh2Y3B1KTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDE7XG4gfVxuIFxuIGludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfaW52YWxpZF9uZXN0ZWRfZ3Vlc3Rfc3RhdGUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X2ludmFsaWRfbmVzdGVkX2d1ZXN0X3N0YXRlLmNcbmluZGV4IDU3ODI4Mzg5M2FiMzcuLjZmNTQ2ZGViMTkzYTkgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9pbnZhbGlkX25lc3RlZF9ndWVzdF9zdGF0ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9pbnZhbGlkX25lc3RlZF9ndWVzdF9zdGF0ZS5jXG5AQCAtMiw2ICYjNDM7Miw3IEBAXG4gI2luY2x1ZGUgXCYjMzQ7dGVzdF91dGlsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtrdm1fdXRpbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7cHJvY2Vzc29yLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7c21tLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt2bXguaFwmIzM0O1xuIFxuICNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG5AQCAtOSw5ICYjNDM7MTAsMjMgQEBcbiBcbiAjaW5jbHVkZSBcJiMzNDtrc2VsZnRlc3QuaFwmIzM0O1xuIFxuLSNkZWZpbmUgQVJCSVRSQVJZX0lPX1BPUlQgMHgyMDAwXG4mIzQzOyNkZWZpbmUgQVJCSVRSQVJZX0lPX1BPUlQgMHg4MFxuIFxuLXN0YXRpYyBzdHJ1Y3Qga3ZtX3ZtICp2bTtcbiYjNDM7LypcbiYjNDM7ICogVGhlIDY0LWJpdCBTTVJBTSBzdGF0ZS1zYXZlIGFyZWEgc3RhcnRzIGF0IFNNQkFTRSAmIzQzOyAweGZlMDAuICBUUiBzdGFydHMgYXRcbiYjNDM7ICogb2Zmc2V0IDB4ZmU5MCwgYW5kIGF0dHJpYnV0ZXMgaXMgdGhlIHNlY29uZCAxNi1iaXQgZmllbGQgaW4gdGhlIGRlc2NyaXB0b3IuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIFNNUkFNNjRfVFJfQVRUUklCVVRFU19PRkZTRVRcdDB4ZmU5MlxuJiM0MzsjZGVmaW5lIFNNUkFNX0dQQVx0XHRcdDB4MTAwMDAwMFxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogU01JIGhhbmRsZXIgdGhhdCBydW5zIGluIDE2LWJpdCBSZWFsIE1vZGUuICBTeW5jcyB3aXRoIEwwIHZpYSBwb3J0IEkvTywgdGhlblxuJiM0MzsgKiBleGVjdXRlcyBSU00gdG8gdHJpZ2dlciB0aGUgY29uc3VtcHRpb24gb2YgaW52YWxpZCBndWVzdCBzdGF0ZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB1OCBzbWlfaGFuZGxlcltdID0ge1xuJiM0MztcdDB4ZTQsIEFSQklUUkFSWV9JT19QT1JULFx0LyogSU4gJEFSQklUUkFSWV9JT19QT1JULCAlYWwgKi9cbiYjNDM7XHQweDBmLCAweGFhLFx0XHRcdC8qIFJTTSAqL1xuJiM0Mzt9O1xuIFxuIHN0YXRpYyB2b2lkIGwyX2d1ZXN0X2NvZGUodm9pZClcbiB7XG5AQCAtMTksOCAmIzQzOzM0LDkgQEAgc3RhdGljIHZvaWQgbDJfZ3Vlc3RfY29kZSh2b2lkKVxuIFx0ICogR2VuZXJhdGUgYW4gZXhpdCB0byBMMCB1c2Vyc3BhY2UsIGkuZS4gbWFpbigpLCB2aWEgSS9PIHRvIGFuXG4gXHQgKiBhcmJpdHJhcnkgcG9ydC5cbiBcdCAqL1xuLVx0YXNtIHZvbGF0aWxlKFwmIzM0O2luYiAlJWR4LCAlJWFsXCYjMzQ7XG4tXHRcdCAgICAgOiA6IFtwb3J0XSBcJiMzNDtkXCYjMzQ7IChBUkJJVFJBUllfSU9fUE9SVCkgOiBcJiMzNDtyYXhcJiMzNDspO1xuJiM0MztcdGFzbSB2b2xhdGlsZShcJiMzNDtpbmIgJFwmIzM0OyBfX3N0cmluZ2lmeShBUkJJVFJBUllfSU9fUE9SVCkgXCYjMzQ7LCAlJWFsXCYjMzQ7XG4mIzQzO1x0XHQgICAgIDo6OiBcJiMzNDtyYXhcJiMzNDspO1xuJiM0MztcdEdVRVNUX0ZBSUwoXCYjMzQ7TDIgcmVzdW1lZCBhZnRlciBzdHVmZmluZyBpbnZhbGlkIGd1ZXN0IHN0YXRlXCYjMzQ7KTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbDFfZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMpXG5AQCAtNDYsMzUgJiM0Mzs2Miw1MCBAQCBzdGF0aWMgdm9pZCBsMV9ndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcylcbiBcdEdVRVNUX0RPTkUoKTtcbiB9XG4gXG4taW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbiYjNDM7c3RhdGljIHZvaWQgdmNwdV9ydW5fdG9faW8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIHdhbnRfbDIpXG4ge1xuLVx0Z3ZhX3Qgdm14X3BhZ2VzX2d2YTtcbi1cdHN0cnVjdCBrdm1fc3JlZ3Mgc3JlZ3M7XG4tXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4tXHRzdHJ1Y3Qga3ZtX3J1biAqcnVuO1xuLVx0c3RydWN0IHVjYWxsIHVjO1xuJiM0MztcdHN0cnVjdCBrdm1fcnVuICpydW4gPSB2Y3B1LVx1MDAzZXJ1bjtcbiBcbi1cdFRFU1RfUkVRVUlSRShrdm1fY3B1X2hhcyhYODZfRkVBVFVSRV9WTVgpKTtcbiYjNDM7XHR2Y3B1X3J1bih2Y3B1KTtcbiBcbi1cdHZtID0gdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoXHUwMDI2dmNwdSwgbDFfZ3Vlc3RfY29kZSk7XG4mIzQzO1x0VEVTVF9BU1NFUlRfS1ZNX0VYSVRfUkVBU09OKHZjcHUsIEtWTV9FWElUX0lPKTtcbiBcbi1cdC8qIEFsbG9jYXRlIFZNWCBwYWdlcyBhbmQgc2hhcmVkIGRlc2NyaXB0b3JzICh2bXhfcGFnZXMpLiAqL1xuLVx0dmNwdV9hbGxvY192bXgodm0sIFx1MDAyNnZteF9wYWdlc19ndmEpO1xuLVx0dmNwdV9hcmdzX3NldCh2Y3B1LCAxLCB2bXhfcGFnZXNfZ3ZhKTtcbiYjNDM7XHRURVNUX0FTU0VSVChydW4tXHUwMDNlaW8ucG9ydCA9PSBBUkJJVFJBUllfSU9fUE9SVCBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAoISEocnVuLVx1MDAzZWZsYWdzIFx1MDAyNiBLVk1fUlVOX1g4Nl9HVUVTVF9NT0RFKSA9PSB3YW50X2wyICB8fFxuJiM0MztcdFx0ICAgICAha3ZtX2hhc19jYXAoS1ZNX0NBUF9YODZfR1VFU1RfTU9ERSkpLFxuJiM0MztcdFx0ICAgIFwmIzM0O0V4cGVjdGVkIElOIGZyb20gcG9ydCAlZCBmcm9tIEwyLCBnb3QgcG9ydCAlZCBmcm9tIEwldVwmIzM0OyxcbiYjNDM7XHRcdCAgICBBUkJJVFJBUllfSU9fUE9SVCwgcnVuLVx1MDAzZWlvLnBvcnQsXG4mIzQzO1x0XHQgICAgMSAmIzQzOyAhIShydW4tXHUwMDNlZmxhZ3MgXHUwMDI2IEtWTV9SVU5fWDg2X0dVRVNUX01PREUpKTtcbiYjNDM7fVxuIFxuLVx0dmNwdV9ydW4odmNwdSk7XG4mIzQzO3N0YXRpYyBzdHJ1Y3Qga3ZtX3ZtICp2bV9jcmVhdGVfYW5kX3J1bl9sMihzdHJ1Y3Qga3ZtX3ZjcHUgKip2Y3B1KVxuJiM0Mzt7XG4mIzQzO1x0Z3ZhX3Qgdm14X3BhZ2VzX2d2YTtcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbiYjNDM7XG4mIzQzO1x0dm0gPSB2bV9jcmVhdGVfd2l0aF9vbmVfdmNwdSh2Y3B1LCBsMV9ndWVzdF9jb2RlKTtcbiBcbi1cdHJ1biA9IHZjcHUtXHUwMDNlcnVuO1xuJiM0MztcdC8qIEFsbG9jYXRlIFZNWCBwYWdlcyBhbmQgc2hhcmVkIGRlc2NyaXB0b3JzICh2bXhfcGFnZXMpLiAqL1xuJiM0MztcdHZjcHVfYWxsb2Nfdm14KHZtLCBcdTAwMjZ2bXhfcGFnZXNfZ3ZhKTtcbiYjNDM7XHR2Y3B1X2FyZ3Nfc2V0KCp2Y3B1LCAxLCB2bXhfcGFnZXNfZ3ZhKTtcbiBcbiBcdC8qXG4gXHQgKiBUaGUgZmlyc3QgZXhpdCB0byBMMCB1c2Vyc3BhY2Ugc2hvdWxkIGJlIGFuIEkvTyBhY2Nlc3MgZnJvbSBMMi5cbiBcdCAqIFJ1bm5pbmcgTDEgc2hvdWxkIGxhdW5jaCBMMiB3aXRob3V0IHRyaWdnZXJpbmcgYW4gZXhpdCB0byB1c2Vyc3BhY2UuXG4gXHQgKi9cbi1cdFRFU1RfQVNTRVJUX0tWTV9FWElUX1JFQVNPTih2Y3B1LCBLVk1fRVhJVF9JTyk7XG4mIzQzO1x0dmNwdV9ydW5fdG9faW8oKnZjcHUsIHRydWUpO1xuIFxuLVx0VEVTVF9BU1NFUlQocnVuLVx1MDAzZWlvLnBvcnQgPT0gQVJCSVRSQVJZX0lPX1BPUlQsXG4tXHRcdCAgICBcJiMzNDtFeHBlY3RlZCBJTiBmcm9tIHBvcnQgJWQgZnJvbSBMMiwgZ290IHBvcnQgJWRcJiMzNDssXG4tXHRcdCAgICBBUkJJVFJBUllfSU9fUE9SVCwgcnVuLVx1MDAzZWlvLnBvcnQpO1xuJiM0MztcdHJldHVybiB2bTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdGVzdF9pbnZhbGlkX2wyX2d1ZXN0X3N0YXRlKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3NyZWdzIHNyZWdzO1xuJiM0MztcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbiYjNDM7XHRzdHJ1Y3QgdWNhbGwgdWM7XG4mIzQzO1xuJiM0MztcdHZtID0gdm1fY3JlYXRlX2FuZF9ydW5fbDIoXHUwMDI2dmNwdSk7XG4gXG4gXHQvKlxuIFx0ICogU3R1ZmYgaW52YWxpZCBndWVzdCBzdGF0ZSBmb3IgTDIgYnkgbWFraW5nIFRSIHVudXNhYmxlLiAgVGhlIG5leHRcbkBAIC05Niw0ICYjNDM7MTI3LDQ5IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4gXHRkZWZhdWx0OlxuIFx0XHRURVNUX0ZBSUwoXCYjMzQ7VW5leHBlY3RlZCB1Y2FsbDogJWx1XCYjMzQ7LCB1Yy5jbWQpO1xuIFx0fVxuJiM0MztcbiYjNDM7XHRrdm1fdm1fZnJlZSh2bSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHRlc3RfaW52YWxpZF9sMl9ndWVzdF9zdGF0ZV9yc20odm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbiYjNDM7XHR1MTYgKnRyX2F0dHJzO1xuJiM0MztcbiYjNDM7XHRpZiAoIWt2bV9oYXNfY2FwKEtWTV9DQVBfWDg2X1NNTSkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHZtID0gdm1fY3JlYXRlX2FuZF9ydW5fbDIoXHUwMDI2dmNwdSk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogSW5qZWN0IFNNSSB3aGlsZSBMMiBpcyBhY3RpdmUsIHJ1biB0aGUgdkNQVSB0byBnZXQgSS9PIGV4aXQgZnJvbSBMMSxcbiYjNDM7XHQgKiB0aGVuIHN0dWZmIFRSIGluIHRoZSBTTVJBTSBzdGF0ZS1zYXZlIGFyZWEgc28gdGhhdCBSU00gcmVzdG9yZXNcbiYjNDM7XHQgKiBpbnZhbGlkIEwyIHN0YXRlLlxuJiM0MztcdCAqL1xuJiM0MztcdHNldHVwX3NtcmFtKHZtLCB2Y3B1LCBTTVJBTV9HUEEsIHNtaV9oYW5kbGVyLCBzaXplb2Yoc21pX2hhbmRsZXIpKTtcbiYjNDM7XHRpbmplY3Rfc21pKHZjcHUpO1xuJiM0MztcbiYjNDM7XHR2Y3B1X3J1bl90b19pbyh2Y3B1LCBmYWxzZSk7XG4mIzQzO1xuJiM0MztcdC8qIENsZWFyIHRoZSBwcmVzZW50IGJpdCBpbiBTTVJBTSB0byBtYWtlIFRSIHVudXNhYmxlLiAqL1xuJiM0MztcdHRyX2F0dHJzID0gYWRkcl9ncGEyaHZhKHZtLCBTTVJBTV9HUEEgJiM0MzsgU01SQU02NF9UUl9BVFRSSUJVVEVTX09GRlNFVCk7XG4mIzQzO1x0KnRyX2F0dHJzIFx1MDAyNj0gfkJJVCg3KTtcbiYjNDM7XG4mIzQzO1x0dmNwdV9ydW4odmNwdSk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRm9yIFJTTSwgTDEgZ2V0cyB0aGUgU0hVVERPV04gYmVjYXVzZSBSU00gaXMgYXJjaGl0ZWN0dXJhbGx5IGRlZmluZWRcbiYjNDM7XHQgKiB0byByZXN1bHQgaW4gc2h1dGRvd24gaWYgdGhlIENQVSBkZXRlY3RzIGludmFsaWQgc3RhdGUgaW4gU01SQU0uXG4mIzQzO1x0ICovXG4mIzQzO1x0VEVTVF9BU1NFUlRfS1ZNX0VYSVRfUkVBU09OKHZjcHUsIEtWTV9FWElUX1NIVVRET1dOKTtcbiYjNDM7XHRrdm1fdm1fZnJlZSh2bSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4mIzQzO3tcbiYjNDM7XHRURVNUX1JFUVVJUkUoa3ZtX2NwdV9oYXMoWDg2X0ZFQVRVUkVfVk1YKSk7XG4mIzQzO1xuJiM0MztcdHRlc3RfaW52YWxpZF9sMl9ndWVzdF9zdGF0ZSgpO1xuJiM0MztcdHRlc3RfaW52YWxpZF9sMl9ndWVzdF9zdGF0ZV9yc20oKTtcbiB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjA6MDg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OywKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7LAogICAgJiMzNDtLVk1fU01NJiMzNDssCiAgICAmIzM0O0tWTV9BTURfU0VWJiMzNDssCiAgICAmIzM0O0tWTV9JTlRFTF9URFgmIzM0OywKICAgICYjMzQ7SU5URUxfVERYX0hPU1QmIzM0OywKICAgICYjMzQ7Q1JZUFRPX0RFVl9TUF9QU1AmIzM0OywKICAgICYjMzQ7Q1JZUFRPX0RFVl9DQ1BfREQmIzM0OywKICAgICYjMzQ7QU1EX0lPTU1VJiMzNDssCiAgICAmIzM0O1g4Nl9YMkFQSUMmIzM0OywKICAgICYjMzQ7Q01BJiMzNDssCiAgICAmIzM0O1g4Nl9NQ0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtlbXVsYXRvcl9sZWF2ZV9zbW0mIzM0OywKICAgICYjMzQ7dm14X3VuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQmIzM0OywKICAgICYjMzQ7dGR4X3ZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24mIzM0OywKICAgICYjMzQ7c2V2X3ZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBLVk0geDg2IG9wZXJhdGlvbiBgdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZGAgYW5kIHJlbmFtZXMgYHZjcHVfcHJlX3J1bmAgdG8gYHZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb25gLiBJdCBtb2RpZmllcyBob3cgS1ZNIGhhbmRsZXMgaW52YWxpZCBndWVzdCBzdGF0ZXMgYW5kIGVtdWxhdGlvbiBmYWlsdXJlcywgcGFydGljdWxhcmx5IHdoZW4gcmV0dXJuaW5nIGZyb20gU3lzdGVtIE1hbmFnZW1lbnQgTW9kZSAoU01NKSB2aWEgUlNNLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgS1ZNIHg4NiBsb2dpYyBhbmQgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGIyNjAxNzAwMjY4ODIwNWVhN2YzMjk3NTRlNzVjZTYwM2ZlMzM1ZWIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEp1bCAyOCAyMDowODoxMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oCmluZGV4IDVjYjEzMmVjYTNjMzUuLmUyMTNjOWFlM2UzMDEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaApAQCAtNjMsMTEgJiM0Mzs2MywxMiBAQCBLVk1fWDg2X09QX09QVElPTkFMKGZsdXNoX3JlbW90ZV90bGJzX3JhbmdlKQogI2VuZGlmCiBLVk1fWDg2X09QKGZsdXNoX3RsYl9ndmEpCiBLVk1fWDg2X09QKGZsdXNoX3RsYl9ndWVzdCkKLUtWTV9YODZfT1AodmNwdV9wcmVfcnVuKQomIzQzO0tWTV9YODZfT1BfT1BUSU9OQUxfUkVUMCh2Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uKQogS1ZNX1g4Nl9PUCh2Y3B1X3J1bikKIEtWTV9YODZfT1AoaGFuZGxlX2V4aXQpCiBLVk1fWDg2X09QKHNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24pCiBLVk1fWDg2X09QX09QVElPTkFMKHVwZGF0ZV9lbXVsYXRlZF9pbnN0cnVjdGlvbikKJiM0MztLVk1fWDg2X09QX09QVElPTkFMX1JFVDAodW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZCkKIEtWTV9YODZfT1Aoc2V0X2ludGVycnVwdF9zaGFkb3cpCiBLVk1fWDg2X09QKGdldF9pbnRlcnJ1cHRfc2hhZG93KQogS1ZNX1g4Nl9PUChwYXRjaF9oeXBlcmNhbGwpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAppbmRleCA3YTI1ODgzMTYxNmZhLi4yODM4NDc2MTlmZjg4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKQEAgLTE1ODYsMTMgJiM0MzsxNTg2LDE1IEBAIHN0cnVjdCBrdm1feDg2X29wcyB7CiAJICovCiAJdm9pZCAoKmZsdXNoX3RsYl9ndWVzdCkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIAotCWludCAoKnZjcHVfcHJlX3J1bikoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKJiM0MzsJYm9vbCAoKnZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiAJZW51bSBleGl0X2Zhc3RwYXRoX2NvbXBsZXRpb24gKCp2Y3B1X3J1bikoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCQkJCQkJICB1NjQgcnVuX2ZsYWdzKTsKIAlpbnQgKCpoYW5kbGVfZXhpdCkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCQllbnVtIGV4aXRfZmFzdHBhdGhfY29tcGxldGlvbiBleGl0X2Zhc3RwYXRoKTsKIAlpbnQgKCpza2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCXZvaWQgKCp1cGRhdGVfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiYjNDM7CWJvb2wgKCp1bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwomIzQzOwogCXZvaWQgKCpzZXRfaW50ZXJydXB0X3NoYWRvdykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgbWFzayk7CiAJdTMyICgqZ2V0X2ludGVycnVwdF9zaGFkb3cpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiAJdm9pZCAoKnBhdGNoX2h5cGVyY2FsbCkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3NtbS5jIGIvYXJjaC94ODYva3ZtL3NtbS5jCmluZGV4IGE0NDY0ODdiZGQ1Y2YuLjY1NmEzOGRhZDdlN2EgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9zbW0uYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vc21tLmMKQEAgLTY0OSw2ICYjNDM7NjQ5LDEwIEBAIGludCBlbXVsYXRvcl9sZWF2ZV9zbW0oc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCiAjZW5kaWYKIAkJcmV0ID0gcnNtX2xvYWRfc3RhdGVfMzIoY3R4dCwgJmFtcDtzbXJhbS5zbXJhbTMyKTsKIAomIzQzOwlpZiAocmV0ID09IFg4NkVNVUxfQ09OVElOVUUgJmFtcDsmYW1wOwomIzQzOwkgICAga3ZtX3g4Nl9jYWxsKHVuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQpKHZjcHUpKQomIzQzOwkJcmV0ID0gWDg2RU1VTF9VTkhBTkRMRUFCTEU7CiYjNDM7CiAJLyoKIAkgKiBJZiBSU00gZmFpbHMgYW5kIHRyaWdnZXJzIHNodXRkb3duLCBhcmNoaXRlY3R1cmFsbHkgdGhlIHNodXRkb3duCiAJICogb2NjdXJzICpiZWZvcmUqIHRoZSB0cmFuc2l0aW9uIHRvIGd1ZXN0IG1vZGUuICBCdXQgZHVlIHRvIEtWTSYjMzk7cwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuYyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMKaW5kZXggOTBhMDhkMzZkODQzZC4uZmNiNDFkZmRlNGMwMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jCkBAIC0zNTU2LDYgJiM0MzszNTU2LDExIEBAIHZvaWQgc2V2X2ZyZWVfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJX19zZXZfZXNfdW5tYXBfZ2hjYihzdm0pOwogfQogCiYjNDM7Ym9vbCBzZXZfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiYjNDM7ewomIzQzOwlyZXR1cm4gdG9fa3ZtX3Nldl9pbmZvKHZjcHUtJmd0O2t2bSktJmd0O25lZWRfaW5pdDsKJiM0Mzt9CiYjNDM7CiBpbnQgcHJlX3Nldl9ydW4oc3RydWN0IHZjcHVfc3ZtICpzdm0sIGludCBjcHUpCiB7CiAJc3RydWN0IHN2bV9jcHVfZGF0YSAqc2QgPSBwZXJfY3B1X3B0cigmYW1wO3N2bV9kYXRhLCBjcHUpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uYyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMKaW5kZXggZDY4Y2JhMTJjNzcyYi4uYmNjY2E5YzViOTY2NyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jCkBAIC00NDAyLDE2ICYjNDM7NDQwMiw2IEBAIHN0YXRpYyB2b2lkIHN2bV9jYW5jZWxfaW5qZWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlzdm1fY29tcGxldGVfaW50ZXJydXB0cyh2Y3B1KTsKIH0KIAotc3RhdGljIGludCBzdm1fdmNwdV9wcmVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKLXsKLSNpZmRlZiBDT05GSUdfS1ZNX0FNRF9TRVYKLQlpZiAodG9fa3ZtX3Nldl9pbmZvKHZjcHUtJmd0O2t2bSktJmd0O25lZWRfaW5pdCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0jZW5kaWYKLQotCXJldHVybiAxOwotfQotCiBzdGF0aWMgZmFzdHBhdGhfdCBzdm1fZXhpdF9oYW5kbGVyc19mYXN0cGF0aChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJc3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7CkBAIC01Mzg4LDcgJiM0Mzs1Mzc4LDYgQEAgc3RydWN0IGt2bV94ODZfb3BzIHN2bV94ODZfb3BzIF9faW5pdGRhdGEgPSB7CiAJLmZsdXNoX3RsYl9ndmEgPSBzdm1fZmx1c2hfdGxiX2d2YSwKIAkuZmx1c2hfdGxiX2d1ZXN0ID0gc3ZtX2ZsdXNoX3RsYl9ndWVzdCwKIAotCS52Y3B1X3ByZV9ydW4gPSBzdm1fdmNwdV9wcmVfcnVuLAogCS52Y3B1X3J1biA9IHN2bV92Y3B1X3J1biwKIAkuaGFuZGxlX2V4aXQgPSBzdm1faGFuZGxlX2V4aXQsCiAJLnNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24gPSBzdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbiwKQEAgLTU0NDYsNiAmIzQzOzU0MzUsNyBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMgc3ZtX3g4Nl9vcHMgX19pbml0ZGF0YSA9IHsKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0tWTV9BTURfU0VWCiYjNDM7CS52Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uID0gc2V2X3ZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24sCiAJLmRldl9nZXRfYXR0ciA9IHNldl9kZXZfZ2V0X2F0dHIsCiAJLm1lbV9lbmNfaW9jdGwgPSBzZXZfbWVtX2VuY19pb2N0bCwKIAkubWVtX2VuY19yZWdpc3Rlcl9yZWdpb24gPSBzZXZfbWVtX2VuY19yZWdpc3Rlcl9yZWdpb24sCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uaAppbmRleCBhMzI3YmY3NTFlY2Q1Li42NmI0NGI1NDYwOGU4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmgKQEAgLTk3OSw2ICYjNDM7OTc5LDcgQEAgdm9pZCBzZXZfZXNfcHJlcGFyZV9zd2l0Y2hfdG9fZ3Vlc3Qoc3RydWN0IHZjcHVfc3ZtICpzdm0sIHN0cnVjdCBzZXZfZXNfc2F2ZV9hcmUKIHZvaWQgc2V2X2VzX3VubWFwX2doY2Ioc3RydWN0IHZjcHVfc3ZtICpzdm0pOwogCiAjaWZkZWYgQ09ORklHX0tWTV9BTURfU0VWCiYjNDM7Ym9vbCBzZXZfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogaW50IHNldl9tZW1fZW5jX2lvY3RsKHN0cnVjdCBrdm0gKmt2bSwgdm9pZCBfX3VzZXIgKmFyZ3ApOwogaW50IHNldl9tZW1fZW5jX3JlZ2lzdGVyX3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sCiAJCQkJc3RydWN0IGt2bV9lbmNfcmVnaW9uICpyYW5nZSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L21haW4uYyBiL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jCmluZGV4IDA0Zjk4NmUzZDQzOWEuLjBmZjMyMzBmZDk1ZTggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jCkBAIC0xNDAsMTIgJiM0MzsxNDAsMTAgQEAgc3RhdGljIHZvaWQgdnRfdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCXZteF92Y3B1X3B1dCh2Y3B1KTsKIH0KIAotc3RhdGljIGludCB2dF92Y3B1X3ByZV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQomIzQzO3N0YXRpYyBib29sIHZ0X3ZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewotCWlmIChpc190ZF92Y3B1KHZjcHUpKQotCQlyZXR1cm4gdGR4X3ZjcHVfcHJlX3J1bih2Y3B1KTsKLQotCXJldHVybiB2bXhfdmNwdV9wcmVfcnVuKHZjcHUpOwomIzQzOwlyZXR1cm4gaXNfdGRfdmNwdSh2Y3B1KSAmYW1wOyZhbXA7CiYjNDM7CSAgICAgICB0ZHhfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbih2Y3B1KTsKIH0KIAogc3RhdGljIGZhc3RwYXRoX3QgdnRfdmNwdV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgcnVuX2ZsYWdzKQpAQCAtMTY1LDYgJiM0MzsxNjMsMTYgQEAgc3RhdGljIGludCB2dF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJcmV0dXJuIHZteF9oYW5kbGVfZXhpdCh2Y3B1LCBmYXN0cGF0aCk7CiB9CiAKJiM0MztzdGF0aWMgYm9vbCB2dF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKJiM0Mzt7CiYjNDM7CWlmIChpc190ZF92Y3B1KHZjcHUpKSB7CiYjNDM7CQlXQVJOX09OX09OQ0UodG9fdnQodmNwdSktJmd0O2VtdWxhdGlvbl9yZXF1aXJlZCk7CiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHZteF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKHZjcHUpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgdnRfc2V0X21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBtc3JfZGF0YSAqbXNyX2luZm8pCiB7CiAJaWYgKHVubGlrZWx5KGlzX3RkX3ZjcHUodmNwdSkpKQpAQCAtOTM5LDExICYjNDM7OTQ3LDEyIEBAIHN0cnVjdCBrdm1feDg2X29wcyB2dF94ODZfb3BzIF9faW5pdGRhdGEgPSB7CiAJLmZsdXNoX3RsYl9ndmEgPSB2dF9vcChmbHVzaF90bGJfZ3ZhKSwKIAkuZmx1c2hfdGxiX2d1ZXN0ID0gdnRfb3AoZmx1c2hfdGxiX2d1ZXN0KSwKIAotCS52Y3B1X3ByZV9ydW4gPSB2dF9vcCh2Y3B1X3ByZV9ydW4pLAomIzQzOwkudmNwdV9uZWVkc19pbml0aWFsaXphdGlvbiA9IHZ0X29wX3RkeF9vbmx5KHZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24pLAogCS52Y3B1X3J1biA9IHZ0X29wKHZjcHVfcnVuKSwKIAkuaGFuZGxlX2V4aXQgPSB2dF9vcChoYW5kbGVfZXhpdCksCiAJLnNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24gPSB2bXhfc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbiwKIAkudXBkYXRlX2VtdWxhdGVkX2luc3RydWN0aW9uID0gdm14X3VwZGF0ZV9lbXVsYXRlZF9pbnN0cnVjdGlvbiwKJiM0MzsJLnVuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQgPSB2dF9vcCh1bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKSwKIAkuc2V0X2ludGVycnVwdF9zaGFkb3cgPSB2dF9vcChzZXRfaW50ZXJydXB0X3NoYWRvdyksCiAJLmdldF9pbnRlcnJ1cHRfc2hhZG93ID0gdnRfb3AoZ2V0X2ludGVycnVwdF9zaGFkb3cpLAogCS5wYXRjaF9oeXBlcmNhbGwgPSB2dF9vcChwYXRjaF9oeXBlcmNhbGwpLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC90ZHguYyBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmMKaW5kZXggZDFhZjBhNzUyZTk3ZS4uYjI3MmMyMDU4NmE3NCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3ZteC90ZHguYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jCkBAIC04OTcsMTMgJiM0Mzs4OTcsMTAgQEAgdm9pZCB0ZHhfdmNwdV9mcmVlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAl0ZHgtJmd0O3N0YXRlID0gVkNQVV9URF9TVEFURV9VTklOSVRJQUxJWkVEOwogfQogCi1pbnQgdGR4X3ZjcHVfcHJlX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiYjNDM7Ym9vbCB0ZHhfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0JaWYgKHVubGlrZWx5KHRvX3RkeCh2Y3B1KS0mZ3Q7c3RhdGUgIT0gVkNQVV9URF9TVEFURV9JTklUSUFMSVpFRCB8fAotCQkgICAgIHRvX2t2bV90ZHgodmNwdS0mZ3Q7a3ZtKS0mZ3Q7c3RhdGUgIT0gVERfU1RBVEVfUlVOTkFCTEUpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXJldHVybiAxOwomIzQzOwlyZXR1cm4gdG9fdGR4KHZjcHUpLSZndDtzdGF0ZSAhPSBWQ1BVX1REX1NUQVRFX0lOSVRJQUxJWkVEIHx8CiYjNDM7CSAgICAgICB0b19rdm1fdGR4KHZjcHUtJmd0O2t2bSktJmd0O3N0YXRlICE9IFREX1NUQVRFX1JVTk5BQkxFOwogfQogCiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHUzMiB0ZGNhbGxfdG9fdm14X2V4aXRfcmVhc29uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdm14LmMgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jCmluZGV4IGU0YjlhYzdmZWQ5ZjAuLjc2MTYwYWRmODI5NzAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS92bXgvdm14LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3ZteC92bXguYwpAQCAtNjAzNSw3ICYjNDM7NjAzNSw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX25taV93aW5kb3coc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogICogd2l0aCB1bnNyZXN0cmljdGVkIGd1ZXN0IG1vZGUgZGlzYWJsZWQpIGFuZCBLVk0gY2FuJiMzOTt0IGZhaXRoZnVsbHkgZW11bGF0ZSB0aGUKICAqIGN1cnJlbnQgdkNQVSBzdGF0ZS4KICAqLwotc3RhdGljIGJvb2wgdm14X3VuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQomIzQzO2Jvb2wgdm14X3VuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCXN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpOwogCkBAIC02MTEwLDE2ICYjNDM7NjExMCw2IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2ludmFsaWRfZ3Vlc3Rfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCXJldHVybiAxOwogfQogCi1pbnQgdm14X3ZjcHVfcHJlX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCi17Ci0JaWYgKHZteF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKHZjcHUpKSB7Ci0JCWt2bV9wcmVwYXJlX2VtdWxhdGlvbl9mYWlsdXJlX2V4aXQodmNwdSk7Ci0JCXJldHVybiAwOwotCX0KLQotCXJldHVybiAxOwotfQotCiAvKgogICogSW5kaWNhdGUgYSBidXN5LXdhaXRpbmcgdmNwdSBpbiBzcGlubG9jay4gV2UgZG8gbm90IGVuYWJsZSB0aGUgUEFVU0UKICAqIGV4aXRpbmcsIHNvIG9ubHkgZ2V0IGhlcmUgb24gY3B1IHdpdGggUEFVU0UtTG9vcC1FeGl0aW5nLgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmggYi9hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaAppbmRleCA0MDk4NTgwNzQyNDYyLi5jZGIzOGQ5NDBjZmI3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaApAQCAtMjEsNyAmIzQzOzIxLDYgQEAgaW50IHZteF92bV9pbml0KHN0cnVjdCBrdm0gKmt2bSk7CiB2b2lkIHZteF92bV9kZXN0cm95KHN0cnVjdCBrdm0gKmt2bSk7CiBpbnQgdm14X3ZjcHVfcHJlY3JlYXRlKHN0cnVjdCBrdm0gKmt2bSk7CiBpbnQgdm14X3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7Ci1pbnQgdm14X3ZjcHVfcHJlX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogZmFzdHBhdGhfdCB2bXhfdmNwdV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgcnVuX2ZsYWdzKTsKIHZvaWQgdm14X3ZjcHVfZnJlZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogdm9pZCB2bXhfdmNwdV9yZXNldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaW5pdF9ldmVudCk7CkBAIC0zMSw2ICYjNDM7MzAsNyBAQCBpbnQgdm14X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBleGl0X2Zhc3RwYXRoKTsKIHZvaWQgdm14X2hhbmRsZV9leGl0X2lycW9mZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogaW50IHZteF9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiB2b2lkIHZteF91cGRhdGVfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKJiM0Mztib29sIHZteF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiBpbnQgdm14X3NldF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgbXNyX2RhdGEgKm1zcl9pbmZvKTsKICNpZmRlZiBDT05GSUdfS1ZNX1NNTQogaW50IHZteF9zbWlfYWxsb3dlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgZm9yX2luamVjdGlvbik7CkBAIC0xMzcsNyAmIzQzOzEzNyw3IEBAIGludCB0ZHhfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIHZvaWQgdGR4X3ZjcHVfcmVzZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGluaXRfZXZlbnQpOwogdm9pZCB0ZHhfdmNwdV9mcmVlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiB2b2lkIHRkeF92Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KTsKLWludCB0ZHhfdmNwdV9wcmVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiYjNDM7Ym9vbCB0ZHhfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogZmFzdHBhdGhfdCB0ZHhfdmNwdV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgcnVuX2ZsYWdzKTsKIHZvaWQgdGR4X3ByZXBhcmVfc3dpdGNoX3RvX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiB2b2lkIHRkeF92Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5jIGIvYXJjaC94ODYva3ZtL3g4Ni5jCmluZGV4IDBmMWE4MjkwMzJjMDYuLmQ5NGI1OTE0MGM0NTIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS94ODYuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0veDg2LmMKQEAgLTg4NjcsNyAmIzQzOzg4NjcsMTUgQEAgc3RhdGljIGludCBrdm1feDg2X3ZjcHVfcHJlX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJICAgICFrdm1fYXBpY19pbml0X3NpcGlfYWxsb3dlZCh2Y3B1KSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlyZXR1cm4ga3ZtX3g4Nl9jYWxsKHZjcHVfcHJlX3J1bikodmNwdSk7CiYjNDM7CWlmIChrdm1feDg2X2NhbGwodmNwdV9uZWVkc19pbml0aWFsaXphdGlvbikodmNwdSkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJaWYgKGt2bV94ODZfY2FsbCh1bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKSh2Y3B1KSkgewomIzQzOwkJa3ZtX3ByZXBhcmVfZW11bGF0aW9uX2ZhaWx1cmVfZXhpdCh2Y3B1KTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAxOwogfQogCiBpbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfaW52YWxpZF9uZXN0ZWRfZ3Vlc3Rfc3RhdGUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X2ludmFsaWRfbmVzdGVkX2d1ZXN0X3N0YXRlLmMKaW5kZXggNTc4MjgzODkzYWIzNy4uNmY1NDZkZWIxOTNhOSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfaW52YWxpZF9uZXN0ZWRfZ3Vlc3Rfc3RhdGUuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9pbnZhbGlkX25lc3RlZF9ndWVzdF9zdGF0ZS5jCkBAIC0yLDYgJiM0MzsyLDcgQEAKICNpbmNsdWRlICYjMzQ7dGVzdF91dGlsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtrdm1fdXRpbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7cHJvY2Vzc29yLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7c21tLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt2bXguaCYjMzQ7CiAKICNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDsKQEAgLTksOSAmIzQzOzEwLDIzIEBACiAKICNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0LmgmIzM0OwogCi0jZGVmaW5lIEFSQklUUkFSWV9JT19QT1JUIDB4MjAwMAomIzQzOyNkZWZpbmUgQVJCSVRSQVJZX0lPX1BPUlQgMHg4MAogCi1zdGF0aWMgc3RydWN0IGt2bV92bSAqdm07CiYjNDM7LyoKJiM0MzsgKiBUaGUgNjQtYml0IFNNUkFNIHN0YXRlLXNhdmUgYXJlYSBzdGFydHMgYXQgU01CQVNFICYjNDM7IDB4ZmUwMC4gIFRSIHN0YXJ0cyBhdAomIzQzOyAqIG9mZnNldCAweGZlOTAsIGFuZCBhdHRyaWJ1dGVzIGlzIHRoZSBzZWNvbmQgMTYtYml0IGZpZWxkIGluIHRoZSBkZXNjcmlwdG9yLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgU01SQU02NF9UUl9BVFRSSUJVVEVTX09GRlNFVAkweGZlOTIKJiM0MzsjZGVmaW5lIFNNUkFNX0dQQQkJCTB4MTAwMDAwMAomIzQzOwomIzQzOy8qCiYjNDM7ICogU01JIGhhbmRsZXIgdGhhdCBydW5zIGluIDE2LWJpdCBSZWFsIE1vZGUuICBTeW5jcyB3aXRoIEwwIHZpYSBwb3J0IEkvTywgdGhlbgomIzQzOyAqIGV4ZWN1dGVzIFJTTSB0byB0cmlnZ2VyIHRoZSBjb25zdW1wdGlvbiBvZiBpbnZhbGlkIGd1ZXN0IHN0YXRlLgomIzQzOyAqLwomIzQzO3N0YXRpYyB1OCBzbWlfaGFuZGxlcltdID0gewomIzQzOwkweGU0LCBBUkJJVFJBUllfSU9fUE9SVCwJLyogSU4gJEFSQklUUkFSWV9JT19QT1JULCAlYWwgKi8KJiM0MzsJMHgwZiwgMHhhYSwJCQkvKiBSU00gKi8KJiM0Mzt9OwogCiBzdGF0aWMgdm9pZCBsMl9ndWVzdF9jb2RlKHZvaWQpCiB7CkBAIC0xOSw4ICYjNDM7MzQsOSBAQCBzdGF0aWMgdm9pZCBsMl9ndWVzdF9jb2RlKHZvaWQpCiAJICogR2VuZXJhdGUgYW4gZXhpdCB0byBMMCB1c2Vyc3BhY2UsIGkuZS4gbWFpbigpLCB2aWEgSS9PIHRvIGFuCiAJICogYXJiaXRyYXJ5IHBvcnQuCiAJICovCi0JYXNtIHZvbGF0aWxlKCYjMzQ7aW5iICUlZHgsICUlYWwmIzM0OwotCQkgICAgIDogOiBbcG9ydF0gJiMzNDtkJiMzNDsgKEFSQklUUkFSWV9JT19QT1JUKSA6ICYjMzQ7cmF4JiMzNDspOwomIzQzOwlhc20gdm9sYXRpbGUoJiMzNDtpbmIgJCYjMzQ7IF9fc3RyaW5naWZ5KEFSQklUUkFSWV9JT19QT1JUKSAmIzM0OywgJSVhbCYjMzQ7CiYjNDM7CQkgICAgIDo6OiAmIzM0O3JheCYjMzQ7KTsKJiM0MzsJR1VFU1RfRkFJTCgmIzM0O0wyIHJlc3VtZWQgYWZ0ZXIgc3R1ZmZpbmcgaW52YWxpZCBndWVzdCBzdGF0ZSYjMzQ7KTsKIH0KIAogc3RhdGljIHZvaWQgbDFfZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMpCkBAIC00NiwzNSAmIzQzOzYyLDUwIEBAIHN0YXRpYyB2b2lkIGwxX2d1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKQogCUdVRVNUX0RPTkUoKTsKIH0KIAotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKJiM0MztzdGF0aWMgdm9pZCB2Y3B1X3J1bl90b19pbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgd2FudF9sMikKIHsKLQlndmFfdCB2bXhfcGFnZXNfZ3ZhOwotCXN0cnVjdCBrdm1fc3JlZ3Mgc3JlZ3M7Ci0Jc3RydWN0IGt2bV92Y3B1ICp2Y3B1OwotCXN0cnVjdCBrdm1fcnVuICpydW47Ci0Jc3RydWN0IHVjYWxsIHVjOwomIzQzOwlzdHJ1Y3Qga3ZtX3J1biAqcnVuID0gdmNwdS0mZ3Q7cnVuOwogCi0JVEVTVF9SRVFVSVJFKGt2bV9jcHVfaGFzKFg4Nl9GRUFUVVJFX1ZNWCkpOwomIzQzOwl2Y3B1X3J1bih2Y3B1KTsKIAotCXZtID0gdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoJmFtcDt2Y3B1LCBsMV9ndWVzdF9jb2RlKTsKJiM0MzsJVEVTVF9BU1NFUlRfS1ZNX0VYSVRfUkVBU09OKHZjcHUsIEtWTV9FWElUX0lPKTsKIAotCS8qIEFsbG9jYXRlIFZNWCBwYWdlcyBhbmQgc2hhcmVkIGRlc2NyaXB0b3JzICh2bXhfcGFnZXMpLiAqLwotCXZjcHVfYWxsb2Nfdm14KHZtLCAmYW1wO3ZteF9wYWdlc19ndmEpOwotCXZjcHVfYXJnc19zZXQodmNwdSwgMSwgdm14X3BhZ2VzX2d2YSk7CiYjNDM7CVRFU1RfQVNTRVJUKHJ1bi0mZ3Q7aW8ucG9ydCA9PSBBUkJJVFJBUllfSU9fUE9SVCAmYW1wOyZhbXA7CiYjNDM7CQkgICAgKCEhKHJ1bi0mZ3Q7ZmxhZ3MgJmFtcDsgS1ZNX1JVTl9YODZfR1VFU1RfTU9ERSkgPT0gd2FudF9sMiAgfHwKJiM0MzsJCSAgICAgIWt2bV9oYXNfY2FwKEtWTV9DQVBfWDg2X0dVRVNUX01PREUpKSwKJiM0MzsJCSAgICAmIzM0O0V4cGVjdGVkIElOIGZyb20gcG9ydCAlZCBmcm9tIEwyLCBnb3QgcG9ydCAlZCBmcm9tIEwldSYjMzQ7LAomIzQzOwkJICAgIEFSQklUUkFSWV9JT19QT1JULCBydW4tJmd0O2lvLnBvcnQsCiYjNDM7CQkgICAgMSAmIzQzOyAhIShydW4tJmd0O2ZsYWdzICZhbXA7IEtWTV9SVU5fWDg2X0dVRVNUX01PREUpKTsKJiM0Mzt9CiAKLQl2Y3B1X3J1bih2Y3B1KTsKJiM0MztzdGF0aWMgc3RydWN0IGt2bV92bSAqdm1fY3JlYXRlX2FuZF9ydW5fbDIoc3RydWN0IGt2bV92Y3B1ICoqdmNwdSkKJiM0Mzt7CiYjNDM7CWd2YV90IHZteF9wYWdlc19ndmE7CiYjNDM7CXN0cnVjdCBrdm1fdm0gKnZtOwomIzQzOwomIzQzOwl2bSA9IHZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KHZjcHUsIGwxX2d1ZXN0X2NvZGUpOwogCi0JcnVuID0gdmNwdS0mZ3Q7cnVuOwomIzQzOwkvKiBBbGxvY2F0ZSBWTVggcGFnZXMgYW5kIHNoYXJlZCBkZXNjcmlwdG9ycyAodm14X3BhZ2VzKS4gKi8KJiM0MzsJdmNwdV9hbGxvY192bXgodm0sICZhbXA7dm14X3BhZ2VzX2d2YSk7CiYjNDM7CXZjcHVfYXJnc19zZXQoKnZjcHUsIDEsIHZteF9wYWdlc19ndmEpOwogCiAJLyoKIAkgKiBUaGUgZmlyc3QgZXhpdCB0byBMMCB1c2Vyc3BhY2Ugc2hvdWxkIGJlIGFuIEkvTyBhY2Nlc3MgZnJvbSBMMi4KIAkgKiBSdW5uaW5nIEwxIHNob3VsZCBsYXVuY2ggTDIgd2l0aG91dCB0cmlnZ2VyaW5nIGFuIGV4aXQgdG8gdXNlcnNwYWNlLgogCSAqLwotCVRFU1RfQVNTRVJUX0tWTV9FWElUX1JFQVNPTih2Y3B1LCBLVk1fRVhJVF9JTyk7CiYjNDM7CXZjcHVfcnVuX3RvX2lvKCp2Y3B1LCB0cnVlKTsKIAotCVRFU1RfQVNTRVJUKHJ1bi0mZ3Q7aW8ucG9ydCA9PSBBUkJJVFJBUllfSU9fUE9SVCwKLQkJICAgICYjMzQ7RXhwZWN0ZWQgSU4gZnJvbSBwb3J0ICVkIGZyb20gTDIsIGdvdCBwb3J0ICVkJiMzNDssCi0JCSAgICBBUkJJVFJBUllfSU9fUE9SVCwgcnVuLSZndDtpby5wb3J0KTsKJiM0MzsJcmV0dXJuIHZtOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB0ZXN0X2ludmFsaWRfbDJfZ3Vlc3Rfc3RhdGUodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrdm1fc3JlZ3Mgc3JlZ3M7CiYjNDM7CXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKJiM0MzsJc3RydWN0IGt2bV92bSAqdm07CiYjNDM7CXN0cnVjdCB1Y2FsbCB1YzsKJiM0MzsKJiM0MzsJdm0gPSB2bV9jcmVhdGVfYW5kX3J1bl9sMigmYW1wO3ZjcHUpOwogCiAJLyoKIAkgKiBTdHVmZiBpbnZhbGlkIGd1ZXN0IHN0YXRlIGZvciBMMiBieSBtYWtpbmcgVFIgdW51c2FibGUuICBUaGUgbmV4dApAQCAtOTYsNCAmIzQzOzEyNyw0OSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCWRlZmF1bHQ6CiAJCVRFU1RfRkFJTCgmIzM0O1VuZXhwZWN0ZWQgdWNhbGw6ICVsdSYjMzQ7LCB1Yy5jbWQpOwogCX0KJiM0MzsKJiM0MzsJa3ZtX3ZtX2ZyZWUodm0pOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB0ZXN0X2ludmFsaWRfbDJfZ3Vlc3Rfc3RhdGVfcnNtKHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7CiYjNDM7CXN0cnVjdCBrdm1fdm0gKnZtOwomIzQzOwl1MTYgKnRyX2F0dHJzOwomIzQzOwomIzQzOwlpZiAoIWt2bV9oYXNfY2FwKEtWTV9DQVBfWDg2X1NNTSkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXZtID0gdm1fY3JlYXRlX2FuZF9ydW5fbDIoJmFtcDt2Y3B1KTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogSW5qZWN0IFNNSSB3aGlsZSBMMiBpcyBhY3RpdmUsIHJ1biB0aGUgdkNQVSB0byBnZXQgSS9PIGV4aXQgZnJvbSBMMSwKJiM0MzsJICogdGhlbiBzdHVmZiBUUiBpbiB0aGUgU01SQU0gc3RhdGUtc2F2ZSBhcmVhIHNvIHRoYXQgUlNNIHJlc3RvcmVzCiYjNDM7CSAqIGludmFsaWQgTDIgc3RhdGUuCiYjNDM7CSAqLwomIzQzOwlzZXR1cF9zbXJhbSh2bSwgdmNwdSwgU01SQU1fR1BBLCBzbWlfaGFuZGxlciwgc2l6ZW9mKHNtaV9oYW5kbGVyKSk7CiYjNDM7CWluamVjdF9zbWkodmNwdSk7CiYjNDM7CiYjNDM7CXZjcHVfcnVuX3RvX2lvKHZjcHUsIGZhbHNlKTsKJiM0MzsKJiM0MzsJLyogQ2xlYXIgdGhlIHByZXNlbnQgYml0IGluIFNNUkFNIHRvIG1ha2UgVFIgdW51c2FibGUuICovCiYjNDM7CXRyX2F0dHJzID0gYWRkcl9ncGEyaHZhKHZtLCBTTVJBTV9HUEEgJiM0MzsgU01SQU02NF9UUl9BVFRSSUJVVEVTX09GRlNFVCk7CiYjNDM7CSp0cl9hdHRycyAmYW1wOz0gfkJJVCg3KTsKJiM0MzsKJiM0MzsJdmNwdV9ydW4odmNwdSk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEZvciBSU00sIEwxIGdldHMgdGhlIFNIVVRET1dOIGJlY2F1c2UgUlNNIGlzIGFyY2hpdGVjdHVyYWxseSBkZWZpbmVkCiYjNDM7CSAqIHRvIHJlc3VsdCBpbiBzaHV0ZG93biBpZiB0aGUgQ1BVIGRldGVjdHMgaW52YWxpZCBzdGF0ZSBpbiBTTVJBTS4KJiM0MzsJICovCiYjNDM7CVRFU1RfQVNTRVJUX0tWTV9FWElUX1JFQVNPTih2Y3B1LCBLVk1fRVhJVF9TSFVURE9XTik7CiYjNDM7CWt2bV92bV9mcmVlKHZtKTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKJiM0Mzt7CiYjNDM7CVRFU1RfUkVRVUlSRShrdm1fY3B1X2hhcyhYODZfRkVBVFVSRV9WTVgpKTsKJiM0MzsKJiM0MzsJdGVzdF9pbnZhbGlkX2wyX2d1ZXN0X3N0YXRlKCk7CiYjNDM7CXRlc3RfaW52YWxpZF9sMl9ndWVzdF9zdGF0ZV9yc20oKTsKIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjA6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODg5MwoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDY5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLVk0geDg2IFBhdGNoIGZvciBFbXVsYXRpb24gUmVxdWlyZW1lbnRzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgZnVuZGFtZW50YWxseSBhbHRlcnMgS1ZNJiMzOTtzIHg4NiBlbXVsYXRpb24gYmVoYXZpb3IsIHNwZWNpZmljYWxseSBpbiBob3cgaXQgaGFuZGxlcyBzaXR1YXRpb25zIHdoZXJlIHRoZSBndWVzdCBlbnRlcnMgYW4gaW52YWxpZCBzdGF0ZSwgcGFydGljdWxhcmx5IHVwb24gcmV0dXJuaW5nIGZyb20gU3lzdGVtIE1hbmFnZW1lbnQgTW9kZSAoU01NKSDigJMgdGhhdCYjMzk7cyBSU00sIHRvIGJlIGNsZWFyLiBUaGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIHJldm9sdmUgYXJvdW5kIHRoZSBgdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZGAgYW5kIGB2Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uYCBmdW5jdGlvbnMuIEVzc2VudGlhbGx5LCB0aGV5JiMzOTt2ZSByZW5hbWVkIGB2Y3B1X3ByZV9ydW5gIHRvIGB2Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uYCBhbmQgbm93IGhhdmUgYHVuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWRgIHdoaWNoIGlzIGNhbGxlZCBpbiBgZW11bGF0b3JfbGVhdmVfc21tYC4KClRoZSBkaWZmIHNob3dzIHRoYXQgYGVtdWxhdG9yX2xlYXZlX3NtbWAgbm93IGNhbGxzIGB1bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkYCBhZnRlciB0aGUgc3RhbmRhcmQgZW11bGF0aW9uLiBJZiB0aGlzIGNoZWNrIGZhaWxzLCB0aGVuIHdlIGdldCBgWDg2RU1VTF9VTkhBTkRMRUFCTEVgLiBUaGF0JiMzOTtzIGEgY3JpdGljYWwgcG9pbnQuIEZ1cnRoZXJtb3JlLCBga3ZtX3g4Nl92Y3B1X3ByZV9ydW5gIGhhcyBiZWVuIHNpZ25pZmljYW50bHkgbW9kaWZpZWQgdG8gY2hlY2sgYHZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb25gIGFuZCB0aGVuLCBpZiB0aGUgaW5pdGlhbGl6YXRpb24gaXNuJiMzOTt0IG5lZWRlZCwgY2hlY2tzIGlmIGB1bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkYCBpcyBzZXQuIElmICp0aGF0KiB0cmlnZ2VycywgaXQgc2V0cyB1cCBhIGBrdm1fcHJlcGFyZV9lbXVsYXRpb25fZmFpbHVyZV9leGl0YCBhbmQgcmV0dXJucy4gVGhlIG5ldyBzZWxmdGVzdCAoYHZteF9pbnZhbGlkX25lc3RlZF9ndWVzdF9zdGF0ZS5jYCkgaXMgYSBjbGVhciBpbmRpY2F0aW9uIHRoYXQgdGhpcyBSU00gc2NlbmFyaW8gd2l0aCBhbiBpbnZhbGlkIEwyIHN0YXRlIGlzIHByZWNpc2VseSB3aGF0JiMzOTtzIGJlaW5nIGFkZHJlc3NlZC4KCkdpdmVuIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBkZWVwIHdpdGhpbiBLVk0geDg2IGNvcmUsIGl0JiMzOTtzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRvIHBheSBhdHRlbnRpb24gdG8uIFNpbmNlIEtWTSBpcyBoZWF2aWx5IGZ1enplZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGFuZCBzeXprYWxsZXIgc3VwcG9ydHMgS1ZNIGZ1enppbmcsIGl0JiMzOTtzIGFic29sdXRlbHkgd29ydGggdGhlIGVmZm9ydCB0byBjaGVjayB0aGlzIG91dC4KCkkgc2hvdWxkIGZvY3VzIG15IGF0dGVudGlvbiBvbiB0aGVzZSBmdW5jdGlvbnMgc3BlY2lmaWNhbGx5OiBgZW11bGF0b3JfbGVhdmVfc21tYCwgYGt2bV94ODZfdmNwdV9wcmVfcnVuYCAoYW5kLCBzdGF0aWNhbGx5LCB0aGUgY2FsbCBzaXRlIGluIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmApLCBgdm14X3VuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWRgLCBgc2V2X3ZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb25gLCBhbmQgYHRkeF92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uYC4gTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGNvZGUgZm9yIGBlbXVsYXRvcl9sZWF2ZV9zbW1gIGFuZCBga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5gIHRvIHNlZSBob3cgdGhlc2UgbmV3bHkgaW50cm9kdWNlZCBjaGVja3MgZml0IGludG8gdGhlIGV4aXN0aW5nIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjA6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZW11bGF0b3JfbGVhdmVfc21tJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zbW0uYz01MTY9c3RhdGljIGludCByc21fbG9hZF9zdGF0ZV82NChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCxcbi0tXG5hcmNoL3g4Ni9rdm0vc21tLmMtNTcyLVxuYXJjaC94ODYva3ZtL3NtbS5jOjU3MzppbnQgZW11bGF0b3JfbGVhdmVfc21tKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KVxuYXJjaC94ODYva3ZtL3NtbS5jLTU3NC17XG4tLVxuYXJjaC94ODYva3ZtL3NtbS5oPTE1OD12b2lkIGVudGVyX3NtbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuYXJjaC94ODYva3ZtL3NtbS5oOjE1OTppbnQgZW11bGF0b3JfbGVhdmVfc21tKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KTtcbmFyY2gveDg2L2t2bS9zbW0uaC0xNjAtdm9pZCBwcm9jZXNzX3NtaShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuLS1cbmFyY2gveDg2L2t2bS9zbW0uaD0xNjM9c3RhdGljIGlubGluZSBib29sIGlzX3NtbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpIHsgcmV0dXJuIGZhbHNlOyB9XG4tLVxuYXJjaC94ODYva3ZtL3NtbS5oLTE2NS0vKlxuYXJjaC94ODYva3ZtL3NtbS5oOjE2NjogKiBlbXVsYXRvcl9sZWF2ZV9zbW0gaXMgdXNlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIsIHNvIHRoZVxuYXJjaC94ODYva3ZtL3NtbS5oLTE2Ny0gKiBzdHViIGlzIGRlZmluZWQgaW4geDg2LmMuXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTU3NTQ9c3RhdGljIGJvb2wgZW11bGF0b3JfaXNfc21tKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy01NzU5LSNpZm5kZWYgQ09ORklHX0tWTV9TTU1cbmFyY2gveDg2L2t2bS94ODYuYzo1NzYwOnN0YXRpYyBpbnQgZW11bGF0b3JfbGVhdmVfc21tKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KVxuYXJjaC94ODYva3ZtL3g4Ni5jLTU3NjEte1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYz01ODE0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgeDg2X2VtdWxhdGVfb3BzIGVtdWxhdGVfb3BzID0ge1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYy01ODU2LVx0LmlzX3NtbSAgICAgICAgICAgICAgPSBlbXVsYXRvcl9pc19zbW0sXG5hcmNoL3g4Ni9rdm0veDg2LmM6NTg1NzpcdC5sZWF2ZV9zbW0gICAgICAgICAgID0gZW11bGF0b3JfbGVhdmVfc21tLFxuYXJjaC94ODYva3ZtL3g4Ni5jLTU4NTgtXHQudHJpcGxlX2ZhdWx0ICAgICAgICA9IGVtdWxhdG9yX3RyaXBsZV9mYXVsdCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDc5OQoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkV4YW1pbmluZyBQb3RlbnRpYWwgRm9jdXMgU3ltYm9scyoqCgpSaWdodCwgdGhpbmtpbmcgYWJvdXQgcmVmaW5pbmcgbXkgYW5hbHlzaXMsIEkgbmVlZCBhIGNsZWFyIGZvY3VzIHBvaW50LiBgZW11bGF0b3JfbGVhdmVfc21tYCBpcyBhIHN0cm9uZyBjb250ZW5kZXI7IGl0JiMzOTtzIGEgd2VsbC1kZWZpbmVkIHBvaW50IG9mIHBvdGVudGlhbCB0cmFuc2l0aW9uIG9yIHZ1bG5lcmFiaWxpdHkgd2l0aGluIHRoZSBlbXVsYXRpb24gcHJvY2VzcywgdGhhdCBnaXZlcyBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEJ1dCwgSSYjMzk7bSBhbHJlYWR5IHRoaW5raW5nIGFib3V0IG90aGVyIGZ1bmN0aW9ucyBpbiBteSBjdXJyZW50IGFzc2Vzc21lbnQuCgpJIHdvbmRlciBhYm91dCB0aGUgdmFsdWUgb2Ygc2hpZnRpbmcgbXkgZm9jdXMgdG8gYGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuYC4gVGhhdCBmdW5jdGlvbiBpcyBjZXJ0YWlubHkgY3JpdGljYWwgdG8gdGhlIGV4ZWN1dGlvbiBvZiBndWVzdCBjb2RlIHdpdGhpbiB0aGUgS1ZNIGVudmlyb25tZW50LiBJdCYjMzk7cyBhIGtleSBlbnRyeSBwb2ludCBmb3IgaGFuZGxpbmcgaW5zdHJ1Y3Rpb25zIGFuZCBpbnRlcmFjdGlvbnMgZnJvbSB0aGUgdmlydHVhbCBDUFUuIERlcGVuZGluZyBvbiB0aGUgbGV2ZWwgb2YgYW5hbHlzaXMgbmVlZGVkLCB0aGF0IGZ1bmN0aW9uIGNvdWxkIG9mZmVyIGluc2lnaHQgaW50byBhIGJyb2FkZXIgcmFuZ2Ugb2YgcG90ZW50aWFsbHkgaW50ZXJlc3RpbmcgYXR0YWNrIHN1cmZhY2VzIGFuZCBiZWhhdmlvcnMuIEl0JiMzOTtzIHRpbWUgdG8gZXZhbHVhdGUgaG93IEkgd2FudCB0byBzdHJ1Y3R1cmUgbXkgYXNzZXNzbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMDowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fYXJjaF92Y3B1X2lvY3RsX3J1biYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L2t2bS9hcm0uYz0xMDY2PXN0YXRpYyBpbnQga3ZtX3ZjcHVfc3VzcGVuZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9hcm02NC9rdm0vYXJtLmMtMTA5Mi1cdCAqIE90aGVyd2lzZSwgd2Ugd2VyZSB1bmJsb2NrZWQgdG8gcHJvY2VzcyBhIGRpZmZlcmVudCBldmVudCwgc3VjaCBhcyBhXG5hcmNoL2FybTY0L2t2bS9hcm0uYzoxMDkzOlx0ICogcGVuZGluZyBzaWduYWwuIFJldHVybiAxIGFuZCBhbGxvdyBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bigpIHRvXG5hcmNoL2FybTY0L2t2bS9hcm0uYy0xMDk0LVx0ICogcHJvY2VzcyB0aGUgZXZlbnQuXG4tLVxuYXJjaC9hcm02NC9rdm0vYXJtLmM9MTIzMD1zdGF0aWMgaW50IG5vaW5zdHIga3ZtX2FybV92Y3B1X2VudGVyX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvYXJtNjQva3ZtL2FybS5jLTEyNDEtLyoqXG5hcmNoL2FybTY0L2t2bS9hcm0uYzoxMjQyOiAqIGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuIC0gdGhlIG1haW4gVkNQVSBydW4gZnVuY3Rpb24gdG8gZXhlY3V0ZSBndWVzdCBjb2RlXG5hcmNoL2FybTY0L2t2bS9hcm0uYy0xMjQzLSAqIEB2Y3B1Olx0VGhlIFZDUFUgcG9pbnRlclxuLS1cbmFyY2gvYXJtNjQva3ZtL2FybS5jLTEyNTAtICovXG5hcmNoL2FybTY0L2t2bS9hcm0uYzoxMjUxOmludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL2FybTY0L2t2bS9hcm0uYy0xMjUyLXtcbi0tXG5hcmNoL2FybTY0L2t2bS9oeXAvbnZoZS9zd2l0Y2guYz0yMjY9c3RhdGljIGlubGluZSBib29sIGZpeHVwX2d1ZXN0X2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgKmV4aXRfY29kZSlcbi0tXG5hcmNoL2FybTY0L2t2bS9oeXAvbnZoZS9zd2l0Y2guYy0yMzgtXHQgKiBpdC4gIFRoZSBjaGVjayBiZWxvdyBpcyBiYXNlZCBvbiB0aGUgb25lIGluXG5hcmNoL2FybTY0L2t2bS9oeXAvbnZoZS9zd2l0Y2guYzoyMzk6XHQgKiBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bigpLlxuYXJjaC9hcm02NC9rdm0vaHlwL252aGUvc3dpdGNoLmMtMjQwLVx0ICovXG4tLVxuYXJjaC9sb29uZ2FyY2gva3ZtL3ZjcHUuYz0xODI1PXZvaWQga3ZtX2FyY2hfdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvbG9vbmdhcmNoL2t2bS92Y3B1LmMtMTg0OC1cbmFyY2gvbG9vbmdhcmNoL2t2bS92Y3B1LmM6MTg0OTppbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC9sb29uZ2FyY2gva3ZtL3ZjcHUuYy0xODUwLXtcbi0tXG5hcmNoL21pcHMva3ZtL21pcHMuYz00MTE9c3RhdGljIGludCBub2luc3RyIGt2bV9taXBzX3ZjcHVfZW50ZXJfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9taXBzL2t2bS9taXBzLmMtNDIxLVxuYXJjaC9taXBzL2t2bS9taXBzLmM6NDIyOmludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL21pcHMva3ZtL21pcHMuYy00MjMte1xuLS1cbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jPTE3MzI9aW50IGt2bV92Y3B1X2lvY3RsX3NldF9vbmVfcmVnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9vbmVfcmVnICpyZWcpXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMtMTc4MC1cbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jOjE3ODE6aW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jLTE3ODIte1xuLS1cbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYz03NTA9c3RhdGljIHZvaWQgbm9pbnN0ciBrdm1fcmlzY3ZfdmNwdV9lbnRlcl9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmMtNzU5LVx0ICogSFRJTlNUKSBoZXJlIGJlY2F1c2Ugd2UgZG8gbG9jYWxfaXJxX2VuYWJsZSgpIGFmdGVyIHRoaXNcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYzo3NjA6XHQgKiBmdW5jdGlvbiBpbiBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bigpIHdoaWNoIGNhbiByZXN1bHQgaW5cbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYy03NjEtXHQgKiBhbiBpbnRlcnJ1cHQgaW1tZWRpYXRlbHkgYWZ0ZXIgbG9jYWxfaXJxX2VuYWJsZSgpIGFuZCBjYW5cbi0tXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmMtODI5LVxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jOjgzMDppbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jLTgzMS17XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTQ5OTc9c3RhdGljIHZvaWQgc3RvcmVfcmVncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTUwMTctXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NTAxODppbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTUwMTkte1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYz04ODQ0PXN0YXRpYyBpbnQga3ZtX3g4Nl92Y3B1X3ByZV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy04ODgwLVxuYXJjaC94ODYva3ZtL3g4Ni5jOjg4ODE6aW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS94ODYuYy04ODgyLXtcbi0tXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg9MTYyMz1pbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfZ3Vlc3RfZGVidWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTE2MjQtXHRcdFx0XHRcdHN0cnVjdCBrdm1fZ3Vlc3RfZGVidWcgKmRiZyk7XG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg6MTYyNTppbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0xNjI2LVxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmM9NDQxND1zdGF0aWMgbG9uZyBrdm1fdmNwdV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQ0NzctXHRcdHZjcHUtXHUwMDNld2FudHNfdG9fcnVuID0gIVJFQURfT05DRSh2Y3B1LVx1MDAzZXJ1bi1cdTAwM2VpbW1lZGlhdGVfZXhpdF9fdW5zYWZlKTtcbnZpcnQva3ZtL2t2bV9tYWluLmM6NDQ3ODpcdFx0ciA9IGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKHZjcHUpO1xudmlydC9rdm0va3ZtX21haW4uYy00NDc5LVx0XHR2Y3B1LVx1MDAzZXdhbnRzX3RvX3J1biA9IGZhbHNlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIwOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNzc4CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqUmVmbGVjdGluZyBvbiBLVk0gRW50cnkgUG9pbnRzKioKCkhtbSwgYGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuYOKApiBpdCBqdXN0IGZlZWxzIGEgbGl0dGxlICp0b28qIGJyb2FkLCBkb2VzbiYjMzk7dCBpdD8gSXQmIzM5O3MgdGhlIGNvcmUgZW50cnkgcG9pbnQgZm9yIEtWTSB2Q1BVIGV4ZWN1dGlvbiwgc3VyZSwgYnV0IHRoZSBuYW1lIGl0c2VsZiBkb2VzbiYjMzk7dCBzY3JlYW0gYW55dGhpbmcgc3BlY2lmaWMgYWJvdXQgKndoYXQqIGl0JiMzOTtzIGRvaW5nLiBJIG1lYW4sIGl04oCZcyBub3QgKndyb25nKiwgYnV0IGl0IGxhY2tzIGEgY2VydGFpbuKApiBncmFudWxhcml0eS4gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgdG8gaW1wcm92ZSB0aGUgY29kZS4gSXTigJlzIGxpa2UgY2FsbGluZyBhbiBlbnRpcmUgb3BlcmF0aW5nIHN5c3RlbSBmdW5jdGlvbiAmIzM0O3Byb2Nlc3NfZXhlY3V0aW9uJiMzNDsuIAoKTm93LCBsZXQmIzM5O3MgY29uc2lkZXIgYW5vdGhlciBuYW1lLCBwZXJoYXBzIHNvbWV0aGluZyBtb3JlIGRlc2NyaXB0aXZlLiBJ4oCZdmUgYmVlbiB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBmdW5jdGlvbiwgYW5kIEkmIzM5O20gcmVtaW5kZWQgb2YgYHZteF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkYC4gSXQmIzM5O3MgYSBiaXQgb2YgYSBtb3V0aGZ1bCwgYWRtaXR0ZWRseSwgYnV0IGl0IHBvaW50cyB0byBhIHZlcnkgc3BlY2lmaWMgYW5kIGNyaXRpY2FsIGFzcGVjdCBvZiB0aGUgS1ZNIHdvcmtmbG93OiB3aGVuIHRoZSBoYXJkd2FyZSBjYW4mIzM5O3QgZGlyZWN0bHkgaGFuZGxlIHNvbWV0aGluZy4gSXQmIzM5O3MgdGhhdCBjYXNlIHdoZW4gdGhlIHNvZnR3YXJlIG5lZWRzIHRvIGVtdWxhdGUgc29tZXRoaW5nIHRoYXQgdGhlIENQVSBjYW4mIzM5O3QgbWFuYWdlIG9uIGl0cyBvd24uIAoKTWF5YmUgdGhlIG5hbWUgY291bGQgYmUgYSBjb21wcm9taXNlPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIwOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZteF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvbWFpbi5jPTE2Nj1zdGF0aWMgYm9vbCB2dF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xNzItXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzoxNzM6XHRyZXR1cm4gdm14X3VuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQodmNwdSk7XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xNzQtfVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmM9NjAyMT1zdGF0aWMgaW50IGhhbmRsZV9ubWlfd2luZG93KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTYwMzctICovXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjYwMzg6Ym9vbCB2bXhfdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTYwMzkte1xuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmM9NjA2NT1zdGF0aWMgaW50IGhhbmRsZV9pbnZhbGlkX2d1ZXN0X3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTYwOTAtXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjYwOTE6XHRcdGlmICh2bXhfdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZCh2Y3B1KSkge1xuYXJjaC94ODYva3ZtL3ZteC92bXguYy02MDkyLVx0XHRcdGt2bV9wcmVwYXJlX2VtdWxhdGlvbl9mYWlsdXJlX2V4aXQodmNwdSk7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmg9MzI9dm9pZCB2bXhfdXBkYXRlX2VtdWxhdGVkX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG5hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaDozMzpib29sIHZteF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG5hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaC0zNC1pbnQgdm14X3NldF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgbXNyX2RhdGEgKm1zcl9pbmZvKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzY4NAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gaW50ZXJuYWwgcHJvY2VzczoKCioqSW50ZXJuYWwgQXVkaXQgb2YgRm9jdXMgU3ltYm9scyBhbmQgUG90ZW50aWFsIEV4cGFuc2lvbioqCgpSaWdodCwgc28gYHZteF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkYCDigJMgdGhhdCYjMzk7cyBhIHNvbGlkIGlkZW50aWZpZXIsIGEgZ29vZCBqdW1waW5nLW9mZiBwb2ludCBmb3IgdGhpcyBjdXJyZW50IGxpbmUgb2YgaW52ZXN0aWdhdGlvbi4gSXQgY2xlYXJseSBmbGFncyBhIHNwZWNpZmljIHNjZW5hcmlvLiBOb3csIHRoZSBuZXh0IHF1ZXN0aW9uIGlzIGFsd2F5cywgYXJlIHdlIG1pc3NpbmcgYW55dGhpbmc/IElzIHRoZXJlIGEgYnJvYWRlciBzZXQgb2YgY2lyY3Vtc3RhbmNlcyB0byBjb25zaWRlciB0aGF0IHRoaXMgc2luZ3VsYXIgdGVybSBkb2VzbiYjMzk7dCBxdWl0ZSBlbmNvbXBhc3M/CgpNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGEgY291cGxlIG9mIHJlbGF0ZWQgYXJlYXMsIHBhcnRpY3VsYXJseSB0aGUgc2VjdXJlIGV4ZWN1dGlvbiBlbnZpcm9ubWVudHMgd2UmIzM5O3JlIHNlZWluZyBtb3JlIGFuZCBtb3JlIG9mLiBTcGVjaWZpY2FsbHksIEkgd29uZGVyIGlmIHdlIHNob3VsZCBleHBhbmQgdGhlIGZvY3VzIGFuZCBjb25zaWRlciBpZiBgdGR4X3ZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb25gIGFuZCBgc2V2X3ZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb25gIG1pZ2h0IGFsc28gYmUgdmFsdWFibGUgZm9jdXMgc3ltYm9scy4gVGhleSYjMzk7cmUgcmVsYXRlZC4gSWYgdGhhdCBzeW1ib2wgZG9lcyBub3QgZXhpc3QsIHRoZW4gaXQgc2hvdWxkLiBXZSBuZWVkIHN5bWJvbHMgZm9yIHRob3NlLiBJIHNob3VsZCBwcm9iYWJseSBhZGQgdGhvc2UgdG8gYSBsaXN0IHNvbWV3aGVyZS4gUGVyaGFwcyB0aGlzIGNvdWxkIGVuY29tcGFzcyBhIHdob2xlIGNsYXNzIG9mIHNpbWlsYXIgc2l0dWF0aW9ucywgYW5kIHRob3NlIHN5bWJvbHMgd2lsbCBoZWxwIHJlZmluZSB0aGUgZm9jdXMgb2YgYW5hbHlzaXMuIEEgbW9yZSBjb21wcmVoZW5zaXZlIGFwcHJvYWNoIHRvIGNhdGNoaW5nIGVkZ2UgY2FzZXMsIHNvIHRvIHNwZWFrLiBJdCYjMzk7cyBhYm91dCBlbnN1cmluZyB3ZSYjMzk7cmUgbm90IGp1c3QgcmVhY3RpbmcgdG8gYHZteF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkYCBpbiBpc29sYXRpb24gYnV0IHNlZWluZyB0aGUgYmlnZ2VyIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIwOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RkeF92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvbWFpbi5jPTE0Mz1zdGF0aWMgYm9vbCB2dF92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xNDUtXHRyZXR1cm4gaXNfdGRfdmNwdSh2Y3B1KSBcdTAwMjZcdTAwMjZcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjE0NjpcdCAgICAgICB0ZHhfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbih2Y3B1KTtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTE0Ny19XG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYz04NjM9dm9pZCB0ZHhfdmNwdV9mcmVlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTg5OS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6OTAwOmJvb2wgdGR4X3ZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy05MDEte1xuLS1cbmFyY2gveDg2L2t2bS92bXgveDg2X29wcy5oPTEzOT12b2lkIHRkeF92Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KTtcbmFyY2gveDg2L2t2bS92bXgveDg2X29wcy5oOjE0MDpib29sIHRkeF92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG5hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaC0xNDEtZmFzdHBhdGhfdCB0ZHhfdmNwdV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgcnVuX2ZsYWdzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjA6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ0NjQKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkluaXRpYWwgQXNzZXNzbWVudCBvZiBhIFREWCB2Q1BVJiMzOTtzIFN0YXR1cyoqCgpSaWdodCwgYHRkeF92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uYC4gVGhhdCYjMzk7cyBhIGdvb2Qgc2lnbi4gSXQgaW1tZWRpYXRlbHkgc3VnZ2VzdHMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIHZDUFUgdGhhdCYjMzk7cyBhdCB0aGUgY29ycmVjdCBzdGFnZTogcmVhZHksIGJ1dCBub3QgeWV0IGZ1bGx5IGNvbmZpZ3VyZWQgd2l0aGluIHRoZSBURFggZW52aXJvbm1lbnQuIFRoaXMgZmxhZywgaWYgc2V0IGFzIGV4cGVjdGVkLCBjb25maXJtcyB0aGF0IHRoZSBpbmZyYXN0cnVjdHVyZSBoYXMgcHJvcGVybHkgaWRlbnRpZmllZCB0aGlzIHZpcnR1YWwgQ1BVIGFzIHJlcXVpcmluZyB0aGUgcHJvcGVyIFREWCBzZXR1cCBwcm9jZWR1cmVzLiBUaGlzIG1lYW5zIHRoZSBvdmVyYWxsIFREWCBhcmNoaXRlY3R1cmUgaXMgZnVuY3Rpb25pbmcsIGF0IGxlYXN0IGF0IHRoaXMgcHJlbGltaW5hcnkgc3RhZ2UuIFdlIGNhbiBwcm9iYWJseSBtYWtlIGEgZ29vZCBjb25jbHVzaW9uIGZyb20gdGhlcmUgYW5kIGtlZXAgbW92aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMDowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZXZfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTM1Mjk9dm9pZCBzZXZfZnJlZV92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTM1NTgtXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjM1NTk6Ym9vbCBzZXZfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTM1NjAte1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9NTMyMj1zdHJ1Y3Qga3ZtX3g4Nl9vcHMgc3ZtX3g4Nl9vcHMgX19pbml0ZGF0YSA9IHtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTU0MzctI2lmZGVmIENPTkZJR19LVk1fQU1EX1NFVlxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo1NDM4Olx0LnZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24gPSBzZXZfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbixcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNTQzOS1cdC5kZXZfZ2V0X2F0dHIgPSBzZXZfZGV2X2dldF9hdHRyLFxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg9OTc5PXZvaWQgc2V2X2VzX3VubWFwX2doY2Ioc3RydWN0IHZjcHVfc3ZtICpzdm0pO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtOTgxLSNpZmRlZiBDT05GSUdfS1ZNX0FNRF9TRVZcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg6OTgyOmJvb2wgc2V2X3ZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtOTgzLWludCBzZXZfbWVtX2VuY19pb2N0bChzdHJ1Y3Qga3ZtICprdm0sIHZvaWQgX191c2VyICphcmdwKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjA6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxMDYKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAzMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLVk0gUGF0Y2ggZm9yIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIGBzZXZfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbmAgbG9va3MgcHJvbWlzaW5nLCB0aGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTm93LCB0aGUgcmVhbCBxdWVzdGlvbiBpcywgd2hhdCBDT05GSUcgb3B0aW9ucyBhcmUgZ29pbmcgdG8gYmUgY3JpdGljYWwgZm9yIHRoaXMgcGF0Y2ggdG8gZnVuY3Rpb24gY29ycmVjdGx5PwoKSSBzZWUgdGhlIHBhdGNoIHRvdWNoZXMgYSBidW5jaCBvZiBLVk0tcmVsYXRlZCBmaWxlczogYHNtbS5jYCwgYHN2bS9zZXYuY2AsIGBzdm0vc3ZtLmNgLCBgdm14L21haW4uY2AsIGB2bXgvdGR4LmNgLCBgdm14L3ZteC5jYCwgYW5kIGB4ODYuY2AuIFRoYXQmIzM5O3MgYSBjbGVhciBpbmRpY2F0aW9uIHRoYXQgS1ZNIGl0c2VsZiBpcyBnb2luZyB0byBiZSBhIGhhcmQgcmVxdWlyZW1lbnQg4oCTIGBDT05GSUdfS1ZNYCBpcyBwcmV0dHkgc3RhbmRhcmQgYWNyb3NzIEtWTSBidWlsZHMsIHNvIHRoYXQmIzM5O3MgYSBnaXZlbi4KCkxldCYjMzk7cyBkaWcgaW4gYSBiaXQgbW9yZS4gTG9va2luZyBhdCBgYXJjaC94ODYva3ZtL3N2bS9zdm0uY2AsIEkgc3BvdCBhIHJlZmVyZW5jZSB0byBgQ09ORklHX0tWTV9BTURfU0VWYCwgc3BlY2lmaWNhbGx5OgoKYGBgYwojaWZkZWYgQ09ORklHX0tWTV9BTURfU0VWCgkudmNwdV9uZWVkc19pbml0aWFsaXphdGlvbiA9IHNldl92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uLApgYGAKCkJpbmdvISBUaGF0IHNlZW1zIHByZXR0eSBleHBsaWNpdC4gYEtWTV9BTURfU0VWYCBpcyBkZWZpbml0ZWx5IGdvaW5nIHRvIGJlIGEga2V5IGNvbmZpZyB0byBlbmFibGUgaGVyZS4gSXQgaXMgZGVmaW5pdGVseSBpbXBvcnRhbnQsIGFuZCBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IGl0IGlzIGluY2x1ZGVkLgoKQW5kIHRoZW4gSSBzZWUgYENPTkZJR19LVk1fU01NYCBtZW50aW9uZWQgaW4gYGFyY2gveDg2L2t2bS92bXgveDg2X29wcy5oYDoKCmBgYGMKI2lmZGVmIENPTkZJR19LVk1fU01NCmBgYAoKU28sIGxldCBtZSBqdXN0IGNoZWNrIGlmIHRoYXQgaXMgYWN0dWFsbHkgYSBjb25maWd1cmF0aW9uIHRoYXQgbmVlZHMgdG8gYmUgaW5jbHVkZWQuIEkgbmVlZCB0byBrZWVwIGFuIGV5ZSBvbiB0aGlzIG9uZSwgZm9yIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIwOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk1fU01NJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnPTE3Mz1jb25maWcgS1ZNX0lPQVBJQ1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE4Mzpjb25maWcgS1ZNX1NNTVxuYXJjaC94ODYva3ZtL0tjb25maWctMTg0LVx0Ym9vbCBcJiMzNDtTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIGVtdWxhdGlvblwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTkyNgoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OgoKKipDaGVja2luZyB0aGUgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKUmlnaHQsIHNvIGBLVk1fU01NYCwgdGhhdCYjMzk7cyBkZWZpbml0ZWx5IGEgY29uZmlndXJhdGlvbiBvcHRpb24sIGEga25vd24gcXVhbnRpdHkuIE15IGZvY3VzIG5vdyBpcywgaXMgdGhlcmUgYSByZWxhdGVkIFREWCAoVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMpIGNvbmZpZ3VyYXRpb24/IEl0JiMzOTtzIHRoZSBsb2dpY2FsIG5leHQgc3RlcCBpbiBteSBhc3Nlc3NtZW50LCBJIG5lZWQgdG8ga25vdyBpZiBpdCYjMzk7cyB0aGVyZS4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gZXN0YWJsaXNoIHRoZSBzY29wZSBvZiByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLCBhbmQgVERYIGlzIHRoZSBrZXkgcG9pbnQgSSBoYXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMDowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNX0lOVEVMX1REWCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXHRib29sIFwmIzM0O0ludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjA6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYxOTEKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25maWd1cmF0aW9uIFJldmlldyoqCgpPa2F5LCBzbyBJJiMzOTttIGRlYWxpbmcgd2l0aCB0aGUgYEtWTV9JTlRFTF9URFhgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBZZXAsIHRoYXQmIzM5O3MgZGVmaW5pdGVseSBhIGNvbmZpZywgbm8gcXVlc3Rpb24uIFRoZSBnb2FsIGhlcmUgaXMgdG8gZ2V0IGV2ZXJ5dGhpbmcgc2V0IHVwIGNvcnJlY3RseSBmb3IgdGhpcyBzcGVjaWZpYyB2aXJ0dWFsaXphdGlvbiB0ZWNoLgoKQWxyaWdodCwgc28gdG8gbWFrZSB0aGlzIHRoaW5nIHdvcmssIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlc2UgYXJlIGVuYWJsZWQgdG9vOiBgS1ZNYCwgYEtWTV9TTU1gLCBgS1ZNX0FNRF9TRVZgLCBhbmQgb2YgY291cnNlIGBLVk1fSU5URUxfVERYYCBpdHNlbGYuIFRoYXQmIzM5O3MgYSBwcmV0dHkgc3RhbmRhcmQgc2V0IG9mIGJhc2UgcmVxdWlyZW1lbnRzLCBub3RoaW5nIHRvbyBzdXJwcmlzaW5nLgoKTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBLVk1fSU5URUxfVERYYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgcmVhbCBkZXRhaWwgbGllcywgdGhlIGdyb3VuZHdvcmsuIE5lZWQgdG8ga25vdyB3aGF0IGVsc2UgdGhpcyByZWxpZXMgb24uIFRpbWUgdG8gY2hlY2sgdGhvc2UgZGVwZW5kZW5jaWVzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNX0lOVEVMX1REWCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzQ6Y29uZmlnIEtWTV9JTlRFTF9URFhcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cdGJvb2wgXCYjMzQ7SW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjU5OQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gS1ZNIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgYSBzcGVjaWZpYyBhc3BlY3Qgb2YgdGhlIEtWTSBhcmNoaXRlY3R1cmUgb24geDg2LCBwcm9iYWJseSByZWxhdGVkIHRvIGEgZmVhdHVyZSBvciBzZXR0aW5nLiBNeSBpbnR1aXRpb24gdGVsbHMgbWUgdG8gY2hlY2sgdGhlIGBLY29uZmlnYCBmaWxlLCBhcyBpdCYjMzk7cyB0aGUgdXN1YWwgc3RhcnRpbmcgcG9pbnQgZm9yIGV4cGxvcmluZyBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSYjMzk7bSBnb2luZyB0byBqdW1wIHRvIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AgYW5kIHpvb20gaW4gYXJvdW5kIGxpbmUgMTM0LiBUaGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhleSBwdXQgdGhlIG1vcmUgc3BlY2lmaWMgY29uZmlnIG9wdGlvbnMgcmVsYXRpbmcgdG8gdGhlIEtWTS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgdGhlIHJlbGV2YW50IHNldHRpbmdzIGFuZCBkZXBlbmRlbmNpZXMuIFRoaXMgaXMgb2Z0ZW4gd2hlcmUgdGhpbmdzIGxpa2UgZmVhdHVyZSBmbGFncyBvciBkZXZpY2Ugc3VwcG9ydCBhcmUgZGVmaW5lZCwgc28gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB3aGF0IEkmIzM5O20gbG9va2luZyBmb3IgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIwOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEzMDpcdFx0ICBndWVzdHMgdmlhIGEgZGV2aWNlIG5vZGUsIGUuZy4gL2Rldi9zZ3hfdmVwYy5cbiAxMzE6XHRcbiAxMzI6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAxMzM6XHRcbiAxMzQ6XHRjb25maWcgS1ZNX0lOVEVMX1REWFxuIDEzNTpcdFx0Ym9vbCBcJiMzNDtJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBzdXBwb3J0XCYjMzQ7XG4gMTM2Olx0XHRkZWZhdWx0IHlcbiAxMzc6XHRcdGRlcGVuZHMgb24gSU5URUxfVERYX0hPU1RcbiAxMzg6XHRcdHNlbGVjdCBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xuIDEzOTpcdFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9QT1BVTEFURVxuIDE0MDpcdFx0aGVscFxuIDE0MTpcdFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBsYXVuY2hpbmcgSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWClcbiAxNDI6XHRcdCAgY29uZmlkZW50aWFsIFZNcyBvbiBJbnRlbCBwcm9jZXNzb3JzLlxuIDE0MzpcdFxuIDE0NDpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDE0NTpcdFxuIDE0NjpcdGNvbmZpZyBLVk1fQU1EXG4gMTQ3Olx0XHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcJiMzNDtcbiAxNDg6XHRcdGRlcGVuZHMgb24gS1ZNIFx1MDAyNlx1MDAyNiAoQ1BVX1NVUF9BTUQgfHwgQ1BVX1NVUF9IWUdPTilcbiAxNDk6XHRcdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcxNDAKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBrZWVwaW5nIGluIG1pbmQgbXkgZXhwZXJ0aXNlIGluIHRoaXMgYXJlYToKCioqQW5hbHl6aW5nIHRoZSBEZXBlbmRlbmN5OiBJTlRFTF9URFhfSE9TVCoqCgpPa2F5LCBzbyBgSU5URUxfVERYX0hPU1RgIGhhcyBwb3BwZWQgdXAuIFN0cmFpZ2h0IGF3YXksIEkgcmVjb2duaXplIHRoYXQgYXMgYSBjcml0aWNhbCBkZXBlbmRlbmN5LiBHaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIGNvbmZpZGVudGlhbCBjb21wdXRpbmcgZW52aXJvbm1lbnRzLCB0aGlzIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdlJiMzOTtyZSBsb29raW5nIGF0IEludGVsJiMzOTtzIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIGZvciB0aGUgaG9zdC4gVGhpcyBsaWtlbHkgbWVhbnMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIHN5c3RlbSBhaW1pbmcgZm9yIHN0cm9uZyBpc29sYXRpb24sIHByb2JhYmx5IGxldmVyYWdpbmcgaGFyZHdhcmUtYmFzZWQgc2VjdXJpdHkgZmVhdHVyZXMgYXQgdGhlIENQVSBsZXZlbCB0byBjcmVhdGUgcHJvdGVjdGVkIGV4ZWN1dGlvbiBlbmNsYXZlcyBmb3IgdmlydHVhbCBtYWNoaW5lcyBvciBjb250YWluZXIgd29ya2xvYWRzLiBUaGUgZmFjdCB0aGF0IGl0JiMzOTtzIGEgKmhvc3QqIGNvbXBvbmVudCBhbHNvIGZsYWdzIGl0cyBzaWduaWZpY2FuY2UgaW4gdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLiBXZSBuZWVkIHRvIGJlIGNyeXN0YWwgY2xlYXIgYWJvdXQgaG93IHRoaXMgZGVwZW5kZW5jeSBpcyBpbmNvcnBvcmF0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIwOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJTlRFTF9URFhfSE9TVCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9LY29uZmlnPTE4NDQ9Y29uZmlnIFg4Nl9VU0VSX1NIQURPV19TVEFDS1xuLS1cbmFyY2gveDg2L0tjb25maWctMTg2My1cbmFyY2gveDg2L0tjb25maWc6MTg2NDpjb25maWcgSU5URUxfVERYX0hPU1RcbmFyY2gveDg2L0tjb25maWctMTg2NS1cdGJvb2wgXCYjMzQ7SW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgaG9zdCBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIwOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NDQyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKkRpdmluZyBpbnRvIHRoZSB4ODYgQXJjaGl0ZWN0dXJlIENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgYGFyY2gveDg2L0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHRoZSB4ODYgYXJjaGl0ZWN0dXJlLiBMZXQmIzM5O3Mgc3RhcnQgYXJvdW5kIGxpbmUgMTg2NCDigJMgdGhhdCYjMzk7cyBvZnRlbiBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGV4cGxvcmluZyBzcGVjaWZpYyBmZWF0dXJlIHNldHMgb3IgcmVsYXRlZCBzZXR0aW5ncy4gSG9wZWZ1bGx5LCB0aGlzIHNlY3Rpb24gd2lsbCBzaGVkIHNvbWUgbGlnaHQgb24gdGhlIGFzcGVjdHMgSSYjMzk7bSB0cnlpbmcgdG8gdW5kZXJzdGFuZC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBzb21lIGNydWNpYWwgZGV0YWlscyBhYm91dCBpdHMgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoZXJlLCBsaWtlbHkgcmVsYXRlZCB0byBbaW5zZXJ0IHlvdXIgZmllbGQmIzM5O3MgZXhwZWN0YXRpb24gZnJvbSBsb29raW5nIGF0IGBhcmNoL3g4Ni9LY29uZmlnYF0uIFRoaXMgc2hvdWxkIGJlIGEgZ29vZCBwbGFjZSB0byBzdGFydCBteSBpbnZlc3RpZ2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4NjA6XHRcdCAgU2VlIERvY3VtZW50YXRpb24vYXJjaC94ODYvc2hzdGsucnN0IGZvciBtb3JlIGluZm9ybWF0aW9uLlxuMTg2MTpcdFxuMTg2MjpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuMTg2MzpcdFxuMTg2NDpcdGNvbmZpZyBJTlRFTF9URFhfSE9TVFxuMTg2NTpcdFx0Ym9vbCBcJiMzNDtJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBob3N0IHN1cHBvcnRcJiMzNDtcbjE4NjY6XHRcdGRlcGVuZHMgb24gQ1BVX1NVUF9JTlRFTFxuMTg2NzpcdFx0ZGVwZW5kcyBvbiBYODZfNjRcbjE4Njg6XHRcdGRlcGVuZHMgb24gS1ZNX0lOVEVMXG4xODY5Olx0XHRkZXBlbmRzIG9uIFg4Nl9YMkFQSUNcbjE4NzA6XHRcdHNlbGVjdCBBUkNIX0tFRVBfTUVNQkxPQ0tcbjE4NzE6XHRcdGRlcGVuZHMgb24gQ09OVElHX0FMTE9DXG4xODcyOlx0XHRkZXBlbmRzIG9uIFg4Nl9NQ0VcbjE4NzM6XHRcdGhlbHBcbjE4NzQ6XHRcdCAgSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgcHJvdGVjdHMgZ3Vlc3QgVk1zIGZyb20gbWFsaWNpb3VzXG4xODc1Olx0XHQgIGhvc3QgYW5kIGNlcnRhaW4gcGh5c2ljYWwgYXR0YWNrcy4gIFRoaXMgb3B0aW9uIGVuYWJsZXMgbmVjZXNzYXJ5IFREWFxuMTg3NjpcdFx0ICBzdXBwb3J0IGluIHRoZSBob3N0IGtlcm5lbCB0byBydW4gY29uZmlkZW50aWFsIFZNcy5cbjE4Nzc6XHRcbjE4Nzg6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbjE4Nzk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc5NzIKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS2VybmVsIERlcGVuZGVuY2llcyBmb3IgU2VjdXJlIEV4ZWN1dGlvbiBFbnZpcm9ubWVudHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBob3cgdGhleSByZWxhdGUgdG8gc3BlY2lmaWMgdGVjaG5vbG9naWVzLiBJIHNlZSB0aGF0IGBJTlRFTF9URFhfSE9TVGAgaXMgZGVwZW5kZW50IG9uIGEgZmV3IGtleSBjb21wb25lbnRzOiBgS1ZNX0lOVEVMYCwgd2hpY2ggaXMgZXhwZWN0ZWQsIG9idmlvdXNseSByZWxhdGVkIHRvIEludGVsJiMzOTtzIFZpcnR1YWxpemF0aW9uLCBhcyB3ZWxsIGFzIGBYODZfWDJBUElDYCBmb3IgaW50ZXJydXB0IGhhbmRsaW5nLCBgQ09OVElHX0FMTE9DYCBmb3IgY29udGlndW91cyBtZW1vcnkgYWxsb2NhdGlvbiAoaW1wb3J0YW50IGZvciBzZWN1cml0eSBpc29sYXRpb24pLCBhbmQgYFg4Nl9NQ0VgIGZvciBNYWNoaW5lIENoZWNrIEV4Y2VwdGlvbnMgaGFuZGxpbmcg4oCTIGFub3RoZXIgaW1wb3J0YW50IHBhcnQgb2YgaGFyZHdhcmUgbW9uaXRvcmluZy4KCk5vdywgSSBuZWVkIHRvIHNoaWZ0IG15IGZvY3VzLiBNeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgZGVwZW5kZW5jaWVzIGZvciBgS1ZNX0FNRF9TRVZgLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgQU1EJiMzOTtzIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgcmVsYXRlcyB0byBvdGhlciBrZXJuZWwgY29tcG9uZW50cy4gVGhpcyBpcyBjcml0aWNhbCBmb3IgZ2V0dGluZyBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIGxhbmRzY2FwZSBvZiBzZWN1cmUgZXhlY3V0aW9uIGVudmlyb25tZW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjA6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTV9BTURfU0VWJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnPTE0Nj1jb25maWcgS1ZNX0FNRFxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cdGJvb2wgXCYjMzQ7QU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODM1NgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gS1ZNIENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIEtWTSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBgYXJjaC94ODYva3ZtL0tjb25maWdgLiBJJiMzOTttIGd1ZXNzaW5nIHRoYXQgbGluZSAxNTYgb3IgdGhlcmVhYm91dHMgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB3aGF0ZXZlciBJJiMzOTttIGN1cnJlbnRseSBpbnZlc3RpZ2F0aW5nLiBJdCYjMzk7cyBsaWtlbHkgcmVsYXRlZCB0byBhIHNwZWNpZmljIGZlYXR1cmUgb3IgZGVwZW5kZW5jeSBJJiMzOTttIHRyeWluZyB0byB1bmRlcnN0YW5kLCBvciBwZXJoYXBzIGEgYnVnIGZpeCBJJiMzOTttIGNoYXNpbmcgZG93biB3aXRoaW4gdGhlIEtWTSBmcmFtZXdvcmsuIEtub3dpbmcgdGhlIGFyY2hpdGVjdHVyZSwgSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBzZXR0aW5ncyBkaXJlY3RseSBhZmZlY3RpbmcgeDg2IHZpcnR1YWxpemF0aW9uIGJlaGF2aW9yIC0gdGhpbmdzIGxpa2UgaGFyZHdhcmUgdmlydHVhbGl6YXRpb24gZXh0ZW5zaW9ucywgTVNSIGhhbmRsaW5nLCBvciBpbnRlcnJ1cHQgZGVsaXZlcnkgbWVjaGFuaXNtcy4gSSBhbnRpY2lwYXRlIHRoaXMgbGluZSB3aWxsIGVpdGhlciBiZSBhIHJlbGV2YW50IG9wdGlvbiBkZWZpbml0aW9uIGl0c2VsZiwgb3IgYSByZWZlcmVuY2UgdG8gYW5vdGhlciBzZWN0aW9uIG9yIGRlcGVuZGVuY3kgd2l0aGluIHRoZSBLY29uZmlnIHN0cnVjdHVyZS4gVGltZSB0byBzZWUgd2hhdCYjMzk7cyB3aGF0IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNTA6XHRcdCAgUHJvdmlkZXMgc3VwcG9ydCBmb3IgS1ZNIG9uIEFNRCBwcm9jZXNzb3JzIGVxdWlwcGVkIHdpdGggdGhlIEFNRC1WXG4gMTUxOlx0XHQgIChTVk0pIGV4dGVuc2lvbnMuXG4gMTUyOlx0XG4gMTUzOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuIDE1NDpcdFx0ICB3aWxsIGJlIGNhbGxlZCBrdm0tYW1kLlxuIDE1NTpcdFxuIDE1NjpcdGNvbmZpZyBLVk1fQU1EX1NFVlxuIDE1NzpcdFx0Ym9vbCBcJiMzNDtBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XCYjMzQ7XG4gMTU4Olx0XHRkZWZhdWx0IHlcbiAxNTk6XHRcdGRlcGVuZHMgb24gS1ZNX0FNRCBcdTAwMjZcdTAwMjYgWDg2XzY0XG4gMTYwOlx0XHRkZXBlbmRzIG9uIENSWVBUT19ERVZfU1BfUFNQIFx1MDAyNlx1MDAyNiAhKEtWTV9BTUQ9eSBcdTAwMjZcdTAwMjYgQ1JZUFRPX0RFVl9DQ1BfREQ9bSlcbiAxNjE6XHRcdHNlbGVjdCBBUkNIX0hBU19DQ19QTEFURk9STVxuIDE2MjpcdFx0c2VsZWN0IEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXG4gMTYzOlx0XHRzZWxlY3QgSEFWRV9LVk1fQVJDSF9HTUVNX0NPTlZFUlRcbiAxNjQ6XHRcdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fUkVDTEFJTVxuIDE2NTpcdFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFXG4gMTY2Olx0XHRzZWxlY3QgSEFWRV9LVk1fQVJDSF9HTUVNX1BPUFVMQVRFXG4gMTY3Olx0XHRoZWxwXG4gMTY4Olx0XHQgIFByb3ZpZGVzIHN1cHBvcnQgZm9yIGxhdW5jaGluZyBlbmNyeXB0ZWQgVk1zIHdoaWNoIHVzZSBTZWN1cmVcbiAxNjk6XHRcdCAgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpLCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIHdpdGhcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg5ODAKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGRlcGVuZGVuY2llcywgc3VtbWFyaXplZCBhcyBhIHRob3VnaHQgcHJvY2VzczoKCioqRGVwZW5kZW5jeSBEZWVwIERpdmUqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhlc2Uga2VybmVsIG1vZHVsZXMuIEl0IGxvb2tzIGxpa2UgYEtWTV9BTURfU0VWYCBpcyBwcmV0dHkgdGlnaHRseSBjb3VwbGVkLiBDbGVhcmx5LCBpdCBoaW5nZXMgb24gYm90aCBgS1ZNX0FNRGAgYW5kIGBDUllQVE9fREVWX1NQX1BTUGAuIE1ha2VzIHNlbnNlLCBjb25zaWRlcmluZyBTRVYgaXMgYW4gQU1ELXNwZWNpZmljIHRlY2hub2xvZ3kgYW5kIHByb2JhYmx5IG5lZWRzIHNvbWUgY3J5cHRvZ3JhcGhpYyBzdXBwb3J0IGZyb20gdGhlIFBTUC4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0aGF0IHJlbGF0aW9uc2hpcCB3aGVuIEkmIzM5O20gdHJhY2tpbmcgZG93biBpc3N1ZXMgb3IgY29uZmlndXJpbmcgc3lzdGVtcy4gTm93LCBsZXQmIzM5O3Mgc2hpZnQgZ2VhcnMgYW5kIHF1aWNrbHkgdmVyaWZ5IHdoYXQgYEtWTV9TTU1gIGRlcGVuZHMgb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgbW9kdWxlJiMzOTtzIGRlcGVuZGVuY2llcyBhcyB3ZWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxODA6XHRcbiAxODE6XHRcdCAgSWYgdW5zdXJlLCBzYXkgWS5cbiAxODI6XHRcbiAxODM6XHRjb25maWcgS1ZNX1NNTVxuIDE4NDpcdFx0Ym9vbCBcJiMzNDtTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIGVtdWxhdGlvblwmIzM0O1xuIDE4NTpcdFx0ZGVmYXVsdCB5XG4gMTg2Olx0XHRkZXBlbmRzIG9uIEtWTV9YODZcbiAxODc6XHRcdGhlbHBcbiAxODg6XHRcdCAgUHJvdmlkZXMgc3VwcG9ydCBmb3IgS1ZNIHRvIGVtdWxhdGUgU3lzdGVtIE1hbmFnZW1lbnQgTW9kZSAoU01NKVxuIDE4OTpcdFx0ICBpbiB2aXJ0dWFsIG1hY2hpbmVzLiAgVGhpcyBjYW4gYmUgdXNlZCBieSB0aGUgdmlydHVhbCBtYWNoaW5lXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIwOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MzU0CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgZGVwZW5kZW5jaWVzLCB0aGlua2luZyB0aHJvdWdoIHRoZSBzaXR1YXRpb246CgoqKkRlcGVuZGVuY3kgRGVlcCBEaXZlOiBLVk1fU01NIGFuZCBLVk1fWDg2KioKCk9rYXksIHNvIGBLVk1fU01NYCByZWxpZXMgb24gYEtWTV9YODZgLiBUaGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4gR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgYXJjaGl0ZWN0dXJlLCB0aGlzIGlzbiYjMzk7dCBzdXJwcmlzaW5nIOKAkyBTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIChTTU0pIGlzIGRlZmluaXRlbHkgeDg2LXNwZWNpZmljLiBCdXQgSSBuZWVkIHRvIGJlIHN1cmUuIFRpbWUgdG8gZGlnIGludG8gdGhlIGBLVk1fWDg2YCBtb2R1bGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzY29wZSBhbmQgdGhlIHByZWNpc2UgbmF0dXJlIG9mIHRoZSBkZXBlbmRlbmN5LiBXaGF0IHNwZWNpZmljIGZ1bmN0aW9uYWxpdGllcyBvZiBgS1ZNX1g4NmAgZG9lcyBgS1ZNX1NNTWAgbGV2ZXJhZ2U/IElzIGl0IHNpbXBseSB0aGUgY29yZSB4ODYgdmlydHVhbGl6YXRpb24gbGF5ZXIsIG9yIGRvZXMgaXQgZGVwZW5kIG9uIG1vcmUgc3BlY2lhbGl6ZWQgZmVhdHVyZXM/IFVuZGVyc3RhbmRpbmcgdGhpcyBncmFudWxhciBkZXBlbmRlbmN5IGlzIGtleSBmb3IgYW55IG9wdGltaXphdGlvbiBvciB0cm91Ymxlc2hvb3RpbmcgZWZmb3J0cyBkb3duIHRoZSBsaW5lLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgdW5kZXIgdGhlIGhvb2Qgb2YgYEtWTV9YODZgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNX1g4NiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxuYXJjaC94ODYva3ZtL0tjb25maWctMTktXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNX1g4NlxuYXJjaC94ODYva3ZtL0tjb25maWctMjEtXHRkZWZfdHJpc3RhdGUgS1ZNIGlmIChLVk1fSU5URUwgIT0gbiB8fCBLVk1fQU1EICE9IG4pXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIwOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NzIzCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEtWTSBDb25maWd1cmF0aW9uIEFuYWx5c2lzKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2UgYEtWTV9YODZgIGlzIG9ubHkgZW5hYmxlZCB3aGVuIHRoZSBiYXNlIGBLVk1gIG1vZHVsZSBpcyBhY3RpdmF0ZWQsIGFuZCB0aGVuIHNwZWNpZmljYWxseSwgaWYgZWl0aGVyIHRoZSBJbnRlbCAoYEtWTV9JTlRFTGApIG9yIEFNRCAoYEtWTV9BTURgKSBleHRlbnNpb25zIGFyZSBwcmVzZW50LiBNYWtlcyBzZW5zZSwgdGhhdCYjMzk7cyB0aGUgY29yZSBoeXBlcnZpc29yIHN0cnVjdHVyZS4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB3aGF0IGNvbmZpZ3VyYXRpb25zICpJKiBuZWVkIHRvIGVuYWJsZSB0byBnZXQgdGhpcyB0aGluZyBydW5uaW5nIHByb3Blcmx5LiBMb29rcyBsaWtlIHRoZSBjb3JlIGBLVk1gIG1vZHVsZSBpcyBhIGdpdmVuLiAgSSBuZWVkIHRvIG1ha2Ugc3VyZSBgS1ZNX0lOVEVMYCBvciBgS1ZNX0FNRGAgYXJlIHNldCwgZGVwZW5kaW5nIG9uIHRoZSBob3N0JiMzOTtzIENQVS4gSSBzZWUgYEtWTV9TTU1gIHdoaWNoIEkgYXNzdW1lIHJlbGF0ZXMgdG8gU3lzdGVtIE1hbmFnZW1lbnQgTW9kZSwgY3JpdGljYWwgZm9yIGhhbmRsaW5nIGNlcnRhaW4gaGFyZHdhcmUgaW50ZXJhY3Rpb25zLCBhbmQgSSYjMzk7bGwgbmVlZCB0byBjb25zaWRlciBgS1ZNX0FNRF9TRVZgLCBhbmQgYEtWTV9JTlRFTF9URFhgIGRlcGVuZGluZyBvbiB0aGUgc2VjdXJpdHkgZmVhdHVyZS1zZXQgSSByZXF1aXJlLiBBbHNvLCBgSU5URUxfVERYX0hPU1RgIHdpbGwgYmUgbmVlZGVkIGlmIEkgYW0gcnVubmluZyB3aXRoIFREWC4KCkZpbmFsbHksIGBDUllQVE9fREVWX1NQX1BTUGAgaXMgbGlzdGVkLCBhbmQgSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgYW55IGRlcGVuZGVuY2llcyBpdCBoYXMuIFRoaXMgaXMgcHJvYmFibHkgcmVsYXRlZCB0byBzdXBwb3J0aW5nIHNwZWNpZmljIGNyeXB0b2dyYXBoaWMgb2ZmbG9hZCBoYXJkd2FyZS4gR290dGEgbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgbGluZXMgdXAgZGVwZW5kZW5jaWVzLXdpc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIwOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDUllQVE9fREVWX1NQX1BTUCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2NyeXB0by9jY3AvS2NvbmZpZz0yMz1jb25maWcgQ1JZUFRPX0RFVl9DQ1BfQ1JZUFRPXG4tLVxuZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWctMzctXG5kcml2ZXJzL2NyeXB0by9jY3AvS2NvbmZpZzozODpjb25maWcgQ1JZUFRPX0RFVl9TUF9QU1BcbmRyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnLTM5LVx0Ym9vbCBcJiMzNDtQbGF0Zm9ybSBTZWN1cml0eSBQcm9jZXNzb3IgKFBTUCkgZGV2aWNlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIwOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMjYwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgQ0NQIEtjb25maWcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJiMzOTttIHRoaW5raW5nLCAmIzM0O1RpbWUgdG8gZGlnIGludG8gdGhlIGBkcml2ZXJzL2NyeXB0by9jY3AvS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDM4LiYjMzQ7IEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIENDUCBjcnlwdG8gZW5naW5lLiBJJiMzOTttIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgdGhhdCBsaW5lIGJlY2F1c2UgSSB2YWd1ZWx5IHJlY2FsbCBzb21lIGNyaXRpY2FsIHNldHRpbmcgYmVpbmcgZGVmaW5lZCB0aGVyZSAtIG1heWJlIHJlbGF0ZWQgdG8ga2V5IHNpemUsIHN1cHBvcnRlZCBhbGdvcml0aG1zLCBvciBwZXJoYXBzIGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcy4gSSB3YW50IHRvIHF1aWNrbHkgemVybyBpbiBvbiBpdCBhbmQgZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0JiMzOTtzIHdoYXQuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBpcyBjcnVjaWFsIGZvciBhbnkgZGVlcGVyIGFuYWx5c2lzIG9yIG1vZGlmaWNhdGlvbiBJIG5lZWQgdG8gcGVyZm9ybS4gTGV0JiMzOTtzIHNlZSB3aGF0IGdlbXMgYXJlIGhpZGRlbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjA6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2NyeXB0by9jY3AvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMzA6XHRcdHNlbGVjdCBDUllQVE9fQVVUSEVOQ1xuICAzMTpcdFx0c2VsZWN0IENSWVBUT19SU0FcbiAgMzI6XHRcdHNlbGVjdCBDUllQVE9fTElCX0FFU1xuICAzMzpcdFx0aGVscFxuICAzNDpcdFx0ICBTdXBwb3J0IGZvciB1c2luZyB0aGUgY3J5cHRvZ3JhcGhpYyBBUEkgd2l0aCB0aGUgQU1EIENyeXB0b2dyYXBoaWNcbiAgMzU6XHRcdCAgQ29wcm9jZXNzb3IuIFRoaXMgbW9kdWxlIHN1cHBvcnRzIG9mZmxvYWQgb2YgU0hBIGFuZCBBRVMgYWxnb3JpdGhtcy5cbiAgMzY6XHRcdCAgSWYgeW91IGNob29zZSAmIzM5O00mIzM5OyBoZXJlLCB0aGlzIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjY3BfY3J5cHRvLlxuICAzNzpcdFxuICAzODpcdGNvbmZpZyBDUllQVE9fREVWX1NQX1BTUFxuICAzOTpcdFx0Ym9vbCBcJiMzNDtQbGF0Zm9ybSBTZWN1cml0eSBQcm9jZXNzb3IgKFBTUCkgZGV2aWNlXCYjMzQ7XG4gIDQwOlx0XHRkZWZhdWx0IHlcbiAgNDE6XHRcdGRlcGVuZHMgb24gQ1JZUFRPX0RFVl9DQ1BfREQgXHUwMDI2XHUwMDI2IFg4Nl82NCBcdTAwMjZcdTAwMjYgQU1EX0lPTU1VXG4gIDQyOlx0XHRzZWxlY3QgUENJX1RTTSBpZiBQQ0lcbiAgNDM6XHRcdGhlbHBcbiAgNDQ6XHRcdCBQcm92aWRlIHN1cHBvcnQgZm9yIHRoZSBBTUQgUGxhdGZvcm0gU2VjdXJpdHkgUHJvY2Vzc29yIChQU1ApLlxuICA0NTpcdFx0IFRoZSBQU1AgaXMgYSBkZWRpY2F0ZWQgcHJvY2Vzc29yIHRoYXQgcHJvdmlkZXMgc3VwcG9ydCBmb3Iga2V5XG4gIDQ2Olx0XHQgbWFuYWdlbWVudCBjb21tYW5kcyBpbiBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIG1vZGUsXG4gIDQ3Olx0XHQgYWxvbmcgd2l0aCBzb2Z0d2FyZS1iYXNlZCBUcnVzdGVkIEV4ZWN1dGlvbiBFbnZpcm9ubWVudCAoVEVFKSB0b1xuICA0ODpcdFx0IGVuYWJsZSB0aGlyZC1wYXJ0eSB0cnVzdGVkIGFwcGxpY2F0aW9ucy5cbiAgNDk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA3ODkKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEZXBlbmRlbmNpZXMgYW5kIERlZXAgRGl2ZXMqKgoKT2theSwgc28gYENSWVBUT19ERVZfU1BfUFNQYCByZWxpZXMgb24gYSBmZXcgb3RoZXIgY29tcG9uZW50cy4gU3BlY2lmaWNhbGx5LCBgQ1JZUFRPX0RFVl9DQ1BfRERgLCBgWDg2XzY0YCwgYW5kIGBBTURfSU9NTVVgLiBHaXZlbiBteSBleHBlcmllbmNlLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhvc2UgYXJlIGtleSBwaWVjZXMgZm9yIGhhcmR3YXJlLWFjY2VsZXJhdGVkIGNyeXB0by4gTWFrZXMgc2Vuc2UuIE5vdywgbGV0JiMzOTtzIGRyaWxsIGRvd24gaW50byBgQ1JZUFRPX0RFVl9DQ1BfRERgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgdGhhdCBkZXBlbmRlbmN5IGVudGFpbHMgdG8gZ2V0IGEgZnVsbCBwaWN0dXJlIG9mIHRoZSBgU1BfUFNQYCYjMzk7cyBmdW5jdGlvbmFsaXR5IGFuZCBwb3RlbnRpYWwgYm90dGxlbmVja3MuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgd29yayBiZWdpbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIwOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDUllQVE9fREVWX0NDUF9ERCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2NyeXB0by9jY3AvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWc6Mjpjb25maWcgQ1JZUFRPX0RFVl9DQ1BfRERcbmRyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtTZWN1cmUgUHJvY2Vzc29yIGRldmljZSBkcml2ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEwODEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgQ0NQIEtlcm5lbCBDb25maWd1cmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBgZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWdgIGZpbGUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IHRvIGFyb3VuZCBsaW5lIDIuIE15IGV4cGVydGlzZSB0ZWxscyBtZSB0aGF0IGBLY29uZmlnYCBmaWxlcyBhcmUgdGhlIGJhY2tib25lIG9mIGtlcm5lbCBjb25maWd1cmF0aW9uLCBzbyB0aGUgaW5pdGlhbCBsaW5lcyBhcmUgYWxtb3N0IGFsd2F5cyBjcnVjaWFsLiBUaGV5JiMzOTtsbCBsaWtlbHkgZXN0YWJsaXNoIHRoZSBvdmVyYWxsIGNvbnRleHQgZm9yIHRoZSBDQ1AgKENyeXB0b2dyYXBoaWMgQ29wcm9jZXNzb3IpIGRyaXZlciDigJMgZGVmaW5pbmcgaXRzIHB1cnBvc2UsIGl0cyBkZXBlbmRlbmNpZXMsIG9yIHBlcmhhcHMgcHJvdmlkaW5nIGFuIGluaXRpYWwgZGVmYXVsdCBzZXR0aW5nLiBJIGFudGljaXBhdGUgdGhpcyB3aWxsIGJlIHdoZXJlIHRoZSBiYXNpYyBidWlsZCBvcHRpb25zLCBwZXJoYXBzIGEgaGVscCB0ZXh0IGFuZCB0aGUgaW5pdGlhbCBzY29wZSwgd2lsbCBiZSBwbGFjZWQuIEkmIzM5O20ga2VlbiB0byBzZWUgaWYgdGhpcyBjb25maXJtcyBteSBleHBlcmllbmNlIGluIHRoaXMgc3BhY2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBtb2R1bGUgaXMgYWJvdXQgYmVmb3JlIGxvb2tpbmcgaW50byBvdGhlciBmaWxlcy4gSSBsb29rIGZvcndhcmQgdG8gc2VlaW5nIHdoYXQgaXQgaGFzIHRvIHRlbGwgbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIwOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgQ1JZUFRPX0RFVl9DQ1BfRERcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O1NlY3VyZSBQcm9jZXNzb3IgZGV2aWNlIGRyaXZlclwmIzM0O1xuICAgNDpcdFx0ZGVwZW5kcyBvbiBDUFVfU1VQX0FNRCB8fCBBUk02NFxuICAgNTpcdFx0ZGVmYXVsdCBtXG4gICA2Olx0XHRoZWxwXG4gICA3Olx0XHQgIFByb3ZpZGVzIEFNRCBTZWN1cmUgUHJvY2Vzc29yIGRldmljZSBkcml2ZXIuXG4gICA4Olx0XHQgIElmIHlvdSBjaG9vc2UgJiMzOTtNJiMzOTsgaGVyZSwgdGhpcyBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY2NwLlxuICAgOTpcdFxuICAxMDpcdGNvbmZpZyBDUllQVE9fREVWX1NQX0NDUFxuICAxMTpcdFx0Ym9vbCBcJiMzNDtDcnlwdG9ncmFwaGljIENvcHJvY2Vzc29yIGRldmljZVwmIzM0O1xuICAxMjpcdFx0ZGVmYXVsdCB5XG4gIDEzOlx0XHRkZXBlbmRzIG9uIENSWVBUT19ERVZfQ0NQX0REIFx1MDAyNlx1MDAyNiBETUFERVZJQ0VTXG4gIDE0Olx0XHRzZWxlY3QgSFdfUkFORE9NXG4gIDE1Olx0XHRzZWxlY3QgRE1BX0VOR0lORVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTU0MAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEZWNvZGluZyB0aGUgRGVwZW5kZW5jeSBDaGFpbioqCgpSaWdodCwgc28gYENSWVBUT19ERVZfQ0NQX0REYC4uLiB0aGF0IG9uZSYjMzk7cyBpbnRlcmVzdGluZy4gVGhlIGltbWVkaWF0ZSBkZXBlbmRlbmN5IGlzIHByZXR0eSBjbGVhcjogaXQgaGluZ2VzIG9uIGVpdGhlciBgQ1BVX1NVUF9BTURgIG9yIGBBUk02NGAuIE1ha2VzIHNlbnNlLCBjb25zaWRlcmluZyB0aGUgbGlrZWx5IGhhcmR3YXJlIHJlcXVpcmVtZW50cyBmb3IgdGhpcyBzcGVjaWZpYyBjcnlwdG8gZGV2aWNlIGRyaXZlciwgYENDUF9ERGAgbGlrZWx5IHJlbGF0ZXMgdG8gQU1EJiMzOTtzIFBsYXRmb3JtIFNlY3VyaXR5IFByb2Nlc3NvciAoUFNQKSBvciBhIHNpbWlsYXIgc2VjdXJlIGNvLXByb2Nlc3Nvciwgb3IgYSBwbGF0Zm9ybSB3aGljaCByZXF1aXJlcyB0aGUgdW5kZXJseWluZyBzdXBwb3J0IGZyb20gYEFSTTY0YC4gVGhlIGNvbmRpdGlvbmFsIG5hdHVyZSBpcyBpbXBvcnRhbnQgdG8ga2VlcCBpbiBtaW5kLCBvZiBjb3Vyc2UuCgpOb3csIGJlY2F1c2UgaXQgZGVwZW5kcyBvbiBgQ1BVX1NVUF9BTURgIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoYXQgdGhlIEFNRCBJT01NVSBpcyBlbmFibGVkIG9yIGNvbmZpZ3VyZWQgY29ycmVjdGx5LCByaWdodD8gTGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IGBBTURfSU9NTVVgIGFuZCBzZWUgaG93IGl0IGlzIGNvbmZpZ3VyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIwOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBBTURfSU9NTVUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZy0yLSMgQU1EIElPTU1VIHN1cHBvcnRcbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWc6Mzpjb25maWcgQU1EX0lPTU1VXG5kcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnLTQtXHRib29sIFwmIzM0O0FNRCBJT01NVSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZy0zMi1cbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWc6MzM6Y29uZmlnIEFNRF9JT01NVV9JT01NVUZEXG5kcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnLTM0LVx0Ym9vbCBcJiMzNDtFbmFibGUgSU9NTVVGRCBmZWF0dXJlcyBmb3IgQU1EIElPTU1VIChFWFBFUklNRU5UQUwpXCYjMzQ7XG4tLVxuZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZy00Mi1cbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWc6NDM6Y29uZmlnIEFNRF9JT01NVV9ERUJVR0ZTXG5kcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnLTQ0LVx0Ym9vbCBcJiMzNDtFbmFibGUgQU1EIElPTU1VIGludGVybmFscyBpbiBEZWJ1Z0ZTXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIwOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMDEyCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIEFNRCBJT01NVSBDb25maWd1cmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIEFNRCBJT01NVSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIE15IGluc3RpbmN0IHRlbGxzIG1lIHRoZSBwbGFjZSB0byBzdGFydCBpcyB0aGUgYGRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWdgIGZpbGUuIEkmIzM5O20gYXNzdW1pbmcgdGhhdCYjMzk7cyB0aGUgY2Fub25pY2FsIGxvY2F0aW9uIGZvciB0aGVzZSBzb3J0cyBvZiBkZWZpbml0aW9ucy4gTGV0JiMzOTtzIHN0YXJ0IGFyb3VuZCBsaW5lIDMsIHdoaWNoIGlzIHVzdWFsbHkgd2hlcmUgYSBnb29kIG92ZXJ2aWV3IG9yIGdlbmVyYWwgZGVzY3JpcHRpb24gYmVnaW5zLCBvciBhdCBsZWFzdCB0aGUgdG9wLWxldmVsIG9wdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIwOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCMgQU1EIElPTU1VIHN1cHBvcnRcbiAgIDM6XHRjb25maWcgQU1EX0lPTU1VXG4gICA0Olx0XHRib29sIFwmIzM0O0FNRCBJT01NVSBzdXBwb3J0XCYjMzQ7XG4gICA1Olx0XHRzZWxlY3QgU1dJT1RMQlxuICAgNjpcdFx0c2VsZWN0IFBDSV9NU0lcbiAgIDc6XHRcdHNlbGVjdCBQQ0lfQVRTXG4gICA4Olx0XHRzZWxlY3QgUENJX1BSSVxuICAgOTpcdFx0c2VsZWN0IFBDSV9QQVNJRFxuICAxMDpcdFx0c2VsZWN0IElSUV9NU0lfTElCXG4gIDExOlx0XHRzZWxlY3QgTU1VX05PVElGSUVSXG4gIDEyOlx0XHRzZWxlY3QgSU9NTVVfQVBJXG4gIDEzOlx0XHRzZWxlY3QgSU9NTVVfSU9WQVxuICAxNDpcdFx0c2VsZWN0IElPTU1VX1NWQVxuICAxNTpcdFx0c2VsZWN0IElPTU1VX0lPUEZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIzODEKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqUXVpY2sgRGVwZW5kZW5jeSBDaGVjayoqCgpSaWdodCwgc28gKkFNRF9JT01NVSogc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCDigJMgbm8gZ2xhcmluZywgY29tcGxleCBkZXBlbmRlbmNpZXMganVtcGluZyBvdXQgYXQgbWUgcmlnaHQgYXdheS4gQWx3YXlzIGdvb2QgdG8gc2VlIGEgbW9kdWxlIHRoYXQga2VlcHMgdGhpbmdzIGNsZWFuLgoKTm93LCBsZXQmIzM5O3Mgc3dpdGNoIGdlYXJzIGFuZCBkaWcgaW50byAqS1ZNX0lOVEVMKi4gSSBrbm93IHRoYXQgb25lJiMzOTtzIGdvdCBhIGZldyBtb3JlIGxheWVycyBhbmQgbGlrZWx5IHNvbWUgaW50ZXJhY3Rpb25zIHRoYXQgbmVlZCBhIGNsb3NlciBsb29rLiBMZXQmIzM5O3Mgc3RhcnQgbWVudGFsbHkgdHJhY2luZyB0aG9zZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjA6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTV9JTlRFTCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz04Mz1jb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6OTY6Y29uZmlnIEtWTV9JTlRFTFxuYXJjaC94ODYva3ZtL0tjb25maWctOTctXHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA2LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTA3OmNvbmZpZyBLVk1fSU5URUxfUFJPVkVfVkVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXCYjMzQ7Q2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXHRib29sIFwmIzM0O0ludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjA6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI4MzQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSByZWFkaW5nIGFuZCB0aGlua2luZyBhYm91dCB0aGUgS2NvbmZpZyBmaWxlOgoKKipOYXZpZ2F0aW5nIEtjb25maWcgZm9yIEtWTSBvbiB4ODYqKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgYGFyY2gveDg2L2t2bS9LY29uZmlnYCBmaWxlIGFnYWluLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gd2hhdCYjMzk7cyBnb2luZyBvbiBhcm91bmQgbGluZSA5Ni4gV2hhdCYjMzk7cyBkZWZpbmVkIHRoZXJlLCBhbmQgaG93IGRvZXMgaXQgcmVsYXRlIHRvIHRoZSBicm9hZGVyIEtWTSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSB4ODYgYXJjaGl0ZWN0dXJlPyBJIGtub3cgdGhpcyBhcmVhIGhvbGRzIGtleSBkZWZpbml0aW9ucywgb2Z0ZW4gcmVsYXRlZCB0byBzcGVjaWZpYyBoYXJkd2FyZSBmZWF0dXJlcyBvciBvcHRpbWl6YXRpb24gcGF0aHMgZm9yIEtWTS4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IGxpbmUgOTYgcHJvYmFibHkgZGVmaW5lcyBhIHNwZWNpZmljIEtWTSBmZWF0dXJlIG9yIGludHJvZHVjZXMgYSBjb25kaXRpb25hbCBibG9jayBmb3IgYSBoYXJkd2FyZSBkZXBlbmRlbmN5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHRvIG1ha2UgYW4gYXNzZXNzbWVudCBvciBtb2RpZmljYXRpb24uIEkmIzM5O20ga2VlbiB0byBmaW5kIG91dCBhYm91dCB3aGV0aGVyIGl0JiMzOTtzIHJlbGF0ZWQgdG8gc29tZSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjA6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgOTA6XHRcdCAgcHJvdGVjdGVkIFZNcyBhcmUgcHVyZWx5IGEgZGV2ZWxvcG1lbnQgYW5kIHRlc3RpbmcgdmVoaWNsZSBmb3JcbiAgOTE6XHRcdCAgS1ZNX0NSRUFURV9HVUVTVF9NRU1GRC4gIEF0dGVtcHRpbmcgdG8gcnVuIGEgXCYjMzQ7cmVhbFwmIzM0OyBWTSB3b3JrbG9hZCBhcyBhXG4gIDkyOlx0XHQgIHNvZnR3YXJlLXByb3RlY3RlZCBWTSB3aWxsIGZhaWwgbWlzZXJhYmx5LlxuICA5MzpcdFxuICA5NDpcdFx0ICBJZiB1bnN1cmUsIHNheSBcJiMzNDtOXCYjMzQ7LlxuICA5NTpcdFxuICA5NjpcdGNvbmZpZyBLVk1fSU5URUxcbiAgOTc6XHRcdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgSW50ZWwgKGFuZCBjb21wYXRpYmxlKSBwcm9jZXNzb3JzIHN1cHBvcnRcJiMzNDtcbiAgOTg6XHRcdGRlcGVuZHMgb24gS1ZNIFx1MDAyNlx1MDAyNiBJQTMyX0ZFQVRfQ1RMXG4gIDk5Olx0XHRzZWxlY3QgWDg2X0ZSRUQgaWYgWDg2XzY0XG4gMTAwOlx0XHRoZWxwXG4gMTAxOlx0XHQgIFByb3ZpZGVzIHN1cHBvcnQgZm9yIEtWTSBvbiBwcm9jZXNzb3JzIGVxdWlwcGVkIHdpdGggSW50ZWwmIzM5O3MgVlRcbiAxMDI6XHRcdCAgZXh0ZW5zaW9ucywgYS5rLmEuIFZpcnR1YWwgTWFjaGluZSBFeHRlbnNpb25zIChWTVgpLlxuIDEwMzpcdFxuIDEwNDpcdFx0ICBUbyBjb21waWxlIHRoaXMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjA6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMzMzEKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBLVk1fSU5URUwgRGVwZW5kZW5jaWVzKioKClJpZ2h0LCBzbyBgS1ZNX0lOVEVMYCBpcyBjbGVhcmx5IGJ1aWx0IG9uIGBLVk1gIOKAkyB0aGF0JiMzOTtzIGV4cGVjdGVkLiBCdXQgdGhlIG1lbnRpb24gb2YgYElBMzJfRkVBVF9DVExgLi4uIHRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgY29ubmVjdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIGl0JiMzOTtzIHJlbGF0ZWQgdG8gaGFuZGxpbmcgc3BlY2lmaWMgSW50ZWwgQ1BVIGZlYXR1cmVzIHdpdGhpbiB0aGUgS1ZNIGVudmlyb25tZW50LiBQcm9iYWJseSBzb21ldGhpbmcgdG8gZG8gd2l0aCBlbmFibGluZyBvciBjb25maWd1cmluZyB2aXJ0dWFsaXphdGlvbi1zcGVjaWZpYyBjYXBhYmlsaXRpZXMuIEkgc2hvdWxkIHN0YXJ0IGJ5IGRpdmluZyBpbnRvIHRoZSBkZWZpbml0aW9ucyBhbmQgdXNhZ2Ugb2YgYElBMzJfRkVBVF9DVExgLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCByZWdpc3RlciBvciBjb250cm9sIHN0cnVjdHVyZSBhY3R1YWxseSBkb2VzIGFuZCBob3cgYEtWTV9JTlRFTGAgbGV2ZXJhZ2VzIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSUEzMl9GRUFUX0NUTCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9LY29uZmlnLmNwdT0yODU9Y29uZmlnIFg4Nl9ERUJVR0NUTE1TUlxuLS1cbmFyY2gveDg2L0tjb25maWcuY3B1LTI4OC1cbmFyY2gveDg2L0tjb25maWcuY3B1OjI4OTpjb25maWcgSUEzMl9GRUFUX0NUTFxuYXJjaC94ODYvS2NvbmZpZy5jcHUtMjkwLVx0ZGVmX2Jvb2wgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMDoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzY1NgoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDIyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIGBJQTMyX0ZFQVRfQ1RMYCBpcyBkZWZpbmVkIGFzICYjMzk7eSYjMzk7LiBUaGlzIG1lYW5zIHdlIGhhdmUgYSBzZXQgb2YgY29uZmlndXJhdGlvbnMgZW5hYmxlZDogYEtWTWAsIGBLVk1fSU5URUxgLCBgS1ZNX0FNRGAsIGBLVk1fU01NYCwgYEtWTV9BTURfU0VWYCwgYEtWTV9JTlRFTF9URFhgLCBgSU5URUxfVERYX0hPU1RgLCBgQ1JZUFRPX0RFVl9TUF9QU1BgLCBgQ1JZUFRPX0RFVl9DQ1BfRERgLCBhbmQgYEFNRF9JT01NVWAuIFRoYXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkLgoKTm93LCBsZXQmIzM5O3MgZGlnIGEgbGl0dGxlIGRlZXBlci4gSSYjMzk7bSBmb2N1c2luZyBvbiBgS1ZNX0FNRF9TRVZgIGFuZCBpdHMgZGVwZW5kZW5jaWVzLiBJdCByZWxpZXMgb24gYENSWVBUT19ERVZfU1BfUFNQYCBhbmQgKmFsc28qIHRoaXMgcmF0aGVyIGludGVyZXN0aW5nIGNvbmRpdGlvbmFsOiBgIShLVk1fQU1EPXkgJmFtcDsmYW1wOyBDUllQVE9fREVWX0NDUF9ERD1tKWAuIFRoaXMgaXMga2V5LiBUaGUgaW1wbGljYXRpb24gaXMsIGlmIGBLVk1fQU1EYCBpcyBjb21waWxlZCBpbiAoYHlgKSwgdGhlbiBgQ1JZUFRPX0RFVl9DQ1BfRERgICptdXN0KiBiZSBzZXQgdG8gJiMzOTt5JiMzOTsuIEl0JiMzOTtzIGVmZmVjdGl2ZWx5IGZvcmNpbmcgdGhlIGluY2x1c2lvbiBvZiB0aGUgbW9kdWxlLgoKVGhlcmVmb3JlLCBgQ1JZUFRPX0RFVl9DQ1BfRERgIGlzIGFuIGFic29sdXRlIHJlcXVpcmVtZW50LCBnaXZlbiB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLgoKSSB0aGluayBJJiMzOTtsbCBub3cgY2hlY2sgdGhlIHN0YXR1cyBvZiBgWDg2X1gyQVBJQ2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIwOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBYODZfWDJBUElDJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L0tjb25maWc9NDM2PWNvbmZpZyBTTVBcbi0tXG5hcmNoL3g4Ni9LY29uZmlnLTQ1OC1cbmFyY2gveDg2L0tjb25maWc6NDU5OmNvbmZpZyBYODZfWDJBUElDXG5hcmNoL3g4Ni9LY29uZmlnLTQ2MC1cdGJvb2wgXCYjMzQ7eDJBUElDIGludGVycnVwdCBjb250cm9sbGVyIGFyY2hpdGVjdHVyZSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIwOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0Mjg3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gcmVhZGluZyBhbmQgcHJvY2Vzc2luZyB0aGUgcHJvdmlkZWQgdGV4dDoKCioqRGl2aW5nIGludG8gdGhlIHg4NiBBcmNoaXRlY3R1cmUgQ29uZmlndXJhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgZGlnIGludG8gdGhlIGNvbmZpZ3VyYXRpb24gc3BlY2lmaWNzIGZvciB4ODYuIExldCYjMzk7cyBzdGFydCB3aXRoIGBhcmNoL3g4Ni9LY29uZmlnYCwgcmlnaHQgYXJvdW5kIGxpbmUgNDU5LiBUaGF0IGFyZWEgdXN1YWxseSBob2xkcyBjcml0aWNhbCBjb25maWd1cmF0aW9ucywgYW5kIEkgbmVlZCB0byBzZWUgd2hhdCYjMzk7cyBiZWluZyBkZWZpbmVkIHRoZXJlLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGVpdGhlciBhIG5ldyBmZWF0dXJlIGdhdGUsIGRlcGVuZGVuY3kgZGV0YWlscywgb3IgY29uZmlndXJhdGlvbiBvcHRpb24gdG8gc2V0LXVwLiBJJiMzOTtsbCBuZWVkIHRvIGtub3cgd2hpY2ggZmVhdHVyZSBnYXRlIHRoaXMgaXMgY29ubmVjdGVkIHRvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ1NTpcdFx0ICBcdTAwM2NodHRwOi8vd3d3LnRsZHAub3JnL2RvY3MuaHRtbCNob3d0b1x1MDAzZS5cbiA0NTY6XHRcbiA0NTc6XHRcdCAgSWYgeW91IGRvbiYjMzk7dCBrbm93IHdoYXQgdG8gZG8gaGVyZSwgc2F5IE4uXG4gNDU4Olx0XG4gNDU5Olx0Y29uZmlnIFg4Nl9YMkFQSUNcbiA0NjA6XHRcdGJvb2wgXCYjMzQ7eDJBUElDIGludGVycnVwdCBjb250cm9sbGVyIGFyY2hpdGVjdHVyZSBzdXBwb3J0XCYjMzQ7XG4gNDYxOlx0XHRkZXBlbmRzIG9uIFg4Nl9MT0NBTF9BUElDIFx1MDAyNlx1MDAyNiBYODZfNjQgXHUwMDI2XHUwMDI2IChJUlFfUkVNQVAgfHwgSFlQRVJWSVNPUl9HVUVTVClcbiA0NjI6XHRcdGRlZmF1bHQgeVxuIDQ2MzpcdFx0aGVscFxuIDQ2NDpcdFx0ICB4MkFQSUMgaXMgYW4gaW50ZXJydXB0IGNvbnRyb2xsZXIgYXJjaGl0ZWN0dXJlLCBhIGNvbXBvbmVudCBvZiB3aGljaFxuIDQ2NTpcdFx0ICAodGhlIGxvY2FsIEFQSUMpIGlzIHByZXNlbnQgaW4gdGhlIENQVS4gSXQgYWxsb3dzIGZhc3RlciBhY2Nlc3MgdG9cbiA0NjY6XHRcdCAgdGhlIGxvY2FsIEFQSUMgYW5kIHN1cHBvcnRzIGEgbGFyZ2VyIG51bWJlciBvZiBDUFVzIGluIHRoZSBzeXN0ZW1cbiA0Njc6XHRcdCAgdGhhbiB0aGUgcHJlZGVjZXNzb3JzLlxuIDQ2ODpcdFxuIDQ2OTpcdFx0ICB4MkFQSUMgd2FzIGludHJvZHVjZWQgaW4gSW50ZWwgQ1BVcyBhcm91bmQgMjAwOCBhbmQgaW4gQU1EIEVQWUMgQ1BVc1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMDoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDc1NgoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IFg4Nl9YMkFQSUMgTXVzaW5ncyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYFg4Nl9YMkFQSUNgLiBJdCBsb29rcyBsaWtlIHRoaXMgZmVhdHVyZSBpcyBjb250aW5nZW50IG9uIGEgZmV3IGtleSB0aGluZ3M6IHdlIG5lZWQgYFg4Nl9MT0NBTF9BUElDYCBlbmFibGVkLCB3ZSYjMzk7cmUgZGVmaW5pdGVseSBydW5uaW5nIG9uIGFuIGBYODZfNjRgIGFyY2hpdGVjdHVyZSwgYW5kIGVpdGhlciB0aGUgc3lzdGVtIGhhcyBgSVJRX1JFTUFQYCBlbmFibGVkIG9yIGl0JiMzOTtzIHJ1bm5pbmcgYXMgYSBgSFlQRVJWSVNPUl9HVUVTVGAuIFRoYXQgbWFrZXMgc2Vuc2U7IHRoZSB4MkFQSUMgaXMgYSBtb3JlIG1vZGVybiBpbnRlcnJ1cHQgY29udHJvbGxlciwgYW5kIHRoZXNlIGRlcGVuZGVuY2llcyBlbnN1cmUgYSBzdWl0YWJsZSBoYXJkd2FyZSBhbmQgc29mdHdhcmUgZW52aXJvbm1lbnQgZm9yIGl0IHRvIGZ1bmN0aW9uIGNvcnJlY3RseS4gVGhlIGZhY3QgdGhhdCBgWDg2X1gyQVBJQ2AgaXMgc2V0IHRvIGBkZWZhdWx0IHlgIGlzIGFsc28gaW1wb3J0YW50LCBpdCBtZWFucyB0aGF0IGJ5IGRlZmF1bHQgaXQmIzM5O2xsIGJlIGVuYWJsZWQgaWYgdGhvc2UgcHJlcmVxdWlzaXRlcyBhcmUgbWV0LCB3aGljaCBpcyBhIHNlbnNpYmxlIGFwcHJvYWNoLgoKTm93LCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayBob3cgdGhpcyBpbnRlcmFjdHMgd2l0aCBgQ09OVElHX0FMTE9DYCwgc2luY2UgY29udGlndW91cyBtZW1vcnkgYWxsb2NhdGlvbiBjYW4gb2Z0ZW4gcGxheSBuaWNlbHkgd2l0aCBpbnRlcnJ1cHQgY29udHJvbGxlcnMuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhhdCByZWxhdGlvbnNoaXAgYSBiaXQgZnVydGhlciB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBwb3RlbnRpYWwgY29uZmxpY3RzIG9yIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjA6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENPTlRJR19BTExPQyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTcwOT1jb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfVkFSSUFCTEVcbi0tXG5tbS9LY29uZmlnLTcxOC1cbm1tL0tjb25maWc6NzE5OmNvbmZpZyBDT05USUdfQUxMT0Ncbm1tL0tjb25maWctNzIwLVx0ZGVmX2Jvb2wgKE1FTU9SWV9JU09MQVRJT04gXHUwMDI2XHUwMDI2IENPTVBBQ1RJT04pIHx8IENNQVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMDoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTE2NwoJCQkJCQkJb3V0cHV0OiAxNgoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBNZW1vcnkgQWxsb2NhdGlvbiBTdHJhdGVnaWVzKioKClJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIGBDT05USUdfQUxMT0NgIGRlZmluaXRpb24uIEl0IGxvb2tzIGxpa2UgaXQgYm9pbHMgZG93biB0byBlaXRoZXIgdGhlIGNvbWJpbmF0aW9uIG9mIGBNRU1PUllfSVNPTEFUSU9OYCBhbmQgYENPTVBBQ1RJT05gLCBpZiB0aGV5IGFyZSBib3RoIGVuYWJsZWQsIG9yLCBhcyBhIHN0YW5kYWxvbmUgb3B0aW9uLCBgQ01BYC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZzsgaXQgZmVlbHMgbGlrZSB0aGV5IGFyZSBzdWdnZXN0aW5nIHRoaXMgZmVhdHVyZSBpcyBkZXNpZ25lZCB0byBhZGRyZXNzIGEgbmVlZCwgcHJlc3VtYWJseSBmb3IgcGh5c2ljYWxseSBjb250aWd1b3VzIG1lbW9yeS4KCkdpdmVuIHRoaXMsIEkgc2hvdWxkIGZvY3VzIG9uIGBDTUFgLCB0aGUgQ29tcGFydG1lbnRhbGl6ZWQgTWVtb3J5IEFsbG9jYXRvci4gSSBzaG91bGQgcmV2aWV3IGl0cyBzcGVjaWZpYyBjaGFyYWN0ZXJpc3RpY3MgdG8gZnVsbHkgdW5kZXJzdGFuZCBob3cgdGhpcyBvcHRpb24gcGxheXMgaW50byBgQ09OVElHX0FMTE9DYCwgc2luY2UgSSBhbHJlYWR5IGhhdmUgYSBmaXJtIGdyYXNwIG9uIGhvdyBNRU1PUllfSVNPTEFUSU9OIGFuZCBDT01QQUNUSU9OIHdvcmssIGFuZCB0aGUgcm9sZSB0aGV5IHBsYXkuIElzIGl0IHRoZSBwcmltYXJ5IG1ldGhvZCB0byBndWFyYW50ZWUgdGhlIGFsbG9jYXRpb24sIG9yIGlzIGl0IGEgbGFzdCByZXNvcnQgd2hlbiB0aGUgb3RoZXIgb3B0aW9ucyBhcmVuJiMzOTt0IGF2YWlsYWJsZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgb3RoZXIgbWVjaGFuaXNtcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjA6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENNQSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvZG1hL0tjb25maWc9MTczPWNvbmZpZyBETUFfTlVNQV9DTUFcbi0tXG5rZXJuZWwvZG1hL0tjb25maWctMTg1LVxua2VybmVsL2RtYS9LY29uZmlnOjE4Njpjb25maWcgQ01BX1NJWkVfUEVSTlVNQVxua2VybmVsL2RtYS9LY29uZmlnLTE4Ny1cdGJvb2wgXCYjMzQ7RGVmYXVsdCBDTUEgYXJlYSBwZXIgTlVNQSBub2RlXCYjMzQ7XG4tLVxua2VybmVsL2RtYS9LY29uZmlnPTE5Nj1jb21tZW50IFwmIzM0O0RlZmF1bHQgY29udGlndW91cyBtZW1vcnkgYXJlYSBzaXplOlwmIzM0O1xua2VybmVsL2RtYS9LY29uZmlnLTE5Ny1cbmtlcm5lbC9kbWEvS2NvbmZpZzoxOTg6Y29uZmlnIENNQV9TSVpFX01CWVRFU1xua2VybmVsL2RtYS9LY29uZmlnLTE5OS1cdGludCBcJiMzNDtTaXplIGluIE1lZ2EgQnl0ZXNcJiMzNDtcbi0tXG5rZXJuZWwvZG1hL0tjb25maWctMjA4LVxua2VybmVsL2RtYS9LY29uZmlnOjIwOTpjb25maWcgQ01BX1NJWkVfUEVSQ0VOVEFHRVxua2VybmVsL2RtYS9LY29uZmlnLTIxMC1cdGludCBcJiMzNDtQZXJjZW50YWdlIG9mIHRvdGFsIG1lbW9yeVwmIzM0O1xuLS1cbmtlcm5lbC9kbWEvS2NvbmZpZz0yMjA9Y2hvaWNlXG4tLVxua2VybmVsL2RtYS9LY29uZmlnLTIyMy1cbmtlcm5lbC9kbWEvS2NvbmZpZzoyMjQ6Y29uZmlnIENNQV9TSVpFX1NFTF9NQllURVNcbmtlcm5lbC9kbWEvS2NvbmZpZy0yMjUtXHRib29sIFwmIzM0O1VzZSBtZWdhIGJ5dGVzIHZhbHVlIG9ubHlcJiMzNDtcbmtlcm5lbC9kbWEvS2NvbmZpZy0yMjYtXG5rZXJuZWwvZG1hL0tjb25maWc6MjI3OmNvbmZpZyBDTUFfU0laRV9TRUxfUEVSQ0VOVEFHRVxua2VybmVsL2RtYS9LY29uZmlnLTIyOC1cdGJvb2wgXCYjMzQ7VXNlIHBlcmNlbnRhZ2UgdmFsdWUgb25seVwmIzM0O1xua2VybmVsL2RtYS9LY29uZmlnLTIyOS1cbmtlcm5lbC9kbWEvS2NvbmZpZzoyMzA6Y29uZmlnIENNQV9TSVpFX1NFTF9NSU5cbmtlcm5lbC9kbWEvS2NvbmZpZy0yMzEtXHRib29sIFwmIzM0O1VzZSBsb3dlciB2YWx1ZSAobWluaW11bSlcJiMzNDtcbmtlcm5lbC9kbWEvS2NvbmZpZy0yMzItXG5rZXJuZWwvZG1hL0tjb25maWc6MjMzOmNvbmZpZyBDTUFfU0laRV9TRUxfTUFYXG5rZXJuZWwvZG1hL0tjb25maWctMjM0LVx0Ym9vbCBcJiMzNDtVc2UgaGlnaGVyIHZhbHVlIChtYXhpbXVtKVwmIzM0O1xuLS1cbmtlcm5lbC9kbWEvS2NvbmZpZz0yMzY9ZW5kY2hvaWNlXG5rZXJuZWwvZG1hL0tjb25maWctMjM3LVxua2VybmVsL2RtYS9LY29uZmlnOjIzODpjb25maWcgQ01BX0FMSUdOTUVOVFxua2VybmVsL2RtYS9LY29uZmlnLTIzOS1cdGludCBcJiMzNDtNYXhpbXVtIFBBR0VfU0laRSBvcmRlciBvZiBhbGlnbm1lbnQgZm9yIGNvbnRpZ3VvdXMgYnVmZmVyc1wmIzM0O1xuLS1cbm1tL0tjb25maWc9MTA2ND1jb25maWcgSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUFcbi0tXG5tbS9LY29uZmlnLTEwNjYtXG5tbS9LY29uZmlnOjEwNjc6Y29uZmlnIENNQVxubW0vS2NvbmZpZy0xMDY4LVx0Ym9vbCBcJiMzNDtDb250aWd1b3VzIE1lbW9yeSBBbGxvY2F0b3JcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTEwODEtXG5tbS9LY29uZmlnOjEwODI6Y29uZmlnIENNQV9ERUJVR0ZTXG5tbS9LY29uZmlnLTEwODMtXHRib29sIFwmIzM0O0NNQSBkZWJ1Z2ZzIGludGVyZmFjZVwmIzM0O1xuLS1cbm1tL0tjb25maWctMTA4Ny1cbm1tL0tjb25maWc6MTA4ODpjb25maWcgQ01BX1NZU0ZTXG5tbS9LY29uZmlnLTEwODktXHRib29sIFwmIzM0O0NNQSBpbmZvcm1hdGlvbiB0aHJvdWdoIHN5c2ZzIGludGVyZmFjZVwmIzM0O1xuLS1cbm1tL0tjb25maWctMTA5NC1cbm1tL0tjb25maWc6MTA5NTpjb25maWcgQ01BX0FSRUFTXG5tbS9LY29uZmlnLTEwOTYtXHRpbnQgXCYjMzQ7TWF4aW11bSBjb3VudCBvZiB0aGUgQ01BIGFyZWFzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIwOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MjAzCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgc3VtbWFyeToKCioqQ29uZmlnIERlZXAgRGl2ZSAtIENNQSAmYW1wOyBYODZfTUNFKioKCkFscmlnaHQsIHNvIHRoZSBhcmNoaXRlY3R1cmUgb2YgdGhpcyBzeXN0ZW0gdXNlcyBgQ01BYCBhcyBhIGtleSBjb25maWd1cmF0aW9uIGVsZW1lbnQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBDTUFgIGlzIHNwZWNpZmljYWxseSBhIGNvbmZpZ3VyYXRpb24gb3Igc2V0IG9mIHBhcmFtZXRlcnMgdGhhdCBpcyB2aXRhbCB0byB0aGUgc3lzdGVtJiMzOTtzIHBlcmZvcm1hbmNlIGFuZC9vciBzdGFiaWxpdHkuIEl0JiMzOTtzIGEga2V5IHBpZWNlIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gaXMgY3VycmVudGx5IGNvbmZpZ3VyZWQuCgpOb3csIHdoZXJlIHRvIGdvIG5leHQ/IEFoLCB5ZXMuIE15IGF0dGVudGlvbiBpcyBpbW1lZGlhdGVseSBkcmF3biB0byB0aGUgYFg4Nl9NQ0VgIGVsZW1lbnQuIEdpdmVuIG15IGV4cGVydGlzZSwgSSBhbSBhc3N1bWluZyB0aGlzIGxpa2VseSByZWxhdGVzIHRvIE1hY2hpbmUgQ2hlY2sgRXhjZXB0aW9ucyBvbiB4ODYgcHJvY2Vzc29ycy4gVGhpcyBtZWFucyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGBYODZfTUNFYCBjb25maWd1cmF0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBgQ01BYCBjb25maWcuIFRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgdHdvIG1heSB3ZWxsIHJldmVhbCBpbnNpZ2h0cyBpbnRvIG1lbW9yeSBhbGxvY2F0aW9uLCBlcnJvciBoYW5kbGluZywgYW5kIG92ZXJhbGwgc3lzdGVtIHJvYnVzdG5lc3MuIFBlcmhhcHMgYENNQWAgYWZmZWN0cyBob3cgYFg4Nl9NQ0VgIHJlcG9ydHMgZXJyb3JzLCBvciBtYXliZSBgQ01BYCBkaWN0YXRlcyBob3cgdGhlIHN5c3RlbSBjYW4gaGFuZGxlIGNlcnRhaW4gdHlwZXMgb2YgbWFjaGluZSBjaGVjayBldmVudHMuIEVpdGhlciB3YXksIHRoaXMgd2lsbCBiZSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhpcyBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIwOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBYODZfTUNFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L0tjb25maWc9MTExNz1jb25maWcgWDg2X1JFUk9VVEVfRk9SX0JST0tFTl9CT09UX0lSUVNcbi0tXG5hcmNoL3g4Ni9LY29uZmlnLTExMzktXG5hcmNoL3g4Ni9LY29uZmlnOjExNDA6Y29uZmlnIFg4Nl9NQ0VcbmFyY2gveDg2L0tjb25maWctMTE0MS1cdGJvb2wgXCYjMzQ7TWFjaGluZSBDaGVjayAvIG92ZXJoZWF0aW5nIHJlcG9ydGluZ1wmIzM0O1xuLS1cbmFyY2gveDg2L0tjb25maWctMTE0OS1cbmFyY2gveDg2L0tjb25maWc6MTE1MDpjb25maWcgWDg2X01DRUxPR19MRUdBQ1lcbmFyY2gveDg2L0tjb25maWctMTE1MS1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgZGVwcmVjYXRlZCAvZGV2L21jZWxvZyBjaGFyYWN0ZXIgZGV2aWNlXCYjMzQ7XG4tLVxuYXJjaC94ODYvS2NvbmZpZy0xMTU3LVxuYXJjaC94ODYvS2NvbmZpZzoxMTU4OmNvbmZpZyBYODZfTUNFX0lOVEVMXG5hcmNoL3g4Ni9LY29uZmlnLTExNTktXHRkZWZfYm9vbCB5XG4tLVxuYXJjaC94ODYvS2NvbmZpZy0xMTY1LVxuYXJjaC94ODYvS2NvbmZpZzoxMTY2OmNvbmZpZyBYODZfTUNFX0FNRFxuYXJjaC94ODYvS2NvbmZpZy0xMTY3LVx0ZGVmX2Jvb2wgeVxuLS1cbmFyY2gveDg2L0tjb25maWc9MTE3ND1jb25maWcgWDg2X0FOQ0lFTlRfTUNFXG4tLVxuYXJjaC94ODYvS2NvbmZpZy0xMTgxLVxuYXJjaC94ODYvS2NvbmZpZzoxMTgyOmNvbmZpZyBYODZfTUNFX1RIUkVTSE9MRFxuYXJjaC94ODYvS2NvbmZpZy0xMTgzLVx0ZGVwZW5kcyBvbiBYODZfTUNFX0FNRCB8fCBYODZfTUNFX0lOVEVMXG4tLVxuYXJjaC94ODYvS2NvbmZpZy0xMTg1LVxuYXJjaC94ODYvS2NvbmZpZzoxMTg2OmNvbmZpZyBYODZfTUNFX0lOSkVDVFxuYXJjaC94ODYvS2NvbmZpZy0xMTg3LVx0ZGVwZW5kcyBvbiBYODZfTUNFIFx1MDAyNlx1MDAyNiBYODZfTE9DQUxfQVBJQyBcdTAwMjZcdTAwMjYgREVCVUdfRlNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjA6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY5ODMKCQkJCQkJCW91dHB1dDogMjgyCgkJCQkJCQl0aG91Z2h0czogMTE5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLVk0geDg2IE9wZXJhdGlvbiBBbmFseXNpcyBmb3IgRW11bGF0aW9uIGFuZCBJbml0aWFsaXphdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSYjMzk7bSBjb25maXJtaW5nIHRoYXQgYFg4Nl9NQ0VgIGlzIGEgY29uZmlnLiBUaGVuIEkgc2VlIHRoZSByZWxldmFudCBLVk0gY29uZmlndXJhdGlvbnMgdGhhdCB3aWxsIGJlIGVuYWJsZWQ6IGBLVk1gLCBgS1ZNX0lOVEVMYCwgYEtWTV9BTURgLCBgS1ZNX1NNTWAsIGBLVk1fQU1EX1NFVmAsIGBLVk1fSU5URUxfVERYYCwgYElOVEVMX1REWF9IT1NUYCwgYENSWVBUT19ERVZfU1BfUFNQYCwgYENSWVBUT19ERVZfQ0NQX0REYCwgYEFNRF9JT01NVWAsIGBYODZfWDJBUElDYCwgYENNQWAsIGFuZCBgWDg2X01DRWAuIFRoZXNlIHNlZW0gc3RhbmRhcmQuCgpOb3csIEkmIzM5O20gZm9jdXNpbmcgb24ga2V5IHN5bWJvbHMgcmVsYXRlZCB0byBlbXVsYXRpb24gcmVxdWlyZW1lbnRzIGFuZCB2Q1BVIGluaXRpYWxpemF0aW9uOiBgZW11bGF0b3JfbGVhdmVfc21tYCwgYHZteF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkYCwgYHRkeF92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uYCwgYW5kIGBzZXZfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbmAuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgS1ZNIGhhbmRsZXMgc2l0dWF0aW9ucyBsaWtlIFNNTSBleGl0cyBhbmQgZ3Vlc3Qgc3RhdGUgaXNzdWVzLgoKSSYjMzk7bSBkb3VibGUtY2hlY2tpbmcgdGhlc2UgYXJlIG5vbi1zdGF0aWMgZnVuY3Rpb25zLCBhbmQgdGh1cyBleHBvc2VkLiBJIGNvbmZpcm1lZCB0aGV5IGFyZSBpbmRlZWQgZXhwb3NlZC4gVGhlIGZvY3VzIGlzIHRvIGFkZHJlc3MgdGhlIG5ldyBLVk0geDg2IG9wZXJhdGlvbiBgdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZGAgYW5kIHJlbmFtZWQgdkNQVSBmdW5jdGlvbiBgdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbmAsIHRoYXQgdGhpcyBjaGFuZ2UgbW9kaWZpZXMgdGhlIEtWTSYjMzk7cyBiZWhhdmlvci4gU3BlY2lmaWNhbGx5LCB0aGUgY2hhbmdlIHNlZW1zIHRvIGludm9sdmUgaGFuZGxpbmcgaW52YWxpZCBndWVzdCBzdGF0ZXMgYW5kIGVtdWxhdGlvbiBmYWlsdXJlcywgd2hpY2ggaXMgc2lnbmlmaWNhbnQsIGVzcGVjaWFsbHkgd2hlbiByZXR1cm5pbmcgZnJvbSBTeXN0ZW0gTWFuYWdlbWVudCBNb2RlLiBUaGlzIGNoYW5nZSBpcyBmdW5jdGlvbmFsIGFuZCBzaG91bGQgYmUgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4KCkkgdmVyaWZpZWQgdGhlIGZ1bmN0aW9uIGBlbXVsYXRvcl9sZWF2ZV9zbW1gIGlzIG5vbi1zdGF0aWMgaW4gYGFyY2gveDg2L2t2bS9zbW0uY2AgYW5kIGlzIGV4cG9ydGVkIGluIGBhcmNoL3g4Ni9rdm0vc21tLmhgLiBJIGNoZWNrZWQgYW5kIGNvbmZpcm1lZCB0aGF0IHRoZSBmdW5jdGlvbnMgYHZteF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkYCwgYHRkeF92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uYCwgYW5kIGBzZXZfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbmAgYXJlIGFsc28gbm9uLXN0YXRpYy4gRWFjaCBvZiB0aGVzZSBjaGVja3MgcHJvdmlkZXMgdGhlIHJlcXVpcmVkIGNvbnRleHQgZm9yIHRoZSBjaGFuZ2UsIGFuZCBjb25maXJtIHRoZXNlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGFyZSBleHBvcnRlZCBpbiB0aGVpciByZXNwZWN0aXZlIGZpbGVzLiBFdmVyeXRoaW5nIGNoZWNrcyBvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIwOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0lOVEVMJiMzNDssCiAgICAmIzM0O0tWTV9BTUQmIzM0OywKICAgICYjMzQ7S1ZNX1NNTSYjMzQ7LAogICAgJiMzNDtLVk1fQU1EX1NFViYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUxfVERYJiMzNDssCiAgICAmIzM0O0lOVEVMX1REWF9IT1NUJiMzNDssCiAgICAmIzM0O0NSWVBUT19ERVZfU1BfUFNQJiMzNDssCiAgICAmIzM0O0NSWVBUT19ERVZfQ0NQX0REJiMzNDssCiAgICAmIzM0O0FNRF9JT01NVSYjMzQ7LAogICAgJiMzNDtYODZfWDJBUElDJiMzNDssCiAgICAmIzM0O0NNQSYjMzQ7LAogICAgJiMzNDtYODZfTUNFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZW11bGF0b3JfbGVhdmVfc21tJiMzNDssCiAgICAmIzM0O3ZteF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkJiMzNDssCiAgICAmIzM0O3RkeF92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uJiMzNDssCiAgICAmIzM0O3Nldl92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgS1ZNIHg4NiBvcGVyYXRpb24gYHVuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWRgIGFuZCByZW5hbWVzIGB2Y3B1X3ByZV9ydW5gIHRvIGB2Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uYC4gSXQgbW9kaWZpZXMgaG93IEtWTSBoYW5kbGVzIGludmFsaWQgZ3Vlc3Qgc3RhdGVzIGFuZCBlbXVsYXRpb24gZmFpbHVyZXMsIHBhcnRpY3VsYXJseSB3aGVuIHJldHVybmluZyBmcm9tIFN5c3RlbSBNYW5hZ2VtZW50IE1vZGUgKFNNTSkgdmlhIFJTTS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEtWTSB4ODYgbG9naWMgYW5kIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OywKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7LAogICAgJiMzNDtLVk1fU01NJiMzNDssCiAgICAmIzM0O0tWTV9BTURfU0VWJiMzNDssCiAgICAmIzM0O0tWTV9JTlRFTF9URFgmIzM0OywKICAgICYjMzQ7SU5URUxfVERYX0hPU1QmIzM0OywKICAgICYjMzQ7Q1JZUFRPX0RFVl9TUF9QU1AmIzM0OywKICAgICYjMzQ7Q1JZUFRPX0RFVl9DQ1BfREQmIzM0OywKICAgICYjMzQ7QU1EX0lPTU1VJiMzNDssCiAgICAmIzM0O1g4Nl9YMkFQSUMmIzM0OywKICAgICYjMzQ7Q01BJiMzNDssCiAgICAmIzM0O1g4Nl9NQ0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtlbXVsYXRvcl9sZWF2ZV9zbW0mIzM0OywKICAgICYjMzQ7dm14X3VuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQmIzM0OywKICAgICYjMzQ7dGR4X3ZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24mIzM0OywKICAgICYjMzQ7c2V2X3ZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBLVk0geDg2IG9wZXJhdGlvbiBgdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZGAgYW5kIHJlbmFtZXMgYHZjcHVfcHJlX3J1bmAgdG8gYHZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb25gLiBJdCBtb2RpZmllcyBob3cgS1ZNIGhhbmRsZXMgaW52YWxpZCBndWVzdCBzdGF0ZXMgYW5kIGVtdWxhdGlvbiBmYWlsdXJlcywgcGFydGljdWxhcmx5IHdoZW4gcmV0dXJuaW5nIGZyb20gU3lzdGVtIE1hbmFnZW1lbnQgTW9kZSAoU01NKSB2aWEgUlNNLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgS1ZNIHg4NiBsb2dpYyBhbmQgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIwOjA4OjEyLjY0MTYxNDI1NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTI0NjA5NzY0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9JTlRFTFwiLFxuICAgIFwiS1ZNX0FNRFwiLFxuICAgIFwiS1ZNX1NNTVwiLFxuICAgIFwiS1ZNX0FNRF9TRVZcIixcbiAgICBcIktWTV9JTlRFTF9URFhcIixcbiAgICBcIklOVEVMX1REWF9IT1NUXCIsXG4gICAgXCJDUllQVE9fREVWX1NQX1BTUFwiLFxuICAgIFwiQ1JZUFRPX0RFVl9DQ1BfRERcIixcbiAgICBcIkFNRF9JT01NVVwiLFxuICAgIFwiWDg2X1gyQVBJQ1wiLFxuICAgIFwiQ01BXCIsXG4gICAgXCJYODZfTUNFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZW11bGF0b3JfbGVhdmVfc21tXCIsXG4gICAgXCJ2bXhfdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZFwiLFxuICAgIFwidGR4X3ZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb25cIixcbiAgICBcInNldl92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBLVk0geDg2IG9wZXJhdGlvbiBgdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZGAgYW5kIHJlbmFtZXMgYHZjcHVfcHJlX3J1bmAgdG8gYHZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb25gLiBJdCBtb2RpZmllcyBob3cgS1ZNIGhhbmRsZXMgaW52YWxpZCBndWVzdCBzdGF0ZXMgYW5kIGVtdWxhdGlvbiBmYWlsdXJlcywgcGFydGljdWxhcmx5IHdoZW4gcmV0dXJuaW5nIGZyb20gU3lzdGVtIE1hbmFnZW1lbnQgTW9kZSAoU01NKSB2aWEgUlNNLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgS1ZNIHg4NiBsb2dpYyBhbmQgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMjA6MDg6MTIuNjQxNjIyNTY0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTY0MTY1NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBiMjYwMTcwMDI2ODgyMDVlYTdmMzI5NzU0ZTc1Y2U2MDNmZTMzNWViXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgSnVsIDI4IDIwOjA4OjExIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oXFxuaW5kZXggNWNiMTMyZWNhM2MzNS4uZTIxM2M5YWUzZTMwMSAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oXFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaFxcbkBAIC02MywxMSArNjMsMTIgQEAgS1ZNX1g4Nl9PUF9PUFRJT05BTChmbHVzaF9yZW1vdGVfdGxic19yYW5nZSlcXG4gI2VuZGlmXFxuIEtWTV9YODZfT1AoZmx1c2hfdGxiX2d2YSlcXG4gS1ZNX1g4Nl9PUChmbHVzaF90bGJfZ3Vlc3QpXFxuLUtWTV9YODZfT1AodmNwdV9wcmVfcnVuKVxcbitLVk1fWDg2X09QX09QVElPTkFMX1JFVDAodmNwdV9uZWVkc19pbml0aWFsaXphdGlvbilcXG4gS1ZNX1g4Nl9PUCh2Y3B1X3J1bilcXG4gS1ZNX1g4Nl9PUChoYW5kbGVfZXhpdClcXG4gS1ZNX1g4Nl9PUChza2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKVxcbiBLVk1fWDg2X09QX09QVElPTkFMKHVwZGF0ZV9lbXVsYXRlZF9pbnN0cnVjdGlvbilcXG4rS1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKHVuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQpXFxuIEtWTV9YODZfT1Aoc2V0X2ludGVycnVwdF9zaGFkb3cpXFxuIEtWTV9YODZfT1AoZ2V0X2ludGVycnVwdF9zaGFkb3cpXFxuIEtWTV9YODZfT1AocGF0Y2hfaHlwZXJjYWxsKVxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxcbmluZGV4IDdhMjU4ODMxNjE2ZmEuLjI4Mzg0NzYxOWZmODggMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcXG5AQCAtMTU4NiwxMyArMTU4NiwxNSBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMge1xcbiBcXHQgKi9cXG4gXFx0dm9pZCAoKmZsdXNoX3RsYl9ndWVzdCkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4gXFxuLVxcdGludCAoKnZjcHVfcHJlX3J1bikoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4rXFx0Ym9vbCAoKnZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIFxcdGVudW0gZXhpdF9mYXN0cGF0aF9jb21wbGV0aW9uICgqdmNwdV9ydW4pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICB1NjQgcnVuX2ZsYWdzKTtcXG4gXFx0aW50ICgqaGFuZGxlX2V4aXQpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4gXFx0XFx0ZW51bSBleGl0X2Zhc3RwYXRoX2NvbXBsZXRpb24gZXhpdF9mYXN0cGF0aCk7XFxuIFxcdGludCAoKnNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIFxcdHZvaWQgKCp1cGRhdGVfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuK1xcdGJvb2wgKCp1bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbitcXG4gXFx0dm9pZCAoKnNldF9pbnRlcnJ1cHRfc2hhZG93KShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBtYXNrKTtcXG4gXFx0dTMyICgqZ2V0X2ludGVycnVwdF9zaGFkb3cpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIFxcdHZvaWQgKCpwYXRjaF9oeXBlcmNhbGwpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3NtbS5jIGIvYXJjaC94ODYva3ZtL3NtbS5jXFxuaW5kZXggYTQ0NjQ4N2JkZDVjZi4uNjU2YTM4ZGFkN2U3YSAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vc21tLmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vc21tLmNcXG5AQCAtNjQ5LDYgKzY0OSwxMCBAQCBpbnQgZW11bGF0b3JfbGVhdmVfc21tKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KVxcbiAjZW5kaWZcXG4gXFx0XFx0cmV0ID0gcnNtX2xvYWRfc3RhdGVfMzIoY3R4dCwgXFx1MDAyNnNtcmFtLnNtcmFtMzIpO1xcbiBcXG4rXFx0aWYgKHJldCA9PSBYODZFTVVMX0NPTlRJTlVFIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBrdm1feDg2X2NhbGwodW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZCkodmNwdSkpXFxuK1xcdFxcdHJldCA9IFg4NkVNVUxfVU5IQU5ETEVBQkxFO1xcbitcXG4gXFx0LypcXG4gXFx0ICogSWYgUlNNIGZhaWxzIGFuZCB0cmlnZ2VycyBzaHV0ZG93biwgYXJjaGl0ZWN0dXJhbGx5IHRoZSBzaHV0ZG93blxcbiBcXHQgKiBvY2N1cnMgKmJlZm9yZSogdGhlIHRyYW5zaXRpb24gdG8gZ3Vlc3QgbW9kZS4gIEJ1dCBkdWUgdG8gS1ZNJ3NcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuYyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcXG5pbmRleCA5MGEwOGQzNmQ4NDNkLi5mY2I0MWRmZGU0YzAyIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXFxuQEAgLTM1NTYsNiArMzU1NiwxMSBAQCB2b2lkIHNldl9mcmVlX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRfX3Nldl9lc191bm1hcF9naGNiKHN2bSk7XFxuIH1cXG4gXFxuK2Jvb2wgc2V2X3ZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbit7XFxuK1xcdHJldHVybiB0b19rdm1fc2V2X2luZm8odmNwdS1cXHUwMDNla3ZtKS1cXHUwMDNlbmVlZF9pbml0O1xcbit9XFxuK1xcbiBpbnQgcHJlX3Nldl9ydW4oc3RydWN0IHZjcHVfc3ZtICpzdm0sIGludCBjcHUpXFxuIHtcXG4gXFx0c3RydWN0IHN2bV9jcHVfZGF0YSAqc2QgPSBwZXJfY3B1X3B0cihcXHUwMDI2c3ZtX2RhdGEsIGNwdSk7XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXFxuaW5kZXggZDY4Y2JhMTJjNzcyYi4uYmNjY2E5YzViOTY2NyAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXFxuKysrIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xcbkBAIC00NDAyLDE2ICs0NDAyLDYgQEAgc3RhdGljIHZvaWQgc3ZtX2NhbmNlbF9pbmplY3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRzdm1fY29tcGxldGVfaW50ZXJydXB0cyh2Y3B1KTtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBzdm1fdmNwdV9wcmVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4te1xcbi0jaWZkZWYgQ09ORklHX0tWTV9BTURfU0VWXFxuLVxcdGlmICh0b19rdm1fc2V2X2luZm8odmNwdS1cXHUwMDNla3ZtKS1cXHUwMDNlbmVlZF9pbml0KVxcbi1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tI2VuZGlmXFxuLVxcbi1cXHRyZXR1cm4gMTtcXG4tfVxcbi1cXG4gc3RhdGljIGZhc3RwYXRoX3Qgc3ZtX2V4aXRfaGFuZGxlcnNfZmFzdHBhdGgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuIFxcdHN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpO1xcbkBAIC01Mzg4LDcgKzUzNzgsNiBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMgc3ZtX3g4Nl9vcHMgX19pbml0ZGF0YSA9IHtcXG4gXFx0LmZsdXNoX3RsYl9ndmEgPSBzdm1fZmx1c2hfdGxiX2d2YSxcXG4gXFx0LmZsdXNoX3RsYl9ndWVzdCA9IHN2bV9mbHVzaF90bGJfZ3Vlc3QsXFxuIFxcbi1cXHQudmNwdV9wcmVfcnVuID0gc3ZtX3ZjcHVfcHJlX3J1bixcXG4gXFx0LnZjcHVfcnVuID0gc3ZtX3ZjcHVfcnVuLFxcbiBcXHQuaGFuZGxlX2V4aXQgPSBzdm1faGFuZGxlX2V4aXQsXFxuIFxcdC5za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uID0gc3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24sXFxuQEAgLTU0NDYsNiArNTQzNSw3IEBAIHN0cnVjdCBrdm1feDg2X29wcyBzdm1feDg2X29wcyBfX2luaXRkYXRhID0ge1xcbiAjZW5kaWZcXG4gXFxuICNpZmRlZiBDT05GSUdfS1ZNX0FNRF9TRVZcXG4rXFx0LnZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24gPSBzZXZfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbixcXG4gXFx0LmRldl9nZXRfYXR0ciA9IHNldl9kZXZfZ2V0X2F0dHIsXFxuIFxcdC5tZW1fZW5jX2lvY3RsID0gc2V2X21lbV9lbmNfaW9jdGwsXFxuIFxcdC5tZW1fZW5jX3JlZ2lzdGVyX3JlZ2lvbiA9IHNldl9tZW1fZW5jX3JlZ2lzdGVyX3JlZ2lvbixcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uaCBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmhcXG5pbmRleCBhMzI3YmY3NTFlY2Q1Li42NmI0NGI1NDYwOGU4IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmhcXG4rKysgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oXFxuQEAgLTk3OSw2ICs5NzksNyBAQCB2b2lkIHNldl9lc19wcmVwYXJlX3N3aXRjaF90b19ndWVzdChzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgc3RydWN0IHNldl9lc19zYXZlX2FyZVxcbiB2b2lkIHNldl9lc191bm1hcF9naGNiKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKTtcXG4gXFxuICNpZmRlZiBDT05GSUdfS1ZNX0FNRF9TRVZcXG4rYm9vbCBzZXZfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbiBpbnQgc2V2X21lbV9lbmNfaW9jdGwoc3RydWN0IGt2bSAqa3ZtLCB2b2lkIF9fdXNlciAqYXJncCk7XFxuIGludCBzZXZfbWVtX2VuY19yZWdpc3Rlcl9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxcbiBcXHRcXHRcXHRcXHRzdHJ1Y3Qga3ZtX2VuY19yZWdpb24gKnJhbmdlKTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9tYWluLmMgYi9hcmNoL3g4Ni9rdm0vdm14L21haW4uY1xcbmluZGV4IDA0Zjk4NmUzZDQzOWEuLjBmZjMyMzBmZDk1ZTggMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9tYWluLmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L21haW4uY1xcbkBAIC0xNDAsMTIgKzE0MCwxMCBAQCBzdGF0aWMgdm9pZCB2dF92Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdHZteF92Y3B1X3B1dCh2Y3B1KTtcXG4gfVxcbiBcXG4tc3RhdGljIGludCB2dF92Y3B1X3ByZV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbitzdGF0aWMgYm9vbCB2dF92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4ge1xcbi1cXHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSlcXG4tXFx0XFx0cmV0dXJuIHRkeF92Y3B1X3ByZV9ydW4odmNwdSk7XFxuLVxcbi1cXHRyZXR1cm4gdm14X3ZjcHVfcHJlX3J1bih2Y3B1KTtcXG4rXFx0cmV0dXJuIGlzX3RkX3ZjcHUodmNwdSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICAgIHRkeF92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uKHZjcHUpO1xcbiB9XFxuIFxcbiBzdGF0aWMgZmFzdHBhdGhfdCB2dF92Y3B1X3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBydW5fZmxhZ3MpXFxuQEAgLTE2NSw2ICsxNjMsMTYgQEAgc3RhdGljIGludCB2dF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuIFxcdHJldHVybiB2bXhfaGFuZGxlX2V4aXQodmNwdSwgZmFzdHBhdGgpO1xcbiB9XFxuIFxcbitzdGF0aWMgYm9vbCB2dF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4re1xcbitcXHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSkge1xcbitcXHRcXHRXQVJOX09OX09OQ0UodG9fdnQodmNwdSktXFx1MDAzZWVtdWxhdGlvbl9yZXF1aXJlZCk7XFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHZteF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKHZjcHUpO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IHZ0X3NldF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgbXNyX2RhdGEgKm1zcl9pbmZvKVxcbiB7XFxuIFxcdGlmICh1bmxpa2VseShpc190ZF92Y3B1KHZjcHUpKSlcXG5AQCAtOTM5LDExICs5NDcsMTIgQEAgc3RydWN0IGt2bV94ODZfb3BzIHZ0X3g4Nl9vcHMgX19pbml0ZGF0YSA9IHtcXG4gXFx0LmZsdXNoX3RsYl9ndmEgPSB2dF9vcChmbHVzaF90bGJfZ3ZhKSxcXG4gXFx0LmZsdXNoX3RsYl9ndWVzdCA9IHZ0X29wKGZsdXNoX3RsYl9ndWVzdCksXFxuIFxcbi1cXHQudmNwdV9wcmVfcnVuID0gdnRfb3AodmNwdV9wcmVfcnVuKSxcXG4rXFx0LnZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24gPSB2dF9vcF90ZHhfb25seSh2Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uKSxcXG4gXFx0LnZjcHVfcnVuID0gdnRfb3AodmNwdV9ydW4pLFxcbiBcXHQuaGFuZGxlX2V4aXQgPSB2dF9vcChoYW5kbGVfZXhpdCksXFxuIFxcdC5za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uID0gdm14X3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24sXFxuIFxcdC51cGRhdGVfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24gPSB2bXhfdXBkYXRlX2VtdWxhdGVkX2luc3RydWN0aW9uLFxcbitcXHQudW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZCA9IHZ0X29wKHVuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQpLFxcbiBcXHQuc2V0X2ludGVycnVwdF9zaGFkb3cgPSB2dF9vcChzZXRfaW50ZXJydXB0X3NoYWRvdyksXFxuIFxcdC5nZXRfaW50ZXJydXB0X3NoYWRvdyA9IHZ0X29wKGdldF9pbnRlcnJ1cHRfc2hhZG93KSxcXG4gXFx0LnBhdGNoX2h5cGVyY2FsbCA9IHZ0X29wKHBhdGNoX2h5cGVyY2FsbCksXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmMgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXFxuaW5kZXggZDFhZjBhNzUyZTk3ZS4uYjI3MmMyMDU4NmE3NCAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXFxuKysrIGIvYXJjaC94ODYva3ZtL3ZteC90ZHguY1xcbkBAIC04OTcsMTMgKzg5NywxMCBAQCB2b2lkIHRkeF92Y3B1X2ZyZWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHR0ZHgtXFx1MDAzZXN0YXRlID0gVkNQVV9URF9TVEFURV9VTklOSVRJQUxJWkVEO1xcbiB9XFxuIFxcbi1pbnQgdGR4X3ZjcHVfcHJlX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuK2Jvb2wgdGR4X3ZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuLVxcdGlmICh1bmxpa2VseSh0b190ZHgodmNwdSktXFx1MDAzZXN0YXRlICE9IFZDUFVfVERfU1RBVEVfSU5JVElBTElaRUQgfHxcXG4tXFx0XFx0ICAgICB0b19rdm1fdGR4KHZjcHUtXFx1MDAzZWt2bSktXFx1MDAzZXN0YXRlICE9IFREX1NUQVRFX1JVTk5BQkxFKSlcXG4tXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLVxcbi1cXHRyZXR1cm4gMTtcXG4rXFx0cmV0dXJuIHRvX3RkeCh2Y3B1KS1cXHUwMDNlc3RhdGUgIT0gVkNQVV9URF9TVEFURV9JTklUSUFMSVpFRCB8fFxcbitcXHQgICAgICAgdG9fa3ZtX3RkeCh2Y3B1LVxcdTAwM2Vrdm0pLVxcdTAwM2VzdGF0ZSAhPSBURF9TVEFURV9SVU5OQUJMRTtcXG4gfVxcbiBcXG4gc3RhdGljIF9fYWx3YXlzX2lubGluZSB1MzIgdGRjYWxsX3RvX3ZteF9leGl0X3JlYXNvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdm14LmMgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXFxuaW5kZXggZTRiOWFjN2ZlZDlmMC4uNzYxNjBhZGY4Mjk3MCAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXFxuKysrIGIvYXJjaC94ODYva3ZtL3ZteC92bXguY1xcbkBAIC02MDM1LDcgKzYwMzUsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9ubWlfd2luZG93KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gICogd2l0aCB1bnNyZXN0cmljdGVkIGd1ZXN0IG1vZGUgZGlzYWJsZWQpIGFuZCBLVk0gY2FuJ3QgZmFpdGhmdWxseSBlbXVsYXRlIHRoZVxcbiAgKiBjdXJyZW50IHZDUFUgc3RhdGUuXFxuICAqL1xcbi1zdGF0aWMgYm9vbCB2bXhfdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuK2Jvb2wgdm14X3VuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuIFxcdHN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpO1xcbiBcXG5AQCAtNjExMCwxNiArNjExMCw2IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2ludmFsaWRfZ3Vlc3Rfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRyZXR1cm4gMTtcXG4gfVxcbiBcXG4taW50IHZteF92Y3B1X3ByZV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi17XFxuLVxcdGlmICh2bXhfdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZCh2Y3B1KSkge1xcbi1cXHRcXHRrdm1fcHJlcGFyZV9lbXVsYXRpb25fZmFpbHVyZV9leGl0KHZjcHUpO1xcbi1cXHRcXHRyZXR1cm4gMDtcXG4tXFx0fVxcbi1cXG4tXFx0cmV0dXJuIDE7XFxuLX1cXG4tXFxuIC8qXFxuICAqIEluZGljYXRlIGEgYnVzeS13YWl0aW5nIHZjcHUgaW4gc3BpbmxvY2suIFdlIGRvIG5vdCBlbmFibGUgdGhlIFBBVVNFXFxuICAqIGV4aXRpbmcsIHNvIG9ubHkgZ2V0IGhlcmUgb24gY3B1IHdpdGggUEFVU0UtTG9vcC1FeGl0aW5nLlxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaCBiL2FyY2gveDg2L2t2bS92bXgveDg2X29wcy5oXFxuaW5kZXggNDA5ODU4MDc0MjQ2Mi4uY2RiMzhkOTQwY2ZiNyAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaFxcbisrKyBiL2FyY2gveDg2L2t2bS92bXgveDg2X29wcy5oXFxuQEAgLTIxLDcgKzIxLDYgQEAgaW50IHZteF92bV9pbml0KHN0cnVjdCBrdm0gKmt2bSk7XFxuIHZvaWQgdm14X3ZtX2Rlc3Ryb3koc3RydWN0IGt2bSAqa3ZtKTtcXG4gaW50IHZteF92Y3B1X3ByZWNyZWF0ZShzdHJ1Y3Qga3ZtICprdm0pO1xcbiBpbnQgdm14X3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuLWludCB2bXhfdmNwdV9wcmVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIGZhc3RwYXRoX3Qgdm14X3ZjcHVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHJ1bl9mbGFncyk7XFxuIHZvaWQgdm14X3ZjcHVfZnJlZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbiB2b2lkIHZteF92Y3B1X3Jlc2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBpbml0X2V2ZW50KTtcXG5AQCAtMzEsNiArMzAsNyBAQCBpbnQgdm14X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBleGl0X2Zhc3RwYXRoKTtcXG4gdm9pZCB2bXhfaGFuZGxlX2V4aXRfaXJxb2ZmKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIGludCB2bXhfc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbiB2b2lkIHZteF91cGRhdGVfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4rYm9vbCB2bXhfdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbiBpbnQgdm14X3NldF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgbXNyX2RhdGEgKm1zcl9pbmZvKTtcXG4gI2lmZGVmIENPTkZJR19LVk1fU01NXFxuIGludCB2bXhfc21pX2FsbG93ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGZvcl9pbmplY3Rpb24pO1xcbkBAIC0xMzcsNyArMTM3LDcgQEAgaW50IHRkeF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbiB2b2lkIHRkeF92Y3B1X3Jlc2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBpbml0X2V2ZW50KTtcXG4gdm9pZCB0ZHhfdmNwdV9mcmVlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIHZvaWQgdGR4X3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpO1xcbi1pbnQgdGR4X3ZjcHVfcHJlX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbitib29sIHRkeF92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIGZhc3RwYXRoX3QgdGR4X3ZjcHVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHJ1bl9mbGFncyk7XFxuIHZvaWQgdGR4X3ByZXBhcmVfc3dpdGNoX3RvX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIHZvaWQgdGR4X3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuY1xcbmluZGV4IDBmMWE4MjkwMzJjMDYuLmQ5NGI1OTE0MGM0NTIgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5jXFxuKysrIGIvYXJjaC94ODYva3ZtL3g4Ni5jXFxuQEAgLTg4NjcsNyArODg2NywxNSBAQCBzdGF0aWMgaW50IGt2bV94ODZfdmNwdV9wcmVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0ICAgICFrdm1fYXBpY19pbml0X3NpcGlfYWxsb3dlZCh2Y3B1KSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbi1cXHRyZXR1cm4ga3ZtX3g4Nl9jYWxsKHZjcHVfcHJlX3J1bikodmNwdSk7XFxuK1xcdGlmIChrdm1feDg2X2NhbGwodmNwdV9uZWVkc19pbml0aWFsaXphdGlvbikodmNwdSkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0aWYgKGt2bV94ODZfY2FsbCh1bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKSh2Y3B1KSkge1xcbitcXHRcXHRrdm1fcHJlcGFyZV9lbXVsYXRpb25fZmFpbHVyZV9leGl0KHZjcHUpO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDE7XFxuIH1cXG4gXFxuIGludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X2ludmFsaWRfbmVzdGVkX2d1ZXN0X3N0YXRlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9pbnZhbGlkX25lc3RlZF9ndWVzdF9zdGF0ZS5jXFxuaW5kZXggNTc4MjgzODkzYWIzNy4uNmY1NDZkZWIxOTNhOSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9pbnZhbGlkX25lc3RlZF9ndWVzdF9zdGF0ZS5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfaW52YWxpZF9uZXN0ZWRfZ3Vlc3Rfc3RhdGUuY1xcbkBAIC0yLDYgKzIsNyBAQFxcbiAjaW5jbHVkZSBcXFwidGVzdF91dGlsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJrdm1fdXRpbC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwicHJvY2Vzc29yLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJzbW0uaFxcXCJcXG4gI2luY2x1ZGUgXFxcInZteC5oXFxcIlxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY3N0cmluZy5oXFx1MDAzZVxcbkBAIC05LDkgKzEwLDIzIEBAXFxuIFxcbiAjaW5jbHVkZSBcXFwia3NlbGZ0ZXN0LmhcXFwiXFxuIFxcbi0jZGVmaW5lIEFSQklUUkFSWV9JT19QT1JUIDB4MjAwMFxcbisjZGVmaW5lIEFSQklUUkFSWV9JT19QT1JUIDB4ODBcXG4gXFxuLXN0YXRpYyBzdHJ1Y3Qga3ZtX3ZtICp2bTtcXG4rLypcXG4rICogVGhlIDY0LWJpdCBTTVJBTSBzdGF0ZS1zYXZlIGFyZWEgc3RhcnRzIGF0IFNNQkFTRSArIDB4ZmUwMC4gIFRSIHN0YXJ0cyBhdFxcbisgKiBvZmZzZXQgMHhmZTkwLCBhbmQgYXR0cmlidXRlcyBpcyB0aGUgc2Vjb25kIDE2LWJpdCBmaWVsZCBpbiB0aGUgZGVzY3JpcHRvci5cXG4rICovXFxuKyNkZWZpbmUgU01SQU02NF9UUl9BVFRSSUJVVEVTX09GRlNFVFxcdDB4ZmU5MlxcbisjZGVmaW5lIFNNUkFNX0dQQVxcdFxcdFxcdDB4MTAwMDAwMFxcbitcXG4rLypcXG4rICogU01JIGhhbmRsZXIgdGhhdCBydW5zIGluIDE2LWJpdCBSZWFsIE1vZGUuICBTeW5jcyB3aXRoIEwwIHZpYSBwb3J0IEkvTywgdGhlblxcbisgKiBleGVjdXRlcyBSU00gdG8gdHJpZ2dlciB0aGUgY29uc3VtcHRpb24gb2YgaW52YWxpZCBndWVzdCBzdGF0ZS5cXG4rICovXFxuK3N0YXRpYyB1OCBzbWlfaGFuZGxlcltdID0ge1xcbitcXHQweGU0LCBBUkJJVFJBUllfSU9fUE9SVCxcXHQvKiBJTiAkQVJCSVRSQVJZX0lPX1BPUlQsICVhbCAqL1xcbitcXHQweDBmLCAweGFhLFxcdFxcdFxcdC8qIFJTTSAqL1xcbit9O1xcbiBcXG4gc3RhdGljIHZvaWQgbDJfZ3Vlc3RfY29kZSh2b2lkKVxcbiB7XFxuQEAgLTE5LDggKzM0LDkgQEAgc3RhdGljIHZvaWQgbDJfZ3Vlc3RfY29kZSh2b2lkKVxcbiBcXHQgKiBHZW5lcmF0ZSBhbiBleGl0IHRvIEwwIHVzZXJzcGFjZSwgaS5lLiBtYWluKCksIHZpYSBJL08gdG8gYW5cXG4gXFx0ICogYXJiaXRyYXJ5IHBvcnQuXFxuIFxcdCAqL1xcbi1cXHRhc20gdm9sYXRpbGUoXFxcImluYiAlJWR4LCAlJWFsXFxcIlxcbi1cXHRcXHQgICAgIDogOiBbcG9ydF0gXFxcImRcXFwiIChBUkJJVFJBUllfSU9fUE9SVCkgOiBcXFwicmF4XFxcIik7XFxuK1xcdGFzbSB2b2xhdGlsZShcXFwiaW5iICRcXFwiIF9fc3RyaW5naWZ5KEFSQklUUkFSWV9JT19QT1JUKSBcXFwiLCAlJWFsXFxcIlxcbitcXHRcXHQgICAgIDo6OiBcXFwicmF4XFxcIik7XFxuK1xcdEdVRVNUX0ZBSUwoXFxcIkwyIHJlc3VtZWQgYWZ0ZXIgc3R1ZmZpbmcgaW52YWxpZCBndWVzdCBzdGF0ZVxcXCIpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBsMV9ndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcylcXG5AQCAtNDYsMzUgKzYyLDUwIEBAIHN0YXRpYyB2b2lkIGwxX2d1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKVxcbiBcXHRHVUVTVF9ET05FKCk7XFxuIH1cXG4gXFxuLWludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXFxuK3N0YXRpYyB2b2lkIHZjcHVfcnVuX3RvX2lvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCB3YW50X2wyKVxcbiB7XFxuLVxcdGd2YV90IHZteF9wYWdlc19ndmE7XFxuLVxcdHN0cnVjdCBrdm1fc3JlZ3Mgc3JlZ3M7XFxuLVxcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcXG4tXFx0c3RydWN0IGt2bV9ydW4gKnJ1bjtcXG4tXFx0c3RydWN0IHVjYWxsIHVjO1xcbitcXHRzdHJ1Y3Qga3ZtX3J1biAqcnVuID0gdmNwdS1cXHUwMDNlcnVuO1xcbiBcXG4tXFx0VEVTVF9SRVFVSVJFKGt2bV9jcHVfaGFzKFg4Nl9GRUFUVVJFX1ZNWCkpO1xcbitcXHR2Y3B1X3J1bih2Y3B1KTtcXG4gXFxuLVxcdHZtID0gdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoXFx1MDAyNnZjcHUsIGwxX2d1ZXN0X2NvZGUpO1xcbitcXHRURVNUX0FTU0VSVF9LVk1fRVhJVF9SRUFTT04odmNwdSwgS1ZNX0VYSVRfSU8pO1xcbiBcXG4tXFx0LyogQWxsb2NhdGUgVk1YIHBhZ2VzIGFuZCBzaGFyZWQgZGVzY3JpcHRvcnMgKHZteF9wYWdlcykuICovXFxuLVxcdHZjcHVfYWxsb2Nfdm14KHZtLCBcXHUwMDI2dm14X3BhZ2VzX2d2YSk7XFxuLVxcdHZjcHVfYXJnc19zZXQodmNwdSwgMSwgdm14X3BhZ2VzX2d2YSk7XFxuK1xcdFRFU1RfQVNTRVJUKHJ1bi1cXHUwMDNlaW8ucG9ydCA9PSBBUkJJVFJBUllfSU9fUE9SVCBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgKCEhKHJ1bi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBLVk1fUlVOX1g4Nl9HVUVTVF9NT0RFKSA9PSB3YW50X2wyICB8fFxcbitcXHRcXHQgICAgICFrdm1faGFzX2NhcChLVk1fQ0FQX1g4Nl9HVUVTVF9NT0RFKSksXFxuK1xcdFxcdCAgICBcXFwiRXhwZWN0ZWQgSU4gZnJvbSBwb3J0ICVkIGZyb20gTDIsIGdvdCBwb3J0ICVkIGZyb20gTCV1XFxcIixcXG4rXFx0XFx0ICAgIEFSQklUUkFSWV9JT19QT1JULCBydW4tXFx1MDAzZWlvLnBvcnQsXFxuK1xcdFxcdCAgICAxICsgISEocnVuLVxcdTAwM2VmbGFncyBcXHUwMDI2IEtWTV9SVU5fWDg2X0dVRVNUX01PREUpKTtcXG4rfVxcbiBcXG4tXFx0dmNwdV9ydW4odmNwdSk7XFxuK3N0YXRpYyBzdHJ1Y3Qga3ZtX3ZtICp2bV9jcmVhdGVfYW5kX3J1bl9sMihzdHJ1Y3Qga3ZtX3ZjcHUgKip2Y3B1KVxcbit7XFxuK1xcdGd2YV90IHZteF9wYWdlc19ndmE7XFxuK1xcdHN0cnVjdCBrdm1fdm0gKnZtO1xcbitcXG4rXFx0dm0gPSB2bV9jcmVhdGVfd2l0aF9vbmVfdmNwdSh2Y3B1LCBsMV9ndWVzdF9jb2RlKTtcXG4gXFxuLVxcdHJ1biA9IHZjcHUtXFx1MDAzZXJ1bjtcXG4rXFx0LyogQWxsb2NhdGUgVk1YIHBhZ2VzIGFuZCBzaGFyZWQgZGVzY3JpcHRvcnMgKHZteF9wYWdlcykuICovXFxuK1xcdHZjcHVfYWxsb2Nfdm14KHZtLCBcXHUwMDI2dm14X3BhZ2VzX2d2YSk7XFxuK1xcdHZjcHVfYXJnc19zZXQoKnZjcHUsIDEsIHZteF9wYWdlc19ndmEpO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogVGhlIGZpcnN0IGV4aXQgdG8gTDAgdXNlcnNwYWNlIHNob3VsZCBiZSBhbiBJL08gYWNjZXNzIGZyb20gTDIuXFxuIFxcdCAqIFJ1bm5pbmcgTDEgc2hvdWxkIGxhdW5jaCBMMiB3aXRob3V0IHRyaWdnZXJpbmcgYW4gZXhpdCB0byB1c2Vyc3BhY2UuXFxuIFxcdCAqL1xcbi1cXHRURVNUX0FTU0VSVF9LVk1fRVhJVF9SRUFTT04odmNwdSwgS1ZNX0VYSVRfSU8pO1xcbitcXHR2Y3B1X3J1bl90b19pbygqdmNwdSwgdHJ1ZSk7XFxuIFxcbi1cXHRURVNUX0FTU0VSVChydW4tXFx1MDAzZWlvLnBvcnQgPT0gQVJCSVRSQVJZX0lPX1BPUlQsXFxuLVxcdFxcdCAgICBcXFwiRXhwZWN0ZWQgSU4gZnJvbSBwb3J0ICVkIGZyb20gTDIsIGdvdCBwb3J0ICVkXFxcIixcXG4tXFx0XFx0ICAgIEFSQklUUkFSWV9JT19QT1JULCBydW4tXFx1MDAzZWlvLnBvcnQpO1xcbitcXHRyZXR1cm4gdm07XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHRlc3RfaW52YWxpZF9sMl9ndWVzdF9zdGF0ZSh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBrdm1fc3JlZ3Mgc3JlZ3M7XFxuK1xcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcXG4rXFx0c3RydWN0IGt2bV92bSAqdm07XFxuK1xcdHN0cnVjdCB1Y2FsbCB1YztcXG4rXFxuK1xcdHZtID0gdm1fY3JlYXRlX2FuZF9ydW5fbDIoXFx1MDAyNnZjcHUpO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogU3R1ZmYgaW52YWxpZCBndWVzdCBzdGF0ZSBmb3IgTDIgYnkgbWFraW5nIFRSIHVudXNhYmxlLiAgVGhlIG5leHRcXG5AQCAtOTYsNCArMTI3LDQ5IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdFRFU1RfRkFJTChcXFwiVW5leHBlY3RlZCB1Y2FsbDogJWx1XFxcIiwgdWMuY21kKTtcXG4gXFx0fVxcbitcXG4rXFx0a3ZtX3ZtX2ZyZWUodm0pO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB0ZXN0X2ludmFsaWRfbDJfZ3Vlc3Rfc3RhdGVfcnNtKHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xcbitcXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcXG4rXFx0dTE2ICp0cl9hdHRycztcXG4rXFxuK1xcdGlmICgha3ZtX2hhc19jYXAoS1ZNX0NBUF9YODZfU01NKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0dm0gPSB2bV9jcmVhdGVfYW5kX3J1bl9sMihcXHUwMDI2dmNwdSk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBJbmplY3QgU01JIHdoaWxlIEwyIGlzIGFjdGl2ZSwgcnVuIHRoZSB2Q1BVIHRvIGdldCBJL08gZXhpdCBmcm9tIEwxLFxcbitcXHQgKiB0aGVuIHN0dWZmIFRSIGluIHRoZSBTTVJBTSBzdGF0ZS1zYXZlIGFyZWEgc28gdGhhdCBSU00gcmVzdG9yZXNcXG4rXFx0ICogaW52YWxpZCBMMiBzdGF0ZS5cXG4rXFx0ICovXFxuK1xcdHNldHVwX3NtcmFtKHZtLCB2Y3B1LCBTTVJBTV9HUEEsIHNtaV9oYW5kbGVyLCBzaXplb2Yoc21pX2hhbmRsZXIpKTtcXG4rXFx0aW5qZWN0X3NtaSh2Y3B1KTtcXG4rXFxuK1xcdHZjcHVfcnVuX3RvX2lvKHZjcHUsIGZhbHNlKTtcXG4rXFxuK1xcdC8qIENsZWFyIHRoZSBwcmVzZW50IGJpdCBpbiBTTVJBTSB0byBtYWtlIFRSIHVudXNhYmxlLiAqL1xcbitcXHR0cl9hdHRycyA9IGFkZHJfZ3BhMmh2YSh2bSwgU01SQU1fR1BBICsgU01SQU02NF9UUl9BVFRSSUJVVEVTX09GRlNFVCk7XFxuK1xcdCp0cl9hdHRycyBcXHUwMDI2PSB+QklUKDcpO1xcbitcXG4rXFx0dmNwdV9ydW4odmNwdSk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBGb3IgUlNNLCBMMSBnZXRzIHRoZSBTSFVURE9XTiBiZWNhdXNlIFJTTSBpcyBhcmNoaXRlY3R1cmFsbHkgZGVmaW5lZFxcbitcXHQgKiB0byByZXN1bHQgaW4gc2h1dGRvd24gaWYgdGhlIENQVSBkZXRlY3RzIGludmFsaWQgc3RhdGUgaW4gU01SQU0uXFxuK1xcdCAqL1xcbitcXHRURVNUX0FTU0VSVF9LVk1fRVhJVF9SRUFTT04odmNwdSwgS1ZNX0VYSVRfU0hVVERPV04pO1xcbitcXHRrdm1fdm1fZnJlZSh2bSk7XFxuK31cXG4rXFxuK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXFxuK3tcXG4rXFx0VEVTVF9SRVFVSVJFKGt2bV9jcHVfaGFzKFg4Nl9GRUFUVVJFX1ZNWCkpO1xcbitcXG4rXFx0dGVzdF9pbnZhbGlkX2wyX2d1ZXN0X3N0YXRlKCk7XFxuK1xcdHRlc3RfaW52YWxpZF9sMl9ndWVzdF9zdGF0ZV9yc20oKTtcXG4gfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMDowODoxMy4xOTg3OTI4ODRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNTg2ODg5MTE3MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fSU5URUxcIixcbiAgICBcIktWTV9BTURcIixcbiAgICBcIktWTV9TTU1cIixcbiAgICBcIktWTV9BTURfU0VWXCIsXG4gICAgXCJLVk1fSU5URUxfVERYXCIsXG4gICAgXCJJTlRFTF9URFhfSE9TVFwiLFxuICAgIFwiQ1JZUFRPX0RFVl9TUF9QU1BcIixcbiAgICBcIkNSWVBUT19ERVZfQ0NQX0REXCIsXG4gICAgXCJBTURfSU9NTVVcIixcbiAgICBcIlg4Nl9YMkFQSUNcIixcbiAgICBcIkNNQVwiLFxuICAgIFwiWDg2X01DRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImVtdWxhdG9yX2xlYXZlX3NtbVwiLFxuICAgIFwidm14X3VuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWRcIixcbiAgICBcInRkeF92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uXCIsXG4gICAgXCJzZXZfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgS1ZNIHg4NiBvcGVyYXRpb24gYHVuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWRgIGFuZCByZW5hbWVzIGB2Y3B1X3ByZV9ydW5gIHRvIGB2Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uYC4gSXQgbW9kaWZpZXMgaG93IEtWTSBoYW5kbGVzIGludmFsaWQgZ3Vlc3Qgc3RhdGVzIGFuZCBlbXVsYXRpb24gZmFpbHVyZXMsIHBhcnRpY3VsYXJseSB3aGVuIHJldHVybmluZyBmcm9tIFN5c3RlbSBNYW5hZ2VtZW50IE1vZGUgKFNNTSkgdmlhIFJTTS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEtWTSB4ODYgbG9naWMgYW5kIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGIyNjAxNzAwMjY4ODIwNWVhN2YzMjk3NTRlNzVjZTYwM2ZlMzM1ZWJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1bCAyOCAyMDowODoxMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oXG5pbmRleCA1Y2IxMzJlY2EzYzM1Li5lMjEzYzlhZTNlMzAxIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaFxuQEAgLTYzLDExICs2MywxMiBAQCBLVk1fWDg2X09QX09QVElPTkFMKGZsdXNoX3JlbW90ZV90bGJzX3JhbmdlKVxuICNlbmRpZlxuIEtWTV9YODZfT1AoZmx1c2hfdGxiX2d2YSlcbiBLVk1fWDg2X09QKGZsdXNoX3RsYl9ndWVzdClcbi1LVk1fWDg2X09QKHZjcHVfcHJlX3J1bilcbitLVk1fWDg2X09QX09QVElPTkFMX1JFVDAodmNwdV9uZWVkc19pbml0aWFsaXphdGlvbilcbiBLVk1fWDg2X09QKHZjcHVfcnVuKVxuIEtWTV9YODZfT1AoaGFuZGxlX2V4aXQpXG4gS1ZNX1g4Nl9PUChza2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKVxuIEtWTV9YODZfT1BfT1BUSU9OQUwodXBkYXRlX2VtdWxhdGVkX2luc3RydWN0aW9uKVxuK0tWTV9YODZfT1BfT1BUSU9OQUxfUkVUMCh1bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKVxuIEtWTV9YODZfT1Aoc2V0X2ludGVycnVwdF9zaGFkb3cpXG4gS1ZNX1g4Nl9PUChnZXRfaW50ZXJydXB0X3NoYWRvdylcbiBLVk1fWDg2X09QKHBhdGNoX2h5cGVyY2FsbClcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuaW5kZXggN2EyNTg4MzE2MTZmYS4uMjgzODQ3NjE5ZmY4OCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbkBAIC0xNTg2LDEzICsxNTg2LDE1IEBAIHN0cnVjdCBrdm1feDg2X29wcyB7XG4gXHQgKi9cbiBcdHZvaWQgKCpmbHVzaF90bGJfZ3Vlc3QpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gXG4tXHRpbnQgKCp2Y3B1X3ByZV9ydW4pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4rXHRib29sICgqdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbikoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBcdGVudW0gZXhpdF9mYXN0cGF0aF9jb21wbGV0aW9uICgqdmNwdV9ydW4pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdFx0XHRcdFx0XHQgIHU2NCBydW5fZmxhZ3MpO1xuIFx0aW50ICgqaGFuZGxlX2V4aXQpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdFx0ZW51bSBleGl0X2Zhc3RwYXRoX2NvbXBsZXRpb24gZXhpdF9mYXN0cGF0aCk7XG4gXHRpbnQgKCpza2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIFx0dm9pZCAoKnVwZGF0ZV9lbXVsYXRlZF9pbnN0cnVjdGlvbikoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbitcdGJvb2wgKCp1bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuK1xuIFx0dm9pZCAoKnNldF9pbnRlcnJ1cHRfc2hhZG93KShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBtYXNrKTtcbiBcdHUzMiAoKmdldF9pbnRlcnJ1cHRfc2hhZG93KShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIFx0dm9pZCAoKnBhdGNoX2h5cGVyY2FsbCkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zbW0uYyBiL2FyY2gveDg2L2t2bS9zbW0uY1xuaW5kZXggYTQ0NjQ4N2JkZDVjZi4uNjU2YTM4ZGFkN2U3YSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zbW0uY1xuKysrIGIvYXJjaC94ODYva3ZtL3NtbS5jXG5AQCAtNjQ5LDYgKzY0OSwxMCBAQCBpbnQgZW11bGF0b3JfbGVhdmVfc21tKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KVxuICNlbmRpZlxuIFx0XHRyZXQgPSByc21fbG9hZF9zdGF0ZV8zMihjdHh0LCBcdTAwMjZzbXJhbS5zbXJhbTMyKTtcbiBcbitcdGlmIChyZXQgPT0gWDg2RU1VTF9DT05USU5VRSBcdTAwMjZcdTAwMjZcbitcdCAgICBrdm1feDg2X2NhbGwodW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZCkodmNwdSkpXG4rXHRcdHJldCA9IFg4NkVNVUxfVU5IQU5ETEVBQkxFO1xuK1xuIFx0LypcbiBcdCAqIElmIFJTTSBmYWlscyBhbmQgdHJpZ2dlcnMgc2h1dGRvd24sIGFyY2hpdGVjdHVyYWxseSB0aGUgc2h1dGRvd25cbiBcdCAqIG9jY3VycyAqYmVmb3JlKiB0aGUgdHJhbnNpdGlvbiB0byBndWVzdCBtb2RlLiAgQnV0IGR1ZSB0byBLVk0nc1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXG5pbmRleCA5MGEwOGQzNmQ4NDNkLi5mY2I0MWRmZGU0YzAyIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xuKysrIGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xuQEAgLTM1NTYsNiArMzU1NiwxMSBAQCB2b2lkIHNldl9mcmVlX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0X19zZXZfZXNfdW5tYXBfZ2hjYihzdm0pO1xuIH1cbiBcbitib29sIHNldl92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbit7XG4rXHRyZXR1cm4gdG9fa3ZtX3Nldl9pbmZvKHZjcHUtXHUwMDNla3ZtKS1cdTAwM2VuZWVkX2luaXQ7XG4rfVxuK1xuIGludCBwcmVfc2V2X3J1bihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgaW50IGNwdSlcbiB7XG4gXHRzdHJ1Y3Qgc3ZtX2NwdV9kYXRhICpzZCA9IHBlcl9jcHVfcHRyKFx1MDAyNnN2bV9kYXRhLCBjcHUpO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXG5pbmRleCBkNjhjYmExMmM3NzJiLi5iY2NjYTljNWI5NjY3IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xuKysrIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xuQEAgLTQ0MDIsMTYgKzQ0MDIsNiBAQCBzdGF0aWMgdm9pZCBzdm1fY2FuY2VsX2luamVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRzdm1fY29tcGxldGVfaW50ZXJydXB0cyh2Y3B1KTtcbiB9XG4gXG4tc3RhdGljIGludCBzdm1fdmNwdV9wcmVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi17XG4tI2lmZGVmIENPTkZJR19LVk1fQU1EX1NFVlxuLVx0aWYgKHRvX2t2bV9zZXZfaW5mbyh2Y3B1LVx1MDAzZWt2bSktXHUwMDNlbmVlZF9pbml0KVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0jZW5kaWZcbi1cbi1cdHJldHVybiAxO1xuLX1cbi1cbiBzdGF0aWMgZmFzdHBhdGhfdCBzdm1fZXhpdF9oYW5kbGVyc19mYXN0cGF0aChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0c3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7XG5AQCAtNTM4OCw3ICs1Mzc4LDYgQEAgc3RydWN0IGt2bV94ODZfb3BzIHN2bV94ODZfb3BzIF9faW5pdGRhdGEgPSB7XG4gXHQuZmx1c2hfdGxiX2d2YSA9IHN2bV9mbHVzaF90bGJfZ3ZhLFxuIFx0LmZsdXNoX3RsYl9ndWVzdCA9IHN2bV9mbHVzaF90bGJfZ3Vlc3QsXG4gXG4tXHQudmNwdV9wcmVfcnVuID0gc3ZtX3ZjcHVfcHJlX3J1bixcbiBcdC52Y3B1X3J1biA9IHN2bV92Y3B1X3J1bixcbiBcdC5oYW5kbGVfZXhpdCA9IHN2bV9oYW5kbGVfZXhpdCxcbiBcdC5za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uID0gc3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24sXG5AQCAtNTQ0Niw2ICs1NDM1LDcgQEAgc3RydWN0IGt2bV94ODZfb3BzIHN2bV94ODZfb3BzIF9faW5pdGRhdGEgPSB7XG4gI2VuZGlmXG4gXG4gI2lmZGVmIENPTkZJR19LVk1fQU1EX1NFVlxuK1x0LnZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24gPSBzZXZfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbixcbiBcdC5kZXZfZ2V0X2F0dHIgPSBzZXZfZGV2X2dldF9hdHRyLFxuIFx0Lm1lbV9lbmNfaW9jdGwgPSBzZXZfbWVtX2VuY19pb2N0bCxcbiBcdC5tZW1fZW5jX3JlZ2lzdGVyX3JlZ2lvbiA9IHNldl9tZW1fZW5jX3JlZ2lzdGVyX3JlZ2lvbixcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uaFxuaW5kZXggYTMyN2JmNzUxZWNkNS4uNjZiNDRiNTQ2MDhlOCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmhcbisrKyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmhcbkBAIC05NzksNiArOTc5LDcgQEAgdm9pZCBzZXZfZXNfcHJlcGFyZV9zd2l0Y2hfdG9fZ3Vlc3Qoc3RydWN0IHZjcHVfc3ZtICpzdm0sIHN0cnVjdCBzZXZfZXNfc2F2ZV9hcmVcbiB2b2lkIHNldl9lc191bm1hcF9naGNiKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKTtcbiBcbiAjaWZkZWYgQ09ORklHX0tWTV9BTURfU0VWXG4rYm9vbCBzZXZfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIGludCBzZXZfbWVtX2VuY19pb2N0bChzdHJ1Y3Qga3ZtICprdm0sIHZvaWQgX191c2VyICphcmdwKTtcbiBpbnQgc2V2X21lbV9lbmNfcmVnaXN0ZXJfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcbiBcdFx0XHRcdHN0cnVjdCBrdm1fZW5jX3JlZ2lvbiAqcmFuZ2UpO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jIGIvYXJjaC94ODYva3ZtL3ZteC9tYWluLmNcbmluZGV4IDA0Zjk4NmUzZDQzOWEuLjBmZjMyMzBmZDk1ZTggMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L21haW4uY1xuKysrIGIvYXJjaC94ODYva3ZtL3ZteC9tYWluLmNcbkBAIC0xNDAsMTIgKzE0MCwxMCBAQCBzdGF0aWMgdm9pZCB2dF92Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHR2bXhfdmNwdV9wdXQodmNwdSk7XG4gfVxuIFxuLXN0YXRpYyBpbnQgdnRfdmNwdV9wcmVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbitzdGF0aWMgYm9vbCB2dF92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4tXHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSlcbi1cdFx0cmV0dXJuIHRkeF92Y3B1X3ByZV9ydW4odmNwdSk7XG4tXG4tXHRyZXR1cm4gdm14X3ZjcHVfcHJlX3J1bih2Y3B1KTtcbitcdHJldHVybiBpc190ZF92Y3B1KHZjcHUpIFx1MDAyNlx1MDAyNlxuK1x0ICAgICAgIHRkeF92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uKHZjcHUpO1xuIH1cbiBcbiBzdGF0aWMgZmFzdHBhdGhfdCB2dF92Y3B1X3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBydW5fZmxhZ3MpXG5AQCAtMTY1LDYgKzE2MywxNiBAQCBzdGF0aWMgaW50IHZ0X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdHJldHVybiB2bXhfaGFuZGxlX2V4aXQodmNwdSwgZmFzdHBhdGgpO1xuIH1cbiBcbitzdGF0aWMgYm9vbCB2dF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbit7XG4rXHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSkge1xuK1x0XHRXQVJOX09OX09OQ0UodG9fdnQodmNwdSktXHUwMDNlZW11bGF0aW9uX3JlcXVpcmVkKTtcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHZteF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKHZjcHUpO1xuK31cbitcbiBzdGF0aWMgaW50IHZ0X3NldF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgbXNyX2RhdGEgKm1zcl9pbmZvKVxuIHtcbiBcdGlmICh1bmxpa2VseShpc190ZF92Y3B1KHZjcHUpKSlcbkBAIC05MzksMTEgKzk0NywxMiBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMgdnRfeDg2X29wcyBfX2luaXRkYXRhID0ge1xuIFx0LmZsdXNoX3RsYl9ndmEgPSB2dF9vcChmbHVzaF90bGJfZ3ZhKSxcbiBcdC5mbHVzaF90bGJfZ3Vlc3QgPSB2dF9vcChmbHVzaF90bGJfZ3Vlc3QpLFxuIFxuLVx0LnZjcHVfcHJlX3J1biA9IHZ0X29wKHZjcHVfcHJlX3J1biksXG4rXHQudmNwdV9uZWVkc19pbml0aWFsaXphdGlvbiA9IHZ0X29wX3RkeF9vbmx5KHZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24pLFxuIFx0LnZjcHVfcnVuID0gdnRfb3AodmNwdV9ydW4pLFxuIFx0LmhhbmRsZV9leGl0ID0gdnRfb3AoaGFuZGxlX2V4aXQpLFxuIFx0LnNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24gPSB2bXhfc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbixcbiBcdC51cGRhdGVfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24gPSB2bXhfdXBkYXRlX2VtdWxhdGVkX2luc3RydWN0aW9uLFxuK1x0LnVuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQgPSB2dF9vcCh1bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKSxcbiBcdC5zZXRfaW50ZXJydXB0X3NoYWRvdyA9IHZ0X29wKHNldF9pbnRlcnJ1cHRfc2hhZG93KSxcbiBcdC5nZXRfaW50ZXJydXB0X3NoYWRvdyA9IHZ0X29wKGdldF9pbnRlcnJ1cHRfc2hhZG93KSxcbiBcdC5wYXRjaF9oeXBlcmNhbGwgPSB2dF9vcChwYXRjaF9oeXBlcmNhbGwpLFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmMgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXG5pbmRleCBkMWFmMGE3NTJlOTdlLi5iMjcyYzIwNTg2YTc0IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC90ZHguY1xuKysrIGIvYXJjaC94ODYva3ZtL3ZteC90ZHguY1xuQEAgLTg5NywxMyArODk3LDEwIEBAIHZvaWQgdGR4X3ZjcHVfZnJlZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHR0ZHgtXHUwMDNlc3RhdGUgPSBWQ1BVX1REX1NUQVRFX1VOSU5JVElBTElaRUQ7XG4gfVxuIFxuLWludCB0ZHhfdmNwdV9wcmVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbitib29sIHRkeF92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4tXHRpZiAodW5saWtlbHkodG9fdGR4KHZjcHUpLVx1MDAzZXN0YXRlICE9IFZDUFVfVERfU1RBVEVfSU5JVElBTElaRUQgfHxcbi1cdFx0ICAgICB0b19rdm1fdGR4KHZjcHUtXHUwMDNla3ZtKS1cdTAwM2VzdGF0ZSAhPSBURF9TVEFURV9SVU5OQUJMRSkpXG4tXHRcdHJldHVybiAtRUlOVkFMO1xuLVxuLVx0cmV0dXJuIDE7XG4rXHRyZXR1cm4gdG9fdGR4KHZjcHUpLVx1MDAzZXN0YXRlICE9IFZDUFVfVERfU1RBVEVfSU5JVElBTElaRUQgfHxcbitcdCAgICAgICB0b19rdm1fdGR4KHZjcHUtXHUwMDNla3ZtKS1cdTAwM2VzdGF0ZSAhPSBURF9TVEFURV9SVU5OQUJMRTtcbiB9XG4gXG4gc3RhdGljIF9fYWx3YXlzX2lubGluZSB1MzIgdGRjYWxsX3RvX3ZteF9leGl0X3JlYXNvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC92bXguYyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmNcbmluZGV4IGU0YjlhYzdmZWQ5ZjAuLjc2MTYwYWRmODI5NzAgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXG5AQCAtNjAzNSw3ICs2MDM1LDcgQEAgc3RhdGljIGludCBoYW5kbGVfbm1pX3dpbmRvdyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gICogd2l0aCB1bnNyZXN0cmljdGVkIGd1ZXN0IG1vZGUgZGlzYWJsZWQpIGFuZCBLVk0gY2FuJ3QgZmFpdGhmdWxseSBlbXVsYXRlIHRoZVxuICAqIGN1cnJlbnQgdkNQVSBzdGF0ZS5cbiAgKi9cbi1zdGF0aWMgYm9vbCB2bXhfdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4rYm9vbCB2bXhfdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0c3RydWN0IHZjcHVfdm14ICp2bXggPSB0b192bXgodmNwdSk7XG4gXG5AQCAtNjExMCwxNiArNjExMCw2IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2ludmFsaWRfZ3Vlc3Rfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0cmV0dXJuIDE7XG4gfVxuIFxuLWludCB2bXhfdmNwdV9wcmVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi17XG4tXHRpZiAodm14X3VuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQodmNwdSkpIHtcbi1cdFx0a3ZtX3ByZXBhcmVfZW11bGF0aW9uX2ZhaWx1cmVfZXhpdCh2Y3B1KTtcbi1cdFx0cmV0dXJuIDA7XG4tXHR9XG4tXG4tXHRyZXR1cm4gMTtcbi19XG4tXG4gLypcbiAgKiBJbmRpY2F0ZSBhIGJ1c3ktd2FpdGluZyB2Y3B1IGluIHNwaW5sb2NrLiBXZSBkbyBub3QgZW5hYmxlIHRoZSBQQVVTRVxuICAqIGV4aXRpbmcsIHNvIG9ubHkgZ2V0IGhlcmUgb24gY3B1IHdpdGggUEFVU0UtTG9vcC1FeGl0aW5nLlxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgveDg2X29wcy5oIGIvYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmhcbmluZGV4IDQwOTg1ODA3NDI0NjIuLmNkYjM4ZDk0MGNmYjcgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaFxuKysrIGIvYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmhcbkBAIC0yMSw3ICsyMSw2IEBAIGludCB2bXhfdm1faW5pdChzdHJ1Y3Qga3ZtICprdm0pO1xuIHZvaWQgdm14X3ZtX2Rlc3Ryb3koc3RydWN0IGt2bSAqa3ZtKTtcbiBpbnQgdm14X3ZjcHVfcHJlY3JlYXRlKHN0cnVjdCBrdm0gKmt2bSk7XG4gaW50IHZteF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuLWludCB2bXhfdmNwdV9wcmVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gZmFzdHBhdGhfdCB2bXhfdmNwdV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgcnVuX2ZsYWdzKTtcbiB2b2lkIHZteF92Y3B1X2ZyZWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiB2b2lkIHZteF92Y3B1X3Jlc2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBpbml0X2V2ZW50KTtcbkBAIC0zMSw2ICszMCw3IEBAIGludCB2bXhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGV4aXRfZmFzdHBhdGgpO1xuIHZvaWQgdm14X2hhbmRsZV9leGl0X2lycW9mZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIGludCB2bXhfc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIHZvaWQgdm14X3VwZGF0ZV9lbXVsYXRlZF9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuK2Jvb2wgdm14X3VuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBpbnQgdm14X3NldF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgbXNyX2RhdGEgKm1zcl9pbmZvKTtcbiAjaWZkZWYgQ09ORklHX0tWTV9TTU1cbiBpbnQgdm14X3NtaV9hbGxvd2VkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBmb3JfaW5qZWN0aW9uKTtcbkBAIC0xMzcsNyArMTM3LDcgQEAgaW50IHRkeF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIHZvaWQgdGR4X3ZjcHVfcmVzZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGluaXRfZXZlbnQpO1xuIHZvaWQgdGR4X3ZjcHVfZnJlZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIHZvaWQgdGR4X3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpO1xuLWludCB0ZHhfdmNwdV9wcmVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4rYm9vbCB0ZHhfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIGZhc3RwYXRoX3QgdGR4X3ZjcHVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHJ1bl9mbGFncyk7XG4gdm9pZCB0ZHhfcHJlcGFyZV9zd2l0Y2hfdG9fZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiB2b2lkIHRkeF92Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuY1xuaW5kZXggMGYxYTgyOTAzMmMwNi4uZDk0YjU5MTQwYzQ1MiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS94ODYuY1xuKysrIGIvYXJjaC94ODYva3ZtL3g4Ni5jXG5AQCAtODg2Nyw3ICs4ODY3LDE1IEBAIHN0YXRpYyBpbnQga3ZtX3g4Nl92Y3B1X3ByZV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0ICAgICFrdm1fYXBpY19pbml0X3NpcGlfYWxsb3dlZCh2Y3B1KSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRyZXR1cm4ga3ZtX3g4Nl9jYWxsKHZjcHVfcHJlX3J1bikodmNwdSk7XG4rXHRpZiAoa3ZtX3g4Nl9jYWxsKHZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24pKHZjcHUpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdGlmIChrdm1feDg2X2NhbGwodW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZCkodmNwdSkpIHtcbitcdFx0a3ZtX3ByZXBhcmVfZW11bGF0aW9uX2ZhaWx1cmVfZXhpdCh2Y3B1KTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMTtcbiB9XG4gXG4gaW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9pbnZhbGlkX25lc3RlZF9ndWVzdF9zdGF0ZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfaW52YWxpZF9uZXN0ZWRfZ3Vlc3Rfc3RhdGUuY1xuaW5kZXggNTc4MjgzODkzYWIzNy4uNmY1NDZkZWIxOTNhOSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X2ludmFsaWRfbmVzdGVkX2d1ZXN0X3N0YXRlLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X2ludmFsaWRfbmVzdGVkX2d1ZXN0X3N0YXRlLmNcbkBAIC0yLDYgKzIsNyBAQFxuICNpbmNsdWRlIFwidGVzdF91dGlsLmhcIlxuICNpbmNsdWRlIFwia3ZtX3V0aWwuaFwiXG4gI2luY2x1ZGUgXCJwcm9jZXNzb3IuaFwiXG4rI2luY2x1ZGUgXCJzbW0uaFwiXG4gI2luY2x1ZGUgXCJ2bXguaFwiXG4gXG4gI2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbkBAIC05LDkgKzEwLDIzIEBAXG4gXG4gI2luY2x1ZGUgXCJrc2VsZnRlc3QuaFwiXG4gXG4tI2RlZmluZSBBUkJJVFJBUllfSU9fUE9SVCAweDIwMDBcbisjZGVmaW5lIEFSQklUUkFSWV9JT19QT1JUIDB4ODBcbiBcbi1zdGF0aWMgc3RydWN0IGt2bV92bSAqdm07XG4rLypcbisgKiBUaGUgNjQtYml0IFNNUkFNIHN0YXRlLXNhdmUgYXJlYSBzdGFydHMgYXQgU01CQVNFICsgMHhmZTAwLiAgVFIgc3RhcnRzIGF0XG4rICogb2Zmc2V0IDB4ZmU5MCwgYW5kIGF0dHJpYnV0ZXMgaXMgdGhlIHNlY29uZCAxNi1iaXQgZmllbGQgaW4gdGhlIGRlc2NyaXB0b3IuXG4rICovXG4rI2RlZmluZSBTTVJBTTY0X1RSX0FUVFJJQlVURVNfT0ZGU0VUXHQweGZlOTJcbisjZGVmaW5lIFNNUkFNX0dQQVx0XHRcdDB4MTAwMDAwMFxuK1xuKy8qXG4rICogU01JIGhhbmRsZXIgdGhhdCBydW5zIGluIDE2LWJpdCBSZWFsIE1vZGUuICBTeW5jcyB3aXRoIEwwIHZpYSBwb3J0IEkvTywgdGhlblxuKyAqIGV4ZWN1dGVzIFJTTSB0byB0cmlnZ2VyIHRoZSBjb25zdW1wdGlvbiBvZiBpbnZhbGlkIGd1ZXN0IHN0YXRlLlxuKyAqL1xuK3N0YXRpYyB1OCBzbWlfaGFuZGxlcltdID0ge1xuK1x0MHhlNCwgQVJCSVRSQVJZX0lPX1BPUlQsXHQvKiBJTiAkQVJCSVRSQVJZX0lPX1BPUlQsICVhbCAqL1xuK1x0MHgwZiwgMHhhYSxcdFx0XHQvKiBSU00gKi9cbit9O1xuIFxuIHN0YXRpYyB2b2lkIGwyX2d1ZXN0X2NvZGUodm9pZClcbiB7XG5AQCAtMTksOCArMzQsOSBAQCBzdGF0aWMgdm9pZCBsMl9ndWVzdF9jb2RlKHZvaWQpXG4gXHQgKiBHZW5lcmF0ZSBhbiBleGl0IHRvIEwwIHVzZXJzcGFjZSwgaS5lLiBtYWluKCksIHZpYSBJL08gdG8gYW5cbiBcdCAqIGFyYml0cmFyeSBwb3J0LlxuIFx0ICovXG4tXHRhc20gdm9sYXRpbGUoXCJpbmIgJSVkeCwgJSVhbFwiXG4tXHRcdCAgICAgOiA6IFtwb3J0XSBcImRcIiAoQVJCSVRSQVJZX0lPX1BPUlQpIDogXCJyYXhcIik7XG4rXHRhc20gdm9sYXRpbGUoXCJpbmIgJFwiIF9fc3RyaW5naWZ5KEFSQklUUkFSWV9JT19QT1JUKSBcIiwgJSVhbFwiXG4rXHRcdCAgICAgOjo6IFwicmF4XCIpO1xuK1x0R1VFU1RfRkFJTChcIkwyIHJlc3VtZWQgYWZ0ZXIgc3R1ZmZpbmcgaW52YWxpZCBndWVzdCBzdGF0ZVwiKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbDFfZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMpXG5AQCAtNDYsMzUgKzYyLDUwIEBAIHN0YXRpYyB2b2lkIGwxX2d1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKVxuIFx0R1VFU1RfRE9ORSgpO1xuIH1cbiBcbi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuK3N0YXRpYyB2b2lkIHZjcHVfcnVuX3RvX2lvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCB3YW50X2wyKVxuIHtcbi1cdGd2YV90IHZteF9wYWdlc19ndmE7XG4tXHRzdHJ1Y3Qga3ZtX3NyZWdzIHNyZWdzO1xuLVx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuLVx0c3RydWN0IGt2bV9ydW4gKnJ1bjtcbi1cdHN0cnVjdCB1Y2FsbCB1YztcbitcdHN0cnVjdCBrdm1fcnVuICpydW4gPSB2Y3B1LVx1MDAzZXJ1bjtcbiBcbi1cdFRFU1RfUkVRVUlSRShrdm1fY3B1X2hhcyhYODZfRkVBVFVSRV9WTVgpKTtcbitcdHZjcHVfcnVuKHZjcHUpO1xuIFxuLVx0dm0gPSB2bV9jcmVhdGVfd2l0aF9vbmVfdmNwdShcdTAwMjZ2Y3B1LCBsMV9ndWVzdF9jb2RlKTtcbitcdFRFU1RfQVNTRVJUX0tWTV9FWElUX1JFQVNPTih2Y3B1LCBLVk1fRVhJVF9JTyk7XG4gXG4tXHQvKiBBbGxvY2F0ZSBWTVggcGFnZXMgYW5kIHNoYXJlZCBkZXNjcmlwdG9ycyAodm14X3BhZ2VzKS4gKi9cbi1cdHZjcHVfYWxsb2Nfdm14KHZtLCBcdTAwMjZ2bXhfcGFnZXNfZ3ZhKTtcbi1cdHZjcHVfYXJnc19zZXQodmNwdSwgMSwgdm14X3BhZ2VzX2d2YSk7XG4rXHRURVNUX0FTU0VSVChydW4tXHUwMDNlaW8ucG9ydCA9PSBBUkJJVFJBUllfSU9fUE9SVCBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICghIShydW4tXHUwMDNlZmxhZ3MgXHUwMDI2IEtWTV9SVU5fWDg2X0dVRVNUX01PREUpID09IHdhbnRfbDIgIHx8XG4rXHRcdCAgICAgIWt2bV9oYXNfY2FwKEtWTV9DQVBfWDg2X0dVRVNUX01PREUpKSxcbitcdFx0ICAgIFwiRXhwZWN0ZWQgSU4gZnJvbSBwb3J0ICVkIGZyb20gTDIsIGdvdCBwb3J0ICVkIGZyb20gTCV1XCIsXG4rXHRcdCAgICBBUkJJVFJBUllfSU9fUE9SVCwgcnVuLVx1MDAzZWlvLnBvcnQsXG4rXHRcdCAgICAxICsgISEocnVuLVx1MDAzZWZsYWdzIFx1MDAyNiBLVk1fUlVOX1g4Nl9HVUVTVF9NT0RFKSk7XG4rfVxuIFxuLVx0dmNwdV9ydW4odmNwdSk7XG4rc3RhdGljIHN0cnVjdCBrdm1fdm0gKnZtX2NyZWF0ZV9hbmRfcnVuX2wyKHN0cnVjdCBrdm1fdmNwdSAqKnZjcHUpXG4re1xuK1x0Z3ZhX3Qgdm14X3BhZ2VzX2d2YTtcbitcdHN0cnVjdCBrdm1fdm0gKnZtO1xuK1xuK1x0dm0gPSB2bV9jcmVhdGVfd2l0aF9vbmVfdmNwdSh2Y3B1LCBsMV9ndWVzdF9jb2RlKTtcbiBcbi1cdHJ1biA9IHZjcHUtXHUwMDNlcnVuO1xuK1x0LyogQWxsb2NhdGUgVk1YIHBhZ2VzIGFuZCBzaGFyZWQgZGVzY3JpcHRvcnMgKHZteF9wYWdlcykuICovXG4rXHR2Y3B1X2FsbG9jX3ZteCh2bSwgXHUwMDI2dm14X3BhZ2VzX2d2YSk7XG4rXHR2Y3B1X2FyZ3Nfc2V0KCp2Y3B1LCAxLCB2bXhfcGFnZXNfZ3ZhKTtcbiBcbiBcdC8qXG4gXHQgKiBUaGUgZmlyc3QgZXhpdCB0byBMMCB1c2Vyc3BhY2Ugc2hvdWxkIGJlIGFuIEkvTyBhY2Nlc3MgZnJvbSBMMi5cbiBcdCAqIFJ1bm5pbmcgTDEgc2hvdWxkIGxhdW5jaCBMMiB3aXRob3V0IHRyaWdnZXJpbmcgYW4gZXhpdCB0byB1c2Vyc3BhY2UuXG4gXHQgKi9cbi1cdFRFU1RfQVNTRVJUX0tWTV9FWElUX1JFQVNPTih2Y3B1LCBLVk1fRVhJVF9JTyk7XG4rXHR2Y3B1X3J1bl90b19pbygqdmNwdSwgdHJ1ZSk7XG4gXG4tXHRURVNUX0FTU0VSVChydW4tXHUwMDNlaW8ucG9ydCA9PSBBUkJJVFJBUllfSU9fUE9SVCxcbi1cdFx0ICAgIFwiRXhwZWN0ZWQgSU4gZnJvbSBwb3J0ICVkIGZyb20gTDIsIGdvdCBwb3J0ICVkXCIsXG4tXHRcdCAgICBBUkJJVFJBUllfSU9fUE9SVCwgcnVuLVx1MDAzZWlvLnBvcnQpO1xuK1x0cmV0dXJuIHZtO1xuK31cbitcbitzdGF0aWMgdm9pZCB0ZXN0X2ludmFsaWRfbDJfZ3Vlc3Rfc3RhdGUodm9pZClcbit7XG4rXHRzdHJ1Y3Qga3ZtX3NyZWdzIHNyZWdzO1xuK1x0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuK1x0c3RydWN0IGt2bV92bSAqdm07XG4rXHRzdHJ1Y3QgdWNhbGwgdWM7XG4rXG4rXHR2bSA9IHZtX2NyZWF0ZV9hbmRfcnVuX2wyKFx1MDAyNnZjcHUpO1xuIFxuIFx0LypcbiBcdCAqIFN0dWZmIGludmFsaWQgZ3Vlc3Qgc3RhdGUgZm9yIEwyIGJ5IG1ha2luZyBUUiB1bnVzYWJsZS4gIFRoZSBuZXh0XG5AQCAtOTYsNCArMTI3LDQ5IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4gXHRkZWZhdWx0OlxuIFx0XHRURVNUX0ZBSUwoXCJVbmV4cGVjdGVkIHVjYWxsOiAlbHVcIiwgdWMuY21kKTtcbiBcdH1cbitcbitcdGt2bV92bV9mcmVlKHZtKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgdGVzdF9pbnZhbGlkX2wyX2d1ZXN0X3N0YXRlX3JzbSh2b2lkKVxuK3tcbitcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbitcdHN0cnVjdCBrdm1fdm0gKnZtO1xuK1x0dTE2ICp0cl9hdHRycztcbitcbitcdGlmICgha3ZtX2hhc19jYXAoS1ZNX0NBUF9YODZfU01NKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0dm0gPSB2bV9jcmVhdGVfYW5kX3J1bl9sMihcdTAwMjZ2Y3B1KTtcbitcbitcdC8qXG4rXHQgKiBJbmplY3QgU01JIHdoaWxlIEwyIGlzIGFjdGl2ZSwgcnVuIHRoZSB2Q1BVIHRvIGdldCBJL08gZXhpdCBmcm9tIEwxLFxuK1x0ICogdGhlbiBzdHVmZiBUUiBpbiB0aGUgU01SQU0gc3RhdGUtc2F2ZSBhcmVhIHNvIHRoYXQgUlNNIHJlc3RvcmVzXG4rXHQgKiBpbnZhbGlkIEwyIHN0YXRlLlxuK1x0ICovXG4rXHRzZXR1cF9zbXJhbSh2bSwgdmNwdSwgU01SQU1fR1BBLCBzbWlfaGFuZGxlciwgc2l6ZW9mKHNtaV9oYW5kbGVyKSk7XG4rXHRpbmplY3Rfc21pKHZjcHUpO1xuK1xuK1x0dmNwdV9ydW5fdG9faW8odmNwdSwgZmFsc2UpO1xuK1xuK1x0LyogQ2xlYXIgdGhlIHByZXNlbnQgYml0IGluIFNNUkFNIHRvIG1ha2UgVFIgdW51c2FibGUuICovXG4rXHR0cl9hdHRycyA9IGFkZHJfZ3BhMmh2YSh2bSwgU01SQU1fR1BBICsgU01SQU02NF9UUl9BVFRSSUJVVEVTX09GRlNFVCk7XG4rXHQqdHJfYXR0cnMgXHUwMDI2PSB+QklUKDcpO1xuK1xuK1x0dmNwdV9ydW4odmNwdSk7XG4rXG4rXHQvKlxuK1x0ICogRm9yIFJTTSwgTDEgZ2V0cyB0aGUgU0hVVERPV04gYmVjYXVzZSBSU00gaXMgYXJjaGl0ZWN0dXJhbGx5IGRlZmluZWRcbitcdCAqIHRvIHJlc3VsdCBpbiBzaHV0ZG93biBpZiB0aGUgQ1BVIGRldGVjdHMgaW52YWxpZCBzdGF0ZSBpbiBTTVJBTS5cbitcdCAqL1xuK1x0VEVTVF9BU1NFUlRfS1ZNX0VYSVRfUkVBU09OKHZjcHUsIEtWTV9FWElUX1NIVVRET1dOKTtcbitcdGt2bV92bV9mcmVlKHZtKTtcbit9XG4rXG4raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbit7XG4rXHRURVNUX1JFUVVJUkUoa3ZtX2NwdV9oYXMoWDg2X0ZFQVRVUkVfVk1YKSk7XG4rXG4rXHR0ZXN0X2ludmFsaWRfbDJfZ3Vlc3Rfc3RhdGUoKTtcbitcdHRlc3RfaW52YWxpZF9sMl9ndWVzdF9zdGF0ZV9yc20oKTtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMDowODoxMy4xOTg3OTQyMDRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MDg1MjE5ODk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtWTSB4ODYgUGF0Y2ggZm9yIEVtdWxhdGlvbiBSZXF1aXJlbWVudHMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgZnVuZGFtZW50YWxseSBhbHRlcnMgS1ZNJ3MgeDg2IGVtdWxhdGlvbiBiZWhhdmlvciwgc3BlY2lmaWNhbGx5IGluIGhvdyBpdCBoYW5kbGVzIHNpdHVhdGlvbnMgd2hlcmUgdGhlIGd1ZXN0IGVudGVycyBhbiBpbnZhbGlkIHN0YXRlLCBwYXJ0aWN1bGFybHkgdXBvbiByZXR1cm5pbmcgZnJvbSBTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIChTTU0pIOKAkyB0aGF0J3MgUlNNLCB0byBiZSBjbGVhci4gVGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byByZXZvbHZlIGFyb3VuZCB0aGUgYHVuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWRgIGFuZCBgdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbmAgZnVuY3Rpb25zLiBFc3NlbnRpYWxseSwgdGhleSd2ZSByZW5hbWVkIGB2Y3B1X3ByZV9ydW5gIHRvIGB2Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uYCBhbmQgbm93IGhhdmUgYHVuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWRgIHdoaWNoIGlzIGNhbGxlZCBpbiBgZW11bGF0b3JfbGVhdmVfc21tYC5cblxuVGhlIGRpZmYgc2hvd3MgdGhhdCBgZW11bGF0b3JfbGVhdmVfc21tYCBub3cgY2FsbHMgYHVuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWRgIGFmdGVyIHRoZSBzdGFuZGFyZCBlbXVsYXRpb24uIElmIHRoaXMgY2hlY2sgZmFpbHMsIHRoZW4gd2UgZ2V0IGBYODZFTVVMX1VOSEFORExFQUJMRWAuIFRoYXQncyBhIGNyaXRpY2FsIHBvaW50LiBGdXJ0aGVybW9yZSwgYGt2bV94ODZfdmNwdV9wcmVfcnVuYCBoYXMgYmVlbiBzaWduaWZpY2FudGx5IG1vZGlmaWVkIHRvIGNoZWNrIGB2Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uYCBhbmQgdGhlbiwgaWYgdGhlIGluaXRpYWxpemF0aW9uIGlzbid0IG5lZWRlZCwgY2hlY2tzIGlmIGB1bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkYCBpcyBzZXQuIElmICp0aGF0KiB0cmlnZ2VycywgaXQgc2V0cyB1cCBhIGBrdm1fcHJlcGFyZV9lbXVsYXRpb25fZmFpbHVyZV9leGl0YCBhbmQgcmV0dXJucy4gVGhlIG5ldyBzZWxmdGVzdCAoYHZteF9pbnZhbGlkX25lc3RlZF9ndWVzdF9zdGF0ZS5jYCkgaXMgYSBjbGVhciBpbmRpY2F0aW9uIHRoYXQgdGhpcyBSU00gc2NlbmFyaW8gd2l0aCBhbiBpbnZhbGlkIEwyIHN0YXRlIGlzIHByZWNpc2VseSB3aGF0J3MgYmVpbmcgYWRkcmVzc2VkLlxuXG5HaXZlbiB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgZGVlcCB3aXRoaW4gS1ZNIHg4NiBjb3JlLCBpdCdzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRvIHBheSBhdHRlbnRpb24gdG8uIFNpbmNlIEtWTSBpcyBoZWF2aWx5IGZ1enplZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGFuZCBzeXprYWxsZXIgc3VwcG9ydHMgS1ZNIGZ1enppbmcsIGl0J3MgYWJzb2x1dGVseSB3b3J0aCB0aGUgZWZmb3J0IHRvIGNoZWNrIHRoaXMgb3V0LlxuXG5JIHNob3VsZCBmb2N1cyBteSBhdHRlbnRpb24gb24gdGhlc2UgZnVuY3Rpb25zIHNwZWNpZmljYWxseTogYGVtdWxhdG9yX2xlYXZlX3NtbWAsIGBrdm1feDg2X3ZjcHVfcHJlX3J1bmAgKGFuZCwgc3RhdGljYWxseSwgdGhlIGNhbGwgc2l0ZSBpbiBga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5gKSwgYHZteF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkYCwgYHNldl92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uYCwgYW5kIGB0ZHhfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbmAuIE15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBjb2RlIGZvciBgZW11bGF0b3JfbGVhdmVfc21tYCBhbmQgYGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuYCB0byBzZWUgaG93IHRoZXNlIG5ld2x5IGludHJvZHVjZWQgY2hlY2tzIGZpdCBpbnRvIHRoZSBleGlzdGluZyBmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODkzLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjkzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMjA6MDg6MjIuMjg0MDE3MzQ4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNzkyMjg5ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZW11bGF0b3JfbGVhdmVfc21tXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9zbW0uYz01MTY9c3RhdGljIGludCByc21fbG9hZF9zdGF0ZV82NChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCxcXG4tLVxcbmFyY2gveDg2L2t2bS9zbW0uYy01NzItXFxuYXJjaC94ODYva3ZtL3NtbS5jOjU3MzppbnQgZW11bGF0b3JfbGVhdmVfc21tKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KVxcbmFyY2gveDg2L2t2bS9zbW0uYy01NzQte1xcbi0tXFxuYXJjaC94ODYva3ZtL3NtbS5oPTE1OD12b2lkIGVudGVyX3NtbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbmFyY2gveDg2L2t2bS9zbW0uaDoxNTk6aW50IGVtdWxhdG9yX2xlYXZlX3NtbShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCk7XFxuYXJjaC94ODYva3ZtL3NtbS5oLTE2MC12b2lkIHByb2Nlc3Nfc21pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc21tLmg9MTYzPXN0YXRpYyBpbmxpbmUgYm9vbCBpc19zbW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KSB7IHJldHVybiBmYWxzZTsgfVxcbi0tXFxuYXJjaC94ODYva3ZtL3NtbS5oLTE2NS0vKlxcbmFyY2gveDg2L2t2bS9zbW0uaDoxNjY6ICogZW11bGF0b3JfbGVhdmVfc21tIGlzIHVzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyLCBzbyB0aGVcXG5hcmNoL3g4Ni9rdm0vc21tLmgtMTY3LSAqIHN0dWIgaXMgZGVmaW5lZCBpbiB4ODYuYy5cXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz01NzU0PXN0YXRpYyBib29sIGVtdWxhdG9yX2lzX3NtbShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dClcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy01NzU5LSNpZm5kZWYgQ09ORklHX0tWTV9TTU1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6NTc2MDpzdGF0aWMgaW50IGVtdWxhdG9yX2xlYXZlX3NtbShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dClcXG5hcmNoL3g4Ni9rdm0veDg2LmMtNTc2MS17XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9NTgxND1zdGF0aWMgY29uc3Qgc3RydWN0IHg4Nl9lbXVsYXRlX29wcyBlbXVsYXRlX29wcyA9IHtcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy01ODU2LVxcdC5pc19zbW0gICAgICAgICAgICAgID0gZW11bGF0b3JfaXNfc21tLFxcbmFyY2gveDg2L2t2bS94ODYuYzo1ODU3OlxcdC5sZWF2ZV9zbW0gICAgICAgICAgID0gZW11bGF0b3JfbGVhdmVfc21tLFxcbmFyY2gveDg2L2t2bS94ODYuYy01ODU4LVxcdC50cmlwbGVfZmF1bHQgICAgICAgID0gZW11bGF0b3JfdHJpcGxlX2ZhdWx0LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMDowODoyNC40NjMyNTQ0MzhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjcyNDgxNzg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24sIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipFeGFtaW5pbmcgUG90ZW50aWFsIEZvY3VzIFN5bWJvbHMqKlxuXG5SaWdodCwgdGhpbmtpbmcgYWJvdXQgcmVmaW5pbmcgbXkgYW5hbHlzaXMsIEkgbmVlZCBhIGNsZWFyIGZvY3VzIHBvaW50LiBgZW11bGF0b3JfbGVhdmVfc21tYCBpcyBhIHN0cm9uZyBjb250ZW5kZXI7IGl0J3MgYSB3ZWxsLWRlZmluZWQgcG9pbnQgb2YgcG90ZW50aWFsIHRyYW5zaXRpb24gb3IgdnVsbmVyYWJpbGl0eSB3aXRoaW4gdGhlIGVtdWxhdGlvbiBwcm9jZXNzLCB0aGF0IGdpdmVzIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludC4gQnV0LCBJJ20gYWxyZWFkeSB0aGlua2luZyBhYm91dCBvdGhlciBmdW5jdGlvbnMgaW4gbXkgY3VycmVudCBhc3Nlc3NtZW50LlxuXG5JIHdvbmRlciBhYm91dCB0aGUgdmFsdWUgb2Ygc2hpZnRpbmcgbXkgZm9jdXMgdG8gYGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuYC4gVGhhdCBmdW5jdGlvbiBpcyBjZXJ0YWlubHkgY3JpdGljYWwgdG8gdGhlIGV4ZWN1dGlvbiBvZiBndWVzdCBjb2RlIHdpdGhpbiB0aGUgS1ZNIGVudmlyb25tZW50LiBJdCdzIGEga2V5IGVudHJ5IHBvaW50IGZvciBoYW5kbGluZyBpbnN0cnVjdGlvbnMgYW5kIGludGVyYWN0aW9ucyBmcm9tIHRoZSB2aXJ0dWFsIENQVS4gRGVwZW5kaW5nIG9uIHRoZSBsZXZlbCBvZiBhbmFseXNpcyBuZWVkZWQsIHRoYXQgZnVuY3Rpb24gY291bGQgb2ZmZXIgaW5zaWdodCBpbnRvIGEgYnJvYWRlciByYW5nZSBvZiBwb3RlbnRpYWxseSBpbnRlcmVzdGluZyBhdHRhY2sgc3VyZmFjZXMgYW5kIGJlaGF2aW9ycy4gSXQncyB0aW1lIHRvIGV2YWx1YXRlIGhvdyBJIHdhbnQgdG8gc3RydWN0dXJlIG15IGFzc2Vzc21lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzk5LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMjA6MDg6MjkuMTM1NzM4ODczWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MzkyMjg5MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9rdm0vYXJtLmM9MTA2Nj1zdGF0aWMgaW50IGt2bV92Y3B1X3N1c3BlbmQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vYXJtLmMtMTA5Mi1cXHQgKiBPdGhlcndpc2UsIHdlIHdlcmUgdW5ibG9ja2VkIHRvIHByb2Nlc3MgYSBkaWZmZXJlbnQgZXZlbnQsIHN1Y2ggYXMgYVxcbmFyY2gvYXJtNjQva3ZtL2FybS5jOjEwOTM6XFx0ICogcGVuZGluZyBzaWduYWwuIFJldHVybiAxIGFuZCBhbGxvdyBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bigpIHRvXFxuYXJjaC9hcm02NC9rdm0vYXJtLmMtMTA5NC1cXHQgKiBwcm9jZXNzIHRoZSBldmVudC5cXG4tLVxcbmFyY2gvYXJtNjQva3ZtL2FybS5jPTEyMzA9c3RhdGljIGludCBub2luc3RyIGt2bV9hcm1fdmNwdV9lbnRlcl9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL2FybS5jLTEyNDEtLyoqXFxuYXJjaC9hcm02NC9rdm0vYXJtLmM6MTI0MjogKiBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1biAtIHRoZSBtYWluIFZDUFUgcnVuIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZ3Vlc3QgY29kZVxcbmFyY2gvYXJtNjQva3ZtL2FybS5jLTEyNDMtICogQHZjcHU6XFx0VGhlIFZDUFUgcG9pbnRlclxcbi0tXFxuYXJjaC9hcm02NC9rdm0vYXJtLmMtMTI1MC0gKi9cXG5hcmNoL2FybTY0L2t2bS9hcm0uYzoxMjUxOmludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC9hcm02NC9rdm0vYXJtLmMtMTI1Mi17XFxuLS1cXG5hcmNoL2FybTY0L2t2bS9oeXAvbnZoZS9zd2l0Y2guYz0yMjY9c3RhdGljIGlubGluZSBib29sIGZpeHVwX2d1ZXN0X2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgKmV4aXRfY29kZSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL2h5cC9udmhlL3N3aXRjaC5jLTIzOC1cXHQgKiBpdC4gIFRoZSBjaGVjayBiZWxvdyBpcyBiYXNlZCBvbiB0aGUgb25lIGluXFxuYXJjaC9hcm02NC9rdm0vaHlwL252aGUvc3dpdGNoLmM6MjM5OlxcdCAqIGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKCkuXFxuYXJjaC9hcm02NC9rdm0vaHlwL252aGUvc3dpdGNoLmMtMjQwLVxcdCAqL1xcbi0tXFxuYXJjaC9sb29uZ2FyY2gva3ZtL3ZjcHUuYz0xODI1PXZvaWQga3ZtX2FyY2hfdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva3ZtL3ZjcHUuYy0xODQ4LVxcbmFyY2gvbG9vbmdhcmNoL2t2bS92Y3B1LmM6MTg0OTppbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gvbG9vbmdhcmNoL2t2bS92Y3B1LmMtMTg1MC17XFxuLS1cXG5hcmNoL21pcHMva3ZtL21pcHMuYz00MTE9c3RhdGljIGludCBub2luc3RyIGt2bV9taXBzX3ZjcHVfZW50ZXJfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL21pcHMva3ZtL21pcHMuYy00MjEtXFxuYXJjaC9taXBzL2t2bS9taXBzLmM6NDIyOmludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC9taXBzL2t2bS9taXBzLmMtNDIzLXtcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jPTE3MzI9aW50IGt2bV92Y3B1X2lvY3RsX3NldF9vbmVfcmVnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9vbmVfcmVnICpyZWcpXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYy0xNzgwLVxcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jOjE3ODE6aW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYy0xNzgyLXtcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYz03NTA9c3RhdGljIHZvaWQgbm9pbnN0ciBrdm1fcmlzY3ZfdmNwdV9lbnRlcl9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYy03NTktXFx0ICogSFRJTlNUKSBoZXJlIGJlY2F1c2Ugd2UgZG8gbG9jYWxfaXJxX2VuYWJsZSgpIGFmdGVyIHRoaXNcXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmM6NzYwOlxcdCAqIGZ1bmN0aW9uIGluIGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKCkgd2hpY2ggY2FuIHJlc3VsdCBpblxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYy03NjEtXFx0ICogYW4gaW50ZXJydXB0IGltbWVkaWF0ZWx5IGFmdGVyIGxvY2FsX2lycV9lbmFibGUoKSBhbmQgY2FuXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmMtODI5LVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYzo4MzA6aW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmMtODMxLXtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz00OTk3PXN0YXRpYyB2b2lkIHN0b3JlX3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTUwMTctXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjUwMTg6aW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTAxOS17XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9ODg0ND1zdGF0aWMgaW50IGt2bV94ODZfdmNwdV9wcmVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy04ODgwLVxcbmFyY2gveDg2L2t2bS94ODYuYzo4ODgxOmludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTg4ODIte1xcbi0tXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oPTE2MjM9aW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X2d1ZXN0X2RlYnVnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMTYyNC1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qga3ZtX2d1ZXN0X2RlYnVnICpkYmcpO1xcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaDoxNjI1OmludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0xNjI2LVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYz00NDE0PXN0YXRpYyBsb25nIGt2bV92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy00NDc3LVxcdFxcdHZjcHUtXFx1MDAzZXdhbnRzX3RvX3J1biA9ICFSRUFEX09OQ0UodmNwdS1cXHUwMDNlcnVuLVxcdTAwM2VpbW1lZGlhdGVfZXhpdF9fdW5zYWZlKTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjQ0Nzg6XFx0XFx0ciA9IGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKHZjcHUpO1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtNDQ3OS1cXHRcXHR2Y3B1LVxcdTAwM2V3YW50c190b19ydW4gPSBmYWxzZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMjA6MDg6MzAuODc0OTc0MDIxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc1MDYxNjY5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqUmVmbGVjdGluZyBvbiBLVk0gRW50cnkgUG9pbnRzKipcblxuSG1tLCBga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5g4oCmIGl0IGp1c3QgZmVlbHMgYSBsaXR0bGUgKnRvbyogYnJvYWQsIGRvZXNuJ3QgaXQ/IEl0J3MgdGhlIGNvcmUgZW50cnkgcG9pbnQgZm9yIEtWTSB2Q1BVIGV4ZWN1dGlvbiwgc3VyZSwgYnV0IHRoZSBuYW1lIGl0c2VsZiBkb2Vzbid0IHNjcmVhbSBhbnl0aGluZyBzcGVjaWZpYyBhYm91dCAqd2hhdCogaXQncyBkb2luZy4gSSBtZWFuLCBpdOKAmXMgbm90ICp3cm9uZyosIGJ1dCBpdCBsYWNrcyBhIGNlcnRhaW7igKYgZ3JhbnVsYXJpdHkuIEknbSB0aGlua2luZyBhYm91dCBob3cgdG8gaW1wcm92ZSB0aGUgY29kZS4gSXTigJlzIGxpa2UgY2FsbGluZyBhbiBlbnRpcmUgb3BlcmF0aW5nIHN5c3RlbSBmdW5jdGlvbiBcInByb2Nlc3NfZXhlY3V0aW9uXCIuIFxuXG5Ob3csIGxldCdzIGNvbnNpZGVyIGFub3RoZXIgbmFtZSwgcGVyaGFwcyBzb21ldGhpbmcgbW9yZSBkZXNjcmlwdGl2ZS4gSeKAmXZlIGJlZW4gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgZnVuY3Rpb24sIGFuZCBJJ20gcmVtaW5kZWQgb2YgYHZteF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkYC4gSXQncyBhIGJpdCBvZiBhIG1vdXRoZnVsLCBhZG1pdHRlZGx5LCBidXQgaXQgcG9pbnRzIHRvIGEgdmVyeSBzcGVjaWZpYyBhbmQgY3JpdGljYWwgYXNwZWN0IG9mIHRoZSBLVk0gd29ya2Zsb3c6IHdoZW4gdGhlIGhhcmR3YXJlIGNhbid0IGRpcmVjdGx5IGhhbmRsZSBzb21ldGhpbmcuIEl0J3MgdGhhdCBjYXNlIHdoZW4gdGhlIHNvZnR3YXJlIG5lZWRzIHRvIGVtdWxhdGUgc29tZXRoaW5nIHRoYXQgdGhlIENQVSBjYW4ndCBtYW5hZ2Ugb24gaXRzIG93bi4gXG5cbk1heWJlIHRoZSBuYW1lIGNvdWxkIGJlIGEgY29tcHJvbWlzZT9cblxuXG4iLCJJbnB1dFRva2VucyI6MTI3NzgsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMDowODozNC42MjU1OTMyMDNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA2MDI0Njc4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2bXhfdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vdm14L21haW4uYz0xNjY9c3RhdGljIGJvb2wgdnRfdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xNzItXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MTczOlxcdHJldHVybiB2bXhfdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZCh2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xNzQtfVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYz02MDIxPXN0YXRpYyBpbnQgaGFuZGxlX25taV93aW5kb3coc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy02MDM3LSAqL1xcbmFyY2gveDg2L2t2bS92bXgvdm14LmM6NjAzODpib29sIHZteF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTYwMzkte1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYz02MDY1PXN0YXRpYyBpbnQgaGFuZGxlX2ludmFsaWRfZ3Vlc3Rfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy02MDkwLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmM6NjA5MTpcXHRcXHRpZiAodm14X3VuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQodmNwdSkpIHtcXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTYwOTItXFx0XFx0XFx0a3ZtX3ByZXBhcmVfZW11bGF0aW9uX2ZhaWx1cmVfZXhpdCh2Y3B1KTtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgveDg2X29wcy5oPTMyPXZvaWQgdm14X3VwZGF0ZV9lbXVsYXRlZF9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbmFyY2gveDg2L2t2bS92bXgveDg2X29wcy5oOjMzOmJvb2wgdm14X3VuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaC0zNC1pbnQgdm14X3NldF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgbXNyX2RhdGEgKm1zcl9pbmZvKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMjA6MDg6MzYuNjg1ODQ0NzI2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkxNjc0MTA2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gaW50ZXJuYWwgcHJvY2VzczpcblxuKipJbnRlcm5hbCBBdWRpdCBvZiBGb2N1cyBTeW1ib2xzIGFuZCBQb3RlbnRpYWwgRXhwYW5zaW9uKipcblxuUmlnaHQsIHNvIGB2bXhfdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZGAg4oCTIHRoYXQncyBhIHNvbGlkIGlkZW50aWZpZXIsIGEgZ29vZCBqdW1waW5nLW9mZiBwb2ludCBmb3IgdGhpcyBjdXJyZW50IGxpbmUgb2YgaW52ZXN0aWdhdGlvbi4gSXQgY2xlYXJseSBmbGFncyBhIHNwZWNpZmljIHNjZW5hcmlvLiBOb3csIHRoZSBuZXh0IHF1ZXN0aW9uIGlzIGFsd2F5cywgYXJlIHdlIG1pc3NpbmcgYW55dGhpbmc/IElzIHRoZXJlIGEgYnJvYWRlciBzZXQgb2YgY2lyY3Vtc3RhbmNlcyB0byBjb25zaWRlciB0aGF0IHRoaXMgc2luZ3VsYXIgdGVybSBkb2Vzbid0IHF1aXRlIGVuY29tcGFzcz9cblxuTXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBhIGNvdXBsZSBvZiByZWxhdGVkIGFyZWFzLCBwYXJ0aWN1bGFybHkgdGhlIHNlY3VyZSBleGVjdXRpb24gZW52aXJvbm1lbnRzIHdlJ3JlIHNlZWluZyBtb3JlIGFuZCBtb3JlIG9mLiBTcGVjaWZpY2FsbHksIEkgd29uZGVyIGlmIHdlIHNob3VsZCBleHBhbmQgdGhlIGZvY3VzIGFuZCBjb25zaWRlciBpZiBgdGR4X3ZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb25gIGFuZCBgc2V2X3ZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb25gIG1pZ2h0IGFsc28gYmUgdmFsdWFibGUgZm9jdXMgc3ltYm9scy4gVGhleSdyZSByZWxhdGVkLiBJZiB0aGF0IHN5bWJvbCBkb2VzIG5vdCBleGlzdCwgdGhlbiBpdCBzaG91bGQuIFdlIG5lZWQgc3ltYm9scyBmb3IgdGhvc2UuIEkgc2hvdWxkIHByb2JhYmx5IGFkZCB0aG9zZSB0byBhIGxpc3Qgc29tZXdoZXJlLiBQZXJoYXBzIHRoaXMgY291bGQgZW5jb21wYXNzIGEgd2hvbGUgY2xhc3Mgb2Ygc2ltaWxhciBzaXR1YXRpb25zLCBhbmQgdGhvc2Ugc3ltYm9scyB3aWxsIGhlbHAgcmVmaW5lIHRoZSBmb2N1cyBvZiBhbmFseXNpcy4gQSBtb3JlIGNvbXByZWhlbnNpdmUgYXBwcm9hY2ggdG8gY2F0Y2hpbmcgZWRnZSBjYXNlcywgc28gdG8gc3BlYWsuIEl0J3MgYWJvdXQgZW5zdXJpbmcgd2UncmUgbm90IGp1c3QgcmVhY3RpbmcgdG8gYHZteF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkYCBpbiBpc29sYXRpb24gYnV0IHNlZWluZyB0aGUgYmlnZ2VyIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNjg0LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMjA6MDg6NDAuNjAyNTkwMzg0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQ4MTI0MDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRkeF92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTE0Mz1zdGF0aWMgYm9vbCB2dF92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTE0NS1cXHRyZXR1cm4gaXNfdGRfdmNwdSh2Y3B1KSBcXHUwMDI2XFx1MDAyNlxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjE0NjpcXHQgICAgICAgdGR4X3ZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24odmNwdSk7XFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMTQ3LX1cXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM9ODYzPXZvaWQgdGR4X3ZjcHVfZnJlZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTg5OS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjkwMDpib29sIHRkeF92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTkwMS17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaD0xMzk9dm9pZCB0ZHhfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSk7XFxuYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmg6MTQwOmJvb2wgdGR4X3ZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaC0xNDEtZmFzdHBhdGhfdCB0ZHhfdmNwdV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgcnVuX2ZsYWdzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMjA6MDg6NDIuMjUwNzIzODI0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NjkyMDQ1NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIGEgVERYIHZDUFUncyBTdGF0dXMqKlxuXG5SaWdodCwgYHRkeF92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uYC4gVGhhdCdzIGEgZ29vZCBzaWduLiBJdCBpbW1lZGlhdGVseSBzdWdnZXN0cyB3ZSdyZSBkZWFsaW5nIHdpdGggYSB2Q1BVIHRoYXQncyBhdCB0aGUgY29ycmVjdCBzdGFnZTogcmVhZHksIGJ1dCBub3QgeWV0IGZ1bGx5IGNvbmZpZ3VyZWQgd2l0aGluIHRoZSBURFggZW52aXJvbm1lbnQuIFRoaXMgZmxhZywgaWYgc2V0IGFzIGV4cGVjdGVkLCBjb25maXJtcyB0aGF0IHRoZSBpbmZyYXN0cnVjdHVyZSBoYXMgcHJvcGVybHkgaWRlbnRpZmllZCB0aGlzIHZpcnR1YWwgQ1BVIGFzIHJlcXVpcmluZyB0aGUgcHJvcGVyIFREWCBzZXR1cCBwcm9jZWR1cmVzLiBUaGlzIG1lYW5zIHRoZSBvdmVyYWxsIFREWCBhcmNoaXRlY3R1cmUgaXMgZnVuY3Rpb25pbmcsIGF0IGxlYXN0IGF0IHRoaXMgcHJlbGltaW5hcnkgc3RhZ2UuIFdlIGNhbiBwcm9iYWJseSBtYWtlIGEgZ29vZCBjb25jbHVzaW9uIGZyb20gdGhlcmUgYW5kIGtlZXAgbW92aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDQ2NCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIwOjA4OjQ1LjgxOTkzMDk0OVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYyOTIwNzAyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZXZfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTM1Mjk9dm9pZCBzZXZfZnJlZV92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzU1OC1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjM1NTk6Ym9vbCBzZXZfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zNTYwLXtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9NTMyMj1zdHJ1Y3Qga3ZtX3g4Nl9vcHMgc3ZtX3g4Nl9vcHMgX19pbml0ZGF0YSA9IHtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNTQzNy0jaWZkZWYgQ09ORklHX0tWTV9BTURfU0VWXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo1NDM4OlxcdC52Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uID0gc2V2X3ZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24sXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01NDM5LVxcdC5kZXZfZ2V0X2F0dHIgPSBzZXZfZGV2X2dldF9hdHRyLFxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaD05Nzk9dm9pZCBzZXZfZXNfdW5tYXBfZ2hjYihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTk4MS0jaWZkZWYgQ09ORklHX0tWTV9BTURfU0VWXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDo5ODI6Ym9vbCBzZXZfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtOTgzLWludCBzZXZfbWVtX2VuY19pb2N0bChzdHJ1Y3Qga3ZtICprdm0sIHZvaWQgX191c2VyICphcmdwKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMjA6MDg6NDcuNDQ5MTQ2MDI5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4MjkyMTM0MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLVk0gUGF0Y2ggZm9yIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gYHNldl92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uYCBsb29rcyBwcm9taXNpbmcsIHRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXMsIHdoYXQgQ09ORklHIG9wdGlvbnMgYXJlIGdvaW5nIHRvIGJlIGNyaXRpY2FsIGZvciB0aGlzIHBhdGNoIHRvIGZ1bmN0aW9uIGNvcnJlY3RseT9cblxuSSBzZWUgdGhlIHBhdGNoIHRvdWNoZXMgYSBidW5jaCBvZiBLVk0tcmVsYXRlZCBmaWxlczogYHNtbS5jYCwgYHN2bS9zZXYuY2AsIGBzdm0vc3ZtLmNgLCBgdm14L21haW4uY2AsIGB2bXgvdGR4LmNgLCBgdm14L3ZteC5jYCwgYW5kIGB4ODYuY2AuIFRoYXQncyBhIGNsZWFyIGluZGljYXRpb24gdGhhdCBLVk0gaXRzZWxmIGlzIGdvaW5nIHRvIGJlIGEgaGFyZCByZXF1aXJlbWVudCDigJMgYENPTkZJR19LVk1gIGlzIHByZXR0eSBzdGFuZGFyZCBhY3Jvc3MgS1ZNIGJ1aWxkcywgc28gdGhhdCdzIGEgZ2l2ZW4uXG5cbkxldCdzIGRpZyBpbiBhIGJpdCBtb3JlLiBMb29raW5nIGF0IGBhcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jYCwgSSBzcG90IGEgcmVmZXJlbmNlIHRvIGBDT05GSUdfS1ZNX0FNRF9TRVZgLCBzcGVjaWZpY2FsbHk6XG5cbmBgYGNcbiNpZmRlZiBDT05GSUdfS1ZNX0FNRF9TRVZcblx0LnZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24gPSBzZXZfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbixcbmBgYFxuXG5CaW5nbyEgVGhhdCBzZWVtcyBwcmV0dHkgZXhwbGljaXQuIGBLVk1fQU1EX1NFVmAgaXMgZGVmaW5pdGVseSBnb2luZyB0byBiZSBhIGtleSBjb25maWcgdG8gZW5hYmxlIGhlcmUuIEl0IGlzIGRlZmluaXRlbHkgaW1wb3J0YW50LCBhbmQgSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCBpdCBpcyBpbmNsdWRlZC5cblxuQW5kIHRoZW4gSSBzZWUgYENPTkZJR19LVk1fU01NYCBtZW50aW9uZWQgaW4gYGFyY2gveDg2L2t2bS92bXgveDg2X29wcy5oYDpcblxuYGBgY1xuI2lmZGVmIENPTkZJR19LVk1fU01NXG5gYGBcblxuU28sIGxldCBtZSBqdXN0IGNoZWNrIGlmIHRoYXQgaXMgYWN0dWFsbHkgYSBjb25maWd1cmF0aW9uIHRoYXQgbmVlZHMgdG8gYmUgaW5jbHVkZWQuIEkgbmVlZCB0byBrZWVwIGFuIGV5ZSBvbiB0aGlzIG9uZSwgZm9yIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MTA2LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIwOjA4OjUzLjI3ODM2Mjc4M1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1MDYwOTQxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNX1NNTVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZz0xNzM9Y29uZmlnIEtWTV9JT0FQSUNcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4Mi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxODM6Y29uZmlnIEtWTV9TTU1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODQtXFx0Ym9vbCBcXFwiU3lzdGVtIE1hbmFnZW1lbnQgTW9kZSBlbXVsYXRpb25cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIwOjA4OjU0LjkyODk3ODI3M1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzg0NDQ5NjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6XG5cbioqQ2hlY2tpbmcgdGhlIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuUmlnaHQsIHNvIGBLVk1fU01NYCwgdGhhdCdzIGRlZmluaXRlbHkgYSBjb25maWd1cmF0aW9uIG9wdGlvbiwgYSBrbm93biBxdWFudGl0eS4gTXkgZm9jdXMgbm93IGlzLCBpcyB0aGVyZSBhIHJlbGF0ZWQgVERYIChUcnVzdCBEb21haW4gRXh0ZW5zaW9ucykgY29uZmlndXJhdGlvbj8gSXQncyB0aGUgbG9naWNhbCBuZXh0IHN0ZXAgaW4gbXkgYXNzZXNzbWVudCwgSSBuZWVkIHRvIGtub3cgaWYgaXQncyB0aGVyZS4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gZXN0YWJsaXNoIHRoZSBzY29wZSBvZiByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLCBhbmQgVERYIGlzIHRoZSBrZXkgcG9pbnQgSSBoYXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTkyNiwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIwOjA4OjU3LjcxMzQzMDQ3MloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1ODkwMDU0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNX0lOVEVMX1REWFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTM1LVxcdGJvb2wgXFxcIkludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIwOjA4OjU5LjM3MjMzNjc1MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTM2NDc1NjQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gUmV2aWV3KipcblxuT2theSwgc28gSSdtIGRlYWxpbmcgd2l0aCB0aGUgYEtWTV9JTlRFTF9URFhgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBZZXAsIHRoYXQncyBkZWZpbml0ZWx5IGEgY29uZmlnLCBubyBxdWVzdGlvbi4gVGhlIGdvYWwgaGVyZSBpcyB0byBnZXQgZXZlcnl0aGluZyBzZXQgdXAgY29ycmVjdGx5IGZvciB0aGlzIHNwZWNpZmljIHZpcnR1YWxpemF0aW9uIHRlY2guXG5cbkFscmlnaHQsIHNvIHRvIG1ha2UgdGhpcyB0aGluZyB3b3JrLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXNlIGFyZSBlbmFibGVkIHRvbzogYEtWTWAsIGBLVk1fU01NYCwgYEtWTV9BTURfU0VWYCwgYW5kIG9mIGNvdXJzZSBgS1ZNX0lOVEVMX1REWGAgaXRzZWxmLiBUaGF0J3MgYSBwcmV0dHkgc3RhbmRhcmQgc2V0IG9mIGJhc2UgcmVxdWlyZW1lbnRzLCBub3RoaW5nIHRvbyBzdXJwcmlzaW5nLlxuXG5Ob3csIGxldCdzIGRpdmUgaW50byB0aGUgZGVwZW5kZW5jaWVzIGZvciBgS1ZNX0lOVEVMX1REWGAuIFRoYXQncyB3aGVyZSB0aGUgcmVhbCBkZXRhaWwgbGllcywgdGhlIGdyb3VuZHdvcmsuIE5lZWQgdG8ga25vdyB3aGF0IGVsc2UgdGhpcyByZWxpZXMgb24uIFRpbWUgdG8gY2hlY2sgdGhvc2UgZGVwZW5kZW5jaWVzIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjE5MSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIwOjA5OjAyLjkwODgxNTE0N1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM2NTkzODQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fSU5URUxfVERYXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzMy1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzQ6Y29uZmlnIEtWTV9JTlRFTF9URFhcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXFx0Ym9vbCBcXFwiSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMjA6MDk6MDMuMzQ1NDE0OTI5WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNTc1MjA3OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gS1ZNIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBhIHNwZWNpZmljIGFzcGVjdCBvZiB0aGUgS1ZNIGFyY2hpdGVjdHVyZSBvbiB4ODYsIHByb2JhYmx5IHJlbGF0ZWQgdG8gYSBmZWF0dXJlIG9yIHNldHRpbmcuIE15IGludHVpdGlvbiB0ZWxscyBtZSB0byBjaGVjayB0aGUgYEtjb25maWdgIGZpbGUsIGFzIGl0J3MgdGhlIHVzdWFsIHN0YXJ0aW5nIHBvaW50IGZvciBleHBsb3JpbmcgYnVpbGQtdGltZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEknbSBnb2luZyB0byBqdW1wIHRvIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AgYW5kIHpvb20gaW4gYXJvdW5kIGxpbmUgMTM0LiBUaGF0J3MgdXN1YWxseSB3aGVyZSB0aGV5IHB1dCB0aGUgbW9yZSBzcGVjaWZpYyBjb25maWcgb3B0aW9ucyByZWxhdGluZyB0byB0aGUgS1ZNLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBvdmVydmlldyBvZiB0aGUgcmVsZXZhbnQgc2V0dGluZ3MgYW5kIGRlcGVuZGVuY2llcy4gVGhpcyBpcyBvZnRlbiB3aGVyZSB0aGluZ3MgbGlrZSBmZWF0dXJlIGZsYWdzIG9yIGRldmljZSBzdXBwb3J0IGFyZSBkZWZpbmVkLCBzbyBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgd2hhdCBJJ20gbG9va2luZyBmb3IgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NTk5LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMjA6MDk6MDYuNjAyOTM5NDVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzIzMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTMwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTMwOlxcdFxcdCAgZ3Vlc3RzIHZpYSBhIGRldmljZSBub2RlLCBlLmcuIC9kZXYvc2d4X3ZlcGMuXFxuIDEzMTpcXHRcXG4gMTMyOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMTMzOlxcdFxcbiAxMzQ6XFx0Y29uZmlnIEtWTV9JTlRFTF9URFhcXG4gMTM1OlxcdFxcdGJvb2wgXFxcIkludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcXFwiXFxuIDEzNjpcXHRcXHRkZWZhdWx0IHlcXG4gMTM3OlxcdFxcdGRlcGVuZHMgb24gSU5URUxfVERYX0hPU1RcXG4gMTM4OlxcdFxcdHNlbGVjdCBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xcbiAxMzk6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9QT1BVTEFURVxcbiAxNDA6XFx0XFx0aGVscFxcbiAxNDE6XFx0XFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBsYXVuY2hpbmcgSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWClcXG4gMTQyOlxcdFxcdCAgY29uZmlkZW50aWFsIFZNcyBvbiBJbnRlbCBwcm9jZXNzb3JzLlxcbiAxNDM6XFx0XFxuIDE0NDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDE0NTpcXHRcXG4gMTQ2OlxcdGNvbmZpZyBLVk1fQU1EXFxuIDE0NzpcXHRcXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbiAxNDg6XFx0XFx0ZGVwZW5kcyBvbiBLVk0gXFx1MDAyNlxcdTAwMjYgKENQVV9TVVBfQU1EIHx8IENQVV9TVVBfSFlHT04pXFxuIDE0OTpcXHRcXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIwOjA5OjA2LjYwMzAxMjg0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NjM2NDE5OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBrZWVwaW5nIGluIG1pbmQgbXkgZXhwZXJ0aXNlIGluIHRoaXMgYXJlYTpcblxuKipBbmFseXppbmcgdGhlIERlcGVuZGVuY3k6IElOVEVMX1REWF9IT1NUKipcblxuT2theSwgc28gYElOVEVMX1REWF9IT1NUYCBoYXMgcG9wcGVkIHVwLiBTdHJhaWdodCBhd2F5LCBJIHJlY29nbml6ZSB0aGF0IGFzIGEgY3JpdGljYWwgZGVwZW5kZW5jeS4gR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiBjb25maWRlbnRpYWwgY29tcHV0aW5nIGVudmlyb25tZW50cywgdGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSB3ZSdyZSBsb29raW5nIGF0IEludGVsJ3MgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgZm9yIHRoZSBob3N0LiBUaGlzIGxpa2VseSBtZWFucyB3ZSdyZSBkZWFsaW5nIHdpdGggYSBzeXN0ZW0gYWltaW5nIGZvciBzdHJvbmcgaXNvbGF0aW9uLCBwcm9iYWJseSBsZXZlcmFnaW5nIGhhcmR3YXJlLWJhc2VkIHNlY3VyaXR5IGZlYXR1cmVzIGF0IHRoZSBDUFUgbGV2ZWwgdG8gY3JlYXRlIHByb3RlY3RlZCBleGVjdXRpb24gZW5jbGF2ZXMgZm9yIHZpcnR1YWwgbWFjaGluZXMgb3IgY29udGFpbmVyIHdvcmtsb2Fkcy4gVGhlIGZhY3QgdGhhdCBpdCdzIGEgKmhvc3QqIGNvbXBvbmVudCBhbHNvIGZsYWdzIGl0cyBzaWduaWZpY2FuY2UgaW4gdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLiBXZSBuZWVkIHRvIGJlIGNyeXN0YWwgY2xlYXIgYWJvdXQgaG93IHRoaXMgZGVwZW5kZW5jeSBpcyBpbmNvcnBvcmF0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MTQwLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMDowOToxMC4yNjY2NTc1NjNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MTcyMzE1OTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElOVEVMX1REWF9IT1NUXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L0tjb25maWc9MTg0ND1jb25maWcgWDg2X1VTRVJfU0hBRE9XX1NUQUNLXFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnLTE4NjMtXFxuYXJjaC94ODYvS2NvbmZpZzoxODY0OmNvbmZpZyBJTlRFTF9URFhfSE9TVFxcbmFyY2gveDg2L0tjb25maWctMTg2NS1cXHRib29sIFxcXCJJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBob3N0IHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIwOjA5OjExLjc4Mzg5NTI3NVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDU2ODQ1MjI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqRGl2aW5nIGludG8gdGhlIHg4NiBBcmNoaXRlY3R1cmUgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGBhcmNoL3g4Ni9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB0aGUgeDg2IGFyY2hpdGVjdHVyZS4gTGV0J3Mgc3RhcnQgYXJvdW5kIGxpbmUgMTg2NCDigJMgdGhhdCdzIG9mdGVuIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgZXhwbG9yaW5nIHNwZWNpZmljIGZlYXR1cmUgc2V0cyBvciByZWxhdGVkIHNldHRpbmdzLiBIb3BlZnVsbHksIHRoaXMgc2VjdGlvbiB3aWxsIHNoZWQgc29tZSBsaWdodCBvbiB0aGUgYXNwZWN0cyBJJ20gdHJ5aW5nIHRvIHVuZGVyc3RhbmQuIEknbSBleHBlY3RpbmcgdG8gZmluZCBzb21lIGNydWNpYWwgZGV0YWlscyBhYm91dCBpdHMgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoZXJlLCBsaWtlbHkgcmVsYXRlZCB0byBbaW5zZXJ0IHlvdXIgZmllbGQncyBleHBlY3RhdGlvbiBmcm9tIGxvb2tpbmcgYXQgYGFyY2gveDg2L0tjb25maWdgXS4gVGhpcyBzaG91bGQgYmUgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IG15IGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NDQyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMjA6MDk6MTQuODQwNzQzODhaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMxOTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTg2MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTg2MDpcXHRcXHQgIFNlZSBEb2N1bWVudGF0aW9uL2FyY2gveDg2L3Noc3RrLnJzdCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cXG4xODYxOlxcdFxcbjE4NjI6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbjE4NjM6XFx0XFxuMTg2NDpcXHRjb25maWcgSU5URUxfVERYX0hPU1RcXG4xODY1OlxcdFxcdGJvb2wgXFxcIkludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIGhvc3Qgc3VwcG9ydFxcXCJcXG4xODY2OlxcdFxcdGRlcGVuZHMgb24gQ1BVX1NVUF9JTlRFTFxcbjE4Njc6XFx0XFx0ZGVwZW5kcyBvbiBYODZfNjRcXG4xODY4OlxcdFxcdGRlcGVuZHMgb24gS1ZNX0lOVEVMXFxuMTg2OTpcXHRcXHRkZXBlbmRzIG9uIFg4Nl9YMkFQSUNcXG4xODcwOlxcdFxcdHNlbGVjdCBBUkNIX0tFRVBfTUVNQkxPQ0tcXG4xODcxOlxcdFxcdGRlcGVuZHMgb24gQ09OVElHX0FMTE9DXFxuMTg3MjpcXHRcXHRkZXBlbmRzIG9uIFg4Nl9NQ0VcXG4xODczOlxcdFxcdGhlbHBcXG4xODc0OlxcdFxcdCAgSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgcHJvdGVjdHMgZ3Vlc3QgVk1zIGZyb20gbWFsaWNpb3VzXFxuMTg3NTpcXHRcXHQgIGhvc3QgYW5kIGNlcnRhaW4gcGh5c2ljYWwgYXR0YWNrcy4gIFRoaXMgb3B0aW9uIGVuYWJsZXMgbmVjZXNzYXJ5IFREWFxcbjE4NzY6XFx0XFx0ICBzdXBwb3J0IGluIHRoZSBob3N0IGtlcm5lbCB0byBydW4gY29uZmlkZW50aWFsIFZNcy5cXG4xODc3OlxcdFxcbjE4Nzg6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbjE4Nzk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIwOjA5OjE0Ljg0MDk3NzI1WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1Mzc5MDcxMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtlcm5lbCBEZXBlbmRlbmNpZXMgZm9yIFNlY3VyZSBFeGVjdXRpb24gRW52aXJvbm1lbnRzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byBzcGVjaWZpYyB0ZWNobm9sb2dpZXMuIEkgc2VlIHRoYXQgYElOVEVMX1REWF9IT1NUYCBpcyBkZXBlbmRlbnQgb24gYSBmZXcga2V5IGNvbXBvbmVudHM6IGBLVk1fSU5URUxgLCB3aGljaCBpcyBleHBlY3RlZCwgb2J2aW91c2x5IHJlbGF0ZWQgdG8gSW50ZWwncyBWaXJ0dWFsaXphdGlvbiwgYXMgd2VsbCBhcyBgWDg2X1gyQVBJQ2AgZm9yIGludGVycnVwdCBoYW5kbGluZywgYENPTlRJR19BTExPQ2AgZm9yIGNvbnRpZ3VvdXMgbWVtb3J5IGFsbG9jYXRpb24gKGltcG9ydGFudCBmb3Igc2VjdXJpdHkgaXNvbGF0aW9uKSwgYW5kIGBYODZfTUNFYCBmb3IgTWFjaGluZSBDaGVjayBFeGNlcHRpb25zIGhhbmRsaW5nIOKAkyBhbm90aGVyIGltcG9ydGFudCBwYXJ0IG9mIGhhcmR3YXJlIG1vbml0b3JpbmcuXG5cbk5vdywgSSBuZWVkIHRvIHNoaWZ0IG15IGZvY3VzLiBNeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgZGVwZW5kZW5jaWVzIGZvciBgS1ZNX0FNRF9TRVZgLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgQU1EJ3MgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSByZWxhdGVzIHRvIG90aGVyIGtlcm5lbCBjb21wb25lbnRzLiBUaGlzIGlzIGNyaXRpY2FsIGZvciBnZXR0aW5nIGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgbGFuZHNjYXBlIG9mIHNlY3VyZSBleGVjdXRpb24gZW52aXJvbm1lbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzk3MiwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMjA6MDk6MTguMzc4ODg4MjI1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQ1NzAyOTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fQU1EX1NFVlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZz0xNDY9Y29uZmlnIEtWTV9BTURcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNTY6Y29uZmlnIEtWTV9BTURfU0VWXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVxcdGJvb2wgXFxcIkFNRCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIwOjA5OjIwLjAyNDU5NjczNVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjQ1MDEwNTIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIEtWTSBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgS1ZNIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AuIEknbSBndWVzc2luZyB0aGF0IGxpbmUgMTU2IG9yIHRoZXJlYWJvdXRzIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3Igd2hhdGV2ZXIgSSdtIGN1cnJlbnRseSBpbnZlc3RpZ2F0aW5nLiBJdCdzIGxpa2VseSByZWxhdGVkIHRvIGEgc3BlY2lmaWMgZmVhdHVyZSBvciBkZXBlbmRlbmN5IEknbSB0cnlpbmcgdG8gdW5kZXJzdGFuZCwgb3IgcGVyaGFwcyBhIGJ1ZyBmaXggSSdtIGNoYXNpbmcgZG93biB3aXRoaW4gdGhlIEtWTSBmcmFtZXdvcmsuIEtub3dpbmcgdGhlIGFyY2hpdGVjdHVyZSwgSSdtIGV4cGVjdGluZyB0byBmaW5kIHNldHRpbmdzIGRpcmVjdGx5IGFmZmVjdGluZyB4ODYgdmlydHVhbGl6YXRpb24gYmVoYXZpb3IgLSB0aGluZ3MgbGlrZSBoYXJkd2FyZSB2aXJ0dWFsaXphdGlvbiBleHRlbnNpb25zLCBNU1IgaGFuZGxpbmcsIG9yIGludGVycnVwdCBkZWxpdmVyeSBtZWNoYW5pc21zLiBJIGFudGljaXBhdGUgdGhpcyBsaW5lIHdpbGwgZWl0aGVyIGJlIGEgcmVsZXZhbnQgb3B0aW9uIGRlZmluaXRpb24gaXRzZWxmLCBvciBhIHJlZmVyZW5jZSB0byBhbm90aGVyIHNlY3Rpb24gb3IgZGVwZW5kZW5jeSB3aXRoaW4gdGhlIEtjb25maWcgc3RydWN0dXJlLiBUaW1lIHRvIHNlZSB3aGF0J3Mgd2hhdCFcblxuXG4iLCJJbnB1dFRva2VucyI6MTgzNTYsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMDowOToyMy4yNjk2MTA3NTZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODk4MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTUwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTUwOlxcdFxcdCAgUHJvdmlkZXMgc3VwcG9ydCBmb3IgS1ZNIG9uIEFNRCBwcm9jZXNzb3JzIGVxdWlwcGVkIHdpdGggdGhlIEFNRC1WXFxuIDE1MTpcXHRcXHQgIChTVk0pIGV4dGVuc2lvbnMuXFxuIDE1MjpcXHRcXG4gMTUzOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxuIDE1NDpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIGt2bS1hbWQuXFxuIDE1NTpcXHRcXG4gMTU2OlxcdGNvbmZpZyBLVk1fQU1EX1NFVlxcbiAxNTc6XFx0XFx0Ym9vbCBcXFwiQU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFxcXCJcXG4gMTU4OlxcdFxcdGRlZmF1bHQgeVxcbiAxNTk6XFx0XFx0ZGVwZW5kcyBvbiBLVk1fQU1EIFxcdTAwMjZcXHUwMDI2IFg4Nl82NFxcbiAxNjA6XFx0XFx0ZGVwZW5kcyBvbiBDUllQVE9fREVWX1NQX1BTUCBcXHUwMDI2XFx1MDAyNiAhKEtWTV9BTUQ9eSBcXHUwMDI2XFx1MDAyNiBDUllQVE9fREVWX0NDUF9ERD1tKVxcbiAxNjE6XFx0XFx0c2VsZWN0IEFSQ0hfSEFTX0NDX1BMQVRGT1JNXFxuIDE2MjpcXHRcXHRzZWxlY3QgS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcXG4gMTYzOlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fQ09OVkVSVFxcbiAxNjQ6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9SRUNMQUlNXFxuIDE2NTpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVcXG4gMTY2OlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fUE9QVUxBVEVcXG4gMTY3OlxcdFxcdGhlbHBcXG4gMTY4OlxcdFxcdCAgUHJvdmlkZXMgc3VwcG9ydCBmb3IgbGF1bmNoaW5nIGVuY3J5cHRlZCBWTXMgd2hpY2ggdXNlIFNlY3VyZVxcbiAxNjk6XFx0XFx0ICBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFViksIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gd2l0aFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMDowOToyMy4yNjk3MDE4MDZaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQxODc5MDM0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgZGVwZW5kZW5jaWVzLCBzdW1tYXJpemVkIGFzIGEgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRlcGVuZGVuY3kgRGVlcCBEaXZlKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgZG93biB0aGVzZSBrZXJuZWwgbW9kdWxlcy4gSXQgbG9va3MgbGlrZSBgS1ZNX0FNRF9TRVZgIGlzIHByZXR0eSB0aWdodGx5IGNvdXBsZWQuIENsZWFybHksIGl0IGhpbmdlcyBvbiBib3RoIGBLVk1fQU1EYCBhbmQgYENSWVBUT19ERVZfU1BfUFNQYC4gTWFrZXMgc2Vuc2UsIGNvbnNpZGVyaW5nIFNFViBpcyBhbiBBTUQtc3BlY2lmaWMgdGVjaG5vbG9neSBhbmQgcHJvYmFibHkgbmVlZHMgc29tZSBjcnlwdG9ncmFwaGljIHN1cHBvcnQgZnJvbSB0aGUgUFNQLiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCByZWxhdGlvbnNoaXAgd2hlbiBJJ20gdHJhY2tpbmcgZG93biBpc3N1ZXMgb3IgY29uZmlndXJpbmcgc3lzdGVtcy4gTm93LCBsZXQncyBzaGlmdCBnZWFycyBhbmQgcXVpY2tseSB2ZXJpZnkgd2hhdCBgS1ZNX1NNTWAgZGVwZW5kcyBvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdCBtb2R1bGUncyBkZXBlbmRlbmNpZXMgYXMgd2VsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg5ODAsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIwOjA5OjI2LjY4ODQ5NTA1NFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTAwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODAsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxODA6XFx0XFxuIDE4MTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IFkuXFxuIDE4MjpcXHRcXG4gMTgzOlxcdGNvbmZpZyBLVk1fU01NXFxuIDE4NDpcXHRcXHRib29sIFxcXCJTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIGVtdWxhdGlvblxcXCJcXG4gMTg1OlxcdFxcdGRlZmF1bHQgeVxcbiAxODY6XFx0XFx0ZGVwZW5kcyBvbiBLVk1fWDg2XFxuIDE4NzpcXHRcXHRoZWxwXFxuIDE4ODpcXHRcXHQgIFByb3ZpZGVzIHN1cHBvcnQgZm9yIEtWTSB0byBlbXVsYXRlIFN5c3RlbSBNYW5hZ2VtZW50IE1vZGUgKFNNTSlcXG4gMTg5OlxcdFxcdCAgaW4gdmlydHVhbCBtYWNoaW5lcy4gIFRoaXMgY2FuIGJlIHVzZWQgYnkgdGhlIHZpcnR1YWwgbWFjaGluZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMDowOToyNi42ODg1NjEyMDNaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIwMzc2NjM1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIGRlcGVuZGVuY2llcywgdGhpbmtpbmcgdGhyb3VnaCB0aGUgc2l0dWF0aW9uOlxuXG4qKkRlcGVuZGVuY3kgRGVlcCBEaXZlOiBLVk1fU01NIGFuZCBLVk1fWDg2KipcblxuT2theSwgc28gYEtWTV9TTU1gIHJlbGllcyBvbiBgS1ZNX1g4NmAuIFRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIEdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGFyY2hpdGVjdHVyZSwgdGhpcyBpc24ndCBzdXJwcmlzaW5nIOKAkyBTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIChTTU0pIGlzIGRlZmluaXRlbHkgeDg2LXNwZWNpZmljLiBCdXQgSSBuZWVkIHRvIGJlIHN1cmUuIFRpbWUgdG8gZGlnIGludG8gdGhlIGBLVk1fWDg2YCBtb2R1bGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzY29wZSBhbmQgdGhlIHByZWNpc2UgbmF0dXJlIG9mIHRoZSBkZXBlbmRlbmN5LiBXaGF0IHNwZWNpZmljIGZ1bmN0aW9uYWxpdGllcyBvZiBgS1ZNX1g4NmAgZG9lcyBgS1ZNX1NNTWAgbGV2ZXJhZ2U/IElzIGl0IHNpbXBseSB0aGUgY29yZSB4ODYgdmlydHVhbGl6YXRpb24gbGF5ZXIsIG9yIGRvZXMgaXQgZGVwZW5kIG9uIG1vcmUgc3BlY2lhbGl6ZWQgZmVhdHVyZXM/IFVuZGVyc3RhbmRpbmcgdGhpcyBncmFudWxhciBkZXBlbmRlbmN5IGlzIGtleSBmb3IgYW55IG9wdGltaXphdGlvbiBvciB0cm91Ymxlc2hvb3RpbmcgZWZmb3J0cyBkb3duIHRoZSBsaW5lLiBMZXQncyBzZWUgd2hhdCdzIHVuZGVyIHRoZSBob29kIG9mIGBLVk1fWDg2YC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkzNTQsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIwOjA5OjI5Ljg5MjMzMDI1NVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYyMDAyNTk4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNX1g4NlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1fWDg2XFxuYXJjaC94ODYva3ZtL0tjb25maWctMjEtXFx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMDowOTozMS41MTIzNjEzMzVaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTczMDM2MTU5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBLVk0gQ29uZmlndXJhdGlvbiBBbmFseXNpcyoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSXQgbG9va3MgbGlrZSBgS1ZNX1g4NmAgaXMgb25seSBlbmFibGVkIHdoZW4gdGhlIGJhc2UgYEtWTWAgbW9kdWxlIGlzIGFjdGl2YXRlZCwgYW5kIHRoZW4gc3BlY2lmaWNhbGx5LCBpZiBlaXRoZXIgdGhlIEludGVsIChgS1ZNX0lOVEVMYCkgb3IgQU1EIChgS1ZNX0FNRGApIGV4dGVuc2lvbnMgYXJlIHByZXNlbnQuIE1ha2VzIHNlbnNlLCB0aGF0J3MgdGhlIGNvcmUgaHlwZXJ2aXNvciBzdHJ1Y3R1cmUuXG5cbk5vdywgbGV0J3MgbmFpbCBkb3duIHdoYXQgY29uZmlndXJhdGlvbnMgKkkqIG5lZWQgdG8gZW5hYmxlIHRvIGdldCB0aGlzIHRoaW5nIHJ1bm5pbmcgcHJvcGVybHkuIExvb2tzIGxpa2UgdGhlIGNvcmUgYEtWTWAgbW9kdWxlIGlzIGEgZ2l2ZW4uICBJIG5lZWQgdG8gbWFrZSBzdXJlIGBLVk1fSU5URUxgIG9yIGBLVk1fQU1EYCBhcmUgc2V0LCBkZXBlbmRpbmcgb24gdGhlIGhvc3QncyBDUFUuIEkgc2VlIGBLVk1fU01NYCB3aGljaCBJIGFzc3VtZSByZWxhdGVzIHRvIFN5c3RlbSBNYW5hZ2VtZW50IE1vZGUsIGNyaXRpY2FsIGZvciBoYW5kbGluZyBjZXJ0YWluIGhhcmR3YXJlIGludGVyYWN0aW9ucywgYW5kIEknbGwgbmVlZCB0byBjb25zaWRlciBgS1ZNX0FNRF9TRVZgLCBhbmQgYEtWTV9JTlRFTF9URFhgIGRlcGVuZGluZyBvbiB0aGUgc2VjdXJpdHkgZmVhdHVyZS1zZXQgSSByZXF1aXJlLiBBbHNvLCBgSU5URUxfVERYX0hPU1RgIHdpbGwgYmUgbmVlZGVkIGlmIEkgYW0gcnVubmluZyB3aXRoIFREWC5cblxuRmluYWxseSwgYENSWVBUT19ERVZfU1BfUFNQYCBpcyBsaXN0ZWQsIGFuZCBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIGFueSBkZXBlbmRlbmNpZXMgaXQgaGFzLiBUaGlzIGlzIHByb2JhYmx5IHJlbGF0ZWQgdG8gc3VwcG9ydGluZyBzcGVjaWZpYyBjcnlwdG9ncmFwaGljIG9mZmxvYWQgaGFyZHdhcmUuIEdvdHRhIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGxpbmVzIHVwIGRlcGVuZGVuY2llcy13aXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTcyMywiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMDowOTozNy4yNDI3MjUxOTFaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODMyMzAzNjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIENSWVBUT19ERVZfU1BfUFNQXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnPTIzPWNvbmZpZyBDUllQVE9fREVWX0NDUF9DUllQVE9cXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnLTM3LVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnOjM4OmNvbmZpZyBDUllQVE9fREVWX1NQX1BTUFxcbmRyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnLTM5LVxcdGJvb2wgXFxcIlBsYXRmb3JtIFNlY3VyaXR5IFByb2Nlc3NvciAoUFNQKSBkZXZpY2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIwOjA5OjM4LjgyNTk2NjkyMloiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzUyOTE5OTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBDQ1AgS2NvbmZpZyoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ20gdGhpbmtpbmcsIFwiVGltZSB0byBkaWcgaW50byB0aGUgYGRyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMzguXCIgSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgQ0NQIGNyeXB0byBlbmdpbmUuIEknbSBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIHRoYXQgbGluZSBiZWNhdXNlIEkgdmFndWVseSByZWNhbGwgc29tZSBjcml0aWNhbCBzZXR0aW5nIGJlaW5nIGRlZmluZWQgdGhlcmUgLSBtYXliZSByZWxhdGVkIHRvIGtleSBzaXplLCBzdXBwb3J0ZWQgYWxnb3JpdGhtcywgb3IgcGVyaGFwcyBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXMuIEkgd2FudCB0byBxdWlja2x5IHplcm8gaW4gb24gaXQgYW5kIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCdzIHdoYXQuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBpcyBjcnVjaWFsIGZvciBhbnkgZGVlcGVyIGFuYWx5c2lzIG9yIG1vZGlmaWNhdGlvbiBJIG5lZWQgdG8gcGVyZm9ybS4gTGV0J3Mgc2VlIHdoYXQgZ2VtcyBhcmUgaGlkZGVuIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDI2MCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIwOjA5OjQyLjE3ODg5MDMxMVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzA3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2NyeXB0by9jY3AvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAzMDpcXHRcXHRzZWxlY3QgQ1JZUFRPX0FVVEhFTkNcXG4gIDMxOlxcdFxcdHNlbGVjdCBDUllQVE9fUlNBXFxuICAzMjpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9BRVNcXG4gIDMzOlxcdFxcdGhlbHBcXG4gIDM0OlxcdFxcdCAgU3VwcG9ydCBmb3IgdXNpbmcgdGhlIGNyeXB0b2dyYXBoaWMgQVBJIHdpdGggdGhlIEFNRCBDcnlwdG9ncmFwaGljXFxuICAzNTpcXHRcXHQgIENvcHJvY2Vzc29yLiBUaGlzIG1vZHVsZSBzdXBwb3J0cyBvZmZsb2FkIG9mIFNIQSBhbmQgQUVTIGFsZ29yaXRobXMuXFxuICAzNjpcXHRcXHQgIElmIHlvdSBjaG9vc2UgJ00nIGhlcmUsIHRoaXMgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNjcF9jcnlwdG8uXFxuICAzNzpcXHRcXG4gIDM4OlxcdGNvbmZpZyBDUllQVE9fREVWX1NQX1BTUFxcbiAgMzk6XFx0XFx0Ym9vbCBcXFwiUGxhdGZvcm0gU2VjdXJpdHkgUHJvY2Vzc29yIChQU1ApIGRldmljZVxcXCJcXG4gIDQwOlxcdFxcdGRlZmF1bHQgeVxcbiAgNDE6XFx0XFx0ZGVwZW5kcyBvbiBDUllQVE9fREVWX0NDUF9ERCBcXHUwMDI2XFx1MDAyNiBYODZfNjQgXFx1MDAyNlxcdTAwMjYgQU1EX0lPTU1VXFxuICA0MjpcXHRcXHRzZWxlY3QgUENJX1RTTSBpZiBQQ0lcXG4gIDQzOlxcdFxcdGhlbHBcXG4gIDQ0OlxcdFxcdCBQcm92aWRlIHN1cHBvcnQgZm9yIHRoZSBBTUQgUGxhdGZvcm0gU2VjdXJpdHkgUHJvY2Vzc29yIChQU1ApLlxcbiAgNDU6XFx0XFx0IFRoZSBQU1AgaXMgYSBkZWRpY2F0ZWQgcHJvY2Vzc29yIHRoYXQgcHJvdmlkZXMgc3VwcG9ydCBmb3Iga2V5XFxuICA0NjpcXHRcXHQgbWFuYWdlbWVudCBjb21tYW5kcyBpbiBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIG1vZGUsXFxuICA0NzpcXHRcXHQgYWxvbmcgd2l0aCBzb2Z0d2FyZS1iYXNlZCBUcnVzdGVkIEV4ZWN1dGlvbiBFbnZpcm9ubWVudCAoVEVFKSB0b1xcbiAgNDg6XFx0XFx0IGVuYWJsZSB0aGlyZC1wYXJ0eSB0cnVzdGVkIGFwcGxpY2F0aW9ucy5cXG4gIDQ5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMDowOTo0Mi4xNzg5ODkxNTFaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI0NDUwNjQ0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZXBlbmRlbmNpZXMgYW5kIERlZXAgRGl2ZXMqKlxuXG5Pa2F5LCBzbyBgQ1JZUFRPX0RFVl9TUF9QU1BgIHJlbGllcyBvbiBhIGZldyBvdGhlciBjb21wb25lbnRzLiBTcGVjaWZpY2FsbHksIGBDUllQVE9fREVWX0NDUF9ERGAsIGBYODZfNjRgLCBhbmQgYEFNRF9JT01NVWAuIEdpdmVuIG15IGV4cGVyaWVuY2UsIGl0J3MgcHJldHR5IGNsZWFyIHRob3NlIGFyZSBrZXkgcGllY2VzIGZvciBoYXJkd2FyZS1hY2NlbGVyYXRlZCBjcnlwdG8uIE1ha2VzIHNlbnNlLiBOb3csIGxldCdzIGRyaWxsIGRvd24gaW50byBgQ1JZUFRPX0RFVl9DQ1BfRERgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgdGhhdCBkZXBlbmRlbmN5IGVudGFpbHMgdG8gZ2V0IGEgZnVsbCBwaWN0dXJlIG9mIHRoZSBgU1BfUFNQYCdzIGZ1bmN0aW9uYWxpdHkgYW5kIHBvdGVudGlhbCBib3R0bGVuZWNrcy4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCB3b3JrIGJlZ2lucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA3ODksIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIwOjA5OjQ1LjQyMzUwMDQwMloiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU0NjU3Njk4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ1JZUFRPX0RFVl9DQ1BfRERcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL2NyeXB0by9jY3AvS2NvbmZpZzoyOmNvbmZpZyBDUllQVE9fREVWX0NDUF9ERFxcbmRyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlNlY3VyZSBQcm9jZXNzb3IgZGV2aWNlIGRyaXZlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMjA6MDk6NDYuOTcwMDg0NDQ0WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0ODQwMTk5MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBDQ1AgS2VybmVsIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBgZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWdgIGZpbGUuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgdG8gYXJvdW5kIGxpbmUgMi4gTXkgZXhwZXJ0aXNlIHRlbGxzIG1lIHRoYXQgYEtjb25maWdgIGZpbGVzIGFyZSB0aGUgYmFja2JvbmUgb2Yga2VybmVsIGNvbmZpZ3VyYXRpb24sIHNvIHRoZSBpbml0aWFsIGxpbmVzIGFyZSBhbG1vc3QgYWx3YXlzIGNydWNpYWwuIFRoZXknbGwgbGlrZWx5IGVzdGFibGlzaCB0aGUgb3ZlcmFsbCBjb250ZXh0IGZvciB0aGUgQ0NQIChDcnlwdG9ncmFwaGljIENvcHJvY2Vzc29yKSBkcml2ZXIg4oCTIGRlZmluaW5nIGl0cyBwdXJwb3NlLCBpdHMgZGVwZW5kZW5jaWVzLCBvciBwZXJoYXBzIHByb3ZpZGluZyBhbiBpbml0aWFsIGRlZmF1bHQgc2V0dGluZy4gSSBhbnRpY2lwYXRlIHRoaXMgd2lsbCBiZSB3aGVyZSB0aGUgYmFzaWMgYnVpbGQgb3B0aW9ucywgcGVyaGFwcyBhIGhlbHAgdGV4dCBhbmQgdGhlIGluaXRpYWwgc2NvcGUsIHdpbGwgYmUgcGxhY2VkLiBJJ20ga2VlbiB0byBzZWUgaWYgdGhpcyBjb25maXJtcyBteSBleHBlcmllbmNlIGluIHRoaXMgc3BhY2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBtb2R1bGUgaXMgYWJvdXQgYmVmb3JlIGxvb2tpbmcgaW50byBvdGhlciBmaWxlcy4gSSBsb29rIGZvcndhcmQgdG8gc2VlaW5nIHdoYXQgaXQgaGFzIHRvIHRlbGwgbWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMDgxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMjA6MDk6NTAuNDU0MTA2OTVaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzA1MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBDUllQVE9fREVWX0NDUF9ERFxcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIlNlY3VyZSBQcm9jZXNzb3IgZGV2aWNlIGRyaXZlclxcXCJcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gQ1BVX1NVUF9BTUQgfHwgQVJNNjRcXG4gICA1OlxcdFxcdGRlZmF1bHQgbVxcbiAgIDY6XFx0XFx0aGVscFxcbiAgIDc6XFx0XFx0ICBQcm92aWRlcyBBTUQgU2VjdXJlIFByb2Nlc3NvciBkZXZpY2UgZHJpdmVyLlxcbiAgIDg6XFx0XFx0ICBJZiB5b3UgY2hvb3NlICdNJyBoZXJlLCB0aGlzIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjY3AuXFxuICAgOTpcXHRcXG4gIDEwOlxcdGNvbmZpZyBDUllQVE9fREVWX1NQX0NDUFxcbiAgMTE6XFx0XFx0Ym9vbCBcXFwiQ3J5cHRvZ3JhcGhpYyBDb3Byb2Nlc3NvciBkZXZpY2VcXFwiXFxuICAxMjpcXHRcXHRkZWZhdWx0IHlcXG4gIDEzOlxcdFxcdGRlcGVuZHMgb24gQ1JZUFRPX0RFVl9DQ1BfREQgXFx1MDAyNlxcdTAwMjYgRE1BREVWSUNFU1xcbiAgMTQ6XFx0XFx0c2VsZWN0IEhXX1JBTkRPTVxcbiAgMTU6XFx0XFx0c2VsZWN0IERNQV9FTkdJTkVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMjA6MDk6NTAuNDU0MTc4NjNaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU0OTYzOTkxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRlY29kaW5nIHRoZSBEZXBlbmRlbmN5IENoYWluKipcblxuUmlnaHQsIHNvIGBDUllQVE9fREVWX0NDUF9ERGAuLi4gdGhhdCBvbmUncyBpbnRlcmVzdGluZy4gVGhlIGltbWVkaWF0ZSBkZXBlbmRlbmN5IGlzIHByZXR0eSBjbGVhcjogaXQgaGluZ2VzIG9uIGVpdGhlciBgQ1BVX1NVUF9BTURgIG9yIGBBUk02NGAuIE1ha2VzIHNlbnNlLCBjb25zaWRlcmluZyB0aGUgbGlrZWx5IGhhcmR3YXJlIHJlcXVpcmVtZW50cyBmb3IgdGhpcyBzcGVjaWZpYyBjcnlwdG8gZGV2aWNlIGRyaXZlciwgYENDUF9ERGAgbGlrZWx5IHJlbGF0ZXMgdG8gQU1EJ3MgUGxhdGZvcm0gU2VjdXJpdHkgUHJvY2Vzc29yIChQU1ApIG9yIGEgc2ltaWxhciBzZWN1cmUgY28tcHJvY2Vzc29yLCBvciBhIHBsYXRmb3JtIHdoaWNoIHJlcXVpcmVzIHRoZSB1bmRlcmx5aW5nIHN1cHBvcnQgZnJvbSBgQVJNNjRgLiBUaGUgY29uZGl0aW9uYWwgbmF0dXJlIGlzIGltcG9ydGFudCB0byBrZWVwIGluIG1pbmQsIG9mIGNvdXJzZS5cblxuTm93LCBiZWNhdXNlIGl0IGRlcGVuZHMgb24gYENQVV9TVVBfQU1EYCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGF0IHRoZSBBTUQgSU9NTVUgaXMgZW5hYmxlZCBvciBjb25maWd1cmVkIGNvcnJlY3RseSwgcmlnaHQ/IExldCdzIHRha2UgYSBsb29rIGF0IGBBTURfSU9NTVVgIGFuZCBzZWUgaG93IGl0IGlzIGNvbmZpZ3VyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNTQwLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMDowOTo1NC4wMDM4MjI0MDVaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NDgxMzIwNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEFNRF9JT01NVVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnLTItIyBBTUQgSU9NTVUgc3VwcG9ydFxcbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWc6Mzpjb25maWcgQU1EX0lPTU1VXFxuZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZy00LVxcdGJvb2wgXFxcIkFNRCBJT01NVSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZy0zMi1cXG5kcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnOjMzOmNvbmZpZyBBTURfSU9NTVVfSU9NTVVGRFxcbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWctMzQtXFx0Ym9vbCBcXFwiRW5hYmxlIElPTU1VRkQgZmVhdHVyZXMgZm9yIEFNRCBJT01NVSAoRVhQRVJJTUVOVEFMKVxcXCJcXG4tLVxcbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWctNDItXFxuZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZzo0Mzpjb25maWcgQU1EX0lPTU1VX0RFQlVHRlNcXG5kcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnLTQ0LVxcdGJvb2wgXFxcIkVuYWJsZSBBTUQgSU9NTVUgaW50ZXJuYWxzIGluIERlYnVnRlNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIwOjA5OjU1LjY1MTk1OTQzNVoiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjE3NzU1NzkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gQU1EIElPTU1VIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIEFNRCBJT01NVSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIE15IGluc3RpbmN0IHRlbGxzIG1lIHRoZSBwbGFjZSB0byBzdGFydCBpcyB0aGUgYGRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWdgIGZpbGUuIEknbSBhc3N1bWluZyB0aGF0J3MgdGhlIGNhbm9uaWNhbCBsb2NhdGlvbiBmb3IgdGhlc2Ugc29ydHMgb2YgZGVmaW5pdGlvbnMuIExldCdzIHN0YXJ0IGFyb3VuZCBsaW5lIDMsIHdoaWNoIGlzIHVzdWFsbHkgd2hlcmUgYSBnb29kIG92ZXJ2aWV3IG9yIGdlbmVyYWwgZGVzY3JpcHRpb24gYmVnaW5zLCBvciBhdCBsZWFzdCB0aGUgdG9wLWxldmVsIG9wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMDEyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMjA6MDk6NTguODY5NzE5OTQ3WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwMzMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCMgQU1EIElPTU1VIHN1cHBvcnRcXG4gICAzOlxcdGNvbmZpZyBBTURfSU9NTVVcXG4gICA0OlxcdFxcdGJvb2wgXFxcIkFNRCBJT01NVSBzdXBwb3J0XFxcIlxcbiAgIDU6XFx0XFx0c2VsZWN0IFNXSU9UTEJcXG4gICA2OlxcdFxcdHNlbGVjdCBQQ0lfTVNJXFxuICAgNzpcXHRcXHRzZWxlY3QgUENJX0FUU1xcbiAgIDg6XFx0XFx0c2VsZWN0IFBDSV9QUklcXG4gICA5OlxcdFxcdHNlbGVjdCBQQ0lfUEFTSURcXG4gIDEwOlxcdFxcdHNlbGVjdCBJUlFfTVNJX0xJQlxcbiAgMTE6XFx0XFx0c2VsZWN0IE1NVV9OT1RJRklFUlxcbiAgMTI6XFx0XFx0c2VsZWN0IElPTU1VX0FQSVxcbiAgMTM6XFx0XFx0c2VsZWN0IElPTU1VX0lPVkFcXG4gIDE0OlxcdFxcdHNlbGVjdCBJT01NVV9TVkFcXG4gIDE1OlxcdFxcdHNlbGVjdCBJT01NVV9JT1BGXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIwOjA5OjU4Ljg2OTc5MTQ0N1oiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDI2MDI3NzY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqUXVpY2sgRGVwZW5kZW5jeSBDaGVjayoqXG5cblJpZ2h0LCBzbyAqQU1EX0lPTU1VKiBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIOKAkyBubyBnbGFyaW5nLCBjb21wbGV4IGRlcGVuZGVuY2llcyBqdW1waW5nIG91dCBhdCBtZSByaWdodCBhd2F5LiBBbHdheXMgZ29vZCB0byBzZWUgYSBtb2R1bGUgdGhhdCBrZWVwcyB0aGluZ3MgY2xlYW4uXG5cbk5vdywgbGV0J3Mgc3dpdGNoIGdlYXJzIGFuZCBkaWcgaW50byAqS1ZNX0lOVEVMKi4gSSBrbm93IHRoYXQgb25lJ3MgZ290IGEgZmV3IG1vcmUgbGF5ZXJzIGFuZCBsaWtlbHkgc29tZSBpbnRlcmFjdGlvbnMgdGhhdCBuZWVkIGEgY2xvc2VyIGxvb2suIExldCdzIHN0YXJ0IG1lbnRhbGx5IHRyYWNpbmcgdGhvc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMzgxLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMDoxMDowMS44OTU4MjIwMjFaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTY0NTMxOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTV9JTlRFTFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZz04Mz1jb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctOTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6OTY6Y29uZmlnIEtWTV9JTlRFTFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk3LVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTA2LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEwNzpjb25maWcgS1ZNX0lOVEVMX1BST1ZFX1ZFXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTA4LSAgICAgICAgYm9vbCBcXFwiQ2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTM1LVxcdGJvb2wgXFxcIkludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIwOjEwOjAzLjU1MjI4MTQ4MVoiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTQxNTI0Nzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSByZWFkaW5nIGFuZCB0aGlua2luZyBhYm91dCB0aGUgS2NvbmZpZyBmaWxlOlxuXG4qKk5hdmlnYXRpbmcgS2NvbmZpZyBmb3IgS1ZNIG9uIHg4NioqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AgZmlsZSBhZ2Fpbi4gTGV0J3Mgc2VlLi4uIEknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiB3aGF0J3MgZ29pbmcgb24gYXJvdW5kIGxpbmUgOTYuIFdoYXQncyBkZWZpbmVkIHRoZXJlLCBhbmQgaG93IGRvZXMgaXQgcmVsYXRlIHRvIHRoZSBicm9hZGVyIEtWTSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSB4ODYgYXJjaGl0ZWN0dXJlPyBJIGtub3cgdGhpcyBhcmVhIGhvbGRzIGtleSBkZWZpbml0aW9ucywgb2Z0ZW4gcmVsYXRlZCB0byBzcGVjaWZpYyBoYXJkd2FyZSBmZWF0dXJlcyBvciBvcHRpbWl6YXRpb24gcGF0aHMgZm9yIEtWTS4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IGxpbmUgOTYgcHJvYmFibHkgZGVmaW5lcyBhIHNwZWNpZmljIEtWTSBmZWF0dXJlIG9yIGludHJvZHVjZXMgYSBjb25kaXRpb25hbCBibG9jayBmb3IgYSBoYXJkd2FyZSBkZXBlbmRlbmN5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHRvIG1ha2UgYW4gYXNzZXNzbWVudCBvciBtb2RpZmljYXRpb24uIEknbSBrZWVuIHRvIGZpbmQgb3V0IGFib3V0IHdoZXRoZXIgaXQncyByZWxhdGVkIHRvIHNvbWUgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyODM0LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMjA6MTA6MDcuMDkzODExMTQ2WiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5MjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDkwLFxuICBcIkxpbmVDb3VudFwiOiAxNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDkwOlxcdFxcdCAgcHJvdGVjdGVkIFZNcyBhcmUgcHVyZWx5IGEgZGV2ZWxvcG1lbnQgYW5kIHRlc3RpbmcgdmVoaWNsZSBmb3JcXG4gIDkxOlxcdFxcdCAgS1ZNX0NSRUFURV9HVUVTVF9NRU1GRC4gIEF0dGVtcHRpbmcgdG8gcnVuIGEgXFxcInJlYWxcXFwiIFZNIHdvcmtsb2FkIGFzIGFcXG4gIDkyOlxcdFxcdCAgc29mdHdhcmUtcHJvdGVjdGVkIFZNIHdpbGwgZmFpbCBtaXNlcmFibHkuXFxuICA5MzpcXHRcXG4gIDk0OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgXFxcIk5cXFwiLlxcbiAgOTU6XFx0XFxuICA5NjpcXHRjb25maWcgS1ZNX0lOVEVMXFxuICA5NzpcXHRcXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBJbnRlbCAoYW5kIGNvbXBhdGlibGUpIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4gIDk4OlxcdFxcdGRlcGVuZHMgb24gS1ZNIFxcdTAwMjZcXHUwMDI2IElBMzJfRkVBVF9DVExcXG4gIDk5OlxcdFxcdHNlbGVjdCBYODZfRlJFRCBpZiBYODZfNjRcXG4gMTAwOlxcdFxcdGhlbHBcXG4gMTAxOlxcdFxcdCAgUHJvdmlkZXMgc3VwcG9ydCBmb3IgS1ZNIG9uIHByb2Nlc3NvcnMgZXF1aXBwZWQgd2l0aCBJbnRlbCdzIFZUXFxuIDEwMjpcXHRcXHQgIGV4dGVuc2lvbnMsIGEuay5hLiBWaXJ0dWFsIE1hY2hpbmUgRXh0ZW5zaW9ucyAoVk1YKS5cXG4gMTAzOlxcdFxcbiAxMDQ6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMjA6MTA6MDcuMDkzOTAyMDI2WiIsIlNlcSI6NDksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxODg4ODQ4NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgS1ZNX0lOVEVMIERlcGVuZGVuY2llcyoqXG5cblJpZ2h0LCBzbyBgS1ZNX0lOVEVMYCBpcyBjbGVhcmx5IGJ1aWx0IG9uIGBLVk1gIOKAkyB0aGF0J3MgZXhwZWN0ZWQuIEJ1dCB0aGUgbWVudGlvbiBvZiBgSUEzMl9GRUFUX0NUTGAuLi4gdGhhdCdzIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IGNvbm5lY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyBpdCdzIHJlbGF0ZWQgdG8gaGFuZGxpbmcgc3BlY2lmaWMgSW50ZWwgQ1BVIGZlYXR1cmVzIHdpdGhpbiB0aGUgS1ZNIGVudmlyb25tZW50LiBQcm9iYWJseSBzb21ldGhpbmcgdG8gZG8gd2l0aCBlbmFibGluZyBvciBjb25maWd1cmluZyB2aXJ0dWFsaXphdGlvbi1zcGVjaWZpYyBjYXBhYmlsaXRpZXMuIEkgc2hvdWxkIHN0YXJ0IGJ5IGRpdmluZyBpbnRvIHRoZSBkZWZpbml0aW9ucyBhbmQgdXNhZ2Ugb2YgYElBMzJfRkVBVF9DVExgLiBMZXQncyBzZWUgd2hhdCB0aGF0IHJlZ2lzdGVyIG9yIGNvbnRyb2wgc3RydWN0dXJlIGFjdHVhbGx5IGRvZXMgYW5kIGhvdyBgS1ZNX0lOVEVMYCBsZXZlcmFnZXMgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMzMxLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMDoxMDoxMC4yODI3ODk2MzhaIiwiU2VxIjo1MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODgzOTc5NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElBMzJfRkVBVF9DVExcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvS2NvbmZpZy5jcHU9Mjg1PWNvbmZpZyBYODZfREVCVUdDVExNU1JcXG4tLVxcbmFyY2gveDg2L0tjb25maWcuY3B1LTI4OC1cXG5hcmNoL3g4Ni9LY29uZmlnLmNwdToyODk6Y29uZmlnIElBMzJfRkVBVF9DVExcXG5hcmNoL3g4Ni9LY29uZmlnLmNwdS0yOTAtXFx0ZGVmX2Jvb2wgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMDoxMDoxMS45NzEyMTU0NzdaIiwiU2VxIjo1MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYwOTgwNzAyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gYElBMzJfRkVBVF9DVExgIGlzIGRlZmluZWQgYXMgJ3knLiBUaGlzIG1lYW5zIHdlIGhhdmUgYSBzZXQgb2YgY29uZmlndXJhdGlvbnMgZW5hYmxlZDogYEtWTWAsIGBLVk1fSU5URUxgLCBgS1ZNX0FNRGAsIGBLVk1fU01NYCwgYEtWTV9BTURfU0VWYCwgYEtWTV9JTlRFTF9URFhgLCBgSU5URUxfVERYX0hPU1RgLCBgQ1JZUFRPX0RFVl9TUF9QU1BgLCBgQ1JZUFRPX0RFVl9DQ1BfRERgLCBhbmQgYEFNRF9JT01NVWAuIFRoYXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkLlxuXG5Ob3csIGxldCdzIGRpZyBhIGxpdHRsZSBkZWVwZXIuIEknbSBmb2N1c2luZyBvbiBgS1ZNX0FNRF9TRVZgIGFuZCBpdHMgZGVwZW5kZW5jaWVzLiBJdCByZWxpZXMgb24gYENSWVBUT19ERVZfU1BfUFNQYCBhbmQgKmFsc28qIHRoaXMgcmF0aGVyIGludGVyZXN0aW5nIGNvbmRpdGlvbmFsOiBgIShLVk1fQU1EPXkgXHUwMDI2XHUwMDI2IENSWVBUT19ERVZfQ0NQX0REPW0pYC4gVGhpcyBpcyBrZXkuIFRoZSBpbXBsaWNhdGlvbiBpcywgaWYgYEtWTV9BTURgIGlzIGNvbXBpbGVkIGluIChgeWApLCB0aGVuIGBDUllQVE9fREVWX0NDUF9ERGAgKm11c3QqIGJlIHNldCB0byAneScuIEl0J3MgZWZmZWN0aXZlbHkgZm9yY2luZyB0aGUgaW5jbHVzaW9uIG9mIHRoZSBtb2R1bGUuXG5cblRoZXJlZm9yZSwgYENSWVBUT19ERVZfQ0NQX0REYCBpcyBhbiBhYnNvbHV0ZSByZXF1aXJlbWVudCwgZ2l2ZW4gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbi5cblxuSSB0aGluayBJJ2xsIG5vdyBjaGVjayB0aGUgc3RhdHVzIG9mIGBYODZfWDJBUElDYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM2NTYsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMjA6MTA6MTYuNTgxMDI1ODI0WiIsIlNlcSI6NTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjU1ODE5MTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBYODZfWDJBUElDXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L0tjb25maWc9NDM2PWNvbmZpZyBTTVBcXG4tLVxcbmFyY2gveDg2L0tjb25maWctNDU4LVxcbmFyY2gveDg2L0tjb25maWc6NDU5OmNvbmZpZyBYODZfWDJBUElDXFxuYXJjaC94ODYvS2NvbmZpZy00NjAtXFx0Ym9vbCBcXFwieDJBUElDIGludGVycnVwdCBjb250cm9sbGVyIGFyY2hpdGVjdHVyZSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMDoxMDoxOC4yMzY4NTQ5MzNaIiwiU2VxIjo1MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA0NDQ5NTAxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gcmVhZGluZyBhbmQgcHJvY2Vzc2luZyB0aGUgcHJvdmlkZWQgdGV4dDpcblxuKipEaXZpbmcgaW50byB0aGUgeDg2IEFyY2hpdGVjdHVyZSBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIGRpZyBpbnRvIHRoZSBjb25maWd1cmF0aW9uIHNwZWNpZmljcyBmb3IgeDg2LiBMZXQncyBzdGFydCB3aXRoIGBhcmNoL3g4Ni9LY29uZmlnYCwgcmlnaHQgYXJvdW5kIGxpbmUgNDU5LiBUaGF0IGFyZWEgdXN1YWxseSBob2xkcyBjcml0aWNhbCBjb25maWd1cmF0aW9ucywgYW5kIEkgbmVlZCB0byBzZWUgd2hhdCdzIGJlaW5nIGRlZmluZWQgdGhlcmUuIEknbSBleHBlY3RpbmcgdG8gZmluZCBlaXRoZXIgYSBuZXcgZmVhdHVyZSBnYXRlLCBkZXBlbmRlbmN5IGRldGFpbHMsIG9yIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIHNldC11cC4gSSdsbCBuZWVkIHRvIGtub3cgd2hpY2ggZmVhdHVyZSBnYXRlIHRoaXMgaXMgY29ubmVjdGVkIHRvLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDI4NywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIwOjEwOjIxLjI4MTM1MjI4OFoiLCJTZXEiOjU0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzc4ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NTUsXG4gIFwiTGluZUNvdW50XCI6IDE1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NTU6XFx0XFx0ICBcXHUwMDNjaHR0cDovL3d3dy50bGRwLm9yZy9kb2NzLmh0bWwjaG93dG9cXHUwMDNlLlxcbiA0NTY6XFx0XFxuIDQ1NzpcXHRcXHQgIElmIHlvdSBkb24ndCBrbm93IHdoYXQgdG8gZG8gaGVyZSwgc2F5IE4uXFxuIDQ1ODpcXHRcXG4gNDU5OlxcdGNvbmZpZyBYODZfWDJBUElDXFxuIDQ2MDpcXHRcXHRib29sIFxcXCJ4MkFQSUMgaW50ZXJydXB0IGNvbnRyb2xsZXIgYXJjaGl0ZWN0dXJlIHN1cHBvcnRcXFwiXFxuIDQ2MTpcXHRcXHRkZXBlbmRzIG9uIFg4Nl9MT0NBTF9BUElDIFxcdTAwMjZcXHUwMDI2IFg4Nl82NCBcXHUwMDI2XFx1MDAyNiAoSVJRX1JFTUFQIHx8IEhZUEVSVklTT1JfR1VFU1QpXFxuIDQ2MjpcXHRcXHRkZWZhdWx0IHlcXG4gNDYzOlxcdFxcdGhlbHBcXG4gNDY0OlxcdFxcdCAgeDJBUElDIGlzIGFuIGludGVycnVwdCBjb250cm9sbGVyIGFyY2hpdGVjdHVyZSwgYSBjb21wb25lbnQgb2Ygd2hpY2hcXG4gNDY1OlxcdFxcdCAgKHRoZSBsb2NhbCBBUElDKSBpcyBwcmVzZW50IGluIHRoZSBDUFUuIEl0IGFsbG93cyBmYXN0ZXIgYWNjZXNzIHRvXFxuIDQ2NjpcXHRcXHQgIHRoZSBsb2NhbCBBUElDIGFuZCBzdXBwb3J0cyBhIGxhcmdlciBudW1iZXIgb2YgQ1BVcyBpbiB0aGUgc3lzdGVtXFxuIDQ2NzpcXHRcXHQgIHRoYW4gdGhlIHByZWRlY2Vzc29ycy5cXG4gNDY4OlxcdFxcbiA0Njk6XFx0XFx0ICB4MkFQSUMgd2FzIGludHJvZHVjZWQgaW4gSW50ZWwgQ1BVcyBhcm91bmQgMjAwOCBhbmQgaW4gQU1EIEVQWUMgQ1BVc1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMDoxMDoyMS4yODE1MzE4NjhaIiwiU2VxIjo1NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDgzOTc5MTIzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBYODZfWDJBUElDIE11c2luZ3MqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgWDg2X1gyQVBJQ2AuIEl0IGxvb2tzIGxpa2UgdGhpcyBmZWF0dXJlIGlzIGNvbnRpbmdlbnQgb24gYSBmZXcga2V5IHRoaW5nczogd2UgbmVlZCBgWDg2X0xPQ0FMX0FQSUNgIGVuYWJsZWQsIHdlJ3JlIGRlZmluaXRlbHkgcnVubmluZyBvbiBhbiBgWDg2XzY0YCBhcmNoaXRlY3R1cmUsIGFuZCBlaXRoZXIgdGhlIHN5c3RlbSBoYXMgYElSUV9SRU1BUGAgZW5hYmxlZCBvciBpdCdzIHJ1bm5pbmcgYXMgYSBgSFlQRVJWSVNPUl9HVUVTVGAuIFRoYXQgbWFrZXMgc2Vuc2U7IHRoZSB4MkFQSUMgaXMgYSBtb3JlIG1vZGVybiBpbnRlcnJ1cHQgY29udHJvbGxlciwgYW5kIHRoZXNlIGRlcGVuZGVuY2llcyBlbnN1cmUgYSBzdWl0YWJsZSBoYXJkd2FyZSBhbmQgc29mdHdhcmUgZW52aXJvbm1lbnQgZm9yIGl0IHRvIGZ1bmN0aW9uIGNvcnJlY3RseS4gVGhlIGZhY3QgdGhhdCBgWDg2X1gyQVBJQ2AgaXMgc2V0IHRvIGBkZWZhdWx0IHlgIGlzIGFsc28gaW1wb3J0YW50LCBpdCBtZWFucyB0aGF0IGJ5IGRlZmF1bHQgaXQnbGwgYmUgZW5hYmxlZCBpZiB0aG9zZSBwcmVyZXF1aXNpdGVzIGFyZSBtZXQsIHdoaWNoIGlzIGEgc2Vuc2libGUgYXBwcm9hY2guXG5cbk5vdywgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgaG93IHRoaXMgaW50ZXJhY3RzIHdpdGggYENPTlRJR19BTExPQ2AsIHNpbmNlIGNvbnRpZ3VvdXMgbWVtb3J5IGFsbG9jYXRpb24gY2FuIG9mdGVuIHBsYXkgbmljZWx5IHdpdGggaW50ZXJydXB0IGNvbnRyb2xsZXJzLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhhdCByZWxhdGlvbnNoaXAgYSBiaXQgZnVydGhlciB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBwb3RlbnRpYWwgY29uZmxpY3RzIG9yIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ3NTYsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIwOjEwOjI2LjEyMTMyNzQ5WiIsIlNlcSI6NTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzU5Mjk2MTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDT05USUdfQUxMT0NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz03MDk9Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFX1ZBUklBQkxFXFxuLS1cXG5tbS9LY29uZmlnLTcxOC1cXG5tbS9LY29uZmlnOjcxOTpjb25maWcgQ09OVElHX0FMTE9DXFxubW0vS2NvbmZpZy03MjAtXFx0ZGVmX2Jvb2wgKE1FTU9SWV9JU09MQVRJT04gXFx1MDAyNlxcdTAwMjYgQ09NUEFDVElPTikgfHwgQ01BXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIwOjEwOjI3Ljg4MDYzMDY4N1oiLCJTZXEiOjU3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzUzMzc2NTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgTWVtb3J5IEFsbG9jYXRpb24gU3RyYXRlZ2llcyoqXG5cblJpZ2h0LCBsZXQncyBicmVhayBkb3duIHRoaXMgYENPTlRJR19BTExPQ2AgZGVmaW5pdGlvbi4gSXQgbG9va3MgbGlrZSBpdCBib2lscyBkb3duIHRvIGVpdGhlciB0aGUgY29tYmluYXRpb24gb2YgYE1FTU9SWV9JU09MQVRJT05gIGFuZCBgQ09NUEFDVElPTmAsIGlmIHRoZXkgYXJlIGJvdGggZW5hYmxlZCwgb3IsIGFzIGEgc3RhbmRhbG9uZSBvcHRpb24sIGBDTUFgLiBUaGF0J3MgaW50ZXJlc3Rpbmc7IGl0IGZlZWxzIGxpa2UgdGhleSBhcmUgc3VnZ2VzdGluZyB0aGlzIGZlYXR1cmUgaXMgZGVzaWduZWQgdG8gYWRkcmVzcyBhIG5lZWQsIHByZXN1bWFibHkgZm9yIHBoeXNpY2FsbHkgY29udGlndW91cyBtZW1vcnkuXG5cbkdpdmVuIHRoaXMsIEkgc2hvdWxkIGZvY3VzIG9uIGBDTUFgLCB0aGUgQ29tcGFydG1lbnRhbGl6ZWQgTWVtb3J5IEFsbG9jYXRvci4gSSBzaG91bGQgcmV2aWV3IGl0cyBzcGVjaWZpYyBjaGFyYWN0ZXJpc3RpY3MgdG8gZnVsbHkgdW5kZXJzdGFuZCBob3cgdGhpcyBvcHRpb24gcGxheXMgaW50byBgQ09OVElHX0FMTE9DYCwgc2luY2UgSSBhbHJlYWR5IGhhdmUgYSBmaXJtIGdyYXNwIG9uIGhvdyBNRU1PUllfSVNPTEFUSU9OIGFuZCBDT01QQUNUSU9OIHdvcmssIGFuZCB0aGUgcm9sZSB0aGV5IHBsYXkuIElzIGl0IHRoZSBwcmltYXJ5IG1ldGhvZCB0byBndWFyYW50ZWUgdGhlIGFsbG9jYXRpb24sIG9yIGlzIGl0IGEgbGFzdCByZXNvcnQgd2hlbiB0aGUgb3RoZXIgb3B0aW9ucyBhcmVuJ3QgYXZhaWxhYmxlPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZSBvdGhlciBtZWNoYW5pc21zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTE2NywiT3V0cHV0VG9rZW5zIjoxNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIwOjEwOjMxLjIzNDAwOTQ2NloiLCJTZXEiOjU4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY3MTYzNzg1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ01BXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9kbWEvS2NvbmZpZz0xNzM9Y29uZmlnIERNQV9OVU1BX0NNQVxcbi0tXFxua2VybmVsL2RtYS9LY29uZmlnLTE4NS1cXG5rZXJuZWwvZG1hL0tjb25maWc6MTg2OmNvbmZpZyBDTUFfU0laRV9QRVJOVU1BXFxua2VybmVsL2RtYS9LY29uZmlnLTE4Ny1cXHRib29sIFxcXCJEZWZhdWx0IENNQSBhcmVhIHBlciBOVU1BIG5vZGVcXFwiXFxuLS1cXG5rZXJuZWwvZG1hL0tjb25maWc9MTk2PWNvbW1lbnQgXFxcIkRlZmF1bHQgY29udGlndW91cyBtZW1vcnkgYXJlYSBzaXplOlxcXCJcXG5rZXJuZWwvZG1hL0tjb25maWctMTk3LVxcbmtlcm5lbC9kbWEvS2NvbmZpZzoxOTg6Y29uZmlnIENNQV9TSVpFX01CWVRFU1xcbmtlcm5lbC9kbWEvS2NvbmZpZy0xOTktXFx0aW50IFxcXCJTaXplIGluIE1lZ2EgQnl0ZXNcXFwiXFxuLS1cXG5rZXJuZWwvZG1hL0tjb25maWctMjA4LVxcbmtlcm5lbC9kbWEvS2NvbmZpZzoyMDk6Y29uZmlnIENNQV9TSVpFX1BFUkNFTlRBR0VcXG5rZXJuZWwvZG1hL0tjb25maWctMjEwLVxcdGludCBcXFwiUGVyY2VudGFnZSBvZiB0b3RhbCBtZW1vcnlcXFwiXFxuLS1cXG5rZXJuZWwvZG1hL0tjb25maWc9MjIwPWNob2ljZVxcbi0tXFxua2VybmVsL2RtYS9LY29uZmlnLTIyMy1cXG5rZXJuZWwvZG1hL0tjb25maWc6MjI0OmNvbmZpZyBDTUFfU0laRV9TRUxfTUJZVEVTXFxua2VybmVsL2RtYS9LY29uZmlnLTIyNS1cXHRib29sIFxcXCJVc2UgbWVnYSBieXRlcyB2YWx1ZSBvbmx5XFxcIlxcbmtlcm5lbC9kbWEvS2NvbmZpZy0yMjYtXFxua2VybmVsL2RtYS9LY29uZmlnOjIyNzpjb25maWcgQ01BX1NJWkVfU0VMX1BFUkNFTlRBR0VcXG5rZXJuZWwvZG1hL0tjb25maWctMjI4LVxcdGJvb2wgXFxcIlVzZSBwZXJjZW50YWdlIHZhbHVlIG9ubHlcXFwiXFxua2VybmVsL2RtYS9LY29uZmlnLTIyOS1cXG5rZXJuZWwvZG1hL0tjb25maWc6MjMwOmNvbmZpZyBDTUFfU0laRV9TRUxfTUlOXFxua2VybmVsL2RtYS9LY29uZmlnLTIzMS1cXHRib29sIFxcXCJVc2UgbG93ZXIgdmFsdWUgKG1pbmltdW0pXFxcIlxcbmtlcm5lbC9kbWEvS2NvbmZpZy0yMzItXFxua2VybmVsL2RtYS9LY29uZmlnOjIzMzpjb25maWcgQ01BX1NJWkVfU0VMX01BWFxcbmtlcm5lbC9kbWEvS2NvbmZpZy0yMzQtXFx0Ym9vbCBcXFwiVXNlIGhpZ2hlciB2YWx1ZSAobWF4aW11bSlcXFwiXFxuLS1cXG5rZXJuZWwvZG1hL0tjb25maWc9MjM2PWVuZGNob2ljZVxcbmtlcm5lbC9kbWEvS2NvbmZpZy0yMzctXFxua2VybmVsL2RtYS9LY29uZmlnOjIzODpjb25maWcgQ01BX0FMSUdOTUVOVFxcbmtlcm5lbC9kbWEvS2NvbmZpZy0yMzktXFx0aW50IFxcXCJNYXhpbXVtIFBBR0VfU0laRSBvcmRlciBvZiBhbGlnbm1lbnQgZm9yIGNvbnRpZ3VvdXMgYnVmZmVyc1xcXCJcXG4tLVxcbm1tL0tjb25maWc9MTA2ND1jb25maWcgSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUFcXG4tLVxcbm1tL0tjb25maWctMTA2Ni1cXG5tbS9LY29uZmlnOjEwNjc6Y29uZmlnIENNQVxcbm1tL0tjb25maWctMTA2OC1cXHRib29sIFxcXCJDb250aWd1b3VzIE1lbW9yeSBBbGxvY2F0b3JcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTEwODEtXFxubW0vS2NvbmZpZzoxMDgyOmNvbmZpZyBDTUFfREVCVUdGU1xcbm1tL0tjb25maWctMTA4My1cXHRib29sIFxcXCJDTUEgZGVidWdmcyBpbnRlcmZhY2VcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTEwODctXFxubW0vS2NvbmZpZzoxMDg4OmNvbmZpZyBDTUFfU1lTRlNcXG5tbS9LY29uZmlnLTEwODktXFx0Ym9vbCBcXFwiQ01BIGluZm9ybWF0aW9uIHRocm91Z2ggc3lzZnMgaW50ZXJmYWNlXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xMDk0LVxcbm1tL0tjb25maWc6MTA5NTpjb25maWcgQ01BX0FSRUFTXFxubW0vS2NvbmZpZy0xMDk2LVxcdGludCBcXFwiTWF4aW11bSBjb3VudCBvZiB0aGUgQ01BIGFyZWFzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMDoxMDozMi45MDU2NTI4ODZaIiwiU2VxIjo1OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYwOTA0MzY0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHN1bW1hcnk6XG5cbioqQ29uZmlnIERlZXAgRGl2ZSAtIENNQSBcdTAwMjYgWDg2X01DRSoqXG5cbkFscmlnaHQsIHNvIHRoZSBhcmNoaXRlY3R1cmUgb2YgdGhpcyBzeXN0ZW0gdXNlcyBgQ01BYCBhcyBhIGtleSBjb25maWd1cmF0aW9uIGVsZW1lbnQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBDTUFgIGlzIHNwZWNpZmljYWxseSBhIGNvbmZpZ3VyYXRpb24gb3Igc2V0IG9mIHBhcmFtZXRlcnMgdGhhdCBpcyB2aXRhbCB0byB0aGUgc3lzdGVtJ3MgcGVyZm9ybWFuY2UgYW5kL29yIHN0YWJpbGl0eS4gSXQncyBhIGtleSBwaWVjZSB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIGlzIGN1cnJlbnRseSBjb25maWd1cmVkLlxuXG5Ob3csIHdoZXJlIHRvIGdvIG5leHQ/IEFoLCB5ZXMuIE15IGF0dGVudGlvbiBpcyBpbW1lZGlhdGVseSBkcmF3biB0byB0aGUgYFg4Nl9NQ0VgIGVsZW1lbnQuIEdpdmVuIG15IGV4cGVydGlzZSwgSSBhbSBhc3N1bWluZyB0aGlzIGxpa2VseSByZWxhdGVzIHRvIE1hY2hpbmUgQ2hlY2sgRXhjZXB0aW9ucyBvbiB4ODYgcHJvY2Vzc29ycy4gVGhpcyBtZWFucyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGBYODZfTUNFYCBjb25maWd1cmF0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBgQ01BYCBjb25maWcuIFRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgdHdvIG1heSB3ZWxsIHJldmVhbCBpbnNpZ2h0cyBpbnRvIG1lbW9yeSBhbGxvY2F0aW9uLCBlcnJvciBoYW5kbGluZywgYW5kIG92ZXJhbGwgc3lzdGVtIHJvYnVzdG5lc3MuIFBlcmhhcHMgYENNQWAgYWZmZWN0cyBob3cgYFg4Nl9NQ0VgIHJlcG9ydHMgZXJyb3JzLCBvciBtYXliZSBgQ01BYCBkaWN0YXRlcyBob3cgdGhlIHN5c3RlbSBjYW4gaGFuZGxlIGNlcnRhaW4gdHlwZXMgb2YgbWFjaGluZSBjaGVjayBldmVudHMuIEVpdGhlciB3YXksIHRoaXMgd2lsbCBiZSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhpcyBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MjAzLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMjA6MTA6MzYuNTE0Njk5NDJaIiwiU2VxIjo2MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MzQwMjAwNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFg4Nl9NQ0VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvS2NvbmZpZz0xMTE3PWNvbmZpZyBYODZfUkVST1VURV9GT1JfQlJPS0VOX0JPT1RfSVJRU1xcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy0xMTM5LVxcbmFyY2gveDg2L0tjb25maWc6MTE0MDpjb25maWcgWDg2X01DRVxcbmFyY2gveDg2L0tjb25maWctMTE0MS1cXHRib29sIFxcXCJNYWNoaW5lIENoZWNrIC8gb3ZlcmhlYXRpbmcgcmVwb3J0aW5nXFxcIlxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy0xMTQ5LVxcbmFyY2gveDg2L0tjb25maWc6MTE1MDpjb25maWcgWDg2X01DRUxPR19MRUdBQ1lcXG5hcmNoL3g4Ni9LY29uZmlnLTExNTEtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgZGVwcmVjYXRlZCAvZGV2L21jZWxvZyBjaGFyYWN0ZXIgZGV2aWNlXFxcIlxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy0xMTU3LVxcbmFyY2gveDg2L0tjb25maWc6MTE1ODpjb25maWcgWDg2X01DRV9JTlRFTFxcbmFyY2gveDg2L0tjb25maWctMTE1OS1cXHRkZWZfYm9vbCB5XFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnLTExNjUtXFxuYXJjaC94ODYvS2NvbmZpZzoxMTY2OmNvbmZpZyBYODZfTUNFX0FNRFxcbmFyY2gveDg2L0tjb25maWctMTE2Ny1cXHRkZWZfYm9vbCB5XFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnPTExNzQ9Y29uZmlnIFg4Nl9BTkNJRU5UX01DRVxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy0xMTgxLVxcbmFyY2gveDg2L0tjb25maWc6MTE4Mjpjb25maWcgWDg2X01DRV9USFJFU0hPTERcXG5hcmNoL3g4Ni9LY29uZmlnLTExODMtXFx0ZGVwZW5kcyBvbiBYODZfTUNFX0FNRCB8fCBYODZfTUNFX0lOVEVMXFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnLTExODUtXFxuYXJjaC94ODYvS2NvbmZpZzoxMTg2OmNvbmZpZyBYODZfTUNFX0lOSkVDVFxcbmFyY2gveDg2L0tjb25maWctMTE4Ny1cXHRkZXBlbmRzIG9uIFg4Nl9NQ0UgXFx1MDAyNlxcdTAwMjYgWDg2X0xPQ0FMX0FQSUMgXFx1MDAyNlxcdTAwMjYgREVCVUdfRlNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMjA6MTA6MzguMTQ4NzI3MDhaIiwiU2VxIjo2MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM2NjYwOTk5NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS1ZNIHg4NiBPcGVyYXRpb24gQW5hbHlzaXMgZm9yIEVtdWxhdGlvbiBhbmQgSW5pdGlhbGl6YXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJ20gY29uZmlybWluZyB0aGF0IGBYODZfTUNFYCBpcyBhIGNvbmZpZy4gVGhlbiBJIHNlZSB0aGUgcmVsZXZhbnQgS1ZNIGNvbmZpZ3VyYXRpb25zIHRoYXQgd2lsbCBiZSBlbmFibGVkOiBgS1ZNYCwgYEtWTV9JTlRFTGAsIGBLVk1fQU1EYCwgYEtWTV9TTU1gLCBgS1ZNX0FNRF9TRVZgLCBgS1ZNX0lOVEVMX1REWGAsIGBJTlRFTF9URFhfSE9TVGAsIGBDUllQVE9fREVWX1NQX1BTUGAsIGBDUllQVE9fREVWX0NDUF9ERGAsIGBBTURfSU9NTVVgLCBgWDg2X1gyQVBJQ2AsIGBDTUFgLCBhbmQgYFg4Nl9NQ0VgLiBUaGVzZSBzZWVtIHN0YW5kYXJkLlxuXG5Ob3csIEknbSBmb2N1c2luZyBvbiBrZXkgc3ltYm9scyByZWxhdGVkIHRvIGVtdWxhdGlvbiByZXF1aXJlbWVudHMgYW5kIHZDUFUgaW5pdGlhbGl6YXRpb246IGBlbXVsYXRvcl9sZWF2ZV9zbW1gLCBgdm14X3VuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWRgLCBgdGR4X3ZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb25gLCBhbmQgYHNldl92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uYC4gVGhlc2UgZnVuY3Rpb25zIGFyZSBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyBLVk0gaGFuZGxlcyBzaXR1YXRpb25zIGxpa2UgU01NIGV4aXRzIGFuZCBndWVzdCBzdGF0ZSBpc3N1ZXMuXG5cbkknbSBkb3VibGUtY2hlY2tpbmcgdGhlc2UgYXJlIG5vbi1zdGF0aWMgZnVuY3Rpb25zLCBhbmQgdGh1cyBleHBvc2VkLiBJIGNvbmZpcm1lZCB0aGV5IGFyZSBpbmRlZWQgZXhwb3NlZC4gVGhlIGZvY3VzIGlzIHRvIGFkZHJlc3MgdGhlIG5ldyBLVk0geDg2IG9wZXJhdGlvbiBgdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZGAgYW5kIHJlbmFtZWQgdkNQVSBmdW5jdGlvbiBgdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbmAsIHRoYXQgdGhpcyBjaGFuZ2UgbW9kaWZpZXMgdGhlIEtWTSdzIGJlaGF2aW9yLiBTcGVjaWZpY2FsbHksIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gaW52b2x2ZSBoYW5kbGluZyBpbnZhbGlkIGd1ZXN0IHN0YXRlcyBhbmQgZW11bGF0aW9uIGZhaWx1cmVzLCB3aGljaCBpcyBzaWduaWZpY2FudCwgZXNwZWNpYWxseSB3aGVuIHJldHVybmluZyBmcm9tIFN5c3RlbSBNYW5hZ2VtZW50IE1vZGUuIFRoaXMgY2hhbmdlIGlzIGZ1bmN0aW9uYWwgYW5kIHNob3VsZCBiZSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlxuXG5JIHZlcmlmaWVkIHRoZSBmdW5jdGlvbiBgZW11bGF0b3JfbGVhdmVfc21tYCBpcyBub24tc3RhdGljIGluIGBhcmNoL3g4Ni9rdm0vc21tLmNgIGFuZCBpcyBleHBvcnRlZCBpbiBgYXJjaC94ODYva3ZtL3NtbS5oYC4gSSBjaGVja2VkIGFuZCBjb25maXJtZWQgdGhhdCB0aGUgZnVuY3Rpb25zIGB2bXhfdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZGAsIGB0ZHhfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbmAsIGFuZCBgc2V2X3ZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb25gIGFyZSBhbHNvIG5vbi1zdGF0aWMuIEVhY2ggb2YgdGhlc2UgY2hlY2tzIHByb3ZpZGVzIHRoZSByZXF1aXJlZCBjb250ZXh0IGZvciB0aGUgY2hhbmdlLCBhbmQgY29uZmlybSB0aGVzZSBub24tc3RhdGljIGZ1bmN0aW9ucyBhcmUgZXhwb3J0ZWQgaW4gdGhlaXIgcmVzcGVjdGl2ZSBmaWxlcy4gRXZlcnl0aGluZyBjaGVja3Mgb3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjk4MywiT3V0cHV0VG9rZW5zIjoyODIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTk4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIwOjEwOjUxLjgxNDgzMTE4MVoiLCJTZXEiOjYyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyODcxMjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9JTlRFTFwiLFxuICAgIFwiS1ZNX0FNRFwiLFxuICAgIFwiS1ZNX1NNTVwiLFxuICAgIFwiS1ZNX0FNRF9TRVZcIixcbiAgICBcIktWTV9JTlRFTF9URFhcIixcbiAgICBcIklOVEVMX1REWF9IT1NUXCIsXG4gICAgXCJDUllQVE9fREVWX1NQX1BTUFwiLFxuICAgIFwiQ1JZUFRPX0RFVl9DQ1BfRERcIixcbiAgICBcIkFNRF9JT01NVVwiLFxuICAgIFwiWDg2X1gyQVBJQ1wiLFxuICAgIFwiQ01BXCIsXG4gICAgXCJYODZfTUNFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZW11bGF0b3JfbGVhdmVfc21tXCIsXG4gICAgXCJ2bXhfdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZFwiLFxuICAgIFwidGR4X3ZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb25cIixcbiAgICBcInNldl92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBLVk0geDg2IG9wZXJhdGlvbiBgdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZGAgYW5kIHJlbmFtZXMgYHZjcHVfcHJlX3J1bmAgdG8gYHZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb25gLiBJdCBtb2RpZmllcyBob3cgS1ZNIGhhbmRsZXMgaW52YWxpZCBndWVzdCBzdGF0ZXMgYW5kIGVtdWxhdGlvbiBmYWlsdXJlcywgcGFydGljdWxhcmx5IHdoZW4gcmV0dXJuaW5nIGZyb20gU3lzdGVtIE1hbmFnZW1lbnQgTW9kZSAoU01NKSB2aWEgUlNNLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgS1ZNIHg4NiBsb2dpYyBhbmQgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9JTlRFTFwiLFxuICAgIFwiS1ZNX0FNRFwiLFxuICAgIFwiS1ZNX1NNTVwiLFxuICAgIFwiS1ZNX0FNRF9TRVZcIixcbiAgICBcIktWTV9JTlRFTF9URFhcIixcbiAgICBcIklOVEVMX1REWF9IT1NUXCIsXG4gICAgXCJDUllQVE9fREVWX1NQX1BTUFwiLFxuICAgIFwiQ1JZUFRPX0RFVl9DQ1BfRERcIixcbiAgICBcIkFNRF9JT01NVVwiLFxuICAgIFwiWDg2X1gyQVBJQ1wiLFxuICAgIFwiQ01BXCIsXG4gICAgXCJYODZfTUNFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZW11bGF0b3JfbGVhdmVfc21tXCIsXG4gICAgXCJ2bXhfdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZFwiLFxuICAgIFwidGR4X3ZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb25cIixcbiAgICBcInNldl92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBLVk0geDg2IG9wZXJhdGlvbiBgdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZGAgYW5kIHJlbmFtZXMgYHZjcHVfcHJlX3J1bmAgdG8gYHZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb25gLiBJdCBtb2RpZmllcyBob3cgS1ZNIGhhbmRsZXMgaW52YWxpZCBndWVzdCBzdGF0ZXMgYW5kIGVtdWxhdGlvbiBmYWlsdXJlcywgcGFydGljdWxhcmx5IHdoZW4gcmV0dXJuaW5nIGZyb20gU3lzdGVtIE1hbmFnZW1lbnQgTW9kZSAoU01NKSB2aWEgUlNNLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgS1ZNIHg4NiBsb2dpYyBhbmQgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow9v2k9[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-28 19:43:51 +0000 UTC FinishedAt: 2026-07-28 20:10:53 +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": "567329869b9c75c9d3df74b35fe10af9b51c479d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL", "KVM_AMD", "KVM_SMM", "KVM_AMD_SEV", "KVM_INTEL_TDX", "INTEL_TDX_HOST", "CRYPTO_DEV_SP_PSP", "CRYPTO_DEV_CCP_DD", "AMD_IOMMU", "X86_X2APIC", "CMA", "X86_MCE" ], "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": "567329869b9c75c9d3df74b35fe10af9b51c479d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL", "KVM_AMD", "KVM_SMM", "KVM_AMD_SEV", "KVM_INTEL_TDX", "INTEL_TDX_HOST", "CRYPTO_DEV_SP_PSP", "CRYPTO_DEV_CCP_DD", "AMD_IOMMU", "X86_X2APIC", "CMA", "X86_MCE" ], "series_id": "137ee874-a8bb-4c16-87c2-d2afeb16e49f" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "emulator_leave_smm", "vmx_unhandleable_emulation_required", "tdx_vcpu_needs_initialization", "sev_vcpu_needs_initialization" ], "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+CgkJCTx0ZD4yMDI2LzA3LzI4IDIwOjA4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OywKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7LAogICAgJiMzNDtLVk1fU01NJiMzNDssCiAgICAmIzM0O0tWTV9BTURfU0VWJiMzNDssCiAgICAmIzM0O0tWTV9JTlRFTF9URFgmIzM0OywKICAgICYjMzQ7SU5URUxfVERYX0hPU1QmIzM0OywKICAgICYjMzQ7Q1JZUFRPX0RFVl9TUF9QU1AmIzM0OywKICAgICYjMzQ7Q1JZUFRPX0RFVl9DQ1BfREQmIzM0OywKICAgICYjMzQ7QU1EX0lPTU1VJiMzNDssCiAgICAmIzM0O1g4Nl9YMkFQSUMmIzM0OywKICAgICYjMzQ7Q01BJiMzNDssCiAgICAmIzM0O1g4Nl9NQ0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtlbXVsYXRvcl9sZWF2ZV9zbW0mIzM0OywKICAgICYjMzQ7dm14X3VuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQmIzM0OywKICAgICYjMzQ7dGR4X3ZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24mIzM0OywKICAgICYjMzQ7c2V2X3ZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBLVk0geDg2IG9wZXJhdGlvbiBgdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZGAgYW5kIHJlbmFtZXMgYHZjcHVfcHJlX3J1bmAgdG8gYHZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb25gLiBJdCBtb2RpZmllcyBob3cgS1ZNIGhhbmRsZXMgaW52YWxpZCBndWVzdCBzdGF0ZXMgYW5kIGVtdWxhdGlvbiBmYWlsdXJlcywgcGFydGljdWxhcmx5IHdoZW4gcmV0dXJuaW5nIGZyb20gU3lzdGVtIE1hbmFnZW1lbnQgTW9kZSAoU01NKSB2aWEgUlNNLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgS1ZNIHg4NiBsb2dpYyBhbmQgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMDowODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGIyNjAxNzAwMjY4ODIwNWVhN2YzMjk3NTRlNzVjZTYwM2ZlMzM1ZWJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1bCAyOCAyMDowODoxMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaFxuaW5kZXggNWNiMTMyZWNhM2MzNS4uZTIxM2M5YWUzZTMwMSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmhcbkBAIC02MywxMSAmIzQzOzYzLDEyIEBAIEtWTV9YODZfT1BfT1BUSU9OQUwoZmx1c2hfcmVtb3RlX3RsYnNfcmFuZ2UpXG4gI2VuZGlmXG4gS1ZNX1g4Nl9PUChmbHVzaF90bGJfZ3ZhKVxuIEtWTV9YODZfT1AoZmx1c2hfdGxiX2d1ZXN0KVxuLUtWTV9YODZfT1AodmNwdV9wcmVfcnVuKVxuJiM0MztLVk1fWDg2X09QX09QVElPTkFMX1JFVDAodmNwdV9uZWVkc19pbml0aWFsaXphdGlvbilcbiBLVk1fWDg2X09QKHZjcHVfcnVuKVxuIEtWTV9YODZfT1AoaGFuZGxlX2V4aXQpXG4gS1ZNX1g4Nl9PUChza2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKVxuIEtWTV9YODZfT1BfT1BUSU9OQUwodXBkYXRlX2VtdWxhdGVkX2luc3RydWN0aW9uKVxuJiM0MztLVk1fWDg2X09QX09QVElPTkFMX1JFVDAodW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZClcbiBLVk1fWDg2X09QKHNldF9pbnRlcnJ1cHRfc2hhZG93KVxuIEtWTV9YODZfT1AoZ2V0X2ludGVycnVwdF9zaGFkb3cpXG4gS1ZNX1g4Nl9PUChwYXRjaF9oeXBlcmNhbGwpXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbmluZGV4IDdhMjU4ODMxNjE2ZmEuLjI4Mzg0NzYxOWZmODggMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5AQCAtMTU4NiwxMyAmIzQzOzE1ODYsMTUgQEAgc3RydWN0IGt2bV94ODZfb3BzIHtcbiBcdCAqL1xuIFx0dm9pZCAoKmZsdXNoX3RsYl9ndWVzdCkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBcbi1cdGludCAoKnZjcHVfcHJlX3J1bikoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiYjNDM7XHRib29sICgqdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbikoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBcdGVudW0gZXhpdF9mYXN0cGF0aF9jb21wbGV0aW9uICgqdmNwdV9ydW4pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdFx0XHRcdFx0XHQgIHU2NCBydW5fZmxhZ3MpO1xuIFx0aW50ICgqaGFuZGxlX2V4aXQpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdFx0ZW51bSBleGl0X2Zhc3RwYXRoX2NvbXBsZXRpb24gZXhpdF9mYXN0cGF0aCk7XG4gXHRpbnQgKCpza2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIFx0dm9pZCAoKnVwZGF0ZV9lbXVsYXRlZF9pbnN0cnVjdGlvbikoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiYjNDM7XHRib29sICgqdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZCkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiYjNDM7XG4gXHR2b2lkICgqc2V0X2ludGVycnVwdF9zaGFkb3cpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IG1hc2spO1xuIFx0dTMyICgqZ2V0X2ludGVycnVwdF9zaGFkb3cpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gXHR2b2lkICgqcGF0Y2hfaHlwZXJjYWxsKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3NtbS5jIGIvYXJjaC94ODYva3ZtL3NtbS5jXG5pbmRleCBhNDQ2NDg3YmRkNWNmLi42NTZhMzhkYWQ3ZTdhIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3NtbS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vc21tLmNcbkBAIC02NDksNiAmIzQzOzY0OSwxMCBAQCBpbnQgZW11bGF0b3JfbGVhdmVfc21tKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KVxuICNlbmRpZlxuIFx0XHRyZXQgPSByc21fbG9hZF9zdGF0ZV8zMihjdHh0LCBcdTAwMjZzbXJhbS5zbXJhbTMyKTtcbiBcbiYjNDM7XHRpZiAocmV0ID09IFg4NkVNVUxfQ09OVElOVUUgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIGt2bV94ODZfY2FsbCh1bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKSh2Y3B1KSlcbiYjNDM7XHRcdHJldCA9IFg4NkVNVUxfVU5IQU5ETEVBQkxFO1xuJiM0MztcbiBcdC8qXG4gXHQgKiBJZiBSU00gZmFpbHMgYW5kIHRyaWdnZXJzIHNodXRkb3duLCBhcmNoaXRlY3R1cmFsbHkgdGhlIHNodXRkb3duXG4gXHQgKiBvY2N1cnMgKmJlZm9yZSogdGhlIHRyYW5zaXRpb24gdG8gZ3Vlc3QgbW9kZS4gIEJ1dCBkdWUgdG8gS1ZNJiMzOTtzXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuYyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcbmluZGV4IDkwYTA4ZDM2ZDg0M2QuLmZjYjQxZGZkZTRjMDIgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXG5AQCAtMzU1Niw2ICYjNDM7MzU1NiwxMSBAQCB2b2lkIHNldl9mcmVlX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0X19zZXZfZXNfdW5tYXBfZ2hjYihzdm0pO1xuIH1cbiBcbiYjNDM7Ym9vbCBzZXZfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gdG9fa3ZtX3Nldl9pbmZvKHZjcHUtXHUwMDNla3ZtKS1cdTAwM2VuZWVkX2luaXQ7XG4mIzQzO31cbiYjNDM7XG4gaW50IHByZV9zZXZfcnVuKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBpbnQgY3B1KVxuIHtcbiBcdHN0cnVjdCBzdm1fY3B1X2RhdGEgKnNkID0gcGVyX2NwdV9wdHIoXHUwMDI2c3ZtX2RhdGEsIGNwdSk7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uYyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmNcbmluZGV4IGQ2OGNiYTEyYzc3MmIuLmJjY2NhOWM1Yjk2NjcgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXG5AQCAtNDQwMiwxNiAmIzQzOzQ0MDIsNiBAQCBzdGF0aWMgdm9pZCBzdm1fY2FuY2VsX2luamVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRzdm1fY29tcGxldGVfaW50ZXJydXB0cyh2Y3B1KTtcbiB9XG4gXG4tc3RhdGljIGludCBzdm1fdmNwdV9wcmVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi17XG4tI2lmZGVmIENPTkZJR19LVk1fQU1EX1NFVlxuLVx0aWYgKHRvX2t2bV9zZXZfaW5mbyh2Y3B1LVx1MDAzZWt2bSktXHUwMDNlbmVlZF9pbml0KVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0jZW5kaWZcbi1cbi1cdHJldHVybiAxO1xuLX1cbi1cbiBzdGF0aWMgZmFzdHBhdGhfdCBzdm1fZXhpdF9oYW5kbGVyc19mYXN0cGF0aChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0c3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7XG5AQCAtNTM4OCw3ICYjNDM7NTM3OCw2IEBAIHN0cnVjdCBrdm1feDg2X29wcyBzdm1feDg2X29wcyBfX2luaXRkYXRhID0ge1xuIFx0LmZsdXNoX3RsYl9ndmEgPSBzdm1fZmx1c2hfdGxiX2d2YSxcbiBcdC5mbHVzaF90bGJfZ3Vlc3QgPSBzdm1fZmx1c2hfdGxiX2d1ZXN0LFxuIFxuLVx0LnZjcHVfcHJlX3J1biA9IHN2bV92Y3B1X3ByZV9ydW4sXG4gXHQudmNwdV9ydW4gPSBzdm1fdmNwdV9ydW4sXG4gXHQuaGFuZGxlX2V4aXQgPSBzdm1faGFuZGxlX2V4aXQsXG4gXHQuc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbiA9IHN2bV9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uLFxuQEAgLTU0NDYsNiAmIzQzOzU0MzUsNyBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMgc3ZtX3g4Nl9vcHMgX19pbml0ZGF0YSA9IHtcbiAjZW5kaWZcbiBcbiAjaWZkZWYgQ09ORklHX0tWTV9BTURfU0VWXG4mIzQzO1x0LnZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24gPSBzZXZfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbixcbiBcdC5kZXZfZ2V0X2F0dHIgPSBzZXZfZGV2X2dldF9hdHRyLFxuIFx0Lm1lbV9lbmNfaW9jdGwgPSBzZXZfbWVtX2VuY19pb2N0bCxcbiBcdC5tZW1fZW5jX3JlZ2lzdGVyX3JlZ2lvbiA9IHNldl9tZW1fZW5jX3JlZ2lzdGVyX3JlZ2lvbixcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uaFxuaW5kZXggYTMyN2JmNzUxZWNkNS4uNjZiNDRiNTQ2MDhlOCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmhcbkBAIC05NzksNiAmIzQzOzk3OSw3IEBAIHZvaWQgc2V2X2VzX3ByZXBhcmVfc3dpdGNoX3RvX2d1ZXN0KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBzdHJ1Y3Qgc2V2X2VzX3NhdmVfYXJlXG4gdm9pZCBzZXZfZXNfdW5tYXBfZ2hjYihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSk7XG4gXG4gI2lmZGVmIENPTkZJR19LVk1fQU1EX1NFVlxuJiM0Mztib29sIHNldl92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gaW50IHNldl9tZW1fZW5jX2lvY3RsKHN0cnVjdCBrdm0gKmt2bSwgdm9pZCBfX3VzZXIgKmFyZ3ApO1xuIGludCBzZXZfbWVtX2VuY19yZWdpc3Rlcl9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxuIFx0XHRcdFx0c3RydWN0IGt2bV9lbmNfcmVnaW9uICpyYW5nZSk7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9tYWluLmMgYi9hcmNoL3g4Ni9rdm0vdm14L21haW4uY1xuaW5kZXggMDRmOTg2ZTNkNDM5YS4uMGZmMzIzMGZkOTVlOCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L21haW4uY1xuQEAgLTE0MCwxMiAmIzQzOzE0MCwxMCBAQCBzdGF0aWMgdm9pZCB2dF92Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHR2bXhfdmNwdV9wdXQodmNwdSk7XG4gfVxuIFxuLXN0YXRpYyBpbnQgdnRfdmNwdV9wcmVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiYjNDM7c3RhdGljIGJvb2wgdnRfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuLVx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXG4tXHRcdHJldHVybiB0ZHhfdmNwdV9wcmVfcnVuKHZjcHUpO1xuLVxuLVx0cmV0dXJuIHZteF92Y3B1X3ByZV9ydW4odmNwdSk7XG4mIzQzO1x0cmV0dXJuIGlzX3RkX3ZjcHUodmNwdSkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICAgIHRkeF92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uKHZjcHUpO1xuIH1cbiBcbiBzdGF0aWMgZmFzdHBhdGhfdCB2dF92Y3B1X3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBydW5fZmxhZ3MpXG5AQCAtMTY1LDYgJiM0MzsxNjMsMTYgQEAgc3RhdGljIGludCB2dF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHRyZXR1cm4gdm14X2hhbmRsZV9leGl0KHZjcHUsIGZhc3RwYXRoKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBib29sIHZ0X3VuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGlzX3RkX3ZjcHUodmNwdSkpIHtcbiYjNDM7XHRcdFdBUk5fT05fT05DRSh0b192dCh2Y3B1KS1cdTAwM2VlbXVsYXRpb25fcmVxdWlyZWQpO1xuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHZteF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKHZjcHUpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgdnRfc2V0X21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBtc3JfZGF0YSAqbXNyX2luZm8pXG4ge1xuIFx0aWYgKHVubGlrZWx5KGlzX3RkX3ZjcHUodmNwdSkpKVxuQEAgLTkzOSwxMSAmIzQzOzk0NywxMiBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMgdnRfeDg2X29wcyBfX2luaXRkYXRhID0ge1xuIFx0LmZsdXNoX3RsYl9ndmEgPSB2dF9vcChmbHVzaF90bGJfZ3ZhKSxcbiBcdC5mbHVzaF90bGJfZ3Vlc3QgPSB2dF9vcChmbHVzaF90bGJfZ3Vlc3QpLFxuIFxuLVx0LnZjcHVfcHJlX3J1biA9IHZ0X29wKHZjcHVfcHJlX3J1biksXG4mIzQzO1x0LnZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24gPSB2dF9vcF90ZHhfb25seSh2Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uKSxcbiBcdC52Y3B1X3J1biA9IHZ0X29wKHZjcHVfcnVuKSxcbiBcdC5oYW5kbGVfZXhpdCA9IHZ0X29wKGhhbmRsZV9leGl0KSxcbiBcdC5za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uID0gdm14X3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24sXG4gXHQudXBkYXRlX2VtdWxhdGVkX2luc3RydWN0aW9uID0gdm14X3VwZGF0ZV9lbXVsYXRlZF9pbnN0cnVjdGlvbixcbiYjNDM7XHQudW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZCA9IHZ0X29wKHVuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQpLFxuIFx0LnNldF9pbnRlcnJ1cHRfc2hhZG93ID0gdnRfb3Aoc2V0X2ludGVycnVwdF9zaGFkb3cpLFxuIFx0LmdldF9pbnRlcnJ1cHRfc2hhZG93ID0gdnRfb3AoZ2V0X2ludGVycnVwdF9zaGFkb3cpLFxuIFx0LnBhdGNoX2h5cGVyY2FsbCA9IHZ0X29wKHBhdGNoX2h5cGVyY2FsbCksXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC90ZHguYyBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcbmluZGV4IGQxYWYwYTc1MmU5N2UuLmIyNzJjMjA1ODZhNzQgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXG5AQCAtODk3LDEzICYjNDM7ODk3LDEwIEBAIHZvaWQgdGR4X3ZjcHVfZnJlZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHR0ZHgtXHUwMDNlc3RhdGUgPSBWQ1BVX1REX1NUQVRFX1VOSU5JVElBTElaRUQ7XG4gfVxuIFxuLWludCB0ZHhfdmNwdV9wcmVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiYjNDM7Ym9vbCB0ZHhfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuLVx0aWYgKHVubGlrZWx5KHRvX3RkeCh2Y3B1KS1cdTAwM2VzdGF0ZSAhPSBWQ1BVX1REX1NUQVRFX0lOSVRJQUxJWkVEIHx8XG4tXHRcdCAgICAgdG9fa3ZtX3RkeCh2Y3B1LVx1MDAzZWt2bSktXHUwMDNlc3RhdGUgIT0gVERfU1RBVEVfUlVOTkFCTEUpKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cbi1cdHJldHVybiAxO1xuJiM0MztcdHJldHVybiB0b190ZHgodmNwdSktXHUwMDNlc3RhdGUgIT0gVkNQVV9URF9TVEFURV9JTklUSUFMSVpFRCB8fFxuJiM0MztcdCAgICAgICB0b19rdm1fdGR4KHZjcHUtXHUwMDNla3ZtKS1cdTAwM2VzdGF0ZSAhPSBURF9TVEFURV9SVU5OQUJMRTtcbiB9XG4gXG4gc3RhdGljIF9fYWx3YXlzX2lubGluZSB1MzIgdGRjYWxsX3RvX3ZteF9leGl0X3JlYXNvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC92bXguYyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmNcbmluZGV4IGU0YjlhYzdmZWQ5ZjAuLjc2MTYwYWRmODI5NzAgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXG5AQCAtNjAzNSw3ICYjNDM7NjAzNSw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX25taV93aW5kb3coc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuICAqIHdpdGggdW5zcmVzdHJpY3RlZCBndWVzdCBtb2RlIGRpc2FibGVkKSBhbmQgS1ZNIGNhbiYjMzk7dCBmYWl0aGZ1bGx5IGVtdWxhdGUgdGhlXG4gICogY3VycmVudCB2Q1BVIHN0YXRlLlxuICAqL1xuLXN0YXRpYyBib29sIHZteF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiYjNDM7Ym9vbCB2bXhfdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0c3RydWN0IHZjcHVfdm14ICp2bXggPSB0b192bXgodmNwdSk7XG4gXG5AQCAtNjExMCwxNiAmIzQzOzYxMTAsNiBAQCBzdGF0aWMgaW50IGhhbmRsZV9pbnZhbGlkX2d1ZXN0X3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdHJldHVybiAxO1xuIH1cbiBcbi1pbnQgdm14X3ZjcHVfcHJlX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4te1xuLVx0aWYgKHZteF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKHZjcHUpKSB7XG4tXHRcdGt2bV9wcmVwYXJlX2VtdWxhdGlvbl9mYWlsdXJlX2V4aXQodmNwdSk7XG4tXHRcdHJldHVybiAwO1xuLVx0fVxuLVxuLVx0cmV0dXJuIDE7XG4tfVxuLVxuIC8qXG4gICogSW5kaWNhdGUgYSBidXN5LXdhaXRpbmcgdmNwdSBpbiBzcGlubG9jay4gV2UgZG8gbm90IGVuYWJsZSB0aGUgUEFVU0VcbiAgKiBleGl0aW5nLCBzbyBvbmx5IGdldCBoZXJlIG9uIGNwdSB3aXRoIFBBVVNFLUxvb3AtRXhpdGluZy5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaCBiL2FyY2gveDg2L2t2bS92bXgveDg2X29wcy5oXG5pbmRleCA0MDk4NTgwNzQyNDYyLi5jZGIzOGQ5NDBjZmI3IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgveDg2X29wcy5oXG5AQCAtMjEsNyAmIzQzOzIxLDYgQEAgaW50IHZteF92bV9pbml0KHN0cnVjdCBrdm0gKmt2bSk7XG4gdm9pZCB2bXhfdm1fZGVzdHJveShzdHJ1Y3Qga3ZtICprdm0pO1xuIGludCB2bXhfdmNwdV9wcmVjcmVhdGUoc3RydWN0IGt2bSAqa3ZtKTtcbiBpbnQgdm14X3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4taW50IHZteF92Y3B1X3ByZV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBmYXN0cGF0aF90IHZteF92Y3B1X3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBydW5fZmxhZ3MpO1xuIHZvaWQgdm14X3ZjcHVfZnJlZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIHZvaWQgdm14X3ZjcHVfcmVzZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGluaXRfZXZlbnQpO1xuQEAgLTMxLDYgJiM0MzszMCw3IEBAIGludCB2bXhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGV4aXRfZmFzdHBhdGgpO1xuIHZvaWQgdm14X2hhbmRsZV9leGl0X2lycW9mZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIGludCB2bXhfc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIHZvaWQgdm14X3VwZGF0ZV9lbXVsYXRlZF9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuJiM0Mztib29sIHZteF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gaW50IHZteF9zZXRfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IG1zcl9kYXRhICptc3JfaW5mbyk7XG4gI2lmZGVmIENPTkZJR19LVk1fU01NXG4gaW50IHZteF9zbWlfYWxsb3dlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgZm9yX2luamVjdGlvbik7XG5AQCAtMTM3LDcgJiM0MzsxMzcsNyBAQCBpbnQgdGR4X3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gdm9pZCB0ZHhfdmNwdV9yZXNldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaW5pdF9ldmVudCk7XG4gdm9pZCB0ZHhfdmNwdV9mcmVlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gdm9pZCB0ZHhfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSk7XG4taW50IHRkeF92Y3B1X3ByZV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiYjNDM7Ym9vbCB0ZHhfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIGZhc3RwYXRoX3QgdGR4X3ZjcHVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHJ1bl9mbGFncyk7XG4gdm9pZCB0ZHhfcHJlcGFyZV9zd2l0Y2hfdG9fZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiB2b2lkIHRkeF92Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuY1xuaW5kZXggMGYxYTgyOTAzMmMwNi4uZDk0YjU5MTQwYzQ1MiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS94ODYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3g4Ni5jXG5AQCAtODg2Nyw3ICYjNDM7ODg2NywxNSBAQCBzdGF0aWMgaW50IGt2bV94ODZfdmNwdV9wcmVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdCAgICAha3ZtX2FwaWNfaW5pdF9zaXBpX2FsbG93ZWQodmNwdSkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0cmV0dXJuIGt2bV94ODZfY2FsbCh2Y3B1X3ByZV9ydW4pKHZjcHUpO1xuJiM0MztcdGlmIChrdm1feDg2X2NhbGwodmNwdV9uZWVkc19pbml0aWFsaXphdGlvbikodmNwdSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0aWYgKGt2bV94ODZfY2FsbCh1bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKSh2Y3B1KSkge1xuJiM0MztcdFx0a3ZtX3ByZXBhcmVfZW11bGF0aW9uX2ZhaWx1cmVfZXhpdCh2Y3B1KTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDE7XG4gfVxuIFxuIGludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfaW52YWxpZF9uZXN0ZWRfZ3Vlc3Rfc3RhdGUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X2ludmFsaWRfbmVzdGVkX2d1ZXN0X3N0YXRlLmNcbmluZGV4IDU3ODI4Mzg5M2FiMzcuLjZmNTQ2ZGViMTkzYTkgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9pbnZhbGlkX25lc3RlZF9ndWVzdF9zdGF0ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9pbnZhbGlkX25lc3RlZF9ndWVzdF9zdGF0ZS5jXG5AQCAtMiw2ICYjNDM7Miw3IEBAXG4gI2luY2x1ZGUgXCYjMzQ7dGVzdF91dGlsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtrdm1fdXRpbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7cHJvY2Vzc29yLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7c21tLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt2bXguaFwmIzM0O1xuIFxuICNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG5AQCAtOSw5ICYjNDM7MTAsMjMgQEBcbiBcbiAjaW5jbHVkZSBcJiMzNDtrc2VsZnRlc3QuaFwmIzM0O1xuIFxuLSNkZWZpbmUgQVJCSVRSQVJZX0lPX1BPUlQgMHgyMDAwXG4mIzQzOyNkZWZpbmUgQVJCSVRSQVJZX0lPX1BPUlQgMHg4MFxuIFxuLXN0YXRpYyBzdHJ1Y3Qga3ZtX3ZtICp2bTtcbiYjNDM7LypcbiYjNDM7ICogVGhlIDY0LWJpdCBTTVJBTSBzdGF0ZS1zYXZlIGFyZWEgc3RhcnRzIGF0IFNNQkFTRSAmIzQzOyAweGZlMDAuICBUUiBzdGFydHMgYXRcbiYjNDM7ICogb2Zmc2V0IDB4ZmU5MCwgYW5kIGF0dHJpYnV0ZXMgaXMgdGhlIHNlY29uZCAxNi1iaXQgZmllbGQgaW4gdGhlIGRlc2NyaXB0b3IuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIFNNUkFNNjRfVFJfQVRUUklCVVRFU19PRkZTRVRcdDB4ZmU5MlxuJiM0MzsjZGVmaW5lIFNNUkFNX0dQQVx0XHRcdDB4MTAwMDAwMFxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogU01JIGhhbmRsZXIgdGhhdCBydW5zIGluIDE2LWJpdCBSZWFsIE1vZGUuICBTeW5jcyB3aXRoIEwwIHZpYSBwb3J0IEkvTywgdGhlblxuJiM0MzsgKiBleGVjdXRlcyBSU00gdG8gdHJpZ2dlciB0aGUgY29uc3VtcHRpb24gb2YgaW52YWxpZCBndWVzdCBzdGF0ZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB1OCBzbWlfaGFuZGxlcltdID0ge1xuJiM0MztcdDB4ZTQsIEFSQklUUkFSWV9JT19QT1JULFx0LyogSU4gJEFSQklUUkFSWV9JT19QT1JULCAlYWwgKi9cbiYjNDM7XHQweDBmLCAweGFhLFx0XHRcdC8qIFJTTSAqL1xuJiM0Mzt9O1xuIFxuIHN0YXRpYyB2b2lkIGwyX2d1ZXN0X2NvZGUodm9pZClcbiB7XG5AQCAtMTksOCAmIzQzOzM0LDkgQEAgc3RhdGljIHZvaWQgbDJfZ3Vlc3RfY29kZSh2b2lkKVxuIFx0ICogR2VuZXJhdGUgYW4gZXhpdCB0byBMMCB1c2Vyc3BhY2UsIGkuZS4gbWFpbigpLCB2aWEgSS9PIHRvIGFuXG4gXHQgKiBhcmJpdHJhcnkgcG9ydC5cbiBcdCAqL1xuLVx0YXNtIHZvbGF0aWxlKFwmIzM0O2luYiAlJWR4LCAlJWFsXCYjMzQ7XG4tXHRcdCAgICAgOiA6IFtwb3J0XSBcJiMzNDtkXCYjMzQ7IChBUkJJVFJBUllfSU9fUE9SVCkgOiBcJiMzNDtyYXhcJiMzNDspO1xuJiM0MztcdGFzbSB2b2xhdGlsZShcJiMzNDtpbmIgJFwmIzM0OyBfX3N0cmluZ2lmeShBUkJJVFJBUllfSU9fUE9SVCkgXCYjMzQ7LCAlJWFsXCYjMzQ7XG4mIzQzO1x0XHQgICAgIDo6OiBcJiMzNDtyYXhcJiMzNDspO1xuJiM0MztcdEdVRVNUX0ZBSUwoXCYjMzQ7TDIgcmVzdW1lZCBhZnRlciBzdHVmZmluZyBpbnZhbGlkIGd1ZXN0IHN0YXRlXCYjMzQ7KTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbDFfZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMpXG5AQCAtNDYsMzUgJiM0Mzs2Miw1MCBAQCBzdGF0aWMgdm9pZCBsMV9ndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcylcbiBcdEdVRVNUX0RPTkUoKTtcbiB9XG4gXG4taW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbiYjNDM7c3RhdGljIHZvaWQgdmNwdV9ydW5fdG9faW8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIHdhbnRfbDIpXG4ge1xuLVx0Z3ZhX3Qgdm14X3BhZ2VzX2d2YTtcbi1cdHN0cnVjdCBrdm1fc3JlZ3Mgc3JlZ3M7XG4tXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XG4tXHRzdHJ1Y3Qga3ZtX3J1biAqcnVuO1xuLVx0c3RydWN0IHVjYWxsIHVjO1xuJiM0MztcdHN0cnVjdCBrdm1fcnVuICpydW4gPSB2Y3B1LVx1MDAzZXJ1bjtcbiBcbi1cdFRFU1RfUkVRVUlSRShrdm1fY3B1X2hhcyhYODZfRkVBVFVSRV9WTVgpKTtcbiYjNDM7XHR2Y3B1X3J1bih2Y3B1KTtcbiBcbi1cdHZtID0gdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoXHUwMDI2dmNwdSwgbDFfZ3Vlc3RfY29kZSk7XG4mIzQzO1x0VEVTVF9BU1NFUlRfS1ZNX0VYSVRfUkVBU09OKHZjcHUsIEtWTV9FWElUX0lPKTtcbiBcbi1cdC8qIEFsbG9jYXRlIFZNWCBwYWdlcyBhbmQgc2hhcmVkIGRlc2NyaXB0b3JzICh2bXhfcGFnZXMpLiAqL1xuLVx0dmNwdV9hbGxvY192bXgodm0sIFx1MDAyNnZteF9wYWdlc19ndmEpO1xuLVx0dmNwdV9hcmdzX3NldCh2Y3B1LCAxLCB2bXhfcGFnZXNfZ3ZhKTtcbiYjNDM7XHRURVNUX0FTU0VSVChydW4tXHUwMDNlaW8ucG9ydCA9PSBBUkJJVFJBUllfSU9fUE9SVCBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAoISEocnVuLVx1MDAzZWZsYWdzIFx1MDAyNiBLVk1fUlVOX1g4Nl9HVUVTVF9NT0RFKSA9PSB3YW50X2wyICB8fFxuJiM0MztcdFx0ICAgICAha3ZtX2hhc19jYXAoS1ZNX0NBUF9YODZfR1VFU1RfTU9ERSkpLFxuJiM0MztcdFx0ICAgIFwmIzM0O0V4cGVjdGVkIElOIGZyb20gcG9ydCAlZCBmcm9tIEwyLCBnb3QgcG9ydCAlZCBmcm9tIEwldVwmIzM0OyxcbiYjNDM7XHRcdCAgICBBUkJJVFJBUllfSU9fUE9SVCwgcnVuLVx1MDAzZWlvLnBvcnQsXG4mIzQzO1x0XHQgICAgMSAmIzQzOyAhIShydW4tXHUwMDNlZmxhZ3MgXHUwMDI2IEtWTV9SVU5fWDg2X0dVRVNUX01PREUpKTtcbiYjNDM7fVxuIFxuLVx0dmNwdV9ydW4odmNwdSk7XG4mIzQzO3N0YXRpYyBzdHJ1Y3Qga3ZtX3ZtICp2bV9jcmVhdGVfYW5kX3J1bl9sMihzdHJ1Y3Qga3ZtX3ZjcHUgKip2Y3B1KVxuJiM0Mzt7XG4mIzQzO1x0Z3ZhX3Qgdm14X3BhZ2VzX2d2YTtcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbiYjNDM7XG4mIzQzO1x0dm0gPSB2bV9jcmVhdGVfd2l0aF9vbmVfdmNwdSh2Y3B1LCBsMV9ndWVzdF9jb2RlKTtcbiBcbi1cdHJ1biA9IHZjcHUtXHUwMDNlcnVuO1xuJiM0MztcdC8qIEFsbG9jYXRlIFZNWCBwYWdlcyBhbmQgc2hhcmVkIGRlc2NyaXB0b3JzICh2bXhfcGFnZXMpLiAqL1xuJiM0MztcdHZjcHVfYWxsb2Nfdm14KHZtLCBcdTAwMjZ2bXhfcGFnZXNfZ3ZhKTtcbiYjNDM7XHR2Y3B1X2FyZ3Nfc2V0KCp2Y3B1LCAxLCB2bXhfcGFnZXNfZ3ZhKTtcbiBcbiBcdC8qXG4gXHQgKiBUaGUgZmlyc3QgZXhpdCB0byBMMCB1c2Vyc3BhY2Ugc2hvdWxkIGJlIGFuIEkvTyBhY2Nlc3MgZnJvbSBMMi5cbiBcdCAqIFJ1bm5pbmcgTDEgc2hvdWxkIGxhdW5jaCBMMiB3aXRob3V0IHRyaWdnZXJpbmcgYW4gZXhpdCB0byB1c2Vyc3BhY2UuXG4gXHQgKi9cbi1cdFRFU1RfQVNTRVJUX0tWTV9FWElUX1JFQVNPTih2Y3B1LCBLVk1fRVhJVF9JTyk7XG4mIzQzO1x0dmNwdV9ydW5fdG9faW8oKnZjcHUsIHRydWUpO1xuIFxuLVx0VEVTVF9BU1NFUlQocnVuLVx1MDAzZWlvLnBvcnQgPT0gQVJCSVRSQVJZX0lPX1BPUlQsXG4tXHRcdCAgICBcJiMzNDtFeHBlY3RlZCBJTiBmcm9tIHBvcnQgJWQgZnJvbSBMMiwgZ290IHBvcnQgJWRcJiMzNDssXG4tXHRcdCAgICBBUkJJVFJBUllfSU9fUE9SVCwgcnVuLVx1MDAzZWlvLnBvcnQpO1xuJiM0MztcdHJldHVybiB2bTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdGVzdF9pbnZhbGlkX2wyX2d1ZXN0X3N0YXRlKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3NyZWdzIHNyZWdzO1xuJiM0MztcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbiYjNDM7XHRzdHJ1Y3QgdWNhbGwgdWM7XG4mIzQzO1xuJiM0MztcdHZtID0gdm1fY3JlYXRlX2FuZF9ydW5fbDIoXHUwMDI2dmNwdSk7XG4gXG4gXHQvKlxuIFx0ICogU3R1ZmYgaW52YWxpZCBndWVzdCBzdGF0ZSBmb3IgTDIgYnkgbWFraW5nIFRSIHVudXNhYmxlLiAgVGhlIG5leHRcbkBAIC05Niw0ICYjNDM7MTI3LDQ5IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4gXHRkZWZhdWx0OlxuIFx0XHRURVNUX0ZBSUwoXCYjMzQ7VW5leHBlY3RlZCB1Y2FsbDogJWx1XCYjMzQ7LCB1Yy5jbWQpO1xuIFx0fVxuJiM0MztcbiYjNDM7XHRrdm1fdm1fZnJlZSh2bSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHRlc3RfaW52YWxpZF9sMl9ndWVzdF9zdGF0ZV9yc20odm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbiYjNDM7XHR1MTYgKnRyX2F0dHJzO1xuJiM0MztcbiYjNDM7XHRpZiAoIWt2bV9oYXNfY2FwKEtWTV9DQVBfWDg2X1NNTSkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHZtID0gdm1fY3JlYXRlX2FuZF9ydW5fbDIoXHUwMDI2dmNwdSk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogSW5qZWN0IFNNSSB3aGlsZSBMMiBpcyBhY3RpdmUsIHJ1biB0aGUgdkNQVSB0byBnZXQgSS9PIGV4aXQgZnJvbSBMMSxcbiYjNDM7XHQgKiB0aGVuIHN0dWZmIFRSIGluIHRoZSBTTVJBTSBzdGF0ZS1zYXZlIGFyZWEgc28gdGhhdCBSU00gcmVzdG9yZXNcbiYjNDM7XHQgKiBpbnZhbGlkIEwyIHN0YXRlLlxuJiM0MztcdCAqL1xuJiM0MztcdHNldHVwX3NtcmFtKHZtLCB2Y3B1LCBTTVJBTV9HUEEsIHNtaV9oYW5kbGVyLCBzaXplb2Yoc21pX2hhbmRsZXIpKTtcbiYjNDM7XHRpbmplY3Rfc21pKHZjcHUpO1xuJiM0MztcbiYjNDM7XHR2Y3B1X3J1bl90b19pbyh2Y3B1LCBmYWxzZSk7XG4mIzQzO1xuJiM0MztcdC8qIENsZWFyIHRoZSBwcmVzZW50IGJpdCBpbiBTTVJBTSB0byBtYWtlIFRSIHVudXNhYmxlLiAqL1xuJiM0MztcdHRyX2F0dHJzID0gYWRkcl9ncGEyaHZhKHZtLCBTTVJBTV9HUEEgJiM0MzsgU01SQU02NF9UUl9BVFRSSUJVVEVTX09GRlNFVCk7XG4mIzQzO1x0KnRyX2F0dHJzIFx1MDAyNj0gfkJJVCg3KTtcbiYjNDM7XG4mIzQzO1x0dmNwdV9ydW4odmNwdSk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRm9yIFJTTSwgTDEgZ2V0cyB0aGUgU0hVVERPV04gYmVjYXVzZSBSU00gaXMgYXJjaGl0ZWN0dXJhbGx5IGRlZmluZWRcbiYjNDM7XHQgKiB0byByZXN1bHQgaW4gc2h1dGRvd24gaWYgdGhlIENQVSBkZXRlY3RzIGludmFsaWQgc3RhdGUgaW4gU01SQU0uXG4mIzQzO1x0ICovXG4mIzQzO1x0VEVTVF9BU1NFUlRfS1ZNX0VYSVRfUkVBU09OKHZjcHUsIEtWTV9FWElUX1NIVVRET1dOKTtcbiYjNDM7XHRrdm1fdm1fZnJlZSh2bSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4mIzQzO3tcbiYjNDM7XHRURVNUX1JFUVVJUkUoa3ZtX2NwdV9oYXMoWDg2X0ZFQVRVUkVfVk1YKSk7XG4mIzQzO1xuJiM0MztcdHRlc3RfaW52YWxpZF9sMl9ndWVzdF9zdGF0ZSgpO1xuJiM0MztcdHRlc3RfaW52YWxpZF9sMl9ndWVzdF9zdGF0ZV9yc20oKTtcbiB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjA6MDg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OywKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7LAogICAgJiMzNDtLVk1fU01NJiMzNDssCiAgICAmIzM0O0tWTV9BTURfU0VWJiMzNDssCiAgICAmIzM0O0tWTV9JTlRFTF9URFgmIzM0OywKICAgICYjMzQ7SU5URUxfVERYX0hPU1QmIzM0OywKICAgICYjMzQ7Q1JZUFRPX0RFVl9TUF9QU1AmIzM0OywKICAgICYjMzQ7Q1JZUFRPX0RFVl9DQ1BfREQmIzM0OywKICAgICYjMzQ7QU1EX0lPTU1VJiMzNDssCiAgICAmIzM0O1g4Nl9YMkFQSUMmIzM0OywKICAgICYjMzQ7Q01BJiMzNDssCiAgICAmIzM0O1g4Nl9NQ0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtlbXVsYXRvcl9sZWF2ZV9zbW0mIzM0OywKICAgICYjMzQ7dm14X3VuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQmIzM0OywKICAgICYjMzQ7dGR4X3ZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24mIzM0OywKICAgICYjMzQ7c2V2X3ZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBLVk0geDg2IG9wZXJhdGlvbiBgdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZGAgYW5kIHJlbmFtZXMgYHZjcHVfcHJlX3J1bmAgdG8gYHZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb25gLiBJdCBtb2RpZmllcyBob3cgS1ZNIGhhbmRsZXMgaW52YWxpZCBndWVzdCBzdGF0ZXMgYW5kIGVtdWxhdGlvbiBmYWlsdXJlcywgcGFydGljdWxhcmx5IHdoZW4gcmV0dXJuaW5nIGZyb20gU3lzdGVtIE1hbmFnZW1lbnQgTW9kZSAoU01NKSB2aWEgUlNNLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgS1ZNIHg4NiBsb2dpYyBhbmQgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGIyNjAxNzAwMjY4ODIwNWVhN2YzMjk3NTRlNzVjZTYwM2ZlMzM1ZWIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEp1bCAyOCAyMDowODoxMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oCmluZGV4IDVjYjEzMmVjYTNjMzUuLmUyMTNjOWFlM2UzMDEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaApAQCAtNjMsMTEgJiM0Mzs2MywxMiBAQCBLVk1fWDg2X09QX09QVElPTkFMKGZsdXNoX3JlbW90ZV90bGJzX3JhbmdlKQogI2VuZGlmCiBLVk1fWDg2X09QKGZsdXNoX3RsYl9ndmEpCiBLVk1fWDg2X09QKGZsdXNoX3RsYl9ndWVzdCkKLUtWTV9YODZfT1AodmNwdV9wcmVfcnVuKQomIzQzO0tWTV9YODZfT1BfT1BUSU9OQUxfUkVUMCh2Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uKQogS1ZNX1g4Nl9PUCh2Y3B1X3J1bikKIEtWTV9YODZfT1AoaGFuZGxlX2V4aXQpCiBLVk1fWDg2X09QKHNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24pCiBLVk1fWDg2X09QX09QVElPTkFMKHVwZGF0ZV9lbXVsYXRlZF9pbnN0cnVjdGlvbikKJiM0MztLVk1fWDg2X09QX09QVElPTkFMX1JFVDAodW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZCkKIEtWTV9YODZfT1Aoc2V0X2ludGVycnVwdF9zaGFkb3cpCiBLVk1fWDg2X09QKGdldF9pbnRlcnJ1cHRfc2hhZG93KQogS1ZNX1g4Nl9PUChwYXRjaF9oeXBlcmNhbGwpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAppbmRleCA3YTI1ODgzMTYxNmZhLi4yODM4NDc2MTlmZjg4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKQEAgLTE1ODYsMTMgJiM0MzsxNTg2LDE1IEBAIHN0cnVjdCBrdm1feDg2X29wcyB7CiAJICovCiAJdm9pZCAoKmZsdXNoX3RsYl9ndWVzdCkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIAotCWludCAoKnZjcHVfcHJlX3J1bikoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKJiM0MzsJYm9vbCAoKnZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiAJZW51bSBleGl0X2Zhc3RwYXRoX2NvbXBsZXRpb24gKCp2Y3B1X3J1bikoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCQkJCQkJICB1NjQgcnVuX2ZsYWdzKTsKIAlpbnQgKCpoYW5kbGVfZXhpdCkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCQllbnVtIGV4aXRfZmFzdHBhdGhfY29tcGxldGlvbiBleGl0X2Zhc3RwYXRoKTsKIAlpbnQgKCpza2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCXZvaWQgKCp1cGRhdGVfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiYjNDM7CWJvb2wgKCp1bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwomIzQzOwogCXZvaWQgKCpzZXRfaW50ZXJydXB0X3NoYWRvdykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgbWFzayk7CiAJdTMyICgqZ2V0X2ludGVycnVwdF9zaGFkb3cpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiAJdm9pZCAoKnBhdGNoX2h5cGVyY2FsbCkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3NtbS5jIGIvYXJjaC94ODYva3ZtL3NtbS5jCmluZGV4IGE0NDY0ODdiZGQ1Y2YuLjY1NmEzOGRhZDdlN2EgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9zbW0uYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vc21tLmMKQEAgLTY0OSw2ICYjNDM7NjQ5LDEwIEBAIGludCBlbXVsYXRvcl9sZWF2ZV9zbW0oc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCiAjZW5kaWYKIAkJcmV0ID0gcnNtX2xvYWRfc3RhdGVfMzIoY3R4dCwgJmFtcDtzbXJhbS5zbXJhbTMyKTsKIAomIzQzOwlpZiAocmV0ID09IFg4NkVNVUxfQ09OVElOVUUgJmFtcDsmYW1wOwomIzQzOwkgICAga3ZtX3g4Nl9jYWxsKHVuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQpKHZjcHUpKQomIzQzOwkJcmV0ID0gWDg2RU1VTF9VTkhBTkRMRUFCTEU7CiYjNDM7CiAJLyoKIAkgKiBJZiBSU00gZmFpbHMgYW5kIHRyaWdnZXJzIHNodXRkb3duLCBhcmNoaXRlY3R1cmFsbHkgdGhlIHNodXRkb3duCiAJICogb2NjdXJzICpiZWZvcmUqIHRoZSB0cmFuc2l0aW9uIHRvIGd1ZXN0IG1vZGUuICBCdXQgZHVlIHRvIEtWTSYjMzk7cwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuYyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMKaW5kZXggOTBhMDhkMzZkODQzZC4uZmNiNDFkZmRlNGMwMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jCkBAIC0zNTU2LDYgJiM0MzszNTU2LDExIEBAIHZvaWQgc2V2X2ZyZWVfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJX19zZXZfZXNfdW5tYXBfZ2hjYihzdm0pOwogfQogCiYjNDM7Ym9vbCBzZXZfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiYjNDM7ewomIzQzOwlyZXR1cm4gdG9fa3ZtX3Nldl9pbmZvKHZjcHUtJmd0O2t2bSktJmd0O25lZWRfaW5pdDsKJiM0Mzt9CiYjNDM7CiBpbnQgcHJlX3Nldl9ydW4oc3RydWN0IHZjcHVfc3ZtICpzdm0sIGludCBjcHUpCiB7CiAJc3RydWN0IHN2bV9jcHVfZGF0YSAqc2QgPSBwZXJfY3B1X3B0cigmYW1wO3N2bV9kYXRhLCBjcHUpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uYyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMKaW5kZXggZDY4Y2JhMTJjNzcyYi4uYmNjY2E5YzViOTY2NyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jCkBAIC00NDAyLDE2ICYjNDM7NDQwMiw2IEBAIHN0YXRpYyB2b2lkIHN2bV9jYW5jZWxfaW5qZWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlzdm1fY29tcGxldGVfaW50ZXJydXB0cyh2Y3B1KTsKIH0KIAotc3RhdGljIGludCBzdm1fdmNwdV9wcmVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKLXsKLSNpZmRlZiBDT05GSUdfS1ZNX0FNRF9TRVYKLQlpZiAodG9fa3ZtX3Nldl9pbmZvKHZjcHUtJmd0O2t2bSktJmd0O25lZWRfaW5pdCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0jZW5kaWYKLQotCXJldHVybiAxOwotfQotCiBzdGF0aWMgZmFzdHBhdGhfdCBzdm1fZXhpdF9oYW5kbGVyc19mYXN0cGF0aChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJc3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7CkBAIC01Mzg4LDcgJiM0Mzs1Mzc4LDYgQEAgc3RydWN0IGt2bV94ODZfb3BzIHN2bV94ODZfb3BzIF9faW5pdGRhdGEgPSB7CiAJLmZsdXNoX3RsYl9ndmEgPSBzdm1fZmx1c2hfdGxiX2d2YSwKIAkuZmx1c2hfdGxiX2d1ZXN0ID0gc3ZtX2ZsdXNoX3RsYl9ndWVzdCwKIAotCS52Y3B1X3ByZV9ydW4gPSBzdm1fdmNwdV9wcmVfcnVuLAogCS52Y3B1X3J1biA9IHN2bV92Y3B1X3J1biwKIAkuaGFuZGxlX2V4aXQgPSBzdm1faGFuZGxlX2V4aXQsCiAJLnNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24gPSBzdm1fc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbiwKQEAgLTU0NDYsNiAmIzQzOzU0MzUsNyBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMgc3ZtX3g4Nl9vcHMgX19pbml0ZGF0YSA9IHsKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0tWTV9BTURfU0VWCiYjNDM7CS52Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uID0gc2V2X3ZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24sCiAJLmRldl9nZXRfYXR0ciA9IHNldl9kZXZfZ2V0X2F0dHIsCiAJLm1lbV9lbmNfaW9jdGwgPSBzZXZfbWVtX2VuY19pb2N0bCwKIAkubWVtX2VuY19yZWdpc3Rlcl9yZWdpb24gPSBzZXZfbWVtX2VuY19yZWdpc3Rlcl9yZWdpb24sCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uaAppbmRleCBhMzI3YmY3NTFlY2Q1Li42NmI0NGI1NDYwOGU4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmgKQEAgLTk3OSw2ICYjNDM7OTc5LDcgQEAgdm9pZCBzZXZfZXNfcHJlcGFyZV9zd2l0Y2hfdG9fZ3Vlc3Qoc3RydWN0IHZjcHVfc3ZtICpzdm0sIHN0cnVjdCBzZXZfZXNfc2F2ZV9hcmUKIHZvaWQgc2V2X2VzX3VubWFwX2doY2Ioc3RydWN0IHZjcHVfc3ZtICpzdm0pOwogCiAjaWZkZWYgQ09ORklHX0tWTV9BTURfU0VWCiYjNDM7Ym9vbCBzZXZfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogaW50IHNldl9tZW1fZW5jX2lvY3RsKHN0cnVjdCBrdm0gKmt2bSwgdm9pZCBfX3VzZXIgKmFyZ3ApOwogaW50IHNldl9tZW1fZW5jX3JlZ2lzdGVyX3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sCiAJCQkJc3RydWN0IGt2bV9lbmNfcmVnaW9uICpyYW5nZSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L21haW4uYyBiL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jCmluZGV4IDA0Zjk4NmUzZDQzOWEuLjBmZjMyMzBmZDk1ZTggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jCkBAIC0xNDAsMTIgJiM0MzsxNDAsMTAgQEAgc3RhdGljIHZvaWQgdnRfdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCXZteF92Y3B1X3B1dCh2Y3B1KTsKIH0KIAotc3RhdGljIGludCB2dF92Y3B1X3ByZV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQomIzQzO3N0YXRpYyBib29sIHZ0X3ZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewotCWlmIChpc190ZF92Y3B1KHZjcHUpKQotCQlyZXR1cm4gdGR4X3ZjcHVfcHJlX3J1bih2Y3B1KTsKLQotCXJldHVybiB2bXhfdmNwdV9wcmVfcnVuKHZjcHUpOwomIzQzOwlyZXR1cm4gaXNfdGRfdmNwdSh2Y3B1KSAmYW1wOyZhbXA7CiYjNDM7CSAgICAgICB0ZHhfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbih2Y3B1KTsKIH0KIAogc3RhdGljIGZhc3RwYXRoX3QgdnRfdmNwdV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgcnVuX2ZsYWdzKQpAQCAtMTY1LDYgJiM0MzsxNjMsMTYgQEAgc3RhdGljIGludCB2dF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJcmV0dXJuIHZteF9oYW5kbGVfZXhpdCh2Y3B1LCBmYXN0cGF0aCk7CiB9CiAKJiM0MztzdGF0aWMgYm9vbCB2dF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKJiM0Mzt7CiYjNDM7CWlmIChpc190ZF92Y3B1KHZjcHUpKSB7CiYjNDM7CQlXQVJOX09OX09OQ0UodG9fdnQodmNwdSktJmd0O2VtdWxhdGlvbl9yZXF1aXJlZCk7CiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHZteF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKHZjcHUpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgdnRfc2V0X21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBtc3JfZGF0YSAqbXNyX2luZm8pCiB7CiAJaWYgKHVubGlrZWx5KGlzX3RkX3ZjcHUodmNwdSkpKQpAQCAtOTM5LDExICYjNDM7OTQ3LDEyIEBAIHN0cnVjdCBrdm1feDg2X29wcyB2dF94ODZfb3BzIF9faW5pdGRhdGEgPSB7CiAJLmZsdXNoX3RsYl9ndmEgPSB2dF9vcChmbHVzaF90bGJfZ3ZhKSwKIAkuZmx1c2hfdGxiX2d1ZXN0ID0gdnRfb3AoZmx1c2hfdGxiX2d1ZXN0KSwKIAotCS52Y3B1X3ByZV9ydW4gPSB2dF9vcCh2Y3B1X3ByZV9ydW4pLAomIzQzOwkudmNwdV9uZWVkc19pbml0aWFsaXphdGlvbiA9IHZ0X29wX3RkeF9vbmx5KHZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24pLAogCS52Y3B1X3J1biA9IHZ0X29wKHZjcHVfcnVuKSwKIAkuaGFuZGxlX2V4aXQgPSB2dF9vcChoYW5kbGVfZXhpdCksCiAJLnNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24gPSB2bXhfc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbiwKIAkudXBkYXRlX2VtdWxhdGVkX2luc3RydWN0aW9uID0gdm14X3VwZGF0ZV9lbXVsYXRlZF9pbnN0cnVjdGlvbiwKJiM0MzsJLnVuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQgPSB2dF9vcCh1bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKSwKIAkuc2V0X2ludGVycnVwdF9zaGFkb3cgPSB2dF9vcChzZXRfaW50ZXJydXB0X3NoYWRvdyksCiAJLmdldF9pbnRlcnJ1cHRfc2hhZG93ID0gdnRfb3AoZ2V0X2ludGVycnVwdF9zaGFkb3cpLAogCS5wYXRjaF9oeXBlcmNhbGwgPSB2dF9vcChwYXRjaF9oeXBlcmNhbGwpLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC90ZHguYyBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmMKaW5kZXggZDFhZjBhNzUyZTk3ZS4uYjI3MmMyMDU4NmE3NCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3ZteC90ZHguYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jCkBAIC04OTcsMTMgJiM0Mzs4OTcsMTAgQEAgdm9pZCB0ZHhfdmNwdV9mcmVlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAl0ZHgtJmd0O3N0YXRlID0gVkNQVV9URF9TVEFURV9VTklOSVRJQUxJWkVEOwogfQogCi1pbnQgdGR4X3ZjcHVfcHJlX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiYjNDM7Ym9vbCB0ZHhfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0JaWYgKHVubGlrZWx5KHRvX3RkeCh2Y3B1KS0mZ3Q7c3RhdGUgIT0gVkNQVV9URF9TVEFURV9JTklUSUFMSVpFRCB8fAotCQkgICAgIHRvX2t2bV90ZHgodmNwdS0mZ3Q7a3ZtKS0mZ3Q7c3RhdGUgIT0gVERfU1RBVEVfUlVOTkFCTEUpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXJldHVybiAxOwomIzQzOwlyZXR1cm4gdG9fdGR4KHZjcHUpLSZndDtzdGF0ZSAhPSBWQ1BVX1REX1NUQVRFX0lOSVRJQUxJWkVEIHx8CiYjNDM7CSAgICAgICB0b19rdm1fdGR4KHZjcHUtJmd0O2t2bSktJmd0O3N0YXRlICE9IFREX1NUQVRFX1JVTk5BQkxFOwogfQogCiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHUzMiB0ZGNhbGxfdG9fdm14X2V4aXRfcmVhc29uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdm14LmMgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jCmluZGV4IGU0YjlhYzdmZWQ5ZjAuLjc2MTYwYWRmODI5NzAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS92bXgvdm14LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3ZteC92bXguYwpAQCAtNjAzNSw3ICYjNDM7NjAzNSw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX25taV93aW5kb3coc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogICogd2l0aCB1bnNyZXN0cmljdGVkIGd1ZXN0IG1vZGUgZGlzYWJsZWQpIGFuZCBLVk0gY2FuJiMzOTt0IGZhaXRoZnVsbHkgZW11bGF0ZSB0aGUKICAqIGN1cnJlbnQgdkNQVSBzdGF0ZS4KICAqLwotc3RhdGljIGJvb2wgdm14X3VuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQomIzQzO2Jvb2wgdm14X3VuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCXN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpOwogCkBAIC02MTEwLDE2ICYjNDM7NjExMCw2IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2ludmFsaWRfZ3Vlc3Rfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCXJldHVybiAxOwogfQogCi1pbnQgdm14X3ZjcHVfcHJlX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCi17Ci0JaWYgKHZteF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKHZjcHUpKSB7Ci0JCWt2bV9wcmVwYXJlX2VtdWxhdGlvbl9mYWlsdXJlX2V4aXQodmNwdSk7Ci0JCXJldHVybiAwOwotCX0KLQotCXJldHVybiAxOwotfQotCiAvKgogICogSW5kaWNhdGUgYSBidXN5LXdhaXRpbmcgdmNwdSBpbiBzcGlubG9jay4gV2UgZG8gbm90IGVuYWJsZSB0aGUgUEFVU0UKICAqIGV4aXRpbmcsIHNvIG9ubHkgZ2V0IGhlcmUgb24gY3B1IHdpdGggUEFVU0UtTG9vcC1FeGl0aW5nLgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmggYi9hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaAppbmRleCA0MDk4NTgwNzQyNDYyLi5jZGIzOGQ5NDBjZmI3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaApAQCAtMjEsNyAmIzQzOzIxLDYgQEAgaW50IHZteF92bV9pbml0KHN0cnVjdCBrdm0gKmt2bSk7CiB2b2lkIHZteF92bV9kZXN0cm95KHN0cnVjdCBrdm0gKmt2bSk7CiBpbnQgdm14X3ZjcHVfcHJlY3JlYXRlKHN0cnVjdCBrdm0gKmt2bSk7CiBpbnQgdm14X3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7Ci1pbnQgdm14X3ZjcHVfcHJlX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogZmFzdHBhdGhfdCB2bXhfdmNwdV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgcnVuX2ZsYWdzKTsKIHZvaWQgdm14X3ZjcHVfZnJlZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogdm9pZCB2bXhfdmNwdV9yZXNldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaW5pdF9ldmVudCk7CkBAIC0zMSw2ICYjNDM7MzAsNyBAQCBpbnQgdm14X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBleGl0X2Zhc3RwYXRoKTsKIHZvaWQgdm14X2hhbmRsZV9leGl0X2lycW9mZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogaW50IHZteF9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiB2b2lkIHZteF91cGRhdGVfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKJiM0Mztib29sIHZteF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiBpbnQgdm14X3NldF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgbXNyX2RhdGEgKm1zcl9pbmZvKTsKICNpZmRlZiBDT05GSUdfS1ZNX1NNTQogaW50IHZteF9zbWlfYWxsb3dlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgZm9yX2luamVjdGlvbik7CkBAIC0xMzcsNyAmIzQzOzEzNyw3IEBAIGludCB0ZHhfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIHZvaWQgdGR4X3ZjcHVfcmVzZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGluaXRfZXZlbnQpOwogdm9pZCB0ZHhfdmNwdV9mcmVlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiB2b2lkIHRkeF92Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KTsKLWludCB0ZHhfdmNwdV9wcmVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiYjNDM7Ym9vbCB0ZHhfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogZmFzdHBhdGhfdCB0ZHhfdmNwdV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgcnVuX2ZsYWdzKTsKIHZvaWQgdGR4X3ByZXBhcmVfc3dpdGNoX3RvX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiB2b2lkIHRkeF92Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5jIGIvYXJjaC94ODYva3ZtL3g4Ni5jCmluZGV4IDBmMWE4MjkwMzJjMDYuLmQ5NGI1OTE0MGM0NTIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS94ODYuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0veDg2LmMKQEAgLTg4NjcsNyAmIzQzOzg4NjcsMTUgQEAgc3RhdGljIGludCBrdm1feDg2X3ZjcHVfcHJlX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJICAgICFrdm1fYXBpY19pbml0X3NpcGlfYWxsb3dlZCh2Y3B1KSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlyZXR1cm4ga3ZtX3g4Nl9jYWxsKHZjcHVfcHJlX3J1bikodmNwdSk7CiYjNDM7CWlmIChrdm1feDg2X2NhbGwodmNwdV9uZWVkc19pbml0aWFsaXphdGlvbikodmNwdSkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJaWYgKGt2bV94ODZfY2FsbCh1bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKSh2Y3B1KSkgewomIzQzOwkJa3ZtX3ByZXBhcmVfZW11bGF0aW9uX2ZhaWx1cmVfZXhpdCh2Y3B1KTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAxOwogfQogCiBpbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfaW52YWxpZF9uZXN0ZWRfZ3Vlc3Rfc3RhdGUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X2ludmFsaWRfbmVzdGVkX2d1ZXN0X3N0YXRlLmMKaW5kZXggNTc4MjgzODkzYWIzNy4uNmY1NDZkZWIxOTNhOSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfaW52YWxpZF9uZXN0ZWRfZ3Vlc3Rfc3RhdGUuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9pbnZhbGlkX25lc3RlZF9ndWVzdF9zdGF0ZS5jCkBAIC0yLDYgJiM0MzsyLDcgQEAKICNpbmNsdWRlICYjMzQ7dGVzdF91dGlsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtrdm1fdXRpbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7cHJvY2Vzc29yLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7c21tLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt2bXguaCYjMzQ7CiAKICNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDsKQEAgLTksOSAmIzQzOzEwLDIzIEBACiAKICNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0LmgmIzM0OwogCi0jZGVmaW5lIEFSQklUUkFSWV9JT19QT1JUIDB4MjAwMAomIzQzOyNkZWZpbmUgQVJCSVRSQVJZX0lPX1BPUlQgMHg4MAogCi1zdGF0aWMgc3RydWN0IGt2bV92bSAqdm07CiYjNDM7LyoKJiM0MzsgKiBUaGUgNjQtYml0IFNNUkFNIHN0YXRlLXNhdmUgYXJlYSBzdGFydHMgYXQgU01CQVNFICYjNDM7IDB4ZmUwMC4gIFRSIHN0YXJ0cyBhdAomIzQzOyAqIG9mZnNldCAweGZlOTAsIGFuZCBhdHRyaWJ1dGVzIGlzIHRoZSBzZWNvbmQgMTYtYml0IGZpZWxkIGluIHRoZSBkZXNjcmlwdG9yLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgU01SQU02NF9UUl9BVFRSSUJVVEVTX09GRlNFVAkweGZlOTIKJiM0MzsjZGVmaW5lIFNNUkFNX0dQQQkJCTB4MTAwMDAwMAomIzQzOwomIzQzOy8qCiYjNDM7ICogU01JIGhhbmRsZXIgdGhhdCBydW5zIGluIDE2LWJpdCBSZWFsIE1vZGUuICBTeW5jcyB3aXRoIEwwIHZpYSBwb3J0IEkvTywgdGhlbgomIzQzOyAqIGV4ZWN1dGVzIFJTTSB0byB0cmlnZ2VyIHRoZSBjb25zdW1wdGlvbiBvZiBpbnZhbGlkIGd1ZXN0IHN0YXRlLgomIzQzOyAqLwomIzQzO3N0YXRpYyB1OCBzbWlfaGFuZGxlcltdID0gewomIzQzOwkweGU0LCBBUkJJVFJBUllfSU9fUE9SVCwJLyogSU4gJEFSQklUUkFSWV9JT19QT1JULCAlYWwgKi8KJiM0MzsJMHgwZiwgMHhhYSwJCQkvKiBSU00gKi8KJiM0Mzt9OwogCiBzdGF0aWMgdm9pZCBsMl9ndWVzdF9jb2RlKHZvaWQpCiB7CkBAIC0xOSw4ICYjNDM7MzQsOSBAQCBzdGF0aWMgdm9pZCBsMl9ndWVzdF9jb2RlKHZvaWQpCiAJICogR2VuZXJhdGUgYW4gZXhpdCB0byBMMCB1c2Vyc3BhY2UsIGkuZS4gbWFpbigpLCB2aWEgSS9PIHRvIGFuCiAJICogYXJiaXRyYXJ5IHBvcnQuCiAJICovCi0JYXNtIHZvbGF0aWxlKCYjMzQ7aW5iICUlZHgsICUlYWwmIzM0OwotCQkgICAgIDogOiBbcG9ydF0gJiMzNDtkJiMzNDsgKEFSQklUUkFSWV9JT19QT1JUKSA6ICYjMzQ7cmF4JiMzNDspOwomIzQzOwlhc20gdm9sYXRpbGUoJiMzNDtpbmIgJCYjMzQ7IF9fc3RyaW5naWZ5KEFSQklUUkFSWV9JT19QT1JUKSAmIzM0OywgJSVhbCYjMzQ7CiYjNDM7CQkgICAgIDo6OiAmIzM0O3JheCYjMzQ7KTsKJiM0MzsJR1VFU1RfRkFJTCgmIzM0O0wyIHJlc3VtZWQgYWZ0ZXIgc3R1ZmZpbmcgaW52YWxpZCBndWVzdCBzdGF0ZSYjMzQ7KTsKIH0KIAogc3RhdGljIHZvaWQgbDFfZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMpCkBAIC00NiwzNSAmIzQzOzYyLDUwIEBAIHN0YXRpYyB2b2lkIGwxX2d1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKQogCUdVRVNUX0RPTkUoKTsKIH0KIAotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKJiM0MztzdGF0aWMgdm9pZCB2Y3B1X3J1bl90b19pbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgd2FudF9sMikKIHsKLQlndmFfdCB2bXhfcGFnZXNfZ3ZhOwotCXN0cnVjdCBrdm1fc3JlZ3Mgc3JlZ3M7Ci0Jc3RydWN0IGt2bV92Y3B1ICp2Y3B1OwotCXN0cnVjdCBrdm1fcnVuICpydW47Ci0Jc3RydWN0IHVjYWxsIHVjOwomIzQzOwlzdHJ1Y3Qga3ZtX3J1biAqcnVuID0gdmNwdS0mZ3Q7cnVuOwogCi0JVEVTVF9SRVFVSVJFKGt2bV9jcHVfaGFzKFg4Nl9GRUFUVVJFX1ZNWCkpOwomIzQzOwl2Y3B1X3J1bih2Y3B1KTsKIAotCXZtID0gdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoJmFtcDt2Y3B1LCBsMV9ndWVzdF9jb2RlKTsKJiM0MzsJVEVTVF9BU1NFUlRfS1ZNX0VYSVRfUkVBU09OKHZjcHUsIEtWTV9FWElUX0lPKTsKIAotCS8qIEFsbG9jYXRlIFZNWCBwYWdlcyBhbmQgc2hhcmVkIGRlc2NyaXB0b3JzICh2bXhfcGFnZXMpLiAqLwotCXZjcHVfYWxsb2Nfdm14KHZtLCAmYW1wO3ZteF9wYWdlc19ndmEpOwotCXZjcHVfYXJnc19zZXQodmNwdSwgMSwgdm14X3BhZ2VzX2d2YSk7CiYjNDM7CVRFU1RfQVNTRVJUKHJ1bi0mZ3Q7aW8ucG9ydCA9PSBBUkJJVFJBUllfSU9fUE9SVCAmYW1wOyZhbXA7CiYjNDM7CQkgICAgKCEhKHJ1bi0mZ3Q7ZmxhZ3MgJmFtcDsgS1ZNX1JVTl9YODZfR1VFU1RfTU9ERSkgPT0gd2FudF9sMiAgfHwKJiM0MzsJCSAgICAgIWt2bV9oYXNfY2FwKEtWTV9DQVBfWDg2X0dVRVNUX01PREUpKSwKJiM0MzsJCSAgICAmIzM0O0V4cGVjdGVkIElOIGZyb20gcG9ydCAlZCBmcm9tIEwyLCBnb3QgcG9ydCAlZCBmcm9tIEwldSYjMzQ7LAomIzQzOwkJICAgIEFSQklUUkFSWV9JT19QT1JULCBydW4tJmd0O2lvLnBvcnQsCiYjNDM7CQkgICAgMSAmIzQzOyAhIShydW4tJmd0O2ZsYWdzICZhbXA7IEtWTV9SVU5fWDg2X0dVRVNUX01PREUpKTsKJiM0Mzt9CiAKLQl2Y3B1X3J1bih2Y3B1KTsKJiM0MztzdGF0aWMgc3RydWN0IGt2bV92bSAqdm1fY3JlYXRlX2FuZF9ydW5fbDIoc3RydWN0IGt2bV92Y3B1ICoqdmNwdSkKJiM0Mzt7CiYjNDM7CWd2YV90IHZteF9wYWdlc19ndmE7CiYjNDM7CXN0cnVjdCBrdm1fdm0gKnZtOwomIzQzOwomIzQzOwl2bSA9IHZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KHZjcHUsIGwxX2d1ZXN0X2NvZGUpOwogCi0JcnVuID0gdmNwdS0mZ3Q7cnVuOwomIzQzOwkvKiBBbGxvY2F0ZSBWTVggcGFnZXMgYW5kIHNoYXJlZCBkZXNjcmlwdG9ycyAodm14X3BhZ2VzKS4gKi8KJiM0MzsJdmNwdV9hbGxvY192bXgodm0sICZhbXA7dm14X3BhZ2VzX2d2YSk7CiYjNDM7CXZjcHVfYXJnc19zZXQoKnZjcHUsIDEsIHZteF9wYWdlc19ndmEpOwogCiAJLyoKIAkgKiBUaGUgZmlyc3QgZXhpdCB0byBMMCB1c2Vyc3BhY2Ugc2hvdWxkIGJlIGFuIEkvTyBhY2Nlc3MgZnJvbSBMMi4KIAkgKiBSdW5uaW5nIEwxIHNob3VsZCBsYXVuY2ggTDIgd2l0aG91dCB0cmlnZ2VyaW5nIGFuIGV4aXQgdG8gdXNlcnNwYWNlLgogCSAqLwotCVRFU1RfQVNTRVJUX0tWTV9FWElUX1JFQVNPTih2Y3B1LCBLVk1fRVhJVF9JTyk7CiYjNDM7CXZjcHVfcnVuX3RvX2lvKCp2Y3B1LCB0cnVlKTsKIAotCVRFU1RfQVNTRVJUKHJ1bi0mZ3Q7aW8ucG9ydCA9PSBBUkJJVFJBUllfSU9fUE9SVCwKLQkJICAgICYjMzQ7RXhwZWN0ZWQgSU4gZnJvbSBwb3J0ICVkIGZyb20gTDIsIGdvdCBwb3J0ICVkJiMzNDssCi0JCSAgICBBUkJJVFJBUllfSU9fUE9SVCwgcnVuLSZndDtpby5wb3J0KTsKJiM0MzsJcmV0dXJuIHZtOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB0ZXN0X2ludmFsaWRfbDJfZ3Vlc3Rfc3RhdGUodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrdm1fc3JlZ3Mgc3JlZ3M7CiYjNDM7CXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKJiM0MzsJc3RydWN0IGt2bV92bSAqdm07CiYjNDM7CXN0cnVjdCB1Y2FsbCB1YzsKJiM0MzsKJiM0MzsJdm0gPSB2bV9jcmVhdGVfYW5kX3J1bl9sMigmYW1wO3ZjcHUpOwogCiAJLyoKIAkgKiBTdHVmZiBpbnZhbGlkIGd1ZXN0IHN0YXRlIGZvciBMMiBieSBtYWtpbmcgVFIgdW51c2FibGUuICBUaGUgbmV4dApAQCAtOTYsNCAmIzQzOzEyNyw0OSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCWRlZmF1bHQ6CiAJCVRFU1RfRkFJTCgmIzM0O1VuZXhwZWN0ZWQgdWNhbGw6ICVsdSYjMzQ7LCB1Yy5jbWQpOwogCX0KJiM0MzsKJiM0MzsJa3ZtX3ZtX2ZyZWUodm0pOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB0ZXN0X2ludmFsaWRfbDJfZ3Vlc3Rfc3RhdGVfcnNtKHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7CiYjNDM7CXN0cnVjdCBrdm1fdm0gKnZtOwomIzQzOwl1MTYgKnRyX2F0dHJzOwomIzQzOwomIzQzOwlpZiAoIWt2bV9oYXNfY2FwKEtWTV9DQVBfWDg2X1NNTSkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXZtID0gdm1fY3JlYXRlX2FuZF9ydW5fbDIoJmFtcDt2Y3B1KTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogSW5qZWN0IFNNSSB3aGlsZSBMMiBpcyBhY3RpdmUsIHJ1biB0aGUgdkNQVSB0byBnZXQgSS9PIGV4aXQgZnJvbSBMMSwKJiM0MzsJICogdGhlbiBzdHVmZiBUUiBpbiB0aGUgU01SQU0gc3RhdGUtc2F2ZSBhcmVhIHNvIHRoYXQgUlNNIHJlc3RvcmVzCiYjNDM7CSAqIGludmFsaWQgTDIgc3RhdGUuCiYjNDM7CSAqLwomIzQzOwlzZXR1cF9zbXJhbSh2bSwgdmNwdSwgU01SQU1fR1BBLCBzbWlfaGFuZGxlciwgc2l6ZW9mKHNtaV9oYW5kbGVyKSk7CiYjNDM7CWluamVjdF9zbWkodmNwdSk7CiYjNDM7CiYjNDM7CXZjcHVfcnVuX3RvX2lvKHZjcHUsIGZhbHNlKTsKJiM0MzsKJiM0MzsJLyogQ2xlYXIgdGhlIHByZXNlbnQgYml0IGluIFNNUkFNIHRvIG1ha2UgVFIgdW51c2FibGUuICovCiYjNDM7CXRyX2F0dHJzID0gYWRkcl9ncGEyaHZhKHZtLCBTTVJBTV9HUEEgJiM0MzsgU01SQU02NF9UUl9BVFRSSUJVVEVTX09GRlNFVCk7CiYjNDM7CSp0cl9hdHRycyAmYW1wOz0gfkJJVCg3KTsKJiM0MzsKJiM0MzsJdmNwdV9ydW4odmNwdSk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEZvciBSU00sIEwxIGdldHMgdGhlIFNIVVRET1dOIGJlY2F1c2UgUlNNIGlzIGFyY2hpdGVjdHVyYWxseSBkZWZpbmVkCiYjNDM7CSAqIHRvIHJlc3VsdCBpbiBzaHV0ZG93biBpZiB0aGUgQ1BVIGRldGVjdHMgaW52YWxpZCBzdGF0ZSBpbiBTTVJBTS4KJiM0MzsJICovCiYjNDM7CVRFU1RfQVNTRVJUX0tWTV9FWElUX1JFQVNPTih2Y3B1LCBLVk1fRVhJVF9TSFVURE9XTik7CiYjNDM7CWt2bV92bV9mcmVlKHZtKTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKJiM0Mzt7CiYjNDM7CVRFU1RfUkVRVUlSRShrdm1fY3B1X2hhcyhYODZfRkVBVFVSRV9WTVgpKTsKJiM0MzsKJiM0MzsJdGVzdF9pbnZhbGlkX2wyX2d1ZXN0X3N0YXRlKCk7CiYjNDM7CXRlc3RfaW52YWxpZF9sMl9ndWVzdF9zdGF0ZV9yc20oKTsKIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjA6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODg5MwoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDY5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLVk0geDg2IFBhdGNoIGZvciBFbXVsYXRpb24gUmVxdWlyZW1lbnRzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgZnVuZGFtZW50YWxseSBhbHRlcnMgS1ZNJiMzOTtzIHg4NiBlbXVsYXRpb24gYmVoYXZpb3IsIHNwZWNpZmljYWxseSBpbiBob3cgaXQgaGFuZGxlcyBzaXR1YXRpb25zIHdoZXJlIHRoZSBndWVzdCBlbnRlcnMgYW4gaW52YWxpZCBzdGF0ZSwgcGFydGljdWxhcmx5IHVwb24gcmV0dXJuaW5nIGZyb20gU3lzdGVtIE1hbmFnZW1lbnQgTW9kZSAoU01NKSDigJMgdGhhdCYjMzk7cyBSU00sIHRvIGJlIGNsZWFyLiBUaGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIHJldm9sdmUgYXJvdW5kIHRoZSBgdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZGAgYW5kIGB2Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uYCBmdW5jdGlvbnMuIEVzc2VudGlhbGx5LCB0aGV5JiMzOTt2ZSByZW5hbWVkIGB2Y3B1X3ByZV9ydW5gIHRvIGB2Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uYCBhbmQgbm93IGhhdmUgYHVuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWRgIHdoaWNoIGlzIGNhbGxlZCBpbiBgZW11bGF0b3JfbGVhdmVfc21tYC4KClRoZSBkaWZmIHNob3dzIHRoYXQgYGVtdWxhdG9yX2xlYXZlX3NtbWAgbm93IGNhbGxzIGB1bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkYCBhZnRlciB0aGUgc3RhbmRhcmQgZW11bGF0aW9uLiBJZiB0aGlzIGNoZWNrIGZhaWxzLCB0aGVuIHdlIGdldCBgWDg2RU1VTF9VTkhBTkRMRUFCTEVgLiBUaGF0JiMzOTtzIGEgY3JpdGljYWwgcG9pbnQuIEZ1cnRoZXJtb3JlLCBga3ZtX3g4Nl92Y3B1X3ByZV9ydW5gIGhhcyBiZWVuIHNpZ25pZmljYW50bHkgbW9kaWZpZWQgdG8gY2hlY2sgYHZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb25gIGFuZCB0aGVuLCBpZiB0aGUgaW5pdGlhbGl6YXRpb24gaXNuJiMzOTt0IG5lZWRlZCwgY2hlY2tzIGlmIGB1bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkYCBpcyBzZXQuIElmICp0aGF0KiB0cmlnZ2VycywgaXQgc2V0cyB1cCBhIGBrdm1fcHJlcGFyZV9lbXVsYXRpb25fZmFpbHVyZV9leGl0YCBhbmQgcmV0dXJucy4gVGhlIG5ldyBzZWxmdGVzdCAoYHZteF9pbnZhbGlkX25lc3RlZF9ndWVzdF9zdGF0ZS5jYCkgaXMgYSBjbGVhciBpbmRpY2F0aW9uIHRoYXQgdGhpcyBSU00gc2NlbmFyaW8gd2l0aCBhbiBpbnZhbGlkIEwyIHN0YXRlIGlzIHByZWNpc2VseSB3aGF0JiMzOTtzIGJlaW5nIGFkZHJlc3NlZC4KCkdpdmVuIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBkZWVwIHdpdGhpbiBLVk0geDg2IGNvcmUsIGl0JiMzOTtzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRvIHBheSBhdHRlbnRpb24gdG8uIFNpbmNlIEtWTSBpcyBoZWF2aWx5IGZ1enplZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGFuZCBzeXprYWxsZXIgc3VwcG9ydHMgS1ZNIGZ1enppbmcsIGl0JiMzOTtzIGFic29sdXRlbHkgd29ydGggdGhlIGVmZm9ydCB0byBjaGVjayB0aGlzIG91dC4KCkkgc2hvdWxkIGZvY3VzIG15IGF0dGVudGlvbiBvbiB0aGVzZSBmdW5jdGlvbnMgc3BlY2lmaWNhbGx5OiBgZW11bGF0b3JfbGVhdmVfc21tYCwgYGt2bV94ODZfdmNwdV9wcmVfcnVuYCAoYW5kLCBzdGF0aWNhbGx5LCB0aGUgY2FsbCBzaXRlIGluIGBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bmApLCBgdm14X3VuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWRgLCBgc2V2X3ZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb25gLCBhbmQgYHRkeF92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uYC4gTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGNvZGUgZm9yIGBlbXVsYXRvcl9sZWF2ZV9zbW1gIGFuZCBga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5gIHRvIHNlZSBob3cgdGhlc2UgbmV3bHkgaW50cm9kdWNlZCBjaGVja3MgZml0IGludG8gdGhlIGV4aXN0aW5nIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjA6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZW11bGF0b3JfbGVhdmVfc21tJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zbW0uYz01MTY9c3RhdGljIGludCByc21fbG9hZF9zdGF0ZV82NChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCxcbi0tXG5hcmNoL3g4Ni9rdm0vc21tLmMtNTcyLVxuYXJjaC94ODYva3ZtL3NtbS5jOjU3MzppbnQgZW11bGF0b3JfbGVhdmVfc21tKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KVxuYXJjaC94ODYva3ZtL3NtbS5jLTU3NC17XG4tLVxuYXJjaC94ODYva3ZtL3NtbS5oPTE1OD12b2lkIGVudGVyX3NtbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuYXJjaC94ODYva3ZtL3NtbS5oOjE1OTppbnQgZW11bGF0b3JfbGVhdmVfc21tKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KTtcbmFyY2gveDg2L2t2bS9zbW0uaC0xNjAtdm9pZCBwcm9jZXNzX3NtaShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuLS1cbmFyY2gveDg2L2t2bS9zbW0uaD0xNjM9c3RhdGljIGlubGluZSBib29sIGlzX3NtbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpIHsgcmV0dXJuIGZhbHNlOyB9XG4tLVxuYXJjaC94ODYva3ZtL3NtbS5oLTE2NS0vKlxuYXJjaC94ODYva3ZtL3NtbS5oOjE2NjogKiBlbXVsYXRvcl9sZWF2ZV9zbW0gaXMgdXNlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIsIHNvIHRoZVxuYXJjaC94ODYva3ZtL3NtbS5oLTE2Ny0gKiBzdHViIGlzIGRlZmluZWQgaW4geDg2LmMuXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTU3NTQ9c3RhdGljIGJvb2wgZW11bGF0b3JfaXNfc21tKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy01NzU5LSNpZm5kZWYgQ09ORklHX0tWTV9TTU1cbmFyY2gveDg2L2t2bS94ODYuYzo1NzYwOnN0YXRpYyBpbnQgZW11bGF0b3JfbGVhdmVfc21tKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KVxuYXJjaC94ODYva3ZtL3g4Ni5jLTU3NjEte1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYz01ODE0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgeDg2X2VtdWxhdGVfb3BzIGVtdWxhdGVfb3BzID0ge1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYy01ODU2LVx0LmlzX3NtbSAgICAgICAgICAgICAgPSBlbXVsYXRvcl9pc19zbW0sXG5hcmNoL3g4Ni9rdm0veDg2LmM6NTg1NzpcdC5sZWF2ZV9zbW0gICAgICAgICAgID0gZW11bGF0b3JfbGVhdmVfc21tLFxuYXJjaC94ODYva3ZtL3g4Ni5jLTU4NTgtXHQudHJpcGxlX2ZhdWx0ICAgICAgICA9IGVtdWxhdG9yX3RyaXBsZV9mYXVsdCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDc5OQoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkV4YW1pbmluZyBQb3RlbnRpYWwgRm9jdXMgU3ltYm9scyoqCgpSaWdodCwgdGhpbmtpbmcgYWJvdXQgcmVmaW5pbmcgbXkgYW5hbHlzaXMsIEkgbmVlZCBhIGNsZWFyIGZvY3VzIHBvaW50LiBgZW11bGF0b3JfbGVhdmVfc21tYCBpcyBhIHN0cm9uZyBjb250ZW5kZXI7IGl0JiMzOTtzIGEgd2VsbC1kZWZpbmVkIHBvaW50IG9mIHBvdGVudGlhbCB0cmFuc2l0aW9uIG9yIHZ1bG5lcmFiaWxpdHkgd2l0aGluIHRoZSBlbXVsYXRpb24gcHJvY2VzcywgdGhhdCBnaXZlcyBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEJ1dCwgSSYjMzk7bSBhbHJlYWR5IHRoaW5raW5nIGFib3V0IG90aGVyIGZ1bmN0aW9ucyBpbiBteSBjdXJyZW50IGFzc2Vzc21lbnQuCgpJIHdvbmRlciBhYm91dCB0aGUgdmFsdWUgb2Ygc2hpZnRpbmcgbXkgZm9jdXMgdG8gYGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuYC4gVGhhdCBmdW5jdGlvbiBpcyBjZXJ0YWlubHkgY3JpdGljYWwgdG8gdGhlIGV4ZWN1dGlvbiBvZiBndWVzdCBjb2RlIHdpdGhpbiB0aGUgS1ZNIGVudmlyb25tZW50LiBJdCYjMzk7cyBhIGtleSBlbnRyeSBwb2ludCBmb3IgaGFuZGxpbmcgaW5zdHJ1Y3Rpb25zIGFuZCBpbnRlcmFjdGlvbnMgZnJvbSB0aGUgdmlydHVhbCBDUFUuIERlcGVuZGluZyBvbiB0aGUgbGV2ZWwgb2YgYW5hbHlzaXMgbmVlZGVkLCB0aGF0IGZ1bmN0aW9uIGNvdWxkIG9mZmVyIGluc2lnaHQgaW50byBhIGJyb2FkZXIgcmFuZ2Ugb2YgcG90ZW50aWFsbHkgaW50ZXJlc3RpbmcgYXR0YWNrIHN1cmZhY2VzIGFuZCBiZWhhdmlvcnMuIEl0JiMzOTtzIHRpbWUgdG8gZXZhbHVhdGUgaG93IEkgd2FudCB0byBzdHJ1Y3R1cmUgbXkgYXNzZXNzbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMDowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fYXJjaF92Y3B1X2lvY3RsX3J1biYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L2t2bS9hcm0uYz0xMDY2PXN0YXRpYyBpbnQga3ZtX3ZjcHVfc3VzcGVuZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9hcm02NC9rdm0vYXJtLmMtMTA5Mi1cdCAqIE90aGVyd2lzZSwgd2Ugd2VyZSB1bmJsb2NrZWQgdG8gcHJvY2VzcyBhIGRpZmZlcmVudCBldmVudCwgc3VjaCBhcyBhXG5hcmNoL2FybTY0L2t2bS9hcm0uYzoxMDkzOlx0ICogcGVuZGluZyBzaWduYWwuIFJldHVybiAxIGFuZCBhbGxvdyBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bigpIHRvXG5hcmNoL2FybTY0L2t2bS9hcm0uYy0xMDk0LVx0ICogcHJvY2VzcyB0aGUgZXZlbnQuXG4tLVxuYXJjaC9hcm02NC9rdm0vYXJtLmM9MTIzMD1zdGF0aWMgaW50IG5vaW5zdHIga3ZtX2FybV92Y3B1X2VudGVyX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvYXJtNjQva3ZtL2FybS5jLTEyNDEtLyoqXG5hcmNoL2FybTY0L2t2bS9hcm0uYzoxMjQyOiAqIGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuIC0gdGhlIG1haW4gVkNQVSBydW4gZnVuY3Rpb24gdG8gZXhlY3V0ZSBndWVzdCBjb2RlXG5hcmNoL2FybTY0L2t2bS9hcm0uYy0xMjQzLSAqIEB2Y3B1Olx0VGhlIFZDUFUgcG9pbnRlclxuLS1cbmFyY2gvYXJtNjQva3ZtL2FybS5jLTEyNTAtICovXG5hcmNoL2FybTY0L2t2bS9hcm0uYzoxMjUxOmludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL2FybTY0L2t2bS9hcm0uYy0xMjUyLXtcbi0tXG5hcmNoL2FybTY0L2t2bS9oeXAvbnZoZS9zd2l0Y2guYz0yMjY9c3RhdGljIGlubGluZSBib29sIGZpeHVwX2d1ZXN0X2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgKmV4aXRfY29kZSlcbi0tXG5hcmNoL2FybTY0L2t2bS9oeXAvbnZoZS9zd2l0Y2guYy0yMzgtXHQgKiBpdC4gIFRoZSBjaGVjayBiZWxvdyBpcyBiYXNlZCBvbiB0aGUgb25lIGluXG5hcmNoL2FybTY0L2t2bS9oeXAvbnZoZS9zd2l0Y2guYzoyMzk6XHQgKiBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bigpLlxuYXJjaC9hcm02NC9rdm0vaHlwL252aGUvc3dpdGNoLmMtMjQwLVx0ICovXG4tLVxuYXJjaC9sb29uZ2FyY2gva3ZtL3ZjcHUuYz0xODI1PXZvaWQga3ZtX2FyY2hfdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvbG9vbmdhcmNoL2t2bS92Y3B1LmMtMTg0OC1cbmFyY2gvbG9vbmdhcmNoL2t2bS92Y3B1LmM6MTg0OTppbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC9sb29uZ2FyY2gva3ZtL3ZjcHUuYy0xODUwLXtcbi0tXG5hcmNoL21pcHMva3ZtL21pcHMuYz00MTE9c3RhdGljIGludCBub2luc3RyIGt2bV9taXBzX3ZjcHVfZW50ZXJfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9taXBzL2t2bS9taXBzLmMtNDIxLVxuYXJjaC9taXBzL2t2bS9taXBzLmM6NDIyOmludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL21pcHMva3ZtL21pcHMuYy00MjMte1xuLS1cbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jPTE3MzI9aW50IGt2bV92Y3B1X2lvY3RsX3NldF9vbmVfcmVnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9vbmVfcmVnICpyZWcpXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMtMTc4MC1cbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jOjE3ODE6aW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jLTE3ODIte1xuLS1cbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYz03NTA9c3RhdGljIHZvaWQgbm9pbnN0ciBrdm1fcmlzY3ZfdmNwdV9lbnRlcl9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmMtNzU5LVx0ICogSFRJTlNUKSBoZXJlIGJlY2F1c2Ugd2UgZG8gbG9jYWxfaXJxX2VuYWJsZSgpIGFmdGVyIHRoaXNcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYzo3NjA6XHQgKiBmdW5jdGlvbiBpbiBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bigpIHdoaWNoIGNhbiByZXN1bHQgaW5cbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYy03NjEtXHQgKiBhbiBpbnRlcnJ1cHQgaW1tZWRpYXRlbHkgYWZ0ZXIgbG9jYWxfaXJxX2VuYWJsZSgpIGFuZCBjYW5cbi0tXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmMtODI5LVxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jOjgzMDppbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC9yaXNjdi9rdm0vdmNwdS5jLTgzMS17XG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTQ5OTc9c3RhdGljIHZvaWQgc3RvcmVfcmVncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTUwMTctXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NTAxODppbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTUwMTkte1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYz04ODQ0PXN0YXRpYyBpbnQga3ZtX3g4Nl92Y3B1X3ByZV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy04ODgwLVxuYXJjaC94ODYva3ZtL3g4Ni5jOjg4ODE6aW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS94ODYuYy04ODgyLXtcbi0tXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg9MTYyMz1pbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfZ3Vlc3RfZGVidWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTE2MjQtXHRcdFx0XHRcdHN0cnVjdCBrdm1fZ3Vlc3RfZGVidWcgKmRiZyk7XG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg6MTYyNTppbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0xNjI2LVxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmM9NDQxND1zdGF0aWMgbG9uZyBrdm1fdmNwdV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQ0NzctXHRcdHZjcHUtXHUwMDNld2FudHNfdG9fcnVuID0gIVJFQURfT05DRSh2Y3B1LVx1MDAzZXJ1bi1cdTAwM2VpbW1lZGlhdGVfZXhpdF9fdW5zYWZlKTtcbnZpcnQva3ZtL2t2bV9tYWluLmM6NDQ3ODpcdFx0ciA9IGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKHZjcHUpO1xudmlydC9rdm0va3ZtX21haW4uYy00NDc5LVx0XHR2Y3B1LVx1MDAzZXdhbnRzX3RvX3J1biA9IGZhbHNlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIwOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNzc4CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqUmVmbGVjdGluZyBvbiBLVk0gRW50cnkgUG9pbnRzKioKCkhtbSwgYGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuYOKApiBpdCBqdXN0IGZlZWxzIGEgbGl0dGxlICp0b28qIGJyb2FkLCBkb2VzbiYjMzk7dCBpdD8gSXQmIzM5O3MgdGhlIGNvcmUgZW50cnkgcG9pbnQgZm9yIEtWTSB2Q1BVIGV4ZWN1dGlvbiwgc3VyZSwgYnV0IHRoZSBuYW1lIGl0c2VsZiBkb2VzbiYjMzk7dCBzY3JlYW0gYW55dGhpbmcgc3BlY2lmaWMgYWJvdXQgKndoYXQqIGl0JiMzOTtzIGRvaW5nLiBJIG1lYW4sIGl04oCZcyBub3QgKndyb25nKiwgYnV0IGl0IGxhY2tzIGEgY2VydGFpbuKApiBncmFudWxhcml0eS4gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgdG8gaW1wcm92ZSB0aGUgY29kZS4gSXTigJlzIGxpa2UgY2FsbGluZyBhbiBlbnRpcmUgb3BlcmF0aW5nIHN5c3RlbSBmdW5jdGlvbiAmIzM0O3Byb2Nlc3NfZXhlY3V0aW9uJiMzNDsuIAoKTm93LCBsZXQmIzM5O3MgY29uc2lkZXIgYW5vdGhlciBuYW1lLCBwZXJoYXBzIHNvbWV0aGluZyBtb3JlIGRlc2NyaXB0aXZlLiBJ4oCZdmUgYmVlbiB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBmdW5jdGlvbiwgYW5kIEkmIzM5O20gcmVtaW5kZWQgb2YgYHZteF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkYC4gSXQmIzM5O3MgYSBiaXQgb2YgYSBtb3V0aGZ1bCwgYWRtaXR0ZWRseSwgYnV0IGl0IHBvaW50cyB0byBhIHZlcnkgc3BlY2lmaWMgYW5kIGNyaXRpY2FsIGFzcGVjdCBvZiB0aGUgS1ZNIHdvcmtmbG93OiB3aGVuIHRoZSBoYXJkd2FyZSBjYW4mIzM5O3QgZGlyZWN0bHkgaGFuZGxlIHNvbWV0aGluZy4gSXQmIzM5O3MgdGhhdCBjYXNlIHdoZW4gdGhlIHNvZnR3YXJlIG5lZWRzIHRvIGVtdWxhdGUgc29tZXRoaW5nIHRoYXQgdGhlIENQVSBjYW4mIzM5O3QgbWFuYWdlIG9uIGl0cyBvd24uIAoKTWF5YmUgdGhlIG5hbWUgY291bGQgYmUgYSBjb21wcm9taXNlPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIwOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZteF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvbWFpbi5jPTE2Nj1zdGF0aWMgYm9vbCB2dF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xNzItXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzoxNzM6XHRyZXR1cm4gdm14X3VuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQodmNwdSk7XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xNzQtfVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmM9NjAyMT1zdGF0aWMgaW50IGhhbmRsZV9ubWlfd2luZG93KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTYwMzctICovXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjYwMzg6Ym9vbCB2bXhfdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTYwMzkte1xuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmM9NjA2NT1zdGF0aWMgaW50IGhhbmRsZV9pbnZhbGlkX2d1ZXN0X3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTYwOTAtXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjYwOTE6XHRcdGlmICh2bXhfdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZCh2Y3B1KSkge1xuYXJjaC94ODYva3ZtL3ZteC92bXguYy02MDkyLVx0XHRcdGt2bV9wcmVwYXJlX2VtdWxhdGlvbl9mYWlsdXJlX2V4aXQodmNwdSk7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmg9MzI9dm9pZCB2bXhfdXBkYXRlX2VtdWxhdGVkX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG5hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaDozMzpib29sIHZteF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG5hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaC0zNC1pbnQgdm14X3NldF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgbXNyX2RhdGEgKm1zcl9pbmZvKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzY4NAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gaW50ZXJuYWwgcHJvY2VzczoKCioqSW50ZXJuYWwgQXVkaXQgb2YgRm9jdXMgU3ltYm9scyBhbmQgUG90ZW50aWFsIEV4cGFuc2lvbioqCgpSaWdodCwgc28gYHZteF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkYCDigJMgdGhhdCYjMzk7cyBhIHNvbGlkIGlkZW50aWZpZXIsIGEgZ29vZCBqdW1waW5nLW9mZiBwb2ludCBmb3IgdGhpcyBjdXJyZW50IGxpbmUgb2YgaW52ZXN0aWdhdGlvbi4gSXQgY2xlYXJseSBmbGFncyBhIHNwZWNpZmljIHNjZW5hcmlvLiBOb3csIHRoZSBuZXh0IHF1ZXN0aW9uIGlzIGFsd2F5cywgYXJlIHdlIG1pc3NpbmcgYW55dGhpbmc/IElzIHRoZXJlIGEgYnJvYWRlciBzZXQgb2YgY2lyY3Vtc3RhbmNlcyB0byBjb25zaWRlciB0aGF0IHRoaXMgc2luZ3VsYXIgdGVybSBkb2VzbiYjMzk7dCBxdWl0ZSBlbmNvbXBhc3M/CgpNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGEgY291cGxlIG9mIHJlbGF0ZWQgYXJlYXMsIHBhcnRpY3VsYXJseSB0aGUgc2VjdXJlIGV4ZWN1dGlvbiBlbnZpcm9ubWVudHMgd2UmIzM5O3JlIHNlZWluZyBtb3JlIGFuZCBtb3JlIG9mLiBTcGVjaWZpY2FsbHksIEkgd29uZGVyIGlmIHdlIHNob3VsZCBleHBhbmQgdGhlIGZvY3VzIGFuZCBjb25zaWRlciBpZiBgdGR4X3ZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb25gIGFuZCBgc2V2X3ZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb25gIG1pZ2h0IGFsc28gYmUgdmFsdWFibGUgZm9jdXMgc3ltYm9scy4gVGhleSYjMzk7cmUgcmVsYXRlZC4gSWYgdGhhdCBzeW1ib2wgZG9lcyBub3QgZXhpc3QsIHRoZW4gaXQgc2hvdWxkLiBXZSBuZWVkIHN5bWJvbHMgZm9yIHRob3NlLiBJIHNob3VsZCBwcm9iYWJseSBhZGQgdGhvc2UgdG8gYSBsaXN0IHNvbWV3aGVyZS4gUGVyaGFwcyB0aGlzIGNvdWxkIGVuY29tcGFzcyBhIHdob2xlIGNsYXNzIG9mIHNpbWlsYXIgc2l0dWF0aW9ucywgYW5kIHRob3NlIHN5bWJvbHMgd2lsbCBoZWxwIHJlZmluZSB0aGUgZm9jdXMgb2YgYW5hbHlzaXMuIEEgbW9yZSBjb21wcmVoZW5zaXZlIGFwcHJvYWNoIHRvIGNhdGNoaW5nIGVkZ2UgY2FzZXMsIHNvIHRvIHNwZWFrLiBJdCYjMzk7cyBhYm91dCBlbnN1cmluZyB3ZSYjMzk7cmUgbm90IGp1c3QgcmVhY3RpbmcgdG8gYHZteF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkYCBpbiBpc29sYXRpb24gYnV0IHNlZWluZyB0aGUgYmlnZ2VyIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIwOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RkeF92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvbWFpbi5jPTE0Mz1zdGF0aWMgYm9vbCB2dF92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xNDUtXHRyZXR1cm4gaXNfdGRfdmNwdSh2Y3B1KSBcdTAwMjZcdTAwMjZcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjE0NjpcdCAgICAgICB0ZHhfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbih2Y3B1KTtcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTE0Ny19XG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYz04NjM9dm9pZCB0ZHhfdmNwdV9mcmVlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTg5OS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6OTAwOmJvb2wgdGR4X3ZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy05MDEte1xuLS1cbmFyY2gveDg2L2t2bS92bXgveDg2X29wcy5oPTEzOT12b2lkIHRkeF92Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KTtcbmFyY2gveDg2L2t2bS92bXgveDg2X29wcy5oOjE0MDpib29sIHRkeF92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG5hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaC0xNDEtZmFzdHBhdGhfdCB0ZHhfdmNwdV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgcnVuX2ZsYWdzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjA6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ0NjQKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkluaXRpYWwgQXNzZXNzbWVudCBvZiBhIFREWCB2Q1BVJiMzOTtzIFN0YXR1cyoqCgpSaWdodCwgYHRkeF92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uYC4gVGhhdCYjMzk7cyBhIGdvb2Qgc2lnbi4gSXQgaW1tZWRpYXRlbHkgc3VnZ2VzdHMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIHZDUFUgdGhhdCYjMzk7cyBhdCB0aGUgY29ycmVjdCBzdGFnZTogcmVhZHksIGJ1dCBub3QgeWV0IGZ1bGx5IGNvbmZpZ3VyZWQgd2l0aGluIHRoZSBURFggZW52aXJvbm1lbnQuIFRoaXMgZmxhZywgaWYgc2V0IGFzIGV4cGVjdGVkLCBjb25maXJtcyB0aGF0IHRoZSBpbmZyYXN0cnVjdHVyZSBoYXMgcHJvcGVybHkgaWRlbnRpZmllZCB0aGlzIHZpcnR1YWwgQ1BVIGFzIHJlcXVpcmluZyB0aGUgcHJvcGVyIFREWCBzZXR1cCBwcm9jZWR1cmVzLiBUaGlzIG1lYW5zIHRoZSBvdmVyYWxsIFREWCBhcmNoaXRlY3R1cmUgaXMgZnVuY3Rpb25pbmcsIGF0IGxlYXN0IGF0IHRoaXMgcHJlbGltaW5hcnkgc3RhZ2UuIFdlIGNhbiBwcm9iYWJseSBtYWtlIGEgZ29vZCBjb25jbHVzaW9uIGZyb20gdGhlcmUgYW5kIGtlZXAgbW92aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMDowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZXZfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTM1Mjk9dm9pZCBzZXZfZnJlZV92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTM1NTgtXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjM1NTk6Ym9vbCBzZXZfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTM1NjAte1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9NTMyMj1zdHJ1Y3Qga3ZtX3g4Nl9vcHMgc3ZtX3g4Nl9vcHMgX19pbml0ZGF0YSA9IHtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTU0MzctI2lmZGVmIENPTkZJR19LVk1fQU1EX1NFVlxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo1NDM4Olx0LnZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24gPSBzZXZfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbixcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNTQzOS1cdC5kZXZfZ2V0X2F0dHIgPSBzZXZfZGV2X2dldF9hdHRyLFxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg9OTc5PXZvaWQgc2V2X2VzX3VubWFwX2doY2Ioc3RydWN0IHZjcHVfc3ZtICpzdm0pO1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtOTgxLSNpZmRlZiBDT05GSUdfS1ZNX0FNRF9TRVZcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg6OTgyOmJvb2wgc2V2X3ZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtOTgzLWludCBzZXZfbWVtX2VuY19pb2N0bChzdHJ1Y3Qga3ZtICprdm0sIHZvaWQgX191c2VyICphcmdwKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjA6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxMDYKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAzMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLVk0gUGF0Y2ggZm9yIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIGBzZXZfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbmAgbG9va3MgcHJvbWlzaW5nLCB0aGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTm93LCB0aGUgcmVhbCBxdWVzdGlvbiBpcywgd2hhdCBDT05GSUcgb3B0aW9ucyBhcmUgZ29pbmcgdG8gYmUgY3JpdGljYWwgZm9yIHRoaXMgcGF0Y2ggdG8gZnVuY3Rpb24gY29ycmVjdGx5PwoKSSBzZWUgdGhlIHBhdGNoIHRvdWNoZXMgYSBidW5jaCBvZiBLVk0tcmVsYXRlZCBmaWxlczogYHNtbS5jYCwgYHN2bS9zZXYuY2AsIGBzdm0vc3ZtLmNgLCBgdm14L21haW4uY2AsIGB2bXgvdGR4LmNgLCBgdm14L3ZteC5jYCwgYW5kIGB4ODYuY2AuIFRoYXQmIzM5O3MgYSBjbGVhciBpbmRpY2F0aW9uIHRoYXQgS1ZNIGl0c2VsZiBpcyBnb2luZyB0byBiZSBhIGhhcmQgcmVxdWlyZW1lbnQg4oCTIGBDT05GSUdfS1ZNYCBpcyBwcmV0dHkgc3RhbmRhcmQgYWNyb3NzIEtWTSBidWlsZHMsIHNvIHRoYXQmIzM5O3MgYSBnaXZlbi4KCkxldCYjMzk7cyBkaWcgaW4gYSBiaXQgbW9yZS4gTG9va2luZyBhdCBgYXJjaC94ODYva3ZtL3N2bS9zdm0uY2AsIEkgc3BvdCBhIHJlZmVyZW5jZSB0byBgQ09ORklHX0tWTV9BTURfU0VWYCwgc3BlY2lmaWNhbGx5OgoKYGBgYwojaWZkZWYgQ09ORklHX0tWTV9BTURfU0VWCgkudmNwdV9uZWVkc19pbml0aWFsaXphdGlvbiA9IHNldl92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uLApgYGAKCkJpbmdvISBUaGF0IHNlZW1zIHByZXR0eSBleHBsaWNpdC4gYEtWTV9BTURfU0VWYCBpcyBkZWZpbml0ZWx5IGdvaW5nIHRvIGJlIGEga2V5IGNvbmZpZyB0byBlbmFibGUgaGVyZS4gSXQgaXMgZGVmaW5pdGVseSBpbXBvcnRhbnQsIGFuZCBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IGl0IGlzIGluY2x1ZGVkLgoKQW5kIHRoZW4gSSBzZWUgYENPTkZJR19LVk1fU01NYCBtZW50aW9uZWQgaW4gYGFyY2gveDg2L2t2bS92bXgveDg2X29wcy5oYDoKCmBgYGMKI2lmZGVmIENPTkZJR19LVk1fU01NCmBgYAoKU28sIGxldCBtZSBqdXN0IGNoZWNrIGlmIHRoYXQgaXMgYWN0dWFsbHkgYSBjb25maWd1cmF0aW9uIHRoYXQgbmVlZHMgdG8gYmUgaW5jbHVkZWQuIEkgbmVlZCB0byBrZWVwIGFuIGV5ZSBvbiB0aGlzIG9uZSwgZm9yIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIwOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk1fU01NJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnPTE3Mz1jb25maWcgS1ZNX0lPQVBJQ1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE4Mzpjb25maWcgS1ZNX1NNTVxuYXJjaC94ODYva3ZtL0tjb25maWctMTg0LVx0Ym9vbCBcJiMzNDtTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIGVtdWxhdGlvblwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTkyNgoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OgoKKipDaGVja2luZyB0aGUgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKUmlnaHQsIHNvIGBLVk1fU01NYCwgdGhhdCYjMzk7cyBkZWZpbml0ZWx5IGEgY29uZmlndXJhdGlvbiBvcHRpb24sIGEga25vd24gcXVhbnRpdHkuIE15IGZvY3VzIG5vdyBpcywgaXMgdGhlcmUgYSByZWxhdGVkIFREWCAoVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMpIGNvbmZpZ3VyYXRpb24/IEl0JiMzOTtzIHRoZSBsb2dpY2FsIG5leHQgc3RlcCBpbiBteSBhc3Nlc3NtZW50LCBJIG5lZWQgdG8ga25vdyBpZiBpdCYjMzk7cyB0aGVyZS4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gZXN0YWJsaXNoIHRoZSBzY29wZSBvZiByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLCBhbmQgVERYIGlzIHRoZSBrZXkgcG9pbnQgSSBoYXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMDowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNX0lOVEVMX1REWCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXHRib29sIFwmIzM0O0ludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjA6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYxOTEKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25maWd1cmF0aW9uIFJldmlldyoqCgpPa2F5LCBzbyBJJiMzOTttIGRlYWxpbmcgd2l0aCB0aGUgYEtWTV9JTlRFTF9URFhgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBZZXAsIHRoYXQmIzM5O3MgZGVmaW5pdGVseSBhIGNvbmZpZywgbm8gcXVlc3Rpb24uIFRoZSBnb2FsIGhlcmUgaXMgdG8gZ2V0IGV2ZXJ5dGhpbmcgc2V0IHVwIGNvcnJlY3RseSBmb3IgdGhpcyBzcGVjaWZpYyB2aXJ0dWFsaXphdGlvbiB0ZWNoLgoKQWxyaWdodCwgc28gdG8gbWFrZSB0aGlzIHRoaW5nIHdvcmssIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlc2UgYXJlIGVuYWJsZWQgdG9vOiBgS1ZNYCwgYEtWTV9TTU1gLCBgS1ZNX0FNRF9TRVZgLCBhbmQgb2YgY291cnNlIGBLVk1fSU5URUxfVERYYCBpdHNlbGYuIFRoYXQmIzM5O3MgYSBwcmV0dHkgc3RhbmRhcmQgc2V0IG9mIGJhc2UgcmVxdWlyZW1lbnRzLCBub3RoaW5nIHRvbyBzdXJwcmlzaW5nLgoKTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBLVk1fSU5URUxfVERYYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgcmVhbCBkZXRhaWwgbGllcywgdGhlIGdyb3VuZHdvcmsuIE5lZWQgdG8ga25vdyB3aGF0IGVsc2UgdGhpcyByZWxpZXMgb24uIFRpbWUgdG8gY2hlY2sgdGhvc2UgZGVwZW5kZW5jaWVzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNX0lOVEVMX1REWCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzQ6Y29uZmlnIEtWTV9JTlRFTF9URFhcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cdGJvb2wgXCYjMzQ7SW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjU5OQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gS1ZNIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgYSBzcGVjaWZpYyBhc3BlY3Qgb2YgdGhlIEtWTSBhcmNoaXRlY3R1cmUgb24geDg2LCBwcm9iYWJseSByZWxhdGVkIHRvIGEgZmVhdHVyZSBvciBzZXR0aW5nLiBNeSBpbnR1aXRpb24gdGVsbHMgbWUgdG8gY2hlY2sgdGhlIGBLY29uZmlnYCBmaWxlLCBhcyBpdCYjMzk7cyB0aGUgdXN1YWwgc3RhcnRpbmcgcG9pbnQgZm9yIGV4cGxvcmluZyBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSYjMzk7bSBnb2luZyB0byBqdW1wIHRvIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AgYW5kIHpvb20gaW4gYXJvdW5kIGxpbmUgMTM0LiBUaGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhleSBwdXQgdGhlIG1vcmUgc3BlY2lmaWMgY29uZmlnIG9wdGlvbnMgcmVsYXRpbmcgdG8gdGhlIEtWTS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgdGhlIHJlbGV2YW50IHNldHRpbmdzIGFuZCBkZXBlbmRlbmNpZXMuIFRoaXMgaXMgb2Z0ZW4gd2hlcmUgdGhpbmdzIGxpa2UgZmVhdHVyZSBmbGFncyBvciBkZXZpY2Ugc3VwcG9ydCBhcmUgZGVmaW5lZCwgc28gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB3aGF0IEkmIzM5O20gbG9va2luZyBmb3IgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIwOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEzMDpcdFx0ICBndWVzdHMgdmlhIGEgZGV2aWNlIG5vZGUsIGUuZy4gL2Rldi9zZ3hfdmVwYy5cbiAxMzE6XHRcbiAxMzI6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAxMzM6XHRcbiAxMzQ6XHRjb25maWcgS1ZNX0lOVEVMX1REWFxuIDEzNTpcdFx0Ym9vbCBcJiMzNDtJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBzdXBwb3J0XCYjMzQ7XG4gMTM2Olx0XHRkZWZhdWx0IHlcbiAxMzc6XHRcdGRlcGVuZHMgb24gSU5URUxfVERYX0hPU1RcbiAxMzg6XHRcdHNlbGVjdCBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xuIDEzOTpcdFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9QT1BVTEFURVxuIDE0MDpcdFx0aGVscFxuIDE0MTpcdFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBsYXVuY2hpbmcgSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWClcbiAxNDI6XHRcdCAgY29uZmlkZW50aWFsIFZNcyBvbiBJbnRlbCBwcm9jZXNzb3JzLlxuIDE0MzpcdFxuIDE0NDpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDE0NTpcdFxuIDE0NjpcdGNvbmZpZyBLVk1fQU1EXG4gMTQ3Olx0XHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcJiMzNDtcbiAxNDg6XHRcdGRlcGVuZHMgb24gS1ZNIFx1MDAyNlx1MDAyNiAoQ1BVX1NVUF9BTUQgfHwgQ1BVX1NVUF9IWUdPTilcbiAxNDk6XHRcdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcxNDAKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBrZWVwaW5nIGluIG1pbmQgbXkgZXhwZXJ0aXNlIGluIHRoaXMgYXJlYToKCioqQW5hbHl6aW5nIHRoZSBEZXBlbmRlbmN5OiBJTlRFTF9URFhfSE9TVCoqCgpPa2F5LCBzbyBgSU5URUxfVERYX0hPU1RgIGhhcyBwb3BwZWQgdXAuIFN0cmFpZ2h0IGF3YXksIEkgcmVjb2duaXplIHRoYXQgYXMgYSBjcml0aWNhbCBkZXBlbmRlbmN5LiBHaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIGNvbmZpZGVudGlhbCBjb21wdXRpbmcgZW52aXJvbm1lbnRzLCB0aGlzIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdlJiMzOTtyZSBsb29raW5nIGF0IEludGVsJiMzOTtzIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIGZvciB0aGUgaG9zdC4gVGhpcyBsaWtlbHkgbWVhbnMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIHN5c3RlbSBhaW1pbmcgZm9yIHN0cm9uZyBpc29sYXRpb24sIHByb2JhYmx5IGxldmVyYWdpbmcgaGFyZHdhcmUtYmFzZWQgc2VjdXJpdHkgZmVhdHVyZXMgYXQgdGhlIENQVSBsZXZlbCB0byBjcmVhdGUgcHJvdGVjdGVkIGV4ZWN1dGlvbiBlbmNsYXZlcyBmb3IgdmlydHVhbCBtYWNoaW5lcyBvciBjb250YWluZXIgd29ya2xvYWRzLiBUaGUgZmFjdCB0aGF0IGl0JiMzOTtzIGEgKmhvc3QqIGNvbXBvbmVudCBhbHNvIGZsYWdzIGl0cyBzaWduaWZpY2FuY2UgaW4gdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLiBXZSBuZWVkIHRvIGJlIGNyeXN0YWwgY2xlYXIgYWJvdXQgaG93IHRoaXMgZGVwZW5kZW5jeSBpcyBpbmNvcnBvcmF0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIwOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJTlRFTF9URFhfSE9TVCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9LY29uZmlnPTE4NDQ9Y29uZmlnIFg4Nl9VU0VSX1NIQURPV19TVEFDS1xuLS1cbmFyY2gveDg2L0tjb25maWctMTg2My1cbmFyY2gveDg2L0tjb25maWc6MTg2NDpjb25maWcgSU5URUxfVERYX0hPU1RcbmFyY2gveDg2L0tjb25maWctMTg2NS1cdGJvb2wgXCYjMzQ7SW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgaG9zdCBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIwOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NDQyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKkRpdmluZyBpbnRvIHRoZSB4ODYgQXJjaGl0ZWN0dXJlIENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgYGFyY2gveDg2L0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHRoZSB4ODYgYXJjaGl0ZWN0dXJlLiBMZXQmIzM5O3Mgc3RhcnQgYXJvdW5kIGxpbmUgMTg2NCDigJMgdGhhdCYjMzk7cyBvZnRlbiBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGV4cGxvcmluZyBzcGVjaWZpYyBmZWF0dXJlIHNldHMgb3IgcmVsYXRlZCBzZXR0aW5ncy4gSG9wZWZ1bGx5LCB0aGlzIHNlY3Rpb24gd2lsbCBzaGVkIHNvbWUgbGlnaHQgb24gdGhlIGFzcGVjdHMgSSYjMzk7bSB0cnlpbmcgdG8gdW5kZXJzdGFuZC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBzb21lIGNydWNpYWwgZGV0YWlscyBhYm91dCBpdHMgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoZXJlLCBsaWtlbHkgcmVsYXRlZCB0byBbaW5zZXJ0IHlvdXIgZmllbGQmIzM5O3MgZXhwZWN0YXRpb24gZnJvbSBsb29raW5nIGF0IGBhcmNoL3g4Ni9LY29uZmlnYF0uIFRoaXMgc2hvdWxkIGJlIGEgZ29vZCBwbGFjZSB0byBzdGFydCBteSBpbnZlc3RpZ2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4NjA6XHRcdCAgU2VlIERvY3VtZW50YXRpb24vYXJjaC94ODYvc2hzdGsucnN0IGZvciBtb3JlIGluZm9ybWF0aW9uLlxuMTg2MTpcdFxuMTg2MjpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuMTg2MzpcdFxuMTg2NDpcdGNvbmZpZyBJTlRFTF9URFhfSE9TVFxuMTg2NTpcdFx0Ym9vbCBcJiMzNDtJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBob3N0IHN1cHBvcnRcJiMzNDtcbjE4NjY6XHRcdGRlcGVuZHMgb24gQ1BVX1NVUF9JTlRFTFxuMTg2NzpcdFx0ZGVwZW5kcyBvbiBYODZfNjRcbjE4Njg6XHRcdGRlcGVuZHMgb24gS1ZNX0lOVEVMXG4xODY5Olx0XHRkZXBlbmRzIG9uIFg4Nl9YMkFQSUNcbjE4NzA6XHRcdHNlbGVjdCBBUkNIX0tFRVBfTUVNQkxPQ0tcbjE4NzE6XHRcdGRlcGVuZHMgb24gQ09OVElHX0FMTE9DXG4xODcyOlx0XHRkZXBlbmRzIG9uIFg4Nl9NQ0VcbjE4NzM6XHRcdGhlbHBcbjE4NzQ6XHRcdCAgSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgcHJvdGVjdHMgZ3Vlc3QgVk1zIGZyb20gbWFsaWNpb3VzXG4xODc1Olx0XHQgIGhvc3QgYW5kIGNlcnRhaW4gcGh5c2ljYWwgYXR0YWNrcy4gIFRoaXMgb3B0aW9uIGVuYWJsZXMgbmVjZXNzYXJ5IFREWFxuMTg3NjpcdFx0ICBzdXBwb3J0IGluIHRoZSBob3N0IGtlcm5lbCB0byBydW4gY29uZmlkZW50aWFsIFZNcy5cbjE4Nzc6XHRcbjE4Nzg6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbjE4Nzk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc5NzIKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS2VybmVsIERlcGVuZGVuY2llcyBmb3IgU2VjdXJlIEV4ZWN1dGlvbiBFbnZpcm9ubWVudHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBob3cgdGhleSByZWxhdGUgdG8gc3BlY2lmaWMgdGVjaG5vbG9naWVzLiBJIHNlZSB0aGF0IGBJTlRFTF9URFhfSE9TVGAgaXMgZGVwZW5kZW50IG9uIGEgZmV3IGtleSBjb21wb25lbnRzOiBgS1ZNX0lOVEVMYCwgd2hpY2ggaXMgZXhwZWN0ZWQsIG9idmlvdXNseSByZWxhdGVkIHRvIEludGVsJiMzOTtzIFZpcnR1YWxpemF0aW9uLCBhcyB3ZWxsIGFzIGBYODZfWDJBUElDYCBmb3IgaW50ZXJydXB0IGhhbmRsaW5nLCBgQ09OVElHX0FMTE9DYCBmb3IgY29udGlndW91cyBtZW1vcnkgYWxsb2NhdGlvbiAoaW1wb3J0YW50IGZvciBzZWN1cml0eSBpc29sYXRpb24pLCBhbmQgYFg4Nl9NQ0VgIGZvciBNYWNoaW5lIENoZWNrIEV4Y2VwdGlvbnMgaGFuZGxpbmcg4oCTIGFub3RoZXIgaW1wb3J0YW50IHBhcnQgb2YgaGFyZHdhcmUgbW9uaXRvcmluZy4KCk5vdywgSSBuZWVkIHRvIHNoaWZ0IG15IGZvY3VzLiBNeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgZGVwZW5kZW5jaWVzIGZvciBgS1ZNX0FNRF9TRVZgLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgQU1EJiMzOTtzIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgcmVsYXRlcyB0byBvdGhlciBrZXJuZWwgY29tcG9uZW50cy4gVGhpcyBpcyBjcml0aWNhbCBmb3IgZ2V0dGluZyBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIGxhbmRzY2FwZSBvZiBzZWN1cmUgZXhlY3V0aW9uIGVudmlyb25tZW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjA6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTV9BTURfU0VWJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnPTE0Nj1jb25maWcgS1ZNX0FNRFxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cdGJvb2wgXCYjMzQ7QU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODM1NgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gS1ZNIENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIEtWTSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBgYXJjaC94ODYva3ZtL0tjb25maWdgLiBJJiMzOTttIGd1ZXNzaW5nIHRoYXQgbGluZSAxNTYgb3IgdGhlcmVhYm91dHMgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB3aGF0ZXZlciBJJiMzOTttIGN1cnJlbnRseSBpbnZlc3RpZ2F0aW5nLiBJdCYjMzk7cyBsaWtlbHkgcmVsYXRlZCB0byBhIHNwZWNpZmljIGZlYXR1cmUgb3IgZGVwZW5kZW5jeSBJJiMzOTttIHRyeWluZyB0byB1bmRlcnN0YW5kLCBvciBwZXJoYXBzIGEgYnVnIGZpeCBJJiMzOTttIGNoYXNpbmcgZG93biB3aXRoaW4gdGhlIEtWTSBmcmFtZXdvcmsuIEtub3dpbmcgdGhlIGFyY2hpdGVjdHVyZSwgSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBzZXR0aW5ncyBkaXJlY3RseSBhZmZlY3RpbmcgeDg2IHZpcnR1YWxpemF0aW9uIGJlaGF2aW9yIC0gdGhpbmdzIGxpa2UgaGFyZHdhcmUgdmlydHVhbGl6YXRpb24gZXh0ZW5zaW9ucywgTVNSIGhhbmRsaW5nLCBvciBpbnRlcnJ1cHQgZGVsaXZlcnkgbWVjaGFuaXNtcy4gSSBhbnRpY2lwYXRlIHRoaXMgbGluZSB3aWxsIGVpdGhlciBiZSBhIHJlbGV2YW50IG9wdGlvbiBkZWZpbml0aW9uIGl0c2VsZiwgb3IgYSByZWZlcmVuY2UgdG8gYW5vdGhlciBzZWN0aW9uIG9yIGRlcGVuZGVuY3kgd2l0aGluIHRoZSBLY29uZmlnIHN0cnVjdHVyZS4gVGltZSB0byBzZWUgd2hhdCYjMzk7cyB3aGF0IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNTA6XHRcdCAgUHJvdmlkZXMgc3VwcG9ydCBmb3IgS1ZNIG9uIEFNRCBwcm9jZXNzb3JzIGVxdWlwcGVkIHdpdGggdGhlIEFNRC1WXG4gMTUxOlx0XHQgIChTVk0pIGV4dGVuc2lvbnMuXG4gMTUyOlx0XG4gMTUzOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuIDE1NDpcdFx0ICB3aWxsIGJlIGNhbGxlZCBrdm0tYW1kLlxuIDE1NTpcdFxuIDE1NjpcdGNvbmZpZyBLVk1fQU1EX1NFVlxuIDE1NzpcdFx0Ym9vbCBcJiMzNDtBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XCYjMzQ7XG4gMTU4Olx0XHRkZWZhdWx0IHlcbiAxNTk6XHRcdGRlcGVuZHMgb24gS1ZNX0FNRCBcdTAwMjZcdTAwMjYgWDg2XzY0XG4gMTYwOlx0XHRkZXBlbmRzIG9uIENSWVBUT19ERVZfU1BfUFNQIFx1MDAyNlx1MDAyNiAhKEtWTV9BTUQ9eSBcdTAwMjZcdTAwMjYgQ1JZUFRPX0RFVl9DQ1BfREQ9bSlcbiAxNjE6XHRcdHNlbGVjdCBBUkNIX0hBU19DQ19QTEFURk9STVxuIDE2MjpcdFx0c2VsZWN0IEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXG4gMTYzOlx0XHRzZWxlY3QgSEFWRV9LVk1fQVJDSF9HTUVNX0NPTlZFUlRcbiAxNjQ6XHRcdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fUkVDTEFJTVxuIDE2NTpcdFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFXG4gMTY2Olx0XHRzZWxlY3QgSEFWRV9LVk1fQVJDSF9HTUVNX1BPUFVMQVRFXG4gMTY3Olx0XHRoZWxwXG4gMTY4Olx0XHQgIFByb3ZpZGVzIHN1cHBvcnQgZm9yIGxhdW5jaGluZyBlbmNyeXB0ZWQgVk1zIHdoaWNoIHVzZSBTZWN1cmVcbiAxNjk6XHRcdCAgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpLCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIHdpdGhcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg5ODAKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGRlcGVuZGVuY2llcywgc3VtbWFyaXplZCBhcyBhIHRob3VnaHQgcHJvY2VzczoKCioqRGVwZW5kZW5jeSBEZWVwIERpdmUqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhlc2Uga2VybmVsIG1vZHVsZXMuIEl0IGxvb2tzIGxpa2UgYEtWTV9BTURfU0VWYCBpcyBwcmV0dHkgdGlnaHRseSBjb3VwbGVkLiBDbGVhcmx5LCBpdCBoaW5nZXMgb24gYm90aCBgS1ZNX0FNRGAgYW5kIGBDUllQVE9fREVWX1NQX1BTUGAuIE1ha2VzIHNlbnNlLCBjb25zaWRlcmluZyBTRVYgaXMgYW4gQU1ELXNwZWNpZmljIHRlY2hub2xvZ3kgYW5kIHByb2JhYmx5IG5lZWRzIHNvbWUgY3J5cHRvZ3JhcGhpYyBzdXBwb3J0IGZyb20gdGhlIFBTUC4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0aGF0IHJlbGF0aW9uc2hpcCB3aGVuIEkmIzM5O20gdHJhY2tpbmcgZG93biBpc3N1ZXMgb3IgY29uZmlndXJpbmcgc3lzdGVtcy4gTm93LCBsZXQmIzM5O3Mgc2hpZnQgZ2VhcnMgYW5kIHF1aWNrbHkgdmVyaWZ5IHdoYXQgYEtWTV9TTU1gIGRlcGVuZHMgb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgbW9kdWxlJiMzOTtzIGRlcGVuZGVuY2llcyBhcyB3ZWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxODA6XHRcbiAxODE6XHRcdCAgSWYgdW5zdXJlLCBzYXkgWS5cbiAxODI6XHRcbiAxODM6XHRjb25maWcgS1ZNX1NNTVxuIDE4NDpcdFx0Ym9vbCBcJiMzNDtTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIGVtdWxhdGlvblwmIzM0O1xuIDE4NTpcdFx0ZGVmYXVsdCB5XG4gMTg2Olx0XHRkZXBlbmRzIG9uIEtWTV9YODZcbiAxODc6XHRcdGhlbHBcbiAxODg6XHRcdCAgUHJvdmlkZXMgc3VwcG9ydCBmb3IgS1ZNIHRvIGVtdWxhdGUgU3lzdGVtIE1hbmFnZW1lbnQgTW9kZSAoU01NKVxuIDE4OTpcdFx0ICBpbiB2aXJ0dWFsIG1hY2hpbmVzLiAgVGhpcyBjYW4gYmUgdXNlZCBieSB0aGUgdmlydHVhbCBtYWNoaW5lXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIwOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MzU0CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgZGVwZW5kZW5jaWVzLCB0aGlua2luZyB0aHJvdWdoIHRoZSBzaXR1YXRpb246CgoqKkRlcGVuZGVuY3kgRGVlcCBEaXZlOiBLVk1fU01NIGFuZCBLVk1fWDg2KioKCk9rYXksIHNvIGBLVk1fU01NYCByZWxpZXMgb24gYEtWTV9YODZgLiBUaGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4gR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgYXJjaGl0ZWN0dXJlLCB0aGlzIGlzbiYjMzk7dCBzdXJwcmlzaW5nIOKAkyBTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIChTTU0pIGlzIGRlZmluaXRlbHkgeDg2LXNwZWNpZmljLiBCdXQgSSBuZWVkIHRvIGJlIHN1cmUuIFRpbWUgdG8gZGlnIGludG8gdGhlIGBLVk1fWDg2YCBtb2R1bGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzY29wZSBhbmQgdGhlIHByZWNpc2UgbmF0dXJlIG9mIHRoZSBkZXBlbmRlbmN5LiBXaGF0IHNwZWNpZmljIGZ1bmN0aW9uYWxpdGllcyBvZiBgS1ZNX1g4NmAgZG9lcyBgS1ZNX1NNTWAgbGV2ZXJhZ2U/IElzIGl0IHNpbXBseSB0aGUgY29yZSB4ODYgdmlydHVhbGl6YXRpb24gbGF5ZXIsIG9yIGRvZXMgaXQgZGVwZW5kIG9uIG1vcmUgc3BlY2lhbGl6ZWQgZmVhdHVyZXM/IFVuZGVyc3RhbmRpbmcgdGhpcyBncmFudWxhciBkZXBlbmRlbmN5IGlzIGtleSBmb3IgYW55IG9wdGltaXphdGlvbiBvciB0cm91Ymxlc2hvb3RpbmcgZWZmb3J0cyBkb3duIHRoZSBsaW5lLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgdW5kZXIgdGhlIGhvb2Qgb2YgYEtWTV9YODZgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNX1g4NiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxuYXJjaC94ODYva3ZtL0tjb25maWctMTktXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNX1g4NlxuYXJjaC94ODYva3ZtL0tjb25maWctMjEtXHRkZWZfdHJpc3RhdGUgS1ZNIGlmIChLVk1fSU5URUwgIT0gbiB8fCBLVk1fQU1EICE9IG4pXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIwOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NzIzCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEtWTSBDb25maWd1cmF0aW9uIEFuYWx5c2lzKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2UgYEtWTV9YODZgIGlzIG9ubHkgZW5hYmxlZCB3aGVuIHRoZSBiYXNlIGBLVk1gIG1vZHVsZSBpcyBhY3RpdmF0ZWQsIGFuZCB0aGVuIHNwZWNpZmljYWxseSwgaWYgZWl0aGVyIHRoZSBJbnRlbCAoYEtWTV9JTlRFTGApIG9yIEFNRCAoYEtWTV9BTURgKSBleHRlbnNpb25zIGFyZSBwcmVzZW50LiBNYWtlcyBzZW5zZSwgdGhhdCYjMzk7cyB0aGUgY29yZSBoeXBlcnZpc29yIHN0cnVjdHVyZS4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB3aGF0IGNvbmZpZ3VyYXRpb25zICpJKiBuZWVkIHRvIGVuYWJsZSB0byBnZXQgdGhpcyB0aGluZyBydW5uaW5nIHByb3Blcmx5LiBMb29rcyBsaWtlIHRoZSBjb3JlIGBLVk1gIG1vZHVsZSBpcyBhIGdpdmVuLiAgSSBuZWVkIHRvIG1ha2Ugc3VyZSBgS1ZNX0lOVEVMYCBvciBgS1ZNX0FNRGAgYXJlIHNldCwgZGVwZW5kaW5nIG9uIHRoZSBob3N0JiMzOTtzIENQVS4gSSBzZWUgYEtWTV9TTU1gIHdoaWNoIEkgYXNzdW1lIHJlbGF0ZXMgdG8gU3lzdGVtIE1hbmFnZW1lbnQgTW9kZSwgY3JpdGljYWwgZm9yIGhhbmRsaW5nIGNlcnRhaW4gaGFyZHdhcmUgaW50ZXJhY3Rpb25zLCBhbmQgSSYjMzk7bGwgbmVlZCB0byBjb25zaWRlciBgS1ZNX0FNRF9TRVZgLCBhbmQgYEtWTV9JTlRFTF9URFhgIGRlcGVuZGluZyBvbiB0aGUgc2VjdXJpdHkgZmVhdHVyZS1zZXQgSSByZXF1aXJlLiBBbHNvLCBgSU5URUxfVERYX0hPU1RgIHdpbGwgYmUgbmVlZGVkIGlmIEkgYW0gcnVubmluZyB3aXRoIFREWC4KCkZpbmFsbHksIGBDUllQVE9fREVWX1NQX1BTUGAgaXMgbGlzdGVkLCBhbmQgSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgYW55IGRlcGVuZGVuY2llcyBpdCBoYXMuIFRoaXMgaXMgcHJvYmFibHkgcmVsYXRlZCB0byBzdXBwb3J0aW5nIHNwZWNpZmljIGNyeXB0b2dyYXBoaWMgb2ZmbG9hZCBoYXJkd2FyZS4gR290dGEgbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgbGluZXMgdXAgZGVwZW5kZW5jaWVzLXdpc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIwOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDUllQVE9fREVWX1NQX1BTUCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2NyeXB0by9jY3AvS2NvbmZpZz0yMz1jb25maWcgQ1JZUFRPX0RFVl9DQ1BfQ1JZUFRPXG4tLVxuZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWctMzctXG5kcml2ZXJzL2NyeXB0by9jY3AvS2NvbmZpZzozODpjb25maWcgQ1JZUFRPX0RFVl9TUF9QU1BcbmRyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnLTM5LVx0Ym9vbCBcJiMzNDtQbGF0Zm9ybSBTZWN1cml0eSBQcm9jZXNzb3IgKFBTUCkgZGV2aWNlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIwOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMjYwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgQ0NQIEtjb25maWcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJiMzOTttIHRoaW5raW5nLCAmIzM0O1RpbWUgdG8gZGlnIGludG8gdGhlIGBkcml2ZXJzL2NyeXB0by9jY3AvS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDM4LiYjMzQ7IEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIENDUCBjcnlwdG8gZW5naW5lLiBJJiMzOTttIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgdGhhdCBsaW5lIGJlY2F1c2UgSSB2YWd1ZWx5IHJlY2FsbCBzb21lIGNyaXRpY2FsIHNldHRpbmcgYmVpbmcgZGVmaW5lZCB0aGVyZSAtIG1heWJlIHJlbGF0ZWQgdG8ga2V5IHNpemUsIHN1cHBvcnRlZCBhbGdvcml0aG1zLCBvciBwZXJoYXBzIGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcy4gSSB3YW50IHRvIHF1aWNrbHkgemVybyBpbiBvbiBpdCBhbmQgZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0JiMzOTtzIHdoYXQuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBpcyBjcnVjaWFsIGZvciBhbnkgZGVlcGVyIGFuYWx5c2lzIG9yIG1vZGlmaWNhdGlvbiBJIG5lZWQgdG8gcGVyZm9ybS4gTGV0JiMzOTtzIHNlZSB3aGF0IGdlbXMgYXJlIGhpZGRlbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjA6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2NyeXB0by9jY3AvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMzA6XHRcdHNlbGVjdCBDUllQVE9fQVVUSEVOQ1xuICAzMTpcdFx0c2VsZWN0IENSWVBUT19SU0FcbiAgMzI6XHRcdHNlbGVjdCBDUllQVE9fTElCX0FFU1xuICAzMzpcdFx0aGVscFxuICAzNDpcdFx0ICBTdXBwb3J0IGZvciB1c2luZyB0aGUgY3J5cHRvZ3JhcGhpYyBBUEkgd2l0aCB0aGUgQU1EIENyeXB0b2dyYXBoaWNcbiAgMzU6XHRcdCAgQ29wcm9jZXNzb3IuIFRoaXMgbW9kdWxlIHN1cHBvcnRzIG9mZmxvYWQgb2YgU0hBIGFuZCBBRVMgYWxnb3JpdGhtcy5cbiAgMzY6XHRcdCAgSWYgeW91IGNob29zZSAmIzM5O00mIzM5OyBoZXJlLCB0aGlzIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjY3BfY3J5cHRvLlxuICAzNzpcdFxuICAzODpcdGNvbmZpZyBDUllQVE9fREVWX1NQX1BTUFxuICAzOTpcdFx0Ym9vbCBcJiMzNDtQbGF0Zm9ybSBTZWN1cml0eSBQcm9jZXNzb3IgKFBTUCkgZGV2aWNlXCYjMzQ7XG4gIDQwOlx0XHRkZWZhdWx0IHlcbiAgNDE6XHRcdGRlcGVuZHMgb24gQ1JZUFRPX0RFVl9DQ1BfREQgXHUwMDI2XHUwMDI2IFg4Nl82NCBcdTAwMjZcdTAwMjYgQU1EX0lPTU1VXG4gIDQyOlx0XHRzZWxlY3QgUENJX1RTTSBpZiBQQ0lcbiAgNDM6XHRcdGhlbHBcbiAgNDQ6XHRcdCBQcm92aWRlIHN1cHBvcnQgZm9yIHRoZSBBTUQgUGxhdGZvcm0gU2VjdXJpdHkgUHJvY2Vzc29yIChQU1ApLlxuICA0NTpcdFx0IFRoZSBQU1AgaXMgYSBkZWRpY2F0ZWQgcHJvY2Vzc29yIHRoYXQgcHJvdmlkZXMgc3VwcG9ydCBmb3Iga2V5XG4gIDQ2Olx0XHQgbWFuYWdlbWVudCBjb21tYW5kcyBpbiBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIG1vZGUsXG4gIDQ3Olx0XHQgYWxvbmcgd2l0aCBzb2Z0d2FyZS1iYXNlZCBUcnVzdGVkIEV4ZWN1dGlvbiBFbnZpcm9ubWVudCAoVEVFKSB0b1xuICA0ODpcdFx0IGVuYWJsZSB0aGlyZC1wYXJ0eSB0cnVzdGVkIGFwcGxpY2F0aW9ucy5cbiAgNDk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA3ODkKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEZXBlbmRlbmNpZXMgYW5kIERlZXAgRGl2ZXMqKgoKT2theSwgc28gYENSWVBUT19ERVZfU1BfUFNQYCByZWxpZXMgb24gYSBmZXcgb3RoZXIgY29tcG9uZW50cy4gU3BlY2lmaWNhbGx5LCBgQ1JZUFRPX0RFVl9DQ1BfRERgLCBgWDg2XzY0YCwgYW5kIGBBTURfSU9NTVVgLiBHaXZlbiBteSBleHBlcmllbmNlLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhvc2UgYXJlIGtleSBwaWVjZXMgZm9yIGhhcmR3YXJlLWFjY2VsZXJhdGVkIGNyeXB0by4gTWFrZXMgc2Vuc2UuIE5vdywgbGV0JiMzOTtzIGRyaWxsIGRvd24gaW50byBgQ1JZUFRPX0RFVl9DQ1BfRERgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgdGhhdCBkZXBlbmRlbmN5IGVudGFpbHMgdG8gZ2V0IGEgZnVsbCBwaWN0dXJlIG9mIHRoZSBgU1BfUFNQYCYjMzk7cyBmdW5jdGlvbmFsaXR5IGFuZCBwb3RlbnRpYWwgYm90dGxlbmVja3MuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgd29yayBiZWdpbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIwOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDUllQVE9fREVWX0NDUF9ERCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2NyeXB0by9jY3AvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWc6Mjpjb25maWcgQ1JZUFRPX0RFVl9DQ1BfRERcbmRyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtTZWN1cmUgUHJvY2Vzc29yIGRldmljZSBkcml2ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEwODEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgQ0NQIEtlcm5lbCBDb25maWd1cmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBgZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWdgIGZpbGUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IHRvIGFyb3VuZCBsaW5lIDIuIE15IGV4cGVydGlzZSB0ZWxscyBtZSB0aGF0IGBLY29uZmlnYCBmaWxlcyBhcmUgdGhlIGJhY2tib25lIG9mIGtlcm5lbCBjb25maWd1cmF0aW9uLCBzbyB0aGUgaW5pdGlhbCBsaW5lcyBhcmUgYWxtb3N0IGFsd2F5cyBjcnVjaWFsLiBUaGV5JiMzOTtsbCBsaWtlbHkgZXN0YWJsaXNoIHRoZSBvdmVyYWxsIGNvbnRleHQgZm9yIHRoZSBDQ1AgKENyeXB0b2dyYXBoaWMgQ29wcm9jZXNzb3IpIGRyaXZlciDigJMgZGVmaW5pbmcgaXRzIHB1cnBvc2UsIGl0cyBkZXBlbmRlbmNpZXMsIG9yIHBlcmhhcHMgcHJvdmlkaW5nIGFuIGluaXRpYWwgZGVmYXVsdCBzZXR0aW5nLiBJIGFudGljaXBhdGUgdGhpcyB3aWxsIGJlIHdoZXJlIHRoZSBiYXNpYyBidWlsZCBvcHRpb25zLCBwZXJoYXBzIGEgaGVscCB0ZXh0IGFuZCB0aGUgaW5pdGlhbCBzY29wZSwgd2lsbCBiZSBwbGFjZWQuIEkmIzM5O20ga2VlbiB0byBzZWUgaWYgdGhpcyBjb25maXJtcyBteSBleHBlcmllbmNlIGluIHRoaXMgc3BhY2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBtb2R1bGUgaXMgYWJvdXQgYmVmb3JlIGxvb2tpbmcgaW50byBvdGhlciBmaWxlcy4gSSBsb29rIGZvcndhcmQgdG8gc2VlaW5nIHdoYXQgaXQgaGFzIHRvIHRlbGwgbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIwOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgQ1JZUFRPX0RFVl9DQ1BfRERcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O1NlY3VyZSBQcm9jZXNzb3IgZGV2aWNlIGRyaXZlclwmIzM0O1xuICAgNDpcdFx0ZGVwZW5kcyBvbiBDUFVfU1VQX0FNRCB8fCBBUk02NFxuICAgNTpcdFx0ZGVmYXVsdCBtXG4gICA2Olx0XHRoZWxwXG4gICA3Olx0XHQgIFByb3ZpZGVzIEFNRCBTZWN1cmUgUHJvY2Vzc29yIGRldmljZSBkcml2ZXIuXG4gICA4Olx0XHQgIElmIHlvdSBjaG9vc2UgJiMzOTtNJiMzOTsgaGVyZSwgdGhpcyBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY2NwLlxuICAgOTpcdFxuICAxMDpcdGNvbmZpZyBDUllQVE9fREVWX1NQX0NDUFxuICAxMTpcdFx0Ym9vbCBcJiMzNDtDcnlwdG9ncmFwaGljIENvcHJvY2Vzc29yIGRldmljZVwmIzM0O1xuICAxMjpcdFx0ZGVmYXVsdCB5XG4gIDEzOlx0XHRkZXBlbmRzIG9uIENSWVBUT19ERVZfQ0NQX0REIFx1MDAyNlx1MDAyNiBETUFERVZJQ0VTXG4gIDE0Olx0XHRzZWxlY3QgSFdfUkFORE9NXG4gIDE1Olx0XHRzZWxlY3QgRE1BX0VOR0lORVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTU0MAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEZWNvZGluZyB0aGUgRGVwZW5kZW5jeSBDaGFpbioqCgpSaWdodCwgc28gYENSWVBUT19ERVZfQ0NQX0REYC4uLiB0aGF0IG9uZSYjMzk7cyBpbnRlcmVzdGluZy4gVGhlIGltbWVkaWF0ZSBkZXBlbmRlbmN5IGlzIHByZXR0eSBjbGVhcjogaXQgaGluZ2VzIG9uIGVpdGhlciBgQ1BVX1NVUF9BTURgIG9yIGBBUk02NGAuIE1ha2VzIHNlbnNlLCBjb25zaWRlcmluZyB0aGUgbGlrZWx5IGhhcmR3YXJlIHJlcXVpcmVtZW50cyBmb3IgdGhpcyBzcGVjaWZpYyBjcnlwdG8gZGV2aWNlIGRyaXZlciwgYENDUF9ERGAgbGlrZWx5IHJlbGF0ZXMgdG8gQU1EJiMzOTtzIFBsYXRmb3JtIFNlY3VyaXR5IFByb2Nlc3NvciAoUFNQKSBvciBhIHNpbWlsYXIgc2VjdXJlIGNvLXByb2Nlc3Nvciwgb3IgYSBwbGF0Zm9ybSB3aGljaCByZXF1aXJlcyB0aGUgdW5kZXJseWluZyBzdXBwb3J0IGZyb20gYEFSTTY0YC4gVGhlIGNvbmRpdGlvbmFsIG5hdHVyZSBpcyBpbXBvcnRhbnQgdG8ga2VlcCBpbiBtaW5kLCBvZiBjb3Vyc2UuCgpOb3csIGJlY2F1c2UgaXQgZGVwZW5kcyBvbiBgQ1BVX1NVUF9BTURgIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoYXQgdGhlIEFNRCBJT01NVSBpcyBlbmFibGVkIG9yIGNvbmZpZ3VyZWQgY29ycmVjdGx5LCByaWdodD8gTGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IGBBTURfSU9NTVVgIGFuZCBzZWUgaG93IGl0IGlzIGNvbmZpZ3VyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIwOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBBTURfSU9NTVUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZy0yLSMgQU1EIElPTU1VIHN1cHBvcnRcbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWc6Mzpjb25maWcgQU1EX0lPTU1VXG5kcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnLTQtXHRib29sIFwmIzM0O0FNRCBJT01NVSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZy0zMi1cbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWc6MzM6Y29uZmlnIEFNRF9JT01NVV9JT01NVUZEXG5kcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnLTM0LVx0Ym9vbCBcJiMzNDtFbmFibGUgSU9NTVVGRCBmZWF0dXJlcyBmb3IgQU1EIElPTU1VIChFWFBFUklNRU5UQUwpXCYjMzQ7XG4tLVxuZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZy00Mi1cbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWc6NDM6Y29uZmlnIEFNRF9JT01NVV9ERUJVR0ZTXG5kcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnLTQ0LVx0Ym9vbCBcJiMzNDtFbmFibGUgQU1EIElPTU1VIGludGVybmFscyBpbiBEZWJ1Z0ZTXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIwOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMDEyCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIEFNRCBJT01NVSBDb25maWd1cmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIEFNRCBJT01NVSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIE15IGluc3RpbmN0IHRlbGxzIG1lIHRoZSBwbGFjZSB0byBzdGFydCBpcyB0aGUgYGRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWdgIGZpbGUuIEkmIzM5O20gYXNzdW1pbmcgdGhhdCYjMzk7cyB0aGUgY2Fub25pY2FsIGxvY2F0aW9uIGZvciB0aGVzZSBzb3J0cyBvZiBkZWZpbml0aW9ucy4gTGV0JiMzOTtzIHN0YXJ0IGFyb3VuZCBsaW5lIDMsIHdoaWNoIGlzIHVzdWFsbHkgd2hlcmUgYSBnb29kIG92ZXJ2aWV3IG9yIGdlbmVyYWwgZGVzY3JpcHRpb24gYmVnaW5zLCBvciBhdCBsZWFzdCB0aGUgdG9wLWxldmVsIG9wdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIwOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCMgQU1EIElPTU1VIHN1cHBvcnRcbiAgIDM6XHRjb25maWcgQU1EX0lPTU1VXG4gICA0Olx0XHRib29sIFwmIzM0O0FNRCBJT01NVSBzdXBwb3J0XCYjMzQ7XG4gICA1Olx0XHRzZWxlY3QgU1dJT1RMQlxuICAgNjpcdFx0c2VsZWN0IFBDSV9NU0lcbiAgIDc6XHRcdHNlbGVjdCBQQ0lfQVRTXG4gICA4Olx0XHRzZWxlY3QgUENJX1BSSVxuICAgOTpcdFx0c2VsZWN0IFBDSV9QQVNJRFxuICAxMDpcdFx0c2VsZWN0IElSUV9NU0lfTElCXG4gIDExOlx0XHRzZWxlY3QgTU1VX05PVElGSUVSXG4gIDEyOlx0XHRzZWxlY3QgSU9NTVVfQVBJXG4gIDEzOlx0XHRzZWxlY3QgSU9NTVVfSU9WQVxuICAxNDpcdFx0c2VsZWN0IElPTU1VX1NWQVxuICAxNTpcdFx0c2VsZWN0IElPTU1VX0lPUEZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIzODEKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqUXVpY2sgRGVwZW5kZW5jeSBDaGVjayoqCgpSaWdodCwgc28gKkFNRF9JT01NVSogc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCDigJMgbm8gZ2xhcmluZywgY29tcGxleCBkZXBlbmRlbmNpZXMganVtcGluZyBvdXQgYXQgbWUgcmlnaHQgYXdheS4gQWx3YXlzIGdvb2QgdG8gc2VlIGEgbW9kdWxlIHRoYXQga2VlcHMgdGhpbmdzIGNsZWFuLgoKTm93LCBsZXQmIzM5O3Mgc3dpdGNoIGdlYXJzIGFuZCBkaWcgaW50byAqS1ZNX0lOVEVMKi4gSSBrbm93IHRoYXQgb25lJiMzOTtzIGdvdCBhIGZldyBtb3JlIGxheWVycyBhbmQgbGlrZWx5IHNvbWUgaW50ZXJhY3Rpb25zIHRoYXQgbmVlZCBhIGNsb3NlciBsb29rLiBMZXQmIzM5O3Mgc3RhcnQgbWVudGFsbHkgdHJhY2luZyB0aG9zZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjA6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTV9JTlRFTCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz04Mz1jb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6OTY6Y29uZmlnIEtWTV9JTlRFTFxuYXJjaC94ODYva3ZtL0tjb25maWctOTctXHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA2LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTA3OmNvbmZpZyBLVk1fSU5URUxfUFJPVkVfVkVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXCYjMzQ7Q2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXHRib29sIFwmIzM0O0ludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjA6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI4MzQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSByZWFkaW5nIGFuZCB0aGlua2luZyBhYm91dCB0aGUgS2NvbmZpZyBmaWxlOgoKKipOYXZpZ2F0aW5nIEtjb25maWcgZm9yIEtWTSBvbiB4ODYqKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgYGFyY2gveDg2L2t2bS9LY29uZmlnYCBmaWxlIGFnYWluLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gd2hhdCYjMzk7cyBnb2luZyBvbiBhcm91bmQgbGluZSA5Ni4gV2hhdCYjMzk7cyBkZWZpbmVkIHRoZXJlLCBhbmQgaG93IGRvZXMgaXQgcmVsYXRlIHRvIHRoZSBicm9hZGVyIEtWTSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSB4ODYgYXJjaGl0ZWN0dXJlPyBJIGtub3cgdGhpcyBhcmVhIGhvbGRzIGtleSBkZWZpbml0aW9ucywgb2Z0ZW4gcmVsYXRlZCB0byBzcGVjaWZpYyBoYXJkd2FyZSBmZWF0dXJlcyBvciBvcHRpbWl6YXRpb24gcGF0aHMgZm9yIEtWTS4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IGxpbmUgOTYgcHJvYmFibHkgZGVmaW5lcyBhIHNwZWNpZmljIEtWTSBmZWF0dXJlIG9yIGludHJvZHVjZXMgYSBjb25kaXRpb25hbCBibG9jayBmb3IgYSBoYXJkd2FyZSBkZXBlbmRlbmN5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHRvIG1ha2UgYW4gYXNzZXNzbWVudCBvciBtb2RpZmljYXRpb24uIEkmIzM5O20ga2VlbiB0byBmaW5kIG91dCBhYm91dCB3aGV0aGVyIGl0JiMzOTtzIHJlbGF0ZWQgdG8gc29tZSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjA6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgOTA6XHRcdCAgcHJvdGVjdGVkIFZNcyBhcmUgcHVyZWx5IGEgZGV2ZWxvcG1lbnQgYW5kIHRlc3RpbmcgdmVoaWNsZSBmb3JcbiAgOTE6XHRcdCAgS1ZNX0NSRUFURV9HVUVTVF9NRU1GRC4gIEF0dGVtcHRpbmcgdG8gcnVuIGEgXCYjMzQ7cmVhbFwmIzM0OyBWTSB3b3JrbG9hZCBhcyBhXG4gIDkyOlx0XHQgIHNvZnR3YXJlLXByb3RlY3RlZCBWTSB3aWxsIGZhaWwgbWlzZXJhYmx5LlxuICA5MzpcdFxuICA5NDpcdFx0ICBJZiB1bnN1cmUsIHNheSBcJiMzNDtOXCYjMzQ7LlxuICA5NTpcdFxuICA5NjpcdGNvbmZpZyBLVk1fSU5URUxcbiAgOTc6XHRcdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgSW50ZWwgKGFuZCBjb21wYXRpYmxlKSBwcm9jZXNzb3JzIHN1cHBvcnRcJiMzNDtcbiAgOTg6XHRcdGRlcGVuZHMgb24gS1ZNIFx1MDAyNlx1MDAyNiBJQTMyX0ZFQVRfQ1RMXG4gIDk5Olx0XHRzZWxlY3QgWDg2X0ZSRUQgaWYgWDg2XzY0XG4gMTAwOlx0XHRoZWxwXG4gMTAxOlx0XHQgIFByb3ZpZGVzIHN1cHBvcnQgZm9yIEtWTSBvbiBwcm9jZXNzb3JzIGVxdWlwcGVkIHdpdGggSW50ZWwmIzM5O3MgVlRcbiAxMDI6XHRcdCAgZXh0ZW5zaW9ucywgYS5rLmEuIFZpcnR1YWwgTWFjaGluZSBFeHRlbnNpb25zIChWTVgpLlxuIDEwMzpcdFxuIDEwNDpcdFx0ICBUbyBjb21waWxlIHRoaXMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjA6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMzMzEKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBLVk1fSU5URUwgRGVwZW5kZW5jaWVzKioKClJpZ2h0LCBzbyBgS1ZNX0lOVEVMYCBpcyBjbGVhcmx5IGJ1aWx0IG9uIGBLVk1gIOKAkyB0aGF0JiMzOTtzIGV4cGVjdGVkLiBCdXQgdGhlIG1lbnRpb24gb2YgYElBMzJfRkVBVF9DVExgLi4uIHRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgY29ubmVjdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIGl0JiMzOTtzIHJlbGF0ZWQgdG8gaGFuZGxpbmcgc3BlY2lmaWMgSW50ZWwgQ1BVIGZlYXR1cmVzIHdpdGhpbiB0aGUgS1ZNIGVudmlyb25tZW50LiBQcm9iYWJseSBzb21ldGhpbmcgdG8gZG8gd2l0aCBlbmFibGluZyBvciBjb25maWd1cmluZyB2aXJ0dWFsaXphdGlvbi1zcGVjaWZpYyBjYXBhYmlsaXRpZXMuIEkgc2hvdWxkIHN0YXJ0IGJ5IGRpdmluZyBpbnRvIHRoZSBkZWZpbml0aW9ucyBhbmQgdXNhZ2Ugb2YgYElBMzJfRkVBVF9DVExgLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCByZWdpc3RlciBvciBjb250cm9sIHN0cnVjdHVyZSBhY3R1YWxseSBkb2VzIGFuZCBob3cgYEtWTV9JTlRFTGAgbGV2ZXJhZ2VzIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSUEzMl9GRUFUX0NUTCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9LY29uZmlnLmNwdT0yODU9Y29uZmlnIFg4Nl9ERUJVR0NUTE1TUlxuLS1cbmFyY2gveDg2L0tjb25maWcuY3B1LTI4OC1cbmFyY2gveDg2L0tjb25maWcuY3B1OjI4OTpjb25maWcgSUEzMl9GRUFUX0NUTFxuYXJjaC94ODYvS2NvbmZpZy5jcHUtMjkwLVx0ZGVmX2Jvb2wgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMDoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzY1NgoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDIyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIGBJQTMyX0ZFQVRfQ1RMYCBpcyBkZWZpbmVkIGFzICYjMzk7eSYjMzk7LiBUaGlzIG1lYW5zIHdlIGhhdmUgYSBzZXQgb2YgY29uZmlndXJhdGlvbnMgZW5hYmxlZDogYEtWTWAsIGBLVk1fSU5URUxgLCBgS1ZNX0FNRGAsIGBLVk1fU01NYCwgYEtWTV9BTURfU0VWYCwgYEtWTV9JTlRFTF9URFhgLCBgSU5URUxfVERYX0hPU1RgLCBgQ1JZUFRPX0RFVl9TUF9QU1BgLCBgQ1JZUFRPX0RFVl9DQ1BfRERgLCBhbmQgYEFNRF9JT01NVWAuIFRoYXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkLgoKTm93LCBsZXQmIzM5O3MgZGlnIGEgbGl0dGxlIGRlZXBlci4gSSYjMzk7bSBmb2N1c2luZyBvbiBgS1ZNX0FNRF9TRVZgIGFuZCBpdHMgZGVwZW5kZW5jaWVzLiBJdCByZWxpZXMgb24gYENSWVBUT19ERVZfU1BfUFNQYCBhbmQgKmFsc28qIHRoaXMgcmF0aGVyIGludGVyZXN0aW5nIGNvbmRpdGlvbmFsOiBgIShLVk1fQU1EPXkgJmFtcDsmYW1wOyBDUllQVE9fREVWX0NDUF9ERD1tKWAuIFRoaXMgaXMga2V5LiBUaGUgaW1wbGljYXRpb24gaXMsIGlmIGBLVk1fQU1EYCBpcyBjb21waWxlZCBpbiAoYHlgKSwgdGhlbiBgQ1JZUFRPX0RFVl9DQ1BfRERgICptdXN0KiBiZSBzZXQgdG8gJiMzOTt5JiMzOTsuIEl0JiMzOTtzIGVmZmVjdGl2ZWx5IGZvcmNpbmcgdGhlIGluY2x1c2lvbiBvZiB0aGUgbW9kdWxlLgoKVGhlcmVmb3JlLCBgQ1JZUFRPX0RFVl9DQ1BfRERgIGlzIGFuIGFic29sdXRlIHJlcXVpcmVtZW50LCBnaXZlbiB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLgoKSSB0aGluayBJJiMzOTtsbCBub3cgY2hlY2sgdGhlIHN0YXR1cyBvZiBgWDg2X1gyQVBJQ2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIwOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBYODZfWDJBUElDJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L0tjb25maWc9NDM2PWNvbmZpZyBTTVBcbi0tXG5hcmNoL3g4Ni9LY29uZmlnLTQ1OC1cbmFyY2gveDg2L0tjb25maWc6NDU5OmNvbmZpZyBYODZfWDJBUElDXG5hcmNoL3g4Ni9LY29uZmlnLTQ2MC1cdGJvb2wgXCYjMzQ7eDJBUElDIGludGVycnVwdCBjb250cm9sbGVyIGFyY2hpdGVjdHVyZSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIwOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0Mjg3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gcmVhZGluZyBhbmQgcHJvY2Vzc2luZyB0aGUgcHJvdmlkZWQgdGV4dDoKCioqRGl2aW5nIGludG8gdGhlIHg4NiBBcmNoaXRlY3R1cmUgQ29uZmlndXJhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgZGlnIGludG8gdGhlIGNvbmZpZ3VyYXRpb24gc3BlY2lmaWNzIGZvciB4ODYuIExldCYjMzk7cyBzdGFydCB3aXRoIGBhcmNoL3g4Ni9LY29uZmlnYCwgcmlnaHQgYXJvdW5kIGxpbmUgNDU5LiBUaGF0IGFyZWEgdXN1YWxseSBob2xkcyBjcml0aWNhbCBjb25maWd1cmF0aW9ucywgYW5kIEkgbmVlZCB0byBzZWUgd2hhdCYjMzk7cyBiZWluZyBkZWZpbmVkIHRoZXJlLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGVpdGhlciBhIG5ldyBmZWF0dXJlIGdhdGUsIGRlcGVuZGVuY3kgZGV0YWlscywgb3IgY29uZmlndXJhdGlvbiBvcHRpb24gdG8gc2V0LXVwLiBJJiMzOTtsbCBuZWVkIHRvIGtub3cgd2hpY2ggZmVhdHVyZSBnYXRlIHRoaXMgaXMgY29ubmVjdGVkIHRvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ1NTpcdFx0ICBcdTAwM2NodHRwOi8vd3d3LnRsZHAub3JnL2RvY3MuaHRtbCNob3d0b1x1MDAzZS5cbiA0NTY6XHRcbiA0NTc6XHRcdCAgSWYgeW91IGRvbiYjMzk7dCBrbm93IHdoYXQgdG8gZG8gaGVyZSwgc2F5IE4uXG4gNDU4Olx0XG4gNDU5Olx0Y29uZmlnIFg4Nl9YMkFQSUNcbiA0NjA6XHRcdGJvb2wgXCYjMzQ7eDJBUElDIGludGVycnVwdCBjb250cm9sbGVyIGFyY2hpdGVjdHVyZSBzdXBwb3J0XCYjMzQ7XG4gNDYxOlx0XHRkZXBlbmRzIG9uIFg4Nl9MT0NBTF9BUElDIFx1MDAyNlx1MDAyNiBYODZfNjQgXHUwMDI2XHUwMDI2IChJUlFfUkVNQVAgfHwgSFlQRVJWSVNPUl9HVUVTVClcbiA0NjI6XHRcdGRlZmF1bHQgeVxuIDQ2MzpcdFx0aGVscFxuIDQ2NDpcdFx0ICB4MkFQSUMgaXMgYW4gaW50ZXJydXB0IGNvbnRyb2xsZXIgYXJjaGl0ZWN0dXJlLCBhIGNvbXBvbmVudCBvZiB3aGljaFxuIDQ2NTpcdFx0ICAodGhlIGxvY2FsIEFQSUMpIGlzIHByZXNlbnQgaW4gdGhlIENQVS4gSXQgYWxsb3dzIGZhc3RlciBhY2Nlc3MgdG9cbiA0NjY6XHRcdCAgdGhlIGxvY2FsIEFQSUMgYW5kIHN1cHBvcnRzIGEgbGFyZ2VyIG51bWJlciBvZiBDUFVzIGluIHRoZSBzeXN0ZW1cbiA0Njc6XHRcdCAgdGhhbiB0aGUgcHJlZGVjZXNzb3JzLlxuIDQ2ODpcdFxuIDQ2OTpcdFx0ICB4MkFQSUMgd2FzIGludHJvZHVjZWQgaW4gSW50ZWwgQ1BVcyBhcm91bmQgMjAwOCBhbmQgaW4gQU1EIEVQWUMgQ1BVc1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMDoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDc1NgoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IFg4Nl9YMkFQSUMgTXVzaW5ncyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYFg4Nl9YMkFQSUNgLiBJdCBsb29rcyBsaWtlIHRoaXMgZmVhdHVyZSBpcyBjb250aW5nZW50IG9uIGEgZmV3IGtleSB0aGluZ3M6IHdlIG5lZWQgYFg4Nl9MT0NBTF9BUElDYCBlbmFibGVkLCB3ZSYjMzk7cmUgZGVmaW5pdGVseSBydW5uaW5nIG9uIGFuIGBYODZfNjRgIGFyY2hpdGVjdHVyZSwgYW5kIGVpdGhlciB0aGUgc3lzdGVtIGhhcyBgSVJRX1JFTUFQYCBlbmFibGVkIG9yIGl0JiMzOTtzIHJ1bm5pbmcgYXMgYSBgSFlQRVJWSVNPUl9HVUVTVGAuIFRoYXQgbWFrZXMgc2Vuc2U7IHRoZSB4MkFQSUMgaXMgYSBtb3JlIG1vZGVybiBpbnRlcnJ1cHQgY29udHJvbGxlciwgYW5kIHRoZXNlIGRlcGVuZGVuY2llcyBlbnN1cmUgYSBzdWl0YWJsZSBoYXJkd2FyZSBhbmQgc29mdHdhcmUgZW52aXJvbm1lbnQgZm9yIGl0IHRvIGZ1bmN0aW9uIGNvcnJlY3RseS4gVGhlIGZhY3QgdGhhdCBgWDg2X1gyQVBJQ2AgaXMgc2V0IHRvIGBkZWZhdWx0IHlgIGlzIGFsc28gaW1wb3J0YW50LCBpdCBtZWFucyB0aGF0IGJ5IGRlZmF1bHQgaXQmIzM5O2xsIGJlIGVuYWJsZWQgaWYgdGhvc2UgcHJlcmVxdWlzaXRlcyBhcmUgbWV0LCB3aGljaCBpcyBhIHNlbnNpYmxlIGFwcHJvYWNoLgoKTm93LCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayBob3cgdGhpcyBpbnRlcmFjdHMgd2l0aCBgQ09OVElHX0FMTE9DYCwgc2luY2UgY29udGlndW91cyBtZW1vcnkgYWxsb2NhdGlvbiBjYW4gb2Z0ZW4gcGxheSBuaWNlbHkgd2l0aCBpbnRlcnJ1cHQgY29udHJvbGxlcnMuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhhdCByZWxhdGlvbnNoaXAgYSBiaXQgZnVydGhlciB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBwb3RlbnRpYWwgY29uZmxpY3RzIG9yIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjA6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENPTlRJR19BTExPQyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTcwOT1jb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfVkFSSUFCTEVcbi0tXG5tbS9LY29uZmlnLTcxOC1cbm1tL0tjb25maWc6NzE5OmNvbmZpZyBDT05USUdfQUxMT0Ncbm1tL0tjb25maWctNzIwLVx0ZGVmX2Jvb2wgKE1FTU9SWV9JU09MQVRJT04gXHUwMDI2XHUwMDI2IENPTVBBQ1RJT04pIHx8IENNQVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMDoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTE2NwoJCQkJCQkJb3V0cHV0OiAxNgoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBNZW1vcnkgQWxsb2NhdGlvbiBTdHJhdGVnaWVzKioKClJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIGBDT05USUdfQUxMT0NgIGRlZmluaXRpb24uIEl0IGxvb2tzIGxpa2UgaXQgYm9pbHMgZG93biB0byBlaXRoZXIgdGhlIGNvbWJpbmF0aW9uIG9mIGBNRU1PUllfSVNPTEFUSU9OYCBhbmQgYENPTVBBQ1RJT05gLCBpZiB0aGV5IGFyZSBib3RoIGVuYWJsZWQsIG9yLCBhcyBhIHN0YW5kYWxvbmUgb3B0aW9uLCBgQ01BYC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZzsgaXQgZmVlbHMgbGlrZSB0aGV5IGFyZSBzdWdnZXN0aW5nIHRoaXMgZmVhdHVyZSBpcyBkZXNpZ25lZCB0byBhZGRyZXNzIGEgbmVlZCwgcHJlc3VtYWJseSBmb3IgcGh5c2ljYWxseSBjb250aWd1b3VzIG1lbW9yeS4KCkdpdmVuIHRoaXMsIEkgc2hvdWxkIGZvY3VzIG9uIGBDTUFgLCB0aGUgQ29tcGFydG1lbnRhbGl6ZWQgTWVtb3J5IEFsbG9jYXRvci4gSSBzaG91bGQgcmV2aWV3IGl0cyBzcGVjaWZpYyBjaGFyYWN0ZXJpc3RpY3MgdG8gZnVsbHkgdW5kZXJzdGFuZCBob3cgdGhpcyBvcHRpb24gcGxheXMgaW50byBgQ09OVElHX0FMTE9DYCwgc2luY2UgSSBhbHJlYWR5IGhhdmUgYSBmaXJtIGdyYXNwIG9uIGhvdyBNRU1PUllfSVNPTEFUSU9OIGFuZCBDT01QQUNUSU9OIHdvcmssIGFuZCB0aGUgcm9sZSB0aGV5IHBsYXkuIElzIGl0IHRoZSBwcmltYXJ5IG1ldGhvZCB0byBndWFyYW50ZWUgdGhlIGFsbG9jYXRpb24sIG9yIGlzIGl0IGEgbGFzdCByZXNvcnQgd2hlbiB0aGUgb3RoZXIgb3B0aW9ucyBhcmVuJiMzOTt0IGF2YWlsYWJsZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgb3RoZXIgbWVjaGFuaXNtcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjA6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENNQSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvZG1hL0tjb25maWc9MTczPWNvbmZpZyBETUFfTlVNQV9DTUFcbi0tXG5rZXJuZWwvZG1hL0tjb25maWctMTg1LVxua2VybmVsL2RtYS9LY29uZmlnOjE4Njpjb25maWcgQ01BX1NJWkVfUEVSTlVNQVxua2VybmVsL2RtYS9LY29uZmlnLTE4Ny1cdGJvb2wgXCYjMzQ7RGVmYXVsdCBDTUEgYXJlYSBwZXIgTlVNQSBub2RlXCYjMzQ7XG4tLVxua2VybmVsL2RtYS9LY29uZmlnPTE5Nj1jb21tZW50IFwmIzM0O0RlZmF1bHQgY29udGlndW91cyBtZW1vcnkgYXJlYSBzaXplOlwmIzM0O1xua2VybmVsL2RtYS9LY29uZmlnLTE5Ny1cbmtlcm5lbC9kbWEvS2NvbmZpZzoxOTg6Y29uZmlnIENNQV9TSVpFX01CWVRFU1xua2VybmVsL2RtYS9LY29uZmlnLTE5OS1cdGludCBcJiMzNDtTaXplIGluIE1lZ2EgQnl0ZXNcJiMzNDtcbi0tXG5rZXJuZWwvZG1hL0tjb25maWctMjA4LVxua2VybmVsL2RtYS9LY29uZmlnOjIwOTpjb25maWcgQ01BX1NJWkVfUEVSQ0VOVEFHRVxua2VybmVsL2RtYS9LY29uZmlnLTIxMC1cdGludCBcJiMzNDtQZXJjZW50YWdlIG9mIHRvdGFsIG1lbW9yeVwmIzM0O1xuLS1cbmtlcm5lbC9kbWEvS2NvbmZpZz0yMjA9Y2hvaWNlXG4tLVxua2VybmVsL2RtYS9LY29uZmlnLTIyMy1cbmtlcm5lbC9kbWEvS2NvbmZpZzoyMjQ6Y29uZmlnIENNQV9TSVpFX1NFTF9NQllURVNcbmtlcm5lbC9kbWEvS2NvbmZpZy0yMjUtXHRib29sIFwmIzM0O1VzZSBtZWdhIGJ5dGVzIHZhbHVlIG9ubHlcJiMzNDtcbmtlcm5lbC9kbWEvS2NvbmZpZy0yMjYtXG5rZXJuZWwvZG1hL0tjb25maWc6MjI3OmNvbmZpZyBDTUFfU0laRV9TRUxfUEVSQ0VOVEFHRVxua2VybmVsL2RtYS9LY29uZmlnLTIyOC1cdGJvb2wgXCYjMzQ7VXNlIHBlcmNlbnRhZ2UgdmFsdWUgb25seVwmIzM0O1xua2VybmVsL2RtYS9LY29uZmlnLTIyOS1cbmtlcm5lbC9kbWEvS2NvbmZpZzoyMzA6Y29uZmlnIENNQV9TSVpFX1NFTF9NSU5cbmtlcm5lbC9kbWEvS2NvbmZpZy0yMzEtXHRib29sIFwmIzM0O1VzZSBsb3dlciB2YWx1ZSAobWluaW11bSlcJiMzNDtcbmtlcm5lbC9kbWEvS2NvbmZpZy0yMzItXG5rZXJuZWwvZG1hL0tjb25maWc6MjMzOmNvbmZpZyBDTUFfU0laRV9TRUxfTUFYXG5rZXJuZWwvZG1hL0tjb25maWctMjM0LVx0Ym9vbCBcJiMzNDtVc2UgaGlnaGVyIHZhbHVlIChtYXhpbXVtKVwmIzM0O1xuLS1cbmtlcm5lbC9kbWEvS2NvbmZpZz0yMzY9ZW5kY2hvaWNlXG5rZXJuZWwvZG1hL0tjb25maWctMjM3LVxua2VybmVsL2RtYS9LY29uZmlnOjIzODpjb25maWcgQ01BX0FMSUdOTUVOVFxua2VybmVsL2RtYS9LY29uZmlnLTIzOS1cdGludCBcJiMzNDtNYXhpbXVtIFBBR0VfU0laRSBvcmRlciBvZiBhbGlnbm1lbnQgZm9yIGNvbnRpZ3VvdXMgYnVmZmVyc1wmIzM0O1xuLS1cbm1tL0tjb25maWc9MTA2ND1jb25maWcgSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUFcbi0tXG5tbS9LY29uZmlnLTEwNjYtXG5tbS9LY29uZmlnOjEwNjc6Y29uZmlnIENNQVxubW0vS2NvbmZpZy0xMDY4LVx0Ym9vbCBcJiMzNDtDb250aWd1b3VzIE1lbW9yeSBBbGxvY2F0b3JcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTEwODEtXG5tbS9LY29uZmlnOjEwODI6Y29uZmlnIENNQV9ERUJVR0ZTXG5tbS9LY29uZmlnLTEwODMtXHRib29sIFwmIzM0O0NNQSBkZWJ1Z2ZzIGludGVyZmFjZVwmIzM0O1xuLS1cbm1tL0tjb25maWctMTA4Ny1cbm1tL0tjb25maWc6MTA4ODpjb25maWcgQ01BX1NZU0ZTXG5tbS9LY29uZmlnLTEwODktXHRib29sIFwmIzM0O0NNQSBpbmZvcm1hdGlvbiB0aHJvdWdoIHN5c2ZzIGludGVyZmFjZVwmIzM0O1xuLS1cbm1tL0tjb25maWctMTA5NC1cbm1tL0tjb25maWc6MTA5NTpjb25maWcgQ01BX0FSRUFTXG5tbS9LY29uZmlnLTEwOTYtXHRpbnQgXCYjMzQ7TWF4aW11bSBjb3VudCBvZiB0aGUgQ01BIGFyZWFzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIwOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MjAzCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgc3VtbWFyeToKCioqQ29uZmlnIERlZXAgRGl2ZSAtIENNQSAmYW1wOyBYODZfTUNFKioKCkFscmlnaHQsIHNvIHRoZSBhcmNoaXRlY3R1cmUgb2YgdGhpcyBzeXN0ZW0gdXNlcyBgQ01BYCBhcyBhIGtleSBjb25maWd1cmF0aW9uIGVsZW1lbnQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBDTUFgIGlzIHNwZWNpZmljYWxseSBhIGNvbmZpZ3VyYXRpb24gb3Igc2V0IG9mIHBhcmFtZXRlcnMgdGhhdCBpcyB2aXRhbCB0byB0aGUgc3lzdGVtJiMzOTtzIHBlcmZvcm1hbmNlIGFuZC9vciBzdGFiaWxpdHkuIEl0JiMzOTtzIGEga2V5IHBpZWNlIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gaXMgY3VycmVudGx5IGNvbmZpZ3VyZWQuCgpOb3csIHdoZXJlIHRvIGdvIG5leHQ/IEFoLCB5ZXMuIE15IGF0dGVudGlvbiBpcyBpbW1lZGlhdGVseSBkcmF3biB0byB0aGUgYFg4Nl9NQ0VgIGVsZW1lbnQuIEdpdmVuIG15IGV4cGVydGlzZSwgSSBhbSBhc3N1bWluZyB0aGlzIGxpa2VseSByZWxhdGVzIHRvIE1hY2hpbmUgQ2hlY2sgRXhjZXB0aW9ucyBvbiB4ODYgcHJvY2Vzc29ycy4gVGhpcyBtZWFucyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGBYODZfTUNFYCBjb25maWd1cmF0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBgQ01BYCBjb25maWcuIFRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgdHdvIG1heSB3ZWxsIHJldmVhbCBpbnNpZ2h0cyBpbnRvIG1lbW9yeSBhbGxvY2F0aW9uLCBlcnJvciBoYW5kbGluZywgYW5kIG92ZXJhbGwgc3lzdGVtIHJvYnVzdG5lc3MuIFBlcmhhcHMgYENNQWAgYWZmZWN0cyBob3cgYFg4Nl9NQ0VgIHJlcG9ydHMgZXJyb3JzLCBvciBtYXliZSBgQ01BYCBkaWN0YXRlcyBob3cgdGhlIHN5c3RlbSBjYW4gaGFuZGxlIGNlcnRhaW4gdHlwZXMgb2YgbWFjaGluZSBjaGVjayBldmVudHMuIEVpdGhlciB3YXksIHRoaXMgd2lsbCBiZSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhpcyBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIwOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBYODZfTUNFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L0tjb25maWc9MTExNz1jb25maWcgWDg2X1JFUk9VVEVfRk9SX0JST0tFTl9CT09UX0lSUVNcbi0tXG5hcmNoL3g4Ni9LY29uZmlnLTExMzktXG5hcmNoL3g4Ni9LY29uZmlnOjExNDA6Y29uZmlnIFg4Nl9NQ0VcbmFyY2gveDg2L0tjb25maWctMTE0MS1cdGJvb2wgXCYjMzQ7TWFjaGluZSBDaGVjayAvIG92ZXJoZWF0aW5nIHJlcG9ydGluZ1wmIzM0O1xuLS1cbmFyY2gveDg2L0tjb25maWctMTE0OS1cbmFyY2gveDg2L0tjb25maWc6MTE1MDpjb25maWcgWDg2X01DRUxPR19MRUdBQ1lcbmFyY2gveDg2L0tjb25maWctMTE1MS1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgZGVwcmVjYXRlZCAvZGV2L21jZWxvZyBjaGFyYWN0ZXIgZGV2aWNlXCYjMzQ7XG4tLVxuYXJjaC94ODYvS2NvbmZpZy0xMTU3LVxuYXJjaC94ODYvS2NvbmZpZzoxMTU4OmNvbmZpZyBYODZfTUNFX0lOVEVMXG5hcmNoL3g4Ni9LY29uZmlnLTExNTktXHRkZWZfYm9vbCB5XG4tLVxuYXJjaC94ODYvS2NvbmZpZy0xMTY1LVxuYXJjaC94ODYvS2NvbmZpZzoxMTY2OmNvbmZpZyBYODZfTUNFX0FNRFxuYXJjaC94ODYvS2NvbmZpZy0xMTY3LVx0ZGVmX2Jvb2wgeVxuLS1cbmFyY2gveDg2L0tjb25maWc9MTE3ND1jb25maWcgWDg2X0FOQ0lFTlRfTUNFXG4tLVxuYXJjaC94ODYvS2NvbmZpZy0xMTgxLVxuYXJjaC94ODYvS2NvbmZpZzoxMTgyOmNvbmZpZyBYODZfTUNFX1RIUkVTSE9MRFxuYXJjaC94ODYvS2NvbmZpZy0xMTgzLVx0ZGVwZW5kcyBvbiBYODZfTUNFX0FNRCB8fCBYODZfTUNFX0lOVEVMXG4tLVxuYXJjaC94ODYvS2NvbmZpZy0xMTg1LVxuYXJjaC94ODYvS2NvbmZpZzoxMTg2OmNvbmZpZyBYODZfTUNFX0lOSkVDVFxuYXJjaC94ODYvS2NvbmZpZy0xMTg3LVx0ZGVwZW5kcyBvbiBYODZfTUNFIFx1MDAyNlx1MDAyNiBYODZfTE9DQUxfQVBJQyBcdTAwMjZcdTAwMjYgREVCVUdfRlNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjA6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY5ODMKCQkJCQkJCW91dHB1dDogMjgyCgkJCQkJCQl0aG91Z2h0czogMTE5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLVk0geDg2IE9wZXJhdGlvbiBBbmFseXNpcyBmb3IgRW11bGF0aW9uIGFuZCBJbml0aWFsaXphdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSYjMzk7bSBjb25maXJtaW5nIHRoYXQgYFg4Nl9NQ0VgIGlzIGEgY29uZmlnLiBUaGVuIEkgc2VlIHRoZSByZWxldmFudCBLVk0gY29uZmlndXJhdGlvbnMgdGhhdCB3aWxsIGJlIGVuYWJsZWQ6IGBLVk1gLCBgS1ZNX0lOVEVMYCwgYEtWTV9BTURgLCBgS1ZNX1NNTWAsIGBLVk1fQU1EX1NFVmAsIGBLVk1fSU5URUxfVERYYCwgYElOVEVMX1REWF9IT1NUYCwgYENSWVBUT19ERVZfU1BfUFNQYCwgYENSWVBUT19ERVZfQ0NQX0REYCwgYEFNRF9JT01NVWAsIGBYODZfWDJBUElDYCwgYENNQWAsIGFuZCBgWDg2X01DRWAuIFRoZXNlIHNlZW0gc3RhbmRhcmQuCgpOb3csIEkmIzM5O20gZm9jdXNpbmcgb24ga2V5IHN5bWJvbHMgcmVsYXRlZCB0byBlbXVsYXRpb24gcmVxdWlyZW1lbnRzIGFuZCB2Q1BVIGluaXRpYWxpemF0aW9uOiBgZW11bGF0b3JfbGVhdmVfc21tYCwgYHZteF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkYCwgYHRkeF92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uYCwgYW5kIGBzZXZfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbmAuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgS1ZNIGhhbmRsZXMgc2l0dWF0aW9ucyBsaWtlIFNNTSBleGl0cyBhbmQgZ3Vlc3Qgc3RhdGUgaXNzdWVzLgoKSSYjMzk7bSBkb3VibGUtY2hlY2tpbmcgdGhlc2UgYXJlIG5vbi1zdGF0aWMgZnVuY3Rpb25zLCBhbmQgdGh1cyBleHBvc2VkLiBJIGNvbmZpcm1lZCB0aGV5IGFyZSBpbmRlZWQgZXhwb3NlZC4gVGhlIGZvY3VzIGlzIHRvIGFkZHJlc3MgdGhlIG5ldyBLVk0geDg2IG9wZXJhdGlvbiBgdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZGAgYW5kIHJlbmFtZWQgdkNQVSBmdW5jdGlvbiBgdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbmAsIHRoYXQgdGhpcyBjaGFuZ2UgbW9kaWZpZXMgdGhlIEtWTSYjMzk7cyBiZWhhdmlvci4gU3BlY2lmaWNhbGx5LCB0aGUgY2hhbmdlIHNlZW1zIHRvIGludm9sdmUgaGFuZGxpbmcgaW52YWxpZCBndWVzdCBzdGF0ZXMgYW5kIGVtdWxhdGlvbiBmYWlsdXJlcywgd2hpY2ggaXMgc2lnbmlmaWNhbnQsIGVzcGVjaWFsbHkgd2hlbiByZXR1cm5pbmcgZnJvbSBTeXN0ZW0gTWFuYWdlbWVudCBNb2RlLiBUaGlzIGNoYW5nZSBpcyBmdW5jdGlvbmFsIGFuZCBzaG91bGQgYmUgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4KCkkgdmVyaWZpZWQgdGhlIGZ1bmN0aW9uIGBlbXVsYXRvcl9sZWF2ZV9zbW1gIGlzIG5vbi1zdGF0aWMgaW4gYGFyY2gveDg2L2t2bS9zbW0uY2AgYW5kIGlzIGV4cG9ydGVkIGluIGBhcmNoL3g4Ni9rdm0vc21tLmhgLiBJIGNoZWNrZWQgYW5kIGNvbmZpcm1lZCB0aGF0IHRoZSBmdW5jdGlvbnMgYHZteF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkYCwgYHRkeF92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uYCwgYW5kIGBzZXZfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbmAgYXJlIGFsc28gbm9uLXN0YXRpYy4gRWFjaCBvZiB0aGVzZSBjaGVja3MgcHJvdmlkZXMgdGhlIHJlcXVpcmVkIGNvbnRleHQgZm9yIHRoZSBjaGFuZ2UsIGFuZCBjb25maXJtIHRoZXNlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGFyZSBleHBvcnRlZCBpbiB0aGVpciByZXNwZWN0aXZlIGZpbGVzLiBFdmVyeXRoaW5nIGNoZWNrcyBvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIwOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0lOVEVMJiMzNDssCiAgICAmIzM0O0tWTV9BTUQmIzM0OywKICAgICYjMzQ7S1ZNX1NNTSYjMzQ7LAogICAgJiMzNDtLVk1fQU1EX1NFViYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUxfVERYJiMzNDssCiAgICAmIzM0O0lOVEVMX1REWF9IT1NUJiMzNDssCiAgICAmIzM0O0NSWVBUT19ERVZfU1BfUFNQJiMzNDssCiAgICAmIzM0O0NSWVBUT19ERVZfQ0NQX0REJiMzNDssCiAgICAmIzM0O0FNRF9JT01NVSYjMzQ7LAogICAgJiMzNDtYODZfWDJBUElDJiMzNDssCiAgICAmIzM0O0NNQSYjMzQ7LAogICAgJiMzNDtYODZfTUNFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZW11bGF0b3JfbGVhdmVfc21tJiMzNDssCiAgICAmIzM0O3ZteF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkJiMzNDssCiAgICAmIzM0O3RkeF92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uJiMzNDssCiAgICAmIzM0O3Nldl92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgS1ZNIHg4NiBvcGVyYXRpb24gYHVuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWRgIGFuZCByZW5hbWVzIGB2Y3B1X3ByZV9ydW5gIHRvIGB2Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uYC4gSXQgbW9kaWZpZXMgaG93IEtWTSBoYW5kbGVzIGludmFsaWQgZ3Vlc3Qgc3RhdGVzIGFuZCBlbXVsYXRpb24gZmFpbHVyZXMsIHBhcnRpY3VsYXJseSB3aGVuIHJldHVybmluZyBmcm9tIFN5c3RlbSBNYW5hZ2VtZW50IE1vZGUgKFNNTSkgdmlhIFJTTS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEtWTSB4ODYgbG9naWMgYW5kIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OywKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7LAogICAgJiMzNDtLVk1fU01NJiMzNDssCiAgICAmIzM0O0tWTV9BTURfU0VWJiMzNDssCiAgICAmIzM0O0tWTV9JTlRFTF9URFgmIzM0OywKICAgICYjMzQ7SU5URUxfVERYX0hPU1QmIzM0OywKICAgICYjMzQ7Q1JZUFRPX0RFVl9TUF9QU1AmIzM0OywKICAgICYjMzQ7Q1JZUFRPX0RFVl9DQ1BfREQmIzM0OywKICAgICYjMzQ7QU1EX0lPTU1VJiMzNDssCiAgICAmIzM0O1g4Nl9YMkFQSUMmIzM0OywKICAgICYjMzQ7Q01BJiMzNDssCiAgICAmIzM0O1g4Nl9NQ0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtlbXVsYXRvcl9sZWF2ZV9zbW0mIzM0OywKICAgICYjMzQ7dm14X3VuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQmIzM0OywKICAgICYjMzQ7dGR4X3ZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24mIzM0OywKICAgICYjMzQ7c2V2X3ZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBLVk0geDg2IG9wZXJhdGlvbiBgdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZGAgYW5kIHJlbmFtZXMgYHZjcHVfcHJlX3J1bmAgdG8gYHZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb25gLiBJdCBtb2RpZmllcyBob3cgS1ZNIGhhbmRsZXMgaW52YWxpZCBndWVzdCBzdGF0ZXMgYW5kIGVtdWxhdGlvbiBmYWlsdXJlcywgcGFydGljdWxhcmx5IHdoZW4gcmV0dXJuaW5nIGZyb20gU3lzdGVtIE1hbmFnZW1lbnQgTW9kZSAoU01NKSB2aWEgUlNNLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgS1ZNIHg4NiBsb2dpYyBhbmQgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIwOjA4OjEyLjY0MTYxNDI1NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTI0NjA5NzY0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9JTlRFTFwiLFxuICAgIFwiS1ZNX0FNRFwiLFxuICAgIFwiS1ZNX1NNTVwiLFxuICAgIFwiS1ZNX0FNRF9TRVZcIixcbiAgICBcIktWTV9JTlRFTF9URFhcIixcbiAgICBcIklOVEVMX1REWF9IT1NUXCIsXG4gICAgXCJDUllQVE9fREVWX1NQX1BTUFwiLFxuICAgIFwiQ1JZUFRPX0RFVl9DQ1BfRERcIixcbiAgICBcIkFNRF9JT01NVVwiLFxuICAgIFwiWDg2X1gyQVBJQ1wiLFxuICAgIFwiQ01BXCIsXG4gICAgXCJYODZfTUNFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZW11bGF0b3JfbGVhdmVfc21tXCIsXG4gICAgXCJ2bXhfdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZFwiLFxuICAgIFwidGR4X3ZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb25cIixcbiAgICBcInNldl92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBLVk0geDg2IG9wZXJhdGlvbiBgdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZGAgYW5kIHJlbmFtZXMgYHZjcHVfcHJlX3J1bmAgdG8gYHZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb25gLiBJdCBtb2RpZmllcyBob3cgS1ZNIGhhbmRsZXMgaW52YWxpZCBndWVzdCBzdGF0ZXMgYW5kIGVtdWxhdGlvbiBmYWlsdXJlcywgcGFydGljdWxhcmx5IHdoZW4gcmV0dXJuaW5nIGZyb20gU3lzdGVtIE1hbmFnZW1lbnQgTW9kZSAoU01NKSB2aWEgUlNNLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgS1ZNIHg4NiBsb2dpYyBhbmQgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMjA6MDg6MTIuNjQxNjIyNTY0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTY0MTY1NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBiMjYwMTcwMDI2ODgyMDVlYTdmMzI5NzU0ZTc1Y2U2MDNmZTMzNWViXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgSnVsIDI4IDIwOjA4OjExIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oXFxuaW5kZXggNWNiMTMyZWNhM2MzNS4uZTIxM2M5YWUzZTMwMSAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oXFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaFxcbkBAIC02MywxMSArNjMsMTIgQEAgS1ZNX1g4Nl9PUF9PUFRJT05BTChmbHVzaF9yZW1vdGVfdGxic19yYW5nZSlcXG4gI2VuZGlmXFxuIEtWTV9YODZfT1AoZmx1c2hfdGxiX2d2YSlcXG4gS1ZNX1g4Nl9PUChmbHVzaF90bGJfZ3Vlc3QpXFxuLUtWTV9YODZfT1AodmNwdV9wcmVfcnVuKVxcbitLVk1fWDg2X09QX09QVElPTkFMX1JFVDAodmNwdV9uZWVkc19pbml0aWFsaXphdGlvbilcXG4gS1ZNX1g4Nl9PUCh2Y3B1X3J1bilcXG4gS1ZNX1g4Nl9PUChoYW5kbGVfZXhpdClcXG4gS1ZNX1g4Nl9PUChza2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKVxcbiBLVk1fWDg2X09QX09QVElPTkFMKHVwZGF0ZV9lbXVsYXRlZF9pbnN0cnVjdGlvbilcXG4rS1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKHVuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQpXFxuIEtWTV9YODZfT1Aoc2V0X2ludGVycnVwdF9zaGFkb3cpXFxuIEtWTV9YODZfT1AoZ2V0X2ludGVycnVwdF9zaGFkb3cpXFxuIEtWTV9YODZfT1AocGF0Y2hfaHlwZXJjYWxsKVxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxcbmluZGV4IDdhMjU4ODMxNjE2ZmEuLjI4Mzg0NzYxOWZmODggMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcXG5AQCAtMTU4NiwxMyArMTU4NiwxNSBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMge1xcbiBcXHQgKi9cXG4gXFx0dm9pZCAoKmZsdXNoX3RsYl9ndWVzdCkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4gXFxuLVxcdGludCAoKnZjcHVfcHJlX3J1bikoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4rXFx0Ym9vbCAoKnZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIFxcdGVudW0gZXhpdF9mYXN0cGF0aF9jb21wbGV0aW9uICgqdmNwdV9ydW4pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICB1NjQgcnVuX2ZsYWdzKTtcXG4gXFx0aW50ICgqaGFuZGxlX2V4aXQpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4gXFx0XFx0ZW51bSBleGl0X2Zhc3RwYXRoX2NvbXBsZXRpb24gZXhpdF9mYXN0cGF0aCk7XFxuIFxcdGludCAoKnNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIFxcdHZvaWQgKCp1cGRhdGVfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuK1xcdGJvb2wgKCp1bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbitcXG4gXFx0dm9pZCAoKnNldF9pbnRlcnJ1cHRfc2hhZG93KShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBtYXNrKTtcXG4gXFx0dTMyICgqZ2V0X2ludGVycnVwdF9zaGFkb3cpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIFxcdHZvaWQgKCpwYXRjaF9oeXBlcmNhbGwpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3NtbS5jIGIvYXJjaC94ODYva3ZtL3NtbS5jXFxuaW5kZXggYTQ0NjQ4N2JkZDVjZi4uNjU2YTM4ZGFkN2U3YSAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vc21tLmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vc21tLmNcXG5AQCAtNjQ5LDYgKzY0OSwxMCBAQCBpbnQgZW11bGF0b3JfbGVhdmVfc21tKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KVxcbiAjZW5kaWZcXG4gXFx0XFx0cmV0ID0gcnNtX2xvYWRfc3RhdGVfMzIoY3R4dCwgXFx1MDAyNnNtcmFtLnNtcmFtMzIpO1xcbiBcXG4rXFx0aWYgKHJldCA9PSBYODZFTVVMX0NPTlRJTlVFIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBrdm1feDg2X2NhbGwodW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZCkodmNwdSkpXFxuK1xcdFxcdHJldCA9IFg4NkVNVUxfVU5IQU5ETEVBQkxFO1xcbitcXG4gXFx0LypcXG4gXFx0ICogSWYgUlNNIGZhaWxzIGFuZCB0cmlnZ2VycyBzaHV0ZG93biwgYXJjaGl0ZWN0dXJhbGx5IHRoZSBzaHV0ZG93blxcbiBcXHQgKiBvY2N1cnMgKmJlZm9yZSogdGhlIHRyYW5zaXRpb24gdG8gZ3Vlc3QgbW9kZS4gIEJ1dCBkdWUgdG8gS1ZNJ3NcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuYyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcXG5pbmRleCA5MGEwOGQzNmQ4NDNkLi5mY2I0MWRmZGU0YzAyIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXFxuQEAgLTM1NTYsNiArMzU1NiwxMSBAQCB2b2lkIHNldl9mcmVlX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRfX3Nldl9lc191bm1hcF9naGNiKHN2bSk7XFxuIH1cXG4gXFxuK2Jvb2wgc2V2X3ZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbit7XFxuK1xcdHJldHVybiB0b19rdm1fc2V2X2luZm8odmNwdS1cXHUwMDNla3ZtKS1cXHUwMDNlbmVlZF9pbml0O1xcbit9XFxuK1xcbiBpbnQgcHJlX3Nldl9ydW4oc3RydWN0IHZjcHVfc3ZtICpzdm0sIGludCBjcHUpXFxuIHtcXG4gXFx0c3RydWN0IHN2bV9jcHVfZGF0YSAqc2QgPSBwZXJfY3B1X3B0cihcXHUwMDI2c3ZtX2RhdGEsIGNwdSk7XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXFxuaW5kZXggZDY4Y2JhMTJjNzcyYi4uYmNjY2E5YzViOTY2NyAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXFxuKysrIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xcbkBAIC00NDAyLDE2ICs0NDAyLDYgQEAgc3RhdGljIHZvaWQgc3ZtX2NhbmNlbF9pbmplY3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRzdm1fY29tcGxldGVfaW50ZXJydXB0cyh2Y3B1KTtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBzdm1fdmNwdV9wcmVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4te1xcbi0jaWZkZWYgQ09ORklHX0tWTV9BTURfU0VWXFxuLVxcdGlmICh0b19rdm1fc2V2X2luZm8odmNwdS1cXHUwMDNla3ZtKS1cXHUwMDNlbmVlZF9pbml0KVxcbi1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tI2VuZGlmXFxuLVxcbi1cXHRyZXR1cm4gMTtcXG4tfVxcbi1cXG4gc3RhdGljIGZhc3RwYXRoX3Qgc3ZtX2V4aXRfaGFuZGxlcnNfZmFzdHBhdGgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuIFxcdHN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpO1xcbkBAIC01Mzg4LDcgKzUzNzgsNiBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMgc3ZtX3g4Nl9vcHMgX19pbml0ZGF0YSA9IHtcXG4gXFx0LmZsdXNoX3RsYl9ndmEgPSBzdm1fZmx1c2hfdGxiX2d2YSxcXG4gXFx0LmZsdXNoX3RsYl9ndWVzdCA9IHN2bV9mbHVzaF90bGJfZ3Vlc3QsXFxuIFxcbi1cXHQudmNwdV9wcmVfcnVuID0gc3ZtX3ZjcHVfcHJlX3J1bixcXG4gXFx0LnZjcHVfcnVuID0gc3ZtX3ZjcHVfcnVuLFxcbiBcXHQuaGFuZGxlX2V4aXQgPSBzdm1faGFuZGxlX2V4aXQsXFxuIFxcdC5za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uID0gc3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24sXFxuQEAgLTU0NDYsNiArNTQzNSw3IEBAIHN0cnVjdCBrdm1feDg2X29wcyBzdm1feDg2X29wcyBfX2luaXRkYXRhID0ge1xcbiAjZW5kaWZcXG4gXFxuICNpZmRlZiBDT05GSUdfS1ZNX0FNRF9TRVZcXG4rXFx0LnZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24gPSBzZXZfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbixcXG4gXFx0LmRldl9nZXRfYXR0ciA9IHNldl9kZXZfZ2V0X2F0dHIsXFxuIFxcdC5tZW1fZW5jX2lvY3RsID0gc2V2X21lbV9lbmNfaW9jdGwsXFxuIFxcdC5tZW1fZW5jX3JlZ2lzdGVyX3JlZ2lvbiA9IHNldl9tZW1fZW5jX3JlZ2lzdGVyX3JlZ2lvbixcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uaCBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmhcXG5pbmRleCBhMzI3YmY3NTFlY2Q1Li42NmI0NGI1NDYwOGU4IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmhcXG4rKysgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oXFxuQEAgLTk3OSw2ICs5NzksNyBAQCB2b2lkIHNldl9lc19wcmVwYXJlX3N3aXRjaF90b19ndWVzdChzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgc3RydWN0IHNldl9lc19zYXZlX2FyZVxcbiB2b2lkIHNldl9lc191bm1hcF9naGNiKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKTtcXG4gXFxuICNpZmRlZiBDT05GSUdfS1ZNX0FNRF9TRVZcXG4rYm9vbCBzZXZfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbiBpbnQgc2V2X21lbV9lbmNfaW9jdGwoc3RydWN0IGt2bSAqa3ZtLCB2b2lkIF9fdXNlciAqYXJncCk7XFxuIGludCBzZXZfbWVtX2VuY19yZWdpc3Rlcl9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxcbiBcXHRcXHRcXHRcXHRzdHJ1Y3Qga3ZtX2VuY19yZWdpb24gKnJhbmdlKTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9tYWluLmMgYi9hcmNoL3g4Ni9rdm0vdm14L21haW4uY1xcbmluZGV4IDA0Zjk4NmUzZDQzOWEuLjBmZjMyMzBmZDk1ZTggMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9tYWluLmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L21haW4uY1xcbkBAIC0xNDAsMTIgKzE0MCwxMCBAQCBzdGF0aWMgdm9pZCB2dF92Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdHZteF92Y3B1X3B1dCh2Y3B1KTtcXG4gfVxcbiBcXG4tc3RhdGljIGludCB2dF92Y3B1X3ByZV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbitzdGF0aWMgYm9vbCB2dF92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4ge1xcbi1cXHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSlcXG4tXFx0XFx0cmV0dXJuIHRkeF92Y3B1X3ByZV9ydW4odmNwdSk7XFxuLVxcbi1cXHRyZXR1cm4gdm14X3ZjcHVfcHJlX3J1bih2Y3B1KTtcXG4rXFx0cmV0dXJuIGlzX3RkX3ZjcHUodmNwdSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICAgIHRkeF92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uKHZjcHUpO1xcbiB9XFxuIFxcbiBzdGF0aWMgZmFzdHBhdGhfdCB2dF92Y3B1X3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBydW5fZmxhZ3MpXFxuQEAgLTE2NSw2ICsxNjMsMTYgQEAgc3RhdGljIGludCB2dF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuIFxcdHJldHVybiB2bXhfaGFuZGxlX2V4aXQodmNwdSwgZmFzdHBhdGgpO1xcbiB9XFxuIFxcbitzdGF0aWMgYm9vbCB2dF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4re1xcbitcXHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSkge1xcbitcXHRcXHRXQVJOX09OX09OQ0UodG9fdnQodmNwdSktXFx1MDAzZWVtdWxhdGlvbl9yZXF1aXJlZCk7XFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHZteF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKHZjcHUpO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IHZ0X3NldF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgbXNyX2RhdGEgKm1zcl9pbmZvKVxcbiB7XFxuIFxcdGlmICh1bmxpa2VseShpc190ZF92Y3B1KHZjcHUpKSlcXG5AQCAtOTM5LDExICs5NDcsMTIgQEAgc3RydWN0IGt2bV94ODZfb3BzIHZ0X3g4Nl9vcHMgX19pbml0ZGF0YSA9IHtcXG4gXFx0LmZsdXNoX3RsYl9ndmEgPSB2dF9vcChmbHVzaF90bGJfZ3ZhKSxcXG4gXFx0LmZsdXNoX3RsYl9ndWVzdCA9IHZ0X29wKGZsdXNoX3RsYl9ndWVzdCksXFxuIFxcbi1cXHQudmNwdV9wcmVfcnVuID0gdnRfb3AodmNwdV9wcmVfcnVuKSxcXG4rXFx0LnZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24gPSB2dF9vcF90ZHhfb25seSh2Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uKSxcXG4gXFx0LnZjcHVfcnVuID0gdnRfb3AodmNwdV9ydW4pLFxcbiBcXHQuaGFuZGxlX2V4aXQgPSB2dF9vcChoYW5kbGVfZXhpdCksXFxuIFxcdC5za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uID0gdm14X3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24sXFxuIFxcdC51cGRhdGVfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24gPSB2bXhfdXBkYXRlX2VtdWxhdGVkX2luc3RydWN0aW9uLFxcbitcXHQudW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZCA9IHZ0X29wKHVuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQpLFxcbiBcXHQuc2V0X2ludGVycnVwdF9zaGFkb3cgPSB2dF9vcChzZXRfaW50ZXJydXB0X3NoYWRvdyksXFxuIFxcdC5nZXRfaW50ZXJydXB0X3NoYWRvdyA9IHZ0X29wKGdldF9pbnRlcnJ1cHRfc2hhZG93KSxcXG4gXFx0LnBhdGNoX2h5cGVyY2FsbCA9IHZ0X29wKHBhdGNoX2h5cGVyY2FsbCksXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmMgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXFxuaW5kZXggZDFhZjBhNzUyZTk3ZS4uYjI3MmMyMDU4NmE3NCAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXFxuKysrIGIvYXJjaC94ODYva3ZtL3ZteC90ZHguY1xcbkBAIC04OTcsMTMgKzg5NywxMCBAQCB2b2lkIHRkeF92Y3B1X2ZyZWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHR0ZHgtXFx1MDAzZXN0YXRlID0gVkNQVV9URF9TVEFURV9VTklOSVRJQUxJWkVEO1xcbiB9XFxuIFxcbi1pbnQgdGR4X3ZjcHVfcHJlX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuK2Jvb2wgdGR4X3ZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuLVxcdGlmICh1bmxpa2VseSh0b190ZHgodmNwdSktXFx1MDAzZXN0YXRlICE9IFZDUFVfVERfU1RBVEVfSU5JVElBTElaRUQgfHxcXG4tXFx0XFx0ICAgICB0b19rdm1fdGR4KHZjcHUtXFx1MDAzZWt2bSktXFx1MDAzZXN0YXRlICE9IFREX1NUQVRFX1JVTk5BQkxFKSlcXG4tXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLVxcbi1cXHRyZXR1cm4gMTtcXG4rXFx0cmV0dXJuIHRvX3RkeCh2Y3B1KS1cXHUwMDNlc3RhdGUgIT0gVkNQVV9URF9TVEFURV9JTklUSUFMSVpFRCB8fFxcbitcXHQgICAgICAgdG9fa3ZtX3RkeCh2Y3B1LVxcdTAwM2Vrdm0pLVxcdTAwM2VzdGF0ZSAhPSBURF9TVEFURV9SVU5OQUJMRTtcXG4gfVxcbiBcXG4gc3RhdGljIF9fYWx3YXlzX2lubGluZSB1MzIgdGRjYWxsX3RvX3ZteF9leGl0X3JlYXNvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdm14LmMgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXFxuaW5kZXggZTRiOWFjN2ZlZDlmMC4uNzYxNjBhZGY4Mjk3MCAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXFxuKysrIGIvYXJjaC94ODYva3ZtL3ZteC92bXguY1xcbkBAIC02MDM1LDcgKzYwMzUsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9ubWlfd2luZG93KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gICogd2l0aCB1bnNyZXN0cmljdGVkIGd1ZXN0IG1vZGUgZGlzYWJsZWQpIGFuZCBLVk0gY2FuJ3QgZmFpdGhmdWxseSBlbXVsYXRlIHRoZVxcbiAgKiBjdXJyZW50IHZDUFUgc3RhdGUuXFxuICAqL1xcbi1zdGF0aWMgYm9vbCB2bXhfdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuK2Jvb2wgdm14X3VuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuIFxcdHN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpO1xcbiBcXG5AQCAtNjExMCwxNiArNjExMCw2IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2ludmFsaWRfZ3Vlc3Rfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRyZXR1cm4gMTtcXG4gfVxcbiBcXG4taW50IHZteF92Y3B1X3ByZV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi17XFxuLVxcdGlmICh2bXhfdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZCh2Y3B1KSkge1xcbi1cXHRcXHRrdm1fcHJlcGFyZV9lbXVsYXRpb25fZmFpbHVyZV9leGl0KHZjcHUpO1xcbi1cXHRcXHRyZXR1cm4gMDtcXG4tXFx0fVxcbi1cXG4tXFx0cmV0dXJuIDE7XFxuLX1cXG4tXFxuIC8qXFxuICAqIEluZGljYXRlIGEgYnVzeS13YWl0aW5nIHZjcHUgaW4gc3BpbmxvY2suIFdlIGRvIG5vdCBlbmFibGUgdGhlIFBBVVNFXFxuICAqIGV4aXRpbmcsIHNvIG9ubHkgZ2V0IGhlcmUgb24gY3B1IHdpdGggUEFVU0UtTG9vcC1FeGl0aW5nLlxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaCBiL2FyY2gveDg2L2t2bS92bXgveDg2X29wcy5oXFxuaW5kZXggNDA5ODU4MDc0MjQ2Mi4uY2RiMzhkOTQwY2ZiNyAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaFxcbisrKyBiL2FyY2gveDg2L2t2bS92bXgveDg2X29wcy5oXFxuQEAgLTIxLDcgKzIxLDYgQEAgaW50IHZteF92bV9pbml0KHN0cnVjdCBrdm0gKmt2bSk7XFxuIHZvaWQgdm14X3ZtX2Rlc3Ryb3koc3RydWN0IGt2bSAqa3ZtKTtcXG4gaW50IHZteF92Y3B1X3ByZWNyZWF0ZShzdHJ1Y3Qga3ZtICprdm0pO1xcbiBpbnQgdm14X3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuLWludCB2bXhfdmNwdV9wcmVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIGZhc3RwYXRoX3Qgdm14X3ZjcHVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHJ1bl9mbGFncyk7XFxuIHZvaWQgdm14X3ZjcHVfZnJlZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbiB2b2lkIHZteF92Y3B1X3Jlc2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBpbml0X2V2ZW50KTtcXG5AQCAtMzEsNiArMzAsNyBAQCBpbnQgdm14X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBleGl0X2Zhc3RwYXRoKTtcXG4gdm9pZCB2bXhfaGFuZGxlX2V4aXRfaXJxb2ZmKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIGludCB2bXhfc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbiB2b2lkIHZteF91cGRhdGVfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4rYm9vbCB2bXhfdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbiBpbnQgdm14X3NldF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgbXNyX2RhdGEgKm1zcl9pbmZvKTtcXG4gI2lmZGVmIENPTkZJR19LVk1fU01NXFxuIGludCB2bXhfc21pX2FsbG93ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGZvcl9pbmplY3Rpb24pO1xcbkBAIC0xMzcsNyArMTM3LDcgQEAgaW50IHRkeF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbiB2b2lkIHRkeF92Y3B1X3Jlc2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBpbml0X2V2ZW50KTtcXG4gdm9pZCB0ZHhfdmNwdV9mcmVlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIHZvaWQgdGR4X3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpO1xcbi1pbnQgdGR4X3ZjcHVfcHJlX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbitib29sIHRkeF92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIGZhc3RwYXRoX3QgdGR4X3ZjcHVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHJ1bl9mbGFncyk7XFxuIHZvaWQgdGR4X3ByZXBhcmVfc3dpdGNoX3RvX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIHZvaWQgdGR4X3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuY1xcbmluZGV4IDBmMWE4MjkwMzJjMDYuLmQ5NGI1OTE0MGM0NTIgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5jXFxuKysrIGIvYXJjaC94ODYva3ZtL3g4Ni5jXFxuQEAgLTg4NjcsNyArODg2NywxNSBAQCBzdGF0aWMgaW50IGt2bV94ODZfdmNwdV9wcmVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0ICAgICFrdm1fYXBpY19pbml0X3NpcGlfYWxsb3dlZCh2Y3B1KSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbi1cXHRyZXR1cm4ga3ZtX3g4Nl9jYWxsKHZjcHVfcHJlX3J1bikodmNwdSk7XFxuK1xcdGlmIChrdm1feDg2X2NhbGwodmNwdV9uZWVkc19pbml0aWFsaXphdGlvbikodmNwdSkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0aWYgKGt2bV94ODZfY2FsbCh1bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKSh2Y3B1KSkge1xcbitcXHRcXHRrdm1fcHJlcGFyZV9lbXVsYXRpb25fZmFpbHVyZV9leGl0KHZjcHUpO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDE7XFxuIH1cXG4gXFxuIGludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X2ludmFsaWRfbmVzdGVkX2d1ZXN0X3N0YXRlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9pbnZhbGlkX25lc3RlZF9ndWVzdF9zdGF0ZS5jXFxuaW5kZXggNTc4MjgzODkzYWIzNy4uNmY1NDZkZWIxOTNhOSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9pbnZhbGlkX25lc3RlZF9ndWVzdF9zdGF0ZS5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfaW52YWxpZF9uZXN0ZWRfZ3Vlc3Rfc3RhdGUuY1xcbkBAIC0yLDYgKzIsNyBAQFxcbiAjaW5jbHVkZSBcXFwidGVzdF91dGlsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJrdm1fdXRpbC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwicHJvY2Vzc29yLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJzbW0uaFxcXCJcXG4gI2luY2x1ZGUgXFxcInZteC5oXFxcIlxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY3N0cmluZy5oXFx1MDAzZVxcbkBAIC05LDkgKzEwLDIzIEBAXFxuIFxcbiAjaW5jbHVkZSBcXFwia3NlbGZ0ZXN0LmhcXFwiXFxuIFxcbi0jZGVmaW5lIEFSQklUUkFSWV9JT19QT1JUIDB4MjAwMFxcbisjZGVmaW5lIEFSQklUUkFSWV9JT19QT1JUIDB4ODBcXG4gXFxuLXN0YXRpYyBzdHJ1Y3Qga3ZtX3ZtICp2bTtcXG4rLypcXG4rICogVGhlIDY0LWJpdCBTTVJBTSBzdGF0ZS1zYXZlIGFyZWEgc3RhcnRzIGF0IFNNQkFTRSArIDB4ZmUwMC4gIFRSIHN0YXJ0cyBhdFxcbisgKiBvZmZzZXQgMHhmZTkwLCBhbmQgYXR0cmlidXRlcyBpcyB0aGUgc2Vjb25kIDE2LWJpdCBmaWVsZCBpbiB0aGUgZGVzY3JpcHRvci5cXG4rICovXFxuKyNkZWZpbmUgU01SQU02NF9UUl9BVFRSSUJVVEVTX09GRlNFVFxcdDB4ZmU5MlxcbisjZGVmaW5lIFNNUkFNX0dQQVxcdFxcdFxcdDB4MTAwMDAwMFxcbitcXG4rLypcXG4rICogU01JIGhhbmRsZXIgdGhhdCBydW5zIGluIDE2LWJpdCBSZWFsIE1vZGUuICBTeW5jcyB3aXRoIEwwIHZpYSBwb3J0IEkvTywgdGhlblxcbisgKiBleGVjdXRlcyBSU00gdG8gdHJpZ2dlciB0aGUgY29uc3VtcHRpb24gb2YgaW52YWxpZCBndWVzdCBzdGF0ZS5cXG4rICovXFxuK3N0YXRpYyB1OCBzbWlfaGFuZGxlcltdID0ge1xcbitcXHQweGU0LCBBUkJJVFJBUllfSU9fUE9SVCxcXHQvKiBJTiAkQVJCSVRSQVJZX0lPX1BPUlQsICVhbCAqL1xcbitcXHQweDBmLCAweGFhLFxcdFxcdFxcdC8qIFJTTSAqL1xcbit9O1xcbiBcXG4gc3RhdGljIHZvaWQgbDJfZ3Vlc3RfY29kZSh2b2lkKVxcbiB7XFxuQEAgLTE5LDggKzM0LDkgQEAgc3RhdGljIHZvaWQgbDJfZ3Vlc3RfY29kZSh2b2lkKVxcbiBcXHQgKiBHZW5lcmF0ZSBhbiBleGl0IHRvIEwwIHVzZXJzcGFjZSwgaS5lLiBtYWluKCksIHZpYSBJL08gdG8gYW5cXG4gXFx0ICogYXJiaXRyYXJ5IHBvcnQuXFxuIFxcdCAqL1xcbi1cXHRhc20gdm9sYXRpbGUoXFxcImluYiAlJWR4LCAlJWFsXFxcIlxcbi1cXHRcXHQgICAgIDogOiBbcG9ydF0gXFxcImRcXFwiIChBUkJJVFJBUllfSU9fUE9SVCkgOiBcXFwicmF4XFxcIik7XFxuK1xcdGFzbSB2b2xhdGlsZShcXFwiaW5iICRcXFwiIF9fc3RyaW5naWZ5KEFSQklUUkFSWV9JT19QT1JUKSBcXFwiLCAlJWFsXFxcIlxcbitcXHRcXHQgICAgIDo6OiBcXFwicmF4XFxcIik7XFxuK1xcdEdVRVNUX0ZBSUwoXFxcIkwyIHJlc3VtZWQgYWZ0ZXIgc3R1ZmZpbmcgaW52YWxpZCBndWVzdCBzdGF0ZVxcXCIpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBsMV9ndWVzdF9jb2RlKHN0cnVjdCB2bXhfcGFnZXMgKnZteF9wYWdlcylcXG5AQCAtNDYsMzUgKzYyLDUwIEBAIHN0YXRpYyB2b2lkIGwxX2d1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKVxcbiBcXHRHVUVTVF9ET05FKCk7XFxuIH1cXG4gXFxuLWludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXFxuK3N0YXRpYyB2b2lkIHZjcHVfcnVuX3RvX2lvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCB3YW50X2wyKVxcbiB7XFxuLVxcdGd2YV90IHZteF9wYWdlc19ndmE7XFxuLVxcdHN0cnVjdCBrdm1fc3JlZ3Mgc3JlZ3M7XFxuLVxcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcXG4tXFx0c3RydWN0IGt2bV9ydW4gKnJ1bjtcXG4tXFx0c3RydWN0IHVjYWxsIHVjO1xcbitcXHRzdHJ1Y3Qga3ZtX3J1biAqcnVuID0gdmNwdS1cXHUwMDNlcnVuO1xcbiBcXG4tXFx0VEVTVF9SRVFVSVJFKGt2bV9jcHVfaGFzKFg4Nl9GRUFUVVJFX1ZNWCkpO1xcbitcXHR2Y3B1X3J1bih2Y3B1KTtcXG4gXFxuLVxcdHZtID0gdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoXFx1MDAyNnZjcHUsIGwxX2d1ZXN0X2NvZGUpO1xcbitcXHRURVNUX0FTU0VSVF9LVk1fRVhJVF9SRUFTT04odmNwdSwgS1ZNX0VYSVRfSU8pO1xcbiBcXG4tXFx0LyogQWxsb2NhdGUgVk1YIHBhZ2VzIGFuZCBzaGFyZWQgZGVzY3JpcHRvcnMgKHZteF9wYWdlcykuICovXFxuLVxcdHZjcHVfYWxsb2Nfdm14KHZtLCBcXHUwMDI2dm14X3BhZ2VzX2d2YSk7XFxuLVxcdHZjcHVfYXJnc19zZXQodmNwdSwgMSwgdm14X3BhZ2VzX2d2YSk7XFxuK1xcdFRFU1RfQVNTRVJUKHJ1bi1cXHUwMDNlaW8ucG9ydCA9PSBBUkJJVFJBUllfSU9fUE9SVCBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgKCEhKHJ1bi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBLVk1fUlVOX1g4Nl9HVUVTVF9NT0RFKSA9PSB3YW50X2wyICB8fFxcbitcXHRcXHQgICAgICFrdm1faGFzX2NhcChLVk1fQ0FQX1g4Nl9HVUVTVF9NT0RFKSksXFxuK1xcdFxcdCAgICBcXFwiRXhwZWN0ZWQgSU4gZnJvbSBwb3J0ICVkIGZyb20gTDIsIGdvdCBwb3J0ICVkIGZyb20gTCV1XFxcIixcXG4rXFx0XFx0ICAgIEFSQklUUkFSWV9JT19QT1JULCBydW4tXFx1MDAzZWlvLnBvcnQsXFxuK1xcdFxcdCAgICAxICsgISEocnVuLVxcdTAwM2VmbGFncyBcXHUwMDI2IEtWTV9SVU5fWDg2X0dVRVNUX01PREUpKTtcXG4rfVxcbiBcXG4tXFx0dmNwdV9ydW4odmNwdSk7XFxuK3N0YXRpYyBzdHJ1Y3Qga3ZtX3ZtICp2bV9jcmVhdGVfYW5kX3J1bl9sMihzdHJ1Y3Qga3ZtX3ZjcHUgKip2Y3B1KVxcbit7XFxuK1xcdGd2YV90IHZteF9wYWdlc19ndmE7XFxuK1xcdHN0cnVjdCBrdm1fdm0gKnZtO1xcbitcXG4rXFx0dm0gPSB2bV9jcmVhdGVfd2l0aF9vbmVfdmNwdSh2Y3B1LCBsMV9ndWVzdF9jb2RlKTtcXG4gXFxuLVxcdHJ1biA9IHZjcHUtXFx1MDAzZXJ1bjtcXG4rXFx0LyogQWxsb2NhdGUgVk1YIHBhZ2VzIGFuZCBzaGFyZWQgZGVzY3JpcHRvcnMgKHZteF9wYWdlcykuICovXFxuK1xcdHZjcHVfYWxsb2Nfdm14KHZtLCBcXHUwMDI2dm14X3BhZ2VzX2d2YSk7XFxuK1xcdHZjcHVfYXJnc19zZXQoKnZjcHUsIDEsIHZteF9wYWdlc19ndmEpO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogVGhlIGZpcnN0IGV4aXQgdG8gTDAgdXNlcnNwYWNlIHNob3VsZCBiZSBhbiBJL08gYWNjZXNzIGZyb20gTDIuXFxuIFxcdCAqIFJ1bm5pbmcgTDEgc2hvdWxkIGxhdW5jaCBMMiB3aXRob3V0IHRyaWdnZXJpbmcgYW4gZXhpdCB0byB1c2Vyc3BhY2UuXFxuIFxcdCAqL1xcbi1cXHRURVNUX0FTU0VSVF9LVk1fRVhJVF9SRUFTT04odmNwdSwgS1ZNX0VYSVRfSU8pO1xcbitcXHR2Y3B1X3J1bl90b19pbygqdmNwdSwgdHJ1ZSk7XFxuIFxcbi1cXHRURVNUX0FTU0VSVChydW4tXFx1MDAzZWlvLnBvcnQgPT0gQVJCSVRSQVJZX0lPX1BPUlQsXFxuLVxcdFxcdCAgICBcXFwiRXhwZWN0ZWQgSU4gZnJvbSBwb3J0ICVkIGZyb20gTDIsIGdvdCBwb3J0ICVkXFxcIixcXG4tXFx0XFx0ICAgIEFSQklUUkFSWV9JT19QT1JULCBydW4tXFx1MDAzZWlvLnBvcnQpO1xcbitcXHRyZXR1cm4gdm07XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHRlc3RfaW52YWxpZF9sMl9ndWVzdF9zdGF0ZSh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBrdm1fc3JlZ3Mgc3JlZ3M7XFxuK1xcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcXG4rXFx0c3RydWN0IGt2bV92bSAqdm07XFxuK1xcdHN0cnVjdCB1Y2FsbCB1YztcXG4rXFxuK1xcdHZtID0gdm1fY3JlYXRlX2FuZF9ydW5fbDIoXFx1MDAyNnZjcHUpO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogU3R1ZmYgaW52YWxpZCBndWVzdCBzdGF0ZSBmb3IgTDIgYnkgbWFraW5nIFRSIHVudXNhYmxlLiAgVGhlIG5leHRcXG5AQCAtOTYsNCArMTI3LDQ5IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdFRFU1RfRkFJTChcXFwiVW5leHBlY3RlZCB1Y2FsbDogJWx1XFxcIiwgdWMuY21kKTtcXG4gXFx0fVxcbitcXG4rXFx0a3ZtX3ZtX2ZyZWUodm0pO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB0ZXN0X2ludmFsaWRfbDJfZ3Vlc3Rfc3RhdGVfcnNtKHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xcbitcXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcXG4rXFx0dTE2ICp0cl9hdHRycztcXG4rXFxuK1xcdGlmICgha3ZtX2hhc19jYXAoS1ZNX0NBUF9YODZfU01NKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0dm0gPSB2bV9jcmVhdGVfYW5kX3J1bl9sMihcXHUwMDI2dmNwdSk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBJbmplY3QgU01JIHdoaWxlIEwyIGlzIGFjdGl2ZSwgcnVuIHRoZSB2Q1BVIHRvIGdldCBJL08gZXhpdCBmcm9tIEwxLFxcbitcXHQgKiB0aGVuIHN0dWZmIFRSIGluIHRoZSBTTVJBTSBzdGF0ZS1zYXZlIGFyZWEgc28gdGhhdCBSU00gcmVzdG9yZXNcXG4rXFx0ICogaW52YWxpZCBMMiBzdGF0ZS5cXG4rXFx0ICovXFxuK1xcdHNldHVwX3NtcmFtKHZtLCB2Y3B1LCBTTVJBTV9HUEEsIHNtaV9oYW5kbGVyLCBzaXplb2Yoc21pX2hhbmRsZXIpKTtcXG4rXFx0aW5qZWN0X3NtaSh2Y3B1KTtcXG4rXFxuK1xcdHZjcHVfcnVuX3RvX2lvKHZjcHUsIGZhbHNlKTtcXG4rXFxuK1xcdC8qIENsZWFyIHRoZSBwcmVzZW50IGJpdCBpbiBTTVJBTSB0byBtYWtlIFRSIHVudXNhYmxlLiAqL1xcbitcXHR0cl9hdHRycyA9IGFkZHJfZ3BhMmh2YSh2bSwgU01SQU1fR1BBICsgU01SQU02NF9UUl9BVFRSSUJVVEVTX09GRlNFVCk7XFxuK1xcdCp0cl9hdHRycyBcXHUwMDI2PSB+QklUKDcpO1xcbitcXG4rXFx0dmNwdV9ydW4odmNwdSk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBGb3IgUlNNLCBMMSBnZXRzIHRoZSBTSFVURE9XTiBiZWNhdXNlIFJTTSBpcyBhcmNoaXRlY3R1cmFsbHkgZGVmaW5lZFxcbitcXHQgKiB0byByZXN1bHQgaW4gc2h1dGRvd24gaWYgdGhlIENQVSBkZXRlY3RzIGludmFsaWQgc3RhdGUgaW4gU01SQU0uXFxuK1xcdCAqL1xcbitcXHRURVNUX0FTU0VSVF9LVk1fRVhJVF9SRUFTT04odmNwdSwgS1ZNX0VYSVRfU0hVVERPV04pO1xcbitcXHRrdm1fdm1fZnJlZSh2bSk7XFxuK31cXG4rXFxuK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXFxuK3tcXG4rXFx0VEVTVF9SRVFVSVJFKGt2bV9jcHVfaGFzKFg4Nl9GRUFUVVJFX1ZNWCkpO1xcbitcXG4rXFx0dGVzdF9pbnZhbGlkX2wyX2d1ZXN0X3N0YXRlKCk7XFxuK1xcdHRlc3RfaW52YWxpZF9sMl9ndWVzdF9zdGF0ZV9yc20oKTtcXG4gfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMDowODoxMy4xOTg3OTI4ODRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNTg2ODg5MTE3MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fSU5URUxcIixcbiAgICBcIktWTV9BTURcIixcbiAgICBcIktWTV9TTU1cIixcbiAgICBcIktWTV9BTURfU0VWXCIsXG4gICAgXCJLVk1fSU5URUxfVERYXCIsXG4gICAgXCJJTlRFTF9URFhfSE9TVFwiLFxuICAgIFwiQ1JZUFRPX0RFVl9TUF9QU1BcIixcbiAgICBcIkNSWVBUT19ERVZfQ0NQX0REXCIsXG4gICAgXCJBTURfSU9NTVVcIixcbiAgICBcIlg4Nl9YMkFQSUNcIixcbiAgICBcIkNNQVwiLFxuICAgIFwiWDg2X01DRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImVtdWxhdG9yX2xlYXZlX3NtbVwiLFxuICAgIFwidm14X3VuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWRcIixcbiAgICBcInRkeF92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uXCIsXG4gICAgXCJzZXZfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgS1ZNIHg4NiBvcGVyYXRpb24gYHVuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWRgIGFuZCByZW5hbWVzIGB2Y3B1X3ByZV9ydW5gIHRvIGB2Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uYC4gSXQgbW9kaWZpZXMgaG93IEtWTSBoYW5kbGVzIGludmFsaWQgZ3Vlc3Qgc3RhdGVzIGFuZCBlbXVsYXRpb24gZmFpbHVyZXMsIHBhcnRpY3VsYXJseSB3aGVuIHJldHVybmluZyBmcm9tIFN5c3RlbSBNYW5hZ2VtZW50IE1vZGUgKFNNTSkgdmlhIFJTTS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEtWTSB4ODYgbG9naWMgYW5kIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGIyNjAxNzAwMjY4ODIwNWVhN2YzMjk3NTRlNzVjZTYwM2ZlMzM1ZWJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1bCAyOCAyMDowODoxMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oXG5pbmRleCA1Y2IxMzJlY2EzYzM1Li5lMjEzYzlhZTNlMzAxIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaFxuQEAgLTYzLDExICs2MywxMiBAQCBLVk1fWDg2X09QX09QVElPTkFMKGZsdXNoX3JlbW90ZV90bGJzX3JhbmdlKVxuICNlbmRpZlxuIEtWTV9YODZfT1AoZmx1c2hfdGxiX2d2YSlcbiBLVk1fWDg2X09QKGZsdXNoX3RsYl9ndWVzdClcbi1LVk1fWDg2X09QKHZjcHVfcHJlX3J1bilcbitLVk1fWDg2X09QX09QVElPTkFMX1JFVDAodmNwdV9uZWVkc19pbml0aWFsaXphdGlvbilcbiBLVk1fWDg2X09QKHZjcHVfcnVuKVxuIEtWTV9YODZfT1AoaGFuZGxlX2V4aXQpXG4gS1ZNX1g4Nl9PUChza2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKVxuIEtWTV9YODZfT1BfT1BUSU9OQUwodXBkYXRlX2VtdWxhdGVkX2luc3RydWN0aW9uKVxuK0tWTV9YODZfT1BfT1BUSU9OQUxfUkVUMCh1bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKVxuIEtWTV9YODZfT1Aoc2V0X2ludGVycnVwdF9zaGFkb3cpXG4gS1ZNX1g4Nl9PUChnZXRfaW50ZXJydXB0X3NoYWRvdylcbiBLVk1fWDg2X09QKHBhdGNoX2h5cGVyY2FsbClcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuaW5kZXggN2EyNTg4MzE2MTZmYS4uMjgzODQ3NjE5ZmY4OCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbkBAIC0xNTg2LDEzICsxNTg2LDE1IEBAIHN0cnVjdCBrdm1feDg2X29wcyB7XG4gXHQgKi9cbiBcdHZvaWQgKCpmbHVzaF90bGJfZ3Vlc3QpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gXG4tXHRpbnQgKCp2Y3B1X3ByZV9ydW4pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4rXHRib29sICgqdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbikoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBcdGVudW0gZXhpdF9mYXN0cGF0aF9jb21wbGV0aW9uICgqdmNwdV9ydW4pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdFx0XHRcdFx0XHQgIHU2NCBydW5fZmxhZ3MpO1xuIFx0aW50ICgqaGFuZGxlX2V4aXQpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdFx0ZW51bSBleGl0X2Zhc3RwYXRoX2NvbXBsZXRpb24gZXhpdF9mYXN0cGF0aCk7XG4gXHRpbnQgKCpza2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIFx0dm9pZCAoKnVwZGF0ZV9lbXVsYXRlZF9pbnN0cnVjdGlvbikoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbitcdGJvb2wgKCp1bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuK1xuIFx0dm9pZCAoKnNldF9pbnRlcnJ1cHRfc2hhZG93KShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBtYXNrKTtcbiBcdHUzMiAoKmdldF9pbnRlcnJ1cHRfc2hhZG93KShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIFx0dm9pZCAoKnBhdGNoX2h5cGVyY2FsbCkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zbW0uYyBiL2FyY2gveDg2L2t2bS9zbW0uY1xuaW5kZXggYTQ0NjQ4N2JkZDVjZi4uNjU2YTM4ZGFkN2U3YSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zbW0uY1xuKysrIGIvYXJjaC94ODYva3ZtL3NtbS5jXG5AQCAtNjQ5LDYgKzY0OSwxMCBAQCBpbnQgZW11bGF0b3JfbGVhdmVfc21tKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KVxuICNlbmRpZlxuIFx0XHRyZXQgPSByc21fbG9hZF9zdGF0ZV8zMihjdHh0LCBcdTAwMjZzbXJhbS5zbXJhbTMyKTtcbiBcbitcdGlmIChyZXQgPT0gWDg2RU1VTF9DT05USU5VRSBcdTAwMjZcdTAwMjZcbitcdCAgICBrdm1feDg2X2NhbGwodW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZCkodmNwdSkpXG4rXHRcdHJldCA9IFg4NkVNVUxfVU5IQU5ETEVBQkxFO1xuK1xuIFx0LypcbiBcdCAqIElmIFJTTSBmYWlscyBhbmQgdHJpZ2dlcnMgc2h1dGRvd24sIGFyY2hpdGVjdHVyYWxseSB0aGUgc2h1dGRvd25cbiBcdCAqIG9jY3VycyAqYmVmb3JlKiB0aGUgdHJhbnNpdGlvbiB0byBndWVzdCBtb2RlLiAgQnV0IGR1ZSB0byBLVk0nc1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXG5pbmRleCA5MGEwOGQzNmQ4NDNkLi5mY2I0MWRmZGU0YzAyIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xuKysrIGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xuQEAgLTM1NTYsNiArMzU1NiwxMSBAQCB2b2lkIHNldl9mcmVlX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0X19zZXZfZXNfdW5tYXBfZ2hjYihzdm0pO1xuIH1cbiBcbitib29sIHNldl92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbit7XG4rXHRyZXR1cm4gdG9fa3ZtX3Nldl9pbmZvKHZjcHUtXHUwMDNla3ZtKS1cdTAwM2VuZWVkX2luaXQ7XG4rfVxuK1xuIGludCBwcmVfc2V2X3J1bihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgaW50IGNwdSlcbiB7XG4gXHRzdHJ1Y3Qgc3ZtX2NwdV9kYXRhICpzZCA9IHBlcl9jcHVfcHRyKFx1MDAyNnN2bV9kYXRhLCBjcHUpO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXG5pbmRleCBkNjhjYmExMmM3NzJiLi5iY2NjYTljNWI5NjY3IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xuKysrIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xuQEAgLTQ0MDIsMTYgKzQ0MDIsNiBAQCBzdGF0aWMgdm9pZCBzdm1fY2FuY2VsX2luamVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRzdm1fY29tcGxldGVfaW50ZXJydXB0cyh2Y3B1KTtcbiB9XG4gXG4tc3RhdGljIGludCBzdm1fdmNwdV9wcmVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi17XG4tI2lmZGVmIENPTkZJR19LVk1fQU1EX1NFVlxuLVx0aWYgKHRvX2t2bV9zZXZfaW5mbyh2Y3B1LVx1MDAzZWt2bSktXHUwMDNlbmVlZF9pbml0KVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0jZW5kaWZcbi1cbi1cdHJldHVybiAxO1xuLX1cbi1cbiBzdGF0aWMgZmFzdHBhdGhfdCBzdm1fZXhpdF9oYW5kbGVyc19mYXN0cGF0aChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0c3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7XG5AQCAtNTM4OCw3ICs1Mzc4LDYgQEAgc3RydWN0IGt2bV94ODZfb3BzIHN2bV94ODZfb3BzIF9faW5pdGRhdGEgPSB7XG4gXHQuZmx1c2hfdGxiX2d2YSA9IHN2bV9mbHVzaF90bGJfZ3ZhLFxuIFx0LmZsdXNoX3RsYl9ndWVzdCA9IHN2bV9mbHVzaF90bGJfZ3Vlc3QsXG4gXG4tXHQudmNwdV9wcmVfcnVuID0gc3ZtX3ZjcHVfcHJlX3J1bixcbiBcdC52Y3B1X3J1biA9IHN2bV92Y3B1X3J1bixcbiBcdC5oYW5kbGVfZXhpdCA9IHN2bV9oYW5kbGVfZXhpdCxcbiBcdC5za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uID0gc3ZtX3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24sXG5AQCAtNTQ0Niw2ICs1NDM1LDcgQEAgc3RydWN0IGt2bV94ODZfb3BzIHN2bV94ODZfb3BzIF9faW5pdGRhdGEgPSB7XG4gI2VuZGlmXG4gXG4gI2lmZGVmIENPTkZJR19LVk1fQU1EX1NFVlxuK1x0LnZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24gPSBzZXZfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbixcbiBcdC5kZXZfZ2V0X2F0dHIgPSBzZXZfZGV2X2dldF9hdHRyLFxuIFx0Lm1lbV9lbmNfaW9jdGwgPSBzZXZfbWVtX2VuY19pb2N0bCxcbiBcdC5tZW1fZW5jX3JlZ2lzdGVyX3JlZ2lvbiA9IHNldl9tZW1fZW5jX3JlZ2lzdGVyX3JlZ2lvbixcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uaFxuaW5kZXggYTMyN2JmNzUxZWNkNS4uNjZiNDRiNTQ2MDhlOCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmhcbisrKyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmhcbkBAIC05NzksNiArOTc5LDcgQEAgdm9pZCBzZXZfZXNfcHJlcGFyZV9zd2l0Y2hfdG9fZ3Vlc3Qoc3RydWN0IHZjcHVfc3ZtICpzdm0sIHN0cnVjdCBzZXZfZXNfc2F2ZV9hcmVcbiB2b2lkIHNldl9lc191bm1hcF9naGNiKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKTtcbiBcbiAjaWZkZWYgQ09ORklHX0tWTV9BTURfU0VWXG4rYm9vbCBzZXZfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIGludCBzZXZfbWVtX2VuY19pb2N0bChzdHJ1Y3Qga3ZtICprdm0sIHZvaWQgX191c2VyICphcmdwKTtcbiBpbnQgc2V2X21lbV9lbmNfcmVnaXN0ZXJfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcbiBcdFx0XHRcdHN0cnVjdCBrdm1fZW5jX3JlZ2lvbiAqcmFuZ2UpO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jIGIvYXJjaC94ODYva3ZtL3ZteC9tYWluLmNcbmluZGV4IDA0Zjk4NmUzZDQzOWEuLjBmZjMyMzBmZDk1ZTggMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L21haW4uY1xuKysrIGIvYXJjaC94ODYva3ZtL3ZteC9tYWluLmNcbkBAIC0xNDAsMTIgKzE0MCwxMCBAQCBzdGF0aWMgdm9pZCB2dF92Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHR2bXhfdmNwdV9wdXQodmNwdSk7XG4gfVxuIFxuLXN0YXRpYyBpbnQgdnRfdmNwdV9wcmVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbitzdGF0aWMgYm9vbCB2dF92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4tXHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSlcbi1cdFx0cmV0dXJuIHRkeF92Y3B1X3ByZV9ydW4odmNwdSk7XG4tXG4tXHRyZXR1cm4gdm14X3ZjcHVfcHJlX3J1bih2Y3B1KTtcbitcdHJldHVybiBpc190ZF92Y3B1KHZjcHUpIFx1MDAyNlx1MDAyNlxuK1x0ICAgICAgIHRkeF92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uKHZjcHUpO1xuIH1cbiBcbiBzdGF0aWMgZmFzdHBhdGhfdCB2dF92Y3B1X3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBydW5fZmxhZ3MpXG5AQCAtMTY1LDYgKzE2MywxNiBAQCBzdGF0aWMgaW50IHZ0X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdHJldHVybiB2bXhfaGFuZGxlX2V4aXQodmNwdSwgZmFzdHBhdGgpO1xuIH1cbiBcbitzdGF0aWMgYm9vbCB2dF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbit7XG4rXHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSkge1xuK1x0XHRXQVJOX09OX09OQ0UodG9fdnQodmNwdSktXHUwMDNlZW11bGF0aW9uX3JlcXVpcmVkKTtcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHZteF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKHZjcHUpO1xuK31cbitcbiBzdGF0aWMgaW50IHZ0X3NldF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgbXNyX2RhdGEgKm1zcl9pbmZvKVxuIHtcbiBcdGlmICh1bmxpa2VseShpc190ZF92Y3B1KHZjcHUpKSlcbkBAIC05MzksMTEgKzk0NywxMiBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMgdnRfeDg2X29wcyBfX2luaXRkYXRhID0ge1xuIFx0LmZsdXNoX3RsYl9ndmEgPSB2dF9vcChmbHVzaF90bGJfZ3ZhKSxcbiBcdC5mbHVzaF90bGJfZ3Vlc3QgPSB2dF9vcChmbHVzaF90bGJfZ3Vlc3QpLFxuIFxuLVx0LnZjcHVfcHJlX3J1biA9IHZ0X29wKHZjcHVfcHJlX3J1biksXG4rXHQudmNwdV9uZWVkc19pbml0aWFsaXphdGlvbiA9IHZ0X29wX3RkeF9vbmx5KHZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24pLFxuIFx0LnZjcHVfcnVuID0gdnRfb3AodmNwdV9ydW4pLFxuIFx0LmhhbmRsZV9leGl0ID0gdnRfb3AoaGFuZGxlX2V4aXQpLFxuIFx0LnNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24gPSB2bXhfc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbixcbiBcdC51cGRhdGVfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24gPSB2bXhfdXBkYXRlX2VtdWxhdGVkX2luc3RydWN0aW9uLFxuK1x0LnVuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQgPSB2dF9vcCh1bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKSxcbiBcdC5zZXRfaW50ZXJydXB0X3NoYWRvdyA9IHZ0X29wKHNldF9pbnRlcnJ1cHRfc2hhZG93KSxcbiBcdC5nZXRfaW50ZXJydXB0X3NoYWRvdyA9IHZ0X29wKGdldF9pbnRlcnJ1cHRfc2hhZG93KSxcbiBcdC5wYXRjaF9oeXBlcmNhbGwgPSB2dF9vcChwYXRjaF9oeXBlcmNhbGwpLFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmMgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXG5pbmRleCBkMWFmMGE3NTJlOTdlLi5iMjcyYzIwNTg2YTc0IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC90ZHguY1xuKysrIGIvYXJjaC94ODYva3ZtL3ZteC90ZHguY1xuQEAgLTg5NywxMyArODk3LDEwIEBAIHZvaWQgdGR4X3ZjcHVfZnJlZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHR0ZHgtXHUwMDNlc3RhdGUgPSBWQ1BVX1REX1NUQVRFX1VOSU5JVElBTElaRUQ7XG4gfVxuIFxuLWludCB0ZHhfdmNwdV9wcmVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbitib29sIHRkeF92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4tXHRpZiAodW5saWtlbHkodG9fdGR4KHZjcHUpLVx1MDAzZXN0YXRlICE9IFZDUFVfVERfU1RBVEVfSU5JVElBTElaRUQgfHxcbi1cdFx0ICAgICB0b19rdm1fdGR4KHZjcHUtXHUwMDNla3ZtKS1cdTAwM2VzdGF0ZSAhPSBURF9TVEFURV9SVU5OQUJMRSkpXG4tXHRcdHJldHVybiAtRUlOVkFMO1xuLVxuLVx0cmV0dXJuIDE7XG4rXHRyZXR1cm4gdG9fdGR4KHZjcHUpLVx1MDAzZXN0YXRlICE9IFZDUFVfVERfU1RBVEVfSU5JVElBTElaRUQgfHxcbitcdCAgICAgICB0b19rdm1fdGR4KHZjcHUtXHUwMDNla3ZtKS1cdTAwM2VzdGF0ZSAhPSBURF9TVEFURV9SVU5OQUJMRTtcbiB9XG4gXG4gc3RhdGljIF9fYWx3YXlzX2lubGluZSB1MzIgdGRjYWxsX3RvX3ZteF9leGl0X3JlYXNvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC92bXguYyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmNcbmluZGV4IGU0YjlhYzdmZWQ5ZjAuLjc2MTYwYWRmODI5NzAgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXG5AQCAtNjAzNSw3ICs2MDM1LDcgQEAgc3RhdGljIGludCBoYW5kbGVfbm1pX3dpbmRvdyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gICogd2l0aCB1bnNyZXN0cmljdGVkIGd1ZXN0IG1vZGUgZGlzYWJsZWQpIGFuZCBLVk0gY2FuJ3QgZmFpdGhmdWxseSBlbXVsYXRlIHRoZVxuICAqIGN1cnJlbnQgdkNQVSBzdGF0ZS5cbiAgKi9cbi1zdGF0aWMgYm9vbCB2bXhfdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4rYm9vbCB2bXhfdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0c3RydWN0IHZjcHVfdm14ICp2bXggPSB0b192bXgodmNwdSk7XG4gXG5AQCAtNjExMCwxNiArNjExMCw2IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2ludmFsaWRfZ3Vlc3Rfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0cmV0dXJuIDE7XG4gfVxuIFxuLWludCB2bXhfdmNwdV9wcmVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi17XG4tXHRpZiAodm14X3VuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQodmNwdSkpIHtcbi1cdFx0a3ZtX3ByZXBhcmVfZW11bGF0aW9uX2ZhaWx1cmVfZXhpdCh2Y3B1KTtcbi1cdFx0cmV0dXJuIDA7XG4tXHR9XG4tXG4tXHRyZXR1cm4gMTtcbi19XG4tXG4gLypcbiAgKiBJbmRpY2F0ZSBhIGJ1c3ktd2FpdGluZyB2Y3B1IGluIHNwaW5sb2NrLiBXZSBkbyBub3QgZW5hYmxlIHRoZSBQQVVTRVxuICAqIGV4aXRpbmcsIHNvIG9ubHkgZ2V0IGhlcmUgb24gY3B1IHdpdGggUEFVU0UtTG9vcC1FeGl0aW5nLlxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgveDg2X29wcy5oIGIvYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmhcbmluZGV4IDQwOTg1ODA3NDI0NjIuLmNkYjM4ZDk0MGNmYjcgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaFxuKysrIGIvYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmhcbkBAIC0yMSw3ICsyMSw2IEBAIGludCB2bXhfdm1faW5pdChzdHJ1Y3Qga3ZtICprdm0pO1xuIHZvaWQgdm14X3ZtX2Rlc3Ryb3koc3RydWN0IGt2bSAqa3ZtKTtcbiBpbnQgdm14X3ZjcHVfcHJlY3JlYXRlKHN0cnVjdCBrdm0gKmt2bSk7XG4gaW50IHZteF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuLWludCB2bXhfdmNwdV9wcmVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gZmFzdHBhdGhfdCB2bXhfdmNwdV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgcnVuX2ZsYWdzKTtcbiB2b2lkIHZteF92Y3B1X2ZyZWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiB2b2lkIHZteF92Y3B1X3Jlc2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBpbml0X2V2ZW50KTtcbkBAIC0zMSw2ICszMCw3IEBAIGludCB2bXhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGV4aXRfZmFzdHBhdGgpO1xuIHZvaWQgdm14X2hhbmRsZV9leGl0X2lycW9mZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIGludCB2bXhfc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIHZvaWQgdm14X3VwZGF0ZV9lbXVsYXRlZF9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuK2Jvb2wgdm14X3VuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBpbnQgdm14X3NldF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgbXNyX2RhdGEgKm1zcl9pbmZvKTtcbiAjaWZkZWYgQ09ORklHX0tWTV9TTU1cbiBpbnQgdm14X3NtaV9hbGxvd2VkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBmb3JfaW5qZWN0aW9uKTtcbkBAIC0xMzcsNyArMTM3LDcgQEAgaW50IHRkeF92Y3B1X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIHZvaWQgdGR4X3ZjcHVfcmVzZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGluaXRfZXZlbnQpO1xuIHZvaWQgdGR4X3ZjcHVfZnJlZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIHZvaWQgdGR4X3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpO1xuLWludCB0ZHhfdmNwdV9wcmVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4rYm9vbCB0ZHhfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIGZhc3RwYXRoX3QgdGR4X3ZjcHVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHJ1bl9mbGFncyk7XG4gdm9pZCB0ZHhfcHJlcGFyZV9zd2l0Y2hfdG9fZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiB2b2lkIHRkeF92Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuY1xuaW5kZXggMGYxYTgyOTAzMmMwNi4uZDk0YjU5MTQwYzQ1MiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS94ODYuY1xuKysrIGIvYXJjaC94ODYva3ZtL3g4Ni5jXG5AQCAtODg2Nyw3ICs4ODY3LDE1IEBAIHN0YXRpYyBpbnQga3ZtX3g4Nl92Y3B1X3ByZV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0ICAgICFrdm1fYXBpY19pbml0X3NpcGlfYWxsb3dlZCh2Y3B1KSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRyZXR1cm4ga3ZtX3g4Nl9jYWxsKHZjcHVfcHJlX3J1bikodmNwdSk7XG4rXHRpZiAoa3ZtX3g4Nl9jYWxsKHZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24pKHZjcHUpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdGlmIChrdm1feDg2X2NhbGwodW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZCkodmNwdSkpIHtcbitcdFx0a3ZtX3ByZXBhcmVfZW11bGF0aW9uX2ZhaWx1cmVfZXhpdCh2Y3B1KTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMTtcbiB9XG4gXG4gaW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9pbnZhbGlkX25lc3RlZF9ndWVzdF9zdGF0ZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfaW52YWxpZF9uZXN0ZWRfZ3Vlc3Rfc3RhdGUuY1xuaW5kZXggNTc4MjgzODkzYWIzNy4uNmY1NDZkZWIxOTNhOSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X2ludmFsaWRfbmVzdGVkX2d1ZXN0X3N0YXRlLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X2ludmFsaWRfbmVzdGVkX2d1ZXN0X3N0YXRlLmNcbkBAIC0yLDYgKzIsNyBAQFxuICNpbmNsdWRlIFwidGVzdF91dGlsLmhcIlxuICNpbmNsdWRlIFwia3ZtX3V0aWwuaFwiXG4gI2luY2x1ZGUgXCJwcm9jZXNzb3IuaFwiXG4rI2luY2x1ZGUgXCJzbW0uaFwiXG4gI2luY2x1ZGUgXCJ2bXguaFwiXG4gXG4gI2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbkBAIC05LDkgKzEwLDIzIEBAXG4gXG4gI2luY2x1ZGUgXCJrc2VsZnRlc3QuaFwiXG4gXG4tI2RlZmluZSBBUkJJVFJBUllfSU9fUE9SVCAweDIwMDBcbisjZGVmaW5lIEFSQklUUkFSWV9JT19QT1JUIDB4ODBcbiBcbi1zdGF0aWMgc3RydWN0IGt2bV92bSAqdm07XG4rLypcbisgKiBUaGUgNjQtYml0IFNNUkFNIHN0YXRlLXNhdmUgYXJlYSBzdGFydHMgYXQgU01CQVNFICsgMHhmZTAwLiAgVFIgc3RhcnRzIGF0XG4rICogb2Zmc2V0IDB4ZmU5MCwgYW5kIGF0dHJpYnV0ZXMgaXMgdGhlIHNlY29uZCAxNi1iaXQgZmllbGQgaW4gdGhlIGRlc2NyaXB0b3IuXG4rICovXG4rI2RlZmluZSBTTVJBTTY0X1RSX0FUVFJJQlVURVNfT0ZGU0VUXHQweGZlOTJcbisjZGVmaW5lIFNNUkFNX0dQQVx0XHRcdDB4MTAwMDAwMFxuK1xuKy8qXG4rICogU01JIGhhbmRsZXIgdGhhdCBydW5zIGluIDE2LWJpdCBSZWFsIE1vZGUuICBTeW5jcyB3aXRoIEwwIHZpYSBwb3J0IEkvTywgdGhlblxuKyAqIGV4ZWN1dGVzIFJTTSB0byB0cmlnZ2VyIHRoZSBjb25zdW1wdGlvbiBvZiBpbnZhbGlkIGd1ZXN0IHN0YXRlLlxuKyAqL1xuK3N0YXRpYyB1OCBzbWlfaGFuZGxlcltdID0ge1xuK1x0MHhlNCwgQVJCSVRSQVJZX0lPX1BPUlQsXHQvKiBJTiAkQVJCSVRSQVJZX0lPX1BPUlQsICVhbCAqL1xuK1x0MHgwZiwgMHhhYSxcdFx0XHQvKiBSU00gKi9cbit9O1xuIFxuIHN0YXRpYyB2b2lkIGwyX2d1ZXN0X2NvZGUodm9pZClcbiB7XG5AQCAtMTksOCArMzQsOSBAQCBzdGF0aWMgdm9pZCBsMl9ndWVzdF9jb2RlKHZvaWQpXG4gXHQgKiBHZW5lcmF0ZSBhbiBleGl0IHRvIEwwIHVzZXJzcGFjZSwgaS5lLiBtYWluKCksIHZpYSBJL08gdG8gYW5cbiBcdCAqIGFyYml0cmFyeSBwb3J0LlxuIFx0ICovXG4tXHRhc20gdm9sYXRpbGUoXCJpbmIgJSVkeCwgJSVhbFwiXG4tXHRcdCAgICAgOiA6IFtwb3J0XSBcImRcIiAoQVJCSVRSQVJZX0lPX1BPUlQpIDogXCJyYXhcIik7XG4rXHRhc20gdm9sYXRpbGUoXCJpbmIgJFwiIF9fc3RyaW5naWZ5KEFSQklUUkFSWV9JT19QT1JUKSBcIiwgJSVhbFwiXG4rXHRcdCAgICAgOjo6IFwicmF4XCIpO1xuK1x0R1VFU1RfRkFJTChcIkwyIHJlc3VtZWQgYWZ0ZXIgc3R1ZmZpbmcgaW52YWxpZCBndWVzdCBzdGF0ZVwiKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbDFfZ3Vlc3RfY29kZShzdHJ1Y3Qgdm14X3BhZ2VzICp2bXhfcGFnZXMpXG5AQCAtNDYsMzUgKzYyLDUwIEBAIHN0YXRpYyB2b2lkIGwxX2d1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKVxuIFx0R1VFU1RfRE9ORSgpO1xuIH1cbiBcbi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuK3N0YXRpYyB2b2lkIHZjcHVfcnVuX3RvX2lvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCB3YW50X2wyKVxuIHtcbi1cdGd2YV90IHZteF9wYWdlc19ndmE7XG4tXHRzdHJ1Y3Qga3ZtX3NyZWdzIHNyZWdzO1xuLVx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuLVx0c3RydWN0IGt2bV9ydW4gKnJ1bjtcbi1cdHN0cnVjdCB1Y2FsbCB1YztcbitcdHN0cnVjdCBrdm1fcnVuICpydW4gPSB2Y3B1LVx1MDAzZXJ1bjtcbiBcbi1cdFRFU1RfUkVRVUlSRShrdm1fY3B1X2hhcyhYODZfRkVBVFVSRV9WTVgpKTtcbitcdHZjcHVfcnVuKHZjcHUpO1xuIFxuLVx0dm0gPSB2bV9jcmVhdGVfd2l0aF9vbmVfdmNwdShcdTAwMjZ2Y3B1LCBsMV9ndWVzdF9jb2RlKTtcbitcdFRFU1RfQVNTRVJUX0tWTV9FWElUX1JFQVNPTih2Y3B1LCBLVk1fRVhJVF9JTyk7XG4gXG4tXHQvKiBBbGxvY2F0ZSBWTVggcGFnZXMgYW5kIHNoYXJlZCBkZXNjcmlwdG9ycyAodm14X3BhZ2VzKS4gKi9cbi1cdHZjcHVfYWxsb2Nfdm14KHZtLCBcdTAwMjZ2bXhfcGFnZXNfZ3ZhKTtcbi1cdHZjcHVfYXJnc19zZXQodmNwdSwgMSwgdm14X3BhZ2VzX2d2YSk7XG4rXHRURVNUX0FTU0VSVChydW4tXHUwMDNlaW8ucG9ydCA9PSBBUkJJVFJBUllfSU9fUE9SVCBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICghIShydW4tXHUwMDNlZmxhZ3MgXHUwMDI2IEtWTV9SVU5fWDg2X0dVRVNUX01PREUpID09IHdhbnRfbDIgIHx8XG4rXHRcdCAgICAgIWt2bV9oYXNfY2FwKEtWTV9DQVBfWDg2X0dVRVNUX01PREUpKSxcbitcdFx0ICAgIFwiRXhwZWN0ZWQgSU4gZnJvbSBwb3J0ICVkIGZyb20gTDIsIGdvdCBwb3J0ICVkIGZyb20gTCV1XCIsXG4rXHRcdCAgICBBUkJJVFJBUllfSU9fUE9SVCwgcnVuLVx1MDAzZWlvLnBvcnQsXG4rXHRcdCAgICAxICsgISEocnVuLVx1MDAzZWZsYWdzIFx1MDAyNiBLVk1fUlVOX1g4Nl9HVUVTVF9NT0RFKSk7XG4rfVxuIFxuLVx0dmNwdV9ydW4odmNwdSk7XG4rc3RhdGljIHN0cnVjdCBrdm1fdm0gKnZtX2NyZWF0ZV9hbmRfcnVuX2wyKHN0cnVjdCBrdm1fdmNwdSAqKnZjcHUpXG4re1xuK1x0Z3ZhX3Qgdm14X3BhZ2VzX2d2YTtcbitcdHN0cnVjdCBrdm1fdm0gKnZtO1xuK1xuK1x0dm0gPSB2bV9jcmVhdGVfd2l0aF9vbmVfdmNwdSh2Y3B1LCBsMV9ndWVzdF9jb2RlKTtcbiBcbi1cdHJ1biA9IHZjcHUtXHUwMDNlcnVuO1xuK1x0LyogQWxsb2NhdGUgVk1YIHBhZ2VzIGFuZCBzaGFyZWQgZGVzY3JpcHRvcnMgKHZteF9wYWdlcykuICovXG4rXHR2Y3B1X2FsbG9jX3ZteCh2bSwgXHUwMDI2dm14X3BhZ2VzX2d2YSk7XG4rXHR2Y3B1X2FyZ3Nfc2V0KCp2Y3B1LCAxLCB2bXhfcGFnZXNfZ3ZhKTtcbiBcbiBcdC8qXG4gXHQgKiBUaGUgZmlyc3QgZXhpdCB0byBMMCB1c2Vyc3BhY2Ugc2hvdWxkIGJlIGFuIEkvTyBhY2Nlc3MgZnJvbSBMMi5cbiBcdCAqIFJ1bm5pbmcgTDEgc2hvdWxkIGxhdW5jaCBMMiB3aXRob3V0IHRyaWdnZXJpbmcgYW4gZXhpdCB0byB1c2Vyc3BhY2UuXG4gXHQgKi9cbi1cdFRFU1RfQVNTRVJUX0tWTV9FWElUX1JFQVNPTih2Y3B1LCBLVk1fRVhJVF9JTyk7XG4rXHR2Y3B1X3J1bl90b19pbygqdmNwdSwgdHJ1ZSk7XG4gXG4tXHRURVNUX0FTU0VSVChydW4tXHUwMDNlaW8ucG9ydCA9PSBBUkJJVFJBUllfSU9fUE9SVCxcbi1cdFx0ICAgIFwiRXhwZWN0ZWQgSU4gZnJvbSBwb3J0ICVkIGZyb20gTDIsIGdvdCBwb3J0ICVkXCIsXG4tXHRcdCAgICBBUkJJVFJBUllfSU9fUE9SVCwgcnVuLVx1MDAzZWlvLnBvcnQpO1xuK1x0cmV0dXJuIHZtO1xuK31cbitcbitzdGF0aWMgdm9pZCB0ZXN0X2ludmFsaWRfbDJfZ3Vlc3Rfc3RhdGUodm9pZClcbit7XG4rXHRzdHJ1Y3Qga3ZtX3NyZWdzIHNyZWdzO1xuK1x0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuK1x0c3RydWN0IGt2bV92bSAqdm07XG4rXHRzdHJ1Y3QgdWNhbGwgdWM7XG4rXG4rXHR2bSA9IHZtX2NyZWF0ZV9hbmRfcnVuX2wyKFx1MDAyNnZjcHUpO1xuIFxuIFx0LypcbiBcdCAqIFN0dWZmIGludmFsaWQgZ3Vlc3Qgc3RhdGUgZm9yIEwyIGJ5IG1ha2luZyBUUiB1bnVzYWJsZS4gIFRoZSBuZXh0XG5AQCAtOTYsNCArMTI3LDQ5IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4gXHRkZWZhdWx0OlxuIFx0XHRURVNUX0ZBSUwoXCJVbmV4cGVjdGVkIHVjYWxsOiAlbHVcIiwgdWMuY21kKTtcbiBcdH1cbitcbitcdGt2bV92bV9mcmVlKHZtKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgdGVzdF9pbnZhbGlkX2wyX2d1ZXN0X3N0YXRlX3JzbSh2b2lkKVxuK3tcbitcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbitcdHN0cnVjdCBrdm1fdm0gKnZtO1xuK1x0dTE2ICp0cl9hdHRycztcbitcbitcdGlmICgha3ZtX2hhc19jYXAoS1ZNX0NBUF9YODZfU01NKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0dm0gPSB2bV9jcmVhdGVfYW5kX3J1bl9sMihcdTAwMjZ2Y3B1KTtcbitcbitcdC8qXG4rXHQgKiBJbmplY3QgU01JIHdoaWxlIEwyIGlzIGFjdGl2ZSwgcnVuIHRoZSB2Q1BVIHRvIGdldCBJL08gZXhpdCBmcm9tIEwxLFxuK1x0ICogdGhlbiBzdHVmZiBUUiBpbiB0aGUgU01SQU0gc3RhdGUtc2F2ZSBhcmVhIHNvIHRoYXQgUlNNIHJlc3RvcmVzXG4rXHQgKiBpbnZhbGlkIEwyIHN0YXRlLlxuK1x0ICovXG4rXHRzZXR1cF9zbXJhbSh2bSwgdmNwdSwgU01SQU1fR1BBLCBzbWlfaGFuZGxlciwgc2l6ZW9mKHNtaV9oYW5kbGVyKSk7XG4rXHRpbmplY3Rfc21pKHZjcHUpO1xuK1xuK1x0dmNwdV9ydW5fdG9faW8odmNwdSwgZmFsc2UpO1xuK1xuK1x0LyogQ2xlYXIgdGhlIHByZXNlbnQgYml0IGluIFNNUkFNIHRvIG1ha2UgVFIgdW51c2FibGUuICovXG4rXHR0cl9hdHRycyA9IGFkZHJfZ3BhMmh2YSh2bSwgU01SQU1fR1BBICsgU01SQU02NF9UUl9BVFRSSUJVVEVTX09GRlNFVCk7XG4rXHQqdHJfYXR0cnMgXHUwMDI2PSB+QklUKDcpO1xuK1xuK1x0dmNwdV9ydW4odmNwdSk7XG4rXG4rXHQvKlxuK1x0ICogRm9yIFJTTSwgTDEgZ2V0cyB0aGUgU0hVVERPV04gYmVjYXVzZSBSU00gaXMgYXJjaGl0ZWN0dXJhbGx5IGRlZmluZWRcbitcdCAqIHRvIHJlc3VsdCBpbiBzaHV0ZG93biBpZiB0aGUgQ1BVIGRldGVjdHMgaW52YWxpZCBzdGF0ZSBpbiBTTVJBTS5cbitcdCAqL1xuK1x0VEVTVF9BU1NFUlRfS1ZNX0VYSVRfUkVBU09OKHZjcHUsIEtWTV9FWElUX1NIVVRET1dOKTtcbitcdGt2bV92bV9mcmVlKHZtKTtcbit9XG4rXG4raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbit7XG4rXHRURVNUX1JFUVVJUkUoa3ZtX2NwdV9oYXMoWDg2X0ZFQVRVUkVfVk1YKSk7XG4rXG4rXHR0ZXN0X2ludmFsaWRfbDJfZ3Vlc3Rfc3RhdGUoKTtcbitcdHRlc3RfaW52YWxpZF9sMl9ndWVzdF9zdGF0ZV9yc20oKTtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMDowODoxMy4xOTg3OTQyMDRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MDg1MjE5ODk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtWTSB4ODYgUGF0Y2ggZm9yIEVtdWxhdGlvbiBSZXF1aXJlbWVudHMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgZnVuZGFtZW50YWxseSBhbHRlcnMgS1ZNJ3MgeDg2IGVtdWxhdGlvbiBiZWhhdmlvciwgc3BlY2lmaWNhbGx5IGluIGhvdyBpdCBoYW5kbGVzIHNpdHVhdGlvbnMgd2hlcmUgdGhlIGd1ZXN0IGVudGVycyBhbiBpbnZhbGlkIHN0YXRlLCBwYXJ0aWN1bGFybHkgdXBvbiByZXR1cm5pbmcgZnJvbSBTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIChTTU0pIOKAkyB0aGF0J3MgUlNNLCB0byBiZSBjbGVhci4gVGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byByZXZvbHZlIGFyb3VuZCB0aGUgYHVuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWRgIGFuZCBgdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbmAgZnVuY3Rpb25zLiBFc3NlbnRpYWxseSwgdGhleSd2ZSByZW5hbWVkIGB2Y3B1X3ByZV9ydW5gIHRvIGB2Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uYCBhbmQgbm93IGhhdmUgYHVuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWRgIHdoaWNoIGlzIGNhbGxlZCBpbiBgZW11bGF0b3JfbGVhdmVfc21tYC5cblxuVGhlIGRpZmYgc2hvd3MgdGhhdCBgZW11bGF0b3JfbGVhdmVfc21tYCBub3cgY2FsbHMgYHVuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWRgIGFmdGVyIHRoZSBzdGFuZGFyZCBlbXVsYXRpb24uIElmIHRoaXMgY2hlY2sgZmFpbHMsIHRoZW4gd2UgZ2V0IGBYODZFTVVMX1VOSEFORExFQUJMRWAuIFRoYXQncyBhIGNyaXRpY2FsIHBvaW50LiBGdXJ0aGVybW9yZSwgYGt2bV94ODZfdmNwdV9wcmVfcnVuYCBoYXMgYmVlbiBzaWduaWZpY2FudGx5IG1vZGlmaWVkIHRvIGNoZWNrIGB2Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uYCBhbmQgdGhlbiwgaWYgdGhlIGluaXRpYWxpemF0aW9uIGlzbid0IG5lZWRlZCwgY2hlY2tzIGlmIGB1bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkYCBpcyBzZXQuIElmICp0aGF0KiB0cmlnZ2VycywgaXQgc2V0cyB1cCBhIGBrdm1fcHJlcGFyZV9lbXVsYXRpb25fZmFpbHVyZV9leGl0YCBhbmQgcmV0dXJucy4gVGhlIG5ldyBzZWxmdGVzdCAoYHZteF9pbnZhbGlkX25lc3RlZF9ndWVzdF9zdGF0ZS5jYCkgaXMgYSBjbGVhciBpbmRpY2F0aW9uIHRoYXQgdGhpcyBSU00gc2NlbmFyaW8gd2l0aCBhbiBpbnZhbGlkIEwyIHN0YXRlIGlzIHByZWNpc2VseSB3aGF0J3MgYmVpbmcgYWRkcmVzc2VkLlxuXG5HaXZlbiB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgZGVlcCB3aXRoaW4gS1ZNIHg4NiBjb3JlLCBpdCdzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRvIHBheSBhdHRlbnRpb24gdG8uIFNpbmNlIEtWTSBpcyBoZWF2aWx5IGZ1enplZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGFuZCBzeXprYWxsZXIgc3VwcG9ydHMgS1ZNIGZ1enppbmcsIGl0J3MgYWJzb2x1dGVseSB3b3J0aCB0aGUgZWZmb3J0IHRvIGNoZWNrIHRoaXMgb3V0LlxuXG5JIHNob3VsZCBmb2N1cyBteSBhdHRlbnRpb24gb24gdGhlc2UgZnVuY3Rpb25zIHNwZWNpZmljYWxseTogYGVtdWxhdG9yX2xlYXZlX3NtbWAsIGBrdm1feDg2X3ZjcHVfcHJlX3J1bmAgKGFuZCwgc3RhdGljYWxseSwgdGhlIGNhbGwgc2l0ZSBpbiBga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5gKSwgYHZteF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkYCwgYHNldl92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uYCwgYW5kIGB0ZHhfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbmAuIE15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBjb2RlIGZvciBgZW11bGF0b3JfbGVhdmVfc21tYCBhbmQgYGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuYCB0byBzZWUgaG93IHRoZXNlIG5ld2x5IGludHJvZHVjZWQgY2hlY2tzIGZpdCBpbnRvIHRoZSBleGlzdGluZyBmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODkzLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjkzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMjA6MDg6MjIuMjg0MDE3MzQ4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNzkyMjg5ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZW11bGF0b3JfbGVhdmVfc21tXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9zbW0uYz01MTY9c3RhdGljIGludCByc21fbG9hZF9zdGF0ZV82NChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCxcXG4tLVxcbmFyY2gveDg2L2t2bS9zbW0uYy01NzItXFxuYXJjaC94ODYva3ZtL3NtbS5jOjU3MzppbnQgZW11bGF0b3JfbGVhdmVfc21tKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KVxcbmFyY2gveDg2L2t2bS9zbW0uYy01NzQte1xcbi0tXFxuYXJjaC94ODYva3ZtL3NtbS5oPTE1OD12b2lkIGVudGVyX3NtbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbmFyY2gveDg2L2t2bS9zbW0uaDoxNTk6aW50IGVtdWxhdG9yX2xlYXZlX3NtbShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCk7XFxuYXJjaC94ODYva3ZtL3NtbS5oLTE2MC12b2lkIHByb2Nlc3Nfc21pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc21tLmg9MTYzPXN0YXRpYyBpbmxpbmUgYm9vbCBpc19zbW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KSB7IHJldHVybiBmYWxzZTsgfVxcbi0tXFxuYXJjaC94ODYva3ZtL3NtbS5oLTE2NS0vKlxcbmFyY2gveDg2L2t2bS9zbW0uaDoxNjY6ICogZW11bGF0b3JfbGVhdmVfc21tIGlzIHVzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyLCBzbyB0aGVcXG5hcmNoL3g4Ni9rdm0vc21tLmgtMTY3LSAqIHN0dWIgaXMgZGVmaW5lZCBpbiB4ODYuYy5cXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz01NzU0PXN0YXRpYyBib29sIGVtdWxhdG9yX2lzX3NtbShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dClcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy01NzU5LSNpZm5kZWYgQ09ORklHX0tWTV9TTU1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6NTc2MDpzdGF0aWMgaW50IGVtdWxhdG9yX2xlYXZlX3NtbShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dClcXG5hcmNoL3g4Ni9rdm0veDg2LmMtNTc2MS17XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9NTgxND1zdGF0aWMgY29uc3Qgc3RydWN0IHg4Nl9lbXVsYXRlX29wcyBlbXVsYXRlX29wcyA9IHtcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy01ODU2LVxcdC5pc19zbW0gICAgICAgICAgICAgID0gZW11bGF0b3JfaXNfc21tLFxcbmFyY2gveDg2L2t2bS94ODYuYzo1ODU3OlxcdC5sZWF2ZV9zbW0gICAgICAgICAgID0gZW11bGF0b3JfbGVhdmVfc21tLFxcbmFyY2gveDg2L2t2bS94ODYuYy01ODU4LVxcdC50cmlwbGVfZmF1bHQgICAgICAgID0gZW11bGF0b3JfdHJpcGxlX2ZhdWx0LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMDowODoyNC40NjMyNTQ0MzhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjcyNDgxNzg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24sIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipFeGFtaW5pbmcgUG90ZW50aWFsIEZvY3VzIFN5bWJvbHMqKlxuXG5SaWdodCwgdGhpbmtpbmcgYWJvdXQgcmVmaW5pbmcgbXkgYW5hbHlzaXMsIEkgbmVlZCBhIGNsZWFyIGZvY3VzIHBvaW50LiBgZW11bGF0b3JfbGVhdmVfc21tYCBpcyBhIHN0cm9uZyBjb250ZW5kZXI7IGl0J3MgYSB3ZWxsLWRlZmluZWQgcG9pbnQgb2YgcG90ZW50aWFsIHRyYW5zaXRpb24gb3IgdnVsbmVyYWJpbGl0eSB3aXRoaW4gdGhlIGVtdWxhdGlvbiBwcm9jZXNzLCB0aGF0IGdpdmVzIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludC4gQnV0LCBJJ20gYWxyZWFkeSB0aGlua2luZyBhYm91dCBvdGhlciBmdW5jdGlvbnMgaW4gbXkgY3VycmVudCBhc3Nlc3NtZW50LlxuXG5JIHdvbmRlciBhYm91dCB0aGUgdmFsdWUgb2Ygc2hpZnRpbmcgbXkgZm9jdXMgdG8gYGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuYC4gVGhhdCBmdW5jdGlvbiBpcyBjZXJ0YWlubHkgY3JpdGljYWwgdG8gdGhlIGV4ZWN1dGlvbiBvZiBndWVzdCBjb2RlIHdpdGhpbiB0aGUgS1ZNIGVudmlyb25tZW50LiBJdCdzIGEga2V5IGVudHJ5IHBvaW50IGZvciBoYW5kbGluZyBpbnN0cnVjdGlvbnMgYW5kIGludGVyYWN0aW9ucyBmcm9tIHRoZSB2aXJ0dWFsIENQVS4gRGVwZW5kaW5nIG9uIHRoZSBsZXZlbCBvZiBhbmFseXNpcyBuZWVkZWQsIHRoYXQgZnVuY3Rpb24gY291bGQgb2ZmZXIgaW5zaWdodCBpbnRvIGEgYnJvYWRlciByYW5nZSBvZiBwb3RlbnRpYWxseSBpbnRlcmVzdGluZyBhdHRhY2sgc3VyZmFjZXMgYW5kIGJlaGF2aW9ycy4gSXQncyB0aW1lIHRvIGV2YWx1YXRlIGhvdyBJIHdhbnQgdG8gc3RydWN0dXJlIG15IGFzc2Vzc21lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzk5LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMjA6MDg6MjkuMTM1NzM4ODczWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MzkyMjg5MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9rdm0vYXJtLmM9MTA2Nj1zdGF0aWMgaW50IGt2bV92Y3B1X3N1c3BlbmQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vYXJtLmMtMTA5Mi1cXHQgKiBPdGhlcndpc2UsIHdlIHdlcmUgdW5ibG9ja2VkIHRvIHByb2Nlc3MgYSBkaWZmZXJlbnQgZXZlbnQsIHN1Y2ggYXMgYVxcbmFyY2gvYXJtNjQva3ZtL2FybS5jOjEwOTM6XFx0ICogcGVuZGluZyBzaWduYWwuIFJldHVybiAxIGFuZCBhbGxvdyBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bigpIHRvXFxuYXJjaC9hcm02NC9rdm0vYXJtLmMtMTA5NC1cXHQgKiBwcm9jZXNzIHRoZSBldmVudC5cXG4tLVxcbmFyY2gvYXJtNjQva3ZtL2FybS5jPTEyMzA9c3RhdGljIGludCBub2luc3RyIGt2bV9hcm1fdmNwdV9lbnRlcl9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL2FybS5jLTEyNDEtLyoqXFxuYXJjaC9hcm02NC9rdm0vYXJtLmM6MTI0MjogKiBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1biAtIHRoZSBtYWluIFZDUFUgcnVuIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgZ3Vlc3QgY29kZVxcbmFyY2gvYXJtNjQva3ZtL2FybS5jLTEyNDMtICogQHZjcHU6XFx0VGhlIFZDUFUgcG9pbnRlclxcbi0tXFxuYXJjaC9hcm02NC9rdm0vYXJtLmMtMTI1MC0gKi9cXG5hcmNoL2FybTY0L2t2bS9hcm0uYzoxMjUxOmludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC9hcm02NC9rdm0vYXJtLmMtMTI1Mi17XFxuLS1cXG5hcmNoL2FybTY0L2t2bS9oeXAvbnZoZS9zd2l0Y2guYz0yMjY9c3RhdGljIGlubGluZSBib29sIGZpeHVwX2d1ZXN0X2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgKmV4aXRfY29kZSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL2h5cC9udmhlL3N3aXRjaC5jLTIzOC1cXHQgKiBpdC4gIFRoZSBjaGVjayBiZWxvdyBpcyBiYXNlZCBvbiB0aGUgb25lIGluXFxuYXJjaC9hcm02NC9rdm0vaHlwL252aGUvc3dpdGNoLmM6MjM5OlxcdCAqIGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKCkuXFxuYXJjaC9hcm02NC9rdm0vaHlwL252aGUvc3dpdGNoLmMtMjQwLVxcdCAqL1xcbi0tXFxuYXJjaC9sb29uZ2FyY2gva3ZtL3ZjcHUuYz0xODI1PXZvaWQga3ZtX2FyY2hfdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva3ZtL3ZjcHUuYy0xODQ4LVxcbmFyY2gvbG9vbmdhcmNoL2t2bS92Y3B1LmM6MTg0OTppbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gvbG9vbmdhcmNoL2t2bS92Y3B1LmMtMTg1MC17XFxuLS1cXG5hcmNoL21pcHMva3ZtL21pcHMuYz00MTE9c3RhdGljIGludCBub2luc3RyIGt2bV9taXBzX3ZjcHVfZW50ZXJfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL21pcHMva3ZtL21pcHMuYy00MjEtXFxuYXJjaC9taXBzL2t2bS9taXBzLmM6NDIyOmludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC9taXBzL2t2bS9taXBzLmMtNDIzLXtcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jPTE3MzI9aW50IGt2bV92Y3B1X2lvY3RsX3NldF9vbmVfcmVnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9vbmVfcmVnICpyZWcpXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYy0xNzgwLVxcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jOjE3ODE6aW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYy0xNzgyLXtcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYz03NTA9c3RhdGljIHZvaWQgbm9pbnN0ciBrdm1fcmlzY3ZfdmNwdV9lbnRlcl9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYy03NTktXFx0ICogSFRJTlNUKSBoZXJlIGJlY2F1c2Ugd2UgZG8gbG9jYWxfaXJxX2VuYWJsZSgpIGFmdGVyIHRoaXNcXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmM6NzYwOlxcdCAqIGZ1bmN0aW9uIGluIGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKCkgd2hpY2ggY2FuIHJlc3VsdCBpblxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYy03NjEtXFx0ICogYW4gaW50ZXJydXB0IGltbWVkaWF0ZWx5IGFmdGVyIGxvY2FsX2lycV9lbmFibGUoKSBhbmQgY2FuXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmMtODI5LVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHUuYzo4MzA6aW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3Jpc2N2L2t2bS92Y3B1LmMtODMxLXtcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYz00OTk3PXN0YXRpYyB2b2lkIHN0b3JlX3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTUwMTctXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjUwMTg6aW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTAxOS17XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9ODg0ND1zdGF0aWMgaW50IGt2bV94ODZfdmNwdV9wcmVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy04ODgwLVxcbmFyY2gveDg2L2t2bS94ODYuYzo4ODgxOmludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTg4ODIte1xcbi0tXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oPTE2MjM9aW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X2d1ZXN0X2RlYnVnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMTYyNC1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qga3ZtX2d1ZXN0X2RlYnVnICpkYmcpO1xcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaDoxNjI1OmludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0xNjI2LVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYz00NDE0PXN0YXRpYyBsb25nIGt2bV92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy00NDc3LVxcdFxcdHZjcHUtXFx1MDAzZXdhbnRzX3RvX3J1biA9ICFSRUFEX09OQ0UodmNwdS1cXHUwMDNlcnVuLVxcdTAwM2VpbW1lZGlhdGVfZXhpdF9fdW5zYWZlKTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjQ0Nzg6XFx0XFx0ciA9IGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKHZjcHUpO1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtNDQ3OS1cXHRcXHR2Y3B1LVxcdTAwM2V3YW50c190b19ydW4gPSBmYWxzZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMjA6MDg6MzAuODc0OTc0MDIxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc1MDYxNjY5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqUmVmbGVjdGluZyBvbiBLVk0gRW50cnkgUG9pbnRzKipcblxuSG1tLCBga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW5g4oCmIGl0IGp1c3QgZmVlbHMgYSBsaXR0bGUgKnRvbyogYnJvYWQsIGRvZXNuJ3QgaXQ/IEl0J3MgdGhlIGNvcmUgZW50cnkgcG9pbnQgZm9yIEtWTSB2Q1BVIGV4ZWN1dGlvbiwgc3VyZSwgYnV0IHRoZSBuYW1lIGl0c2VsZiBkb2Vzbid0IHNjcmVhbSBhbnl0aGluZyBzcGVjaWZpYyBhYm91dCAqd2hhdCogaXQncyBkb2luZy4gSSBtZWFuLCBpdOKAmXMgbm90ICp3cm9uZyosIGJ1dCBpdCBsYWNrcyBhIGNlcnRhaW7igKYgZ3JhbnVsYXJpdHkuIEknbSB0aGlua2luZyBhYm91dCBob3cgdG8gaW1wcm92ZSB0aGUgY29kZS4gSXTigJlzIGxpa2UgY2FsbGluZyBhbiBlbnRpcmUgb3BlcmF0aW5nIHN5c3RlbSBmdW5jdGlvbiBcInByb2Nlc3NfZXhlY3V0aW9uXCIuIFxuXG5Ob3csIGxldCdzIGNvbnNpZGVyIGFub3RoZXIgbmFtZSwgcGVyaGFwcyBzb21ldGhpbmcgbW9yZSBkZXNjcmlwdGl2ZS4gSeKAmXZlIGJlZW4gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgZnVuY3Rpb24sIGFuZCBJJ20gcmVtaW5kZWQgb2YgYHZteF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkYC4gSXQncyBhIGJpdCBvZiBhIG1vdXRoZnVsLCBhZG1pdHRlZGx5LCBidXQgaXQgcG9pbnRzIHRvIGEgdmVyeSBzcGVjaWZpYyBhbmQgY3JpdGljYWwgYXNwZWN0IG9mIHRoZSBLVk0gd29ya2Zsb3c6IHdoZW4gdGhlIGhhcmR3YXJlIGNhbid0IGRpcmVjdGx5IGhhbmRsZSBzb21ldGhpbmcuIEl0J3MgdGhhdCBjYXNlIHdoZW4gdGhlIHNvZnR3YXJlIG5lZWRzIHRvIGVtdWxhdGUgc29tZXRoaW5nIHRoYXQgdGhlIENQVSBjYW4ndCBtYW5hZ2Ugb24gaXRzIG93bi4gXG5cbk1heWJlIHRoZSBuYW1lIGNvdWxkIGJlIGEgY29tcHJvbWlzZT9cblxuXG4iLCJJbnB1dFRva2VucyI6MTI3NzgsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMDowODozNC42MjU1OTMyMDNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA2MDI0Njc4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2bXhfdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vdm14L21haW4uYz0xNjY9c3RhdGljIGJvb2wgdnRfdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xNzItXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MTczOlxcdHJldHVybiB2bXhfdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZCh2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xNzQtfVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYz02MDIxPXN0YXRpYyBpbnQgaGFuZGxlX25taV93aW5kb3coc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy02MDM3LSAqL1xcbmFyY2gveDg2L2t2bS92bXgvdm14LmM6NjAzODpib29sIHZteF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTYwMzkte1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYz02MDY1PXN0YXRpYyBpbnQgaGFuZGxlX2ludmFsaWRfZ3Vlc3Rfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy02MDkwLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmM6NjA5MTpcXHRcXHRpZiAodm14X3VuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQodmNwdSkpIHtcXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTYwOTItXFx0XFx0XFx0a3ZtX3ByZXBhcmVfZW11bGF0aW9uX2ZhaWx1cmVfZXhpdCh2Y3B1KTtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgveDg2X29wcy5oPTMyPXZvaWQgdm14X3VwZGF0ZV9lbXVsYXRlZF9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbmFyY2gveDg2L2t2bS92bXgveDg2X29wcy5oOjMzOmJvb2wgdm14X3VuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaC0zNC1pbnQgdm14X3NldF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgbXNyX2RhdGEgKm1zcl9pbmZvKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMjA6MDg6MzYuNjg1ODQ0NzI2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkxNjc0MTA2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gaW50ZXJuYWwgcHJvY2VzczpcblxuKipJbnRlcm5hbCBBdWRpdCBvZiBGb2N1cyBTeW1ib2xzIGFuZCBQb3RlbnRpYWwgRXhwYW5zaW9uKipcblxuUmlnaHQsIHNvIGB2bXhfdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZGAg4oCTIHRoYXQncyBhIHNvbGlkIGlkZW50aWZpZXIsIGEgZ29vZCBqdW1waW5nLW9mZiBwb2ludCBmb3IgdGhpcyBjdXJyZW50IGxpbmUgb2YgaW52ZXN0aWdhdGlvbi4gSXQgY2xlYXJseSBmbGFncyBhIHNwZWNpZmljIHNjZW5hcmlvLiBOb3csIHRoZSBuZXh0IHF1ZXN0aW9uIGlzIGFsd2F5cywgYXJlIHdlIG1pc3NpbmcgYW55dGhpbmc/IElzIHRoZXJlIGEgYnJvYWRlciBzZXQgb2YgY2lyY3Vtc3RhbmNlcyB0byBjb25zaWRlciB0aGF0IHRoaXMgc2luZ3VsYXIgdGVybSBkb2Vzbid0IHF1aXRlIGVuY29tcGFzcz9cblxuTXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBhIGNvdXBsZSBvZiByZWxhdGVkIGFyZWFzLCBwYXJ0aWN1bGFybHkgdGhlIHNlY3VyZSBleGVjdXRpb24gZW52aXJvbm1lbnRzIHdlJ3JlIHNlZWluZyBtb3JlIGFuZCBtb3JlIG9mLiBTcGVjaWZpY2FsbHksIEkgd29uZGVyIGlmIHdlIHNob3VsZCBleHBhbmQgdGhlIGZvY3VzIGFuZCBjb25zaWRlciBpZiBgdGR4X3ZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb25gIGFuZCBgc2V2X3ZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb25gIG1pZ2h0IGFsc28gYmUgdmFsdWFibGUgZm9jdXMgc3ltYm9scy4gVGhleSdyZSByZWxhdGVkLiBJZiB0aGF0IHN5bWJvbCBkb2VzIG5vdCBleGlzdCwgdGhlbiBpdCBzaG91bGQuIFdlIG5lZWQgc3ltYm9scyBmb3IgdGhvc2UuIEkgc2hvdWxkIHByb2JhYmx5IGFkZCB0aG9zZSB0byBhIGxpc3Qgc29tZXdoZXJlLiBQZXJoYXBzIHRoaXMgY291bGQgZW5jb21wYXNzIGEgd2hvbGUgY2xhc3Mgb2Ygc2ltaWxhciBzaXR1YXRpb25zLCBhbmQgdGhvc2Ugc3ltYm9scyB3aWxsIGhlbHAgcmVmaW5lIHRoZSBmb2N1cyBvZiBhbmFseXNpcy4gQSBtb3JlIGNvbXByZWhlbnNpdmUgYXBwcm9hY2ggdG8gY2F0Y2hpbmcgZWRnZSBjYXNlcywgc28gdG8gc3BlYWsuIEl0J3MgYWJvdXQgZW5zdXJpbmcgd2UncmUgbm90IGp1c3QgcmVhY3RpbmcgdG8gYHZteF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkYCBpbiBpc29sYXRpb24gYnV0IHNlZWluZyB0aGUgYmlnZ2VyIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNjg0LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMjA6MDg6NDAuNjAyNTkwMzg0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQ4MTI0MDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRkeF92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTE0Mz1zdGF0aWMgYm9vbCB2dF92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTE0NS1cXHRyZXR1cm4gaXNfdGRfdmNwdSh2Y3B1KSBcXHUwMDI2XFx1MDAyNlxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjE0NjpcXHQgICAgICAgdGR4X3ZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24odmNwdSk7XFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtMTQ3LX1cXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM9ODYzPXZvaWQgdGR4X3ZjcHVfZnJlZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTg5OS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjkwMDpib29sIHRkeF92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTkwMS17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaD0xMzk9dm9pZCB0ZHhfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSk7XFxuYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmg6MTQwOmJvb2wgdGR4X3ZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaC0xNDEtZmFzdHBhdGhfdCB0ZHhfdmNwdV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgcnVuX2ZsYWdzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMjA6MDg6NDIuMjUwNzIzODI0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NjkyMDQ1NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIGEgVERYIHZDUFUncyBTdGF0dXMqKlxuXG5SaWdodCwgYHRkeF92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uYC4gVGhhdCdzIGEgZ29vZCBzaWduLiBJdCBpbW1lZGlhdGVseSBzdWdnZXN0cyB3ZSdyZSBkZWFsaW5nIHdpdGggYSB2Q1BVIHRoYXQncyBhdCB0aGUgY29ycmVjdCBzdGFnZTogcmVhZHksIGJ1dCBub3QgeWV0IGZ1bGx5IGNvbmZpZ3VyZWQgd2l0aGluIHRoZSBURFggZW52aXJvbm1lbnQuIFRoaXMgZmxhZywgaWYgc2V0IGFzIGV4cGVjdGVkLCBjb25maXJtcyB0aGF0IHRoZSBpbmZyYXN0cnVjdHVyZSBoYXMgcHJvcGVybHkgaWRlbnRpZmllZCB0aGlzIHZpcnR1YWwgQ1BVIGFzIHJlcXVpcmluZyB0aGUgcHJvcGVyIFREWCBzZXR1cCBwcm9jZWR1cmVzLiBUaGlzIG1lYW5zIHRoZSBvdmVyYWxsIFREWCBhcmNoaXRlY3R1cmUgaXMgZnVuY3Rpb25pbmcsIGF0IGxlYXN0IGF0IHRoaXMgcHJlbGltaW5hcnkgc3RhZ2UuIFdlIGNhbiBwcm9iYWJseSBtYWtlIGEgZ29vZCBjb25jbHVzaW9uIGZyb20gdGhlcmUgYW5kIGtlZXAgbW92aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDQ2NCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIwOjA4OjQ1LjgxOTkzMDk0OVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYyOTIwNzAyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZXZfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTM1Mjk9dm9pZCBzZXZfZnJlZV92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzU1OC1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjM1NTk6Ym9vbCBzZXZfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zNTYwLXtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9NTMyMj1zdHJ1Y3Qga3ZtX3g4Nl9vcHMgc3ZtX3g4Nl9vcHMgX19pbml0ZGF0YSA9IHtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNTQzNy0jaWZkZWYgQ09ORklHX0tWTV9BTURfU0VWXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo1NDM4OlxcdC52Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uID0gc2V2X3ZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24sXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01NDM5LVxcdC5kZXZfZ2V0X2F0dHIgPSBzZXZfZGV2X2dldF9hdHRyLFxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaD05Nzk9dm9pZCBzZXZfZXNfdW5tYXBfZ2hjYihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTk4MS0jaWZkZWYgQ09ORklHX0tWTV9BTURfU0VWXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDo5ODI6Ym9vbCBzZXZfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmgtOTgzLWludCBzZXZfbWVtX2VuY19pb2N0bChzdHJ1Y3Qga3ZtICprdm0sIHZvaWQgX191c2VyICphcmdwKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMjA6MDg6NDcuNDQ5MTQ2MDI5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4MjkyMTM0MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLVk0gUGF0Y2ggZm9yIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gYHNldl92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uYCBsb29rcyBwcm9taXNpbmcsIHRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXMsIHdoYXQgQ09ORklHIG9wdGlvbnMgYXJlIGdvaW5nIHRvIGJlIGNyaXRpY2FsIGZvciB0aGlzIHBhdGNoIHRvIGZ1bmN0aW9uIGNvcnJlY3RseT9cblxuSSBzZWUgdGhlIHBhdGNoIHRvdWNoZXMgYSBidW5jaCBvZiBLVk0tcmVsYXRlZCBmaWxlczogYHNtbS5jYCwgYHN2bS9zZXYuY2AsIGBzdm0vc3ZtLmNgLCBgdm14L21haW4uY2AsIGB2bXgvdGR4LmNgLCBgdm14L3ZteC5jYCwgYW5kIGB4ODYuY2AuIFRoYXQncyBhIGNsZWFyIGluZGljYXRpb24gdGhhdCBLVk0gaXRzZWxmIGlzIGdvaW5nIHRvIGJlIGEgaGFyZCByZXF1aXJlbWVudCDigJMgYENPTkZJR19LVk1gIGlzIHByZXR0eSBzdGFuZGFyZCBhY3Jvc3MgS1ZNIGJ1aWxkcywgc28gdGhhdCdzIGEgZ2l2ZW4uXG5cbkxldCdzIGRpZyBpbiBhIGJpdCBtb3JlLiBMb29raW5nIGF0IGBhcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jYCwgSSBzcG90IGEgcmVmZXJlbmNlIHRvIGBDT05GSUdfS1ZNX0FNRF9TRVZgLCBzcGVjaWZpY2FsbHk6XG5cbmBgYGNcbiNpZmRlZiBDT05GSUdfS1ZNX0FNRF9TRVZcblx0LnZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24gPSBzZXZfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbixcbmBgYFxuXG5CaW5nbyEgVGhhdCBzZWVtcyBwcmV0dHkgZXhwbGljaXQuIGBLVk1fQU1EX1NFVmAgaXMgZGVmaW5pdGVseSBnb2luZyB0byBiZSBhIGtleSBjb25maWcgdG8gZW5hYmxlIGhlcmUuIEl0IGlzIGRlZmluaXRlbHkgaW1wb3J0YW50LCBhbmQgSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCBpdCBpcyBpbmNsdWRlZC5cblxuQW5kIHRoZW4gSSBzZWUgYENPTkZJR19LVk1fU01NYCBtZW50aW9uZWQgaW4gYGFyY2gveDg2L2t2bS92bXgveDg2X29wcy5oYDpcblxuYGBgY1xuI2lmZGVmIENPTkZJR19LVk1fU01NXG5gYGBcblxuU28sIGxldCBtZSBqdXN0IGNoZWNrIGlmIHRoYXQgaXMgYWN0dWFsbHkgYSBjb25maWd1cmF0aW9uIHRoYXQgbmVlZHMgdG8gYmUgaW5jbHVkZWQuIEkgbmVlZCB0byBrZWVwIGFuIGV5ZSBvbiB0aGlzIG9uZSwgZm9yIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MTA2LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIwOjA4OjUzLjI3ODM2Mjc4M1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1MDYwOTQxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNX1NNTVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZz0xNzM9Y29uZmlnIEtWTV9JT0FQSUNcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4Mi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxODM6Y29uZmlnIEtWTV9TTU1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODQtXFx0Ym9vbCBcXFwiU3lzdGVtIE1hbmFnZW1lbnQgTW9kZSBlbXVsYXRpb25cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIwOjA4OjU0LjkyODk3ODI3M1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzg0NDQ5NjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6XG5cbioqQ2hlY2tpbmcgdGhlIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuUmlnaHQsIHNvIGBLVk1fU01NYCwgdGhhdCdzIGRlZmluaXRlbHkgYSBjb25maWd1cmF0aW9uIG9wdGlvbiwgYSBrbm93biBxdWFudGl0eS4gTXkgZm9jdXMgbm93IGlzLCBpcyB0aGVyZSBhIHJlbGF0ZWQgVERYIChUcnVzdCBEb21haW4gRXh0ZW5zaW9ucykgY29uZmlndXJhdGlvbj8gSXQncyB0aGUgbG9naWNhbCBuZXh0IHN0ZXAgaW4gbXkgYXNzZXNzbWVudCwgSSBuZWVkIHRvIGtub3cgaWYgaXQncyB0aGVyZS4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gZXN0YWJsaXNoIHRoZSBzY29wZSBvZiByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLCBhbmQgVERYIGlzIHRoZSBrZXkgcG9pbnQgSSBoYXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTkyNiwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIwOjA4OjU3LjcxMzQzMDQ3MloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1ODkwMDU0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNX0lOVEVMX1REWFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTM1LVxcdGJvb2wgXFxcIkludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIwOjA4OjU5LjM3MjMzNjc1MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTM2NDc1NjQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gUmV2aWV3KipcblxuT2theSwgc28gSSdtIGRlYWxpbmcgd2l0aCB0aGUgYEtWTV9JTlRFTF9URFhgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBZZXAsIHRoYXQncyBkZWZpbml0ZWx5IGEgY29uZmlnLCBubyBxdWVzdGlvbi4gVGhlIGdvYWwgaGVyZSBpcyB0byBnZXQgZXZlcnl0aGluZyBzZXQgdXAgY29ycmVjdGx5IGZvciB0aGlzIHNwZWNpZmljIHZpcnR1YWxpemF0aW9uIHRlY2guXG5cbkFscmlnaHQsIHNvIHRvIG1ha2UgdGhpcyB0aGluZyB3b3JrLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXNlIGFyZSBlbmFibGVkIHRvbzogYEtWTWAsIGBLVk1fU01NYCwgYEtWTV9BTURfU0VWYCwgYW5kIG9mIGNvdXJzZSBgS1ZNX0lOVEVMX1REWGAgaXRzZWxmLiBUaGF0J3MgYSBwcmV0dHkgc3RhbmRhcmQgc2V0IG9mIGJhc2UgcmVxdWlyZW1lbnRzLCBub3RoaW5nIHRvbyBzdXJwcmlzaW5nLlxuXG5Ob3csIGxldCdzIGRpdmUgaW50byB0aGUgZGVwZW5kZW5jaWVzIGZvciBgS1ZNX0lOVEVMX1REWGAuIFRoYXQncyB3aGVyZSB0aGUgcmVhbCBkZXRhaWwgbGllcywgdGhlIGdyb3VuZHdvcmsuIE5lZWQgdG8ga25vdyB3aGF0IGVsc2UgdGhpcyByZWxpZXMgb24uIFRpbWUgdG8gY2hlY2sgdGhvc2UgZGVwZW5kZW5jaWVzIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjE5MSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIwOjA5OjAyLjkwODgxNTE0N1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM2NTkzODQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fSU5URUxfVERYXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzMy1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzQ6Y29uZmlnIEtWTV9JTlRFTF9URFhcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXFx0Ym9vbCBcXFwiSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMjA6MDk6MDMuMzQ1NDE0OTI5WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNTc1MjA3OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gS1ZNIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBhIHNwZWNpZmljIGFzcGVjdCBvZiB0aGUgS1ZNIGFyY2hpdGVjdHVyZSBvbiB4ODYsIHByb2JhYmx5IHJlbGF0ZWQgdG8gYSBmZWF0dXJlIG9yIHNldHRpbmcuIE15IGludHVpdGlvbiB0ZWxscyBtZSB0byBjaGVjayB0aGUgYEtjb25maWdgIGZpbGUsIGFzIGl0J3MgdGhlIHVzdWFsIHN0YXJ0aW5nIHBvaW50IGZvciBleHBsb3JpbmcgYnVpbGQtdGltZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEknbSBnb2luZyB0byBqdW1wIHRvIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AgYW5kIHpvb20gaW4gYXJvdW5kIGxpbmUgMTM0LiBUaGF0J3MgdXN1YWxseSB3aGVyZSB0aGV5IHB1dCB0aGUgbW9yZSBzcGVjaWZpYyBjb25maWcgb3B0aW9ucyByZWxhdGluZyB0byB0aGUgS1ZNLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBvdmVydmlldyBvZiB0aGUgcmVsZXZhbnQgc2V0dGluZ3MgYW5kIGRlcGVuZGVuY2llcy4gVGhpcyBpcyBvZnRlbiB3aGVyZSB0aGluZ3MgbGlrZSBmZWF0dXJlIGZsYWdzIG9yIGRldmljZSBzdXBwb3J0IGFyZSBkZWZpbmVkLCBzbyBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgd2hhdCBJJ20gbG9va2luZyBmb3IgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NTk5LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMjA6MDk6MDYuNjAyOTM5NDVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzIzMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTMwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTMwOlxcdFxcdCAgZ3Vlc3RzIHZpYSBhIGRldmljZSBub2RlLCBlLmcuIC9kZXYvc2d4X3ZlcGMuXFxuIDEzMTpcXHRcXG4gMTMyOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMTMzOlxcdFxcbiAxMzQ6XFx0Y29uZmlnIEtWTV9JTlRFTF9URFhcXG4gMTM1OlxcdFxcdGJvb2wgXFxcIkludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcXFwiXFxuIDEzNjpcXHRcXHRkZWZhdWx0IHlcXG4gMTM3OlxcdFxcdGRlcGVuZHMgb24gSU5URUxfVERYX0hPU1RcXG4gMTM4OlxcdFxcdHNlbGVjdCBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xcbiAxMzk6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9QT1BVTEFURVxcbiAxNDA6XFx0XFx0aGVscFxcbiAxNDE6XFx0XFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBsYXVuY2hpbmcgSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWClcXG4gMTQyOlxcdFxcdCAgY29uZmlkZW50aWFsIFZNcyBvbiBJbnRlbCBwcm9jZXNzb3JzLlxcbiAxNDM6XFx0XFxuIDE0NDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDE0NTpcXHRcXG4gMTQ2OlxcdGNvbmZpZyBLVk1fQU1EXFxuIDE0NzpcXHRcXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbiAxNDg6XFx0XFx0ZGVwZW5kcyBvbiBLVk0gXFx1MDAyNlxcdTAwMjYgKENQVV9TVVBfQU1EIHx8IENQVV9TVVBfSFlHT04pXFxuIDE0OTpcXHRcXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIwOjA5OjA2LjYwMzAxMjg0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NjM2NDE5OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBrZWVwaW5nIGluIG1pbmQgbXkgZXhwZXJ0aXNlIGluIHRoaXMgYXJlYTpcblxuKipBbmFseXppbmcgdGhlIERlcGVuZGVuY3k6IElOVEVMX1REWF9IT1NUKipcblxuT2theSwgc28gYElOVEVMX1REWF9IT1NUYCBoYXMgcG9wcGVkIHVwLiBTdHJhaWdodCBhd2F5LCBJIHJlY29nbml6ZSB0aGF0IGFzIGEgY3JpdGljYWwgZGVwZW5kZW5jeS4gR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiBjb25maWRlbnRpYWwgY29tcHV0aW5nIGVudmlyb25tZW50cywgdGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSB3ZSdyZSBsb29raW5nIGF0IEludGVsJ3MgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgZm9yIHRoZSBob3N0LiBUaGlzIGxpa2VseSBtZWFucyB3ZSdyZSBkZWFsaW5nIHdpdGggYSBzeXN0ZW0gYWltaW5nIGZvciBzdHJvbmcgaXNvbGF0aW9uLCBwcm9iYWJseSBsZXZlcmFnaW5nIGhhcmR3YXJlLWJhc2VkIHNlY3VyaXR5IGZlYXR1cmVzIGF0IHRoZSBDUFUgbGV2ZWwgdG8gY3JlYXRlIHByb3RlY3RlZCBleGVjdXRpb24gZW5jbGF2ZXMgZm9yIHZpcnR1YWwgbWFjaGluZXMgb3IgY29udGFpbmVyIHdvcmtsb2Fkcy4gVGhlIGZhY3QgdGhhdCBpdCdzIGEgKmhvc3QqIGNvbXBvbmVudCBhbHNvIGZsYWdzIGl0cyBzaWduaWZpY2FuY2UgaW4gdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLiBXZSBuZWVkIHRvIGJlIGNyeXN0YWwgY2xlYXIgYWJvdXQgaG93IHRoaXMgZGVwZW5kZW5jeSBpcyBpbmNvcnBvcmF0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MTQwLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMDowOToxMC4yNjY2NTc1NjNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MTcyMzE1OTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElOVEVMX1REWF9IT1NUXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L0tjb25maWc9MTg0ND1jb25maWcgWDg2X1VTRVJfU0hBRE9XX1NUQUNLXFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnLTE4NjMtXFxuYXJjaC94ODYvS2NvbmZpZzoxODY0OmNvbmZpZyBJTlRFTF9URFhfSE9TVFxcbmFyY2gveDg2L0tjb25maWctMTg2NS1cXHRib29sIFxcXCJJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBob3N0IHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIwOjA5OjExLjc4Mzg5NTI3NVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDU2ODQ1MjI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqRGl2aW5nIGludG8gdGhlIHg4NiBBcmNoaXRlY3R1cmUgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGBhcmNoL3g4Ni9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB0aGUgeDg2IGFyY2hpdGVjdHVyZS4gTGV0J3Mgc3RhcnQgYXJvdW5kIGxpbmUgMTg2NCDigJMgdGhhdCdzIG9mdGVuIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgZXhwbG9yaW5nIHNwZWNpZmljIGZlYXR1cmUgc2V0cyBvciByZWxhdGVkIHNldHRpbmdzLiBIb3BlZnVsbHksIHRoaXMgc2VjdGlvbiB3aWxsIHNoZWQgc29tZSBsaWdodCBvbiB0aGUgYXNwZWN0cyBJJ20gdHJ5aW5nIHRvIHVuZGVyc3RhbmQuIEknbSBleHBlY3RpbmcgdG8gZmluZCBzb21lIGNydWNpYWwgZGV0YWlscyBhYm91dCBpdHMgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoZXJlLCBsaWtlbHkgcmVsYXRlZCB0byBbaW5zZXJ0IHlvdXIgZmllbGQncyBleHBlY3RhdGlvbiBmcm9tIGxvb2tpbmcgYXQgYGFyY2gveDg2L0tjb25maWdgXS4gVGhpcyBzaG91bGQgYmUgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IG15IGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NDQyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMjA6MDk6MTQuODQwNzQzODhaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMxOTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTg2MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTg2MDpcXHRcXHQgIFNlZSBEb2N1bWVudGF0aW9uL2FyY2gveDg2L3Noc3RrLnJzdCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cXG4xODYxOlxcdFxcbjE4NjI6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbjE4NjM6XFx0XFxuMTg2NDpcXHRjb25maWcgSU5URUxfVERYX0hPU1RcXG4xODY1OlxcdFxcdGJvb2wgXFxcIkludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIGhvc3Qgc3VwcG9ydFxcXCJcXG4xODY2OlxcdFxcdGRlcGVuZHMgb24gQ1BVX1NVUF9JTlRFTFxcbjE4Njc6XFx0XFx0ZGVwZW5kcyBvbiBYODZfNjRcXG4xODY4OlxcdFxcdGRlcGVuZHMgb24gS1ZNX0lOVEVMXFxuMTg2OTpcXHRcXHRkZXBlbmRzIG9uIFg4Nl9YMkFQSUNcXG4xODcwOlxcdFxcdHNlbGVjdCBBUkNIX0tFRVBfTUVNQkxPQ0tcXG4xODcxOlxcdFxcdGRlcGVuZHMgb24gQ09OVElHX0FMTE9DXFxuMTg3MjpcXHRcXHRkZXBlbmRzIG9uIFg4Nl9NQ0VcXG4xODczOlxcdFxcdGhlbHBcXG4xODc0OlxcdFxcdCAgSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgcHJvdGVjdHMgZ3Vlc3QgVk1zIGZyb20gbWFsaWNpb3VzXFxuMTg3NTpcXHRcXHQgIGhvc3QgYW5kIGNlcnRhaW4gcGh5c2ljYWwgYXR0YWNrcy4gIFRoaXMgb3B0aW9uIGVuYWJsZXMgbmVjZXNzYXJ5IFREWFxcbjE4NzY6XFx0XFx0ICBzdXBwb3J0IGluIHRoZSBob3N0IGtlcm5lbCB0byBydW4gY29uZmlkZW50aWFsIFZNcy5cXG4xODc3OlxcdFxcbjE4Nzg6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbjE4Nzk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIwOjA5OjE0Ljg0MDk3NzI1WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1Mzc5MDcxMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtlcm5lbCBEZXBlbmRlbmNpZXMgZm9yIFNlY3VyZSBFeGVjdXRpb24gRW52aXJvbm1lbnRzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byBzcGVjaWZpYyB0ZWNobm9sb2dpZXMuIEkgc2VlIHRoYXQgYElOVEVMX1REWF9IT1NUYCBpcyBkZXBlbmRlbnQgb24gYSBmZXcga2V5IGNvbXBvbmVudHM6IGBLVk1fSU5URUxgLCB3aGljaCBpcyBleHBlY3RlZCwgb2J2aW91c2x5IHJlbGF0ZWQgdG8gSW50ZWwncyBWaXJ0dWFsaXphdGlvbiwgYXMgd2VsbCBhcyBgWDg2X1gyQVBJQ2AgZm9yIGludGVycnVwdCBoYW5kbGluZywgYENPTlRJR19BTExPQ2AgZm9yIGNvbnRpZ3VvdXMgbWVtb3J5IGFsbG9jYXRpb24gKGltcG9ydGFudCBmb3Igc2VjdXJpdHkgaXNvbGF0aW9uKSwgYW5kIGBYODZfTUNFYCBmb3IgTWFjaGluZSBDaGVjayBFeGNlcHRpb25zIGhhbmRsaW5nIOKAkyBhbm90aGVyIGltcG9ydGFudCBwYXJ0IG9mIGhhcmR3YXJlIG1vbml0b3JpbmcuXG5cbk5vdywgSSBuZWVkIHRvIHNoaWZ0IG15IGZvY3VzLiBNeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgZGVwZW5kZW5jaWVzIGZvciBgS1ZNX0FNRF9TRVZgLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgQU1EJ3MgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSByZWxhdGVzIHRvIG90aGVyIGtlcm5lbCBjb21wb25lbnRzLiBUaGlzIGlzIGNyaXRpY2FsIGZvciBnZXR0aW5nIGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgbGFuZHNjYXBlIG9mIHNlY3VyZSBleGVjdXRpb24gZW52aXJvbm1lbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzk3MiwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMjA6MDk6MTguMzc4ODg4MjI1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQ1NzAyOTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fQU1EX1NFVlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZz0xNDY9Y29uZmlnIEtWTV9BTURcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNTY6Y29uZmlnIEtWTV9BTURfU0VWXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVxcdGJvb2wgXFxcIkFNRCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIwOjA5OjIwLjAyNDU5NjczNVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjQ1MDEwNTIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIEtWTSBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgS1ZNIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AuIEknbSBndWVzc2luZyB0aGF0IGxpbmUgMTU2IG9yIHRoZXJlYWJvdXRzIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3Igd2hhdGV2ZXIgSSdtIGN1cnJlbnRseSBpbnZlc3RpZ2F0aW5nLiBJdCdzIGxpa2VseSByZWxhdGVkIHRvIGEgc3BlY2lmaWMgZmVhdHVyZSBvciBkZXBlbmRlbmN5IEknbSB0cnlpbmcgdG8gdW5kZXJzdGFuZCwgb3IgcGVyaGFwcyBhIGJ1ZyBmaXggSSdtIGNoYXNpbmcgZG93biB3aXRoaW4gdGhlIEtWTSBmcmFtZXdvcmsuIEtub3dpbmcgdGhlIGFyY2hpdGVjdHVyZSwgSSdtIGV4cGVjdGluZyB0byBmaW5kIHNldHRpbmdzIGRpcmVjdGx5IGFmZmVjdGluZyB4ODYgdmlydHVhbGl6YXRpb24gYmVoYXZpb3IgLSB0aGluZ3MgbGlrZSBoYXJkd2FyZSB2aXJ0dWFsaXphdGlvbiBleHRlbnNpb25zLCBNU1IgaGFuZGxpbmcsIG9yIGludGVycnVwdCBkZWxpdmVyeSBtZWNoYW5pc21zLiBJIGFudGljaXBhdGUgdGhpcyBsaW5lIHdpbGwgZWl0aGVyIGJlIGEgcmVsZXZhbnQgb3B0aW9uIGRlZmluaXRpb24gaXRzZWxmLCBvciBhIHJlZmVyZW5jZSB0byBhbm90aGVyIHNlY3Rpb24gb3IgZGVwZW5kZW5jeSB3aXRoaW4gdGhlIEtjb25maWcgc3RydWN0dXJlLiBUaW1lIHRvIHNlZSB3aGF0J3Mgd2hhdCFcblxuXG4iLCJJbnB1dFRva2VucyI6MTgzNTYsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMDowOToyMy4yNjk2MTA3NTZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODk4MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTUwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTUwOlxcdFxcdCAgUHJvdmlkZXMgc3VwcG9ydCBmb3IgS1ZNIG9uIEFNRCBwcm9jZXNzb3JzIGVxdWlwcGVkIHdpdGggdGhlIEFNRC1WXFxuIDE1MTpcXHRcXHQgIChTVk0pIGV4dGVuc2lvbnMuXFxuIDE1MjpcXHRcXG4gMTUzOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxuIDE1NDpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIGt2bS1hbWQuXFxuIDE1NTpcXHRcXG4gMTU2OlxcdGNvbmZpZyBLVk1fQU1EX1NFVlxcbiAxNTc6XFx0XFx0Ym9vbCBcXFwiQU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFxcXCJcXG4gMTU4OlxcdFxcdGRlZmF1bHQgeVxcbiAxNTk6XFx0XFx0ZGVwZW5kcyBvbiBLVk1fQU1EIFxcdTAwMjZcXHUwMDI2IFg4Nl82NFxcbiAxNjA6XFx0XFx0ZGVwZW5kcyBvbiBDUllQVE9fREVWX1NQX1BTUCBcXHUwMDI2XFx1MDAyNiAhKEtWTV9BTUQ9eSBcXHUwMDI2XFx1MDAyNiBDUllQVE9fREVWX0NDUF9ERD1tKVxcbiAxNjE6XFx0XFx0c2VsZWN0IEFSQ0hfSEFTX0NDX1BMQVRGT1JNXFxuIDE2MjpcXHRcXHRzZWxlY3QgS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcXG4gMTYzOlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fQ09OVkVSVFxcbiAxNjQ6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9SRUNMQUlNXFxuIDE2NTpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVcXG4gMTY2OlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fUE9QVUxBVEVcXG4gMTY3OlxcdFxcdGhlbHBcXG4gMTY4OlxcdFxcdCAgUHJvdmlkZXMgc3VwcG9ydCBmb3IgbGF1bmNoaW5nIGVuY3J5cHRlZCBWTXMgd2hpY2ggdXNlIFNlY3VyZVxcbiAxNjk6XFx0XFx0ICBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFViksIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gd2l0aFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMDowOToyMy4yNjk3MDE4MDZaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQxODc5MDM0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgZGVwZW5kZW5jaWVzLCBzdW1tYXJpemVkIGFzIGEgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRlcGVuZGVuY3kgRGVlcCBEaXZlKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgZG93biB0aGVzZSBrZXJuZWwgbW9kdWxlcy4gSXQgbG9va3MgbGlrZSBgS1ZNX0FNRF9TRVZgIGlzIHByZXR0eSB0aWdodGx5IGNvdXBsZWQuIENsZWFybHksIGl0IGhpbmdlcyBvbiBib3RoIGBLVk1fQU1EYCBhbmQgYENSWVBUT19ERVZfU1BfUFNQYC4gTWFrZXMgc2Vuc2UsIGNvbnNpZGVyaW5nIFNFViBpcyBhbiBBTUQtc3BlY2lmaWMgdGVjaG5vbG9neSBhbmQgcHJvYmFibHkgbmVlZHMgc29tZSBjcnlwdG9ncmFwaGljIHN1cHBvcnQgZnJvbSB0aGUgUFNQLiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCByZWxhdGlvbnNoaXAgd2hlbiBJJ20gdHJhY2tpbmcgZG93biBpc3N1ZXMgb3IgY29uZmlndXJpbmcgc3lzdGVtcy4gTm93LCBsZXQncyBzaGlmdCBnZWFycyBhbmQgcXVpY2tseSB2ZXJpZnkgd2hhdCBgS1ZNX1NNTWAgZGVwZW5kcyBvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdCBtb2R1bGUncyBkZXBlbmRlbmNpZXMgYXMgd2VsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg5ODAsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIwOjA5OjI2LjY4ODQ5NTA1NFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTAwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODAsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxODA6XFx0XFxuIDE4MTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IFkuXFxuIDE4MjpcXHRcXG4gMTgzOlxcdGNvbmZpZyBLVk1fU01NXFxuIDE4NDpcXHRcXHRib29sIFxcXCJTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIGVtdWxhdGlvblxcXCJcXG4gMTg1OlxcdFxcdGRlZmF1bHQgeVxcbiAxODY6XFx0XFx0ZGVwZW5kcyBvbiBLVk1fWDg2XFxuIDE4NzpcXHRcXHRoZWxwXFxuIDE4ODpcXHRcXHQgIFByb3ZpZGVzIHN1cHBvcnQgZm9yIEtWTSB0byBlbXVsYXRlIFN5c3RlbSBNYW5hZ2VtZW50IE1vZGUgKFNNTSlcXG4gMTg5OlxcdFxcdCAgaW4gdmlydHVhbCBtYWNoaW5lcy4gIFRoaXMgY2FuIGJlIHVzZWQgYnkgdGhlIHZpcnR1YWwgbWFjaGluZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMDowOToyNi42ODg1NjEyMDNaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIwMzc2NjM1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIGRlcGVuZGVuY2llcywgdGhpbmtpbmcgdGhyb3VnaCB0aGUgc2l0dWF0aW9uOlxuXG4qKkRlcGVuZGVuY3kgRGVlcCBEaXZlOiBLVk1fU01NIGFuZCBLVk1fWDg2KipcblxuT2theSwgc28gYEtWTV9TTU1gIHJlbGllcyBvbiBgS1ZNX1g4NmAuIFRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIEdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGFyY2hpdGVjdHVyZSwgdGhpcyBpc24ndCBzdXJwcmlzaW5nIOKAkyBTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIChTTU0pIGlzIGRlZmluaXRlbHkgeDg2LXNwZWNpZmljLiBCdXQgSSBuZWVkIHRvIGJlIHN1cmUuIFRpbWUgdG8gZGlnIGludG8gdGhlIGBLVk1fWDg2YCBtb2R1bGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzY29wZSBhbmQgdGhlIHByZWNpc2UgbmF0dXJlIG9mIHRoZSBkZXBlbmRlbmN5LiBXaGF0IHNwZWNpZmljIGZ1bmN0aW9uYWxpdGllcyBvZiBgS1ZNX1g4NmAgZG9lcyBgS1ZNX1NNTWAgbGV2ZXJhZ2U/IElzIGl0IHNpbXBseSB0aGUgY29yZSB4ODYgdmlydHVhbGl6YXRpb24gbGF5ZXIsIG9yIGRvZXMgaXQgZGVwZW5kIG9uIG1vcmUgc3BlY2lhbGl6ZWQgZmVhdHVyZXM/IFVuZGVyc3RhbmRpbmcgdGhpcyBncmFudWxhciBkZXBlbmRlbmN5IGlzIGtleSBmb3IgYW55IG9wdGltaXphdGlvbiBvciB0cm91Ymxlc2hvb3RpbmcgZWZmb3J0cyBkb3duIHRoZSBsaW5lLiBMZXQncyBzZWUgd2hhdCdzIHVuZGVyIHRoZSBob29kIG9mIGBLVk1fWDg2YC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkzNTQsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIwOjA5OjI5Ljg5MjMzMDI1NVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYyMDAyNTk4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNX1g4NlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1fWDg2XFxuYXJjaC94ODYva3ZtL0tjb25maWctMjEtXFx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMDowOTozMS41MTIzNjEzMzVaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTczMDM2MTU5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBLVk0gQ29uZmlndXJhdGlvbiBBbmFseXNpcyoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSXQgbG9va3MgbGlrZSBgS1ZNX1g4NmAgaXMgb25seSBlbmFibGVkIHdoZW4gdGhlIGJhc2UgYEtWTWAgbW9kdWxlIGlzIGFjdGl2YXRlZCwgYW5kIHRoZW4gc3BlY2lmaWNhbGx5LCBpZiBlaXRoZXIgdGhlIEludGVsIChgS1ZNX0lOVEVMYCkgb3IgQU1EIChgS1ZNX0FNRGApIGV4dGVuc2lvbnMgYXJlIHByZXNlbnQuIE1ha2VzIHNlbnNlLCB0aGF0J3MgdGhlIGNvcmUgaHlwZXJ2aXNvciBzdHJ1Y3R1cmUuXG5cbk5vdywgbGV0J3MgbmFpbCBkb3duIHdoYXQgY29uZmlndXJhdGlvbnMgKkkqIG5lZWQgdG8gZW5hYmxlIHRvIGdldCB0aGlzIHRoaW5nIHJ1bm5pbmcgcHJvcGVybHkuIExvb2tzIGxpa2UgdGhlIGNvcmUgYEtWTWAgbW9kdWxlIGlzIGEgZ2l2ZW4uICBJIG5lZWQgdG8gbWFrZSBzdXJlIGBLVk1fSU5URUxgIG9yIGBLVk1fQU1EYCBhcmUgc2V0LCBkZXBlbmRpbmcgb24gdGhlIGhvc3QncyBDUFUuIEkgc2VlIGBLVk1fU01NYCB3aGljaCBJIGFzc3VtZSByZWxhdGVzIHRvIFN5c3RlbSBNYW5hZ2VtZW50IE1vZGUsIGNyaXRpY2FsIGZvciBoYW5kbGluZyBjZXJ0YWluIGhhcmR3YXJlIGludGVyYWN0aW9ucywgYW5kIEknbGwgbmVlZCB0byBjb25zaWRlciBgS1ZNX0FNRF9TRVZgLCBhbmQgYEtWTV9JTlRFTF9URFhgIGRlcGVuZGluZyBvbiB0aGUgc2VjdXJpdHkgZmVhdHVyZS1zZXQgSSByZXF1aXJlLiBBbHNvLCBgSU5URUxfVERYX0hPU1RgIHdpbGwgYmUgbmVlZGVkIGlmIEkgYW0gcnVubmluZyB3aXRoIFREWC5cblxuRmluYWxseSwgYENSWVBUT19ERVZfU1BfUFNQYCBpcyBsaXN0ZWQsIGFuZCBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIGFueSBkZXBlbmRlbmNpZXMgaXQgaGFzLiBUaGlzIGlzIHByb2JhYmx5IHJlbGF0ZWQgdG8gc3VwcG9ydGluZyBzcGVjaWZpYyBjcnlwdG9ncmFwaGljIG9mZmxvYWQgaGFyZHdhcmUuIEdvdHRhIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGxpbmVzIHVwIGRlcGVuZGVuY2llcy13aXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTcyMywiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMDowOTozNy4yNDI3MjUxOTFaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODMyMzAzNjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIENSWVBUT19ERVZfU1BfUFNQXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnPTIzPWNvbmZpZyBDUllQVE9fREVWX0NDUF9DUllQVE9cXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnLTM3LVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnOjM4OmNvbmZpZyBDUllQVE9fREVWX1NQX1BTUFxcbmRyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnLTM5LVxcdGJvb2wgXFxcIlBsYXRmb3JtIFNlY3VyaXR5IFByb2Nlc3NvciAoUFNQKSBkZXZpY2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIwOjA5OjM4LjgyNTk2NjkyMloiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzUyOTE5OTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBDQ1AgS2NvbmZpZyoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ20gdGhpbmtpbmcsIFwiVGltZSB0byBkaWcgaW50byB0aGUgYGRyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMzguXCIgSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgQ0NQIGNyeXB0byBlbmdpbmUuIEknbSBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIHRoYXQgbGluZSBiZWNhdXNlIEkgdmFndWVseSByZWNhbGwgc29tZSBjcml0aWNhbCBzZXR0aW5nIGJlaW5nIGRlZmluZWQgdGhlcmUgLSBtYXliZSByZWxhdGVkIHRvIGtleSBzaXplLCBzdXBwb3J0ZWQgYWxnb3JpdGhtcywgb3IgcGVyaGFwcyBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXMuIEkgd2FudCB0byBxdWlja2x5IHplcm8gaW4gb24gaXQgYW5kIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCdzIHdoYXQuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBpcyBjcnVjaWFsIGZvciBhbnkgZGVlcGVyIGFuYWx5c2lzIG9yIG1vZGlmaWNhdGlvbiBJIG5lZWQgdG8gcGVyZm9ybS4gTGV0J3Mgc2VlIHdoYXQgZ2VtcyBhcmUgaGlkZGVuIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDI2MCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIwOjA5OjQyLjE3ODg5MDMxMVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzA3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2NyeXB0by9jY3AvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAzMDpcXHRcXHRzZWxlY3QgQ1JZUFRPX0FVVEhFTkNcXG4gIDMxOlxcdFxcdHNlbGVjdCBDUllQVE9fUlNBXFxuICAzMjpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9BRVNcXG4gIDMzOlxcdFxcdGhlbHBcXG4gIDM0OlxcdFxcdCAgU3VwcG9ydCBmb3IgdXNpbmcgdGhlIGNyeXB0b2dyYXBoaWMgQVBJIHdpdGggdGhlIEFNRCBDcnlwdG9ncmFwaGljXFxuICAzNTpcXHRcXHQgIENvcHJvY2Vzc29yLiBUaGlzIG1vZHVsZSBzdXBwb3J0cyBvZmZsb2FkIG9mIFNIQSBhbmQgQUVTIGFsZ29yaXRobXMuXFxuICAzNjpcXHRcXHQgIElmIHlvdSBjaG9vc2UgJ00nIGhlcmUsIHRoaXMgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNjcF9jcnlwdG8uXFxuICAzNzpcXHRcXG4gIDM4OlxcdGNvbmZpZyBDUllQVE9fREVWX1NQX1BTUFxcbiAgMzk6XFx0XFx0Ym9vbCBcXFwiUGxhdGZvcm0gU2VjdXJpdHkgUHJvY2Vzc29yIChQU1ApIGRldmljZVxcXCJcXG4gIDQwOlxcdFxcdGRlZmF1bHQgeVxcbiAgNDE6XFx0XFx0ZGVwZW5kcyBvbiBDUllQVE9fREVWX0NDUF9ERCBcXHUwMDI2XFx1MDAyNiBYODZfNjQgXFx1MDAyNlxcdTAwMjYgQU1EX0lPTU1VXFxuICA0MjpcXHRcXHRzZWxlY3QgUENJX1RTTSBpZiBQQ0lcXG4gIDQzOlxcdFxcdGhlbHBcXG4gIDQ0OlxcdFxcdCBQcm92aWRlIHN1cHBvcnQgZm9yIHRoZSBBTUQgUGxhdGZvcm0gU2VjdXJpdHkgUHJvY2Vzc29yIChQU1ApLlxcbiAgNDU6XFx0XFx0IFRoZSBQU1AgaXMgYSBkZWRpY2F0ZWQgcHJvY2Vzc29yIHRoYXQgcHJvdmlkZXMgc3VwcG9ydCBmb3Iga2V5XFxuICA0NjpcXHRcXHQgbWFuYWdlbWVudCBjb21tYW5kcyBpbiBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIG1vZGUsXFxuICA0NzpcXHRcXHQgYWxvbmcgd2l0aCBzb2Z0d2FyZS1iYXNlZCBUcnVzdGVkIEV4ZWN1dGlvbiBFbnZpcm9ubWVudCAoVEVFKSB0b1xcbiAgNDg6XFx0XFx0IGVuYWJsZSB0aGlyZC1wYXJ0eSB0cnVzdGVkIGFwcGxpY2F0aW9ucy5cXG4gIDQ5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMDowOTo0Mi4xNzg5ODkxNTFaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI0NDUwNjQ0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZXBlbmRlbmNpZXMgYW5kIERlZXAgRGl2ZXMqKlxuXG5Pa2F5LCBzbyBgQ1JZUFRPX0RFVl9TUF9QU1BgIHJlbGllcyBvbiBhIGZldyBvdGhlciBjb21wb25lbnRzLiBTcGVjaWZpY2FsbHksIGBDUllQVE9fREVWX0NDUF9ERGAsIGBYODZfNjRgLCBhbmQgYEFNRF9JT01NVWAuIEdpdmVuIG15IGV4cGVyaWVuY2UsIGl0J3MgcHJldHR5IGNsZWFyIHRob3NlIGFyZSBrZXkgcGllY2VzIGZvciBoYXJkd2FyZS1hY2NlbGVyYXRlZCBjcnlwdG8uIE1ha2VzIHNlbnNlLiBOb3csIGxldCdzIGRyaWxsIGRvd24gaW50byBgQ1JZUFRPX0RFVl9DQ1BfRERgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgdGhhdCBkZXBlbmRlbmN5IGVudGFpbHMgdG8gZ2V0IGEgZnVsbCBwaWN0dXJlIG9mIHRoZSBgU1BfUFNQYCdzIGZ1bmN0aW9uYWxpdHkgYW5kIHBvdGVudGlhbCBib3R0bGVuZWNrcy4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCB3b3JrIGJlZ2lucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA3ODksIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIwOjA5OjQ1LjQyMzUwMDQwMloiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU0NjU3Njk4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ1JZUFRPX0RFVl9DQ1BfRERcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL2NyeXB0by9jY3AvS2NvbmZpZzoyOmNvbmZpZyBDUllQVE9fREVWX0NDUF9ERFxcbmRyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlNlY3VyZSBQcm9jZXNzb3IgZGV2aWNlIGRyaXZlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMjA6MDk6NDYuOTcwMDg0NDQ0WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0ODQwMTk5MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBDQ1AgS2VybmVsIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBgZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWdgIGZpbGUuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgdG8gYXJvdW5kIGxpbmUgMi4gTXkgZXhwZXJ0aXNlIHRlbGxzIG1lIHRoYXQgYEtjb25maWdgIGZpbGVzIGFyZSB0aGUgYmFja2JvbmUgb2Yga2VybmVsIGNvbmZpZ3VyYXRpb24sIHNvIHRoZSBpbml0aWFsIGxpbmVzIGFyZSBhbG1vc3QgYWx3YXlzIGNydWNpYWwuIFRoZXknbGwgbGlrZWx5IGVzdGFibGlzaCB0aGUgb3ZlcmFsbCBjb250ZXh0IGZvciB0aGUgQ0NQIChDcnlwdG9ncmFwaGljIENvcHJvY2Vzc29yKSBkcml2ZXIg4oCTIGRlZmluaW5nIGl0cyBwdXJwb3NlLCBpdHMgZGVwZW5kZW5jaWVzLCBvciBwZXJoYXBzIHByb3ZpZGluZyBhbiBpbml0aWFsIGRlZmF1bHQgc2V0dGluZy4gSSBhbnRpY2lwYXRlIHRoaXMgd2lsbCBiZSB3aGVyZSB0aGUgYmFzaWMgYnVpbGQgb3B0aW9ucywgcGVyaGFwcyBhIGhlbHAgdGV4dCBhbmQgdGhlIGluaXRpYWwgc2NvcGUsIHdpbGwgYmUgcGxhY2VkLiBJJ20ga2VlbiB0byBzZWUgaWYgdGhpcyBjb25maXJtcyBteSBleHBlcmllbmNlIGluIHRoaXMgc3BhY2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBtb2R1bGUgaXMgYWJvdXQgYmVmb3JlIGxvb2tpbmcgaW50byBvdGhlciBmaWxlcy4gSSBsb29rIGZvcndhcmQgdG8gc2VlaW5nIHdoYXQgaXQgaGFzIHRvIHRlbGwgbWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMDgxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMjA6MDk6NTAuNDU0MTA2OTVaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzA1MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBDUllQVE9fREVWX0NDUF9ERFxcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIlNlY3VyZSBQcm9jZXNzb3IgZGV2aWNlIGRyaXZlclxcXCJcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gQ1BVX1NVUF9BTUQgfHwgQVJNNjRcXG4gICA1OlxcdFxcdGRlZmF1bHQgbVxcbiAgIDY6XFx0XFx0aGVscFxcbiAgIDc6XFx0XFx0ICBQcm92aWRlcyBBTUQgU2VjdXJlIFByb2Nlc3NvciBkZXZpY2UgZHJpdmVyLlxcbiAgIDg6XFx0XFx0ICBJZiB5b3UgY2hvb3NlICdNJyBoZXJlLCB0aGlzIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjY3AuXFxuICAgOTpcXHRcXG4gIDEwOlxcdGNvbmZpZyBDUllQVE9fREVWX1NQX0NDUFxcbiAgMTE6XFx0XFx0Ym9vbCBcXFwiQ3J5cHRvZ3JhcGhpYyBDb3Byb2Nlc3NvciBkZXZpY2VcXFwiXFxuICAxMjpcXHRcXHRkZWZhdWx0IHlcXG4gIDEzOlxcdFxcdGRlcGVuZHMgb24gQ1JZUFRPX0RFVl9DQ1BfREQgXFx1MDAyNlxcdTAwMjYgRE1BREVWSUNFU1xcbiAgMTQ6XFx0XFx0c2VsZWN0IEhXX1JBTkRPTVxcbiAgMTU6XFx0XFx0c2VsZWN0IERNQV9FTkdJTkVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMjA6MDk6NTAuNDU0MTc4NjNaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU0OTYzOTkxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRlY29kaW5nIHRoZSBEZXBlbmRlbmN5IENoYWluKipcblxuUmlnaHQsIHNvIGBDUllQVE9fREVWX0NDUF9ERGAuLi4gdGhhdCBvbmUncyBpbnRlcmVzdGluZy4gVGhlIGltbWVkaWF0ZSBkZXBlbmRlbmN5IGlzIHByZXR0eSBjbGVhcjogaXQgaGluZ2VzIG9uIGVpdGhlciBgQ1BVX1NVUF9BTURgIG9yIGBBUk02NGAuIE1ha2VzIHNlbnNlLCBjb25zaWRlcmluZyB0aGUgbGlrZWx5IGhhcmR3YXJlIHJlcXVpcmVtZW50cyBmb3IgdGhpcyBzcGVjaWZpYyBjcnlwdG8gZGV2aWNlIGRyaXZlciwgYENDUF9ERGAgbGlrZWx5IHJlbGF0ZXMgdG8gQU1EJ3MgUGxhdGZvcm0gU2VjdXJpdHkgUHJvY2Vzc29yIChQU1ApIG9yIGEgc2ltaWxhciBzZWN1cmUgY28tcHJvY2Vzc29yLCBvciBhIHBsYXRmb3JtIHdoaWNoIHJlcXVpcmVzIHRoZSB1bmRlcmx5aW5nIHN1cHBvcnQgZnJvbSBgQVJNNjRgLiBUaGUgY29uZGl0aW9uYWwgbmF0dXJlIGlzIGltcG9ydGFudCB0byBrZWVwIGluIG1pbmQsIG9mIGNvdXJzZS5cblxuTm93LCBiZWNhdXNlIGl0IGRlcGVuZHMgb24gYENQVV9TVVBfQU1EYCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGF0IHRoZSBBTUQgSU9NTVUgaXMgZW5hYmxlZCBvciBjb25maWd1cmVkIGNvcnJlY3RseSwgcmlnaHQ/IExldCdzIHRha2UgYSBsb29rIGF0IGBBTURfSU9NTVVgIGFuZCBzZWUgaG93IGl0IGlzIGNvbmZpZ3VyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNTQwLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMDowOTo1NC4wMDM4MjI0MDVaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NDgxMzIwNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEFNRF9JT01NVVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnLTItIyBBTUQgSU9NTVUgc3VwcG9ydFxcbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWc6Mzpjb25maWcgQU1EX0lPTU1VXFxuZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZy00LVxcdGJvb2wgXFxcIkFNRCBJT01NVSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZy0zMi1cXG5kcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnOjMzOmNvbmZpZyBBTURfSU9NTVVfSU9NTVVGRFxcbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWctMzQtXFx0Ym9vbCBcXFwiRW5hYmxlIElPTU1VRkQgZmVhdHVyZXMgZm9yIEFNRCBJT01NVSAoRVhQRVJJTUVOVEFMKVxcXCJcXG4tLVxcbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWctNDItXFxuZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZzo0Mzpjb25maWcgQU1EX0lPTU1VX0RFQlVHRlNcXG5kcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnLTQ0LVxcdGJvb2wgXFxcIkVuYWJsZSBBTUQgSU9NTVUgaW50ZXJuYWxzIGluIERlYnVnRlNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIwOjA5OjU1LjY1MTk1OTQzNVoiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjE3NzU1NzkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gQU1EIElPTU1VIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIEFNRCBJT01NVSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIE15IGluc3RpbmN0IHRlbGxzIG1lIHRoZSBwbGFjZSB0byBzdGFydCBpcyB0aGUgYGRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWdgIGZpbGUuIEknbSBhc3N1bWluZyB0aGF0J3MgdGhlIGNhbm9uaWNhbCBsb2NhdGlvbiBmb3IgdGhlc2Ugc29ydHMgb2YgZGVmaW5pdGlvbnMuIExldCdzIHN0YXJ0IGFyb3VuZCBsaW5lIDMsIHdoaWNoIGlzIHVzdWFsbHkgd2hlcmUgYSBnb29kIG92ZXJ2aWV3IG9yIGdlbmVyYWwgZGVzY3JpcHRpb24gYmVnaW5zLCBvciBhdCBsZWFzdCB0aGUgdG9wLWxldmVsIG9wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMDEyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMjA6MDk6NTguODY5NzE5OTQ3WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwMzMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCMgQU1EIElPTU1VIHN1cHBvcnRcXG4gICAzOlxcdGNvbmZpZyBBTURfSU9NTVVcXG4gICA0OlxcdFxcdGJvb2wgXFxcIkFNRCBJT01NVSBzdXBwb3J0XFxcIlxcbiAgIDU6XFx0XFx0c2VsZWN0IFNXSU9UTEJcXG4gICA2OlxcdFxcdHNlbGVjdCBQQ0lfTVNJXFxuICAgNzpcXHRcXHRzZWxlY3QgUENJX0FUU1xcbiAgIDg6XFx0XFx0c2VsZWN0IFBDSV9QUklcXG4gICA5OlxcdFxcdHNlbGVjdCBQQ0lfUEFTSURcXG4gIDEwOlxcdFxcdHNlbGVjdCBJUlFfTVNJX0xJQlxcbiAgMTE6XFx0XFx0c2VsZWN0IE1NVV9OT1RJRklFUlxcbiAgMTI6XFx0XFx0c2VsZWN0IElPTU1VX0FQSVxcbiAgMTM6XFx0XFx0c2VsZWN0IElPTU1VX0lPVkFcXG4gIDE0OlxcdFxcdHNlbGVjdCBJT01NVV9TVkFcXG4gIDE1OlxcdFxcdHNlbGVjdCBJT01NVV9JT1BGXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIwOjA5OjU4Ljg2OTc5MTQ0N1oiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDI2MDI3NzY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqUXVpY2sgRGVwZW5kZW5jeSBDaGVjayoqXG5cblJpZ2h0LCBzbyAqQU1EX0lPTU1VKiBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIOKAkyBubyBnbGFyaW5nLCBjb21wbGV4IGRlcGVuZGVuY2llcyBqdW1waW5nIG91dCBhdCBtZSByaWdodCBhd2F5LiBBbHdheXMgZ29vZCB0byBzZWUgYSBtb2R1bGUgdGhhdCBrZWVwcyB0aGluZ3MgY2xlYW4uXG5cbk5vdywgbGV0J3Mgc3dpdGNoIGdlYXJzIGFuZCBkaWcgaW50byAqS1ZNX0lOVEVMKi4gSSBrbm93IHRoYXQgb25lJ3MgZ290IGEgZmV3IG1vcmUgbGF5ZXJzIGFuZCBsaWtlbHkgc29tZSBpbnRlcmFjdGlvbnMgdGhhdCBuZWVkIGEgY2xvc2VyIGxvb2suIExldCdzIHN0YXJ0IG1lbnRhbGx5IHRyYWNpbmcgdGhvc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMzgxLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMDoxMDowMS44OTU4MjIwMjFaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTY0NTMxOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTV9JTlRFTFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZz04Mz1jb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctOTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6OTY6Y29uZmlnIEtWTV9JTlRFTFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk3LVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTA2LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEwNzpjb25maWcgS1ZNX0lOVEVMX1BST1ZFX1ZFXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTA4LSAgICAgICAgYm9vbCBcXFwiQ2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTM1LVxcdGJvb2wgXFxcIkludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIwOjEwOjAzLjU1MjI4MTQ4MVoiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTQxNTI0Nzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSByZWFkaW5nIGFuZCB0aGlua2luZyBhYm91dCB0aGUgS2NvbmZpZyBmaWxlOlxuXG4qKk5hdmlnYXRpbmcgS2NvbmZpZyBmb3IgS1ZNIG9uIHg4NioqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AgZmlsZSBhZ2Fpbi4gTGV0J3Mgc2VlLi4uIEknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiB3aGF0J3MgZ29pbmcgb24gYXJvdW5kIGxpbmUgOTYuIFdoYXQncyBkZWZpbmVkIHRoZXJlLCBhbmQgaG93IGRvZXMgaXQgcmVsYXRlIHRvIHRoZSBicm9hZGVyIEtWTSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSB4ODYgYXJjaGl0ZWN0dXJlPyBJIGtub3cgdGhpcyBhcmVhIGhvbGRzIGtleSBkZWZpbml0aW9ucywgb2Z0ZW4gcmVsYXRlZCB0byBzcGVjaWZpYyBoYXJkd2FyZSBmZWF0dXJlcyBvciBvcHRpbWl6YXRpb24gcGF0aHMgZm9yIEtWTS4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IGxpbmUgOTYgcHJvYmFibHkgZGVmaW5lcyBhIHNwZWNpZmljIEtWTSBmZWF0dXJlIG9yIGludHJvZHVjZXMgYSBjb25kaXRpb25hbCBibG9jayBmb3IgYSBoYXJkd2FyZSBkZXBlbmRlbmN5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHRvIG1ha2UgYW4gYXNzZXNzbWVudCBvciBtb2RpZmljYXRpb24uIEknbSBrZWVuIHRvIGZpbmQgb3V0IGFib3V0IHdoZXRoZXIgaXQncyByZWxhdGVkIHRvIHNvbWUgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyODM0LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMjA6MTA6MDcuMDkzODExMTQ2WiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5MjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDkwLFxuICBcIkxpbmVDb3VudFwiOiAxNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDkwOlxcdFxcdCAgcHJvdGVjdGVkIFZNcyBhcmUgcHVyZWx5IGEgZGV2ZWxvcG1lbnQgYW5kIHRlc3RpbmcgdmVoaWNsZSBmb3JcXG4gIDkxOlxcdFxcdCAgS1ZNX0NSRUFURV9HVUVTVF9NRU1GRC4gIEF0dGVtcHRpbmcgdG8gcnVuIGEgXFxcInJlYWxcXFwiIFZNIHdvcmtsb2FkIGFzIGFcXG4gIDkyOlxcdFxcdCAgc29mdHdhcmUtcHJvdGVjdGVkIFZNIHdpbGwgZmFpbCBtaXNlcmFibHkuXFxuICA5MzpcXHRcXG4gIDk0OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgXFxcIk5cXFwiLlxcbiAgOTU6XFx0XFxuICA5NjpcXHRjb25maWcgS1ZNX0lOVEVMXFxuICA5NzpcXHRcXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBJbnRlbCAoYW5kIGNvbXBhdGlibGUpIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4gIDk4OlxcdFxcdGRlcGVuZHMgb24gS1ZNIFxcdTAwMjZcXHUwMDI2IElBMzJfRkVBVF9DVExcXG4gIDk5OlxcdFxcdHNlbGVjdCBYODZfRlJFRCBpZiBYODZfNjRcXG4gMTAwOlxcdFxcdGhlbHBcXG4gMTAxOlxcdFxcdCAgUHJvdmlkZXMgc3VwcG9ydCBmb3IgS1ZNIG9uIHByb2Nlc3NvcnMgZXF1aXBwZWQgd2l0aCBJbnRlbCdzIFZUXFxuIDEwMjpcXHRcXHQgIGV4dGVuc2lvbnMsIGEuay5hLiBWaXJ0dWFsIE1hY2hpbmUgRXh0ZW5zaW9ucyAoVk1YKS5cXG4gMTAzOlxcdFxcbiAxMDQ6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMjA6MTA6MDcuMDkzOTAyMDI2WiIsIlNlcSI6NDksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxODg4ODQ4NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgS1ZNX0lOVEVMIERlcGVuZGVuY2llcyoqXG5cblJpZ2h0LCBzbyBgS1ZNX0lOVEVMYCBpcyBjbGVhcmx5IGJ1aWx0IG9uIGBLVk1gIOKAkyB0aGF0J3MgZXhwZWN0ZWQuIEJ1dCB0aGUgbWVudGlvbiBvZiBgSUEzMl9GRUFUX0NUTGAuLi4gdGhhdCdzIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IGNvbm5lY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyBpdCdzIHJlbGF0ZWQgdG8gaGFuZGxpbmcgc3BlY2lmaWMgSW50ZWwgQ1BVIGZlYXR1cmVzIHdpdGhpbiB0aGUgS1ZNIGVudmlyb25tZW50LiBQcm9iYWJseSBzb21ldGhpbmcgdG8gZG8gd2l0aCBlbmFibGluZyBvciBjb25maWd1cmluZyB2aXJ0dWFsaXphdGlvbi1zcGVjaWZpYyBjYXBhYmlsaXRpZXMuIEkgc2hvdWxkIHN0YXJ0IGJ5IGRpdmluZyBpbnRvIHRoZSBkZWZpbml0aW9ucyBhbmQgdXNhZ2Ugb2YgYElBMzJfRkVBVF9DVExgLiBMZXQncyBzZWUgd2hhdCB0aGF0IHJlZ2lzdGVyIG9yIGNvbnRyb2wgc3RydWN0dXJlIGFjdHVhbGx5IGRvZXMgYW5kIGhvdyBgS1ZNX0lOVEVMYCBsZXZlcmFnZXMgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMzMxLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMDoxMDoxMC4yODI3ODk2MzhaIiwiU2VxIjo1MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODgzOTc5NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElBMzJfRkVBVF9DVExcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvS2NvbmZpZy5jcHU9Mjg1PWNvbmZpZyBYODZfREVCVUdDVExNU1JcXG4tLVxcbmFyY2gveDg2L0tjb25maWcuY3B1LTI4OC1cXG5hcmNoL3g4Ni9LY29uZmlnLmNwdToyODk6Y29uZmlnIElBMzJfRkVBVF9DVExcXG5hcmNoL3g4Ni9LY29uZmlnLmNwdS0yOTAtXFx0ZGVmX2Jvb2wgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMDoxMDoxMS45NzEyMTU0NzdaIiwiU2VxIjo1MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYwOTgwNzAyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gYElBMzJfRkVBVF9DVExgIGlzIGRlZmluZWQgYXMgJ3knLiBUaGlzIG1lYW5zIHdlIGhhdmUgYSBzZXQgb2YgY29uZmlndXJhdGlvbnMgZW5hYmxlZDogYEtWTWAsIGBLVk1fSU5URUxgLCBgS1ZNX0FNRGAsIGBLVk1fU01NYCwgYEtWTV9BTURfU0VWYCwgYEtWTV9JTlRFTF9URFhgLCBgSU5URUxfVERYX0hPU1RgLCBgQ1JZUFRPX0RFVl9TUF9QU1BgLCBgQ1JZUFRPX0RFVl9DQ1BfRERgLCBhbmQgYEFNRF9JT01NVWAuIFRoYXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkLlxuXG5Ob3csIGxldCdzIGRpZyBhIGxpdHRsZSBkZWVwZXIuIEknbSBmb2N1c2luZyBvbiBgS1ZNX0FNRF9TRVZgIGFuZCBpdHMgZGVwZW5kZW5jaWVzLiBJdCByZWxpZXMgb24gYENSWVBUT19ERVZfU1BfUFNQYCBhbmQgKmFsc28qIHRoaXMgcmF0aGVyIGludGVyZXN0aW5nIGNvbmRpdGlvbmFsOiBgIShLVk1fQU1EPXkgXHUwMDI2XHUwMDI2IENSWVBUT19ERVZfQ0NQX0REPW0pYC4gVGhpcyBpcyBrZXkuIFRoZSBpbXBsaWNhdGlvbiBpcywgaWYgYEtWTV9BTURgIGlzIGNvbXBpbGVkIGluIChgeWApLCB0aGVuIGBDUllQVE9fREVWX0NDUF9ERGAgKm11c3QqIGJlIHNldCB0byAneScuIEl0J3MgZWZmZWN0aXZlbHkgZm9yY2luZyB0aGUgaW5jbHVzaW9uIG9mIHRoZSBtb2R1bGUuXG5cblRoZXJlZm9yZSwgYENSWVBUT19ERVZfQ0NQX0REYCBpcyBhbiBhYnNvbHV0ZSByZXF1aXJlbWVudCwgZ2l2ZW4gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbi5cblxuSSB0aGluayBJJ2xsIG5vdyBjaGVjayB0aGUgc3RhdHVzIG9mIGBYODZfWDJBUElDYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM2NTYsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMjA6MTA6MTYuNTgxMDI1ODI0WiIsIlNlcSI6NTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjU1ODE5MTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBYODZfWDJBUElDXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L0tjb25maWc9NDM2PWNvbmZpZyBTTVBcXG4tLVxcbmFyY2gveDg2L0tjb25maWctNDU4LVxcbmFyY2gveDg2L0tjb25maWc6NDU5OmNvbmZpZyBYODZfWDJBUElDXFxuYXJjaC94ODYvS2NvbmZpZy00NjAtXFx0Ym9vbCBcXFwieDJBUElDIGludGVycnVwdCBjb250cm9sbGVyIGFyY2hpdGVjdHVyZSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMDoxMDoxOC4yMzY4NTQ5MzNaIiwiU2VxIjo1MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA0NDQ5NTAxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gcmVhZGluZyBhbmQgcHJvY2Vzc2luZyB0aGUgcHJvdmlkZWQgdGV4dDpcblxuKipEaXZpbmcgaW50byB0aGUgeDg2IEFyY2hpdGVjdHVyZSBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIGRpZyBpbnRvIHRoZSBjb25maWd1cmF0aW9uIHNwZWNpZmljcyBmb3IgeDg2LiBMZXQncyBzdGFydCB3aXRoIGBhcmNoL3g4Ni9LY29uZmlnYCwgcmlnaHQgYXJvdW5kIGxpbmUgNDU5LiBUaGF0IGFyZWEgdXN1YWxseSBob2xkcyBjcml0aWNhbCBjb25maWd1cmF0aW9ucywgYW5kIEkgbmVlZCB0byBzZWUgd2hhdCdzIGJlaW5nIGRlZmluZWQgdGhlcmUuIEknbSBleHBlY3RpbmcgdG8gZmluZCBlaXRoZXIgYSBuZXcgZmVhdHVyZSBnYXRlLCBkZXBlbmRlbmN5IGRldGFpbHMsIG9yIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIHNldC11cC4gSSdsbCBuZWVkIHRvIGtub3cgd2hpY2ggZmVhdHVyZSBnYXRlIHRoaXMgaXMgY29ubmVjdGVkIHRvLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDI4NywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIwOjEwOjIxLjI4MTM1MjI4OFoiLCJTZXEiOjU0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzc4ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NTUsXG4gIFwiTGluZUNvdW50XCI6IDE1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NTU6XFx0XFx0ICBcXHUwMDNjaHR0cDovL3d3dy50bGRwLm9yZy9kb2NzLmh0bWwjaG93dG9cXHUwMDNlLlxcbiA0NTY6XFx0XFxuIDQ1NzpcXHRcXHQgIElmIHlvdSBkb24ndCBrbm93IHdoYXQgdG8gZG8gaGVyZSwgc2F5IE4uXFxuIDQ1ODpcXHRcXG4gNDU5OlxcdGNvbmZpZyBYODZfWDJBUElDXFxuIDQ2MDpcXHRcXHRib29sIFxcXCJ4MkFQSUMgaW50ZXJydXB0IGNvbnRyb2xsZXIgYXJjaGl0ZWN0dXJlIHN1cHBvcnRcXFwiXFxuIDQ2MTpcXHRcXHRkZXBlbmRzIG9uIFg4Nl9MT0NBTF9BUElDIFxcdTAwMjZcXHUwMDI2IFg4Nl82NCBcXHUwMDI2XFx1MDAyNiAoSVJRX1JFTUFQIHx8IEhZUEVSVklTT1JfR1VFU1QpXFxuIDQ2MjpcXHRcXHRkZWZhdWx0IHlcXG4gNDYzOlxcdFxcdGhlbHBcXG4gNDY0OlxcdFxcdCAgeDJBUElDIGlzIGFuIGludGVycnVwdCBjb250cm9sbGVyIGFyY2hpdGVjdHVyZSwgYSBjb21wb25lbnQgb2Ygd2hpY2hcXG4gNDY1OlxcdFxcdCAgKHRoZSBsb2NhbCBBUElDKSBpcyBwcmVzZW50IGluIHRoZSBDUFUuIEl0IGFsbG93cyBmYXN0ZXIgYWNjZXNzIHRvXFxuIDQ2NjpcXHRcXHQgIHRoZSBsb2NhbCBBUElDIGFuZCBzdXBwb3J0cyBhIGxhcmdlciBudW1iZXIgb2YgQ1BVcyBpbiB0aGUgc3lzdGVtXFxuIDQ2NzpcXHRcXHQgIHRoYW4gdGhlIHByZWRlY2Vzc29ycy5cXG4gNDY4OlxcdFxcbiA0Njk6XFx0XFx0ICB4MkFQSUMgd2FzIGludHJvZHVjZWQgaW4gSW50ZWwgQ1BVcyBhcm91bmQgMjAwOCBhbmQgaW4gQU1EIEVQWUMgQ1BVc1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMDoxMDoyMS4yODE1MzE4NjhaIiwiU2VxIjo1NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDgzOTc5MTIzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBYODZfWDJBUElDIE11c2luZ3MqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgWDg2X1gyQVBJQ2AuIEl0IGxvb2tzIGxpa2UgdGhpcyBmZWF0dXJlIGlzIGNvbnRpbmdlbnQgb24gYSBmZXcga2V5IHRoaW5nczogd2UgbmVlZCBgWDg2X0xPQ0FMX0FQSUNgIGVuYWJsZWQsIHdlJ3JlIGRlZmluaXRlbHkgcnVubmluZyBvbiBhbiBgWDg2XzY0YCBhcmNoaXRlY3R1cmUsIGFuZCBlaXRoZXIgdGhlIHN5c3RlbSBoYXMgYElSUV9SRU1BUGAgZW5hYmxlZCBvciBpdCdzIHJ1bm5pbmcgYXMgYSBgSFlQRVJWSVNPUl9HVUVTVGAuIFRoYXQgbWFrZXMgc2Vuc2U7IHRoZSB4MkFQSUMgaXMgYSBtb3JlIG1vZGVybiBpbnRlcnJ1cHQgY29udHJvbGxlciwgYW5kIHRoZXNlIGRlcGVuZGVuY2llcyBlbnN1cmUgYSBzdWl0YWJsZSBoYXJkd2FyZSBhbmQgc29mdHdhcmUgZW52aXJvbm1lbnQgZm9yIGl0IHRvIGZ1bmN0aW9uIGNvcnJlY3RseS4gVGhlIGZhY3QgdGhhdCBgWDg2X1gyQVBJQ2AgaXMgc2V0IHRvIGBkZWZhdWx0IHlgIGlzIGFsc28gaW1wb3J0YW50LCBpdCBtZWFucyB0aGF0IGJ5IGRlZmF1bHQgaXQnbGwgYmUgZW5hYmxlZCBpZiB0aG9zZSBwcmVyZXF1aXNpdGVzIGFyZSBtZXQsIHdoaWNoIGlzIGEgc2Vuc2libGUgYXBwcm9hY2guXG5cbk5vdywgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgaG93IHRoaXMgaW50ZXJhY3RzIHdpdGggYENPTlRJR19BTExPQ2AsIHNpbmNlIGNvbnRpZ3VvdXMgbWVtb3J5IGFsbG9jYXRpb24gY2FuIG9mdGVuIHBsYXkgbmljZWx5IHdpdGggaW50ZXJydXB0IGNvbnRyb2xsZXJzLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhhdCByZWxhdGlvbnNoaXAgYSBiaXQgZnVydGhlciB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBwb3RlbnRpYWwgY29uZmxpY3RzIG9yIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ3NTYsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIwOjEwOjI2LjEyMTMyNzQ5WiIsIlNlcSI6NTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzU5Mjk2MTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDT05USUdfQUxMT0NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz03MDk9Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFX1ZBUklBQkxFXFxuLS1cXG5tbS9LY29uZmlnLTcxOC1cXG5tbS9LY29uZmlnOjcxOTpjb25maWcgQ09OVElHX0FMTE9DXFxubW0vS2NvbmZpZy03MjAtXFx0ZGVmX2Jvb2wgKE1FTU9SWV9JU09MQVRJT04gXFx1MDAyNlxcdTAwMjYgQ09NUEFDVElPTikgfHwgQ01BXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIwOjEwOjI3Ljg4MDYzMDY4N1oiLCJTZXEiOjU3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzUzMzc2NTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgTWVtb3J5IEFsbG9jYXRpb24gU3RyYXRlZ2llcyoqXG5cblJpZ2h0LCBsZXQncyBicmVhayBkb3duIHRoaXMgYENPTlRJR19BTExPQ2AgZGVmaW5pdGlvbi4gSXQgbG9va3MgbGlrZSBpdCBib2lscyBkb3duIHRvIGVpdGhlciB0aGUgY29tYmluYXRpb24gb2YgYE1FTU9SWV9JU09MQVRJT05gIGFuZCBgQ09NUEFDVElPTmAsIGlmIHRoZXkgYXJlIGJvdGggZW5hYmxlZCwgb3IsIGFzIGEgc3RhbmRhbG9uZSBvcHRpb24sIGBDTUFgLiBUaGF0J3MgaW50ZXJlc3Rpbmc7IGl0IGZlZWxzIGxpa2UgdGhleSBhcmUgc3VnZ2VzdGluZyB0aGlzIGZlYXR1cmUgaXMgZGVzaWduZWQgdG8gYWRkcmVzcyBhIG5lZWQsIHByZXN1bWFibHkgZm9yIHBoeXNpY2FsbHkgY29udGlndW91cyBtZW1vcnkuXG5cbkdpdmVuIHRoaXMsIEkgc2hvdWxkIGZvY3VzIG9uIGBDTUFgLCB0aGUgQ29tcGFydG1lbnRhbGl6ZWQgTWVtb3J5IEFsbG9jYXRvci4gSSBzaG91bGQgcmV2aWV3IGl0cyBzcGVjaWZpYyBjaGFyYWN0ZXJpc3RpY3MgdG8gZnVsbHkgdW5kZXJzdGFuZCBob3cgdGhpcyBvcHRpb24gcGxheXMgaW50byBgQ09OVElHX0FMTE9DYCwgc2luY2UgSSBhbHJlYWR5IGhhdmUgYSBmaXJtIGdyYXNwIG9uIGhvdyBNRU1PUllfSVNPTEFUSU9OIGFuZCBDT01QQUNUSU9OIHdvcmssIGFuZCB0aGUgcm9sZSB0aGV5IHBsYXkuIElzIGl0IHRoZSBwcmltYXJ5IG1ldGhvZCB0byBndWFyYW50ZWUgdGhlIGFsbG9jYXRpb24sIG9yIGlzIGl0IGEgbGFzdCByZXNvcnQgd2hlbiB0aGUgb3RoZXIgb3B0aW9ucyBhcmVuJ3QgYXZhaWxhYmxlPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZSBvdGhlciBtZWNoYW5pc21zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTE2NywiT3V0cHV0VG9rZW5zIjoxNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIwOjEwOjMxLjIzNDAwOTQ2NloiLCJTZXEiOjU4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY3MTYzNzg1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ01BXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9kbWEvS2NvbmZpZz0xNzM9Y29uZmlnIERNQV9OVU1BX0NNQVxcbi0tXFxua2VybmVsL2RtYS9LY29uZmlnLTE4NS1cXG5rZXJuZWwvZG1hL0tjb25maWc6MTg2OmNvbmZpZyBDTUFfU0laRV9QRVJOVU1BXFxua2VybmVsL2RtYS9LY29uZmlnLTE4Ny1cXHRib29sIFxcXCJEZWZhdWx0IENNQSBhcmVhIHBlciBOVU1BIG5vZGVcXFwiXFxuLS1cXG5rZXJuZWwvZG1hL0tjb25maWc9MTk2PWNvbW1lbnQgXFxcIkRlZmF1bHQgY29udGlndW91cyBtZW1vcnkgYXJlYSBzaXplOlxcXCJcXG5rZXJuZWwvZG1hL0tjb25maWctMTk3LVxcbmtlcm5lbC9kbWEvS2NvbmZpZzoxOTg6Y29uZmlnIENNQV9TSVpFX01CWVRFU1xcbmtlcm5lbC9kbWEvS2NvbmZpZy0xOTktXFx0aW50IFxcXCJTaXplIGluIE1lZ2EgQnl0ZXNcXFwiXFxuLS1cXG5rZXJuZWwvZG1hL0tjb25maWctMjA4LVxcbmtlcm5lbC9kbWEvS2NvbmZpZzoyMDk6Y29uZmlnIENNQV9TSVpFX1BFUkNFTlRBR0VcXG5rZXJuZWwvZG1hL0tjb25maWctMjEwLVxcdGludCBcXFwiUGVyY2VudGFnZSBvZiB0b3RhbCBtZW1vcnlcXFwiXFxuLS1cXG5rZXJuZWwvZG1hL0tjb25maWc9MjIwPWNob2ljZVxcbi0tXFxua2VybmVsL2RtYS9LY29uZmlnLTIyMy1cXG5rZXJuZWwvZG1hL0tjb25maWc6MjI0OmNvbmZpZyBDTUFfU0laRV9TRUxfTUJZVEVTXFxua2VybmVsL2RtYS9LY29uZmlnLTIyNS1cXHRib29sIFxcXCJVc2UgbWVnYSBieXRlcyB2YWx1ZSBvbmx5XFxcIlxcbmtlcm5lbC9kbWEvS2NvbmZpZy0yMjYtXFxua2VybmVsL2RtYS9LY29uZmlnOjIyNzpjb25maWcgQ01BX1NJWkVfU0VMX1BFUkNFTlRBR0VcXG5rZXJuZWwvZG1hL0tjb25maWctMjI4LVxcdGJvb2wgXFxcIlVzZSBwZXJjZW50YWdlIHZhbHVlIG9ubHlcXFwiXFxua2VybmVsL2RtYS9LY29uZmlnLTIyOS1cXG5rZXJuZWwvZG1hL0tjb25maWc6MjMwOmNvbmZpZyBDTUFfU0laRV9TRUxfTUlOXFxua2VybmVsL2RtYS9LY29uZmlnLTIzMS1cXHRib29sIFxcXCJVc2UgbG93ZXIgdmFsdWUgKG1pbmltdW0pXFxcIlxcbmtlcm5lbC9kbWEvS2NvbmZpZy0yMzItXFxua2VybmVsL2RtYS9LY29uZmlnOjIzMzpjb25maWcgQ01BX1NJWkVfU0VMX01BWFxcbmtlcm5lbC9kbWEvS2NvbmZpZy0yMzQtXFx0Ym9vbCBcXFwiVXNlIGhpZ2hlciB2YWx1ZSAobWF4aW11bSlcXFwiXFxuLS1cXG5rZXJuZWwvZG1hL0tjb25maWc9MjM2PWVuZGNob2ljZVxcbmtlcm5lbC9kbWEvS2NvbmZpZy0yMzctXFxua2VybmVsL2RtYS9LY29uZmlnOjIzODpjb25maWcgQ01BX0FMSUdOTUVOVFxcbmtlcm5lbC9kbWEvS2NvbmZpZy0yMzktXFx0aW50IFxcXCJNYXhpbXVtIFBBR0VfU0laRSBvcmRlciBvZiBhbGlnbm1lbnQgZm9yIGNvbnRpZ3VvdXMgYnVmZmVyc1xcXCJcXG4tLVxcbm1tL0tjb25maWc9MTA2ND1jb25maWcgSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUFcXG4tLVxcbm1tL0tjb25maWctMTA2Ni1cXG5tbS9LY29uZmlnOjEwNjc6Y29uZmlnIENNQVxcbm1tL0tjb25maWctMTA2OC1cXHRib29sIFxcXCJDb250aWd1b3VzIE1lbW9yeSBBbGxvY2F0b3JcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTEwODEtXFxubW0vS2NvbmZpZzoxMDgyOmNvbmZpZyBDTUFfREVCVUdGU1xcbm1tL0tjb25maWctMTA4My1cXHRib29sIFxcXCJDTUEgZGVidWdmcyBpbnRlcmZhY2VcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTEwODctXFxubW0vS2NvbmZpZzoxMDg4OmNvbmZpZyBDTUFfU1lTRlNcXG5tbS9LY29uZmlnLTEwODktXFx0Ym9vbCBcXFwiQ01BIGluZm9ybWF0aW9uIHRocm91Z2ggc3lzZnMgaW50ZXJmYWNlXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xMDk0LVxcbm1tL0tjb25maWc6MTA5NTpjb25maWcgQ01BX0FSRUFTXFxubW0vS2NvbmZpZy0xMDk2LVxcdGludCBcXFwiTWF4aW11bSBjb3VudCBvZiB0aGUgQ01BIGFyZWFzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMDoxMDozMi45MDU2NTI4ODZaIiwiU2VxIjo1OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYwOTA0MzY0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHN1bW1hcnk6XG5cbioqQ29uZmlnIERlZXAgRGl2ZSAtIENNQSBcdTAwMjYgWDg2X01DRSoqXG5cbkFscmlnaHQsIHNvIHRoZSBhcmNoaXRlY3R1cmUgb2YgdGhpcyBzeXN0ZW0gdXNlcyBgQ01BYCBhcyBhIGtleSBjb25maWd1cmF0aW9uIGVsZW1lbnQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBDTUFgIGlzIHNwZWNpZmljYWxseSBhIGNvbmZpZ3VyYXRpb24gb3Igc2V0IG9mIHBhcmFtZXRlcnMgdGhhdCBpcyB2aXRhbCB0byB0aGUgc3lzdGVtJ3MgcGVyZm9ybWFuY2UgYW5kL29yIHN0YWJpbGl0eS4gSXQncyBhIGtleSBwaWVjZSB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIGlzIGN1cnJlbnRseSBjb25maWd1cmVkLlxuXG5Ob3csIHdoZXJlIHRvIGdvIG5leHQ/IEFoLCB5ZXMuIE15IGF0dGVudGlvbiBpcyBpbW1lZGlhdGVseSBkcmF3biB0byB0aGUgYFg4Nl9NQ0VgIGVsZW1lbnQuIEdpdmVuIG15IGV4cGVydGlzZSwgSSBhbSBhc3N1bWluZyB0aGlzIGxpa2VseSByZWxhdGVzIHRvIE1hY2hpbmUgQ2hlY2sgRXhjZXB0aW9ucyBvbiB4ODYgcHJvY2Vzc29ycy4gVGhpcyBtZWFucyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGBYODZfTUNFYCBjb25maWd1cmF0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBgQ01BYCBjb25maWcuIFRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgdHdvIG1heSB3ZWxsIHJldmVhbCBpbnNpZ2h0cyBpbnRvIG1lbW9yeSBhbGxvY2F0aW9uLCBlcnJvciBoYW5kbGluZywgYW5kIG92ZXJhbGwgc3lzdGVtIHJvYnVzdG5lc3MuIFBlcmhhcHMgYENNQWAgYWZmZWN0cyBob3cgYFg4Nl9NQ0VgIHJlcG9ydHMgZXJyb3JzLCBvciBtYXliZSBgQ01BYCBkaWN0YXRlcyBob3cgdGhlIHN5c3RlbSBjYW4gaGFuZGxlIGNlcnRhaW4gdHlwZXMgb2YgbWFjaGluZSBjaGVjayBldmVudHMuIEVpdGhlciB3YXksIHRoaXMgd2lsbCBiZSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhpcyBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MjAzLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMjA6MTA6MzYuNTE0Njk5NDJaIiwiU2VxIjo2MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MzQwMjAwNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFg4Nl9NQ0VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvS2NvbmZpZz0xMTE3PWNvbmZpZyBYODZfUkVST1VURV9GT1JfQlJPS0VOX0JPT1RfSVJRU1xcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy0xMTM5LVxcbmFyY2gveDg2L0tjb25maWc6MTE0MDpjb25maWcgWDg2X01DRVxcbmFyY2gveDg2L0tjb25maWctMTE0MS1cXHRib29sIFxcXCJNYWNoaW5lIENoZWNrIC8gb3ZlcmhlYXRpbmcgcmVwb3J0aW5nXFxcIlxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy0xMTQ5LVxcbmFyY2gveDg2L0tjb25maWc6MTE1MDpjb25maWcgWDg2X01DRUxPR19MRUdBQ1lcXG5hcmNoL3g4Ni9LY29uZmlnLTExNTEtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgZGVwcmVjYXRlZCAvZGV2L21jZWxvZyBjaGFyYWN0ZXIgZGV2aWNlXFxcIlxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy0xMTU3LVxcbmFyY2gveDg2L0tjb25maWc6MTE1ODpjb25maWcgWDg2X01DRV9JTlRFTFxcbmFyY2gveDg2L0tjb25maWctMTE1OS1cXHRkZWZfYm9vbCB5XFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnLTExNjUtXFxuYXJjaC94ODYvS2NvbmZpZzoxMTY2OmNvbmZpZyBYODZfTUNFX0FNRFxcbmFyY2gveDg2L0tjb25maWctMTE2Ny1cXHRkZWZfYm9vbCB5XFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnPTExNzQ9Y29uZmlnIFg4Nl9BTkNJRU5UX01DRVxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy0xMTgxLVxcbmFyY2gveDg2L0tjb25maWc6MTE4Mjpjb25maWcgWDg2X01DRV9USFJFU0hPTERcXG5hcmNoL3g4Ni9LY29uZmlnLTExODMtXFx0ZGVwZW5kcyBvbiBYODZfTUNFX0FNRCB8fCBYODZfTUNFX0lOVEVMXFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnLTExODUtXFxuYXJjaC94ODYvS2NvbmZpZzoxMTg2OmNvbmZpZyBYODZfTUNFX0lOSkVDVFxcbmFyY2gveDg2L0tjb25maWctMTE4Ny1cXHRkZXBlbmRzIG9uIFg4Nl9NQ0UgXFx1MDAyNlxcdTAwMjYgWDg2X0xPQ0FMX0FQSUMgXFx1MDAyNlxcdTAwMjYgREVCVUdfRlNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMjA6MTA6MzguMTQ4NzI3MDhaIiwiU2VxIjo2MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM2NjYwOTk5NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS1ZNIHg4NiBPcGVyYXRpb24gQW5hbHlzaXMgZm9yIEVtdWxhdGlvbiBhbmQgSW5pdGlhbGl6YXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJ20gY29uZmlybWluZyB0aGF0IGBYODZfTUNFYCBpcyBhIGNvbmZpZy4gVGhlbiBJIHNlZSB0aGUgcmVsZXZhbnQgS1ZNIGNvbmZpZ3VyYXRpb25zIHRoYXQgd2lsbCBiZSBlbmFibGVkOiBgS1ZNYCwgYEtWTV9JTlRFTGAsIGBLVk1fQU1EYCwgYEtWTV9TTU1gLCBgS1ZNX0FNRF9TRVZgLCBgS1ZNX0lOVEVMX1REWGAsIGBJTlRFTF9URFhfSE9TVGAsIGBDUllQVE9fREVWX1NQX1BTUGAsIGBDUllQVE9fREVWX0NDUF9ERGAsIGBBTURfSU9NTVVgLCBgWDg2X1gyQVBJQ2AsIGBDTUFgLCBhbmQgYFg4Nl9NQ0VgLiBUaGVzZSBzZWVtIHN0YW5kYXJkLlxuXG5Ob3csIEknbSBmb2N1c2luZyBvbiBrZXkgc3ltYm9scyByZWxhdGVkIHRvIGVtdWxhdGlvbiByZXF1aXJlbWVudHMgYW5kIHZDUFUgaW5pdGlhbGl6YXRpb246IGBlbXVsYXRvcl9sZWF2ZV9zbW1gLCBgdm14X3VuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWRgLCBgdGR4X3ZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb25gLCBhbmQgYHNldl92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uYC4gVGhlc2UgZnVuY3Rpb25zIGFyZSBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyBLVk0gaGFuZGxlcyBzaXR1YXRpb25zIGxpa2UgU01NIGV4aXRzIGFuZCBndWVzdCBzdGF0ZSBpc3N1ZXMuXG5cbkknbSBkb3VibGUtY2hlY2tpbmcgdGhlc2UgYXJlIG5vbi1zdGF0aWMgZnVuY3Rpb25zLCBhbmQgdGh1cyBleHBvc2VkLiBJIGNvbmZpcm1lZCB0aGV5IGFyZSBpbmRlZWQgZXhwb3NlZC4gVGhlIGZvY3VzIGlzIHRvIGFkZHJlc3MgdGhlIG5ldyBLVk0geDg2IG9wZXJhdGlvbiBgdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZGAgYW5kIHJlbmFtZWQgdkNQVSBmdW5jdGlvbiBgdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbmAsIHRoYXQgdGhpcyBjaGFuZ2UgbW9kaWZpZXMgdGhlIEtWTSdzIGJlaGF2aW9yLiBTcGVjaWZpY2FsbHksIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gaW52b2x2ZSBoYW5kbGluZyBpbnZhbGlkIGd1ZXN0IHN0YXRlcyBhbmQgZW11bGF0aW9uIGZhaWx1cmVzLCB3aGljaCBpcyBzaWduaWZpY2FudCwgZXNwZWNpYWxseSB3aGVuIHJldHVybmluZyBmcm9tIFN5c3RlbSBNYW5hZ2VtZW50IE1vZGUuIFRoaXMgY2hhbmdlIGlzIGZ1bmN0aW9uYWwgYW5kIHNob3VsZCBiZSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlxuXG5JIHZlcmlmaWVkIHRoZSBmdW5jdGlvbiBgZW11bGF0b3JfbGVhdmVfc21tYCBpcyBub24tc3RhdGljIGluIGBhcmNoL3g4Ni9rdm0vc21tLmNgIGFuZCBpcyBleHBvcnRlZCBpbiBgYXJjaC94ODYva3ZtL3NtbS5oYC4gSSBjaGVja2VkIGFuZCBjb25maXJtZWQgdGhhdCB0aGUgZnVuY3Rpb25zIGB2bXhfdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZGAsIGB0ZHhfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbmAsIGFuZCBgc2V2X3ZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb25gIGFyZSBhbHNvIG5vbi1zdGF0aWMuIEVhY2ggb2YgdGhlc2UgY2hlY2tzIHByb3ZpZGVzIHRoZSByZXF1aXJlZCBjb250ZXh0IGZvciB0aGUgY2hhbmdlLCBhbmQgY29uZmlybSB0aGVzZSBub24tc3RhdGljIGZ1bmN0aW9ucyBhcmUgZXhwb3J0ZWQgaW4gdGhlaXIgcmVzcGVjdGl2ZSBmaWxlcy4gRXZlcnl0aGluZyBjaGVja3Mgb3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjk4MywiT3V0cHV0VG9rZW5zIjoyODIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTk4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIwOjEwOjUxLjgxNDgzMTE4MVoiLCJTZXEiOjYyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyODcxMjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9JTlRFTFwiLFxuICAgIFwiS1ZNX0FNRFwiLFxuICAgIFwiS1ZNX1NNTVwiLFxuICAgIFwiS1ZNX0FNRF9TRVZcIixcbiAgICBcIktWTV9JTlRFTF9URFhcIixcbiAgICBcIklOVEVMX1REWF9IT1NUXCIsXG4gICAgXCJDUllQVE9fREVWX1NQX1BTUFwiLFxuICAgIFwiQ1JZUFRPX0RFVl9DQ1BfRERcIixcbiAgICBcIkFNRF9JT01NVVwiLFxuICAgIFwiWDg2X1gyQVBJQ1wiLFxuICAgIFwiQ01BXCIsXG4gICAgXCJYODZfTUNFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZW11bGF0b3JfbGVhdmVfc21tXCIsXG4gICAgXCJ2bXhfdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZFwiLFxuICAgIFwidGR4X3ZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb25cIixcbiAgICBcInNldl92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBLVk0geDg2IG9wZXJhdGlvbiBgdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZGAgYW5kIHJlbmFtZXMgYHZjcHVfcHJlX3J1bmAgdG8gYHZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb25gLiBJdCBtb2RpZmllcyBob3cgS1ZNIGhhbmRsZXMgaW52YWxpZCBndWVzdCBzdGF0ZXMgYW5kIGVtdWxhdGlvbiBmYWlsdXJlcywgcGFydGljdWxhcmx5IHdoZW4gcmV0dXJuaW5nIGZyb20gU3lzdGVtIE1hbmFnZW1lbnQgTW9kZSAoU01NKSB2aWEgUlNNLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgS1ZNIHg4NiBsb2dpYyBhbmQgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9JTlRFTFwiLFxuICAgIFwiS1ZNX0FNRFwiLFxuICAgIFwiS1ZNX1NNTVwiLFxuICAgIFwiS1ZNX0FNRF9TRVZcIixcbiAgICBcIktWTV9JTlRFTF9URFhcIixcbiAgICBcIklOVEVMX1REWF9IT1NUXCIsXG4gICAgXCJDUllQVE9fREVWX1NQX1BTUFwiLFxuICAgIFwiQ1JZUFRPX0RFVl9DQ1BfRERcIixcbiAgICBcIkFNRF9JT01NVVwiLFxuICAgIFwiWDg2X1gyQVBJQ1wiLFxuICAgIFwiQ01BXCIsXG4gICAgXCJYODZfTUNFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZW11bGF0b3JfbGVhdmVfc21tXCIsXG4gICAgXCJ2bXhfdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZFwiLFxuICAgIFwidGR4X3ZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb25cIixcbiAgICBcInNldl92Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBLVk0geDg2IG9wZXJhdGlvbiBgdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZGAgYW5kIHJlbmFtZXMgYHZjcHVfcHJlX3J1bmAgdG8gYHZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb25gLiBJdCBtb2RpZmllcyBob3cgS1ZNIGhhbmRsZXMgaW52YWxpZCBndWVzdCBzdGF0ZXMgYW5kIGVtdWxhdGlvbiBmYWlsdXJlcywgcGFydGljdWxhcmx5IHdoZW4gcmV0dXJuaW5nIGZyb20gU3lzdGVtIE1hbmFnZW1lbnQgTW9kZSAoU01NKSB2aWEgUlNNLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgS1ZNIHg4NiBsb2dpYyBhbmQgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow9v2k9[1] Phase: Succeeded StartedAt: 2026-07-28 20:11:03 +0000 UTC FinishedAt: 2026-07-28 20:11:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9v2k9[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-28 20:11:03 +0000 UTC FinishedAt: 2026-07-28 20:11:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9v2k9[2] Phase: Succeeded StartedAt: 2026-07-28 20:11:03 +0000 UTC FinishedAt: 2026-07-29 00:09:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9v2k9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"567329869b9c75c9d3df74b35fe10af9b51c479d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU","X86_X2APIC","CMA","X86_MCE"],"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":["emulator_leave_smm","vmx_unhandleable_emulation_required","tdx_vcpu_needs_initialization","sev_vcpu_needs_initialization"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"567329869b9c75c9d3df74b35fe10af9b51c479d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU","X86_X2APIC","CMA","X86_MCE"],"series_id":"137ee874-a8bb-4c16-87c2-d2afeb16e49f","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-28 20:11:03 +0000 UTC FinishedAt: 2026-07-29 00:09:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"567329869b9c75c9d3df74b35fe10af9b51c479d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU","X86_X2APIC","CMA","X86_MCE"],"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":["emulator_leave_smm","vmx_unhandleable_emulation_required","tdx_vcpu_needs_initialization","sev_vcpu_needs_initialization"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"567329869b9c75c9d3df74b35fe10af9b51c479d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU","X86_X2APIC","CMA","X86_MCE"],"series_id":"137ee874-a8bb-4c16-87c2-d2afeb16e49f","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-workflow9v2k9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"567329869b9c75c9d3df74b35fe10af9b51c479d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU","X86_X2APIC","CMA","X86_MCE"],"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":["emulator_leave_smm","vmx_unhandleable_emulation_required","tdx_vcpu_needs_initialization","sev_vcpu_needs_initialization"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"567329869b9c75c9d3df74b35fe10af9b51c479d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU","X86_X2APIC","CMA","X86_MCE"],"series_id":"137ee874-a8bb-4c16-87c2-d2afeb16e49f","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-28 20:11:03 +0000 UTC FinishedAt: 2026-07-28 20:11:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9v2k9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"567329869b9c75c9d3df74b35fe10af9b51c479d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU","X86_X2APIC","CMA","X86_MCE"],"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":["emulator_leave_smm","vmx_unhandleable_emulation_required","tdx_vcpu_needs_initialization","sev_vcpu_needs_initialization"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"567329869b9c75c9d3df74b35fe10af9b51c479d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU","X86_X2APIC","CMA","X86_MCE"],"series_id":"137ee874-a8bb-4c16-87c2-d2afeb16e49f","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-28 20:11:03 +0000 UTC FinishedAt: 2026-07-28 20:11:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"567329869b9c75c9d3df74b35fe10af9b51c479d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU","X86_X2APIC","CMA","X86_MCE"],"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-workflow9v2k9/series-workflow9v2k9-convert-artifact-1224655395/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9v2k9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"567329869b9c75c9d3df74b35fe10af9b51c479d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU","X86_X2APIC","CMA","X86_MCE"],"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":["emulator_leave_smm","vmx_unhandleable_emulation_required","tdx_vcpu_needs_initialization","sev_vcpu_needs_initialization"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"567329869b9c75c9d3df74b35fe10af9b51c479d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU","X86_X2APIC","CMA","X86_MCE"],"series_id":"137ee874-a8bb-4c16-87c2-d2afeb16e49f","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-28 20:11:13 +0000 UTC FinishedAt: 2026-07-28 20:35:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9v2k9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"567329869b9c75c9d3df74b35fe10af9b51c479d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU","X86_X2APIC","CMA","X86_MCE"],"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":["emulator_leave_smm","vmx_unhandleable_emulation_required","tdx_vcpu_needs_initialization","sev_vcpu_needs_initialization"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"567329869b9c75c9d3df74b35fe10af9b51c479d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU","X86_X2APIC","CMA","X86_MCE"],"series_id":"137ee874-a8bb-4c16-87c2-d2afeb16e49f","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-28 20:11:13 +0000 UTC FinishedAt: 2026-07-28 20:35:43 +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:*93ea79aa-3acb-43c6-b6d2-b235c5e585f5,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-workflow9v2k9/series-workflow9v2k9-convert-artifact-1224655395/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": "a45451ae-e52f-40ef-982d-72633092134a", "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-workflow9v2k9/series-workflow9v2k9-build-action-3904452241/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9v2k9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"567329869b9c75c9d3df74b35fe10af9b51c479d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU","X86_X2APIC","CMA","X86_MCE"],"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":["emulator_leave_smm","vmx_unhandleable_emulation_required","tdx_vcpu_needs_initialization","sev_vcpu_needs_initialization"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"567329869b9c75c9d3df74b35fe10af9b51c479d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU","X86_X2APIC","CMA","X86_MCE"],"series_id":"137ee874-a8bb-4c16-87c2-d2afeb16e49f","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-28 20:11:13 +0000 UTC FinishedAt: 2026-07-28 20:35:33 +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:*93ea79aa-3acb-43c6-b6d2-b235c5e585f5,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-workflow9v2k9/series-workflow9v2k9-convert-artifact-1224655395/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": "a45451ae-e52f-40ef-982d-72633092134a", "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-workflow9v2k9/series-workflow9v2k9-build-action-3904452241/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9v2k9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"567329869b9c75c9d3df74b35fe10af9b51c479d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU","X86_X2APIC","CMA","X86_MCE"],"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":["emulator_leave_smm","vmx_unhandleable_emulation_required","tdx_vcpu_needs_initialization","sev_vcpu_needs_initialization"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"567329869b9c75c9d3df74b35fe10af9b51c479d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU","X86_X2APIC","CMA","X86_MCE"],"series_id":"137ee874-a8bb-4c16-87c2-d2afeb16e49f","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-28 20:35:43 +0000 UTC FinishedAt: 2026-07-28 20:35:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9v2k9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"567329869b9c75c9d3df74b35fe10af9b51c479d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU","X86_X2APIC","CMA","X86_MCE"],"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":["emulator_leave_smm","vmx_unhandleable_emulation_required","tdx_vcpu_needs_initialization","sev_vcpu_needs_initialization"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"567329869b9c75c9d3df74b35fe10af9b51c479d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU","X86_X2APIC","CMA","X86_MCE"],"series_id":"137ee874-a8bb-4c16-87c2-d2afeb16e49f","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-28 20:35:43 +0000 UTC FinishedAt: 2026-07-28 20:35:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9v2k9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"567329869b9c75c9d3df74b35fe10af9b51c479d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU","X86_X2APIC","CMA","X86_MCE"],"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":["emulator_leave_smm","vmx_unhandleable_emulation_required","tdx_vcpu_needs_initialization","sev_vcpu_needs_initialization"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"567329869b9c75c9d3df74b35fe10af9b51c479d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU","X86_X2APIC","CMA","X86_MCE"],"series_id":"137ee874-a8bb-4c16-87c2-d2afeb16e49f","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-28 20:35:43 +0000 UTC FinishedAt: 2026-07-28 20:35:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9v2k9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"567329869b9c75c9d3df74b35fe10af9b51c479d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU","X86_X2APIC","CMA","X86_MCE"],"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":["emulator_leave_smm","vmx_unhandleable_emulation_required","tdx_vcpu_needs_initialization","sev_vcpu_needs_initialization"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"567329869b9c75c9d3df74b35fe10af9b51c479d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU","X86_X2APIC","CMA","X86_MCE"],"series_id":"137ee874-a8bb-4c16-87c2-d2afeb16e49f","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-28 20:35:43 +0000 UTC FinishedAt: 2026-07-28 20:35:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"567329869b9c75c9d3df74b35fe10af9b51c479d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU","X86_X2APIC","CMA","X86_MCE"],"series_id":"137ee874-a8bb-4c16-87c2-d2afeb16e49f","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-workflow9v2k9/series-workflow9v2k9-convert-artifact-2021045338/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9v2k9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"567329869b9c75c9d3df74b35fe10af9b51c479d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU","X86_X2APIC","CMA","X86_MCE"],"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":["emulator_leave_smm","vmx_unhandleable_emulation_required","tdx_vcpu_needs_initialization","sev_vcpu_needs_initialization"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"567329869b9c75c9d3df74b35fe10af9b51c479d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU","X86_X2APIC","CMA","X86_MCE"],"series_id":"137ee874-a8bb-4c16-87c2-d2afeb16e49f","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-28 20:35:53 +0000 UTC FinishedAt: 2026-07-28 20:38:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9v2k9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"567329869b9c75c9d3df74b35fe10af9b51c479d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU","X86_X2APIC","CMA","X86_MCE"],"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":["emulator_leave_smm","vmx_unhandleable_emulation_required","tdx_vcpu_needs_initialization","sev_vcpu_needs_initialization"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"567329869b9c75c9d3df74b35fe10af9b51c479d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU","X86_X2APIC","CMA","X86_MCE"],"series_id":"137ee874-a8bb-4c16-87c2-d2afeb16e49f","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-28 20:35:53 +0000 UTC FinishedAt: 2026-07-28 20:38:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a45451ae-e52f-40ef-982d-72633092134a,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-workflow9v2k9/series-workflow9v2k9-build-action-3904452241/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-workflow9v2k9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"567329869b9c75c9d3df74b35fe10af9b51c479d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU","X86_X2APIC","CMA","X86_MCE"],"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":["emulator_leave_smm","vmx_unhandleable_emulation_required","tdx_vcpu_needs_initialization","sev_vcpu_needs_initialization"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"567329869b9c75c9d3df74b35fe10af9b51c479d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU","X86_X2APIC","CMA","X86_MCE"],"series_id":"137ee874-a8bb-4c16-87c2-d2afeb16e49f","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-28 20:38:10 +0000 UTC FinishedAt: 2026-07-28 20:38:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9v2k9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"567329869b9c75c9d3df74b35fe10af9b51c479d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU","X86_X2APIC","CMA","X86_MCE"],"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":["emulator_leave_smm","vmx_unhandleable_emulation_required","tdx_vcpu_needs_initialization","sev_vcpu_needs_initialization"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"567329869b9c75c9d3df74b35fe10af9b51c479d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU","X86_X2APIC","CMA","X86_MCE"],"series_id":"137ee874-a8bb-4c16-87c2-d2afeb16e49f","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-28 20:38:10 +0000 UTC FinishedAt: 2026-07-28 20:38:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9v2k9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"567329869b9c75c9d3df74b35fe10af9b51c479d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU","X86_X2APIC","CMA","X86_MCE"],"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":["emulator_leave_smm","vmx_unhandleable_emulation_required","tdx_vcpu_needs_initialization","sev_vcpu_needs_initialization"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"567329869b9c75c9d3df74b35fe10af9b51c479d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU","X86_X2APIC","CMA","X86_MCE"],"series_id":"137ee874-a8bb-4c16-87c2-d2afeb16e49f","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-28 20:38:10 +0000 UTC FinishedAt: 2026-07-28 21:03:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9v2k9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"567329869b9c75c9d3df74b35fe10af9b51c479d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU","X86_X2APIC","CMA","X86_MCE"],"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":["emulator_leave_smm","vmx_unhandleable_emulation_required","tdx_vcpu_needs_initialization","sev_vcpu_needs_initialization"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"567329869b9c75c9d3df74b35fe10af9b51c479d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU","X86_X2APIC","CMA","X86_MCE"],"series_id":"137ee874-a8bb-4c16-87c2-d2afeb16e49f","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-28 20:38:10 +0000 UTC FinishedAt: 2026-07-28 21:03:38 +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:*93ea79aa-3acb-43c6-b6d2-b235c5e585f5,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-workflow9v2k9/series-workflow9v2k9-convert-artifact-2021045338/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": "76d6b6b7-c666-4784-8f3a-5c7c83bd36a8", "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-workflow9v2k9/series-workflow9v2k9-build-action-3989438782/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9v2k9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"567329869b9c75c9d3df74b35fe10af9b51c479d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU","X86_X2APIC","CMA","X86_MCE"],"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":["emulator_leave_smm","vmx_unhandleable_emulation_required","tdx_vcpu_needs_initialization","sev_vcpu_needs_initialization"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"567329869b9c75c9d3df74b35fe10af9b51c479d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU","X86_X2APIC","CMA","X86_MCE"],"series_id":"137ee874-a8bb-4c16-87c2-d2afeb16e49f","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-28 20:38:10 +0000 UTC FinishedAt: 2026-07-28 21:03:28 +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:*93ea79aa-3acb-43c6-b6d2-b235c5e585f5,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-workflow9v2k9/series-workflow9v2k9-convert-artifact-2021045338/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": "76d6b6b7-c666-4784-8f3a-5c7c83bd36a8", "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-workflow9v2k9/series-workflow9v2k9-build-action-3989438782/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9v2k9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"567329869b9c75c9d3df74b35fe10af9b51c479d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU","X86_X2APIC","CMA","X86_MCE"],"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":["emulator_leave_smm","vmx_unhandleable_emulation_required","tdx_vcpu_needs_initialization","sev_vcpu_needs_initialization"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"567329869b9c75c9d3df74b35fe10af9b51c479d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU","X86_X2APIC","CMA","X86_MCE"],"series_id":"137ee874-a8bb-4c16-87c2-d2afeb16e49f","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-28 21:03:38 +0000 UTC FinishedAt: 2026-07-28 21:03:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9v2k9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"567329869b9c75c9d3df74b35fe10af9b51c479d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU","X86_X2APIC","CMA","X86_MCE"],"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":["emulator_leave_smm","vmx_unhandleable_emulation_required","tdx_vcpu_needs_initialization","sev_vcpu_needs_initialization"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"567329869b9c75c9d3df74b35fe10af9b51c479d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU","X86_X2APIC","CMA","X86_MCE"],"series_id":"137ee874-a8bb-4c16-87c2-d2afeb16e49f","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-28 21:03:38 +0000 UTC FinishedAt: 2026-07-28 21:03:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9v2k9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"567329869b9c75c9d3df74b35fe10af9b51c479d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU","X86_X2APIC","CMA","X86_MCE"],"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":["emulator_leave_smm","vmx_unhandleable_emulation_required","tdx_vcpu_needs_initialization","sev_vcpu_needs_initialization"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"567329869b9c75c9d3df74b35fe10af9b51c479d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU","X86_X2APIC","CMA","X86_MCE"],"series_id":"137ee874-a8bb-4c16-87c2-d2afeb16e49f","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-28 21:03:38 +0000 UTC FinishedAt: 2026-07-28 21:06:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9v2k9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"567329869b9c75c9d3df74b35fe10af9b51c479d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU","X86_X2APIC","CMA","X86_MCE"],"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":["emulator_leave_smm","vmx_unhandleable_emulation_required","tdx_vcpu_needs_initialization","sev_vcpu_needs_initialization"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"567329869b9c75c9d3df74b35fe10af9b51c479d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU","X86_X2APIC","CMA","X86_MCE"],"series_id":"137ee874-a8bb-4c16-87c2-d2afeb16e49f","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-28 21:03:38 +0000 UTC FinishedAt: 2026-07-28 21:06:08 +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:*76d6b6b7-c666-4784-8f3a-5c7c83bd36a8,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-workflow9v2k9/series-workflow9v2k9-build-action-3989438782/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-workflow9v2k9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"567329869b9c75c9d3df74b35fe10af9b51c479d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU","X86_X2APIC","CMA","X86_MCE"],"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":["emulator_leave_smm","vmx_unhandleable_emulation_required","tdx_vcpu_needs_initialization","sev_vcpu_needs_initialization"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"567329869b9c75c9d3df74b35fe10af9b51c479d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU","X86_X2APIC","CMA","X86_MCE"],"series_id":"137ee874-a8bb-4c16-87c2-d2afeb16e49f","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-28 21:06:18 +0000 UTC FinishedAt: 2026-07-29 00:09:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9v2k9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"567329869b9c75c9d3df74b35fe10af9b51c479d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU","X86_X2APIC","CMA","X86_MCE"],"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":["emulator_leave_smm","vmx_unhandleable_emulation_required","tdx_vcpu_needs_initialization","sev_vcpu_needs_initialization"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"567329869b9c75c9d3df74b35fe10af9b51c479d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU","X86_X2APIC","CMA","X86_MCE"],"series_id":"137ee874-a8bb-4c16-87c2-d2afeb16e49f","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-28 21:06:18 +0000 UTC FinishedAt: 2026-07-29 00:09:20 +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":["emulator_leave_smm","vmx_unhandleable_emulation_required","tdx_vcpu_needs_initialization","sev_vcpu_needs_initialization"],"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:*a45451ae-e52f-40ef-982d-72633092134a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*76d6b6b7-c666-4784-8f3a-5c7c83bd36a8,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-workflow9v2k9/series-workflow9v2k9-build-action-3904452241/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-workflow9v2k9/series-workflow9v2k9-build-action-3989438782/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow9v2k9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"567329869b9c75c9d3df74b35fe10af9b51c479d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU","X86_X2APIC","CMA","X86_MCE"],"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":["emulator_leave_smm","vmx_unhandleable_emulation_required","tdx_vcpu_needs_initialization","sev_vcpu_needs_initialization"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"567329869b9c75c9d3df74b35fe10af9b51c479d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU","X86_X2APIC","CMA","X86_MCE"],"series_id":"137ee874-a8bb-4c16-87c2-d2afeb16e49f","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-28 21:06:18 +0000 UTC FinishedAt: 2026-07-28 21:06:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9v2k9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"567329869b9c75c9d3df74b35fe10af9b51c479d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU","X86_X2APIC","CMA","X86_MCE"],"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":["emulator_leave_smm","vmx_unhandleable_emulation_required","tdx_vcpu_needs_initialization","sev_vcpu_needs_initialization"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"567329869b9c75c9d3df74b35fe10af9b51c479d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU","X86_X2APIC","CMA","X86_MCE"],"series_id":"137ee874-a8bb-4c16-87c2-d2afeb16e49f","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-28 21:06:18 +0000 UTC FinishedAt: 2026-07-28 21:06:22 +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":["emulator_leave_smm","vmx_unhandleable_emulation_required","tdx_vcpu_needs_initialization","sev_vcpu_needs_initialization"],"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-workflow9v2k9/series-workflow9v2k9-convert-artifact-2151310095/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9v2k9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"567329869b9c75c9d3df74b35fe10af9b51c479d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU","X86_X2APIC","CMA","X86_MCE"],"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":["emulator_leave_smm","vmx_unhandleable_emulation_required","tdx_vcpu_needs_initialization","sev_vcpu_needs_initialization"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"567329869b9c75c9d3df74b35fe10af9b51c479d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU","X86_X2APIC","CMA","X86_MCE"],"series_id":"137ee874-a8bb-4c16-87c2-d2afeb16e49f","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-28 21:06:18 +0000 UTC FinishedAt: 2026-07-28 21:06:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9v2k9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"567329869b9c75c9d3df74b35fe10af9b51c479d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU","X86_X2APIC","CMA","X86_MCE"],"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":["emulator_leave_smm","vmx_unhandleable_emulation_required","tdx_vcpu_needs_initialization","sev_vcpu_needs_initialization"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"567329869b9c75c9d3df74b35fe10af9b51c479d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU","X86_X2APIC","CMA","X86_MCE"],"series_id":"137ee874-a8bb-4c16-87c2-d2afeb16e49f","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-28 21:06:18 +0000 UTC FinishedAt: 2026-07-28 21:06:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9v2k9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"567329869b9c75c9d3df74b35fe10af9b51c479d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU","X86_X2APIC","CMA","X86_MCE"],"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":["emulator_leave_smm","vmx_unhandleable_emulation_required","tdx_vcpu_needs_initialization","sev_vcpu_needs_initialization"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"567329869b9c75c9d3df74b35fe10af9b51c479d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU","X86_X2APIC","CMA","X86_MCE"],"series_id":"137ee874-a8bb-4c16-87c2-d2afeb16e49f","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-28 21:06:18 +0000 UTC FinishedAt: 2026-07-28 21:06:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9v2k9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"567329869b9c75c9d3df74b35fe10af9b51c479d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU","X86_X2APIC","CMA","X86_MCE"],"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":["emulator_leave_smm","vmx_unhandleable_emulation_required","tdx_vcpu_needs_initialization","sev_vcpu_needs_initialization"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"567329869b9c75c9d3df74b35fe10af9b51c479d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU","X86_X2APIC","CMA","X86_MCE"],"series_id":"137ee874-a8bb-4c16-87c2-d2afeb16e49f","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-28 21:06:28 +0000 UTC FinishedAt: 2026-07-29 00:09:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9v2k9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"567329869b9c75c9d3df74b35fe10af9b51c479d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU","X86_X2APIC","CMA","X86_MCE"],"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":["emulator_leave_smm","vmx_unhandleable_emulation_required","tdx_vcpu_needs_initialization","sev_vcpu_needs_initialization"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"567329869b9c75c9d3df74b35fe10af9b51c479d","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SMM","KVM_AMD_SEV","KVM_INTEL_TDX","INTEL_TDX_HOST","CRYPTO_DEV_SP_PSP","CRYPTO_DEV_CCP_DD","AMD_IOMMU","X86_X2APIC","CMA","X86_MCE"],"series_id":"137ee874-a8bb-4c16-87c2-d2afeb16e49f","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-28 21:06:28 +0000 UTC FinishedAt: 2026-07-29 00:09:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a45451ae-e52f-40ef-982d-72633092134a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*76d6b6b7-c666-4784-8f3a-5c7c83bd36a8,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-workflow9v2k9/series-workflow9v2k9-build-action-3904452241/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-workflow9v2k9/series-workflow9v2k9-build-action-3989438782/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-workflow9v2k9/series-workflow9v2k9-convert-artifact-2151310095/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,}