Name: series-workflowf78rt Phase: Succeeded StartedAt: 2026-07-13 13:17:50 +0000 UTC FinishedAt: 2026-07-13 15:58:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf78rt[0] Phase: Succeeded StartedAt: 2026-07-13 13:17:50 +0000 UTC FinishedAt: 2026-07-13 13:39:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf78rt[0].run-triage Phase: Succeeded StartedAt: 2026-07-13 13:17:50 +0000 UTC FinishedAt: 2026-07-13 13:39:12 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "8cd9520d35a6c38db6567e97dd93b1f11f185dc6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM_AMD", "AMD_IOMMU", "IRQ_REMAP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "8cd9520d35a6c38db6567e97dd93b1f11f185dc6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM_AMD", "AMD_IOMMU", "IRQ_REMAP" ], "series_id": "f5e5bac2-2e5c-4474-8d56-7a5eca46524b" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "avic_add_vcpu_to_gappi_wakeup_list", "avic_remove_vcpu_from_gappi_wakeup_list", "avic_gappi_wakeup_handler", "avic_pi_update_irte", "avic_update_iommu_vcpu_affinity", "__amd_iommu_update_ga", "amd_iommu_update_ga", "amd_iommu_activate_guest_mode" ], "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+CgkJCTx0ZD4yMDI2LzA3LzEzIDEzOjM2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTV9BTUQmIzM0OywKICAgICYjMzQ7QU1EX0lPTU1VJiMzNDssCiAgICAmIzM0O0lSUV9SRU1BUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2F2aWNfYWRkX3ZjcHVfdG9fZ2FwcGlfd2FrZXVwX2xpc3QmIzM0OywKICAgICYjMzQ7YXZpY19yZW1vdmVfdmNwdV9mcm9tX2dhcHBpX3dha2V1cF9saXN0JiMzNDssCiAgICAmIzM0O2F2aWNfZ2FwcGlfd2FrZXVwX2hhbmRsZXImIzM0OywKICAgICYjMzQ7YXZpY19waV91cGRhdGVfaXJ0ZSYjMzQ7LAogICAgJiMzNDthdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5JiMzNDssCiAgICAmIzM0O19fYW1kX2lvbW11X3VwZGF0ZV9nYSYjMzQ7LAogICAgJiMzNDthbWRfaW9tbXVfdXBkYXRlX2dhJiMzNDssCiAgICAmIzM0O2FtZF9pb21tdV9hY3RpdmF0ZV9ndWVzdF9tb2RlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgR0FQUEkgKEd1ZXN0IEFQSUMgUG9zdGVkIEludGVycnVwdHMpIHN1cHBvcnQgZm9yIEFNRCBJT01NVSBhbmQgS1ZNIFNWTSBBVklDLiBJdCBtb2RpZmllcyB0aGUgSVJURSBjb25maWd1cmF0aW9uIGZvciBwb3N0ZWQgaW50ZXJydXB0cyBhbmQgaW50cm9kdWNlcyBhIG5ldyB3YWtldXAgbGlzdCBmb3IgR0FQUEkgaW4gS1ZNLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSB2aXJ0dWFsaXphdGlvbiBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxMzozNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGMwMGM1YWNkZDQyYjQwZGIyMGY0MWMwMTlmOTkxNjg5NTYzODBlMWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCAxMyAxMzozNjoyMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0XG5pbmRleCA5NzAwN2Y0ZjY5ZDRlOC4uZDI3ZjEwY2JiMDA0Y2MgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHRcbkBAIC00NTUsNyAmIzQzOzQ1NSw4IEBAIEtlcm5lbCBwYXJhbWV0ZXJzXG4gXHRcdFx0XHQgICAgICAgICAgdG8gNCBLaUIuXG4gXHRcdFx0djJfcGdzaXplc19vbmx5IC0gTGltaXQgcGFnZS1zaXplcyB1c2VkIGZvciB2MSBwYWdlLXRhYmxlc1xuIFx0XHRcdFx0ICAgICAgICAgIHRvIDRLaUIvMk1pYi8xR2lCLlxuLVxuJiM0MztcdFx0XHRnYXBwaVx0XHQtIFVzZSBHQVBQSSBpbnN0ZWFkIG9mIEdBTE9HIGZvciB2Q1BVXG4mIzQzO1x0XHRcdFx0XHQgIHdha2V1cCBub3RpZmljYXRpb24uXG4gXG4gXHRhbWRfaW9tbXVfZHVtcD1cdFtIVyxYODYtNjRdXG4gXHRcdFx0RW5hYmxlIEFNRCBJT01NVSBkcml2ZXIgb3B0aW9uIHRvIGR1bXAgdGhlIEFDUEkgdGFibGVcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcnFfcmVtYXBwaW5nLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcnFfcmVtYXBwaW5nLmhcbmluZGV4IDM3Yjk0ZjQ4NGVmMzM4Li5hZjBjZGZhMzJjNDQ3ZiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lycV9yZW1hcHBpbmcuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaXJxX3JlbWFwcGluZy5oXG5AQCAtMzUsOCAmIzQzOzM1LDkgQEAgc3RydWN0IGFtZF9pb21tdV9waV9kYXRhIHtcbiBcdHU2NCB2YXBpY19hZGRyO1x0XHQvKiBQaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSB2Q1BVJiMzOTtzIHZBUElDLiAqL1xuIFx0dTMyIGdhX3RhZztcbiBcdHUzMiB2ZWN0b3I7XHRcdC8qIEd1ZXN0IHZlY3RvciBvZiB0aGUgaW50ZXJydXB0ICovXG4tXHRpbnQgY3B1O1xuLVx0Ym9vbCBnYV9sb2dfaW50cjtcbiYjNDM7XHRpbnQgYXBpY2lkO1xuJiM0MztcdGJvb2wgd2FrZXVwX2ludHI7XG4mIzQzO1x0Ym9vbCBpc19ydW5uaW5nO1xuIFx0Ym9vbCBpc19ndWVzdF9tb2RlO1xuIFx0dm9pZCAqaXJfZGF0YTtcbiB9O1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmhcbmluZGV4IGJjZmViNWU3YzBlZGYyLi5hZGQ4YjcyNzRjYzJmOCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaFxuQEAgLTI1OSwxMSAmIzQzOzI1OSwxMiBAQCBzdHJ1Y3QgX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKSB2bWNiX2NvbnRyb2xfYXJlYSB7XG4gI2RlZmluZSBBVklDX0xPR0lDQUxfSURfRU5UUllfVkFMSURfTUFTS1x0XHQoMSBcdTAwM2NcdTAwM2MgMzEpXG4gXG4gLypcbi0gKiBHQV9MT0dfSU5UUiBpcyBhIHN5bnRoZXRpYyBmbGFnIHRoYXQmIzM5O3MgbmV2ZXIgcHJvcGFnYXRlZCB0byBoYXJkd2FyZS12aXNpYmxlXG4tICogdGFibGVzLiAgR0FfTE9HX0lOVFIgaXMgc2V0IGlmIHRoZSB2Q1BVIG5lZWRzIGRldmljZSBwb3N0ZWQgSVJRcyB0byBnZW5lcmF0ZVxuLSAqIEdBIGxvZyBpbnRlcnJ1cHRzIHRvIHdha2UgdGhlIHZDUFUgKGJlY2F1c2UgaXQmIzM5O3MgYmxvY2tpbmcgb3IgYWJvdXQgdG8gYmxvY2spLlxuJiM0MzsgKiBXQUtFVVBfSU5UUiBpcyBhIHN5bnRoZXRpYyBmbGFnIHRoYXQmIzM5O3MgbmV2ZXIgcHJvcGFnYXRlZCB0byBoYXJkd2FyZS12aXNpYmxlXG4mIzQzOyAqIHRhYmxlcy4gIFdBS0VVUF9JTlRSIGlzIHNldCBpZiB0aGUgdkNQVSBuZWVkcyBkZXZpY2UgcG9zdGVkIElSUXMgdG8gZ2VuZXJhdGVcbiYjNDM7ICogR0EgbG9nL0dBUFBJIGludGVycnVwdHMgdG8gd2FrZSB0aGUgdkNQVSAoYmVjYXVzZSBpdCYjMzk7cyBibG9ja2luZyBvciBhYm91dCB0b1xuJiM0MzsgKiBibG9jaykuXG4gICovXG4tI2RlZmluZSBBVklDX1BIWVNJQ0FMX0lEX0VOVFJZX0dBX0xPR19JTlRSXHRcdEJJVF9VTEwoNjEpXG4mIzQzOyNkZWZpbmUgQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9XQUtFVVBfSU5UUlx0XHRCSVRfVUxMKDYxKVxuIFxuICNkZWZpbmUgQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9IT1NUX1BIWVNJQ0FMX0lEX01BU0tcdEdFTk1BU0tfVUxMKDExLCAwKVxuICNkZWZpbmUgQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9CQUNLSU5HX1BBR0VfTUFTS1x0R0VOTUFTS19VTEwoNTEsIDEyKVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vYXZpYy5jIGIvYXJjaC94ODYva3ZtL3N2bS9hdmljLmNcbmluZGV4IGNkZDVhNmRjNjQ2ZjExLi45ODJhNTk4ODUzMmZmNCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vYXZpYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuY1xuQEAgLTYzLDYgJiM0Mzs2Myw5IEBAXG4gXHRnYV90YWc7XHRcdFx0XHRcdFx0XHRcdFxcXG4gfSlcbiBcbiYjNDM7c3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBsaXN0X2hlYWQsIGdhcHBpX3ZjcHVfd2FrZXVwX2xpc3QpO1xuJiM0MztzdGF0aWMgREVGSU5FX1BFUl9DUFUocmF3X3NwaW5sb2NrX3QsIGdhcHBpX3ZjcHVfd2FrZXVwX2xpc3RfbG9jayk7XG4mIzQzO1xuIHN0YXRpY19hc3NlcnQoX19BVklDX0dBVEFHKEFWSUNfVk1fSURfTUFTSywgQVZJQ19WQ1BVX0lEWF9NQVNLKSA9PSAtMXUpO1xuIFxuICNkZWZpbmUgQVZJQ19BVVRPX01PREUgLTFcbkBAIC04NzQsNiAmIzQzOzg3Nyw5IEBAIGludCBhdmljX2luaXRfdmNwdShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNnN2bS1cdTAwM2Vpcl9saXN0KTtcbiBcdHJhd19zcGluX2xvY2tfaW5pdChcdTAwMjZzdm0tXHUwMDNlaXJfbGlzdF9sb2NrKTtcbiBcbiYjNDM7XHRJTklUX0xJU1RfSEVBRChcdTAwMjZzdm0tXHUwMDNlZ2FwcGlfdmNwdV93YWtldXBfbGlzdCk7XG4mIzQzO1x0c3ZtLVx1MDAzZWdhcHBpX2NwdSA9IC0xO1xuJiM0MztcbiBcdGlmICghZW5hYmxlX2FwaWN2IHx8ICFpcnFjaGlwX2luX2tlcm5lbCh2Y3B1LVx1MDAzZWt2bSkpXG4gXHRcdHJldHVybiAwO1xuIFxuQEAgLTg4Niw2ICYjNDM7ODkyLDQyIEBAIGludCBhdmljX2luaXRfdmNwdShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBhdmljX2FkZF92Y3B1X3RvX2dhcHBpX3dha2V1cF9saXN0KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBpbnQgY3B1KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGxpc3RfaGVhZCAqd2FrZXVwX2xpc3Q7XG4mIzQzO1x0cmF3X3NwaW5sb2NrX3QgKnNwaW5sb2NrO1xuJiM0MztcbiYjNDM7XHRpZiAoV0FSTl9PTih1bmxpa2VseShjcHUgXHUwMDNjIDApKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0d2FrZXVwX2xpc3QgPSBcdTAwMjZwZXJfY3B1KGdhcHBpX3ZjcHVfd2FrZXVwX2xpc3QsIGNwdSk7XG4mIzQzO1x0c3BpbmxvY2sgPSBcdTAwMjZwZXJfY3B1KGdhcHBpX3ZjcHVfd2FrZXVwX2xpc3RfbG9jaywgY3B1KTtcbiYjNDM7XHRndWFyZChyYXdfc3BpbmxvY2tfaXJxc2F2ZSkoc3BpbmxvY2spO1xuJiM0MztcdGlmIChsaXN0X2VtcHR5KFx1MDAyNnN2bS1cdTAwM2VnYXBwaV92Y3B1X3dha2V1cF9saXN0KSlcbiYjNDM7XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2c3ZtLVx1MDAzZWdhcHBpX3ZjcHVfd2FrZXVwX2xpc3QsIHdha2V1cF9saXN0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgYXZpY19yZW1vdmVfdmNwdV9mcm9tX2dhcHBpX3dha2V1cF9saXN0KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBpbnQgY3B1KVxuJiM0Mzt7XG4mIzQzO1x0cmF3X3NwaW5sb2NrX3QgKnNwaW5sb2NrO1xuJiM0MztcbiYjNDM7XHRpZiAoV0FSTl9PTih1bmxpa2VseShjcHUgXHUwMDNjIDApKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0c3BpbmxvY2sgPSBcdTAwMjZwZXJfY3B1KGdhcHBpX3ZjcHVfd2FrZXVwX2xpc3RfbG9jaywgY3B1KTtcbiYjNDM7XHRndWFyZChyYXdfc3BpbmxvY2tfaXJxc2F2ZSkoc3BpbmxvY2spO1xuJiM0MztcdGlmICghbGlzdF9lbXB0eShcdTAwMjZzdm0tXHUwMDNlZ2FwcGlfdmNwdV93YWtldXBfbGlzdCkpXG4mIzQzO1x0XHRsaXN0X2RlbF9pbml0KFx1MDAyNnN2bS1cdTAwM2VnYXBwaV92Y3B1X3dha2V1cF9saXN0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBhdmljX2Rlc3Ryb3lfdmNwdShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcbiYjNDM7e1xuJiM0MztcdGlmIChzdm0tXHUwMDNlZ2FwcGlfY3B1ICE9IC0xIFx1MDAyNlx1MDAyNiBhbWRfaW9tbXVfZ2FwcGkpIHtcbiYjNDM7XHRcdGF2aWNfcmVtb3ZlX3ZjcHVfZnJvbV9nYXBwaV93YWtldXBfbGlzdChzdm0sIHN2bS1cdTAwM2VnYXBwaV9jcHUpO1xuJiM0MztcdFx0c3ZtLVx1MDAzZWdhcHBpX2NwdSA9IC0xO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiB2b2lkIGF2aWNfYXBpY3ZfcG9zdF9zdGF0ZV9yZXN0b3JlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHRhdmljX2hhbmRsZV9kZnJfdXBkYXRlKHZjcHUpO1xuQEAgLTg5NiwxMyAmIzQzOzkzOCwxOCBAQCBzdGF0aWMgdm9pZCBzdm1faXJfbGlzdF9kZWwoc3RydWN0IGt2bV9rZXJuZWxfaXJxZmQgKmlycWZkKVxuIHtcbiBcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGlycWZkLVx1MDAzZWlycV9ieXBhc3NfdmNwdTtcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4mIzQzO1x0c3RydWN0IHZjcHVfc3ZtICpzdm07XG4gXG4gXHRpZiAoIXZjcHUpXG4gXHRcdHJldHVybjtcbiBcbi1cdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ0b19zdm0odmNwdSktXHUwMDNlaXJfbGlzdF9sb2NrLCBmbGFncyk7XG4mIzQzO1x0c3ZtID0gdG9fc3ZtKHZjcHUpO1xuJiM0MztcbiYjNDM7XHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2c3ZtLVx1MDAzZWlyX2xpc3RfbG9jaywgZmxhZ3MpO1xuIFx0bGlzdF9kZWwoXHUwMDI2aXJxZmQtXHUwMDNldmNwdV9saXN0KTtcbi1cdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnRvX3N2bSh2Y3B1KS1cdTAwM2Vpcl9saXN0X2xvY2ssIGZsYWdzKTtcbiYjNDM7XHRpZiAoYW1kX2lvbW11X2dhcHBpIFx1MDAyNlx1MDAyNiBsaXN0X2VtcHR5KFx1MDAyNnN2bS1cdTAwM2Vpcl9saXN0KSlcbiYjNDM7XHRcdGF2aWNfcmVtb3ZlX3ZjcHVfZnJvbV9nYXBwaV93YWtldXBfbGlzdChzdm0sIHN2bS1cdTAwM2VnYXBwaV9jcHUpO1xuJiM0MztcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnN2bS1cdTAwM2Vpcl9saXN0X2xvY2ssIGZsYWdzKTtcbiB9XG4gXG4gaW50IGF2aWNfcGlfdXBkYXRlX2lydGUoc3RydWN0IGt2bV9rZXJuZWxfaXJxZmQgKmlycWZkLCBzdHJ1Y3Qga3ZtICprdm0sXG5AQCAtOTIzLDggJiM0Mzs5NzAsNiBAQCBpbnQgYXZpY19waV91cGRhdGVfaXJ0ZShzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFmZCAqaXJxZmQsIHN0cnVjdCBrdm0gKmt2bSxcbiBcdFx0ICogaWYgQVZJQyBpcyBlbmFibGVkL3VuaW5oaWJpdGVkIGluIHRoZSBmdXR1cmUuXG4gXHRcdCAqL1xuIFx0XHRzdHJ1Y3QgYW1kX2lvbW11X3BpX2RhdGEgcGlfZGF0YSA9IHtcbi1cdFx0XHQuZ2FfdGFnID0gQVZJQ19HQVRBRyh0b19rdm1fc3ZtKGt2bSktXHUwMDNlYXZpY192bV9pZCxcbi1cdFx0XHRcdFx0ICAgICB2Y3B1LVx1MDAzZXZjcHVfaWR4KSxcbiBcdFx0XHQuaXNfZ3Vlc3RfbW9kZSA9IGt2bV92Y3B1X2FwaWN2X2FjdGl2ZSh2Y3B1KSxcbiBcdFx0XHQudmFwaWNfYWRkciA9IGF2aWNfZ2V0X2JhY2tpbmdfcGFnZV9hZGRyZXNzKHRvX3N2bSh2Y3B1KSksXG4gXHRcdFx0LnZlY3RvciA9IHZlY3RvcixcbkBAIC05MzIsNiAmIzQzOzk3Nyw3IEBAIGludCBhdmljX3BpX3VwZGF0ZV9pcnRlKHN0cnVjdCBrdm1fa2VybmVsX2lycWZkICppcnFmZCwgc3RydWN0IGt2bSAqa3ZtLFxuIFx0XHRzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTtcbiBcdFx0dTY0IGVudHJ5O1xuIFx0XHRpbnQgcmV0O1xuJiM0MztcdFx0Ym9vbCBpc192Y3B1X3dhaXRpbmcgPSBmYWxzZTtcbiBcbiBcdFx0LypcbiBcdFx0ICogUHJldmVudCB0aGUgdkNQVSBmcm9tIGJlaW5nIHNjaGVkdWxlZCBvdXQgb3IgbWlncmF0ZWQgdW50aWxcbkBAIC05NDcsMTcgJiM0Mzs5OTMsMzMgQEAgaW50IGF2aWNfcGlfdXBkYXRlX2lydGUoc3RydWN0IGt2bV9rZXJuZWxfaXJxZmQgKmlycWZkLCBzdHJ1Y3Qga3ZtICprdm0sXG4gXHRcdCAqIHNjaGVkdWxlZCBvdXQsIEtWTSB3aWxsIHVwZGF0ZSB0aGUgcENQVSBpbmZvIHdoZW4gdGhlIHZDUFVcbiBcdFx0ICogaXMgYXdha2VuZWQgYW5kL29yIHNjaGVkdWxlZCBpbi4gIFNlZSBhbHNvIGF2aWNfdmNwdV9sb2FkKCkuXG4gXHRcdCAqL1xuJiM0MztcdFx0aWYgKGFtZF9pb21tdV9nYXBwaSlcbiYjNDM7XHRcdFx0cGlfZGF0YS5nYV90YWcgPSBQT1NURURfSU5UUl9XQUtFVVBfVkVDVE9SO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRwaV9kYXRhLmdhX3RhZyA9IEFWSUNfR0FUQUcodG9fa3ZtX3N2bShrdm0pLVx1MDAzZWF2aWNfdm1faWQsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICB2Y3B1LVx1MDAzZXZjcHVfaWR4KTtcbiYjNDM7XG4gXHRcdGVudHJ5ID0gc3ZtLVx1MDAzZWF2aWNfcGh5c2ljYWxfaWRfZW50cnk7XG4gXHRcdGlmIChlbnRyeSBcdTAwMjYgQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9JU19SVU5OSU5HX01BU0spIHtcbi1cdFx0XHRwaV9kYXRhLmNwdSA9IGVudHJ5IFx1MDAyNiBBVklDX1BIWVNJQ0FMX0lEX0VOVFJZX0hPU1RfUEhZU0lDQUxfSURfTUFTSztcbiYjNDM7XHRcdFx0cGlfZGF0YS5hcGljaWQgPSBlbnRyeSBcdTAwMjYgQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9IT1NUX1BIWVNJQ0FMX0lEX01BU0s7XG4mIzQzO1x0XHRcdHBpX2RhdGEuaXNfcnVubmluZyA9IHRydWU7XG4gXHRcdH0gZWxzZSB7XG4tXHRcdFx0cGlfZGF0YS5jcHUgPSAtMTtcbi1cdFx0XHRwaV9kYXRhLmdhX2xvZ19pbnRyID0gZW50cnkgXHUwMDI2IEFWSUNfUEhZU0lDQUxfSURfRU5UUllfR0FfTE9HX0lOVFI7XG4mIzQzO1x0XHRcdHBpX2RhdGEuYXBpY2lkID0gLTE7XG4mIzQzO1x0XHRcdHBpX2RhdGEud2FrZXVwX2ludHIgPSBlbnRyeSBcdTAwMjYgQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9XQUtFVVBfSU5UUjtcbiYjNDM7XHRcdFx0cGlfZGF0YS5pc19ydW5uaW5nID0gZmFsc2U7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAoYW1kX2lvbW11X2dhcHBpKSB7XG4mIzQzO1x0XHRcdFx0cGlfZGF0YS5hcGljaWQgPSBrdm1fY3B1X2dldF9hcGljaWQoc3ZtLVx1MDAzZWdhcHBpX2NwdSk7XG4mIzQzO1x0XHRcdFx0aWYgKGxpc3RfZW1wdHkoXHUwMDI2c3ZtLVx1MDAzZWlyX2xpc3QpKSB7XG4mIzQzO1x0XHRcdFx0XHRhdmljX2FkZF92Y3B1X3RvX2dhcHBpX3dha2V1cF9saXN0KHN2bSwgc3ZtLVx1MDAzZWdhcHBpX2NwdSk7XG4mIzQzO1x0XHRcdFx0XHRpc192Y3B1X3dhaXRpbmcgPSB0cnVlO1xuJiM0MztcdFx0XHRcdH1cbiYjNDM7XHRcdFx0fVxuIFx0XHR9XG4gXG4gXHRcdHJldCA9IGlycV9zZXRfdmNwdV9hZmZpbml0eShob3N0X2lycSwgXHUwMDI2cGlfZGF0YSk7XG4gXHRcdGlmIChyZXQpXG4tXHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdFx0Z290byBnYXBwaV9lcnJfb3V0O1xuIFxuIFx0XHQvKlxuIFx0XHQgKiBSZXZlcnQgdG8gbGVnYWN5IG1vZGUgaWYgdGhlIElPTU1VIGRpZG4mIzM5O3QgcHJvdmlkZSBtZXRhZGF0YVxuQEAgLTk2NiwxMiAmIzQzOzEwMjgsMTcgQEAgaW50IGF2aWNfcGlfdXBkYXRlX2lydGUoc3RydWN0IGt2bV9rZXJuZWxfaXJxZmQgKmlycWZkLCBzdHJ1Y3Qga3ZtICprdm0sXG4gXHRcdCAqL1xuIFx0XHRpZiAoV0FSTl9PTl9PTkNFKCFwaV9kYXRhLmlyX2RhdGEpKSB7XG4gXHRcdFx0aXJxX3NldF92Y3B1X2FmZmluaXR5KGhvc3RfaXJxLCBOVUxMKTtcbi1cdFx0XHRyZXR1cm4gLUVJTztcbiYjNDM7XHRcdFx0cmV0ID0gLUVJTztcbiYjNDM7XHRcdFx0Z290byBnYXBwaV9lcnJfb3V0O1xuIFx0XHR9XG4gXG4gXHRcdGlycWZkLVx1MDAzZWlycV9ieXBhc3NfZGF0YSA9IHBpX2RhdGEuaXJfZGF0YTtcbiBcdFx0bGlzdF9hZGQoXHUwMDI2aXJxZmQtXHUwMDNldmNwdV9saXN0LCBcdTAwMjZzdm0tXHUwMDNlaXJfbGlzdCk7XG4gXHRcdHJldHVybiAwO1xuJiM0MztnYXBwaV9lcnJfb3V0OlxuJiM0MztcdFx0aWYgKGlzX3ZjcHVfd2FpdGluZylcbiYjNDM7XHRcdFx0YXZpY19yZW1vdmVfdmNwdV9mcm9tX2dhcHBpX3dha2V1cF9saXN0KHN2bSwgc3ZtLVx1MDAzZWdhcHBpX2NwdSk7XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuIFx0fVxuIFx0cmV0dXJuIGlycV9zZXRfdmNwdV9hZmZpbml0eShob3N0X2lycSwgTlVMTCk7XG4gfVxuQEAgLTk5MSwyMyAmIzQzOzEwNTgsMjQgQEAgZW51bSBhdmljX3ZjcHVfYWN0aW9uIHtcbiBcdCAqIE5vIHVuaXF1ZSBhY3Rpb24gaXMgcmVxdWlyZWQgdG8gZGVhbCB3aXRoIGEgdkNQVSB0aGF0IHN0b3BzL3N0YXJ0c1xuIFx0ICogcnVubmluZy4gIEEgdkNQVSB0aGF0IHN0YXJ0cyBydW5uaW5nIGJ5IGRlZmluaXRpb24gc3RvcHMgYmxvY2tpbmcgYXNcbiBcdCAqIHdlbGwsIGFuZCBhIHZDUFUgdGhhdCBzdG9wcyBydW5uaW5nIGNhbiYjMzk7dCBoYXZlIGJlZW4gYmxvY2tpbmcsIGkuZS5cbi1cdCAqIGRvZXNuJiMzOTt0IG5lZWQgdG8gdG9nZ2xlIEdBTG9nSW50ci5cbiYjNDM7XHQgKiBkb2VzbiYjMzk7dCBuZWVkIHRvIHRvZ2dsZSBob3N0IHdha2V1cCBub3RpZmljYXRpb24uXG4gXHQgKi9cbiBcdEFWSUNfU1RBUlRfUlVOTklOR1x0PSAwLFxuIFx0QVZJQ19TVE9QX1JVTk5JTkdcdD0gMCxcbiBcbiBcdC8qXG4tXHQgKiBXaGVuIGEgdkNQVSBzdGFydHMgYmxvY2tpbmcsIEtWTSBuZWVkcyB0byBzZXQgdGhlIEdBTG9nSW50ciBmbGFnXG4tXHQgKiBpbnQgYWxsIGFzc29jaWF0ZWQgSVJURXMgc28gdGhhdCBLVk0gY2FuIHdha2UgdGhlIHZDUFUgaWYgYW4gSVJRIGlzXG4tXHQgKiBzZW50IHRvIHRoZSB2Q1BVLlxuJiM0MztcdCAqIFdoZW4gYSB2Q1BVIHN0YXJ0cyBibG9ja2luZywgS1ZNIG5lZWRzIHRvIHJlcXVlc3QgaG9zdCB3YWtldXBcbiYjNDM7XHQgKiBub3RpZmljYXRpb24gaW4gYWxsIGFzc29jaWF0ZWQgSVJURXMgc28gdGhhdCBLVk0gY2FuIHdha2UgdGhlIHZDUFVcbiYjNDM7XHQgKiBpZiBhbiBJUlEgaXMgc2VudCB0byB0aGUgdkNQVS5cbiBcdCAqL1xuIFx0QVZJQ19TVEFSVF9CTE9DS0lOR1x0PSBCSVQoMSksXG4gfTtcbiBcbi1zdGF0aWMgdm9pZCBhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSxcbi1cdFx0XHRcdFx0ICAgIGVudW0gYXZpY192Y3B1X2FjdGlvbiBhY3Rpb24pXG4mIzQzO3N0YXRpYyB2b2lkIGF2aWNfdXBkYXRlX2lvbW11X3ZjcHVfYWZmaW5pdHkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgYXBpY2lkLFxuJiM0MztcdFx0XHRcdFx0ICAgIGludCBjcHUsIGVudW0gYXZpY192Y3B1X2FjdGlvbiBhY3Rpb24pXG4ge1xuLVx0Ym9vbCBnYV9sb2dfaW50ciA9IChhY3Rpb24gXHUwMDI2IEFWSUNfU1RBUlRfQkxPQ0tJTkcpO1xuJiM0MztcdGJvb2wgd2FrZXVwX2ludHIgPSAoYWN0aW9uIFx1MDAyNiBBVklDX1NUQVJUX0JMT0NLSU5HKTtcbiYjNDM7XHRib29sIGlzX3J1bm5pbmcgPSBhcGljaWQgXHUwMDNlPSAwO1xuIFx0c3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7XG4gXHRzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFmZCAqaXJxZmQ7XG4gXG5AQCAtMTAxNSwxOCAmIzQzOzEwODMsMzYgQEAgc3RhdGljIHZvaWQgYXZpY191cGRhdGVfaW9tbXVfdmNwdV9hZmZpbml0eShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUsXG4gXG4gXHQvKlxuIFx0ICogSGVyZSwgd2UgZ28gdGhyb3VnaCB0aGUgcGVyLXZjcHUgaXJfbGlzdCB0byB1cGRhdGUgYWxsIGV4aXN0aW5nXG4tXHQgKiBpbnRlcnJ1cHQgcmVtYXBwaW5nIHRhYmxlIGVudHJ5IHRhcmdldGluZyB0aGlzIHZjcHUuXG4mIzQzO1x0ICogaW50ZXJydXB0IHJlbWFwcGluZyB0YWJsZSBlbnRyaWVzIHRhcmdldGluZyB0aGlzIHZjcHUuXG4gXHQgKi9cbi1cdGlmIChsaXN0X2VtcHR5KFx1MDAyNnN2bS1cdTAwM2Vpcl9saXN0KSlcbiYjNDM7XHRpZiAobGlzdF9lbXB0eShcdTAwMjZzdm0tXHUwMDNlaXJfbGlzdCkpIHtcbiYjNDM7XHRcdGlmIChhbWRfaW9tbXVfZ2FwcGkgXHUwMDI2XHUwMDI2IGNwdSBcdTAwM2U9IDApXG4mIzQzO1x0XHRcdHN2bS1cdTAwM2VnYXBwaV9jcHUgPSBjcHU7XG4gXHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChpc19ydW5uaW5nIFx1MDAyNlx1MDAyNiBhbWRfaW9tbXVfZ2FwcGkpIHtcbiYjNDM7XHRcdGlmIChzdm0tXHUwMDNlZ2FwcGlfY3B1ICE9IC0xKVxuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBIYW5kbGUgaW5pdGlhbCBzdGF0ZSB3aGVuIHZDUFUgaXMgbG9hZGVkIGZvciB0aGVcbiYjNDM7XHRcdFx0ICogZmlyc3QgdGltZSB3aXRob3V0IGFueSBJUlEgYWZmaW5pdHkuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRhdmljX3JlbW92ZV92Y3B1X2Zyb21fZ2FwcGlfd2FrZXVwX2xpc3Qoc3ZtLCBzdm0tXHUwMDNlZ2FwcGlfY3B1KTtcbiYjNDM7XG4mIzQzO1x0XHRzdm0tXHUwMDNlZ2FwcGlfY3B1ID0gY3B1OyAvKiBTdG9yZSBjcHUgbnVtYmVyIGFzIHRhcmdldCBmb3IgR0FQUEkgKi9cbiYjNDM7XHR9IGVsc2UgaWYgKGFtZF9pb21tdV9nYXBwaSkge1xuJiM0MztcdFx0YXBpY2lkID0ga3ZtX2NwdV9nZXRfYXBpY2lkKHN2bS1cdTAwM2VnYXBwaV9jcHUpO1xuJiM0MztcdFx0YXZpY19hZGRfdmNwdV90b19nYXBwaV93YWtldXBfbGlzdChzdm0sIHN2bS1cdTAwM2VnYXBwaV9jcHUpO1xuJiM0MztcdH1cbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkoaXJxZmQsIFx1MDAyNnN2bS1cdTAwM2Vpcl9saXN0LCB2Y3B1X2xpc3QpIHtcbiBcdFx0dm9pZCAqZGF0YSA9IGlycWZkLVx1MDAzZWlycV9ieXBhc3NfZGF0YTtcbiBcbiBcdFx0aWYgKCEoYWN0aW9uIFx1MDAyNiBBVklDX1RPR0dMRV9PTl9PRkYpKVxuLVx0XHRcdFdBUk5fT05fT05DRShhbWRfaW9tbXVfdXBkYXRlX2dhKGRhdGEsIGNwdSwgZ2FfbG9nX2ludHIpKTtcbi1cdFx0ZWxzZSBpZiAoY3B1IFx1MDAzZT0gMClcbi1cdFx0XHRXQVJOX09OX09OQ0UoYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUoZGF0YSwgY3B1LCBnYV9sb2dfaW50cikpO1xuJiM0MztcdFx0XHRXQVJOX09OX09OQ0UoYW1kX2lvbW11X3VwZGF0ZV9nYShkYXRhLCBhcGljaWQsIHdha2V1cF9pbnRyLCBpc19ydW5uaW5nKSk7XG4mIzQzO1x0XHRlbHNlIGlmIChpc19ydW5uaW5nKVxuJiM0MztcdFx0XHRXQVJOX09OX09OQ0UoYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUoZGF0YSwgYXBpY2lkLCB3YWtldXBfaW50cixcbiYjNDM7XHRcdFx0XHRcdFx0XHRcdCAgIGlzX3J1bm5pbmcpKTtcbiBcdFx0ZWxzZVxuIFx0XHRcdFdBUk5fT05fT05DRShhbWRfaW9tbXVfZGVhY3RpdmF0ZV9ndWVzdF9tb2RlKGRhdGEpKTtcbiBcdH1cbkBAIC0xMDYzLDcgJiM0MzsxMTQ5LDcgQEAgc3RhdGljIHZvaWQgX19hdmljX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUsXG4gXHRXQVJOX09OX09OQ0UoZW50cnkgXHUwMDI2IEFWSUNfUEhZU0lDQUxfSURfRU5UUllfSVNfUlVOTklOR19NQVNLKTtcbiBcbiBcdGVudHJ5IFx1MDAyNj0gfihBVklDX1BIWVNJQ0FMX0lEX0VOVFJZX0hPU1RfUEhZU0lDQUxfSURfTUFTSyB8XG4tXHRcdCAgIEFWSUNfUEhZU0lDQUxfSURfRU5UUllfR0FfTE9HX0lOVFIpO1xuJiM0MztcdFx0ICAgQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9XQUtFVVBfSU5UUik7XG4gXHRlbnRyeSB8PSAoaF9waHlzaWNhbF9pZCBcdTAwMjYgQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9IT1NUX1BIWVNJQ0FMX0lEX01BU0spO1xuIFx0ZW50cnkgfD0gQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9JU19SVU5OSU5HX01BU0s7XG4gXG5AQCAtMTA4MCw3ICYjNDM7MTE2Niw3IEBAIHN0YXRpYyB2b2lkIF9fYXZpY192Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1LFxuIFxuIFx0V1JJVEVfT05DRShrdm1fc3ZtLVx1MDAzZWF2aWNfcGh5c2ljYWxfaWRfdGFibGVbdmNwdS1cdTAwM2V2Y3B1X2lkXSwgZW50cnkpO1xuIFxuLVx0YXZpY191cGRhdGVfaW9tbXVfdmNwdV9hZmZpbml0eSh2Y3B1LCBoX3BoeXNpY2FsX2lkLCBhY3Rpb24pO1xuJiM0MztcdGF2aWNfdXBkYXRlX2lvbW11X3ZjcHVfYWZmaW5pdHkodmNwdSwgaF9waHlzaWNhbF9pZCwgY3B1LCBhY3Rpb24pO1xuIFxuIFx0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2c3ZtLVx1MDAzZWlyX2xpc3RfbG9jaywgZmxhZ3MpO1xuIH1cbkBAIC0xMTIzLDkgJiM0MzsxMjA5LDkgQEAgc3RhdGljIHZvaWQgX19hdmljX3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZW51bSBhdmljX3ZjcHVfYWN0aW9uIGFjdGlvbilcbiBcdCAqL1xuIFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnN2bS1cdTAwM2Vpcl9saXN0X2xvY2ssIGZsYWdzKTtcbiBcbi1cdGF2aWNfdXBkYXRlX2lvbW11X3ZjcHVfYWZmaW5pdHkodmNwdSwgLTEsIGFjdGlvbik7XG4mIzQzO1x0YXZpY191cGRhdGVfaW9tbXVfdmNwdV9hZmZpbml0eSh2Y3B1LCAtMSwgLTEsIGFjdGlvbik7XG4gXG4tXHRXQVJOX09OX09OQ0UoZW50cnkgXHUwMDI2IEFWSUNfUEhZU0lDQUxfSURfRU5UUllfR0FfTE9HX0lOVFIpO1xuJiM0MztcdFdBUk5fT05fT05DRShlbnRyeSBcdTAwMjYgQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9XQUtFVVBfSU5UUik7XG4gXG4gXHQvKlxuIFx0ICogS2VlcCB0aGUgcHJldmlvdXMgQVBJQyBJRCBpbiB0aGUgZW50cnkgc28gdGhhdCBhIHJvZ3VlIGRvb3JiZWxsIGZyb21cbkBAIC0xMTM3LDExICYjNDM7MTIyMywxMSBAQCBzdGF0aWMgdm9pZCBfX2F2aWNfdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBlbnVtIGF2aWNfdmNwdV9hY3Rpb24gYWN0aW9uKVxuIFx0XHRXUklURV9PTkNFKGt2bV9zdm0tXHUwMDNlYXZpY19waHlzaWNhbF9pZF90YWJsZVt2Y3B1LVx1MDAzZXZjcHVfaWRdLCBlbnRyeSk7XG4gXG4gXHQvKlxuLVx0ICogTm90ZSEgIERvbiYjMzk7dCBzZXQgQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9HQV9MT0dfSU5UUiBpbiB0aGUgdGFibGUgYXNcbiYjNDM7XHQgKiBOb3RlISAgRG9uJiMzOTt0IHNldCBBVklDX1BIWVNJQ0FMX0lEX0VOVFJZX1dBS0VVUF9JTlRSIGluIHRoZSB0YWJsZSBhc1xuIFx0ICogaXQmIzM5O3MgYSBzeW50aGV0aWMgZmxhZyB0aGF0IHVzdXJwcyBhbiB1bnVzZWQgc2hvdWxkLWJlLXplcm8gYml0LlxuIFx0ICovXG4gXHRpZiAoYWN0aW9uIFx1MDAyNiBBVklDX1NUQVJUX0JMT0NLSU5HKVxuLVx0XHRlbnRyeSB8PSBBVklDX1BIWVNJQ0FMX0lEX0VOVFJZX0dBX0xPR19JTlRSO1xuJiM0MztcdFx0ZW50cnkgfD0gQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9XQUtFVVBfSU5UUjtcbiBcbiBcdHN2bS1cdTAwM2VhdmljX3BoeXNpY2FsX2lkX2VudHJ5ID0gZW50cnk7XG4gXG5AQCAtMTE3MSw5ICYjNDM7MTI1Nyw5IEBAIHZvaWQgYXZpY192Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gXHRcdC8qXG4gXHRcdCAqIFRoZSB2Q1BVIHdhcyBwcmVlbXB0ZWQgd2hpbGUgYmxvY2tpbmcsIGVuc3VyZSBpdHMgSVJURXMgYXJlXG4tXHRcdCAqIGNvbmZpZ3VyZWQgdG8gZ2VuZXJhdGUgR0EgTG9nIEludGVycnVwdHMuXG4mIzQzO1x0XHQgKiBjb25maWd1cmVkIHRvIHJlcXVlc3QgaG9zdCB3YWtldXAgbm90aWZpY2F0aW9uLlxuIFx0XHQgKi9cbi1cdFx0aWYgKCEoV0FSTl9PTl9PTkNFKCEoZW50cnkgXHUwMDI2IEFWSUNfUEhZU0lDQUxfSURfRU5UUllfR0FfTE9HX0lOVFIpKSkpXG4mIzQzO1x0XHRpZiAoIShXQVJOX09OX09OQ0UoIShlbnRyeSBcdTAwMjYgQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9XQUtFVVBfSU5UUikpKSlcbiBcdFx0XHRyZXR1cm47XG4gXHR9XG4gXG5AQCAtMTI5Niw2ICYjNDM7MTM4MiwyMSBAQCBzdGF0aWMgYm9vbCBfX2luaXQgYXZpY193YW50X2F2aWNfZW5hYmxlZCh2b2lkKVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBhdmljX2dhcHBpX3dha2V1cF9oYW5kbGVyKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpO1xuJiM0MztcdHN0cnVjdCBsaXN0X2hlYWQgKnZjcHVfd2FrZXVwX2xpc3QgPSBcdTAwMjZwZXJfY3B1KGdhcHBpX3ZjcHVfd2FrZXVwX2xpc3QsIGNwdSk7XG4mIzQzO1x0cmF3X3NwaW5sb2NrX3QgKnNwaW5sb2NrID0gXHUwMDI2cGVyX2NwdShnYXBwaV92Y3B1X3dha2V1cF9saXN0X2xvY2ssIGNwdSk7XG4mIzQzO1x0c3RydWN0IHZjcHVfc3ZtICpzdm07XG4mIzQzO1xuJiM0MztcdHJhd19zcGluX2xvY2soc3BpbmxvY2spO1xuJiM0MztcdGxpc3RfZm9yX2VhY2hfZW50cnkoc3ZtLCB2Y3B1X3dha2V1cF9saXN0LCBnYXBwaV92Y3B1X3dha2V1cF9saXN0KSB7XG4mIzQzO1x0XHRpZiAoa3ZtX2xhcGljX2ZpbmRfaGlnaGVzdF9pcnIoXHUwMDI2c3ZtLVx1MDAzZXZjcHUpIFx1MDAzZT0gMClcbiYjNDM7XHRcdFx0a3ZtX3ZjcHVfd2FrZV91cChcdTAwMjZzdm0tXHUwMDNldmNwdSk7XG4mIzQzO1x0fVxuJiM0MztcdHJhd19zcGluX3VubG9jayhzcGlubG9jayk7XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBOb3RlOlxuICAqIC0gVGhlIG1vZHVsZSBwYXJhbSBhdmljIGVuYWJsZSBib3RoIHhBUElDIGFuZCB4MkFQSUMgbW9kZS5cbkBAIC0xMzA0LDEyICYjNDM7MTQwNSwxOCBAQCBzdGF0aWMgYm9vbCBfX2luaXQgYXZpY193YW50X2F2aWNfZW5hYmxlZCh2b2lkKVxuICAqL1xuIGJvb2wgX19pbml0IGF2aWNfaGFyZHdhcmVfc2V0dXAodm9pZClcbiB7XG4mIzQzO1x0aW50IGNwdTtcbiBcdGF2aWMgPSBhdmljX3dhbnRfYXZpY19lbmFibGVkKCk7XG4gXHRpZiAoIWF2aWMpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdHByX2luZm8oXCYjMzQ7QVZJQyBlbmFibGVkXFxuXCYjMzQ7KTtcbiBcbiYjNDM7XHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XG4mIzQzO1x0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZwZXJfY3B1KGdhcHBpX3ZjcHVfd2FrZXVwX2xpc3QsIGNwdSkpO1xuJiM0MztcdFx0cmF3X3NwaW5fbG9ja19pbml0KFx1MDAyNnBlcl9jcHUoZ2FwcGlfdmNwdV93YWtldXBfbGlzdF9sb2NrLCBjcHUpKTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0LyogQVZJQyBpcyBhIHByZXJlcXVpc2l0ZSBmb3IgeDJBVklDLiAqL1xuIFx0eDJhdmljX2VuYWJsZWQgPSBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfWDJBVklDKTtcbiBcdGlmICh4MmF2aWNfZW5hYmxlZCkge1xuQEAgLTEzMzMsMTIgJiM0MzsxNDQwLDE2IEBAIGJvb2wgX19pbml0IGF2aWNfaGFyZHdhcmVfc2V0dXAodm9pZClcbiBcdFx0ZW5hYmxlX2lwaXYgPSBmYWxzZTtcbiBcbiBcdGFtZF9pb21tdV9yZWdpc3Rlcl9nYV9sb2dfbm90aWZpZXIoXHUwMDI2YXZpY19nYV9sb2dfbm90aWZpZXIpO1xuJiM0MztcdGt2bV9zZXRfcG9zdGVkX2ludHJfd2FrZXVwX2hhbmRsZXIoXHUwMDI2YXZpY19nYXBwaV93YWtldXBfaGFuZGxlcik7XG4gXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4gdm9pZCBhdmljX2hhcmR3YXJlX3Vuc2V0dXAodm9pZClcbiB7XG4tXHRpZiAoYXZpYylcbi1cdFx0YW1kX2lvbW11X3JlZ2lzdGVyX2dhX2xvZ19ub3RpZmllcihOVUxMKTtcbiYjNDM7XHRpZiAoIWF2aWMpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGFtZF9pb21tdV9yZWdpc3Rlcl9nYV9sb2dfbm90aWZpZXIoTlVMTCk7XG4mIzQzO1x0a3ZtX3NldF9wb3N0ZWRfaW50cl93YWtldXBfaGFuZGxlcihOVUxMKTtcbiB9XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uYyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmNcbmluZGV4IGUwMmEzOGRhNTI5NmUzLi5iNjg3MTMzZjg1MjhiYSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmNcbkBAIC0xMzU2LDYgJiM0MzsxMzU2LDggQEAgc3RhdGljIHZvaWQgc3ZtX3ZjcHVfZnJlZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gXHRXQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXHUwMDI2c3ZtLVx1MDAzZWlyX2xpc3QpKTtcbiBcbiYjNDM7XHRhdmljX2Rlc3Ryb3lfdmNwdShzdm0pO1xuJiM0MztcbiBcdHN2bV9sZWF2ZV9uZXN0ZWQodmNwdSk7XG4gXHRzdm1fZnJlZV9uZXN0ZWQoc3ZtKTtcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uaFxuaW5kZXggNTEzNzQxNmJlNTkzZDcuLjQ3ZDViYjVkNzEwM2RhIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uaFxuQEAgLTM2Miw2ICYjNDM7MzYyLDEwIEBAIHN0cnVjdCB2Y3B1X3N2bSB7XG4gXG4gXHQvKiBHdWVzdCBHSUYgdmFsdWUsIHVzZWQgd2hlbiB2R0lGIGlzIG5vdCBlbmFibGVkICovXG4gXHRib29sIGd1ZXN0X2dpZjtcbiYjNDM7XG4mIzQzO1x0LyogR0FQUEkgcmVsYXRlZCBmaWVsZHMgKi9cbiYjNDM7XHRzdHJ1Y3QgbGlzdF9oZWFkIGdhcHBpX3ZjcHVfd2FrZXVwX2xpc3Q7XG4mIzQzO1x0aW50IGdhcHBpX2NwdTtcbiB9O1xuIFxuIHN0cnVjdCBzdm1fY3B1X2RhdGEge1xuQEAgLTkwOSw2ICYjNDM7OTEzLDcgQEAgdm9pZCBhdmljX2luaXRfdm1jYihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgc3RydWN0IHZtY2IgKnZtY2IpO1xuIGludCBhdmljX2luY29tcGxldGVfaXBpX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIGludCBhdmljX3VuYWNjZWxlcmF0ZWRfYWNjZXNzX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIGludCBhdmljX2luaXRfdmNwdShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSk7XG4mIzQzO3ZvaWQgYXZpY19kZXN0cm95X3ZjcHUoc3RydWN0IHZjcHVfc3ZtICpzdm0pO1xuIHZvaWQgYXZpY192Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KTtcbiB2b2lkIGF2aWNfdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiB2b2lkIGF2aWNfYXBpY3ZfcG9zdF9zdGF0ZV9yZXN0b3JlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pb21tdS9hbWQvYW1kX2lvbW11LmggYi9kcml2ZXJzL2lvbW11L2FtZC9hbWRfaW9tbXUuaFxuaW5kZXggODM0ZDhmYWJmYmEzODcuLjA0NDE3OWNhYjEyZTRiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9pb21tdS9hbWQvYW1kX2lvbW11LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvaW9tbXUvYW1kL2FtZF9pb21tdS5oXG5AQCAtNDEsNiAmIzQzOzQxLDcgQEAgaW50IGFtZF9pb21tdV9lbmFibGUodm9pZCk7XG4gdm9pZCBhbWRfaW9tbXVfZGlzYWJsZSh2b2lkKTtcbiBpbnQgYW1kX2lvbW11X3JlZW5hYmxlKGludCBtb2RlKTtcbiBpbnQgYW1kX2lvbW11X2VuYWJsZV9mYXVsdGluZyh1bnNpZ25lZCBpbnQgY3B1KTtcbiYjNDM7ZXh0ZXJuIGJvb2wgYW1kX2lvbW11X2dhcHBpO1xuIGV4dGVybiBpbnQgYW1kX2lvbW11X2d1ZXN0X2lyO1xuIGV4dGVybiBlbnVtIHByb3RlY3Rpb25fZG9tYWluX21vZGUgYW1kX2lvbW11X3BndGFibGU7XG4gZXh0ZXJuIGludCBhbWRfaW9tbXVfZ3B0X2xldmVsO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW9tbXUvYW1kL2FtZF9pb21tdV90eXBlcy5oIGIvZHJpdmVycy9pb21tdS9hbWQvYW1kX2lvbW11X3R5cGVzLmhcbmluZGV4IGY5ZjcxODA4Nzg5MzAzLi5kZTBiMjMzMDY5NDRiOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvaW9tbXUvYW1kL2FtZF9pb21tdV90eXBlcy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2lvbW11L2FtZC9hbWRfaW9tbXVfdHlwZXMuaFxuQEAgLTk0LDYgJiM0Mzs5NCw3IEBAXG4gI2RlZmluZSBGRUFUVVJFX1gyQVBJQ1x0XHRCSVRfVUxMKDIpXG4gI2RlZmluZSBGRUFUVVJFX05YXHRcdEJJVF9VTEwoMylcbiAjZGVmaW5lIEZFQVRVUkVfR1RcdFx0QklUX1VMTCg0KVxuJiM0MzsjZGVmaW5lIEZFQVRVUkVfR0FQUElcdFx0QklUX1VMTCg1KVxuICNkZWZpbmUgRkVBVFVSRV9JQVx0XHRCSVRfVUxMKDYpXG4gI2RlZmluZSBGRUFUVVJFX0dBXHRcdEJJVF9VTEwoNylcbiAjZGVmaW5lIEZFQVRVUkVfSEVcdFx0QklUX1VMTCg4KVxuQEAgLTExMyw2ICYjNDM7MTE0LDcgQEBcbiAvKiBFeHRlbmRlZCBGZWF0dXJlIDIgQml0cyAqL1xuICNkZWZpbmUgRkVBVFVSRV9TRVZTTlBJT19TVVBcdEJJVF9VTEwoMSlcbiAjZGVmaW5lIEZFQVRVUkVfR0NSM1RSUE1PREVcdEJJVF9VTEwoMylcbiYjNDM7I2RlZmluZSBGRUFUVVJFX0dBUFBJRElTU1VQXHRCSVRfVUxMKDQpXG4gI2RlZmluZSBGRUFUVVJFX1NOUEFWSUNTVVBcdEdFTk1BU0tfVUxMKDcsIDUpXG4gI2RlZmluZSBGRUFUVVJFX1NOUEFWSUNTVVBfR0FNKHgpIFxcXG4gXHQoRklFTERfR0VUKEZFQVRVUkVfU05QQVZJQ1NVUCwgeCkgPT0gMHgxKVxuQEAgLTE5MCw2ICYjNDM7MTkyLDcgQEBcbiAjZGVmaW5lIENPTlRST0xfRVBIX0VOXHRcdDQ1XG4gI2RlZmluZSBDT05UUk9MX1hUX0VOXHRcdDUwXG4gI2RlZmluZSBDT05UUk9MX0lOVENBUFhUX0VOXHQ1MVxuJiM0MzsjZGVmaW5lIENPTlRST0xfR0FQUElfRU5cdDU1XG4gI2RlZmluZSBDT05UUk9MX0dDUjNUUlBNT0RFXHQ1OFxuICNkZWZpbmUgQ09OVFJPTF9JUlRDQUNIRURJU1x0NTlcbiAjZGVmaW5lIENPTlRST0xfU05QQVZJQ19FTlx0NjFcbkBAIC0xMDA0LDcgJiM0MzsxMDA3LDggQEAgdW5pb24gaXJ0ZV9nYV9sbyB7XG4gXHRcdCAgICBub19mYXVsdFx0OiAxLFxuIFx0XHQgICAgLyogLS0tLS0tICovXG4gXHRcdCAgICBnYV9sb2dfaW50clx0OiAxLFxuLVx0XHQgICAgcnN2ZDFcdDogMyxcbiYjNDM7XHRcdCAgICByc3ZkMVx0OiAyLFxuJiM0MztcdFx0ICAgIGdhcHBpX2Rpc1x0OiAxLFxuIFx0XHQgICAgaXNfcnVuXHQ6IDEsXG4gXHRcdCAgICAvKiAtLS0tLS0gKi9cbiBcdFx0ICAgIGd1ZXN0X21vZGVcdDogMSxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMgYi9kcml2ZXJzL2lvbW11L2FtZC9pbml0LmNcbmluZGV4IDNiZGIzODBkMjNlOWE5Li43ZDJiMWMyNGY2ZWNjYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvaW9tbXUvYW1kL2luaXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jXG5AQCAtMTYwLDYgJiM0MzsxNjAsOSBAQCB1OCBhbWRfaW9tbXVfaHB0X2xldmVsO1xuIC8qIEd1ZXN0IHBhZ2UgdGFibGUgbGV2ZWwgKi9cbiBpbnQgYW1kX2lvbW11X2dwdF9sZXZlbCA9IFBBR0VfTU9ERV80X0xFVkVMO1xuIFxuJiM0Mztib29sIGFtZF9pb21tdV9nYXBwaTtcbiYjNDM7RVhQT1JUX1NZTUJPTChhbWRfaW9tbXVfZ2FwcGkpO1xuJiM0MztcbiBpbnQgYW1kX2lvbW11X2d1ZXN0X2lyID0gQU1EX0lPTU1VX0dVRVNUX0lSX1ZBUElDO1xuIHN0YXRpYyBpbnQgYW1kX2lvbW11X3h0X21vZGUgPSBJUlFfUkVNQVBfWEFQSUNfTU9ERTtcbiBcbkBAIC00NjIsNiAmIzQzOzQ2NSw5IEBAIHN0YXRpYyB2b2lkIGlvbW11X2Rpc2FibGUoc3RydWN0IGFtZF9pb21tdSAqaW9tbXUpXG4gXHRpb21tdV9mZWF0dXJlX2Rpc2FibGUoaW9tbXUsIENPTlRST0xfR0FMT0dfRU4pO1xuIFx0aW9tbXVfZmVhdHVyZV9kaXNhYmxlKGlvbW11LCBDT05UUk9MX0dBSU5UX0VOKTtcbiBcbiYjNDM7XHQvKiBEaXNhYmxlIElPTU1VIEdBUFBJICovXG4mIzQzO1x0aW9tbXVfZmVhdHVyZV9kaXNhYmxlKGlvbW11LCBDT05UUk9MX0dBUFBJX0VOKTtcbiYjNDM7XG4gXHQvKiBEaXNhYmxlIElPTU1VIFBQUiBsb2dnaW5nICovXG4gXHRpb21tdV9mZWF0dXJlX2Rpc2FibGUoaW9tbXUsIENPTlRST0xfUFBSTE9HX0VOKTtcbiBcdGlvbW11X2ZlYXR1cmVfZGlzYWJsZShpb21tdSwgQ09OVFJPTF9QUFJJTlRfRU4pO1xuQEAgLTI5OTYsNiAmIzQzOzMwMDIsMTMgQEAgc3RhdGljIHZvaWQgZW5hYmxlX2lvbW11c192YXBpYyh2b2lkKVxuIFx0c3RydWN0IGFtZF9pb21tdSAqaW9tbXU7XG4gXG4gXHRmb3JfZWFjaF9pb21tdShpb21tdSkge1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIERpc2FibGUgR0FQUEksIGRvIG5vdCBjaGVjayBhbWRfaW9tbXVfZ2FwcGkgYXMgaXQgbWF5IGJlXG4mIzQzO1x0XHQgKiBmYWxzZSBpbiBuZXcga2V4ZWMga2VybmVsIGV2ZW4gdGhvdWdoIHByZXZpb3VzIGtlcm5lbCBoYXNcbiYjNDM7XHRcdCAqIGVuYWJsZWQgaXQuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlvbW11X2ZlYXR1cmVfZGlzYWJsZShpb21tdSwgQ09OVFJPTF9HQVBQSV9FTik7XG4mIzQzO1xuIFx0XHQvKlxuIFx0XHQgKiBEaXNhYmxlIEdBTG9nIGlmIGFscmVhZHkgcnVubmluZy4gSXQgY291bGQgaGF2ZSBiZWVuIGVuYWJsZWRcbiBcdFx0ICogaW4gdGhlIHByZXZpb3VzIGJvb3QgYmVmb3JlIGtkdW1wLlxuQEAgLTMwMzUsMTAgJiM0MzszMDQ4LDE5IEBAIHN0YXRpYyB2b2lkIGVuYWJsZV9pb21tdXNfdmFwaWModm9pZClcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuJiM0MztcdGlmIChhbWRfaW9tbXVfZ2FwcGkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICEoY2hlY2tfZmVhdHVyZShGRUFUVVJFX0dBUFBJKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgICBBTURfSU9NTVVfR1VFU1RfSVJfVkFQSUMoYW1kX2lvbW11X2d1ZXN0X2lyKSkpIHtcbiYjNDM7XHRcdHByX3dhcm4oXCYjMzQ7R0FQUEkgaXMgbm90IHN1cHBvcnRlZC5cXG5cJiMzNDspO1xuJiM0MztcdFx0YW1kX2lvbW11X2dhcHBpID0gZmFsc2U7XG4mIzQzO1x0fVxuJiM0MztcbiBcdC8qIEVuYWJsaW5nIEdBTSBhbmQgU05QQVZJQyBzdXBwb3J0ICovXG4gXHRmb3JfZWFjaF9pb21tdShpb21tdSkge1xuLVx0XHRpZiAoaW9tbXVfaW5pdF9nYV9sb2coaW9tbXUpIHx8XG4tXHRcdCAgICBpb21tdV9nYV9sb2dfZW5hYmxlKGlvbW11KSlcbiYjNDM7XHRcdGlmIChhbWRfaW9tbXVfZ2FwcGkpXG4mIzQzO1x0XHRcdGlvbW11X2ZlYXR1cmVfZW5hYmxlKGlvbW11LCBDT05UUk9MX0dBUFBJX0VOKTtcbiYjNDM7XHRcdGVsc2UgaWYgKGlvbW11X2luaXRfZ2FfbG9nKGlvbW11KSB8fFxuJiM0MztcdFx0XHQgaW9tbXVfZ2FfbG9nX2VuYWJsZShpb21tdSkpXG4gXHRcdFx0cmV0dXJuO1xuIFxuIFx0XHRpb21tdV9mZWF0dXJlX2VuYWJsZShpb21tdSwgQ09OVFJPTF9HQU1fRU4pO1xuQEAgLTMwNDcsNyAmIzQzOzMwNjksOCBAQCBzdGF0aWMgdm9pZCBlbmFibGVfaW9tbXVzX3ZhcGljKHZvaWQpXG4gXHR9XG4gXG4gXHRhbWRfaW9tbXVfaXJxX29wcy5jYXBhYmlsaXR5IHw9ICgxIFx1MDAzY1x1MDAzYyBJUlFfUE9TVElOR19DQVApO1xuLVx0cHJfaW5mbyhcJiMzNDtWaXJ0dWFsIEFQSUMgZW5hYmxlZFxcblwmIzM0Oyk7XG4mIzQzO1x0cHJfaW5mbyhcJiMzNDtWaXJ0dWFsIEFQSUMgZW5hYmxlZCB3aXRoICVzXFxuXCYjMzQ7LFxuJiM0MztcdFx0YW1kX2lvbW11X2dhcHBpID8gXCYjMzQ7R0FQUElcJiMzNDsgOiBcJiMzNDtHQUxPR1wmIzM0Oyk7XG4gI2VuZGlmXG4gfVxuIFxuQEAgLTM3MzgsNiAmIzQzOzM3NjEsOCBAQCBzdGF0aWMgaW50IF9faW5pdCBwYXJzZV9hbWRfaW9tbXVfb3B0aW9ucyhjaGFyICpzdHIpXG4gXHRcdH0gZWxzZSBpZiAoc3RybmNtcChzdHIsIFwmIzM0O3YyX3Bnc2l6ZXNfb25seVwmIzM0OywgMTUpID09IDApIHtcbiBcdFx0XHRwcl9pbmZvKFwmIzM0O1Jlc3RyaWN0aW5nIFYxIHBhZ2Utc2l6ZXMgdG8gNEtpQi8yTWlCLzFHaUJcJiMzNDspO1xuIFx0XHRcdGFtZF9pb21tdV9wZ3NpemVfYml0bWFwID0gQU1EX0lPTU1VX1BHU0laRVNfVjI7XG4mIzQzO1x0XHR9IGVsc2UgaWYgKHN0cm5jbXAoc3RyLCBcJiMzNDtnYXBwaVwmIzM0OywgNSkgPT0gMCkge1xuJiM0MztcdFx0XHRhbWRfaW9tbXVfZ2FwcGkgPSB0cnVlO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdHByX25vdGljZShcJiMzNDtVbmtub3duIG9wdGlvbiAtICYjMzk7JXMmIzM5O1xcblwmIzM0Oywgc3RyKTtcbiBcdFx0fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmMgYi9kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jXG5pbmRleCA1N2RjOGZhYmM3ZDliOS4uN2VlYmY0NzQ1YTY3ODIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jXG5AQCAtMzk1OSwxOSAmIzQzOzM5NTksMjkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBpcnFfZG9tYWluX29wcyBhbWRfaXJfZG9tYWluX29wcyA9IHtcbiBcdC5kZWFjdGl2YXRlID0gaXJxX3JlbWFwcGluZ19kZWFjdGl2YXRlLFxuIH07XG4gXG4tc3RhdGljIHZvaWQgX19hbWRfaW9tbXVfdXBkYXRlX2dhKHN0cnVjdCBpcnRlX2dhICplbnRyeSwgaW50IGNwdSxcbi1cdFx0XHRcdCAgYm9vbCBnYV9sb2dfaW50cilcbiYjNDM7c3RhdGljIHZvaWQgX19hbWRfaW9tbXVfdXBkYXRlX2dhKHN0cnVjdCBpcnRlX2dhICplbnRyeSwgaW50IGFwaWNpZCxcbiYjNDM7XHRcdFx0XHQgIGJvb2wgd2FrZXVwX2ludHIsIGJvb2wgaXNfcnVubmluZylcbiB7XG4tXHRpZiAoY3B1IFx1MDAzZT0gMCkge1xuJiM0MztcdGlmIChpc19ydW5uaW5nKSB7XG4gXHRcdGVudHJ5LVx1MDAzZWxvLmZpZWxkc192YXBpYy5kZXN0aW5hdGlvbiA9XG4tXHRcdFx0XHRcdEFQSUNJRF9UT19JUlRFX0RFU1RfTE8oY3B1KTtcbiYjNDM7XHRcdFx0XHRcdEFQSUNJRF9UT19JUlRFX0RFU1RfTE8oYXBpY2lkKTtcbiBcdFx0ZW50cnktXHUwMDNlaGkuZmllbGRzLmRlc3RpbmF0aW9uID1cbi1cdFx0XHRcdFx0QVBJQ0lEX1RPX0lSVEVfREVTVF9ISShjcHUpO1xuJiM0MztcdFx0XHRcdFx0QVBJQ0lEX1RPX0lSVEVfREVTVF9ISShhcGljaWQpO1xuIFx0XHRlbnRyeS1cdTAwM2Vsby5maWVsZHNfdmFwaWMuaXNfcnVuID0gdHJ1ZTtcbiBcdFx0ZW50cnktXHUwMDNlbG8uZmllbGRzX3ZhcGljLmdhX2xvZ19pbnRyID0gZmFsc2U7XG4gXHR9IGVsc2Uge1xuLVx0XHRlbnRyeS1cdTAwM2Vsby5maWVsZHNfdmFwaWMuaXNfcnVuID0gZmFsc2U7XG4tXHRcdGVudHJ5LVx1MDAzZWxvLmZpZWxkc192YXBpYy5nYV9sb2dfaW50ciA9IGdhX2xvZ19pbnRyO1xuJiM0MztcdFx0aWYgKGFtZF9pb21tdV9nYXBwaSkge1xuJiM0MztcdFx0XHRlbnRyeS1cdTAwM2Vsby5maWVsZHNfdmFwaWMuZ2FwcGlfZGlzID0gIXdha2V1cF9pbnRyIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHRcdFx0XHRjaGVja19mZWF0dXJlMihGRUFUVVJFX0dBUFBJRElTU1VQKTtcbiYjNDM7XHRcdFx0ZW50cnktXHUwMDNlbG8uZmllbGRzX3ZhcGljLmlzX3J1biA9IGZhbHNlO1xuJiM0MztcdFx0XHRlbnRyeS1cdTAwM2Vsby5maWVsZHNfdmFwaWMuZGVzdGluYXRpb24gPVxuJiM0MztcdFx0XHRcdFx0XHRBUElDSURfVE9fSVJURV9ERVNUX0xPKGFwaWNpZCk7XG4mIzQzO1x0XHRcdGVudHJ5LVx1MDAzZWhpLmZpZWxkcy5kZXN0aW5hdGlvbiA9XG4mIzQzO1x0XHRcdFx0XHRcdEFQSUNJRF9UT19JUlRFX0RFU1RfSEkoYXBpY2lkKTtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdGVudHJ5LVx1MDAzZWxvLmZpZWxkc192YXBpYy5pc19ydW4gPSBmYWxzZTtcbiYjNDM7XHRcdFx0ZW50cnktXHUwMDNlbG8uZmllbGRzX3ZhcGljLmdhX2xvZ19pbnRyID0gd2FrZXVwX2ludHI7XG4mIzQzO1x0XHR9XG4gXHR9XG4gfVxuIFxuQEAgLTM5NzksMjAgJiM0MzszOTg5LDIwIEBAIHN0YXRpYyB2b2lkIF9fYW1kX2lvbW11X3VwZGF0ZV9nYShzdHJ1Y3QgaXJ0ZV9nYSAqZW50cnksIGludCBjcHUsXG4gICogVXBkYXRlIHRoZSBwQ1BVIGluZm9ybWF0aW9uIGZvciBhbiBJUlRFIHRoYXQgaXMgY29uZmlndXJlZCB0byBwb3N0IElSUXMgdG9cbiAgKiBhIHZDUFUsIHdpdGhvdXQgaXNzdWluZyBhbiBJT01NVSBpbnZhbGlkYXRpb24gZm9yIHRoZSBJUlRFLlxuICAqXG4tICogSWYgdGhlIHZDUFUgaXMgYXNzb2NpYXRlZCB3aXRoIGEgcENQVSAoQGNwdSBcdTAwM2U9IDApLCBjb25maWd1cmUgdGhlIERlc3RpbmF0aW9uXG4tICogd2l0aCB0aGUgcENQVSYjMzk7cyBBUElDIElELCBzZXQgSXNSdW4sIGFuZCBjbGVhciBHQUxvZ0ludHIuICBJZiB0aGUgdkNQVSBpc24mIzM5O3Rcbi0gKiBhc3NvY2lhdGVkIHdpdGggYSBwQ1BVIChAY3B1IFx1MDAzYyAwKSwgY2xlYXIgSXNSdW4gYW5kIHNldC9jbGVhciBHQUxvZ0ludHIgYmFzZWRcbi0gKiBvbiBpbnB1dCBmcm9tIHRoZSBjYWxsZXIgKGUuZy4gS1ZNIG9ubHkgcmVxdWVzdHMgR0FMb2dJbnRyIHdoZW4gdGhlIHZDUFUgaXNcbi0gKiBibG9ja2luZyBhbmQgcmVxdWlyZXMgYSBub3RpZmljYXRpb24gd2FrZSBldmVudCkuICBJLmUuIHRyZWF0IHZDUFVzIHRoYXQgYXJlXG4tICogYXNzb2NpYXRlZCB3aXRoIGEgcENQVSBhcyBydW5uaW5nLiAgVGhpcyBBUEkgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCB3aGVuIGFcbi0gKiB2Q1BVIGlzIHNjaGVkdWxlZCBpbi9vdXQgKG9yIHN0b3BzIHJ1bm5pbmcgZm9yIGFueSByZWFzb24pLCB0byBkbyBhIGZhc3Rcbi0gKiB1cGRhdGUgb2YgSXNSdW4sIEdBTG9nSW50ciwgYW5kIChjb25kaXRpb25hbGx5KSBEZXN0aW5hdGlvbi5cbiYjNDM7ICogSWYgdGhlIHZDUFUgaXMgc2NoZWR1bGVkIHRvIHJ1biBvbiBwQ1BVIChAaXNfcnVubmluZyA9IDEpLCBjb25maWd1cmUgdGhlXG4mIzQzOyAqIERlc3RpbmF0aW9uIHdpdGggdGhlIHBDUFUmIzM5O3MgQVBJQyBJRCwgc2V0IElzUnVuLCBhbmQgY2xlYXIgR0FMb2dJbnRyLiBJZiB0aGVcbiYjNDM7ICogdkNQVSBpcyBzY2hlZHVsZWQgb3V0IChAaXNfcnVubmluZyA9IDApLCBjbGVhciBJc1J1biBhbmQgc2V0L2NsZWFyIEdBTG9nSW50clxuJiM0MzsgKiBhbmQgR0FQUElEaXMgYmFzZWQgb24gaW5wdXQgZnJvbSB0aGUgY2FsbGVyIChlLmcuIEtWTSBvbmx5IHJlcXVlc3RzXG4mIzQzOyAqIHdha2V1cF9pbnRyIHdoZW4gdGhlIHZDUFUgaXMgYmxvY2tpbmcgYW5kIHJlcXVpcmVzIGEgbm90aWZpY2F0aW9uIHdha2VcbiYjNDM7ICogZXZlbnQpLiBUaGlzIEFQSSBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIHdoZW4gYSB2Q1BVIGlzIHNjaGVkdWxlZCBpbi9vdXQgKG9yXG4mIzQzOyAqIHN0b3BzIHJ1bm5pbmcgZm9yIGFueSByZWFzb24pLCB0byBkbyBhIGZhc3QgdXBkYXRlIG9mIElzUnVuLCBHQUxvZ0ludHIsXG4mIzQzOyAqIEdBUFBJRGlzIGFuZCAoY29uZGl0aW9uYWxseSkgRGVzdGluYXRpb24uXG4gICpcbi0gKiBQZXIgdGhlIElPTU1VIHNwZWMsIHRoZSBEZXN0aW5hdGlvbiwgSXNSdW4sIGFuZCBHQVRhZyBmaWVsZHMgYXJlIG5vdCBjYWNoZWRcbi0gKiBhbmQgdGh1cyBkb24mIzM5O3QgcmVxdWlyZSBhbiBpbnZhbGlkYXRpb24gdG8gZW5zdXJlIHRoZSBJT01NVSBjb25zdW1lcyBmcmVzaFxuLSAqIGluZm9ybWF0aW9uLlxuJiM0MzsgKiBQZXIgdGhlIElPTU1VIHNwZWMsIHRoZSBEZXN0aW5hdGlvbiwgSXNSdW4sIEdBVGFnIGFuZCBHQVBQSURpcyBmaWVsZHMgYXJlXG4mIzQzOyAqIG5vdCBjYWNoZWQgYW5kIHRodXMgZG9uJiMzOTt0IHJlcXVpcmUgYW4gaW52YWxpZGF0aW9uIHRvIGVuc3VyZSB0aGUgSU9NTVVcbiYjNDM7ICogY29uc3VtZXMgZnJlc2ggaW5mb3JtYXRpb24uXG4gICovXG4taW50IGFtZF9pb21tdV91cGRhdGVfZ2Eodm9pZCAqZGF0YSwgaW50IGNwdSwgYm9vbCBnYV9sb2dfaW50cilcbiYjNDM7aW50IGFtZF9pb21tdV91cGRhdGVfZ2Eodm9pZCAqZGF0YSwgaW50IGFwaWNpZCwgYm9vbCB3YWtldXBfaW50ciwgYm9vbCBpc19ydW5uaW5nKVxuIHtcbiBcdHN0cnVjdCBhbWRfaXJfZGF0YSAqaXJfZGF0YSA9IChzdHJ1Y3QgYW1kX2lyX2RhdGEgKilkYXRhO1xuIFx0c3RydWN0IGlydGVfZ2EgKmVudHJ5ID0gKHN0cnVjdCBpcnRlX2dhICopIGlyX2RhdGEtXHUwMDNlZW50cnk7XG5AQCAtNDAwNiwxNCAmIzQzOzQwMTYsMTQgQEAgaW50IGFtZF9pb21tdV91cGRhdGVfZ2Eodm9pZCAqZGF0YSwgaW50IGNwdSwgYm9vbCBnYV9sb2dfaW50cilcbiBcdGlmICghaXJfZGF0YS1cdTAwM2Vpb21tdSlcbiBcdFx0cmV0dXJuIC1FTk9ERVY7XG4gXG4tXHRfX2FtZF9pb21tdV91cGRhdGVfZ2EoZW50cnksIGNwdSwgZ2FfbG9nX2ludHIpO1xuJiM0MztcdF9fYW1kX2lvbW11X3VwZGF0ZV9nYShlbnRyeSwgYXBpY2lkLCB3YWtldXBfaW50ciwgaXNfcnVubmluZyk7XG4gXG4gXHRyZXR1cm4gX19tb2RpZnlfaXJ0ZV9nYShpcl9kYXRhLVx1MDAzZWlvbW11LCBpcl9kYXRhLVx1MDAzZWlycV8yX2lydGUuZGV2aWQsXG4gXHRcdFx0XHRpcl9kYXRhLVx1MDAzZWlycV8yX2lydGUuaW5kZXgsIGVudHJ5KTtcbiB9XG4gRVhQT1JUX1NZTUJPTChhbWRfaW9tbXVfdXBkYXRlX2dhKTtcbiBcbi1pbnQgYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUodm9pZCAqZGF0YSwgaW50IGNwdSwgYm9vbCBnYV9sb2dfaW50cilcbiYjNDM7aW50IGFtZF9pb21tdV9hY3RpdmF0ZV9ndWVzdF9tb2RlKHZvaWQgKmRhdGEsIGludCBhcGljaWQsIGJvb2wgd2FrZXVwX2ludHIsIGJvb2wgaXNfcnVubmluZylcbiB7XG4gXHRzdHJ1Y3QgYW1kX2lyX2RhdGEgKmlyX2RhdGEgPSAoc3RydWN0IGFtZF9pcl9kYXRhICopZGF0YTtcbiBcdHN0cnVjdCBpcnRlX2dhICplbnRyeSA9IChzdHJ1Y3QgaXJ0ZV9nYSAqKSBpcl9kYXRhLVx1MDAzZWVudHJ5O1xuQEAgLTQwMzYsNyAmIzQzOzQwNDYsNyBAQCBpbnQgYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUodm9pZCAqZGF0YSwgaW50IGNwdSwgYm9vbCBnYV9sb2dfaW50cilcbiBcdGVudHJ5LVx1MDAzZWhpLmZpZWxkcy52ZWN0b3IgICAgICAgICAgICA9IGlyX2RhdGEtXHUwMDNlZ2FfdmVjdG9yO1xuIFx0ZW50cnktXHUwMDNlbG8uZmllbGRzX3ZhcGljLmdhX3RhZyAgICAgID0gaXJfZGF0YS1cdTAwM2VnYV90YWc7XG4gXG4tXHRfX2FtZF9pb21tdV91cGRhdGVfZ2EoZW50cnksIGNwdSwgZ2FfbG9nX2ludHIpO1xuJiM0MztcdF9fYW1kX2lvbW11X3VwZGF0ZV9nYShlbnRyeSwgYXBpY2lkLCB3YWtldXBfaW50ciwgaXNfcnVubmluZyk7XG4gXG4gXHRyZXR1cm4gbW9kaWZ5X2lydGVfZ2EoaXJfZGF0YS1cdTAwM2Vpb21tdSwgaXJfZGF0YS1cdTAwM2VpcnFfMl9pcnRlLmRldmlkLFxuIFx0XHRcdCAgICAgIGlyX2RhdGEtXHUwMDNlaXJxXzJfaXJ0ZS5pbmRleCwgZW50cnkpO1xuQEAgLTQxMDcsOCAmIzQzOzQxMTcsOSBAQCBzdGF0aWMgaW50IGFtZF9pcl9zZXRfdmNwdV9hZmZpbml0eShzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEsIHZvaWQgKmluZm8pXG4gXHRcdGlyX2RhdGEtXHUwMDNlZ2FfdmVjdG9yID0gcGlfZGF0YS1cdTAwM2V2ZWN0b3I7XG4gXHRcdGlyX2RhdGEtXHUwMDNlZ2FfdGFnID0gcGlfZGF0YS1cdTAwM2VnYV90YWc7XG4gXHRcdGlmIChwaV9kYXRhLVx1MDAzZWlzX2d1ZXN0X21vZGUpXG4tXHRcdFx0cmV0ID0gYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUoaXJfZGF0YSwgcGlfZGF0YS1cdTAwM2VjcHUsXG4tXHRcdFx0XHRcdFx0XHQgICAgcGlfZGF0YS1cdTAwM2VnYV9sb2dfaW50cik7XG4mIzQzO1x0XHRcdHJldCA9IGFtZF9pb21tdV9hY3RpdmF0ZV9ndWVzdF9tb2RlKGlyX2RhdGEsIHBpX2RhdGEtXHUwMDNlYXBpY2lkLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgICBwaV9kYXRhLVx1MDAzZXdha2V1cF9pbnRyLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgICBwaV9kYXRhLVx1MDAzZWlzX3J1bm5pbmcpO1xuIFx0XHRlbHNlXG4gXHRcdFx0cmV0ID0gYW1kX2lvbW11X2RlYWN0aXZhdGVfZ3Vlc3RfbW9kZShpcl9kYXRhKTtcbiBcdH0gZWxzZSB7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hbWQtaW9tbXUuaCBiL2luY2x1ZGUvbGludXgvYW1kLWlvbW11LmhcbmluZGV4IGVkY2VlOWY1MzM1YTZmLi43MjlkODJjNGUwOWUyNyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYW1kLWlvbW11LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYW1kLWlvbW11LmhcbkBAIC0zMCw4ICYjNDM7MzAsMTAgQEAgc3RhdGljIGlubGluZSB2b2lkIGFtZF9pb21tdV9kZXRlY3Qodm9pZCkgeyB9XG4gLyogSU9NTVUgQVZJQyBGdW5jdGlvbiAqL1xuIGV4dGVybiBpbnQgYW1kX2lvbW11X3JlZ2lzdGVyX2dhX2xvZ19ub3RpZmllcihpbnQgKCpub3RpZmllcikodTMyKSk7XG4gXG4tZXh0ZXJuIGludCBhbWRfaW9tbXVfdXBkYXRlX2dhKHZvaWQgKmRhdGEsIGludCBjcHUsIGJvb2wgZ2FfbG9nX2ludHIpO1xuLWV4dGVybiBpbnQgYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUodm9pZCAqZGF0YSwgaW50IGNwdSwgYm9vbCBnYV9sb2dfaW50cik7XG4mIzQzO2V4dGVybiBpbnQgYW1kX2lvbW11X3VwZGF0ZV9nYSh2b2lkICpkYXRhLCBpbnQgYXBpY2lkLCBib29sIHdha2V1cF9pbnRyLFxuJiM0MztcdFx0XHQgICAgICAgYm9vbCBpc19ydW5uaW5nKTtcbiYjNDM7ZXh0ZXJuIGludCBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZSh2b2lkICpkYXRhLCBpbnQgYXBpY2lkLCBib29sIHdha2V1cF9pbnRyLFxuJiM0MztcdFx0XHRcdFx0IGJvb2wgaXNfcnVubmluZyk7XG4gZXh0ZXJuIGludCBhbWRfaW9tbXVfZGVhY3RpdmF0ZV9ndWVzdF9tb2RlKHZvaWQgKmRhdGEpO1xuIFxuICNlbHNlIC8qIGRlZmluZWQoQ09ORklHX0FNRF9JT01NVSkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0lSUV9SRU1BUCkgKi9cbkBAIC00MiwxMiAmIzQzOzQ0LDE0IEBAIGFtZF9pb21tdV9yZWdpc3Rlcl9nYV9sb2dfbm90aWZpZXIoaW50ICgqbm90aWZpZXIpKHUzMikpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgYW1kX2lvbW11X3VwZGF0ZV9nYSh2b2lkICpkYXRhLCBpbnQgY3B1LCBib29sIGdhX2xvZ19pbnRyKVxuJiM0MztzdGF0aWMgaW5saW5lIGludCBhbWRfaW9tbXVfdXBkYXRlX2dhKHZvaWQgKmRhdGEsIGludCBhcGljaWQsIGJvb2wgd2FrZXVwX2ludHIsXG4mIzQzO1x0XHRcdFx0ICAgICAgYm9vbCBpc19ydW5uaW5nKVxuIHtcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZSh2b2lkICpkYXRhLCBpbnQgY3B1LCBib29sIGdhX2xvZ19pbnRyKVxuJiM0MztzdGF0aWMgaW5saW5lIGludCBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZSh2b2lkICpkYXRhLCBpbnQgYXBpY2lkLCBib29sIHdha2V1cF9pbnRyLFxuJiM0MztcdFx0XHRcdFx0XHRib29sIGlzX3J1bm5pbmcpXG4ge1xuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTc2LDQgJiM0Mzs4MCw1IEBAIHN0YXRpYyBpbmxpbmUgaW50IGFtZF9pb21tdV9zbnBfZGlzYWJsZSh2b2lkKSB7IHJldHVybiAwOyB9XG4gc3RhdGljIGlubGluZSBib29sIGFtZF9pb21tdV9zZXZfdGlvX3N1cHBvcnRlZCh2b2lkKSB7IHJldHVybiBmYWxzZTsgfVxuICNlbmRpZlxuIFxuJiM0MztleHRlcm4gYm9vbCBhbWRfaW9tbXVfZ2FwcGk7XG4gI2VuZGlmIC8qIF9BU01fWDg2X0FNRF9JT01NVV9IICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTM6MzY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7LAogICAgJiMzNDtBTURfSU9NTVUmIzM0OywKICAgICYjMzQ7SVJRX1JFTUFQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YXZpY19hZGRfdmNwdV90b19nYXBwaV93YWtldXBfbGlzdCYjMzQ7LAogICAgJiMzNDthdmljX3JlbW92ZV92Y3B1X2Zyb21fZ2FwcGlfd2FrZXVwX2xpc3QmIzM0OywKICAgICYjMzQ7YXZpY19nYXBwaV93YWtldXBfaGFuZGxlciYjMzQ7LAogICAgJiMzNDthdmljX3BpX3VwZGF0ZV9pcnRlJiMzNDssCiAgICAmIzM0O2F2aWNfdXBkYXRlX2lvbW11X3ZjcHVfYWZmaW5pdHkmIzM0OywKICAgICYjMzQ7X19hbWRfaW9tbXVfdXBkYXRlX2dhJiMzNDssCiAgICAmIzM0O2FtZF9pb21tdV91cGRhdGVfZ2EmIzM0OywKICAgICYjMzQ7YW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBHQVBQSSAoR3Vlc3QgQVBJQyBQb3N0ZWQgSW50ZXJydXB0cykgc3VwcG9ydCBmb3IgQU1EIElPTU1VIGFuZCBLVk0gU1ZNIEFWSUMuIEl0IG1vZGlmaWVzIHRoZSBJUlRFIGNvbmZpZ3VyYXRpb24gZm9yIHBvc3RlZCBpbnRlcnJ1cHRzIGFuZCBpbnRyb2R1Y2VzIGEgbmV3IHdha2V1cCBsaXN0IGZvciBHQVBQSSBpbiBLVk0uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIHZpcnR1YWxpemF0aW9uIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjMDBjNWFjZGQ0MmI0MGRiMjBmNDFjMDE5Zjk5MTY4OTU2MzgwZTFlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBKdWwgMTMgMTM6MzY6MjIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0CmluZGV4IDk3MDA3ZjRmNjlkNGU4Li5kMjdmMTBjYmIwMDRjYyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQKQEAgLTQ1NSw3ICYjNDM7NDU1LDggQEAgS2VybmVsIHBhcmFtZXRlcnMKIAkJCQkgICAgICAgICAgdG8gNCBLaUIuCiAJCQl2Ml9wZ3NpemVzX29ubHkgLSBMaW1pdCBwYWdlLXNpemVzIHVzZWQgZm9yIHYxIHBhZ2UtdGFibGVzCiAJCQkJICAgICAgICAgIHRvIDRLaUIvMk1pYi8xR2lCLgotCiYjNDM7CQkJZ2FwcGkJCS0gVXNlIEdBUFBJIGluc3RlYWQgb2YgR0FMT0cgZm9yIHZDUFUKJiM0MzsJCQkJCSAgd2FrZXVwIG5vdGlmaWNhdGlvbi4KIAogCWFtZF9pb21tdV9kdW1wPQlbSFcsWDg2LTY0XQogCQkJRW5hYmxlIEFNRCBJT01NVSBkcml2ZXIgb3B0aW9uIHRvIGR1bXAgdGhlIEFDUEkgdGFibGUKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lycV9yZW1hcHBpbmcuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lycV9yZW1hcHBpbmcuaAppbmRleCAzN2I5NGY0ODRlZjMzOC4uYWYwY2RmYTMyYzQ0N2YgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lycV9yZW1hcHBpbmcuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcnFfcmVtYXBwaW5nLmgKQEAgLTM1LDggJiM0MzszNSw5IEBAIHN0cnVjdCBhbWRfaW9tbXVfcGlfZGF0YSB7CiAJdTY0IHZhcGljX2FkZHI7CQkvKiBQaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSB2Q1BVJiMzOTtzIHZBUElDLiAqLwogCXUzMiBnYV90YWc7CiAJdTMyIHZlY3RvcjsJCS8qIEd1ZXN0IHZlY3RvciBvZiB0aGUgaW50ZXJydXB0ICovCi0JaW50IGNwdTsKLQlib29sIGdhX2xvZ19pbnRyOwomIzQzOwlpbnQgYXBpY2lkOwomIzQzOwlib29sIHdha2V1cF9pbnRyOwomIzQzOwlib29sIGlzX3J1bm5pbmc7CiAJYm9vbCBpc19ndWVzdF9tb2RlOwogCXZvaWQgKmlyX2RhdGE7CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaAppbmRleCBiY2ZlYjVlN2MwZWRmMi4uYWRkOGI3Mjc0Y2MyZjggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oCkBAIC0yNTksMTEgJiM0MzsyNTksMTIgQEAgc3RydWN0IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkgdm1jYl9jb250cm9sX2FyZWEgewogI2RlZmluZSBBVklDX0xPR0lDQUxfSURfRU5UUllfVkFMSURfTUFTSwkJKDEgJmx0OyZsdDsgMzEpCiAKIC8qCi0gKiBHQV9MT0dfSU5UUiBpcyBhIHN5bnRoZXRpYyBmbGFnIHRoYXQmIzM5O3MgbmV2ZXIgcHJvcGFnYXRlZCB0byBoYXJkd2FyZS12aXNpYmxlCi0gKiB0YWJsZXMuICBHQV9MT0dfSU5UUiBpcyBzZXQgaWYgdGhlIHZDUFUgbmVlZHMgZGV2aWNlIHBvc3RlZCBJUlFzIHRvIGdlbmVyYXRlCi0gKiBHQSBsb2cgaW50ZXJydXB0cyB0byB3YWtlIHRoZSB2Q1BVIChiZWNhdXNlIGl0JiMzOTtzIGJsb2NraW5nIG9yIGFib3V0IHRvIGJsb2NrKS4KJiM0MzsgKiBXQUtFVVBfSU5UUiBpcyBhIHN5bnRoZXRpYyBmbGFnIHRoYXQmIzM5O3MgbmV2ZXIgcHJvcGFnYXRlZCB0byBoYXJkd2FyZS12aXNpYmxlCiYjNDM7ICogdGFibGVzLiAgV0FLRVVQX0lOVFIgaXMgc2V0IGlmIHRoZSB2Q1BVIG5lZWRzIGRldmljZSBwb3N0ZWQgSVJRcyB0byBnZW5lcmF0ZQomIzQzOyAqIEdBIGxvZy9HQVBQSSBpbnRlcnJ1cHRzIHRvIHdha2UgdGhlIHZDUFUgKGJlY2F1c2UgaXQmIzM5O3MgYmxvY2tpbmcgb3IgYWJvdXQgdG8KJiM0MzsgKiBibG9jaykuCiAgKi8KLSNkZWZpbmUgQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9HQV9MT0dfSU5UUgkJQklUX1VMTCg2MSkKJiM0MzsjZGVmaW5lIEFWSUNfUEhZU0lDQUxfSURfRU5UUllfV0FLRVVQX0lOVFIJCUJJVF9VTEwoNjEpCiAKICNkZWZpbmUgQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9IT1NUX1BIWVNJQ0FMX0lEX01BU0sJR0VOTUFTS19VTEwoMTEsIDApCiAjZGVmaW5lIEFWSUNfUEhZU0lDQUxfSURfRU5UUllfQkFDS0lOR19QQUdFX01BU0sJR0VOTUFTS19VTEwoNTEsIDEyKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9hdmljLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYwppbmRleCBjZGQ1YTZkYzY0NmYxMS4uOTgyYTU5ODg1MzJmZjQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9zdm0vYXZpYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9zdm0vYXZpYy5jCkBAIC02Myw2ICYjNDM7NjMsOSBAQAogCWdhX3RhZzsJCQkJCQkJCVwKIH0pCiAKJiM0MztzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGxpc3RfaGVhZCwgZ2FwcGlfdmNwdV93YWtldXBfbGlzdCk7CiYjNDM7c3RhdGljIERFRklORV9QRVJfQ1BVKHJhd19zcGlubG9ja190LCBnYXBwaV92Y3B1X3dha2V1cF9saXN0X2xvY2spOwomIzQzOwogc3RhdGljX2Fzc2VydChfX0FWSUNfR0FUQUcoQVZJQ19WTV9JRF9NQVNLLCBBVklDX1ZDUFVfSURYX01BU0spID09IC0xdSk7CiAKICNkZWZpbmUgQVZJQ19BVVRPX01PREUgLTEKQEAgLTg3NCw2ICYjNDM7ODc3LDkgQEAgaW50IGF2aWNfaW5pdF92Y3B1KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKQogCUlOSVRfTElTVF9IRUFEKCZhbXA7c3ZtLSZndDtpcl9saXN0KTsKIAlyYXdfc3Bpbl9sb2NrX2luaXQoJmFtcDtzdm0tJmd0O2lyX2xpc3RfbG9jayk7CiAKJiM0MzsJSU5JVF9MSVNUX0hFQUQoJmFtcDtzdm0tJmd0O2dhcHBpX3ZjcHVfd2FrZXVwX2xpc3QpOwomIzQzOwlzdm0tJmd0O2dhcHBpX2NwdSA9IC0xOwomIzQzOwogCWlmICghZW5hYmxlX2FwaWN2IHx8ICFpcnFjaGlwX2luX2tlcm5lbCh2Y3B1LSZndDtrdm0pKQogCQlyZXR1cm4gMDsKIApAQCAtODg2LDYgJiM0Mzs4OTIsNDIgQEAgaW50IGF2aWNfaW5pdF92Y3B1KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKQogCXJldHVybiByZXQ7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBhdmljX2FkZF92Y3B1X3RvX2dhcHBpX3dha2V1cF9saXN0KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBpbnQgY3B1KQomIzQzO3sKJiM0MzsJc3RydWN0IGxpc3RfaGVhZCAqd2FrZXVwX2xpc3Q7CiYjNDM7CXJhd19zcGlubG9ja190ICpzcGlubG9jazsKJiM0MzsKJiM0MzsJaWYgKFdBUk5fT04odW5saWtlbHkoY3B1ICZsdDsgMCkpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwl3YWtldXBfbGlzdCA9ICZhbXA7cGVyX2NwdShnYXBwaV92Y3B1X3dha2V1cF9saXN0LCBjcHUpOwomIzQzOwlzcGlubG9jayA9ICZhbXA7cGVyX2NwdShnYXBwaV92Y3B1X3dha2V1cF9saXN0X2xvY2ssIGNwdSk7CiYjNDM7CWd1YXJkKHJhd19zcGlubG9ja19pcnFzYXZlKShzcGlubG9jayk7CiYjNDM7CWlmIChsaXN0X2VtcHR5KCZhbXA7c3ZtLSZndDtnYXBwaV92Y3B1X3dha2V1cF9saXN0KSkKJiM0MzsJCWxpc3RfYWRkX3RhaWwoJmFtcDtzdm0tJmd0O2dhcHBpX3ZjcHVfd2FrZXVwX2xpc3QsIHdha2V1cF9saXN0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgYXZpY19yZW1vdmVfdmNwdV9mcm9tX2dhcHBpX3dha2V1cF9saXN0KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBpbnQgY3B1KQomIzQzO3sKJiM0MzsJcmF3X3NwaW5sb2NrX3QgKnNwaW5sb2NrOwomIzQzOwomIzQzOwlpZiAoV0FSTl9PTih1bmxpa2VseShjcHUgJmx0OyAwKSkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXNwaW5sb2NrID0gJmFtcDtwZXJfY3B1KGdhcHBpX3ZjcHVfd2FrZXVwX2xpc3RfbG9jaywgY3B1KTsKJiM0MzsJZ3VhcmQocmF3X3NwaW5sb2NrX2lycXNhdmUpKHNwaW5sb2NrKTsKJiM0MzsJaWYgKCFsaXN0X2VtcHR5KCZhbXA7c3ZtLSZndDtnYXBwaV92Y3B1X3dha2V1cF9saXN0KSkKJiM0MzsJCWxpc3RfZGVsX2luaXQoJmFtcDtzdm0tJmd0O2dhcHBpX3ZjcHVfd2FrZXVwX2xpc3QpOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIGF2aWNfZGVzdHJveV92Y3B1KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKQomIzQzO3sKJiM0MzsJaWYgKHN2bS0mZ3Q7Z2FwcGlfY3B1ICE9IC0xICZhbXA7JmFtcDsgYW1kX2lvbW11X2dhcHBpKSB7CiYjNDM7CQlhdmljX3JlbW92ZV92Y3B1X2Zyb21fZ2FwcGlfd2FrZXVwX2xpc3Qoc3ZtLCBzdm0tJmd0O2dhcHBpX2NwdSk7CiYjNDM7CQlzdm0tJmd0O2dhcHBpX2NwdSA9IC0xOwomIzQzOwl9CiYjNDM7fQomIzQzOwogdm9pZCBhdmljX2FwaWN2X3Bvc3Rfc3RhdGVfcmVzdG9yZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJYXZpY19oYW5kbGVfZGZyX3VwZGF0ZSh2Y3B1KTsKQEAgLTg5NiwxMyAmIzQzOzkzOCwxOCBAQCBzdGF0aWMgdm9pZCBzdm1faXJfbGlzdF9kZWwoc3RydWN0IGt2bV9rZXJuZWxfaXJxZmQgKmlycWZkKQogewogCXN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGlycWZkLSZndDtpcnFfYnlwYXNzX3ZjcHU7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsJc3RydWN0IHZjcHVfc3ZtICpzdm07CiAKIAlpZiAoIXZjcHUpCiAJCXJldHVybjsKIAotCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3RvX3N2bSh2Y3B1KS0mZ3Q7aXJfbGlzdF9sb2NrLCBmbGFncyk7CiYjNDM7CXN2bSA9IHRvX3N2bSh2Y3B1KTsKJiM0MzsKJiM0MzsJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZhbXA7c3ZtLSZndDtpcl9saXN0X2xvY2ssIGZsYWdzKTsKIAlsaXN0X2RlbCgmYW1wO2lycWZkLSZndDt2Y3B1X2xpc3QpOwotCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7dG9fc3ZtKHZjcHUpLSZndDtpcl9saXN0X2xvY2ssIGZsYWdzKTsKJiM0MzsJaWYgKGFtZF9pb21tdV9nYXBwaSAmYW1wOyZhbXA7IGxpc3RfZW1wdHkoJmFtcDtzdm0tJmd0O2lyX2xpc3QpKQomIzQzOwkJYXZpY19yZW1vdmVfdmNwdV9mcm9tX2dhcHBpX3dha2V1cF9saXN0KHN2bSwgc3ZtLSZndDtnYXBwaV9jcHUpOwomIzQzOwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3N2bS0mZ3Q7aXJfbGlzdF9sb2NrLCBmbGFncyk7CiB9CiAKIGludCBhdmljX3BpX3VwZGF0ZV9pcnRlKHN0cnVjdCBrdm1fa2VybmVsX2lycWZkICppcnFmZCwgc3RydWN0IGt2bSAqa3ZtLApAQCAtOTIzLDggJiM0Mzs5NzAsNiBAQCBpbnQgYXZpY19waV91cGRhdGVfaXJ0ZShzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFmZCAqaXJxZmQsIHN0cnVjdCBrdm0gKmt2bSwKIAkJICogaWYgQVZJQyBpcyBlbmFibGVkL3VuaW5oaWJpdGVkIGluIHRoZSBmdXR1cmUuCiAJCSAqLwogCQlzdHJ1Y3QgYW1kX2lvbW11X3BpX2RhdGEgcGlfZGF0YSA9IHsKLQkJCS5nYV90YWcgPSBBVklDX0dBVEFHKHRvX2t2bV9zdm0oa3ZtKS0mZ3Q7YXZpY192bV9pZCwKLQkJCQkJICAgICB2Y3B1LSZndDt2Y3B1X2lkeCksCiAJCQkuaXNfZ3Vlc3RfbW9kZSA9IGt2bV92Y3B1X2FwaWN2X2FjdGl2ZSh2Y3B1KSwKIAkJCS52YXBpY19hZGRyID0gYXZpY19nZXRfYmFja2luZ19wYWdlX2FkZHJlc3ModG9fc3ZtKHZjcHUpKSwKIAkJCS52ZWN0b3IgPSB2ZWN0b3IsCkBAIC05MzIsNiAmIzQzOzk3Nyw3IEBAIGludCBhdmljX3BpX3VwZGF0ZV9pcnRlKHN0cnVjdCBrdm1fa2VybmVsX2lycWZkICppcnFmZCwgc3RydWN0IGt2bSAqa3ZtLAogCQlzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTsKIAkJdTY0IGVudHJ5OwogCQlpbnQgcmV0OwomIzQzOwkJYm9vbCBpc192Y3B1X3dhaXRpbmcgPSBmYWxzZTsKIAogCQkvKgogCQkgKiBQcmV2ZW50IHRoZSB2Q1BVIGZyb20gYmVpbmcgc2NoZWR1bGVkIG91dCBvciBtaWdyYXRlZCB1bnRpbApAQCAtOTQ3LDE3ICYjNDM7OTkzLDMzIEBAIGludCBhdmljX3BpX3VwZGF0ZV9pcnRlKHN0cnVjdCBrdm1fa2VybmVsX2lycWZkICppcnFmZCwgc3RydWN0IGt2bSAqa3ZtLAogCQkgKiBzY2hlZHVsZWQgb3V0LCBLVk0gd2lsbCB1cGRhdGUgdGhlIHBDUFUgaW5mbyB3aGVuIHRoZSB2Q1BVCiAJCSAqIGlzIGF3YWtlbmVkIGFuZC9vciBzY2hlZHVsZWQgaW4uICBTZWUgYWxzbyBhdmljX3ZjcHVfbG9hZCgpLgogCQkgKi8KJiM0MzsJCWlmIChhbWRfaW9tbXVfZ2FwcGkpCiYjNDM7CQkJcGlfZGF0YS5nYV90YWcgPSBQT1NURURfSU5UUl9XQUtFVVBfVkVDVE9SOwomIzQzOwkJZWxzZQomIzQzOwkJCXBpX2RhdGEuZ2FfdGFnID0gQVZJQ19HQVRBRyh0b19rdm1fc3ZtKGt2bSktJmd0O2F2aWNfdm1faWQsCiYjNDM7CQkJCQkJICAgIHZjcHUtJmd0O3ZjcHVfaWR4KTsKJiM0MzsKIAkJZW50cnkgPSBzdm0tJmd0O2F2aWNfcGh5c2ljYWxfaWRfZW50cnk7CiAJCWlmIChlbnRyeSAmYW1wOyBBVklDX1BIWVNJQ0FMX0lEX0VOVFJZX0lTX1JVTk5JTkdfTUFTSykgewotCQkJcGlfZGF0YS5jcHUgPSBlbnRyeSAmYW1wOyBBVklDX1BIWVNJQ0FMX0lEX0VOVFJZX0hPU1RfUEhZU0lDQUxfSURfTUFTSzsKJiM0MzsJCQlwaV9kYXRhLmFwaWNpZCA9IGVudHJ5ICZhbXA7IEFWSUNfUEhZU0lDQUxfSURfRU5UUllfSE9TVF9QSFlTSUNBTF9JRF9NQVNLOwomIzQzOwkJCXBpX2RhdGEuaXNfcnVubmluZyA9IHRydWU7CiAJCX0gZWxzZSB7Ci0JCQlwaV9kYXRhLmNwdSA9IC0xOwotCQkJcGlfZGF0YS5nYV9sb2dfaW50ciA9IGVudHJ5ICZhbXA7IEFWSUNfUEhZU0lDQUxfSURfRU5UUllfR0FfTE9HX0lOVFI7CiYjNDM7CQkJcGlfZGF0YS5hcGljaWQgPSAtMTsKJiM0MzsJCQlwaV9kYXRhLndha2V1cF9pbnRyID0gZW50cnkgJmFtcDsgQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9XQUtFVVBfSU5UUjsKJiM0MzsJCQlwaV9kYXRhLmlzX3J1bm5pbmcgPSBmYWxzZTsKJiM0MzsKJiM0MzsJCQlpZiAoYW1kX2lvbW11X2dhcHBpKSB7CiYjNDM7CQkJCXBpX2RhdGEuYXBpY2lkID0ga3ZtX2NwdV9nZXRfYXBpY2lkKHN2bS0mZ3Q7Z2FwcGlfY3B1KTsKJiM0MzsJCQkJaWYgKGxpc3RfZW1wdHkoJmFtcDtzdm0tJmd0O2lyX2xpc3QpKSB7CiYjNDM7CQkJCQlhdmljX2FkZF92Y3B1X3RvX2dhcHBpX3dha2V1cF9saXN0KHN2bSwgc3ZtLSZndDtnYXBwaV9jcHUpOwomIzQzOwkJCQkJaXNfdmNwdV93YWl0aW5nID0gdHJ1ZTsKJiM0MzsJCQkJfQomIzQzOwkJCX0KIAkJfQogCiAJCXJldCA9IGlycV9zZXRfdmNwdV9hZmZpbml0eShob3N0X2lycSwgJmFtcDtwaV9kYXRhKTsKIAkJaWYgKHJldCkKLQkJCXJldHVybiByZXQ7CiYjNDM7CQkJZ290byBnYXBwaV9lcnJfb3V0OwogCiAJCS8qCiAJCSAqIFJldmVydCB0byBsZWdhY3kgbW9kZSBpZiB0aGUgSU9NTVUgZGlkbiYjMzk7dCBwcm92aWRlIG1ldGFkYXRhCkBAIC05NjYsMTIgJiM0MzsxMDI4LDE3IEBAIGludCBhdmljX3BpX3VwZGF0ZV9pcnRlKHN0cnVjdCBrdm1fa2VybmVsX2lycWZkICppcnFmZCwgc3RydWN0IGt2bSAqa3ZtLAogCQkgKi8KIAkJaWYgKFdBUk5fT05fT05DRSghcGlfZGF0YS5pcl9kYXRhKSkgewogCQkJaXJxX3NldF92Y3B1X2FmZmluaXR5KGhvc3RfaXJxLCBOVUxMKTsKLQkJCXJldHVybiAtRUlPOwomIzQzOwkJCXJldCA9IC1FSU87CiYjNDM7CQkJZ290byBnYXBwaV9lcnJfb3V0OwogCQl9CiAKIAkJaXJxZmQtJmd0O2lycV9ieXBhc3NfZGF0YSA9IHBpX2RhdGEuaXJfZGF0YTsKIAkJbGlzdF9hZGQoJmFtcDtpcnFmZC0mZ3Q7dmNwdV9saXN0LCAmYW1wO3N2bS0mZ3Q7aXJfbGlzdCk7CiAJCXJldHVybiAwOwomIzQzO2dhcHBpX2Vycl9vdXQ6CiYjNDM7CQlpZiAoaXNfdmNwdV93YWl0aW5nKQomIzQzOwkJCWF2aWNfcmVtb3ZlX3ZjcHVfZnJvbV9nYXBwaV93YWtldXBfbGlzdChzdm0sIHN2bS0mZ3Q7Z2FwcGlfY3B1KTsKJiM0MzsJCXJldHVybiByZXQ7CiAJfQogCXJldHVybiBpcnFfc2V0X3ZjcHVfYWZmaW5pdHkoaG9zdF9pcnEsIE5VTEwpOwogfQpAQCAtOTkxLDIzICYjNDM7MTA1OCwyNCBAQCBlbnVtIGF2aWNfdmNwdV9hY3Rpb24gewogCSAqIE5vIHVuaXF1ZSBhY3Rpb24gaXMgcmVxdWlyZWQgdG8gZGVhbCB3aXRoIGEgdkNQVSB0aGF0IHN0b3BzL3N0YXJ0cwogCSAqIHJ1bm5pbmcuICBBIHZDUFUgdGhhdCBzdGFydHMgcnVubmluZyBieSBkZWZpbml0aW9uIHN0b3BzIGJsb2NraW5nIGFzCiAJICogd2VsbCwgYW5kIGEgdkNQVSB0aGF0IHN0b3BzIHJ1bm5pbmcgY2FuJiMzOTt0IGhhdmUgYmVlbiBibG9ja2luZywgaS5lLgotCSAqIGRvZXNuJiMzOTt0IG5lZWQgdG8gdG9nZ2xlIEdBTG9nSW50ci4KJiM0MzsJICogZG9lc24mIzM5O3QgbmVlZCB0byB0b2dnbGUgaG9zdCB3YWtldXAgbm90aWZpY2F0aW9uLgogCSAqLwogCUFWSUNfU1RBUlRfUlVOTklORwk9IDAsCiAJQVZJQ19TVE9QX1JVTk5JTkcJPSAwLAogCiAJLyoKLQkgKiBXaGVuIGEgdkNQVSBzdGFydHMgYmxvY2tpbmcsIEtWTSBuZWVkcyB0byBzZXQgdGhlIEdBTG9nSW50ciBmbGFnCi0JICogaW50IGFsbCBhc3NvY2lhdGVkIElSVEVzIHNvIHRoYXQgS1ZNIGNhbiB3YWtlIHRoZSB2Q1BVIGlmIGFuIElSUSBpcwotCSAqIHNlbnQgdG8gdGhlIHZDUFUuCiYjNDM7CSAqIFdoZW4gYSB2Q1BVIHN0YXJ0cyBibG9ja2luZywgS1ZNIG5lZWRzIHRvIHJlcXVlc3QgaG9zdCB3YWtldXAKJiM0MzsJICogbm90aWZpY2F0aW9uIGluIGFsbCBhc3NvY2lhdGVkIElSVEVzIHNvIHRoYXQgS1ZNIGNhbiB3YWtlIHRoZSB2Q1BVCiYjNDM7CSAqIGlmIGFuIElSUSBpcyBzZW50IHRvIHRoZSB2Q1BVLgogCSAqLwogCUFWSUNfU1RBUlRfQkxPQ0tJTkcJPSBCSVQoMSksCiB9OwogCi1zdGF0aWMgdm9pZCBhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSwKLQkJCQkJICAgIGVudW0gYXZpY192Y3B1X2FjdGlvbiBhY3Rpb24pCiYjNDM7c3RhdGljIHZvaWQgYXZpY191cGRhdGVfaW9tbXVfdmNwdV9hZmZpbml0eShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBhcGljaWQsCiYjNDM7CQkJCQkgICAgaW50IGNwdSwgZW51bSBhdmljX3ZjcHVfYWN0aW9uIGFjdGlvbikKIHsKLQlib29sIGdhX2xvZ19pbnRyID0gKGFjdGlvbiAmYW1wOyBBVklDX1NUQVJUX0JMT0NLSU5HKTsKJiM0MzsJYm9vbCB3YWtldXBfaW50ciA9IChhY3Rpb24gJmFtcDsgQVZJQ19TVEFSVF9CTE9DS0lORyk7CiYjNDM7CWJvb2wgaXNfcnVubmluZyA9IGFwaWNpZCAmZ3Q7PSAwOwogCXN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpOwogCXN0cnVjdCBrdm1fa2VybmVsX2lycWZkICppcnFmZDsKIApAQCAtMTAxNSwxOCAmIzQzOzEwODMsMzYgQEAgc3RhdGljIHZvaWQgYXZpY191cGRhdGVfaW9tbXVfdmNwdV9hZmZpbml0eShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUsCiAKIAkvKgogCSAqIEhlcmUsIHdlIGdvIHRocm91Z2ggdGhlIHBlci12Y3B1IGlyX2xpc3QgdG8gdXBkYXRlIGFsbCBleGlzdGluZwotCSAqIGludGVycnVwdCByZW1hcHBpbmcgdGFibGUgZW50cnkgdGFyZ2V0aW5nIHRoaXMgdmNwdS4KJiM0MzsJICogaW50ZXJydXB0IHJlbWFwcGluZyB0YWJsZSBlbnRyaWVzIHRhcmdldGluZyB0aGlzIHZjcHUuCiAJICovCi0JaWYgKGxpc3RfZW1wdHkoJmFtcDtzdm0tJmd0O2lyX2xpc3QpKQomIzQzOwlpZiAobGlzdF9lbXB0eSgmYW1wO3N2bS0mZ3Q7aXJfbGlzdCkpIHsKJiM0MzsJCWlmIChhbWRfaW9tbXVfZ2FwcGkgJmFtcDsmYW1wOyBjcHUgJmd0Oz0gMCkKJiM0MzsJCQlzdm0tJmd0O2dhcHBpX2NwdSA9IGNwdTsKIAkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChpc19ydW5uaW5nICZhbXA7JmFtcDsgYW1kX2lvbW11X2dhcHBpKSB7CiYjNDM7CQlpZiAoc3ZtLSZndDtnYXBwaV9jcHUgIT0gLTEpCiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBIYW5kbGUgaW5pdGlhbCBzdGF0ZSB3aGVuIHZDUFUgaXMgbG9hZGVkIGZvciB0aGUKJiM0MzsJCQkgKiBmaXJzdCB0aW1lIHdpdGhvdXQgYW55IElSUSBhZmZpbml0eS4KJiM0MzsJCQkgKi8KJiM0MzsJCQlhdmljX3JlbW92ZV92Y3B1X2Zyb21fZ2FwcGlfd2FrZXVwX2xpc3Qoc3ZtLCBzdm0tJmd0O2dhcHBpX2NwdSk7CiYjNDM7CiYjNDM7CQlzdm0tJmd0O2dhcHBpX2NwdSA9IGNwdTsgLyogU3RvcmUgY3B1IG51bWJlciBhcyB0YXJnZXQgZm9yIEdBUFBJICovCiYjNDM7CX0gZWxzZSBpZiAoYW1kX2lvbW11X2dhcHBpKSB7CiYjNDM7CQlhcGljaWQgPSBrdm1fY3B1X2dldF9hcGljaWQoc3ZtLSZndDtnYXBwaV9jcHUpOwomIzQzOwkJYXZpY19hZGRfdmNwdV90b19nYXBwaV93YWtldXBfbGlzdChzdm0sIHN2bS0mZ3Q7Z2FwcGlfY3B1KTsKJiM0MzsJfQogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShpcnFmZCwgJmFtcDtzdm0tJmd0O2lyX2xpc3QsIHZjcHVfbGlzdCkgewogCQl2b2lkICpkYXRhID0gaXJxZmQtJmd0O2lycV9ieXBhc3NfZGF0YTsKIAogCQlpZiAoIShhY3Rpb24gJmFtcDsgQVZJQ19UT0dHTEVfT05fT0ZGKSkKLQkJCVdBUk5fT05fT05DRShhbWRfaW9tbXVfdXBkYXRlX2dhKGRhdGEsIGNwdSwgZ2FfbG9nX2ludHIpKTsKLQkJZWxzZSBpZiAoY3B1ICZndDs9IDApCi0JCQlXQVJOX09OX09OQ0UoYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUoZGF0YSwgY3B1LCBnYV9sb2dfaW50cikpOwomIzQzOwkJCVdBUk5fT05fT05DRShhbWRfaW9tbXVfdXBkYXRlX2dhKGRhdGEsIGFwaWNpZCwgd2FrZXVwX2ludHIsIGlzX3J1bm5pbmcpKTsKJiM0MzsJCWVsc2UgaWYgKGlzX3J1bm5pbmcpCiYjNDM7CQkJV0FSTl9PTl9PTkNFKGFtZF9pb21tdV9hY3RpdmF0ZV9ndWVzdF9tb2RlKGRhdGEsIGFwaWNpZCwgd2FrZXVwX2ludHIsCiYjNDM7CQkJCQkJCQkgICBpc19ydW5uaW5nKSk7CiAJCWVsc2UKIAkJCVdBUk5fT05fT05DRShhbWRfaW9tbXVfZGVhY3RpdmF0ZV9ndWVzdF9tb2RlKGRhdGEpKTsKIAl9CkBAIC0xMDYzLDcgJiM0MzsxMTQ5LDcgQEAgc3RhdGljIHZvaWQgX19hdmljX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUsCiAJV0FSTl9PTl9PTkNFKGVudHJ5ICZhbXA7IEFWSUNfUEhZU0lDQUxfSURfRU5UUllfSVNfUlVOTklOR19NQVNLKTsKIAogCWVudHJ5ICZhbXA7PSB+KEFWSUNfUEhZU0lDQUxfSURfRU5UUllfSE9TVF9QSFlTSUNBTF9JRF9NQVNLIHwKLQkJICAgQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9HQV9MT0dfSU5UUik7CiYjNDM7CQkgICBBVklDX1BIWVNJQ0FMX0lEX0VOVFJZX1dBS0VVUF9JTlRSKTsKIAllbnRyeSB8PSAoaF9waHlzaWNhbF9pZCAmYW1wOyBBVklDX1BIWVNJQ0FMX0lEX0VOVFJZX0hPU1RfUEhZU0lDQUxfSURfTUFTSyk7CiAJZW50cnkgfD0gQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9JU19SVU5OSU5HX01BU0s7CiAKQEAgLTEwODAsNyAmIzQzOzExNjYsNyBAQCBzdGF0aWMgdm9pZCBfX2F2aWNfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSwKIAogCVdSSVRFX09OQ0Uoa3ZtX3N2bS0mZ3Q7YXZpY19waHlzaWNhbF9pZF90YWJsZVt2Y3B1LSZndDt2Y3B1X2lkXSwgZW50cnkpOwogCi0JYXZpY191cGRhdGVfaW9tbXVfdmNwdV9hZmZpbml0eSh2Y3B1LCBoX3BoeXNpY2FsX2lkLCBhY3Rpb24pOwomIzQzOwlhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5KHZjcHUsIGhfcGh5c2ljYWxfaWQsIGNwdSwgYWN0aW9uKTsKIAogCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7c3ZtLSZndDtpcl9saXN0X2xvY2ssIGZsYWdzKTsKIH0KQEAgLTExMjMsOSAmIzQzOzEyMDksOSBAQCBzdGF0aWMgdm9pZCBfX2F2aWNfdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBlbnVtIGF2aWNfdmNwdV9hY3Rpb24gYWN0aW9uKQogCSAqLwogCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3N2bS0mZ3Q7aXJfbGlzdF9sb2NrLCBmbGFncyk7CiAKLQlhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5KHZjcHUsIC0xLCBhY3Rpb24pOwomIzQzOwlhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5KHZjcHUsIC0xLCAtMSwgYWN0aW9uKTsKIAotCVdBUk5fT05fT05DRShlbnRyeSAmYW1wOyBBVklDX1BIWVNJQ0FMX0lEX0VOVFJZX0dBX0xPR19JTlRSKTsKJiM0MzsJV0FSTl9PTl9PTkNFKGVudHJ5ICZhbXA7IEFWSUNfUEhZU0lDQUxfSURfRU5UUllfV0FLRVVQX0lOVFIpOwogCiAJLyoKIAkgKiBLZWVwIHRoZSBwcmV2aW91cyBBUElDIElEIGluIHRoZSBlbnRyeSBzbyB0aGF0IGEgcm9ndWUgZG9vcmJlbGwgZnJvbQpAQCAtMTEzNywxMSAmIzQzOzEyMjMsMTEgQEAgc3RhdGljIHZvaWQgX19hdmljX3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZW51bSBhdmljX3ZjcHVfYWN0aW9uIGFjdGlvbikKIAkJV1JJVEVfT05DRShrdm1fc3ZtLSZndDthdmljX3BoeXNpY2FsX2lkX3RhYmxlW3ZjcHUtJmd0O3ZjcHVfaWRdLCBlbnRyeSk7CiAKIAkvKgotCSAqIE5vdGUhICBEb24mIzM5O3Qgc2V0IEFWSUNfUEhZU0lDQUxfSURfRU5UUllfR0FfTE9HX0lOVFIgaW4gdGhlIHRhYmxlIGFzCiYjNDM7CSAqIE5vdGUhICBEb24mIzM5O3Qgc2V0IEFWSUNfUEhZU0lDQUxfSURfRU5UUllfV0FLRVVQX0lOVFIgaW4gdGhlIHRhYmxlIGFzCiAJICogaXQmIzM5O3MgYSBzeW50aGV0aWMgZmxhZyB0aGF0IHVzdXJwcyBhbiB1bnVzZWQgc2hvdWxkLWJlLXplcm8gYml0LgogCSAqLwogCWlmIChhY3Rpb24gJmFtcDsgQVZJQ19TVEFSVF9CTE9DS0lORykKLQkJZW50cnkgfD0gQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9HQV9MT0dfSU5UUjsKJiM0MzsJCWVudHJ5IHw9IEFWSUNfUEhZU0lDQUxfSURfRU5UUllfV0FLRVVQX0lOVFI7CiAKIAlzdm0tJmd0O2F2aWNfcGh5c2ljYWxfaWRfZW50cnkgPSBlbnRyeTsKIApAQCAtMTE3MSw5ICYjNDM7MTI1Nyw5IEBAIHZvaWQgYXZpY192Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAKIAkJLyoKIAkJICogVGhlIHZDUFUgd2FzIHByZWVtcHRlZCB3aGlsZSBibG9ja2luZywgZW5zdXJlIGl0cyBJUlRFcyBhcmUKLQkJICogY29uZmlndXJlZCB0byBnZW5lcmF0ZSBHQSBMb2cgSW50ZXJydXB0cy4KJiM0MzsJCSAqIGNvbmZpZ3VyZWQgdG8gcmVxdWVzdCBob3N0IHdha2V1cCBub3RpZmljYXRpb24uCiAJCSAqLwotCQlpZiAoIShXQVJOX09OX09OQ0UoIShlbnRyeSAmYW1wOyBBVklDX1BIWVNJQ0FMX0lEX0VOVFJZX0dBX0xPR19JTlRSKSkpKQomIzQzOwkJaWYgKCEoV0FSTl9PTl9PTkNFKCEoZW50cnkgJmFtcDsgQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9XQUtFVVBfSU5UUikpKSkKIAkJCXJldHVybjsKIAl9CiAKQEAgLTEyOTYsNiAmIzQzOzEzODIsMjEgQEAgc3RhdGljIGJvb2wgX19pbml0IGF2aWNfd2FudF9hdmljX2VuYWJsZWQodm9pZCkKIAlyZXR1cm4gdHJ1ZTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIGF2aWNfZ2FwcGlfd2FrZXVwX2hhbmRsZXIodm9pZCkKJiM0Mzt7CiYjNDM7CWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiYjNDM7CXN0cnVjdCBsaXN0X2hlYWQgKnZjcHVfd2FrZXVwX2xpc3QgPSAmYW1wO3Blcl9jcHUoZ2FwcGlfdmNwdV93YWtldXBfbGlzdCwgY3B1KTsKJiM0MzsJcmF3X3NwaW5sb2NrX3QgKnNwaW5sb2NrID0gJmFtcDtwZXJfY3B1KGdhcHBpX3ZjcHVfd2FrZXVwX2xpc3RfbG9jaywgY3B1KTsKJiM0MzsJc3RydWN0IHZjcHVfc3ZtICpzdm07CiYjNDM7CiYjNDM7CXJhd19zcGluX2xvY2soc3BpbmxvY2spOwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHN2bSwgdmNwdV93YWtldXBfbGlzdCwgZ2FwcGlfdmNwdV93YWtldXBfbGlzdCkgewomIzQzOwkJaWYgKGt2bV9sYXBpY19maW5kX2hpZ2hlc3RfaXJyKCZhbXA7c3ZtLSZndDt2Y3B1KSAmZ3Q7PSAwKQomIzQzOwkJCWt2bV92Y3B1X3dha2VfdXAoJmFtcDtzdm0tJmd0O3ZjcHUpOwomIzQzOwl9CiYjNDM7CXJhd19zcGluX3VubG9jayhzcGlubG9jayk7CiYjNDM7fQomIzQzOwogLyoKICAqIE5vdGU6CiAgKiAtIFRoZSBtb2R1bGUgcGFyYW0gYXZpYyBlbmFibGUgYm90aCB4QVBJQyBhbmQgeDJBUElDIG1vZGUuCkBAIC0xMzA0LDEyICYjNDM7MTQwNSwxOCBAQCBzdGF0aWMgYm9vbCBfX2luaXQgYXZpY193YW50X2F2aWNfZW5hYmxlZCh2b2lkKQogICovCiBib29sIF9faW5pdCBhdmljX2hhcmR3YXJlX3NldHVwKHZvaWQpCiB7CiYjNDM7CWludCBjcHU7CiAJYXZpYyA9IGF2aWNfd2FudF9hdmljX2VuYWJsZWQoKTsKIAlpZiAoIWF2aWMpCiAJCXJldHVybiBmYWxzZTsKIAogCXByX2luZm8oJiMzNDtBVklDIGVuYWJsZWRcbiYjMzQ7KTsKIAomIzQzOwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CiYjNDM7CQlJTklUX0xJU1RfSEVBRCgmYW1wO3Blcl9jcHUoZ2FwcGlfdmNwdV93YWtldXBfbGlzdCwgY3B1KSk7CiYjNDM7CQlyYXdfc3Bpbl9sb2NrX2luaXQoJmFtcDtwZXJfY3B1KGdhcHBpX3ZjcHVfd2FrZXVwX2xpc3RfbG9jaywgY3B1KSk7CiYjNDM7CX0KJiM0MzsKIAkvKiBBVklDIGlzIGEgcHJlcmVxdWlzaXRlIGZvciB4MkFWSUMuICovCiAJeDJhdmljX2VuYWJsZWQgPSBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfWDJBVklDKTsKIAlpZiAoeDJhdmljX2VuYWJsZWQpIHsKQEAgLTEzMzMsMTIgJiM0MzsxNDQwLDE2IEBAIGJvb2wgX19pbml0IGF2aWNfaGFyZHdhcmVfc2V0dXAodm9pZCkKIAkJZW5hYmxlX2lwaXYgPSBmYWxzZTsKIAogCWFtZF9pb21tdV9yZWdpc3Rlcl9nYV9sb2dfbm90aWZpZXIoJmFtcDthdmljX2dhX2xvZ19ub3RpZmllcik7CiYjNDM7CWt2bV9zZXRfcG9zdGVkX2ludHJfd2FrZXVwX2hhbmRsZXIoJmFtcDthdmljX2dhcHBpX3dha2V1cF9oYW5kbGVyKTsKIAogCXJldHVybiB0cnVlOwogfQogCiB2b2lkIGF2aWNfaGFyZHdhcmVfdW5zZXR1cCh2b2lkKQogewotCWlmIChhdmljKQotCQlhbWRfaW9tbXVfcmVnaXN0ZXJfZ2FfbG9nX25vdGlmaWVyKE5VTEwpOwomIzQzOwlpZiAoIWF2aWMpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWFtZF9pb21tdV9yZWdpc3Rlcl9nYV9sb2dfbm90aWZpZXIoTlVMTCk7CiYjNDM7CWt2bV9zZXRfcG9zdGVkX2ludHJfd2FrZXVwX2hhbmRsZXIoTlVMTCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uYwppbmRleCBlMDJhMzhkYTUyOTZlMy4uYjY4NzEzM2Y4NTI4YmEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uYwpAQCAtMTM1Niw2ICYjNDM7MTM1Niw4IEBAIHN0YXRpYyB2b2lkIHN2bV92Y3B1X2ZyZWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCiAJV0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KCZhbXA7c3ZtLSZndDtpcl9saXN0KSk7CiAKJiM0MzsJYXZpY19kZXN0cm95X3ZjcHUoc3ZtKTsKJiM0MzsKIAlzdm1fbGVhdmVfbmVzdGVkKHZjcHUpOwogCXN2bV9mcmVlX25lc3RlZChzdm0pOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uaAppbmRleCA1MTM3NDE2YmU1OTNkNy4uNDdkNWJiNWQ3MTAzZGEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uaApAQCAtMzYyLDYgJiM0MzszNjIsMTAgQEAgc3RydWN0IHZjcHVfc3ZtIHsKIAogCS8qIEd1ZXN0IEdJRiB2YWx1ZSwgdXNlZCB3aGVuIHZHSUYgaXMgbm90IGVuYWJsZWQgKi8KIAlib29sIGd1ZXN0X2dpZjsKJiM0MzsKJiM0MzsJLyogR0FQUEkgcmVsYXRlZCBmaWVsZHMgKi8KJiM0MzsJc3RydWN0IGxpc3RfaGVhZCBnYXBwaV92Y3B1X3dha2V1cF9saXN0OwomIzQzOwlpbnQgZ2FwcGlfY3B1OwogfTsKIAogc3RydWN0IHN2bV9jcHVfZGF0YSB7CkBAIC05MDksNiAmIzQzOzkxMyw3IEBAIHZvaWQgYXZpY19pbml0X3ZtY2Ioc3RydWN0IHZjcHVfc3ZtICpzdm0sIHN0cnVjdCB2bWNiICp2bWNiKTsKIGludCBhdmljX2luY29tcGxldGVfaXBpX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogaW50IGF2aWNfdW5hY2NlbGVyYXRlZF9hY2Nlc3NfaW50ZXJjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiBpbnQgYXZpY19pbml0X3ZjcHUoc3RydWN0IHZjcHVfc3ZtICpzdm0pOwomIzQzO3ZvaWQgYXZpY19kZXN0cm95X3ZjcHUoc3RydWN0IHZjcHVfc3ZtICpzdm0pOwogdm9pZCBhdmljX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpOwogdm9pZCBhdmljX3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiB2b2lkIGF2aWNfYXBpY3ZfcG9zdF9zdGF0ZV9yZXN0b3JlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lvbW11L2FtZC9hbWRfaW9tbXUuaCBiL2RyaXZlcnMvaW9tbXUvYW1kL2FtZF9pb21tdS5oCmluZGV4IDgzNGQ4ZmFiZmJhMzg3Li4wNDQxNzljYWIxMmU0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pb21tdS9hbWQvYW1kX2lvbW11LmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9pb21tdS9hbWQvYW1kX2lvbW11LmgKQEAgLTQxLDYgJiM0Mzs0MSw3IEBAIGludCBhbWRfaW9tbXVfZW5hYmxlKHZvaWQpOwogdm9pZCBhbWRfaW9tbXVfZGlzYWJsZSh2b2lkKTsKIGludCBhbWRfaW9tbXVfcmVlbmFibGUoaW50IG1vZGUpOwogaW50IGFtZF9pb21tdV9lbmFibGVfZmF1bHRpbmcodW5zaWduZWQgaW50IGNwdSk7CiYjNDM7ZXh0ZXJuIGJvb2wgYW1kX2lvbW11X2dhcHBpOwogZXh0ZXJuIGludCBhbWRfaW9tbXVfZ3Vlc3RfaXI7CiBleHRlcm4gZW51bSBwcm90ZWN0aW9uX2RvbWFpbl9tb2RlIGFtZF9pb21tdV9wZ3RhYmxlOwogZXh0ZXJuIGludCBhbWRfaW9tbXVfZ3B0X2xldmVsOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pb21tdS9hbWQvYW1kX2lvbW11X3R5cGVzLmggYi9kcml2ZXJzL2lvbW11L2FtZC9hbWRfaW9tbXVfdHlwZXMuaAppbmRleCBmOWY3MTgwODc4OTMwMy4uZGUwYjIzMzA2OTQ0YjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW9tbXUvYW1kL2FtZF9pb21tdV90eXBlcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvaW9tbXUvYW1kL2FtZF9pb21tdV90eXBlcy5oCkBAIC05NCw2ICYjNDM7OTQsNyBAQAogI2RlZmluZSBGRUFUVVJFX1gyQVBJQwkJQklUX1VMTCgyKQogI2RlZmluZSBGRUFUVVJFX05YCQlCSVRfVUxMKDMpCiAjZGVmaW5lIEZFQVRVUkVfR1QJCUJJVF9VTEwoNCkKJiM0MzsjZGVmaW5lIEZFQVRVUkVfR0FQUEkJCUJJVF9VTEwoNSkKICNkZWZpbmUgRkVBVFVSRV9JQQkJQklUX1VMTCg2KQogI2RlZmluZSBGRUFUVVJFX0dBCQlCSVRfVUxMKDcpCiAjZGVmaW5lIEZFQVRVUkVfSEUJCUJJVF9VTEwoOCkKQEAgLTExMyw2ICYjNDM7MTE0LDcgQEAKIC8qIEV4dGVuZGVkIEZlYXR1cmUgMiBCaXRzICovCiAjZGVmaW5lIEZFQVRVUkVfU0VWU05QSU9fU1VQCUJJVF9VTEwoMSkKICNkZWZpbmUgRkVBVFVSRV9HQ1IzVFJQTU9ERQlCSVRfVUxMKDMpCiYjNDM7I2RlZmluZSBGRUFUVVJFX0dBUFBJRElTU1VQCUJJVF9VTEwoNCkKICNkZWZpbmUgRkVBVFVSRV9TTlBBVklDU1VQCUdFTk1BU0tfVUxMKDcsIDUpCiAjZGVmaW5lIEZFQVRVUkVfU05QQVZJQ1NVUF9HQU0oeCkgXAogCShGSUVMRF9HRVQoRkVBVFVSRV9TTlBBVklDU1VQLCB4KSA9PSAweDEpCkBAIC0xOTAsNiAmIzQzOzE5Miw3IEBACiAjZGVmaW5lIENPTlRST0xfRVBIX0VOCQk0NQogI2RlZmluZSBDT05UUk9MX1hUX0VOCQk1MAogI2RlZmluZSBDT05UUk9MX0lOVENBUFhUX0VOCTUxCiYjNDM7I2RlZmluZSBDT05UUk9MX0dBUFBJX0VOCTU1CiAjZGVmaW5lIENPTlRST0xfR0NSM1RSUE1PREUJNTgKICNkZWZpbmUgQ09OVFJPTF9JUlRDQUNIRURJUwk1OQogI2RlZmluZSBDT05UUk9MX1NOUEFWSUNfRU4JNjEKQEAgLTEwMDQsNyAmIzQzOzEwMDcsOCBAQCB1bmlvbiBpcnRlX2dhX2xvIHsKIAkJICAgIG5vX2ZhdWx0CTogMSwKIAkJICAgIC8qIC0tLS0tLSAqLwogCQkgICAgZ2FfbG9nX2ludHIJOiAxLAotCQkgICAgcnN2ZDEJOiAzLAomIzQzOwkJICAgIHJzdmQxCTogMiwKJiM0MzsJCSAgICBnYXBwaV9kaXMJOiAxLAogCQkgICAgaXNfcnVuCTogMSwKIAkJICAgIC8qIC0tLS0tLSAqLwogCQkgICAgZ3Vlc3RfbW9kZQk6IDEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMgYi9kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMKaW5kZXggM2JkYjM4MGQyM2U5YTkuLjdkMmIxYzI0ZjZlY2NiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jCkBAIC0xNjAsNiAmIzQzOzE2MCw5IEBAIHU4IGFtZF9pb21tdV9ocHRfbGV2ZWw7CiAvKiBHdWVzdCBwYWdlIHRhYmxlIGxldmVsICovCiBpbnQgYW1kX2lvbW11X2dwdF9sZXZlbCA9IFBBR0VfTU9ERV80X0xFVkVMOwogCiYjNDM7Ym9vbCBhbWRfaW9tbXVfZ2FwcGk7CiYjNDM7RVhQT1JUX1NZTUJPTChhbWRfaW9tbXVfZ2FwcGkpOwomIzQzOwogaW50IGFtZF9pb21tdV9ndWVzdF9pciA9IEFNRF9JT01NVV9HVUVTVF9JUl9WQVBJQzsKIHN0YXRpYyBpbnQgYW1kX2lvbW11X3h0X21vZGUgPSBJUlFfUkVNQVBfWEFQSUNfTU9ERTsKIApAQCAtNDYyLDYgJiM0Mzs0NjUsOSBAQCBzdGF0aWMgdm9pZCBpb21tdV9kaXNhYmxlKHN0cnVjdCBhbWRfaW9tbXUgKmlvbW11KQogCWlvbW11X2ZlYXR1cmVfZGlzYWJsZShpb21tdSwgQ09OVFJPTF9HQUxPR19FTik7CiAJaW9tbXVfZmVhdHVyZV9kaXNhYmxlKGlvbW11LCBDT05UUk9MX0dBSU5UX0VOKTsKIAomIzQzOwkvKiBEaXNhYmxlIElPTU1VIEdBUFBJICovCiYjNDM7CWlvbW11X2ZlYXR1cmVfZGlzYWJsZShpb21tdSwgQ09OVFJPTF9HQVBQSV9FTik7CiYjNDM7CiAJLyogRGlzYWJsZSBJT01NVSBQUFIgbG9nZ2luZyAqLwogCWlvbW11X2ZlYXR1cmVfZGlzYWJsZShpb21tdSwgQ09OVFJPTF9QUFJMT0dfRU4pOwogCWlvbW11X2ZlYXR1cmVfZGlzYWJsZShpb21tdSwgQ09OVFJPTF9QUFJJTlRfRU4pOwpAQCAtMjk5Niw2ICYjNDM7MzAwMiwxMyBAQCBzdGF0aWMgdm9pZCBlbmFibGVfaW9tbXVzX3ZhcGljKHZvaWQpCiAJc3RydWN0IGFtZF9pb21tdSAqaW9tbXU7CiAKIAlmb3JfZWFjaF9pb21tdShpb21tdSkgewomIzQzOwkJLyoKJiM0MzsJCSAqIERpc2FibGUgR0FQUEksIGRvIG5vdCBjaGVjayBhbWRfaW9tbXVfZ2FwcGkgYXMgaXQgbWF5IGJlCiYjNDM7CQkgKiBmYWxzZSBpbiBuZXcga2V4ZWMga2VybmVsIGV2ZW4gdGhvdWdoIHByZXZpb3VzIGtlcm5lbCBoYXMKJiM0MzsJCSAqIGVuYWJsZWQgaXQuCiYjNDM7CQkgKi8KJiM0MzsJCWlvbW11X2ZlYXR1cmVfZGlzYWJsZShpb21tdSwgQ09OVFJPTF9HQVBQSV9FTik7CiYjNDM7CiAJCS8qCiAJCSAqIERpc2FibGUgR0FMb2cgaWYgYWxyZWFkeSBydW5uaW5nLiBJdCBjb3VsZCBoYXZlIGJlZW4gZW5hYmxlZAogCQkgKiBpbiB0aGUgcHJldmlvdXMgYm9vdCBiZWZvcmUga2R1bXAuCkBAIC0zMDM1LDEwICYjNDM7MzA0OCwxOSBAQCBzdGF0aWMgdm9pZCBlbmFibGVfaW9tbXVzX3ZhcGljKHZvaWQpCiAJCXJldHVybjsKIAl9CiAKJiM0MzsJaWYgKGFtZF9pb21tdV9nYXBwaSAmYW1wOyZhbXA7CiYjNDM7CSAgICAhKGNoZWNrX2ZlYXR1cmUoRkVBVFVSRV9HQVBQSSkgJmFtcDsmYW1wOwomIzQzOwkgICAgICBBTURfSU9NTVVfR1VFU1RfSVJfVkFQSUMoYW1kX2lvbW11X2d1ZXN0X2lyKSkpIHsKJiM0MzsJCXByX3dhcm4oJiMzNDtHQVBQSSBpcyBub3Qgc3VwcG9ydGVkLlxuJiMzNDspOwomIzQzOwkJYW1kX2lvbW11X2dhcHBpID0gZmFsc2U7CiYjNDM7CX0KJiM0MzsKIAkvKiBFbmFibGluZyBHQU0gYW5kIFNOUEFWSUMgc3VwcG9ydCAqLwogCWZvcl9lYWNoX2lvbW11KGlvbW11KSB7Ci0JCWlmIChpb21tdV9pbml0X2dhX2xvZyhpb21tdSkgfHwKLQkJICAgIGlvbW11X2dhX2xvZ19lbmFibGUoaW9tbXUpKQomIzQzOwkJaWYgKGFtZF9pb21tdV9nYXBwaSkKJiM0MzsJCQlpb21tdV9mZWF0dXJlX2VuYWJsZShpb21tdSwgQ09OVFJPTF9HQVBQSV9FTik7CiYjNDM7CQllbHNlIGlmIChpb21tdV9pbml0X2dhX2xvZyhpb21tdSkgfHwKJiM0MzsJCQkgaW9tbXVfZ2FfbG9nX2VuYWJsZShpb21tdSkpCiAJCQlyZXR1cm47CiAKIAkJaW9tbXVfZmVhdHVyZV9lbmFibGUoaW9tbXUsIENPTlRST0xfR0FNX0VOKTsKQEAgLTMwNDcsNyAmIzQzOzMwNjksOCBAQCBzdGF0aWMgdm9pZCBlbmFibGVfaW9tbXVzX3ZhcGljKHZvaWQpCiAJfQogCiAJYW1kX2lvbW11X2lycV9vcHMuY2FwYWJpbGl0eSB8PSAoMSAmbHQ7Jmx0OyBJUlFfUE9TVElOR19DQVApOwotCXByX2luZm8oJiMzNDtWaXJ0dWFsIEFQSUMgZW5hYmxlZFxuJiMzNDspOwomIzQzOwlwcl9pbmZvKCYjMzQ7VmlydHVhbCBBUElDIGVuYWJsZWQgd2l0aCAlc1xuJiMzNDssCiYjNDM7CQlhbWRfaW9tbXVfZ2FwcGkgPyAmIzM0O0dBUFBJJiMzNDsgOiAmIzM0O0dBTE9HJiMzNDspOwogI2VuZGlmCiB9CiAKQEAgLTM3MzgsNiAmIzQzOzM3NjEsOCBAQCBzdGF0aWMgaW50IF9faW5pdCBwYXJzZV9hbWRfaW9tbXVfb3B0aW9ucyhjaGFyICpzdHIpCiAJCX0gZWxzZSBpZiAoc3RybmNtcChzdHIsICYjMzQ7djJfcGdzaXplc19vbmx5JiMzNDssIDE1KSA9PSAwKSB7CiAJCQlwcl9pbmZvKCYjMzQ7UmVzdHJpY3RpbmcgVjEgcGFnZS1zaXplcyB0byA0S2lCLzJNaUIvMUdpQiYjMzQ7KTsKIAkJCWFtZF9pb21tdV9wZ3NpemVfYml0bWFwID0gQU1EX0lPTU1VX1BHU0laRVNfVjI7CiYjNDM7CQl9IGVsc2UgaWYgKHN0cm5jbXAoc3RyLCAmIzM0O2dhcHBpJiMzNDssIDUpID09IDApIHsKJiM0MzsJCQlhbWRfaW9tbXVfZ2FwcGkgPSB0cnVlOwogCQl9IGVsc2UgewogCQkJcHJfbm90aWNlKCYjMzQ7VW5rbm93biBvcHRpb24gLSAmIzM5OyVzJiMzOTtcbiYjMzQ7LCBzdHIpOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jIGIvZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuYwppbmRleCA1N2RjOGZhYmM3ZDliOS4uN2VlYmY0NzQ1YTY3ODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuYwpAQCAtMzk1OSwxOSAmIzQzOzM5NTksMjkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBpcnFfZG9tYWluX29wcyBhbWRfaXJfZG9tYWluX29wcyA9IHsKIAkuZGVhY3RpdmF0ZSA9IGlycV9yZW1hcHBpbmdfZGVhY3RpdmF0ZSwKIH07CiAKLXN0YXRpYyB2b2lkIF9fYW1kX2lvbW11X3VwZGF0ZV9nYShzdHJ1Y3QgaXJ0ZV9nYSAqZW50cnksIGludCBjcHUsCi0JCQkJICBib29sIGdhX2xvZ19pbnRyKQomIzQzO3N0YXRpYyB2b2lkIF9fYW1kX2lvbW11X3VwZGF0ZV9nYShzdHJ1Y3QgaXJ0ZV9nYSAqZW50cnksIGludCBhcGljaWQsCiYjNDM7CQkJCSAgYm9vbCB3YWtldXBfaW50ciwgYm9vbCBpc19ydW5uaW5nKQogewotCWlmIChjcHUgJmd0Oz0gMCkgewomIzQzOwlpZiAoaXNfcnVubmluZykgewogCQllbnRyeS0mZ3Q7bG8uZmllbGRzX3ZhcGljLmRlc3RpbmF0aW9uID0KLQkJCQkJQVBJQ0lEX1RPX0lSVEVfREVTVF9MTyhjcHUpOwomIzQzOwkJCQkJQVBJQ0lEX1RPX0lSVEVfREVTVF9MTyhhcGljaWQpOwogCQllbnRyeS0mZ3Q7aGkuZmllbGRzLmRlc3RpbmF0aW9uID0KLQkJCQkJQVBJQ0lEX1RPX0lSVEVfREVTVF9ISShjcHUpOwomIzQzOwkJCQkJQVBJQ0lEX1RPX0lSVEVfREVTVF9ISShhcGljaWQpOwogCQllbnRyeS0mZ3Q7bG8uZmllbGRzX3ZhcGljLmlzX3J1biA9IHRydWU7CiAJCWVudHJ5LSZndDtsby5maWVsZHNfdmFwaWMuZ2FfbG9nX2ludHIgPSBmYWxzZTsKIAl9IGVsc2UgewotCQllbnRyeS0mZ3Q7bG8uZmllbGRzX3ZhcGljLmlzX3J1biA9IGZhbHNlOwotCQllbnRyeS0mZ3Q7bG8uZmllbGRzX3ZhcGljLmdhX2xvZ19pbnRyID0gZ2FfbG9nX2ludHI7CiYjNDM7CQlpZiAoYW1kX2lvbW11X2dhcHBpKSB7CiYjNDM7CQkJZW50cnktJmd0O2xvLmZpZWxkc192YXBpYy5nYXBwaV9kaXMgPSAhd2FrZXVwX2ludHIgJmFtcDsmYW1wOwomIzQzOwkJCQkJCWNoZWNrX2ZlYXR1cmUyKEZFQVRVUkVfR0FQUElESVNTVVApOwomIzQzOwkJCWVudHJ5LSZndDtsby5maWVsZHNfdmFwaWMuaXNfcnVuID0gZmFsc2U7CiYjNDM7CQkJZW50cnktJmd0O2xvLmZpZWxkc192YXBpYy5kZXN0aW5hdGlvbiA9CiYjNDM7CQkJCQkJQVBJQ0lEX1RPX0lSVEVfREVTVF9MTyhhcGljaWQpOwomIzQzOwkJCWVudHJ5LSZndDtoaS5maWVsZHMuZGVzdGluYXRpb24gPQomIzQzOwkJCQkJCUFQSUNJRF9UT19JUlRFX0RFU1RfSEkoYXBpY2lkKTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJZW50cnktJmd0O2xvLmZpZWxkc192YXBpYy5pc19ydW4gPSBmYWxzZTsKJiM0MzsJCQllbnRyeS0mZ3Q7bG8uZmllbGRzX3ZhcGljLmdhX2xvZ19pbnRyID0gd2FrZXVwX2ludHI7CiYjNDM7CQl9CiAJfQogfQogCkBAIC0zOTc5LDIwICYjNDM7Mzk4OSwyMCBAQCBzdGF0aWMgdm9pZCBfX2FtZF9pb21tdV91cGRhdGVfZ2Eoc3RydWN0IGlydGVfZ2EgKmVudHJ5LCBpbnQgY3B1LAogICogVXBkYXRlIHRoZSBwQ1BVIGluZm9ybWF0aW9uIGZvciBhbiBJUlRFIHRoYXQgaXMgY29uZmlndXJlZCB0byBwb3N0IElSUXMgdG8KICAqIGEgdkNQVSwgd2l0aG91dCBpc3N1aW5nIGFuIElPTU1VIGludmFsaWRhdGlvbiBmb3IgdGhlIElSVEUuCiAgKgotICogSWYgdGhlIHZDUFUgaXMgYXNzb2NpYXRlZCB3aXRoIGEgcENQVSAoQGNwdSAmZ3Q7PSAwKSwgY29uZmlndXJlIHRoZSBEZXN0aW5hdGlvbgotICogd2l0aCB0aGUgcENQVSYjMzk7cyBBUElDIElELCBzZXQgSXNSdW4sIGFuZCBjbGVhciBHQUxvZ0ludHIuICBJZiB0aGUgdkNQVSBpc24mIzM5O3QKLSAqIGFzc29jaWF0ZWQgd2l0aCBhIHBDUFUgKEBjcHUgJmx0OyAwKSwgY2xlYXIgSXNSdW4gYW5kIHNldC9jbGVhciBHQUxvZ0ludHIgYmFzZWQKLSAqIG9uIGlucHV0IGZyb20gdGhlIGNhbGxlciAoZS5nLiBLVk0gb25seSByZXF1ZXN0cyBHQUxvZ0ludHIgd2hlbiB0aGUgdkNQVSBpcwotICogYmxvY2tpbmcgYW5kIHJlcXVpcmVzIGEgbm90aWZpY2F0aW9uIHdha2UgZXZlbnQpLiAgSS5lLiB0cmVhdCB2Q1BVcyB0aGF0IGFyZQotICogYXNzb2NpYXRlZCB3aXRoIGEgcENQVSBhcyBydW5uaW5nLiAgVGhpcyBBUEkgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCB3aGVuIGEKLSAqIHZDUFUgaXMgc2NoZWR1bGVkIGluL291dCAob3Igc3RvcHMgcnVubmluZyBmb3IgYW55IHJlYXNvbiksIHRvIGRvIGEgZmFzdAotICogdXBkYXRlIG9mIElzUnVuLCBHQUxvZ0ludHIsIGFuZCAoY29uZGl0aW9uYWxseSkgRGVzdGluYXRpb24uCiYjNDM7ICogSWYgdGhlIHZDUFUgaXMgc2NoZWR1bGVkIHRvIHJ1biBvbiBwQ1BVIChAaXNfcnVubmluZyA9IDEpLCBjb25maWd1cmUgdGhlCiYjNDM7ICogRGVzdGluYXRpb24gd2l0aCB0aGUgcENQVSYjMzk7cyBBUElDIElELCBzZXQgSXNSdW4sIGFuZCBjbGVhciBHQUxvZ0ludHIuIElmIHRoZQomIzQzOyAqIHZDUFUgaXMgc2NoZWR1bGVkIG91dCAoQGlzX3J1bm5pbmcgPSAwKSwgY2xlYXIgSXNSdW4gYW5kIHNldC9jbGVhciBHQUxvZ0ludHIKJiM0MzsgKiBhbmQgR0FQUElEaXMgYmFzZWQgb24gaW5wdXQgZnJvbSB0aGUgY2FsbGVyIChlLmcuIEtWTSBvbmx5IHJlcXVlc3RzCiYjNDM7ICogd2FrZXVwX2ludHIgd2hlbiB0aGUgdkNQVSBpcyBibG9ja2luZyBhbmQgcmVxdWlyZXMgYSBub3RpZmljYXRpb24gd2FrZQomIzQzOyAqIGV2ZW50KS4gVGhpcyBBUEkgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCB3aGVuIGEgdkNQVSBpcyBzY2hlZHVsZWQgaW4vb3V0IChvcgomIzQzOyAqIHN0b3BzIHJ1bm5pbmcgZm9yIGFueSByZWFzb24pLCB0byBkbyBhIGZhc3QgdXBkYXRlIG9mIElzUnVuLCBHQUxvZ0ludHIsCiYjNDM7ICogR0FQUElEaXMgYW5kIChjb25kaXRpb25hbGx5KSBEZXN0aW5hdGlvbi4KICAqCi0gKiBQZXIgdGhlIElPTU1VIHNwZWMsIHRoZSBEZXN0aW5hdGlvbiwgSXNSdW4sIGFuZCBHQVRhZyBmaWVsZHMgYXJlIG5vdCBjYWNoZWQKLSAqIGFuZCB0aHVzIGRvbiYjMzk7dCByZXF1aXJlIGFuIGludmFsaWRhdGlvbiB0byBlbnN1cmUgdGhlIElPTU1VIGNvbnN1bWVzIGZyZXNoCi0gKiBpbmZvcm1hdGlvbi4KJiM0MzsgKiBQZXIgdGhlIElPTU1VIHNwZWMsIHRoZSBEZXN0aW5hdGlvbiwgSXNSdW4sIEdBVGFnIGFuZCBHQVBQSURpcyBmaWVsZHMgYXJlCiYjNDM7ICogbm90IGNhY2hlZCBhbmQgdGh1cyBkb24mIzM5O3QgcmVxdWlyZSBhbiBpbnZhbGlkYXRpb24gdG8gZW5zdXJlIHRoZSBJT01NVQomIzQzOyAqIGNvbnN1bWVzIGZyZXNoIGluZm9ybWF0aW9uLgogICovCi1pbnQgYW1kX2lvbW11X3VwZGF0ZV9nYSh2b2lkICpkYXRhLCBpbnQgY3B1LCBib29sIGdhX2xvZ19pbnRyKQomIzQzO2ludCBhbWRfaW9tbXVfdXBkYXRlX2dhKHZvaWQgKmRhdGEsIGludCBhcGljaWQsIGJvb2wgd2FrZXVwX2ludHIsIGJvb2wgaXNfcnVubmluZykKIHsKIAlzdHJ1Y3QgYW1kX2lyX2RhdGEgKmlyX2RhdGEgPSAoc3RydWN0IGFtZF9pcl9kYXRhICopZGF0YTsKIAlzdHJ1Y3QgaXJ0ZV9nYSAqZW50cnkgPSAoc3RydWN0IGlydGVfZ2EgKikgaXJfZGF0YS0mZ3Q7ZW50cnk7CkBAIC00MDA2LDE0ICYjNDM7NDAxNiwxNCBAQCBpbnQgYW1kX2lvbW11X3VwZGF0ZV9nYSh2b2lkICpkYXRhLCBpbnQgY3B1LCBib29sIGdhX2xvZ19pbnRyKQogCWlmICghaXJfZGF0YS0mZ3Q7aW9tbXUpCiAJCXJldHVybiAtRU5PREVWOwogCi0JX19hbWRfaW9tbXVfdXBkYXRlX2dhKGVudHJ5LCBjcHUsIGdhX2xvZ19pbnRyKTsKJiM0MzsJX19hbWRfaW9tbXVfdXBkYXRlX2dhKGVudHJ5LCBhcGljaWQsIHdha2V1cF9pbnRyLCBpc19ydW5uaW5nKTsKIAogCXJldHVybiBfX21vZGlmeV9pcnRlX2dhKGlyX2RhdGEtJmd0O2lvbW11LCBpcl9kYXRhLSZndDtpcnFfMl9pcnRlLmRldmlkLAogCQkJCWlyX2RhdGEtJmd0O2lycV8yX2lydGUuaW5kZXgsIGVudHJ5KTsKIH0KIEVYUE9SVF9TWU1CT0woYW1kX2lvbW11X3VwZGF0ZV9nYSk7CiAKLWludCBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZSh2b2lkICpkYXRhLCBpbnQgY3B1LCBib29sIGdhX2xvZ19pbnRyKQomIzQzO2ludCBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZSh2b2lkICpkYXRhLCBpbnQgYXBpY2lkLCBib29sIHdha2V1cF9pbnRyLCBib29sIGlzX3J1bm5pbmcpCiB7CiAJc3RydWN0IGFtZF9pcl9kYXRhICppcl9kYXRhID0gKHN0cnVjdCBhbWRfaXJfZGF0YSAqKWRhdGE7CiAJc3RydWN0IGlydGVfZ2EgKmVudHJ5ID0gKHN0cnVjdCBpcnRlX2dhICopIGlyX2RhdGEtJmd0O2VudHJ5OwpAQCAtNDAzNiw3ICYjNDM7NDA0Niw3IEBAIGludCBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZSh2b2lkICpkYXRhLCBpbnQgY3B1LCBib29sIGdhX2xvZ19pbnRyKQogCWVudHJ5LSZndDtoaS5maWVsZHMudmVjdG9yICAgICAgICAgICAgPSBpcl9kYXRhLSZndDtnYV92ZWN0b3I7CiAJZW50cnktJmd0O2xvLmZpZWxkc192YXBpYy5nYV90YWcgICAgICA9IGlyX2RhdGEtJmd0O2dhX3RhZzsKIAotCV9fYW1kX2lvbW11X3VwZGF0ZV9nYShlbnRyeSwgY3B1LCBnYV9sb2dfaW50cik7CiYjNDM7CV9fYW1kX2lvbW11X3VwZGF0ZV9nYShlbnRyeSwgYXBpY2lkLCB3YWtldXBfaW50ciwgaXNfcnVubmluZyk7CiAKIAlyZXR1cm4gbW9kaWZ5X2lydGVfZ2EoaXJfZGF0YS0mZ3Q7aW9tbXUsIGlyX2RhdGEtJmd0O2lycV8yX2lydGUuZGV2aWQsCiAJCQkgICAgICBpcl9kYXRhLSZndDtpcnFfMl9pcnRlLmluZGV4LCBlbnRyeSk7CkBAIC00MTA3LDggJiM0Mzs0MTE3LDkgQEAgc3RhdGljIGludCBhbWRfaXJfc2V0X3ZjcHVfYWZmaW5pdHkoc3RydWN0IGlycV9kYXRhICpkYXRhLCB2b2lkICppbmZvKQogCQlpcl9kYXRhLSZndDtnYV92ZWN0b3IgPSBwaV9kYXRhLSZndDt2ZWN0b3I7CiAJCWlyX2RhdGEtJmd0O2dhX3RhZyA9IHBpX2RhdGEtJmd0O2dhX3RhZzsKIAkJaWYgKHBpX2RhdGEtJmd0O2lzX2d1ZXN0X21vZGUpCi0JCQlyZXQgPSBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZShpcl9kYXRhLCBwaV9kYXRhLSZndDtjcHUsCi0JCQkJCQkJICAgIHBpX2RhdGEtJmd0O2dhX2xvZ19pbnRyKTsKJiM0MzsJCQlyZXQgPSBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZShpcl9kYXRhLCBwaV9kYXRhLSZndDthcGljaWQsCiYjNDM7CQkJCQkJCSAgICBwaV9kYXRhLSZndDt3YWtldXBfaW50ciwKJiM0MzsJCQkJCQkJICAgIHBpX2RhdGEtJmd0O2lzX3J1bm5pbmcpOwogCQllbHNlCiAJCQlyZXQgPSBhbWRfaW9tbXVfZGVhY3RpdmF0ZV9ndWVzdF9tb2RlKGlyX2RhdGEpOwogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2FtZC1pb21tdS5oIGIvaW5jbHVkZS9saW51eC9hbWQtaW9tbXUuaAppbmRleCBlZGNlZTlmNTMzNWE2Zi4uNzI5ZDgyYzRlMDllMjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYW1kLWlvbW11LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9hbWQtaW9tbXUuaApAQCAtMzAsOCAmIzQzOzMwLDEwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBhbWRfaW9tbXVfZGV0ZWN0KHZvaWQpIHsgfQogLyogSU9NTVUgQVZJQyBGdW5jdGlvbiAqLwogZXh0ZXJuIGludCBhbWRfaW9tbXVfcmVnaXN0ZXJfZ2FfbG9nX25vdGlmaWVyKGludCAoKm5vdGlmaWVyKSh1MzIpKTsKIAotZXh0ZXJuIGludCBhbWRfaW9tbXVfdXBkYXRlX2dhKHZvaWQgKmRhdGEsIGludCBjcHUsIGJvb2wgZ2FfbG9nX2ludHIpOwotZXh0ZXJuIGludCBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZSh2b2lkICpkYXRhLCBpbnQgY3B1LCBib29sIGdhX2xvZ19pbnRyKTsKJiM0MztleHRlcm4gaW50IGFtZF9pb21tdV91cGRhdGVfZ2Eodm9pZCAqZGF0YSwgaW50IGFwaWNpZCwgYm9vbCB3YWtldXBfaW50ciwKJiM0MzsJCQkgICAgICAgYm9vbCBpc19ydW5uaW5nKTsKJiM0MztleHRlcm4gaW50IGFtZF9pb21tdV9hY3RpdmF0ZV9ndWVzdF9tb2RlKHZvaWQgKmRhdGEsIGludCBhcGljaWQsIGJvb2wgd2FrZXVwX2ludHIsCiYjNDM7CQkJCQkgYm9vbCBpc19ydW5uaW5nKTsKIGV4dGVybiBpbnQgYW1kX2lvbW11X2RlYWN0aXZhdGVfZ3Vlc3RfbW9kZSh2b2lkICpkYXRhKTsKIAogI2Vsc2UgLyogZGVmaW5lZChDT05GSUdfQU1EX0lPTU1VKSAmYW1wOyZhbXA7IGRlZmluZWQoQ09ORklHX0lSUV9SRU1BUCkgKi8KQEAgLTQyLDEyICYjNDM7NDQsMTQgQEAgYW1kX2lvbW11X3JlZ2lzdGVyX2dhX2xvZ19ub3RpZmllcihpbnQgKCpub3RpZmllcikodTMyKSkKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgYW1kX2lvbW11X3VwZGF0ZV9nYSh2b2lkICpkYXRhLCBpbnQgY3B1LCBib29sIGdhX2xvZ19pbnRyKQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGFtZF9pb21tdV91cGRhdGVfZ2Eodm9pZCAqZGF0YSwgaW50IGFwaWNpZCwgYm9vbCB3YWtldXBfaW50ciwKJiM0MzsJCQkJICAgICAgYm9vbCBpc19ydW5uaW5nKQogewogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZSh2b2lkICpkYXRhLCBpbnQgY3B1LCBib29sIGdhX2xvZ19pbnRyKQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGFtZF9pb21tdV9hY3RpdmF0ZV9ndWVzdF9tb2RlKHZvaWQgKmRhdGEsIGludCBhcGljaWQsIGJvb2wgd2FrZXVwX2ludHIsCiYjNDM7CQkJCQkJYm9vbCBpc19ydW5uaW5nKQogewogCXJldHVybiAwOwogfQpAQCAtNzYsNCAmIzQzOzgwLDUgQEAgc3RhdGljIGlubGluZSBpbnQgYW1kX2lvbW11X3NucF9kaXNhYmxlKHZvaWQpIHsgcmV0dXJuIDA7IH0KIHN0YXRpYyBpbmxpbmUgYm9vbCBhbWRfaW9tbXVfc2V2X3Rpb19zdXBwb3J0ZWQodm9pZCkgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgogCiYjNDM7ZXh0ZXJuIGJvb2wgYW1kX2lvbW11X2dhcHBpOwogI2VuZGlmIC8qIF9BU01fWDg2X0FNRF9JT01NVV9IICovCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDEzOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDIyCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNzkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkdBUFBJIFN1cHBvcnQgZm9yIEFNRCBJT01NVSBhbmQgS1ZNIFNWTSBBVklDOiBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBpbnRyb2R1Y2luZyBHQVBQSSBzdXBwb3J0LCBHdWVzdCBBUElDIFBvc3RlZCBJbnRlcnJ1cHRzLCBmb3IgQU1EIElPTU1VIGFuZCBLVk0gU1ZNIEFWSUMuICBFc3NlbnRpYWxseSwgaXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBwcmV0dHkgZGVlcCBvbmUsIGFmZmVjdGluZyBhIGJ1bmNoIG9mIGNvcmUga2VybmVsIGFyZWFzLiAgSSBzZWUgaXQgdG91Y2hlcyBkb2N1bWVudGF0aW9uLCBzb21lIGNydWNpYWwgeDg2IGFzc2VtYmx5IGluY2x1ZGVzLCBhbmQgdGhlbiBkaXZlcyBkZWVwIGludG8gS1ZNJiMzOTtzIFNWTSBpbXBsZW1lbnRhdGlvbiBhbmQgdGhlIEFNRCBJT01NVSBkcml2ZXJzLiBUaGUgcGF0Y2ggYWRkcyBhIG5ldyBgYW1kX2lvbW11PWdhcHBpYCBrZXJuZWwgcGFyYW1ldGVyLiBJdCYjMzk7cyBtb2RpZnlpbmcgSVJURXMgZm9yIHBvc3RlZCBpbnRlcnJ1cHRzIGFuZCBpbnRyb2R1Y2VzIGEgbmV3IHdha2V1cCBsaXN0IGZvciBHQVBQSSB3aXRoaW4gS1ZNLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBpcyB0aGlzIHJlYWNoYWJsZSBpbiBhIGZ1enphYmxlIGVudmlyb25tZW50PyBTaW5jZSB0aGlzIGNvZGUgaXMgZGlyZWN0bHkgbGlua2VkIHRvIEFNRCBJT01NVSwgS1ZNIFNWTSBhbmQsIHNwZWNpZmljYWxseSBBVklDLCBJIG5lZWQgdG8gZXZhbHVhdGUgdGhlIHBvdGVudGlhbC4gUUVNVSBhbmQgR29vZ2xlIENvbXB1dGUgRW5naW5lIGFsbG93IG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBvbiBBTUQgaG9zdHMgb3IgZXZlbiBlbXVsYXRpb24uIFdoaWxlIEFNRCBJT01NVSBlbXVsYXRpb24gd2l0aCBBVklDIGluIFFFTVUgbWlnaHQgYmUgYSBiaXQgc2tldGNoeSwgdGhlICpLVk0gY29kZSBpdHNlbGYqIGlzIHRoZSByZWFsIHRhcmdldCBoZXJlLgoKV2FpdCwgU3l6a2FsbGVyIHJ1bnMgaW4gUUVNVS4uLiBhbmQgaXQgc3VwcG9ydHMgZnV6emluZyBLVk0uIElmIHdlJiMzOTtyZSBvbiBhbiBBTUQgaG9zdCB3aXRoIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiwgb3IgZXZlbiBlbXVsYXRpbmcgU1ZNLCB3ZSBzaG91bGQgYmUgYWJsZSB0byByZWFjaCBLVk0gU1ZNIGNvZGUgZGlyZWN0bHkuIFN5emthbGxlciBzdXBwb3J0cyBLVk0gZnV6emluZywgd2hpY2ggbWVhbnMgd2UgKmNhbiogYWJzb2x1dGVseSBmdXp6IHRoaXMhIFRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBwdXJzdWluZy4KCk5vdywgbGV0JiMzOTtzIHpvb20gaW4gb24gdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyB0aGF0IGFyZSBtb3N0IGludGVyZXN0aW5nIGZvciBmdXp6aW5nOgoKKiAgIGBhdmljX2luaXRfdmNwdWAsIGBhdmljX2FkZF92Y3B1X3RvX2dhcHBpX3dha2V1cF9saXN0YCwgYGF2aWNfcmVtb3ZlX3ZjcHVfZnJvbV9nYXBwaV93YWtldXBfbGlzdGAsIGBhdmljX2Rlc3Ryb3lfdmNwdWAsIGBzdm1faXJfbGlzdF9kZWxgLCBgYXZpY19waV91cGRhdGVfaXJ0ZWAsIGBhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5YCwgYF9fYXZpY192Y3B1X2xvYWRgLCBgX19hdmljX3ZjcHVfcHV0YCwgYGF2aWNfdmNwdV9wdXRgLCBgYXZpY19nYXBwaV93YWtldXBfaGFuZGxlcmAsIGBhdmljX2hhcmR3YXJlX3NldHVwYCwgYGF2aWNfaGFyZHdhcmVfdW5zZXR1cGAsIGBfX2FtZF9pb21tdV91cGRhdGVfZ2FgLCBgYW1kX2lvbW11X3VwZGF0ZV9nYWAsIGBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZWAsIGFuZCBgYW1kX2lyX3NldF92Y3B1X2FmZmluaXR5YC4KCk5leHQgc3RlcCwgSSBuZWVkIHRvIGNoZWNrIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMgdG8gYmUgc3VyZSB0aGUgcmVsZXZhbnQgZmVhdHVyZXMgYXJlIGVuYWJsZWQuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBsb29raW5nIGF0IEtWTV9BTUQsIEFNRF9JT01NVSwgYW5kIElSUV9SRU1BUC4gVGhvc2UgbmVlZCB0byBiZSB2ZXJpZmllZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxMzozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNX0FNRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnPTEzND1jb25maWcgS1ZNX0lOVEVMX1REWFxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE0Njpjb25maWcgS1ZNX0FNRFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ3LVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVx0Ym9vbCBcJiMzNDtBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTM6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ2MTIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkFzc2Vzc2luZyBJT01NVSBhbmQgSVJRIFJlbWFwcGluZyBpbiBUaGlzIENvbnRleHQqKgoKT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gY2hlY2sgdGhlIHN0YXR1cyBvZiBBTURfSU9NTVUgYW5kIElSUV9SRU1BUC4gVGhvc2UgYXJlIHRoZSBmb3VuZGF0aW9uIHN0b25lcywgcmVhbGx5LiBHaXZlbiB0aGUgbGlrZWx5IGNvbnN0cmFpbnRzIGluIHRoaXMgc2V0dXAsIHRoZXkmIzM5O3JlIHByb2JhYmx5IGtleSB0byBhY2hpZXZpbmcgdGhlIGRlc2lyZWQgb3V0Y29tZS4gSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIGlmIHRoZXkgYXJlIGVuYWJsZWQgYW5kIGNvbmZpZ3VyZWQgY29ycmVjdGx5LCBvciBpZiB0aGVyZSYjMzk7cyBhbnkgaGludCBvZiBhIHByb2JsZW0gdGhlcmUuIEFueSBpc3N1ZXMgd2l0aCB0aG9zZSBhbmQsIGZyYW5rbHksIHdlIGNhbiBwcm9iYWJseSBzdG9wIHRoZXJlIGFzIG90aGVyIGNvbmZpZ3VyYXRpb25zIHdpbGwgbm90IGJlIGVmZmVjdGl2ZS4gU28sIHRob3NlIG5lZWQgdG8gYmUgc29saWQuIEkgd2FudCB0byBrbm93IGlmIHRoZXkmIzM5O3JlIHVwIGFuZCBydW5uaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDEzOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEFNRF9JT01NVSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW9tbXUvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTM6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ4MjUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqTmF2aWdhdGluZyB0aGUgQU1EIElPTU1VIENvZGViYXNlKioKClJpZ2h0LCAqQU1EX0lPTU1VKiwgdGhhdCYjMzk7cyB0aGUga2V5LiBJIG5lZWQgdG8gZmluZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGF0LiBCYXNlZCBvbiBleHBlcmllbmNlLCB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIGxvb2sgZmlyc3QgaXMgdGhlIGBkcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlc2UgaGFyZHdhcmUtc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlc2lkZSB3aXRoaW4gdGhlIGRyaXZlciB0cmVlLiBJdCYjMzk7cyBhbG1vc3QgYSBnaXZlbi4gVGltZSB0byBjb25maXJtIGFuZCBnZXQgdG8gd29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxMzozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQU1EX0lPTU1VJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9pb21tdS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZy0yLSMgQU1EIElPTU1VIHN1cHBvcnRcbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWc6Mzpjb25maWcgQU1EX0lPTU1VXG5kcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnLTQtXHRib29sIFwmIzM0O0FNRCBJT01NVSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZy0zMi1cbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWc6MzM6Y29uZmlnIEFNRF9JT01NVV9JT01NVUZEXG5kcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnLTM0LVx0Ym9vbCBcJiMzNDtFbmFibGUgSU9NTVVGRCBmZWF0dXJlcyBmb3IgQU1EIElPTU1VIChFWFBFUklNRU5UQUwpXCYjMzQ7XG4tLVxuZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZy00Mi1cbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWc6NDM6Y29uZmlnIEFNRF9JT01NVV9ERUJVR0ZTXG5kcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnLTQ0LVx0Ym9vbCBcJiMzNDtFbmFibGUgQU1EIElPTU1VIGludGVybmFscyBpbiBEZWJ1Z0ZTXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTM6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUyMTMKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqVW5kZXJzdGFuZGluZyBJUlFfUkVNQVAgaW4gRGVwdGgqKgoKUmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSVJRX1JFTUFQLi4uIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucy4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgcmVtYXBwaW5nIGludGVycnVwdCByZXF1ZXN0IGxpbmVzLCBlc3NlbnRpYWxseSBkZWNvdXBsaW5nIHRoZSBwaHlzaWNhbCBpbnRlcnJ1cHQgcGlucyBmcm9tIHRoZSBpbnRlcnJ1cHQgbnVtYmVycyBwcmVzZW50ZWQgdG8gdGhlIENQVS4gVGhlIGltbWVkaWF0ZSBiZW5lZml0IGlzLCBvZiBjb3Vyc2UsIGEgbW9yZSBmbGV4aWJsZSBhbmQgcm9idXN0IGludGVycnVwdCByb3V0aW5nIHN5c3RlbS4gV2UmIzM5O3JlIGdldHRpbmcgYXdheSBmcm9tIHRoZSBoYXJkd2lyZWQgbGltaXRhdGlvbnMgb2YgbGVnYWN5IGludGVycnVwdCBjb250cm9sbGVycyBhbmQgZW1icmFjaW5nIGEgbW9yZSBkeW5hbWljIGFwcHJvYWNoLgoKVGhlIGtleSBxdWVzdGlvbiBpcywgKmhvdyogaXMgdGhpcyByZW1hcCBpbXBsZW1lbnRlZD8gSXMgaXQgYSB0cmFuc2xhdGlvbiB0YWJsZSB3aXRoaW4gdGhlIGNoaXBzZXQ/IElzIGl0IG1hbmFnZWQgYnkgdGhlIGhvc3QgYnJpZGdlPyBBbmQgd2hhdCBhcmUgdGhlIHBlcmZvcm1hbmNlIG92ZXJoZWFkcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBpbmRpcmVjdGlvbj8gSSYjMzk7ZCBpbWFnaW5lIHRoYXQgYW55IGxhdGVuY3kgaW50cm9kdWNlZCBieSB0aGUgcmVtYXBwaW5nIHByb2Nlc3MgaXMgdGhlIHByaW1hcnkgZmFjdG9yIHRvIGNvbnNpZGVyIC0gZXNwZWNpYWxseSBpbiBwZXJmb3JtYW5jZSBjcml0aWNhbCBlbnZpcm9ubWVudHMuCgpJJiMzOTttIGFsc28gY29uc2lkZXJpbmcgdGhlIGltcGxpY2F0aW9ucyBmb3IgZGV2aWNlIGRyaXZlcnMuIERvIHRoZXkgbmVlZCB0byBiZSBhd2FyZSBvZiB0aGUgcmVtYXBwaW5nPyBPciBpcyB0aGUgc3lzdGVtIGFic3RyYWN0aW9uIHRyYW5zcGFyZW50IGVub3VnaCB0byBpbnN1bGF0ZSB0aGUgZHJpdmVyIGZyb20gdGhlc2UgY2hhbmdlcywgYWxsb3dpbmcgaXQgdG8gc2ltcGx5IHJlcXVlc3QgYW4gaW50ZXJydXB0IG51bWJlciBhbmQgaGF2ZSB0aGUgc3lzdGVtIGhhbmRsZSB0aGUgdW5kZXJseWluZyByZW1hcHBpbmcgd2l0aG91dCBpdHMgaW50ZXJ2ZW50aW9uPyBJJiMzOTtkIGhhemFyZCBhIGd1ZXNzIHRoYXQgbmV3ZXIgZHJpdmVycyBhcmUgYnVpbHQgd2l0aCBhd2FyZW5lc3MsIGFsbG93aW5nIHNvbWUgZGVncmVlIG9mIGNvbnRyb2wuCgpGaW5hbGx5LCB3aGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGZvciB2aXJ0dWFsaXphdGlvbj8gSG93IGRvZXMgSVJRX1JFTUFQIHBsYXkgd2l0aCBpbnRlcnJ1cHQgdmlydHVhbGl6YXRpb24gdGVjaG5pcXVlcywgbGlrZSBNU0ktWCBhbmQgaW50ZXJydXB0IHJlbWFwcGluZyBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBJcyB0aGVyZSBhIG5lZWQgdG8gY2FyZWZ1bGx5IG1hbmFnZSB0aGUgbWFwcGluZyBvZiBwaHlzaWNhbCBpbnRlcnJ1cHRzIHRvIHZpcnR1YWwgaW50ZXJydXB0IHZlY3RvcnM/IFRoaXMgaXMgcmVhbGx5IGNydWNpYWwgd2hlbiBkZWFsaW5nIHdpdGggbmVzdGVkIHZpcnR1YWxpemF0aW9uIG9yIGhpZ2gtcGVyZm9ybWFuY2UgSS9PIHZpcnR1YWxpemF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxMzozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSVJRX1JFTUFQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW9tbXUvS2NvbmZpZz0xOTk9c291cmNlIFwmIzM0O2RyaXZlcnMvaW9tbXUvcmlzY3YvS2NvbmZpZ1wmIzM0O1xuZHJpdmVycy9pb21tdS9LY29uZmlnLTIwMC1cbmRyaXZlcnMvaW9tbXUvS2NvbmZpZzoyMDE6Y29uZmlnIElSUV9SRU1BUFxuZHJpdmVycy9pb21tdS9LY29uZmlnLTIwMi1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgSW50ZXJydXB0IFJlbWFwcGluZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxMzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTY5MQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBhbWRfaW9tbXVfZ2FwcGlgIGZlYXR1cmUgYW5kIHRyeWluZyB0byBmaWd1cmUgb3V0IGlmIGl0JiMzOTtzIGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmcuIEZpcnN0LCBJIG5lZWQgdG8gY2hlY2sgaWYgdGhlcmUgYXJlIGFsdGVybmF0aXZlIGNvbmZpZ3VyYXRpb25zIHRoYXQgbWlnaHQgYWZmZWN0IGl0LiBPa2F5LCBJIHNlZSBpdCYjMzk7cyBleHBvcnRlZCBpbiBgZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jYC4gVGhhdCYjMzk7cyBhIGdvb2Qgc2lnbi4gTG9va3MgbGlrZSBpdCYjMzk7cyBlbmFibGVkIGJ5IHRoZSBgYW1kX2lvbW11PWdhcHBpYCBrZXJuZWwgcGFyYW1ldGVyLiBIbW0sIHRoZSBvYnZpb3VzIHBhdGggdG8gZ2V0dGluZyBzeXprYWxsZXIgdG8gaGl0IHRoaXMgd291bGQgYmUgdG8gcGFzcyB0aGF0IHBhcmFtZXRlci4gQnV0IHN5emthbGxlciBkb2VzbiYjMzk7dCBhdXRvbWF0aWNhbGx5IHBhc3Mga2VybmVsIHBhcmFtZXRlcnMgdW5sZXNzIHRoZXkmIzM5O3JlIGV4cGxpY2l0bHkgZGVmaW5lZCBpbiBpdHMgY29uZmlndXJhdGlvbiwgYW5kIEkgY2FuJiMzOTt0IHNwZWNpZnkga2VybmVsIHBhcmFtZXRlcnMgZGlyZWN0bHkgd2l0aGluIEtjb25maWcuIFRoYXQmIzM5O3MgYSBodXJkbGUuIFNvLCBmdXp6aW5nIHRoZSBwYXJhbWV0ZXIgcGFyc2luZyBpdHNlbGYgaXNuJiMzOTt0IGEgdmlhYmxlIG9wdGlvbi4KCk5vdywgaG9sZCBvbiBhIHNlY29uZC4uLiBgYW1kX2lvbW11X2dhcHBpYCBpcyBhICpnbG9iYWwqIHZhcmlhYmxlLiBUaGF0IGNoYW5nZXMgdGhpbmdzLiBDb3VsZCBpdCBiZSBleHBvc2VkIHRocm91Z2ggc3lzZnMgb3IgZGVidWdmcz8gSWYgc28sIHRoYXQgb3BlbnMgYSBiYWNrZG9vci4gSSBuZWVkIHRvIGludmVzdGlnYXRlIGlmIHRoZXJlJiMzOTtzIGFueSBtZWNoYW5pc20gdG8gbW9kaWZ5IHRoaXMgZ2xvYmFsIHZhcmlhYmxlLiBUaW1lIHRvIGNoZWNrIGZvciBpdHMgZXhwb3N1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDEzOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FtZF9pb21tdV9nYXBwaSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW9tbXUvYW1kLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2lvbW11L2FtZC9hbWRfaW9tbXUuaD00Mz1pbnQgYW1kX2lvbW11X2VuYWJsZV9mYXVsdGluZyh1bnNpZ25lZCBpbnQgY3B1KTtcbmRyaXZlcnMvaW9tbXUvYW1kL2FtZF9pb21tdS5oOjQ0OmV4dGVybiBib29sIGFtZF9pb21tdV9nYXBwaTtcbmRyaXZlcnMvaW9tbXUvYW1kL2FtZF9pb21tdS5oLTQ1LWV4dGVybiBpbnQgYW1kX2lvbW11X2d1ZXN0X2lyO1xuLS1cbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYz0xNjE9aW50IGFtZF9pb21tdV9ncHRfbGV2ZWwgPSBQQUdFX01PREVfNF9MRVZFTDtcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy0xNjItXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM6MTYzOmJvb2wgYW1kX2lvbW11X2dhcHBpO1xuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jOjE2NDpFWFBPUlRfU1lNQk9MKGFtZF9pb21tdV9nYXBwaSk7XG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMTY1LVxuLS1cbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYz0yOTk4PXN0YXRpYyB2b2lkIGVuYWJsZV9pb21tdXNfdmFwaWModm9pZClcbi0tXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMzAwNS1cdFx0LypcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYzozMDA2Olx0XHQgKiBEaXNhYmxlIEdBUFBJLCBkbyBub3QgY2hlY2sgYW1kX2lvbW11X2dhcHBpIGFzIGl0IG1heSBiZVxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTMwMDctXHRcdCAqIGZhbHNlIGluIG5ldyBrZXhlYyBrZXJuZWwgZXZlbiB0aG91Z2ggcHJldmlvdXMga2VybmVsIGhhc1xuLS1cbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy0zMDUwLVxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jOjMwNTE6XHRpZiAoYW1kX2lvbW11X2dhcHBpIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTMwNTItXHQgICAgIShjaGVja19mZWF0dXJlKEZFQVRVUkVfR0FQUEkpIFx1MDAyNlx1MDAyNlxuLS1cbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy0zMDU0LVx0XHRwcl93YXJuKFwmIzM0O0dBUFBJIGlzIG5vdCBzdXBwb3J0ZWQuXFxuXCYjMzQ7KTtcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYzozMDU1Olx0XHRhbWRfaW9tbXVfZ2FwcGkgPSBmYWxzZTtcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy0zMDU2LVx0fVxuLS1cbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy0zMDU5LVx0Zm9yX2VhY2hfaW9tbXUoaW9tbXUpIHtcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYzozMDYwOlx0XHRpZiAoYW1kX2lvbW11X2dhcHBpKVxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTMwNjEtXHRcdFx0aW9tbXVfZmVhdHVyZV9lbmFibGUoaW9tbXUsIENPTlRST0xfR0FQUElfRU4pO1xuLS1cbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy0zMDcyLVx0cHJfaW5mbyhcJiMzNDtWaXJ0dWFsIEFQSUMgZW5hYmxlZCB3aXRoICVzXFxuXCYjMzQ7LFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jOjMwNzM6XHRcdGFtZF9pb21tdV9nYXBwaSA/IFwmIzM0O0dBUFBJXCYjMzQ7IDogXCYjMzQ7R0FMT0dcJiMzNDspO1xuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTMwNzQtI2VuZGlmXG4tLVxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jPTM3Mzc9c3RhdGljIGludCBfX2luaXQgcGFyc2VfYW1kX2lvbW11X29wdGlvbnMoY2hhciAqc3RyKVxuLS1cbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy0zNzY0LVx0XHR9IGVsc2UgaWYgKHN0cm5jbXAoc3RyLCBcJiMzNDtnYXBwaVwmIzM0OywgNSkgPT0gMCkge1xuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jOjM3NjU6XHRcdFx0YW1kX2lvbW11X2dhcHBpID0gdHJ1ZTtcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy0zNzY2LVx0XHR9IGVsc2Uge1xuLS1cbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmM9Mzk2Mj1zdGF0aWMgdm9pZCBfX2FtZF9pb21tdV91cGRhdGVfZ2Eoc3RydWN0IGlydGVfZ2EgKmVudHJ5LCBpbnQgYXBpY2lkLFxuLS1cbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmMtMzk3Mi1cdH0gZWxzZSB7XG5kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jOjM5NzM6XHRcdGlmIChhbWRfaW9tbXVfZ2FwcGkpIHtcbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmMtMzk3NC1cdFx0XHRlbnRyeS1cdTAwM2Vsby5maWVsZHNfdmFwaWMuZ2FwcGlfZGlzID0gIXdha2V1cF9pbnRyIFx1MDAyNlx1MDAyNlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxMzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzE2MwoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDIwNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgQU1EIElPTU1VIEdBUFBJIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggc2VlbXMgdG8gaW50cm9kdWNlIEdBUFBJIChHdWVzdCBBUElDLWJhc2VkIFBvc3RlZCBJbnRlcnJ1cHQpIHN1cHBvcnQgZm9yIHRoZSBBTUQgSU9NTVUsIHdoaWNoIEkgYmVsaWV2ZSBpcyByZWxhdGVkIHRvIGludGVycnVwdCBoYW5kbGluZy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYGFtZF9pb21tdV9nYXBwaWAgaXMgdGhlIGtleSBmbGFnIGhlcmUsIGFuZCBpdCYjMzk7cyBzZXQgb25seSB3aGVuIGBhbWRfaW9tbXU9Z2FwcGlgIGlzIHBhc3NlZCBhcyBhIGtlcm5lbCBwYXJhbWV0ZXIuIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGVyZSYjMzk7cyBubyBvdGhlciB3YXkgdG8gc2V0IGl0LgoKVGhlIGludGVyZXN0aW5nIHBvaW50IGlzIGhvdyB0aGUgY29kZSAqYmVoYXZlcyogd2hlbiBgYW1kX2lvbW11X2dhcHBpYCBpcyAqbm90KiBzZXQuIFRoZSBwYXRjaCBkb2VzIG1vZGlmeSB0aGUgbm9uLUdBUFBJIHBhdGgsIGJ1dCBpdCBhcHBlYXJzIHRvIGJlIHByaW1hcmlseSBhIHJlZmFjdG9yaW5nIG9yIGNsZWFudXAuIFZhcmlhYmxlcyBhcmUgcmVuYW1lZCAoYGdhX2xvZ19pbnRyYCB0byBgd2FrZXVwX2ludHJgKSBhbmQgc29tZSBsb2dpYyBpcyB0d2Vha2VkLCBidXQgdGhlICpmdW5jdGlvbmFsaXR5KiByZW1haW5zIGVzc2VudGlhbGx5IHRoZSBzYW1lIGZvciB0aGUgbm9uLUdBUFBJIHBhdGguIFRoZSBrZXkgY2hhbmdlIGlzIHRoYXQgYGFtZF9pb21tdV91cGRhdGVfZ2FgIG5vdyB0YWtlcyBgYXBpY2lkYCwgYHdha2V1cF9pbnRyYCwgYW5kIGBpc19ydW5uaW5nYCBhcmd1bWVudHMsIHJlcGxhY2luZyB0aGUgb3JpZ2luYWwgYGNwdWAgYW5kIGBnYV9sb2dfaW50cmAuCgpMb29raW5nIGRlZXBlciwgdGhlIG9yaWdpbmFsIGBjcHVgIGFyZ3VtZW50IGluIGBhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5YCB3YXMgYWN0dWFsbHkgdGhlIEFQSUMgSUQsIG5vdCB0aGUgQ1BVIG51bWJlciwgd2hpY2ggdGhpcyBwYXRjaCBjb3JyZWN0bHkgY2FwdHVyZXMuIFRoZSByZW5hbWluZyB0byBgYXBpY2lkYCBpcyB0aHVzIG1vcmUgYWNjdXJhdGUgYW5kIGNsZWFyZXIuCgpUaGUgbmV3IEdBUFBJLXNwZWNpZmljIGNvZGUsIGxpa2UgYGF2aWNfYWRkX3ZjcHVfdG9fZ2FwcGlfd2FrZXVwX2xpc3RgIGFuZCByZWxhdGVkIGNoYW5nZXMsIGlzIGVudGlyZWx5IGdhdGVkIGJ5IHRoZSBgYW1kX2lvbW11X2dhcHBpYCBmbGFnLCB3aGljaCBtZWFucyBpdCBpcyBpbmFjY2Vzc2libGUgd2l0aG91dCBwYXNzaW5nIGBhbWRfaW9tbXU9Z2FwcGlgLgoKR2l2ZW4gU3l6a2FsbGVyJiMzOTtzIGJlaGF2aW9yLCBJIG5lZWQgdG8gZXZhbHVhdGUgaWYgdGhlIHBhdGNoICpzaG91bGQqIGJlIGZ1enplZC4gVGhlIHBhdGNoIHNlZW1zIHRvIGludHJvZHVjZSAqbmV3KiBmdW5jdGlvbmFsIGJlaGF2aW9yLCBhbmQgdGhhdCBpcyBHQVBQSS4gU3l6a2FsbGVyIGNhbiBwYXNzIHRoZSBuZWVkZWQga2VybmVsIHBhcmFtZXRlci4gVGhlcmVmb3JlLCB0aGlzIHBhdGNoIHdhcnJhbnRzIGZ1enppbmcsIHNpbmNlIGl0IGludHJvZHVjZXMgR0FQUEkuCgpUaGUgcmVxdWlyZWQgS2NvbmZpZyBvcHRpb25zIGFyZSBgS1ZNX0FNRGAgYW5kIGBBTURfSU9NTVVgIGJlY2F1c2UgdGhleSBlbmFibGUgdGhlIGZ1bmRhbWVudGFsIEFNRCBLVk0gYW5kIElPTU1VIGZ1bmN0aW9uYWxpdHkgb24gd2hpY2ggdGhpcyBHQVBQSSBmZWF0dXJlIGlzIGJ1aWx0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxMzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNX0FNRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMzQ9Y29uZmlnIEtWTV9JTlRFTF9URFhcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNDY6Y29uZmlnIEtWTV9BTURcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0Ny1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cdGJvb2wgXCYjMzQ7QU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxMzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTkyMgoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLiBNeSBmaXJzdCB0aG91Z2h0IGlzOgoKKipDaGVja2luZyBEZXBlbmRlbmNpZXMgZm9yIGBBTURfSU9NTVVgKioKClJpZ2h0LCBzbyBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgdGhlIGBBTURfSU9NTVVgIG1vZHVsZSBoYXMgYW55IGRlcGVuZGVuY2llcyB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciBjb21wb25lbnRzIG9yIHNldHRpbmdzIGl0IHJlbGllcyBvbiBiZWZvcmUgSSBjYW4gcHJvcGVybHkgYXNzZXNzIGl0cyBmdW5jdGlvbiBvciBwb3RlbnRpYWwgaXNzdWVzLiBUaGlzIGlzIGEgZnVuZGFtZW50YWwgc3RlcCBmb3IgbWU7IGlmIGl0IGRlcGVuZHMgb24gc29tZXRoaW5nLCBJIG5lZWQgdG8ga25vdyAqd2hhdCogc28gSSBjYW4gYXNzZXNzIHdoZXRoZXIgdGhhdCBkZXBlbmRlbmN5IGlzIHNldCB1cCBjb3JyZWN0bHksIG9yIHdoYXQgdGhlIGtub2NrLW9uIGVmZmVjdHMgb2YgbWVzc2luZyB3aXRoIGBBTURfSU9NTVVgIG1pZ2h0IGJlLiBUaW1lIHRvIGRpZyBpbiBhbmQgZmluZCBvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDEzOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBBTURfSU9NTVUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZy0yLSMgQU1EIElPTU1VIHN1cHBvcnRcbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWc6Mzpjb25maWcgQU1EX0lPTU1VXG5kcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnLTQtXHRib29sIFwmIzM0O0FNRCBJT01NVSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZy0zMi1cbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWc6MzM6Y29uZmlnIEFNRF9JT01NVV9JT01NVUZEXG5kcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnLTM0LVx0Ym9vbCBcJiMzNDtFbmFibGUgSU9NTVVGRCBmZWF0dXJlcyBmb3IgQU1EIElPTU1VIChFWFBFUklNRU5UQUwpXCYjMzQ7XG4tLVxuZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZy00Mi1cbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWc6NDM6Y29uZmlnIEFNRF9JT01NVV9ERUJVR0ZTXG5kcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnLTQ0LVx0Ym9vbCBcJiMzNDtFbmFibGUgQU1EIElPTU1VIGludGVybmFscyBpbiBEZWJ1Z0ZTXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDEzOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMzIxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkV4YW1pbmluZyBBTUQgSU9NTVUgRGVwZW5kZW5jaWVzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIHJpZ2h0IGluLiBUbyB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBwaWN0dXJlIG9mIGhvdyBgQU1EX0lPTU1VYCBpcyBjb25maWd1cmVkIGFuZCB1c2VkLCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGl0cyBkZXBlbmRlbmNpZXMuIEkmIzM5O20gZ29pbmcgdG8gbmF2aWdhdGUgdG8gdGhlIGBkcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IOKAkyBpdCYjMzk7cyB3aGVyZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGlzIHNwZWNpZmljIEFNRCBJT01NVSBkcml2ZXIgYXJlIGRlZmluZWQsIGFuZCB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gYEFNRF9JT01NVWAgYW5kIG90aGVyIGZlYXR1cmVzIG9yIG9wdGlvbnMgd2l0aGluIHRoZSBrZXJuZWwuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGNvbmRpdGlvbmFsIGxvZ2ljLCB0aGUgYGRlcGVuZHMgb25gIHN0YXRlbWVudHMsIGFueSBgc2VsZWN0YCBzdGF0ZW1lbnRzLCBhbmQgYW55dGhpbmcgdGhhdCBnaXZlcyBtZSBpbnNpZ2h0IGludG8gd2hhdCBlbHNlICptdXN0KiBiZSBlbmFibGVkIG9yIGNvbnNpZGVyZWQgaW4gb3JkZXIgZm9yIGBBTURfSU9NTVVgIHRvIGJlIGF2YWlsYWJsZSBhbmQgZnVuY3Rpb25hbC4gSSBleHBlY3QgdGhpcyBmaWxlIHdpbGwgcmV2ZWFsIHRoZSBrZXkgYnVpbGRpbmcgYmxvY2tzLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDEzOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCMgQU1EIElPTU1VIHN1cHBvcnRcbiAgIDM6XHRjb25maWcgQU1EX0lPTU1VXG4gICA0Olx0XHRib29sIFwmIzM0O0FNRCBJT01NVSBzdXBwb3J0XCYjMzQ7XG4gICA1Olx0XHRzZWxlY3QgU1dJT1RMQlxuICAgNjpcdFx0c2VsZWN0IFBDSV9NU0lcbiAgIDc6XHRcdHNlbGVjdCBQQ0lfQVRTXG4gICA4Olx0XHRzZWxlY3QgUENJX1BSSVxuICAgOTpcdFx0c2VsZWN0IFBDSV9QQVNJRFxuICAxMDpcdFx0c2VsZWN0IElSUV9NU0lfTElCXG4gIDExOlx0XHRzZWxlY3QgTU1VX05PVElGSUVSXG4gIDEyOlx0XHRzZWxlY3QgSU9NTVVfQVBJXG4gIDEzOlx0XHRzZWxlY3QgSU9NTVVfSU9WQVxuICAxNDpcdFx0c2VsZWN0IElPTU1VX1NWQVxuICAxNTpcdFx0c2VsZWN0IElPTU1VX0lPUEZcbiAgMTY6XHRcdHNlbGVjdCBJT01NVUZEX0RSSVZFUiBpZiBJT01NVUZEXG4gIDE3Olx0XHRzZWxlY3QgR0VORVJJQ19QVFxuICAxODpcdFx0c2VsZWN0IElPTU1VX1BUXG4gIDE5Olx0XHRzZWxlY3QgSU9NTVVfUFRfQU1EVjFcbiAgMjA6XHRcdHNlbGVjdCBJT01NVV9QVF9YODZfNjRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTM6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA4NjQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLgoKKipJJiMzOTttIERlZXAgaW4gdGhlIFdlZWRzIG9uIElPTU1VIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIHNvIEkmIzM5O20gZm9jdXNpbmcgb24gZ2V0dGluZyB0aGlzIEFNRCBJT01NVSBpbXBsZW1lbnRhdGlvbiBjb25maWd1cmVkIHByb3Blcmx5LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbWFrZSBzdXJlIEkmIzM5O3ZlIGdvdCBgQU1EX0lPTU1VYCBlbmFibGVkIGluIHRoZSBjb25maWcuIFRoYXQmIzM5O3MgdGhlIGJhc2VsaW5lLiBCdXQgSSBjYW4mIzM5O3QganVzdCBzdG9wIHRoZXJlLiBUaGUgbmV4dCBrZXkgYXNwZWN0IG9mIHRoaXMsIGJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcsIHdvdWxkIGJlIHRvIGNvbnNpZGVyIGBJUlFfUkVNQVBgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhhdCBpcyBnb2luZyB0byBpbnRlcmFjdCB3aXRoIHRoZSBJT01NVS4gRG9lcyBpdCBuZWVkIHRvIGJlIGVuYWJsZWQgZm9yIG9wdGltYWwgcGVyZm9ybWFuY2U/IERvZXMgdGhlIGltcGxlbWVudGF0aW9uIGRlcGVuZCBvbiBpdD8gSSBuZWVkIHRvIHRoaW5rIGNhcmVmdWxseSBhYm91dCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZXNlIHNldHRpbmdzLiBJIGtub3cgYElSUV9SRU1BUGAgaXMgY3J1Y2lhbCB0byBtYWtpbmcgc3VyZSB0aGF0IHRoZSBpbnRlcnJ1cHRzIGFyZSBwcm9wZXJseSBtYXBwZWQgdGhyb3VnaCB0aGUgSU9NTVUsIHRoZXJlZm9yZSBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgYWxsIHNldCB1cCBjb3JyZWN0bHkuIFRoaXMgYWxsIHRpZXMgdG9nZXRoZXIsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgYWxsIGZ1bmN0aW9uaW5nIHRvZ2V0aGVyIHByb3Blcmx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxMzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvaW9tbXUvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTkwOlx0XHQgIFRoZXNlIElPTU1VcyBhbGxvdyB2aXJ0dWFsaXphdGlvbiBvZiB0aGUgYWRkcmVzcyBzcGFjZSB1c2VkIGJ5IG1vc3RcbiAxOTE6XHRcdCAgY29yZXMgd2l0aGluIHRoZSBtdWx0aW1lZGlhIHN1YnN5c3RlbS5cbiAxOTI6XHRcbiAxOTM6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTiBoZXJlLlxuIDE5NDpcdFxuIDE5NTpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnXCYjMzQ7XG4gMTk2Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvaW9tbXUvYXJtL0tjb25maWdcJiMzNDtcbiAxOTc6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9pb21tdS9pbnRlbC9LY29uZmlnXCYjMzQ7XG4gMTk4Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvaW9tbXUvaW9tbXVmZC9LY29uZmlnXCYjMzQ7XG4gMTk5Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvaW9tbXUvcmlzY3YvS2NvbmZpZ1wmIzM0O1xuIDIwMDpcdFxuIDIwMTpcdGNvbmZpZyBJUlFfUkVNQVBcbiAyMDI6XHRcdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgSW50ZXJydXB0IFJlbWFwcGluZ1wmIzM0O1xuIDIwMzpcdFx0ZGVwZW5kcyBvbiBYODZfNjQgXHUwMDI2XHUwMDI2IFg4Nl9JT19BUElDIFx1MDAyNlx1MDAyNiBQQ0lfTVNJIFx1MDAyNlx1MDAyNiBBQ1BJXG4gMjA0Olx0XHRzZWxlY3QgSVJRX01TSV9MSUJcbiAyMDU6XHRcdGhlbHBcbiAyMDY6XHRcdCAgU3VwcG9ydHMgSW50ZXJydXB0IHJlbWFwcGluZyBmb3IgSU8tQVBJQyBhbmQgTVNJIGRldmljZXMuXG4gMjA3Olx0XHQgIFRvIHVzZSB4MmFwaWMgbW9kZSBpbiB0aGUgQ1BVJiMzOTtzIHdoaWNoIHN1cHBvcnQgeDJBUElDIGVuaGFuY2VtZW50cyBvclxuIDIwODpcdFx0ICB0byBzdXBwb3J0IHBsYXRmb3JtcyB3aXRoIENQVSYjMzk7cyBoYXZpbmcgXHUwMDNlIDggYml0IEFQSUMgSUQsIHNheSBZLlxuIDIwOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxMzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTQ4OAoJCQkJCQkJb3V0cHV0OiAxMTYKCQkJCQkJCXRob3VnaHRzOiA3NDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEFNRCBJT01NVSBhbmQgQVZJQyBGdW5jdGlvbmFsaXR5KioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyB0aGUgQU1EIElPTU1VIGFuZCBBZHZhbmNlZCBWaXJ0dWFsIEludGVycnVwdCBDb250cm9sbGVyIChBVklDKSBwbGF5IHRvZ2V0aGVyLCBhbmQgaXQmIzM5O3MgYmVjb21pbmcgY2xlYXIgd2hlcmUgdGhlIGRlcGVuZGVuY2llcyBsaWUuIFNwZWNpZmljYWxseSwgSSBzZWUgdGhhdCBgSVJRX1JFTUFQYCBpcyBjcnVjaWFsLiBJdCYjMzk7cyBlc3NlbnRpYWwgZm9yIGBhbWRfaW9tbXVfdXBkYXRlX2dhYCBhbmQgYGFtZF9pb21tdV9hY3RpdmF0ZV9ndWVzdF9tb2RlYCB0byBiZSBkZWZpbmVkIGFuZCwgdGhlcmVmb3JlLCB1c2FibGUuIEkgY29uZmlybWVkIHRoaXMgYnkgY2hlY2tpbmcgdGhlIGluY2x1ZGUgZmlsZSBgbGludXgvYW1kLWlvbW11LmhgLCBzZWVpbmcgdGhhdCBib3RoIGBDT05GSUdfQU1EX0lPTU1VYCBhbmQgYENPTkZJR19JUlFfUkVNQVBgIGFyZSByZXF1aXJlZC4gQWxzbywgdGhlIEtWTSBzaWRlIHJlcXVpcmVzIGBLVk1fQU1EYC4KCk5vdywgSSB3YW50IHRvIGlkZW50aWZ5IHRoZSBrZXkgc3ltYm9scyB0byBmb2N1cyBvbiBpbiB0aGlzIGFuYWx5c2lzLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O3ZlIGlkZW50aWZpZWQ6IGBhdmljX2FkZF92Y3B1X3RvX2dhcHBpX3dha2V1cF9saXN0YCwgYGF2aWNfcmVtb3ZlX3ZjcHVfZnJvbV9nYXBwaV93YWtldXBfbGlzdGAsIGBhdmljX2dhcHBpX3dha2V1cF9oYW5kbGVyYCwgYF9fYW1kX2lvbW11X3VwZGF0ZV9nYWAsIGBhbWRfaW9tbXVfdXBkYXRlX2dhYCwgYW5kIGBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZWAuIEkmIzM5O20gYWxzbyBnb2luZyB0byBhZGQgYSBmZXcgbW9yZSB0byB0aGUgbGlzdCB0aGF0IEkmIzM5O3ZlIGZvdW5kIHdoaWxlIGxvb2tpbmcgb3ZlciB0aGUgY29kZTogYGF2aWNfaW5pdF92Y3B1YCwgYGF2aWNfZGVzdHJveV92Y3B1YCwgYGF2aWNfcGlfdXBkYXRlX2lydGVgIGFuZCBgYXZpY191cGRhdGVfaW9tbXVfdmNwdV9hZmZpbml0eWAuIEkmIzM5O2xsIHdhbnQgdG8gaW5jbHVkZSBhbGwgb2YgdGhlc2U6IGBhdmljX2FkZF92Y3B1X3RvX2dhcHBpX3dha2V1cF9saXN0YCwgYGF2aWNfcmVtb3ZlX3ZjcHVfZnJvbV9nYXBwaV93YWtldXBfbGlzdGAsIGBhdmljX2dhcHBpX3dha2V1cF9oYW5kbGVyYCwgYGF2aWNfcGlfdXBkYXRlX2lydGVgLCBgYXZpY191cGRhdGVfaW9tbXVfdmNwdV9hZmZpbml0eWAsIGBfX2FtZF9pb21tdV91cGRhdGVfZ2FgLCBgYW1kX2lvbW11X3VwZGF0ZV9nYWAsIGFuZCBgYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGVgLgoKTmV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hpY2ggb2YgdGhlc2UgZnVuY3Rpb25zIGFyZSAmIzM0O2hvdCBwYXRoJiMzNDsg4oCTIHdoaWNoIG9uZXMgYXJlIGNhbGxlZCBmcmVxdWVudGx5IGFuZCBhcmUgdGhlcmVmb3JlIGxpa2VseSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcy4gTG9va2luZyBhdCBgYXZpY191cGRhdGVfaW9tbXVfdmNwdV9hZmZpbml0eWAsIEkgc2VlIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGBfX2F2aWNfdmNwdV9sb2FkYCBhbmQgYF9fYXZpY192Y3B1X3B1dGAsIHdoaWNoIGFyZSBpbnZvbHZlZCB3aGVuIGEgdkNQVSBpcyBzY2hlZHVsZWQgaW4gb3Igb3V0LiBUaGlzIGlzIHNvbWV3aGF0IGhvdCwgYnV0IG5vdCBhcyBob3QgYXMsIHNheSwgVk0tZXhpdCBoYW5kbGVycy4gYGF2aWNfcGlfdXBkYXRlX2lydGVgIHVwZGF0ZXMgdGhlIElSVEUsIGJ1dCBpdCYjMzk7cyBub3QgaG90LCBub3QgY2FsbGVkIGNvbnN0YW50bHkuIGBhdmljX2dhcHBpX3dha2V1cF9oYW5kbGVyYCBpcyB0cmlnZ2VyZWQgYnkgcG9zdGVkIGludGVycnVwdCB3YWtldXBzLiBgX19hbWRfaW9tbXVfdXBkYXRlX2dhYCBpcyBjYWxsZWQgZnJvbSBgYW1kX2lvbW11X3VwZGF0ZV9nYWAgYW5kIGBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZWAsIGFuZCB0aGVzZSB0d28gYXJlIGdvaW5nIHRvIGJlIGltcG9ydGFudCB0byBsb29rIGF0LiBTbyBteSByZXZpc2VkIGxpc3Qgb2YgZnVuY3Rpb25zIHRvIGZvY3VzIG9uIGxvb2tzIGxpa2UgdGhpczoKCiogICBgYXZpY19hZGRfdmNwdV90b19nYXBwaV93YWtldXBfbGlzdGAKKiAgIGBhdmljX3JlbW92ZV92Y3B1X2Zyb21fZ2FwcGlfd2FrZXVwX2xpc3RgCiogICBgYXZpY19nYXBwaV93YWtldXBfaGFuZGxlcmAKKiAgIGBhdmljX3BpX3VwZGF0ZV9pcnRlYAoqICAgYGF2aWNfdXBkYXRlX2lvbW11X3ZjcHVfYWZmaW5pdHlgCiogICBgX19hbWRfaW9tbXVfdXBkYXRlX2dhYAoqICAgYGFtZF9pb21tdV91cGRhdGVfZ2FgCiogICBgYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGVgCgpOb3csIGp1c3QgdG8gYmUgdGhvcm91Z2gsIEkmIzM5O2xsIHF1aWNrbHkgdmVyaWZ5IHRoYXQgdGhlc2UgZnVuY3Rpb25zIGRvIGluZGVlZCBleGlzdCBhbmQgdGhhdCBJJiMzOTt2ZSBnb3QgdGhlIG5hbWVzIHNwZWxsZWQgY29ycmVjdGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxMzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsoYXZpY19hZGRfdmNwdV90b19nYXBwaV93YWtldXBfbGlzdHxhdmljX3JlbW92ZV92Y3B1X2Zyb21fZ2FwcGlfd2FrZXVwX2xpc3R8YXZpY19nYXBwaV93YWtldXBfaGFuZGxlcnxhdmljX3BpX3VwZGF0ZV9pcnRlfGF2aWNfdXBkYXRlX2lvbW11X3ZjcHVfYWZmaW5pdHl8X19hbWRfaW9tbXVfdXBkYXRlX2dhfGFtZF9pb21tdV91cGRhdGVfZ2F8YW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUpJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vYXZpYy5jPTg3Mj1pbnQgYXZpY19pbml0X3ZjcHUoc3RydWN0IHZjcHVfc3ZtICpzdm0pXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtODk0LVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6ODk1OnN0YXRpYyB2b2lkIGF2aWNfYWRkX3ZjcHVfdG9fZ2FwcGlfd2FrZXVwX2xpc3Qoc3RydWN0IHZjcHVfc3ZtICpzdm0sIGludCBjcHUpXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy04OTYte1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTkwOS1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjkxMDpzdGF0aWMgdm9pZCBhdmljX3JlbW92ZV92Y3B1X2Zyb21fZ2FwcGlfd2FrZXVwX2xpc3Qoc3RydWN0IHZjcHVfc3ZtICpzdm0sIGludCBjcHUpXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy05MTEte1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jPTkyMz12b2lkIGF2aWNfZGVzdHJveV92Y3B1KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTkyNS1cdGlmIChzdm0tXHUwMDNlZ2FwcGlfY3B1ICE9IC0xIFx1MDAyNlx1MDAyNiBhbWRfaW9tbXVfZ2FwcGkpIHtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjkyNjpcdFx0YXZpY19yZW1vdmVfdmNwdV9mcm9tX2dhcHBpX3dha2V1cF9saXN0KHN2bSwgc3ZtLVx1MDAzZWdhcHBpX2NwdSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy05MjctXHRcdHN2bS1cdTAwM2VnYXBwaV9jcHUgPSAtMTtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYz05Mzc9c3RhdGljIHZvaWQgc3ZtX2lyX2xpc3RfZGVsKHN0cnVjdCBrdm1fa2VybmVsX2lycWZkICppcnFmZClcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy05NTAtXHRpZiAoYW1kX2lvbW11X2dhcHBpIFx1MDAyNlx1MDAyNiBsaXN0X2VtcHR5KFx1MDAyNnN2bS1cdTAwM2Vpcl9saXN0KSlcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjk1MTpcdFx0YXZpY19yZW1vdmVfdmNwdV9mcm9tX2dhcHBpX3dha2V1cF9saXN0KHN2bSwgc3ZtLVx1MDAzZWdhcHBpX2NwdSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy05NTItXHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZzdm0tXHUwMDNlaXJfbGlzdF9sb2NrLCBmbGFncyk7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtOTU0LVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6OTU1OmludCBhdmljX3BpX3VwZGF0ZV9pcnRlKHN0cnVjdCBrdm1fa2VybmVsX2lycWZkICppcnFmZCwgc3RydWN0IGt2bSAqa3ZtLFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtOTU2LVx0XHRcdHVuc2lnbmVkIGludCBob3N0X2lycSwgdWludDMyX3QgZ3Vlc3RfaXJxLFxuLS1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTEwMTMtXHRcdFx0XHRpZiAobGlzdF9lbXB0eShcdTAwMjZzdm0tXHUwMDNlaXJfbGlzdCkpIHtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjEwMTQ6XHRcdFx0XHRcdGF2aWNfYWRkX3ZjcHVfdG9fZ2FwcGlfd2FrZXVwX2xpc3Qoc3ZtLCBzdm0tXHUwMDNlZ2FwcGlfY3B1KTtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTEwMTUtXHRcdFx0XHRcdGlzX3ZjcHVfd2FpdGluZyA9IHRydWU7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMTAzOS1cdFx0aWYgKGlzX3ZjcHVfd2FpdGluZylcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjEwNDA6XHRcdFx0YXZpY19yZW1vdmVfdmNwdV9mcm9tX2dhcHBpX3dha2V1cF9saXN0KHN2bSwgc3ZtLVx1MDAzZWdhcHBpX2NwdSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMDQxLVx0XHRyZXR1cm4gcmV0O1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jPTEwNDY9ZW51bSBhdmljX3ZjcHVfYWN0aW9uIHtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMDczLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MTA3NDpzdGF0aWMgdm9pZCBhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGFwaWNpZCxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTEwNzUtXHRcdFx0XHRcdCAgICBpbnQgY3B1LCBlbnVtIGF2aWNfdmNwdV9hY3Rpb24gYWN0aW9uKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTEwOTktXHRcdFx0ICovXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzoxMTAwOlx0XHRcdGF2aWNfcmVtb3ZlX3ZjcHVfZnJvbV9nYXBwaV93YWtldXBfbGlzdChzdm0sIHN2bS1cdTAwM2VnYXBwaV9jcHUpO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMTEwMS1cbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMTA0LVx0XHRhcGljaWQgPSBrdm1fY3B1X2dldF9hcGljaWQoc3ZtLVx1MDAzZWdhcHBpX2NwdSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzoxMTA1Olx0XHRhdmljX2FkZF92Y3B1X3RvX2dhcHBpX3dha2V1cF9saXN0KHN2bSwgc3ZtLVx1MDAzZWdhcHBpX2NwdSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMTA2LVx0fVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTExMTEtXHRcdGlmICghKGFjdGlvbiBcdTAwMjYgQVZJQ19UT0dHTEVfT05fT0ZGKSlcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjExMTI6XHRcdFx0V0FSTl9PTl9PTkNFKGFtZF9pb21tdV91cGRhdGVfZ2EoZGF0YSwgYXBpY2lkLCB3YWtldXBfaW50ciwgaXNfcnVubmluZykpO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMTExMy1cdFx0ZWxzZSBpZiAoaXNfcnVubmluZylcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjExMTQ6XHRcdFx0V0FSTl9PTl9PTkNFKGFtZF9pb21tdV9hY3RpdmF0ZV9ndWVzdF9tb2RlKGRhdGEsIGFwaWNpZCwgd2FrZXVwX2ludHIsXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMTE1LVx0XHRcdFx0XHRcdFx0XHQgICBpc19ydW5uaW5nKSk7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM9MTEyMT1zdGF0aWMgdm9pZCBfX2F2aWNfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSxcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMTY4LVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MTE2OTpcdGF2aWNfdXBkYXRlX2lvbW11X3ZjcHVfYWZmaW5pdHkodmNwdSwgaF9waHlzaWNhbF9pZCwgY3B1LCBhY3Rpb24pO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMTE3MC1cbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYz0xMTg5PXN0YXRpYyB2b2lkIF9fYXZpY192Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGVudW0gYXZpY192Y3B1X2FjdGlvbiBhY3Rpb24pXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMTIxMS1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjEyMTI6XHRhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5KHZjcHUsIC0xLCAtMSwgYWN0aW9uKTtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTEyMTMtXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM9MTM0ND1zdGF0aWMgYm9vbCBfX2luaXQgYXZpY193YW50X2F2aWNfZW5hYmxlZCh2b2lkKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTEzODQtXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzoxMzg1OnN0YXRpYyB2b2lkIGF2aWNfZ2FwcGlfd2FrZXVwX2hhbmRsZXIodm9pZClcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTEzODYte1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jPTE0MDY9Ym9vbCBfX2luaXQgYXZpY19oYXJkd2FyZV9zZXR1cCh2b2lkKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTE0NDItXHRhbWRfaW9tbXVfcmVnaXN0ZXJfZ2FfbG9nX25vdGlmaWVyKFx1MDAyNmF2aWNfZ2FfbG9nX25vdGlmaWVyKTtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjE0NDM6XHRrdm1fc2V0X3Bvc3RlZF9pbnRyX3dha2V1cF9oYW5kbGVyKFx1MDAyNmF2aWNfZ2FwcGlfd2FrZXVwX2hhbmRsZXIpO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMTQ0NC1cbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTUyNzI9c3RydWN0IGt2bV94ODZfb3BzIHN2bV94ODZfb3BzIF9faW5pdGRhdGEgPSB7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01Mzc3LVx0LmRlbGl2ZXJfaW50ZXJydXB0ID0gc3ZtX2RlbGl2ZXJfaW50ZXJydXB0LFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo1Mzc4Olx0LnBpX3VwZGF0ZV9pcnRlID0gYXZpY19waV91cGRhdGVfaXJ0ZSxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNTM3OS1cdC5zZXR1cF9tY2UgPSBzdm1fc2V0dXBfbWNlLFxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg9OTIwPXZvaWQgYXZpY19yZWZyZXNoX2FwaWN2X2V4ZWNfY3RybChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDo5MjE6aW50IGF2aWNfcGlfdXBkYXRlX2lydGUoc3RydWN0IGt2bV9rZXJuZWxfaXJxZmQgKmlycWZkLCBzdHJ1Y3Qga3ZtICprdm0sXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTkyMi1cdFx0XHR1bnNpZ25lZCBpbnQgaG9zdF9pcnEsIHVpbnQzMl90IGd1ZXN0X2lycSxcbi0tXG5kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jPTM5NTQ9c3RhdGljIGNvbnN0IHN0cnVjdCBpcnFfZG9tYWluX29wcyBhbWRfaXJfZG9tYWluX29wcyA9IHtcbi0tXG5kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jLTM5NjEtXG5kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jOjM5NjI6c3RhdGljIHZvaWQgX19hbWRfaW9tbXVfdXBkYXRlX2dhKHN0cnVjdCBpcnRlX2dhICplbnRyeSwgaW50IGFwaWNpZCxcbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmMtMzk2My1cdFx0XHRcdCAgYm9vbCB3YWtldXBfaW50ciwgYm9vbCBpc19ydW5uaW5nKVxuLS1cbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmMtNDAwNC0gKi9cbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmM6NDAwNTppbnQgYW1kX2lvbW11X3VwZGF0ZV9nYSh2b2lkICpkYXRhLCBpbnQgYXBpY2lkLCBib29sIHdha2V1cF9pbnRyLCBib29sIGlzX3J1bm5pbmcpXG5kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jLTQwMDYte1xuLS1cbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmMtNDAxOC1cbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmM6NDAxOTpcdF9fYW1kX2lvbW11X3VwZGF0ZV9nYShlbnRyeSwgYXBpY2lkLCB3YWtldXBfaW50ciwgaXNfcnVubmluZyk7XG5kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jLTQwMjAtXG4tLVxuZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuYy00MDIzLX1cbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmM6NDAyNDpFWFBPUlRfU1lNQk9MKGFtZF9pb21tdV91cGRhdGVfZ2EpO1xuZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuYy00MDI1LVxuZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuYzo0MDI2OmludCBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZSh2b2lkICpkYXRhLCBpbnQgYXBpY2lkLCBib29sIHdha2V1cF9pbnRyLCBib29sIGlzX3J1bm5pbmcpXG5kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jLTQwMjcte1xuLS1cbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmMtNDA0OC1cbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmM6NDA0OTpcdF9fYW1kX2lvbW11X3VwZGF0ZV9nYShlbnRyeSwgYXBpY2lkLCB3YWtldXBfaW50ciwgaXNfcnVubmluZyk7XG5kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jLTQwNTAtXG4tLVxuZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuYy00MDUzLX1cbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmM6NDA1NDpFWFBPUlRfU1lNQk9MKGFtZF9pb21tdV9hY3RpdmF0ZV9ndWVzdF9tb2RlKTtcbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmMtNDA1NS1cbi0tXG5kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jPTQwODg9c3RhdGljIGludCBhbWRfaXJfc2V0X3ZjcHVfYWZmaW5pdHkoc3RydWN0IGlycV9kYXRhICpkYXRhLCB2b2lkICppbmZvKVxuLS1cbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmMtNDExOS1cdFx0aWYgKHBpX2RhdGEtXHUwMDNlaXNfZ3Vlc3RfbW9kZSlcbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmM6NDEyMDpcdFx0XHRyZXQgPSBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZShpcl9kYXRhLCBwaV9kYXRhLVx1MDAzZWFwaWNpZCxcbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmMtNDEyMS1cdFx0XHRcdFx0XHRcdCAgICBwaV9kYXRhLVx1MDAzZXdha2V1cF9pbnRyLFxuLS1cbmluY2x1ZGUvbGludXgvYW1kLWlvbW11Lmg9MzE9ZXh0ZXJuIGludCBhbWRfaW9tbXVfcmVnaXN0ZXJfZ2FfbG9nX25vdGlmaWVyKGludCAoKm5vdGlmaWVyKSh1MzIpKTtcbmluY2x1ZGUvbGludXgvYW1kLWlvbW11LmgtMzItXG5pbmNsdWRlL2xpbnV4L2FtZC1pb21tdS5oOjMzOmV4dGVybiBpbnQgYW1kX2lvbW11X3VwZGF0ZV9nYSh2b2lkICpkYXRhLCBpbnQgYXBpY2lkLCBib29sIHdha2V1cF9pbnRyLFxuaW5jbHVkZS9saW51eC9hbWQtaW9tbXUuaC0zNC1cdFx0XHQgICAgICAgYm9vbCBpc19ydW5uaW5nKTtcbmluY2x1ZGUvbGludXgvYW1kLWlvbW11Lmg6MzU6ZXh0ZXJuIGludCBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZSh2b2lkICpkYXRhLCBpbnQgYXBpY2lkLCBib29sIHdha2V1cF9pbnRyLFxuaW5jbHVkZS9saW51eC9hbWQtaW9tbXUuaC0zNi1cdFx0XHRcdFx0IGJvb2wgaXNfcnVubmluZyk7XG4tLVxuaW5jbHVkZS9saW51eC9hbWQtaW9tbXUuaD00Mj1hbWRfaW9tbXVfcmVnaXN0ZXJfZ2FfbG9nX25vdGlmaWVyKGludCAoKm5vdGlmaWVyKSh1MzIpKVxuLS1cbmluY2x1ZGUvbGludXgvYW1kLWlvbW11LmgtNDYtXG5pbmNsdWRlL2xpbnV4L2FtZC1pb21tdS5oOjQ3OnN0YXRpYyBpbmxpbmUgaW50IGFtZF9pb21tdV91cGRhdGVfZ2Eodm9pZCAqZGF0YSwgaW50IGFwaWNpZCwgYm9vbCB3YWtldXBfaW50cixcbmluY2x1ZGUvbGludXgvYW1kLWlvbW11LmgtNDgtXHRcdFx0XHQgICAgICBib29sIGlzX3J1bm5pbmcpXG4tLVxuaW5jbHVkZS9saW51eC9hbWQtaW9tbXUuaC01Mi1cbmluY2x1ZGUvbGludXgvYW1kLWlvbW11Lmg6NTM6c3RhdGljIGlubGluZSBpbnQgYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUodm9pZCAqZGF0YSwgaW50IGFwaWNpZCwgYm9vbCB3YWtldXBfaW50cixcbmluY2x1ZGUvbGludXgvYW1kLWlvbW11LmgtNTQtXHRcdFx0XHRcdFx0Ym9vbCBpc19ydW5uaW5nKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxMzozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjYzMwoJCQkJCQkJb3V0cHV0OiAyMjYKCQkJCQkJCXRob3VnaHRzOiAyMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgR0FQUEkgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgcmV2aWV3ZWQgdGhpcyBwYXRjaCBhbmQgSSYjMzk7bSBzZWVpbmcgaXQmIzM5O3MgZm9jdXNlZCBvbiBpbnRyb2R1Y2luZyBHQVBQSSAoR3Vlc3QgQVBJQyBQb3N0ZWQgSW50ZXJydXB0cykgc3VwcG9ydCBmb3IgQU1EIElPTU1VIGFuZCBLVk0gU1ZNIEFWSUMsIHdoaWNoIGlzIHByZWNpc2VseSB0aGUga2luZCBvZiBsb3ctbGV2ZWwgdmlydHVhbGl6YXRpb24gY2hhbmdlIHRoYXQgZGVtYW5kcyBjbG9zZSBzY3J1dGlueS4gSSBzZWUgdGhlIGZ1bmN0aW9uIG5hbWVzIGFyZSBhbGwgY29ycmVjdGx5IGZvcm1hdHRlZC4gRXhjZWxsZW50LgoKU3BlY2lmaWNhbGx5LCBJ4oCZbGwgbmVlZCB0byBtYWtlIHN1cmUgdG8gaW5jbHVkZSB0aGVzZSBmdW5jdGlvbnMgaW4gbXkgdGVzdGluZyBzdWl0ZTogYGF2aWNfYWRkX3ZjcHVfdG9fZ2FwcGlfd2FrZXVwX2xpc3RgLCBgYXZpY19yZW1vdmVfdmNwdV9mcm9tX2dhcHBpX3dha2V1cF9saXN0YCwgYGF2aWNfZ2FwcGlfd2FrZXVwX2hhbmRsZXJgLCBgYXZpY19waV91cGRhdGVfaXJ0ZWAsIGBhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5YCwgYF9fYW1kX2lvbW11X3VwZGF0ZV9nYWAsIGBhbWRfaW9tbXVfdXBkYXRlX2dhYCwgYW5kIGBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZWAuIFRoZXNlIGFwcGVhciB0byBiZSB0aGUgY29yZSByb3V0aW5lcyBpbnZvbHZlZCBpbiBtYW5hZ2luZyB0aGUgR0FQUEkgd2FrZXVwIGxpc3QgYW5kIHVwZGF0aW5nIHRoZSBJUlRFcywgd2hpY2ggd2lsbCBiZSBjcml0aWNhbCB0byB0aGUgaW50ZWdyaXR5IG9mIHRoaXMgaW1wbGVtZW50YXRpb24uCgpPbiB0aGUgY29uZmlndXJhdGlvbiBmcm9udCwgSSBzZWUgdGhlIHBhdGNoIGxldmVyYWdlcyBgS1ZNX0FNRGAsIGBBTURfSU9NTVVgLCBhbmQgYElSUV9SRU1BUGAsIHdoaWNoIEkgY2FuIG5vdyB2ZXJpZnkgYXJlIGluY2x1ZGVkIGluIG15IGN1cnJlbnQgdGVzdGluZyBlbnZpcm9ubWVudC4KClRoZSByZWFzb25pbmcgcHJvdmlkZWQgY29ycmVjdGx5IGlkZW50aWZpZXMgdGhpcyBhcyBhIHNpZ25pZmljYW50IGNoYW5nZSBhZmZlY3RpbmcgaG93IHBvc3RlZCBpbnRlcnJ1cHRzIGFyZSBoYW5kbGVkIGFuZCBob3cgdGhlIEtWTSBjb3JlIHZpcnR1YWxpemVzIGd1ZXN0IEFQSUNzLiBUaGUgSVJURSBtb2RpZmljYXRpb24gYXNwZWN0IGlzIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZyBhbmQgYSBwb3RlbnRpYWwgc291cmNlIG9mIHN1YnRsZSBidWdzLiBHaXZlbiB0aGUgZnVuZGFtZW50YWwgbmF0dXJlIG9mIHRoZXNlIGNoYW5nZXMsIHRoaXMgaXMgYWJzb2x1dGVseSBhIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gSW4gZmFjdCwgdGhpcyBwYXRjaCBpcyBnb2luZyB0byByZXF1aXJlIHF1aXRlIGEgYml0IG9mIHdvcmssIHNvIGxldCYjMzk7cyBjYWxsIHNldC1yZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxMzozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7LAogICAgJiMzNDtBTURfSU9NTVUmIzM0OywKICAgICYjMzQ7SVJRX1JFTUFQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YXZpY19hZGRfdmNwdV90b19nYXBwaV93YWtldXBfbGlzdCYjMzQ7LAogICAgJiMzNDthdmljX3JlbW92ZV92Y3B1X2Zyb21fZ2FwcGlfd2FrZXVwX2xpc3QmIzM0OywKICAgICYjMzQ7YXZpY19nYXBwaV93YWtldXBfaGFuZGxlciYjMzQ7LAogICAgJiMzNDthdmljX3BpX3VwZGF0ZV9pcnRlJiMzNDssCiAgICAmIzM0O2F2aWNfdXBkYXRlX2lvbW11X3ZjcHVfYWZmaW5pdHkmIzM0OywKICAgICYjMzQ7X19hbWRfaW9tbXVfdXBkYXRlX2dhJiMzNDssCiAgICAmIzM0O2FtZF9pb21tdV91cGRhdGVfZ2EmIzM0OywKICAgICYjMzQ7YW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBHQVBQSSAoR3Vlc3QgQVBJQyBQb3N0ZWQgSW50ZXJydXB0cykgc3VwcG9ydCBmb3IgQU1EIElPTU1VIGFuZCBLVk0gU1ZNIEFWSUMuIEl0IG1vZGlmaWVzIHRoZSBJUlRFIGNvbmZpZ3VyYXRpb24gZm9yIHBvc3RlZCBpbnRlcnJ1cHRzIGFuZCBpbnRyb2R1Y2VzIGEgbmV3IHdha2V1cCBsaXN0IGZvciBHQVBQSSBpbiBLVk0uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIHZpcnR1YWxpemF0aW9uIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk1fQU1EJiMzNDssCiAgICAmIzM0O0FNRF9JT01NVSYjMzQ7LAogICAgJiMzNDtJUlFfUkVNQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthdmljX2FkZF92Y3B1X3RvX2dhcHBpX3dha2V1cF9saXN0JiMzNDssCiAgICAmIzM0O2F2aWNfcmVtb3ZlX3ZjcHVfZnJvbV9nYXBwaV93YWtldXBfbGlzdCYjMzQ7LAogICAgJiMzNDthdmljX2dhcHBpX3dha2V1cF9oYW5kbGVyJiMzNDssCiAgICAmIzM0O2F2aWNfcGlfdXBkYXRlX2lydGUmIzM0OywKICAgICYjMzQ7YXZpY191cGRhdGVfaW9tbXVfdmNwdV9hZmZpbml0eSYjMzQ7LAogICAgJiMzNDtfX2FtZF9pb21tdV91cGRhdGVfZ2EmIzM0OywKICAgICYjMzQ7YW1kX2lvbW11X3VwZGF0ZV9nYSYjMzQ7LAogICAgJiMzNDthbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIEdBUFBJIChHdWVzdCBBUElDIFBvc3RlZCBJbnRlcnJ1cHRzKSBzdXBwb3J0IGZvciBBTUQgSU9NTVUgYW5kIEtWTSBTVk0gQVZJQy4gSXQgbW9kaWZpZXMgdGhlIElSVEUgY29uZmlndXJhdGlvbiBmb3IgcG9zdGVkIGludGVycnVwdHMgYW5kIGludHJvZHVjZXMgYSBuZXcgd2FrZXVwIGxpc3QgZm9yIEdBUFBJIGluIEtWTS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgdmlydHVhbGl6YXRpb24gbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxMzozNjoyMy45NjE1MjczMDRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjM0MDkxMjE5MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNX0FNRFwiLFxuICAgIFwiQU1EX0lPTU1VXCIsXG4gICAgXCJJUlFfUkVNQVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhdmljX2FkZF92Y3B1X3RvX2dhcHBpX3dha2V1cF9saXN0XCIsXG4gICAgXCJhdmljX3JlbW92ZV92Y3B1X2Zyb21fZ2FwcGlfd2FrZXVwX2xpc3RcIixcbiAgICBcImF2aWNfZ2FwcGlfd2FrZXVwX2hhbmRsZXJcIixcbiAgICBcImF2aWNfcGlfdXBkYXRlX2lydGVcIixcbiAgICBcImF2aWNfdXBkYXRlX2lvbW11X3ZjcHVfYWZmaW5pdHlcIixcbiAgICBcIl9fYW1kX2lvbW11X3VwZGF0ZV9nYVwiLFxuICAgIFwiYW1kX2lvbW11X3VwZGF0ZV9nYVwiLFxuICAgIFwiYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIEdBUFBJIChHdWVzdCBBUElDIFBvc3RlZCBJbnRlcnJ1cHRzKSBzdXBwb3J0IGZvciBBTUQgSU9NTVUgYW5kIEtWTSBTVk0gQVZJQy4gSXQgbW9kaWZpZXMgdGhlIElSVEUgY29uZmlndXJhdGlvbiBmb3IgcG9zdGVkIGludGVycnVwdHMgYW5kIGludHJvZHVjZXMgYSBuZXcgd2FrZXVwIGxpc3QgZm9yIEdBUFBJIGluIEtWTS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgdmlydHVhbGl6YXRpb24gbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDEzOjM2OjIzLjk2MTU0NjMwNFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODEwOTMyODUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYzAwYzVhY2RkNDJiNDBkYjIwZjQxYzAxOWY5OTE2ODk1NjM4MGUxZVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1bCAxMyAxMzozNjoyMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0XFxuaW5kZXggOTcwMDdmNGY2OWQ0ZTguLmQyN2YxMGNiYjAwNGNjIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHRcXG5AQCAtNDU1LDcgKzQ1NSw4IEBAIEtlcm5lbCBwYXJhbWV0ZXJzXFxuIFxcdFxcdFxcdFxcdCAgICAgICAgICB0byA0IEtpQi5cXG4gXFx0XFx0XFx0djJfcGdzaXplc19vbmx5IC0gTGltaXQgcGFnZS1zaXplcyB1c2VkIGZvciB2MSBwYWdlLXRhYmxlc1xcbiBcXHRcXHRcXHRcXHQgICAgICAgICAgdG8gNEtpQi8yTWliLzFHaUIuXFxuLVxcbitcXHRcXHRcXHRnYXBwaVxcdFxcdC0gVXNlIEdBUFBJIGluc3RlYWQgb2YgR0FMT0cgZm9yIHZDUFVcXG4rXFx0XFx0XFx0XFx0XFx0ICB3YWtldXAgbm90aWZpY2F0aW9uLlxcbiBcXG4gXFx0YW1kX2lvbW11X2R1bXA9XFx0W0hXLFg4Ni02NF1cXG4gXFx0XFx0XFx0RW5hYmxlIEFNRCBJT01NVSBkcml2ZXIgb3B0aW9uIHRvIGR1bXAgdGhlIEFDUEkgdGFibGVcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaXJxX3JlbWFwcGluZy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaXJxX3JlbWFwcGluZy5oXFxuaW5kZXggMzdiOTRmNDg0ZWYzMzguLmFmMGNkZmEzMmM0NDdmIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lycV9yZW1hcHBpbmcuaFxcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lycV9yZW1hcHBpbmcuaFxcbkBAIC0zNSw4ICszNSw5IEBAIHN0cnVjdCBhbWRfaW9tbXVfcGlfZGF0YSB7XFxuIFxcdHU2NCB2YXBpY19hZGRyO1xcdFxcdC8qIFBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIHZDUFUncyB2QVBJQy4gKi9cXG4gXFx0dTMyIGdhX3RhZztcXG4gXFx0dTMyIHZlY3RvcjtcXHRcXHQvKiBHdWVzdCB2ZWN0b3Igb2YgdGhlIGludGVycnVwdCAqL1xcbi1cXHRpbnQgY3B1O1xcbi1cXHRib29sIGdhX2xvZ19pbnRyO1xcbitcXHRpbnQgYXBpY2lkO1xcbitcXHRib29sIHdha2V1cF9pbnRyO1xcbitcXHRib29sIGlzX3J1bm5pbmc7XFxuIFxcdGJvb2wgaXNfZ3Vlc3RfbW9kZTtcXG4gXFx0dm9pZCAqaXJfZGF0YTtcXG4gfTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaFxcbmluZGV4IGJjZmViNWU3YzBlZGYyLi5hZGQ4YjcyNzRjYzJmOCAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaFxcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oXFxuQEAgLTI1OSwxMSArMjU5LDEyIEBAIHN0cnVjdCBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpIHZtY2JfY29udHJvbF9hcmVhIHtcXG4gI2RlZmluZSBBVklDX0xPR0lDQUxfSURfRU5UUllfVkFMSURfTUFTS1xcdFxcdCgxIFxcdTAwM2NcXHUwMDNjIDMxKVxcbiBcXG4gLypcXG4tICogR0FfTE9HX0lOVFIgaXMgYSBzeW50aGV0aWMgZmxhZyB0aGF0J3MgbmV2ZXIgcHJvcGFnYXRlZCB0byBoYXJkd2FyZS12aXNpYmxlXFxuLSAqIHRhYmxlcy4gIEdBX0xPR19JTlRSIGlzIHNldCBpZiB0aGUgdkNQVSBuZWVkcyBkZXZpY2UgcG9zdGVkIElSUXMgdG8gZ2VuZXJhdGVcXG4tICogR0EgbG9nIGludGVycnVwdHMgdG8gd2FrZSB0aGUgdkNQVSAoYmVjYXVzZSBpdCdzIGJsb2NraW5nIG9yIGFib3V0IHRvIGJsb2NrKS5cXG4rICogV0FLRVVQX0lOVFIgaXMgYSBzeW50aGV0aWMgZmxhZyB0aGF0J3MgbmV2ZXIgcHJvcGFnYXRlZCB0byBoYXJkd2FyZS12aXNpYmxlXFxuKyAqIHRhYmxlcy4gIFdBS0VVUF9JTlRSIGlzIHNldCBpZiB0aGUgdkNQVSBuZWVkcyBkZXZpY2UgcG9zdGVkIElSUXMgdG8gZ2VuZXJhdGVcXG4rICogR0EgbG9nL0dBUFBJIGludGVycnVwdHMgdG8gd2FrZSB0aGUgdkNQVSAoYmVjYXVzZSBpdCdzIGJsb2NraW5nIG9yIGFib3V0IHRvXFxuKyAqIGJsb2NrKS5cXG4gICovXFxuLSNkZWZpbmUgQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9HQV9MT0dfSU5UUlxcdFxcdEJJVF9VTEwoNjEpXFxuKyNkZWZpbmUgQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9XQUtFVVBfSU5UUlxcdFxcdEJJVF9VTEwoNjEpXFxuIFxcbiAjZGVmaW5lIEFWSUNfUEhZU0lDQUxfSURfRU5UUllfSE9TVF9QSFlTSUNBTF9JRF9NQVNLXFx0R0VOTUFTS19VTEwoMTEsIDApXFxuICNkZWZpbmUgQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9CQUNLSU5HX1BBR0VfTUFTS1xcdEdFTk1BU0tfVUxMKDUxLCAxMilcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9hdmljLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuY1xcbmluZGV4IGNkZDVhNmRjNjQ2ZjExLi45ODJhNTk4ODUzMmZmNCAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuY1xcbisrKyBiL2FyY2gveDg2L2t2bS9zdm0vYXZpYy5jXFxuQEAgLTYzLDYgKzYzLDkgQEBcXG4gXFx0Z2FfdGFnO1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gfSlcXG4gXFxuK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgbGlzdF9oZWFkLCBnYXBwaV92Y3B1X3dha2V1cF9saXN0KTtcXG4rc3RhdGljIERFRklORV9QRVJfQ1BVKHJhd19zcGlubG9ja190LCBnYXBwaV92Y3B1X3dha2V1cF9saXN0X2xvY2spO1xcbitcXG4gc3RhdGljX2Fzc2VydChfX0FWSUNfR0FUQUcoQVZJQ19WTV9JRF9NQVNLLCBBVklDX1ZDUFVfSURYX01BU0spID09IC0xdSk7XFxuIFxcbiAjZGVmaW5lIEFWSUNfQVVUT19NT0RFIC0xXFxuQEAgLTg3NCw2ICs4NzcsOSBAQCBpbnQgYXZpY19pbml0X3ZjcHUoc3RydWN0IHZjcHVfc3ZtICpzdm0pXFxuIFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZzdm0tXFx1MDAzZWlyX2xpc3QpO1xcbiBcXHRyYXdfc3Bpbl9sb2NrX2luaXQoXFx1MDAyNnN2bS1cXHUwMDNlaXJfbGlzdF9sb2NrKTtcXG4gXFxuK1xcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZzdm0tXFx1MDAzZWdhcHBpX3ZjcHVfd2FrZXVwX2xpc3QpO1xcbitcXHRzdm0tXFx1MDAzZWdhcHBpX2NwdSA9IC0xO1xcbitcXG4gXFx0aWYgKCFlbmFibGVfYXBpY3YgfHwgIWlycWNoaXBfaW5fa2VybmVsKHZjcHUtXFx1MDAzZWt2bSkpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG5AQCAtODg2LDYgKzg5Miw0MiBAQCBpbnQgYXZpY19pbml0X3ZjcHUoc3RydWN0IHZjcHVfc3ZtICpzdm0pXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIGF2aWNfYWRkX3ZjcHVfdG9fZ2FwcGlfd2FrZXVwX2xpc3Qoc3RydWN0IHZjcHVfc3ZtICpzdm0sIGludCBjcHUpXFxuK3tcXG4rXFx0c3RydWN0IGxpc3RfaGVhZCAqd2FrZXVwX2xpc3Q7XFxuK1xcdHJhd19zcGlubG9ja190ICpzcGlubG9jaztcXG4rXFxuK1xcdGlmIChXQVJOX09OKHVubGlrZWx5KGNwdSBcXHUwMDNjIDApKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0d2FrZXVwX2xpc3QgPSBcXHUwMDI2cGVyX2NwdShnYXBwaV92Y3B1X3dha2V1cF9saXN0LCBjcHUpO1xcbitcXHRzcGlubG9jayA9IFxcdTAwMjZwZXJfY3B1KGdhcHBpX3ZjcHVfd2FrZXVwX2xpc3RfbG9jaywgY3B1KTtcXG4rXFx0Z3VhcmQocmF3X3NwaW5sb2NrX2lycXNhdmUpKHNwaW5sb2NrKTtcXG4rXFx0aWYgKGxpc3RfZW1wdHkoXFx1MDAyNnN2bS1cXHUwMDNlZ2FwcGlfdmNwdV93YWtldXBfbGlzdCkpXFxuK1xcdFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNnN2bS1cXHUwMDNlZ2FwcGlfdmNwdV93YWtldXBfbGlzdCwgd2FrZXVwX2xpc3QpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBhdmljX3JlbW92ZV92Y3B1X2Zyb21fZ2FwcGlfd2FrZXVwX2xpc3Qoc3RydWN0IHZjcHVfc3ZtICpzdm0sIGludCBjcHUpXFxuK3tcXG4rXFx0cmF3X3NwaW5sb2NrX3QgKnNwaW5sb2NrO1xcbitcXG4rXFx0aWYgKFdBUk5fT04odW5saWtlbHkoY3B1IFxcdTAwM2MgMCkpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRzcGlubG9jayA9IFxcdTAwMjZwZXJfY3B1KGdhcHBpX3ZjcHVfd2FrZXVwX2xpc3RfbG9jaywgY3B1KTtcXG4rXFx0Z3VhcmQocmF3X3NwaW5sb2NrX2lycXNhdmUpKHNwaW5sb2NrKTtcXG4rXFx0aWYgKCFsaXN0X2VtcHR5KFxcdTAwMjZzdm0tXFx1MDAzZWdhcHBpX3ZjcHVfd2FrZXVwX2xpc3QpKVxcbitcXHRcXHRsaXN0X2RlbF9pbml0KFxcdTAwMjZzdm0tXFx1MDAzZWdhcHBpX3ZjcHVfd2FrZXVwX2xpc3QpO1xcbit9XFxuK1xcbit2b2lkIGF2aWNfZGVzdHJveV92Y3B1KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKVxcbit7XFxuK1xcdGlmIChzdm0tXFx1MDAzZWdhcHBpX2NwdSAhPSAtMSBcXHUwMDI2XFx1MDAyNiBhbWRfaW9tbXVfZ2FwcGkpIHtcXG4rXFx0XFx0YXZpY19yZW1vdmVfdmNwdV9mcm9tX2dhcHBpX3dha2V1cF9saXN0KHN2bSwgc3ZtLVxcdTAwM2VnYXBwaV9jcHUpO1xcbitcXHRcXHRzdm0tXFx1MDAzZWdhcHBpX2NwdSA9IC0xO1xcbitcXHR9XFxuK31cXG4rXFxuIHZvaWQgYXZpY19hcGljdl9wb3N0X3N0YXRlX3Jlc3RvcmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuIFxcdGF2aWNfaGFuZGxlX2Rmcl91cGRhdGUodmNwdSk7XFxuQEAgLTg5NiwxMyArOTM4LDE4IEBAIHN0YXRpYyB2b2lkIHN2bV9pcl9saXN0X2RlbChzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFmZCAqaXJxZmQpXFxuIHtcXG4gXFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0gaXJxZmQtXFx1MDAzZWlycV9ieXBhc3NfdmNwdTtcXG4gXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4rXFx0c3RydWN0IHZjcHVfc3ZtICpzdm07XFxuIFxcbiBcXHRpZiAoIXZjcHUpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2dG9fc3ZtKHZjcHUpLVxcdTAwM2Vpcl9saXN0X2xvY2ssIGZsYWdzKTtcXG4rXFx0c3ZtID0gdG9fc3ZtKHZjcHUpO1xcbitcXG4rXFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZzdm0tXFx1MDAzZWlyX2xpc3RfbG9jaywgZmxhZ3MpO1xcbiBcXHRsaXN0X2RlbChcXHUwMDI2aXJxZmQtXFx1MDAzZXZjcHVfbGlzdCk7XFxuLVxcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZ0b19zdm0odmNwdSktXFx1MDAzZWlyX2xpc3RfbG9jaywgZmxhZ3MpO1xcbitcXHRpZiAoYW1kX2lvbW11X2dhcHBpIFxcdTAwMjZcXHUwMDI2IGxpc3RfZW1wdHkoXFx1MDAyNnN2bS1cXHUwMDNlaXJfbGlzdCkpXFxuK1xcdFxcdGF2aWNfcmVtb3ZlX3ZjcHVfZnJvbV9nYXBwaV93YWtldXBfbGlzdChzdm0sIHN2bS1cXHUwMDNlZ2FwcGlfY3B1KTtcXG4rXFx0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnN2bS1cXHUwMDNlaXJfbGlzdF9sb2NrLCBmbGFncyk7XFxuIH1cXG4gXFxuIGludCBhdmljX3BpX3VwZGF0ZV9pcnRlKHN0cnVjdCBrdm1fa2VybmVsX2lycWZkICppcnFmZCwgc3RydWN0IGt2bSAqa3ZtLFxcbkBAIC05MjMsOCArOTcwLDYgQEAgaW50IGF2aWNfcGlfdXBkYXRlX2lydGUoc3RydWN0IGt2bV9rZXJuZWxfaXJxZmQgKmlycWZkLCBzdHJ1Y3Qga3ZtICprdm0sXFxuIFxcdFxcdCAqIGlmIEFWSUMgaXMgZW5hYmxlZC91bmluaGliaXRlZCBpbiB0aGUgZnV0dXJlLlxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0c3RydWN0IGFtZF9pb21tdV9waV9kYXRhIHBpX2RhdGEgPSB7XFxuLVxcdFxcdFxcdC5nYV90YWcgPSBBVklDX0dBVEFHKHRvX2t2bV9zdm0oa3ZtKS1cXHUwMDNlYXZpY192bV9pZCxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICB2Y3B1LVxcdTAwM2V2Y3B1X2lkeCksXFxuIFxcdFxcdFxcdC5pc19ndWVzdF9tb2RlID0ga3ZtX3ZjcHVfYXBpY3ZfYWN0aXZlKHZjcHUpLFxcbiBcXHRcXHRcXHQudmFwaWNfYWRkciA9IGF2aWNfZ2V0X2JhY2tpbmdfcGFnZV9hZGRyZXNzKHRvX3N2bSh2Y3B1KSksXFxuIFxcdFxcdFxcdC52ZWN0b3IgPSB2ZWN0b3IsXFxuQEAgLTkzMiw2ICs5NzcsNyBAQCBpbnQgYXZpY19waV91cGRhdGVfaXJ0ZShzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFmZCAqaXJxZmQsIHN0cnVjdCBrdm0gKmt2bSxcXG4gXFx0XFx0c3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7XFxuIFxcdFxcdHU2NCBlbnRyeTtcXG4gXFx0XFx0aW50IHJldDtcXG4rXFx0XFx0Ym9vbCBpc192Y3B1X3dhaXRpbmcgPSBmYWxzZTtcXG4gXFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIFByZXZlbnQgdGhlIHZDUFUgZnJvbSBiZWluZyBzY2hlZHVsZWQgb3V0IG9yIG1pZ3JhdGVkIHVudGlsXFxuQEAgLTk0NywxNyArOTkzLDMzIEBAIGludCBhdmljX3BpX3VwZGF0ZV9pcnRlKHN0cnVjdCBrdm1fa2VybmVsX2lycWZkICppcnFmZCwgc3RydWN0IGt2bSAqa3ZtLFxcbiBcXHRcXHQgKiBzY2hlZHVsZWQgb3V0LCBLVk0gd2lsbCB1cGRhdGUgdGhlIHBDUFUgaW5mbyB3aGVuIHRoZSB2Q1BVXFxuIFxcdFxcdCAqIGlzIGF3YWtlbmVkIGFuZC9vciBzY2hlZHVsZWQgaW4uICBTZWUgYWxzbyBhdmljX3ZjcHVfbG9hZCgpLlxcbiBcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKGFtZF9pb21tdV9nYXBwaSlcXG4rXFx0XFx0XFx0cGlfZGF0YS5nYV90YWcgPSBQT1NURURfSU5UUl9XQUtFVVBfVkVDVE9SO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdHBpX2RhdGEuZ2FfdGFnID0gQVZJQ19HQVRBRyh0b19rdm1fc3ZtKGt2bSktXFx1MDAzZWF2aWNfdm1faWQsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICB2Y3B1LVxcdTAwM2V2Y3B1X2lkeCk7XFxuK1xcbiBcXHRcXHRlbnRyeSA9IHN2bS1cXHUwMDNlYXZpY19waHlzaWNhbF9pZF9lbnRyeTtcXG4gXFx0XFx0aWYgKGVudHJ5IFxcdTAwMjYgQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9JU19SVU5OSU5HX01BU0spIHtcXG4tXFx0XFx0XFx0cGlfZGF0YS5jcHUgPSBlbnRyeSBcXHUwMDI2IEFWSUNfUEhZU0lDQUxfSURfRU5UUllfSE9TVF9QSFlTSUNBTF9JRF9NQVNLO1xcbitcXHRcXHRcXHRwaV9kYXRhLmFwaWNpZCA9IGVudHJ5IFxcdTAwMjYgQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9IT1NUX1BIWVNJQ0FMX0lEX01BU0s7XFxuK1xcdFxcdFxcdHBpX2RhdGEuaXNfcnVubmluZyA9IHRydWU7XFxuIFxcdFxcdH0gZWxzZSB7XFxuLVxcdFxcdFxcdHBpX2RhdGEuY3B1ID0gLTE7XFxuLVxcdFxcdFxcdHBpX2RhdGEuZ2FfbG9nX2ludHIgPSBlbnRyeSBcXHUwMDI2IEFWSUNfUEhZU0lDQUxfSURfRU5UUllfR0FfTE9HX0lOVFI7XFxuK1xcdFxcdFxcdHBpX2RhdGEuYXBpY2lkID0gLTE7XFxuK1xcdFxcdFxcdHBpX2RhdGEud2FrZXVwX2ludHIgPSBlbnRyeSBcXHUwMDI2IEFWSUNfUEhZU0lDQUxfSURfRU5UUllfV0FLRVVQX0lOVFI7XFxuK1xcdFxcdFxcdHBpX2RhdGEuaXNfcnVubmluZyA9IGZhbHNlO1xcbitcXG4rXFx0XFx0XFx0aWYgKGFtZF9pb21tdV9nYXBwaSkge1xcbitcXHRcXHRcXHRcXHRwaV9kYXRhLmFwaWNpZCA9IGt2bV9jcHVfZ2V0X2FwaWNpZChzdm0tXFx1MDAzZWdhcHBpX2NwdSk7XFxuK1xcdFxcdFxcdFxcdGlmIChsaXN0X2VtcHR5KFxcdTAwMjZzdm0tXFx1MDAzZWlyX2xpc3QpKSB7XFxuK1xcdFxcdFxcdFxcdFxcdGF2aWNfYWRkX3ZjcHVfdG9fZ2FwcGlfd2FrZXVwX2xpc3Qoc3ZtLCBzdm0tXFx1MDAzZWdhcHBpX2NwdSk7XFxuK1xcdFxcdFxcdFxcdFxcdGlzX3ZjcHVfd2FpdGluZyA9IHRydWU7XFxuK1xcdFxcdFxcdFxcdH1cXG4rXFx0XFx0XFx0fVxcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHRyZXQgPSBpcnFfc2V0X3ZjcHVfYWZmaW5pdHkoaG9zdF9pcnEsIFxcdTAwMjZwaV9kYXRhKTtcXG4gXFx0XFx0aWYgKHJldClcXG4tXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0XFx0Z290byBnYXBwaV9lcnJfb3V0O1xcbiBcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogUmV2ZXJ0IHRvIGxlZ2FjeSBtb2RlIGlmIHRoZSBJT01NVSBkaWRuJ3QgcHJvdmlkZSBtZXRhZGF0YVxcbkBAIC05NjYsMTIgKzEwMjgsMTcgQEAgaW50IGF2aWNfcGlfdXBkYXRlX2lydGUoc3RydWN0IGt2bV9rZXJuZWxfaXJxZmQgKmlycWZkLCBzdHJ1Y3Qga3ZtICprdm0sXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRpZiAoV0FSTl9PTl9PTkNFKCFwaV9kYXRhLmlyX2RhdGEpKSB7XFxuIFxcdFxcdFxcdGlycV9zZXRfdmNwdV9hZmZpbml0eShob3N0X2lycSwgTlVMTCk7XFxuLVxcdFxcdFxcdHJldHVybiAtRUlPO1xcbitcXHRcXHRcXHRyZXQgPSAtRUlPO1xcbitcXHRcXHRcXHRnb3RvIGdhcHBpX2Vycl9vdXQ7XFxuIFxcdFxcdH1cXG4gXFxuIFxcdFxcdGlycWZkLVxcdTAwM2VpcnFfYnlwYXNzX2RhdGEgPSBwaV9kYXRhLmlyX2RhdGE7XFxuIFxcdFxcdGxpc3RfYWRkKFxcdTAwMjZpcnFmZC1cXHUwMDNldmNwdV9saXN0LCBcXHUwMDI2c3ZtLVxcdTAwM2Vpcl9saXN0KTtcXG4gXFx0XFx0cmV0dXJuIDA7XFxuK2dhcHBpX2Vycl9vdXQ6XFxuK1xcdFxcdGlmIChpc192Y3B1X3dhaXRpbmcpXFxuK1xcdFxcdFxcdGF2aWNfcmVtb3ZlX3ZjcHVfZnJvbV9nYXBwaV93YWtldXBfbGlzdChzdm0sIHN2bS1cXHUwMDNlZ2FwcGlfY3B1KTtcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0fVxcbiBcXHRyZXR1cm4gaXJxX3NldF92Y3B1X2FmZmluaXR5KGhvc3RfaXJxLCBOVUxMKTtcXG4gfVxcbkBAIC05OTEsMjMgKzEwNTgsMjQgQEAgZW51bSBhdmljX3ZjcHVfYWN0aW9uIHtcXG4gXFx0ICogTm8gdW5pcXVlIGFjdGlvbiBpcyByZXF1aXJlZCB0byBkZWFsIHdpdGggYSB2Q1BVIHRoYXQgc3RvcHMvc3RhcnRzXFxuIFxcdCAqIHJ1bm5pbmcuICBBIHZDUFUgdGhhdCBzdGFydHMgcnVubmluZyBieSBkZWZpbml0aW9uIHN0b3BzIGJsb2NraW5nIGFzXFxuIFxcdCAqIHdlbGwsIGFuZCBhIHZDUFUgdGhhdCBzdG9wcyBydW5uaW5nIGNhbid0IGhhdmUgYmVlbiBibG9ja2luZywgaS5lLlxcbi1cXHQgKiBkb2Vzbid0IG5lZWQgdG8gdG9nZ2xlIEdBTG9nSW50ci5cXG4rXFx0ICogZG9lc24ndCBuZWVkIHRvIHRvZ2dsZSBob3N0IHdha2V1cCBub3RpZmljYXRpb24uXFxuIFxcdCAqL1xcbiBcXHRBVklDX1NUQVJUX1JVTk5JTkdcXHQ9IDAsXFxuIFxcdEFWSUNfU1RPUF9SVU5OSU5HXFx0PSAwLFxcbiBcXG4gXFx0LypcXG4tXFx0ICogV2hlbiBhIHZDUFUgc3RhcnRzIGJsb2NraW5nLCBLVk0gbmVlZHMgdG8gc2V0IHRoZSBHQUxvZ0ludHIgZmxhZ1xcbi1cXHQgKiBpbnQgYWxsIGFzc29jaWF0ZWQgSVJURXMgc28gdGhhdCBLVk0gY2FuIHdha2UgdGhlIHZDUFUgaWYgYW4gSVJRIGlzXFxuLVxcdCAqIHNlbnQgdG8gdGhlIHZDUFUuXFxuK1xcdCAqIFdoZW4gYSB2Q1BVIHN0YXJ0cyBibG9ja2luZywgS1ZNIG5lZWRzIHRvIHJlcXVlc3QgaG9zdCB3YWtldXBcXG4rXFx0ICogbm90aWZpY2F0aW9uIGluIGFsbCBhc3NvY2lhdGVkIElSVEVzIHNvIHRoYXQgS1ZNIGNhbiB3YWtlIHRoZSB2Q1BVXFxuK1xcdCAqIGlmIGFuIElSUSBpcyBzZW50IHRvIHRoZSB2Q1BVLlxcbiBcXHQgKi9cXG4gXFx0QVZJQ19TVEFSVF9CTE9DS0lOR1xcdD0gQklUKDEpLFxcbiB9O1xcbiBcXG4tc3RhdGljIHZvaWQgYXZpY191cGRhdGVfaW9tbXVfdmNwdV9hZmZpbml0eShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBlbnVtIGF2aWNfdmNwdV9hY3Rpb24gYWN0aW9uKVxcbitzdGF0aWMgdm9pZCBhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGFwaWNpZCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIGludCBjcHUsIGVudW0gYXZpY192Y3B1X2FjdGlvbiBhY3Rpb24pXFxuIHtcXG4tXFx0Ym9vbCBnYV9sb2dfaW50ciA9IChhY3Rpb24gXFx1MDAyNiBBVklDX1NUQVJUX0JMT0NLSU5HKTtcXG4rXFx0Ym9vbCB3YWtldXBfaW50ciA9IChhY3Rpb24gXFx1MDAyNiBBVklDX1NUQVJUX0JMT0NLSU5HKTtcXG4rXFx0Ym9vbCBpc19ydW5uaW5nID0gYXBpY2lkIFxcdTAwM2U9IDA7XFxuIFxcdHN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpO1xcbiBcXHRzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFmZCAqaXJxZmQ7XFxuIFxcbkBAIC0xMDE1LDE4ICsxMDgzLDM2IEBAIHN0YXRpYyB2b2lkIGF2aWNfdXBkYXRlX2lvbW11X3ZjcHVfYWZmaW5pdHkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1LFxcbiBcXG4gXFx0LypcXG4gXFx0ICogSGVyZSwgd2UgZ28gdGhyb3VnaCB0aGUgcGVyLXZjcHUgaXJfbGlzdCB0byB1cGRhdGUgYWxsIGV4aXN0aW5nXFxuLVxcdCAqIGludGVycnVwdCByZW1hcHBpbmcgdGFibGUgZW50cnkgdGFyZ2V0aW5nIHRoaXMgdmNwdS5cXG4rXFx0ICogaW50ZXJydXB0IHJlbWFwcGluZyB0YWJsZSBlbnRyaWVzIHRhcmdldGluZyB0aGlzIHZjcHUuXFxuIFxcdCAqL1xcbi1cXHRpZiAobGlzdF9lbXB0eShcXHUwMDI2c3ZtLVxcdTAwM2Vpcl9saXN0KSlcXG4rXFx0aWYgKGxpc3RfZW1wdHkoXFx1MDAyNnN2bS1cXHUwMDNlaXJfbGlzdCkpIHtcXG4rXFx0XFx0aWYgKGFtZF9pb21tdV9nYXBwaSBcXHUwMDI2XFx1MDAyNiBjcHUgXFx1MDAzZT0gMClcXG4rXFx0XFx0XFx0c3ZtLVxcdTAwM2VnYXBwaV9jcHUgPSBjcHU7XFxuIFxcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGlzX3J1bm5pbmcgXFx1MDAyNlxcdTAwMjYgYW1kX2lvbW11X2dhcHBpKSB7XFxuK1xcdFxcdGlmIChzdm0tXFx1MDAzZWdhcHBpX2NwdSAhPSAtMSlcXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogSGFuZGxlIGluaXRpYWwgc3RhdGUgd2hlbiB2Q1BVIGlzIGxvYWRlZCBmb3IgdGhlXFxuK1xcdFxcdFxcdCAqIGZpcnN0IHRpbWUgd2l0aG91dCBhbnkgSVJRIGFmZmluaXR5LlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0YXZpY19yZW1vdmVfdmNwdV9mcm9tX2dhcHBpX3dha2V1cF9saXN0KHN2bSwgc3ZtLVxcdTAwM2VnYXBwaV9jcHUpO1xcbitcXG4rXFx0XFx0c3ZtLVxcdTAwM2VnYXBwaV9jcHUgPSBjcHU7IC8qIFN0b3JlIGNwdSBudW1iZXIgYXMgdGFyZ2V0IGZvciBHQVBQSSAqL1xcbitcXHR9IGVsc2UgaWYgKGFtZF9pb21tdV9nYXBwaSkge1xcbitcXHRcXHRhcGljaWQgPSBrdm1fY3B1X2dldF9hcGljaWQoc3ZtLVxcdTAwM2VnYXBwaV9jcHUpO1xcbitcXHRcXHRhdmljX2FkZF92Y3B1X3RvX2dhcHBpX3dha2V1cF9saXN0KHN2bSwgc3ZtLVxcdTAwM2VnYXBwaV9jcHUpO1xcbitcXHR9XFxuIFxcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGlycWZkLCBcXHUwMDI2c3ZtLVxcdTAwM2Vpcl9saXN0LCB2Y3B1X2xpc3QpIHtcXG4gXFx0XFx0dm9pZCAqZGF0YSA9IGlycWZkLVxcdTAwM2VpcnFfYnlwYXNzX2RhdGE7XFxuIFxcbiBcXHRcXHRpZiAoIShhY3Rpb24gXFx1MDAyNiBBVklDX1RPR0dMRV9PTl9PRkYpKVxcbi1cXHRcXHRcXHRXQVJOX09OX09OQ0UoYW1kX2lvbW11X3VwZGF0ZV9nYShkYXRhLCBjcHUsIGdhX2xvZ19pbnRyKSk7XFxuLVxcdFxcdGVsc2UgaWYgKGNwdSBcXHUwMDNlPSAwKVxcbi1cXHRcXHRcXHRXQVJOX09OX09OQ0UoYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUoZGF0YSwgY3B1LCBnYV9sb2dfaW50cikpO1xcbitcXHRcXHRcXHRXQVJOX09OX09OQ0UoYW1kX2lvbW11X3VwZGF0ZV9nYShkYXRhLCBhcGljaWQsIHdha2V1cF9pbnRyLCBpc19ydW5uaW5nKSk7XFxuK1xcdFxcdGVsc2UgaWYgKGlzX3J1bm5pbmcpXFxuK1xcdFxcdFxcdFdBUk5fT05fT05DRShhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZShkYXRhLCBhcGljaWQsIHdha2V1cF9pbnRyLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBpc19ydW5uaW5nKSk7XFxuIFxcdFxcdGVsc2VcXG4gXFx0XFx0XFx0V0FSTl9PTl9PTkNFKGFtZF9pb21tdV9kZWFjdGl2YXRlX2d1ZXN0X21vZGUoZGF0YSkpO1xcbiBcXHR9XFxuQEAgLTEwNjMsNyArMTE0OSw3IEBAIHN0YXRpYyB2b2lkIF9fYXZpY192Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1LFxcbiBcXHRXQVJOX09OX09OQ0UoZW50cnkgXFx1MDAyNiBBVklDX1BIWVNJQ0FMX0lEX0VOVFJZX0lTX1JVTk5JTkdfTUFTSyk7XFxuIFxcbiBcXHRlbnRyeSBcXHUwMDI2PSB+KEFWSUNfUEhZU0lDQUxfSURfRU5UUllfSE9TVF9QSFlTSUNBTF9JRF9NQVNLIHxcXG4tXFx0XFx0ICAgQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9HQV9MT0dfSU5UUik7XFxuK1xcdFxcdCAgIEFWSUNfUEhZU0lDQUxfSURfRU5UUllfV0FLRVVQX0lOVFIpO1xcbiBcXHRlbnRyeSB8PSAoaF9waHlzaWNhbF9pZCBcXHUwMDI2IEFWSUNfUEhZU0lDQUxfSURfRU5UUllfSE9TVF9QSFlTSUNBTF9JRF9NQVNLKTtcXG4gXFx0ZW50cnkgfD0gQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9JU19SVU5OSU5HX01BU0s7XFxuIFxcbkBAIC0xMDgwLDcgKzExNjYsNyBAQCBzdGF0aWMgdm9pZCBfX2F2aWNfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSxcXG4gXFxuIFxcdFdSSVRFX09OQ0Uoa3ZtX3N2bS1cXHUwMDNlYXZpY19waHlzaWNhbF9pZF90YWJsZVt2Y3B1LVxcdTAwM2V2Y3B1X2lkXSwgZW50cnkpO1xcbiBcXG4tXFx0YXZpY191cGRhdGVfaW9tbXVfdmNwdV9hZmZpbml0eSh2Y3B1LCBoX3BoeXNpY2FsX2lkLCBhY3Rpb24pO1xcbitcXHRhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5KHZjcHUsIGhfcGh5c2ljYWxfaWQsIGNwdSwgYWN0aW9uKTtcXG4gXFxuIFxcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZzdm0tXFx1MDAzZWlyX2xpc3RfbG9jaywgZmxhZ3MpO1xcbiB9XFxuQEAgLTExMjMsOSArMTIwOSw5IEBAIHN0YXRpYyB2b2lkIF9fYXZpY192Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGVudW0gYXZpY192Y3B1X2FjdGlvbiBhY3Rpb24pXFxuIFxcdCAqL1xcbiBcXHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnN2bS1cXHUwMDNlaXJfbGlzdF9sb2NrLCBmbGFncyk7XFxuIFxcbi1cXHRhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5KHZjcHUsIC0xLCBhY3Rpb24pO1xcbitcXHRhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5KHZjcHUsIC0xLCAtMSwgYWN0aW9uKTtcXG4gXFxuLVxcdFdBUk5fT05fT05DRShlbnRyeSBcXHUwMDI2IEFWSUNfUEhZU0lDQUxfSURfRU5UUllfR0FfTE9HX0lOVFIpO1xcbitcXHRXQVJOX09OX09OQ0UoZW50cnkgXFx1MDAyNiBBVklDX1BIWVNJQ0FMX0lEX0VOVFJZX1dBS0VVUF9JTlRSKTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIEtlZXAgdGhlIHByZXZpb3VzIEFQSUMgSUQgaW4gdGhlIGVudHJ5IHNvIHRoYXQgYSByb2d1ZSBkb29yYmVsbCBmcm9tXFxuQEAgLTExMzcsMTEgKzEyMjMsMTEgQEAgc3RhdGljIHZvaWQgX19hdmljX3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZW51bSBhdmljX3ZjcHVfYWN0aW9uIGFjdGlvbilcXG4gXFx0XFx0V1JJVEVfT05DRShrdm1fc3ZtLVxcdTAwM2VhdmljX3BoeXNpY2FsX2lkX3RhYmxlW3ZjcHUtXFx1MDAzZXZjcHVfaWRdLCBlbnRyeSk7XFxuIFxcbiBcXHQvKlxcbi1cXHQgKiBOb3RlISAgRG9uJ3Qgc2V0IEFWSUNfUEhZU0lDQUxfSURfRU5UUllfR0FfTE9HX0lOVFIgaW4gdGhlIHRhYmxlIGFzXFxuK1xcdCAqIE5vdGUhICBEb24ndCBzZXQgQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9XQUtFVVBfSU5UUiBpbiB0aGUgdGFibGUgYXNcXG4gXFx0ICogaXQncyBhIHN5bnRoZXRpYyBmbGFnIHRoYXQgdXN1cnBzIGFuIHVudXNlZCBzaG91bGQtYmUtemVybyBiaXQuXFxuIFxcdCAqL1xcbiBcXHRpZiAoYWN0aW9uIFxcdTAwMjYgQVZJQ19TVEFSVF9CTE9DS0lORylcXG4tXFx0XFx0ZW50cnkgfD0gQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9HQV9MT0dfSU5UUjtcXG4rXFx0XFx0ZW50cnkgfD0gQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9XQUtFVVBfSU5UUjtcXG4gXFxuIFxcdHN2bS1cXHUwMDNlYXZpY19waHlzaWNhbF9pZF9lbnRyeSA9IGVudHJ5O1xcbiBcXG5AQCAtMTE3MSw5ICsxMjU3LDkgQEAgdm9pZCBhdmljX3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIFRoZSB2Q1BVIHdhcyBwcmVlbXB0ZWQgd2hpbGUgYmxvY2tpbmcsIGVuc3VyZSBpdHMgSVJURXMgYXJlXFxuLVxcdFxcdCAqIGNvbmZpZ3VyZWQgdG8gZ2VuZXJhdGUgR0EgTG9nIEludGVycnVwdHMuXFxuK1xcdFxcdCAqIGNvbmZpZ3VyZWQgdG8gcmVxdWVzdCBob3N0IHdha2V1cCBub3RpZmljYXRpb24uXFxuIFxcdFxcdCAqL1xcbi1cXHRcXHRpZiAoIShXQVJOX09OX09OQ0UoIShlbnRyeSBcXHUwMDI2IEFWSUNfUEhZU0lDQUxfSURfRU5UUllfR0FfTE9HX0lOVFIpKSkpXFxuK1xcdFxcdGlmICghKFdBUk5fT05fT05DRSghKGVudHJ5IFxcdTAwMjYgQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9XQUtFVVBfSU5UUikpKSlcXG4gXFx0XFx0XFx0cmV0dXJuO1xcbiBcXHR9XFxuIFxcbkBAIC0xMjk2LDYgKzEzODIsMjEgQEAgc3RhdGljIGJvb2wgX19pbml0IGF2aWNfd2FudF9hdmljX2VuYWJsZWQodm9pZClcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIGF2aWNfZ2FwcGlfd2FrZXVwX2hhbmRsZXIodm9pZClcXG4re1xcbitcXHRpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpO1xcbitcXHRzdHJ1Y3QgbGlzdF9oZWFkICp2Y3B1X3dha2V1cF9saXN0ID0gXFx1MDAyNnBlcl9jcHUoZ2FwcGlfdmNwdV93YWtldXBfbGlzdCwgY3B1KTtcXG4rXFx0cmF3X3NwaW5sb2NrX3QgKnNwaW5sb2NrID0gXFx1MDAyNnBlcl9jcHUoZ2FwcGlfdmNwdV93YWtldXBfbGlzdF9sb2NrLCBjcHUpO1xcbitcXHRzdHJ1Y3QgdmNwdV9zdm0gKnN2bTtcXG4rXFxuK1xcdHJhd19zcGluX2xvY2soc3BpbmxvY2spO1xcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHN2bSwgdmNwdV93YWtldXBfbGlzdCwgZ2FwcGlfdmNwdV93YWtldXBfbGlzdCkge1xcbitcXHRcXHRpZiAoa3ZtX2xhcGljX2ZpbmRfaGlnaGVzdF9pcnIoXFx1MDAyNnN2bS1cXHUwMDNldmNwdSkgXFx1MDAzZT0gMClcXG4rXFx0XFx0XFx0a3ZtX3ZjcHVfd2FrZV91cChcXHUwMDI2c3ZtLVxcdTAwM2V2Y3B1KTtcXG4rXFx0fVxcbitcXHRyYXdfc3Bpbl91bmxvY2soc3BpbmxvY2spO1xcbit9XFxuK1xcbiAvKlxcbiAgKiBOb3RlOlxcbiAgKiAtIFRoZSBtb2R1bGUgcGFyYW0gYXZpYyBlbmFibGUgYm90aCB4QVBJQyBhbmQgeDJBUElDIG1vZGUuXFxuQEAgLTEzMDQsMTIgKzE0MDUsMTggQEAgc3RhdGljIGJvb2wgX19pbml0IGF2aWNfd2FudF9hdmljX2VuYWJsZWQodm9pZClcXG4gICovXFxuIGJvb2wgX19pbml0IGF2aWNfaGFyZHdhcmVfc2V0dXAodm9pZClcXG4ge1xcbitcXHRpbnQgY3B1O1xcbiBcXHRhdmljID0gYXZpY193YW50X2F2aWNfZW5hYmxlZCgpO1xcbiBcXHRpZiAoIWF2aWMpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuIFxcdHByX2luZm8oXFxcIkFWSUMgZW5hYmxlZFxcXFxuXFxcIik7XFxuIFxcbitcXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XFxuK1xcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZwZXJfY3B1KGdhcHBpX3ZjcHVfd2FrZXVwX2xpc3QsIGNwdSkpO1xcbitcXHRcXHRyYXdfc3Bpbl9sb2NrX2luaXQoXFx1MDAyNnBlcl9jcHUoZ2FwcGlfdmNwdV93YWtldXBfbGlzdF9sb2NrLCBjcHUpKTtcXG4rXFx0fVxcbitcXG4gXFx0LyogQVZJQyBpcyBhIHByZXJlcXVpc2l0ZSBmb3IgeDJBVklDLiAqL1xcbiBcXHR4MmF2aWNfZW5hYmxlZCA9IGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9YMkFWSUMpO1xcbiBcXHRpZiAoeDJhdmljX2VuYWJsZWQpIHtcXG5AQCAtMTMzMywxMiArMTQ0MCwxNiBAQCBib29sIF9faW5pdCBhdmljX2hhcmR3YXJlX3NldHVwKHZvaWQpXFxuIFxcdFxcdGVuYWJsZV9pcGl2ID0gZmFsc2U7XFxuIFxcbiBcXHRhbWRfaW9tbXVfcmVnaXN0ZXJfZ2FfbG9nX25vdGlmaWVyKFxcdTAwMjZhdmljX2dhX2xvZ19ub3RpZmllcik7XFxuK1xcdGt2bV9zZXRfcG9zdGVkX2ludHJfd2FrZXVwX2hhbmRsZXIoXFx1MDAyNmF2aWNfZ2FwcGlfd2FrZXVwX2hhbmRsZXIpO1xcbiBcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuIHZvaWQgYXZpY19oYXJkd2FyZV91bnNldHVwKHZvaWQpXFxuIHtcXG4tXFx0aWYgKGF2aWMpXFxuLVxcdFxcdGFtZF9pb21tdV9yZWdpc3Rlcl9nYV9sb2dfbm90aWZpZXIoTlVMTCk7XFxuK1xcdGlmICghYXZpYylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0YW1kX2lvbW11X3JlZ2lzdGVyX2dhX2xvZ19ub3RpZmllcihOVUxMKTtcXG4rXFx0a3ZtX3NldF9wb3N0ZWRfaW50cl93YWtldXBfaGFuZGxlcihOVUxMKTtcXG4gfVxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xcbmluZGV4IGUwMmEzOGRhNTI5NmUzLi5iNjg3MTMzZjg1MjhiYSAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXFxuKysrIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xcbkBAIC0xMzU2LDYgKzEzNTYsOCBAQCBzdGF0aWMgdm9pZCBzdm1fdmNwdV9mcmVlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFxuIFxcdFdBUk5fT05fT05DRSghbGlzdF9lbXB0eShcXHUwMDI2c3ZtLVxcdTAwM2Vpcl9saXN0KSk7XFxuIFxcbitcXHRhdmljX2Rlc3Ryb3lfdmNwdShzdm0pO1xcbitcXG4gXFx0c3ZtX2xlYXZlX25lc3RlZCh2Y3B1KTtcXG4gXFx0c3ZtX2ZyZWVfbmVzdGVkKHN2bSk7XFxuIFxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uaFxcbmluZGV4IDUxMzc0MTZiZTU5M2Q3Li40N2Q1YmI1ZDcxMDNkYSAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oXFxuKysrIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uaFxcbkBAIC0zNjIsNiArMzYyLDEwIEBAIHN0cnVjdCB2Y3B1X3N2bSB7XFxuIFxcbiBcXHQvKiBHdWVzdCBHSUYgdmFsdWUsIHVzZWQgd2hlbiB2R0lGIGlzIG5vdCBlbmFibGVkICovXFxuIFxcdGJvb2wgZ3Vlc3RfZ2lmO1xcbitcXG4rXFx0LyogR0FQUEkgcmVsYXRlZCBmaWVsZHMgKi9cXG4rXFx0c3RydWN0IGxpc3RfaGVhZCBnYXBwaV92Y3B1X3dha2V1cF9saXN0O1xcbitcXHRpbnQgZ2FwcGlfY3B1O1xcbiB9O1xcbiBcXG4gc3RydWN0IHN2bV9jcHVfZGF0YSB7XFxuQEAgLTkwOSw2ICs5MTMsNyBAQCB2b2lkIGF2aWNfaW5pdF92bWNiKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBzdHJ1Y3Qgdm1jYiAqdm1jYik7XFxuIGludCBhdmljX2luY29tcGxldGVfaXBpX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbiBpbnQgYXZpY191bmFjY2VsZXJhdGVkX2FjY2Vzc19pbnRlcmNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4gaW50IGF2aWNfaW5pdF92Y3B1KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKTtcXG4rdm9pZCBhdmljX2Rlc3Ryb3lfdmNwdShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSk7XFxuIHZvaWQgYXZpY192Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KTtcXG4gdm9pZCBhdmljX3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIHZvaWQgYXZpY19hcGljdl9wb3N0X3N0YXRlX3Jlc3RvcmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pb21tdS9hbWQvYW1kX2lvbW11LmggYi9kcml2ZXJzL2lvbW11L2FtZC9hbWRfaW9tbXUuaFxcbmluZGV4IDgzNGQ4ZmFiZmJhMzg3Li4wNDQxNzljYWIxMmU0YiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2lvbW11L2FtZC9hbWRfaW9tbXUuaFxcbisrKyBiL2RyaXZlcnMvaW9tbXUvYW1kL2FtZF9pb21tdS5oXFxuQEAgLTQxLDYgKzQxLDcgQEAgaW50IGFtZF9pb21tdV9lbmFibGUodm9pZCk7XFxuIHZvaWQgYW1kX2lvbW11X2Rpc2FibGUodm9pZCk7XFxuIGludCBhbWRfaW9tbXVfcmVlbmFibGUoaW50IG1vZGUpO1xcbiBpbnQgYW1kX2lvbW11X2VuYWJsZV9mYXVsdGluZyh1bnNpZ25lZCBpbnQgY3B1KTtcXG4rZXh0ZXJuIGJvb2wgYW1kX2lvbW11X2dhcHBpO1xcbiBleHRlcm4gaW50IGFtZF9pb21tdV9ndWVzdF9pcjtcXG4gZXh0ZXJuIGVudW0gcHJvdGVjdGlvbl9kb21haW5fbW9kZSBhbWRfaW9tbXVfcGd0YWJsZTtcXG4gZXh0ZXJuIGludCBhbWRfaW9tbXVfZ3B0X2xldmVsO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2lvbW11L2FtZC9hbWRfaW9tbXVfdHlwZXMuaCBiL2RyaXZlcnMvaW9tbXUvYW1kL2FtZF9pb21tdV90eXBlcy5oXFxuaW5kZXggZjlmNzE4MDg3ODkzMDMuLmRlMGIyMzMwNjk0NGI4IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvaW9tbXUvYW1kL2FtZF9pb21tdV90eXBlcy5oXFxuKysrIGIvZHJpdmVycy9pb21tdS9hbWQvYW1kX2lvbW11X3R5cGVzLmhcXG5AQCAtOTQsNiArOTQsNyBAQFxcbiAjZGVmaW5lIEZFQVRVUkVfWDJBUElDXFx0XFx0QklUX1VMTCgyKVxcbiAjZGVmaW5lIEZFQVRVUkVfTlhcXHRcXHRCSVRfVUxMKDMpXFxuICNkZWZpbmUgRkVBVFVSRV9HVFxcdFxcdEJJVF9VTEwoNClcXG4rI2RlZmluZSBGRUFUVVJFX0dBUFBJXFx0XFx0QklUX1VMTCg1KVxcbiAjZGVmaW5lIEZFQVRVUkVfSUFcXHRcXHRCSVRfVUxMKDYpXFxuICNkZWZpbmUgRkVBVFVSRV9HQVxcdFxcdEJJVF9VTEwoNylcXG4gI2RlZmluZSBGRUFUVVJFX0hFXFx0XFx0QklUX1VMTCg4KVxcbkBAIC0xMTMsNiArMTE0LDcgQEBcXG4gLyogRXh0ZW5kZWQgRmVhdHVyZSAyIEJpdHMgKi9cXG4gI2RlZmluZSBGRUFUVVJFX1NFVlNOUElPX1NVUFxcdEJJVF9VTEwoMSlcXG4gI2RlZmluZSBGRUFUVVJFX0dDUjNUUlBNT0RFXFx0QklUX1VMTCgzKVxcbisjZGVmaW5lIEZFQVRVUkVfR0FQUElESVNTVVBcXHRCSVRfVUxMKDQpXFxuICNkZWZpbmUgRkVBVFVSRV9TTlBBVklDU1VQXFx0R0VOTUFTS19VTEwoNywgNSlcXG4gI2RlZmluZSBGRUFUVVJFX1NOUEFWSUNTVVBfR0FNKHgpIFxcXFxcXG4gXFx0KEZJRUxEX0dFVChGRUFUVVJFX1NOUEFWSUNTVVAsIHgpID09IDB4MSlcXG5AQCAtMTkwLDYgKzE5Miw3IEBAXFxuICNkZWZpbmUgQ09OVFJPTF9FUEhfRU5cXHRcXHQ0NVxcbiAjZGVmaW5lIENPTlRST0xfWFRfRU5cXHRcXHQ1MFxcbiAjZGVmaW5lIENPTlRST0xfSU5UQ0FQWFRfRU5cXHQ1MVxcbisjZGVmaW5lIENPTlRST0xfR0FQUElfRU5cXHQ1NVxcbiAjZGVmaW5lIENPTlRST0xfR0NSM1RSUE1PREVcXHQ1OFxcbiAjZGVmaW5lIENPTlRST0xfSVJUQ0FDSEVESVNcXHQ1OVxcbiAjZGVmaW5lIENPTlRST0xfU05QQVZJQ19FTlxcdDYxXFxuQEAgLTEwMDQsNyArMTAwNyw4IEBAIHVuaW9uIGlydGVfZ2FfbG8ge1xcbiBcXHRcXHQgICAgbm9fZmF1bHRcXHQ6IDEsXFxuIFxcdFxcdCAgICAvKiAtLS0tLS0gKi9cXG4gXFx0XFx0ICAgIGdhX2xvZ19pbnRyXFx0OiAxLFxcbi1cXHRcXHQgICAgcnN2ZDFcXHQ6IDMsXFxuK1xcdFxcdCAgICByc3ZkMVxcdDogMixcXG4rXFx0XFx0ICAgIGdhcHBpX2Rpc1xcdDogMSxcXG4gXFx0XFx0ICAgIGlzX3J1blxcdDogMSxcXG4gXFx0XFx0ICAgIC8qIC0tLS0tLSAqL1xcbiBcXHRcXHQgICAgZ3Vlc3RfbW9kZVxcdDogMSxcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jIGIvZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jXFxuaW5kZXggM2JkYjM4MGQyM2U5YTkuLjdkMmIxYzI0ZjZlY2NiIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvaW9tbXUvYW1kL2luaXQuY1xcbisrKyBiL2RyaXZlcnMvaW9tbXUvYW1kL2luaXQuY1xcbkBAIC0xNjAsNiArMTYwLDkgQEAgdTggYW1kX2lvbW11X2hwdF9sZXZlbDtcXG4gLyogR3Vlc3QgcGFnZSB0YWJsZSBsZXZlbCAqL1xcbiBpbnQgYW1kX2lvbW11X2dwdF9sZXZlbCA9IFBBR0VfTU9ERV80X0xFVkVMO1xcbiBcXG4rYm9vbCBhbWRfaW9tbXVfZ2FwcGk7XFxuK0VYUE9SVF9TWU1CT0woYW1kX2lvbW11X2dhcHBpKTtcXG4rXFxuIGludCBhbWRfaW9tbXVfZ3Vlc3RfaXIgPSBBTURfSU9NTVVfR1VFU1RfSVJfVkFQSUM7XFxuIHN0YXRpYyBpbnQgYW1kX2lvbW11X3h0X21vZGUgPSBJUlFfUkVNQVBfWEFQSUNfTU9ERTtcXG4gXFxuQEAgLTQ2Miw2ICs0NjUsOSBAQCBzdGF0aWMgdm9pZCBpb21tdV9kaXNhYmxlKHN0cnVjdCBhbWRfaW9tbXUgKmlvbW11KVxcbiBcXHRpb21tdV9mZWF0dXJlX2Rpc2FibGUoaW9tbXUsIENPTlRST0xfR0FMT0dfRU4pO1xcbiBcXHRpb21tdV9mZWF0dXJlX2Rpc2FibGUoaW9tbXUsIENPTlRST0xfR0FJTlRfRU4pO1xcbiBcXG4rXFx0LyogRGlzYWJsZSBJT01NVSBHQVBQSSAqL1xcbitcXHRpb21tdV9mZWF0dXJlX2Rpc2FibGUoaW9tbXUsIENPTlRST0xfR0FQUElfRU4pO1xcbitcXG4gXFx0LyogRGlzYWJsZSBJT01NVSBQUFIgbG9nZ2luZyAqL1xcbiBcXHRpb21tdV9mZWF0dXJlX2Rpc2FibGUoaW9tbXUsIENPTlRST0xfUFBSTE9HX0VOKTtcXG4gXFx0aW9tbXVfZmVhdHVyZV9kaXNhYmxlKGlvbW11LCBDT05UUk9MX1BQUklOVF9FTik7XFxuQEAgLTI5OTYsNiArMzAwMiwxMyBAQCBzdGF0aWMgdm9pZCBlbmFibGVfaW9tbXVzX3ZhcGljKHZvaWQpXFxuIFxcdHN0cnVjdCBhbWRfaW9tbXUgKmlvbW11O1xcbiBcXG4gXFx0Zm9yX2VhY2hfaW9tbXUoaW9tbXUpIHtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogRGlzYWJsZSBHQVBQSSwgZG8gbm90IGNoZWNrIGFtZF9pb21tdV9nYXBwaSBhcyBpdCBtYXkgYmVcXG4rXFx0XFx0ICogZmFsc2UgaW4gbmV3IGtleGVjIGtlcm5lbCBldmVuIHRob3VnaCBwcmV2aW91cyBrZXJuZWwgaGFzXFxuK1xcdFxcdCAqIGVuYWJsZWQgaXQuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpb21tdV9mZWF0dXJlX2Rpc2FibGUoaW9tbXUsIENPTlRST0xfR0FQUElfRU4pO1xcbitcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogRGlzYWJsZSBHQUxvZyBpZiBhbHJlYWR5IHJ1bm5pbmcuIEl0IGNvdWxkIGhhdmUgYmVlbiBlbmFibGVkXFxuIFxcdFxcdCAqIGluIHRoZSBwcmV2aW91cyBib290IGJlZm9yZSBrZHVtcC5cXG5AQCAtMzAzNSwxMCArMzA0OCwxOSBAQCBzdGF0aWMgdm9pZCBlbmFibGVfaW9tbXVzX3ZhcGljKHZvaWQpXFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG4rXFx0aWYgKGFtZF9pb21tdV9nYXBwaSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgIShjaGVja19mZWF0dXJlKEZFQVRVUkVfR0FQUEkpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAgIEFNRF9JT01NVV9HVUVTVF9JUl9WQVBJQyhhbWRfaW9tbXVfZ3Vlc3RfaXIpKSkge1xcbitcXHRcXHRwcl93YXJuKFxcXCJHQVBQSSBpcyBub3Qgc3VwcG9ydGVkLlxcXFxuXFxcIik7XFxuK1xcdFxcdGFtZF9pb21tdV9nYXBwaSA9IGZhbHNlO1xcbitcXHR9XFxuK1xcbiBcXHQvKiBFbmFibGluZyBHQU0gYW5kIFNOUEFWSUMgc3VwcG9ydCAqL1xcbiBcXHRmb3JfZWFjaF9pb21tdShpb21tdSkge1xcbi1cXHRcXHRpZiAoaW9tbXVfaW5pdF9nYV9sb2coaW9tbXUpIHx8XFxuLVxcdFxcdCAgICBpb21tdV9nYV9sb2dfZW5hYmxlKGlvbW11KSlcXG4rXFx0XFx0aWYgKGFtZF9pb21tdV9nYXBwaSlcXG4rXFx0XFx0XFx0aW9tbXVfZmVhdHVyZV9lbmFibGUoaW9tbXUsIENPTlRST0xfR0FQUElfRU4pO1xcbitcXHRcXHRlbHNlIGlmIChpb21tdV9pbml0X2dhX2xvZyhpb21tdSkgfHxcXG4rXFx0XFx0XFx0IGlvbW11X2dhX2xvZ19lbmFibGUoaW9tbXUpKVxcbiBcXHRcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRcXHRpb21tdV9mZWF0dXJlX2VuYWJsZShpb21tdSwgQ09OVFJPTF9HQU1fRU4pO1xcbkBAIC0zMDQ3LDcgKzMwNjksOCBAQCBzdGF0aWMgdm9pZCBlbmFibGVfaW9tbXVzX3ZhcGljKHZvaWQpXFxuIFxcdH1cXG4gXFxuIFxcdGFtZF9pb21tdV9pcnFfb3BzLmNhcGFiaWxpdHkgfD0gKDEgXFx1MDAzY1xcdTAwM2MgSVJRX1BPU1RJTkdfQ0FQKTtcXG4tXFx0cHJfaW5mbyhcXFwiVmlydHVhbCBBUElDIGVuYWJsZWRcXFxcblxcXCIpO1xcbitcXHRwcl9pbmZvKFxcXCJWaXJ0dWFsIEFQSUMgZW5hYmxlZCB3aXRoICVzXFxcXG5cXFwiLFxcbitcXHRcXHRhbWRfaW9tbXVfZ2FwcGkgPyBcXFwiR0FQUElcXFwiIDogXFxcIkdBTE9HXFxcIik7XFxuICNlbmRpZlxcbiB9XFxuIFxcbkBAIC0zNzM4LDYgKzM3NjEsOCBAQCBzdGF0aWMgaW50IF9faW5pdCBwYXJzZV9hbWRfaW9tbXVfb3B0aW9ucyhjaGFyICpzdHIpXFxuIFxcdFxcdH0gZWxzZSBpZiAoc3RybmNtcChzdHIsIFxcXCJ2Ml9wZ3NpemVzX29ubHlcXFwiLCAxNSkgPT0gMCkge1xcbiBcXHRcXHRcXHRwcl9pbmZvKFxcXCJSZXN0cmljdGluZyBWMSBwYWdlLXNpemVzIHRvIDRLaUIvMk1pQi8xR2lCXFxcIik7XFxuIFxcdFxcdFxcdGFtZF9pb21tdV9wZ3NpemVfYml0bWFwID0gQU1EX0lPTU1VX1BHU0laRVNfVjI7XFxuK1xcdFxcdH0gZWxzZSBpZiAoc3RybmNtcChzdHIsIFxcXCJnYXBwaVxcXCIsIDUpID09IDApIHtcXG4rXFx0XFx0XFx0YW1kX2lvbW11X2dhcHBpID0gdHJ1ZTtcXG4gXFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0cHJfbm90aWNlKFxcXCJVbmtub3duIG9wdGlvbiAtICclcydcXFxcblxcXCIsIHN0cik7XFxuIFxcdFxcdH1cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuYyBiL2RyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmNcXG5pbmRleCA1N2RjOGZhYmM3ZDliOS4uN2VlYmY0NzQ1YTY3ODIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuY1xcbisrKyBiL2RyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmNcXG5AQCAtMzk1OSwxOSArMzk1OSwyOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGlycV9kb21haW5fb3BzIGFtZF9pcl9kb21haW5fb3BzID0ge1xcbiBcXHQuZGVhY3RpdmF0ZSA9IGlycV9yZW1hcHBpbmdfZGVhY3RpdmF0ZSxcXG4gfTtcXG4gXFxuLXN0YXRpYyB2b2lkIF9fYW1kX2lvbW11X3VwZGF0ZV9nYShzdHJ1Y3QgaXJ0ZV9nYSAqZW50cnksIGludCBjcHUsXFxuLVxcdFxcdFxcdFxcdCAgYm9vbCBnYV9sb2dfaW50cilcXG4rc3RhdGljIHZvaWQgX19hbWRfaW9tbXVfdXBkYXRlX2dhKHN0cnVjdCBpcnRlX2dhICplbnRyeSwgaW50IGFwaWNpZCxcXG4rXFx0XFx0XFx0XFx0ICBib29sIHdha2V1cF9pbnRyLCBib29sIGlzX3J1bm5pbmcpXFxuIHtcXG4tXFx0aWYgKGNwdSBcXHUwMDNlPSAwKSB7XFxuK1xcdGlmIChpc19ydW5uaW5nKSB7XFxuIFxcdFxcdGVudHJ5LVxcdTAwM2Vsby5maWVsZHNfdmFwaWMuZGVzdGluYXRpb24gPVxcbi1cXHRcXHRcXHRcXHRcXHRBUElDSURfVE9fSVJURV9ERVNUX0xPKGNwdSk7XFxuK1xcdFxcdFxcdFxcdFxcdEFQSUNJRF9UT19JUlRFX0RFU1RfTE8oYXBpY2lkKTtcXG4gXFx0XFx0ZW50cnktXFx1MDAzZWhpLmZpZWxkcy5kZXN0aW5hdGlvbiA9XFxuLVxcdFxcdFxcdFxcdFxcdEFQSUNJRF9UT19JUlRFX0RFU1RfSEkoY3B1KTtcXG4rXFx0XFx0XFx0XFx0XFx0QVBJQ0lEX1RPX0lSVEVfREVTVF9ISShhcGljaWQpO1xcbiBcXHRcXHRlbnRyeS1cXHUwMDNlbG8uZmllbGRzX3ZhcGljLmlzX3J1biA9IHRydWU7XFxuIFxcdFxcdGVudHJ5LVxcdTAwM2Vsby5maWVsZHNfdmFwaWMuZ2FfbG9nX2ludHIgPSBmYWxzZTtcXG4gXFx0fSBlbHNlIHtcXG4tXFx0XFx0ZW50cnktXFx1MDAzZWxvLmZpZWxkc192YXBpYy5pc19ydW4gPSBmYWxzZTtcXG4tXFx0XFx0ZW50cnktXFx1MDAzZWxvLmZpZWxkc192YXBpYy5nYV9sb2dfaW50ciA9IGdhX2xvZ19pbnRyO1xcbitcXHRcXHRpZiAoYW1kX2lvbW11X2dhcHBpKSB7XFxuK1xcdFxcdFxcdGVudHJ5LVxcdTAwM2Vsby5maWVsZHNfdmFwaWMuZ2FwcGlfZGlzID0gIXdha2V1cF9pbnRyIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdFxcdFxcdFxcdGNoZWNrX2ZlYXR1cmUyKEZFQVRVUkVfR0FQUElESVNTVVApO1xcbitcXHRcXHRcXHRlbnRyeS1cXHUwMDNlbG8uZmllbGRzX3ZhcGljLmlzX3J1biA9IGZhbHNlO1xcbitcXHRcXHRcXHRlbnRyeS1cXHUwMDNlbG8uZmllbGRzX3ZhcGljLmRlc3RpbmF0aW9uID1cXG4rXFx0XFx0XFx0XFx0XFx0XFx0QVBJQ0lEX1RPX0lSVEVfREVTVF9MTyhhcGljaWQpO1xcbitcXHRcXHRcXHRlbnRyeS1cXHUwMDNlaGkuZmllbGRzLmRlc3RpbmF0aW9uID1cXG4rXFx0XFx0XFx0XFx0XFx0XFx0QVBJQ0lEX1RPX0lSVEVfREVTVF9ISShhcGljaWQpO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRlbnRyeS1cXHUwMDNlbG8uZmllbGRzX3ZhcGljLmlzX3J1biA9IGZhbHNlO1xcbitcXHRcXHRcXHRlbnRyeS1cXHUwMDNlbG8uZmllbGRzX3ZhcGljLmdhX2xvZ19pbnRyID0gd2FrZXVwX2ludHI7XFxuK1xcdFxcdH1cXG4gXFx0fVxcbiB9XFxuIFxcbkBAIC0zOTc5LDIwICszOTg5LDIwIEBAIHN0YXRpYyB2b2lkIF9fYW1kX2lvbW11X3VwZGF0ZV9nYShzdHJ1Y3QgaXJ0ZV9nYSAqZW50cnksIGludCBjcHUsXFxuICAqIFVwZGF0ZSB0aGUgcENQVSBpbmZvcm1hdGlvbiBmb3IgYW4gSVJURSB0aGF0IGlzIGNvbmZpZ3VyZWQgdG8gcG9zdCBJUlFzIHRvXFxuICAqIGEgdkNQVSwgd2l0aG91dCBpc3N1aW5nIGFuIElPTU1VIGludmFsaWRhdGlvbiBmb3IgdGhlIElSVEUuXFxuICAqXFxuLSAqIElmIHRoZSB2Q1BVIGlzIGFzc29jaWF0ZWQgd2l0aCBhIHBDUFUgKEBjcHUgXFx1MDAzZT0gMCksIGNvbmZpZ3VyZSB0aGUgRGVzdGluYXRpb25cXG4tICogd2l0aCB0aGUgcENQVSdzIEFQSUMgSUQsIHNldCBJc1J1biwgYW5kIGNsZWFyIEdBTG9nSW50ci4gIElmIHRoZSB2Q1BVIGlzbid0XFxuLSAqIGFzc29jaWF0ZWQgd2l0aCBhIHBDUFUgKEBjcHUgXFx1MDAzYyAwKSwgY2xlYXIgSXNSdW4gYW5kIHNldC9jbGVhciBHQUxvZ0ludHIgYmFzZWRcXG4tICogb24gaW5wdXQgZnJvbSB0aGUgY2FsbGVyIChlLmcuIEtWTSBvbmx5IHJlcXVlc3RzIEdBTG9nSW50ciB3aGVuIHRoZSB2Q1BVIGlzXFxuLSAqIGJsb2NraW5nIGFuZCByZXF1aXJlcyBhIG5vdGlmaWNhdGlvbiB3YWtlIGV2ZW50KS4gIEkuZS4gdHJlYXQgdkNQVXMgdGhhdCBhcmVcXG4tICogYXNzb2NpYXRlZCB3aXRoIGEgcENQVSBhcyBydW5uaW5nLiAgVGhpcyBBUEkgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCB3aGVuIGFcXG4tICogdkNQVSBpcyBzY2hlZHVsZWQgaW4vb3V0IChvciBzdG9wcyBydW5uaW5nIGZvciBhbnkgcmVhc29uKSwgdG8gZG8gYSBmYXN0XFxuLSAqIHVwZGF0ZSBvZiBJc1J1biwgR0FMb2dJbnRyLCBhbmQgKGNvbmRpdGlvbmFsbHkpIERlc3RpbmF0aW9uLlxcbisgKiBJZiB0aGUgdkNQVSBpcyBzY2hlZHVsZWQgdG8gcnVuIG9uIHBDUFUgKEBpc19ydW5uaW5nID0gMSksIGNvbmZpZ3VyZSB0aGVcXG4rICogRGVzdGluYXRpb24gd2l0aCB0aGUgcENQVSdzIEFQSUMgSUQsIHNldCBJc1J1biwgYW5kIGNsZWFyIEdBTG9nSW50ci4gSWYgdGhlXFxuKyAqIHZDUFUgaXMgc2NoZWR1bGVkIG91dCAoQGlzX3J1bm5pbmcgPSAwKSwgY2xlYXIgSXNSdW4gYW5kIHNldC9jbGVhciBHQUxvZ0ludHJcXG4rICogYW5kIEdBUFBJRGlzIGJhc2VkIG9uIGlucHV0IGZyb20gdGhlIGNhbGxlciAoZS5nLiBLVk0gb25seSByZXF1ZXN0c1xcbisgKiB3YWtldXBfaW50ciB3aGVuIHRoZSB2Q1BVIGlzIGJsb2NraW5nIGFuZCByZXF1aXJlcyBhIG5vdGlmaWNhdGlvbiB3YWtlXFxuKyAqIGV2ZW50KS4gVGhpcyBBUEkgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCB3aGVuIGEgdkNQVSBpcyBzY2hlZHVsZWQgaW4vb3V0IChvclxcbisgKiBzdG9wcyBydW5uaW5nIGZvciBhbnkgcmVhc29uKSwgdG8gZG8gYSBmYXN0IHVwZGF0ZSBvZiBJc1J1biwgR0FMb2dJbnRyLFxcbisgKiBHQVBQSURpcyBhbmQgKGNvbmRpdGlvbmFsbHkpIERlc3RpbmF0aW9uLlxcbiAgKlxcbi0gKiBQZXIgdGhlIElPTU1VIHNwZWMsIHRoZSBEZXN0aW5hdGlvbiwgSXNSdW4sIGFuZCBHQVRhZyBmaWVsZHMgYXJlIG5vdCBjYWNoZWRcXG4tICogYW5kIHRodXMgZG9uJ3QgcmVxdWlyZSBhbiBpbnZhbGlkYXRpb24gdG8gZW5zdXJlIHRoZSBJT01NVSBjb25zdW1lcyBmcmVzaFxcbi0gKiBpbmZvcm1hdGlvbi5cXG4rICogUGVyIHRoZSBJT01NVSBzcGVjLCB0aGUgRGVzdGluYXRpb24sIElzUnVuLCBHQVRhZyBhbmQgR0FQUElEaXMgZmllbGRzIGFyZVxcbisgKiBub3QgY2FjaGVkIGFuZCB0aHVzIGRvbid0IHJlcXVpcmUgYW4gaW52YWxpZGF0aW9uIHRvIGVuc3VyZSB0aGUgSU9NTVVcXG4rICogY29uc3VtZXMgZnJlc2ggaW5mb3JtYXRpb24uXFxuICAqL1xcbi1pbnQgYW1kX2lvbW11X3VwZGF0ZV9nYSh2b2lkICpkYXRhLCBpbnQgY3B1LCBib29sIGdhX2xvZ19pbnRyKVxcbitpbnQgYW1kX2lvbW11X3VwZGF0ZV9nYSh2b2lkICpkYXRhLCBpbnQgYXBpY2lkLCBib29sIHdha2V1cF9pbnRyLCBib29sIGlzX3J1bm5pbmcpXFxuIHtcXG4gXFx0c3RydWN0IGFtZF9pcl9kYXRhICppcl9kYXRhID0gKHN0cnVjdCBhbWRfaXJfZGF0YSAqKWRhdGE7XFxuIFxcdHN0cnVjdCBpcnRlX2dhICplbnRyeSA9IChzdHJ1Y3QgaXJ0ZV9nYSAqKSBpcl9kYXRhLVxcdTAwM2VlbnRyeTtcXG5AQCAtNDAwNiwxNCArNDAxNiwxNCBAQCBpbnQgYW1kX2lvbW11X3VwZGF0ZV9nYSh2b2lkICpkYXRhLCBpbnQgY3B1LCBib29sIGdhX2xvZ19pbnRyKVxcbiBcXHRpZiAoIWlyX2RhdGEtXFx1MDAzZWlvbW11KVxcbiBcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4gXFxuLVxcdF9fYW1kX2lvbW11X3VwZGF0ZV9nYShlbnRyeSwgY3B1LCBnYV9sb2dfaW50cik7XFxuK1xcdF9fYW1kX2lvbW11X3VwZGF0ZV9nYShlbnRyeSwgYXBpY2lkLCB3YWtldXBfaW50ciwgaXNfcnVubmluZyk7XFxuIFxcbiBcXHRyZXR1cm4gX19tb2RpZnlfaXJ0ZV9nYShpcl9kYXRhLVxcdTAwM2Vpb21tdSwgaXJfZGF0YS1cXHUwMDNlaXJxXzJfaXJ0ZS5kZXZpZCxcXG4gXFx0XFx0XFx0XFx0aXJfZGF0YS1cXHUwMDNlaXJxXzJfaXJ0ZS5pbmRleCwgZW50cnkpO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0woYW1kX2lvbW11X3VwZGF0ZV9nYSk7XFxuIFxcbi1pbnQgYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUodm9pZCAqZGF0YSwgaW50IGNwdSwgYm9vbCBnYV9sb2dfaW50cilcXG4raW50IGFtZF9pb21tdV9hY3RpdmF0ZV9ndWVzdF9tb2RlKHZvaWQgKmRhdGEsIGludCBhcGljaWQsIGJvb2wgd2FrZXVwX2ludHIsIGJvb2wgaXNfcnVubmluZylcXG4ge1xcbiBcXHRzdHJ1Y3QgYW1kX2lyX2RhdGEgKmlyX2RhdGEgPSAoc3RydWN0IGFtZF9pcl9kYXRhICopZGF0YTtcXG4gXFx0c3RydWN0IGlydGVfZ2EgKmVudHJ5ID0gKHN0cnVjdCBpcnRlX2dhICopIGlyX2RhdGEtXFx1MDAzZWVudHJ5O1xcbkBAIC00MDM2LDcgKzQwNDYsNyBAQCBpbnQgYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUodm9pZCAqZGF0YSwgaW50IGNwdSwgYm9vbCBnYV9sb2dfaW50cilcXG4gXFx0ZW50cnktXFx1MDAzZWhpLmZpZWxkcy52ZWN0b3IgICAgICAgICAgICA9IGlyX2RhdGEtXFx1MDAzZWdhX3ZlY3RvcjtcXG4gXFx0ZW50cnktXFx1MDAzZWxvLmZpZWxkc192YXBpYy5nYV90YWcgICAgICA9IGlyX2RhdGEtXFx1MDAzZWdhX3RhZztcXG4gXFxuLVxcdF9fYW1kX2lvbW11X3VwZGF0ZV9nYShlbnRyeSwgY3B1LCBnYV9sb2dfaW50cik7XFxuK1xcdF9fYW1kX2lvbW11X3VwZGF0ZV9nYShlbnRyeSwgYXBpY2lkLCB3YWtldXBfaW50ciwgaXNfcnVubmluZyk7XFxuIFxcbiBcXHRyZXR1cm4gbW9kaWZ5X2lydGVfZ2EoaXJfZGF0YS1cXHUwMDNlaW9tbXUsIGlyX2RhdGEtXFx1MDAzZWlycV8yX2lydGUuZGV2aWQsXFxuIFxcdFxcdFxcdCAgICAgIGlyX2RhdGEtXFx1MDAzZWlycV8yX2lydGUuaW5kZXgsIGVudHJ5KTtcXG5AQCAtNDEwNyw4ICs0MTE3LDkgQEAgc3RhdGljIGludCBhbWRfaXJfc2V0X3ZjcHVfYWZmaW5pdHkoc3RydWN0IGlycV9kYXRhICpkYXRhLCB2b2lkICppbmZvKVxcbiBcXHRcXHRpcl9kYXRhLVxcdTAwM2VnYV92ZWN0b3IgPSBwaV9kYXRhLVxcdTAwM2V2ZWN0b3I7XFxuIFxcdFxcdGlyX2RhdGEtXFx1MDAzZWdhX3RhZyA9IHBpX2RhdGEtXFx1MDAzZWdhX3RhZztcXG4gXFx0XFx0aWYgKHBpX2RhdGEtXFx1MDAzZWlzX2d1ZXN0X21vZGUpXFxuLVxcdFxcdFxcdHJldCA9IGFtZF9pb21tdV9hY3RpdmF0ZV9ndWVzdF9tb2RlKGlyX2RhdGEsIHBpX2RhdGEtXFx1MDAzZWNwdSxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIHBpX2RhdGEtXFx1MDAzZWdhX2xvZ19pbnRyKTtcXG4rXFx0XFx0XFx0cmV0ID0gYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUoaXJfZGF0YSwgcGlfZGF0YS1cXHUwMDNlYXBpY2lkLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgcGlfZGF0YS1cXHUwMDNld2FrZXVwX2ludHIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBwaV9kYXRhLVxcdTAwM2Vpc19ydW5uaW5nKTtcXG4gXFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRyZXQgPSBhbWRfaW9tbXVfZGVhY3RpdmF0ZV9ndWVzdF9tb2RlKGlyX2RhdGEpO1xcbiBcXHR9IGVsc2Uge1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2FtZC1pb21tdS5oIGIvaW5jbHVkZS9saW51eC9hbWQtaW9tbXUuaFxcbmluZGV4IGVkY2VlOWY1MzM1YTZmLi43MjlkODJjNGUwOWUyNyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2FtZC1pb21tdS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9hbWQtaW9tbXUuaFxcbkBAIC0zMCw4ICszMCwxMCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYW1kX2lvbW11X2RldGVjdCh2b2lkKSB7IH1cXG4gLyogSU9NTVUgQVZJQyBGdW5jdGlvbiAqL1xcbiBleHRlcm4gaW50IGFtZF9pb21tdV9yZWdpc3Rlcl9nYV9sb2dfbm90aWZpZXIoaW50ICgqbm90aWZpZXIpKHUzMikpO1xcbiBcXG4tZXh0ZXJuIGludCBhbWRfaW9tbXVfdXBkYXRlX2dhKHZvaWQgKmRhdGEsIGludCBjcHUsIGJvb2wgZ2FfbG9nX2ludHIpO1xcbi1leHRlcm4gaW50IGFtZF9pb21tdV9hY3RpdmF0ZV9ndWVzdF9tb2RlKHZvaWQgKmRhdGEsIGludCBjcHUsIGJvb2wgZ2FfbG9nX2ludHIpO1xcbitleHRlcm4gaW50IGFtZF9pb21tdV91cGRhdGVfZ2Eodm9pZCAqZGF0YSwgaW50IGFwaWNpZCwgYm9vbCB3YWtldXBfaW50cixcXG4rXFx0XFx0XFx0ICAgICAgIGJvb2wgaXNfcnVubmluZyk7XFxuK2V4dGVybiBpbnQgYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUodm9pZCAqZGF0YSwgaW50IGFwaWNpZCwgYm9vbCB3YWtldXBfaW50cixcXG4rXFx0XFx0XFx0XFx0XFx0IGJvb2wgaXNfcnVubmluZyk7XFxuIGV4dGVybiBpbnQgYW1kX2lvbW11X2RlYWN0aXZhdGVfZ3Vlc3RfbW9kZSh2b2lkICpkYXRhKTtcXG4gXFxuICNlbHNlIC8qIGRlZmluZWQoQ09ORklHX0FNRF9JT01NVSkgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfSVJRX1JFTUFQKSAqL1xcbkBAIC00MiwxMiArNDQsMTQgQEAgYW1kX2lvbW11X3JlZ2lzdGVyX2dhX2xvZ19ub3RpZmllcihpbnQgKCpub3RpZmllcikodTMyKSlcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgaW50IGFtZF9pb21tdV91cGRhdGVfZ2Eodm9pZCAqZGF0YSwgaW50IGNwdSwgYm9vbCBnYV9sb2dfaW50cilcXG4rc3RhdGljIGlubGluZSBpbnQgYW1kX2lvbW11X3VwZGF0ZV9nYSh2b2lkICpkYXRhLCBpbnQgYXBpY2lkLCBib29sIHdha2V1cF9pbnRyLFxcbitcXHRcXHRcXHRcXHQgICAgICBib29sIGlzX3J1bm5pbmcpXFxuIHtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgaW50IGFtZF9pb21tdV9hY3RpdmF0ZV9ndWVzdF9tb2RlKHZvaWQgKmRhdGEsIGludCBjcHUsIGJvb2wgZ2FfbG9nX2ludHIpXFxuK3N0YXRpYyBpbmxpbmUgaW50IGFtZF9pb21tdV9hY3RpdmF0ZV9ndWVzdF9tb2RlKHZvaWQgKmRhdGEsIGludCBhcGljaWQsIGJvb2wgd2FrZXVwX2ludHIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdGJvb2wgaXNfcnVubmluZylcXG4ge1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbkBAIC03Niw0ICs4MCw1IEBAIHN0YXRpYyBpbmxpbmUgaW50IGFtZF9pb21tdV9zbnBfZGlzYWJsZSh2b2lkKSB7IHJldHVybiAwOyB9XFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBhbWRfaW9tbXVfc2V2X3Rpb19zdXBwb3J0ZWQodm9pZCkgeyByZXR1cm4gZmFsc2U7IH1cXG4gI2VuZGlmXFxuIFxcbitleHRlcm4gYm9vbCBhbWRfaW9tbXVfZ2FwcGk7XFxuICNlbmRpZiAvKiBfQVNNX1g4Nl9BTURfSU9NTVVfSCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxMzozNjoyNC43NzMyMjY4OTVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE2MjU5NzQxMzI4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1fQU1EXCIsXG4gICAgXCJBTURfSU9NTVVcIixcbiAgICBcIklSUV9SRU1BUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImF2aWNfYWRkX3ZjcHVfdG9fZ2FwcGlfd2FrZXVwX2xpc3RcIixcbiAgICBcImF2aWNfcmVtb3ZlX3ZjcHVfZnJvbV9nYXBwaV93YWtldXBfbGlzdFwiLFxuICAgIFwiYXZpY19nYXBwaV93YWtldXBfaGFuZGxlclwiLFxuICAgIFwiYXZpY19waV91cGRhdGVfaXJ0ZVwiLFxuICAgIFwiYXZpY191cGRhdGVfaW9tbXVfdmNwdV9hZmZpbml0eVwiLFxuICAgIFwiX19hbWRfaW9tbXVfdXBkYXRlX2dhXCIsXG4gICAgXCJhbWRfaW9tbXVfdXBkYXRlX2dhXCIsXG4gICAgXCJhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgR0FQUEkgKEd1ZXN0IEFQSUMgUG9zdGVkIEludGVycnVwdHMpIHN1cHBvcnQgZm9yIEFNRCBJT01NVSBhbmQgS1ZNIFNWTSBBVklDLiBJdCBtb2RpZmllcyB0aGUgSVJURSBjb25maWd1cmF0aW9uIGZvciBwb3N0ZWQgaW50ZXJydXB0cyBhbmQgaW50cm9kdWNlcyBhIG5ldyB3YWtldXAgbGlzdCBmb3IgR0FQUEkgaW4gS1ZNLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSB2aXJ0dWFsaXphdGlvbiBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjMDBjNWFjZGQ0MmI0MGRiMjBmNDFjMDE5Zjk5MTY4OTU2MzgwZTFlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgMTMgMTM6MzY6MjIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0XG5pbmRleCA5NzAwN2Y0ZjY5ZDRlOC4uZDI3ZjEwY2JiMDA0Y2MgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dFxuKysrIGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHRcbkBAIC00NTUsNyArNDU1LDggQEAgS2VybmVsIHBhcmFtZXRlcnNcbiBcdFx0XHRcdCAgICAgICAgICB0byA0IEtpQi5cbiBcdFx0XHR2Ml9wZ3NpemVzX29ubHkgLSBMaW1pdCBwYWdlLXNpemVzIHVzZWQgZm9yIHYxIHBhZ2UtdGFibGVzXG4gXHRcdFx0XHQgICAgICAgICAgdG8gNEtpQi8yTWliLzFHaUIuXG4tXG4rXHRcdFx0Z2FwcGlcdFx0LSBVc2UgR0FQUEkgaW5zdGVhZCBvZiBHQUxPRyBmb3IgdkNQVVxuK1x0XHRcdFx0XHQgIHdha2V1cCBub3RpZmljYXRpb24uXG4gXG4gXHRhbWRfaW9tbXVfZHVtcD1cdFtIVyxYODYtNjRdXG4gXHRcdFx0RW5hYmxlIEFNRCBJT01NVSBkcml2ZXIgb3B0aW9uIHRvIGR1bXAgdGhlIEFDUEkgdGFibGVcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcnFfcmVtYXBwaW5nLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcnFfcmVtYXBwaW5nLmhcbmluZGV4IDM3Yjk0ZjQ4NGVmMzM4Li5hZjBjZGZhMzJjNDQ3ZiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lycV9yZW1hcHBpbmcuaFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaXJxX3JlbWFwcGluZy5oXG5AQCAtMzUsOCArMzUsOSBAQCBzdHJ1Y3QgYW1kX2lvbW11X3BpX2RhdGEge1xuIFx0dTY0IHZhcGljX2FkZHI7XHRcdC8qIFBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIHZDUFUncyB2QVBJQy4gKi9cbiBcdHUzMiBnYV90YWc7XG4gXHR1MzIgdmVjdG9yO1x0XHQvKiBHdWVzdCB2ZWN0b3Igb2YgdGhlIGludGVycnVwdCAqL1xuLVx0aW50IGNwdTtcbi1cdGJvb2wgZ2FfbG9nX2ludHI7XG4rXHRpbnQgYXBpY2lkO1xuK1x0Ym9vbCB3YWtldXBfaW50cjtcbitcdGJvb2wgaXNfcnVubmluZztcbiBcdGJvb2wgaXNfZ3Vlc3RfbW9kZTtcbiBcdHZvaWQgKmlyX2RhdGE7XG4gfTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oXG5pbmRleCBiY2ZlYjVlN2MwZWRmMi4uYWRkOGI3Mjc0Y2MyZjggMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmhcbkBAIC0yNTksMTEgKzI1OSwxMiBAQCBzdHJ1Y3QgX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKSB2bWNiX2NvbnRyb2xfYXJlYSB7XG4gI2RlZmluZSBBVklDX0xPR0lDQUxfSURfRU5UUllfVkFMSURfTUFTS1x0XHQoMSBcdTAwM2NcdTAwM2MgMzEpXG4gXG4gLypcbi0gKiBHQV9MT0dfSU5UUiBpcyBhIHN5bnRoZXRpYyBmbGFnIHRoYXQncyBuZXZlciBwcm9wYWdhdGVkIHRvIGhhcmR3YXJlLXZpc2libGVcbi0gKiB0YWJsZXMuICBHQV9MT0dfSU5UUiBpcyBzZXQgaWYgdGhlIHZDUFUgbmVlZHMgZGV2aWNlIHBvc3RlZCBJUlFzIHRvIGdlbmVyYXRlXG4tICogR0EgbG9nIGludGVycnVwdHMgdG8gd2FrZSB0aGUgdkNQVSAoYmVjYXVzZSBpdCdzIGJsb2NraW5nIG9yIGFib3V0IHRvIGJsb2NrKS5cbisgKiBXQUtFVVBfSU5UUiBpcyBhIHN5bnRoZXRpYyBmbGFnIHRoYXQncyBuZXZlciBwcm9wYWdhdGVkIHRvIGhhcmR3YXJlLXZpc2libGVcbisgKiB0YWJsZXMuICBXQUtFVVBfSU5UUiBpcyBzZXQgaWYgdGhlIHZDUFUgbmVlZHMgZGV2aWNlIHBvc3RlZCBJUlFzIHRvIGdlbmVyYXRlXG4rICogR0EgbG9nL0dBUFBJIGludGVycnVwdHMgdG8gd2FrZSB0aGUgdkNQVSAoYmVjYXVzZSBpdCdzIGJsb2NraW5nIG9yIGFib3V0IHRvXG4rICogYmxvY2spLlxuICAqL1xuLSNkZWZpbmUgQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9HQV9MT0dfSU5UUlx0XHRCSVRfVUxMKDYxKVxuKyNkZWZpbmUgQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9XQUtFVVBfSU5UUlx0XHRCSVRfVUxMKDYxKVxuIFxuICNkZWZpbmUgQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9IT1NUX1BIWVNJQ0FMX0lEX01BU0tcdEdFTk1BU0tfVUxMKDExLCAwKVxuICNkZWZpbmUgQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9CQUNLSU5HX1BBR0VfTUFTS1x0R0VOTUFTS19VTEwoNTEsIDEyKVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vYXZpYy5jIGIvYXJjaC94ODYva3ZtL3N2bS9hdmljLmNcbmluZGV4IGNkZDVhNmRjNjQ2ZjExLi45ODJhNTk4ODUzMmZmNCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vYXZpYy5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuY1xuQEAgLTYzLDYgKzYzLDkgQEBcbiBcdGdhX3RhZztcdFx0XHRcdFx0XHRcdFx0XFxcbiB9KVxuIFxuK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgbGlzdF9oZWFkLCBnYXBwaV92Y3B1X3dha2V1cF9saXN0KTtcbitzdGF0aWMgREVGSU5FX1BFUl9DUFUocmF3X3NwaW5sb2NrX3QsIGdhcHBpX3ZjcHVfd2FrZXVwX2xpc3RfbG9jayk7XG4rXG4gc3RhdGljX2Fzc2VydChfX0FWSUNfR0FUQUcoQVZJQ19WTV9JRF9NQVNLLCBBVklDX1ZDUFVfSURYX01BU0spID09IC0xdSk7XG4gXG4gI2RlZmluZSBBVklDX0FVVE9fTU9ERSAtMVxuQEAgLTg3NCw2ICs4NzcsOSBAQCBpbnQgYXZpY19pbml0X3ZjcHUoc3RydWN0IHZjcHVfc3ZtICpzdm0pXG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZzdm0tXHUwMDNlaXJfbGlzdCk7XG4gXHRyYXdfc3Bpbl9sb2NrX2luaXQoXHUwMDI2c3ZtLVx1MDAzZWlyX2xpc3RfbG9jayk7XG4gXG4rXHRJTklUX0xJU1RfSEVBRChcdTAwMjZzdm0tXHUwMDNlZ2FwcGlfdmNwdV93YWtldXBfbGlzdCk7XG4rXHRzdm0tXHUwMDNlZ2FwcGlfY3B1ID0gLTE7XG4rXG4gXHRpZiAoIWVuYWJsZV9hcGljdiB8fCAhaXJxY2hpcF9pbl9rZXJuZWwodmNwdS1cdTAwM2Vrdm0pKVxuIFx0XHRyZXR1cm4gMDtcbiBcbkBAIC04ODYsNiArODkyLDQyIEBAIGludCBhdmljX2luaXRfdmNwdShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGF2aWNfYWRkX3ZjcHVfdG9fZ2FwcGlfd2FrZXVwX2xpc3Qoc3RydWN0IHZjcHVfc3ZtICpzdm0sIGludCBjcHUpXG4re1xuK1x0c3RydWN0IGxpc3RfaGVhZCAqd2FrZXVwX2xpc3Q7XG4rXHRyYXdfc3BpbmxvY2tfdCAqc3BpbmxvY2s7XG4rXG4rXHRpZiAoV0FSTl9PTih1bmxpa2VseShjcHUgXHUwMDNjIDApKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0d2FrZXVwX2xpc3QgPSBcdTAwMjZwZXJfY3B1KGdhcHBpX3ZjcHVfd2FrZXVwX2xpc3QsIGNwdSk7XG4rXHRzcGlubG9jayA9IFx1MDAyNnBlcl9jcHUoZ2FwcGlfdmNwdV93YWtldXBfbGlzdF9sb2NrLCBjcHUpO1xuK1x0Z3VhcmQocmF3X3NwaW5sb2NrX2lycXNhdmUpKHNwaW5sb2NrKTtcbitcdGlmIChsaXN0X2VtcHR5KFx1MDAyNnN2bS1cdTAwM2VnYXBwaV92Y3B1X3dha2V1cF9saXN0KSlcbitcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZzdm0tXHUwMDNlZ2FwcGlfdmNwdV93YWtldXBfbGlzdCwgd2FrZXVwX2xpc3QpO1xuK31cbitcbitzdGF0aWMgdm9pZCBhdmljX3JlbW92ZV92Y3B1X2Zyb21fZ2FwcGlfd2FrZXVwX2xpc3Qoc3RydWN0IHZjcHVfc3ZtICpzdm0sIGludCBjcHUpXG4re1xuK1x0cmF3X3NwaW5sb2NrX3QgKnNwaW5sb2NrO1xuK1xuK1x0aWYgKFdBUk5fT04odW5saWtlbHkoY3B1IFx1MDAzYyAwKSkpXG4rXHRcdHJldHVybjtcbitcbitcdHNwaW5sb2NrID0gXHUwMDI2cGVyX2NwdShnYXBwaV92Y3B1X3dha2V1cF9saXN0X2xvY2ssIGNwdSk7XG4rXHRndWFyZChyYXdfc3BpbmxvY2tfaXJxc2F2ZSkoc3BpbmxvY2spO1xuK1x0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNnN2bS1cdTAwM2VnYXBwaV92Y3B1X3dha2V1cF9saXN0KSlcbitcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZzdm0tXHUwMDNlZ2FwcGlfdmNwdV93YWtldXBfbGlzdCk7XG4rfVxuK1xuK3ZvaWQgYXZpY19kZXN0cm95X3ZjcHUoc3RydWN0IHZjcHVfc3ZtICpzdm0pXG4re1xuK1x0aWYgKHN2bS1cdTAwM2VnYXBwaV9jcHUgIT0gLTEgXHUwMDI2XHUwMDI2IGFtZF9pb21tdV9nYXBwaSkge1xuK1x0XHRhdmljX3JlbW92ZV92Y3B1X2Zyb21fZ2FwcGlfd2FrZXVwX2xpc3Qoc3ZtLCBzdm0tXHUwMDNlZ2FwcGlfY3B1KTtcbitcdFx0c3ZtLVx1MDAzZWdhcHBpX2NwdSA9IC0xO1xuK1x0fVxuK31cbitcbiB2b2lkIGF2aWNfYXBpY3ZfcG9zdF9zdGF0ZV9yZXN0b3JlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHRhdmljX2hhbmRsZV9kZnJfdXBkYXRlKHZjcHUpO1xuQEAgLTg5NiwxMyArOTM4LDE4IEBAIHN0YXRpYyB2b2lkIHN2bV9pcl9saXN0X2RlbChzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFmZCAqaXJxZmQpXG4ge1xuIFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0gaXJxZmQtXHUwMDNlaXJxX2J5cGFzc192Y3B1O1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbitcdHN0cnVjdCB2Y3B1X3N2bSAqc3ZtO1xuIFxuIFx0aWYgKCF2Y3B1KVxuIFx0XHRyZXR1cm47XG4gXG4tXHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2dG9fc3ZtKHZjcHUpLVx1MDAzZWlyX2xpc3RfbG9jaywgZmxhZ3MpO1xuK1x0c3ZtID0gdG9fc3ZtKHZjcHUpO1xuK1xuK1x0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnN2bS1cdTAwM2Vpcl9saXN0X2xvY2ssIGZsYWdzKTtcbiBcdGxpc3RfZGVsKFx1MDAyNmlycWZkLVx1MDAzZXZjcHVfbGlzdCk7XG4tXHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ0b19zdm0odmNwdSktXHUwMDNlaXJfbGlzdF9sb2NrLCBmbGFncyk7XG4rXHRpZiAoYW1kX2lvbW11X2dhcHBpIFx1MDAyNlx1MDAyNiBsaXN0X2VtcHR5KFx1MDAyNnN2bS1cdTAwM2Vpcl9saXN0KSlcbitcdFx0YXZpY19yZW1vdmVfdmNwdV9mcm9tX2dhcHBpX3dha2V1cF9saXN0KHN2bSwgc3ZtLVx1MDAzZWdhcHBpX2NwdSk7XG4rXHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZzdm0tXHUwMDNlaXJfbGlzdF9sb2NrLCBmbGFncyk7XG4gfVxuIFxuIGludCBhdmljX3BpX3VwZGF0ZV9pcnRlKHN0cnVjdCBrdm1fa2VybmVsX2lycWZkICppcnFmZCwgc3RydWN0IGt2bSAqa3ZtLFxuQEAgLTkyMyw4ICs5NzAsNiBAQCBpbnQgYXZpY19waV91cGRhdGVfaXJ0ZShzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFmZCAqaXJxZmQsIHN0cnVjdCBrdm0gKmt2bSxcbiBcdFx0ICogaWYgQVZJQyBpcyBlbmFibGVkL3VuaW5oaWJpdGVkIGluIHRoZSBmdXR1cmUuXG4gXHRcdCAqL1xuIFx0XHRzdHJ1Y3QgYW1kX2lvbW11X3BpX2RhdGEgcGlfZGF0YSA9IHtcbi1cdFx0XHQuZ2FfdGFnID0gQVZJQ19HQVRBRyh0b19rdm1fc3ZtKGt2bSktXHUwMDNlYXZpY192bV9pZCxcbi1cdFx0XHRcdFx0ICAgICB2Y3B1LVx1MDAzZXZjcHVfaWR4KSxcbiBcdFx0XHQuaXNfZ3Vlc3RfbW9kZSA9IGt2bV92Y3B1X2FwaWN2X2FjdGl2ZSh2Y3B1KSxcbiBcdFx0XHQudmFwaWNfYWRkciA9IGF2aWNfZ2V0X2JhY2tpbmdfcGFnZV9hZGRyZXNzKHRvX3N2bSh2Y3B1KSksXG4gXHRcdFx0LnZlY3RvciA9IHZlY3RvcixcbkBAIC05MzIsNiArOTc3LDcgQEAgaW50IGF2aWNfcGlfdXBkYXRlX2lydGUoc3RydWN0IGt2bV9rZXJuZWxfaXJxZmQgKmlycWZkLCBzdHJ1Y3Qga3ZtICprdm0sXG4gXHRcdHN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpO1xuIFx0XHR1NjQgZW50cnk7XG4gXHRcdGludCByZXQ7XG4rXHRcdGJvb2wgaXNfdmNwdV93YWl0aW5nID0gZmFsc2U7XG4gXG4gXHRcdC8qXG4gXHRcdCAqIFByZXZlbnQgdGhlIHZDUFUgZnJvbSBiZWluZyBzY2hlZHVsZWQgb3V0IG9yIG1pZ3JhdGVkIHVudGlsXG5AQCAtOTQ3LDE3ICs5OTMsMzMgQEAgaW50IGF2aWNfcGlfdXBkYXRlX2lydGUoc3RydWN0IGt2bV9rZXJuZWxfaXJxZmQgKmlycWZkLCBzdHJ1Y3Qga3ZtICprdm0sXG4gXHRcdCAqIHNjaGVkdWxlZCBvdXQsIEtWTSB3aWxsIHVwZGF0ZSB0aGUgcENQVSBpbmZvIHdoZW4gdGhlIHZDUFVcbiBcdFx0ICogaXMgYXdha2VuZWQgYW5kL29yIHNjaGVkdWxlZCBpbi4gIFNlZSBhbHNvIGF2aWNfdmNwdV9sb2FkKCkuXG4gXHRcdCAqL1xuK1x0XHRpZiAoYW1kX2lvbW11X2dhcHBpKVxuK1x0XHRcdHBpX2RhdGEuZ2FfdGFnID0gUE9TVEVEX0lOVFJfV0FLRVVQX1ZFQ1RPUjtcbitcdFx0ZWxzZVxuK1x0XHRcdHBpX2RhdGEuZ2FfdGFnID0gQVZJQ19HQVRBRyh0b19rdm1fc3ZtKGt2bSktXHUwMDNlYXZpY192bV9pZCxcbitcdFx0XHRcdFx0XHQgICAgdmNwdS1cdTAwM2V2Y3B1X2lkeCk7XG4rXG4gXHRcdGVudHJ5ID0gc3ZtLVx1MDAzZWF2aWNfcGh5c2ljYWxfaWRfZW50cnk7XG4gXHRcdGlmIChlbnRyeSBcdTAwMjYgQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9JU19SVU5OSU5HX01BU0spIHtcbi1cdFx0XHRwaV9kYXRhLmNwdSA9IGVudHJ5IFx1MDAyNiBBVklDX1BIWVNJQ0FMX0lEX0VOVFJZX0hPU1RfUEhZU0lDQUxfSURfTUFTSztcbitcdFx0XHRwaV9kYXRhLmFwaWNpZCA9IGVudHJ5IFx1MDAyNiBBVklDX1BIWVNJQ0FMX0lEX0VOVFJZX0hPU1RfUEhZU0lDQUxfSURfTUFTSztcbitcdFx0XHRwaV9kYXRhLmlzX3J1bm5pbmcgPSB0cnVlO1xuIFx0XHR9IGVsc2Uge1xuLVx0XHRcdHBpX2RhdGEuY3B1ID0gLTE7XG4tXHRcdFx0cGlfZGF0YS5nYV9sb2dfaW50ciA9IGVudHJ5IFx1MDAyNiBBVklDX1BIWVNJQ0FMX0lEX0VOVFJZX0dBX0xPR19JTlRSO1xuK1x0XHRcdHBpX2RhdGEuYXBpY2lkID0gLTE7XG4rXHRcdFx0cGlfZGF0YS53YWtldXBfaW50ciA9IGVudHJ5IFx1MDAyNiBBVklDX1BIWVNJQ0FMX0lEX0VOVFJZX1dBS0VVUF9JTlRSO1xuK1x0XHRcdHBpX2RhdGEuaXNfcnVubmluZyA9IGZhbHNlO1xuK1xuK1x0XHRcdGlmIChhbWRfaW9tbXVfZ2FwcGkpIHtcbitcdFx0XHRcdHBpX2RhdGEuYXBpY2lkID0ga3ZtX2NwdV9nZXRfYXBpY2lkKHN2bS1cdTAwM2VnYXBwaV9jcHUpO1xuK1x0XHRcdFx0aWYgKGxpc3RfZW1wdHkoXHUwMDI2c3ZtLVx1MDAzZWlyX2xpc3QpKSB7XG4rXHRcdFx0XHRcdGF2aWNfYWRkX3ZjcHVfdG9fZ2FwcGlfd2FrZXVwX2xpc3Qoc3ZtLCBzdm0tXHUwMDNlZ2FwcGlfY3B1KTtcbitcdFx0XHRcdFx0aXNfdmNwdV93YWl0aW5nID0gdHJ1ZTtcbitcdFx0XHRcdH1cbitcdFx0XHR9XG4gXHRcdH1cbiBcbiBcdFx0cmV0ID0gaXJxX3NldF92Y3B1X2FmZmluaXR5KGhvc3RfaXJxLCBcdTAwMjZwaV9kYXRhKTtcbiBcdFx0aWYgKHJldClcbi1cdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHRcdGdvdG8gZ2FwcGlfZXJyX291dDtcbiBcbiBcdFx0LypcbiBcdFx0ICogUmV2ZXJ0IHRvIGxlZ2FjeSBtb2RlIGlmIHRoZSBJT01NVSBkaWRuJ3QgcHJvdmlkZSBtZXRhZGF0YVxuQEAgLTk2NiwxMiArMTAyOCwxNyBAQCBpbnQgYXZpY19waV91cGRhdGVfaXJ0ZShzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFmZCAqaXJxZmQsIHN0cnVjdCBrdm0gKmt2bSxcbiBcdFx0ICovXG4gXHRcdGlmIChXQVJOX09OX09OQ0UoIXBpX2RhdGEuaXJfZGF0YSkpIHtcbiBcdFx0XHRpcnFfc2V0X3ZjcHVfYWZmaW5pdHkoaG9zdF9pcnEsIE5VTEwpO1xuLVx0XHRcdHJldHVybiAtRUlPO1xuK1x0XHRcdHJldCA9IC1FSU87XG4rXHRcdFx0Z290byBnYXBwaV9lcnJfb3V0O1xuIFx0XHR9XG4gXG4gXHRcdGlycWZkLVx1MDAzZWlycV9ieXBhc3NfZGF0YSA9IHBpX2RhdGEuaXJfZGF0YTtcbiBcdFx0bGlzdF9hZGQoXHUwMDI2aXJxZmQtXHUwMDNldmNwdV9saXN0LCBcdTAwMjZzdm0tXHUwMDNlaXJfbGlzdCk7XG4gXHRcdHJldHVybiAwO1xuK2dhcHBpX2Vycl9vdXQ6XG4rXHRcdGlmIChpc192Y3B1X3dhaXRpbmcpXG4rXHRcdFx0YXZpY19yZW1vdmVfdmNwdV9mcm9tX2dhcHBpX3dha2V1cF9saXN0KHN2bSwgc3ZtLVx1MDAzZWdhcHBpX2NwdSk7XG4rXHRcdHJldHVybiByZXQ7XG4gXHR9XG4gXHRyZXR1cm4gaXJxX3NldF92Y3B1X2FmZmluaXR5KGhvc3RfaXJxLCBOVUxMKTtcbiB9XG5AQCAtOTkxLDIzICsxMDU4LDI0IEBAIGVudW0gYXZpY192Y3B1X2FjdGlvbiB7XG4gXHQgKiBObyB1bmlxdWUgYWN0aW9uIGlzIHJlcXVpcmVkIHRvIGRlYWwgd2l0aCBhIHZDUFUgdGhhdCBzdG9wcy9zdGFydHNcbiBcdCAqIHJ1bm5pbmcuICBBIHZDUFUgdGhhdCBzdGFydHMgcnVubmluZyBieSBkZWZpbml0aW9uIHN0b3BzIGJsb2NraW5nIGFzXG4gXHQgKiB3ZWxsLCBhbmQgYSB2Q1BVIHRoYXQgc3RvcHMgcnVubmluZyBjYW4ndCBoYXZlIGJlZW4gYmxvY2tpbmcsIGkuZS5cbi1cdCAqIGRvZXNuJ3QgbmVlZCB0byB0b2dnbGUgR0FMb2dJbnRyLlxuK1x0ICogZG9lc24ndCBuZWVkIHRvIHRvZ2dsZSBob3N0IHdha2V1cCBub3RpZmljYXRpb24uXG4gXHQgKi9cbiBcdEFWSUNfU1RBUlRfUlVOTklOR1x0PSAwLFxuIFx0QVZJQ19TVE9QX1JVTk5JTkdcdD0gMCxcbiBcbiBcdC8qXG4tXHQgKiBXaGVuIGEgdkNQVSBzdGFydHMgYmxvY2tpbmcsIEtWTSBuZWVkcyB0byBzZXQgdGhlIEdBTG9nSW50ciBmbGFnXG4tXHQgKiBpbnQgYWxsIGFzc29jaWF0ZWQgSVJURXMgc28gdGhhdCBLVk0gY2FuIHdha2UgdGhlIHZDUFUgaWYgYW4gSVJRIGlzXG4tXHQgKiBzZW50IHRvIHRoZSB2Q1BVLlxuK1x0ICogV2hlbiBhIHZDUFUgc3RhcnRzIGJsb2NraW5nLCBLVk0gbmVlZHMgdG8gcmVxdWVzdCBob3N0IHdha2V1cFxuK1x0ICogbm90aWZpY2F0aW9uIGluIGFsbCBhc3NvY2lhdGVkIElSVEVzIHNvIHRoYXQgS1ZNIGNhbiB3YWtlIHRoZSB2Q1BVXG4rXHQgKiBpZiBhbiBJUlEgaXMgc2VudCB0byB0aGUgdkNQVS5cbiBcdCAqL1xuIFx0QVZJQ19TVEFSVF9CTE9DS0lOR1x0PSBCSVQoMSksXG4gfTtcbiBcbi1zdGF0aWMgdm9pZCBhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSxcbi1cdFx0XHRcdFx0ICAgIGVudW0gYXZpY192Y3B1X2FjdGlvbiBhY3Rpb24pXG4rc3RhdGljIHZvaWQgYXZpY191cGRhdGVfaW9tbXVfdmNwdV9hZmZpbml0eShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBhcGljaWQsXG4rXHRcdFx0XHRcdCAgICBpbnQgY3B1LCBlbnVtIGF2aWNfdmNwdV9hY3Rpb24gYWN0aW9uKVxuIHtcbi1cdGJvb2wgZ2FfbG9nX2ludHIgPSAoYWN0aW9uIFx1MDAyNiBBVklDX1NUQVJUX0JMT0NLSU5HKTtcbitcdGJvb2wgd2FrZXVwX2ludHIgPSAoYWN0aW9uIFx1MDAyNiBBVklDX1NUQVJUX0JMT0NLSU5HKTtcbitcdGJvb2wgaXNfcnVubmluZyA9IGFwaWNpZCBcdTAwM2U9IDA7XG4gXHRzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTtcbiBcdHN0cnVjdCBrdm1fa2VybmVsX2lycWZkICppcnFmZDtcbiBcbkBAIC0xMDE1LDE4ICsxMDgzLDM2IEBAIHN0YXRpYyB2b2lkIGF2aWNfdXBkYXRlX2lvbW11X3ZjcHVfYWZmaW5pdHkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1LFxuIFxuIFx0LypcbiBcdCAqIEhlcmUsIHdlIGdvIHRocm91Z2ggdGhlIHBlci12Y3B1IGlyX2xpc3QgdG8gdXBkYXRlIGFsbCBleGlzdGluZ1xuLVx0ICogaW50ZXJydXB0IHJlbWFwcGluZyB0YWJsZSBlbnRyeSB0YXJnZXRpbmcgdGhpcyB2Y3B1LlxuK1x0ICogaW50ZXJydXB0IHJlbWFwcGluZyB0YWJsZSBlbnRyaWVzIHRhcmdldGluZyB0aGlzIHZjcHUuXG4gXHQgKi9cbi1cdGlmIChsaXN0X2VtcHR5KFx1MDAyNnN2bS1cdTAwM2Vpcl9saXN0KSlcbitcdGlmIChsaXN0X2VtcHR5KFx1MDAyNnN2bS1cdTAwM2Vpcl9saXN0KSkge1xuK1x0XHRpZiAoYW1kX2lvbW11X2dhcHBpIFx1MDAyNlx1MDAyNiBjcHUgXHUwMDNlPSAwKVxuK1x0XHRcdHN2bS1cdTAwM2VnYXBwaV9jcHUgPSBjcHU7XG4gXHRcdHJldHVybjtcbitcdH1cbitcbitcdGlmIChpc19ydW5uaW5nIFx1MDAyNlx1MDAyNiBhbWRfaW9tbXVfZ2FwcGkpIHtcbitcdFx0aWYgKHN2bS1cdTAwM2VnYXBwaV9jcHUgIT0gLTEpXG4rXHRcdFx0LypcbitcdFx0XHQgKiBIYW5kbGUgaW5pdGlhbCBzdGF0ZSB3aGVuIHZDUFUgaXMgbG9hZGVkIGZvciB0aGVcbitcdFx0XHQgKiBmaXJzdCB0aW1lIHdpdGhvdXQgYW55IElSUSBhZmZpbml0eS5cbitcdFx0XHQgKi9cbitcdFx0XHRhdmljX3JlbW92ZV92Y3B1X2Zyb21fZ2FwcGlfd2FrZXVwX2xpc3Qoc3ZtLCBzdm0tXHUwMDNlZ2FwcGlfY3B1KTtcbitcbitcdFx0c3ZtLVx1MDAzZWdhcHBpX2NwdSA9IGNwdTsgLyogU3RvcmUgY3B1IG51bWJlciBhcyB0YXJnZXQgZm9yIEdBUFBJICovXG4rXHR9IGVsc2UgaWYgKGFtZF9pb21tdV9nYXBwaSkge1xuK1x0XHRhcGljaWQgPSBrdm1fY3B1X2dldF9hcGljaWQoc3ZtLVx1MDAzZWdhcHBpX2NwdSk7XG4rXHRcdGF2aWNfYWRkX3ZjcHVfdG9fZ2FwcGlfd2FrZXVwX2xpc3Qoc3ZtLCBzdm0tXHUwMDNlZ2FwcGlfY3B1KTtcbitcdH1cbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkoaXJxZmQsIFx1MDAyNnN2bS1cdTAwM2Vpcl9saXN0LCB2Y3B1X2xpc3QpIHtcbiBcdFx0dm9pZCAqZGF0YSA9IGlycWZkLVx1MDAzZWlycV9ieXBhc3NfZGF0YTtcbiBcbiBcdFx0aWYgKCEoYWN0aW9uIFx1MDAyNiBBVklDX1RPR0dMRV9PTl9PRkYpKVxuLVx0XHRcdFdBUk5fT05fT05DRShhbWRfaW9tbXVfdXBkYXRlX2dhKGRhdGEsIGNwdSwgZ2FfbG9nX2ludHIpKTtcbi1cdFx0ZWxzZSBpZiAoY3B1IFx1MDAzZT0gMClcbi1cdFx0XHRXQVJOX09OX09OQ0UoYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUoZGF0YSwgY3B1LCBnYV9sb2dfaW50cikpO1xuK1x0XHRcdFdBUk5fT05fT05DRShhbWRfaW9tbXVfdXBkYXRlX2dhKGRhdGEsIGFwaWNpZCwgd2FrZXVwX2ludHIsIGlzX3J1bm5pbmcpKTtcbitcdFx0ZWxzZSBpZiAoaXNfcnVubmluZylcbitcdFx0XHRXQVJOX09OX09OQ0UoYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUoZGF0YSwgYXBpY2lkLCB3YWtldXBfaW50cixcbitcdFx0XHRcdFx0XHRcdFx0ICAgaXNfcnVubmluZykpO1xuIFx0XHRlbHNlXG4gXHRcdFx0V0FSTl9PTl9PTkNFKGFtZF9pb21tdV9kZWFjdGl2YXRlX2d1ZXN0X21vZGUoZGF0YSkpO1xuIFx0fVxuQEAgLTEwNjMsNyArMTE0OSw3IEBAIHN0YXRpYyB2b2lkIF9fYXZpY192Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1LFxuIFx0V0FSTl9PTl9PTkNFKGVudHJ5IFx1MDAyNiBBVklDX1BIWVNJQ0FMX0lEX0VOVFJZX0lTX1JVTk5JTkdfTUFTSyk7XG4gXG4gXHRlbnRyeSBcdTAwMjY9IH4oQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9IT1NUX1BIWVNJQ0FMX0lEX01BU0sgfFxuLVx0XHQgICBBVklDX1BIWVNJQ0FMX0lEX0VOVFJZX0dBX0xPR19JTlRSKTtcbitcdFx0ICAgQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9XQUtFVVBfSU5UUik7XG4gXHRlbnRyeSB8PSAoaF9waHlzaWNhbF9pZCBcdTAwMjYgQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9IT1NUX1BIWVNJQ0FMX0lEX01BU0spO1xuIFx0ZW50cnkgfD0gQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9JU19SVU5OSU5HX01BU0s7XG4gXG5AQCAtMTA4MCw3ICsxMTY2LDcgQEAgc3RhdGljIHZvaWQgX19hdmljX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUsXG4gXG4gXHRXUklURV9PTkNFKGt2bV9zdm0tXHUwMDNlYXZpY19waHlzaWNhbF9pZF90YWJsZVt2Y3B1LVx1MDAzZXZjcHVfaWRdLCBlbnRyeSk7XG4gXG4tXHRhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5KHZjcHUsIGhfcGh5c2ljYWxfaWQsIGFjdGlvbik7XG4rXHRhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5KHZjcHUsIGhfcGh5c2ljYWxfaWQsIGNwdSwgYWN0aW9uKTtcbiBcbiBcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnN2bS1cdTAwM2Vpcl9saXN0X2xvY2ssIGZsYWdzKTtcbiB9XG5AQCAtMTEyMyw5ICsxMjA5LDkgQEAgc3RhdGljIHZvaWQgX19hdmljX3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZW51bSBhdmljX3ZjcHVfYWN0aW9uIGFjdGlvbilcbiBcdCAqL1xuIFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnN2bS1cdTAwM2Vpcl9saXN0X2xvY2ssIGZsYWdzKTtcbiBcbi1cdGF2aWNfdXBkYXRlX2lvbW11X3ZjcHVfYWZmaW5pdHkodmNwdSwgLTEsIGFjdGlvbik7XG4rXHRhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5KHZjcHUsIC0xLCAtMSwgYWN0aW9uKTtcbiBcbi1cdFdBUk5fT05fT05DRShlbnRyeSBcdTAwMjYgQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9HQV9MT0dfSU5UUik7XG4rXHRXQVJOX09OX09OQ0UoZW50cnkgXHUwMDI2IEFWSUNfUEhZU0lDQUxfSURfRU5UUllfV0FLRVVQX0lOVFIpO1xuIFxuIFx0LypcbiBcdCAqIEtlZXAgdGhlIHByZXZpb3VzIEFQSUMgSUQgaW4gdGhlIGVudHJ5IHNvIHRoYXQgYSByb2d1ZSBkb29yYmVsbCBmcm9tXG5AQCAtMTEzNywxMSArMTIyMywxMSBAQCBzdGF0aWMgdm9pZCBfX2F2aWNfdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBlbnVtIGF2aWNfdmNwdV9hY3Rpb24gYWN0aW9uKVxuIFx0XHRXUklURV9PTkNFKGt2bV9zdm0tXHUwMDNlYXZpY19waHlzaWNhbF9pZF90YWJsZVt2Y3B1LVx1MDAzZXZjcHVfaWRdLCBlbnRyeSk7XG4gXG4gXHQvKlxuLVx0ICogTm90ZSEgIERvbid0IHNldCBBVklDX1BIWVNJQ0FMX0lEX0VOVFJZX0dBX0xPR19JTlRSIGluIHRoZSB0YWJsZSBhc1xuK1x0ICogTm90ZSEgIERvbid0IHNldCBBVklDX1BIWVNJQ0FMX0lEX0VOVFJZX1dBS0VVUF9JTlRSIGluIHRoZSB0YWJsZSBhc1xuIFx0ICogaXQncyBhIHN5bnRoZXRpYyBmbGFnIHRoYXQgdXN1cnBzIGFuIHVudXNlZCBzaG91bGQtYmUtemVybyBiaXQuXG4gXHQgKi9cbiBcdGlmIChhY3Rpb24gXHUwMDI2IEFWSUNfU1RBUlRfQkxPQ0tJTkcpXG4tXHRcdGVudHJ5IHw9IEFWSUNfUEhZU0lDQUxfSURfRU5UUllfR0FfTE9HX0lOVFI7XG4rXHRcdGVudHJ5IHw9IEFWSUNfUEhZU0lDQUxfSURfRU5UUllfV0FLRVVQX0lOVFI7XG4gXG4gXHRzdm0tXHUwMDNlYXZpY19waHlzaWNhbF9pZF9lbnRyeSA9IGVudHJ5O1xuIFxuQEAgLTExNzEsOSArMTI1Nyw5IEBAIHZvaWQgYXZpY192Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gXHRcdC8qXG4gXHRcdCAqIFRoZSB2Q1BVIHdhcyBwcmVlbXB0ZWQgd2hpbGUgYmxvY2tpbmcsIGVuc3VyZSBpdHMgSVJURXMgYXJlXG4tXHRcdCAqIGNvbmZpZ3VyZWQgdG8gZ2VuZXJhdGUgR0EgTG9nIEludGVycnVwdHMuXG4rXHRcdCAqIGNvbmZpZ3VyZWQgdG8gcmVxdWVzdCBob3N0IHdha2V1cCBub3RpZmljYXRpb24uXG4gXHRcdCAqL1xuLVx0XHRpZiAoIShXQVJOX09OX09OQ0UoIShlbnRyeSBcdTAwMjYgQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9HQV9MT0dfSU5UUikpKSlcbitcdFx0aWYgKCEoV0FSTl9PTl9PTkNFKCEoZW50cnkgXHUwMDI2IEFWSUNfUEhZU0lDQUxfSURfRU5UUllfV0FLRVVQX0lOVFIpKSkpXG4gXHRcdFx0cmV0dXJuO1xuIFx0fVxuIFxuQEAgLTEyOTYsNiArMTM4MiwyMSBAQCBzdGF0aWMgYm9vbCBfX2luaXQgYXZpY193YW50X2F2aWNfZW5hYmxlZCh2b2lkKVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGF2aWNfZ2FwcGlfd2FrZXVwX2hhbmRsZXIodm9pZClcbit7XG4rXHRpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpO1xuK1x0c3RydWN0IGxpc3RfaGVhZCAqdmNwdV93YWtldXBfbGlzdCA9IFx1MDAyNnBlcl9jcHUoZ2FwcGlfdmNwdV93YWtldXBfbGlzdCwgY3B1KTtcbitcdHJhd19zcGlubG9ja190ICpzcGlubG9jayA9IFx1MDAyNnBlcl9jcHUoZ2FwcGlfdmNwdV93YWtldXBfbGlzdF9sb2NrLCBjcHUpO1xuK1x0c3RydWN0IHZjcHVfc3ZtICpzdm07XG4rXG4rXHRyYXdfc3Bpbl9sb2NrKHNwaW5sb2NrKTtcbitcdGxpc3RfZm9yX2VhY2hfZW50cnkoc3ZtLCB2Y3B1X3dha2V1cF9saXN0LCBnYXBwaV92Y3B1X3dha2V1cF9saXN0KSB7XG4rXHRcdGlmIChrdm1fbGFwaWNfZmluZF9oaWdoZXN0X2lycihcdTAwMjZzdm0tXHUwMDNldmNwdSkgXHUwMDNlPSAwKVxuK1x0XHRcdGt2bV92Y3B1X3dha2VfdXAoXHUwMDI2c3ZtLVx1MDAzZXZjcHUpO1xuK1x0fVxuK1x0cmF3X3NwaW5fdW5sb2NrKHNwaW5sb2NrKTtcbit9XG4rXG4gLypcbiAgKiBOb3RlOlxuICAqIC0gVGhlIG1vZHVsZSBwYXJhbSBhdmljIGVuYWJsZSBib3RoIHhBUElDIGFuZCB4MkFQSUMgbW9kZS5cbkBAIC0xMzA0LDEyICsxNDA1LDE4IEBAIHN0YXRpYyBib29sIF9faW5pdCBhdmljX3dhbnRfYXZpY19lbmFibGVkKHZvaWQpXG4gICovXG4gYm9vbCBfX2luaXQgYXZpY19oYXJkd2FyZV9zZXR1cCh2b2lkKVxuIHtcbitcdGludCBjcHU7XG4gXHRhdmljID0gYXZpY193YW50X2F2aWNfZW5hYmxlZCgpO1xuIFx0aWYgKCFhdmljKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRwcl9pbmZvKFwiQVZJQyBlbmFibGVkXFxuXCIpO1xuIFxuK1x0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkge1xuK1x0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZwZXJfY3B1KGdhcHBpX3ZjcHVfd2FrZXVwX2xpc3QsIGNwdSkpO1xuK1x0XHRyYXdfc3Bpbl9sb2NrX2luaXQoXHUwMDI2cGVyX2NwdShnYXBwaV92Y3B1X3dha2V1cF9saXN0X2xvY2ssIGNwdSkpO1xuK1x0fVxuK1xuIFx0LyogQVZJQyBpcyBhIHByZXJlcXVpc2l0ZSBmb3IgeDJBVklDLiAqL1xuIFx0eDJhdmljX2VuYWJsZWQgPSBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfWDJBVklDKTtcbiBcdGlmICh4MmF2aWNfZW5hYmxlZCkge1xuQEAgLTEzMzMsMTIgKzE0NDAsMTYgQEAgYm9vbCBfX2luaXQgYXZpY19oYXJkd2FyZV9zZXR1cCh2b2lkKVxuIFx0XHRlbmFibGVfaXBpdiA9IGZhbHNlO1xuIFxuIFx0YW1kX2lvbW11X3JlZ2lzdGVyX2dhX2xvZ19ub3RpZmllcihcdTAwMjZhdmljX2dhX2xvZ19ub3RpZmllcik7XG4rXHRrdm1fc2V0X3Bvc3RlZF9pbnRyX3dha2V1cF9oYW5kbGVyKFx1MDAyNmF2aWNfZ2FwcGlfd2FrZXVwX2hhbmRsZXIpO1xuIFxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuIHZvaWQgYXZpY19oYXJkd2FyZV91bnNldHVwKHZvaWQpXG4ge1xuLVx0aWYgKGF2aWMpXG4tXHRcdGFtZF9pb21tdV9yZWdpc3Rlcl9nYV9sb2dfbm90aWZpZXIoTlVMTCk7XG4rXHRpZiAoIWF2aWMpXG4rXHRcdHJldHVybjtcbitcbitcdGFtZF9pb21tdV9yZWdpc3Rlcl9nYV9sb2dfbm90aWZpZXIoTlVMTCk7XG4rXHRrdm1fc2V0X3Bvc3RlZF9pbnRyX3dha2V1cF9oYW5kbGVyKE5VTEwpO1xuIH1cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xuaW5kZXggZTAyYTM4ZGE1Mjk2ZTMuLmI2ODcxMzNmODUyOGJhIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xuKysrIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xuQEAgLTEzNTYsNiArMTM1Niw4IEBAIHN0YXRpYyB2b2lkIHN2bV92Y3B1X2ZyZWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIFx0V0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KFx1MDAyNnN2bS1cdTAwM2Vpcl9saXN0KSk7XG4gXG4rXHRhdmljX2Rlc3Ryb3lfdmNwdShzdm0pO1xuK1xuIFx0c3ZtX2xlYXZlX25lc3RlZCh2Y3B1KTtcbiBcdHN2bV9mcmVlX25lc3RlZChzdm0pO1xuIFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmggYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oXG5pbmRleCA1MTM3NDE2YmU1OTNkNy4uNDdkNWJiNWQ3MTAzZGEgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oXG4rKysgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oXG5AQCAtMzYyLDYgKzM2MiwxMCBAQCBzdHJ1Y3QgdmNwdV9zdm0ge1xuIFxuIFx0LyogR3Vlc3QgR0lGIHZhbHVlLCB1c2VkIHdoZW4gdkdJRiBpcyBub3QgZW5hYmxlZCAqL1xuIFx0Ym9vbCBndWVzdF9naWY7XG4rXG4rXHQvKiBHQVBQSSByZWxhdGVkIGZpZWxkcyAqL1xuK1x0c3RydWN0IGxpc3RfaGVhZCBnYXBwaV92Y3B1X3dha2V1cF9saXN0O1xuK1x0aW50IGdhcHBpX2NwdTtcbiB9O1xuIFxuIHN0cnVjdCBzdm1fY3B1X2RhdGEge1xuQEAgLTkwOSw2ICs5MTMsNyBAQCB2b2lkIGF2aWNfaW5pdF92bWNiKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBzdHJ1Y3Qgdm1jYiAqdm1jYik7XG4gaW50IGF2aWNfaW5jb21wbGV0ZV9pcGlfaW50ZXJjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gaW50IGF2aWNfdW5hY2NlbGVyYXRlZF9hY2Nlc3NfaW50ZXJjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gaW50IGF2aWNfaW5pdF92Y3B1KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKTtcbit2b2lkIGF2aWNfZGVzdHJveV92Y3B1KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKTtcbiB2b2lkIGF2aWNfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSk7XG4gdm9pZCBhdmljX3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gdm9pZCBhdmljX2FwaWN2X3Bvc3Rfc3RhdGVfcmVzdG9yZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW9tbXUvYW1kL2FtZF9pb21tdS5oIGIvZHJpdmVycy9pb21tdS9hbWQvYW1kX2lvbW11LmhcbmluZGV4IDgzNGQ4ZmFiZmJhMzg3Li4wNDQxNzljYWIxMmU0YiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvaW9tbXUvYW1kL2FtZF9pb21tdS5oXG4rKysgYi9kcml2ZXJzL2lvbW11L2FtZC9hbWRfaW9tbXUuaFxuQEAgLTQxLDYgKzQxLDcgQEAgaW50IGFtZF9pb21tdV9lbmFibGUodm9pZCk7XG4gdm9pZCBhbWRfaW9tbXVfZGlzYWJsZSh2b2lkKTtcbiBpbnQgYW1kX2lvbW11X3JlZW5hYmxlKGludCBtb2RlKTtcbiBpbnQgYW1kX2lvbW11X2VuYWJsZV9mYXVsdGluZyh1bnNpZ25lZCBpbnQgY3B1KTtcbitleHRlcm4gYm9vbCBhbWRfaW9tbXVfZ2FwcGk7XG4gZXh0ZXJuIGludCBhbWRfaW9tbXVfZ3Vlc3RfaXI7XG4gZXh0ZXJuIGVudW0gcHJvdGVjdGlvbl9kb21haW5fbW9kZSBhbWRfaW9tbXVfcGd0YWJsZTtcbiBleHRlcm4gaW50IGFtZF9pb21tdV9ncHRfbGV2ZWw7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pb21tdS9hbWQvYW1kX2lvbW11X3R5cGVzLmggYi9kcml2ZXJzL2lvbW11L2FtZC9hbWRfaW9tbXVfdHlwZXMuaFxuaW5kZXggZjlmNzE4MDg3ODkzMDMuLmRlMGIyMzMwNjk0NGI4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9pb21tdS9hbWQvYW1kX2lvbW11X3R5cGVzLmhcbisrKyBiL2RyaXZlcnMvaW9tbXUvYW1kL2FtZF9pb21tdV90eXBlcy5oXG5AQCAtOTQsNiArOTQsNyBAQFxuICNkZWZpbmUgRkVBVFVSRV9YMkFQSUNcdFx0QklUX1VMTCgyKVxuICNkZWZpbmUgRkVBVFVSRV9OWFx0XHRCSVRfVUxMKDMpXG4gI2RlZmluZSBGRUFUVVJFX0dUXHRcdEJJVF9VTEwoNClcbisjZGVmaW5lIEZFQVRVUkVfR0FQUElcdFx0QklUX1VMTCg1KVxuICNkZWZpbmUgRkVBVFVSRV9JQVx0XHRCSVRfVUxMKDYpXG4gI2RlZmluZSBGRUFUVVJFX0dBXHRcdEJJVF9VTEwoNylcbiAjZGVmaW5lIEZFQVRVUkVfSEVcdFx0QklUX1VMTCg4KVxuQEAgLTExMyw2ICsxMTQsNyBAQFxuIC8qIEV4dGVuZGVkIEZlYXR1cmUgMiBCaXRzICovXG4gI2RlZmluZSBGRUFUVVJFX1NFVlNOUElPX1NVUFx0QklUX1VMTCgxKVxuICNkZWZpbmUgRkVBVFVSRV9HQ1IzVFJQTU9ERVx0QklUX1VMTCgzKVxuKyNkZWZpbmUgRkVBVFVSRV9HQVBQSURJU1NVUFx0QklUX1VMTCg0KVxuICNkZWZpbmUgRkVBVFVSRV9TTlBBVklDU1VQXHRHRU5NQVNLX1VMTCg3LCA1KVxuICNkZWZpbmUgRkVBVFVSRV9TTlBBVklDU1VQX0dBTSh4KSBcXFxuIFx0KEZJRUxEX0dFVChGRUFUVVJFX1NOUEFWSUNTVVAsIHgpID09IDB4MSlcbkBAIC0xOTAsNiArMTkyLDcgQEBcbiAjZGVmaW5lIENPTlRST0xfRVBIX0VOXHRcdDQ1XG4gI2RlZmluZSBDT05UUk9MX1hUX0VOXHRcdDUwXG4gI2RlZmluZSBDT05UUk9MX0lOVENBUFhUX0VOXHQ1MVxuKyNkZWZpbmUgQ09OVFJPTF9HQVBQSV9FTlx0NTVcbiAjZGVmaW5lIENPTlRST0xfR0NSM1RSUE1PREVcdDU4XG4gI2RlZmluZSBDT05UUk9MX0lSVENBQ0hFRElTXHQ1OVxuICNkZWZpbmUgQ09OVFJPTF9TTlBBVklDX0VOXHQ2MVxuQEAgLTEwMDQsNyArMTAwNyw4IEBAIHVuaW9uIGlydGVfZ2FfbG8ge1xuIFx0XHQgICAgbm9fZmF1bHRcdDogMSxcbiBcdFx0ICAgIC8qIC0tLS0tLSAqL1xuIFx0XHQgICAgZ2FfbG9nX2ludHJcdDogMSxcbi1cdFx0ICAgIHJzdmQxXHQ6IDMsXG4rXHRcdCAgICByc3ZkMVx0OiAyLFxuK1x0XHQgICAgZ2FwcGlfZGlzXHQ6IDEsXG4gXHRcdCAgICBpc19ydW5cdDogMSxcbiBcdFx0ICAgIC8qIC0tLS0tLSAqL1xuIFx0XHQgICAgZ3Vlc3RfbW9kZVx0OiAxLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW9tbXUvYW1kL2luaXQuYyBiL2RyaXZlcnMvaW9tbXUvYW1kL2luaXQuY1xuaW5kZXggM2JkYjM4MGQyM2U5YTkuLjdkMmIxYzI0ZjZlY2NiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jXG4rKysgYi9kcml2ZXJzL2lvbW11L2FtZC9pbml0LmNcbkBAIC0xNjAsNiArMTYwLDkgQEAgdTggYW1kX2lvbW11X2hwdF9sZXZlbDtcbiAvKiBHdWVzdCBwYWdlIHRhYmxlIGxldmVsICovXG4gaW50IGFtZF9pb21tdV9ncHRfbGV2ZWwgPSBQQUdFX01PREVfNF9MRVZFTDtcbiBcbitib29sIGFtZF9pb21tdV9nYXBwaTtcbitFWFBPUlRfU1lNQk9MKGFtZF9pb21tdV9nYXBwaSk7XG4rXG4gaW50IGFtZF9pb21tdV9ndWVzdF9pciA9IEFNRF9JT01NVV9HVUVTVF9JUl9WQVBJQztcbiBzdGF0aWMgaW50IGFtZF9pb21tdV94dF9tb2RlID0gSVJRX1JFTUFQX1hBUElDX01PREU7XG4gXG5AQCAtNDYyLDYgKzQ2NSw5IEBAIHN0YXRpYyB2b2lkIGlvbW11X2Rpc2FibGUoc3RydWN0IGFtZF9pb21tdSAqaW9tbXUpXG4gXHRpb21tdV9mZWF0dXJlX2Rpc2FibGUoaW9tbXUsIENPTlRST0xfR0FMT0dfRU4pO1xuIFx0aW9tbXVfZmVhdHVyZV9kaXNhYmxlKGlvbW11LCBDT05UUk9MX0dBSU5UX0VOKTtcbiBcbitcdC8qIERpc2FibGUgSU9NTVUgR0FQUEkgKi9cbitcdGlvbW11X2ZlYXR1cmVfZGlzYWJsZShpb21tdSwgQ09OVFJPTF9HQVBQSV9FTik7XG4rXG4gXHQvKiBEaXNhYmxlIElPTU1VIFBQUiBsb2dnaW5nICovXG4gXHRpb21tdV9mZWF0dXJlX2Rpc2FibGUoaW9tbXUsIENPTlRST0xfUFBSTE9HX0VOKTtcbiBcdGlvbW11X2ZlYXR1cmVfZGlzYWJsZShpb21tdSwgQ09OVFJPTF9QUFJJTlRfRU4pO1xuQEAgLTI5OTYsNiArMzAwMiwxMyBAQCBzdGF0aWMgdm9pZCBlbmFibGVfaW9tbXVzX3ZhcGljKHZvaWQpXG4gXHRzdHJ1Y3QgYW1kX2lvbW11ICppb21tdTtcbiBcbiBcdGZvcl9lYWNoX2lvbW11KGlvbW11KSB7XG4rXHRcdC8qXG4rXHRcdCAqIERpc2FibGUgR0FQUEksIGRvIG5vdCBjaGVjayBhbWRfaW9tbXVfZ2FwcGkgYXMgaXQgbWF5IGJlXG4rXHRcdCAqIGZhbHNlIGluIG5ldyBrZXhlYyBrZXJuZWwgZXZlbiB0aG91Z2ggcHJldmlvdXMga2VybmVsIGhhc1xuK1x0XHQgKiBlbmFibGVkIGl0LlxuK1x0XHQgKi9cbitcdFx0aW9tbXVfZmVhdHVyZV9kaXNhYmxlKGlvbW11LCBDT05UUk9MX0dBUFBJX0VOKTtcbitcbiBcdFx0LypcbiBcdFx0ICogRGlzYWJsZSBHQUxvZyBpZiBhbHJlYWR5IHJ1bm5pbmcuIEl0IGNvdWxkIGhhdmUgYmVlbiBlbmFibGVkXG4gXHRcdCAqIGluIHRoZSBwcmV2aW91cyBib290IGJlZm9yZSBrZHVtcC5cbkBAIC0zMDM1LDEwICszMDQ4LDE5IEBAIHN0YXRpYyB2b2lkIGVuYWJsZV9pb21tdXNfdmFwaWModm9pZClcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuK1x0aWYgKGFtZF9pb21tdV9nYXBwaSBcdTAwMjZcdTAwMjZcbitcdCAgICAhKGNoZWNrX2ZlYXR1cmUoRkVBVFVSRV9HQVBQSSkgXHUwMDI2XHUwMDI2XG4rXHQgICAgICBBTURfSU9NTVVfR1VFU1RfSVJfVkFQSUMoYW1kX2lvbW11X2d1ZXN0X2lyKSkpIHtcbitcdFx0cHJfd2FybihcIkdBUFBJIGlzIG5vdCBzdXBwb3J0ZWQuXFxuXCIpO1xuK1x0XHRhbWRfaW9tbXVfZ2FwcGkgPSBmYWxzZTtcbitcdH1cbitcbiBcdC8qIEVuYWJsaW5nIEdBTSBhbmQgU05QQVZJQyBzdXBwb3J0ICovXG4gXHRmb3JfZWFjaF9pb21tdShpb21tdSkge1xuLVx0XHRpZiAoaW9tbXVfaW5pdF9nYV9sb2coaW9tbXUpIHx8XG4tXHRcdCAgICBpb21tdV9nYV9sb2dfZW5hYmxlKGlvbW11KSlcbitcdFx0aWYgKGFtZF9pb21tdV9nYXBwaSlcbitcdFx0XHRpb21tdV9mZWF0dXJlX2VuYWJsZShpb21tdSwgQ09OVFJPTF9HQVBQSV9FTik7XG4rXHRcdGVsc2UgaWYgKGlvbW11X2luaXRfZ2FfbG9nKGlvbW11KSB8fFxuK1x0XHRcdCBpb21tdV9nYV9sb2dfZW5hYmxlKGlvbW11KSlcbiBcdFx0XHRyZXR1cm47XG4gXG4gXHRcdGlvbW11X2ZlYXR1cmVfZW5hYmxlKGlvbW11LCBDT05UUk9MX0dBTV9FTik7XG5AQCAtMzA0Nyw3ICszMDY5LDggQEAgc3RhdGljIHZvaWQgZW5hYmxlX2lvbW11c192YXBpYyh2b2lkKVxuIFx0fVxuIFxuIFx0YW1kX2lvbW11X2lycV9vcHMuY2FwYWJpbGl0eSB8PSAoMSBcdTAwM2NcdTAwM2MgSVJRX1BPU1RJTkdfQ0FQKTtcbi1cdHByX2luZm8oXCJWaXJ0dWFsIEFQSUMgZW5hYmxlZFxcblwiKTtcbitcdHByX2luZm8oXCJWaXJ0dWFsIEFQSUMgZW5hYmxlZCB3aXRoICVzXFxuXCIsXG4rXHRcdGFtZF9pb21tdV9nYXBwaSA/IFwiR0FQUElcIiA6IFwiR0FMT0dcIik7XG4gI2VuZGlmXG4gfVxuIFxuQEAgLTM3MzgsNiArMzc2MSw4IEBAIHN0YXRpYyBpbnQgX19pbml0IHBhcnNlX2FtZF9pb21tdV9vcHRpb25zKGNoYXIgKnN0cilcbiBcdFx0fSBlbHNlIGlmIChzdHJuY21wKHN0ciwgXCJ2Ml9wZ3NpemVzX29ubHlcIiwgMTUpID09IDApIHtcbiBcdFx0XHRwcl9pbmZvKFwiUmVzdHJpY3RpbmcgVjEgcGFnZS1zaXplcyB0byA0S2lCLzJNaUIvMUdpQlwiKTtcbiBcdFx0XHRhbWRfaW9tbXVfcGdzaXplX2JpdG1hcCA9IEFNRF9JT01NVV9QR1NJWkVTX1YyO1xuK1x0XHR9IGVsc2UgaWYgKHN0cm5jbXAoc3RyLCBcImdhcHBpXCIsIDUpID09IDApIHtcbitcdFx0XHRhbWRfaW9tbXVfZ2FwcGkgPSB0cnVlO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdHByX25vdGljZShcIlVua25vd24gb3B0aW9uIC0gJyVzJ1xcblwiLCBzdHIpO1xuIFx0XHR9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuYyBiL2RyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmNcbmluZGV4IDU3ZGM4ZmFiYzdkOWI5Li43ZWViZjQ3NDVhNjc4MiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmNcbisrKyBiL2RyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmNcbkBAIC0zOTU5LDE5ICszOTU5LDI5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaXJxX2RvbWFpbl9vcHMgYW1kX2lyX2RvbWFpbl9vcHMgPSB7XG4gXHQuZGVhY3RpdmF0ZSA9IGlycV9yZW1hcHBpbmdfZGVhY3RpdmF0ZSxcbiB9O1xuIFxuLXN0YXRpYyB2b2lkIF9fYW1kX2lvbW11X3VwZGF0ZV9nYShzdHJ1Y3QgaXJ0ZV9nYSAqZW50cnksIGludCBjcHUsXG4tXHRcdFx0XHQgIGJvb2wgZ2FfbG9nX2ludHIpXG4rc3RhdGljIHZvaWQgX19hbWRfaW9tbXVfdXBkYXRlX2dhKHN0cnVjdCBpcnRlX2dhICplbnRyeSwgaW50IGFwaWNpZCxcbitcdFx0XHRcdCAgYm9vbCB3YWtldXBfaW50ciwgYm9vbCBpc19ydW5uaW5nKVxuIHtcbi1cdGlmIChjcHUgXHUwMDNlPSAwKSB7XG4rXHRpZiAoaXNfcnVubmluZykge1xuIFx0XHRlbnRyeS1cdTAwM2Vsby5maWVsZHNfdmFwaWMuZGVzdGluYXRpb24gPVxuLVx0XHRcdFx0XHRBUElDSURfVE9fSVJURV9ERVNUX0xPKGNwdSk7XG4rXHRcdFx0XHRcdEFQSUNJRF9UT19JUlRFX0RFU1RfTE8oYXBpY2lkKTtcbiBcdFx0ZW50cnktXHUwMDNlaGkuZmllbGRzLmRlc3RpbmF0aW9uID1cbi1cdFx0XHRcdFx0QVBJQ0lEX1RPX0lSVEVfREVTVF9ISShjcHUpO1xuK1x0XHRcdFx0XHRBUElDSURfVE9fSVJURV9ERVNUX0hJKGFwaWNpZCk7XG4gXHRcdGVudHJ5LVx1MDAzZWxvLmZpZWxkc192YXBpYy5pc19ydW4gPSB0cnVlO1xuIFx0XHRlbnRyeS1cdTAwM2Vsby5maWVsZHNfdmFwaWMuZ2FfbG9nX2ludHIgPSBmYWxzZTtcbiBcdH0gZWxzZSB7XG4tXHRcdGVudHJ5LVx1MDAzZWxvLmZpZWxkc192YXBpYy5pc19ydW4gPSBmYWxzZTtcbi1cdFx0ZW50cnktXHUwMDNlbG8uZmllbGRzX3ZhcGljLmdhX2xvZ19pbnRyID0gZ2FfbG9nX2ludHI7XG4rXHRcdGlmIChhbWRfaW9tbXVfZ2FwcGkpIHtcbitcdFx0XHRlbnRyeS1cdTAwM2Vsby5maWVsZHNfdmFwaWMuZ2FwcGlfZGlzID0gIXdha2V1cF9pbnRyIFx1MDAyNlx1MDAyNlxuK1x0XHRcdFx0XHRcdGNoZWNrX2ZlYXR1cmUyKEZFQVRVUkVfR0FQUElESVNTVVApO1xuK1x0XHRcdGVudHJ5LVx1MDAzZWxvLmZpZWxkc192YXBpYy5pc19ydW4gPSBmYWxzZTtcbitcdFx0XHRlbnRyeS1cdTAwM2Vsby5maWVsZHNfdmFwaWMuZGVzdGluYXRpb24gPVxuK1x0XHRcdFx0XHRcdEFQSUNJRF9UT19JUlRFX0RFU1RfTE8oYXBpY2lkKTtcbitcdFx0XHRlbnRyeS1cdTAwM2VoaS5maWVsZHMuZGVzdGluYXRpb24gPVxuK1x0XHRcdFx0XHRcdEFQSUNJRF9UT19JUlRFX0RFU1RfSEkoYXBpY2lkKTtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRlbnRyeS1cdTAwM2Vsby5maWVsZHNfdmFwaWMuaXNfcnVuID0gZmFsc2U7XG4rXHRcdFx0ZW50cnktXHUwMDNlbG8uZmllbGRzX3ZhcGljLmdhX2xvZ19pbnRyID0gd2FrZXVwX2ludHI7XG4rXHRcdH1cbiBcdH1cbiB9XG4gXG5AQCAtMzk3OSwyMCArMzk4OSwyMCBAQCBzdGF0aWMgdm9pZCBfX2FtZF9pb21tdV91cGRhdGVfZ2Eoc3RydWN0IGlydGVfZ2EgKmVudHJ5LCBpbnQgY3B1LFxuICAqIFVwZGF0ZSB0aGUgcENQVSBpbmZvcm1hdGlvbiBmb3IgYW4gSVJURSB0aGF0IGlzIGNvbmZpZ3VyZWQgdG8gcG9zdCBJUlFzIHRvXG4gICogYSB2Q1BVLCB3aXRob3V0IGlzc3VpbmcgYW4gSU9NTVUgaW52YWxpZGF0aW9uIGZvciB0aGUgSVJURS5cbiAgKlxuLSAqIElmIHRoZSB2Q1BVIGlzIGFzc29jaWF0ZWQgd2l0aCBhIHBDUFUgKEBjcHUgXHUwMDNlPSAwKSwgY29uZmlndXJlIHRoZSBEZXN0aW5hdGlvblxuLSAqIHdpdGggdGhlIHBDUFUncyBBUElDIElELCBzZXQgSXNSdW4sIGFuZCBjbGVhciBHQUxvZ0ludHIuICBJZiB0aGUgdkNQVSBpc24ndFxuLSAqIGFzc29jaWF0ZWQgd2l0aCBhIHBDUFUgKEBjcHUgXHUwMDNjIDApLCBjbGVhciBJc1J1biBhbmQgc2V0L2NsZWFyIEdBTG9nSW50ciBiYXNlZFxuLSAqIG9uIGlucHV0IGZyb20gdGhlIGNhbGxlciAoZS5nLiBLVk0gb25seSByZXF1ZXN0cyBHQUxvZ0ludHIgd2hlbiB0aGUgdkNQVSBpc1xuLSAqIGJsb2NraW5nIGFuZCByZXF1aXJlcyBhIG5vdGlmaWNhdGlvbiB3YWtlIGV2ZW50KS4gIEkuZS4gdHJlYXQgdkNQVXMgdGhhdCBhcmVcbi0gKiBhc3NvY2lhdGVkIHdpdGggYSBwQ1BVIGFzIHJ1bm5pbmcuICBUaGlzIEFQSSBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIHdoZW4gYVxuLSAqIHZDUFUgaXMgc2NoZWR1bGVkIGluL291dCAob3Igc3RvcHMgcnVubmluZyBmb3IgYW55IHJlYXNvbiksIHRvIGRvIGEgZmFzdFxuLSAqIHVwZGF0ZSBvZiBJc1J1biwgR0FMb2dJbnRyLCBhbmQgKGNvbmRpdGlvbmFsbHkpIERlc3RpbmF0aW9uLlxuKyAqIElmIHRoZSB2Q1BVIGlzIHNjaGVkdWxlZCB0byBydW4gb24gcENQVSAoQGlzX3J1bm5pbmcgPSAxKSwgY29uZmlndXJlIHRoZVxuKyAqIERlc3RpbmF0aW9uIHdpdGggdGhlIHBDUFUncyBBUElDIElELCBzZXQgSXNSdW4sIGFuZCBjbGVhciBHQUxvZ0ludHIuIElmIHRoZVxuKyAqIHZDUFUgaXMgc2NoZWR1bGVkIG91dCAoQGlzX3J1bm5pbmcgPSAwKSwgY2xlYXIgSXNSdW4gYW5kIHNldC9jbGVhciBHQUxvZ0ludHJcbisgKiBhbmQgR0FQUElEaXMgYmFzZWQgb24gaW5wdXQgZnJvbSB0aGUgY2FsbGVyIChlLmcuIEtWTSBvbmx5IHJlcXVlc3RzXG4rICogd2FrZXVwX2ludHIgd2hlbiB0aGUgdkNQVSBpcyBibG9ja2luZyBhbmQgcmVxdWlyZXMgYSBub3RpZmljYXRpb24gd2FrZVxuKyAqIGV2ZW50KS4gVGhpcyBBUEkgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCB3aGVuIGEgdkNQVSBpcyBzY2hlZHVsZWQgaW4vb3V0IChvclxuKyAqIHN0b3BzIHJ1bm5pbmcgZm9yIGFueSByZWFzb24pLCB0byBkbyBhIGZhc3QgdXBkYXRlIG9mIElzUnVuLCBHQUxvZ0ludHIsXG4rICogR0FQUElEaXMgYW5kIChjb25kaXRpb25hbGx5KSBEZXN0aW5hdGlvbi5cbiAgKlxuLSAqIFBlciB0aGUgSU9NTVUgc3BlYywgdGhlIERlc3RpbmF0aW9uLCBJc1J1biwgYW5kIEdBVGFnIGZpZWxkcyBhcmUgbm90IGNhY2hlZFxuLSAqIGFuZCB0aHVzIGRvbid0IHJlcXVpcmUgYW4gaW52YWxpZGF0aW9uIHRvIGVuc3VyZSB0aGUgSU9NTVUgY29uc3VtZXMgZnJlc2hcbi0gKiBpbmZvcm1hdGlvbi5cbisgKiBQZXIgdGhlIElPTU1VIHNwZWMsIHRoZSBEZXN0aW5hdGlvbiwgSXNSdW4sIEdBVGFnIGFuZCBHQVBQSURpcyBmaWVsZHMgYXJlXG4rICogbm90IGNhY2hlZCBhbmQgdGh1cyBkb24ndCByZXF1aXJlIGFuIGludmFsaWRhdGlvbiB0byBlbnN1cmUgdGhlIElPTU1VXG4rICogY29uc3VtZXMgZnJlc2ggaW5mb3JtYXRpb24uXG4gICovXG4taW50IGFtZF9pb21tdV91cGRhdGVfZ2Eodm9pZCAqZGF0YSwgaW50IGNwdSwgYm9vbCBnYV9sb2dfaW50cilcbitpbnQgYW1kX2lvbW11X3VwZGF0ZV9nYSh2b2lkICpkYXRhLCBpbnQgYXBpY2lkLCBib29sIHdha2V1cF9pbnRyLCBib29sIGlzX3J1bm5pbmcpXG4ge1xuIFx0c3RydWN0IGFtZF9pcl9kYXRhICppcl9kYXRhID0gKHN0cnVjdCBhbWRfaXJfZGF0YSAqKWRhdGE7XG4gXHRzdHJ1Y3QgaXJ0ZV9nYSAqZW50cnkgPSAoc3RydWN0IGlydGVfZ2EgKikgaXJfZGF0YS1cdTAwM2VlbnRyeTtcbkBAIC00MDA2LDE0ICs0MDE2LDE0IEBAIGludCBhbWRfaW9tbXVfdXBkYXRlX2dhKHZvaWQgKmRhdGEsIGludCBjcHUsIGJvb2wgZ2FfbG9nX2ludHIpXG4gXHRpZiAoIWlyX2RhdGEtXHUwMDNlaW9tbXUpXG4gXHRcdHJldHVybiAtRU5PREVWO1xuIFxuLVx0X19hbWRfaW9tbXVfdXBkYXRlX2dhKGVudHJ5LCBjcHUsIGdhX2xvZ19pbnRyKTtcbitcdF9fYW1kX2lvbW11X3VwZGF0ZV9nYShlbnRyeSwgYXBpY2lkLCB3YWtldXBfaW50ciwgaXNfcnVubmluZyk7XG4gXG4gXHRyZXR1cm4gX19tb2RpZnlfaXJ0ZV9nYShpcl9kYXRhLVx1MDAzZWlvbW11LCBpcl9kYXRhLVx1MDAzZWlycV8yX2lydGUuZGV2aWQsXG4gXHRcdFx0XHRpcl9kYXRhLVx1MDAzZWlycV8yX2lydGUuaW5kZXgsIGVudHJ5KTtcbiB9XG4gRVhQT1JUX1NZTUJPTChhbWRfaW9tbXVfdXBkYXRlX2dhKTtcbiBcbi1pbnQgYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUodm9pZCAqZGF0YSwgaW50IGNwdSwgYm9vbCBnYV9sb2dfaW50cilcbitpbnQgYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUodm9pZCAqZGF0YSwgaW50IGFwaWNpZCwgYm9vbCB3YWtldXBfaW50ciwgYm9vbCBpc19ydW5uaW5nKVxuIHtcbiBcdHN0cnVjdCBhbWRfaXJfZGF0YSAqaXJfZGF0YSA9IChzdHJ1Y3QgYW1kX2lyX2RhdGEgKilkYXRhO1xuIFx0c3RydWN0IGlydGVfZ2EgKmVudHJ5ID0gKHN0cnVjdCBpcnRlX2dhICopIGlyX2RhdGEtXHUwMDNlZW50cnk7XG5AQCAtNDAzNiw3ICs0MDQ2LDcgQEAgaW50IGFtZF9pb21tdV9hY3RpdmF0ZV9ndWVzdF9tb2RlKHZvaWQgKmRhdGEsIGludCBjcHUsIGJvb2wgZ2FfbG9nX2ludHIpXG4gXHRlbnRyeS1cdTAwM2VoaS5maWVsZHMudmVjdG9yICAgICAgICAgICAgPSBpcl9kYXRhLVx1MDAzZWdhX3ZlY3RvcjtcbiBcdGVudHJ5LVx1MDAzZWxvLmZpZWxkc192YXBpYy5nYV90YWcgICAgICA9IGlyX2RhdGEtXHUwMDNlZ2FfdGFnO1xuIFxuLVx0X19hbWRfaW9tbXVfdXBkYXRlX2dhKGVudHJ5LCBjcHUsIGdhX2xvZ19pbnRyKTtcbitcdF9fYW1kX2lvbW11X3VwZGF0ZV9nYShlbnRyeSwgYXBpY2lkLCB3YWtldXBfaW50ciwgaXNfcnVubmluZyk7XG4gXG4gXHRyZXR1cm4gbW9kaWZ5X2lydGVfZ2EoaXJfZGF0YS1cdTAwM2Vpb21tdSwgaXJfZGF0YS1cdTAwM2VpcnFfMl9pcnRlLmRldmlkLFxuIFx0XHRcdCAgICAgIGlyX2RhdGEtXHUwMDNlaXJxXzJfaXJ0ZS5pbmRleCwgZW50cnkpO1xuQEAgLTQxMDcsOCArNDExNyw5IEBAIHN0YXRpYyBpbnQgYW1kX2lyX3NldF92Y3B1X2FmZmluaXR5KHN0cnVjdCBpcnFfZGF0YSAqZGF0YSwgdm9pZCAqaW5mbylcbiBcdFx0aXJfZGF0YS1cdTAwM2VnYV92ZWN0b3IgPSBwaV9kYXRhLVx1MDAzZXZlY3RvcjtcbiBcdFx0aXJfZGF0YS1cdTAwM2VnYV90YWcgPSBwaV9kYXRhLVx1MDAzZWdhX3RhZztcbiBcdFx0aWYgKHBpX2RhdGEtXHUwMDNlaXNfZ3Vlc3RfbW9kZSlcbi1cdFx0XHRyZXQgPSBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZShpcl9kYXRhLCBwaV9kYXRhLVx1MDAzZWNwdSxcbi1cdFx0XHRcdFx0XHRcdCAgICBwaV9kYXRhLVx1MDAzZWdhX2xvZ19pbnRyKTtcbitcdFx0XHRyZXQgPSBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZShpcl9kYXRhLCBwaV9kYXRhLVx1MDAzZWFwaWNpZCxcbitcdFx0XHRcdFx0XHRcdCAgICBwaV9kYXRhLVx1MDAzZXdha2V1cF9pbnRyLFxuK1x0XHRcdFx0XHRcdFx0ICAgIHBpX2RhdGEtXHUwMDNlaXNfcnVubmluZyk7XG4gXHRcdGVsc2VcbiBcdFx0XHRyZXQgPSBhbWRfaW9tbXVfZGVhY3RpdmF0ZV9ndWVzdF9tb2RlKGlyX2RhdGEpO1xuIFx0fSBlbHNlIHtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2FtZC1pb21tdS5oIGIvaW5jbHVkZS9saW51eC9hbWQtaW9tbXUuaFxuaW5kZXggZWRjZWU5ZjUzMzVhNmYuLjcyOWQ4MmM0ZTA5ZTI3IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9hbWQtaW9tbXUuaFxuKysrIGIvaW5jbHVkZS9saW51eC9hbWQtaW9tbXUuaFxuQEAgLTMwLDggKzMwLDEwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBhbWRfaW9tbXVfZGV0ZWN0KHZvaWQpIHsgfVxuIC8qIElPTU1VIEFWSUMgRnVuY3Rpb24gKi9cbiBleHRlcm4gaW50IGFtZF9pb21tdV9yZWdpc3Rlcl9nYV9sb2dfbm90aWZpZXIoaW50ICgqbm90aWZpZXIpKHUzMikpO1xuIFxuLWV4dGVybiBpbnQgYW1kX2lvbW11X3VwZGF0ZV9nYSh2b2lkICpkYXRhLCBpbnQgY3B1LCBib29sIGdhX2xvZ19pbnRyKTtcbi1leHRlcm4gaW50IGFtZF9pb21tdV9hY3RpdmF0ZV9ndWVzdF9tb2RlKHZvaWQgKmRhdGEsIGludCBjcHUsIGJvb2wgZ2FfbG9nX2ludHIpO1xuK2V4dGVybiBpbnQgYW1kX2lvbW11X3VwZGF0ZV9nYSh2b2lkICpkYXRhLCBpbnQgYXBpY2lkLCBib29sIHdha2V1cF9pbnRyLFxuK1x0XHRcdCAgICAgICBib29sIGlzX3J1bm5pbmcpO1xuK2V4dGVybiBpbnQgYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUodm9pZCAqZGF0YSwgaW50IGFwaWNpZCwgYm9vbCB3YWtldXBfaW50cixcbitcdFx0XHRcdFx0IGJvb2wgaXNfcnVubmluZyk7XG4gZXh0ZXJuIGludCBhbWRfaW9tbXVfZGVhY3RpdmF0ZV9ndWVzdF9tb2RlKHZvaWQgKmRhdGEpO1xuIFxuICNlbHNlIC8qIGRlZmluZWQoQ09ORklHX0FNRF9JT01NVSkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0lSUV9SRU1BUCkgKi9cbkBAIC00MiwxMiArNDQsMTQgQEAgYW1kX2lvbW11X3JlZ2lzdGVyX2dhX2xvZ19ub3RpZmllcihpbnQgKCpub3RpZmllcikodTMyKSlcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBhbWRfaW9tbXVfdXBkYXRlX2dhKHZvaWQgKmRhdGEsIGludCBjcHUsIGJvb2wgZ2FfbG9nX2ludHIpXG4rc3RhdGljIGlubGluZSBpbnQgYW1kX2lvbW11X3VwZGF0ZV9nYSh2b2lkICpkYXRhLCBpbnQgYXBpY2lkLCBib29sIHdha2V1cF9pbnRyLFxuK1x0XHRcdFx0ICAgICAgYm9vbCBpc19ydW5uaW5nKVxuIHtcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZSh2b2lkICpkYXRhLCBpbnQgY3B1LCBib29sIGdhX2xvZ19pbnRyKVxuK3N0YXRpYyBpbmxpbmUgaW50IGFtZF9pb21tdV9hY3RpdmF0ZV9ndWVzdF9tb2RlKHZvaWQgKmRhdGEsIGludCBhcGljaWQsIGJvb2wgd2FrZXVwX2ludHIsXG4rXHRcdFx0XHRcdFx0Ym9vbCBpc19ydW5uaW5nKVxuIHtcbiBcdHJldHVybiAwO1xuIH1cbkBAIC03Niw0ICs4MCw1IEBAIHN0YXRpYyBpbmxpbmUgaW50IGFtZF9pb21tdV9zbnBfZGlzYWJsZSh2b2lkKSB7IHJldHVybiAwOyB9XG4gc3RhdGljIGlubGluZSBib29sIGFtZF9pb21tdV9zZXZfdGlvX3N1cHBvcnRlZCh2b2lkKSB7IHJldHVybiBmYWxzZTsgfVxuICNlbmRpZlxuIFxuK2V4dGVybiBib29sIGFtZF9pb21tdV9nYXBwaTtcbiAjZW5kaWYgLyogX0FTTV9YODZfQU1EX0lPTU1VX0ggKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDEzOjM2OjI0Ljc3MzIyODQzNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyODgyNzg5MjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkdBUFBJIFN1cHBvcnQgZm9yIEFNRCBJT01NVSBhbmQgS1ZNIFNWTSBBVklDOiBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaW50cm9kdWNpbmcgR0FQUEkgc3VwcG9ydCwgR3Vlc3QgQVBJQyBQb3N0ZWQgSW50ZXJydXB0cywgZm9yIEFNRCBJT01NVSBhbmQgS1ZNIFNWTSBBVklDLiAgRXNzZW50aWFsbHksIGl0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBwcmV0dHkgZGVlcCBvbmUsIGFmZmVjdGluZyBhIGJ1bmNoIG9mIGNvcmUga2VybmVsIGFyZWFzLiAgSSBzZWUgaXQgdG91Y2hlcyBkb2N1bWVudGF0aW9uLCBzb21lIGNydWNpYWwgeDg2IGFzc2VtYmx5IGluY2x1ZGVzLCBhbmQgdGhlbiBkaXZlcyBkZWVwIGludG8gS1ZNJ3MgU1ZNIGltcGxlbWVudGF0aW9uIGFuZCB0aGUgQU1EIElPTU1VIGRyaXZlcnMuIFRoZSBwYXRjaCBhZGRzIGEgbmV3IGBhbWRfaW9tbXU9Z2FwcGlgIGtlcm5lbCBwYXJhbWV0ZXIuIEl0J3MgbW9kaWZ5aW5nIElSVEVzIGZvciBwb3N0ZWQgaW50ZXJydXB0cyBhbmQgaW50cm9kdWNlcyBhIG5ldyB3YWtldXAgbGlzdCBmb3IgR0FQUEkgd2l0aGluIEtWTS5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBpcyB0aGlzIHJlYWNoYWJsZSBpbiBhIGZ1enphYmxlIGVudmlyb25tZW50PyBTaW5jZSB0aGlzIGNvZGUgaXMgZGlyZWN0bHkgbGlua2VkIHRvIEFNRCBJT01NVSwgS1ZNIFNWTSBhbmQsIHNwZWNpZmljYWxseSBBVklDLCBJIG5lZWQgdG8gZXZhbHVhdGUgdGhlIHBvdGVudGlhbC4gUUVNVSBhbmQgR29vZ2xlIENvbXB1dGUgRW5naW5lIGFsbG93IG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBvbiBBTUQgaG9zdHMgb3IgZXZlbiBlbXVsYXRpb24uIFdoaWxlIEFNRCBJT01NVSBlbXVsYXRpb24gd2l0aCBBVklDIGluIFFFTVUgbWlnaHQgYmUgYSBiaXQgc2tldGNoeSwgdGhlICpLVk0gY29kZSBpdHNlbGYqIGlzIHRoZSByZWFsIHRhcmdldCBoZXJlLlxuXG5XYWl0LCBTeXprYWxsZXIgcnVucyBpbiBRRU1VLi4uIGFuZCBpdCBzdXBwb3J0cyBmdXp6aW5nIEtWTS4gSWYgd2UncmUgb24gYW4gQU1EIGhvc3Qgd2l0aCBuZXN0ZWQgdmlydHVhbGl6YXRpb24sIG9yIGV2ZW4gZW11bGF0aW5nIFNWTSwgd2Ugc2hvdWxkIGJlIGFibGUgdG8gcmVhY2ggS1ZNIFNWTSBjb2RlIGRpcmVjdGx5LiBTeXprYWxsZXIgc3VwcG9ydHMgS1ZNIGZ1enppbmcsIHdoaWNoIG1lYW5zIHdlICpjYW4qIGFic29sdXRlbHkgZnV6eiB0aGlzISBUaGlzIGlzIGRlZmluaXRlbHkgd29ydGggcHVyc3VpbmcuXG5cbk5vdywgbGV0J3Mgem9vbSBpbiBvbiB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIHRoYXQgYXJlIG1vc3QgaW50ZXJlc3RpbmcgZm9yIGZ1enppbmc6XG5cbiogICBgYXZpY19pbml0X3ZjcHVgLCBgYXZpY19hZGRfdmNwdV90b19nYXBwaV93YWtldXBfbGlzdGAsIGBhdmljX3JlbW92ZV92Y3B1X2Zyb21fZ2FwcGlfd2FrZXVwX2xpc3RgLCBgYXZpY19kZXN0cm95X3ZjcHVgLCBgc3ZtX2lyX2xpc3RfZGVsYCwgYGF2aWNfcGlfdXBkYXRlX2lydGVgLCBgYXZpY191cGRhdGVfaW9tbXVfdmNwdV9hZmZpbml0eWAsIGBfX2F2aWNfdmNwdV9sb2FkYCwgYF9fYXZpY192Y3B1X3B1dGAsIGBhdmljX3ZjcHVfcHV0YCwgYGF2aWNfZ2FwcGlfd2FrZXVwX2hhbmRsZXJgLCBgYXZpY19oYXJkd2FyZV9zZXR1cGAsIGBhdmljX2hhcmR3YXJlX3Vuc2V0dXBgLCBgX19hbWRfaW9tbXVfdXBkYXRlX2dhYCwgYGFtZF9pb21tdV91cGRhdGVfZ2FgLCBgYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGVgLCBhbmQgYGFtZF9pcl9zZXRfdmNwdV9hZmZpbml0eWAuXG5cbk5leHQgc3RlcCwgSSBuZWVkIHRvIGNoZWNrIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMgdG8gYmUgc3VyZSB0aGUgcmVsZXZhbnQgZmVhdHVyZXMgYXJlIGVuYWJsZWQuIFNwZWNpZmljYWxseSwgSSdtIGxvb2tpbmcgYXQgS1ZNX0FNRCwgQU1EX0lPTU1VLCBhbmQgSVJRX1JFTUFQLiBUaG9zZSBuZWVkIHRvIGJlIHZlcmlmaWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzAyMiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc5MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDEzOjM2OjM3LjY1NjAxOTQzN1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDgxODA3NzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTV9BTURcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9MTM0PWNvbmZpZyBLVk1fSU5URUxfVERYXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTQ2OmNvbmZpZyBLVk1fQU1EXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ3LVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cXHRib29sIFxcXCJBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxMzozNjozNy43NjQyMDc0OVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NjYxMjY5MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqQXNzZXNzaW5nIElPTU1VIGFuZCBJUlEgUmVtYXBwaW5nIGluIFRoaXMgQ29udGV4dCoqXG5cbk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBzdGF0dXMgb2YgQU1EX0lPTU1VIGFuZCBJUlFfUkVNQVAuIFRob3NlIGFyZSB0aGUgZm91bmRhdGlvbiBzdG9uZXMsIHJlYWxseS4gR2l2ZW4gdGhlIGxpa2VseSBjb25zdHJhaW50cyBpbiB0aGlzIHNldHVwLCB0aGV5J3JlIHByb2JhYmx5IGtleSB0byBhY2hpZXZpbmcgdGhlIGRlc2lyZWQgb3V0Y29tZS4gSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIGlmIHRoZXkgYXJlIGVuYWJsZWQgYW5kIGNvbmZpZ3VyZWQgY29ycmVjdGx5LCBvciBpZiB0aGVyZSdzIGFueSBoaW50IG9mIGEgcHJvYmxlbSB0aGVyZS4gQW55IGlzc3VlcyB3aXRoIHRob3NlIGFuZCwgZnJhbmtseSwgd2UgY2FuIHByb2JhYmx5IHN0b3AgdGhlcmUgYXMgb3RoZXIgY29uZmlndXJhdGlvbnMgd2lsbCBub3QgYmUgZWZmZWN0aXZlLiBTbywgdGhvc2UgbmVlZCB0byBiZSBzb2xpZC4gSSB3YW50IHRvIGtub3cgaWYgdGhleSdyZSB1cCBhbmQgcnVubmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ2MTIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxMzozNjo0MS43MzAzMzY3ODFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQyNzAxMjMyLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQU1EX0lPTU1VXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvaW9tbXUvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTM6MzY6NDEuODczMDUxNjIyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg0MDA4MDM1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqTmF2aWdhdGluZyB0aGUgQU1EIElPTU1VIENvZGViYXNlKipcblxuUmlnaHQsICpBTURfSU9NTVUqLCB0aGF0J3MgdGhlIGtleS4gSSBuZWVkIHRvIGZpbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhhdC4gQmFzZWQgb24gZXhwZXJpZW5jZSwgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBsb29rIGZpcnN0IGlzIHRoZSBgZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHVzdWFsbHkgd2hlcmUgdGhlc2UgaGFyZHdhcmUtc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlc2lkZSB3aXRoaW4gdGhlIGRyaXZlciB0cmVlLiBJdCdzIGFsbW9zdCBhIGdpdmVuLiBUaW1lIHRvIGNvbmZpcm0gYW5kIGdldCB0byB3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDgyNSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDEzOjM2OjQ0LjcxMzEzNDU2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNTQzNzAyMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQU1EX0lPTU1VXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvaW9tbXUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWctMi0jIEFNRCBJT01NVSBzdXBwb3J0XFxuZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZzozOmNvbmZpZyBBTURfSU9NTVVcXG5kcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnLTQtXFx0Ym9vbCBcXFwiQU1EIElPTU1VIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnLTMyLVxcbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWc6MzM6Y29uZmlnIEFNRF9JT01NVV9JT01NVUZEXFxuZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZy0zNC1cXHRib29sIFxcXCJFbmFibGUgSU9NTVVGRCBmZWF0dXJlcyBmb3IgQU1EIElPTU1VIChFWFBFUklNRU5UQUwpXFxcIlxcbi0tXFxuZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZy00Mi1cXG5kcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnOjQzOmNvbmZpZyBBTURfSU9NTVVfREVCVUdGU1xcbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWctNDQtXFx0Ym9vbCBcXFwiRW5hYmxlIEFNRCBJT01NVSBpbnRlcm5hbHMgaW4gRGVidWdGU1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTM6MzY6NDQuODQ4NTc3ODcyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk0MDY3ODMzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipVbmRlcnN0YW5kaW5nIElSUV9SRU1BUCBpbiBEZXB0aCoqXG5cblJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSVJRX1JFTUFQLi4uIEknbSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zLiBXZSdyZSB0YWxraW5nIGFib3V0IHJlbWFwcGluZyBpbnRlcnJ1cHQgcmVxdWVzdCBsaW5lcywgZXNzZW50aWFsbHkgZGVjb3VwbGluZyB0aGUgcGh5c2ljYWwgaW50ZXJydXB0IHBpbnMgZnJvbSB0aGUgaW50ZXJydXB0IG51bWJlcnMgcHJlc2VudGVkIHRvIHRoZSBDUFUuIFRoZSBpbW1lZGlhdGUgYmVuZWZpdCBpcywgb2YgY291cnNlLCBhIG1vcmUgZmxleGlibGUgYW5kIHJvYnVzdCBpbnRlcnJ1cHQgcm91dGluZyBzeXN0ZW0uIFdlJ3JlIGdldHRpbmcgYXdheSBmcm9tIHRoZSBoYXJkd2lyZWQgbGltaXRhdGlvbnMgb2YgbGVnYWN5IGludGVycnVwdCBjb250cm9sbGVycyBhbmQgZW1icmFjaW5nIGEgbW9yZSBkeW5hbWljIGFwcHJvYWNoLlxuXG5UaGUga2V5IHF1ZXN0aW9uIGlzLCAqaG93KiBpcyB0aGlzIHJlbWFwIGltcGxlbWVudGVkPyBJcyBpdCBhIHRyYW5zbGF0aW9uIHRhYmxlIHdpdGhpbiB0aGUgY2hpcHNldD8gSXMgaXQgbWFuYWdlZCBieSB0aGUgaG9zdCBicmlkZ2U/IEFuZCB3aGF0IGFyZSB0aGUgcGVyZm9ybWFuY2Ugb3ZlcmhlYWRzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGluZGlyZWN0aW9uPyBJJ2QgaW1hZ2luZSB0aGF0IGFueSBsYXRlbmN5IGludHJvZHVjZWQgYnkgdGhlIHJlbWFwcGluZyBwcm9jZXNzIGlzIHRoZSBwcmltYXJ5IGZhY3RvciB0byBjb25zaWRlciAtIGVzcGVjaWFsbHkgaW4gcGVyZm9ybWFuY2UgY3JpdGljYWwgZW52aXJvbm1lbnRzLlxuXG5JJ20gYWxzbyBjb25zaWRlcmluZyB0aGUgaW1wbGljYXRpb25zIGZvciBkZXZpY2UgZHJpdmVycy4gRG8gdGhleSBuZWVkIHRvIGJlIGF3YXJlIG9mIHRoZSByZW1hcHBpbmc/IE9yIGlzIHRoZSBzeXN0ZW0gYWJzdHJhY3Rpb24gdHJhbnNwYXJlbnQgZW5vdWdoIHRvIGluc3VsYXRlIHRoZSBkcml2ZXIgZnJvbSB0aGVzZSBjaGFuZ2VzLCBhbGxvd2luZyBpdCB0byBzaW1wbHkgcmVxdWVzdCBhbiBpbnRlcnJ1cHQgbnVtYmVyIGFuZCBoYXZlIHRoZSBzeXN0ZW0gaGFuZGxlIHRoZSB1bmRlcmx5aW5nIHJlbWFwcGluZyB3aXRob3V0IGl0cyBpbnRlcnZlbnRpb24/IEknZCBoYXphcmQgYSBndWVzcyB0aGF0IG5ld2VyIGRyaXZlcnMgYXJlIGJ1aWx0IHdpdGggYXdhcmVuZXNzLCBhbGxvd2luZyBzb21lIGRlZ3JlZSBvZiBjb250cm9sLlxuXG5GaW5hbGx5LCB3aGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGZvciB2aXJ0dWFsaXphdGlvbj8gSG93IGRvZXMgSVJRX1JFTUFQIHBsYXkgd2l0aCBpbnRlcnJ1cHQgdmlydHVhbGl6YXRpb24gdGVjaG5pcXVlcywgbGlrZSBNU0ktWCBhbmQgaW50ZXJydXB0IHJlbWFwcGluZyBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBJcyB0aGVyZSBhIG5lZWQgdG8gY2FyZWZ1bGx5IG1hbmFnZSB0aGUgbWFwcGluZyBvZiBwaHlzaWNhbCBpbnRlcnJ1cHRzIHRvIHZpcnR1YWwgaW50ZXJydXB0IHZlY3RvcnM/IFRoaXMgaXMgcmVhbGx5IGNydWNpYWwgd2hlbiBkZWFsaW5nIHdpdGggbmVzdGVkIHZpcnR1YWxpemF0aW9uIG9yIGhpZ2gtcGVyZm9ybWFuY2UgSS9PIHZpcnR1YWxpemF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTIxMywiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTM6MzY6NDguNzg5MjU4NjA0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzkxNDc3MjUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJUlFfUkVNQVBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvaW9tbXUvS2NvbmZpZz0xOTk9c291cmNlIFxcXCJkcml2ZXJzL2lvbW11L3Jpc2N2L0tjb25maWdcXFwiXFxuZHJpdmVycy9pb21tdS9LY29uZmlnLTIwMC1cXG5kcml2ZXJzL2lvbW11L0tjb25maWc6MjAxOmNvbmZpZyBJUlFfUkVNQVBcXG5kcml2ZXJzL2lvbW11L0tjb25maWctMjAyLVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIEludGVycnVwdCBSZW1hcHBpbmdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDEzOjM2OjUxLjU4MDc0NTUyNVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDk3Mjk3OTE5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgYW1kX2lvbW11X2dhcHBpYCBmZWF0dXJlIGFuZCB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiBpdCdzIGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmcuIEZpcnN0LCBJIG5lZWQgdG8gY2hlY2sgaWYgdGhlcmUgYXJlIGFsdGVybmF0aXZlIGNvbmZpZ3VyYXRpb25zIHRoYXQgbWlnaHQgYWZmZWN0IGl0LiBPa2F5LCBJIHNlZSBpdCdzIGV4cG9ydGVkIGluIGBkcml2ZXJzL2lvbW11L2FtZC9pbml0LmNgLiBUaGF0J3MgYSBnb29kIHNpZ24uIExvb2tzIGxpa2UgaXQncyBlbmFibGVkIGJ5IHRoZSBgYW1kX2lvbW11PWdhcHBpYCBrZXJuZWwgcGFyYW1ldGVyLiBIbW0sIHRoZSBvYnZpb3VzIHBhdGggdG8gZ2V0dGluZyBzeXprYWxsZXIgdG8gaGl0IHRoaXMgd291bGQgYmUgdG8gcGFzcyB0aGF0IHBhcmFtZXRlci4gQnV0IHN5emthbGxlciBkb2Vzbid0IGF1dG9tYXRpY2FsbHkgcGFzcyBrZXJuZWwgcGFyYW1ldGVycyB1bmxlc3MgdGhleSdyZSBleHBsaWNpdGx5IGRlZmluZWQgaW4gaXRzIGNvbmZpZ3VyYXRpb24sIGFuZCBJIGNhbid0IHNwZWNpZnkga2VybmVsIHBhcmFtZXRlcnMgZGlyZWN0bHkgd2l0aGluIEtjb25maWcuIFRoYXQncyBhIGh1cmRsZS4gU28sIGZ1enppbmcgdGhlIHBhcmFtZXRlciBwYXJzaW5nIGl0c2VsZiBpc24ndCBhIHZpYWJsZSBvcHRpb24uXG5cbk5vdywgaG9sZCBvbiBhIHNlY29uZC4uLiBgYW1kX2lvbW11X2dhcHBpYCBpcyBhICpnbG9iYWwqIHZhcmlhYmxlLiBUaGF0IGNoYW5nZXMgdGhpbmdzLiBDb3VsZCBpdCBiZSBleHBvc2VkIHRocm91Z2ggc3lzZnMgb3IgZGVidWdmcz8gSWYgc28sIHRoYXQgb3BlbnMgYSBiYWNrZG9vci4gSSBuZWVkIHRvIGludmVzdGlnYXRlIGlmIHRoZXJlJ3MgYW55IG1lY2hhbmlzbSB0byBtb2RpZnkgdGhpcyBnbG9iYWwgdmFyaWFibGUuIFRpbWUgdG8gY2hlY2sgZm9yIGl0cyBleHBvc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU2OTEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTM6Mzc6MDYuNTUzNzI2OTJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MzM3MDM0MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbWRfaW9tbXVfZ2FwcGlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9pb21tdS9hbWQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvaW9tbXUvYW1kL2FtZF9pb21tdS5oPTQzPWludCBhbWRfaW9tbXVfZW5hYmxlX2ZhdWx0aW5nKHVuc2lnbmVkIGludCBjcHUpO1xcbmRyaXZlcnMvaW9tbXUvYW1kL2FtZF9pb21tdS5oOjQ0OmV4dGVybiBib29sIGFtZF9pb21tdV9nYXBwaTtcXG5kcml2ZXJzL2lvbW11L2FtZC9hbWRfaW9tbXUuaC00NS1leHRlcm4gaW50IGFtZF9pb21tdV9ndWVzdF9pcjtcXG4tLVxcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYz0xNjE9aW50IGFtZF9pb21tdV9ncHRfbGV2ZWwgPSBQQUdFX01PREVfNF9MRVZFTDtcXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMTYyLVxcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYzoxNjM6Ym9vbCBhbWRfaW9tbXVfZ2FwcGk7XFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jOjE2NDpFWFBPUlRfU1lNQk9MKGFtZF9pb21tdV9nYXBwaSk7XFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTE2NS1cXG4tLVxcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYz0yOTk4PXN0YXRpYyB2b2lkIGVuYWJsZV9pb21tdXNfdmFwaWModm9pZClcXG4tLVxcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy0zMDA1LVxcdFxcdC8qXFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jOjMwMDY6XFx0XFx0ICogRGlzYWJsZSBHQVBQSSwgZG8gbm90IGNoZWNrIGFtZF9pb21tdV9nYXBwaSBhcyBpdCBtYXkgYmVcXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMzAwNy1cXHRcXHQgKiBmYWxzZSBpbiBuZXcga2V4ZWMga2VybmVsIGV2ZW4gdGhvdWdoIHByZXZpb3VzIGtlcm5lbCBoYXNcXG4tLVxcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy0zMDUwLVxcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYzozMDUxOlxcdGlmIChhbWRfaW9tbXVfZ2FwcGkgXFx1MDAyNlxcdTAwMjZcXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMzA1Mi1cXHQgICAgIShjaGVja19mZWF0dXJlKEZFQVRVUkVfR0FQUEkpIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMzA1NC1cXHRcXHRwcl93YXJuKFxcXCJHQVBQSSBpcyBub3Qgc3VwcG9ydGVkLlxcXFxuXFxcIik7XFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jOjMwNTU6XFx0XFx0YW1kX2lvbW11X2dhcHBpID0gZmFsc2U7XFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTMwNTYtXFx0fVxcbi0tXFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTMwNTktXFx0Zm9yX2VhY2hfaW9tbXUoaW9tbXUpIHtcXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM6MzA2MDpcXHRcXHRpZiAoYW1kX2lvbW11X2dhcHBpKVxcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy0zMDYxLVxcdFxcdFxcdGlvbW11X2ZlYXR1cmVfZW5hYmxlKGlvbW11LCBDT05UUk9MX0dBUFBJX0VOKTtcXG4tLVxcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy0zMDcyLVxcdHByX2luZm8oXFxcIlZpcnR1YWwgQVBJQyBlbmFibGVkIHdpdGggJXNcXFxcblxcXCIsXFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jOjMwNzM6XFx0XFx0YW1kX2lvbW11X2dhcHBpID8gXFxcIkdBUFBJXFxcIiA6IFxcXCJHQUxPR1xcXCIpO1xcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy0zMDc0LSNlbmRpZlxcbi0tXFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jPTM3Mzc9c3RhdGljIGludCBfX2luaXQgcGFyc2VfYW1kX2lvbW11X29wdGlvbnMoY2hhciAqc3RyKVxcbi0tXFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTM3NjQtXFx0XFx0fSBlbHNlIGlmIChzdHJuY21wKHN0ciwgXFxcImdhcHBpXFxcIiwgNSkgPT0gMCkge1xcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYzozNzY1OlxcdFxcdFxcdGFtZF9pb21tdV9nYXBwaSA9IHRydWU7XFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTM3NjYtXFx0XFx0fSBlbHNlIHtcXG4tLVxcbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmM9Mzk2Mj1zdGF0aWMgdm9pZCBfX2FtZF9pb21tdV91cGRhdGVfZ2Eoc3RydWN0IGlydGVfZ2EgKmVudHJ5LCBpbnQgYXBpY2lkLFxcbi0tXFxuZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuYy0zOTcyLVxcdH0gZWxzZSB7XFxuZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuYzozOTczOlxcdFxcdGlmIChhbWRfaW9tbXVfZ2FwcGkpIHtcXG5kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jLTM5NzQtXFx0XFx0XFx0ZW50cnktXFx1MDAzZWxvLmZpZWxkc192YXBpYy5nYXBwaV9kaXMgPSAhd2FrZXVwX2ludHIgXFx1MDAyNlxcdTAwMjZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTM6Mzc6MDYuNzA3MTA0MjMxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIwMDQyNDc0NTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIEFNRCBJT01NVSBHQVBQSSBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggc2VlbXMgdG8gaW50cm9kdWNlIEdBUFBJIChHdWVzdCBBUElDLWJhc2VkIFBvc3RlZCBJbnRlcnJ1cHQpIHN1cHBvcnQgZm9yIHRoZSBBTUQgSU9NTVUsIHdoaWNoIEkgYmVsaWV2ZSBpcyByZWxhdGVkIHRvIGludGVycnVwdCBoYW5kbGluZy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYGFtZF9pb21tdV9nYXBwaWAgaXMgdGhlIGtleSBmbGFnIGhlcmUsIGFuZCBpdCdzIHNldCBvbmx5IHdoZW4gYGFtZF9pb21tdT1nYXBwaWAgaXMgcGFzc2VkIGFzIGEga2VybmVsIHBhcmFtZXRlci4gSSd2ZSBjb25maXJtZWQgdGhlcmUncyBubyBvdGhlciB3YXkgdG8gc2V0IGl0LlxuXG5UaGUgaW50ZXJlc3RpbmcgcG9pbnQgaXMgaG93IHRoZSBjb2RlICpiZWhhdmVzKiB3aGVuIGBhbWRfaW9tbXVfZ2FwcGlgIGlzICpub3QqIHNldC4gVGhlIHBhdGNoIGRvZXMgbW9kaWZ5IHRoZSBub24tR0FQUEkgcGF0aCwgYnV0IGl0IGFwcGVhcnMgdG8gYmUgcHJpbWFyaWx5IGEgcmVmYWN0b3Jpbmcgb3IgY2xlYW51cC4gVmFyaWFibGVzIGFyZSByZW5hbWVkIChgZ2FfbG9nX2ludHJgIHRvIGB3YWtldXBfaW50cmApIGFuZCBzb21lIGxvZ2ljIGlzIHR3ZWFrZWQsIGJ1dCB0aGUgKmZ1bmN0aW9uYWxpdHkqIHJlbWFpbnMgZXNzZW50aWFsbHkgdGhlIHNhbWUgZm9yIHRoZSBub24tR0FQUEkgcGF0aC4gVGhlIGtleSBjaGFuZ2UgaXMgdGhhdCBgYW1kX2lvbW11X3VwZGF0ZV9nYWAgbm93IHRha2VzIGBhcGljaWRgLCBgd2FrZXVwX2ludHJgLCBhbmQgYGlzX3J1bm5pbmdgIGFyZ3VtZW50cywgcmVwbGFjaW5nIHRoZSBvcmlnaW5hbCBgY3B1YCBhbmQgYGdhX2xvZ19pbnRyYC5cblxuTG9va2luZyBkZWVwZXIsIHRoZSBvcmlnaW5hbCBgY3B1YCBhcmd1bWVudCBpbiBgYXZpY191cGRhdGVfaW9tbXVfdmNwdV9hZmZpbml0eWAgd2FzIGFjdHVhbGx5IHRoZSBBUElDIElELCBub3QgdGhlIENQVSBudW1iZXIsIHdoaWNoIHRoaXMgcGF0Y2ggY29ycmVjdGx5IGNhcHR1cmVzLiBUaGUgcmVuYW1pbmcgdG8gYGFwaWNpZGAgaXMgdGh1cyBtb3JlIGFjY3VyYXRlIGFuZCBjbGVhcmVyLlxuXG5UaGUgbmV3IEdBUFBJLXNwZWNpZmljIGNvZGUsIGxpa2UgYGF2aWNfYWRkX3ZjcHVfdG9fZ2FwcGlfd2FrZXVwX2xpc3RgIGFuZCByZWxhdGVkIGNoYW5nZXMsIGlzIGVudGlyZWx5IGdhdGVkIGJ5IHRoZSBgYW1kX2lvbW11X2dhcHBpYCBmbGFnLCB3aGljaCBtZWFucyBpdCBpcyBpbmFjY2Vzc2libGUgd2l0aG91dCBwYXNzaW5nIGBhbWRfaW9tbXU9Z2FwcGlgLlxuXG5HaXZlbiBTeXprYWxsZXIncyBiZWhhdmlvciwgSSBuZWVkIHRvIGV2YWx1YXRlIGlmIHRoZSBwYXRjaCAqc2hvdWxkKiBiZSBmdXp6ZWQuIFRoZSBwYXRjaCBzZWVtcyB0byBpbnRyb2R1Y2UgKm5ldyogZnVuY3Rpb25hbCBiZWhhdmlvciwgYW5kIHRoYXQgaXMgR0FQUEkuIFN5emthbGxlciBjYW4gcGFzcyB0aGUgbmVlZGVkIGtlcm5lbCBwYXJhbWV0ZXIuIFRoZXJlZm9yZSwgdGhpcyBwYXRjaCB3YXJyYW50cyBmdXp6aW5nLCBzaW5jZSBpdCBpbnRyb2R1Y2VzIEdBUFBJLlxuXG5UaGUgcmVxdWlyZWQgS2NvbmZpZyBvcHRpb25zIGFyZSBgS1ZNX0FNRGAgYW5kIGBBTURfSU9NTVVgIGJlY2F1c2UgdGhleSBlbmFibGUgdGhlIGZ1bmRhbWVudGFsIEFNRCBLVk0gYW5kIElPTU1VIGZ1bmN0aW9uYWxpdHkgb24gd2hpY2ggdGhpcyBHQVBQSSBmZWF0dXJlIGlzIGJ1aWx0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzE2MywiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwNjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTM6Mzc6MjYuNzQ5NTgwOFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE2MTY1MzA5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNX0FNRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9MTM0PWNvbmZpZyBLVk1fSU5URUxfVERYXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTQ2OmNvbmZpZyBLVk1fQU1EXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ3LVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cXHRib29sIFxcXCJBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxMzozNzoyOS45MTEyMzk3ODhaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDkzMjIwNzIxNTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4gTXkgZmlyc3QgdGhvdWdodCBpczpcblxuKipDaGVja2luZyBEZXBlbmRlbmNpZXMgZm9yIGBBTURfSU9NTVVgKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiB0aGUgYEFNRF9JT01NVWAgbW9kdWxlIGhhcyBhbnkgZGVwZW5kZW5jaWVzIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IG90aGVyIGNvbXBvbmVudHMgb3Igc2V0dGluZ3MgaXQgcmVsaWVzIG9uIGJlZm9yZSBJIGNhbiBwcm9wZXJseSBhc3Nlc3MgaXRzIGZ1bmN0aW9uIG9yIHBvdGVudGlhbCBpc3N1ZXMuIFRoaXMgaXMgYSBmdW5kYW1lbnRhbCBzdGVwIGZvciBtZTsgaWYgaXQgZGVwZW5kcyBvbiBzb21ldGhpbmcsIEkgbmVlZCB0byBrbm93ICp3aGF0KiBzbyBJIGNhbiBhc3Nlc3Mgd2hldGhlciB0aGF0IGRlcGVuZGVuY3kgaXMgc2V0IHVwIGNvcnJlY3RseSwgb3Igd2hhdCB0aGUga25vY2stb24gZWZmZWN0cyBvZiBtZXNzaW5nIHdpdGggYEFNRF9JT01NVWAgbWlnaHQgYmUuIFRpbWUgdG8gZGlnIGluIGFuZCBmaW5kIG91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk5MjIsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxMzozODoxOS4yMzMzMTcwNjdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwODA2NTg0MjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEFNRF9JT01NVVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZy0yLSMgQU1EIElPTU1VIHN1cHBvcnRcXG5kcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnOjM6Y29uZmlnIEFNRF9JT01NVVxcbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWctNC1cXHRib29sIFxcXCJBTUQgSU9NTVUgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWctMzItXFxuZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZzozMzpjb25maWcgQU1EX0lPTU1VX0lPTU1VRkRcXG5kcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnLTM0LVxcdGJvb2wgXFxcIkVuYWJsZSBJT01NVUZEIGZlYXR1cmVzIGZvciBBTUQgSU9NTVUgKEVYUEVSSU1FTlRBTClcXFwiXFxuLS1cXG5kcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnLTQyLVxcbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWc6NDM6Y29uZmlnIEFNRF9JT01NVV9ERUJVR0ZTXFxuZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZy00NC1cXHRib29sIFxcXCJFbmFibGUgQU1EIElPTU1VIGludGVybmFscyBpbiBEZWJ1Z0ZTXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxMzozODoyMy4zMTM5ODM5NTRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTgxMTY2ODY3NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipFeGFtaW5pbmcgQU1EIElPTU1VIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIGxldCdzIGRpdmUgcmlnaHQgaW4uIFRvIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIHBpY3R1cmUgb2YgaG93IGBBTURfSU9NTVVgIGlzIGNvbmZpZ3VyZWQgYW5kIHVzZWQsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaXRzIGRlcGVuZGVuY2llcy4gSSdtIGdvaW5nIHRvIG5hdmlnYXRlIHRvIHRoZSBgZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IOKAkyBpdCdzIHdoZXJlIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoaXMgc3BlY2lmaWMgQU1EIElPTU1VIGRyaXZlciBhcmUgZGVmaW5lZCwgYW5kIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiBgQU1EX0lPTU1VYCBhbmQgb3RoZXIgZmVhdHVyZXMgb3Igb3B0aW9ucyB3aXRoaW4gdGhlIGtlcm5lbC4gSSdtIGxvb2tpbmcgZm9yIHRoZSBjb25kaXRpb25hbCBsb2dpYywgdGhlIGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzLCBhbnkgYHNlbGVjdGAgc3RhdGVtZW50cywgYW5kIGFueXRoaW5nIHRoYXQgZ2l2ZXMgbWUgaW5zaWdodCBpbnRvIHdoYXQgZWxzZSAqbXVzdCogYmUgZW5hYmxlZCBvciBjb25zaWRlcmVkIGluIG9yZGVyIGZvciBgQU1EX0lPTU1VYCB0byBiZSBhdmFpbGFibGUgYW5kIGZ1bmN0aW9uYWwuIEkgZXhwZWN0IHRoaXMgZmlsZSB3aWxsIHJldmVhbCB0aGUga2V5IGJ1aWxkaW5nIGJsb2Nrcy4gTGV0J3Mgc2VlIHdoYXQncyB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAzMjEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxMzozODo0MS40MzA2NzMzOTVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxOTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCMgQU1EIElPTU1VIHN1cHBvcnRcXG4gICAzOlxcdGNvbmZpZyBBTURfSU9NTVVcXG4gICA0OlxcdFxcdGJvb2wgXFxcIkFNRCBJT01NVSBzdXBwb3J0XFxcIlxcbiAgIDU6XFx0XFx0c2VsZWN0IFNXSU9UTEJcXG4gICA2OlxcdFxcdHNlbGVjdCBQQ0lfTVNJXFxuICAgNzpcXHRcXHRzZWxlY3QgUENJX0FUU1xcbiAgIDg6XFx0XFx0c2VsZWN0IFBDSV9QUklcXG4gICA5OlxcdFxcdHNlbGVjdCBQQ0lfUEFTSURcXG4gIDEwOlxcdFxcdHNlbGVjdCBJUlFfTVNJX0xJQlxcbiAgMTE6XFx0XFx0c2VsZWN0IE1NVV9OT1RJRklFUlxcbiAgMTI6XFx0XFx0c2VsZWN0IElPTU1VX0FQSVxcbiAgMTM6XFx0XFx0c2VsZWN0IElPTU1VX0lPVkFcXG4gIDE0OlxcdFxcdHNlbGVjdCBJT01NVV9TVkFcXG4gIDE1OlxcdFxcdHNlbGVjdCBJT01NVV9JT1BGXFxuICAxNjpcXHRcXHRzZWxlY3QgSU9NTVVGRF9EUklWRVIgaWYgSU9NTVVGRFxcbiAgMTc6XFx0XFx0c2VsZWN0IEdFTkVSSUNfUFRcXG4gIDE4OlxcdFxcdHNlbGVjdCBJT01NVV9QVFxcbiAgMTk6XFx0XFx0c2VsZWN0IElPTU1VX1BUX0FNRFYxXFxuICAyMDpcXHRcXHRzZWxlY3QgSU9NTVVfUFRfWDg2XzY0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDEzOjM4OjQxLjQzMDc3ODY2NVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTcwNjIyMjg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy5cblxuKipJJ20gRGVlcCBpbiB0aGUgV2VlZHMgb24gSU9NTVUgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBzbyBJJ20gZm9jdXNpbmcgb24gZ2V0dGluZyB0aGlzIEFNRCBJT01NVSBpbXBsZW1lbnRhdGlvbiBjb25maWd1cmVkIHByb3Blcmx5LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbWFrZSBzdXJlIEkndmUgZ290IGBBTURfSU9NTVVgIGVuYWJsZWQgaW4gdGhlIGNvbmZpZy4gVGhhdCdzIHRoZSBiYXNlbGluZS4gQnV0IEkgY2FuJ3QganVzdCBzdG9wIHRoZXJlLiBUaGUgbmV4dCBrZXkgYXNwZWN0IG9mIHRoaXMsIGJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcsIHdvdWxkIGJlIHRvIGNvbnNpZGVyIGBJUlFfUkVNQVBgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhhdCBpcyBnb2luZyB0byBpbnRlcmFjdCB3aXRoIHRoZSBJT01NVS4gRG9lcyBpdCBuZWVkIHRvIGJlIGVuYWJsZWQgZm9yIG9wdGltYWwgcGVyZm9ybWFuY2U/IERvZXMgdGhlIGltcGxlbWVudGF0aW9uIGRlcGVuZCBvbiBpdD8gSSBuZWVkIHRvIHRoaW5rIGNhcmVmdWxseSBhYm91dCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZXNlIHNldHRpbmdzLiBJIGtub3cgYElSUV9SRU1BUGAgaXMgY3J1Y2lhbCB0byBtYWtpbmcgc3VyZSB0aGF0IHRoZSBpbnRlcnJ1cHRzIGFyZSBwcm9wZXJseSBtYXBwZWQgdGhyb3VnaCB0aGUgSU9NTVUsIHRoZXJlZm9yZSBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgYWxsIHNldCB1cCBjb3JyZWN0bHkuIFRoaXMgYWxsIHRpZXMgdG9nZXRoZXIsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgYWxsIGZ1bmN0aW9uaW5nIHRvZ2V0aGVyIHByb3Blcmx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDg2NCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTM6Mzg6NDUuMDAxNDA1MzAyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4ODc5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2lvbW11L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTkwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTkwOlxcdFxcdCAgVGhlc2UgSU9NTVVzIGFsbG93IHZpcnR1YWxpemF0aW9uIG9mIHRoZSBhZGRyZXNzIHNwYWNlIHVzZWQgYnkgbW9zdFxcbiAxOTE6XFx0XFx0ICBjb3JlcyB3aXRoaW4gdGhlIG11bHRpbWVkaWEgc3Vic3lzdGVtLlxcbiAxOTI6XFx0XFxuIDE5MzpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4gaGVyZS5cXG4gMTk0OlxcdFxcbiAxOTU6XFx0c291cmNlIFxcXCJkcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnXFxcIlxcbiAxOTY6XFx0c291cmNlIFxcXCJkcml2ZXJzL2lvbW11L2FybS9LY29uZmlnXFxcIlxcbiAxOTc6XFx0c291cmNlIFxcXCJkcml2ZXJzL2lvbW11L2ludGVsL0tjb25maWdcXFwiXFxuIDE5ODpcXHRzb3VyY2UgXFxcImRyaXZlcnMvaW9tbXUvaW9tbXVmZC9LY29uZmlnXFxcIlxcbiAxOTk6XFx0c291cmNlIFxcXCJkcml2ZXJzL2lvbW11L3Jpc2N2L0tjb25maWdcXFwiXFxuIDIwMDpcXHRcXG4gMjAxOlxcdGNvbmZpZyBJUlFfUkVNQVBcXG4gMjAyOlxcdFxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIEludGVycnVwdCBSZW1hcHBpbmdcXFwiXFxuIDIwMzpcXHRcXHRkZXBlbmRzIG9uIFg4Nl82NCBcXHUwMDI2XFx1MDAyNiBYODZfSU9fQVBJQyBcXHUwMDI2XFx1MDAyNiBQQ0lfTVNJIFxcdTAwMjZcXHUwMDI2IEFDUElcXG4gMjA0OlxcdFxcdHNlbGVjdCBJUlFfTVNJX0xJQlxcbiAyMDU6XFx0XFx0aGVscFxcbiAyMDY6XFx0XFx0ICBTdXBwb3J0cyBJbnRlcnJ1cHQgcmVtYXBwaW5nIGZvciBJTy1BUElDIGFuZCBNU0kgZGV2aWNlcy5cXG4gMjA3OlxcdFxcdCAgVG8gdXNlIHgyYXBpYyBtb2RlIGluIHRoZSBDUFUncyB3aGljaCBzdXBwb3J0IHgyQVBJQyBlbmhhbmNlbWVudHMgb3JcXG4gMjA4OlxcdFxcdCAgdG8gc3VwcG9ydCBwbGF0Zm9ybXMgd2l0aCBDUFUncyBoYXZpbmcgXFx1MDAzZSA4IGJpdCBBUElDIElELCBzYXkgWS5cXG4gMjA5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxMzozODo0NS4wMDE3MDY5MTJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTEzNTI2NTIwMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEFNRCBJT01NVSBhbmQgQVZJQyBGdW5jdGlvbmFsaXR5KipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgdGhlIEFNRCBJT01NVSBhbmQgQWR2YW5jZWQgVmlydHVhbCBJbnRlcnJ1cHQgQ29udHJvbGxlciAoQVZJQykgcGxheSB0b2dldGhlciwgYW5kIGl0J3MgYmVjb21pbmcgY2xlYXIgd2hlcmUgdGhlIGRlcGVuZGVuY2llcyBsaWUuIFNwZWNpZmljYWxseSwgSSBzZWUgdGhhdCBgSVJRX1JFTUFQYCBpcyBjcnVjaWFsLiBJdCdzIGVzc2VudGlhbCBmb3IgYGFtZF9pb21tdV91cGRhdGVfZ2FgIGFuZCBgYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGVgIHRvIGJlIGRlZmluZWQgYW5kLCB0aGVyZWZvcmUsIHVzYWJsZS4gSSBjb25maXJtZWQgdGhpcyBieSBjaGVja2luZyB0aGUgaW5jbHVkZSBmaWxlIGBsaW51eC9hbWQtaW9tbXUuaGAsIHNlZWluZyB0aGF0IGJvdGggYENPTkZJR19BTURfSU9NTVVgIGFuZCBgQ09ORklHX0lSUV9SRU1BUGAgYXJlIHJlcXVpcmVkLiBBbHNvLCB0aGUgS1ZNIHNpZGUgcmVxdWlyZXMgYEtWTV9BTURgLlxuXG5Ob3csIEkgd2FudCB0byBpZGVudGlmeSB0aGUga2V5IHN5bWJvbHMgdG8gZm9jdXMgb24gaW4gdGhpcyBhbmFseXNpcy4gTGV0J3Mgc2VlLi4uIEkndmUgaWRlbnRpZmllZDogYGF2aWNfYWRkX3ZjcHVfdG9fZ2FwcGlfd2FrZXVwX2xpc3RgLCBgYXZpY19yZW1vdmVfdmNwdV9mcm9tX2dhcHBpX3dha2V1cF9saXN0YCwgYGF2aWNfZ2FwcGlfd2FrZXVwX2hhbmRsZXJgLCBgX19hbWRfaW9tbXVfdXBkYXRlX2dhYCwgYGFtZF9pb21tdV91cGRhdGVfZ2FgLCBhbmQgYGFtZF9pb21tdV9hY3RpdmF0ZV9ndWVzdF9tb2RlYC4gSSdtIGFsc28gZ29pbmcgdG8gYWRkIGEgZmV3IG1vcmUgdG8gdGhlIGxpc3QgdGhhdCBJJ3ZlIGZvdW5kIHdoaWxlIGxvb2tpbmcgb3ZlciB0aGUgY29kZTogYGF2aWNfaW5pdF92Y3B1YCwgYGF2aWNfZGVzdHJveV92Y3B1YCwgYGF2aWNfcGlfdXBkYXRlX2lydGVgIGFuZCBgYXZpY191cGRhdGVfaW9tbXVfdmNwdV9hZmZpbml0eWAuIEknbGwgd2FudCB0byBpbmNsdWRlIGFsbCBvZiB0aGVzZTogYGF2aWNfYWRkX3ZjcHVfdG9fZ2FwcGlfd2FrZXVwX2xpc3RgLCBgYXZpY19yZW1vdmVfdmNwdV9mcm9tX2dhcHBpX3dha2V1cF9saXN0YCwgYGF2aWNfZ2FwcGlfd2FrZXVwX2hhbmRsZXJgLCBgYXZpY19waV91cGRhdGVfaXJ0ZWAsIGBhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5YCwgYF9fYW1kX2lvbW11X3VwZGF0ZV9nYWAsIGBhbWRfaW9tbXVfdXBkYXRlX2dhYCwgYW5kIGBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZWAuXG5cbk5leHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoaWNoIG9mIHRoZXNlIGZ1bmN0aW9ucyBhcmUgXCJob3QgcGF0aFwiIOKAkyB3aGljaCBvbmVzIGFyZSBjYWxsZWQgZnJlcXVlbnRseSBhbmQgYXJlIHRoZXJlZm9yZSBsaWtlbHkgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MuIExvb2tpbmcgYXQgYGF2aWNfdXBkYXRlX2lvbW11X3ZjcHVfYWZmaW5pdHlgLCBJIHNlZSBpdCdzIGNhbGxlZCBmcm9tIGBfX2F2aWNfdmNwdV9sb2FkYCBhbmQgYF9fYXZpY192Y3B1X3B1dGAsIHdoaWNoIGFyZSBpbnZvbHZlZCB3aGVuIGEgdkNQVSBpcyBzY2hlZHVsZWQgaW4gb3Igb3V0LiBUaGlzIGlzIHNvbWV3aGF0IGhvdCwgYnV0IG5vdCBhcyBob3QgYXMsIHNheSwgVk0tZXhpdCBoYW5kbGVycy4gYGF2aWNfcGlfdXBkYXRlX2lydGVgIHVwZGF0ZXMgdGhlIElSVEUsIGJ1dCBpdCdzIG5vdCBob3QsIG5vdCBjYWxsZWQgY29uc3RhbnRseS4gYGF2aWNfZ2FwcGlfd2FrZXVwX2hhbmRsZXJgIGlzIHRyaWdnZXJlZCBieSBwb3N0ZWQgaW50ZXJydXB0IHdha2V1cHMuIGBfX2FtZF9pb21tdV91cGRhdGVfZ2FgIGlzIGNhbGxlZCBmcm9tIGBhbWRfaW9tbXVfdXBkYXRlX2dhYCBhbmQgYGFtZF9pb21tdV9hY3RpdmF0ZV9ndWVzdF9tb2RlYCwgYW5kIHRoZXNlIHR3byBhcmUgZ29pbmcgdG8gYmUgaW1wb3J0YW50IHRvIGxvb2sgYXQuIFNvIG15IHJldmlzZWQgbGlzdCBvZiBmdW5jdGlvbnMgdG8gZm9jdXMgb24gbG9va3MgbGlrZSB0aGlzOlxuXG4qICAgYGF2aWNfYWRkX3ZjcHVfdG9fZ2FwcGlfd2FrZXVwX2xpc3RgXG4qICAgYGF2aWNfcmVtb3ZlX3ZjcHVfZnJvbV9nYXBwaV93YWtldXBfbGlzdGBcbiogICBgYXZpY19nYXBwaV93YWtldXBfaGFuZGxlcmBcbiogICBgYXZpY19waV91cGRhdGVfaXJ0ZWBcbiogICBgYXZpY191cGRhdGVfaW9tbXVfdmNwdV9hZmZpbml0eWBcbiogICBgX19hbWRfaW9tbXVfdXBkYXRlX2dhYFxuKiAgIGBhbWRfaW9tbXVfdXBkYXRlX2dhYFxuKiAgIGBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZWBcblxuTm93LCBqdXN0IHRvIGJlIHRob3JvdWdoLCBJJ2xsIHF1aWNrbHkgdmVyaWZ5IHRoYXQgdGhlc2UgZnVuY3Rpb25zIGRvIGluZGVlZCBleGlzdCBhbmQgdGhhdCBJJ3ZlIGdvdCB0aGUgbmFtZXMgc3BlbGxlZCBjb3JyZWN0bHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNDg4LCJPdXRwdXRUb2tlbnMiOjExNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDEzOjM4OjU2LjM1NDM2MjEyNloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMxNzUwMzY1MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIoYXZpY19hZGRfdmNwdV90b19nYXBwaV93YWtldXBfbGlzdHxhdmljX3JlbW92ZV92Y3B1X2Zyb21fZ2FwcGlfd2FrZXVwX2xpc3R8YXZpY19nYXBwaV93YWtldXBfaGFuZGxlcnxhdmljX3BpX3VwZGF0ZV9pcnRlfGF2aWNfdXBkYXRlX2lvbW11X3ZjcHVfYWZmaW5pdHl8X19hbWRfaW9tbXVfdXBkYXRlX2dhfGFtZF9pb21tdV91cGRhdGVfZ2F8YW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYz04NzI9aW50IGF2aWNfaW5pdF92Y3B1KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtODk0LVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjg5NTpzdGF0aWMgdm9pZCBhdmljX2FkZF92Y3B1X3RvX2dhcHBpX3dha2V1cF9saXN0KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBpbnQgY3B1KVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTg5Ni17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy05MDktXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6OTEwOnN0YXRpYyB2b2lkIGF2aWNfcmVtb3ZlX3ZjcHVfZnJvbV9nYXBwaV93YWtldXBfbGlzdChzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgaW50IGNwdSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy05MTEte1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM9OTIzPXZvaWQgYXZpY19kZXN0cm95X3ZjcHUoc3RydWN0IHZjcHVfc3ZtICpzdm0pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy05MjUtXFx0aWYgKHN2bS1cXHUwMDNlZ2FwcGlfY3B1ICE9IC0xIFxcdTAwMjZcXHUwMDI2IGFtZF9pb21tdV9nYXBwaSkge1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjkyNjpcXHRcXHRhdmljX3JlbW92ZV92Y3B1X2Zyb21fZ2FwcGlfd2FrZXVwX2xpc3Qoc3ZtLCBzdm0tXFx1MDAzZWdhcHBpX2NwdSk7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtOTI3LVxcdFxcdHN2bS1cXHUwMDNlZ2FwcGlfY3B1ID0gLTE7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYz05Mzc9c3RhdGljIHZvaWQgc3ZtX2lyX2xpc3RfZGVsKHN0cnVjdCBrdm1fa2VybmVsX2lycWZkICppcnFmZClcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTk1MC1cXHRpZiAoYW1kX2lvbW11X2dhcHBpIFxcdTAwMjZcXHUwMDI2IGxpc3RfZW1wdHkoXFx1MDAyNnN2bS1cXHUwMDNlaXJfbGlzdCkpXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6OTUxOlxcdFxcdGF2aWNfcmVtb3ZlX3ZjcHVfZnJvbV9nYXBwaV93YWtldXBfbGlzdChzdm0sIHN2bS1cXHUwMDNlZ2FwcGlfY3B1KTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy05NTItXFx0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnN2bS1cXHUwMDNlaXJfbGlzdF9sb2NrLCBmbGFncyk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy05NTQtXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6OTU1OmludCBhdmljX3BpX3VwZGF0ZV9pcnRlKHN0cnVjdCBrdm1fa2VybmVsX2lycWZkICppcnFmZCwgc3RydWN0IGt2bSAqa3ZtLFxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTk1Ni1cXHRcXHRcXHR1bnNpZ25lZCBpbnQgaG9zdF9pcnEsIHVpbnQzMl90IGd1ZXN0X2lycSxcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTEwMTMtXFx0XFx0XFx0XFx0aWYgKGxpc3RfZW1wdHkoXFx1MDAyNnN2bS1cXHUwMDNlaXJfbGlzdCkpIHtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzoxMDE0OlxcdFxcdFxcdFxcdFxcdGF2aWNfYWRkX3ZjcHVfdG9fZ2FwcGlfd2FrZXVwX2xpc3Qoc3ZtLCBzdm0tXFx1MDAzZWdhcHBpX2NwdSk7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMTAxNS1cXHRcXHRcXHRcXHRcXHRpc192Y3B1X3dhaXRpbmcgPSB0cnVlO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMTAzOS1cXHRcXHRpZiAoaXNfdmNwdV93YWl0aW5nKVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjEwNDA6XFx0XFx0XFx0YXZpY19yZW1vdmVfdmNwdV9mcm9tX2dhcHBpX3dha2V1cF9saXN0KHN2bSwgc3ZtLVxcdTAwM2VnYXBwaV9jcHUpO1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTEwNDEtXFx0XFx0cmV0dXJuIHJldDtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jPTEwNDY9ZW51bSBhdmljX3ZjcHVfYWN0aW9uIHtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTEwNzMtXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MTA3NDpzdGF0aWMgdm9pZCBhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGFwaWNpZCxcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMDc1LVxcdFxcdFxcdFxcdFxcdCAgICBpbnQgY3B1LCBlbnVtIGF2aWNfdmNwdV9hY3Rpb24gYWN0aW9uKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMTA5OS1cXHRcXHRcXHQgKi9cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzoxMTAwOlxcdFxcdFxcdGF2aWNfcmVtb3ZlX3ZjcHVfZnJvbV9nYXBwaV93YWtldXBfbGlzdChzdm0sIHN2bS1cXHUwMDNlZ2FwcGlfY3B1KTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMTAxLVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMTEwNC1cXHRcXHRhcGljaWQgPSBrdm1fY3B1X2dldF9hcGljaWQoc3ZtLVxcdTAwM2VnYXBwaV9jcHUpO1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjExMDU6XFx0XFx0YXZpY19hZGRfdmNwdV90b19nYXBwaV93YWtldXBfbGlzdChzdm0sIHN2bS1cXHUwMDNlZ2FwcGlfY3B1KTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMTA2LVxcdH1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTExMTEtXFx0XFx0aWYgKCEoYWN0aW9uIFxcdTAwMjYgQVZJQ19UT0dHTEVfT05fT0ZGKSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzoxMTEyOlxcdFxcdFxcdFdBUk5fT05fT05DRShhbWRfaW9tbXVfdXBkYXRlX2dhKGRhdGEsIGFwaWNpZCwgd2FrZXVwX2ludHIsIGlzX3J1bm5pbmcpKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMTEzLVxcdFxcdGVsc2UgaWYgKGlzX3J1bm5pbmcpXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MTExNDpcXHRcXHRcXHRXQVJOX09OX09OQ0UoYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUoZGF0YSwgYXBpY2lkLCB3YWtldXBfaW50cixcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMTE1LVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGlzX3J1bm5pbmcpKTtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jPTExMjE9c3RhdGljIHZvaWQgX19hdmljX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMTY4LVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjExNjk6XFx0YXZpY191cGRhdGVfaW9tbXVfdmNwdV9hZmZpbml0eSh2Y3B1LCBoX3BoeXNpY2FsX2lkLCBjcHUsIGFjdGlvbik7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMTE3MC1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jPTExODk9c3RhdGljIHZvaWQgX19hdmljX3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZW51bSBhdmljX3ZjcHVfYWN0aW9uIGFjdGlvbilcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTEyMTEtXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MTIxMjpcXHRhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5KHZjcHUsIC0xLCAtMSwgYWN0aW9uKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMjEzLVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM9MTM0ND1zdGF0aWMgYm9vbCBfX2luaXQgYXZpY193YW50X2F2aWNfZW5hYmxlZCh2b2lkKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMTM4NC1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzoxMzg1OnN0YXRpYyB2b2lkIGF2aWNfZ2FwcGlfd2FrZXVwX2hhbmRsZXIodm9pZClcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMzg2LXtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jPTE0MDY9Ym9vbCBfX2luaXQgYXZpY19oYXJkd2FyZV9zZXR1cCh2b2lkKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMTQ0Mi1cXHRhbWRfaW9tbXVfcmVnaXN0ZXJfZ2FfbG9nX25vdGlmaWVyKFxcdTAwMjZhdmljX2dhX2xvZ19ub3RpZmllcik7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MTQ0MzpcXHRrdm1fc2V0X3Bvc3RlZF9pbnRyX3dha2V1cF9oYW5kbGVyKFxcdTAwMjZhdmljX2dhcHBpX3dha2V1cF9oYW5kbGVyKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xNDQ0LVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz01MjcyPXN0cnVjdCBrdm1feDg2X29wcyBzdm1feDg2X29wcyBfX2luaXRkYXRhID0ge1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01Mzc3LVxcdC5kZWxpdmVyX2ludGVycnVwdCA9IHN2bV9kZWxpdmVyX2ludGVycnVwdCxcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjUzNzg6XFx0LnBpX3VwZGF0ZV9pcnRlID0gYXZpY19waV91cGRhdGVfaXJ0ZSxcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTUzNzktXFx0LnNldHVwX21jZSA9IHN2bV9zZXR1cF9tY2UsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oPTkyMD12b2lkIGF2aWNfcmVmcmVzaF9hcGljdl9leGVjX2N0cmwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oOjkyMTppbnQgYXZpY19waV91cGRhdGVfaXJ0ZShzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFmZCAqaXJxZmQsIHN0cnVjdCBrdm0gKmt2bSxcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTkyMi1cXHRcXHRcXHR1bnNpZ25lZCBpbnQgaG9zdF9pcnEsIHVpbnQzMl90IGd1ZXN0X2lycSxcXG4tLVxcbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmM9Mzk1ND1zdGF0aWMgY29uc3Qgc3RydWN0IGlycV9kb21haW5fb3BzIGFtZF9pcl9kb21haW5fb3BzID0ge1xcbi0tXFxuZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuYy0zOTYxLVxcbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmM6Mzk2MjpzdGF0aWMgdm9pZCBfX2FtZF9pb21tdV91cGRhdGVfZ2Eoc3RydWN0IGlydGVfZ2EgKmVudHJ5LCBpbnQgYXBpY2lkLFxcbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmMtMzk2My1cXHRcXHRcXHRcXHQgIGJvb2wgd2FrZXVwX2ludHIsIGJvb2wgaXNfcnVubmluZylcXG4tLVxcbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmMtNDAwNC0gKi9cXG5kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jOjQwMDU6aW50IGFtZF9pb21tdV91cGRhdGVfZ2Eodm9pZCAqZGF0YSwgaW50IGFwaWNpZCwgYm9vbCB3YWtldXBfaW50ciwgYm9vbCBpc19ydW5uaW5nKVxcbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmMtNDAwNi17XFxuLS1cXG5kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jLTQwMTgtXFxuZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuYzo0MDE5OlxcdF9fYW1kX2lvbW11X3VwZGF0ZV9nYShlbnRyeSwgYXBpY2lkLCB3YWtldXBfaW50ciwgaXNfcnVubmluZyk7XFxuZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuYy00MDIwLVxcbi0tXFxuZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuYy00MDIzLX1cXG5kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jOjQwMjQ6RVhQT1JUX1NZTUJPTChhbWRfaW9tbXVfdXBkYXRlX2dhKTtcXG5kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jLTQwMjUtXFxuZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuYzo0MDI2OmludCBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZSh2b2lkICpkYXRhLCBpbnQgYXBpY2lkLCBib29sIHdha2V1cF9pbnRyLCBib29sIGlzX3J1bm5pbmcpXFxuZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuYy00MDI3LXtcXG4tLVxcbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmMtNDA0OC1cXG5kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jOjQwNDk6XFx0X19hbWRfaW9tbXVfdXBkYXRlX2dhKGVudHJ5LCBhcGljaWQsIHdha2V1cF9pbnRyLCBpc19ydW5uaW5nKTtcXG5kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jLTQwNTAtXFxuLS1cXG5kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jLTQwNTMtfVxcbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmM6NDA1NDpFWFBPUlRfU1lNQk9MKGFtZF9pb21tdV9hY3RpdmF0ZV9ndWVzdF9tb2RlKTtcXG5kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jLTQwNTUtXFxuLS1cXG5kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jPTQwODg9c3RhdGljIGludCBhbWRfaXJfc2V0X3ZjcHVfYWZmaW5pdHkoc3RydWN0IGlycV9kYXRhICpkYXRhLCB2b2lkICppbmZvKVxcbi0tXFxuZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuYy00MTE5LVxcdFxcdGlmIChwaV9kYXRhLVxcdTAwM2Vpc19ndWVzdF9tb2RlKVxcbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmM6NDEyMDpcXHRcXHRcXHRyZXQgPSBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZShpcl9kYXRhLCBwaV9kYXRhLVxcdTAwM2VhcGljaWQsXFxuZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuYy00MTIxLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBwaV9kYXRhLVxcdTAwM2V3YWtldXBfaW50cixcXG4tLVxcbmluY2x1ZGUvbGludXgvYW1kLWlvbW11Lmg9MzE9ZXh0ZXJuIGludCBhbWRfaW9tbXVfcmVnaXN0ZXJfZ2FfbG9nX25vdGlmaWVyKGludCAoKm5vdGlmaWVyKSh1MzIpKTtcXG5pbmNsdWRlL2xpbnV4L2FtZC1pb21tdS5oLTMyLVxcbmluY2x1ZGUvbGludXgvYW1kLWlvbW11Lmg6MzM6ZXh0ZXJuIGludCBhbWRfaW9tbXVfdXBkYXRlX2dhKHZvaWQgKmRhdGEsIGludCBhcGljaWQsIGJvb2wgd2FrZXVwX2ludHIsXFxuaW5jbHVkZS9saW51eC9hbWQtaW9tbXUuaC0zNC1cXHRcXHRcXHQgICAgICAgYm9vbCBpc19ydW5uaW5nKTtcXG5pbmNsdWRlL2xpbnV4L2FtZC1pb21tdS5oOjM1OmV4dGVybiBpbnQgYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUodm9pZCAqZGF0YSwgaW50IGFwaWNpZCwgYm9vbCB3YWtldXBfaW50cixcXG5pbmNsdWRlL2xpbnV4L2FtZC1pb21tdS5oLTM2LVxcdFxcdFxcdFxcdFxcdCBib29sIGlzX3J1bm5pbmcpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9hbWQtaW9tbXUuaD00Mj1hbWRfaW9tbXVfcmVnaXN0ZXJfZ2FfbG9nX25vdGlmaWVyKGludCAoKm5vdGlmaWVyKSh1MzIpKVxcbi0tXFxuaW5jbHVkZS9saW51eC9hbWQtaW9tbXUuaC00Ni1cXG5pbmNsdWRlL2xpbnV4L2FtZC1pb21tdS5oOjQ3OnN0YXRpYyBpbmxpbmUgaW50IGFtZF9pb21tdV91cGRhdGVfZ2Eodm9pZCAqZGF0YSwgaW50IGFwaWNpZCwgYm9vbCB3YWtldXBfaW50cixcXG5pbmNsdWRlL2xpbnV4L2FtZC1pb21tdS5oLTQ4LVxcdFxcdFxcdFxcdCAgICAgIGJvb2wgaXNfcnVubmluZylcXG4tLVxcbmluY2x1ZGUvbGludXgvYW1kLWlvbW11LmgtNTItXFxuaW5jbHVkZS9saW51eC9hbWQtaW9tbXUuaDo1MzpzdGF0aWMgaW5saW5lIGludCBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZSh2b2lkICpkYXRhLCBpbnQgYXBpY2lkLCBib29sIHdha2V1cF9pbnRyLFxcbmluY2x1ZGUvbGludXgvYW1kLWlvbW11LmgtNTQtXFx0XFx0XFx0XFx0XFx0XFx0Ym9vbCBpc19ydW5uaW5nKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxMzozOTowMC42NzE4NzI2NjlaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjUzNDA5OTYzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBHQVBQSSBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgcmV2aWV3ZWQgdGhpcyBwYXRjaCBhbmQgSSdtIHNlZWluZyBpdCdzIGZvY3VzZWQgb24gaW50cm9kdWNpbmcgR0FQUEkgKEd1ZXN0IEFQSUMgUG9zdGVkIEludGVycnVwdHMpIHN1cHBvcnQgZm9yIEFNRCBJT01NVSBhbmQgS1ZNIFNWTSBBVklDLCB3aGljaCBpcyBwcmVjaXNlbHkgdGhlIGtpbmQgb2YgbG93LWxldmVsIHZpcnR1YWxpemF0aW9uIGNoYW5nZSB0aGF0IGRlbWFuZHMgY2xvc2Ugc2NydXRpbnkuIEkgc2VlIHRoZSBmdW5jdGlvbiBuYW1lcyBhcmUgYWxsIGNvcnJlY3RseSBmb3JtYXR0ZWQuIEV4Y2VsbGVudC5cblxuU3BlY2lmaWNhbGx5LCBJ4oCZbGwgbmVlZCB0byBtYWtlIHN1cmUgdG8gaW5jbHVkZSB0aGVzZSBmdW5jdGlvbnMgaW4gbXkgdGVzdGluZyBzdWl0ZTogYGF2aWNfYWRkX3ZjcHVfdG9fZ2FwcGlfd2FrZXVwX2xpc3RgLCBgYXZpY19yZW1vdmVfdmNwdV9mcm9tX2dhcHBpX3dha2V1cF9saXN0YCwgYGF2aWNfZ2FwcGlfd2FrZXVwX2hhbmRsZXJgLCBgYXZpY19waV91cGRhdGVfaXJ0ZWAsIGBhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5YCwgYF9fYW1kX2lvbW11X3VwZGF0ZV9nYWAsIGBhbWRfaW9tbXVfdXBkYXRlX2dhYCwgYW5kIGBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZWAuIFRoZXNlIGFwcGVhciB0byBiZSB0aGUgY29yZSByb3V0aW5lcyBpbnZvbHZlZCBpbiBtYW5hZ2luZyB0aGUgR0FQUEkgd2FrZXVwIGxpc3QgYW5kIHVwZGF0aW5nIHRoZSBJUlRFcywgd2hpY2ggd2lsbCBiZSBjcml0aWNhbCB0byB0aGUgaW50ZWdyaXR5IG9mIHRoaXMgaW1wbGVtZW50YXRpb24uXG5cbk9uIHRoZSBjb25maWd1cmF0aW9uIGZyb250LCBJIHNlZSB0aGUgcGF0Y2ggbGV2ZXJhZ2VzIGBLVk1fQU1EYCwgYEFNRF9JT01NVWAsIGFuZCBgSVJRX1JFTUFQYCwgd2hpY2ggSSBjYW4gbm93IHZlcmlmeSBhcmUgaW5jbHVkZWQgaW4gbXkgY3VycmVudCB0ZXN0aW5nIGVudmlyb25tZW50LlxuXG5UaGUgcmVhc29uaW5nIHByb3ZpZGVkIGNvcnJlY3RseSBpZGVudGlmaWVzIHRoaXMgYXMgYSBzaWduaWZpY2FudCBjaGFuZ2UgYWZmZWN0aW5nIGhvdyBwb3N0ZWQgaW50ZXJydXB0cyBhcmUgaGFuZGxlZCBhbmQgaG93IHRoZSBLVk0gY29yZSB2aXJ0dWFsaXplcyBndWVzdCBBUElDcy4gVGhlIElSVEUgbW9kaWZpY2F0aW9uIGFzcGVjdCBpcyBwYXJ0aWN1bGFybHkgaW50ZXJlc3RpbmcgYW5kIGEgcG90ZW50aWFsIHNvdXJjZSBvZiBzdWJ0bGUgYnVncy4gR2l2ZW4gdGhlIGZ1bmRhbWVudGFsIG5hdHVyZSBvZiB0aGVzZSBjaGFuZ2VzLCB0aGlzIGlzIGFic29sdXRlbHkgYSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIEluIGZhY3QsIHRoaXMgcGF0Y2ggaXMgZ29pbmcgdG8gcmVxdWlyZSBxdWl0ZSBhIGJpdCBvZiB3b3JrLCBzbyBsZXQncyBjYWxsIHNldC1yZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjYzMywiT3V0cHV0VG9rZW5zIjoyMjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTM6Mzk6MDcuMjA1OTc1NzlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQ2NTk3OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTV9BTURcIixcbiAgICBcIkFNRF9JT01NVVwiLFxuICAgIFwiSVJRX1JFTUFQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYXZpY19hZGRfdmNwdV90b19nYXBwaV93YWtldXBfbGlzdFwiLFxuICAgIFwiYXZpY19yZW1vdmVfdmNwdV9mcm9tX2dhcHBpX3dha2V1cF9saXN0XCIsXG4gICAgXCJhdmljX2dhcHBpX3dha2V1cF9oYW5kbGVyXCIsXG4gICAgXCJhdmljX3BpX3VwZGF0ZV9pcnRlXCIsXG4gICAgXCJhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5XCIsXG4gICAgXCJfX2FtZF9pb21tdV91cGRhdGVfZ2FcIixcbiAgICBcImFtZF9pb21tdV91cGRhdGVfZ2FcIixcbiAgICBcImFtZF9pb21tdV9hY3RpdmF0ZV9ndWVzdF9tb2RlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBHQVBQSSAoR3Vlc3QgQVBJQyBQb3N0ZWQgSW50ZXJydXB0cykgc3VwcG9ydCBmb3IgQU1EIElPTU1VIGFuZCBLVk0gU1ZNIEFWSUMuIEl0IG1vZGlmaWVzIHRoZSBJUlRFIGNvbmZpZ3VyYXRpb24gZm9yIHBvc3RlZCBpbnRlcnJ1cHRzIGFuZCBpbnRyb2R1Y2VzIGEgbmV3IHdha2V1cCBsaXN0IGZvciBHQVBQSSBpbiBLVk0uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIHZpcnR1YWxpemF0aW9uIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTV9BTURcIixcbiAgICBcIkFNRF9JT01NVVwiLFxuICAgIFwiSVJRX1JFTUFQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYXZpY19hZGRfdmNwdV90b19nYXBwaV93YWtldXBfbGlzdFwiLFxuICAgIFwiYXZpY19yZW1vdmVfdmNwdV9mcm9tX2dhcHBpX3dha2V1cF9saXN0XCIsXG4gICAgXCJhdmljX2dhcHBpX3dha2V1cF9oYW5kbGVyXCIsXG4gICAgXCJhdmljX3BpX3VwZGF0ZV9pcnRlXCIsXG4gICAgXCJhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5XCIsXG4gICAgXCJfX2FtZF9pb21tdV91cGRhdGVfZ2FcIixcbiAgICBcImFtZF9pb21tdV91cGRhdGVfZ2FcIixcbiAgICBcImFtZF9pb21tdV9hY3RpdmF0ZV9ndWVzdF9tb2RlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBHQVBQSSAoR3Vlc3QgQVBJQyBQb3N0ZWQgSW50ZXJydXB0cykgc3VwcG9ydCBmb3IgQU1EIElPTU1VIGFuZCBLVk0gU1ZNIEFWSUMuIEl0IG1vZGlmaWVzIHRoZSBJUlRFIGNvbmZpZ3VyYXRpb24gZm9yIHBvc3RlZCBpbnRlcnJ1cHRzIGFuZCBpbnRyb2R1Y2VzIGEgbmV3IHdha2V1cCBsaXN0IGZvciBHQVBQSSBpbiBLVk0uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIHZpcnR1YWxpemF0aW9uIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowf78rt[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-13 13:17:50 +0000 UTC FinishedAt: 2026-07-13 13:39:09 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "8cd9520d35a6c38db6567e97dd93b1f11f185dc6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM_AMD", "AMD_IOMMU", "IRQ_REMAP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "8cd9520d35a6c38db6567e97dd93b1f11f185dc6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM_AMD", "AMD_IOMMU", "IRQ_REMAP" ], "series_id": "f5e5bac2-2e5c-4474-8d56-7a5eca46524b" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "avic_add_vcpu_to_gappi_wakeup_list", "avic_remove_vcpu_from_gappi_wakeup_list", "avic_gappi_wakeup_handler", "avic_pi_update_irte", "avic_update_iommu_vcpu_affinity", "__amd_iommu_update_ga", "amd_iommu_update_ga", "amd_iommu_activate_guest_mode" ], "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+CgkJCTx0ZD4yMDI2LzA3LzEzIDEzOjM2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTV9BTUQmIzM0OywKICAgICYjMzQ7QU1EX0lPTU1VJiMzNDssCiAgICAmIzM0O0lSUV9SRU1BUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2F2aWNfYWRkX3ZjcHVfdG9fZ2FwcGlfd2FrZXVwX2xpc3QmIzM0OywKICAgICYjMzQ7YXZpY19yZW1vdmVfdmNwdV9mcm9tX2dhcHBpX3dha2V1cF9saXN0JiMzNDssCiAgICAmIzM0O2F2aWNfZ2FwcGlfd2FrZXVwX2hhbmRsZXImIzM0OywKICAgICYjMzQ7YXZpY19waV91cGRhdGVfaXJ0ZSYjMzQ7LAogICAgJiMzNDthdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5JiMzNDssCiAgICAmIzM0O19fYW1kX2lvbW11X3VwZGF0ZV9nYSYjMzQ7LAogICAgJiMzNDthbWRfaW9tbXVfdXBkYXRlX2dhJiMzNDssCiAgICAmIzM0O2FtZF9pb21tdV9hY3RpdmF0ZV9ndWVzdF9tb2RlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgR0FQUEkgKEd1ZXN0IEFQSUMgUG9zdGVkIEludGVycnVwdHMpIHN1cHBvcnQgZm9yIEFNRCBJT01NVSBhbmQgS1ZNIFNWTSBBVklDLiBJdCBtb2RpZmllcyB0aGUgSVJURSBjb25maWd1cmF0aW9uIGZvciBwb3N0ZWQgaW50ZXJydXB0cyBhbmQgaW50cm9kdWNlcyBhIG5ldyB3YWtldXAgbGlzdCBmb3IgR0FQUEkgaW4gS1ZNLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSB2aXJ0dWFsaXphdGlvbiBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxMzozNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGMwMGM1YWNkZDQyYjQwZGIyMGY0MWMwMTlmOTkxNjg5NTYzODBlMWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCAxMyAxMzozNjoyMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0XG5pbmRleCA5NzAwN2Y0ZjY5ZDRlOC4uZDI3ZjEwY2JiMDA0Y2MgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHRcbkBAIC00NTUsNyAmIzQzOzQ1NSw4IEBAIEtlcm5lbCBwYXJhbWV0ZXJzXG4gXHRcdFx0XHQgICAgICAgICAgdG8gNCBLaUIuXG4gXHRcdFx0djJfcGdzaXplc19vbmx5IC0gTGltaXQgcGFnZS1zaXplcyB1c2VkIGZvciB2MSBwYWdlLXRhYmxlc1xuIFx0XHRcdFx0ICAgICAgICAgIHRvIDRLaUIvMk1pYi8xR2lCLlxuLVxuJiM0MztcdFx0XHRnYXBwaVx0XHQtIFVzZSBHQVBQSSBpbnN0ZWFkIG9mIEdBTE9HIGZvciB2Q1BVXG4mIzQzO1x0XHRcdFx0XHQgIHdha2V1cCBub3RpZmljYXRpb24uXG4gXG4gXHRhbWRfaW9tbXVfZHVtcD1cdFtIVyxYODYtNjRdXG4gXHRcdFx0RW5hYmxlIEFNRCBJT01NVSBkcml2ZXIgb3B0aW9uIHRvIGR1bXAgdGhlIEFDUEkgdGFibGVcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcnFfcmVtYXBwaW5nLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcnFfcmVtYXBwaW5nLmhcbmluZGV4IDM3Yjk0ZjQ4NGVmMzM4Li5hZjBjZGZhMzJjNDQ3ZiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lycV9yZW1hcHBpbmcuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaXJxX3JlbWFwcGluZy5oXG5AQCAtMzUsOCAmIzQzOzM1LDkgQEAgc3RydWN0IGFtZF9pb21tdV9waV9kYXRhIHtcbiBcdHU2NCB2YXBpY19hZGRyO1x0XHQvKiBQaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSB2Q1BVJiMzOTtzIHZBUElDLiAqL1xuIFx0dTMyIGdhX3RhZztcbiBcdHUzMiB2ZWN0b3I7XHRcdC8qIEd1ZXN0IHZlY3RvciBvZiB0aGUgaW50ZXJydXB0ICovXG4tXHRpbnQgY3B1O1xuLVx0Ym9vbCBnYV9sb2dfaW50cjtcbiYjNDM7XHRpbnQgYXBpY2lkO1xuJiM0MztcdGJvb2wgd2FrZXVwX2ludHI7XG4mIzQzO1x0Ym9vbCBpc19ydW5uaW5nO1xuIFx0Ym9vbCBpc19ndWVzdF9tb2RlO1xuIFx0dm9pZCAqaXJfZGF0YTtcbiB9O1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmhcbmluZGV4IGJjZmViNWU3YzBlZGYyLi5hZGQ4YjcyNzRjYzJmOCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaFxuQEAgLTI1OSwxMSAmIzQzOzI1OSwxMiBAQCBzdHJ1Y3QgX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKSB2bWNiX2NvbnRyb2xfYXJlYSB7XG4gI2RlZmluZSBBVklDX0xPR0lDQUxfSURfRU5UUllfVkFMSURfTUFTS1x0XHQoMSBcdTAwM2NcdTAwM2MgMzEpXG4gXG4gLypcbi0gKiBHQV9MT0dfSU5UUiBpcyBhIHN5bnRoZXRpYyBmbGFnIHRoYXQmIzM5O3MgbmV2ZXIgcHJvcGFnYXRlZCB0byBoYXJkd2FyZS12aXNpYmxlXG4tICogdGFibGVzLiAgR0FfTE9HX0lOVFIgaXMgc2V0IGlmIHRoZSB2Q1BVIG5lZWRzIGRldmljZSBwb3N0ZWQgSVJRcyB0byBnZW5lcmF0ZVxuLSAqIEdBIGxvZyBpbnRlcnJ1cHRzIHRvIHdha2UgdGhlIHZDUFUgKGJlY2F1c2UgaXQmIzM5O3MgYmxvY2tpbmcgb3IgYWJvdXQgdG8gYmxvY2spLlxuJiM0MzsgKiBXQUtFVVBfSU5UUiBpcyBhIHN5bnRoZXRpYyBmbGFnIHRoYXQmIzM5O3MgbmV2ZXIgcHJvcGFnYXRlZCB0byBoYXJkd2FyZS12aXNpYmxlXG4mIzQzOyAqIHRhYmxlcy4gIFdBS0VVUF9JTlRSIGlzIHNldCBpZiB0aGUgdkNQVSBuZWVkcyBkZXZpY2UgcG9zdGVkIElSUXMgdG8gZ2VuZXJhdGVcbiYjNDM7ICogR0EgbG9nL0dBUFBJIGludGVycnVwdHMgdG8gd2FrZSB0aGUgdkNQVSAoYmVjYXVzZSBpdCYjMzk7cyBibG9ja2luZyBvciBhYm91dCB0b1xuJiM0MzsgKiBibG9jaykuXG4gICovXG4tI2RlZmluZSBBVklDX1BIWVNJQ0FMX0lEX0VOVFJZX0dBX0xPR19JTlRSXHRcdEJJVF9VTEwoNjEpXG4mIzQzOyNkZWZpbmUgQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9XQUtFVVBfSU5UUlx0XHRCSVRfVUxMKDYxKVxuIFxuICNkZWZpbmUgQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9IT1NUX1BIWVNJQ0FMX0lEX01BU0tcdEdFTk1BU0tfVUxMKDExLCAwKVxuICNkZWZpbmUgQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9CQUNLSU5HX1BBR0VfTUFTS1x0R0VOTUFTS19VTEwoNTEsIDEyKVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vYXZpYy5jIGIvYXJjaC94ODYva3ZtL3N2bS9hdmljLmNcbmluZGV4IGNkZDVhNmRjNjQ2ZjExLi45ODJhNTk4ODUzMmZmNCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vYXZpYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuY1xuQEAgLTYzLDYgJiM0Mzs2Myw5IEBAXG4gXHRnYV90YWc7XHRcdFx0XHRcdFx0XHRcdFxcXG4gfSlcbiBcbiYjNDM7c3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBsaXN0X2hlYWQsIGdhcHBpX3ZjcHVfd2FrZXVwX2xpc3QpO1xuJiM0MztzdGF0aWMgREVGSU5FX1BFUl9DUFUocmF3X3NwaW5sb2NrX3QsIGdhcHBpX3ZjcHVfd2FrZXVwX2xpc3RfbG9jayk7XG4mIzQzO1xuIHN0YXRpY19hc3NlcnQoX19BVklDX0dBVEFHKEFWSUNfVk1fSURfTUFTSywgQVZJQ19WQ1BVX0lEWF9NQVNLKSA9PSAtMXUpO1xuIFxuICNkZWZpbmUgQVZJQ19BVVRPX01PREUgLTFcbkBAIC04NzQsNiAmIzQzOzg3Nyw5IEBAIGludCBhdmljX2luaXRfdmNwdShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNnN2bS1cdTAwM2Vpcl9saXN0KTtcbiBcdHJhd19zcGluX2xvY2tfaW5pdChcdTAwMjZzdm0tXHUwMDNlaXJfbGlzdF9sb2NrKTtcbiBcbiYjNDM7XHRJTklUX0xJU1RfSEVBRChcdTAwMjZzdm0tXHUwMDNlZ2FwcGlfdmNwdV93YWtldXBfbGlzdCk7XG4mIzQzO1x0c3ZtLVx1MDAzZWdhcHBpX2NwdSA9IC0xO1xuJiM0MztcbiBcdGlmICghZW5hYmxlX2FwaWN2IHx8ICFpcnFjaGlwX2luX2tlcm5lbCh2Y3B1LVx1MDAzZWt2bSkpXG4gXHRcdHJldHVybiAwO1xuIFxuQEAgLTg4Niw2ICYjNDM7ODkyLDQyIEBAIGludCBhdmljX2luaXRfdmNwdShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBhdmljX2FkZF92Y3B1X3RvX2dhcHBpX3dha2V1cF9saXN0KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBpbnQgY3B1KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGxpc3RfaGVhZCAqd2FrZXVwX2xpc3Q7XG4mIzQzO1x0cmF3X3NwaW5sb2NrX3QgKnNwaW5sb2NrO1xuJiM0MztcbiYjNDM7XHRpZiAoV0FSTl9PTih1bmxpa2VseShjcHUgXHUwMDNjIDApKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0d2FrZXVwX2xpc3QgPSBcdTAwMjZwZXJfY3B1KGdhcHBpX3ZjcHVfd2FrZXVwX2xpc3QsIGNwdSk7XG4mIzQzO1x0c3BpbmxvY2sgPSBcdTAwMjZwZXJfY3B1KGdhcHBpX3ZjcHVfd2FrZXVwX2xpc3RfbG9jaywgY3B1KTtcbiYjNDM7XHRndWFyZChyYXdfc3BpbmxvY2tfaXJxc2F2ZSkoc3BpbmxvY2spO1xuJiM0MztcdGlmIChsaXN0X2VtcHR5KFx1MDAyNnN2bS1cdTAwM2VnYXBwaV92Y3B1X3dha2V1cF9saXN0KSlcbiYjNDM7XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2c3ZtLVx1MDAzZWdhcHBpX3ZjcHVfd2FrZXVwX2xpc3QsIHdha2V1cF9saXN0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgYXZpY19yZW1vdmVfdmNwdV9mcm9tX2dhcHBpX3dha2V1cF9saXN0KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBpbnQgY3B1KVxuJiM0Mzt7XG4mIzQzO1x0cmF3X3NwaW5sb2NrX3QgKnNwaW5sb2NrO1xuJiM0MztcbiYjNDM7XHRpZiAoV0FSTl9PTih1bmxpa2VseShjcHUgXHUwMDNjIDApKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0c3BpbmxvY2sgPSBcdTAwMjZwZXJfY3B1KGdhcHBpX3ZjcHVfd2FrZXVwX2xpc3RfbG9jaywgY3B1KTtcbiYjNDM7XHRndWFyZChyYXdfc3BpbmxvY2tfaXJxc2F2ZSkoc3BpbmxvY2spO1xuJiM0MztcdGlmICghbGlzdF9lbXB0eShcdTAwMjZzdm0tXHUwMDNlZ2FwcGlfdmNwdV93YWtldXBfbGlzdCkpXG4mIzQzO1x0XHRsaXN0X2RlbF9pbml0KFx1MDAyNnN2bS1cdTAwM2VnYXBwaV92Y3B1X3dha2V1cF9saXN0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBhdmljX2Rlc3Ryb3lfdmNwdShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcbiYjNDM7e1xuJiM0MztcdGlmIChzdm0tXHUwMDNlZ2FwcGlfY3B1ICE9IC0xIFx1MDAyNlx1MDAyNiBhbWRfaW9tbXVfZ2FwcGkpIHtcbiYjNDM7XHRcdGF2aWNfcmVtb3ZlX3ZjcHVfZnJvbV9nYXBwaV93YWtldXBfbGlzdChzdm0sIHN2bS1cdTAwM2VnYXBwaV9jcHUpO1xuJiM0MztcdFx0c3ZtLVx1MDAzZWdhcHBpX2NwdSA9IC0xO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiB2b2lkIGF2aWNfYXBpY3ZfcG9zdF9zdGF0ZV9yZXN0b3JlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHRhdmljX2hhbmRsZV9kZnJfdXBkYXRlKHZjcHUpO1xuQEAgLTg5NiwxMyAmIzQzOzkzOCwxOCBAQCBzdGF0aWMgdm9pZCBzdm1faXJfbGlzdF9kZWwoc3RydWN0IGt2bV9rZXJuZWxfaXJxZmQgKmlycWZkKVxuIHtcbiBcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGlycWZkLVx1MDAzZWlycV9ieXBhc3NfdmNwdTtcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4mIzQzO1x0c3RydWN0IHZjcHVfc3ZtICpzdm07XG4gXG4gXHRpZiAoIXZjcHUpXG4gXHRcdHJldHVybjtcbiBcbi1cdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ0b19zdm0odmNwdSktXHUwMDNlaXJfbGlzdF9sb2NrLCBmbGFncyk7XG4mIzQzO1x0c3ZtID0gdG9fc3ZtKHZjcHUpO1xuJiM0MztcbiYjNDM7XHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2c3ZtLVx1MDAzZWlyX2xpc3RfbG9jaywgZmxhZ3MpO1xuIFx0bGlzdF9kZWwoXHUwMDI2aXJxZmQtXHUwMDNldmNwdV9saXN0KTtcbi1cdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnRvX3N2bSh2Y3B1KS1cdTAwM2Vpcl9saXN0X2xvY2ssIGZsYWdzKTtcbiYjNDM7XHRpZiAoYW1kX2lvbW11X2dhcHBpIFx1MDAyNlx1MDAyNiBsaXN0X2VtcHR5KFx1MDAyNnN2bS1cdTAwM2Vpcl9saXN0KSlcbiYjNDM7XHRcdGF2aWNfcmVtb3ZlX3ZjcHVfZnJvbV9nYXBwaV93YWtldXBfbGlzdChzdm0sIHN2bS1cdTAwM2VnYXBwaV9jcHUpO1xuJiM0MztcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnN2bS1cdTAwM2Vpcl9saXN0X2xvY2ssIGZsYWdzKTtcbiB9XG4gXG4gaW50IGF2aWNfcGlfdXBkYXRlX2lydGUoc3RydWN0IGt2bV9rZXJuZWxfaXJxZmQgKmlycWZkLCBzdHJ1Y3Qga3ZtICprdm0sXG5AQCAtOTIzLDggJiM0Mzs5NzAsNiBAQCBpbnQgYXZpY19waV91cGRhdGVfaXJ0ZShzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFmZCAqaXJxZmQsIHN0cnVjdCBrdm0gKmt2bSxcbiBcdFx0ICogaWYgQVZJQyBpcyBlbmFibGVkL3VuaW5oaWJpdGVkIGluIHRoZSBmdXR1cmUuXG4gXHRcdCAqL1xuIFx0XHRzdHJ1Y3QgYW1kX2lvbW11X3BpX2RhdGEgcGlfZGF0YSA9IHtcbi1cdFx0XHQuZ2FfdGFnID0gQVZJQ19HQVRBRyh0b19rdm1fc3ZtKGt2bSktXHUwMDNlYXZpY192bV9pZCxcbi1cdFx0XHRcdFx0ICAgICB2Y3B1LVx1MDAzZXZjcHVfaWR4KSxcbiBcdFx0XHQuaXNfZ3Vlc3RfbW9kZSA9IGt2bV92Y3B1X2FwaWN2X2FjdGl2ZSh2Y3B1KSxcbiBcdFx0XHQudmFwaWNfYWRkciA9IGF2aWNfZ2V0X2JhY2tpbmdfcGFnZV9hZGRyZXNzKHRvX3N2bSh2Y3B1KSksXG4gXHRcdFx0LnZlY3RvciA9IHZlY3RvcixcbkBAIC05MzIsNiAmIzQzOzk3Nyw3IEBAIGludCBhdmljX3BpX3VwZGF0ZV9pcnRlKHN0cnVjdCBrdm1fa2VybmVsX2lycWZkICppcnFmZCwgc3RydWN0IGt2bSAqa3ZtLFxuIFx0XHRzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTtcbiBcdFx0dTY0IGVudHJ5O1xuIFx0XHRpbnQgcmV0O1xuJiM0MztcdFx0Ym9vbCBpc192Y3B1X3dhaXRpbmcgPSBmYWxzZTtcbiBcbiBcdFx0LypcbiBcdFx0ICogUHJldmVudCB0aGUgdkNQVSBmcm9tIGJlaW5nIHNjaGVkdWxlZCBvdXQgb3IgbWlncmF0ZWQgdW50aWxcbkBAIC05NDcsMTcgJiM0Mzs5OTMsMzMgQEAgaW50IGF2aWNfcGlfdXBkYXRlX2lydGUoc3RydWN0IGt2bV9rZXJuZWxfaXJxZmQgKmlycWZkLCBzdHJ1Y3Qga3ZtICprdm0sXG4gXHRcdCAqIHNjaGVkdWxlZCBvdXQsIEtWTSB3aWxsIHVwZGF0ZSB0aGUgcENQVSBpbmZvIHdoZW4gdGhlIHZDUFVcbiBcdFx0ICogaXMgYXdha2VuZWQgYW5kL29yIHNjaGVkdWxlZCBpbi4gIFNlZSBhbHNvIGF2aWNfdmNwdV9sb2FkKCkuXG4gXHRcdCAqL1xuJiM0MztcdFx0aWYgKGFtZF9pb21tdV9nYXBwaSlcbiYjNDM7XHRcdFx0cGlfZGF0YS5nYV90YWcgPSBQT1NURURfSU5UUl9XQUtFVVBfVkVDVE9SO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRwaV9kYXRhLmdhX3RhZyA9IEFWSUNfR0FUQUcodG9fa3ZtX3N2bShrdm0pLVx1MDAzZWF2aWNfdm1faWQsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICB2Y3B1LVx1MDAzZXZjcHVfaWR4KTtcbiYjNDM7XG4gXHRcdGVudHJ5ID0gc3ZtLVx1MDAzZWF2aWNfcGh5c2ljYWxfaWRfZW50cnk7XG4gXHRcdGlmIChlbnRyeSBcdTAwMjYgQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9JU19SVU5OSU5HX01BU0spIHtcbi1cdFx0XHRwaV9kYXRhLmNwdSA9IGVudHJ5IFx1MDAyNiBBVklDX1BIWVNJQ0FMX0lEX0VOVFJZX0hPU1RfUEhZU0lDQUxfSURfTUFTSztcbiYjNDM7XHRcdFx0cGlfZGF0YS5hcGljaWQgPSBlbnRyeSBcdTAwMjYgQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9IT1NUX1BIWVNJQ0FMX0lEX01BU0s7XG4mIzQzO1x0XHRcdHBpX2RhdGEuaXNfcnVubmluZyA9IHRydWU7XG4gXHRcdH0gZWxzZSB7XG4tXHRcdFx0cGlfZGF0YS5jcHUgPSAtMTtcbi1cdFx0XHRwaV9kYXRhLmdhX2xvZ19pbnRyID0gZW50cnkgXHUwMDI2IEFWSUNfUEhZU0lDQUxfSURfRU5UUllfR0FfTE9HX0lOVFI7XG4mIzQzO1x0XHRcdHBpX2RhdGEuYXBpY2lkID0gLTE7XG4mIzQzO1x0XHRcdHBpX2RhdGEud2FrZXVwX2ludHIgPSBlbnRyeSBcdTAwMjYgQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9XQUtFVVBfSU5UUjtcbiYjNDM7XHRcdFx0cGlfZGF0YS5pc19ydW5uaW5nID0gZmFsc2U7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAoYW1kX2lvbW11X2dhcHBpKSB7XG4mIzQzO1x0XHRcdFx0cGlfZGF0YS5hcGljaWQgPSBrdm1fY3B1X2dldF9hcGljaWQoc3ZtLVx1MDAzZWdhcHBpX2NwdSk7XG4mIzQzO1x0XHRcdFx0aWYgKGxpc3RfZW1wdHkoXHUwMDI2c3ZtLVx1MDAzZWlyX2xpc3QpKSB7XG4mIzQzO1x0XHRcdFx0XHRhdmljX2FkZF92Y3B1X3RvX2dhcHBpX3dha2V1cF9saXN0KHN2bSwgc3ZtLVx1MDAzZWdhcHBpX2NwdSk7XG4mIzQzO1x0XHRcdFx0XHRpc192Y3B1X3dhaXRpbmcgPSB0cnVlO1xuJiM0MztcdFx0XHRcdH1cbiYjNDM7XHRcdFx0fVxuIFx0XHR9XG4gXG4gXHRcdHJldCA9IGlycV9zZXRfdmNwdV9hZmZpbml0eShob3N0X2lycSwgXHUwMDI2cGlfZGF0YSk7XG4gXHRcdGlmIChyZXQpXG4tXHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdFx0Z290byBnYXBwaV9lcnJfb3V0O1xuIFxuIFx0XHQvKlxuIFx0XHQgKiBSZXZlcnQgdG8gbGVnYWN5IG1vZGUgaWYgdGhlIElPTU1VIGRpZG4mIzM5O3QgcHJvdmlkZSBtZXRhZGF0YVxuQEAgLTk2NiwxMiAmIzQzOzEwMjgsMTcgQEAgaW50IGF2aWNfcGlfdXBkYXRlX2lydGUoc3RydWN0IGt2bV9rZXJuZWxfaXJxZmQgKmlycWZkLCBzdHJ1Y3Qga3ZtICprdm0sXG4gXHRcdCAqL1xuIFx0XHRpZiAoV0FSTl9PTl9PTkNFKCFwaV9kYXRhLmlyX2RhdGEpKSB7XG4gXHRcdFx0aXJxX3NldF92Y3B1X2FmZmluaXR5KGhvc3RfaXJxLCBOVUxMKTtcbi1cdFx0XHRyZXR1cm4gLUVJTztcbiYjNDM7XHRcdFx0cmV0ID0gLUVJTztcbiYjNDM7XHRcdFx0Z290byBnYXBwaV9lcnJfb3V0O1xuIFx0XHR9XG4gXG4gXHRcdGlycWZkLVx1MDAzZWlycV9ieXBhc3NfZGF0YSA9IHBpX2RhdGEuaXJfZGF0YTtcbiBcdFx0bGlzdF9hZGQoXHUwMDI2aXJxZmQtXHUwMDNldmNwdV9saXN0LCBcdTAwMjZzdm0tXHUwMDNlaXJfbGlzdCk7XG4gXHRcdHJldHVybiAwO1xuJiM0MztnYXBwaV9lcnJfb3V0OlxuJiM0MztcdFx0aWYgKGlzX3ZjcHVfd2FpdGluZylcbiYjNDM7XHRcdFx0YXZpY19yZW1vdmVfdmNwdV9mcm9tX2dhcHBpX3dha2V1cF9saXN0KHN2bSwgc3ZtLVx1MDAzZWdhcHBpX2NwdSk7XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuIFx0fVxuIFx0cmV0dXJuIGlycV9zZXRfdmNwdV9hZmZpbml0eShob3N0X2lycSwgTlVMTCk7XG4gfVxuQEAgLTk5MSwyMyAmIzQzOzEwNTgsMjQgQEAgZW51bSBhdmljX3ZjcHVfYWN0aW9uIHtcbiBcdCAqIE5vIHVuaXF1ZSBhY3Rpb24gaXMgcmVxdWlyZWQgdG8gZGVhbCB3aXRoIGEgdkNQVSB0aGF0IHN0b3BzL3N0YXJ0c1xuIFx0ICogcnVubmluZy4gIEEgdkNQVSB0aGF0IHN0YXJ0cyBydW5uaW5nIGJ5IGRlZmluaXRpb24gc3RvcHMgYmxvY2tpbmcgYXNcbiBcdCAqIHdlbGwsIGFuZCBhIHZDUFUgdGhhdCBzdG9wcyBydW5uaW5nIGNhbiYjMzk7dCBoYXZlIGJlZW4gYmxvY2tpbmcsIGkuZS5cbi1cdCAqIGRvZXNuJiMzOTt0IG5lZWQgdG8gdG9nZ2xlIEdBTG9nSW50ci5cbiYjNDM7XHQgKiBkb2VzbiYjMzk7dCBuZWVkIHRvIHRvZ2dsZSBob3N0IHdha2V1cCBub3RpZmljYXRpb24uXG4gXHQgKi9cbiBcdEFWSUNfU1RBUlRfUlVOTklOR1x0PSAwLFxuIFx0QVZJQ19TVE9QX1JVTk5JTkdcdD0gMCxcbiBcbiBcdC8qXG4tXHQgKiBXaGVuIGEgdkNQVSBzdGFydHMgYmxvY2tpbmcsIEtWTSBuZWVkcyB0byBzZXQgdGhlIEdBTG9nSW50ciBmbGFnXG4tXHQgKiBpbnQgYWxsIGFzc29jaWF0ZWQgSVJURXMgc28gdGhhdCBLVk0gY2FuIHdha2UgdGhlIHZDUFUgaWYgYW4gSVJRIGlzXG4tXHQgKiBzZW50IHRvIHRoZSB2Q1BVLlxuJiM0MztcdCAqIFdoZW4gYSB2Q1BVIHN0YXJ0cyBibG9ja2luZywgS1ZNIG5lZWRzIHRvIHJlcXVlc3QgaG9zdCB3YWtldXBcbiYjNDM7XHQgKiBub3RpZmljYXRpb24gaW4gYWxsIGFzc29jaWF0ZWQgSVJURXMgc28gdGhhdCBLVk0gY2FuIHdha2UgdGhlIHZDUFVcbiYjNDM7XHQgKiBpZiBhbiBJUlEgaXMgc2VudCB0byB0aGUgdkNQVS5cbiBcdCAqL1xuIFx0QVZJQ19TVEFSVF9CTE9DS0lOR1x0PSBCSVQoMSksXG4gfTtcbiBcbi1zdGF0aWMgdm9pZCBhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSxcbi1cdFx0XHRcdFx0ICAgIGVudW0gYXZpY192Y3B1X2FjdGlvbiBhY3Rpb24pXG4mIzQzO3N0YXRpYyB2b2lkIGF2aWNfdXBkYXRlX2lvbW11X3ZjcHVfYWZmaW5pdHkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgYXBpY2lkLFxuJiM0MztcdFx0XHRcdFx0ICAgIGludCBjcHUsIGVudW0gYXZpY192Y3B1X2FjdGlvbiBhY3Rpb24pXG4ge1xuLVx0Ym9vbCBnYV9sb2dfaW50ciA9IChhY3Rpb24gXHUwMDI2IEFWSUNfU1RBUlRfQkxPQ0tJTkcpO1xuJiM0MztcdGJvb2wgd2FrZXVwX2ludHIgPSAoYWN0aW9uIFx1MDAyNiBBVklDX1NUQVJUX0JMT0NLSU5HKTtcbiYjNDM7XHRib29sIGlzX3J1bm5pbmcgPSBhcGljaWQgXHUwMDNlPSAwO1xuIFx0c3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7XG4gXHRzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFmZCAqaXJxZmQ7XG4gXG5AQCAtMTAxNSwxOCAmIzQzOzEwODMsMzYgQEAgc3RhdGljIHZvaWQgYXZpY191cGRhdGVfaW9tbXVfdmNwdV9hZmZpbml0eShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUsXG4gXG4gXHQvKlxuIFx0ICogSGVyZSwgd2UgZ28gdGhyb3VnaCB0aGUgcGVyLXZjcHUgaXJfbGlzdCB0byB1cGRhdGUgYWxsIGV4aXN0aW5nXG4tXHQgKiBpbnRlcnJ1cHQgcmVtYXBwaW5nIHRhYmxlIGVudHJ5IHRhcmdldGluZyB0aGlzIHZjcHUuXG4mIzQzO1x0ICogaW50ZXJydXB0IHJlbWFwcGluZyB0YWJsZSBlbnRyaWVzIHRhcmdldGluZyB0aGlzIHZjcHUuXG4gXHQgKi9cbi1cdGlmIChsaXN0X2VtcHR5KFx1MDAyNnN2bS1cdTAwM2Vpcl9saXN0KSlcbiYjNDM7XHRpZiAobGlzdF9lbXB0eShcdTAwMjZzdm0tXHUwMDNlaXJfbGlzdCkpIHtcbiYjNDM7XHRcdGlmIChhbWRfaW9tbXVfZ2FwcGkgXHUwMDI2XHUwMDI2IGNwdSBcdTAwM2U9IDApXG4mIzQzO1x0XHRcdHN2bS1cdTAwM2VnYXBwaV9jcHUgPSBjcHU7XG4gXHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChpc19ydW5uaW5nIFx1MDAyNlx1MDAyNiBhbWRfaW9tbXVfZ2FwcGkpIHtcbiYjNDM7XHRcdGlmIChzdm0tXHUwMDNlZ2FwcGlfY3B1ICE9IC0xKVxuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBIYW5kbGUgaW5pdGlhbCBzdGF0ZSB3aGVuIHZDUFUgaXMgbG9hZGVkIGZvciB0aGVcbiYjNDM7XHRcdFx0ICogZmlyc3QgdGltZSB3aXRob3V0IGFueSBJUlEgYWZmaW5pdHkuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRhdmljX3JlbW92ZV92Y3B1X2Zyb21fZ2FwcGlfd2FrZXVwX2xpc3Qoc3ZtLCBzdm0tXHUwMDNlZ2FwcGlfY3B1KTtcbiYjNDM7XG4mIzQzO1x0XHRzdm0tXHUwMDNlZ2FwcGlfY3B1ID0gY3B1OyAvKiBTdG9yZSBjcHUgbnVtYmVyIGFzIHRhcmdldCBmb3IgR0FQUEkgKi9cbiYjNDM7XHR9IGVsc2UgaWYgKGFtZF9pb21tdV9nYXBwaSkge1xuJiM0MztcdFx0YXBpY2lkID0ga3ZtX2NwdV9nZXRfYXBpY2lkKHN2bS1cdTAwM2VnYXBwaV9jcHUpO1xuJiM0MztcdFx0YXZpY19hZGRfdmNwdV90b19nYXBwaV93YWtldXBfbGlzdChzdm0sIHN2bS1cdTAwM2VnYXBwaV9jcHUpO1xuJiM0MztcdH1cbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkoaXJxZmQsIFx1MDAyNnN2bS1cdTAwM2Vpcl9saXN0LCB2Y3B1X2xpc3QpIHtcbiBcdFx0dm9pZCAqZGF0YSA9IGlycWZkLVx1MDAzZWlycV9ieXBhc3NfZGF0YTtcbiBcbiBcdFx0aWYgKCEoYWN0aW9uIFx1MDAyNiBBVklDX1RPR0dMRV9PTl9PRkYpKVxuLVx0XHRcdFdBUk5fT05fT05DRShhbWRfaW9tbXVfdXBkYXRlX2dhKGRhdGEsIGNwdSwgZ2FfbG9nX2ludHIpKTtcbi1cdFx0ZWxzZSBpZiAoY3B1IFx1MDAzZT0gMClcbi1cdFx0XHRXQVJOX09OX09OQ0UoYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUoZGF0YSwgY3B1LCBnYV9sb2dfaW50cikpO1xuJiM0MztcdFx0XHRXQVJOX09OX09OQ0UoYW1kX2lvbW11X3VwZGF0ZV9nYShkYXRhLCBhcGljaWQsIHdha2V1cF9pbnRyLCBpc19ydW5uaW5nKSk7XG4mIzQzO1x0XHRlbHNlIGlmIChpc19ydW5uaW5nKVxuJiM0MztcdFx0XHRXQVJOX09OX09OQ0UoYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUoZGF0YSwgYXBpY2lkLCB3YWtldXBfaW50cixcbiYjNDM7XHRcdFx0XHRcdFx0XHRcdCAgIGlzX3J1bm5pbmcpKTtcbiBcdFx0ZWxzZVxuIFx0XHRcdFdBUk5fT05fT05DRShhbWRfaW9tbXVfZGVhY3RpdmF0ZV9ndWVzdF9tb2RlKGRhdGEpKTtcbiBcdH1cbkBAIC0xMDYzLDcgJiM0MzsxMTQ5LDcgQEAgc3RhdGljIHZvaWQgX19hdmljX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUsXG4gXHRXQVJOX09OX09OQ0UoZW50cnkgXHUwMDI2IEFWSUNfUEhZU0lDQUxfSURfRU5UUllfSVNfUlVOTklOR19NQVNLKTtcbiBcbiBcdGVudHJ5IFx1MDAyNj0gfihBVklDX1BIWVNJQ0FMX0lEX0VOVFJZX0hPU1RfUEhZU0lDQUxfSURfTUFTSyB8XG4tXHRcdCAgIEFWSUNfUEhZU0lDQUxfSURfRU5UUllfR0FfTE9HX0lOVFIpO1xuJiM0MztcdFx0ICAgQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9XQUtFVVBfSU5UUik7XG4gXHRlbnRyeSB8PSAoaF9waHlzaWNhbF9pZCBcdTAwMjYgQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9IT1NUX1BIWVNJQ0FMX0lEX01BU0spO1xuIFx0ZW50cnkgfD0gQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9JU19SVU5OSU5HX01BU0s7XG4gXG5AQCAtMTA4MCw3ICYjNDM7MTE2Niw3IEBAIHN0YXRpYyB2b2lkIF9fYXZpY192Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1LFxuIFxuIFx0V1JJVEVfT05DRShrdm1fc3ZtLVx1MDAzZWF2aWNfcGh5c2ljYWxfaWRfdGFibGVbdmNwdS1cdTAwM2V2Y3B1X2lkXSwgZW50cnkpO1xuIFxuLVx0YXZpY191cGRhdGVfaW9tbXVfdmNwdV9hZmZpbml0eSh2Y3B1LCBoX3BoeXNpY2FsX2lkLCBhY3Rpb24pO1xuJiM0MztcdGF2aWNfdXBkYXRlX2lvbW11X3ZjcHVfYWZmaW5pdHkodmNwdSwgaF9waHlzaWNhbF9pZCwgY3B1LCBhY3Rpb24pO1xuIFxuIFx0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2c3ZtLVx1MDAzZWlyX2xpc3RfbG9jaywgZmxhZ3MpO1xuIH1cbkBAIC0xMTIzLDkgJiM0MzsxMjA5LDkgQEAgc3RhdGljIHZvaWQgX19hdmljX3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZW51bSBhdmljX3ZjcHVfYWN0aW9uIGFjdGlvbilcbiBcdCAqL1xuIFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnN2bS1cdTAwM2Vpcl9saXN0X2xvY2ssIGZsYWdzKTtcbiBcbi1cdGF2aWNfdXBkYXRlX2lvbW11X3ZjcHVfYWZmaW5pdHkodmNwdSwgLTEsIGFjdGlvbik7XG4mIzQzO1x0YXZpY191cGRhdGVfaW9tbXVfdmNwdV9hZmZpbml0eSh2Y3B1LCAtMSwgLTEsIGFjdGlvbik7XG4gXG4tXHRXQVJOX09OX09OQ0UoZW50cnkgXHUwMDI2IEFWSUNfUEhZU0lDQUxfSURfRU5UUllfR0FfTE9HX0lOVFIpO1xuJiM0MztcdFdBUk5fT05fT05DRShlbnRyeSBcdTAwMjYgQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9XQUtFVVBfSU5UUik7XG4gXG4gXHQvKlxuIFx0ICogS2VlcCB0aGUgcHJldmlvdXMgQVBJQyBJRCBpbiB0aGUgZW50cnkgc28gdGhhdCBhIHJvZ3VlIGRvb3JiZWxsIGZyb21cbkBAIC0xMTM3LDExICYjNDM7MTIyMywxMSBAQCBzdGF0aWMgdm9pZCBfX2F2aWNfdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBlbnVtIGF2aWNfdmNwdV9hY3Rpb24gYWN0aW9uKVxuIFx0XHRXUklURV9PTkNFKGt2bV9zdm0tXHUwMDNlYXZpY19waHlzaWNhbF9pZF90YWJsZVt2Y3B1LVx1MDAzZXZjcHVfaWRdLCBlbnRyeSk7XG4gXG4gXHQvKlxuLVx0ICogTm90ZSEgIERvbiYjMzk7dCBzZXQgQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9HQV9MT0dfSU5UUiBpbiB0aGUgdGFibGUgYXNcbiYjNDM7XHQgKiBOb3RlISAgRG9uJiMzOTt0IHNldCBBVklDX1BIWVNJQ0FMX0lEX0VOVFJZX1dBS0VVUF9JTlRSIGluIHRoZSB0YWJsZSBhc1xuIFx0ICogaXQmIzM5O3MgYSBzeW50aGV0aWMgZmxhZyB0aGF0IHVzdXJwcyBhbiB1bnVzZWQgc2hvdWxkLWJlLXplcm8gYml0LlxuIFx0ICovXG4gXHRpZiAoYWN0aW9uIFx1MDAyNiBBVklDX1NUQVJUX0JMT0NLSU5HKVxuLVx0XHRlbnRyeSB8PSBBVklDX1BIWVNJQ0FMX0lEX0VOVFJZX0dBX0xPR19JTlRSO1xuJiM0MztcdFx0ZW50cnkgfD0gQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9XQUtFVVBfSU5UUjtcbiBcbiBcdHN2bS1cdTAwM2VhdmljX3BoeXNpY2FsX2lkX2VudHJ5ID0gZW50cnk7XG4gXG5AQCAtMTE3MSw5ICYjNDM7MTI1Nyw5IEBAIHZvaWQgYXZpY192Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gXHRcdC8qXG4gXHRcdCAqIFRoZSB2Q1BVIHdhcyBwcmVlbXB0ZWQgd2hpbGUgYmxvY2tpbmcsIGVuc3VyZSBpdHMgSVJURXMgYXJlXG4tXHRcdCAqIGNvbmZpZ3VyZWQgdG8gZ2VuZXJhdGUgR0EgTG9nIEludGVycnVwdHMuXG4mIzQzO1x0XHQgKiBjb25maWd1cmVkIHRvIHJlcXVlc3QgaG9zdCB3YWtldXAgbm90aWZpY2F0aW9uLlxuIFx0XHQgKi9cbi1cdFx0aWYgKCEoV0FSTl9PTl9PTkNFKCEoZW50cnkgXHUwMDI2IEFWSUNfUEhZU0lDQUxfSURfRU5UUllfR0FfTE9HX0lOVFIpKSkpXG4mIzQzO1x0XHRpZiAoIShXQVJOX09OX09OQ0UoIShlbnRyeSBcdTAwMjYgQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9XQUtFVVBfSU5UUikpKSlcbiBcdFx0XHRyZXR1cm47XG4gXHR9XG4gXG5AQCAtMTI5Niw2ICYjNDM7MTM4MiwyMSBAQCBzdGF0aWMgYm9vbCBfX2luaXQgYXZpY193YW50X2F2aWNfZW5hYmxlZCh2b2lkKVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBhdmljX2dhcHBpX3dha2V1cF9oYW5kbGVyKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpO1xuJiM0MztcdHN0cnVjdCBsaXN0X2hlYWQgKnZjcHVfd2FrZXVwX2xpc3QgPSBcdTAwMjZwZXJfY3B1KGdhcHBpX3ZjcHVfd2FrZXVwX2xpc3QsIGNwdSk7XG4mIzQzO1x0cmF3X3NwaW5sb2NrX3QgKnNwaW5sb2NrID0gXHUwMDI2cGVyX2NwdShnYXBwaV92Y3B1X3dha2V1cF9saXN0X2xvY2ssIGNwdSk7XG4mIzQzO1x0c3RydWN0IHZjcHVfc3ZtICpzdm07XG4mIzQzO1xuJiM0MztcdHJhd19zcGluX2xvY2soc3BpbmxvY2spO1xuJiM0MztcdGxpc3RfZm9yX2VhY2hfZW50cnkoc3ZtLCB2Y3B1X3dha2V1cF9saXN0LCBnYXBwaV92Y3B1X3dha2V1cF9saXN0KSB7XG4mIzQzO1x0XHRpZiAoa3ZtX2xhcGljX2ZpbmRfaGlnaGVzdF9pcnIoXHUwMDI2c3ZtLVx1MDAzZXZjcHUpIFx1MDAzZT0gMClcbiYjNDM7XHRcdFx0a3ZtX3ZjcHVfd2FrZV91cChcdTAwMjZzdm0tXHUwMDNldmNwdSk7XG4mIzQzO1x0fVxuJiM0MztcdHJhd19zcGluX3VubG9jayhzcGlubG9jayk7XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBOb3RlOlxuICAqIC0gVGhlIG1vZHVsZSBwYXJhbSBhdmljIGVuYWJsZSBib3RoIHhBUElDIGFuZCB4MkFQSUMgbW9kZS5cbkBAIC0xMzA0LDEyICYjNDM7MTQwNSwxOCBAQCBzdGF0aWMgYm9vbCBfX2luaXQgYXZpY193YW50X2F2aWNfZW5hYmxlZCh2b2lkKVxuICAqL1xuIGJvb2wgX19pbml0IGF2aWNfaGFyZHdhcmVfc2V0dXAodm9pZClcbiB7XG4mIzQzO1x0aW50IGNwdTtcbiBcdGF2aWMgPSBhdmljX3dhbnRfYXZpY19lbmFibGVkKCk7XG4gXHRpZiAoIWF2aWMpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdHByX2luZm8oXCYjMzQ7QVZJQyBlbmFibGVkXFxuXCYjMzQ7KTtcbiBcbiYjNDM7XHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XG4mIzQzO1x0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZwZXJfY3B1KGdhcHBpX3ZjcHVfd2FrZXVwX2xpc3QsIGNwdSkpO1xuJiM0MztcdFx0cmF3X3NwaW5fbG9ja19pbml0KFx1MDAyNnBlcl9jcHUoZ2FwcGlfdmNwdV93YWtldXBfbGlzdF9sb2NrLCBjcHUpKTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0LyogQVZJQyBpcyBhIHByZXJlcXVpc2l0ZSBmb3IgeDJBVklDLiAqL1xuIFx0eDJhdmljX2VuYWJsZWQgPSBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfWDJBVklDKTtcbiBcdGlmICh4MmF2aWNfZW5hYmxlZCkge1xuQEAgLTEzMzMsMTIgJiM0MzsxNDQwLDE2IEBAIGJvb2wgX19pbml0IGF2aWNfaGFyZHdhcmVfc2V0dXAodm9pZClcbiBcdFx0ZW5hYmxlX2lwaXYgPSBmYWxzZTtcbiBcbiBcdGFtZF9pb21tdV9yZWdpc3Rlcl9nYV9sb2dfbm90aWZpZXIoXHUwMDI2YXZpY19nYV9sb2dfbm90aWZpZXIpO1xuJiM0MztcdGt2bV9zZXRfcG9zdGVkX2ludHJfd2FrZXVwX2hhbmRsZXIoXHUwMDI2YXZpY19nYXBwaV93YWtldXBfaGFuZGxlcik7XG4gXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4gdm9pZCBhdmljX2hhcmR3YXJlX3Vuc2V0dXAodm9pZClcbiB7XG4tXHRpZiAoYXZpYylcbi1cdFx0YW1kX2lvbW11X3JlZ2lzdGVyX2dhX2xvZ19ub3RpZmllcihOVUxMKTtcbiYjNDM7XHRpZiAoIWF2aWMpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGFtZF9pb21tdV9yZWdpc3Rlcl9nYV9sb2dfbm90aWZpZXIoTlVMTCk7XG4mIzQzO1x0a3ZtX3NldF9wb3N0ZWRfaW50cl93YWtldXBfaGFuZGxlcihOVUxMKTtcbiB9XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uYyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmNcbmluZGV4IGUwMmEzOGRhNTI5NmUzLi5iNjg3MTMzZjg1MjhiYSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmNcbkBAIC0xMzU2LDYgJiM0MzsxMzU2LDggQEAgc3RhdGljIHZvaWQgc3ZtX3ZjcHVfZnJlZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gXHRXQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXHUwMDI2c3ZtLVx1MDAzZWlyX2xpc3QpKTtcbiBcbiYjNDM7XHRhdmljX2Rlc3Ryb3lfdmNwdShzdm0pO1xuJiM0MztcbiBcdHN2bV9sZWF2ZV9uZXN0ZWQodmNwdSk7XG4gXHRzdm1fZnJlZV9uZXN0ZWQoc3ZtKTtcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uaFxuaW5kZXggNTEzNzQxNmJlNTkzZDcuLjQ3ZDViYjVkNzEwM2RhIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uaFxuQEAgLTM2Miw2ICYjNDM7MzYyLDEwIEBAIHN0cnVjdCB2Y3B1X3N2bSB7XG4gXG4gXHQvKiBHdWVzdCBHSUYgdmFsdWUsIHVzZWQgd2hlbiB2R0lGIGlzIG5vdCBlbmFibGVkICovXG4gXHRib29sIGd1ZXN0X2dpZjtcbiYjNDM7XG4mIzQzO1x0LyogR0FQUEkgcmVsYXRlZCBmaWVsZHMgKi9cbiYjNDM7XHRzdHJ1Y3QgbGlzdF9oZWFkIGdhcHBpX3ZjcHVfd2FrZXVwX2xpc3Q7XG4mIzQzO1x0aW50IGdhcHBpX2NwdTtcbiB9O1xuIFxuIHN0cnVjdCBzdm1fY3B1X2RhdGEge1xuQEAgLTkwOSw2ICYjNDM7OTEzLDcgQEAgdm9pZCBhdmljX2luaXRfdm1jYihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgc3RydWN0IHZtY2IgKnZtY2IpO1xuIGludCBhdmljX2luY29tcGxldGVfaXBpX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIGludCBhdmljX3VuYWNjZWxlcmF0ZWRfYWNjZXNzX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIGludCBhdmljX2luaXRfdmNwdShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSk7XG4mIzQzO3ZvaWQgYXZpY19kZXN0cm95X3ZjcHUoc3RydWN0IHZjcHVfc3ZtICpzdm0pO1xuIHZvaWQgYXZpY192Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KTtcbiB2b2lkIGF2aWNfdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiB2b2lkIGF2aWNfYXBpY3ZfcG9zdF9zdGF0ZV9yZXN0b3JlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pb21tdS9hbWQvYW1kX2lvbW11LmggYi9kcml2ZXJzL2lvbW11L2FtZC9hbWRfaW9tbXUuaFxuaW5kZXggODM0ZDhmYWJmYmEzODcuLjA0NDE3OWNhYjEyZTRiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9pb21tdS9hbWQvYW1kX2lvbW11LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvaW9tbXUvYW1kL2FtZF9pb21tdS5oXG5AQCAtNDEsNiAmIzQzOzQxLDcgQEAgaW50IGFtZF9pb21tdV9lbmFibGUodm9pZCk7XG4gdm9pZCBhbWRfaW9tbXVfZGlzYWJsZSh2b2lkKTtcbiBpbnQgYW1kX2lvbW11X3JlZW5hYmxlKGludCBtb2RlKTtcbiBpbnQgYW1kX2lvbW11X2VuYWJsZV9mYXVsdGluZyh1bnNpZ25lZCBpbnQgY3B1KTtcbiYjNDM7ZXh0ZXJuIGJvb2wgYW1kX2lvbW11X2dhcHBpO1xuIGV4dGVybiBpbnQgYW1kX2lvbW11X2d1ZXN0X2lyO1xuIGV4dGVybiBlbnVtIHByb3RlY3Rpb25fZG9tYWluX21vZGUgYW1kX2lvbW11X3BndGFibGU7XG4gZXh0ZXJuIGludCBhbWRfaW9tbXVfZ3B0X2xldmVsO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW9tbXUvYW1kL2FtZF9pb21tdV90eXBlcy5oIGIvZHJpdmVycy9pb21tdS9hbWQvYW1kX2lvbW11X3R5cGVzLmhcbmluZGV4IGY5ZjcxODA4Nzg5MzAzLi5kZTBiMjMzMDY5NDRiOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvaW9tbXUvYW1kL2FtZF9pb21tdV90eXBlcy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2lvbW11L2FtZC9hbWRfaW9tbXVfdHlwZXMuaFxuQEAgLTk0LDYgJiM0Mzs5NCw3IEBAXG4gI2RlZmluZSBGRUFUVVJFX1gyQVBJQ1x0XHRCSVRfVUxMKDIpXG4gI2RlZmluZSBGRUFUVVJFX05YXHRcdEJJVF9VTEwoMylcbiAjZGVmaW5lIEZFQVRVUkVfR1RcdFx0QklUX1VMTCg0KVxuJiM0MzsjZGVmaW5lIEZFQVRVUkVfR0FQUElcdFx0QklUX1VMTCg1KVxuICNkZWZpbmUgRkVBVFVSRV9JQVx0XHRCSVRfVUxMKDYpXG4gI2RlZmluZSBGRUFUVVJFX0dBXHRcdEJJVF9VTEwoNylcbiAjZGVmaW5lIEZFQVRVUkVfSEVcdFx0QklUX1VMTCg4KVxuQEAgLTExMyw2ICYjNDM7MTE0LDcgQEBcbiAvKiBFeHRlbmRlZCBGZWF0dXJlIDIgQml0cyAqL1xuICNkZWZpbmUgRkVBVFVSRV9TRVZTTlBJT19TVVBcdEJJVF9VTEwoMSlcbiAjZGVmaW5lIEZFQVRVUkVfR0NSM1RSUE1PREVcdEJJVF9VTEwoMylcbiYjNDM7I2RlZmluZSBGRUFUVVJFX0dBUFBJRElTU1VQXHRCSVRfVUxMKDQpXG4gI2RlZmluZSBGRUFUVVJFX1NOUEFWSUNTVVBcdEdFTk1BU0tfVUxMKDcsIDUpXG4gI2RlZmluZSBGRUFUVVJFX1NOUEFWSUNTVVBfR0FNKHgpIFxcXG4gXHQoRklFTERfR0VUKEZFQVRVUkVfU05QQVZJQ1NVUCwgeCkgPT0gMHgxKVxuQEAgLTE5MCw2ICYjNDM7MTkyLDcgQEBcbiAjZGVmaW5lIENPTlRST0xfRVBIX0VOXHRcdDQ1XG4gI2RlZmluZSBDT05UUk9MX1hUX0VOXHRcdDUwXG4gI2RlZmluZSBDT05UUk9MX0lOVENBUFhUX0VOXHQ1MVxuJiM0MzsjZGVmaW5lIENPTlRST0xfR0FQUElfRU5cdDU1XG4gI2RlZmluZSBDT05UUk9MX0dDUjNUUlBNT0RFXHQ1OFxuICNkZWZpbmUgQ09OVFJPTF9JUlRDQUNIRURJU1x0NTlcbiAjZGVmaW5lIENPTlRST0xfU05QQVZJQ19FTlx0NjFcbkBAIC0xMDA0LDcgJiM0MzsxMDA3LDggQEAgdW5pb24gaXJ0ZV9nYV9sbyB7XG4gXHRcdCAgICBub19mYXVsdFx0OiAxLFxuIFx0XHQgICAgLyogLS0tLS0tICovXG4gXHRcdCAgICBnYV9sb2dfaW50clx0OiAxLFxuLVx0XHQgICAgcnN2ZDFcdDogMyxcbiYjNDM7XHRcdCAgICByc3ZkMVx0OiAyLFxuJiM0MztcdFx0ICAgIGdhcHBpX2Rpc1x0OiAxLFxuIFx0XHQgICAgaXNfcnVuXHQ6IDEsXG4gXHRcdCAgICAvKiAtLS0tLS0gKi9cbiBcdFx0ICAgIGd1ZXN0X21vZGVcdDogMSxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMgYi9kcml2ZXJzL2lvbW11L2FtZC9pbml0LmNcbmluZGV4IDNiZGIzODBkMjNlOWE5Li43ZDJiMWMyNGY2ZWNjYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvaW9tbXUvYW1kL2luaXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jXG5AQCAtMTYwLDYgJiM0MzsxNjAsOSBAQCB1OCBhbWRfaW9tbXVfaHB0X2xldmVsO1xuIC8qIEd1ZXN0IHBhZ2UgdGFibGUgbGV2ZWwgKi9cbiBpbnQgYW1kX2lvbW11X2dwdF9sZXZlbCA9IFBBR0VfTU9ERV80X0xFVkVMO1xuIFxuJiM0Mztib29sIGFtZF9pb21tdV9nYXBwaTtcbiYjNDM7RVhQT1JUX1NZTUJPTChhbWRfaW9tbXVfZ2FwcGkpO1xuJiM0MztcbiBpbnQgYW1kX2lvbW11X2d1ZXN0X2lyID0gQU1EX0lPTU1VX0dVRVNUX0lSX1ZBUElDO1xuIHN0YXRpYyBpbnQgYW1kX2lvbW11X3h0X21vZGUgPSBJUlFfUkVNQVBfWEFQSUNfTU9ERTtcbiBcbkBAIC00NjIsNiAmIzQzOzQ2NSw5IEBAIHN0YXRpYyB2b2lkIGlvbW11X2Rpc2FibGUoc3RydWN0IGFtZF9pb21tdSAqaW9tbXUpXG4gXHRpb21tdV9mZWF0dXJlX2Rpc2FibGUoaW9tbXUsIENPTlRST0xfR0FMT0dfRU4pO1xuIFx0aW9tbXVfZmVhdHVyZV9kaXNhYmxlKGlvbW11LCBDT05UUk9MX0dBSU5UX0VOKTtcbiBcbiYjNDM7XHQvKiBEaXNhYmxlIElPTU1VIEdBUFBJICovXG4mIzQzO1x0aW9tbXVfZmVhdHVyZV9kaXNhYmxlKGlvbW11LCBDT05UUk9MX0dBUFBJX0VOKTtcbiYjNDM7XG4gXHQvKiBEaXNhYmxlIElPTU1VIFBQUiBsb2dnaW5nICovXG4gXHRpb21tdV9mZWF0dXJlX2Rpc2FibGUoaW9tbXUsIENPTlRST0xfUFBSTE9HX0VOKTtcbiBcdGlvbW11X2ZlYXR1cmVfZGlzYWJsZShpb21tdSwgQ09OVFJPTF9QUFJJTlRfRU4pO1xuQEAgLTI5OTYsNiAmIzQzOzMwMDIsMTMgQEAgc3RhdGljIHZvaWQgZW5hYmxlX2lvbW11c192YXBpYyh2b2lkKVxuIFx0c3RydWN0IGFtZF9pb21tdSAqaW9tbXU7XG4gXG4gXHRmb3JfZWFjaF9pb21tdShpb21tdSkge1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIERpc2FibGUgR0FQUEksIGRvIG5vdCBjaGVjayBhbWRfaW9tbXVfZ2FwcGkgYXMgaXQgbWF5IGJlXG4mIzQzO1x0XHQgKiBmYWxzZSBpbiBuZXcga2V4ZWMga2VybmVsIGV2ZW4gdGhvdWdoIHByZXZpb3VzIGtlcm5lbCBoYXNcbiYjNDM7XHRcdCAqIGVuYWJsZWQgaXQuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlvbW11X2ZlYXR1cmVfZGlzYWJsZShpb21tdSwgQ09OVFJPTF9HQVBQSV9FTik7XG4mIzQzO1xuIFx0XHQvKlxuIFx0XHQgKiBEaXNhYmxlIEdBTG9nIGlmIGFscmVhZHkgcnVubmluZy4gSXQgY291bGQgaGF2ZSBiZWVuIGVuYWJsZWRcbiBcdFx0ICogaW4gdGhlIHByZXZpb3VzIGJvb3QgYmVmb3JlIGtkdW1wLlxuQEAgLTMwMzUsMTAgJiM0MzszMDQ4LDE5IEBAIHN0YXRpYyB2b2lkIGVuYWJsZV9pb21tdXNfdmFwaWModm9pZClcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuJiM0MztcdGlmIChhbWRfaW9tbXVfZ2FwcGkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICEoY2hlY2tfZmVhdHVyZShGRUFUVVJFX0dBUFBJKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgICBBTURfSU9NTVVfR1VFU1RfSVJfVkFQSUMoYW1kX2lvbW11X2d1ZXN0X2lyKSkpIHtcbiYjNDM7XHRcdHByX3dhcm4oXCYjMzQ7R0FQUEkgaXMgbm90IHN1cHBvcnRlZC5cXG5cJiMzNDspO1xuJiM0MztcdFx0YW1kX2lvbW11X2dhcHBpID0gZmFsc2U7XG4mIzQzO1x0fVxuJiM0MztcbiBcdC8qIEVuYWJsaW5nIEdBTSBhbmQgU05QQVZJQyBzdXBwb3J0ICovXG4gXHRmb3JfZWFjaF9pb21tdShpb21tdSkge1xuLVx0XHRpZiAoaW9tbXVfaW5pdF9nYV9sb2coaW9tbXUpIHx8XG4tXHRcdCAgICBpb21tdV9nYV9sb2dfZW5hYmxlKGlvbW11KSlcbiYjNDM7XHRcdGlmIChhbWRfaW9tbXVfZ2FwcGkpXG4mIzQzO1x0XHRcdGlvbW11X2ZlYXR1cmVfZW5hYmxlKGlvbW11LCBDT05UUk9MX0dBUFBJX0VOKTtcbiYjNDM7XHRcdGVsc2UgaWYgKGlvbW11X2luaXRfZ2FfbG9nKGlvbW11KSB8fFxuJiM0MztcdFx0XHQgaW9tbXVfZ2FfbG9nX2VuYWJsZShpb21tdSkpXG4gXHRcdFx0cmV0dXJuO1xuIFxuIFx0XHRpb21tdV9mZWF0dXJlX2VuYWJsZShpb21tdSwgQ09OVFJPTF9HQU1fRU4pO1xuQEAgLTMwNDcsNyAmIzQzOzMwNjksOCBAQCBzdGF0aWMgdm9pZCBlbmFibGVfaW9tbXVzX3ZhcGljKHZvaWQpXG4gXHR9XG4gXG4gXHRhbWRfaW9tbXVfaXJxX29wcy5jYXBhYmlsaXR5IHw9ICgxIFx1MDAzY1x1MDAzYyBJUlFfUE9TVElOR19DQVApO1xuLVx0cHJfaW5mbyhcJiMzNDtWaXJ0dWFsIEFQSUMgZW5hYmxlZFxcblwmIzM0Oyk7XG4mIzQzO1x0cHJfaW5mbyhcJiMzNDtWaXJ0dWFsIEFQSUMgZW5hYmxlZCB3aXRoICVzXFxuXCYjMzQ7LFxuJiM0MztcdFx0YW1kX2lvbW11X2dhcHBpID8gXCYjMzQ7R0FQUElcJiMzNDsgOiBcJiMzNDtHQUxPR1wmIzM0Oyk7XG4gI2VuZGlmXG4gfVxuIFxuQEAgLTM3MzgsNiAmIzQzOzM3NjEsOCBAQCBzdGF0aWMgaW50IF9faW5pdCBwYXJzZV9hbWRfaW9tbXVfb3B0aW9ucyhjaGFyICpzdHIpXG4gXHRcdH0gZWxzZSBpZiAoc3RybmNtcChzdHIsIFwmIzM0O3YyX3Bnc2l6ZXNfb25seVwmIzM0OywgMTUpID09IDApIHtcbiBcdFx0XHRwcl9pbmZvKFwmIzM0O1Jlc3RyaWN0aW5nIFYxIHBhZ2Utc2l6ZXMgdG8gNEtpQi8yTWlCLzFHaUJcJiMzNDspO1xuIFx0XHRcdGFtZF9pb21tdV9wZ3NpemVfYml0bWFwID0gQU1EX0lPTU1VX1BHU0laRVNfVjI7XG4mIzQzO1x0XHR9IGVsc2UgaWYgKHN0cm5jbXAoc3RyLCBcJiMzNDtnYXBwaVwmIzM0OywgNSkgPT0gMCkge1xuJiM0MztcdFx0XHRhbWRfaW9tbXVfZ2FwcGkgPSB0cnVlO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdHByX25vdGljZShcJiMzNDtVbmtub3duIG9wdGlvbiAtICYjMzk7JXMmIzM5O1xcblwmIzM0Oywgc3RyKTtcbiBcdFx0fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmMgYi9kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jXG5pbmRleCA1N2RjOGZhYmM3ZDliOS4uN2VlYmY0NzQ1YTY3ODIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jXG5AQCAtMzk1OSwxOSAmIzQzOzM5NTksMjkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBpcnFfZG9tYWluX29wcyBhbWRfaXJfZG9tYWluX29wcyA9IHtcbiBcdC5kZWFjdGl2YXRlID0gaXJxX3JlbWFwcGluZ19kZWFjdGl2YXRlLFxuIH07XG4gXG4tc3RhdGljIHZvaWQgX19hbWRfaW9tbXVfdXBkYXRlX2dhKHN0cnVjdCBpcnRlX2dhICplbnRyeSwgaW50IGNwdSxcbi1cdFx0XHRcdCAgYm9vbCBnYV9sb2dfaW50cilcbiYjNDM7c3RhdGljIHZvaWQgX19hbWRfaW9tbXVfdXBkYXRlX2dhKHN0cnVjdCBpcnRlX2dhICplbnRyeSwgaW50IGFwaWNpZCxcbiYjNDM7XHRcdFx0XHQgIGJvb2wgd2FrZXVwX2ludHIsIGJvb2wgaXNfcnVubmluZylcbiB7XG4tXHRpZiAoY3B1IFx1MDAzZT0gMCkge1xuJiM0MztcdGlmIChpc19ydW5uaW5nKSB7XG4gXHRcdGVudHJ5LVx1MDAzZWxvLmZpZWxkc192YXBpYy5kZXN0aW5hdGlvbiA9XG4tXHRcdFx0XHRcdEFQSUNJRF9UT19JUlRFX0RFU1RfTE8oY3B1KTtcbiYjNDM7XHRcdFx0XHRcdEFQSUNJRF9UT19JUlRFX0RFU1RfTE8oYXBpY2lkKTtcbiBcdFx0ZW50cnktXHUwMDNlaGkuZmllbGRzLmRlc3RpbmF0aW9uID1cbi1cdFx0XHRcdFx0QVBJQ0lEX1RPX0lSVEVfREVTVF9ISShjcHUpO1xuJiM0MztcdFx0XHRcdFx0QVBJQ0lEX1RPX0lSVEVfREVTVF9ISShhcGljaWQpO1xuIFx0XHRlbnRyeS1cdTAwM2Vsby5maWVsZHNfdmFwaWMuaXNfcnVuID0gdHJ1ZTtcbiBcdFx0ZW50cnktXHUwMDNlbG8uZmllbGRzX3ZhcGljLmdhX2xvZ19pbnRyID0gZmFsc2U7XG4gXHR9IGVsc2Uge1xuLVx0XHRlbnRyeS1cdTAwM2Vsby5maWVsZHNfdmFwaWMuaXNfcnVuID0gZmFsc2U7XG4tXHRcdGVudHJ5LVx1MDAzZWxvLmZpZWxkc192YXBpYy5nYV9sb2dfaW50ciA9IGdhX2xvZ19pbnRyO1xuJiM0MztcdFx0aWYgKGFtZF9pb21tdV9nYXBwaSkge1xuJiM0MztcdFx0XHRlbnRyeS1cdTAwM2Vsby5maWVsZHNfdmFwaWMuZ2FwcGlfZGlzID0gIXdha2V1cF9pbnRyIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHRcdFx0XHRjaGVja19mZWF0dXJlMihGRUFUVVJFX0dBUFBJRElTU1VQKTtcbiYjNDM7XHRcdFx0ZW50cnktXHUwMDNlbG8uZmllbGRzX3ZhcGljLmlzX3J1biA9IGZhbHNlO1xuJiM0MztcdFx0XHRlbnRyeS1cdTAwM2Vsby5maWVsZHNfdmFwaWMuZGVzdGluYXRpb24gPVxuJiM0MztcdFx0XHRcdFx0XHRBUElDSURfVE9fSVJURV9ERVNUX0xPKGFwaWNpZCk7XG4mIzQzO1x0XHRcdGVudHJ5LVx1MDAzZWhpLmZpZWxkcy5kZXN0aW5hdGlvbiA9XG4mIzQzO1x0XHRcdFx0XHRcdEFQSUNJRF9UT19JUlRFX0RFU1RfSEkoYXBpY2lkKTtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdGVudHJ5LVx1MDAzZWxvLmZpZWxkc192YXBpYy5pc19ydW4gPSBmYWxzZTtcbiYjNDM7XHRcdFx0ZW50cnktXHUwMDNlbG8uZmllbGRzX3ZhcGljLmdhX2xvZ19pbnRyID0gd2FrZXVwX2ludHI7XG4mIzQzO1x0XHR9XG4gXHR9XG4gfVxuIFxuQEAgLTM5NzksMjAgJiM0MzszOTg5LDIwIEBAIHN0YXRpYyB2b2lkIF9fYW1kX2lvbW11X3VwZGF0ZV9nYShzdHJ1Y3QgaXJ0ZV9nYSAqZW50cnksIGludCBjcHUsXG4gICogVXBkYXRlIHRoZSBwQ1BVIGluZm9ybWF0aW9uIGZvciBhbiBJUlRFIHRoYXQgaXMgY29uZmlndXJlZCB0byBwb3N0IElSUXMgdG9cbiAgKiBhIHZDUFUsIHdpdGhvdXQgaXNzdWluZyBhbiBJT01NVSBpbnZhbGlkYXRpb24gZm9yIHRoZSBJUlRFLlxuICAqXG4tICogSWYgdGhlIHZDUFUgaXMgYXNzb2NpYXRlZCB3aXRoIGEgcENQVSAoQGNwdSBcdTAwM2U9IDApLCBjb25maWd1cmUgdGhlIERlc3RpbmF0aW9uXG4tICogd2l0aCB0aGUgcENQVSYjMzk7cyBBUElDIElELCBzZXQgSXNSdW4sIGFuZCBjbGVhciBHQUxvZ0ludHIuICBJZiB0aGUgdkNQVSBpc24mIzM5O3Rcbi0gKiBhc3NvY2lhdGVkIHdpdGggYSBwQ1BVIChAY3B1IFx1MDAzYyAwKSwgY2xlYXIgSXNSdW4gYW5kIHNldC9jbGVhciBHQUxvZ0ludHIgYmFzZWRcbi0gKiBvbiBpbnB1dCBmcm9tIHRoZSBjYWxsZXIgKGUuZy4gS1ZNIG9ubHkgcmVxdWVzdHMgR0FMb2dJbnRyIHdoZW4gdGhlIHZDUFUgaXNcbi0gKiBibG9ja2luZyBhbmQgcmVxdWlyZXMgYSBub3RpZmljYXRpb24gd2FrZSBldmVudCkuICBJLmUuIHRyZWF0IHZDUFVzIHRoYXQgYXJlXG4tICogYXNzb2NpYXRlZCB3aXRoIGEgcENQVSBhcyBydW5uaW5nLiAgVGhpcyBBUEkgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCB3aGVuIGFcbi0gKiB2Q1BVIGlzIHNjaGVkdWxlZCBpbi9vdXQgKG9yIHN0b3BzIHJ1bm5pbmcgZm9yIGFueSByZWFzb24pLCB0byBkbyBhIGZhc3Rcbi0gKiB1cGRhdGUgb2YgSXNSdW4sIEdBTG9nSW50ciwgYW5kIChjb25kaXRpb25hbGx5KSBEZXN0aW5hdGlvbi5cbiYjNDM7ICogSWYgdGhlIHZDUFUgaXMgc2NoZWR1bGVkIHRvIHJ1biBvbiBwQ1BVIChAaXNfcnVubmluZyA9IDEpLCBjb25maWd1cmUgdGhlXG4mIzQzOyAqIERlc3RpbmF0aW9uIHdpdGggdGhlIHBDUFUmIzM5O3MgQVBJQyBJRCwgc2V0IElzUnVuLCBhbmQgY2xlYXIgR0FMb2dJbnRyLiBJZiB0aGVcbiYjNDM7ICogdkNQVSBpcyBzY2hlZHVsZWQgb3V0IChAaXNfcnVubmluZyA9IDApLCBjbGVhciBJc1J1biBhbmQgc2V0L2NsZWFyIEdBTG9nSW50clxuJiM0MzsgKiBhbmQgR0FQUElEaXMgYmFzZWQgb24gaW5wdXQgZnJvbSB0aGUgY2FsbGVyIChlLmcuIEtWTSBvbmx5IHJlcXVlc3RzXG4mIzQzOyAqIHdha2V1cF9pbnRyIHdoZW4gdGhlIHZDUFUgaXMgYmxvY2tpbmcgYW5kIHJlcXVpcmVzIGEgbm90aWZpY2F0aW9uIHdha2VcbiYjNDM7ICogZXZlbnQpLiBUaGlzIEFQSSBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIHdoZW4gYSB2Q1BVIGlzIHNjaGVkdWxlZCBpbi9vdXQgKG9yXG4mIzQzOyAqIHN0b3BzIHJ1bm5pbmcgZm9yIGFueSByZWFzb24pLCB0byBkbyBhIGZhc3QgdXBkYXRlIG9mIElzUnVuLCBHQUxvZ0ludHIsXG4mIzQzOyAqIEdBUFBJRGlzIGFuZCAoY29uZGl0aW9uYWxseSkgRGVzdGluYXRpb24uXG4gICpcbi0gKiBQZXIgdGhlIElPTU1VIHNwZWMsIHRoZSBEZXN0aW5hdGlvbiwgSXNSdW4sIGFuZCBHQVRhZyBmaWVsZHMgYXJlIG5vdCBjYWNoZWRcbi0gKiBhbmQgdGh1cyBkb24mIzM5O3QgcmVxdWlyZSBhbiBpbnZhbGlkYXRpb24gdG8gZW5zdXJlIHRoZSBJT01NVSBjb25zdW1lcyBmcmVzaFxuLSAqIGluZm9ybWF0aW9uLlxuJiM0MzsgKiBQZXIgdGhlIElPTU1VIHNwZWMsIHRoZSBEZXN0aW5hdGlvbiwgSXNSdW4sIEdBVGFnIGFuZCBHQVBQSURpcyBmaWVsZHMgYXJlXG4mIzQzOyAqIG5vdCBjYWNoZWQgYW5kIHRodXMgZG9uJiMzOTt0IHJlcXVpcmUgYW4gaW52YWxpZGF0aW9uIHRvIGVuc3VyZSB0aGUgSU9NTVVcbiYjNDM7ICogY29uc3VtZXMgZnJlc2ggaW5mb3JtYXRpb24uXG4gICovXG4taW50IGFtZF9pb21tdV91cGRhdGVfZ2Eodm9pZCAqZGF0YSwgaW50IGNwdSwgYm9vbCBnYV9sb2dfaW50cilcbiYjNDM7aW50IGFtZF9pb21tdV91cGRhdGVfZ2Eodm9pZCAqZGF0YSwgaW50IGFwaWNpZCwgYm9vbCB3YWtldXBfaW50ciwgYm9vbCBpc19ydW5uaW5nKVxuIHtcbiBcdHN0cnVjdCBhbWRfaXJfZGF0YSAqaXJfZGF0YSA9IChzdHJ1Y3QgYW1kX2lyX2RhdGEgKilkYXRhO1xuIFx0c3RydWN0IGlydGVfZ2EgKmVudHJ5ID0gKHN0cnVjdCBpcnRlX2dhICopIGlyX2RhdGEtXHUwMDNlZW50cnk7XG5AQCAtNDAwNiwxNCAmIzQzOzQwMTYsMTQgQEAgaW50IGFtZF9pb21tdV91cGRhdGVfZ2Eodm9pZCAqZGF0YSwgaW50IGNwdSwgYm9vbCBnYV9sb2dfaW50cilcbiBcdGlmICghaXJfZGF0YS1cdTAwM2Vpb21tdSlcbiBcdFx0cmV0dXJuIC1FTk9ERVY7XG4gXG4tXHRfX2FtZF9pb21tdV91cGRhdGVfZ2EoZW50cnksIGNwdSwgZ2FfbG9nX2ludHIpO1xuJiM0MztcdF9fYW1kX2lvbW11X3VwZGF0ZV9nYShlbnRyeSwgYXBpY2lkLCB3YWtldXBfaW50ciwgaXNfcnVubmluZyk7XG4gXG4gXHRyZXR1cm4gX19tb2RpZnlfaXJ0ZV9nYShpcl9kYXRhLVx1MDAzZWlvbW11LCBpcl9kYXRhLVx1MDAzZWlycV8yX2lydGUuZGV2aWQsXG4gXHRcdFx0XHRpcl9kYXRhLVx1MDAzZWlycV8yX2lydGUuaW5kZXgsIGVudHJ5KTtcbiB9XG4gRVhQT1JUX1NZTUJPTChhbWRfaW9tbXVfdXBkYXRlX2dhKTtcbiBcbi1pbnQgYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUodm9pZCAqZGF0YSwgaW50IGNwdSwgYm9vbCBnYV9sb2dfaW50cilcbiYjNDM7aW50IGFtZF9pb21tdV9hY3RpdmF0ZV9ndWVzdF9tb2RlKHZvaWQgKmRhdGEsIGludCBhcGljaWQsIGJvb2wgd2FrZXVwX2ludHIsIGJvb2wgaXNfcnVubmluZylcbiB7XG4gXHRzdHJ1Y3QgYW1kX2lyX2RhdGEgKmlyX2RhdGEgPSAoc3RydWN0IGFtZF9pcl9kYXRhICopZGF0YTtcbiBcdHN0cnVjdCBpcnRlX2dhICplbnRyeSA9IChzdHJ1Y3QgaXJ0ZV9nYSAqKSBpcl9kYXRhLVx1MDAzZWVudHJ5O1xuQEAgLTQwMzYsNyAmIzQzOzQwNDYsNyBAQCBpbnQgYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUodm9pZCAqZGF0YSwgaW50IGNwdSwgYm9vbCBnYV9sb2dfaW50cilcbiBcdGVudHJ5LVx1MDAzZWhpLmZpZWxkcy52ZWN0b3IgICAgICAgICAgICA9IGlyX2RhdGEtXHUwMDNlZ2FfdmVjdG9yO1xuIFx0ZW50cnktXHUwMDNlbG8uZmllbGRzX3ZhcGljLmdhX3RhZyAgICAgID0gaXJfZGF0YS1cdTAwM2VnYV90YWc7XG4gXG4tXHRfX2FtZF9pb21tdV91cGRhdGVfZ2EoZW50cnksIGNwdSwgZ2FfbG9nX2ludHIpO1xuJiM0MztcdF9fYW1kX2lvbW11X3VwZGF0ZV9nYShlbnRyeSwgYXBpY2lkLCB3YWtldXBfaW50ciwgaXNfcnVubmluZyk7XG4gXG4gXHRyZXR1cm4gbW9kaWZ5X2lydGVfZ2EoaXJfZGF0YS1cdTAwM2Vpb21tdSwgaXJfZGF0YS1cdTAwM2VpcnFfMl9pcnRlLmRldmlkLFxuIFx0XHRcdCAgICAgIGlyX2RhdGEtXHUwMDNlaXJxXzJfaXJ0ZS5pbmRleCwgZW50cnkpO1xuQEAgLTQxMDcsOCAmIzQzOzQxMTcsOSBAQCBzdGF0aWMgaW50IGFtZF9pcl9zZXRfdmNwdV9hZmZpbml0eShzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEsIHZvaWQgKmluZm8pXG4gXHRcdGlyX2RhdGEtXHUwMDNlZ2FfdmVjdG9yID0gcGlfZGF0YS1cdTAwM2V2ZWN0b3I7XG4gXHRcdGlyX2RhdGEtXHUwMDNlZ2FfdGFnID0gcGlfZGF0YS1cdTAwM2VnYV90YWc7XG4gXHRcdGlmIChwaV9kYXRhLVx1MDAzZWlzX2d1ZXN0X21vZGUpXG4tXHRcdFx0cmV0ID0gYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUoaXJfZGF0YSwgcGlfZGF0YS1cdTAwM2VjcHUsXG4tXHRcdFx0XHRcdFx0XHQgICAgcGlfZGF0YS1cdTAwM2VnYV9sb2dfaW50cik7XG4mIzQzO1x0XHRcdHJldCA9IGFtZF9pb21tdV9hY3RpdmF0ZV9ndWVzdF9tb2RlKGlyX2RhdGEsIHBpX2RhdGEtXHUwMDNlYXBpY2lkLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgICBwaV9kYXRhLVx1MDAzZXdha2V1cF9pbnRyLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgICBwaV9kYXRhLVx1MDAzZWlzX3J1bm5pbmcpO1xuIFx0XHRlbHNlXG4gXHRcdFx0cmV0ID0gYW1kX2lvbW11X2RlYWN0aXZhdGVfZ3Vlc3RfbW9kZShpcl9kYXRhKTtcbiBcdH0gZWxzZSB7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hbWQtaW9tbXUuaCBiL2luY2x1ZGUvbGludXgvYW1kLWlvbW11LmhcbmluZGV4IGVkY2VlOWY1MzM1YTZmLi43MjlkODJjNGUwOWUyNyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYW1kLWlvbW11LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYW1kLWlvbW11LmhcbkBAIC0zMCw4ICYjNDM7MzAsMTAgQEAgc3RhdGljIGlubGluZSB2b2lkIGFtZF9pb21tdV9kZXRlY3Qodm9pZCkgeyB9XG4gLyogSU9NTVUgQVZJQyBGdW5jdGlvbiAqL1xuIGV4dGVybiBpbnQgYW1kX2lvbW11X3JlZ2lzdGVyX2dhX2xvZ19ub3RpZmllcihpbnQgKCpub3RpZmllcikodTMyKSk7XG4gXG4tZXh0ZXJuIGludCBhbWRfaW9tbXVfdXBkYXRlX2dhKHZvaWQgKmRhdGEsIGludCBjcHUsIGJvb2wgZ2FfbG9nX2ludHIpO1xuLWV4dGVybiBpbnQgYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUodm9pZCAqZGF0YSwgaW50IGNwdSwgYm9vbCBnYV9sb2dfaW50cik7XG4mIzQzO2V4dGVybiBpbnQgYW1kX2lvbW11X3VwZGF0ZV9nYSh2b2lkICpkYXRhLCBpbnQgYXBpY2lkLCBib29sIHdha2V1cF9pbnRyLFxuJiM0MztcdFx0XHQgICAgICAgYm9vbCBpc19ydW5uaW5nKTtcbiYjNDM7ZXh0ZXJuIGludCBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZSh2b2lkICpkYXRhLCBpbnQgYXBpY2lkLCBib29sIHdha2V1cF9pbnRyLFxuJiM0MztcdFx0XHRcdFx0IGJvb2wgaXNfcnVubmluZyk7XG4gZXh0ZXJuIGludCBhbWRfaW9tbXVfZGVhY3RpdmF0ZV9ndWVzdF9tb2RlKHZvaWQgKmRhdGEpO1xuIFxuICNlbHNlIC8qIGRlZmluZWQoQ09ORklHX0FNRF9JT01NVSkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0lSUV9SRU1BUCkgKi9cbkBAIC00MiwxMiAmIzQzOzQ0LDE0IEBAIGFtZF9pb21tdV9yZWdpc3Rlcl9nYV9sb2dfbm90aWZpZXIoaW50ICgqbm90aWZpZXIpKHUzMikpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgYW1kX2lvbW11X3VwZGF0ZV9nYSh2b2lkICpkYXRhLCBpbnQgY3B1LCBib29sIGdhX2xvZ19pbnRyKVxuJiM0MztzdGF0aWMgaW5saW5lIGludCBhbWRfaW9tbXVfdXBkYXRlX2dhKHZvaWQgKmRhdGEsIGludCBhcGljaWQsIGJvb2wgd2FrZXVwX2ludHIsXG4mIzQzO1x0XHRcdFx0ICAgICAgYm9vbCBpc19ydW5uaW5nKVxuIHtcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZSh2b2lkICpkYXRhLCBpbnQgY3B1LCBib29sIGdhX2xvZ19pbnRyKVxuJiM0MztzdGF0aWMgaW5saW5lIGludCBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZSh2b2lkICpkYXRhLCBpbnQgYXBpY2lkLCBib29sIHdha2V1cF9pbnRyLFxuJiM0MztcdFx0XHRcdFx0XHRib29sIGlzX3J1bm5pbmcpXG4ge1xuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTc2LDQgJiM0Mzs4MCw1IEBAIHN0YXRpYyBpbmxpbmUgaW50IGFtZF9pb21tdV9zbnBfZGlzYWJsZSh2b2lkKSB7IHJldHVybiAwOyB9XG4gc3RhdGljIGlubGluZSBib29sIGFtZF9pb21tdV9zZXZfdGlvX3N1cHBvcnRlZCh2b2lkKSB7IHJldHVybiBmYWxzZTsgfVxuICNlbmRpZlxuIFxuJiM0MztleHRlcm4gYm9vbCBhbWRfaW9tbXVfZ2FwcGk7XG4gI2VuZGlmIC8qIF9BU01fWDg2X0FNRF9JT01NVV9IICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTM6MzY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7LAogICAgJiMzNDtBTURfSU9NTVUmIzM0OywKICAgICYjMzQ7SVJRX1JFTUFQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YXZpY19hZGRfdmNwdV90b19nYXBwaV93YWtldXBfbGlzdCYjMzQ7LAogICAgJiMzNDthdmljX3JlbW92ZV92Y3B1X2Zyb21fZ2FwcGlfd2FrZXVwX2xpc3QmIzM0OywKICAgICYjMzQ7YXZpY19nYXBwaV93YWtldXBfaGFuZGxlciYjMzQ7LAogICAgJiMzNDthdmljX3BpX3VwZGF0ZV9pcnRlJiMzNDssCiAgICAmIzM0O2F2aWNfdXBkYXRlX2lvbW11X3ZjcHVfYWZmaW5pdHkmIzM0OywKICAgICYjMzQ7X19hbWRfaW9tbXVfdXBkYXRlX2dhJiMzNDssCiAgICAmIzM0O2FtZF9pb21tdV91cGRhdGVfZ2EmIzM0OywKICAgICYjMzQ7YW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBHQVBQSSAoR3Vlc3QgQVBJQyBQb3N0ZWQgSW50ZXJydXB0cykgc3VwcG9ydCBmb3IgQU1EIElPTU1VIGFuZCBLVk0gU1ZNIEFWSUMuIEl0IG1vZGlmaWVzIHRoZSBJUlRFIGNvbmZpZ3VyYXRpb24gZm9yIHBvc3RlZCBpbnRlcnJ1cHRzIGFuZCBpbnRyb2R1Y2VzIGEgbmV3IHdha2V1cCBsaXN0IGZvciBHQVBQSSBpbiBLVk0uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIHZpcnR1YWxpemF0aW9uIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjMDBjNWFjZGQ0MmI0MGRiMjBmNDFjMDE5Zjk5MTY4OTU2MzgwZTFlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBKdWwgMTMgMTM6MzY6MjIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0CmluZGV4IDk3MDA3ZjRmNjlkNGU4Li5kMjdmMTBjYmIwMDRjYyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQKQEAgLTQ1NSw3ICYjNDM7NDU1LDggQEAgS2VybmVsIHBhcmFtZXRlcnMKIAkJCQkgICAgICAgICAgdG8gNCBLaUIuCiAJCQl2Ml9wZ3NpemVzX29ubHkgLSBMaW1pdCBwYWdlLXNpemVzIHVzZWQgZm9yIHYxIHBhZ2UtdGFibGVzCiAJCQkJICAgICAgICAgIHRvIDRLaUIvMk1pYi8xR2lCLgotCiYjNDM7CQkJZ2FwcGkJCS0gVXNlIEdBUFBJIGluc3RlYWQgb2YgR0FMT0cgZm9yIHZDUFUKJiM0MzsJCQkJCSAgd2FrZXVwIG5vdGlmaWNhdGlvbi4KIAogCWFtZF9pb21tdV9kdW1wPQlbSFcsWDg2LTY0XQogCQkJRW5hYmxlIEFNRCBJT01NVSBkcml2ZXIgb3B0aW9uIHRvIGR1bXAgdGhlIEFDUEkgdGFibGUKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lycV9yZW1hcHBpbmcuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lycV9yZW1hcHBpbmcuaAppbmRleCAzN2I5NGY0ODRlZjMzOC4uYWYwY2RmYTMyYzQ0N2YgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lycV9yZW1hcHBpbmcuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcnFfcmVtYXBwaW5nLmgKQEAgLTM1LDggJiM0MzszNSw5IEBAIHN0cnVjdCBhbWRfaW9tbXVfcGlfZGF0YSB7CiAJdTY0IHZhcGljX2FkZHI7CQkvKiBQaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSB2Q1BVJiMzOTtzIHZBUElDLiAqLwogCXUzMiBnYV90YWc7CiAJdTMyIHZlY3RvcjsJCS8qIEd1ZXN0IHZlY3RvciBvZiB0aGUgaW50ZXJydXB0ICovCi0JaW50IGNwdTsKLQlib29sIGdhX2xvZ19pbnRyOwomIzQzOwlpbnQgYXBpY2lkOwomIzQzOwlib29sIHdha2V1cF9pbnRyOwomIzQzOwlib29sIGlzX3J1bm5pbmc7CiAJYm9vbCBpc19ndWVzdF9tb2RlOwogCXZvaWQgKmlyX2RhdGE7CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaAppbmRleCBiY2ZlYjVlN2MwZWRmMi4uYWRkOGI3Mjc0Y2MyZjggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oCkBAIC0yNTksMTEgJiM0MzsyNTksMTIgQEAgc3RydWN0IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkgdm1jYl9jb250cm9sX2FyZWEgewogI2RlZmluZSBBVklDX0xPR0lDQUxfSURfRU5UUllfVkFMSURfTUFTSwkJKDEgJmx0OyZsdDsgMzEpCiAKIC8qCi0gKiBHQV9MT0dfSU5UUiBpcyBhIHN5bnRoZXRpYyBmbGFnIHRoYXQmIzM5O3MgbmV2ZXIgcHJvcGFnYXRlZCB0byBoYXJkd2FyZS12aXNpYmxlCi0gKiB0YWJsZXMuICBHQV9MT0dfSU5UUiBpcyBzZXQgaWYgdGhlIHZDUFUgbmVlZHMgZGV2aWNlIHBvc3RlZCBJUlFzIHRvIGdlbmVyYXRlCi0gKiBHQSBsb2cgaW50ZXJydXB0cyB0byB3YWtlIHRoZSB2Q1BVIChiZWNhdXNlIGl0JiMzOTtzIGJsb2NraW5nIG9yIGFib3V0IHRvIGJsb2NrKS4KJiM0MzsgKiBXQUtFVVBfSU5UUiBpcyBhIHN5bnRoZXRpYyBmbGFnIHRoYXQmIzM5O3MgbmV2ZXIgcHJvcGFnYXRlZCB0byBoYXJkd2FyZS12aXNpYmxlCiYjNDM7ICogdGFibGVzLiAgV0FLRVVQX0lOVFIgaXMgc2V0IGlmIHRoZSB2Q1BVIG5lZWRzIGRldmljZSBwb3N0ZWQgSVJRcyB0byBnZW5lcmF0ZQomIzQzOyAqIEdBIGxvZy9HQVBQSSBpbnRlcnJ1cHRzIHRvIHdha2UgdGhlIHZDUFUgKGJlY2F1c2UgaXQmIzM5O3MgYmxvY2tpbmcgb3IgYWJvdXQgdG8KJiM0MzsgKiBibG9jaykuCiAgKi8KLSNkZWZpbmUgQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9HQV9MT0dfSU5UUgkJQklUX1VMTCg2MSkKJiM0MzsjZGVmaW5lIEFWSUNfUEhZU0lDQUxfSURfRU5UUllfV0FLRVVQX0lOVFIJCUJJVF9VTEwoNjEpCiAKICNkZWZpbmUgQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9IT1NUX1BIWVNJQ0FMX0lEX01BU0sJR0VOTUFTS19VTEwoMTEsIDApCiAjZGVmaW5lIEFWSUNfUEhZU0lDQUxfSURfRU5UUllfQkFDS0lOR19QQUdFX01BU0sJR0VOTUFTS19VTEwoNTEsIDEyKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9hdmljLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYwppbmRleCBjZGQ1YTZkYzY0NmYxMS4uOTgyYTU5ODg1MzJmZjQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9zdm0vYXZpYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9zdm0vYXZpYy5jCkBAIC02Myw2ICYjNDM7NjMsOSBAQAogCWdhX3RhZzsJCQkJCQkJCVwKIH0pCiAKJiM0MztzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGxpc3RfaGVhZCwgZ2FwcGlfdmNwdV93YWtldXBfbGlzdCk7CiYjNDM7c3RhdGljIERFRklORV9QRVJfQ1BVKHJhd19zcGlubG9ja190LCBnYXBwaV92Y3B1X3dha2V1cF9saXN0X2xvY2spOwomIzQzOwogc3RhdGljX2Fzc2VydChfX0FWSUNfR0FUQUcoQVZJQ19WTV9JRF9NQVNLLCBBVklDX1ZDUFVfSURYX01BU0spID09IC0xdSk7CiAKICNkZWZpbmUgQVZJQ19BVVRPX01PREUgLTEKQEAgLTg3NCw2ICYjNDM7ODc3LDkgQEAgaW50IGF2aWNfaW5pdF92Y3B1KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKQogCUlOSVRfTElTVF9IRUFEKCZhbXA7c3ZtLSZndDtpcl9saXN0KTsKIAlyYXdfc3Bpbl9sb2NrX2luaXQoJmFtcDtzdm0tJmd0O2lyX2xpc3RfbG9jayk7CiAKJiM0MzsJSU5JVF9MSVNUX0hFQUQoJmFtcDtzdm0tJmd0O2dhcHBpX3ZjcHVfd2FrZXVwX2xpc3QpOwomIzQzOwlzdm0tJmd0O2dhcHBpX2NwdSA9IC0xOwomIzQzOwogCWlmICghZW5hYmxlX2FwaWN2IHx8ICFpcnFjaGlwX2luX2tlcm5lbCh2Y3B1LSZndDtrdm0pKQogCQlyZXR1cm4gMDsKIApAQCAtODg2LDYgJiM0Mzs4OTIsNDIgQEAgaW50IGF2aWNfaW5pdF92Y3B1KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKQogCXJldHVybiByZXQ7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBhdmljX2FkZF92Y3B1X3RvX2dhcHBpX3dha2V1cF9saXN0KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBpbnQgY3B1KQomIzQzO3sKJiM0MzsJc3RydWN0IGxpc3RfaGVhZCAqd2FrZXVwX2xpc3Q7CiYjNDM7CXJhd19zcGlubG9ja190ICpzcGlubG9jazsKJiM0MzsKJiM0MzsJaWYgKFdBUk5fT04odW5saWtlbHkoY3B1ICZsdDsgMCkpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwl3YWtldXBfbGlzdCA9ICZhbXA7cGVyX2NwdShnYXBwaV92Y3B1X3dha2V1cF9saXN0LCBjcHUpOwomIzQzOwlzcGlubG9jayA9ICZhbXA7cGVyX2NwdShnYXBwaV92Y3B1X3dha2V1cF9saXN0X2xvY2ssIGNwdSk7CiYjNDM7CWd1YXJkKHJhd19zcGlubG9ja19pcnFzYXZlKShzcGlubG9jayk7CiYjNDM7CWlmIChsaXN0X2VtcHR5KCZhbXA7c3ZtLSZndDtnYXBwaV92Y3B1X3dha2V1cF9saXN0KSkKJiM0MzsJCWxpc3RfYWRkX3RhaWwoJmFtcDtzdm0tJmd0O2dhcHBpX3ZjcHVfd2FrZXVwX2xpc3QsIHdha2V1cF9saXN0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgYXZpY19yZW1vdmVfdmNwdV9mcm9tX2dhcHBpX3dha2V1cF9saXN0KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBpbnQgY3B1KQomIzQzO3sKJiM0MzsJcmF3X3NwaW5sb2NrX3QgKnNwaW5sb2NrOwomIzQzOwomIzQzOwlpZiAoV0FSTl9PTih1bmxpa2VseShjcHUgJmx0OyAwKSkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXNwaW5sb2NrID0gJmFtcDtwZXJfY3B1KGdhcHBpX3ZjcHVfd2FrZXVwX2xpc3RfbG9jaywgY3B1KTsKJiM0MzsJZ3VhcmQocmF3X3NwaW5sb2NrX2lycXNhdmUpKHNwaW5sb2NrKTsKJiM0MzsJaWYgKCFsaXN0X2VtcHR5KCZhbXA7c3ZtLSZndDtnYXBwaV92Y3B1X3dha2V1cF9saXN0KSkKJiM0MzsJCWxpc3RfZGVsX2luaXQoJmFtcDtzdm0tJmd0O2dhcHBpX3ZjcHVfd2FrZXVwX2xpc3QpOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIGF2aWNfZGVzdHJveV92Y3B1KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKQomIzQzO3sKJiM0MzsJaWYgKHN2bS0mZ3Q7Z2FwcGlfY3B1ICE9IC0xICZhbXA7JmFtcDsgYW1kX2lvbW11X2dhcHBpKSB7CiYjNDM7CQlhdmljX3JlbW92ZV92Y3B1X2Zyb21fZ2FwcGlfd2FrZXVwX2xpc3Qoc3ZtLCBzdm0tJmd0O2dhcHBpX2NwdSk7CiYjNDM7CQlzdm0tJmd0O2dhcHBpX2NwdSA9IC0xOwomIzQzOwl9CiYjNDM7fQomIzQzOwogdm9pZCBhdmljX2FwaWN2X3Bvc3Rfc3RhdGVfcmVzdG9yZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJYXZpY19oYW5kbGVfZGZyX3VwZGF0ZSh2Y3B1KTsKQEAgLTg5NiwxMyAmIzQzOzkzOCwxOCBAQCBzdGF0aWMgdm9pZCBzdm1faXJfbGlzdF9kZWwoc3RydWN0IGt2bV9rZXJuZWxfaXJxZmQgKmlycWZkKQogewogCXN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGlycWZkLSZndDtpcnFfYnlwYXNzX3ZjcHU7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsJc3RydWN0IHZjcHVfc3ZtICpzdm07CiAKIAlpZiAoIXZjcHUpCiAJCXJldHVybjsKIAotCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3RvX3N2bSh2Y3B1KS0mZ3Q7aXJfbGlzdF9sb2NrLCBmbGFncyk7CiYjNDM7CXN2bSA9IHRvX3N2bSh2Y3B1KTsKJiM0MzsKJiM0MzsJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZhbXA7c3ZtLSZndDtpcl9saXN0X2xvY2ssIGZsYWdzKTsKIAlsaXN0X2RlbCgmYW1wO2lycWZkLSZndDt2Y3B1X2xpc3QpOwotCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7dG9fc3ZtKHZjcHUpLSZndDtpcl9saXN0X2xvY2ssIGZsYWdzKTsKJiM0MzsJaWYgKGFtZF9pb21tdV9nYXBwaSAmYW1wOyZhbXA7IGxpc3RfZW1wdHkoJmFtcDtzdm0tJmd0O2lyX2xpc3QpKQomIzQzOwkJYXZpY19yZW1vdmVfdmNwdV9mcm9tX2dhcHBpX3dha2V1cF9saXN0KHN2bSwgc3ZtLSZndDtnYXBwaV9jcHUpOwomIzQzOwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3N2bS0mZ3Q7aXJfbGlzdF9sb2NrLCBmbGFncyk7CiB9CiAKIGludCBhdmljX3BpX3VwZGF0ZV9pcnRlKHN0cnVjdCBrdm1fa2VybmVsX2lycWZkICppcnFmZCwgc3RydWN0IGt2bSAqa3ZtLApAQCAtOTIzLDggJiM0Mzs5NzAsNiBAQCBpbnQgYXZpY19waV91cGRhdGVfaXJ0ZShzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFmZCAqaXJxZmQsIHN0cnVjdCBrdm0gKmt2bSwKIAkJICogaWYgQVZJQyBpcyBlbmFibGVkL3VuaW5oaWJpdGVkIGluIHRoZSBmdXR1cmUuCiAJCSAqLwogCQlzdHJ1Y3QgYW1kX2lvbW11X3BpX2RhdGEgcGlfZGF0YSA9IHsKLQkJCS5nYV90YWcgPSBBVklDX0dBVEFHKHRvX2t2bV9zdm0oa3ZtKS0mZ3Q7YXZpY192bV9pZCwKLQkJCQkJICAgICB2Y3B1LSZndDt2Y3B1X2lkeCksCiAJCQkuaXNfZ3Vlc3RfbW9kZSA9IGt2bV92Y3B1X2FwaWN2X2FjdGl2ZSh2Y3B1KSwKIAkJCS52YXBpY19hZGRyID0gYXZpY19nZXRfYmFja2luZ19wYWdlX2FkZHJlc3ModG9fc3ZtKHZjcHUpKSwKIAkJCS52ZWN0b3IgPSB2ZWN0b3IsCkBAIC05MzIsNiAmIzQzOzk3Nyw3IEBAIGludCBhdmljX3BpX3VwZGF0ZV9pcnRlKHN0cnVjdCBrdm1fa2VybmVsX2lycWZkICppcnFmZCwgc3RydWN0IGt2bSAqa3ZtLAogCQlzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTsKIAkJdTY0IGVudHJ5OwogCQlpbnQgcmV0OwomIzQzOwkJYm9vbCBpc192Y3B1X3dhaXRpbmcgPSBmYWxzZTsKIAogCQkvKgogCQkgKiBQcmV2ZW50IHRoZSB2Q1BVIGZyb20gYmVpbmcgc2NoZWR1bGVkIG91dCBvciBtaWdyYXRlZCB1bnRpbApAQCAtOTQ3LDE3ICYjNDM7OTkzLDMzIEBAIGludCBhdmljX3BpX3VwZGF0ZV9pcnRlKHN0cnVjdCBrdm1fa2VybmVsX2lycWZkICppcnFmZCwgc3RydWN0IGt2bSAqa3ZtLAogCQkgKiBzY2hlZHVsZWQgb3V0LCBLVk0gd2lsbCB1cGRhdGUgdGhlIHBDUFUgaW5mbyB3aGVuIHRoZSB2Q1BVCiAJCSAqIGlzIGF3YWtlbmVkIGFuZC9vciBzY2hlZHVsZWQgaW4uICBTZWUgYWxzbyBhdmljX3ZjcHVfbG9hZCgpLgogCQkgKi8KJiM0MzsJCWlmIChhbWRfaW9tbXVfZ2FwcGkpCiYjNDM7CQkJcGlfZGF0YS5nYV90YWcgPSBQT1NURURfSU5UUl9XQUtFVVBfVkVDVE9SOwomIzQzOwkJZWxzZQomIzQzOwkJCXBpX2RhdGEuZ2FfdGFnID0gQVZJQ19HQVRBRyh0b19rdm1fc3ZtKGt2bSktJmd0O2F2aWNfdm1faWQsCiYjNDM7CQkJCQkJICAgIHZjcHUtJmd0O3ZjcHVfaWR4KTsKJiM0MzsKIAkJZW50cnkgPSBzdm0tJmd0O2F2aWNfcGh5c2ljYWxfaWRfZW50cnk7CiAJCWlmIChlbnRyeSAmYW1wOyBBVklDX1BIWVNJQ0FMX0lEX0VOVFJZX0lTX1JVTk5JTkdfTUFTSykgewotCQkJcGlfZGF0YS5jcHUgPSBlbnRyeSAmYW1wOyBBVklDX1BIWVNJQ0FMX0lEX0VOVFJZX0hPU1RfUEhZU0lDQUxfSURfTUFTSzsKJiM0MzsJCQlwaV9kYXRhLmFwaWNpZCA9IGVudHJ5ICZhbXA7IEFWSUNfUEhZU0lDQUxfSURfRU5UUllfSE9TVF9QSFlTSUNBTF9JRF9NQVNLOwomIzQzOwkJCXBpX2RhdGEuaXNfcnVubmluZyA9IHRydWU7CiAJCX0gZWxzZSB7Ci0JCQlwaV9kYXRhLmNwdSA9IC0xOwotCQkJcGlfZGF0YS5nYV9sb2dfaW50ciA9IGVudHJ5ICZhbXA7IEFWSUNfUEhZU0lDQUxfSURfRU5UUllfR0FfTE9HX0lOVFI7CiYjNDM7CQkJcGlfZGF0YS5hcGljaWQgPSAtMTsKJiM0MzsJCQlwaV9kYXRhLndha2V1cF9pbnRyID0gZW50cnkgJmFtcDsgQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9XQUtFVVBfSU5UUjsKJiM0MzsJCQlwaV9kYXRhLmlzX3J1bm5pbmcgPSBmYWxzZTsKJiM0MzsKJiM0MzsJCQlpZiAoYW1kX2lvbW11X2dhcHBpKSB7CiYjNDM7CQkJCXBpX2RhdGEuYXBpY2lkID0ga3ZtX2NwdV9nZXRfYXBpY2lkKHN2bS0mZ3Q7Z2FwcGlfY3B1KTsKJiM0MzsJCQkJaWYgKGxpc3RfZW1wdHkoJmFtcDtzdm0tJmd0O2lyX2xpc3QpKSB7CiYjNDM7CQkJCQlhdmljX2FkZF92Y3B1X3RvX2dhcHBpX3dha2V1cF9saXN0KHN2bSwgc3ZtLSZndDtnYXBwaV9jcHUpOwomIzQzOwkJCQkJaXNfdmNwdV93YWl0aW5nID0gdHJ1ZTsKJiM0MzsJCQkJfQomIzQzOwkJCX0KIAkJfQogCiAJCXJldCA9IGlycV9zZXRfdmNwdV9hZmZpbml0eShob3N0X2lycSwgJmFtcDtwaV9kYXRhKTsKIAkJaWYgKHJldCkKLQkJCXJldHVybiByZXQ7CiYjNDM7CQkJZ290byBnYXBwaV9lcnJfb3V0OwogCiAJCS8qCiAJCSAqIFJldmVydCB0byBsZWdhY3kgbW9kZSBpZiB0aGUgSU9NTVUgZGlkbiYjMzk7dCBwcm92aWRlIG1ldGFkYXRhCkBAIC05NjYsMTIgJiM0MzsxMDI4LDE3IEBAIGludCBhdmljX3BpX3VwZGF0ZV9pcnRlKHN0cnVjdCBrdm1fa2VybmVsX2lycWZkICppcnFmZCwgc3RydWN0IGt2bSAqa3ZtLAogCQkgKi8KIAkJaWYgKFdBUk5fT05fT05DRSghcGlfZGF0YS5pcl9kYXRhKSkgewogCQkJaXJxX3NldF92Y3B1X2FmZmluaXR5KGhvc3RfaXJxLCBOVUxMKTsKLQkJCXJldHVybiAtRUlPOwomIzQzOwkJCXJldCA9IC1FSU87CiYjNDM7CQkJZ290byBnYXBwaV9lcnJfb3V0OwogCQl9CiAKIAkJaXJxZmQtJmd0O2lycV9ieXBhc3NfZGF0YSA9IHBpX2RhdGEuaXJfZGF0YTsKIAkJbGlzdF9hZGQoJmFtcDtpcnFmZC0mZ3Q7dmNwdV9saXN0LCAmYW1wO3N2bS0mZ3Q7aXJfbGlzdCk7CiAJCXJldHVybiAwOwomIzQzO2dhcHBpX2Vycl9vdXQ6CiYjNDM7CQlpZiAoaXNfdmNwdV93YWl0aW5nKQomIzQzOwkJCWF2aWNfcmVtb3ZlX3ZjcHVfZnJvbV9nYXBwaV93YWtldXBfbGlzdChzdm0sIHN2bS0mZ3Q7Z2FwcGlfY3B1KTsKJiM0MzsJCXJldHVybiByZXQ7CiAJfQogCXJldHVybiBpcnFfc2V0X3ZjcHVfYWZmaW5pdHkoaG9zdF9pcnEsIE5VTEwpOwogfQpAQCAtOTkxLDIzICYjNDM7MTA1OCwyNCBAQCBlbnVtIGF2aWNfdmNwdV9hY3Rpb24gewogCSAqIE5vIHVuaXF1ZSBhY3Rpb24gaXMgcmVxdWlyZWQgdG8gZGVhbCB3aXRoIGEgdkNQVSB0aGF0IHN0b3BzL3N0YXJ0cwogCSAqIHJ1bm5pbmcuICBBIHZDUFUgdGhhdCBzdGFydHMgcnVubmluZyBieSBkZWZpbml0aW9uIHN0b3BzIGJsb2NraW5nIGFzCiAJICogd2VsbCwgYW5kIGEgdkNQVSB0aGF0IHN0b3BzIHJ1bm5pbmcgY2FuJiMzOTt0IGhhdmUgYmVlbiBibG9ja2luZywgaS5lLgotCSAqIGRvZXNuJiMzOTt0IG5lZWQgdG8gdG9nZ2xlIEdBTG9nSW50ci4KJiM0MzsJICogZG9lc24mIzM5O3QgbmVlZCB0byB0b2dnbGUgaG9zdCB3YWtldXAgbm90aWZpY2F0aW9uLgogCSAqLwogCUFWSUNfU1RBUlRfUlVOTklORwk9IDAsCiAJQVZJQ19TVE9QX1JVTk5JTkcJPSAwLAogCiAJLyoKLQkgKiBXaGVuIGEgdkNQVSBzdGFydHMgYmxvY2tpbmcsIEtWTSBuZWVkcyB0byBzZXQgdGhlIEdBTG9nSW50ciBmbGFnCi0JICogaW50IGFsbCBhc3NvY2lhdGVkIElSVEVzIHNvIHRoYXQgS1ZNIGNhbiB3YWtlIHRoZSB2Q1BVIGlmIGFuIElSUSBpcwotCSAqIHNlbnQgdG8gdGhlIHZDUFUuCiYjNDM7CSAqIFdoZW4gYSB2Q1BVIHN0YXJ0cyBibG9ja2luZywgS1ZNIG5lZWRzIHRvIHJlcXVlc3QgaG9zdCB3YWtldXAKJiM0MzsJICogbm90aWZpY2F0aW9uIGluIGFsbCBhc3NvY2lhdGVkIElSVEVzIHNvIHRoYXQgS1ZNIGNhbiB3YWtlIHRoZSB2Q1BVCiYjNDM7CSAqIGlmIGFuIElSUSBpcyBzZW50IHRvIHRoZSB2Q1BVLgogCSAqLwogCUFWSUNfU1RBUlRfQkxPQ0tJTkcJPSBCSVQoMSksCiB9OwogCi1zdGF0aWMgdm9pZCBhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSwKLQkJCQkJICAgIGVudW0gYXZpY192Y3B1X2FjdGlvbiBhY3Rpb24pCiYjNDM7c3RhdGljIHZvaWQgYXZpY191cGRhdGVfaW9tbXVfdmNwdV9hZmZpbml0eShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBhcGljaWQsCiYjNDM7CQkJCQkgICAgaW50IGNwdSwgZW51bSBhdmljX3ZjcHVfYWN0aW9uIGFjdGlvbikKIHsKLQlib29sIGdhX2xvZ19pbnRyID0gKGFjdGlvbiAmYW1wOyBBVklDX1NUQVJUX0JMT0NLSU5HKTsKJiM0MzsJYm9vbCB3YWtldXBfaW50ciA9IChhY3Rpb24gJmFtcDsgQVZJQ19TVEFSVF9CTE9DS0lORyk7CiYjNDM7CWJvb2wgaXNfcnVubmluZyA9IGFwaWNpZCAmZ3Q7PSAwOwogCXN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpOwogCXN0cnVjdCBrdm1fa2VybmVsX2lycWZkICppcnFmZDsKIApAQCAtMTAxNSwxOCAmIzQzOzEwODMsMzYgQEAgc3RhdGljIHZvaWQgYXZpY191cGRhdGVfaW9tbXVfdmNwdV9hZmZpbml0eShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUsCiAKIAkvKgogCSAqIEhlcmUsIHdlIGdvIHRocm91Z2ggdGhlIHBlci12Y3B1IGlyX2xpc3QgdG8gdXBkYXRlIGFsbCBleGlzdGluZwotCSAqIGludGVycnVwdCByZW1hcHBpbmcgdGFibGUgZW50cnkgdGFyZ2V0aW5nIHRoaXMgdmNwdS4KJiM0MzsJICogaW50ZXJydXB0IHJlbWFwcGluZyB0YWJsZSBlbnRyaWVzIHRhcmdldGluZyB0aGlzIHZjcHUuCiAJICovCi0JaWYgKGxpc3RfZW1wdHkoJmFtcDtzdm0tJmd0O2lyX2xpc3QpKQomIzQzOwlpZiAobGlzdF9lbXB0eSgmYW1wO3N2bS0mZ3Q7aXJfbGlzdCkpIHsKJiM0MzsJCWlmIChhbWRfaW9tbXVfZ2FwcGkgJmFtcDsmYW1wOyBjcHUgJmd0Oz0gMCkKJiM0MzsJCQlzdm0tJmd0O2dhcHBpX2NwdSA9IGNwdTsKIAkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChpc19ydW5uaW5nICZhbXA7JmFtcDsgYW1kX2lvbW11X2dhcHBpKSB7CiYjNDM7CQlpZiAoc3ZtLSZndDtnYXBwaV9jcHUgIT0gLTEpCiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBIYW5kbGUgaW5pdGlhbCBzdGF0ZSB3aGVuIHZDUFUgaXMgbG9hZGVkIGZvciB0aGUKJiM0MzsJCQkgKiBmaXJzdCB0aW1lIHdpdGhvdXQgYW55IElSUSBhZmZpbml0eS4KJiM0MzsJCQkgKi8KJiM0MzsJCQlhdmljX3JlbW92ZV92Y3B1X2Zyb21fZ2FwcGlfd2FrZXVwX2xpc3Qoc3ZtLCBzdm0tJmd0O2dhcHBpX2NwdSk7CiYjNDM7CiYjNDM7CQlzdm0tJmd0O2dhcHBpX2NwdSA9IGNwdTsgLyogU3RvcmUgY3B1IG51bWJlciBhcyB0YXJnZXQgZm9yIEdBUFBJICovCiYjNDM7CX0gZWxzZSBpZiAoYW1kX2lvbW11X2dhcHBpKSB7CiYjNDM7CQlhcGljaWQgPSBrdm1fY3B1X2dldF9hcGljaWQoc3ZtLSZndDtnYXBwaV9jcHUpOwomIzQzOwkJYXZpY19hZGRfdmNwdV90b19nYXBwaV93YWtldXBfbGlzdChzdm0sIHN2bS0mZ3Q7Z2FwcGlfY3B1KTsKJiM0MzsJfQogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShpcnFmZCwgJmFtcDtzdm0tJmd0O2lyX2xpc3QsIHZjcHVfbGlzdCkgewogCQl2b2lkICpkYXRhID0gaXJxZmQtJmd0O2lycV9ieXBhc3NfZGF0YTsKIAogCQlpZiAoIShhY3Rpb24gJmFtcDsgQVZJQ19UT0dHTEVfT05fT0ZGKSkKLQkJCVdBUk5fT05fT05DRShhbWRfaW9tbXVfdXBkYXRlX2dhKGRhdGEsIGNwdSwgZ2FfbG9nX2ludHIpKTsKLQkJZWxzZSBpZiAoY3B1ICZndDs9IDApCi0JCQlXQVJOX09OX09OQ0UoYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUoZGF0YSwgY3B1LCBnYV9sb2dfaW50cikpOwomIzQzOwkJCVdBUk5fT05fT05DRShhbWRfaW9tbXVfdXBkYXRlX2dhKGRhdGEsIGFwaWNpZCwgd2FrZXVwX2ludHIsIGlzX3J1bm5pbmcpKTsKJiM0MzsJCWVsc2UgaWYgKGlzX3J1bm5pbmcpCiYjNDM7CQkJV0FSTl9PTl9PTkNFKGFtZF9pb21tdV9hY3RpdmF0ZV9ndWVzdF9tb2RlKGRhdGEsIGFwaWNpZCwgd2FrZXVwX2ludHIsCiYjNDM7CQkJCQkJCQkgICBpc19ydW5uaW5nKSk7CiAJCWVsc2UKIAkJCVdBUk5fT05fT05DRShhbWRfaW9tbXVfZGVhY3RpdmF0ZV9ndWVzdF9tb2RlKGRhdGEpKTsKIAl9CkBAIC0xMDYzLDcgJiM0MzsxMTQ5LDcgQEAgc3RhdGljIHZvaWQgX19hdmljX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUsCiAJV0FSTl9PTl9PTkNFKGVudHJ5ICZhbXA7IEFWSUNfUEhZU0lDQUxfSURfRU5UUllfSVNfUlVOTklOR19NQVNLKTsKIAogCWVudHJ5ICZhbXA7PSB+KEFWSUNfUEhZU0lDQUxfSURfRU5UUllfSE9TVF9QSFlTSUNBTF9JRF9NQVNLIHwKLQkJICAgQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9HQV9MT0dfSU5UUik7CiYjNDM7CQkgICBBVklDX1BIWVNJQ0FMX0lEX0VOVFJZX1dBS0VVUF9JTlRSKTsKIAllbnRyeSB8PSAoaF9waHlzaWNhbF9pZCAmYW1wOyBBVklDX1BIWVNJQ0FMX0lEX0VOVFJZX0hPU1RfUEhZU0lDQUxfSURfTUFTSyk7CiAJZW50cnkgfD0gQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9JU19SVU5OSU5HX01BU0s7CiAKQEAgLTEwODAsNyAmIzQzOzExNjYsNyBAQCBzdGF0aWMgdm9pZCBfX2F2aWNfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSwKIAogCVdSSVRFX09OQ0Uoa3ZtX3N2bS0mZ3Q7YXZpY19waHlzaWNhbF9pZF90YWJsZVt2Y3B1LSZndDt2Y3B1X2lkXSwgZW50cnkpOwogCi0JYXZpY191cGRhdGVfaW9tbXVfdmNwdV9hZmZpbml0eSh2Y3B1LCBoX3BoeXNpY2FsX2lkLCBhY3Rpb24pOwomIzQzOwlhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5KHZjcHUsIGhfcGh5c2ljYWxfaWQsIGNwdSwgYWN0aW9uKTsKIAogCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7c3ZtLSZndDtpcl9saXN0X2xvY2ssIGZsYWdzKTsKIH0KQEAgLTExMjMsOSAmIzQzOzEyMDksOSBAQCBzdGF0aWMgdm9pZCBfX2F2aWNfdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBlbnVtIGF2aWNfdmNwdV9hY3Rpb24gYWN0aW9uKQogCSAqLwogCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3N2bS0mZ3Q7aXJfbGlzdF9sb2NrLCBmbGFncyk7CiAKLQlhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5KHZjcHUsIC0xLCBhY3Rpb24pOwomIzQzOwlhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5KHZjcHUsIC0xLCAtMSwgYWN0aW9uKTsKIAotCVdBUk5fT05fT05DRShlbnRyeSAmYW1wOyBBVklDX1BIWVNJQ0FMX0lEX0VOVFJZX0dBX0xPR19JTlRSKTsKJiM0MzsJV0FSTl9PTl9PTkNFKGVudHJ5ICZhbXA7IEFWSUNfUEhZU0lDQUxfSURfRU5UUllfV0FLRVVQX0lOVFIpOwogCiAJLyoKIAkgKiBLZWVwIHRoZSBwcmV2aW91cyBBUElDIElEIGluIHRoZSBlbnRyeSBzbyB0aGF0IGEgcm9ndWUgZG9vcmJlbGwgZnJvbQpAQCAtMTEzNywxMSAmIzQzOzEyMjMsMTEgQEAgc3RhdGljIHZvaWQgX19hdmljX3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZW51bSBhdmljX3ZjcHVfYWN0aW9uIGFjdGlvbikKIAkJV1JJVEVfT05DRShrdm1fc3ZtLSZndDthdmljX3BoeXNpY2FsX2lkX3RhYmxlW3ZjcHUtJmd0O3ZjcHVfaWRdLCBlbnRyeSk7CiAKIAkvKgotCSAqIE5vdGUhICBEb24mIzM5O3Qgc2V0IEFWSUNfUEhZU0lDQUxfSURfRU5UUllfR0FfTE9HX0lOVFIgaW4gdGhlIHRhYmxlIGFzCiYjNDM7CSAqIE5vdGUhICBEb24mIzM5O3Qgc2V0IEFWSUNfUEhZU0lDQUxfSURfRU5UUllfV0FLRVVQX0lOVFIgaW4gdGhlIHRhYmxlIGFzCiAJICogaXQmIzM5O3MgYSBzeW50aGV0aWMgZmxhZyB0aGF0IHVzdXJwcyBhbiB1bnVzZWQgc2hvdWxkLWJlLXplcm8gYml0LgogCSAqLwogCWlmIChhY3Rpb24gJmFtcDsgQVZJQ19TVEFSVF9CTE9DS0lORykKLQkJZW50cnkgfD0gQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9HQV9MT0dfSU5UUjsKJiM0MzsJCWVudHJ5IHw9IEFWSUNfUEhZU0lDQUxfSURfRU5UUllfV0FLRVVQX0lOVFI7CiAKIAlzdm0tJmd0O2F2aWNfcGh5c2ljYWxfaWRfZW50cnkgPSBlbnRyeTsKIApAQCAtMTE3MSw5ICYjNDM7MTI1Nyw5IEBAIHZvaWQgYXZpY192Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAKIAkJLyoKIAkJICogVGhlIHZDUFUgd2FzIHByZWVtcHRlZCB3aGlsZSBibG9ja2luZywgZW5zdXJlIGl0cyBJUlRFcyBhcmUKLQkJICogY29uZmlndXJlZCB0byBnZW5lcmF0ZSBHQSBMb2cgSW50ZXJydXB0cy4KJiM0MzsJCSAqIGNvbmZpZ3VyZWQgdG8gcmVxdWVzdCBob3N0IHdha2V1cCBub3RpZmljYXRpb24uCiAJCSAqLwotCQlpZiAoIShXQVJOX09OX09OQ0UoIShlbnRyeSAmYW1wOyBBVklDX1BIWVNJQ0FMX0lEX0VOVFJZX0dBX0xPR19JTlRSKSkpKQomIzQzOwkJaWYgKCEoV0FSTl9PTl9PTkNFKCEoZW50cnkgJmFtcDsgQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9XQUtFVVBfSU5UUikpKSkKIAkJCXJldHVybjsKIAl9CiAKQEAgLTEyOTYsNiAmIzQzOzEzODIsMjEgQEAgc3RhdGljIGJvb2wgX19pbml0IGF2aWNfd2FudF9hdmljX2VuYWJsZWQodm9pZCkKIAlyZXR1cm4gdHJ1ZTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIGF2aWNfZ2FwcGlfd2FrZXVwX2hhbmRsZXIodm9pZCkKJiM0Mzt7CiYjNDM7CWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiYjNDM7CXN0cnVjdCBsaXN0X2hlYWQgKnZjcHVfd2FrZXVwX2xpc3QgPSAmYW1wO3Blcl9jcHUoZ2FwcGlfdmNwdV93YWtldXBfbGlzdCwgY3B1KTsKJiM0MzsJcmF3X3NwaW5sb2NrX3QgKnNwaW5sb2NrID0gJmFtcDtwZXJfY3B1KGdhcHBpX3ZjcHVfd2FrZXVwX2xpc3RfbG9jaywgY3B1KTsKJiM0MzsJc3RydWN0IHZjcHVfc3ZtICpzdm07CiYjNDM7CiYjNDM7CXJhd19zcGluX2xvY2soc3BpbmxvY2spOwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHN2bSwgdmNwdV93YWtldXBfbGlzdCwgZ2FwcGlfdmNwdV93YWtldXBfbGlzdCkgewomIzQzOwkJaWYgKGt2bV9sYXBpY19maW5kX2hpZ2hlc3RfaXJyKCZhbXA7c3ZtLSZndDt2Y3B1KSAmZ3Q7PSAwKQomIzQzOwkJCWt2bV92Y3B1X3dha2VfdXAoJmFtcDtzdm0tJmd0O3ZjcHUpOwomIzQzOwl9CiYjNDM7CXJhd19zcGluX3VubG9jayhzcGlubG9jayk7CiYjNDM7fQomIzQzOwogLyoKICAqIE5vdGU6CiAgKiAtIFRoZSBtb2R1bGUgcGFyYW0gYXZpYyBlbmFibGUgYm90aCB4QVBJQyBhbmQgeDJBUElDIG1vZGUuCkBAIC0xMzA0LDEyICYjNDM7MTQwNSwxOCBAQCBzdGF0aWMgYm9vbCBfX2luaXQgYXZpY193YW50X2F2aWNfZW5hYmxlZCh2b2lkKQogICovCiBib29sIF9faW5pdCBhdmljX2hhcmR3YXJlX3NldHVwKHZvaWQpCiB7CiYjNDM7CWludCBjcHU7CiAJYXZpYyA9IGF2aWNfd2FudF9hdmljX2VuYWJsZWQoKTsKIAlpZiAoIWF2aWMpCiAJCXJldHVybiBmYWxzZTsKIAogCXByX2luZm8oJiMzNDtBVklDIGVuYWJsZWRcbiYjMzQ7KTsKIAomIzQzOwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CiYjNDM7CQlJTklUX0xJU1RfSEVBRCgmYW1wO3Blcl9jcHUoZ2FwcGlfdmNwdV93YWtldXBfbGlzdCwgY3B1KSk7CiYjNDM7CQlyYXdfc3Bpbl9sb2NrX2luaXQoJmFtcDtwZXJfY3B1KGdhcHBpX3ZjcHVfd2FrZXVwX2xpc3RfbG9jaywgY3B1KSk7CiYjNDM7CX0KJiM0MzsKIAkvKiBBVklDIGlzIGEgcHJlcmVxdWlzaXRlIGZvciB4MkFWSUMuICovCiAJeDJhdmljX2VuYWJsZWQgPSBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfWDJBVklDKTsKIAlpZiAoeDJhdmljX2VuYWJsZWQpIHsKQEAgLTEzMzMsMTIgJiM0MzsxNDQwLDE2IEBAIGJvb2wgX19pbml0IGF2aWNfaGFyZHdhcmVfc2V0dXAodm9pZCkKIAkJZW5hYmxlX2lwaXYgPSBmYWxzZTsKIAogCWFtZF9pb21tdV9yZWdpc3Rlcl9nYV9sb2dfbm90aWZpZXIoJmFtcDthdmljX2dhX2xvZ19ub3RpZmllcik7CiYjNDM7CWt2bV9zZXRfcG9zdGVkX2ludHJfd2FrZXVwX2hhbmRsZXIoJmFtcDthdmljX2dhcHBpX3dha2V1cF9oYW5kbGVyKTsKIAogCXJldHVybiB0cnVlOwogfQogCiB2b2lkIGF2aWNfaGFyZHdhcmVfdW5zZXR1cCh2b2lkKQogewotCWlmIChhdmljKQotCQlhbWRfaW9tbXVfcmVnaXN0ZXJfZ2FfbG9nX25vdGlmaWVyKE5VTEwpOwomIzQzOwlpZiAoIWF2aWMpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWFtZF9pb21tdV9yZWdpc3Rlcl9nYV9sb2dfbm90aWZpZXIoTlVMTCk7CiYjNDM7CWt2bV9zZXRfcG9zdGVkX2ludHJfd2FrZXVwX2hhbmRsZXIoTlVMTCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uYwppbmRleCBlMDJhMzhkYTUyOTZlMy4uYjY4NzEzM2Y4NTI4YmEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uYwpAQCAtMTM1Niw2ICYjNDM7MTM1Niw4IEBAIHN0YXRpYyB2b2lkIHN2bV92Y3B1X2ZyZWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCiAJV0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KCZhbXA7c3ZtLSZndDtpcl9saXN0KSk7CiAKJiM0MzsJYXZpY19kZXN0cm95X3ZjcHUoc3ZtKTsKJiM0MzsKIAlzdm1fbGVhdmVfbmVzdGVkKHZjcHUpOwogCXN2bV9mcmVlX25lc3RlZChzdm0pOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uaAppbmRleCA1MTM3NDE2YmU1OTNkNy4uNDdkNWJiNWQ3MTAzZGEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uaApAQCAtMzYyLDYgJiM0MzszNjIsMTAgQEAgc3RydWN0IHZjcHVfc3ZtIHsKIAogCS8qIEd1ZXN0IEdJRiB2YWx1ZSwgdXNlZCB3aGVuIHZHSUYgaXMgbm90IGVuYWJsZWQgKi8KIAlib29sIGd1ZXN0X2dpZjsKJiM0MzsKJiM0MzsJLyogR0FQUEkgcmVsYXRlZCBmaWVsZHMgKi8KJiM0MzsJc3RydWN0IGxpc3RfaGVhZCBnYXBwaV92Y3B1X3dha2V1cF9saXN0OwomIzQzOwlpbnQgZ2FwcGlfY3B1OwogfTsKIAogc3RydWN0IHN2bV9jcHVfZGF0YSB7CkBAIC05MDksNiAmIzQzOzkxMyw3IEBAIHZvaWQgYXZpY19pbml0X3ZtY2Ioc3RydWN0IHZjcHVfc3ZtICpzdm0sIHN0cnVjdCB2bWNiICp2bWNiKTsKIGludCBhdmljX2luY29tcGxldGVfaXBpX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogaW50IGF2aWNfdW5hY2NlbGVyYXRlZF9hY2Nlc3NfaW50ZXJjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiBpbnQgYXZpY19pbml0X3ZjcHUoc3RydWN0IHZjcHVfc3ZtICpzdm0pOwomIzQzO3ZvaWQgYXZpY19kZXN0cm95X3ZjcHUoc3RydWN0IHZjcHVfc3ZtICpzdm0pOwogdm9pZCBhdmljX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpOwogdm9pZCBhdmljX3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiB2b2lkIGF2aWNfYXBpY3ZfcG9zdF9zdGF0ZV9yZXN0b3JlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lvbW11L2FtZC9hbWRfaW9tbXUuaCBiL2RyaXZlcnMvaW9tbXUvYW1kL2FtZF9pb21tdS5oCmluZGV4IDgzNGQ4ZmFiZmJhMzg3Li4wNDQxNzljYWIxMmU0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pb21tdS9hbWQvYW1kX2lvbW11LmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9pb21tdS9hbWQvYW1kX2lvbW11LmgKQEAgLTQxLDYgJiM0Mzs0MSw3IEBAIGludCBhbWRfaW9tbXVfZW5hYmxlKHZvaWQpOwogdm9pZCBhbWRfaW9tbXVfZGlzYWJsZSh2b2lkKTsKIGludCBhbWRfaW9tbXVfcmVlbmFibGUoaW50IG1vZGUpOwogaW50IGFtZF9pb21tdV9lbmFibGVfZmF1bHRpbmcodW5zaWduZWQgaW50IGNwdSk7CiYjNDM7ZXh0ZXJuIGJvb2wgYW1kX2lvbW11X2dhcHBpOwogZXh0ZXJuIGludCBhbWRfaW9tbXVfZ3Vlc3RfaXI7CiBleHRlcm4gZW51bSBwcm90ZWN0aW9uX2RvbWFpbl9tb2RlIGFtZF9pb21tdV9wZ3RhYmxlOwogZXh0ZXJuIGludCBhbWRfaW9tbXVfZ3B0X2xldmVsOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pb21tdS9hbWQvYW1kX2lvbW11X3R5cGVzLmggYi9kcml2ZXJzL2lvbW11L2FtZC9hbWRfaW9tbXVfdHlwZXMuaAppbmRleCBmOWY3MTgwODc4OTMwMy4uZGUwYjIzMzA2OTQ0YjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW9tbXUvYW1kL2FtZF9pb21tdV90eXBlcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvaW9tbXUvYW1kL2FtZF9pb21tdV90eXBlcy5oCkBAIC05NCw2ICYjNDM7OTQsNyBAQAogI2RlZmluZSBGRUFUVVJFX1gyQVBJQwkJQklUX1VMTCgyKQogI2RlZmluZSBGRUFUVVJFX05YCQlCSVRfVUxMKDMpCiAjZGVmaW5lIEZFQVRVUkVfR1QJCUJJVF9VTEwoNCkKJiM0MzsjZGVmaW5lIEZFQVRVUkVfR0FQUEkJCUJJVF9VTEwoNSkKICNkZWZpbmUgRkVBVFVSRV9JQQkJQklUX1VMTCg2KQogI2RlZmluZSBGRUFUVVJFX0dBCQlCSVRfVUxMKDcpCiAjZGVmaW5lIEZFQVRVUkVfSEUJCUJJVF9VTEwoOCkKQEAgLTExMyw2ICYjNDM7MTE0LDcgQEAKIC8qIEV4dGVuZGVkIEZlYXR1cmUgMiBCaXRzICovCiAjZGVmaW5lIEZFQVRVUkVfU0VWU05QSU9fU1VQCUJJVF9VTEwoMSkKICNkZWZpbmUgRkVBVFVSRV9HQ1IzVFJQTU9ERQlCSVRfVUxMKDMpCiYjNDM7I2RlZmluZSBGRUFUVVJFX0dBUFBJRElTU1VQCUJJVF9VTEwoNCkKICNkZWZpbmUgRkVBVFVSRV9TTlBBVklDU1VQCUdFTk1BU0tfVUxMKDcsIDUpCiAjZGVmaW5lIEZFQVRVUkVfU05QQVZJQ1NVUF9HQU0oeCkgXAogCShGSUVMRF9HRVQoRkVBVFVSRV9TTlBBVklDU1VQLCB4KSA9PSAweDEpCkBAIC0xOTAsNiAmIzQzOzE5Miw3IEBACiAjZGVmaW5lIENPTlRST0xfRVBIX0VOCQk0NQogI2RlZmluZSBDT05UUk9MX1hUX0VOCQk1MAogI2RlZmluZSBDT05UUk9MX0lOVENBUFhUX0VOCTUxCiYjNDM7I2RlZmluZSBDT05UUk9MX0dBUFBJX0VOCTU1CiAjZGVmaW5lIENPTlRST0xfR0NSM1RSUE1PREUJNTgKICNkZWZpbmUgQ09OVFJPTF9JUlRDQUNIRURJUwk1OQogI2RlZmluZSBDT05UUk9MX1NOUEFWSUNfRU4JNjEKQEAgLTEwMDQsNyAmIzQzOzEwMDcsOCBAQCB1bmlvbiBpcnRlX2dhX2xvIHsKIAkJICAgIG5vX2ZhdWx0CTogMSwKIAkJICAgIC8qIC0tLS0tLSAqLwogCQkgICAgZ2FfbG9nX2ludHIJOiAxLAotCQkgICAgcnN2ZDEJOiAzLAomIzQzOwkJICAgIHJzdmQxCTogMiwKJiM0MzsJCSAgICBnYXBwaV9kaXMJOiAxLAogCQkgICAgaXNfcnVuCTogMSwKIAkJICAgIC8qIC0tLS0tLSAqLwogCQkgICAgZ3Vlc3RfbW9kZQk6IDEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMgYi9kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMKaW5kZXggM2JkYjM4MGQyM2U5YTkuLjdkMmIxYzI0ZjZlY2NiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jCkBAIC0xNjAsNiAmIzQzOzE2MCw5IEBAIHU4IGFtZF9pb21tdV9ocHRfbGV2ZWw7CiAvKiBHdWVzdCBwYWdlIHRhYmxlIGxldmVsICovCiBpbnQgYW1kX2lvbW11X2dwdF9sZXZlbCA9IFBBR0VfTU9ERV80X0xFVkVMOwogCiYjNDM7Ym9vbCBhbWRfaW9tbXVfZ2FwcGk7CiYjNDM7RVhQT1JUX1NZTUJPTChhbWRfaW9tbXVfZ2FwcGkpOwomIzQzOwogaW50IGFtZF9pb21tdV9ndWVzdF9pciA9IEFNRF9JT01NVV9HVUVTVF9JUl9WQVBJQzsKIHN0YXRpYyBpbnQgYW1kX2lvbW11X3h0X21vZGUgPSBJUlFfUkVNQVBfWEFQSUNfTU9ERTsKIApAQCAtNDYyLDYgJiM0Mzs0NjUsOSBAQCBzdGF0aWMgdm9pZCBpb21tdV9kaXNhYmxlKHN0cnVjdCBhbWRfaW9tbXUgKmlvbW11KQogCWlvbW11X2ZlYXR1cmVfZGlzYWJsZShpb21tdSwgQ09OVFJPTF9HQUxPR19FTik7CiAJaW9tbXVfZmVhdHVyZV9kaXNhYmxlKGlvbW11LCBDT05UUk9MX0dBSU5UX0VOKTsKIAomIzQzOwkvKiBEaXNhYmxlIElPTU1VIEdBUFBJICovCiYjNDM7CWlvbW11X2ZlYXR1cmVfZGlzYWJsZShpb21tdSwgQ09OVFJPTF9HQVBQSV9FTik7CiYjNDM7CiAJLyogRGlzYWJsZSBJT01NVSBQUFIgbG9nZ2luZyAqLwogCWlvbW11X2ZlYXR1cmVfZGlzYWJsZShpb21tdSwgQ09OVFJPTF9QUFJMT0dfRU4pOwogCWlvbW11X2ZlYXR1cmVfZGlzYWJsZShpb21tdSwgQ09OVFJPTF9QUFJJTlRfRU4pOwpAQCAtMjk5Niw2ICYjNDM7MzAwMiwxMyBAQCBzdGF0aWMgdm9pZCBlbmFibGVfaW9tbXVzX3ZhcGljKHZvaWQpCiAJc3RydWN0IGFtZF9pb21tdSAqaW9tbXU7CiAKIAlmb3JfZWFjaF9pb21tdShpb21tdSkgewomIzQzOwkJLyoKJiM0MzsJCSAqIERpc2FibGUgR0FQUEksIGRvIG5vdCBjaGVjayBhbWRfaW9tbXVfZ2FwcGkgYXMgaXQgbWF5IGJlCiYjNDM7CQkgKiBmYWxzZSBpbiBuZXcga2V4ZWMga2VybmVsIGV2ZW4gdGhvdWdoIHByZXZpb3VzIGtlcm5lbCBoYXMKJiM0MzsJCSAqIGVuYWJsZWQgaXQuCiYjNDM7CQkgKi8KJiM0MzsJCWlvbW11X2ZlYXR1cmVfZGlzYWJsZShpb21tdSwgQ09OVFJPTF9HQVBQSV9FTik7CiYjNDM7CiAJCS8qCiAJCSAqIERpc2FibGUgR0FMb2cgaWYgYWxyZWFkeSBydW5uaW5nLiBJdCBjb3VsZCBoYXZlIGJlZW4gZW5hYmxlZAogCQkgKiBpbiB0aGUgcHJldmlvdXMgYm9vdCBiZWZvcmUga2R1bXAuCkBAIC0zMDM1LDEwICYjNDM7MzA0OCwxOSBAQCBzdGF0aWMgdm9pZCBlbmFibGVfaW9tbXVzX3ZhcGljKHZvaWQpCiAJCXJldHVybjsKIAl9CiAKJiM0MzsJaWYgKGFtZF9pb21tdV9nYXBwaSAmYW1wOyZhbXA7CiYjNDM7CSAgICAhKGNoZWNrX2ZlYXR1cmUoRkVBVFVSRV9HQVBQSSkgJmFtcDsmYW1wOwomIzQzOwkgICAgICBBTURfSU9NTVVfR1VFU1RfSVJfVkFQSUMoYW1kX2lvbW11X2d1ZXN0X2lyKSkpIHsKJiM0MzsJCXByX3dhcm4oJiMzNDtHQVBQSSBpcyBub3Qgc3VwcG9ydGVkLlxuJiMzNDspOwomIzQzOwkJYW1kX2lvbW11X2dhcHBpID0gZmFsc2U7CiYjNDM7CX0KJiM0MzsKIAkvKiBFbmFibGluZyBHQU0gYW5kIFNOUEFWSUMgc3VwcG9ydCAqLwogCWZvcl9lYWNoX2lvbW11KGlvbW11KSB7Ci0JCWlmIChpb21tdV9pbml0X2dhX2xvZyhpb21tdSkgfHwKLQkJICAgIGlvbW11X2dhX2xvZ19lbmFibGUoaW9tbXUpKQomIzQzOwkJaWYgKGFtZF9pb21tdV9nYXBwaSkKJiM0MzsJCQlpb21tdV9mZWF0dXJlX2VuYWJsZShpb21tdSwgQ09OVFJPTF9HQVBQSV9FTik7CiYjNDM7CQllbHNlIGlmIChpb21tdV9pbml0X2dhX2xvZyhpb21tdSkgfHwKJiM0MzsJCQkgaW9tbXVfZ2FfbG9nX2VuYWJsZShpb21tdSkpCiAJCQlyZXR1cm47CiAKIAkJaW9tbXVfZmVhdHVyZV9lbmFibGUoaW9tbXUsIENPTlRST0xfR0FNX0VOKTsKQEAgLTMwNDcsNyAmIzQzOzMwNjksOCBAQCBzdGF0aWMgdm9pZCBlbmFibGVfaW9tbXVzX3ZhcGljKHZvaWQpCiAJfQogCiAJYW1kX2lvbW11X2lycV9vcHMuY2FwYWJpbGl0eSB8PSAoMSAmbHQ7Jmx0OyBJUlFfUE9TVElOR19DQVApOwotCXByX2luZm8oJiMzNDtWaXJ0dWFsIEFQSUMgZW5hYmxlZFxuJiMzNDspOwomIzQzOwlwcl9pbmZvKCYjMzQ7VmlydHVhbCBBUElDIGVuYWJsZWQgd2l0aCAlc1xuJiMzNDssCiYjNDM7CQlhbWRfaW9tbXVfZ2FwcGkgPyAmIzM0O0dBUFBJJiMzNDsgOiAmIzM0O0dBTE9HJiMzNDspOwogI2VuZGlmCiB9CiAKQEAgLTM3MzgsNiAmIzQzOzM3NjEsOCBAQCBzdGF0aWMgaW50IF9faW5pdCBwYXJzZV9hbWRfaW9tbXVfb3B0aW9ucyhjaGFyICpzdHIpCiAJCX0gZWxzZSBpZiAoc3RybmNtcChzdHIsICYjMzQ7djJfcGdzaXplc19vbmx5JiMzNDssIDE1KSA9PSAwKSB7CiAJCQlwcl9pbmZvKCYjMzQ7UmVzdHJpY3RpbmcgVjEgcGFnZS1zaXplcyB0byA0S2lCLzJNaUIvMUdpQiYjMzQ7KTsKIAkJCWFtZF9pb21tdV9wZ3NpemVfYml0bWFwID0gQU1EX0lPTU1VX1BHU0laRVNfVjI7CiYjNDM7CQl9IGVsc2UgaWYgKHN0cm5jbXAoc3RyLCAmIzM0O2dhcHBpJiMzNDssIDUpID09IDApIHsKJiM0MzsJCQlhbWRfaW9tbXVfZ2FwcGkgPSB0cnVlOwogCQl9IGVsc2UgewogCQkJcHJfbm90aWNlKCYjMzQ7VW5rbm93biBvcHRpb24gLSAmIzM5OyVzJiMzOTtcbiYjMzQ7LCBzdHIpOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jIGIvZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuYwppbmRleCA1N2RjOGZhYmM3ZDliOS4uN2VlYmY0NzQ1YTY3ODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuYwpAQCAtMzk1OSwxOSAmIzQzOzM5NTksMjkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBpcnFfZG9tYWluX29wcyBhbWRfaXJfZG9tYWluX29wcyA9IHsKIAkuZGVhY3RpdmF0ZSA9IGlycV9yZW1hcHBpbmdfZGVhY3RpdmF0ZSwKIH07CiAKLXN0YXRpYyB2b2lkIF9fYW1kX2lvbW11X3VwZGF0ZV9nYShzdHJ1Y3QgaXJ0ZV9nYSAqZW50cnksIGludCBjcHUsCi0JCQkJICBib29sIGdhX2xvZ19pbnRyKQomIzQzO3N0YXRpYyB2b2lkIF9fYW1kX2lvbW11X3VwZGF0ZV9nYShzdHJ1Y3QgaXJ0ZV9nYSAqZW50cnksIGludCBhcGljaWQsCiYjNDM7CQkJCSAgYm9vbCB3YWtldXBfaW50ciwgYm9vbCBpc19ydW5uaW5nKQogewotCWlmIChjcHUgJmd0Oz0gMCkgewomIzQzOwlpZiAoaXNfcnVubmluZykgewogCQllbnRyeS0mZ3Q7bG8uZmllbGRzX3ZhcGljLmRlc3RpbmF0aW9uID0KLQkJCQkJQVBJQ0lEX1RPX0lSVEVfREVTVF9MTyhjcHUpOwomIzQzOwkJCQkJQVBJQ0lEX1RPX0lSVEVfREVTVF9MTyhhcGljaWQpOwogCQllbnRyeS0mZ3Q7aGkuZmllbGRzLmRlc3RpbmF0aW9uID0KLQkJCQkJQVBJQ0lEX1RPX0lSVEVfREVTVF9ISShjcHUpOwomIzQzOwkJCQkJQVBJQ0lEX1RPX0lSVEVfREVTVF9ISShhcGljaWQpOwogCQllbnRyeS0mZ3Q7bG8uZmllbGRzX3ZhcGljLmlzX3J1biA9IHRydWU7CiAJCWVudHJ5LSZndDtsby5maWVsZHNfdmFwaWMuZ2FfbG9nX2ludHIgPSBmYWxzZTsKIAl9IGVsc2UgewotCQllbnRyeS0mZ3Q7bG8uZmllbGRzX3ZhcGljLmlzX3J1biA9IGZhbHNlOwotCQllbnRyeS0mZ3Q7bG8uZmllbGRzX3ZhcGljLmdhX2xvZ19pbnRyID0gZ2FfbG9nX2ludHI7CiYjNDM7CQlpZiAoYW1kX2lvbW11X2dhcHBpKSB7CiYjNDM7CQkJZW50cnktJmd0O2xvLmZpZWxkc192YXBpYy5nYXBwaV9kaXMgPSAhd2FrZXVwX2ludHIgJmFtcDsmYW1wOwomIzQzOwkJCQkJCWNoZWNrX2ZlYXR1cmUyKEZFQVRVUkVfR0FQUElESVNTVVApOwomIzQzOwkJCWVudHJ5LSZndDtsby5maWVsZHNfdmFwaWMuaXNfcnVuID0gZmFsc2U7CiYjNDM7CQkJZW50cnktJmd0O2xvLmZpZWxkc192YXBpYy5kZXN0aW5hdGlvbiA9CiYjNDM7CQkJCQkJQVBJQ0lEX1RPX0lSVEVfREVTVF9MTyhhcGljaWQpOwomIzQzOwkJCWVudHJ5LSZndDtoaS5maWVsZHMuZGVzdGluYXRpb24gPQomIzQzOwkJCQkJCUFQSUNJRF9UT19JUlRFX0RFU1RfSEkoYXBpY2lkKTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJZW50cnktJmd0O2xvLmZpZWxkc192YXBpYy5pc19ydW4gPSBmYWxzZTsKJiM0MzsJCQllbnRyeS0mZ3Q7bG8uZmllbGRzX3ZhcGljLmdhX2xvZ19pbnRyID0gd2FrZXVwX2ludHI7CiYjNDM7CQl9CiAJfQogfQogCkBAIC0zOTc5LDIwICYjNDM7Mzk4OSwyMCBAQCBzdGF0aWMgdm9pZCBfX2FtZF9pb21tdV91cGRhdGVfZ2Eoc3RydWN0IGlydGVfZ2EgKmVudHJ5LCBpbnQgY3B1LAogICogVXBkYXRlIHRoZSBwQ1BVIGluZm9ybWF0aW9uIGZvciBhbiBJUlRFIHRoYXQgaXMgY29uZmlndXJlZCB0byBwb3N0IElSUXMgdG8KICAqIGEgdkNQVSwgd2l0aG91dCBpc3N1aW5nIGFuIElPTU1VIGludmFsaWRhdGlvbiBmb3IgdGhlIElSVEUuCiAgKgotICogSWYgdGhlIHZDUFUgaXMgYXNzb2NpYXRlZCB3aXRoIGEgcENQVSAoQGNwdSAmZ3Q7PSAwKSwgY29uZmlndXJlIHRoZSBEZXN0aW5hdGlvbgotICogd2l0aCB0aGUgcENQVSYjMzk7cyBBUElDIElELCBzZXQgSXNSdW4sIGFuZCBjbGVhciBHQUxvZ0ludHIuICBJZiB0aGUgdkNQVSBpc24mIzM5O3QKLSAqIGFzc29jaWF0ZWQgd2l0aCBhIHBDUFUgKEBjcHUgJmx0OyAwKSwgY2xlYXIgSXNSdW4gYW5kIHNldC9jbGVhciBHQUxvZ0ludHIgYmFzZWQKLSAqIG9uIGlucHV0IGZyb20gdGhlIGNhbGxlciAoZS5nLiBLVk0gb25seSByZXF1ZXN0cyBHQUxvZ0ludHIgd2hlbiB0aGUgdkNQVSBpcwotICogYmxvY2tpbmcgYW5kIHJlcXVpcmVzIGEgbm90aWZpY2F0aW9uIHdha2UgZXZlbnQpLiAgSS5lLiB0cmVhdCB2Q1BVcyB0aGF0IGFyZQotICogYXNzb2NpYXRlZCB3aXRoIGEgcENQVSBhcyBydW5uaW5nLiAgVGhpcyBBUEkgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCB3aGVuIGEKLSAqIHZDUFUgaXMgc2NoZWR1bGVkIGluL291dCAob3Igc3RvcHMgcnVubmluZyBmb3IgYW55IHJlYXNvbiksIHRvIGRvIGEgZmFzdAotICogdXBkYXRlIG9mIElzUnVuLCBHQUxvZ0ludHIsIGFuZCAoY29uZGl0aW9uYWxseSkgRGVzdGluYXRpb24uCiYjNDM7ICogSWYgdGhlIHZDUFUgaXMgc2NoZWR1bGVkIHRvIHJ1biBvbiBwQ1BVIChAaXNfcnVubmluZyA9IDEpLCBjb25maWd1cmUgdGhlCiYjNDM7ICogRGVzdGluYXRpb24gd2l0aCB0aGUgcENQVSYjMzk7cyBBUElDIElELCBzZXQgSXNSdW4sIGFuZCBjbGVhciBHQUxvZ0ludHIuIElmIHRoZQomIzQzOyAqIHZDUFUgaXMgc2NoZWR1bGVkIG91dCAoQGlzX3J1bm5pbmcgPSAwKSwgY2xlYXIgSXNSdW4gYW5kIHNldC9jbGVhciBHQUxvZ0ludHIKJiM0MzsgKiBhbmQgR0FQUElEaXMgYmFzZWQgb24gaW5wdXQgZnJvbSB0aGUgY2FsbGVyIChlLmcuIEtWTSBvbmx5IHJlcXVlc3RzCiYjNDM7ICogd2FrZXVwX2ludHIgd2hlbiB0aGUgdkNQVSBpcyBibG9ja2luZyBhbmQgcmVxdWlyZXMgYSBub3RpZmljYXRpb24gd2FrZQomIzQzOyAqIGV2ZW50KS4gVGhpcyBBUEkgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCB3aGVuIGEgdkNQVSBpcyBzY2hlZHVsZWQgaW4vb3V0IChvcgomIzQzOyAqIHN0b3BzIHJ1bm5pbmcgZm9yIGFueSByZWFzb24pLCB0byBkbyBhIGZhc3QgdXBkYXRlIG9mIElzUnVuLCBHQUxvZ0ludHIsCiYjNDM7ICogR0FQUElEaXMgYW5kIChjb25kaXRpb25hbGx5KSBEZXN0aW5hdGlvbi4KICAqCi0gKiBQZXIgdGhlIElPTU1VIHNwZWMsIHRoZSBEZXN0aW5hdGlvbiwgSXNSdW4sIGFuZCBHQVRhZyBmaWVsZHMgYXJlIG5vdCBjYWNoZWQKLSAqIGFuZCB0aHVzIGRvbiYjMzk7dCByZXF1aXJlIGFuIGludmFsaWRhdGlvbiB0byBlbnN1cmUgdGhlIElPTU1VIGNvbnN1bWVzIGZyZXNoCi0gKiBpbmZvcm1hdGlvbi4KJiM0MzsgKiBQZXIgdGhlIElPTU1VIHNwZWMsIHRoZSBEZXN0aW5hdGlvbiwgSXNSdW4sIEdBVGFnIGFuZCBHQVBQSURpcyBmaWVsZHMgYXJlCiYjNDM7ICogbm90IGNhY2hlZCBhbmQgdGh1cyBkb24mIzM5O3QgcmVxdWlyZSBhbiBpbnZhbGlkYXRpb24gdG8gZW5zdXJlIHRoZSBJT01NVQomIzQzOyAqIGNvbnN1bWVzIGZyZXNoIGluZm9ybWF0aW9uLgogICovCi1pbnQgYW1kX2lvbW11X3VwZGF0ZV9nYSh2b2lkICpkYXRhLCBpbnQgY3B1LCBib29sIGdhX2xvZ19pbnRyKQomIzQzO2ludCBhbWRfaW9tbXVfdXBkYXRlX2dhKHZvaWQgKmRhdGEsIGludCBhcGljaWQsIGJvb2wgd2FrZXVwX2ludHIsIGJvb2wgaXNfcnVubmluZykKIHsKIAlzdHJ1Y3QgYW1kX2lyX2RhdGEgKmlyX2RhdGEgPSAoc3RydWN0IGFtZF9pcl9kYXRhICopZGF0YTsKIAlzdHJ1Y3QgaXJ0ZV9nYSAqZW50cnkgPSAoc3RydWN0IGlydGVfZ2EgKikgaXJfZGF0YS0mZ3Q7ZW50cnk7CkBAIC00MDA2LDE0ICYjNDM7NDAxNiwxNCBAQCBpbnQgYW1kX2lvbW11X3VwZGF0ZV9nYSh2b2lkICpkYXRhLCBpbnQgY3B1LCBib29sIGdhX2xvZ19pbnRyKQogCWlmICghaXJfZGF0YS0mZ3Q7aW9tbXUpCiAJCXJldHVybiAtRU5PREVWOwogCi0JX19hbWRfaW9tbXVfdXBkYXRlX2dhKGVudHJ5LCBjcHUsIGdhX2xvZ19pbnRyKTsKJiM0MzsJX19hbWRfaW9tbXVfdXBkYXRlX2dhKGVudHJ5LCBhcGljaWQsIHdha2V1cF9pbnRyLCBpc19ydW5uaW5nKTsKIAogCXJldHVybiBfX21vZGlmeV9pcnRlX2dhKGlyX2RhdGEtJmd0O2lvbW11LCBpcl9kYXRhLSZndDtpcnFfMl9pcnRlLmRldmlkLAogCQkJCWlyX2RhdGEtJmd0O2lycV8yX2lydGUuaW5kZXgsIGVudHJ5KTsKIH0KIEVYUE9SVF9TWU1CT0woYW1kX2lvbW11X3VwZGF0ZV9nYSk7CiAKLWludCBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZSh2b2lkICpkYXRhLCBpbnQgY3B1LCBib29sIGdhX2xvZ19pbnRyKQomIzQzO2ludCBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZSh2b2lkICpkYXRhLCBpbnQgYXBpY2lkLCBib29sIHdha2V1cF9pbnRyLCBib29sIGlzX3J1bm5pbmcpCiB7CiAJc3RydWN0IGFtZF9pcl9kYXRhICppcl9kYXRhID0gKHN0cnVjdCBhbWRfaXJfZGF0YSAqKWRhdGE7CiAJc3RydWN0IGlydGVfZ2EgKmVudHJ5ID0gKHN0cnVjdCBpcnRlX2dhICopIGlyX2RhdGEtJmd0O2VudHJ5OwpAQCAtNDAzNiw3ICYjNDM7NDA0Niw3IEBAIGludCBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZSh2b2lkICpkYXRhLCBpbnQgY3B1LCBib29sIGdhX2xvZ19pbnRyKQogCWVudHJ5LSZndDtoaS5maWVsZHMudmVjdG9yICAgICAgICAgICAgPSBpcl9kYXRhLSZndDtnYV92ZWN0b3I7CiAJZW50cnktJmd0O2xvLmZpZWxkc192YXBpYy5nYV90YWcgICAgICA9IGlyX2RhdGEtJmd0O2dhX3RhZzsKIAotCV9fYW1kX2lvbW11X3VwZGF0ZV9nYShlbnRyeSwgY3B1LCBnYV9sb2dfaW50cik7CiYjNDM7CV9fYW1kX2lvbW11X3VwZGF0ZV9nYShlbnRyeSwgYXBpY2lkLCB3YWtldXBfaW50ciwgaXNfcnVubmluZyk7CiAKIAlyZXR1cm4gbW9kaWZ5X2lydGVfZ2EoaXJfZGF0YS0mZ3Q7aW9tbXUsIGlyX2RhdGEtJmd0O2lycV8yX2lydGUuZGV2aWQsCiAJCQkgICAgICBpcl9kYXRhLSZndDtpcnFfMl9pcnRlLmluZGV4LCBlbnRyeSk7CkBAIC00MTA3LDggJiM0Mzs0MTE3LDkgQEAgc3RhdGljIGludCBhbWRfaXJfc2V0X3ZjcHVfYWZmaW5pdHkoc3RydWN0IGlycV9kYXRhICpkYXRhLCB2b2lkICppbmZvKQogCQlpcl9kYXRhLSZndDtnYV92ZWN0b3IgPSBwaV9kYXRhLSZndDt2ZWN0b3I7CiAJCWlyX2RhdGEtJmd0O2dhX3RhZyA9IHBpX2RhdGEtJmd0O2dhX3RhZzsKIAkJaWYgKHBpX2RhdGEtJmd0O2lzX2d1ZXN0X21vZGUpCi0JCQlyZXQgPSBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZShpcl9kYXRhLCBwaV9kYXRhLSZndDtjcHUsCi0JCQkJCQkJICAgIHBpX2RhdGEtJmd0O2dhX2xvZ19pbnRyKTsKJiM0MzsJCQlyZXQgPSBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZShpcl9kYXRhLCBwaV9kYXRhLSZndDthcGljaWQsCiYjNDM7CQkJCQkJCSAgICBwaV9kYXRhLSZndDt3YWtldXBfaW50ciwKJiM0MzsJCQkJCQkJICAgIHBpX2RhdGEtJmd0O2lzX3J1bm5pbmcpOwogCQllbHNlCiAJCQlyZXQgPSBhbWRfaW9tbXVfZGVhY3RpdmF0ZV9ndWVzdF9tb2RlKGlyX2RhdGEpOwogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2FtZC1pb21tdS5oIGIvaW5jbHVkZS9saW51eC9hbWQtaW9tbXUuaAppbmRleCBlZGNlZTlmNTMzNWE2Zi4uNzI5ZDgyYzRlMDllMjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYW1kLWlvbW11LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9hbWQtaW9tbXUuaApAQCAtMzAsOCAmIzQzOzMwLDEwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBhbWRfaW9tbXVfZGV0ZWN0KHZvaWQpIHsgfQogLyogSU9NTVUgQVZJQyBGdW5jdGlvbiAqLwogZXh0ZXJuIGludCBhbWRfaW9tbXVfcmVnaXN0ZXJfZ2FfbG9nX25vdGlmaWVyKGludCAoKm5vdGlmaWVyKSh1MzIpKTsKIAotZXh0ZXJuIGludCBhbWRfaW9tbXVfdXBkYXRlX2dhKHZvaWQgKmRhdGEsIGludCBjcHUsIGJvb2wgZ2FfbG9nX2ludHIpOwotZXh0ZXJuIGludCBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZSh2b2lkICpkYXRhLCBpbnQgY3B1LCBib29sIGdhX2xvZ19pbnRyKTsKJiM0MztleHRlcm4gaW50IGFtZF9pb21tdV91cGRhdGVfZ2Eodm9pZCAqZGF0YSwgaW50IGFwaWNpZCwgYm9vbCB3YWtldXBfaW50ciwKJiM0MzsJCQkgICAgICAgYm9vbCBpc19ydW5uaW5nKTsKJiM0MztleHRlcm4gaW50IGFtZF9pb21tdV9hY3RpdmF0ZV9ndWVzdF9tb2RlKHZvaWQgKmRhdGEsIGludCBhcGljaWQsIGJvb2wgd2FrZXVwX2ludHIsCiYjNDM7CQkJCQkgYm9vbCBpc19ydW5uaW5nKTsKIGV4dGVybiBpbnQgYW1kX2lvbW11X2RlYWN0aXZhdGVfZ3Vlc3RfbW9kZSh2b2lkICpkYXRhKTsKIAogI2Vsc2UgLyogZGVmaW5lZChDT05GSUdfQU1EX0lPTU1VKSAmYW1wOyZhbXA7IGRlZmluZWQoQ09ORklHX0lSUV9SRU1BUCkgKi8KQEAgLTQyLDEyICYjNDM7NDQsMTQgQEAgYW1kX2lvbW11X3JlZ2lzdGVyX2dhX2xvZ19ub3RpZmllcihpbnQgKCpub3RpZmllcikodTMyKSkKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgYW1kX2lvbW11X3VwZGF0ZV9nYSh2b2lkICpkYXRhLCBpbnQgY3B1LCBib29sIGdhX2xvZ19pbnRyKQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGFtZF9pb21tdV91cGRhdGVfZ2Eodm9pZCAqZGF0YSwgaW50IGFwaWNpZCwgYm9vbCB3YWtldXBfaW50ciwKJiM0MzsJCQkJICAgICAgYm9vbCBpc19ydW5uaW5nKQogewogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZSh2b2lkICpkYXRhLCBpbnQgY3B1LCBib29sIGdhX2xvZ19pbnRyKQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGFtZF9pb21tdV9hY3RpdmF0ZV9ndWVzdF9tb2RlKHZvaWQgKmRhdGEsIGludCBhcGljaWQsIGJvb2wgd2FrZXVwX2ludHIsCiYjNDM7CQkJCQkJYm9vbCBpc19ydW5uaW5nKQogewogCXJldHVybiAwOwogfQpAQCAtNzYsNCAmIzQzOzgwLDUgQEAgc3RhdGljIGlubGluZSBpbnQgYW1kX2lvbW11X3NucF9kaXNhYmxlKHZvaWQpIHsgcmV0dXJuIDA7IH0KIHN0YXRpYyBpbmxpbmUgYm9vbCBhbWRfaW9tbXVfc2V2X3Rpb19zdXBwb3J0ZWQodm9pZCkgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgogCiYjNDM7ZXh0ZXJuIGJvb2wgYW1kX2lvbW11X2dhcHBpOwogI2VuZGlmIC8qIF9BU01fWDg2X0FNRF9JT01NVV9IICovCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDEzOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDIyCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNzkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkdBUFBJIFN1cHBvcnQgZm9yIEFNRCBJT01NVSBhbmQgS1ZNIFNWTSBBVklDOiBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBpbnRyb2R1Y2luZyBHQVBQSSBzdXBwb3J0LCBHdWVzdCBBUElDIFBvc3RlZCBJbnRlcnJ1cHRzLCBmb3IgQU1EIElPTU1VIGFuZCBLVk0gU1ZNIEFWSUMuICBFc3NlbnRpYWxseSwgaXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBwcmV0dHkgZGVlcCBvbmUsIGFmZmVjdGluZyBhIGJ1bmNoIG9mIGNvcmUga2VybmVsIGFyZWFzLiAgSSBzZWUgaXQgdG91Y2hlcyBkb2N1bWVudGF0aW9uLCBzb21lIGNydWNpYWwgeDg2IGFzc2VtYmx5IGluY2x1ZGVzLCBhbmQgdGhlbiBkaXZlcyBkZWVwIGludG8gS1ZNJiMzOTtzIFNWTSBpbXBsZW1lbnRhdGlvbiBhbmQgdGhlIEFNRCBJT01NVSBkcml2ZXJzLiBUaGUgcGF0Y2ggYWRkcyBhIG5ldyBgYW1kX2lvbW11PWdhcHBpYCBrZXJuZWwgcGFyYW1ldGVyLiBJdCYjMzk7cyBtb2RpZnlpbmcgSVJURXMgZm9yIHBvc3RlZCBpbnRlcnJ1cHRzIGFuZCBpbnRyb2R1Y2VzIGEgbmV3IHdha2V1cCBsaXN0IGZvciBHQVBQSSB3aXRoaW4gS1ZNLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBpcyB0aGlzIHJlYWNoYWJsZSBpbiBhIGZ1enphYmxlIGVudmlyb25tZW50PyBTaW5jZSB0aGlzIGNvZGUgaXMgZGlyZWN0bHkgbGlua2VkIHRvIEFNRCBJT01NVSwgS1ZNIFNWTSBhbmQsIHNwZWNpZmljYWxseSBBVklDLCBJIG5lZWQgdG8gZXZhbHVhdGUgdGhlIHBvdGVudGlhbC4gUUVNVSBhbmQgR29vZ2xlIENvbXB1dGUgRW5naW5lIGFsbG93IG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBvbiBBTUQgaG9zdHMgb3IgZXZlbiBlbXVsYXRpb24uIFdoaWxlIEFNRCBJT01NVSBlbXVsYXRpb24gd2l0aCBBVklDIGluIFFFTVUgbWlnaHQgYmUgYSBiaXQgc2tldGNoeSwgdGhlICpLVk0gY29kZSBpdHNlbGYqIGlzIHRoZSByZWFsIHRhcmdldCBoZXJlLgoKV2FpdCwgU3l6a2FsbGVyIHJ1bnMgaW4gUUVNVS4uLiBhbmQgaXQgc3VwcG9ydHMgZnV6emluZyBLVk0uIElmIHdlJiMzOTtyZSBvbiBhbiBBTUQgaG9zdCB3aXRoIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiwgb3IgZXZlbiBlbXVsYXRpbmcgU1ZNLCB3ZSBzaG91bGQgYmUgYWJsZSB0byByZWFjaCBLVk0gU1ZNIGNvZGUgZGlyZWN0bHkuIFN5emthbGxlciBzdXBwb3J0cyBLVk0gZnV6emluZywgd2hpY2ggbWVhbnMgd2UgKmNhbiogYWJzb2x1dGVseSBmdXp6IHRoaXMhIFRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBwdXJzdWluZy4KCk5vdywgbGV0JiMzOTtzIHpvb20gaW4gb24gdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyB0aGF0IGFyZSBtb3N0IGludGVyZXN0aW5nIGZvciBmdXp6aW5nOgoKKiAgIGBhdmljX2luaXRfdmNwdWAsIGBhdmljX2FkZF92Y3B1X3RvX2dhcHBpX3dha2V1cF9saXN0YCwgYGF2aWNfcmVtb3ZlX3ZjcHVfZnJvbV9nYXBwaV93YWtldXBfbGlzdGAsIGBhdmljX2Rlc3Ryb3lfdmNwdWAsIGBzdm1faXJfbGlzdF9kZWxgLCBgYXZpY19waV91cGRhdGVfaXJ0ZWAsIGBhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5YCwgYF9fYXZpY192Y3B1X2xvYWRgLCBgX19hdmljX3ZjcHVfcHV0YCwgYGF2aWNfdmNwdV9wdXRgLCBgYXZpY19nYXBwaV93YWtldXBfaGFuZGxlcmAsIGBhdmljX2hhcmR3YXJlX3NldHVwYCwgYGF2aWNfaGFyZHdhcmVfdW5zZXR1cGAsIGBfX2FtZF9pb21tdV91cGRhdGVfZ2FgLCBgYW1kX2lvbW11X3VwZGF0ZV9nYWAsIGBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZWAsIGFuZCBgYW1kX2lyX3NldF92Y3B1X2FmZmluaXR5YC4KCk5leHQgc3RlcCwgSSBuZWVkIHRvIGNoZWNrIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMgdG8gYmUgc3VyZSB0aGUgcmVsZXZhbnQgZmVhdHVyZXMgYXJlIGVuYWJsZWQuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBsb29raW5nIGF0IEtWTV9BTUQsIEFNRF9JT01NVSwgYW5kIElSUV9SRU1BUC4gVGhvc2UgbmVlZCB0byBiZSB2ZXJpZmllZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxMzozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNX0FNRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnPTEzND1jb25maWcgS1ZNX0lOVEVMX1REWFxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE0Njpjb25maWcgS1ZNX0FNRFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ3LVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVx0Ym9vbCBcJiMzNDtBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTM6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ2MTIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkFzc2Vzc2luZyBJT01NVSBhbmQgSVJRIFJlbWFwcGluZyBpbiBUaGlzIENvbnRleHQqKgoKT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gY2hlY2sgdGhlIHN0YXR1cyBvZiBBTURfSU9NTVUgYW5kIElSUV9SRU1BUC4gVGhvc2UgYXJlIHRoZSBmb3VuZGF0aW9uIHN0b25lcywgcmVhbGx5LiBHaXZlbiB0aGUgbGlrZWx5IGNvbnN0cmFpbnRzIGluIHRoaXMgc2V0dXAsIHRoZXkmIzM5O3JlIHByb2JhYmx5IGtleSB0byBhY2hpZXZpbmcgdGhlIGRlc2lyZWQgb3V0Y29tZS4gSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIGlmIHRoZXkgYXJlIGVuYWJsZWQgYW5kIGNvbmZpZ3VyZWQgY29ycmVjdGx5LCBvciBpZiB0aGVyZSYjMzk7cyBhbnkgaGludCBvZiBhIHByb2JsZW0gdGhlcmUuIEFueSBpc3N1ZXMgd2l0aCB0aG9zZSBhbmQsIGZyYW5rbHksIHdlIGNhbiBwcm9iYWJseSBzdG9wIHRoZXJlIGFzIG90aGVyIGNvbmZpZ3VyYXRpb25zIHdpbGwgbm90IGJlIGVmZmVjdGl2ZS4gU28sIHRob3NlIG5lZWQgdG8gYmUgc29saWQuIEkgd2FudCB0byBrbm93IGlmIHRoZXkmIzM5O3JlIHVwIGFuZCBydW5uaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDEzOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEFNRF9JT01NVSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW9tbXUvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTM6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ4MjUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqTmF2aWdhdGluZyB0aGUgQU1EIElPTU1VIENvZGViYXNlKioKClJpZ2h0LCAqQU1EX0lPTU1VKiwgdGhhdCYjMzk7cyB0aGUga2V5LiBJIG5lZWQgdG8gZmluZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGF0LiBCYXNlZCBvbiBleHBlcmllbmNlLCB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIGxvb2sgZmlyc3QgaXMgdGhlIGBkcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlc2UgaGFyZHdhcmUtc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlc2lkZSB3aXRoaW4gdGhlIGRyaXZlciB0cmVlLiBJdCYjMzk7cyBhbG1vc3QgYSBnaXZlbi4gVGltZSB0byBjb25maXJtIGFuZCBnZXQgdG8gd29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxMzozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQU1EX0lPTU1VJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9pb21tdS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZy0yLSMgQU1EIElPTU1VIHN1cHBvcnRcbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWc6Mzpjb25maWcgQU1EX0lPTU1VXG5kcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnLTQtXHRib29sIFwmIzM0O0FNRCBJT01NVSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZy0zMi1cbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWc6MzM6Y29uZmlnIEFNRF9JT01NVV9JT01NVUZEXG5kcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnLTM0LVx0Ym9vbCBcJiMzNDtFbmFibGUgSU9NTVVGRCBmZWF0dXJlcyBmb3IgQU1EIElPTU1VIChFWFBFUklNRU5UQUwpXCYjMzQ7XG4tLVxuZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZy00Mi1cbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWc6NDM6Y29uZmlnIEFNRF9JT01NVV9ERUJVR0ZTXG5kcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnLTQ0LVx0Ym9vbCBcJiMzNDtFbmFibGUgQU1EIElPTU1VIGludGVybmFscyBpbiBEZWJ1Z0ZTXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTM6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUyMTMKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqVW5kZXJzdGFuZGluZyBJUlFfUkVNQVAgaW4gRGVwdGgqKgoKUmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSVJRX1JFTUFQLi4uIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucy4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgcmVtYXBwaW5nIGludGVycnVwdCByZXF1ZXN0IGxpbmVzLCBlc3NlbnRpYWxseSBkZWNvdXBsaW5nIHRoZSBwaHlzaWNhbCBpbnRlcnJ1cHQgcGlucyBmcm9tIHRoZSBpbnRlcnJ1cHQgbnVtYmVycyBwcmVzZW50ZWQgdG8gdGhlIENQVS4gVGhlIGltbWVkaWF0ZSBiZW5lZml0IGlzLCBvZiBjb3Vyc2UsIGEgbW9yZSBmbGV4aWJsZSBhbmQgcm9idXN0IGludGVycnVwdCByb3V0aW5nIHN5c3RlbS4gV2UmIzM5O3JlIGdldHRpbmcgYXdheSBmcm9tIHRoZSBoYXJkd2lyZWQgbGltaXRhdGlvbnMgb2YgbGVnYWN5IGludGVycnVwdCBjb250cm9sbGVycyBhbmQgZW1icmFjaW5nIGEgbW9yZSBkeW5hbWljIGFwcHJvYWNoLgoKVGhlIGtleSBxdWVzdGlvbiBpcywgKmhvdyogaXMgdGhpcyByZW1hcCBpbXBsZW1lbnRlZD8gSXMgaXQgYSB0cmFuc2xhdGlvbiB0YWJsZSB3aXRoaW4gdGhlIGNoaXBzZXQ/IElzIGl0IG1hbmFnZWQgYnkgdGhlIGhvc3QgYnJpZGdlPyBBbmQgd2hhdCBhcmUgdGhlIHBlcmZvcm1hbmNlIG92ZXJoZWFkcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBpbmRpcmVjdGlvbj8gSSYjMzk7ZCBpbWFnaW5lIHRoYXQgYW55IGxhdGVuY3kgaW50cm9kdWNlZCBieSB0aGUgcmVtYXBwaW5nIHByb2Nlc3MgaXMgdGhlIHByaW1hcnkgZmFjdG9yIHRvIGNvbnNpZGVyIC0gZXNwZWNpYWxseSBpbiBwZXJmb3JtYW5jZSBjcml0aWNhbCBlbnZpcm9ubWVudHMuCgpJJiMzOTttIGFsc28gY29uc2lkZXJpbmcgdGhlIGltcGxpY2F0aW9ucyBmb3IgZGV2aWNlIGRyaXZlcnMuIERvIHRoZXkgbmVlZCB0byBiZSBhd2FyZSBvZiB0aGUgcmVtYXBwaW5nPyBPciBpcyB0aGUgc3lzdGVtIGFic3RyYWN0aW9uIHRyYW5zcGFyZW50IGVub3VnaCB0byBpbnN1bGF0ZSB0aGUgZHJpdmVyIGZyb20gdGhlc2UgY2hhbmdlcywgYWxsb3dpbmcgaXQgdG8gc2ltcGx5IHJlcXVlc3QgYW4gaW50ZXJydXB0IG51bWJlciBhbmQgaGF2ZSB0aGUgc3lzdGVtIGhhbmRsZSB0aGUgdW5kZXJseWluZyByZW1hcHBpbmcgd2l0aG91dCBpdHMgaW50ZXJ2ZW50aW9uPyBJJiMzOTtkIGhhemFyZCBhIGd1ZXNzIHRoYXQgbmV3ZXIgZHJpdmVycyBhcmUgYnVpbHQgd2l0aCBhd2FyZW5lc3MsIGFsbG93aW5nIHNvbWUgZGVncmVlIG9mIGNvbnRyb2wuCgpGaW5hbGx5LCB3aGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGZvciB2aXJ0dWFsaXphdGlvbj8gSG93IGRvZXMgSVJRX1JFTUFQIHBsYXkgd2l0aCBpbnRlcnJ1cHQgdmlydHVhbGl6YXRpb24gdGVjaG5pcXVlcywgbGlrZSBNU0ktWCBhbmQgaW50ZXJydXB0IHJlbWFwcGluZyBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBJcyB0aGVyZSBhIG5lZWQgdG8gY2FyZWZ1bGx5IG1hbmFnZSB0aGUgbWFwcGluZyBvZiBwaHlzaWNhbCBpbnRlcnJ1cHRzIHRvIHZpcnR1YWwgaW50ZXJydXB0IHZlY3RvcnM/IFRoaXMgaXMgcmVhbGx5IGNydWNpYWwgd2hlbiBkZWFsaW5nIHdpdGggbmVzdGVkIHZpcnR1YWxpemF0aW9uIG9yIGhpZ2gtcGVyZm9ybWFuY2UgSS9PIHZpcnR1YWxpemF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxMzozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSVJRX1JFTUFQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW9tbXUvS2NvbmZpZz0xOTk9c291cmNlIFwmIzM0O2RyaXZlcnMvaW9tbXUvcmlzY3YvS2NvbmZpZ1wmIzM0O1xuZHJpdmVycy9pb21tdS9LY29uZmlnLTIwMC1cbmRyaXZlcnMvaW9tbXUvS2NvbmZpZzoyMDE6Y29uZmlnIElSUV9SRU1BUFxuZHJpdmVycy9pb21tdS9LY29uZmlnLTIwMi1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgSW50ZXJydXB0IFJlbWFwcGluZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxMzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTY5MQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBhbWRfaW9tbXVfZ2FwcGlgIGZlYXR1cmUgYW5kIHRyeWluZyB0byBmaWd1cmUgb3V0IGlmIGl0JiMzOTtzIGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmcuIEZpcnN0LCBJIG5lZWQgdG8gY2hlY2sgaWYgdGhlcmUgYXJlIGFsdGVybmF0aXZlIGNvbmZpZ3VyYXRpb25zIHRoYXQgbWlnaHQgYWZmZWN0IGl0LiBPa2F5LCBJIHNlZSBpdCYjMzk7cyBleHBvcnRlZCBpbiBgZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jYC4gVGhhdCYjMzk7cyBhIGdvb2Qgc2lnbi4gTG9va3MgbGlrZSBpdCYjMzk7cyBlbmFibGVkIGJ5IHRoZSBgYW1kX2lvbW11PWdhcHBpYCBrZXJuZWwgcGFyYW1ldGVyLiBIbW0sIHRoZSBvYnZpb3VzIHBhdGggdG8gZ2V0dGluZyBzeXprYWxsZXIgdG8gaGl0IHRoaXMgd291bGQgYmUgdG8gcGFzcyB0aGF0IHBhcmFtZXRlci4gQnV0IHN5emthbGxlciBkb2VzbiYjMzk7dCBhdXRvbWF0aWNhbGx5IHBhc3Mga2VybmVsIHBhcmFtZXRlcnMgdW5sZXNzIHRoZXkmIzM5O3JlIGV4cGxpY2l0bHkgZGVmaW5lZCBpbiBpdHMgY29uZmlndXJhdGlvbiwgYW5kIEkgY2FuJiMzOTt0IHNwZWNpZnkga2VybmVsIHBhcmFtZXRlcnMgZGlyZWN0bHkgd2l0aGluIEtjb25maWcuIFRoYXQmIzM5O3MgYSBodXJkbGUuIFNvLCBmdXp6aW5nIHRoZSBwYXJhbWV0ZXIgcGFyc2luZyBpdHNlbGYgaXNuJiMzOTt0IGEgdmlhYmxlIG9wdGlvbi4KCk5vdywgaG9sZCBvbiBhIHNlY29uZC4uLiBgYW1kX2lvbW11X2dhcHBpYCBpcyBhICpnbG9iYWwqIHZhcmlhYmxlLiBUaGF0IGNoYW5nZXMgdGhpbmdzLiBDb3VsZCBpdCBiZSBleHBvc2VkIHRocm91Z2ggc3lzZnMgb3IgZGVidWdmcz8gSWYgc28sIHRoYXQgb3BlbnMgYSBiYWNrZG9vci4gSSBuZWVkIHRvIGludmVzdGlnYXRlIGlmIHRoZXJlJiMzOTtzIGFueSBtZWNoYW5pc20gdG8gbW9kaWZ5IHRoaXMgZ2xvYmFsIHZhcmlhYmxlLiBUaW1lIHRvIGNoZWNrIGZvciBpdHMgZXhwb3N1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDEzOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FtZF9pb21tdV9nYXBwaSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW9tbXUvYW1kLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2lvbW11L2FtZC9hbWRfaW9tbXUuaD00Mz1pbnQgYW1kX2lvbW11X2VuYWJsZV9mYXVsdGluZyh1bnNpZ25lZCBpbnQgY3B1KTtcbmRyaXZlcnMvaW9tbXUvYW1kL2FtZF9pb21tdS5oOjQ0OmV4dGVybiBib29sIGFtZF9pb21tdV9nYXBwaTtcbmRyaXZlcnMvaW9tbXUvYW1kL2FtZF9pb21tdS5oLTQ1LWV4dGVybiBpbnQgYW1kX2lvbW11X2d1ZXN0X2lyO1xuLS1cbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYz0xNjE9aW50IGFtZF9pb21tdV9ncHRfbGV2ZWwgPSBQQUdFX01PREVfNF9MRVZFTDtcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy0xNjItXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM6MTYzOmJvb2wgYW1kX2lvbW11X2dhcHBpO1xuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jOjE2NDpFWFBPUlRfU1lNQk9MKGFtZF9pb21tdV9nYXBwaSk7XG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMTY1LVxuLS1cbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYz0yOTk4PXN0YXRpYyB2b2lkIGVuYWJsZV9pb21tdXNfdmFwaWModm9pZClcbi0tXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMzAwNS1cdFx0LypcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYzozMDA2Olx0XHQgKiBEaXNhYmxlIEdBUFBJLCBkbyBub3QgY2hlY2sgYW1kX2lvbW11X2dhcHBpIGFzIGl0IG1heSBiZVxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTMwMDctXHRcdCAqIGZhbHNlIGluIG5ldyBrZXhlYyBrZXJuZWwgZXZlbiB0aG91Z2ggcHJldmlvdXMga2VybmVsIGhhc1xuLS1cbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy0zMDUwLVxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jOjMwNTE6XHRpZiAoYW1kX2lvbW11X2dhcHBpIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTMwNTItXHQgICAgIShjaGVja19mZWF0dXJlKEZFQVRVUkVfR0FQUEkpIFx1MDAyNlx1MDAyNlxuLS1cbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy0zMDU0LVx0XHRwcl93YXJuKFwmIzM0O0dBUFBJIGlzIG5vdCBzdXBwb3J0ZWQuXFxuXCYjMzQ7KTtcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYzozMDU1Olx0XHRhbWRfaW9tbXVfZ2FwcGkgPSBmYWxzZTtcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy0zMDU2LVx0fVxuLS1cbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy0zMDU5LVx0Zm9yX2VhY2hfaW9tbXUoaW9tbXUpIHtcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYzozMDYwOlx0XHRpZiAoYW1kX2lvbW11X2dhcHBpKVxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTMwNjEtXHRcdFx0aW9tbXVfZmVhdHVyZV9lbmFibGUoaW9tbXUsIENPTlRST0xfR0FQUElfRU4pO1xuLS1cbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy0zMDcyLVx0cHJfaW5mbyhcJiMzNDtWaXJ0dWFsIEFQSUMgZW5hYmxlZCB3aXRoICVzXFxuXCYjMzQ7LFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jOjMwNzM6XHRcdGFtZF9pb21tdV9nYXBwaSA/IFwmIzM0O0dBUFBJXCYjMzQ7IDogXCYjMzQ7R0FMT0dcJiMzNDspO1xuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTMwNzQtI2VuZGlmXG4tLVxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jPTM3Mzc9c3RhdGljIGludCBfX2luaXQgcGFyc2VfYW1kX2lvbW11X29wdGlvbnMoY2hhciAqc3RyKVxuLS1cbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy0zNzY0LVx0XHR9IGVsc2UgaWYgKHN0cm5jbXAoc3RyLCBcJiMzNDtnYXBwaVwmIzM0OywgNSkgPT0gMCkge1xuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jOjM3NjU6XHRcdFx0YW1kX2lvbW11X2dhcHBpID0gdHJ1ZTtcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy0zNzY2LVx0XHR9IGVsc2Uge1xuLS1cbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmM9Mzk2Mj1zdGF0aWMgdm9pZCBfX2FtZF9pb21tdV91cGRhdGVfZ2Eoc3RydWN0IGlydGVfZ2EgKmVudHJ5LCBpbnQgYXBpY2lkLFxuLS1cbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmMtMzk3Mi1cdH0gZWxzZSB7XG5kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jOjM5NzM6XHRcdGlmIChhbWRfaW9tbXVfZ2FwcGkpIHtcbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmMtMzk3NC1cdFx0XHRlbnRyeS1cdTAwM2Vsby5maWVsZHNfdmFwaWMuZ2FwcGlfZGlzID0gIXdha2V1cF9pbnRyIFx1MDAyNlx1MDAyNlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxMzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzE2MwoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDIwNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgQU1EIElPTU1VIEdBUFBJIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggc2VlbXMgdG8gaW50cm9kdWNlIEdBUFBJIChHdWVzdCBBUElDLWJhc2VkIFBvc3RlZCBJbnRlcnJ1cHQpIHN1cHBvcnQgZm9yIHRoZSBBTUQgSU9NTVUsIHdoaWNoIEkgYmVsaWV2ZSBpcyByZWxhdGVkIHRvIGludGVycnVwdCBoYW5kbGluZy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYGFtZF9pb21tdV9nYXBwaWAgaXMgdGhlIGtleSBmbGFnIGhlcmUsIGFuZCBpdCYjMzk7cyBzZXQgb25seSB3aGVuIGBhbWRfaW9tbXU9Z2FwcGlgIGlzIHBhc3NlZCBhcyBhIGtlcm5lbCBwYXJhbWV0ZXIuIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGVyZSYjMzk7cyBubyBvdGhlciB3YXkgdG8gc2V0IGl0LgoKVGhlIGludGVyZXN0aW5nIHBvaW50IGlzIGhvdyB0aGUgY29kZSAqYmVoYXZlcyogd2hlbiBgYW1kX2lvbW11X2dhcHBpYCBpcyAqbm90KiBzZXQuIFRoZSBwYXRjaCBkb2VzIG1vZGlmeSB0aGUgbm9uLUdBUFBJIHBhdGgsIGJ1dCBpdCBhcHBlYXJzIHRvIGJlIHByaW1hcmlseSBhIHJlZmFjdG9yaW5nIG9yIGNsZWFudXAuIFZhcmlhYmxlcyBhcmUgcmVuYW1lZCAoYGdhX2xvZ19pbnRyYCB0byBgd2FrZXVwX2ludHJgKSBhbmQgc29tZSBsb2dpYyBpcyB0d2Vha2VkLCBidXQgdGhlICpmdW5jdGlvbmFsaXR5KiByZW1haW5zIGVzc2VudGlhbGx5IHRoZSBzYW1lIGZvciB0aGUgbm9uLUdBUFBJIHBhdGguIFRoZSBrZXkgY2hhbmdlIGlzIHRoYXQgYGFtZF9pb21tdV91cGRhdGVfZ2FgIG5vdyB0YWtlcyBgYXBpY2lkYCwgYHdha2V1cF9pbnRyYCwgYW5kIGBpc19ydW5uaW5nYCBhcmd1bWVudHMsIHJlcGxhY2luZyB0aGUgb3JpZ2luYWwgYGNwdWAgYW5kIGBnYV9sb2dfaW50cmAuCgpMb29raW5nIGRlZXBlciwgdGhlIG9yaWdpbmFsIGBjcHVgIGFyZ3VtZW50IGluIGBhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5YCB3YXMgYWN0dWFsbHkgdGhlIEFQSUMgSUQsIG5vdCB0aGUgQ1BVIG51bWJlciwgd2hpY2ggdGhpcyBwYXRjaCBjb3JyZWN0bHkgY2FwdHVyZXMuIFRoZSByZW5hbWluZyB0byBgYXBpY2lkYCBpcyB0aHVzIG1vcmUgYWNjdXJhdGUgYW5kIGNsZWFyZXIuCgpUaGUgbmV3IEdBUFBJLXNwZWNpZmljIGNvZGUsIGxpa2UgYGF2aWNfYWRkX3ZjcHVfdG9fZ2FwcGlfd2FrZXVwX2xpc3RgIGFuZCByZWxhdGVkIGNoYW5nZXMsIGlzIGVudGlyZWx5IGdhdGVkIGJ5IHRoZSBgYW1kX2lvbW11X2dhcHBpYCBmbGFnLCB3aGljaCBtZWFucyBpdCBpcyBpbmFjY2Vzc2libGUgd2l0aG91dCBwYXNzaW5nIGBhbWRfaW9tbXU9Z2FwcGlgLgoKR2l2ZW4gU3l6a2FsbGVyJiMzOTtzIGJlaGF2aW9yLCBJIG5lZWQgdG8gZXZhbHVhdGUgaWYgdGhlIHBhdGNoICpzaG91bGQqIGJlIGZ1enplZC4gVGhlIHBhdGNoIHNlZW1zIHRvIGludHJvZHVjZSAqbmV3KiBmdW5jdGlvbmFsIGJlaGF2aW9yLCBhbmQgdGhhdCBpcyBHQVBQSS4gU3l6a2FsbGVyIGNhbiBwYXNzIHRoZSBuZWVkZWQga2VybmVsIHBhcmFtZXRlci4gVGhlcmVmb3JlLCB0aGlzIHBhdGNoIHdhcnJhbnRzIGZ1enppbmcsIHNpbmNlIGl0IGludHJvZHVjZXMgR0FQUEkuCgpUaGUgcmVxdWlyZWQgS2NvbmZpZyBvcHRpb25zIGFyZSBgS1ZNX0FNRGAgYW5kIGBBTURfSU9NTVVgIGJlY2F1c2UgdGhleSBlbmFibGUgdGhlIGZ1bmRhbWVudGFsIEFNRCBLVk0gYW5kIElPTU1VIGZ1bmN0aW9uYWxpdHkgb24gd2hpY2ggdGhpcyBHQVBQSSBmZWF0dXJlIGlzIGJ1aWx0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxMzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNX0FNRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMzQ9Y29uZmlnIEtWTV9JTlRFTF9URFhcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNDY6Y29uZmlnIEtWTV9BTURcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0Ny1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cdGJvb2wgXCYjMzQ7QU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxMzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTkyMgoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLiBNeSBmaXJzdCB0aG91Z2h0IGlzOgoKKipDaGVja2luZyBEZXBlbmRlbmNpZXMgZm9yIGBBTURfSU9NTVVgKioKClJpZ2h0LCBzbyBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgdGhlIGBBTURfSU9NTVVgIG1vZHVsZSBoYXMgYW55IGRlcGVuZGVuY2llcyB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciBjb21wb25lbnRzIG9yIHNldHRpbmdzIGl0IHJlbGllcyBvbiBiZWZvcmUgSSBjYW4gcHJvcGVybHkgYXNzZXNzIGl0cyBmdW5jdGlvbiBvciBwb3RlbnRpYWwgaXNzdWVzLiBUaGlzIGlzIGEgZnVuZGFtZW50YWwgc3RlcCBmb3IgbWU7IGlmIGl0IGRlcGVuZHMgb24gc29tZXRoaW5nLCBJIG5lZWQgdG8ga25vdyAqd2hhdCogc28gSSBjYW4gYXNzZXNzIHdoZXRoZXIgdGhhdCBkZXBlbmRlbmN5IGlzIHNldCB1cCBjb3JyZWN0bHksIG9yIHdoYXQgdGhlIGtub2NrLW9uIGVmZmVjdHMgb2YgbWVzc2luZyB3aXRoIGBBTURfSU9NTVVgIG1pZ2h0IGJlLiBUaW1lIHRvIGRpZyBpbiBhbmQgZmluZCBvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDEzOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBBTURfSU9NTVUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZy0yLSMgQU1EIElPTU1VIHN1cHBvcnRcbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWc6Mzpjb25maWcgQU1EX0lPTU1VXG5kcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnLTQtXHRib29sIFwmIzM0O0FNRCBJT01NVSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZy0zMi1cbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWc6MzM6Y29uZmlnIEFNRF9JT01NVV9JT01NVUZEXG5kcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnLTM0LVx0Ym9vbCBcJiMzNDtFbmFibGUgSU9NTVVGRCBmZWF0dXJlcyBmb3IgQU1EIElPTU1VIChFWFBFUklNRU5UQUwpXCYjMzQ7XG4tLVxuZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZy00Mi1cbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWc6NDM6Y29uZmlnIEFNRF9JT01NVV9ERUJVR0ZTXG5kcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnLTQ0LVx0Ym9vbCBcJiMzNDtFbmFibGUgQU1EIElPTU1VIGludGVybmFscyBpbiBEZWJ1Z0ZTXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDEzOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMzIxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkV4YW1pbmluZyBBTUQgSU9NTVUgRGVwZW5kZW5jaWVzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIHJpZ2h0IGluLiBUbyB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBwaWN0dXJlIG9mIGhvdyBgQU1EX0lPTU1VYCBpcyBjb25maWd1cmVkIGFuZCB1c2VkLCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGl0cyBkZXBlbmRlbmNpZXMuIEkmIzM5O20gZ29pbmcgdG8gbmF2aWdhdGUgdG8gdGhlIGBkcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IOKAkyBpdCYjMzk7cyB3aGVyZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGlzIHNwZWNpZmljIEFNRCBJT01NVSBkcml2ZXIgYXJlIGRlZmluZWQsIGFuZCB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gYEFNRF9JT01NVWAgYW5kIG90aGVyIGZlYXR1cmVzIG9yIG9wdGlvbnMgd2l0aGluIHRoZSBrZXJuZWwuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGNvbmRpdGlvbmFsIGxvZ2ljLCB0aGUgYGRlcGVuZHMgb25gIHN0YXRlbWVudHMsIGFueSBgc2VsZWN0YCBzdGF0ZW1lbnRzLCBhbmQgYW55dGhpbmcgdGhhdCBnaXZlcyBtZSBpbnNpZ2h0IGludG8gd2hhdCBlbHNlICptdXN0KiBiZSBlbmFibGVkIG9yIGNvbnNpZGVyZWQgaW4gb3JkZXIgZm9yIGBBTURfSU9NTVVgIHRvIGJlIGF2YWlsYWJsZSBhbmQgZnVuY3Rpb25hbC4gSSBleHBlY3QgdGhpcyBmaWxlIHdpbGwgcmV2ZWFsIHRoZSBrZXkgYnVpbGRpbmcgYmxvY2tzLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDEzOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCMgQU1EIElPTU1VIHN1cHBvcnRcbiAgIDM6XHRjb25maWcgQU1EX0lPTU1VXG4gICA0Olx0XHRib29sIFwmIzM0O0FNRCBJT01NVSBzdXBwb3J0XCYjMzQ7XG4gICA1Olx0XHRzZWxlY3QgU1dJT1RMQlxuICAgNjpcdFx0c2VsZWN0IFBDSV9NU0lcbiAgIDc6XHRcdHNlbGVjdCBQQ0lfQVRTXG4gICA4Olx0XHRzZWxlY3QgUENJX1BSSVxuICAgOTpcdFx0c2VsZWN0IFBDSV9QQVNJRFxuICAxMDpcdFx0c2VsZWN0IElSUV9NU0lfTElCXG4gIDExOlx0XHRzZWxlY3QgTU1VX05PVElGSUVSXG4gIDEyOlx0XHRzZWxlY3QgSU9NTVVfQVBJXG4gIDEzOlx0XHRzZWxlY3QgSU9NTVVfSU9WQVxuICAxNDpcdFx0c2VsZWN0IElPTU1VX1NWQVxuICAxNTpcdFx0c2VsZWN0IElPTU1VX0lPUEZcbiAgMTY6XHRcdHNlbGVjdCBJT01NVUZEX0RSSVZFUiBpZiBJT01NVUZEXG4gIDE3Olx0XHRzZWxlY3QgR0VORVJJQ19QVFxuICAxODpcdFx0c2VsZWN0IElPTU1VX1BUXG4gIDE5Olx0XHRzZWxlY3QgSU9NTVVfUFRfQU1EVjFcbiAgMjA6XHRcdHNlbGVjdCBJT01NVV9QVF9YODZfNjRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTM6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA4NjQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLgoKKipJJiMzOTttIERlZXAgaW4gdGhlIFdlZWRzIG9uIElPTU1VIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIHNvIEkmIzM5O20gZm9jdXNpbmcgb24gZ2V0dGluZyB0aGlzIEFNRCBJT01NVSBpbXBsZW1lbnRhdGlvbiBjb25maWd1cmVkIHByb3Blcmx5LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbWFrZSBzdXJlIEkmIzM5O3ZlIGdvdCBgQU1EX0lPTU1VYCBlbmFibGVkIGluIHRoZSBjb25maWcuIFRoYXQmIzM5O3MgdGhlIGJhc2VsaW5lLiBCdXQgSSBjYW4mIzM5O3QganVzdCBzdG9wIHRoZXJlLiBUaGUgbmV4dCBrZXkgYXNwZWN0IG9mIHRoaXMsIGJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcsIHdvdWxkIGJlIHRvIGNvbnNpZGVyIGBJUlFfUkVNQVBgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhhdCBpcyBnb2luZyB0byBpbnRlcmFjdCB3aXRoIHRoZSBJT01NVS4gRG9lcyBpdCBuZWVkIHRvIGJlIGVuYWJsZWQgZm9yIG9wdGltYWwgcGVyZm9ybWFuY2U/IERvZXMgdGhlIGltcGxlbWVudGF0aW9uIGRlcGVuZCBvbiBpdD8gSSBuZWVkIHRvIHRoaW5rIGNhcmVmdWxseSBhYm91dCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZXNlIHNldHRpbmdzLiBJIGtub3cgYElSUV9SRU1BUGAgaXMgY3J1Y2lhbCB0byBtYWtpbmcgc3VyZSB0aGF0IHRoZSBpbnRlcnJ1cHRzIGFyZSBwcm9wZXJseSBtYXBwZWQgdGhyb3VnaCB0aGUgSU9NTVUsIHRoZXJlZm9yZSBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgYWxsIHNldCB1cCBjb3JyZWN0bHkuIFRoaXMgYWxsIHRpZXMgdG9nZXRoZXIsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgYWxsIGZ1bmN0aW9uaW5nIHRvZ2V0aGVyIHByb3Blcmx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxMzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvaW9tbXUvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTkwOlx0XHQgIFRoZXNlIElPTU1VcyBhbGxvdyB2aXJ0dWFsaXphdGlvbiBvZiB0aGUgYWRkcmVzcyBzcGFjZSB1c2VkIGJ5IG1vc3RcbiAxOTE6XHRcdCAgY29yZXMgd2l0aGluIHRoZSBtdWx0aW1lZGlhIHN1YnN5c3RlbS5cbiAxOTI6XHRcbiAxOTM6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTiBoZXJlLlxuIDE5NDpcdFxuIDE5NTpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnXCYjMzQ7XG4gMTk2Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvaW9tbXUvYXJtL0tjb25maWdcJiMzNDtcbiAxOTc6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9pb21tdS9pbnRlbC9LY29uZmlnXCYjMzQ7XG4gMTk4Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvaW9tbXUvaW9tbXVmZC9LY29uZmlnXCYjMzQ7XG4gMTk5Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvaW9tbXUvcmlzY3YvS2NvbmZpZ1wmIzM0O1xuIDIwMDpcdFxuIDIwMTpcdGNvbmZpZyBJUlFfUkVNQVBcbiAyMDI6XHRcdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgSW50ZXJydXB0IFJlbWFwcGluZ1wmIzM0O1xuIDIwMzpcdFx0ZGVwZW5kcyBvbiBYODZfNjQgXHUwMDI2XHUwMDI2IFg4Nl9JT19BUElDIFx1MDAyNlx1MDAyNiBQQ0lfTVNJIFx1MDAyNlx1MDAyNiBBQ1BJXG4gMjA0Olx0XHRzZWxlY3QgSVJRX01TSV9MSUJcbiAyMDU6XHRcdGhlbHBcbiAyMDY6XHRcdCAgU3VwcG9ydHMgSW50ZXJydXB0IHJlbWFwcGluZyBmb3IgSU8tQVBJQyBhbmQgTVNJIGRldmljZXMuXG4gMjA3Olx0XHQgIFRvIHVzZSB4MmFwaWMgbW9kZSBpbiB0aGUgQ1BVJiMzOTtzIHdoaWNoIHN1cHBvcnQgeDJBUElDIGVuaGFuY2VtZW50cyBvclxuIDIwODpcdFx0ICB0byBzdXBwb3J0IHBsYXRmb3JtcyB3aXRoIENQVSYjMzk7cyBoYXZpbmcgXHUwMDNlIDggYml0IEFQSUMgSUQsIHNheSBZLlxuIDIwOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxMzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTQ4OAoJCQkJCQkJb3V0cHV0OiAxMTYKCQkJCQkJCXRob3VnaHRzOiA3NDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEFNRCBJT01NVSBhbmQgQVZJQyBGdW5jdGlvbmFsaXR5KioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyB0aGUgQU1EIElPTU1VIGFuZCBBZHZhbmNlZCBWaXJ0dWFsIEludGVycnVwdCBDb250cm9sbGVyIChBVklDKSBwbGF5IHRvZ2V0aGVyLCBhbmQgaXQmIzM5O3MgYmVjb21pbmcgY2xlYXIgd2hlcmUgdGhlIGRlcGVuZGVuY2llcyBsaWUuIFNwZWNpZmljYWxseSwgSSBzZWUgdGhhdCBgSVJRX1JFTUFQYCBpcyBjcnVjaWFsLiBJdCYjMzk7cyBlc3NlbnRpYWwgZm9yIGBhbWRfaW9tbXVfdXBkYXRlX2dhYCBhbmQgYGFtZF9pb21tdV9hY3RpdmF0ZV9ndWVzdF9tb2RlYCB0byBiZSBkZWZpbmVkIGFuZCwgdGhlcmVmb3JlLCB1c2FibGUuIEkgY29uZmlybWVkIHRoaXMgYnkgY2hlY2tpbmcgdGhlIGluY2x1ZGUgZmlsZSBgbGludXgvYW1kLWlvbW11LmhgLCBzZWVpbmcgdGhhdCBib3RoIGBDT05GSUdfQU1EX0lPTU1VYCBhbmQgYENPTkZJR19JUlFfUkVNQVBgIGFyZSByZXF1aXJlZC4gQWxzbywgdGhlIEtWTSBzaWRlIHJlcXVpcmVzIGBLVk1fQU1EYC4KCk5vdywgSSB3YW50IHRvIGlkZW50aWZ5IHRoZSBrZXkgc3ltYm9scyB0byBmb2N1cyBvbiBpbiB0aGlzIGFuYWx5c2lzLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O3ZlIGlkZW50aWZpZWQ6IGBhdmljX2FkZF92Y3B1X3RvX2dhcHBpX3dha2V1cF9saXN0YCwgYGF2aWNfcmVtb3ZlX3ZjcHVfZnJvbV9nYXBwaV93YWtldXBfbGlzdGAsIGBhdmljX2dhcHBpX3dha2V1cF9oYW5kbGVyYCwgYF9fYW1kX2lvbW11X3VwZGF0ZV9nYWAsIGBhbWRfaW9tbXVfdXBkYXRlX2dhYCwgYW5kIGBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZWAuIEkmIzM5O20gYWxzbyBnb2luZyB0byBhZGQgYSBmZXcgbW9yZSB0byB0aGUgbGlzdCB0aGF0IEkmIzM5O3ZlIGZvdW5kIHdoaWxlIGxvb2tpbmcgb3ZlciB0aGUgY29kZTogYGF2aWNfaW5pdF92Y3B1YCwgYGF2aWNfZGVzdHJveV92Y3B1YCwgYGF2aWNfcGlfdXBkYXRlX2lydGVgIGFuZCBgYXZpY191cGRhdGVfaW9tbXVfdmNwdV9hZmZpbml0eWAuIEkmIzM5O2xsIHdhbnQgdG8gaW5jbHVkZSBhbGwgb2YgdGhlc2U6IGBhdmljX2FkZF92Y3B1X3RvX2dhcHBpX3dha2V1cF9saXN0YCwgYGF2aWNfcmVtb3ZlX3ZjcHVfZnJvbV9nYXBwaV93YWtldXBfbGlzdGAsIGBhdmljX2dhcHBpX3dha2V1cF9oYW5kbGVyYCwgYGF2aWNfcGlfdXBkYXRlX2lydGVgLCBgYXZpY191cGRhdGVfaW9tbXVfdmNwdV9hZmZpbml0eWAsIGBfX2FtZF9pb21tdV91cGRhdGVfZ2FgLCBgYW1kX2lvbW11X3VwZGF0ZV9nYWAsIGFuZCBgYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGVgLgoKTmV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hpY2ggb2YgdGhlc2UgZnVuY3Rpb25zIGFyZSAmIzM0O2hvdCBwYXRoJiMzNDsg4oCTIHdoaWNoIG9uZXMgYXJlIGNhbGxlZCBmcmVxdWVudGx5IGFuZCBhcmUgdGhlcmVmb3JlIGxpa2VseSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcy4gTG9va2luZyBhdCBgYXZpY191cGRhdGVfaW9tbXVfdmNwdV9hZmZpbml0eWAsIEkgc2VlIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGBfX2F2aWNfdmNwdV9sb2FkYCBhbmQgYF9fYXZpY192Y3B1X3B1dGAsIHdoaWNoIGFyZSBpbnZvbHZlZCB3aGVuIGEgdkNQVSBpcyBzY2hlZHVsZWQgaW4gb3Igb3V0LiBUaGlzIGlzIHNvbWV3aGF0IGhvdCwgYnV0IG5vdCBhcyBob3QgYXMsIHNheSwgVk0tZXhpdCBoYW5kbGVycy4gYGF2aWNfcGlfdXBkYXRlX2lydGVgIHVwZGF0ZXMgdGhlIElSVEUsIGJ1dCBpdCYjMzk7cyBub3QgaG90LCBub3QgY2FsbGVkIGNvbnN0YW50bHkuIGBhdmljX2dhcHBpX3dha2V1cF9oYW5kbGVyYCBpcyB0cmlnZ2VyZWQgYnkgcG9zdGVkIGludGVycnVwdCB3YWtldXBzLiBgX19hbWRfaW9tbXVfdXBkYXRlX2dhYCBpcyBjYWxsZWQgZnJvbSBgYW1kX2lvbW11X3VwZGF0ZV9nYWAgYW5kIGBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZWAsIGFuZCB0aGVzZSB0d28gYXJlIGdvaW5nIHRvIGJlIGltcG9ydGFudCB0byBsb29rIGF0LiBTbyBteSByZXZpc2VkIGxpc3Qgb2YgZnVuY3Rpb25zIHRvIGZvY3VzIG9uIGxvb2tzIGxpa2UgdGhpczoKCiogICBgYXZpY19hZGRfdmNwdV90b19nYXBwaV93YWtldXBfbGlzdGAKKiAgIGBhdmljX3JlbW92ZV92Y3B1X2Zyb21fZ2FwcGlfd2FrZXVwX2xpc3RgCiogICBgYXZpY19nYXBwaV93YWtldXBfaGFuZGxlcmAKKiAgIGBhdmljX3BpX3VwZGF0ZV9pcnRlYAoqICAgYGF2aWNfdXBkYXRlX2lvbW11X3ZjcHVfYWZmaW5pdHlgCiogICBgX19hbWRfaW9tbXVfdXBkYXRlX2dhYAoqICAgYGFtZF9pb21tdV91cGRhdGVfZ2FgCiogICBgYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGVgCgpOb3csIGp1c3QgdG8gYmUgdGhvcm91Z2gsIEkmIzM5O2xsIHF1aWNrbHkgdmVyaWZ5IHRoYXQgdGhlc2UgZnVuY3Rpb25zIGRvIGluZGVlZCBleGlzdCBhbmQgdGhhdCBJJiMzOTt2ZSBnb3QgdGhlIG5hbWVzIHNwZWxsZWQgY29ycmVjdGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxMzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsoYXZpY19hZGRfdmNwdV90b19nYXBwaV93YWtldXBfbGlzdHxhdmljX3JlbW92ZV92Y3B1X2Zyb21fZ2FwcGlfd2FrZXVwX2xpc3R8YXZpY19nYXBwaV93YWtldXBfaGFuZGxlcnxhdmljX3BpX3VwZGF0ZV9pcnRlfGF2aWNfdXBkYXRlX2lvbW11X3ZjcHVfYWZmaW5pdHl8X19hbWRfaW9tbXVfdXBkYXRlX2dhfGFtZF9pb21tdV91cGRhdGVfZ2F8YW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUpJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vYXZpYy5jPTg3Mj1pbnQgYXZpY19pbml0X3ZjcHUoc3RydWN0IHZjcHVfc3ZtICpzdm0pXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtODk0LVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6ODk1OnN0YXRpYyB2b2lkIGF2aWNfYWRkX3ZjcHVfdG9fZ2FwcGlfd2FrZXVwX2xpc3Qoc3RydWN0IHZjcHVfc3ZtICpzdm0sIGludCBjcHUpXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy04OTYte1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTkwOS1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjkxMDpzdGF0aWMgdm9pZCBhdmljX3JlbW92ZV92Y3B1X2Zyb21fZ2FwcGlfd2FrZXVwX2xpc3Qoc3RydWN0IHZjcHVfc3ZtICpzdm0sIGludCBjcHUpXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy05MTEte1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jPTkyMz12b2lkIGF2aWNfZGVzdHJveV92Y3B1KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTkyNS1cdGlmIChzdm0tXHUwMDNlZ2FwcGlfY3B1ICE9IC0xIFx1MDAyNlx1MDAyNiBhbWRfaW9tbXVfZ2FwcGkpIHtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjkyNjpcdFx0YXZpY19yZW1vdmVfdmNwdV9mcm9tX2dhcHBpX3dha2V1cF9saXN0KHN2bSwgc3ZtLVx1MDAzZWdhcHBpX2NwdSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy05MjctXHRcdHN2bS1cdTAwM2VnYXBwaV9jcHUgPSAtMTtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYz05Mzc9c3RhdGljIHZvaWQgc3ZtX2lyX2xpc3RfZGVsKHN0cnVjdCBrdm1fa2VybmVsX2lycWZkICppcnFmZClcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy05NTAtXHRpZiAoYW1kX2lvbW11X2dhcHBpIFx1MDAyNlx1MDAyNiBsaXN0X2VtcHR5KFx1MDAyNnN2bS1cdTAwM2Vpcl9saXN0KSlcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjk1MTpcdFx0YXZpY19yZW1vdmVfdmNwdV9mcm9tX2dhcHBpX3dha2V1cF9saXN0KHN2bSwgc3ZtLVx1MDAzZWdhcHBpX2NwdSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy05NTItXHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZzdm0tXHUwMDNlaXJfbGlzdF9sb2NrLCBmbGFncyk7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtOTU0LVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6OTU1OmludCBhdmljX3BpX3VwZGF0ZV9pcnRlKHN0cnVjdCBrdm1fa2VybmVsX2lycWZkICppcnFmZCwgc3RydWN0IGt2bSAqa3ZtLFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtOTU2LVx0XHRcdHVuc2lnbmVkIGludCBob3N0X2lycSwgdWludDMyX3QgZ3Vlc3RfaXJxLFxuLS1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTEwMTMtXHRcdFx0XHRpZiAobGlzdF9lbXB0eShcdTAwMjZzdm0tXHUwMDNlaXJfbGlzdCkpIHtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjEwMTQ6XHRcdFx0XHRcdGF2aWNfYWRkX3ZjcHVfdG9fZ2FwcGlfd2FrZXVwX2xpc3Qoc3ZtLCBzdm0tXHUwMDNlZ2FwcGlfY3B1KTtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTEwMTUtXHRcdFx0XHRcdGlzX3ZjcHVfd2FpdGluZyA9IHRydWU7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMTAzOS1cdFx0aWYgKGlzX3ZjcHVfd2FpdGluZylcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjEwNDA6XHRcdFx0YXZpY19yZW1vdmVfdmNwdV9mcm9tX2dhcHBpX3dha2V1cF9saXN0KHN2bSwgc3ZtLVx1MDAzZWdhcHBpX2NwdSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMDQxLVx0XHRyZXR1cm4gcmV0O1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jPTEwNDY9ZW51bSBhdmljX3ZjcHVfYWN0aW9uIHtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMDczLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MTA3NDpzdGF0aWMgdm9pZCBhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGFwaWNpZCxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTEwNzUtXHRcdFx0XHRcdCAgICBpbnQgY3B1LCBlbnVtIGF2aWNfdmNwdV9hY3Rpb24gYWN0aW9uKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTEwOTktXHRcdFx0ICovXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzoxMTAwOlx0XHRcdGF2aWNfcmVtb3ZlX3ZjcHVfZnJvbV9nYXBwaV93YWtldXBfbGlzdChzdm0sIHN2bS1cdTAwM2VnYXBwaV9jcHUpO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMTEwMS1cbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMTA0LVx0XHRhcGljaWQgPSBrdm1fY3B1X2dldF9hcGljaWQoc3ZtLVx1MDAzZWdhcHBpX2NwdSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzoxMTA1Olx0XHRhdmljX2FkZF92Y3B1X3RvX2dhcHBpX3dha2V1cF9saXN0KHN2bSwgc3ZtLVx1MDAzZWdhcHBpX2NwdSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMTA2LVx0fVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTExMTEtXHRcdGlmICghKGFjdGlvbiBcdTAwMjYgQVZJQ19UT0dHTEVfT05fT0ZGKSlcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjExMTI6XHRcdFx0V0FSTl9PTl9PTkNFKGFtZF9pb21tdV91cGRhdGVfZ2EoZGF0YSwgYXBpY2lkLCB3YWtldXBfaW50ciwgaXNfcnVubmluZykpO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMTExMy1cdFx0ZWxzZSBpZiAoaXNfcnVubmluZylcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjExMTQ6XHRcdFx0V0FSTl9PTl9PTkNFKGFtZF9pb21tdV9hY3RpdmF0ZV9ndWVzdF9tb2RlKGRhdGEsIGFwaWNpZCwgd2FrZXVwX2ludHIsXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMTE1LVx0XHRcdFx0XHRcdFx0XHQgICBpc19ydW5uaW5nKSk7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM9MTEyMT1zdGF0aWMgdm9pZCBfX2F2aWNfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSxcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMTY4LVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MTE2OTpcdGF2aWNfdXBkYXRlX2lvbW11X3ZjcHVfYWZmaW5pdHkodmNwdSwgaF9waHlzaWNhbF9pZCwgY3B1LCBhY3Rpb24pO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMTE3MC1cbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYz0xMTg5PXN0YXRpYyB2b2lkIF9fYXZpY192Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGVudW0gYXZpY192Y3B1X2FjdGlvbiBhY3Rpb24pXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMTIxMS1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjEyMTI6XHRhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5KHZjcHUsIC0xLCAtMSwgYWN0aW9uKTtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTEyMTMtXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM9MTM0ND1zdGF0aWMgYm9vbCBfX2luaXQgYXZpY193YW50X2F2aWNfZW5hYmxlZCh2b2lkKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTEzODQtXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzoxMzg1OnN0YXRpYyB2b2lkIGF2aWNfZ2FwcGlfd2FrZXVwX2hhbmRsZXIodm9pZClcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTEzODYte1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jPTE0MDY9Ym9vbCBfX2luaXQgYXZpY19oYXJkd2FyZV9zZXR1cCh2b2lkKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTE0NDItXHRhbWRfaW9tbXVfcmVnaXN0ZXJfZ2FfbG9nX25vdGlmaWVyKFx1MDAyNmF2aWNfZ2FfbG9nX25vdGlmaWVyKTtcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjE0NDM6XHRrdm1fc2V0X3Bvc3RlZF9pbnRyX3dha2V1cF9oYW5kbGVyKFx1MDAyNmF2aWNfZ2FwcGlfd2FrZXVwX2hhbmRsZXIpO1xuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMTQ0NC1cbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTUyNzI9c3RydWN0IGt2bV94ODZfb3BzIHN2bV94ODZfb3BzIF9faW5pdGRhdGEgPSB7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01Mzc3LVx0LmRlbGl2ZXJfaW50ZXJydXB0ID0gc3ZtX2RlbGl2ZXJfaW50ZXJydXB0LFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo1Mzc4Olx0LnBpX3VwZGF0ZV9pcnRlID0gYXZpY19waV91cGRhdGVfaXJ0ZSxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtNTM3OS1cdC5zZXR1cF9tY2UgPSBzdm1fc2V0dXBfbWNlLFxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg9OTIwPXZvaWQgYXZpY19yZWZyZXNoX2FwaWN2X2V4ZWNfY3RybChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDo5MjE6aW50IGF2aWNfcGlfdXBkYXRlX2lydGUoc3RydWN0IGt2bV9rZXJuZWxfaXJxZmQgKmlycWZkLCBzdHJ1Y3Qga3ZtICprdm0sXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTkyMi1cdFx0XHR1bnNpZ25lZCBpbnQgaG9zdF9pcnEsIHVpbnQzMl90IGd1ZXN0X2lycSxcbi0tXG5kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jPTM5NTQ9c3RhdGljIGNvbnN0IHN0cnVjdCBpcnFfZG9tYWluX29wcyBhbWRfaXJfZG9tYWluX29wcyA9IHtcbi0tXG5kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jLTM5NjEtXG5kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jOjM5NjI6c3RhdGljIHZvaWQgX19hbWRfaW9tbXVfdXBkYXRlX2dhKHN0cnVjdCBpcnRlX2dhICplbnRyeSwgaW50IGFwaWNpZCxcbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmMtMzk2My1cdFx0XHRcdCAgYm9vbCB3YWtldXBfaW50ciwgYm9vbCBpc19ydW5uaW5nKVxuLS1cbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmMtNDAwNC0gKi9cbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmM6NDAwNTppbnQgYW1kX2lvbW11X3VwZGF0ZV9nYSh2b2lkICpkYXRhLCBpbnQgYXBpY2lkLCBib29sIHdha2V1cF9pbnRyLCBib29sIGlzX3J1bm5pbmcpXG5kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jLTQwMDYte1xuLS1cbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmMtNDAxOC1cbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmM6NDAxOTpcdF9fYW1kX2lvbW11X3VwZGF0ZV9nYShlbnRyeSwgYXBpY2lkLCB3YWtldXBfaW50ciwgaXNfcnVubmluZyk7XG5kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jLTQwMjAtXG4tLVxuZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuYy00MDIzLX1cbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmM6NDAyNDpFWFBPUlRfU1lNQk9MKGFtZF9pb21tdV91cGRhdGVfZ2EpO1xuZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuYy00MDI1LVxuZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuYzo0MDI2OmludCBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZSh2b2lkICpkYXRhLCBpbnQgYXBpY2lkLCBib29sIHdha2V1cF9pbnRyLCBib29sIGlzX3J1bm5pbmcpXG5kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jLTQwMjcte1xuLS1cbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmMtNDA0OC1cbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmM6NDA0OTpcdF9fYW1kX2lvbW11X3VwZGF0ZV9nYShlbnRyeSwgYXBpY2lkLCB3YWtldXBfaW50ciwgaXNfcnVubmluZyk7XG5kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jLTQwNTAtXG4tLVxuZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuYy00MDUzLX1cbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmM6NDA1NDpFWFBPUlRfU1lNQk9MKGFtZF9pb21tdV9hY3RpdmF0ZV9ndWVzdF9tb2RlKTtcbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmMtNDA1NS1cbi0tXG5kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jPTQwODg9c3RhdGljIGludCBhbWRfaXJfc2V0X3ZjcHVfYWZmaW5pdHkoc3RydWN0IGlycV9kYXRhICpkYXRhLCB2b2lkICppbmZvKVxuLS1cbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmMtNDExOS1cdFx0aWYgKHBpX2RhdGEtXHUwMDNlaXNfZ3Vlc3RfbW9kZSlcbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmM6NDEyMDpcdFx0XHRyZXQgPSBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZShpcl9kYXRhLCBwaV9kYXRhLVx1MDAzZWFwaWNpZCxcbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmMtNDEyMS1cdFx0XHRcdFx0XHRcdCAgICBwaV9kYXRhLVx1MDAzZXdha2V1cF9pbnRyLFxuLS1cbmluY2x1ZGUvbGludXgvYW1kLWlvbW11Lmg9MzE9ZXh0ZXJuIGludCBhbWRfaW9tbXVfcmVnaXN0ZXJfZ2FfbG9nX25vdGlmaWVyKGludCAoKm5vdGlmaWVyKSh1MzIpKTtcbmluY2x1ZGUvbGludXgvYW1kLWlvbW11LmgtMzItXG5pbmNsdWRlL2xpbnV4L2FtZC1pb21tdS5oOjMzOmV4dGVybiBpbnQgYW1kX2lvbW11X3VwZGF0ZV9nYSh2b2lkICpkYXRhLCBpbnQgYXBpY2lkLCBib29sIHdha2V1cF9pbnRyLFxuaW5jbHVkZS9saW51eC9hbWQtaW9tbXUuaC0zNC1cdFx0XHQgICAgICAgYm9vbCBpc19ydW5uaW5nKTtcbmluY2x1ZGUvbGludXgvYW1kLWlvbW11Lmg6MzU6ZXh0ZXJuIGludCBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZSh2b2lkICpkYXRhLCBpbnQgYXBpY2lkLCBib29sIHdha2V1cF9pbnRyLFxuaW5jbHVkZS9saW51eC9hbWQtaW9tbXUuaC0zNi1cdFx0XHRcdFx0IGJvb2wgaXNfcnVubmluZyk7XG4tLVxuaW5jbHVkZS9saW51eC9hbWQtaW9tbXUuaD00Mj1hbWRfaW9tbXVfcmVnaXN0ZXJfZ2FfbG9nX25vdGlmaWVyKGludCAoKm5vdGlmaWVyKSh1MzIpKVxuLS1cbmluY2x1ZGUvbGludXgvYW1kLWlvbW11LmgtNDYtXG5pbmNsdWRlL2xpbnV4L2FtZC1pb21tdS5oOjQ3OnN0YXRpYyBpbmxpbmUgaW50IGFtZF9pb21tdV91cGRhdGVfZ2Eodm9pZCAqZGF0YSwgaW50IGFwaWNpZCwgYm9vbCB3YWtldXBfaW50cixcbmluY2x1ZGUvbGludXgvYW1kLWlvbW11LmgtNDgtXHRcdFx0XHQgICAgICBib29sIGlzX3J1bm5pbmcpXG4tLVxuaW5jbHVkZS9saW51eC9hbWQtaW9tbXUuaC01Mi1cbmluY2x1ZGUvbGludXgvYW1kLWlvbW11Lmg6NTM6c3RhdGljIGlubGluZSBpbnQgYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUodm9pZCAqZGF0YSwgaW50IGFwaWNpZCwgYm9vbCB3YWtldXBfaW50cixcbmluY2x1ZGUvbGludXgvYW1kLWlvbW11LmgtNTQtXHRcdFx0XHRcdFx0Ym9vbCBpc19ydW5uaW5nKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxMzozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjYzMwoJCQkJCQkJb3V0cHV0OiAyMjYKCQkJCQkJCXRob3VnaHRzOiAyMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgR0FQUEkgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgcmV2aWV3ZWQgdGhpcyBwYXRjaCBhbmQgSSYjMzk7bSBzZWVpbmcgaXQmIzM5O3MgZm9jdXNlZCBvbiBpbnRyb2R1Y2luZyBHQVBQSSAoR3Vlc3QgQVBJQyBQb3N0ZWQgSW50ZXJydXB0cykgc3VwcG9ydCBmb3IgQU1EIElPTU1VIGFuZCBLVk0gU1ZNIEFWSUMsIHdoaWNoIGlzIHByZWNpc2VseSB0aGUga2luZCBvZiBsb3ctbGV2ZWwgdmlydHVhbGl6YXRpb24gY2hhbmdlIHRoYXQgZGVtYW5kcyBjbG9zZSBzY3J1dGlueS4gSSBzZWUgdGhlIGZ1bmN0aW9uIG5hbWVzIGFyZSBhbGwgY29ycmVjdGx5IGZvcm1hdHRlZC4gRXhjZWxsZW50LgoKU3BlY2lmaWNhbGx5LCBJ4oCZbGwgbmVlZCB0byBtYWtlIHN1cmUgdG8gaW5jbHVkZSB0aGVzZSBmdW5jdGlvbnMgaW4gbXkgdGVzdGluZyBzdWl0ZTogYGF2aWNfYWRkX3ZjcHVfdG9fZ2FwcGlfd2FrZXVwX2xpc3RgLCBgYXZpY19yZW1vdmVfdmNwdV9mcm9tX2dhcHBpX3dha2V1cF9saXN0YCwgYGF2aWNfZ2FwcGlfd2FrZXVwX2hhbmRsZXJgLCBgYXZpY19waV91cGRhdGVfaXJ0ZWAsIGBhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5YCwgYF9fYW1kX2lvbW11X3VwZGF0ZV9nYWAsIGBhbWRfaW9tbXVfdXBkYXRlX2dhYCwgYW5kIGBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZWAuIFRoZXNlIGFwcGVhciB0byBiZSB0aGUgY29yZSByb3V0aW5lcyBpbnZvbHZlZCBpbiBtYW5hZ2luZyB0aGUgR0FQUEkgd2FrZXVwIGxpc3QgYW5kIHVwZGF0aW5nIHRoZSBJUlRFcywgd2hpY2ggd2lsbCBiZSBjcml0aWNhbCB0byB0aGUgaW50ZWdyaXR5IG9mIHRoaXMgaW1wbGVtZW50YXRpb24uCgpPbiB0aGUgY29uZmlndXJhdGlvbiBmcm9udCwgSSBzZWUgdGhlIHBhdGNoIGxldmVyYWdlcyBgS1ZNX0FNRGAsIGBBTURfSU9NTVVgLCBhbmQgYElSUV9SRU1BUGAsIHdoaWNoIEkgY2FuIG5vdyB2ZXJpZnkgYXJlIGluY2x1ZGVkIGluIG15IGN1cnJlbnQgdGVzdGluZyBlbnZpcm9ubWVudC4KClRoZSByZWFzb25pbmcgcHJvdmlkZWQgY29ycmVjdGx5IGlkZW50aWZpZXMgdGhpcyBhcyBhIHNpZ25pZmljYW50IGNoYW5nZSBhZmZlY3RpbmcgaG93IHBvc3RlZCBpbnRlcnJ1cHRzIGFyZSBoYW5kbGVkIGFuZCBob3cgdGhlIEtWTSBjb3JlIHZpcnR1YWxpemVzIGd1ZXN0IEFQSUNzLiBUaGUgSVJURSBtb2RpZmljYXRpb24gYXNwZWN0IGlzIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZyBhbmQgYSBwb3RlbnRpYWwgc291cmNlIG9mIHN1YnRsZSBidWdzLiBHaXZlbiB0aGUgZnVuZGFtZW50YWwgbmF0dXJlIG9mIHRoZXNlIGNoYW5nZXMsIHRoaXMgaXMgYWJzb2x1dGVseSBhIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gSW4gZmFjdCwgdGhpcyBwYXRjaCBpcyBnb2luZyB0byByZXF1aXJlIHF1aXRlIGEgYml0IG9mIHdvcmssIHNvIGxldCYjMzk7cyBjYWxsIHNldC1yZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxMzozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7LAogICAgJiMzNDtBTURfSU9NTVUmIzM0OywKICAgICYjMzQ7SVJRX1JFTUFQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YXZpY19hZGRfdmNwdV90b19nYXBwaV93YWtldXBfbGlzdCYjMzQ7LAogICAgJiMzNDthdmljX3JlbW92ZV92Y3B1X2Zyb21fZ2FwcGlfd2FrZXVwX2xpc3QmIzM0OywKICAgICYjMzQ7YXZpY19nYXBwaV93YWtldXBfaGFuZGxlciYjMzQ7LAogICAgJiMzNDthdmljX3BpX3VwZGF0ZV9pcnRlJiMzNDssCiAgICAmIzM0O2F2aWNfdXBkYXRlX2lvbW11X3ZjcHVfYWZmaW5pdHkmIzM0OywKICAgICYjMzQ7X19hbWRfaW9tbXVfdXBkYXRlX2dhJiMzNDssCiAgICAmIzM0O2FtZF9pb21tdV91cGRhdGVfZ2EmIzM0OywKICAgICYjMzQ7YW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBHQVBQSSAoR3Vlc3QgQVBJQyBQb3N0ZWQgSW50ZXJydXB0cykgc3VwcG9ydCBmb3IgQU1EIElPTU1VIGFuZCBLVk0gU1ZNIEFWSUMuIEl0IG1vZGlmaWVzIHRoZSBJUlRFIGNvbmZpZ3VyYXRpb24gZm9yIHBvc3RlZCBpbnRlcnJ1cHRzIGFuZCBpbnRyb2R1Y2VzIGEgbmV3IHdha2V1cCBsaXN0IGZvciBHQVBQSSBpbiBLVk0uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIHZpcnR1YWxpemF0aW9uIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk1fQU1EJiMzNDssCiAgICAmIzM0O0FNRF9JT01NVSYjMzQ7LAogICAgJiMzNDtJUlFfUkVNQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthdmljX2FkZF92Y3B1X3RvX2dhcHBpX3dha2V1cF9saXN0JiMzNDssCiAgICAmIzM0O2F2aWNfcmVtb3ZlX3ZjcHVfZnJvbV9nYXBwaV93YWtldXBfbGlzdCYjMzQ7LAogICAgJiMzNDthdmljX2dhcHBpX3dha2V1cF9oYW5kbGVyJiMzNDssCiAgICAmIzM0O2F2aWNfcGlfdXBkYXRlX2lydGUmIzM0OywKICAgICYjMzQ7YXZpY191cGRhdGVfaW9tbXVfdmNwdV9hZmZpbml0eSYjMzQ7LAogICAgJiMzNDtfX2FtZF9pb21tdV91cGRhdGVfZ2EmIzM0OywKICAgICYjMzQ7YW1kX2lvbW11X3VwZGF0ZV9nYSYjMzQ7LAogICAgJiMzNDthbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIEdBUFBJIChHdWVzdCBBUElDIFBvc3RlZCBJbnRlcnJ1cHRzKSBzdXBwb3J0IGZvciBBTUQgSU9NTVUgYW5kIEtWTSBTVk0gQVZJQy4gSXQgbW9kaWZpZXMgdGhlIElSVEUgY29uZmlndXJhdGlvbiBmb3IgcG9zdGVkIGludGVycnVwdHMgYW5kIGludHJvZHVjZXMgYSBuZXcgd2FrZXVwIGxpc3QgZm9yIEdBUFBJIGluIEtWTS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgdmlydHVhbGl6YXRpb24gbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxMzozNjoyMy45NjE1MjczMDRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjM0MDkxMjE5MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNX0FNRFwiLFxuICAgIFwiQU1EX0lPTU1VXCIsXG4gICAgXCJJUlFfUkVNQVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhdmljX2FkZF92Y3B1X3RvX2dhcHBpX3dha2V1cF9saXN0XCIsXG4gICAgXCJhdmljX3JlbW92ZV92Y3B1X2Zyb21fZ2FwcGlfd2FrZXVwX2xpc3RcIixcbiAgICBcImF2aWNfZ2FwcGlfd2FrZXVwX2hhbmRsZXJcIixcbiAgICBcImF2aWNfcGlfdXBkYXRlX2lydGVcIixcbiAgICBcImF2aWNfdXBkYXRlX2lvbW11X3ZjcHVfYWZmaW5pdHlcIixcbiAgICBcIl9fYW1kX2lvbW11X3VwZGF0ZV9nYVwiLFxuICAgIFwiYW1kX2lvbW11X3VwZGF0ZV9nYVwiLFxuICAgIFwiYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIEdBUFBJIChHdWVzdCBBUElDIFBvc3RlZCBJbnRlcnJ1cHRzKSBzdXBwb3J0IGZvciBBTUQgSU9NTVUgYW5kIEtWTSBTVk0gQVZJQy4gSXQgbW9kaWZpZXMgdGhlIElSVEUgY29uZmlndXJhdGlvbiBmb3IgcG9zdGVkIGludGVycnVwdHMgYW5kIGludHJvZHVjZXMgYSBuZXcgd2FrZXVwIGxpc3QgZm9yIEdBUFBJIGluIEtWTS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgdmlydHVhbGl6YXRpb24gbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDEzOjM2OjIzLjk2MTU0NjMwNFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODEwOTMyODUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYzAwYzVhY2RkNDJiNDBkYjIwZjQxYzAxOWY5OTE2ODk1NjM4MGUxZVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1bCAxMyAxMzozNjoyMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0XFxuaW5kZXggOTcwMDdmNGY2OWQ0ZTguLmQyN2YxMGNiYjAwNGNjIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHRcXG5AQCAtNDU1LDcgKzQ1NSw4IEBAIEtlcm5lbCBwYXJhbWV0ZXJzXFxuIFxcdFxcdFxcdFxcdCAgICAgICAgICB0byA0IEtpQi5cXG4gXFx0XFx0XFx0djJfcGdzaXplc19vbmx5IC0gTGltaXQgcGFnZS1zaXplcyB1c2VkIGZvciB2MSBwYWdlLXRhYmxlc1xcbiBcXHRcXHRcXHRcXHQgICAgICAgICAgdG8gNEtpQi8yTWliLzFHaUIuXFxuLVxcbitcXHRcXHRcXHRnYXBwaVxcdFxcdC0gVXNlIEdBUFBJIGluc3RlYWQgb2YgR0FMT0cgZm9yIHZDUFVcXG4rXFx0XFx0XFx0XFx0XFx0ICB3YWtldXAgbm90aWZpY2F0aW9uLlxcbiBcXG4gXFx0YW1kX2lvbW11X2R1bXA9XFx0W0hXLFg4Ni02NF1cXG4gXFx0XFx0XFx0RW5hYmxlIEFNRCBJT01NVSBkcml2ZXIgb3B0aW9uIHRvIGR1bXAgdGhlIEFDUEkgdGFibGVcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaXJxX3JlbWFwcGluZy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaXJxX3JlbWFwcGluZy5oXFxuaW5kZXggMzdiOTRmNDg0ZWYzMzguLmFmMGNkZmEzMmM0NDdmIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lycV9yZW1hcHBpbmcuaFxcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lycV9yZW1hcHBpbmcuaFxcbkBAIC0zNSw4ICszNSw5IEBAIHN0cnVjdCBhbWRfaW9tbXVfcGlfZGF0YSB7XFxuIFxcdHU2NCB2YXBpY19hZGRyO1xcdFxcdC8qIFBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIHZDUFUncyB2QVBJQy4gKi9cXG4gXFx0dTMyIGdhX3RhZztcXG4gXFx0dTMyIHZlY3RvcjtcXHRcXHQvKiBHdWVzdCB2ZWN0b3Igb2YgdGhlIGludGVycnVwdCAqL1xcbi1cXHRpbnQgY3B1O1xcbi1cXHRib29sIGdhX2xvZ19pbnRyO1xcbitcXHRpbnQgYXBpY2lkO1xcbitcXHRib29sIHdha2V1cF9pbnRyO1xcbitcXHRib29sIGlzX3J1bm5pbmc7XFxuIFxcdGJvb2wgaXNfZ3Vlc3RfbW9kZTtcXG4gXFx0dm9pZCAqaXJfZGF0YTtcXG4gfTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaFxcbmluZGV4IGJjZmViNWU3YzBlZGYyLi5hZGQ4YjcyNzRjYzJmOCAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaFxcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oXFxuQEAgLTI1OSwxMSArMjU5LDEyIEBAIHN0cnVjdCBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpIHZtY2JfY29udHJvbF9hcmVhIHtcXG4gI2RlZmluZSBBVklDX0xPR0lDQUxfSURfRU5UUllfVkFMSURfTUFTS1xcdFxcdCgxIFxcdTAwM2NcXHUwMDNjIDMxKVxcbiBcXG4gLypcXG4tICogR0FfTE9HX0lOVFIgaXMgYSBzeW50aGV0aWMgZmxhZyB0aGF0J3MgbmV2ZXIgcHJvcGFnYXRlZCB0byBoYXJkd2FyZS12aXNpYmxlXFxuLSAqIHRhYmxlcy4gIEdBX0xPR19JTlRSIGlzIHNldCBpZiB0aGUgdkNQVSBuZWVkcyBkZXZpY2UgcG9zdGVkIElSUXMgdG8gZ2VuZXJhdGVcXG4tICogR0EgbG9nIGludGVycnVwdHMgdG8gd2FrZSB0aGUgdkNQVSAoYmVjYXVzZSBpdCdzIGJsb2NraW5nIG9yIGFib3V0IHRvIGJsb2NrKS5cXG4rICogV0FLRVVQX0lOVFIgaXMgYSBzeW50aGV0aWMgZmxhZyB0aGF0J3MgbmV2ZXIgcHJvcGFnYXRlZCB0byBoYXJkd2FyZS12aXNpYmxlXFxuKyAqIHRhYmxlcy4gIFdBS0VVUF9JTlRSIGlzIHNldCBpZiB0aGUgdkNQVSBuZWVkcyBkZXZpY2UgcG9zdGVkIElSUXMgdG8gZ2VuZXJhdGVcXG4rICogR0EgbG9nL0dBUFBJIGludGVycnVwdHMgdG8gd2FrZSB0aGUgdkNQVSAoYmVjYXVzZSBpdCdzIGJsb2NraW5nIG9yIGFib3V0IHRvXFxuKyAqIGJsb2NrKS5cXG4gICovXFxuLSNkZWZpbmUgQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9HQV9MT0dfSU5UUlxcdFxcdEJJVF9VTEwoNjEpXFxuKyNkZWZpbmUgQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9XQUtFVVBfSU5UUlxcdFxcdEJJVF9VTEwoNjEpXFxuIFxcbiAjZGVmaW5lIEFWSUNfUEhZU0lDQUxfSURfRU5UUllfSE9TVF9QSFlTSUNBTF9JRF9NQVNLXFx0R0VOTUFTS19VTEwoMTEsIDApXFxuICNkZWZpbmUgQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9CQUNLSU5HX1BBR0VfTUFTS1xcdEdFTk1BU0tfVUxMKDUxLCAxMilcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9hdmljLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuY1xcbmluZGV4IGNkZDVhNmRjNjQ2ZjExLi45ODJhNTk4ODUzMmZmNCAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuY1xcbisrKyBiL2FyY2gveDg2L2t2bS9zdm0vYXZpYy5jXFxuQEAgLTYzLDYgKzYzLDkgQEBcXG4gXFx0Z2FfdGFnO1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gfSlcXG4gXFxuK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgbGlzdF9oZWFkLCBnYXBwaV92Y3B1X3dha2V1cF9saXN0KTtcXG4rc3RhdGljIERFRklORV9QRVJfQ1BVKHJhd19zcGlubG9ja190LCBnYXBwaV92Y3B1X3dha2V1cF9saXN0X2xvY2spO1xcbitcXG4gc3RhdGljX2Fzc2VydChfX0FWSUNfR0FUQUcoQVZJQ19WTV9JRF9NQVNLLCBBVklDX1ZDUFVfSURYX01BU0spID09IC0xdSk7XFxuIFxcbiAjZGVmaW5lIEFWSUNfQVVUT19NT0RFIC0xXFxuQEAgLTg3NCw2ICs4NzcsOSBAQCBpbnQgYXZpY19pbml0X3ZjcHUoc3RydWN0IHZjcHVfc3ZtICpzdm0pXFxuIFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZzdm0tXFx1MDAzZWlyX2xpc3QpO1xcbiBcXHRyYXdfc3Bpbl9sb2NrX2luaXQoXFx1MDAyNnN2bS1cXHUwMDNlaXJfbGlzdF9sb2NrKTtcXG4gXFxuK1xcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZzdm0tXFx1MDAzZWdhcHBpX3ZjcHVfd2FrZXVwX2xpc3QpO1xcbitcXHRzdm0tXFx1MDAzZWdhcHBpX2NwdSA9IC0xO1xcbitcXG4gXFx0aWYgKCFlbmFibGVfYXBpY3YgfHwgIWlycWNoaXBfaW5fa2VybmVsKHZjcHUtXFx1MDAzZWt2bSkpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG5AQCAtODg2LDYgKzg5Miw0MiBAQCBpbnQgYXZpY19pbml0X3ZjcHUoc3RydWN0IHZjcHVfc3ZtICpzdm0pXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIGF2aWNfYWRkX3ZjcHVfdG9fZ2FwcGlfd2FrZXVwX2xpc3Qoc3RydWN0IHZjcHVfc3ZtICpzdm0sIGludCBjcHUpXFxuK3tcXG4rXFx0c3RydWN0IGxpc3RfaGVhZCAqd2FrZXVwX2xpc3Q7XFxuK1xcdHJhd19zcGlubG9ja190ICpzcGlubG9jaztcXG4rXFxuK1xcdGlmIChXQVJOX09OKHVubGlrZWx5KGNwdSBcXHUwMDNjIDApKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0d2FrZXVwX2xpc3QgPSBcXHUwMDI2cGVyX2NwdShnYXBwaV92Y3B1X3dha2V1cF9saXN0LCBjcHUpO1xcbitcXHRzcGlubG9jayA9IFxcdTAwMjZwZXJfY3B1KGdhcHBpX3ZjcHVfd2FrZXVwX2xpc3RfbG9jaywgY3B1KTtcXG4rXFx0Z3VhcmQocmF3X3NwaW5sb2NrX2lycXNhdmUpKHNwaW5sb2NrKTtcXG4rXFx0aWYgKGxpc3RfZW1wdHkoXFx1MDAyNnN2bS1cXHUwMDNlZ2FwcGlfdmNwdV93YWtldXBfbGlzdCkpXFxuK1xcdFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNnN2bS1cXHUwMDNlZ2FwcGlfdmNwdV93YWtldXBfbGlzdCwgd2FrZXVwX2xpc3QpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBhdmljX3JlbW92ZV92Y3B1X2Zyb21fZ2FwcGlfd2FrZXVwX2xpc3Qoc3RydWN0IHZjcHVfc3ZtICpzdm0sIGludCBjcHUpXFxuK3tcXG4rXFx0cmF3X3NwaW5sb2NrX3QgKnNwaW5sb2NrO1xcbitcXG4rXFx0aWYgKFdBUk5fT04odW5saWtlbHkoY3B1IFxcdTAwM2MgMCkpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRzcGlubG9jayA9IFxcdTAwMjZwZXJfY3B1KGdhcHBpX3ZjcHVfd2FrZXVwX2xpc3RfbG9jaywgY3B1KTtcXG4rXFx0Z3VhcmQocmF3X3NwaW5sb2NrX2lycXNhdmUpKHNwaW5sb2NrKTtcXG4rXFx0aWYgKCFsaXN0X2VtcHR5KFxcdTAwMjZzdm0tXFx1MDAzZWdhcHBpX3ZjcHVfd2FrZXVwX2xpc3QpKVxcbitcXHRcXHRsaXN0X2RlbF9pbml0KFxcdTAwMjZzdm0tXFx1MDAzZWdhcHBpX3ZjcHVfd2FrZXVwX2xpc3QpO1xcbit9XFxuK1xcbit2b2lkIGF2aWNfZGVzdHJveV92Y3B1KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKVxcbit7XFxuK1xcdGlmIChzdm0tXFx1MDAzZWdhcHBpX2NwdSAhPSAtMSBcXHUwMDI2XFx1MDAyNiBhbWRfaW9tbXVfZ2FwcGkpIHtcXG4rXFx0XFx0YXZpY19yZW1vdmVfdmNwdV9mcm9tX2dhcHBpX3dha2V1cF9saXN0KHN2bSwgc3ZtLVxcdTAwM2VnYXBwaV9jcHUpO1xcbitcXHRcXHRzdm0tXFx1MDAzZWdhcHBpX2NwdSA9IC0xO1xcbitcXHR9XFxuK31cXG4rXFxuIHZvaWQgYXZpY19hcGljdl9wb3N0X3N0YXRlX3Jlc3RvcmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuIFxcdGF2aWNfaGFuZGxlX2Rmcl91cGRhdGUodmNwdSk7XFxuQEAgLTg5NiwxMyArOTM4LDE4IEBAIHN0YXRpYyB2b2lkIHN2bV9pcl9saXN0X2RlbChzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFmZCAqaXJxZmQpXFxuIHtcXG4gXFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0gaXJxZmQtXFx1MDAzZWlycV9ieXBhc3NfdmNwdTtcXG4gXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4rXFx0c3RydWN0IHZjcHVfc3ZtICpzdm07XFxuIFxcbiBcXHRpZiAoIXZjcHUpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2dG9fc3ZtKHZjcHUpLVxcdTAwM2Vpcl9saXN0X2xvY2ssIGZsYWdzKTtcXG4rXFx0c3ZtID0gdG9fc3ZtKHZjcHUpO1xcbitcXG4rXFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZzdm0tXFx1MDAzZWlyX2xpc3RfbG9jaywgZmxhZ3MpO1xcbiBcXHRsaXN0X2RlbChcXHUwMDI2aXJxZmQtXFx1MDAzZXZjcHVfbGlzdCk7XFxuLVxcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZ0b19zdm0odmNwdSktXFx1MDAzZWlyX2xpc3RfbG9jaywgZmxhZ3MpO1xcbitcXHRpZiAoYW1kX2lvbW11X2dhcHBpIFxcdTAwMjZcXHUwMDI2IGxpc3RfZW1wdHkoXFx1MDAyNnN2bS1cXHUwMDNlaXJfbGlzdCkpXFxuK1xcdFxcdGF2aWNfcmVtb3ZlX3ZjcHVfZnJvbV9nYXBwaV93YWtldXBfbGlzdChzdm0sIHN2bS1cXHUwMDNlZ2FwcGlfY3B1KTtcXG4rXFx0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnN2bS1cXHUwMDNlaXJfbGlzdF9sb2NrLCBmbGFncyk7XFxuIH1cXG4gXFxuIGludCBhdmljX3BpX3VwZGF0ZV9pcnRlKHN0cnVjdCBrdm1fa2VybmVsX2lycWZkICppcnFmZCwgc3RydWN0IGt2bSAqa3ZtLFxcbkBAIC05MjMsOCArOTcwLDYgQEAgaW50IGF2aWNfcGlfdXBkYXRlX2lydGUoc3RydWN0IGt2bV9rZXJuZWxfaXJxZmQgKmlycWZkLCBzdHJ1Y3Qga3ZtICprdm0sXFxuIFxcdFxcdCAqIGlmIEFWSUMgaXMgZW5hYmxlZC91bmluaGliaXRlZCBpbiB0aGUgZnV0dXJlLlxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0c3RydWN0IGFtZF9pb21tdV9waV9kYXRhIHBpX2RhdGEgPSB7XFxuLVxcdFxcdFxcdC5nYV90YWcgPSBBVklDX0dBVEFHKHRvX2t2bV9zdm0oa3ZtKS1cXHUwMDNlYXZpY192bV9pZCxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICB2Y3B1LVxcdTAwM2V2Y3B1X2lkeCksXFxuIFxcdFxcdFxcdC5pc19ndWVzdF9tb2RlID0ga3ZtX3ZjcHVfYXBpY3ZfYWN0aXZlKHZjcHUpLFxcbiBcXHRcXHRcXHQudmFwaWNfYWRkciA9IGF2aWNfZ2V0X2JhY2tpbmdfcGFnZV9hZGRyZXNzKHRvX3N2bSh2Y3B1KSksXFxuIFxcdFxcdFxcdC52ZWN0b3IgPSB2ZWN0b3IsXFxuQEAgLTkzMiw2ICs5NzcsNyBAQCBpbnQgYXZpY19waV91cGRhdGVfaXJ0ZShzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFmZCAqaXJxZmQsIHN0cnVjdCBrdm0gKmt2bSxcXG4gXFx0XFx0c3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7XFxuIFxcdFxcdHU2NCBlbnRyeTtcXG4gXFx0XFx0aW50IHJldDtcXG4rXFx0XFx0Ym9vbCBpc192Y3B1X3dhaXRpbmcgPSBmYWxzZTtcXG4gXFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIFByZXZlbnQgdGhlIHZDUFUgZnJvbSBiZWluZyBzY2hlZHVsZWQgb3V0IG9yIG1pZ3JhdGVkIHVudGlsXFxuQEAgLTk0NywxNyArOTkzLDMzIEBAIGludCBhdmljX3BpX3VwZGF0ZV9pcnRlKHN0cnVjdCBrdm1fa2VybmVsX2lycWZkICppcnFmZCwgc3RydWN0IGt2bSAqa3ZtLFxcbiBcXHRcXHQgKiBzY2hlZHVsZWQgb3V0LCBLVk0gd2lsbCB1cGRhdGUgdGhlIHBDUFUgaW5mbyB3aGVuIHRoZSB2Q1BVXFxuIFxcdFxcdCAqIGlzIGF3YWtlbmVkIGFuZC9vciBzY2hlZHVsZWQgaW4uICBTZWUgYWxzbyBhdmljX3ZjcHVfbG9hZCgpLlxcbiBcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKGFtZF9pb21tdV9nYXBwaSlcXG4rXFx0XFx0XFx0cGlfZGF0YS5nYV90YWcgPSBQT1NURURfSU5UUl9XQUtFVVBfVkVDVE9SO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdHBpX2RhdGEuZ2FfdGFnID0gQVZJQ19HQVRBRyh0b19rdm1fc3ZtKGt2bSktXFx1MDAzZWF2aWNfdm1faWQsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICB2Y3B1LVxcdTAwM2V2Y3B1X2lkeCk7XFxuK1xcbiBcXHRcXHRlbnRyeSA9IHN2bS1cXHUwMDNlYXZpY19waHlzaWNhbF9pZF9lbnRyeTtcXG4gXFx0XFx0aWYgKGVudHJ5IFxcdTAwMjYgQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9JU19SVU5OSU5HX01BU0spIHtcXG4tXFx0XFx0XFx0cGlfZGF0YS5jcHUgPSBlbnRyeSBcXHUwMDI2IEFWSUNfUEhZU0lDQUxfSURfRU5UUllfSE9TVF9QSFlTSUNBTF9JRF9NQVNLO1xcbitcXHRcXHRcXHRwaV9kYXRhLmFwaWNpZCA9IGVudHJ5IFxcdTAwMjYgQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9IT1NUX1BIWVNJQ0FMX0lEX01BU0s7XFxuK1xcdFxcdFxcdHBpX2RhdGEuaXNfcnVubmluZyA9IHRydWU7XFxuIFxcdFxcdH0gZWxzZSB7XFxuLVxcdFxcdFxcdHBpX2RhdGEuY3B1ID0gLTE7XFxuLVxcdFxcdFxcdHBpX2RhdGEuZ2FfbG9nX2ludHIgPSBlbnRyeSBcXHUwMDI2IEFWSUNfUEhZU0lDQUxfSURfRU5UUllfR0FfTE9HX0lOVFI7XFxuK1xcdFxcdFxcdHBpX2RhdGEuYXBpY2lkID0gLTE7XFxuK1xcdFxcdFxcdHBpX2RhdGEud2FrZXVwX2ludHIgPSBlbnRyeSBcXHUwMDI2IEFWSUNfUEhZU0lDQUxfSURfRU5UUllfV0FLRVVQX0lOVFI7XFxuK1xcdFxcdFxcdHBpX2RhdGEuaXNfcnVubmluZyA9IGZhbHNlO1xcbitcXG4rXFx0XFx0XFx0aWYgKGFtZF9pb21tdV9nYXBwaSkge1xcbitcXHRcXHRcXHRcXHRwaV9kYXRhLmFwaWNpZCA9IGt2bV9jcHVfZ2V0X2FwaWNpZChzdm0tXFx1MDAzZWdhcHBpX2NwdSk7XFxuK1xcdFxcdFxcdFxcdGlmIChsaXN0X2VtcHR5KFxcdTAwMjZzdm0tXFx1MDAzZWlyX2xpc3QpKSB7XFxuK1xcdFxcdFxcdFxcdFxcdGF2aWNfYWRkX3ZjcHVfdG9fZ2FwcGlfd2FrZXVwX2xpc3Qoc3ZtLCBzdm0tXFx1MDAzZWdhcHBpX2NwdSk7XFxuK1xcdFxcdFxcdFxcdFxcdGlzX3ZjcHVfd2FpdGluZyA9IHRydWU7XFxuK1xcdFxcdFxcdFxcdH1cXG4rXFx0XFx0XFx0fVxcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHRyZXQgPSBpcnFfc2V0X3ZjcHVfYWZmaW5pdHkoaG9zdF9pcnEsIFxcdTAwMjZwaV9kYXRhKTtcXG4gXFx0XFx0aWYgKHJldClcXG4tXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0XFx0Z290byBnYXBwaV9lcnJfb3V0O1xcbiBcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogUmV2ZXJ0IHRvIGxlZ2FjeSBtb2RlIGlmIHRoZSBJT01NVSBkaWRuJ3QgcHJvdmlkZSBtZXRhZGF0YVxcbkBAIC05NjYsMTIgKzEwMjgsMTcgQEAgaW50IGF2aWNfcGlfdXBkYXRlX2lydGUoc3RydWN0IGt2bV9rZXJuZWxfaXJxZmQgKmlycWZkLCBzdHJ1Y3Qga3ZtICprdm0sXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRpZiAoV0FSTl9PTl9PTkNFKCFwaV9kYXRhLmlyX2RhdGEpKSB7XFxuIFxcdFxcdFxcdGlycV9zZXRfdmNwdV9hZmZpbml0eShob3N0X2lycSwgTlVMTCk7XFxuLVxcdFxcdFxcdHJldHVybiAtRUlPO1xcbitcXHRcXHRcXHRyZXQgPSAtRUlPO1xcbitcXHRcXHRcXHRnb3RvIGdhcHBpX2Vycl9vdXQ7XFxuIFxcdFxcdH1cXG4gXFxuIFxcdFxcdGlycWZkLVxcdTAwM2VpcnFfYnlwYXNzX2RhdGEgPSBwaV9kYXRhLmlyX2RhdGE7XFxuIFxcdFxcdGxpc3RfYWRkKFxcdTAwMjZpcnFmZC1cXHUwMDNldmNwdV9saXN0LCBcXHUwMDI2c3ZtLVxcdTAwM2Vpcl9saXN0KTtcXG4gXFx0XFx0cmV0dXJuIDA7XFxuK2dhcHBpX2Vycl9vdXQ6XFxuK1xcdFxcdGlmIChpc192Y3B1X3dhaXRpbmcpXFxuK1xcdFxcdFxcdGF2aWNfcmVtb3ZlX3ZjcHVfZnJvbV9nYXBwaV93YWtldXBfbGlzdChzdm0sIHN2bS1cXHUwMDNlZ2FwcGlfY3B1KTtcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0fVxcbiBcXHRyZXR1cm4gaXJxX3NldF92Y3B1X2FmZmluaXR5KGhvc3RfaXJxLCBOVUxMKTtcXG4gfVxcbkBAIC05OTEsMjMgKzEwNTgsMjQgQEAgZW51bSBhdmljX3ZjcHVfYWN0aW9uIHtcXG4gXFx0ICogTm8gdW5pcXVlIGFjdGlvbiBpcyByZXF1aXJlZCB0byBkZWFsIHdpdGggYSB2Q1BVIHRoYXQgc3RvcHMvc3RhcnRzXFxuIFxcdCAqIHJ1bm5pbmcuICBBIHZDUFUgdGhhdCBzdGFydHMgcnVubmluZyBieSBkZWZpbml0aW9uIHN0b3BzIGJsb2NraW5nIGFzXFxuIFxcdCAqIHdlbGwsIGFuZCBhIHZDUFUgdGhhdCBzdG9wcyBydW5uaW5nIGNhbid0IGhhdmUgYmVlbiBibG9ja2luZywgaS5lLlxcbi1cXHQgKiBkb2Vzbid0IG5lZWQgdG8gdG9nZ2xlIEdBTG9nSW50ci5cXG4rXFx0ICogZG9lc24ndCBuZWVkIHRvIHRvZ2dsZSBob3N0IHdha2V1cCBub3RpZmljYXRpb24uXFxuIFxcdCAqL1xcbiBcXHRBVklDX1NUQVJUX1JVTk5JTkdcXHQ9IDAsXFxuIFxcdEFWSUNfU1RPUF9SVU5OSU5HXFx0PSAwLFxcbiBcXG4gXFx0LypcXG4tXFx0ICogV2hlbiBhIHZDUFUgc3RhcnRzIGJsb2NraW5nLCBLVk0gbmVlZHMgdG8gc2V0IHRoZSBHQUxvZ0ludHIgZmxhZ1xcbi1cXHQgKiBpbnQgYWxsIGFzc29jaWF0ZWQgSVJURXMgc28gdGhhdCBLVk0gY2FuIHdha2UgdGhlIHZDUFUgaWYgYW4gSVJRIGlzXFxuLVxcdCAqIHNlbnQgdG8gdGhlIHZDUFUuXFxuK1xcdCAqIFdoZW4gYSB2Q1BVIHN0YXJ0cyBibG9ja2luZywgS1ZNIG5lZWRzIHRvIHJlcXVlc3QgaG9zdCB3YWtldXBcXG4rXFx0ICogbm90aWZpY2F0aW9uIGluIGFsbCBhc3NvY2lhdGVkIElSVEVzIHNvIHRoYXQgS1ZNIGNhbiB3YWtlIHRoZSB2Q1BVXFxuK1xcdCAqIGlmIGFuIElSUSBpcyBzZW50IHRvIHRoZSB2Q1BVLlxcbiBcXHQgKi9cXG4gXFx0QVZJQ19TVEFSVF9CTE9DS0lOR1xcdD0gQklUKDEpLFxcbiB9O1xcbiBcXG4tc3RhdGljIHZvaWQgYXZpY191cGRhdGVfaW9tbXVfdmNwdV9hZmZpbml0eShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBlbnVtIGF2aWNfdmNwdV9hY3Rpb24gYWN0aW9uKVxcbitzdGF0aWMgdm9pZCBhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGFwaWNpZCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIGludCBjcHUsIGVudW0gYXZpY192Y3B1X2FjdGlvbiBhY3Rpb24pXFxuIHtcXG4tXFx0Ym9vbCBnYV9sb2dfaW50ciA9IChhY3Rpb24gXFx1MDAyNiBBVklDX1NUQVJUX0JMT0NLSU5HKTtcXG4rXFx0Ym9vbCB3YWtldXBfaW50ciA9IChhY3Rpb24gXFx1MDAyNiBBVklDX1NUQVJUX0JMT0NLSU5HKTtcXG4rXFx0Ym9vbCBpc19ydW5uaW5nID0gYXBpY2lkIFxcdTAwM2U9IDA7XFxuIFxcdHN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpO1xcbiBcXHRzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFmZCAqaXJxZmQ7XFxuIFxcbkBAIC0xMDE1LDE4ICsxMDgzLDM2IEBAIHN0YXRpYyB2b2lkIGF2aWNfdXBkYXRlX2lvbW11X3ZjcHVfYWZmaW5pdHkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1LFxcbiBcXG4gXFx0LypcXG4gXFx0ICogSGVyZSwgd2UgZ28gdGhyb3VnaCB0aGUgcGVyLXZjcHUgaXJfbGlzdCB0byB1cGRhdGUgYWxsIGV4aXN0aW5nXFxuLVxcdCAqIGludGVycnVwdCByZW1hcHBpbmcgdGFibGUgZW50cnkgdGFyZ2V0aW5nIHRoaXMgdmNwdS5cXG4rXFx0ICogaW50ZXJydXB0IHJlbWFwcGluZyB0YWJsZSBlbnRyaWVzIHRhcmdldGluZyB0aGlzIHZjcHUuXFxuIFxcdCAqL1xcbi1cXHRpZiAobGlzdF9lbXB0eShcXHUwMDI2c3ZtLVxcdTAwM2Vpcl9saXN0KSlcXG4rXFx0aWYgKGxpc3RfZW1wdHkoXFx1MDAyNnN2bS1cXHUwMDNlaXJfbGlzdCkpIHtcXG4rXFx0XFx0aWYgKGFtZF9pb21tdV9nYXBwaSBcXHUwMDI2XFx1MDAyNiBjcHUgXFx1MDAzZT0gMClcXG4rXFx0XFx0XFx0c3ZtLVxcdTAwM2VnYXBwaV9jcHUgPSBjcHU7XFxuIFxcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGlzX3J1bm5pbmcgXFx1MDAyNlxcdTAwMjYgYW1kX2lvbW11X2dhcHBpKSB7XFxuK1xcdFxcdGlmIChzdm0tXFx1MDAzZWdhcHBpX2NwdSAhPSAtMSlcXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogSGFuZGxlIGluaXRpYWwgc3RhdGUgd2hlbiB2Q1BVIGlzIGxvYWRlZCBmb3IgdGhlXFxuK1xcdFxcdFxcdCAqIGZpcnN0IHRpbWUgd2l0aG91dCBhbnkgSVJRIGFmZmluaXR5LlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0YXZpY19yZW1vdmVfdmNwdV9mcm9tX2dhcHBpX3dha2V1cF9saXN0KHN2bSwgc3ZtLVxcdTAwM2VnYXBwaV9jcHUpO1xcbitcXG4rXFx0XFx0c3ZtLVxcdTAwM2VnYXBwaV9jcHUgPSBjcHU7IC8qIFN0b3JlIGNwdSBudW1iZXIgYXMgdGFyZ2V0IGZvciBHQVBQSSAqL1xcbitcXHR9IGVsc2UgaWYgKGFtZF9pb21tdV9nYXBwaSkge1xcbitcXHRcXHRhcGljaWQgPSBrdm1fY3B1X2dldF9hcGljaWQoc3ZtLVxcdTAwM2VnYXBwaV9jcHUpO1xcbitcXHRcXHRhdmljX2FkZF92Y3B1X3RvX2dhcHBpX3dha2V1cF9saXN0KHN2bSwgc3ZtLVxcdTAwM2VnYXBwaV9jcHUpO1xcbitcXHR9XFxuIFxcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGlycWZkLCBcXHUwMDI2c3ZtLVxcdTAwM2Vpcl9saXN0LCB2Y3B1X2xpc3QpIHtcXG4gXFx0XFx0dm9pZCAqZGF0YSA9IGlycWZkLVxcdTAwM2VpcnFfYnlwYXNzX2RhdGE7XFxuIFxcbiBcXHRcXHRpZiAoIShhY3Rpb24gXFx1MDAyNiBBVklDX1RPR0dMRV9PTl9PRkYpKVxcbi1cXHRcXHRcXHRXQVJOX09OX09OQ0UoYW1kX2lvbW11X3VwZGF0ZV9nYShkYXRhLCBjcHUsIGdhX2xvZ19pbnRyKSk7XFxuLVxcdFxcdGVsc2UgaWYgKGNwdSBcXHUwMDNlPSAwKVxcbi1cXHRcXHRcXHRXQVJOX09OX09OQ0UoYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUoZGF0YSwgY3B1LCBnYV9sb2dfaW50cikpO1xcbitcXHRcXHRcXHRXQVJOX09OX09OQ0UoYW1kX2lvbW11X3VwZGF0ZV9nYShkYXRhLCBhcGljaWQsIHdha2V1cF9pbnRyLCBpc19ydW5uaW5nKSk7XFxuK1xcdFxcdGVsc2UgaWYgKGlzX3J1bm5pbmcpXFxuK1xcdFxcdFxcdFdBUk5fT05fT05DRShhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZShkYXRhLCBhcGljaWQsIHdha2V1cF9pbnRyLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBpc19ydW5uaW5nKSk7XFxuIFxcdFxcdGVsc2VcXG4gXFx0XFx0XFx0V0FSTl9PTl9PTkNFKGFtZF9pb21tdV9kZWFjdGl2YXRlX2d1ZXN0X21vZGUoZGF0YSkpO1xcbiBcXHR9XFxuQEAgLTEwNjMsNyArMTE0OSw3IEBAIHN0YXRpYyB2b2lkIF9fYXZpY192Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1LFxcbiBcXHRXQVJOX09OX09OQ0UoZW50cnkgXFx1MDAyNiBBVklDX1BIWVNJQ0FMX0lEX0VOVFJZX0lTX1JVTk5JTkdfTUFTSyk7XFxuIFxcbiBcXHRlbnRyeSBcXHUwMDI2PSB+KEFWSUNfUEhZU0lDQUxfSURfRU5UUllfSE9TVF9QSFlTSUNBTF9JRF9NQVNLIHxcXG4tXFx0XFx0ICAgQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9HQV9MT0dfSU5UUik7XFxuK1xcdFxcdCAgIEFWSUNfUEhZU0lDQUxfSURfRU5UUllfV0FLRVVQX0lOVFIpO1xcbiBcXHRlbnRyeSB8PSAoaF9waHlzaWNhbF9pZCBcXHUwMDI2IEFWSUNfUEhZU0lDQUxfSURfRU5UUllfSE9TVF9QSFlTSUNBTF9JRF9NQVNLKTtcXG4gXFx0ZW50cnkgfD0gQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9JU19SVU5OSU5HX01BU0s7XFxuIFxcbkBAIC0xMDgwLDcgKzExNjYsNyBAQCBzdGF0aWMgdm9pZCBfX2F2aWNfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSxcXG4gXFxuIFxcdFdSSVRFX09OQ0Uoa3ZtX3N2bS1cXHUwMDNlYXZpY19waHlzaWNhbF9pZF90YWJsZVt2Y3B1LVxcdTAwM2V2Y3B1X2lkXSwgZW50cnkpO1xcbiBcXG4tXFx0YXZpY191cGRhdGVfaW9tbXVfdmNwdV9hZmZpbml0eSh2Y3B1LCBoX3BoeXNpY2FsX2lkLCBhY3Rpb24pO1xcbitcXHRhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5KHZjcHUsIGhfcGh5c2ljYWxfaWQsIGNwdSwgYWN0aW9uKTtcXG4gXFxuIFxcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZzdm0tXFx1MDAzZWlyX2xpc3RfbG9jaywgZmxhZ3MpO1xcbiB9XFxuQEAgLTExMjMsOSArMTIwOSw5IEBAIHN0YXRpYyB2b2lkIF9fYXZpY192Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGVudW0gYXZpY192Y3B1X2FjdGlvbiBhY3Rpb24pXFxuIFxcdCAqL1xcbiBcXHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnN2bS1cXHUwMDNlaXJfbGlzdF9sb2NrLCBmbGFncyk7XFxuIFxcbi1cXHRhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5KHZjcHUsIC0xLCBhY3Rpb24pO1xcbitcXHRhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5KHZjcHUsIC0xLCAtMSwgYWN0aW9uKTtcXG4gXFxuLVxcdFdBUk5fT05fT05DRShlbnRyeSBcXHUwMDI2IEFWSUNfUEhZU0lDQUxfSURfRU5UUllfR0FfTE9HX0lOVFIpO1xcbitcXHRXQVJOX09OX09OQ0UoZW50cnkgXFx1MDAyNiBBVklDX1BIWVNJQ0FMX0lEX0VOVFJZX1dBS0VVUF9JTlRSKTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIEtlZXAgdGhlIHByZXZpb3VzIEFQSUMgSUQgaW4gdGhlIGVudHJ5IHNvIHRoYXQgYSByb2d1ZSBkb29yYmVsbCBmcm9tXFxuQEAgLTExMzcsMTEgKzEyMjMsMTEgQEAgc3RhdGljIHZvaWQgX19hdmljX3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZW51bSBhdmljX3ZjcHVfYWN0aW9uIGFjdGlvbilcXG4gXFx0XFx0V1JJVEVfT05DRShrdm1fc3ZtLVxcdTAwM2VhdmljX3BoeXNpY2FsX2lkX3RhYmxlW3ZjcHUtXFx1MDAzZXZjcHVfaWRdLCBlbnRyeSk7XFxuIFxcbiBcXHQvKlxcbi1cXHQgKiBOb3RlISAgRG9uJ3Qgc2V0IEFWSUNfUEhZU0lDQUxfSURfRU5UUllfR0FfTE9HX0lOVFIgaW4gdGhlIHRhYmxlIGFzXFxuK1xcdCAqIE5vdGUhICBEb24ndCBzZXQgQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9XQUtFVVBfSU5UUiBpbiB0aGUgdGFibGUgYXNcXG4gXFx0ICogaXQncyBhIHN5bnRoZXRpYyBmbGFnIHRoYXQgdXN1cnBzIGFuIHVudXNlZCBzaG91bGQtYmUtemVybyBiaXQuXFxuIFxcdCAqL1xcbiBcXHRpZiAoYWN0aW9uIFxcdTAwMjYgQVZJQ19TVEFSVF9CTE9DS0lORylcXG4tXFx0XFx0ZW50cnkgfD0gQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9HQV9MT0dfSU5UUjtcXG4rXFx0XFx0ZW50cnkgfD0gQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9XQUtFVVBfSU5UUjtcXG4gXFxuIFxcdHN2bS1cXHUwMDNlYXZpY19waHlzaWNhbF9pZF9lbnRyeSA9IGVudHJ5O1xcbiBcXG5AQCAtMTE3MSw5ICsxMjU3LDkgQEAgdm9pZCBhdmljX3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIFRoZSB2Q1BVIHdhcyBwcmVlbXB0ZWQgd2hpbGUgYmxvY2tpbmcsIGVuc3VyZSBpdHMgSVJURXMgYXJlXFxuLVxcdFxcdCAqIGNvbmZpZ3VyZWQgdG8gZ2VuZXJhdGUgR0EgTG9nIEludGVycnVwdHMuXFxuK1xcdFxcdCAqIGNvbmZpZ3VyZWQgdG8gcmVxdWVzdCBob3N0IHdha2V1cCBub3RpZmljYXRpb24uXFxuIFxcdFxcdCAqL1xcbi1cXHRcXHRpZiAoIShXQVJOX09OX09OQ0UoIShlbnRyeSBcXHUwMDI2IEFWSUNfUEhZU0lDQUxfSURfRU5UUllfR0FfTE9HX0lOVFIpKSkpXFxuK1xcdFxcdGlmICghKFdBUk5fT05fT05DRSghKGVudHJ5IFxcdTAwMjYgQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9XQUtFVVBfSU5UUikpKSlcXG4gXFx0XFx0XFx0cmV0dXJuO1xcbiBcXHR9XFxuIFxcbkBAIC0xMjk2LDYgKzEzODIsMjEgQEAgc3RhdGljIGJvb2wgX19pbml0IGF2aWNfd2FudF9hdmljX2VuYWJsZWQodm9pZClcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIGF2aWNfZ2FwcGlfd2FrZXVwX2hhbmRsZXIodm9pZClcXG4re1xcbitcXHRpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpO1xcbitcXHRzdHJ1Y3QgbGlzdF9oZWFkICp2Y3B1X3dha2V1cF9saXN0ID0gXFx1MDAyNnBlcl9jcHUoZ2FwcGlfdmNwdV93YWtldXBfbGlzdCwgY3B1KTtcXG4rXFx0cmF3X3NwaW5sb2NrX3QgKnNwaW5sb2NrID0gXFx1MDAyNnBlcl9jcHUoZ2FwcGlfdmNwdV93YWtldXBfbGlzdF9sb2NrLCBjcHUpO1xcbitcXHRzdHJ1Y3QgdmNwdV9zdm0gKnN2bTtcXG4rXFxuK1xcdHJhd19zcGluX2xvY2soc3BpbmxvY2spO1xcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHN2bSwgdmNwdV93YWtldXBfbGlzdCwgZ2FwcGlfdmNwdV93YWtldXBfbGlzdCkge1xcbitcXHRcXHRpZiAoa3ZtX2xhcGljX2ZpbmRfaGlnaGVzdF9pcnIoXFx1MDAyNnN2bS1cXHUwMDNldmNwdSkgXFx1MDAzZT0gMClcXG4rXFx0XFx0XFx0a3ZtX3ZjcHVfd2FrZV91cChcXHUwMDI2c3ZtLVxcdTAwM2V2Y3B1KTtcXG4rXFx0fVxcbitcXHRyYXdfc3Bpbl91bmxvY2soc3BpbmxvY2spO1xcbit9XFxuK1xcbiAvKlxcbiAgKiBOb3RlOlxcbiAgKiAtIFRoZSBtb2R1bGUgcGFyYW0gYXZpYyBlbmFibGUgYm90aCB4QVBJQyBhbmQgeDJBUElDIG1vZGUuXFxuQEAgLTEzMDQsMTIgKzE0MDUsMTggQEAgc3RhdGljIGJvb2wgX19pbml0IGF2aWNfd2FudF9hdmljX2VuYWJsZWQodm9pZClcXG4gICovXFxuIGJvb2wgX19pbml0IGF2aWNfaGFyZHdhcmVfc2V0dXAodm9pZClcXG4ge1xcbitcXHRpbnQgY3B1O1xcbiBcXHRhdmljID0gYXZpY193YW50X2F2aWNfZW5hYmxlZCgpO1xcbiBcXHRpZiAoIWF2aWMpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuIFxcdHByX2luZm8oXFxcIkFWSUMgZW5hYmxlZFxcXFxuXFxcIik7XFxuIFxcbitcXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XFxuK1xcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZwZXJfY3B1KGdhcHBpX3ZjcHVfd2FrZXVwX2xpc3QsIGNwdSkpO1xcbitcXHRcXHRyYXdfc3Bpbl9sb2NrX2luaXQoXFx1MDAyNnBlcl9jcHUoZ2FwcGlfdmNwdV93YWtldXBfbGlzdF9sb2NrLCBjcHUpKTtcXG4rXFx0fVxcbitcXG4gXFx0LyogQVZJQyBpcyBhIHByZXJlcXVpc2l0ZSBmb3IgeDJBVklDLiAqL1xcbiBcXHR4MmF2aWNfZW5hYmxlZCA9IGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9YMkFWSUMpO1xcbiBcXHRpZiAoeDJhdmljX2VuYWJsZWQpIHtcXG5AQCAtMTMzMywxMiArMTQ0MCwxNiBAQCBib29sIF9faW5pdCBhdmljX2hhcmR3YXJlX3NldHVwKHZvaWQpXFxuIFxcdFxcdGVuYWJsZV9pcGl2ID0gZmFsc2U7XFxuIFxcbiBcXHRhbWRfaW9tbXVfcmVnaXN0ZXJfZ2FfbG9nX25vdGlmaWVyKFxcdTAwMjZhdmljX2dhX2xvZ19ub3RpZmllcik7XFxuK1xcdGt2bV9zZXRfcG9zdGVkX2ludHJfd2FrZXVwX2hhbmRsZXIoXFx1MDAyNmF2aWNfZ2FwcGlfd2FrZXVwX2hhbmRsZXIpO1xcbiBcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuIHZvaWQgYXZpY19oYXJkd2FyZV91bnNldHVwKHZvaWQpXFxuIHtcXG4tXFx0aWYgKGF2aWMpXFxuLVxcdFxcdGFtZF9pb21tdV9yZWdpc3Rlcl9nYV9sb2dfbm90aWZpZXIoTlVMTCk7XFxuK1xcdGlmICghYXZpYylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0YW1kX2lvbW11X3JlZ2lzdGVyX2dhX2xvZ19ub3RpZmllcihOVUxMKTtcXG4rXFx0a3ZtX3NldF9wb3N0ZWRfaW50cl93YWtldXBfaGFuZGxlcihOVUxMKTtcXG4gfVxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xcbmluZGV4IGUwMmEzOGRhNTI5NmUzLi5iNjg3MTMzZjg1MjhiYSAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXFxuKysrIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xcbkBAIC0xMzU2LDYgKzEzNTYsOCBAQCBzdGF0aWMgdm9pZCBzdm1fdmNwdV9mcmVlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFxuIFxcdFdBUk5fT05fT05DRSghbGlzdF9lbXB0eShcXHUwMDI2c3ZtLVxcdTAwM2Vpcl9saXN0KSk7XFxuIFxcbitcXHRhdmljX2Rlc3Ryb3lfdmNwdShzdm0pO1xcbitcXG4gXFx0c3ZtX2xlYXZlX25lc3RlZCh2Y3B1KTtcXG4gXFx0c3ZtX2ZyZWVfbmVzdGVkKHN2bSk7XFxuIFxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uaFxcbmluZGV4IDUxMzc0MTZiZTU5M2Q3Li40N2Q1YmI1ZDcxMDNkYSAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oXFxuKysrIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uaFxcbkBAIC0zNjIsNiArMzYyLDEwIEBAIHN0cnVjdCB2Y3B1X3N2bSB7XFxuIFxcbiBcXHQvKiBHdWVzdCBHSUYgdmFsdWUsIHVzZWQgd2hlbiB2R0lGIGlzIG5vdCBlbmFibGVkICovXFxuIFxcdGJvb2wgZ3Vlc3RfZ2lmO1xcbitcXG4rXFx0LyogR0FQUEkgcmVsYXRlZCBmaWVsZHMgKi9cXG4rXFx0c3RydWN0IGxpc3RfaGVhZCBnYXBwaV92Y3B1X3dha2V1cF9saXN0O1xcbitcXHRpbnQgZ2FwcGlfY3B1O1xcbiB9O1xcbiBcXG4gc3RydWN0IHN2bV9jcHVfZGF0YSB7XFxuQEAgLTkwOSw2ICs5MTMsNyBAQCB2b2lkIGF2aWNfaW5pdF92bWNiKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBzdHJ1Y3Qgdm1jYiAqdm1jYik7XFxuIGludCBhdmljX2luY29tcGxldGVfaXBpX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbiBpbnQgYXZpY191bmFjY2VsZXJhdGVkX2FjY2Vzc19pbnRlcmNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4gaW50IGF2aWNfaW5pdF92Y3B1KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKTtcXG4rdm9pZCBhdmljX2Rlc3Ryb3lfdmNwdShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSk7XFxuIHZvaWQgYXZpY192Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KTtcXG4gdm9pZCBhdmljX3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIHZvaWQgYXZpY19hcGljdl9wb3N0X3N0YXRlX3Jlc3RvcmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pb21tdS9hbWQvYW1kX2lvbW11LmggYi9kcml2ZXJzL2lvbW11L2FtZC9hbWRfaW9tbXUuaFxcbmluZGV4IDgzNGQ4ZmFiZmJhMzg3Li4wNDQxNzljYWIxMmU0YiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2lvbW11L2FtZC9hbWRfaW9tbXUuaFxcbisrKyBiL2RyaXZlcnMvaW9tbXUvYW1kL2FtZF9pb21tdS5oXFxuQEAgLTQxLDYgKzQxLDcgQEAgaW50IGFtZF9pb21tdV9lbmFibGUodm9pZCk7XFxuIHZvaWQgYW1kX2lvbW11X2Rpc2FibGUodm9pZCk7XFxuIGludCBhbWRfaW9tbXVfcmVlbmFibGUoaW50IG1vZGUpO1xcbiBpbnQgYW1kX2lvbW11X2VuYWJsZV9mYXVsdGluZyh1bnNpZ25lZCBpbnQgY3B1KTtcXG4rZXh0ZXJuIGJvb2wgYW1kX2lvbW11X2dhcHBpO1xcbiBleHRlcm4gaW50IGFtZF9pb21tdV9ndWVzdF9pcjtcXG4gZXh0ZXJuIGVudW0gcHJvdGVjdGlvbl9kb21haW5fbW9kZSBhbWRfaW9tbXVfcGd0YWJsZTtcXG4gZXh0ZXJuIGludCBhbWRfaW9tbXVfZ3B0X2xldmVsO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2lvbW11L2FtZC9hbWRfaW9tbXVfdHlwZXMuaCBiL2RyaXZlcnMvaW9tbXUvYW1kL2FtZF9pb21tdV90eXBlcy5oXFxuaW5kZXggZjlmNzE4MDg3ODkzMDMuLmRlMGIyMzMwNjk0NGI4IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvaW9tbXUvYW1kL2FtZF9pb21tdV90eXBlcy5oXFxuKysrIGIvZHJpdmVycy9pb21tdS9hbWQvYW1kX2lvbW11X3R5cGVzLmhcXG5AQCAtOTQsNiArOTQsNyBAQFxcbiAjZGVmaW5lIEZFQVRVUkVfWDJBUElDXFx0XFx0QklUX1VMTCgyKVxcbiAjZGVmaW5lIEZFQVRVUkVfTlhcXHRcXHRCSVRfVUxMKDMpXFxuICNkZWZpbmUgRkVBVFVSRV9HVFxcdFxcdEJJVF9VTEwoNClcXG4rI2RlZmluZSBGRUFUVVJFX0dBUFBJXFx0XFx0QklUX1VMTCg1KVxcbiAjZGVmaW5lIEZFQVRVUkVfSUFcXHRcXHRCSVRfVUxMKDYpXFxuICNkZWZpbmUgRkVBVFVSRV9HQVxcdFxcdEJJVF9VTEwoNylcXG4gI2RlZmluZSBGRUFUVVJFX0hFXFx0XFx0QklUX1VMTCg4KVxcbkBAIC0xMTMsNiArMTE0LDcgQEBcXG4gLyogRXh0ZW5kZWQgRmVhdHVyZSAyIEJpdHMgKi9cXG4gI2RlZmluZSBGRUFUVVJFX1NFVlNOUElPX1NVUFxcdEJJVF9VTEwoMSlcXG4gI2RlZmluZSBGRUFUVVJFX0dDUjNUUlBNT0RFXFx0QklUX1VMTCgzKVxcbisjZGVmaW5lIEZFQVRVUkVfR0FQUElESVNTVVBcXHRCSVRfVUxMKDQpXFxuICNkZWZpbmUgRkVBVFVSRV9TTlBBVklDU1VQXFx0R0VOTUFTS19VTEwoNywgNSlcXG4gI2RlZmluZSBGRUFUVVJFX1NOUEFWSUNTVVBfR0FNKHgpIFxcXFxcXG4gXFx0KEZJRUxEX0dFVChGRUFUVVJFX1NOUEFWSUNTVVAsIHgpID09IDB4MSlcXG5AQCAtMTkwLDYgKzE5Miw3IEBAXFxuICNkZWZpbmUgQ09OVFJPTF9FUEhfRU5cXHRcXHQ0NVxcbiAjZGVmaW5lIENPTlRST0xfWFRfRU5cXHRcXHQ1MFxcbiAjZGVmaW5lIENPTlRST0xfSU5UQ0FQWFRfRU5cXHQ1MVxcbisjZGVmaW5lIENPTlRST0xfR0FQUElfRU5cXHQ1NVxcbiAjZGVmaW5lIENPTlRST0xfR0NSM1RSUE1PREVcXHQ1OFxcbiAjZGVmaW5lIENPTlRST0xfSVJUQ0FDSEVESVNcXHQ1OVxcbiAjZGVmaW5lIENPTlRST0xfU05QQVZJQ19FTlxcdDYxXFxuQEAgLTEwMDQsNyArMTAwNyw4IEBAIHVuaW9uIGlydGVfZ2FfbG8ge1xcbiBcXHRcXHQgICAgbm9fZmF1bHRcXHQ6IDEsXFxuIFxcdFxcdCAgICAvKiAtLS0tLS0gKi9cXG4gXFx0XFx0ICAgIGdhX2xvZ19pbnRyXFx0OiAxLFxcbi1cXHRcXHQgICAgcnN2ZDFcXHQ6IDMsXFxuK1xcdFxcdCAgICByc3ZkMVxcdDogMixcXG4rXFx0XFx0ICAgIGdhcHBpX2Rpc1xcdDogMSxcXG4gXFx0XFx0ICAgIGlzX3J1blxcdDogMSxcXG4gXFx0XFx0ICAgIC8qIC0tLS0tLSAqL1xcbiBcXHRcXHQgICAgZ3Vlc3RfbW9kZVxcdDogMSxcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jIGIvZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jXFxuaW5kZXggM2JkYjM4MGQyM2U5YTkuLjdkMmIxYzI0ZjZlY2NiIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvaW9tbXUvYW1kL2luaXQuY1xcbisrKyBiL2RyaXZlcnMvaW9tbXUvYW1kL2luaXQuY1xcbkBAIC0xNjAsNiArMTYwLDkgQEAgdTggYW1kX2lvbW11X2hwdF9sZXZlbDtcXG4gLyogR3Vlc3QgcGFnZSB0YWJsZSBsZXZlbCAqL1xcbiBpbnQgYW1kX2lvbW11X2dwdF9sZXZlbCA9IFBBR0VfTU9ERV80X0xFVkVMO1xcbiBcXG4rYm9vbCBhbWRfaW9tbXVfZ2FwcGk7XFxuK0VYUE9SVF9TWU1CT0woYW1kX2lvbW11X2dhcHBpKTtcXG4rXFxuIGludCBhbWRfaW9tbXVfZ3Vlc3RfaXIgPSBBTURfSU9NTVVfR1VFU1RfSVJfVkFQSUM7XFxuIHN0YXRpYyBpbnQgYW1kX2lvbW11X3h0X21vZGUgPSBJUlFfUkVNQVBfWEFQSUNfTU9ERTtcXG4gXFxuQEAgLTQ2Miw2ICs0NjUsOSBAQCBzdGF0aWMgdm9pZCBpb21tdV9kaXNhYmxlKHN0cnVjdCBhbWRfaW9tbXUgKmlvbW11KVxcbiBcXHRpb21tdV9mZWF0dXJlX2Rpc2FibGUoaW9tbXUsIENPTlRST0xfR0FMT0dfRU4pO1xcbiBcXHRpb21tdV9mZWF0dXJlX2Rpc2FibGUoaW9tbXUsIENPTlRST0xfR0FJTlRfRU4pO1xcbiBcXG4rXFx0LyogRGlzYWJsZSBJT01NVSBHQVBQSSAqL1xcbitcXHRpb21tdV9mZWF0dXJlX2Rpc2FibGUoaW9tbXUsIENPTlRST0xfR0FQUElfRU4pO1xcbitcXG4gXFx0LyogRGlzYWJsZSBJT01NVSBQUFIgbG9nZ2luZyAqL1xcbiBcXHRpb21tdV9mZWF0dXJlX2Rpc2FibGUoaW9tbXUsIENPTlRST0xfUFBSTE9HX0VOKTtcXG4gXFx0aW9tbXVfZmVhdHVyZV9kaXNhYmxlKGlvbW11LCBDT05UUk9MX1BQUklOVF9FTik7XFxuQEAgLTI5OTYsNiArMzAwMiwxMyBAQCBzdGF0aWMgdm9pZCBlbmFibGVfaW9tbXVzX3ZhcGljKHZvaWQpXFxuIFxcdHN0cnVjdCBhbWRfaW9tbXUgKmlvbW11O1xcbiBcXG4gXFx0Zm9yX2VhY2hfaW9tbXUoaW9tbXUpIHtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogRGlzYWJsZSBHQVBQSSwgZG8gbm90IGNoZWNrIGFtZF9pb21tdV9nYXBwaSBhcyBpdCBtYXkgYmVcXG4rXFx0XFx0ICogZmFsc2UgaW4gbmV3IGtleGVjIGtlcm5lbCBldmVuIHRob3VnaCBwcmV2aW91cyBrZXJuZWwgaGFzXFxuK1xcdFxcdCAqIGVuYWJsZWQgaXQuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpb21tdV9mZWF0dXJlX2Rpc2FibGUoaW9tbXUsIENPTlRST0xfR0FQUElfRU4pO1xcbitcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogRGlzYWJsZSBHQUxvZyBpZiBhbHJlYWR5IHJ1bm5pbmcuIEl0IGNvdWxkIGhhdmUgYmVlbiBlbmFibGVkXFxuIFxcdFxcdCAqIGluIHRoZSBwcmV2aW91cyBib290IGJlZm9yZSBrZHVtcC5cXG5AQCAtMzAzNSwxMCArMzA0OCwxOSBAQCBzdGF0aWMgdm9pZCBlbmFibGVfaW9tbXVzX3ZhcGljKHZvaWQpXFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG4rXFx0aWYgKGFtZF9pb21tdV9nYXBwaSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgIShjaGVja19mZWF0dXJlKEZFQVRVUkVfR0FQUEkpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAgIEFNRF9JT01NVV9HVUVTVF9JUl9WQVBJQyhhbWRfaW9tbXVfZ3Vlc3RfaXIpKSkge1xcbitcXHRcXHRwcl93YXJuKFxcXCJHQVBQSSBpcyBub3Qgc3VwcG9ydGVkLlxcXFxuXFxcIik7XFxuK1xcdFxcdGFtZF9pb21tdV9nYXBwaSA9IGZhbHNlO1xcbitcXHR9XFxuK1xcbiBcXHQvKiBFbmFibGluZyBHQU0gYW5kIFNOUEFWSUMgc3VwcG9ydCAqL1xcbiBcXHRmb3JfZWFjaF9pb21tdShpb21tdSkge1xcbi1cXHRcXHRpZiAoaW9tbXVfaW5pdF9nYV9sb2coaW9tbXUpIHx8XFxuLVxcdFxcdCAgICBpb21tdV9nYV9sb2dfZW5hYmxlKGlvbW11KSlcXG4rXFx0XFx0aWYgKGFtZF9pb21tdV9nYXBwaSlcXG4rXFx0XFx0XFx0aW9tbXVfZmVhdHVyZV9lbmFibGUoaW9tbXUsIENPTlRST0xfR0FQUElfRU4pO1xcbitcXHRcXHRlbHNlIGlmIChpb21tdV9pbml0X2dhX2xvZyhpb21tdSkgfHxcXG4rXFx0XFx0XFx0IGlvbW11X2dhX2xvZ19lbmFibGUoaW9tbXUpKVxcbiBcXHRcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRcXHRpb21tdV9mZWF0dXJlX2VuYWJsZShpb21tdSwgQ09OVFJPTF9HQU1fRU4pO1xcbkBAIC0zMDQ3LDcgKzMwNjksOCBAQCBzdGF0aWMgdm9pZCBlbmFibGVfaW9tbXVzX3ZhcGljKHZvaWQpXFxuIFxcdH1cXG4gXFxuIFxcdGFtZF9pb21tdV9pcnFfb3BzLmNhcGFiaWxpdHkgfD0gKDEgXFx1MDAzY1xcdTAwM2MgSVJRX1BPU1RJTkdfQ0FQKTtcXG4tXFx0cHJfaW5mbyhcXFwiVmlydHVhbCBBUElDIGVuYWJsZWRcXFxcblxcXCIpO1xcbitcXHRwcl9pbmZvKFxcXCJWaXJ0dWFsIEFQSUMgZW5hYmxlZCB3aXRoICVzXFxcXG5cXFwiLFxcbitcXHRcXHRhbWRfaW9tbXVfZ2FwcGkgPyBcXFwiR0FQUElcXFwiIDogXFxcIkdBTE9HXFxcIik7XFxuICNlbmRpZlxcbiB9XFxuIFxcbkBAIC0zNzM4LDYgKzM3NjEsOCBAQCBzdGF0aWMgaW50IF9faW5pdCBwYXJzZV9hbWRfaW9tbXVfb3B0aW9ucyhjaGFyICpzdHIpXFxuIFxcdFxcdH0gZWxzZSBpZiAoc3RybmNtcChzdHIsIFxcXCJ2Ml9wZ3NpemVzX29ubHlcXFwiLCAxNSkgPT0gMCkge1xcbiBcXHRcXHRcXHRwcl9pbmZvKFxcXCJSZXN0cmljdGluZyBWMSBwYWdlLXNpemVzIHRvIDRLaUIvMk1pQi8xR2lCXFxcIik7XFxuIFxcdFxcdFxcdGFtZF9pb21tdV9wZ3NpemVfYml0bWFwID0gQU1EX0lPTU1VX1BHU0laRVNfVjI7XFxuK1xcdFxcdH0gZWxzZSBpZiAoc3RybmNtcChzdHIsIFxcXCJnYXBwaVxcXCIsIDUpID09IDApIHtcXG4rXFx0XFx0XFx0YW1kX2lvbW11X2dhcHBpID0gdHJ1ZTtcXG4gXFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0cHJfbm90aWNlKFxcXCJVbmtub3duIG9wdGlvbiAtICclcydcXFxcblxcXCIsIHN0cik7XFxuIFxcdFxcdH1cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuYyBiL2RyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmNcXG5pbmRleCA1N2RjOGZhYmM3ZDliOS4uN2VlYmY0NzQ1YTY3ODIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuY1xcbisrKyBiL2RyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmNcXG5AQCAtMzk1OSwxOSArMzk1OSwyOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGlycV9kb21haW5fb3BzIGFtZF9pcl9kb21haW5fb3BzID0ge1xcbiBcXHQuZGVhY3RpdmF0ZSA9IGlycV9yZW1hcHBpbmdfZGVhY3RpdmF0ZSxcXG4gfTtcXG4gXFxuLXN0YXRpYyB2b2lkIF9fYW1kX2lvbW11X3VwZGF0ZV9nYShzdHJ1Y3QgaXJ0ZV9nYSAqZW50cnksIGludCBjcHUsXFxuLVxcdFxcdFxcdFxcdCAgYm9vbCBnYV9sb2dfaW50cilcXG4rc3RhdGljIHZvaWQgX19hbWRfaW9tbXVfdXBkYXRlX2dhKHN0cnVjdCBpcnRlX2dhICplbnRyeSwgaW50IGFwaWNpZCxcXG4rXFx0XFx0XFx0XFx0ICBib29sIHdha2V1cF9pbnRyLCBib29sIGlzX3J1bm5pbmcpXFxuIHtcXG4tXFx0aWYgKGNwdSBcXHUwMDNlPSAwKSB7XFxuK1xcdGlmIChpc19ydW5uaW5nKSB7XFxuIFxcdFxcdGVudHJ5LVxcdTAwM2Vsby5maWVsZHNfdmFwaWMuZGVzdGluYXRpb24gPVxcbi1cXHRcXHRcXHRcXHRcXHRBUElDSURfVE9fSVJURV9ERVNUX0xPKGNwdSk7XFxuK1xcdFxcdFxcdFxcdFxcdEFQSUNJRF9UT19JUlRFX0RFU1RfTE8oYXBpY2lkKTtcXG4gXFx0XFx0ZW50cnktXFx1MDAzZWhpLmZpZWxkcy5kZXN0aW5hdGlvbiA9XFxuLVxcdFxcdFxcdFxcdFxcdEFQSUNJRF9UT19JUlRFX0RFU1RfSEkoY3B1KTtcXG4rXFx0XFx0XFx0XFx0XFx0QVBJQ0lEX1RPX0lSVEVfREVTVF9ISShhcGljaWQpO1xcbiBcXHRcXHRlbnRyeS1cXHUwMDNlbG8uZmllbGRzX3ZhcGljLmlzX3J1biA9IHRydWU7XFxuIFxcdFxcdGVudHJ5LVxcdTAwM2Vsby5maWVsZHNfdmFwaWMuZ2FfbG9nX2ludHIgPSBmYWxzZTtcXG4gXFx0fSBlbHNlIHtcXG4tXFx0XFx0ZW50cnktXFx1MDAzZWxvLmZpZWxkc192YXBpYy5pc19ydW4gPSBmYWxzZTtcXG4tXFx0XFx0ZW50cnktXFx1MDAzZWxvLmZpZWxkc192YXBpYy5nYV9sb2dfaW50ciA9IGdhX2xvZ19pbnRyO1xcbitcXHRcXHRpZiAoYW1kX2lvbW11X2dhcHBpKSB7XFxuK1xcdFxcdFxcdGVudHJ5LVxcdTAwM2Vsby5maWVsZHNfdmFwaWMuZ2FwcGlfZGlzID0gIXdha2V1cF9pbnRyIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdFxcdFxcdFxcdGNoZWNrX2ZlYXR1cmUyKEZFQVRVUkVfR0FQUElESVNTVVApO1xcbitcXHRcXHRcXHRlbnRyeS1cXHUwMDNlbG8uZmllbGRzX3ZhcGljLmlzX3J1biA9IGZhbHNlO1xcbitcXHRcXHRcXHRlbnRyeS1cXHUwMDNlbG8uZmllbGRzX3ZhcGljLmRlc3RpbmF0aW9uID1cXG4rXFx0XFx0XFx0XFx0XFx0XFx0QVBJQ0lEX1RPX0lSVEVfREVTVF9MTyhhcGljaWQpO1xcbitcXHRcXHRcXHRlbnRyeS1cXHUwMDNlaGkuZmllbGRzLmRlc3RpbmF0aW9uID1cXG4rXFx0XFx0XFx0XFx0XFx0XFx0QVBJQ0lEX1RPX0lSVEVfREVTVF9ISShhcGljaWQpO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRlbnRyeS1cXHUwMDNlbG8uZmllbGRzX3ZhcGljLmlzX3J1biA9IGZhbHNlO1xcbitcXHRcXHRcXHRlbnRyeS1cXHUwMDNlbG8uZmllbGRzX3ZhcGljLmdhX2xvZ19pbnRyID0gd2FrZXVwX2ludHI7XFxuK1xcdFxcdH1cXG4gXFx0fVxcbiB9XFxuIFxcbkBAIC0zOTc5LDIwICszOTg5LDIwIEBAIHN0YXRpYyB2b2lkIF9fYW1kX2lvbW11X3VwZGF0ZV9nYShzdHJ1Y3QgaXJ0ZV9nYSAqZW50cnksIGludCBjcHUsXFxuICAqIFVwZGF0ZSB0aGUgcENQVSBpbmZvcm1hdGlvbiBmb3IgYW4gSVJURSB0aGF0IGlzIGNvbmZpZ3VyZWQgdG8gcG9zdCBJUlFzIHRvXFxuICAqIGEgdkNQVSwgd2l0aG91dCBpc3N1aW5nIGFuIElPTU1VIGludmFsaWRhdGlvbiBmb3IgdGhlIElSVEUuXFxuICAqXFxuLSAqIElmIHRoZSB2Q1BVIGlzIGFzc29jaWF0ZWQgd2l0aCBhIHBDUFUgKEBjcHUgXFx1MDAzZT0gMCksIGNvbmZpZ3VyZSB0aGUgRGVzdGluYXRpb25cXG4tICogd2l0aCB0aGUgcENQVSdzIEFQSUMgSUQsIHNldCBJc1J1biwgYW5kIGNsZWFyIEdBTG9nSW50ci4gIElmIHRoZSB2Q1BVIGlzbid0XFxuLSAqIGFzc29jaWF0ZWQgd2l0aCBhIHBDUFUgKEBjcHUgXFx1MDAzYyAwKSwgY2xlYXIgSXNSdW4gYW5kIHNldC9jbGVhciBHQUxvZ0ludHIgYmFzZWRcXG4tICogb24gaW5wdXQgZnJvbSB0aGUgY2FsbGVyIChlLmcuIEtWTSBvbmx5IHJlcXVlc3RzIEdBTG9nSW50ciB3aGVuIHRoZSB2Q1BVIGlzXFxuLSAqIGJsb2NraW5nIGFuZCByZXF1aXJlcyBhIG5vdGlmaWNhdGlvbiB3YWtlIGV2ZW50KS4gIEkuZS4gdHJlYXQgdkNQVXMgdGhhdCBhcmVcXG4tICogYXNzb2NpYXRlZCB3aXRoIGEgcENQVSBhcyBydW5uaW5nLiAgVGhpcyBBUEkgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCB3aGVuIGFcXG4tICogdkNQVSBpcyBzY2hlZHVsZWQgaW4vb3V0IChvciBzdG9wcyBydW5uaW5nIGZvciBhbnkgcmVhc29uKSwgdG8gZG8gYSBmYXN0XFxuLSAqIHVwZGF0ZSBvZiBJc1J1biwgR0FMb2dJbnRyLCBhbmQgKGNvbmRpdGlvbmFsbHkpIERlc3RpbmF0aW9uLlxcbisgKiBJZiB0aGUgdkNQVSBpcyBzY2hlZHVsZWQgdG8gcnVuIG9uIHBDUFUgKEBpc19ydW5uaW5nID0gMSksIGNvbmZpZ3VyZSB0aGVcXG4rICogRGVzdGluYXRpb24gd2l0aCB0aGUgcENQVSdzIEFQSUMgSUQsIHNldCBJc1J1biwgYW5kIGNsZWFyIEdBTG9nSW50ci4gSWYgdGhlXFxuKyAqIHZDUFUgaXMgc2NoZWR1bGVkIG91dCAoQGlzX3J1bm5pbmcgPSAwKSwgY2xlYXIgSXNSdW4gYW5kIHNldC9jbGVhciBHQUxvZ0ludHJcXG4rICogYW5kIEdBUFBJRGlzIGJhc2VkIG9uIGlucHV0IGZyb20gdGhlIGNhbGxlciAoZS5nLiBLVk0gb25seSByZXF1ZXN0c1xcbisgKiB3YWtldXBfaW50ciB3aGVuIHRoZSB2Q1BVIGlzIGJsb2NraW5nIGFuZCByZXF1aXJlcyBhIG5vdGlmaWNhdGlvbiB3YWtlXFxuKyAqIGV2ZW50KS4gVGhpcyBBUEkgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCB3aGVuIGEgdkNQVSBpcyBzY2hlZHVsZWQgaW4vb3V0IChvclxcbisgKiBzdG9wcyBydW5uaW5nIGZvciBhbnkgcmVhc29uKSwgdG8gZG8gYSBmYXN0IHVwZGF0ZSBvZiBJc1J1biwgR0FMb2dJbnRyLFxcbisgKiBHQVBQSURpcyBhbmQgKGNvbmRpdGlvbmFsbHkpIERlc3RpbmF0aW9uLlxcbiAgKlxcbi0gKiBQZXIgdGhlIElPTU1VIHNwZWMsIHRoZSBEZXN0aW5hdGlvbiwgSXNSdW4sIGFuZCBHQVRhZyBmaWVsZHMgYXJlIG5vdCBjYWNoZWRcXG4tICogYW5kIHRodXMgZG9uJ3QgcmVxdWlyZSBhbiBpbnZhbGlkYXRpb24gdG8gZW5zdXJlIHRoZSBJT01NVSBjb25zdW1lcyBmcmVzaFxcbi0gKiBpbmZvcm1hdGlvbi5cXG4rICogUGVyIHRoZSBJT01NVSBzcGVjLCB0aGUgRGVzdGluYXRpb24sIElzUnVuLCBHQVRhZyBhbmQgR0FQUElEaXMgZmllbGRzIGFyZVxcbisgKiBub3QgY2FjaGVkIGFuZCB0aHVzIGRvbid0IHJlcXVpcmUgYW4gaW52YWxpZGF0aW9uIHRvIGVuc3VyZSB0aGUgSU9NTVVcXG4rICogY29uc3VtZXMgZnJlc2ggaW5mb3JtYXRpb24uXFxuICAqL1xcbi1pbnQgYW1kX2lvbW11X3VwZGF0ZV9nYSh2b2lkICpkYXRhLCBpbnQgY3B1LCBib29sIGdhX2xvZ19pbnRyKVxcbitpbnQgYW1kX2lvbW11X3VwZGF0ZV9nYSh2b2lkICpkYXRhLCBpbnQgYXBpY2lkLCBib29sIHdha2V1cF9pbnRyLCBib29sIGlzX3J1bm5pbmcpXFxuIHtcXG4gXFx0c3RydWN0IGFtZF9pcl9kYXRhICppcl9kYXRhID0gKHN0cnVjdCBhbWRfaXJfZGF0YSAqKWRhdGE7XFxuIFxcdHN0cnVjdCBpcnRlX2dhICplbnRyeSA9IChzdHJ1Y3QgaXJ0ZV9nYSAqKSBpcl9kYXRhLVxcdTAwM2VlbnRyeTtcXG5AQCAtNDAwNiwxNCArNDAxNiwxNCBAQCBpbnQgYW1kX2lvbW11X3VwZGF0ZV9nYSh2b2lkICpkYXRhLCBpbnQgY3B1LCBib29sIGdhX2xvZ19pbnRyKVxcbiBcXHRpZiAoIWlyX2RhdGEtXFx1MDAzZWlvbW11KVxcbiBcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4gXFxuLVxcdF9fYW1kX2lvbW11X3VwZGF0ZV9nYShlbnRyeSwgY3B1LCBnYV9sb2dfaW50cik7XFxuK1xcdF9fYW1kX2lvbW11X3VwZGF0ZV9nYShlbnRyeSwgYXBpY2lkLCB3YWtldXBfaW50ciwgaXNfcnVubmluZyk7XFxuIFxcbiBcXHRyZXR1cm4gX19tb2RpZnlfaXJ0ZV9nYShpcl9kYXRhLVxcdTAwM2Vpb21tdSwgaXJfZGF0YS1cXHUwMDNlaXJxXzJfaXJ0ZS5kZXZpZCxcXG4gXFx0XFx0XFx0XFx0aXJfZGF0YS1cXHUwMDNlaXJxXzJfaXJ0ZS5pbmRleCwgZW50cnkpO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0woYW1kX2lvbW11X3VwZGF0ZV9nYSk7XFxuIFxcbi1pbnQgYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUodm9pZCAqZGF0YSwgaW50IGNwdSwgYm9vbCBnYV9sb2dfaW50cilcXG4raW50IGFtZF9pb21tdV9hY3RpdmF0ZV9ndWVzdF9tb2RlKHZvaWQgKmRhdGEsIGludCBhcGljaWQsIGJvb2wgd2FrZXVwX2ludHIsIGJvb2wgaXNfcnVubmluZylcXG4ge1xcbiBcXHRzdHJ1Y3QgYW1kX2lyX2RhdGEgKmlyX2RhdGEgPSAoc3RydWN0IGFtZF9pcl9kYXRhICopZGF0YTtcXG4gXFx0c3RydWN0IGlydGVfZ2EgKmVudHJ5ID0gKHN0cnVjdCBpcnRlX2dhICopIGlyX2RhdGEtXFx1MDAzZWVudHJ5O1xcbkBAIC00MDM2LDcgKzQwNDYsNyBAQCBpbnQgYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUodm9pZCAqZGF0YSwgaW50IGNwdSwgYm9vbCBnYV9sb2dfaW50cilcXG4gXFx0ZW50cnktXFx1MDAzZWhpLmZpZWxkcy52ZWN0b3IgICAgICAgICAgICA9IGlyX2RhdGEtXFx1MDAzZWdhX3ZlY3RvcjtcXG4gXFx0ZW50cnktXFx1MDAzZWxvLmZpZWxkc192YXBpYy5nYV90YWcgICAgICA9IGlyX2RhdGEtXFx1MDAzZWdhX3RhZztcXG4gXFxuLVxcdF9fYW1kX2lvbW11X3VwZGF0ZV9nYShlbnRyeSwgY3B1LCBnYV9sb2dfaW50cik7XFxuK1xcdF9fYW1kX2lvbW11X3VwZGF0ZV9nYShlbnRyeSwgYXBpY2lkLCB3YWtldXBfaW50ciwgaXNfcnVubmluZyk7XFxuIFxcbiBcXHRyZXR1cm4gbW9kaWZ5X2lydGVfZ2EoaXJfZGF0YS1cXHUwMDNlaW9tbXUsIGlyX2RhdGEtXFx1MDAzZWlycV8yX2lydGUuZGV2aWQsXFxuIFxcdFxcdFxcdCAgICAgIGlyX2RhdGEtXFx1MDAzZWlycV8yX2lydGUuaW5kZXgsIGVudHJ5KTtcXG5AQCAtNDEwNyw4ICs0MTE3LDkgQEAgc3RhdGljIGludCBhbWRfaXJfc2V0X3ZjcHVfYWZmaW5pdHkoc3RydWN0IGlycV9kYXRhICpkYXRhLCB2b2lkICppbmZvKVxcbiBcXHRcXHRpcl9kYXRhLVxcdTAwM2VnYV92ZWN0b3IgPSBwaV9kYXRhLVxcdTAwM2V2ZWN0b3I7XFxuIFxcdFxcdGlyX2RhdGEtXFx1MDAzZWdhX3RhZyA9IHBpX2RhdGEtXFx1MDAzZWdhX3RhZztcXG4gXFx0XFx0aWYgKHBpX2RhdGEtXFx1MDAzZWlzX2d1ZXN0X21vZGUpXFxuLVxcdFxcdFxcdHJldCA9IGFtZF9pb21tdV9hY3RpdmF0ZV9ndWVzdF9tb2RlKGlyX2RhdGEsIHBpX2RhdGEtXFx1MDAzZWNwdSxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIHBpX2RhdGEtXFx1MDAzZWdhX2xvZ19pbnRyKTtcXG4rXFx0XFx0XFx0cmV0ID0gYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUoaXJfZGF0YSwgcGlfZGF0YS1cXHUwMDNlYXBpY2lkLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgcGlfZGF0YS1cXHUwMDNld2FrZXVwX2ludHIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBwaV9kYXRhLVxcdTAwM2Vpc19ydW5uaW5nKTtcXG4gXFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRyZXQgPSBhbWRfaW9tbXVfZGVhY3RpdmF0ZV9ndWVzdF9tb2RlKGlyX2RhdGEpO1xcbiBcXHR9IGVsc2Uge1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2FtZC1pb21tdS5oIGIvaW5jbHVkZS9saW51eC9hbWQtaW9tbXUuaFxcbmluZGV4IGVkY2VlOWY1MzM1YTZmLi43MjlkODJjNGUwOWUyNyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2FtZC1pb21tdS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9hbWQtaW9tbXUuaFxcbkBAIC0zMCw4ICszMCwxMCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYW1kX2lvbW11X2RldGVjdCh2b2lkKSB7IH1cXG4gLyogSU9NTVUgQVZJQyBGdW5jdGlvbiAqL1xcbiBleHRlcm4gaW50IGFtZF9pb21tdV9yZWdpc3Rlcl9nYV9sb2dfbm90aWZpZXIoaW50ICgqbm90aWZpZXIpKHUzMikpO1xcbiBcXG4tZXh0ZXJuIGludCBhbWRfaW9tbXVfdXBkYXRlX2dhKHZvaWQgKmRhdGEsIGludCBjcHUsIGJvb2wgZ2FfbG9nX2ludHIpO1xcbi1leHRlcm4gaW50IGFtZF9pb21tdV9hY3RpdmF0ZV9ndWVzdF9tb2RlKHZvaWQgKmRhdGEsIGludCBjcHUsIGJvb2wgZ2FfbG9nX2ludHIpO1xcbitleHRlcm4gaW50IGFtZF9pb21tdV91cGRhdGVfZ2Eodm9pZCAqZGF0YSwgaW50IGFwaWNpZCwgYm9vbCB3YWtldXBfaW50cixcXG4rXFx0XFx0XFx0ICAgICAgIGJvb2wgaXNfcnVubmluZyk7XFxuK2V4dGVybiBpbnQgYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUodm9pZCAqZGF0YSwgaW50IGFwaWNpZCwgYm9vbCB3YWtldXBfaW50cixcXG4rXFx0XFx0XFx0XFx0XFx0IGJvb2wgaXNfcnVubmluZyk7XFxuIGV4dGVybiBpbnQgYW1kX2lvbW11X2RlYWN0aXZhdGVfZ3Vlc3RfbW9kZSh2b2lkICpkYXRhKTtcXG4gXFxuICNlbHNlIC8qIGRlZmluZWQoQ09ORklHX0FNRF9JT01NVSkgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfSVJRX1JFTUFQKSAqL1xcbkBAIC00MiwxMiArNDQsMTQgQEAgYW1kX2lvbW11X3JlZ2lzdGVyX2dhX2xvZ19ub3RpZmllcihpbnQgKCpub3RpZmllcikodTMyKSlcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgaW50IGFtZF9pb21tdV91cGRhdGVfZ2Eodm9pZCAqZGF0YSwgaW50IGNwdSwgYm9vbCBnYV9sb2dfaW50cilcXG4rc3RhdGljIGlubGluZSBpbnQgYW1kX2lvbW11X3VwZGF0ZV9nYSh2b2lkICpkYXRhLCBpbnQgYXBpY2lkLCBib29sIHdha2V1cF9pbnRyLFxcbitcXHRcXHRcXHRcXHQgICAgICBib29sIGlzX3J1bm5pbmcpXFxuIHtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgaW50IGFtZF9pb21tdV9hY3RpdmF0ZV9ndWVzdF9tb2RlKHZvaWQgKmRhdGEsIGludCBjcHUsIGJvb2wgZ2FfbG9nX2ludHIpXFxuK3N0YXRpYyBpbmxpbmUgaW50IGFtZF9pb21tdV9hY3RpdmF0ZV9ndWVzdF9tb2RlKHZvaWQgKmRhdGEsIGludCBhcGljaWQsIGJvb2wgd2FrZXVwX2ludHIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdGJvb2wgaXNfcnVubmluZylcXG4ge1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbkBAIC03Niw0ICs4MCw1IEBAIHN0YXRpYyBpbmxpbmUgaW50IGFtZF9pb21tdV9zbnBfZGlzYWJsZSh2b2lkKSB7IHJldHVybiAwOyB9XFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBhbWRfaW9tbXVfc2V2X3Rpb19zdXBwb3J0ZWQodm9pZCkgeyByZXR1cm4gZmFsc2U7IH1cXG4gI2VuZGlmXFxuIFxcbitleHRlcm4gYm9vbCBhbWRfaW9tbXVfZ2FwcGk7XFxuICNlbmRpZiAvKiBfQVNNX1g4Nl9BTURfSU9NTVVfSCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxMzozNjoyNC43NzMyMjY4OTVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE2MjU5NzQxMzI4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1fQU1EXCIsXG4gICAgXCJBTURfSU9NTVVcIixcbiAgICBcIklSUV9SRU1BUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImF2aWNfYWRkX3ZjcHVfdG9fZ2FwcGlfd2FrZXVwX2xpc3RcIixcbiAgICBcImF2aWNfcmVtb3ZlX3ZjcHVfZnJvbV9nYXBwaV93YWtldXBfbGlzdFwiLFxuICAgIFwiYXZpY19nYXBwaV93YWtldXBfaGFuZGxlclwiLFxuICAgIFwiYXZpY19waV91cGRhdGVfaXJ0ZVwiLFxuICAgIFwiYXZpY191cGRhdGVfaW9tbXVfdmNwdV9hZmZpbml0eVwiLFxuICAgIFwiX19hbWRfaW9tbXVfdXBkYXRlX2dhXCIsXG4gICAgXCJhbWRfaW9tbXVfdXBkYXRlX2dhXCIsXG4gICAgXCJhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgR0FQUEkgKEd1ZXN0IEFQSUMgUG9zdGVkIEludGVycnVwdHMpIHN1cHBvcnQgZm9yIEFNRCBJT01NVSBhbmQgS1ZNIFNWTSBBVklDLiBJdCBtb2RpZmllcyB0aGUgSVJURSBjb25maWd1cmF0aW9uIGZvciBwb3N0ZWQgaW50ZXJydXB0cyBhbmQgaW50cm9kdWNlcyBhIG5ldyB3YWtldXAgbGlzdCBmb3IgR0FQUEkgaW4gS1ZNLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSB2aXJ0dWFsaXphdGlvbiBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjMDBjNWFjZGQ0MmI0MGRiMjBmNDFjMDE5Zjk5MTY4OTU2MzgwZTFlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgMTMgMTM6MzY6MjIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0XG5pbmRleCA5NzAwN2Y0ZjY5ZDRlOC4uZDI3ZjEwY2JiMDA0Y2MgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dFxuKysrIGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHRcbkBAIC00NTUsNyArNDU1LDggQEAgS2VybmVsIHBhcmFtZXRlcnNcbiBcdFx0XHRcdCAgICAgICAgICB0byA0IEtpQi5cbiBcdFx0XHR2Ml9wZ3NpemVzX29ubHkgLSBMaW1pdCBwYWdlLXNpemVzIHVzZWQgZm9yIHYxIHBhZ2UtdGFibGVzXG4gXHRcdFx0XHQgICAgICAgICAgdG8gNEtpQi8yTWliLzFHaUIuXG4tXG4rXHRcdFx0Z2FwcGlcdFx0LSBVc2UgR0FQUEkgaW5zdGVhZCBvZiBHQUxPRyBmb3IgdkNQVVxuK1x0XHRcdFx0XHQgIHdha2V1cCBub3RpZmljYXRpb24uXG4gXG4gXHRhbWRfaW9tbXVfZHVtcD1cdFtIVyxYODYtNjRdXG4gXHRcdFx0RW5hYmxlIEFNRCBJT01NVSBkcml2ZXIgb3B0aW9uIHRvIGR1bXAgdGhlIEFDUEkgdGFibGVcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcnFfcmVtYXBwaW5nLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcnFfcmVtYXBwaW5nLmhcbmluZGV4IDM3Yjk0ZjQ4NGVmMzM4Li5hZjBjZGZhMzJjNDQ3ZiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lycV9yZW1hcHBpbmcuaFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaXJxX3JlbWFwcGluZy5oXG5AQCAtMzUsOCArMzUsOSBAQCBzdHJ1Y3QgYW1kX2lvbW11X3BpX2RhdGEge1xuIFx0dTY0IHZhcGljX2FkZHI7XHRcdC8qIFBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIHZDUFUncyB2QVBJQy4gKi9cbiBcdHUzMiBnYV90YWc7XG4gXHR1MzIgdmVjdG9yO1x0XHQvKiBHdWVzdCB2ZWN0b3Igb2YgdGhlIGludGVycnVwdCAqL1xuLVx0aW50IGNwdTtcbi1cdGJvb2wgZ2FfbG9nX2ludHI7XG4rXHRpbnQgYXBpY2lkO1xuK1x0Ym9vbCB3YWtldXBfaW50cjtcbitcdGJvb2wgaXNfcnVubmluZztcbiBcdGJvb2wgaXNfZ3Vlc3RfbW9kZTtcbiBcdHZvaWQgKmlyX2RhdGE7XG4gfTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oXG5pbmRleCBiY2ZlYjVlN2MwZWRmMi4uYWRkOGI3Mjc0Y2MyZjggMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmhcbkBAIC0yNTksMTEgKzI1OSwxMiBAQCBzdHJ1Y3QgX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKSB2bWNiX2NvbnRyb2xfYXJlYSB7XG4gI2RlZmluZSBBVklDX0xPR0lDQUxfSURfRU5UUllfVkFMSURfTUFTS1x0XHQoMSBcdTAwM2NcdTAwM2MgMzEpXG4gXG4gLypcbi0gKiBHQV9MT0dfSU5UUiBpcyBhIHN5bnRoZXRpYyBmbGFnIHRoYXQncyBuZXZlciBwcm9wYWdhdGVkIHRvIGhhcmR3YXJlLXZpc2libGVcbi0gKiB0YWJsZXMuICBHQV9MT0dfSU5UUiBpcyBzZXQgaWYgdGhlIHZDUFUgbmVlZHMgZGV2aWNlIHBvc3RlZCBJUlFzIHRvIGdlbmVyYXRlXG4tICogR0EgbG9nIGludGVycnVwdHMgdG8gd2FrZSB0aGUgdkNQVSAoYmVjYXVzZSBpdCdzIGJsb2NraW5nIG9yIGFib3V0IHRvIGJsb2NrKS5cbisgKiBXQUtFVVBfSU5UUiBpcyBhIHN5bnRoZXRpYyBmbGFnIHRoYXQncyBuZXZlciBwcm9wYWdhdGVkIHRvIGhhcmR3YXJlLXZpc2libGVcbisgKiB0YWJsZXMuICBXQUtFVVBfSU5UUiBpcyBzZXQgaWYgdGhlIHZDUFUgbmVlZHMgZGV2aWNlIHBvc3RlZCBJUlFzIHRvIGdlbmVyYXRlXG4rICogR0EgbG9nL0dBUFBJIGludGVycnVwdHMgdG8gd2FrZSB0aGUgdkNQVSAoYmVjYXVzZSBpdCdzIGJsb2NraW5nIG9yIGFib3V0IHRvXG4rICogYmxvY2spLlxuICAqL1xuLSNkZWZpbmUgQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9HQV9MT0dfSU5UUlx0XHRCSVRfVUxMKDYxKVxuKyNkZWZpbmUgQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9XQUtFVVBfSU5UUlx0XHRCSVRfVUxMKDYxKVxuIFxuICNkZWZpbmUgQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9IT1NUX1BIWVNJQ0FMX0lEX01BU0tcdEdFTk1BU0tfVUxMKDExLCAwKVxuICNkZWZpbmUgQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9CQUNLSU5HX1BBR0VfTUFTS1x0R0VOTUFTS19VTEwoNTEsIDEyKVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vYXZpYy5jIGIvYXJjaC94ODYva3ZtL3N2bS9hdmljLmNcbmluZGV4IGNkZDVhNmRjNjQ2ZjExLi45ODJhNTk4ODUzMmZmNCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vYXZpYy5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuY1xuQEAgLTYzLDYgKzYzLDkgQEBcbiBcdGdhX3RhZztcdFx0XHRcdFx0XHRcdFx0XFxcbiB9KVxuIFxuK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgbGlzdF9oZWFkLCBnYXBwaV92Y3B1X3dha2V1cF9saXN0KTtcbitzdGF0aWMgREVGSU5FX1BFUl9DUFUocmF3X3NwaW5sb2NrX3QsIGdhcHBpX3ZjcHVfd2FrZXVwX2xpc3RfbG9jayk7XG4rXG4gc3RhdGljX2Fzc2VydChfX0FWSUNfR0FUQUcoQVZJQ19WTV9JRF9NQVNLLCBBVklDX1ZDUFVfSURYX01BU0spID09IC0xdSk7XG4gXG4gI2RlZmluZSBBVklDX0FVVE9fTU9ERSAtMVxuQEAgLTg3NCw2ICs4NzcsOSBAQCBpbnQgYXZpY19pbml0X3ZjcHUoc3RydWN0IHZjcHVfc3ZtICpzdm0pXG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZzdm0tXHUwMDNlaXJfbGlzdCk7XG4gXHRyYXdfc3Bpbl9sb2NrX2luaXQoXHUwMDI2c3ZtLVx1MDAzZWlyX2xpc3RfbG9jayk7XG4gXG4rXHRJTklUX0xJU1RfSEVBRChcdTAwMjZzdm0tXHUwMDNlZ2FwcGlfdmNwdV93YWtldXBfbGlzdCk7XG4rXHRzdm0tXHUwMDNlZ2FwcGlfY3B1ID0gLTE7XG4rXG4gXHRpZiAoIWVuYWJsZV9hcGljdiB8fCAhaXJxY2hpcF9pbl9rZXJuZWwodmNwdS1cdTAwM2Vrdm0pKVxuIFx0XHRyZXR1cm4gMDtcbiBcbkBAIC04ODYsNiArODkyLDQyIEBAIGludCBhdmljX2luaXRfdmNwdShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSlcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGF2aWNfYWRkX3ZjcHVfdG9fZ2FwcGlfd2FrZXVwX2xpc3Qoc3RydWN0IHZjcHVfc3ZtICpzdm0sIGludCBjcHUpXG4re1xuK1x0c3RydWN0IGxpc3RfaGVhZCAqd2FrZXVwX2xpc3Q7XG4rXHRyYXdfc3BpbmxvY2tfdCAqc3BpbmxvY2s7XG4rXG4rXHRpZiAoV0FSTl9PTih1bmxpa2VseShjcHUgXHUwMDNjIDApKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0d2FrZXVwX2xpc3QgPSBcdTAwMjZwZXJfY3B1KGdhcHBpX3ZjcHVfd2FrZXVwX2xpc3QsIGNwdSk7XG4rXHRzcGlubG9jayA9IFx1MDAyNnBlcl9jcHUoZ2FwcGlfdmNwdV93YWtldXBfbGlzdF9sb2NrLCBjcHUpO1xuK1x0Z3VhcmQocmF3X3NwaW5sb2NrX2lycXNhdmUpKHNwaW5sb2NrKTtcbitcdGlmIChsaXN0X2VtcHR5KFx1MDAyNnN2bS1cdTAwM2VnYXBwaV92Y3B1X3dha2V1cF9saXN0KSlcbitcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZzdm0tXHUwMDNlZ2FwcGlfdmNwdV93YWtldXBfbGlzdCwgd2FrZXVwX2xpc3QpO1xuK31cbitcbitzdGF0aWMgdm9pZCBhdmljX3JlbW92ZV92Y3B1X2Zyb21fZ2FwcGlfd2FrZXVwX2xpc3Qoc3RydWN0IHZjcHVfc3ZtICpzdm0sIGludCBjcHUpXG4re1xuK1x0cmF3X3NwaW5sb2NrX3QgKnNwaW5sb2NrO1xuK1xuK1x0aWYgKFdBUk5fT04odW5saWtlbHkoY3B1IFx1MDAzYyAwKSkpXG4rXHRcdHJldHVybjtcbitcbitcdHNwaW5sb2NrID0gXHUwMDI2cGVyX2NwdShnYXBwaV92Y3B1X3dha2V1cF9saXN0X2xvY2ssIGNwdSk7XG4rXHRndWFyZChyYXdfc3BpbmxvY2tfaXJxc2F2ZSkoc3BpbmxvY2spO1xuK1x0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNnN2bS1cdTAwM2VnYXBwaV92Y3B1X3dha2V1cF9saXN0KSlcbitcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZzdm0tXHUwMDNlZ2FwcGlfdmNwdV93YWtldXBfbGlzdCk7XG4rfVxuK1xuK3ZvaWQgYXZpY19kZXN0cm95X3ZjcHUoc3RydWN0IHZjcHVfc3ZtICpzdm0pXG4re1xuK1x0aWYgKHN2bS1cdTAwM2VnYXBwaV9jcHUgIT0gLTEgXHUwMDI2XHUwMDI2IGFtZF9pb21tdV9nYXBwaSkge1xuK1x0XHRhdmljX3JlbW92ZV92Y3B1X2Zyb21fZ2FwcGlfd2FrZXVwX2xpc3Qoc3ZtLCBzdm0tXHUwMDNlZ2FwcGlfY3B1KTtcbitcdFx0c3ZtLVx1MDAzZWdhcHBpX2NwdSA9IC0xO1xuK1x0fVxuK31cbitcbiB2b2lkIGF2aWNfYXBpY3ZfcG9zdF9zdGF0ZV9yZXN0b3JlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHRhdmljX2hhbmRsZV9kZnJfdXBkYXRlKHZjcHUpO1xuQEAgLTg5NiwxMyArOTM4LDE4IEBAIHN0YXRpYyB2b2lkIHN2bV9pcl9saXN0X2RlbChzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFmZCAqaXJxZmQpXG4ge1xuIFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0gaXJxZmQtXHUwMDNlaXJxX2J5cGFzc192Y3B1O1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbitcdHN0cnVjdCB2Y3B1X3N2bSAqc3ZtO1xuIFxuIFx0aWYgKCF2Y3B1KVxuIFx0XHRyZXR1cm47XG4gXG4tXHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2dG9fc3ZtKHZjcHUpLVx1MDAzZWlyX2xpc3RfbG9jaywgZmxhZ3MpO1xuK1x0c3ZtID0gdG9fc3ZtKHZjcHUpO1xuK1xuK1x0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnN2bS1cdTAwM2Vpcl9saXN0X2xvY2ssIGZsYWdzKTtcbiBcdGxpc3RfZGVsKFx1MDAyNmlycWZkLVx1MDAzZXZjcHVfbGlzdCk7XG4tXHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ0b19zdm0odmNwdSktXHUwMDNlaXJfbGlzdF9sb2NrLCBmbGFncyk7XG4rXHRpZiAoYW1kX2lvbW11X2dhcHBpIFx1MDAyNlx1MDAyNiBsaXN0X2VtcHR5KFx1MDAyNnN2bS1cdTAwM2Vpcl9saXN0KSlcbitcdFx0YXZpY19yZW1vdmVfdmNwdV9mcm9tX2dhcHBpX3dha2V1cF9saXN0KHN2bSwgc3ZtLVx1MDAzZWdhcHBpX2NwdSk7XG4rXHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZzdm0tXHUwMDNlaXJfbGlzdF9sb2NrLCBmbGFncyk7XG4gfVxuIFxuIGludCBhdmljX3BpX3VwZGF0ZV9pcnRlKHN0cnVjdCBrdm1fa2VybmVsX2lycWZkICppcnFmZCwgc3RydWN0IGt2bSAqa3ZtLFxuQEAgLTkyMyw4ICs5NzAsNiBAQCBpbnQgYXZpY19waV91cGRhdGVfaXJ0ZShzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFmZCAqaXJxZmQsIHN0cnVjdCBrdm0gKmt2bSxcbiBcdFx0ICogaWYgQVZJQyBpcyBlbmFibGVkL3VuaW5oaWJpdGVkIGluIHRoZSBmdXR1cmUuXG4gXHRcdCAqL1xuIFx0XHRzdHJ1Y3QgYW1kX2lvbW11X3BpX2RhdGEgcGlfZGF0YSA9IHtcbi1cdFx0XHQuZ2FfdGFnID0gQVZJQ19HQVRBRyh0b19rdm1fc3ZtKGt2bSktXHUwMDNlYXZpY192bV9pZCxcbi1cdFx0XHRcdFx0ICAgICB2Y3B1LVx1MDAzZXZjcHVfaWR4KSxcbiBcdFx0XHQuaXNfZ3Vlc3RfbW9kZSA9IGt2bV92Y3B1X2FwaWN2X2FjdGl2ZSh2Y3B1KSxcbiBcdFx0XHQudmFwaWNfYWRkciA9IGF2aWNfZ2V0X2JhY2tpbmdfcGFnZV9hZGRyZXNzKHRvX3N2bSh2Y3B1KSksXG4gXHRcdFx0LnZlY3RvciA9IHZlY3RvcixcbkBAIC05MzIsNiArOTc3LDcgQEAgaW50IGF2aWNfcGlfdXBkYXRlX2lydGUoc3RydWN0IGt2bV9rZXJuZWxfaXJxZmQgKmlycWZkLCBzdHJ1Y3Qga3ZtICprdm0sXG4gXHRcdHN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpO1xuIFx0XHR1NjQgZW50cnk7XG4gXHRcdGludCByZXQ7XG4rXHRcdGJvb2wgaXNfdmNwdV93YWl0aW5nID0gZmFsc2U7XG4gXG4gXHRcdC8qXG4gXHRcdCAqIFByZXZlbnQgdGhlIHZDUFUgZnJvbSBiZWluZyBzY2hlZHVsZWQgb3V0IG9yIG1pZ3JhdGVkIHVudGlsXG5AQCAtOTQ3LDE3ICs5OTMsMzMgQEAgaW50IGF2aWNfcGlfdXBkYXRlX2lydGUoc3RydWN0IGt2bV9rZXJuZWxfaXJxZmQgKmlycWZkLCBzdHJ1Y3Qga3ZtICprdm0sXG4gXHRcdCAqIHNjaGVkdWxlZCBvdXQsIEtWTSB3aWxsIHVwZGF0ZSB0aGUgcENQVSBpbmZvIHdoZW4gdGhlIHZDUFVcbiBcdFx0ICogaXMgYXdha2VuZWQgYW5kL29yIHNjaGVkdWxlZCBpbi4gIFNlZSBhbHNvIGF2aWNfdmNwdV9sb2FkKCkuXG4gXHRcdCAqL1xuK1x0XHRpZiAoYW1kX2lvbW11X2dhcHBpKVxuK1x0XHRcdHBpX2RhdGEuZ2FfdGFnID0gUE9TVEVEX0lOVFJfV0FLRVVQX1ZFQ1RPUjtcbitcdFx0ZWxzZVxuK1x0XHRcdHBpX2RhdGEuZ2FfdGFnID0gQVZJQ19HQVRBRyh0b19rdm1fc3ZtKGt2bSktXHUwMDNlYXZpY192bV9pZCxcbitcdFx0XHRcdFx0XHQgICAgdmNwdS1cdTAwM2V2Y3B1X2lkeCk7XG4rXG4gXHRcdGVudHJ5ID0gc3ZtLVx1MDAzZWF2aWNfcGh5c2ljYWxfaWRfZW50cnk7XG4gXHRcdGlmIChlbnRyeSBcdTAwMjYgQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9JU19SVU5OSU5HX01BU0spIHtcbi1cdFx0XHRwaV9kYXRhLmNwdSA9IGVudHJ5IFx1MDAyNiBBVklDX1BIWVNJQ0FMX0lEX0VOVFJZX0hPU1RfUEhZU0lDQUxfSURfTUFTSztcbitcdFx0XHRwaV9kYXRhLmFwaWNpZCA9IGVudHJ5IFx1MDAyNiBBVklDX1BIWVNJQ0FMX0lEX0VOVFJZX0hPU1RfUEhZU0lDQUxfSURfTUFTSztcbitcdFx0XHRwaV9kYXRhLmlzX3J1bm5pbmcgPSB0cnVlO1xuIFx0XHR9IGVsc2Uge1xuLVx0XHRcdHBpX2RhdGEuY3B1ID0gLTE7XG4tXHRcdFx0cGlfZGF0YS5nYV9sb2dfaW50ciA9IGVudHJ5IFx1MDAyNiBBVklDX1BIWVNJQ0FMX0lEX0VOVFJZX0dBX0xPR19JTlRSO1xuK1x0XHRcdHBpX2RhdGEuYXBpY2lkID0gLTE7XG4rXHRcdFx0cGlfZGF0YS53YWtldXBfaW50ciA9IGVudHJ5IFx1MDAyNiBBVklDX1BIWVNJQ0FMX0lEX0VOVFJZX1dBS0VVUF9JTlRSO1xuK1x0XHRcdHBpX2RhdGEuaXNfcnVubmluZyA9IGZhbHNlO1xuK1xuK1x0XHRcdGlmIChhbWRfaW9tbXVfZ2FwcGkpIHtcbitcdFx0XHRcdHBpX2RhdGEuYXBpY2lkID0ga3ZtX2NwdV9nZXRfYXBpY2lkKHN2bS1cdTAwM2VnYXBwaV9jcHUpO1xuK1x0XHRcdFx0aWYgKGxpc3RfZW1wdHkoXHUwMDI2c3ZtLVx1MDAzZWlyX2xpc3QpKSB7XG4rXHRcdFx0XHRcdGF2aWNfYWRkX3ZjcHVfdG9fZ2FwcGlfd2FrZXVwX2xpc3Qoc3ZtLCBzdm0tXHUwMDNlZ2FwcGlfY3B1KTtcbitcdFx0XHRcdFx0aXNfdmNwdV93YWl0aW5nID0gdHJ1ZTtcbitcdFx0XHRcdH1cbitcdFx0XHR9XG4gXHRcdH1cbiBcbiBcdFx0cmV0ID0gaXJxX3NldF92Y3B1X2FmZmluaXR5KGhvc3RfaXJxLCBcdTAwMjZwaV9kYXRhKTtcbiBcdFx0aWYgKHJldClcbi1cdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHRcdGdvdG8gZ2FwcGlfZXJyX291dDtcbiBcbiBcdFx0LypcbiBcdFx0ICogUmV2ZXJ0IHRvIGxlZ2FjeSBtb2RlIGlmIHRoZSBJT01NVSBkaWRuJ3QgcHJvdmlkZSBtZXRhZGF0YVxuQEAgLTk2NiwxMiArMTAyOCwxNyBAQCBpbnQgYXZpY19waV91cGRhdGVfaXJ0ZShzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFmZCAqaXJxZmQsIHN0cnVjdCBrdm0gKmt2bSxcbiBcdFx0ICovXG4gXHRcdGlmIChXQVJOX09OX09OQ0UoIXBpX2RhdGEuaXJfZGF0YSkpIHtcbiBcdFx0XHRpcnFfc2V0X3ZjcHVfYWZmaW5pdHkoaG9zdF9pcnEsIE5VTEwpO1xuLVx0XHRcdHJldHVybiAtRUlPO1xuK1x0XHRcdHJldCA9IC1FSU87XG4rXHRcdFx0Z290byBnYXBwaV9lcnJfb3V0O1xuIFx0XHR9XG4gXG4gXHRcdGlycWZkLVx1MDAzZWlycV9ieXBhc3NfZGF0YSA9IHBpX2RhdGEuaXJfZGF0YTtcbiBcdFx0bGlzdF9hZGQoXHUwMDI2aXJxZmQtXHUwMDNldmNwdV9saXN0LCBcdTAwMjZzdm0tXHUwMDNlaXJfbGlzdCk7XG4gXHRcdHJldHVybiAwO1xuK2dhcHBpX2Vycl9vdXQ6XG4rXHRcdGlmIChpc192Y3B1X3dhaXRpbmcpXG4rXHRcdFx0YXZpY19yZW1vdmVfdmNwdV9mcm9tX2dhcHBpX3dha2V1cF9saXN0KHN2bSwgc3ZtLVx1MDAzZWdhcHBpX2NwdSk7XG4rXHRcdHJldHVybiByZXQ7XG4gXHR9XG4gXHRyZXR1cm4gaXJxX3NldF92Y3B1X2FmZmluaXR5KGhvc3RfaXJxLCBOVUxMKTtcbiB9XG5AQCAtOTkxLDIzICsxMDU4LDI0IEBAIGVudW0gYXZpY192Y3B1X2FjdGlvbiB7XG4gXHQgKiBObyB1bmlxdWUgYWN0aW9uIGlzIHJlcXVpcmVkIHRvIGRlYWwgd2l0aCBhIHZDUFUgdGhhdCBzdG9wcy9zdGFydHNcbiBcdCAqIHJ1bm5pbmcuICBBIHZDUFUgdGhhdCBzdGFydHMgcnVubmluZyBieSBkZWZpbml0aW9uIHN0b3BzIGJsb2NraW5nIGFzXG4gXHQgKiB3ZWxsLCBhbmQgYSB2Q1BVIHRoYXQgc3RvcHMgcnVubmluZyBjYW4ndCBoYXZlIGJlZW4gYmxvY2tpbmcsIGkuZS5cbi1cdCAqIGRvZXNuJ3QgbmVlZCB0byB0b2dnbGUgR0FMb2dJbnRyLlxuK1x0ICogZG9lc24ndCBuZWVkIHRvIHRvZ2dsZSBob3N0IHdha2V1cCBub3RpZmljYXRpb24uXG4gXHQgKi9cbiBcdEFWSUNfU1RBUlRfUlVOTklOR1x0PSAwLFxuIFx0QVZJQ19TVE9QX1JVTk5JTkdcdD0gMCxcbiBcbiBcdC8qXG4tXHQgKiBXaGVuIGEgdkNQVSBzdGFydHMgYmxvY2tpbmcsIEtWTSBuZWVkcyB0byBzZXQgdGhlIEdBTG9nSW50ciBmbGFnXG4tXHQgKiBpbnQgYWxsIGFzc29jaWF0ZWQgSVJURXMgc28gdGhhdCBLVk0gY2FuIHdha2UgdGhlIHZDUFUgaWYgYW4gSVJRIGlzXG4tXHQgKiBzZW50IHRvIHRoZSB2Q1BVLlxuK1x0ICogV2hlbiBhIHZDUFUgc3RhcnRzIGJsb2NraW5nLCBLVk0gbmVlZHMgdG8gcmVxdWVzdCBob3N0IHdha2V1cFxuK1x0ICogbm90aWZpY2F0aW9uIGluIGFsbCBhc3NvY2lhdGVkIElSVEVzIHNvIHRoYXQgS1ZNIGNhbiB3YWtlIHRoZSB2Q1BVXG4rXHQgKiBpZiBhbiBJUlEgaXMgc2VudCB0byB0aGUgdkNQVS5cbiBcdCAqL1xuIFx0QVZJQ19TVEFSVF9CTE9DS0lOR1x0PSBCSVQoMSksXG4gfTtcbiBcbi1zdGF0aWMgdm9pZCBhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSxcbi1cdFx0XHRcdFx0ICAgIGVudW0gYXZpY192Y3B1X2FjdGlvbiBhY3Rpb24pXG4rc3RhdGljIHZvaWQgYXZpY191cGRhdGVfaW9tbXVfdmNwdV9hZmZpbml0eShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBhcGljaWQsXG4rXHRcdFx0XHRcdCAgICBpbnQgY3B1LCBlbnVtIGF2aWNfdmNwdV9hY3Rpb24gYWN0aW9uKVxuIHtcbi1cdGJvb2wgZ2FfbG9nX2ludHIgPSAoYWN0aW9uIFx1MDAyNiBBVklDX1NUQVJUX0JMT0NLSU5HKTtcbitcdGJvb2wgd2FrZXVwX2ludHIgPSAoYWN0aW9uIFx1MDAyNiBBVklDX1NUQVJUX0JMT0NLSU5HKTtcbitcdGJvb2wgaXNfcnVubmluZyA9IGFwaWNpZCBcdTAwM2U9IDA7XG4gXHRzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTtcbiBcdHN0cnVjdCBrdm1fa2VybmVsX2lycWZkICppcnFmZDtcbiBcbkBAIC0xMDE1LDE4ICsxMDgzLDM2IEBAIHN0YXRpYyB2b2lkIGF2aWNfdXBkYXRlX2lvbW11X3ZjcHVfYWZmaW5pdHkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1LFxuIFxuIFx0LypcbiBcdCAqIEhlcmUsIHdlIGdvIHRocm91Z2ggdGhlIHBlci12Y3B1IGlyX2xpc3QgdG8gdXBkYXRlIGFsbCBleGlzdGluZ1xuLVx0ICogaW50ZXJydXB0IHJlbWFwcGluZyB0YWJsZSBlbnRyeSB0YXJnZXRpbmcgdGhpcyB2Y3B1LlxuK1x0ICogaW50ZXJydXB0IHJlbWFwcGluZyB0YWJsZSBlbnRyaWVzIHRhcmdldGluZyB0aGlzIHZjcHUuXG4gXHQgKi9cbi1cdGlmIChsaXN0X2VtcHR5KFx1MDAyNnN2bS1cdTAwM2Vpcl9saXN0KSlcbitcdGlmIChsaXN0X2VtcHR5KFx1MDAyNnN2bS1cdTAwM2Vpcl9saXN0KSkge1xuK1x0XHRpZiAoYW1kX2lvbW11X2dhcHBpIFx1MDAyNlx1MDAyNiBjcHUgXHUwMDNlPSAwKVxuK1x0XHRcdHN2bS1cdTAwM2VnYXBwaV9jcHUgPSBjcHU7XG4gXHRcdHJldHVybjtcbitcdH1cbitcbitcdGlmIChpc19ydW5uaW5nIFx1MDAyNlx1MDAyNiBhbWRfaW9tbXVfZ2FwcGkpIHtcbitcdFx0aWYgKHN2bS1cdTAwM2VnYXBwaV9jcHUgIT0gLTEpXG4rXHRcdFx0LypcbitcdFx0XHQgKiBIYW5kbGUgaW5pdGlhbCBzdGF0ZSB3aGVuIHZDUFUgaXMgbG9hZGVkIGZvciB0aGVcbitcdFx0XHQgKiBmaXJzdCB0aW1lIHdpdGhvdXQgYW55IElSUSBhZmZpbml0eS5cbitcdFx0XHQgKi9cbitcdFx0XHRhdmljX3JlbW92ZV92Y3B1X2Zyb21fZ2FwcGlfd2FrZXVwX2xpc3Qoc3ZtLCBzdm0tXHUwMDNlZ2FwcGlfY3B1KTtcbitcbitcdFx0c3ZtLVx1MDAzZWdhcHBpX2NwdSA9IGNwdTsgLyogU3RvcmUgY3B1IG51bWJlciBhcyB0YXJnZXQgZm9yIEdBUFBJICovXG4rXHR9IGVsc2UgaWYgKGFtZF9pb21tdV9nYXBwaSkge1xuK1x0XHRhcGljaWQgPSBrdm1fY3B1X2dldF9hcGljaWQoc3ZtLVx1MDAzZWdhcHBpX2NwdSk7XG4rXHRcdGF2aWNfYWRkX3ZjcHVfdG9fZ2FwcGlfd2FrZXVwX2xpc3Qoc3ZtLCBzdm0tXHUwMDNlZ2FwcGlfY3B1KTtcbitcdH1cbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkoaXJxZmQsIFx1MDAyNnN2bS1cdTAwM2Vpcl9saXN0LCB2Y3B1X2xpc3QpIHtcbiBcdFx0dm9pZCAqZGF0YSA9IGlycWZkLVx1MDAzZWlycV9ieXBhc3NfZGF0YTtcbiBcbiBcdFx0aWYgKCEoYWN0aW9uIFx1MDAyNiBBVklDX1RPR0dMRV9PTl9PRkYpKVxuLVx0XHRcdFdBUk5fT05fT05DRShhbWRfaW9tbXVfdXBkYXRlX2dhKGRhdGEsIGNwdSwgZ2FfbG9nX2ludHIpKTtcbi1cdFx0ZWxzZSBpZiAoY3B1IFx1MDAzZT0gMClcbi1cdFx0XHRXQVJOX09OX09OQ0UoYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUoZGF0YSwgY3B1LCBnYV9sb2dfaW50cikpO1xuK1x0XHRcdFdBUk5fT05fT05DRShhbWRfaW9tbXVfdXBkYXRlX2dhKGRhdGEsIGFwaWNpZCwgd2FrZXVwX2ludHIsIGlzX3J1bm5pbmcpKTtcbitcdFx0ZWxzZSBpZiAoaXNfcnVubmluZylcbitcdFx0XHRXQVJOX09OX09OQ0UoYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUoZGF0YSwgYXBpY2lkLCB3YWtldXBfaW50cixcbitcdFx0XHRcdFx0XHRcdFx0ICAgaXNfcnVubmluZykpO1xuIFx0XHRlbHNlXG4gXHRcdFx0V0FSTl9PTl9PTkNFKGFtZF9pb21tdV9kZWFjdGl2YXRlX2d1ZXN0X21vZGUoZGF0YSkpO1xuIFx0fVxuQEAgLTEwNjMsNyArMTE0OSw3IEBAIHN0YXRpYyB2b2lkIF9fYXZpY192Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1LFxuIFx0V0FSTl9PTl9PTkNFKGVudHJ5IFx1MDAyNiBBVklDX1BIWVNJQ0FMX0lEX0VOVFJZX0lTX1JVTk5JTkdfTUFTSyk7XG4gXG4gXHRlbnRyeSBcdTAwMjY9IH4oQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9IT1NUX1BIWVNJQ0FMX0lEX01BU0sgfFxuLVx0XHQgICBBVklDX1BIWVNJQ0FMX0lEX0VOVFJZX0dBX0xPR19JTlRSKTtcbitcdFx0ICAgQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9XQUtFVVBfSU5UUik7XG4gXHRlbnRyeSB8PSAoaF9waHlzaWNhbF9pZCBcdTAwMjYgQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9IT1NUX1BIWVNJQ0FMX0lEX01BU0spO1xuIFx0ZW50cnkgfD0gQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9JU19SVU5OSU5HX01BU0s7XG4gXG5AQCAtMTA4MCw3ICsxMTY2LDcgQEAgc3RhdGljIHZvaWQgX19hdmljX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUsXG4gXG4gXHRXUklURV9PTkNFKGt2bV9zdm0tXHUwMDNlYXZpY19waHlzaWNhbF9pZF90YWJsZVt2Y3B1LVx1MDAzZXZjcHVfaWRdLCBlbnRyeSk7XG4gXG4tXHRhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5KHZjcHUsIGhfcGh5c2ljYWxfaWQsIGFjdGlvbik7XG4rXHRhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5KHZjcHUsIGhfcGh5c2ljYWxfaWQsIGNwdSwgYWN0aW9uKTtcbiBcbiBcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnN2bS1cdTAwM2Vpcl9saXN0X2xvY2ssIGZsYWdzKTtcbiB9XG5AQCAtMTEyMyw5ICsxMjA5LDkgQEAgc3RhdGljIHZvaWQgX19hdmljX3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZW51bSBhdmljX3ZjcHVfYWN0aW9uIGFjdGlvbilcbiBcdCAqL1xuIFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnN2bS1cdTAwM2Vpcl9saXN0X2xvY2ssIGZsYWdzKTtcbiBcbi1cdGF2aWNfdXBkYXRlX2lvbW11X3ZjcHVfYWZmaW5pdHkodmNwdSwgLTEsIGFjdGlvbik7XG4rXHRhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5KHZjcHUsIC0xLCAtMSwgYWN0aW9uKTtcbiBcbi1cdFdBUk5fT05fT05DRShlbnRyeSBcdTAwMjYgQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9HQV9MT0dfSU5UUik7XG4rXHRXQVJOX09OX09OQ0UoZW50cnkgXHUwMDI2IEFWSUNfUEhZU0lDQUxfSURfRU5UUllfV0FLRVVQX0lOVFIpO1xuIFxuIFx0LypcbiBcdCAqIEtlZXAgdGhlIHByZXZpb3VzIEFQSUMgSUQgaW4gdGhlIGVudHJ5IHNvIHRoYXQgYSByb2d1ZSBkb29yYmVsbCBmcm9tXG5AQCAtMTEzNywxMSArMTIyMywxMSBAQCBzdGF0aWMgdm9pZCBfX2F2aWNfdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBlbnVtIGF2aWNfdmNwdV9hY3Rpb24gYWN0aW9uKVxuIFx0XHRXUklURV9PTkNFKGt2bV9zdm0tXHUwMDNlYXZpY19waHlzaWNhbF9pZF90YWJsZVt2Y3B1LVx1MDAzZXZjcHVfaWRdLCBlbnRyeSk7XG4gXG4gXHQvKlxuLVx0ICogTm90ZSEgIERvbid0IHNldCBBVklDX1BIWVNJQ0FMX0lEX0VOVFJZX0dBX0xPR19JTlRSIGluIHRoZSB0YWJsZSBhc1xuK1x0ICogTm90ZSEgIERvbid0IHNldCBBVklDX1BIWVNJQ0FMX0lEX0VOVFJZX1dBS0VVUF9JTlRSIGluIHRoZSB0YWJsZSBhc1xuIFx0ICogaXQncyBhIHN5bnRoZXRpYyBmbGFnIHRoYXQgdXN1cnBzIGFuIHVudXNlZCBzaG91bGQtYmUtemVybyBiaXQuXG4gXHQgKi9cbiBcdGlmIChhY3Rpb24gXHUwMDI2IEFWSUNfU1RBUlRfQkxPQ0tJTkcpXG4tXHRcdGVudHJ5IHw9IEFWSUNfUEhZU0lDQUxfSURfRU5UUllfR0FfTE9HX0lOVFI7XG4rXHRcdGVudHJ5IHw9IEFWSUNfUEhZU0lDQUxfSURfRU5UUllfV0FLRVVQX0lOVFI7XG4gXG4gXHRzdm0tXHUwMDNlYXZpY19waHlzaWNhbF9pZF9lbnRyeSA9IGVudHJ5O1xuIFxuQEAgLTExNzEsOSArMTI1Nyw5IEBAIHZvaWQgYXZpY192Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gXHRcdC8qXG4gXHRcdCAqIFRoZSB2Q1BVIHdhcyBwcmVlbXB0ZWQgd2hpbGUgYmxvY2tpbmcsIGVuc3VyZSBpdHMgSVJURXMgYXJlXG4tXHRcdCAqIGNvbmZpZ3VyZWQgdG8gZ2VuZXJhdGUgR0EgTG9nIEludGVycnVwdHMuXG4rXHRcdCAqIGNvbmZpZ3VyZWQgdG8gcmVxdWVzdCBob3N0IHdha2V1cCBub3RpZmljYXRpb24uXG4gXHRcdCAqL1xuLVx0XHRpZiAoIShXQVJOX09OX09OQ0UoIShlbnRyeSBcdTAwMjYgQVZJQ19QSFlTSUNBTF9JRF9FTlRSWV9HQV9MT0dfSU5UUikpKSlcbitcdFx0aWYgKCEoV0FSTl9PTl9PTkNFKCEoZW50cnkgXHUwMDI2IEFWSUNfUEhZU0lDQUxfSURfRU5UUllfV0FLRVVQX0lOVFIpKSkpXG4gXHRcdFx0cmV0dXJuO1xuIFx0fVxuIFxuQEAgLTEyOTYsNiArMTM4MiwyMSBAQCBzdGF0aWMgYm9vbCBfX2luaXQgYXZpY193YW50X2F2aWNfZW5hYmxlZCh2b2lkKVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGF2aWNfZ2FwcGlfd2FrZXVwX2hhbmRsZXIodm9pZClcbit7XG4rXHRpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpO1xuK1x0c3RydWN0IGxpc3RfaGVhZCAqdmNwdV93YWtldXBfbGlzdCA9IFx1MDAyNnBlcl9jcHUoZ2FwcGlfdmNwdV93YWtldXBfbGlzdCwgY3B1KTtcbitcdHJhd19zcGlubG9ja190ICpzcGlubG9jayA9IFx1MDAyNnBlcl9jcHUoZ2FwcGlfdmNwdV93YWtldXBfbGlzdF9sb2NrLCBjcHUpO1xuK1x0c3RydWN0IHZjcHVfc3ZtICpzdm07XG4rXG4rXHRyYXdfc3Bpbl9sb2NrKHNwaW5sb2NrKTtcbitcdGxpc3RfZm9yX2VhY2hfZW50cnkoc3ZtLCB2Y3B1X3dha2V1cF9saXN0LCBnYXBwaV92Y3B1X3dha2V1cF9saXN0KSB7XG4rXHRcdGlmIChrdm1fbGFwaWNfZmluZF9oaWdoZXN0X2lycihcdTAwMjZzdm0tXHUwMDNldmNwdSkgXHUwMDNlPSAwKVxuK1x0XHRcdGt2bV92Y3B1X3dha2VfdXAoXHUwMDI2c3ZtLVx1MDAzZXZjcHUpO1xuK1x0fVxuK1x0cmF3X3NwaW5fdW5sb2NrKHNwaW5sb2NrKTtcbit9XG4rXG4gLypcbiAgKiBOb3RlOlxuICAqIC0gVGhlIG1vZHVsZSBwYXJhbSBhdmljIGVuYWJsZSBib3RoIHhBUElDIGFuZCB4MkFQSUMgbW9kZS5cbkBAIC0xMzA0LDEyICsxNDA1LDE4IEBAIHN0YXRpYyBib29sIF9faW5pdCBhdmljX3dhbnRfYXZpY19lbmFibGVkKHZvaWQpXG4gICovXG4gYm9vbCBfX2luaXQgYXZpY19oYXJkd2FyZV9zZXR1cCh2b2lkKVxuIHtcbitcdGludCBjcHU7XG4gXHRhdmljID0gYXZpY193YW50X2F2aWNfZW5hYmxlZCgpO1xuIFx0aWYgKCFhdmljKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRwcl9pbmZvKFwiQVZJQyBlbmFibGVkXFxuXCIpO1xuIFxuK1x0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkge1xuK1x0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZwZXJfY3B1KGdhcHBpX3ZjcHVfd2FrZXVwX2xpc3QsIGNwdSkpO1xuK1x0XHRyYXdfc3Bpbl9sb2NrX2luaXQoXHUwMDI2cGVyX2NwdShnYXBwaV92Y3B1X3dha2V1cF9saXN0X2xvY2ssIGNwdSkpO1xuK1x0fVxuK1xuIFx0LyogQVZJQyBpcyBhIHByZXJlcXVpc2l0ZSBmb3IgeDJBVklDLiAqL1xuIFx0eDJhdmljX2VuYWJsZWQgPSBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfWDJBVklDKTtcbiBcdGlmICh4MmF2aWNfZW5hYmxlZCkge1xuQEAgLTEzMzMsMTIgKzE0NDAsMTYgQEAgYm9vbCBfX2luaXQgYXZpY19oYXJkd2FyZV9zZXR1cCh2b2lkKVxuIFx0XHRlbmFibGVfaXBpdiA9IGZhbHNlO1xuIFxuIFx0YW1kX2lvbW11X3JlZ2lzdGVyX2dhX2xvZ19ub3RpZmllcihcdTAwMjZhdmljX2dhX2xvZ19ub3RpZmllcik7XG4rXHRrdm1fc2V0X3Bvc3RlZF9pbnRyX3dha2V1cF9oYW5kbGVyKFx1MDAyNmF2aWNfZ2FwcGlfd2FrZXVwX2hhbmRsZXIpO1xuIFxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuIHZvaWQgYXZpY19oYXJkd2FyZV91bnNldHVwKHZvaWQpXG4ge1xuLVx0aWYgKGF2aWMpXG4tXHRcdGFtZF9pb21tdV9yZWdpc3Rlcl9nYV9sb2dfbm90aWZpZXIoTlVMTCk7XG4rXHRpZiAoIWF2aWMpXG4rXHRcdHJldHVybjtcbitcbitcdGFtZF9pb21tdV9yZWdpc3Rlcl9nYV9sb2dfbm90aWZpZXIoTlVMTCk7XG4rXHRrdm1fc2V0X3Bvc3RlZF9pbnRyX3dha2V1cF9oYW5kbGVyKE5VTEwpO1xuIH1cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xuaW5kZXggZTAyYTM4ZGE1Mjk2ZTMuLmI2ODcxMzNmODUyOGJhIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xuKysrIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xuQEAgLTEzNTYsNiArMTM1Niw4IEBAIHN0YXRpYyB2b2lkIHN2bV92Y3B1X2ZyZWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIFx0V0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KFx1MDAyNnN2bS1cdTAwM2Vpcl9saXN0KSk7XG4gXG4rXHRhdmljX2Rlc3Ryb3lfdmNwdShzdm0pO1xuK1xuIFx0c3ZtX2xlYXZlX25lc3RlZCh2Y3B1KTtcbiBcdHN2bV9mcmVlX25lc3RlZChzdm0pO1xuIFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmggYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oXG5pbmRleCA1MTM3NDE2YmU1OTNkNy4uNDdkNWJiNWQ3MTAzZGEgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oXG4rKysgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oXG5AQCAtMzYyLDYgKzM2MiwxMCBAQCBzdHJ1Y3QgdmNwdV9zdm0ge1xuIFxuIFx0LyogR3Vlc3QgR0lGIHZhbHVlLCB1c2VkIHdoZW4gdkdJRiBpcyBub3QgZW5hYmxlZCAqL1xuIFx0Ym9vbCBndWVzdF9naWY7XG4rXG4rXHQvKiBHQVBQSSByZWxhdGVkIGZpZWxkcyAqL1xuK1x0c3RydWN0IGxpc3RfaGVhZCBnYXBwaV92Y3B1X3dha2V1cF9saXN0O1xuK1x0aW50IGdhcHBpX2NwdTtcbiB9O1xuIFxuIHN0cnVjdCBzdm1fY3B1X2RhdGEge1xuQEAgLTkwOSw2ICs5MTMsNyBAQCB2b2lkIGF2aWNfaW5pdF92bWNiKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBzdHJ1Y3Qgdm1jYiAqdm1jYik7XG4gaW50IGF2aWNfaW5jb21wbGV0ZV9pcGlfaW50ZXJjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gaW50IGF2aWNfdW5hY2NlbGVyYXRlZF9hY2Nlc3NfaW50ZXJjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gaW50IGF2aWNfaW5pdF92Y3B1KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKTtcbit2b2lkIGF2aWNfZGVzdHJveV92Y3B1KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKTtcbiB2b2lkIGF2aWNfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSk7XG4gdm9pZCBhdmljX3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gdm9pZCBhdmljX2FwaWN2X3Bvc3Rfc3RhdGVfcmVzdG9yZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW9tbXUvYW1kL2FtZF9pb21tdS5oIGIvZHJpdmVycy9pb21tdS9hbWQvYW1kX2lvbW11LmhcbmluZGV4IDgzNGQ4ZmFiZmJhMzg3Li4wNDQxNzljYWIxMmU0YiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvaW9tbXUvYW1kL2FtZF9pb21tdS5oXG4rKysgYi9kcml2ZXJzL2lvbW11L2FtZC9hbWRfaW9tbXUuaFxuQEAgLTQxLDYgKzQxLDcgQEAgaW50IGFtZF9pb21tdV9lbmFibGUodm9pZCk7XG4gdm9pZCBhbWRfaW9tbXVfZGlzYWJsZSh2b2lkKTtcbiBpbnQgYW1kX2lvbW11X3JlZW5hYmxlKGludCBtb2RlKTtcbiBpbnQgYW1kX2lvbW11X2VuYWJsZV9mYXVsdGluZyh1bnNpZ25lZCBpbnQgY3B1KTtcbitleHRlcm4gYm9vbCBhbWRfaW9tbXVfZ2FwcGk7XG4gZXh0ZXJuIGludCBhbWRfaW9tbXVfZ3Vlc3RfaXI7XG4gZXh0ZXJuIGVudW0gcHJvdGVjdGlvbl9kb21haW5fbW9kZSBhbWRfaW9tbXVfcGd0YWJsZTtcbiBleHRlcm4gaW50IGFtZF9pb21tdV9ncHRfbGV2ZWw7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pb21tdS9hbWQvYW1kX2lvbW11X3R5cGVzLmggYi9kcml2ZXJzL2lvbW11L2FtZC9hbWRfaW9tbXVfdHlwZXMuaFxuaW5kZXggZjlmNzE4MDg3ODkzMDMuLmRlMGIyMzMwNjk0NGI4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9pb21tdS9hbWQvYW1kX2lvbW11X3R5cGVzLmhcbisrKyBiL2RyaXZlcnMvaW9tbXUvYW1kL2FtZF9pb21tdV90eXBlcy5oXG5AQCAtOTQsNiArOTQsNyBAQFxuICNkZWZpbmUgRkVBVFVSRV9YMkFQSUNcdFx0QklUX1VMTCgyKVxuICNkZWZpbmUgRkVBVFVSRV9OWFx0XHRCSVRfVUxMKDMpXG4gI2RlZmluZSBGRUFUVVJFX0dUXHRcdEJJVF9VTEwoNClcbisjZGVmaW5lIEZFQVRVUkVfR0FQUElcdFx0QklUX1VMTCg1KVxuICNkZWZpbmUgRkVBVFVSRV9JQVx0XHRCSVRfVUxMKDYpXG4gI2RlZmluZSBGRUFUVVJFX0dBXHRcdEJJVF9VTEwoNylcbiAjZGVmaW5lIEZFQVRVUkVfSEVcdFx0QklUX1VMTCg4KVxuQEAgLTExMyw2ICsxMTQsNyBAQFxuIC8qIEV4dGVuZGVkIEZlYXR1cmUgMiBCaXRzICovXG4gI2RlZmluZSBGRUFUVVJFX1NFVlNOUElPX1NVUFx0QklUX1VMTCgxKVxuICNkZWZpbmUgRkVBVFVSRV9HQ1IzVFJQTU9ERVx0QklUX1VMTCgzKVxuKyNkZWZpbmUgRkVBVFVSRV9HQVBQSURJU1NVUFx0QklUX1VMTCg0KVxuICNkZWZpbmUgRkVBVFVSRV9TTlBBVklDU1VQXHRHRU5NQVNLX1VMTCg3LCA1KVxuICNkZWZpbmUgRkVBVFVSRV9TTlBBVklDU1VQX0dBTSh4KSBcXFxuIFx0KEZJRUxEX0dFVChGRUFUVVJFX1NOUEFWSUNTVVAsIHgpID09IDB4MSlcbkBAIC0xOTAsNiArMTkyLDcgQEBcbiAjZGVmaW5lIENPTlRST0xfRVBIX0VOXHRcdDQ1XG4gI2RlZmluZSBDT05UUk9MX1hUX0VOXHRcdDUwXG4gI2RlZmluZSBDT05UUk9MX0lOVENBUFhUX0VOXHQ1MVxuKyNkZWZpbmUgQ09OVFJPTF9HQVBQSV9FTlx0NTVcbiAjZGVmaW5lIENPTlRST0xfR0NSM1RSUE1PREVcdDU4XG4gI2RlZmluZSBDT05UUk9MX0lSVENBQ0hFRElTXHQ1OVxuICNkZWZpbmUgQ09OVFJPTF9TTlBBVklDX0VOXHQ2MVxuQEAgLTEwMDQsNyArMTAwNyw4IEBAIHVuaW9uIGlydGVfZ2FfbG8ge1xuIFx0XHQgICAgbm9fZmF1bHRcdDogMSxcbiBcdFx0ICAgIC8qIC0tLS0tLSAqL1xuIFx0XHQgICAgZ2FfbG9nX2ludHJcdDogMSxcbi1cdFx0ICAgIHJzdmQxXHQ6IDMsXG4rXHRcdCAgICByc3ZkMVx0OiAyLFxuK1x0XHQgICAgZ2FwcGlfZGlzXHQ6IDEsXG4gXHRcdCAgICBpc19ydW5cdDogMSxcbiBcdFx0ICAgIC8qIC0tLS0tLSAqL1xuIFx0XHQgICAgZ3Vlc3RfbW9kZVx0OiAxLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW9tbXUvYW1kL2luaXQuYyBiL2RyaXZlcnMvaW9tbXUvYW1kL2luaXQuY1xuaW5kZXggM2JkYjM4MGQyM2U5YTkuLjdkMmIxYzI0ZjZlY2NiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jXG4rKysgYi9kcml2ZXJzL2lvbW11L2FtZC9pbml0LmNcbkBAIC0xNjAsNiArMTYwLDkgQEAgdTggYW1kX2lvbW11X2hwdF9sZXZlbDtcbiAvKiBHdWVzdCBwYWdlIHRhYmxlIGxldmVsICovXG4gaW50IGFtZF9pb21tdV9ncHRfbGV2ZWwgPSBQQUdFX01PREVfNF9MRVZFTDtcbiBcbitib29sIGFtZF9pb21tdV9nYXBwaTtcbitFWFBPUlRfU1lNQk9MKGFtZF9pb21tdV9nYXBwaSk7XG4rXG4gaW50IGFtZF9pb21tdV9ndWVzdF9pciA9IEFNRF9JT01NVV9HVUVTVF9JUl9WQVBJQztcbiBzdGF0aWMgaW50IGFtZF9pb21tdV94dF9tb2RlID0gSVJRX1JFTUFQX1hBUElDX01PREU7XG4gXG5AQCAtNDYyLDYgKzQ2NSw5IEBAIHN0YXRpYyB2b2lkIGlvbW11X2Rpc2FibGUoc3RydWN0IGFtZF9pb21tdSAqaW9tbXUpXG4gXHRpb21tdV9mZWF0dXJlX2Rpc2FibGUoaW9tbXUsIENPTlRST0xfR0FMT0dfRU4pO1xuIFx0aW9tbXVfZmVhdHVyZV9kaXNhYmxlKGlvbW11LCBDT05UUk9MX0dBSU5UX0VOKTtcbiBcbitcdC8qIERpc2FibGUgSU9NTVUgR0FQUEkgKi9cbitcdGlvbW11X2ZlYXR1cmVfZGlzYWJsZShpb21tdSwgQ09OVFJPTF9HQVBQSV9FTik7XG4rXG4gXHQvKiBEaXNhYmxlIElPTU1VIFBQUiBsb2dnaW5nICovXG4gXHRpb21tdV9mZWF0dXJlX2Rpc2FibGUoaW9tbXUsIENPTlRST0xfUFBSTE9HX0VOKTtcbiBcdGlvbW11X2ZlYXR1cmVfZGlzYWJsZShpb21tdSwgQ09OVFJPTF9QUFJJTlRfRU4pO1xuQEAgLTI5OTYsNiArMzAwMiwxMyBAQCBzdGF0aWMgdm9pZCBlbmFibGVfaW9tbXVzX3ZhcGljKHZvaWQpXG4gXHRzdHJ1Y3QgYW1kX2lvbW11ICppb21tdTtcbiBcbiBcdGZvcl9lYWNoX2lvbW11KGlvbW11KSB7XG4rXHRcdC8qXG4rXHRcdCAqIERpc2FibGUgR0FQUEksIGRvIG5vdCBjaGVjayBhbWRfaW9tbXVfZ2FwcGkgYXMgaXQgbWF5IGJlXG4rXHRcdCAqIGZhbHNlIGluIG5ldyBrZXhlYyBrZXJuZWwgZXZlbiB0aG91Z2ggcHJldmlvdXMga2VybmVsIGhhc1xuK1x0XHQgKiBlbmFibGVkIGl0LlxuK1x0XHQgKi9cbitcdFx0aW9tbXVfZmVhdHVyZV9kaXNhYmxlKGlvbW11LCBDT05UUk9MX0dBUFBJX0VOKTtcbitcbiBcdFx0LypcbiBcdFx0ICogRGlzYWJsZSBHQUxvZyBpZiBhbHJlYWR5IHJ1bm5pbmcuIEl0IGNvdWxkIGhhdmUgYmVlbiBlbmFibGVkXG4gXHRcdCAqIGluIHRoZSBwcmV2aW91cyBib290IGJlZm9yZSBrZHVtcC5cbkBAIC0zMDM1LDEwICszMDQ4LDE5IEBAIHN0YXRpYyB2b2lkIGVuYWJsZV9pb21tdXNfdmFwaWModm9pZClcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuK1x0aWYgKGFtZF9pb21tdV9nYXBwaSBcdTAwMjZcdTAwMjZcbitcdCAgICAhKGNoZWNrX2ZlYXR1cmUoRkVBVFVSRV9HQVBQSSkgXHUwMDI2XHUwMDI2XG4rXHQgICAgICBBTURfSU9NTVVfR1VFU1RfSVJfVkFQSUMoYW1kX2lvbW11X2d1ZXN0X2lyKSkpIHtcbitcdFx0cHJfd2FybihcIkdBUFBJIGlzIG5vdCBzdXBwb3J0ZWQuXFxuXCIpO1xuK1x0XHRhbWRfaW9tbXVfZ2FwcGkgPSBmYWxzZTtcbitcdH1cbitcbiBcdC8qIEVuYWJsaW5nIEdBTSBhbmQgU05QQVZJQyBzdXBwb3J0ICovXG4gXHRmb3JfZWFjaF9pb21tdShpb21tdSkge1xuLVx0XHRpZiAoaW9tbXVfaW5pdF9nYV9sb2coaW9tbXUpIHx8XG4tXHRcdCAgICBpb21tdV9nYV9sb2dfZW5hYmxlKGlvbW11KSlcbitcdFx0aWYgKGFtZF9pb21tdV9nYXBwaSlcbitcdFx0XHRpb21tdV9mZWF0dXJlX2VuYWJsZShpb21tdSwgQ09OVFJPTF9HQVBQSV9FTik7XG4rXHRcdGVsc2UgaWYgKGlvbW11X2luaXRfZ2FfbG9nKGlvbW11KSB8fFxuK1x0XHRcdCBpb21tdV9nYV9sb2dfZW5hYmxlKGlvbW11KSlcbiBcdFx0XHRyZXR1cm47XG4gXG4gXHRcdGlvbW11X2ZlYXR1cmVfZW5hYmxlKGlvbW11LCBDT05UUk9MX0dBTV9FTik7XG5AQCAtMzA0Nyw3ICszMDY5LDggQEAgc3RhdGljIHZvaWQgZW5hYmxlX2lvbW11c192YXBpYyh2b2lkKVxuIFx0fVxuIFxuIFx0YW1kX2lvbW11X2lycV9vcHMuY2FwYWJpbGl0eSB8PSAoMSBcdTAwM2NcdTAwM2MgSVJRX1BPU1RJTkdfQ0FQKTtcbi1cdHByX2luZm8oXCJWaXJ0dWFsIEFQSUMgZW5hYmxlZFxcblwiKTtcbitcdHByX2luZm8oXCJWaXJ0dWFsIEFQSUMgZW5hYmxlZCB3aXRoICVzXFxuXCIsXG4rXHRcdGFtZF9pb21tdV9nYXBwaSA/IFwiR0FQUElcIiA6IFwiR0FMT0dcIik7XG4gI2VuZGlmXG4gfVxuIFxuQEAgLTM3MzgsNiArMzc2MSw4IEBAIHN0YXRpYyBpbnQgX19pbml0IHBhcnNlX2FtZF9pb21tdV9vcHRpb25zKGNoYXIgKnN0cilcbiBcdFx0fSBlbHNlIGlmIChzdHJuY21wKHN0ciwgXCJ2Ml9wZ3NpemVzX29ubHlcIiwgMTUpID09IDApIHtcbiBcdFx0XHRwcl9pbmZvKFwiUmVzdHJpY3RpbmcgVjEgcGFnZS1zaXplcyB0byA0S2lCLzJNaUIvMUdpQlwiKTtcbiBcdFx0XHRhbWRfaW9tbXVfcGdzaXplX2JpdG1hcCA9IEFNRF9JT01NVV9QR1NJWkVTX1YyO1xuK1x0XHR9IGVsc2UgaWYgKHN0cm5jbXAoc3RyLCBcImdhcHBpXCIsIDUpID09IDApIHtcbitcdFx0XHRhbWRfaW9tbXVfZ2FwcGkgPSB0cnVlO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdHByX25vdGljZShcIlVua25vd24gb3B0aW9uIC0gJyVzJ1xcblwiLCBzdHIpO1xuIFx0XHR9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuYyBiL2RyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmNcbmluZGV4IDU3ZGM4ZmFiYzdkOWI5Li43ZWViZjQ3NDVhNjc4MiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmNcbisrKyBiL2RyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmNcbkBAIC0zOTU5LDE5ICszOTU5LDI5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaXJxX2RvbWFpbl9vcHMgYW1kX2lyX2RvbWFpbl9vcHMgPSB7XG4gXHQuZGVhY3RpdmF0ZSA9IGlycV9yZW1hcHBpbmdfZGVhY3RpdmF0ZSxcbiB9O1xuIFxuLXN0YXRpYyB2b2lkIF9fYW1kX2lvbW11X3VwZGF0ZV9nYShzdHJ1Y3QgaXJ0ZV9nYSAqZW50cnksIGludCBjcHUsXG4tXHRcdFx0XHQgIGJvb2wgZ2FfbG9nX2ludHIpXG4rc3RhdGljIHZvaWQgX19hbWRfaW9tbXVfdXBkYXRlX2dhKHN0cnVjdCBpcnRlX2dhICplbnRyeSwgaW50IGFwaWNpZCxcbitcdFx0XHRcdCAgYm9vbCB3YWtldXBfaW50ciwgYm9vbCBpc19ydW5uaW5nKVxuIHtcbi1cdGlmIChjcHUgXHUwMDNlPSAwKSB7XG4rXHRpZiAoaXNfcnVubmluZykge1xuIFx0XHRlbnRyeS1cdTAwM2Vsby5maWVsZHNfdmFwaWMuZGVzdGluYXRpb24gPVxuLVx0XHRcdFx0XHRBUElDSURfVE9fSVJURV9ERVNUX0xPKGNwdSk7XG4rXHRcdFx0XHRcdEFQSUNJRF9UT19JUlRFX0RFU1RfTE8oYXBpY2lkKTtcbiBcdFx0ZW50cnktXHUwMDNlaGkuZmllbGRzLmRlc3RpbmF0aW9uID1cbi1cdFx0XHRcdFx0QVBJQ0lEX1RPX0lSVEVfREVTVF9ISShjcHUpO1xuK1x0XHRcdFx0XHRBUElDSURfVE9fSVJURV9ERVNUX0hJKGFwaWNpZCk7XG4gXHRcdGVudHJ5LVx1MDAzZWxvLmZpZWxkc192YXBpYy5pc19ydW4gPSB0cnVlO1xuIFx0XHRlbnRyeS1cdTAwM2Vsby5maWVsZHNfdmFwaWMuZ2FfbG9nX2ludHIgPSBmYWxzZTtcbiBcdH0gZWxzZSB7XG4tXHRcdGVudHJ5LVx1MDAzZWxvLmZpZWxkc192YXBpYy5pc19ydW4gPSBmYWxzZTtcbi1cdFx0ZW50cnktXHUwMDNlbG8uZmllbGRzX3ZhcGljLmdhX2xvZ19pbnRyID0gZ2FfbG9nX2ludHI7XG4rXHRcdGlmIChhbWRfaW9tbXVfZ2FwcGkpIHtcbitcdFx0XHRlbnRyeS1cdTAwM2Vsby5maWVsZHNfdmFwaWMuZ2FwcGlfZGlzID0gIXdha2V1cF9pbnRyIFx1MDAyNlx1MDAyNlxuK1x0XHRcdFx0XHRcdGNoZWNrX2ZlYXR1cmUyKEZFQVRVUkVfR0FQUElESVNTVVApO1xuK1x0XHRcdGVudHJ5LVx1MDAzZWxvLmZpZWxkc192YXBpYy5pc19ydW4gPSBmYWxzZTtcbitcdFx0XHRlbnRyeS1cdTAwM2Vsby5maWVsZHNfdmFwaWMuZGVzdGluYXRpb24gPVxuK1x0XHRcdFx0XHRcdEFQSUNJRF9UT19JUlRFX0RFU1RfTE8oYXBpY2lkKTtcbitcdFx0XHRlbnRyeS1cdTAwM2VoaS5maWVsZHMuZGVzdGluYXRpb24gPVxuK1x0XHRcdFx0XHRcdEFQSUNJRF9UT19JUlRFX0RFU1RfSEkoYXBpY2lkKTtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRlbnRyeS1cdTAwM2Vsby5maWVsZHNfdmFwaWMuaXNfcnVuID0gZmFsc2U7XG4rXHRcdFx0ZW50cnktXHUwMDNlbG8uZmllbGRzX3ZhcGljLmdhX2xvZ19pbnRyID0gd2FrZXVwX2ludHI7XG4rXHRcdH1cbiBcdH1cbiB9XG4gXG5AQCAtMzk3OSwyMCArMzk4OSwyMCBAQCBzdGF0aWMgdm9pZCBfX2FtZF9pb21tdV91cGRhdGVfZ2Eoc3RydWN0IGlydGVfZ2EgKmVudHJ5LCBpbnQgY3B1LFxuICAqIFVwZGF0ZSB0aGUgcENQVSBpbmZvcm1hdGlvbiBmb3IgYW4gSVJURSB0aGF0IGlzIGNvbmZpZ3VyZWQgdG8gcG9zdCBJUlFzIHRvXG4gICogYSB2Q1BVLCB3aXRob3V0IGlzc3VpbmcgYW4gSU9NTVUgaW52YWxpZGF0aW9uIGZvciB0aGUgSVJURS5cbiAgKlxuLSAqIElmIHRoZSB2Q1BVIGlzIGFzc29jaWF0ZWQgd2l0aCBhIHBDUFUgKEBjcHUgXHUwMDNlPSAwKSwgY29uZmlndXJlIHRoZSBEZXN0aW5hdGlvblxuLSAqIHdpdGggdGhlIHBDUFUncyBBUElDIElELCBzZXQgSXNSdW4sIGFuZCBjbGVhciBHQUxvZ0ludHIuICBJZiB0aGUgdkNQVSBpc24ndFxuLSAqIGFzc29jaWF0ZWQgd2l0aCBhIHBDUFUgKEBjcHUgXHUwMDNjIDApLCBjbGVhciBJc1J1biBhbmQgc2V0L2NsZWFyIEdBTG9nSW50ciBiYXNlZFxuLSAqIG9uIGlucHV0IGZyb20gdGhlIGNhbGxlciAoZS5nLiBLVk0gb25seSByZXF1ZXN0cyBHQUxvZ0ludHIgd2hlbiB0aGUgdkNQVSBpc1xuLSAqIGJsb2NraW5nIGFuZCByZXF1aXJlcyBhIG5vdGlmaWNhdGlvbiB3YWtlIGV2ZW50KS4gIEkuZS4gdHJlYXQgdkNQVXMgdGhhdCBhcmVcbi0gKiBhc3NvY2lhdGVkIHdpdGggYSBwQ1BVIGFzIHJ1bm5pbmcuICBUaGlzIEFQSSBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIHdoZW4gYVxuLSAqIHZDUFUgaXMgc2NoZWR1bGVkIGluL291dCAob3Igc3RvcHMgcnVubmluZyBmb3IgYW55IHJlYXNvbiksIHRvIGRvIGEgZmFzdFxuLSAqIHVwZGF0ZSBvZiBJc1J1biwgR0FMb2dJbnRyLCBhbmQgKGNvbmRpdGlvbmFsbHkpIERlc3RpbmF0aW9uLlxuKyAqIElmIHRoZSB2Q1BVIGlzIHNjaGVkdWxlZCB0byBydW4gb24gcENQVSAoQGlzX3J1bm5pbmcgPSAxKSwgY29uZmlndXJlIHRoZVxuKyAqIERlc3RpbmF0aW9uIHdpdGggdGhlIHBDUFUncyBBUElDIElELCBzZXQgSXNSdW4sIGFuZCBjbGVhciBHQUxvZ0ludHIuIElmIHRoZVxuKyAqIHZDUFUgaXMgc2NoZWR1bGVkIG91dCAoQGlzX3J1bm5pbmcgPSAwKSwgY2xlYXIgSXNSdW4gYW5kIHNldC9jbGVhciBHQUxvZ0ludHJcbisgKiBhbmQgR0FQUElEaXMgYmFzZWQgb24gaW5wdXQgZnJvbSB0aGUgY2FsbGVyIChlLmcuIEtWTSBvbmx5IHJlcXVlc3RzXG4rICogd2FrZXVwX2ludHIgd2hlbiB0aGUgdkNQVSBpcyBibG9ja2luZyBhbmQgcmVxdWlyZXMgYSBub3RpZmljYXRpb24gd2FrZVxuKyAqIGV2ZW50KS4gVGhpcyBBUEkgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCB3aGVuIGEgdkNQVSBpcyBzY2hlZHVsZWQgaW4vb3V0IChvclxuKyAqIHN0b3BzIHJ1bm5pbmcgZm9yIGFueSByZWFzb24pLCB0byBkbyBhIGZhc3QgdXBkYXRlIG9mIElzUnVuLCBHQUxvZ0ludHIsXG4rICogR0FQUElEaXMgYW5kIChjb25kaXRpb25hbGx5KSBEZXN0aW5hdGlvbi5cbiAgKlxuLSAqIFBlciB0aGUgSU9NTVUgc3BlYywgdGhlIERlc3RpbmF0aW9uLCBJc1J1biwgYW5kIEdBVGFnIGZpZWxkcyBhcmUgbm90IGNhY2hlZFxuLSAqIGFuZCB0aHVzIGRvbid0IHJlcXVpcmUgYW4gaW52YWxpZGF0aW9uIHRvIGVuc3VyZSB0aGUgSU9NTVUgY29uc3VtZXMgZnJlc2hcbi0gKiBpbmZvcm1hdGlvbi5cbisgKiBQZXIgdGhlIElPTU1VIHNwZWMsIHRoZSBEZXN0aW5hdGlvbiwgSXNSdW4sIEdBVGFnIGFuZCBHQVBQSURpcyBmaWVsZHMgYXJlXG4rICogbm90IGNhY2hlZCBhbmQgdGh1cyBkb24ndCByZXF1aXJlIGFuIGludmFsaWRhdGlvbiB0byBlbnN1cmUgdGhlIElPTU1VXG4rICogY29uc3VtZXMgZnJlc2ggaW5mb3JtYXRpb24uXG4gICovXG4taW50IGFtZF9pb21tdV91cGRhdGVfZ2Eodm9pZCAqZGF0YSwgaW50IGNwdSwgYm9vbCBnYV9sb2dfaW50cilcbitpbnQgYW1kX2lvbW11X3VwZGF0ZV9nYSh2b2lkICpkYXRhLCBpbnQgYXBpY2lkLCBib29sIHdha2V1cF9pbnRyLCBib29sIGlzX3J1bm5pbmcpXG4ge1xuIFx0c3RydWN0IGFtZF9pcl9kYXRhICppcl9kYXRhID0gKHN0cnVjdCBhbWRfaXJfZGF0YSAqKWRhdGE7XG4gXHRzdHJ1Y3QgaXJ0ZV9nYSAqZW50cnkgPSAoc3RydWN0IGlydGVfZ2EgKikgaXJfZGF0YS1cdTAwM2VlbnRyeTtcbkBAIC00MDA2LDE0ICs0MDE2LDE0IEBAIGludCBhbWRfaW9tbXVfdXBkYXRlX2dhKHZvaWQgKmRhdGEsIGludCBjcHUsIGJvb2wgZ2FfbG9nX2ludHIpXG4gXHRpZiAoIWlyX2RhdGEtXHUwMDNlaW9tbXUpXG4gXHRcdHJldHVybiAtRU5PREVWO1xuIFxuLVx0X19hbWRfaW9tbXVfdXBkYXRlX2dhKGVudHJ5LCBjcHUsIGdhX2xvZ19pbnRyKTtcbitcdF9fYW1kX2lvbW11X3VwZGF0ZV9nYShlbnRyeSwgYXBpY2lkLCB3YWtldXBfaW50ciwgaXNfcnVubmluZyk7XG4gXG4gXHRyZXR1cm4gX19tb2RpZnlfaXJ0ZV9nYShpcl9kYXRhLVx1MDAzZWlvbW11LCBpcl9kYXRhLVx1MDAzZWlycV8yX2lydGUuZGV2aWQsXG4gXHRcdFx0XHRpcl9kYXRhLVx1MDAzZWlycV8yX2lydGUuaW5kZXgsIGVudHJ5KTtcbiB9XG4gRVhQT1JUX1NZTUJPTChhbWRfaW9tbXVfdXBkYXRlX2dhKTtcbiBcbi1pbnQgYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUodm9pZCAqZGF0YSwgaW50IGNwdSwgYm9vbCBnYV9sb2dfaW50cilcbitpbnQgYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUodm9pZCAqZGF0YSwgaW50IGFwaWNpZCwgYm9vbCB3YWtldXBfaW50ciwgYm9vbCBpc19ydW5uaW5nKVxuIHtcbiBcdHN0cnVjdCBhbWRfaXJfZGF0YSAqaXJfZGF0YSA9IChzdHJ1Y3QgYW1kX2lyX2RhdGEgKilkYXRhO1xuIFx0c3RydWN0IGlydGVfZ2EgKmVudHJ5ID0gKHN0cnVjdCBpcnRlX2dhICopIGlyX2RhdGEtXHUwMDNlZW50cnk7XG5AQCAtNDAzNiw3ICs0MDQ2LDcgQEAgaW50IGFtZF9pb21tdV9hY3RpdmF0ZV9ndWVzdF9tb2RlKHZvaWQgKmRhdGEsIGludCBjcHUsIGJvb2wgZ2FfbG9nX2ludHIpXG4gXHRlbnRyeS1cdTAwM2VoaS5maWVsZHMudmVjdG9yICAgICAgICAgICAgPSBpcl9kYXRhLVx1MDAzZWdhX3ZlY3RvcjtcbiBcdGVudHJ5LVx1MDAzZWxvLmZpZWxkc192YXBpYy5nYV90YWcgICAgICA9IGlyX2RhdGEtXHUwMDNlZ2FfdGFnO1xuIFxuLVx0X19hbWRfaW9tbXVfdXBkYXRlX2dhKGVudHJ5LCBjcHUsIGdhX2xvZ19pbnRyKTtcbitcdF9fYW1kX2lvbW11X3VwZGF0ZV9nYShlbnRyeSwgYXBpY2lkLCB3YWtldXBfaW50ciwgaXNfcnVubmluZyk7XG4gXG4gXHRyZXR1cm4gbW9kaWZ5X2lydGVfZ2EoaXJfZGF0YS1cdTAwM2Vpb21tdSwgaXJfZGF0YS1cdTAwM2VpcnFfMl9pcnRlLmRldmlkLFxuIFx0XHRcdCAgICAgIGlyX2RhdGEtXHUwMDNlaXJxXzJfaXJ0ZS5pbmRleCwgZW50cnkpO1xuQEAgLTQxMDcsOCArNDExNyw5IEBAIHN0YXRpYyBpbnQgYW1kX2lyX3NldF92Y3B1X2FmZmluaXR5KHN0cnVjdCBpcnFfZGF0YSAqZGF0YSwgdm9pZCAqaW5mbylcbiBcdFx0aXJfZGF0YS1cdTAwM2VnYV92ZWN0b3IgPSBwaV9kYXRhLVx1MDAzZXZlY3RvcjtcbiBcdFx0aXJfZGF0YS1cdTAwM2VnYV90YWcgPSBwaV9kYXRhLVx1MDAzZWdhX3RhZztcbiBcdFx0aWYgKHBpX2RhdGEtXHUwMDNlaXNfZ3Vlc3RfbW9kZSlcbi1cdFx0XHRyZXQgPSBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZShpcl9kYXRhLCBwaV9kYXRhLVx1MDAzZWNwdSxcbi1cdFx0XHRcdFx0XHRcdCAgICBwaV9kYXRhLVx1MDAzZWdhX2xvZ19pbnRyKTtcbitcdFx0XHRyZXQgPSBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZShpcl9kYXRhLCBwaV9kYXRhLVx1MDAzZWFwaWNpZCxcbitcdFx0XHRcdFx0XHRcdCAgICBwaV9kYXRhLVx1MDAzZXdha2V1cF9pbnRyLFxuK1x0XHRcdFx0XHRcdFx0ICAgIHBpX2RhdGEtXHUwMDNlaXNfcnVubmluZyk7XG4gXHRcdGVsc2VcbiBcdFx0XHRyZXQgPSBhbWRfaW9tbXVfZGVhY3RpdmF0ZV9ndWVzdF9tb2RlKGlyX2RhdGEpO1xuIFx0fSBlbHNlIHtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2FtZC1pb21tdS5oIGIvaW5jbHVkZS9saW51eC9hbWQtaW9tbXUuaFxuaW5kZXggZWRjZWU5ZjUzMzVhNmYuLjcyOWQ4MmM0ZTA5ZTI3IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9hbWQtaW9tbXUuaFxuKysrIGIvaW5jbHVkZS9saW51eC9hbWQtaW9tbXUuaFxuQEAgLTMwLDggKzMwLDEwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBhbWRfaW9tbXVfZGV0ZWN0KHZvaWQpIHsgfVxuIC8qIElPTU1VIEFWSUMgRnVuY3Rpb24gKi9cbiBleHRlcm4gaW50IGFtZF9pb21tdV9yZWdpc3Rlcl9nYV9sb2dfbm90aWZpZXIoaW50ICgqbm90aWZpZXIpKHUzMikpO1xuIFxuLWV4dGVybiBpbnQgYW1kX2lvbW11X3VwZGF0ZV9nYSh2b2lkICpkYXRhLCBpbnQgY3B1LCBib29sIGdhX2xvZ19pbnRyKTtcbi1leHRlcm4gaW50IGFtZF9pb21tdV9hY3RpdmF0ZV9ndWVzdF9tb2RlKHZvaWQgKmRhdGEsIGludCBjcHUsIGJvb2wgZ2FfbG9nX2ludHIpO1xuK2V4dGVybiBpbnQgYW1kX2lvbW11X3VwZGF0ZV9nYSh2b2lkICpkYXRhLCBpbnQgYXBpY2lkLCBib29sIHdha2V1cF9pbnRyLFxuK1x0XHRcdCAgICAgICBib29sIGlzX3J1bm5pbmcpO1xuK2V4dGVybiBpbnQgYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUodm9pZCAqZGF0YSwgaW50IGFwaWNpZCwgYm9vbCB3YWtldXBfaW50cixcbitcdFx0XHRcdFx0IGJvb2wgaXNfcnVubmluZyk7XG4gZXh0ZXJuIGludCBhbWRfaW9tbXVfZGVhY3RpdmF0ZV9ndWVzdF9tb2RlKHZvaWQgKmRhdGEpO1xuIFxuICNlbHNlIC8qIGRlZmluZWQoQ09ORklHX0FNRF9JT01NVSkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0lSUV9SRU1BUCkgKi9cbkBAIC00MiwxMiArNDQsMTQgQEAgYW1kX2lvbW11X3JlZ2lzdGVyX2dhX2xvZ19ub3RpZmllcihpbnQgKCpub3RpZmllcikodTMyKSlcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBhbWRfaW9tbXVfdXBkYXRlX2dhKHZvaWQgKmRhdGEsIGludCBjcHUsIGJvb2wgZ2FfbG9nX2ludHIpXG4rc3RhdGljIGlubGluZSBpbnQgYW1kX2lvbW11X3VwZGF0ZV9nYSh2b2lkICpkYXRhLCBpbnQgYXBpY2lkLCBib29sIHdha2V1cF9pbnRyLFxuK1x0XHRcdFx0ICAgICAgYm9vbCBpc19ydW5uaW5nKVxuIHtcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZSh2b2lkICpkYXRhLCBpbnQgY3B1LCBib29sIGdhX2xvZ19pbnRyKVxuK3N0YXRpYyBpbmxpbmUgaW50IGFtZF9pb21tdV9hY3RpdmF0ZV9ndWVzdF9tb2RlKHZvaWQgKmRhdGEsIGludCBhcGljaWQsIGJvb2wgd2FrZXVwX2ludHIsXG4rXHRcdFx0XHRcdFx0Ym9vbCBpc19ydW5uaW5nKVxuIHtcbiBcdHJldHVybiAwO1xuIH1cbkBAIC03Niw0ICs4MCw1IEBAIHN0YXRpYyBpbmxpbmUgaW50IGFtZF9pb21tdV9zbnBfZGlzYWJsZSh2b2lkKSB7IHJldHVybiAwOyB9XG4gc3RhdGljIGlubGluZSBib29sIGFtZF9pb21tdV9zZXZfdGlvX3N1cHBvcnRlZCh2b2lkKSB7IHJldHVybiBmYWxzZTsgfVxuICNlbmRpZlxuIFxuK2V4dGVybiBib29sIGFtZF9pb21tdV9nYXBwaTtcbiAjZW5kaWYgLyogX0FTTV9YODZfQU1EX0lPTU1VX0ggKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDEzOjM2OjI0Ljc3MzIyODQzNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyODgyNzg5MjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkdBUFBJIFN1cHBvcnQgZm9yIEFNRCBJT01NVSBhbmQgS1ZNIFNWTSBBVklDOiBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaW50cm9kdWNpbmcgR0FQUEkgc3VwcG9ydCwgR3Vlc3QgQVBJQyBQb3N0ZWQgSW50ZXJydXB0cywgZm9yIEFNRCBJT01NVSBhbmQgS1ZNIFNWTSBBVklDLiAgRXNzZW50aWFsbHksIGl0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBwcmV0dHkgZGVlcCBvbmUsIGFmZmVjdGluZyBhIGJ1bmNoIG9mIGNvcmUga2VybmVsIGFyZWFzLiAgSSBzZWUgaXQgdG91Y2hlcyBkb2N1bWVudGF0aW9uLCBzb21lIGNydWNpYWwgeDg2IGFzc2VtYmx5IGluY2x1ZGVzLCBhbmQgdGhlbiBkaXZlcyBkZWVwIGludG8gS1ZNJ3MgU1ZNIGltcGxlbWVudGF0aW9uIGFuZCB0aGUgQU1EIElPTU1VIGRyaXZlcnMuIFRoZSBwYXRjaCBhZGRzIGEgbmV3IGBhbWRfaW9tbXU9Z2FwcGlgIGtlcm5lbCBwYXJhbWV0ZXIuIEl0J3MgbW9kaWZ5aW5nIElSVEVzIGZvciBwb3N0ZWQgaW50ZXJydXB0cyBhbmQgaW50cm9kdWNlcyBhIG5ldyB3YWtldXAgbGlzdCBmb3IgR0FQUEkgd2l0aGluIEtWTS5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBpcyB0aGlzIHJlYWNoYWJsZSBpbiBhIGZ1enphYmxlIGVudmlyb25tZW50PyBTaW5jZSB0aGlzIGNvZGUgaXMgZGlyZWN0bHkgbGlua2VkIHRvIEFNRCBJT01NVSwgS1ZNIFNWTSBhbmQsIHNwZWNpZmljYWxseSBBVklDLCBJIG5lZWQgdG8gZXZhbHVhdGUgdGhlIHBvdGVudGlhbC4gUUVNVSBhbmQgR29vZ2xlIENvbXB1dGUgRW5naW5lIGFsbG93IG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBvbiBBTUQgaG9zdHMgb3IgZXZlbiBlbXVsYXRpb24uIFdoaWxlIEFNRCBJT01NVSBlbXVsYXRpb24gd2l0aCBBVklDIGluIFFFTVUgbWlnaHQgYmUgYSBiaXQgc2tldGNoeSwgdGhlICpLVk0gY29kZSBpdHNlbGYqIGlzIHRoZSByZWFsIHRhcmdldCBoZXJlLlxuXG5XYWl0LCBTeXprYWxsZXIgcnVucyBpbiBRRU1VLi4uIGFuZCBpdCBzdXBwb3J0cyBmdXp6aW5nIEtWTS4gSWYgd2UncmUgb24gYW4gQU1EIGhvc3Qgd2l0aCBuZXN0ZWQgdmlydHVhbGl6YXRpb24sIG9yIGV2ZW4gZW11bGF0aW5nIFNWTSwgd2Ugc2hvdWxkIGJlIGFibGUgdG8gcmVhY2ggS1ZNIFNWTSBjb2RlIGRpcmVjdGx5LiBTeXprYWxsZXIgc3VwcG9ydHMgS1ZNIGZ1enppbmcsIHdoaWNoIG1lYW5zIHdlICpjYW4qIGFic29sdXRlbHkgZnV6eiB0aGlzISBUaGlzIGlzIGRlZmluaXRlbHkgd29ydGggcHVyc3VpbmcuXG5cbk5vdywgbGV0J3Mgem9vbSBpbiBvbiB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIHRoYXQgYXJlIG1vc3QgaW50ZXJlc3RpbmcgZm9yIGZ1enppbmc6XG5cbiogICBgYXZpY19pbml0X3ZjcHVgLCBgYXZpY19hZGRfdmNwdV90b19nYXBwaV93YWtldXBfbGlzdGAsIGBhdmljX3JlbW92ZV92Y3B1X2Zyb21fZ2FwcGlfd2FrZXVwX2xpc3RgLCBgYXZpY19kZXN0cm95X3ZjcHVgLCBgc3ZtX2lyX2xpc3RfZGVsYCwgYGF2aWNfcGlfdXBkYXRlX2lydGVgLCBgYXZpY191cGRhdGVfaW9tbXVfdmNwdV9hZmZpbml0eWAsIGBfX2F2aWNfdmNwdV9sb2FkYCwgYF9fYXZpY192Y3B1X3B1dGAsIGBhdmljX3ZjcHVfcHV0YCwgYGF2aWNfZ2FwcGlfd2FrZXVwX2hhbmRsZXJgLCBgYXZpY19oYXJkd2FyZV9zZXR1cGAsIGBhdmljX2hhcmR3YXJlX3Vuc2V0dXBgLCBgX19hbWRfaW9tbXVfdXBkYXRlX2dhYCwgYGFtZF9pb21tdV91cGRhdGVfZ2FgLCBgYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGVgLCBhbmQgYGFtZF9pcl9zZXRfdmNwdV9hZmZpbml0eWAuXG5cbk5leHQgc3RlcCwgSSBuZWVkIHRvIGNoZWNrIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMgdG8gYmUgc3VyZSB0aGUgcmVsZXZhbnQgZmVhdHVyZXMgYXJlIGVuYWJsZWQuIFNwZWNpZmljYWxseSwgSSdtIGxvb2tpbmcgYXQgS1ZNX0FNRCwgQU1EX0lPTU1VLCBhbmQgSVJRX1JFTUFQLiBUaG9zZSBuZWVkIHRvIGJlIHZlcmlmaWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzAyMiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc5MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDEzOjM2OjM3LjY1NjAxOTQzN1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDgxODA3NzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTV9BTURcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9MTM0PWNvbmZpZyBLVk1fSU5URUxfVERYXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTQ2OmNvbmZpZyBLVk1fQU1EXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ3LVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cXHRib29sIFxcXCJBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxMzozNjozNy43NjQyMDc0OVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NjYxMjY5MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqQXNzZXNzaW5nIElPTU1VIGFuZCBJUlEgUmVtYXBwaW5nIGluIFRoaXMgQ29udGV4dCoqXG5cbk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBzdGF0dXMgb2YgQU1EX0lPTU1VIGFuZCBJUlFfUkVNQVAuIFRob3NlIGFyZSB0aGUgZm91bmRhdGlvbiBzdG9uZXMsIHJlYWxseS4gR2l2ZW4gdGhlIGxpa2VseSBjb25zdHJhaW50cyBpbiB0aGlzIHNldHVwLCB0aGV5J3JlIHByb2JhYmx5IGtleSB0byBhY2hpZXZpbmcgdGhlIGRlc2lyZWQgb3V0Y29tZS4gSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIGlmIHRoZXkgYXJlIGVuYWJsZWQgYW5kIGNvbmZpZ3VyZWQgY29ycmVjdGx5LCBvciBpZiB0aGVyZSdzIGFueSBoaW50IG9mIGEgcHJvYmxlbSB0aGVyZS4gQW55IGlzc3VlcyB3aXRoIHRob3NlIGFuZCwgZnJhbmtseSwgd2UgY2FuIHByb2JhYmx5IHN0b3AgdGhlcmUgYXMgb3RoZXIgY29uZmlndXJhdGlvbnMgd2lsbCBub3QgYmUgZWZmZWN0aXZlLiBTbywgdGhvc2UgbmVlZCB0byBiZSBzb2xpZC4gSSB3YW50IHRvIGtub3cgaWYgdGhleSdyZSB1cCBhbmQgcnVubmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ2MTIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxMzozNjo0MS43MzAzMzY3ODFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQyNzAxMjMyLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQU1EX0lPTU1VXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvaW9tbXUvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTM6MzY6NDEuODczMDUxNjIyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg0MDA4MDM1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqTmF2aWdhdGluZyB0aGUgQU1EIElPTU1VIENvZGViYXNlKipcblxuUmlnaHQsICpBTURfSU9NTVUqLCB0aGF0J3MgdGhlIGtleS4gSSBuZWVkIHRvIGZpbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhhdC4gQmFzZWQgb24gZXhwZXJpZW5jZSwgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBsb29rIGZpcnN0IGlzIHRoZSBgZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHVzdWFsbHkgd2hlcmUgdGhlc2UgaGFyZHdhcmUtc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlc2lkZSB3aXRoaW4gdGhlIGRyaXZlciB0cmVlLiBJdCdzIGFsbW9zdCBhIGdpdmVuLiBUaW1lIHRvIGNvbmZpcm0gYW5kIGdldCB0byB3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDgyNSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDEzOjM2OjQ0LjcxMzEzNDU2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNTQzNzAyMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQU1EX0lPTU1VXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvaW9tbXUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWctMi0jIEFNRCBJT01NVSBzdXBwb3J0XFxuZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZzozOmNvbmZpZyBBTURfSU9NTVVcXG5kcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnLTQtXFx0Ym9vbCBcXFwiQU1EIElPTU1VIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnLTMyLVxcbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWc6MzM6Y29uZmlnIEFNRF9JT01NVV9JT01NVUZEXFxuZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZy0zNC1cXHRib29sIFxcXCJFbmFibGUgSU9NTVVGRCBmZWF0dXJlcyBmb3IgQU1EIElPTU1VIChFWFBFUklNRU5UQUwpXFxcIlxcbi0tXFxuZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZy00Mi1cXG5kcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnOjQzOmNvbmZpZyBBTURfSU9NTVVfREVCVUdGU1xcbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWctNDQtXFx0Ym9vbCBcXFwiRW5hYmxlIEFNRCBJT01NVSBpbnRlcm5hbHMgaW4gRGVidWdGU1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTM6MzY6NDQuODQ4NTc3ODcyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk0MDY3ODMzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipVbmRlcnN0YW5kaW5nIElSUV9SRU1BUCBpbiBEZXB0aCoqXG5cblJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSVJRX1JFTUFQLi4uIEknbSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zLiBXZSdyZSB0YWxraW5nIGFib3V0IHJlbWFwcGluZyBpbnRlcnJ1cHQgcmVxdWVzdCBsaW5lcywgZXNzZW50aWFsbHkgZGVjb3VwbGluZyB0aGUgcGh5c2ljYWwgaW50ZXJydXB0IHBpbnMgZnJvbSB0aGUgaW50ZXJydXB0IG51bWJlcnMgcHJlc2VudGVkIHRvIHRoZSBDUFUuIFRoZSBpbW1lZGlhdGUgYmVuZWZpdCBpcywgb2YgY291cnNlLCBhIG1vcmUgZmxleGlibGUgYW5kIHJvYnVzdCBpbnRlcnJ1cHQgcm91dGluZyBzeXN0ZW0uIFdlJ3JlIGdldHRpbmcgYXdheSBmcm9tIHRoZSBoYXJkd2lyZWQgbGltaXRhdGlvbnMgb2YgbGVnYWN5IGludGVycnVwdCBjb250cm9sbGVycyBhbmQgZW1icmFjaW5nIGEgbW9yZSBkeW5hbWljIGFwcHJvYWNoLlxuXG5UaGUga2V5IHF1ZXN0aW9uIGlzLCAqaG93KiBpcyB0aGlzIHJlbWFwIGltcGxlbWVudGVkPyBJcyBpdCBhIHRyYW5zbGF0aW9uIHRhYmxlIHdpdGhpbiB0aGUgY2hpcHNldD8gSXMgaXQgbWFuYWdlZCBieSB0aGUgaG9zdCBicmlkZ2U/IEFuZCB3aGF0IGFyZSB0aGUgcGVyZm9ybWFuY2Ugb3ZlcmhlYWRzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGluZGlyZWN0aW9uPyBJJ2QgaW1hZ2luZSB0aGF0IGFueSBsYXRlbmN5IGludHJvZHVjZWQgYnkgdGhlIHJlbWFwcGluZyBwcm9jZXNzIGlzIHRoZSBwcmltYXJ5IGZhY3RvciB0byBjb25zaWRlciAtIGVzcGVjaWFsbHkgaW4gcGVyZm9ybWFuY2UgY3JpdGljYWwgZW52aXJvbm1lbnRzLlxuXG5JJ20gYWxzbyBjb25zaWRlcmluZyB0aGUgaW1wbGljYXRpb25zIGZvciBkZXZpY2UgZHJpdmVycy4gRG8gdGhleSBuZWVkIHRvIGJlIGF3YXJlIG9mIHRoZSByZW1hcHBpbmc/IE9yIGlzIHRoZSBzeXN0ZW0gYWJzdHJhY3Rpb24gdHJhbnNwYXJlbnQgZW5vdWdoIHRvIGluc3VsYXRlIHRoZSBkcml2ZXIgZnJvbSB0aGVzZSBjaGFuZ2VzLCBhbGxvd2luZyBpdCB0byBzaW1wbHkgcmVxdWVzdCBhbiBpbnRlcnJ1cHQgbnVtYmVyIGFuZCBoYXZlIHRoZSBzeXN0ZW0gaGFuZGxlIHRoZSB1bmRlcmx5aW5nIHJlbWFwcGluZyB3aXRob3V0IGl0cyBpbnRlcnZlbnRpb24/IEknZCBoYXphcmQgYSBndWVzcyB0aGF0IG5ld2VyIGRyaXZlcnMgYXJlIGJ1aWx0IHdpdGggYXdhcmVuZXNzLCBhbGxvd2luZyBzb21lIGRlZ3JlZSBvZiBjb250cm9sLlxuXG5GaW5hbGx5LCB3aGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGZvciB2aXJ0dWFsaXphdGlvbj8gSG93IGRvZXMgSVJRX1JFTUFQIHBsYXkgd2l0aCBpbnRlcnJ1cHQgdmlydHVhbGl6YXRpb24gdGVjaG5pcXVlcywgbGlrZSBNU0ktWCBhbmQgaW50ZXJydXB0IHJlbWFwcGluZyBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBJcyB0aGVyZSBhIG5lZWQgdG8gY2FyZWZ1bGx5IG1hbmFnZSB0aGUgbWFwcGluZyBvZiBwaHlzaWNhbCBpbnRlcnJ1cHRzIHRvIHZpcnR1YWwgaW50ZXJydXB0IHZlY3RvcnM/IFRoaXMgaXMgcmVhbGx5IGNydWNpYWwgd2hlbiBkZWFsaW5nIHdpdGggbmVzdGVkIHZpcnR1YWxpemF0aW9uIG9yIGhpZ2gtcGVyZm9ybWFuY2UgSS9PIHZpcnR1YWxpemF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTIxMywiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTM6MzY6NDguNzg5MjU4NjA0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzkxNDc3MjUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJUlFfUkVNQVBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvaW9tbXUvS2NvbmZpZz0xOTk9c291cmNlIFxcXCJkcml2ZXJzL2lvbW11L3Jpc2N2L0tjb25maWdcXFwiXFxuZHJpdmVycy9pb21tdS9LY29uZmlnLTIwMC1cXG5kcml2ZXJzL2lvbW11L0tjb25maWc6MjAxOmNvbmZpZyBJUlFfUkVNQVBcXG5kcml2ZXJzL2lvbW11L0tjb25maWctMjAyLVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIEludGVycnVwdCBSZW1hcHBpbmdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDEzOjM2OjUxLjU4MDc0NTUyNVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDk3Mjk3OTE5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgYW1kX2lvbW11X2dhcHBpYCBmZWF0dXJlIGFuZCB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiBpdCdzIGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmcuIEZpcnN0LCBJIG5lZWQgdG8gY2hlY2sgaWYgdGhlcmUgYXJlIGFsdGVybmF0aXZlIGNvbmZpZ3VyYXRpb25zIHRoYXQgbWlnaHQgYWZmZWN0IGl0LiBPa2F5LCBJIHNlZSBpdCdzIGV4cG9ydGVkIGluIGBkcml2ZXJzL2lvbW11L2FtZC9pbml0LmNgLiBUaGF0J3MgYSBnb29kIHNpZ24uIExvb2tzIGxpa2UgaXQncyBlbmFibGVkIGJ5IHRoZSBgYW1kX2lvbW11PWdhcHBpYCBrZXJuZWwgcGFyYW1ldGVyLiBIbW0sIHRoZSBvYnZpb3VzIHBhdGggdG8gZ2V0dGluZyBzeXprYWxsZXIgdG8gaGl0IHRoaXMgd291bGQgYmUgdG8gcGFzcyB0aGF0IHBhcmFtZXRlci4gQnV0IHN5emthbGxlciBkb2Vzbid0IGF1dG9tYXRpY2FsbHkgcGFzcyBrZXJuZWwgcGFyYW1ldGVycyB1bmxlc3MgdGhleSdyZSBleHBsaWNpdGx5IGRlZmluZWQgaW4gaXRzIGNvbmZpZ3VyYXRpb24sIGFuZCBJIGNhbid0IHNwZWNpZnkga2VybmVsIHBhcmFtZXRlcnMgZGlyZWN0bHkgd2l0aGluIEtjb25maWcuIFRoYXQncyBhIGh1cmRsZS4gU28sIGZ1enppbmcgdGhlIHBhcmFtZXRlciBwYXJzaW5nIGl0c2VsZiBpc24ndCBhIHZpYWJsZSBvcHRpb24uXG5cbk5vdywgaG9sZCBvbiBhIHNlY29uZC4uLiBgYW1kX2lvbW11X2dhcHBpYCBpcyBhICpnbG9iYWwqIHZhcmlhYmxlLiBUaGF0IGNoYW5nZXMgdGhpbmdzLiBDb3VsZCBpdCBiZSBleHBvc2VkIHRocm91Z2ggc3lzZnMgb3IgZGVidWdmcz8gSWYgc28sIHRoYXQgb3BlbnMgYSBiYWNrZG9vci4gSSBuZWVkIHRvIGludmVzdGlnYXRlIGlmIHRoZXJlJ3MgYW55IG1lY2hhbmlzbSB0byBtb2RpZnkgdGhpcyBnbG9iYWwgdmFyaWFibGUuIFRpbWUgdG8gY2hlY2sgZm9yIGl0cyBleHBvc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU2OTEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTM6Mzc6MDYuNTUzNzI2OTJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MzM3MDM0MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbWRfaW9tbXVfZ2FwcGlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9pb21tdS9hbWQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvaW9tbXUvYW1kL2FtZF9pb21tdS5oPTQzPWludCBhbWRfaW9tbXVfZW5hYmxlX2ZhdWx0aW5nKHVuc2lnbmVkIGludCBjcHUpO1xcbmRyaXZlcnMvaW9tbXUvYW1kL2FtZF9pb21tdS5oOjQ0OmV4dGVybiBib29sIGFtZF9pb21tdV9nYXBwaTtcXG5kcml2ZXJzL2lvbW11L2FtZC9hbWRfaW9tbXUuaC00NS1leHRlcm4gaW50IGFtZF9pb21tdV9ndWVzdF9pcjtcXG4tLVxcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYz0xNjE9aW50IGFtZF9pb21tdV9ncHRfbGV2ZWwgPSBQQUdFX01PREVfNF9MRVZFTDtcXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMTYyLVxcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYzoxNjM6Ym9vbCBhbWRfaW9tbXVfZ2FwcGk7XFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jOjE2NDpFWFBPUlRfU1lNQk9MKGFtZF9pb21tdV9nYXBwaSk7XFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTE2NS1cXG4tLVxcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYz0yOTk4PXN0YXRpYyB2b2lkIGVuYWJsZV9pb21tdXNfdmFwaWModm9pZClcXG4tLVxcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy0zMDA1LVxcdFxcdC8qXFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jOjMwMDY6XFx0XFx0ICogRGlzYWJsZSBHQVBQSSwgZG8gbm90IGNoZWNrIGFtZF9pb21tdV9nYXBwaSBhcyBpdCBtYXkgYmVcXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMzAwNy1cXHRcXHQgKiBmYWxzZSBpbiBuZXcga2V4ZWMga2VybmVsIGV2ZW4gdGhvdWdoIHByZXZpb3VzIGtlcm5lbCBoYXNcXG4tLVxcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy0zMDUwLVxcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYzozMDUxOlxcdGlmIChhbWRfaW9tbXVfZ2FwcGkgXFx1MDAyNlxcdTAwMjZcXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMzA1Mi1cXHQgICAgIShjaGVja19mZWF0dXJlKEZFQVRVUkVfR0FQUEkpIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmMtMzA1NC1cXHRcXHRwcl93YXJuKFxcXCJHQVBQSSBpcyBub3Qgc3VwcG9ydGVkLlxcXFxuXFxcIik7XFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jOjMwNTU6XFx0XFx0YW1kX2lvbW11X2dhcHBpID0gZmFsc2U7XFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTMwNTYtXFx0fVxcbi0tXFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTMwNTktXFx0Zm9yX2VhY2hfaW9tbXUoaW9tbXUpIHtcXG5kcml2ZXJzL2lvbW11L2FtZC9pbml0LmM6MzA2MDpcXHRcXHRpZiAoYW1kX2lvbW11X2dhcHBpKVxcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy0zMDYxLVxcdFxcdFxcdGlvbW11X2ZlYXR1cmVfZW5hYmxlKGlvbW11LCBDT05UUk9MX0dBUFBJX0VOKTtcXG4tLVxcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy0zMDcyLVxcdHByX2luZm8oXFxcIlZpcnR1YWwgQVBJQyBlbmFibGVkIHdpdGggJXNcXFxcblxcXCIsXFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jOjMwNzM6XFx0XFx0YW1kX2lvbW11X2dhcHBpID8gXFxcIkdBUFBJXFxcIiA6IFxcXCJHQUxPR1xcXCIpO1xcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYy0zMDc0LSNlbmRpZlxcbi0tXFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jPTM3Mzc9c3RhdGljIGludCBfX2luaXQgcGFyc2VfYW1kX2lvbW11X29wdGlvbnMoY2hhciAqc3RyKVxcbi0tXFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTM3NjQtXFx0XFx0fSBlbHNlIGlmIChzdHJuY21wKHN0ciwgXFxcImdhcHBpXFxcIiwgNSkgPT0gMCkge1xcbmRyaXZlcnMvaW9tbXUvYW1kL2luaXQuYzozNzY1OlxcdFxcdFxcdGFtZF9pb21tdV9nYXBwaSA9IHRydWU7XFxuZHJpdmVycy9pb21tdS9hbWQvaW5pdC5jLTM3NjYtXFx0XFx0fSBlbHNlIHtcXG4tLVxcbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmM9Mzk2Mj1zdGF0aWMgdm9pZCBfX2FtZF9pb21tdV91cGRhdGVfZ2Eoc3RydWN0IGlydGVfZ2EgKmVudHJ5LCBpbnQgYXBpY2lkLFxcbi0tXFxuZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuYy0zOTcyLVxcdH0gZWxzZSB7XFxuZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuYzozOTczOlxcdFxcdGlmIChhbWRfaW9tbXVfZ2FwcGkpIHtcXG5kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jLTM5NzQtXFx0XFx0XFx0ZW50cnktXFx1MDAzZWxvLmZpZWxkc192YXBpYy5nYXBwaV9kaXMgPSAhd2FrZXVwX2ludHIgXFx1MDAyNlxcdTAwMjZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTM6Mzc6MDYuNzA3MTA0MjMxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIwMDQyNDc0NTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIEFNRCBJT01NVSBHQVBQSSBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggc2VlbXMgdG8gaW50cm9kdWNlIEdBUFBJIChHdWVzdCBBUElDLWJhc2VkIFBvc3RlZCBJbnRlcnJ1cHQpIHN1cHBvcnQgZm9yIHRoZSBBTUQgSU9NTVUsIHdoaWNoIEkgYmVsaWV2ZSBpcyByZWxhdGVkIHRvIGludGVycnVwdCBoYW5kbGluZy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYGFtZF9pb21tdV9nYXBwaWAgaXMgdGhlIGtleSBmbGFnIGhlcmUsIGFuZCBpdCdzIHNldCBvbmx5IHdoZW4gYGFtZF9pb21tdT1nYXBwaWAgaXMgcGFzc2VkIGFzIGEga2VybmVsIHBhcmFtZXRlci4gSSd2ZSBjb25maXJtZWQgdGhlcmUncyBubyBvdGhlciB3YXkgdG8gc2V0IGl0LlxuXG5UaGUgaW50ZXJlc3RpbmcgcG9pbnQgaXMgaG93IHRoZSBjb2RlICpiZWhhdmVzKiB3aGVuIGBhbWRfaW9tbXVfZ2FwcGlgIGlzICpub3QqIHNldC4gVGhlIHBhdGNoIGRvZXMgbW9kaWZ5IHRoZSBub24tR0FQUEkgcGF0aCwgYnV0IGl0IGFwcGVhcnMgdG8gYmUgcHJpbWFyaWx5IGEgcmVmYWN0b3Jpbmcgb3IgY2xlYW51cC4gVmFyaWFibGVzIGFyZSByZW5hbWVkIChgZ2FfbG9nX2ludHJgIHRvIGB3YWtldXBfaW50cmApIGFuZCBzb21lIGxvZ2ljIGlzIHR3ZWFrZWQsIGJ1dCB0aGUgKmZ1bmN0aW9uYWxpdHkqIHJlbWFpbnMgZXNzZW50aWFsbHkgdGhlIHNhbWUgZm9yIHRoZSBub24tR0FQUEkgcGF0aC4gVGhlIGtleSBjaGFuZ2UgaXMgdGhhdCBgYW1kX2lvbW11X3VwZGF0ZV9nYWAgbm93IHRha2VzIGBhcGljaWRgLCBgd2FrZXVwX2ludHJgLCBhbmQgYGlzX3J1bm5pbmdgIGFyZ3VtZW50cywgcmVwbGFjaW5nIHRoZSBvcmlnaW5hbCBgY3B1YCBhbmQgYGdhX2xvZ19pbnRyYC5cblxuTG9va2luZyBkZWVwZXIsIHRoZSBvcmlnaW5hbCBgY3B1YCBhcmd1bWVudCBpbiBgYXZpY191cGRhdGVfaW9tbXVfdmNwdV9hZmZpbml0eWAgd2FzIGFjdHVhbGx5IHRoZSBBUElDIElELCBub3QgdGhlIENQVSBudW1iZXIsIHdoaWNoIHRoaXMgcGF0Y2ggY29ycmVjdGx5IGNhcHR1cmVzLiBUaGUgcmVuYW1pbmcgdG8gYGFwaWNpZGAgaXMgdGh1cyBtb3JlIGFjY3VyYXRlIGFuZCBjbGVhcmVyLlxuXG5UaGUgbmV3IEdBUFBJLXNwZWNpZmljIGNvZGUsIGxpa2UgYGF2aWNfYWRkX3ZjcHVfdG9fZ2FwcGlfd2FrZXVwX2xpc3RgIGFuZCByZWxhdGVkIGNoYW5nZXMsIGlzIGVudGlyZWx5IGdhdGVkIGJ5IHRoZSBgYW1kX2lvbW11X2dhcHBpYCBmbGFnLCB3aGljaCBtZWFucyBpdCBpcyBpbmFjY2Vzc2libGUgd2l0aG91dCBwYXNzaW5nIGBhbWRfaW9tbXU9Z2FwcGlgLlxuXG5HaXZlbiBTeXprYWxsZXIncyBiZWhhdmlvciwgSSBuZWVkIHRvIGV2YWx1YXRlIGlmIHRoZSBwYXRjaCAqc2hvdWxkKiBiZSBmdXp6ZWQuIFRoZSBwYXRjaCBzZWVtcyB0byBpbnRyb2R1Y2UgKm5ldyogZnVuY3Rpb25hbCBiZWhhdmlvciwgYW5kIHRoYXQgaXMgR0FQUEkuIFN5emthbGxlciBjYW4gcGFzcyB0aGUgbmVlZGVkIGtlcm5lbCBwYXJhbWV0ZXIuIFRoZXJlZm9yZSwgdGhpcyBwYXRjaCB3YXJyYW50cyBmdXp6aW5nLCBzaW5jZSBpdCBpbnRyb2R1Y2VzIEdBUFBJLlxuXG5UaGUgcmVxdWlyZWQgS2NvbmZpZyBvcHRpb25zIGFyZSBgS1ZNX0FNRGAgYW5kIGBBTURfSU9NTVVgIGJlY2F1c2UgdGhleSBlbmFibGUgdGhlIGZ1bmRhbWVudGFsIEFNRCBLVk0gYW5kIElPTU1VIGZ1bmN0aW9uYWxpdHkgb24gd2hpY2ggdGhpcyBHQVBQSSBmZWF0dXJlIGlzIGJ1aWx0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzE2MywiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwNjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTM6Mzc6MjYuNzQ5NTgwOFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE2MTY1MzA5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNX0FNRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9MTM0PWNvbmZpZyBLVk1fSU5URUxfVERYXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTQ2OmNvbmZpZyBLVk1fQU1EXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ3LVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cXHRib29sIFxcXCJBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxMzozNzoyOS45MTEyMzk3ODhaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDkzMjIwNzIxNTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4gTXkgZmlyc3QgdGhvdWdodCBpczpcblxuKipDaGVja2luZyBEZXBlbmRlbmNpZXMgZm9yIGBBTURfSU9NTVVgKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiB0aGUgYEFNRF9JT01NVWAgbW9kdWxlIGhhcyBhbnkgZGVwZW5kZW5jaWVzIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IG90aGVyIGNvbXBvbmVudHMgb3Igc2V0dGluZ3MgaXQgcmVsaWVzIG9uIGJlZm9yZSBJIGNhbiBwcm9wZXJseSBhc3Nlc3MgaXRzIGZ1bmN0aW9uIG9yIHBvdGVudGlhbCBpc3N1ZXMuIFRoaXMgaXMgYSBmdW5kYW1lbnRhbCBzdGVwIGZvciBtZTsgaWYgaXQgZGVwZW5kcyBvbiBzb21ldGhpbmcsIEkgbmVlZCB0byBrbm93ICp3aGF0KiBzbyBJIGNhbiBhc3Nlc3Mgd2hldGhlciB0aGF0IGRlcGVuZGVuY3kgaXMgc2V0IHVwIGNvcnJlY3RseSwgb3Igd2hhdCB0aGUga25vY2stb24gZWZmZWN0cyBvZiBtZXNzaW5nIHdpdGggYEFNRF9JT01NVWAgbWlnaHQgYmUuIFRpbWUgdG8gZGlnIGluIGFuZCBmaW5kIG91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk5MjIsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxMzozODoxOS4yMzMzMTcwNjdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwODA2NTg0MjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEFNRF9JT01NVVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZy0yLSMgQU1EIElPTU1VIHN1cHBvcnRcXG5kcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnOjM6Y29uZmlnIEFNRF9JT01NVVxcbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWctNC1cXHRib29sIFxcXCJBTUQgSU9NTVUgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWctMzItXFxuZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZzozMzpjb25maWcgQU1EX0lPTU1VX0lPTU1VRkRcXG5kcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnLTM0LVxcdGJvb2wgXFxcIkVuYWJsZSBJT01NVUZEIGZlYXR1cmVzIGZvciBBTUQgSU9NTVUgKEVYUEVSSU1FTlRBTClcXFwiXFxuLS1cXG5kcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnLTQyLVxcbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWc6NDM6Y29uZmlnIEFNRF9JT01NVV9ERUJVR0ZTXFxuZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZy00NC1cXHRib29sIFxcXCJFbmFibGUgQU1EIElPTU1VIGludGVybmFscyBpbiBEZWJ1Z0ZTXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxMzozODoyMy4zMTM5ODM5NTRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTgxMTY2ODY3NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipFeGFtaW5pbmcgQU1EIElPTU1VIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIGxldCdzIGRpdmUgcmlnaHQgaW4uIFRvIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIHBpY3R1cmUgb2YgaG93IGBBTURfSU9NTVVgIGlzIGNvbmZpZ3VyZWQgYW5kIHVzZWQsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaXRzIGRlcGVuZGVuY2llcy4gSSdtIGdvaW5nIHRvIG5hdmlnYXRlIHRvIHRoZSBgZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IOKAkyBpdCdzIHdoZXJlIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoaXMgc3BlY2lmaWMgQU1EIElPTU1VIGRyaXZlciBhcmUgZGVmaW5lZCwgYW5kIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiBgQU1EX0lPTU1VYCBhbmQgb3RoZXIgZmVhdHVyZXMgb3Igb3B0aW9ucyB3aXRoaW4gdGhlIGtlcm5lbC4gSSdtIGxvb2tpbmcgZm9yIHRoZSBjb25kaXRpb25hbCBsb2dpYywgdGhlIGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzLCBhbnkgYHNlbGVjdGAgc3RhdGVtZW50cywgYW5kIGFueXRoaW5nIHRoYXQgZ2l2ZXMgbWUgaW5zaWdodCBpbnRvIHdoYXQgZWxzZSAqbXVzdCogYmUgZW5hYmxlZCBvciBjb25zaWRlcmVkIGluIG9yZGVyIGZvciBgQU1EX0lPTU1VYCB0byBiZSBhdmFpbGFibGUgYW5kIGZ1bmN0aW9uYWwuIEkgZXhwZWN0IHRoaXMgZmlsZSB3aWxsIHJldmVhbCB0aGUga2V5IGJ1aWxkaW5nIGJsb2Nrcy4gTGV0J3Mgc2VlIHdoYXQncyB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAzMjEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxMzozODo0MS40MzA2NzMzOTVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxOTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCMgQU1EIElPTU1VIHN1cHBvcnRcXG4gICAzOlxcdGNvbmZpZyBBTURfSU9NTVVcXG4gICA0OlxcdFxcdGJvb2wgXFxcIkFNRCBJT01NVSBzdXBwb3J0XFxcIlxcbiAgIDU6XFx0XFx0c2VsZWN0IFNXSU9UTEJcXG4gICA2OlxcdFxcdHNlbGVjdCBQQ0lfTVNJXFxuICAgNzpcXHRcXHRzZWxlY3QgUENJX0FUU1xcbiAgIDg6XFx0XFx0c2VsZWN0IFBDSV9QUklcXG4gICA5OlxcdFxcdHNlbGVjdCBQQ0lfUEFTSURcXG4gIDEwOlxcdFxcdHNlbGVjdCBJUlFfTVNJX0xJQlxcbiAgMTE6XFx0XFx0c2VsZWN0IE1NVV9OT1RJRklFUlxcbiAgMTI6XFx0XFx0c2VsZWN0IElPTU1VX0FQSVxcbiAgMTM6XFx0XFx0c2VsZWN0IElPTU1VX0lPVkFcXG4gIDE0OlxcdFxcdHNlbGVjdCBJT01NVV9TVkFcXG4gIDE1OlxcdFxcdHNlbGVjdCBJT01NVV9JT1BGXFxuICAxNjpcXHRcXHRzZWxlY3QgSU9NTVVGRF9EUklWRVIgaWYgSU9NTVVGRFxcbiAgMTc6XFx0XFx0c2VsZWN0IEdFTkVSSUNfUFRcXG4gIDE4OlxcdFxcdHNlbGVjdCBJT01NVV9QVFxcbiAgMTk6XFx0XFx0c2VsZWN0IElPTU1VX1BUX0FNRFYxXFxuICAyMDpcXHRcXHRzZWxlY3QgSU9NTVVfUFRfWDg2XzY0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDEzOjM4OjQxLjQzMDc3ODY2NVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTcwNjIyMjg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy5cblxuKipJJ20gRGVlcCBpbiB0aGUgV2VlZHMgb24gSU9NTVUgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBzbyBJJ20gZm9jdXNpbmcgb24gZ2V0dGluZyB0aGlzIEFNRCBJT01NVSBpbXBsZW1lbnRhdGlvbiBjb25maWd1cmVkIHByb3Blcmx5LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbWFrZSBzdXJlIEkndmUgZ290IGBBTURfSU9NTVVgIGVuYWJsZWQgaW4gdGhlIGNvbmZpZy4gVGhhdCdzIHRoZSBiYXNlbGluZS4gQnV0IEkgY2FuJ3QganVzdCBzdG9wIHRoZXJlLiBUaGUgbmV4dCBrZXkgYXNwZWN0IG9mIHRoaXMsIGJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcsIHdvdWxkIGJlIHRvIGNvbnNpZGVyIGBJUlFfUkVNQVBgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhhdCBpcyBnb2luZyB0byBpbnRlcmFjdCB3aXRoIHRoZSBJT01NVS4gRG9lcyBpdCBuZWVkIHRvIGJlIGVuYWJsZWQgZm9yIG9wdGltYWwgcGVyZm9ybWFuY2U/IERvZXMgdGhlIGltcGxlbWVudGF0aW9uIGRlcGVuZCBvbiBpdD8gSSBuZWVkIHRvIHRoaW5rIGNhcmVmdWxseSBhYm91dCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZXNlIHNldHRpbmdzLiBJIGtub3cgYElSUV9SRU1BUGAgaXMgY3J1Y2lhbCB0byBtYWtpbmcgc3VyZSB0aGF0IHRoZSBpbnRlcnJ1cHRzIGFyZSBwcm9wZXJseSBtYXBwZWQgdGhyb3VnaCB0aGUgSU9NTVUsIHRoZXJlZm9yZSBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgYWxsIHNldCB1cCBjb3JyZWN0bHkuIFRoaXMgYWxsIHRpZXMgdG9nZXRoZXIsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgYWxsIGZ1bmN0aW9uaW5nIHRvZ2V0aGVyIHByb3Blcmx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDg2NCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTM6Mzg6NDUuMDAxNDA1MzAyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4ODc5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2lvbW11L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTkwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTkwOlxcdFxcdCAgVGhlc2UgSU9NTVVzIGFsbG93IHZpcnR1YWxpemF0aW9uIG9mIHRoZSBhZGRyZXNzIHNwYWNlIHVzZWQgYnkgbW9zdFxcbiAxOTE6XFx0XFx0ICBjb3JlcyB3aXRoaW4gdGhlIG11bHRpbWVkaWEgc3Vic3lzdGVtLlxcbiAxOTI6XFx0XFxuIDE5MzpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4gaGVyZS5cXG4gMTk0OlxcdFxcbiAxOTU6XFx0c291cmNlIFxcXCJkcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnXFxcIlxcbiAxOTY6XFx0c291cmNlIFxcXCJkcml2ZXJzL2lvbW11L2FybS9LY29uZmlnXFxcIlxcbiAxOTc6XFx0c291cmNlIFxcXCJkcml2ZXJzL2lvbW11L2ludGVsL0tjb25maWdcXFwiXFxuIDE5ODpcXHRzb3VyY2UgXFxcImRyaXZlcnMvaW9tbXUvaW9tbXVmZC9LY29uZmlnXFxcIlxcbiAxOTk6XFx0c291cmNlIFxcXCJkcml2ZXJzL2lvbW11L3Jpc2N2L0tjb25maWdcXFwiXFxuIDIwMDpcXHRcXG4gMjAxOlxcdGNvbmZpZyBJUlFfUkVNQVBcXG4gMjAyOlxcdFxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIEludGVycnVwdCBSZW1hcHBpbmdcXFwiXFxuIDIwMzpcXHRcXHRkZXBlbmRzIG9uIFg4Nl82NCBcXHUwMDI2XFx1MDAyNiBYODZfSU9fQVBJQyBcXHUwMDI2XFx1MDAyNiBQQ0lfTVNJIFxcdTAwMjZcXHUwMDI2IEFDUElcXG4gMjA0OlxcdFxcdHNlbGVjdCBJUlFfTVNJX0xJQlxcbiAyMDU6XFx0XFx0aGVscFxcbiAyMDY6XFx0XFx0ICBTdXBwb3J0cyBJbnRlcnJ1cHQgcmVtYXBwaW5nIGZvciBJTy1BUElDIGFuZCBNU0kgZGV2aWNlcy5cXG4gMjA3OlxcdFxcdCAgVG8gdXNlIHgyYXBpYyBtb2RlIGluIHRoZSBDUFUncyB3aGljaCBzdXBwb3J0IHgyQVBJQyBlbmhhbmNlbWVudHMgb3JcXG4gMjA4OlxcdFxcdCAgdG8gc3VwcG9ydCBwbGF0Zm9ybXMgd2l0aCBDUFUncyBoYXZpbmcgXFx1MDAzZSA4IGJpdCBBUElDIElELCBzYXkgWS5cXG4gMjA5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxMzozODo0NS4wMDE3MDY5MTJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTEzNTI2NTIwMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEFNRCBJT01NVSBhbmQgQVZJQyBGdW5jdGlvbmFsaXR5KipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgdGhlIEFNRCBJT01NVSBhbmQgQWR2YW5jZWQgVmlydHVhbCBJbnRlcnJ1cHQgQ29udHJvbGxlciAoQVZJQykgcGxheSB0b2dldGhlciwgYW5kIGl0J3MgYmVjb21pbmcgY2xlYXIgd2hlcmUgdGhlIGRlcGVuZGVuY2llcyBsaWUuIFNwZWNpZmljYWxseSwgSSBzZWUgdGhhdCBgSVJRX1JFTUFQYCBpcyBjcnVjaWFsLiBJdCdzIGVzc2VudGlhbCBmb3IgYGFtZF9pb21tdV91cGRhdGVfZ2FgIGFuZCBgYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGVgIHRvIGJlIGRlZmluZWQgYW5kLCB0aGVyZWZvcmUsIHVzYWJsZS4gSSBjb25maXJtZWQgdGhpcyBieSBjaGVja2luZyB0aGUgaW5jbHVkZSBmaWxlIGBsaW51eC9hbWQtaW9tbXUuaGAsIHNlZWluZyB0aGF0IGJvdGggYENPTkZJR19BTURfSU9NTVVgIGFuZCBgQ09ORklHX0lSUV9SRU1BUGAgYXJlIHJlcXVpcmVkLiBBbHNvLCB0aGUgS1ZNIHNpZGUgcmVxdWlyZXMgYEtWTV9BTURgLlxuXG5Ob3csIEkgd2FudCB0byBpZGVudGlmeSB0aGUga2V5IHN5bWJvbHMgdG8gZm9jdXMgb24gaW4gdGhpcyBhbmFseXNpcy4gTGV0J3Mgc2VlLi4uIEkndmUgaWRlbnRpZmllZDogYGF2aWNfYWRkX3ZjcHVfdG9fZ2FwcGlfd2FrZXVwX2xpc3RgLCBgYXZpY19yZW1vdmVfdmNwdV9mcm9tX2dhcHBpX3dha2V1cF9saXN0YCwgYGF2aWNfZ2FwcGlfd2FrZXVwX2hhbmRsZXJgLCBgX19hbWRfaW9tbXVfdXBkYXRlX2dhYCwgYGFtZF9pb21tdV91cGRhdGVfZ2FgLCBhbmQgYGFtZF9pb21tdV9hY3RpdmF0ZV9ndWVzdF9tb2RlYC4gSSdtIGFsc28gZ29pbmcgdG8gYWRkIGEgZmV3IG1vcmUgdG8gdGhlIGxpc3QgdGhhdCBJJ3ZlIGZvdW5kIHdoaWxlIGxvb2tpbmcgb3ZlciB0aGUgY29kZTogYGF2aWNfaW5pdF92Y3B1YCwgYGF2aWNfZGVzdHJveV92Y3B1YCwgYGF2aWNfcGlfdXBkYXRlX2lydGVgIGFuZCBgYXZpY191cGRhdGVfaW9tbXVfdmNwdV9hZmZpbml0eWAuIEknbGwgd2FudCB0byBpbmNsdWRlIGFsbCBvZiB0aGVzZTogYGF2aWNfYWRkX3ZjcHVfdG9fZ2FwcGlfd2FrZXVwX2xpc3RgLCBgYXZpY19yZW1vdmVfdmNwdV9mcm9tX2dhcHBpX3dha2V1cF9saXN0YCwgYGF2aWNfZ2FwcGlfd2FrZXVwX2hhbmRsZXJgLCBgYXZpY19waV91cGRhdGVfaXJ0ZWAsIGBhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5YCwgYF9fYW1kX2lvbW11X3VwZGF0ZV9nYWAsIGBhbWRfaW9tbXVfdXBkYXRlX2dhYCwgYW5kIGBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZWAuXG5cbk5leHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoaWNoIG9mIHRoZXNlIGZ1bmN0aW9ucyBhcmUgXCJob3QgcGF0aFwiIOKAkyB3aGljaCBvbmVzIGFyZSBjYWxsZWQgZnJlcXVlbnRseSBhbmQgYXJlIHRoZXJlZm9yZSBsaWtlbHkgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MuIExvb2tpbmcgYXQgYGF2aWNfdXBkYXRlX2lvbW11X3ZjcHVfYWZmaW5pdHlgLCBJIHNlZSBpdCdzIGNhbGxlZCBmcm9tIGBfX2F2aWNfdmNwdV9sb2FkYCBhbmQgYF9fYXZpY192Y3B1X3B1dGAsIHdoaWNoIGFyZSBpbnZvbHZlZCB3aGVuIGEgdkNQVSBpcyBzY2hlZHVsZWQgaW4gb3Igb3V0LiBUaGlzIGlzIHNvbWV3aGF0IGhvdCwgYnV0IG5vdCBhcyBob3QgYXMsIHNheSwgVk0tZXhpdCBoYW5kbGVycy4gYGF2aWNfcGlfdXBkYXRlX2lydGVgIHVwZGF0ZXMgdGhlIElSVEUsIGJ1dCBpdCdzIG5vdCBob3QsIG5vdCBjYWxsZWQgY29uc3RhbnRseS4gYGF2aWNfZ2FwcGlfd2FrZXVwX2hhbmRsZXJgIGlzIHRyaWdnZXJlZCBieSBwb3N0ZWQgaW50ZXJydXB0IHdha2V1cHMuIGBfX2FtZF9pb21tdV91cGRhdGVfZ2FgIGlzIGNhbGxlZCBmcm9tIGBhbWRfaW9tbXVfdXBkYXRlX2dhYCBhbmQgYGFtZF9pb21tdV9hY3RpdmF0ZV9ndWVzdF9tb2RlYCwgYW5kIHRoZXNlIHR3byBhcmUgZ29pbmcgdG8gYmUgaW1wb3J0YW50IHRvIGxvb2sgYXQuIFNvIG15IHJldmlzZWQgbGlzdCBvZiBmdW5jdGlvbnMgdG8gZm9jdXMgb24gbG9va3MgbGlrZSB0aGlzOlxuXG4qICAgYGF2aWNfYWRkX3ZjcHVfdG9fZ2FwcGlfd2FrZXVwX2xpc3RgXG4qICAgYGF2aWNfcmVtb3ZlX3ZjcHVfZnJvbV9nYXBwaV93YWtldXBfbGlzdGBcbiogICBgYXZpY19nYXBwaV93YWtldXBfaGFuZGxlcmBcbiogICBgYXZpY19waV91cGRhdGVfaXJ0ZWBcbiogICBgYXZpY191cGRhdGVfaW9tbXVfdmNwdV9hZmZpbml0eWBcbiogICBgX19hbWRfaW9tbXVfdXBkYXRlX2dhYFxuKiAgIGBhbWRfaW9tbXVfdXBkYXRlX2dhYFxuKiAgIGBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZWBcblxuTm93LCBqdXN0IHRvIGJlIHRob3JvdWdoLCBJJ2xsIHF1aWNrbHkgdmVyaWZ5IHRoYXQgdGhlc2UgZnVuY3Rpb25zIGRvIGluZGVlZCBleGlzdCBhbmQgdGhhdCBJJ3ZlIGdvdCB0aGUgbmFtZXMgc3BlbGxlZCBjb3JyZWN0bHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNDg4LCJPdXRwdXRUb2tlbnMiOjExNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDEzOjM4OjU2LjM1NDM2MjEyNloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMxNzUwMzY1MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIoYXZpY19hZGRfdmNwdV90b19nYXBwaV93YWtldXBfbGlzdHxhdmljX3JlbW92ZV92Y3B1X2Zyb21fZ2FwcGlfd2FrZXVwX2xpc3R8YXZpY19nYXBwaV93YWtldXBfaGFuZGxlcnxhdmljX3BpX3VwZGF0ZV9pcnRlfGF2aWNfdXBkYXRlX2lvbW11X3ZjcHVfYWZmaW5pdHl8X19hbWRfaW9tbXVfdXBkYXRlX2dhfGFtZF9pb21tdV91cGRhdGVfZ2F8YW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYz04NzI9aW50IGF2aWNfaW5pdF92Y3B1KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtODk0LVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjg5NTpzdGF0aWMgdm9pZCBhdmljX2FkZF92Y3B1X3RvX2dhcHBpX3dha2V1cF9saXN0KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBpbnQgY3B1KVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTg5Ni17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy05MDktXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6OTEwOnN0YXRpYyB2b2lkIGF2aWNfcmVtb3ZlX3ZjcHVfZnJvbV9nYXBwaV93YWtldXBfbGlzdChzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgaW50IGNwdSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy05MTEte1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM9OTIzPXZvaWQgYXZpY19kZXN0cm95X3ZjcHUoc3RydWN0IHZjcHVfc3ZtICpzdm0pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy05MjUtXFx0aWYgKHN2bS1cXHUwMDNlZ2FwcGlfY3B1ICE9IC0xIFxcdTAwMjZcXHUwMDI2IGFtZF9pb21tdV9nYXBwaSkge1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjkyNjpcXHRcXHRhdmljX3JlbW92ZV92Y3B1X2Zyb21fZ2FwcGlfd2FrZXVwX2xpc3Qoc3ZtLCBzdm0tXFx1MDAzZWdhcHBpX2NwdSk7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtOTI3LVxcdFxcdHN2bS1cXHUwMDNlZ2FwcGlfY3B1ID0gLTE7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYz05Mzc9c3RhdGljIHZvaWQgc3ZtX2lyX2xpc3RfZGVsKHN0cnVjdCBrdm1fa2VybmVsX2lycWZkICppcnFmZClcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTk1MC1cXHRpZiAoYW1kX2lvbW11X2dhcHBpIFxcdTAwMjZcXHUwMDI2IGxpc3RfZW1wdHkoXFx1MDAyNnN2bS1cXHUwMDNlaXJfbGlzdCkpXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6OTUxOlxcdFxcdGF2aWNfcmVtb3ZlX3ZjcHVfZnJvbV9nYXBwaV93YWtldXBfbGlzdChzdm0sIHN2bS1cXHUwMDNlZ2FwcGlfY3B1KTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy05NTItXFx0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnN2bS1cXHUwMDNlaXJfbGlzdF9sb2NrLCBmbGFncyk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy05NTQtXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6OTU1OmludCBhdmljX3BpX3VwZGF0ZV9pcnRlKHN0cnVjdCBrdm1fa2VybmVsX2lycWZkICppcnFmZCwgc3RydWN0IGt2bSAqa3ZtLFxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTk1Ni1cXHRcXHRcXHR1bnNpZ25lZCBpbnQgaG9zdF9pcnEsIHVpbnQzMl90IGd1ZXN0X2lycSxcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTEwMTMtXFx0XFx0XFx0XFx0aWYgKGxpc3RfZW1wdHkoXFx1MDAyNnN2bS1cXHUwMDNlaXJfbGlzdCkpIHtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzoxMDE0OlxcdFxcdFxcdFxcdFxcdGF2aWNfYWRkX3ZjcHVfdG9fZ2FwcGlfd2FrZXVwX2xpc3Qoc3ZtLCBzdm0tXFx1MDAzZWdhcHBpX2NwdSk7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMTAxNS1cXHRcXHRcXHRcXHRcXHRpc192Y3B1X3dhaXRpbmcgPSB0cnVlO1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMTAzOS1cXHRcXHRpZiAoaXNfdmNwdV93YWl0aW5nKVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjEwNDA6XFx0XFx0XFx0YXZpY19yZW1vdmVfdmNwdV9mcm9tX2dhcHBpX3dha2V1cF9saXN0KHN2bSwgc3ZtLVxcdTAwM2VnYXBwaV9jcHUpO1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTEwNDEtXFx0XFx0cmV0dXJuIHJldDtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jPTEwNDY9ZW51bSBhdmljX3ZjcHVfYWN0aW9uIHtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTEwNzMtXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MTA3NDpzdGF0aWMgdm9pZCBhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGFwaWNpZCxcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMDc1LVxcdFxcdFxcdFxcdFxcdCAgICBpbnQgY3B1LCBlbnVtIGF2aWNfdmNwdV9hY3Rpb24gYWN0aW9uKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMTA5OS1cXHRcXHRcXHQgKi9cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzoxMTAwOlxcdFxcdFxcdGF2aWNfcmVtb3ZlX3ZjcHVfZnJvbV9nYXBwaV93YWtldXBfbGlzdChzdm0sIHN2bS1cXHUwMDNlZ2FwcGlfY3B1KTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMTAxLVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMTEwNC1cXHRcXHRhcGljaWQgPSBrdm1fY3B1X2dldF9hcGljaWQoc3ZtLVxcdTAwM2VnYXBwaV9jcHUpO1xcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjExMDU6XFx0XFx0YXZpY19hZGRfdmNwdV90b19nYXBwaV93YWtldXBfbGlzdChzdm0sIHN2bS1cXHUwMDNlZ2FwcGlfY3B1KTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMTA2LVxcdH1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTExMTEtXFx0XFx0aWYgKCEoYWN0aW9uIFxcdTAwMjYgQVZJQ19UT0dHTEVfT05fT0ZGKSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzoxMTEyOlxcdFxcdFxcdFdBUk5fT05fT05DRShhbWRfaW9tbXVfdXBkYXRlX2dhKGRhdGEsIGFwaWNpZCwgd2FrZXVwX2ludHIsIGlzX3J1bm5pbmcpKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMTEzLVxcdFxcdGVsc2UgaWYgKGlzX3J1bm5pbmcpXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MTExNDpcXHRcXHRcXHRXQVJOX09OX09OQ0UoYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUoZGF0YSwgYXBpY2lkLCB3YWtldXBfaW50cixcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMTE1LVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGlzX3J1bm5pbmcpKTtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jPTExMjE9c3RhdGljIHZvaWQgX19hdmljX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMTY4LVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jOjExNjk6XFx0YXZpY191cGRhdGVfaW9tbXVfdmNwdV9hZmZpbml0eSh2Y3B1LCBoX3BoeXNpY2FsX2lkLCBjcHUsIGFjdGlvbik7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMTE3MC1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jPTExODk9c3RhdGljIHZvaWQgX19hdmljX3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZW51bSBhdmljX3ZjcHVfYWN0aW9uIGFjdGlvbilcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jLTEyMTEtXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MTIxMjpcXHRhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5KHZjcHUsIC0xLCAtMSwgYWN0aW9uKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMjEzLVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM9MTM0ND1zdGF0aWMgYm9vbCBfX2luaXQgYXZpY193YW50X2F2aWNfZW5hYmxlZCh2b2lkKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMTM4NC1cXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYzoxMzg1OnN0YXRpYyB2b2lkIGF2aWNfZ2FwcGlfd2FrZXVwX2hhbmRsZXIodm9pZClcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xMzg2LXtcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vYXZpYy5jPTE0MDY9Ym9vbCBfX2luaXQgYXZpY19oYXJkd2FyZV9zZXR1cCh2b2lkKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmMtMTQ0Mi1cXHRhbWRfaW9tbXVfcmVnaXN0ZXJfZ2FfbG9nX25vdGlmaWVyKFxcdTAwMjZhdmljX2dhX2xvZ19ub3RpZmllcik7XFxuYXJjaC94ODYva3ZtL3N2bS9hdmljLmM6MTQ0MzpcXHRrdm1fc2V0X3Bvc3RlZF9pbnRyX3dha2V1cF9oYW5kbGVyKFxcdTAwMjZhdmljX2dhcHBpX3dha2V1cF9oYW5kbGVyKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL2F2aWMuYy0xNDQ0LVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz01MjcyPXN0cnVjdCBrdm1feDg2X29wcyBzdm1feDg2X29wcyBfX2luaXRkYXRhID0ge1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01Mzc3LVxcdC5kZWxpdmVyX2ludGVycnVwdCA9IHN2bV9kZWxpdmVyX2ludGVycnVwdCxcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjUzNzg6XFx0LnBpX3VwZGF0ZV9pcnRlID0gYXZpY19waV91cGRhdGVfaXJ0ZSxcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTUzNzktXFx0LnNldHVwX21jZSA9IHN2bV9zZXR1cF9tY2UsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oPTkyMD12b2lkIGF2aWNfcmVmcmVzaF9hcGljdl9leGVjX2N0cmwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oOjkyMTppbnQgYXZpY19waV91cGRhdGVfaXJ0ZShzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFmZCAqaXJxZmQsIHN0cnVjdCBrdm0gKmt2bSxcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oLTkyMi1cXHRcXHRcXHR1bnNpZ25lZCBpbnQgaG9zdF9pcnEsIHVpbnQzMl90IGd1ZXN0X2lycSxcXG4tLVxcbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmM9Mzk1ND1zdGF0aWMgY29uc3Qgc3RydWN0IGlycV9kb21haW5fb3BzIGFtZF9pcl9kb21haW5fb3BzID0ge1xcbi0tXFxuZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuYy0zOTYxLVxcbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmM6Mzk2MjpzdGF0aWMgdm9pZCBfX2FtZF9pb21tdV91cGRhdGVfZ2Eoc3RydWN0IGlydGVfZ2EgKmVudHJ5LCBpbnQgYXBpY2lkLFxcbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmMtMzk2My1cXHRcXHRcXHRcXHQgIGJvb2wgd2FrZXVwX2ludHIsIGJvb2wgaXNfcnVubmluZylcXG4tLVxcbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmMtNDAwNC0gKi9cXG5kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jOjQwMDU6aW50IGFtZF9pb21tdV91cGRhdGVfZ2Eodm9pZCAqZGF0YSwgaW50IGFwaWNpZCwgYm9vbCB3YWtldXBfaW50ciwgYm9vbCBpc19ydW5uaW5nKVxcbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmMtNDAwNi17XFxuLS1cXG5kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jLTQwMTgtXFxuZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuYzo0MDE5OlxcdF9fYW1kX2lvbW11X3VwZGF0ZV9nYShlbnRyeSwgYXBpY2lkLCB3YWtldXBfaW50ciwgaXNfcnVubmluZyk7XFxuZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuYy00MDIwLVxcbi0tXFxuZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuYy00MDIzLX1cXG5kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jOjQwMjQ6RVhQT1JUX1NZTUJPTChhbWRfaW9tbXVfdXBkYXRlX2dhKTtcXG5kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jLTQwMjUtXFxuZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuYzo0MDI2OmludCBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZSh2b2lkICpkYXRhLCBpbnQgYXBpY2lkLCBib29sIHdha2V1cF9pbnRyLCBib29sIGlzX3J1bm5pbmcpXFxuZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuYy00MDI3LXtcXG4tLVxcbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmMtNDA0OC1cXG5kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jOjQwNDk6XFx0X19hbWRfaW9tbXVfdXBkYXRlX2dhKGVudHJ5LCBhcGljaWQsIHdha2V1cF9pbnRyLCBpc19ydW5uaW5nKTtcXG5kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jLTQwNTAtXFxuLS1cXG5kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jLTQwNTMtfVxcbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmM6NDA1NDpFWFBPUlRfU1lNQk9MKGFtZF9pb21tdV9hY3RpdmF0ZV9ndWVzdF9tb2RlKTtcXG5kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jLTQwNTUtXFxuLS1cXG5kcml2ZXJzL2lvbW11L2FtZC9pb21tdS5jPTQwODg9c3RhdGljIGludCBhbWRfaXJfc2V0X3ZjcHVfYWZmaW5pdHkoc3RydWN0IGlycV9kYXRhICpkYXRhLCB2b2lkICppbmZvKVxcbi0tXFxuZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuYy00MTE5LVxcdFxcdGlmIChwaV9kYXRhLVxcdTAwM2Vpc19ndWVzdF9tb2RlKVxcbmRyaXZlcnMvaW9tbXUvYW1kL2lvbW11LmM6NDEyMDpcXHRcXHRcXHRyZXQgPSBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZShpcl9kYXRhLCBwaV9kYXRhLVxcdTAwM2VhcGljaWQsXFxuZHJpdmVycy9pb21tdS9hbWQvaW9tbXUuYy00MTIxLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBwaV9kYXRhLVxcdTAwM2V3YWtldXBfaW50cixcXG4tLVxcbmluY2x1ZGUvbGludXgvYW1kLWlvbW11Lmg9MzE9ZXh0ZXJuIGludCBhbWRfaW9tbXVfcmVnaXN0ZXJfZ2FfbG9nX25vdGlmaWVyKGludCAoKm5vdGlmaWVyKSh1MzIpKTtcXG5pbmNsdWRlL2xpbnV4L2FtZC1pb21tdS5oLTMyLVxcbmluY2x1ZGUvbGludXgvYW1kLWlvbW11Lmg6MzM6ZXh0ZXJuIGludCBhbWRfaW9tbXVfdXBkYXRlX2dhKHZvaWQgKmRhdGEsIGludCBhcGljaWQsIGJvb2wgd2FrZXVwX2ludHIsXFxuaW5jbHVkZS9saW51eC9hbWQtaW9tbXUuaC0zNC1cXHRcXHRcXHQgICAgICAgYm9vbCBpc19ydW5uaW5nKTtcXG5pbmNsdWRlL2xpbnV4L2FtZC1pb21tdS5oOjM1OmV4dGVybiBpbnQgYW1kX2lvbW11X2FjdGl2YXRlX2d1ZXN0X21vZGUodm9pZCAqZGF0YSwgaW50IGFwaWNpZCwgYm9vbCB3YWtldXBfaW50cixcXG5pbmNsdWRlL2xpbnV4L2FtZC1pb21tdS5oLTM2LVxcdFxcdFxcdFxcdFxcdCBib29sIGlzX3J1bm5pbmcpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9hbWQtaW9tbXUuaD00Mj1hbWRfaW9tbXVfcmVnaXN0ZXJfZ2FfbG9nX25vdGlmaWVyKGludCAoKm5vdGlmaWVyKSh1MzIpKVxcbi0tXFxuaW5jbHVkZS9saW51eC9hbWQtaW9tbXUuaC00Ni1cXG5pbmNsdWRlL2xpbnV4L2FtZC1pb21tdS5oOjQ3OnN0YXRpYyBpbmxpbmUgaW50IGFtZF9pb21tdV91cGRhdGVfZ2Eodm9pZCAqZGF0YSwgaW50IGFwaWNpZCwgYm9vbCB3YWtldXBfaW50cixcXG5pbmNsdWRlL2xpbnV4L2FtZC1pb21tdS5oLTQ4LVxcdFxcdFxcdFxcdCAgICAgIGJvb2wgaXNfcnVubmluZylcXG4tLVxcbmluY2x1ZGUvbGludXgvYW1kLWlvbW11LmgtNTItXFxuaW5jbHVkZS9saW51eC9hbWQtaW9tbXUuaDo1MzpzdGF0aWMgaW5saW5lIGludCBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZSh2b2lkICpkYXRhLCBpbnQgYXBpY2lkLCBib29sIHdha2V1cF9pbnRyLFxcbmluY2x1ZGUvbGludXgvYW1kLWlvbW11LmgtNTQtXFx0XFx0XFx0XFx0XFx0XFx0Ym9vbCBpc19ydW5uaW5nKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxMzozOTowMC42NzE4NzI2NjlaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjUzNDA5OTYzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBHQVBQSSBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgcmV2aWV3ZWQgdGhpcyBwYXRjaCBhbmQgSSdtIHNlZWluZyBpdCdzIGZvY3VzZWQgb24gaW50cm9kdWNpbmcgR0FQUEkgKEd1ZXN0IEFQSUMgUG9zdGVkIEludGVycnVwdHMpIHN1cHBvcnQgZm9yIEFNRCBJT01NVSBhbmQgS1ZNIFNWTSBBVklDLCB3aGljaCBpcyBwcmVjaXNlbHkgdGhlIGtpbmQgb2YgbG93LWxldmVsIHZpcnR1YWxpemF0aW9uIGNoYW5nZSB0aGF0IGRlbWFuZHMgY2xvc2Ugc2NydXRpbnkuIEkgc2VlIHRoZSBmdW5jdGlvbiBuYW1lcyBhcmUgYWxsIGNvcnJlY3RseSBmb3JtYXR0ZWQuIEV4Y2VsbGVudC5cblxuU3BlY2lmaWNhbGx5LCBJ4oCZbGwgbmVlZCB0byBtYWtlIHN1cmUgdG8gaW5jbHVkZSB0aGVzZSBmdW5jdGlvbnMgaW4gbXkgdGVzdGluZyBzdWl0ZTogYGF2aWNfYWRkX3ZjcHVfdG9fZ2FwcGlfd2FrZXVwX2xpc3RgLCBgYXZpY19yZW1vdmVfdmNwdV9mcm9tX2dhcHBpX3dha2V1cF9saXN0YCwgYGF2aWNfZ2FwcGlfd2FrZXVwX2hhbmRsZXJgLCBgYXZpY19waV91cGRhdGVfaXJ0ZWAsIGBhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5YCwgYF9fYW1kX2lvbW11X3VwZGF0ZV9nYWAsIGBhbWRfaW9tbXVfdXBkYXRlX2dhYCwgYW5kIGBhbWRfaW9tbXVfYWN0aXZhdGVfZ3Vlc3RfbW9kZWAuIFRoZXNlIGFwcGVhciB0byBiZSB0aGUgY29yZSByb3V0aW5lcyBpbnZvbHZlZCBpbiBtYW5hZ2luZyB0aGUgR0FQUEkgd2FrZXVwIGxpc3QgYW5kIHVwZGF0aW5nIHRoZSBJUlRFcywgd2hpY2ggd2lsbCBiZSBjcml0aWNhbCB0byB0aGUgaW50ZWdyaXR5IG9mIHRoaXMgaW1wbGVtZW50YXRpb24uXG5cbk9uIHRoZSBjb25maWd1cmF0aW9uIGZyb250LCBJIHNlZSB0aGUgcGF0Y2ggbGV2ZXJhZ2VzIGBLVk1fQU1EYCwgYEFNRF9JT01NVWAsIGFuZCBgSVJRX1JFTUFQYCwgd2hpY2ggSSBjYW4gbm93IHZlcmlmeSBhcmUgaW5jbHVkZWQgaW4gbXkgY3VycmVudCB0ZXN0aW5nIGVudmlyb25tZW50LlxuXG5UaGUgcmVhc29uaW5nIHByb3ZpZGVkIGNvcnJlY3RseSBpZGVudGlmaWVzIHRoaXMgYXMgYSBzaWduaWZpY2FudCBjaGFuZ2UgYWZmZWN0aW5nIGhvdyBwb3N0ZWQgaW50ZXJydXB0cyBhcmUgaGFuZGxlZCBhbmQgaG93IHRoZSBLVk0gY29yZSB2aXJ0dWFsaXplcyBndWVzdCBBUElDcy4gVGhlIElSVEUgbW9kaWZpY2F0aW9uIGFzcGVjdCBpcyBwYXJ0aWN1bGFybHkgaW50ZXJlc3RpbmcgYW5kIGEgcG90ZW50aWFsIHNvdXJjZSBvZiBzdWJ0bGUgYnVncy4gR2l2ZW4gdGhlIGZ1bmRhbWVudGFsIG5hdHVyZSBvZiB0aGVzZSBjaGFuZ2VzLCB0aGlzIGlzIGFic29sdXRlbHkgYSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIEluIGZhY3QsIHRoaXMgcGF0Y2ggaXMgZ29pbmcgdG8gcmVxdWlyZSBxdWl0ZSBhIGJpdCBvZiB3b3JrLCBzbyBsZXQncyBjYWxsIHNldC1yZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjYzMywiT3V0cHV0VG9rZW5zIjoyMjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTM6Mzk6MDcuMjA1OTc1NzlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQ2NTk3OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTV9BTURcIixcbiAgICBcIkFNRF9JT01NVVwiLFxuICAgIFwiSVJRX1JFTUFQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYXZpY19hZGRfdmNwdV90b19nYXBwaV93YWtldXBfbGlzdFwiLFxuICAgIFwiYXZpY19yZW1vdmVfdmNwdV9mcm9tX2dhcHBpX3dha2V1cF9saXN0XCIsXG4gICAgXCJhdmljX2dhcHBpX3dha2V1cF9oYW5kbGVyXCIsXG4gICAgXCJhdmljX3BpX3VwZGF0ZV9pcnRlXCIsXG4gICAgXCJhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5XCIsXG4gICAgXCJfX2FtZF9pb21tdV91cGRhdGVfZ2FcIixcbiAgICBcImFtZF9pb21tdV91cGRhdGVfZ2FcIixcbiAgICBcImFtZF9pb21tdV9hY3RpdmF0ZV9ndWVzdF9tb2RlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBHQVBQSSAoR3Vlc3QgQVBJQyBQb3N0ZWQgSW50ZXJydXB0cykgc3VwcG9ydCBmb3IgQU1EIElPTU1VIGFuZCBLVk0gU1ZNIEFWSUMuIEl0IG1vZGlmaWVzIHRoZSBJUlRFIGNvbmZpZ3VyYXRpb24gZm9yIHBvc3RlZCBpbnRlcnJ1cHRzIGFuZCBpbnRyb2R1Y2VzIGEgbmV3IHdha2V1cCBsaXN0IGZvciBHQVBQSSBpbiBLVk0uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIHZpcnR1YWxpemF0aW9uIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTV9BTURcIixcbiAgICBcIkFNRF9JT01NVVwiLFxuICAgIFwiSVJRX1JFTUFQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYXZpY19hZGRfdmNwdV90b19nYXBwaV93YWtldXBfbGlzdFwiLFxuICAgIFwiYXZpY19yZW1vdmVfdmNwdV9mcm9tX2dhcHBpX3dha2V1cF9saXN0XCIsXG4gICAgXCJhdmljX2dhcHBpX3dha2V1cF9oYW5kbGVyXCIsXG4gICAgXCJhdmljX3BpX3VwZGF0ZV9pcnRlXCIsXG4gICAgXCJhdmljX3VwZGF0ZV9pb21tdV92Y3B1X2FmZmluaXR5XCIsXG4gICAgXCJfX2FtZF9pb21tdV91cGRhdGVfZ2FcIixcbiAgICBcImFtZF9pb21tdV91cGRhdGVfZ2FcIixcbiAgICBcImFtZF9pb21tdV9hY3RpdmF0ZV9ndWVzdF9tb2RlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBHQVBQSSAoR3Vlc3QgQVBJQyBQb3N0ZWQgSW50ZXJydXB0cykgc3VwcG9ydCBmb3IgQU1EIElPTU1VIGFuZCBLVk0gU1ZNIEFWSUMuIEl0IG1vZGlmaWVzIHRoZSBJUlRFIGNvbmZpZ3VyYXRpb24gZm9yIHBvc3RlZCBpbnRlcnJ1cHRzIGFuZCBpbnRyb2R1Y2VzIGEgbmV3IHdha2V1cCBsaXN0IGZvciBHQVBQSSBpbiBLVk0uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIHZpcnR1YWxpemF0aW9uIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowf78rt[1] Phase: Succeeded StartedAt: 2026-07-13 13:39:12 +0000 UTC FinishedAt: 2026-07-13 13:39:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf78rt[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-13 13:39:12 +0000 UTC FinishedAt: 2026-07-13 13:39:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf78rt[2] Phase: Succeeded StartedAt: 2026-07-13 13:39:12 +0000 UTC FinishedAt: 2026-07-13 15:58:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf78rt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_add_vcpu_to_gappi_wakeup_list","avic_remove_vcpu_from_gappi_wakeup_list","avic_gappi_wakeup_handler","avic_pi_update_irte","avic_update_iommu_vcpu_affinity","__amd_iommu_update_ga","amd_iommu_update_ga","amd_iommu_activate_guest_mode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"f5e5bac2-2e5c-4474-8d56-7a5eca46524b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-13 13:39:12 +0000 UTC FinishedAt: 2026-07-13 15:58:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_add_vcpu_to_gappi_wakeup_list","avic_remove_vcpu_from_gappi_wakeup_list","avic_gappi_wakeup_handler","avic_pi_update_irte","avic_update_iommu_vcpu_affinity","__amd_iommu_update_ga","amd_iommu_update_ga","amd_iommu_activate_guest_mode"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"f5e5bac2-2e5c-4474-8d56-7a5eca46524b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowf78rt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_add_vcpu_to_gappi_wakeup_list","avic_remove_vcpu_from_gappi_wakeup_list","avic_gappi_wakeup_handler","avic_pi_update_irte","avic_update_iommu_vcpu_affinity","__amd_iommu_update_ga","amd_iommu_update_ga","amd_iommu_activate_guest_mode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"f5e5bac2-2e5c-4474-8d56-7a5eca46524b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-13 13:39:12 +0000 UTC FinishedAt: 2026-07-13 13:39:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf78rt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_add_vcpu_to_gappi_wakeup_list","avic_remove_vcpu_from_gappi_wakeup_list","avic_gappi_wakeup_handler","avic_pi_update_irte","avic_update_iommu_vcpu_affinity","__amd_iommu_update_ga","amd_iommu_update_ga","amd_iommu_activate_guest_mode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"f5e5bac2-2e5c-4474-8d56-7a5eca46524b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-13 13:39:12 +0000 UTC FinishedAt: 2026-07-13 13:39:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},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-workflowf78rt/series-workflowf78rt-convert-artifact-3834039851/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowf78rt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_add_vcpu_to_gappi_wakeup_list","avic_remove_vcpu_from_gappi_wakeup_list","avic_gappi_wakeup_handler","avic_pi_update_irte","avic_update_iommu_vcpu_affinity","__amd_iommu_update_ga","amd_iommu_update_ga","amd_iommu_activate_guest_mode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"f5e5bac2-2e5c-4474-8d56-7a5eca46524b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-13 13:39:22 +0000 UTC FinishedAt: 2026-07-13 14:25:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf78rt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_add_vcpu_to_gappi_wakeup_list","avic_remove_vcpu_from_gappi_wakeup_list","avic_gappi_wakeup_handler","avic_pi_update_irte","avic_update_iommu_vcpu_affinity","__amd_iommu_update_ga","amd_iommu_update_ga","amd_iommu_activate_guest_mode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"f5e5bac2-2e5c-4474-8d56-7a5eca46524b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-13 13:39:22 +0000 UTC FinishedAt: 2026-07-13 14:25:54 +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:*3a233e24-c601-4f05-b159-7e4a9293df40,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-workflowf78rt/series-workflowf78rt-convert-artifact-3834039851/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": "b0935ea0-3136-4fcd-98b3-0c32b5a82b42", "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-workflowf78rt/series-workflowf78rt-build-action-618290985/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowf78rt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_add_vcpu_to_gappi_wakeup_list","avic_remove_vcpu_from_gappi_wakeup_list","avic_gappi_wakeup_handler","avic_pi_update_irte","avic_update_iommu_vcpu_affinity","__amd_iommu_update_ga","amd_iommu_update_ga","amd_iommu_activate_guest_mode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"f5e5bac2-2e5c-4474-8d56-7a5eca46524b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-13 13:39:22 +0000 UTC FinishedAt: 2026-07-13 14:25:18 +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:*3a233e24-c601-4f05-b159-7e4a9293df40,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-workflowf78rt/series-workflowf78rt-convert-artifact-3834039851/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": "b0935ea0-3136-4fcd-98b3-0c32b5a82b42", "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-workflowf78rt/series-workflowf78rt-build-action-618290985/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowf78rt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_add_vcpu_to_gappi_wakeup_list","avic_remove_vcpu_from_gappi_wakeup_list","avic_gappi_wakeup_handler","avic_pi_update_irte","avic_update_iommu_vcpu_affinity","__amd_iommu_update_ga","amd_iommu_update_ga","amd_iommu_activate_guest_mode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"f5e5bac2-2e5c-4474-8d56-7a5eca46524b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-13 14:25:54 +0000 UTC FinishedAt: 2026-07-13 14:25:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf78rt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_add_vcpu_to_gappi_wakeup_list","avic_remove_vcpu_from_gappi_wakeup_list","avic_gappi_wakeup_handler","avic_pi_update_irte","avic_update_iommu_vcpu_affinity","__amd_iommu_update_ga","amd_iommu_update_ga","amd_iommu_activate_guest_mode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"f5e5bac2-2e5c-4474-8d56-7a5eca46524b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-13 14:25:54 +0000 UTC FinishedAt: 2026-07-13 14:25:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf78rt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_add_vcpu_to_gappi_wakeup_list","avic_remove_vcpu_from_gappi_wakeup_list","avic_gappi_wakeup_handler","avic_pi_update_irte","avic_update_iommu_vcpu_affinity","__amd_iommu_update_ga","amd_iommu_update_ga","amd_iommu_activate_guest_mode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"f5e5bac2-2e5c-4474-8d56-7a5eca46524b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-13 14:25:54 +0000 UTC FinishedAt: 2026-07-13 14:26:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf78rt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_add_vcpu_to_gappi_wakeup_list","avic_remove_vcpu_from_gappi_wakeup_list","avic_gappi_wakeup_handler","avic_pi_update_irte","avic_update_iommu_vcpu_affinity","__amd_iommu_update_ga","amd_iommu_update_ga","amd_iommu_activate_guest_mode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"f5e5bac2-2e5c-4474-8d56-7a5eca46524b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-13 14:25:54 +0000 UTC FinishedAt: 2026-07-13 14:26:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"f5e5bac2-2e5c-4474-8d56-7a5eca46524b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},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-workflowf78rt/series-workflowf78rt-convert-artifact-1513517570/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowf78rt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_add_vcpu_to_gappi_wakeup_list","avic_remove_vcpu_from_gappi_wakeup_list","avic_gappi_wakeup_handler","avic_pi_update_irte","avic_update_iommu_vcpu_affinity","__amd_iommu_update_ga","amd_iommu_update_ga","amd_iommu_activate_guest_mode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"f5e5bac2-2e5c-4474-8d56-7a5eca46524b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-13 14:26:15 +0000 UTC FinishedAt: 2026-07-13 14:27:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf78rt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_add_vcpu_to_gappi_wakeup_list","avic_remove_vcpu_from_gappi_wakeup_list","avic_gappi_wakeup_handler","avic_pi_update_irte","avic_update_iommu_vcpu_affinity","__amd_iommu_update_ga","amd_iommu_update_ga","amd_iommu_activate_guest_mode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"f5e5bac2-2e5c-4474-8d56-7a5eca46524b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-13 14:26:15 +0000 UTC FinishedAt: 2026-07-13 14:27:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b0935ea0-3136-4fcd-98b3-0c32b5a82b42,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-workflowf78rt/series-workflowf78rt-build-action-618290985/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-workflowf78rt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_add_vcpu_to_gappi_wakeup_list","avic_remove_vcpu_from_gappi_wakeup_list","avic_gappi_wakeup_handler","avic_pi_update_irte","avic_update_iommu_vcpu_affinity","__amd_iommu_update_ga","amd_iommu_update_ga","amd_iommu_activate_guest_mode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"f5e5bac2-2e5c-4474-8d56-7a5eca46524b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-13 14:27:59 +0000 UTC FinishedAt: 2026-07-13 14:27:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf78rt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_add_vcpu_to_gappi_wakeup_list","avic_remove_vcpu_from_gappi_wakeup_list","avic_gappi_wakeup_handler","avic_pi_update_irte","avic_update_iommu_vcpu_affinity","__amd_iommu_update_ga","amd_iommu_update_ga","amd_iommu_activate_guest_mode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"f5e5bac2-2e5c-4474-8d56-7a5eca46524b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-13 14:27:59 +0000 UTC FinishedAt: 2026-07-13 14:27:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf78rt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_add_vcpu_to_gappi_wakeup_list","avic_remove_vcpu_from_gappi_wakeup_list","avic_gappi_wakeup_handler","avic_pi_update_irte","avic_update_iommu_vcpu_affinity","__amd_iommu_update_ga","amd_iommu_update_ga","amd_iommu_activate_guest_mode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"f5e5bac2-2e5c-4474-8d56-7a5eca46524b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-13 14:27:59 +0000 UTC FinishedAt: 2026-07-13 15:21:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf78rt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_add_vcpu_to_gappi_wakeup_list","avic_remove_vcpu_from_gappi_wakeup_list","avic_gappi_wakeup_handler","avic_pi_update_irte","avic_update_iommu_vcpu_affinity","__amd_iommu_update_ga","amd_iommu_update_ga","amd_iommu_activate_guest_mode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"f5e5bac2-2e5c-4474-8d56-7a5eca46524b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-13 14:27:59 +0000 UTC FinishedAt: 2026-07-13 15:21:33 +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:*3a233e24-c601-4f05-b159-7e4a9293df40,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-workflowf78rt/series-workflowf78rt-convert-artifact-1513517570/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": "9012cfde-9883-49d8-87d8-60d7ca5ffbfa", "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-workflowf78rt/series-workflowf78rt-build-action-2674547798/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowf78rt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_add_vcpu_to_gappi_wakeup_list","avic_remove_vcpu_from_gappi_wakeup_list","avic_gappi_wakeup_handler","avic_pi_update_irte","avic_update_iommu_vcpu_affinity","__amd_iommu_update_ga","amd_iommu_update_ga","amd_iommu_activate_guest_mode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"f5e5bac2-2e5c-4474-8d56-7a5eca46524b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-13 14:27:59 +0000 UTC FinishedAt: 2026-07-13 15:21:12 +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:*3a233e24-c601-4f05-b159-7e4a9293df40,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-workflowf78rt/series-workflowf78rt-convert-artifact-1513517570/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": "9012cfde-9883-49d8-87d8-60d7ca5ffbfa", "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-workflowf78rt/series-workflowf78rt-build-action-2674547798/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowf78rt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_add_vcpu_to_gappi_wakeup_list","avic_remove_vcpu_from_gappi_wakeup_list","avic_gappi_wakeup_handler","avic_pi_update_irte","avic_update_iommu_vcpu_affinity","__amd_iommu_update_ga","amd_iommu_update_ga","amd_iommu_activate_guest_mode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"f5e5bac2-2e5c-4474-8d56-7a5eca46524b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-13 15:21:33 +0000 UTC FinishedAt: 2026-07-13 15:21:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf78rt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_add_vcpu_to_gappi_wakeup_list","avic_remove_vcpu_from_gappi_wakeup_list","avic_gappi_wakeup_handler","avic_pi_update_irte","avic_update_iommu_vcpu_affinity","__amd_iommu_update_ga","amd_iommu_update_ga","amd_iommu_activate_guest_mode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"f5e5bac2-2e5c-4474-8d56-7a5eca46524b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-13 15:21:33 +0000 UTC FinishedAt: 2026-07-13 15:21:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf78rt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_add_vcpu_to_gappi_wakeup_list","avic_remove_vcpu_from_gappi_wakeup_list","avic_gappi_wakeup_handler","avic_pi_update_irte","avic_update_iommu_vcpu_affinity","__amd_iommu_update_ga","amd_iommu_update_ga","amd_iommu_activate_guest_mode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"f5e5bac2-2e5c-4474-8d56-7a5eca46524b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-13 15:21:33 +0000 UTC FinishedAt: 2026-07-13 15:23:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf78rt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_add_vcpu_to_gappi_wakeup_list","avic_remove_vcpu_from_gappi_wakeup_list","avic_gappi_wakeup_handler","avic_pi_update_irte","avic_update_iommu_vcpu_affinity","__amd_iommu_update_ga","amd_iommu_update_ga","amd_iommu_activate_guest_mode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"f5e5bac2-2e5c-4474-8d56-7a5eca46524b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-13 15:21:33 +0000 UTC FinishedAt: 2026-07-13 15:23:29 +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:*9012cfde-9883-49d8-87d8-60d7ca5ffbfa,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-workflowf78rt/series-workflowf78rt-build-action-2674547798/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-workflowf78rt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_add_vcpu_to_gappi_wakeup_list","avic_remove_vcpu_from_gappi_wakeup_list","avic_gappi_wakeup_handler","avic_pi_update_irte","avic_update_iommu_vcpu_affinity","__amd_iommu_update_ga","amd_iommu_update_ga","amd_iommu_activate_guest_mode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"f5e5bac2-2e5c-4474-8d56-7a5eca46524b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-13 15:23:39 +0000 UTC FinishedAt: 2026-07-13 15:58:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf78rt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_add_vcpu_to_gappi_wakeup_list","avic_remove_vcpu_from_gappi_wakeup_list","avic_gappi_wakeup_handler","avic_pi_update_irte","avic_update_iommu_vcpu_affinity","__amd_iommu_update_ga","amd_iommu_update_ga","amd_iommu_activate_guest_mode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"f5e5bac2-2e5c-4474-8d56-7a5eca46524b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-13 15:23:39 +0000 UTC FinishedAt: 2026-07-13 15:58:35 +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":["avic_add_vcpu_to_gappi_wakeup_list","avic_remove_vcpu_from_gappi_wakeup_list","avic_gappi_wakeup_handler","avic_pi_update_irte","avic_update_iommu_vcpu_affinity","__amd_iommu_update_ga","amd_iommu_update_ga","amd_iommu_activate_guest_mode"],"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:*b0935ea0-3136-4fcd-98b3-0c32b5a82b42,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*9012cfde-9883-49d8-87d8-60d7ca5ffbfa,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-workflowf78rt/series-workflowf78rt-build-action-618290985/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-workflowf78rt/series-workflowf78rt-build-action-2674547798/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowf78rt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_add_vcpu_to_gappi_wakeup_list","avic_remove_vcpu_from_gappi_wakeup_list","avic_gappi_wakeup_handler","avic_pi_update_irte","avic_update_iommu_vcpu_affinity","__amd_iommu_update_ga","amd_iommu_update_ga","amd_iommu_activate_guest_mode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"f5e5bac2-2e5c-4474-8d56-7a5eca46524b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-13 15:23:39 +0000 UTC FinishedAt: 2026-07-13 15:23:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf78rt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_add_vcpu_to_gappi_wakeup_list","avic_remove_vcpu_from_gappi_wakeup_list","avic_gappi_wakeup_handler","avic_pi_update_irte","avic_update_iommu_vcpu_affinity","__amd_iommu_update_ga","amd_iommu_update_ga","amd_iommu_activate_guest_mode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"f5e5bac2-2e5c-4474-8d56-7a5eca46524b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-13 15:23:39 +0000 UTC FinishedAt: 2026-07-13 15:23:44 +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":["avic_add_vcpu_to_gappi_wakeup_list","avic_remove_vcpu_from_gappi_wakeup_list","avic_gappi_wakeup_handler","avic_pi_update_irte","avic_update_iommu_vcpu_affinity","__amd_iommu_update_ga","amd_iommu_update_ga","amd_iommu_activate_guest_mode"],"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-workflowf78rt/series-workflowf78rt-convert-artifact-3279479351/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowf78rt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_add_vcpu_to_gappi_wakeup_list","avic_remove_vcpu_from_gappi_wakeup_list","avic_gappi_wakeup_handler","avic_pi_update_irte","avic_update_iommu_vcpu_affinity","__amd_iommu_update_ga","amd_iommu_update_ga","amd_iommu_activate_guest_mode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"f5e5bac2-2e5c-4474-8d56-7a5eca46524b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-13 15:23:39 +0000 UTC FinishedAt: 2026-07-13 15:23:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf78rt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_add_vcpu_to_gappi_wakeup_list","avic_remove_vcpu_from_gappi_wakeup_list","avic_gappi_wakeup_handler","avic_pi_update_irte","avic_update_iommu_vcpu_affinity","__amd_iommu_update_ga","amd_iommu_update_ga","amd_iommu_activate_guest_mode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"f5e5bac2-2e5c-4474-8d56-7a5eca46524b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-13 15:23:39 +0000 UTC FinishedAt: 2026-07-13 15:23:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf78rt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_add_vcpu_to_gappi_wakeup_list","avic_remove_vcpu_from_gappi_wakeup_list","avic_gappi_wakeup_handler","avic_pi_update_irte","avic_update_iommu_vcpu_affinity","__amd_iommu_update_ga","amd_iommu_update_ga","amd_iommu_activate_guest_mode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"f5e5bac2-2e5c-4474-8d56-7a5eca46524b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-13 15:23:39 +0000 UTC FinishedAt: 2026-07-13 15:23:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf78rt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_add_vcpu_to_gappi_wakeup_list","avic_remove_vcpu_from_gappi_wakeup_list","avic_gappi_wakeup_handler","avic_pi_update_irte","avic_update_iommu_vcpu_affinity","__amd_iommu_update_ga","amd_iommu_update_ga","amd_iommu_activate_guest_mode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"f5e5bac2-2e5c-4474-8d56-7a5eca46524b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-13 15:23:49 +0000 UTC FinishedAt: 2026-07-13 15:58:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf78rt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["avic_add_vcpu_to_gappi_wakeup_list","avic_remove_vcpu_from_gappi_wakeup_list","avic_gappi_wakeup_handler","avic_pi_update_irte","avic_update_iommu_vcpu_affinity","__amd_iommu_update_ga","amd_iommu_update_ga","amd_iommu_activate_guest_mode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_AMD","AMD_IOMMU","IRQ_REMAP"],"series_id":"f5e5bac2-2e5c-4474-8d56-7a5eca46524b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-13 15:23:49 +0000 UTC FinishedAt: 2026-07-13 15:58:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b0935ea0-3136-4fcd-98b3-0c32b5a82b42,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*9012cfde-9883-49d8-87d8-60d7ca5ffbfa,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-workflowf78rt/series-workflowf78rt-build-action-618290985/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-workflowf78rt/series-workflowf78rt-build-action-2674547798/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-workflowf78rt/series-workflowf78rt-convert-artifact-3279479351/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,}