Name: series-workflowll9cc Phase: Succeeded StartedAt: 2026-07-06 15:00:55 +0000 UTC FinishedAt: 2026-07-06 19:19:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowll9cc[0] Phase: Succeeded StartedAt: 2026-07-06 15:00:55 +0000 UTC FinishedAt: 2026-07-06 15:20:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowll9cc[0].run-triage Phase: Succeeded StartedAt: 2026-07-06 15:00:56 +0000 UTC FinishedAt: 2026-07-06 15:20:29 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "226f4a490d1a938fc838d8f8c46a4eca864c0d78", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XFRM_USER", "XFRM_MIGRATE", "IPV6" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "226f4a490d1a938fc838d8f8c46a4eca864c0d78", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XFRM_USER", "XFRM_MIGRATE", "IPV6" ], "series_id": "b68e6bf7-5fa7-4f20-aa52-d6e5fadf9f98" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "xfrm_state_lookup_exact", "xfrm_state_lookup_byaddr", "xfrm_user_state_lookup", "xfrm_do_migrate_state", "xfrm_state_update", "xfrm_state_migrate_install", "xfrm_get_ae", "xfrm_new_ae", "xfrm_add_sa_expire" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE1OjE1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hGUk1fVVNFUiYjMzQ7LAogICAgJiMzNDtYRlJNX01JR1JBVEUmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3hmcm1fc3RhdGVfbG9va3VwX2V4YWN0JiMzNDssCiAgICAmIzM0O3hmcm1fc3RhdGVfbG9va3VwX2J5YWRkciYjMzQ7LAogICAgJiMzNDt4ZnJtX3VzZXJfc3RhdGVfbG9va3VwJiMzNDssCiAgICAmIzM0O3hmcm1fZG9fbWlncmF0ZV9zdGF0ZSYjMzQ7LAogICAgJiMzNDt4ZnJtX3N0YXRlX3VwZGF0ZSYjMzQ7LAogICAgJiMzNDt4ZnJtX3N0YXRlX21pZ3JhdGVfaW5zdGFsbCYjMzQ7LAogICAgJiMzNDt4ZnJtX2dldF9hZSYjMzQ7LAogICAgJiMzNDt4ZnJtX25ld19hZSYjMzQ7LAogICAgJiMzNDt4ZnJtX2FkZF9zYV9leHBpcmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFhGUk0gKElQc2VjKSBzdGF0ZSBsb29rdXAgbG9naWMgdG8gYWxsb3cgZXhhY3QgbWF0Y2hpbmcgb2YgbWFya3MgYW5kIG1hc2tzIGR1cmluZyBjb250cm9sIHBsYW5lIG9wZXJhdGlvbnMgKEdFVCwgREVMRVRFLCBNSUdSQVRFKS4gVGhpcyBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBuZXRsaW5rIG1lc3NhZ2VzIGFuZCBhZmZlY3RzIGNvcmUgSVBzZWMgZnVuY3Rpb25hbGl0eS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxNToxNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDY4MzA1OTExZTVhYmQ2ZTU1ZGQ4MDJkMzA1MDcxMDlmY2EyNTNkNDJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCA2IDE1OjE1OjI0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy94ZnJtL3hmcm1fbWlncmF0ZV9zdGF0ZS5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcveGZybS94ZnJtX21pZ3JhdGVfc3RhdGUucnN0XG5pbmRleCA5ZDUzY2IyMmIwMDc1Mi4uOTA1ZTNmMGM0ZWUwNmYgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcveGZybS94ZnJtX21pZ3JhdGVfc3RhdGUucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcveGZybS94ZnJtX21pZ3JhdGVfc3RhdGUucnN0XG5AQCAtMjcsMTUgJiM0MzsyNywxOCBAQCBTQSBJZGVudGlmaWNhdGlvblxuID09PT09PT09PT09PT09PT09XG4gXG4gVGhlIHN0cnVjdCBpcyBkZWZpbmVkIGluIGBgaW5jbHVkZS91YXBpL2xpbnV4L3hmcm0uaGBgLiBUaGUgU0EgaXMgbG9va2VkXG4tdXAgdXNpbmcgYGB4ZnJtX3N0YXRlX2xvb2t1cCgpYGAgd2l0aCBgYGlkLnNwaWBgLFxuLWBgaWQuZGFkZHJgYCwgYGBpZC5wcm90b2BgLCBgYGlkLmZhbWlseWBgLCBhbmRcbi1gYG9sZF9tYXJrLnYgXHUwMDI2IG9sZF9tYXJrLm1gYCBhcyB0aGUgbWFyayBrZXk6OlxuJiM0Mzt1cCB1c2luZyBgYHhmcm1fc3RhdGVfbG9va3VwX2V4YWN0KClgYCB3aXRoIGBgaWQuc3BpYGAsIGBgaWQuZGFkZHJgYCxcbiYjNDM7YGBpZC5wcm90b2BgLCBgYGlkLmZhbWlseWBgLCBhbmQgYW4gZXhhY3QgbWF0Y2ggYWdhaW5zdCBgYG9sZF9tYXJrLnZgYFxuJiM0MzthbmQgYGBvbGRfbWFyay5tYGAuIFVubGlrZSB0aGUgZGF0YSBwYXRoLCB3aGljaCB1c2VzIGEgbWFza2VkXG4mIzQzO2NvbXBhcmlzb24sIHRoaXMgcmVxdWlyZXMgdGhlIFNBJiMzOTtzIG1hcmsgYW5kIG1hc2sgdG8gZXF1YWwgYGBvbGRfbWFya2BgXG4mIzQzO2V4YWN0bHksIHNvIGEgYnJvYWQtbWFzayBTQSBpcyBuZXZlciBtYXRjaGVkIHdoZW4gYSBtb3JlIHNwZWNpZmljIG9uZVxuJiM0Mzt3YXMgaW50ZW5kZWQuIElmIG5vIHN1Y2ggU0EgZXhpc3RzLCBgYC1FU1JDSGBgIGlzIHJldHVybmVkLjo6XG4gXG4gICAgIHN0cnVjdCB4ZnJtX3VzZXJfbWlncmF0ZV9zdGF0ZSB7XG4gICAgICAgICBzdHJ1Y3QgeGZybV91c2Vyc2FfaWQgIGlkOyAgICAgICAvKiBzcGksIGRhZGRyLCBwcm90bywgZmFtaWx5ICovXG4gICAgICAgICB4ZnJtX2FkZHJlc3NfdCAgICAgICAgIG5ld19kYWRkcjtcbiAgICAgICAgIHhmcm1fYWRkcmVzc190ICAgICAgICAgbmV3X3NhZGRyO1xuLSAgICAgICAgc3RydWN0IHhmcm1fbWFyayAgICAgICBvbGRfbWFyazsgLyogU0EgbG9va3VwOiBrZXkgPSB2IFx1MDAyNiBtICovXG4mIzQzOyAgICAgICAgc3RydWN0IHhmcm1fbWFyayAgICAgICBvbGRfbWFyazsgLyogU0EgbG9va3VwIGtleSAoZXhhY3Qgdi9tIG1hdGNoKSAqL1xuICAgICAgICAgc3RydWN0IHhmcm1fc2VsZWN0b3IgICBuZXdfc2VsOyAgLyogbmV3IHNlbGVjdG9yIChzZWUgRmxhZ3MpICovXG4gICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICAgIG5ld19yZXFpZDtcbiAgICAgICAgIF9fdTMyICAgICAgICAgICAgICAgICAgZmxhZ3M7ICAgIC8qIFhGUk1fTUlHUkFURV9TVEFURV8qICovXG5AQCAtNzIsOCAmIzQzOzc1LDggQEAgaW5oZXJpdHMgdGhlIHZhbHVlIGZyb20gdGhlIGV4aXN0aW5nIFNBIChvbWl0LXRvLWluaGVyaXQpLlxuICAgICAgLSBEZXNjcmlwdGlvblxuICAgICogLSBgYFhGUk1BX01BUktgYFxuICAgICAgLSBNYXJrIG9uIHRoZSBtaWdyYXRlZCBTQSAoYGBzdHJ1Y3QgeGZybV9tYXJrYGApLiBBYnNlbnQgaW5oZXJpdHNcbi0gICAgICAgYGBvbGRfbWFya2BgLiBUbyB1c2Ugbm8gbWFyayBvbiB0aGUgbmV3IFNBLCBzZW5kIGBgWEZSTUFfTUFSS2BgXG4tICAgICAgIHdpdGggYGB7MCwgMH1gYC5cbiYjNDM7ICAgICAgIHRoZSBtYXJrIG9mIHRoZSBleGlzdGluZyBTQS4gVG8gdXNlIG5vIG1hcmsgb24gdGhlIG5ldyBTQSwgc2VuZFxuJiM0MzsgICAgICAgYGBYRlJNQV9NQVJLYGAgd2l0aCBgYHswLCAwfWBgLlxuICAgICogLSBgYFhGUk1BX0VOQ0FQYGBcbiAgICAgIC0gVURQIGVuY2Fwc3VsYXRpb24gdGVtcGxhdGU7IG9ubHkgYGBVRFBfRU5DQVBfRVNQSU5VRFBgYCBpcyBzdXBwb3J0ZWQuXG4gICAgICAgIFNldCBgYGVuY2FwX3R5cGU9MGBgIHRvIHJlbW92ZSBlbmNhcC5cbkBAIC0yNTksOCAmIzQzOzI2Miw5IEBAIEF0dHJpYnV0ZXMgaW4gdGhlIG5vdGlmaWNhdGlvblxuIEVycm9yIEhhbmRsaW5nXG4gPT09PT09PT09PT09PT1cbiBcbi1JZiB0aGUgdGFyZ2V0IFNBIHR1cGxlIChuZXcgZGFkZHIsIFNQSSwgcHJvdG8sIG5ldyBmYW1pbHkpIGlzIGFscmVhZHlcbi1vY2N1cGllZCwgdGhlIG9wZXJhdGlvbiByZXR1cm5zIGBgLUVFWElTVGBgIGJlZm9yZSB0aGUgbWlncmF0aW9uIGJlZ2lucy5cbiYjNDM7SWYgdGhlIHRhcmdldCBTQSB0dXBsZSAobmV3IGRhZGRyLCBTUEksIHByb3RvLCBuZXcgZmFtaWx5LCBtYXJrKSBpc1xuJiM0MzthbHJlYWR5IG9jY3VwaWVkLCB0aGUgb3BlcmF0aW9uIHJldHVybnMgYGAtRUVYSVNUYGAgYmVmb3JlIHRoZSBtaWdyYXRpb25cbiYjNDM7YmVnaW5zLlxuIFRoZSBvbGQgU0EgcmVtYWlucyBpbnRhY3QgYW5kIHRoZSBvcGVyYXRpb24gaXMgc2FmZSB0byByZXRyeSBhZnRlclxuIHJlc29sdmluZyB0aGUgY29uZmxpY3QuXG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQveGZybS5oIGIvaW5jbHVkZS9uZXQveGZybS5oXG5pbmRleCA1MTlhMDE1NmEwNWNhYy4uZWJlNTE0Mzc2MjU0YTYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC94ZnJtLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L3hmcm0uaFxuQEAgLTE3NDEsMTEgJiM0MzsxNzQxLDE0IEBAIHN0cnVjdCB4ZnJtX3N0YXRlICp4ZnJtX2lucHV0X3N0YXRlX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBtYXJrLFxuIFx0XHRcdFx0XHQgICBjb25zdCB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsXG4gXHRcdFx0XHRcdCAgIF9fYmUzMiBzcGksIHU4IHByb3RvLFxuIFx0XHRcdFx0XHQgICB1bnNpZ25lZCBzaG9ydCBmYW1pbHkpO1xuLXN0cnVjdCB4ZnJtX3N0YXRlICp4ZnJtX3N0YXRlX2xvb2t1cF9ieWFkZHIoc3RydWN0IG5ldCAqbmV0LCB1MzIgbWFyayxcbiYjNDM7c3RydWN0IHhmcm1fc3RhdGUgKnhmcm1fc3RhdGVfbG9va3VwX2J5YWRkcihzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBtYXJrLCB1MzIgbWFzaywgYm9vbCBleGFjdCxcbiBcdFx0XHRcdFx0ICAgIGNvbnN0IHhmcm1fYWRkcmVzc190ICpkYWRkcixcbiBcdFx0XHRcdFx0ICAgIGNvbnN0IHhmcm1fYWRkcmVzc190ICpzYWRkcixcbiBcdFx0XHRcdFx0ICAgIHU4IHByb3RvLFxuIFx0XHRcdFx0XHQgICAgdW5zaWduZWQgc2hvcnQgZmFtaWx5KTtcbiYjNDM7c3RydWN0IHhmcm1fc3RhdGUgKnhmcm1fc3RhdGVfbG9va3VwX2V4YWN0KHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IHhmcm1fbWFyayAqbWFyayxcbiYjNDM7XHRcdFx0XHRcdCAgIGNvbnN0IHhmcm1fYWRkcmVzc190ICpkYWRkciwgX19iZTMyIHNwaSxcbiYjNDM7XHRcdFx0XHRcdCAgIHU4IHByb3RvLCB1bnNpZ25lZCBzaG9ydCBmYW1pbHkpO1xuICNpZmRlZiBDT05GSUdfWEZSTV9TVUJfUE9MSUNZXG4gdm9pZCB4ZnJtX3RtcGxfc29ydChzdHJ1Y3QgeGZybV90bXBsICoqZHN0LCBzdHJ1Y3QgeGZybV90bXBsICoqc3JjLCBpbnQgbixcbiBcdFx0ICAgIHVuc2lnbmVkIHNob3J0IGZhbWlseSk7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYveGZybTZfaW5wdXQuYyBiL25ldC9pcHY2L3hmcm02X2lucHV0LmNcbmluZGV4IDg5ZDA0NDNiNTMwNzMyLi4yZGQzNDdmZWNlNTJjYSAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L3hmcm02X2lucHV0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L3hmcm02X2lucHV0LmNcbkBAIC0yNzIsNyAmIzQzOzI3Miw3IEBAIGludCB4ZnJtNl9pbnB1dF9hZGRyKHN0cnVjdCBza19idWZmICpza2IsIHhmcm1fYWRkcmVzc190ICpkYWRkcixcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIFxuLVx0XHR4ID0geGZybV9zdGF0ZV9sb29rdXBfYnlhZGRyKG5ldCwgc2tiLVx1MDAzZW1hcmssIGRzdCwgc3JjLCBwcm90bywgQUZfSU5FVDYpO1xuJiM0MztcdFx0eCA9IHhmcm1fc3RhdGVfbG9va3VwX2J5YWRkcihuZXQsIHNrYi1cdTAwM2VtYXJrLCAwLCBmYWxzZSwgZHN0LCBzcmMsIHByb3RvLCBBRl9JTkVUNik7XG4gXHRcdGlmICgheClcbiBcdFx0XHRjb250aW51ZTtcbiBcbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3N0YXRlLmMgYi9uZXQveGZybS94ZnJtX3N0YXRlLmNcbmluZGV4IGM1OGNkMDI0ZTNjNjc1Li4wYjNkYzc3ODlkZDc5MCAxMDA2NDRcbi0tLSBhL25ldC94ZnJtL3hmcm1fc3RhdGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hmcm0veGZybV9zdGF0ZS5jXG5AQCAtMTE3MiwxMSAmIzQzOzExNzIsMjIgQEAgc3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlICpfX3hmcm1fc3RhdGVfbG9va3VwX2FsbChjb25zdCBzdHJ1Y3QgeGZybV9oYXNoX3N0YXRlX3BcbiBcdHJldHVybiBOVUxMO1xuIH1cbiBcbi1zdGF0aWMgc3RydWN0IHhmcm1fc3RhdGUgKl9feGZybV9zdGF0ZV9sb29rdXAoY29uc3Qgc3RydWN0IHhmcm1faGFzaF9zdGF0ZV9wdHJzICpzdGF0ZV9wdHJzLFxuLVx0XHRcdFx0XHQgICAgICB1MzIgbWFyayxcbi1cdFx0XHRcdFx0ICAgICAgY29uc3QgeGZybV9hZGRyZXNzX3QgKmRhZGRyLFxuLVx0XHRcdFx0XHQgICAgICBfX2JlMzIgc3BpLCB1OCBwcm90byxcbi1cdFx0XHRcdFx0ICAgICAgdW5zaWduZWQgc2hvcnQgZmFtaWx5KVxuJiM0MzsvKiBleGFjdD1mYWxzZTogZGF0YS1wbGFuZSB3aWxkY2FyZCBtYXRjaCBhZ2FpbnN0IHgmIzM5O3MgbWFzay4gZXhhY3Q9dHJ1ZTpcbiYjNDM7ICogY29udHJvbC1wbGFuZSBpZGVudGl0eSBtYXRjaCwgbWFyayBhbmQgbWFzayBtdXN0IGJvdGggbWF0Y2ggZXhhY3RseS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBib29sIHhmcm1fc3RhdGVfbWFya19tYXRjaGVzKGNvbnN0IHN0cnVjdCB4ZnJtX3N0YXRlICp4LCB1MzIgbWFyaywgdTMyIG1hc2ssIGJvb2wgZXhhY3QpXG4mIzQzO3tcbiYjNDM7XHRpZiAoZXhhY3QpXG4mIzQzO1x0XHRyZXR1cm4geC1cdTAwM2VtYXJrLnYgPT0gbWFyayBcdTAwMjZcdTAwMjYgeC1cdTAwM2VtYXJrLm0gPT0gbWFzaztcbiYjNDM7XHRyZXR1cm4gKG1hcmsgXHUwMDI2IHgtXHUwMDNlbWFyay5tKSA9PSB4LVx1MDAzZW1hcmsudjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlICpcbiYjNDM7X194ZnJtX3N0YXRlX2xvb2t1cChjb25zdCBzdHJ1Y3QgeGZybV9oYXNoX3N0YXRlX3B0cnMgKnN0YXRlX3B0cnMsXG4mIzQzO1x0XHQgICAgdTMyIG1hcmssIHUzMiBtYXNrLCBib29sIGV4YWN0LFxuJiM0MztcdFx0ICAgIGNvbnN0IHhmcm1fYWRkcmVzc190ICpkYWRkcixcbiYjNDM7XHRcdCAgICBfX2JlMzIgc3BpLCB1OCBwcm90byxcbiYjNDM7XHRcdCAgICB1bnNpZ25lZCBzaG9ydCBmYW1pbHkpXG4ge1xuIFx0dW5zaWduZWQgaW50IGggPSBfX3hmcm1fc3BpX2hhc2goZGFkZHIsIHNwaSwgcHJvdG8sIGZhbWlseSwgc3RhdGVfcHRycy1cdTAwM2VobWFzayk7XG4gXHRzdHJ1Y3QgeGZybV9zdGF0ZSAqeDtcbkBAIC0xMTg4LDcgJiM0MzsxMTk5LDcgQEAgc3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlICpfX3hmcm1fc3RhdGVfbG9va3VwKGNvbnN0IHN0cnVjdCB4ZnJtX2hhc2hfc3RhdGVfcHRyc1xuIFx0XHQgICAgIXhmcm1fYWRkcl9lcXVhbChcdTAwMjZ4LVx1MDAzZWlkLmRhZGRyLCBkYWRkciwgZmFtaWx5KSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0aWYgKChtYXJrIFx1MDAyNiB4LVx1MDAzZW1hcmsubSkgIT0geC1cdTAwM2VtYXJrLnYpXG4mIzQzO1x0XHRpZiAoIXhmcm1fc3RhdGVfbWFya19tYXRjaGVzKHgsIG1hcmssIG1hc2ssIGV4YWN0KSlcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0aWYgKCF4ZnJtX3N0YXRlX2hvbGRfcmN1KHgpKVxuIFx0XHRcdGNvbnRpbnVlO1xuQEAgLTExOTgsNiAmIzQzOzEyMDksMTcgQEAgc3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlICpfX3hmcm1fc3RhdGVfbG9va3VwKGNvbnN0IHN0cnVjdCB4ZnJtX2hhc2hfc3RhdGVfcHRyc1xuIFx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuJiM0MztzdGF0aWMgc3RydWN0IHhmcm1fc3RhdGUgKlxuJiM0MztfX3hmcm1fc3RhdGVfbG9va3VwX2V4YWN0KGNvbnN0IHN0cnVjdCB4ZnJtX2hhc2hfc3RhdGVfcHRycyAqc3RhdGVfcHRycyxcbiYjNDM7XHRcdFx0ICBjb25zdCBzdHJ1Y3QgeGZybV9tYXJrICptYXJrLFxuJiM0MztcdFx0XHQgIGNvbnN0IHhmcm1fYWRkcmVzc190ICpkYWRkcixcbiYjNDM7XHRcdFx0ICBfX2JlMzIgc3BpLCB1OCBwcm90byxcbiYjNDM7XHRcdFx0ICB1bnNpZ25lZCBzaG9ydCBmYW1pbHkpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gX194ZnJtX3N0YXRlX2xvb2t1cChzdGF0ZV9wdHJzLCBtYXJrLVx1MDAzZXYsIG1hcmstXHUwMDNlbSwgdHJ1ZSxcbiYjNDM7XHRcdFx0XHQgICBkYWRkciwgc3BpLCBwcm90bywgZmFtaWx5KTtcbiYjNDM7fVxuJiM0MztcbiBzdHJ1Y3QgeGZybV9zdGF0ZSAqeGZybV9pbnB1dF9zdGF0ZV9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCB1MzIgbWFyayxcbiBcdFx0XHRcdFx0ICAgY29uc3QgeGZybV9hZGRyZXNzX3QgKmRhZGRyLFxuIFx0XHRcdFx0XHQgICBfX2JlMzIgc3BpLCB1OCBwcm90byxcbkBAIC0xMjI4LDcgJiM0MzsxMjUwLDcgQEAgc3RydWN0IHhmcm1fc3RhdGUgKnhmcm1faW5wdXRfc3RhdGVfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgdTMyIG1hcmssXG4gXG4gXHR4ZnJtX2hhc2hfcHRyc19nZXQobmV0LCBcdTAwMjZzdGF0ZV9wdHJzKTtcbiBcbi1cdHggPSBfX3hmcm1fc3RhdGVfbG9va3VwKFx1MDAyNnN0YXRlX3B0cnMsIG1hcmssIGRhZGRyLCBzcGksIHByb3RvLCBmYW1pbHkpO1xuJiM0MztcdHggPSBfX3hmcm1fc3RhdGVfbG9va3VwKFx1MDAyNnN0YXRlX3B0cnMsIG1hcmssIDAsIGZhbHNlLCBkYWRkciwgc3BpLCBwcm90bywgZmFtaWx5KTtcbiBcdGlmICh4KSB7XG4gXHRcdHNwaW5fbG9jayhcdTAwMjZuZXQtXHUwMDNleGZybS54ZnJtX3N0YXRlX2xvY2spO1xuIFx0XHRpZiAoeC1cdTAwM2VrbS5zdGF0ZSAhPSBYRlJNX1NUQVRFX1ZBTElEKSB7XG5AQCAtMTI1MiwxMSAmIzQzOzEyNzQsMTIgQEAgc3RydWN0IHhmcm1fc3RhdGUgKnhmcm1faW5wdXRfc3RhdGVfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgdTMyIG1hcmssXG4gfVxuIEVYUE9SVF9TWU1CT0woeGZybV9pbnB1dF9zdGF0ZV9sb29rdXApO1xuIFxuLXN0YXRpYyBzdHJ1Y3QgeGZybV9zdGF0ZSAqX194ZnJtX3N0YXRlX2xvb2t1cF9ieWFkZHIoY29uc3Qgc3RydWN0IHhmcm1faGFzaF9zdGF0ZV9wdHJzICpzdGF0ZV9wdHJzLFxuLVx0XHRcdFx0XHRcdCAgICAgdTMyIG1hcmssXG4tXHRcdFx0XHRcdFx0ICAgICBjb25zdCB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsXG4tXHRcdFx0XHRcdFx0ICAgICBjb25zdCB4ZnJtX2FkZHJlc3NfdCAqc2FkZHIsXG4tXHRcdFx0XHRcdFx0ICAgICB1OCBwcm90bywgdW5zaWduZWQgc2hvcnQgZmFtaWx5KVxuJiM0MztzdGF0aWMgc3RydWN0IHhmcm1fc3RhdGUgKlxuJiM0MztfX3hmcm1fc3RhdGVfbG9va3VwX2J5YWRkcihjb25zdCBzdHJ1Y3QgeGZybV9oYXNoX3N0YXRlX3B0cnMgKnN0YXRlX3B0cnMsXG4mIzQzO1x0XHRcdCAgIHUzMiBtYXJrLCB1MzIgbWFzaywgYm9vbCBleGFjdCxcbiYjNDM7XHRcdFx0ICAgY29uc3QgeGZybV9hZGRyZXNzX3QgKmRhZGRyLFxuJiM0MztcdFx0XHQgICBjb25zdCB4ZnJtX2FkZHJlc3NfdCAqc2FkZHIsXG4mIzQzO1x0XHRcdCAgIHU4IHByb3RvLCB1bnNpZ25lZCBzaG9ydCBmYW1pbHkpXG4ge1xuIFx0dW5zaWduZWQgaW50IGggPSBfX3hmcm1fc3JjX2hhc2goZGFkZHIsIHNhZGRyLCBmYW1pbHksIHN0YXRlX3B0cnMtXHUwMDNlaG1hc2spO1xuIFx0c3RydWN0IHhmcm1fc3RhdGUgKng7XG5AQCAtMTI2OCw3ICYjNDM7MTI5MSw3IEBAIHN0YXRpYyBzdHJ1Y3QgeGZybV9zdGF0ZSAqX194ZnJtX3N0YXRlX2xvb2t1cF9ieWFkZHIoY29uc3Qgc3RydWN0IHhmcm1faGFzaF9zdGF0XG4gXHRcdCAgICAheGZybV9hZGRyX2VxdWFsKFx1MDAyNngtXHUwMDNlcHJvcHMuc2FkZHIsIHNhZGRyLCBmYW1pbHkpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRpZiAoKG1hcmsgXHUwMDI2IHgtXHUwMDNlbWFyay5tKSAhPSB4LVx1MDAzZW1hcmsudilcbiYjNDM7XHRcdGlmICgheGZybV9zdGF0ZV9tYXJrX21hdGNoZXMoeCwgbWFyaywgbWFzaywgZXhhY3QpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRpZiAoIXhmcm1fc3RhdGVfaG9sZF9yY3UoeCkpXG4gXHRcdFx0Y29udGludWU7XG5AQCAtMTI4OCwxMCAmIzQzOzEzMTEsMzEgQEAgX194ZnJtX3N0YXRlX2xvY2F0ZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgaW50IHVzZV9zcGksIGludCBmYW1pbHkpXG4gXHR4ZnJtX2hhc2hfcHRyc19nZXQobmV0LCBcdTAwMjZzdGF0ZV9wdHJzKTtcbiBcbiBcdGlmICh1c2Vfc3BpKVxuLVx0XHRyZXR1cm4gX194ZnJtX3N0YXRlX2xvb2t1cChcdTAwMjZzdGF0ZV9wdHJzLCBtYXJrLCBcdTAwMjZ4LVx1MDAzZWlkLmRhZGRyLFxuJiM0MztcdFx0cmV0dXJuIF9feGZybV9zdGF0ZV9sb29rdXAoXHUwMDI2c3RhdGVfcHRycywgbWFyaywgMCwgZmFsc2UsIFx1MDAyNngtXHUwMDNlaWQuZGFkZHIsXG4gXHRcdFx0XHRcdCAgIHgtXHUwMDNlaWQuc3BpLCB4LVx1MDAzZWlkLnByb3RvLCBmYW1pbHkpO1xuIFx0ZWxzZVxuLVx0XHRyZXR1cm4gX194ZnJtX3N0YXRlX2xvb2t1cF9ieWFkZHIoXHUwMDI2c3RhdGVfcHRycywgbWFyayxcbiYjNDM7XHRcdHJldHVybiBfX3hmcm1fc3RhdGVfbG9va3VwX2J5YWRkcihcdTAwMjZzdGF0ZV9wdHJzLCBtYXJrLCAwLCBmYWxzZSxcbiYjNDM7XHRcdFx0XHRcdFx0ICBcdTAwMjZ4LVx1MDAzZWlkLmRhZGRyLFxuJiM0MztcdFx0XHRcdFx0XHQgIFx1MDAyNngtXHUwMDNlcHJvcHMuc2FkZHIsXG4mIzQzO1x0XHRcdFx0XHRcdCAgeC1cdTAwM2VpZC5wcm90bywgZmFtaWx5KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogVXNlZCBieSB4ZnJtX3N0YXRlX3VwZGF0ZSgpIG9ubHk7IHhmcm1fc3RhdGVfYWRkKCkmIzM5O3MgZHVwIGNoZWNrIGtlZXBzXG4mIzQzOyAqIHVzaW5nIHRoZSB3aWxkY2FyZCBfX3hmcm1fc3RhdGVfbG9jYXRlKCkgYWJvdmUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCB4ZnJtX3N0YXRlICpcbiYjNDM7X194ZnJtX3N0YXRlX2xvY2F0ZV9leGFjdChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgaW50IHVzZV9zcGksIGludCBmYW1pbHkpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeGZybV9oYXNoX3N0YXRlX3B0cnMgc3RhdGVfcHRycztcbiYjNDM7XHRzdHJ1Y3QgbmV0ICpuZXQgPSB4c19uZXQoeCk7XG4mIzQzO1xuJiM0MztcdHhmcm1faGFzaF9wdHJzX2dldChuZXQsIFx1MDAyNnN0YXRlX3B0cnMpO1xuJiM0MztcbiYjNDM7XHRpZiAodXNlX3NwaSlcbiYjNDM7XHRcdHJldHVybiBfX3hmcm1fc3RhdGVfbG9va3VwX2V4YWN0KFx1MDAyNnN0YXRlX3B0cnMsIFx1MDAyNngtXHUwMDNlbWFyaywgXHUwMDI2eC1cdTAwM2VpZC5kYWRkcixcbiYjNDM7XHRcdFx0XHRcdFx0IHgtXHUwMDNlaWQuc3BpLCB4LVx1MDAzZWlkLnByb3RvLCBmYW1pbHkpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHJldHVybiBfX3hmcm1fc3RhdGVfbG9va3VwX2J5YWRkcihcdTAwMjZzdGF0ZV9wdHJzLCB4LVx1MDAzZW1hcmsudiwgeC1cdTAwM2VtYXJrLm0sIHRydWUsXG4gXHRcdFx0XHRcdFx0ICBcdTAwMjZ4LVx1MDAzZWlkLmRhZGRyLFxuIFx0XHRcdFx0XHRcdCAgXHUwMDI2eC1cdTAwM2Vwcm9wcy5zYWRkcixcbiBcdFx0XHRcdFx0XHQgIHgtXHUwMDNlaWQucHJvdG8sIGZhbWlseSk7XG5AQCAtMjE3NywxMCAmIzQzOzIyMjEsMTIgQEAgaW50IHhmcm1fc3RhdGVfbWlncmF0ZV9pbnN0YWxsKGNvbnN0IHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxuIFx0XHRcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuIFx0aWYgKG0tXHUwMDNlbmV3X2ZhbWlseSA9PSBtLVx1MDAzZW9sZF9mYW1pbHkgXHUwMDI2XHUwMDI2XG4tXHQgICAgeGZybV9hZGRyX2VxdWFsKFx1MDAyNngtXHUwMDNlaWQuZGFkZHIsIFx1MDAyNm0tXHUwMDNlbmV3X2RhZGRyLCBtLVx1MDAzZW5ld19mYW1pbHkpKSB7XG4mIzQzO1x0ICAgIHhmcm1fYWRkcl9lcXVhbChcdTAwMjZ4LVx1MDAzZWlkLmRhZGRyLCBcdTAwMjZtLVx1MDAzZW5ld19kYWRkciwgbS1cdTAwM2VuZXdfZmFtaWx5KSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgeGMtXHUwMDNlbWFyay52ID09IHgtXHUwMDNlbWFyay52IFx1MDAyNlx1MDAyNiB4Yy1cdTAwM2VtYXJrLm0gPT0geC1cdTAwM2VtYXJrLm0pIHtcbiBcdFx0Lypcbi1cdFx0ICogQ2FyZSBpcyBuZWVkZWQgd2hlbiB0aGUgZGVzdGluYXRpb24gYWRkcmVzcyBvZiB0aGUgc3RhdGUgaXNcbi1cdFx0ICogdG8gYmUgdXBkYXRlZCBhcyBpdCBpcyBhIHBhcnQgb2YgdHJpcGxldC5cbiYjNDM7XHRcdCAqIENhcmUgaXMgbmVlZGVkIHdoZW4gdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3Mgb3IgbWFyayBvZiB0aGVcbiYjNDM7XHRcdCAqIHN0YXRlIGlzIHRvIGJlIHVwZGF0ZWQsIGFzIHRoZXkgYXJlIHBhcnQgb2YgdGhlIGxvb2t1cFxuJiM0MztcdFx0ICogdHJpcGxldC5cbiBcdFx0ICovXG4gXHRcdHhmcm1fc3RhdGVfaW5zZXJ0KHhjKTtcbiBcdH0gZWxzZSB7XG5AQCAtMjIyOSw3ICYjNDM7MjI3NSw3IEBAIGludCB4ZnJtX3N0YXRlX3VwZGF0ZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcbiBcdHRvX3B1dCA9IE5VTEw7XG4gXG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2bmV0LVx1MDAzZXhmcm0ueGZybV9zdGF0ZV9sb2NrKTtcbi1cdHgxID0gX194ZnJtX3N0YXRlX2xvY2F0ZSh4LCB1c2Vfc3BpLCB4LVx1MDAzZXByb3BzLmZhbWlseSk7XG4mIzQzO1x0eDEgPSBfX3hmcm1fc3RhdGVfbG9jYXRlX2V4YWN0KHgsIHVzZV9zcGksIHgtXHUwMDNlcHJvcHMuZmFtaWx5KTtcbiBcbiBcdGVyciA9IC1FU1JDSDtcbiBcdGlmICgheDEpXG5AQCAtMjM3NCwxNCAmIzQzOzI0MjAsMTQgQEAgeGZybV9zdGF0ZV9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCB1MzIgbWFyaywgY29uc3QgeGZybV9hZGRyZXNzX3QgKmRhZGRyLCBfX2JlMzJcbiBcdHJjdV9yZWFkX2xvY2soKTtcbiBcdHhmcm1faGFzaF9wdHJzX2dldChuZXQsIFx1MDAyNnN0YXRlX3B0cnMpO1xuIFxuLVx0eCA9IF9feGZybV9zdGF0ZV9sb29rdXAoXHUwMDI2c3RhdGVfcHRycywgbWFyaywgZGFkZHIsIHNwaSwgcHJvdG8sIGZhbWlseSk7XG4mIzQzO1x0eCA9IF9feGZybV9zdGF0ZV9sb29rdXAoXHUwMDI2c3RhdGVfcHRycywgbWFyaywgMCwgZmFsc2UsIGRhZGRyLCBzcGksIHByb3RvLCBmYW1pbHkpO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRyZXR1cm4geDtcbiB9XG4gRVhQT1JUX1NZTUJPTCh4ZnJtX3N0YXRlX2xvb2t1cCk7XG4gXG4gc3RydWN0IHhmcm1fc3RhdGUgKlxuLXhmcm1fc3RhdGVfbG9va3VwX2J5YWRkcihzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBtYXJrLFxuJiM0Mzt4ZnJtX3N0YXRlX2xvb2t1cF9ieWFkZHIoc3RydWN0IG5ldCAqbmV0LCB1MzIgbWFyaywgdTMyIG1hc2ssIGJvb2wgZXhhY3QsXG4gXHRcdFx0IGNvbnN0IHhmcm1fYWRkcmVzc190ICpkYWRkciwgY29uc3QgeGZybV9hZGRyZXNzX3QgKnNhZGRyLFxuIFx0XHRcdCB1OCBwcm90bywgdW5zaWduZWQgc2hvcnQgZmFtaWx5KVxuIHtcbkBAIC0yMzkyLDEyICYjNDM7MjQzOCwyOSBAQCB4ZnJtX3N0YXRlX2xvb2t1cF9ieWFkZHIoc3RydWN0IG5ldCAqbmV0LCB1MzIgbWFyayxcbiBcbiBcdHhmcm1faGFzaF9wdHJzX2dldChuZXQsIFx1MDAyNnN0YXRlX3B0cnMpO1xuIFxuLVx0eCA9IF9feGZybV9zdGF0ZV9sb29rdXBfYnlhZGRyKFx1MDAyNnN0YXRlX3B0cnMsIG1hcmssIGRhZGRyLCBzYWRkciwgcHJvdG8sIGZhbWlseSk7XG4mIzQzO1x0eCA9IF9feGZybV9zdGF0ZV9sb29rdXBfYnlhZGRyKFx1MDAyNnN0YXRlX3B0cnMsIG1hcmssIG1hc2ssIGV4YWN0LCBkYWRkciwgc2FkZHIsIHByb3RvLCBmYW1pbHkpO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRyZXR1cm4geDtcbiB9XG4gRVhQT1JUX1NZTUJPTCh4ZnJtX3N0YXRlX2xvb2t1cF9ieWFkZHIpO1xuIFxuJiM0MztzdHJ1Y3QgeGZybV9zdGF0ZSAqXG4mIzQzO3hmcm1fc3RhdGVfbG9va3VwX2V4YWN0KHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IHhmcm1fbWFyayAqbWFyayxcbiYjNDM7XHRcdFx0Y29uc3QgeGZybV9hZGRyZXNzX3QgKmRhZGRyLCBfX2JlMzIgc3BpLFxuJiM0MztcdFx0XHR1OCBwcm90bywgdW5zaWduZWQgc2hvcnQgZmFtaWx5KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHhmcm1faGFzaF9zdGF0ZV9wdHJzIHN0YXRlX3B0cnM7XG4mIzQzO1x0c3RydWN0IHhmcm1fc3RhdGUgKng7XG4mIzQzO1xuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHR4ZnJtX2hhc2hfcHRyc19nZXQobmV0LCBcdTAwMjZzdGF0ZV9wdHJzKTtcbiYjNDM7XG4mIzQzO1x0eCA9IF9feGZybV9zdGF0ZV9sb29rdXBfZXhhY3QoXHUwMDI2c3RhdGVfcHRycywgbWFyaywgZGFkZHIsIHNwaSwgcHJvdG8sIGZhbWlseSk7XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1x0cmV0dXJuIHg7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTCh4ZnJtX3N0YXRlX2xvb2t1cF9leGFjdCk7XG4mIzQzO1xuIHN0cnVjdCB4ZnJtX3N0YXRlICpcbiB4ZnJtX2ZpbmRfYWNxKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IHhmcm1fbWFyayAqbWFyaywgdTggbW9kZSwgdTMyIHJlcWlkLFxuIFx0ICAgICAgdTMyIGlmX2lkLCB1MzIgcGNwdV9udW0sIHU4IHByb3RvLCBjb25zdCB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsXG5AQCAtMzMwNiw3ICYjNDM7MzM2OSw3IEBAIGludCB4ZnJtX2luaXRfc3RhdGUoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG4tXHRlcnIgPSB4ZnJtX2luaXRfcmVwbGF5KHgsIE5VTEwpO1xuJiM0MztcdGVyciA9IHhmcm1faW5pdF9yZXBsYXkoeCwgZXh0YWNrKTtcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV91c2VyLmMgYi9uZXQveGZybS94ZnJtX3VzZXIuY1xuaW5kZXggNjM4NDc5NWVlNmIyNjkuLmEyMzE3ZTZlNjgwMmRkIDEwMDY0NFxuLS0tIGEvbmV0L3hmcm0veGZybV91c2VyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZnJtL3hmcm1fdXNlci5jXG5AQCAtMTA4OSwxMSAmIzQzOzEwODksMTIgQEAgc3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlICp4ZnJtX3VzZXJfc3RhdGVfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCxcbiBcdHN0cnVjdCB4ZnJtX3N0YXRlICp4ID0gTlVMTDtcbiBcdHN0cnVjdCB4ZnJtX21hcmsgbTtcbiBcdGludCBlcnI7XG4tXHR1MzIgbWFyayA9IHhmcm1fbWFya19nZXQoYXR0cnMsIFx1MDAyNm0pO1xuJiM0MztcbiYjNDM7XHR4ZnJtX21hcmtfZ2V0KGF0dHJzLCBcdTAwMjZtKTtcbiBcbiBcdGlmICh4ZnJtX2lkX3Byb3RvX21hdGNoKHAtXHUwMDNlcHJvdG8sIElQU0VDX1BST1RPX0FOWSkpIHtcbiBcdFx0ZXJyID0gLUVTUkNIO1xuLVx0XHR4ID0geGZybV9zdGF0ZV9sb29rdXAobmV0LCBtYXJrLCBcdTAwMjZwLVx1MDAzZWRhZGRyLCBwLVx1MDAzZXNwaSwgcC1cdTAwM2Vwcm90bywgcC1cdTAwM2VmYW1pbHkpO1xuJiM0MztcdFx0eCA9IHhmcm1fc3RhdGVfbG9va3VwX2V4YWN0KG5ldCwgXHUwMDI2bSwgXHUwMDI2cC1cdTAwM2VkYWRkciwgcC1cdTAwM2VzcGksIHAtXHUwMDNlcHJvdG8sIHAtXHUwMDNlZmFtaWx5KTtcbiBcdH0gZWxzZSB7XG4gXHRcdHhmcm1fYWRkcmVzc190ICpzYWRkciA9IE5VTEw7XG4gXG5AQCAtMTEwNCw3ICYjNDM7MTEwNSw3IEBAIHN0YXRpYyBzdHJ1Y3QgeGZybV9zdGF0ZSAqeGZybV91c2VyX3N0YXRlX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdH1cbiBcbiBcdFx0ZXJyID0gLUVTUkNIO1xuLVx0XHR4ID0geGZybV9zdGF0ZV9sb29rdXBfYnlhZGRyKG5ldCwgbWFyayxcbiYjNDM7XHRcdHggPSB4ZnJtX3N0YXRlX2xvb2t1cF9ieWFkZHIobmV0LCBtLnYsIG0ubSwgdHJ1ZSxcbiBcdFx0XHRcdFx0ICAgICBcdTAwMjZwLVx1MDAzZWRhZGRyLCBzYWRkcixcbiBcdFx0XHRcdFx0ICAgICBwLVx1MDAzZXByb3RvLCBwLVx1MDAzZWZhbWlseSk7XG4gXHR9XG5AQCAtMjc4OCwxNCAmIzQzOzI3ODksMTMgQEAgc3RhdGljIGludCB4ZnJtX2dldF9hZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbiBcdHN0cnVjdCBza19idWZmICpyX3NrYjtcbiBcdGludCBlcnI7XG4gXHRzdHJ1Y3Qga21fZXZlbnQgYztcbi1cdHUzMiBtYXJrO1xuIFx0c3RydWN0IHhmcm1fbWFyayBtO1xuIFx0c3RydWN0IHhmcm1fYWV2ZW50X2lkICpwID0gbmxtc2dfZGF0YShubGgpO1xuIFx0c3RydWN0IHhmcm1fdXNlcnNhX2lkICppZCA9IFx1MDAyNnAtXHUwMDNlc2FfaWQ7XG4gXG4tXHRtYXJrID0geGZybV9tYXJrX2dldChhdHRycywgXHUwMDI2bSk7XG4mIzQzO1x0eGZybV9tYXJrX2dldChhdHRycywgXHUwMDI2bSk7XG4gXG4tXHR4ID0geGZybV9zdGF0ZV9sb29rdXAobmV0LCBtYXJrLCBcdTAwMjZpZC1cdTAwM2VkYWRkciwgaWQtXHUwMDNlc3BpLCBpZC1cdTAwM2Vwcm90bywgaWQtXHUwMDNlZmFtaWx5KTtcbiYjNDM7XHR4ID0geGZybV9zdGF0ZV9sb29rdXBfZXhhY3QobmV0LCBcdTAwMjZtLCBcdTAwMjZpZC1cdTAwM2VkYWRkciwgaWQtXHUwMDNlc3BpLCBpZC1cdTAwM2Vwcm90bywgaWQtXHUwMDNlZmFtaWx5KTtcbiBcdGlmICh4ID09IE5VTEwpXG4gXHRcdHJldHVybiAtRVNSQ0g7XG4gXG5AQCAtMjgzNiw3ICYjNDM7MjgzNiw2IEBAIHN0YXRpYyBpbnQgeGZybV9uZXdfYWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4gXHRzdHJ1Y3QgeGZybV9zdGF0ZSAqeDtcbiBcdHN0cnVjdCBrbV9ldmVudCBjO1xuIFx0aW50IGVyciA9IC1FSU5WQUw7XG4tXHR1MzIgbWFyayA9IDA7XG4gXHRzdHJ1Y3QgeGZybV9tYXJrIG07XG4gXHRzdHJ1Y3QgeGZybV9hZXZlbnRfaWQgKnAgPSBubG1zZ19kYXRhKG5saCk7XG4gXHRzdHJ1Y3QgbmxhdHRyICpycCA9IGF0dHJzW1hGUk1BX1JFUExBWV9WQUxdO1xuQEAgLTI4NTYsOSAmIzQzOzI4NTUsMTAgQEAgc3RhdGljIGludCB4ZnJtX25ld19hZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbiBcdFx0cmV0dXJuIGVycjtcbiBcdH1cbiBcbi1cdG1hcmsgPSB4ZnJtX21hcmtfZ2V0KGF0dHJzLCBcdTAwMjZtKTtcbiYjNDM7XHR4ZnJtX21hcmtfZ2V0KGF0dHJzLCBcdTAwMjZtKTtcbiBcbi1cdHggPSB4ZnJtX3N0YXRlX2xvb2t1cChuZXQsIG1hcmssIFx1MDAyNnAtXHUwMDNlc2FfaWQuZGFkZHIsIHAtXHUwMDNlc2FfaWQuc3BpLCBwLVx1MDAzZXNhX2lkLnByb3RvLCBwLVx1MDAzZXNhX2lkLmZhbWlseSk7XG4mIzQzO1x0eCA9IHhmcm1fc3RhdGVfbG9va3VwX2V4YWN0KG5ldCwgXHUwMDI2bSwgXHUwMDI2cC1cdTAwM2VzYV9pZC5kYWRkciwgcC1cdTAwM2VzYV9pZC5zcGksXG4mIzQzO1x0XHRcdFx0ICAgIHAtXHUwMDNlc2FfaWQucHJvdG8sIHAtXHUwMDNlc2FfaWQuZmFtaWx5KTtcbiBcdGlmICh4ID09IE5VTEwpXG4gXHRcdHJldHVybiAtRVNSQ0g7XG4gXG5AQCAtMjk5Miw5ICYjNDM7Mjk5MiwxMCBAQCBzdGF0aWMgaW50IHhmcm1fYWRkX3NhX2V4cGlyZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbiBcdHN0cnVjdCB4ZnJtX3VzZXJfZXhwaXJlICp1ZSA9IG5sbXNnX2RhdGEobmxoKTtcbiBcdHN0cnVjdCB4ZnJtX3VzZXJzYV9pbmZvICpwID0gXHUwMDI2dWUtXHUwMDNlc3RhdGU7XG4gXHRzdHJ1Y3QgeGZybV9tYXJrIG07XG4tXHR1MzIgbWFyayA9IHhmcm1fbWFya19nZXQoYXR0cnMsIFx1MDAyNm0pO1xuIFxuLVx0eCA9IHhmcm1fc3RhdGVfbG9va3VwKG5ldCwgbWFyaywgXHUwMDI2cC1cdTAwM2VpZC5kYWRkciwgcC1cdTAwM2VpZC5zcGksIHAtXHUwMDNlaWQucHJvdG8sIHAtXHUwMDNlZmFtaWx5KTtcbiYjNDM7XHR4ZnJtX21hcmtfZ2V0KGF0dHJzLCBcdTAwMjZtKTtcbiYjNDM7XG4mIzQzO1x0eCA9IHhmcm1fc3RhdGVfbG9va3VwX2V4YWN0KG5ldCwgXHUwMDI2bSwgXHUwMDI2cC1cdTAwM2VpZC5kYWRkciwgcC1cdTAwM2VpZC5zcGksIHAtXHUwMDNlaWQucHJvdG8sIHAtXHUwMDNlZmFtaWx5KTtcbiBcbiBcdGVyciA9IC1FTk9FTlQ7XG4gXHRpZiAoeCA9PSBOVUxMKVxuQEAgLTMzNjEsOSAmIzQzOzMzNjIsOSBAQCBzdGF0aWMgaW50IHhmcm1fZG9fbWlncmF0ZV9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbiBcbiBcdGNvcHlfZnJvbV91c2VyX21pZ3JhdGVfc3RhdGUoXHUwMDI2bSwgdW0pO1xuIFxuLVx0eCA9IHhmcm1fc3RhdGVfbG9va3VwKG5ldCwgbS5vbGRfbWFyay52IFx1MDAyNiBtLm9sZF9tYXJrLm0sXG4tXHRcdFx0ICAgICAgXHUwMDI2dW0tXHUwMDNlaWQuZGFkZHIsIHVtLVx1MDAzZWlkLnNwaSxcbi1cdFx0XHQgICAgICB1bS1cdTAwM2VpZC5wcm90bywgdW0tXHUwMDNlaWQuZmFtaWx5KTtcbiYjNDM7XHR4ID0geGZybV9zdGF0ZV9sb29rdXBfZXhhY3QobmV0LCBcdTAwMjZtLm9sZF9tYXJrLFxuJiM0MztcdFx0XHRcdCAgICBcdTAwMjZ1bS1cdTAwM2VpZC5kYWRkciwgdW0tXHUwMDNlaWQuc3BpLFxuJiM0MztcdFx0XHRcdCAgICB1bS1cdTAwM2VpZC5wcm90bywgdW0tXHUwMDNlaWQuZmFtaWx5KTtcbiBcdGlmICgheCkge1xuIFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O0NhbiBub3QgZmluZCBzdGF0ZVwmIzM0Oyk7XG4gXHRcdHJldHVybiAtRVNSQ0g7XG5AQCAtMzQzNCwxOCAmIzQzOzM0MzUsMjMgQEAgc3RhdGljIGludCB4ZnJtX2RvX21pZ3JhdGVfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4gXHRcdFx0XHRcdFx0ICAgICAgIHgtXHUwMDNlbmF0X2tlZXBhbGl2ZV9pbnRlcnZhbCk7XG4gXG4gXHRpZiAobS5uZXdfZmFtaWx5ICE9IHVtLVx1MDAzZWlkLmZhbWlseSB8fFxuLVx0ICAgICF4ZnJtX2FkZHJfZXF1YWwoXHUwMDI2bS5uZXdfZGFkZHIsIFx1MDAyNnVtLVx1MDAzZWlkLmRhZGRyLCB1bS1cdTAwM2VpZC5mYW1pbHkpKSB7XG4mIzQzO1x0ICAgICF4ZnJtX2FkZHJfZXF1YWwoXHUwMDI2bS5uZXdfZGFkZHIsIFx1MDAyNnVtLVx1MDAzZWlkLmRhZGRyLCB1bS1cdTAwM2VpZC5mYW1pbHkpIHx8XG4mIzQzO1x0ICAgIChtLm5ld19tYXJrIFx1MDAyNlx1MDAyNiAobS5uZXdfbWFyay1cdTAwM2V2ICE9IHgtXHUwMDNlbWFyay52IHx8XG4mIzQzO1x0XHRcdCAgIG0ubmV3X21hcmstXHUwMDNlbSAhPSB4LVx1MDAzZW1hcmsubSkpKSB7XG4gXHRcdHUzMiBuZXdfbWFya19rZXkgPSBtLm5ld19tYXJrID8gbS5uZXdfbWFyay1cdTAwM2V2IFx1MDAyNiBtLm5ld19tYXJrLVx1MDAzZW0gOlxuLVx0XHRcdFx0XHRcdG0ub2xkX21hcmsudiBcdTAwMjYgbS5vbGRfbWFyay5tO1xuJiM0MztcdFx0XHRcdFx0XHR4LVx1MDAzZW1hcmsudiBcdTAwMjYgeC1cdTAwM2VtYXJrLm07XG4gXHRcdHN0cnVjdCB4ZnJtX3N0YXRlICp4X25ldztcbiBcbiBcdFx0eF9uZXcgPSB4ZnJtX3N0YXRlX2xvb2t1cChuZXQsIG5ld19tYXJrX2tleSwgXHUwMDI2bS5uZXdfZGFkZHIsXG4gXHRcdFx0XHRcdCAgdW0tXHUwMDNlaWQuc3BpLCB1bS1cdTAwM2VpZC5wcm90bywgbS5uZXdfZmFtaWx5KTtcbiBcdFx0aWYgKHhfbmV3KSB7XG4gXHRcdFx0eGZybV9zdGF0ZV9wdXQoeF9uZXcpO1xuLVx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7TmV3IFNBIHR1cGxlIGFscmVhZHkgb2NjdXBpZWRcJiMzNDspO1xuLVx0XHRcdGVyciA9IC1FRVhJU1Q7XG4tXHRcdFx0Z290byBvdXQ7XG4mIzQzO1x0XHRcdGlmICh4X25ldyAhPSB4KSB7XG4mIzQzO1x0XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtOZXcgU0EgdHVwbGUgYWxyZWFkeSBvY2N1cGllZFwmIzM0Oyk7XG4mIzQzO1x0XHRcdFx0ZXJyID0gLUVFWElTVDtcbiYjNDM7XHRcdFx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHQvKiBzZWxmLW1hdGNoIHZpYSB3aWRlIG1hcmsgbWFzazsgbm90IGEgY29sbGlzaW9uICovXG4gXHRcdH1cbiBcdH1cbiBcbkBAIC0zNDY3LDYgJiM0MzszNDczLDcgQEAgc3RhdGljIGludCB4ZnJtX2RvX21pZ3JhdGVfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4gXHRfX3hmcm1fc3RhdGVfZGVsZXRlKHgpO1xuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2eC1cdTAwM2Vsb2NrKTtcbiBcbiYjNDM7XHR4ZnJtX3N0YXRlX2hvbGQoeGMpO1xuIFx0ZXJyID0geGZybV9zdGF0ZV9taWdyYXRlX2luc3RhbGwoeCwgeGMsIFx1MDAyNm0sIGV4dGFjayk7XG4gXHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4gXHRcdC8qXG5AQCAtMzQ3NCw2ICYjNDM7MzQ4MSw3IEBAIHN0YXRpYyBpbnQgeGZybV9kb19taWdyYXRlX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuIFx0XHQgKiBmcmVlIHVuZGVyIHhmcm1fY2ZnX211dGV4LiBCb3RoIFNBcyBhcmUgZ29uZSBpZiBpdCBkb2VzO1xuIFx0XHQgKiByZXN0b3JpbmcgeCB3b3VsZCByaXNrIFNOL0lWIHJldXNlLlxuIFx0XHQgKi9cbiYjNDM7XHRcdHhmcm1fc3RhdGVfcHV0KHhjKTtcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG5AQCAtMzQ5MiwxMCAmIzQzOzM1MDAsMTMgQEAgc3RhdGljIGludCB4ZnJtX2RvX21pZ3JhdGVfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4gXHRcdGVyciA9IDA7XG4gXHR9XG4gXG4mIzQzO1x0eGZybV9zdGF0ZV9wdXQoeGMpO1xuIG91dDpcbiBcdHhmcm1fc3RhdGVfcHV0KHgpO1xuIFx0cmV0dXJuIGVycjtcbiBvdXRfeGM6XG4mIzQzO1x0aWYgKG0ueHVvKVxuJiM0MztcdFx0eGZybV9kZXZfc3RhdGVfZGVsZXRlKHhjKTtcbiBcdHhjLVx1MDAzZWttLnN0YXRlID0gWEZSTV9TVEFURV9ERUFEO1xuIFx0eGZybV9zdGF0ZV9wdXQoeGMpO1xuIFx0eGZybV9zdGF0ZV9wdXQoeCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3hmcm1fc3RhdGUuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQveGZybV9zdGF0ZS5zaFxuaW5kZXggZjZjNTRhNjQ5NmQ3MTQuLmYyMDIwNzM3MjZhOWY0IDEwMDc1NVxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3hmcm1fc3RhdGUuc2hcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC94ZnJtX3N0YXRlLnNoXG5AQCAtNDIsNyAmIzQzOzQyLDExIEBAIHRlc3RzPVwmIzM0O1xuIFx0bXR1X2lwdjRfcjJcdFx0XHRJUHY0IE1UVSBleGNlZWRlZCBmcm9tIEVTUCByb3V0ZXIgcjJcbiBcdG10dV9pcHY2X3IyXHRcdFx0SVB2NiBNVFUgZXhjZWVkZWQgZnJvbSBFU1Agcm91dGVyIHIyXG4gXHRtdHVfaXB2NF9yM1x0XHRcdElQdjQgTVRVIGV4Y2VlZGVkIGZyb20gcm91dGVyIHIzXG4tXHRtdHVfaXB2Nl9yM1x0XHRcdElQdjYgTVRVIGV4Y2VlZGVkIGZyb20gcm91dGVyIHIzXCYjMzQ7XG4mIzQzO1x0bXR1X2lwdjZfcjNcdFx0XHRJUHY2IE1UVSBleGNlZWRlZCBmcm9tIHJvdXRlciByM1xuJiM0MztcdG1hcmtfd2lsZGNhcmRfc2hhZG93XHRcdG1hcms6IHdpbGRjYXJkIFNBIGluIGJ5LXNwaSBzdGF0ZSBnZXQgbG9va3VwXG4mIzQzO1x0bWFya193aWxkY2FyZF9kZWxldGVcdFx0bWFyazogd2lsZGNhcmQgU0EgaW4gYnktc3BpIHN0YXRlIGRlbGV0ZVxuJiM0MztcdG1hcmtfd2lsZGNhcmRfZ2V0X2FkZHJcdFx0bWFyazogd2lsZGNhcmQgU0EgaW4gYnktYWRkcmVzcyBnZXQgbG9va3VwXG4mIzQzO1x0bWFya193aWxkY2FyZF9kZWxldGVfYWRkclx0bWFyazogd2lsZGNhcmQgU0EgaW4gYnktYWRkcmVzcyBkZWxldGVcJiMzNDtcbiBcbiBwcmVmaXg0PVwmIzM0OzEwLjFcJiMzNDtcbiBwcmVmaXg2PVwmIzM0O2ZjMDBcJiMzNDtcbkBAIC0xMDEsNiAmIzQzOzEwNSwxMCBAQCBydW5fdGVzdCgpIHtcbiBcdFx0bXR1X2lwdjZfcjIpICAgICAgICAgdGVzdF9tdHVfaXB2Nl9yMiA7O1xuIFx0XHRtdHVfaXB2NF9yMykgICAgICAgICB0ZXN0X210dV9pcHY0X3IzIDs7XG4gXHRcdG10dV9pcHY2X3IzKSAgICAgICAgIHRlc3RfbXR1X2lwdjZfcjMgOztcbiYjNDM7XHRcdG1hcmtfd2lsZGNhcmRfc2hhZG93KSAgICAgIHRlc3RfbWFya193aWxkY2FyZF9zaGFkb3cgOztcbiYjNDM7XHRcdG1hcmtfd2lsZGNhcmRfZGVsZXRlKSAgICAgIHRlc3RfbWFya193aWxkY2FyZF9kZWxldGUgOztcbiYjNDM7XHRcdG1hcmtfd2lsZGNhcmRfZ2V0X2FkZHIpICAgIHRlc3RfbWFya193aWxkY2FyZF9nZXRfYWRkciA7O1xuJiM0MztcdFx0bWFya193aWxkY2FyZF9kZWxldGVfYWRkcikgdGVzdF9tYXJrX3dpbGRjYXJkX2RlbGV0ZV9hZGRyIDs7XG4gXHRcdGVzYWNcbiBcdFx0cmV0PSQ/XG4gXG5AQCAtMTY3LDYgJiM0MzsxNzUsOCBAQCBzZXR1cF9uYW1lc3BhY2VzKCkge1xuIFx0WyAtbiBcJiMzNDske05TX1MyfVwmIzM0OyBdIFx1MDAyNlx1MDAyNiBuc19zMj0oaXAgbmV0bnMgZXhlYyBcJiMzNDske05TX1MyfVwmIzM0OykgXHUwMDI2XHUwMDI2IG5zX2FjdGl2ZT1cJiMzNDske25zX2FjdGl2ZX0gJE5TX1MyXCYjMzQ7XG4gXHRbIC1uIFwmIzM0OyR7TlNfUjN9XCYjMzQ7IF0gXHUwMDI2XHUwMDI2IG5zX3IzPShpcCBuZXRucyBleGVjIFwmIzM0OyR7TlNfUjN9XCYjMzQ7KSBcdTAwMjZcdTAwMjYgbnNfYWN0aXZlPVwmIzM0OyR7bnNfYWN0aXZlfSAkTlNfUjNcJiMzNDtcbiBcdFsgLW4gXCYjMzQ7JHtOU19CfVwmIzM0OyBdIFx1MDAyNlx1MDAyNiBuc19hY3RpdmU9XCYjMzQ7JHtuc19hY3RpdmV9ICROU19CXCYjMzQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwXG4gfVxuIFxuIGFkZHJfYWRkKCkge1xuQEAgLTI5NSw2ICYjNDM7MzA1LDE4IEBAIHNldHVwX25zX3NldF92NngoKSB7XG4gXHRzZXRfeGZybV9wYXJhbXNcbiB9XG4gXG4mIzQzO3NldHVwX25zX3NldF9zaW1wbGUoKSB7XG4mIzQzO1x0IyBTaW5nbGUgbmFtZXNwYWNlLCBubyB2ZXRocy9yb3V0ZXMuXG4mIzQzO1x0bnNfc2V0PVwmIzM0O2FcJiMzNDtcbiYjNDM7XHRpbWF4PTFcbiYjNDM7XHRzcmM9XCYjMzQ7MTAuMS4xLjFcJiMzNDtcbiYjNDM7XHRkc3Q9XCYjMzQ7MTAuMS4xLjJcJiMzNDtcbiYjNDM7XHRzcmNfbmV0PVwmIzM0OzEwLjEuMC4wLzI0XCYjMzQ7XG4mIzQzO1x0ZHN0X25ldD1cJiMzNDsxMC4yLjAuMC8yNFwmIzM0O1xuJiM0MztcbiYjNDM7XHRzZXRfeGZybV9wYXJhbXNcbiYjNDM7fVxuJiM0MztcbiBzZXR1cF9uZXR3b3JrKCkge1xuIFx0IyBDcmVhdGUgdmV0aHMgYW5kIGFkZCBhZGRyZXNzZXNcbiBcdGxvY2FsIC1hIG5zX2NtZFxuQEAgLTQwMyw2ICYjNDM7NDI1LDcgQEAgc2V0dXAoKSB7XG4gXHRcdG5zX3NldF92NHgpICAgIHNldHVwX25zX3NldF92NHggOztcbiBcdFx0bnNfc2V0X3Y2KSAgICAgc2V0dXBfbnNfc2V0X3Y2IDs7XG4gXHRcdG5zX3NldF92NngpICAgIHNldHVwX25zX3NldF92NnggOztcbiYjNDM7XHRcdG5zX3NldF9zaW1wbGUpIHNldHVwX25zX3NldF9zaW1wbGUgOztcbiBcdFx0bmFtZXNwYWNlcykgICAgc2V0dXBfbmFtZXNwYWNlcyA7O1xuIFx0XHRuZXR3b3JrKSAgICAgICBzZXR1cF9uZXR3b3JrIDs7XG4gXHRcdHhmcm0pICAgICAgICAgIHNldHVwX3hmcm0gOztcbkBAIC01NDgsNiAmIzQzOzU3MSwxMTEgQEAgdGVzdF9tdHVfaXB2Nl9yMygpIHtcbiBcdHJldHVybiBcJiMzNDske3JjfVwmIzM0O1xuIH1cbiBcbiYjNDM7IyBTQV9kZWNveSAobWFyayAwLzAsIGFkZGVkIHNlY29uZCkgc2hhZG93cyBTQV90YXJnZXQgKG1hcmsgMS8xKSBvbiBhXG4mIzQzOyMgd2lsZGNhcmQgbWFyayBsb29rdXAuIE5vIHRyYWZmaWMgc2VudDsgdGhlc2Ugb25seSBleGVyY2lzZSB0aGUgU0FELlxuJiM0MztcbiYjNDM7dGVzdF9tYXJrX3dpbGRjYXJkX3NoYWRvdygpIHtcbiYjNDM7XHRzZXR1cCBuc19zZXRfc2ltcGxlIG5hbWVzcGFjZXMgfHwgcmV0dXJuIFwmIzM0OyRrc2Z0X3NraXBcJiMzNDtcbiYjNDM7XHRsb2NhbCByZXN1bHQ9MFxuJiM0MztcbiYjNDM7XHRydW5fY21kIFwmIzM0OyR7bnNfYVtAXX1cJiMzNDsgaXAgeGZybSBzdGF0ZSBhZGQgXFxcbiYjNDM7XHRcdHNyYyBcJiMzNDske3NyY31cJiMzNDsgZHN0IFwmIzM0OyR7ZHN0fVwmIzM0OyBwcm90byBlc3Agc3BpIDB4MTAwMCBcXFxuJiM0MztcdFx0cmVxaWQgMTAwIG1vZGUgdHVubmVsIFxcXG4mIzQzO1x0XHRhZWFkICYjMzk7cmZjNDEwNihnY20oYWVzKSkmIzM5OyAweDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgOTYgXFxcbiYjNDM7XHRcdG1hcmsgMSBtYXNrIDFcbiYjNDM7XG4mIzQzO1x0cnVuX2NtZCBcJiMzNDske25zX2FbQF19XCYjMzQ7IGlwIHhmcm0gc3RhdGUgYWRkIFxcXG4mIzQzO1x0XHRzcmMgXCYjMzQ7JHtzcmN9XCYjMzQ7IGRzdCBcJiMzNDske2RzdH1cJiMzNDsgcHJvdG8gZXNwIHNwaSAweDEwMDAgXFxcbiYjNDM7XHRcdHJlcWlkIDEwMCBtb2RlIHR1bm5lbCBcXFxuJiM0MztcdFx0YWVhZCAmIzM5O3JmYzQxMDYoZ2NtKGFlcykpJiMzOTsgMHgyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIDk2IFxcXG4mIzQzO1x0XHRtYXJrIDAgbWFzayAwXG4mIzQzO1xuJiM0MztcdHJ1bl9jbWRfZXJyIFwmIzM0OyR7bnNfYVtAXX1cJiMzNDsgaXAgeGZybSBzdGF0ZSBnZXQgXFxcbiYjNDM7XHRcdGRzdCBcJiMzNDske2RzdH1cJiMzNDsgcHJvdG8gZXNwIHNwaSAweDEwMDAgXFxcbiYjNDM7XHRcdG1hcmsgMSBtYXNrIDFcbiYjNDM7XG4mIzQzO1x0IyBFeHBlY3RlZDogU0FfdGFyZ2V0IChtYXJrIDB4MS8weDEpLiBBY3R1YWwgKGJ1Zyk6IFNBX2RlY295IChtYXJrIDAvMCkuXG4mIzQzO1x0ZWNobyBcJiMzNDskb3V0XCYjMzQ7IHwgZ3JlcCAtcSBcJiMzNDttYXJrIDB4MS8weDFcJiMzNDsgfHwgcmVzdWx0PTFcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIFwmIzM0OyR7cmVzdWx0fVwmIzM0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt0ZXN0X21hcmtfd2lsZGNhcmRfZGVsZXRlKCkge1xuJiM0MztcdHNldHVwIG5zX3NldF9zaW1wbGUgbmFtZXNwYWNlcyB8fCByZXR1cm4gXCYjMzQ7JGtzZnRfc2tpcFwmIzM0O1xuJiM0MztcdGxvY2FsIHJlc3VsdD0wXG4mIzQzO1xuJiM0MztcdHJ1bl9jbWQgXCYjMzQ7JHtuc19hW0BdfVwmIzM0OyBpcCB4ZnJtIHN0YXRlIGFkZCBcXFxuJiM0MztcdFx0c3JjIFwmIzM0OyR7c3JjfVwmIzM0OyBkc3QgXCYjMzQ7JHtkc3R9XCYjMzQ7IHByb3RvIGVzcCBzcGkgMHgxMDAwIFxcXG4mIzQzO1x0XHRyZXFpZCAxMDAgbW9kZSB0dW5uZWwgXFxcbiYjNDM7XHRcdGFlYWQgJiMzOTtyZmM0MTA2KGdjbShhZXMpKSYjMzk7IDB4MTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSA5NiBcXFxuJiM0MztcdFx0bWFyayAxIG1hc2sgMVxuJiM0MztcbiYjNDM7XHRydW5fY21kIFwmIzM0OyR7bnNfYVtAXX1cJiMzNDsgaXAgeGZybSBzdGF0ZSBhZGQgXFxcbiYjNDM7XHRcdHNyYyBcJiMzNDske3NyY31cJiMzNDsgZHN0IFwmIzM0OyR7ZHN0fVwmIzM0OyBwcm90byBlc3Agc3BpIDB4MTAwMCBcXFxuJiM0MztcdFx0cmVxaWQgMTAwIG1vZGUgdHVubmVsIFxcXG4mIzQzO1x0XHRhZWFkICYjMzk7cmZjNDEwNihnY20oYWVzKSkmIzM5OyAweDIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIgOTYgXFxcbiYjNDM7XHRcdG1hcmsgMCBtYXNrIDBcbiYjNDM7XG4mIzQzO1x0cnVuX2NtZCBcJiMzNDske25zX2FbQF19XCYjMzQ7IGlwIHhmcm0gc3RhdGUgZGVsZXRlIFxcXG4mIzQzO1x0XHRkc3QgXCYjMzQ7JHtkc3R9XCYjMzQ7IHByb3RvIGVzcCBzcGkgMHgxMDAwIFxcXG4mIzQzO1x0XHRtYXJrIDEgbWFzayAxXG4mIzQzO1xuJiM0MztcdHJ1bl9jbWRfZXJyIFwmIzM0OyR7bnNfYVtAXX1cJiMzNDsgaXAgeGZybSBzdGF0ZSBzaG93XG4mIzQzO1x0ZWNobyBcJiMzNDskb3V0XCYjMzQ7IHwgZ3JlcCAtcSBcJiMzNDttYXJrIDB4MS8weDFcJiMzNDsgXHUwMDI2XHUwMDI2IHJlc3VsdD0xXG4mIzQzO1xuJiM0MztcdHJldHVybiBcJiMzNDske3Jlc3VsdH1cJiMzNDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7IyBieS1hZGRyZXNzIGNvdW50ZXJwYXJ0OiBwcm90byByb3V0ZTIvaGFvIChJUHY2IG1vYmlsaXR5KSBoYXZlIG5vIFNQSSxcbiYjNDM7IyBzbyB4ZnJtX3VzZXJfc3RhdGVfbG9va3VwKCkgcmVzb2x2ZXMgdGhlbSBieSBhZGRyZXNzIGluc3RlYWQuXG4mIzQzO1xuJiM0Mzt0ZXN0X21hcmtfd2lsZGNhcmRfZ2V0X2FkZHIoKSB7XG4mIzQzO1x0c2V0dXAgbnNfc2V0X3NpbXBsZSBuYW1lc3BhY2VzIHx8IHJldHVybiBcJiMzNDska3NmdF9za2lwXCYjMzQ7XG4mIzQzO1x0bG9jYWwgcmVzdWx0PTBcbiYjNDM7XHRsb2NhbCBzcmM2PVwmIzM0O2ZjMDA6OTo6MVwmIzM0O1xuJiM0MztcdGxvY2FsIGRzdDY9XCYjMzQ7ZmMwMDo5OjoyXCYjMzQ7XG4mIzQzO1xuJiM0MztcdHJ1bl9jbWQgXCYjMzQ7JHtuc19hW0BdfVwmIzM0OyBpcCB4ZnJtIHN0YXRlIGFkZCBcXFxuJiM0MztcdFx0c3JjIFwmIzM0OyR7c3JjNn1cJiMzNDsgZHN0IFwmIzM0OyR7ZHN0Nn1cJiMzNDsgcHJvdG8gcm91dGUyIG1vZGUgcm8gY29hIGZjMDA6OTo6MyBcXFxuJiM0MztcdFx0bWFyayAxIG1hc2sgMVxuJiM0MztcbiYjNDM7XHRydW5fY21kIFwmIzM0OyR7bnNfYVtAXX1cJiMzNDsgaXAgeGZybSBzdGF0ZSBhZGQgXFxcbiYjNDM7XHRcdHNyYyBcJiMzNDske3NyYzZ9XCYjMzQ7IGRzdCBcJiMzNDske2RzdDZ9XCYjMzQ7IHByb3RvIHJvdXRlMiBtb2RlIHJvIGNvYSBmYzAwOjk6OjQgXFxcbiYjNDM7XHRcdG1hcmsgMCBtYXNrIDBcbiYjNDM7XG4mIzQzO1x0cnVuX2NtZF9lcnIgXCYjMzQ7JHtuc19hW0BdfVwmIzM0OyBpcCB4ZnJtIHN0YXRlIGdldCBcXFxuJiM0MztcdFx0c3JjIFwmIzM0OyR7c3JjNn1cJiMzNDsgZHN0IFwmIzM0OyR7ZHN0Nn1cJiMzNDsgcHJvdG8gcm91dGUyIFxcXG4mIzQzO1x0XHRtYXJrIDEgbWFzayAxXG4mIzQzO1xuJiM0MztcdGVjaG8gXCYjMzQ7JG91dFwmIzM0OyB8IGdyZXAgLXEgXCYjMzQ7bWFyayAweDEvMHgxXCYjMzQ7IHx8IHJlc3VsdD0xXG4mIzQzO1xuJiM0MztcdHJldHVybiBcJiMzNDske3Jlc3VsdH1cJiMzNDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dGVzdF9tYXJrX3dpbGRjYXJkX2RlbGV0ZV9hZGRyKCkge1xuJiM0MztcdHNldHVwIG5zX3NldF9zaW1wbGUgbmFtZXNwYWNlcyB8fCByZXR1cm4gXCYjMzQ7JGtzZnRfc2tpcFwmIzM0O1xuJiM0MztcdGxvY2FsIHJlc3VsdD0wXG4mIzQzO1x0bG9jYWwgc3JjNj1cJiMzNDtmYzAwOjk6OjFcJiMzNDtcbiYjNDM7XHRsb2NhbCBkc3Q2PVwmIzM0O2ZjMDA6OTo6MlwmIzM0O1xuJiM0MztcbiYjNDM7XHRydW5fY21kIFwmIzM0OyR7bnNfYVtAXX1cJiMzNDsgaXAgeGZybSBzdGF0ZSBhZGQgXFxcbiYjNDM7XHRcdHNyYyBcJiMzNDske3NyYzZ9XCYjMzQ7IGRzdCBcJiMzNDske2RzdDZ9XCYjMzQ7IHByb3RvIHJvdXRlMiBtb2RlIHJvIGNvYSBmYzAwOjk6OjMgXFxcbiYjNDM7XHRcdG1hcmsgMSBtYXNrIDFcbiYjNDM7XG4mIzQzO1x0cnVuX2NtZCBcJiMzNDske25zX2FbQF19XCYjMzQ7IGlwIHhmcm0gc3RhdGUgYWRkIFxcXG4mIzQzO1x0XHRzcmMgXCYjMzQ7JHtzcmM2fVwmIzM0OyBkc3QgXCYjMzQ7JHtkc3Q2fVwmIzM0OyBwcm90byByb3V0ZTIgbW9kZSBybyBjb2EgZmMwMDo5Ojo0IFxcXG4mIzQzO1x0XHRtYXJrIDAgbWFzayAwXG4mIzQzO1xuJiM0MztcdHJ1bl9jbWQgXCYjMzQ7JHtuc19hW0BdfVwmIzM0OyBpcCB4ZnJtIHN0YXRlIGRlbGV0ZSBcXFxuJiM0MztcdFx0c3JjIFwmIzM0OyR7c3JjNn1cJiMzNDsgZHN0IFwmIzM0OyR7ZHN0Nn1cJiMzNDsgcHJvdG8gcm91dGUyIFxcXG4mIzQzO1x0XHRtYXJrIDEgbWFzayAxXG4mIzQzO1xuJiM0MztcdHJ1bl9jbWRfZXJyIFwmIzM0OyR7bnNfYVtAXX1cJiMzNDsgaXAgeGZybSBzdGF0ZSBzaG93XG4mIzQzO1x0ZWNobyBcJiMzNDskb3V0XCYjMzQ7IHwgZ3JlcCAtcSBcJiMzNDttYXJrIDB4MS8weDFcJiMzNDsgXHUwMDI2XHUwMDI2IHJlc3VsdD0xXG4mIzQzO1xuJiM0MztcdHJldHVybiBcJiMzNDske3Jlc3VsdH1cJiMzNDtcbiYjNDM7fVxuJiM0MztcbiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuICNcbiB1c2FnZSgpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxNToxNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT40bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtYRlJNX1VTRVImIzM0OywKICAgICYjMzQ7WEZSTV9NSUdSQVRFJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt4ZnJtX3N0YXRlX2xvb2t1cF9leGFjdCYjMzQ7LAogICAgJiMzNDt4ZnJtX3N0YXRlX2xvb2t1cF9ieWFkZHImIzM0OywKICAgICYjMzQ7eGZybV91c2VyX3N0YXRlX2xvb2t1cCYjMzQ7LAogICAgJiMzNDt4ZnJtX2RvX21pZ3JhdGVfc3RhdGUmIzM0OywKICAgICYjMzQ7eGZybV9zdGF0ZV91cGRhdGUmIzM0OywKICAgICYjMzQ7eGZybV9zdGF0ZV9taWdyYXRlX2luc3RhbGwmIzM0OywKICAgICYjMzQ7eGZybV9nZXRfYWUmIzM0OywKICAgICYjMzQ7eGZybV9uZXdfYWUmIzM0OywKICAgICYjMzQ7eGZybV9hZGRfc2FfZXhwaXJlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBYRlJNIChJUHNlYykgc3RhdGUgbG9va3VwIGxvZ2ljIHRvIGFsbG93IGV4YWN0IG1hdGNoaW5nIG9mIG1hcmtzIGFuZCBtYXNrcyBkdXJpbmcgY29udHJvbCBwbGFuZSBvcGVyYXRpb25zIChHRVQsIERFTEVURSwgTUlHUkFURSkuIFRoaXMgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgbmV0bGluayBtZXNzYWdlcyBhbmQgYWZmZWN0cyBjb3JlIElQc2VjIGZ1bmN0aW9uYWxpdHkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDY4MzA1OTExZTVhYmQ2ZTU1ZGQ4MDJkMzA1MDcxMDlmY2EyNTNkNDIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1bCA2IDE1OjE1OjI0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3hmcm0veGZybV9taWdyYXRlX3N0YXRlLnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy94ZnJtL3hmcm1fbWlncmF0ZV9zdGF0ZS5yc3QKaW5kZXggOWQ1M2NiMjJiMDA3NTIuLjkwNWUzZjBjNGVlMDZmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcveGZybS94ZnJtX21pZ3JhdGVfc3RhdGUucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy94ZnJtL3hmcm1fbWlncmF0ZV9zdGF0ZS5yc3QKQEAgLTI3LDE1ICYjNDM7MjcsMTggQEAgU0EgSWRlbnRpZmljYXRpb24KID09PT09PT09PT09PT09PT09CiAKIFRoZSBzdHJ1Y3QgaXMgZGVmaW5lZCBpbiBgYGluY2x1ZGUvdWFwaS9saW51eC94ZnJtLmhgYC4gVGhlIFNBIGlzIGxvb2tlZAotdXAgdXNpbmcgYGB4ZnJtX3N0YXRlX2xvb2t1cCgpYGAgd2l0aCBgYGlkLnNwaWBgLAotYGBpZC5kYWRkcmBgLCBgYGlkLnByb3RvYGAsIGBgaWQuZmFtaWx5YGAsIGFuZAotYGBvbGRfbWFyay52ICZhbXA7IG9sZF9tYXJrLm1gYCBhcyB0aGUgbWFyayBrZXk6OgomIzQzO3VwIHVzaW5nIGBgeGZybV9zdGF0ZV9sb29rdXBfZXhhY3QoKWBgIHdpdGggYGBpZC5zcGlgYCwgYGBpZC5kYWRkcmBgLAomIzQzO2BgaWQucHJvdG9gYCwgYGBpZC5mYW1pbHlgYCwgYW5kIGFuIGV4YWN0IG1hdGNoIGFnYWluc3QgYGBvbGRfbWFyay52YGAKJiM0MzthbmQgYGBvbGRfbWFyay5tYGAuIFVubGlrZSB0aGUgZGF0YSBwYXRoLCB3aGljaCB1c2VzIGEgbWFza2VkCiYjNDM7Y29tcGFyaXNvbiwgdGhpcyByZXF1aXJlcyB0aGUgU0EmIzM5O3MgbWFyayBhbmQgbWFzayB0byBlcXVhbCBgYG9sZF9tYXJrYGAKJiM0MztleGFjdGx5LCBzbyBhIGJyb2FkLW1hc2sgU0EgaXMgbmV2ZXIgbWF0Y2hlZCB3aGVuIGEgbW9yZSBzcGVjaWZpYyBvbmUKJiM0Mzt3YXMgaW50ZW5kZWQuIElmIG5vIHN1Y2ggU0EgZXhpc3RzLCBgYC1FU1JDSGBgIGlzIHJldHVybmVkLjo6CiAKICAgICBzdHJ1Y3QgeGZybV91c2VyX21pZ3JhdGVfc3RhdGUgewogICAgICAgICBzdHJ1Y3QgeGZybV91c2Vyc2FfaWQgIGlkOyAgICAgICAvKiBzcGksIGRhZGRyLCBwcm90bywgZmFtaWx5ICovCiAgICAgICAgIHhmcm1fYWRkcmVzc190ICAgICAgICAgbmV3X2RhZGRyOwogICAgICAgICB4ZnJtX2FkZHJlc3NfdCAgICAgICAgIG5ld19zYWRkcjsKLSAgICAgICAgc3RydWN0IHhmcm1fbWFyayAgICAgICBvbGRfbWFyazsgLyogU0EgbG9va3VwOiBrZXkgPSB2ICZhbXA7IG0gKi8KJiM0MzsgICAgICAgIHN0cnVjdCB4ZnJtX21hcmsgICAgICAgb2xkX21hcms7IC8qIFNBIGxvb2t1cCBrZXkgKGV4YWN0IHYvbSBtYXRjaCkgKi8KICAgICAgICAgc3RydWN0IHhmcm1fc2VsZWN0b3IgICBuZXdfc2VsOyAgLyogbmV3IHNlbGVjdG9yIChzZWUgRmxhZ3MpICovCiAgICAgICAgIF9fdTMyICAgICAgICAgICAgICAgICAgbmV3X3JlcWlkOwogICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICAgIGZsYWdzOyAgICAvKiBYRlJNX01JR1JBVEVfU1RBVEVfKiAqLwpAQCAtNzIsOCAmIzQzOzc1LDggQEAgaW5oZXJpdHMgdGhlIHZhbHVlIGZyb20gdGhlIGV4aXN0aW5nIFNBIChvbWl0LXRvLWluaGVyaXQpLgogICAgICAtIERlc2NyaXB0aW9uCiAgICAqIC0gYGBYRlJNQV9NQVJLYGAKICAgICAgLSBNYXJrIG9uIHRoZSBtaWdyYXRlZCBTQSAoYGBzdHJ1Y3QgeGZybV9tYXJrYGApLiBBYnNlbnQgaW5oZXJpdHMKLSAgICAgICBgYG9sZF9tYXJrYGAuIFRvIHVzZSBubyBtYXJrIG9uIHRoZSBuZXcgU0EsIHNlbmQgYGBYRlJNQV9NQVJLYGAKLSAgICAgICB3aXRoIGBgezAsIDB9YGAuCiYjNDM7ICAgICAgIHRoZSBtYXJrIG9mIHRoZSBleGlzdGluZyBTQS4gVG8gdXNlIG5vIG1hcmsgb24gdGhlIG5ldyBTQSwgc2VuZAomIzQzOyAgICAgICBgYFhGUk1BX01BUktgYCB3aXRoIGBgezAsIDB9YGAuCiAgICAqIC0gYGBYRlJNQV9FTkNBUGBgCiAgICAgIC0gVURQIGVuY2Fwc3VsYXRpb24gdGVtcGxhdGU7IG9ubHkgYGBVRFBfRU5DQVBfRVNQSU5VRFBgYCBpcyBzdXBwb3J0ZWQuCiAgICAgICAgU2V0IGBgZW5jYXBfdHlwZT0wYGAgdG8gcmVtb3ZlIGVuY2FwLgpAQCAtMjU5LDggJiM0MzsyNjIsOSBAQCBBdHRyaWJ1dGVzIGluIHRoZSBub3RpZmljYXRpb24KIEVycm9yIEhhbmRsaW5nCiA9PT09PT09PT09PT09PQogCi1JZiB0aGUgdGFyZ2V0IFNBIHR1cGxlIChuZXcgZGFkZHIsIFNQSSwgcHJvdG8sIG5ldyBmYW1pbHkpIGlzIGFscmVhZHkKLW9jY3VwaWVkLCB0aGUgb3BlcmF0aW9uIHJldHVybnMgYGAtRUVYSVNUYGAgYmVmb3JlIHRoZSBtaWdyYXRpb24gYmVnaW5zLgomIzQzO0lmIHRoZSB0YXJnZXQgU0EgdHVwbGUgKG5ldyBkYWRkciwgU1BJLCBwcm90bywgbmV3IGZhbWlseSwgbWFyaykgaXMKJiM0MzthbHJlYWR5IG9jY3VwaWVkLCB0aGUgb3BlcmF0aW9uIHJldHVybnMgYGAtRUVYSVNUYGAgYmVmb3JlIHRoZSBtaWdyYXRpb24KJiM0MztiZWdpbnMuCiBUaGUgb2xkIFNBIHJlbWFpbnMgaW50YWN0IGFuZCB0aGUgb3BlcmF0aW9uIGlzIHNhZmUgdG8gcmV0cnkgYWZ0ZXIKIHJlc29sdmluZyB0aGUgY29uZmxpY3QuCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3hmcm0uaCBiL2luY2x1ZGUvbmV0L3hmcm0uaAppbmRleCA1MTlhMDE1NmEwNWNhYy4uZWJlNTE0Mzc2MjU0YTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3hmcm0uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC94ZnJtLmgKQEAgLTE3NDEsMTEgJiM0MzsxNzQxLDE0IEBAIHN0cnVjdCB4ZnJtX3N0YXRlICp4ZnJtX2lucHV0X3N0YXRlX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBtYXJrLAogCQkJCQkgICBjb25zdCB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsCiAJCQkJCSAgIF9fYmUzMiBzcGksIHU4IHByb3RvLAogCQkJCQkgICB1bnNpZ25lZCBzaG9ydCBmYW1pbHkpOwotc3RydWN0IHhmcm1fc3RhdGUgKnhmcm1fc3RhdGVfbG9va3VwX2J5YWRkcihzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBtYXJrLAomIzQzO3N0cnVjdCB4ZnJtX3N0YXRlICp4ZnJtX3N0YXRlX2xvb2t1cF9ieWFkZHIoc3RydWN0IG5ldCAqbmV0LCB1MzIgbWFyaywgdTMyIG1hc2ssIGJvb2wgZXhhY3QsCiAJCQkJCSAgICBjb25zdCB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsCiAJCQkJCSAgICBjb25zdCB4ZnJtX2FkZHJlc3NfdCAqc2FkZHIsCiAJCQkJCSAgICB1OCBwcm90bywKIAkJCQkJICAgIHVuc2lnbmVkIHNob3J0IGZhbWlseSk7CiYjNDM7c3RydWN0IHhmcm1fc3RhdGUgKnhmcm1fc3RhdGVfbG9va3VwX2V4YWN0KHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IHhmcm1fbWFyayAqbWFyaywKJiM0MzsJCQkJCSAgIGNvbnN0IHhmcm1fYWRkcmVzc190ICpkYWRkciwgX19iZTMyIHNwaSwKJiM0MzsJCQkJCSAgIHU4IHByb3RvLCB1bnNpZ25lZCBzaG9ydCBmYW1pbHkpOwogI2lmZGVmIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kKIHZvaWQgeGZybV90bXBsX3NvcnQoc3RydWN0IHhmcm1fdG1wbCAqKmRzdCwgc3RydWN0IHhmcm1fdG1wbCAqKnNyYywgaW50IG4sCiAJCSAgICB1bnNpZ25lZCBzaG9ydCBmYW1pbHkpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYveGZybTZfaW5wdXQuYyBiL25ldC9pcHY2L3hmcm02X2lucHV0LmMKaW5kZXggODlkMDQ0M2I1MzA3MzIuLjJkZDM0N2ZlY2U1MmNhIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni94ZnJtNl9pbnB1dC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L3hmcm02X2lucHV0LmMKQEAgLTI3Miw3ICYjNDM7MjcyLDcgQEAgaW50IHhmcm02X2lucHV0X2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgeGZybV9hZGRyZXNzX3QgKmRhZGRyLAogCQkJYnJlYWs7CiAJCX0KIAotCQl4ID0geGZybV9zdGF0ZV9sb29rdXBfYnlhZGRyKG5ldCwgc2tiLSZndDttYXJrLCBkc3QsIHNyYywgcHJvdG8sIEFGX0lORVQ2KTsKJiM0MzsJCXggPSB4ZnJtX3N0YXRlX2xvb2t1cF9ieWFkZHIobmV0LCBza2ItJmd0O21hcmssIDAsIGZhbHNlLCBkc3QsIHNyYywgcHJvdG8sIEFGX0lORVQ2KTsKIAkJaWYgKCF4KQogCQkJY29udGludWU7CiAKZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fc3RhdGUuYyBiL25ldC94ZnJtL3hmcm1fc3RhdGUuYwppbmRleCBjNThjZDAyNGUzYzY3NS4uMGIzZGM3Nzg5ZGQ3OTAgMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL3hmcm1fc3RhdGUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQveGZybS94ZnJtX3N0YXRlLmMKQEAgLTExNzIsMTEgJiM0MzsxMTcyLDIyIEBAIHN0YXRpYyBzdHJ1Y3QgeGZybV9zdGF0ZSAqX194ZnJtX3N0YXRlX2xvb2t1cF9hbGwoY29uc3Qgc3RydWN0IHhmcm1faGFzaF9zdGF0ZV9wCiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgeGZybV9zdGF0ZSAqX194ZnJtX3N0YXRlX2xvb2t1cChjb25zdCBzdHJ1Y3QgeGZybV9oYXNoX3N0YXRlX3B0cnMgKnN0YXRlX3B0cnMsCi0JCQkJCSAgICAgIHUzMiBtYXJrLAotCQkJCQkgICAgICBjb25zdCB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsCi0JCQkJCSAgICAgIF9fYmUzMiBzcGksIHU4IHByb3RvLAotCQkJCQkgICAgICB1bnNpZ25lZCBzaG9ydCBmYW1pbHkpCiYjNDM7LyogZXhhY3Q9ZmFsc2U6IGRhdGEtcGxhbmUgd2lsZGNhcmQgbWF0Y2ggYWdhaW5zdCB4JiMzOTtzIG1hc2suIGV4YWN0PXRydWU6CiYjNDM7ICogY29udHJvbC1wbGFuZSBpZGVudGl0eSBtYXRjaCwgbWFyayBhbmQgbWFzayBtdXN0IGJvdGggbWF0Y2ggZXhhY3RseS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgYm9vbCB4ZnJtX3N0YXRlX21hcmtfbWF0Y2hlcyhjb25zdCBzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgdTMyIG1hcmssIHUzMiBtYXNrLCBib29sIGV4YWN0KQomIzQzO3sKJiM0MzsJaWYgKGV4YWN0KQomIzQzOwkJcmV0dXJuIHgtJmd0O21hcmsudiA9PSBtYXJrICZhbXA7JmFtcDsgeC0mZ3Q7bWFyay5tID09IG1hc2s7CiYjNDM7CXJldHVybiAobWFyayAmYW1wOyB4LSZndDttYXJrLm0pID09IHgtJmd0O21hcmsudjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlICoKJiM0MztfX3hmcm1fc3RhdGVfbG9va3VwKGNvbnN0IHN0cnVjdCB4ZnJtX2hhc2hfc3RhdGVfcHRycyAqc3RhdGVfcHRycywKJiM0MzsJCSAgICB1MzIgbWFyaywgdTMyIG1hc2ssIGJvb2wgZXhhY3QsCiYjNDM7CQkgICAgY29uc3QgeGZybV9hZGRyZXNzX3QgKmRhZGRyLAomIzQzOwkJICAgIF9fYmUzMiBzcGksIHU4IHByb3RvLAomIzQzOwkJICAgIHVuc2lnbmVkIHNob3J0IGZhbWlseSkKIHsKIAl1bnNpZ25lZCBpbnQgaCA9IF9feGZybV9zcGlfaGFzaChkYWRkciwgc3BpLCBwcm90bywgZmFtaWx5LCBzdGF0ZV9wdHJzLSZndDtobWFzayk7CiAJc3RydWN0IHhmcm1fc3RhdGUgKng7CkBAIC0xMTg4LDcgJiM0MzsxMTk5LDcgQEAgc3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlICpfX3hmcm1fc3RhdGVfbG9va3VwKGNvbnN0IHN0cnVjdCB4ZnJtX2hhc2hfc3RhdGVfcHRycwogCQkgICAgIXhmcm1fYWRkcl9lcXVhbCgmYW1wO3gtJmd0O2lkLmRhZGRyLCBkYWRkciwgZmFtaWx5KSkKIAkJCWNvbnRpbnVlOwogCi0JCWlmICgobWFyayAmYW1wOyB4LSZndDttYXJrLm0pICE9IHgtJmd0O21hcmsudikKJiM0MzsJCWlmICgheGZybV9zdGF0ZV9tYXJrX21hdGNoZXMoeCwgbWFyaywgbWFzaywgZXhhY3QpKQogCQkJY29udGludWU7CiAJCWlmICgheGZybV9zdGF0ZV9ob2xkX3JjdSh4KSkKIAkJCWNvbnRpbnVlOwpAQCAtMTE5OCw2ICYjNDM7MTIwOSwxNyBAQCBzdGF0aWMgc3RydWN0IHhmcm1fc3RhdGUgKl9feGZybV9zdGF0ZV9sb29rdXAoY29uc3Qgc3RydWN0IHhmcm1faGFzaF9zdGF0ZV9wdHJzCiAJcmV0dXJuIE5VTEw7CiB9CiAKJiM0MztzdGF0aWMgc3RydWN0IHhmcm1fc3RhdGUgKgomIzQzO19feGZybV9zdGF0ZV9sb29rdXBfZXhhY3QoY29uc3Qgc3RydWN0IHhmcm1faGFzaF9zdGF0ZV9wdHJzICpzdGF0ZV9wdHJzLAomIzQzOwkJCSAgY29uc3Qgc3RydWN0IHhmcm1fbWFyayAqbWFyaywKJiM0MzsJCQkgIGNvbnN0IHhmcm1fYWRkcmVzc190ICpkYWRkciwKJiM0MzsJCQkgIF9fYmUzMiBzcGksIHU4IHByb3RvLAomIzQzOwkJCSAgdW5zaWduZWQgc2hvcnQgZmFtaWx5KQomIzQzO3sKJiM0MzsJcmV0dXJuIF9feGZybV9zdGF0ZV9sb29rdXAoc3RhdGVfcHRycywgbWFyay0mZ3Q7diwgbWFyay0mZ3Q7bSwgdHJ1ZSwKJiM0MzsJCQkJICAgZGFkZHIsIHNwaSwgcHJvdG8sIGZhbWlseSk7CiYjNDM7fQomIzQzOwogc3RydWN0IHhmcm1fc3RhdGUgKnhmcm1faW5wdXRfc3RhdGVfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgdTMyIG1hcmssCiAJCQkJCSAgIGNvbnN0IHhmcm1fYWRkcmVzc190ICpkYWRkciwKIAkJCQkJICAgX19iZTMyIHNwaSwgdTggcHJvdG8sCkBAIC0xMjI4LDcgJiM0MzsxMjUwLDcgQEAgc3RydWN0IHhmcm1fc3RhdGUgKnhmcm1faW5wdXRfc3RhdGVfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgdTMyIG1hcmssCiAKIAl4ZnJtX2hhc2hfcHRyc19nZXQobmV0LCAmYW1wO3N0YXRlX3B0cnMpOwogCi0JeCA9IF9feGZybV9zdGF0ZV9sb29rdXAoJmFtcDtzdGF0ZV9wdHJzLCBtYXJrLCBkYWRkciwgc3BpLCBwcm90bywgZmFtaWx5KTsKJiM0MzsJeCA9IF9feGZybV9zdGF0ZV9sb29rdXAoJmFtcDtzdGF0ZV9wdHJzLCBtYXJrLCAwLCBmYWxzZSwgZGFkZHIsIHNwaSwgcHJvdG8sIGZhbWlseSk7CiAJaWYgKHgpIHsKIAkJc3Bpbl9sb2NrKCZhbXA7bmV0LSZndDt4ZnJtLnhmcm1fc3RhdGVfbG9jayk7CiAJCWlmICh4LSZndDtrbS5zdGF0ZSAhPSBYRlJNX1NUQVRFX1ZBTElEKSB7CkBAIC0xMjUyLDExICYjNDM7MTI3NCwxMiBAQCBzdHJ1Y3QgeGZybV9zdGF0ZSAqeGZybV9pbnB1dF9zdGF0ZV9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCB1MzIgbWFyaywKIH0KIEVYUE9SVF9TWU1CT0woeGZybV9pbnB1dF9zdGF0ZV9sb29rdXApOwogCi1zdGF0aWMgc3RydWN0IHhmcm1fc3RhdGUgKl9feGZybV9zdGF0ZV9sb29rdXBfYnlhZGRyKGNvbnN0IHN0cnVjdCB4ZnJtX2hhc2hfc3RhdGVfcHRycyAqc3RhdGVfcHRycywKLQkJCQkJCSAgICAgdTMyIG1hcmssCi0JCQkJCQkgICAgIGNvbnN0IHhmcm1fYWRkcmVzc190ICpkYWRkciwKLQkJCQkJCSAgICAgY29uc3QgeGZybV9hZGRyZXNzX3QgKnNhZGRyLAotCQkJCQkJICAgICB1OCBwcm90bywgdW5zaWduZWQgc2hvcnQgZmFtaWx5KQomIzQzO3N0YXRpYyBzdHJ1Y3QgeGZybV9zdGF0ZSAqCiYjNDM7X194ZnJtX3N0YXRlX2xvb2t1cF9ieWFkZHIoY29uc3Qgc3RydWN0IHhmcm1faGFzaF9zdGF0ZV9wdHJzICpzdGF0ZV9wdHJzLAomIzQzOwkJCSAgIHUzMiBtYXJrLCB1MzIgbWFzaywgYm9vbCBleGFjdCwKJiM0MzsJCQkgICBjb25zdCB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsCiYjNDM7CQkJICAgY29uc3QgeGZybV9hZGRyZXNzX3QgKnNhZGRyLAomIzQzOwkJCSAgIHU4IHByb3RvLCB1bnNpZ25lZCBzaG9ydCBmYW1pbHkpCiB7CiAJdW5zaWduZWQgaW50IGggPSBfX3hmcm1fc3JjX2hhc2goZGFkZHIsIHNhZGRyLCBmYW1pbHksIHN0YXRlX3B0cnMtJmd0O2htYXNrKTsKIAlzdHJ1Y3QgeGZybV9zdGF0ZSAqeDsKQEAgLTEyNjgsNyAmIzQzOzEyOTEsNyBAQCBzdGF0aWMgc3RydWN0IHhmcm1fc3RhdGUgKl9feGZybV9zdGF0ZV9sb29rdXBfYnlhZGRyKGNvbnN0IHN0cnVjdCB4ZnJtX2hhc2hfc3RhdAogCQkgICAgIXhmcm1fYWRkcl9lcXVhbCgmYW1wO3gtJmd0O3Byb3BzLnNhZGRyLCBzYWRkciwgZmFtaWx5KSkKIAkJCWNvbnRpbnVlOwogCi0JCWlmICgobWFyayAmYW1wOyB4LSZndDttYXJrLm0pICE9IHgtJmd0O21hcmsudikKJiM0MzsJCWlmICgheGZybV9zdGF0ZV9tYXJrX21hdGNoZXMoeCwgbWFyaywgbWFzaywgZXhhY3QpKQogCQkJY29udGludWU7CiAJCWlmICgheGZybV9zdGF0ZV9ob2xkX3JjdSh4KSkKIAkJCWNvbnRpbnVlOwpAQCAtMTI4OCwxMCAmIzQzOzEzMTEsMzEgQEAgX194ZnJtX3N0YXRlX2xvY2F0ZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgaW50IHVzZV9zcGksIGludCBmYW1pbHkpCiAJeGZybV9oYXNoX3B0cnNfZ2V0KG5ldCwgJmFtcDtzdGF0ZV9wdHJzKTsKIAogCWlmICh1c2Vfc3BpKQotCQlyZXR1cm4gX194ZnJtX3N0YXRlX2xvb2t1cCgmYW1wO3N0YXRlX3B0cnMsIG1hcmssICZhbXA7eC0mZ3Q7aWQuZGFkZHIsCiYjNDM7CQlyZXR1cm4gX194ZnJtX3N0YXRlX2xvb2t1cCgmYW1wO3N0YXRlX3B0cnMsIG1hcmssIDAsIGZhbHNlLCAmYW1wO3gtJmd0O2lkLmRhZGRyLAogCQkJCQkgICB4LSZndDtpZC5zcGksIHgtJmd0O2lkLnByb3RvLCBmYW1pbHkpOwogCWVsc2UKLQkJcmV0dXJuIF9feGZybV9zdGF0ZV9sb29rdXBfYnlhZGRyKCZhbXA7c3RhdGVfcHRycywgbWFyaywKJiM0MzsJCXJldHVybiBfX3hmcm1fc3RhdGVfbG9va3VwX2J5YWRkcigmYW1wO3N0YXRlX3B0cnMsIG1hcmssIDAsIGZhbHNlLAomIzQzOwkJCQkJCSAgJmFtcDt4LSZndDtpZC5kYWRkciwKJiM0MzsJCQkJCQkgICZhbXA7eC0mZ3Q7cHJvcHMuc2FkZHIsCiYjNDM7CQkJCQkJICB4LSZndDtpZC5wcm90bywgZmFtaWx5KTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogVXNlZCBieSB4ZnJtX3N0YXRlX3VwZGF0ZSgpIG9ubHk7IHhmcm1fc3RhdGVfYWRkKCkmIzM5O3MgZHVwIGNoZWNrIGtlZXBzCiYjNDM7ICogdXNpbmcgdGhlIHdpbGRjYXJkIF9feGZybV9zdGF0ZV9sb2NhdGUoKSBhYm92ZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCB4ZnJtX3N0YXRlICoKJiM0MztfX3hmcm1fc3RhdGVfbG9jYXRlX2V4YWN0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBpbnQgdXNlX3NwaSwgaW50IGZhbWlseSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB4ZnJtX2hhc2hfc3RhdGVfcHRycyBzdGF0ZV9wdHJzOwomIzQzOwlzdHJ1Y3QgbmV0ICpuZXQgPSB4c19uZXQoeCk7CiYjNDM7CiYjNDM7CXhmcm1faGFzaF9wdHJzX2dldChuZXQsICZhbXA7c3RhdGVfcHRycyk7CiYjNDM7CiYjNDM7CWlmICh1c2Vfc3BpKQomIzQzOwkJcmV0dXJuIF9feGZybV9zdGF0ZV9sb29rdXBfZXhhY3QoJmFtcDtzdGF0ZV9wdHJzLCAmYW1wO3gtJmd0O21hcmssICZhbXA7eC0mZ3Q7aWQuZGFkZHIsCiYjNDM7CQkJCQkJIHgtJmd0O2lkLnNwaSwgeC0mZ3Q7aWQucHJvdG8sIGZhbWlseSk7CiYjNDM7CWVsc2UKJiM0MzsJCXJldHVybiBfX3hmcm1fc3RhdGVfbG9va3VwX2J5YWRkcigmYW1wO3N0YXRlX3B0cnMsIHgtJmd0O21hcmsudiwgeC0mZ3Q7bWFyay5tLCB0cnVlLAogCQkJCQkJICAmYW1wO3gtJmd0O2lkLmRhZGRyLAogCQkJCQkJICAmYW1wO3gtJmd0O3Byb3BzLnNhZGRyLAogCQkJCQkJICB4LSZndDtpZC5wcm90bywgZmFtaWx5KTsKQEAgLTIxNzcsMTAgJiM0MzsyMjIxLDEyIEBAIGludCB4ZnJtX3N0YXRlX21pZ3JhdGVfaW5zdGFsbChjb25zdCBzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwKIAkJCSAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiB7CiAJaWYgKG0tJmd0O25ld19mYW1pbHkgPT0gbS0mZ3Q7b2xkX2ZhbWlseSAmYW1wOyZhbXA7Ci0JICAgIHhmcm1fYWRkcl9lcXVhbCgmYW1wO3gtJmd0O2lkLmRhZGRyLCAmYW1wO20tJmd0O25ld19kYWRkciwgbS0mZ3Q7bmV3X2ZhbWlseSkpIHsKJiM0MzsJICAgIHhmcm1fYWRkcl9lcXVhbCgmYW1wO3gtJmd0O2lkLmRhZGRyLCAmYW1wO20tJmd0O25ld19kYWRkciwgbS0mZ3Q7bmV3X2ZhbWlseSkgJmFtcDsmYW1wOwomIzQzOwkgICAgeGMtJmd0O21hcmsudiA9PSB4LSZndDttYXJrLnYgJmFtcDsmYW1wOyB4Yy0mZ3Q7bWFyay5tID09IHgtJmd0O21hcmsubSkgewogCQkvKgotCQkgKiBDYXJlIGlzIG5lZWRlZCB3aGVuIHRoZSBkZXN0aW5hdGlvbiBhZGRyZXNzIG9mIHRoZSBzdGF0ZSBpcwotCQkgKiB0byBiZSB1cGRhdGVkIGFzIGl0IGlzIGEgcGFydCBvZiB0cmlwbGV0LgomIzQzOwkJICogQ2FyZSBpcyBuZWVkZWQgd2hlbiB0aGUgZGVzdGluYXRpb24gYWRkcmVzcyBvciBtYXJrIG9mIHRoZQomIzQzOwkJICogc3RhdGUgaXMgdG8gYmUgdXBkYXRlZCwgYXMgdGhleSBhcmUgcGFydCBvZiB0aGUgbG9va3VwCiYjNDM7CQkgKiB0cmlwbGV0LgogCQkgKi8KIAkJeGZybV9zdGF0ZV9pbnNlcnQoeGMpOwogCX0gZWxzZSB7CkBAIC0yMjI5LDcgJiM0MzsyMjc1LDcgQEAgaW50IHhmcm1fc3RhdGVfdXBkYXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4KQogCXRvX3B1dCA9IE5VTEw7CiAKIAlzcGluX2xvY2tfYmgoJmFtcDtuZXQtJmd0O3hmcm0ueGZybV9zdGF0ZV9sb2NrKTsKLQl4MSA9IF9feGZybV9zdGF0ZV9sb2NhdGUoeCwgdXNlX3NwaSwgeC0mZ3Q7cHJvcHMuZmFtaWx5KTsKJiM0MzsJeDEgPSBfX3hmcm1fc3RhdGVfbG9jYXRlX2V4YWN0KHgsIHVzZV9zcGksIHgtJmd0O3Byb3BzLmZhbWlseSk7CiAKIAllcnIgPSAtRVNSQ0g7CiAJaWYgKCF4MSkKQEAgLTIzNzQsMTQgJiM0MzsyNDIwLDE0IEBAIHhmcm1fc3RhdGVfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgdTMyIG1hcmssIGNvbnN0IHhmcm1fYWRkcmVzc190ICpkYWRkciwgX19iZTMyCiAJcmN1X3JlYWRfbG9jaygpOwogCXhmcm1faGFzaF9wdHJzX2dldChuZXQsICZhbXA7c3RhdGVfcHRycyk7CiAKLQl4ID0gX194ZnJtX3N0YXRlX2xvb2t1cCgmYW1wO3N0YXRlX3B0cnMsIG1hcmssIGRhZGRyLCBzcGksIHByb3RvLCBmYW1pbHkpOwomIzQzOwl4ID0gX194ZnJtX3N0YXRlX2xvb2t1cCgmYW1wO3N0YXRlX3B0cnMsIG1hcmssIDAsIGZhbHNlLCBkYWRkciwgc3BpLCBwcm90bywgZmFtaWx5KTsKIAlyY3VfcmVhZF91bmxvY2soKTsKIAlyZXR1cm4geDsKIH0KIEVYUE9SVF9TWU1CT0woeGZybV9zdGF0ZV9sb29rdXApOwogCiBzdHJ1Y3QgeGZybV9zdGF0ZSAqCi14ZnJtX3N0YXRlX2xvb2t1cF9ieWFkZHIoc3RydWN0IG5ldCAqbmV0LCB1MzIgbWFyaywKJiM0Mzt4ZnJtX3N0YXRlX2xvb2t1cF9ieWFkZHIoc3RydWN0IG5ldCAqbmV0LCB1MzIgbWFyaywgdTMyIG1hc2ssIGJvb2wgZXhhY3QsCiAJCQkgY29uc3QgeGZybV9hZGRyZXNzX3QgKmRhZGRyLCBjb25zdCB4ZnJtX2FkZHJlc3NfdCAqc2FkZHIsCiAJCQkgdTggcHJvdG8sIHVuc2lnbmVkIHNob3J0IGZhbWlseSkKIHsKQEAgLTIzOTIsMTIgJiM0MzsyNDM4LDI5IEBAIHhmcm1fc3RhdGVfbG9va3VwX2J5YWRkcihzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBtYXJrLAogCiAJeGZybV9oYXNoX3B0cnNfZ2V0KG5ldCwgJmFtcDtzdGF0ZV9wdHJzKTsKIAotCXggPSBfX3hmcm1fc3RhdGVfbG9va3VwX2J5YWRkcigmYW1wO3N0YXRlX3B0cnMsIG1hcmssIGRhZGRyLCBzYWRkciwgcHJvdG8sIGZhbWlseSk7CiYjNDM7CXggPSBfX3hmcm1fc3RhdGVfbG9va3VwX2J5YWRkcigmYW1wO3N0YXRlX3B0cnMsIG1hcmssIG1hc2ssIGV4YWN0LCBkYWRkciwgc2FkZHIsIHByb3RvLCBmYW1pbHkpOwogCXJjdV9yZWFkX3VubG9jaygpOwogCXJldHVybiB4OwogfQogRVhQT1JUX1NZTUJPTCh4ZnJtX3N0YXRlX2xvb2t1cF9ieWFkZHIpOwogCiYjNDM7c3RydWN0IHhmcm1fc3RhdGUgKgomIzQzO3hmcm1fc3RhdGVfbG9va3VwX2V4YWN0KHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IHhmcm1fbWFyayAqbWFyaywKJiM0MzsJCQljb25zdCB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsIF9fYmUzMiBzcGksCiYjNDM7CQkJdTggcHJvdG8sIHVuc2lnbmVkIHNob3J0IGZhbWlseSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB4ZnJtX2hhc2hfc3RhdGVfcHRycyBzdGF0ZV9wdHJzOwomIzQzOwlzdHJ1Y3QgeGZybV9zdGF0ZSAqeDsKJiM0MzsKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwl4ZnJtX2hhc2hfcHRyc19nZXQobmV0LCAmYW1wO3N0YXRlX3B0cnMpOwomIzQzOwomIzQzOwl4ID0gX194ZnJtX3N0YXRlX2xvb2t1cF9leGFjdCgmYW1wO3N0YXRlX3B0cnMsIG1hcmssIGRhZGRyLCBzcGksIHByb3RvLCBmYW1pbHkpOwomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsJcmV0dXJuIHg7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0woeGZybV9zdGF0ZV9sb29rdXBfZXhhY3QpOwomIzQzOwogc3RydWN0IHhmcm1fc3RhdGUgKgogeGZybV9maW5kX2FjcShzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCB4ZnJtX21hcmsgKm1hcmssIHU4IG1vZGUsIHUzMiByZXFpZCwKIAkgICAgICB1MzIgaWZfaWQsIHUzMiBwY3B1X251bSwgdTggcHJvdG8sIGNvbnN0IHhmcm1fYWRkcmVzc190ICpkYWRkciwKQEAgLTMzMDYsNyAmIzQzOzMzNjksNyBAQCBpbnQgeGZybV9pbml0X3N0YXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCWVyciA9IHhmcm1faW5pdF9yZXBsYXkoeCwgTlVMTCk7CiYjNDM7CWVyciA9IHhmcm1faW5pdF9yZXBsYXkoeCwgZXh0YWNrKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3VzZXIuYyBiL25ldC94ZnJtL3hmcm1fdXNlci5jCmluZGV4IDYzODQ3OTVlZTZiMjY5Li5hMjMxN2U2ZTY4MDJkZCAxMDA2NDQKLS0tIGEvbmV0L3hmcm0veGZybV91c2VyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hmcm0veGZybV91c2VyLmMKQEAgLTEwODksMTEgJiM0MzsxMDg5LDEyIEBAIHN0YXRpYyBzdHJ1Y3QgeGZybV9zdGF0ZSAqeGZybV91c2VyX3N0YXRlX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsCiAJc3RydWN0IHhmcm1fc3RhdGUgKnggPSBOVUxMOwogCXN0cnVjdCB4ZnJtX21hcmsgbTsKIAlpbnQgZXJyOwotCXUzMiBtYXJrID0geGZybV9tYXJrX2dldChhdHRycywgJmFtcDttKTsKJiM0MzsKJiM0MzsJeGZybV9tYXJrX2dldChhdHRycywgJmFtcDttKTsKIAogCWlmICh4ZnJtX2lkX3Byb3RvX21hdGNoKHAtJmd0O3Byb3RvLCBJUFNFQ19QUk9UT19BTlkpKSB7CiAJCWVyciA9IC1FU1JDSDsKLQkJeCA9IHhmcm1fc3RhdGVfbG9va3VwKG5ldCwgbWFyaywgJmFtcDtwLSZndDtkYWRkciwgcC0mZ3Q7c3BpLCBwLSZndDtwcm90bywgcC0mZ3Q7ZmFtaWx5KTsKJiM0MzsJCXggPSB4ZnJtX3N0YXRlX2xvb2t1cF9leGFjdChuZXQsICZhbXA7bSwgJmFtcDtwLSZndDtkYWRkciwgcC0mZ3Q7c3BpLCBwLSZndDtwcm90bywgcC0mZ3Q7ZmFtaWx5KTsKIAl9IGVsc2UgewogCQl4ZnJtX2FkZHJlc3NfdCAqc2FkZHIgPSBOVUxMOwogCkBAIC0xMTA0LDcgJiM0MzsxMTA1LDcgQEAgc3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlICp4ZnJtX3VzZXJfc3RhdGVfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwKIAkJfQogCiAJCWVyciA9IC1FU1JDSDsKLQkJeCA9IHhmcm1fc3RhdGVfbG9va3VwX2J5YWRkcihuZXQsIG1hcmssCiYjNDM7CQl4ID0geGZybV9zdGF0ZV9sb29rdXBfYnlhZGRyKG5ldCwgbS52LCBtLm0sIHRydWUsCiAJCQkJCSAgICAgJmFtcDtwLSZndDtkYWRkciwgc2FkZHIsCiAJCQkJCSAgICAgcC0mZ3Q7cHJvdG8sIHAtJmd0O2ZhbWlseSk7CiAJfQpAQCAtMjc4OCwxNCAmIzQzOzI3ODksMTMgQEAgc3RhdGljIGludCB4ZnJtX2dldF9hZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKIAlzdHJ1Y3Qgc2tfYnVmZiAqcl9za2I7CiAJaW50IGVycjsKIAlzdHJ1Y3Qga21fZXZlbnQgYzsKLQl1MzIgbWFyazsKIAlzdHJ1Y3QgeGZybV9tYXJrIG07CiAJc3RydWN0IHhmcm1fYWV2ZW50X2lkICpwID0gbmxtc2dfZGF0YShubGgpOwogCXN0cnVjdCB4ZnJtX3VzZXJzYV9pZCAqaWQgPSAmYW1wO3AtJmd0O3NhX2lkOwogCi0JbWFyayA9IHhmcm1fbWFya19nZXQoYXR0cnMsICZhbXA7bSk7CiYjNDM7CXhmcm1fbWFya19nZXQoYXR0cnMsICZhbXA7bSk7CiAKLQl4ID0geGZybV9zdGF0ZV9sb29rdXAobmV0LCBtYXJrLCAmYW1wO2lkLSZndDtkYWRkciwgaWQtJmd0O3NwaSwgaWQtJmd0O3Byb3RvLCBpZC0mZ3Q7ZmFtaWx5KTsKJiM0MzsJeCA9IHhmcm1fc3RhdGVfbG9va3VwX2V4YWN0KG5ldCwgJmFtcDttLCAmYW1wO2lkLSZndDtkYWRkciwgaWQtJmd0O3NwaSwgaWQtJmd0O3Byb3RvLCBpZC0mZ3Q7ZmFtaWx5KTsKIAlpZiAoeCA9PSBOVUxMKQogCQlyZXR1cm4gLUVTUkNIOwogCkBAIC0yODM2LDcgJiM0MzsyODM2LDYgQEAgc3RhdGljIGludCB4ZnJtX25ld19hZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKIAlzdHJ1Y3QgeGZybV9zdGF0ZSAqeDsKIAlzdHJ1Y3Qga21fZXZlbnQgYzsKIAlpbnQgZXJyID0gLUVJTlZBTDsKLQl1MzIgbWFyayA9IDA7CiAJc3RydWN0IHhmcm1fbWFyayBtOwogCXN0cnVjdCB4ZnJtX2FldmVudF9pZCAqcCA9IG5sbXNnX2RhdGEobmxoKTsKIAlzdHJ1Y3QgbmxhdHRyICpycCA9IGF0dHJzW1hGUk1BX1JFUExBWV9WQUxdOwpAQCAtMjg1Niw5ICYjNDM7Mjg1NSwxMCBAQCBzdGF0aWMgaW50IHhmcm1fbmV3X2FlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLAogCQlyZXR1cm4gZXJyOwogCX0KIAotCW1hcmsgPSB4ZnJtX21hcmtfZ2V0KGF0dHJzLCAmYW1wO20pOwomIzQzOwl4ZnJtX21hcmtfZ2V0KGF0dHJzLCAmYW1wO20pOwogCi0JeCA9IHhmcm1fc3RhdGVfbG9va3VwKG5ldCwgbWFyaywgJmFtcDtwLSZndDtzYV9pZC5kYWRkciwgcC0mZ3Q7c2FfaWQuc3BpLCBwLSZndDtzYV9pZC5wcm90bywgcC0mZ3Q7c2FfaWQuZmFtaWx5KTsKJiM0MzsJeCA9IHhmcm1fc3RhdGVfbG9va3VwX2V4YWN0KG5ldCwgJmFtcDttLCAmYW1wO3AtJmd0O3NhX2lkLmRhZGRyLCBwLSZndDtzYV9pZC5zcGksCiYjNDM7CQkJCSAgICBwLSZndDtzYV9pZC5wcm90bywgcC0mZ3Q7c2FfaWQuZmFtaWx5KTsKIAlpZiAoeCA9PSBOVUxMKQogCQlyZXR1cm4gLUVTUkNIOwogCkBAIC0yOTkyLDkgJiM0MzsyOTkyLDEwIEBAIHN0YXRpYyBpbnQgeGZybV9hZGRfc2FfZXhwaXJlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLAogCXN0cnVjdCB4ZnJtX3VzZXJfZXhwaXJlICp1ZSA9IG5sbXNnX2RhdGEobmxoKTsKIAlzdHJ1Y3QgeGZybV91c2Vyc2FfaW5mbyAqcCA9ICZhbXA7dWUtJmd0O3N0YXRlOwogCXN0cnVjdCB4ZnJtX21hcmsgbTsKLQl1MzIgbWFyayA9IHhmcm1fbWFya19nZXQoYXR0cnMsICZhbXA7bSk7CiAKLQl4ID0geGZybV9zdGF0ZV9sb29rdXAobmV0LCBtYXJrLCAmYW1wO3AtJmd0O2lkLmRhZGRyLCBwLSZndDtpZC5zcGksIHAtJmd0O2lkLnByb3RvLCBwLSZndDtmYW1pbHkpOwomIzQzOwl4ZnJtX21hcmtfZ2V0KGF0dHJzLCAmYW1wO20pOwomIzQzOwomIzQzOwl4ID0geGZybV9zdGF0ZV9sb29rdXBfZXhhY3QobmV0LCAmYW1wO20sICZhbXA7cC0mZ3Q7aWQuZGFkZHIsIHAtJmd0O2lkLnNwaSwgcC0mZ3Q7aWQucHJvdG8sIHAtJmd0O2ZhbWlseSk7CiAKIAllcnIgPSAtRU5PRU5UOwogCWlmICh4ID09IE5VTEwpCkBAIC0zMzYxLDkgJiM0MzszMzYyLDkgQEAgc3RhdGljIGludCB4ZnJtX2RvX21pZ3JhdGVfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsCiAKIAljb3B5X2Zyb21fdXNlcl9taWdyYXRlX3N0YXRlKCZhbXA7bSwgdW0pOwogCi0JeCA9IHhmcm1fc3RhdGVfbG9va3VwKG5ldCwgbS5vbGRfbWFyay52ICZhbXA7IG0ub2xkX21hcmsubSwKLQkJCSAgICAgICZhbXA7dW0tJmd0O2lkLmRhZGRyLCB1bS0mZ3Q7aWQuc3BpLAotCQkJICAgICAgdW0tJmd0O2lkLnByb3RvLCB1bS0mZ3Q7aWQuZmFtaWx5KTsKJiM0MzsJeCA9IHhmcm1fc3RhdGVfbG9va3VwX2V4YWN0KG5ldCwgJmFtcDttLm9sZF9tYXJrLAomIzQzOwkJCQkgICAgJmFtcDt1bS0mZ3Q7aWQuZGFkZHIsIHVtLSZndDtpZC5zcGksCiYjNDM7CQkJCSAgICB1bS0mZ3Q7aWQucHJvdG8sIHVtLSZndDtpZC5mYW1pbHkpOwogCWlmICgheCkgewogCQlOTF9TRVRfRVJSX01TRyhleHRhY2ssICYjMzQ7Q2FuIG5vdCBmaW5kIHN0YXRlJiMzNDspOwogCQlyZXR1cm4gLUVTUkNIOwpAQCAtMzQzNCwxOCAmIzQzOzM0MzUsMjMgQEAgc3RhdGljIGludCB4ZnJtX2RvX21pZ3JhdGVfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsCiAJCQkJCQkgICAgICAgeC0mZ3Q7bmF0X2tlZXBhbGl2ZV9pbnRlcnZhbCk7CiAKIAlpZiAobS5uZXdfZmFtaWx5ICE9IHVtLSZndDtpZC5mYW1pbHkgfHwKLQkgICAgIXhmcm1fYWRkcl9lcXVhbCgmYW1wO20ubmV3X2RhZGRyLCAmYW1wO3VtLSZndDtpZC5kYWRkciwgdW0tJmd0O2lkLmZhbWlseSkpIHsKJiM0MzsJICAgICF4ZnJtX2FkZHJfZXF1YWwoJmFtcDttLm5ld19kYWRkciwgJmFtcDt1bS0mZ3Q7aWQuZGFkZHIsIHVtLSZndDtpZC5mYW1pbHkpIHx8CiYjNDM7CSAgICAobS5uZXdfbWFyayAmYW1wOyZhbXA7IChtLm5ld19tYXJrLSZndDt2ICE9IHgtJmd0O21hcmsudiB8fAomIzQzOwkJCSAgIG0ubmV3X21hcmstJmd0O20gIT0geC0mZ3Q7bWFyay5tKSkpIHsKIAkJdTMyIG5ld19tYXJrX2tleSA9IG0ubmV3X21hcmsgPyBtLm5ld19tYXJrLSZndDt2ICZhbXA7IG0ubmV3X21hcmstJmd0O20gOgotCQkJCQkJbS5vbGRfbWFyay52ICZhbXA7IG0ub2xkX21hcmsubTsKJiM0MzsJCQkJCQl4LSZndDttYXJrLnYgJmFtcDsgeC0mZ3Q7bWFyay5tOwogCQlzdHJ1Y3QgeGZybV9zdGF0ZSAqeF9uZXc7CiAKIAkJeF9uZXcgPSB4ZnJtX3N0YXRlX2xvb2t1cChuZXQsIG5ld19tYXJrX2tleSwgJmFtcDttLm5ld19kYWRkciwKIAkJCQkJICB1bS0mZ3Q7aWQuc3BpLCB1bS0mZ3Q7aWQucHJvdG8sIG0ubmV3X2ZhbWlseSk7CiAJCWlmICh4X25ldykgewogCQkJeGZybV9zdGF0ZV9wdXQoeF9uZXcpOwotCQkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLCAmIzM0O05ldyBTQSB0dXBsZSBhbHJlYWR5IG9jY3VwaWVkJiMzNDspOwotCQkJZXJyID0gLUVFWElTVDsKLQkJCWdvdG8gb3V0OwomIzQzOwkJCWlmICh4X25ldyAhPSB4KSB7CiYjNDM7CQkJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywgJiMzNDtOZXcgU0EgdHVwbGUgYWxyZWFkeSBvY2N1cGllZCYjMzQ7KTsKJiM0MzsJCQkJZXJyID0gLUVFWElTVDsKJiM0MzsJCQkJZ290byBvdXQ7CiYjNDM7CQkJfQomIzQzOwkJCS8qIHNlbGYtbWF0Y2ggdmlhIHdpZGUgbWFyayBtYXNrOyBub3QgYSBjb2xsaXNpb24gKi8KIAkJfQogCX0KIApAQCAtMzQ2Nyw2ICYjNDM7MzQ3Myw3IEBAIHN0YXRpYyBpbnQgeGZybV9kb19taWdyYXRlX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLAogCV9feGZybV9zdGF0ZV9kZWxldGUoeCk7CiAJc3Bpbl91bmxvY2tfYmgoJmFtcDt4LSZndDtsb2NrKTsKIAomIzQzOwl4ZnJtX3N0YXRlX2hvbGQoeGMpOwogCWVyciA9IHhmcm1fc3RhdGVfbWlncmF0ZV9pbnN0YWxsKHgsIHhjLCAmYW1wO20sIGV4dGFjayk7CiAJaWYgKGVyciAmbHQ7IDApIHsKIAkJLyoKQEAgLTM0NzQsNiAmIzQzOzM0ODEsNyBAQCBzdGF0aWMgaW50IHhmcm1fZG9fbWlncmF0ZV9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKIAkJICogZnJlZSB1bmRlciB4ZnJtX2NmZ19tdXRleC4gQm90aCBTQXMgYXJlIGdvbmUgaWYgaXQgZG9lczsKIAkJICogcmVzdG9yaW5nIHggd291bGQgcmlzayBTTi9JViByZXVzZS4KIAkJICovCiYjNDM7CQl4ZnJtX3N0YXRlX3B1dCh4Yyk7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtMzQ5MiwxMCAmIzQzOzM1MDAsMTMgQEAgc3RhdGljIGludCB4ZnJtX2RvX21pZ3JhdGVfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsCiAJCWVyciA9IDA7CiAJfQogCiYjNDM7CXhmcm1fc3RhdGVfcHV0KHhjKTsKIG91dDoKIAl4ZnJtX3N0YXRlX3B1dCh4KTsKIAlyZXR1cm4gZXJyOwogb3V0X3hjOgomIzQzOwlpZiAobS54dW8pCiYjNDM7CQl4ZnJtX2Rldl9zdGF0ZV9kZWxldGUoeGMpOwogCXhjLSZndDtrbS5zdGF0ZSA9IFhGUk1fU1RBVEVfREVBRDsKIAl4ZnJtX3N0YXRlX3B1dCh4Yyk7CiAJeGZybV9zdGF0ZV9wdXQoeCk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQveGZybV9zdGF0ZS5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC94ZnJtX3N0YXRlLnNoCmluZGV4IGY2YzU0YTY0OTZkNzE0Li5mMjAyMDczNzI2YTlmNCAxMDA3NTUKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3hmcm1fc3RhdGUuc2gKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3hmcm1fc3RhdGUuc2gKQEAgLTQyLDcgJiM0Mzs0MiwxMSBAQCB0ZXN0cz0mIzM0OwogCW10dV9pcHY0X3IyCQkJSVB2NCBNVFUgZXhjZWVkZWQgZnJvbSBFU1Agcm91dGVyIHIyCiAJbXR1X2lwdjZfcjIJCQlJUHY2IE1UVSBleGNlZWRlZCBmcm9tIEVTUCByb3V0ZXIgcjIKIAltdHVfaXB2NF9yMwkJCUlQdjQgTVRVIGV4Y2VlZGVkIGZyb20gcm91dGVyIHIzCi0JbXR1X2lwdjZfcjMJCQlJUHY2IE1UVSBleGNlZWRlZCBmcm9tIHJvdXRlciByMyYjMzQ7CiYjNDM7CW10dV9pcHY2X3IzCQkJSVB2NiBNVFUgZXhjZWVkZWQgZnJvbSByb3V0ZXIgcjMKJiM0MzsJbWFya193aWxkY2FyZF9zaGFkb3cJCW1hcms6IHdpbGRjYXJkIFNBIGluIGJ5LXNwaSBzdGF0ZSBnZXQgbG9va3VwCiYjNDM7CW1hcmtfd2lsZGNhcmRfZGVsZXRlCQltYXJrOiB3aWxkY2FyZCBTQSBpbiBieS1zcGkgc3RhdGUgZGVsZXRlCiYjNDM7CW1hcmtfd2lsZGNhcmRfZ2V0X2FkZHIJCW1hcms6IHdpbGRjYXJkIFNBIGluIGJ5LWFkZHJlc3MgZ2V0IGxvb2t1cAomIzQzOwltYXJrX3dpbGRjYXJkX2RlbGV0ZV9hZGRyCW1hcms6IHdpbGRjYXJkIFNBIGluIGJ5LWFkZHJlc3MgZGVsZXRlJiMzNDsKIAogcHJlZml4ND0mIzM0OzEwLjEmIzM0OwogcHJlZml4Nj0mIzM0O2ZjMDAmIzM0OwpAQCAtMTAxLDYgJiM0MzsxMDUsMTAgQEAgcnVuX3Rlc3QoKSB7CiAJCW10dV9pcHY2X3IyKSAgICAgICAgIHRlc3RfbXR1X2lwdjZfcjIgOzsKIAkJbXR1X2lwdjRfcjMpICAgICAgICAgdGVzdF9tdHVfaXB2NF9yMyA7OwogCQltdHVfaXB2Nl9yMykgICAgICAgICB0ZXN0X210dV9pcHY2X3IzIDs7CiYjNDM7CQltYXJrX3dpbGRjYXJkX3NoYWRvdykgICAgICB0ZXN0X21hcmtfd2lsZGNhcmRfc2hhZG93IDs7CiYjNDM7CQltYXJrX3dpbGRjYXJkX2RlbGV0ZSkgICAgICB0ZXN0X21hcmtfd2lsZGNhcmRfZGVsZXRlIDs7CiYjNDM7CQltYXJrX3dpbGRjYXJkX2dldF9hZGRyKSAgICB0ZXN0X21hcmtfd2lsZGNhcmRfZ2V0X2FkZHIgOzsKJiM0MzsJCW1hcmtfd2lsZGNhcmRfZGVsZXRlX2FkZHIpIHRlc3RfbWFya193aWxkY2FyZF9kZWxldGVfYWRkciA7OwogCQllc2FjCiAJCXJldD0kPwogCkBAIC0xNjcsNiAmIzQzOzE3NSw4IEBAIHNldHVwX25hbWVzcGFjZXMoKSB7CiAJWyAtbiAmIzM0OyR7TlNfUzJ9JiMzNDsgXSAmYW1wOyZhbXA7IG5zX3MyPShpcCBuZXRucyBleGVjICYjMzQ7JHtOU19TMn0mIzM0OykgJmFtcDsmYW1wOyBuc19hY3RpdmU9JiMzNDske25zX2FjdGl2ZX0gJE5TX1MyJiMzNDsKIAlbIC1uICYjMzQ7JHtOU19SM30mIzM0OyBdICZhbXA7JmFtcDsgbnNfcjM9KGlwIG5ldG5zIGV4ZWMgJiMzNDske05TX1IzfSYjMzQ7KSAmYW1wOyZhbXA7IG5zX2FjdGl2ZT0mIzM0OyR7bnNfYWN0aXZlfSAkTlNfUjMmIzM0OwogCVsgLW4gJiMzNDske05TX0J9JiMzNDsgXSAmYW1wOyZhbXA7IG5zX2FjdGl2ZT0mIzM0OyR7bnNfYWN0aXZlfSAkTlNfQiYjMzQ7CiYjNDM7CiYjNDM7CXJldHVybiAwCiB9CiAKIGFkZHJfYWRkKCkgewpAQCAtMjk1LDYgJiM0MzszMDUsMTggQEAgc2V0dXBfbnNfc2V0X3Y2eCgpIHsKIAlzZXRfeGZybV9wYXJhbXMKIH0KIAomIzQzO3NldHVwX25zX3NldF9zaW1wbGUoKSB7CiYjNDM7CSMgU2luZ2xlIG5hbWVzcGFjZSwgbm8gdmV0aHMvcm91dGVzLgomIzQzOwluc19zZXQ9JiMzNDthJiMzNDsKJiM0MzsJaW1heD0xCiYjNDM7CXNyYz0mIzM0OzEwLjEuMS4xJiMzNDsKJiM0MzsJZHN0PSYjMzQ7MTAuMS4xLjImIzM0OwomIzQzOwlzcmNfbmV0PSYjMzQ7MTAuMS4wLjAvMjQmIzM0OwomIzQzOwlkc3RfbmV0PSYjMzQ7MTAuMi4wLjAvMjQmIzM0OwomIzQzOwomIzQzOwlzZXRfeGZybV9wYXJhbXMKJiM0Mzt9CiYjNDM7CiBzZXR1cF9uZXR3b3JrKCkgewogCSMgQ3JlYXRlIHZldGhzIGFuZCBhZGQgYWRkcmVzc2VzCiAJbG9jYWwgLWEgbnNfY21kCkBAIC00MDMsNiAmIzQzOzQyNSw3IEBAIHNldHVwKCkgewogCQluc19zZXRfdjR4KSAgICBzZXR1cF9uc19zZXRfdjR4IDs7CiAJCW5zX3NldF92NikgICAgIHNldHVwX25zX3NldF92NiA7OwogCQluc19zZXRfdjZ4KSAgICBzZXR1cF9uc19zZXRfdjZ4IDs7CiYjNDM7CQluc19zZXRfc2ltcGxlKSBzZXR1cF9uc19zZXRfc2ltcGxlIDs7CiAJCW5hbWVzcGFjZXMpICAgIHNldHVwX25hbWVzcGFjZXMgOzsKIAkJbmV0d29yaykgICAgICAgc2V0dXBfbmV0d29yayA7OwogCQl4ZnJtKSAgICAgICAgICBzZXR1cF94ZnJtIDs7CkBAIC01NDgsNiAmIzQzOzU3MSwxMTEgQEAgdGVzdF9tdHVfaXB2Nl9yMygpIHsKIAlyZXR1cm4gJiMzNDske3JjfSYjMzQ7CiB9CiAKJiM0MzsjIFNBX2RlY295IChtYXJrIDAvMCwgYWRkZWQgc2Vjb25kKSBzaGFkb3dzIFNBX3RhcmdldCAobWFyayAxLzEpIG9uIGEKJiM0MzsjIHdpbGRjYXJkIG1hcmsgbG9va3VwLiBObyB0cmFmZmljIHNlbnQ7IHRoZXNlIG9ubHkgZXhlcmNpc2UgdGhlIFNBRC4KJiM0MzsKJiM0Mzt0ZXN0X21hcmtfd2lsZGNhcmRfc2hhZG93KCkgewomIzQzOwlzZXR1cCBuc19zZXRfc2ltcGxlIG5hbWVzcGFjZXMgfHwgcmV0dXJuICYjMzQ7JGtzZnRfc2tpcCYjMzQ7CiYjNDM7CWxvY2FsIHJlc3VsdD0wCiYjNDM7CiYjNDM7CXJ1bl9jbWQgJiMzNDske25zX2FbQF19JiMzNDsgaXAgeGZybSBzdGF0ZSBhZGQgXAomIzQzOwkJc3JjICYjMzQ7JHtzcmN9JiMzNDsgZHN0ICYjMzQ7JHtkc3R9JiMzNDsgcHJvdG8gZXNwIHNwaSAweDEwMDAgXAomIzQzOwkJcmVxaWQgMTAwIG1vZGUgdHVubmVsIFwKJiM0MzsJCWFlYWQgJiMzOTtyZmM0MTA2KGdjbShhZXMpKSYjMzk7IDB4MTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSA5NiBcCiYjNDM7CQltYXJrIDEgbWFzayAxCiYjNDM7CiYjNDM7CXJ1bl9jbWQgJiMzNDske25zX2FbQF19JiMzNDsgaXAgeGZybSBzdGF0ZSBhZGQgXAomIzQzOwkJc3JjICYjMzQ7JHtzcmN9JiMzNDsgZHN0ICYjMzQ7JHtkc3R9JiMzNDsgcHJvdG8gZXNwIHNwaSAweDEwMDAgXAomIzQzOwkJcmVxaWQgMTAwIG1vZGUgdHVubmVsIFwKJiM0MzsJCWFlYWQgJiMzOTtyZmM0MTA2KGdjbShhZXMpKSYjMzk7IDB4MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiA5NiBcCiYjNDM7CQltYXJrIDAgbWFzayAwCiYjNDM7CiYjNDM7CXJ1bl9jbWRfZXJyICYjMzQ7JHtuc19hW0BdfSYjMzQ7IGlwIHhmcm0gc3RhdGUgZ2V0IFwKJiM0MzsJCWRzdCAmIzM0OyR7ZHN0fSYjMzQ7IHByb3RvIGVzcCBzcGkgMHgxMDAwIFwKJiM0MzsJCW1hcmsgMSBtYXNrIDEKJiM0MzsKJiM0MzsJIyBFeHBlY3RlZDogU0FfdGFyZ2V0IChtYXJrIDB4MS8weDEpLiBBY3R1YWwgKGJ1Zyk6IFNBX2RlY295IChtYXJrIDAvMCkuCiYjNDM7CWVjaG8gJiMzNDskb3V0JiMzNDsgfCBncmVwIC1xICYjMzQ7bWFyayAweDEvMHgxJiMzNDsgfHwgcmVzdWx0PTEKJiM0MzsKJiM0MzsJcmV0dXJuICYjMzQ7JHtyZXN1bHR9JiMzNDsKJiM0Mzt9CiYjNDM7CiYjNDM7dGVzdF9tYXJrX3dpbGRjYXJkX2RlbGV0ZSgpIHsKJiM0MzsJc2V0dXAgbnNfc2V0X3NpbXBsZSBuYW1lc3BhY2VzIHx8IHJldHVybiAmIzM0OyRrc2Z0X3NraXAmIzM0OwomIzQzOwlsb2NhbCByZXN1bHQ9MAomIzQzOwomIzQzOwlydW5fY21kICYjMzQ7JHtuc19hW0BdfSYjMzQ7IGlwIHhmcm0gc3RhdGUgYWRkIFwKJiM0MzsJCXNyYyAmIzM0OyR7c3JjfSYjMzQ7IGRzdCAmIzM0OyR7ZHN0fSYjMzQ7IHByb3RvIGVzcCBzcGkgMHgxMDAwIFwKJiM0MzsJCXJlcWlkIDEwMCBtb2RlIHR1bm5lbCBcCiYjNDM7CQlhZWFkICYjMzk7cmZjNDEwNihnY20oYWVzKSkmIzM5OyAweDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgOTYgXAomIzQzOwkJbWFyayAxIG1hc2sgMQomIzQzOwomIzQzOwlydW5fY21kICYjMzQ7JHtuc19hW0BdfSYjMzQ7IGlwIHhmcm0gc3RhdGUgYWRkIFwKJiM0MzsJCXNyYyAmIzM0OyR7c3JjfSYjMzQ7IGRzdCAmIzM0OyR7ZHN0fSYjMzQ7IHByb3RvIGVzcCBzcGkgMHgxMDAwIFwKJiM0MzsJCXJlcWlkIDEwMCBtb2RlIHR1bm5lbCBcCiYjNDM7CQlhZWFkICYjMzk7cmZjNDEwNihnY20oYWVzKSkmIzM5OyAweDIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIgOTYgXAomIzQzOwkJbWFyayAwIG1hc2sgMAomIzQzOwomIzQzOwlydW5fY21kICYjMzQ7JHtuc19hW0BdfSYjMzQ7IGlwIHhmcm0gc3RhdGUgZGVsZXRlIFwKJiM0MzsJCWRzdCAmIzM0OyR7ZHN0fSYjMzQ7IHByb3RvIGVzcCBzcGkgMHgxMDAwIFwKJiM0MzsJCW1hcmsgMSBtYXNrIDEKJiM0MzsKJiM0MzsJcnVuX2NtZF9lcnIgJiMzNDske25zX2FbQF19JiMzNDsgaXAgeGZybSBzdGF0ZSBzaG93CiYjNDM7CWVjaG8gJiMzNDskb3V0JiMzNDsgfCBncmVwIC1xICYjMzQ7bWFyayAweDEvMHgxJiMzNDsgJmFtcDsmYW1wOyByZXN1bHQ9MQomIzQzOwomIzQzOwlyZXR1cm4gJiMzNDske3Jlc3VsdH0mIzM0OwomIzQzO30KJiM0MzsKJiM0MzsjIGJ5LWFkZHJlc3MgY291bnRlcnBhcnQ6IHByb3RvIHJvdXRlMi9oYW8gKElQdjYgbW9iaWxpdHkpIGhhdmUgbm8gU1BJLAomIzQzOyMgc28geGZybV91c2VyX3N0YXRlX2xvb2t1cCgpIHJlc29sdmVzIHRoZW0gYnkgYWRkcmVzcyBpbnN0ZWFkLgomIzQzOwomIzQzO3Rlc3RfbWFya193aWxkY2FyZF9nZXRfYWRkcigpIHsKJiM0MzsJc2V0dXAgbnNfc2V0X3NpbXBsZSBuYW1lc3BhY2VzIHx8IHJldHVybiAmIzM0OyRrc2Z0X3NraXAmIzM0OwomIzQzOwlsb2NhbCByZXN1bHQ9MAomIzQzOwlsb2NhbCBzcmM2PSYjMzQ7ZmMwMDo5OjoxJiMzNDsKJiM0MzsJbG9jYWwgZHN0Nj0mIzM0O2ZjMDA6OTo6MiYjMzQ7CiYjNDM7CiYjNDM7CXJ1bl9jbWQgJiMzNDske25zX2FbQF19JiMzNDsgaXAgeGZybSBzdGF0ZSBhZGQgXAomIzQzOwkJc3JjICYjMzQ7JHtzcmM2fSYjMzQ7IGRzdCAmIzM0OyR7ZHN0Nn0mIzM0OyBwcm90byByb3V0ZTIgbW9kZSBybyBjb2EgZmMwMDo5OjozIFwKJiM0MzsJCW1hcmsgMSBtYXNrIDEKJiM0MzsKJiM0MzsJcnVuX2NtZCAmIzM0OyR7bnNfYVtAXX0mIzM0OyBpcCB4ZnJtIHN0YXRlIGFkZCBcCiYjNDM7CQlzcmMgJiMzNDske3NyYzZ9JiMzNDsgZHN0ICYjMzQ7JHtkc3Q2fSYjMzQ7IHByb3RvIHJvdXRlMiBtb2RlIHJvIGNvYSBmYzAwOjk6OjQgXAomIzQzOwkJbWFyayAwIG1hc2sgMAomIzQzOwomIzQzOwlydW5fY21kX2VyciAmIzM0OyR7bnNfYVtAXX0mIzM0OyBpcCB4ZnJtIHN0YXRlIGdldCBcCiYjNDM7CQlzcmMgJiMzNDske3NyYzZ9JiMzNDsgZHN0ICYjMzQ7JHtkc3Q2fSYjMzQ7IHByb3RvIHJvdXRlMiBcCiYjNDM7CQltYXJrIDEgbWFzayAxCiYjNDM7CiYjNDM7CWVjaG8gJiMzNDskb3V0JiMzNDsgfCBncmVwIC1xICYjMzQ7bWFyayAweDEvMHgxJiMzNDsgfHwgcmVzdWx0PTEKJiM0MzsKJiM0MzsJcmV0dXJuICYjMzQ7JHtyZXN1bHR9JiMzNDsKJiM0Mzt9CiYjNDM7CiYjNDM7dGVzdF9tYXJrX3dpbGRjYXJkX2RlbGV0ZV9hZGRyKCkgewomIzQzOwlzZXR1cCBuc19zZXRfc2ltcGxlIG5hbWVzcGFjZXMgfHwgcmV0dXJuICYjMzQ7JGtzZnRfc2tpcCYjMzQ7CiYjNDM7CWxvY2FsIHJlc3VsdD0wCiYjNDM7CWxvY2FsIHNyYzY9JiMzNDtmYzAwOjk6OjEmIzM0OwomIzQzOwlsb2NhbCBkc3Q2PSYjMzQ7ZmMwMDo5OjoyJiMzNDsKJiM0MzsKJiM0MzsJcnVuX2NtZCAmIzM0OyR7bnNfYVtAXX0mIzM0OyBpcCB4ZnJtIHN0YXRlIGFkZCBcCiYjNDM7CQlzcmMgJiMzNDske3NyYzZ9JiMzNDsgZHN0ICYjMzQ7JHtkc3Q2fSYjMzQ7IHByb3RvIHJvdXRlMiBtb2RlIHJvIGNvYSBmYzAwOjk6OjMgXAomIzQzOwkJbWFyayAxIG1hc2sgMQomIzQzOwomIzQzOwlydW5fY21kICYjMzQ7JHtuc19hW0BdfSYjMzQ7IGlwIHhmcm0gc3RhdGUgYWRkIFwKJiM0MzsJCXNyYyAmIzM0OyR7c3JjNn0mIzM0OyBkc3QgJiMzNDske2RzdDZ9JiMzNDsgcHJvdG8gcm91dGUyIG1vZGUgcm8gY29hIGZjMDA6OTo6NCBcCiYjNDM7CQltYXJrIDAgbWFzayAwCiYjNDM7CiYjNDM7CXJ1bl9jbWQgJiMzNDske25zX2FbQF19JiMzNDsgaXAgeGZybSBzdGF0ZSBkZWxldGUgXAomIzQzOwkJc3JjICYjMzQ7JHtzcmM2fSYjMzQ7IGRzdCAmIzM0OyR7ZHN0Nn0mIzM0OyBwcm90byByb3V0ZTIgXAomIzQzOwkJbWFyayAxIG1hc2sgMQomIzQzOwomIzQzOwlydW5fY21kX2VyciAmIzM0OyR7bnNfYVtAXX0mIzM0OyBpcCB4ZnJtIHN0YXRlIHNob3cKJiM0MzsJZWNobyAmIzM0OyRvdXQmIzM0OyB8IGdyZXAgLXEgJiMzNDttYXJrIDB4MS8weDEmIzM0OyAmYW1wOyZhbXA7IHJlc3VsdD0xCiYjNDM7CiYjNDM7CXJldHVybiAmIzM0OyR7cmVzdWx0fSYjMzQ7CiYjNDM7fQomIzQzOwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMKIHVzYWdlKCkgewo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxNToxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTI0OQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDQ2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFhGUk0gU3RhdGUgTG9va3VwIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgYWx0ZXJzIHRoZSB3YXkgdGhlIFhGUk0gKElQc2VjKSBzdGF0ZSBsb29rdXAgd29ya3Mgd2l0aGluIHRoZSBrZXJuZWwuIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgY2hhbmdlIGlzIHRvIG1ha2UgdGhlIGB4ZnJtX3N0YXRlX2xvb2t1cF9ieWFkZHJgLCBgeGZybV9zdGF0ZV9sb29rdXBgLCBgeGZybV9zdGF0ZV9sb29rdXBfZXhhY3RgLCBhbmQgcmVsYXRlZCBmdW5jdGlvbnMgdXNlICpleGFjdCogbWF0Y2hpbmcgb2YgbWFya3MgYW5kIG1hc2tzLCBpbnN0ZWFkIG9mIHRoZSBjdXJyZW50IHdpbGRjYXJkIGFwcHJvYWNoLCB3aGVuIGEgcmVxdWVzdCBvcmlnaW5hdGVzIGZyb20gdGhlIGNvbnRyb2wgcGxhbmUgKHByaW1hcmlseSBgeGZybV91c2VyLmNgKS4gVGhpcyBpcyBhIGNydWNpYWwgZml4LCBiZWNhdXNlIGEgd2lsZGNhcmQgU2VjdXJpdHkgQXNzb2NpYXRpb24gKFNBKSB3aXRoIGEgbWFyayBvZiAwLzAgY2FuIGN1cnJlbnRseSBvdmVyc2hhZG93IGEgbW9yZSBzcGVjaWZpYyBTQSAoZS5nLiwgbWFyayAxLzEpIHdoZW4gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBjb250cm9sIHBsYW5lIGFjdGlvbnMgbGlrZSBHRVQsIERFTEVURSwgb3IgTUlHUkFURS4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgcmFjZSBjb25kaXRpb24sIGFuZCB0aGlzIHBhdGNoIHNob3VsZCBhZGRyZXNzIGl0IGRpcmVjdGx5LgoKTXkgaW1tZWRpYXRlIHRob3VnaHRzIGFyZSwgbGV0JiMzOTtzIG5haWwgZG93biBwcmVjaXNlbHkgd2hpY2ggY29kZSBpcyBtb2RpZmllZC4gSSBzZWUgY2hhbmdlcyBpbiBgbmV0L3hmcm0veGZybV9zdGF0ZS5jYCwgYG5ldC94ZnJtL3hmcm1fdXNlci5jYCwgYG5ldC9pcHY2L3hmcm02X2lucHV0LmNgLCBhbmQgYGluY2x1ZGUvbmV0L3hmcm0uaGAuICBQbHVzLCB0aGVyZSBhcmUgdGhlc2UgbmV3IHRlc3RzIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQveGZybV9zdGF0ZS5zaGAgd2hpY2ggYXJlIGVuY291cmFnaW5nIC0gZ29vZCB0byBzZWUgdGhleSYjMzk7cmUgYnVpbGRpbmcgdGVzdCBjb3ZlcmFnZSBhcm91bmQgdGhpcy4KCkZ1bmN0aW9uYWxseSwgdGhpcyBpcyBhbGwgYWJvdXQgaG93IElQc2VjIFNBcyBhcmUgbG9va2VkIHVwIGFuZCBoYW5kbGVkIHZpYSBuZXRsaW5rLiBUaGUgaW1wYWN0IGlzIHNpZ25pZmljYW50IGZvciBvcGVyYXRpb25zIGxpa2Ugc3RhdGUgZGVsZXRpb24sIG1pZ3JhdGlvbiwgYW5kIHJldHJpZXZhbC4gSSBuZWVkIHRvIGZvY3VzIG9uIHRob3NlIHNwZWNpZmljIG5ldGxpbmsgbWVzc2FnZXMgbGlrZSBgWEZSTV9NU0dfR0VUU0FgLCBgWEZSTV9NU0dfREVMU0FgLCBhbmQgYFhGUk1fTVNHX01JR1JBVEVgIHRvIHNlZSB0aGUgZWZmZWN0IG9mIHRoaXMgY2hhbmdlLgoKTm93LCBmb3IgZnV6emluZywgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBjcml0aWNhbCBmdW5jdGlvbnMuIEkmIzM5O20gZ29pbmcgdG8gY29uY2VudHJhdGUgb24gYHhmcm1fc3RhdGVfbG9va3VwX2V4YWN0YCwgYHhmcm1fc3RhdGVfbG9va3VwX2J5YWRkcmAsIGB4ZnJtX3VzZXJfc3RhdGVfbG9va3VwYCwgYHhmcm1fZ2V0X2FlYCwgYHhmcm1fbmV3X2FlYCwgYHhmcm1fYWRkX3NhX2V4cGlyZWAsIGFuZCBgeGZybV9kb19taWdyYXRlX3N0YXRlYC4gVGhlc2UgYXJlIHRoZSBrZXkgZW50cnkgcG9pbnRzIGFuZCBtYW5pcHVsYXRpb24gcG9pbnRzIG9mIHRoZSBzdGF0ZSBsb29rdXAgbG9naWMuIFRoZXkgYXJlIGRlZmluaXRlbHkgd2hlcmUgYW55IGlzc3VlcyBmcm9tIHRoZSBwYXRjaCB3aWxsIHN1cmZhY2UuCgpGaW5hbGx5LCBsZXQmIzM5O3MgdmVyaWZ5IHRoYXQgdGhlIG5lY2Vzc2FyeSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBzZXQuIGBDT05GSUdfWEZSTV9VU0VSYCBpcyB2aXRhbCBmb3IgYHhmcm1fdXNlci5jYCwgYW5kIGBDT05GSUdfWEZSTV9NSUdSQVRFYCBpcyBuZWVkZWQgZm9yIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgLiBJJiMzOTtsbCBjb25maXJtIHRoYXQgdGhlc2UgYXJlIGVuYWJsZWQgaW4gdGhlIGJ1aWxkIGVudmlyb25tZW50IHRvIGVuc3VyZSB0aGlzIHBhdGNoIGlzIGZ1bGx5IHN1cHBvcnRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxNToxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgWEZSTV9NSUdSQVRFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL0tjb25maWc9NTE9Y29uZmlnIFhGUk1fU1VCX1BPTElDWVxuLS1cbm5ldC94ZnJtL0tjb25maWctNjAtXG5uZXQveGZybS9LY29uZmlnOjYxOmNvbmZpZyBYRlJNX01JR1JBVEVcbm5ldC94ZnJtL0tjb25maWctNjItXHRib29sIFwmIzM0O1RyYW5zZm9ybWF0aW9uIG1pZ3JhdGUgZGF0YWJhc2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxNToxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQxNAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIHRoZSBYRlJNX1VTRVIgUGVyc3BlY3RpdmUqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIG91dCBgWEZSTV9VU0VSYC4gSXQmIzM5O3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGggdGhlIHVzZXItc3BhY2UgaW50ZXJhY3Rpb25zLCB0aGUgcG90ZW50aWFsIGNvbmZpZ3VyYXRpb24gYXNwZWN0cywgYW5kIGFueSBjdXN0b20gaW1wbGVtZW50YXRpb25zLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBjb250cm9sIHBsYW5lIGFuZCBkYXRhIHBsYW5lIGhlcmUsIGFuZCB3aGV0aGVyIHRoZSBpc3N1ZSBJJiMzOTttIGxvb2tpbmcgYXQgY291bGQgYmUgYSByZXN1bHQgb2Ygc29tZXRoaW5nIG1pc2NvbmZpZ3VyZWQgYXQgdGhlIHVzZXIgbGV2ZWwuIFdoYXQgYXJlIHRoZSByZWxldmFudCBzb2NrZXQgb3B0aW9ucz8gQXJlIHRoZXJlIGFueSB1bmV4cGVjdGVkIHBvbGljeSBzZXR0aW5ncz8gSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IGhvdyB0aGUga2V5cyBhcmUgYmVpbmcgbWFuYWdlZCBhbmQgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIGRpc2NyZXBhbmNpZXMgYmV0d2VlbiBleHBlY3RlZCBiZWhhdmlvciBhbmQgd2hhdCBJJiMzOTttIG9ic2VydmluZy4gSXTigJlzIGxpa2VseSBpbiB0aGUga2VybmVsLXVzZXIgaW50ZXJhY3Rpb25zLiBUaGlzIGNvdWxkIGJlIHdoZXJlIHRoZSBwcm9ibGVtIHN0ZW1zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE1OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBYRlJNX1VTRVImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0vS2NvbmZpZz0yMj1pZiBJTkVUXG5uZXQveGZybS9LY29uZmlnOjIzOmNvbmZpZyBYRlJNX1VTRVJcbm5ldC94ZnJtL0tjb25maWctMjQtXHR0cmlzdGF0ZSBcJiMzNDtUcmFuc2Zvcm1hdGlvbiB1c2VyIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlXCYjMzQ7XG4tLVxubmV0L3hmcm0vS2NvbmZpZy0zMS1cbm5ldC94ZnJtL0tjb25maWc6MzI6Y29uZmlnIFhGUk1fVVNFUl9DT01QQVRcbm5ldC94ZnJtL0tjb25maWctMzMtXHR0cmlzdGF0ZSBcJiMzNDtDb21wYXRpYmxlIEFCSSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTU6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI3NjAKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgeGZybV9kb19taWdyYXRlX3N0YXRlYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludHJpY2FjaWVzIG9mIHRoaXMgZnVuY3Rpb24gd2l0aGluIGBuZXQveGZybS94ZnJtX3VzZXIuY2AuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IGl0IGhhbmRsZXMgc3RhdGUgbWlncmF0aW9uLiBUaGlzIGxpa2VseSBpbnZvbHZlcyB1c2VyLXNwYWNlIGludGVyYWN0aW9ucywgcG9zc2libHkgd2l0aCBuZXRsaW5rIG1lc3NhZ2VzIG9yIHNpbWlsYXIgbWVjaGFuaXNtcy4gSSYjMzk7bGwgbmVlZCB0byBmb2N1cyBvbiBob3cgdGhlIGZ1bmN0aW9uIHByb2Nlc3NlcyB0aGUgZGF0YSBpdCByZWNlaXZlcywgaG93IGl0IHZhbGlkYXRlcyBpbnB1dCwgYW5kIGhvdyBpdCBvcmNoZXN0cmF0ZXMgdGhlIHRyYW5zZmVyIG9mIHNlY3VyaXR5IGFzc29jaWF0aW9uIChTQSkgaW5mb3JtYXRpb24gYmV0d2VlbiBkaWZmZXJlbnQgbmV0d29yayBuYW1lc3BhY2VzIG9yIG90aGVyIGNvbnRleHRzLCBiZWNhdXNlIEkga25vdyB0aGF0JiMzOTtzIHRoZSB1c3VhbCBpbXBsaWNhdGlvbiBvZiBhICYjMzQ7bWlncmF0ZSYjMzQ7IG9wZXJhdGlvbi4gSSYjMzk7bGwgYWxzbyBiZSBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgdGhhdCBjb3VsZCBhcmlzZSBkdXJpbmcgdGhpcyBzdGF0ZSB0cmFuc2ZlciwgZXNwZWNpYWxseSBjb25zaWRlcmluZyB0aGF0IHRoZSBzdGF0ZSBtaWdodCBjb250YWluIHNlbnNpdGl2ZSBjcnlwdG9ncmFwaGljIGtleXMgb3IgU1BJIHZhbHVlcy4gR2l2ZW4gbXkgZmFtaWxpYXJpdHkgd2l0aCBYRlJNLCBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgY2FsbHMgdG8gZnVuY3Rpb25zIGxpa2UgYHhmcm1fc3RhdGVfYWxsb2NgLCBgeGZybV9zdGF0ZV9hZGRgLCBgeGZybV9zdGF0ZV9kZWxldGVgIGFuZCBwZXJoYXBzIHN0YXRlIGxvY2tpbmcgbWVjaGFuaXNtcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxNToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnJtX2RvX21pZ3JhdGVfc3RhdGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmM9MzMwND1zdGF0aWMgaW50IHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMzI0LVxubmV0L3hmcm0veGZybV91c2VyLmM6MzMyNTpzdGF0aWMgaW50IHhmcm1fZG9fbWlncmF0ZV9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMzMjYtXHRcdFx0XHQgc3RydWN0IG5sYXR0ciAqKmF0dHJzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzUxNi0jZWxzZVxubmV0L3hmcm0veGZybV91c2VyLmM6MzUxNzpzdGF0aWMgaW50IHhmcm1fZG9fbWlncmF0ZV9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM1MTgtXHRcdFx0XHQgc3RydWN0IG5sYXR0ciAqKmF0dHJzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9MzczMj1zdGF0aWMgY29uc3Qgc3RydWN0IHhmcm1fbGluayB7XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzc2OS1cdFtYRlJNX01TR19HRVRERUZBVUxUICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fZ2V0X2RlZmF1bHQgICB9LFxubmV0L3hmcm0veGZybV91c2VyLmM6Mzc3MDpcdFtYRlJNX01TR19NSUdSQVRFX1NUQVRFIC0gWEZSTV9NU0dfQkFTRV0gPSB7IC5kb2l0ID0geGZybV9kb19taWdyYXRlX3N0YXRlIH0sXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNzcxLX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTU6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM0NjQKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBzaXR1YXRpb246CgoqKlhGUk0gU3Vic3lzdGVtIFRlc3RpbmcgUmVxdWlyZW1lbnRzKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcsIHRvIHJlYWxseSBuYWlsIGRvd24gdGhlIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgIGZ1bmN0aW9uLCB3ZSYjMzk7cmUgZGVmaW5pdGVseSBnb2luZyB0byBuZWVkIHRoZSBgWEZSTV9NSUdSQVRFYCBmbGFnIGFjdGl2YXRlZCBmb3IgYSBwcm9wZXIgdGVzdGluZyBlbnZpcm9ubWVudC4gTWFrZXMgcGVyZmVjdCBzZW5zZS4gQW5kIG9mIGNvdXJzZSwgZ2l2ZW4gdGhhdCBgeGZybV91c2VyLmNgIGlzIGdvaW5nIHRvIGJlIGludGVncmFsIHRvIHRoZXNlIHRlc3RzLCB3ZSYjMzk7cmUgZ29pbmcgdG8gbmVlZCBgWEZSTV9VU0VSYCBlbmFibGVkLiBJdOKAmXMgcHJldHR5IG9idmlvdXMsIGJ1dCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUuCgpOb3csIG15IG5leHQgdGhvdWdodCBpcywgbGV0JiMzOTtzIHJlZnJlc2ggb24gYHhmcm1fc3RhdGVfbG9va3VwX2V4YWN0YC4gSSYjMzk7bGwgZ28gY2hlY2sgaXQgb3V0IGluIGBuZXQveGZybS94ZnJtX3N0YXRlLmNgLiBBbHdheXMgZ29vZCB0byBoYXZlIGEgc29saWQgaGFuZGxlIG9uIGhvdyB0aGF0IHBhcnRpY3VsYXIgZnVuY3Rpb24gd29ya3MsIGdpdmVuIGl0cyBwb3RlbnRpYWwgaW1wbGljYXRpb25zIGluIGEgbWlncmF0aW9uIHNjZW5hcmlvLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCBpdCBjb21wbGV0ZWx5IGJlZm9yZSBwcm9jZWVkaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxNToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnJtX3N0YXRlX2xvb2t1cF9leGFjdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcveGZybS94ZnJtX21pZ3JhdGVfc3RhdGUucnN0PTI5PVRoZSBzdHJ1Y3QgaXMgZGVmaW5lZCBpbiBgYGluY2x1ZGUvdWFwaS9saW51eC94ZnJtLmhgYC4gVGhlIFNBIGlzIGxvb2tlZFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3hmcm0veGZybV9taWdyYXRlX3N0YXRlLnJzdDozMDp1cCB1c2luZyBgYHhmcm1fc3RhdGVfbG9va3VwX2V4YWN0KClgYCB3aXRoIGBgaWQuc3BpYGAsIGBgaWQuZGFkZHJgYCxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy94ZnJtL3hmcm1fbWlncmF0ZV9zdGF0ZS5yc3QtMzEtYGBpZC5wcm90b2BgLCBgYGlkLmZhbWlseWBgLCBhbmQgYW4gZXhhY3QgbWF0Y2ggYWdhaW5zdCBgYG9sZF9tYXJrLnZgYFxuLS1cbmluY2x1ZGUvbmV0L3hmcm0uaD0xNzQ0PXN0cnVjdCB4ZnJtX3N0YXRlICp4ZnJtX3N0YXRlX2xvb2t1cF9ieWFkZHIoc3RydWN0IG5ldCAqbmV0LCB1MzIgbWFyaywgdTMyIG1hc2ssIGJvb2wgZXhhY3QsXG4tLVxuaW5jbHVkZS9uZXQveGZybS5oLTE3NDgtXHRcdFx0XHRcdCAgICB1bnNpZ25lZCBzaG9ydCBmYW1pbHkpO1xuaW5jbHVkZS9uZXQveGZybS5oOjE3NDk6c3RydWN0IHhmcm1fc3RhdGUgKnhmcm1fc3RhdGVfbG9va3VwX2V4YWN0KHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IHhmcm1fbWFyayAqbWFyayxcbmluY2x1ZGUvbmV0L3hmcm0uaC0xNzUwLVx0XHRcdFx0XHQgICBjb25zdCB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsIF9fYmUzMiBzcGksXG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jPTEyMTI9c3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlICpcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoxMjEzOl9feGZybV9zdGF0ZV9sb29rdXBfZXhhY3QoY29uc3Qgc3RydWN0IHhmcm1faGFzaF9zdGF0ZV9wdHJzICpzdGF0ZV9wdHJzLFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTEyMTQtXHRcdFx0ICBjb25zdCBzdHJ1Y3QgeGZybV9tYXJrICptYXJrLFxuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYz0xMzI3PV9feGZybV9zdGF0ZV9sb2NhdGVfZXhhY3Qoc3RydWN0IHhmcm1fc3RhdGUgKngsIGludCB1c2Vfc3BpLCBpbnQgZmFtaWx5KVxuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xMzM0LVx0aWYgKHVzZV9zcGkpXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MTMzNTpcdFx0cmV0dXJuIF9feGZybV9zdGF0ZV9sb29rdXBfZXhhY3QoXHUwMDI2c3RhdGVfcHRycywgXHUwMDI2eC1cdTAwM2VtYXJrLCBcdTAwMjZ4LVx1MDAzZWlkLmRhZGRyLFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTEzMzYtXHRcdFx0XHRcdFx0IHgtXHUwMDNlaWQuc3BpLCB4LVx1MDAzZWlkLnByb3RvLCBmYW1pbHkpO1xuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYz0yNDQ3PXN0cnVjdCB4ZnJtX3N0YXRlICpcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoyNDQ4Onhmcm1fc3RhdGVfbG9va3VwX2V4YWN0KHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IHhmcm1fbWFyayAqbWFyayxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yNDQ5LVx0XHRcdGNvbnN0IHhmcm1fYWRkcmVzc190ICpkYWRkciwgX19iZTMyIHNwaSxcbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjQ1Ny1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoyNDU4Olx0eCA9IF9feGZybV9zdGF0ZV9sb29rdXBfZXhhY3QoXHUwMDI2c3RhdGVfcHRycywgbWFyaywgZGFkZHIsIHNwaSwgcHJvdG8sIGZhbWlseSk7XG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjQ1OS1cdHJjdV9yZWFkX3VubG9jaygpO1xuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yNDYxLX1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoyNDYyOkVYUE9SVF9TWU1CT0woeGZybV9zdGF0ZV9sb29rdXBfZXhhY3QpO1xubmV0L3hmcm0veGZybV9zdGF0ZS5jLTI0NjMtXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9MTA4ND1zdGF0aWMgc3RydWN0IHhmcm1fc3RhdGUgKnhmcm1fdXNlcl9zdGF0ZV9sb29rdXAoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTEwOTYtXHRcdGVyciA9IC1FU1JDSDtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjEwOTc6XHRcdHggPSB4ZnJtX3N0YXRlX2xvb2t1cF9leGFjdChuZXQsIFx1MDAyNm0sIFx1MDAyNnAtXHUwMDNlZGFkZHIsIHAtXHUwMDNlc3BpLCBwLVx1MDAzZXByb3RvLCBwLVx1MDAzZWZhbWlseSk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0xMDk4LVx0fSBlbHNlIHtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz0yNzg0PXN0YXRpYyBpbnQgeGZybV9nZXRfYWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMjc5Ny1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjI3OTg6XHR4ID0geGZybV9zdGF0ZV9sb29rdXBfZXhhY3QobmV0LCBcdTAwMjZtLCBcdTAwMjZpZC1cdTAwM2VkYWRkciwgaWQtXHUwMDNlc3BpLCBpZC1cdTAwM2Vwcm90bywgaWQtXHUwMDNlZmFtaWx5KTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTI3OTktXHRpZiAoeCA9PSBOVUxMKVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTI4MzI9c3RhdGljIGludCB4ZnJtX25ld19hZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yODU5LVxubmV0L3hmcm0veGZybV91c2VyLmM6Mjg2MDpcdHggPSB4ZnJtX3N0YXRlX2xvb2t1cF9leGFjdChuZXQsIFx1MDAyNm0sIFx1MDAyNnAtXHUwMDNlc2FfaWQuZGFkZHIsIHAtXHUwMDNlc2FfaWQuc3BpLFxubmV0L3hmcm0veGZybV91c2VyLmMtMjg2MS1cdFx0XHRcdCAgICBwLVx1MDAzZXNhX2lkLnByb3RvLCBwLVx1MDAzZXNhX2lkLmZhbWlseSk7XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9Mjk4NT1zdGF0aWMgaW50IHhmcm1fYWRkX3NhX2V4cGlyZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yOTk3LVxubmV0L3hmcm0veGZybV91c2VyLmM6Mjk5ODpcdHggPSB4ZnJtX3N0YXRlX2xvb2t1cF9leGFjdChuZXQsIFx1MDAyNm0sIFx1MDAyNnAtXHUwMDNlaWQuZGFkZHIsIHAtXHUwMDNlaWQuc3BpLCBwLVx1MDAzZWlkLnByb3RvLCBwLVx1MDAzZWZhbWlseSk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0yOTk5LVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTMzMjU9c3RhdGljIGludCB4ZnJtX2RvX21pZ3JhdGVfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzM2NC1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjMzNjU6XHR4ID0geGZybV9zdGF0ZV9sb29rdXBfZXhhY3QobmV0LCBcdTAwMjZtLm9sZF9tYXJrLFxubmV0L3hmcm0veGZybV91c2VyLmMtMzM2Ni1cdFx0XHRcdCAgICBcdTAwMjZ1bS1cdTAwM2VpZC5kYWRkciwgdW0tXHUwMDNlaWQuc3BpLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxNToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTMxMgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDIzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBGdXp6aW5nIFN0cmF0ZWd5IGZvciBUaGlzIElQc2VjIFNBIExvb2t1cCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSB0YWtlbiBhIGxvb2sgYXQgdGhpcyBwYXRjaCBhbmQgaXQmIzM5O3MgaW1tZWRpYXRlbHkgY2xlYXIgdGhhdCBpdCYjMzk7cyB0b3VjaGluZyBjcml0aWNhbCBmdW5jdGlvbmFsIGNvcmUgbG9naWMg4oCTIHNwZWNpZmljYWxseSwgaG93IElQc2VjIFNlY3VyaXR5IEFzc29jaWF0aW9ucyAoU0FzKSBhcmUgbG9va2VkIHVwLiBUaGlzIGlzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLCBnaXZlbiB0aGF0IGl0JiMzOTtzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB0aHJvdWdoIG5ldGxpbmsuIE15IGd1dCB0ZWxscyBtZSB0aGlzIGNvdWxkIGJlIGludGVyZXN0aW5nLgoKVGhlIGZ1bmN0aW9ucyBJJiMzOTttIGZvY3VzaW5nIG9uIGFyZTogYHhmcm1fc3RhdGVfbG9va3VwX2V4YWN0YCwgYHhmcm1fc3RhdGVfbG9va3VwX2J5YWRkcmAsIGB4ZnJtX3VzZXJfc3RhdGVfbG9va3VwYCwgYHhmcm1fZ2V0X2FlYCwgYHhmcm1fbmV3X2FlYCwgYHhmcm1fYWRkX3NhX2V4cGlyZWAsIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgLCBgeGZybV9zdGF0ZV91cGRhdGVgLCBhbmQgYHhmcm1fc3RhdGVfbWlncmF0ZV9pbnN0YWxsYC4gVGhlc2UgbG9vayBsaWtlIHRoZSBrZXkgcGllY2VzIGludm9sdmVkIGluIHRoaXMgbG9va3VwIGFuZCBtYW5hZ2VtZW50IHByb2Nlc3MuCgpCZWZvcmUgSSBqdW1wIGludG8gZnV6emluZywgSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gSSYjMzk7bGwgbmVlZCBgQ09ORklHX1hGUk1gIGFzIHRoZSBiYXNlLCBvZiBjb3Vyc2UuIFRoZW4sIGBDT05GSUdfWEZSTV9VU0VSYCBpcyBlc3NlbnRpYWwgZm9yIHRoZSB1c2Vyc3BhY2UgYWNjZXNzLCBhbmQgc2luY2UgbWlncmF0aW9uIGlzIGludm9sdmVkLCBgQ09ORklHX1hGUk1fTUlHUkFURWAgaXMgYSBtdXN0LiBLbm93aW5nIHdoYXQgSSYjMzk7bSBkZWFsaW5nIHdpdGgsIGBDT05GSUdfSU5FVGAgZm9yIGBYRlJNX1VTRVJgIGlzIGFsc28gbmVjZXNzYXJ5LCBhbmQgSSBzZWUgYENPTkZJR19JUFY2YCBkZXBlbmRlbmN5LCBzcGVjaWZpY2FsbHkgZm9yIGBuZXQvaXB2Ni94ZnJtNl9pbnB1dC5jYC4gSSB3aWxsIHZlcmlmeSB0aGUgZGVwZW5kZW5jaWVzIGZvciBgWEZSTV9NSUdSQVRFYCB0byBiZSBjZXJ0YWluIEkgaGF2ZSBhbGwgdGhlIGJveGVzIHRpY2tlZCBiZWZvcmUgSSBzdGFydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTU6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFhGUk1fTUlHUkFURSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS9LY29uZmlnPTUxPWNvbmZpZyBYRlJNX1NVQl9QT0xJQ1lcbi0tXG5uZXQveGZybS9LY29uZmlnLTYwLVxubmV0L3hmcm0vS2NvbmZpZzo2MTpjb25maWcgWEZSTV9NSUdSQVRFXG5uZXQveGZybS9LY29uZmlnLTYyLVx0Ym9vbCBcJiMzNDtUcmFuc2Zvcm1hdGlvbiBtaWdyYXRlIGRhdGFiYXNlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE1OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MDE0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKlhGUk1fTUlHUkFURSBEZXBlbmRlbmN5IEludmVzdGlnYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIGBYRlJNX01JR1JBVEVgLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlcywgc3BlY2lmaWNhbGx5IGBuZXQveGZybS9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHRoZSBkZXBlbmRlbmNpZXMsIGlmIGFueSwgdGhhdCBnb3Zlcm4gd2hldGhlciBgWEZSTV9NSUdSQVRFYCBpcyBldmVuICplbmFibGVkKiBvciAqc2VsZWN0YWJsZSogZHVyaW5nIHRoZSBrZXJuZWwgYnVpbGQgcHJvY2Vzcy4gSSB3YW50IHRvIHF1aWNrbHkgdW5kZXJzdGFuZCBpZiBpdCByZWxpZXMgb24gb3RoZXIgWEZSTSBmZWF0dXJlcywgbmV0d29ya2luZyBzdWJzeXN0ZW1zLCBvciBldmVuIGhhcmR3YXJlIGNhcGFiaWxpdGllcy4gVGltZSB0byBnbyBzcGVsdW5raW5nIGluIHRoYXQgS2NvbmZpZyBmaWxlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgc2VjcmV0cyBpdCBob2xkcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTU6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQveGZybS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA1MDpcdFxuICA1MTpcdGNvbmZpZyBYRlJNX1NVQl9QT0xJQ1lcbiAgNTI6XHRcdGJvb2wgXCYjMzQ7VHJhbnNmb3JtYXRpb24gc3ViIHBvbGljeSBzdXBwb3J0XCYjMzQ7XG4gIDUzOlx0XHRkZXBlbmRzIG9uIFhGUk1cbiAgNTQ6XHRcdGhlbHBcbiAgNTU6XHRcdCAgU3VwcG9ydCBzdWIgcG9saWN5IGZvciBkZXZlbG9wZXJzLiBCeSB1c2luZyBzdWIgcG9saWN5IHdpdGggbWFpblxuICA1NjpcdFx0ICBvbmUsIHR3byBwb2xpY2llcyBjYW4gYmUgYXBwbGllZCB0byB0aGUgc2FtZSBwYWNrZXQgYXQgb25jZS5cbiAgNTc6XHRcdCAgUG9saWN5IHdoaWNoIGxpdmVzIHNob3J0ZXIgdGltZSBpbiBrZXJuZWwgc2hvdWxkIGJlIGEgc3ViLlxuICA1ODpcdFxuICA1OTpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICA2MDpcdFxuICA2MTpcdGNvbmZpZyBYRlJNX01JR1JBVEVcbiAgNjI6XHRcdGJvb2wgXCYjMzQ7VHJhbnNmb3JtYXRpb24gbWlncmF0ZSBkYXRhYmFzZVwmIzM0O1xuICA2MzpcdFx0ZGVwZW5kcyBvbiBYRlJNXG4gIDY0Olx0XHRoZWxwXG4gIDY1Olx0XHQgIEEgZmVhdHVyZSB0byB1cGRhdGUgbG9jYXRvcihzKSBvZiBhIGdpdmVuIElQc2VjIHNlY3VyaXR5XG4gIDY2Olx0XHQgIGFzc29jaWF0aW9uIGR5bmFtaWNhbGx5LiAgVGhpcyBmZWF0dXJlIGlzIHJlcXVpcmVkLCBmb3JcbiAgNjc6XHRcdCAgaW5zdGFuY2UsIGluIGEgTW9iaWxlIElQdjYgZW52aXJvbm1lbnQgd2l0aCBJUHNlYyBjb25maWd1cmF0aW9uXG4gIDY4Olx0XHQgIHdoZXJlIG1vYmlsZSBub2RlcyBjaGFuZ2UgdGhlaXIgYXR0YWNobWVudCBwb2ludCB0byB0aGUgSW50ZXJuZXQuXG4gIDY5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE1OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NTAyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkRlcGVuZGVuY3kgQW5hbHlzaXM6IFhGUk0gTW9kdWxlcyoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGVzZSBrZXJuZWwgbW9kdWxlIGRlcGVuZGVuY2llcy4gSXQgbG9va3MgbGlrZSBgWEZSTV9NSUdSQVRFYCBhYnNvbHV0ZWx5IHJlbGllcyBvbiB0aGUgYmFzZSBgWEZSTWAgbW9kdWxlLiBNYWtlcyBzZW5zZTsgbWlncmF0aW9uIGxpa2VseSBpbnZvbHZlcyBleGlzdGluZyBYRlJNIGluZnJhc3RydWN0dXJlLiBBbmQgdGhlbiB3ZSBoYXZlIGBYRlJNX1VTRVJgLCB3aGljaCBzZWVtcyB0byBiZSBzaXR0aW5nIG9uIHRvcCBvZiBib3RoIGBJTkVUYCBhbmQgYFhGUk1gLiBUaGF0IHNpZ25hbHMgYSB1c2VyLXNwYWNlIGludGVyZmFjZSwgcHJvYmFibHkgdG8gaW50ZXJhY3Qgd2l0aCBYRlJNIHZpYSBzb2NrZXRzLiBNYWtlcyB0b3RhbCBzZW5zZSwgYW5kIHRoaXMgaXMgc3RhbmRhcmQuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IHVuZGVyc3RhbmRpbmcuCgpUbyBnZXQgdGhlIGZ1bGwgcGljdHVyZSBhbmQgY29uZmlybSB0aG9zZSBkZXBlbmRlbmNpZXMsIEkgc2hvdWxkIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIFRoZSBgbmV0L3hmcm0vS2NvbmZpZ2AgZmlsZSBzaG91bGQgY29udGFpbiB0aGUgZGVmaW5pdGl2ZSBkZWNsYXJhdGlvbiBvZiBgWEZSTV9VU0VSYCBhbmQgaXRzIGRlcGVuZGVuY2llcy4gTGV0JiMzOTtzIGdvIGNoZWNrIHRoYXQgb3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxNToyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC94ZnJtL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDE1Olx0XHR0cmlzdGF0ZVxuICAxNjpcdFx0c2VsZWN0IFhGUk1cbiAgMTc6XHRcdHNlbGVjdCBDUllQVE9cbiAgMTg6XHRcdHNlbGVjdCBDUllQVE9fQUVBRFxuICAxOTpcdFx0c2VsZWN0IENSWVBUT19IQVNIXG4gIDIwOlx0XHRzZWxlY3QgQ1JZUFRPX1NLQ0lQSEVSXG4gIDIxOlx0XG4gIDIyOlx0aWYgSU5FVFxuICAyMzpcdGNvbmZpZyBYRlJNX1VTRVJcbiAgMjQ6XHRcdHRyaXN0YXRlIFwmIzM0O1RyYW5zZm9ybWF0aW9uIHVzZXIgY29uZmlndXJhdGlvbiBpbnRlcmZhY2VcJiMzNDtcbiAgMjU6XHRcdHNlbGVjdCBYRlJNX0FMR09cbiAgMjY6XHRcdGhlbHBcbiAgMjc6XHRcdCAgU3VwcG9ydCBmb3IgVHJhbnNmb3JtYXRpb24oWEZSTSkgdXNlciBjb25maWd1cmF0aW9uIGludGVyZmFjZVxuICAyODpcdFx0ICBsaWtlIElQc2VjIHVzZWQgYnkgbmF0aXZlIExpbnV4IHRvb2xzLlxuICAyOTpcdFxuICAzMDpcdFx0ICBJZiB1bnN1cmUsIHNheSBZLlxuICAzMTpcdFxuICAzMjpcdGNvbmZpZyBYRlJNX1VTRVJfQ09NUEFUXG4gIDMzOlx0XHR0cmlzdGF0ZSBcJiMzNDtDb21wYXRpYmxlIEFCSSBzdXBwb3J0XCYjMzQ7XG4gIDM0Olx0XHRkZXBlbmRzIG9uIFhGUk1fVVNFUiBcdTAwMjZcdTAwMjYgQ09NUEFUX0ZPUl9VNjRfQUxJR05NRU5UIFx1MDAyNlx1MDAyNiBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxNToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzAzNwoJCQkJCQkJb3V0cHV0OiAxOTcKCQkJCQkJCXRob3VnaHRzOiA0NzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgWEZSTSBDb25maWd1cmF0aW9uIGFuZCBGdW5jdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBYRlJNIGNvZGUuIEl0IGxvb2tzIGxpa2UgdGhlIGtleSBjb25maWd1cmF0aW9ucyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIGFyZSBgWEZSTV9VU0VSYCBhbmQgYFhGUk1fTUlHUkFURWAuIEkmIzM5O20gc3RhcnRpbmcgYnkgbG9va2luZyBhdCBgbmV0L2lwdjYveGZybTZfaW5wdXQuY2AsIGFuZCwgYXMgZXhwZWN0ZWQsIGl0IHJlcXVpcmVzIGBJUFY2YC4KCkkmIzM5O20gZ29pbmcgdG8gZG9jdW1lbnQgdGhlIGNvbmZpZ3VyYXRpb25zIEkmIzM5O3ZlIGlkZW50aWZpZWQ6CgoqICAgYFhGUk1fVVNFUmAKKiAgIGBYRlJNX01JR1JBVEVgCiogICBgSVBWNmAKCk5vdywgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBmdW5jdGlvbnMuIEkgbmVlZCB0byBmb2N1cyBvbiB0aGVzZSBzeW1ib2xzOgoKKiAgIGB4ZnJtX3N0YXRlX2xvb2t1cF9leGFjdGAKKiAgIGB4ZnJtX3N0YXRlX2xvb2t1cF9ieWFkZHJgCiogICBgeGZybV91c2VyX3N0YXRlX2xvb2t1cGAKKiAgIGB4ZnJtX2dldF9hZWAKKiAgIGB4ZnJtX25ld19hZWAKKiAgIGB4ZnJtX2FkZF9zYV9leHBpcmVgCiogICBgeGZybV9kb19taWdyYXRlX3N0YXRlYAoqICAgYHhmcm1fc3RhdGVfdXBkYXRlYAoqICAgYHhmcm1fc3RhdGVfbWlncmF0ZV9pbnN0YWxsYAoKSSYjMzk7bSBnb2luZyB0byBkb3VibGUtY2hlY2sgdGhhdCBgeGZybV9zdGF0ZV9sb29rdXBfZXhhY3RgIGlzIGV4cG9ydGVkIGFuZCBhY2Nlc3NpYmxlLiBBaCwgeWVwLCBpdCYjMzk7cyBjYWxsZWQgZnJvbSBgeGZybV91c2VyLmNgLCBzbyB0aGF0JiMzOTtzIGdvb2QuIEFuZCBgeGZybV9zdGF0ZV9sb29rdXBfYnlhZGRyYC4uLiB5ZXMsIGl0JiMzOTtzIHVzZWQgaW4gYm90aCBgeGZybV91c2VyLmNgIGFuZCBgeGZybTZfaW5wdXQuY2AuCgpMZXQgbWUgc2VlIGlmIGFueSBvdGhlciBmdW5jdGlvbnMgaGF2ZSBiZWVuIG1vZGlmaWVkIG9yIGFyZSByZWxldmFudC4gT2theSwgSSBzZWUgYSBoYW5kZnVsIG9mIHN0YXRpYyBmdW5jdGlvbnMsIGxldCYjMzk7cyB0YWtlIGEgbG9vazoKCiogICBgeGZybV9zdGF0ZV9tYXJrX21hdGNoZXNgIChzdGF0aWMpCiogICBgX194ZnJtX3N0YXRlX2xvb2t1cGAgKHN0YXRpYykKKiAgIGBfX3hmcm1fc3RhdGVfbG9va3VwX2V4YWN0YCAoc3RhdGljKQoqICAgYF9feGZybV9zdGF0ZV9sb29rdXBfYnlhZGRyYCAoc3RhdGljKQoqICAgYF9feGZybV9zdGF0ZV9sb2NhdGVgIChzdGF0aWMpCiogICBgX194ZnJtX3N0YXRlX2xvY2F0ZV9leGFjdGAgKHN0YXRpYykKCkkmIzM5O20gZ29pbmcgdG8gaW5jbHVkZSB0aGUgZXhwb3J0ZWQgYW5kIG5vbi1zdGF0aWMgZnVuY3Rpb25zLCBhcyB3ZWxsIGFzIHRoZSBpbXBvcnRhbnQgc3RhdGljIG9uZXMsIEkgY2FuIGFsd2F5cyBjb21lIGJhY2sgdG8gaXQuCgpUaGUgZmluYWwgbGlzdCB3aWxsIGJlOgoKKiAgIGB4ZnJtX3N0YXRlX2xvb2t1cF9leGFjdGAKKiAgIGB4ZnJtX3N0YXRlX2xvb2t1cF9ieWFkZHJgCiogICBgeGZybV91c2VyX3N0YXRlX2xvb2t1cGAKKiAgIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgCiogICBgeGZybV9zdGF0ZV91cGRhdGVgCiogICBgeGZybV9zdGF0ZV9taWdyYXRlX2luc3RhbGxgCiogICBgeGZybV9nZXRfYWVgCiogICBgeGZybV9uZXdfYWVgCiogICBgeGZybV9hZGRfc2FfZXhwaXJlYAoKTm93LCB0aW1lIHRvIGNhbGwgc2V0LXJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE1OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtYRlJNX1VTRVImIzM0OywKICAgICYjMzQ7WEZSTV9NSUdSQVRFJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt4ZnJtX3N0YXRlX2xvb2t1cF9leGFjdCYjMzQ7LAogICAgJiMzNDt4ZnJtX3N0YXRlX2xvb2t1cF9ieWFkZHImIzM0OywKICAgICYjMzQ7eGZybV91c2VyX3N0YXRlX2xvb2t1cCYjMzQ7LAogICAgJiMzNDt4ZnJtX2RvX21pZ3JhdGVfc3RhdGUmIzM0OywKICAgICYjMzQ7eGZybV9zdGF0ZV91cGRhdGUmIzM0OywKICAgICYjMzQ7eGZybV9zdGF0ZV9taWdyYXRlX2luc3RhbGwmIzM0OywKICAgICYjMzQ7eGZybV9nZXRfYWUmIzM0OywKICAgICYjMzQ7eGZybV9uZXdfYWUmIzM0OywKICAgICYjMzQ7eGZybV9hZGRfc2FfZXhwaXJlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBYRlJNIChJUHNlYykgc3RhdGUgbG9va3VwIGxvZ2ljIHRvIGFsbG93IGV4YWN0IG1hdGNoaW5nIG9mIG1hcmtzIGFuZCBtYXNrcyBkdXJpbmcgY29udHJvbCBwbGFuZSBvcGVyYXRpb25zIChHRVQsIERFTEVURSwgTUlHUkFURSkuIFRoaXMgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgbmV0bGluayBtZXNzYWdlcyBhbmQgYWZmZWN0cyBjb3JlIElQc2VjIGZ1bmN0aW9uYWxpdHkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hGUk1fVVNFUiYjMzQ7LAogICAgJiMzNDtYRlJNX01JR1JBVEUmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3hmcm1fc3RhdGVfbG9va3VwX2V4YWN0JiMzNDssCiAgICAmIzM0O3hmcm1fc3RhdGVfbG9va3VwX2J5YWRkciYjMzQ7LAogICAgJiMzNDt4ZnJtX3VzZXJfc3RhdGVfbG9va3VwJiMzNDssCiAgICAmIzM0O3hmcm1fZG9fbWlncmF0ZV9zdGF0ZSYjMzQ7LAogICAgJiMzNDt4ZnJtX3N0YXRlX3VwZGF0ZSYjMzQ7LAogICAgJiMzNDt4ZnJtX3N0YXRlX21pZ3JhdGVfaW5zdGFsbCYjMzQ7LAogICAgJiMzNDt4ZnJtX2dldF9hZSYjMzQ7LAogICAgJiMzNDt4ZnJtX25ld19hZSYjMzQ7LAogICAgJiMzNDt4ZnJtX2FkZF9zYV9leHBpcmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFhGUk0gKElQc2VjKSBzdGF0ZSBsb29rdXAgbG9naWMgdG8gYWxsb3cgZXhhY3QgbWF0Y2hpbmcgb2YgbWFya3MgYW5kIG1hc2tzIGR1cmluZyBjb250cm9sIHBsYW5lIG9wZXJhdGlvbnMgKEdFVCwgREVMRVRFLCBNSUdSQVRFKS4gVGhpcyBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBuZXRsaW5rIG1lc3NhZ2VzIGFuZCBhZmZlY3RzIGNvcmUgSVBzZWMgZnVuY3Rpb25hbGl0eS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE1OjE1OjI2LjY1NDEzMDYzNFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5MDQzNzc2MjI3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJYRlJNX1VTRVJcIixcbiAgICBcIlhGUk1fTUlHUkFURVwiLFxuICAgIFwiSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInhmcm1fc3RhdGVfbG9va3VwX2V4YWN0XCIsXG4gICAgXCJ4ZnJtX3N0YXRlX2xvb2t1cF9ieWFkZHJcIixcbiAgICBcInhmcm1fdXNlcl9zdGF0ZV9sb29rdXBcIixcbiAgICBcInhmcm1fZG9fbWlncmF0ZV9zdGF0ZVwiLFxuICAgIFwieGZybV9zdGF0ZV91cGRhdGVcIixcbiAgICBcInhmcm1fc3RhdGVfbWlncmF0ZV9pbnN0YWxsXCIsXG4gICAgXCJ4ZnJtX2dldF9hZVwiLFxuICAgIFwieGZybV9uZXdfYWVcIixcbiAgICBcInhmcm1fYWRkX3NhX2V4cGlyZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBYRlJNIChJUHNlYykgc3RhdGUgbG9va3VwIGxvZ2ljIHRvIGFsbG93IGV4YWN0IG1hdGNoaW5nIG9mIG1hcmtzIGFuZCBtYXNrcyBkdXJpbmcgY29udHJvbCBwbGFuZSBvcGVyYXRpb25zIChHRVQsIERFTEVURSwgTUlHUkFURSkuIFRoaXMgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgbmV0bGluayBtZXNzYWdlcyBhbmQgYWZmZWN0cyBjb3JlIElQc2VjIGZ1bmN0aW9uYWxpdHkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE1OjE1OjI2LjY1NDEzNzY2NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTE5MTA1ODkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNjgzMDU5MTFlNWFiZDZlNTVkZDgwMmQzMDUwNzEwOWZjYTI1M2Q0MlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1bCA2IDE1OjE1OjI0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy94ZnJtL3hmcm1fbWlncmF0ZV9zdGF0ZS5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcveGZybS94ZnJtX21pZ3JhdGVfc3RhdGUucnN0XFxuaW5kZXggOWQ1M2NiMjJiMDA3NTIuLjkwNWUzZjBjNGVlMDZmIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy94ZnJtL3hmcm1fbWlncmF0ZV9zdGF0ZS5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcveGZybS94ZnJtX21pZ3JhdGVfc3RhdGUucnN0XFxuQEAgLTI3LDE1ICsyNywxOCBAQCBTQSBJZGVudGlmaWNhdGlvblxcbiA9PT09PT09PT09PT09PT09PVxcbiBcXG4gVGhlIHN0cnVjdCBpcyBkZWZpbmVkIGluIGBgaW5jbHVkZS91YXBpL2xpbnV4L3hmcm0uaGBgLiBUaGUgU0EgaXMgbG9va2VkXFxuLXVwIHVzaW5nIGBgeGZybV9zdGF0ZV9sb29rdXAoKWBgIHdpdGggYGBpZC5zcGlgYCxcXG4tYGBpZC5kYWRkcmBgLCBgYGlkLnByb3RvYGAsIGBgaWQuZmFtaWx5YGAsIGFuZFxcbi1gYG9sZF9tYXJrLnYgXFx1MDAyNiBvbGRfbWFyay5tYGAgYXMgdGhlIG1hcmsga2V5OjpcXG4rdXAgdXNpbmcgYGB4ZnJtX3N0YXRlX2xvb2t1cF9leGFjdCgpYGAgd2l0aCBgYGlkLnNwaWBgLCBgYGlkLmRhZGRyYGAsXFxuK2BgaWQucHJvdG9gYCwgYGBpZC5mYW1pbHlgYCwgYW5kIGFuIGV4YWN0IG1hdGNoIGFnYWluc3QgYGBvbGRfbWFyay52YGBcXG4rYW5kIGBgb2xkX21hcmsubWBgLiBVbmxpa2UgdGhlIGRhdGEgcGF0aCwgd2hpY2ggdXNlcyBhIG1hc2tlZFxcbitjb21wYXJpc29uLCB0aGlzIHJlcXVpcmVzIHRoZSBTQSdzIG1hcmsgYW5kIG1hc2sgdG8gZXF1YWwgYGBvbGRfbWFya2BgXFxuK2V4YWN0bHksIHNvIGEgYnJvYWQtbWFzayBTQSBpcyBuZXZlciBtYXRjaGVkIHdoZW4gYSBtb3JlIHNwZWNpZmljIG9uZVxcbit3YXMgaW50ZW5kZWQuIElmIG5vIHN1Y2ggU0EgZXhpc3RzLCBgYC1FU1JDSGBgIGlzIHJldHVybmVkLjo6XFxuIFxcbiAgICAgc3RydWN0IHhmcm1fdXNlcl9taWdyYXRlX3N0YXRlIHtcXG4gICAgICAgICBzdHJ1Y3QgeGZybV91c2Vyc2FfaWQgIGlkOyAgICAgICAvKiBzcGksIGRhZGRyLCBwcm90bywgZmFtaWx5ICovXFxuICAgICAgICAgeGZybV9hZGRyZXNzX3QgICAgICAgICBuZXdfZGFkZHI7XFxuICAgICAgICAgeGZybV9hZGRyZXNzX3QgICAgICAgICBuZXdfc2FkZHI7XFxuLSAgICAgICAgc3RydWN0IHhmcm1fbWFyayAgICAgICBvbGRfbWFyazsgLyogU0EgbG9va3VwOiBrZXkgPSB2IFxcdTAwMjYgbSAqL1xcbisgICAgICAgIHN0cnVjdCB4ZnJtX21hcmsgICAgICAgb2xkX21hcms7IC8qIFNBIGxvb2t1cCBrZXkgKGV4YWN0IHYvbSBtYXRjaCkgKi9cXG4gICAgICAgICBzdHJ1Y3QgeGZybV9zZWxlY3RvciAgIG5ld19zZWw7ICAvKiBuZXcgc2VsZWN0b3IgKHNlZSBGbGFncykgKi9cXG4gICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICAgIG5ld19yZXFpZDtcXG4gICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICAgIGZsYWdzOyAgICAvKiBYRlJNX01JR1JBVEVfU1RBVEVfKiAqL1xcbkBAIC03Miw4ICs3NSw4IEBAIGluaGVyaXRzIHRoZSB2YWx1ZSBmcm9tIHRoZSBleGlzdGluZyBTQSAob21pdC10by1pbmhlcml0KS5cXG4gICAgICAtIERlc2NyaXB0aW9uXFxuICAgICogLSBgYFhGUk1BX01BUktgYFxcbiAgICAgIC0gTWFyayBvbiB0aGUgbWlncmF0ZWQgU0EgKGBgc3RydWN0IHhmcm1fbWFya2BgKS4gQWJzZW50IGluaGVyaXRzXFxuLSAgICAgICBgYG9sZF9tYXJrYGAuIFRvIHVzZSBubyBtYXJrIG9uIHRoZSBuZXcgU0EsIHNlbmQgYGBYRlJNQV9NQVJLYGBcXG4tICAgICAgIHdpdGggYGB7MCwgMH1gYC5cXG4rICAgICAgIHRoZSBtYXJrIG9mIHRoZSBleGlzdGluZyBTQS4gVG8gdXNlIG5vIG1hcmsgb24gdGhlIG5ldyBTQSwgc2VuZFxcbisgICAgICAgYGBYRlJNQV9NQVJLYGAgd2l0aCBgYHswLCAwfWBgLlxcbiAgICAqIC0gYGBYRlJNQV9FTkNBUGBgXFxuICAgICAgLSBVRFAgZW5jYXBzdWxhdGlvbiB0ZW1wbGF0ZTsgb25seSBgYFVEUF9FTkNBUF9FU1BJTlVEUGBgIGlzIHN1cHBvcnRlZC5cXG4gICAgICAgIFNldCBgYGVuY2FwX3R5cGU9MGBgIHRvIHJlbW92ZSBlbmNhcC5cXG5AQCAtMjU5LDggKzI2Miw5IEBAIEF0dHJpYnV0ZXMgaW4gdGhlIG5vdGlmaWNhdGlvblxcbiBFcnJvciBIYW5kbGluZ1xcbiA9PT09PT09PT09PT09PVxcbiBcXG4tSWYgdGhlIHRhcmdldCBTQSB0dXBsZSAobmV3IGRhZGRyLCBTUEksIHByb3RvLCBuZXcgZmFtaWx5KSBpcyBhbHJlYWR5XFxuLW9jY3VwaWVkLCB0aGUgb3BlcmF0aW9uIHJldHVybnMgYGAtRUVYSVNUYGAgYmVmb3JlIHRoZSBtaWdyYXRpb24gYmVnaW5zLlxcbitJZiB0aGUgdGFyZ2V0IFNBIHR1cGxlIChuZXcgZGFkZHIsIFNQSSwgcHJvdG8sIG5ldyBmYW1pbHksIG1hcmspIGlzXFxuK2FscmVhZHkgb2NjdXBpZWQsIHRoZSBvcGVyYXRpb24gcmV0dXJucyBgYC1FRVhJU1RgYCBiZWZvcmUgdGhlIG1pZ3JhdGlvblxcbitiZWdpbnMuXFxuIFRoZSBvbGQgU0EgcmVtYWlucyBpbnRhY3QgYW5kIHRoZSBvcGVyYXRpb24gaXMgc2FmZSB0byByZXRyeSBhZnRlclxcbiByZXNvbHZpbmcgdGhlIGNvbmZsaWN0LlxcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQveGZybS5oIGIvaW5jbHVkZS9uZXQveGZybS5oXFxuaW5kZXggNTE5YTAxNTZhMDVjYWMuLmViZTUxNDM3NjI1NGE2IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L3hmcm0uaFxcbisrKyBiL2luY2x1ZGUvbmV0L3hmcm0uaFxcbkBAIC0xNzQxLDExICsxNzQxLDE0IEBAIHN0cnVjdCB4ZnJtX3N0YXRlICp4ZnJtX2lucHV0X3N0YXRlX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBtYXJrLFxcbiBcXHRcXHRcXHRcXHRcXHQgICBjb25zdCB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsXFxuIFxcdFxcdFxcdFxcdFxcdCAgIF9fYmUzMiBzcGksIHU4IHByb3RvLFxcbiBcXHRcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBzaG9ydCBmYW1pbHkpO1xcbi1zdHJ1Y3QgeGZybV9zdGF0ZSAqeGZybV9zdGF0ZV9sb29rdXBfYnlhZGRyKHN0cnVjdCBuZXQgKm5ldCwgdTMyIG1hcmssXFxuK3N0cnVjdCB4ZnJtX3N0YXRlICp4ZnJtX3N0YXRlX2xvb2t1cF9ieWFkZHIoc3RydWN0IG5ldCAqbmV0LCB1MzIgbWFyaywgdTMyIG1hc2ssIGJvb2wgZXhhY3QsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBjb25zdCB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBjb25zdCB4ZnJtX2FkZHJlc3NfdCAqc2FkZHIsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICB1OCBwcm90byxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIHNob3J0IGZhbWlseSk7XFxuK3N0cnVjdCB4ZnJtX3N0YXRlICp4ZnJtX3N0YXRlX2xvb2t1cF9leGFjdChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCB4ZnJtX21hcmsgKm1hcmssXFxuK1xcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IHhmcm1fYWRkcmVzc190ICpkYWRkciwgX19iZTMyIHNwaSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgdTggcHJvdG8sIHVuc2lnbmVkIHNob3J0IGZhbWlseSk7XFxuICNpZmRlZiBDT05GSUdfWEZSTV9TVUJfUE9MSUNZXFxuIHZvaWQgeGZybV90bXBsX3NvcnQoc3RydWN0IHhmcm1fdG1wbCAqKmRzdCwgc3RydWN0IHhmcm1fdG1wbCAqKnNyYywgaW50IG4sXFxuIFxcdFxcdCAgICB1bnNpZ25lZCBzaG9ydCBmYW1pbHkpO1xcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni94ZnJtNl9pbnB1dC5jIGIvbmV0L2lwdjYveGZybTZfaW5wdXQuY1xcbmluZGV4IDg5ZDA0NDNiNTMwNzMyLi4yZGQzNDdmZWNlNTJjYSAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2Ni94ZnJtNl9pbnB1dC5jXFxuKysrIGIvbmV0L2lwdjYveGZybTZfaW5wdXQuY1xcbkBAIC0yNzIsNyArMjcyLDcgQEAgaW50IHhmcm02X2lucHV0X2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgeGZybV9hZGRyZXNzX3QgKmRhZGRyLFxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0eCA9IHhmcm1fc3RhdGVfbG9va3VwX2J5YWRkcihuZXQsIHNrYi1cXHUwMDNlbWFyaywgZHN0LCBzcmMsIHByb3RvLCBBRl9JTkVUNik7XFxuK1xcdFxcdHggPSB4ZnJtX3N0YXRlX2xvb2t1cF9ieWFkZHIobmV0LCBza2ItXFx1MDAzZW1hcmssIDAsIGZhbHNlLCBkc3QsIHNyYywgcHJvdG8sIEFGX0lORVQ2KTtcXG4gXFx0XFx0aWYgKCF4KVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fc3RhdGUuYyBiL25ldC94ZnJtL3hmcm1fc3RhdGUuY1xcbmluZGV4IGM1OGNkMDI0ZTNjNjc1Li4wYjNkYzc3ODlkZDc5MCAxMDA2NDRcXG4tLS0gYS9uZXQveGZybS94ZnJtX3N0YXRlLmNcXG4rKysgYi9uZXQveGZybS94ZnJtX3N0YXRlLmNcXG5AQCAtMTE3MiwxMSArMTE3MiwyMiBAQCBzdGF0aWMgc3RydWN0IHhmcm1fc3RhdGUgKl9feGZybV9zdGF0ZV9sb29rdXBfYWxsKGNvbnN0IHN0cnVjdCB4ZnJtX2hhc2hfc3RhdGVfcFxcbiBcXHRyZXR1cm4gTlVMTDtcXG4gfVxcbiBcXG4tc3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlICpfX3hmcm1fc3RhdGVfbG9va3VwKGNvbnN0IHN0cnVjdCB4ZnJtX2hhc2hfc3RhdGVfcHRycyAqc3RhdGVfcHRycyxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICAgdTMyIG1hcmssXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHhmcm1fYWRkcmVzc190ICpkYWRkcixcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICAgX19iZTMyIHNwaSwgdTggcHJvdG8sXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIHNob3J0IGZhbWlseSlcXG4rLyogZXhhY3Q9ZmFsc2U6IGRhdGEtcGxhbmUgd2lsZGNhcmQgbWF0Y2ggYWdhaW5zdCB4J3MgbWFzay4gZXhhY3Q9dHJ1ZTpcXG4rICogY29udHJvbC1wbGFuZSBpZGVudGl0eSBtYXRjaCwgbWFyayBhbmQgbWFzayBtdXN0IGJvdGggbWF0Y2ggZXhhY3RseS5cXG4rICovXFxuK3N0YXRpYyBib29sIHhmcm1fc3RhdGVfbWFya19tYXRjaGVzKGNvbnN0IHN0cnVjdCB4ZnJtX3N0YXRlICp4LCB1MzIgbWFyaywgdTMyIG1hc2ssIGJvb2wgZXhhY3QpXFxuK3tcXG4rXFx0aWYgKGV4YWN0KVxcbitcXHRcXHRyZXR1cm4geC1cXHUwMDNlbWFyay52ID09IG1hcmsgXFx1MDAyNlxcdTAwMjYgeC1cXHUwMDNlbWFyay5tID09IG1hc2s7XFxuK1xcdHJldHVybiAobWFyayBcXHUwMDI2IHgtXFx1MDAzZW1hcmsubSkgPT0geC1cXHUwMDNlbWFyay52O1xcbit9XFxuK1xcbitzdGF0aWMgc3RydWN0IHhmcm1fc3RhdGUgKlxcbitfX3hmcm1fc3RhdGVfbG9va3VwKGNvbnN0IHN0cnVjdCB4ZnJtX2hhc2hfc3RhdGVfcHRycyAqc3RhdGVfcHRycyxcXG4rXFx0XFx0ICAgIHUzMiBtYXJrLCB1MzIgbWFzaywgYm9vbCBleGFjdCxcXG4rXFx0XFx0ICAgIGNvbnN0IHhmcm1fYWRkcmVzc190ICpkYWRkcixcXG4rXFx0XFx0ICAgIF9fYmUzMiBzcGksIHU4IHByb3RvLFxcbitcXHRcXHQgICAgdW5zaWduZWQgc2hvcnQgZmFtaWx5KVxcbiB7XFxuIFxcdHVuc2lnbmVkIGludCBoID0gX194ZnJtX3NwaV9oYXNoKGRhZGRyLCBzcGksIHByb3RvLCBmYW1pbHksIHN0YXRlX3B0cnMtXFx1MDAzZWhtYXNrKTtcXG4gXFx0c3RydWN0IHhmcm1fc3RhdGUgKng7XFxuQEAgLTExODgsNyArMTE5OSw3IEBAIHN0YXRpYyBzdHJ1Y3QgeGZybV9zdGF0ZSAqX194ZnJtX3N0YXRlX2xvb2t1cChjb25zdCBzdHJ1Y3QgeGZybV9oYXNoX3N0YXRlX3B0cnNcXG4gXFx0XFx0ICAgICF4ZnJtX2FkZHJfZXF1YWwoXFx1MDAyNngtXFx1MDAzZWlkLmRhZGRyLCBkYWRkciwgZmFtaWx5KSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbi1cXHRcXHRpZiAoKG1hcmsgXFx1MDAyNiB4LVxcdTAwM2VtYXJrLm0pICE9IHgtXFx1MDAzZW1hcmsudilcXG4rXFx0XFx0aWYgKCF4ZnJtX3N0YXRlX21hcmtfbWF0Y2hlcyh4LCBtYXJrLCBtYXNrLCBleGFjdCkpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRpZiAoIXhmcm1fc3RhdGVfaG9sZF9yY3UoeCkpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbkBAIC0xMTk4LDYgKzEyMDksMTcgQEAgc3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlICpfX3hmcm1fc3RhdGVfbG9va3VwKGNvbnN0IHN0cnVjdCB4ZnJtX2hhc2hfc3RhdGVfcHRyc1xcbiBcXHRyZXR1cm4gTlVMTDtcXG4gfVxcbiBcXG4rc3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlICpcXG4rX194ZnJtX3N0YXRlX2xvb2t1cF9leGFjdChjb25zdCBzdHJ1Y3QgeGZybV9oYXNoX3N0YXRlX3B0cnMgKnN0YXRlX3B0cnMsXFxuK1xcdFxcdFxcdCAgY29uc3Qgc3RydWN0IHhmcm1fbWFyayAqbWFyayxcXG4rXFx0XFx0XFx0ICBjb25zdCB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsXFxuK1xcdFxcdFxcdCAgX19iZTMyIHNwaSwgdTggcHJvdG8sXFxuK1xcdFxcdFxcdCAgdW5zaWduZWQgc2hvcnQgZmFtaWx5KVxcbit7XFxuK1xcdHJldHVybiBfX3hmcm1fc3RhdGVfbG9va3VwKHN0YXRlX3B0cnMsIG1hcmstXFx1MDAzZXYsIG1hcmstXFx1MDAzZW0sIHRydWUsXFxuK1xcdFxcdFxcdFxcdCAgIGRhZGRyLCBzcGksIHByb3RvLCBmYW1pbHkpO1xcbit9XFxuK1xcbiBzdHJ1Y3QgeGZybV9zdGF0ZSAqeGZybV9pbnB1dF9zdGF0ZV9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCB1MzIgbWFyayxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgY29uc3QgeGZybV9hZGRyZXNzX3QgKmRhZGRyLFxcbiBcXHRcXHRcXHRcXHRcXHQgICBfX2JlMzIgc3BpLCB1OCBwcm90byxcXG5AQCAtMTIyOCw3ICsxMjUwLDcgQEAgc3RydWN0IHhmcm1fc3RhdGUgKnhmcm1faW5wdXRfc3RhdGVfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgdTMyIG1hcmssXFxuIFxcbiBcXHR4ZnJtX2hhc2hfcHRyc19nZXQobmV0LCBcXHUwMDI2c3RhdGVfcHRycyk7XFxuIFxcbi1cXHR4ID0gX194ZnJtX3N0YXRlX2xvb2t1cChcXHUwMDI2c3RhdGVfcHRycywgbWFyaywgZGFkZHIsIHNwaSwgcHJvdG8sIGZhbWlseSk7XFxuK1xcdHggPSBfX3hmcm1fc3RhdGVfbG9va3VwKFxcdTAwMjZzdGF0ZV9wdHJzLCBtYXJrLCAwLCBmYWxzZSwgZGFkZHIsIHNwaSwgcHJvdG8sIGZhbWlseSk7XFxuIFxcdGlmICh4KSB7XFxuIFxcdFxcdHNwaW5fbG9jayhcXHUwMDI2bmV0LVxcdTAwM2V4ZnJtLnhmcm1fc3RhdGVfbG9jayk7XFxuIFxcdFxcdGlmICh4LVxcdTAwM2VrbS5zdGF0ZSAhPSBYRlJNX1NUQVRFX1ZBTElEKSB7XFxuQEAgLTEyNTIsMTEgKzEyNzQsMTIgQEAgc3RydWN0IHhmcm1fc3RhdGUgKnhmcm1faW5wdXRfc3RhdGVfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgdTMyIG1hcmssXFxuIH1cXG4gRVhQT1JUX1NZTUJPTCh4ZnJtX2lucHV0X3N0YXRlX2xvb2t1cCk7XFxuIFxcbi1zdGF0aWMgc3RydWN0IHhmcm1fc3RhdGUgKl9feGZybV9zdGF0ZV9sb29rdXBfYnlhZGRyKGNvbnN0IHN0cnVjdCB4ZnJtX2hhc2hfc3RhdGVfcHRycyAqc3RhdGVfcHRycyxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgICB1MzIgbWFyayxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBjb25zdCB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgY29uc3QgeGZybV9hZGRyZXNzX3QgKnNhZGRyLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIHU4IHByb3RvLCB1bnNpZ25lZCBzaG9ydCBmYW1pbHkpXFxuK3N0YXRpYyBzdHJ1Y3QgeGZybV9zdGF0ZSAqXFxuK19feGZybV9zdGF0ZV9sb29rdXBfYnlhZGRyKGNvbnN0IHN0cnVjdCB4ZnJtX2hhc2hfc3RhdGVfcHRycyAqc3RhdGVfcHRycyxcXG4rXFx0XFx0XFx0ICAgdTMyIG1hcmssIHUzMiBtYXNrLCBib29sIGV4YWN0LFxcbitcXHRcXHRcXHQgICBjb25zdCB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsXFxuK1xcdFxcdFxcdCAgIGNvbnN0IHhmcm1fYWRkcmVzc190ICpzYWRkcixcXG4rXFx0XFx0XFx0ICAgdTggcHJvdG8sIHVuc2lnbmVkIHNob3J0IGZhbWlseSlcXG4ge1xcbiBcXHR1bnNpZ25lZCBpbnQgaCA9IF9feGZybV9zcmNfaGFzaChkYWRkciwgc2FkZHIsIGZhbWlseSwgc3RhdGVfcHRycy1cXHUwMDNlaG1hc2spO1xcbiBcXHRzdHJ1Y3QgeGZybV9zdGF0ZSAqeDtcXG5AQCAtMTI2OCw3ICsxMjkxLDcgQEAgc3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlICpfX3hmcm1fc3RhdGVfbG9va3VwX2J5YWRkcihjb25zdCBzdHJ1Y3QgeGZybV9oYXNoX3N0YXRcXG4gXFx0XFx0ICAgICF4ZnJtX2FkZHJfZXF1YWwoXFx1MDAyNngtXFx1MDAzZXByb3BzLnNhZGRyLCBzYWRkciwgZmFtaWx5KSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbi1cXHRcXHRpZiAoKG1hcmsgXFx1MDAyNiB4LVxcdTAwM2VtYXJrLm0pICE9IHgtXFx1MDAzZW1hcmsudilcXG4rXFx0XFx0aWYgKCF4ZnJtX3N0YXRlX21hcmtfbWF0Y2hlcyh4LCBtYXJrLCBtYXNrLCBleGFjdCkpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRpZiAoIXhmcm1fc3RhdGVfaG9sZF9yY3UoeCkpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbkBAIC0xMjg4LDEwICsxMzExLDMxIEBAIF9feGZybV9zdGF0ZV9sb2NhdGUoc3RydWN0IHhmcm1fc3RhdGUgKngsIGludCB1c2Vfc3BpLCBpbnQgZmFtaWx5KVxcbiBcXHR4ZnJtX2hhc2hfcHRyc19nZXQobmV0LCBcXHUwMDI2c3RhdGVfcHRycyk7XFxuIFxcbiBcXHRpZiAodXNlX3NwaSlcXG4tXFx0XFx0cmV0dXJuIF9feGZybV9zdGF0ZV9sb29rdXAoXFx1MDAyNnN0YXRlX3B0cnMsIG1hcmssIFxcdTAwMjZ4LVxcdTAwM2VpZC5kYWRkcixcXG4rXFx0XFx0cmV0dXJuIF9feGZybV9zdGF0ZV9sb29rdXAoXFx1MDAyNnN0YXRlX3B0cnMsIG1hcmssIDAsIGZhbHNlLCBcXHUwMDI2eC1cXHUwMDNlaWQuZGFkZHIsXFxuIFxcdFxcdFxcdFxcdFxcdCAgIHgtXFx1MDAzZWlkLnNwaSwgeC1cXHUwMDNlaWQucHJvdG8sIGZhbWlseSk7XFxuIFxcdGVsc2VcXG4tXFx0XFx0cmV0dXJuIF9feGZybV9zdGF0ZV9sb29rdXBfYnlhZGRyKFxcdTAwMjZzdGF0ZV9wdHJzLCBtYXJrLFxcbitcXHRcXHRyZXR1cm4gX194ZnJtX3N0YXRlX2xvb2t1cF9ieWFkZHIoXFx1MDAyNnN0YXRlX3B0cnMsIG1hcmssIDAsIGZhbHNlLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZ4LVxcdTAwM2VpZC5kYWRkcixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2eC1cXHUwMDNlcHJvcHMuc2FkZHIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgeC1cXHUwMDNlaWQucHJvdG8sIGZhbWlseSk7XFxuK31cXG4rXFxuKy8qIFVzZWQgYnkgeGZybV9zdGF0ZV91cGRhdGUoKSBvbmx5OyB4ZnJtX3N0YXRlX2FkZCgpJ3MgZHVwIGNoZWNrIGtlZXBzXFxuKyAqIHVzaW5nIHRoZSB3aWxkY2FyZCBfX3hmcm1fc3RhdGVfbG9jYXRlKCkgYWJvdmUuXFxuKyAqL1xcbitzdGF0aWMgaW5saW5lIHN0cnVjdCB4ZnJtX3N0YXRlICpcXG4rX194ZnJtX3N0YXRlX2xvY2F0ZV9leGFjdChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgaW50IHVzZV9zcGksIGludCBmYW1pbHkpXFxuK3tcXG4rXFx0c3RydWN0IHhmcm1faGFzaF9zdGF0ZV9wdHJzIHN0YXRlX3B0cnM7XFxuK1xcdHN0cnVjdCBuZXQgKm5ldCA9IHhzX25ldCh4KTtcXG4rXFxuK1xcdHhmcm1faGFzaF9wdHJzX2dldChuZXQsIFxcdTAwMjZzdGF0ZV9wdHJzKTtcXG4rXFxuK1xcdGlmICh1c2Vfc3BpKVxcbitcXHRcXHRyZXR1cm4gX194ZnJtX3N0YXRlX2xvb2t1cF9leGFjdChcXHUwMDI2c3RhdGVfcHRycywgXFx1MDAyNngtXFx1MDAzZW1hcmssIFxcdTAwMjZ4LVxcdTAwM2VpZC5kYWRkcixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IHgtXFx1MDAzZWlkLnNwaSwgeC1cXHUwMDNlaWQucHJvdG8sIGZhbWlseSk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0cmV0dXJuIF9feGZybV9zdGF0ZV9sb29rdXBfYnlhZGRyKFxcdTAwMjZzdGF0ZV9wdHJzLCB4LVxcdTAwM2VtYXJrLnYsIHgtXFx1MDAzZW1hcmsubSwgdHJ1ZSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2eC1cXHUwMDNlaWQuZGFkZHIsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNngtXFx1MDAzZXByb3BzLnNhZGRyLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgIHgtXFx1MDAzZWlkLnByb3RvLCBmYW1pbHkpO1xcbkBAIC0yMTc3LDEwICsyMjIxLDEyIEBAIGludCB4ZnJtX3N0YXRlX21pZ3JhdGVfaW5zdGFsbChjb25zdCBzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcXG4gXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4ge1xcbiBcXHRpZiAobS1cXHUwMDNlbmV3X2ZhbWlseSA9PSBtLVxcdTAwM2VvbGRfZmFtaWx5IFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICB4ZnJtX2FkZHJfZXF1YWwoXFx1MDAyNngtXFx1MDAzZWlkLmRhZGRyLCBcXHUwMDI2bS1cXHUwMDNlbmV3X2RhZGRyLCBtLVxcdTAwM2VuZXdfZmFtaWx5KSkge1xcbitcXHQgICAgeGZybV9hZGRyX2VxdWFsKFxcdTAwMjZ4LVxcdTAwM2VpZC5kYWRkciwgXFx1MDAyNm0tXFx1MDAzZW5ld19kYWRkciwgbS1cXHUwMDNlbmV3X2ZhbWlseSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIHhjLVxcdTAwM2VtYXJrLnYgPT0geC1cXHUwMDNlbWFyay52IFxcdTAwMjZcXHUwMDI2IHhjLVxcdTAwM2VtYXJrLm0gPT0geC1cXHUwMDNlbWFyay5tKSB7XFxuIFxcdFxcdC8qXFxuLVxcdFxcdCAqIENhcmUgaXMgbmVlZGVkIHdoZW4gdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3Mgb2YgdGhlIHN0YXRlIGlzXFxuLVxcdFxcdCAqIHRvIGJlIHVwZGF0ZWQgYXMgaXQgaXMgYSBwYXJ0IG9mIHRyaXBsZXQuXFxuK1xcdFxcdCAqIENhcmUgaXMgbmVlZGVkIHdoZW4gdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3Mgb3IgbWFyayBvZiB0aGVcXG4rXFx0XFx0ICogc3RhdGUgaXMgdG8gYmUgdXBkYXRlZCwgYXMgdGhleSBhcmUgcGFydCBvZiB0aGUgbG9va3VwXFxuK1xcdFxcdCAqIHRyaXBsZXQuXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHR4ZnJtX3N0YXRlX2luc2VydCh4Yyk7XFxuIFxcdH0gZWxzZSB7XFxuQEAgLTIyMjksNyArMjI3NSw3IEBAIGludCB4ZnJtX3N0YXRlX3VwZGF0ZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcXG4gXFx0dG9fcHV0ID0gTlVMTDtcXG4gXFxuIFxcdHNwaW5fbG9ja19iaChcXHUwMDI2bmV0LVxcdTAwM2V4ZnJtLnhmcm1fc3RhdGVfbG9jayk7XFxuLVxcdHgxID0gX194ZnJtX3N0YXRlX2xvY2F0ZSh4LCB1c2Vfc3BpLCB4LVxcdTAwM2Vwcm9wcy5mYW1pbHkpO1xcbitcXHR4MSA9IF9feGZybV9zdGF0ZV9sb2NhdGVfZXhhY3QoeCwgdXNlX3NwaSwgeC1cXHUwMDNlcHJvcHMuZmFtaWx5KTtcXG4gXFxuIFxcdGVyciA9IC1FU1JDSDtcXG4gXFx0aWYgKCF4MSlcXG5AQCAtMjM3NCwxNCArMjQyMCwxNCBAQCB4ZnJtX3N0YXRlX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBtYXJrLCBjb25zdCB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsIF9fYmUzMlxcbiBcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIFxcdHhmcm1faGFzaF9wdHJzX2dldChuZXQsIFxcdTAwMjZzdGF0ZV9wdHJzKTtcXG4gXFxuLVxcdHggPSBfX3hmcm1fc3RhdGVfbG9va3VwKFxcdTAwMjZzdGF0ZV9wdHJzLCBtYXJrLCBkYWRkciwgc3BpLCBwcm90bywgZmFtaWx5KTtcXG4rXFx0eCA9IF9feGZybV9zdGF0ZV9sb29rdXAoXFx1MDAyNnN0YXRlX3B0cnMsIG1hcmssIDAsIGZhbHNlLCBkYWRkciwgc3BpLCBwcm90bywgZmFtaWx5KTtcXG4gXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcdHJldHVybiB4O1xcbiB9XFxuIEVYUE9SVF9TWU1CT0woeGZybV9zdGF0ZV9sb29rdXApO1xcbiBcXG4gc3RydWN0IHhmcm1fc3RhdGUgKlxcbi14ZnJtX3N0YXRlX2xvb2t1cF9ieWFkZHIoc3RydWN0IG5ldCAqbmV0LCB1MzIgbWFyayxcXG4reGZybV9zdGF0ZV9sb29rdXBfYnlhZGRyKHN0cnVjdCBuZXQgKm5ldCwgdTMyIG1hcmssIHUzMiBtYXNrLCBib29sIGV4YWN0LFxcbiBcXHRcXHRcXHQgY29uc3QgeGZybV9hZGRyZXNzX3QgKmRhZGRyLCBjb25zdCB4ZnJtX2FkZHJlc3NfdCAqc2FkZHIsXFxuIFxcdFxcdFxcdCB1OCBwcm90bywgdW5zaWduZWQgc2hvcnQgZmFtaWx5KVxcbiB7XFxuQEAgLTIzOTIsMTIgKzI0MzgsMjkgQEAgeGZybV9zdGF0ZV9sb29rdXBfYnlhZGRyKHN0cnVjdCBuZXQgKm5ldCwgdTMyIG1hcmssXFxuIFxcbiBcXHR4ZnJtX2hhc2hfcHRyc19nZXQobmV0LCBcXHUwMDI2c3RhdGVfcHRycyk7XFxuIFxcbi1cXHR4ID0gX194ZnJtX3N0YXRlX2xvb2t1cF9ieWFkZHIoXFx1MDAyNnN0YXRlX3B0cnMsIG1hcmssIGRhZGRyLCBzYWRkciwgcHJvdG8sIGZhbWlseSk7XFxuK1xcdHggPSBfX3hmcm1fc3RhdGVfbG9va3VwX2J5YWRkcihcXHUwMDI2c3RhdGVfcHRycywgbWFyaywgbWFzaywgZXhhY3QsIGRhZGRyLCBzYWRkciwgcHJvdG8sIGZhbWlseSk7XFxuIFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXHRyZXR1cm4geDtcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKHhmcm1fc3RhdGVfbG9va3VwX2J5YWRkcik7XFxuIFxcbitzdHJ1Y3QgeGZybV9zdGF0ZSAqXFxuK3hmcm1fc3RhdGVfbG9va3VwX2V4YWN0KHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IHhmcm1fbWFyayAqbWFyayxcXG4rXFx0XFx0XFx0Y29uc3QgeGZybV9hZGRyZXNzX3QgKmRhZGRyLCBfX2JlMzIgc3BpLFxcbitcXHRcXHRcXHR1OCBwcm90bywgdW5zaWduZWQgc2hvcnQgZmFtaWx5KVxcbit7XFxuK1xcdHN0cnVjdCB4ZnJtX2hhc2hfc3RhdGVfcHRycyBzdGF0ZV9wdHJzO1xcbitcXHRzdHJ1Y3QgeGZybV9zdGF0ZSAqeDtcXG4rXFxuK1xcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFx0eGZybV9oYXNoX3B0cnNfZ2V0KG5ldCwgXFx1MDAyNnN0YXRlX3B0cnMpO1xcbitcXG4rXFx0eCA9IF9feGZybV9zdGF0ZV9sb29rdXBfZXhhY3QoXFx1MDAyNnN0YXRlX3B0cnMsIG1hcmssIGRhZGRyLCBzcGksIHByb3RvLCBmYW1pbHkpO1xcbitcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4rXFx0cmV0dXJuIHg7XFxuK31cXG4rRVhQT1JUX1NZTUJPTCh4ZnJtX3N0YXRlX2xvb2t1cF9leGFjdCk7XFxuK1xcbiBzdHJ1Y3QgeGZybV9zdGF0ZSAqXFxuIHhmcm1fZmluZF9hY3Eoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgeGZybV9tYXJrICptYXJrLCB1OCBtb2RlLCB1MzIgcmVxaWQsXFxuIFxcdCAgICAgIHUzMiBpZl9pZCwgdTMyIHBjcHVfbnVtLCB1OCBwcm90bywgY29uc3QgeGZybV9hZGRyZXNzX3QgKmRhZGRyLFxcbkBAIC0zMzA2LDcgKzMzNjksNyBAQCBpbnQgeGZybV9pbml0X3N0YXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcbi1cXHRlcnIgPSB4ZnJtX2luaXRfcmVwbGF5KHgsIE5VTEwpO1xcbitcXHRlcnIgPSB4ZnJtX2luaXRfcmVwbGF5KHgsIGV4dGFjayk7XFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3VzZXIuYyBiL25ldC94ZnJtL3hmcm1fdXNlci5jXFxuaW5kZXggNjM4NDc5NWVlNmIyNjkuLmEyMzE3ZTZlNjgwMmRkIDEwMDY0NFxcbi0tLSBhL25ldC94ZnJtL3hmcm1fdXNlci5jXFxuKysrIGIvbmV0L3hmcm0veGZybV91c2VyLmNcXG5AQCAtMTA4OSwxMSArMTA4OSwxMiBAQCBzdGF0aWMgc3RydWN0IHhmcm1fc3RhdGUgKnhmcm1fdXNlcl9zdGF0ZV9sb29rdXAoc3RydWN0IG5ldCAqbmV0LFxcbiBcXHRzdHJ1Y3QgeGZybV9zdGF0ZSAqeCA9IE5VTEw7XFxuIFxcdHN0cnVjdCB4ZnJtX21hcmsgbTtcXG4gXFx0aW50IGVycjtcXG4tXFx0dTMyIG1hcmsgPSB4ZnJtX21hcmtfZ2V0KGF0dHJzLCBcXHUwMDI2bSk7XFxuK1xcbitcXHR4ZnJtX21hcmtfZ2V0KGF0dHJzLCBcXHUwMDI2bSk7XFxuIFxcbiBcXHRpZiAoeGZybV9pZF9wcm90b19tYXRjaChwLVxcdTAwM2Vwcm90bywgSVBTRUNfUFJPVE9fQU5ZKSkge1xcbiBcXHRcXHRlcnIgPSAtRVNSQ0g7XFxuLVxcdFxcdHggPSB4ZnJtX3N0YXRlX2xvb2t1cChuZXQsIG1hcmssIFxcdTAwMjZwLVxcdTAwM2VkYWRkciwgcC1cXHUwMDNlc3BpLCBwLVxcdTAwM2Vwcm90bywgcC1cXHUwMDNlZmFtaWx5KTtcXG4rXFx0XFx0eCA9IHhmcm1fc3RhdGVfbG9va3VwX2V4YWN0KG5ldCwgXFx1MDAyNm0sIFxcdTAwMjZwLVxcdTAwM2VkYWRkciwgcC1cXHUwMDNlc3BpLCBwLVxcdTAwM2Vwcm90bywgcC1cXHUwMDNlZmFtaWx5KTtcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0eGZybV9hZGRyZXNzX3QgKnNhZGRyID0gTlVMTDtcXG4gXFxuQEAgLTExMDQsNyArMTEwNSw3IEBAIHN0YXRpYyBzdHJ1Y3QgeGZybV9zdGF0ZSAqeGZybV91c2VyX3N0YXRlX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcdFxcdH1cXG4gXFxuIFxcdFxcdGVyciA9IC1FU1JDSDtcXG4tXFx0XFx0eCA9IHhmcm1fc3RhdGVfbG9va3VwX2J5YWRkcihuZXQsIG1hcmssXFxuK1xcdFxcdHggPSB4ZnJtX3N0YXRlX2xvb2t1cF9ieWFkZHIobmV0LCBtLnYsIG0ubSwgdHJ1ZSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2cC1cXHUwMDNlZGFkZHIsIHNhZGRyLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgIHAtXFx1MDAzZXByb3RvLCBwLVxcdTAwM2VmYW1pbHkpO1xcbiBcXHR9XFxuQEAgLTI3ODgsMTQgKzI3ODksMTMgQEAgc3RhdGljIGludCB4ZnJtX2dldF9hZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4gXFx0c3RydWN0IHNrX2J1ZmYgKnJfc2tiO1xcbiBcXHRpbnQgZXJyO1xcbiBcXHRzdHJ1Y3Qga21fZXZlbnQgYztcXG4tXFx0dTMyIG1hcms7XFxuIFxcdHN0cnVjdCB4ZnJtX21hcmsgbTtcXG4gXFx0c3RydWN0IHhmcm1fYWV2ZW50X2lkICpwID0gbmxtc2dfZGF0YShubGgpO1xcbiBcXHRzdHJ1Y3QgeGZybV91c2Vyc2FfaWQgKmlkID0gXFx1MDAyNnAtXFx1MDAzZXNhX2lkO1xcbiBcXG4tXFx0bWFyayA9IHhmcm1fbWFya19nZXQoYXR0cnMsIFxcdTAwMjZtKTtcXG4rXFx0eGZybV9tYXJrX2dldChhdHRycywgXFx1MDAyNm0pO1xcbiBcXG4tXFx0eCA9IHhmcm1fc3RhdGVfbG9va3VwKG5ldCwgbWFyaywgXFx1MDAyNmlkLVxcdTAwM2VkYWRkciwgaWQtXFx1MDAzZXNwaSwgaWQtXFx1MDAzZXByb3RvLCBpZC1cXHUwMDNlZmFtaWx5KTtcXG4rXFx0eCA9IHhmcm1fc3RhdGVfbG9va3VwX2V4YWN0KG5ldCwgXFx1MDAyNm0sIFxcdTAwMjZpZC1cXHUwMDNlZGFkZHIsIGlkLVxcdTAwM2VzcGksIGlkLVxcdTAwM2Vwcm90bywgaWQtXFx1MDAzZWZhbWlseSk7XFxuIFxcdGlmICh4ID09IE5VTEwpXFxuIFxcdFxcdHJldHVybiAtRVNSQ0g7XFxuIFxcbkBAIC0yODM2LDcgKzI4MzYsNiBAQCBzdGF0aWMgaW50IHhmcm1fbmV3X2FlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbiBcXHRzdHJ1Y3QgeGZybV9zdGF0ZSAqeDtcXG4gXFx0c3RydWN0IGttX2V2ZW50IGM7XFxuIFxcdGludCBlcnIgPSAtRUlOVkFMO1xcbi1cXHR1MzIgbWFyayA9IDA7XFxuIFxcdHN0cnVjdCB4ZnJtX21hcmsgbTtcXG4gXFx0c3RydWN0IHhmcm1fYWV2ZW50X2lkICpwID0gbmxtc2dfZGF0YShubGgpO1xcbiBcXHRzdHJ1Y3QgbmxhdHRyICpycCA9IGF0dHJzW1hGUk1BX1JFUExBWV9WQUxdO1xcbkBAIC0yODU2LDkgKzI4NTUsMTAgQEAgc3RhdGljIGludCB4ZnJtX25ld19hZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0fVxcbiBcXG4tXFx0bWFyayA9IHhmcm1fbWFya19nZXQoYXR0cnMsIFxcdTAwMjZtKTtcXG4rXFx0eGZybV9tYXJrX2dldChhdHRycywgXFx1MDAyNm0pO1xcbiBcXG4tXFx0eCA9IHhmcm1fc3RhdGVfbG9va3VwKG5ldCwgbWFyaywgXFx1MDAyNnAtXFx1MDAzZXNhX2lkLmRhZGRyLCBwLVxcdTAwM2VzYV9pZC5zcGksIHAtXFx1MDAzZXNhX2lkLnByb3RvLCBwLVxcdTAwM2VzYV9pZC5mYW1pbHkpO1xcbitcXHR4ID0geGZybV9zdGF0ZV9sb29rdXBfZXhhY3QobmV0LCBcXHUwMDI2bSwgXFx1MDAyNnAtXFx1MDAzZXNhX2lkLmRhZGRyLCBwLVxcdTAwM2VzYV9pZC5zcGksXFxuK1xcdFxcdFxcdFxcdCAgICBwLVxcdTAwM2VzYV9pZC5wcm90bywgcC1cXHUwMDNlc2FfaWQuZmFtaWx5KTtcXG4gXFx0aWYgKHggPT0gTlVMTClcXG4gXFx0XFx0cmV0dXJuIC1FU1JDSDtcXG4gXFxuQEAgLTI5OTIsOSArMjk5MiwxMCBAQCBzdGF0aWMgaW50IHhmcm1fYWRkX3NhX2V4cGlyZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4gXFx0c3RydWN0IHhmcm1fdXNlcl9leHBpcmUgKnVlID0gbmxtc2dfZGF0YShubGgpO1xcbiBcXHRzdHJ1Y3QgeGZybV91c2Vyc2FfaW5mbyAqcCA9IFxcdTAwMjZ1ZS1cXHUwMDNlc3RhdGU7XFxuIFxcdHN0cnVjdCB4ZnJtX21hcmsgbTtcXG4tXFx0dTMyIG1hcmsgPSB4ZnJtX21hcmtfZ2V0KGF0dHJzLCBcXHUwMDI2bSk7XFxuIFxcbi1cXHR4ID0geGZybV9zdGF0ZV9sb29rdXAobmV0LCBtYXJrLCBcXHUwMDI2cC1cXHUwMDNlaWQuZGFkZHIsIHAtXFx1MDAzZWlkLnNwaSwgcC1cXHUwMDNlaWQucHJvdG8sIHAtXFx1MDAzZWZhbWlseSk7XFxuK1xcdHhmcm1fbWFya19nZXQoYXR0cnMsIFxcdTAwMjZtKTtcXG4rXFxuK1xcdHggPSB4ZnJtX3N0YXRlX2xvb2t1cF9leGFjdChuZXQsIFxcdTAwMjZtLCBcXHUwMDI2cC1cXHUwMDNlaWQuZGFkZHIsIHAtXFx1MDAzZWlkLnNwaSwgcC1cXHUwMDNlaWQucHJvdG8sIHAtXFx1MDAzZWZhbWlseSk7XFxuIFxcbiBcXHRlcnIgPSAtRU5PRU5UO1xcbiBcXHRpZiAoeCA9PSBOVUxMKVxcbkBAIC0zMzYxLDkgKzMzNjIsOSBAQCBzdGF0aWMgaW50IHhmcm1fZG9fbWlncmF0ZV9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4gXFxuIFxcdGNvcHlfZnJvbV91c2VyX21pZ3JhdGVfc3RhdGUoXFx1MDAyNm0sIHVtKTtcXG4gXFxuLVxcdHggPSB4ZnJtX3N0YXRlX2xvb2t1cChuZXQsIG0ub2xkX21hcmsudiBcXHUwMDI2IG0ub2xkX21hcmsubSxcXG4tXFx0XFx0XFx0ICAgICAgXFx1MDAyNnVtLVxcdTAwM2VpZC5kYWRkciwgdW0tXFx1MDAzZWlkLnNwaSxcXG4tXFx0XFx0XFx0ICAgICAgdW0tXFx1MDAzZWlkLnByb3RvLCB1bS1cXHUwMDNlaWQuZmFtaWx5KTtcXG4rXFx0eCA9IHhmcm1fc3RhdGVfbG9va3VwX2V4YWN0KG5ldCwgXFx1MDAyNm0ub2xkX21hcmssXFxuK1xcdFxcdFxcdFxcdCAgICBcXHUwMDI2dW0tXFx1MDAzZWlkLmRhZGRyLCB1bS1cXHUwMDNlaWQuc3BpLFxcbitcXHRcXHRcXHRcXHQgICAgdW0tXFx1MDAzZWlkLnByb3RvLCB1bS1cXHUwMDNlaWQuZmFtaWx5KTtcXG4gXFx0aWYgKCF4KSB7XFxuIFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIkNhbiBub3QgZmluZCBzdGF0ZVxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gLUVTUkNIO1xcbkBAIC0zNDM0LDE4ICszNDM1LDIzIEBAIHN0YXRpYyBpbnQgeGZybV9kb19taWdyYXRlX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgeC1cXHUwMDNlbmF0X2tlZXBhbGl2ZV9pbnRlcnZhbCk7XFxuIFxcbiBcXHRpZiAobS5uZXdfZmFtaWx5ICE9IHVtLVxcdTAwM2VpZC5mYW1pbHkgfHxcXG4tXFx0ICAgICF4ZnJtX2FkZHJfZXF1YWwoXFx1MDAyNm0ubmV3X2RhZGRyLCBcXHUwMDI2dW0tXFx1MDAzZWlkLmRhZGRyLCB1bS1cXHUwMDNlaWQuZmFtaWx5KSkge1xcbitcXHQgICAgIXhmcm1fYWRkcl9lcXVhbChcXHUwMDI2bS5uZXdfZGFkZHIsIFxcdTAwMjZ1bS1cXHUwMDNlaWQuZGFkZHIsIHVtLVxcdTAwM2VpZC5mYW1pbHkpIHx8XFxuK1xcdCAgICAobS5uZXdfbWFyayBcXHUwMDI2XFx1MDAyNiAobS5uZXdfbWFyay1cXHUwMDNldiAhPSB4LVxcdTAwM2VtYXJrLnYgfHxcXG4rXFx0XFx0XFx0ICAgbS5uZXdfbWFyay1cXHUwMDNlbSAhPSB4LVxcdTAwM2VtYXJrLm0pKSkge1xcbiBcXHRcXHR1MzIgbmV3X21hcmtfa2V5ID0gbS5uZXdfbWFyayA/IG0ubmV3X21hcmstXFx1MDAzZXYgXFx1MDAyNiBtLm5ld19tYXJrLVxcdTAwM2VtIDpcXG4tXFx0XFx0XFx0XFx0XFx0XFx0bS5vbGRfbWFyay52IFxcdTAwMjYgbS5vbGRfbWFyay5tO1xcbitcXHRcXHRcXHRcXHRcXHRcXHR4LVxcdTAwM2VtYXJrLnYgXFx1MDAyNiB4LVxcdTAwM2VtYXJrLm07XFxuIFxcdFxcdHN0cnVjdCB4ZnJtX3N0YXRlICp4X25ldztcXG4gXFxuIFxcdFxcdHhfbmV3ID0geGZybV9zdGF0ZV9sb29rdXAobmV0LCBuZXdfbWFya19rZXksIFxcdTAwMjZtLm5ld19kYWRkcixcXG4gXFx0XFx0XFx0XFx0XFx0ICB1bS1cXHUwMDNlaWQuc3BpLCB1bS1cXHUwMDNlaWQucHJvdG8sIG0ubmV3X2ZhbWlseSk7XFxuIFxcdFxcdGlmICh4X25ldykge1xcbiBcXHRcXHRcXHR4ZnJtX3N0YXRlX3B1dCh4X25ldyk7XFxuLVxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIk5ldyBTQSB0dXBsZSBhbHJlYWR5IG9jY3VwaWVkXFxcIik7XFxuLVxcdFxcdFxcdGVyciA9IC1FRVhJU1Q7XFxuLVxcdFxcdFxcdGdvdG8gb3V0O1xcbitcXHRcXHRcXHRpZiAoeF9uZXcgIT0geCkge1xcbitcXHRcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJOZXcgU0EgdHVwbGUgYWxyZWFkeSBvY2N1cGllZFxcXCIpO1xcbitcXHRcXHRcXHRcXHRlcnIgPSAtRUVYSVNUO1xcbitcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHQvKiBzZWxmLW1hdGNoIHZpYSB3aWRlIG1hcmsgbWFzazsgbm90IGEgY29sbGlzaW9uICovXFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG5AQCAtMzQ2Nyw2ICszNDczLDcgQEAgc3RhdGljIGludCB4ZnJtX2RvX21pZ3JhdGVfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuIFxcdF9feGZybV9zdGF0ZV9kZWxldGUoeCk7XFxuIFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ4LVxcdTAwM2Vsb2NrKTtcXG4gXFxuK1xcdHhmcm1fc3RhdGVfaG9sZCh4Yyk7XFxuIFxcdGVyciA9IHhmcm1fc3RhdGVfbWlncmF0ZV9pbnN0YWxsKHgsIHhjLCBcXHUwMDI2bSwgZXh0YWNrKTtcXG4gXFx0aWYgKGVyciBcXHUwMDNjIDApIHtcXG4gXFx0XFx0LypcXG5AQCAtMzQ3NCw2ICszNDgxLDcgQEAgc3RhdGljIGludCB4ZnJtX2RvX21pZ3JhdGVfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuIFxcdFxcdCAqIGZyZWUgdW5kZXIgeGZybV9jZmdfbXV0ZXguIEJvdGggU0FzIGFyZSBnb25lIGlmIGl0IGRvZXM7XFxuIFxcdFxcdCAqIHJlc3RvcmluZyB4IHdvdWxkIHJpc2sgU04vSVYgcmV1c2UuXFxuIFxcdFxcdCAqL1xcbitcXHRcXHR4ZnJtX3N0YXRlX3B1dCh4Yyk7XFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXHR9XFxuIFxcbkBAIC0zNDkyLDEwICszNTAwLDEzIEBAIHN0YXRpYyBpbnQgeGZybV9kb19taWdyYXRlX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbiBcXHRcXHRlcnIgPSAwO1xcbiBcXHR9XFxuIFxcbitcXHR4ZnJtX3N0YXRlX3B1dCh4Yyk7XFxuIG91dDpcXG4gXFx0eGZybV9zdGF0ZV9wdXQoeCk7XFxuIFxcdHJldHVybiBlcnI7XFxuIG91dF94YzpcXG4rXFx0aWYgKG0ueHVvKVxcbitcXHRcXHR4ZnJtX2Rldl9zdGF0ZV9kZWxldGUoeGMpO1xcbiBcXHR4Yy1cXHUwMDNla20uc3RhdGUgPSBYRlJNX1NUQVRFX0RFQUQ7XFxuIFxcdHhmcm1fc3RhdGVfcHV0KHhjKTtcXG4gXFx0eGZybV9zdGF0ZV9wdXQoeCk7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC94ZnJtX3N0YXRlLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3hmcm1fc3RhdGUuc2hcXG5pbmRleCBmNmM1NGE2NDk2ZDcxNC4uZjIwMjA3MzcyNmE5ZjQgMTAwNzU1XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3hmcm1fc3RhdGUuc2hcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQveGZybV9zdGF0ZS5zaFxcbkBAIC00Miw3ICs0MiwxMSBAQCB0ZXN0cz1cXFwiXFxuIFxcdG10dV9pcHY0X3IyXFx0XFx0XFx0SVB2NCBNVFUgZXhjZWVkZWQgZnJvbSBFU1Agcm91dGVyIHIyXFxuIFxcdG10dV9pcHY2X3IyXFx0XFx0XFx0SVB2NiBNVFUgZXhjZWVkZWQgZnJvbSBFU1Agcm91dGVyIHIyXFxuIFxcdG10dV9pcHY0X3IzXFx0XFx0XFx0SVB2NCBNVFUgZXhjZWVkZWQgZnJvbSByb3V0ZXIgcjNcXG4tXFx0bXR1X2lwdjZfcjNcXHRcXHRcXHRJUHY2IE1UVSBleGNlZWRlZCBmcm9tIHJvdXRlciByM1xcXCJcXG4rXFx0bXR1X2lwdjZfcjNcXHRcXHRcXHRJUHY2IE1UVSBleGNlZWRlZCBmcm9tIHJvdXRlciByM1xcbitcXHRtYXJrX3dpbGRjYXJkX3NoYWRvd1xcdFxcdG1hcms6IHdpbGRjYXJkIFNBIGluIGJ5LXNwaSBzdGF0ZSBnZXQgbG9va3VwXFxuK1xcdG1hcmtfd2lsZGNhcmRfZGVsZXRlXFx0XFx0bWFyazogd2lsZGNhcmQgU0EgaW4gYnktc3BpIHN0YXRlIGRlbGV0ZVxcbitcXHRtYXJrX3dpbGRjYXJkX2dldF9hZGRyXFx0XFx0bWFyazogd2lsZGNhcmQgU0EgaW4gYnktYWRkcmVzcyBnZXQgbG9va3VwXFxuK1xcdG1hcmtfd2lsZGNhcmRfZGVsZXRlX2FkZHJcXHRtYXJrOiB3aWxkY2FyZCBTQSBpbiBieS1hZGRyZXNzIGRlbGV0ZVxcXCJcXG4gXFxuIHByZWZpeDQ9XFxcIjEwLjFcXFwiXFxuIHByZWZpeDY9XFxcImZjMDBcXFwiXFxuQEAgLTEwMSw2ICsxMDUsMTAgQEAgcnVuX3Rlc3QoKSB7XFxuIFxcdFxcdG10dV9pcHY2X3IyKSAgICAgICAgIHRlc3RfbXR1X2lwdjZfcjIgOztcXG4gXFx0XFx0bXR1X2lwdjRfcjMpICAgICAgICAgdGVzdF9tdHVfaXB2NF9yMyA7O1xcbiBcXHRcXHRtdHVfaXB2Nl9yMykgICAgICAgICB0ZXN0X210dV9pcHY2X3IzIDs7XFxuK1xcdFxcdG1hcmtfd2lsZGNhcmRfc2hhZG93KSAgICAgIHRlc3RfbWFya193aWxkY2FyZF9zaGFkb3cgOztcXG4rXFx0XFx0bWFya193aWxkY2FyZF9kZWxldGUpICAgICAgdGVzdF9tYXJrX3dpbGRjYXJkX2RlbGV0ZSA7O1xcbitcXHRcXHRtYXJrX3dpbGRjYXJkX2dldF9hZGRyKSAgICB0ZXN0X21hcmtfd2lsZGNhcmRfZ2V0X2FkZHIgOztcXG4rXFx0XFx0bWFya193aWxkY2FyZF9kZWxldGVfYWRkcikgdGVzdF9tYXJrX3dpbGRjYXJkX2RlbGV0ZV9hZGRyIDs7XFxuIFxcdFxcdGVzYWNcXG4gXFx0XFx0cmV0PSQ/XFxuIFxcbkBAIC0xNjcsNiArMTc1LDggQEAgc2V0dXBfbmFtZXNwYWNlcygpIHtcXG4gXFx0WyAtbiBcXFwiJHtOU19TMn1cXFwiIF0gXFx1MDAyNlxcdTAwMjYgbnNfczI9KGlwIG5ldG5zIGV4ZWMgXFxcIiR7TlNfUzJ9XFxcIikgXFx1MDAyNlxcdTAwMjYgbnNfYWN0aXZlPVxcXCIke25zX2FjdGl2ZX0gJE5TX1MyXFxcIlxcbiBcXHRbIC1uIFxcXCIke05TX1IzfVxcXCIgXSBcXHUwMDI2XFx1MDAyNiBuc19yMz0oaXAgbmV0bnMgZXhlYyBcXFwiJHtOU19SM31cXFwiKSBcXHUwMDI2XFx1MDAyNiBuc19hY3RpdmU9XFxcIiR7bnNfYWN0aXZlfSAkTlNfUjNcXFwiXFxuIFxcdFsgLW4gXFxcIiR7TlNfQn1cXFwiIF0gXFx1MDAyNlxcdTAwMjYgbnNfYWN0aXZlPVxcXCIke25zX2FjdGl2ZX0gJE5TX0JcXFwiXFxuK1xcbitcXHRyZXR1cm4gMFxcbiB9XFxuIFxcbiBhZGRyX2FkZCgpIHtcXG5AQCAtMjk1LDYgKzMwNSwxOCBAQCBzZXR1cF9uc19zZXRfdjZ4KCkge1xcbiBcXHRzZXRfeGZybV9wYXJhbXNcXG4gfVxcbiBcXG4rc2V0dXBfbnNfc2V0X3NpbXBsZSgpIHtcXG4rXFx0IyBTaW5nbGUgbmFtZXNwYWNlLCBubyB2ZXRocy9yb3V0ZXMuXFxuK1xcdG5zX3NldD1cXFwiYVxcXCJcXG4rXFx0aW1heD0xXFxuK1xcdHNyYz1cXFwiMTAuMS4xLjFcXFwiXFxuK1xcdGRzdD1cXFwiMTAuMS4xLjJcXFwiXFxuK1xcdHNyY19uZXQ9XFxcIjEwLjEuMC4wLzI0XFxcIlxcbitcXHRkc3RfbmV0PVxcXCIxMC4yLjAuMC8yNFxcXCJcXG4rXFxuK1xcdHNldF94ZnJtX3BhcmFtc1xcbit9XFxuK1xcbiBzZXR1cF9uZXR3b3JrKCkge1xcbiBcXHQjIENyZWF0ZSB2ZXRocyBhbmQgYWRkIGFkZHJlc3Nlc1xcbiBcXHRsb2NhbCAtYSBuc19jbWRcXG5AQCAtNDAzLDYgKzQyNSw3IEBAIHNldHVwKCkge1xcbiBcXHRcXHRuc19zZXRfdjR4KSAgICBzZXR1cF9uc19zZXRfdjR4IDs7XFxuIFxcdFxcdG5zX3NldF92NikgICAgIHNldHVwX25zX3NldF92NiA7O1xcbiBcXHRcXHRuc19zZXRfdjZ4KSAgICBzZXR1cF9uc19zZXRfdjZ4IDs7XFxuK1xcdFxcdG5zX3NldF9zaW1wbGUpIHNldHVwX25zX3NldF9zaW1wbGUgOztcXG4gXFx0XFx0bmFtZXNwYWNlcykgICAgc2V0dXBfbmFtZXNwYWNlcyA7O1xcbiBcXHRcXHRuZXR3b3JrKSAgICAgICBzZXR1cF9uZXR3b3JrIDs7XFxuIFxcdFxcdHhmcm0pICAgICAgICAgIHNldHVwX3hmcm0gOztcXG5AQCAtNTQ4LDYgKzU3MSwxMTEgQEAgdGVzdF9tdHVfaXB2Nl9yMygpIHtcXG4gXFx0cmV0dXJuIFxcXCIke3JjfVxcXCJcXG4gfVxcbiBcXG4rIyBTQV9kZWNveSAobWFyayAwLzAsIGFkZGVkIHNlY29uZCkgc2hhZG93cyBTQV90YXJnZXQgKG1hcmsgMS8xKSBvbiBhXFxuKyMgd2lsZGNhcmQgbWFyayBsb29rdXAuIE5vIHRyYWZmaWMgc2VudDsgdGhlc2Ugb25seSBleGVyY2lzZSB0aGUgU0FELlxcbitcXG4rdGVzdF9tYXJrX3dpbGRjYXJkX3NoYWRvdygpIHtcXG4rXFx0c2V0dXAgbnNfc2V0X3NpbXBsZSBuYW1lc3BhY2VzIHx8IHJldHVybiBcXFwiJGtzZnRfc2tpcFxcXCJcXG4rXFx0bG9jYWwgcmVzdWx0PTBcXG4rXFxuK1xcdHJ1bl9jbWQgXFxcIiR7bnNfYVtAXX1cXFwiIGlwIHhmcm0gc3RhdGUgYWRkIFxcXFxcXG4rXFx0XFx0c3JjIFxcXCIke3NyY31cXFwiIGRzdCBcXFwiJHtkc3R9XFxcIiBwcm90byBlc3Agc3BpIDB4MTAwMCBcXFxcXFxuK1xcdFxcdHJlcWlkIDEwMCBtb2RlIHR1bm5lbCBcXFxcXFxuK1xcdFxcdGFlYWQgJ3JmYzQxMDYoZ2NtKGFlcykpJyAweDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgOTYgXFxcXFxcbitcXHRcXHRtYXJrIDEgbWFzayAxXFxuK1xcbitcXHRydW5fY21kIFxcXCIke25zX2FbQF19XFxcIiBpcCB4ZnJtIHN0YXRlIGFkZCBcXFxcXFxuK1xcdFxcdHNyYyBcXFwiJHtzcmN9XFxcIiBkc3QgXFxcIiR7ZHN0fVxcXCIgcHJvdG8gZXNwIHNwaSAweDEwMDAgXFxcXFxcbitcXHRcXHRyZXFpZCAxMDAgbW9kZSB0dW5uZWwgXFxcXFxcbitcXHRcXHRhZWFkICdyZmM0MTA2KGdjbShhZXMpKScgMHgyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIDk2IFxcXFxcXG4rXFx0XFx0bWFyayAwIG1hc2sgMFxcbitcXG4rXFx0cnVuX2NtZF9lcnIgXFxcIiR7bnNfYVtAXX1cXFwiIGlwIHhmcm0gc3RhdGUgZ2V0IFxcXFxcXG4rXFx0XFx0ZHN0IFxcXCIke2RzdH1cXFwiIHByb3RvIGVzcCBzcGkgMHgxMDAwIFxcXFxcXG4rXFx0XFx0bWFyayAxIG1hc2sgMVxcbitcXG4rXFx0IyBFeHBlY3RlZDogU0FfdGFyZ2V0IChtYXJrIDB4MS8weDEpLiBBY3R1YWwgKGJ1Zyk6IFNBX2RlY295IChtYXJrIDAvMCkuXFxuK1xcdGVjaG8gXFxcIiRvdXRcXFwiIHwgZ3JlcCAtcSBcXFwibWFyayAweDEvMHgxXFxcIiB8fCByZXN1bHQ9MVxcbitcXG4rXFx0cmV0dXJuIFxcXCIke3Jlc3VsdH1cXFwiXFxuK31cXG4rXFxuK3Rlc3RfbWFya193aWxkY2FyZF9kZWxldGUoKSB7XFxuK1xcdHNldHVwIG5zX3NldF9zaW1wbGUgbmFtZXNwYWNlcyB8fCByZXR1cm4gXFxcIiRrc2Z0X3NraXBcXFwiXFxuK1xcdGxvY2FsIHJlc3VsdD0wXFxuK1xcbitcXHRydW5fY21kIFxcXCIke25zX2FbQF19XFxcIiBpcCB4ZnJtIHN0YXRlIGFkZCBcXFxcXFxuK1xcdFxcdHNyYyBcXFwiJHtzcmN9XFxcIiBkc3QgXFxcIiR7ZHN0fVxcXCIgcHJvdG8gZXNwIHNwaSAweDEwMDAgXFxcXFxcbitcXHRcXHRyZXFpZCAxMDAgbW9kZSB0dW5uZWwgXFxcXFxcbitcXHRcXHRhZWFkICdyZmM0MTA2KGdjbShhZXMpKScgMHgxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDk2IFxcXFxcXG4rXFx0XFx0bWFyayAxIG1hc2sgMVxcbitcXG4rXFx0cnVuX2NtZCBcXFwiJHtuc19hW0BdfVxcXCIgaXAgeGZybSBzdGF0ZSBhZGQgXFxcXFxcbitcXHRcXHRzcmMgXFxcIiR7c3JjfVxcXCIgZHN0IFxcXCIke2RzdH1cXFwiIHByb3RvIGVzcCBzcGkgMHgxMDAwIFxcXFxcXG4rXFx0XFx0cmVxaWQgMTAwIG1vZGUgdHVubmVsIFxcXFxcXG4rXFx0XFx0YWVhZCAncmZjNDEwNihnY20oYWVzKSknIDB4MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiA5NiBcXFxcXFxuK1xcdFxcdG1hcmsgMCBtYXNrIDBcXG4rXFxuK1xcdHJ1bl9jbWQgXFxcIiR7bnNfYVtAXX1cXFwiIGlwIHhmcm0gc3RhdGUgZGVsZXRlIFxcXFxcXG4rXFx0XFx0ZHN0IFxcXCIke2RzdH1cXFwiIHByb3RvIGVzcCBzcGkgMHgxMDAwIFxcXFxcXG4rXFx0XFx0bWFyayAxIG1hc2sgMVxcbitcXG4rXFx0cnVuX2NtZF9lcnIgXFxcIiR7bnNfYVtAXX1cXFwiIGlwIHhmcm0gc3RhdGUgc2hvd1xcbitcXHRlY2hvIFxcXCIkb3V0XFxcIiB8IGdyZXAgLXEgXFxcIm1hcmsgMHgxLzB4MVxcXCIgXFx1MDAyNlxcdTAwMjYgcmVzdWx0PTFcXG4rXFxuK1xcdHJldHVybiBcXFwiJHtyZXN1bHR9XFxcIlxcbit9XFxuK1xcbisjIGJ5LWFkZHJlc3MgY291bnRlcnBhcnQ6IHByb3RvIHJvdXRlMi9oYW8gKElQdjYgbW9iaWxpdHkpIGhhdmUgbm8gU1BJLFxcbisjIHNvIHhmcm1fdXNlcl9zdGF0ZV9sb29rdXAoKSByZXNvbHZlcyB0aGVtIGJ5IGFkZHJlc3MgaW5zdGVhZC5cXG4rXFxuK3Rlc3RfbWFya193aWxkY2FyZF9nZXRfYWRkcigpIHtcXG4rXFx0c2V0dXAgbnNfc2V0X3NpbXBsZSBuYW1lc3BhY2VzIHx8IHJldHVybiBcXFwiJGtzZnRfc2tpcFxcXCJcXG4rXFx0bG9jYWwgcmVzdWx0PTBcXG4rXFx0bG9jYWwgc3JjNj1cXFwiZmMwMDo5OjoxXFxcIlxcbitcXHRsb2NhbCBkc3Q2PVxcXCJmYzAwOjk6OjJcXFwiXFxuK1xcbitcXHRydW5fY21kIFxcXCIke25zX2FbQF19XFxcIiBpcCB4ZnJtIHN0YXRlIGFkZCBcXFxcXFxuK1xcdFxcdHNyYyBcXFwiJHtzcmM2fVxcXCIgZHN0IFxcXCIke2RzdDZ9XFxcIiBwcm90byByb3V0ZTIgbW9kZSBybyBjb2EgZmMwMDo5OjozIFxcXFxcXG4rXFx0XFx0bWFyayAxIG1hc2sgMVxcbitcXG4rXFx0cnVuX2NtZCBcXFwiJHtuc19hW0BdfVxcXCIgaXAgeGZybSBzdGF0ZSBhZGQgXFxcXFxcbitcXHRcXHRzcmMgXFxcIiR7c3JjNn1cXFwiIGRzdCBcXFwiJHtkc3Q2fVxcXCIgcHJvdG8gcm91dGUyIG1vZGUgcm8gY29hIGZjMDA6OTo6NCBcXFxcXFxuK1xcdFxcdG1hcmsgMCBtYXNrIDBcXG4rXFxuK1xcdHJ1bl9jbWRfZXJyIFxcXCIke25zX2FbQF19XFxcIiBpcCB4ZnJtIHN0YXRlIGdldCBcXFxcXFxuK1xcdFxcdHNyYyBcXFwiJHtzcmM2fVxcXCIgZHN0IFxcXCIke2RzdDZ9XFxcIiBwcm90byByb3V0ZTIgXFxcXFxcbitcXHRcXHRtYXJrIDEgbWFzayAxXFxuK1xcbitcXHRlY2hvIFxcXCIkb3V0XFxcIiB8IGdyZXAgLXEgXFxcIm1hcmsgMHgxLzB4MVxcXCIgfHwgcmVzdWx0PTFcXG4rXFxuK1xcdHJldHVybiBcXFwiJHtyZXN1bHR9XFxcIlxcbit9XFxuK1xcbit0ZXN0X21hcmtfd2lsZGNhcmRfZGVsZXRlX2FkZHIoKSB7XFxuK1xcdHNldHVwIG5zX3NldF9zaW1wbGUgbmFtZXNwYWNlcyB8fCByZXR1cm4gXFxcIiRrc2Z0X3NraXBcXFwiXFxuK1xcdGxvY2FsIHJlc3VsdD0wXFxuK1xcdGxvY2FsIHNyYzY9XFxcImZjMDA6OTo6MVxcXCJcXG4rXFx0bG9jYWwgZHN0Nj1cXFwiZmMwMDo5OjoyXFxcIlxcbitcXG4rXFx0cnVuX2NtZCBcXFwiJHtuc19hW0BdfVxcXCIgaXAgeGZybSBzdGF0ZSBhZGQgXFxcXFxcbitcXHRcXHRzcmMgXFxcIiR7c3JjNn1cXFwiIGRzdCBcXFwiJHtkc3Q2fVxcXCIgcHJvdG8gcm91dGUyIG1vZGUgcm8gY29hIGZjMDA6OTo6MyBcXFxcXFxuK1xcdFxcdG1hcmsgMSBtYXNrIDFcXG4rXFxuK1xcdHJ1bl9jbWQgXFxcIiR7bnNfYVtAXX1cXFwiIGlwIHhmcm0gc3RhdGUgYWRkIFxcXFxcXG4rXFx0XFx0c3JjIFxcXCIke3NyYzZ9XFxcIiBkc3QgXFxcIiR7ZHN0Nn1cXFwiIHByb3RvIHJvdXRlMiBtb2RlIHJvIGNvYSBmYzAwOjk6OjQgXFxcXFxcbitcXHRcXHRtYXJrIDAgbWFzayAwXFxuK1xcbitcXHRydW5fY21kIFxcXCIke25zX2FbQF19XFxcIiBpcCB4ZnJtIHN0YXRlIGRlbGV0ZSBcXFxcXFxuK1xcdFxcdHNyYyBcXFwiJHtzcmM2fVxcXCIgZHN0IFxcXCIke2RzdDZ9XFxcIiBwcm90byByb3V0ZTIgXFxcXFxcbitcXHRcXHRtYXJrIDEgbWFzayAxXFxuK1xcbitcXHRydW5fY21kX2VyciBcXFwiJHtuc19hW0BdfVxcXCIgaXAgeGZybSBzdGF0ZSBzaG93XFxuK1xcdGVjaG8gXFxcIiRvdXRcXFwiIHwgZ3JlcCAtcSBcXFwibWFyayAweDEvMHgxXFxcIiBcXHUwMDI2XFx1MDAyNiByZXN1bHQ9MVxcbitcXG4rXFx0cmV0dXJuIFxcXCIke3Jlc3VsdH1cXFwiXFxuK31cXG4rXFxuICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXFxuICNcXG4gdXNhZ2UoKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE1OjE1OjI3LjU3NDM5NjA3NFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg5NTE3NDU4OTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlhGUk1fVVNFUlwiLFxuICAgIFwiWEZSTV9NSUdSQVRFXCIsXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwieGZybV9zdGF0ZV9sb29rdXBfZXhhY3RcIixcbiAgICBcInhmcm1fc3RhdGVfbG9va3VwX2J5YWRkclwiLFxuICAgIFwieGZybV91c2VyX3N0YXRlX2xvb2t1cFwiLFxuICAgIFwieGZybV9kb19taWdyYXRlX3N0YXRlXCIsXG4gICAgXCJ4ZnJtX3N0YXRlX3VwZGF0ZVwiLFxuICAgIFwieGZybV9zdGF0ZV9taWdyYXRlX2luc3RhbGxcIixcbiAgICBcInhmcm1fZ2V0X2FlXCIsXG4gICAgXCJ4ZnJtX25ld19hZVwiLFxuICAgIFwieGZybV9hZGRfc2FfZXhwaXJlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFhGUk0gKElQc2VjKSBzdGF0ZSBsb29rdXAgbG9naWMgdG8gYWxsb3cgZXhhY3QgbWF0Y2hpbmcgb2YgbWFya3MgYW5kIG1hc2tzIGR1cmluZyBjb250cm9sIHBsYW5lIG9wZXJhdGlvbnMgKEdFVCwgREVMRVRFLCBNSUdSQVRFKS4gVGhpcyBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBuZXRsaW5rIG1lc3NhZ2VzIGFuZCBhZmZlY3RzIGNvcmUgSVBzZWMgZnVuY3Rpb25hbGl0eS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2ODMwNTkxMWU1YWJkNmU1NWRkODAyZDMwNTA3MTA5ZmNhMjUzZDQyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgNiAxNToxNToyNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy94ZnJtL3hmcm1fbWlncmF0ZV9zdGF0ZS5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcveGZybS94ZnJtX21pZ3JhdGVfc3RhdGUucnN0XG5pbmRleCA5ZDUzY2IyMmIwMDc1Mi4uOTA1ZTNmMGM0ZWUwNmYgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcveGZybS94ZnJtX21pZ3JhdGVfc3RhdGUucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcveGZybS94ZnJtX21pZ3JhdGVfc3RhdGUucnN0XG5AQCAtMjcsMTUgKzI3LDE4IEBAIFNBIElkZW50aWZpY2F0aW9uXG4gPT09PT09PT09PT09PT09PT1cbiBcbiBUaGUgc3RydWN0IGlzIGRlZmluZWQgaW4gYGBpbmNsdWRlL3VhcGkvbGludXgveGZybS5oYGAuIFRoZSBTQSBpcyBsb29rZWRcbi11cCB1c2luZyBgYHhmcm1fc3RhdGVfbG9va3VwKClgYCB3aXRoIGBgaWQuc3BpYGAsXG4tYGBpZC5kYWRkcmBgLCBgYGlkLnByb3RvYGAsIGBgaWQuZmFtaWx5YGAsIGFuZFxuLWBgb2xkX21hcmsudiBcdTAwMjYgb2xkX21hcmsubWBgIGFzIHRoZSBtYXJrIGtleTo6XG4rdXAgdXNpbmcgYGB4ZnJtX3N0YXRlX2xvb2t1cF9leGFjdCgpYGAgd2l0aCBgYGlkLnNwaWBgLCBgYGlkLmRhZGRyYGAsXG4rYGBpZC5wcm90b2BgLCBgYGlkLmZhbWlseWBgLCBhbmQgYW4gZXhhY3QgbWF0Y2ggYWdhaW5zdCBgYG9sZF9tYXJrLnZgYFxuK2FuZCBgYG9sZF9tYXJrLm1gYC4gVW5saWtlIHRoZSBkYXRhIHBhdGgsIHdoaWNoIHVzZXMgYSBtYXNrZWRcbitjb21wYXJpc29uLCB0aGlzIHJlcXVpcmVzIHRoZSBTQSdzIG1hcmsgYW5kIG1hc2sgdG8gZXF1YWwgYGBvbGRfbWFya2BgXG4rZXhhY3RseSwgc28gYSBicm9hZC1tYXNrIFNBIGlzIG5ldmVyIG1hdGNoZWQgd2hlbiBhIG1vcmUgc3BlY2lmaWMgb25lXG4rd2FzIGludGVuZGVkLiBJZiBubyBzdWNoIFNBIGV4aXN0cywgYGAtRVNSQ0hgYCBpcyByZXR1cm5lZC46OlxuIFxuICAgICBzdHJ1Y3QgeGZybV91c2VyX21pZ3JhdGVfc3RhdGUge1xuICAgICAgICAgc3RydWN0IHhmcm1fdXNlcnNhX2lkICBpZDsgICAgICAgLyogc3BpLCBkYWRkciwgcHJvdG8sIGZhbWlseSAqL1xuICAgICAgICAgeGZybV9hZGRyZXNzX3QgICAgICAgICBuZXdfZGFkZHI7XG4gICAgICAgICB4ZnJtX2FkZHJlc3NfdCAgICAgICAgIG5ld19zYWRkcjtcbi0gICAgICAgIHN0cnVjdCB4ZnJtX21hcmsgICAgICAgb2xkX21hcms7IC8qIFNBIGxvb2t1cDoga2V5ID0gdiBcdTAwMjYgbSAqL1xuKyAgICAgICAgc3RydWN0IHhmcm1fbWFyayAgICAgICBvbGRfbWFyazsgLyogU0EgbG9va3VwIGtleSAoZXhhY3Qgdi9tIG1hdGNoKSAqL1xuICAgICAgICAgc3RydWN0IHhmcm1fc2VsZWN0b3IgICBuZXdfc2VsOyAgLyogbmV3IHNlbGVjdG9yIChzZWUgRmxhZ3MpICovXG4gICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICAgIG5ld19yZXFpZDtcbiAgICAgICAgIF9fdTMyICAgICAgICAgICAgICAgICAgZmxhZ3M7ICAgIC8qIFhGUk1fTUlHUkFURV9TVEFURV8qICovXG5AQCAtNzIsOCArNzUsOCBAQCBpbmhlcml0cyB0aGUgdmFsdWUgZnJvbSB0aGUgZXhpc3RpbmcgU0EgKG9taXQtdG8taW5oZXJpdCkuXG4gICAgICAtIERlc2NyaXB0aW9uXG4gICAgKiAtIGBgWEZSTUFfTUFSS2BgXG4gICAgICAtIE1hcmsgb24gdGhlIG1pZ3JhdGVkIFNBIChgYHN0cnVjdCB4ZnJtX21hcmtgYCkuIEFic2VudCBpbmhlcml0c1xuLSAgICAgICBgYG9sZF9tYXJrYGAuIFRvIHVzZSBubyBtYXJrIG9uIHRoZSBuZXcgU0EsIHNlbmQgYGBYRlJNQV9NQVJLYGBcbi0gICAgICAgd2l0aCBgYHswLCAwfWBgLlxuKyAgICAgICB0aGUgbWFyayBvZiB0aGUgZXhpc3RpbmcgU0EuIFRvIHVzZSBubyBtYXJrIG9uIHRoZSBuZXcgU0EsIHNlbmRcbisgICAgICAgYGBYRlJNQV9NQVJLYGAgd2l0aCBgYHswLCAwfWBgLlxuICAgICogLSBgYFhGUk1BX0VOQ0FQYGBcbiAgICAgIC0gVURQIGVuY2Fwc3VsYXRpb24gdGVtcGxhdGU7IG9ubHkgYGBVRFBfRU5DQVBfRVNQSU5VRFBgYCBpcyBzdXBwb3J0ZWQuXG4gICAgICAgIFNldCBgYGVuY2FwX3R5cGU9MGBgIHRvIHJlbW92ZSBlbmNhcC5cbkBAIC0yNTksOCArMjYyLDkgQEAgQXR0cmlidXRlcyBpbiB0aGUgbm90aWZpY2F0aW9uXG4gRXJyb3IgSGFuZGxpbmdcbiA9PT09PT09PT09PT09PVxuIFxuLUlmIHRoZSB0YXJnZXQgU0EgdHVwbGUgKG5ldyBkYWRkciwgU1BJLCBwcm90bywgbmV3IGZhbWlseSkgaXMgYWxyZWFkeVxuLW9jY3VwaWVkLCB0aGUgb3BlcmF0aW9uIHJldHVybnMgYGAtRUVYSVNUYGAgYmVmb3JlIHRoZSBtaWdyYXRpb24gYmVnaW5zLlxuK0lmIHRoZSB0YXJnZXQgU0EgdHVwbGUgKG5ldyBkYWRkciwgU1BJLCBwcm90bywgbmV3IGZhbWlseSwgbWFyaykgaXNcbithbHJlYWR5IG9jY3VwaWVkLCB0aGUgb3BlcmF0aW9uIHJldHVybnMgYGAtRUVYSVNUYGAgYmVmb3JlIHRoZSBtaWdyYXRpb25cbitiZWdpbnMuXG4gVGhlIG9sZCBTQSByZW1haW5zIGludGFjdCBhbmQgdGhlIG9wZXJhdGlvbiBpcyBzYWZlIHRvIHJldHJ5IGFmdGVyXG4gcmVzb2x2aW5nIHRoZSBjb25mbGljdC5cbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC94ZnJtLmggYi9pbmNsdWRlL25ldC94ZnJtLmhcbmluZGV4IDUxOWEwMTU2YTA1Y2FjLi5lYmU1MTQzNzYyNTRhNiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L3hmcm0uaFxuKysrIGIvaW5jbHVkZS9uZXQveGZybS5oXG5AQCAtMTc0MSwxMSArMTc0MSwxNCBAQCBzdHJ1Y3QgeGZybV9zdGF0ZSAqeGZybV9pbnB1dF9zdGF0ZV9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCB1MzIgbWFyayxcbiBcdFx0XHRcdFx0ICAgY29uc3QgeGZybV9hZGRyZXNzX3QgKmRhZGRyLFxuIFx0XHRcdFx0XHQgICBfX2JlMzIgc3BpLCB1OCBwcm90byxcbiBcdFx0XHRcdFx0ICAgdW5zaWduZWQgc2hvcnQgZmFtaWx5KTtcbi1zdHJ1Y3QgeGZybV9zdGF0ZSAqeGZybV9zdGF0ZV9sb29rdXBfYnlhZGRyKHN0cnVjdCBuZXQgKm5ldCwgdTMyIG1hcmssXG4rc3RydWN0IHhmcm1fc3RhdGUgKnhmcm1fc3RhdGVfbG9va3VwX2J5YWRkcihzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBtYXJrLCB1MzIgbWFzaywgYm9vbCBleGFjdCxcbiBcdFx0XHRcdFx0ICAgIGNvbnN0IHhmcm1fYWRkcmVzc190ICpkYWRkcixcbiBcdFx0XHRcdFx0ICAgIGNvbnN0IHhmcm1fYWRkcmVzc190ICpzYWRkcixcbiBcdFx0XHRcdFx0ICAgIHU4IHByb3RvLFxuIFx0XHRcdFx0XHQgICAgdW5zaWduZWQgc2hvcnQgZmFtaWx5KTtcbitzdHJ1Y3QgeGZybV9zdGF0ZSAqeGZybV9zdGF0ZV9sb29rdXBfZXhhY3Qoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgeGZybV9tYXJrICptYXJrLFxuK1x0XHRcdFx0XHQgICBjb25zdCB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsIF9fYmUzMiBzcGksXG4rXHRcdFx0XHRcdCAgIHU4IHByb3RvLCB1bnNpZ25lZCBzaG9ydCBmYW1pbHkpO1xuICNpZmRlZiBDT05GSUdfWEZSTV9TVUJfUE9MSUNZXG4gdm9pZCB4ZnJtX3RtcGxfc29ydChzdHJ1Y3QgeGZybV90bXBsICoqZHN0LCBzdHJ1Y3QgeGZybV90bXBsICoqc3JjLCBpbnQgbixcbiBcdFx0ICAgIHVuc2lnbmVkIHNob3J0IGZhbWlseSk7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYveGZybTZfaW5wdXQuYyBiL25ldC9pcHY2L3hmcm02X2lucHV0LmNcbmluZGV4IDg5ZDA0NDNiNTMwNzMyLi4yZGQzNDdmZWNlNTJjYSAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L3hmcm02X2lucHV0LmNcbisrKyBiL25ldC9pcHY2L3hmcm02X2lucHV0LmNcbkBAIC0yNzIsNyArMjcyLDcgQEAgaW50IHhmcm02X2lucHV0X2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgeGZybV9hZGRyZXNzX3QgKmRhZGRyLFxuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXG4tXHRcdHggPSB4ZnJtX3N0YXRlX2xvb2t1cF9ieWFkZHIobmV0LCBza2ItXHUwMDNlbWFyaywgZHN0LCBzcmMsIHByb3RvLCBBRl9JTkVUNik7XG4rXHRcdHggPSB4ZnJtX3N0YXRlX2xvb2t1cF9ieWFkZHIobmV0LCBza2ItXHUwMDNlbWFyaywgMCwgZmFsc2UsIGRzdCwgc3JjLCBwcm90bywgQUZfSU5FVDYpO1xuIFx0XHRpZiAoIXgpXG4gXHRcdFx0Y29udGludWU7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9zdGF0ZS5jIGIvbmV0L3hmcm0veGZybV9zdGF0ZS5jXG5pbmRleCBjNThjZDAyNGUzYzY3NS4uMGIzZGM3Nzg5ZGQ3OTAgMTAwNjQ0XG4tLS0gYS9uZXQveGZybS94ZnJtX3N0YXRlLmNcbisrKyBiL25ldC94ZnJtL3hmcm1fc3RhdGUuY1xuQEAgLTExNzIsMTEgKzExNzIsMjIgQEAgc3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlICpfX3hmcm1fc3RhdGVfbG9va3VwX2FsbChjb25zdCBzdHJ1Y3QgeGZybV9oYXNoX3N0YXRlX3BcbiBcdHJldHVybiBOVUxMO1xuIH1cbiBcbi1zdGF0aWMgc3RydWN0IHhmcm1fc3RhdGUgKl9feGZybV9zdGF0ZV9sb29rdXAoY29uc3Qgc3RydWN0IHhmcm1faGFzaF9zdGF0ZV9wdHJzICpzdGF0ZV9wdHJzLFxuLVx0XHRcdFx0XHQgICAgICB1MzIgbWFyayxcbi1cdFx0XHRcdFx0ICAgICAgY29uc3QgeGZybV9hZGRyZXNzX3QgKmRhZGRyLFxuLVx0XHRcdFx0XHQgICAgICBfX2JlMzIgc3BpLCB1OCBwcm90byxcbi1cdFx0XHRcdFx0ICAgICAgdW5zaWduZWQgc2hvcnQgZmFtaWx5KVxuKy8qIGV4YWN0PWZhbHNlOiBkYXRhLXBsYW5lIHdpbGRjYXJkIG1hdGNoIGFnYWluc3QgeCdzIG1hc2suIGV4YWN0PXRydWU6XG4rICogY29udHJvbC1wbGFuZSBpZGVudGl0eSBtYXRjaCwgbWFyayBhbmQgbWFzayBtdXN0IGJvdGggbWF0Y2ggZXhhY3RseS5cbisgKi9cbitzdGF0aWMgYm9vbCB4ZnJtX3N0YXRlX21hcmtfbWF0Y2hlcyhjb25zdCBzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgdTMyIG1hcmssIHUzMiBtYXNrLCBib29sIGV4YWN0KVxuK3tcbitcdGlmIChleGFjdClcbitcdFx0cmV0dXJuIHgtXHUwMDNlbWFyay52ID09IG1hcmsgXHUwMDI2XHUwMDI2IHgtXHUwMDNlbWFyay5tID09IG1hc2s7XG4rXHRyZXR1cm4gKG1hcmsgXHUwMDI2IHgtXHUwMDNlbWFyay5tKSA9PSB4LVx1MDAzZW1hcmsudjtcbit9XG4rXG4rc3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlICpcbitfX3hmcm1fc3RhdGVfbG9va3VwKGNvbnN0IHN0cnVjdCB4ZnJtX2hhc2hfc3RhdGVfcHRycyAqc3RhdGVfcHRycyxcbitcdFx0ICAgIHUzMiBtYXJrLCB1MzIgbWFzaywgYm9vbCBleGFjdCxcbitcdFx0ICAgIGNvbnN0IHhmcm1fYWRkcmVzc190ICpkYWRkcixcbitcdFx0ICAgIF9fYmUzMiBzcGksIHU4IHByb3RvLFxuK1x0XHQgICAgdW5zaWduZWQgc2hvcnQgZmFtaWx5KVxuIHtcbiBcdHVuc2lnbmVkIGludCBoID0gX194ZnJtX3NwaV9oYXNoKGRhZGRyLCBzcGksIHByb3RvLCBmYW1pbHksIHN0YXRlX3B0cnMtXHUwMDNlaG1hc2spO1xuIFx0c3RydWN0IHhmcm1fc3RhdGUgKng7XG5AQCAtMTE4OCw3ICsxMTk5LDcgQEAgc3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlICpfX3hmcm1fc3RhdGVfbG9va3VwKGNvbnN0IHN0cnVjdCB4ZnJtX2hhc2hfc3RhdGVfcHRyc1xuIFx0XHQgICAgIXhmcm1fYWRkcl9lcXVhbChcdTAwMjZ4LVx1MDAzZWlkLmRhZGRyLCBkYWRkciwgZmFtaWx5KSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0aWYgKChtYXJrIFx1MDAyNiB4LVx1MDAzZW1hcmsubSkgIT0geC1cdTAwM2VtYXJrLnYpXG4rXHRcdGlmICgheGZybV9zdGF0ZV9tYXJrX21hdGNoZXMoeCwgbWFyaywgbWFzaywgZXhhY3QpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRpZiAoIXhmcm1fc3RhdGVfaG9sZF9yY3UoeCkpXG4gXHRcdFx0Y29udGludWU7XG5AQCAtMTE5OCw2ICsxMjA5LDE3IEBAIHN0YXRpYyBzdHJ1Y3QgeGZybV9zdGF0ZSAqX194ZnJtX3N0YXRlX2xvb2t1cChjb25zdCBzdHJ1Y3QgeGZybV9oYXNoX3N0YXRlX3B0cnNcbiBcdHJldHVybiBOVUxMO1xuIH1cbiBcbitzdGF0aWMgc3RydWN0IHhmcm1fc3RhdGUgKlxuK19feGZybV9zdGF0ZV9sb29rdXBfZXhhY3QoY29uc3Qgc3RydWN0IHhmcm1faGFzaF9zdGF0ZV9wdHJzICpzdGF0ZV9wdHJzLFxuK1x0XHRcdCAgY29uc3Qgc3RydWN0IHhmcm1fbWFyayAqbWFyayxcbitcdFx0XHQgIGNvbnN0IHhmcm1fYWRkcmVzc190ICpkYWRkcixcbitcdFx0XHQgIF9fYmUzMiBzcGksIHU4IHByb3RvLFxuK1x0XHRcdCAgdW5zaWduZWQgc2hvcnQgZmFtaWx5KVxuK3tcbitcdHJldHVybiBfX3hmcm1fc3RhdGVfbG9va3VwKHN0YXRlX3B0cnMsIG1hcmstXHUwMDNldiwgbWFyay1cdTAwM2VtLCB0cnVlLFxuK1x0XHRcdFx0ICAgZGFkZHIsIHNwaSwgcHJvdG8sIGZhbWlseSk7XG4rfVxuK1xuIHN0cnVjdCB4ZnJtX3N0YXRlICp4ZnJtX2lucHV0X3N0YXRlX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBtYXJrLFxuIFx0XHRcdFx0XHQgICBjb25zdCB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsXG4gXHRcdFx0XHRcdCAgIF9fYmUzMiBzcGksIHU4IHByb3RvLFxuQEAgLTEyMjgsNyArMTI1MCw3IEBAIHN0cnVjdCB4ZnJtX3N0YXRlICp4ZnJtX2lucHV0X3N0YXRlX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBtYXJrLFxuIFxuIFx0eGZybV9oYXNoX3B0cnNfZ2V0KG5ldCwgXHUwMDI2c3RhdGVfcHRycyk7XG4gXG4tXHR4ID0gX194ZnJtX3N0YXRlX2xvb2t1cChcdTAwMjZzdGF0ZV9wdHJzLCBtYXJrLCBkYWRkciwgc3BpLCBwcm90bywgZmFtaWx5KTtcbitcdHggPSBfX3hmcm1fc3RhdGVfbG9va3VwKFx1MDAyNnN0YXRlX3B0cnMsIG1hcmssIDAsIGZhbHNlLCBkYWRkciwgc3BpLCBwcm90bywgZmFtaWx5KTtcbiBcdGlmICh4KSB7XG4gXHRcdHNwaW5fbG9jayhcdTAwMjZuZXQtXHUwMDNleGZybS54ZnJtX3N0YXRlX2xvY2spO1xuIFx0XHRpZiAoeC1cdTAwM2VrbS5zdGF0ZSAhPSBYRlJNX1NUQVRFX1ZBTElEKSB7XG5AQCAtMTI1MiwxMSArMTI3NCwxMiBAQCBzdHJ1Y3QgeGZybV9zdGF0ZSAqeGZybV9pbnB1dF9zdGF0ZV9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCB1MzIgbWFyayxcbiB9XG4gRVhQT1JUX1NZTUJPTCh4ZnJtX2lucHV0X3N0YXRlX2xvb2t1cCk7XG4gXG4tc3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlICpfX3hmcm1fc3RhdGVfbG9va3VwX2J5YWRkcihjb25zdCBzdHJ1Y3QgeGZybV9oYXNoX3N0YXRlX3B0cnMgKnN0YXRlX3B0cnMsXG4tXHRcdFx0XHRcdFx0ICAgICB1MzIgbWFyayxcbi1cdFx0XHRcdFx0XHQgICAgIGNvbnN0IHhmcm1fYWRkcmVzc190ICpkYWRkcixcbi1cdFx0XHRcdFx0XHQgICAgIGNvbnN0IHhmcm1fYWRkcmVzc190ICpzYWRkcixcbi1cdFx0XHRcdFx0XHQgICAgIHU4IHByb3RvLCB1bnNpZ25lZCBzaG9ydCBmYW1pbHkpXG4rc3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlICpcbitfX3hmcm1fc3RhdGVfbG9va3VwX2J5YWRkcihjb25zdCBzdHJ1Y3QgeGZybV9oYXNoX3N0YXRlX3B0cnMgKnN0YXRlX3B0cnMsXG4rXHRcdFx0ICAgdTMyIG1hcmssIHUzMiBtYXNrLCBib29sIGV4YWN0LFxuK1x0XHRcdCAgIGNvbnN0IHhmcm1fYWRkcmVzc190ICpkYWRkcixcbitcdFx0XHQgICBjb25zdCB4ZnJtX2FkZHJlc3NfdCAqc2FkZHIsXG4rXHRcdFx0ICAgdTggcHJvdG8sIHVuc2lnbmVkIHNob3J0IGZhbWlseSlcbiB7XG4gXHR1bnNpZ25lZCBpbnQgaCA9IF9feGZybV9zcmNfaGFzaChkYWRkciwgc2FkZHIsIGZhbWlseSwgc3RhdGVfcHRycy1cdTAwM2VobWFzayk7XG4gXHRzdHJ1Y3QgeGZybV9zdGF0ZSAqeDtcbkBAIC0xMjY4LDcgKzEyOTEsNyBAQCBzdGF0aWMgc3RydWN0IHhmcm1fc3RhdGUgKl9feGZybV9zdGF0ZV9sb29rdXBfYnlhZGRyKGNvbnN0IHN0cnVjdCB4ZnJtX2hhc2hfc3RhdFxuIFx0XHQgICAgIXhmcm1fYWRkcl9lcXVhbChcdTAwMjZ4LVx1MDAzZXByb3BzLnNhZGRyLCBzYWRkciwgZmFtaWx5KSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0aWYgKChtYXJrIFx1MDAyNiB4LVx1MDAzZW1hcmsubSkgIT0geC1cdTAwM2VtYXJrLnYpXG4rXHRcdGlmICgheGZybV9zdGF0ZV9tYXJrX21hdGNoZXMoeCwgbWFyaywgbWFzaywgZXhhY3QpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRpZiAoIXhmcm1fc3RhdGVfaG9sZF9yY3UoeCkpXG4gXHRcdFx0Y29udGludWU7XG5AQCAtMTI4OCwxMCArMTMxMSwzMSBAQCBfX3hmcm1fc3RhdGVfbG9jYXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBpbnQgdXNlX3NwaSwgaW50IGZhbWlseSlcbiBcdHhmcm1faGFzaF9wdHJzX2dldChuZXQsIFx1MDAyNnN0YXRlX3B0cnMpO1xuIFxuIFx0aWYgKHVzZV9zcGkpXG4tXHRcdHJldHVybiBfX3hmcm1fc3RhdGVfbG9va3VwKFx1MDAyNnN0YXRlX3B0cnMsIG1hcmssIFx1MDAyNngtXHUwMDNlaWQuZGFkZHIsXG4rXHRcdHJldHVybiBfX3hmcm1fc3RhdGVfbG9va3VwKFx1MDAyNnN0YXRlX3B0cnMsIG1hcmssIDAsIGZhbHNlLCBcdTAwMjZ4LVx1MDAzZWlkLmRhZGRyLFxuIFx0XHRcdFx0XHQgICB4LVx1MDAzZWlkLnNwaSwgeC1cdTAwM2VpZC5wcm90bywgZmFtaWx5KTtcbiBcdGVsc2Vcbi1cdFx0cmV0dXJuIF9feGZybV9zdGF0ZV9sb29rdXBfYnlhZGRyKFx1MDAyNnN0YXRlX3B0cnMsIG1hcmssXG4rXHRcdHJldHVybiBfX3hmcm1fc3RhdGVfbG9va3VwX2J5YWRkcihcdTAwMjZzdGF0ZV9wdHJzLCBtYXJrLCAwLCBmYWxzZSxcbitcdFx0XHRcdFx0XHQgIFx1MDAyNngtXHUwMDNlaWQuZGFkZHIsXG4rXHRcdFx0XHRcdFx0ICBcdTAwMjZ4LVx1MDAzZXByb3BzLnNhZGRyLFxuK1x0XHRcdFx0XHRcdCAgeC1cdTAwM2VpZC5wcm90bywgZmFtaWx5KTtcbit9XG4rXG4rLyogVXNlZCBieSB4ZnJtX3N0YXRlX3VwZGF0ZSgpIG9ubHk7IHhmcm1fc3RhdGVfYWRkKCkncyBkdXAgY2hlY2sga2VlcHNcbisgKiB1c2luZyB0aGUgd2lsZGNhcmQgX194ZnJtX3N0YXRlX2xvY2F0ZSgpIGFib3ZlLlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgc3RydWN0IHhmcm1fc3RhdGUgKlxuK19feGZybV9zdGF0ZV9sb2NhdGVfZXhhY3Qoc3RydWN0IHhmcm1fc3RhdGUgKngsIGludCB1c2Vfc3BpLCBpbnQgZmFtaWx5KVxuK3tcbitcdHN0cnVjdCB4ZnJtX2hhc2hfc3RhdGVfcHRycyBzdGF0ZV9wdHJzO1xuK1x0c3RydWN0IG5ldCAqbmV0ID0geHNfbmV0KHgpO1xuK1xuK1x0eGZybV9oYXNoX3B0cnNfZ2V0KG5ldCwgXHUwMDI2c3RhdGVfcHRycyk7XG4rXG4rXHRpZiAodXNlX3NwaSlcbitcdFx0cmV0dXJuIF9feGZybV9zdGF0ZV9sb29rdXBfZXhhY3QoXHUwMDI2c3RhdGVfcHRycywgXHUwMDI2eC1cdTAwM2VtYXJrLCBcdTAwMjZ4LVx1MDAzZWlkLmRhZGRyLFxuK1x0XHRcdFx0XHRcdCB4LVx1MDAzZWlkLnNwaSwgeC1cdTAwM2VpZC5wcm90bywgZmFtaWx5KTtcbitcdGVsc2VcbitcdFx0cmV0dXJuIF9feGZybV9zdGF0ZV9sb29rdXBfYnlhZGRyKFx1MDAyNnN0YXRlX3B0cnMsIHgtXHUwMDNlbWFyay52LCB4LVx1MDAzZW1hcmsubSwgdHJ1ZSxcbiBcdFx0XHRcdFx0XHQgIFx1MDAyNngtXHUwMDNlaWQuZGFkZHIsXG4gXHRcdFx0XHRcdFx0ICBcdTAwMjZ4LVx1MDAzZXByb3BzLnNhZGRyLFxuIFx0XHRcdFx0XHRcdCAgeC1cdTAwM2VpZC5wcm90bywgZmFtaWx5KTtcbkBAIC0yMTc3LDEwICsyMjIxLDEyIEBAIGludCB4ZnJtX3N0YXRlX21pZ3JhdGVfaW5zdGFsbChjb25zdCBzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcbiBcdFx0XHQgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiBcdGlmIChtLVx1MDAzZW5ld19mYW1pbHkgPT0gbS1cdTAwM2VvbGRfZmFtaWx5IFx1MDAyNlx1MDAyNlxuLVx0ICAgIHhmcm1fYWRkcl9lcXVhbChcdTAwMjZ4LVx1MDAzZWlkLmRhZGRyLCBcdTAwMjZtLVx1MDAzZW5ld19kYWRkciwgbS1cdTAwM2VuZXdfZmFtaWx5KSkge1xuK1x0ICAgIHhmcm1fYWRkcl9lcXVhbChcdTAwMjZ4LVx1MDAzZWlkLmRhZGRyLCBcdTAwMjZtLVx1MDAzZW5ld19kYWRkciwgbS1cdTAwM2VuZXdfZmFtaWx5KSBcdTAwMjZcdTAwMjZcbitcdCAgICB4Yy1cdTAwM2VtYXJrLnYgPT0geC1cdTAwM2VtYXJrLnYgXHUwMDI2XHUwMDI2IHhjLVx1MDAzZW1hcmsubSA9PSB4LVx1MDAzZW1hcmsubSkge1xuIFx0XHQvKlxuLVx0XHQgKiBDYXJlIGlzIG5lZWRlZCB3aGVuIHRoZSBkZXN0aW5hdGlvbiBhZGRyZXNzIG9mIHRoZSBzdGF0ZSBpc1xuLVx0XHQgKiB0byBiZSB1cGRhdGVkIGFzIGl0IGlzIGEgcGFydCBvZiB0cmlwbGV0LlxuK1x0XHQgKiBDYXJlIGlzIG5lZWRlZCB3aGVuIHRoZSBkZXN0aW5hdGlvbiBhZGRyZXNzIG9yIG1hcmsgb2YgdGhlXG4rXHRcdCAqIHN0YXRlIGlzIHRvIGJlIHVwZGF0ZWQsIGFzIHRoZXkgYXJlIHBhcnQgb2YgdGhlIGxvb2t1cFxuK1x0XHQgKiB0cmlwbGV0LlxuIFx0XHQgKi9cbiBcdFx0eGZybV9zdGF0ZV9pbnNlcnQoeGMpO1xuIFx0fSBlbHNlIHtcbkBAIC0yMjI5LDcgKzIyNzUsNyBAQCBpbnQgeGZybV9zdGF0ZV91cGRhdGUoc3RydWN0IHhmcm1fc3RhdGUgKngpXG4gXHR0b19wdXQgPSBOVUxMO1xuIFxuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNm5ldC1cdTAwM2V4ZnJtLnhmcm1fc3RhdGVfbG9jayk7XG4tXHR4MSA9IF9feGZybV9zdGF0ZV9sb2NhdGUoeCwgdXNlX3NwaSwgeC1cdTAwM2Vwcm9wcy5mYW1pbHkpO1xuK1x0eDEgPSBfX3hmcm1fc3RhdGVfbG9jYXRlX2V4YWN0KHgsIHVzZV9zcGksIHgtXHUwMDNlcHJvcHMuZmFtaWx5KTtcbiBcbiBcdGVyciA9IC1FU1JDSDtcbiBcdGlmICgheDEpXG5AQCAtMjM3NCwxNCArMjQyMCwxNCBAQCB4ZnJtX3N0YXRlX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBtYXJrLCBjb25zdCB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsIF9fYmUzMlxuIFx0cmN1X3JlYWRfbG9jaygpO1xuIFx0eGZybV9oYXNoX3B0cnNfZ2V0KG5ldCwgXHUwMDI2c3RhdGVfcHRycyk7XG4gXG4tXHR4ID0gX194ZnJtX3N0YXRlX2xvb2t1cChcdTAwMjZzdGF0ZV9wdHJzLCBtYXJrLCBkYWRkciwgc3BpLCBwcm90bywgZmFtaWx5KTtcbitcdHggPSBfX3hmcm1fc3RhdGVfbG9va3VwKFx1MDAyNnN0YXRlX3B0cnMsIG1hcmssIDAsIGZhbHNlLCBkYWRkciwgc3BpLCBwcm90bywgZmFtaWx5KTtcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0cmV0dXJuIHg7XG4gfVxuIEVYUE9SVF9TWU1CT0woeGZybV9zdGF0ZV9sb29rdXApO1xuIFxuIHN0cnVjdCB4ZnJtX3N0YXRlICpcbi14ZnJtX3N0YXRlX2xvb2t1cF9ieWFkZHIoc3RydWN0IG5ldCAqbmV0LCB1MzIgbWFyayxcbit4ZnJtX3N0YXRlX2xvb2t1cF9ieWFkZHIoc3RydWN0IG5ldCAqbmV0LCB1MzIgbWFyaywgdTMyIG1hc2ssIGJvb2wgZXhhY3QsXG4gXHRcdFx0IGNvbnN0IHhmcm1fYWRkcmVzc190ICpkYWRkciwgY29uc3QgeGZybV9hZGRyZXNzX3QgKnNhZGRyLFxuIFx0XHRcdCB1OCBwcm90bywgdW5zaWduZWQgc2hvcnQgZmFtaWx5KVxuIHtcbkBAIC0yMzkyLDEyICsyNDM4LDI5IEBAIHhmcm1fc3RhdGVfbG9va3VwX2J5YWRkcihzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBtYXJrLFxuIFxuIFx0eGZybV9oYXNoX3B0cnNfZ2V0KG5ldCwgXHUwMDI2c3RhdGVfcHRycyk7XG4gXG4tXHR4ID0gX194ZnJtX3N0YXRlX2xvb2t1cF9ieWFkZHIoXHUwMDI2c3RhdGVfcHRycywgbWFyaywgZGFkZHIsIHNhZGRyLCBwcm90bywgZmFtaWx5KTtcbitcdHggPSBfX3hmcm1fc3RhdGVfbG9va3VwX2J5YWRkcihcdTAwMjZzdGF0ZV9wdHJzLCBtYXJrLCBtYXNrLCBleGFjdCwgZGFkZHIsIHNhZGRyLCBwcm90bywgZmFtaWx5KTtcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0cmV0dXJuIHg7XG4gfVxuIEVYUE9SVF9TWU1CT0woeGZybV9zdGF0ZV9sb29rdXBfYnlhZGRyKTtcbiBcbitzdHJ1Y3QgeGZybV9zdGF0ZSAqXG4reGZybV9zdGF0ZV9sb29rdXBfZXhhY3Qoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgeGZybV9tYXJrICptYXJrLFxuK1x0XHRcdGNvbnN0IHhmcm1fYWRkcmVzc190ICpkYWRkciwgX19iZTMyIHNwaSxcbitcdFx0XHR1OCBwcm90bywgdW5zaWduZWQgc2hvcnQgZmFtaWx5KVxuK3tcbitcdHN0cnVjdCB4ZnJtX2hhc2hfc3RhdGVfcHRycyBzdGF0ZV9wdHJzO1xuK1x0c3RydWN0IHhmcm1fc3RhdGUgKng7XG4rXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHR4ZnJtX2hhc2hfcHRyc19nZXQobmV0LCBcdTAwMjZzdGF0ZV9wdHJzKTtcbitcbitcdHggPSBfX3hmcm1fc3RhdGVfbG9va3VwX2V4YWN0KFx1MDAyNnN0YXRlX3B0cnMsIG1hcmssIGRhZGRyLCBzcGksIHByb3RvLCBmYW1pbHkpO1xuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXHRyZXR1cm4geDtcbit9XG4rRVhQT1JUX1NZTUJPTCh4ZnJtX3N0YXRlX2xvb2t1cF9leGFjdCk7XG4rXG4gc3RydWN0IHhmcm1fc3RhdGUgKlxuIHhmcm1fZmluZF9hY3Eoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgeGZybV9tYXJrICptYXJrLCB1OCBtb2RlLCB1MzIgcmVxaWQsXG4gXHQgICAgICB1MzIgaWZfaWQsIHUzMiBwY3B1X251bSwgdTggcHJvdG8sIGNvbnN0IHhmcm1fYWRkcmVzc190ICpkYWRkcixcbkBAIC0zMzA2LDcgKzMzNjksNyBAQCBpbnQgeGZybV9pbml0X3N0YXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuLVx0ZXJyID0geGZybV9pbml0X3JlcGxheSh4LCBOVUxMKTtcbitcdGVyciA9IHhmcm1faW5pdF9yZXBsYXkoeCwgZXh0YWNrKTtcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV91c2VyLmMgYi9uZXQveGZybS94ZnJtX3VzZXIuY1xuaW5kZXggNjM4NDc5NWVlNmIyNjkuLmEyMzE3ZTZlNjgwMmRkIDEwMDY0NFxuLS0tIGEvbmV0L3hmcm0veGZybV91c2VyLmNcbisrKyBiL25ldC94ZnJtL3hmcm1fdXNlci5jXG5AQCAtMTA4OSwxMSArMTA4OSwxMiBAQCBzdGF0aWMgc3RydWN0IHhmcm1fc3RhdGUgKnhmcm1fdXNlcl9zdGF0ZV9sb29rdXAoc3RydWN0IG5ldCAqbmV0LFxuIFx0c3RydWN0IHhmcm1fc3RhdGUgKnggPSBOVUxMO1xuIFx0c3RydWN0IHhmcm1fbWFyayBtO1xuIFx0aW50IGVycjtcbi1cdHUzMiBtYXJrID0geGZybV9tYXJrX2dldChhdHRycywgXHUwMDI2bSk7XG4rXG4rXHR4ZnJtX21hcmtfZ2V0KGF0dHJzLCBcdTAwMjZtKTtcbiBcbiBcdGlmICh4ZnJtX2lkX3Byb3RvX21hdGNoKHAtXHUwMDNlcHJvdG8sIElQU0VDX1BST1RPX0FOWSkpIHtcbiBcdFx0ZXJyID0gLUVTUkNIO1xuLVx0XHR4ID0geGZybV9zdGF0ZV9sb29rdXAobmV0LCBtYXJrLCBcdTAwMjZwLVx1MDAzZWRhZGRyLCBwLVx1MDAzZXNwaSwgcC1cdTAwM2Vwcm90bywgcC1cdTAwM2VmYW1pbHkpO1xuK1x0XHR4ID0geGZybV9zdGF0ZV9sb29rdXBfZXhhY3QobmV0LCBcdTAwMjZtLCBcdTAwMjZwLVx1MDAzZWRhZGRyLCBwLVx1MDAzZXNwaSwgcC1cdTAwM2Vwcm90bywgcC1cdTAwM2VmYW1pbHkpO1xuIFx0fSBlbHNlIHtcbiBcdFx0eGZybV9hZGRyZXNzX3QgKnNhZGRyID0gTlVMTDtcbiBcbkBAIC0xMTA0LDcgKzExMDUsNyBAQCBzdGF0aWMgc3RydWN0IHhmcm1fc3RhdGUgKnhmcm1fdXNlcl9zdGF0ZV9sb29rdXAoc3RydWN0IG5ldCAqbmV0LFxuIFx0XHR9XG4gXG4gXHRcdGVyciA9IC1FU1JDSDtcbi1cdFx0eCA9IHhmcm1fc3RhdGVfbG9va3VwX2J5YWRkcihuZXQsIG1hcmssXG4rXHRcdHggPSB4ZnJtX3N0YXRlX2xvb2t1cF9ieWFkZHIobmV0LCBtLnYsIG0ubSwgdHJ1ZSxcbiBcdFx0XHRcdFx0ICAgICBcdTAwMjZwLVx1MDAzZWRhZGRyLCBzYWRkcixcbiBcdFx0XHRcdFx0ICAgICBwLVx1MDAzZXByb3RvLCBwLVx1MDAzZWZhbWlseSk7XG4gXHR9XG5AQCAtMjc4OCwxNCArMjc4OSwxMyBAQCBzdGF0aWMgaW50IHhmcm1fZ2V0X2FlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuIFx0c3RydWN0IHNrX2J1ZmYgKnJfc2tiO1xuIFx0aW50IGVycjtcbiBcdHN0cnVjdCBrbV9ldmVudCBjO1xuLVx0dTMyIG1hcms7XG4gXHRzdHJ1Y3QgeGZybV9tYXJrIG07XG4gXHRzdHJ1Y3QgeGZybV9hZXZlbnRfaWQgKnAgPSBubG1zZ19kYXRhKG5saCk7XG4gXHRzdHJ1Y3QgeGZybV91c2Vyc2FfaWQgKmlkID0gXHUwMDI2cC1cdTAwM2VzYV9pZDtcbiBcbi1cdG1hcmsgPSB4ZnJtX21hcmtfZ2V0KGF0dHJzLCBcdTAwMjZtKTtcbitcdHhmcm1fbWFya19nZXQoYXR0cnMsIFx1MDAyNm0pO1xuIFxuLVx0eCA9IHhmcm1fc3RhdGVfbG9va3VwKG5ldCwgbWFyaywgXHUwMDI2aWQtXHUwMDNlZGFkZHIsIGlkLVx1MDAzZXNwaSwgaWQtXHUwMDNlcHJvdG8sIGlkLVx1MDAzZWZhbWlseSk7XG4rXHR4ID0geGZybV9zdGF0ZV9sb29rdXBfZXhhY3QobmV0LCBcdTAwMjZtLCBcdTAwMjZpZC1cdTAwM2VkYWRkciwgaWQtXHUwMDNlc3BpLCBpZC1cdTAwM2Vwcm90bywgaWQtXHUwMDNlZmFtaWx5KTtcbiBcdGlmICh4ID09IE5VTEwpXG4gXHRcdHJldHVybiAtRVNSQ0g7XG4gXG5AQCAtMjgzNiw3ICsyODM2LDYgQEAgc3RhdGljIGludCB4ZnJtX25ld19hZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbiBcdHN0cnVjdCB4ZnJtX3N0YXRlICp4O1xuIFx0c3RydWN0IGttX2V2ZW50IGM7XG4gXHRpbnQgZXJyID0gLUVJTlZBTDtcbi1cdHUzMiBtYXJrID0gMDtcbiBcdHN0cnVjdCB4ZnJtX21hcmsgbTtcbiBcdHN0cnVjdCB4ZnJtX2FldmVudF9pZCAqcCA9IG5sbXNnX2RhdGEobmxoKTtcbiBcdHN0cnVjdCBubGF0dHIgKnJwID0gYXR0cnNbWEZSTUFfUkVQTEFZX1ZBTF07XG5AQCAtMjg1Niw5ICsyODU1LDEwIEBAIHN0YXRpYyBpbnQgeGZybV9uZXdfYWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4gXHRcdHJldHVybiBlcnI7XG4gXHR9XG4gXG4tXHRtYXJrID0geGZybV9tYXJrX2dldChhdHRycywgXHUwMDI2bSk7XG4rXHR4ZnJtX21hcmtfZ2V0KGF0dHJzLCBcdTAwMjZtKTtcbiBcbi1cdHggPSB4ZnJtX3N0YXRlX2xvb2t1cChuZXQsIG1hcmssIFx1MDAyNnAtXHUwMDNlc2FfaWQuZGFkZHIsIHAtXHUwMDNlc2FfaWQuc3BpLCBwLVx1MDAzZXNhX2lkLnByb3RvLCBwLVx1MDAzZXNhX2lkLmZhbWlseSk7XG4rXHR4ID0geGZybV9zdGF0ZV9sb29rdXBfZXhhY3QobmV0LCBcdTAwMjZtLCBcdTAwMjZwLVx1MDAzZXNhX2lkLmRhZGRyLCBwLVx1MDAzZXNhX2lkLnNwaSxcbitcdFx0XHRcdCAgICBwLVx1MDAzZXNhX2lkLnByb3RvLCBwLVx1MDAzZXNhX2lkLmZhbWlseSk7XG4gXHRpZiAoeCA9PSBOVUxMKVxuIFx0XHRyZXR1cm4gLUVTUkNIO1xuIFxuQEAgLTI5OTIsOSArMjk5MiwxMCBAQCBzdGF0aWMgaW50IHhmcm1fYWRkX3NhX2V4cGlyZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbiBcdHN0cnVjdCB4ZnJtX3VzZXJfZXhwaXJlICp1ZSA9IG5sbXNnX2RhdGEobmxoKTtcbiBcdHN0cnVjdCB4ZnJtX3VzZXJzYV9pbmZvICpwID0gXHUwMDI2dWUtXHUwMDNlc3RhdGU7XG4gXHRzdHJ1Y3QgeGZybV9tYXJrIG07XG4tXHR1MzIgbWFyayA9IHhmcm1fbWFya19nZXQoYXR0cnMsIFx1MDAyNm0pO1xuIFxuLVx0eCA9IHhmcm1fc3RhdGVfbG9va3VwKG5ldCwgbWFyaywgXHUwMDI2cC1cdTAwM2VpZC5kYWRkciwgcC1cdTAwM2VpZC5zcGksIHAtXHUwMDNlaWQucHJvdG8sIHAtXHUwMDNlZmFtaWx5KTtcbitcdHhmcm1fbWFya19nZXQoYXR0cnMsIFx1MDAyNm0pO1xuK1xuK1x0eCA9IHhmcm1fc3RhdGVfbG9va3VwX2V4YWN0KG5ldCwgXHUwMDI2bSwgXHUwMDI2cC1cdTAwM2VpZC5kYWRkciwgcC1cdTAwM2VpZC5zcGksIHAtXHUwMDNlaWQucHJvdG8sIHAtXHUwMDNlZmFtaWx5KTtcbiBcbiBcdGVyciA9IC1FTk9FTlQ7XG4gXHRpZiAoeCA9PSBOVUxMKVxuQEAgLTMzNjEsOSArMzM2Miw5IEBAIHN0YXRpYyBpbnQgeGZybV9kb19taWdyYXRlX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuIFxuIFx0Y29weV9mcm9tX3VzZXJfbWlncmF0ZV9zdGF0ZShcdTAwMjZtLCB1bSk7XG4gXG4tXHR4ID0geGZybV9zdGF0ZV9sb29rdXAobmV0LCBtLm9sZF9tYXJrLnYgXHUwMDI2IG0ub2xkX21hcmsubSxcbi1cdFx0XHQgICAgICBcdTAwMjZ1bS1cdTAwM2VpZC5kYWRkciwgdW0tXHUwMDNlaWQuc3BpLFxuLVx0XHRcdCAgICAgIHVtLVx1MDAzZWlkLnByb3RvLCB1bS1cdTAwM2VpZC5mYW1pbHkpO1xuK1x0eCA9IHhmcm1fc3RhdGVfbG9va3VwX2V4YWN0KG5ldCwgXHUwMDI2bS5vbGRfbWFyayxcbitcdFx0XHRcdCAgICBcdTAwMjZ1bS1cdTAwM2VpZC5kYWRkciwgdW0tXHUwMDNlaWQuc3BpLFxuK1x0XHRcdFx0ICAgIHVtLVx1MDAzZWlkLnByb3RvLCB1bS1cdTAwM2VpZC5mYW1pbHkpO1xuIFx0aWYgKCF4KSB7XG4gXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCJDYW4gbm90IGZpbmQgc3RhdGVcIik7XG4gXHRcdHJldHVybiAtRVNSQ0g7XG5AQCAtMzQzNCwxOCArMzQzNSwyMyBAQCBzdGF0aWMgaW50IHhmcm1fZG9fbWlncmF0ZV9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbiBcdFx0XHRcdFx0XHQgICAgICAgeC1cdTAwM2VuYXRfa2VlcGFsaXZlX2ludGVydmFsKTtcbiBcbiBcdGlmIChtLm5ld19mYW1pbHkgIT0gdW0tXHUwMDNlaWQuZmFtaWx5IHx8XG4tXHQgICAgIXhmcm1fYWRkcl9lcXVhbChcdTAwMjZtLm5ld19kYWRkciwgXHUwMDI2dW0tXHUwMDNlaWQuZGFkZHIsIHVtLVx1MDAzZWlkLmZhbWlseSkpIHtcbitcdCAgICAheGZybV9hZGRyX2VxdWFsKFx1MDAyNm0ubmV3X2RhZGRyLCBcdTAwMjZ1bS1cdTAwM2VpZC5kYWRkciwgdW0tXHUwMDNlaWQuZmFtaWx5KSB8fFxuK1x0ICAgIChtLm5ld19tYXJrIFx1MDAyNlx1MDAyNiAobS5uZXdfbWFyay1cdTAwM2V2ICE9IHgtXHUwMDNlbWFyay52IHx8XG4rXHRcdFx0ICAgbS5uZXdfbWFyay1cdTAwM2VtICE9IHgtXHUwMDNlbWFyay5tKSkpIHtcbiBcdFx0dTMyIG5ld19tYXJrX2tleSA9IG0ubmV3X21hcmsgPyBtLm5ld19tYXJrLVx1MDAzZXYgXHUwMDI2IG0ubmV3X21hcmstXHUwMDNlbSA6XG4tXHRcdFx0XHRcdFx0bS5vbGRfbWFyay52IFx1MDAyNiBtLm9sZF9tYXJrLm07XG4rXHRcdFx0XHRcdFx0eC1cdTAwM2VtYXJrLnYgXHUwMDI2IHgtXHUwMDNlbWFyay5tO1xuIFx0XHRzdHJ1Y3QgeGZybV9zdGF0ZSAqeF9uZXc7XG4gXG4gXHRcdHhfbmV3ID0geGZybV9zdGF0ZV9sb29rdXAobmV0LCBuZXdfbWFya19rZXksIFx1MDAyNm0ubmV3X2RhZGRyLFxuIFx0XHRcdFx0XHQgIHVtLVx1MDAzZWlkLnNwaSwgdW0tXHUwMDNlaWQucHJvdG8sIG0ubmV3X2ZhbWlseSk7XG4gXHRcdGlmICh4X25ldykge1xuIFx0XHRcdHhmcm1fc3RhdGVfcHV0KHhfbmV3KTtcbi1cdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwiTmV3IFNBIHR1cGxlIGFscmVhZHkgb2NjdXBpZWRcIik7XG4tXHRcdFx0ZXJyID0gLUVFWElTVDtcbi1cdFx0XHRnb3RvIG91dDtcbitcdFx0XHRpZiAoeF9uZXcgIT0geCkge1xuK1x0XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcIk5ldyBTQSB0dXBsZSBhbHJlYWR5IG9jY3VwaWVkXCIpO1xuK1x0XHRcdFx0ZXJyID0gLUVFWElTVDtcbitcdFx0XHRcdGdvdG8gb3V0O1xuK1x0XHRcdH1cbitcdFx0XHQvKiBzZWxmLW1hdGNoIHZpYSB3aWRlIG1hcmsgbWFzazsgbm90IGEgY29sbGlzaW9uICovXG4gXHRcdH1cbiBcdH1cbiBcbkBAIC0zNDY3LDYgKzM0NzMsNyBAQCBzdGF0aWMgaW50IHhmcm1fZG9fbWlncmF0ZV9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbiBcdF9feGZybV9zdGF0ZV9kZWxldGUoeCk7XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZ4LVx1MDAzZWxvY2spO1xuIFxuK1x0eGZybV9zdGF0ZV9ob2xkKHhjKTtcbiBcdGVyciA9IHhmcm1fc3RhdGVfbWlncmF0ZV9pbnN0YWxsKHgsIHhjLCBcdTAwMjZtLCBleHRhY2spO1xuIFx0aWYgKGVyciBcdTAwM2MgMCkge1xuIFx0XHQvKlxuQEAgLTM0NzQsNiArMzQ4MSw3IEBAIHN0YXRpYyBpbnQgeGZybV9kb19taWdyYXRlX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuIFx0XHQgKiBmcmVlIHVuZGVyIHhmcm1fY2ZnX211dGV4LiBCb3RoIFNBcyBhcmUgZ29uZSBpZiBpdCBkb2VzO1xuIFx0XHQgKiByZXN0b3JpbmcgeCB3b3VsZCByaXNrIFNOL0lWIHJldXNlLlxuIFx0XHQgKi9cbitcdFx0eGZybV9zdGF0ZV9wdXQoeGMpO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbkBAIC0zNDkyLDEwICszNTAwLDEzIEBAIHN0YXRpYyBpbnQgeGZybV9kb19taWdyYXRlX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuIFx0XHRlcnIgPSAwO1xuIFx0fVxuIFxuK1x0eGZybV9zdGF0ZV9wdXQoeGMpO1xuIG91dDpcbiBcdHhmcm1fc3RhdGVfcHV0KHgpO1xuIFx0cmV0dXJuIGVycjtcbiBvdXRfeGM6XG4rXHRpZiAobS54dW8pXG4rXHRcdHhmcm1fZGV2X3N0YXRlX2RlbGV0ZSh4Yyk7XG4gXHR4Yy1cdTAwM2VrbS5zdGF0ZSA9IFhGUk1fU1RBVEVfREVBRDtcbiBcdHhmcm1fc3RhdGVfcHV0KHhjKTtcbiBcdHhmcm1fc3RhdGVfcHV0KHgpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC94ZnJtX3N0YXRlLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3hmcm1fc3RhdGUuc2hcbmluZGV4IGY2YzU0YTY0OTZkNzE0Li5mMjAyMDczNzI2YTlmNCAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC94ZnJtX3N0YXRlLnNoXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQveGZybV9zdGF0ZS5zaFxuQEAgLTQyLDcgKzQyLDExIEBAIHRlc3RzPVwiXG4gXHRtdHVfaXB2NF9yMlx0XHRcdElQdjQgTVRVIGV4Y2VlZGVkIGZyb20gRVNQIHJvdXRlciByMlxuIFx0bXR1X2lwdjZfcjJcdFx0XHRJUHY2IE1UVSBleGNlZWRlZCBmcm9tIEVTUCByb3V0ZXIgcjJcbiBcdG10dV9pcHY0X3IzXHRcdFx0SVB2NCBNVFUgZXhjZWVkZWQgZnJvbSByb3V0ZXIgcjNcbi1cdG10dV9pcHY2X3IzXHRcdFx0SVB2NiBNVFUgZXhjZWVkZWQgZnJvbSByb3V0ZXIgcjNcIlxuK1x0bXR1X2lwdjZfcjNcdFx0XHRJUHY2IE1UVSBleGNlZWRlZCBmcm9tIHJvdXRlciByM1xuK1x0bWFya193aWxkY2FyZF9zaGFkb3dcdFx0bWFyazogd2lsZGNhcmQgU0EgaW4gYnktc3BpIHN0YXRlIGdldCBsb29rdXBcbitcdG1hcmtfd2lsZGNhcmRfZGVsZXRlXHRcdG1hcms6IHdpbGRjYXJkIFNBIGluIGJ5LXNwaSBzdGF0ZSBkZWxldGVcbitcdG1hcmtfd2lsZGNhcmRfZ2V0X2FkZHJcdFx0bWFyazogd2lsZGNhcmQgU0EgaW4gYnktYWRkcmVzcyBnZXQgbG9va3VwXG4rXHRtYXJrX3dpbGRjYXJkX2RlbGV0ZV9hZGRyXHRtYXJrOiB3aWxkY2FyZCBTQSBpbiBieS1hZGRyZXNzIGRlbGV0ZVwiXG4gXG4gcHJlZml4ND1cIjEwLjFcIlxuIHByZWZpeDY9XCJmYzAwXCJcbkBAIC0xMDEsNiArMTA1LDEwIEBAIHJ1bl90ZXN0KCkge1xuIFx0XHRtdHVfaXB2Nl9yMikgICAgICAgICB0ZXN0X210dV9pcHY2X3IyIDs7XG4gXHRcdG10dV9pcHY0X3IzKSAgICAgICAgIHRlc3RfbXR1X2lwdjRfcjMgOztcbiBcdFx0bXR1X2lwdjZfcjMpICAgICAgICAgdGVzdF9tdHVfaXB2Nl9yMyA7O1xuK1x0XHRtYXJrX3dpbGRjYXJkX3NoYWRvdykgICAgICB0ZXN0X21hcmtfd2lsZGNhcmRfc2hhZG93IDs7XG4rXHRcdG1hcmtfd2lsZGNhcmRfZGVsZXRlKSAgICAgIHRlc3RfbWFya193aWxkY2FyZF9kZWxldGUgOztcbitcdFx0bWFya193aWxkY2FyZF9nZXRfYWRkcikgICAgdGVzdF9tYXJrX3dpbGRjYXJkX2dldF9hZGRyIDs7XG4rXHRcdG1hcmtfd2lsZGNhcmRfZGVsZXRlX2FkZHIpIHRlc3RfbWFya193aWxkY2FyZF9kZWxldGVfYWRkciA7O1xuIFx0XHRlc2FjXG4gXHRcdHJldD0kP1xuIFxuQEAgLTE2Nyw2ICsxNzUsOCBAQCBzZXR1cF9uYW1lc3BhY2VzKCkge1xuIFx0WyAtbiBcIiR7TlNfUzJ9XCIgXSBcdTAwMjZcdTAwMjYgbnNfczI9KGlwIG5ldG5zIGV4ZWMgXCIke05TX1MyfVwiKSBcdTAwMjZcdTAwMjYgbnNfYWN0aXZlPVwiJHtuc19hY3RpdmV9ICROU19TMlwiXG4gXHRbIC1uIFwiJHtOU19SM31cIiBdIFx1MDAyNlx1MDAyNiBuc19yMz0oaXAgbmV0bnMgZXhlYyBcIiR7TlNfUjN9XCIpIFx1MDAyNlx1MDAyNiBuc19hY3RpdmU9XCIke25zX2FjdGl2ZX0gJE5TX1IzXCJcbiBcdFsgLW4gXCIke05TX0J9XCIgXSBcdTAwMjZcdTAwMjYgbnNfYWN0aXZlPVwiJHtuc19hY3RpdmV9ICROU19CXCJcbitcbitcdHJldHVybiAwXG4gfVxuIFxuIGFkZHJfYWRkKCkge1xuQEAgLTI5NSw2ICszMDUsMTggQEAgc2V0dXBfbnNfc2V0X3Y2eCgpIHtcbiBcdHNldF94ZnJtX3BhcmFtc1xuIH1cbiBcbitzZXR1cF9uc19zZXRfc2ltcGxlKCkge1xuK1x0IyBTaW5nbGUgbmFtZXNwYWNlLCBubyB2ZXRocy9yb3V0ZXMuXG4rXHRuc19zZXQ9XCJhXCJcbitcdGltYXg9MVxuK1x0c3JjPVwiMTAuMS4xLjFcIlxuK1x0ZHN0PVwiMTAuMS4xLjJcIlxuK1x0c3JjX25ldD1cIjEwLjEuMC4wLzI0XCJcbitcdGRzdF9uZXQ9XCIxMC4yLjAuMC8yNFwiXG4rXG4rXHRzZXRfeGZybV9wYXJhbXNcbit9XG4rXG4gc2V0dXBfbmV0d29yaygpIHtcbiBcdCMgQ3JlYXRlIHZldGhzIGFuZCBhZGQgYWRkcmVzc2VzXG4gXHRsb2NhbCAtYSBuc19jbWRcbkBAIC00MDMsNiArNDI1LDcgQEAgc2V0dXAoKSB7XG4gXHRcdG5zX3NldF92NHgpICAgIHNldHVwX25zX3NldF92NHggOztcbiBcdFx0bnNfc2V0X3Y2KSAgICAgc2V0dXBfbnNfc2V0X3Y2IDs7XG4gXHRcdG5zX3NldF92NngpICAgIHNldHVwX25zX3NldF92NnggOztcbitcdFx0bnNfc2V0X3NpbXBsZSkgc2V0dXBfbnNfc2V0X3NpbXBsZSA7O1xuIFx0XHRuYW1lc3BhY2VzKSAgICBzZXR1cF9uYW1lc3BhY2VzIDs7XG4gXHRcdG5ldHdvcmspICAgICAgIHNldHVwX25ldHdvcmsgOztcbiBcdFx0eGZybSkgICAgICAgICAgc2V0dXBfeGZybSA7O1xuQEAgLTU0OCw2ICs1NzEsMTExIEBAIHRlc3RfbXR1X2lwdjZfcjMoKSB7XG4gXHRyZXR1cm4gXCIke3JjfVwiXG4gfVxuIFxuKyMgU0FfZGVjb3kgKG1hcmsgMC8wLCBhZGRlZCBzZWNvbmQpIHNoYWRvd3MgU0FfdGFyZ2V0IChtYXJrIDEvMSkgb24gYVxuKyMgd2lsZGNhcmQgbWFyayBsb29rdXAuIE5vIHRyYWZmaWMgc2VudDsgdGhlc2Ugb25seSBleGVyY2lzZSB0aGUgU0FELlxuK1xuK3Rlc3RfbWFya193aWxkY2FyZF9zaGFkb3coKSB7XG4rXHRzZXR1cCBuc19zZXRfc2ltcGxlIG5hbWVzcGFjZXMgfHwgcmV0dXJuIFwiJGtzZnRfc2tpcFwiXG4rXHRsb2NhbCByZXN1bHQ9MFxuK1xuK1x0cnVuX2NtZCBcIiR7bnNfYVtAXX1cIiBpcCB4ZnJtIHN0YXRlIGFkZCBcXFxuK1x0XHRzcmMgXCIke3NyY31cIiBkc3QgXCIke2RzdH1cIiBwcm90byBlc3Agc3BpIDB4MTAwMCBcXFxuK1x0XHRyZXFpZCAxMDAgbW9kZSB0dW5uZWwgXFxcbitcdFx0YWVhZCAncmZjNDEwNihnY20oYWVzKSknIDB4MTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSA5NiBcXFxuK1x0XHRtYXJrIDEgbWFzayAxXG4rXG4rXHRydW5fY21kIFwiJHtuc19hW0BdfVwiIGlwIHhmcm0gc3RhdGUgYWRkIFxcXG4rXHRcdHNyYyBcIiR7c3JjfVwiIGRzdCBcIiR7ZHN0fVwiIHByb3RvIGVzcCBzcGkgMHgxMDAwIFxcXG4rXHRcdHJlcWlkIDEwMCBtb2RlIHR1bm5lbCBcXFxuK1x0XHRhZWFkICdyZmM0MTA2KGdjbShhZXMpKScgMHgyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIDk2IFxcXG4rXHRcdG1hcmsgMCBtYXNrIDBcbitcbitcdHJ1bl9jbWRfZXJyIFwiJHtuc19hW0BdfVwiIGlwIHhmcm0gc3RhdGUgZ2V0IFxcXG4rXHRcdGRzdCBcIiR7ZHN0fVwiIHByb3RvIGVzcCBzcGkgMHgxMDAwIFxcXG4rXHRcdG1hcmsgMSBtYXNrIDFcbitcbitcdCMgRXhwZWN0ZWQ6IFNBX3RhcmdldCAobWFyayAweDEvMHgxKS4gQWN0dWFsIChidWcpOiBTQV9kZWNveSAobWFyayAwLzApLlxuK1x0ZWNobyBcIiRvdXRcIiB8IGdyZXAgLXEgXCJtYXJrIDB4MS8weDFcIiB8fCByZXN1bHQ9MVxuK1xuK1x0cmV0dXJuIFwiJHtyZXN1bHR9XCJcbit9XG4rXG4rdGVzdF9tYXJrX3dpbGRjYXJkX2RlbGV0ZSgpIHtcbitcdHNldHVwIG5zX3NldF9zaW1wbGUgbmFtZXNwYWNlcyB8fCByZXR1cm4gXCIka3NmdF9za2lwXCJcbitcdGxvY2FsIHJlc3VsdD0wXG4rXG4rXHRydW5fY21kIFwiJHtuc19hW0BdfVwiIGlwIHhmcm0gc3RhdGUgYWRkIFxcXG4rXHRcdHNyYyBcIiR7c3JjfVwiIGRzdCBcIiR7ZHN0fVwiIHByb3RvIGVzcCBzcGkgMHgxMDAwIFxcXG4rXHRcdHJlcWlkIDEwMCBtb2RlIHR1bm5lbCBcXFxuK1x0XHRhZWFkICdyZmM0MTA2KGdjbShhZXMpKScgMHgxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDk2IFxcXG4rXHRcdG1hcmsgMSBtYXNrIDFcbitcbitcdHJ1bl9jbWQgXCIke25zX2FbQF19XCIgaXAgeGZybSBzdGF0ZSBhZGQgXFxcbitcdFx0c3JjIFwiJHtzcmN9XCIgZHN0IFwiJHtkc3R9XCIgcHJvdG8gZXNwIHNwaSAweDEwMDAgXFxcbitcdFx0cmVxaWQgMTAwIG1vZGUgdHVubmVsIFxcXG4rXHRcdGFlYWQgJ3JmYzQxMDYoZ2NtKGFlcykpJyAweDIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIgOTYgXFxcbitcdFx0bWFyayAwIG1hc2sgMFxuK1xuK1x0cnVuX2NtZCBcIiR7bnNfYVtAXX1cIiBpcCB4ZnJtIHN0YXRlIGRlbGV0ZSBcXFxuK1x0XHRkc3QgXCIke2RzdH1cIiBwcm90byBlc3Agc3BpIDB4MTAwMCBcXFxuK1x0XHRtYXJrIDEgbWFzayAxXG4rXG4rXHRydW5fY21kX2VyciBcIiR7bnNfYVtAXX1cIiBpcCB4ZnJtIHN0YXRlIHNob3dcbitcdGVjaG8gXCIkb3V0XCIgfCBncmVwIC1xIFwibWFyayAweDEvMHgxXCIgXHUwMDI2XHUwMDI2IHJlc3VsdD0xXG4rXG4rXHRyZXR1cm4gXCIke3Jlc3VsdH1cIlxuK31cbitcbisjIGJ5LWFkZHJlc3MgY291bnRlcnBhcnQ6IHByb3RvIHJvdXRlMi9oYW8gKElQdjYgbW9iaWxpdHkpIGhhdmUgbm8gU1BJLFxuKyMgc28geGZybV91c2VyX3N0YXRlX2xvb2t1cCgpIHJlc29sdmVzIHRoZW0gYnkgYWRkcmVzcyBpbnN0ZWFkLlxuK1xuK3Rlc3RfbWFya193aWxkY2FyZF9nZXRfYWRkcigpIHtcbitcdHNldHVwIG5zX3NldF9zaW1wbGUgbmFtZXNwYWNlcyB8fCByZXR1cm4gXCIka3NmdF9za2lwXCJcbitcdGxvY2FsIHJlc3VsdD0wXG4rXHRsb2NhbCBzcmM2PVwiZmMwMDo5OjoxXCJcbitcdGxvY2FsIGRzdDY9XCJmYzAwOjk6OjJcIlxuK1xuK1x0cnVuX2NtZCBcIiR7bnNfYVtAXX1cIiBpcCB4ZnJtIHN0YXRlIGFkZCBcXFxuK1x0XHRzcmMgXCIke3NyYzZ9XCIgZHN0IFwiJHtkc3Q2fVwiIHByb3RvIHJvdXRlMiBtb2RlIHJvIGNvYSBmYzAwOjk6OjMgXFxcbitcdFx0bWFyayAxIG1hc2sgMVxuK1xuK1x0cnVuX2NtZCBcIiR7bnNfYVtAXX1cIiBpcCB4ZnJtIHN0YXRlIGFkZCBcXFxuK1x0XHRzcmMgXCIke3NyYzZ9XCIgZHN0IFwiJHtkc3Q2fVwiIHByb3RvIHJvdXRlMiBtb2RlIHJvIGNvYSBmYzAwOjk6OjQgXFxcbitcdFx0bWFyayAwIG1hc2sgMFxuK1xuK1x0cnVuX2NtZF9lcnIgXCIke25zX2FbQF19XCIgaXAgeGZybSBzdGF0ZSBnZXQgXFxcbitcdFx0c3JjIFwiJHtzcmM2fVwiIGRzdCBcIiR7ZHN0Nn1cIiBwcm90byByb3V0ZTIgXFxcbitcdFx0bWFyayAxIG1hc2sgMVxuK1xuK1x0ZWNobyBcIiRvdXRcIiB8IGdyZXAgLXEgXCJtYXJrIDB4MS8weDFcIiB8fCByZXN1bHQ9MVxuK1xuK1x0cmV0dXJuIFwiJHtyZXN1bHR9XCJcbit9XG4rXG4rdGVzdF9tYXJrX3dpbGRjYXJkX2RlbGV0ZV9hZGRyKCkge1xuK1x0c2V0dXAgbnNfc2V0X3NpbXBsZSBuYW1lc3BhY2VzIHx8IHJldHVybiBcIiRrc2Z0X3NraXBcIlxuK1x0bG9jYWwgcmVzdWx0PTBcbitcdGxvY2FsIHNyYzY9XCJmYzAwOjk6OjFcIlxuK1x0bG9jYWwgZHN0Nj1cImZjMDA6OTo6MlwiXG4rXG4rXHRydW5fY21kIFwiJHtuc19hW0BdfVwiIGlwIHhmcm0gc3RhdGUgYWRkIFxcXG4rXHRcdHNyYyBcIiR7c3JjNn1cIiBkc3QgXCIke2RzdDZ9XCIgcHJvdG8gcm91dGUyIG1vZGUgcm8gY29hIGZjMDA6OTo6MyBcXFxuK1x0XHRtYXJrIDEgbWFzayAxXG4rXG4rXHRydW5fY21kIFwiJHtuc19hW0BdfVwiIGlwIHhmcm0gc3RhdGUgYWRkIFxcXG4rXHRcdHNyYyBcIiR7c3JjNn1cIiBkc3QgXCIke2RzdDZ9XCIgcHJvdG8gcm91dGUyIG1vZGUgcm8gY29hIGZjMDA6OTo6NCBcXFxuK1x0XHRtYXJrIDAgbWFzayAwXG4rXG4rXHRydW5fY21kIFwiJHtuc19hW0BdfVwiIGlwIHhmcm0gc3RhdGUgZGVsZXRlIFxcXG4rXHRcdHNyYyBcIiR7c3JjNn1cIiBkc3QgXCIke2RzdDZ9XCIgcHJvdG8gcm91dGUyIFxcXG4rXHRcdG1hcmsgMSBtYXNrIDFcbitcbitcdHJ1bl9jbWRfZXJyIFwiJHtuc19hW0BdfVwiIGlwIHhmcm0gc3RhdGUgc2hvd1xuK1x0ZWNobyBcIiRvdXRcIiB8IGdyZXAgLXEgXCJtYXJrIDB4MS8weDFcIiBcdTAwMjZcdTAwMjYgcmVzdWx0PTFcbitcbitcdHJldHVybiBcIiR7cmVzdWx0fVwiXG4rfVxuK1xuICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4gI1xuIHVzYWdlKCkge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTU6MTU6MjcuNTc0Mzk4NjU0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYyNzgyMTQzNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBYRlJNIFN0YXRlIExvb2t1cCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCBhbHRlcnMgdGhlIHdheSB0aGUgWEZSTSAoSVBzZWMpIHN0YXRlIGxvb2t1cCB3b3JrcyB3aXRoaW4gdGhlIGtlcm5lbC4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBjaGFuZ2UgaXMgdG8gbWFrZSB0aGUgYHhmcm1fc3RhdGVfbG9va3VwX2J5YWRkcmAsIGB4ZnJtX3N0YXRlX2xvb2t1cGAsIGB4ZnJtX3N0YXRlX2xvb2t1cF9leGFjdGAsIGFuZCByZWxhdGVkIGZ1bmN0aW9ucyB1c2UgKmV4YWN0KiBtYXRjaGluZyBvZiBtYXJrcyBhbmQgbWFza3MsIGluc3RlYWQgb2YgdGhlIGN1cnJlbnQgd2lsZGNhcmQgYXBwcm9hY2gsIHdoZW4gYSByZXF1ZXN0IG9yaWdpbmF0ZXMgZnJvbSB0aGUgY29udHJvbCBwbGFuZSAocHJpbWFyaWx5IGB4ZnJtX3VzZXIuY2ApLiBUaGlzIGlzIGEgY3J1Y2lhbCBmaXgsIGJlY2F1c2UgYSB3aWxkY2FyZCBTZWN1cml0eSBBc3NvY2lhdGlvbiAoU0EpIHdpdGggYSBtYXJrIG9mIDAvMCBjYW4gY3VycmVudGx5IG92ZXJzaGFkb3cgYSBtb3JlIHNwZWNpZmljIFNBIChlLmcuLCBtYXJrIDEvMSkgd2hlbiB3ZSdyZSBkZWFsaW5nIHdpdGggY29udHJvbCBwbGFuZSBhY3Rpb25zIGxpa2UgR0VULCBERUxFVEUsIG9yIE1JR1JBVEUuIFRoYXQncyBhIGNsYXNzaWMgcmFjZSBjb25kaXRpb24sIGFuZCB0aGlzIHBhdGNoIHNob3VsZCBhZGRyZXNzIGl0IGRpcmVjdGx5LlxuXG5NeSBpbW1lZGlhdGUgdGhvdWdodHMgYXJlLCBsZXQncyBuYWlsIGRvd24gcHJlY2lzZWx5IHdoaWNoIGNvZGUgaXMgbW9kaWZpZWQuIEkgc2VlIGNoYW5nZXMgaW4gYG5ldC94ZnJtL3hmcm1fc3RhdGUuY2AsIGBuZXQveGZybS94ZnJtX3VzZXIuY2AsIGBuZXQvaXB2Ni94ZnJtNl9pbnB1dC5jYCwgYW5kIGBpbmNsdWRlL25ldC94ZnJtLmhgLiAgUGx1cywgdGhlcmUgYXJlIHRoZXNlIG5ldyB0ZXN0cyBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3hmcm1fc3RhdGUuc2hgIHdoaWNoIGFyZSBlbmNvdXJhZ2luZyAtIGdvb2QgdG8gc2VlIHRoZXkncmUgYnVpbGRpbmcgdGVzdCBjb3ZlcmFnZSBhcm91bmQgdGhpcy5cblxuRnVuY3Rpb25hbGx5LCB0aGlzIGlzIGFsbCBhYm91dCBob3cgSVBzZWMgU0FzIGFyZSBsb29rZWQgdXAgYW5kIGhhbmRsZWQgdmlhIG5ldGxpbmsuIFRoZSBpbXBhY3QgaXMgc2lnbmlmaWNhbnQgZm9yIG9wZXJhdGlvbnMgbGlrZSBzdGF0ZSBkZWxldGlvbiwgbWlncmF0aW9uLCBhbmQgcmV0cmlldmFsLiBJIG5lZWQgdG8gZm9jdXMgb24gdGhvc2Ugc3BlY2lmaWMgbmV0bGluayBtZXNzYWdlcyBsaWtlIGBYRlJNX01TR19HRVRTQWAsIGBYRlJNX01TR19ERUxTQWAsIGFuZCBgWEZSTV9NU0dfTUlHUkFURWAgdG8gc2VlIHRoZSBlZmZlY3Qgb2YgdGhpcyBjaGFuZ2UuXG5cbk5vdywgZm9yIGZ1enppbmcsIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgY3JpdGljYWwgZnVuY3Rpb25zLiBJJ20gZ29pbmcgdG8gY29uY2VudHJhdGUgb24gYHhmcm1fc3RhdGVfbG9va3VwX2V4YWN0YCwgYHhmcm1fc3RhdGVfbG9va3VwX2J5YWRkcmAsIGB4ZnJtX3VzZXJfc3RhdGVfbG9va3VwYCwgYHhmcm1fZ2V0X2FlYCwgYHhmcm1fbmV3X2FlYCwgYHhmcm1fYWRkX3NhX2V4cGlyZWAsIGFuZCBgeGZybV9kb19taWdyYXRlX3N0YXRlYC4gVGhlc2UgYXJlIHRoZSBrZXkgZW50cnkgcG9pbnRzIGFuZCBtYW5pcHVsYXRpb24gcG9pbnRzIG9mIHRoZSBzdGF0ZSBsb29rdXAgbG9naWMuIFRoZXkgYXJlIGRlZmluaXRlbHkgd2hlcmUgYW55IGlzc3VlcyBmcm9tIHRoZSBwYXRjaCB3aWxsIHN1cmZhY2UuXG5cbkZpbmFsbHksIGxldCdzIHZlcmlmeSB0aGF0IHRoZSBuZWNlc3Nhcnkga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgc2V0LiBgQ09ORklHX1hGUk1fVVNFUmAgaXMgdml0YWwgZm9yIGB4ZnJtX3VzZXIuY2AsIGFuZCBgQ09ORklHX1hGUk1fTUlHUkFURWAgaXMgbmVlZGVkIGZvciBgeGZybV9kb19taWdyYXRlX3N0YXRlYC4gSSdsbCBjb25maXJtIHRoYXQgdGhlc2UgYXJlIGVuYWJsZWQgaW4gdGhlIGJ1aWxkIGVudmlyb25tZW50IHRvIGVuc3VyZSB0aGlzIHBhdGNoIGlzIGZ1bGx5IHN1cHBvcnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyNDksIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NjUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxNToxNjoxMy44NTI2MTU5MTJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjMwMTE1NTg2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgWEZSTV9NSUdSQVRFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL0tjb25maWc9NTE9Y29uZmlnIFhGUk1fU1VCX1BPTElDWVxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy02MC1cXG5uZXQveGZybS9LY29uZmlnOjYxOmNvbmZpZyBYRlJNX01JR1JBVEVcXG5uZXQveGZybS9LY29uZmlnLTYyLVxcdGJvb2wgXFxcIlRyYW5zZm9ybWF0aW9uIG1pZ3JhdGUgZGF0YWJhc2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE1OjE2OjIwLjE1Mzc4NDA2NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyMTIxMTA4ODg0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgdGhlIFhGUk1fVVNFUiBQZXJzcGVjdGl2ZSoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIG91dCBgWEZSTV9VU0VSYC4gSXQncyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyB3aXRoIHRoZSB1c2VyLXNwYWNlIGludGVyYWN0aW9ucywgdGhlIHBvdGVudGlhbCBjb25maWd1cmF0aW9uIGFzcGVjdHMsIGFuZCBhbnkgY3VzdG9tIGltcGxlbWVudGF0aW9ucy4gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBjb250cm9sIHBsYW5lIGFuZCBkYXRhIHBsYW5lIGhlcmUsIGFuZCB3aGV0aGVyIHRoZSBpc3N1ZSBJJ20gbG9va2luZyBhdCBjb3VsZCBiZSBhIHJlc3VsdCBvZiBzb21ldGhpbmcgbWlzY29uZmlndXJlZCBhdCB0aGUgdXNlciBsZXZlbC4gV2hhdCBhcmUgdGhlIHJlbGV2YW50IHNvY2tldCBvcHRpb25zPyBBcmUgdGhlcmUgYW55IHVuZXhwZWN0ZWQgcG9saWN5IHNldHRpbmdzPyBJJ2xsIG5lZWQgdG8gbG9vayBhdCBob3cgdGhlIGtleXMgYXJlIGJlaW5nIG1hbmFnZWQgYW5kIGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyBkaXNjcmVwYW5jaWVzIGJldHdlZW4gZXhwZWN0ZWQgYmVoYXZpb3IgYW5kIHdoYXQgSSdtIG9ic2VydmluZy4gSXTigJlzIGxpa2VseSBpbiB0aGUga2VybmVsLXVzZXIgaW50ZXJhY3Rpb25zLiBUaGlzIGNvdWxkIGJlIHdoZXJlIHRoZSBwcm9ibGVtIHN0ZW1zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjQxNCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE1OjE4OjIxLjM2NDg3Nzg5OFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzIxNTE0Njc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBYRlJNX1VTRVJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0vS2NvbmZpZz0yMj1pZiBJTkVUXFxubmV0L3hmcm0vS2NvbmZpZzoyMzpjb25maWcgWEZSTV9VU0VSXFxubmV0L3hmcm0vS2NvbmZpZy0yNC1cXHR0cmlzdGF0ZSBcXFwiVHJhbnNmb3JtYXRpb24gdXNlciBjb25maWd1cmF0aW9uIGludGVyZmFjZVxcXCJcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctMzEtXFxubmV0L3hmcm0vS2NvbmZpZzozMjpjb25maWcgWEZSTV9VU0VSX0NPTVBBVFxcbm5ldC94ZnJtL0tjb25maWctMzMtXFx0dHJpc3RhdGUgXFxcIkNvbXBhdGlibGUgQUJJIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE1OjE4OjI3LjA4NjQwNDAxN1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzNDcyNDE5NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byBgeGZybV9kb19taWdyYXRlX3N0YXRlYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRyaWNhY2llcyBvZiB0aGlzIGZ1bmN0aW9uIHdpdGhpbiBgbmV0L3hmcm0veGZybV91c2VyLmNgLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyBpdCBoYW5kbGVzIHN0YXRlIG1pZ3JhdGlvbi4gVGhpcyBsaWtlbHkgaW52b2x2ZXMgdXNlci1zcGFjZSBpbnRlcmFjdGlvbnMsIHBvc3NpYmx5IHdpdGggbmV0bGluayBtZXNzYWdlcyBvciBzaW1pbGFyIG1lY2hhbmlzbXMuIEknbGwgbmVlZCB0byBmb2N1cyBvbiBob3cgdGhlIGZ1bmN0aW9uIHByb2Nlc3NlcyB0aGUgZGF0YSBpdCByZWNlaXZlcywgaG93IGl0IHZhbGlkYXRlcyBpbnB1dCwgYW5kIGhvdyBpdCBvcmNoZXN0cmF0ZXMgdGhlIHRyYW5zZmVyIG9mIHNlY3VyaXR5IGFzc29jaWF0aW9uIChTQSkgaW5mb3JtYXRpb24gYmV0d2VlbiBkaWZmZXJlbnQgbmV0d29yayBuYW1lc3BhY2VzIG9yIG90aGVyIGNvbnRleHRzLCBiZWNhdXNlIEkga25vdyB0aGF0J3MgdGhlIHVzdWFsIGltcGxpY2F0aW9uIG9mIGEgXCJtaWdyYXRlXCIgb3BlcmF0aW9uLiBJJ2xsIGFsc28gYmUgbG9va2luZyBmb3IgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3Igc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzIHRoYXQgY291bGQgYXJpc2UgZHVyaW5nIHRoaXMgc3RhdGUgdHJhbnNmZXIsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhhdCB0aGUgc3RhdGUgbWlnaHQgY29udGFpbiBzZW5zaXRpdmUgY3J5cHRvZ3JhcGhpYyBrZXlzIG9yIFNQSSB2YWx1ZXMuIEdpdmVuIG15IGZhbWlsaWFyaXR5IHdpdGggWEZSTSwgSSdtIGV4cGVjdGluZyB0byBzZWUgY2FsbHMgdG8gZnVuY3Rpb25zIGxpa2UgYHhmcm1fc3RhdGVfYWxsb2NgLCBgeGZybV9zdGF0ZV9hZGRgLCBgeGZybV9zdGF0ZV9kZWxldGVgIGFuZCBwZXJoYXBzIHN0YXRlIGxvY2tpbmcgbWVjaGFuaXNtcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI3NjAsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxNToxODozMi40MzM2NDkxMjJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM0NTY4MjQyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtX2RvX21pZ3JhdGVfc3RhdGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV91c2VyLmM9MzMwND1zdGF0aWMgaW50IHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMzMjQtXFxubmV0L3hmcm0veGZybV91c2VyLmM6MzMyNTpzdGF0aWMgaW50IHhmcm1fZG9fbWlncmF0ZV9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMzI2LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM1MTYtI2Vsc2VcXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNTE3OnN0YXRpYyBpbnQgeGZybV9kb19taWdyYXRlX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM1MTgtXFx0XFx0XFx0XFx0IHN0cnVjdCBubGF0dHIgKiphdHRycywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9MzczMj1zdGF0aWMgY29uc3Qgc3RydWN0IHhmcm1fbGluayB7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNzY5LVxcdFtYRlJNX01TR19HRVRERUZBVUxUICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fZ2V0X2RlZmF1bHQgICB9LFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM3NzA6XFx0W1hGUk1fTVNHX01JR1JBVEVfU1RBVEUgLSBYRlJNX01TR19CQVNFXSA9IHsgLmRvaXQgPSB4ZnJtX2RvX21pZ3JhdGVfc3RhdGUgfSxcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNzcxLX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE1OjE4OjM3Ljc3OTMzODg4OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNDU3MzY4NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBzaXR1YXRpb246XG5cbioqWEZSTSBTdWJzeXN0ZW0gVGVzdGluZyBSZXF1aXJlbWVudHMqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcsIHRvIHJlYWxseSBuYWlsIGRvd24gdGhlIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgIGZ1bmN0aW9uLCB3ZSdyZSBkZWZpbml0ZWx5IGdvaW5nIHRvIG5lZWQgdGhlIGBYRlJNX01JR1JBVEVgIGZsYWcgYWN0aXZhdGVkIGZvciBhIHByb3BlciB0ZXN0aW5nIGVudmlyb25tZW50LiBNYWtlcyBwZXJmZWN0IHNlbnNlLiBBbmQgb2YgY291cnNlLCBnaXZlbiB0aGF0IGB4ZnJtX3VzZXIuY2AgaXMgZ29pbmcgdG8gYmUgaW50ZWdyYWwgdG8gdGhlc2UgdGVzdHMsIHdlJ3JlIGdvaW5nIHRvIG5lZWQgYFhGUk1fVVNFUmAgZW5hYmxlZC4gSXTigJlzIHByZXR0eSBvYnZpb3VzLCBidXQgbGV0J3MganVzdCBtYWtlIHN1cmUuXG5cbk5vdywgbXkgbmV4dCB0aG91Z2h0IGlzLCBsZXQncyByZWZyZXNoIG9uIGB4ZnJtX3N0YXRlX2xvb2t1cF9leGFjdGAuIEknbGwgZ28gY2hlY2sgaXQgb3V0IGluIGBuZXQveGZybS94ZnJtX3N0YXRlLmNgLiBBbHdheXMgZ29vZCB0byBoYXZlIGEgc29saWQgaGFuZGxlIG9uIGhvdyB0aGF0IHBhcnRpY3VsYXIgZnVuY3Rpb24gd29ya3MsIGdpdmVuIGl0cyBwb3RlbnRpYWwgaW1wbGljYXRpb25zIGluIGEgbWlncmF0aW9uIHNjZW5hcmlvLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCBpdCBjb21wbGV0ZWx5IGJlZm9yZSBwcm9jZWVkaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzQ2NCwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE1OjE4OjQxLjEyNTA3ODkwNloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg3NTQ3NjM3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtX3N0YXRlX2xvb2t1cF9leGFjdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcveGZybS94ZnJtX21pZ3JhdGVfc3RhdGUucnN0PTI5PVRoZSBzdHJ1Y3QgaXMgZGVmaW5lZCBpbiBgYGluY2x1ZGUvdWFwaS9saW51eC94ZnJtLmhgYC4gVGhlIFNBIGlzIGxvb2tlZFxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy94ZnJtL3hmcm1fbWlncmF0ZV9zdGF0ZS5yc3Q6MzA6dXAgdXNpbmcgYGB4ZnJtX3N0YXRlX2xvb2t1cF9leGFjdCgpYGAgd2l0aCBgYGlkLnNwaWBgLCBgYGlkLmRhZGRyYGAsXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3hmcm0veGZybV9taWdyYXRlX3N0YXRlLnJzdC0zMS1gYGlkLnByb3RvYGAsIGBgaWQuZmFtaWx5YGAsIGFuZCBhbiBleGFjdCBtYXRjaCBhZ2FpbnN0IGBgb2xkX21hcmsudmBgXFxuLS1cXG5pbmNsdWRlL25ldC94ZnJtLmg9MTc0ND1zdHJ1Y3QgeGZybV9zdGF0ZSAqeGZybV9zdGF0ZV9sb29rdXBfYnlhZGRyKHN0cnVjdCBuZXQgKm5ldCwgdTMyIG1hcmssIHUzMiBtYXNrLCBib29sIGV4YWN0LFxcbi0tXFxuaW5jbHVkZS9uZXQveGZybS5oLTE3NDgtXFx0XFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIHNob3J0IGZhbWlseSk7XFxuaW5jbHVkZS9uZXQveGZybS5oOjE3NDk6c3RydWN0IHhmcm1fc3RhdGUgKnhmcm1fc3RhdGVfbG9va3VwX2V4YWN0KHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IHhmcm1fbWFyayAqbWFyayxcXG5pbmNsdWRlL25ldC94ZnJtLmgtMTc1MC1cXHRcXHRcXHRcXHRcXHQgICBjb25zdCB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsIF9fYmUzMiBzcGksXFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9MTIxMj1zdGF0aWMgc3RydWN0IHhmcm1fc3RhdGUgKlxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoxMjEzOl9feGZybV9zdGF0ZV9sb29rdXBfZXhhY3QoY29uc3Qgc3RydWN0IHhmcm1faGFzaF9zdGF0ZV9wdHJzICpzdGF0ZV9wdHJzLFxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xMjE0LVxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IHhmcm1fbWFyayAqbWFyayxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYz0xMzI3PV9feGZybV9zdGF0ZV9sb2NhdGVfZXhhY3Qoc3RydWN0IHhmcm1fc3RhdGUgKngsIGludCB1c2Vfc3BpLCBpbnQgZmFtaWx5KVxcbi0tXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTEzMzQtXFx0aWYgKHVzZV9zcGkpXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjEzMzU6XFx0XFx0cmV0dXJuIF9feGZybV9zdGF0ZV9sb29rdXBfZXhhY3QoXFx1MDAyNnN0YXRlX3B0cnMsIFxcdTAwMjZ4LVxcdTAwM2VtYXJrLCBcXHUwMDI2eC1cXHUwMDNlaWQuZGFkZHIsXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTEzMzYtXFx0XFx0XFx0XFx0XFx0XFx0IHgtXFx1MDAzZWlkLnNwaSwgeC1cXHUwMDNlaWQucHJvdG8sIGZhbWlseSk7XFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9MjQ0Nz1zdHJ1Y3QgeGZybV9zdGF0ZSAqXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjI0NDg6eGZybV9zdGF0ZV9sb29rdXBfZXhhY3Qoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgeGZybV9tYXJrICptYXJrLFxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yNDQ5LVxcdFxcdFxcdGNvbnN0IHhmcm1fYWRkcmVzc190ICpkYWRkciwgX19iZTMyIHNwaSxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yNDU3LVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoyNDU4OlxcdHggPSBfX3hmcm1fc3RhdGVfbG9va3VwX2V4YWN0KFxcdTAwMjZzdGF0ZV9wdHJzLCBtYXJrLCBkYWRkciwgc3BpLCBwcm90bywgZmFtaWx5KTtcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjQ1OS1cXHRyY3VfcmVhZF91bmxvY2soKTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yNDYxLX1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MjQ2MjpFWFBPUlRfU1lNQk9MKHhmcm1fc3RhdGVfbG9va3VwX2V4YWN0KTtcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjQ2My1cXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTEwODQ9c3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlICp4ZnJtX3VzZXJfc3RhdGVfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTEwOTYtXFx0XFx0ZXJyID0gLUVTUkNIO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjEwOTc6XFx0XFx0eCA9IHhmcm1fc3RhdGVfbG9va3VwX2V4YWN0KG5ldCwgXFx1MDAyNm0sIFxcdTAwMjZwLVxcdTAwM2VkYWRkciwgcC1cXHUwMDNlc3BpLCBwLVxcdTAwM2Vwcm90bywgcC1cXHUwMDNlZmFtaWx5KTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xMDk4LVxcdH0gZWxzZSB7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYz0yNzg0PXN0YXRpYyBpbnQgeGZybV9nZXRfYWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yNzk3LVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjI3OTg6XFx0eCA9IHhmcm1fc3RhdGVfbG9va3VwX2V4YWN0KG5ldCwgXFx1MDAyNm0sIFxcdTAwMjZpZC1cXHUwMDNlZGFkZHIsIGlkLVxcdTAwM2VzcGksIGlkLVxcdTAwM2Vwcm90bywgaWQtXFx1MDAzZWZhbWlseSk7XFxubmV0L3hmcm0veGZybV91c2VyLmMtMjc5OS1cXHRpZiAoeCA9PSBOVUxMKVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9MjgzMj1zdGF0aWMgaW50IHhmcm1fbmV3X2FlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMjg1OS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzoyODYwOlxcdHggPSB4ZnJtX3N0YXRlX2xvb2t1cF9leGFjdChuZXQsIFxcdTAwMjZtLCBcXHUwMDI2cC1cXHUwMDNlc2FfaWQuZGFkZHIsIHAtXFx1MDAzZXNhX2lkLnNwaSxcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yODYxLVxcdFxcdFxcdFxcdCAgICBwLVxcdTAwM2VzYV9pZC5wcm90bywgcC1cXHUwMDNlc2FfaWQuZmFtaWx5KTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTI5ODU9c3RhdGljIGludCB4ZnJtX2FkZF9zYV9leHBpcmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yOTk3LVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjI5OTg6XFx0eCA9IHhmcm1fc3RhdGVfbG9va3VwX2V4YWN0KG5ldCwgXFx1MDAyNm0sIFxcdTAwMjZwLVxcdTAwM2VpZC5kYWRkciwgcC1cXHUwMDNlaWQuc3BpLCBwLVxcdTAwM2VpZC5wcm90bywgcC1cXHUwMDNlZmFtaWx5KTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yOTk5LVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9MzMyNT1zdGF0aWMgaW50IHhmcm1fZG9fbWlncmF0ZV9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMzNjQtXFxubmV0L3hmcm0veGZybV91c2VyLmM6MzM2NTpcXHR4ID0geGZybV9zdGF0ZV9sb29rdXBfZXhhY3QobmV0LCBcXHUwMDI2bS5vbGRfbWFyayxcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMzY2LVxcdFxcdFxcdFxcdCAgICBcXHUwMDI2dW0tXFx1MDAzZWlkLmRhZGRyLCB1bS1cXHUwMDNlaWQuc3BpLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxNToxODo0Ni4wMDA1NjQwMzhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjI5MTY3NDIxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBGdXp6aW5nIFN0cmF0ZWd5IGZvciBUaGlzIElQc2VjIFNBIExvb2t1cCBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgdGFrZW4gYSBsb29rIGF0IHRoaXMgcGF0Y2ggYW5kIGl0J3MgaW1tZWRpYXRlbHkgY2xlYXIgdGhhdCBpdCdzIHRvdWNoaW5nIGNyaXRpY2FsIGZ1bmN0aW9uYWwgY29yZSBsb2dpYyDigJMgc3BlY2lmaWNhbGx5LCBob3cgSVBzZWMgU2VjdXJpdHkgQXNzb2NpYXRpb25zIChTQXMpIGFyZSBsb29rZWQgdXAuIFRoaXMgaXMgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcsIGdpdmVuIHRoYXQgaXQncyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdGhyb3VnaCBuZXRsaW5rLiBNeSBndXQgdGVsbHMgbWUgdGhpcyBjb3VsZCBiZSBpbnRlcmVzdGluZy5cblxuVGhlIGZ1bmN0aW9ucyBJJ20gZm9jdXNpbmcgb24gYXJlOiBgeGZybV9zdGF0ZV9sb29rdXBfZXhhY3RgLCBgeGZybV9zdGF0ZV9sb29rdXBfYnlhZGRyYCwgYHhmcm1fdXNlcl9zdGF0ZV9sb29rdXBgLCBgeGZybV9nZXRfYWVgLCBgeGZybV9uZXdfYWVgLCBgeGZybV9hZGRfc2FfZXhwaXJlYCwgYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAsIGB4ZnJtX3N0YXRlX3VwZGF0ZWAsIGFuZCBgeGZybV9zdGF0ZV9taWdyYXRlX2luc3RhbGxgLiBUaGVzZSBsb29rIGxpa2UgdGhlIGtleSBwaWVjZXMgaW52b2x2ZWQgaW4gdGhpcyBsb29rdXAgYW5kIG1hbmFnZW1lbnQgcHJvY2Vzcy5cblxuQmVmb3JlIEkganVtcCBpbnRvIGZ1enppbmcsIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gSSdsbCBuZWVkIGBDT05GSUdfWEZSTWAgYXMgdGhlIGJhc2UsIG9mIGNvdXJzZS4gVGhlbiwgYENPTkZJR19YRlJNX1VTRVJgIGlzIGVzc2VudGlhbCBmb3IgdGhlIHVzZXJzcGFjZSBhY2Nlc3MsIGFuZCBzaW5jZSBtaWdyYXRpb24gaXMgaW52b2x2ZWQsIGBDT05GSUdfWEZSTV9NSUdSQVRFYCBpcyBhIG11c3QuIEtub3dpbmcgd2hhdCBJJ20gZGVhbGluZyB3aXRoLCBgQ09ORklHX0lORVRgIGZvciBgWEZSTV9VU0VSYCBpcyBhbHNvIG5lY2Vzc2FyeSwgYW5kIEkgc2VlIGBDT05GSUdfSVBWNmAgZGVwZW5kZW5jeSwgc3BlY2lmaWNhbGx5IGZvciBgbmV0L2lwdjYveGZybTZfaW5wdXQuY2AuIEkgd2lsbCB2ZXJpZnkgdGhlIGRlcGVuZGVuY2llcyBmb3IgYFhGUk1fTUlHUkFURWAgdG8gYmUgY2VydGFpbiBJIGhhdmUgYWxsIHRoZSBib3hlcyB0aWNrZWQgYmVmb3JlIEkgc3RhcnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MzEyLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE1OjE4OjUyLjI5MjI0MjY0M1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA4MjA4MzEwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgWEZSTV9NSUdSQVRFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL0tjb25maWc9NTE9Y29uZmlnIFhGUk1fU1VCX1BPTElDWVxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy02MC1cXG5uZXQveGZybS9LY29uZmlnOjYxOmNvbmZpZyBYRlJNX01JR1JBVEVcXG5uZXQveGZybS9LY29uZmlnLTYyLVxcdGJvb2wgXFxcIlRyYW5zZm9ybWF0aW9uIG1pZ3JhdGUgZGF0YWJhc2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE1OjE4OjU3LjM3NDMzMjczWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE5NjAyNDMzNDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqWEZSTV9NSUdSQVRFIERlcGVuZGVuY3kgSW52ZXN0aWdhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byBgWEZSTV9NSUdSQVRFYC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBkaWcgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZXMsIHNwZWNpZmljYWxseSBgbmV0L3hmcm0vS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSBJJ2QgZXhwZWN0IHRvIGZpbmQgdGhlIGRlcGVuZGVuY2llcywgaWYgYW55LCB0aGF0IGdvdmVybiB3aGV0aGVyIGBYRlJNX01JR1JBVEVgIGlzIGV2ZW4gKmVuYWJsZWQqIG9yICpzZWxlY3RhYmxlKiBkdXJpbmcgdGhlIGtlcm5lbCBidWlsZCBwcm9jZXNzLiBJIHdhbnQgdG8gcXVpY2tseSB1bmRlcnN0YW5kIGlmIGl0IHJlbGllcyBvbiBvdGhlciBYRlJNIGZlYXR1cmVzLCBuZXR3b3JraW5nIHN1YnN5c3RlbXMsIG9yIGV2ZW4gaGFyZHdhcmUgY2FwYWJpbGl0aWVzLiBUaW1lIHRvIGdvIHNwZWx1bmtpbmcgaW4gdGhhdCBLY29uZmlnIGZpbGUuIExldCdzIHNlZSB3aGF0IHNlY3JldHMgaXQgaG9sZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MDE0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTU6MTk6MTYuOTc2NzY5MjVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzOTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC94ZnJtL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNTA6XFx0XFxuICA1MTpcXHRjb25maWcgWEZSTV9TVUJfUE9MSUNZXFxuICA1MjpcXHRcXHRib29sIFxcXCJUcmFuc2Zvcm1hdGlvbiBzdWIgcG9saWN5IHN1cHBvcnRcXFwiXFxuICA1MzpcXHRcXHRkZXBlbmRzIG9uIFhGUk1cXG4gIDU0OlxcdFxcdGhlbHBcXG4gIDU1OlxcdFxcdCAgU3VwcG9ydCBzdWIgcG9saWN5IGZvciBkZXZlbG9wZXJzLiBCeSB1c2luZyBzdWIgcG9saWN5IHdpdGggbWFpblxcbiAgNTY6XFx0XFx0ICBvbmUsIHR3byBwb2xpY2llcyBjYW4gYmUgYXBwbGllZCB0byB0aGUgc2FtZSBwYWNrZXQgYXQgb25jZS5cXG4gIDU3OlxcdFxcdCAgUG9saWN5IHdoaWNoIGxpdmVzIHNob3J0ZXIgdGltZSBpbiBrZXJuZWwgc2hvdWxkIGJlIGEgc3ViLlxcbiAgNTg6XFx0XFxuICA1OTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICA2MDpcXHRcXG4gIDYxOlxcdGNvbmZpZyBYRlJNX01JR1JBVEVcXG4gIDYyOlxcdFxcdGJvb2wgXFxcIlRyYW5zZm9ybWF0aW9uIG1pZ3JhdGUgZGF0YWJhc2VcXFwiXFxuICA2MzpcXHRcXHRkZXBlbmRzIG9uIFhGUk1cXG4gIDY0OlxcdFxcdGhlbHBcXG4gIDY1OlxcdFxcdCAgQSBmZWF0dXJlIHRvIHVwZGF0ZSBsb2NhdG9yKHMpIG9mIGEgZ2l2ZW4gSVBzZWMgc2VjdXJpdHlcXG4gIDY2OlxcdFxcdCAgYXNzb2NpYXRpb24gZHluYW1pY2FsbHkuICBUaGlzIGZlYXR1cmUgaXMgcmVxdWlyZWQsIGZvclxcbiAgNjc6XFx0XFx0ICBpbnN0YW5jZSwgaW4gYSBNb2JpbGUgSVB2NiBlbnZpcm9ubWVudCB3aXRoIElQc2VjIGNvbmZpZ3VyYXRpb25cXG4gIDY4OlxcdFxcdCAgd2hlcmUgbW9iaWxlIG5vZGVzIGNoYW5nZSB0aGVpciBhdHRhY2htZW50IHBvaW50IHRvIHRoZSBJbnRlcm5ldC5cXG4gIDY5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxNToxOToxNi45NzY5MzczMVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDc1NTM0MjU0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkRlcGVuZGVuY3kgQW5hbHlzaXM6IFhGUk0gTW9kdWxlcyoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZXNlIGtlcm5lbCBtb2R1bGUgZGVwZW5kZW5jaWVzLiBJdCBsb29rcyBsaWtlIGBYRlJNX01JR1JBVEVgIGFic29sdXRlbHkgcmVsaWVzIG9uIHRoZSBiYXNlIGBYRlJNYCBtb2R1bGUuIE1ha2VzIHNlbnNlOyBtaWdyYXRpb24gbGlrZWx5IGludm9sdmVzIGV4aXN0aW5nIFhGUk0gaW5mcmFzdHJ1Y3R1cmUuIEFuZCB0aGVuIHdlIGhhdmUgYFhGUk1fVVNFUmAsIHdoaWNoIHNlZW1zIHRvIGJlIHNpdHRpbmcgb24gdG9wIG9mIGJvdGggYElORVRgIGFuZCBgWEZSTWAuIFRoYXQgc2lnbmFscyBhIHVzZXItc3BhY2UgaW50ZXJmYWNlLCBwcm9iYWJseSB0byBpbnRlcmFjdCB3aXRoIFhGUk0gdmlhIHNvY2tldHMuIE1ha2VzIHRvdGFsIHNlbnNlLCBhbmQgdGhpcyBpcyBzdGFuZGFyZC4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCB1bmRlcnN0YW5kaW5nLlxuXG5UbyBnZXQgdGhlIGZ1bGwgcGljdHVyZSBhbmQgY29uZmlybSB0aG9zZSBkZXBlbmRlbmNpZXMsIEkgc2hvdWxkIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIFRoZSBgbmV0L3hmcm0vS2NvbmZpZ2AgZmlsZSBzaG91bGQgY29udGFpbiB0aGUgZGVmaW5pdGl2ZSBkZWNsYXJhdGlvbiBvZiBgWEZSTV9VU0VSYCBhbmQgaXRzIGRlcGVuZGVuY2llcy4gTGV0J3MgZ28gY2hlY2sgdGhhdCBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NTAyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxNToyMDowNy43MzIyODQ1OVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTc5ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3hmcm0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAxNTpcXHRcXHR0cmlzdGF0ZVxcbiAgMTY6XFx0XFx0c2VsZWN0IFhGUk1cXG4gIDE3OlxcdFxcdHNlbGVjdCBDUllQVE9cXG4gIDE4OlxcdFxcdHNlbGVjdCBDUllQVE9fQUVBRFxcbiAgMTk6XFx0XFx0c2VsZWN0IENSWVBUT19IQVNIXFxuICAyMDpcXHRcXHRzZWxlY3QgQ1JZUFRPX1NLQ0lQSEVSXFxuICAyMTpcXHRcXG4gIDIyOlxcdGlmIElORVRcXG4gIDIzOlxcdGNvbmZpZyBYRlJNX1VTRVJcXG4gIDI0OlxcdFxcdHRyaXN0YXRlIFxcXCJUcmFuc2Zvcm1hdGlvbiB1c2VyIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlXFxcIlxcbiAgMjU6XFx0XFx0c2VsZWN0IFhGUk1fQUxHT1xcbiAgMjY6XFx0XFx0aGVscFxcbiAgMjc6XFx0XFx0ICBTdXBwb3J0IGZvciBUcmFuc2Zvcm1hdGlvbihYRlJNKSB1c2VyIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlXFxuICAyODpcXHRcXHQgIGxpa2UgSVBzZWMgdXNlZCBieSBuYXRpdmUgTGludXggdG9vbHMuXFxuICAyOTpcXHRcXG4gIDMwOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgWS5cXG4gIDMxOlxcdFxcbiAgMzI6XFx0Y29uZmlnIFhGUk1fVVNFUl9DT01QQVRcXG4gIDMzOlxcdFxcdHRyaXN0YXRlIFxcXCJDb21wYXRpYmxlIEFCSSBzdXBwb3J0XFxcIlxcbiAgMzQ6XFx0XFx0ZGVwZW5kcyBvbiBYRlJNX1VTRVIgXFx1MDAyNlxcdTAwMjYgQ09NUEFUX0ZPUl9VNjRfQUxJR05NRU5UIFxcdTAwMjZcXHUwMDI2IFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTU6MjA6MDcuNzMyNDA1MTFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTEyMjAzNDEwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBYRlJNIENvbmZpZ3VyYXRpb24gYW5kIEZ1bmN0aW9uIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBYRlJNIGNvZGUuIEl0IGxvb2tzIGxpa2UgdGhlIGtleSBjb25maWd1cmF0aW9ucyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIGFyZSBgWEZSTV9VU0VSYCBhbmQgYFhGUk1fTUlHUkFURWAuIEknbSBzdGFydGluZyBieSBsb29raW5nIGF0IGBuZXQvaXB2Ni94ZnJtNl9pbnB1dC5jYCwgYW5kLCBhcyBleHBlY3RlZCwgaXQgcmVxdWlyZXMgYElQVjZgLlxuXG5JJ20gZ29pbmcgdG8gZG9jdW1lbnQgdGhlIGNvbmZpZ3VyYXRpb25zIEkndmUgaWRlbnRpZmllZDpcblxuKiAgIGBYRlJNX1VTRVJgXG4qICAgYFhGUk1fTUlHUkFURWBcbiogICBgSVBWNmBcblxuTm93LCBsZXQncyBnZXQgaW50byB0aGUgZnVuY3Rpb25zLiBJIG5lZWQgdG8gZm9jdXMgb24gdGhlc2Ugc3ltYm9sczpcblxuKiAgIGB4ZnJtX3N0YXRlX2xvb2t1cF9leGFjdGBcbiogICBgeGZybV9zdGF0ZV9sb29rdXBfYnlhZGRyYFxuKiAgIGB4ZnJtX3VzZXJfc3RhdGVfbG9va3VwYFxuKiAgIGB4ZnJtX2dldF9hZWBcbiogICBgeGZybV9uZXdfYWVgXG4qICAgYHhmcm1fYWRkX3NhX2V4cGlyZWBcbiogICBgeGZybV9kb19taWdyYXRlX3N0YXRlYFxuKiAgIGB4ZnJtX3N0YXRlX3VwZGF0ZWBcbiogICBgeGZybV9zdGF0ZV9taWdyYXRlX2luc3RhbGxgXG5cbkknbSBnb2luZyB0byBkb3VibGUtY2hlY2sgdGhhdCBgeGZybV9zdGF0ZV9sb29rdXBfZXhhY3RgIGlzIGV4cG9ydGVkIGFuZCBhY2Nlc3NpYmxlLiBBaCwgeWVwLCBpdCdzIGNhbGxlZCBmcm9tIGB4ZnJtX3VzZXIuY2AsIHNvIHRoYXQncyBnb29kLiBBbmQgYHhmcm1fc3RhdGVfbG9va3VwX2J5YWRkcmAuLi4geWVzLCBpdCdzIHVzZWQgaW4gYm90aCBgeGZybV91c2VyLmNgIGFuZCBgeGZybTZfaW5wdXQuY2AuXG5cbkxldCBtZSBzZWUgaWYgYW55IG90aGVyIGZ1bmN0aW9ucyBoYXZlIGJlZW4gbW9kaWZpZWQgb3IgYXJlIHJlbGV2YW50LiBPa2F5LCBJIHNlZSBhIGhhbmRmdWwgb2Ygc3RhdGljIGZ1bmN0aW9ucywgbGV0J3MgdGFrZSBhIGxvb2s6XG5cbiogICBgeGZybV9zdGF0ZV9tYXJrX21hdGNoZXNgIChzdGF0aWMpXG4qICAgYF9feGZybV9zdGF0ZV9sb29rdXBgIChzdGF0aWMpXG4qICAgYF9feGZybV9zdGF0ZV9sb29rdXBfZXhhY3RgIChzdGF0aWMpXG4qICAgYF9feGZybV9zdGF0ZV9sb29rdXBfYnlhZGRyYCAoc3RhdGljKVxuKiAgIGBfX3hmcm1fc3RhdGVfbG9jYXRlYCAoc3RhdGljKVxuKiAgIGBfX3hmcm1fc3RhdGVfbG9jYXRlX2V4YWN0YCAoc3RhdGljKVxuXG5JJ20gZ29pbmcgdG8gaW5jbHVkZSB0aGUgZXhwb3J0ZWQgYW5kIG5vbi1zdGF0aWMgZnVuY3Rpb25zLCBhcyB3ZWxsIGFzIHRoZSBpbXBvcnRhbnQgc3RhdGljIG9uZXMsIEkgY2FuIGFsd2F5cyBjb21lIGJhY2sgdG8gaXQuXG5cblRoZSBmaW5hbCBsaXN0IHdpbGwgYmU6XG5cbiogICBgeGZybV9zdGF0ZV9sb29rdXBfZXhhY3RgXG4qICAgYHhmcm1fc3RhdGVfbG9va3VwX2J5YWRkcmBcbiogICBgeGZybV91c2VyX3N0YXRlX2xvb2t1cGBcbiogICBgeGZybV9kb19taWdyYXRlX3N0YXRlYFxuKiAgIGB4ZnJtX3N0YXRlX3VwZGF0ZWBcbiogICBgeGZybV9zdGF0ZV9taWdyYXRlX2luc3RhbGxgXG4qICAgYHhmcm1fZ2V0X2FlYFxuKiAgIGB4ZnJtX25ld19hZWBcbiogICBgeGZybV9hZGRfc2FfZXhwaXJlYFxuXG5Ob3csIHRpbWUgdG8gY2FsbCBzZXQtcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcwMzcsIk91dHB1dFRva2VucyI6MTk3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDc3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTU6MjA6MTYuODU0NDQyNzcxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM3Mzk5MzMyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJYRlJNX1VTRVJcIixcbiAgICBcIlhGUk1fTUlHUkFURVwiLFxuICAgIFwiSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInhmcm1fc3RhdGVfbG9va3VwX2V4YWN0XCIsXG4gICAgXCJ4ZnJtX3N0YXRlX2xvb2t1cF9ieWFkZHJcIixcbiAgICBcInhmcm1fdXNlcl9zdGF0ZV9sb29rdXBcIixcbiAgICBcInhmcm1fZG9fbWlncmF0ZV9zdGF0ZVwiLFxuICAgIFwieGZybV9zdGF0ZV91cGRhdGVcIixcbiAgICBcInhmcm1fc3RhdGVfbWlncmF0ZV9pbnN0YWxsXCIsXG4gICAgXCJ4ZnJtX2dldF9hZVwiLFxuICAgIFwieGZybV9uZXdfYWVcIixcbiAgICBcInhmcm1fYWRkX3NhX2V4cGlyZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBYRlJNIChJUHNlYykgc3RhdGUgbG9va3VwIGxvZ2ljIHRvIGFsbG93IGV4YWN0IG1hdGNoaW5nIG9mIG1hcmtzIGFuZCBtYXNrcyBkdXJpbmcgY29udHJvbCBwbGFuZSBvcGVyYXRpb25zIChHRVQsIERFTEVURSwgTUlHUkFURSkuIFRoaXMgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgbmV0bGluayBtZXNzYWdlcyBhbmQgYWZmZWN0cyBjb3JlIElQc2VjIGZ1bmN0aW9uYWxpdHkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWEZSTV9VU0VSXCIsXG4gICAgXCJYRlJNX01JR1JBVEVcIixcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4ZnJtX3N0YXRlX2xvb2t1cF9leGFjdFwiLFxuICAgIFwieGZybV9zdGF0ZV9sb29rdXBfYnlhZGRyXCIsXG4gICAgXCJ4ZnJtX3VzZXJfc3RhdGVfbG9va3VwXCIsXG4gICAgXCJ4ZnJtX2RvX21pZ3JhdGVfc3RhdGVcIixcbiAgICBcInhmcm1fc3RhdGVfdXBkYXRlXCIsXG4gICAgXCJ4ZnJtX3N0YXRlX21pZ3JhdGVfaW5zdGFsbFwiLFxuICAgIFwieGZybV9nZXRfYWVcIixcbiAgICBcInhmcm1fbmV3X2FlXCIsXG4gICAgXCJ4ZnJtX2FkZF9zYV9leHBpcmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgWEZSTSAoSVBzZWMpIHN0YXRlIGxvb2t1cCBsb2dpYyB0byBhbGxvdyBleGFjdCBtYXRjaGluZyBvZiBtYXJrcyBhbmQgbWFza3MgZHVyaW5nIGNvbnRyb2wgcGxhbmUgb3BlcmF0aW9ucyAoR0VULCBERUxFVEUsIE1JR1JBVEUpLiBUaGlzIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIG5ldGxpbmsgbWVzc2FnZXMgYW5kIGFmZmVjdHMgY29yZSBJUHNlYyBmdW5jdGlvbmFsaXR5LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowll9cc[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-06 15:00:56 +0000 UTC FinishedAt: 2026-07-06 15:20:19 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "226f4a490d1a938fc838d8f8c46a4eca864c0d78", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XFRM_USER", "XFRM_MIGRATE", "IPV6" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "226f4a490d1a938fc838d8f8c46a4eca864c0d78", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XFRM_USER", "XFRM_MIGRATE", "IPV6" ], "series_id": "b68e6bf7-5fa7-4f20-aa52-d6e5fadf9f98" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "xfrm_state_lookup_exact", "xfrm_state_lookup_byaddr", "xfrm_user_state_lookup", "xfrm_do_migrate_state", "xfrm_state_update", "xfrm_state_migrate_install", "xfrm_get_ae", "xfrm_new_ae", "xfrm_add_sa_expire" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE1OjE1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hGUk1fVVNFUiYjMzQ7LAogICAgJiMzNDtYRlJNX01JR1JBVEUmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3hmcm1fc3RhdGVfbG9va3VwX2V4YWN0JiMzNDssCiAgICAmIzM0O3hmcm1fc3RhdGVfbG9va3VwX2J5YWRkciYjMzQ7LAogICAgJiMzNDt4ZnJtX3VzZXJfc3RhdGVfbG9va3VwJiMzNDssCiAgICAmIzM0O3hmcm1fZG9fbWlncmF0ZV9zdGF0ZSYjMzQ7LAogICAgJiMzNDt4ZnJtX3N0YXRlX3VwZGF0ZSYjMzQ7LAogICAgJiMzNDt4ZnJtX3N0YXRlX21pZ3JhdGVfaW5zdGFsbCYjMzQ7LAogICAgJiMzNDt4ZnJtX2dldF9hZSYjMzQ7LAogICAgJiMzNDt4ZnJtX25ld19hZSYjMzQ7LAogICAgJiMzNDt4ZnJtX2FkZF9zYV9leHBpcmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFhGUk0gKElQc2VjKSBzdGF0ZSBsb29rdXAgbG9naWMgdG8gYWxsb3cgZXhhY3QgbWF0Y2hpbmcgb2YgbWFya3MgYW5kIG1hc2tzIGR1cmluZyBjb250cm9sIHBsYW5lIG9wZXJhdGlvbnMgKEdFVCwgREVMRVRFLCBNSUdSQVRFKS4gVGhpcyBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBuZXRsaW5rIG1lc3NhZ2VzIGFuZCBhZmZlY3RzIGNvcmUgSVBzZWMgZnVuY3Rpb25hbGl0eS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxNToxNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDY4MzA1OTExZTVhYmQ2ZTU1ZGQ4MDJkMzA1MDcxMDlmY2EyNTNkNDJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCA2IDE1OjE1OjI0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy94ZnJtL3hmcm1fbWlncmF0ZV9zdGF0ZS5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcveGZybS94ZnJtX21pZ3JhdGVfc3RhdGUucnN0XG5pbmRleCA5ZDUzY2IyMmIwMDc1Mi4uOTA1ZTNmMGM0ZWUwNmYgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcveGZybS94ZnJtX21pZ3JhdGVfc3RhdGUucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcveGZybS94ZnJtX21pZ3JhdGVfc3RhdGUucnN0XG5AQCAtMjcsMTUgJiM0MzsyNywxOCBAQCBTQSBJZGVudGlmaWNhdGlvblxuID09PT09PT09PT09PT09PT09XG4gXG4gVGhlIHN0cnVjdCBpcyBkZWZpbmVkIGluIGBgaW5jbHVkZS91YXBpL2xpbnV4L3hmcm0uaGBgLiBUaGUgU0EgaXMgbG9va2VkXG4tdXAgdXNpbmcgYGB4ZnJtX3N0YXRlX2xvb2t1cCgpYGAgd2l0aCBgYGlkLnNwaWBgLFxuLWBgaWQuZGFkZHJgYCwgYGBpZC5wcm90b2BgLCBgYGlkLmZhbWlseWBgLCBhbmRcbi1gYG9sZF9tYXJrLnYgXHUwMDI2IG9sZF9tYXJrLm1gYCBhcyB0aGUgbWFyayBrZXk6OlxuJiM0Mzt1cCB1c2luZyBgYHhmcm1fc3RhdGVfbG9va3VwX2V4YWN0KClgYCB3aXRoIGBgaWQuc3BpYGAsIGBgaWQuZGFkZHJgYCxcbiYjNDM7YGBpZC5wcm90b2BgLCBgYGlkLmZhbWlseWBgLCBhbmQgYW4gZXhhY3QgbWF0Y2ggYWdhaW5zdCBgYG9sZF9tYXJrLnZgYFxuJiM0MzthbmQgYGBvbGRfbWFyay5tYGAuIFVubGlrZSB0aGUgZGF0YSBwYXRoLCB3aGljaCB1c2VzIGEgbWFza2VkXG4mIzQzO2NvbXBhcmlzb24sIHRoaXMgcmVxdWlyZXMgdGhlIFNBJiMzOTtzIG1hcmsgYW5kIG1hc2sgdG8gZXF1YWwgYGBvbGRfbWFya2BgXG4mIzQzO2V4YWN0bHksIHNvIGEgYnJvYWQtbWFzayBTQSBpcyBuZXZlciBtYXRjaGVkIHdoZW4gYSBtb3JlIHNwZWNpZmljIG9uZVxuJiM0Mzt3YXMgaW50ZW5kZWQuIElmIG5vIHN1Y2ggU0EgZXhpc3RzLCBgYC1FU1JDSGBgIGlzIHJldHVybmVkLjo6XG4gXG4gICAgIHN0cnVjdCB4ZnJtX3VzZXJfbWlncmF0ZV9zdGF0ZSB7XG4gICAgICAgICBzdHJ1Y3QgeGZybV91c2Vyc2FfaWQgIGlkOyAgICAgICAvKiBzcGksIGRhZGRyLCBwcm90bywgZmFtaWx5ICovXG4gICAgICAgICB4ZnJtX2FkZHJlc3NfdCAgICAgICAgIG5ld19kYWRkcjtcbiAgICAgICAgIHhmcm1fYWRkcmVzc190ICAgICAgICAgbmV3X3NhZGRyO1xuLSAgICAgICAgc3RydWN0IHhmcm1fbWFyayAgICAgICBvbGRfbWFyazsgLyogU0EgbG9va3VwOiBrZXkgPSB2IFx1MDAyNiBtICovXG4mIzQzOyAgICAgICAgc3RydWN0IHhmcm1fbWFyayAgICAgICBvbGRfbWFyazsgLyogU0EgbG9va3VwIGtleSAoZXhhY3Qgdi9tIG1hdGNoKSAqL1xuICAgICAgICAgc3RydWN0IHhmcm1fc2VsZWN0b3IgICBuZXdfc2VsOyAgLyogbmV3IHNlbGVjdG9yIChzZWUgRmxhZ3MpICovXG4gICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICAgIG5ld19yZXFpZDtcbiAgICAgICAgIF9fdTMyICAgICAgICAgICAgICAgICAgZmxhZ3M7ICAgIC8qIFhGUk1fTUlHUkFURV9TVEFURV8qICovXG5AQCAtNzIsOCAmIzQzOzc1LDggQEAgaW5oZXJpdHMgdGhlIHZhbHVlIGZyb20gdGhlIGV4aXN0aW5nIFNBIChvbWl0LXRvLWluaGVyaXQpLlxuICAgICAgLSBEZXNjcmlwdGlvblxuICAgICogLSBgYFhGUk1BX01BUktgYFxuICAgICAgLSBNYXJrIG9uIHRoZSBtaWdyYXRlZCBTQSAoYGBzdHJ1Y3QgeGZybV9tYXJrYGApLiBBYnNlbnQgaW5oZXJpdHNcbi0gICAgICAgYGBvbGRfbWFya2BgLiBUbyB1c2Ugbm8gbWFyayBvbiB0aGUgbmV3IFNBLCBzZW5kIGBgWEZSTUFfTUFSS2BgXG4tICAgICAgIHdpdGggYGB7MCwgMH1gYC5cbiYjNDM7ICAgICAgIHRoZSBtYXJrIG9mIHRoZSBleGlzdGluZyBTQS4gVG8gdXNlIG5vIG1hcmsgb24gdGhlIG5ldyBTQSwgc2VuZFxuJiM0MzsgICAgICAgYGBYRlJNQV9NQVJLYGAgd2l0aCBgYHswLCAwfWBgLlxuICAgICogLSBgYFhGUk1BX0VOQ0FQYGBcbiAgICAgIC0gVURQIGVuY2Fwc3VsYXRpb24gdGVtcGxhdGU7IG9ubHkgYGBVRFBfRU5DQVBfRVNQSU5VRFBgYCBpcyBzdXBwb3J0ZWQuXG4gICAgICAgIFNldCBgYGVuY2FwX3R5cGU9MGBgIHRvIHJlbW92ZSBlbmNhcC5cbkBAIC0yNTksOCAmIzQzOzI2Miw5IEBAIEF0dHJpYnV0ZXMgaW4gdGhlIG5vdGlmaWNhdGlvblxuIEVycm9yIEhhbmRsaW5nXG4gPT09PT09PT09PT09PT1cbiBcbi1JZiB0aGUgdGFyZ2V0IFNBIHR1cGxlIChuZXcgZGFkZHIsIFNQSSwgcHJvdG8sIG5ldyBmYW1pbHkpIGlzIGFscmVhZHlcbi1vY2N1cGllZCwgdGhlIG9wZXJhdGlvbiByZXR1cm5zIGBgLUVFWElTVGBgIGJlZm9yZSB0aGUgbWlncmF0aW9uIGJlZ2lucy5cbiYjNDM7SWYgdGhlIHRhcmdldCBTQSB0dXBsZSAobmV3IGRhZGRyLCBTUEksIHByb3RvLCBuZXcgZmFtaWx5LCBtYXJrKSBpc1xuJiM0MzthbHJlYWR5IG9jY3VwaWVkLCB0aGUgb3BlcmF0aW9uIHJldHVybnMgYGAtRUVYSVNUYGAgYmVmb3JlIHRoZSBtaWdyYXRpb25cbiYjNDM7YmVnaW5zLlxuIFRoZSBvbGQgU0EgcmVtYWlucyBpbnRhY3QgYW5kIHRoZSBvcGVyYXRpb24gaXMgc2FmZSB0byByZXRyeSBhZnRlclxuIHJlc29sdmluZyB0aGUgY29uZmxpY3QuXG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQveGZybS5oIGIvaW5jbHVkZS9uZXQveGZybS5oXG5pbmRleCA1MTlhMDE1NmEwNWNhYy4uZWJlNTE0Mzc2MjU0YTYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC94ZnJtLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L3hmcm0uaFxuQEAgLTE3NDEsMTEgJiM0MzsxNzQxLDE0IEBAIHN0cnVjdCB4ZnJtX3N0YXRlICp4ZnJtX2lucHV0X3N0YXRlX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBtYXJrLFxuIFx0XHRcdFx0XHQgICBjb25zdCB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsXG4gXHRcdFx0XHRcdCAgIF9fYmUzMiBzcGksIHU4IHByb3RvLFxuIFx0XHRcdFx0XHQgICB1bnNpZ25lZCBzaG9ydCBmYW1pbHkpO1xuLXN0cnVjdCB4ZnJtX3N0YXRlICp4ZnJtX3N0YXRlX2xvb2t1cF9ieWFkZHIoc3RydWN0IG5ldCAqbmV0LCB1MzIgbWFyayxcbiYjNDM7c3RydWN0IHhmcm1fc3RhdGUgKnhmcm1fc3RhdGVfbG9va3VwX2J5YWRkcihzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBtYXJrLCB1MzIgbWFzaywgYm9vbCBleGFjdCxcbiBcdFx0XHRcdFx0ICAgIGNvbnN0IHhmcm1fYWRkcmVzc190ICpkYWRkcixcbiBcdFx0XHRcdFx0ICAgIGNvbnN0IHhmcm1fYWRkcmVzc190ICpzYWRkcixcbiBcdFx0XHRcdFx0ICAgIHU4IHByb3RvLFxuIFx0XHRcdFx0XHQgICAgdW5zaWduZWQgc2hvcnQgZmFtaWx5KTtcbiYjNDM7c3RydWN0IHhmcm1fc3RhdGUgKnhmcm1fc3RhdGVfbG9va3VwX2V4YWN0KHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IHhmcm1fbWFyayAqbWFyayxcbiYjNDM7XHRcdFx0XHRcdCAgIGNvbnN0IHhmcm1fYWRkcmVzc190ICpkYWRkciwgX19iZTMyIHNwaSxcbiYjNDM7XHRcdFx0XHRcdCAgIHU4IHByb3RvLCB1bnNpZ25lZCBzaG9ydCBmYW1pbHkpO1xuICNpZmRlZiBDT05GSUdfWEZSTV9TVUJfUE9MSUNZXG4gdm9pZCB4ZnJtX3RtcGxfc29ydChzdHJ1Y3QgeGZybV90bXBsICoqZHN0LCBzdHJ1Y3QgeGZybV90bXBsICoqc3JjLCBpbnQgbixcbiBcdFx0ICAgIHVuc2lnbmVkIHNob3J0IGZhbWlseSk7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYveGZybTZfaW5wdXQuYyBiL25ldC9pcHY2L3hmcm02X2lucHV0LmNcbmluZGV4IDg5ZDA0NDNiNTMwNzMyLi4yZGQzNDdmZWNlNTJjYSAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L3hmcm02X2lucHV0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L3hmcm02X2lucHV0LmNcbkBAIC0yNzIsNyAmIzQzOzI3Miw3IEBAIGludCB4ZnJtNl9pbnB1dF9hZGRyKHN0cnVjdCBza19idWZmICpza2IsIHhmcm1fYWRkcmVzc190ICpkYWRkcixcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIFxuLVx0XHR4ID0geGZybV9zdGF0ZV9sb29rdXBfYnlhZGRyKG5ldCwgc2tiLVx1MDAzZW1hcmssIGRzdCwgc3JjLCBwcm90bywgQUZfSU5FVDYpO1xuJiM0MztcdFx0eCA9IHhmcm1fc3RhdGVfbG9va3VwX2J5YWRkcihuZXQsIHNrYi1cdTAwM2VtYXJrLCAwLCBmYWxzZSwgZHN0LCBzcmMsIHByb3RvLCBBRl9JTkVUNik7XG4gXHRcdGlmICgheClcbiBcdFx0XHRjb250aW51ZTtcbiBcbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3N0YXRlLmMgYi9uZXQveGZybS94ZnJtX3N0YXRlLmNcbmluZGV4IGM1OGNkMDI0ZTNjNjc1Li4wYjNkYzc3ODlkZDc5MCAxMDA2NDRcbi0tLSBhL25ldC94ZnJtL3hmcm1fc3RhdGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hmcm0veGZybV9zdGF0ZS5jXG5AQCAtMTE3MiwxMSAmIzQzOzExNzIsMjIgQEAgc3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlICpfX3hmcm1fc3RhdGVfbG9va3VwX2FsbChjb25zdCBzdHJ1Y3QgeGZybV9oYXNoX3N0YXRlX3BcbiBcdHJldHVybiBOVUxMO1xuIH1cbiBcbi1zdGF0aWMgc3RydWN0IHhmcm1fc3RhdGUgKl9feGZybV9zdGF0ZV9sb29rdXAoY29uc3Qgc3RydWN0IHhmcm1faGFzaF9zdGF0ZV9wdHJzICpzdGF0ZV9wdHJzLFxuLVx0XHRcdFx0XHQgICAgICB1MzIgbWFyayxcbi1cdFx0XHRcdFx0ICAgICAgY29uc3QgeGZybV9hZGRyZXNzX3QgKmRhZGRyLFxuLVx0XHRcdFx0XHQgICAgICBfX2JlMzIgc3BpLCB1OCBwcm90byxcbi1cdFx0XHRcdFx0ICAgICAgdW5zaWduZWQgc2hvcnQgZmFtaWx5KVxuJiM0MzsvKiBleGFjdD1mYWxzZTogZGF0YS1wbGFuZSB3aWxkY2FyZCBtYXRjaCBhZ2FpbnN0IHgmIzM5O3MgbWFzay4gZXhhY3Q9dHJ1ZTpcbiYjNDM7ICogY29udHJvbC1wbGFuZSBpZGVudGl0eSBtYXRjaCwgbWFyayBhbmQgbWFzayBtdXN0IGJvdGggbWF0Y2ggZXhhY3RseS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBib29sIHhmcm1fc3RhdGVfbWFya19tYXRjaGVzKGNvbnN0IHN0cnVjdCB4ZnJtX3N0YXRlICp4LCB1MzIgbWFyaywgdTMyIG1hc2ssIGJvb2wgZXhhY3QpXG4mIzQzO3tcbiYjNDM7XHRpZiAoZXhhY3QpXG4mIzQzO1x0XHRyZXR1cm4geC1cdTAwM2VtYXJrLnYgPT0gbWFyayBcdTAwMjZcdTAwMjYgeC1cdTAwM2VtYXJrLm0gPT0gbWFzaztcbiYjNDM7XHRyZXR1cm4gKG1hcmsgXHUwMDI2IHgtXHUwMDNlbWFyay5tKSA9PSB4LVx1MDAzZW1hcmsudjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlICpcbiYjNDM7X194ZnJtX3N0YXRlX2xvb2t1cChjb25zdCBzdHJ1Y3QgeGZybV9oYXNoX3N0YXRlX3B0cnMgKnN0YXRlX3B0cnMsXG4mIzQzO1x0XHQgICAgdTMyIG1hcmssIHUzMiBtYXNrLCBib29sIGV4YWN0LFxuJiM0MztcdFx0ICAgIGNvbnN0IHhmcm1fYWRkcmVzc190ICpkYWRkcixcbiYjNDM7XHRcdCAgICBfX2JlMzIgc3BpLCB1OCBwcm90byxcbiYjNDM7XHRcdCAgICB1bnNpZ25lZCBzaG9ydCBmYW1pbHkpXG4ge1xuIFx0dW5zaWduZWQgaW50IGggPSBfX3hmcm1fc3BpX2hhc2goZGFkZHIsIHNwaSwgcHJvdG8sIGZhbWlseSwgc3RhdGVfcHRycy1cdTAwM2VobWFzayk7XG4gXHRzdHJ1Y3QgeGZybV9zdGF0ZSAqeDtcbkBAIC0xMTg4LDcgJiM0MzsxMTk5LDcgQEAgc3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlICpfX3hmcm1fc3RhdGVfbG9va3VwKGNvbnN0IHN0cnVjdCB4ZnJtX2hhc2hfc3RhdGVfcHRyc1xuIFx0XHQgICAgIXhmcm1fYWRkcl9lcXVhbChcdTAwMjZ4LVx1MDAzZWlkLmRhZGRyLCBkYWRkciwgZmFtaWx5KSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0aWYgKChtYXJrIFx1MDAyNiB4LVx1MDAzZW1hcmsubSkgIT0geC1cdTAwM2VtYXJrLnYpXG4mIzQzO1x0XHRpZiAoIXhmcm1fc3RhdGVfbWFya19tYXRjaGVzKHgsIG1hcmssIG1hc2ssIGV4YWN0KSlcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0aWYgKCF4ZnJtX3N0YXRlX2hvbGRfcmN1KHgpKVxuIFx0XHRcdGNvbnRpbnVlO1xuQEAgLTExOTgsNiAmIzQzOzEyMDksMTcgQEAgc3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlICpfX3hmcm1fc3RhdGVfbG9va3VwKGNvbnN0IHN0cnVjdCB4ZnJtX2hhc2hfc3RhdGVfcHRyc1xuIFx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuJiM0MztzdGF0aWMgc3RydWN0IHhmcm1fc3RhdGUgKlxuJiM0MztfX3hmcm1fc3RhdGVfbG9va3VwX2V4YWN0KGNvbnN0IHN0cnVjdCB4ZnJtX2hhc2hfc3RhdGVfcHRycyAqc3RhdGVfcHRycyxcbiYjNDM7XHRcdFx0ICBjb25zdCBzdHJ1Y3QgeGZybV9tYXJrICptYXJrLFxuJiM0MztcdFx0XHQgIGNvbnN0IHhmcm1fYWRkcmVzc190ICpkYWRkcixcbiYjNDM7XHRcdFx0ICBfX2JlMzIgc3BpLCB1OCBwcm90byxcbiYjNDM7XHRcdFx0ICB1bnNpZ25lZCBzaG9ydCBmYW1pbHkpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gX194ZnJtX3N0YXRlX2xvb2t1cChzdGF0ZV9wdHJzLCBtYXJrLVx1MDAzZXYsIG1hcmstXHUwMDNlbSwgdHJ1ZSxcbiYjNDM7XHRcdFx0XHQgICBkYWRkciwgc3BpLCBwcm90bywgZmFtaWx5KTtcbiYjNDM7fVxuJiM0MztcbiBzdHJ1Y3QgeGZybV9zdGF0ZSAqeGZybV9pbnB1dF9zdGF0ZV9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCB1MzIgbWFyayxcbiBcdFx0XHRcdFx0ICAgY29uc3QgeGZybV9hZGRyZXNzX3QgKmRhZGRyLFxuIFx0XHRcdFx0XHQgICBfX2JlMzIgc3BpLCB1OCBwcm90byxcbkBAIC0xMjI4LDcgJiM0MzsxMjUwLDcgQEAgc3RydWN0IHhmcm1fc3RhdGUgKnhmcm1faW5wdXRfc3RhdGVfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgdTMyIG1hcmssXG4gXG4gXHR4ZnJtX2hhc2hfcHRyc19nZXQobmV0LCBcdTAwMjZzdGF0ZV9wdHJzKTtcbiBcbi1cdHggPSBfX3hmcm1fc3RhdGVfbG9va3VwKFx1MDAyNnN0YXRlX3B0cnMsIG1hcmssIGRhZGRyLCBzcGksIHByb3RvLCBmYW1pbHkpO1xuJiM0MztcdHggPSBfX3hmcm1fc3RhdGVfbG9va3VwKFx1MDAyNnN0YXRlX3B0cnMsIG1hcmssIDAsIGZhbHNlLCBkYWRkciwgc3BpLCBwcm90bywgZmFtaWx5KTtcbiBcdGlmICh4KSB7XG4gXHRcdHNwaW5fbG9jayhcdTAwMjZuZXQtXHUwMDNleGZybS54ZnJtX3N0YXRlX2xvY2spO1xuIFx0XHRpZiAoeC1cdTAwM2VrbS5zdGF0ZSAhPSBYRlJNX1NUQVRFX1ZBTElEKSB7XG5AQCAtMTI1MiwxMSAmIzQzOzEyNzQsMTIgQEAgc3RydWN0IHhmcm1fc3RhdGUgKnhmcm1faW5wdXRfc3RhdGVfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgdTMyIG1hcmssXG4gfVxuIEVYUE9SVF9TWU1CT0woeGZybV9pbnB1dF9zdGF0ZV9sb29rdXApO1xuIFxuLXN0YXRpYyBzdHJ1Y3QgeGZybV9zdGF0ZSAqX194ZnJtX3N0YXRlX2xvb2t1cF9ieWFkZHIoY29uc3Qgc3RydWN0IHhmcm1faGFzaF9zdGF0ZV9wdHJzICpzdGF0ZV9wdHJzLFxuLVx0XHRcdFx0XHRcdCAgICAgdTMyIG1hcmssXG4tXHRcdFx0XHRcdFx0ICAgICBjb25zdCB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsXG4tXHRcdFx0XHRcdFx0ICAgICBjb25zdCB4ZnJtX2FkZHJlc3NfdCAqc2FkZHIsXG4tXHRcdFx0XHRcdFx0ICAgICB1OCBwcm90bywgdW5zaWduZWQgc2hvcnQgZmFtaWx5KVxuJiM0MztzdGF0aWMgc3RydWN0IHhmcm1fc3RhdGUgKlxuJiM0MztfX3hmcm1fc3RhdGVfbG9va3VwX2J5YWRkcihjb25zdCBzdHJ1Y3QgeGZybV9oYXNoX3N0YXRlX3B0cnMgKnN0YXRlX3B0cnMsXG4mIzQzO1x0XHRcdCAgIHUzMiBtYXJrLCB1MzIgbWFzaywgYm9vbCBleGFjdCxcbiYjNDM7XHRcdFx0ICAgY29uc3QgeGZybV9hZGRyZXNzX3QgKmRhZGRyLFxuJiM0MztcdFx0XHQgICBjb25zdCB4ZnJtX2FkZHJlc3NfdCAqc2FkZHIsXG4mIzQzO1x0XHRcdCAgIHU4IHByb3RvLCB1bnNpZ25lZCBzaG9ydCBmYW1pbHkpXG4ge1xuIFx0dW5zaWduZWQgaW50IGggPSBfX3hmcm1fc3JjX2hhc2goZGFkZHIsIHNhZGRyLCBmYW1pbHksIHN0YXRlX3B0cnMtXHUwMDNlaG1hc2spO1xuIFx0c3RydWN0IHhmcm1fc3RhdGUgKng7XG5AQCAtMTI2OCw3ICYjNDM7MTI5MSw3IEBAIHN0YXRpYyBzdHJ1Y3QgeGZybV9zdGF0ZSAqX194ZnJtX3N0YXRlX2xvb2t1cF9ieWFkZHIoY29uc3Qgc3RydWN0IHhmcm1faGFzaF9zdGF0XG4gXHRcdCAgICAheGZybV9hZGRyX2VxdWFsKFx1MDAyNngtXHUwMDNlcHJvcHMuc2FkZHIsIHNhZGRyLCBmYW1pbHkpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRpZiAoKG1hcmsgXHUwMDI2IHgtXHUwMDNlbWFyay5tKSAhPSB4LVx1MDAzZW1hcmsudilcbiYjNDM7XHRcdGlmICgheGZybV9zdGF0ZV9tYXJrX21hdGNoZXMoeCwgbWFyaywgbWFzaywgZXhhY3QpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRpZiAoIXhmcm1fc3RhdGVfaG9sZF9yY3UoeCkpXG4gXHRcdFx0Y29udGludWU7XG5AQCAtMTI4OCwxMCAmIzQzOzEzMTEsMzEgQEAgX194ZnJtX3N0YXRlX2xvY2F0ZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgaW50IHVzZV9zcGksIGludCBmYW1pbHkpXG4gXHR4ZnJtX2hhc2hfcHRyc19nZXQobmV0LCBcdTAwMjZzdGF0ZV9wdHJzKTtcbiBcbiBcdGlmICh1c2Vfc3BpKVxuLVx0XHRyZXR1cm4gX194ZnJtX3N0YXRlX2xvb2t1cChcdTAwMjZzdGF0ZV9wdHJzLCBtYXJrLCBcdTAwMjZ4LVx1MDAzZWlkLmRhZGRyLFxuJiM0MztcdFx0cmV0dXJuIF9feGZybV9zdGF0ZV9sb29rdXAoXHUwMDI2c3RhdGVfcHRycywgbWFyaywgMCwgZmFsc2UsIFx1MDAyNngtXHUwMDNlaWQuZGFkZHIsXG4gXHRcdFx0XHRcdCAgIHgtXHUwMDNlaWQuc3BpLCB4LVx1MDAzZWlkLnByb3RvLCBmYW1pbHkpO1xuIFx0ZWxzZVxuLVx0XHRyZXR1cm4gX194ZnJtX3N0YXRlX2xvb2t1cF9ieWFkZHIoXHUwMDI2c3RhdGVfcHRycywgbWFyayxcbiYjNDM7XHRcdHJldHVybiBfX3hmcm1fc3RhdGVfbG9va3VwX2J5YWRkcihcdTAwMjZzdGF0ZV9wdHJzLCBtYXJrLCAwLCBmYWxzZSxcbiYjNDM7XHRcdFx0XHRcdFx0ICBcdTAwMjZ4LVx1MDAzZWlkLmRhZGRyLFxuJiM0MztcdFx0XHRcdFx0XHQgIFx1MDAyNngtXHUwMDNlcHJvcHMuc2FkZHIsXG4mIzQzO1x0XHRcdFx0XHRcdCAgeC1cdTAwM2VpZC5wcm90bywgZmFtaWx5KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogVXNlZCBieSB4ZnJtX3N0YXRlX3VwZGF0ZSgpIG9ubHk7IHhmcm1fc3RhdGVfYWRkKCkmIzM5O3MgZHVwIGNoZWNrIGtlZXBzXG4mIzQzOyAqIHVzaW5nIHRoZSB3aWxkY2FyZCBfX3hmcm1fc3RhdGVfbG9jYXRlKCkgYWJvdmUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCB4ZnJtX3N0YXRlICpcbiYjNDM7X194ZnJtX3N0YXRlX2xvY2F0ZV9leGFjdChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgaW50IHVzZV9zcGksIGludCBmYW1pbHkpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeGZybV9oYXNoX3N0YXRlX3B0cnMgc3RhdGVfcHRycztcbiYjNDM7XHRzdHJ1Y3QgbmV0ICpuZXQgPSB4c19uZXQoeCk7XG4mIzQzO1xuJiM0MztcdHhmcm1faGFzaF9wdHJzX2dldChuZXQsIFx1MDAyNnN0YXRlX3B0cnMpO1xuJiM0MztcbiYjNDM7XHRpZiAodXNlX3NwaSlcbiYjNDM7XHRcdHJldHVybiBfX3hmcm1fc3RhdGVfbG9va3VwX2V4YWN0KFx1MDAyNnN0YXRlX3B0cnMsIFx1MDAyNngtXHUwMDNlbWFyaywgXHUwMDI2eC1cdTAwM2VpZC5kYWRkcixcbiYjNDM7XHRcdFx0XHRcdFx0IHgtXHUwMDNlaWQuc3BpLCB4LVx1MDAzZWlkLnByb3RvLCBmYW1pbHkpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHJldHVybiBfX3hmcm1fc3RhdGVfbG9va3VwX2J5YWRkcihcdTAwMjZzdGF0ZV9wdHJzLCB4LVx1MDAzZW1hcmsudiwgeC1cdTAwM2VtYXJrLm0sIHRydWUsXG4gXHRcdFx0XHRcdFx0ICBcdTAwMjZ4LVx1MDAzZWlkLmRhZGRyLFxuIFx0XHRcdFx0XHRcdCAgXHUwMDI2eC1cdTAwM2Vwcm9wcy5zYWRkcixcbiBcdFx0XHRcdFx0XHQgIHgtXHUwMDNlaWQucHJvdG8sIGZhbWlseSk7XG5AQCAtMjE3NywxMCAmIzQzOzIyMjEsMTIgQEAgaW50IHhmcm1fc3RhdGVfbWlncmF0ZV9pbnN0YWxsKGNvbnN0IHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxuIFx0XHRcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuIFx0aWYgKG0tXHUwMDNlbmV3X2ZhbWlseSA9PSBtLVx1MDAzZW9sZF9mYW1pbHkgXHUwMDI2XHUwMDI2XG4tXHQgICAgeGZybV9hZGRyX2VxdWFsKFx1MDAyNngtXHUwMDNlaWQuZGFkZHIsIFx1MDAyNm0tXHUwMDNlbmV3X2RhZGRyLCBtLVx1MDAzZW5ld19mYW1pbHkpKSB7XG4mIzQzO1x0ICAgIHhmcm1fYWRkcl9lcXVhbChcdTAwMjZ4LVx1MDAzZWlkLmRhZGRyLCBcdTAwMjZtLVx1MDAzZW5ld19kYWRkciwgbS1cdTAwM2VuZXdfZmFtaWx5KSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgeGMtXHUwMDNlbWFyay52ID09IHgtXHUwMDNlbWFyay52IFx1MDAyNlx1MDAyNiB4Yy1cdTAwM2VtYXJrLm0gPT0geC1cdTAwM2VtYXJrLm0pIHtcbiBcdFx0Lypcbi1cdFx0ICogQ2FyZSBpcyBuZWVkZWQgd2hlbiB0aGUgZGVzdGluYXRpb24gYWRkcmVzcyBvZiB0aGUgc3RhdGUgaXNcbi1cdFx0ICogdG8gYmUgdXBkYXRlZCBhcyBpdCBpcyBhIHBhcnQgb2YgdHJpcGxldC5cbiYjNDM7XHRcdCAqIENhcmUgaXMgbmVlZGVkIHdoZW4gdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3Mgb3IgbWFyayBvZiB0aGVcbiYjNDM7XHRcdCAqIHN0YXRlIGlzIHRvIGJlIHVwZGF0ZWQsIGFzIHRoZXkgYXJlIHBhcnQgb2YgdGhlIGxvb2t1cFxuJiM0MztcdFx0ICogdHJpcGxldC5cbiBcdFx0ICovXG4gXHRcdHhmcm1fc3RhdGVfaW5zZXJ0KHhjKTtcbiBcdH0gZWxzZSB7XG5AQCAtMjIyOSw3ICYjNDM7MjI3NSw3IEBAIGludCB4ZnJtX3N0YXRlX3VwZGF0ZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcbiBcdHRvX3B1dCA9IE5VTEw7XG4gXG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2bmV0LVx1MDAzZXhmcm0ueGZybV9zdGF0ZV9sb2NrKTtcbi1cdHgxID0gX194ZnJtX3N0YXRlX2xvY2F0ZSh4LCB1c2Vfc3BpLCB4LVx1MDAzZXByb3BzLmZhbWlseSk7XG4mIzQzO1x0eDEgPSBfX3hmcm1fc3RhdGVfbG9jYXRlX2V4YWN0KHgsIHVzZV9zcGksIHgtXHUwMDNlcHJvcHMuZmFtaWx5KTtcbiBcbiBcdGVyciA9IC1FU1JDSDtcbiBcdGlmICgheDEpXG5AQCAtMjM3NCwxNCAmIzQzOzI0MjAsMTQgQEAgeGZybV9zdGF0ZV9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCB1MzIgbWFyaywgY29uc3QgeGZybV9hZGRyZXNzX3QgKmRhZGRyLCBfX2JlMzJcbiBcdHJjdV9yZWFkX2xvY2soKTtcbiBcdHhmcm1faGFzaF9wdHJzX2dldChuZXQsIFx1MDAyNnN0YXRlX3B0cnMpO1xuIFxuLVx0eCA9IF9feGZybV9zdGF0ZV9sb29rdXAoXHUwMDI2c3RhdGVfcHRycywgbWFyaywgZGFkZHIsIHNwaSwgcHJvdG8sIGZhbWlseSk7XG4mIzQzO1x0eCA9IF9feGZybV9zdGF0ZV9sb29rdXAoXHUwMDI2c3RhdGVfcHRycywgbWFyaywgMCwgZmFsc2UsIGRhZGRyLCBzcGksIHByb3RvLCBmYW1pbHkpO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRyZXR1cm4geDtcbiB9XG4gRVhQT1JUX1NZTUJPTCh4ZnJtX3N0YXRlX2xvb2t1cCk7XG4gXG4gc3RydWN0IHhmcm1fc3RhdGUgKlxuLXhmcm1fc3RhdGVfbG9va3VwX2J5YWRkcihzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBtYXJrLFxuJiM0Mzt4ZnJtX3N0YXRlX2xvb2t1cF9ieWFkZHIoc3RydWN0IG5ldCAqbmV0LCB1MzIgbWFyaywgdTMyIG1hc2ssIGJvb2wgZXhhY3QsXG4gXHRcdFx0IGNvbnN0IHhmcm1fYWRkcmVzc190ICpkYWRkciwgY29uc3QgeGZybV9hZGRyZXNzX3QgKnNhZGRyLFxuIFx0XHRcdCB1OCBwcm90bywgdW5zaWduZWQgc2hvcnQgZmFtaWx5KVxuIHtcbkBAIC0yMzkyLDEyICYjNDM7MjQzOCwyOSBAQCB4ZnJtX3N0YXRlX2xvb2t1cF9ieWFkZHIoc3RydWN0IG5ldCAqbmV0LCB1MzIgbWFyayxcbiBcbiBcdHhmcm1faGFzaF9wdHJzX2dldChuZXQsIFx1MDAyNnN0YXRlX3B0cnMpO1xuIFxuLVx0eCA9IF9feGZybV9zdGF0ZV9sb29rdXBfYnlhZGRyKFx1MDAyNnN0YXRlX3B0cnMsIG1hcmssIGRhZGRyLCBzYWRkciwgcHJvdG8sIGZhbWlseSk7XG4mIzQzO1x0eCA9IF9feGZybV9zdGF0ZV9sb29rdXBfYnlhZGRyKFx1MDAyNnN0YXRlX3B0cnMsIG1hcmssIG1hc2ssIGV4YWN0LCBkYWRkciwgc2FkZHIsIHByb3RvLCBmYW1pbHkpO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRyZXR1cm4geDtcbiB9XG4gRVhQT1JUX1NZTUJPTCh4ZnJtX3N0YXRlX2xvb2t1cF9ieWFkZHIpO1xuIFxuJiM0MztzdHJ1Y3QgeGZybV9zdGF0ZSAqXG4mIzQzO3hmcm1fc3RhdGVfbG9va3VwX2V4YWN0KHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IHhmcm1fbWFyayAqbWFyayxcbiYjNDM7XHRcdFx0Y29uc3QgeGZybV9hZGRyZXNzX3QgKmRhZGRyLCBfX2JlMzIgc3BpLFxuJiM0MztcdFx0XHR1OCBwcm90bywgdW5zaWduZWQgc2hvcnQgZmFtaWx5KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHhmcm1faGFzaF9zdGF0ZV9wdHJzIHN0YXRlX3B0cnM7XG4mIzQzO1x0c3RydWN0IHhmcm1fc3RhdGUgKng7XG4mIzQzO1xuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHR4ZnJtX2hhc2hfcHRyc19nZXQobmV0LCBcdTAwMjZzdGF0ZV9wdHJzKTtcbiYjNDM7XG4mIzQzO1x0eCA9IF9feGZybV9zdGF0ZV9sb29rdXBfZXhhY3QoXHUwMDI2c3RhdGVfcHRycywgbWFyaywgZGFkZHIsIHNwaSwgcHJvdG8sIGZhbWlseSk7XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1x0cmV0dXJuIHg7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTCh4ZnJtX3N0YXRlX2xvb2t1cF9leGFjdCk7XG4mIzQzO1xuIHN0cnVjdCB4ZnJtX3N0YXRlICpcbiB4ZnJtX2ZpbmRfYWNxKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IHhmcm1fbWFyayAqbWFyaywgdTggbW9kZSwgdTMyIHJlcWlkLFxuIFx0ICAgICAgdTMyIGlmX2lkLCB1MzIgcGNwdV9udW0sIHU4IHByb3RvLCBjb25zdCB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsXG5AQCAtMzMwNiw3ICYjNDM7MzM2OSw3IEBAIGludCB4ZnJtX2luaXRfc3RhdGUoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG4tXHRlcnIgPSB4ZnJtX2luaXRfcmVwbGF5KHgsIE5VTEwpO1xuJiM0MztcdGVyciA9IHhmcm1faW5pdF9yZXBsYXkoeCwgZXh0YWNrKTtcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV91c2VyLmMgYi9uZXQveGZybS94ZnJtX3VzZXIuY1xuaW5kZXggNjM4NDc5NWVlNmIyNjkuLmEyMzE3ZTZlNjgwMmRkIDEwMDY0NFxuLS0tIGEvbmV0L3hmcm0veGZybV91c2VyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZnJtL3hmcm1fdXNlci5jXG5AQCAtMTA4OSwxMSAmIzQzOzEwODksMTIgQEAgc3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlICp4ZnJtX3VzZXJfc3RhdGVfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCxcbiBcdHN0cnVjdCB4ZnJtX3N0YXRlICp4ID0gTlVMTDtcbiBcdHN0cnVjdCB4ZnJtX21hcmsgbTtcbiBcdGludCBlcnI7XG4tXHR1MzIgbWFyayA9IHhmcm1fbWFya19nZXQoYXR0cnMsIFx1MDAyNm0pO1xuJiM0MztcbiYjNDM7XHR4ZnJtX21hcmtfZ2V0KGF0dHJzLCBcdTAwMjZtKTtcbiBcbiBcdGlmICh4ZnJtX2lkX3Byb3RvX21hdGNoKHAtXHUwMDNlcHJvdG8sIElQU0VDX1BST1RPX0FOWSkpIHtcbiBcdFx0ZXJyID0gLUVTUkNIO1xuLVx0XHR4ID0geGZybV9zdGF0ZV9sb29rdXAobmV0LCBtYXJrLCBcdTAwMjZwLVx1MDAzZWRhZGRyLCBwLVx1MDAzZXNwaSwgcC1cdTAwM2Vwcm90bywgcC1cdTAwM2VmYW1pbHkpO1xuJiM0MztcdFx0eCA9IHhmcm1fc3RhdGVfbG9va3VwX2V4YWN0KG5ldCwgXHUwMDI2bSwgXHUwMDI2cC1cdTAwM2VkYWRkciwgcC1cdTAwM2VzcGksIHAtXHUwMDNlcHJvdG8sIHAtXHUwMDNlZmFtaWx5KTtcbiBcdH0gZWxzZSB7XG4gXHRcdHhmcm1fYWRkcmVzc190ICpzYWRkciA9IE5VTEw7XG4gXG5AQCAtMTEwNCw3ICYjNDM7MTEwNSw3IEBAIHN0YXRpYyBzdHJ1Y3QgeGZybV9zdGF0ZSAqeGZybV91c2VyX3N0YXRlX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdH1cbiBcbiBcdFx0ZXJyID0gLUVTUkNIO1xuLVx0XHR4ID0geGZybV9zdGF0ZV9sb29rdXBfYnlhZGRyKG5ldCwgbWFyayxcbiYjNDM7XHRcdHggPSB4ZnJtX3N0YXRlX2xvb2t1cF9ieWFkZHIobmV0LCBtLnYsIG0ubSwgdHJ1ZSxcbiBcdFx0XHRcdFx0ICAgICBcdTAwMjZwLVx1MDAzZWRhZGRyLCBzYWRkcixcbiBcdFx0XHRcdFx0ICAgICBwLVx1MDAzZXByb3RvLCBwLVx1MDAzZWZhbWlseSk7XG4gXHR9XG5AQCAtMjc4OCwxNCAmIzQzOzI3ODksMTMgQEAgc3RhdGljIGludCB4ZnJtX2dldF9hZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbiBcdHN0cnVjdCBza19idWZmICpyX3NrYjtcbiBcdGludCBlcnI7XG4gXHRzdHJ1Y3Qga21fZXZlbnQgYztcbi1cdHUzMiBtYXJrO1xuIFx0c3RydWN0IHhmcm1fbWFyayBtO1xuIFx0c3RydWN0IHhmcm1fYWV2ZW50X2lkICpwID0gbmxtc2dfZGF0YShubGgpO1xuIFx0c3RydWN0IHhmcm1fdXNlcnNhX2lkICppZCA9IFx1MDAyNnAtXHUwMDNlc2FfaWQ7XG4gXG4tXHRtYXJrID0geGZybV9tYXJrX2dldChhdHRycywgXHUwMDI2bSk7XG4mIzQzO1x0eGZybV9tYXJrX2dldChhdHRycywgXHUwMDI2bSk7XG4gXG4tXHR4ID0geGZybV9zdGF0ZV9sb29rdXAobmV0LCBtYXJrLCBcdTAwMjZpZC1cdTAwM2VkYWRkciwgaWQtXHUwMDNlc3BpLCBpZC1cdTAwM2Vwcm90bywgaWQtXHUwMDNlZmFtaWx5KTtcbiYjNDM7XHR4ID0geGZybV9zdGF0ZV9sb29rdXBfZXhhY3QobmV0LCBcdTAwMjZtLCBcdTAwMjZpZC1cdTAwM2VkYWRkciwgaWQtXHUwMDNlc3BpLCBpZC1cdTAwM2Vwcm90bywgaWQtXHUwMDNlZmFtaWx5KTtcbiBcdGlmICh4ID09IE5VTEwpXG4gXHRcdHJldHVybiAtRVNSQ0g7XG4gXG5AQCAtMjgzNiw3ICYjNDM7MjgzNiw2IEBAIHN0YXRpYyBpbnQgeGZybV9uZXdfYWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4gXHRzdHJ1Y3QgeGZybV9zdGF0ZSAqeDtcbiBcdHN0cnVjdCBrbV9ldmVudCBjO1xuIFx0aW50IGVyciA9IC1FSU5WQUw7XG4tXHR1MzIgbWFyayA9IDA7XG4gXHRzdHJ1Y3QgeGZybV9tYXJrIG07XG4gXHRzdHJ1Y3QgeGZybV9hZXZlbnRfaWQgKnAgPSBubG1zZ19kYXRhKG5saCk7XG4gXHRzdHJ1Y3QgbmxhdHRyICpycCA9IGF0dHJzW1hGUk1BX1JFUExBWV9WQUxdO1xuQEAgLTI4NTYsOSAmIzQzOzI4NTUsMTAgQEAgc3RhdGljIGludCB4ZnJtX25ld19hZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbiBcdFx0cmV0dXJuIGVycjtcbiBcdH1cbiBcbi1cdG1hcmsgPSB4ZnJtX21hcmtfZ2V0KGF0dHJzLCBcdTAwMjZtKTtcbiYjNDM7XHR4ZnJtX21hcmtfZ2V0KGF0dHJzLCBcdTAwMjZtKTtcbiBcbi1cdHggPSB4ZnJtX3N0YXRlX2xvb2t1cChuZXQsIG1hcmssIFx1MDAyNnAtXHUwMDNlc2FfaWQuZGFkZHIsIHAtXHUwMDNlc2FfaWQuc3BpLCBwLVx1MDAzZXNhX2lkLnByb3RvLCBwLVx1MDAzZXNhX2lkLmZhbWlseSk7XG4mIzQzO1x0eCA9IHhmcm1fc3RhdGVfbG9va3VwX2V4YWN0KG5ldCwgXHUwMDI2bSwgXHUwMDI2cC1cdTAwM2VzYV9pZC5kYWRkciwgcC1cdTAwM2VzYV9pZC5zcGksXG4mIzQzO1x0XHRcdFx0ICAgIHAtXHUwMDNlc2FfaWQucHJvdG8sIHAtXHUwMDNlc2FfaWQuZmFtaWx5KTtcbiBcdGlmICh4ID09IE5VTEwpXG4gXHRcdHJldHVybiAtRVNSQ0g7XG4gXG5AQCAtMjk5Miw5ICYjNDM7Mjk5MiwxMCBAQCBzdGF0aWMgaW50IHhmcm1fYWRkX3NhX2V4cGlyZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbiBcdHN0cnVjdCB4ZnJtX3VzZXJfZXhwaXJlICp1ZSA9IG5sbXNnX2RhdGEobmxoKTtcbiBcdHN0cnVjdCB4ZnJtX3VzZXJzYV9pbmZvICpwID0gXHUwMDI2dWUtXHUwMDNlc3RhdGU7XG4gXHRzdHJ1Y3QgeGZybV9tYXJrIG07XG4tXHR1MzIgbWFyayA9IHhmcm1fbWFya19nZXQoYXR0cnMsIFx1MDAyNm0pO1xuIFxuLVx0eCA9IHhmcm1fc3RhdGVfbG9va3VwKG5ldCwgbWFyaywgXHUwMDI2cC1cdTAwM2VpZC5kYWRkciwgcC1cdTAwM2VpZC5zcGksIHAtXHUwMDNlaWQucHJvdG8sIHAtXHUwMDNlZmFtaWx5KTtcbiYjNDM7XHR4ZnJtX21hcmtfZ2V0KGF0dHJzLCBcdTAwMjZtKTtcbiYjNDM7XG4mIzQzO1x0eCA9IHhmcm1fc3RhdGVfbG9va3VwX2V4YWN0KG5ldCwgXHUwMDI2bSwgXHUwMDI2cC1cdTAwM2VpZC5kYWRkciwgcC1cdTAwM2VpZC5zcGksIHAtXHUwMDNlaWQucHJvdG8sIHAtXHUwMDNlZmFtaWx5KTtcbiBcbiBcdGVyciA9IC1FTk9FTlQ7XG4gXHRpZiAoeCA9PSBOVUxMKVxuQEAgLTMzNjEsOSAmIzQzOzMzNjIsOSBAQCBzdGF0aWMgaW50IHhmcm1fZG9fbWlncmF0ZV9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbiBcbiBcdGNvcHlfZnJvbV91c2VyX21pZ3JhdGVfc3RhdGUoXHUwMDI2bSwgdW0pO1xuIFxuLVx0eCA9IHhmcm1fc3RhdGVfbG9va3VwKG5ldCwgbS5vbGRfbWFyay52IFx1MDAyNiBtLm9sZF9tYXJrLm0sXG4tXHRcdFx0ICAgICAgXHUwMDI2dW0tXHUwMDNlaWQuZGFkZHIsIHVtLVx1MDAzZWlkLnNwaSxcbi1cdFx0XHQgICAgICB1bS1cdTAwM2VpZC5wcm90bywgdW0tXHUwMDNlaWQuZmFtaWx5KTtcbiYjNDM7XHR4ID0geGZybV9zdGF0ZV9sb29rdXBfZXhhY3QobmV0LCBcdTAwMjZtLm9sZF9tYXJrLFxuJiM0MztcdFx0XHRcdCAgICBcdTAwMjZ1bS1cdTAwM2VpZC5kYWRkciwgdW0tXHUwMDNlaWQuc3BpLFxuJiM0MztcdFx0XHRcdCAgICB1bS1cdTAwM2VpZC5wcm90bywgdW0tXHUwMDNlaWQuZmFtaWx5KTtcbiBcdGlmICgheCkge1xuIFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O0NhbiBub3QgZmluZCBzdGF0ZVwmIzM0Oyk7XG4gXHRcdHJldHVybiAtRVNSQ0g7XG5AQCAtMzQzNCwxOCAmIzQzOzM0MzUsMjMgQEAgc3RhdGljIGludCB4ZnJtX2RvX21pZ3JhdGVfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4gXHRcdFx0XHRcdFx0ICAgICAgIHgtXHUwMDNlbmF0X2tlZXBhbGl2ZV9pbnRlcnZhbCk7XG4gXG4gXHRpZiAobS5uZXdfZmFtaWx5ICE9IHVtLVx1MDAzZWlkLmZhbWlseSB8fFxuLVx0ICAgICF4ZnJtX2FkZHJfZXF1YWwoXHUwMDI2bS5uZXdfZGFkZHIsIFx1MDAyNnVtLVx1MDAzZWlkLmRhZGRyLCB1bS1cdTAwM2VpZC5mYW1pbHkpKSB7XG4mIzQzO1x0ICAgICF4ZnJtX2FkZHJfZXF1YWwoXHUwMDI2bS5uZXdfZGFkZHIsIFx1MDAyNnVtLVx1MDAzZWlkLmRhZGRyLCB1bS1cdTAwM2VpZC5mYW1pbHkpIHx8XG4mIzQzO1x0ICAgIChtLm5ld19tYXJrIFx1MDAyNlx1MDAyNiAobS5uZXdfbWFyay1cdTAwM2V2ICE9IHgtXHUwMDNlbWFyay52IHx8XG4mIzQzO1x0XHRcdCAgIG0ubmV3X21hcmstXHUwMDNlbSAhPSB4LVx1MDAzZW1hcmsubSkpKSB7XG4gXHRcdHUzMiBuZXdfbWFya19rZXkgPSBtLm5ld19tYXJrID8gbS5uZXdfbWFyay1cdTAwM2V2IFx1MDAyNiBtLm5ld19tYXJrLVx1MDAzZW0gOlxuLVx0XHRcdFx0XHRcdG0ub2xkX21hcmsudiBcdTAwMjYgbS5vbGRfbWFyay5tO1xuJiM0MztcdFx0XHRcdFx0XHR4LVx1MDAzZW1hcmsudiBcdTAwMjYgeC1cdTAwM2VtYXJrLm07XG4gXHRcdHN0cnVjdCB4ZnJtX3N0YXRlICp4X25ldztcbiBcbiBcdFx0eF9uZXcgPSB4ZnJtX3N0YXRlX2xvb2t1cChuZXQsIG5ld19tYXJrX2tleSwgXHUwMDI2bS5uZXdfZGFkZHIsXG4gXHRcdFx0XHRcdCAgdW0tXHUwMDNlaWQuc3BpLCB1bS1cdTAwM2VpZC5wcm90bywgbS5uZXdfZmFtaWx5KTtcbiBcdFx0aWYgKHhfbmV3KSB7XG4gXHRcdFx0eGZybV9zdGF0ZV9wdXQoeF9uZXcpO1xuLVx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7TmV3IFNBIHR1cGxlIGFscmVhZHkgb2NjdXBpZWRcJiMzNDspO1xuLVx0XHRcdGVyciA9IC1FRVhJU1Q7XG4tXHRcdFx0Z290byBvdXQ7XG4mIzQzO1x0XHRcdGlmICh4X25ldyAhPSB4KSB7XG4mIzQzO1x0XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtOZXcgU0EgdHVwbGUgYWxyZWFkeSBvY2N1cGllZFwmIzM0Oyk7XG4mIzQzO1x0XHRcdFx0ZXJyID0gLUVFWElTVDtcbiYjNDM7XHRcdFx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHQvKiBzZWxmLW1hdGNoIHZpYSB3aWRlIG1hcmsgbWFzazsgbm90IGEgY29sbGlzaW9uICovXG4gXHRcdH1cbiBcdH1cbiBcbkBAIC0zNDY3LDYgJiM0MzszNDczLDcgQEAgc3RhdGljIGludCB4ZnJtX2RvX21pZ3JhdGVfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4gXHRfX3hmcm1fc3RhdGVfZGVsZXRlKHgpO1xuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2eC1cdTAwM2Vsb2NrKTtcbiBcbiYjNDM7XHR4ZnJtX3N0YXRlX2hvbGQoeGMpO1xuIFx0ZXJyID0geGZybV9zdGF0ZV9taWdyYXRlX2luc3RhbGwoeCwgeGMsIFx1MDAyNm0sIGV4dGFjayk7XG4gXHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4gXHRcdC8qXG5AQCAtMzQ3NCw2ICYjNDM7MzQ4MSw3IEBAIHN0YXRpYyBpbnQgeGZybV9kb19taWdyYXRlX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuIFx0XHQgKiBmcmVlIHVuZGVyIHhmcm1fY2ZnX211dGV4LiBCb3RoIFNBcyBhcmUgZ29uZSBpZiBpdCBkb2VzO1xuIFx0XHQgKiByZXN0b3JpbmcgeCB3b3VsZCByaXNrIFNOL0lWIHJldXNlLlxuIFx0XHQgKi9cbiYjNDM7XHRcdHhmcm1fc3RhdGVfcHV0KHhjKTtcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG5AQCAtMzQ5MiwxMCAmIzQzOzM1MDAsMTMgQEAgc3RhdGljIGludCB4ZnJtX2RvX21pZ3JhdGVfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4gXHRcdGVyciA9IDA7XG4gXHR9XG4gXG4mIzQzO1x0eGZybV9zdGF0ZV9wdXQoeGMpO1xuIG91dDpcbiBcdHhmcm1fc3RhdGVfcHV0KHgpO1xuIFx0cmV0dXJuIGVycjtcbiBvdXRfeGM6XG4mIzQzO1x0aWYgKG0ueHVvKVxuJiM0MztcdFx0eGZybV9kZXZfc3RhdGVfZGVsZXRlKHhjKTtcbiBcdHhjLVx1MDAzZWttLnN0YXRlID0gWEZSTV9TVEFURV9ERUFEO1xuIFx0eGZybV9zdGF0ZV9wdXQoeGMpO1xuIFx0eGZybV9zdGF0ZV9wdXQoeCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3hmcm1fc3RhdGUuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQveGZybV9zdGF0ZS5zaFxuaW5kZXggZjZjNTRhNjQ5NmQ3MTQuLmYyMDIwNzM3MjZhOWY0IDEwMDc1NVxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3hmcm1fc3RhdGUuc2hcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC94ZnJtX3N0YXRlLnNoXG5AQCAtNDIsNyAmIzQzOzQyLDExIEBAIHRlc3RzPVwmIzM0O1xuIFx0bXR1X2lwdjRfcjJcdFx0XHRJUHY0IE1UVSBleGNlZWRlZCBmcm9tIEVTUCByb3V0ZXIgcjJcbiBcdG10dV9pcHY2X3IyXHRcdFx0SVB2NiBNVFUgZXhjZWVkZWQgZnJvbSBFU1Agcm91dGVyIHIyXG4gXHRtdHVfaXB2NF9yM1x0XHRcdElQdjQgTVRVIGV4Y2VlZGVkIGZyb20gcm91dGVyIHIzXG4tXHRtdHVfaXB2Nl9yM1x0XHRcdElQdjYgTVRVIGV4Y2VlZGVkIGZyb20gcm91dGVyIHIzXCYjMzQ7XG4mIzQzO1x0bXR1X2lwdjZfcjNcdFx0XHRJUHY2IE1UVSBleGNlZWRlZCBmcm9tIHJvdXRlciByM1xuJiM0MztcdG1hcmtfd2lsZGNhcmRfc2hhZG93XHRcdG1hcms6IHdpbGRjYXJkIFNBIGluIGJ5LXNwaSBzdGF0ZSBnZXQgbG9va3VwXG4mIzQzO1x0bWFya193aWxkY2FyZF9kZWxldGVcdFx0bWFyazogd2lsZGNhcmQgU0EgaW4gYnktc3BpIHN0YXRlIGRlbGV0ZVxuJiM0MztcdG1hcmtfd2lsZGNhcmRfZ2V0X2FkZHJcdFx0bWFyazogd2lsZGNhcmQgU0EgaW4gYnktYWRkcmVzcyBnZXQgbG9va3VwXG4mIzQzO1x0bWFya193aWxkY2FyZF9kZWxldGVfYWRkclx0bWFyazogd2lsZGNhcmQgU0EgaW4gYnktYWRkcmVzcyBkZWxldGVcJiMzNDtcbiBcbiBwcmVmaXg0PVwmIzM0OzEwLjFcJiMzNDtcbiBwcmVmaXg2PVwmIzM0O2ZjMDBcJiMzNDtcbkBAIC0xMDEsNiAmIzQzOzEwNSwxMCBAQCBydW5fdGVzdCgpIHtcbiBcdFx0bXR1X2lwdjZfcjIpICAgICAgICAgdGVzdF9tdHVfaXB2Nl9yMiA7O1xuIFx0XHRtdHVfaXB2NF9yMykgICAgICAgICB0ZXN0X210dV9pcHY0X3IzIDs7XG4gXHRcdG10dV9pcHY2X3IzKSAgICAgICAgIHRlc3RfbXR1X2lwdjZfcjMgOztcbiYjNDM7XHRcdG1hcmtfd2lsZGNhcmRfc2hhZG93KSAgICAgIHRlc3RfbWFya193aWxkY2FyZF9zaGFkb3cgOztcbiYjNDM7XHRcdG1hcmtfd2lsZGNhcmRfZGVsZXRlKSAgICAgIHRlc3RfbWFya193aWxkY2FyZF9kZWxldGUgOztcbiYjNDM7XHRcdG1hcmtfd2lsZGNhcmRfZ2V0X2FkZHIpICAgIHRlc3RfbWFya193aWxkY2FyZF9nZXRfYWRkciA7O1xuJiM0MztcdFx0bWFya193aWxkY2FyZF9kZWxldGVfYWRkcikgdGVzdF9tYXJrX3dpbGRjYXJkX2RlbGV0ZV9hZGRyIDs7XG4gXHRcdGVzYWNcbiBcdFx0cmV0PSQ/XG4gXG5AQCAtMTY3LDYgJiM0MzsxNzUsOCBAQCBzZXR1cF9uYW1lc3BhY2VzKCkge1xuIFx0WyAtbiBcJiMzNDske05TX1MyfVwmIzM0OyBdIFx1MDAyNlx1MDAyNiBuc19zMj0oaXAgbmV0bnMgZXhlYyBcJiMzNDske05TX1MyfVwmIzM0OykgXHUwMDI2XHUwMDI2IG5zX2FjdGl2ZT1cJiMzNDske25zX2FjdGl2ZX0gJE5TX1MyXCYjMzQ7XG4gXHRbIC1uIFwmIzM0OyR7TlNfUjN9XCYjMzQ7IF0gXHUwMDI2XHUwMDI2IG5zX3IzPShpcCBuZXRucyBleGVjIFwmIzM0OyR7TlNfUjN9XCYjMzQ7KSBcdTAwMjZcdTAwMjYgbnNfYWN0aXZlPVwmIzM0OyR7bnNfYWN0aXZlfSAkTlNfUjNcJiMzNDtcbiBcdFsgLW4gXCYjMzQ7JHtOU19CfVwmIzM0OyBdIFx1MDAyNlx1MDAyNiBuc19hY3RpdmU9XCYjMzQ7JHtuc19hY3RpdmV9ICROU19CXCYjMzQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwXG4gfVxuIFxuIGFkZHJfYWRkKCkge1xuQEAgLTI5NSw2ICYjNDM7MzA1LDE4IEBAIHNldHVwX25zX3NldF92NngoKSB7XG4gXHRzZXRfeGZybV9wYXJhbXNcbiB9XG4gXG4mIzQzO3NldHVwX25zX3NldF9zaW1wbGUoKSB7XG4mIzQzO1x0IyBTaW5nbGUgbmFtZXNwYWNlLCBubyB2ZXRocy9yb3V0ZXMuXG4mIzQzO1x0bnNfc2V0PVwmIzM0O2FcJiMzNDtcbiYjNDM7XHRpbWF4PTFcbiYjNDM7XHRzcmM9XCYjMzQ7MTAuMS4xLjFcJiMzNDtcbiYjNDM7XHRkc3Q9XCYjMzQ7MTAuMS4xLjJcJiMzNDtcbiYjNDM7XHRzcmNfbmV0PVwmIzM0OzEwLjEuMC4wLzI0XCYjMzQ7XG4mIzQzO1x0ZHN0X25ldD1cJiMzNDsxMC4yLjAuMC8yNFwmIzM0O1xuJiM0MztcbiYjNDM7XHRzZXRfeGZybV9wYXJhbXNcbiYjNDM7fVxuJiM0MztcbiBzZXR1cF9uZXR3b3JrKCkge1xuIFx0IyBDcmVhdGUgdmV0aHMgYW5kIGFkZCBhZGRyZXNzZXNcbiBcdGxvY2FsIC1hIG5zX2NtZFxuQEAgLTQwMyw2ICYjNDM7NDI1LDcgQEAgc2V0dXAoKSB7XG4gXHRcdG5zX3NldF92NHgpICAgIHNldHVwX25zX3NldF92NHggOztcbiBcdFx0bnNfc2V0X3Y2KSAgICAgc2V0dXBfbnNfc2V0X3Y2IDs7XG4gXHRcdG5zX3NldF92NngpICAgIHNldHVwX25zX3NldF92NnggOztcbiYjNDM7XHRcdG5zX3NldF9zaW1wbGUpIHNldHVwX25zX3NldF9zaW1wbGUgOztcbiBcdFx0bmFtZXNwYWNlcykgICAgc2V0dXBfbmFtZXNwYWNlcyA7O1xuIFx0XHRuZXR3b3JrKSAgICAgICBzZXR1cF9uZXR3b3JrIDs7XG4gXHRcdHhmcm0pICAgICAgICAgIHNldHVwX3hmcm0gOztcbkBAIC01NDgsNiAmIzQzOzU3MSwxMTEgQEAgdGVzdF9tdHVfaXB2Nl9yMygpIHtcbiBcdHJldHVybiBcJiMzNDske3JjfVwmIzM0O1xuIH1cbiBcbiYjNDM7IyBTQV9kZWNveSAobWFyayAwLzAsIGFkZGVkIHNlY29uZCkgc2hhZG93cyBTQV90YXJnZXQgKG1hcmsgMS8xKSBvbiBhXG4mIzQzOyMgd2lsZGNhcmQgbWFyayBsb29rdXAuIE5vIHRyYWZmaWMgc2VudDsgdGhlc2Ugb25seSBleGVyY2lzZSB0aGUgU0FELlxuJiM0MztcbiYjNDM7dGVzdF9tYXJrX3dpbGRjYXJkX3NoYWRvdygpIHtcbiYjNDM7XHRzZXR1cCBuc19zZXRfc2ltcGxlIG5hbWVzcGFjZXMgfHwgcmV0dXJuIFwmIzM0OyRrc2Z0X3NraXBcJiMzNDtcbiYjNDM7XHRsb2NhbCByZXN1bHQ9MFxuJiM0MztcbiYjNDM7XHRydW5fY21kIFwmIzM0OyR7bnNfYVtAXX1cJiMzNDsgaXAgeGZybSBzdGF0ZSBhZGQgXFxcbiYjNDM7XHRcdHNyYyBcJiMzNDske3NyY31cJiMzNDsgZHN0IFwmIzM0OyR7ZHN0fVwmIzM0OyBwcm90byBlc3Agc3BpIDB4MTAwMCBcXFxuJiM0MztcdFx0cmVxaWQgMTAwIG1vZGUgdHVubmVsIFxcXG4mIzQzO1x0XHRhZWFkICYjMzk7cmZjNDEwNihnY20oYWVzKSkmIzM5OyAweDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgOTYgXFxcbiYjNDM7XHRcdG1hcmsgMSBtYXNrIDFcbiYjNDM7XG4mIzQzO1x0cnVuX2NtZCBcJiMzNDske25zX2FbQF19XCYjMzQ7IGlwIHhmcm0gc3RhdGUgYWRkIFxcXG4mIzQzO1x0XHRzcmMgXCYjMzQ7JHtzcmN9XCYjMzQ7IGRzdCBcJiMzNDske2RzdH1cJiMzNDsgcHJvdG8gZXNwIHNwaSAweDEwMDAgXFxcbiYjNDM7XHRcdHJlcWlkIDEwMCBtb2RlIHR1bm5lbCBcXFxuJiM0MztcdFx0YWVhZCAmIzM5O3JmYzQxMDYoZ2NtKGFlcykpJiMzOTsgMHgyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIDk2IFxcXG4mIzQzO1x0XHRtYXJrIDAgbWFzayAwXG4mIzQzO1xuJiM0MztcdHJ1bl9jbWRfZXJyIFwmIzM0OyR7bnNfYVtAXX1cJiMzNDsgaXAgeGZybSBzdGF0ZSBnZXQgXFxcbiYjNDM7XHRcdGRzdCBcJiMzNDske2RzdH1cJiMzNDsgcHJvdG8gZXNwIHNwaSAweDEwMDAgXFxcbiYjNDM7XHRcdG1hcmsgMSBtYXNrIDFcbiYjNDM7XG4mIzQzO1x0IyBFeHBlY3RlZDogU0FfdGFyZ2V0IChtYXJrIDB4MS8weDEpLiBBY3R1YWwgKGJ1Zyk6IFNBX2RlY295IChtYXJrIDAvMCkuXG4mIzQzO1x0ZWNobyBcJiMzNDskb3V0XCYjMzQ7IHwgZ3JlcCAtcSBcJiMzNDttYXJrIDB4MS8weDFcJiMzNDsgfHwgcmVzdWx0PTFcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIFwmIzM0OyR7cmVzdWx0fVwmIzM0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt0ZXN0X21hcmtfd2lsZGNhcmRfZGVsZXRlKCkge1xuJiM0MztcdHNldHVwIG5zX3NldF9zaW1wbGUgbmFtZXNwYWNlcyB8fCByZXR1cm4gXCYjMzQ7JGtzZnRfc2tpcFwmIzM0O1xuJiM0MztcdGxvY2FsIHJlc3VsdD0wXG4mIzQzO1xuJiM0MztcdHJ1bl9jbWQgXCYjMzQ7JHtuc19hW0BdfVwmIzM0OyBpcCB4ZnJtIHN0YXRlIGFkZCBcXFxuJiM0MztcdFx0c3JjIFwmIzM0OyR7c3JjfVwmIzM0OyBkc3QgXCYjMzQ7JHtkc3R9XCYjMzQ7IHByb3RvIGVzcCBzcGkgMHgxMDAwIFxcXG4mIzQzO1x0XHRyZXFpZCAxMDAgbW9kZSB0dW5uZWwgXFxcbiYjNDM7XHRcdGFlYWQgJiMzOTtyZmM0MTA2KGdjbShhZXMpKSYjMzk7IDB4MTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSA5NiBcXFxuJiM0MztcdFx0bWFyayAxIG1hc2sgMVxuJiM0MztcbiYjNDM7XHRydW5fY21kIFwmIzM0OyR7bnNfYVtAXX1cJiMzNDsgaXAgeGZybSBzdGF0ZSBhZGQgXFxcbiYjNDM7XHRcdHNyYyBcJiMzNDske3NyY31cJiMzNDsgZHN0IFwmIzM0OyR7ZHN0fVwmIzM0OyBwcm90byBlc3Agc3BpIDB4MTAwMCBcXFxuJiM0MztcdFx0cmVxaWQgMTAwIG1vZGUgdHVubmVsIFxcXG4mIzQzO1x0XHRhZWFkICYjMzk7cmZjNDEwNihnY20oYWVzKSkmIzM5OyAweDIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIgOTYgXFxcbiYjNDM7XHRcdG1hcmsgMCBtYXNrIDBcbiYjNDM7XG4mIzQzO1x0cnVuX2NtZCBcJiMzNDske25zX2FbQF19XCYjMzQ7IGlwIHhmcm0gc3RhdGUgZGVsZXRlIFxcXG4mIzQzO1x0XHRkc3QgXCYjMzQ7JHtkc3R9XCYjMzQ7IHByb3RvIGVzcCBzcGkgMHgxMDAwIFxcXG4mIzQzO1x0XHRtYXJrIDEgbWFzayAxXG4mIzQzO1xuJiM0MztcdHJ1bl9jbWRfZXJyIFwmIzM0OyR7bnNfYVtAXX1cJiMzNDsgaXAgeGZybSBzdGF0ZSBzaG93XG4mIzQzO1x0ZWNobyBcJiMzNDskb3V0XCYjMzQ7IHwgZ3JlcCAtcSBcJiMzNDttYXJrIDB4MS8weDFcJiMzNDsgXHUwMDI2XHUwMDI2IHJlc3VsdD0xXG4mIzQzO1xuJiM0MztcdHJldHVybiBcJiMzNDske3Jlc3VsdH1cJiMzNDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7IyBieS1hZGRyZXNzIGNvdW50ZXJwYXJ0OiBwcm90byByb3V0ZTIvaGFvIChJUHY2IG1vYmlsaXR5KSBoYXZlIG5vIFNQSSxcbiYjNDM7IyBzbyB4ZnJtX3VzZXJfc3RhdGVfbG9va3VwKCkgcmVzb2x2ZXMgdGhlbSBieSBhZGRyZXNzIGluc3RlYWQuXG4mIzQzO1xuJiM0Mzt0ZXN0X21hcmtfd2lsZGNhcmRfZ2V0X2FkZHIoKSB7XG4mIzQzO1x0c2V0dXAgbnNfc2V0X3NpbXBsZSBuYW1lc3BhY2VzIHx8IHJldHVybiBcJiMzNDska3NmdF9za2lwXCYjMzQ7XG4mIzQzO1x0bG9jYWwgcmVzdWx0PTBcbiYjNDM7XHRsb2NhbCBzcmM2PVwmIzM0O2ZjMDA6OTo6MVwmIzM0O1xuJiM0MztcdGxvY2FsIGRzdDY9XCYjMzQ7ZmMwMDo5OjoyXCYjMzQ7XG4mIzQzO1xuJiM0MztcdHJ1bl9jbWQgXCYjMzQ7JHtuc19hW0BdfVwmIzM0OyBpcCB4ZnJtIHN0YXRlIGFkZCBcXFxuJiM0MztcdFx0c3JjIFwmIzM0OyR7c3JjNn1cJiMzNDsgZHN0IFwmIzM0OyR7ZHN0Nn1cJiMzNDsgcHJvdG8gcm91dGUyIG1vZGUgcm8gY29hIGZjMDA6OTo6MyBcXFxuJiM0MztcdFx0bWFyayAxIG1hc2sgMVxuJiM0MztcbiYjNDM7XHRydW5fY21kIFwmIzM0OyR7bnNfYVtAXX1cJiMzNDsgaXAgeGZybSBzdGF0ZSBhZGQgXFxcbiYjNDM7XHRcdHNyYyBcJiMzNDske3NyYzZ9XCYjMzQ7IGRzdCBcJiMzNDske2RzdDZ9XCYjMzQ7IHByb3RvIHJvdXRlMiBtb2RlIHJvIGNvYSBmYzAwOjk6OjQgXFxcbiYjNDM7XHRcdG1hcmsgMCBtYXNrIDBcbiYjNDM7XG4mIzQzO1x0cnVuX2NtZF9lcnIgXCYjMzQ7JHtuc19hW0BdfVwmIzM0OyBpcCB4ZnJtIHN0YXRlIGdldCBcXFxuJiM0MztcdFx0c3JjIFwmIzM0OyR7c3JjNn1cJiMzNDsgZHN0IFwmIzM0OyR7ZHN0Nn1cJiMzNDsgcHJvdG8gcm91dGUyIFxcXG4mIzQzO1x0XHRtYXJrIDEgbWFzayAxXG4mIzQzO1xuJiM0MztcdGVjaG8gXCYjMzQ7JG91dFwmIzM0OyB8IGdyZXAgLXEgXCYjMzQ7bWFyayAweDEvMHgxXCYjMzQ7IHx8IHJlc3VsdD0xXG4mIzQzO1xuJiM0MztcdHJldHVybiBcJiMzNDske3Jlc3VsdH1cJiMzNDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dGVzdF9tYXJrX3dpbGRjYXJkX2RlbGV0ZV9hZGRyKCkge1xuJiM0MztcdHNldHVwIG5zX3NldF9zaW1wbGUgbmFtZXNwYWNlcyB8fCByZXR1cm4gXCYjMzQ7JGtzZnRfc2tpcFwmIzM0O1xuJiM0MztcdGxvY2FsIHJlc3VsdD0wXG4mIzQzO1x0bG9jYWwgc3JjNj1cJiMzNDtmYzAwOjk6OjFcJiMzNDtcbiYjNDM7XHRsb2NhbCBkc3Q2PVwmIzM0O2ZjMDA6OTo6MlwmIzM0O1xuJiM0MztcbiYjNDM7XHRydW5fY21kIFwmIzM0OyR7bnNfYVtAXX1cJiMzNDsgaXAgeGZybSBzdGF0ZSBhZGQgXFxcbiYjNDM7XHRcdHNyYyBcJiMzNDske3NyYzZ9XCYjMzQ7IGRzdCBcJiMzNDske2RzdDZ9XCYjMzQ7IHByb3RvIHJvdXRlMiBtb2RlIHJvIGNvYSBmYzAwOjk6OjMgXFxcbiYjNDM7XHRcdG1hcmsgMSBtYXNrIDFcbiYjNDM7XG4mIzQzO1x0cnVuX2NtZCBcJiMzNDske25zX2FbQF19XCYjMzQ7IGlwIHhmcm0gc3RhdGUgYWRkIFxcXG4mIzQzO1x0XHRzcmMgXCYjMzQ7JHtzcmM2fVwmIzM0OyBkc3QgXCYjMzQ7JHtkc3Q2fVwmIzM0OyBwcm90byByb3V0ZTIgbW9kZSBybyBjb2EgZmMwMDo5Ojo0IFxcXG4mIzQzO1x0XHRtYXJrIDAgbWFzayAwXG4mIzQzO1xuJiM0MztcdHJ1bl9jbWQgXCYjMzQ7JHtuc19hW0BdfVwmIzM0OyBpcCB4ZnJtIHN0YXRlIGRlbGV0ZSBcXFxuJiM0MztcdFx0c3JjIFwmIzM0OyR7c3JjNn1cJiMzNDsgZHN0IFwmIzM0OyR7ZHN0Nn1cJiMzNDsgcHJvdG8gcm91dGUyIFxcXG4mIzQzO1x0XHRtYXJrIDEgbWFzayAxXG4mIzQzO1xuJiM0MztcdHJ1bl9jbWRfZXJyIFwmIzM0OyR7bnNfYVtAXX1cJiMzNDsgaXAgeGZybSBzdGF0ZSBzaG93XG4mIzQzO1x0ZWNobyBcJiMzNDskb3V0XCYjMzQ7IHwgZ3JlcCAtcSBcJiMzNDttYXJrIDB4MS8weDFcJiMzNDsgXHUwMDI2XHUwMDI2IHJlc3VsdD0xXG4mIzQzO1xuJiM0MztcdHJldHVybiBcJiMzNDske3Jlc3VsdH1cJiMzNDtcbiYjNDM7fVxuJiM0MztcbiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuICNcbiB1c2FnZSgpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxNToxNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT40bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtYRlJNX1VTRVImIzM0OywKICAgICYjMzQ7WEZSTV9NSUdSQVRFJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt4ZnJtX3N0YXRlX2xvb2t1cF9leGFjdCYjMzQ7LAogICAgJiMzNDt4ZnJtX3N0YXRlX2xvb2t1cF9ieWFkZHImIzM0OywKICAgICYjMzQ7eGZybV91c2VyX3N0YXRlX2xvb2t1cCYjMzQ7LAogICAgJiMzNDt4ZnJtX2RvX21pZ3JhdGVfc3RhdGUmIzM0OywKICAgICYjMzQ7eGZybV9zdGF0ZV91cGRhdGUmIzM0OywKICAgICYjMzQ7eGZybV9zdGF0ZV9taWdyYXRlX2luc3RhbGwmIzM0OywKICAgICYjMzQ7eGZybV9nZXRfYWUmIzM0OywKICAgICYjMzQ7eGZybV9uZXdfYWUmIzM0OywKICAgICYjMzQ7eGZybV9hZGRfc2FfZXhwaXJlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBYRlJNIChJUHNlYykgc3RhdGUgbG9va3VwIGxvZ2ljIHRvIGFsbG93IGV4YWN0IG1hdGNoaW5nIG9mIG1hcmtzIGFuZCBtYXNrcyBkdXJpbmcgY29udHJvbCBwbGFuZSBvcGVyYXRpb25zIChHRVQsIERFTEVURSwgTUlHUkFURSkuIFRoaXMgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgbmV0bGluayBtZXNzYWdlcyBhbmQgYWZmZWN0cyBjb3JlIElQc2VjIGZ1bmN0aW9uYWxpdHkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDY4MzA1OTExZTVhYmQ2ZTU1ZGQ4MDJkMzA1MDcxMDlmY2EyNTNkNDIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1bCA2IDE1OjE1OjI0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3hmcm0veGZybV9taWdyYXRlX3N0YXRlLnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy94ZnJtL3hmcm1fbWlncmF0ZV9zdGF0ZS5yc3QKaW5kZXggOWQ1M2NiMjJiMDA3NTIuLjkwNWUzZjBjNGVlMDZmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcveGZybS94ZnJtX21pZ3JhdGVfc3RhdGUucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy94ZnJtL3hmcm1fbWlncmF0ZV9zdGF0ZS5yc3QKQEAgLTI3LDE1ICYjNDM7MjcsMTggQEAgU0EgSWRlbnRpZmljYXRpb24KID09PT09PT09PT09PT09PT09CiAKIFRoZSBzdHJ1Y3QgaXMgZGVmaW5lZCBpbiBgYGluY2x1ZGUvdWFwaS9saW51eC94ZnJtLmhgYC4gVGhlIFNBIGlzIGxvb2tlZAotdXAgdXNpbmcgYGB4ZnJtX3N0YXRlX2xvb2t1cCgpYGAgd2l0aCBgYGlkLnNwaWBgLAotYGBpZC5kYWRkcmBgLCBgYGlkLnByb3RvYGAsIGBgaWQuZmFtaWx5YGAsIGFuZAotYGBvbGRfbWFyay52ICZhbXA7IG9sZF9tYXJrLm1gYCBhcyB0aGUgbWFyayBrZXk6OgomIzQzO3VwIHVzaW5nIGBgeGZybV9zdGF0ZV9sb29rdXBfZXhhY3QoKWBgIHdpdGggYGBpZC5zcGlgYCwgYGBpZC5kYWRkcmBgLAomIzQzO2BgaWQucHJvdG9gYCwgYGBpZC5mYW1pbHlgYCwgYW5kIGFuIGV4YWN0IG1hdGNoIGFnYWluc3QgYGBvbGRfbWFyay52YGAKJiM0MzthbmQgYGBvbGRfbWFyay5tYGAuIFVubGlrZSB0aGUgZGF0YSBwYXRoLCB3aGljaCB1c2VzIGEgbWFza2VkCiYjNDM7Y29tcGFyaXNvbiwgdGhpcyByZXF1aXJlcyB0aGUgU0EmIzM5O3MgbWFyayBhbmQgbWFzayB0byBlcXVhbCBgYG9sZF9tYXJrYGAKJiM0MztleGFjdGx5LCBzbyBhIGJyb2FkLW1hc2sgU0EgaXMgbmV2ZXIgbWF0Y2hlZCB3aGVuIGEgbW9yZSBzcGVjaWZpYyBvbmUKJiM0Mzt3YXMgaW50ZW5kZWQuIElmIG5vIHN1Y2ggU0EgZXhpc3RzLCBgYC1FU1JDSGBgIGlzIHJldHVybmVkLjo6CiAKICAgICBzdHJ1Y3QgeGZybV91c2VyX21pZ3JhdGVfc3RhdGUgewogICAgICAgICBzdHJ1Y3QgeGZybV91c2Vyc2FfaWQgIGlkOyAgICAgICAvKiBzcGksIGRhZGRyLCBwcm90bywgZmFtaWx5ICovCiAgICAgICAgIHhmcm1fYWRkcmVzc190ICAgICAgICAgbmV3X2RhZGRyOwogICAgICAgICB4ZnJtX2FkZHJlc3NfdCAgICAgICAgIG5ld19zYWRkcjsKLSAgICAgICAgc3RydWN0IHhmcm1fbWFyayAgICAgICBvbGRfbWFyazsgLyogU0EgbG9va3VwOiBrZXkgPSB2ICZhbXA7IG0gKi8KJiM0MzsgICAgICAgIHN0cnVjdCB4ZnJtX21hcmsgICAgICAgb2xkX21hcms7IC8qIFNBIGxvb2t1cCBrZXkgKGV4YWN0IHYvbSBtYXRjaCkgKi8KICAgICAgICAgc3RydWN0IHhmcm1fc2VsZWN0b3IgICBuZXdfc2VsOyAgLyogbmV3IHNlbGVjdG9yIChzZWUgRmxhZ3MpICovCiAgICAgICAgIF9fdTMyICAgICAgICAgICAgICAgICAgbmV3X3JlcWlkOwogICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICAgIGZsYWdzOyAgICAvKiBYRlJNX01JR1JBVEVfU1RBVEVfKiAqLwpAQCAtNzIsOCAmIzQzOzc1LDggQEAgaW5oZXJpdHMgdGhlIHZhbHVlIGZyb20gdGhlIGV4aXN0aW5nIFNBIChvbWl0LXRvLWluaGVyaXQpLgogICAgICAtIERlc2NyaXB0aW9uCiAgICAqIC0gYGBYRlJNQV9NQVJLYGAKICAgICAgLSBNYXJrIG9uIHRoZSBtaWdyYXRlZCBTQSAoYGBzdHJ1Y3QgeGZybV9tYXJrYGApLiBBYnNlbnQgaW5oZXJpdHMKLSAgICAgICBgYG9sZF9tYXJrYGAuIFRvIHVzZSBubyBtYXJrIG9uIHRoZSBuZXcgU0EsIHNlbmQgYGBYRlJNQV9NQVJLYGAKLSAgICAgICB3aXRoIGBgezAsIDB9YGAuCiYjNDM7ICAgICAgIHRoZSBtYXJrIG9mIHRoZSBleGlzdGluZyBTQS4gVG8gdXNlIG5vIG1hcmsgb24gdGhlIG5ldyBTQSwgc2VuZAomIzQzOyAgICAgICBgYFhGUk1BX01BUktgYCB3aXRoIGBgezAsIDB9YGAuCiAgICAqIC0gYGBYRlJNQV9FTkNBUGBgCiAgICAgIC0gVURQIGVuY2Fwc3VsYXRpb24gdGVtcGxhdGU7IG9ubHkgYGBVRFBfRU5DQVBfRVNQSU5VRFBgYCBpcyBzdXBwb3J0ZWQuCiAgICAgICAgU2V0IGBgZW5jYXBfdHlwZT0wYGAgdG8gcmVtb3ZlIGVuY2FwLgpAQCAtMjU5LDggJiM0MzsyNjIsOSBAQCBBdHRyaWJ1dGVzIGluIHRoZSBub3RpZmljYXRpb24KIEVycm9yIEhhbmRsaW5nCiA9PT09PT09PT09PT09PQogCi1JZiB0aGUgdGFyZ2V0IFNBIHR1cGxlIChuZXcgZGFkZHIsIFNQSSwgcHJvdG8sIG5ldyBmYW1pbHkpIGlzIGFscmVhZHkKLW9jY3VwaWVkLCB0aGUgb3BlcmF0aW9uIHJldHVybnMgYGAtRUVYSVNUYGAgYmVmb3JlIHRoZSBtaWdyYXRpb24gYmVnaW5zLgomIzQzO0lmIHRoZSB0YXJnZXQgU0EgdHVwbGUgKG5ldyBkYWRkciwgU1BJLCBwcm90bywgbmV3IGZhbWlseSwgbWFyaykgaXMKJiM0MzthbHJlYWR5IG9jY3VwaWVkLCB0aGUgb3BlcmF0aW9uIHJldHVybnMgYGAtRUVYSVNUYGAgYmVmb3JlIHRoZSBtaWdyYXRpb24KJiM0MztiZWdpbnMuCiBUaGUgb2xkIFNBIHJlbWFpbnMgaW50YWN0IGFuZCB0aGUgb3BlcmF0aW9uIGlzIHNhZmUgdG8gcmV0cnkgYWZ0ZXIKIHJlc29sdmluZyB0aGUgY29uZmxpY3QuCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3hmcm0uaCBiL2luY2x1ZGUvbmV0L3hmcm0uaAppbmRleCA1MTlhMDE1NmEwNWNhYy4uZWJlNTE0Mzc2MjU0YTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3hmcm0uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC94ZnJtLmgKQEAgLTE3NDEsMTEgJiM0MzsxNzQxLDE0IEBAIHN0cnVjdCB4ZnJtX3N0YXRlICp4ZnJtX2lucHV0X3N0YXRlX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBtYXJrLAogCQkJCQkgICBjb25zdCB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsCiAJCQkJCSAgIF9fYmUzMiBzcGksIHU4IHByb3RvLAogCQkJCQkgICB1bnNpZ25lZCBzaG9ydCBmYW1pbHkpOwotc3RydWN0IHhmcm1fc3RhdGUgKnhmcm1fc3RhdGVfbG9va3VwX2J5YWRkcihzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBtYXJrLAomIzQzO3N0cnVjdCB4ZnJtX3N0YXRlICp4ZnJtX3N0YXRlX2xvb2t1cF9ieWFkZHIoc3RydWN0IG5ldCAqbmV0LCB1MzIgbWFyaywgdTMyIG1hc2ssIGJvb2wgZXhhY3QsCiAJCQkJCSAgICBjb25zdCB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsCiAJCQkJCSAgICBjb25zdCB4ZnJtX2FkZHJlc3NfdCAqc2FkZHIsCiAJCQkJCSAgICB1OCBwcm90bywKIAkJCQkJICAgIHVuc2lnbmVkIHNob3J0IGZhbWlseSk7CiYjNDM7c3RydWN0IHhmcm1fc3RhdGUgKnhmcm1fc3RhdGVfbG9va3VwX2V4YWN0KHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IHhmcm1fbWFyayAqbWFyaywKJiM0MzsJCQkJCSAgIGNvbnN0IHhmcm1fYWRkcmVzc190ICpkYWRkciwgX19iZTMyIHNwaSwKJiM0MzsJCQkJCSAgIHU4IHByb3RvLCB1bnNpZ25lZCBzaG9ydCBmYW1pbHkpOwogI2lmZGVmIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kKIHZvaWQgeGZybV90bXBsX3NvcnQoc3RydWN0IHhmcm1fdG1wbCAqKmRzdCwgc3RydWN0IHhmcm1fdG1wbCAqKnNyYywgaW50IG4sCiAJCSAgICB1bnNpZ25lZCBzaG9ydCBmYW1pbHkpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYveGZybTZfaW5wdXQuYyBiL25ldC9pcHY2L3hmcm02X2lucHV0LmMKaW5kZXggODlkMDQ0M2I1MzA3MzIuLjJkZDM0N2ZlY2U1MmNhIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni94ZnJtNl9pbnB1dC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L3hmcm02X2lucHV0LmMKQEAgLTI3Miw3ICYjNDM7MjcyLDcgQEAgaW50IHhmcm02X2lucHV0X2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgeGZybV9hZGRyZXNzX3QgKmRhZGRyLAogCQkJYnJlYWs7CiAJCX0KIAotCQl4ID0geGZybV9zdGF0ZV9sb29rdXBfYnlhZGRyKG5ldCwgc2tiLSZndDttYXJrLCBkc3QsIHNyYywgcHJvdG8sIEFGX0lORVQ2KTsKJiM0MzsJCXggPSB4ZnJtX3N0YXRlX2xvb2t1cF9ieWFkZHIobmV0LCBza2ItJmd0O21hcmssIDAsIGZhbHNlLCBkc3QsIHNyYywgcHJvdG8sIEFGX0lORVQ2KTsKIAkJaWYgKCF4KQogCQkJY29udGludWU7CiAKZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fc3RhdGUuYyBiL25ldC94ZnJtL3hmcm1fc3RhdGUuYwppbmRleCBjNThjZDAyNGUzYzY3NS4uMGIzZGM3Nzg5ZGQ3OTAgMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL3hmcm1fc3RhdGUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQveGZybS94ZnJtX3N0YXRlLmMKQEAgLTExNzIsMTEgJiM0MzsxMTcyLDIyIEBAIHN0YXRpYyBzdHJ1Y3QgeGZybV9zdGF0ZSAqX194ZnJtX3N0YXRlX2xvb2t1cF9hbGwoY29uc3Qgc3RydWN0IHhmcm1faGFzaF9zdGF0ZV9wCiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgeGZybV9zdGF0ZSAqX194ZnJtX3N0YXRlX2xvb2t1cChjb25zdCBzdHJ1Y3QgeGZybV9oYXNoX3N0YXRlX3B0cnMgKnN0YXRlX3B0cnMsCi0JCQkJCSAgICAgIHUzMiBtYXJrLAotCQkJCQkgICAgICBjb25zdCB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsCi0JCQkJCSAgICAgIF9fYmUzMiBzcGksIHU4IHByb3RvLAotCQkJCQkgICAgICB1bnNpZ25lZCBzaG9ydCBmYW1pbHkpCiYjNDM7LyogZXhhY3Q9ZmFsc2U6IGRhdGEtcGxhbmUgd2lsZGNhcmQgbWF0Y2ggYWdhaW5zdCB4JiMzOTtzIG1hc2suIGV4YWN0PXRydWU6CiYjNDM7ICogY29udHJvbC1wbGFuZSBpZGVudGl0eSBtYXRjaCwgbWFyayBhbmQgbWFzayBtdXN0IGJvdGggbWF0Y2ggZXhhY3RseS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgYm9vbCB4ZnJtX3N0YXRlX21hcmtfbWF0Y2hlcyhjb25zdCBzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgdTMyIG1hcmssIHUzMiBtYXNrLCBib29sIGV4YWN0KQomIzQzO3sKJiM0MzsJaWYgKGV4YWN0KQomIzQzOwkJcmV0dXJuIHgtJmd0O21hcmsudiA9PSBtYXJrICZhbXA7JmFtcDsgeC0mZ3Q7bWFyay5tID09IG1hc2s7CiYjNDM7CXJldHVybiAobWFyayAmYW1wOyB4LSZndDttYXJrLm0pID09IHgtJmd0O21hcmsudjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlICoKJiM0MztfX3hmcm1fc3RhdGVfbG9va3VwKGNvbnN0IHN0cnVjdCB4ZnJtX2hhc2hfc3RhdGVfcHRycyAqc3RhdGVfcHRycywKJiM0MzsJCSAgICB1MzIgbWFyaywgdTMyIG1hc2ssIGJvb2wgZXhhY3QsCiYjNDM7CQkgICAgY29uc3QgeGZybV9hZGRyZXNzX3QgKmRhZGRyLAomIzQzOwkJICAgIF9fYmUzMiBzcGksIHU4IHByb3RvLAomIzQzOwkJICAgIHVuc2lnbmVkIHNob3J0IGZhbWlseSkKIHsKIAl1bnNpZ25lZCBpbnQgaCA9IF9feGZybV9zcGlfaGFzaChkYWRkciwgc3BpLCBwcm90bywgZmFtaWx5LCBzdGF0ZV9wdHJzLSZndDtobWFzayk7CiAJc3RydWN0IHhmcm1fc3RhdGUgKng7CkBAIC0xMTg4LDcgJiM0MzsxMTk5LDcgQEAgc3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlICpfX3hmcm1fc3RhdGVfbG9va3VwKGNvbnN0IHN0cnVjdCB4ZnJtX2hhc2hfc3RhdGVfcHRycwogCQkgICAgIXhmcm1fYWRkcl9lcXVhbCgmYW1wO3gtJmd0O2lkLmRhZGRyLCBkYWRkciwgZmFtaWx5KSkKIAkJCWNvbnRpbnVlOwogCi0JCWlmICgobWFyayAmYW1wOyB4LSZndDttYXJrLm0pICE9IHgtJmd0O21hcmsudikKJiM0MzsJCWlmICgheGZybV9zdGF0ZV9tYXJrX21hdGNoZXMoeCwgbWFyaywgbWFzaywgZXhhY3QpKQogCQkJY29udGludWU7CiAJCWlmICgheGZybV9zdGF0ZV9ob2xkX3JjdSh4KSkKIAkJCWNvbnRpbnVlOwpAQCAtMTE5OCw2ICYjNDM7MTIwOSwxNyBAQCBzdGF0aWMgc3RydWN0IHhmcm1fc3RhdGUgKl9feGZybV9zdGF0ZV9sb29rdXAoY29uc3Qgc3RydWN0IHhmcm1faGFzaF9zdGF0ZV9wdHJzCiAJcmV0dXJuIE5VTEw7CiB9CiAKJiM0MztzdGF0aWMgc3RydWN0IHhmcm1fc3RhdGUgKgomIzQzO19feGZybV9zdGF0ZV9sb29rdXBfZXhhY3QoY29uc3Qgc3RydWN0IHhmcm1faGFzaF9zdGF0ZV9wdHJzICpzdGF0ZV9wdHJzLAomIzQzOwkJCSAgY29uc3Qgc3RydWN0IHhmcm1fbWFyayAqbWFyaywKJiM0MzsJCQkgIGNvbnN0IHhmcm1fYWRkcmVzc190ICpkYWRkciwKJiM0MzsJCQkgIF9fYmUzMiBzcGksIHU4IHByb3RvLAomIzQzOwkJCSAgdW5zaWduZWQgc2hvcnQgZmFtaWx5KQomIzQzO3sKJiM0MzsJcmV0dXJuIF9feGZybV9zdGF0ZV9sb29rdXAoc3RhdGVfcHRycywgbWFyay0mZ3Q7diwgbWFyay0mZ3Q7bSwgdHJ1ZSwKJiM0MzsJCQkJICAgZGFkZHIsIHNwaSwgcHJvdG8sIGZhbWlseSk7CiYjNDM7fQomIzQzOwogc3RydWN0IHhmcm1fc3RhdGUgKnhmcm1faW5wdXRfc3RhdGVfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgdTMyIG1hcmssCiAJCQkJCSAgIGNvbnN0IHhmcm1fYWRkcmVzc190ICpkYWRkciwKIAkJCQkJICAgX19iZTMyIHNwaSwgdTggcHJvdG8sCkBAIC0xMjI4LDcgJiM0MzsxMjUwLDcgQEAgc3RydWN0IHhmcm1fc3RhdGUgKnhmcm1faW5wdXRfc3RhdGVfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgdTMyIG1hcmssCiAKIAl4ZnJtX2hhc2hfcHRyc19nZXQobmV0LCAmYW1wO3N0YXRlX3B0cnMpOwogCi0JeCA9IF9feGZybV9zdGF0ZV9sb29rdXAoJmFtcDtzdGF0ZV9wdHJzLCBtYXJrLCBkYWRkciwgc3BpLCBwcm90bywgZmFtaWx5KTsKJiM0MzsJeCA9IF9feGZybV9zdGF0ZV9sb29rdXAoJmFtcDtzdGF0ZV9wdHJzLCBtYXJrLCAwLCBmYWxzZSwgZGFkZHIsIHNwaSwgcHJvdG8sIGZhbWlseSk7CiAJaWYgKHgpIHsKIAkJc3Bpbl9sb2NrKCZhbXA7bmV0LSZndDt4ZnJtLnhmcm1fc3RhdGVfbG9jayk7CiAJCWlmICh4LSZndDtrbS5zdGF0ZSAhPSBYRlJNX1NUQVRFX1ZBTElEKSB7CkBAIC0xMjUyLDExICYjNDM7MTI3NCwxMiBAQCBzdHJ1Y3QgeGZybV9zdGF0ZSAqeGZybV9pbnB1dF9zdGF0ZV9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCB1MzIgbWFyaywKIH0KIEVYUE9SVF9TWU1CT0woeGZybV9pbnB1dF9zdGF0ZV9sb29rdXApOwogCi1zdGF0aWMgc3RydWN0IHhmcm1fc3RhdGUgKl9feGZybV9zdGF0ZV9sb29rdXBfYnlhZGRyKGNvbnN0IHN0cnVjdCB4ZnJtX2hhc2hfc3RhdGVfcHRycyAqc3RhdGVfcHRycywKLQkJCQkJCSAgICAgdTMyIG1hcmssCi0JCQkJCQkgICAgIGNvbnN0IHhmcm1fYWRkcmVzc190ICpkYWRkciwKLQkJCQkJCSAgICAgY29uc3QgeGZybV9hZGRyZXNzX3QgKnNhZGRyLAotCQkJCQkJICAgICB1OCBwcm90bywgdW5zaWduZWQgc2hvcnQgZmFtaWx5KQomIzQzO3N0YXRpYyBzdHJ1Y3QgeGZybV9zdGF0ZSAqCiYjNDM7X194ZnJtX3N0YXRlX2xvb2t1cF9ieWFkZHIoY29uc3Qgc3RydWN0IHhmcm1faGFzaF9zdGF0ZV9wdHJzICpzdGF0ZV9wdHJzLAomIzQzOwkJCSAgIHUzMiBtYXJrLCB1MzIgbWFzaywgYm9vbCBleGFjdCwKJiM0MzsJCQkgICBjb25zdCB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsCiYjNDM7CQkJICAgY29uc3QgeGZybV9hZGRyZXNzX3QgKnNhZGRyLAomIzQzOwkJCSAgIHU4IHByb3RvLCB1bnNpZ25lZCBzaG9ydCBmYW1pbHkpCiB7CiAJdW5zaWduZWQgaW50IGggPSBfX3hmcm1fc3JjX2hhc2goZGFkZHIsIHNhZGRyLCBmYW1pbHksIHN0YXRlX3B0cnMtJmd0O2htYXNrKTsKIAlzdHJ1Y3QgeGZybV9zdGF0ZSAqeDsKQEAgLTEyNjgsNyAmIzQzOzEyOTEsNyBAQCBzdGF0aWMgc3RydWN0IHhmcm1fc3RhdGUgKl9feGZybV9zdGF0ZV9sb29rdXBfYnlhZGRyKGNvbnN0IHN0cnVjdCB4ZnJtX2hhc2hfc3RhdAogCQkgICAgIXhmcm1fYWRkcl9lcXVhbCgmYW1wO3gtJmd0O3Byb3BzLnNhZGRyLCBzYWRkciwgZmFtaWx5KSkKIAkJCWNvbnRpbnVlOwogCi0JCWlmICgobWFyayAmYW1wOyB4LSZndDttYXJrLm0pICE9IHgtJmd0O21hcmsudikKJiM0MzsJCWlmICgheGZybV9zdGF0ZV9tYXJrX21hdGNoZXMoeCwgbWFyaywgbWFzaywgZXhhY3QpKQogCQkJY29udGludWU7CiAJCWlmICgheGZybV9zdGF0ZV9ob2xkX3JjdSh4KSkKIAkJCWNvbnRpbnVlOwpAQCAtMTI4OCwxMCAmIzQzOzEzMTEsMzEgQEAgX194ZnJtX3N0YXRlX2xvY2F0ZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgaW50IHVzZV9zcGksIGludCBmYW1pbHkpCiAJeGZybV9oYXNoX3B0cnNfZ2V0KG5ldCwgJmFtcDtzdGF0ZV9wdHJzKTsKIAogCWlmICh1c2Vfc3BpKQotCQlyZXR1cm4gX194ZnJtX3N0YXRlX2xvb2t1cCgmYW1wO3N0YXRlX3B0cnMsIG1hcmssICZhbXA7eC0mZ3Q7aWQuZGFkZHIsCiYjNDM7CQlyZXR1cm4gX194ZnJtX3N0YXRlX2xvb2t1cCgmYW1wO3N0YXRlX3B0cnMsIG1hcmssIDAsIGZhbHNlLCAmYW1wO3gtJmd0O2lkLmRhZGRyLAogCQkJCQkgICB4LSZndDtpZC5zcGksIHgtJmd0O2lkLnByb3RvLCBmYW1pbHkpOwogCWVsc2UKLQkJcmV0dXJuIF9feGZybV9zdGF0ZV9sb29rdXBfYnlhZGRyKCZhbXA7c3RhdGVfcHRycywgbWFyaywKJiM0MzsJCXJldHVybiBfX3hmcm1fc3RhdGVfbG9va3VwX2J5YWRkcigmYW1wO3N0YXRlX3B0cnMsIG1hcmssIDAsIGZhbHNlLAomIzQzOwkJCQkJCSAgJmFtcDt4LSZndDtpZC5kYWRkciwKJiM0MzsJCQkJCQkgICZhbXA7eC0mZ3Q7cHJvcHMuc2FkZHIsCiYjNDM7CQkJCQkJICB4LSZndDtpZC5wcm90bywgZmFtaWx5KTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogVXNlZCBieSB4ZnJtX3N0YXRlX3VwZGF0ZSgpIG9ubHk7IHhmcm1fc3RhdGVfYWRkKCkmIzM5O3MgZHVwIGNoZWNrIGtlZXBzCiYjNDM7ICogdXNpbmcgdGhlIHdpbGRjYXJkIF9feGZybV9zdGF0ZV9sb2NhdGUoKSBhYm92ZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCB4ZnJtX3N0YXRlICoKJiM0MztfX3hmcm1fc3RhdGVfbG9jYXRlX2V4YWN0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBpbnQgdXNlX3NwaSwgaW50IGZhbWlseSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB4ZnJtX2hhc2hfc3RhdGVfcHRycyBzdGF0ZV9wdHJzOwomIzQzOwlzdHJ1Y3QgbmV0ICpuZXQgPSB4c19uZXQoeCk7CiYjNDM7CiYjNDM7CXhmcm1faGFzaF9wdHJzX2dldChuZXQsICZhbXA7c3RhdGVfcHRycyk7CiYjNDM7CiYjNDM7CWlmICh1c2Vfc3BpKQomIzQzOwkJcmV0dXJuIF9feGZybV9zdGF0ZV9sb29rdXBfZXhhY3QoJmFtcDtzdGF0ZV9wdHJzLCAmYW1wO3gtJmd0O21hcmssICZhbXA7eC0mZ3Q7aWQuZGFkZHIsCiYjNDM7CQkJCQkJIHgtJmd0O2lkLnNwaSwgeC0mZ3Q7aWQucHJvdG8sIGZhbWlseSk7CiYjNDM7CWVsc2UKJiM0MzsJCXJldHVybiBfX3hmcm1fc3RhdGVfbG9va3VwX2J5YWRkcigmYW1wO3N0YXRlX3B0cnMsIHgtJmd0O21hcmsudiwgeC0mZ3Q7bWFyay5tLCB0cnVlLAogCQkJCQkJICAmYW1wO3gtJmd0O2lkLmRhZGRyLAogCQkJCQkJICAmYW1wO3gtJmd0O3Byb3BzLnNhZGRyLAogCQkJCQkJICB4LSZndDtpZC5wcm90bywgZmFtaWx5KTsKQEAgLTIxNzcsMTAgJiM0MzsyMjIxLDEyIEBAIGludCB4ZnJtX3N0YXRlX21pZ3JhdGVfaW5zdGFsbChjb25zdCBzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwKIAkJCSAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiB7CiAJaWYgKG0tJmd0O25ld19mYW1pbHkgPT0gbS0mZ3Q7b2xkX2ZhbWlseSAmYW1wOyZhbXA7Ci0JICAgIHhmcm1fYWRkcl9lcXVhbCgmYW1wO3gtJmd0O2lkLmRhZGRyLCAmYW1wO20tJmd0O25ld19kYWRkciwgbS0mZ3Q7bmV3X2ZhbWlseSkpIHsKJiM0MzsJICAgIHhmcm1fYWRkcl9lcXVhbCgmYW1wO3gtJmd0O2lkLmRhZGRyLCAmYW1wO20tJmd0O25ld19kYWRkciwgbS0mZ3Q7bmV3X2ZhbWlseSkgJmFtcDsmYW1wOwomIzQzOwkgICAgeGMtJmd0O21hcmsudiA9PSB4LSZndDttYXJrLnYgJmFtcDsmYW1wOyB4Yy0mZ3Q7bWFyay5tID09IHgtJmd0O21hcmsubSkgewogCQkvKgotCQkgKiBDYXJlIGlzIG5lZWRlZCB3aGVuIHRoZSBkZXN0aW5hdGlvbiBhZGRyZXNzIG9mIHRoZSBzdGF0ZSBpcwotCQkgKiB0byBiZSB1cGRhdGVkIGFzIGl0IGlzIGEgcGFydCBvZiB0cmlwbGV0LgomIzQzOwkJICogQ2FyZSBpcyBuZWVkZWQgd2hlbiB0aGUgZGVzdGluYXRpb24gYWRkcmVzcyBvciBtYXJrIG9mIHRoZQomIzQzOwkJICogc3RhdGUgaXMgdG8gYmUgdXBkYXRlZCwgYXMgdGhleSBhcmUgcGFydCBvZiB0aGUgbG9va3VwCiYjNDM7CQkgKiB0cmlwbGV0LgogCQkgKi8KIAkJeGZybV9zdGF0ZV9pbnNlcnQoeGMpOwogCX0gZWxzZSB7CkBAIC0yMjI5LDcgJiM0MzsyMjc1LDcgQEAgaW50IHhmcm1fc3RhdGVfdXBkYXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4KQogCXRvX3B1dCA9IE5VTEw7CiAKIAlzcGluX2xvY2tfYmgoJmFtcDtuZXQtJmd0O3hmcm0ueGZybV9zdGF0ZV9sb2NrKTsKLQl4MSA9IF9feGZybV9zdGF0ZV9sb2NhdGUoeCwgdXNlX3NwaSwgeC0mZ3Q7cHJvcHMuZmFtaWx5KTsKJiM0MzsJeDEgPSBfX3hmcm1fc3RhdGVfbG9jYXRlX2V4YWN0KHgsIHVzZV9zcGksIHgtJmd0O3Byb3BzLmZhbWlseSk7CiAKIAllcnIgPSAtRVNSQ0g7CiAJaWYgKCF4MSkKQEAgLTIzNzQsMTQgJiM0MzsyNDIwLDE0IEBAIHhmcm1fc3RhdGVfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgdTMyIG1hcmssIGNvbnN0IHhmcm1fYWRkcmVzc190ICpkYWRkciwgX19iZTMyCiAJcmN1X3JlYWRfbG9jaygpOwogCXhmcm1faGFzaF9wdHJzX2dldChuZXQsICZhbXA7c3RhdGVfcHRycyk7CiAKLQl4ID0gX194ZnJtX3N0YXRlX2xvb2t1cCgmYW1wO3N0YXRlX3B0cnMsIG1hcmssIGRhZGRyLCBzcGksIHByb3RvLCBmYW1pbHkpOwomIzQzOwl4ID0gX194ZnJtX3N0YXRlX2xvb2t1cCgmYW1wO3N0YXRlX3B0cnMsIG1hcmssIDAsIGZhbHNlLCBkYWRkciwgc3BpLCBwcm90bywgZmFtaWx5KTsKIAlyY3VfcmVhZF91bmxvY2soKTsKIAlyZXR1cm4geDsKIH0KIEVYUE9SVF9TWU1CT0woeGZybV9zdGF0ZV9sb29rdXApOwogCiBzdHJ1Y3QgeGZybV9zdGF0ZSAqCi14ZnJtX3N0YXRlX2xvb2t1cF9ieWFkZHIoc3RydWN0IG5ldCAqbmV0LCB1MzIgbWFyaywKJiM0Mzt4ZnJtX3N0YXRlX2xvb2t1cF9ieWFkZHIoc3RydWN0IG5ldCAqbmV0LCB1MzIgbWFyaywgdTMyIG1hc2ssIGJvb2wgZXhhY3QsCiAJCQkgY29uc3QgeGZybV9hZGRyZXNzX3QgKmRhZGRyLCBjb25zdCB4ZnJtX2FkZHJlc3NfdCAqc2FkZHIsCiAJCQkgdTggcHJvdG8sIHVuc2lnbmVkIHNob3J0IGZhbWlseSkKIHsKQEAgLTIzOTIsMTIgJiM0MzsyNDM4LDI5IEBAIHhmcm1fc3RhdGVfbG9va3VwX2J5YWRkcihzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBtYXJrLAogCiAJeGZybV9oYXNoX3B0cnNfZ2V0KG5ldCwgJmFtcDtzdGF0ZV9wdHJzKTsKIAotCXggPSBfX3hmcm1fc3RhdGVfbG9va3VwX2J5YWRkcigmYW1wO3N0YXRlX3B0cnMsIG1hcmssIGRhZGRyLCBzYWRkciwgcHJvdG8sIGZhbWlseSk7CiYjNDM7CXggPSBfX3hmcm1fc3RhdGVfbG9va3VwX2J5YWRkcigmYW1wO3N0YXRlX3B0cnMsIG1hcmssIG1hc2ssIGV4YWN0LCBkYWRkciwgc2FkZHIsIHByb3RvLCBmYW1pbHkpOwogCXJjdV9yZWFkX3VubG9jaygpOwogCXJldHVybiB4OwogfQogRVhQT1JUX1NZTUJPTCh4ZnJtX3N0YXRlX2xvb2t1cF9ieWFkZHIpOwogCiYjNDM7c3RydWN0IHhmcm1fc3RhdGUgKgomIzQzO3hmcm1fc3RhdGVfbG9va3VwX2V4YWN0KHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IHhmcm1fbWFyayAqbWFyaywKJiM0MzsJCQljb25zdCB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsIF9fYmUzMiBzcGksCiYjNDM7CQkJdTggcHJvdG8sIHVuc2lnbmVkIHNob3J0IGZhbWlseSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB4ZnJtX2hhc2hfc3RhdGVfcHRycyBzdGF0ZV9wdHJzOwomIzQzOwlzdHJ1Y3QgeGZybV9zdGF0ZSAqeDsKJiM0MzsKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwl4ZnJtX2hhc2hfcHRyc19nZXQobmV0LCAmYW1wO3N0YXRlX3B0cnMpOwomIzQzOwomIzQzOwl4ID0gX194ZnJtX3N0YXRlX2xvb2t1cF9leGFjdCgmYW1wO3N0YXRlX3B0cnMsIG1hcmssIGRhZGRyLCBzcGksIHByb3RvLCBmYW1pbHkpOwomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsJcmV0dXJuIHg7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0woeGZybV9zdGF0ZV9sb29rdXBfZXhhY3QpOwomIzQzOwogc3RydWN0IHhmcm1fc3RhdGUgKgogeGZybV9maW5kX2FjcShzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCB4ZnJtX21hcmsgKm1hcmssIHU4IG1vZGUsIHUzMiByZXFpZCwKIAkgICAgICB1MzIgaWZfaWQsIHUzMiBwY3B1X251bSwgdTggcHJvdG8sIGNvbnN0IHhmcm1fYWRkcmVzc190ICpkYWRkciwKQEAgLTMzMDYsNyAmIzQzOzMzNjksNyBAQCBpbnQgeGZybV9pbml0X3N0YXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCWVyciA9IHhmcm1faW5pdF9yZXBsYXkoeCwgTlVMTCk7CiYjNDM7CWVyciA9IHhmcm1faW5pdF9yZXBsYXkoeCwgZXh0YWNrKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3VzZXIuYyBiL25ldC94ZnJtL3hmcm1fdXNlci5jCmluZGV4IDYzODQ3OTVlZTZiMjY5Li5hMjMxN2U2ZTY4MDJkZCAxMDA2NDQKLS0tIGEvbmV0L3hmcm0veGZybV91c2VyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hmcm0veGZybV91c2VyLmMKQEAgLTEwODksMTEgJiM0MzsxMDg5LDEyIEBAIHN0YXRpYyBzdHJ1Y3QgeGZybV9zdGF0ZSAqeGZybV91c2VyX3N0YXRlX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsCiAJc3RydWN0IHhmcm1fc3RhdGUgKnggPSBOVUxMOwogCXN0cnVjdCB4ZnJtX21hcmsgbTsKIAlpbnQgZXJyOwotCXUzMiBtYXJrID0geGZybV9tYXJrX2dldChhdHRycywgJmFtcDttKTsKJiM0MzsKJiM0MzsJeGZybV9tYXJrX2dldChhdHRycywgJmFtcDttKTsKIAogCWlmICh4ZnJtX2lkX3Byb3RvX21hdGNoKHAtJmd0O3Byb3RvLCBJUFNFQ19QUk9UT19BTlkpKSB7CiAJCWVyciA9IC1FU1JDSDsKLQkJeCA9IHhmcm1fc3RhdGVfbG9va3VwKG5ldCwgbWFyaywgJmFtcDtwLSZndDtkYWRkciwgcC0mZ3Q7c3BpLCBwLSZndDtwcm90bywgcC0mZ3Q7ZmFtaWx5KTsKJiM0MzsJCXggPSB4ZnJtX3N0YXRlX2xvb2t1cF9leGFjdChuZXQsICZhbXA7bSwgJmFtcDtwLSZndDtkYWRkciwgcC0mZ3Q7c3BpLCBwLSZndDtwcm90bywgcC0mZ3Q7ZmFtaWx5KTsKIAl9IGVsc2UgewogCQl4ZnJtX2FkZHJlc3NfdCAqc2FkZHIgPSBOVUxMOwogCkBAIC0xMTA0LDcgJiM0MzsxMTA1LDcgQEAgc3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlICp4ZnJtX3VzZXJfc3RhdGVfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwKIAkJfQogCiAJCWVyciA9IC1FU1JDSDsKLQkJeCA9IHhmcm1fc3RhdGVfbG9va3VwX2J5YWRkcihuZXQsIG1hcmssCiYjNDM7CQl4ID0geGZybV9zdGF0ZV9sb29rdXBfYnlhZGRyKG5ldCwgbS52LCBtLm0sIHRydWUsCiAJCQkJCSAgICAgJmFtcDtwLSZndDtkYWRkciwgc2FkZHIsCiAJCQkJCSAgICAgcC0mZ3Q7cHJvdG8sIHAtJmd0O2ZhbWlseSk7CiAJfQpAQCAtMjc4OCwxNCAmIzQzOzI3ODksMTMgQEAgc3RhdGljIGludCB4ZnJtX2dldF9hZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKIAlzdHJ1Y3Qgc2tfYnVmZiAqcl9za2I7CiAJaW50IGVycjsKIAlzdHJ1Y3Qga21fZXZlbnQgYzsKLQl1MzIgbWFyazsKIAlzdHJ1Y3QgeGZybV9tYXJrIG07CiAJc3RydWN0IHhmcm1fYWV2ZW50X2lkICpwID0gbmxtc2dfZGF0YShubGgpOwogCXN0cnVjdCB4ZnJtX3VzZXJzYV9pZCAqaWQgPSAmYW1wO3AtJmd0O3NhX2lkOwogCi0JbWFyayA9IHhmcm1fbWFya19nZXQoYXR0cnMsICZhbXA7bSk7CiYjNDM7CXhmcm1fbWFya19nZXQoYXR0cnMsICZhbXA7bSk7CiAKLQl4ID0geGZybV9zdGF0ZV9sb29rdXAobmV0LCBtYXJrLCAmYW1wO2lkLSZndDtkYWRkciwgaWQtJmd0O3NwaSwgaWQtJmd0O3Byb3RvLCBpZC0mZ3Q7ZmFtaWx5KTsKJiM0MzsJeCA9IHhmcm1fc3RhdGVfbG9va3VwX2V4YWN0KG5ldCwgJmFtcDttLCAmYW1wO2lkLSZndDtkYWRkciwgaWQtJmd0O3NwaSwgaWQtJmd0O3Byb3RvLCBpZC0mZ3Q7ZmFtaWx5KTsKIAlpZiAoeCA9PSBOVUxMKQogCQlyZXR1cm4gLUVTUkNIOwogCkBAIC0yODM2LDcgJiM0MzsyODM2LDYgQEAgc3RhdGljIGludCB4ZnJtX25ld19hZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKIAlzdHJ1Y3QgeGZybV9zdGF0ZSAqeDsKIAlzdHJ1Y3Qga21fZXZlbnQgYzsKIAlpbnQgZXJyID0gLUVJTlZBTDsKLQl1MzIgbWFyayA9IDA7CiAJc3RydWN0IHhmcm1fbWFyayBtOwogCXN0cnVjdCB4ZnJtX2FldmVudF9pZCAqcCA9IG5sbXNnX2RhdGEobmxoKTsKIAlzdHJ1Y3QgbmxhdHRyICpycCA9IGF0dHJzW1hGUk1BX1JFUExBWV9WQUxdOwpAQCAtMjg1Niw5ICYjNDM7Mjg1NSwxMCBAQCBzdGF0aWMgaW50IHhmcm1fbmV3X2FlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLAogCQlyZXR1cm4gZXJyOwogCX0KIAotCW1hcmsgPSB4ZnJtX21hcmtfZ2V0KGF0dHJzLCAmYW1wO20pOwomIzQzOwl4ZnJtX21hcmtfZ2V0KGF0dHJzLCAmYW1wO20pOwogCi0JeCA9IHhmcm1fc3RhdGVfbG9va3VwKG5ldCwgbWFyaywgJmFtcDtwLSZndDtzYV9pZC5kYWRkciwgcC0mZ3Q7c2FfaWQuc3BpLCBwLSZndDtzYV9pZC5wcm90bywgcC0mZ3Q7c2FfaWQuZmFtaWx5KTsKJiM0MzsJeCA9IHhmcm1fc3RhdGVfbG9va3VwX2V4YWN0KG5ldCwgJmFtcDttLCAmYW1wO3AtJmd0O3NhX2lkLmRhZGRyLCBwLSZndDtzYV9pZC5zcGksCiYjNDM7CQkJCSAgICBwLSZndDtzYV9pZC5wcm90bywgcC0mZ3Q7c2FfaWQuZmFtaWx5KTsKIAlpZiAoeCA9PSBOVUxMKQogCQlyZXR1cm4gLUVTUkNIOwogCkBAIC0yOTkyLDkgJiM0MzsyOTkyLDEwIEBAIHN0YXRpYyBpbnQgeGZybV9hZGRfc2FfZXhwaXJlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLAogCXN0cnVjdCB4ZnJtX3VzZXJfZXhwaXJlICp1ZSA9IG5sbXNnX2RhdGEobmxoKTsKIAlzdHJ1Y3QgeGZybV91c2Vyc2FfaW5mbyAqcCA9ICZhbXA7dWUtJmd0O3N0YXRlOwogCXN0cnVjdCB4ZnJtX21hcmsgbTsKLQl1MzIgbWFyayA9IHhmcm1fbWFya19nZXQoYXR0cnMsICZhbXA7bSk7CiAKLQl4ID0geGZybV9zdGF0ZV9sb29rdXAobmV0LCBtYXJrLCAmYW1wO3AtJmd0O2lkLmRhZGRyLCBwLSZndDtpZC5zcGksIHAtJmd0O2lkLnByb3RvLCBwLSZndDtmYW1pbHkpOwomIzQzOwl4ZnJtX21hcmtfZ2V0KGF0dHJzLCAmYW1wO20pOwomIzQzOwomIzQzOwl4ID0geGZybV9zdGF0ZV9sb29rdXBfZXhhY3QobmV0LCAmYW1wO20sICZhbXA7cC0mZ3Q7aWQuZGFkZHIsIHAtJmd0O2lkLnNwaSwgcC0mZ3Q7aWQucHJvdG8sIHAtJmd0O2ZhbWlseSk7CiAKIAllcnIgPSAtRU5PRU5UOwogCWlmICh4ID09IE5VTEwpCkBAIC0zMzYxLDkgJiM0MzszMzYyLDkgQEAgc3RhdGljIGludCB4ZnJtX2RvX21pZ3JhdGVfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsCiAKIAljb3B5X2Zyb21fdXNlcl9taWdyYXRlX3N0YXRlKCZhbXA7bSwgdW0pOwogCi0JeCA9IHhmcm1fc3RhdGVfbG9va3VwKG5ldCwgbS5vbGRfbWFyay52ICZhbXA7IG0ub2xkX21hcmsubSwKLQkJCSAgICAgICZhbXA7dW0tJmd0O2lkLmRhZGRyLCB1bS0mZ3Q7aWQuc3BpLAotCQkJICAgICAgdW0tJmd0O2lkLnByb3RvLCB1bS0mZ3Q7aWQuZmFtaWx5KTsKJiM0MzsJeCA9IHhmcm1fc3RhdGVfbG9va3VwX2V4YWN0KG5ldCwgJmFtcDttLm9sZF9tYXJrLAomIzQzOwkJCQkgICAgJmFtcDt1bS0mZ3Q7aWQuZGFkZHIsIHVtLSZndDtpZC5zcGksCiYjNDM7CQkJCSAgICB1bS0mZ3Q7aWQucHJvdG8sIHVtLSZndDtpZC5mYW1pbHkpOwogCWlmICgheCkgewogCQlOTF9TRVRfRVJSX01TRyhleHRhY2ssICYjMzQ7Q2FuIG5vdCBmaW5kIHN0YXRlJiMzNDspOwogCQlyZXR1cm4gLUVTUkNIOwpAQCAtMzQzNCwxOCAmIzQzOzM0MzUsMjMgQEAgc3RhdGljIGludCB4ZnJtX2RvX21pZ3JhdGVfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsCiAJCQkJCQkgICAgICAgeC0mZ3Q7bmF0X2tlZXBhbGl2ZV9pbnRlcnZhbCk7CiAKIAlpZiAobS5uZXdfZmFtaWx5ICE9IHVtLSZndDtpZC5mYW1pbHkgfHwKLQkgICAgIXhmcm1fYWRkcl9lcXVhbCgmYW1wO20ubmV3X2RhZGRyLCAmYW1wO3VtLSZndDtpZC5kYWRkciwgdW0tJmd0O2lkLmZhbWlseSkpIHsKJiM0MzsJICAgICF4ZnJtX2FkZHJfZXF1YWwoJmFtcDttLm5ld19kYWRkciwgJmFtcDt1bS0mZ3Q7aWQuZGFkZHIsIHVtLSZndDtpZC5mYW1pbHkpIHx8CiYjNDM7CSAgICAobS5uZXdfbWFyayAmYW1wOyZhbXA7IChtLm5ld19tYXJrLSZndDt2ICE9IHgtJmd0O21hcmsudiB8fAomIzQzOwkJCSAgIG0ubmV3X21hcmstJmd0O20gIT0geC0mZ3Q7bWFyay5tKSkpIHsKIAkJdTMyIG5ld19tYXJrX2tleSA9IG0ubmV3X21hcmsgPyBtLm5ld19tYXJrLSZndDt2ICZhbXA7IG0ubmV3X21hcmstJmd0O20gOgotCQkJCQkJbS5vbGRfbWFyay52ICZhbXA7IG0ub2xkX21hcmsubTsKJiM0MzsJCQkJCQl4LSZndDttYXJrLnYgJmFtcDsgeC0mZ3Q7bWFyay5tOwogCQlzdHJ1Y3QgeGZybV9zdGF0ZSAqeF9uZXc7CiAKIAkJeF9uZXcgPSB4ZnJtX3N0YXRlX2xvb2t1cChuZXQsIG5ld19tYXJrX2tleSwgJmFtcDttLm5ld19kYWRkciwKIAkJCQkJICB1bS0mZ3Q7aWQuc3BpLCB1bS0mZ3Q7aWQucHJvdG8sIG0ubmV3X2ZhbWlseSk7CiAJCWlmICh4X25ldykgewogCQkJeGZybV9zdGF0ZV9wdXQoeF9uZXcpOwotCQkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLCAmIzM0O05ldyBTQSB0dXBsZSBhbHJlYWR5IG9jY3VwaWVkJiMzNDspOwotCQkJZXJyID0gLUVFWElTVDsKLQkJCWdvdG8gb3V0OwomIzQzOwkJCWlmICh4X25ldyAhPSB4KSB7CiYjNDM7CQkJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywgJiMzNDtOZXcgU0EgdHVwbGUgYWxyZWFkeSBvY2N1cGllZCYjMzQ7KTsKJiM0MzsJCQkJZXJyID0gLUVFWElTVDsKJiM0MzsJCQkJZ290byBvdXQ7CiYjNDM7CQkJfQomIzQzOwkJCS8qIHNlbGYtbWF0Y2ggdmlhIHdpZGUgbWFyayBtYXNrOyBub3QgYSBjb2xsaXNpb24gKi8KIAkJfQogCX0KIApAQCAtMzQ2Nyw2ICYjNDM7MzQ3Myw3IEBAIHN0YXRpYyBpbnQgeGZybV9kb19taWdyYXRlX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLAogCV9feGZybV9zdGF0ZV9kZWxldGUoeCk7CiAJc3Bpbl91bmxvY2tfYmgoJmFtcDt4LSZndDtsb2NrKTsKIAomIzQzOwl4ZnJtX3N0YXRlX2hvbGQoeGMpOwogCWVyciA9IHhmcm1fc3RhdGVfbWlncmF0ZV9pbnN0YWxsKHgsIHhjLCAmYW1wO20sIGV4dGFjayk7CiAJaWYgKGVyciAmbHQ7IDApIHsKIAkJLyoKQEAgLTM0NzQsNiAmIzQzOzM0ODEsNyBAQCBzdGF0aWMgaW50IHhmcm1fZG9fbWlncmF0ZV9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKIAkJICogZnJlZSB1bmRlciB4ZnJtX2NmZ19tdXRleC4gQm90aCBTQXMgYXJlIGdvbmUgaWYgaXQgZG9lczsKIAkJICogcmVzdG9yaW5nIHggd291bGQgcmlzayBTTi9JViByZXVzZS4KIAkJICovCiYjNDM7CQl4ZnJtX3N0YXRlX3B1dCh4Yyk7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtMzQ5MiwxMCAmIzQzOzM1MDAsMTMgQEAgc3RhdGljIGludCB4ZnJtX2RvX21pZ3JhdGVfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsCiAJCWVyciA9IDA7CiAJfQogCiYjNDM7CXhmcm1fc3RhdGVfcHV0KHhjKTsKIG91dDoKIAl4ZnJtX3N0YXRlX3B1dCh4KTsKIAlyZXR1cm4gZXJyOwogb3V0X3hjOgomIzQzOwlpZiAobS54dW8pCiYjNDM7CQl4ZnJtX2Rldl9zdGF0ZV9kZWxldGUoeGMpOwogCXhjLSZndDtrbS5zdGF0ZSA9IFhGUk1fU1RBVEVfREVBRDsKIAl4ZnJtX3N0YXRlX3B1dCh4Yyk7CiAJeGZybV9zdGF0ZV9wdXQoeCk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQveGZybV9zdGF0ZS5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC94ZnJtX3N0YXRlLnNoCmluZGV4IGY2YzU0YTY0OTZkNzE0Li5mMjAyMDczNzI2YTlmNCAxMDA3NTUKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3hmcm1fc3RhdGUuc2gKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3hmcm1fc3RhdGUuc2gKQEAgLTQyLDcgJiM0Mzs0MiwxMSBAQCB0ZXN0cz0mIzM0OwogCW10dV9pcHY0X3IyCQkJSVB2NCBNVFUgZXhjZWVkZWQgZnJvbSBFU1Agcm91dGVyIHIyCiAJbXR1X2lwdjZfcjIJCQlJUHY2IE1UVSBleGNlZWRlZCBmcm9tIEVTUCByb3V0ZXIgcjIKIAltdHVfaXB2NF9yMwkJCUlQdjQgTVRVIGV4Y2VlZGVkIGZyb20gcm91dGVyIHIzCi0JbXR1X2lwdjZfcjMJCQlJUHY2IE1UVSBleGNlZWRlZCBmcm9tIHJvdXRlciByMyYjMzQ7CiYjNDM7CW10dV9pcHY2X3IzCQkJSVB2NiBNVFUgZXhjZWVkZWQgZnJvbSByb3V0ZXIgcjMKJiM0MzsJbWFya193aWxkY2FyZF9zaGFkb3cJCW1hcms6IHdpbGRjYXJkIFNBIGluIGJ5LXNwaSBzdGF0ZSBnZXQgbG9va3VwCiYjNDM7CW1hcmtfd2lsZGNhcmRfZGVsZXRlCQltYXJrOiB3aWxkY2FyZCBTQSBpbiBieS1zcGkgc3RhdGUgZGVsZXRlCiYjNDM7CW1hcmtfd2lsZGNhcmRfZ2V0X2FkZHIJCW1hcms6IHdpbGRjYXJkIFNBIGluIGJ5LWFkZHJlc3MgZ2V0IGxvb2t1cAomIzQzOwltYXJrX3dpbGRjYXJkX2RlbGV0ZV9hZGRyCW1hcms6IHdpbGRjYXJkIFNBIGluIGJ5LWFkZHJlc3MgZGVsZXRlJiMzNDsKIAogcHJlZml4ND0mIzM0OzEwLjEmIzM0OwogcHJlZml4Nj0mIzM0O2ZjMDAmIzM0OwpAQCAtMTAxLDYgJiM0MzsxMDUsMTAgQEAgcnVuX3Rlc3QoKSB7CiAJCW10dV9pcHY2X3IyKSAgICAgICAgIHRlc3RfbXR1X2lwdjZfcjIgOzsKIAkJbXR1X2lwdjRfcjMpICAgICAgICAgdGVzdF9tdHVfaXB2NF9yMyA7OwogCQltdHVfaXB2Nl9yMykgICAgICAgICB0ZXN0X210dV9pcHY2X3IzIDs7CiYjNDM7CQltYXJrX3dpbGRjYXJkX3NoYWRvdykgICAgICB0ZXN0X21hcmtfd2lsZGNhcmRfc2hhZG93IDs7CiYjNDM7CQltYXJrX3dpbGRjYXJkX2RlbGV0ZSkgICAgICB0ZXN0X21hcmtfd2lsZGNhcmRfZGVsZXRlIDs7CiYjNDM7CQltYXJrX3dpbGRjYXJkX2dldF9hZGRyKSAgICB0ZXN0X21hcmtfd2lsZGNhcmRfZ2V0X2FkZHIgOzsKJiM0MzsJCW1hcmtfd2lsZGNhcmRfZGVsZXRlX2FkZHIpIHRlc3RfbWFya193aWxkY2FyZF9kZWxldGVfYWRkciA7OwogCQllc2FjCiAJCXJldD0kPwogCkBAIC0xNjcsNiAmIzQzOzE3NSw4IEBAIHNldHVwX25hbWVzcGFjZXMoKSB7CiAJWyAtbiAmIzM0OyR7TlNfUzJ9JiMzNDsgXSAmYW1wOyZhbXA7IG5zX3MyPShpcCBuZXRucyBleGVjICYjMzQ7JHtOU19TMn0mIzM0OykgJmFtcDsmYW1wOyBuc19hY3RpdmU9JiMzNDske25zX2FjdGl2ZX0gJE5TX1MyJiMzNDsKIAlbIC1uICYjMzQ7JHtOU19SM30mIzM0OyBdICZhbXA7JmFtcDsgbnNfcjM9KGlwIG5ldG5zIGV4ZWMgJiMzNDske05TX1IzfSYjMzQ7KSAmYW1wOyZhbXA7IG5zX2FjdGl2ZT0mIzM0OyR7bnNfYWN0aXZlfSAkTlNfUjMmIzM0OwogCVsgLW4gJiMzNDske05TX0J9JiMzNDsgXSAmYW1wOyZhbXA7IG5zX2FjdGl2ZT0mIzM0OyR7bnNfYWN0aXZlfSAkTlNfQiYjMzQ7CiYjNDM7CiYjNDM7CXJldHVybiAwCiB9CiAKIGFkZHJfYWRkKCkgewpAQCAtMjk1LDYgJiM0MzszMDUsMTggQEAgc2V0dXBfbnNfc2V0X3Y2eCgpIHsKIAlzZXRfeGZybV9wYXJhbXMKIH0KIAomIzQzO3NldHVwX25zX3NldF9zaW1wbGUoKSB7CiYjNDM7CSMgU2luZ2xlIG5hbWVzcGFjZSwgbm8gdmV0aHMvcm91dGVzLgomIzQzOwluc19zZXQ9JiMzNDthJiMzNDsKJiM0MzsJaW1heD0xCiYjNDM7CXNyYz0mIzM0OzEwLjEuMS4xJiMzNDsKJiM0MzsJZHN0PSYjMzQ7MTAuMS4xLjImIzM0OwomIzQzOwlzcmNfbmV0PSYjMzQ7MTAuMS4wLjAvMjQmIzM0OwomIzQzOwlkc3RfbmV0PSYjMzQ7MTAuMi4wLjAvMjQmIzM0OwomIzQzOwomIzQzOwlzZXRfeGZybV9wYXJhbXMKJiM0Mzt9CiYjNDM7CiBzZXR1cF9uZXR3b3JrKCkgewogCSMgQ3JlYXRlIHZldGhzIGFuZCBhZGQgYWRkcmVzc2VzCiAJbG9jYWwgLWEgbnNfY21kCkBAIC00MDMsNiAmIzQzOzQyNSw3IEBAIHNldHVwKCkgewogCQluc19zZXRfdjR4KSAgICBzZXR1cF9uc19zZXRfdjR4IDs7CiAJCW5zX3NldF92NikgICAgIHNldHVwX25zX3NldF92NiA7OwogCQluc19zZXRfdjZ4KSAgICBzZXR1cF9uc19zZXRfdjZ4IDs7CiYjNDM7CQluc19zZXRfc2ltcGxlKSBzZXR1cF9uc19zZXRfc2ltcGxlIDs7CiAJCW5hbWVzcGFjZXMpICAgIHNldHVwX25hbWVzcGFjZXMgOzsKIAkJbmV0d29yaykgICAgICAgc2V0dXBfbmV0d29yayA7OwogCQl4ZnJtKSAgICAgICAgICBzZXR1cF94ZnJtIDs7CkBAIC01NDgsNiAmIzQzOzU3MSwxMTEgQEAgdGVzdF9tdHVfaXB2Nl9yMygpIHsKIAlyZXR1cm4gJiMzNDske3JjfSYjMzQ7CiB9CiAKJiM0MzsjIFNBX2RlY295IChtYXJrIDAvMCwgYWRkZWQgc2Vjb25kKSBzaGFkb3dzIFNBX3RhcmdldCAobWFyayAxLzEpIG9uIGEKJiM0MzsjIHdpbGRjYXJkIG1hcmsgbG9va3VwLiBObyB0cmFmZmljIHNlbnQ7IHRoZXNlIG9ubHkgZXhlcmNpc2UgdGhlIFNBRC4KJiM0MzsKJiM0Mzt0ZXN0X21hcmtfd2lsZGNhcmRfc2hhZG93KCkgewomIzQzOwlzZXR1cCBuc19zZXRfc2ltcGxlIG5hbWVzcGFjZXMgfHwgcmV0dXJuICYjMzQ7JGtzZnRfc2tpcCYjMzQ7CiYjNDM7CWxvY2FsIHJlc3VsdD0wCiYjNDM7CiYjNDM7CXJ1bl9jbWQgJiMzNDske25zX2FbQF19JiMzNDsgaXAgeGZybSBzdGF0ZSBhZGQgXAomIzQzOwkJc3JjICYjMzQ7JHtzcmN9JiMzNDsgZHN0ICYjMzQ7JHtkc3R9JiMzNDsgcHJvdG8gZXNwIHNwaSAweDEwMDAgXAomIzQzOwkJcmVxaWQgMTAwIG1vZGUgdHVubmVsIFwKJiM0MzsJCWFlYWQgJiMzOTtyZmM0MTA2KGdjbShhZXMpKSYjMzk7IDB4MTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSA5NiBcCiYjNDM7CQltYXJrIDEgbWFzayAxCiYjNDM7CiYjNDM7CXJ1bl9jbWQgJiMzNDske25zX2FbQF19JiMzNDsgaXAgeGZybSBzdGF0ZSBhZGQgXAomIzQzOwkJc3JjICYjMzQ7JHtzcmN9JiMzNDsgZHN0ICYjMzQ7JHtkc3R9JiMzNDsgcHJvdG8gZXNwIHNwaSAweDEwMDAgXAomIzQzOwkJcmVxaWQgMTAwIG1vZGUgdHVubmVsIFwKJiM0MzsJCWFlYWQgJiMzOTtyZmM0MTA2KGdjbShhZXMpKSYjMzk7IDB4MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiA5NiBcCiYjNDM7CQltYXJrIDAgbWFzayAwCiYjNDM7CiYjNDM7CXJ1bl9jbWRfZXJyICYjMzQ7JHtuc19hW0BdfSYjMzQ7IGlwIHhmcm0gc3RhdGUgZ2V0IFwKJiM0MzsJCWRzdCAmIzM0OyR7ZHN0fSYjMzQ7IHByb3RvIGVzcCBzcGkgMHgxMDAwIFwKJiM0MzsJCW1hcmsgMSBtYXNrIDEKJiM0MzsKJiM0MzsJIyBFeHBlY3RlZDogU0FfdGFyZ2V0IChtYXJrIDB4MS8weDEpLiBBY3R1YWwgKGJ1Zyk6IFNBX2RlY295IChtYXJrIDAvMCkuCiYjNDM7CWVjaG8gJiMzNDskb3V0JiMzNDsgfCBncmVwIC1xICYjMzQ7bWFyayAweDEvMHgxJiMzNDsgfHwgcmVzdWx0PTEKJiM0MzsKJiM0MzsJcmV0dXJuICYjMzQ7JHtyZXN1bHR9JiMzNDsKJiM0Mzt9CiYjNDM7CiYjNDM7dGVzdF9tYXJrX3dpbGRjYXJkX2RlbGV0ZSgpIHsKJiM0MzsJc2V0dXAgbnNfc2V0X3NpbXBsZSBuYW1lc3BhY2VzIHx8IHJldHVybiAmIzM0OyRrc2Z0X3NraXAmIzM0OwomIzQzOwlsb2NhbCByZXN1bHQ9MAomIzQzOwomIzQzOwlydW5fY21kICYjMzQ7JHtuc19hW0BdfSYjMzQ7IGlwIHhmcm0gc3RhdGUgYWRkIFwKJiM0MzsJCXNyYyAmIzM0OyR7c3JjfSYjMzQ7IGRzdCAmIzM0OyR7ZHN0fSYjMzQ7IHByb3RvIGVzcCBzcGkgMHgxMDAwIFwKJiM0MzsJCXJlcWlkIDEwMCBtb2RlIHR1bm5lbCBcCiYjNDM7CQlhZWFkICYjMzk7cmZjNDEwNihnY20oYWVzKSkmIzM5OyAweDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgOTYgXAomIzQzOwkJbWFyayAxIG1hc2sgMQomIzQzOwomIzQzOwlydW5fY21kICYjMzQ7JHtuc19hW0BdfSYjMzQ7IGlwIHhmcm0gc3RhdGUgYWRkIFwKJiM0MzsJCXNyYyAmIzM0OyR7c3JjfSYjMzQ7IGRzdCAmIzM0OyR7ZHN0fSYjMzQ7IHByb3RvIGVzcCBzcGkgMHgxMDAwIFwKJiM0MzsJCXJlcWlkIDEwMCBtb2RlIHR1bm5lbCBcCiYjNDM7CQlhZWFkICYjMzk7cmZjNDEwNihnY20oYWVzKSkmIzM5OyAweDIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIgOTYgXAomIzQzOwkJbWFyayAwIG1hc2sgMAomIzQzOwomIzQzOwlydW5fY21kICYjMzQ7JHtuc19hW0BdfSYjMzQ7IGlwIHhmcm0gc3RhdGUgZGVsZXRlIFwKJiM0MzsJCWRzdCAmIzM0OyR7ZHN0fSYjMzQ7IHByb3RvIGVzcCBzcGkgMHgxMDAwIFwKJiM0MzsJCW1hcmsgMSBtYXNrIDEKJiM0MzsKJiM0MzsJcnVuX2NtZF9lcnIgJiMzNDske25zX2FbQF19JiMzNDsgaXAgeGZybSBzdGF0ZSBzaG93CiYjNDM7CWVjaG8gJiMzNDskb3V0JiMzNDsgfCBncmVwIC1xICYjMzQ7bWFyayAweDEvMHgxJiMzNDsgJmFtcDsmYW1wOyByZXN1bHQ9MQomIzQzOwomIzQzOwlyZXR1cm4gJiMzNDske3Jlc3VsdH0mIzM0OwomIzQzO30KJiM0MzsKJiM0MzsjIGJ5LWFkZHJlc3MgY291bnRlcnBhcnQ6IHByb3RvIHJvdXRlMi9oYW8gKElQdjYgbW9iaWxpdHkpIGhhdmUgbm8gU1BJLAomIzQzOyMgc28geGZybV91c2VyX3N0YXRlX2xvb2t1cCgpIHJlc29sdmVzIHRoZW0gYnkgYWRkcmVzcyBpbnN0ZWFkLgomIzQzOwomIzQzO3Rlc3RfbWFya193aWxkY2FyZF9nZXRfYWRkcigpIHsKJiM0MzsJc2V0dXAgbnNfc2V0X3NpbXBsZSBuYW1lc3BhY2VzIHx8IHJldHVybiAmIzM0OyRrc2Z0X3NraXAmIzM0OwomIzQzOwlsb2NhbCByZXN1bHQ9MAomIzQzOwlsb2NhbCBzcmM2PSYjMzQ7ZmMwMDo5OjoxJiMzNDsKJiM0MzsJbG9jYWwgZHN0Nj0mIzM0O2ZjMDA6OTo6MiYjMzQ7CiYjNDM7CiYjNDM7CXJ1bl9jbWQgJiMzNDske25zX2FbQF19JiMzNDsgaXAgeGZybSBzdGF0ZSBhZGQgXAomIzQzOwkJc3JjICYjMzQ7JHtzcmM2fSYjMzQ7IGRzdCAmIzM0OyR7ZHN0Nn0mIzM0OyBwcm90byByb3V0ZTIgbW9kZSBybyBjb2EgZmMwMDo5OjozIFwKJiM0MzsJCW1hcmsgMSBtYXNrIDEKJiM0MzsKJiM0MzsJcnVuX2NtZCAmIzM0OyR7bnNfYVtAXX0mIzM0OyBpcCB4ZnJtIHN0YXRlIGFkZCBcCiYjNDM7CQlzcmMgJiMzNDske3NyYzZ9JiMzNDsgZHN0ICYjMzQ7JHtkc3Q2fSYjMzQ7IHByb3RvIHJvdXRlMiBtb2RlIHJvIGNvYSBmYzAwOjk6OjQgXAomIzQzOwkJbWFyayAwIG1hc2sgMAomIzQzOwomIzQzOwlydW5fY21kX2VyciAmIzM0OyR7bnNfYVtAXX0mIzM0OyBpcCB4ZnJtIHN0YXRlIGdldCBcCiYjNDM7CQlzcmMgJiMzNDske3NyYzZ9JiMzNDsgZHN0ICYjMzQ7JHtkc3Q2fSYjMzQ7IHByb3RvIHJvdXRlMiBcCiYjNDM7CQltYXJrIDEgbWFzayAxCiYjNDM7CiYjNDM7CWVjaG8gJiMzNDskb3V0JiMzNDsgfCBncmVwIC1xICYjMzQ7bWFyayAweDEvMHgxJiMzNDsgfHwgcmVzdWx0PTEKJiM0MzsKJiM0MzsJcmV0dXJuICYjMzQ7JHtyZXN1bHR9JiMzNDsKJiM0Mzt9CiYjNDM7CiYjNDM7dGVzdF9tYXJrX3dpbGRjYXJkX2RlbGV0ZV9hZGRyKCkgewomIzQzOwlzZXR1cCBuc19zZXRfc2ltcGxlIG5hbWVzcGFjZXMgfHwgcmV0dXJuICYjMzQ7JGtzZnRfc2tpcCYjMzQ7CiYjNDM7CWxvY2FsIHJlc3VsdD0wCiYjNDM7CWxvY2FsIHNyYzY9JiMzNDtmYzAwOjk6OjEmIzM0OwomIzQzOwlsb2NhbCBkc3Q2PSYjMzQ7ZmMwMDo5OjoyJiMzNDsKJiM0MzsKJiM0MzsJcnVuX2NtZCAmIzM0OyR7bnNfYVtAXX0mIzM0OyBpcCB4ZnJtIHN0YXRlIGFkZCBcCiYjNDM7CQlzcmMgJiMzNDske3NyYzZ9JiMzNDsgZHN0ICYjMzQ7JHtkc3Q2fSYjMzQ7IHByb3RvIHJvdXRlMiBtb2RlIHJvIGNvYSBmYzAwOjk6OjMgXAomIzQzOwkJbWFyayAxIG1hc2sgMQomIzQzOwomIzQzOwlydW5fY21kICYjMzQ7JHtuc19hW0BdfSYjMzQ7IGlwIHhmcm0gc3RhdGUgYWRkIFwKJiM0MzsJCXNyYyAmIzM0OyR7c3JjNn0mIzM0OyBkc3QgJiMzNDske2RzdDZ9JiMzNDsgcHJvdG8gcm91dGUyIG1vZGUgcm8gY29hIGZjMDA6OTo6NCBcCiYjNDM7CQltYXJrIDAgbWFzayAwCiYjNDM7CiYjNDM7CXJ1bl9jbWQgJiMzNDske25zX2FbQF19JiMzNDsgaXAgeGZybSBzdGF0ZSBkZWxldGUgXAomIzQzOwkJc3JjICYjMzQ7JHtzcmM2fSYjMzQ7IGRzdCAmIzM0OyR7ZHN0Nn0mIzM0OyBwcm90byByb3V0ZTIgXAomIzQzOwkJbWFyayAxIG1hc2sgMQomIzQzOwomIzQzOwlydW5fY21kX2VyciAmIzM0OyR7bnNfYVtAXX0mIzM0OyBpcCB4ZnJtIHN0YXRlIHNob3cKJiM0MzsJZWNobyAmIzM0OyRvdXQmIzM0OyB8IGdyZXAgLXEgJiMzNDttYXJrIDB4MS8weDEmIzM0OyAmYW1wOyZhbXA7IHJlc3VsdD0xCiYjNDM7CiYjNDM7CXJldHVybiAmIzM0OyR7cmVzdWx0fSYjMzQ7CiYjNDM7fQomIzQzOwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMKIHVzYWdlKCkgewo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxNToxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTI0OQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDQ2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFhGUk0gU3RhdGUgTG9va3VwIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgYWx0ZXJzIHRoZSB3YXkgdGhlIFhGUk0gKElQc2VjKSBzdGF0ZSBsb29rdXAgd29ya3Mgd2l0aGluIHRoZSBrZXJuZWwuIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgY2hhbmdlIGlzIHRvIG1ha2UgdGhlIGB4ZnJtX3N0YXRlX2xvb2t1cF9ieWFkZHJgLCBgeGZybV9zdGF0ZV9sb29rdXBgLCBgeGZybV9zdGF0ZV9sb29rdXBfZXhhY3RgLCBhbmQgcmVsYXRlZCBmdW5jdGlvbnMgdXNlICpleGFjdCogbWF0Y2hpbmcgb2YgbWFya3MgYW5kIG1hc2tzLCBpbnN0ZWFkIG9mIHRoZSBjdXJyZW50IHdpbGRjYXJkIGFwcHJvYWNoLCB3aGVuIGEgcmVxdWVzdCBvcmlnaW5hdGVzIGZyb20gdGhlIGNvbnRyb2wgcGxhbmUgKHByaW1hcmlseSBgeGZybV91c2VyLmNgKS4gVGhpcyBpcyBhIGNydWNpYWwgZml4LCBiZWNhdXNlIGEgd2lsZGNhcmQgU2VjdXJpdHkgQXNzb2NpYXRpb24gKFNBKSB3aXRoIGEgbWFyayBvZiAwLzAgY2FuIGN1cnJlbnRseSBvdmVyc2hhZG93IGEgbW9yZSBzcGVjaWZpYyBTQSAoZS5nLiwgbWFyayAxLzEpIHdoZW4gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBjb250cm9sIHBsYW5lIGFjdGlvbnMgbGlrZSBHRVQsIERFTEVURSwgb3IgTUlHUkFURS4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgcmFjZSBjb25kaXRpb24sIGFuZCB0aGlzIHBhdGNoIHNob3VsZCBhZGRyZXNzIGl0IGRpcmVjdGx5LgoKTXkgaW1tZWRpYXRlIHRob3VnaHRzIGFyZSwgbGV0JiMzOTtzIG5haWwgZG93biBwcmVjaXNlbHkgd2hpY2ggY29kZSBpcyBtb2RpZmllZC4gSSBzZWUgY2hhbmdlcyBpbiBgbmV0L3hmcm0veGZybV9zdGF0ZS5jYCwgYG5ldC94ZnJtL3hmcm1fdXNlci5jYCwgYG5ldC9pcHY2L3hmcm02X2lucHV0LmNgLCBhbmQgYGluY2x1ZGUvbmV0L3hmcm0uaGAuICBQbHVzLCB0aGVyZSBhcmUgdGhlc2UgbmV3IHRlc3RzIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQveGZybV9zdGF0ZS5zaGAgd2hpY2ggYXJlIGVuY291cmFnaW5nIC0gZ29vZCB0byBzZWUgdGhleSYjMzk7cmUgYnVpbGRpbmcgdGVzdCBjb3ZlcmFnZSBhcm91bmQgdGhpcy4KCkZ1bmN0aW9uYWxseSwgdGhpcyBpcyBhbGwgYWJvdXQgaG93IElQc2VjIFNBcyBhcmUgbG9va2VkIHVwIGFuZCBoYW5kbGVkIHZpYSBuZXRsaW5rLiBUaGUgaW1wYWN0IGlzIHNpZ25pZmljYW50IGZvciBvcGVyYXRpb25zIGxpa2Ugc3RhdGUgZGVsZXRpb24sIG1pZ3JhdGlvbiwgYW5kIHJldHJpZXZhbC4gSSBuZWVkIHRvIGZvY3VzIG9uIHRob3NlIHNwZWNpZmljIG5ldGxpbmsgbWVzc2FnZXMgbGlrZSBgWEZSTV9NU0dfR0VUU0FgLCBgWEZSTV9NU0dfREVMU0FgLCBhbmQgYFhGUk1fTVNHX01JR1JBVEVgIHRvIHNlZSB0aGUgZWZmZWN0IG9mIHRoaXMgY2hhbmdlLgoKTm93LCBmb3IgZnV6emluZywgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBjcml0aWNhbCBmdW5jdGlvbnMuIEkmIzM5O20gZ29pbmcgdG8gY29uY2VudHJhdGUgb24gYHhmcm1fc3RhdGVfbG9va3VwX2V4YWN0YCwgYHhmcm1fc3RhdGVfbG9va3VwX2J5YWRkcmAsIGB4ZnJtX3VzZXJfc3RhdGVfbG9va3VwYCwgYHhmcm1fZ2V0X2FlYCwgYHhmcm1fbmV3X2FlYCwgYHhmcm1fYWRkX3NhX2V4cGlyZWAsIGFuZCBgeGZybV9kb19taWdyYXRlX3N0YXRlYC4gVGhlc2UgYXJlIHRoZSBrZXkgZW50cnkgcG9pbnRzIGFuZCBtYW5pcHVsYXRpb24gcG9pbnRzIG9mIHRoZSBzdGF0ZSBsb29rdXAgbG9naWMuIFRoZXkgYXJlIGRlZmluaXRlbHkgd2hlcmUgYW55IGlzc3VlcyBmcm9tIHRoZSBwYXRjaCB3aWxsIHN1cmZhY2UuCgpGaW5hbGx5LCBsZXQmIzM5O3MgdmVyaWZ5IHRoYXQgdGhlIG5lY2Vzc2FyeSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBzZXQuIGBDT05GSUdfWEZSTV9VU0VSYCBpcyB2aXRhbCBmb3IgYHhmcm1fdXNlci5jYCwgYW5kIGBDT05GSUdfWEZSTV9NSUdSQVRFYCBpcyBuZWVkZWQgZm9yIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgLiBJJiMzOTtsbCBjb25maXJtIHRoYXQgdGhlc2UgYXJlIGVuYWJsZWQgaW4gdGhlIGJ1aWxkIGVudmlyb25tZW50IHRvIGVuc3VyZSB0aGlzIHBhdGNoIGlzIGZ1bGx5IHN1cHBvcnRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxNToxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgWEZSTV9NSUdSQVRFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL0tjb25maWc9NTE9Y29uZmlnIFhGUk1fU1VCX1BPTElDWVxuLS1cbm5ldC94ZnJtL0tjb25maWctNjAtXG5uZXQveGZybS9LY29uZmlnOjYxOmNvbmZpZyBYRlJNX01JR1JBVEVcbm5ldC94ZnJtL0tjb25maWctNjItXHRib29sIFwmIzM0O1RyYW5zZm9ybWF0aW9uIG1pZ3JhdGUgZGF0YWJhc2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxNToxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQxNAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIHRoZSBYRlJNX1VTRVIgUGVyc3BlY3RpdmUqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIG91dCBgWEZSTV9VU0VSYC4gSXQmIzM5O3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGggdGhlIHVzZXItc3BhY2UgaW50ZXJhY3Rpb25zLCB0aGUgcG90ZW50aWFsIGNvbmZpZ3VyYXRpb24gYXNwZWN0cywgYW5kIGFueSBjdXN0b20gaW1wbGVtZW50YXRpb25zLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBjb250cm9sIHBsYW5lIGFuZCBkYXRhIHBsYW5lIGhlcmUsIGFuZCB3aGV0aGVyIHRoZSBpc3N1ZSBJJiMzOTttIGxvb2tpbmcgYXQgY291bGQgYmUgYSByZXN1bHQgb2Ygc29tZXRoaW5nIG1pc2NvbmZpZ3VyZWQgYXQgdGhlIHVzZXIgbGV2ZWwuIFdoYXQgYXJlIHRoZSByZWxldmFudCBzb2NrZXQgb3B0aW9ucz8gQXJlIHRoZXJlIGFueSB1bmV4cGVjdGVkIHBvbGljeSBzZXR0aW5ncz8gSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IGhvdyB0aGUga2V5cyBhcmUgYmVpbmcgbWFuYWdlZCBhbmQgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIGRpc2NyZXBhbmNpZXMgYmV0d2VlbiBleHBlY3RlZCBiZWhhdmlvciBhbmQgd2hhdCBJJiMzOTttIG9ic2VydmluZy4gSXTigJlzIGxpa2VseSBpbiB0aGUga2VybmVsLXVzZXIgaW50ZXJhY3Rpb25zLiBUaGlzIGNvdWxkIGJlIHdoZXJlIHRoZSBwcm9ibGVtIHN0ZW1zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE1OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBYRlJNX1VTRVImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0vS2NvbmZpZz0yMj1pZiBJTkVUXG5uZXQveGZybS9LY29uZmlnOjIzOmNvbmZpZyBYRlJNX1VTRVJcbm5ldC94ZnJtL0tjb25maWctMjQtXHR0cmlzdGF0ZSBcJiMzNDtUcmFuc2Zvcm1hdGlvbiB1c2VyIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlXCYjMzQ7XG4tLVxubmV0L3hmcm0vS2NvbmZpZy0zMS1cbm5ldC94ZnJtL0tjb25maWc6MzI6Y29uZmlnIFhGUk1fVVNFUl9DT01QQVRcbm5ldC94ZnJtL0tjb25maWctMzMtXHR0cmlzdGF0ZSBcJiMzNDtDb21wYXRpYmxlIEFCSSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTU6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI3NjAKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgeGZybV9kb19taWdyYXRlX3N0YXRlYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludHJpY2FjaWVzIG9mIHRoaXMgZnVuY3Rpb24gd2l0aGluIGBuZXQveGZybS94ZnJtX3VzZXIuY2AuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IGl0IGhhbmRsZXMgc3RhdGUgbWlncmF0aW9uLiBUaGlzIGxpa2VseSBpbnZvbHZlcyB1c2VyLXNwYWNlIGludGVyYWN0aW9ucywgcG9zc2libHkgd2l0aCBuZXRsaW5rIG1lc3NhZ2VzIG9yIHNpbWlsYXIgbWVjaGFuaXNtcy4gSSYjMzk7bGwgbmVlZCB0byBmb2N1cyBvbiBob3cgdGhlIGZ1bmN0aW9uIHByb2Nlc3NlcyB0aGUgZGF0YSBpdCByZWNlaXZlcywgaG93IGl0IHZhbGlkYXRlcyBpbnB1dCwgYW5kIGhvdyBpdCBvcmNoZXN0cmF0ZXMgdGhlIHRyYW5zZmVyIG9mIHNlY3VyaXR5IGFzc29jaWF0aW9uIChTQSkgaW5mb3JtYXRpb24gYmV0d2VlbiBkaWZmZXJlbnQgbmV0d29yayBuYW1lc3BhY2VzIG9yIG90aGVyIGNvbnRleHRzLCBiZWNhdXNlIEkga25vdyB0aGF0JiMzOTtzIHRoZSB1c3VhbCBpbXBsaWNhdGlvbiBvZiBhICYjMzQ7bWlncmF0ZSYjMzQ7IG9wZXJhdGlvbi4gSSYjMzk7bGwgYWxzbyBiZSBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgdGhhdCBjb3VsZCBhcmlzZSBkdXJpbmcgdGhpcyBzdGF0ZSB0cmFuc2ZlciwgZXNwZWNpYWxseSBjb25zaWRlcmluZyB0aGF0IHRoZSBzdGF0ZSBtaWdodCBjb250YWluIHNlbnNpdGl2ZSBjcnlwdG9ncmFwaGljIGtleXMgb3IgU1BJIHZhbHVlcy4gR2l2ZW4gbXkgZmFtaWxpYXJpdHkgd2l0aCBYRlJNLCBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgY2FsbHMgdG8gZnVuY3Rpb25zIGxpa2UgYHhmcm1fc3RhdGVfYWxsb2NgLCBgeGZybV9zdGF0ZV9hZGRgLCBgeGZybV9zdGF0ZV9kZWxldGVgIGFuZCBwZXJoYXBzIHN0YXRlIGxvY2tpbmcgbWVjaGFuaXNtcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxNToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnJtX2RvX21pZ3JhdGVfc3RhdGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmM9MzMwND1zdGF0aWMgaW50IHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMzI0LVxubmV0L3hmcm0veGZybV91c2VyLmM6MzMyNTpzdGF0aWMgaW50IHhmcm1fZG9fbWlncmF0ZV9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMzMjYtXHRcdFx0XHQgc3RydWN0IG5sYXR0ciAqKmF0dHJzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzUxNi0jZWxzZVxubmV0L3hmcm0veGZybV91c2VyLmM6MzUxNzpzdGF0aWMgaW50IHhmcm1fZG9fbWlncmF0ZV9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM1MTgtXHRcdFx0XHQgc3RydWN0IG5sYXR0ciAqKmF0dHJzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9MzczMj1zdGF0aWMgY29uc3Qgc3RydWN0IHhmcm1fbGluayB7XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzc2OS1cdFtYRlJNX01TR19HRVRERUZBVUxUICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fZ2V0X2RlZmF1bHQgICB9LFxubmV0L3hmcm0veGZybV91c2VyLmM6Mzc3MDpcdFtYRlJNX01TR19NSUdSQVRFX1NUQVRFIC0gWEZSTV9NU0dfQkFTRV0gPSB7IC5kb2l0ID0geGZybV9kb19taWdyYXRlX3N0YXRlIH0sXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNzcxLX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTU6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM0NjQKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBzaXR1YXRpb246CgoqKlhGUk0gU3Vic3lzdGVtIFRlc3RpbmcgUmVxdWlyZW1lbnRzKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcsIHRvIHJlYWxseSBuYWlsIGRvd24gdGhlIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgIGZ1bmN0aW9uLCB3ZSYjMzk7cmUgZGVmaW5pdGVseSBnb2luZyB0byBuZWVkIHRoZSBgWEZSTV9NSUdSQVRFYCBmbGFnIGFjdGl2YXRlZCBmb3IgYSBwcm9wZXIgdGVzdGluZyBlbnZpcm9ubWVudC4gTWFrZXMgcGVyZmVjdCBzZW5zZS4gQW5kIG9mIGNvdXJzZSwgZ2l2ZW4gdGhhdCBgeGZybV91c2VyLmNgIGlzIGdvaW5nIHRvIGJlIGludGVncmFsIHRvIHRoZXNlIHRlc3RzLCB3ZSYjMzk7cmUgZ29pbmcgdG8gbmVlZCBgWEZSTV9VU0VSYCBlbmFibGVkLiBJdOKAmXMgcHJldHR5IG9idmlvdXMsIGJ1dCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUuCgpOb3csIG15IG5leHQgdGhvdWdodCBpcywgbGV0JiMzOTtzIHJlZnJlc2ggb24gYHhmcm1fc3RhdGVfbG9va3VwX2V4YWN0YC4gSSYjMzk7bGwgZ28gY2hlY2sgaXQgb3V0IGluIGBuZXQveGZybS94ZnJtX3N0YXRlLmNgLiBBbHdheXMgZ29vZCB0byBoYXZlIGEgc29saWQgaGFuZGxlIG9uIGhvdyB0aGF0IHBhcnRpY3VsYXIgZnVuY3Rpb24gd29ya3MsIGdpdmVuIGl0cyBwb3RlbnRpYWwgaW1wbGljYXRpb25zIGluIGEgbWlncmF0aW9uIHNjZW5hcmlvLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCBpdCBjb21wbGV0ZWx5IGJlZm9yZSBwcm9jZWVkaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxNToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnJtX3N0YXRlX2xvb2t1cF9leGFjdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcveGZybS94ZnJtX21pZ3JhdGVfc3RhdGUucnN0PTI5PVRoZSBzdHJ1Y3QgaXMgZGVmaW5lZCBpbiBgYGluY2x1ZGUvdWFwaS9saW51eC94ZnJtLmhgYC4gVGhlIFNBIGlzIGxvb2tlZFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3hmcm0veGZybV9taWdyYXRlX3N0YXRlLnJzdDozMDp1cCB1c2luZyBgYHhmcm1fc3RhdGVfbG9va3VwX2V4YWN0KClgYCB3aXRoIGBgaWQuc3BpYGAsIGBgaWQuZGFkZHJgYCxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy94ZnJtL3hmcm1fbWlncmF0ZV9zdGF0ZS5yc3QtMzEtYGBpZC5wcm90b2BgLCBgYGlkLmZhbWlseWBgLCBhbmQgYW4gZXhhY3QgbWF0Y2ggYWdhaW5zdCBgYG9sZF9tYXJrLnZgYFxuLS1cbmluY2x1ZGUvbmV0L3hmcm0uaD0xNzQ0PXN0cnVjdCB4ZnJtX3N0YXRlICp4ZnJtX3N0YXRlX2xvb2t1cF9ieWFkZHIoc3RydWN0IG5ldCAqbmV0LCB1MzIgbWFyaywgdTMyIG1hc2ssIGJvb2wgZXhhY3QsXG4tLVxuaW5jbHVkZS9uZXQveGZybS5oLTE3NDgtXHRcdFx0XHRcdCAgICB1bnNpZ25lZCBzaG9ydCBmYW1pbHkpO1xuaW5jbHVkZS9uZXQveGZybS5oOjE3NDk6c3RydWN0IHhmcm1fc3RhdGUgKnhmcm1fc3RhdGVfbG9va3VwX2V4YWN0KHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IHhmcm1fbWFyayAqbWFyayxcbmluY2x1ZGUvbmV0L3hmcm0uaC0xNzUwLVx0XHRcdFx0XHQgICBjb25zdCB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsIF9fYmUzMiBzcGksXG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jPTEyMTI9c3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlICpcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoxMjEzOl9feGZybV9zdGF0ZV9sb29rdXBfZXhhY3QoY29uc3Qgc3RydWN0IHhmcm1faGFzaF9zdGF0ZV9wdHJzICpzdGF0ZV9wdHJzLFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTEyMTQtXHRcdFx0ICBjb25zdCBzdHJ1Y3QgeGZybV9tYXJrICptYXJrLFxuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYz0xMzI3PV9feGZybV9zdGF0ZV9sb2NhdGVfZXhhY3Qoc3RydWN0IHhmcm1fc3RhdGUgKngsIGludCB1c2Vfc3BpLCBpbnQgZmFtaWx5KVxuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xMzM0LVx0aWYgKHVzZV9zcGkpXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MTMzNTpcdFx0cmV0dXJuIF9feGZybV9zdGF0ZV9sb29rdXBfZXhhY3QoXHUwMDI2c3RhdGVfcHRycywgXHUwMDI2eC1cdTAwM2VtYXJrLCBcdTAwMjZ4LVx1MDAzZWlkLmRhZGRyLFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTEzMzYtXHRcdFx0XHRcdFx0IHgtXHUwMDNlaWQuc3BpLCB4LVx1MDAzZWlkLnByb3RvLCBmYW1pbHkpO1xuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYz0yNDQ3PXN0cnVjdCB4ZnJtX3N0YXRlICpcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoyNDQ4Onhmcm1fc3RhdGVfbG9va3VwX2V4YWN0KHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IHhmcm1fbWFyayAqbWFyayxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yNDQ5LVx0XHRcdGNvbnN0IHhmcm1fYWRkcmVzc190ICpkYWRkciwgX19iZTMyIHNwaSxcbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjQ1Ny1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoyNDU4Olx0eCA9IF9feGZybV9zdGF0ZV9sb29rdXBfZXhhY3QoXHUwMDI2c3RhdGVfcHRycywgbWFyaywgZGFkZHIsIHNwaSwgcHJvdG8sIGZhbWlseSk7XG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjQ1OS1cdHJjdV9yZWFkX3VubG9jaygpO1xuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yNDYxLX1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoyNDYyOkVYUE9SVF9TWU1CT0woeGZybV9zdGF0ZV9sb29rdXBfZXhhY3QpO1xubmV0L3hmcm0veGZybV9zdGF0ZS5jLTI0NjMtXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9MTA4ND1zdGF0aWMgc3RydWN0IHhmcm1fc3RhdGUgKnhmcm1fdXNlcl9zdGF0ZV9sb29rdXAoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTEwOTYtXHRcdGVyciA9IC1FU1JDSDtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjEwOTc6XHRcdHggPSB4ZnJtX3N0YXRlX2xvb2t1cF9leGFjdChuZXQsIFx1MDAyNm0sIFx1MDAyNnAtXHUwMDNlZGFkZHIsIHAtXHUwMDNlc3BpLCBwLVx1MDAzZXByb3RvLCBwLVx1MDAzZWZhbWlseSk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0xMDk4LVx0fSBlbHNlIHtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz0yNzg0PXN0YXRpYyBpbnQgeGZybV9nZXRfYWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMjc5Ny1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjI3OTg6XHR4ID0geGZybV9zdGF0ZV9sb29rdXBfZXhhY3QobmV0LCBcdTAwMjZtLCBcdTAwMjZpZC1cdTAwM2VkYWRkciwgaWQtXHUwMDNlc3BpLCBpZC1cdTAwM2Vwcm90bywgaWQtXHUwMDNlZmFtaWx5KTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTI3OTktXHRpZiAoeCA9PSBOVUxMKVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTI4MzI9c3RhdGljIGludCB4ZnJtX25ld19hZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yODU5LVxubmV0L3hmcm0veGZybV91c2VyLmM6Mjg2MDpcdHggPSB4ZnJtX3N0YXRlX2xvb2t1cF9leGFjdChuZXQsIFx1MDAyNm0sIFx1MDAyNnAtXHUwMDNlc2FfaWQuZGFkZHIsIHAtXHUwMDNlc2FfaWQuc3BpLFxubmV0L3hmcm0veGZybV91c2VyLmMtMjg2MS1cdFx0XHRcdCAgICBwLVx1MDAzZXNhX2lkLnByb3RvLCBwLVx1MDAzZXNhX2lkLmZhbWlseSk7XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9Mjk4NT1zdGF0aWMgaW50IHhmcm1fYWRkX3NhX2V4cGlyZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yOTk3LVxubmV0L3hmcm0veGZybV91c2VyLmM6Mjk5ODpcdHggPSB4ZnJtX3N0YXRlX2xvb2t1cF9leGFjdChuZXQsIFx1MDAyNm0sIFx1MDAyNnAtXHUwMDNlaWQuZGFkZHIsIHAtXHUwMDNlaWQuc3BpLCBwLVx1MDAzZWlkLnByb3RvLCBwLVx1MDAzZWZhbWlseSk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0yOTk5LVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTMzMjU9c3RhdGljIGludCB4ZnJtX2RvX21pZ3JhdGVfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzM2NC1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjMzNjU6XHR4ID0geGZybV9zdGF0ZV9sb29rdXBfZXhhY3QobmV0LCBcdTAwMjZtLm9sZF9tYXJrLFxubmV0L3hmcm0veGZybV91c2VyLmMtMzM2Ni1cdFx0XHRcdCAgICBcdTAwMjZ1bS1cdTAwM2VpZC5kYWRkciwgdW0tXHUwMDNlaWQuc3BpLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxNToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTMxMgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDIzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBGdXp6aW5nIFN0cmF0ZWd5IGZvciBUaGlzIElQc2VjIFNBIExvb2t1cCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSB0YWtlbiBhIGxvb2sgYXQgdGhpcyBwYXRjaCBhbmQgaXQmIzM5O3MgaW1tZWRpYXRlbHkgY2xlYXIgdGhhdCBpdCYjMzk7cyB0b3VjaGluZyBjcml0aWNhbCBmdW5jdGlvbmFsIGNvcmUgbG9naWMg4oCTIHNwZWNpZmljYWxseSwgaG93IElQc2VjIFNlY3VyaXR5IEFzc29jaWF0aW9ucyAoU0FzKSBhcmUgbG9va2VkIHVwLiBUaGlzIGlzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLCBnaXZlbiB0aGF0IGl0JiMzOTtzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB0aHJvdWdoIG5ldGxpbmsuIE15IGd1dCB0ZWxscyBtZSB0aGlzIGNvdWxkIGJlIGludGVyZXN0aW5nLgoKVGhlIGZ1bmN0aW9ucyBJJiMzOTttIGZvY3VzaW5nIG9uIGFyZTogYHhmcm1fc3RhdGVfbG9va3VwX2V4YWN0YCwgYHhmcm1fc3RhdGVfbG9va3VwX2J5YWRkcmAsIGB4ZnJtX3VzZXJfc3RhdGVfbG9va3VwYCwgYHhmcm1fZ2V0X2FlYCwgYHhmcm1fbmV3X2FlYCwgYHhmcm1fYWRkX3NhX2V4cGlyZWAsIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgLCBgeGZybV9zdGF0ZV91cGRhdGVgLCBhbmQgYHhmcm1fc3RhdGVfbWlncmF0ZV9pbnN0YWxsYC4gVGhlc2UgbG9vayBsaWtlIHRoZSBrZXkgcGllY2VzIGludm9sdmVkIGluIHRoaXMgbG9va3VwIGFuZCBtYW5hZ2VtZW50IHByb2Nlc3MuCgpCZWZvcmUgSSBqdW1wIGludG8gZnV6emluZywgSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gSSYjMzk7bGwgbmVlZCBgQ09ORklHX1hGUk1gIGFzIHRoZSBiYXNlLCBvZiBjb3Vyc2UuIFRoZW4sIGBDT05GSUdfWEZSTV9VU0VSYCBpcyBlc3NlbnRpYWwgZm9yIHRoZSB1c2Vyc3BhY2UgYWNjZXNzLCBhbmQgc2luY2UgbWlncmF0aW9uIGlzIGludm9sdmVkLCBgQ09ORklHX1hGUk1fTUlHUkFURWAgaXMgYSBtdXN0LiBLbm93aW5nIHdoYXQgSSYjMzk7bSBkZWFsaW5nIHdpdGgsIGBDT05GSUdfSU5FVGAgZm9yIGBYRlJNX1VTRVJgIGlzIGFsc28gbmVjZXNzYXJ5LCBhbmQgSSBzZWUgYENPTkZJR19JUFY2YCBkZXBlbmRlbmN5LCBzcGVjaWZpY2FsbHkgZm9yIGBuZXQvaXB2Ni94ZnJtNl9pbnB1dC5jYC4gSSB3aWxsIHZlcmlmeSB0aGUgZGVwZW5kZW5jaWVzIGZvciBgWEZSTV9NSUdSQVRFYCB0byBiZSBjZXJ0YWluIEkgaGF2ZSBhbGwgdGhlIGJveGVzIHRpY2tlZCBiZWZvcmUgSSBzdGFydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTU6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFhGUk1fTUlHUkFURSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS9LY29uZmlnPTUxPWNvbmZpZyBYRlJNX1NVQl9QT0xJQ1lcbi0tXG5uZXQveGZybS9LY29uZmlnLTYwLVxubmV0L3hmcm0vS2NvbmZpZzo2MTpjb25maWcgWEZSTV9NSUdSQVRFXG5uZXQveGZybS9LY29uZmlnLTYyLVx0Ym9vbCBcJiMzNDtUcmFuc2Zvcm1hdGlvbiBtaWdyYXRlIGRhdGFiYXNlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE1OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MDE0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKlhGUk1fTUlHUkFURSBEZXBlbmRlbmN5IEludmVzdGlnYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIGBYRlJNX01JR1JBVEVgLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlcywgc3BlY2lmaWNhbGx5IGBuZXQveGZybS9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHRoZSBkZXBlbmRlbmNpZXMsIGlmIGFueSwgdGhhdCBnb3Zlcm4gd2hldGhlciBgWEZSTV9NSUdSQVRFYCBpcyBldmVuICplbmFibGVkKiBvciAqc2VsZWN0YWJsZSogZHVyaW5nIHRoZSBrZXJuZWwgYnVpbGQgcHJvY2Vzcy4gSSB3YW50IHRvIHF1aWNrbHkgdW5kZXJzdGFuZCBpZiBpdCByZWxpZXMgb24gb3RoZXIgWEZSTSBmZWF0dXJlcywgbmV0d29ya2luZyBzdWJzeXN0ZW1zLCBvciBldmVuIGhhcmR3YXJlIGNhcGFiaWxpdGllcy4gVGltZSB0byBnbyBzcGVsdW5raW5nIGluIHRoYXQgS2NvbmZpZyBmaWxlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgc2VjcmV0cyBpdCBob2xkcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTU6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQveGZybS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA1MDpcdFxuICA1MTpcdGNvbmZpZyBYRlJNX1NVQl9QT0xJQ1lcbiAgNTI6XHRcdGJvb2wgXCYjMzQ7VHJhbnNmb3JtYXRpb24gc3ViIHBvbGljeSBzdXBwb3J0XCYjMzQ7XG4gIDUzOlx0XHRkZXBlbmRzIG9uIFhGUk1cbiAgNTQ6XHRcdGhlbHBcbiAgNTU6XHRcdCAgU3VwcG9ydCBzdWIgcG9saWN5IGZvciBkZXZlbG9wZXJzLiBCeSB1c2luZyBzdWIgcG9saWN5IHdpdGggbWFpblxuICA1NjpcdFx0ICBvbmUsIHR3byBwb2xpY2llcyBjYW4gYmUgYXBwbGllZCB0byB0aGUgc2FtZSBwYWNrZXQgYXQgb25jZS5cbiAgNTc6XHRcdCAgUG9saWN5IHdoaWNoIGxpdmVzIHNob3J0ZXIgdGltZSBpbiBrZXJuZWwgc2hvdWxkIGJlIGEgc3ViLlxuICA1ODpcdFxuICA1OTpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICA2MDpcdFxuICA2MTpcdGNvbmZpZyBYRlJNX01JR1JBVEVcbiAgNjI6XHRcdGJvb2wgXCYjMzQ7VHJhbnNmb3JtYXRpb24gbWlncmF0ZSBkYXRhYmFzZVwmIzM0O1xuICA2MzpcdFx0ZGVwZW5kcyBvbiBYRlJNXG4gIDY0Olx0XHRoZWxwXG4gIDY1Olx0XHQgIEEgZmVhdHVyZSB0byB1cGRhdGUgbG9jYXRvcihzKSBvZiBhIGdpdmVuIElQc2VjIHNlY3VyaXR5XG4gIDY2Olx0XHQgIGFzc29jaWF0aW9uIGR5bmFtaWNhbGx5LiAgVGhpcyBmZWF0dXJlIGlzIHJlcXVpcmVkLCBmb3JcbiAgNjc6XHRcdCAgaW5zdGFuY2UsIGluIGEgTW9iaWxlIElQdjYgZW52aXJvbm1lbnQgd2l0aCBJUHNlYyBjb25maWd1cmF0aW9uXG4gIDY4Olx0XHQgIHdoZXJlIG1vYmlsZSBub2RlcyBjaGFuZ2UgdGhlaXIgYXR0YWNobWVudCBwb2ludCB0byB0aGUgSW50ZXJuZXQuXG4gIDY5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE1OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NTAyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkRlcGVuZGVuY3kgQW5hbHlzaXM6IFhGUk0gTW9kdWxlcyoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGVzZSBrZXJuZWwgbW9kdWxlIGRlcGVuZGVuY2llcy4gSXQgbG9va3MgbGlrZSBgWEZSTV9NSUdSQVRFYCBhYnNvbHV0ZWx5IHJlbGllcyBvbiB0aGUgYmFzZSBgWEZSTWAgbW9kdWxlLiBNYWtlcyBzZW5zZTsgbWlncmF0aW9uIGxpa2VseSBpbnZvbHZlcyBleGlzdGluZyBYRlJNIGluZnJhc3RydWN0dXJlLiBBbmQgdGhlbiB3ZSBoYXZlIGBYRlJNX1VTRVJgLCB3aGljaCBzZWVtcyB0byBiZSBzaXR0aW5nIG9uIHRvcCBvZiBib3RoIGBJTkVUYCBhbmQgYFhGUk1gLiBUaGF0IHNpZ25hbHMgYSB1c2VyLXNwYWNlIGludGVyZmFjZSwgcHJvYmFibHkgdG8gaW50ZXJhY3Qgd2l0aCBYRlJNIHZpYSBzb2NrZXRzLiBNYWtlcyB0b3RhbCBzZW5zZSwgYW5kIHRoaXMgaXMgc3RhbmRhcmQuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IHVuZGVyc3RhbmRpbmcuCgpUbyBnZXQgdGhlIGZ1bGwgcGljdHVyZSBhbmQgY29uZmlybSB0aG9zZSBkZXBlbmRlbmNpZXMsIEkgc2hvdWxkIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIFRoZSBgbmV0L3hmcm0vS2NvbmZpZ2AgZmlsZSBzaG91bGQgY29udGFpbiB0aGUgZGVmaW5pdGl2ZSBkZWNsYXJhdGlvbiBvZiBgWEZSTV9VU0VSYCBhbmQgaXRzIGRlcGVuZGVuY2llcy4gTGV0JiMzOTtzIGdvIGNoZWNrIHRoYXQgb3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxNToyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC94ZnJtL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDE1Olx0XHR0cmlzdGF0ZVxuICAxNjpcdFx0c2VsZWN0IFhGUk1cbiAgMTc6XHRcdHNlbGVjdCBDUllQVE9cbiAgMTg6XHRcdHNlbGVjdCBDUllQVE9fQUVBRFxuICAxOTpcdFx0c2VsZWN0IENSWVBUT19IQVNIXG4gIDIwOlx0XHRzZWxlY3QgQ1JZUFRPX1NLQ0lQSEVSXG4gIDIxOlx0XG4gIDIyOlx0aWYgSU5FVFxuICAyMzpcdGNvbmZpZyBYRlJNX1VTRVJcbiAgMjQ6XHRcdHRyaXN0YXRlIFwmIzM0O1RyYW5zZm9ybWF0aW9uIHVzZXIgY29uZmlndXJhdGlvbiBpbnRlcmZhY2VcJiMzNDtcbiAgMjU6XHRcdHNlbGVjdCBYRlJNX0FMR09cbiAgMjY6XHRcdGhlbHBcbiAgMjc6XHRcdCAgU3VwcG9ydCBmb3IgVHJhbnNmb3JtYXRpb24oWEZSTSkgdXNlciBjb25maWd1cmF0aW9uIGludGVyZmFjZVxuICAyODpcdFx0ICBsaWtlIElQc2VjIHVzZWQgYnkgbmF0aXZlIExpbnV4IHRvb2xzLlxuICAyOTpcdFxuICAzMDpcdFx0ICBJZiB1bnN1cmUsIHNheSBZLlxuICAzMTpcdFxuICAzMjpcdGNvbmZpZyBYRlJNX1VTRVJfQ09NUEFUXG4gIDMzOlx0XHR0cmlzdGF0ZSBcJiMzNDtDb21wYXRpYmxlIEFCSSBzdXBwb3J0XCYjMzQ7XG4gIDM0Olx0XHRkZXBlbmRzIG9uIFhGUk1fVVNFUiBcdTAwMjZcdTAwMjYgQ09NUEFUX0ZPUl9VNjRfQUxJR05NRU5UIFx1MDAyNlx1MDAyNiBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxNToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzAzNwoJCQkJCQkJb3V0cHV0OiAxOTcKCQkJCQkJCXRob3VnaHRzOiA0NzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgWEZSTSBDb25maWd1cmF0aW9uIGFuZCBGdW5jdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBYRlJNIGNvZGUuIEl0IGxvb2tzIGxpa2UgdGhlIGtleSBjb25maWd1cmF0aW9ucyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIGFyZSBgWEZSTV9VU0VSYCBhbmQgYFhGUk1fTUlHUkFURWAuIEkmIzM5O20gc3RhcnRpbmcgYnkgbG9va2luZyBhdCBgbmV0L2lwdjYveGZybTZfaW5wdXQuY2AsIGFuZCwgYXMgZXhwZWN0ZWQsIGl0IHJlcXVpcmVzIGBJUFY2YC4KCkkmIzM5O20gZ29pbmcgdG8gZG9jdW1lbnQgdGhlIGNvbmZpZ3VyYXRpb25zIEkmIzM5O3ZlIGlkZW50aWZpZWQ6CgoqICAgYFhGUk1fVVNFUmAKKiAgIGBYRlJNX01JR1JBVEVgCiogICBgSVBWNmAKCk5vdywgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBmdW5jdGlvbnMuIEkgbmVlZCB0byBmb2N1cyBvbiB0aGVzZSBzeW1ib2xzOgoKKiAgIGB4ZnJtX3N0YXRlX2xvb2t1cF9leGFjdGAKKiAgIGB4ZnJtX3N0YXRlX2xvb2t1cF9ieWFkZHJgCiogICBgeGZybV91c2VyX3N0YXRlX2xvb2t1cGAKKiAgIGB4ZnJtX2dldF9hZWAKKiAgIGB4ZnJtX25ld19hZWAKKiAgIGB4ZnJtX2FkZF9zYV9leHBpcmVgCiogICBgeGZybV9kb19taWdyYXRlX3N0YXRlYAoqICAgYHhmcm1fc3RhdGVfdXBkYXRlYAoqICAgYHhmcm1fc3RhdGVfbWlncmF0ZV9pbnN0YWxsYAoKSSYjMzk7bSBnb2luZyB0byBkb3VibGUtY2hlY2sgdGhhdCBgeGZybV9zdGF0ZV9sb29rdXBfZXhhY3RgIGlzIGV4cG9ydGVkIGFuZCBhY2Nlc3NpYmxlLiBBaCwgeWVwLCBpdCYjMzk7cyBjYWxsZWQgZnJvbSBgeGZybV91c2VyLmNgLCBzbyB0aGF0JiMzOTtzIGdvb2QuIEFuZCBgeGZybV9zdGF0ZV9sb29rdXBfYnlhZGRyYC4uLiB5ZXMsIGl0JiMzOTtzIHVzZWQgaW4gYm90aCBgeGZybV91c2VyLmNgIGFuZCBgeGZybTZfaW5wdXQuY2AuCgpMZXQgbWUgc2VlIGlmIGFueSBvdGhlciBmdW5jdGlvbnMgaGF2ZSBiZWVuIG1vZGlmaWVkIG9yIGFyZSByZWxldmFudC4gT2theSwgSSBzZWUgYSBoYW5kZnVsIG9mIHN0YXRpYyBmdW5jdGlvbnMsIGxldCYjMzk7cyB0YWtlIGEgbG9vazoKCiogICBgeGZybV9zdGF0ZV9tYXJrX21hdGNoZXNgIChzdGF0aWMpCiogICBgX194ZnJtX3N0YXRlX2xvb2t1cGAgKHN0YXRpYykKKiAgIGBfX3hmcm1fc3RhdGVfbG9va3VwX2V4YWN0YCAoc3RhdGljKQoqICAgYF9feGZybV9zdGF0ZV9sb29rdXBfYnlhZGRyYCAoc3RhdGljKQoqICAgYF9feGZybV9zdGF0ZV9sb2NhdGVgIChzdGF0aWMpCiogICBgX194ZnJtX3N0YXRlX2xvY2F0ZV9leGFjdGAgKHN0YXRpYykKCkkmIzM5O20gZ29pbmcgdG8gaW5jbHVkZSB0aGUgZXhwb3J0ZWQgYW5kIG5vbi1zdGF0aWMgZnVuY3Rpb25zLCBhcyB3ZWxsIGFzIHRoZSBpbXBvcnRhbnQgc3RhdGljIG9uZXMsIEkgY2FuIGFsd2F5cyBjb21lIGJhY2sgdG8gaXQuCgpUaGUgZmluYWwgbGlzdCB3aWxsIGJlOgoKKiAgIGB4ZnJtX3N0YXRlX2xvb2t1cF9leGFjdGAKKiAgIGB4ZnJtX3N0YXRlX2xvb2t1cF9ieWFkZHJgCiogICBgeGZybV91c2VyX3N0YXRlX2xvb2t1cGAKKiAgIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgCiogICBgeGZybV9zdGF0ZV91cGRhdGVgCiogICBgeGZybV9zdGF0ZV9taWdyYXRlX2luc3RhbGxgCiogICBgeGZybV9nZXRfYWVgCiogICBgeGZybV9uZXdfYWVgCiogICBgeGZybV9hZGRfc2FfZXhwaXJlYAoKTm93LCB0aW1lIHRvIGNhbGwgc2V0LXJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDE1OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtYRlJNX1VTRVImIzM0OywKICAgICYjMzQ7WEZSTV9NSUdSQVRFJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt4ZnJtX3N0YXRlX2xvb2t1cF9leGFjdCYjMzQ7LAogICAgJiMzNDt4ZnJtX3N0YXRlX2xvb2t1cF9ieWFkZHImIzM0OywKICAgICYjMzQ7eGZybV91c2VyX3N0YXRlX2xvb2t1cCYjMzQ7LAogICAgJiMzNDt4ZnJtX2RvX21pZ3JhdGVfc3RhdGUmIzM0OywKICAgICYjMzQ7eGZybV9zdGF0ZV91cGRhdGUmIzM0OywKICAgICYjMzQ7eGZybV9zdGF0ZV9taWdyYXRlX2luc3RhbGwmIzM0OywKICAgICYjMzQ7eGZybV9nZXRfYWUmIzM0OywKICAgICYjMzQ7eGZybV9uZXdfYWUmIzM0OywKICAgICYjMzQ7eGZybV9hZGRfc2FfZXhwaXJlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBYRlJNIChJUHNlYykgc3RhdGUgbG9va3VwIGxvZ2ljIHRvIGFsbG93IGV4YWN0IG1hdGNoaW5nIG9mIG1hcmtzIGFuZCBtYXNrcyBkdXJpbmcgY29udHJvbCBwbGFuZSBvcGVyYXRpb25zIChHRVQsIERFTEVURSwgTUlHUkFURSkuIFRoaXMgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgbmV0bGluayBtZXNzYWdlcyBhbmQgYWZmZWN0cyBjb3JlIElQc2VjIGZ1bmN0aW9uYWxpdHkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hGUk1fVVNFUiYjMzQ7LAogICAgJiMzNDtYRlJNX01JR1JBVEUmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3hmcm1fc3RhdGVfbG9va3VwX2V4YWN0JiMzNDssCiAgICAmIzM0O3hmcm1fc3RhdGVfbG9va3VwX2J5YWRkciYjMzQ7LAogICAgJiMzNDt4ZnJtX3VzZXJfc3RhdGVfbG9va3VwJiMzNDssCiAgICAmIzM0O3hmcm1fZG9fbWlncmF0ZV9zdGF0ZSYjMzQ7LAogICAgJiMzNDt4ZnJtX3N0YXRlX3VwZGF0ZSYjMzQ7LAogICAgJiMzNDt4ZnJtX3N0YXRlX21pZ3JhdGVfaW5zdGFsbCYjMzQ7LAogICAgJiMzNDt4ZnJtX2dldF9hZSYjMzQ7LAogICAgJiMzNDt4ZnJtX25ld19hZSYjMzQ7LAogICAgJiMzNDt4ZnJtX2FkZF9zYV9leHBpcmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFhGUk0gKElQc2VjKSBzdGF0ZSBsb29rdXAgbG9naWMgdG8gYWxsb3cgZXhhY3QgbWF0Y2hpbmcgb2YgbWFya3MgYW5kIG1hc2tzIGR1cmluZyBjb250cm9sIHBsYW5lIG9wZXJhdGlvbnMgKEdFVCwgREVMRVRFLCBNSUdSQVRFKS4gVGhpcyBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBuZXRsaW5rIG1lc3NhZ2VzIGFuZCBhZmZlY3RzIGNvcmUgSVBzZWMgZnVuY3Rpb25hbGl0eS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE1OjE1OjI2LjY1NDEzMDYzNFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5MDQzNzc2MjI3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJYRlJNX1VTRVJcIixcbiAgICBcIlhGUk1fTUlHUkFURVwiLFxuICAgIFwiSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInhmcm1fc3RhdGVfbG9va3VwX2V4YWN0XCIsXG4gICAgXCJ4ZnJtX3N0YXRlX2xvb2t1cF9ieWFkZHJcIixcbiAgICBcInhmcm1fdXNlcl9zdGF0ZV9sb29rdXBcIixcbiAgICBcInhmcm1fZG9fbWlncmF0ZV9zdGF0ZVwiLFxuICAgIFwieGZybV9zdGF0ZV91cGRhdGVcIixcbiAgICBcInhmcm1fc3RhdGVfbWlncmF0ZV9pbnN0YWxsXCIsXG4gICAgXCJ4ZnJtX2dldF9hZVwiLFxuICAgIFwieGZybV9uZXdfYWVcIixcbiAgICBcInhmcm1fYWRkX3NhX2V4cGlyZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBYRlJNIChJUHNlYykgc3RhdGUgbG9va3VwIGxvZ2ljIHRvIGFsbG93IGV4YWN0IG1hdGNoaW5nIG9mIG1hcmtzIGFuZCBtYXNrcyBkdXJpbmcgY29udHJvbCBwbGFuZSBvcGVyYXRpb25zIChHRVQsIERFTEVURSwgTUlHUkFURSkuIFRoaXMgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgbmV0bGluayBtZXNzYWdlcyBhbmQgYWZmZWN0cyBjb3JlIElQc2VjIGZ1bmN0aW9uYWxpdHkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE1OjE1OjI2LjY1NDEzNzY2NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTE5MTA1ODkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNjgzMDU5MTFlNWFiZDZlNTVkZDgwMmQzMDUwNzEwOWZjYTI1M2Q0MlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1bCA2IDE1OjE1OjI0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy94ZnJtL3hmcm1fbWlncmF0ZV9zdGF0ZS5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcveGZybS94ZnJtX21pZ3JhdGVfc3RhdGUucnN0XFxuaW5kZXggOWQ1M2NiMjJiMDA3NTIuLjkwNWUzZjBjNGVlMDZmIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy94ZnJtL3hmcm1fbWlncmF0ZV9zdGF0ZS5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcveGZybS94ZnJtX21pZ3JhdGVfc3RhdGUucnN0XFxuQEAgLTI3LDE1ICsyNywxOCBAQCBTQSBJZGVudGlmaWNhdGlvblxcbiA9PT09PT09PT09PT09PT09PVxcbiBcXG4gVGhlIHN0cnVjdCBpcyBkZWZpbmVkIGluIGBgaW5jbHVkZS91YXBpL2xpbnV4L3hmcm0uaGBgLiBUaGUgU0EgaXMgbG9va2VkXFxuLXVwIHVzaW5nIGBgeGZybV9zdGF0ZV9sb29rdXAoKWBgIHdpdGggYGBpZC5zcGlgYCxcXG4tYGBpZC5kYWRkcmBgLCBgYGlkLnByb3RvYGAsIGBgaWQuZmFtaWx5YGAsIGFuZFxcbi1gYG9sZF9tYXJrLnYgXFx1MDAyNiBvbGRfbWFyay5tYGAgYXMgdGhlIG1hcmsga2V5OjpcXG4rdXAgdXNpbmcgYGB4ZnJtX3N0YXRlX2xvb2t1cF9leGFjdCgpYGAgd2l0aCBgYGlkLnNwaWBgLCBgYGlkLmRhZGRyYGAsXFxuK2BgaWQucHJvdG9gYCwgYGBpZC5mYW1pbHlgYCwgYW5kIGFuIGV4YWN0IG1hdGNoIGFnYWluc3QgYGBvbGRfbWFyay52YGBcXG4rYW5kIGBgb2xkX21hcmsubWBgLiBVbmxpa2UgdGhlIGRhdGEgcGF0aCwgd2hpY2ggdXNlcyBhIG1hc2tlZFxcbitjb21wYXJpc29uLCB0aGlzIHJlcXVpcmVzIHRoZSBTQSdzIG1hcmsgYW5kIG1hc2sgdG8gZXF1YWwgYGBvbGRfbWFya2BgXFxuK2V4YWN0bHksIHNvIGEgYnJvYWQtbWFzayBTQSBpcyBuZXZlciBtYXRjaGVkIHdoZW4gYSBtb3JlIHNwZWNpZmljIG9uZVxcbit3YXMgaW50ZW5kZWQuIElmIG5vIHN1Y2ggU0EgZXhpc3RzLCBgYC1FU1JDSGBgIGlzIHJldHVybmVkLjo6XFxuIFxcbiAgICAgc3RydWN0IHhmcm1fdXNlcl9taWdyYXRlX3N0YXRlIHtcXG4gICAgICAgICBzdHJ1Y3QgeGZybV91c2Vyc2FfaWQgIGlkOyAgICAgICAvKiBzcGksIGRhZGRyLCBwcm90bywgZmFtaWx5ICovXFxuICAgICAgICAgeGZybV9hZGRyZXNzX3QgICAgICAgICBuZXdfZGFkZHI7XFxuICAgICAgICAgeGZybV9hZGRyZXNzX3QgICAgICAgICBuZXdfc2FkZHI7XFxuLSAgICAgICAgc3RydWN0IHhmcm1fbWFyayAgICAgICBvbGRfbWFyazsgLyogU0EgbG9va3VwOiBrZXkgPSB2IFxcdTAwMjYgbSAqL1xcbisgICAgICAgIHN0cnVjdCB4ZnJtX21hcmsgICAgICAgb2xkX21hcms7IC8qIFNBIGxvb2t1cCBrZXkgKGV4YWN0IHYvbSBtYXRjaCkgKi9cXG4gICAgICAgICBzdHJ1Y3QgeGZybV9zZWxlY3RvciAgIG5ld19zZWw7ICAvKiBuZXcgc2VsZWN0b3IgKHNlZSBGbGFncykgKi9cXG4gICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICAgIG5ld19yZXFpZDtcXG4gICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICAgIGZsYWdzOyAgICAvKiBYRlJNX01JR1JBVEVfU1RBVEVfKiAqL1xcbkBAIC03Miw4ICs3NSw4IEBAIGluaGVyaXRzIHRoZSB2YWx1ZSBmcm9tIHRoZSBleGlzdGluZyBTQSAob21pdC10by1pbmhlcml0KS5cXG4gICAgICAtIERlc2NyaXB0aW9uXFxuICAgICogLSBgYFhGUk1BX01BUktgYFxcbiAgICAgIC0gTWFyayBvbiB0aGUgbWlncmF0ZWQgU0EgKGBgc3RydWN0IHhmcm1fbWFya2BgKS4gQWJzZW50IGluaGVyaXRzXFxuLSAgICAgICBgYG9sZF9tYXJrYGAuIFRvIHVzZSBubyBtYXJrIG9uIHRoZSBuZXcgU0EsIHNlbmQgYGBYRlJNQV9NQVJLYGBcXG4tICAgICAgIHdpdGggYGB7MCwgMH1gYC5cXG4rICAgICAgIHRoZSBtYXJrIG9mIHRoZSBleGlzdGluZyBTQS4gVG8gdXNlIG5vIG1hcmsgb24gdGhlIG5ldyBTQSwgc2VuZFxcbisgICAgICAgYGBYRlJNQV9NQVJLYGAgd2l0aCBgYHswLCAwfWBgLlxcbiAgICAqIC0gYGBYRlJNQV9FTkNBUGBgXFxuICAgICAgLSBVRFAgZW5jYXBzdWxhdGlvbiB0ZW1wbGF0ZTsgb25seSBgYFVEUF9FTkNBUF9FU1BJTlVEUGBgIGlzIHN1cHBvcnRlZC5cXG4gICAgICAgIFNldCBgYGVuY2FwX3R5cGU9MGBgIHRvIHJlbW92ZSBlbmNhcC5cXG5AQCAtMjU5LDggKzI2Miw5IEBAIEF0dHJpYnV0ZXMgaW4gdGhlIG5vdGlmaWNhdGlvblxcbiBFcnJvciBIYW5kbGluZ1xcbiA9PT09PT09PT09PT09PVxcbiBcXG4tSWYgdGhlIHRhcmdldCBTQSB0dXBsZSAobmV3IGRhZGRyLCBTUEksIHByb3RvLCBuZXcgZmFtaWx5KSBpcyBhbHJlYWR5XFxuLW9jY3VwaWVkLCB0aGUgb3BlcmF0aW9uIHJldHVybnMgYGAtRUVYSVNUYGAgYmVmb3JlIHRoZSBtaWdyYXRpb24gYmVnaW5zLlxcbitJZiB0aGUgdGFyZ2V0IFNBIHR1cGxlIChuZXcgZGFkZHIsIFNQSSwgcHJvdG8sIG5ldyBmYW1pbHksIG1hcmspIGlzXFxuK2FscmVhZHkgb2NjdXBpZWQsIHRoZSBvcGVyYXRpb24gcmV0dXJucyBgYC1FRVhJU1RgYCBiZWZvcmUgdGhlIG1pZ3JhdGlvblxcbitiZWdpbnMuXFxuIFRoZSBvbGQgU0EgcmVtYWlucyBpbnRhY3QgYW5kIHRoZSBvcGVyYXRpb24gaXMgc2FmZSB0byByZXRyeSBhZnRlclxcbiByZXNvbHZpbmcgdGhlIGNvbmZsaWN0LlxcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQveGZybS5oIGIvaW5jbHVkZS9uZXQveGZybS5oXFxuaW5kZXggNTE5YTAxNTZhMDVjYWMuLmViZTUxNDM3NjI1NGE2IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L3hmcm0uaFxcbisrKyBiL2luY2x1ZGUvbmV0L3hmcm0uaFxcbkBAIC0xNzQxLDExICsxNzQxLDE0IEBAIHN0cnVjdCB4ZnJtX3N0YXRlICp4ZnJtX2lucHV0X3N0YXRlX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBtYXJrLFxcbiBcXHRcXHRcXHRcXHRcXHQgICBjb25zdCB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsXFxuIFxcdFxcdFxcdFxcdFxcdCAgIF9fYmUzMiBzcGksIHU4IHByb3RvLFxcbiBcXHRcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBzaG9ydCBmYW1pbHkpO1xcbi1zdHJ1Y3QgeGZybV9zdGF0ZSAqeGZybV9zdGF0ZV9sb29rdXBfYnlhZGRyKHN0cnVjdCBuZXQgKm5ldCwgdTMyIG1hcmssXFxuK3N0cnVjdCB4ZnJtX3N0YXRlICp4ZnJtX3N0YXRlX2xvb2t1cF9ieWFkZHIoc3RydWN0IG5ldCAqbmV0LCB1MzIgbWFyaywgdTMyIG1hc2ssIGJvb2wgZXhhY3QsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBjb25zdCB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBjb25zdCB4ZnJtX2FkZHJlc3NfdCAqc2FkZHIsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICB1OCBwcm90byxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIHNob3J0IGZhbWlseSk7XFxuK3N0cnVjdCB4ZnJtX3N0YXRlICp4ZnJtX3N0YXRlX2xvb2t1cF9leGFjdChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCB4ZnJtX21hcmsgKm1hcmssXFxuK1xcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IHhmcm1fYWRkcmVzc190ICpkYWRkciwgX19iZTMyIHNwaSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgdTggcHJvdG8sIHVuc2lnbmVkIHNob3J0IGZhbWlseSk7XFxuICNpZmRlZiBDT05GSUdfWEZSTV9TVUJfUE9MSUNZXFxuIHZvaWQgeGZybV90bXBsX3NvcnQoc3RydWN0IHhmcm1fdG1wbCAqKmRzdCwgc3RydWN0IHhmcm1fdG1wbCAqKnNyYywgaW50IG4sXFxuIFxcdFxcdCAgICB1bnNpZ25lZCBzaG9ydCBmYW1pbHkpO1xcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni94ZnJtNl9pbnB1dC5jIGIvbmV0L2lwdjYveGZybTZfaW5wdXQuY1xcbmluZGV4IDg5ZDA0NDNiNTMwNzMyLi4yZGQzNDdmZWNlNTJjYSAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2Ni94ZnJtNl9pbnB1dC5jXFxuKysrIGIvbmV0L2lwdjYveGZybTZfaW5wdXQuY1xcbkBAIC0yNzIsNyArMjcyLDcgQEAgaW50IHhmcm02X2lucHV0X2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgeGZybV9hZGRyZXNzX3QgKmRhZGRyLFxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0eCA9IHhmcm1fc3RhdGVfbG9va3VwX2J5YWRkcihuZXQsIHNrYi1cXHUwMDNlbWFyaywgZHN0LCBzcmMsIHByb3RvLCBBRl9JTkVUNik7XFxuK1xcdFxcdHggPSB4ZnJtX3N0YXRlX2xvb2t1cF9ieWFkZHIobmV0LCBza2ItXFx1MDAzZW1hcmssIDAsIGZhbHNlLCBkc3QsIHNyYywgcHJvdG8sIEFGX0lORVQ2KTtcXG4gXFx0XFx0aWYgKCF4KVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fc3RhdGUuYyBiL25ldC94ZnJtL3hmcm1fc3RhdGUuY1xcbmluZGV4IGM1OGNkMDI0ZTNjNjc1Li4wYjNkYzc3ODlkZDc5MCAxMDA2NDRcXG4tLS0gYS9uZXQveGZybS94ZnJtX3N0YXRlLmNcXG4rKysgYi9uZXQveGZybS94ZnJtX3N0YXRlLmNcXG5AQCAtMTE3MiwxMSArMTE3MiwyMiBAQCBzdGF0aWMgc3RydWN0IHhmcm1fc3RhdGUgKl9feGZybV9zdGF0ZV9sb29rdXBfYWxsKGNvbnN0IHN0cnVjdCB4ZnJtX2hhc2hfc3RhdGVfcFxcbiBcXHRyZXR1cm4gTlVMTDtcXG4gfVxcbiBcXG4tc3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlICpfX3hmcm1fc3RhdGVfbG9va3VwKGNvbnN0IHN0cnVjdCB4ZnJtX2hhc2hfc3RhdGVfcHRycyAqc3RhdGVfcHRycyxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICAgdTMyIG1hcmssXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHhmcm1fYWRkcmVzc190ICpkYWRkcixcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICAgX19iZTMyIHNwaSwgdTggcHJvdG8sXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIHNob3J0IGZhbWlseSlcXG4rLyogZXhhY3Q9ZmFsc2U6IGRhdGEtcGxhbmUgd2lsZGNhcmQgbWF0Y2ggYWdhaW5zdCB4J3MgbWFzay4gZXhhY3Q9dHJ1ZTpcXG4rICogY29udHJvbC1wbGFuZSBpZGVudGl0eSBtYXRjaCwgbWFyayBhbmQgbWFzayBtdXN0IGJvdGggbWF0Y2ggZXhhY3RseS5cXG4rICovXFxuK3N0YXRpYyBib29sIHhmcm1fc3RhdGVfbWFya19tYXRjaGVzKGNvbnN0IHN0cnVjdCB4ZnJtX3N0YXRlICp4LCB1MzIgbWFyaywgdTMyIG1hc2ssIGJvb2wgZXhhY3QpXFxuK3tcXG4rXFx0aWYgKGV4YWN0KVxcbitcXHRcXHRyZXR1cm4geC1cXHUwMDNlbWFyay52ID09IG1hcmsgXFx1MDAyNlxcdTAwMjYgeC1cXHUwMDNlbWFyay5tID09IG1hc2s7XFxuK1xcdHJldHVybiAobWFyayBcXHUwMDI2IHgtXFx1MDAzZW1hcmsubSkgPT0geC1cXHUwMDNlbWFyay52O1xcbit9XFxuK1xcbitzdGF0aWMgc3RydWN0IHhmcm1fc3RhdGUgKlxcbitfX3hmcm1fc3RhdGVfbG9va3VwKGNvbnN0IHN0cnVjdCB4ZnJtX2hhc2hfc3RhdGVfcHRycyAqc3RhdGVfcHRycyxcXG4rXFx0XFx0ICAgIHUzMiBtYXJrLCB1MzIgbWFzaywgYm9vbCBleGFjdCxcXG4rXFx0XFx0ICAgIGNvbnN0IHhmcm1fYWRkcmVzc190ICpkYWRkcixcXG4rXFx0XFx0ICAgIF9fYmUzMiBzcGksIHU4IHByb3RvLFxcbitcXHRcXHQgICAgdW5zaWduZWQgc2hvcnQgZmFtaWx5KVxcbiB7XFxuIFxcdHVuc2lnbmVkIGludCBoID0gX194ZnJtX3NwaV9oYXNoKGRhZGRyLCBzcGksIHByb3RvLCBmYW1pbHksIHN0YXRlX3B0cnMtXFx1MDAzZWhtYXNrKTtcXG4gXFx0c3RydWN0IHhmcm1fc3RhdGUgKng7XFxuQEAgLTExODgsNyArMTE5OSw3IEBAIHN0YXRpYyBzdHJ1Y3QgeGZybV9zdGF0ZSAqX194ZnJtX3N0YXRlX2xvb2t1cChjb25zdCBzdHJ1Y3QgeGZybV9oYXNoX3N0YXRlX3B0cnNcXG4gXFx0XFx0ICAgICF4ZnJtX2FkZHJfZXF1YWwoXFx1MDAyNngtXFx1MDAzZWlkLmRhZGRyLCBkYWRkciwgZmFtaWx5KSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbi1cXHRcXHRpZiAoKG1hcmsgXFx1MDAyNiB4LVxcdTAwM2VtYXJrLm0pICE9IHgtXFx1MDAzZW1hcmsudilcXG4rXFx0XFx0aWYgKCF4ZnJtX3N0YXRlX21hcmtfbWF0Y2hlcyh4LCBtYXJrLCBtYXNrLCBleGFjdCkpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRpZiAoIXhmcm1fc3RhdGVfaG9sZF9yY3UoeCkpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbkBAIC0xMTk4LDYgKzEyMDksMTcgQEAgc3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlICpfX3hmcm1fc3RhdGVfbG9va3VwKGNvbnN0IHN0cnVjdCB4ZnJtX2hhc2hfc3RhdGVfcHRyc1xcbiBcXHRyZXR1cm4gTlVMTDtcXG4gfVxcbiBcXG4rc3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlICpcXG4rX194ZnJtX3N0YXRlX2xvb2t1cF9leGFjdChjb25zdCBzdHJ1Y3QgeGZybV9oYXNoX3N0YXRlX3B0cnMgKnN0YXRlX3B0cnMsXFxuK1xcdFxcdFxcdCAgY29uc3Qgc3RydWN0IHhmcm1fbWFyayAqbWFyayxcXG4rXFx0XFx0XFx0ICBjb25zdCB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsXFxuK1xcdFxcdFxcdCAgX19iZTMyIHNwaSwgdTggcHJvdG8sXFxuK1xcdFxcdFxcdCAgdW5zaWduZWQgc2hvcnQgZmFtaWx5KVxcbit7XFxuK1xcdHJldHVybiBfX3hmcm1fc3RhdGVfbG9va3VwKHN0YXRlX3B0cnMsIG1hcmstXFx1MDAzZXYsIG1hcmstXFx1MDAzZW0sIHRydWUsXFxuK1xcdFxcdFxcdFxcdCAgIGRhZGRyLCBzcGksIHByb3RvLCBmYW1pbHkpO1xcbit9XFxuK1xcbiBzdHJ1Y3QgeGZybV9zdGF0ZSAqeGZybV9pbnB1dF9zdGF0ZV9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCB1MzIgbWFyayxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgY29uc3QgeGZybV9hZGRyZXNzX3QgKmRhZGRyLFxcbiBcXHRcXHRcXHRcXHRcXHQgICBfX2JlMzIgc3BpLCB1OCBwcm90byxcXG5AQCAtMTIyOCw3ICsxMjUwLDcgQEAgc3RydWN0IHhmcm1fc3RhdGUgKnhmcm1faW5wdXRfc3RhdGVfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgdTMyIG1hcmssXFxuIFxcbiBcXHR4ZnJtX2hhc2hfcHRyc19nZXQobmV0LCBcXHUwMDI2c3RhdGVfcHRycyk7XFxuIFxcbi1cXHR4ID0gX194ZnJtX3N0YXRlX2xvb2t1cChcXHUwMDI2c3RhdGVfcHRycywgbWFyaywgZGFkZHIsIHNwaSwgcHJvdG8sIGZhbWlseSk7XFxuK1xcdHggPSBfX3hmcm1fc3RhdGVfbG9va3VwKFxcdTAwMjZzdGF0ZV9wdHJzLCBtYXJrLCAwLCBmYWxzZSwgZGFkZHIsIHNwaSwgcHJvdG8sIGZhbWlseSk7XFxuIFxcdGlmICh4KSB7XFxuIFxcdFxcdHNwaW5fbG9jayhcXHUwMDI2bmV0LVxcdTAwM2V4ZnJtLnhmcm1fc3RhdGVfbG9jayk7XFxuIFxcdFxcdGlmICh4LVxcdTAwM2VrbS5zdGF0ZSAhPSBYRlJNX1NUQVRFX1ZBTElEKSB7XFxuQEAgLTEyNTIsMTEgKzEyNzQsMTIgQEAgc3RydWN0IHhmcm1fc3RhdGUgKnhmcm1faW5wdXRfc3RhdGVfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgdTMyIG1hcmssXFxuIH1cXG4gRVhQT1JUX1NZTUJPTCh4ZnJtX2lucHV0X3N0YXRlX2xvb2t1cCk7XFxuIFxcbi1zdGF0aWMgc3RydWN0IHhmcm1fc3RhdGUgKl9feGZybV9zdGF0ZV9sb29rdXBfYnlhZGRyKGNvbnN0IHN0cnVjdCB4ZnJtX2hhc2hfc3RhdGVfcHRycyAqc3RhdGVfcHRycyxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgICB1MzIgbWFyayxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBjb25zdCB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgY29uc3QgeGZybV9hZGRyZXNzX3QgKnNhZGRyLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIHU4IHByb3RvLCB1bnNpZ25lZCBzaG9ydCBmYW1pbHkpXFxuK3N0YXRpYyBzdHJ1Y3QgeGZybV9zdGF0ZSAqXFxuK19feGZybV9zdGF0ZV9sb29rdXBfYnlhZGRyKGNvbnN0IHN0cnVjdCB4ZnJtX2hhc2hfc3RhdGVfcHRycyAqc3RhdGVfcHRycyxcXG4rXFx0XFx0XFx0ICAgdTMyIG1hcmssIHUzMiBtYXNrLCBib29sIGV4YWN0LFxcbitcXHRcXHRcXHQgICBjb25zdCB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsXFxuK1xcdFxcdFxcdCAgIGNvbnN0IHhmcm1fYWRkcmVzc190ICpzYWRkcixcXG4rXFx0XFx0XFx0ICAgdTggcHJvdG8sIHVuc2lnbmVkIHNob3J0IGZhbWlseSlcXG4ge1xcbiBcXHR1bnNpZ25lZCBpbnQgaCA9IF9feGZybV9zcmNfaGFzaChkYWRkciwgc2FkZHIsIGZhbWlseSwgc3RhdGVfcHRycy1cXHUwMDNlaG1hc2spO1xcbiBcXHRzdHJ1Y3QgeGZybV9zdGF0ZSAqeDtcXG5AQCAtMTI2OCw3ICsxMjkxLDcgQEAgc3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlICpfX3hmcm1fc3RhdGVfbG9va3VwX2J5YWRkcihjb25zdCBzdHJ1Y3QgeGZybV9oYXNoX3N0YXRcXG4gXFx0XFx0ICAgICF4ZnJtX2FkZHJfZXF1YWwoXFx1MDAyNngtXFx1MDAzZXByb3BzLnNhZGRyLCBzYWRkciwgZmFtaWx5KSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbi1cXHRcXHRpZiAoKG1hcmsgXFx1MDAyNiB4LVxcdTAwM2VtYXJrLm0pICE9IHgtXFx1MDAzZW1hcmsudilcXG4rXFx0XFx0aWYgKCF4ZnJtX3N0YXRlX21hcmtfbWF0Y2hlcyh4LCBtYXJrLCBtYXNrLCBleGFjdCkpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRpZiAoIXhmcm1fc3RhdGVfaG9sZF9yY3UoeCkpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbkBAIC0xMjg4LDEwICsxMzExLDMxIEBAIF9feGZybV9zdGF0ZV9sb2NhdGUoc3RydWN0IHhmcm1fc3RhdGUgKngsIGludCB1c2Vfc3BpLCBpbnQgZmFtaWx5KVxcbiBcXHR4ZnJtX2hhc2hfcHRyc19nZXQobmV0LCBcXHUwMDI2c3RhdGVfcHRycyk7XFxuIFxcbiBcXHRpZiAodXNlX3NwaSlcXG4tXFx0XFx0cmV0dXJuIF9feGZybV9zdGF0ZV9sb29rdXAoXFx1MDAyNnN0YXRlX3B0cnMsIG1hcmssIFxcdTAwMjZ4LVxcdTAwM2VpZC5kYWRkcixcXG4rXFx0XFx0cmV0dXJuIF9feGZybV9zdGF0ZV9sb29rdXAoXFx1MDAyNnN0YXRlX3B0cnMsIG1hcmssIDAsIGZhbHNlLCBcXHUwMDI2eC1cXHUwMDNlaWQuZGFkZHIsXFxuIFxcdFxcdFxcdFxcdFxcdCAgIHgtXFx1MDAzZWlkLnNwaSwgeC1cXHUwMDNlaWQucHJvdG8sIGZhbWlseSk7XFxuIFxcdGVsc2VcXG4tXFx0XFx0cmV0dXJuIF9feGZybV9zdGF0ZV9sb29rdXBfYnlhZGRyKFxcdTAwMjZzdGF0ZV9wdHJzLCBtYXJrLFxcbitcXHRcXHRyZXR1cm4gX194ZnJtX3N0YXRlX2xvb2t1cF9ieWFkZHIoXFx1MDAyNnN0YXRlX3B0cnMsIG1hcmssIDAsIGZhbHNlLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZ4LVxcdTAwM2VpZC5kYWRkcixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2eC1cXHUwMDNlcHJvcHMuc2FkZHIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgeC1cXHUwMDNlaWQucHJvdG8sIGZhbWlseSk7XFxuK31cXG4rXFxuKy8qIFVzZWQgYnkgeGZybV9zdGF0ZV91cGRhdGUoKSBvbmx5OyB4ZnJtX3N0YXRlX2FkZCgpJ3MgZHVwIGNoZWNrIGtlZXBzXFxuKyAqIHVzaW5nIHRoZSB3aWxkY2FyZCBfX3hmcm1fc3RhdGVfbG9jYXRlKCkgYWJvdmUuXFxuKyAqL1xcbitzdGF0aWMgaW5saW5lIHN0cnVjdCB4ZnJtX3N0YXRlICpcXG4rX194ZnJtX3N0YXRlX2xvY2F0ZV9leGFjdChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgaW50IHVzZV9zcGksIGludCBmYW1pbHkpXFxuK3tcXG4rXFx0c3RydWN0IHhmcm1faGFzaF9zdGF0ZV9wdHJzIHN0YXRlX3B0cnM7XFxuK1xcdHN0cnVjdCBuZXQgKm5ldCA9IHhzX25ldCh4KTtcXG4rXFxuK1xcdHhmcm1faGFzaF9wdHJzX2dldChuZXQsIFxcdTAwMjZzdGF0ZV9wdHJzKTtcXG4rXFxuK1xcdGlmICh1c2Vfc3BpKVxcbitcXHRcXHRyZXR1cm4gX194ZnJtX3N0YXRlX2xvb2t1cF9leGFjdChcXHUwMDI2c3RhdGVfcHRycywgXFx1MDAyNngtXFx1MDAzZW1hcmssIFxcdTAwMjZ4LVxcdTAwM2VpZC5kYWRkcixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IHgtXFx1MDAzZWlkLnNwaSwgeC1cXHUwMDNlaWQucHJvdG8sIGZhbWlseSk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0cmV0dXJuIF9feGZybV9zdGF0ZV9sb29rdXBfYnlhZGRyKFxcdTAwMjZzdGF0ZV9wdHJzLCB4LVxcdTAwM2VtYXJrLnYsIHgtXFx1MDAzZW1hcmsubSwgdHJ1ZSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2eC1cXHUwMDNlaWQuZGFkZHIsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNngtXFx1MDAzZXByb3BzLnNhZGRyLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgIHgtXFx1MDAzZWlkLnByb3RvLCBmYW1pbHkpO1xcbkBAIC0yMTc3LDEwICsyMjIxLDEyIEBAIGludCB4ZnJtX3N0YXRlX21pZ3JhdGVfaW5zdGFsbChjb25zdCBzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcXG4gXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4ge1xcbiBcXHRpZiAobS1cXHUwMDNlbmV3X2ZhbWlseSA9PSBtLVxcdTAwM2VvbGRfZmFtaWx5IFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICB4ZnJtX2FkZHJfZXF1YWwoXFx1MDAyNngtXFx1MDAzZWlkLmRhZGRyLCBcXHUwMDI2bS1cXHUwMDNlbmV3X2RhZGRyLCBtLVxcdTAwM2VuZXdfZmFtaWx5KSkge1xcbitcXHQgICAgeGZybV9hZGRyX2VxdWFsKFxcdTAwMjZ4LVxcdTAwM2VpZC5kYWRkciwgXFx1MDAyNm0tXFx1MDAzZW5ld19kYWRkciwgbS1cXHUwMDNlbmV3X2ZhbWlseSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIHhjLVxcdTAwM2VtYXJrLnYgPT0geC1cXHUwMDNlbWFyay52IFxcdTAwMjZcXHUwMDI2IHhjLVxcdTAwM2VtYXJrLm0gPT0geC1cXHUwMDNlbWFyay5tKSB7XFxuIFxcdFxcdC8qXFxuLVxcdFxcdCAqIENhcmUgaXMgbmVlZGVkIHdoZW4gdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3Mgb2YgdGhlIHN0YXRlIGlzXFxuLVxcdFxcdCAqIHRvIGJlIHVwZGF0ZWQgYXMgaXQgaXMgYSBwYXJ0IG9mIHRyaXBsZXQuXFxuK1xcdFxcdCAqIENhcmUgaXMgbmVlZGVkIHdoZW4gdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3Mgb3IgbWFyayBvZiB0aGVcXG4rXFx0XFx0ICogc3RhdGUgaXMgdG8gYmUgdXBkYXRlZCwgYXMgdGhleSBhcmUgcGFydCBvZiB0aGUgbG9va3VwXFxuK1xcdFxcdCAqIHRyaXBsZXQuXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHR4ZnJtX3N0YXRlX2luc2VydCh4Yyk7XFxuIFxcdH0gZWxzZSB7XFxuQEAgLTIyMjksNyArMjI3NSw3IEBAIGludCB4ZnJtX3N0YXRlX3VwZGF0ZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcXG4gXFx0dG9fcHV0ID0gTlVMTDtcXG4gXFxuIFxcdHNwaW5fbG9ja19iaChcXHUwMDI2bmV0LVxcdTAwM2V4ZnJtLnhmcm1fc3RhdGVfbG9jayk7XFxuLVxcdHgxID0gX194ZnJtX3N0YXRlX2xvY2F0ZSh4LCB1c2Vfc3BpLCB4LVxcdTAwM2Vwcm9wcy5mYW1pbHkpO1xcbitcXHR4MSA9IF9feGZybV9zdGF0ZV9sb2NhdGVfZXhhY3QoeCwgdXNlX3NwaSwgeC1cXHUwMDNlcHJvcHMuZmFtaWx5KTtcXG4gXFxuIFxcdGVyciA9IC1FU1JDSDtcXG4gXFx0aWYgKCF4MSlcXG5AQCAtMjM3NCwxNCArMjQyMCwxNCBAQCB4ZnJtX3N0YXRlX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBtYXJrLCBjb25zdCB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsIF9fYmUzMlxcbiBcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIFxcdHhmcm1faGFzaF9wdHJzX2dldChuZXQsIFxcdTAwMjZzdGF0ZV9wdHJzKTtcXG4gXFxuLVxcdHggPSBfX3hmcm1fc3RhdGVfbG9va3VwKFxcdTAwMjZzdGF0ZV9wdHJzLCBtYXJrLCBkYWRkciwgc3BpLCBwcm90bywgZmFtaWx5KTtcXG4rXFx0eCA9IF9feGZybV9zdGF0ZV9sb29rdXAoXFx1MDAyNnN0YXRlX3B0cnMsIG1hcmssIDAsIGZhbHNlLCBkYWRkciwgc3BpLCBwcm90bywgZmFtaWx5KTtcXG4gXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcdHJldHVybiB4O1xcbiB9XFxuIEVYUE9SVF9TWU1CT0woeGZybV9zdGF0ZV9sb29rdXApO1xcbiBcXG4gc3RydWN0IHhmcm1fc3RhdGUgKlxcbi14ZnJtX3N0YXRlX2xvb2t1cF9ieWFkZHIoc3RydWN0IG5ldCAqbmV0LCB1MzIgbWFyayxcXG4reGZybV9zdGF0ZV9sb29rdXBfYnlhZGRyKHN0cnVjdCBuZXQgKm5ldCwgdTMyIG1hcmssIHUzMiBtYXNrLCBib29sIGV4YWN0LFxcbiBcXHRcXHRcXHQgY29uc3QgeGZybV9hZGRyZXNzX3QgKmRhZGRyLCBjb25zdCB4ZnJtX2FkZHJlc3NfdCAqc2FkZHIsXFxuIFxcdFxcdFxcdCB1OCBwcm90bywgdW5zaWduZWQgc2hvcnQgZmFtaWx5KVxcbiB7XFxuQEAgLTIzOTIsMTIgKzI0MzgsMjkgQEAgeGZybV9zdGF0ZV9sb29rdXBfYnlhZGRyKHN0cnVjdCBuZXQgKm5ldCwgdTMyIG1hcmssXFxuIFxcbiBcXHR4ZnJtX2hhc2hfcHRyc19nZXQobmV0LCBcXHUwMDI2c3RhdGVfcHRycyk7XFxuIFxcbi1cXHR4ID0gX194ZnJtX3N0YXRlX2xvb2t1cF9ieWFkZHIoXFx1MDAyNnN0YXRlX3B0cnMsIG1hcmssIGRhZGRyLCBzYWRkciwgcHJvdG8sIGZhbWlseSk7XFxuK1xcdHggPSBfX3hmcm1fc3RhdGVfbG9va3VwX2J5YWRkcihcXHUwMDI2c3RhdGVfcHRycywgbWFyaywgbWFzaywgZXhhY3QsIGRhZGRyLCBzYWRkciwgcHJvdG8sIGZhbWlseSk7XFxuIFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXHRyZXR1cm4geDtcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKHhmcm1fc3RhdGVfbG9va3VwX2J5YWRkcik7XFxuIFxcbitzdHJ1Y3QgeGZybV9zdGF0ZSAqXFxuK3hmcm1fc3RhdGVfbG9va3VwX2V4YWN0KHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IHhmcm1fbWFyayAqbWFyayxcXG4rXFx0XFx0XFx0Y29uc3QgeGZybV9hZGRyZXNzX3QgKmRhZGRyLCBfX2JlMzIgc3BpLFxcbitcXHRcXHRcXHR1OCBwcm90bywgdW5zaWduZWQgc2hvcnQgZmFtaWx5KVxcbit7XFxuK1xcdHN0cnVjdCB4ZnJtX2hhc2hfc3RhdGVfcHRycyBzdGF0ZV9wdHJzO1xcbitcXHRzdHJ1Y3QgeGZybV9zdGF0ZSAqeDtcXG4rXFxuK1xcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFx0eGZybV9oYXNoX3B0cnNfZ2V0KG5ldCwgXFx1MDAyNnN0YXRlX3B0cnMpO1xcbitcXG4rXFx0eCA9IF9feGZybV9zdGF0ZV9sb29rdXBfZXhhY3QoXFx1MDAyNnN0YXRlX3B0cnMsIG1hcmssIGRhZGRyLCBzcGksIHByb3RvLCBmYW1pbHkpO1xcbitcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4rXFx0cmV0dXJuIHg7XFxuK31cXG4rRVhQT1JUX1NZTUJPTCh4ZnJtX3N0YXRlX2xvb2t1cF9leGFjdCk7XFxuK1xcbiBzdHJ1Y3QgeGZybV9zdGF0ZSAqXFxuIHhmcm1fZmluZF9hY3Eoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgeGZybV9tYXJrICptYXJrLCB1OCBtb2RlLCB1MzIgcmVxaWQsXFxuIFxcdCAgICAgIHUzMiBpZl9pZCwgdTMyIHBjcHVfbnVtLCB1OCBwcm90bywgY29uc3QgeGZybV9hZGRyZXNzX3QgKmRhZGRyLFxcbkBAIC0zMzA2LDcgKzMzNjksNyBAQCBpbnQgeGZybV9pbml0X3N0YXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcbi1cXHRlcnIgPSB4ZnJtX2luaXRfcmVwbGF5KHgsIE5VTEwpO1xcbitcXHRlcnIgPSB4ZnJtX2luaXRfcmVwbGF5KHgsIGV4dGFjayk7XFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3VzZXIuYyBiL25ldC94ZnJtL3hmcm1fdXNlci5jXFxuaW5kZXggNjM4NDc5NWVlNmIyNjkuLmEyMzE3ZTZlNjgwMmRkIDEwMDY0NFxcbi0tLSBhL25ldC94ZnJtL3hmcm1fdXNlci5jXFxuKysrIGIvbmV0L3hmcm0veGZybV91c2VyLmNcXG5AQCAtMTA4OSwxMSArMTA4OSwxMiBAQCBzdGF0aWMgc3RydWN0IHhmcm1fc3RhdGUgKnhmcm1fdXNlcl9zdGF0ZV9sb29rdXAoc3RydWN0IG5ldCAqbmV0LFxcbiBcXHRzdHJ1Y3QgeGZybV9zdGF0ZSAqeCA9IE5VTEw7XFxuIFxcdHN0cnVjdCB4ZnJtX21hcmsgbTtcXG4gXFx0aW50IGVycjtcXG4tXFx0dTMyIG1hcmsgPSB4ZnJtX21hcmtfZ2V0KGF0dHJzLCBcXHUwMDI2bSk7XFxuK1xcbitcXHR4ZnJtX21hcmtfZ2V0KGF0dHJzLCBcXHUwMDI2bSk7XFxuIFxcbiBcXHRpZiAoeGZybV9pZF9wcm90b19tYXRjaChwLVxcdTAwM2Vwcm90bywgSVBTRUNfUFJPVE9fQU5ZKSkge1xcbiBcXHRcXHRlcnIgPSAtRVNSQ0g7XFxuLVxcdFxcdHggPSB4ZnJtX3N0YXRlX2xvb2t1cChuZXQsIG1hcmssIFxcdTAwMjZwLVxcdTAwM2VkYWRkciwgcC1cXHUwMDNlc3BpLCBwLVxcdTAwM2Vwcm90bywgcC1cXHUwMDNlZmFtaWx5KTtcXG4rXFx0XFx0eCA9IHhmcm1fc3RhdGVfbG9va3VwX2V4YWN0KG5ldCwgXFx1MDAyNm0sIFxcdTAwMjZwLVxcdTAwM2VkYWRkciwgcC1cXHUwMDNlc3BpLCBwLVxcdTAwM2Vwcm90bywgcC1cXHUwMDNlZmFtaWx5KTtcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0eGZybV9hZGRyZXNzX3QgKnNhZGRyID0gTlVMTDtcXG4gXFxuQEAgLTExMDQsNyArMTEwNSw3IEBAIHN0YXRpYyBzdHJ1Y3QgeGZybV9zdGF0ZSAqeGZybV91c2VyX3N0YXRlX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcdFxcdH1cXG4gXFxuIFxcdFxcdGVyciA9IC1FU1JDSDtcXG4tXFx0XFx0eCA9IHhmcm1fc3RhdGVfbG9va3VwX2J5YWRkcihuZXQsIG1hcmssXFxuK1xcdFxcdHggPSB4ZnJtX3N0YXRlX2xvb2t1cF9ieWFkZHIobmV0LCBtLnYsIG0ubSwgdHJ1ZSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2cC1cXHUwMDNlZGFkZHIsIHNhZGRyLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgIHAtXFx1MDAzZXByb3RvLCBwLVxcdTAwM2VmYW1pbHkpO1xcbiBcXHR9XFxuQEAgLTI3ODgsMTQgKzI3ODksMTMgQEAgc3RhdGljIGludCB4ZnJtX2dldF9hZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4gXFx0c3RydWN0IHNrX2J1ZmYgKnJfc2tiO1xcbiBcXHRpbnQgZXJyO1xcbiBcXHRzdHJ1Y3Qga21fZXZlbnQgYztcXG4tXFx0dTMyIG1hcms7XFxuIFxcdHN0cnVjdCB4ZnJtX21hcmsgbTtcXG4gXFx0c3RydWN0IHhmcm1fYWV2ZW50X2lkICpwID0gbmxtc2dfZGF0YShubGgpO1xcbiBcXHRzdHJ1Y3QgeGZybV91c2Vyc2FfaWQgKmlkID0gXFx1MDAyNnAtXFx1MDAzZXNhX2lkO1xcbiBcXG4tXFx0bWFyayA9IHhmcm1fbWFya19nZXQoYXR0cnMsIFxcdTAwMjZtKTtcXG4rXFx0eGZybV9tYXJrX2dldChhdHRycywgXFx1MDAyNm0pO1xcbiBcXG4tXFx0eCA9IHhmcm1fc3RhdGVfbG9va3VwKG5ldCwgbWFyaywgXFx1MDAyNmlkLVxcdTAwM2VkYWRkciwgaWQtXFx1MDAzZXNwaSwgaWQtXFx1MDAzZXByb3RvLCBpZC1cXHUwMDNlZmFtaWx5KTtcXG4rXFx0eCA9IHhmcm1fc3RhdGVfbG9va3VwX2V4YWN0KG5ldCwgXFx1MDAyNm0sIFxcdTAwMjZpZC1cXHUwMDNlZGFkZHIsIGlkLVxcdTAwM2VzcGksIGlkLVxcdTAwM2Vwcm90bywgaWQtXFx1MDAzZWZhbWlseSk7XFxuIFxcdGlmICh4ID09IE5VTEwpXFxuIFxcdFxcdHJldHVybiAtRVNSQ0g7XFxuIFxcbkBAIC0yODM2LDcgKzI4MzYsNiBAQCBzdGF0aWMgaW50IHhmcm1fbmV3X2FlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbiBcXHRzdHJ1Y3QgeGZybV9zdGF0ZSAqeDtcXG4gXFx0c3RydWN0IGttX2V2ZW50IGM7XFxuIFxcdGludCBlcnIgPSAtRUlOVkFMO1xcbi1cXHR1MzIgbWFyayA9IDA7XFxuIFxcdHN0cnVjdCB4ZnJtX21hcmsgbTtcXG4gXFx0c3RydWN0IHhmcm1fYWV2ZW50X2lkICpwID0gbmxtc2dfZGF0YShubGgpO1xcbiBcXHRzdHJ1Y3QgbmxhdHRyICpycCA9IGF0dHJzW1hGUk1BX1JFUExBWV9WQUxdO1xcbkBAIC0yODU2LDkgKzI4NTUsMTAgQEAgc3RhdGljIGludCB4ZnJtX25ld19hZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0fVxcbiBcXG4tXFx0bWFyayA9IHhmcm1fbWFya19nZXQoYXR0cnMsIFxcdTAwMjZtKTtcXG4rXFx0eGZybV9tYXJrX2dldChhdHRycywgXFx1MDAyNm0pO1xcbiBcXG4tXFx0eCA9IHhmcm1fc3RhdGVfbG9va3VwKG5ldCwgbWFyaywgXFx1MDAyNnAtXFx1MDAzZXNhX2lkLmRhZGRyLCBwLVxcdTAwM2VzYV9pZC5zcGksIHAtXFx1MDAzZXNhX2lkLnByb3RvLCBwLVxcdTAwM2VzYV9pZC5mYW1pbHkpO1xcbitcXHR4ID0geGZybV9zdGF0ZV9sb29rdXBfZXhhY3QobmV0LCBcXHUwMDI2bSwgXFx1MDAyNnAtXFx1MDAzZXNhX2lkLmRhZGRyLCBwLVxcdTAwM2VzYV9pZC5zcGksXFxuK1xcdFxcdFxcdFxcdCAgICBwLVxcdTAwM2VzYV9pZC5wcm90bywgcC1cXHUwMDNlc2FfaWQuZmFtaWx5KTtcXG4gXFx0aWYgKHggPT0gTlVMTClcXG4gXFx0XFx0cmV0dXJuIC1FU1JDSDtcXG4gXFxuQEAgLTI5OTIsOSArMjk5MiwxMCBAQCBzdGF0aWMgaW50IHhmcm1fYWRkX3NhX2V4cGlyZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4gXFx0c3RydWN0IHhmcm1fdXNlcl9leHBpcmUgKnVlID0gbmxtc2dfZGF0YShubGgpO1xcbiBcXHRzdHJ1Y3QgeGZybV91c2Vyc2FfaW5mbyAqcCA9IFxcdTAwMjZ1ZS1cXHUwMDNlc3RhdGU7XFxuIFxcdHN0cnVjdCB4ZnJtX21hcmsgbTtcXG4tXFx0dTMyIG1hcmsgPSB4ZnJtX21hcmtfZ2V0KGF0dHJzLCBcXHUwMDI2bSk7XFxuIFxcbi1cXHR4ID0geGZybV9zdGF0ZV9sb29rdXAobmV0LCBtYXJrLCBcXHUwMDI2cC1cXHUwMDNlaWQuZGFkZHIsIHAtXFx1MDAzZWlkLnNwaSwgcC1cXHUwMDNlaWQucHJvdG8sIHAtXFx1MDAzZWZhbWlseSk7XFxuK1xcdHhmcm1fbWFya19nZXQoYXR0cnMsIFxcdTAwMjZtKTtcXG4rXFxuK1xcdHggPSB4ZnJtX3N0YXRlX2xvb2t1cF9leGFjdChuZXQsIFxcdTAwMjZtLCBcXHUwMDI2cC1cXHUwMDNlaWQuZGFkZHIsIHAtXFx1MDAzZWlkLnNwaSwgcC1cXHUwMDNlaWQucHJvdG8sIHAtXFx1MDAzZWZhbWlseSk7XFxuIFxcbiBcXHRlcnIgPSAtRU5PRU5UO1xcbiBcXHRpZiAoeCA9PSBOVUxMKVxcbkBAIC0zMzYxLDkgKzMzNjIsOSBAQCBzdGF0aWMgaW50IHhmcm1fZG9fbWlncmF0ZV9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4gXFxuIFxcdGNvcHlfZnJvbV91c2VyX21pZ3JhdGVfc3RhdGUoXFx1MDAyNm0sIHVtKTtcXG4gXFxuLVxcdHggPSB4ZnJtX3N0YXRlX2xvb2t1cChuZXQsIG0ub2xkX21hcmsudiBcXHUwMDI2IG0ub2xkX21hcmsubSxcXG4tXFx0XFx0XFx0ICAgICAgXFx1MDAyNnVtLVxcdTAwM2VpZC5kYWRkciwgdW0tXFx1MDAzZWlkLnNwaSxcXG4tXFx0XFx0XFx0ICAgICAgdW0tXFx1MDAzZWlkLnByb3RvLCB1bS1cXHUwMDNlaWQuZmFtaWx5KTtcXG4rXFx0eCA9IHhmcm1fc3RhdGVfbG9va3VwX2V4YWN0KG5ldCwgXFx1MDAyNm0ub2xkX21hcmssXFxuK1xcdFxcdFxcdFxcdCAgICBcXHUwMDI2dW0tXFx1MDAzZWlkLmRhZGRyLCB1bS1cXHUwMDNlaWQuc3BpLFxcbitcXHRcXHRcXHRcXHQgICAgdW0tXFx1MDAzZWlkLnByb3RvLCB1bS1cXHUwMDNlaWQuZmFtaWx5KTtcXG4gXFx0aWYgKCF4KSB7XFxuIFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIkNhbiBub3QgZmluZCBzdGF0ZVxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gLUVTUkNIO1xcbkBAIC0zNDM0LDE4ICszNDM1LDIzIEBAIHN0YXRpYyBpbnQgeGZybV9kb19taWdyYXRlX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgeC1cXHUwMDNlbmF0X2tlZXBhbGl2ZV9pbnRlcnZhbCk7XFxuIFxcbiBcXHRpZiAobS5uZXdfZmFtaWx5ICE9IHVtLVxcdTAwM2VpZC5mYW1pbHkgfHxcXG4tXFx0ICAgICF4ZnJtX2FkZHJfZXF1YWwoXFx1MDAyNm0ubmV3X2RhZGRyLCBcXHUwMDI2dW0tXFx1MDAzZWlkLmRhZGRyLCB1bS1cXHUwMDNlaWQuZmFtaWx5KSkge1xcbitcXHQgICAgIXhmcm1fYWRkcl9lcXVhbChcXHUwMDI2bS5uZXdfZGFkZHIsIFxcdTAwMjZ1bS1cXHUwMDNlaWQuZGFkZHIsIHVtLVxcdTAwM2VpZC5mYW1pbHkpIHx8XFxuK1xcdCAgICAobS5uZXdfbWFyayBcXHUwMDI2XFx1MDAyNiAobS5uZXdfbWFyay1cXHUwMDNldiAhPSB4LVxcdTAwM2VtYXJrLnYgfHxcXG4rXFx0XFx0XFx0ICAgbS5uZXdfbWFyay1cXHUwMDNlbSAhPSB4LVxcdTAwM2VtYXJrLm0pKSkge1xcbiBcXHRcXHR1MzIgbmV3X21hcmtfa2V5ID0gbS5uZXdfbWFyayA/IG0ubmV3X21hcmstXFx1MDAzZXYgXFx1MDAyNiBtLm5ld19tYXJrLVxcdTAwM2VtIDpcXG4tXFx0XFx0XFx0XFx0XFx0XFx0bS5vbGRfbWFyay52IFxcdTAwMjYgbS5vbGRfbWFyay5tO1xcbitcXHRcXHRcXHRcXHRcXHRcXHR4LVxcdTAwM2VtYXJrLnYgXFx1MDAyNiB4LVxcdTAwM2VtYXJrLm07XFxuIFxcdFxcdHN0cnVjdCB4ZnJtX3N0YXRlICp4X25ldztcXG4gXFxuIFxcdFxcdHhfbmV3ID0geGZybV9zdGF0ZV9sb29rdXAobmV0LCBuZXdfbWFya19rZXksIFxcdTAwMjZtLm5ld19kYWRkcixcXG4gXFx0XFx0XFx0XFx0XFx0ICB1bS1cXHUwMDNlaWQuc3BpLCB1bS1cXHUwMDNlaWQucHJvdG8sIG0ubmV3X2ZhbWlseSk7XFxuIFxcdFxcdGlmICh4X25ldykge1xcbiBcXHRcXHRcXHR4ZnJtX3N0YXRlX3B1dCh4X25ldyk7XFxuLVxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIk5ldyBTQSB0dXBsZSBhbHJlYWR5IG9jY3VwaWVkXFxcIik7XFxuLVxcdFxcdFxcdGVyciA9IC1FRVhJU1Q7XFxuLVxcdFxcdFxcdGdvdG8gb3V0O1xcbitcXHRcXHRcXHRpZiAoeF9uZXcgIT0geCkge1xcbitcXHRcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJOZXcgU0EgdHVwbGUgYWxyZWFkeSBvY2N1cGllZFxcXCIpO1xcbitcXHRcXHRcXHRcXHRlcnIgPSAtRUVYSVNUO1xcbitcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHQvKiBzZWxmLW1hdGNoIHZpYSB3aWRlIG1hcmsgbWFzazsgbm90IGEgY29sbGlzaW9uICovXFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG5AQCAtMzQ2Nyw2ICszNDczLDcgQEAgc3RhdGljIGludCB4ZnJtX2RvX21pZ3JhdGVfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuIFxcdF9feGZybV9zdGF0ZV9kZWxldGUoeCk7XFxuIFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ4LVxcdTAwM2Vsb2NrKTtcXG4gXFxuK1xcdHhmcm1fc3RhdGVfaG9sZCh4Yyk7XFxuIFxcdGVyciA9IHhmcm1fc3RhdGVfbWlncmF0ZV9pbnN0YWxsKHgsIHhjLCBcXHUwMDI2bSwgZXh0YWNrKTtcXG4gXFx0aWYgKGVyciBcXHUwMDNjIDApIHtcXG4gXFx0XFx0LypcXG5AQCAtMzQ3NCw2ICszNDgxLDcgQEAgc3RhdGljIGludCB4ZnJtX2RvX21pZ3JhdGVfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuIFxcdFxcdCAqIGZyZWUgdW5kZXIgeGZybV9jZmdfbXV0ZXguIEJvdGggU0FzIGFyZSBnb25lIGlmIGl0IGRvZXM7XFxuIFxcdFxcdCAqIHJlc3RvcmluZyB4IHdvdWxkIHJpc2sgU04vSVYgcmV1c2UuXFxuIFxcdFxcdCAqL1xcbitcXHRcXHR4ZnJtX3N0YXRlX3B1dCh4Yyk7XFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXHR9XFxuIFxcbkBAIC0zNDkyLDEwICszNTAwLDEzIEBAIHN0YXRpYyBpbnQgeGZybV9kb19taWdyYXRlX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbiBcXHRcXHRlcnIgPSAwO1xcbiBcXHR9XFxuIFxcbitcXHR4ZnJtX3N0YXRlX3B1dCh4Yyk7XFxuIG91dDpcXG4gXFx0eGZybV9zdGF0ZV9wdXQoeCk7XFxuIFxcdHJldHVybiBlcnI7XFxuIG91dF94YzpcXG4rXFx0aWYgKG0ueHVvKVxcbitcXHRcXHR4ZnJtX2Rldl9zdGF0ZV9kZWxldGUoeGMpO1xcbiBcXHR4Yy1cXHUwMDNla20uc3RhdGUgPSBYRlJNX1NUQVRFX0RFQUQ7XFxuIFxcdHhmcm1fc3RhdGVfcHV0KHhjKTtcXG4gXFx0eGZybV9zdGF0ZV9wdXQoeCk7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC94ZnJtX3N0YXRlLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3hmcm1fc3RhdGUuc2hcXG5pbmRleCBmNmM1NGE2NDk2ZDcxNC4uZjIwMjA3MzcyNmE5ZjQgMTAwNzU1XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3hmcm1fc3RhdGUuc2hcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQveGZybV9zdGF0ZS5zaFxcbkBAIC00Miw3ICs0MiwxMSBAQCB0ZXN0cz1cXFwiXFxuIFxcdG10dV9pcHY0X3IyXFx0XFx0XFx0SVB2NCBNVFUgZXhjZWVkZWQgZnJvbSBFU1Agcm91dGVyIHIyXFxuIFxcdG10dV9pcHY2X3IyXFx0XFx0XFx0SVB2NiBNVFUgZXhjZWVkZWQgZnJvbSBFU1Agcm91dGVyIHIyXFxuIFxcdG10dV9pcHY0X3IzXFx0XFx0XFx0SVB2NCBNVFUgZXhjZWVkZWQgZnJvbSByb3V0ZXIgcjNcXG4tXFx0bXR1X2lwdjZfcjNcXHRcXHRcXHRJUHY2IE1UVSBleGNlZWRlZCBmcm9tIHJvdXRlciByM1xcXCJcXG4rXFx0bXR1X2lwdjZfcjNcXHRcXHRcXHRJUHY2IE1UVSBleGNlZWRlZCBmcm9tIHJvdXRlciByM1xcbitcXHRtYXJrX3dpbGRjYXJkX3NoYWRvd1xcdFxcdG1hcms6IHdpbGRjYXJkIFNBIGluIGJ5LXNwaSBzdGF0ZSBnZXQgbG9va3VwXFxuK1xcdG1hcmtfd2lsZGNhcmRfZGVsZXRlXFx0XFx0bWFyazogd2lsZGNhcmQgU0EgaW4gYnktc3BpIHN0YXRlIGRlbGV0ZVxcbitcXHRtYXJrX3dpbGRjYXJkX2dldF9hZGRyXFx0XFx0bWFyazogd2lsZGNhcmQgU0EgaW4gYnktYWRkcmVzcyBnZXQgbG9va3VwXFxuK1xcdG1hcmtfd2lsZGNhcmRfZGVsZXRlX2FkZHJcXHRtYXJrOiB3aWxkY2FyZCBTQSBpbiBieS1hZGRyZXNzIGRlbGV0ZVxcXCJcXG4gXFxuIHByZWZpeDQ9XFxcIjEwLjFcXFwiXFxuIHByZWZpeDY9XFxcImZjMDBcXFwiXFxuQEAgLTEwMSw2ICsxMDUsMTAgQEAgcnVuX3Rlc3QoKSB7XFxuIFxcdFxcdG10dV9pcHY2X3IyKSAgICAgICAgIHRlc3RfbXR1X2lwdjZfcjIgOztcXG4gXFx0XFx0bXR1X2lwdjRfcjMpICAgICAgICAgdGVzdF9tdHVfaXB2NF9yMyA7O1xcbiBcXHRcXHRtdHVfaXB2Nl9yMykgICAgICAgICB0ZXN0X210dV9pcHY2X3IzIDs7XFxuK1xcdFxcdG1hcmtfd2lsZGNhcmRfc2hhZG93KSAgICAgIHRlc3RfbWFya193aWxkY2FyZF9zaGFkb3cgOztcXG4rXFx0XFx0bWFya193aWxkY2FyZF9kZWxldGUpICAgICAgdGVzdF9tYXJrX3dpbGRjYXJkX2RlbGV0ZSA7O1xcbitcXHRcXHRtYXJrX3dpbGRjYXJkX2dldF9hZGRyKSAgICB0ZXN0X21hcmtfd2lsZGNhcmRfZ2V0X2FkZHIgOztcXG4rXFx0XFx0bWFya193aWxkY2FyZF9kZWxldGVfYWRkcikgdGVzdF9tYXJrX3dpbGRjYXJkX2RlbGV0ZV9hZGRyIDs7XFxuIFxcdFxcdGVzYWNcXG4gXFx0XFx0cmV0PSQ/XFxuIFxcbkBAIC0xNjcsNiArMTc1LDggQEAgc2V0dXBfbmFtZXNwYWNlcygpIHtcXG4gXFx0WyAtbiBcXFwiJHtOU19TMn1cXFwiIF0gXFx1MDAyNlxcdTAwMjYgbnNfczI9KGlwIG5ldG5zIGV4ZWMgXFxcIiR7TlNfUzJ9XFxcIikgXFx1MDAyNlxcdTAwMjYgbnNfYWN0aXZlPVxcXCIke25zX2FjdGl2ZX0gJE5TX1MyXFxcIlxcbiBcXHRbIC1uIFxcXCIke05TX1IzfVxcXCIgXSBcXHUwMDI2XFx1MDAyNiBuc19yMz0oaXAgbmV0bnMgZXhlYyBcXFwiJHtOU19SM31cXFwiKSBcXHUwMDI2XFx1MDAyNiBuc19hY3RpdmU9XFxcIiR7bnNfYWN0aXZlfSAkTlNfUjNcXFwiXFxuIFxcdFsgLW4gXFxcIiR7TlNfQn1cXFwiIF0gXFx1MDAyNlxcdTAwMjYgbnNfYWN0aXZlPVxcXCIke25zX2FjdGl2ZX0gJE5TX0JcXFwiXFxuK1xcbitcXHRyZXR1cm4gMFxcbiB9XFxuIFxcbiBhZGRyX2FkZCgpIHtcXG5AQCAtMjk1LDYgKzMwNSwxOCBAQCBzZXR1cF9uc19zZXRfdjZ4KCkge1xcbiBcXHRzZXRfeGZybV9wYXJhbXNcXG4gfVxcbiBcXG4rc2V0dXBfbnNfc2V0X3NpbXBsZSgpIHtcXG4rXFx0IyBTaW5nbGUgbmFtZXNwYWNlLCBubyB2ZXRocy9yb3V0ZXMuXFxuK1xcdG5zX3NldD1cXFwiYVxcXCJcXG4rXFx0aW1heD0xXFxuK1xcdHNyYz1cXFwiMTAuMS4xLjFcXFwiXFxuK1xcdGRzdD1cXFwiMTAuMS4xLjJcXFwiXFxuK1xcdHNyY19uZXQ9XFxcIjEwLjEuMC4wLzI0XFxcIlxcbitcXHRkc3RfbmV0PVxcXCIxMC4yLjAuMC8yNFxcXCJcXG4rXFxuK1xcdHNldF94ZnJtX3BhcmFtc1xcbit9XFxuK1xcbiBzZXR1cF9uZXR3b3JrKCkge1xcbiBcXHQjIENyZWF0ZSB2ZXRocyBhbmQgYWRkIGFkZHJlc3Nlc1xcbiBcXHRsb2NhbCAtYSBuc19jbWRcXG5AQCAtNDAzLDYgKzQyNSw3IEBAIHNldHVwKCkge1xcbiBcXHRcXHRuc19zZXRfdjR4KSAgICBzZXR1cF9uc19zZXRfdjR4IDs7XFxuIFxcdFxcdG5zX3NldF92NikgICAgIHNldHVwX25zX3NldF92NiA7O1xcbiBcXHRcXHRuc19zZXRfdjZ4KSAgICBzZXR1cF9uc19zZXRfdjZ4IDs7XFxuK1xcdFxcdG5zX3NldF9zaW1wbGUpIHNldHVwX25zX3NldF9zaW1wbGUgOztcXG4gXFx0XFx0bmFtZXNwYWNlcykgICAgc2V0dXBfbmFtZXNwYWNlcyA7O1xcbiBcXHRcXHRuZXR3b3JrKSAgICAgICBzZXR1cF9uZXR3b3JrIDs7XFxuIFxcdFxcdHhmcm0pICAgICAgICAgIHNldHVwX3hmcm0gOztcXG5AQCAtNTQ4LDYgKzU3MSwxMTEgQEAgdGVzdF9tdHVfaXB2Nl9yMygpIHtcXG4gXFx0cmV0dXJuIFxcXCIke3JjfVxcXCJcXG4gfVxcbiBcXG4rIyBTQV9kZWNveSAobWFyayAwLzAsIGFkZGVkIHNlY29uZCkgc2hhZG93cyBTQV90YXJnZXQgKG1hcmsgMS8xKSBvbiBhXFxuKyMgd2lsZGNhcmQgbWFyayBsb29rdXAuIE5vIHRyYWZmaWMgc2VudDsgdGhlc2Ugb25seSBleGVyY2lzZSB0aGUgU0FELlxcbitcXG4rdGVzdF9tYXJrX3dpbGRjYXJkX3NoYWRvdygpIHtcXG4rXFx0c2V0dXAgbnNfc2V0X3NpbXBsZSBuYW1lc3BhY2VzIHx8IHJldHVybiBcXFwiJGtzZnRfc2tpcFxcXCJcXG4rXFx0bG9jYWwgcmVzdWx0PTBcXG4rXFxuK1xcdHJ1bl9jbWQgXFxcIiR7bnNfYVtAXX1cXFwiIGlwIHhmcm0gc3RhdGUgYWRkIFxcXFxcXG4rXFx0XFx0c3JjIFxcXCIke3NyY31cXFwiIGRzdCBcXFwiJHtkc3R9XFxcIiBwcm90byBlc3Agc3BpIDB4MTAwMCBcXFxcXFxuK1xcdFxcdHJlcWlkIDEwMCBtb2RlIHR1bm5lbCBcXFxcXFxuK1xcdFxcdGFlYWQgJ3JmYzQxMDYoZ2NtKGFlcykpJyAweDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgOTYgXFxcXFxcbitcXHRcXHRtYXJrIDEgbWFzayAxXFxuK1xcbitcXHRydW5fY21kIFxcXCIke25zX2FbQF19XFxcIiBpcCB4ZnJtIHN0YXRlIGFkZCBcXFxcXFxuK1xcdFxcdHNyYyBcXFwiJHtzcmN9XFxcIiBkc3QgXFxcIiR7ZHN0fVxcXCIgcHJvdG8gZXNwIHNwaSAweDEwMDAgXFxcXFxcbitcXHRcXHRyZXFpZCAxMDAgbW9kZSB0dW5uZWwgXFxcXFxcbitcXHRcXHRhZWFkICdyZmM0MTA2KGdjbShhZXMpKScgMHgyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIDk2IFxcXFxcXG4rXFx0XFx0bWFyayAwIG1hc2sgMFxcbitcXG4rXFx0cnVuX2NtZF9lcnIgXFxcIiR7bnNfYVtAXX1cXFwiIGlwIHhmcm0gc3RhdGUgZ2V0IFxcXFxcXG4rXFx0XFx0ZHN0IFxcXCIke2RzdH1cXFwiIHByb3RvIGVzcCBzcGkgMHgxMDAwIFxcXFxcXG4rXFx0XFx0bWFyayAxIG1hc2sgMVxcbitcXG4rXFx0IyBFeHBlY3RlZDogU0FfdGFyZ2V0IChtYXJrIDB4MS8weDEpLiBBY3R1YWwgKGJ1Zyk6IFNBX2RlY295IChtYXJrIDAvMCkuXFxuK1xcdGVjaG8gXFxcIiRvdXRcXFwiIHwgZ3JlcCAtcSBcXFwibWFyayAweDEvMHgxXFxcIiB8fCByZXN1bHQ9MVxcbitcXG4rXFx0cmV0dXJuIFxcXCIke3Jlc3VsdH1cXFwiXFxuK31cXG4rXFxuK3Rlc3RfbWFya193aWxkY2FyZF9kZWxldGUoKSB7XFxuK1xcdHNldHVwIG5zX3NldF9zaW1wbGUgbmFtZXNwYWNlcyB8fCByZXR1cm4gXFxcIiRrc2Z0X3NraXBcXFwiXFxuK1xcdGxvY2FsIHJlc3VsdD0wXFxuK1xcbitcXHRydW5fY21kIFxcXCIke25zX2FbQF19XFxcIiBpcCB4ZnJtIHN0YXRlIGFkZCBcXFxcXFxuK1xcdFxcdHNyYyBcXFwiJHtzcmN9XFxcIiBkc3QgXFxcIiR7ZHN0fVxcXCIgcHJvdG8gZXNwIHNwaSAweDEwMDAgXFxcXFxcbitcXHRcXHRyZXFpZCAxMDAgbW9kZSB0dW5uZWwgXFxcXFxcbitcXHRcXHRhZWFkICdyZmM0MTA2KGdjbShhZXMpKScgMHgxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDk2IFxcXFxcXG4rXFx0XFx0bWFyayAxIG1hc2sgMVxcbitcXG4rXFx0cnVuX2NtZCBcXFwiJHtuc19hW0BdfVxcXCIgaXAgeGZybSBzdGF0ZSBhZGQgXFxcXFxcbitcXHRcXHRzcmMgXFxcIiR7c3JjfVxcXCIgZHN0IFxcXCIke2RzdH1cXFwiIHByb3RvIGVzcCBzcGkgMHgxMDAwIFxcXFxcXG4rXFx0XFx0cmVxaWQgMTAwIG1vZGUgdHVubmVsIFxcXFxcXG4rXFx0XFx0YWVhZCAncmZjNDEwNihnY20oYWVzKSknIDB4MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiA5NiBcXFxcXFxuK1xcdFxcdG1hcmsgMCBtYXNrIDBcXG4rXFxuK1xcdHJ1bl9jbWQgXFxcIiR7bnNfYVtAXX1cXFwiIGlwIHhmcm0gc3RhdGUgZGVsZXRlIFxcXFxcXG4rXFx0XFx0ZHN0IFxcXCIke2RzdH1cXFwiIHByb3RvIGVzcCBzcGkgMHgxMDAwIFxcXFxcXG4rXFx0XFx0bWFyayAxIG1hc2sgMVxcbitcXG4rXFx0cnVuX2NtZF9lcnIgXFxcIiR7bnNfYVtAXX1cXFwiIGlwIHhmcm0gc3RhdGUgc2hvd1xcbitcXHRlY2hvIFxcXCIkb3V0XFxcIiB8IGdyZXAgLXEgXFxcIm1hcmsgMHgxLzB4MVxcXCIgXFx1MDAyNlxcdTAwMjYgcmVzdWx0PTFcXG4rXFxuK1xcdHJldHVybiBcXFwiJHtyZXN1bHR9XFxcIlxcbit9XFxuK1xcbisjIGJ5LWFkZHJlc3MgY291bnRlcnBhcnQ6IHByb3RvIHJvdXRlMi9oYW8gKElQdjYgbW9iaWxpdHkpIGhhdmUgbm8gU1BJLFxcbisjIHNvIHhmcm1fdXNlcl9zdGF0ZV9sb29rdXAoKSByZXNvbHZlcyB0aGVtIGJ5IGFkZHJlc3MgaW5zdGVhZC5cXG4rXFxuK3Rlc3RfbWFya193aWxkY2FyZF9nZXRfYWRkcigpIHtcXG4rXFx0c2V0dXAgbnNfc2V0X3NpbXBsZSBuYW1lc3BhY2VzIHx8IHJldHVybiBcXFwiJGtzZnRfc2tpcFxcXCJcXG4rXFx0bG9jYWwgcmVzdWx0PTBcXG4rXFx0bG9jYWwgc3JjNj1cXFwiZmMwMDo5OjoxXFxcIlxcbitcXHRsb2NhbCBkc3Q2PVxcXCJmYzAwOjk6OjJcXFwiXFxuK1xcbitcXHRydW5fY21kIFxcXCIke25zX2FbQF19XFxcIiBpcCB4ZnJtIHN0YXRlIGFkZCBcXFxcXFxuK1xcdFxcdHNyYyBcXFwiJHtzcmM2fVxcXCIgZHN0IFxcXCIke2RzdDZ9XFxcIiBwcm90byByb3V0ZTIgbW9kZSBybyBjb2EgZmMwMDo5OjozIFxcXFxcXG4rXFx0XFx0bWFyayAxIG1hc2sgMVxcbitcXG4rXFx0cnVuX2NtZCBcXFwiJHtuc19hW0BdfVxcXCIgaXAgeGZybSBzdGF0ZSBhZGQgXFxcXFxcbitcXHRcXHRzcmMgXFxcIiR7c3JjNn1cXFwiIGRzdCBcXFwiJHtkc3Q2fVxcXCIgcHJvdG8gcm91dGUyIG1vZGUgcm8gY29hIGZjMDA6OTo6NCBcXFxcXFxuK1xcdFxcdG1hcmsgMCBtYXNrIDBcXG4rXFxuK1xcdHJ1bl9jbWRfZXJyIFxcXCIke25zX2FbQF19XFxcIiBpcCB4ZnJtIHN0YXRlIGdldCBcXFxcXFxuK1xcdFxcdHNyYyBcXFwiJHtzcmM2fVxcXCIgZHN0IFxcXCIke2RzdDZ9XFxcIiBwcm90byByb3V0ZTIgXFxcXFxcbitcXHRcXHRtYXJrIDEgbWFzayAxXFxuK1xcbitcXHRlY2hvIFxcXCIkb3V0XFxcIiB8IGdyZXAgLXEgXFxcIm1hcmsgMHgxLzB4MVxcXCIgfHwgcmVzdWx0PTFcXG4rXFxuK1xcdHJldHVybiBcXFwiJHtyZXN1bHR9XFxcIlxcbit9XFxuK1xcbit0ZXN0X21hcmtfd2lsZGNhcmRfZGVsZXRlX2FkZHIoKSB7XFxuK1xcdHNldHVwIG5zX3NldF9zaW1wbGUgbmFtZXNwYWNlcyB8fCByZXR1cm4gXFxcIiRrc2Z0X3NraXBcXFwiXFxuK1xcdGxvY2FsIHJlc3VsdD0wXFxuK1xcdGxvY2FsIHNyYzY9XFxcImZjMDA6OTo6MVxcXCJcXG4rXFx0bG9jYWwgZHN0Nj1cXFwiZmMwMDo5OjoyXFxcIlxcbitcXG4rXFx0cnVuX2NtZCBcXFwiJHtuc19hW0BdfVxcXCIgaXAgeGZybSBzdGF0ZSBhZGQgXFxcXFxcbitcXHRcXHRzcmMgXFxcIiR7c3JjNn1cXFwiIGRzdCBcXFwiJHtkc3Q2fVxcXCIgcHJvdG8gcm91dGUyIG1vZGUgcm8gY29hIGZjMDA6OTo6MyBcXFxcXFxuK1xcdFxcdG1hcmsgMSBtYXNrIDFcXG4rXFxuK1xcdHJ1bl9jbWQgXFxcIiR7bnNfYVtAXX1cXFwiIGlwIHhmcm0gc3RhdGUgYWRkIFxcXFxcXG4rXFx0XFx0c3JjIFxcXCIke3NyYzZ9XFxcIiBkc3QgXFxcIiR7ZHN0Nn1cXFwiIHByb3RvIHJvdXRlMiBtb2RlIHJvIGNvYSBmYzAwOjk6OjQgXFxcXFxcbitcXHRcXHRtYXJrIDAgbWFzayAwXFxuK1xcbitcXHRydW5fY21kIFxcXCIke25zX2FbQF19XFxcIiBpcCB4ZnJtIHN0YXRlIGRlbGV0ZSBcXFxcXFxuK1xcdFxcdHNyYyBcXFwiJHtzcmM2fVxcXCIgZHN0IFxcXCIke2RzdDZ9XFxcIiBwcm90byByb3V0ZTIgXFxcXFxcbitcXHRcXHRtYXJrIDEgbWFzayAxXFxuK1xcbitcXHRydW5fY21kX2VyciBcXFwiJHtuc19hW0BdfVxcXCIgaXAgeGZybSBzdGF0ZSBzaG93XFxuK1xcdGVjaG8gXFxcIiRvdXRcXFwiIHwgZ3JlcCAtcSBcXFwibWFyayAweDEvMHgxXFxcIiBcXHUwMDI2XFx1MDAyNiByZXN1bHQ9MVxcbitcXG4rXFx0cmV0dXJuIFxcXCIke3Jlc3VsdH1cXFwiXFxuK31cXG4rXFxuICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXFxuICNcXG4gdXNhZ2UoKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE1OjE1OjI3LjU3NDM5NjA3NFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg5NTE3NDU4OTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlhGUk1fVVNFUlwiLFxuICAgIFwiWEZSTV9NSUdSQVRFXCIsXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwieGZybV9zdGF0ZV9sb29rdXBfZXhhY3RcIixcbiAgICBcInhmcm1fc3RhdGVfbG9va3VwX2J5YWRkclwiLFxuICAgIFwieGZybV91c2VyX3N0YXRlX2xvb2t1cFwiLFxuICAgIFwieGZybV9kb19taWdyYXRlX3N0YXRlXCIsXG4gICAgXCJ4ZnJtX3N0YXRlX3VwZGF0ZVwiLFxuICAgIFwieGZybV9zdGF0ZV9taWdyYXRlX2luc3RhbGxcIixcbiAgICBcInhmcm1fZ2V0X2FlXCIsXG4gICAgXCJ4ZnJtX25ld19hZVwiLFxuICAgIFwieGZybV9hZGRfc2FfZXhwaXJlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFhGUk0gKElQc2VjKSBzdGF0ZSBsb29rdXAgbG9naWMgdG8gYWxsb3cgZXhhY3QgbWF0Y2hpbmcgb2YgbWFya3MgYW5kIG1hc2tzIGR1cmluZyBjb250cm9sIHBsYW5lIG9wZXJhdGlvbnMgKEdFVCwgREVMRVRFLCBNSUdSQVRFKS4gVGhpcyBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBuZXRsaW5rIG1lc3NhZ2VzIGFuZCBhZmZlY3RzIGNvcmUgSVBzZWMgZnVuY3Rpb25hbGl0eS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2ODMwNTkxMWU1YWJkNmU1NWRkODAyZDMwNTA3MTA5ZmNhMjUzZDQyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgNiAxNToxNToyNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy94ZnJtL3hmcm1fbWlncmF0ZV9zdGF0ZS5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcveGZybS94ZnJtX21pZ3JhdGVfc3RhdGUucnN0XG5pbmRleCA5ZDUzY2IyMmIwMDc1Mi4uOTA1ZTNmMGM0ZWUwNmYgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcveGZybS94ZnJtX21pZ3JhdGVfc3RhdGUucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcveGZybS94ZnJtX21pZ3JhdGVfc3RhdGUucnN0XG5AQCAtMjcsMTUgKzI3LDE4IEBAIFNBIElkZW50aWZpY2F0aW9uXG4gPT09PT09PT09PT09PT09PT1cbiBcbiBUaGUgc3RydWN0IGlzIGRlZmluZWQgaW4gYGBpbmNsdWRlL3VhcGkvbGludXgveGZybS5oYGAuIFRoZSBTQSBpcyBsb29rZWRcbi11cCB1c2luZyBgYHhmcm1fc3RhdGVfbG9va3VwKClgYCB3aXRoIGBgaWQuc3BpYGAsXG4tYGBpZC5kYWRkcmBgLCBgYGlkLnByb3RvYGAsIGBgaWQuZmFtaWx5YGAsIGFuZFxuLWBgb2xkX21hcmsudiBcdTAwMjYgb2xkX21hcmsubWBgIGFzIHRoZSBtYXJrIGtleTo6XG4rdXAgdXNpbmcgYGB4ZnJtX3N0YXRlX2xvb2t1cF9leGFjdCgpYGAgd2l0aCBgYGlkLnNwaWBgLCBgYGlkLmRhZGRyYGAsXG4rYGBpZC5wcm90b2BgLCBgYGlkLmZhbWlseWBgLCBhbmQgYW4gZXhhY3QgbWF0Y2ggYWdhaW5zdCBgYG9sZF9tYXJrLnZgYFxuK2FuZCBgYG9sZF9tYXJrLm1gYC4gVW5saWtlIHRoZSBkYXRhIHBhdGgsIHdoaWNoIHVzZXMgYSBtYXNrZWRcbitjb21wYXJpc29uLCB0aGlzIHJlcXVpcmVzIHRoZSBTQSdzIG1hcmsgYW5kIG1hc2sgdG8gZXF1YWwgYGBvbGRfbWFya2BgXG4rZXhhY3RseSwgc28gYSBicm9hZC1tYXNrIFNBIGlzIG5ldmVyIG1hdGNoZWQgd2hlbiBhIG1vcmUgc3BlY2lmaWMgb25lXG4rd2FzIGludGVuZGVkLiBJZiBubyBzdWNoIFNBIGV4aXN0cywgYGAtRVNSQ0hgYCBpcyByZXR1cm5lZC46OlxuIFxuICAgICBzdHJ1Y3QgeGZybV91c2VyX21pZ3JhdGVfc3RhdGUge1xuICAgICAgICAgc3RydWN0IHhmcm1fdXNlcnNhX2lkICBpZDsgICAgICAgLyogc3BpLCBkYWRkciwgcHJvdG8sIGZhbWlseSAqL1xuICAgICAgICAgeGZybV9hZGRyZXNzX3QgICAgICAgICBuZXdfZGFkZHI7XG4gICAgICAgICB4ZnJtX2FkZHJlc3NfdCAgICAgICAgIG5ld19zYWRkcjtcbi0gICAgICAgIHN0cnVjdCB4ZnJtX21hcmsgICAgICAgb2xkX21hcms7IC8qIFNBIGxvb2t1cDoga2V5ID0gdiBcdTAwMjYgbSAqL1xuKyAgICAgICAgc3RydWN0IHhmcm1fbWFyayAgICAgICBvbGRfbWFyazsgLyogU0EgbG9va3VwIGtleSAoZXhhY3Qgdi9tIG1hdGNoKSAqL1xuICAgICAgICAgc3RydWN0IHhmcm1fc2VsZWN0b3IgICBuZXdfc2VsOyAgLyogbmV3IHNlbGVjdG9yIChzZWUgRmxhZ3MpICovXG4gICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICAgIG5ld19yZXFpZDtcbiAgICAgICAgIF9fdTMyICAgICAgICAgICAgICAgICAgZmxhZ3M7ICAgIC8qIFhGUk1fTUlHUkFURV9TVEFURV8qICovXG5AQCAtNzIsOCArNzUsOCBAQCBpbmhlcml0cyB0aGUgdmFsdWUgZnJvbSB0aGUgZXhpc3RpbmcgU0EgKG9taXQtdG8taW5oZXJpdCkuXG4gICAgICAtIERlc2NyaXB0aW9uXG4gICAgKiAtIGBgWEZSTUFfTUFSS2BgXG4gICAgICAtIE1hcmsgb24gdGhlIG1pZ3JhdGVkIFNBIChgYHN0cnVjdCB4ZnJtX21hcmtgYCkuIEFic2VudCBpbmhlcml0c1xuLSAgICAgICBgYG9sZF9tYXJrYGAuIFRvIHVzZSBubyBtYXJrIG9uIHRoZSBuZXcgU0EsIHNlbmQgYGBYRlJNQV9NQVJLYGBcbi0gICAgICAgd2l0aCBgYHswLCAwfWBgLlxuKyAgICAgICB0aGUgbWFyayBvZiB0aGUgZXhpc3RpbmcgU0EuIFRvIHVzZSBubyBtYXJrIG9uIHRoZSBuZXcgU0EsIHNlbmRcbisgICAgICAgYGBYRlJNQV9NQVJLYGAgd2l0aCBgYHswLCAwfWBgLlxuICAgICogLSBgYFhGUk1BX0VOQ0FQYGBcbiAgICAgIC0gVURQIGVuY2Fwc3VsYXRpb24gdGVtcGxhdGU7IG9ubHkgYGBVRFBfRU5DQVBfRVNQSU5VRFBgYCBpcyBzdXBwb3J0ZWQuXG4gICAgICAgIFNldCBgYGVuY2FwX3R5cGU9MGBgIHRvIHJlbW92ZSBlbmNhcC5cbkBAIC0yNTksOCArMjYyLDkgQEAgQXR0cmlidXRlcyBpbiB0aGUgbm90aWZpY2F0aW9uXG4gRXJyb3IgSGFuZGxpbmdcbiA9PT09PT09PT09PT09PVxuIFxuLUlmIHRoZSB0YXJnZXQgU0EgdHVwbGUgKG5ldyBkYWRkciwgU1BJLCBwcm90bywgbmV3IGZhbWlseSkgaXMgYWxyZWFkeVxuLW9jY3VwaWVkLCB0aGUgb3BlcmF0aW9uIHJldHVybnMgYGAtRUVYSVNUYGAgYmVmb3JlIHRoZSBtaWdyYXRpb24gYmVnaW5zLlxuK0lmIHRoZSB0YXJnZXQgU0EgdHVwbGUgKG5ldyBkYWRkciwgU1BJLCBwcm90bywgbmV3IGZhbWlseSwgbWFyaykgaXNcbithbHJlYWR5IG9jY3VwaWVkLCB0aGUgb3BlcmF0aW9uIHJldHVybnMgYGAtRUVYSVNUYGAgYmVmb3JlIHRoZSBtaWdyYXRpb25cbitiZWdpbnMuXG4gVGhlIG9sZCBTQSByZW1haW5zIGludGFjdCBhbmQgdGhlIG9wZXJhdGlvbiBpcyBzYWZlIHRvIHJldHJ5IGFmdGVyXG4gcmVzb2x2aW5nIHRoZSBjb25mbGljdC5cbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC94ZnJtLmggYi9pbmNsdWRlL25ldC94ZnJtLmhcbmluZGV4IDUxOWEwMTU2YTA1Y2FjLi5lYmU1MTQzNzYyNTRhNiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L3hmcm0uaFxuKysrIGIvaW5jbHVkZS9uZXQveGZybS5oXG5AQCAtMTc0MSwxMSArMTc0MSwxNCBAQCBzdHJ1Y3QgeGZybV9zdGF0ZSAqeGZybV9pbnB1dF9zdGF0ZV9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCB1MzIgbWFyayxcbiBcdFx0XHRcdFx0ICAgY29uc3QgeGZybV9hZGRyZXNzX3QgKmRhZGRyLFxuIFx0XHRcdFx0XHQgICBfX2JlMzIgc3BpLCB1OCBwcm90byxcbiBcdFx0XHRcdFx0ICAgdW5zaWduZWQgc2hvcnQgZmFtaWx5KTtcbi1zdHJ1Y3QgeGZybV9zdGF0ZSAqeGZybV9zdGF0ZV9sb29rdXBfYnlhZGRyKHN0cnVjdCBuZXQgKm5ldCwgdTMyIG1hcmssXG4rc3RydWN0IHhmcm1fc3RhdGUgKnhmcm1fc3RhdGVfbG9va3VwX2J5YWRkcihzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBtYXJrLCB1MzIgbWFzaywgYm9vbCBleGFjdCxcbiBcdFx0XHRcdFx0ICAgIGNvbnN0IHhmcm1fYWRkcmVzc190ICpkYWRkcixcbiBcdFx0XHRcdFx0ICAgIGNvbnN0IHhmcm1fYWRkcmVzc190ICpzYWRkcixcbiBcdFx0XHRcdFx0ICAgIHU4IHByb3RvLFxuIFx0XHRcdFx0XHQgICAgdW5zaWduZWQgc2hvcnQgZmFtaWx5KTtcbitzdHJ1Y3QgeGZybV9zdGF0ZSAqeGZybV9zdGF0ZV9sb29rdXBfZXhhY3Qoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgeGZybV9tYXJrICptYXJrLFxuK1x0XHRcdFx0XHQgICBjb25zdCB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsIF9fYmUzMiBzcGksXG4rXHRcdFx0XHRcdCAgIHU4IHByb3RvLCB1bnNpZ25lZCBzaG9ydCBmYW1pbHkpO1xuICNpZmRlZiBDT05GSUdfWEZSTV9TVUJfUE9MSUNZXG4gdm9pZCB4ZnJtX3RtcGxfc29ydChzdHJ1Y3QgeGZybV90bXBsICoqZHN0LCBzdHJ1Y3QgeGZybV90bXBsICoqc3JjLCBpbnQgbixcbiBcdFx0ICAgIHVuc2lnbmVkIHNob3J0IGZhbWlseSk7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYveGZybTZfaW5wdXQuYyBiL25ldC9pcHY2L3hmcm02X2lucHV0LmNcbmluZGV4IDg5ZDA0NDNiNTMwNzMyLi4yZGQzNDdmZWNlNTJjYSAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L3hmcm02X2lucHV0LmNcbisrKyBiL25ldC9pcHY2L3hmcm02X2lucHV0LmNcbkBAIC0yNzIsNyArMjcyLDcgQEAgaW50IHhmcm02X2lucHV0X2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgeGZybV9hZGRyZXNzX3QgKmRhZGRyLFxuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXG4tXHRcdHggPSB4ZnJtX3N0YXRlX2xvb2t1cF9ieWFkZHIobmV0LCBza2ItXHUwMDNlbWFyaywgZHN0LCBzcmMsIHByb3RvLCBBRl9JTkVUNik7XG4rXHRcdHggPSB4ZnJtX3N0YXRlX2xvb2t1cF9ieWFkZHIobmV0LCBza2ItXHUwMDNlbWFyaywgMCwgZmFsc2UsIGRzdCwgc3JjLCBwcm90bywgQUZfSU5FVDYpO1xuIFx0XHRpZiAoIXgpXG4gXHRcdFx0Y29udGludWU7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9zdGF0ZS5jIGIvbmV0L3hmcm0veGZybV9zdGF0ZS5jXG5pbmRleCBjNThjZDAyNGUzYzY3NS4uMGIzZGM3Nzg5ZGQ3OTAgMTAwNjQ0XG4tLS0gYS9uZXQveGZybS94ZnJtX3N0YXRlLmNcbisrKyBiL25ldC94ZnJtL3hmcm1fc3RhdGUuY1xuQEAgLTExNzIsMTEgKzExNzIsMjIgQEAgc3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlICpfX3hmcm1fc3RhdGVfbG9va3VwX2FsbChjb25zdCBzdHJ1Y3QgeGZybV9oYXNoX3N0YXRlX3BcbiBcdHJldHVybiBOVUxMO1xuIH1cbiBcbi1zdGF0aWMgc3RydWN0IHhmcm1fc3RhdGUgKl9feGZybV9zdGF0ZV9sb29rdXAoY29uc3Qgc3RydWN0IHhmcm1faGFzaF9zdGF0ZV9wdHJzICpzdGF0ZV9wdHJzLFxuLVx0XHRcdFx0XHQgICAgICB1MzIgbWFyayxcbi1cdFx0XHRcdFx0ICAgICAgY29uc3QgeGZybV9hZGRyZXNzX3QgKmRhZGRyLFxuLVx0XHRcdFx0XHQgICAgICBfX2JlMzIgc3BpLCB1OCBwcm90byxcbi1cdFx0XHRcdFx0ICAgICAgdW5zaWduZWQgc2hvcnQgZmFtaWx5KVxuKy8qIGV4YWN0PWZhbHNlOiBkYXRhLXBsYW5lIHdpbGRjYXJkIG1hdGNoIGFnYWluc3QgeCdzIG1hc2suIGV4YWN0PXRydWU6XG4rICogY29udHJvbC1wbGFuZSBpZGVudGl0eSBtYXRjaCwgbWFyayBhbmQgbWFzayBtdXN0IGJvdGggbWF0Y2ggZXhhY3RseS5cbisgKi9cbitzdGF0aWMgYm9vbCB4ZnJtX3N0YXRlX21hcmtfbWF0Y2hlcyhjb25zdCBzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgdTMyIG1hcmssIHUzMiBtYXNrLCBib29sIGV4YWN0KVxuK3tcbitcdGlmIChleGFjdClcbitcdFx0cmV0dXJuIHgtXHUwMDNlbWFyay52ID09IG1hcmsgXHUwMDI2XHUwMDI2IHgtXHUwMDNlbWFyay5tID09IG1hc2s7XG4rXHRyZXR1cm4gKG1hcmsgXHUwMDI2IHgtXHUwMDNlbWFyay5tKSA9PSB4LVx1MDAzZW1hcmsudjtcbit9XG4rXG4rc3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlICpcbitfX3hmcm1fc3RhdGVfbG9va3VwKGNvbnN0IHN0cnVjdCB4ZnJtX2hhc2hfc3RhdGVfcHRycyAqc3RhdGVfcHRycyxcbitcdFx0ICAgIHUzMiBtYXJrLCB1MzIgbWFzaywgYm9vbCBleGFjdCxcbitcdFx0ICAgIGNvbnN0IHhmcm1fYWRkcmVzc190ICpkYWRkcixcbitcdFx0ICAgIF9fYmUzMiBzcGksIHU4IHByb3RvLFxuK1x0XHQgICAgdW5zaWduZWQgc2hvcnQgZmFtaWx5KVxuIHtcbiBcdHVuc2lnbmVkIGludCBoID0gX194ZnJtX3NwaV9oYXNoKGRhZGRyLCBzcGksIHByb3RvLCBmYW1pbHksIHN0YXRlX3B0cnMtXHUwMDNlaG1hc2spO1xuIFx0c3RydWN0IHhmcm1fc3RhdGUgKng7XG5AQCAtMTE4OCw3ICsxMTk5LDcgQEAgc3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlICpfX3hmcm1fc3RhdGVfbG9va3VwKGNvbnN0IHN0cnVjdCB4ZnJtX2hhc2hfc3RhdGVfcHRyc1xuIFx0XHQgICAgIXhmcm1fYWRkcl9lcXVhbChcdTAwMjZ4LVx1MDAzZWlkLmRhZGRyLCBkYWRkciwgZmFtaWx5KSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0aWYgKChtYXJrIFx1MDAyNiB4LVx1MDAzZW1hcmsubSkgIT0geC1cdTAwM2VtYXJrLnYpXG4rXHRcdGlmICgheGZybV9zdGF0ZV9tYXJrX21hdGNoZXMoeCwgbWFyaywgbWFzaywgZXhhY3QpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRpZiAoIXhmcm1fc3RhdGVfaG9sZF9yY3UoeCkpXG4gXHRcdFx0Y29udGludWU7XG5AQCAtMTE5OCw2ICsxMjA5LDE3IEBAIHN0YXRpYyBzdHJ1Y3QgeGZybV9zdGF0ZSAqX194ZnJtX3N0YXRlX2xvb2t1cChjb25zdCBzdHJ1Y3QgeGZybV9oYXNoX3N0YXRlX3B0cnNcbiBcdHJldHVybiBOVUxMO1xuIH1cbiBcbitzdGF0aWMgc3RydWN0IHhmcm1fc3RhdGUgKlxuK19feGZybV9zdGF0ZV9sb29rdXBfZXhhY3QoY29uc3Qgc3RydWN0IHhmcm1faGFzaF9zdGF0ZV9wdHJzICpzdGF0ZV9wdHJzLFxuK1x0XHRcdCAgY29uc3Qgc3RydWN0IHhmcm1fbWFyayAqbWFyayxcbitcdFx0XHQgIGNvbnN0IHhmcm1fYWRkcmVzc190ICpkYWRkcixcbitcdFx0XHQgIF9fYmUzMiBzcGksIHU4IHByb3RvLFxuK1x0XHRcdCAgdW5zaWduZWQgc2hvcnQgZmFtaWx5KVxuK3tcbitcdHJldHVybiBfX3hmcm1fc3RhdGVfbG9va3VwKHN0YXRlX3B0cnMsIG1hcmstXHUwMDNldiwgbWFyay1cdTAwM2VtLCB0cnVlLFxuK1x0XHRcdFx0ICAgZGFkZHIsIHNwaSwgcHJvdG8sIGZhbWlseSk7XG4rfVxuK1xuIHN0cnVjdCB4ZnJtX3N0YXRlICp4ZnJtX2lucHV0X3N0YXRlX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBtYXJrLFxuIFx0XHRcdFx0XHQgICBjb25zdCB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsXG4gXHRcdFx0XHRcdCAgIF9fYmUzMiBzcGksIHU4IHByb3RvLFxuQEAgLTEyMjgsNyArMTI1MCw3IEBAIHN0cnVjdCB4ZnJtX3N0YXRlICp4ZnJtX2lucHV0X3N0YXRlX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBtYXJrLFxuIFxuIFx0eGZybV9oYXNoX3B0cnNfZ2V0KG5ldCwgXHUwMDI2c3RhdGVfcHRycyk7XG4gXG4tXHR4ID0gX194ZnJtX3N0YXRlX2xvb2t1cChcdTAwMjZzdGF0ZV9wdHJzLCBtYXJrLCBkYWRkciwgc3BpLCBwcm90bywgZmFtaWx5KTtcbitcdHggPSBfX3hmcm1fc3RhdGVfbG9va3VwKFx1MDAyNnN0YXRlX3B0cnMsIG1hcmssIDAsIGZhbHNlLCBkYWRkciwgc3BpLCBwcm90bywgZmFtaWx5KTtcbiBcdGlmICh4KSB7XG4gXHRcdHNwaW5fbG9jayhcdTAwMjZuZXQtXHUwMDNleGZybS54ZnJtX3N0YXRlX2xvY2spO1xuIFx0XHRpZiAoeC1cdTAwM2VrbS5zdGF0ZSAhPSBYRlJNX1NUQVRFX1ZBTElEKSB7XG5AQCAtMTI1MiwxMSArMTI3NCwxMiBAQCBzdHJ1Y3QgeGZybV9zdGF0ZSAqeGZybV9pbnB1dF9zdGF0ZV9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCB1MzIgbWFyayxcbiB9XG4gRVhQT1JUX1NZTUJPTCh4ZnJtX2lucHV0X3N0YXRlX2xvb2t1cCk7XG4gXG4tc3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlICpfX3hmcm1fc3RhdGVfbG9va3VwX2J5YWRkcihjb25zdCBzdHJ1Y3QgeGZybV9oYXNoX3N0YXRlX3B0cnMgKnN0YXRlX3B0cnMsXG4tXHRcdFx0XHRcdFx0ICAgICB1MzIgbWFyayxcbi1cdFx0XHRcdFx0XHQgICAgIGNvbnN0IHhmcm1fYWRkcmVzc190ICpkYWRkcixcbi1cdFx0XHRcdFx0XHQgICAgIGNvbnN0IHhmcm1fYWRkcmVzc190ICpzYWRkcixcbi1cdFx0XHRcdFx0XHQgICAgIHU4IHByb3RvLCB1bnNpZ25lZCBzaG9ydCBmYW1pbHkpXG4rc3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlICpcbitfX3hmcm1fc3RhdGVfbG9va3VwX2J5YWRkcihjb25zdCBzdHJ1Y3QgeGZybV9oYXNoX3N0YXRlX3B0cnMgKnN0YXRlX3B0cnMsXG4rXHRcdFx0ICAgdTMyIG1hcmssIHUzMiBtYXNrLCBib29sIGV4YWN0LFxuK1x0XHRcdCAgIGNvbnN0IHhmcm1fYWRkcmVzc190ICpkYWRkcixcbitcdFx0XHQgICBjb25zdCB4ZnJtX2FkZHJlc3NfdCAqc2FkZHIsXG4rXHRcdFx0ICAgdTggcHJvdG8sIHVuc2lnbmVkIHNob3J0IGZhbWlseSlcbiB7XG4gXHR1bnNpZ25lZCBpbnQgaCA9IF9feGZybV9zcmNfaGFzaChkYWRkciwgc2FkZHIsIGZhbWlseSwgc3RhdGVfcHRycy1cdTAwM2VobWFzayk7XG4gXHRzdHJ1Y3QgeGZybV9zdGF0ZSAqeDtcbkBAIC0xMjY4LDcgKzEyOTEsNyBAQCBzdGF0aWMgc3RydWN0IHhmcm1fc3RhdGUgKl9feGZybV9zdGF0ZV9sb29rdXBfYnlhZGRyKGNvbnN0IHN0cnVjdCB4ZnJtX2hhc2hfc3RhdFxuIFx0XHQgICAgIXhmcm1fYWRkcl9lcXVhbChcdTAwMjZ4LVx1MDAzZXByb3BzLnNhZGRyLCBzYWRkciwgZmFtaWx5KSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0aWYgKChtYXJrIFx1MDAyNiB4LVx1MDAzZW1hcmsubSkgIT0geC1cdTAwM2VtYXJrLnYpXG4rXHRcdGlmICgheGZybV9zdGF0ZV9tYXJrX21hdGNoZXMoeCwgbWFyaywgbWFzaywgZXhhY3QpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRpZiAoIXhmcm1fc3RhdGVfaG9sZF9yY3UoeCkpXG4gXHRcdFx0Y29udGludWU7XG5AQCAtMTI4OCwxMCArMTMxMSwzMSBAQCBfX3hmcm1fc3RhdGVfbG9jYXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBpbnQgdXNlX3NwaSwgaW50IGZhbWlseSlcbiBcdHhmcm1faGFzaF9wdHJzX2dldChuZXQsIFx1MDAyNnN0YXRlX3B0cnMpO1xuIFxuIFx0aWYgKHVzZV9zcGkpXG4tXHRcdHJldHVybiBfX3hmcm1fc3RhdGVfbG9va3VwKFx1MDAyNnN0YXRlX3B0cnMsIG1hcmssIFx1MDAyNngtXHUwMDNlaWQuZGFkZHIsXG4rXHRcdHJldHVybiBfX3hmcm1fc3RhdGVfbG9va3VwKFx1MDAyNnN0YXRlX3B0cnMsIG1hcmssIDAsIGZhbHNlLCBcdTAwMjZ4LVx1MDAzZWlkLmRhZGRyLFxuIFx0XHRcdFx0XHQgICB4LVx1MDAzZWlkLnNwaSwgeC1cdTAwM2VpZC5wcm90bywgZmFtaWx5KTtcbiBcdGVsc2Vcbi1cdFx0cmV0dXJuIF9feGZybV9zdGF0ZV9sb29rdXBfYnlhZGRyKFx1MDAyNnN0YXRlX3B0cnMsIG1hcmssXG4rXHRcdHJldHVybiBfX3hmcm1fc3RhdGVfbG9va3VwX2J5YWRkcihcdTAwMjZzdGF0ZV9wdHJzLCBtYXJrLCAwLCBmYWxzZSxcbitcdFx0XHRcdFx0XHQgIFx1MDAyNngtXHUwMDNlaWQuZGFkZHIsXG4rXHRcdFx0XHRcdFx0ICBcdTAwMjZ4LVx1MDAzZXByb3BzLnNhZGRyLFxuK1x0XHRcdFx0XHRcdCAgeC1cdTAwM2VpZC5wcm90bywgZmFtaWx5KTtcbit9XG4rXG4rLyogVXNlZCBieSB4ZnJtX3N0YXRlX3VwZGF0ZSgpIG9ubHk7IHhmcm1fc3RhdGVfYWRkKCkncyBkdXAgY2hlY2sga2VlcHNcbisgKiB1c2luZyB0aGUgd2lsZGNhcmQgX194ZnJtX3N0YXRlX2xvY2F0ZSgpIGFib3ZlLlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgc3RydWN0IHhmcm1fc3RhdGUgKlxuK19feGZybV9zdGF0ZV9sb2NhdGVfZXhhY3Qoc3RydWN0IHhmcm1fc3RhdGUgKngsIGludCB1c2Vfc3BpLCBpbnQgZmFtaWx5KVxuK3tcbitcdHN0cnVjdCB4ZnJtX2hhc2hfc3RhdGVfcHRycyBzdGF0ZV9wdHJzO1xuK1x0c3RydWN0IG5ldCAqbmV0ID0geHNfbmV0KHgpO1xuK1xuK1x0eGZybV9oYXNoX3B0cnNfZ2V0KG5ldCwgXHUwMDI2c3RhdGVfcHRycyk7XG4rXG4rXHRpZiAodXNlX3NwaSlcbitcdFx0cmV0dXJuIF9feGZybV9zdGF0ZV9sb29rdXBfZXhhY3QoXHUwMDI2c3RhdGVfcHRycywgXHUwMDI2eC1cdTAwM2VtYXJrLCBcdTAwMjZ4LVx1MDAzZWlkLmRhZGRyLFxuK1x0XHRcdFx0XHRcdCB4LVx1MDAzZWlkLnNwaSwgeC1cdTAwM2VpZC5wcm90bywgZmFtaWx5KTtcbitcdGVsc2VcbitcdFx0cmV0dXJuIF9feGZybV9zdGF0ZV9sb29rdXBfYnlhZGRyKFx1MDAyNnN0YXRlX3B0cnMsIHgtXHUwMDNlbWFyay52LCB4LVx1MDAzZW1hcmsubSwgdHJ1ZSxcbiBcdFx0XHRcdFx0XHQgIFx1MDAyNngtXHUwMDNlaWQuZGFkZHIsXG4gXHRcdFx0XHRcdFx0ICBcdTAwMjZ4LVx1MDAzZXByb3BzLnNhZGRyLFxuIFx0XHRcdFx0XHRcdCAgeC1cdTAwM2VpZC5wcm90bywgZmFtaWx5KTtcbkBAIC0yMTc3LDEwICsyMjIxLDEyIEBAIGludCB4ZnJtX3N0YXRlX21pZ3JhdGVfaW5zdGFsbChjb25zdCBzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcbiBcdFx0XHQgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiBcdGlmIChtLVx1MDAzZW5ld19mYW1pbHkgPT0gbS1cdTAwM2VvbGRfZmFtaWx5IFx1MDAyNlx1MDAyNlxuLVx0ICAgIHhmcm1fYWRkcl9lcXVhbChcdTAwMjZ4LVx1MDAzZWlkLmRhZGRyLCBcdTAwMjZtLVx1MDAzZW5ld19kYWRkciwgbS1cdTAwM2VuZXdfZmFtaWx5KSkge1xuK1x0ICAgIHhmcm1fYWRkcl9lcXVhbChcdTAwMjZ4LVx1MDAzZWlkLmRhZGRyLCBcdTAwMjZtLVx1MDAzZW5ld19kYWRkciwgbS1cdTAwM2VuZXdfZmFtaWx5KSBcdTAwMjZcdTAwMjZcbitcdCAgICB4Yy1cdTAwM2VtYXJrLnYgPT0geC1cdTAwM2VtYXJrLnYgXHUwMDI2XHUwMDI2IHhjLVx1MDAzZW1hcmsubSA9PSB4LVx1MDAzZW1hcmsubSkge1xuIFx0XHQvKlxuLVx0XHQgKiBDYXJlIGlzIG5lZWRlZCB3aGVuIHRoZSBkZXN0aW5hdGlvbiBhZGRyZXNzIG9mIHRoZSBzdGF0ZSBpc1xuLVx0XHQgKiB0byBiZSB1cGRhdGVkIGFzIGl0IGlzIGEgcGFydCBvZiB0cmlwbGV0LlxuK1x0XHQgKiBDYXJlIGlzIG5lZWRlZCB3aGVuIHRoZSBkZXN0aW5hdGlvbiBhZGRyZXNzIG9yIG1hcmsgb2YgdGhlXG4rXHRcdCAqIHN0YXRlIGlzIHRvIGJlIHVwZGF0ZWQsIGFzIHRoZXkgYXJlIHBhcnQgb2YgdGhlIGxvb2t1cFxuK1x0XHQgKiB0cmlwbGV0LlxuIFx0XHQgKi9cbiBcdFx0eGZybV9zdGF0ZV9pbnNlcnQoeGMpO1xuIFx0fSBlbHNlIHtcbkBAIC0yMjI5LDcgKzIyNzUsNyBAQCBpbnQgeGZybV9zdGF0ZV91cGRhdGUoc3RydWN0IHhmcm1fc3RhdGUgKngpXG4gXHR0b19wdXQgPSBOVUxMO1xuIFxuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNm5ldC1cdTAwM2V4ZnJtLnhmcm1fc3RhdGVfbG9jayk7XG4tXHR4MSA9IF9feGZybV9zdGF0ZV9sb2NhdGUoeCwgdXNlX3NwaSwgeC1cdTAwM2Vwcm9wcy5mYW1pbHkpO1xuK1x0eDEgPSBfX3hmcm1fc3RhdGVfbG9jYXRlX2V4YWN0KHgsIHVzZV9zcGksIHgtXHUwMDNlcHJvcHMuZmFtaWx5KTtcbiBcbiBcdGVyciA9IC1FU1JDSDtcbiBcdGlmICgheDEpXG5AQCAtMjM3NCwxNCArMjQyMCwxNCBAQCB4ZnJtX3N0YXRlX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBtYXJrLCBjb25zdCB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsIF9fYmUzMlxuIFx0cmN1X3JlYWRfbG9jaygpO1xuIFx0eGZybV9oYXNoX3B0cnNfZ2V0KG5ldCwgXHUwMDI2c3RhdGVfcHRycyk7XG4gXG4tXHR4ID0gX194ZnJtX3N0YXRlX2xvb2t1cChcdTAwMjZzdGF0ZV9wdHJzLCBtYXJrLCBkYWRkciwgc3BpLCBwcm90bywgZmFtaWx5KTtcbitcdHggPSBfX3hmcm1fc3RhdGVfbG9va3VwKFx1MDAyNnN0YXRlX3B0cnMsIG1hcmssIDAsIGZhbHNlLCBkYWRkciwgc3BpLCBwcm90bywgZmFtaWx5KTtcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0cmV0dXJuIHg7XG4gfVxuIEVYUE9SVF9TWU1CT0woeGZybV9zdGF0ZV9sb29rdXApO1xuIFxuIHN0cnVjdCB4ZnJtX3N0YXRlICpcbi14ZnJtX3N0YXRlX2xvb2t1cF9ieWFkZHIoc3RydWN0IG5ldCAqbmV0LCB1MzIgbWFyayxcbit4ZnJtX3N0YXRlX2xvb2t1cF9ieWFkZHIoc3RydWN0IG5ldCAqbmV0LCB1MzIgbWFyaywgdTMyIG1hc2ssIGJvb2wgZXhhY3QsXG4gXHRcdFx0IGNvbnN0IHhmcm1fYWRkcmVzc190ICpkYWRkciwgY29uc3QgeGZybV9hZGRyZXNzX3QgKnNhZGRyLFxuIFx0XHRcdCB1OCBwcm90bywgdW5zaWduZWQgc2hvcnQgZmFtaWx5KVxuIHtcbkBAIC0yMzkyLDEyICsyNDM4LDI5IEBAIHhmcm1fc3RhdGVfbG9va3VwX2J5YWRkcihzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBtYXJrLFxuIFxuIFx0eGZybV9oYXNoX3B0cnNfZ2V0KG5ldCwgXHUwMDI2c3RhdGVfcHRycyk7XG4gXG4tXHR4ID0gX194ZnJtX3N0YXRlX2xvb2t1cF9ieWFkZHIoXHUwMDI2c3RhdGVfcHRycywgbWFyaywgZGFkZHIsIHNhZGRyLCBwcm90bywgZmFtaWx5KTtcbitcdHggPSBfX3hmcm1fc3RhdGVfbG9va3VwX2J5YWRkcihcdTAwMjZzdGF0ZV9wdHJzLCBtYXJrLCBtYXNrLCBleGFjdCwgZGFkZHIsIHNhZGRyLCBwcm90bywgZmFtaWx5KTtcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0cmV0dXJuIHg7XG4gfVxuIEVYUE9SVF9TWU1CT0woeGZybV9zdGF0ZV9sb29rdXBfYnlhZGRyKTtcbiBcbitzdHJ1Y3QgeGZybV9zdGF0ZSAqXG4reGZybV9zdGF0ZV9sb29rdXBfZXhhY3Qoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgeGZybV9tYXJrICptYXJrLFxuK1x0XHRcdGNvbnN0IHhmcm1fYWRkcmVzc190ICpkYWRkciwgX19iZTMyIHNwaSxcbitcdFx0XHR1OCBwcm90bywgdW5zaWduZWQgc2hvcnQgZmFtaWx5KVxuK3tcbitcdHN0cnVjdCB4ZnJtX2hhc2hfc3RhdGVfcHRycyBzdGF0ZV9wdHJzO1xuK1x0c3RydWN0IHhmcm1fc3RhdGUgKng7XG4rXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHR4ZnJtX2hhc2hfcHRyc19nZXQobmV0LCBcdTAwMjZzdGF0ZV9wdHJzKTtcbitcbitcdHggPSBfX3hmcm1fc3RhdGVfbG9va3VwX2V4YWN0KFx1MDAyNnN0YXRlX3B0cnMsIG1hcmssIGRhZGRyLCBzcGksIHByb3RvLCBmYW1pbHkpO1xuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXHRyZXR1cm4geDtcbit9XG4rRVhQT1JUX1NZTUJPTCh4ZnJtX3N0YXRlX2xvb2t1cF9leGFjdCk7XG4rXG4gc3RydWN0IHhmcm1fc3RhdGUgKlxuIHhmcm1fZmluZF9hY3Eoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgeGZybV9tYXJrICptYXJrLCB1OCBtb2RlLCB1MzIgcmVxaWQsXG4gXHQgICAgICB1MzIgaWZfaWQsIHUzMiBwY3B1X251bSwgdTggcHJvdG8sIGNvbnN0IHhmcm1fYWRkcmVzc190ICpkYWRkcixcbkBAIC0zMzA2LDcgKzMzNjksNyBAQCBpbnQgeGZybV9pbml0X3N0YXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuLVx0ZXJyID0geGZybV9pbml0X3JlcGxheSh4LCBOVUxMKTtcbitcdGVyciA9IHhmcm1faW5pdF9yZXBsYXkoeCwgZXh0YWNrKTtcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV91c2VyLmMgYi9uZXQveGZybS94ZnJtX3VzZXIuY1xuaW5kZXggNjM4NDc5NWVlNmIyNjkuLmEyMzE3ZTZlNjgwMmRkIDEwMDY0NFxuLS0tIGEvbmV0L3hmcm0veGZybV91c2VyLmNcbisrKyBiL25ldC94ZnJtL3hmcm1fdXNlci5jXG5AQCAtMTA4OSwxMSArMTA4OSwxMiBAQCBzdGF0aWMgc3RydWN0IHhmcm1fc3RhdGUgKnhmcm1fdXNlcl9zdGF0ZV9sb29rdXAoc3RydWN0IG5ldCAqbmV0LFxuIFx0c3RydWN0IHhmcm1fc3RhdGUgKnggPSBOVUxMO1xuIFx0c3RydWN0IHhmcm1fbWFyayBtO1xuIFx0aW50IGVycjtcbi1cdHUzMiBtYXJrID0geGZybV9tYXJrX2dldChhdHRycywgXHUwMDI2bSk7XG4rXG4rXHR4ZnJtX21hcmtfZ2V0KGF0dHJzLCBcdTAwMjZtKTtcbiBcbiBcdGlmICh4ZnJtX2lkX3Byb3RvX21hdGNoKHAtXHUwMDNlcHJvdG8sIElQU0VDX1BST1RPX0FOWSkpIHtcbiBcdFx0ZXJyID0gLUVTUkNIO1xuLVx0XHR4ID0geGZybV9zdGF0ZV9sb29rdXAobmV0LCBtYXJrLCBcdTAwMjZwLVx1MDAzZWRhZGRyLCBwLVx1MDAzZXNwaSwgcC1cdTAwM2Vwcm90bywgcC1cdTAwM2VmYW1pbHkpO1xuK1x0XHR4ID0geGZybV9zdGF0ZV9sb29rdXBfZXhhY3QobmV0LCBcdTAwMjZtLCBcdTAwMjZwLVx1MDAzZWRhZGRyLCBwLVx1MDAzZXNwaSwgcC1cdTAwM2Vwcm90bywgcC1cdTAwM2VmYW1pbHkpO1xuIFx0fSBlbHNlIHtcbiBcdFx0eGZybV9hZGRyZXNzX3QgKnNhZGRyID0gTlVMTDtcbiBcbkBAIC0xMTA0LDcgKzExMDUsNyBAQCBzdGF0aWMgc3RydWN0IHhmcm1fc3RhdGUgKnhmcm1fdXNlcl9zdGF0ZV9sb29rdXAoc3RydWN0IG5ldCAqbmV0LFxuIFx0XHR9XG4gXG4gXHRcdGVyciA9IC1FU1JDSDtcbi1cdFx0eCA9IHhmcm1fc3RhdGVfbG9va3VwX2J5YWRkcihuZXQsIG1hcmssXG4rXHRcdHggPSB4ZnJtX3N0YXRlX2xvb2t1cF9ieWFkZHIobmV0LCBtLnYsIG0ubSwgdHJ1ZSxcbiBcdFx0XHRcdFx0ICAgICBcdTAwMjZwLVx1MDAzZWRhZGRyLCBzYWRkcixcbiBcdFx0XHRcdFx0ICAgICBwLVx1MDAzZXByb3RvLCBwLVx1MDAzZWZhbWlseSk7XG4gXHR9XG5AQCAtMjc4OCwxNCArMjc4OSwxMyBAQCBzdGF0aWMgaW50IHhmcm1fZ2V0X2FlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuIFx0c3RydWN0IHNrX2J1ZmYgKnJfc2tiO1xuIFx0aW50IGVycjtcbiBcdHN0cnVjdCBrbV9ldmVudCBjO1xuLVx0dTMyIG1hcms7XG4gXHRzdHJ1Y3QgeGZybV9tYXJrIG07XG4gXHRzdHJ1Y3QgeGZybV9hZXZlbnRfaWQgKnAgPSBubG1zZ19kYXRhKG5saCk7XG4gXHRzdHJ1Y3QgeGZybV91c2Vyc2FfaWQgKmlkID0gXHUwMDI2cC1cdTAwM2VzYV9pZDtcbiBcbi1cdG1hcmsgPSB4ZnJtX21hcmtfZ2V0KGF0dHJzLCBcdTAwMjZtKTtcbitcdHhmcm1fbWFya19nZXQoYXR0cnMsIFx1MDAyNm0pO1xuIFxuLVx0eCA9IHhmcm1fc3RhdGVfbG9va3VwKG5ldCwgbWFyaywgXHUwMDI2aWQtXHUwMDNlZGFkZHIsIGlkLVx1MDAzZXNwaSwgaWQtXHUwMDNlcHJvdG8sIGlkLVx1MDAzZWZhbWlseSk7XG4rXHR4ID0geGZybV9zdGF0ZV9sb29rdXBfZXhhY3QobmV0LCBcdTAwMjZtLCBcdTAwMjZpZC1cdTAwM2VkYWRkciwgaWQtXHUwMDNlc3BpLCBpZC1cdTAwM2Vwcm90bywgaWQtXHUwMDNlZmFtaWx5KTtcbiBcdGlmICh4ID09IE5VTEwpXG4gXHRcdHJldHVybiAtRVNSQ0g7XG4gXG5AQCAtMjgzNiw3ICsyODM2LDYgQEAgc3RhdGljIGludCB4ZnJtX25ld19hZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbiBcdHN0cnVjdCB4ZnJtX3N0YXRlICp4O1xuIFx0c3RydWN0IGttX2V2ZW50IGM7XG4gXHRpbnQgZXJyID0gLUVJTlZBTDtcbi1cdHUzMiBtYXJrID0gMDtcbiBcdHN0cnVjdCB4ZnJtX21hcmsgbTtcbiBcdHN0cnVjdCB4ZnJtX2FldmVudF9pZCAqcCA9IG5sbXNnX2RhdGEobmxoKTtcbiBcdHN0cnVjdCBubGF0dHIgKnJwID0gYXR0cnNbWEZSTUFfUkVQTEFZX1ZBTF07XG5AQCAtMjg1Niw5ICsyODU1LDEwIEBAIHN0YXRpYyBpbnQgeGZybV9uZXdfYWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4gXHRcdHJldHVybiBlcnI7XG4gXHR9XG4gXG4tXHRtYXJrID0geGZybV9tYXJrX2dldChhdHRycywgXHUwMDI2bSk7XG4rXHR4ZnJtX21hcmtfZ2V0KGF0dHJzLCBcdTAwMjZtKTtcbiBcbi1cdHggPSB4ZnJtX3N0YXRlX2xvb2t1cChuZXQsIG1hcmssIFx1MDAyNnAtXHUwMDNlc2FfaWQuZGFkZHIsIHAtXHUwMDNlc2FfaWQuc3BpLCBwLVx1MDAzZXNhX2lkLnByb3RvLCBwLVx1MDAzZXNhX2lkLmZhbWlseSk7XG4rXHR4ID0geGZybV9zdGF0ZV9sb29rdXBfZXhhY3QobmV0LCBcdTAwMjZtLCBcdTAwMjZwLVx1MDAzZXNhX2lkLmRhZGRyLCBwLVx1MDAzZXNhX2lkLnNwaSxcbitcdFx0XHRcdCAgICBwLVx1MDAzZXNhX2lkLnByb3RvLCBwLVx1MDAzZXNhX2lkLmZhbWlseSk7XG4gXHRpZiAoeCA9PSBOVUxMKVxuIFx0XHRyZXR1cm4gLUVTUkNIO1xuIFxuQEAgLTI5OTIsOSArMjk5MiwxMCBAQCBzdGF0aWMgaW50IHhmcm1fYWRkX3NhX2V4cGlyZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbiBcdHN0cnVjdCB4ZnJtX3VzZXJfZXhwaXJlICp1ZSA9IG5sbXNnX2RhdGEobmxoKTtcbiBcdHN0cnVjdCB4ZnJtX3VzZXJzYV9pbmZvICpwID0gXHUwMDI2dWUtXHUwMDNlc3RhdGU7XG4gXHRzdHJ1Y3QgeGZybV9tYXJrIG07XG4tXHR1MzIgbWFyayA9IHhmcm1fbWFya19nZXQoYXR0cnMsIFx1MDAyNm0pO1xuIFxuLVx0eCA9IHhmcm1fc3RhdGVfbG9va3VwKG5ldCwgbWFyaywgXHUwMDI2cC1cdTAwM2VpZC5kYWRkciwgcC1cdTAwM2VpZC5zcGksIHAtXHUwMDNlaWQucHJvdG8sIHAtXHUwMDNlZmFtaWx5KTtcbitcdHhmcm1fbWFya19nZXQoYXR0cnMsIFx1MDAyNm0pO1xuK1xuK1x0eCA9IHhmcm1fc3RhdGVfbG9va3VwX2V4YWN0KG5ldCwgXHUwMDI2bSwgXHUwMDI2cC1cdTAwM2VpZC5kYWRkciwgcC1cdTAwM2VpZC5zcGksIHAtXHUwMDNlaWQucHJvdG8sIHAtXHUwMDNlZmFtaWx5KTtcbiBcbiBcdGVyciA9IC1FTk9FTlQ7XG4gXHRpZiAoeCA9PSBOVUxMKVxuQEAgLTMzNjEsOSArMzM2Miw5IEBAIHN0YXRpYyBpbnQgeGZybV9kb19taWdyYXRlX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuIFxuIFx0Y29weV9mcm9tX3VzZXJfbWlncmF0ZV9zdGF0ZShcdTAwMjZtLCB1bSk7XG4gXG4tXHR4ID0geGZybV9zdGF0ZV9sb29rdXAobmV0LCBtLm9sZF9tYXJrLnYgXHUwMDI2IG0ub2xkX21hcmsubSxcbi1cdFx0XHQgICAgICBcdTAwMjZ1bS1cdTAwM2VpZC5kYWRkciwgdW0tXHUwMDNlaWQuc3BpLFxuLVx0XHRcdCAgICAgIHVtLVx1MDAzZWlkLnByb3RvLCB1bS1cdTAwM2VpZC5mYW1pbHkpO1xuK1x0eCA9IHhmcm1fc3RhdGVfbG9va3VwX2V4YWN0KG5ldCwgXHUwMDI2bS5vbGRfbWFyayxcbitcdFx0XHRcdCAgICBcdTAwMjZ1bS1cdTAwM2VpZC5kYWRkciwgdW0tXHUwMDNlaWQuc3BpLFxuK1x0XHRcdFx0ICAgIHVtLVx1MDAzZWlkLnByb3RvLCB1bS1cdTAwM2VpZC5mYW1pbHkpO1xuIFx0aWYgKCF4KSB7XG4gXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCJDYW4gbm90IGZpbmQgc3RhdGVcIik7XG4gXHRcdHJldHVybiAtRVNSQ0g7XG5AQCAtMzQzNCwxOCArMzQzNSwyMyBAQCBzdGF0aWMgaW50IHhmcm1fZG9fbWlncmF0ZV9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbiBcdFx0XHRcdFx0XHQgICAgICAgeC1cdTAwM2VuYXRfa2VlcGFsaXZlX2ludGVydmFsKTtcbiBcbiBcdGlmIChtLm5ld19mYW1pbHkgIT0gdW0tXHUwMDNlaWQuZmFtaWx5IHx8XG4tXHQgICAgIXhmcm1fYWRkcl9lcXVhbChcdTAwMjZtLm5ld19kYWRkciwgXHUwMDI2dW0tXHUwMDNlaWQuZGFkZHIsIHVtLVx1MDAzZWlkLmZhbWlseSkpIHtcbitcdCAgICAheGZybV9hZGRyX2VxdWFsKFx1MDAyNm0ubmV3X2RhZGRyLCBcdTAwMjZ1bS1cdTAwM2VpZC5kYWRkciwgdW0tXHUwMDNlaWQuZmFtaWx5KSB8fFxuK1x0ICAgIChtLm5ld19tYXJrIFx1MDAyNlx1MDAyNiAobS5uZXdfbWFyay1cdTAwM2V2ICE9IHgtXHUwMDNlbWFyay52IHx8XG4rXHRcdFx0ICAgbS5uZXdfbWFyay1cdTAwM2VtICE9IHgtXHUwMDNlbWFyay5tKSkpIHtcbiBcdFx0dTMyIG5ld19tYXJrX2tleSA9IG0ubmV3X21hcmsgPyBtLm5ld19tYXJrLVx1MDAzZXYgXHUwMDI2IG0ubmV3X21hcmstXHUwMDNlbSA6XG4tXHRcdFx0XHRcdFx0bS5vbGRfbWFyay52IFx1MDAyNiBtLm9sZF9tYXJrLm07XG4rXHRcdFx0XHRcdFx0eC1cdTAwM2VtYXJrLnYgXHUwMDI2IHgtXHUwMDNlbWFyay5tO1xuIFx0XHRzdHJ1Y3QgeGZybV9zdGF0ZSAqeF9uZXc7XG4gXG4gXHRcdHhfbmV3ID0geGZybV9zdGF0ZV9sb29rdXAobmV0LCBuZXdfbWFya19rZXksIFx1MDAyNm0ubmV3X2RhZGRyLFxuIFx0XHRcdFx0XHQgIHVtLVx1MDAzZWlkLnNwaSwgdW0tXHUwMDNlaWQucHJvdG8sIG0ubmV3X2ZhbWlseSk7XG4gXHRcdGlmICh4X25ldykge1xuIFx0XHRcdHhmcm1fc3RhdGVfcHV0KHhfbmV3KTtcbi1cdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwiTmV3IFNBIHR1cGxlIGFscmVhZHkgb2NjdXBpZWRcIik7XG4tXHRcdFx0ZXJyID0gLUVFWElTVDtcbi1cdFx0XHRnb3RvIG91dDtcbitcdFx0XHRpZiAoeF9uZXcgIT0geCkge1xuK1x0XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcIk5ldyBTQSB0dXBsZSBhbHJlYWR5IG9jY3VwaWVkXCIpO1xuK1x0XHRcdFx0ZXJyID0gLUVFWElTVDtcbitcdFx0XHRcdGdvdG8gb3V0O1xuK1x0XHRcdH1cbitcdFx0XHQvKiBzZWxmLW1hdGNoIHZpYSB3aWRlIG1hcmsgbWFzazsgbm90IGEgY29sbGlzaW9uICovXG4gXHRcdH1cbiBcdH1cbiBcbkBAIC0zNDY3LDYgKzM0NzMsNyBAQCBzdGF0aWMgaW50IHhmcm1fZG9fbWlncmF0ZV9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbiBcdF9feGZybV9zdGF0ZV9kZWxldGUoeCk7XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZ4LVx1MDAzZWxvY2spO1xuIFxuK1x0eGZybV9zdGF0ZV9ob2xkKHhjKTtcbiBcdGVyciA9IHhmcm1fc3RhdGVfbWlncmF0ZV9pbnN0YWxsKHgsIHhjLCBcdTAwMjZtLCBleHRhY2spO1xuIFx0aWYgKGVyciBcdTAwM2MgMCkge1xuIFx0XHQvKlxuQEAgLTM0NzQsNiArMzQ4MSw3IEBAIHN0YXRpYyBpbnQgeGZybV9kb19taWdyYXRlX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuIFx0XHQgKiBmcmVlIHVuZGVyIHhmcm1fY2ZnX211dGV4LiBCb3RoIFNBcyBhcmUgZ29uZSBpZiBpdCBkb2VzO1xuIFx0XHQgKiByZXN0b3JpbmcgeCB3b3VsZCByaXNrIFNOL0lWIHJldXNlLlxuIFx0XHQgKi9cbitcdFx0eGZybV9zdGF0ZV9wdXQoeGMpO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbkBAIC0zNDkyLDEwICszNTAwLDEzIEBAIHN0YXRpYyBpbnQgeGZybV9kb19taWdyYXRlX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuIFx0XHRlcnIgPSAwO1xuIFx0fVxuIFxuK1x0eGZybV9zdGF0ZV9wdXQoeGMpO1xuIG91dDpcbiBcdHhmcm1fc3RhdGVfcHV0KHgpO1xuIFx0cmV0dXJuIGVycjtcbiBvdXRfeGM6XG4rXHRpZiAobS54dW8pXG4rXHRcdHhmcm1fZGV2X3N0YXRlX2RlbGV0ZSh4Yyk7XG4gXHR4Yy1cdTAwM2VrbS5zdGF0ZSA9IFhGUk1fU1RBVEVfREVBRDtcbiBcdHhmcm1fc3RhdGVfcHV0KHhjKTtcbiBcdHhmcm1fc3RhdGVfcHV0KHgpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC94ZnJtX3N0YXRlLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3hmcm1fc3RhdGUuc2hcbmluZGV4IGY2YzU0YTY0OTZkNzE0Li5mMjAyMDczNzI2YTlmNCAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC94ZnJtX3N0YXRlLnNoXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQveGZybV9zdGF0ZS5zaFxuQEAgLTQyLDcgKzQyLDExIEBAIHRlc3RzPVwiXG4gXHRtdHVfaXB2NF9yMlx0XHRcdElQdjQgTVRVIGV4Y2VlZGVkIGZyb20gRVNQIHJvdXRlciByMlxuIFx0bXR1X2lwdjZfcjJcdFx0XHRJUHY2IE1UVSBleGNlZWRlZCBmcm9tIEVTUCByb3V0ZXIgcjJcbiBcdG10dV9pcHY0X3IzXHRcdFx0SVB2NCBNVFUgZXhjZWVkZWQgZnJvbSByb3V0ZXIgcjNcbi1cdG10dV9pcHY2X3IzXHRcdFx0SVB2NiBNVFUgZXhjZWVkZWQgZnJvbSByb3V0ZXIgcjNcIlxuK1x0bXR1X2lwdjZfcjNcdFx0XHRJUHY2IE1UVSBleGNlZWRlZCBmcm9tIHJvdXRlciByM1xuK1x0bWFya193aWxkY2FyZF9zaGFkb3dcdFx0bWFyazogd2lsZGNhcmQgU0EgaW4gYnktc3BpIHN0YXRlIGdldCBsb29rdXBcbitcdG1hcmtfd2lsZGNhcmRfZGVsZXRlXHRcdG1hcms6IHdpbGRjYXJkIFNBIGluIGJ5LXNwaSBzdGF0ZSBkZWxldGVcbitcdG1hcmtfd2lsZGNhcmRfZ2V0X2FkZHJcdFx0bWFyazogd2lsZGNhcmQgU0EgaW4gYnktYWRkcmVzcyBnZXQgbG9va3VwXG4rXHRtYXJrX3dpbGRjYXJkX2RlbGV0ZV9hZGRyXHRtYXJrOiB3aWxkY2FyZCBTQSBpbiBieS1hZGRyZXNzIGRlbGV0ZVwiXG4gXG4gcHJlZml4ND1cIjEwLjFcIlxuIHByZWZpeDY9XCJmYzAwXCJcbkBAIC0xMDEsNiArMTA1LDEwIEBAIHJ1bl90ZXN0KCkge1xuIFx0XHRtdHVfaXB2Nl9yMikgICAgICAgICB0ZXN0X210dV9pcHY2X3IyIDs7XG4gXHRcdG10dV9pcHY0X3IzKSAgICAgICAgIHRlc3RfbXR1X2lwdjRfcjMgOztcbiBcdFx0bXR1X2lwdjZfcjMpICAgICAgICAgdGVzdF9tdHVfaXB2Nl9yMyA7O1xuK1x0XHRtYXJrX3dpbGRjYXJkX3NoYWRvdykgICAgICB0ZXN0X21hcmtfd2lsZGNhcmRfc2hhZG93IDs7XG4rXHRcdG1hcmtfd2lsZGNhcmRfZGVsZXRlKSAgICAgIHRlc3RfbWFya193aWxkY2FyZF9kZWxldGUgOztcbitcdFx0bWFya193aWxkY2FyZF9nZXRfYWRkcikgICAgdGVzdF9tYXJrX3dpbGRjYXJkX2dldF9hZGRyIDs7XG4rXHRcdG1hcmtfd2lsZGNhcmRfZGVsZXRlX2FkZHIpIHRlc3RfbWFya193aWxkY2FyZF9kZWxldGVfYWRkciA7O1xuIFx0XHRlc2FjXG4gXHRcdHJldD0kP1xuIFxuQEAgLTE2Nyw2ICsxNzUsOCBAQCBzZXR1cF9uYW1lc3BhY2VzKCkge1xuIFx0WyAtbiBcIiR7TlNfUzJ9XCIgXSBcdTAwMjZcdTAwMjYgbnNfczI9KGlwIG5ldG5zIGV4ZWMgXCIke05TX1MyfVwiKSBcdTAwMjZcdTAwMjYgbnNfYWN0aXZlPVwiJHtuc19hY3RpdmV9ICROU19TMlwiXG4gXHRbIC1uIFwiJHtOU19SM31cIiBdIFx1MDAyNlx1MDAyNiBuc19yMz0oaXAgbmV0bnMgZXhlYyBcIiR7TlNfUjN9XCIpIFx1MDAyNlx1MDAyNiBuc19hY3RpdmU9XCIke25zX2FjdGl2ZX0gJE5TX1IzXCJcbiBcdFsgLW4gXCIke05TX0J9XCIgXSBcdTAwMjZcdTAwMjYgbnNfYWN0aXZlPVwiJHtuc19hY3RpdmV9ICROU19CXCJcbitcbitcdHJldHVybiAwXG4gfVxuIFxuIGFkZHJfYWRkKCkge1xuQEAgLTI5NSw2ICszMDUsMTggQEAgc2V0dXBfbnNfc2V0X3Y2eCgpIHtcbiBcdHNldF94ZnJtX3BhcmFtc1xuIH1cbiBcbitzZXR1cF9uc19zZXRfc2ltcGxlKCkge1xuK1x0IyBTaW5nbGUgbmFtZXNwYWNlLCBubyB2ZXRocy9yb3V0ZXMuXG4rXHRuc19zZXQ9XCJhXCJcbitcdGltYXg9MVxuK1x0c3JjPVwiMTAuMS4xLjFcIlxuK1x0ZHN0PVwiMTAuMS4xLjJcIlxuK1x0c3JjX25ldD1cIjEwLjEuMC4wLzI0XCJcbitcdGRzdF9uZXQ9XCIxMC4yLjAuMC8yNFwiXG4rXG4rXHRzZXRfeGZybV9wYXJhbXNcbit9XG4rXG4gc2V0dXBfbmV0d29yaygpIHtcbiBcdCMgQ3JlYXRlIHZldGhzIGFuZCBhZGQgYWRkcmVzc2VzXG4gXHRsb2NhbCAtYSBuc19jbWRcbkBAIC00MDMsNiArNDI1LDcgQEAgc2V0dXAoKSB7XG4gXHRcdG5zX3NldF92NHgpICAgIHNldHVwX25zX3NldF92NHggOztcbiBcdFx0bnNfc2V0X3Y2KSAgICAgc2V0dXBfbnNfc2V0X3Y2IDs7XG4gXHRcdG5zX3NldF92NngpICAgIHNldHVwX25zX3NldF92NnggOztcbitcdFx0bnNfc2V0X3NpbXBsZSkgc2V0dXBfbnNfc2V0X3NpbXBsZSA7O1xuIFx0XHRuYW1lc3BhY2VzKSAgICBzZXR1cF9uYW1lc3BhY2VzIDs7XG4gXHRcdG5ldHdvcmspICAgICAgIHNldHVwX25ldHdvcmsgOztcbiBcdFx0eGZybSkgICAgICAgICAgc2V0dXBfeGZybSA7O1xuQEAgLTU0OCw2ICs1NzEsMTExIEBAIHRlc3RfbXR1X2lwdjZfcjMoKSB7XG4gXHRyZXR1cm4gXCIke3JjfVwiXG4gfVxuIFxuKyMgU0FfZGVjb3kgKG1hcmsgMC8wLCBhZGRlZCBzZWNvbmQpIHNoYWRvd3MgU0FfdGFyZ2V0IChtYXJrIDEvMSkgb24gYVxuKyMgd2lsZGNhcmQgbWFyayBsb29rdXAuIE5vIHRyYWZmaWMgc2VudDsgdGhlc2Ugb25seSBleGVyY2lzZSB0aGUgU0FELlxuK1xuK3Rlc3RfbWFya193aWxkY2FyZF9zaGFkb3coKSB7XG4rXHRzZXR1cCBuc19zZXRfc2ltcGxlIG5hbWVzcGFjZXMgfHwgcmV0dXJuIFwiJGtzZnRfc2tpcFwiXG4rXHRsb2NhbCByZXN1bHQ9MFxuK1xuK1x0cnVuX2NtZCBcIiR7bnNfYVtAXX1cIiBpcCB4ZnJtIHN0YXRlIGFkZCBcXFxuK1x0XHRzcmMgXCIke3NyY31cIiBkc3QgXCIke2RzdH1cIiBwcm90byBlc3Agc3BpIDB4MTAwMCBcXFxuK1x0XHRyZXFpZCAxMDAgbW9kZSB0dW5uZWwgXFxcbitcdFx0YWVhZCAncmZjNDEwNihnY20oYWVzKSknIDB4MTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSA5NiBcXFxuK1x0XHRtYXJrIDEgbWFzayAxXG4rXG4rXHRydW5fY21kIFwiJHtuc19hW0BdfVwiIGlwIHhmcm0gc3RhdGUgYWRkIFxcXG4rXHRcdHNyYyBcIiR7c3JjfVwiIGRzdCBcIiR7ZHN0fVwiIHByb3RvIGVzcCBzcGkgMHgxMDAwIFxcXG4rXHRcdHJlcWlkIDEwMCBtb2RlIHR1bm5lbCBcXFxuK1x0XHRhZWFkICdyZmM0MTA2KGdjbShhZXMpKScgMHgyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIDk2IFxcXG4rXHRcdG1hcmsgMCBtYXNrIDBcbitcbitcdHJ1bl9jbWRfZXJyIFwiJHtuc19hW0BdfVwiIGlwIHhmcm0gc3RhdGUgZ2V0IFxcXG4rXHRcdGRzdCBcIiR7ZHN0fVwiIHByb3RvIGVzcCBzcGkgMHgxMDAwIFxcXG4rXHRcdG1hcmsgMSBtYXNrIDFcbitcbitcdCMgRXhwZWN0ZWQ6IFNBX3RhcmdldCAobWFyayAweDEvMHgxKS4gQWN0dWFsIChidWcpOiBTQV9kZWNveSAobWFyayAwLzApLlxuK1x0ZWNobyBcIiRvdXRcIiB8IGdyZXAgLXEgXCJtYXJrIDB4MS8weDFcIiB8fCByZXN1bHQ9MVxuK1xuK1x0cmV0dXJuIFwiJHtyZXN1bHR9XCJcbit9XG4rXG4rdGVzdF9tYXJrX3dpbGRjYXJkX2RlbGV0ZSgpIHtcbitcdHNldHVwIG5zX3NldF9zaW1wbGUgbmFtZXNwYWNlcyB8fCByZXR1cm4gXCIka3NmdF9za2lwXCJcbitcdGxvY2FsIHJlc3VsdD0wXG4rXG4rXHRydW5fY21kIFwiJHtuc19hW0BdfVwiIGlwIHhmcm0gc3RhdGUgYWRkIFxcXG4rXHRcdHNyYyBcIiR7c3JjfVwiIGRzdCBcIiR7ZHN0fVwiIHByb3RvIGVzcCBzcGkgMHgxMDAwIFxcXG4rXHRcdHJlcWlkIDEwMCBtb2RlIHR1bm5lbCBcXFxuK1x0XHRhZWFkICdyZmM0MTA2KGdjbShhZXMpKScgMHgxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDk2IFxcXG4rXHRcdG1hcmsgMSBtYXNrIDFcbitcbitcdHJ1bl9jbWQgXCIke25zX2FbQF19XCIgaXAgeGZybSBzdGF0ZSBhZGQgXFxcbitcdFx0c3JjIFwiJHtzcmN9XCIgZHN0IFwiJHtkc3R9XCIgcHJvdG8gZXNwIHNwaSAweDEwMDAgXFxcbitcdFx0cmVxaWQgMTAwIG1vZGUgdHVubmVsIFxcXG4rXHRcdGFlYWQgJ3JmYzQxMDYoZ2NtKGFlcykpJyAweDIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIgOTYgXFxcbitcdFx0bWFyayAwIG1hc2sgMFxuK1xuK1x0cnVuX2NtZCBcIiR7bnNfYVtAXX1cIiBpcCB4ZnJtIHN0YXRlIGRlbGV0ZSBcXFxuK1x0XHRkc3QgXCIke2RzdH1cIiBwcm90byBlc3Agc3BpIDB4MTAwMCBcXFxuK1x0XHRtYXJrIDEgbWFzayAxXG4rXG4rXHRydW5fY21kX2VyciBcIiR7bnNfYVtAXX1cIiBpcCB4ZnJtIHN0YXRlIHNob3dcbitcdGVjaG8gXCIkb3V0XCIgfCBncmVwIC1xIFwibWFyayAweDEvMHgxXCIgXHUwMDI2XHUwMDI2IHJlc3VsdD0xXG4rXG4rXHRyZXR1cm4gXCIke3Jlc3VsdH1cIlxuK31cbitcbisjIGJ5LWFkZHJlc3MgY291bnRlcnBhcnQ6IHByb3RvIHJvdXRlMi9oYW8gKElQdjYgbW9iaWxpdHkpIGhhdmUgbm8gU1BJLFxuKyMgc28geGZybV91c2VyX3N0YXRlX2xvb2t1cCgpIHJlc29sdmVzIHRoZW0gYnkgYWRkcmVzcyBpbnN0ZWFkLlxuK1xuK3Rlc3RfbWFya193aWxkY2FyZF9nZXRfYWRkcigpIHtcbitcdHNldHVwIG5zX3NldF9zaW1wbGUgbmFtZXNwYWNlcyB8fCByZXR1cm4gXCIka3NmdF9za2lwXCJcbitcdGxvY2FsIHJlc3VsdD0wXG4rXHRsb2NhbCBzcmM2PVwiZmMwMDo5OjoxXCJcbitcdGxvY2FsIGRzdDY9XCJmYzAwOjk6OjJcIlxuK1xuK1x0cnVuX2NtZCBcIiR7bnNfYVtAXX1cIiBpcCB4ZnJtIHN0YXRlIGFkZCBcXFxuK1x0XHRzcmMgXCIke3NyYzZ9XCIgZHN0IFwiJHtkc3Q2fVwiIHByb3RvIHJvdXRlMiBtb2RlIHJvIGNvYSBmYzAwOjk6OjMgXFxcbitcdFx0bWFyayAxIG1hc2sgMVxuK1xuK1x0cnVuX2NtZCBcIiR7bnNfYVtAXX1cIiBpcCB4ZnJtIHN0YXRlIGFkZCBcXFxuK1x0XHRzcmMgXCIke3NyYzZ9XCIgZHN0IFwiJHtkc3Q2fVwiIHByb3RvIHJvdXRlMiBtb2RlIHJvIGNvYSBmYzAwOjk6OjQgXFxcbitcdFx0bWFyayAwIG1hc2sgMFxuK1xuK1x0cnVuX2NtZF9lcnIgXCIke25zX2FbQF19XCIgaXAgeGZybSBzdGF0ZSBnZXQgXFxcbitcdFx0c3JjIFwiJHtzcmM2fVwiIGRzdCBcIiR7ZHN0Nn1cIiBwcm90byByb3V0ZTIgXFxcbitcdFx0bWFyayAxIG1hc2sgMVxuK1xuK1x0ZWNobyBcIiRvdXRcIiB8IGdyZXAgLXEgXCJtYXJrIDB4MS8weDFcIiB8fCByZXN1bHQ9MVxuK1xuK1x0cmV0dXJuIFwiJHtyZXN1bHR9XCJcbit9XG4rXG4rdGVzdF9tYXJrX3dpbGRjYXJkX2RlbGV0ZV9hZGRyKCkge1xuK1x0c2V0dXAgbnNfc2V0X3NpbXBsZSBuYW1lc3BhY2VzIHx8IHJldHVybiBcIiRrc2Z0X3NraXBcIlxuK1x0bG9jYWwgcmVzdWx0PTBcbitcdGxvY2FsIHNyYzY9XCJmYzAwOjk6OjFcIlxuK1x0bG9jYWwgZHN0Nj1cImZjMDA6OTo6MlwiXG4rXG4rXHRydW5fY21kIFwiJHtuc19hW0BdfVwiIGlwIHhmcm0gc3RhdGUgYWRkIFxcXG4rXHRcdHNyYyBcIiR7c3JjNn1cIiBkc3QgXCIke2RzdDZ9XCIgcHJvdG8gcm91dGUyIG1vZGUgcm8gY29hIGZjMDA6OTo6MyBcXFxuK1x0XHRtYXJrIDEgbWFzayAxXG4rXG4rXHRydW5fY21kIFwiJHtuc19hW0BdfVwiIGlwIHhmcm0gc3RhdGUgYWRkIFxcXG4rXHRcdHNyYyBcIiR7c3JjNn1cIiBkc3QgXCIke2RzdDZ9XCIgcHJvdG8gcm91dGUyIG1vZGUgcm8gY29hIGZjMDA6OTo6NCBcXFxuK1x0XHRtYXJrIDAgbWFzayAwXG4rXG4rXHRydW5fY21kIFwiJHtuc19hW0BdfVwiIGlwIHhmcm0gc3RhdGUgZGVsZXRlIFxcXG4rXHRcdHNyYyBcIiR7c3JjNn1cIiBkc3QgXCIke2RzdDZ9XCIgcHJvdG8gcm91dGUyIFxcXG4rXHRcdG1hcmsgMSBtYXNrIDFcbitcbitcdHJ1bl9jbWRfZXJyIFwiJHtuc19hW0BdfVwiIGlwIHhmcm0gc3RhdGUgc2hvd1xuK1x0ZWNobyBcIiRvdXRcIiB8IGdyZXAgLXEgXCJtYXJrIDB4MS8weDFcIiBcdTAwMjZcdTAwMjYgcmVzdWx0PTFcbitcbitcdHJldHVybiBcIiR7cmVzdWx0fVwiXG4rfVxuK1xuICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4gI1xuIHVzYWdlKCkge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTU6MTU6MjcuNTc0Mzk4NjU0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYyNzgyMTQzNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBYRlJNIFN0YXRlIExvb2t1cCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCBhbHRlcnMgdGhlIHdheSB0aGUgWEZSTSAoSVBzZWMpIHN0YXRlIGxvb2t1cCB3b3JrcyB3aXRoaW4gdGhlIGtlcm5lbC4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBjaGFuZ2UgaXMgdG8gbWFrZSB0aGUgYHhmcm1fc3RhdGVfbG9va3VwX2J5YWRkcmAsIGB4ZnJtX3N0YXRlX2xvb2t1cGAsIGB4ZnJtX3N0YXRlX2xvb2t1cF9leGFjdGAsIGFuZCByZWxhdGVkIGZ1bmN0aW9ucyB1c2UgKmV4YWN0KiBtYXRjaGluZyBvZiBtYXJrcyBhbmQgbWFza3MsIGluc3RlYWQgb2YgdGhlIGN1cnJlbnQgd2lsZGNhcmQgYXBwcm9hY2gsIHdoZW4gYSByZXF1ZXN0IG9yaWdpbmF0ZXMgZnJvbSB0aGUgY29udHJvbCBwbGFuZSAocHJpbWFyaWx5IGB4ZnJtX3VzZXIuY2ApLiBUaGlzIGlzIGEgY3J1Y2lhbCBmaXgsIGJlY2F1c2UgYSB3aWxkY2FyZCBTZWN1cml0eSBBc3NvY2lhdGlvbiAoU0EpIHdpdGggYSBtYXJrIG9mIDAvMCBjYW4gY3VycmVudGx5IG92ZXJzaGFkb3cgYSBtb3JlIHNwZWNpZmljIFNBIChlLmcuLCBtYXJrIDEvMSkgd2hlbiB3ZSdyZSBkZWFsaW5nIHdpdGggY29udHJvbCBwbGFuZSBhY3Rpb25zIGxpa2UgR0VULCBERUxFVEUsIG9yIE1JR1JBVEUuIFRoYXQncyBhIGNsYXNzaWMgcmFjZSBjb25kaXRpb24sIGFuZCB0aGlzIHBhdGNoIHNob3VsZCBhZGRyZXNzIGl0IGRpcmVjdGx5LlxuXG5NeSBpbW1lZGlhdGUgdGhvdWdodHMgYXJlLCBsZXQncyBuYWlsIGRvd24gcHJlY2lzZWx5IHdoaWNoIGNvZGUgaXMgbW9kaWZpZWQuIEkgc2VlIGNoYW5nZXMgaW4gYG5ldC94ZnJtL3hmcm1fc3RhdGUuY2AsIGBuZXQveGZybS94ZnJtX3VzZXIuY2AsIGBuZXQvaXB2Ni94ZnJtNl9pbnB1dC5jYCwgYW5kIGBpbmNsdWRlL25ldC94ZnJtLmhgLiAgUGx1cywgdGhlcmUgYXJlIHRoZXNlIG5ldyB0ZXN0cyBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3hmcm1fc3RhdGUuc2hgIHdoaWNoIGFyZSBlbmNvdXJhZ2luZyAtIGdvb2QgdG8gc2VlIHRoZXkncmUgYnVpbGRpbmcgdGVzdCBjb3ZlcmFnZSBhcm91bmQgdGhpcy5cblxuRnVuY3Rpb25hbGx5LCB0aGlzIGlzIGFsbCBhYm91dCBob3cgSVBzZWMgU0FzIGFyZSBsb29rZWQgdXAgYW5kIGhhbmRsZWQgdmlhIG5ldGxpbmsuIFRoZSBpbXBhY3QgaXMgc2lnbmlmaWNhbnQgZm9yIG9wZXJhdGlvbnMgbGlrZSBzdGF0ZSBkZWxldGlvbiwgbWlncmF0aW9uLCBhbmQgcmV0cmlldmFsLiBJIG5lZWQgdG8gZm9jdXMgb24gdGhvc2Ugc3BlY2lmaWMgbmV0bGluayBtZXNzYWdlcyBsaWtlIGBYRlJNX01TR19HRVRTQWAsIGBYRlJNX01TR19ERUxTQWAsIGFuZCBgWEZSTV9NU0dfTUlHUkFURWAgdG8gc2VlIHRoZSBlZmZlY3Qgb2YgdGhpcyBjaGFuZ2UuXG5cbk5vdywgZm9yIGZ1enppbmcsIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgY3JpdGljYWwgZnVuY3Rpb25zLiBJJ20gZ29pbmcgdG8gY29uY2VudHJhdGUgb24gYHhmcm1fc3RhdGVfbG9va3VwX2V4YWN0YCwgYHhmcm1fc3RhdGVfbG9va3VwX2J5YWRkcmAsIGB4ZnJtX3VzZXJfc3RhdGVfbG9va3VwYCwgYHhmcm1fZ2V0X2FlYCwgYHhmcm1fbmV3X2FlYCwgYHhmcm1fYWRkX3NhX2V4cGlyZWAsIGFuZCBgeGZybV9kb19taWdyYXRlX3N0YXRlYC4gVGhlc2UgYXJlIHRoZSBrZXkgZW50cnkgcG9pbnRzIGFuZCBtYW5pcHVsYXRpb24gcG9pbnRzIG9mIHRoZSBzdGF0ZSBsb29rdXAgbG9naWMuIFRoZXkgYXJlIGRlZmluaXRlbHkgd2hlcmUgYW55IGlzc3VlcyBmcm9tIHRoZSBwYXRjaCB3aWxsIHN1cmZhY2UuXG5cbkZpbmFsbHksIGxldCdzIHZlcmlmeSB0aGF0IHRoZSBuZWNlc3Nhcnkga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgc2V0LiBgQ09ORklHX1hGUk1fVVNFUmAgaXMgdml0YWwgZm9yIGB4ZnJtX3VzZXIuY2AsIGFuZCBgQ09ORklHX1hGUk1fTUlHUkFURWAgaXMgbmVlZGVkIGZvciBgeGZybV9kb19taWdyYXRlX3N0YXRlYC4gSSdsbCBjb25maXJtIHRoYXQgdGhlc2UgYXJlIGVuYWJsZWQgaW4gdGhlIGJ1aWxkIGVudmlyb25tZW50IHRvIGVuc3VyZSB0aGlzIHBhdGNoIGlzIGZ1bGx5IHN1cHBvcnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyNDksIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NjUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxNToxNjoxMy44NTI2MTU5MTJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjMwMTE1NTg2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgWEZSTV9NSUdSQVRFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL0tjb25maWc9NTE9Y29uZmlnIFhGUk1fU1VCX1BPTElDWVxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy02MC1cXG5uZXQveGZybS9LY29uZmlnOjYxOmNvbmZpZyBYRlJNX01JR1JBVEVcXG5uZXQveGZybS9LY29uZmlnLTYyLVxcdGJvb2wgXFxcIlRyYW5zZm9ybWF0aW9uIG1pZ3JhdGUgZGF0YWJhc2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE1OjE2OjIwLjE1Mzc4NDA2NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyMTIxMTA4ODg0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgdGhlIFhGUk1fVVNFUiBQZXJzcGVjdGl2ZSoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIG91dCBgWEZSTV9VU0VSYC4gSXQncyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyB3aXRoIHRoZSB1c2VyLXNwYWNlIGludGVyYWN0aW9ucywgdGhlIHBvdGVudGlhbCBjb25maWd1cmF0aW9uIGFzcGVjdHMsIGFuZCBhbnkgY3VzdG9tIGltcGxlbWVudGF0aW9ucy4gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBjb250cm9sIHBsYW5lIGFuZCBkYXRhIHBsYW5lIGhlcmUsIGFuZCB3aGV0aGVyIHRoZSBpc3N1ZSBJJ20gbG9va2luZyBhdCBjb3VsZCBiZSBhIHJlc3VsdCBvZiBzb21ldGhpbmcgbWlzY29uZmlndXJlZCBhdCB0aGUgdXNlciBsZXZlbC4gV2hhdCBhcmUgdGhlIHJlbGV2YW50IHNvY2tldCBvcHRpb25zPyBBcmUgdGhlcmUgYW55IHVuZXhwZWN0ZWQgcG9saWN5IHNldHRpbmdzPyBJJ2xsIG5lZWQgdG8gbG9vayBhdCBob3cgdGhlIGtleXMgYXJlIGJlaW5nIG1hbmFnZWQgYW5kIGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyBkaXNjcmVwYW5jaWVzIGJldHdlZW4gZXhwZWN0ZWQgYmVoYXZpb3IgYW5kIHdoYXQgSSdtIG9ic2VydmluZy4gSXTigJlzIGxpa2VseSBpbiB0aGUga2VybmVsLXVzZXIgaW50ZXJhY3Rpb25zLiBUaGlzIGNvdWxkIGJlIHdoZXJlIHRoZSBwcm9ibGVtIHN0ZW1zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjQxNCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE1OjE4OjIxLjM2NDg3Nzg5OFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzIxNTE0Njc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBYRlJNX1VTRVJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0vS2NvbmZpZz0yMj1pZiBJTkVUXFxubmV0L3hmcm0vS2NvbmZpZzoyMzpjb25maWcgWEZSTV9VU0VSXFxubmV0L3hmcm0vS2NvbmZpZy0yNC1cXHR0cmlzdGF0ZSBcXFwiVHJhbnNmb3JtYXRpb24gdXNlciBjb25maWd1cmF0aW9uIGludGVyZmFjZVxcXCJcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctMzEtXFxubmV0L3hmcm0vS2NvbmZpZzozMjpjb25maWcgWEZSTV9VU0VSX0NPTVBBVFxcbm5ldC94ZnJtL0tjb25maWctMzMtXFx0dHJpc3RhdGUgXFxcIkNvbXBhdGlibGUgQUJJIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE1OjE4OjI3LjA4NjQwNDAxN1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzNDcyNDE5NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byBgeGZybV9kb19taWdyYXRlX3N0YXRlYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRyaWNhY2llcyBvZiB0aGlzIGZ1bmN0aW9uIHdpdGhpbiBgbmV0L3hmcm0veGZybV91c2VyLmNgLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyBpdCBoYW5kbGVzIHN0YXRlIG1pZ3JhdGlvbi4gVGhpcyBsaWtlbHkgaW52b2x2ZXMgdXNlci1zcGFjZSBpbnRlcmFjdGlvbnMsIHBvc3NpYmx5IHdpdGggbmV0bGluayBtZXNzYWdlcyBvciBzaW1pbGFyIG1lY2hhbmlzbXMuIEknbGwgbmVlZCB0byBmb2N1cyBvbiBob3cgdGhlIGZ1bmN0aW9uIHByb2Nlc3NlcyB0aGUgZGF0YSBpdCByZWNlaXZlcywgaG93IGl0IHZhbGlkYXRlcyBpbnB1dCwgYW5kIGhvdyBpdCBvcmNoZXN0cmF0ZXMgdGhlIHRyYW5zZmVyIG9mIHNlY3VyaXR5IGFzc29jaWF0aW9uIChTQSkgaW5mb3JtYXRpb24gYmV0d2VlbiBkaWZmZXJlbnQgbmV0d29yayBuYW1lc3BhY2VzIG9yIG90aGVyIGNvbnRleHRzLCBiZWNhdXNlIEkga25vdyB0aGF0J3MgdGhlIHVzdWFsIGltcGxpY2F0aW9uIG9mIGEgXCJtaWdyYXRlXCIgb3BlcmF0aW9uLiBJJ2xsIGFsc28gYmUgbG9va2luZyBmb3IgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3Igc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzIHRoYXQgY291bGQgYXJpc2UgZHVyaW5nIHRoaXMgc3RhdGUgdHJhbnNmZXIsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhhdCB0aGUgc3RhdGUgbWlnaHQgY29udGFpbiBzZW5zaXRpdmUgY3J5cHRvZ3JhcGhpYyBrZXlzIG9yIFNQSSB2YWx1ZXMuIEdpdmVuIG15IGZhbWlsaWFyaXR5IHdpdGggWEZSTSwgSSdtIGV4cGVjdGluZyB0byBzZWUgY2FsbHMgdG8gZnVuY3Rpb25zIGxpa2UgYHhmcm1fc3RhdGVfYWxsb2NgLCBgeGZybV9zdGF0ZV9hZGRgLCBgeGZybV9zdGF0ZV9kZWxldGVgIGFuZCBwZXJoYXBzIHN0YXRlIGxvY2tpbmcgbWVjaGFuaXNtcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI3NjAsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxNToxODozMi40MzM2NDkxMjJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM0NTY4MjQyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtX2RvX21pZ3JhdGVfc3RhdGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV91c2VyLmM9MzMwND1zdGF0aWMgaW50IHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMzMjQtXFxubmV0L3hmcm0veGZybV91c2VyLmM6MzMyNTpzdGF0aWMgaW50IHhmcm1fZG9fbWlncmF0ZV9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMzI2LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM1MTYtI2Vsc2VcXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNTE3OnN0YXRpYyBpbnQgeGZybV9kb19taWdyYXRlX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM1MTgtXFx0XFx0XFx0XFx0IHN0cnVjdCBubGF0dHIgKiphdHRycywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9MzczMj1zdGF0aWMgY29uc3Qgc3RydWN0IHhmcm1fbGluayB7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNzY5LVxcdFtYRlJNX01TR19HRVRERUZBVUxUICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fZ2V0X2RlZmF1bHQgICB9LFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM3NzA6XFx0W1hGUk1fTVNHX01JR1JBVEVfU1RBVEUgLSBYRlJNX01TR19CQVNFXSA9IHsgLmRvaXQgPSB4ZnJtX2RvX21pZ3JhdGVfc3RhdGUgfSxcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNzcxLX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE1OjE4OjM3Ljc3OTMzODg4OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNDU3MzY4NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBzaXR1YXRpb246XG5cbioqWEZSTSBTdWJzeXN0ZW0gVGVzdGluZyBSZXF1aXJlbWVudHMqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcsIHRvIHJlYWxseSBuYWlsIGRvd24gdGhlIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgIGZ1bmN0aW9uLCB3ZSdyZSBkZWZpbml0ZWx5IGdvaW5nIHRvIG5lZWQgdGhlIGBYRlJNX01JR1JBVEVgIGZsYWcgYWN0aXZhdGVkIGZvciBhIHByb3BlciB0ZXN0aW5nIGVudmlyb25tZW50LiBNYWtlcyBwZXJmZWN0IHNlbnNlLiBBbmQgb2YgY291cnNlLCBnaXZlbiB0aGF0IGB4ZnJtX3VzZXIuY2AgaXMgZ29pbmcgdG8gYmUgaW50ZWdyYWwgdG8gdGhlc2UgdGVzdHMsIHdlJ3JlIGdvaW5nIHRvIG5lZWQgYFhGUk1fVVNFUmAgZW5hYmxlZC4gSXTigJlzIHByZXR0eSBvYnZpb3VzLCBidXQgbGV0J3MganVzdCBtYWtlIHN1cmUuXG5cbk5vdywgbXkgbmV4dCB0aG91Z2h0IGlzLCBsZXQncyByZWZyZXNoIG9uIGB4ZnJtX3N0YXRlX2xvb2t1cF9leGFjdGAuIEknbGwgZ28gY2hlY2sgaXQgb3V0IGluIGBuZXQveGZybS94ZnJtX3N0YXRlLmNgLiBBbHdheXMgZ29vZCB0byBoYXZlIGEgc29saWQgaGFuZGxlIG9uIGhvdyB0aGF0IHBhcnRpY3VsYXIgZnVuY3Rpb24gd29ya3MsIGdpdmVuIGl0cyBwb3RlbnRpYWwgaW1wbGljYXRpb25zIGluIGEgbWlncmF0aW9uIHNjZW5hcmlvLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCBpdCBjb21wbGV0ZWx5IGJlZm9yZSBwcm9jZWVkaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzQ2NCwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE1OjE4OjQxLjEyNTA3ODkwNloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg3NTQ3NjM3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtX3N0YXRlX2xvb2t1cF9leGFjdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcveGZybS94ZnJtX21pZ3JhdGVfc3RhdGUucnN0PTI5PVRoZSBzdHJ1Y3QgaXMgZGVmaW5lZCBpbiBgYGluY2x1ZGUvdWFwaS9saW51eC94ZnJtLmhgYC4gVGhlIFNBIGlzIGxvb2tlZFxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy94ZnJtL3hmcm1fbWlncmF0ZV9zdGF0ZS5yc3Q6MzA6dXAgdXNpbmcgYGB4ZnJtX3N0YXRlX2xvb2t1cF9leGFjdCgpYGAgd2l0aCBgYGlkLnNwaWBgLCBgYGlkLmRhZGRyYGAsXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3hmcm0veGZybV9taWdyYXRlX3N0YXRlLnJzdC0zMS1gYGlkLnByb3RvYGAsIGBgaWQuZmFtaWx5YGAsIGFuZCBhbiBleGFjdCBtYXRjaCBhZ2FpbnN0IGBgb2xkX21hcmsudmBgXFxuLS1cXG5pbmNsdWRlL25ldC94ZnJtLmg9MTc0ND1zdHJ1Y3QgeGZybV9zdGF0ZSAqeGZybV9zdGF0ZV9sb29rdXBfYnlhZGRyKHN0cnVjdCBuZXQgKm5ldCwgdTMyIG1hcmssIHUzMiBtYXNrLCBib29sIGV4YWN0LFxcbi0tXFxuaW5jbHVkZS9uZXQveGZybS5oLTE3NDgtXFx0XFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIHNob3J0IGZhbWlseSk7XFxuaW5jbHVkZS9uZXQveGZybS5oOjE3NDk6c3RydWN0IHhmcm1fc3RhdGUgKnhmcm1fc3RhdGVfbG9va3VwX2V4YWN0KHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IHhmcm1fbWFyayAqbWFyayxcXG5pbmNsdWRlL25ldC94ZnJtLmgtMTc1MC1cXHRcXHRcXHRcXHRcXHQgICBjb25zdCB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsIF9fYmUzMiBzcGksXFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9MTIxMj1zdGF0aWMgc3RydWN0IHhmcm1fc3RhdGUgKlxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoxMjEzOl9feGZybV9zdGF0ZV9sb29rdXBfZXhhY3QoY29uc3Qgc3RydWN0IHhmcm1faGFzaF9zdGF0ZV9wdHJzICpzdGF0ZV9wdHJzLFxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xMjE0LVxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IHhmcm1fbWFyayAqbWFyayxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYz0xMzI3PV9feGZybV9zdGF0ZV9sb2NhdGVfZXhhY3Qoc3RydWN0IHhmcm1fc3RhdGUgKngsIGludCB1c2Vfc3BpLCBpbnQgZmFtaWx5KVxcbi0tXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTEzMzQtXFx0aWYgKHVzZV9zcGkpXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjEzMzU6XFx0XFx0cmV0dXJuIF9feGZybV9zdGF0ZV9sb29rdXBfZXhhY3QoXFx1MDAyNnN0YXRlX3B0cnMsIFxcdTAwMjZ4LVxcdTAwM2VtYXJrLCBcXHUwMDI2eC1cXHUwMDNlaWQuZGFkZHIsXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTEzMzYtXFx0XFx0XFx0XFx0XFx0XFx0IHgtXFx1MDAzZWlkLnNwaSwgeC1cXHUwMDNlaWQucHJvdG8sIGZhbWlseSk7XFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9MjQ0Nz1zdHJ1Y3QgeGZybV9zdGF0ZSAqXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjI0NDg6eGZybV9zdGF0ZV9sb29rdXBfZXhhY3Qoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgeGZybV9tYXJrICptYXJrLFxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yNDQ5LVxcdFxcdFxcdGNvbnN0IHhmcm1fYWRkcmVzc190ICpkYWRkciwgX19iZTMyIHNwaSxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yNDU3LVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoyNDU4OlxcdHggPSBfX3hmcm1fc3RhdGVfbG9va3VwX2V4YWN0KFxcdTAwMjZzdGF0ZV9wdHJzLCBtYXJrLCBkYWRkciwgc3BpLCBwcm90bywgZmFtaWx5KTtcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjQ1OS1cXHRyY3VfcmVhZF91bmxvY2soKTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yNDYxLX1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MjQ2MjpFWFBPUlRfU1lNQk9MKHhmcm1fc3RhdGVfbG9va3VwX2V4YWN0KTtcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjQ2My1cXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTEwODQ9c3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlICp4ZnJtX3VzZXJfc3RhdGVfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTEwOTYtXFx0XFx0ZXJyID0gLUVTUkNIO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjEwOTc6XFx0XFx0eCA9IHhmcm1fc3RhdGVfbG9va3VwX2V4YWN0KG5ldCwgXFx1MDAyNm0sIFxcdTAwMjZwLVxcdTAwM2VkYWRkciwgcC1cXHUwMDNlc3BpLCBwLVxcdTAwM2Vwcm90bywgcC1cXHUwMDNlZmFtaWx5KTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xMDk4LVxcdH0gZWxzZSB7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYz0yNzg0PXN0YXRpYyBpbnQgeGZybV9nZXRfYWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yNzk3LVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjI3OTg6XFx0eCA9IHhmcm1fc3RhdGVfbG9va3VwX2V4YWN0KG5ldCwgXFx1MDAyNm0sIFxcdTAwMjZpZC1cXHUwMDNlZGFkZHIsIGlkLVxcdTAwM2VzcGksIGlkLVxcdTAwM2Vwcm90bywgaWQtXFx1MDAzZWZhbWlseSk7XFxubmV0L3hmcm0veGZybV91c2VyLmMtMjc5OS1cXHRpZiAoeCA9PSBOVUxMKVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9MjgzMj1zdGF0aWMgaW50IHhmcm1fbmV3X2FlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMjg1OS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzoyODYwOlxcdHggPSB4ZnJtX3N0YXRlX2xvb2t1cF9leGFjdChuZXQsIFxcdTAwMjZtLCBcXHUwMDI2cC1cXHUwMDNlc2FfaWQuZGFkZHIsIHAtXFx1MDAzZXNhX2lkLnNwaSxcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yODYxLVxcdFxcdFxcdFxcdCAgICBwLVxcdTAwM2VzYV9pZC5wcm90bywgcC1cXHUwMDNlc2FfaWQuZmFtaWx5KTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTI5ODU9c3RhdGljIGludCB4ZnJtX2FkZF9zYV9leHBpcmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yOTk3LVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjI5OTg6XFx0eCA9IHhmcm1fc3RhdGVfbG9va3VwX2V4YWN0KG5ldCwgXFx1MDAyNm0sIFxcdTAwMjZwLVxcdTAwM2VpZC5kYWRkciwgcC1cXHUwMDNlaWQuc3BpLCBwLVxcdTAwM2VpZC5wcm90bywgcC1cXHUwMDNlZmFtaWx5KTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yOTk5LVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9MzMyNT1zdGF0aWMgaW50IHhmcm1fZG9fbWlncmF0ZV9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMzNjQtXFxubmV0L3hmcm0veGZybV91c2VyLmM6MzM2NTpcXHR4ID0geGZybV9zdGF0ZV9sb29rdXBfZXhhY3QobmV0LCBcXHUwMDI2bS5vbGRfbWFyayxcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMzY2LVxcdFxcdFxcdFxcdCAgICBcXHUwMDI2dW0tXFx1MDAzZWlkLmRhZGRyLCB1bS1cXHUwMDNlaWQuc3BpLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxNToxODo0Ni4wMDA1NjQwMzhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjI5MTY3NDIxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBGdXp6aW5nIFN0cmF0ZWd5IGZvciBUaGlzIElQc2VjIFNBIExvb2t1cCBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgdGFrZW4gYSBsb29rIGF0IHRoaXMgcGF0Y2ggYW5kIGl0J3MgaW1tZWRpYXRlbHkgY2xlYXIgdGhhdCBpdCdzIHRvdWNoaW5nIGNyaXRpY2FsIGZ1bmN0aW9uYWwgY29yZSBsb2dpYyDigJMgc3BlY2lmaWNhbGx5LCBob3cgSVBzZWMgU2VjdXJpdHkgQXNzb2NpYXRpb25zIChTQXMpIGFyZSBsb29rZWQgdXAuIFRoaXMgaXMgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcsIGdpdmVuIHRoYXQgaXQncyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdGhyb3VnaCBuZXRsaW5rLiBNeSBndXQgdGVsbHMgbWUgdGhpcyBjb3VsZCBiZSBpbnRlcmVzdGluZy5cblxuVGhlIGZ1bmN0aW9ucyBJJ20gZm9jdXNpbmcgb24gYXJlOiBgeGZybV9zdGF0ZV9sb29rdXBfZXhhY3RgLCBgeGZybV9zdGF0ZV9sb29rdXBfYnlhZGRyYCwgYHhmcm1fdXNlcl9zdGF0ZV9sb29rdXBgLCBgeGZybV9nZXRfYWVgLCBgeGZybV9uZXdfYWVgLCBgeGZybV9hZGRfc2FfZXhwaXJlYCwgYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAsIGB4ZnJtX3N0YXRlX3VwZGF0ZWAsIGFuZCBgeGZybV9zdGF0ZV9taWdyYXRlX2luc3RhbGxgLiBUaGVzZSBsb29rIGxpa2UgdGhlIGtleSBwaWVjZXMgaW52b2x2ZWQgaW4gdGhpcyBsb29rdXAgYW5kIG1hbmFnZW1lbnQgcHJvY2Vzcy5cblxuQmVmb3JlIEkganVtcCBpbnRvIGZ1enppbmcsIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gSSdsbCBuZWVkIGBDT05GSUdfWEZSTWAgYXMgdGhlIGJhc2UsIG9mIGNvdXJzZS4gVGhlbiwgYENPTkZJR19YRlJNX1VTRVJgIGlzIGVzc2VudGlhbCBmb3IgdGhlIHVzZXJzcGFjZSBhY2Nlc3MsIGFuZCBzaW5jZSBtaWdyYXRpb24gaXMgaW52b2x2ZWQsIGBDT05GSUdfWEZSTV9NSUdSQVRFYCBpcyBhIG11c3QuIEtub3dpbmcgd2hhdCBJJ20gZGVhbGluZyB3aXRoLCBgQ09ORklHX0lORVRgIGZvciBgWEZSTV9VU0VSYCBpcyBhbHNvIG5lY2Vzc2FyeSwgYW5kIEkgc2VlIGBDT05GSUdfSVBWNmAgZGVwZW5kZW5jeSwgc3BlY2lmaWNhbGx5IGZvciBgbmV0L2lwdjYveGZybTZfaW5wdXQuY2AuIEkgd2lsbCB2ZXJpZnkgdGhlIGRlcGVuZGVuY2llcyBmb3IgYFhGUk1fTUlHUkFURWAgdG8gYmUgY2VydGFpbiBJIGhhdmUgYWxsIHRoZSBib3hlcyB0aWNrZWQgYmVmb3JlIEkgc3RhcnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MzEyLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE1OjE4OjUyLjI5MjI0MjY0M1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA4MjA4MzEwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgWEZSTV9NSUdSQVRFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL0tjb25maWc9NTE9Y29uZmlnIFhGUk1fU1VCX1BPTElDWVxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy02MC1cXG5uZXQveGZybS9LY29uZmlnOjYxOmNvbmZpZyBYRlJNX01JR1JBVEVcXG5uZXQveGZybS9LY29uZmlnLTYyLVxcdGJvb2wgXFxcIlRyYW5zZm9ybWF0aW9uIG1pZ3JhdGUgZGF0YWJhc2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDE1OjE4OjU3LjM3NDMzMjczWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE5NjAyNDMzNDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqWEZSTV9NSUdSQVRFIERlcGVuZGVuY3kgSW52ZXN0aWdhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byBgWEZSTV9NSUdSQVRFYC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBkaWcgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZXMsIHNwZWNpZmljYWxseSBgbmV0L3hmcm0vS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSBJJ2QgZXhwZWN0IHRvIGZpbmQgdGhlIGRlcGVuZGVuY2llcywgaWYgYW55LCB0aGF0IGdvdmVybiB3aGV0aGVyIGBYRlJNX01JR1JBVEVgIGlzIGV2ZW4gKmVuYWJsZWQqIG9yICpzZWxlY3RhYmxlKiBkdXJpbmcgdGhlIGtlcm5lbCBidWlsZCBwcm9jZXNzLiBJIHdhbnQgdG8gcXVpY2tseSB1bmRlcnN0YW5kIGlmIGl0IHJlbGllcyBvbiBvdGhlciBYRlJNIGZlYXR1cmVzLCBuZXR3b3JraW5nIHN1YnN5c3RlbXMsIG9yIGV2ZW4gaGFyZHdhcmUgY2FwYWJpbGl0aWVzLiBUaW1lIHRvIGdvIHNwZWx1bmtpbmcgaW4gdGhhdCBLY29uZmlnIGZpbGUuIExldCdzIHNlZSB3aGF0IHNlY3JldHMgaXQgaG9sZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MDE0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTU6MTk6MTYuOTc2NzY5MjVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzOTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC94ZnJtL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNTA6XFx0XFxuICA1MTpcXHRjb25maWcgWEZSTV9TVUJfUE9MSUNZXFxuICA1MjpcXHRcXHRib29sIFxcXCJUcmFuc2Zvcm1hdGlvbiBzdWIgcG9saWN5IHN1cHBvcnRcXFwiXFxuICA1MzpcXHRcXHRkZXBlbmRzIG9uIFhGUk1cXG4gIDU0OlxcdFxcdGhlbHBcXG4gIDU1OlxcdFxcdCAgU3VwcG9ydCBzdWIgcG9saWN5IGZvciBkZXZlbG9wZXJzLiBCeSB1c2luZyBzdWIgcG9saWN5IHdpdGggbWFpblxcbiAgNTY6XFx0XFx0ICBvbmUsIHR3byBwb2xpY2llcyBjYW4gYmUgYXBwbGllZCB0byB0aGUgc2FtZSBwYWNrZXQgYXQgb25jZS5cXG4gIDU3OlxcdFxcdCAgUG9saWN5IHdoaWNoIGxpdmVzIHNob3J0ZXIgdGltZSBpbiBrZXJuZWwgc2hvdWxkIGJlIGEgc3ViLlxcbiAgNTg6XFx0XFxuICA1OTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICA2MDpcXHRcXG4gIDYxOlxcdGNvbmZpZyBYRlJNX01JR1JBVEVcXG4gIDYyOlxcdFxcdGJvb2wgXFxcIlRyYW5zZm9ybWF0aW9uIG1pZ3JhdGUgZGF0YWJhc2VcXFwiXFxuICA2MzpcXHRcXHRkZXBlbmRzIG9uIFhGUk1cXG4gIDY0OlxcdFxcdGhlbHBcXG4gIDY1OlxcdFxcdCAgQSBmZWF0dXJlIHRvIHVwZGF0ZSBsb2NhdG9yKHMpIG9mIGEgZ2l2ZW4gSVBzZWMgc2VjdXJpdHlcXG4gIDY2OlxcdFxcdCAgYXNzb2NpYXRpb24gZHluYW1pY2FsbHkuICBUaGlzIGZlYXR1cmUgaXMgcmVxdWlyZWQsIGZvclxcbiAgNjc6XFx0XFx0ICBpbnN0YW5jZSwgaW4gYSBNb2JpbGUgSVB2NiBlbnZpcm9ubWVudCB3aXRoIElQc2VjIGNvbmZpZ3VyYXRpb25cXG4gIDY4OlxcdFxcdCAgd2hlcmUgbW9iaWxlIG5vZGVzIGNoYW5nZSB0aGVpciBhdHRhY2htZW50IHBvaW50IHRvIHRoZSBJbnRlcm5ldC5cXG4gIDY5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxNToxOToxNi45NzY5MzczMVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDc1NTM0MjU0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkRlcGVuZGVuY3kgQW5hbHlzaXM6IFhGUk0gTW9kdWxlcyoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZXNlIGtlcm5lbCBtb2R1bGUgZGVwZW5kZW5jaWVzLiBJdCBsb29rcyBsaWtlIGBYRlJNX01JR1JBVEVgIGFic29sdXRlbHkgcmVsaWVzIG9uIHRoZSBiYXNlIGBYRlJNYCBtb2R1bGUuIE1ha2VzIHNlbnNlOyBtaWdyYXRpb24gbGlrZWx5IGludm9sdmVzIGV4aXN0aW5nIFhGUk0gaW5mcmFzdHJ1Y3R1cmUuIEFuZCB0aGVuIHdlIGhhdmUgYFhGUk1fVVNFUmAsIHdoaWNoIHNlZW1zIHRvIGJlIHNpdHRpbmcgb24gdG9wIG9mIGJvdGggYElORVRgIGFuZCBgWEZSTWAuIFRoYXQgc2lnbmFscyBhIHVzZXItc3BhY2UgaW50ZXJmYWNlLCBwcm9iYWJseSB0byBpbnRlcmFjdCB3aXRoIFhGUk0gdmlhIHNvY2tldHMuIE1ha2VzIHRvdGFsIHNlbnNlLCBhbmQgdGhpcyBpcyBzdGFuZGFyZC4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCB1bmRlcnN0YW5kaW5nLlxuXG5UbyBnZXQgdGhlIGZ1bGwgcGljdHVyZSBhbmQgY29uZmlybSB0aG9zZSBkZXBlbmRlbmNpZXMsIEkgc2hvdWxkIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIFRoZSBgbmV0L3hmcm0vS2NvbmZpZ2AgZmlsZSBzaG91bGQgY29udGFpbiB0aGUgZGVmaW5pdGl2ZSBkZWNsYXJhdGlvbiBvZiBgWEZSTV9VU0VSYCBhbmQgaXRzIGRlcGVuZGVuY2llcy4gTGV0J3MgZ28gY2hlY2sgdGhhdCBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NTAyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxNToyMDowNy43MzIyODQ1OVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTc5ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3hmcm0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAxNTpcXHRcXHR0cmlzdGF0ZVxcbiAgMTY6XFx0XFx0c2VsZWN0IFhGUk1cXG4gIDE3OlxcdFxcdHNlbGVjdCBDUllQVE9cXG4gIDE4OlxcdFxcdHNlbGVjdCBDUllQVE9fQUVBRFxcbiAgMTk6XFx0XFx0c2VsZWN0IENSWVBUT19IQVNIXFxuICAyMDpcXHRcXHRzZWxlY3QgQ1JZUFRPX1NLQ0lQSEVSXFxuICAyMTpcXHRcXG4gIDIyOlxcdGlmIElORVRcXG4gIDIzOlxcdGNvbmZpZyBYRlJNX1VTRVJcXG4gIDI0OlxcdFxcdHRyaXN0YXRlIFxcXCJUcmFuc2Zvcm1hdGlvbiB1c2VyIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlXFxcIlxcbiAgMjU6XFx0XFx0c2VsZWN0IFhGUk1fQUxHT1xcbiAgMjY6XFx0XFx0aGVscFxcbiAgMjc6XFx0XFx0ICBTdXBwb3J0IGZvciBUcmFuc2Zvcm1hdGlvbihYRlJNKSB1c2VyIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlXFxuICAyODpcXHRcXHQgIGxpa2UgSVBzZWMgdXNlZCBieSBuYXRpdmUgTGludXggdG9vbHMuXFxuICAyOTpcXHRcXG4gIDMwOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgWS5cXG4gIDMxOlxcdFxcbiAgMzI6XFx0Y29uZmlnIFhGUk1fVVNFUl9DT01QQVRcXG4gIDMzOlxcdFxcdHRyaXN0YXRlIFxcXCJDb21wYXRpYmxlIEFCSSBzdXBwb3J0XFxcIlxcbiAgMzQ6XFx0XFx0ZGVwZW5kcyBvbiBYRlJNX1VTRVIgXFx1MDAyNlxcdTAwMjYgQ09NUEFUX0ZPUl9VNjRfQUxJR05NRU5UIFxcdTAwMjZcXHUwMDI2IFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTU6MjA6MDcuNzMyNDA1MTFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTEyMjAzNDEwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBYRlJNIENvbmZpZ3VyYXRpb24gYW5kIEZ1bmN0aW9uIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBYRlJNIGNvZGUuIEl0IGxvb2tzIGxpa2UgdGhlIGtleSBjb25maWd1cmF0aW9ucyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIGFyZSBgWEZSTV9VU0VSYCBhbmQgYFhGUk1fTUlHUkFURWAuIEknbSBzdGFydGluZyBieSBsb29raW5nIGF0IGBuZXQvaXB2Ni94ZnJtNl9pbnB1dC5jYCwgYW5kLCBhcyBleHBlY3RlZCwgaXQgcmVxdWlyZXMgYElQVjZgLlxuXG5JJ20gZ29pbmcgdG8gZG9jdW1lbnQgdGhlIGNvbmZpZ3VyYXRpb25zIEkndmUgaWRlbnRpZmllZDpcblxuKiAgIGBYRlJNX1VTRVJgXG4qICAgYFhGUk1fTUlHUkFURWBcbiogICBgSVBWNmBcblxuTm93LCBsZXQncyBnZXQgaW50byB0aGUgZnVuY3Rpb25zLiBJIG5lZWQgdG8gZm9jdXMgb24gdGhlc2Ugc3ltYm9sczpcblxuKiAgIGB4ZnJtX3N0YXRlX2xvb2t1cF9leGFjdGBcbiogICBgeGZybV9zdGF0ZV9sb29rdXBfYnlhZGRyYFxuKiAgIGB4ZnJtX3VzZXJfc3RhdGVfbG9va3VwYFxuKiAgIGB4ZnJtX2dldF9hZWBcbiogICBgeGZybV9uZXdfYWVgXG4qICAgYHhmcm1fYWRkX3NhX2V4cGlyZWBcbiogICBgeGZybV9kb19taWdyYXRlX3N0YXRlYFxuKiAgIGB4ZnJtX3N0YXRlX3VwZGF0ZWBcbiogICBgeGZybV9zdGF0ZV9taWdyYXRlX2luc3RhbGxgXG5cbkknbSBnb2luZyB0byBkb3VibGUtY2hlY2sgdGhhdCBgeGZybV9zdGF0ZV9sb29rdXBfZXhhY3RgIGlzIGV4cG9ydGVkIGFuZCBhY2Nlc3NpYmxlLiBBaCwgeWVwLCBpdCdzIGNhbGxlZCBmcm9tIGB4ZnJtX3VzZXIuY2AsIHNvIHRoYXQncyBnb29kLiBBbmQgYHhmcm1fc3RhdGVfbG9va3VwX2J5YWRkcmAuLi4geWVzLCBpdCdzIHVzZWQgaW4gYm90aCBgeGZybV91c2VyLmNgIGFuZCBgeGZybTZfaW5wdXQuY2AuXG5cbkxldCBtZSBzZWUgaWYgYW55IG90aGVyIGZ1bmN0aW9ucyBoYXZlIGJlZW4gbW9kaWZpZWQgb3IgYXJlIHJlbGV2YW50LiBPa2F5LCBJIHNlZSBhIGhhbmRmdWwgb2Ygc3RhdGljIGZ1bmN0aW9ucywgbGV0J3MgdGFrZSBhIGxvb2s6XG5cbiogICBgeGZybV9zdGF0ZV9tYXJrX21hdGNoZXNgIChzdGF0aWMpXG4qICAgYF9feGZybV9zdGF0ZV9sb29rdXBgIChzdGF0aWMpXG4qICAgYF9feGZybV9zdGF0ZV9sb29rdXBfZXhhY3RgIChzdGF0aWMpXG4qICAgYF9feGZybV9zdGF0ZV9sb29rdXBfYnlhZGRyYCAoc3RhdGljKVxuKiAgIGBfX3hmcm1fc3RhdGVfbG9jYXRlYCAoc3RhdGljKVxuKiAgIGBfX3hmcm1fc3RhdGVfbG9jYXRlX2V4YWN0YCAoc3RhdGljKVxuXG5JJ20gZ29pbmcgdG8gaW5jbHVkZSB0aGUgZXhwb3J0ZWQgYW5kIG5vbi1zdGF0aWMgZnVuY3Rpb25zLCBhcyB3ZWxsIGFzIHRoZSBpbXBvcnRhbnQgc3RhdGljIG9uZXMsIEkgY2FuIGFsd2F5cyBjb21lIGJhY2sgdG8gaXQuXG5cblRoZSBmaW5hbCBsaXN0IHdpbGwgYmU6XG5cbiogICBgeGZybV9zdGF0ZV9sb29rdXBfZXhhY3RgXG4qICAgYHhmcm1fc3RhdGVfbG9va3VwX2J5YWRkcmBcbiogICBgeGZybV91c2VyX3N0YXRlX2xvb2t1cGBcbiogICBgeGZybV9kb19taWdyYXRlX3N0YXRlYFxuKiAgIGB4ZnJtX3N0YXRlX3VwZGF0ZWBcbiogICBgeGZybV9zdGF0ZV9taWdyYXRlX2luc3RhbGxgXG4qICAgYHhmcm1fZ2V0X2FlYFxuKiAgIGB4ZnJtX25ld19hZWBcbiogICBgeGZybV9hZGRfc2FfZXhwaXJlYFxuXG5Ob3csIHRpbWUgdG8gY2FsbCBzZXQtcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcwMzcsIk91dHB1dFRva2VucyI6MTk3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDc3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTU6MjA6MTYuODU0NDQyNzcxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM3Mzk5MzMyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJYRlJNX1VTRVJcIixcbiAgICBcIlhGUk1fTUlHUkFURVwiLFxuICAgIFwiSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInhmcm1fc3RhdGVfbG9va3VwX2V4YWN0XCIsXG4gICAgXCJ4ZnJtX3N0YXRlX2xvb2t1cF9ieWFkZHJcIixcbiAgICBcInhmcm1fdXNlcl9zdGF0ZV9sb29rdXBcIixcbiAgICBcInhmcm1fZG9fbWlncmF0ZV9zdGF0ZVwiLFxuICAgIFwieGZybV9zdGF0ZV91cGRhdGVcIixcbiAgICBcInhmcm1fc3RhdGVfbWlncmF0ZV9pbnN0YWxsXCIsXG4gICAgXCJ4ZnJtX2dldF9hZVwiLFxuICAgIFwieGZybV9uZXdfYWVcIixcbiAgICBcInhmcm1fYWRkX3NhX2V4cGlyZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBYRlJNIChJUHNlYykgc3RhdGUgbG9va3VwIGxvZ2ljIHRvIGFsbG93IGV4YWN0IG1hdGNoaW5nIG9mIG1hcmtzIGFuZCBtYXNrcyBkdXJpbmcgY29udHJvbCBwbGFuZSBvcGVyYXRpb25zIChHRVQsIERFTEVURSwgTUlHUkFURSkuIFRoaXMgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgbmV0bGluayBtZXNzYWdlcyBhbmQgYWZmZWN0cyBjb3JlIElQc2VjIGZ1bmN0aW9uYWxpdHkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWEZSTV9VU0VSXCIsXG4gICAgXCJYRlJNX01JR1JBVEVcIixcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4ZnJtX3N0YXRlX2xvb2t1cF9leGFjdFwiLFxuICAgIFwieGZybV9zdGF0ZV9sb29rdXBfYnlhZGRyXCIsXG4gICAgXCJ4ZnJtX3VzZXJfc3RhdGVfbG9va3VwXCIsXG4gICAgXCJ4ZnJtX2RvX21pZ3JhdGVfc3RhdGVcIixcbiAgICBcInhmcm1fc3RhdGVfdXBkYXRlXCIsXG4gICAgXCJ4ZnJtX3N0YXRlX21pZ3JhdGVfaW5zdGFsbFwiLFxuICAgIFwieGZybV9nZXRfYWVcIixcbiAgICBcInhmcm1fbmV3X2FlXCIsXG4gICAgXCJ4ZnJtX2FkZF9zYV9leHBpcmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgWEZSTSAoSVBzZWMpIHN0YXRlIGxvb2t1cCBsb2dpYyB0byBhbGxvdyBleGFjdCBtYXRjaGluZyBvZiBtYXJrcyBhbmQgbWFza3MgZHVyaW5nIGNvbnRyb2wgcGxhbmUgb3BlcmF0aW9ucyAoR0VULCBERUxFVEUsIE1JR1JBVEUpLiBUaGlzIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIG5ldGxpbmsgbWVzc2FnZXMgYW5kIGFmZmVjdHMgY29yZSBJUHNlYyBmdW5jdGlvbmFsaXR5LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowll9cc[1] Phase: Succeeded StartedAt: 2026-07-06 15:20:29 +0000 UTC FinishedAt: 2026-07-06 15:20:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowll9cc[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-06 15:20:29 +0000 UTC FinishedAt: 2026-07-06 15:20:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowll9cc[2] Phase: Succeeded StartedAt: 2026-07-06 15:20:29 +0000 UTC FinishedAt: 2026-07-06 19:19:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowll9cc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"226f4a490d1a938fc838d8f8c46a4eca864c0d78","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_state_lookup_exact","xfrm_state_lookup_byaddr","xfrm_user_state_lookup","xfrm_do_migrate_state","xfrm_state_update","xfrm_state_migrate_install","xfrm_get_ae","xfrm_new_ae","xfrm_add_sa_expire"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"226f4a490d1a938fc838d8f8c46a4eca864c0d78","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE","IPV6"],"series_id":"b68e6bf7-5fa7-4f20-aa52-d6e5fadf9f98","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-06 15:20:29 +0000 UTC FinishedAt: 2026-07-06 19:19:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"226f4a490d1a938fc838d8f8c46a4eca864c0d78","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_state_lookup_exact","xfrm_state_lookup_byaddr","xfrm_user_state_lookup","xfrm_do_migrate_state","xfrm_state_update","xfrm_state_migrate_install","xfrm_get_ae","xfrm_new_ae","xfrm_add_sa_expire"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"226f4a490d1a938fc838d8f8c46a4eca864c0d78","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE","IPV6"],"series_id":"b68e6bf7-5fa7-4f20-aa52-d6e5fadf9f98","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowll9cc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"226f4a490d1a938fc838d8f8c46a4eca864c0d78","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_state_lookup_exact","xfrm_state_lookup_byaddr","xfrm_user_state_lookup","xfrm_do_migrate_state","xfrm_state_update","xfrm_state_migrate_install","xfrm_get_ae","xfrm_new_ae","xfrm_add_sa_expire"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"226f4a490d1a938fc838d8f8c46a4eca864c0d78","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE","IPV6"],"series_id":"b68e6bf7-5fa7-4f20-aa52-d6e5fadf9f98","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-06 15:20:29 +0000 UTC FinishedAt: 2026-07-06 15:21:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowll9cc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"226f4a490d1a938fc838d8f8c46a4eca864c0d78","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_state_lookup_exact","xfrm_state_lookup_byaddr","xfrm_user_state_lookup","xfrm_do_migrate_state","xfrm_state_update","xfrm_state_migrate_install","xfrm_get_ae","xfrm_new_ae","xfrm_add_sa_expire"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"226f4a490d1a938fc838d8f8c46a4eca864c0d78","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE","IPV6"],"series_id":"b68e6bf7-5fa7-4f20-aa52-d6e5fadf9f98","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-06 15:20:29 +0000 UTC FinishedAt: 2026-07-06 15:20:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"226f4a490d1a938fc838d8f8c46a4eca864c0d78","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowll9cc/series-workflowll9cc-convert-artifact-4150954927/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowll9cc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"226f4a490d1a938fc838d8f8c46a4eca864c0d78","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_state_lookup_exact","xfrm_state_lookup_byaddr","xfrm_user_state_lookup","xfrm_do_migrate_state","xfrm_state_update","xfrm_state_migrate_install","xfrm_get_ae","xfrm_new_ae","xfrm_add_sa_expire"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"226f4a490d1a938fc838d8f8c46a4eca864c0d78","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE","IPV6"],"series_id":"b68e6bf7-5fa7-4f20-aa52-d6e5fadf9f98","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-06 15:21:08 +0000 UTC FinishedAt: 2026-07-06 15:48:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowll9cc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"226f4a490d1a938fc838d8f8c46a4eca864c0d78","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_state_lookup_exact","xfrm_state_lookup_byaddr","xfrm_user_state_lookup","xfrm_do_migrate_state","xfrm_state_update","xfrm_state_migrate_install","xfrm_get_ae","xfrm_new_ae","xfrm_add_sa_expire"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"226f4a490d1a938fc838d8f8c46a4eca864c0d78","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE","IPV6"],"series_id":"b68e6bf7-5fa7-4f20-aa52-d6e5fadf9f98","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-06 15:21:08 +0000 UTC FinishedAt: 2026-07-06 15:48:14 +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:*d980a0a5-130c-4f8a-a3ab-c995a61758e8,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-workflowll9cc/series-workflowll9cc-convert-artifact-4150954927/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": "49c1e36c-8615-407f-b072-8ef07f0a4de0", "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-workflowll9cc/series-workflowll9cc-build-action-2576879989/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowll9cc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"226f4a490d1a938fc838d8f8c46a4eca864c0d78","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_state_lookup_exact","xfrm_state_lookup_byaddr","xfrm_user_state_lookup","xfrm_do_migrate_state","xfrm_state_update","xfrm_state_migrate_install","xfrm_get_ae","xfrm_new_ae","xfrm_add_sa_expire"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"226f4a490d1a938fc838d8f8c46a4eca864c0d78","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE","IPV6"],"series_id":"b68e6bf7-5fa7-4f20-aa52-d6e5fadf9f98","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-06 15:21:08 +0000 UTC FinishedAt: 2026-07-06 15:48:03 +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:*d980a0a5-130c-4f8a-a3ab-c995a61758e8,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-workflowll9cc/series-workflowll9cc-convert-artifact-4150954927/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": "49c1e36c-8615-407f-b072-8ef07f0a4de0", "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-workflowll9cc/series-workflowll9cc-build-action-2576879989/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowll9cc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"226f4a490d1a938fc838d8f8c46a4eca864c0d78","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_state_lookup_exact","xfrm_state_lookup_byaddr","xfrm_user_state_lookup","xfrm_do_migrate_state","xfrm_state_update","xfrm_state_migrate_install","xfrm_get_ae","xfrm_new_ae","xfrm_add_sa_expire"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"226f4a490d1a938fc838d8f8c46a4eca864c0d78","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE","IPV6"],"series_id":"b68e6bf7-5fa7-4f20-aa52-d6e5fadf9f98","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-06 15:48:14 +0000 UTC FinishedAt: 2026-07-06 15:48:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowll9cc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"226f4a490d1a938fc838d8f8c46a4eca864c0d78","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_state_lookup_exact","xfrm_state_lookup_byaddr","xfrm_user_state_lookup","xfrm_do_migrate_state","xfrm_state_update","xfrm_state_migrate_install","xfrm_get_ae","xfrm_new_ae","xfrm_add_sa_expire"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"226f4a490d1a938fc838d8f8c46a4eca864c0d78","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE","IPV6"],"series_id":"b68e6bf7-5fa7-4f20-aa52-d6e5fadf9f98","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-06 15:48:14 +0000 UTC FinishedAt: 2026-07-06 15:48:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowll9cc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"226f4a490d1a938fc838d8f8c46a4eca864c0d78","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_state_lookup_exact","xfrm_state_lookup_byaddr","xfrm_user_state_lookup","xfrm_do_migrate_state","xfrm_state_update","xfrm_state_migrate_install","xfrm_get_ae","xfrm_new_ae","xfrm_add_sa_expire"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"226f4a490d1a938fc838d8f8c46a4eca864c0d78","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE","IPV6"],"series_id":"b68e6bf7-5fa7-4f20-aa52-d6e5fadf9f98","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-06 15:48:14 +0000 UTC FinishedAt: 2026-07-06 15:48:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowll9cc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"226f4a490d1a938fc838d8f8c46a4eca864c0d78","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_state_lookup_exact","xfrm_state_lookup_byaddr","xfrm_user_state_lookup","xfrm_do_migrate_state","xfrm_state_update","xfrm_state_migrate_install","xfrm_get_ae","xfrm_new_ae","xfrm_add_sa_expire"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"226f4a490d1a938fc838d8f8c46a4eca864c0d78","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE","IPV6"],"series_id":"b68e6bf7-5fa7-4f20-aa52-d6e5fadf9f98","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-06 15:48:14 +0000 UTC FinishedAt: 2026-07-06 15:48:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"226f4a490d1a938fc838d8f8c46a4eca864c0d78","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE","IPV6"],"series_id":"b68e6bf7-5fa7-4f20-aa52-d6e5fadf9f98","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowll9cc/series-workflowll9cc-convert-artifact-497530878/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowll9cc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"226f4a490d1a938fc838d8f8c46a4eca864c0d78","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_state_lookup_exact","xfrm_state_lookup_byaddr","xfrm_user_state_lookup","xfrm_do_migrate_state","xfrm_state_update","xfrm_state_migrate_install","xfrm_get_ae","xfrm_new_ae","xfrm_add_sa_expire"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"226f4a490d1a938fc838d8f8c46a4eca864c0d78","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE","IPV6"],"series_id":"b68e6bf7-5fa7-4f20-aa52-d6e5fadf9f98","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-06 15:48:36 +0000 UTC FinishedAt: 2026-07-06 15:50:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowll9cc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"226f4a490d1a938fc838d8f8c46a4eca864c0d78","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_state_lookup_exact","xfrm_state_lookup_byaddr","xfrm_user_state_lookup","xfrm_do_migrate_state","xfrm_state_update","xfrm_state_migrate_install","xfrm_get_ae","xfrm_new_ae","xfrm_add_sa_expire"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"226f4a490d1a938fc838d8f8c46a4eca864c0d78","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE","IPV6"],"series_id":"b68e6bf7-5fa7-4f20-aa52-d6e5fadf9f98","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-06 15:48:36 +0000 UTC FinishedAt: 2026-07-06 15:50:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*49c1e36c-8615-407f-b072-8ef07f0a4de0,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-workflowll9cc/series-workflowll9cc-build-action-2576879989/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-workflowll9cc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"226f4a490d1a938fc838d8f8c46a4eca864c0d78","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_state_lookup_exact","xfrm_state_lookup_byaddr","xfrm_user_state_lookup","xfrm_do_migrate_state","xfrm_state_update","xfrm_state_migrate_install","xfrm_get_ae","xfrm_new_ae","xfrm_add_sa_expire"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"226f4a490d1a938fc838d8f8c46a4eca864c0d78","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE","IPV6"],"series_id":"b68e6bf7-5fa7-4f20-aa52-d6e5fadf9f98","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-06 15:50:58 +0000 UTC FinishedAt: 2026-07-06 15:50:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowll9cc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"226f4a490d1a938fc838d8f8c46a4eca864c0d78","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_state_lookup_exact","xfrm_state_lookup_byaddr","xfrm_user_state_lookup","xfrm_do_migrate_state","xfrm_state_update","xfrm_state_migrate_install","xfrm_get_ae","xfrm_new_ae","xfrm_add_sa_expire"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"226f4a490d1a938fc838d8f8c46a4eca864c0d78","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE","IPV6"],"series_id":"b68e6bf7-5fa7-4f20-aa52-d6e5fadf9f98","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-06 15:50:59 +0000 UTC FinishedAt: 2026-07-06 15:50:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowll9cc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"226f4a490d1a938fc838d8f8c46a4eca864c0d78","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_state_lookup_exact","xfrm_state_lookup_byaddr","xfrm_user_state_lookup","xfrm_do_migrate_state","xfrm_state_update","xfrm_state_migrate_install","xfrm_get_ae","xfrm_new_ae","xfrm_add_sa_expire"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"226f4a490d1a938fc838d8f8c46a4eca864c0d78","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE","IPV6"],"series_id":"b68e6bf7-5fa7-4f20-aa52-d6e5fadf9f98","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-06 15:50:59 +0000 UTC FinishedAt: 2026-07-06 16:14:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowll9cc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"226f4a490d1a938fc838d8f8c46a4eca864c0d78","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_state_lookup_exact","xfrm_state_lookup_byaddr","xfrm_user_state_lookup","xfrm_do_migrate_state","xfrm_state_update","xfrm_state_migrate_install","xfrm_get_ae","xfrm_new_ae","xfrm_add_sa_expire"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"226f4a490d1a938fc838d8f8c46a4eca864c0d78","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE","IPV6"],"series_id":"b68e6bf7-5fa7-4f20-aa52-d6e5fadf9f98","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-06 15:50:59 +0000 UTC FinishedAt: 2026-07-06 16:14:17 +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:*d980a0a5-130c-4f8a-a3ab-c995a61758e8,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-workflowll9cc/series-workflowll9cc-convert-artifact-497530878/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": "f1121636-81af-49fd-9b4f-41775f98deed", "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-workflowll9cc/series-workflowll9cc-build-action-3592324178/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowll9cc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"226f4a490d1a938fc838d8f8c46a4eca864c0d78","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_state_lookup_exact","xfrm_state_lookup_byaddr","xfrm_user_state_lookup","xfrm_do_migrate_state","xfrm_state_update","xfrm_state_migrate_install","xfrm_get_ae","xfrm_new_ae","xfrm_add_sa_expire"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"226f4a490d1a938fc838d8f8c46a4eca864c0d78","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE","IPV6"],"series_id":"b68e6bf7-5fa7-4f20-aa52-d6e5fadf9f98","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-06 15:50:59 +0000 UTC FinishedAt: 2026-07-06 16:14:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*d980a0a5-130c-4f8a-a3ab-c995a61758e8,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-workflowll9cc/series-workflowll9cc-convert-artifact-497530878/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": "f1121636-81af-49fd-9b4f-41775f98deed", "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-workflowll9cc/series-workflowll9cc-build-action-3592324178/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowll9cc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"226f4a490d1a938fc838d8f8c46a4eca864c0d78","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_state_lookup_exact","xfrm_state_lookup_byaddr","xfrm_user_state_lookup","xfrm_do_migrate_state","xfrm_state_update","xfrm_state_migrate_install","xfrm_get_ae","xfrm_new_ae","xfrm_add_sa_expire"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"226f4a490d1a938fc838d8f8c46a4eca864c0d78","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE","IPV6"],"series_id":"b68e6bf7-5fa7-4f20-aa52-d6e5fadf9f98","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-06 16:14:17 +0000 UTC FinishedAt: 2026-07-06 16:14:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowll9cc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"226f4a490d1a938fc838d8f8c46a4eca864c0d78","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_state_lookup_exact","xfrm_state_lookup_byaddr","xfrm_user_state_lookup","xfrm_do_migrate_state","xfrm_state_update","xfrm_state_migrate_install","xfrm_get_ae","xfrm_new_ae","xfrm_add_sa_expire"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"226f4a490d1a938fc838d8f8c46a4eca864c0d78","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE","IPV6"],"series_id":"b68e6bf7-5fa7-4f20-aa52-d6e5fadf9f98","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-06 16:14:17 +0000 UTC FinishedAt: 2026-07-06 16:14:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowll9cc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"226f4a490d1a938fc838d8f8c46a4eca864c0d78","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_state_lookup_exact","xfrm_state_lookup_byaddr","xfrm_user_state_lookup","xfrm_do_migrate_state","xfrm_state_update","xfrm_state_migrate_install","xfrm_get_ae","xfrm_new_ae","xfrm_add_sa_expire"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"226f4a490d1a938fc838d8f8c46a4eca864c0d78","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE","IPV6"],"series_id":"b68e6bf7-5fa7-4f20-aa52-d6e5fadf9f98","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-06 16:14:17 +0000 UTC FinishedAt: 2026-07-06 16:16:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowll9cc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"226f4a490d1a938fc838d8f8c46a4eca864c0d78","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_state_lookup_exact","xfrm_state_lookup_byaddr","xfrm_user_state_lookup","xfrm_do_migrate_state","xfrm_state_update","xfrm_state_migrate_install","xfrm_get_ae","xfrm_new_ae","xfrm_add_sa_expire"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"226f4a490d1a938fc838d8f8c46a4eca864c0d78","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE","IPV6"],"series_id":"b68e6bf7-5fa7-4f20-aa52-d6e5fadf9f98","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-06 16:14:17 +0000 UTC FinishedAt: 2026-07-06 16:16:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f1121636-81af-49fd-9b4f-41775f98deed,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-workflowll9cc/series-workflowll9cc-build-action-3592324178/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-workflowll9cc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"226f4a490d1a938fc838d8f8c46a4eca864c0d78","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_state_lookup_exact","xfrm_state_lookup_byaddr","xfrm_user_state_lookup","xfrm_do_migrate_state","xfrm_state_update","xfrm_state_migrate_install","xfrm_get_ae","xfrm_new_ae","xfrm_add_sa_expire"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"226f4a490d1a938fc838d8f8c46a4eca864c0d78","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE","IPV6"],"series_id":"b68e6bf7-5fa7-4f20-aa52-d6e5fadf9f98","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-06 16:16:22 +0000 UTC FinishedAt: 2026-07-06 19:19:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowll9cc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"226f4a490d1a938fc838d8f8c46a4eca864c0d78","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_state_lookup_exact","xfrm_state_lookup_byaddr","xfrm_user_state_lookup","xfrm_do_migrate_state","xfrm_state_update","xfrm_state_migrate_install","xfrm_get_ae","xfrm_new_ae","xfrm_add_sa_expire"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"226f4a490d1a938fc838d8f8c46a4eca864c0d78","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE","IPV6"],"series_id":"b68e6bf7-5fa7-4f20-aa52-d6e5fadf9f98","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-06 16:16:22 +0000 UTC FinishedAt: 2026-07-06 19:19:53 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_state_lookup_exact","xfrm_state_lookup_byaddr","xfrm_user_state_lookup","xfrm_do_migrate_state","xfrm_state_update","xfrm_state_migrate_install","xfrm_get_ae","xfrm_new_ae","xfrm_add_sa_expire"],"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:*49c1e36c-8615-407f-b072-8ef07f0a4de0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f1121636-81af-49fd-9b4f-41775f98deed,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-workflowll9cc/series-workflowll9cc-build-action-2576879989/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-workflowll9cc/series-workflowll9cc-build-action-3592324178/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowll9cc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"226f4a490d1a938fc838d8f8c46a4eca864c0d78","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_state_lookup_exact","xfrm_state_lookup_byaddr","xfrm_user_state_lookup","xfrm_do_migrate_state","xfrm_state_update","xfrm_state_migrate_install","xfrm_get_ae","xfrm_new_ae","xfrm_add_sa_expire"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"226f4a490d1a938fc838d8f8c46a4eca864c0d78","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE","IPV6"],"series_id":"b68e6bf7-5fa7-4f20-aa52-d6e5fadf9f98","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-06 16:16:22 +0000 UTC FinishedAt: 2026-07-06 16:18:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowll9cc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"226f4a490d1a938fc838d8f8c46a4eca864c0d78","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_state_lookup_exact","xfrm_state_lookup_byaddr","xfrm_user_state_lookup","xfrm_do_migrate_state","xfrm_state_update","xfrm_state_migrate_install","xfrm_get_ae","xfrm_new_ae","xfrm_add_sa_expire"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"226f4a490d1a938fc838d8f8c46a4eca864c0d78","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE","IPV6"],"series_id":"b68e6bf7-5fa7-4f20-aa52-d6e5fadf9f98","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-06 16:16:22 +0000 UTC FinishedAt: 2026-07-06 16:17:17 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_state_lookup_exact","xfrm_state_lookup_byaddr","xfrm_user_state_lookup","xfrm_do_migrate_state","xfrm_state_update","xfrm_state_migrate_install","xfrm_get_ae","xfrm_new_ae","xfrm_add_sa_expire"],"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-workflowll9cc/series-workflowll9cc-convert-artifact-2340742403/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowll9cc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"226f4a490d1a938fc838d8f8c46a4eca864c0d78","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_state_lookup_exact","xfrm_state_lookup_byaddr","xfrm_user_state_lookup","xfrm_do_migrate_state","xfrm_state_update","xfrm_state_migrate_install","xfrm_get_ae","xfrm_new_ae","xfrm_add_sa_expire"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"226f4a490d1a938fc838d8f8c46a4eca864c0d78","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE","IPV6"],"series_id":"b68e6bf7-5fa7-4f20-aa52-d6e5fadf9f98","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-06 16:16:22 +0000 UTC FinishedAt: 2026-07-06 16:16:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowll9cc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"226f4a490d1a938fc838d8f8c46a4eca864c0d78","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_state_lookup_exact","xfrm_state_lookup_byaddr","xfrm_user_state_lookup","xfrm_do_migrate_state","xfrm_state_update","xfrm_state_migrate_install","xfrm_get_ae","xfrm_new_ae","xfrm_add_sa_expire"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"226f4a490d1a938fc838d8f8c46a4eca864c0d78","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE","IPV6"],"series_id":"b68e6bf7-5fa7-4f20-aa52-d6e5fadf9f98","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-06 16:16:22 +0000 UTC FinishedAt: 2026-07-06 16:16:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowll9cc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"226f4a490d1a938fc838d8f8c46a4eca864c0d78","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_state_lookup_exact","xfrm_state_lookup_byaddr","xfrm_user_state_lookup","xfrm_do_migrate_state","xfrm_state_update","xfrm_state_migrate_install","xfrm_get_ae","xfrm_new_ae","xfrm_add_sa_expire"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"226f4a490d1a938fc838d8f8c46a4eca864c0d78","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE","IPV6"],"series_id":"b68e6bf7-5fa7-4f20-aa52-d6e5fadf9f98","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-06 16:16:22 +0000 UTC FinishedAt: 2026-07-06 16:16:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowll9cc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"226f4a490d1a938fc838d8f8c46a4eca864c0d78","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_state_lookup_exact","xfrm_state_lookup_byaddr","xfrm_user_state_lookup","xfrm_do_migrate_state","xfrm_state_update","xfrm_state_migrate_install","xfrm_get_ae","xfrm_new_ae","xfrm_add_sa_expire"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"226f4a490d1a938fc838d8f8c46a4eca864c0d78","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE","IPV6"],"series_id":"b68e6bf7-5fa7-4f20-aa52-d6e5fadf9f98","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-06 16:18:33 +0000 UTC FinishedAt: 2026-07-06 19:19:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowll9cc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"226f4a490d1a938fc838d8f8c46a4eca864c0d78","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_state_lookup_exact","xfrm_state_lookup_byaddr","xfrm_user_state_lookup","xfrm_do_migrate_state","xfrm_state_update","xfrm_state_migrate_install","xfrm_get_ae","xfrm_new_ae","xfrm_add_sa_expire"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"226f4a490d1a938fc838d8f8c46a4eca864c0d78","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE","IPV6"],"series_id":"b68e6bf7-5fa7-4f20-aa52-d6e5fadf9f98","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-06 16:18:33 +0000 UTC FinishedAt: 2026-07-06 19:19:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*49c1e36c-8615-407f-b072-8ef07f0a4de0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f1121636-81af-49fd-9b4f-41775f98deed,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-workflowll9cc/series-workflowll9cc-build-action-2576879989/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-workflowll9cc/series-workflowll9cc-build-action-3592324178/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-workflowll9cc/series-workflowll9cc-convert-artifact-2340742403/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,}