Name: series-workflowfcxfv Phase: Succeeded StartedAt: 2026-08-29 04:47:59 +0000 UTC FinishedAt: 2026-08-29 09:13:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfcxfv[0] Phase: Succeeded StartedAt: 2026-08-29 04:47:59 +0000 UTC FinishedAt: 2026-08-29 05:34:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfcxfv[0].run-triage Phase: Succeeded StartedAt: 2026-08-29 04:47:59 +0000 UTC FinishedAt: 2026-08-29 05:34:48 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "76671054f9a1ff6abb976583cd8da37650acdc97", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SHMEM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "76671054f9a1ff6abb976583cd8da37650acdc97", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SHMEM" ], "series_id": "2587909f-10e5-46eb-9827-51c7fd3bf5d5" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "splice_zeropage_into_pipe", "splice_read_zero", "shmem_file_splice_read" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDA1OjMyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NITUVNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3BsaWNlX3plcm9wYWdlX2ludG9fcGlwZSYjMzQ7LAogICAgJiMzNDtzcGxpY2VfcmVhZF96ZXJvJiMzNDssCiAgICAmIzM0O3NobWVtX2ZpbGVfc3BsaWNlX3JlYWQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBjb3B5X3NwbGljZV9yZWFkIHdpdGggYSBzcGVjaWFsaXplZCBzcGxpY2VfcmVhZF96ZXJvIGltcGxlbWVudGF0aW9uIGZvciAvZGV2L3plcm8gYW5kIC9kZXYvZnVsbCwgbW92aW5nIHNwbGljZV96ZXJvcGFnZV9pbnRvX3BpcGUgYW5kIHplcm9fcGlwZV9idWZfb3BzIGZyb20gbW0vc2htZW0uYyBpbnRvIGZzL3NwbGljZS5jLlxuXG4xLiBNZW1vcnkgSW5pdGlhbGl6YXRpb246XG4tIEluIHNwbGljZV96ZXJvcGFnZV9pbnRvX3BpcGUsIHRoZSBwaXBlIGJ1ZmZlciBpcyBpbml0aWFsaXplZCB1c2luZyBhIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXIgKHN0cnVjdCBwaXBlX2J1ZmZlcil7IC4uLiB9LCB3aGljaCB6ZXJvZXMgYWxsIHVubWVudGlvbmVkIHN0cnVjdCBmaWVsZHMgKGZsYWdzLCBwcml2YXRlKS5cbi0gVGhlIHBhZ2UgcmVmZXJlbmNlZCBpcyBaRVJPX1BBR0UoMCksIHdoaWNoIGlzIHN0YXRpY2FsbHkgYWxsb2NhdGVkIGFuZCB6ZXJvLWluaXRpYWxpemVkLlxuLSBJbiBzcGxpY2VfcmVhZF96ZXJvLCBhbGwgbG9jYWwgdmFyaWFibGVzICh0b3RhbCwgcG9zLCB1c2VkLCBucGFnZXMsIG4sIGxlbikgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS5cblxuMi4gS0FTQU4gdnMgS01TQU4gQXBwbGljYWJpbGl0eTpcbi0gS01TQU4gZGV0ZWN0cyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBhbmQgaW5mby1sZWFrcy4gU2luY2UgYWxsIG1lbW9yeSBzcGxpY2VkIGludG8gdGhlIHBpcGUgaXMgZnJvbSB0aGUgZ2xvYmFsbHkgemVyb2VkIHBhZ2UgYW5kIGFsbCBzdHJ1Y3R1cmVzIGFuZCBsb2NhbCB2YXJpYWJsZXMgYXJlIGZ1bGx5IGluaXRpYWxpemVkLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaGF6YXJkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyBpbnRyb2R1Y2VkLlxuLSBBbnkgcG90ZW50aWFsIHBpcGUgYm91bmRzLCByZWZlcmVuY2UgY291bnRpbmcsIG9yIGNvbmN1cnJlbmN5IGlzc3VlcyBhcmUgd2l0aGluIHRoZSBzY29wZSBvZiBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2Vycy5cblxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZCAoTmVlZHNLTVNBTj1mYWxzZSkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB6ZXJvIHBhZ2UgcGlwZSBzcGxpY2luZyBsb2dpYyBpbnRvIGNvcmUgZnMvc3BsaWNlLmMgYW5kIHVwZGF0ZXMgL2Rldi96ZXJvIGFuZCAvZGV2L2Z1bGwgdG8gdXNlIHNwbGljZV96ZXJvcGFnZV9pbnRvX3BpcGUgZGlyZWN0bHkgdmlhIHRoZSBuZXcgc3BsaWNlX3JlYWRfemVybyBpbXBsZW1lbnRhdGlvbiBpbnN0ZWFkIG9mIGNvcHlfc3BsaWNlX3JlYWQuIFRoaXMgYWZmZWN0cyBjb3JlIFZGUy9waXBlIG9wZXJhdGlvbnMgYW5kIGNoYXJhY3RlciBkZXZpY2UgaGFuZGxpbmcsIHdoaWNoIGlzIHJlYWRpbHkgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDA1OjMyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNTFmY2U1ZDZmNTM1MmQwMTdmODdiMTMwZjYwNzk4ZTAzYjU2Njc4NFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDI5IDA1OjMyOjUwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9tZW0uYyBiL2RyaXZlcnMvY2hhci9tZW0uY1xuaW5kZXggNjMyNTNkMWRlNWQ3MC4uNmQzZWYzNTliMmQ3YiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvY2hhci9tZW0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9jaGFyL21lbS5jXG5AQCAtNDcxLDYgJiM0Mzs0NzEsMzEgQEAgc3RhdGljIHNzaXplX3QgcmVhZF9pdGVyX3plcm8oc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpXG4gXHRyZXR1cm4gd3JpdHRlbjtcbiB9XG4gXG4mIzQzO3N0YXRpYyBzc2l6ZV90IHNwbGljZV9yZWFkX3plcm8oc3RydWN0IGZpbGUgKmluLCBsb2ZmX3QgKnBwb3MsXG4mIzQzO1x0XHRcdFx0c3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSwgc2l6ZV90IGxlbixcbiYjNDM7XHRcdFx0XHR1bnNpZ25lZCBpbnQgZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRzaXplX3QgdG90YWwgPSAwO1xuJiM0MztcdGxvZmZfdCBwb3MgPSAwO1xuJiM0MztcdHNpemVfdCB1c2VkLCBucGFnZXM7XG4mIzQzO1xuJiM0MztcdHVzZWQgPSBwaXBlX2J1Zl91c2FnZShwaXBlKTtcbiYjNDM7XHRpZiAodXNlZCBcdTAwM2U9IHBpcGUtXHUwMDNlbWF4X3VzYWdlKVxuJiM0MztcdFx0cmV0dXJuIC1FQUdBSU47XG4mIzQzO1x0bnBhZ2VzID0gcGlwZS1cdTAwM2VtYXhfdXNhZ2UgLSB1c2VkO1xuJiM0MztcdGxlbiA9IG1pbl90KHNpemVfdCwgbGVuLCBucGFnZXMgKiBQQUdFX1NJWkUpO1xuJiM0MztcbiYjNDM7XHR3aGlsZSAobGVuKSB7XG4mIzQzO1x0XHRzaXplX3QgbiA9IHNwbGljZV96ZXJvcGFnZV9pbnRvX3BpcGUocGlwZSwgcG9zLCBsZW4pO1xuJiM0MztcbiYjNDM7XHRcdHBvcyAmIzQzOz0gbjtcbiYjNDM7XHRcdHRvdGFsICYjNDM7PSBuO1xuJiM0MztcdFx0bGVuIC09IG47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gdG90YWw7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHNzaXplX3QgcmVhZF96ZXJvKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLFxuIFx0XHRcdCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcbiB7XG5AQCAtNjY5LDcgJiM0Mzs2OTQsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB6ZXJvX2ZvcHMgPSB7XG4gXHQucmVhZF9pdGVyXHQ9IHJlYWRfaXRlcl96ZXJvLFxuIFx0LnJlYWRcdFx0PSByZWFkX3plcm8sXG4gXHQud3JpdGVfaXRlclx0PSB3cml0ZV9pdGVyX3plcm8sXG4tXHQuc3BsaWNlX3JlYWRcdD0gY29weV9zcGxpY2VfcmVhZCxcbiYjNDM7XHQuc3BsaWNlX3JlYWRcdD0gc3BsaWNlX3JlYWRfemVybyxcbiBcdC5zcGxpY2Vfd3JpdGVcdD0gc3BsaWNlX3dyaXRlX3plcm8sXG4gXHQubW1hcF9wcmVwYXJlXHQ9IG1tYXBfemVyb19wcmVwYXJlLFxuIFx0LmdldF91bm1hcHBlZF9hcmVhID0gZ2V0X3VubWFwcGVkX2FyZWFfemVybyxcbkBAIC02ODIsNyAmIzQzOzcwNyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZ1bGxfZm9wcyA9IHtcbiBcdC5sbHNlZWtcdFx0PSBmdWxsX2xzZWVrLFxuIFx0LnJlYWRfaXRlclx0PSByZWFkX2l0ZXJfemVybyxcbiBcdC53cml0ZVx0XHQ9IHdyaXRlX2Z1bGwsXG4tXHQuc3BsaWNlX3JlYWRcdD0gY29weV9zcGxpY2VfcmVhZCxcbiYjNDM7XHQuc3BsaWNlX3JlYWRcdD0gc3BsaWNlX3JlYWRfemVybyxcbiB9O1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWVtZGV2IHtcbmRpZmYgLS1naXQgYS9mcy9zcGxpY2UuYyBiL2ZzL3NwbGljZS5jXG5pbmRleCA5ZDhmNjNlMmZkMWFiLi5iNmVhOThjYzYyZmQ1IDEwMDY0NFxuLS0tIGEvZnMvc3BsaWNlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3NwbGljZS5jXG5AQCAtMzk4LDYgJiM0MzszOTgsNjggQEAgc3NpemVfdCBjb3B5X3NwbGljZV9yZWFkKHN0cnVjdCBmaWxlICppbiwgbG9mZl90ICpwcG9zLFxuIH1cbiBFWFBPUlRfU1lNQk9MKGNvcHlfc3BsaWNlX3JlYWQpO1xuIFxuJiM0MzsvKlxuJiM0MzsgKiBQaXBlIGJ1ZmZlciBvcGVyYXRpb25zIGZvciBzcGxpY2luZyB6ZXJvIHBhZ2VzIGludG8gYSBwaXBlLCB1c2VkIHRvXG4mIzQzOyAqIG9wdGltaXplIHJlYWRzIGZyb20gc3BhcnNlIGhvbGVzIGluIGZpbGVzIGFuZCBmcm9tIHplcm8gZGV2aWNlcyBzdWNoIGFzXG4mIzQzOyAqIC9kZXYvemVybyBhbmQgL2Rldi9mdWxsLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGJvb2wgemVyb19waXBlX2J1Zl9nZXQoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSxcbiYjNDM7XHRcdFx0ICAgICAgc3RydWN0IHBpcGVfYnVmZmVyICpidWYpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgemVyb19waXBlX2J1Zl9yZWxlYXNlKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsXG4mIzQzO1x0XHRcdFx0ICBzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1ZilcbiYjNDM7e1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCB6ZXJvX3BpcGVfYnVmX3RyeV9zdGVhbChzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLFxuJiM0MztcdFx0XHRcdCAgICBzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1ZilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Y29uc3Qgc3RydWN0IHBpcGVfYnVmX29wZXJhdGlvbnMgemVyb19waXBlX2J1Zl9vcHMgPSB7XG4mIzQzO1x0LnJlbGVhc2VcdD0gemVyb19waXBlX2J1Zl9yZWxlYXNlLFxuJiM0MztcdC50cnlfc3RlYWxcdD0gemVyb19waXBlX2J1Zl90cnlfc3RlYWwsXG4mIzQzO1x0LmdldFx0XHQ9IHplcm9fcGlwZV9idWZfZ2V0LFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHNwbGljZV96ZXJvcGFnZV9pbnRvX3BpcGUgLSBzcGxpY2UgYSB6ZXJvIHBhZ2UgaW50byBhIHBpcGVcbiYjNDM7ICogQHBpcGU6IHBpcGUgdG8gc3BsaWNlIGludG9cbiYjNDM7ICogQGZwb3M6IGZpbGUgcG9zaXRpb25cbiYjNDM7ICogQHNpemU6IG51bWJlciBvZiBieXRlcyB0byBzcGxpY2VcbiYjNDM7ICpcbiYjNDM7ICogU3BsaWNlIGF0IG1vc3Qgb25lIHBhZ2Ugb2YgemVyb2VzIGludG8gdGhlIHBpcGUuICBUaGUgemVybyBwYWdlIGlzIG5vdFxuJiM0MzsgKiByZWZjb3VudGVkLCBzbyBAemVyb19waXBlX2J1Zl9vcHMgbXVzdCBiZSB1c2VkIHRvIGF2b2lkIHRha2luZyBhXG4mIzQzOyAqIHJlZmVyZW5jZSBvbiBpdC5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHNwbGljZWQuXG4mIzQzOyAqL1xuJiM0MztzaXplX3Qgc3BsaWNlX3plcm9wYWdlX2ludG9fcGlwZShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLFxuJiM0MztcdFx0XHRcdCBsb2ZmX3QgZnBvcywgc2l6ZV90IHNpemUpXG4mIzQzO3tcbiYjNDM7XHRzaXplX3Qgb2Zmc2V0ID0gZnBvcyBcdTAwMjYgflBBR0VfTUFTSztcbiYjNDM7XG4mIzQzO1x0c2l6ZSA9IG1pbl90KHNpemVfdCwgc2l6ZSwgUEFHRV9TSVpFIC0gb2Zmc2V0KTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFwaXBlX2lzX2Z1bGwocGlwZSkpIHtcbiYjNDM7XHRcdHN0cnVjdCBwaXBlX2J1ZmZlciAqYnVmID0gcGlwZV9oZWFkX2J1ZihwaXBlKTtcbiYjNDM7XG4mIzQzO1x0XHQqYnVmID0gKHN0cnVjdCBwaXBlX2J1ZmZlcikge1xuJiM0MztcdFx0XHQub3BzXHQ9IFx1MDAyNnplcm9fcGlwZV9idWZfb3BzLFxuJiM0MztcdFx0XHQucGFnZVx0PSBaRVJPX1BBR0UoMCksXG4mIzQzO1x0XHRcdC5vZmZzZXRcdD0gb2Zmc2V0LFxuJiM0MztcdFx0XHQubGVuXHQ9IHNpemUsXG4mIzQzO1x0XHR9O1xuJiM0MztcdFx0cGlwZS1cdTAwM2VoZWFkJiM0MzsmIzQzOztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBzaXplO1xuJiM0Mzt9XG4mIzQzO1xuIGNvbnN0IHN0cnVjdCBwaXBlX2J1Zl9vcGVyYXRpb25zIGRlZmF1bHRfcGlwZV9idWZfb3BzID0ge1xuIFx0LnJlbGVhc2VcdD0gZ2VuZXJpY19waXBlX2J1Zl9yZWxlYXNlLFxuIFx0LnRyeV9zdGVhbFx0PSBnZW5lcmljX3BpcGVfYnVmX3RyeV9zdGVhbCxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NwbGljZS5oIGIvaW5jbHVkZS9saW51eC9zcGxpY2UuaFxuaW5kZXggOWRlYzQ4NjFkMDlmNi4uZjFkNGFlZmE0ZWMyYyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc3BsaWNlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc3BsaWNlLmhcbkBAIC0xMDgsNCAmIzQzOzEwOCw3IEBAIGV4dGVybiB2b2lkIHNwbGljZV9zaHJpbmtfc3BkKHN0cnVjdCBzcGxpY2VfcGlwZV9kZXNjICopO1xuIFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgcGlwZV9idWZfb3BlcmF0aW9ucyBwYWdlX2NhY2hlX3BpcGVfYnVmX29wcztcbiBleHRlcm4gY29uc3Qgc3RydWN0IHBpcGVfYnVmX29wZXJhdGlvbnMgZGVmYXVsdF9waXBlX2J1Zl9vcHM7XG4mIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgcGlwZV9idWZfb3BlcmF0aW9ucyB6ZXJvX3BpcGVfYnVmX29wcztcbiYjNDM7c2l6ZV90IHNwbGljZV96ZXJvcGFnZV9pbnRvX3BpcGUoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSwgbG9mZl90IGZwb3MsXG4mIzQzO1x0XHRcdFx0IHNpemVfdCBzaXplKTtcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uY1xuaW5kZXggOTAwMWFhZjNiN2I5NC4uMzlkOGRmZWZiZTlmNSAxMDA2NDRcbi0tLSBhL21tL3NobWVtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3NobWVtLmNcbkBAIC0zNDI3LDUxICYjNDM7MzQyNyw2IEBAIHN0YXRpYyBzc2l6ZV90IHNobWVtX2ZpbGVfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLXN0YXRpYyBib29sIHplcm9fcGlwZV9idWZfZ2V0KHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsXG4tXHRcdFx0ICAgICAgc3RydWN0IHBpcGVfYnVmZmVyICpidWYpXG4te1xuLVx0cmV0dXJuIHRydWU7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIHplcm9fcGlwZV9idWZfcmVsZWFzZShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLFxuLVx0XHRcdFx0ICBzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1Zilcbi17XG4tfVxuLVxuLXN0YXRpYyBib29sIHplcm9fcGlwZV9idWZfdHJ5X3N0ZWFsKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsXG4tXHRcdFx0XHQgICAgc3RydWN0IHBpcGVfYnVmZmVyICpidWYpXG4te1xuLVx0cmV0dXJuIGZhbHNlO1xuLX1cbi1cbi1zdGF0aWMgY29uc3Qgc3RydWN0IHBpcGVfYnVmX29wZXJhdGlvbnMgemVyb19waXBlX2J1Zl9vcHMgPSB7XG4tXHQucmVsZWFzZVx0PSB6ZXJvX3BpcGVfYnVmX3JlbGVhc2UsXG4tXHQudHJ5X3N0ZWFsXHQ9IHplcm9fcGlwZV9idWZfdHJ5X3N0ZWFsLFxuLVx0LmdldFx0XHQ9IHplcm9fcGlwZV9idWZfZ2V0LFxuLX07XG4tXG4tc3RhdGljIHNpemVfdCBzcGxpY2VfemVyb3BhZ2VfaW50b19waXBlKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsXG4tXHRcdFx0XHRcdGxvZmZfdCBmcG9zLCBzaXplX3Qgc2l6ZSlcbi17XG4tXHRzaXplX3Qgb2Zmc2V0ID0gZnBvcyBcdTAwMjYgflBBR0VfTUFTSztcbi1cbi1cdHNpemUgPSBtaW5fdChzaXplX3QsIHNpemUsIFBBR0VfU0laRSAtIG9mZnNldCk7XG4tXG4tXHRpZiAoIXBpcGVfaXNfZnVsbChwaXBlKSkge1xuLVx0XHRzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1ZiA9IHBpcGVfaGVhZF9idWYocGlwZSk7XG4tXG4tXHRcdCpidWYgPSAoc3RydWN0IHBpcGVfYnVmZmVyKSB7XG4tXHRcdFx0Lm9wc1x0PSBcdTAwMjZ6ZXJvX3BpcGVfYnVmX29wcyxcbi1cdFx0XHQucGFnZVx0PSBaRVJPX1BBR0UoMCksXG4tXHRcdFx0Lm9mZnNldFx0PSBvZmZzZXQsXG4tXHRcdFx0Lmxlblx0PSBzaXplLFxuLVx0XHR9O1xuLVx0XHRwaXBlLVx1MDAzZWhlYWQmIzQzOyYjNDM7O1xuLVx0fVxuLVxuLVx0cmV0dXJuIHNpemU7XG4tfVxuLVxuIHN0YXRpYyBzc2l6ZV90IHNobWVtX2ZpbGVfc3BsaWNlX3JlYWQoc3RydWN0IGZpbGUgKmluLCBsb2ZmX3QgKnBwb3MsXG4gXHRcdFx0XHQgICAgICBzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLFxuIFx0XHRcdFx0ICAgICAgc2l6ZV90IGxlbiwgdW5zaWduZWQgaW50IGZsYWdzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDA1OjMyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NITUVNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3BsaWNlX3plcm9wYWdlX2ludG9fcGlwZSYjMzQ7LAogICAgJiMzNDtzcGxpY2VfcmVhZF96ZXJvJiMzNDssCiAgICAmIzM0O3NobWVtX2ZpbGVfc3BsaWNlX3JlYWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHplcm8gcGFnZSBwaXBlIHNwbGljaW5nIGxvZ2ljIGludG8gY29yZSBmcy9zcGxpY2UuYyBhbmQgdXBkYXRlcyAvZGV2L3plcm8gYW5kIC9kZXYvZnVsbCB0byB1c2Ugc3BsaWNlX3plcm9wYWdlX2ludG9fcGlwZSBkaXJlY3RseSB2aWEgdGhlIG5ldyBzcGxpY2VfcmVhZF96ZXJvIGltcGxlbWVudGF0aW9uIGluc3RlYWQgb2YgY29weV9zcGxpY2VfcmVhZC4gVGhpcyBhZmZlY3RzIGNvcmUgVkZTL3BpcGUgb3BlcmF0aW9ucyBhbmQgY2hhcmFjdGVyIGRldmljZSBoYW5kbGluZywgd2hpY2ggaXMgcmVhZGlseSByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1MWZjZTVkNmY1MzUyZDAxN2Y4N2IxMzBmNjA3OThlMDNiNTY2Nzg0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMjkgMDU6MzI6NTAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvbWVtLmMgYi9kcml2ZXJzL2NoYXIvbWVtLmMKaW5kZXggNjMyNTNkMWRlNWQ3MC4uNmQzZWYzNTliMmQ3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL21lbS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvY2hhci9tZW0uYwpAQCAtNDcxLDYgJiM0Mzs0NzEsMzEgQEAgc3RhdGljIHNzaXplX3QgcmVhZF9pdGVyX3plcm8oc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpCiAJcmV0dXJuIHdyaXR0ZW47CiB9CiAKJiM0MztzdGF0aWMgc3NpemVfdCBzcGxpY2VfcmVhZF96ZXJvKHN0cnVjdCBmaWxlICppbiwgbG9mZl90ICpwcG9zLAomIzQzOwkJCQlzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLCBzaXplX3QgbGVuLAomIzQzOwkJCQl1bnNpZ25lZCBpbnQgZmxhZ3MpCiYjNDM7ewomIzQzOwlzaXplX3QgdG90YWwgPSAwOwomIzQzOwlsb2ZmX3QgcG9zID0gMDsKJiM0MzsJc2l6ZV90IHVzZWQsIG5wYWdlczsKJiM0MzsKJiM0MzsJdXNlZCA9IHBpcGVfYnVmX3VzYWdlKHBpcGUpOwomIzQzOwlpZiAodXNlZCAmZ3Q7PSBwaXBlLSZndDttYXhfdXNhZ2UpCiYjNDM7CQlyZXR1cm4gLUVBR0FJTjsKJiM0MzsJbnBhZ2VzID0gcGlwZS0mZ3Q7bWF4X3VzYWdlIC0gdXNlZDsKJiM0MzsJbGVuID0gbWluX3Qoc2l6ZV90LCBsZW4sIG5wYWdlcyAqIFBBR0VfU0laRSk7CiYjNDM7CiYjNDM7CXdoaWxlIChsZW4pIHsKJiM0MzsJCXNpemVfdCBuID0gc3BsaWNlX3plcm9wYWdlX2ludG9fcGlwZShwaXBlLCBwb3MsIGxlbik7CiYjNDM7CiYjNDM7CQlwb3MgJiM0Mzs9IG47CiYjNDM7CQl0b3RhbCAmIzQzOz0gbjsKJiM0MzsJCWxlbiAtPSBuOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiB0b3RhbDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgc3NpemVfdCByZWFkX3plcm8oc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsCiAJCQkgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7CkBAIC02NjksNyAmIzQzOzY5NCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHplcm9fZm9wcyA9IHsKIAkucmVhZF9pdGVyCT0gcmVhZF9pdGVyX3plcm8sCiAJLnJlYWQJCT0gcmVhZF96ZXJvLAogCS53cml0ZV9pdGVyCT0gd3JpdGVfaXRlcl96ZXJvLAotCS5zcGxpY2VfcmVhZAk9IGNvcHlfc3BsaWNlX3JlYWQsCiYjNDM7CS5zcGxpY2VfcmVhZAk9IHNwbGljZV9yZWFkX3plcm8sCiAJLnNwbGljZV93cml0ZQk9IHNwbGljZV93cml0ZV96ZXJvLAogCS5tbWFwX3ByZXBhcmUJPSBtbWFwX3plcm9fcHJlcGFyZSwKIAkuZ2V0X3VubWFwcGVkX2FyZWEgPSBnZXRfdW5tYXBwZWRfYXJlYV96ZXJvLApAQCAtNjgyLDcgJiM0Mzs3MDcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmdWxsX2ZvcHMgPSB7CiAJLmxsc2VlawkJPSBmdWxsX2xzZWVrLAogCS5yZWFkX2l0ZXIJPSByZWFkX2l0ZXJfemVybywKIAkud3JpdGUJCT0gd3JpdGVfZnVsbCwKLQkuc3BsaWNlX3JlYWQJPSBjb3B5X3NwbGljZV9yZWFkLAomIzQzOwkuc3BsaWNlX3JlYWQJPSBzcGxpY2VfcmVhZF96ZXJvLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBtZW1kZXYgewpkaWZmIC0tZ2l0IGEvZnMvc3BsaWNlLmMgYi9mcy9zcGxpY2UuYwppbmRleCA5ZDhmNjNlMmZkMWFiLi5iNmVhOThjYzYyZmQ1IDEwMDY0NAotLS0gYS9mcy9zcGxpY2UuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9zcGxpY2UuYwpAQCAtMzk4LDYgJiM0MzszOTgsNjggQEAgc3NpemVfdCBjb3B5X3NwbGljZV9yZWFkKHN0cnVjdCBmaWxlICppbiwgbG9mZl90ICpwcG9zLAogfQogRVhQT1JUX1NZTUJPTChjb3B5X3NwbGljZV9yZWFkKTsKIAomIzQzOy8qCiYjNDM7ICogUGlwZSBidWZmZXIgb3BlcmF0aW9ucyBmb3Igc3BsaWNpbmcgemVybyBwYWdlcyBpbnRvIGEgcGlwZSwgdXNlZCB0bwomIzQzOyAqIG9wdGltaXplIHJlYWRzIGZyb20gc3BhcnNlIGhvbGVzIGluIGZpbGVzIGFuZCBmcm9tIHplcm8gZGV2aWNlcyBzdWNoIGFzCiYjNDM7ICogL2Rldi96ZXJvIGFuZCAvZGV2L2Z1bGwuCiYjNDM7ICovCiYjNDM7c3RhdGljIGJvb2wgemVyb19waXBlX2J1Zl9nZXQoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSwKJiM0MzsJCQkgICAgICBzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1ZikKJiM0Mzt7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB6ZXJvX3BpcGVfYnVmX3JlbGVhc2Uoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSwKJiM0MzsJCQkJICBzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1ZikKJiM0Mzt7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIHplcm9fcGlwZV9idWZfdHJ5X3N0ZWFsKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsCiYjNDM7CQkJCSAgICBzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1ZikKJiM0Mzt7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiYjNDM7Y29uc3Qgc3RydWN0IHBpcGVfYnVmX29wZXJhdGlvbnMgemVyb19waXBlX2J1Zl9vcHMgPSB7CiYjNDM7CS5yZWxlYXNlCT0gemVyb19waXBlX2J1Zl9yZWxlYXNlLAomIzQzOwkudHJ5X3N0ZWFsCT0gemVyb19waXBlX2J1Zl90cnlfc3RlYWwsCiYjNDM7CS5nZXQJCT0gemVyb19waXBlX2J1Zl9nZXQsCiYjNDM7fTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBzcGxpY2VfemVyb3BhZ2VfaW50b19waXBlIC0gc3BsaWNlIGEgemVybyBwYWdlIGludG8gYSBwaXBlCiYjNDM7ICogQHBpcGU6IHBpcGUgdG8gc3BsaWNlIGludG8KJiM0MzsgKiBAZnBvczogZmlsZSBwb3NpdGlvbgomIzQzOyAqIEBzaXplOiBudW1iZXIgb2YgYnl0ZXMgdG8gc3BsaWNlCiYjNDM7ICoKJiM0MzsgKiBTcGxpY2UgYXQgbW9zdCBvbmUgcGFnZSBvZiB6ZXJvZXMgaW50byB0aGUgcGlwZS4gIFRoZSB6ZXJvIHBhZ2UgaXMgbm90CiYjNDM7ICogcmVmY291bnRlZCwgc28gQHplcm9fcGlwZV9idWZfb3BzIG11c3QgYmUgdXNlZCB0byBhdm9pZCB0YWtpbmcgYQomIzQzOyAqIHJlZmVyZW5jZSBvbiBpdC4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogdGhlIG51bWJlciBvZiBieXRlcyBzcGxpY2VkLgomIzQzOyAqLwomIzQzO3NpemVfdCBzcGxpY2VfemVyb3BhZ2VfaW50b19waXBlKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsCiYjNDM7CQkJCSBsb2ZmX3QgZnBvcywgc2l6ZV90IHNpemUpCiYjNDM7ewomIzQzOwlzaXplX3Qgb2Zmc2V0ID0gZnBvcyAmYW1wOyB+UEFHRV9NQVNLOwomIzQzOwomIzQzOwlzaXplID0gbWluX3Qoc2l6ZV90LCBzaXplLCBQQUdFX1NJWkUgLSBvZmZzZXQpOwomIzQzOwomIzQzOwlpZiAoIXBpcGVfaXNfZnVsbChwaXBlKSkgewomIzQzOwkJc3RydWN0IHBpcGVfYnVmZmVyICpidWYgPSBwaXBlX2hlYWRfYnVmKHBpcGUpOwomIzQzOwomIzQzOwkJKmJ1ZiA9IChzdHJ1Y3QgcGlwZV9idWZmZXIpIHsKJiM0MzsJCQkub3BzCT0gJmFtcDt6ZXJvX3BpcGVfYnVmX29wcywKJiM0MzsJCQkucGFnZQk9IFpFUk9fUEFHRSgwKSwKJiM0MzsJCQkub2Zmc2V0CT0gb2Zmc2V0LAomIzQzOwkJCS5sZW4JPSBzaXplLAomIzQzOwkJfTsKJiM0MzsJCXBpcGUtJmd0O2hlYWQmIzQzOyYjNDM7OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBzaXplOwomIzQzO30KJiM0MzsKIGNvbnN0IHN0cnVjdCBwaXBlX2J1Zl9vcGVyYXRpb25zIGRlZmF1bHRfcGlwZV9idWZfb3BzID0gewogCS5yZWxlYXNlCT0gZ2VuZXJpY19waXBlX2J1Zl9yZWxlYXNlLAogCS50cnlfc3RlYWwJPSBnZW5lcmljX3BpcGVfYnVmX3RyeV9zdGVhbCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3BsaWNlLmggYi9pbmNsdWRlL2xpbnV4L3NwbGljZS5oCmluZGV4IDlkZWM0ODYxZDA5ZjYuLmYxZDRhZWZhNGVjMmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3BsaWNlLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zcGxpY2UuaApAQCAtMTA4LDQgJiM0MzsxMDgsNyBAQCBleHRlcm4gdm9pZCBzcGxpY2Vfc2hyaW5rX3NwZChzdHJ1Y3Qgc3BsaWNlX3BpcGVfZGVzYyAqKTsKIAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBwaXBlX2J1Zl9vcGVyYXRpb25zIHBhZ2VfY2FjaGVfcGlwZV9idWZfb3BzOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBwaXBlX2J1Zl9vcGVyYXRpb25zIGRlZmF1bHRfcGlwZV9idWZfb3BzOwomIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgcGlwZV9idWZfb3BlcmF0aW9ucyB6ZXJvX3BpcGVfYnVmX29wczsKJiM0MztzaXplX3Qgc3BsaWNlX3plcm9wYWdlX2ludG9fcGlwZShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLCBsb2ZmX3QgZnBvcywKJiM0MzsJCQkJIHNpemVfdCBzaXplKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbW0vc2htZW0uYyBiL21tL3NobWVtLmMKaW5kZXggOTAwMWFhZjNiN2I5NC4uMzlkOGRmZWZiZTlmNSAxMDA2NDQKLS0tIGEvbW0vc2htZW0uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zaG1lbS5jCkBAIC0zNDI3LDUxICYjNDM7MzQyNyw2IEBAIHN0YXRpYyBzc2l6ZV90IHNobWVtX2ZpbGVfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSkKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgYm9vbCB6ZXJvX3BpcGVfYnVmX2dldChzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLAotCQkJICAgICAgc3RydWN0IHBpcGVfYnVmZmVyICpidWYpCi17Ci0JcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyB2b2lkIHplcm9fcGlwZV9idWZfcmVsZWFzZShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLAotCQkJCSAgc3RydWN0IHBpcGVfYnVmZmVyICpidWYpCi17Ci19Ci0KLXN0YXRpYyBib29sIHplcm9fcGlwZV9idWZfdHJ5X3N0ZWFsKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsCi0JCQkJICAgIHN0cnVjdCBwaXBlX2J1ZmZlciAqYnVmKQotewotCXJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBwaXBlX2J1Zl9vcGVyYXRpb25zIHplcm9fcGlwZV9idWZfb3BzID0gewotCS5yZWxlYXNlCT0gemVyb19waXBlX2J1Zl9yZWxlYXNlLAotCS50cnlfc3RlYWwJPSB6ZXJvX3BpcGVfYnVmX3RyeV9zdGVhbCwKLQkuZ2V0CQk9IHplcm9fcGlwZV9idWZfZ2V0LAotfTsKLQotc3RhdGljIHNpemVfdCBzcGxpY2VfemVyb3BhZ2VfaW50b19waXBlKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsCi0JCQkJCWxvZmZfdCBmcG9zLCBzaXplX3Qgc2l6ZSkKLXsKLQlzaXplX3Qgb2Zmc2V0ID0gZnBvcyAmYW1wOyB+UEFHRV9NQVNLOwotCi0Jc2l6ZSA9IG1pbl90KHNpemVfdCwgc2l6ZSwgUEFHRV9TSVpFIC0gb2Zmc2V0KTsKLQotCWlmICghcGlwZV9pc19mdWxsKHBpcGUpKSB7Ci0JCXN0cnVjdCBwaXBlX2J1ZmZlciAqYnVmID0gcGlwZV9oZWFkX2J1ZihwaXBlKTsKLQotCQkqYnVmID0gKHN0cnVjdCBwaXBlX2J1ZmZlcikgewotCQkJLm9wcwk9ICZhbXA7emVyb19waXBlX2J1Zl9vcHMsCi0JCQkucGFnZQk9IFpFUk9fUEFHRSgwKSwKLQkJCS5vZmZzZXQJPSBvZmZzZXQsCi0JCQkubGVuCT0gc2l6ZSwKLQkJfTsKLQkJcGlwZS0mZ3Q7aGVhZCYjNDM7JiM0Mzs7Ci0JfQotCi0JcmV0dXJuIHNpemU7Ci19Ci0KIHN0YXRpYyBzc2l6ZV90IHNobWVtX2ZpbGVfc3BsaWNlX3JlYWQoc3RydWN0IGZpbGUgKmluLCBsb2ZmX3QgKnBwb3MsCiAJCQkJICAgICAgc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSwKIAkJCQkgICAgICBzaXplX3QgbGVuLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDA1OjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwNjkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0MjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS2VybmVsIFBhdGNoOiBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIG1vdmluZyBzb21lIGNvZGUg4oCTIGB6ZXJvX3BpcGVfYnVmX29wc2AgYW5kIGBzcGxpY2VfemVyb3BhZ2VfaW50b19waXBlYCDigJMgZnJvbSBgbW0vc2htZW0uY2AgdG8gYGZzL3NwbGljZS5jYCBhbmQgZXhwb3J0aW5nIGl0LiBUaGlzIHNlZW1zIHRvIGJlIGRvbmUgdG8gc3VwcG9ydCB0aGUgbmV3IHVzZSBvZiBgc3BsaWNlX3JlYWRfemVyb2Agd2l0aGluIHRoZSBjaGFyYWN0ZXIgZGV2aWNlIGRyaXZlciwgc3BlY2lmaWNhbGx5IGZvciBgL2Rldi96ZXJvYCBhbmQgYC9kZXYvZnVsbGAuIFRoZXkgbm93IHVzZSBgc3BsaWNlX3JlYWRfemVyb2AgZm9yIHRoZWlyIGAuc3BsaWNlX3JlYWRgIG1ldGhvZCwgd2hpY2ggaXMgcHJldHR5IGludGVyZXN0aW5nLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGFzc2VzcyBpdHMgZnV6emluZyBwb3RlbnRpYWwuIFRoaXMgaW1wYWN0cyBjb3JlIGtlcm5lbCBmdW5jdGlvbmFsaXR5LCBpbnZvbHZpbmcgc3RhbmRhcmQgZGV2aWNlcyBsaWtlIGAvZGV2L3plcm9gLCBgL2Rldi9mdWxsYCwgYW5kIHBpcGVzLiBUaGF0JiMzOTtzIGEgaHVnZSBwb3NpdGl2ZS4gSXQmIzM5O3MgZGVmaW5pdGVseSByZWFjaGFibGUgaW4gYSBzdGFuZGFyZCBRRU1VIHNldHVwOyB0aGVzZSBhcmUgZnVuZGFtZW50YWwgZWxlbWVudHMuIE5vdywgdGhlIGtleSBpcyB3aGV0aGVyIGl0IGludHJvZHVjZXMgYSBmdW5jdGlvbmFsIGNoYW5nZS4gQW5kIHllcywgaXQgZG9lcyEgUHJldmlvdXNseSwgdGhvc2UgZGV2aWNlcyB1c2VkIGBjb3B5X3NwbGljZV9yZWFkYCwgYnV0IG5vdyB0aGV5JiMzOTtyZSB1c2luZyB0aGlzIG5ldyBgc3BsaWNlX3JlYWRfemVyb2AsIHdoaWNoIGRpcmVjdGx5IGluc2VydHMgYFpFUk9fUEFHRWAgaW50byB0aGUgcGlwZSBidWZmZXJzIHRocm91Z2ggYHNwbGljZV96ZXJvcGFnZV9pbnRvX3BpcGVgIGFuZCBgemVyb19waXBlX2J1Zl9vcHNgLiBUaGlzIG1lYW5zIHRoYXQgd2hlbiBhIHVzZXIgc3BsaWNlcyBmcm9tIC9kZXYvemVybyB0byBhIHBpcGUsIG9yIHJlYWRzIGZyb20gYSBwaXBlIGNvbnRhaW5pbmcgYFpFUk9fUEFHRWAgYnVmZmVycywgdGhpcyBuZXcgbG9naWMgZ2V0cyB0cmlnZ2VyZWQuIFRoYXQgbWFrZXMgaXQgcHJpbWUgZm9yIGZ1enppbmcuCgpMZXQmIzM5O3MgcXVpY2tseSBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZDogYHNwbGljZV96ZXJvcGFnZV9pbnRvX3BpcGVgIChub3cgaW4gYGZzL3NwbGljZS5jYCksIGBzcGxpY2VfcmVhZF96ZXJvYCAodGhlIHN0YXRpYyBvbmUgaW4gYGRyaXZlcnMvY2hhci9tZW0uY2ApLCBgemVyb19waXBlX2J1Zl9vcHNgLCBhbmQgYHNobWVtX2ZpbGVfc3BsaWNlX3JlYWRgLiBXZSBoYXZlIHRvIGtlZXAgYW4gZXllIG9uIGhvdyB0aGVzZSBpbnRlcmFjdC4KCk5leHQsIEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIGBkcml2ZXJzL2NoYXIvbWVtLmNgIGFuZCBgZnMvc3BsaWNlLmNgLiBMZXQmIzM5O3MgZ3JlcCBhbmQgcmVhZCB0aGUgcmVsZXZhbnQgZmlsZXMgdG8gbWFrZSBzdXJlIG5vdGhpbmcgaXMgcHJldmVudGluZyB0aGlzIGNvZGUgZnJvbSBiZWluZyBidWlsdCBvciwgbW9yZSBpbXBvcnRhbnRseSwgZW5hYmxlZCBpbiBzdGFuZGFyZCBjb25maWd1cmF0aW9ucy4gSSB3YW50IHRvIGVuc3VyZSBpdCYjMzk7cyBidWlsdC1pbiBhbmQgYWNjZXNzaWJsZSBhcyBpdCB3aWxsIGdyZWF0bHkgaW5jcmVhc2UgbXkgYXR0YWNrIHN1cmZhY2UgaWYgaXQgaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDU6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX0RFVk1FTXxDT05GSUdfREVWUE9SVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvY2hhciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2NoYXIvbWVtLmM9MzI1PXN0YXRpYyBpbnQgbW1hcF9tZW1fcHJlcGFyZShzdHJ1Y3Qgdm1fYXJlYV9kZXNjICpkZXNjKVxuLS1cbmRyaXZlcnMvY2hhci9tZW0uYy0zNjQtXG5kcml2ZXJzL2NoYXIvbWVtLmM6MzY1OiNpZmRlZiBDT05GSUdfREVWUE9SVFxuZHJpdmVycy9jaGFyL21lbS5jLTM2Ni1zdGF0aWMgc3NpemVfdCByZWFkX3BvcnQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXG4tLVxuZHJpdmVycy9jaGFyL21lbS5jPTY3Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBudWxsX2ZvcHMgPSB7XG4tLVxuZHJpdmVycy9jaGFyL21lbS5jLTY4MS1cbmRyaXZlcnMvY2hhci9tZW0uYzo2ODI6I2lmZGVmIENPTkZJR19ERVZQT1JUXG5kcml2ZXJzL2NoYXIvbWVtLmMtNjgzLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBvcnRfZm9wcyA9IHtcbi0tXG5kcml2ZXJzL2NoYXIvbWVtLmM9NzEzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbWVtZGV2IHtcbi0tXG5kcml2ZXJzL2NoYXIvbWVtLmMtNzE4LX0gZGV2bGlzdFtdID0ge1xuZHJpdmVycy9jaGFyL21lbS5jOjcxOTojaWZkZWYgQ09ORklHX0RFVk1FTVxuZHJpdmVycy9jaGFyL21lbS5jLTcyMC1cdFtERVZNRU1fTUlOT1JdID0geyBcJiMzNDttZW1cJiMzNDssIFx1MDAyNm1lbV9mb3BzLCAwLCAwIH0sXG4tLVxuZHJpdmVycy9jaGFyL21lbS5jLTcyMi1cdFszXSA9IHsgXCYjMzQ7bnVsbFwmIzM0OywgXHUwMDI2bnVsbF9mb3BzLCBGTU9ERV9OT1dBSVQsIDA2NjYgfSxcbmRyaXZlcnMvY2hhci9tZW0uYzo3MjM6I2lmZGVmIENPTkZJR19ERVZQT1JUXG5kcml2ZXJzL2NoYXIvbWVtLmMtNzI0LVx0WzRdID0geyBcJiMzNDtwb3J0XCYjMzQ7LCBcdTAwMjZwb3J0X2ZvcHMsIDAsIDAgfSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwNTozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1Mzk4CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqSW52ZXN0aWdhdGluZyB0aGUgQnVpbGQgUHJvY2VzcyBmb3IgYG1lbS5jYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCBleGFjdGx5IGhvdyBgbWVtLmNgIGdldHMgY29tcGlsZWQgaW50byB0aGUga2VybmVsLiBNeSBmaXJzdCBpbnN0aW5jdCwgYW5kIGEgcHJldHR5IHNvbGlkIG9uZSBnaXZlbiB0aGUgdHlwaWNhbCBrZXJuZWwgc3RydWN0dXJlLCBpcyB0byBkaXZlIHJpZ2h0IGludG8gYGRyaXZlcnMvY2hhci9NYWtlZmlsZWAuIFRoYXQmIzM5O3Mgd2hlcmUgSSBleHBlY3QgdGhlIGJ1aWxkIHN5c3RlbSB0byBiZSBvcmNoZXN0cmF0aW5nIHRoaW5ncywgZXNwZWNpYWxseSBzaW5jZSBgbWVtLmNgIGlzLCB3ZWxsLCBpbiB0aGUgYGNoYXJgIGRyaXZlciBzcGFjZS4gVGhpcyBNYWtlZmlsZSBzaG91bGQgY29udGFpbiB0aGUgZGVwZW5kZW5jaWVzLCBjb21waWxhdGlvbiBmbGFncywgYW5kIGxpbmtpbmcgY29tbWFuZHMgbmVjZXNzYXJ5IHRvIHRyYW5zZm9ybSB0aGUgc291cmNlIGNvZGUgaW50byB0aGUgb2JqZWN0IGZpbGUsIGFuZCB1bHRpbWF0ZWx5IGludGVncmF0ZSBpdCBpbnRvIHRoZSBrZXJuZWwgaW1hZ2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgcHJvY2VzcyB0aG9yb3VnaGx5LCBzbyBJIGtub3cgaG93IHRvIGRlYnVnIGl0IG9yIG1vZGlmeSBpdCBsYXRlciBpZiBuZWVkZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDU6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvY2hhciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2NoYXIvTWFrZWZpbGUtNS1cbmRyaXZlcnMvY2hhci9NYWtlZmlsZTo2Om9iai15XHRcdFx0XHQmIzQzOz0gbWVtLm8gcmFuZG9tLm9cbmRyaXZlcnMvY2hhci9NYWtlZmlsZS03LW9iai0kKENPTkZJR19UVFlfUFJJTlRLKVx0JiM0Mzs9IHR0eXByaW50ay5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDU6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTY3MQoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZToKCioqRXhhbWluaW5nIEJ1aWxkIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBzbyBgbWVtLm9gIGlzIGNvbnNpc3RlbnRseSBidWlsdCBhcyBwYXJ0IG9mIHRoZSBgb2JqLXlgIHJ1bGUuIFRoYXQmIzM5O3MgYSBnaXZlbiDigJMgSSYjMzk7dmUgc2VlbiB0aGF0IHBhdHRlcm4gY291bnRsZXNzIHRpbWVzIGluIGtlcm5lbCBtYWtlZmlsZXMuIEJ1dCwgaXQgZ290IG1lIHRoaW5raW5nLCAqaG93IHdpZGVzcHJlYWQgaXMgdGhpcyBwYXR0ZXJuPyogIElzIGl0IGNvbnNpc3RlbnQgYWNyb3NzIHRoZSBib2FyZCwgb3IgYXJlIHRoZXJlIGV4Y2VwdGlvbnM/CgpJJiMzOTttIHNwZWNpZmljYWxseSB0aGlua2luZyBhYm91dCBhIG1vZHVsZSBsaWtlIGBmcy9zcGxpY2UuY2AuIExldCYjMzk7cyB1c2UgaXQgYXMgYSB0ZXN0IGNhc2UuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiBpdCBhZGhlcmVzIHRvIHRoZSBzYW1lIGNvbnN0cnVjdGlvbiBvciBpZiB0aGVyZSBpcyBzb21ldGhpbmcgZWxzZSBhdCBwbGF5LiAgTXkgbmV4dCBtb3ZlIGlzIGNsZWFyLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBgZnMvTWFrZWZpbGVgIHRvIHZlcmlmeSBpZiB0aGlzIGJlaGF2aW9yIGlzIHdoYXQgSSBleHBlY3QgdG8gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwNTozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzcGxpY2VcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvTWFrZWZpbGU9MTA9b2JqLXkgOj1cdG9wZW4ubyByZWFkX3dyaXRlLm8gZmlsZV90YWJsZS5vIHN1cGVyLm8gXFxcbi0tXG5mcy9NYWtlZmlsZS0xNC1cdFx0c2VxX2ZpbGUubyB4YXR0ci5vIGxpYmZzLm8gZnMtd3JpdGViYWNrLm8gXFxcbmZzL01ha2VmaWxlOjE1Olx0XHRwbm9kZS5vIHNwbGljZS5vIHN5bmMubyB1dGltZXMubyBkX3BhdGgubyBcXFxuZnMvTWFrZWZpbGUtMTYtXHRcdHN0YWNrLm8gZnNfc3RydWN0Lm8gc3RhdGZzLm8gZnNfcGluLm8gbnNmcy5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDU6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjA0MwoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgYW4gZXhwZXJ0IGluIHRoaXMgYXJlYToKCioqSW52ZXN0aWdhdGluZyB0aGUgQnVpbGQgUHJvY2VzcyBvZiBgc3BsaWNlLm9gKioKCk9rYXksIHNvIGBzcGxpY2Uub2AgaXMgY29uc2lzdGVudGx5IGluY2x1ZGVkIGluIHRoZSBidWlsZCwgbWFya2VkIHdpdGggYG9iai15YC4gVGhhdCYjMzk7cyBhIGdpdmVuLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2h5Ki4gTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgaG93IGl0JiMzOTtzIGludGVncmF0ZWQgd2l0aCBvdGhlciByZWxhdGVkIHNvdXJjZSBmaWxlcy4gTGV0JiMzOTtzIGxvb2sgYXQgYG1tL3NobWVtLmNgLiBJIGV4cGVjdCB0aGVyZSB0byBiZSBhIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jeS4gTm93LCBsb29raW5nIGF0IGBtbS9NYWtlZmlsZWAsIEkgc2VlIHRoYXQgYHNobWVtLm9gIGluY2x1c2lvbiBkZXBlbmRzIG9uIGBDT05GSUdfU0hNRU1gIChvciBgQ09ORklHX1RNUEZTYCB3aGljaCBvZnRlbiBpbXBsaWVzIGBDT05GSUdfU0hNRU1gKS4gVGhpcyBpcyB3aGVyZSB0aGUgY3J1Y2lhbCBsaW5rIGxpZXMsIHNvIEkgbmVlZCB0byBjaGVjayBob3cgYENPTkZJR19TSE1FTWAgaXMgZGVmaW5lZC4gVGhpcyYjMzk7bGwgcHJvYmFibHkgbGVhZCBtZSB0byBhIC5jb25maWcgZmlsZSBvciBhIEtjb25maWcgZmlsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDU6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2htZW1cXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9NTE9b2JqLXlcdFx0XHQ6PSBmaWxlbWFwLm8gbWVtcG9vbC5vIG9vbV9raWxsLm8gZmFkdmlzZS5vIFxcXG4tLVxubW0vTWFrZWZpbGUtNTMtXHRcdFx0ICAgcmVhZGFoZWFkLm8gc3dhcC5vIHRydW5jYXRlLm8gdm1zY2FuLm8gc2hyaW5rZXIubyBcXFxubW0vTWFrZWZpbGU6NTQ6XHRcdFx0ICAgc2htZW0ubyB1dGlsLm8gbW16b25lLm8gdm1zdGF0Lm8gYmFja2luZy1kZXYubyBcXFxubW0vTWFrZWZpbGUtNTUtXHRcdFx0ICAgbW1faW5pdC5vIHBlcmNwdS5vIHNsYWJfY29tbW9uLm8gXFxcbi0tXG5tbS9zaG1lbS5jPTUyMD1zdGF0aWMgaW50IHNobWVtX2NvbmZpcm1fc3dhcChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCBpbmRleCxcbi0tXG5tbS9zaG1lbS5jLTU2OS0jaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9zaG1lbS5jOjU3MDovKiBpZmRlZiBoZXJlIHRvIGF2b2lkIGJsb2F0aW5nIHNobWVtLm8gd2hlbiBub3QgbmVjZXNzYXJ5ICovXG5tbS9zaG1lbS5jLTU3MS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDU6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjU1OAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkNoZWNraW5nIHRoZSBTSE1FTSBJbXBsZW1lbnRhdGlvbioqCgpBbHJpZ2h0LCBzbyBgc2htZW0ub2AgaXMgY2xlYXJseSBwYXJ0IG9mIHRoZSBidWlsZCBwcm9jZXNzLCBsaXN0ZWQgYXMgYW4gYG9iai15YCB0YXJnZXQgd2l0aGluIHRoZSBgbW0vTWFrZWZpbGVgLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIGl0JiMzOTtzIGJlaW5nIGNvbXBpbGVkIGRpcmVjdGx5IGludG8gdGhlIGtlcm5lbCBpbWFnZSBpZiBjZXJ0YWluIGNvbmRpdGlvbnMgYXJlIG1ldC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0aG9zZSBjb25kaXRpb25zIGFyZS4gVGhlIG1vc3QgbG9naWNhbCBuZXh0IHN0ZXAsIGNvbnNpZGVyaW5nIGl0JiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50IHJlbGF0ZWQsIGlzIHRvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGBDT05GSUdfU0hNRU1gLiBNeSBpbW1lZGlhdGUgYXNzdW1wdGlvbiBpcyB0aGF0IGl0JiMzOTtzIHByb2JhYmx5IGVpdGhlciBkZWZpbmVkIGFuZCB1c2VkIGRpcmVjdGx5IGluIGBtbS9zaG1lbS5jYCBpdHNlbGYsIHdoaWNoIHdvdWxkIGJlIHRoZSBtb3N0IG9idmlvdXMgcGxhY2UgZm9yIHRoZSBjb2RlLCBvciBwZXJoYXBzIG1vcmUgbGlrZWx5LCBpbiBgbW0vTWFrZWZpbGVgIGFsb25nc2lkZSB0aGUgZGVjbGFyYXRpb24gb2YgdGhlIG9iamVjdCBmaWxlcyB0byBjb250cm9sIGl0JiMzOTtzIGJ1aWxkLiBLbm93aW5nIHRoZSBrZXJuZWwmIzM5O3MgYnVpbGQgc3lzdGVtLCBpdCYjMzk7cyBwcm9iYWJseSBkZWNsYXJlZCBhcyBhIG1vZHVsZSBpbiB0aGUgbWFrZWZpbGUuIFRoaXMgd2lsbCBwb2ludCBtZSBkaXJlY3RseSB0byB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlLCBzbyBJIGNhbiBzZWUgd2hhdCBlbmFibGluZyB0aGlzIGZ1bmN0aW9uYWxpdHkgZGVwZW5kcyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDU6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX1NITUVNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYz02MTk9c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmh1Z2VwYWdlX2F0dHJbXSA9IHtcbi0tXG5tbS9odWdlX21lbW9yeS5jLTYyMy1cdFx1MDAyNmhwYWdlX3BtZF9zaXplX2F0dHIuYXR0cixcbm1tL2h1Z2VfbWVtb3J5LmM6NjI0OiNpZmRlZiBDT05GSUdfU0hNRU1cbm1tL2h1Z2VfbWVtb3J5LmMtNjI1LVx0XHUwMDI2c2htZW1fZW5hYmxlZF9hdHRyLmF0dHIsXG4tLVxubW0vaHVnZV9tZW1vcnkuYz03MjA9c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmZpbGVfY3RybF9hdHRyc1tdID0ge1xubW0vaHVnZV9tZW1vcnkuYzo3MjE6I2lmZGVmIENPTkZJR19TSE1FTVxubW0vaHVnZV9tZW1vcnkuYy03MjItXHRcdTAwMjZ0aHBzaXplX3NobWVtX2VuYWJsZWRfYXR0ci5hdHRyLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NzgwPURFRklORV9NVEhQX1NUQVRfQVRUUihzd3BvdXRfZmFsbGJhY2ssIE1USFBfU1RBVF9TV1BPVVRfRkFMTEJBQ0spO1xubW0vaHVnZV9tZW1vcnkuYzo3ODE6I2lmZGVmIENPTkZJR19TSE1FTVxubW0vaHVnZV9tZW1vcnkuYy03ODItREVGSU5FX01USFBfU1RBVF9BVFRSKHNobWVtX2FsbG9jLCBNVEhQX1NUQVRfU0hNRU1fQUxMT0MpO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9Nzk2PXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphbm9uX3N0YXRzX2F0dHJzW10gPSB7XG4tLVxubW0vaHVnZV9tZW1vcnkuYy03OTktXHRcdTAwMjZhbm9uX2ZhdWx0X2ZhbGxiYWNrX2NoYXJnZV9hdHRyLmF0dHIsXG5tbS9odWdlX21lbW9yeS5jOjgwMDojaWZuZGVmIENPTkZJR19TSE1FTVxubW0vaHVnZV9tZW1vcnkuYy04MDEtXHRcdTAwMjZ6c3dwb3V0X2F0dHIuYXR0cixcbi0tXG5tbS9odWdlX21lbW9yeS5jPTgyMj1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZmlsZV9zdGF0c19hdHRyc1tdID0ge1xubW0vaHVnZV9tZW1vcnkuYzo4MjM6I2lmZGVmIENPTkZJR19TSE1FTVxubW0vaHVnZV9tZW1vcnkuYy04MjQtXHRcdTAwMjZzaG1lbV9hbGxvY19hdHRyLmF0dHIsXG4tLVxubW0vaHVnZV9tZW1vcnkuYz04MzY9c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmFueV9zdGF0c19hdHRyc1tdID0ge1xubW0vaHVnZV9tZW1vcnkuYzo4Mzc6I2lmZGVmIENPTkZJR19TSE1FTVxubW0vaHVnZV9tZW1vcnkuYy04MzgtXHRcdTAwMjZ6c3dwb3V0X2F0dHIuYXR0cixcbi0tXG5tbS9zaG1lbS5jPTQ2PXN0YXRpYyBzdHJ1Y3QgdmZzbW91bnQgKnNobV9tbnQgX19yb19hZnRlcl9pbml0O1xubW0vc2htZW0uYy00Ny1cbm1tL3NobWVtLmM6NDg6I2lmZGVmIENPTkZJR19TSE1FTVxubW0vc2htZW0uYy00OS0vKlxuLS1cbm1tL3NobWVtLmM9NTY1Mj1fX3NldHVwKFwmIzM0O3RocF9zaG1lbT1cJiMzNDssIHNldHVwX3RocF9zaG1lbSk7XG4tLVxubW0vc2htZW0uYy01NjU1LVxubW0vc2htZW0uYzo1NjU2OiNlbHNlIC8qICFDT05GSUdfU0hNRU0gKi9cbm1tL3NobWVtLmMtNTY1Ny1cbi0tXG5tbS9zaG1lbS5jPTU3MjU9c3RhdGljIGlubGluZSBzdHJ1Y3QgaW5vZGUgKnNobWVtX2dldF9pbm9kZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi0tXG5tbS9zaG1lbS5jLTU3MzItXG5tbS9zaG1lbS5jOjU3MzM6I2VuZGlmIC8qIENPTkZJR19TSE1FTSAqL1xubW0vc2htZW0uYy01NzM0LVxuLS1cbm1tL3NobWVtLmM9NTg4Nz1zdHJ1Y3QgZm9saW8gKnNobWVtX3JlYWRfZm9saW9fZ2ZwKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbm1tL3NobWVtLmMtNTg4OS17XG5tbS9zaG1lbS5jOjU4OTA6I2lmZGVmIENPTkZJR19TSE1FTVxubW0vc2htZW0uYy01ODkxLVx0c3RydWN0IGlub2RlICppbm9kZSA9IG1hcHBpbmctXHUwMDNlaG9zdDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDU6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzY5MgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDU1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS2VybmVsIENvZGUgZm9yIENvbmZpZ3VyYXRpb24gYW5kIEZ1enppbmcgVGFyZ2V0cyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBGaXJzdCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZSBpbnRyb2R1Y2VzIGFueSBub24tc3RhbmRhcmQga2VybmVsIGNvbmZpZ3VyYXRpb25zLiAgSSBrbm93IGBDT05GSUdfU0hNRU1gIGlzIHByZXR0eSBtdWNoIGEgZ2l2ZW4sIGFuZCBmcm9tIGEgcXVpY2sgc2NhbiwgaXQgbG9va3MgbGlrZSB0aGVyZSBhcmVuJiMzOTt0IGFueSAqc3BlY2lmaWMqIGNvbmZpZyBvcHRpb25zIGJleW9uZCB0aGUgdXN1YWwga2VybmVsIGJ1aWxkIHN0dWZmLiBTbyBJIGNhbiBlaXRoZXIgbGlzdCBgU0hNRU1gIG9yLCBpZiB0aGF0IGZlZWxzIHJlZHVuZGFudCwgYW4gZW1wdHkgbGlzdCB3aWxsIHN1ZmZpY2UuIFRoZSBpbnN0cnVjdGlvbnMgYXJlIGNsZWFyOiBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcywgZG9uJiMzOTt0IGFzc3VtZSBhbnl0aGluZywgYW5kIG1ha2Ugc3VyZSB0byBpbmNsdWRlIGFueSAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBmb3IgcGFyZW50IHN1YnN5c3RlbXMgbmVlZGVkIGZvciBhIHN0YXRpYyBidWlsZC4KCk5vdywgbG9va2luZyBhdCB0aGUgY29kZSwgYGRyaXZlcnMvY2hhci9tZW0uY2AgaGFzIGAvZGV2L3plcm9gIGFuZCBgL2Rldi9mdWxsYCwgd2hpY2ggYXJlIHVuY29uZGl0aW9uYWwuIGBmcy9zcGxpY2UuY2AgaXMgYWxzbyB1bmNvbmRpdGlvbmFsbHkgYnVpbHQsIHBhcnQgb2YgYGZzL01ha2VmaWxlYCBhcyBgb2JqLXlgLiBBbmQsIGFzIGV4cGVjdGVkLCBgbW0vc2htZW0uY2AgaXMgZW5hYmxlZCB2aWEgYENPTkZJR19TSE1FTWAsIGFuZCBJIGNhbiBsaXN0IGBTSE1FTWAuCgpOZXh0LCB0aGUgbW9yZSBpbnRlcmVzdGluZyBiaXQ6IGlkZW50aWZ5aW5nIHBvdGVudGlhbCBmdXp6aW5nIHRhcmdldHMuIFRoZSBnb2FsIGlzIHRvIGZvY3VzIG9uIHNwZWNpZmljLCByZWxldmFudCBmdW5jdGlvbnMsIG5vdCBnZW5lcmljIGhvdC1wYXRoIHJvdXRpbmVzLiBUaGUgcHJlZmVyZW5jZSBpcyBmb3Igbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIOKAkyB0aGV5JiMzOTtyZSB0aGUgb25lcyB3aXRoIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMuCgpTbywgd2hhdCYjMzk7cyBuZXcgb3IgbW9kaWZpZWQ/IFdlbGwsIEkgc2VlOgoKMS4gIGBzcGxpY2VfemVyb3BhZ2VfaW50b19waXBlYCAoZnMvc3BsaWNlLmMpOiBUaGlzIGlzIG5vbi1zdGF0aWMgYW5kIGV4cG9ydGVkIGluIGBpbmNsdWRlL2xpbnV4L3NwbGljZS5oYCwgc28gbG9va3MgZ29vZC4KMi4gIGBzcGxpY2VfcmVhZF96ZXJvYCAoZHJpdmVycy9jaGFyL21lbS5jKTogVGhpcyBpcyBhIHN0YXRpYyBjYWxsYmFjaywgYnV0IGl0JiMzOTtzIHRoZSBuZXcgYGZpbGVfb3BlcmF0aW9uc2AgY2FsbGJhY2sgZm9yIGAvZGV2L3plcm9gIGFuZCBgL2Rldi9mdWxsYCwgc3BlY2lmaWNhbGx5IGAuc3BsaWNlX3JlYWRgLiBXb3J0aCBjb25zaWRlcmluZy4KMy4gIGBzaG1lbV9maWxlX3NwbGljZV9yZWFkYCAobW0vc2htZW0uYyk6IFRoaXMgZnVuY3Rpb24gY2FsbHMgYHNwbGljZV96ZXJvcGFnZV9pbnRvX3BpcGVgLgoKTXkgdGhvdWdodCBpcywgYXJlIHRoZXNlIGFwcHJvcHJpYXRlPyBgc3BsaWNlX3plcm9wYWdlX2ludG9fcGlwZWAgaXMgbm9uLXN0YXRpYywgc28gZ29vZC4gSSB3aWxsIGhhdmUgdG8gbG9vayBhdCBgc2htZW1fZmlsZV9zcGxpY2VfcmVhZGAgbm93IHRvIHNlZSBpZiBpdCBpcyBpbmxpbmVkIG9yIG5vbi1zdGF0aWMgaW4gdGhlIHNvdXJjZS4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgc2htZW1fZmlsZV9zcGxpY2VfcmVhZGAgaW4gYG1tL3NobWVtLmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwNTozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzaG1lbV9maWxlX3NwbGljZV9yZWFkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc2htZW0uYz0zNDA4PXN0YXRpYyBzc2l6ZV90IHNobWVtX2ZpbGVfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbi0tXG5tbS9zaG1lbS5jLTM0MjktXG5tbS9zaG1lbS5jOjM0MzA6c3RhdGljIHNzaXplX3Qgc2htZW1fZmlsZV9zcGxpY2VfcmVhZChzdHJ1Y3QgZmlsZSAqaW4sIGxvZmZfdCAqcHBvcyxcbm1tL3NobWVtLmMtMzQzMS1cdFx0XHRcdCAgICAgIHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsXG4tLVxubW0vc2htZW0uYz01MTAzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNobWVtX2ZpbGVfb3BlcmF0aW9ucyA9IHtcbi0tXG5tbS9zaG1lbS5jLTUxMTEtXHQuZnN5bmNcdFx0PSBub29wX2ZzeW5jLFxubW0vc2htZW0uYzo1MTEyOlx0LnNwbGljZV9yZWFkXHQ9IHNobWVtX2ZpbGVfc3BsaWNlX3JlYWQsXG5tbS9zaG1lbS5jLTUxMTMtXHQuc3BsaWNlX3dyaXRlXHQ9IGl0ZXJfZmlsZV9zcGxpY2Vfd3JpdGUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDA1OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwNTcKCQkJCQkJCW91dHB1dDogMTQzCgkJCQkJCQl0aG91Z2h0czogMjI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFJlY2VudCBDb2RlIENoYW5nZXMqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGludG8gdGhlc2UgY2hhbmdlcywgYW5kIGhlcmUmIzM5O3MgbXkgdGFrZS4gYHNwbGljZV96ZXJvcGFnZV9pbnRvX3BpcGVgIGlzIHVuZGVuaWFibHkgYSBmdW5jdGlvbiBkZWZpbmVkIHdpdGhpbiBgZnMvc3BsaWNlLmNgIOKAkyB0aGF0JiMzOTtzIGNsZWFyLiBTaW1pbGFybHksIGBzcGxpY2VfcmVhZF96ZXJvYCBpcyB0aGUgbmV3IHNwbGljZSByZWFkIGhhbmRsZXIsIHJlc2lkaW5nIGluIGBkcml2ZXJzL2NoYXIvbWVtLmNgLgoKSSBhbHdheXMgZG91YmxlLWNoZWNrIHRoZXNlIHRoaW5ncywgc28gSSB3ZW50IGJhY2sgYW5kIGNvbmZpcm1lZCB0aGF0IGluIGBmcy9zcGxpY2UuY2AsIHdlJiMzOTtyZSBhbHNvIGRlYWxpbmcgd2l0aCB0aGUgYHplcm9fcGlwZV9idWZfb3BzYCBzdHJ1Y3QgYWxvbmdzaWRlIGBzcGxpY2VfemVyb3BhZ2VfaW50b19waXBlYCBmdW5jdGlvbi4gVGhlbiwgaW4gYGRyaXZlcnMvY2hhci9tZW0uY2AsIHdlIHNlZSBgc3BsaWNlX3JlYWRfemVyb2AgKGZ1bmN0aW9uKSwgYW5kIGluIGBtbS9zaG1lbS5jYCwgdGhlcmUmIzM5O3MgYHNobWVtX2ZpbGVfc3BsaWNlX3JlYWRgIChmdW5jdGlvbikuCgpUaGlzIHJlYWxseSBkb2VzIGxvb2sgbGlrZSBhIHdvcnRod2hpbGUgYXJlYSBmb3IgZnV6emluZy4gVGhlIGludGVudCBpcyB0byBmdW5kYW1lbnRhbGx5IGFsdGVyIGhvdyB3ZSBoYW5kbGUgYC9kZXYvemVyb2AgYW5kIGAvZGV2L2Z1bGxgLCBtb3ZpbmcgdG93YXJkcyBkaXJlY3QgemVyby1wYWdlIHNwbGljaW5nIGludG8gcGlwZXMgaW5zdGVhZCBvZiB1c2luZyBgY29weV9zcGxpY2VfcmVhZGAuIEFuZCBjcml0aWNhbGx5LCBpdCYjMzk7cyBtYWtpbmcgYHNwbGljZV96ZXJvcGFnZV9pbnRvX3BpcGVgIG1vcmUgZ2VuZXJhbGl6ZWQsIGFsbG93aW5nIGl0cyB1c2UgYWNyb3NzIGRpZmZlcmVudCBmaWxlc3lzdGVtcyBhbmQgY2hhcmFjdGVyIGRldmljZXMuCgpJIHRoaW5rIGl0JiMzOTtzIHRpbWUgdG8gbGV2ZXJhZ2UgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDA1OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTSE1FTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NwbGljZV96ZXJvcGFnZV9pbnRvX3BpcGUmIzM0OywKICAgICYjMzQ7c3BsaWNlX3JlYWRfemVybyYjMzQ7LAogICAgJiMzNDtzaG1lbV9maWxlX3NwbGljZV9yZWFkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB6ZXJvIHBhZ2UgcGlwZSBzcGxpY2luZyBsb2dpYyBpbnRvIGNvcmUgZnMvc3BsaWNlLmMgYW5kIHVwZGF0ZXMgL2Rldi96ZXJvIGFuZCAvZGV2L2Z1bGwgdG8gdXNlIHNwbGljZV96ZXJvcGFnZV9pbnRvX3BpcGUgZGlyZWN0bHkgdmlhIHRoZSBuZXcgc3BsaWNlX3JlYWRfemVybyBpbXBsZW1lbnRhdGlvbiBpbnN0ZWFkIG9mIGNvcHlfc3BsaWNlX3JlYWQuIFRoaXMgYWZmZWN0cyBjb3JlIFZGUy9waXBlIG9wZXJhdGlvbnMgYW5kIGNoYXJhY3RlciBkZXZpY2UgaGFuZGxpbmcsIHdoaWNoIGlzIHJlYWRpbHkgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTSE1FTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NwbGljZV96ZXJvcGFnZV9pbnRvX3BpcGUmIzM0OywKICAgICYjMzQ7c3BsaWNlX3JlYWRfemVybyYjMzQ7LAogICAgJiMzNDtzaG1lbV9maWxlX3NwbGljZV9yZWFkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB6ZXJvIHBhZ2UgcGlwZSBzcGxpY2luZyBsb2dpYyBpbnRvIGNvcmUgZnMvc3BsaWNlLmMgYW5kIHVwZGF0ZXMgL2Rldi96ZXJvIGFuZCAvZGV2L2Z1bGwgdG8gdXNlIHNwbGljZV96ZXJvcGFnZV9pbnRvX3BpcGUgZGlyZWN0bHkgdmlhIHRoZSBuZXcgc3BsaWNlX3JlYWRfemVybyBpbXBsZW1lbnRhdGlvbiBpbnN0ZWFkIG9mIGNvcHlfc3BsaWNlX3JlYWQuIFRoaXMgYWZmZWN0cyBjb3JlIFZGUy9waXBlIG9wZXJhdGlvbnMgYW5kIGNoYXJhY3RlciBkZXZpY2UgaGFuZGxpbmcsIHdoaWNoIGlzIHJlYWRpbHkgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwNTozMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDA1OjMzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgY29weV9zcGxpY2VfcmVhZCB3aXRoIGEgc3BlY2lhbGl6ZWQgc3BsaWNlX3JlYWRfemVybyBpbXBsZW1lbnRhdGlvbiBmb3IgL2Rldi96ZXJvIGFuZCAvZGV2L2Z1bGwsIG1vdmluZyBzcGxpY2VfemVyb3BhZ2VfaW50b19waXBlIGFuZCB6ZXJvX3BpcGVfYnVmX29wcyBmcm9tIG1tL3NobWVtLmMgaW50byBmcy9zcGxpY2UuYy5cblxuMS4gTWVtb3J5IEluaXRpYWxpemF0aW9uOlxuLSBJbiBzcGxpY2VfemVyb3BhZ2VfaW50b19waXBlLCB0aGUgcGlwZSBidWZmZXIgaXMgaW5pdGlhbGl6ZWQgdXNpbmcgYSBkZXNpZ25hdGVkIGluaXRpYWxpemVyIChzdHJ1Y3QgcGlwZV9idWZmZXIpeyAuLi4gfSwgd2hpY2ggemVyb2VzIGFsbCB1bm1lbnRpb25lZCBzdHJ1Y3QgZmllbGRzIChmbGFncywgcHJpdmF0ZSkuXG4tIFRoZSBwYWdlIHJlZmVyZW5jZWQgaXMgWkVST19QQUdFKDApLCB3aGljaCBpcyBzdGF0aWNhbGx5IGFsbG9jYXRlZCBhbmQgemVyby1pbml0aWFsaXplZC5cbi0gSW4gc3BsaWNlX3JlYWRfemVybywgYWxsIGxvY2FsIHZhcmlhYmxlcyAodG90YWwsIHBvcywgdXNlZCwgbnBhZ2VzLCBuLCBsZW4pIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuXG5cbjIuIEtBU0FOIHZzIEtNU0FOIEFwcGxpY2FiaWxpdHk6XG4tIEtNU0FOIGRldGVjdHMgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgYW5kIGluZm8tbGVha3MuIFNpbmNlIGFsbCBtZW1vcnkgc3BsaWNlZCBpbnRvIHRoZSBwaXBlIGlzIGZyb20gdGhlIGdsb2JhbGx5IHplcm9lZCBwYWdlIGFuZCBhbGwgc3RydWN0dXJlcyBhbmQgbG9jYWwgdmFyaWFibGVzIGFyZSBmdWxseSBpbml0aWFsaXplZCwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhemFyZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgaW50cm9kdWNlZC5cbi0gQW55IHBvdGVudGlhbCBwaXBlIGJvdW5kcywgcmVmZXJlbmNlIGNvdW50aW5nLCBvciBjb25jdXJyZW5jeSBpc3N1ZXMgYXJlIHdpdGhpbiB0aGUgc2NvcGUgb2YgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMuXG5cblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQgKE5lZWRzS01TQU49ZmFsc2UpLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1MWZjZTVkNmY1MzUyZDAxN2Y4N2IxMzBmNjA3OThlMDNiNTY2Nzg0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMjkgMDU6MzI6NTAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvbWVtLmMgYi9kcml2ZXJzL2NoYXIvbWVtLmMKaW5kZXggNjMyNTNkMWRlNWQ3MC4uNmQzZWYzNTliMmQ3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL21lbS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvY2hhci9tZW0uYwpAQCAtNDcxLDYgJiM0Mzs0NzEsMzEgQEAgc3RhdGljIHNzaXplX3QgcmVhZF9pdGVyX3plcm8oc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpCiAJcmV0dXJuIHdyaXR0ZW47CiB9CiAKJiM0MztzdGF0aWMgc3NpemVfdCBzcGxpY2VfcmVhZF96ZXJvKHN0cnVjdCBmaWxlICppbiwgbG9mZl90ICpwcG9zLAomIzQzOwkJCQlzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLCBzaXplX3QgbGVuLAomIzQzOwkJCQl1bnNpZ25lZCBpbnQgZmxhZ3MpCiYjNDM7ewomIzQzOwlzaXplX3QgdG90YWwgPSAwOwomIzQzOwlsb2ZmX3QgcG9zID0gMDsKJiM0MzsJc2l6ZV90IHVzZWQsIG5wYWdlczsKJiM0MzsKJiM0MzsJdXNlZCA9IHBpcGVfYnVmX3VzYWdlKHBpcGUpOwomIzQzOwlpZiAodXNlZCAmZ3Q7PSBwaXBlLSZndDttYXhfdXNhZ2UpCiYjNDM7CQlyZXR1cm4gLUVBR0FJTjsKJiM0MzsJbnBhZ2VzID0gcGlwZS0mZ3Q7bWF4X3VzYWdlIC0gdXNlZDsKJiM0MzsJbGVuID0gbWluX3Qoc2l6ZV90LCBsZW4sIG5wYWdlcyAqIFBBR0VfU0laRSk7CiYjNDM7CiYjNDM7CXdoaWxlIChsZW4pIHsKJiM0MzsJCXNpemVfdCBuID0gc3BsaWNlX3plcm9wYWdlX2ludG9fcGlwZShwaXBlLCBwb3MsIGxlbik7CiYjNDM7CiYjNDM7CQlwb3MgJiM0Mzs9IG47CiYjNDM7CQl0b3RhbCAmIzQzOz0gbjsKJiM0MzsJCWxlbiAtPSBuOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiB0b3RhbDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgc3NpemVfdCByZWFkX3plcm8oc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsCiAJCQkgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7CkBAIC02NjksNyAmIzQzOzY5NCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHplcm9fZm9wcyA9IHsKIAkucmVhZF9pdGVyCT0gcmVhZF9pdGVyX3plcm8sCiAJLnJlYWQJCT0gcmVhZF96ZXJvLAogCS53cml0ZV9pdGVyCT0gd3JpdGVfaXRlcl96ZXJvLAotCS5zcGxpY2VfcmVhZAk9IGNvcHlfc3BsaWNlX3JlYWQsCiYjNDM7CS5zcGxpY2VfcmVhZAk9IHNwbGljZV9yZWFkX3plcm8sCiAJLnNwbGljZV93cml0ZQk9IHNwbGljZV93cml0ZV96ZXJvLAogCS5tbWFwX3ByZXBhcmUJPSBtbWFwX3plcm9fcHJlcGFyZSwKIAkuZ2V0X3VubWFwcGVkX2FyZWEgPSBnZXRfdW5tYXBwZWRfYXJlYV96ZXJvLApAQCAtNjgyLDcgJiM0Mzs3MDcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmdWxsX2ZvcHMgPSB7CiAJLmxsc2VlawkJPSBmdWxsX2xzZWVrLAogCS5yZWFkX2l0ZXIJPSByZWFkX2l0ZXJfemVybywKIAkud3JpdGUJCT0gd3JpdGVfZnVsbCwKLQkuc3BsaWNlX3JlYWQJPSBjb3B5X3NwbGljZV9yZWFkLAomIzQzOwkuc3BsaWNlX3JlYWQJPSBzcGxpY2VfcmVhZF96ZXJvLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBtZW1kZXYgewpkaWZmIC0tZ2l0IGEvZnMvc3BsaWNlLmMgYi9mcy9zcGxpY2UuYwppbmRleCA5ZDhmNjNlMmZkMWFiLi5iNmVhOThjYzYyZmQ1IDEwMDY0NAotLS0gYS9mcy9zcGxpY2UuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9zcGxpY2UuYwpAQCAtMzk4LDYgJiM0MzszOTgsNjggQEAgc3NpemVfdCBjb3B5X3NwbGljZV9yZWFkKHN0cnVjdCBmaWxlICppbiwgbG9mZl90ICpwcG9zLAogfQogRVhQT1JUX1NZTUJPTChjb3B5X3NwbGljZV9yZWFkKTsKIAomIzQzOy8qCiYjNDM7ICogUGlwZSBidWZmZXIgb3BlcmF0aW9ucyBmb3Igc3BsaWNpbmcgemVybyBwYWdlcyBpbnRvIGEgcGlwZSwgdXNlZCB0bwomIzQzOyAqIG9wdGltaXplIHJlYWRzIGZyb20gc3BhcnNlIGhvbGVzIGluIGZpbGVzIGFuZCBmcm9tIHplcm8gZGV2aWNlcyBzdWNoIGFzCiYjNDM7ICogL2Rldi96ZXJvIGFuZCAvZGV2L2Z1bGwuCiYjNDM7ICovCiYjNDM7c3RhdGljIGJvb2wgemVyb19waXBlX2J1Zl9nZXQoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSwKJiM0MzsJCQkgICAgICBzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1ZikKJiM0Mzt7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB6ZXJvX3BpcGVfYnVmX3JlbGVhc2Uoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSwKJiM0MzsJCQkJICBzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1ZikKJiM0Mzt7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIHplcm9fcGlwZV9idWZfdHJ5X3N0ZWFsKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsCiYjNDM7CQkJCSAgICBzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1ZikKJiM0Mzt7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiYjNDM7Y29uc3Qgc3RydWN0IHBpcGVfYnVmX29wZXJhdGlvbnMgemVyb19waXBlX2J1Zl9vcHMgPSB7CiYjNDM7CS5yZWxlYXNlCT0gemVyb19waXBlX2J1Zl9yZWxlYXNlLAomIzQzOwkudHJ5X3N0ZWFsCT0gemVyb19waXBlX2J1Zl90cnlfc3RlYWwsCiYjNDM7CS5nZXQJCT0gemVyb19waXBlX2J1Zl9nZXQsCiYjNDM7fTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBzcGxpY2VfemVyb3BhZ2VfaW50b19waXBlIC0gc3BsaWNlIGEgemVybyBwYWdlIGludG8gYSBwaXBlCiYjNDM7ICogQHBpcGU6IHBpcGUgdG8gc3BsaWNlIGludG8KJiM0MzsgKiBAZnBvczogZmlsZSBwb3NpdGlvbgomIzQzOyAqIEBzaXplOiBudW1iZXIgb2YgYnl0ZXMgdG8gc3BsaWNlCiYjNDM7ICoKJiM0MzsgKiBTcGxpY2UgYXQgbW9zdCBvbmUgcGFnZSBvZiB6ZXJvZXMgaW50byB0aGUgcGlwZS4gIFRoZSB6ZXJvIHBhZ2UgaXMgbm90CiYjNDM7ICogcmVmY291bnRlZCwgc28gQHplcm9fcGlwZV9idWZfb3BzIG11c3QgYmUgdXNlZCB0byBhdm9pZCB0YWtpbmcgYQomIzQzOyAqIHJlZmVyZW5jZSBvbiBpdC4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogdGhlIG51bWJlciBvZiBieXRlcyBzcGxpY2VkLgomIzQzOyAqLwomIzQzO3NpemVfdCBzcGxpY2VfemVyb3BhZ2VfaW50b19waXBlKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsCiYjNDM7CQkJCSBsb2ZmX3QgZnBvcywgc2l6ZV90IHNpemUpCiYjNDM7ewomIzQzOwlzaXplX3Qgb2Zmc2V0ID0gZnBvcyAmYW1wOyB+UEFHRV9NQVNLOwomIzQzOwomIzQzOwlzaXplID0gbWluX3Qoc2l6ZV90LCBzaXplLCBQQUdFX1NJWkUgLSBvZmZzZXQpOwomIzQzOwomIzQzOwlpZiAoIXBpcGVfaXNfZnVsbChwaXBlKSkgewomIzQzOwkJc3RydWN0IHBpcGVfYnVmZmVyICpidWYgPSBwaXBlX2hlYWRfYnVmKHBpcGUpOwomIzQzOwomIzQzOwkJKmJ1ZiA9IChzdHJ1Y3QgcGlwZV9idWZmZXIpIHsKJiM0MzsJCQkub3BzCT0gJmFtcDt6ZXJvX3BpcGVfYnVmX29wcywKJiM0MzsJCQkucGFnZQk9IFpFUk9fUEFHRSgwKSwKJiM0MzsJCQkub2Zmc2V0CT0gb2Zmc2V0LAomIzQzOwkJCS5sZW4JPSBzaXplLAomIzQzOwkJfTsKJiM0MzsJCXBpcGUtJmd0O2hlYWQmIzQzOyYjNDM7OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBzaXplOwomIzQzO30KJiM0MzsKIGNvbnN0IHN0cnVjdCBwaXBlX2J1Zl9vcGVyYXRpb25zIGRlZmF1bHRfcGlwZV9idWZfb3BzID0gewogCS5yZWxlYXNlCT0gZ2VuZXJpY19waXBlX2J1Zl9yZWxlYXNlLAogCS50cnlfc3RlYWwJPSBnZW5lcmljX3BpcGVfYnVmX3RyeV9zdGVhbCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3BsaWNlLmggYi9pbmNsdWRlL2xpbnV4L3NwbGljZS5oCmluZGV4IDlkZWM0ODYxZDA5ZjYuLmYxZDRhZWZhNGVjMmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3BsaWNlLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zcGxpY2UuaApAQCAtMTA4LDQgJiM0MzsxMDgsNyBAQCBleHRlcm4gdm9pZCBzcGxpY2Vfc2hyaW5rX3NwZChzdHJ1Y3Qgc3BsaWNlX3BpcGVfZGVzYyAqKTsKIAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBwaXBlX2J1Zl9vcGVyYXRpb25zIHBhZ2VfY2FjaGVfcGlwZV9idWZfb3BzOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBwaXBlX2J1Zl9vcGVyYXRpb25zIGRlZmF1bHRfcGlwZV9idWZfb3BzOwomIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgcGlwZV9idWZfb3BlcmF0aW9ucyB6ZXJvX3BpcGVfYnVmX29wczsKJiM0MztzaXplX3Qgc3BsaWNlX3plcm9wYWdlX2ludG9fcGlwZShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLCBsb2ZmX3QgZnBvcywKJiM0MzsJCQkJIHNpemVfdCBzaXplKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbW0vc2htZW0uYyBiL21tL3NobWVtLmMKaW5kZXggOTAwMWFhZjNiN2I5NC4uMzlkOGRmZWZiZTlmNSAxMDA2NDQKLS0tIGEvbW0vc2htZW0uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zaG1lbS5jCkBAIC0zNDI3LDUxICYjNDM7MzQyNyw2IEBAIHN0YXRpYyBzc2l6ZV90IHNobWVtX2ZpbGVfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSkKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgYm9vbCB6ZXJvX3BpcGVfYnVmX2dldChzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLAotCQkJICAgICAgc3RydWN0IHBpcGVfYnVmZmVyICpidWYpCi17Ci0JcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyB2b2lkIHplcm9fcGlwZV9idWZfcmVsZWFzZShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLAotCQkJCSAgc3RydWN0IHBpcGVfYnVmZmVyICpidWYpCi17Ci19Ci0KLXN0YXRpYyBib29sIHplcm9fcGlwZV9idWZfdHJ5X3N0ZWFsKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsCi0JCQkJICAgIHN0cnVjdCBwaXBlX2J1ZmZlciAqYnVmKQotewotCXJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBwaXBlX2J1Zl9vcGVyYXRpb25zIHplcm9fcGlwZV9idWZfb3BzID0gewotCS5yZWxlYXNlCT0gemVyb19waXBlX2J1Zl9yZWxlYXNlLAotCS50cnlfc3RlYWwJPSB6ZXJvX3BpcGVfYnVmX3RyeV9zdGVhbCwKLQkuZ2V0CQk9IHplcm9fcGlwZV9idWZfZ2V0LAotfTsKLQotc3RhdGljIHNpemVfdCBzcGxpY2VfemVyb3BhZ2VfaW50b19waXBlKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsCi0JCQkJCWxvZmZfdCBmcG9zLCBzaXplX3Qgc2l6ZSkKLXsKLQlzaXplX3Qgb2Zmc2V0ID0gZnBvcyAmYW1wOyB+UEFHRV9NQVNLOwotCi0Jc2l6ZSA9IG1pbl90KHNpemVfdCwgc2l6ZSwgUEFHRV9TSVpFIC0gb2Zmc2V0KTsKLQotCWlmICghcGlwZV9pc19mdWxsKHBpcGUpKSB7Ci0JCXN0cnVjdCBwaXBlX2J1ZmZlciAqYnVmID0gcGlwZV9oZWFkX2J1ZihwaXBlKTsKLQotCQkqYnVmID0gKHN0cnVjdCBwaXBlX2J1ZmZlcikgewotCQkJLm9wcwk9ICZhbXA7emVyb19waXBlX2J1Zl9vcHMsCi0JCQkucGFnZQk9IFpFUk9fUEFHRSgwKSwKLQkJCS5vZmZzZXQJPSBvZmZzZXQsCi0JCQkubGVuCT0gc2l6ZSwKLQkJfTsKLQkJcGlwZS0mZ3Q7aGVhZCYjNDM7JiM0Mzs7Ci0JfQotCi0JcmV0dXJuIHNpemU7Ci19Ci0KIHN0YXRpYyBzc2l6ZV90IHNobWVtX2ZpbGVfc3BsaWNlX3JlYWQoc3RydWN0IGZpbGUgKmluLCBsb2ZmX3QgKnBwb3MsCiAJCQkJICAgICAgc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSwKIAkJCQkgICAgICBzaXplX3QgbGVuLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwNTozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDY2CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNjcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlZmFjdG9yaW5nIGAvZGV2L3plcm9gIGFuZCBgL2Rldi9mdWxsYCBTcGxpY2UgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBjbGVhbmluZyB1cCBzb21lIGNvZGUsIG1vdmluZyBgc3BsaWNlX3plcm9wYWdlX2ludG9fcGlwZWAgYW5kIGB6ZXJvX3BpcGVfYnVmX29wc2Agb3V0IG9mIGBtbS9zaG1lbS5jYCBhbmQgaW50byBgZnMvc3BsaWNlLmNgLiBUaGF0IG1ha2VzIHNlbnNlOyBpdCYjMzk7cyBtb3JlIGdlbmVyYWwgYW5kIGJlbG9uZ3MgdGhlcmUgc2luY2UgaXQmIzM5O3MgYWJvdXQgdGhlIHNwbGljZSBmdW5jdGlvbmFsaXR5IGl0c2VsZi4gV2UmIzM5O3JlIGFsc28gZXhwb3J0aW5nIHRoZW0gdmlhIGBpbmNsdWRlL2xpbnV4L3NwbGljZS5oYCwgd2hpY2ggaXMgY3J1Y2lhbCBmb3IgbWFraW5nIHRoZW0gYWNjZXNzaWJsZSB0byBgL2Rldi96ZXJvYCBhbmQgYC9kZXYvZnVsbGAuIEFuZCBmaW5hbGx5LCBpbXBsZW1lbnRpbmcgYHNwbGljZV9yZWFkX3plcm9gIHdpdGhpbiBgZHJpdmVycy9jaGFyL21lbS5jYC4gTGV0JiMzOTtzIGRpZyBpbnRvIGhvdyBgc3BsaWNlX3JlYWRfemVyb2AgaXMgaW1wbGVtZW50ZWQuCgpMb29raW5nIGF0IGBzcGxpY2VfcmVhZF96ZXJvYCwgSSBzZWUgdGhlIHVzdWFsIHN1c3BlY3RzOiBjaGVja2luZyBwaXBlIHVzYWdlLCBjYWxjdWxhdGluZyBob3cgbXVjaCB0byByZWFkLCBhbmQgdGhlbiB0aGlzIGBzcGxpY2VfemVyb3BhZ2VfaW50b19waXBlYCBjYWxsIHdpdGhpbiBhIGxvb3AuIFRoZSBsb29wIGxvb2tzIHNvdW5kLCBoYW5kbGluZyBwb3RlbnRpYWwgcGFydGlhbCBwYWdlIHJlYWRzLiBCdXQsIHRoYXQgYHNwbGljZV96ZXJvcGFnZV9pbnRvX3BpcGVgIGZ1bmN0aW9uIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLi4uCgpBaCwgaW4gYHNwbGljZV96ZXJvcGFnZV9pbnRvX3BpcGVgLCBhIHN0cnVjdCBsaXRlcmFsIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgYHBpcGVfYnVmZmVyYDoKYCpidWYgPSAoc3RydWN0IHBpcGVfYnVmZmVyKSB7IC5vcHMgPSAmYW1wO3plcm9fcGlwZV9idWZfb3BzLCAucGFnZSA9IFpFUk9fUEFHRSgwKSwgLm9mZnNldCA9IG9mZnNldCwgLmxlbiA9IHNpemUsIH07YAoKVGhlIGtleSBoZXJlIGlzIHRoYXQgaXQgc2V0cyBgLnBhZ2UgPSBaRVJPX1BBR0UoMClgLiBSaWdodCwgYFpFUk9fUEFHRSgwKWAgaXMgKnRoZSogZ2xvYmFsLCB6ZXJvLWZpbGxlZCBwYWdlLiBUaGlzIGF2b2lkcyBhbnkgYWN0dWFsIG1lbW9yeSBhbGxvY2F0aW9uLiBXZSYjMzk7cmUganVzdCBwb2ludGluZyB0byBhIHByZS1leGlzdGluZyBwYWdlIGZpbGxlZCB3aXRoIHplcm9zLiBUaGF0JiMzOTtzIGEgY2xldmVyIG9wdGltaXphdGlvbiwgYW5kIGl0JiMzOTtzIHdoYXQgbWFrZXMgcmVhZGluZyBmcm9tIGAvZGV2L3plcm9gIGFuZCBgL2Rldi9mdWxsYCBzbyBlZmZpY2llbnQuIEFuZCBzaW5jZSBhIHN0cnVjdCBsaXRlcmFsIGlzIHVzZWQsIGFsbCB1bmFzc2lnbmVkIGZpZWxkcyBhcmUgemVyby1pbml0aWFsaXplZC4gTm93LCBsZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGBzdHJ1Y3QgcGlwZV9idWZmZXJgIGRlZmluaXRpb24ganVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhhdCBhbnkgcG90ZW50aWFsbHkgcmVsZXZhbnQgZmllbGRzIGFyZSBleHBsaWNpdGx5IGhhbmRsZWQgb3IgcHJvcGVybHkgemVyb2VkIGJ5IHRoZSBsaXRlcmFsLiBJIGNhbiYjMzk7dCBiZSB0b28gY2FyZWZ1bC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDU6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IHBpcGVfYnVmZmVyIFxceyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3BpcGVfZnNfaS5oLTI1LSAqKi9cbmluY2x1ZGUvbGludXgvcGlwZV9mc19pLmg6MjY6c3RydWN0IHBpcGVfYnVmZmVyIHtcbmluY2x1ZGUvbGludXgvcGlwZV9mc19pLmgtMjctXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDU6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTI5NAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gUGlwZSBGUyBJbnRlcm5hbHMqKgoKT2theSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBrZXJuZWwmIzM5O3MgcGlwZSBmaWxlc3lzdGVtIG9wZXJhdGVzLiBUaW1lIHRvIGNyYWNrIG9wZW4gdGhlIHNvdXJjZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IGBpbmNsdWRlL2xpbnV4L3BpcGVfZnNfaS5oYCwgc3RhcnRpbmcgYXJvdW5kIGxpbmUgMjYuIFRoYXQmIzM5O3MgdXN1YWxseSB3aGVyZSB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGxpa2VseSBzb21lIGNydWNpYWwgbWFjcm8gZGVmaW5pdGlvbnMgcmVzaWRlIGZvciB0aGVzZSB0eXBlcyBvZiBzdWJzeXN0ZW1zLiBNeSBpbnR1aXRpb24gc2F5cyB0aGF0JiMzOTtzIHdoZXJlIEkgY2FuIHN0YXJ0IHVudGFuZ2xpbmcgdGhlIGludGVyYWN0aW9ucyB3aXRoaW4gdGhlIHBpcGUgZmlsZXN5c3RlbS4gVW5kZXJzdGFuZGluZyB0aGVzZSBsb3ctbGV2ZWwgZGV0YWlscyB3aWxsIGNsYXJpZnkgaG93IHBpcGVzIGFyZSBpbXBsZW1lbnRlZCwgZXNwZWNpYWxseSB0aGUgZGF0YSBzdHJ1Y3R1cmVzIHVzZWQgdG8gbWFuYWdlIHRoZSBidWZmZXJzIGFuZCByZWFkZXIvd3JpdGVyIHN5bmNocm9uaXphdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0IGBwaXBlX2ZzX2kuaGAgcmV2ZWFscyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDU6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3BpcGVfZnNfaS5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAyNTpcdCAqKi9cbiAgMjY6XHRzdHJ1Y3QgcGlwZV9idWZmZXIge1xuICAyNzpcdFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4gIDI4Olx0XHR1bnNpZ25lZCBpbnQgb2Zmc2V0LCBsZW47XG4gIDI5Olx0XHRjb25zdCBzdHJ1Y3QgcGlwZV9idWZfb3BlcmF0aW9ucyAqb3BzO1xuICAzMDpcdFx0dW5zaWduZWQgaW50IGZsYWdzO1xuICAzMTpcdFx0dW5zaWduZWQgbG9uZyBwcml2YXRlO1xuICAzMjpcdH07XG4gIDMzOlx0XG4gIDM0Olx0LypcbiAgMzU6XHQgKiBSZWFsbHkgb25seSBhbHBoYSBuZWVkcyAzMi1iaXQgZmllbGRzLCBidXRcbiAgMzY6XHQgKiBtaWdodCBhcyB3ZWxsIGRvIGl0IGZvciA2NC1iaXQgYXJjaGl0ZWN0dXJlc1xuICAzNzpcdCAqIHNpbmNlIHRoYXQmIzM5O3Mgd2hhdCB3ZSYjMzk7dmUgaGlzdG9yaWNhbGx5IGRvbmUsXG4gIDM4Olx0ICogYW5kIGl0IG1ha2VzICYjMzk7aGVhZF90YWlsJiMzOTsgYWx3YXlzIGJlIGEgc2ltcGxlXG4gIDM5Olx0ICogJiMzOTt1bnNpZ25lZCBsb25nJiMzOTsuXG4gIDQwOlx0ICovXG4gIDQxOlx0I2lmZGVmIENPTkZJR182NEJJVFxuICA0MjpcdHR5cGVkZWYgdW5zaWduZWQgaW50IHBpcGVfaW5kZXhfdDtcbiAgNDM6XHQjZWxzZVxuICA0NDpcdHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgcGlwZV9pbmRleF90O1xuICA0NTpcdCNlbmRpZlxuICA0NjpcdFxuICA0NzpcdC8qKlxuICA0ODpcdCAqXHRzdHJ1Y3QgcGlwZV9pbmRleCAtIHBpcGUgaW5kZWNlc1xuICA0OTpcdCAqXHRAaGVhZDogVGhlIHBvaW50IG9mIGJ1ZmZlciBwcm9kdWN0aW9uXG4gIDUwOlx0ICpcdEB0YWlsOiBUaGUgcG9pbnQgb2YgYnVmZmVyIGNvbnN1bXB0aW9uXG4gIDUxOlx0ICpcdEBoZWFkX3RhaWw6IHVuc2lnbmVkIGxvbmcgdW5pb24gb2YgQGhlYWQgYW5kIEB0YWlsXG4gIDUyOlx0ICovXG4gIDUzOlx0dW5pb24gcGlwZV9pbmRleCB7XG4gIDU0Olx0XHR1bnNpZ25lZCBsb25nIGhlYWRfdGFpbDtcbiAgNTU6XHRcdHN0cnVjdCB7XG4gIDU2Olx0XHRcdHBpcGVfaW5kZXhfdCBoZWFkO1xuICA1NzpcdFx0XHRwaXBlX2luZGV4X3QgdGFpbDtcbiAgNTg6XHRcdH07XG4gIDU5Olx0fTtcbiAgNjA6XHRcbiAgNjE6XHQvKipcbiAgNjI6XHQgKlx0c3RydWN0IHBpcGVfaW5vZGVfaW5mbyAtIGEgbGludXgga2VybmVsIHBpcGVcbiAgNjM6XHQgKlx0QG11dGV4OiBtdXRleCBwcm90ZWN0aW5nIHRoZSB3aG9sZSB0aGluZ1xuICA2NDpcdCAqXHRAcmRfd2FpdDogcmVhZGVyIHdhaXQgcG9pbnQgaW4gY2FzZSBvZiBlbXB0eSBwaXBlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDA1OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwMTQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEaXZpbmcgaW50byBzaG1lbSYjMzk7cyBTcGxpY2UgSW1wbGVtZW50YXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBzaGFyZWQgbWVtb3J5IChzaG1lbSkgdXRpbGl6ZXMgYHNwbGljZV96ZXJvcGFnZV9pbnRvX3BpcGVgIGFuZCBob3cgdGhhdCYjMzk7cyBpbnRlcmFjdGluZyB3aXRoIGBzcGxpY2VfcmVhZF96ZXJvYC4gR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiBrZXJuZWwgaW50ZXJuYWxzLCBJJiMzOTtsbCBuZWVkIGEgc29saWQgZ3JpcCBvbiB0aGUgbG93LWxldmVsIGRldGFpbHMgb2YgaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgaW50ZXJ0d2luZWQuIFNvLCBteSBzdGFydGluZyBwb2ludCBpcyBnb2luZyB0byBiZSBgbW0vc2htZW0uY2AsIHRoYXQmIzM5O3Mgd2hlcmUgYHNobWVtX2ZpbGVfc3BsaWNlX3JlYWRgIHdpbGwgYmUgZGVmaW5lZC4gSXQmIzM5O3MgdGhlIGx5bmNocGluIEkmIzM5O20gYWZ0ZXIsIHRoZSBmdW5jdGlvbiB0aGF0IHJldmVhbHMgdGhlIGludGVycGxheSBiZXR3ZWVuIHNobWVtLCBzcGxpY2luZywgYW5kIHRoZSB6ZXJvLXBhZ2Ugb3B0aW1pemF0aW9uLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIGhvdyB0aGV5JiMzOTtyZSBtYWtpbmcgdGhpcyBtYWdpYyBoYXBwZW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDA1OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vc2htZW0uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM0MjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzQyNTpcdHVubG9jazpcbjM0MjY6XHRcdGlub2RlX3VubG9jayhpbm9kZSk7XG4zNDI3Olx0XHRyZXR1cm4gcmV0O1xuMzQyODpcdH1cbjM0Mjk6XHRcbjM0MzA6XHRzdGF0aWMgc3NpemVfdCBzaG1lbV9maWxlX3NwbGljZV9yZWFkKHN0cnVjdCBmaWxlICppbiwgbG9mZl90ICpwcG9zLFxuMzQzMTpcdFx0XHRcdFx0ICAgICAgc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSxcbjM0MzI6XHRcdFx0XHRcdCAgICAgIHNpemVfdCBsZW4sIHVuc2lnbmVkIGludCBmbGFncylcbjM0MzM6XHR7XG4zNDM0Olx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShpbik7XG4zNDM1Olx0XHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGlub2RlLVx1MDAzZWlfbWFwcGluZztcbjM0MzY6XHRcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBOVUxMO1xuMzQzNzpcdFx0c2l6ZV90IHRvdGFsX3NwbGljZWQgPSAwLCB1c2VkLCBucGFnZXMsIG4sIHBhcnQ7XG4zNDM4Olx0XHRsb2ZmX3QgaXNpemU7XG4zNDM5Olx0XHRpbnQgZXJyb3IgPSAwO1xuMzQ0MDpcdFxuMzQ0MTpcdFx0LyogV29yayBvdXQgaG93IG11Y2ggZGF0YSB3ZSBjYW4gYWN0dWFsbHkgYWRkIGludG8gdGhlIHBpcGUgKi9cbjM0NDI6XHRcdHVzZWQgPSBwaXBlX2J1Zl91c2FnZShwaXBlKTtcbjM0NDM6XHRcdG5wYWdlcyA9IG1heF90KHNzaXplX3QsIHBpcGUtXHUwMDNlbWF4X3VzYWdlIC0gdXNlZCwgMCk7XG4zNDQ0Olx0XHRsZW4gPSBtaW5fdChzaXplX3QsIGxlbiwgbnBhZ2VzICogUEFHRV9TSVpFKTtcbjM0NDU6XHRcbjM0NDY6XHRcdGRvIHtcbjM0NDc6XHRcdFx0Ym9vbCBmYWxsYmFja19wYWdlX3NwbGljZSA9IGZhbHNlO1xuMzQ0ODpcdFx0XHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7XG4zNDQ5Olx0XHRcdHBnb2ZmX3QgaW5kZXg7XG4zNDUwOlx0XHRcdHNpemVfdCBzaXplO1xuMzQ1MTpcdFxuMzQ1MjpcdFx0XHRpZiAoKnBwb3MgXHUwMDNlPSBpX3NpemVfcmVhZChpbm9kZSkpXG4zNDUzOlx0XHRcdFx0YnJlYWs7XG4zNDU0Olx0XG4zNDU1Olx0XHRcdGluZGV4ID0gKnBwb3MgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4zNDU2Olx0XHRcdGVycm9yID0gc2htZW1fZ2V0X2ZvbGlvKGlub2RlLCBpbmRleCwgMCwgXHUwMDI2Zm9saW8sIFNHUF9SRUFEKTtcbjM0NTc6XHRcdFx0aWYgKGVycm9yKSB7XG4zNDU4Olx0XHRcdFx0aWYgKGVycm9yID09IC1FSU5WQUwpXG4zNDU5Olx0XHRcdFx0XHRlcnJvciA9IDA7XG4zNDYwOlx0XHRcdFx0YnJlYWs7XG4zNDYxOlx0XHRcdH1cbjM0NjI6XHRcdFx0aWYgKGZvbGlvKSB7XG4zNDYzOlx0XHRcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbjM0NjQ6XHRcbjM0NjU6XHRcdFx0XHRwYWdlID0gZm9saW9fZmlsZV9wYWdlKGZvbGlvLCBpbmRleCk7XG4zNDY2Olx0XHRcdFx0aWYgKFBhZ2VIV1BvaXNvbihwYWdlKSkge1xuMzQ2NzpcdFx0XHRcdFx0ZXJyb3IgPSAtRUlPO1xuMzQ2ODpcdFx0XHRcdFx0YnJlYWs7XG4zNDY5Olx0XHRcdFx0fVxuMzQ3MDpcdFxuMzQ3MTpcdFx0XHRcdGlmIChmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSBcdTAwMjZcdTAwMjZcbjM0NzI6XHRcdFx0XHQgICAgZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpXG4zNDczOlx0XHRcdFx0XHRmYWxsYmFja19wYWdlX3NwbGljZSA9IHRydWU7XG4zNDc0Olx0XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDU6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzAwNgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBEZWVwZXIgaW50byBgc2htZW1fZmlsZV9zcGxpY2VfcmVhZGAqKgoKQWxyaWdodCwgc28gdGhlIGZvY3VzIGlzIG5vdyBvbiBtZXRpY3Vsb3VzbHkgZXhhbWluaW5nIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgc2htZW1fZmlsZV9zcGxpY2VfcmVhZGAuIFdlJiMzOTt2ZSBhbHJlYWR5IGdvdCBhIGdvb2QgaGFuZGxlIG9uIHNvbWUgYXNwZWN0cywgYnV0IHRoZSBkZXZpbHMgYWx3YXlzIGluIHRoZSBkZXRhaWxzLCBpc24mIzM5O3QgaXQ/IExldCYjMzk7cyBhc3N1bWUgd2UmIzM5O3JlIGFscmVhZHkgZmFtaWxpYXIgd2l0aCBpdHMgY29yZSBmdW5jdGlvbmFsaXR5LiBOb3cgSSB3YW50IHRvIHRob3JvdWdobHkgZGlzc2VjdCB0aGUgZnVuY3Rpb24sIHByb2JhYmx5IHRvIGNhdGNoIHNvbWV0aGluZyBzcGVjaWZpYy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBvdmVybG9va2luZyBhbnkgc3VidGxlIGVkZ2UgY2FzZXMsIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgKGVzcGVjaWFsbHkgd2l0aCBzaGFyZWQgbWVtb3J5IG9wZXJhdGlvbnMpLCBtZW1vcnkgbGVha3MsIG9yIG9ic2N1cmUgb3B0aW1pemF0aW9ucyAob3IgbGFjayB0aGVyZW9mKSB0aGF0IGNvdWxkIGJlIGNhdXNpbmcgYSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrIG9yLCBldmVuIHdvcnNlLCBhIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHNoYXJlZCBtZW1vcnksIHNvIGFueSBzbGlwLXVwIGhlcmUgY291bGQgYmUgY2F0YXN0cm9waGljLiBJIG5lZWQgdG8gbG9vayBmb3IgYW55IHVuaGFuZGxlZCBlcnJvcnMsIGluYWRlcXVhdGUgYnVmZmVyIGhhbmRsaW5nLCBvciBwZXJoYXBzIG92ZXJseSBhZ2dyZXNzaXZlIGxvY2tpbmcgbWVjaGFuaXNtcyB0aGF0IG1pZ2h0IGJlIGNvdW50ZXJwcm9kdWN0aXZlLiBMZXQmIzM5O3Mgc2VlIGlmIHdlJiMzOTtyZSBkb2luZyB0aGUgcmlnaHQgdGhpbmcgZm9yIGRhdGEgYWxpZ25tZW50IGhlcmUuIEkgaGF2ZSBhIGZlZWxpbmcgd2UmIzM5O3JlIG1pc3Npbmcgc29tZXRoaW5nIGFuZCBJJiMzOTttIHJlYWR5IHRvIGZpZ3VyZSBpdCBvdXQuIFRpbWUgdG8gcm9sbCB1cCB0aGUgc2xlZXZlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDU6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9zaG1lbS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzQ3NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszNDc1Olx0XG4zNDc2Olx0XHRcdC8qXG4zNDc3Olx0XHRcdCAqIGlfc2l6ZSBtdXN0IGJlIGNoZWNrZWQgYWZ0ZXIgd2Uga25vdyB0aGUgcGFnZXMgYXJlIFVwdG9kYXRlLlxuMzQ3ODpcdFx0XHQgKlxuMzQ3OTpcdFx0XHQgKiBDaGVja2luZyBpX3NpemUgYWZ0ZXIgdGhlIGNoZWNrIGFsbG93cyB1cyB0byBjYWxjdWxhdGVcbjM0ODA6XHRcdFx0ICogdGhlIGNvcnJlY3QgdmFsdWUgZm9yIFwmIzM0O25yXCYjMzQ7LCB3aGljaCBtZWFucyB0aGUgemVyby1maWxsZWRcbjM0ODE6XHRcdFx0ICogcGFydCBvZiB0aGUgcGFnZSBpcyBub3QgY29waWVkIGJhY2sgdG8gdXNlcnNwYWNlICh1bmxlc3NcbjM0ODI6XHRcdFx0ICogYW5vdGhlciB0cnVuY2F0ZSBleHRlbmRzIHRoZSBmaWxlIC0gdGhpcyBpcyBkZXNpcmVkIHRob3VnaCkuXG4zNDgzOlx0XHRcdCAqL1xuMzQ4NDpcdFx0XHRpc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTtcbjM0ODU6XHRcdFx0aWYgKHVubGlrZWx5KCpwcG9zIFx1MDAzZT0gaXNpemUpKVxuMzQ4NjpcdFx0XHRcdGJyZWFrO1xuMzQ4NzpcdFx0XHQvKlxuMzQ4ODpcdFx0XHQgKiBGYWxsYmFjayB0byBQQUdFX1NJWkUgc3BsaWNlIGlmIHRoZSBsYXJnZSBmb2xpbyBoYXMgaHdwb2lzb25lZFxuMzQ4OTpcdFx0XHQgKiBwYWdlcy5cbjM0OTA6XHRcdFx0ICovXG4zNDkxOlx0XHRcdHNpemUgPSBsZW47XG4zNDkyOlx0XHRcdGlmICh1bmxpa2VseShmYWxsYmFja19wYWdlX3NwbGljZSkpIHtcbjM0OTM6XHRcdFx0XHRzaXplX3Qgb2Zmc2V0ID0gKnBwb3MgXHUwMDI2IH5QQUdFX01BU0s7XG4zNDk0Olx0XG4zNDk1Olx0XHRcdFx0c2l6ZSA9IHVtaW4oc2l6ZSwgUEFHRV9TSVpFIC0gb2Zmc2V0KTtcbjM0OTY6XHRcdFx0fVxuMzQ5NzpcdFx0XHRwYXJ0ID0gbWluX3QobG9mZl90LCBpc2l6ZSAtICpwcG9zLCBzaXplKTtcbjM0OTg6XHRcbjM0OTk6XHRcdFx0aWYgKGZvbGlvKSB7XG4zNTAwOlx0XHRcdFx0LypcbjM1MDE6XHRcdFx0XHQgKiBJZiB1c2VycyBjYW4gYmUgd3JpdGluZyB0byB0aGlzIHBhZ2UgdXNpbmcgYXJiaXRyYXJ5XG4zNTAyOlx0XHRcdFx0ICogdmlydHVhbCBhZGRyZXNzZXMsIHRha2UgY2FyZSBhYm91dCBwb3RlbnRpYWwgYWxpYXNpbmdcbjM1MDM6XHRcdFx0XHQgKiBiZWZvcmUgcmVhZGluZyB0aGUgcGFnZSBvbiB0aGUga2VybmVsIHNpZGUuXG4zNTA0Olx0XHRcdFx0ICovXG4zNTA1Olx0XHRcdFx0aWYgKG1hcHBpbmdfd3JpdGFibHlfbWFwcGVkKG1hcHBpbmcpKSB7XG4zNTA2Olx0XHRcdFx0XHRpZiAobGlrZWx5KCFmYWxsYmFja19wYWdlX3NwbGljZSkpXG4zNTA3Olx0XHRcdFx0XHRcdGZsdXNoX2RjYWNoZV9mb2xpbyhmb2xpbyk7XG4zNTA4Olx0XHRcdFx0XHRlbHNlXG4zNTA5Olx0XHRcdFx0XHRcdGZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpO1xuMzUxMDpcdFx0XHRcdH1cbjM1MTE6XHRcdFx0XHRmb2xpb19tYXJrX2FjY2Vzc2VkKGZvbGlvKTtcbjM1MTI6XHRcdFx0XHQvKlxuMzUxMzpcdFx0XHRcdCAqIE9rLCB3ZSBoYXZlIHRoZSBwYWdlLCBhbmQgaXQmIzM5O3MgdXAtdG8tZGF0ZSwgc28gd2UgY2FuXG4zNTE0Olx0XHRcdFx0ICogbm93IHNwbGljZSBpdCBpbnRvIHRoZSBwaXBlLlxuMzUxNTpcdFx0XHRcdCAqL1xuMzUxNjpcdFx0XHRcdG4gPSBzcGxpY2VfZm9saW9faW50b19waXBlKHBpcGUsIGZvbGlvLCAqcHBvcywgcGFydCk7XG4zNTE3Olx0XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbjM1MTg6XHRcdFx0XHRmb2xpbyA9IE5VTEw7XG4zNTE5Olx0XHRcdH0gZWxzZSB7XG4zNTIwOlx0XHRcdFx0biA9IHNwbGljZV96ZXJvcGFnZV9pbnRvX3BpcGUocGlwZSwgKnBwb3MsIHBhcnQpO1xuMzUyMTpcdFx0XHR9XG4zNTIyOlx0XG4zNTIzOlx0XHRcdGlmICghbilcbjM1MjQ6XHRcdFx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDU6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODAzMwoJCQkJCQkJb3V0cHV0OiAyOTgKCQkJCQkJCXRob3VnaHRzOiA3NjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgVW5pbml0aWFsaXplZCBNZW1vcnkgRXhwb3N1cmUqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoZSBwYXRjaCBtb3ZlcyBgc3BsaWNlX3plcm9wYWdlX2ludG9fcGlwZWAgYW5kIGB6ZXJvX3BpcGVfYnVmX29wc2AgZnJvbSBgbW0vc2htZW0uY2AgdG8gYGZzL3NwbGljZS5jYC4gVGhlbiwgaXQgcmV1c2VzIGBzcGxpY2VfemVyb3BhZ2VfaW50b19waXBlYCB3aXRoaW4gYHNwbGljZV9yZWFkX3plcm9gIHRvIGhhbmRsZSBgL2Rldi96ZXJvYCBhbmQgYC9kZXYvZnVsbGAgaW4gYGRyaXZlcnMvY2hhci9tZW0uY2AsIGVzc2VudGlhbGx5IGNoYW5naW5nIHRoZWlyIGAuc3BsaWNlX3JlYWRgIG1ldGhvZCBmcm9tIGBjb3B5X3NwbGljZV9yZWFkYCB0byBgc3BsaWNlX3JlYWRfemVyb2AuIFNvLCB0aGUgY29yZSBjaGFuZ2UgaXMgcmVkaXJlY3RpbmcgYC9kZXYvemVyb2AgYW5kIGAvZGV2L2Z1bGxgIHRvIGEgbmV3IG9wdGltaXplZCBwYXRoLgoKTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uOiB1bmluaXRpYWxpemVkIG1lbW9yeS4gTGV0JiMzOTtzIGRpZyBpbnRvIGBzcGxpY2VfcmVhZF96ZXJvYC4gSSBzZWUgdGhhdCB0aGUgdmFyaWFibGVzIGB0b3RhbGAsIGBwb3NgLCBgdXNlZGAsIGFuZCBgbnBhZ2VzYCBhcmUgYWxsIHByaW1pdGl2ZSB0eXBlcyBhbmQgaW5pdGlhbGl6ZWQgY29ycmVjdGx5LiBUaGUgY2FsbCB0byBgcGlwZV9idWZfdXNhZ2UocGlwZSlgIGxvb2tzIHN0YW5kYXJkLiBJbiBgcGlwZV96ZXJvcGFnZV9pbnRvX3BpcGUocGlwZSwgcG9zLCBsZW4pYCwgYHBvc2AgaXMgc3RhcnRpbmcgYXQgMCBhbmQgdGhlIGAqYnVmID0gKHN0cnVjdCBwaXBlX2J1ZmZlcikgeyAuLi4gfWAgc3ludGF4IGZvciBpbml0aWFsaXppbmcgYHN0cnVjdCBwaXBlX2J1ZmZlcmAgaXMgc3BvdCBvbiwgZ3VhcmFudGVlaW5nIGFsbCBmaWVsZHMgYXJlIGluaXRpYWxpemVkLCB3aXRoIHRoZSByZXN0IHplcm8taW5pdGlhbGl6ZWQgYnkgdGhlIEMgc3RhbmRhcmQuIGBaRVJPX1BBR0UoMClgIGlzLCBvZiBjb3Vyc2UsIHRoZSBrZXJuZWwmIzM5O3MgemVybyBwYWdlIOKAkyBpdCYjMzk7cyBmdWxseSBpbml0aWFsaXplZCB0byB6ZXJvLiBUaGlzIG1lYW5zIHRoYXQgZGF0YSBjb21pbmcgb3V0IG9mIHRoaXMgY29kZSBwYXRoIHdpbGwgKmFsd2F5cyogYmUgemVyb2VkLgoKU28sIGRvZXMgdGhpcyBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBOby4gVGhlIGBaRVJPX1BBR0UoMClgIGlzIGFsbCB6ZXJvZXMuIFRoZSBgcGlwZV9idWZmZXJgIHN0cnVjdCBpcyBwcm9wZXJseSBpbml0aWFsaXplZCB1c2luZyBDOTkgc3ludGF4LCB3aGljaCBpbmNsdWRlcyB6ZXJvaW5nIGFueSByZW1haW5pbmcgZmllbGRzLiBObyBrZXJuZWwgc3RhY2sgb3IgaGVhcCBtZW1vcnkgaXMgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3IgdXNlZCBpbiBjb25kaXRpb25hbCBsb2dpYy4gVGhlIHZhcmlhYmxlcyBgcG9zYCwgYHRvdGFsYCwgYGxlbmAsIGB1c2VkYCwgYG5wYWdlc2AgYXJlIGFsbCBpbml0aWFsaXplZCBhbmQgY29ycmVjdGx5IGNhbGN1bGF0ZWQuCgpOb3csIHJlZ2FyZGluZyBLTVNBTi1zcGVjaWZpYyBjb25jZXJucy4gRG9lcyB0aGlzIGludm9sdmUga2VybmVsIHN0cnVjdHVyZXMgYmVpbmcgc2VudCB0byB1c2Vyc3BhY2Ugd2l0aCBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGZpZWxkcz8gTm8sIHRoZSB1c2VyIHJlYWRzIG9ubHkgemVyb2VzIGZyb20gYFpFUk9fUEFHRSgwKWAuIElzIHRoZXJlIGNvbmRpdGlvbmFsIGxvZ2ljIHJlbHlpbmcgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IE5vcGUsIGFsbCB0aGUgdmFyaWFibGVzIHdpdGhpbiBgc3BsaWNlX3JlYWRfemVyb2AgYXJlIGluaXRpYWxpemVkIGFuZCBkZXRlcm1pbmVkIGJhc2VkIG9uIHRoZSBjb2RlLiBBcmUgdGhlcmUgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcyB0aGF0IGNvdWxkIGJlIHJlYWQgbGF0ZXI/IEFnYWluLCBuby4gVGhlIGBzdHJ1Y3QgcGlwZV9idWZmZXJgIGlzIHplcm9lZC4gRG9lcyB0aGlzIHBsYXkgd2l0aCBib3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBkYXRhIGluIHN1cnJvdW5kaW5nIGJ1ZmZlcnM/IE5vdCBhdCBhbGwuIFRoZSBkYXRhIGFsd2F5cyBjb21lcyBmcm9tIHRoZSBnbG9iYWwgemVybyBwYWdlLgoKU28sIEkmIzM5O20gY29uZmlkZW50IGluIHNheWluZyB0aGF0IHRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gQW55IGJ1Z3MgcmVsYXRlZCB0byBwaXBlIGJ1ZmZlcnMsIHBhZ2UgcmVmY291bnRpbmcsIG9yIHNwbGljZSBsb2NraW5nIHdvdWxkIGJlIGhhbmRsZWQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgY2hlY2tzLiBEZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpc24mIzM5O3QgbmVjZXNzYXJ5IGhlcmUuIE5vdywgdGltZSB0byBmb3JtdWxhdGUgdGhlIHJlc3BvbnNlIGFuZCBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDA1OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIGNvcHlfc3BsaWNlX3JlYWQgd2l0aCBhIHNwZWNpYWxpemVkIHNwbGljZV9yZWFkX3plcm8gaW1wbGVtZW50YXRpb24gZm9yIC9kZXYvemVybyBhbmQgL2Rldi9mdWxsLCBtb3Zpbmcgc3BsaWNlX3plcm9wYWdlX2ludG9fcGlwZSBhbmQgemVyb19waXBlX2J1Zl9vcHMgZnJvbSBtbS9zaG1lbS5jIGludG8gZnMvc3BsaWNlLmMuXG5cbjEuIE1lbW9yeSBJbml0aWFsaXphdGlvbjpcbi0gSW4gc3BsaWNlX3plcm9wYWdlX2ludG9fcGlwZSwgdGhlIHBpcGUgYnVmZmVyIGlzIGluaXRpYWxpemVkIHVzaW5nIGEgZGVzaWduYXRlZCBpbml0aWFsaXplciAoc3RydWN0IHBpcGVfYnVmZmVyKXsgLi4uIH0sIHdoaWNoIHplcm9lcyBhbGwgdW5tZW50aW9uZWQgc3RydWN0IGZpZWxkcyAoZmxhZ3MsIHByaXZhdGUpLlxuLSBUaGUgcGFnZSByZWZlcmVuY2VkIGlzIFpFUk9fUEFHRSgwKSwgd2hpY2ggaXMgc3RhdGljYWxseSBhbGxvY2F0ZWQgYW5kIHplcm8taW5pdGlhbGl6ZWQuXG4tIEluIHNwbGljZV9yZWFkX3plcm8sIGFsbCBsb2NhbCB2YXJpYWJsZXMgKHRvdGFsLCBwb3MsIHVzZWQsIG5wYWdlcywgbiwgbGVuKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLlxuXG4yLiBLQVNBTiB2cyBLTVNBTiBBcHBsaWNhYmlsaXR5OlxuLSBLTVNBTiBkZXRlY3RzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGFuZCBpbmZvLWxlYWtzLiBTaW5jZSBhbGwgbWVtb3J5IHNwbGljZWQgaW50byB0aGUgcGlwZSBpcyBmcm9tIHRoZSBnbG9iYWxseSB6ZXJvZWQgcGFnZSBhbmQgYWxsIHN0cnVjdHVyZXMgYW5kIGxvY2FsIHZhcmlhYmxlcyBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBoYXphcmRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIGludHJvZHVjZWQuXG4tIEFueSBwb3RlbnRpYWwgcGlwZSBib3VuZHMsIHJlZmVyZW5jZSBjb3VudGluZywgb3IgY29uY3VycmVuY3kgaXNzdWVzIGFyZSB3aXRoaW4gdGhlIHNjb3BlIG9mIEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnZXJzLlxuXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkIChOZWVkc0tNU0FOPWZhbHNlKS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIGNvcHlfc3BsaWNlX3JlYWQgd2l0aCBhIHNwZWNpYWxpemVkIHNwbGljZV9yZWFkX3plcm8gaW1wbGVtZW50YXRpb24gZm9yIC9kZXYvemVybyBhbmQgL2Rldi9mdWxsLCBtb3Zpbmcgc3BsaWNlX3plcm9wYWdlX2ludG9fcGlwZSBhbmQgemVyb19waXBlX2J1Zl9vcHMgZnJvbSBtbS9zaG1lbS5jIGludG8gZnMvc3BsaWNlLmMuXG5cbjEuIE1lbW9yeSBJbml0aWFsaXphdGlvbjpcbi0gSW4gc3BsaWNlX3plcm9wYWdlX2ludG9fcGlwZSwgdGhlIHBpcGUgYnVmZmVyIGlzIGluaXRpYWxpemVkIHVzaW5nIGEgZGVzaWduYXRlZCBpbml0aWFsaXplciAoc3RydWN0IHBpcGVfYnVmZmVyKXsgLi4uIH0sIHdoaWNoIHplcm9lcyBhbGwgdW5tZW50aW9uZWQgc3RydWN0IGZpZWxkcyAoZmxhZ3MsIHByaXZhdGUpLlxuLSBUaGUgcGFnZSByZWZlcmVuY2VkIGlzIFpFUk9fUEFHRSgwKSwgd2hpY2ggaXMgc3RhdGljYWxseSBhbGxvY2F0ZWQgYW5kIHplcm8taW5pdGlhbGl6ZWQuXG4tIEluIHNwbGljZV9yZWFkX3plcm8sIGFsbCBsb2NhbCB2YXJpYWJsZXMgKHRvdGFsLCBwb3MsIHVzZWQsIG5wYWdlcywgbiwgbGVuKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLlxuXG4yLiBLQVNBTiB2cyBLTVNBTiBBcHBsaWNhYmlsaXR5OlxuLSBLTVNBTiBkZXRlY3RzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGFuZCBpbmZvLWxlYWtzLiBTaW5jZSBhbGwgbWVtb3J5IHNwbGljZWQgaW50byB0aGUgcGlwZSBpcyBmcm9tIHRoZSBnbG9iYWxseSB6ZXJvZWQgcGFnZSBhbmQgYWxsIHN0cnVjdHVyZXMgYW5kIGxvY2FsIHZhcmlhYmxlcyBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBoYXphcmRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIGludHJvZHVjZWQuXG4tIEFueSBwb3RlbnRpYWwgcGlwZSBib3VuZHMsIHJlZmVyZW5jZSBjb3VudGluZywgb3IgY29uY3VycmVuY3kgaXNzdWVzIGFyZSB3aXRoaW4gdGhlIHNjb3BlIG9mIEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnZXJzLlxuXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkIChOZWVkc0tNU0FOPWZhbHNlKS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDU6MzI6NTIuNDMyOTcyMDU5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA0MjQ5ODEwODY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNITUVNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3BsaWNlX3plcm9wYWdlX2ludG9fcGlwZVwiLFxuICAgIFwic3BsaWNlX3JlYWRfemVyb1wiLFxuICAgIFwic2htZW1fZmlsZV9zcGxpY2VfcmVhZFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgY29weV9zcGxpY2VfcmVhZCB3aXRoIGEgc3BlY2lhbGl6ZWQgc3BsaWNlX3JlYWRfemVybyBpbXBsZW1lbnRhdGlvbiBmb3IgL2Rldi96ZXJvIGFuZCAvZGV2L2Z1bGwsIG1vdmluZyBzcGxpY2VfemVyb3BhZ2VfaW50b19waXBlIGFuZCB6ZXJvX3BpcGVfYnVmX29wcyBmcm9tIG1tL3NobWVtLmMgaW50byBmcy9zcGxpY2UuYy5cXG5cXG4xLiBNZW1vcnkgSW5pdGlhbGl6YXRpb246XFxuLSBJbiBzcGxpY2VfemVyb3BhZ2VfaW50b19waXBlLCB0aGUgcGlwZSBidWZmZXIgaXMgaW5pdGlhbGl6ZWQgdXNpbmcgYSBkZXNpZ25hdGVkIGluaXRpYWxpemVyIChzdHJ1Y3QgcGlwZV9idWZmZXIpeyAuLi4gfSwgd2hpY2ggemVyb2VzIGFsbCB1bm1lbnRpb25lZCBzdHJ1Y3QgZmllbGRzIChmbGFncywgcHJpdmF0ZSkuXFxuLSBUaGUgcGFnZSByZWZlcmVuY2VkIGlzIFpFUk9fUEFHRSgwKSwgd2hpY2ggaXMgc3RhdGljYWxseSBhbGxvY2F0ZWQgYW5kIHplcm8taW5pdGlhbGl6ZWQuXFxuLSBJbiBzcGxpY2VfcmVhZF96ZXJvLCBhbGwgbG9jYWwgdmFyaWFibGVzICh0b3RhbCwgcG9zLCB1c2VkLCBucGFnZXMsIG4sIGxlbikgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS5cXG5cXG4yLiBLQVNBTiB2cyBLTVNBTiBBcHBsaWNhYmlsaXR5Olxcbi0gS01TQU4gZGV0ZWN0cyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBhbmQgaW5mby1sZWFrcy4gU2luY2UgYWxsIG1lbW9yeSBzcGxpY2VkIGludG8gdGhlIHBpcGUgaXMgZnJvbSB0aGUgZ2xvYmFsbHkgemVyb2VkIHBhZ2UgYW5kIGFsbCBzdHJ1Y3R1cmVzIGFuZCBsb2NhbCB2YXJpYWJsZXMgYXJlIGZ1bGx5IGluaXRpYWxpemVkLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaGF6YXJkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyBpbnRyb2R1Y2VkLlxcbi0gQW55IHBvdGVudGlhbCBwaXBlIGJvdW5kcywgcmVmZXJlbmNlIGNvdW50aW5nLCBvciBjb25jdXJyZW5jeSBpc3N1ZXMgYXJlIHdpdGhpbiB0aGUgc2NvcGUgb2YgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMuXFxuXFxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZCAoTmVlZHNLTVNBTj1mYWxzZSkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHplcm8gcGFnZSBwaXBlIHNwbGljaW5nIGxvZ2ljIGludG8gY29yZSBmcy9zcGxpY2UuYyBhbmQgdXBkYXRlcyAvZGV2L3plcm8gYW5kIC9kZXYvZnVsbCB0byB1c2Ugc3BsaWNlX3plcm9wYWdlX2ludG9fcGlwZSBkaXJlY3RseSB2aWEgdGhlIG5ldyBzcGxpY2VfcmVhZF96ZXJvIGltcGxlbWVudGF0aW9uIGluc3RlYWQgb2YgY29weV9zcGxpY2VfcmVhZC4gVGhpcyBhZmZlY3RzIGNvcmUgVkZTL3BpcGUgb3BlcmF0aW9ucyBhbmQgY2hhcmFjdGVyIGRldmljZSBoYW5kbGluZywgd2hpY2ggaXMgcmVhZGlseSByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDA1OjMyOjUyLjQzMjk3NjEwOVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM2NTIyMTYwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDUxZmNlNWQ2ZjUzNTJkMDE3Zjg3YjEzMGY2MDc5OGUwM2I1NjY3ODRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBBdWcgMjkgMDU6MzI6NTAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL21lbS5jIGIvZHJpdmVycy9jaGFyL21lbS5jXFxuaW5kZXggNjMyNTNkMWRlNWQ3MC4uNmQzZWYzNTliMmQ3YiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2NoYXIvbWVtLmNcXG4rKysgYi9kcml2ZXJzL2NoYXIvbWVtLmNcXG5AQCAtNDcxLDYgKzQ3MSwzMSBAQCBzdGF0aWMgc3NpemVfdCByZWFkX2l0ZXJfemVybyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcilcXG4gXFx0cmV0dXJuIHdyaXR0ZW47XFxuIH1cXG4gXFxuK3N0YXRpYyBzc2l6ZV90IHNwbGljZV9yZWFkX3plcm8oc3RydWN0IGZpbGUgKmluLCBsb2ZmX3QgKnBwb3MsXFxuK1xcdFxcdFxcdFxcdHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsIHNpemVfdCBsZW4sXFxuK1xcdFxcdFxcdFxcdHVuc2lnbmVkIGludCBmbGFncylcXG4re1xcbitcXHRzaXplX3QgdG90YWwgPSAwO1xcbitcXHRsb2ZmX3QgcG9zID0gMDtcXG4rXFx0c2l6ZV90IHVzZWQsIG5wYWdlcztcXG4rXFxuK1xcdHVzZWQgPSBwaXBlX2J1Zl91c2FnZShwaXBlKTtcXG4rXFx0aWYgKHVzZWQgXFx1MDAzZT0gcGlwZS1cXHUwMDNlbWF4X3VzYWdlKVxcbitcXHRcXHRyZXR1cm4gLUVBR0FJTjtcXG4rXFx0bnBhZ2VzID0gcGlwZS1cXHUwMDNlbWF4X3VzYWdlIC0gdXNlZDtcXG4rXFx0bGVuID0gbWluX3Qoc2l6ZV90LCBsZW4sIG5wYWdlcyAqIFBBR0VfU0laRSk7XFxuK1xcbitcXHR3aGlsZSAobGVuKSB7XFxuK1xcdFxcdHNpemVfdCBuID0gc3BsaWNlX3plcm9wYWdlX2ludG9fcGlwZShwaXBlLCBwb3MsIGxlbik7XFxuK1xcbitcXHRcXHRwb3MgKz0gbjtcXG4rXFx0XFx0dG90YWwgKz0gbjtcXG4rXFx0XFx0bGVuIC09IG47XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiB0b3RhbDtcXG4rfVxcbitcXG4gc3RhdGljIHNzaXplX3QgcmVhZF96ZXJvKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLFxcbiBcXHRcXHRcXHQgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXFxuIHtcXG5AQCAtNjY5LDcgKzY5NCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHplcm9fZm9wcyA9IHtcXG4gXFx0LnJlYWRfaXRlclxcdD0gcmVhZF9pdGVyX3plcm8sXFxuIFxcdC5yZWFkXFx0XFx0PSByZWFkX3plcm8sXFxuIFxcdC53cml0ZV9pdGVyXFx0PSB3cml0ZV9pdGVyX3plcm8sXFxuLVxcdC5zcGxpY2VfcmVhZFxcdD0gY29weV9zcGxpY2VfcmVhZCxcXG4rXFx0LnNwbGljZV9yZWFkXFx0PSBzcGxpY2VfcmVhZF96ZXJvLFxcbiBcXHQuc3BsaWNlX3dyaXRlXFx0PSBzcGxpY2Vfd3JpdGVfemVybyxcXG4gXFx0Lm1tYXBfcHJlcGFyZVxcdD0gbW1hcF96ZXJvX3ByZXBhcmUsXFxuIFxcdC5nZXRfdW5tYXBwZWRfYXJlYSA9IGdldF91bm1hcHBlZF9hcmVhX3plcm8sXFxuQEAgLTY4Miw3ICs3MDcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmdWxsX2ZvcHMgPSB7XFxuIFxcdC5sbHNlZWtcXHRcXHQ9IGZ1bGxfbHNlZWssXFxuIFxcdC5yZWFkX2l0ZXJcXHQ9IHJlYWRfaXRlcl96ZXJvLFxcbiBcXHQud3JpdGVcXHRcXHQ9IHdyaXRlX2Z1bGwsXFxuLVxcdC5zcGxpY2VfcmVhZFxcdD0gY29weV9zcGxpY2VfcmVhZCxcXG4rXFx0LnNwbGljZV9yZWFkXFx0PSBzcGxpY2VfcmVhZF96ZXJvLFxcbiB9O1xcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBtZW1kZXYge1xcbmRpZmYgLS1naXQgYS9mcy9zcGxpY2UuYyBiL2ZzL3NwbGljZS5jXFxuaW5kZXggOWQ4ZjYzZTJmZDFhYi4uYjZlYTk4Y2M2MmZkNSAxMDA2NDRcXG4tLS0gYS9mcy9zcGxpY2UuY1xcbisrKyBiL2ZzL3NwbGljZS5jXFxuQEAgLTM5OCw2ICszOTgsNjggQEAgc3NpemVfdCBjb3B5X3NwbGljZV9yZWFkKHN0cnVjdCBmaWxlICppbiwgbG9mZl90ICpwcG9zLFxcbiB9XFxuIEVYUE9SVF9TWU1CT0woY29weV9zcGxpY2VfcmVhZCk7XFxuIFxcbisvKlxcbisgKiBQaXBlIGJ1ZmZlciBvcGVyYXRpb25zIGZvciBzcGxpY2luZyB6ZXJvIHBhZ2VzIGludG8gYSBwaXBlLCB1c2VkIHRvXFxuKyAqIG9wdGltaXplIHJlYWRzIGZyb20gc3BhcnNlIGhvbGVzIGluIGZpbGVzIGFuZCBmcm9tIHplcm8gZGV2aWNlcyBzdWNoIGFzXFxuKyAqIC9kZXYvemVybyBhbmQgL2Rldi9mdWxsLlxcbisgKi9cXG4rc3RhdGljIGJvb2wgemVyb19waXBlX2J1Zl9nZXQoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSxcXG4rXFx0XFx0XFx0ICAgICAgc3RydWN0IHBpcGVfYnVmZmVyICpidWYpXFxuK3tcXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHplcm9fcGlwZV9idWZfcmVsZWFzZShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLFxcbitcXHRcXHRcXHRcXHQgIHN0cnVjdCBwaXBlX2J1ZmZlciAqYnVmKVxcbit7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIHplcm9fcGlwZV9idWZfdHJ5X3N0ZWFsKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsXFxuK1xcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1ZilcXG4re1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuK2NvbnN0IHN0cnVjdCBwaXBlX2J1Zl9vcGVyYXRpb25zIHplcm9fcGlwZV9idWZfb3BzID0ge1xcbitcXHQucmVsZWFzZVxcdD0gemVyb19waXBlX2J1Zl9yZWxlYXNlLFxcbitcXHQudHJ5X3N0ZWFsXFx0PSB6ZXJvX3BpcGVfYnVmX3RyeV9zdGVhbCxcXG4rXFx0LmdldFxcdFxcdD0gemVyb19waXBlX2J1Zl9nZXQsXFxuK307XFxuK1xcbisvKipcXG4rICogc3BsaWNlX3plcm9wYWdlX2ludG9fcGlwZSAtIHNwbGljZSBhIHplcm8gcGFnZSBpbnRvIGEgcGlwZVxcbisgKiBAcGlwZTogcGlwZSB0byBzcGxpY2UgaW50b1xcbisgKiBAZnBvczogZmlsZSBwb3NpdGlvblxcbisgKiBAc2l6ZTogbnVtYmVyIG9mIGJ5dGVzIHRvIHNwbGljZVxcbisgKlxcbisgKiBTcGxpY2UgYXQgbW9zdCBvbmUgcGFnZSBvZiB6ZXJvZXMgaW50byB0aGUgcGlwZS4gIFRoZSB6ZXJvIHBhZ2UgaXMgbm90XFxuKyAqIHJlZmNvdW50ZWQsIHNvIEB6ZXJvX3BpcGVfYnVmX29wcyBtdXN0IGJlIHVzZWQgdG8gYXZvaWQgdGFraW5nIGFcXG4rICogcmVmZXJlbmNlIG9uIGl0LlxcbisgKlxcbisgKiBSZXR1cm46IHRoZSBudW1iZXIgb2YgYnl0ZXMgc3BsaWNlZC5cXG4rICovXFxuK3NpemVfdCBzcGxpY2VfemVyb3BhZ2VfaW50b19waXBlKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsXFxuK1xcdFxcdFxcdFxcdCBsb2ZmX3QgZnBvcywgc2l6ZV90IHNpemUpXFxuK3tcXG4rXFx0c2l6ZV90IG9mZnNldCA9IGZwb3MgXFx1MDAyNiB+UEFHRV9NQVNLO1xcbitcXG4rXFx0c2l6ZSA9IG1pbl90KHNpemVfdCwgc2l6ZSwgUEFHRV9TSVpFIC0gb2Zmc2V0KTtcXG4rXFxuK1xcdGlmICghcGlwZV9pc19mdWxsKHBpcGUpKSB7XFxuK1xcdFxcdHN0cnVjdCBwaXBlX2J1ZmZlciAqYnVmID0gcGlwZV9oZWFkX2J1ZihwaXBlKTtcXG4rXFxuK1xcdFxcdCpidWYgPSAoc3RydWN0IHBpcGVfYnVmZmVyKSB7XFxuK1xcdFxcdFxcdC5vcHNcXHQ9IFxcdTAwMjZ6ZXJvX3BpcGVfYnVmX29wcyxcXG4rXFx0XFx0XFx0LnBhZ2VcXHQ9IFpFUk9fUEFHRSgwKSxcXG4rXFx0XFx0XFx0Lm9mZnNldFxcdD0gb2Zmc2V0LFxcbitcXHRcXHRcXHQubGVuXFx0PSBzaXplLFxcbitcXHRcXHR9O1xcbitcXHRcXHRwaXBlLVxcdTAwM2VoZWFkKys7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBzaXplO1xcbit9XFxuK1xcbiBjb25zdCBzdHJ1Y3QgcGlwZV9idWZfb3BlcmF0aW9ucyBkZWZhdWx0X3BpcGVfYnVmX29wcyA9IHtcXG4gXFx0LnJlbGVhc2VcXHQ9IGdlbmVyaWNfcGlwZV9idWZfcmVsZWFzZSxcXG4gXFx0LnRyeV9zdGVhbFxcdD0gZ2VuZXJpY19waXBlX2J1Zl90cnlfc3RlYWwsXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3BsaWNlLmggYi9pbmNsdWRlL2xpbnV4L3NwbGljZS5oXFxuaW5kZXggOWRlYzQ4NjFkMDlmNi4uZjFkNGFlZmE0ZWMyYyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NwbGljZS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9zcGxpY2UuaFxcbkBAIC0xMDgsNCArMTA4LDcgQEAgZXh0ZXJuIHZvaWQgc3BsaWNlX3Nocmlua19zcGQoc3RydWN0IHNwbGljZV9waXBlX2Rlc2MgKik7XFxuIFxcbiBleHRlcm4gY29uc3Qgc3RydWN0IHBpcGVfYnVmX29wZXJhdGlvbnMgcGFnZV9jYWNoZV9waXBlX2J1Zl9vcHM7XFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgcGlwZV9idWZfb3BlcmF0aW9ucyBkZWZhdWx0X3BpcGVfYnVmX29wcztcXG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBwaXBlX2J1Zl9vcGVyYXRpb25zIHplcm9fcGlwZV9idWZfb3BzO1xcbitzaXplX3Qgc3BsaWNlX3plcm9wYWdlX2ludG9fcGlwZShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLCBsb2ZmX3QgZnBvcyxcXG4rXFx0XFx0XFx0XFx0IHNpemVfdCBzaXplKTtcXG4gI2VuZGlmXFxuZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jXFxuaW5kZXggOTAwMWFhZjNiN2I5NC4uMzlkOGRmZWZiZTlmNSAxMDA2NDRcXG4tLS0gYS9tbS9zaG1lbS5jXFxuKysrIGIvbW0vc2htZW0uY1xcbkBAIC0zNDI3LDUxICszNDI3LDYgQEAgc3RhdGljIHNzaXplX3Qgc2htZW1fZmlsZV93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbi1zdGF0aWMgYm9vbCB6ZXJvX3BpcGVfYnVmX2dldChzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLFxcbi1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1ZilcXG4te1xcbi1cXHRyZXR1cm4gdHJ1ZTtcXG4tfVxcbi1cXG4tc3RhdGljIHZvaWQgemVyb19waXBlX2J1Zl9yZWxlYXNlKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsXFxuLVxcdFxcdFxcdFxcdCAgc3RydWN0IHBpcGVfYnVmZmVyICpidWYpXFxuLXtcXG4tfVxcbi1cXG4tc3RhdGljIGJvb2wgemVyb19waXBlX2J1Zl90cnlfc3RlYWwoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSxcXG4tXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBwaXBlX2J1ZmZlciAqYnVmKVxcbi17XFxuLVxcdHJldHVybiBmYWxzZTtcXG4tfVxcbi1cXG4tc3RhdGljIGNvbnN0IHN0cnVjdCBwaXBlX2J1Zl9vcGVyYXRpb25zIHplcm9fcGlwZV9idWZfb3BzID0ge1xcbi1cXHQucmVsZWFzZVxcdD0gemVyb19waXBlX2J1Zl9yZWxlYXNlLFxcbi1cXHQudHJ5X3N0ZWFsXFx0PSB6ZXJvX3BpcGVfYnVmX3RyeV9zdGVhbCxcXG4tXFx0LmdldFxcdFxcdD0gemVyb19waXBlX2J1Zl9nZXQsXFxuLX07XFxuLVxcbi1zdGF0aWMgc2l6ZV90IHNwbGljZV96ZXJvcGFnZV9pbnRvX3BpcGUoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSxcXG4tXFx0XFx0XFx0XFx0XFx0bG9mZl90IGZwb3MsIHNpemVfdCBzaXplKVxcbi17XFxuLVxcdHNpemVfdCBvZmZzZXQgPSBmcG9zIFxcdTAwMjYgflBBR0VfTUFTSztcXG4tXFxuLVxcdHNpemUgPSBtaW5fdChzaXplX3QsIHNpemUsIFBBR0VfU0laRSAtIG9mZnNldCk7XFxuLVxcbi1cXHRpZiAoIXBpcGVfaXNfZnVsbChwaXBlKSkge1xcbi1cXHRcXHRzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1ZiA9IHBpcGVfaGVhZF9idWYocGlwZSk7XFxuLVxcbi1cXHRcXHQqYnVmID0gKHN0cnVjdCBwaXBlX2J1ZmZlcikge1xcbi1cXHRcXHRcXHQub3BzXFx0PSBcXHUwMDI2emVyb19waXBlX2J1Zl9vcHMsXFxuLVxcdFxcdFxcdC5wYWdlXFx0PSBaRVJPX1BBR0UoMCksXFxuLVxcdFxcdFxcdC5vZmZzZXRcXHQ9IG9mZnNldCxcXG4tXFx0XFx0XFx0LmxlblxcdD0gc2l6ZSxcXG4tXFx0XFx0fTtcXG4tXFx0XFx0cGlwZS1cXHUwMDNlaGVhZCsrO1xcbi1cXHR9XFxuLVxcbi1cXHRyZXR1cm4gc2l6ZTtcXG4tfVxcbi1cXG4gc3RhdGljIHNzaXplX3Qgc2htZW1fZmlsZV9zcGxpY2VfcmVhZChzdHJ1Y3QgZmlsZSAqaW4sIGxvZmZfdCAqcHBvcyxcXG4gXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSxcXG4gXFx0XFx0XFx0XFx0ICAgICAgc2l6ZV90IGxlbiwgdW5zaWduZWQgaW50IGZsYWdzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwNTozMjo1My43OTg3OTk4OTZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjYyNTE5MTMwMTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNITUVNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3BsaWNlX3plcm9wYWdlX2ludG9fcGlwZVwiLFxuICAgIFwic3BsaWNlX3JlYWRfemVyb1wiLFxuICAgIFwic2htZW1fZmlsZV9zcGxpY2VfcmVhZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB6ZXJvIHBhZ2UgcGlwZSBzcGxpY2luZyBsb2dpYyBpbnRvIGNvcmUgZnMvc3BsaWNlLmMgYW5kIHVwZGF0ZXMgL2Rldi96ZXJvIGFuZCAvZGV2L2Z1bGwgdG8gdXNlIHNwbGljZV96ZXJvcGFnZV9pbnRvX3BpcGUgZGlyZWN0bHkgdmlhIHRoZSBuZXcgc3BsaWNlX3JlYWRfemVybyBpbXBsZW1lbnRhdGlvbiBpbnN0ZWFkIG9mIGNvcHlfc3BsaWNlX3JlYWQuIFRoaXMgYWZmZWN0cyBjb3JlIFZGUy9waXBlIG9wZXJhdGlvbnMgYW5kIGNoYXJhY3RlciBkZXZpY2UgaGFuZGxpbmcsIHdoaWNoIGlzIHJlYWRpbHkgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1MWZjZTVkNmY1MzUyZDAxN2Y4N2IxMzBmNjA3OThlMDNiNTY2Nzg0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMjkgMDU6MzI6NTAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvbWVtLmMgYi9kcml2ZXJzL2NoYXIvbWVtLmNcbmluZGV4IDYzMjUzZDFkZTVkNzAuLjZkM2VmMzU5YjJkN2IgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2NoYXIvbWVtLmNcbisrKyBiL2RyaXZlcnMvY2hhci9tZW0uY1xuQEAgLTQ3MSw2ICs0NzEsMzEgQEAgc3RhdGljIHNzaXplX3QgcmVhZF9pdGVyX3plcm8oc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpXG4gXHRyZXR1cm4gd3JpdHRlbjtcbiB9XG4gXG4rc3RhdGljIHNzaXplX3Qgc3BsaWNlX3JlYWRfemVybyhzdHJ1Y3QgZmlsZSAqaW4sIGxvZmZfdCAqcHBvcyxcbitcdFx0XHRcdHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsIHNpemVfdCBsZW4sXG4rXHRcdFx0XHR1bnNpZ25lZCBpbnQgZmxhZ3MpXG4re1xuK1x0c2l6ZV90IHRvdGFsID0gMDtcbitcdGxvZmZfdCBwb3MgPSAwO1xuK1x0c2l6ZV90IHVzZWQsIG5wYWdlcztcbitcbitcdHVzZWQgPSBwaXBlX2J1Zl91c2FnZShwaXBlKTtcbitcdGlmICh1c2VkIFx1MDAzZT0gcGlwZS1cdTAwM2VtYXhfdXNhZ2UpXG4rXHRcdHJldHVybiAtRUFHQUlOO1xuK1x0bnBhZ2VzID0gcGlwZS1cdTAwM2VtYXhfdXNhZ2UgLSB1c2VkO1xuK1x0bGVuID0gbWluX3Qoc2l6ZV90LCBsZW4sIG5wYWdlcyAqIFBBR0VfU0laRSk7XG4rXG4rXHR3aGlsZSAobGVuKSB7XG4rXHRcdHNpemVfdCBuID0gc3BsaWNlX3plcm9wYWdlX2ludG9fcGlwZShwaXBlLCBwb3MsIGxlbik7XG4rXG4rXHRcdHBvcyArPSBuO1xuK1x0XHR0b3RhbCArPSBuO1xuK1x0XHRsZW4gLT0gbjtcbitcdH1cbitcbitcdHJldHVybiB0b3RhbDtcbit9XG4rXG4gc3RhdGljIHNzaXplX3QgcmVhZF96ZXJvKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLFxuIFx0XHRcdCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcbiB7XG5AQCAtNjY5LDcgKzY5NCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHplcm9fZm9wcyA9IHtcbiBcdC5yZWFkX2l0ZXJcdD0gcmVhZF9pdGVyX3plcm8sXG4gXHQucmVhZFx0XHQ9IHJlYWRfemVybyxcbiBcdC53cml0ZV9pdGVyXHQ9IHdyaXRlX2l0ZXJfemVybyxcbi1cdC5zcGxpY2VfcmVhZFx0PSBjb3B5X3NwbGljZV9yZWFkLFxuK1x0LnNwbGljZV9yZWFkXHQ9IHNwbGljZV9yZWFkX3plcm8sXG4gXHQuc3BsaWNlX3dyaXRlXHQ9IHNwbGljZV93cml0ZV96ZXJvLFxuIFx0Lm1tYXBfcHJlcGFyZVx0PSBtbWFwX3plcm9fcHJlcGFyZSxcbiBcdC5nZXRfdW5tYXBwZWRfYXJlYSA9IGdldF91bm1hcHBlZF9hcmVhX3plcm8sXG5AQCAtNjgyLDcgKzcwNyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZ1bGxfZm9wcyA9IHtcbiBcdC5sbHNlZWtcdFx0PSBmdWxsX2xzZWVrLFxuIFx0LnJlYWRfaXRlclx0PSByZWFkX2l0ZXJfemVybyxcbiBcdC53cml0ZVx0XHQ9IHdyaXRlX2Z1bGwsXG4tXHQuc3BsaWNlX3JlYWRcdD0gY29weV9zcGxpY2VfcmVhZCxcbitcdC5zcGxpY2VfcmVhZFx0PSBzcGxpY2VfcmVhZF96ZXJvLFxuIH07XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBtZW1kZXYge1xuZGlmZiAtLWdpdCBhL2ZzL3NwbGljZS5jIGIvZnMvc3BsaWNlLmNcbmluZGV4IDlkOGY2M2UyZmQxYWIuLmI2ZWE5OGNjNjJmZDUgMTAwNjQ0XG4tLS0gYS9mcy9zcGxpY2UuY1xuKysrIGIvZnMvc3BsaWNlLmNcbkBAIC0zOTgsNiArMzk4LDY4IEBAIHNzaXplX3QgY29weV9zcGxpY2VfcmVhZChzdHJ1Y3QgZmlsZSAqaW4sIGxvZmZfdCAqcHBvcyxcbiB9XG4gRVhQT1JUX1NZTUJPTChjb3B5X3NwbGljZV9yZWFkKTtcbiBcbisvKlxuKyAqIFBpcGUgYnVmZmVyIG9wZXJhdGlvbnMgZm9yIHNwbGljaW5nIHplcm8gcGFnZXMgaW50byBhIHBpcGUsIHVzZWQgdG9cbisgKiBvcHRpbWl6ZSByZWFkcyBmcm9tIHNwYXJzZSBob2xlcyBpbiBmaWxlcyBhbmQgZnJvbSB6ZXJvIGRldmljZXMgc3VjaCBhc1xuKyAqIC9kZXYvemVybyBhbmQgL2Rldi9mdWxsLlxuKyAqL1xuK3N0YXRpYyBib29sIHplcm9fcGlwZV9idWZfZ2V0KHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsXG4rXHRcdFx0ICAgICAgc3RydWN0IHBpcGVfYnVmZmVyICpidWYpXG4re1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHplcm9fcGlwZV9idWZfcmVsZWFzZShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLFxuK1x0XHRcdFx0ICBzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1Zilcbit7XG4rfVxuK1xuK3N0YXRpYyBib29sIHplcm9fcGlwZV9idWZfdHJ5X3N0ZWFsKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsXG4rXHRcdFx0XHQgICAgc3RydWN0IHBpcGVfYnVmZmVyICpidWYpXG4re1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbitjb25zdCBzdHJ1Y3QgcGlwZV9idWZfb3BlcmF0aW9ucyB6ZXJvX3BpcGVfYnVmX29wcyA9IHtcbitcdC5yZWxlYXNlXHQ9IHplcm9fcGlwZV9idWZfcmVsZWFzZSxcbitcdC50cnlfc3RlYWxcdD0gemVyb19waXBlX2J1Zl90cnlfc3RlYWwsXG4rXHQuZ2V0XHRcdD0gemVyb19waXBlX2J1Zl9nZXQsXG4rfTtcbitcbisvKipcbisgKiBzcGxpY2VfemVyb3BhZ2VfaW50b19waXBlIC0gc3BsaWNlIGEgemVybyBwYWdlIGludG8gYSBwaXBlXG4rICogQHBpcGU6IHBpcGUgdG8gc3BsaWNlIGludG9cbisgKiBAZnBvczogZmlsZSBwb3NpdGlvblxuKyAqIEBzaXplOiBudW1iZXIgb2YgYnl0ZXMgdG8gc3BsaWNlXG4rICpcbisgKiBTcGxpY2UgYXQgbW9zdCBvbmUgcGFnZSBvZiB6ZXJvZXMgaW50byB0aGUgcGlwZS4gIFRoZSB6ZXJvIHBhZ2UgaXMgbm90XG4rICogcmVmY291bnRlZCwgc28gQHplcm9fcGlwZV9idWZfb3BzIG11c3QgYmUgdXNlZCB0byBhdm9pZCB0YWtpbmcgYVxuKyAqIHJlZmVyZW5jZSBvbiBpdC5cbisgKlxuKyAqIFJldHVybjogdGhlIG51bWJlciBvZiBieXRlcyBzcGxpY2VkLlxuKyAqL1xuK3NpemVfdCBzcGxpY2VfemVyb3BhZ2VfaW50b19waXBlKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsXG4rXHRcdFx0XHQgbG9mZl90IGZwb3MsIHNpemVfdCBzaXplKVxuK3tcbitcdHNpemVfdCBvZmZzZXQgPSBmcG9zIFx1MDAyNiB+UEFHRV9NQVNLO1xuK1xuK1x0c2l6ZSA9IG1pbl90KHNpemVfdCwgc2l6ZSwgUEFHRV9TSVpFIC0gb2Zmc2V0KTtcbitcbitcdGlmICghcGlwZV9pc19mdWxsKHBpcGUpKSB7XG4rXHRcdHN0cnVjdCBwaXBlX2J1ZmZlciAqYnVmID0gcGlwZV9oZWFkX2J1ZihwaXBlKTtcbitcbitcdFx0KmJ1ZiA9IChzdHJ1Y3QgcGlwZV9idWZmZXIpIHtcbitcdFx0XHQub3BzXHQ9IFx1MDAyNnplcm9fcGlwZV9idWZfb3BzLFxuK1x0XHRcdC5wYWdlXHQ9IFpFUk9fUEFHRSgwKSxcbitcdFx0XHQub2Zmc2V0XHQ9IG9mZnNldCxcbitcdFx0XHQubGVuXHQ9IHNpemUsXG4rXHRcdH07XG4rXHRcdHBpcGUtXHUwMDNlaGVhZCsrO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHNpemU7XG4rfVxuK1xuIGNvbnN0IHN0cnVjdCBwaXBlX2J1Zl9vcGVyYXRpb25zIGRlZmF1bHRfcGlwZV9idWZfb3BzID0ge1xuIFx0LnJlbGVhc2VcdD0gZ2VuZXJpY19waXBlX2J1Zl9yZWxlYXNlLFxuIFx0LnRyeV9zdGVhbFx0PSBnZW5lcmljX3BpcGVfYnVmX3RyeV9zdGVhbCxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NwbGljZS5oIGIvaW5jbHVkZS9saW51eC9zcGxpY2UuaFxuaW5kZXggOWRlYzQ4NjFkMDlmNi4uZjFkNGFlZmE0ZWMyYyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc3BsaWNlLmhcbisrKyBiL2luY2x1ZGUvbGludXgvc3BsaWNlLmhcbkBAIC0xMDgsNCArMTA4LDcgQEAgZXh0ZXJuIHZvaWQgc3BsaWNlX3Nocmlua19zcGQoc3RydWN0IHNwbGljZV9waXBlX2Rlc2MgKik7XG4gXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBwaXBlX2J1Zl9vcGVyYXRpb25zIHBhZ2VfY2FjaGVfcGlwZV9idWZfb3BzO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgcGlwZV9idWZfb3BlcmF0aW9ucyBkZWZhdWx0X3BpcGVfYnVmX29wcztcbitleHRlcm4gY29uc3Qgc3RydWN0IHBpcGVfYnVmX29wZXJhdGlvbnMgemVyb19waXBlX2J1Zl9vcHM7XG4rc2l6ZV90IHNwbGljZV96ZXJvcGFnZV9pbnRvX3BpcGUoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSwgbG9mZl90IGZwb3MsXG4rXHRcdFx0XHQgc2l6ZV90IHNpemUpO1xuICNlbmRpZlxuZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jXG5pbmRleCA5MDAxYWFmM2I3Yjk0Li4zOWQ4ZGZlZmJlOWY1IDEwMDY0NFxuLS0tIGEvbW0vc2htZW0uY1xuKysrIGIvbW0vc2htZW0uY1xuQEAgLTM0MjcsNTEgKzM0MjcsNiBAQCBzdGF0aWMgc3NpemVfdCBzaG1lbV9maWxlX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi1zdGF0aWMgYm9vbCB6ZXJvX3BpcGVfYnVmX2dldChzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLFxuLVx0XHRcdCAgICAgIHN0cnVjdCBwaXBlX2J1ZmZlciAqYnVmKVxuLXtcbi1cdHJldHVybiB0cnVlO1xuLX1cbi1cbi1zdGF0aWMgdm9pZCB6ZXJvX3BpcGVfYnVmX3JlbGVhc2Uoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSxcbi1cdFx0XHRcdCAgc3RydWN0IHBpcGVfYnVmZmVyICpidWYpXG4te1xuLX1cbi1cbi1zdGF0aWMgYm9vbCB6ZXJvX3BpcGVfYnVmX3RyeV9zdGVhbChzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLFxuLVx0XHRcdFx0ICAgIHN0cnVjdCBwaXBlX2J1ZmZlciAqYnVmKVxuLXtcbi1cdHJldHVybiBmYWxzZTtcbi19XG4tXG4tc3RhdGljIGNvbnN0IHN0cnVjdCBwaXBlX2J1Zl9vcGVyYXRpb25zIHplcm9fcGlwZV9idWZfb3BzID0ge1xuLVx0LnJlbGVhc2VcdD0gemVyb19waXBlX2J1Zl9yZWxlYXNlLFxuLVx0LnRyeV9zdGVhbFx0PSB6ZXJvX3BpcGVfYnVmX3RyeV9zdGVhbCxcbi1cdC5nZXRcdFx0PSB6ZXJvX3BpcGVfYnVmX2dldCxcbi19O1xuLVxuLXN0YXRpYyBzaXplX3Qgc3BsaWNlX3plcm9wYWdlX2ludG9fcGlwZShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLFxuLVx0XHRcdFx0XHRsb2ZmX3QgZnBvcywgc2l6ZV90IHNpemUpXG4te1xuLVx0c2l6ZV90IG9mZnNldCA9IGZwb3MgXHUwMDI2IH5QQUdFX01BU0s7XG4tXG4tXHRzaXplID0gbWluX3Qoc2l6ZV90LCBzaXplLCBQQUdFX1NJWkUgLSBvZmZzZXQpO1xuLVxuLVx0aWYgKCFwaXBlX2lzX2Z1bGwocGlwZSkpIHtcbi1cdFx0c3RydWN0IHBpcGVfYnVmZmVyICpidWYgPSBwaXBlX2hlYWRfYnVmKHBpcGUpO1xuLVxuLVx0XHQqYnVmID0gKHN0cnVjdCBwaXBlX2J1ZmZlcikge1xuLVx0XHRcdC5vcHNcdD0gXHUwMDI2emVyb19waXBlX2J1Zl9vcHMsXG4tXHRcdFx0LnBhZ2VcdD0gWkVST19QQUdFKDApLFxuLVx0XHRcdC5vZmZzZXRcdD0gb2Zmc2V0LFxuLVx0XHRcdC5sZW5cdD0gc2l6ZSxcbi1cdFx0fTtcbi1cdFx0cGlwZS1cdTAwM2VoZWFkKys7XG4tXHR9XG4tXG4tXHRyZXR1cm4gc2l6ZTtcbi19XG4tXG4gc3RhdGljIHNzaXplX3Qgc2htZW1fZmlsZV9zcGxpY2VfcmVhZChzdHJ1Y3QgZmlsZSAqaW4sIGxvZmZfdCAqcHBvcyxcbiBcdFx0XHRcdCAgICAgIHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsXG4gXHRcdFx0XHQgICAgICBzaXplX3QgbGVuLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwNTozMjo1My43OTg4MDE0NDZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMzg0NjIxOTQ2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2g6IEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIG1vdmluZyBzb21lIGNvZGUg4oCTIGB6ZXJvX3BpcGVfYnVmX29wc2AgYW5kIGBzcGxpY2VfemVyb3BhZ2VfaW50b19waXBlYCDigJMgZnJvbSBgbW0vc2htZW0uY2AgdG8gYGZzL3NwbGljZS5jYCBhbmQgZXhwb3J0aW5nIGl0LiBUaGlzIHNlZW1zIHRvIGJlIGRvbmUgdG8gc3VwcG9ydCB0aGUgbmV3IHVzZSBvZiBgc3BsaWNlX3JlYWRfemVyb2Agd2l0aGluIHRoZSBjaGFyYWN0ZXIgZGV2aWNlIGRyaXZlciwgc3BlY2lmaWNhbGx5IGZvciBgL2Rldi96ZXJvYCBhbmQgYC9kZXYvZnVsbGAuIFRoZXkgbm93IHVzZSBgc3BsaWNlX3JlYWRfemVyb2AgZm9yIHRoZWlyIGAuc3BsaWNlX3JlYWRgIG1ldGhvZCwgd2hpY2ggaXMgcHJldHR5IGludGVyZXN0aW5nLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYXNzZXNzIGl0cyBmdXp6aW5nIHBvdGVudGlhbC4gVGhpcyBpbXBhY3RzIGNvcmUga2VybmVsIGZ1bmN0aW9uYWxpdHksIGludm9sdmluZyBzdGFuZGFyZCBkZXZpY2VzIGxpa2UgYC9kZXYvemVyb2AsIGAvZGV2L2Z1bGxgLCBhbmQgcGlwZXMuIFRoYXQncyBhIGh1Z2UgcG9zaXRpdmUuIEl0J3MgZGVmaW5pdGVseSByZWFjaGFibGUgaW4gYSBzdGFuZGFyZCBRRU1VIHNldHVwOyB0aGVzZSBhcmUgZnVuZGFtZW50YWwgZWxlbWVudHMuIE5vdywgdGhlIGtleSBpcyB3aGV0aGVyIGl0IGludHJvZHVjZXMgYSBmdW5jdGlvbmFsIGNoYW5nZS4gQW5kIHllcywgaXQgZG9lcyEgUHJldmlvdXNseSwgdGhvc2UgZGV2aWNlcyB1c2VkIGBjb3B5X3NwbGljZV9yZWFkYCwgYnV0IG5vdyB0aGV5J3JlIHVzaW5nIHRoaXMgbmV3IGBzcGxpY2VfcmVhZF96ZXJvYCwgd2hpY2ggZGlyZWN0bHkgaW5zZXJ0cyBgWkVST19QQUdFYCBpbnRvIHRoZSBwaXBlIGJ1ZmZlcnMgdGhyb3VnaCBgc3BsaWNlX3plcm9wYWdlX2ludG9fcGlwZWAgYW5kIGB6ZXJvX3BpcGVfYnVmX29wc2AuIFRoaXMgbWVhbnMgdGhhdCB3aGVuIGEgdXNlciBzcGxpY2VzIGZyb20gL2Rldi96ZXJvIHRvIGEgcGlwZSwgb3IgcmVhZHMgZnJvbSBhIHBpcGUgY29udGFpbmluZyBgWkVST19QQUdFYCBidWZmZXJzLCB0aGlzIG5ldyBsb2dpYyBnZXRzIHRyaWdnZXJlZC4gVGhhdCBtYWtlcyBpdCBwcmltZSBmb3IgZnV6emluZy5cblxuTGV0J3MgcXVpY2tseSBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZDogYHNwbGljZV96ZXJvcGFnZV9pbnRvX3BpcGVgIChub3cgaW4gYGZzL3NwbGljZS5jYCksIGBzcGxpY2VfcmVhZF96ZXJvYCAodGhlIHN0YXRpYyBvbmUgaW4gYGRyaXZlcnMvY2hhci9tZW0uY2ApLCBgemVyb19waXBlX2J1Zl9vcHNgLCBhbmQgYHNobWVtX2ZpbGVfc3BsaWNlX3JlYWRgLiBXZSBoYXZlIHRvIGtlZXAgYW4gZXllIG9uIGhvdyB0aGVzZSBpbnRlcmFjdC5cblxuTmV4dCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgYGRyaXZlcnMvY2hhci9tZW0uY2AgYW5kIGBmcy9zcGxpY2UuY2AuIExldCdzIGdyZXAgYW5kIHJlYWQgdGhlIHJlbGV2YW50IGZpbGVzIHRvIG1ha2Ugc3VyZSBub3RoaW5nIGlzIHByZXZlbnRpbmcgdGhpcyBjb2RlIGZyb20gYmVpbmcgYnVpbHQgb3IsIG1vcmUgaW1wb3J0YW50bHksIGVuYWJsZWQgaW4gc3RhbmRhcmQgY29uZmlndXJhdGlvbnMuIEkgd2FudCB0byBlbnN1cmUgaXQncyBidWlsdC1pbiBhbmQgYWNjZXNzaWJsZSBhcyBpdCB3aWxsIGdyZWF0bHkgaW5jcmVhc2UgbXkgYXR0YWNrIHN1cmZhY2UgaWYgaXQgaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwNjksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MjYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwNTozMzowNy42NDUwMjI4MDFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgyNzUwMTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0RFVk1FTXxDT05GSUdfREVWUE9SVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2NoYXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9jaGFyL21lbS5jPTMyNT1zdGF0aWMgaW50IG1tYXBfbWVtX3ByZXBhcmUoc3RydWN0IHZtX2FyZWFfZGVzYyAqZGVzYylcXG4tLVxcbmRyaXZlcnMvY2hhci9tZW0uYy0zNjQtXFxuZHJpdmVycy9jaGFyL21lbS5jOjM2NTojaWZkZWYgQ09ORklHX0RFVlBPUlRcXG5kcml2ZXJzL2NoYXIvbWVtLmMtMzY2LXN0YXRpYyBzc2l6ZV90IHJlYWRfcG9ydChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZixcXG4tLVxcbmRyaXZlcnMvY2hhci9tZW0uYz02NzI9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbnVsbF9mb3BzID0ge1xcbi0tXFxuZHJpdmVycy9jaGFyL21lbS5jLTY4MS1cXG5kcml2ZXJzL2NoYXIvbWVtLmM6NjgyOiNpZmRlZiBDT05GSUdfREVWUE9SVFxcbmRyaXZlcnMvY2hhci9tZW0uYy02ODMtc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcG9ydF9mb3BzID0ge1xcbi0tXFxuZHJpdmVycy9jaGFyL21lbS5jPTcxMz1zdGF0aWMgY29uc3Qgc3RydWN0IG1lbWRldiB7XFxuLS1cXG5kcml2ZXJzL2NoYXIvbWVtLmMtNzE4LX0gZGV2bGlzdFtdID0ge1xcbmRyaXZlcnMvY2hhci9tZW0uYzo3MTk6I2lmZGVmIENPTkZJR19ERVZNRU1cXG5kcml2ZXJzL2NoYXIvbWVtLmMtNzIwLVxcdFtERVZNRU1fTUlOT1JdID0geyBcXFwibWVtXFxcIiwgXFx1MDAyNm1lbV9mb3BzLCAwLCAwIH0sXFxuLS1cXG5kcml2ZXJzL2NoYXIvbWVtLmMtNzIyLVxcdFszXSA9IHsgXFxcIm51bGxcXFwiLCBcXHUwMDI2bnVsbF9mb3BzLCBGTU9ERV9OT1dBSVQsIDA2NjYgfSxcXG5kcml2ZXJzL2NoYXIvbWVtLmM6NzIzOiNpZmRlZiBDT05GSUdfREVWUE9SVFxcbmRyaXZlcnMvY2hhci9tZW0uYy03MjQtXFx0WzRdID0geyBcXFwicG9ydFxcXCIsIFxcdTAwMjZwb3J0X2ZvcHMsIDAsIDAgfSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDU6MzM6MDcuNjkzMzAyNDlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjM0ODI0OTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBCdWlsZCBQcm9jZXNzIGZvciBgbWVtLmNgKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSBob3cgYG1lbS5jYCBnZXRzIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbC4gTXkgZmlyc3QgaW5zdGluY3QsIGFuZCBhIHByZXR0eSBzb2xpZCBvbmUgZ2l2ZW4gdGhlIHR5cGljYWwga2VybmVsIHN0cnVjdHVyZSwgaXMgdG8gZGl2ZSByaWdodCBpbnRvIGBkcml2ZXJzL2NoYXIvTWFrZWZpbGVgLiBUaGF0J3Mgd2hlcmUgSSBleHBlY3QgdGhlIGJ1aWxkIHN5c3RlbSB0byBiZSBvcmNoZXN0cmF0aW5nIHRoaW5ncywgZXNwZWNpYWxseSBzaW5jZSBgbWVtLmNgIGlzLCB3ZWxsLCBpbiB0aGUgYGNoYXJgIGRyaXZlciBzcGFjZS4gVGhpcyBNYWtlZmlsZSBzaG91bGQgY29udGFpbiB0aGUgZGVwZW5kZW5jaWVzLCBjb21waWxhdGlvbiBmbGFncywgYW5kIGxpbmtpbmcgY29tbWFuZHMgbmVjZXNzYXJ5IHRvIHRyYW5zZm9ybSB0aGUgc291cmNlIGNvZGUgaW50byB0aGUgb2JqZWN0IGZpbGUsIGFuZCB1bHRpbWF0ZWx5IGludGVncmF0ZSBpdCBpbnRvIHRoZSBrZXJuZWwgaW1hZ2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgcHJvY2VzcyB0aG9yb3VnaGx5LCBzbyBJIGtub3cgaG93IHRvIGRlYnVnIGl0IG9yIG1vZGlmeSBpdCBsYXRlciBpZiBuZWVkZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzOTgsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwNTozMzoxMC4zMjgxMjkyNDdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY2NTM3MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvY2hhclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2NoYXIvTWFrZWZpbGUtNS1cXG5kcml2ZXJzL2NoYXIvTWFrZWZpbGU6NjpvYmoteVxcdFxcdFxcdFxcdCs9IG1lbS5vIHJhbmRvbS5vXFxuZHJpdmVycy9jaGFyL01ha2VmaWxlLTctb2JqLSQoQ09ORklHX1RUWV9QUklOVEspXFx0Kz0gdHR5cHJpbnRrLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDU6MzM6MTAuMzc0Nzg2NTI2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTMxNTE0MjYxOTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIGtlZXBpbmcgaW4gbWluZCBteSBleHBlcnRpc2U6XG5cbioqRXhhbWluaW5nIEJ1aWxkIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIHNvIGBtZW0ub2AgaXMgY29uc2lzdGVudGx5IGJ1aWx0IGFzIHBhcnQgb2YgdGhlIGBvYmoteWAgcnVsZS4gVGhhdCdzIGEgZ2l2ZW4g4oCTIEkndmUgc2VlbiB0aGF0IHBhdHRlcm4gY291bnRsZXNzIHRpbWVzIGluIGtlcm5lbCBtYWtlZmlsZXMuIEJ1dCwgaXQgZ290IG1lIHRoaW5raW5nLCAqaG93IHdpZGVzcHJlYWQgaXMgdGhpcyBwYXR0ZXJuPyogIElzIGl0IGNvbnNpc3RlbnQgYWNyb3NzIHRoZSBib2FyZCwgb3IgYXJlIHRoZXJlIGV4Y2VwdGlvbnM/XG5cbkknbSBzcGVjaWZpY2FsbHkgdGhpbmtpbmcgYWJvdXQgYSBtb2R1bGUgbGlrZSBgZnMvc3BsaWNlLmNgLiBMZXQncyB1c2UgaXQgYXMgYSB0ZXN0IGNhc2UuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiBpdCBhZGhlcmVzIHRvIHRoZSBzYW1lIGNvbnN0cnVjdGlvbiBvciBpZiB0aGVyZSBpcyBzb21ldGhpbmcgZWxzZSBhdCBwbGF5LiAgTXkgbmV4dCBtb3ZlIGlzIGNsZWFyLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGBmcy9NYWtlZmlsZWAgdG8gdmVyaWZ5IGlmIHRoaXMgYmVoYXZpb3IgaXMgd2hhdCBJIGV4cGVjdCB0byBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjcxLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDU6MzM6MjMuNTI2MjE1ODQxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxMjY0NDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNwbGljZVxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9NYWtlZmlsZT0xMD1vYmoteSA6PVxcdG9wZW4ubyByZWFkX3dyaXRlLm8gZmlsZV90YWJsZS5vIHN1cGVyLm8gXFxcXFxcbi0tXFxuZnMvTWFrZWZpbGUtMTQtXFx0XFx0c2VxX2ZpbGUubyB4YXR0ci5vIGxpYmZzLm8gZnMtd3JpdGViYWNrLm8gXFxcXFxcbmZzL01ha2VmaWxlOjE1OlxcdFxcdHBub2RlLm8gc3BsaWNlLm8gc3luYy5vIHV0aW1lcy5vIGRfcGF0aC5vIFxcXFxcXG5mcy9NYWtlZmlsZS0xNi1cXHRcXHRzdGFjay5vIGZzX3N0cnVjdC5vIHN0YXRmcy5vIGZzX3Bpbi5vIG5zZnMubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDA1OjMzOjIzLjU5NzQ4NDM3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM4ODI1MzA1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgYW4gZXhwZXJ0IGluIHRoaXMgYXJlYTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBCdWlsZCBQcm9jZXNzIG9mIGBzcGxpY2Uub2AqKlxuXG5Pa2F5LCBzbyBgc3BsaWNlLm9gIGlzIGNvbnNpc3RlbnRseSBpbmNsdWRlZCBpbiB0aGUgYnVpbGQsIG1hcmtlZCB3aXRoIGBvYmoteWAuIFRoYXQncyBhIGdpdmVuLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2h5Ki4gTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgaG93IGl0J3MgaW50ZWdyYXRlZCB3aXRoIG90aGVyIHJlbGF0ZWQgc291cmNlIGZpbGVzLiBMZXQncyBsb29rIGF0IGBtbS9zaG1lbS5jYC4gSSBleHBlY3QgdGhlcmUgdG8gYmUgYSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY3kuIE5vdywgbG9va2luZyBhdCBgbW0vTWFrZWZpbGVgLCBJIHNlZSB0aGF0IGBzaG1lbS5vYCBpbmNsdXNpb24gZGVwZW5kcyBvbiBgQ09ORklHX1NITUVNYCAob3IgYENPTkZJR19UTVBGU2Agd2hpY2ggb2Z0ZW4gaW1wbGllcyBgQ09ORklHX1NITUVNYCkuIFRoaXMgaXMgd2hlcmUgdGhlIGNydWNpYWwgbGluayBsaWVzLCBzbyBJIG5lZWQgdG8gY2hlY2sgaG93IGBDT05GSUdfU0hNRU1gIGlzIGRlZmluZWQuIFRoaXMnbGwgcHJvYmFibHkgbGVhZCBtZSB0byBhIC5jb25maWcgZmlsZSBvciBhIEtjb25maWcgZmlsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjA0MywiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDA1OjMzOjI1Ljk4NTczOTY1MVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc4MzU3NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2htZW1cXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9NTE9b2JqLXlcXHRcXHRcXHQ6PSBmaWxlbWFwLm8gbWVtcG9vbC5vIG9vbV9raWxsLm8gZmFkdmlzZS5vIFxcXFxcXG4tLVxcbm1tL01ha2VmaWxlLTUzLVxcdFxcdFxcdCAgIHJlYWRhaGVhZC5vIHN3YXAubyB0cnVuY2F0ZS5vIHZtc2Nhbi5vIHNocmlua2VyLm8gXFxcXFxcbm1tL01ha2VmaWxlOjU0OlxcdFxcdFxcdCAgIHNobWVtLm8gdXRpbC5vIG1tem9uZS5vIHZtc3RhdC5vIGJhY2tpbmctZGV2Lm8gXFxcXFxcbm1tL01ha2VmaWxlLTU1LVxcdFxcdFxcdCAgIG1tX2luaXQubyBwZXJjcHUubyBzbGFiX2NvbW1vbi5vIFxcXFxcXG4tLVxcbm1tL3NobWVtLmM9NTIwPXN0YXRpYyBpbnQgc2htZW1fY29uZmlybV9zd2FwKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBwZ29mZl90IGluZGV4LFxcbi0tXFxubW0vc2htZW0uYy01NjktI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL3NobWVtLmM6NTcwOi8qIGlmZGVmIGhlcmUgdG8gYXZvaWQgYmxvYXRpbmcgc2htZW0ubyB3aGVuIG5vdCBuZWNlc3NhcnkgKi9cXG5tbS9zaG1lbS5jLTU3MS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDU6MzM6MjYuMDMzNTgwMTNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTY4NTY3NzU1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqQ2hlY2tpbmcgdGhlIFNITUVNIEltcGxlbWVudGF0aW9uKipcblxuQWxyaWdodCwgc28gYHNobWVtLm9gIGlzIGNsZWFybHkgcGFydCBvZiB0aGUgYnVpbGQgcHJvY2VzcywgbGlzdGVkIGFzIGFuIGBvYmoteWAgdGFyZ2V0IHdpdGhpbiB0aGUgYG1tL01ha2VmaWxlYC4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSBpdCdzIGJlaW5nIGNvbXBpbGVkIGRpcmVjdGx5IGludG8gdGhlIGtlcm5lbCBpbWFnZSBpZiBjZXJ0YWluIGNvbmRpdGlvbnMgYXJlIG1ldC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0aG9zZSBjb25kaXRpb25zIGFyZS4gVGhlIG1vc3QgbG9naWNhbCBuZXh0IHN0ZXAsIGNvbnNpZGVyaW5nIGl0J3MgbWVtb3J5IG1hbmFnZW1lbnQgcmVsYXRlZCwgaXMgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYENPTkZJR19TSE1FTWAuIE15IGltbWVkaWF0ZSBhc3N1bXB0aW9uIGlzIHRoYXQgaXQncyBwcm9iYWJseSBlaXRoZXIgZGVmaW5lZCBhbmQgdXNlZCBkaXJlY3RseSBpbiBgbW0vc2htZW0uY2AgaXRzZWxmLCB3aGljaCB3b3VsZCBiZSB0aGUgbW9zdCBvYnZpb3VzIHBsYWNlIGZvciB0aGUgY29kZSwgb3IgcGVyaGFwcyBtb3JlIGxpa2VseSwgaW4gYG1tL01ha2VmaWxlYCBhbG9uZ3NpZGUgdGhlIGRlY2xhcmF0aW9uIG9mIHRoZSBvYmplY3QgZmlsZXMgdG8gY29udHJvbCBpdCdzIGJ1aWxkLiBLbm93aW5nIHRoZSBrZXJuZWwncyBidWlsZCBzeXN0ZW0sIGl0J3MgcHJvYmFibHkgZGVjbGFyZWQgYXMgYSBtb2R1bGUgaW4gdGhlIG1ha2VmaWxlLiBUaGlzIHdpbGwgcG9pbnQgbWUgZGlyZWN0bHkgdG8gdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZSwgc28gSSBjYW4gc2VlIHdoYXQgZW5hYmxpbmcgdGhpcyBmdW5jdGlvbmFsaXR5IGRlcGVuZHMgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1NTgsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwNTozMzozMS43MTkyNTk5MDhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NjYwNTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19TSE1FTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdlX21lbW9yeS5jPTYxOT1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqaHVnZXBhZ2VfYXR0cltdID0ge1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy02MjMtXFx0XFx1MDAyNmhwYWdlX3BtZF9zaXplX2F0dHIuYXR0cixcXG5tbS9odWdlX21lbW9yeS5jOjYyNDojaWZkZWYgQ09ORklHX1NITUVNXFxubW0vaHVnZV9tZW1vcnkuYy02MjUtXFx0XFx1MDAyNnNobWVtX2VuYWJsZWRfYXR0ci5hdHRyLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz03MjA9c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmZpbGVfY3RybF9hdHRyc1tdID0ge1xcbm1tL2h1Z2VfbWVtb3J5LmM6NzIxOiNpZmRlZiBDT05GSUdfU0hNRU1cXG5tbS9odWdlX21lbW9yeS5jLTcyMi1cXHRcXHUwMDI2dGhwc2l6ZV9zaG1lbV9lbmFibGVkX2F0dHIuYXR0cixcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NzgwPURFRklORV9NVEhQX1NUQVRfQVRUUihzd3BvdXRfZmFsbGJhY2ssIE1USFBfU1RBVF9TV1BPVVRfRkFMTEJBQ0spO1xcbm1tL2h1Z2VfbWVtb3J5LmM6NzgxOiNpZmRlZiBDT05GSUdfU0hNRU1cXG5tbS9odWdlX21lbW9yeS5jLTc4Mi1ERUZJTkVfTVRIUF9TVEFUX0FUVFIoc2htZW1fYWxsb2MsIE1USFBfU1RBVF9TSE1FTV9BTExPQyk7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTc5Nj1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYW5vbl9zdGF0c19hdHRyc1tdID0ge1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy03OTktXFx0XFx1MDAyNmFub25fZmF1bHRfZmFsbGJhY2tfY2hhcmdlX2F0dHIuYXR0cixcXG5tbS9odWdlX21lbW9yeS5jOjgwMDojaWZuZGVmIENPTkZJR19TSE1FTVxcbm1tL2h1Z2VfbWVtb3J5LmMtODAxLVxcdFxcdTAwMjZ6c3dwb3V0X2F0dHIuYXR0cixcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9ODIyPXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpmaWxlX3N0YXRzX2F0dHJzW10gPSB7XFxubW0vaHVnZV9tZW1vcnkuYzo4MjM6I2lmZGVmIENPTkZJR19TSE1FTVxcbm1tL2h1Z2VfbWVtb3J5LmMtODI0LVxcdFxcdTAwMjZzaG1lbV9hbGxvY19hdHRyLmF0dHIsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTgzNj1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYW55X3N0YXRzX2F0dHJzW10gPSB7XFxubW0vaHVnZV9tZW1vcnkuYzo4Mzc6I2lmZGVmIENPTkZJR19TSE1FTVxcbm1tL2h1Z2VfbWVtb3J5LmMtODM4LVxcdFxcdTAwMjZ6c3dwb3V0X2F0dHIuYXR0cixcXG4tLVxcbm1tL3NobWVtLmM9NDY9c3RhdGljIHN0cnVjdCB2ZnNtb3VudCAqc2htX21udCBfX3JvX2FmdGVyX2luaXQ7XFxubW0vc2htZW0uYy00Ny1cXG5tbS9zaG1lbS5jOjQ4OiNpZmRlZiBDT05GSUdfU0hNRU1cXG5tbS9zaG1lbS5jLTQ5LS8qXFxuLS1cXG5tbS9zaG1lbS5jPTU2NTI9X19zZXR1cChcXFwidGhwX3NobWVtPVxcXCIsIHNldHVwX3RocF9zaG1lbSk7XFxuLS1cXG5tbS9zaG1lbS5jLTU2NTUtXFxubW0vc2htZW0uYzo1NjU2OiNlbHNlIC8qICFDT05GSUdfU0hNRU0gKi9cXG5tbS9zaG1lbS5jLTU2NTctXFxuLS1cXG5tbS9zaG1lbS5jPTU3MjU9c3RhdGljIGlubGluZSBzdHJ1Y3QgaW5vZGUgKnNobWVtX2dldF9pbm9kZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4tLVxcbm1tL3NobWVtLmMtNTczMi1cXG5tbS9zaG1lbS5jOjU3MzM6I2VuZGlmIC8qIENPTkZJR19TSE1FTSAqL1xcbm1tL3NobWVtLmMtNTczNC1cXG4tLVxcbm1tL3NobWVtLmM9NTg4Nz1zdHJ1Y3QgZm9saW8gKnNobWVtX3JlYWRfZm9saW9fZ2ZwKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxubW0vc2htZW0uYy01ODg5LXtcXG5tbS9zaG1lbS5jOjU4OTA6I2lmZGVmIENPTkZJR19TSE1FTVxcbm1tL3NobWVtLmMtNTg5MS1cXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbWFwcGluZy1cXHUwMDNlaG9zdDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDU6MzM6MzEuNzY1OTI1NTU3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwMTExNjAyMzM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBLZXJuZWwgQ29kZSBmb3IgQ29uZmlndXJhdGlvbiBhbmQgRnV6emluZyBUYXJnZXRzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBGaXJzdCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZSBpbnRyb2R1Y2VzIGFueSBub24tc3RhbmRhcmQga2VybmVsIGNvbmZpZ3VyYXRpb25zLiAgSSBrbm93IGBDT05GSUdfU0hNRU1gIGlzIHByZXR0eSBtdWNoIGEgZ2l2ZW4sIGFuZCBmcm9tIGEgcXVpY2sgc2NhbiwgaXQgbG9va3MgbGlrZSB0aGVyZSBhcmVuJ3QgYW55ICpzcGVjaWZpYyogY29uZmlnIG9wdGlvbnMgYmV5b25kIHRoZSB1c3VhbCBrZXJuZWwgYnVpbGQgc3R1ZmYuIFNvIEkgY2FuIGVpdGhlciBsaXN0IGBTSE1FTWAgb3IsIGlmIHRoYXQgZmVlbHMgcmVkdW5kYW50LCBhbiBlbXB0eSBsaXN0IHdpbGwgc3VmZmljZS4gVGhlIGluc3RydWN0aW9ucyBhcmUgY2xlYXI6IGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzLCBkb24ndCBhc3N1bWUgYW55dGhpbmcsIGFuZCBtYWtlIHN1cmUgdG8gaW5jbHVkZSBhbnkgXCJkZXBlbmRzIG9uXCIgbGluZXMgZm9yIHBhcmVudCBzdWJzeXN0ZW1zIG5lZWRlZCBmb3IgYSBzdGF0aWMgYnVpbGQuXG5cbk5vdywgbG9va2luZyBhdCB0aGUgY29kZSwgYGRyaXZlcnMvY2hhci9tZW0uY2AgaGFzIGAvZGV2L3plcm9gIGFuZCBgL2Rldi9mdWxsYCwgd2hpY2ggYXJlIHVuY29uZGl0aW9uYWwuIGBmcy9zcGxpY2UuY2AgaXMgYWxzbyB1bmNvbmRpdGlvbmFsbHkgYnVpbHQsIHBhcnQgb2YgYGZzL01ha2VmaWxlYCBhcyBgb2JqLXlgLiBBbmQsIGFzIGV4cGVjdGVkLCBgbW0vc2htZW0uY2AgaXMgZW5hYmxlZCB2aWEgYENPTkZJR19TSE1FTWAsIGFuZCBJIGNhbiBsaXN0IGBTSE1FTWAuXG5cbk5leHQsIHRoZSBtb3JlIGludGVyZXN0aW5nIGJpdDogaWRlbnRpZnlpbmcgcG90ZW50aWFsIGZ1enppbmcgdGFyZ2V0cy4gVGhlIGdvYWwgaXMgdG8gZm9jdXMgb24gc3BlY2lmaWMsIHJlbGV2YW50IGZ1bmN0aW9ucywgbm90IGdlbmVyaWMgaG90LXBhdGggcm91dGluZXMuIFRoZSBwcmVmZXJlbmNlIGlzIGZvciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMg4oCTIHRoZXkncmUgdGhlIG9uZXMgd2l0aCBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLlxuXG5Tbywgd2hhdCdzIG5ldyBvciBtb2RpZmllZD8gV2VsbCwgSSBzZWU6XG5cbjEuICBgc3BsaWNlX3plcm9wYWdlX2ludG9fcGlwZWAgKGZzL3NwbGljZS5jKTogVGhpcyBpcyBub24tc3RhdGljIGFuZCBleHBvcnRlZCBpbiBgaW5jbHVkZS9saW51eC9zcGxpY2UuaGAsIHNvIGxvb2tzIGdvb2QuXG4yLiAgYHNwbGljZV9yZWFkX3plcm9gIChkcml2ZXJzL2NoYXIvbWVtLmMpOiBUaGlzIGlzIGEgc3RhdGljIGNhbGxiYWNrLCBidXQgaXQncyB0aGUgbmV3IGBmaWxlX29wZXJhdGlvbnNgIGNhbGxiYWNrIGZvciBgL2Rldi96ZXJvYCBhbmQgYC9kZXYvZnVsbGAsIHNwZWNpZmljYWxseSBgLnNwbGljZV9yZWFkYC4gV29ydGggY29uc2lkZXJpbmcuXG4zLiAgYHNobWVtX2ZpbGVfc3BsaWNlX3JlYWRgIChtbS9zaG1lbS5jKTogVGhpcyBmdW5jdGlvbiBjYWxscyBgc3BsaWNlX3plcm9wYWdlX2ludG9fcGlwZWAuXG5cbk15IHRob3VnaHQgaXMsIGFyZSB0aGVzZSBhcHByb3ByaWF0ZT8gYHNwbGljZV96ZXJvcGFnZV9pbnRvX3BpcGVgIGlzIG5vbi1zdGF0aWMsIHNvIGdvb2QuIEkgd2lsbCBoYXZlIHRvIGxvb2sgYXQgYHNobWVtX2ZpbGVfc3BsaWNlX3JlYWRgIG5vdyB0byBzZWUgaWYgaXQgaXMgaW5saW5lZCBvciBub24tc3RhdGljIGluIHRoZSBzb3VyY2UuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgc2htZW1fZmlsZV9zcGxpY2VfcmVhZGAgaW4gYG1tL3NobWVtLmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NjkyLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDA1OjMzOjQxLjg3NzUzMDg1MloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkxMjcwMTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2htZW1fZmlsZV9zcGxpY2VfcmVhZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zaG1lbS5jPTM0MDg9c3RhdGljIHNzaXplX3Qgc2htZW1fZmlsZV93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxcbi0tXFxubW0vc2htZW0uYy0zNDI5LVxcbm1tL3NobWVtLmM6MzQzMDpzdGF0aWMgc3NpemVfdCBzaG1lbV9maWxlX3NwbGljZV9yZWFkKHN0cnVjdCBmaWxlICppbiwgbG9mZl90ICpwcG9zLFxcbm1tL3NobWVtLmMtMzQzMS1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLFxcbi0tXFxubW0vc2htZW0uYz01MTAzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNobWVtX2ZpbGVfb3BlcmF0aW9ucyA9IHtcXG4tLVxcbm1tL3NobWVtLmMtNTExMS1cXHQuZnN5bmNcXHRcXHQ9IG5vb3BfZnN5bmMsXFxubW0vc2htZW0uYzo1MTEyOlxcdC5zcGxpY2VfcmVhZFxcdD0gc2htZW1fZmlsZV9zcGxpY2VfcmVhZCxcXG5tbS9zaG1lbS5jLTUxMTMtXFx0LnNwbGljZV93cml0ZVxcdD0gaXRlcl9maWxlX3NwbGljZV93cml0ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDU6MzM6NDEuOTI2NjYzNTgxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE0MzE0ODA1NzQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFJlY2VudCBDb2RlIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBpbnRvIHRoZXNlIGNoYW5nZXMsIGFuZCBoZXJlJ3MgbXkgdGFrZS4gYHNwbGljZV96ZXJvcGFnZV9pbnRvX3BpcGVgIGlzIHVuZGVuaWFibHkgYSBmdW5jdGlvbiBkZWZpbmVkIHdpdGhpbiBgZnMvc3BsaWNlLmNgIOKAkyB0aGF0J3MgY2xlYXIuIFNpbWlsYXJseSwgYHNwbGljZV9yZWFkX3plcm9gIGlzIHRoZSBuZXcgc3BsaWNlIHJlYWQgaGFuZGxlciwgcmVzaWRpbmcgaW4gYGRyaXZlcnMvY2hhci9tZW0uY2AuXG5cbkkgYWx3YXlzIGRvdWJsZS1jaGVjayB0aGVzZSB0aGluZ3MsIHNvIEkgd2VudCBiYWNrIGFuZCBjb25maXJtZWQgdGhhdCBpbiBgZnMvc3BsaWNlLmNgLCB3ZSdyZSBhbHNvIGRlYWxpbmcgd2l0aCB0aGUgYHplcm9fcGlwZV9idWZfb3BzYCBzdHJ1Y3QgYWxvbmdzaWRlIGBzcGxpY2VfemVyb3BhZ2VfaW50b19waXBlYCBmdW5jdGlvbi4gVGhlbiwgaW4gYGRyaXZlcnMvY2hhci9tZW0uY2AsIHdlIHNlZSBgc3BsaWNlX3JlYWRfemVyb2AgKGZ1bmN0aW9uKSwgYW5kIGluIGBtbS9zaG1lbS5jYCwgdGhlcmUncyBgc2htZW1fZmlsZV9zcGxpY2VfcmVhZGAgKGZ1bmN0aW9uKS5cblxuVGhpcyByZWFsbHkgZG9lcyBsb29rIGxpa2UgYSB3b3J0aHdoaWxlIGFyZWEgZm9yIGZ1enppbmcuIFRoZSBpbnRlbnQgaXMgdG8gZnVuZGFtZW50YWxseSBhbHRlciBob3cgd2UgaGFuZGxlIGAvZGV2L3plcm9gIGFuZCBgL2Rldi9mdWxsYCwgbW92aW5nIHRvd2FyZHMgZGlyZWN0IHplcm8tcGFnZSBzcGxpY2luZyBpbnRvIHBpcGVzIGluc3RlYWQgb2YgdXNpbmcgYGNvcHlfc3BsaWNlX3JlYWRgLiBBbmQgY3JpdGljYWxseSwgaXQncyBtYWtpbmcgYHNwbGljZV96ZXJvcGFnZV9pbnRvX3BpcGVgIG1vcmUgZ2VuZXJhbGl6ZWQsIGFsbG93aW5nIGl0cyB1c2UgYWNyb3NzIGRpZmZlcmVudCBmaWxlc3lzdGVtcyBhbmQgY2hhcmFjdGVyIGRldmljZXMuXG5cbkkgdGhpbmsgaXQncyB0aW1lIHRvIGxldmVyYWdlIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDU3LCJPdXRwdXRUb2tlbnMiOjE0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwNTozMzo1Ni4yNDE0NzIyMThaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjQ1NDkwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU0hNRU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzcGxpY2VfemVyb3BhZ2VfaW50b19waXBlXCIsXG4gICAgXCJzcGxpY2VfcmVhZF96ZXJvXCIsXG4gICAgXCJzaG1lbV9maWxlX3NwbGljZV9yZWFkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHplcm8gcGFnZSBwaXBlIHNwbGljaW5nIGxvZ2ljIGludG8gY29yZSBmcy9zcGxpY2UuYyBhbmQgdXBkYXRlcyAvZGV2L3plcm8gYW5kIC9kZXYvZnVsbCB0byB1c2Ugc3BsaWNlX3plcm9wYWdlX2ludG9fcGlwZSBkaXJlY3RseSB2aWEgdGhlIG5ldyBzcGxpY2VfcmVhZF96ZXJvIGltcGxlbWVudGF0aW9uIGluc3RlYWQgb2YgY29weV9zcGxpY2VfcmVhZC4gVGhpcyBhZmZlY3RzIGNvcmUgVkZTL3BpcGUgb3BlcmF0aW9ucyBhbmQgY2hhcmFjdGVyIGRldmljZSBoYW5kbGluZywgd2hpY2ggaXMgcmVhZGlseSByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU0hNRU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzcGxpY2VfemVyb3BhZ2VfaW50b19waXBlXCIsXG4gICAgXCJzcGxpY2VfcmVhZF96ZXJvXCIsXG4gICAgXCJzaG1lbV9maWxlX3NwbGljZV9yZWFkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHplcm8gcGFnZSBwaXBlIHNwbGljaW5nIGxvZ2ljIGludG8gY29yZSBmcy9zcGxpY2UuYyBhbmQgdXBkYXRlcyAvZGV2L3plcm8gYW5kIC9kZXYvZnVsbCB0byB1c2Ugc3BsaWNlX3plcm9wYWdlX2ludG9fcGlwZSBkaXJlY3RseSB2aWEgdGhlIG5ldyBzcGxpY2VfcmVhZF96ZXJvIGltcGxlbWVudGF0aW9uIGluc3RlYWQgb2YgY29weV9zcGxpY2VfcmVhZC4gVGhpcyBhZmZlY3RzIGNvcmUgVkZTL3BpcGUgb3BlcmF0aW9ucyBhbmQgY2hhcmFjdGVyIGRldmljZSBoYW5kbGluZywgd2hpY2ggaXMgcmVhZGlseSByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDA1OjMzOjU2LjMxNzkzMzYxNloiLCJTZXEiOjE3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDAzNjQ4Mzc4MjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwNTozMzo1Ni4zMTgzODE1MDZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0MDM2NDM4NTg2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgY29weV9zcGxpY2VfcmVhZCB3aXRoIGEgc3BlY2lhbGl6ZWQgc3BsaWNlX3JlYWRfemVybyBpbXBsZW1lbnRhdGlvbiBmb3IgL2Rldi96ZXJvIGFuZCAvZGV2L2Z1bGwsIG1vdmluZyBzcGxpY2VfemVyb3BhZ2VfaW50b19waXBlIGFuZCB6ZXJvX3BpcGVfYnVmX29wcyBmcm9tIG1tL3NobWVtLmMgaW50byBmcy9zcGxpY2UuYy5cXG5cXG4xLiBNZW1vcnkgSW5pdGlhbGl6YXRpb246XFxuLSBJbiBzcGxpY2VfemVyb3BhZ2VfaW50b19waXBlLCB0aGUgcGlwZSBidWZmZXIgaXMgaW5pdGlhbGl6ZWQgdXNpbmcgYSBkZXNpZ25hdGVkIGluaXRpYWxpemVyIChzdHJ1Y3QgcGlwZV9idWZmZXIpeyAuLi4gfSwgd2hpY2ggemVyb2VzIGFsbCB1bm1lbnRpb25lZCBzdHJ1Y3QgZmllbGRzIChmbGFncywgcHJpdmF0ZSkuXFxuLSBUaGUgcGFnZSByZWZlcmVuY2VkIGlzIFpFUk9fUEFHRSgwKSwgd2hpY2ggaXMgc3RhdGljYWxseSBhbGxvY2F0ZWQgYW5kIHplcm8taW5pdGlhbGl6ZWQuXFxuLSBJbiBzcGxpY2VfcmVhZF96ZXJvLCBhbGwgbG9jYWwgdmFyaWFibGVzICh0b3RhbCwgcG9zLCB1c2VkLCBucGFnZXMsIG4sIGxlbikgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS5cXG5cXG4yLiBLQVNBTiB2cyBLTVNBTiBBcHBsaWNhYmlsaXR5Olxcbi0gS01TQU4gZGV0ZWN0cyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBhbmQgaW5mby1sZWFrcy4gU2luY2UgYWxsIG1lbW9yeSBzcGxpY2VkIGludG8gdGhlIHBpcGUgaXMgZnJvbSB0aGUgZ2xvYmFsbHkgemVyb2VkIHBhZ2UgYW5kIGFsbCBzdHJ1Y3R1cmVzIGFuZCBsb2NhbCB2YXJpYWJsZXMgYXJlIGZ1bGx5IGluaXRpYWxpemVkLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaGF6YXJkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyBpbnRyb2R1Y2VkLlxcbi0gQW55IHBvdGVudGlhbCBwaXBlIGJvdW5kcywgcmVmZXJlbmNlIGNvdW50aW5nLCBvciBjb25jdXJyZW5jeSBpc3N1ZXMgYXJlIHdpdGhpbiB0aGUgc2NvcGUgb2YgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMuXFxuXFxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZCAoTmVlZHNLTVNBTj1mYWxzZSkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNTFmY2U1ZDZmNTM1MmQwMTdmODdiMTMwZjYwNzk4ZTAzYjU2Njc4NFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDI5IDA1OjMyOjUwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL21lbS5jIGIvZHJpdmVycy9jaGFyL21lbS5jXG5pbmRleCA2MzI1M2QxZGU1ZDcwLi42ZDNlZjM1OWIyZDdiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9jaGFyL21lbS5jXG4rKysgYi9kcml2ZXJzL2NoYXIvbWVtLmNcbkBAIC00NzEsNiArNDcxLDMxIEBAIHN0YXRpYyBzc2l6ZV90IHJlYWRfaXRlcl96ZXJvKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyKVxuIFx0cmV0dXJuIHdyaXR0ZW47XG4gfVxuIFxuK3N0YXRpYyBzc2l6ZV90IHNwbGljZV9yZWFkX3plcm8oc3RydWN0IGZpbGUgKmluLCBsb2ZmX3QgKnBwb3MsXG4rXHRcdFx0XHRzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLCBzaXplX3QgbGVuLFxuK1x0XHRcdFx0dW5zaWduZWQgaW50IGZsYWdzKVxuK3tcbitcdHNpemVfdCB0b3RhbCA9IDA7XG4rXHRsb2ZmX3QgcG9zID0gMDtcbitcdHNpemVfdCB1c2VkLCBucGFnZXM7XG4rXG4rXHR1c2VkID0gcGlwZV9idWZfdXNhZ2UocGlwZSk7XG4rXHRpZiAodXNlZCBcdTAwM2U9IHBpcGUtXHUwMDNlbWF4X3VzYWdlKVxuK1x0XHRyZXR1cm4gLUVBR0FJTjtcbitcdG5wYWdlcyA9IHBpcGUtXHUwMDNlbWF4X3VzYWdlIC0gdXNlZDtcbitcdGxlbiA9IG1pbl90KHNpemVfdCwgbGVuLCBucGFnZXMgKiBQQUdFX1NJWkUpO1xuK1xuK1x0d2hpbGUgKGxlbikge1xuK1x0XHRzaXplX3QgbiA9IHNwbGljZV96ZXJvcGFnZV9pbnRvX3BpcGUocGlwZSwgcG9zLCBsZW4pO1xuK1xuK1x0XHRwb3MgKz0gbjtcbitcdFx0dG90YWwgKz0gbjtcbitcdFx0bGVuIC09IG47XG4rXHR9XG4rXG4rXHRyZXR1cm4gdG90YWw7XG4rfVxuK1xuIHN0YXRpYyBzc2l6ZV90IHJlYWRfemVybyhzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZixcbiBcdFx0XHQgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXG4ge1xuQEAgLTY2OSw3ICs2OTQsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB6ZXJvX2ZvcHMgPSB7XG4gXHQucmVhZF9pdGVyXHQ9IHJlYWRfaXRlcl96ZXJvLFxuIFx0LnJlYWRcdFx0PSByZWFkX3plcm8sXG4gXHQud3JpdGVfaXRlclx0PSB3cml0ZV9pdGVyX3plcm8sXG4tXHQuc3BsaWNlX3JlYWRcdD0gY29weV9zcGxpY2VfcmVhZCxcbitcdC5zcGxpY2VfcmVhZFx0PSBzcGxpY2VfcmVhZF96ZXJvLFxuIFx0LnNwbGljZV93cml0ZVx0PSBzcGxpY2Vfd3JpdGVfemVybyxcbiBcdC5tbWFwX3ByZXBhcmVcdD0gbW1hcF96ZXJvX3ByZXBhcmUsXG4gXHQuZ2V0X3VubWFwcGVkX2FyZWEgPSBnZXRfdW5tYXBwZWRfYXJlYV96ZXJvLFxuQEAgLTY4Miw3ICs3MDcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmdWxsX2ZvcHMgPSB7XG4gXHQubGxzZWVrXHRcdD0gZnVsbF9sc2VlayxcbiBcdC5yZWFkX2l0ZXJcdD0gcmVhZF9pdGVyX3plcm8sXG4gXHQud3JpdGVcdFx0PSB3cml0ZV9mdWxsLFxuLVx0LnNwbGljZV9yZWFkXHQ9IGNvcHlfc3BsaWNlX3JlYWQsXG4rXHQuc3BsaWNlX3JlYWRcdD0gc3BsaWNlX3JlYWRfemVybyxcbiB9O1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWVtZGV2IHtcbmRpZmYgLS1naXQgYS9mcy9zcGxpY2UuYyBiL2ZzL3NwbGljZS5jXG5pbmRleCA5ZDhmNjNlMmZkMWFiLi5iNmVhOThjYzYyZmQ1IDEwMDY0NFxuLS0tIGEvZnMvc3BsaWNlLmNcbisrKyBiL2ZzL3NwbGljZS5jXG5AQCAtMzk4LDYgKzM5OCw2OCBAQCBzc2l6ZV90IGNvcHlfc3BsaWNlX3JlYWQoc3RydWN0IGZpbGUgKmluLCBsb2ZmX3QgKnBwb3MsXG4gfVxuIEVYUE9SVF9TWU1CT0woY29weV9zcGxpY2VfcmVhZCk7XG4gXG4rLypcbisgKiBQaXBlIGJ1ZmZlciBvcGVyYXRpb25zIGZvciBzcGxpY2luZyB6ZXJvIHBhZ2VzIGludG8gYSBwaXBlLCB1c2VkIHRvXG4rICogb3B0aW1pemUgcmVhZHMgZnJvbSBzcGFyc2UgaG9sZXMgaW4gZmlsZXMgYW5kIGZyb20gemVybyBkZXZpY2VzIHN1Y2ggYXNcbisgKiAvZGV2L3plcm8gYW5kIC9kZXYvZnVsbC5cbisgKi9cbitzdGF0aWMgYm9vbCB6ZXJvX3BpcGVfYnVmX2dldChzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLFxuK1x0XHRcdCAgICAgIHN0cnVjdCBwaXBlX2J1ZmZlciAqYnVmKVxuK3tcbitcdHJldHVybiB0cnVlO1xuK31cbitcbitzdGF0aWMgdm9pZCB6ZXJvX3BpcGVfYnVmX3JlbGVhc2Uoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSxcbitcdFx0XHRcdCAgc3RydWN0IHBpcGVfYnVmZmVyICpidWYpXG4re1xuK31cbitcbitzdGF0aWMgYm9vbCB6ZXJvX3BpcGVfYnVmX3RyeV9zdGVhbChzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLFxuK1x0XHRcdFx0ICAgIHN0cnVjdCBwaXBlX2J1ZmZlciAqYnVmKVxuK3tcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4rY29uc3Qgc3RydWN0IHBpcGVfYnVmX29wZXJhdGlvbnMgemVyb19waXBlX2J1Zl9vcHMgPSB7XG4rXHQucmVsZWFzZVx0PSB6ZXJvX3BpcGVfYnVmX3JlbGVhc2UsXG4rXHQudHJ5X3N0ZWFsXHQ9IHplcm9fcGlwZV9idWZfdHJ5X3N0ZWFsLFxuK1x0LmdldFx0XHQ9IHplcm9fcGlwZV9idWZfZ2V0LFxuK307XG4rXG4rLyoqXG4rICogc3BsaWNlX3plcm9wYWdlX2ludG9fcGlwZSAtIHNwbGljZSBhIHplcm8gcGFnZSBpbnRvIGEgcGlwZVxuKyAqIEBwaXBlOiBwaXBlIHRvIHNwbGljZSBpbnRvXG4rICogQGZwb3M6IGZpbGUgcG9zaXRpb25cbisgKiBAc2l6ZTogbnVtYmVyIG9mIGJ5dGVzIHRvIHNwbGljZVxuKyAqXG4rICogU3BsaWNlIGF0IG1vc3Qgb25lIHBhZ2Ugb2YgemVyb2VzIGludG8gdGhlIHBpcGUuICBUaGUgemVybyBwYWdlIGlzIG5vdFxuKyAqIHJlZmNvdW50ZWQsIHNvIEB6ZXJvX3BpcGVfYnVmX29wcyBtdXN0IGJlIHVzZWQgdG8gYXZvaWQgdGFraW5nIGFcbisgKiByZWZlcmVuY2Ugb24gaXQuXG4rICpcbisgKiBSZXR1cm46IHRoZSBudW1iZXIgb2YgYnl0ZXMgc3BsaWNlZC5cbisgKi9cbitzaXplX3Qgc3BsaWNlX3plcm9wYWdlX2ludG9fcGlwZShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLFxuK1x0XHRcdFx0IGxvZmZfdCBmcG9zLCBzaXplX3Qgc2l6ZSlcbit7XG4rXHRzaXplX3Qgb2Zmc2V0ID0gZnBvcyBcdTAwMjYgflBBR0VfTUFTSztcbitcbitcdHNpemUgPSBtaW5fdChzaXplX3QsIHNpemUsIFBBR0VfU0laRSAtIG9mZnNldCk7XG4rXG4rXHRpZiAoIXBpcGVfaXNfZnVsbChwaXBlKSkge1xuK1x0XHRzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1ZiA9IHBpcGVfaGVhZF9idWYocGlwZSk7XG4rXG4rXHRcdCpidWYgPSAoc3RydWN0IHBpcGVfYnVmZmVyKSB7XG4rXHRcdFx0Lm9wc1x0PSBcdTAwMjZ6ZXJvX3BpcGVfYnVmX29wcyxcbitcdFx0XHQucGFnZVx0PSBaRVJPX1BBR0UoMCksXG4rXHRcdFx0Lm9mZnNldFx0PSBvZmZzZXQsXG4rXHRcdFx0Lmxlblx0PSBzaXplLFxuK1x0XHR9O1xuK1x0XHRwaXBlLVx1MDAzZWhlYWQrKztcbitcdH1cbitcbitcdHJldHVybiBzaXplO1xuK31cbitcbiBjb25zdCBzdHJ1Y3QgcGlwZV9idWZfb3BlcmF0aW9ucyBkZWZhdWx0X3BpcGVfYnVmX29wcyA9IHtcbiBcdC5yZWxlYXNlXHQ9IGdlbmVyaWNfcGlwZV9idWZfcmVsZWFzZSxcbiBcdC50cnlfc3RlYWxcdD0gZ2VuZXJpY19waXBlX2J1Zl90cnlfc3RlYWwsXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zcGxpY2UuaCBiL2luY2x1ZGUvbGludXgvc3BsaWNlLmhcbmluZGV4IDlkZWM0ODYxZDA5ZjYuLmYxZDRhZWZhNGVjMmMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NwbGljZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NwbGljZS5oXG5AQCAtMTA4LDQgKzEwOCw3IEBAIGV4dGVybiB2b2lkIHNwbGljZV9zaHJpbmtfc3BkKHN0cnVjdCBzcGxpY2VfcGlwZV9kZXNjICopO1xuIFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgcGlwZV9idWZfb3BlcmF0aW9ucyBwYWdlX2NhY2hlX3BpcGVfYnVmX29wcztcbiBleHRlcm4gY29uc3Qgc3RydWN0IHBpcGVfYnVmX29wZXJhdGlvbnMgZGVmYXVsdF9waXBlX2J1Zl9vcHM7XG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBwaXBlX2J1Zl9vcGVyYXRpb25zIHplcm9fcGlwZV9idWZfb3BzO1xuK3NpemVfdCBzcGxpY2VfemVyb3BhZ2VfaW50b19waXBlKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsIGxvZmZfdCBmcG9zLFxuK1x0XHRcdFx0IHNpemVfdCBzaXplKTtcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uY1xuaW5kZXggOTAwMWFhZjNiN2I5NC4uMzlkOGRmZWZiZTlmNSAxMDA2NDRcbi0tLSBhL21tL3NobWVtLmNcbisrKyBiL21tL3NobWVtLmNcbkBAIC0zNDI3LDUxICszNDI3LDYgQEAgc3RhdGljIHNzaXplX3Qgc2htZW1fZmlsZV93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tc3RhdGljIGJvb2wgemVyb19waXBlX2J1Zl9nZXQoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSxcbi1cdFx0XHQgICAgICBzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1Zilcbi17XG4tXHRyZXR1cm4gdHJ1ZTtcbi19XG4tXG4tc3RhdGljIHZvaWQgemVyb19waXBlX2J1Zl9yZWxlYXNlKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsXG4tXHRcdFx0XHQgIHN0cnVjdCBwaXBlX2J1ZmZlciAqYnVmKVxuLXtcbi19XG4tXG4tc3RhdGljIGJvb2wgemVyb19waXBlX2J1Zl90cnlfc3RlYWwoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSxcbi1cdFx0XHRcdCAgICBzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1Zilcbi17XG4tXHRyZXR1cm4gZmFsc2U7XG4tfVxuLVxuLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGlwZV9idWZfb3BlcmF0aW9ucyB6ZXJvX3BpcGVfYnVmX29wcyA9IHtcbi1cdC5yZWxlYXNlXHQ9IHplcm9fcGlwZV9idWZfcmVsZWFzZSxcbi1cdC50cnlfc3RlYWxcdD0gemVyb19waXBlX2J1Zl90cnlfc3RlYWwsXG4tXHQuZ2V0XHRcdD0gemVyb19waXBlX2J1Zl9nZXQsXG4tfTtcbi1cbi1zdGF0aWMgc2l6ZV90IHNwbGljZV96ZXJvcGFnZV9pbnRvX3BpcGUoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSxcbi1cdFx0XHRcdFx0bG9mZl90IGZwb3MsIHNpemVfdCBzaXplKVxuLXtcbi1cdHNpemVfdCBvZmZzZXQgPSBmcG9zIFx1MDAyNiB+UEFHRV9NQVNLO1xuLVxuLVx0c2l6ZSA9IG1pbl90KHNpemVfdCwgc2l6ZSwgUEFHRV9TSVpFIC0gb2Zmc2V0KTtcbi1cbi1cdGlmICghcGlwZV9pc19mdWxsKHBpcGUpKSB7XG4tXHRcdHN0cnVjdCBwaXBlX2J1ZmZlciAqYnVmID0gcGlwZV9oZWFkX2J1ZihwaXBlKTtcbi1cbi1cdFx0KmJ1ZiA9IChzdHJ1Y3QgcGlwZV9idWZmZXIpIHtcbi1cdFx0XHQub3BzXHQ9IFx1MDAyNnplcm9fcGlwZV9idWZfb3BzLFxuLVx0XHRcdC5wYWdlXHQ9IFpFUk9fUEFHRSgwKSxcbi1cdFx0XHQub2Zmc2V0XHQ9IG9mZnNldCxcbi1cdFx0XHQubGVuXHQ9IHNpemUsXG4tXHRcdH07XG4tXHRcdHBpcGUtXHUwMDNlaGVhZCsrO1xuLVx0fVxuLVxuLVx0cmV0dXJuIHNpemU7XG4tfVxuLVxuIHN0YXRpYyBzc2l6ZV90IHNobWVtX2ZpbGVfc3BsaWNlX3JlYWQoc3RydWN0IGZpbGUgKmluLCBsb2ZmX3QgKnBwb3MsXG4gXHRcdFx0XHQgICAgICBzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLFxuIFx0XHRcdFx0ICAgICAgc2l6ZV90IGxlbiwgdW5zaWduZWQgaW50IGZsYWdzKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDU6MzM6NTYuMzE4MzgyMzQ2WiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwMTEwNTY2MzIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlZmFjdG9yaW5nIGAvZGV2L3plcm9gIGFuZCBgL2Rldi9mdWxsYCBTcGxpY2UgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGNsZWFuaW5nIHVwIHNvbWUgY29kZSwgbW92aW5nIGBzcGxpY2VfemVyb3BhZ2VfaW50b19waXBlYCBhbmQgYHplcm9fcGlwZV9idWZfb3BzYCBvdXQgb2YgYG1tL3NobWVtLmNgIGFuZCBpbnRvIGBmcy9zcGxpY2UuY2AuIFRoYXQgbWFrZXMgc2Vuc2U7IGl0J3MgbW9yZSBnZW5lcmFsIGFuZCBiZWxvbmdzIHRoZXJlIHNpbmNlIGl0J3MgYWJvdXQgdGhlIHNwbGljZSBmdW5jdGlvbmFsaXR5IGl0c2VsZi4gV2UncmUgYWxzbyBleHBvcnRpbmcgdGhlbSB2aWEgYGluY2x1ZGUvbGludXgvc3BsaWNlLmhgLCB3aGljaCBpcyBjcnVjaWFsIGZvciBtYWtpbmcgdGhlbSBhY2Nlc3NpYmxlIHRvIGAvZGV2L3plcm9gIGFuZCBgL2Rldi9mdWxsYC4gQW5kIGZpbmFsbHksIGltcGxlbWVudGluZyBgc3BsaWNlX3JlYWRfemVyb2Agd2l0aGluIGBkcml2ZXJzL2NoYXIvbWVtLmNgLiBMZXQncyBkaWcgaW50byBob3cgYHNwbGljZV9yZWFkX3plcm9gIGlzIGltcGxlbWVudGVkLlxuXG5Mb29raW5nIGF0IGBzcGxpY2VfcmVhZF96ZXJvYCwgSSBzZWUgdGhlIHVzdWFsIHN1c3BlY3RzOiBjaGVja2luZyBwaXBlIHVzYWdlLCBjYWxjdWxhdGluZyBob3cgbXVjaCB0byByZWFkLCBhbmQgdGhlbiB0aGlzIGBzcGxpY2VfemVyb3BhZ2VfaW50b19waXBlYCBjYWxsIHdpdGhpbiBhIGxvb3AuIFRoZSBsb29wIGxvb2tzIHNvdW5kLCBoYW5kbGluZyBwb3RlbnRpYWwgcGFydGlhbCBwYWdlIHJlYWRzLiBCdXQsIHRoYXQgYHNwbGljZV96ZXJvcGFnZV9pbnRvX3BpcGVgIGZ1bmN0aW9uIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLi4uXG5cbkFoLCBpbiBgc3BsaWNlX3plcm9wYWdlX2ludG9fcGlwZWAsIGEgc3RydWN0IGxpdGVyYWwgaXMgdXNlZCB0byBpbml0aWFsaXplIHRoZSBgcGlwZV9idWZmZXJgOlxuYCpidWYgPSAoc3RydWN0IHBpcGVfYnVmZmVyKSB7IC5vcHMgPSBcdTAwMjZ6ZXJvX3BpcGVfYnVmX29wcywgLnBhZ2UgPSBaRVJPX1BBR0UoMCksIC5vZmZzZXQgPSBvZmZzZXQsIC5sZW4gPSBzaXplLCB9O2BcblxuVGhlIGtleSBoZXJlIGlzIHRoYXQgaXQgc2V0cyBgLnBhZ2UgPSBaRVJPX1BBR0UoMClgLiBSaWdodCwgYFpFUk9fUEFHRSgwKWAgaXMgKnRoZSogZ2xvYmFsLCB6ZXJvLWZpbGxlZCBwYWdlLiBUaGlzIGF2b2lkcyBhbnkgYWN0dWFsIG1lbW9yeSBhbGxvY2F0aW9uLiBXZSdyZSBqdXN0IHBvaW50aW5nIHRvIGEgcHJlLWV4aXN0aW5nIHBhZ2UgZmlsbGVkIHdpdGggemVyb3MuIFRoYXQncyBhIGNsZXZlciBvcHRpbWl6YXRpb24sIGFuZCBpdCdzIHdoYXQgbWFrZXMgcmVhZGluZyBmcm9tIGAvZGV2L3plcm9gIGFuZCBgL2Rldi9mdWxsYCBzbyBlZmZpY2llbnQuIEFuZCBzaW5jZSBhIHN0cnVjdCBsaXRlcmFsIGlzIHVzZWQsIGFsbCB1bmFzc2lnbmVkIGZpZWxkcyBhcmUgemVyby1pbml0aWFsaXplZC4gTm93LCBsZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGBzdHJ1Y3QgcGlwZV9idWZmZXJgIGRlZmluaXRpb24ganVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhhdCBhbnkgcG90ZW50aWFsbHkgcmVsZXZhbnQgZmllbGRzIGFyZSBleHBsaWNpdGx5IGhhbmRsZWQgb3IgcHJvcGVybHkgemVyb2VkIGJ5IHRoZSBsaXRlcmFsLiBJIGNhbid0IGJlIHRvbyBjYXJlZnVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDY2LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDU6MzQ6MTYuNDI4OTUwNjU4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTM0NzQ5NDQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBwaXBlX2J1ZmZlciBcXFxce1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3BpcGVfZnNfaS5oLTI1LSAqKi9cXG5pbmNsdWRlL2xpbnV4L3BpcGVfZnNfaS5oOjI2OnN0cnVjdCBwaXBlX2J1ZmZlciB7XFxuaW5jbHVkZS9saW51eC9waXBlX2ZzX2kuaC0yNy1cXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDU6MzQ6MTguNTYzNzEwNTQzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ0MzY4NzQxNjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gUGlwZSBGUyBJbnRlcm5hbHMqKlxuXG5Pa2F5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGtlcm5lbCdzIHBpcGUgZmlsZXN5c3RlbSBvcGVyYXRlcy4gVGltZSB0byBjcmFjayBvcGVuIHRoZSBzb3VyY2UuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IGBpbmNsdWRlL2xpbnV4L3BpcGVfZnNfaS5oYCwgc3RhcnRpbmcgYXJvdW5kIGxpbmUgMjYuIFRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyBhbmQgbGlrZWx5IHNvbWUgY3J1Y2lhbCBtYWNybyBkZWZpbml0aW9ucyByZXNpZGUgZm9yIHRoZXNlIHR5cGVzIG9mIHN1YnN5c3RlbXMuIE15IGludHVpdGlvbiBzYXlzIHRoYXQncyB3aGVyZSBJIGNhbiBzdGFydCB1bnRhbmdsaW5nIHRoZSBpbnRlcmFjdGlvbnMgd2l0aGluIHRoZSBwaXBlIGZpbGVzeXN0ZW0uIFVuZGVyc3RhbmRpbmcgdGhlc2UgbG93LWxldmVsIGRldGFpbHMgd2lsbCBjbGFyaWZ5IGhvdyBwaXBlcyBhcmUgaW1wbGVtZW50ZWQsIGVzcGVjaWFsbHkgdGhlIGRhdGEgc3RydWN0dXJlcyB1c2VkIHRvIG1hbmFnZSB0aGUgYnVmZmVycyBhbmQgcmVhZGVyL3dyaXRlciBzeW5jaHJvbml6YXRpb24uIExldCdzIHNlZSB3aGF0IGBwaXBlX2ZzX2kuaGAgcmV2ZWFscyFcblxuXG4iLCJJbnB1dFRva2VucyI6NTI5NCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDA1OjM0OjIzLjAwMDU4NzE4MVoiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjA1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L3BpcGVfZnNfaS5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDI1OlxcdCAqKi9cXG4gIDI2OlxcdHN0cnVjdCBwaXBlX2J1ZmZlciB7XFxuICAyNzpcXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG4gIDI4OlxcdFxcdHVuc2lnbmVkIGludCBvZmZzZXQsIGxlbjtcXG4gIDI5OlxcdFxcdGNvbnN0IHN0cnVjdCBwaXBlX2J1Zl9vcGVyYXRpb25zICpvcHM7XFxuICAzMDpcXHRcXHR1bnNpZ25lZCBpbnQgZmxhZ3M7XFxuICAzMTpcXHRcXHR1bnNpZ25lZCBsb25nIHByaXZhdGU7XFxuICAzMjpcXHR9O1xcbiAgMzM6XFx0XFxuICAzNDpcXHQvKlxcbiAgMzU6XFx0ICogUmVhbGx5IG9ubHkgYWxwaGEgbmVlZHMgMzItYml0IGZpZWxkcywgYnV0XFxuICAzNjpcXHQgKiBtaWdodCBhcyB3ZWxsIGRvIGl0IGZvciA2NC1iaXQgYXJjaGl0ZWN0dXJlc1xcbiAgMzc6XFx0ICogc2luY2UgdGhhdCdzIHdoYXQgd2UndmUgaGlzdG9yaWNhbGx5IGRvbmUsXFxuICAzODpcXHQgKiBhbmQgaXQgbWFrZXMgJ2hlYWRfdGFpbCcgYWx3YXlzIGJlIGEgc2ltcGxlXFxuICAzOTpcXHQgKiAndW5zaWduZWQgbG9uZycuXFxuICA0MDpcXHQgKi9cXG4gIDQxOlxcdCNpZmRlZiBDT05GSUdfNjRCSVRcXG4gIDQyOlxcdHR5cGVkZWYgdW5zaWduZWQgaW50IHBpcGVfaW5kZXhfdDtcXG4gIDQzOlxcdCNlbHNlXFxuICA0NDpcXHR0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHBpcGVfaW5kZXhfdDtcXG4gIDQ1OlxcdCNlbmRpZlxcbiAgNDY6XFx0XFxuICA0NzpcXHQvKipcXG4gIDQ4OlxcdCAqXFx0c3RydWN0IHBpcGVfaW5kZXggLSBwaXBlIGluZGVjZXNcXG4gIDQ5OlxcdCAqXFx0QGhlYWQ6IFRoZSBwb2ludCBvZiBidWZmZXIgcHJvZHVjdGlvblxcbiAgNTA6XFx0ICpcXHRAdGFpbDogVGhlIHBvaW50IG9mIGJ1ZmZlciBjb25zdW1wdGlvblxcbiAgNTE6XFx0ICpcXHRAaGVhZF90YWlsOiB1bnNpZ25lZCBsb25nIHVuaW9uIG9mIEBoZWFkIGFuZCBAdGFpbFxcbiAgNTI6XFx0ICovXFxuICA1MzpcXHR1bmlvbiBwaXBlX2luZGV4IHtcXG4gIDU0OlxcdFxcdHVuc2lnbmVkIGxvbmcgaGVhZF90YWlsO1xcbiAgNTU6XFx0XFx0c3RydWN0IHtcXG4gIDU2OlxcdFxcdFxcdHBpcGVfaW5kZXhfdCBoZWFkO1xcbiAgNTc6XFx0XFx0XFx0cGlwZV9pbmRleF90IHRhaWw7XFxuICA1ODpcXHRcXHR9O1xcbiAgNTk6XFx0fTtcXG4gIDYwOlxcdFxcbiAgNjE6XFx0LyoqXFxuICA2MjpcXHQgKlxcdHN0cnVjdCBwaXBlX2lub2RlX2luZm8gLSBhIGxpbnV4IGtlcm5lbCBwaXBlXFxuICA2MzpcXHQgKlxcdEBtdXRleDogbXV0ZXggcHJvdGVjdGluZyB0aGUgd2hvbGUgdGhpbmdcXG4gIDY0OlxcdCAqXFx0QHJkX3dhaXQ6IHJlYWRlciB3YWl0IHBvaW50IGluIGNhc2Ugb2YgZW1wdHkgcGlwZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwNTozNDoyMy4wMDA2NzEyMjFaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjk3Nzg1Mzk3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEaXZpbmcgaW50byBzaG1lbSdzIFNwbGljZSBJbXBsZW1lbnRhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBzaGFyZWQgbWVtb3J5IChzaG1lbSkgdXRpbGl6ZXMgYHNwbGljZV96ZXJvcGFnZV9pbnRvX3BpcGVgIGFuZCBob3cgdGhhdCdzIGludGVyYWN0aW5nIHdpdGggYHNwbGljZV9yZWFkX3plcm9gLiBHaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIGtlcm5lbCBpbnRlcm5hbHMsIEknbGwgbmVlZCBhIHNvbGlkIGdyaXAgb24gdGhlIGxvdy1sZXZlbCBkZXRhaWxzIG9mIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGludGVydHdpbmVkLiBTbywgbXkgc3RhcnRpbmcgcG9pbnQgaXMgZ29pbmcgdG8gYmUgYG1tL3NobWVtLmNgLCB0aGF0J3Mgd2hlcmUgYHNobWVtX2ZpbGVfc3BsaWNlX3JlYWRgIHdpbGwgYmUgZGVmaW5lZC4gSXQncyB0aGUgbHluY2hwaW4gSSdtIGFmdGVyLCB0aGUgZnVuY3Rpb24gdGhhdCByZXZlYWxzIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiBzaG1lbSwgc3BsaWNpbmcsIGFuZCB0aGUgemVyby1wYWdlIG9wdGltaXphdGlvbi4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSBob3cgdGhleSdyZSBtYWtpbmcgdGhpcyBtYWdpYyBoYXBwZW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwMTQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDA1OjM0OjI1Ljk3ODUyNzk0MloiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzc5NDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3NobWVtLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzQyNSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzQyNTpcXHR1bmxvY2s6XFxuMzQyNjpcXHRcXHRpbm9kZV91bmxvY2soaW5vZGUpO1xcbjM0Mjc6XFx0XFx0cmV0dXJuIHJldDtcXG4zNDI4OlxcdH1cXG4zNDI5OlxcdFxcbjM0MzA6XFx0c3RhdGljIHNzaXplX3Qgc2htZW1fZmlsZV9zcGxpY2VfcmVhZChzdHJ1Y3QgZmlsZSAqaW4sIGxvZmZfdCAqcHBvcyxcXG4zNDMxOlxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsXFxuMzQzMjpcXHRcXHRcXHRcXHRcXHQgICAgICBzaXplX3QgbGVuLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuMzQzMzpcXHR7XFxuMzQzNDpcXHRcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShpbik7XFxuMzQzNTpcXHRcXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGlub2RlLVxcdTAwM2VpX21hcHBpbmc7XFxuMzQzNjpcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gTlVMTDtcXG4zNDM3OlxcdFxcdHNpemVfdCB0b3RhbF9zcGxpY2VkID0gMCwgdXNlZCwgbnBhZ2VzLCBuLCBwYXJ0O1xcbjM0Mzg6XFx0XFx0bG9mZl90IGlzaXplO1xcbjM0Mzk6XFx0XFx0aW50IGVycm9yID0gMDtcXG4zNDQwOlxcdFxcbjM0NDE6XFx0XFx0LyogV29yayBvdXQgaG93IG11Y2ggZGF0YSB3ZSBjYW4gYWN0dWFsbHkgYWRkIGludG8gdGhlIHBpcGUgKi9cXG4zNDQyOlxcdFxcdHVzZWQgPSBwaXBlX2J1Zl91c2FnZShwaXBlKTtcXG4zNDQzOlxcdFxcdG5wYWdlcyA9IG1heF90KHNzaXplX3QsIHBpcGUtXFx1MDAzZW1heF91c2FnZSAtIHVzZWQsIDApO1xcbjM0NDQ6XFx0XFx0bGVuID0gbWluX3Qoc2l6ZV90LCBsZW4sIG5wYWdlcyAqIFBBR0VfU0laRSk7XFxuMzQ0NTpcXHRcXG4zNDQ2OlxcdFxcdGRvIHtcXG4zNDQ3OlxcdFxcdFxcdGJvb2wgZmFsbGJhY2tfcGFnZV9zcGxpY2UgPSBmYWxzZTtcXG4zNDQ4OlxcdFxcdFxcdHN0cnVjdCBwYWdlICpwYWdlID0gTlVMTDtcXG4zNDQ5OlxcdFxcdFxcdHBnb2ZmX3QgaW5kZXg7XFxuMzQ1MDpcXHRcXHRcXHRzaXplX3Qgc2l6ZTtcXG4zNDUxOlxcdFxcbjM0NTI6XFx0XFx0XFx0aWYgKCpwcG9zIFxcdTAwM2U9IGlfc2l6ZV9yZWFkKGlub2RlKSlcXG4zNDUzOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjM0NTQ6XFx0XFxuMzQ1NTpcXHRcXHRcXHRpbmRleCA9ICpwcG9zIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuMzQ1NjpcXHRcXHRcXHRlcnJvciA9IHNobWVtX2dldF9mb2xpbyhpbm9kZSwgaW5kZXgsIDAsIFxcdTAwMjZmb2xpbywgU0dQX1JFQUQpO1xcbjM0NTc6XFx0XFx0XFx0aWYgKGVycm9yKSB7XFxuMzQ1ODpcXHRcXHRcXHRcXHRpZiAoZXJyb3IgPT0gLUVJTlZBTClcXG4zNDU5OlxcdFxcdFxcdFxcdFxcdGVycm9yID0gMDtcXG4zNDYwOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjM0NjE6XFx0XFx0XFx0fVxcbjM0NjI6XFx0XFx0XFx0aWYgKGZvbGlvKSB7XFxuMzQ2MzpcXHRcXHRcXHRcXHRmb2xpb191bmxvY2soZm9saW8pO1xcbjM0NjQ6XFx0XFxuMzQ2NTpcXHRcXHRcXHRcXHRwYWdlID0gZm9saW9fZmlsZV9wYWdlKGZvbGlvLCBpbmRleCk7XFxuMzQ2NjpcXHRcXHRcXHRcXHRpZiAoUGFnZUhXUG9pc29uKHBhZ2UpKSB7XFxuMzQ2NzpcXHRcXHRcXHRcXHRcXHRlcnJvciA9IC1FSU87XFxuMzQ2ODpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4zNDY5OlxcdFxcdFxcdFxcdH1cXG4zNDcwOlxcdFxcbjM0NzE6XFx0XFx0XFx0XFx0aWYgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pIFxcdTAwMjZcXHUwMDI2XFxuMzQ3MjpcXHRcXHRcXHRcXHQgICAgZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpXFxuMzQ3MzpcXHRcXHRcXHRcXHRcXHRmYWxsYmFja19wYWdlX3NwbGljZSA9IHRydWU7XFxuMzQ3NDpcXHRcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDA1OjM0OjI1Ljk3OTkxMDczMloiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMzc5ODU5NTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgRGVlcGVyIGludG8gYHNobWVtX2ZpbGVfc3BsaWNlX3JlYWRgKipcblxuQWxyaWdodCwgc28gdGhlIGZvY3VzIGlzIG5vdyBvbiBtZXRpY3Vsb3VzbHkgZXhhbWluaW5nIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgc2htZW1fZmlsZV9zcGxpY2VfcmVhZGAuIFdlJ3ZlIGFscmVhZHkgZ290IGEgZ29vZCBoYW5kbGUgb24gc29tZSBhc3BlY3RzLCBidXQgdGhlIGRldmlscyBhbHdheXMgaW4gdGhlIGRldGFpbHMsIGlzbid0IGl0PyBMZXQncyBhc3N1bWUgd2UncmUgYWxyZWFkeSBmYW1pbGlhciB3aXRoIGl0cyBjb3JlIGZ1bmN0aW9uYWxpdHkuIE5vdyBJIHdhbnQgdG8gdGhvcm91Z2hseSBkaXNzZWN0IHRoZSBmdW5jdGlvbiwgcHJvYmFibHkgdG8gY2F0Y2ggc29tZXRoaW5nIHNwZWNpZmljLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3Qgb3Zlcmxvb2tpbmcgYW55IHN1YnRsZSBlZGdlIGNhc2VzLCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIChlc3BlY2lhbGx5IHdpdGggc2hhcmVkIG1lbW9yeSBvcGVyYXRpb25zKSwgbWVtb3J5IGxlYWtzLCBvciBvYnNjdXJlIG9wdGltaXphdGlvbnMgKG9yIGxhY2sgdGhlcmVvZikgdGhhdCBjb3VsZCBiZSBjYXVzaW5nIGEgcGVyZm9ybWFuY2UgYm90dGxlbmVjayBvciwgZXZlbiB3b3JzZSwgYSBzZWN1cml0eSB2dWxuZXJhYmlsaXR5LiBXZSdyZSB0YWxraW5nIGFib3V0IHNoYXJlZCBtZW1vcnksIHNvIGFueSBzbGlwLXVwIGhlcmUgY291bGQgYmUgY2F0YXN0cm9waGljLiBJIG5lZWQgdG8gbG9vayBmb3IgYW55IHVuaGFuZGxlZCBlcnJvcnMsIGluYWRlcXVhdGUgYnVmZmVyIGhhbmRsaW5nLCBvciBwZXJoYXBzIG92ZXJseSBhZ2dyZXNzaXZlIGxvY2tpbmcgbWVjaGFuaXNtcyB0aGF0IG1pZ2h0IGJlIGNvdW50ZXJwcm9kdWN0aXZlLiBMZXQncyBzZWUgaWYgd2UncmUgZG9pbmcgdGhlIHJpZ2h0IHRoaW5nIGZvciBkYXRhIGFsaWdubWVudCBoZXJlLiBJIGhhdmUgYSBmZWVsaW5nIHdlJ3JlIG1pc3Npbmcgc29tZXRoaW5nIGFuZCBJJ20gcmVhZHkgdG8gZmlndXJlIGl0IG91dC4gVGltZSB0byByb2xsIHVwIHRoZSBzbGVldmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDA2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwNTozNDoyOS4zNTk3NzMyODdaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEzNzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3NobWVtLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzQ3NSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzQ3NTpcXHRcXG4zNDc2OlxcdFxcdFxcdC8qXFxuMzQ3NzpcXHRcXHRcXHQgKiBpX3NpemUgbXVzdCBiZSBjaGVja2VkIGFmdGVyIHdlIGtub3cgdGhlIHBhZ2VzIGFyZSBVcHRvZGF0ZS5cXG4zNDc4OlxcdFxcdFxcdCAqXFxuMzQ3OTpcXHRcXHRcXHQgKiBDaGVja2luZyBpX3NpemUgYWZ0ZXIgdGhlIGNoZWNrIGFsbG93cyB1cyB0byBjYWxjdWxhdGVcXG4zNDgwOlxcdFxcdFxcdCAqIHRoZSBjb3JyZWN0IHZhbHVlIGZvciBcXFwibnJcXFwiLCB3aGljaCBtZWFucyB0aGUgemVyby1maWxsZWRcXG4zNDgxOlxcdFxcdFxcdCAqIHBhcnQgb2YgdGhlIHBhZ2UgaXMgbm90IGNvcGllZCBiYWNrIHRvIHVzZXJzcGFjZSAodW5sZXNzXFxuMzQ4MjpcXHRcXHRcXHQgKiBhbm90aGVyIHRydW5jYXRlIGV4dGVuZHMgdGhlIGZpbGUgLSB0aGlzIGlzIGRlc2lyZWQgdGhvdWdoKS5cXG4zNDgzOlxcdFxcdFxcdCAqL1xcbjM0ODQ6XFx0XFx0XFx0aXNpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7XFxuMzQ4NTpcXHRcXHRcXHRpZiAodW5saWtlbHkoKnBwb3MgXFx1MDAzZT0gaXNpemUpKVxcbjM0ODY6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMzQ4NzpcXHRcXHRcXHQvKlxcbjM0ODg6XFx0XFx0XFx0ICogRmFsbGJhY2sgdG8gUEFHRV9TSVpFIHNwbGljZSBpZiB0aGUgbGFyZ2UgZm9saW8gaGFzIGh3cG9pc29uZWRcXG4zNDg5OlxcdFxcdFxcdCAqIHBhZ2VzLlxcbjM0OTA6XFx0XFx0XFx0ICovXFxuMzQ5MTpcXHRcXHRcXHRzaXplID0gbGVuO1xcbjM0OTI6XFx0XFx0XFx0aWYgKHVubGlrZWx5KGZhbGxiYWNrX3BhZ2Vfc3BsaWNlKSkge1xcbjM0OTM6XFx0XFx0XFx0XFx0c2l6ZV90IG9mZnNldCA9ICpwcG9zIFxcdTAwMjYgflBBR0VfTUFTSztcXG4zNDk0OlxcdFxcbjM0OTU6XFx0XFx0XFx0XFx0c2l6ZSA9IHVtaW4oc2l6ZSwgUEFHRV9TSVpFIC0gb2Zmc2V0KTtcXG4zNDk2OlxcdFxcdFxcdH1cXG4zNDk3OlxcdFxcdFxcdHBhcnQgPSBtaW5fdChsb2ZmX3QsIGlzaXplIC0gKnBwb3MsIHNpemUpO1xcbjM0OTg6XFx0XFxuMzQ5OTpcXHRcXHRcXHRpZiAoZm9saW8pIHtcXG4zNTAwOlxcdFxcdFxcdFxcdC8qXFxuMzUwMTpcXHRcXHRcXHRcXHQgKiBJZiB1c2VycyBjYW4gYmUgd3JpdGluZyB0byB0aGlzIHBhZ2UgdXNpbmcgYXJiaXRyYXJ5XFxuMzUwMjpcXHRcXHRcXHRcXHQgKiB2aXJ0dWFsIGFkZHJlc3NlcywgdGFrZSBjYXJlIGFib3V0IHBvdGVudGlhbCBhbGlhc2luZ1xcbjM1MDM6XFx0XFx0XFx0XFx0ICogYmVmb3JlIHJlYWRpbmcgdGhlIHBhZ2Ugb24gdGhlIGtlcm5lbCBzaWRlLlxcbjM1MDQ6XFx0XFx0XFx0XFx0ICovXFxuMzUwNTpcXHRcXHRcXHRcXHRpZiAobWFwcGluZ193cml0YWJseV9tYXBwZWQobWFwcGluZykpIHtcXG4zNTA2OlxcdFxcdFxcdFxcdFxcdGlmIChsaWtlbHkoIWZhbGxiYWNrX3BhZ2Vfc3BsaWNlKSlcXG4zNTA3OlxcdFxcdFxcdFxcdFxcdFxcdGZsdXNoX2RjYWNoZV9mb2xpbyhmb2xpbyk7XFxuMzUwODpcXHRcXHRcXHRcXHRcXHRlbHNlXFxuMzUwOTpcXHRcXHRcXHRcXHRcXHRcXHRmbHVzaF9kY2FjaGVfcGFnZShwYWdlKTtcXG4zNTEwOlxcdFxcdFxcdFxcdH1cXG4zNTExOlxcdFxcdFxcdFxcdGZvbGlvX21hcmtfYWNjZXNzZWQoZm9saW8pO1xcbjM1MTI6XFx0XFx0XFx0XFx0LypcXG4zNTEzOlxcdFxcdFxcdFxcdCAqIE9rLCB3ZSBoYXZlIHRoZSBwYWdlLCBhbmQgaXQncyB1cC10by1kYXRlLCBzbyB3ZSBjYW5cXG4zNTE0OlxcdFxcdFxcdFxcdCAqIG5vdyBzcGxpY2UgaXQgaW50byB0aGUgcGlwZS5cXG4zNTE1OlxcdFxcdFxcdFxcdCAqL1xcbjM1MTY6XFx0XFx0XFx0XFx0biA9IHNwbGljZV9mb2xpb19pbnRvX3BpcGUocGlwZSwgZm9saW8sICpwcG9zLCBwYXJ0KTtcXG4zNTE3OlxcdFxcdFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuMzUxODpcXHRcXHRcXHRcXHRmb2xpbyA9IE5VTEw7XFxuMzUxOTpcXHRcXHRcXHR9IGVsc2Uge1xcbjM1MjA6XFx0XFx0XFx0XFx0biA9IHNwbGljZV96ZXJvcGFnZV9pbnRvX3BpcGUocGlwZSwgKnBwb3MsIHBhcnQpO1xcbjM1MjE6XFx0XFx0XFx0fVxcbjM1MjI6XFx0XFxuMzUyMzpcXHRcXHRcXHRpZiAoIW4pXFxuMzUyNDpcXHRcXHRcXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDU6MzQ6MjkuMzU5OTg5OTQ3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjczMjI3NTA1MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgVW5pbml0aWFsaXplZCBNZW1vcnkgRXhwb3N1cmUqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGUgcGF0Y2ggbW92ZXMgYHNwbGljZV96ZXJvcGFnZV9pbnRvX3BpcGVgIGFuZCBgemVyb19waXBlX2J1Zl9vcHNgIGZyb20gYG1tL3NobWVtLmNgIHRvIGBmcy9zcGxpY2UuY2AuIFRoZW4sIGl0IHJldXNlcyBgc3BsaWNlX3plcm9wYWdlX2ludG9fcGlwZWAgd2l0aGluIGBzcGxpY2VfcmVhZF96ZXJvYCB0byBoYW5kbGUgYC9kZXYvemVyb2AgYW5kIGAvZGV2L2Z1bGxgIGluIGBkcml2ZXJzL2NoYXIvbWVtLmNgLCBlc3NlbnRpYWxseSBjaGFuZ2luZyB0aGVpciBgLnNwbGljZV9yZWFkYCBtZXRob2QgZnJvbSBgY29weV9zcGxpY2VfcmVhZGAgdG8gYHNwbGljZV9yZWFkX3plcm9gLiBTbywgdGhlIGNvcmUgY2hhbmdlIGlzIHJlZGlyZWN0aW5nIGAvZGV2L3plcm9gIGFuZCBgL2Rldi9mdWxsYCB0byBhIG5ldyBvcHRpbWl6ZWQgcGF0aC5cblxuTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uOiB1bmluaXRpYWxpemVkIG1lbW9yeS4gTGV0J3MgZGlnIGludG8gYHNwbGljZV9yZWFkX3plcm9gLiBJIHNlZSB0aGF0IHRoZSB2YXJpYWJsZXMgYHRvdGFsYCwgYHBvc2AsIGB1c2VkYCwgYW5kIGBucGFnZXNgIGFyZSBhbGwgcHJpbWl0aXZlIHR5cGVzIGFuZCBpbml0aWFsaXplZCBjb3JyZWN0bHkuIFRoZSBjYWxsIHRvIGBwaXBlX2J1Zl91c2FnZShwaXBlKWAgbG9va3Mgc3RhbmRhcmQuIEluIGBwaXBlX3plcm9wYWdlX2ludG9fcGlwZShwaXBlLCBwb3MsIGxlbilgLCBgcG9zYCBpcyBzdGFydGluZyBhdCAwIGFuZCB0aGUgYCpidWYgPSAoc3RydWN0IHBpcGVfYnVmZmVyKSB7IC4uLiB9YCBzeW50YXggZm9yIGluaXRpYWxpemluZyBgc3RydWN0IHBpcGVfYnVmZmVyYCBpcyBzcG90IG9uLCBndWFyYW50ZWVpbmcgYWxsIGZpZWxkcyBhcmUgaW5pdGlhbGl6ZWQsIHdpdGggdGhlIHJlc3QgemVyby1pbml0aWFsaXplZCBieSB0aGUgQyBzdGFuZGFyZC4gYFpFUk9fUEFHRSgwKWAgaXMsIG9mIGNvdXJzZSwgdGhlIGtlcm5lbCdzIHplcm8gcGFnZSDigJMgaXQncyBmdWxseSBpbml0aWFsaXplZCB0byB6ZXJvLiBUaGlzIG1lYW5zIHRoYXQgZGF0YSBjb21pbmcgb3V0IG9mIHRoaXMgY29kZSBwYXRoIHdpbGwgKmFsd2F5cyogYmUgemVyb2VkLlxuXG5TbywgZG9lcyB0aGlzIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnk/IE5vLiBUaGUgYFpFUk9fUEFHRSgwKWAgaXMgYWxsIHplcm9lcy4gVGhlIGBwaXBlX2J1ZmZlcmAgc3RydWN0IGlzIHByb3Blcmx5IGluaXRpYWxpemVkIHVzaW5nIEM5OSBzeW50YXgsIHdoaWNoIGluY2x1ZGVzIHplcm9pbmcgYW55IHJlbWFpbmluZyBmaWVsZHMuIE5vIGtlcm5lbCBzdGFjayBvciBoZWFwIG1lbW9yeSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciB1c2VkIGluIGNvbmRpdGlvbmFsIGxvZ2ljLiBUaGUgdmFyaWFibGVzIGBwb3NgLCBgdG90YWxgLCBgbGVuYCwgYHVzZWRgLCBgbnBhZ2VzYCBhcmUgYWxsIGluaXRpYWxpemVkIGFuZCBjb3JyZWN0bHkgY2FsY3VsYXRlZC5cblxuTm93LCByZWdhcmRpbmcgS01TQU4tc3BlY2lmaWMgY29uY2VybnMuIERvZXMgdGhpcyBpbnZvbHZlIGtlcm5lbCBzdHJ1Y3R1cmVzIGJlaW5nIHNlbnQgdG8gdXNlcnNwYWNlIHdpdGggcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBmaWVsZHM/IE5vLCB0aGUgdXNlciByZWFkcyBvbmx5IHplcm9lcyBmcm9tIGBaRVJPX1BBR0UoMClgLiBJcyB0aGVyZSBjb25kaXRpb25hbCBsb2dpYyByZWx5aW5nIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBOb3BlLCBhbGwgdGhlIHZhcmlhYmxlcyB3aXRoaW4gYHNwbGljZV9yZWFkX3plcm9gIGFyZSBpbml0aWFsaXplZCBhbmQgZGV0ZXJtaW5lZCBiYXNlZCBvbiB0aGUgY29kZS4gQXJlIHRoZXJlIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMgdGhhdCBjb3VsZCBiZSByZWFkIGxhdGVyPyBBZ2Fpbiwgbm8uIFRoZSBgc3RydWN0IHBpcGVfYnVmZmVyYCBpcyB6ZXJvZWQuIERvZXMgdGhpcyBwbGF5IHdpdGggYm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3MgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgZGF0YSBpbiBzdXJyb3VuZGluZyBidWZmZXJzPyBOb3QgYXQgYWxsLiBUaGUgZGF0YSBhbHdheXMgY29tZXMgZnJvbSB0aGUgZ2xvYmFsIHplcm8gcGFnZS5cblxuU28sIEknbSBjb25maWRlbnQgaW4gc2F5aW5nIHRoYXQgdGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBBbnkgYnVncyByZWxhdGVkIHRvIHBpcGUgYnVmZmVycywgcGFnZSByZWZjb3VudGluZywgb3Igc3BsaWNlIGxvY2tpbmcgd291bGQgYmUgaGFuZGxlZCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBjaGVja3MuIERlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzbid0IG5lY2Vzc2FyeSBoZXJlLiBOb3csIHRpbWUgdG8gZm9ybXVsYXRlIHRoZSByZXNwb25zZSBhbmQgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDMzLCJPdXRwdXRUb2tlbnMiOjI5OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc2MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDA1OjM0OjM2LjY4Mjc0MzE5N1oiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgY29weV9zcGxpY2VfcmVhZCB3aXRoIGEgc3BlY2lhbGl6ZWQgc3BsaWNlX3JlYWRfemVybyBpbXBsZW1lbnRhdGlvbiBmb3IgL2Rldi96ZXJvIGFuZCAvZGV2L2Z1bGwsIG1vdmluZyBzcGxpY2VfemVyb3BhZ2VfaW50b19waXBlIGFuZCB6ZXJvX3BpcGVfYnVmX29wcyBmcm9tIG1tL3NobWVtLmMgaW50byBmcy9zcGxpY2UuYy5cXG5cXG4xLiBNZW1vcnkgSW5pdGlhbGl6YXRpb246XFxuLSBJbiBzcGxpY2VfemVyb3BhZ2VfaW50b19waXBlLCB0aGUgcGlwZSBidWZmZXIgaXMgaW5pdGlhbGl6ZWQgdXNpbmcgYSBkZXNpZ25hdGVkIGluaXRpYWxpemVyIChzdHJ1Y3QgcGlwZV9idWZmZXIpeyAuLi4gfSwgd2hpY2ggemVyb2VzIGFsbCB1bm1lbnRpb25lZCBzdHJ1Y3QgZmllbGRzIChmbGFncywgcHJpdmF0ZSkuXFxuLSBUaGUgcGFnZSByZWZlcmVuY2VkIGlzIFpFUk9fUEFHRSgwKSwgd2hpY2ggaXMgc3RhdGljYWxseSBhbGxvY2F0ZWQgYW5kIHplcm8taW5pdGlhbGl6ZWQuXFxuLSBJbiBzcGxpY2VfcmVhZF96ZXJvLCBhbGwgbG9jYWwgdmFyaWFibGVzICh0b3RhbCwgcG9zLCB1c2VkLCBucGFnZXMsIG4sIGxlbikgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS5cXG5cXG4yLiBLQVNBTiB2cyBLTVNBTiBBcHBsaWNhYmlsaXR5Olxcbi0gS01TQU4gZGV0ZWN0cyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBhbmQgaW5mby1sZWFrcy4gU2luY2UgYWxsIG1lbW9yeSBzcGxpY2VkIGludG8gdGhlIHBpcGUgaXMgZnJvbSB0aGUgZ2xvYmFsbHkgemVyb2VkIHBhZ2UgYW5kIGFsbCBzdHJ1Y3R1cmVzIGFuZCBsb2NhbCB2YXJpYWJsZXMgYXJlIGZ1bGx5IGluaXRpYWxpemVkLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaGF6YXJkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyBpbnRyb2R1Y2VkLlxcbi0gQW55IHBvdGVudGlhbCBwaXBlIGJvdW5kcywgcmVmZXJlbmNlIGNvdW50aW5nLCBvciBjb25jdXJyZW5jeSBpc3N1ZXMgYXJlIHdpdGhpbiB0aGUgc2NvcGUgb2YgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMuXFxuXFxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZCAoTmVlZHNLTVNBTj1mYWxzZSkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgY29weV9zcGxpY2VfcmVhZCB3aXRoIGEgc3BlY2lhbGl6ZWQgc3BsaWNlX3JlYWRfemVybyBpbXBsZW1lbnRhdGlvbiBmb3IgL2Rldi96ZXJvIGFuZCAvZGV2L2Z1bGwsIG1vdmluZyBzcGxpY2VfemVyb3BhZ2VfaW50b19waXBlIGFuZCB6ZXJvX3BpcGVfYnVmX29wcyBmcm9tIG1tL3NobWVtLmMgaW50byBmcy9zcGxpY2UuYy5cXG5cXG4xLiBNZW1vcnkgSW5pdGlhbGl6YXRpb246XFxuLSBJbiBzcGxpY2VfemVyb3BhZ2VfaW50b19waXBlLCB0aGUgcGlwZSBidWZmZXIgaXMgaW5pdGlhbGl6ZWQgdXNpbmcgYSBkZXNpZ25hdGVkIGluaXRpYWxpemVyIChzdHJ1Y3QgcGlwZV9idWZmZXIpeyAuLi4gfSwgd2hpY2ggemVyb2VzIGFsbCB1bm1lbnRpb25lZCBzdHJ1Y3QgZmllbGRzIChmbGFncywgcHJpdmF0ZSkuXFxuLSBUaGUgcGFnZSByZWZlcmVuY2VkIGlzIFpFUk9fUEFHRSgwKSwgd2hpY2ggaXMgc3RhdGljYWxseSBhbGxvY2F0ZWQgYW5kIHplcm8taW5pdGlhbGl6ZWQuXFxuLSBJbiBzcGxpY2VfcmVhZF96ZXJvLCBhbGwgbG9jYWwgdmFyaWFibGVzICh0b3RhbCwgcG9zLCB1c2VkLCBucGFnZXMsIG4sIGxlbikgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS5cXG5cXG4yLiBLQVNBTiB2cyBLTVNBTiBBcHBsaWNhYmlsaXR5Olxcbi0gS01TQU4gZGV0ZWN0cyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBhbmQgaW5mby1sZWFrcy4gU2luY2UgYWxsIG1lbW9yeSBzcGxpY2VkIGludG8gdGhlIHBpcGUgaXMgZnJvbSB0aGUgZ2xvYmFsbHkgemVyb2VkIHBhZ2UgYW5kIGFsbCBzdHJ1Y3R1cmVzIGFuZCBsb2NhbCB2YXJpYWJsZXMgYXJlIGZ1bGx5IGluaXRpYWxpemVkLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaGF6YXJkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyBpbnRyb2R1Y2VkLlxcbi0gQW55IHBvdGVudGlhbCBwaXBlIGJvdW5kcywgcmVmZXJlbmNlIGNvdW50aW5nLCBvciBjb25jdXJyZW5jeSBpc3N1ZXMgYXJlIHdpdGhpbiB0aGUgc2NvcGUgb2YgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMuXFxuXFxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZCAoTmVlZHNLTVNBTj1mYWxzZSkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowfcxfv[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-29 04:47:59 +0000 UTC FinishedAt: 2026-08-29 05:34:38 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "76671054f9a1ff6abb976583cd8da37650acdc97", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SHMEM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "76671054f9a1ff6abb976583cd8da37650acdc97", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SHMEM" ], "series_id": "2587909f-10e5-46eb-9827-51c7fd3bf5d5" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "splice_zeropage_into_pipe", "splice_read_zero", "shmem_file_splice_read" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDA1OjMyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NITUVNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3BsaWNlX3plcm9wYWdlX2ludG9fcGlwZSYjMzQ7LAogICAgJiMzNDtzcGxpY2VfcmVhZF96ZXJvJiMzNDssCiAgICAmIzM0O3NobWVtX2ZpbGVfc3BsaWNlX3JlYWQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBjb3B5X3NwbGljZV9yZWFkIHdpdGggYSBzcGVjaWFsaXplZCBzcGxpY2VfcmVhZF96ZXJvIGltcGxlbWVudGF0aW9uIGZvciAvZGV2L3plcm8gYW5kIC9kZXYvZnVsbCwgbW92aW5nIHNwbGljZV96ZXJvcGFnZV9pbnRvX3BpcGUgYW5kIHplcm9fcGlwZV9idWZfb3BzIGZyb20gbW0vc2htZW0uYyBpbnRvIGZzL3NwbGljZS5jLlxuXG4xLiBNZW1vcnkgSW5pdGlhbGl6YXRpb246XG4tIEluIHNwbGljZV96ZXJvcGFnZV9pbnRvX3BpcGUsIHRoZSBwaXBlIGJ1ZmZlciBpcyBpbml0aWFsaXplZCB1c2luZyBhIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXIgKHN0cnVjdCBwaXBlX2J1ZmZlcil7IC4uLiB9LCB3aGljaCB6ZXJvZXMgYWxsIHVubWVudGlvbmVkIHN0cnVjdCBmaWVsZHMgKGZsYWdzLCBwcml2YXRlKS5cbi0gVGhlIHBhZ2UgcmVmZXJlbmNlZCBpcyBaRVJPX1BBR0UoMCksIHdoaWNoIGlzIHN0YXRpY2FsbHkgYWxsb2NhdGVkIGFuZCB6ZXJvLWluaXRpYWxpemVkLlxuLSBJbiBzcGxpY2VfcmVhZF96ZXJvLCBhbGwgbG9jYWwgdmFyaWFibGVzICh0b3RhbCwgcG9zLCB1c2VkLCBucGFnZXMsIG4sIGxlbikgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS5cblxuMi4gS0FTQU4gdnMgS01TQU4gQXBwbGljYWJpbGl0eTpcbi0gS01TQU4gZGV0ZWN0cyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBhbmQgaW5mby1sZWFrcy4gU2luY2UgYWxsIG1lbW9yeSBzcGxpY2VkIGludG8gdGhlIHBpcGUgaXMgZnJvbSB0aGUgZ2xvYmFsbHkgemVyb2VkIHBhZ2UgYW5kIGFsbCBzdHJ1Y3R1cmVzIGFuZCBsb2NhbCB2YXJpYWJsZXMgYXJlIGZ1bGx5IGluaXRpYWxpemVkLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaGF6YXJkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyBpbnRyb2R1Y2VkLlxuLSBBbnkgcG90ZW50aWFsIHBpcGUgYm91bmRzLCByZWZlcmVuY2UgY291bnRpbmcsIG9yIGNvbmN1cnJlbmN5IGlzc3VlcyBhcmUgd2l0aGluIHRoZSBzY29wZSBvZiBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2Vycy5cblxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZCAoTmVlZHNLTVNBTj1mYWxzZSkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB6ZXJvIHBhZ2UgcGlwZSBzcGxpY2luZyBsb2dpYyBpbnRvIGNvcmUgZnMvc3BsaWNlLmMgYW5kIHVwZGF0ZXMgL2Rldi96ZXJvIGFuZCAvZGV2L2Z1bGwgdG8gdXNlIHNwbGljZV96ZXJvcGFnZV9pbnRvX3BpcGUgZGlyZWN0bHkgdmlhIHRoZSBuZXcgc3BsaWNlX3JlYWRfemVybyBpbXBsZW1lbnRhdGlvbiBpbnN0ZWFkIG9mIGNvcHlfc3BsaWNlX3JlYWQuIFRoaXMgYWZmZWN0cyBjb3JlIFZGUy9waXBlIG9wZXJhdGlvbnMgYW5kIGNoYXJhY3RlciBkZXZpY2UgaGFuZGxpbmcsIHdoaWNoIGlzIHJlYWRpbHkgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDA1OjMyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNTFmY2U1ZDZmNTM1MmQwMTdmODdiMTMwZjYwNzk4ZTAzYjU2Njc4NFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDI5IDA1OjMyOjUwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9tZW0uYyBiL2RyaXZlcnMvY2hhci9tZW0uY1xuaW5kZXggNjMyNTNkMWRlNWQ3MC4uNmQzZWYzNTliMmQ3YiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvY2hhci9tZW0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9jaGFyL21lbS5jXG5AQCAtNDcxLDYgJiM0Mzs0NzEsMzEgQEAgc3RhdGljIHNzaXplX3QgcmVhZF9pdGVyX3plcm8oc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpXG4gXHRyZXR1cm4gd3JpdHRlbjtcbiB9XG4gXG4mIzQzO3N0YXRpYyBzc2l6ZV90IHNwbGljZV9yZWFkX3plcm8oc3RydWN0IGZpbGUgKmluLCBsb2ZmX3QgKnBwb3MsXG4mIzQzO1x0XHRcdFx0c3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSwgc2l6ZV90IGxlbixcbiYjNDM7XHRcdFx0XHR1bnNpZ25lZCBpbnQgZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRzaXplX3QgdG90YWwgPSAwO1xuJiM0MztcdGxvZmZfdCBwb3MgPSAwO1xuJiM0MztcdHNpemVfdCB1c2VkLCBucGFnZXM7XG4mIzQzO1xuJiM0MztcdHVzZWQgPSBwaXBlX2J1Zl91c2FnZShwaXBlKTtcbiYjNDM7XHRpZiAodXNlZCBcdTAwM2U9IHBpcGUtXHUwMDNlbWF4X3VzYWdlKVxuJiM0MztcdFx0cmV0dXJuIC1FQUdBSU47XG4mIzQzO1x0bnBhZ2VzID0gcGlwZS1cdTAwM2VtYXhfdXNhZ2UgLSB1c2VkO1xuJiM0MztcdGxlbiA9IG1pbl90KHNpemVfdCwgbGVuLCBucGFnZXMgKiBQQUdFX1NJWkUpO1xuJiM0MztcbiYjNDM7XHR3aGlsZSAobGVuKSB7XG4mIzQzO1x0XHRzaXplX3QgbiA9IHNwbGljZV96ZXJvcGFnZV9pbnRvX3BpcGUocGlwZSwgcG9zLCBsZW4pO1xuJiM0MztcbiYjNDM7XHRcdHBvcyAmIzQzOz0gbjtcbiYjNDM7XHRcdHRvdGFsICYjNDM7PSBuO1xuJiM0MztcdFx0bGVuIC09IG47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gdG90YWw7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHNzaXplX3QgcmVhZF96ZXJvKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLFxuIFx0XHRcdCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcbiB7XG5AQCAtNjY5LDcgJiM0Mzs2OTQsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB6ZXJvX2ZvcHMgPSB7XG4gXHQucmVhZF9pdGVyXHQ9IHJlYWRfaXRlcl96ZXJvLFxuIFx0LnJlYWRcdFx0PSByZWFkX3plcm8sXG4gXHQud3JpdGVfaXRlclx0PSB3cml0ZV9pdGVyX3plcm8sXG4tXHQuc3BsaWNlX3JlYWRcdD0gY29weV9zcGxpY2VfcmVhZCxcbiYjNDM7XHQuc3BsaWNlX3JlYWRcdD0gc3BsaWNlX3JlYWRfemVybyxcbiBcdC5zcGxpY2Vfd3JpdGVcdD0gc3BsaWNlX3dyaXRlX3plcm8sXG4gXHQubW1hcF9wcmVwYXJlXHQ9IG1tYXBfemVyb19wcmVwYXJlLFxuIFx0LmdldF91bm1hcHBlZF9hcmVhID0gZ2V0X3VubWFwcGVkX2FyZWFfemVybyxcbkBAIC02ODIsNyAmIzQzOzcwNyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZ1bGxfZm9wcyA9IHtcbiBcdC5sbHNlZWtcdFx0PSBmdWxsX2xzZWVrLFxuIFx0LnJlYWRfaXRlclx0PSByZWFkX2l0ZXJfemVybyxcbiBcdC53cml0ZVx0XHQ9IHdyaXRlX2Z1bGwsXG4tXHQuc3BsaWNlX3JlYWRcdD0gY29weV9zcGxpY2VfcmVhZCxcbiYjNDM7XHQuc3BsaWNlX3JlYWRcdD0gc3BsaWNlX3JlYWRfemVybyxcbiB9O1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWVtZGV2IHtcbmRpZmYgLS1naXQgYS9mcy9zcGxpY2UuYyBiL2ZzL3NwbGljZS5jXG5pbmRleCA5ZDhmNjNlMmZkMWFiLi5iNmVhOThjYzYyZmQ1IDEwMDY0NFxuLS0tIGEvZnMvc3BsaWNlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3NwbGljZS5jXG5AQCAtMzk4LDYgJiM0MzszOTgsNjggQEAgc3NpemVfdCBjb3B5X3NwbGljZV9yZWFkKHN0cnVjdCBmaWxlICppbiwgbG9mZl90ICpwcG9zLFxuIH1cbiBFWFBPUlRfU1lNQk9MKGNvcHlfc3BsaWNlX3JlYWQpO1xuIFxuJiM0MzsvKlxuJiM0MzsgKiBQaXBlIGJ1ZmZlciBvcGVyYXRpb25zIGZvciBzcGxpY2luZyB6ZXJvIHBhZ2VzIGludG8gYSBwaXBlLCB1c2VkIHRvXG4mIzQzOyAqIG9wdGltaXplIHJlYWRzIGZyb20gc3BhcnNlIGhvbGVzIGluIGZpbGVzIGFuZCBmcm9tIHplcm8gZGV2aWNlcyBzdWNoIGFzXG4mIzQzOyAqIC9kZXYvemVybyBhbmQgL2Rldi9mdWxsLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGJvb2wgemVyb19waXBlX2J1Zl9nZXQoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSxcbiYjNDM7XHRcdFx0ICAgICAgc3RydWN0IHBpcGVfYnVmZmVyICpidWYpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgemVyb19waXBlX2J1Zl9yZWxlYXNlKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsXG4mIzQzO1x0XHRcdFx0ICBzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1ZilcbiYjNDM7e1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCB6ZXJvX3BpcGVfYnVmX3RyeV9zdGVhbChzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLFxuJiM0MztcdFx0XHRcdCAgICBzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1ZilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Y29uc3Qgc3RydWN0IHBpcGVfYnVmX29wZXJhdGlvbnMgemVyb19waXBlX2J1Zl9vcHMgPSB7XG4mIzQzO1x0LnJlbGVhc2VcdD0gemVyb19waXBlX2J1Zl9yZWxlYXNlLFxuJiM0MztcdC50cnlfc3RlYWxcdD0gemVyb19waXBlX2J1Zl90cnlfc3RlYWwsXG4mIzQzO1x0LmdldFx0XHQ9IHplcm9fcGlwZV9idWZfZ2V0LFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHNwbGljZV96ZXJvcGFnZV9pbnRvX3BpcGUgLSBzcGxpY2UgYSB6ZXJvIHBhZ2UgaW50byBhIHBpcGVcbiYjNDM7ICogQHBpcGU6IHBpcGUgdG8gc3BsaWNlIGludG9cbiYjNDM7ICogQGZwb3M6IGZpbGUgcG9zaXRpb25cbiYjNDM7ICogQHNpemU6IG51bWJlciBvZiBieXRlcyB0byBzcGxpY2VcbiYjNDM7ICpcbiYjNDM7ICogU3BsaWNlIGF0IG1vc3Qgb25lIHBhZ2Ugb2YgemVyb2VzIGludG8gdGhlIHBpcGUuICBUaGUgemVybyBwYWdlIGlzIG5vdFxuJiM0MzsgKiByZWZjb3VudGVkLCBzbyBAemVyb19waXBlX2J1Zl9vcHMgbXVzdCBiZSB1c2VkIHRvIGF2b2lkIHRha2luZyBhXG4mIzQzOyAqIHJlZmVyZW5jZSBvbiBpdC5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHNwbGljZWQuXG4mIzQzOyAqL1xuJiM0MztzaXplX3Qgc3BsaWNlX3plcm9wYWdlX2ludG9fcGlwZShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLFxuJiM0MztcdFx0XHRcdCBsb2ZmX3QgZnBvcywgc2l6ZV90IHNpemUpXG4mIzQzO3tcbiYjNDM7XHRzaXplX3Qgb2Zmc2V0ID0gZnBvcyBcdTAwMjYgflBBR0VfTUFTSztcbiYjNDM7XG4mIzQzO1x0c2l6ZSA9IG1pbl90KHNpemVfdCwgc2l6ZSwgUEFHRV9TSVpFIC0gb2Zmc2V0KTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFwaXBlX2lzX2Z1bGwocGlwZSkpIHtcbiYjNDM7XHRcdHN0cnVjdCBwaXBlX2J1ZmZlciAqYnVmID0gcGlwZV9oZWFkX2J1ZihwaXBlKTtcbiYjNDM7XG4mIzQzO1x0XHQqYnVmID0gKHN0cnVjdCBwaXBlX2J1ZmZlcikge1xuJiM0MztcdFx0XHQub3BzXHQ9IFx1MDAyNnplcm9fcGlwZV9idWZfb3BzLFxuJiM0MztcdFx0XHQucGFnZVx0PSBaRVJPX1BBR0UoMCksXG4mIzQzO1x0XHRcdC5vZmZzZXRcdD0gb2Zmc2V0LFxuJiM0MztcdFx0XHQubGVuXHQ9IHNpemUsXG4mIzQzO1x0XHR9O1xuJiM0MztcdFx0cGlwZS1cdTAwM2VoZWFkJiM0MzsmIzQzOztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBzaXplO1xuJiM0Mzt9XG4mIzQzO1xuIGNvbnN0IHN0cnVjdCBwaXBlX2J1Zl9vcGVyYXRpb25zIGRlZmF1bHRfcGlwZV9idWZfb3BzID0ge1xuIFx0LnJlbGVhc2VcdD0gZ2VuZXJpY19waXBlX2J1Zl9yZWxlYXNlLFxuIFx0LnRyeV9zdGVhbFx0PSBnZW5lcmljX3BpcGVfYnVmX3RyeV9zdGVhbCxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NwbGljZS5oIGIvaW5jbHVkZS9saW51eC9zcGxpY2UuaFxuaW5kZXggOWRlYzQ4NjFkMDlmNi4uZjFkNGFlZmE0ZWMyYyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc3BsaWNlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc3BsaWNlLmhcbkBAIC0xMDgsNCAmIzQzOzEwOCw3IEBAIGV4dGVybiB2b2lkIHNwbGljZV9zaHJpbmtfc3BkKHN0cnVjdCBzcGxpY2VfcGlwZV9kZXNjICopO1xuIFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgcGlwZV9idWZfb3BlcmF0aW9ucyBwYWdlX2NhY2hlX3BpcGVfYnVmX29wcztcbiBleHRlcm4gY29uc3Qgc3RydWN0IHBpcGVfYnVmX29wZXJhdGlvbnMgZGVmYXVsdF9waXBlX2J1Zl9vcHM7XG4mIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgcGlwZV9idWZfb3BlcmF0aW9ucyB6ZXJvX3BpcGVfYnVmX29wcztcbiYjNDM7c2l6ZV90IHNwbGljZV96ZXJvcGFnZV9pbnRvX3BpcGUoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSwgbG9mZl90IGZwb3MsXG4mIzQzO1x0XHRcdFx0IHNpemVfdCBzaXplKTtcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uY1xuaW5kZXggOTAwMWFhZjNiN2I5NC4uMzlkOGRmZWZiZTlmNSAxMDA2NDRcbi0tLSBhL21tL3NobWVtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3NobWVtLmNcbkBAIC0zNDI3LDUxICYjNDM7MzQyNyw2IEBAIHN0YXRpYyBzc2l6ZV90IHNobWVtX2ZpbGVfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLXN0YXRpYyBib29sIHplcm9fcGlwZV9idWZfZ2V0KHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsXG4tXHRcdFx0ICAgICAgc3RydWN0IHBpcGVfYnVmZmVyICpidWYpXG4te1xuLVx0cmV0dXJuIHRydWU7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIHplcm9fcGlwZV9idWZfcmVsZWFzZShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLFxuLVx0XHRcdFx0ICBzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1Zilcbi17XG4tfVxuLVxuLXN0YXRpYyBib29sIHplcm9fcGlwZV9idWZfdHJ5X3N0ZWFsKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsXG4tXHRcdFx0XHQgICAgc3RydWN0IHBpcGVfYnVmZmVyICpidWYpXG4te1xuLVx0cmV0dXJuIGZhbHNlO1xuLX1cbi1cbi1zdGF0aWMgY29uc3Qgc3RydWN0IHBpcGVfYnVmX29wZXJhdGlvbnMgemVyb19waXBlX2J1Zl9vcHMgPSB7XG4tXHQucmVsZWFzZVx0PSB6ZXJvX3BpcGVfYnVmX3JlbGVhc2UsXG4tXHQudHJ5X3N0ZWFsXHQ9IHplcm9fcGlwZV9idWZfdHJ5X3N0ZWFsLFxuLVx0LmdldFx0XHQ9IHplcm9fcGlwZV9idWZfZ2V0LFxuLX07XG4tXG4tc3RhdGljIHNpemVfdCBzcGxpY2VfemVyb3BhZ2VfaW50b19waXBlKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsXG4tXHRcdFx0XHRcdGxvZmZfdCBmcG9zLCBzaXplX3Qgc2l6ZSlcbi17XG4tXHRzaXplX3Qgb2Zmc2V0ID0gZnBvcyBcdTAwMjYgflBBR0VfTUFTSztcbi1cbi1cdHNpemUgPSBtaW5fdChzaXplX3QsIHNpemUsIFBBR0VfU0laRSAtIG9mZnNldCk7XG4tXG4tXHRpZiAoIXBpcGVfaXNfZnVsbChwaXBlKSkge1xuLVx0XHRzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1ZiA9IHBpcGVfaGVhZF9idWYocGlwZSk7XG4tXG4tXHRcdCpidWYgPSAoc3RydWN0IHBpcGVfYnVmZmVyKSB7XG4tXHRcdFx0Lm9wc1x0PSBcdTAwMjZ6ZXJvX3BpcGVfYnVmX29wcyxcbi1cdFx0XHQucGFnZVx0PSBaRVJPX1BBR0UoMCksXG4tXHRcdFx0Lm9mZnNldFx0PSBvZmZzZXQsXG4tXHRcdFx0Lmxlblx0PSBzaXplLFxuLVx0XHR9O1xuLVx0XHRwaXBlLVx1MDAzZWhlYWQmIzQzOyYjNDM7O1xuLVx0fVxuLVxuLVx0cmV0dXJuIHNpemU7XG4tfVxuLVxuIHN0YXRpYyBzc2l6ZV90IHNobWVtX2ZpbGVfc3BsaWNlX3JlYWQoc3RydWN0IGZpbGUgKmluLCBsb2ZmX3QgKnBwb3MsXG4gXHRcdFx0XHQgICAgICBzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLFxuIFx0XHRcdFx0ICAgICAgc2l6ZV90IGxlbiwgdW5zaWduZWQgaW50IGZsYWdzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDA1OjMyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NITUVNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3BsaWNlX3plcm9wYWdlX2ludG9fcGlwZSYjMzQ7LAogICAgJiMzNDtzcGxpY2VfcmVhZF96ZXJvJiMzNDssCiAgICAmIzM0O3NobWVtX2ZpbGVfc3BsaWNlX3JlYWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHplcm8gcGFnZSBwaXBlIHNwbGljaW5nIGxvZ2ljIGludG8gY29yZSBmcy9zcGxpY2UuYyBhbmQgdXBkYXRlcyAvZGV2L3plcm8gYW5kIC9kZXYvZnVsbCB0byB1c2Ugc3BsaWNlX3plcm9wYWdlX2ludG9fcGlwZSBkaXJlY3RseSB2aWEgdGhlIG5ldyBzcGxpY2VfcmVhZF96ZXJvIGltcGxlbWVudGF0aW9uIGluc3RlYWQgb2YgY29weV9zcGxpY2VfcmVhZC4gVGhpcyBhZmZlY3RzIGNvcmUgVkZTL3BpcGUgb3BlcmF0aW9ucyBhbmQgY2hhcmFjdGVyIGRldmljZSBoYW5kbGluZywgd2hpY2ggaXMgcmVhZGlseSByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1MWZjZTVkNmY1MzUyZDAxN2Y4N2IxMzBmNjA3OThlMDNiNTY2Nzg0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMjkgMDU6MzI6NTAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvbWVtLmMgYi9kcml2ZXJzL2NoYXIvbWVtLmMKaW5kZXggNjMyNTNkMWRlNWQ3MC4uNmQzZWYzNTliMmQ3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL21lbS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvY2hhci9tZW0uYwpAQCAtNDcxLDYgJiM0Mzs0NzEsMzEgQEAgc3RhdGljIHNzaXplX3QgcmVhZF9pdGVyX3plcm8oc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpCiAJcmV0dXJuIHdyaXR0ZW47CiB9CiAKJiM0MztzdGF0aWMgc3NpemVfdCBzcGxpY2VfcmVhZF96ZXJvKHN0cnVjdCBmaWxlICppbiwgbG9mZl90ICpwcG9zLAomIzQzOwkJCQlzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLCBzaXplX3QgbGVuLAomIzQzOwkJCQl1bnNpZ25lZCBpbnQgZmxhZ3MpCiYjNDM7ewomIzQzOwlzaXplX3QgdG90YWwgPSAwOwomIzQzOwlsb2ZmX3QgcG9zID0gMDsKJiM0MzsJc2l6ZV90IHVzZWQsIG5wYWdlczsKJiM0MzsKJiM0MzsJdXNlZCA9IHBpcGVfYnVmX3VzYWdlKHBpcGUpOwomIzQzOwlpZiAodXNlZCAmZ3Q7PSBwaXBlLSZndDttYXhfdXNhZ2UpCiYjNDM7CQlyZXR1cm4gLUVBR0FJTjsKJiM0MzsJbnBhZ2VzID0gcGlwZS0mZ3Q7bWF4X3VzYWdlIC0gdXNlZDsKJiM0MzsJbGVuID0gbWluX3Qoc2l6ZV90LCBsZW4sIG5wYWdlcyAqIFBBR0VfU0laRSk7CiYjNDM7CiYjNDM7CXdoaWxlIChsZW4pIHsKJiM0MzsJCXNpemVfdCBuID0gc3BsaWNlX3plcm9wYWdlX2ludG9fcGlwZShwaXBlLCBwb3MsIGxlbik7CiYjNDM7CiYjNDM7CQlwb3MgJiM0Mzs9IG47CiYjNDM7CQl0b3RhbCAmIzQzOz0gbjsKJiM0MzsJCWxlbiAtPSBuOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiB0b3RhbDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgc3NpemVfdCByZWFkX3plcm8oc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsCiAJCQkgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7CkBAIC02NjksNyAmIzQzOzY5NCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHplcm9fZm9wcyA9IHsKIAkucmVhZF9pdGVyCT0gcmVhZF9pdGVyX3plcm8sCiAJLnJlYWQJCT0gcmVhZF96ZXJvLAogCS53cml0ZV9pdGVyCT0gd3JpdGVfaXRlcl96ZXJvLAotCS5zcGxpY2VfcmVhZAk9IGNvcHlfc3BsaWNlX3JlYWQsCiYjNDM7CS5zcGxpY2VfcmVhZAk9IHNwbGljZV9yZWFkX3plcm8sCiAJLnNwbGljZV93cml0ZQk9IHNwbGljZV93cml0ZV96ZXJvLAogCS5tbWFwX3ByZXBhcmUJPSBtbWFwX3plcm9fcHJlcGFyZSwKIAkuZ2V0X3VubWFwcGVkX2FyZWEgPSBnZXRfdW5tYXBwZWRfYXJlYV96ZXJvLApAQCAtNjgyLDcgJiM0Mzs3MDcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmdWxsX2ZvcHMgPSB7CiAJLmxsc2VlawkJPSBmdWxsX2xzZWVrLAogCS5yZWFkX2l0ZXIJPSByZWFkX2l0ZXJfemVybywKIAkud3JpdGUJCT0gd3JpdGVfZnVsbCwKLQkuc3BsaWNlX3JlYWQJPSBjb3B5X3NwbGljZV9yZWFkLAomIzQzOwkuc3BsaWNlX3JlYWQJPSBzcGxpY2VfcmVhZF96ZXJvLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBtZW1kZXYgewpkaWZmIC0tZ2l0IGEvZnMvc3BsaWNlLmMgYi9mcy9zcGxpY2UuYwppbmRleCA5ZDhmNjNlMmZkMWFiLi5iNmVhOThjYzYyZmQ1IDEwMDY0NAotLS0gYS9mcy9zcGxpY2UuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9zcGxpY2UuYwpAQCAtMzk4LDYgJiM0MzszOTgsNjggQEAgc3NpemVfdCBjb3B5X3NwbGljZV9yZWFkKHN0cnVjdCBmaWxlICppbiwgbG9mZl90ICpwcG9zLAogfQogRVhQT1JUX1NZTUJPTChjb3B5X3NwbGljZV9yZWFkKTsKIAomIzQzOy8qCiYjNDM7ICogUGlwZSBidWZmZXIgb3BlcmF0aW9ucyBmb3Igc3BsaWNpbmcgemVybyBwYWdlcyBpbnRvIGEgcGlwZSwgdXNlZCB0bwomIzQzOyAqIG9wdGltaXplIHJlYWRzIGZyb20gc3BhcnNlIGhvbGVzIGluIGZpbGVzIGFuZCBmcm9tIHplcm8gZGV2aWNlcyBzdWNoIGFzCiYjNDM7ICogL2Rldi96ZXJvIGFuZCAvZGV2L2Z1bGwuCiYjNDM7ICovCiYjNDM7c3RhdGljIGJvb2wgemVyb19waXBlX2J1Zl9nZXQoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSwKJiM0MzsJCQkgICAgICBzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1ZikKJiM0Mzt7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB6ZXJvX3BpcGVfYnVmX3JlbGVhc2Uoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSwKJiM0MzsJCQkJICBzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1ZikKJiM0Mzt7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIHplcm9fcGlwZV9idWZfdHJ5X3N0ZWFsKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsCiYjNDM7CQkJCSAgICBzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1ZikKJiM0Mzt7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiYjNDM7Y29uc3Qgc3RydWN0IHBpcGVfYnVmX29wZXJhdGlvbnMgemVyb19waXBlX2J1Zl9vcHMgPSB7CiYjNDM7CS5yZWxlYXNlCT0gemVyb19waXBlX2J1Zl9yZWxlYXNlLAomIzQzOwkudHJ5X3N0ZWFsCT0gemVyb19waXBlX2J1Zl90cnlfc3RlYWwsCiYjNDM7CS5nZXQJCT0gemVyb19waXBlX2J1Zl9nZXQsCiYjNDM7fTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBzcGxpY2VfemVyb3BhZ2VfaW50b19waXBlIC0gc3BsaWNlIGEgemVybyBwYWdlIGludG8gYSBwaXBlCiYjNDM7ICogQHBpcGU6IHBpcGUgdG8gc3BsaWNlIGludG8KJiM0MzsgKiBAZnBvczogZmlsZSBwb3NpdGlvbgomIzQzOyAqIEBzaXplOiBudW1iZXIgb2YgYnl0ZXMgdG8gc3BsaWNlCiYjNDM7ICoKJiM0MzsgKiBTcGxpY2UgYXQgbW9zdCBvbmUgcGFnZSBvZiB6ZXJvZXMgaW50byB0aGUgcGlwZS4gIFRoZSB6ZXJvIHBhZ2UgaXMgbm90CiYjNDM7ICogcmVmY291bnRlZCwgc28gQHplcm9fcGlwZV9idWZfb3BzIG11c3QgYmUgdXNlZCB0byBhdm9pZCB0YWtpbmcgYQomIzQzOyAqIHJlZmVyZW5jZSBvbiBpdC4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogdGhlIG51bWJlciBvZiBieXRlcyBzcGxpY2VkLgomIzQzOyAqLwomIzQzO3NpemVfdCBzcGxpY2VfemVyb3BhZ2VfaW50b19waXBlKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsCiYjNDM7CQkJCSBsb2ZmX3QgZnBvcywgc2l6ZV90IHNpemUpCiYjNDM7ewomIzQzOwlzaXplX3Qgb2Zmc2V0ID0gZnBvcyAmYW1wOyB+UEFHRV9NQVNLOwomIzQzOwomIzQzOwlzaXplID0gbWluX3Qoc2l6ZV90LCBzaXplLCBQQUdFX1NJWkUgLSBvZmZzZXQpOwomIzQzOwomIzQzOwlpZiAoIXBpcGVfaXNfZnVsbChwaXBlKSkgewomIzQzOwkJc3RydWN0IHBpcGVfYnVmZmVyICpidWYgPSBwaXBlX2hlYWRfYnVmKHBpcGUpOwomIzQzOwomIzQzOwkJKmJ1ZiA9IChzdHJ1Y3QgcGlwZV9idWZmZXIpIHsKJiM0MzsJCQkub3BzCT0gJmFtcDt6ZXJvX3BpcGVfYnVmX29wcywKJiM0MzsJCQkucGFnZQk9IFpFUk9fUEFHRSgwKSwKJiM0MzsJCQkub2Zmc2V0CT0gb2Zmc2V0LAomIzQzOwkJCS5sZW4JPSBzaXplLAomIzQzOwkJfTsKJiM0MzsJCXBpcGUtJmd0O2hlYWQmIzQzOyYjNDM7OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBzaXplOwomIzQzO30KJiM0MzsKIGNvbnN0IHN0cnVjdCBwaXBlX2J1Zl9vcGVyYXRpb25zIGRlZmF1bHRfcGlwZV9idWZfb3BzID0gewogCS5yZWxlYXNlCT0gZ2VuZXJpY19waXBlX2J1Zl9yZWxlYXNlLAogCS50cnlfc3RlYWwJPSBnZW5lcmljX3BpcGVfYnVmX3RyeV9zdGVhbCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3BsaWNlLmggYi9pbmNsdWRlL2xpbnV4L3NwbGljZS5oCmluZGV4IDlkZWM0ODYxZDA5ZjYuLmYxZDRhZWZhNGVjMmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3BsaWNlLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zcGxpY2UuaApAQCAtMTA4LDQgJiM0MzsxMDgsNyBAQCBleHRlcm4gdm9pZCBzcGxpY2Vfc2hyaW5rX3NwZChzdHJ1Y3Qgc3BsaWNlX3BpcGVfZGVzYyAqKTsKIAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBwaXBlX2J1Zl9vcGVyYXRpb25zIHBhZ2VfY2FjaGVfcGlwZV9idWZfb3BzOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBwaXBlX2J1Zl9vcGVyYXRpb25zIGRlZmF1bHRfcGlwZV9idWZfb3BzOwomIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgcGlwZV9idWZfb3BlcmF0aW9ucyB6ZXJvX3BpcGVfYnVmX29wczsKJiM0MztzaXplX3Qgc3BsaWNlX3plcm9wYWdlX2ludG9fcGlwZShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLCBsb2ZmX3QgZnBvcywKJiM0MzsJCQkJIHNpemVfdCBzaXplKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbW0vc2htZW0uYyBiL21tL3NobWVtLmMKaW5kZXggOTAwMWFhZjNiN2I5NC4uMzlkOGRmZWZiZTlmNSAxMDA2NDQKLS0tIGEvbW0vc2htZW0uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zaG1lbS5jCkBAIC0zNDI3LDUxICYjNDM7MzQyNyw2IEBAIHN0YXRpYyBzc2l6ZV90IHNobWVtX2ZpbGVfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSkKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgYm9vbCB6ZXJvX3BpcGVfYnVmX2dldChzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLAotCQkJICAgICAgc3RydWN0IHBpcGVfYnVmZmVyICpidWYpCi17Ci0JcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyB2b2lkIHplcm9fcGlwZV9idWZfcmVsZWFzZShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLAotCQkJCSAgc3RydWN0IHBpcGVfYnVmZmVyICpidWYpCi17Ci19Ci0KLXN0YXRpYyBib29sIHplcm9fcGlwZV9idWZfdHJ5X3N0ZWFsKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsCi0JCQkJICAgIHN0cnVjdCBwaXBlX2J1ZmZlciAqYnVmKQotewotCXJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBwaXBlX2J1Zl9vcGVyYXRpb25zIHplcm9fcGlwZV9idWZfb3BzID0gewotCS5yZWxlYXNlCT0gemVyb19waXBlX2J1Zl9yZWxlYXNlLAotCS50cnlfc3RlYWwJPSB6ZXJvX3BpcGVfYnVmX3RyeV9zdGVhbCwKLQkuZ2V0CQk9IHplcm9fcGlwZV9idWZfZ2V0LAotfTsKLQotc3RhdGljIHNpemVfdCBzcGxpY2VfemVyb3BhZ2VfaW50b19waXBlKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsCi0JCQkJCWxvZmZfdCBmcG9zLCBzaXplX3Qgc2l6ZSkKLXsKLQlzaXplX3Qgb2Zmc2V0ID0gZnBvcyAmYW1wOyB+UEFHRV9NQVNLOwotCi0Jc2l6ZSA9IG1pbl90KHNpemVfdCwgc2l6ZSwgUEFHRV9TSVpFIC0gb2Zmc2V0KTsKLQotCWlmICghcGlwZV9pc19mdWxsKHBpcGUpKSB7Ci0JCXN0cnVjdCBwaXBlX2J1ZmZlciAqYnVmID0gcGlwZV9oZWFkX2J1ZihwaXBlKTsKLQotCQkqYnVmID0gKHN0cnVjdCBwaXBlX2J1ZmZlcikgewotCQkJLm9wcwk9ICZhbXA7emVyb19waXBlX2J1Zl9vcHMsCi0JCQkucGFnZQk9IFpFUk9fUEFHRSgwKSwKLQkJCS5vZmZzZXQJPSBvZmZzZXQsCi0JCQkubGVuCT0gc2l6ZSwKLQkJfTsKLQkJcGlwZS0mZ3Q7aGVhZCYjNDM7JiM0Mzs7Ci0JfQotCi0JcmV0dXJuIHNpemU7Ci19Ci0KIHN0YXRpYyBzc2l6ZV90IHNobWVtX2ZpbGVfc3BsaWNlX3JlYWQoc3RydWN0IGZpbGUgKmluLCBsb2ZmX3QgKnBwb3MsCiAJCQkJICAgICAgc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSwKIAkJCQkgICAgICBzaXplX3QgbGVuLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDA1OjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwNjkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0MjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS2VybmVsIFBhdGNoOiBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIG1vdmluZyBzb21lIGNvZGUg4oCTIGB6ZXJvX3BpcGVfYnVmX29wc2AgYW5kIGBzcGxpY2VfemVyb3BhZ2VfaW50b19waXBlYCDigJMgZnJvbSBgbW0vc2htZW0uY2AgdG8gYGZzL3NwbGljZS5jYCBhbmQgZXhwb3J0aW5nIGl0LiBUaGlzIHNlZW1zIHRvIGJlIGRvbmUgdG8gc3VwcG9ydCB0aGUgbmV3IHVzZSBvZiBgc3BsaWNlX3JlYWRfemVyb2Agd2l0aGluIHRoZSBjaGFyYWN0ZXIgZGV2aWNlIGRyaXZlciwgc3BlY2lmaWNhbGx5IGZvciBgL2Rldi96ZXJvYCBhbmQgYC9kZXYvZnVsbGAuIFRoZXkgbm93IHVzZSBgc3BsaWNlX3JlYWRfemVyb2AgZm9yIHRoZWlyIGAuc3BsaWNlX3JlYWRgIG1ldGhvZCwgd2hpY2ggaXMgcHJldHR5IGludGVyZXN0aW5nLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGFzc2VzcyBpdHMgZnV6emluZyBwb3RlbnRpYWwuIFRoaXMgaW1wYWN0cyBjb3JlIGtlcm5lbCBmdW5jdGlvbmFsaXR5LCBpbnZvbHZpbmcgc3RhbmRhcmQgZGV2aWNlcyBsaWtlIGAvZGV2L3plcm9gLCBgL2Rldi9mdWxsYCwgYW5kIHBpcGVzLiBUaGF0JiMzOTtzIGEgaHVnZSBwb3NpdGl2ZS4gSXQmIzM5O3MgZGVmaW5pdGVseSByZWFjaGFibGUgaW4gYSBzdGFuZGFyZCBRRU1VIHNldHVwOyB0aGVzZSBhcmUgZnVuZGFtZW50YWwgZWxlbWVudHMuIE5vdywgdGhlIGtleSBpcyB3aGV0aGVyIGl0IGludHJvZHVjZXMgYSBmdW5jdGlvbmFsIGNoYW5nZS4gQW5kIHllcywgaXQgZG9lcyEgUHJldmlvdXNseSwgdGhvc2UgZGV2aWNlcyB1c2VkIGBjb3B5X3NwbGljZV9yZWFkYCwgYnV0IG5vdyB0aGV5JiMzOTtyZSB1c2luZyB0aGlzIG5ldyBgc3BsaWNlX3JlYWRfemVyb2AsIHdoaWNoIGRpcmVjdGx5IGluc2VydHMgYFpFUk9fUEFHRWAgaW50byB0aGUgcGlwZSBidWZmZXJzIHRocm91Z2ggYHNwbGljZV96ZXJvcGFnZV9pbnRvX3BpcGVgIGFuZCBgemVyb19waXBlX2J1Zl9vcHNgLiBUaGlzIG1lYW5zIHRoYXQgd2hlbiBhIHVzZXIgc3BsaWNlcyBmcm9tIC9kZXYvemVybyB0byBhIHBpcGUsIG9yIHJlYWRzIGZyb20gYSBwaXBlIGNvbnRhaW5pbmcgYFpFUk9fUEFHRWAgYnVmZmVycywgdGhpcyBuZXcgbG9naWMgZ2V0cyB0cmlnZ2VyZWQuIFRoYXQgbWFrZXMgaXQgcHJpbWUgZm9yIGZ1enppbmcuCgpMZXQmIzM5O3MgcXVpY2tseSBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZDogYHNwbGljZV96ZXJvcGFnZV9pbnRvX3BpcGVgIChub3cgaW4gYGZzL3NwbGljZS5jYCksIGBzcGxpY2VfcmVhZF96ZXJvYCAodGhlIHN0YXRpYyBvbmUgaW4gYGRyaXZlcnMvY2hhci9tZW0uY2ApLCBgemVyb19waXBlX2J1Zl9vcHNgLCBhbmQgYHNobWVtX2ZpbGVfc3BsaWNlX3JlYWRgLiBXZSBoYXZlIHRvIGtlZXAgYW4gZXllIG9uIGhvdyB0aGVzZSBpbnRlcmFjdC4KCk5leHQsIEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIGBkcml2ZXJzL2NoYXIvbWVtLmNgIGFuZCBgZnMvc3BsaWNlLmNgLiBMZXQmIzM5O3MgZ3JlcCBhbmQgcmVhZCB0aGUgcmVsZXZhbnQgZmlsZXMgdG8gbWFrZSBzdXJlIG5vdGhpbmcgaXMgcHJldmVudGluZyB0aGlzIGNvZGUgZnJvbSBiZWluZyBidWlsdCBvciwgbW9yZSBpbXBvcnRhbnRseSwgZW5hYmxlZCBpbiBzdGFuZGFyZCBjb25maWd1cmF0aW9ucy4gSSB3YW50IHRvIGVuc3VyZSBpdCYjMzk7cyBidWlsdC1pbiBhbmQgYWNjZXNzaWJsZSBhcyBpdCB3aWxsIGdyZWF0bHkgaW5jcmVhc2UgbXkgYXR0YWNrIHN1cmZhY2UgaWYgaXQgaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDU6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX0RFVk1FTXxDT05GSUdfREVWUE9SVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvY2hhciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2NoYXIvbWVtLmM9MzI1PXN0YXRpYyBpbnQgbW1hcF9tZW1fcHJlcGFyZShzdHJ1Y3Qgdm1fYXJlYV9kZXNjICpkZXNjKVxuLS1cbmRyaXZlcnMvY2hhci9tZW0uYy0zNjQtXG5kcml2ZXJzL2NoYXIvbWVtLmM6MzY1OiNpZmRlZiBDT05GSUdfREVWUE9SVFxuZHJpdmVycy9jaGFyL21lbS5jLTM2Ni1zdGF0aWMgc3NpemVfdCByZWFkX3BvcnQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXG4tLVxuZHJpdmVycy9jaGFyL21lbS5jPTY3Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBudWxsX2ZvcHMgPSB7XG4tLVxuZHJpdmVycy9jaGFyL21lbS5jLTY4MS1cbmRyaXZlcnMvY2hhci9tZW0uYzo2ODI6I2lmZGVmIENPTkZJR19ERVZQT1JUXG5kcml2ZXJzL2NoYXIvbWVtLmMtNjgzLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBvcnRfZm9wcyA9IHtcbi0tXG5kcml2ZXJzL2NoYXIvbWVtLmM9NzEzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbWVtZGV2IHtcbi0tXG5kcml2ZXJzL2NoYXIvbWVtLmMtNzE4LX0gZGV2bGlzdFtdID0ge1xuZHJpdmVycy9jaGFyL21lbS5jOjcxOTojaWZkZWYgQ09ORklHX0RFVk1FTVxuZHJpdmVycy9jaGFyL21lbS5jLTcyMC1cdFtERVZNRU1fTUlOT1JdID0geyBcJiMzNDttZW1cJiMzNDssIFx1MDAyNm1lbV9mb3BzLCAwLCAwIH0sXG4tLVxuZHJpdmVycy9jaGFyL21lbS5jLTcyMi1cdFszXSA9IHsgXCYjMzQ7bnVsbFwmIzM0OywgXHUwMDI2bnVsbF9mb3BzLCBGTU9ERV9OT1dBSVQsIDA2NjYgfSxcbmRyaXZlcnMvY2hhci9tZW0uYzo3MjM6I2lmZGVmIENPTkZJR19ERVZQT1JUXG5kcml2ZXJzL2NoYXIvbWVtLmMtNzI0LVx0WzRdID0geyBcJiMzNDtwb3J0XCYjMzQ7LCBcdTAwMjZwb3J0X2ZvcHMsIDAsIDAgfSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwNTozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1Mzk4CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqSW52ZXN0aWdhdGluZyB0aGUgQnVpbGQgUHJvY2VzcyBmb3IgYG1lbS5jYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCBleGFjdGx5IGhvdyBgbWVtLmNgIGdldHMgY29tcGlsZWQgaW50byB0aGUga2VybmVsLiBNeSBmaXJzdCBpbnN0aW5jdCwgYW5kIGEgcHJldHR5IHNvbGlkIG9uZSBnaXZlbiB0aGUgdHlwaWNhbCBrZXJuZWwgc3RydWN0dXJlLCBpcyB0byBkaXZlIHJpZ2h0IGludG8gYGRyaXZlcnMvY2hhci9NYWtlZmlsZWAuIFRoYXQmIzM5O3Mgd2hlcmUgSSBleHBlY3QgdGhlIGJ1aWxkIHN5c3RlbSB0byBiZSBvcmNoZXN0cmF0aW5nIHRoaW5ncywgZXNwZWNpYWxseSBzaW5jZSBgbWVtLmNgIGlzLCB3ZWxsLCBpbiB0aGUgYGNoYXJgIGRyaXZlciBzcGFjZS4gVGhpcyBNYWtlZmlsZSBzaG91bGQgY29udGFpbiB0aGUgZGVwZW5kZW5jaWVzLCBjb21waWxhdGlvbiBmbGFncywgYW5kIGxpbmtpbmcgY29tbWFuZHMgbmVjZXNzYXJ5IHRvIHRyYW5zZm9ybSB0aGUgc291cmNlIGNvZGUgaW50byB0aGUgb2JqZWN0IGZpbGUsIGFuZCB1bHRpbWF0ZWx5IGludGVncmF0ZSBpdCBpbnRvIHRoZSBrZXJuZWwgaW1hZ2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgcHJvY2VzcyB0aG9yb3VnaGx5LCBzbyBJIGtub3cgaG93IHRvIGRlYnVnIGl0IG9yIG1vZGlmeSBpdCBsYXRlciBpZiBuZWVkZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDU6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvY2hhciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2NoYXIvTWFrZWZpbGUtNS1cbmRyaXZlcnMvY2hhci9NYWtlZmlsZTo2Om9iai15XHRcdFx0XHQmIzQzOz0gbWVtLm8gcmFuZG9tLm9cbmRyaXZlcnMvY2hhci9NYWtlZmlsZS03LW9iai0kKENPTkZJR19UVFlfUFJJTlRLKVx0JiM0Mzs9IHR0eXByaW50ay5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDU6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTY3MQoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZToKCioqRXhhbWluaW5nIEJ1aWxkIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBzbyBgbWVtLm9gIGlzIGNvbnNpc3RlbnRseSBidWlsdCBhcyBwYXJ0IG9mIHRoZSBgb2JqLXlgIHJ1bGUuIFRoYXQmIzM5O3MgYSBnaXZlbiDigJMgSSYjMzk7dmUgc2VlbiB0aGF0IHBhdHRlcm4gY291bnRsZXNzIHRpbWVzIGluIGtlcm5lbCBtYWtlZmlsZXMuIEJ1dCwgaXQgZ290IG1lIHRoaW5raW5nLCAqaG93IHdpZGVzcHJlYWQgaXMgdGhpcyBwYXR0ZXJuPyogIElzIGl0IGNvbnNpc3RlbnQgYWNyb3NzIHRoZSBib2FyZCwgb3IgYXJlIHRoZXJlIGV4Y2VwdGlvbnM/CgpJJiMzOTttIHNwZWNpZmljYWxseSB0aGlua2luZyBhYm91dCBhIG1vZHVsZSBsaWtlIGBmcy9zcGxpY2UuY2AuIExldCYjMzk7cyB1c2UgaXQgYXMgYSB0ZXN0IGNhc2UuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiBpdCBhZGhlcmVzIHRvIHRoZSBzYW1lIGNvbnN0cnVjdGlvbiBvciBpZiB0aGVyZSBpcyBzb21ldGhpbmcgZWxzZSBhdCBwbGF5LiAgTXkgbmV4dCBtb3ZlIGlzIGNsZWFyLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBgZnMvTWFrZWZpbGVgIHRvIHZlcmlmeSBpZiB0aGlzIGJlaGF2aW9yIGlzIHdoYXQgSSBleHBlY3QgdG8gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwNTozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzcGxpY2VcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvTWFrZWZpbGU9MTA9b2JqLXkgOj1cdG9wZW4ubyByZWFkX3dyaXRlLm8gZmlsZV90YWJsZS5vIHN1cGVyLm8gXFxcbi0tXG5mcy9NYWtlZmlsZS0xNC1cdFx0c2VxX2ZpbGUubyB4YXR0ci5vIGxpYmZzLm8gZnMtd3JpdGViYWNrLm8gXFxcbmZzL01ha2VmaWxlOjE1Olx0XHRwbm9kZS5vIHNwbGljZS5vIHN5bmMubyB1dGltZXMubyBkX3BhdGgubyBcXFxuZnMvTWFrZWZpbGUtMTYtXHRcdHN0YWNrLm8gZnNfc3RydWN0Lm8gc3RhdGZzLm8gZnNfcGluLm8gbnNmcy5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDU6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjA0MwoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgYW4gZXhwZXJ0IGluIHRoaXMgYXJlYToKCioqSW52ZXN0aWdhdGluZyB0aGUgQnVpbGQgUHJvY2VzcyBvZiBgc3BsaWNlLm9gKioKCk9rYXksIHNvIGBzcGxpY2Uub2AgaXMgY29uc2lzdGVudGx5IGluY2x1ZGVkIGluIHRoZSBidWlsZCwgbWFya2VkIHdpdGggYG9iai15YC4gVGhhdCYjMzk7cyBhIGdpdmVuLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2h5Ki4gTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgaG93IGl0JiMzOTtzIGludGVncmF0ZWQgd2l0aCBvdGhlciByZWxhdGVkIHNvdXJjZSBmaWxlcy4gTGV0JiMzOTtzIGxvb2sgYXQgYG1tL3NobWVtLmNgLiBJIGV4cGVjdCB0aGVyZSB0byBiZSBhIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jeS4gTm93LCBsb29raW5nIGF0IGBtbS9NYWtlZmlsZWAsIEkgc2VlIHRoYXQgYHNobWVtLm9gIGluY2x1c2lvbiBkZXBlbmRzIG9uIGBDT05GSUdfU0hNRU1gIChvciBgQ09ORklHX1RNUEZTYCB3aGljaCBvZnRlbiBpbXBsaWVzIGBDT05GSUdfU0hNRU1gKS4gVGhpcyBpcyB3aGVyZSB0aGUgY3J1Y2lhbCBsaW5rIGxpZXMsIHNvIEkgbmVlZCB0byBjaGVjayBob3cgYENPTkZJR19TSE1FTWAgaXMgZGVmaW5lZC4gVGhpcyYjMzk7bGwgcHJvYmFibHkgbGVhZCBtZSB0byBhIC5jb25maWcgZmlsZSBvciBhIEtjb25maWcgZmlsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDU6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2htZW1cXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9NTE9b2JqLXlcdFx0XHQ6PSBmaWxlbWFwLm8gbWVtcG9vbC5vIG9vbV9raWxsLm8gZmFkdmlzZS5vIFxcXG4tLVxubW0vTWFrZWZpbGUtNTMtXHRcdFx0ICAgcmVhZGFoZWFkLm8gc3dhcC5vIHRydW5jYXRlLm8gdm1zY2FuLm8gc2hyaW5rZXIubyBcXFxubW0vTWFrZWZpbGU6NTQ6XHRcdFx0ICAgc2htZW0ubyB1dGlsLm8gbW16b25lLm8gdm1zdGF0Lm8gYmFja2luZy1kZXYubyBcXFxubW0vTWFrZWZpbGUtNTUtXHRcdFx0ICAgbW1faW5pdC5vIHBlcmNwdS5vIHNsYWJfY29tbW9uLm8gXFxcbi0tXG5tbS9zaG1lbS5jPTUyMD1zdGF0aWMgaW50IHNobWVtX2NvbmZpcm1fc3dhcChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCBpbmRleCxcbi0tXG5tbS9zaG1lbS5jLTU2OS0jaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9zaG1lbS5jOjU3MDovKiBpZmRlZiBoZXJlIHRvIGF2b2lkIGJsb2F0aW5nIHNobWVtLm8gd2hlbiBub3QgbmVjZXNzYXJ5ICovXG5tbS9zaG1lbS5jLTU3MS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDU6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjU1OAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkNoZWNraW5nIHRoZSBTSE1FTSBJbXBsZW1lbnRhdGlvbioqCgpBbHJpZ2h0LCBzbyBgc2htZW0ub2AgaXMgY2xlYXJseSBwYXJ0IG9mIHRoZSBidWlsZCBwcm9jZXNzLCBsaXN0ZWQgYXMgYW4gYG9iai15YCB0YXJnZXQgd2l0aGluIHRoZSBgbW0vTWFrZWZpbGVgLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIGl0JiMzOTtzIGJlaW5nIGNvbXBpbGVkIGRpcmVjdGx5IGludG8gdGhlIGtlcm5lbCBpbWFnZSBpZiBjZXJ0YWluIGNvbmRpdGlvbnMgYXJlIG1ldC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0aG9zZSBjb25kaXRpb25zIGFyZS4gVGhlIG1vc3QgbG9naWNhbCBuZXh0IHN0ZXAsIGNvbnNpZGVyaW5nIGl0JiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50IHJlbGF0ZWQsIGlzIHRvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGBDT05GSUdfU0hNRU1gLiBNeSBpbW1lZGlhdGUgYXNzdW1wdGlvbiBpcyB0aGF0IGl0JiMzOTtzIHByb2JhYmx5IGVpdGhlciBkZWZpbmVkIGFuZCB1c2VkIGRpcmVjdGx5IGluIGBtbS9zaG1lbS5jYCBpdHNlbGYsIHdoaWNoIHdvdWxkIGJlIHRoZSBtb3N0IG9idmlvdXMgcGxhY2UgZm9yIHRoZSBjb2RlLCBvciBwZXJoYXBzIG1vcmUgbGlrZWx5LCBpbiBgbW0vTWFrZWZpbGVgIGFsb25nc2lkZSB0aGUgZGVjbGFyYXRpb24gb2YgdGhlIG9iamVjdCBmaWxlcyB0byBjb250cm9sIGl0JiMzOTtzIGJ1aWxkLiBLbm93aW5nIHRoZSBrZXJuZWwmIzM5O3MgYnVpbGQgc3lzdGVtLCBpdCYjMzk7cyBwcm9iYWJseSBkZWNsYXJlZCBhcyBhIG1vZHVsZSBpbiB0aGUgbWFrZWZpbGUuIFRoaXMgd2lsbCBwb2ludCBtZSBkaXJlY3RseSB0byB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlLCBzbyBJIGNhbiBzZWUgd2hhdCBlbmFibGluZyB0aGlzIGZ1bmN0aW9uYWxpdHkgZGVwZW5kcyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDU6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX1NITUVNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYz02MTk9c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmh1Z2VwYWdlX2F0dHJbXSA9IHtcbi0tXG5tbS9odWdlX21lbW9yeS5jLTYyMy1cdFx1MDAyNmhwYWdlX3BtZF9zaXplX2F0dHIuYXR0cixcbm1tL2h1Z2VfbWVtb3J5LmM6NjI0OiNpZmRlZiBDT05GSUdfU0hNRU1cbm1tL2h1Z2VfbWVtb3J5LmMtNjI1LVx0XHUwMDI2c2htZW1fZW5hYmxlZF9hdHRyLmF0dHIsXG4tLVxubW0vaHVnZV9tZW1vcnkuYz03MjA9c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmZpbGVfY3RybF9hdHRyc1tdID0ge1xubW0vaHVnZV9tZW1vcnkuYzo3MjE6I2lmZGVmIENPTkZJR19TSE1FTVxubW0vaHVnZV9tZW1vcnkuYy03MjItXHRcdTAwMjZ0aHBzaXplX3NobWVtX2VuYWJsZWRfYXR0ci5hdHRyLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NzgwPURFRklORV9NVEhQX1NUQVRfQVRUUihzd3BvdXRfZmFsbGJhY2ssIE1USFBfU1RBVF9TV1BPVVRfRkFMTEJBQ0spO1xubW0vaHVnZV9tZW1vcnkuYzo3ODE6I2lmZGVmIENPTkZJR19TSE1FTVxubW0vaHVnZV9tZW1vcnkuYy03ODItREVGSU5FX01USFBfU1RBVF9BVFRSKHNobWVtX2FsbG9jLCBNVEhQX1NUQVRfU0hNRU1fQUxMT0MpO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9Nzk2PXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphbm9uX3N0YXRzX2F0dHJzW10gPSB7XG4tLVxubW0vaHVnZV9tZW1vcnkuYy03OTktXHRcdTAwMjZhbm9uX2ZhdWx0X2ZhbGxiYWNrX2NoYXJnZV9hdHRyLmF0dHIsXG5tbS9odWdlX21lbW9yeS5jOjgwMDojaWZuZGVmIENPTkZJR19TSE1FTVxubW0vaHVnZV9tZW1vcnkuYy04MDEtXHRcdTAwMjZ6c3dwb3V0X2F0dHIuYXR0cixcbi0tXG5tbS9odWdlX21lbW9yeS5jPTgyMj1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZmlsZV9zdGF0c19hdHRyc1tdID0ge1xubW0vaHVnZV9tZW1vcnkuYzo4MjM6I2lmZGVmIENPTkZJR19TSE1FTVxubW0vaHVnZV9tZW1vcnkuYy04MjQtXHRcdTAwMjZzaG1lbV9hbGxvY19hdHRyLmF0dHIsXG4tLVxubW0vaHVnZV9tZW1vcnkuYz04MzY9c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmFueV9zdGF0c19hdHRyc1tdID0ge1xubW0vaHVnZV9tZW1vcnkuYzo4Mzc6I2lmZGVmIENPTkZJR19TSE1FTVxubW0vaHVnZV9tZW1vcnkuYy04MzgtXHRcdTAwMjZ6c3dwb3V0X2F0dHIuYXR0cixcbi0tXG5tbS9zaG1lbS5jPTQ2PXN0YXRpYyBzdHJ1Y3QgdmZzbW91bnQgKnNobV9tbnQgX19yb19hZnRlcl9pbml0O1xubW0vc2htZW0uYy00Ny1cbm1tL3NobWVtLmM6NDg6I2lmZGVmIENPTkZJR19TSE1FTVxubW0vc2htZW0uYy00OS0vKlxuLS1cbm1tL3NobWVtLmM9NTY1Mj1fX3NldHVwKFwmIzM0O3RocF9zaG1lbT1cJiMzNDssIHNldHVwX3RocF9zaG1lbSk7XG4tLVxubW0vc2htZW0uYy01NjU1LVxubW0vc2htZW0uYzo1NjU2OiNlbHNlIC8qICFDT05GSUdfU0hNRU0gKi9cbm1tL3NobWVtLmMtNTY1Ny1cbi0tXG5tbS9zaG1lbS5jPTU3MjU9c3RhdGljIGlubGluZSBzdHJ1Y3QgaW5vZGUgKnNobWVtX2dldF9pbm9kZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi0tXG5tbS9zaG1lbS5jLTU3MzItXG5tbS9zaG1lbS5jOjU3MzM6I2VuZGlmIC8qIENPTkZJR19TSE1FTSAqL1xubW0vc2htZW0uYy01NzM0LVxuLS1cbm1tL3NobWVtLmM9NTg4Nz1zdHJ1Y3QgZm9saW8gKnNobWVtX3JlYWRfZm9saW9fZ2ZwKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbm1tL3NobWVtLmMtNTg4OS17XG5tbS9zaG1lbS5jOjU4OTA6I2lmZGVmIENPTkZJR19TSE1FTVxubW0vc2htZW0uYy01ODkxLVx0c3RydWN0IGlub2RlICppbm9kZSA9IG1hcHBpbmctXHUwMDNlaG9zdDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDU6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzY5MgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDU1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS2VybmVsIENvZGUgZm9yIENvbmZpZ3VyYXRpb24gYW5kIEZ1enppbmcgVGFyZ2V0cyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBGaXJzdCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZSBpbnRyb2R1Y2VzIGFueSBub24tc3RhbmRhcmQga2VybmVsIGNvbmZpZ3VyYXRpb25zLiAgSSBrbm93IGBDT05GSUdfU0hNRU1gIGlzIHByZXR0eSBtdWNoIGEgZ2l2ZW4sIGFuZCBmcm9tIGEgcXVpY2sgc2NhbiwgaXQgbG9va3MgbGlrZSB0aGVyZSBhcmVuJiMzOTt0IGFueSAqc3BlY2lmaWMqIGNvbmZpZyBvcHRpb25zIGJleW9uZCB0aGUgdXN1YWwga2VybmVsIGJ1aWxkIHN0dWZmLiBTbyBJIGNhbiBlaXRoZXIgbGlzdCBgU0hNRU1gIG9yLCBpZiB0aGF0IGZlZWxzIHJlZHVuZGFudCwgYW4gZW1wdHkgbGlzdCB3aWxsIHN1ZmZpY2UuIFRoZSBpbnN0cnVjdGlvbnMgYXJlIGNsZWFyOiBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcywgZG9uJiMzOTt0IGFzc3VtZSBhbnl0aGluZywgYW5kIG1ha2Ugc3VyZSB0byBpbmNsdWRlIGFueSAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBmb3IgcGFyZW50IHN1YnN5c3RlbXMgbmVlZGVkIGZvciBhIHN0YXRpYyBidWlsZC4KCk5vdywgbG9va2luZyBhdCB0aGUgY29kZSwgYGRyaXZlcnMvY2hhci9tZW0uY2AgaGFzIGAvZGV2L3plcm9gIGFuZCBgL2Rldi9mdWxsYCwgd2hpY2ggYXJlIHVuY29uZGl0aW9uYWwuIGBmcy9zcGxpY2UuY2AgaXMgYWxzbyB1bmNvbmRpdGlvbmFsbHkgYnVpbHQsIHBhcnQgb2YgYGZzL01ha2VmaWxlYCBhcyBgb2JqLXlgLiBBbmQsIGFzIGV4cGVjdGVkLCBgbW0vc2htZW0uY2AgaXMgZW5hYmxlZCB2aWEgYENPTkZJR19TSE1FTWAsIGFuZCBJIGNhbiBsaXN0IGBTSE1FTWAuCgpOZXh0LCB0aGUgbW9yZSBpbnRlcmVzdGluZyBiaXQ6IGlkZW50aWZ5aW5nIHBvdGVudGlhbCBmdXp6aW5nIHRhcmdldHMuIFRoZSBnb2FsIGlzIHRvIGZvY3VzIG9uIHNwZWNpZmljLCByZWxldmFudCBmdW5jdGlvbnMsIG5vdCBnZW5lcmljIGhvdC1wYXRoIHJvdXRpbmVzLiBUaGUgcHJlZmVyZW5jZSBpcyBmb3Igbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIOKAkyB0aGV5JiMzOTtyZSB0aGUgb25lcyB3aXRoIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMuCgpTbywgd2hhdCYjMzk7cyBuZXcgb3IgbW9kaWZpZWQ/IFdlbGwsIEkgc2VlOgoKMS4gIGBzcGxpY2VfemVyb3BhZ2VfaW50b19waXBlYCAoZnMvc3BsaWNlLmMpOiBUaGlzIGlzIG5vbi1zdGF0aWMgYW5kIGV4cG9ydGVkIGluIGBpbmNsdWRlL2xpbnV4L3NwbGljZS5oYCwgc28gbG9va3MgZ29vZC4KMi4gIGBzcGxpY2VfcmVhZF96ZXJvYCAoZHJpdmVycy9jaGFyL21lbS5jKTogVGhpcyBpcyBhIHN0YXRpYyBjYWxsYmFjaywgYnV0IGl0JiMzOTtzIHRoZSBuZXcgYGZpbGVfb3BlcmF0aW9uc2AgY2FsbGJhY2sgZm9yIGAvZGV2L3plcm9gIGFuZCBgL2Rldi9mdWxsYCwgc3BlY2lmaWNhbGx5IGAuc3BsaWNlX3JlYWRgLiBXb3J0aCBjb25zaWRlcmluZy4KMy4gIGBzaG1lbV9maWxlX3NwbGljZV9yZWFkYCAobW0vc2htZW0uYyk6IFRoaXMgZnVuY3Rpb24gY2FsbHMgYHNwbGljZV96ZXJvcGFnZV9pbnRvX3BpcGVgLgoKTXkgdGhvdWdodCBpcywgYXJlIHRoZXNlIGFwcHJvcHJpYXRlPyBgc3BsaWNlX3plcm9wYWdlX2ludG9fcGlwZWAgaXMgbm9uLXN0YXRpYywgc28gZ29vZC4gSSB3aWxsIGhhdmUgdG8gbG9vayBhdCBgc2htZW1fZmlsZV9zcGxpY2VfcmVhZGAgbm93IHRvIHNlZSBpZiBpdCBpcyBpbmxpbmVkIG9yIG5vbi1zdGF0aWMgaW4gdGhlIHNvdXJjZS4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgc2htZW1fZmlsZV9zcGxpY2VfcmVhZGAgaW4gYG1tL3NobWVtLmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwNTozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzaG1lbV9maWxlX3NwbGljZV9yZWFkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc2htZW0uYz0zNDA4PXN0YXRpYyBzc2l6ZV90IHNobWVtX2ZpbGVfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbi0tXG5tbS9zaG1lbS5jLTM0MjktXG5tbS9zaG1lbS5jOjM0MzA6c3RhdGljIHNzaXplX3Qgc2htZW1fZmlsZV9zcGxpY2VfcmVhZChzdHJ1Y3QgZmlsZSAqaW4sIGxvZmZfdCAqcHBvcyxcbm1tL3NobWVtLmMtMzQzMS1cdFx0XHRcdCAgICAgIHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsXG4tLVxubW0vc2htZW0uYz01MTAzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNobWVtX2ZpbGVfb3BlcmF0aW9ucyA9IHtcbi0tXG5tbS9zaG1lbS5jLTUxMTEtXHQuZnN5bmNcdFx0PSBub29wX2ZzeW5jLFxubW0vc2htZW0uYzo1MTEyOlx0LnNwbGljZV9yZWFkXHQ9IHNobWVtX2ZpbGVfc3BsaWNlX3JlYWQsXG5tbS9zaG1lbS5jLTUxMTMtXHQuc3BsaWNlX3dyaXRlXHQ9IGl0ZXJfZmlsZV9zcGxpY2Vfd3JpdGUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDA1OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwNTcKCQkJCQkJCW91dHB1dDogMTQzCgkJCQkJCQl0aG91Z2h0czogMjI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFJlY2VudCBDb2RlIENoYW5nZXMqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGludG8gdGhlc2UgY2hhbmdlcywgYW5kIGhlcmUmIzM5O3MgbXkgdGFrZS4gYHNwbGljZV96ZXJvcGFnZV9pbnRvX3BpcGVgIGlzIHVuZGVuaWFibHkgYSBmdW5jdGlvbiBkZWZpbmVkIHdpdGhpbiBgZnMvc3BsaWNlLmNgIOKAkyB0aGF0JiMzOTtzIGNsZWFyLiBTaW1pbGFybHksIGBzcGxpY2VfcmVhZF96ZXJvYCBpcyB0aGUgbmV3IHNwbGljZSByZWFkIGhhbmRsZXIsIHJlc2lkaW5nIGluIGBkcml2ZXJzL2NoYXIvbWVtLmNgLgoKSSBhbHdheXMgZG91YmxlLWNoZWNrIHRoZXNlIHRoaW5ncywgc28gSSB3ZW50IGJhY2sgYW5kIGNvbmZpcm1lZCB0aGF0IGluIGBmcy9zcGxpY2UuY2AsIHdlJiMzOTtyZSBhbHNvIGRlYWxpbmcgd2l0aCB0aGUgYHplcm9fcGlwZV9idWZfb3BzYCBzdHJ1Y3QgYWxvbmdzaWRlIGBzcGxpY2VfemVyb3BhZ2VfaW50b19waXBlYCBmdW5jdGlvbi4gVGhlbiwgaW4gYGRyaXZlcnMvY2hhci9tZW0uY2AsIHdlIHNlZSBgc3BsaWNlX3JlYWRfemVyb2AgKGZ1bmN0aW9uKSwgYW5kIGluIGBtbS9zaG1lbS5jYCwgdGhlcmUmIzM5O3MgYHNobWVtX2ZpbGVfc3BsaWNlX3JlYWRgIChmdW5jdGlvbikuCgpUaGlzIHJlYWxseSBkb2VzIGxvb2sgbGlrZSBhIHdvcnRod2hpbGUgYXJlYSBmb3IgZnV6emluZy4gVGhlIGludGVudCBpcyB0byBmdW5kYW1lbnRhbGx5IGFsdGVyIGhvdyB3ZSBoYW5kbGUgYC9kZXYvemVyb2AgYW5kIGAvZGV2L2Z1bGxgLCBtb3ZpbmcgdG93YXJkcyBkaXJlY3QgemVyby1wYWdlIHNwbGljaW5nIGludG8gcGlwZXMgaW5zdGVhZCBvZiB1c2luZyBgY29weV9zcGxpY2VfcmVhZGAuIEFuZCBjcml0aWNhbGx5LCBpdCYjMzk7cyBtYWtpbmcgYHNwbGljZV96ZXJvcGFnZV9pbnRvX3BpcGVgIG1vcmUgZ2VuZXJhbGl6ZWQsIGFsbG93aW5nIGl0cyB1c2UgYWNyb3NzIGRpZmZlcmVudCBmaWxlc3lzdGVtcyBhbmQgY2hhcmFjdGVyIGRldmljZXMuCgpJIHRoaW5rIGl0JiMzOTtzIHRpbWUgdG8gbGV2ZXJhZ2UgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDA1OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTSE1FTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NwbGljZV96ZXJvcGFnZV9pbnRvX3BpcGUmIzM0OywKICAgICYjMzQ7c3BsaWNlX3JlYWRfemVybyYjMzQ7LAogICAgJiMzNDtzaG1lbV9maWxlX3NwbGljZV9yZWFkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB6ZXJvIHBhZ2UgcGlwZSBzcGxpY2luZyBsb2dpYyBpbnRvIGNvcmUgZnMvc3BsaWNlLmMgYW5kIHVwZGF0ZXMgL2Rldi96ZXJvIGFuZCAvZGV2L2Z1bGwgdG8gdXNlIHNwbGljZV96ZXJvcGFnZV9pbnRvX3BpcGUgZGlyZWN0bHkgdmlhIHRoZSBuZXcgc3BsaWNlX3JlYWRfemVybyBpbXBsZW1lbnRhdGlvbiBpbnN0ZWFkIG9mIGNvcHlfc3BsaWNlX3JlYWQuIFRoaXMgYWZmZWN0cyBjb3JlIFZGUy9waXBlIG9wZXJhdGlvbnMgYW5kIGNoYXJhY3RlciBkZXZpY2UgaGFuZGxpbmcsIHdoaWNoIGlzIHJlYWRpbHkgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTSE1FTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NwbGljZV96ZXJvcGFnZV9pbnRvX3BpcGUmIzM0OywKICAgICYjMzQ7c3BsaWNlX3JlYWRfemVybyYjMzQ7LAogICAgJiMzNDtzaG1lbV9maWxlX3NwbGljZV9yZWFkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB6ZXJvIHBhZ2UgcGlwZSBzcGxpY2luZyBsb2dpYyBpbnRvIGNvcmUgZnMvc3BsaWNlLmMgYW5kIHVwZGF0ZXMgL2Rldi96ZXJvIGFuZCAvZGV2L2Z1bGwgdG8gdXNlIHNwbGljZV96ZXJvcGFnZV9pbnRvX3BpcGUgZGlyZWN0bHkgdmlhIHRoZSBuZXcgc3BsaWNlX3JlYWRfemVybyBpbXBsZW1lbnRhdGlvbiBpbnN0ZWFkIG9mIGNvcHlfc3BsaWNlX3JlYWQuIFRoaXMgYWZmZWN0cyBjb3JlIFZGUy9waXBlIG9wZXJhdGlvbnMgYW5kIGNoYXJhY3RlciBkZXZpY2UgaGFuZGxpbmcsIHdoaWNoIGlzIHJlYWRpbHkgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwNTozMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDA1OjMzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgY29weV9zcGxpY2VfcmVhZCB3aXRoIGEgc3BlY2lhbGl6ZWQgc3BsaWNlX3JlYWRfemVybyBpbXBsZW1lbnRhdGlvbiBmb3IgL2Rldi96ZXJvIGFuZCAvZGV2L2Z1bGwsIG1vdmluZyBzcGxpY2VfemVyb3BhZ2VfaW50b19waXBlIGFuZCB6ZXJvX3BpcGVfYnVmX29wcyBmcm9tIG1tL3NobWVtLmMgaW50byBmcy9zcGxpY2UuYy5cblxuMS4gTWVtb3J5IEluaXRpYWxpemF0aW9uOlxuLSBJbiBzcGxpY2VfemVyb3BhZ2VfaW50b19waXBlLCB0aGUgcGlwZSBidWZmZXIgaXMgaW5pdGlhbGl6ZWQgdXNpbmcgYSBkZXNpZ25hdGVkIGluaXRpYWxpemVyIChzdHJ1Y3QgcGlwZV9idWZmZXIpeyAuLi4gfSwgd2hpY2ggemVyb2VzIGFsbCB1bm1lbnRpb25lZCBzdHJ1Y3QgZmllbGRzIChmbGFncywgcHJpdmF0ZSkuXG4tIFRoZSBwYWdlIHJlZmVyZW5jZWQgaXMgWkVST19QQUdFKDApLCB3aGljaCBpcyBzdGF0aWNhbGx5IGFsbG9jYXRlZCBhbmQgemVyby1pbml0aWFsaXplZC5cbi0gSW4gc3BsaWNlX3JlYWRfemVybywgYWxsIGxvY2FsIHZhcmlhYmxlcyAodG90YWwsIHBvcywgdXNlZCwgbnBhZ2VzLCBuLCBsZW4pIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuXG5cbjIuIEtBU0FOIHZzIEtNU0FOIEFwcGxpY2FiaWxpdHk6XG4tIEtNU0FOIGRldGVjdHMgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgYW5kIGluZm8tbGVha3MuIFNpbmNlIGFsbCBtZW1vcnkgc3BsaWNlZCBpbnRvIHRoZSBwaXBlIGlzIGZyb20gdGhlIGdsb2JhbGx5IHplcm9lZCBwYWdlIGFuZCBhbGwgc3RydWN0dXJlcyBhbmQgbG9jYWwgdmFyaWFibGVzIGFyZSBmdWxseSBpbml0aWFsaXplZCwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhemFyZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgaW50cm9kdWNlZC5cbi0gQW55IHBvdGVudGlhbCBwaXBlIGJvdW5kcywgcmVmZXJlbmNlIGNvdW50aW5nLCBvciBjb25jdXJyZW5jeSBpc3N1ZXMgYXJlIHdpdGhpbiB0aGUgc2NvcGUgb2YgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMuXG5cblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQgKE5lZWRzS01TQU49ZmFsc2UpLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1MWZjZTVkNmY1MzUyZDAxN2Y4N2IxMzBmNjA3OThlMDNiNTY2Nzg0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMjkgMDU6MzI6NTAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvbWVtLmMgYi9kcml2ZXJzL2NoYXIvbWVtLmMKaW5kZXggNjMyNTNkMWRlNWQ3MC4uNmQzZWYzNTliMmQ3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL21lbS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvY2hhci9tZW0uYwpAQCAtNDcxLDYgJiM0Mzs0NzEsMzEgQEAgc3RhdGljIHNzaXplX3QgcmVhZF9pdGVyX3plcm8oc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpCiAJcmV0dXJuIHdyaXR0ZW47CiB9CiAKJiM0MztzdGF0aWMgc3NpemVfdCBzcGxpY2VfcmVhZF96ZXJvKHN0cnVjdCBmaWxlICppbiwgbG9mZl90ICpwcG9zLAomIzQzOwkJCQlzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLCBzaXplX3QgbGVuLAomIzQzOwkJCQl1bnNpZ25lZCBpbnQgZmxhZ3MpCiYjNDM7ewomIzQzOwlzaXplX3QgdG90YWwgPSAwOwomIzQzOwlsb2ZmX3QgcG9zID0gMDsKJiM0MzsJc2l6ZV90IHVzZWQsIG5wYWdlczsKJiM0MzsKJiM0MzsJdXNlZCA9IHBpcGVfYnVmX3VzYWdlKHBpcGUpOwomIzQzOwlpZiAodXNlZCAmZ3Q7PSBwaXBlLSZndDttYXhfdXNhZ2UpCiYjNDM7CQlyZXR1cm4gLUVBR0FJTjsKJiM0MzsJbnBhZ2VzID0gcGlwZS0mZ3Q7bWF4X3VzYWdlIC0gdXNlZDsKJiM0MzsJbGVuID0gbWluX3Qoc2l6ZV90LCBsZW4sIG5wYWdlcyAqIFBBR0VfU0laRSk7CiYjNDM7CiYjNDM7CXdoaWxlIChsZW4pIHsKJiM0MzsJCXNpemVfdCBuID0gc3BsaWNlX3plcm9wYWdlX2ludG9fcGlwZShwaXBlLCBwb3MsIGxlbik7CiYjNDM7CiYjNDM7CQlwb3MgJiM0Mzs9IG47CiYjNDM7CQl0b3RhbCAmIzQzOz0gbjsKJiM0MzsJCWxlbiAtPSBuOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiB0b3RhbDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgc3NpemVfdCByZWFkX3plcm8oc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsCiAJCQkgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7CkBAIC02NjksNyAmIzQzOzY5NCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHplcm9fZm9wcyA9IHsKIAkucmVhZF9pdGVyCT0gcmVhZF9pdGVyX3plcm8sCiAJLnJlYWQJCT0gcmVhZF96ZXJvLAogCS53cml0ZV9pdGVyCT0gd3JpdGVfaXRlcl96ZXJvLAotCS5zcGxpY2VfcmVhZAk9IGNvcHlfc3BsaWNlX3JlYWQsCiYjNDM7CS5zcGxpY2VfcmVhZAk9IHNwbGljZV9yZWFkX3plcm8sCiAJLnNwbGljZV93cml0ZQk9IHNwbGljZV93cml0ZV96ZXJvLAogCS5tbWFwX3ByZXBhcmUJPSBtbWFwX3plcm9fcHJlcGFyZSwKIAkuZ2V0X3VubWFwcGVkX2FyZWEgPSBnZXRfdW5tYXBwZWRfYXJlYV96ZXJvLApAQCAtNjgyLDcgJiM0Mzs3MDcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmdWxsX2ZvcHMgPSB7CiAJLmxsc2VlawkJPSBmdWxsX2xzZWVrLAogCS5yZWFkX2l0ZXIJPSByZWFkX2l0ZXJfemVybywKIAkud3JpdGUJCT0gd3JpdGVfZnVsbCwKLQkuc3BsaWNlX3JlYWQJPSBjb3B5X3NwbGljZV9yZWFkLAomIzQzOwkuc3BsaWNlX3JlYWQJPSBzcGxpY2VfcmVhZF96ZXJvLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBtZW1kZXYgewpkaWZmIC0tZ2l0IGEvZnMvc3BsaWNlLmMgYi9mcy9zcGxpY2UuYwppbmRleCA5ZDhmNjNlMmZkMWFiLi5iNmVhOThjYzYyZmQ1IDEwMDY0NAotLS0gYS9mcy9zcGxpY2UuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9zcGxpY2UuYwpAQCAtMzk4LDYgJiM0MzszOTgsNjggQEAgc3NpemVfdCBjb3B5X3NwbGljZV9yZWFkKHN0cnVjdCBmaWxlICppbiwgbG9mZl90ICpwcG9zLAogfQogRVhQT1JUX1NZTUJPTChjb3B5X3NwbGljZV9yZWFkKTsKIAomIzQzOy8qCiYjNDM7ICogUGlwZSBidWZmZXIgb3BlcmF0aW9ucyBmb3Igc3BsaWNpbmcgemVybyBwYWdlcyBpbnRvIGEgcGlwZSwgdXNlZCB0bwomIzQzOyAqIG9wdGltaXplIHJlYWRzIGZyb20gc3BhcnNlIGhvbGVzIGluIGZpbGVzIGFuZCBmcm9tIHplcm8gZGV2aWNlcyBzdWNoIGFzCiYjNDM7ICogL2Rldi96ZXJvIGFuZCAvZGV2L2Z1bGwuCiYjNDM7ICovCiYjNDM7c3RhdGljIGJvb2wgemVyb19waXBlX2J1Zl9nZXQoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSwKJiM0MzsJCQkgICAgICBzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1ZikKJiM0Mzt7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB6ZXJvX3BpcGVfYnVmX3JlbGVhc2Uoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSwKJiM0MzsJCQkJICBzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1ZikKJiM0Mzt7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIHplcm9fcGlwZV9idWZfdHJ5X3N0ZWFsKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsCiYjNDM7CQkJCSAgICBzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1ZikKJiM0Mzt7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiYjNDM7Y29uc3Qgc3RydWN0IHBpcGVfYnVmX29wZXJhdGlvbnMgemVyb19waXBlX2J1Zl9vcHMgPSB7CiYjNDM7CS5yZWxlYXNlCT0gemVyb19waXBlX2J1Zl9yZWxlYXNlLAomIzQzOwkudHJ5X3N0ZWFsCT0gemVyb19waXBlX2J1Zl90cnlfc3RlYWwsCiYjNDM7CS5nZXQJCT0gemVyb19waXBlX2J1Zl9nZXQsCiYjNDM7fTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBzcGxpY2VfemVyb3BhZ2VfaW50b19waXBlIC0gc3BsaWNlIGEgemVybyBwYWdlIGludG8gYSBwaXBlCiYjNDM7ICogQHBpcGU6IHBpcGUgdG8gc3BsaWNlIGludG8KJiM0MzsgKiBAZnBvczogZmlsZSBwb3NpdGlvbgomIzQzOyAqIEBzaXplOiBudW1iZXIgb2YgYnl0ZXMgdG8gc3BsaWNlCiYjNDM7ICoKJiM0MzsgKiBTcGxpY2UgYXQgbW9zdCBvbmUgcGFnZSBvZiB6ZXJvZXMgaW50byB0aGUgcGlwZS4gIFRoZSB6ZXJvIHBhZ2UgaXMgbm90CiYjNDM7ICogcmVmY291bnRlZCwgc28gQHplcm9fcGlwZV9idWZfb3BzIG11c3QgYmUgdXNlZCB0byBhdm9pZCB0YWtpbmcgYQomIzQzOyAqIHJlZmVyZW5jZSBvbiBpdC4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogdGhlIG51bWJlciBvZiBieXRlcyBzcGxpY2VkLgomIzQzOyAqLwomIzQzO3NpemVfdCBzcGxpY2VfemVyb3BhZ2VfaW50b19waXBlKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsCiYjNDM7CQkJCSBsb2ZmX3QgZnBvcywgc2l6ZV90IHNpemUpCiYjNDM7ewomIzQzOwlzaXplX3Qgb2Zmc2V0ID0gZnBvcyAmYW1wOyB+UEFHRV9NQVNLOwomIzQzOwomIzQzOwlzaXplID0gbWluX3Qoc2l6ZV90LCBzaXplLCBQQUdFX1NJWkUgLSBvZmZzZXQpOwomIzQzOwomIzQzOwlpZiAoIXBpcGVfaXNfZnVsbChwaXBlKSkgewomIzQzOwkJc3RydWN0IHBpcGVfYnVmZmVyICpidWYgPSBwaXBlX2hlYWRfYnVmKHBpcGUpOwomIzQzOwomIzQzOwkJKmJ1ZiA9IChzdHJ1Y3QgcGlwZV9idWZmZXIpIHsKJiM0MzsJCQkub3BzCT0gJmFtcDt6ZXJvX3BpcGVfYnVmX29wcywKJiM0MzsJCQkucGFnZQk9IFpFUk9fUEFHRSgwKSwKJiM0MzsJCQkub2Zmc2V0CT0gb2Zmc2V0LAomIzQzOwkJCS5sZW4JPSBzaXplLAomIzQzOwkJfTsKJiM0MzsJCXBpcGUtJmd0O2hlYWQmIzQzOyYjNDM7OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBzaXplOwomIzQzO30KJiM0MzsKIGNvbnN0IHN0cnVjdCBwaXBlX2J1Zl9vcGVyYXRpb25zIGRlZmF1bHRfcGlwZV9idWZfb3BzID0gewogCS5yZWxlYXNlCT0gZ2VuZXJpY19waXBlX2J1Zl9yZWxlYXNlLAogCS50cnlfc3RlYWwJPSBnZW5lcmljX3BpcGVfYnVmX3RyeV9zdGVhbCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3BsaWNlLmggYi9pbmNsdWRlL2xpbnV4L3NwbGljZS5oCmluZGV4IDlkZWM0ODYxZDA5ZjYuLmYxZDRhZWZhNGVjMmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3BsaWNlLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zcGxpY2UuaApAQCAtMTA4LDQgJiM0MzsxMDgsNyBAQCBleHRlcm4gdm9pZCBzcGxpY2Vfc2hyaW5rX3NwZChzdHJ1Y3Qgc3BsaWNlX3BpcGVfZGVzYyAqKTsKIAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBwaXBlX2J1Zl9vcGVyYXRpb25zIHBhZ2VfY2FjaGVfcGlwZV9idWZfb3BzOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBwaXBlX2J1Zl9vcGVyYXRpb25zIGRlZmF1bHRfcGlwZV9idWZfb3BzOwomIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgcGlwZV9idWZfb3BlcmF0aW9ucyB6ZXJvX3BpcGVfYnVmX29wczsKJiM0MztzaXplX3Qgc3BsaWNlX3plcm9wYWdlX2ludG9fcGlwZShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLCBsb2ZmX3QgZnBvcywKJiM0MzsJCQkJIHNpemVfdCBzaXplKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbW0vc2htZW0uYyBiL21tL3NobWVtLmMKaW5kZXggOTAwMWFhZjNiN2I5NC4uMzlkOGRmZWZiZTlmNSAxMDA2NDQKLS0tIGEvbW0vc2htZW0uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zaG1lbS5jCkBAIC0zNDI3LDUxICYjNDM7MzQyNyw2IEBAIHN0YXRpYyBzc2l6ZV90IHNobWVtX2ZpbGVfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSkKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgYm9vbCB6ZXJvX3BpcGVfYnVmX2dldChzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLAotCQkJICAgICAgc3RydWN0IHBpcGVfYnVmZmVyICpidWYpCi17Ci0JcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyB2b2lkIHplcm9fcGlwZV9idWZfcmVsZWFzZShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLAotCQkJCSAgc3RydWN0IHBpcGVfYnVmZmVyICpidWYpCi17Ci19Ci0KLXN0YXRpYyBib29sIHplcm9fcGlwZV9idWZfdHJ5X3N0ZWFsKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsCi0JCQkJICAgIHN0cnVjdCBwaXBlX2J1ZmZlciAqYnVmKQotewotCXJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBwaXBlX2J1Zl9vcGVyYXRpb25zIHplcm9fcGlwZV9idWZfb3BzID0gewotCS5yZWxlYXNlCT0gemVyb19waXBlX2J1Zl9yZWxlYXNlLAotCS50cnlfc3RlYWwJPSB6ZXJvX3BpcGVfYnVmX3RyeV9zdGVhbCwKLQkuZ2V0CQk9IHplcm9fcGlwZV9idWZfZ2V0LAotfTsKLQotc3RhdGljIHNpemVfdCBzcGxpY2VfemVyb3BhZ2VfaW50b19waXBlKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsCi0JCQkJCWxvZmZfdCBmcG9zLCBzaXplX3Qgc2l6ZSkKLXsKLQlzaXplX3Qgb2Zmc2V0ID0gZnBvcyAmYW1wOyB+UEFHRV9NQVNLOwotCi0Jc2l6ZSA9IG1pbl90KHNpemVfdCwgc2l6ZSwgUEFHRV9TSVpFIC0gb2Zmc2V0KTsKLQotCWlmICghcGlwZV9pc19mdWxsKHBpcGUpKSB7Ci0JCXN0cnVjdCBwaXBlX2J1ZmZlciAqYnVmID0gcGlwZV9oZWFkX2J1ZihwaXBlKTsKLQotCQkqYnVmID0gKHN0cnVjdCBwaXBlX2J1ZmZlcikgewotCQkJLm9wcwk9ICZhbXA7emVyb19waXBlX2J1Zl9vcHMsCi0JCQkucGFnZQk9IFpFUk9fUEFHRSgwKSwKLQkJCS5vZmZzZXQJPSBvZmZzZXQsCi0JCQkubGVuCT0gc2l6ZSwKLQkJfTsKLQkJcGlwZS0mZ3Q7aGVhZCYjNDM7JiM0Mzs7Ci0JfQotCi0JcmV0dXJuIHNpemU7Ci19Ci0KIHN0YXRpYyBzc2l6ZV90IHNobWVtX2ZpbGVfc3BsaWNlX3JlYWQoc3RydWN0IGZpbGUgKmluLCBsb2ZmX3QgKnBwb3MsCiAJCQkJICAgICAgc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSwKIAkJCQkgICAgICBzaXplX3QgbGVuLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwNTozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDY2CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNjcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlZmFjdG9yaW5nIGAvZGV2L3plcm9gIGFuZCBgL2Rldi9mdWxsYCBTcGxpY2UgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBjbGVhbmluZyB1cCBzb21lIGNvZGUsIG1vdmluZyBgc3BsaWNlX3plcm9wYWdlX2ludG9fcGlwZWAgYW5kIGB6ZXJvX3BpcGVfYnVmX29wc2Agb3V0IG9mIGBtbS9zaG1lbS5jYCBhbmQgaW50byBgZnMvc3BsaWNlLmNgLiBUaGF0IG1ha2VzIHNlbnNlOyBpdCYjMzk7cyBtb3JlIGdlbmVyYWwgYW5kIGJlbG9uZ3MgdGhlcmUgc2luY2UgaXQmIzM5O3MgYWJvdXQgdGhlIHNwbGljZSBmdW5jdGlvbmFsaXR5IGl0c2VsZi4gV2UmIzM5O3JlIGFsc28gZXhwb3J0aW5nIHRoZW0gdmlhIGBpbmNsdWRlL2xpbnV4L3NwbGljZS5oYCwgd2hpY2ggaXMgY3J1Y2lhbCBmb3IgbWFraW5nIHRoZW0gYWNjZXNzaWJsZSB0byBgL2Rldi96ZXJvYCBhbmQgYC9kZXYvZnVsbGAuIEFuZCBmaW5hbGx5LCBpbXBsZW1lbnRpbmcgYHNwbGljZV9yZWFkX3plcm9gIHdpdGhpbiBgZHJpdmVycy9jaGFyL21lbS5jYC4gTGV0JiMzOTtzIGRpZyBpbnRvIGhvdyBgc3BsaWNlX3JlYWRfemVyb2AgaXMgaW1wbGVtZW50ZWQuCgpMb29raW5nIGF0IGBzcGxpY2VfcmVhZF96ZXJvYCwgSSBzZWUgdGhlIHVzdWFsIHN1c3BlY3RzOiBjaGVja2luZyBwaXBlIHVzYWdlLCBjYWxjdWxhdGluZyBob3cgbXVjaCB0byByZWFkLCBhbmQgdGhlbiB0aGlzIGBzcGxpY2VfemVyb3BhZ2VfaW50b19waXBlYCBjYWxsIHdpdGhpbiBhIGxvb3AuIFRoZSBsb29wIGxvb2tzIHNvdW5kLCBoYW5kbGluZyBwb3RlbnRpYWwgcGFydGlhbCBwYWdlIHJlYWRzLiBCdXQsIHRoYXQgYHNwbGljZV96ZXJvcGFnZV9pbnRvX3BpcGVgIGZ1bmN0aW9uIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLi4uCgpBaCwgaW4gYHNwbGljZV96ZXJvcGFnZV9pbnRvX3BpcGVgLCBhIHN0cnVjdCBsaXRlcmFsIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgYHBpcGVfYnVmZmVyYDoKYCpidWYgPSAoc3RydWN0IHBpcGVfYnVmZmVyKSB7IC5vcHMgPSAmYW1wO3plcm9fcGlwZV9idWZfb3BzLCAucGFnZSA9IFpFUk9fUEFHRSgwKSwgLm9mZnNldCA9IG9mZnNldCwgLmxlbiA9IHNpemUsIH07YAoKVGhlIGtleSBoZXJlIGlzIHRoYXQgaXQgc2V0cyBgLnBhZ2UgPSBaRVJPX1BBR0UoMClgLiBSaWdodCwgYFpFUk9fUEFHRSgwKWAgaXMgKnRoZSogZ2xvYmFsLCB6ZXJvLWZpbGxlZCBwYWdlLiBUaGlzIGF2b2lkcyBhbnkgYWN0dWFsIG1lbW9yeSBhbGxvY2F0aW9uLiBXZSYjMzk7cmUganVzdCBwb2ludGluZyB0byBhIHByZS1leGlzdGluZyBwYWdlIGZpbGxlZCB3aXRoIHplcm9zLiBUaGF0JiMzOTtzIGEgY2xldmVyIG9wdGltaXphdGlvbiwgYW5kIGl0JiMzOTtzIHdoYXQgbWFrZXMgcmVhZGluZyBmcm9tIGAvZGV2L3plcm9gIGFuZCBgL2Rldi9mdWxsYCBzbyBlZmZpY2llbnQuIEFuZCBzaW5jZSBhIHN0cnVjdCBsaXRlcmFsIGlzIHVzZWQsIGFsbCB1bmFzc2lnbmVkIGZpZWxkcyBhcmUgemVyby1pbml0aWFsaXplZC4gTm93LCBsZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGBzdHJ1Y3QgcGlwZV9idWZmZXJgIGRlZmluaXRpb24ganVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhhdCBhbnkgcG90ZW50aWFsbHkgcmVsZXZhbnQgZmllbGRzIGFyZSBleHBsaWNpdGx5IGhhbmRsZWQgb3IgcHJvcGVybHkgemVyb2VkIGJ5IHRoZSBsaXRlcmFsLiBJIGNhbiYjMzk7dCBiZSB0b28gY2FyZWZ1bC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDU6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IHBpcGVfYnVmZmVyIFxceyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3BpcGVfZnNfaS5oLTI1LSAqKi9cbmluY2x1ZGUvbGludXgvcGlwZV9mc19pLmg6MjY6c3RydWN0IHBpcGVfYnVmZmVyIHtcbmluY2x1ZGUvbGludXgvcGlwZV9mc19pLmgtMjctXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDU6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTI5NAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gUGlwZSBGUyBJbnRlcm5hbHMqKgoKT2theSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBrZXJuZWwmIzM5O3MgcGlwZSBmaWxlc3lzdGVtIG9wZXJhdGVzLiBUaW1lIHRvIGNyYWNrIG9wZW4gdGhlIHNvdXJjZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IGBpbmNsdWRlL2xpbnV4L3BpcGVfZnNfaS5oYCwgc3RhcnRpbmcgYXJvdW5kIGxpbmUgMjYuIFRoYXQmIzM5O3MgdXN1YWxseSB3aGVyZSB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGxpa2VseSBzb21lIGNydWNpYWwgbWFjcm8gZGVmaW5pdGlvbnMgcmVzaWRlIGZvciB0aGVzZSB0eXBlcyBvZiBzdWJzeXN0ZW1zLiBNeSBpbnR1aXRpb24gc2F5cyB0aGF0JiMzOTtzIHdoZXJlIEkgY2FuIHN0YXJ0IHVudGFuZ2xpbmcgdGhlIGludGVyYWN0aW9ucyB3aXRoaW4gdGhlIHBpcGUgZmlsZXN5c3RlbS4gVW5kZXJzdGFuZGluZyB0aGVzZSBsb3ctbGV2ZWwgZGV0YWlscyB3aWxsIGNsYXJpZnkgaG93IHBpcGVzIGFyZSBpbXBsZW1lbnRlZCwgZXNwZWNpYWxseSB0aGUgZGF0YSBzdHJ1Y3R1cmVzIHVzZWQgdG8gbWFuYWdlIHRoZSBidWZmZXJzIGFuZCByZWFkZXIvd3JpdGVyIHN5bmNocm9uaXphdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0IGBwaXBlX2ZzX2kuaGAgcmV2ZWFscyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDU6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3BpcGVfZnNfaS5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAyNTpcdCAqKi9cbiAgMjY6XHRzdHJ1Y3QgcGlwZV9idWZmZXIge1xuICAyNzpcdFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4gIDI4Olx0XHR1bnNpZ25lZCBpbnQgb2Zmc2V0LCBsZW47XG4gIDI5Olx0XHRjb25zdCBzdHJ1Y3QgcGlwZV9idWZfb3BlcmF0aW9ucyAqb3BzO1xuICAzMDpcdFx0dW5zaWduZWQgaW50IGZsYWdzO1xuICAzMTpcdFx0dW5zaWduZWQgbG9uZyBwcml2YXRlO1xuICAzMjpcdH07XG4gIDMzOlx0XG4gIDM0Olx0LypcbiAgMzU6XHQgKiBSZWFsbHkgb25seSBhbHBoYSBuZWVkcyAzMi1iaXQgZmllbGRzLCBidXRcbiAgMzY6XHQgKiBtaWdodCBhcyB3ZWxsIGRvIGl0IGZvciA2NC1iaXQgYXJjaGl0ZWN0dXJlc1xuICAzNzpcdCAqIHNpbmNlIHRoYXQmIzM5O3Mgd2hhdCB3ZSYjMzk7dmUgaGlzdG9yaWNhbGx5IGRvbmUsXG4gIDM4Olx0ICogYW5kIGl0IG1ha2VzICYjMzk7aGVhZF90YWlsJiMzOTsgYWx3YXlzIGJlIGEgc2ltcGxlXG4gIDM5Olx0ICogJiMzOTt1bnNpZ25lZCBsb25nJiMzOTsuXG4gIDQwOlx0ICovXG4gIDQxOlx0I2lmZGVmIENPTkZJR182NEJJVFxuICA0MjpcdHR5cGVkZWYgdW5zaWduZWQgaW50IHBpcGVfaW5kZXhfdDtcbiAgNDM6XHQjZWxzZVxuICA0NDpcdHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgcGlwZV9pbmRleF90O1xuICA0NTpcdCNlbmRpZlxuICA0NjpcdFxuICA0NzpcdC8qKlxuICA0ODpcdCAqXHRzdHJ1Y3QgcGlwZV9pbmRleCAtIHBpcGUgaW5kZWNlc1xuICA0OTpcdCAqXHRAaGVhZDogVGhlIHBvaW50IG9mIGJ1ZmZlciBwcm9kdWN0aW9uXG4gIDUwOlx0ICpcdEB0YWlsOiBUaGUgcG9pbnQgb2YgYnVmZmVyIGNvbnN1bXB0aW9uXG4gIDUxOlx0ICpcdEBoZWFkX3RhaWw6IHVuc2lnbmVkIGxvbmcgdW5pb24gb2YgQGhlYWQgYW5kIEB0YWlsXG4gIDUyOlx0ICovXG4gIDUzOlx0dW5pb24gcGlwZV9pbmRleCB7XG4gIDU0Olx0XHR1bnNpZ25lZCBsb25nIGhlYWRfdGFpbDtcbiAgNTU6XHRcdHN0cnVjdCB7XG4gIDU2Olx0XHRcdHBpcGVfaW5kZXhfdCBoZWFkO1xuICA1NzpcdFx0XHRwaXBlX2luZGV4X3QgdGFpbDtcbiAgNTg6XHRcdH07XG4gIDU5Olx0fTtcbiAgNjA6XHRcbiAgNjE6XHQvKipcbiAgNjI6XHQgKlx0c3RydWN0IHBpcGVfaW5vZGVfaW5mbyAtIGEgbGludXgga2VybmVsIHBpcGVcbiAgNjM6XHQgKlx0QG11dGV4OiBtdXRleCBwcm90ZWN0aW5nIHRoZSB3aG9sZSB0aGluZ1xuICA2NDpcdCAqXHRAcmRfd2FpdDogcmVhZGVyIHdhaXQgcG9pbnQgaW4gY2FzZSBvZiBlbXB0eSBwaXBlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDA1OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwMTQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEaXZpbmcgaW50byBzaG1lbSYjMzk7cyBTcGxpY2UgSW1wbGVtZW50YXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBzaGFyZWQgbWVtb3J5IChzaG1lbSkgdXRpbGl6ZXMgYHNwbGljZV96ZXJvcGFnZV9pbnRvX3BpcGVgIGFuZCBob3cgdGhhdCYjMzk7cyBpbnRlcmFjdGluZyB3aXRoIGBzcGxpY2VfcmVhZF96ZXJvYC4gR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiBrZXJuZWwgaW50ZXJuYWxzLCBJJiMzOTtsbCBuZWVkIGEgc29saWQgZ3JpcCBvbiB0aGUgbG93LWxldmVsIGRldGFpbHMgb2YgaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgaW50ZXJ0d2luZWQuIFNvLCBteSBzdGFydGluZyBwb2ludCBpcyBnb2luZyB0byBiZSBgbW0vc2htZW0uY2AsIHRoYXQmIzM5O3Mgd2hlcmUgYHNobWVtX2ZpbGVfc3BsaWNlX3JlYWRgIHdpbGwgYmUgZGVmaW5lZC4gSXQmIzM5O3MgdGhlIGx5bmNocGluIEkmIzM5O20gYWZ0ZXIsIHRoZSBmdW5jdGlvbiB0aGF0IHJldmVhbHMgdGhlIGludGVycGxheSBiZXR3ZWVuIHNobWVtLCBzcGxpY2luZywgYW5kIHRoZSB6ZXJvLXBhZ2Ugb3B0aW1pemF0aW9uLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIGhvdyB0aGV5JiMzOTtyZSBtYWtpbmcgdGhpcyBtYWdpYyBoYXBwZW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDA1OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vc2htZW0uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM0MjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzQyNTpcdHVubG9jazpcbjM0MjY6XHRcdGlub2RlX3VubG9jayhpbm9kZSk7XG4zNDI3Olx0XHRyZXR1cm4gcmV0O1xuMzQyODpcdH1cbjM0Mjk6XHRcbjM0MzA6XHRzdGF0aWMgc3NpemVfdCBzaG1lbV9maWxlX3NwbGljZV9yZWFkKHN0cnVjdCBmaWxlICppbiwgbG9mZl90ICpwcG9zLFxuMzQzMTpcdFx0XHRcdFx0ICAgICAgc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSxcbjM0MzI6XHRcdFx0XHRcdCAgICAgIHNpemVfdCBsZW4sIHVuc2lnbmVkIGludCBmbGFncylcbjM0MzM6XHR7XG4zNDM0Olx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShpbik7XG4zNDM1Olx0XHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGlub2RlLVx1MDAzZWlfbWFwcGluZztcbjM0MzY6XHRcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBOVUxMO1xuMzQzNzpcdFx0c2l6ZV90IHRvdGFsX3NwbGljZWQgPSAwLCB1c2VkLCBucGFnZXMsIG4sIHBhcnQ7XG4zNDM4Olx0XHRsb2ZmX3QgaXNpemU7XG4zNDM5Olx0XHRpbnQgZXJyb3IgPSAwO1xuMzQ0MDpcdFxuMzQ0MTpcdFx0LyogV29yayBvdXQgaG93IG11Y2ggZGF0YSB3ZSBjYW4gYWN0dWFsbHkgYWRkIGludG8gdGhlIHBpcGUgKi9cbjM0NDI6XHRcdHVzZWQgPSBwaXBlX2J1Zl91c2FnZShwaXBlKTtcbjM0NDM6XHRcdG5wYWdlcyA9IG1heF90KHNzaXplX3QsIHBpcGUtXHUwMDNlbWF4X3VzYWdlIC0gdXNlZCwgMCk7XG4zNDQ0Olx0XHRsZW4gPSBtaW5fdChzaXplX3QsIGxlbiwgbnBhZ2VzICogUEFHRV9TSVpFKTtcbjM0NDU6XHRcbjM0NDY6XHRcdGRvIHtcbjM0NDc6XHRcdFx0Ym9vbCBmYWxsYmFja19wYWdlX3NwbGljZSA9IGZhbHNlO1xuMzQ0ODpcdFx0XHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7XG4zNDQ5Olx0XHRcdHBnb2ZmX3QgaW5kZXg7XG4zNDUwOlx0XHRcdHNpemVfdCBzaXplO1xuMzQ1MTpcdFxuMzQ1MjpcdFx0XHRpZiAoKnBwb3MgXHUwMDNlPSBpX3NpemVfcmVhZChpbm9kZSkpXG4zNDUzOlx0XHRcdFx0YnJlYWs7XG4zNDU0Olx0XG4zNDU1Olx0XHRcdGluZGV4ID0gKnBwb3MgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4zNDU2Olx0XHRcdGVycm9yID0gc2htZW1fZ2V0X2ZvbGlvKGlub2RlLCBpbmRleCwgMCwgXHUwMDI2Zm9saW8sIFNHUF9SRUFEKTtcbjM0NTc6XHRcdFx0aWYgKGVycm9yKSB7XG4zNDU4Olx0XHRcdFx0aWYgKGVycm9yID09IC1FSU5WQUwpXG4zNDU5Olx0XHRcdFx0XHRlcnJvciA9IDA7XG4zNDYwOlx0XHRcdFx0YnJlYWs7XG4zNDYxOlx0XHRcdH1cbjM0NjI6XHRcdFx0aWYgKGZvbGlvKSB7XG4zNDYzOlx0XHRcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbjM0NjQ6XHRcbjM0NjU6XHRcdFx0XHRwYWdlID0gZm9saW9fZmlsZV9wYWdlKGZvbGlvLCBpbmRleCk7XG4zNDY2Olx0XHRcdFx0aWYgKFBhZ2VIV1BvaXNvbihwYWdlKSkge1xuMzQ2NzpcdFx0XHRcdFx0ZXJyb3IgPSAtRUlPO1xuMzQ2ODpcdFx0XHRcdFx0YnJlYWs7XG4zNDY5Olx0XHRcdFx0fVxuMzQ3MDpcdFxuMzQ3MTpcdFx0XHRcdGlmIChmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSBcdTAwMjZcdTAwMjZcbjM0NzI6XHRcdFx0XHQgICAgZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpXG4zNDczOlx0XHRcdFx0XHRmYWxsYmFja19wYWdlX3NwbGljZSA9IHRydWU7XG4zNDc0Olx0XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDU6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzAwNgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBEZWVwZXIgaW50byBgc2htZW1fZmlsZV9zcGxpY2VfcmVhZGAqKgoKQWxyaWdodCwgc28gdGhlIGZvY3VzIGlzIG5vdyBvbiBtZXRpY3Vsb3VzbHkgZXhhbWluaW5nIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgc2htZW1fZmlsZV9zcGxpY2VfcmVhZGAuIFdlJiMzOTt2ZSBhbHJlYWR5IGdvdCBhIGdvb2QgaGFuZGxlIG9uIHNvbWUgYXNwZWN0cywgYnV0IHRoZSBkZXZpbHMgYWx3YXlzIGluIHRoZSBkZXRhaWxzLCBpc24mIzM5O3QgaXQ/IExldCYjMzk7cyBhc3N1bWUgd2UmIzM5O3JlIGFscmVhZHkgZmFtaWxpYXIgd2l0aCBpdHMgY29yZSBmdW5jdGlvbmFsaXR5LiBOb3cgSSB3YW50IHRvIHRob3JvdWdobHkgZGlzc2VjdCB0aGUgZnVuY3Rpb24sIHByb2JhYmx5IHRvIGNhdGNoIHNvbWV0aGluZyBzcGVjaWZpYy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBvdmVybG9va2luZyBhbnkgc3VidGxlIGVkZ2UgY2FzZXMsIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgKGVzcGVjaWFsbHkgd2l0aCBzaGFyZWQgbWVtb3J5IG9wZXJhdGlvbnMpLCBtZW1vcnkgbGVha3MsIG9yIG9ic2N1cmUgb3B0aW1pemF0aW9ucyAob3IgbGFjayB0aGVyZW9mKSB0aGF0IGNvdWxkIGJlIGNhdXNpbmcgYSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrIG9yLCBldmVuIHdvcnNlLCBhIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHNoYXJlZCBtZW1vcnksIHNvIGFueSBzbGlwLXVwIGhlcmUgY291bGQgYmUgY2F0YXN0cm9waGljLiBJIG5lZWQgdG8gbG9vayBmb3IgYW55IHVuaGFuZGxlZCBlcnJvcnMsIGluYWRlcXVhdGUgYnVmZmVyIGhhbmRsaW5nLCBvciBwZXJoYXBzIG92ZXJseSBhZ2dyZXNzaXZlIGxvY2tpbmcgbWVjaGFuaXNtcyB0aGF0IG1pZ2h0IGJlIGNvdW50ZXJwcm9kdWN0aXZlLiBMZXQmIzM5O3Mgc2VlIGlmIHdlJiMzOTtyZSBkb2luZyB0aGUgcmlnaHQgdGhpbmcgZm9yIGRhdGEgYWxpZ25tZW50IGhlcmUuIEkgaGF2ZSBhIGZlZWxpbmcgd2UmIzM5O3JlIG1pc3Npbmcgc29tZXRoaW5nIGFuZCBJJiMzOTttIHJlYWR5IHRvIGZpZ3VyZSBpdCBvdXQuIFRpbWUgdG8gcm9sbCB1cCB0aGUgc2xlZXZlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDU6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9zaG1lbS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzQ3NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszNDc1Olx0XG4zNDc2Olx0XHRcdC8qXG4zNDc3Olx0XHRcdCAqIGlfc2l6ZSBtdXN0IGJlIGNoZWNrZWQgYWZ0ZXIgd2Uga25vdyB0aGUgcGFnZXMgYXJlIFVwdG9kYXRlLlxuMzQ3ODpcdFx0XHQgKlxuMzQ3OTpcdFx0XHQgKiBDaGVja2luZyBpX3NpemUgYWZ0ZXIgdGhlIGNoZWNrIGFsbG93cyB1cyB0byBjYWxjdWxhdGVcbjM0ODA6XHRcdFx0ICogdGhlIGNvcnJlY3QgdmFsdWUgZm9yIFwmIzM0O25yXCYjMzQ7LCB3aGljaCBtZWFucyB0aGUgemVyby1maWxsZWRcbjM0ODE6XHRcdFx0ICogcGFydCBvZiB0aGUgcGFnZSBpcyBub3QgY29waWVkIGJhY2sgdG8gdXNlcnNwYWNlICh1bmxlc3NcbjM0ODI6XHRcdFx0ICogYW5vdGhlciB0cnVuY2F0ZSBleHRlbmRzIHRoZSBmaWxlIC0gdGhpcyBpcyBkZXNpcmVkIHRob3VnaCkuXG4zNDgzOlx0XHRcdCAqL1xuMzQ4NDpcdFx0XHRpc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTtcbjM0ODU6XHRcdFx0aWYgKHVubGlrZWx5KCpwcG9zIFx1MDAzZT0gaXNpemUpKVxuMzQ4NjpcdFx0XHRcdGJyZWFrO1xuMzQ4NzpcdFx0XHQvKlxuMzQ4ODpcdFx0XHQgKiBGYWxsYmFjayB0byBQQUdFX1NJWkUgc3BsaWNlIGlmIHRoZSBsYXJnZSBmb2xpbyBoYXMgaHdwb2lzb25lZFxuMzQ4OTpcdFx0XHQgKiBwYWdlcy5cbjM0OTA6XHRcdFx0ICovXG4zNDkxOlx0XHRcdHNpemUgPSBsZW47XG4zNDkyOlx0XHRcdGlmICh1bmxpa2VseShmYWxsYmFja19wYWdlX3NwbGljZSkpIHtcbjM0OTM6XHRcdFx0XHRzaXplX3Qgb2Zmc2V0ID0gKnBwb3MgXHUwMDI2IH5QQUdFX01BU0s7XG4zNDk0Olx0XG4zNDk1Olx0XHRcdFx0c2l6ZSA9IHVtaW4oc2l6ZSwgUEFHRV9TSVpFIC0gb2Zmc2V0KTtcbjM0OTY6XHRcdFx0fVxuMzQ5NzpcdFx0XHRwYXJ0ID0gbWluX3QobG9mZl90LCBpc2l6ZSAtICpwcG9zLCBzaXplKTtcbjM0OTg6XHRcbjM0OTk6XHRcdFx0aWYgKGZvbGlvKSB7XG4zNTAwOlx0XHRcdFx0LypcbjM1MDE6XHRcdFx0XHQgKiBJZiB1c2VycyBjYW4gYmUgd3JpdGluZyB0byB0aGlzIHBhZ2UgdXNpbmcgYXJiaXRyYXJ5XG4zNTAyOlx0XHRcdFx0ICogdmlydHVhbCBhZGRyZXNzZXMsIHRha2UgY2FyZSBhYm91dCBwb3RlbnRpYWwgYWxpYXNpbmdcbjM1MDM6XHRcdFx0XHQgKiBiZWZvcmUgcmVhZGluZyB0aGUgcGFnZSBvbiB0aGUga2VybmVsIHNpZGUuXG4zNTA0Olx0XHRcdFx0ICovXG4zNTA1Olx0XHRcdFx0aWYgKG1hcHBpbmdfd3JpdGFibHlfbWFwcGVkKG1hcHBpbmcpKSB7XG4zNTA2Olx0XHRcdFx0XHRpZiAobGlrZWx5KCFmYWxsYmFja19wYWdlX3NwbGljZSkpXG4zNTA3Olx0XHRcdFx0XHRcdGZsdXNoX2RjYWNoZV9mb2xpbyhmb2xpbyk7XG4zNTA4Olx0XHRcdFx0XHRlbHNlXG4zNTA5Olx0XHRcdFx0XHRcdGZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpO1xuMzUxMDpcdFx0XHRcdH1cbjM1MTE6XHRcdFx0XHRmb2xpb19tYXJrX2FjY2Vzc2VkKGZvbGlvKTtcbjM1MTI6XHRcdFx0XHQvKlxuMzUxMzpcdFx0XHRcdCAqIE9rLCB3ZSBoYXZlIHRoZSBwYWdlLCBhbmQgaXQmIzM5O3MgdXAtdG8tZGF0ZSwgc28gd2UgY2FuXG4zNTE0Olx0XHRcdFx0ICogbm93IHNwbGljZSBpdCBpbnRvIHRoZSBwaXBlLlxuMzUxNTpcdFx0XHRcdCAqL1xuMzUxNjpcdFx0XHRcdG4gPSBzcGxpY2VfZm9saW9faW50b19waXBlKHBpcGUsIGZvbGlvLCAqcHBvcywgcGFydCk7XG4zNTE3Olx0XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbjM1MTg6XHRcdFx0XHRmb2xpbyA9IE5VTEw7XG4zNTE5Olx0XHRcdH0gZWxzZSB7XG4zNTIwOlx0XHRcdFx0biA9IHNwbGljZV96ZXJvcGFnZV9pbnRvX3BpcGUocGlwZSwgKnBwb3MsIHBhcnQpO1xuMzUyMTpcdFx0XHR9XG4zNTIyOlx0XG4zNTIzOlx0XHRcdGlmICghbilcbjM1MjQ6XHRcdFx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDU6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODAzMwoJCQkJCQkJb3V0cHV0OiAyOTgKCQkJCQkJCXRob3VnaHRzOiA3NjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgVW5pbml0aWFsaXplZCBNZW1vcnkgRXhwb3N1cmUqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoZSBwYXRjaCBtb3ZlcyBgc3BsaWNlX3plcm9wYWdlX2ludG9fcGlwZWAgYW5kIGB6ZXJvX3BpcGVfYnVmX29wc2AgZnJvbSBgbW0vc2htZW0uY2AgdG8gYGZzL3NwbGljZS5jYC4gVGhlbiwgaXQgcmV1c2VzIGBzcGxpY2VfemVyb3BhZ2VfaW50b19waXBlYCB3aXRoaW4gYHNwbGljZV9yZWFkX3plcm9gIHRvIGhhbmRsZSBgL2Rldi96ZXJvYCBhbmQgYC9kZXYvZnVsbGAgaW4gYGRyaXZlcnMvY2hhci9tZW0uY2AsIGVzc2VudGlhbGx5IGNoYW5naW5nIHRoZWlyIGAuc3BsaWNlX3JlYWRgIG1ldGhvZCBmcm9tIGBjb3B5X3NwbGljZV9yZWFkYCB0byBgc3BsaWNlX3JlYWRfemVyb2AuIFNvLCB0aGUgY29yZSBjaGFuZ2UgaXMgcmVkaXJlY3RpbmcgYC9kZXYvemVyb2AgYW5kIGAvZGV2L2Z1bGxgIHRvIGEgbmV3IG9wdGltaXplZCBwYXRoLgoKTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uOiB1bmluaXRpYWxpemVkIG1lbW9yeS4gTGV0JiMzOTtzIGRpZyBpbnRvIGBzcGxpY2VfcmVhZF96ZXJvYC4gSSBzZWUgdGhhdCB0aGUgdmFyaWFibGVzIGB0b3RhbGAsIGBwb3NgLCBgdXNlZGAsIGFuZCBgbnBhZ2VzYCBhcmUgYWxsIHByaW1pdGl2ZSB0eXBlcyBhbmQgaW5pdGlhbGl6ZWQgY29ycmVjdGx5LiBUaGUgY2FsbCB0byBgcGlwZV9idWZfdXNhZ2UocGlwZSlgIGxvb2tzIHN0YW5kYXJkLiBJbiBgcGlwZV96ZXJvcGFnZV9pbnRvX3BpcGUocGlwZSwgcG9zLCBsZW4pYCwgYHBvc2AgaXMgc3RhcnRpbmcgYXQgMCBhbmQgdGhlIGAqYnVmID0gKHN0cnVjdCBwaXBlX2J1ZmZlcikgeyAuLi4gfWAgc3ludGF4IGZvciBpbml0aWFsaXppbmcgYHN0cnVjdCBwaXBlX2J1ZmZlcmAgaXMgc3BvdCBvbiwgZ3VhcmFudGVlaW5nIGFsbCBmaWVsZHMgYXJlIGluaXRpYWxpemVkLCB3aXRoIHRoZSByZXN0IHplcm8taW5pdGlhbGl6ZWQgYnkgdGhlIEMgc3RhbmRhcmQuIGBaRVJPX1BBR0UoMClgIGlzLCBvZiBjb3Vyc2UsIHRoZSBrZXJuZWwmIzM5O3MgemVybyBwYWdlIOKAkyBpdCYjMzk7cyBmdWxseSBpbml0aWFsaXplZCB0byB6ZXJvLiBUaGlzIG1lYW5zIHRoYXQgZGF0YSBjb21pbmcgb3V0IG9mIHRoaXMgY29kZSBwYXRoIHdpbGwgKmFsd2F5cyogYmUgemVyb2VkLgoKU28sIGRvZXMgdGhpcyBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBOby4gVGhlIGBaRVJPX1BBR0UoMClgIGlzIGFsbCB6ZXJvZXMuIFRoZSBgcGlwZV9idWZmZXJgIHN0cnVjdCBpcyBwcm9wZXJseSBpbml0aWFsaXplZCB1c2luZyBDOTkgc3ludGF4LCB3aGljaCBpbmNsdWRlcyB6ZXJvaW5nIGFueSByZW1haW5pbmcgZmllbGRzLiBObyBrZXJuZWwgc3RhY2sgb3IgaGVhcCBtZW1vcnkgaXMgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3IgdXNlZCBpbiBjb25kaXRpb25hbCBsb2dpYy4gVGhlIHZhcmlhYmxlcyBgcG9zYCwgYHRvdGFsYCwgYGxlbmAsIGB1c2VkYCwgYG5wYWdlc2AgYXJlIGFsbCBpbml0aWFsaXplZCBhbmQgY29ycmVjdGx5IGNhbGN1bGF0ZWQuCgpOb3csIHJlZ2FyZGluZyBLTVNBTi1zcGVjaWZpYyBjb25jZXJucy4gRG9lcyB0aGlzIGludm9sdmUga2VybmVsIHN0cnVjdHVyZXMgYmVpbmcgc2VudCB0byB1c2Vyc3BhY2Ugd2l0aCBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGZpZWxkcz8gTm8sIHRoZSB1c2VyIHJlYWRzIG9ubHkgemVyb2VzIGZyb20gYFpFUk9fUEFHRSgwKWAuIElzIHRoZXJlIGNvbmRpdGlvbmFsIGxvZ2ljIHJlbHlpbmcgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IE5vcGUsIGFsbCB0aGUgdmFyaWFibGVzIHdpdGhpbiBgc3BsaWNlX3JlYWRfemVyb2AgYXJlIGluaXRpYWxpemVkIGFuZCBkZXRlcm1pbmVkIGJhc2VkIG9uIHRoZSBjb2RlLiBBcmUgdGhlcmUgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcyB0aGF0IGNvdWxkIGJlIHJlYWQgbGF0ZXI/IEFnYWluLCBuby4gVGhlIGBzdHJ1Y3QgcGlwZV9idWZmZXJgIGlzIHplcm9lZC4gRG9lcyB0aGlzIHBsYXkgd2l0aCBib3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBkYXRhIGluIHN1cnJvdW5kaW5nIGJ1ZmZlcnM/IE5vdCBhdCBhbGwuIFRoZSBkYXRhIGFsd2F5cyBjb21lcyBmcm9tIHRoZSBnbG9iYWwgemVybyBwYWdlLgoKU28sIEkmIzM5O20gY29uZmlkZW50IGluIHNheWluZyB0aGF0IHRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gQW55IGJ1Z3MgcmVsYXRlZCB0byBwaXBlIGJ1ZmZlcnMsIHBhZ2UgcmVmY291bnRpbmcsIG9yIHNwbGljZSBsb2NraW5nIHdvdWxkIGJlIGhhbmRsZWQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgY2hlY2tzLiBEZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpc24mIzM5O3QgbmVjZXNzYXJ5IGhlcmUuIE5vdywgdGltZSB0byBmb3JtdWxhdGUgdGhlIHJlc3BvbnNlIGFuZCBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDA1OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIGNvcHlfc3BsaWNlX3JlYWQgd2l0aCBhIHNwZWNpYWxpemVkIHNwbGljZV9yZWFkX3plcm8gaW1wbGVtZW50YXRpb24gZm9yIC9kZXYvemVybyBhbmQgL2Rldi9mdWxsLCBtb3Zpbmcgc3BsaWNlX3plcm9wYWdlX2ludG9fcGlwZSBhbmQgemVyb19waXBlX2J1Zl9vcHMgZnJvbSBtbS9zaG1lbS5jIGludG8gZnMvc3BsaWNlLmMuXG5cbjEuIE1lbW9yeSBJbml0aWFsaXphdGlvbjpcbi0gSW4gc3BsaWNlX3plcm9wYWdlX2ludG9fcGlwZSwgdGhlIHBpcGUgYnVmZmVyIGlzIGluaXRpYWxpemVkIHVzaW5nIGEgZGVzaWduYXRlZCBpbml0aWFsaXplciAoc3RydWN0IHBpcGVfYnVmZmVyKXsgLi4uIH0sIHdoaWNoIHplcm9lcyBhbGwgdW5tZW50aW9uZWQgc3RydWN0IGZpZWxkcyAoZmxhZ3MsIHByaXZhdGUpLlxuLSBUaGUgcGFnZSByZWZlcmVuY2VkIGlzIFpFUk9fUEFHRSgwKSwgd2hpY2ggaXMgc3RhdGljYWxseSBhbGxvY2F0ZWQgYW5kIHplcm8taW5pdGlhbGl6ZWQuXG4tIEluIHNwbGljZV9yZWFkX3plcm8sIGFsbCBsb2NhbCB2YXJpYWJsZXMgKHRvdGFsLCBwb3MsIHVzZWQsIG5wYWdlcywgbiwgbGVuKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLlxuXG4yLiBLQVNBTiB2cyBLTVNBTiBBcHBsaWNhYmlsaXR5OlxuLSBLTVNBTiBkZXRlY3RzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGFuZCBpbmZvLWxlYWtzLiBTaW5jZSBhbGwgbWVtb3J5IHNwbGljZWQgaW50byB0aGUgcGlwZSBpcyBmcm9tIHRoZSBnbG9iYWxseSB6ZXJvZWQgcGFnZSBhbmQgYWxsIHN0cnVjdHVyZXMgYW5kIGxvY2FsIHZhcmlhYmxlcyBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBoYXphcmRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIGludHJvZHVjZWQuXG4tIEFueSBwb3RlbnRpYWwgcGlwZSBib3VuZHMsIHJlZmVyZW5jZSBjb3VudGluZywgb3IgY29uY3VycmVuY3kgaXNzdWVzIGFyZSB3aXRoaW4gdGhlIHNjb3BlIG9mIEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnZXJzLlxuXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkIChOZWVkc0tNU0FOPWZhbHNlKS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIGNvcHlfc3BsaWNlX3JlYWQgd2l0aCBhIHNwZWNpYWxpemVkIHNwbGljZV9yZWFkX3plcm8gaW1wbGVtZW50YXRpb24gZm9yIC9kZXYvemVybyBhbmQgL2Rldi9mdWxsLCBtb3Zpbmcgc3BsaWNlX3plcm9wYWdlX2ludG9fcGlwZSBhbmQgemVyb19waXBlX2J1Zl9vcHMgZnJvbSBtbS9zaG1lbS5jIGludG8gZnMvc3BsaWNlLmMuXG5cbjEuIE1lbW9yeSBJbml0aWFsaXphdGlvbjpcbi0gSW4gc3BsaWNlX3plcm9wYWdlX2ludG9fcGlwZSwgdGhlIHBpcGUgYnVmZmVyIGlzIGluaXRpYWxpemVkIHVzaW5nIGEgZGVzaWduYXRlZCBpbml0aWFsaXplciAoc3RydWN0IHBpcGVfYnVmZmVyKXsgLi4uIH0sIHdoaWNoIHplcm9lcyBhbGwgdW5tZW50aW9uZWQgc3RydWN0IGZpZWxkcyAoZmxhZ3MsIHByaXZhdGUpLlxuLSBUaGUgcGFnZSByZWZlcmVuY2VkIGlzIFpFUk9fUEFHRSgwKSwgd2hpY2ggaXMgc3RhdGljYWxseSBhbGxvY2F0ZWQgYW5kIHplcm8taW5pdGlhbGl6ZWQuXG4tIEluIHNwbGljZV9yZWFkX3plcm8sIGFsbCBsb2NhbCB2YXJpYWJsZXMgKHRvdGFsLCBwb3MsIHVzZWQsIG5wYWdlcywgbiwgbGVuKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLlxuXG4yLiBLQVNBTiB2cyBLTVNBTiBBcHBsaWNhYmlsaXR5OlxuLSBLTVNBTiBkZXRlY3RzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGFuZCBpbmZvLWxlYWtzLiBTaW5jZSBhbGwgbWVtb3J5IHNwbGljZWQgaW50byB0aGUgcGlwZSBpcyBmcm9tIHRoZSBnbG9iYWxseSB6ZXJvZWQgcGFnZSBhbmQgYWxsIHN0cnVjdHVyZXMgYW5kIGxvY2FsIHZhcmlhYmxlcyBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBoYXphcmRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIGludHJvZHVjZWQuXG4tIEFueSBwb3RlbnRpYWwgcGlwZSBib3VuZHMsIHJlZmVyZW5jZSBjb3VudGluZywgb3IgY29uY3VycmVuY3kgaXNzdWVzIGFyZSB3aXRoaW4gdGhlIHNjb3BlIG9mIEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnZXJzLlxuXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkIChOZWVkc0tNU0FOPWZhbHNlKS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDU6MzI6NTIuNDMyOTcyMDU5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA0MjQ5ODEwODY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNITUVNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3BsaWNlX3plcm9wYWdlX2ludG9fcGlwZVwiLFxuICAgIFwic3BsaWNlX3JlYWRfemVyb1wiLFxuICAgIFwic2htZW1fZmlsZV9zcGxpY2VfcmVhZFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgY29weV9zcGxpY2VfcmVhZCB3aXRoIGEgc3BlY2lhbGl6ZWQgc3BsaWNlX3JlYWRfemVybyBpbXBsZW1lbnRhdGlvbiBmb3IgL2Rldi96ZXJvIGFuZCAvZGV2L2Z1bGwsIG1vdmluZyBzcGxpY2VfemVyb3BhZ2VfaW50b19waXBlIGFuZCB6ZXJvX3BpcGVfYnVmX29wcyBmcm9tIG1tL3NobWVtLmMgaW50byBmcy9zcGxpY2UuYy5cXG5cXG4xLiBNZW1vcnkgSW5pdGlhbGl6YXRpb246XFxuLSBJbiBzcGxpY2VfemVyb3BhZ2VfaW50b19waXBlLCB0aGUgcGlwZSBidWZmZXIgaXMgaW5pdGlhbGl6ZWQgdXNpbmcgYSBkZXNpZ25hdGVkIGluaXRpYWxpemVyIChzdHJ1Y3QgcGlwZV9idWZmZXIpeyAuLi4gfSwgd2hpY2ggemVyb2VzIGFsbCB1bm1lbnRpb25lZCBzdHJ1Y3QgZmllbGRzIChmbGFncywgcHJpdmF0ZSkuXFxuLSBUaGUgcGFnZSByZWZlcmVuY2VkIGlzIFpFUk9fUEFHRSgwKSwgd2hpY2ggaXMgc3RhdGljYWxseSBhbGxvY2F0ZWQgYW5kIHplcm8taW5pdGlhbGl6ZWQuXFxuLSBJbiBzcGxpY2VfcmVhZF96ZXJvLCBhbGwgbG9jYWwgdmFyaWFibGVzICh0b3RhbCwgcG9zLCB1c2VkLCBucGFnZXMsIG4sIGxlbikgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS5cXG5cXG4yLiBLQVNBTiB2cyBLTVNBTiBBcHBsaWNhYmlsaXR5Olxcbi0gS01TQU4gZGV0ZWN0cyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBhbmQgaW5mby1sZWFrcy4gU2luY2UgYWxsIG1lbW9yeSBzcGxpY2VkIGludG8gdGhlIHBpcGUgaXMgZnJvbSB0aGUgZ2xvYmFsbHkgemVyb2VkIHBhZ2UgYW5kIGFsbCBzdHJ1Y3R1cmVzIGFuZCBsb2NhbCB2YXJpYWJsZXMgYXJlIGZ1bGx5IGluaXRpYWxpemVkLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaGF6YXJkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyBpbnRyb2R1Y2VkLlxcbi0gQW55IHBvdGVudGlhbCBwaXBlIGJvdW5kcywgcmVmZXJlbmNlIGNvdW50aW5nLCBvciBjb25jdXJyZW5jeSBpc3N1ZXMgYXJlIHdpdGhpbiB0aGUgc2NvcGUgb2YgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMuXFxuXFxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZCAoTmVlZHNLTVNBTj1mYWxzZSkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHplcm8gcGFnZSBwaXBlIHNwbGljaW5nIGxvZ2ljIGludG8gY29yZSBmcy9zcGxpY2UuYyBhbmQgdXBkYXRlcyAvZGV2L3plcm8gYW5kIC9kZXYvZnVsbCB0byB1c2Ugc3BsaWNlX3plcm9wYWdlX2ludG9fcGlwZSBkaXJlY3RseSB2aWEgdGhlIG5ldyBzcGxpY2VfcmVhZF96ZXJvIGltcGxlbWVudGF0aW9uIGluc3RlYWQgb2YgY29weV9zcGxpY2VfcmVhZC4gVGhpcyBhZmZlY3RzIGNvcmUgVkZTL3BpcGUgb3BlcmF0aW9ucyBhbmQgY2hhcmFjdGVyIGRldmljZSBoYW5kbGluZywgd2hpY2ggaXMgcmVhZGlseSByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDA1OjMyOjUyLjQzMjk3NjEwOVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM2NTIyMTYwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDUxZmNlNWQ2ZjUzNTJkMDE3Zjg3YjEzMGY2MDc5OGUwM2I1NjY3ODRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBBdWcgMjkgMDU6MzI6NTAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL21lbS5jIGIvZHJpdmVycy9jaGFyL21lbS5jXFxuaW5kZXggNjMyNTNkMWRlNWQ3MC4uNmQzZWYzNTliMmQ3YiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2NoYXIvbWVtLmNcXG4rKysgYi9kcml2ZXJzL2NoYXIvbWVtLmNcXG5AQCAtNDcxLDYgKzQ3MSwzMSBAQCBzdGF0aWMgc3NpemVfdCByZWFkX2l0ZXJfemVybyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcilcXG4gXFx0cmV0dXJuIHdyaXR0ZW47XFxuIH1cXG4gXFxuK3N0YXRpYyBzc2l6ZV90IHNwbGljZV9yZWFkX3plcm8oc3RydWN0IGZpbGUgKmluLCBsb2ZmX3QgKnBwb3MsXFxuK1xcdFxcdFxcdFxcdHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsIHNpemVfdCBsZW4sXFxuK1xcdFxcdFxcdFxcdHVuc2lnbmVkIGludCBmbGFncylcXG4re1xcbitcXHRzaXplX3QgdG90YWwgPSAwO1xcbitcXHRsb2ZmX3QgcG9zID0gMDtcXG4rXFx0c2l6ZV90IHVzZWQsIG5wYWdlcztcXG4rXFxuK1xcdHVzZWQgPSBwaXBlX2J1Zl91c2FnZShwaXBlKTtcXG4rXFx0aWYgKHVzZWQgXFx1MDAzZT0gcGlwZS1cXHUwMDNlbWF4X3VzYWdlKVxcbitcXHRcXHRyZXR1cm4gLUVBR0FJTjtcXG4rXFx0bnBhZ2VzID0gcGlwZS1cXHUwMDNlbWF4X3VzYWdlIC0gdXNlZDtcXG4rXFx0bGVuID0gbWluX3Qoc2l6ZV90LCBsZW4sIG5wYWdlcyAqIFBBR0VfU0laRSk7XFxuK1xcbitcXHR3aGlsZSAobGVuKSB7XFxuK1xcdFxcdHNpemVfdCBuID0gc3BsaWNlX3plcm9wYWdlX2ludG9fcGlwZShwaXBlLCBwb3MsIGxlbik7XFxuK1xcbitcXHRcXHRwb3MgKz0gbjtcXG4rXFx0XFx0dG90YWwgKz0gbjtcXG4rXFx0XFx0bGVuIC09IG47XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiB0b3RhbDtcXG4rfVxcbitcXG4gc3RhdGljIHNzaXplX3QgcmVhZF96ZXJvKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLFxcbiBcXHRcXHRcXHQgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXFxuIHtcXG5AQCAtNjY5LDcgKzY5NCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHplcm9fZm9wcyA9IHtcXG4gXFx0LnJlYWRfaXRlclxcdD0gcmVhZF9pdGVyX3plcm8sXFxuIFxcdC5yZWFkXFx0XFx0PSByZWFkX3plcm8sXFxuIFxcdC53cml0ZV9pdGVyXFx0PSB3cml0ZV9pdGVyX3plcm8sXFxuLVxcdC5zcGxpY2VfcmVhZFxcdD0gY29weV9zcGxpY2VfcmVhZCxcXG4rXFx0LnNwbGljZV9yZWFkXFx0PSBzcGxpY2VfcmVhZF96ZXJvLFxcbiBcXHQuc3BsaWNlX3dyaXRlXFx0PSBzcGxpY2Vfd3JpdGVfemVybyxcXG4gXFx0Lm1tYXBfcHJlcGFyZVxcdD0gbW1hcF96ZXJvX3ByZXBhcmUsXFxuIFxcdC5nZXRfdW5tYXBwZWRfYXJlYSA9IGdldF91bm1hcHBlZF9hcmVhX3plcm8sXFxuQEAgLTY4Miw3ICs3MDcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmdWxsX2ZvcHMgPSB7XFxuIFxcdC5sbHNlZWtcXHRcXHQ9IGZ1bGxfbHNlZWssXFxuIFxcdC5yZWFkX2l0ZXJcXHQ9IHJlYWRfaXRlcl96ZXJvLFxcbiBcXHQud3JpdGVcXHRcXHQ9IHdyaXRlX2Z1bGwsXFxuLVxcdC5zcGxpY2VfcmVhZFxcdD0gY29weV9zcGxpY2VfcmVhZCxcXG4rXFx0LnNwbGljZV9yZWFkXFx0PSBzcGxpY2VfcmVhZF96ZXJvLFxcbiB9O1xcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBtZW1kZXYge1xcbmRpZmYgLS1naXQgYS9mcy9zcGxpY2UuYyBiL2ZzL3NwbGljZS5jXFxuaW5kZXggOWQ4ZjYzZTJmZDFhYi4uYjZlYTk4Y2M2MmZkNSAxMDA2NDRcXG4tLS0gYS9mcy9zcGxpY2UuY1xcbisrKyBiL2ZzL3NwbGljZS5jXFxuQEAgLTM5OCw2ICszOTgsNjggQEAgc3NpemVfdCBjb3B5X3NwbGljZV9yZWFkKHN0cnVjdCBmaWxlICppbiwgbG9mZl90ICpwcG9zLFxcbiB9XFxuIEVYUE9SVF9TWU1CT0woY29weV9zcGxpY2VfcmVhZCk7XFxuIFxcbisvKlxcbisgKiBQaXBlIGJ1ZmZlciBvcGVyYXRpb25zIGZvciBzcGxpY2luZyB6ZXJvIHBhZ2VzIGludG8gYSBwaXBlLCB1c2VkIHRvXFxuKyAqIG9wdGltaXplIHJlYWRzIGZyb20gc3BhcnNlIGhvbGVzIGluIGZpbGVzIGFuZCBmcm9tIHplcm8gZGV2aWNlcyBzdWNoIGFzXFxuKyAqIC9kZXYvemVybyBhbmQgL2Rldi9mdWxsLlxcbisgKi9cXG4rc3RhdGljIGJvb2wgemVyb19waXBlX2J1Zl9nZXQoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSxcXG4rXFx0XFx0XFx0ICAgICAgc3RydWN0IHBpcGVfYnVmZmVyICpidWYpXFxuK3tcXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHplcm9fcGlwZV9idWZfcmVsZWFzZShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLFxcbitcXHRcXHRcXHRcXHQgIHN0cnVjdCBwaXBlX2J1ZmZlciAqYnVmKVxcbit7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIHplcm9fcGlwZV9idWZfdHJ5X3N0ZWFsKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsXFxuK1xcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1ZilcXG4re1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuK2NvbnN0IHN0cnVjdCBwaXBlX2J1Zl9vcGVyYXRpb25zIHplcm9fcGlwZV9idWZfb3BzID0ge1xcbitcXHQucmVsZWFzZVxcdD0gemVyb19waXBlX2J1Zl9yZWxlYXNlLFxcbitcXHQudHJ5X3N0ZWFsXFx0PSB6ZXJvX3BpcGVfYnVmX3RyeV9zdGVhbCxcXG4rXFx0LmdldFxcdFxcdD0gemVyb19waXBlX2J1Zl9nZXQsXFxuK307XFxuK1xcbisvKipcXG4rICogc3BsaWNlX3plcm9wYWdlX2ludG9fcGlwZSAtIHNwbGljZSBhIHplcm8gcGFnZSBpbnRvIGEgcGlwZVxcbisgKiBAcGlwZTogcGlwZSB0byBzcGxpY2UgaW50b1xcbisgKiBAZnBvczogZmlsZSBwb3NpdGlvblxcbisgKiBAc2l6ZTogbnVtYmVyIG9mIGJ5dGVzIHRvIHNwbGljZVxcbisgKlxcbisgKiBTcGxpY2UgYXQgbW9zdCBvbmUgcGFnZSBvZiB6ZXJvZXMgaW50byB0aGUgcGlwZS4gIFRoZSB6ZXJvIHBhZ2UgaXMgbm90XFxuKyAqIHJlZmNvdW50ZWQsIHNvIEB6ZXJvX3BpcGVfYnVmX29wcyBtdXN0IGJlIHVzZWQgdG8gYXZvaWQgdGFraW5nIGFcXG4rICogcmVmZXJlbmNlIG9uIGl0LlxcbisgKlxcbisgKiBSZXR1cm46IHRoZSBudW1iZXIgb2YgYnl0ZXMgc3BsaWNlZC5cXG4rICovXFxuK3NpemVfdCBzcGxpY2VfemVyb3BhZ2VfaW50b19waXBlKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsXFxuK1xcdFxcdFxcdFxcdCBsb2ZmX3QgZnBvcywgc2l6ZV90IHNpemUpXFxuK3tcXG4rXFx0c2l6ZV90IG9mZnNldCA9IGZwb3MgXFx1MDAyNiB+UEFHRV9NQVNLO1xcbitcXG4rXFx0c2l6ZSA9IG1pbl90KHNpemVfdCwgc2l6ZSwgUEFHRV9TSVpFIC0gb2Zmc2V0KTtcXG4rXFxuK1xcdGlmICghcGlwZV9pc19mdWxsKHBpcGUpKSB7XFxuK1xcdFxcdHN0cnVjdCBwaXBlX2J1ZmZlciAqYnVmID0gcGlwZV9oZWFkX2J1ZihwaXBlKTtcXG4rXFxuK1xcdFxcdCpidWYgPSAoc3RydWN0IHBpcGVfYnVmZmVyKSB7XFxuK1xcdFxcdFxcdC5vcHNcXHQ9IFxcdTAwMjZ6ZXJvX3BpcGVfYnVmX29wcyxcXG4rXFx0XFx0XFx0LnBhZ2VcXHQ9IFpFUk9fUEFHRSgwKSxcXG4rXFx0XFx0XFx0Lm9mZnNldFxcdD0gb2Zmc2V0LFxcbitcXHRcXHRcXHQubGVuXFx0PSBzaXplLFxcbitcXHRcXHR9O1xcbitcXHRcXHRwaXBlLVxcdTAwM2VoZWFkKys7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBzaXplO1xcbit9XFxuK1xcbiBjb25zdCBzdHJ1Y3QgcGlwZV9idWZfb3BlcmF0aW9ucyBkZWZhdWx0X3BpcGVfYnVmX29wcyA9IHtcXG4gXFx0LnJlbGVhc2VcXHQ9IGdlbmVyaWNfcGlwZV9idWZfcmVsZWFzZSxcXG4gXFx0LnRyeV9zdGVhbFxcdD0gZ2VuZXJpY19waXBlX2J1Zl90cnlfc3RlYWwsXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3BsaWNlLmggYi9pbmNsdWRlL2xpbnV4L3NwbGljZS5oXFxuaW5kZXggOWRlYzQ4NjFkMDlmNi4uZjFkNGFlZmE0ZWMyYyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NwbGljZS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9zcGxpY2UuaFxcbkBAIC0xMDgsNCArMTA4LDcgQEAgZXh0ZXJuIHZvaWQgc3BsaWNlX3Nocmlua19zcGQoc3RydWN0IHNwbGljZV9waXBlX2Rlc2MgKik7XFxuIFxcbiBleHRlcm4gY29uc3Qgc3RydWN0IHBpcGVfYnVmX29wZXJhdGlvbnMgcGFnZV9jYWNoZV9waXBlX2J1Zl9vcHM7XFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgcGlwZV9idWZfb3BlcmF0aW9ucyBkZWZhdWx0X3BpcGVfYnVmX29wcztcXG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBwaXBlX2J1Zl9vcGVyYXRpb25zIHplcm9fcGlwZV9idWZfb3BzO1xcbitzaXplX3Qgc3BsaWNlX3plcm9wYWdlX2ludG9fcGlwZShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLCBsb2ZmX3QgZnBvcyxcXG4rXFx0XFx0XFx0XFx0IHNpemVfdCBzaXplKTtcXG4gI2VuZGlmXFxuZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jXFxuaW5kZXggOTAwMWFhZjNiN2I5NC4uMzlkOGRmZWZiZTlmNSAxMDA2NDRcXG4tLS0gYS9tbS9zaG1lbS5jXFxuKysrIGIvbW0vc2htZW0uY1xcbkBAIC0zNDI3LDUxICszNDI3LDYgQEAgc3RhdGljIHNzaXplX3Qgc2htZW1fZmlsZV93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbi1zdGF0aWMgYm9vbCB6ZXJvX3BpcGVfYnVmX2dldChzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLFxcbi1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1ZilcXG4te1xcbi1cXHRyZXR1cm4gdHJ1ZTtcXG4tfVxcbi1cXG4tc3RhdGljIHZvaWQgemVyb19waXBlX2J1Zl9yZWxlYXNlKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsXFxuLVxcdFxcdFxcdFxcdCAgc3RydWN0IHBpcGVfYnVmZmVyICpidWYpXFxuLXtcXG4tfVxcbi1cXG4tc3RhdGljIGJvb2wgemVyb19waXBlX2J1Zl90cnlfc3RlYWwoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSxcXG4tXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBwaXBlX2J1ZmZlciAqYnVmKVxcbi17XFxuLVxcdHJldHVybiBmYWxzZTtcXG4tfVxcbi1cXG4tc3RhdGljIGNvbnN0IHN0cnVjdCBwaXBlX2J1Zl9vcGVyYXRpb25zIHplcm9fcGlwZV9idWZfb3BzID0ge1xcbi1cXHQucmVsZWFzZVxcdD0gemVyb19waXBlX2J1Zl9yZWxlYXNlLFxcbi1cXHQudHJ5X3N0ZWFsXFx0PSB6ZXJvX3BpcGVfYnVmX3RyeV9zdGVhbCxcXG4tXFx0LmdldFxcdFxcdD0gemVyb19waXBlX2J1Zl9nZXQsXFxuLX07XFxuLVxcbi1zdGF0aWMgc2l6ZV90IHNwbGljZV96ZXJvcGFnZV9pbnRvX3BpcGUoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSxcXG4tXFx0XFx0XFx0XFx0XFx0bG9mZl90IGZwb3MsIHNpemVfdCBzaXplKVxcbi17XFxuLVxcdHNpemVfdCBvZmZzZXQgPSBmcG9zIFxcdTAwMjYgflBBR0VfTUFTSztcXG4tXFxuLVxcdHNpemUgPSBtaW5fdChzaXplX3QsIHNpemUsIFBBR0VfU0laRSAtIG9mZnNldCk7XFxuLVxcbi1cXHRpZiAoIXBpcGVfaXNfZnVsbChwaXBlKSkge1xcbi1cXHRcXHRzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1ZiA9IHBpcGVfaGVhZF9idWYocGlwZSk7XFxuLVxcbi1cXHRcXHQqYnVmID0gKHN0cnVjdCBwaXBlX2J1ZmZlcikge1xcbi1cXHRcXHRcXHQub3BzXFx0PSBcXHUwMDI2emVyb19waXBlX2J1Zl9vcHMsXFxuLVxcdFxcdFxcdC5wYWdlXFx0PSBaRVJPX1BBR0UoMCksXFxuLVxcdFxcdFxcdC5vZmZzZXRcXHQ9IG9mZnNldCxcXG4tXFx0XFx0XFx0LmxlblxcdD0gc2l6ZSxcXG4tXFx0XFx0fTtcXG4tXFx0XFx0cGlwZS1cXHUwMDNlaGVhZCsrO1xcbi1cXHR9XFxuLVxcbi1cXHRyZXR1cm4gc2l6ZTtcXG4tfVxcbi1cXG4gc3RhdGljIHNzaXplX3Qgc2htZW1fZmlsZV9zcGxpY2VfcmVhZChzdHJ1Y3QgZmlsZSAqaW4sIGxvZmZfdCAqcHBvcyxcXG4gXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSxcXG4gXFx0XFx0XFx0XFx0ICAgICAgc2l6ZV90IGxlbiwgdW5zaWduZWQgaW50IGZsYWdzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwNTozMjo1My43OTg3OTk4OTZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjYyNTE5MTMwMTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNITUVNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3BsaWNlX3plcm9wYWdlX2ludG9fcGlwZVwiLFxuICAgIFwic3BsaWNlX3JlYWRfemVyb1wiLFxuICAgIFwic2htZW1fZmlsZV9zcGxpY2VfcmVhZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB6ZXJvIHBhZ2UgcGlwZSBzcGxpY2luZyBsb2dpYyBpbnRvIGNvcmUgZnMvc3BsaWNlLmMgYW5kIHVwZGF0ZXMgL2Rldi96ZXJvIGFuZCAvZGV2L2Z1bGwgdG8gdXNlIHNwbGljZV96ZXJvcGFnZV9pbnRvX3BpcGUgZGlyZWN0bHkgdmlhIHRoZSBuZXcgc3BsaWNlX3JlYWRfemVybyBpbXBsZW1lbnRhdGlvbiBpbnN0ZWFkIG9mIGNvcHlfc3BsaWNlX3JlYWQuIFRoaXMgYWZmZWN0cyBjb3JlIFZGUy9waXBlIG9wZXJhdGlvbnMgYW5kIGNoYXJhY3RlciBkZXZpY2UgaGFuZGxpbmcsIHdoaWNoIGlzIHJlYWRpbHkgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1MWZjZTVkNmY1MzUyZDAxN2Y4N2IxMzBmNjA3OThlMDNiNTY2Nzg0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMjkgMDU6MzI6NTAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvbWVtLmMgYi9kcml2ZXJzL2NoYXIvbWVtLmNcbmluZGV4IDYzMjUzZDFkZTVkNzAuLjZkM2VmMzU5YjJkN2IgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2NoYXIvbWVtLmNcbisrKyBiL2RyaXZlcnMvY2hhci9tZW0uY1xuQEAgLTQ3MSw2ICs0NzEsMzEgQEAgc3RhdGljIHNzaXplX3QgcmVhZF9pdGVyX3plcm8oc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpXG4gXHRyZXR1cm4gd3JpdHRlbjtcbiB9XG4gXG4rc3RhdGljIHNzaXplX3Qgc3BsaWNlX3JlYWRfemVybyhzdHJ1Y3QgZmlsZSAqaW4sIGxvZmZfdCAqcHBvcyxcbitcdFx0XHRcdHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsIHNpemVfdCBsZW4sXG4rXHRcdFx0XHR1bnNpZ25lZCBpbnQgZmxhZ3MpXG4re1xuK1x0c2l6ZV90IHRvdGFsID0gMDtcbitcdGxvZmZfdCBwb3MgPSAwO1xuK1x0c2l6ZV90IHVzZWQsIG5wYWdlcztcbitcbitcdHVzZWQgPSBwaXBlX2J1Zl91c2FnZShwaXBlKTtcbitcdGlmICh1c2VkIFx1MDAzZT0gcGlwZS1cdTAwM2VtYXhfdXNhZ2UpXG4rXHRcdHJldHVybiAtRUFHQUlOO1xuK1x0bnBhZ2VzID0gcGlwZS1cdTAwM2VtYXhfdXNhZ2UgLSB1c2VkO1xuK1x0bGVuID0gbWluX3Qoc2l6ZV90LCBsZW4sIG5wYWdlcyAqIFBBR0VfU0laRSk7XG4rXG4rXHR3aGlsZSAobGVuKSB7XG4rXHRcdHNpemVfdCBuID0gc3BsaWNlX3plcm9wYWdlX2ludG9fcGlwZShwaXBlLCBwb3MsIGxlbik7XG4rXG4rXHRcdHBvcyArPSBuO1xuK1x0XHR0b3RhbCArPSBuO1xuK1x0XHRsZW4gLT0gbjtcbitcdH1cbitcbitcdHJldHVybiB0b3RhbDtcbit9XG4rXG4gc3RhdGljIHNzaXplX3QgcmVhZF96ZXJvKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLFxuIFx0XHRcdCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcbiB7XG5AQCAtNjY5LDcgKzY5NCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHplcm9fZm9wcyA9IHtcbiBcdC5yZWFkX2l0ZXJcdD0gcmVhZF9pdGVyX3plcm8sXG4gXHQucmVhZFx0XHQ9IHJlYWRfemVybyxcbiBcdC53cml0ZV9pdGVyXHQ9IHdyaXRlX2l0ZXJfemVybyxcbi1cdC5zcGxpY2VfcmVhZFx0PSBjb3B5X3NwbGljZV9yZWFkLFxuK1x0LnNwbGljZV9yZWFkXHQ9IHNwbGljZV9yZWFkX3plcm8sXG4gXHQuc3BsaWNlX3dyaXRlXHQ9IHNwbGljZV93cml0ZV96ZXJvLFxuIFx0Lm1tYXBfcHJlcGFyZVx0PSBtbWFwX3plcm9fcHJlcGFyZSxcbiBcdC5nZXRfdW5tYXBwZWRfYXJlYSA9IGdldF91bm1hcHBlZF9hcmVhX3plcm8sXG5AQCAtNjgyLDcgKzcwNyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZ1bGxfZm9wcyA9IHtcbiBcdC5sbHNlZWtcdFx0PSBmdWxsX2xzZWVrLFxuIFx0LnJlYWRfaXRlclx0PSByZWFkX2l0ZXJfemVybyxcbiBcdC53cml0ZVx0XHQ9IHdyaXRlX2Z1bGwsXG4tXHQuc3BsaWNlX3JlYWRcdD0gY29weV9zcGxpY2VfcmVhZCxcbitcdC5zcGxpY2VfcmVhZFx0PSBzcGxpY2VfcmVhZF96ZXJvLFxuIH07XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBtZW1kZXYge1xuZGlmZiAtLWdpdCBhL2ZzL3NwbGljZS5jIGIvZnMvc3BsaWNlLmNcbmluZGV4IDlkOGY2M2UyZmQxYWIuLmI2ZWE5OGNjNjJmZDUgMTAwNjQ0XG4tLS0gYS9mcy9zcGxpY2UuY1xuKysrIGIvZnMvc3BsaWNlLmNcbkBAIC0zOTgsNiArMzk4LDY4IEBAIHNzaXplX3QgY29weV9zcGxpY2VfcmVhZChzdHJ1Y3QgZmlsZSAqaW4sIGxvZmZfdCAqcHBvcyxcbiB9XG4gRVhQT1JUX1NZTUJPTChjb3B5X3NwbGljZV9yZWFkKTtcbiBcbisvKlxuKyAqIFBpcGUgYnVmZmVyIG9wZXJhdGlvbnMgZm9yIHNwbGljaW5nIHplcm8gcGFnZXMgaW50byBhIHBpcGUsIHVzZWQgdG9cbisgKiBvcHRpbWl6ZSByZWFkcyBmcm9tIHNwYXJzZSBob2xlcyBpbiBmaWxlcyBhbmQgZnJvbSB6ZXJvIGRldmljZXMgc3VjaCBhc1xuKyAqIC9kZXYvemVybyBhbmQgL2Rldi9mdWxsLlxuKyAqL1xuK3N0YXRpYyBib29sIHplcm9fcGlwZV9idWZfZ2V0KHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsXG4rXHRcdFx0ICAgICAgc3RydWN0IHBpcGVfYnVmZmVyICpidWYpXG4re1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHplcm9fcGlwZV9idWZfcmVsZWFzZShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLFxuK1x0XHRcdFx0ICBzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1Zilcbit7XG4rfVxuK1xuK3N0YXRpYyBib29sIHplcm9fcGlwZV9idWZfdHJ5X3N0ZWFsKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsXG4rXHRcdFx0XHQgICAgc3RydWN0IHBpcGVfYnVmZmVyICpidWYpXG4re1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbitjb25zdCBzdHJ1Y3QgcGlwZV9idWZfb3BlcmF0aW9ucyB6ZXJvX3BpcGVfYnVmX29wcyA9IHtcbitcdC5yZWxlYXNlXHQ9IHplcm9fcGlwZV9idWZfcmVsZWFzZSxcbitcdC50cnlfc3RlYWxcdD0gemVyb19waXBlX2J1Zl90cnlfc3RlYWwsXG4rXHQuZ2V0XHRcdD0gemVyb19waXBlX2J1Zl9nZXQsXG4rfTtcbitcbisvKipcbisgKiBzcGxpY2VfemVyb3BhZ2VfaW50b19waXBlIC0gc3BsaWNlIGEgemVybyBwYWdlIGludG8gYSBwaXBlXG4rICogQHBpcGU6IHBpcGUgdG8gc3BsaWNlIGludG9cbisgKiBAZnBvczogZmlsZSBwb3NpdGlvblxuKyAqIEBzaXplOiBudW1iZXIgb2YgYnl0ZXMgdG8gc3BsaWNlXG4rICpcbisgKiBTcGxpY2UgYXQgbW9zdCBvbmUgcGFnZSBvZiB6ZXJvZXMgaW50byB0aGUgcGlwZS4gIFRoZSB6ZXJvIHBhZ2UgaXMgbm90XG4rICogcmVmY291bnRlZCwgc28gQHplcm9fcGlwZV9idWZfb3BzIG11c3QgYmUgdXNlZCB0byBhdm9pZCB0YWtpbmcgYVxuKyAqIHJlZmVyZW5jZSBvbiBpdC5cbisgKlxuKyAqIFJldHVybjogdGhlIG51bWJlciBvZiBieXRlcyBzcGxpY2VkLlxuKyAqL1xuK3NpemVfdCBzcGxpY2VfemVyb3BhZ2VfaW50b19waXBlKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsXG4rXHRcdFx0XHQgbG9mZl90IGZwb3MsIHNpemVfdCBzaXplKVxuK3tcbitcdHNpemVfdCBvZmZzZXQgPSBmcG9zIFx1MDAyNiB+UEFHRV9NQVNLO1xuK1xuK1x0c2l6ZSA9IG1pbl90KHNpemVfdCwgc2l6ZSwgUEFHRV9TSVpFIC0gb2Zmc2V0KTtcbitcbitcdGlmICghcGlwZV9pc19mdWxsKHBpcGUpKSB7XG4rXHRcdHN0cnVjdCBwaXBlX2J1ZmZlciAqYnVmID0gcGlwZV9oZWFkX2J1ZihwaXBlKTtcbitcbitcdFx0KmJ1ZiA9IChzdHJ1Y3QgcGlwZV9idWZmZXIpIHtcbitcdFx0XHQub3BzXHQ9IFx1MDAyNnplcm9fcGlwZV9idWZfb3BzLFxuK1x0XHRcdC5wYWdlXHQ9IFpFUk9fUEFHRSgwKSxcbitcdFx0XHQub2Zmc2V0XHQ9IG9mZnNldCxcbitcdFx0XHQubGVuXHQ9IHNpemUsXG4rXHRcdH07XG4rXHRcdHBpcGUtXHUwMDNlaGVhZCsrO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHNpemU7XG4rfVxuK1xuIGNvbnN0IHN0cnVjdCBwaXBlX2J1Zl9vcGVyYXRpb25zIGRlZmF1bHRfcGlwZV9idWZfb3BzID0ge1xuIFx0LnJlbGVhc2VcdD0gZ2VuZXJpY19waXBlX2J1Zl9yZWxlYXNlLFxuIFx0LnRyeV9zdGVhbFx0PSBnZW5lcmljX3BpcGVfYnVmX3RyeV9zdGVhbCxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NwbGljZS5oIGIvaW5jbHVkZS9saW51eC9zcGxpY2UuaFxuaW5kZXggOWRlYzQ4NjFkMDlmNi4uZjFkNGFlZmE0ZWMyYyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc3BsaWNlLmhcbisrKyBiL2luY2x1ZGUvbGludXgvc3BsaWNlLmhcbkBAIC0xMDgsNCArMTA4LDcgQEAgZXh0ZXJuIHZvaWQgc3BsaWNlX3Nocmlua19zcGQoc3RydWN0IHNwbGljZV9waXBlX2Rlc2MgKik7XG4gXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBwaXBlX2J1Zl9vcGVyYXRpb25zIHBhZ2VfY2FjaGVfcGlwZV9idWZfb3BzO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgcGlwZV9idWZfb3BlcmF0aW9ucyBkZWZhdWx0X3BpcGVfYnVmX29wcztcbitleHRlcm4gY29uc3Qgc3RydWN0IHBpcGVfYnVmX29wZXJhdGlvbnMgemVyb19waXBlX2J1Zl9vcHM7XG4rc2l6ZV90IHNwbGljZV96ZXJvcGFnZV9pbnRvX3BpcGUoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSwgbG9mZl90IGZwb3MsXG4rXHRcdFx0XHQgc2l6ZV90IHNpemUpO1xuICNlbmRpZlxuZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jXG5pbmRleCA5MDAxYWFmM2I3Yjk0Li4zOWQ4ZGZlZmJlOWY1IDEwMDY0NFxuLS0tIGEvbW0vc2htZW0uY1xuKysrIGIvbW0vc2htZW0uY1xuQEAgLTM0MjcsNTEgKzM0MjcsNiBAQCBzdGF0aWMgc3NpemVfdCBzaG1lbV9maWxlX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi1zdGF0aWMgYm9vbCB6ZXJvX3BpcGVfYnVmX2dldChzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLFxuLVx0XHRcdCAgICAgIHN0cnVjdCBwaXBlX2J1ZmZlciAqYnVmKVxuLXtcbi1cdHJldHVybiB0cnVlO1xuLX1cbi1cbi1zdGF0aWMgdm9pZCB6ZXJvX3BpcGVfYnVmX3JlbGVhc2Uoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSxcbi1cdFx0XHRcdCAgc3RydWN0IHBpcGVfYnVmZmVyICpidWYpXG4te1xuLX1cbi1cbi1zdGF0aWMgYm9vbCB6ZXJvX3BpcGVfYnVmX3RyeV9zdGVhbChzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLFxuLVx0XHRcdFx0ICAgIHN0cnVjdCBwaXBlX2J1ZmZlciAqYnVmKVxuLXtcbi1cdHJldHVybiBmYWxzZTtcbi19XG4tXG4tc3RhdGljIGNvbnN0IHN0cnVjdCBwaXBlX2J1Zl9vcGVyYXRpb25zIHplcm9fcGlwZV9idWZfb3BzID0ge1xuLVx0LnJlbGVhc2VcdD0gemVyb19waXBlX2J1Zl9yZWxlYXNlLFxuLVx0LnRyeV9zdGVhbFx0PSB6ZXJvX3BpcGVfYnVmX3RyeV9zdGVhbCxcbi1cdC5nZXRcdFx0PSB6ZXJvX3BpcGVfYnVmX2dldCxcbi19O1xuLVxuLXN0YXRpYyBzaXplX3Qgc3BsaWNlX3plcm9wYWdlX2ludG9fcGlwZShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLFxuLVx0XHRcdFx0XHRsb2ZmX3QgZnBvcywgc2l6ZV90IHNpemUpXG4te1xuLVx0c2l6ZV90IG9mZnNldCA9IGZwb3MgXHUwMDI2IH5QQUdFX01BU0s7XG4tXG4tXHRzaXplID0gbWluX3Qoc2l6ZV90LCBzaXplLCBQQUdFX1NJWkUgLSBvZmZzZXQpO1xuLVxuLVx0aWYgKCFwaXBlX2lzX2Z1bGwocGlwZSkpIHtcbi1cdFx0c3RydWN0IHBpcGVfYnVmZmVyICpidWYgPSBwaXBlX2hlYWRfYnVmKHBpcGUpO1xuLVxuLVx0XHQqYnVmID0gKHN0cnVjdCBwaXBlX2J1ZmZlcikge1xuLVx0XHRcdC5vcHNcdD0gXHUwMDI2emVyb19waXBlX2J1Zl9vcHMsXG4tXHRcdFx0LnBhZ2VcdD0gWkVST19QQUdFKDApLFxuLVx0XHRcdC5vZmZzZXRcdD0gb2Zmc2V0LFxuLVx0XHRcdC5sZW5cdD0gc2l6ZSxcbi1cdFx0fTtcbi1cdFx0cGlwZS1cdTAwM2VoZWFkKys7XG4tXHR9XG4tXG4tXHRyZXR1cm4gc2l6ZTtcbi19XG4tXG4gc3RhdGljIHNzaXplX3Qgc2htZW1fZmlsZV9zcGxpY2VfcmVhZChzdHJ1Y3QgZmlsZSAqaW4sIGxvZmZfdCAqcHBvcyxcbiBcdFx0XHRcdCAgICAgIHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsXG4gXHRcdFx0XHQgICAgICBzaXplX3QgbGVuLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwNTozMjo1My43OTg4MDE0NDZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMzg0NjIxOTQ2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2g6IEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIG1vdmluZyBzb21lIGNvZGUg4oCTIGB6ZXJvX3BpcGVfYnVmX29wc2AgYW5kIGBzcGxpY2VfemVyb3BhZ2VfaW50b19waXBlYCDigJMgZnJvbSBgbW0vc2htZW0uY2AgdG8gYGZzL3NwbGljZS5jYCBhbmQgZXhwb3J0aW5nIGl0LiBUaGlzIHNlZW1zIHRvIGJlIGRvbmUgdG8gc3VwcG9ydCB0aGUgbmV3IHVzZSBvZiBgc3BsaWNlX3JlYWRfemVyb2Agd2l0aGluIHRoZSBjaGFyYWN0ZXIgZGV2aWNlIGRyaXZlciwgc3BlY2lmaWNhbGx5IGZvciBgL2Rldi96ZXJvYCBhbmQgYC9kZXYvZnVsbGAuIFRoZXkgbm93IHVzZSBgc3BsaWNlX3JlYWRfemVyb2AgZm9yIHRoZWlyIGAuc3BsaWNlX3JlYWRgIG1ldGhvZCwgd2hpY2ggaXMgcHJldHR5IGludGVyZXN0aW5nLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYXNzZXNzIGl0cyBmdXp6aW5nIHBvdGVudGlhbC4gVGhpcyBpbXBhY3RzIGNvcmUga2VybmVsIGZ1bmN0aW9uYWxpdHksIGludm9sdmluZyBzdGFuZGFyZCBkZXZpY2VzIGxpa2UgYC9kZXYvemVyb2AsIGAvZGV2L2Z1bGxgLCBhbmQgcGlwZXMuIFRoYXQncyBhIGh1Z2UgcG9zaXRpdmUuIEl0J3MgZGVmaW5pdGVseSByZWFjaGFibGUgaW4gYSBzdGFuZGFyZCBRRU1VIHNldHVwOyB0aGVzZSBhcmUgZnVuZGFtZW50YWwgZWxlbWVudHMuIE5vdywgdGhlIGtleSBpcyB3aGV0aGVyIGl0IGludHJvZHVjZXMgYSBmdW5jdGlvbmFsIGNoYW5nZS4gQW5kIHllcywgaXQgZG9lcyEgUHJldmlvdXNseSwgdGhvc2UgZGV2aWNlcyB1c2VkIGBjb3B5X3NwbGljZV9yZWFkYCwgYnV0IG5vdyB0aGV5J3JlIHVzaW5nIHRoaXMgbmV3IGBzcGxpY2VfcmVhZF96ZXJvYCwgd2hpY2ggZGlyZWN0bHkgaW5zZXJ0cyBgWkVST19QQUdFYCBpbnRvIHRoZSBwaXBlIGJ1ZmZlcnMgdGhyb3VnaCBgc3BsaWNlX3plcm9wYWdlX2ludG9fcGlwZWAgYW5kIGB6ZXJvX3BpcGVfYnVmX29wc2AuIFRoaXMgbWVhbnMgdGhhdCB3aGVuIGEgdXNlciBzcGxpY2VzIGZyb20gL2Rldi96ZXJvIHRvIGEgcGlwZSwgb3IgcmVhZHMgZnJvbSBhIHBpcGUgY29udGFpbmluZyBgWkVST19QQUdFYCBidWZmZXJzLCB0aGlzIG5ldyBsb2dpYyBnZXRzIHRyaWdnZXJlZC4gVGhhdCBtYWtlcyBpdCBwcmltZSBmb3IgZnV6emluZy5cblxuTGV0J3MgcXVpY2tseSBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZDogYHNwbGljZV96ZXJvcGFnZV9pbnRvX3BpcGVgIChub3cgaW4gYGZzL3NwbGljZS5jYCksIGBzcGxpY2VfcmVhZF96ZXJvYCAodGhlIHN0YXRpYyBvbmUgaW4gYGRyaXZlcnMvY2hhci9tZW0uY2ApLCBgemVyb19waXBlX2J1Zl9vcHNgLCBhbmQgYHNobWVtX2ZpbGVfc3BsaWNlX3JlYWRgLiBXZSBoYXZlIHRvIGtlZXAgYW4gZXllIG9uIGhvdyB0aGVzZSBpbnRlcmFjdC5cblxuTmV4dCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgYGRyaXZlcnMvY2hhci9tZW0uY2AgYW5kIGBmcy9zcGxpY2UuY2AuIExldCdzIGdyZXAgYW5kIHJlYWQgdGhlIHJlbGV2YW50IGZpbGVzIHRvIG1ha2Ugc3VyZSBub3RoaW5nIGlzIHByZXZlbnRpbmcgdGhpcyBjb2RlIGZyb20gYmVpbmcgYnVpbHQgb3IsIG1vcmUgaW1wb3J0YW50bHksIGVuYWJsZWQgaW4gc3RhbmRhcmQgY29uZmlndXJhdGlvbnMuIEkgd2FudCB0byBlbnN1cmUgaXQncyBidWlsdC1pbiBhbmQgYWNjZXNzaWJsZSBhcyBpdCB3aWxsIGdyZWF0bHkgaW5jcmVhc2UgbXkgYXR0YWNrIHN1cmZhY2UgaWYgaXQgaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwNjksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MjYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwNTozMzowNy42NDUwMjI4MDFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgyNzUwMTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0RFVk1FTXxDT05GSUdfREVWUE9SVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2NoYXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9jaGFyL21lbS5jPTMyNT1zdGF0aWMgaW50IG1tYXBfbWVtX3ByZXBhcmUoc3RydWN0IHZtX2FyZWFfZGVzYyAqZGVzYylcXG4tLVxcbmRyaXZlcnMvY2hhci9tZW0uYy0zNjQtXFxuZHJpdmVycy9jaGFyL21lbS5jOjM2NTojaWZkZWYgQ09ORklHX0RFVlBPUlRcXG5kcml2ZXJzL2NoYXIvbWVtLmMtMzY2LXN0YXRpYyBzc2l6ZV90IHJlYWRfcG9ydChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZixcXG4tLVxcbmRyaXZlcnMvY2hhci9tZW0uYz02NzI9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbnVsbF9mb3BzID0ge1xcbi0tXFxuZHJpdmVycy9jaGFyL21lbS5jLTY4MS1cXG5kcml2ZXJzL2NoYXIvbWVtLmM6NjgyOiNpZmRlZiBDT05GSUdfREVWUE9SVFxcbmRyaXZlcnMvY2hhci9tZW0uYy02ODMtc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcG9ydF9mb3BzID0ge1xcbi0tXFxuZHJpdmVycy9jaGFyL21lbS5jPTcxMz1zdGF0aWMgY29uc3Qgc3RydWN0IG1lbWRldiB7XFxuLS1cXG5kcml2ZXJzL2NoYXIvbWVtLmMtNzE4LX0gZGV2bGlzdFtdID0ge1xcbmRyaXZlcnMvY2hhci9tZW0uYzo3MTk6I2lmZGVmIENPTkZJR19ERVZNRU1cXG5kcml2ZXJzL2NoYXIvbWVtLmMtNzIwLVxcdFtERVZNRU1fTUlOT1JdID0geyBcXFwibWVtXFxcIiwgXFx1MDAyNm1lbV9mb3BzLCAwLCAwIH0sXFxuLS1cXG5kcml2ZXJzL2NoYXIvbWVtLmMtNzIyLVxcdFszXSA9IHsgXFxcIm51bGxcXFwiLCBcXHUwMDI2bnVsbF9mb3BzLCBGTU9ERV9OT1dBSVQsIDA2NjYgfSxcXG5kcml2ZXJzL2NoYXIvbWVtLmM6NzIzOiNpZmRlZiBDT05GSUdfREVWUE9SVFxcbmRyaXZlcnMvY2hhci9tZW0uYy03MjQtXFx0WzRdID0geyBcXFwicG9ydFxcXCIsIFxcdTAwMjZwb3J0X2ZvcHMsIDAsIDAgfSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDU6MzM6MDcuNjkzMzAyNDlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjM0ODI0OTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBCdWlsZCBQcm9jZXNzIGZvciBgbWVtLmNgKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSBob3cgYG1lbS5jYCBnZXRzIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbC4gTXkgZmlyc3QgaW5zdGluY3QsIGFuZCBhIHByZXR0eSBzb2xpZCBvbmUgZ2l2ZW4gdGhlIHR5cGljYWwga2VybmVsIHN0cnVjdHVyZSwgaXMgdG8gZGl2ZSByaWdodCBpbnRvIGBkcml2ZXJzL2NoYXIvTWFrZWZpbGVgLiBUaGF0J3Mgd2hlcmUgSSBleHBlY3QgdGhlIGJ1aWxkIHN5c3RlbSB0byBiZSBvcmNoZXN0cmF0aW5nIHRoaW5ncywgZXNwZWNpYWxseSBzaW5jZSBgbWVtLmNgIGlzLCB3ZWxsLCBpbiB0aGUgYGNoYXJgIGRyaXZlciBzcGFjZS4gVGhpcyBNYWtlZmlsZSBzaG91bGQgY29udGFpbiB0aGUgZGVwZW5kZW5jaWVzLCBjb21waWxhdGlvbiBmbGFncywgYW5kIGxpbmtpbmcgY29tbWFuZHMgbmVjZXNzYXJ5IHRvIHRyYW5zZm9ybSB0aGUgc291cmNlIGNvZGUgaW50byB0aGUgb2JqZWN0IGZpbGUsIGFuZCB1bHRpbWF0ZWx5IGludGVncmF0ZSBpdCBpbnRvIHRoZSBrZXJuZWwgaW1hZ2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgcHJvY2VzcyB0aG9yb3VnaGx5LCBzbyBJIGtub3cgaG93IHRvIGRlYnVnIGl0IG9yIG1vZGlmeSBpdCBsYXRlciBpZiBuZWVkZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzOTgsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwNTozMzoxMC4zMjgxMjkyNDdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY2NTM3MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvY2hhclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2NoYXIvTWFrZWZpbGUtNS1cXG5kcml2ZXJzL2NoYXIvTWFrZWZpbGU6NjpvYmoteVxcdFxcdFxcdFxcdCs9IG1lbS5vIHJhbmRvbS5vXFxuZHJpdmVycy9jaGFyL01ha2VmaWxlLTctb2JqLSQoQ09ORklHX1RUWV9QUklOVEspXFx0Kz0gdHR5cHJpbnRrLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDU6MzM6MTAuMzc0Nzg2NTI2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTMxNTE0MjYxOTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIGtlZXBpbmcgaW4gbWluZCBteSBleHBlcnRpc2U6XG5cbioqRXhhbWluaW5nIEJ1aWxkIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIHNvIGBtZW0ub2AgaXMgY29uc2lzdGVudGx5IGJ1aWx0IGFzIHBhcnQgb2YgdGhlIGBvYmoteWAgcnVsZS4gVGhhdCdzIGEgZ2l2ZW4g4oCTIEkndmUgc2VlbiB0aGF0IHBhdHRlcm4gY291bnRsZXNzIHRpbWVzIGluIGtlcm5lbCBtYWtlZmlsZXMuIEJ1dCwgaXQgZ290IG1lIHRoaW5raW5nLCAqaG93IHdpZGVzcHJlYWQgaXMgdGhpcyBwYXR0ZXJuPyogIElzIGl0IGNvbnNpc3RlbnQgYWNyb3NzIHRoZSBib2FyZCwgb3IgYXJlIHRoZXJlIGV4Y2VwdGlvbnM/XG5cbkknbSBzcGVjaWZpY2FsbHkgdGhpbmtpbmcgYWJvdXQgYSBtb2R1bGUgbGlrZSBgZnMvc3BsaWNlLmNgLiBMZXQncyB1c2UgaXQgYXMgYSB0ZXN0IGNhc2UuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiBpdCBhZGhlcmVzIHRvIHRoZSBzYW1lIGNvbnN0cnVjdGlvbiBvciBpZiB0aGVyZSBpcyBzb21ldGhpbmcgZWxzZSBhdCBwbGF5LiAgTXkgbmV4dCBtb3ZlIGlzIGNsZWFyLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGBmcy9NYWtlZmlsZWAgdG8gdmVyaWZ5IGlmIHRoaXMgYmVoYXZpb3IgaXMgd2hhdCBJIGV4cGVjdCB0byBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjcxLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDU6MzM6MjMuNTI2MjE1ODQxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxMjY0NDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNwbGljZVxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9NYWtlZmlsZT0xMD1vYmoteSA6PVxcdG9wZW4ubyByZWFkX3dyaXRlLm8gZmlsZV90YWJsZS5vIHN1cGVyLm8gXFxcXFxcbi0tXFxuZnMvTWFrZWZpbGUtMTQtXFx0XFx0c2VxX2ZpbGUubyB4YXR0ci5vIGxpYmZzLm8gZnMtd3JpdGViYWNrLm8gXFxcXFxcbmZzL01ha2VmaWxlOjE1OlxcdFxcdHBub2RlLm8gc3BsaWNlLm8gc3luYy5vIHV0aW1lcy5vIGRfcGF0aC5vIFxcXFxcXG5mcy9NYWtlZmlsZS0xNi1cXHRcXHRzdGFjay5vIGZzX3N0cnVjdC5vIHN0YXRmcy5vIGZzX3Bpbi5vIG5zZnMubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDA1OjMzOjIzLjU5NzQ4NDM3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM4ODI1MzA1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgYW4gZXhwZXJ0IGluIHRoaXMgYXJlYTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBCdWlsZCBQcm9jZXNzIG9mIGBzcGxpY2Uub2AqKlxuXG5Pa2F5LCBzbyBgc3BsaWNlLm9gIGlzIGNvbnNpc3RlbnRseSBpbmNsdWRlZCBpbiB0aGUgYnVpbGQsIG1hcmtlZCB3aXRoIGBvYmoteWAuIFRoYXQncyBhIGdpdmVuLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2h5Ki4gTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgaG93IGl0J3MgaW50ZWdyYXRlZCB3aXRoIG90aGVyIHJlbGF0ZWQgc291cmNlIGZpbGVzLiBMZXQncyBsb29rIGF0IGBtbS9zaG1lbS5jYC4gSSBleHBlY3QgdGhlcmUgdG8gYmUgYSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY3kuIE5vdywgbG9va2luZyBhdCBgbW0vTWFrZWZpbGVgLCBJIHNlZSB0aGF0IGBzaG1lbS5vYCBpbmNsdXNpb24gZGVwZW5kcyBvbiBgQ09ORklHX1NITUVNYCAob3IgYENPTkZJR19UTVBGU2Agd2hpY2ggb2Z0ZW4gaW1wbGllcyBgQ09ORklHX1NITUVNYCkuIFRoaXMgaXMgd2hlcmUgdGhlIGNydWNpYWwgbGluayBsaWVzLCBzbyBJIG5lZWQgdG8gY2hlY2sgaG93IGBDT05GSUdfU0hNRU1gIGlzIGRlZmluZWQuIFRoaXMnbGwgcHJvYmFibHkgbGVhZCBtZSB0byBhIC5jb25maWcgZmlsZSBvciBhIEtjb25maWcgZmlsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjA0MywiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDA1OjMzOjI1Ljk4NTczOTY1MVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc4MzU3NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2htZW1cXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9NTE9b2JqLXlcXHRcXHRcXHQ6PSBmaWxlbWFwLm8gbWVtcG9vbC5vIG9vbV9raWxsLm8gZmFkdmlzZS5vIFxcXFxcXG4tLVxcbm1tL01ha2VmaWxlLTUzLVxcdFxcdFxcdCAgIHJlYWRhaGVhZC5vIHN3YXAubyB0cnVuY2F0ZS5vIHZtc2Nhbi5vIHNocmlua2VyLm8gXFxcXFxcbm1tL01ha2VmaWxlOjU0OlxcdFxcdFxcdCAgIHNobWVtLm8gdXRpbC5vIG1tem9uZS5vIHZtc3RhdC5vIGJhY2tpbmctZGV2Lm8gXFxcXFxcbm1tL01ha2VmaWxlLTU1LVxcdFxcdFxcdCAgIG1tX2luaXQubyBwZXJjcHUubyBzbGFiX2NvbW1vbi5vIFxcXFxcXG4tLVxcbm1tL3NobWVtLmM9NTIwPXN0YXRpYyBpbnQgc2htZW1fY29uZmlybV9zd2FwKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBwZ29mZl90IGluZGV4LFxcbi0tXFxubW0vc2htZW0uYy01NjktI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL3NobWVtLmM6NTcwOi8qIGlmZGVmIGhlcmUgdG8gYXZvaWQgYmxvYXRpbmcgc2htZW0ubyB3aGVuIG5vdCBuZWNlc3NhcnkgKi9cXG5tbS9zaG1lbS5jLTU3MS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDU6MzM6MjYuMDMzNTgwMTNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTY4NTY3NzU1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqQ2hlY2tpbmcgdGhlIFNITUVNIEltcGxlbWVudGF0aW9uKipcblxuQWxyaWdodCwgc28gYHNobWVtLm9gIGlzIGNsZWFybHkgcGFydCBvZiB0aGUgYnVpbGQgcHJvY2VzcywgbGlzdGVkIGFzIGFuIGBvYmoteWAgdGFyZ2V0IHdpdGhpbiB0aGUgYG1tL01ha2VmaWxlYC4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSBpdCdzIGJlaW5nIGNvbXBpbGVkIGRpcmVjdGx5IGludG8gdGhlIGtlcm5lbCBpbWFnZSBpZiBjZXJ0YWluIGNvbmRpdGlvbnMgYXJlIG1ldC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0aG9zZSBjb25kaXRpb25zIGFyZS4gVGhlIG1vc3QgbG9naWNhbCBuZXh0IHN0ZXAsIGNvbnNpZGVyaW5nIGl0J3MgbWVtb3J5IG1hbmFnZW1lbnQgcmVsYXRlZCwgaXMgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYENPTkZJR19TSE1FTWAuIE15IGltbWVkaWF0ZSBhc3N1bXB0aW9uIGlzIHRoYXQgaXQncyBwcm9iYWJseSBlaXRoZXIgZGVmaW5lZCBhbmQgdXNlZCBkaXJlY3RseSBpbiBgbW0vc2htZW0uY2AgaXRzZWxmLCB3aGljaCB3b3VsZCBiZSB0aGUgbW9zdCBvYnZpb3VzIHBsYWNlIGZvciB0aGUgY29kZSwgb3IgcGVyaGFwcyBtb3JlIGxpa2VseSwgaW4gYG1tL01ha2VmaWxlYCBhbG9uZ3NpZGUgdGhlIGRlY2xhcmF0aW9uIG9mIHRoZSBvYmplY3QgZmlsZXMgdG8gY29udHJvbCBpdCdzIGJ1aWxkLiBLbm93aW5nIHRoZSBrZXJuZWwncyBidWlsZCBzeXN0ZW0sIGl0J3MgcHJvYmFibHkgZGVjbGFyZWQgYXMgYSBtb2R1bGUgaW4gdGhlIG1ha2VmaWxlLiBUaGlzIHdpbGwgcG9pbnQgbWUgZGlyZWN0bHkgdG8gdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZSwgc28gSSBjYW4gc2VlIHdoYXQgZW5hYmxpbmcgdGhpcyBmdW5jdGlvbmFsaXR5IGRlcGVuZHMgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1NTgsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwNTozMzozMS43MTkyNTk5MDhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NjYwNTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19TSE1FTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdlX21lbW9yeS5jPTYxOT1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqaHVnZXBhZ2VfYXR0cltdID0ge1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy02MjMtXFx0XFx1MDAyNmhwYWdlX3BtZF9zaXplX2F0dHIuYXR0cixcXG5tbS9odWdlX21lbW9yeS5jOjYyNDojaWZkZWYgQ09ORklHX1NITUVNXFxubW0vaHVnZV9tZW1vcnkuYy02MjUtXFx0XFx1MDAyNnNobWVtX2VuYWJsZWRfYXR0ci5hdHRyLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz03MjA9c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmZpbGVfY3RybF9hdHRyc1tdID0ge1xcbm1tL2h1Z2VfbWVtb3J5LmM6NzIxOiNpZmRlZiBDT05GSUdfU0hNRU1cXG5tbS9odWdlX21lbW9yeS5jLTcyMi1cXHRcXHUwMDI2dGhwc2l6ZV9zaG1lbV9lbmFibGVkX2F0dHIuYXR0cixcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NzgwPURFRklORV9NVEhQX1NUQVRfQVRUUihzd3BvdXRfZmFsbGJhY2ssIE1USFBfU1RBVF9TV1BPVVRfRkFMTEJBQ0spO1xcbm1tL2h1Z2VfbWVtb3J5LmM6NzgxOiNpZmRlZiBDT05GSUdfU0hNRU1cXG5tbS9odWdlX21lbW9yeS5jLTc4Mi1ERUZJTkVfTVRIUF9TVEFUX0FUVFIoc2htZW1fYWxsb2MsIE1USFBfU1RBVF9TSE1FTV9BTExPQyk7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTc5Nj1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYW5vbl9zdGF0c19hdHRyc1tdID0ge1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy03OTktXFx0XFx1MDAyNmFub25fZmF1bHRfZmFsbGJhY2tfY2hhcmdlX2F0dHIuYXR0cixcXG5tbS9odWdlX21lbW9yeS5jOjgwMDojaWZuZGVmIENPTkZJR19TSE1FTVxcbm1tL2h1Z2VfbWVtb3J5LmMtODAxLVxcdFxcdTAwMjZ6c3dwb3V0X2F0dHIuYXR0cixcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9ODIyPXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpmaWxlX3N0YXRzX2F0dHJzW10gPSB7XFxubW0vaHVnZV9tZW1vcnkuYzo4MjM6I2lmZGVmIENPTkZJR19TSE1FTVxcbm1tL2h1Z2VfbWVtb3J5LmMtODI0LVxcdFxcdTAwMjZzaG1lbV9hbGxvY19hdHRyLmF0dHIsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTgzNj1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYW55X3N0YXRzX2F0dHJzW10gPSB7XFxubW0vaHVnZV9tZW1vcnkuYzo4Mzc6I2lmZGVmIENPTkZJR19TSE1FTVxcbm1tL2h1Z2VfbWVtb3J5LmMtODM4LVxcdFxcdTAwMjZ6c3dwb3V0X2F0dHIuYXR0cixcXG4tLVxcbm1tL3NobWVtLmM9NDY9c3RhdGljIHN0cnVjdCB2ZnNtb3VudCAqc2htX21udCBfX3JvX2FmdGVyX2luaXQ7XFxubW0vc2htZW0uYy00Ny1cXG5tbS9zaG1lbS5jOjQ4OiNpZmRlZiBDT05GSUdfU0hNRU1cXG5tbS9zaG1lbS5jLTQ5LS8qXFxuLS1cXG5tbS9zaG1lbS5jPTU2NTI9X19zZXR1cChcXFwidGhwX3NobWVtPVxcXCIsIHNldHVwX3RocF9zaG1lbSk7XFxuLS1cXG5tbS9zaG1lbS5jLTU2NTUtXFxubW0vc2htZW0uYzo1NjU2OiNlbHNlIC8qICFDT05GSUdfU0hNRU0gKi9cXG5tbS9zaG1lbS5jLTU2NTctXFxuLS1cXG5tbS9zaG1lbS5jPTU3MjU9c3RhdGljIGlubGluZSBzdHJ1Y3QgaW5vZGUgKnNobWVtX2dldF9pbm9kZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4tLVxcbm1tL3NobWVtLmMtNTczMi1cXG5tbS9zaG1lbS5jOjU3MzM6I2VuZGlmIC8qIENPTkZJR19TSE1FTSAqL1xcbm1tL3NobWVtLmMtNTczNC1cXG4tLVxcbm1tL3NobWVtLmM9NTg4Nz1zdHJ1Y3QgZm9saW8gKnNobWVtX3JlYWRfZm9saW9fZ2ZwKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxubW0vc2htZW0uYy01ODg5LXtcXG5tbS9zaG1lbS5jOjU4OTA6I2lmZGVmIENPTkZJR19TSE1FTVxcbm1tL3NobWVtLmMtNTg5MS1cXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbWFwcGluZy1cXHUwMDNlaG9zdDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDU6MzM6MzEuNzY1OTI1NTU3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwMTExNjAyMzM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBLZXJuZWwgQ29kZSBmb3IgQ29uZmlndXJhdGlvbiBhbmQgRnV6emluZyBUYXJnZXRzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBGaXJzdCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZSBpbnRyb2R1Y2VzIGFueSBub24tc3RhbmRhcmQga2VybmVsIGNvbmZpZ3VyYXRpb25zLiAgSSBrbm93IGBDT05GSUdfU0hNRU1gIGlzIHByZXR0eSBtdWNoIGEgZ2l2ZW4sIGFuZCBmcm9tIGEgcXVpY2sgc2NhbiwgaXQgbG9va3MgbGlrZSB0aGVyZSBhcmVuJ3QgYW55ICpzcGVjaWZpYyogY29uZmlnIG9wdGlvbnMgYmV5b25kIHRoZSB1c3VhbCBrZXJuZWwgYnVpbGQgc3R1ZmYuIFNvIEkgY2FuIGVpdGhlciBsaXN0IGBTSE1FTWAgb3IsIGlmIHRoYXQgZmVlbHMgcmVkdW5kYW50LCBhbiBlbXB0eSBsaXN0IHdpbGwgc3VmZmljZS4gVGhlIGluc3RydWN0aW9ucyBhcmUgY2xlYXI6IGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzLCBkb24ndCBhc3N1bWUgYW55dGhpbmcsIGFuZCBtYWtlIHN1cmUgdG8gaW5jbHVkZSBhbnkgXCJkZXBlbmRzIG9uXCIgbGluZXMgZm9yIHBhcmVudCBzdWJzeXN0ZW1zIG5lZWRlZCBmb3IgYSBzdGF0aWMgYnVpbGQuXG5cbk5vdywgbG9va2luZyBhdCB0aGUgY29kZSwgYGRyaXZlcnMvY2hhci9tZW0uY2AgaGFzIGAvZGV2L3plcm9gIGFuZCBgL2Rldi9mdWxsYCwgd2hpY2ggYXJlIHVuY29uZGl0aW9uYWwuIGBmcy9zcGxpY2UuY2AgaXMgYWxzbyB1bmNvbmRpdGlvbmFsbHkgYnVpbHQsIHBhcnQgb2YgYGZzL01ha2VmaWxlYCBhcyBgb2JqLXlgLiBBbmQsIGFzIGV4cGVjdGVkLCBgbW0vc2htZW0uY2AgaXMgZW5hYmxlZCB2aWEgYENPTkZJR19TSE1FTWAsIGFuZCBJIGNhbiBsaXN0IGBTSE1FTWAuXG5cbk5leHQsIHRoZSBtb3JlIGludGVyZXN0aW5nIGJpdDogaWRlbnRpZnlpbmcgcG90ZW50aWFsIGZ1enppbmcgdGFyZ2V0cy4gVGhlIGdvYWwgaXMgdG8gZm9jdXMgb24gc3BlY2lmaWMsIHJlbGV2YW50IGZ1bmN0aW9ucywgbm90IGdlbmVyaWMgaG90LXBhdGggcm91dGluZXMuIFRoZSBwcmVmZXJlbmNlIGlzIGZvciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMg4oCTIHRoZXkncmUgdGhlIG9uZXMgd2l0aCBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLlxuXG5Tbywgd2hhdCdzIG5ldyBvciBtb2RpZmllZD8gV2VsbCwgSSBzZWU6XG5cbjEuICBgc3BsaWNlX3plcm9wYWdlX2ludG9fcGlwZWAgKGZzL3NwbGljZS5jKTogVGhpcyBpcyBub24tc3RhdGljIGFuZCBleHBvcnRlZCBpbiBgaW5jbHVkZS9saW51eC9zcGxpY2UuaGAsIHNvIGxvb2tzIGdvb2QuXG4yLiAgYHNwbGljZV9yZWFkX3plcm9gIChkcml2ZXJzL2NoYXIvbWVtLmMpOiBUaGlzIGlzIGEgc3RhdGljIGNhbGxiYWNrLCBidXQgaXQncyB0aGUgbmV3IGBmaWxlX29wZXJhdGlvbnNgIGNhbGxiYWNrIGZvciBgL2Rldi96ZXJvYCBhbmQgYC9kZXYvZnVsbGAsIHNwZWNpZmljYWxseSBgLnNwbGljZV9yZWFkYC4gV29ydGggY29uc2lkZXJpbmcuXG4zLiAgYHNobWVtX2ZpbGVfc3BsaWNlX3JlYWRgIChtbS9zaG1lbS5jKTogVGhpcyBmdW5jdGlvbiBjYWxscyBgc3BsaWNlX3plcm9wYWdlX2ludG9fcGlwZWAuXG5cbk15IHRob3VnaHQgaXMsIGFyZSB0aGVzZSBhcHByb3ByaWF0ZT8gYHNwbGljZV96ZXJvcGFnZV9pbnRvX3BpcGVgIGlzIG5vbi1zdGF0aWMsIHNvIGdvb2QuIEkgd2lsbCBoYXZlIHRvIGxvb2sgYXQgYHNobWVtX2ZpbGVfc3BsaWNlX3JlYWRgIG5vdyB0byBzZWUgaWYgaXQgaXMgaW5saW5lZCBvciBub24tc3RhdGljIGluIHRoZSBzb3VyY2UuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgc2htZW1fZmlsZV9zcGxpY2VfcmVhZGAgaW4gYG1tL3NobWVtLmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NjkyLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDA1OjMzOjQxLjg3NzUzMDg1MloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkxMjcwMTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2htZW1fZmlsZV9zcGxpY2VfcmVhZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zaG1lbS5jPTM0MDg9c3RhdGljIHNzaXplX3Qgc2htZW1fZmlsZV93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxcbi0tXFxubW0vc2htZW0uYy0zNDI5LVxcbm1tL3NobWVtLmM6MzQzMDpzdGF0aWMgc3NpemVfdCBzaG1lbV9maWxlX3NwbGljZV9yZWFkKHN0cnVjdCBmaWxlICppbiwgbG9mZl90ICpwcG9zLFxcbm1tL3NobWVtLmMtMzQzMS1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLFxcbi0tXFxubW0vc2htZW0uYz01MTAzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNobWVtX2ZpbGVfb3BlcmF0aW9ucyA9IHtcXG4tLVxcbm1tL3NobWVtLmMtNTExMS1cXHQuZnN5bmNcXHRcXHQ9IG5vb3BfZnN5bmMsXFxubW0vc2htZW0uYzo1MTEyOlxcdC5zcGxpY2VfcmVhZFxcdD0gc2htZW1fZmlsZV9zcGxpY2VfcmVhZCxcXG5tbS9zaG1lbS5jLTUxMTMtXFx0LnNwbGljZV93cml0ZVxcdD0gaXRlcl9maWxlX3NwbGljZV93cml0ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDU6MzM6NDEuOTI2NjYzNTgxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE0MzE0ODA1NzQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFJlY2VudCBDb2RlIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBpbnRvIHRoZXNlIGNoYW5nZXMsIGFuZCBoZXJlJ3MgbXkgdGFrZS4gYHNwbGljZV96ZXJvcGFnZV9pbnRvX3BpcGVgIGlzIHVuZGVuaWFibHkgYSBmdW5jdGlvbiBkZWZpbmVkIHdpdGhpbiBgZnMvc3BsaWNlLmNgIOKAkyB0aGF0J3MgY2xlYXIuIFNpbWlsYXJseSwgYHNwbGljZV9yZWFkX3plcm9gIGlzIHRoZSBuZXcgc3BsaWNlIHJlYWQgaGFuZGxlciwgcmVzaWRpbmcgaW4gYGRyaXZlcnMvY2hhci9tZW0uY2AuXG5cbkkgYWx3YXlzIGRvdWJsZS1jaGVjayB0aGVzZSB0aGluZ3MsIHNvIEkgd2VudCBiYWNrIGFuZCBjb25maXJtZWQgdGhhdCBpbiBgZnMvc3BsaWNlLmNgLCB3ZSdyZSBhbHNvIGRlYWxpbmcgd2l0aCB0aGUgYHplcm9fcGlwZV9idWZfb3BzYCBzdHJ1Y3QgYWxvbmdzaWRlIGBzcGxpY2VfemVyb3BhZ2VfaW50b19waXBlYCBmdW5jdGlvbi4gVGhlbiwgaW4gYGRyaXZlcnMvY2hhci9tZW0uY2AsIHdlIHNlZSBgc3BsaWNlX3JlYWRfemVyb2AgKGZ1bmN0aW9uKSwgYW5kIGluIGBtbS9zaG1lbS5jYCwgdGhlcmUncyBgc2htZW1fZmlsZV9zcGxpY2VfcmVhZGAgKGZ1bmN0aW9uKS5cblxuVGhpcyByZWFsbHkgZG9lcyBsb29rIGxpa2UgYSB3b3J0aHdoaWxlIGFyZWEgZm9yIGZ1enppbmcuIFRoZSBpbnRlbnQgaXMgdG8gZnVuZGFtZW50YWxseSBhbHRlciBob3cgd2UgaGFuZGxlIGAvZGV2L3plcm9gIGFuZCBgL2Rldi9mdWxsYCwgbW92aW5nIHRvd2FyZHMgZGlyZWN0IHplcm8tcGFnZSBzcGxpY2luZyBpbnRvIHBpcGVzIGluc3RlYWQgb2YgdXNpbmcgYGNvcHlfc3BsaWNlX3JlYWRgLiBBbmQgY3JpdGljYWxseSwgaXQncyBtYWtpbmcgYHNwbGljZV96ZXJvcGFnZV9pbnRvX3BpcGVgIG1vcmUgZ2VuZXJhbGl6ZWQsIGFsbG93aW5nIGl0cyB1c2UgYWNyb3NzIGRpZmZlcmVudCBmaWxlc3lzdGVtcyBhbmQgY2hhcmFjdGVyIGRldmljZXMuXG5cbkkgdGhpbmsgaXQncyB0aW1lIHRvIGxldmVyYWdlIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDU3LCJPdXRwdXRUb2tlbnMiOjE0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwNTozMzo1Ni4yNDE0NzIyMThaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjQ1NDkwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU0hNRU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzcGxpY2VfemVyb3BhZ2VfaW50b19waXBlXCIsXG4gICAgXCJzcGxpY2VfcmVhZF96ZXJvXCIsXG4gICAgXCJzaG1lbV9maWxlX3NwbGljZV9yZWFkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHplcm8gcGFnZSBwaXBlIHNwbGljaW5nIGxvZ2ljIGludG8gY29yZSBmcy9zcGxpY2UuYyBhbmQgdXBkYXRlcyAvZGV2L3plcm8gYW5kIC9kZXYvZnVsbCB0byB1c2Ugc3BsaWNlX3plcm9wYWdlX2ludG9fcGlwZSBkaXJlY3RseSB2aWEgdGhlIG5ldyBzcGxpY2VfcmVhZF96ZXJvIGltcGxlbWVudGF0aW9uIGluc3RlYWQgb2YgY29weV9zcGxpY2VfcmVhZC4gVGhpcyBhZmZlY3RzIGNvcmUgVkZTL3BpcGUgb3BlcmF0aW9ucyBhbmQgY2hhcmFjdGVyIGRldmljZSBoYW5kbGluZywgd2hpY2ggaXMgcmVhZGlseSByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU0hNRU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzcGxpY2VfemVyb3BhZ2VfaW50b19waXBlXCIsXG4gICAgXCJzcGxpY2VfcmVhZF96ZXJvXCIsXG4gICAgXCJzaG1lbV9maWxlX3NwbGljZV9yZWFkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHplcm8gcGFnZSBwaXBlIHNwbGljaW5nIGxvZ2ljIGludG8gY29yZSBmcy9zcGxpY2UuYyBhbmQgdXBkYXRlcyAvZGV2L3plcm8gYW5kIC9kZXYvZnVsbCB0byB1c2Ugc3BsaWNlX3plcm9wYWdlX2ludG9fcGlwZSBkaXJlY3RseSB2aWEgdGhlIG5ldyBzcGxpY2VfcmVhZF96ZXJvIGltcGxlbWVudGF0aW9uIGluc3RlYWQgb2YgY29weV9zcGxpY2VfcmVhZC4gVGhpcyBhZmZlY3RzIGNvcmUgVkZTL3BpcGUgb3BlcmF0aW9ucyBhbmQgY2hhcmFjdGVyIGRldmljZSBoYW5kbGluZywgd2hpY2ggaXMgcmVhZGlseSByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDA1OjMzOjU2LjMxNzkzMzYxNloiLCJTZXEiOjE3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDAzNjQ4Mzc4MjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwNTozMzo1Ni4zMTgzODE1MDZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0MDM2NDM4NTg2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgY29weV9zcGxpY2VfcmVhZCB3aXRoIGEgc3BlY2lhbGl6ZWQgc3BsaWNlX3JlYWRfemVybyBpbXBsZW1lbnRhdGlvbiBmb3IgL2Rldi96ZXJvIGFuZCAvZGV2L2Z1bGwsIG1vdmluZyBzcGxpY2VfemVyb3BhZ2VfaW50b19waXBlIGFuZCB6ZXJvX3BpcGVfYnVmX29wcyBmcm9tIG1tL3NobWVtLmMgaW50byBmcy9zcGxpY2UuYy5cXG5cXG4xLiBNZW1vcnkgSW5pdGlhbGl6YXRpb246XFxuLSBJbiBzcGxpY2VfemVyb3BhZ2VfaW50b19waXBlLCB0aGUgcGlwZSBidWZmZXIgaXMgaW5pdGlhbGl6ZWQgdXNpbmcgYSBkZXNpZ25hdGVkIGluaXRpYWxpemVyIChzdHJ1Y3QgcGlwZV9idWZmZXIpeyAuLi4gfSwgd2hpY2ggemVyb2VzIGFsbCB1bm1lbnRpb25lZCBzdHJ1Y3QgZmllbGRzIChmbGFncywgcHJpdmF0ZSkuXFxuLSBUaGUgcGFnZSByZWZlcmVuY2VkIGlzIFpFUk9fUEFHRSgwKSwgd2hpY2ggaXMgc3RhdGljYWxseSBhbGxvY2F0ZWQgYW5kIHplcm8taW5pdGlhbGl6ZWQuXFxuLSBJbiBzcGxpY2VfcmVhZF96ZXJvLCBhbGwgbG9jYWwgdmFyaWFibGVzICh0b3RhbCwgcG9zLCB1c2VkLCBucGFnZXMsIG4sIGxlbikgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS5cXG5cXG4yLiBLQVNBTiB2cyBLTVNBTiBBcHBsaWNhYmlsaXR5Olxcbi0gS01TQU4gZGV0ZWN0cyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBhbmQgaW5mby1sZWFrcy4gU2luY2UgYWxsIG1lbW9yeSBzcGxpY2VkIGludG8gdGhlIHBpcGUgaXMgZnJvbSB0aGUgZ2xvYmFsbHkgemVyb2VkIHBhZ2UgYW5kIGFsbCBzdHJ1Y3R1cmVzIGFuZCBsb2NhbCB2YXJpYWJsZXMgYXJlIGZ1bGx5IGluaXRpYWxpemVkLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaGF6YXJkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyBpbnRyb2R1Y2VkLlxcbi0gQW55IHBvdGVudGlhbCBwaXBlIGJvdW5kcywgcmVmZXJlbmNlIGNvdW50aW5nLCBvciBjb25jdXJyZW5jeSBpc3N1ZXMgYXJlIHdpdGhpbiB0aGUgc2NvcGUgb2YgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMuXFxuXFxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZCAoTmVlZHNLTVNBTj1mYWxzZSkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNTFmY2U1ZDZmNTM1MmQwMTdmODdiMTMwZjYwNzk4ZTAzYjU2Njc4NFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDI5IDA1OjMyOjUwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL21lbS5jIGIvZHJpdmVycy9jaGFyL21lbS5jXG5pbmRleCA2MzI1M2QxZGU1ZDcwLi42ZDNlZjM1OWIyZDdiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9jaGFyL21lbS5jXG4rKysgYi9kcml2ZXJzL2NoYXIvbWVtLmNcbkBAIC00NzEsNiArNDcxLDMxIEBAIHN0YXRpYyBzc2l6ZV90IHJlYWRfaXRlcl96ZXJvKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyKVxuIFx0cmV0dXJuIHdyaXR0ZW47XG4gfVxuIFxuK3N0YXRpYyBzc2l6ZV90IHNwbGljZV9yZWFkX3plcm8oc3RydWN0IGZpbGUgKmluLCBsb2ZmX3QgKnBwb3MsXG4rXHRcdFx0XHRzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLCBzaXplX3QgbGVuLFxuK1x0XHRcdFx0dW5zaWduZWQgaW50IGZsYWdzKVxuK3tcbitcdHNpemVfdCB0b3RhbCA9IDA7XG4rXHRsb2ZmX3QgcG9zID0gMDtcbitcdHNpemVfdCB1c2VkLCBucGFnZXM7XG4rXG4rXHR1c2VkID0gcGlwZV9idWZfdXNhZ2UocGlwZSk7XG4rXHRpZiAodXNlZCBcdTAwM2U9IHBpcGUtXHUwMDNlbWF4X3VzYWdlKVxuK1x0XHRyZXR1cm4gLUVBR0FJTjtcbitcdG5wYWdlcyA9IHBpcGUtXHUwMDNlbWF4X3VzYWdlIC0gdXNlZDtcbitcdGxlbiA9IG1pbl90KHNpemVfdCwgbGVuLCBucGFnZXMgKiBQQUdFX1NJWkUpO1xuK1xuK1x0d2hpbGUgKGxlbikge1xuK1x0XHRzaXplX3QgbiA9IHNwbGljZV96ZXJvcGFnZV9pbnRvX3BpcGUocGlwZSwgcG9zLCBsZW4pO1xuK1xuK1x0XHRwb3MgKz0gbjtcbitcdFx0dG90YWwgKz0gbjtcbitcdFx0bGVuIC09IG47XG4rXHR9XG4rXG4rXHRyZXR1cm4gdG90YWw7XG4rfVxuK1xuIHN0YXRpYyBzc2l6ZV90IHJlYWRfemVybyhzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZixcbiBcdFx0XHQgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXG4ge1xuQEAgLTY2OSw3ICs2OTQsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB6ZXJvX2ZvcHMgPSB7XG4gXHQucmVhZF9pdGVyXHQ9IHJlYWRfaXRlcl96ZXJvLFxuIFx0LnJlYWRcdFx0PSByZWFkX3plcm8sXG4gXHQud3JpdGVfaXRlclx0PSB3cml0ZV9pdGVyX3plcm8sXG4tXHQuc3BsaWNlX3JlYWRcdD0gY29weV9zcGxpY2VfcmVhZCxcbitcdC5zcGxpY2VfcmVhZFx0PSBzcGxpY2VfcmVhZF96ZXJvLFxuIFx0LnNwbGljZV93cml0ZVx0PSBzcGxpY2Vfd3JpdGVfemVybyxcbiBcdC5tbWFwX3ByZXBhcmVcdD0gbW1hcF96ZXJvX3ByZXBhcmUsXG4gXHQuZ2V0X3VubWFwcGVkX2FyZWEgPSBnZXRfdW5tYXBwZWRfYXJlYV96ZXJvLFxuQEAgLTY4Miw3ICs3MDcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmdWxsX2ZvcHMgPSB7XG4gXHQubGxzZWVrXHRcdD0gZnVsbF9sc2VlayxcbiBcdC5yZWFkX2l0ZXJcdD0gcmVhZF9pdGVyX3plcm8sXG4gXHQud3JpdGVcdFx0PSB3cml0ZV9mdWxsLFxuLVx0LnNwbGljZV9yZWFkXHQ9IGNvcHlfc3BsaWNlX3JlYWQsXG4rXHQuc3BsaWNlX3JlYWRcdD0gc3BsaWNlX3JlYWRfemVybyxcbiB9O1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWVtZGV2IHtcbmRpZmYgLS1naXQgYS9mcy9zcGxpY2UuYyBiL2ZzL3NwbGljZS5jXG5pbmRleCA5ZDhmNjNlMmZkMWFiLi5iNmVhOThjYzYyZmQ1IDEwMDY0NFxuLS0tIGEvZnMvc3BsaWNlLmNcbisrKyBiL2ZzL3NwbGljZS5jXG5AQCAtMzk4LDYgKzM5OCw2OCBAQCBzc2l6ZV90IGNvcHlfc3BsaWNlX3JlYWQoc3RydWN0IGZpbGUgKmluLCBsb2ZmX3QgKnBwb3MsXG4gfVxuIEVYUE9SVF9TWU1CT0woY29weV9zcGxpY2VfcmVhZCk7XG4gXG4rLypcbisgKiBQaXBlIGJ1ZmZlciBvcGVyYXRpb25zIGZvciBzcGxpY2luZyB6ZXJvIHBhZ2VzIGludG8gYSBwaXBlLCB1c2VkIHRvXG4rICogb3B0aW1pemUgcmVhZHMgZnJvbSBzcGFyc2UgaG9sZXMgaW4gZmlsZXMgYW5kIGZyb20gemVybyBkZXZpY2VzIHN1Y2ggYXNcbisgKiAvZGV2L3plcm8gYW5kIC9kZXYvZnVsbC5cbisgKi9cbitzdGF0aWMgYm9vbCB6ZXJvX3BpcGVfYnVmX2dldChzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLFxuK1x0XHRcdCAgICAgIHN0cnVjdCBwaXBlX2J1ZmZlciAqYnVmKVxuK3tcbitcdHJldHVybiB0cnVlO1xuK31cbitcbitzdGF0aWMgdm9pZCB6ZXJvX3BpcGVfYnVmX3JlbGVhc2Uoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSxcbitcdFx0XHRcdCAgc3RydWN0IHBpcGVfYnVmZmVyICpidWYpXG4re1xuK31cbitcbitzdGF0aWMgYm9vbCB6ZXJvX3BpcGVfYnVmX3RyeV9zdGVhbChzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLFxuK1x0XHRcdFx0ICAgIHN0cnVjdCBwaXBlX2J1ZmZlciAqYnVmKVxuK3tcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4rY29uc3Qgc3RydWN0IHBpcGVfYnVmX29wZXJhdGlvbnMgemVyb19waXBlX2J1Zl9vcHMgPSB7XG4rXHQucmVsZWFzZVx0PSB6ZXJvX3BpcGVfYnVmX3JlbGVhc2UsXG4rXHQudHJ5X3N0ZWFsXHQ9IHplcm9fcGlwZV9idWZfdHJ5X3N0ZWFsLFxuK1x0LmdldFx0XHQ9IHplcm9fcGlwZV9idWZfZ2V0LFxuK307XG4rXG4rLyoqXG4rICogc3BsaWNlX3plcm9wYWdlX2ludG9fcGlwZSAtIHNwbGljZSBhIHplcm8gcGFnZSBpbnRvIGEgcGlwZVxuKyAqIEBwaXBlOiBwaXBlIHRvIHNwbGljZSBpbnRvXG4rICogQGZwb3M6IGZpbGUgcG9zaXRpb25cbisgKiBAc2l6ZTogbnVtYmVyIG9mIGJ5dGVzIHRvIHNwbGljZVxuKyAqXG4rICogU3BsaWNlIGF0IG1vc3Qgb25lIHBhZ2Ugb2YgemVyb2VzIGludG8gdGhlIHBpcGUuICBUaGUgemVybyBwYWdlIGlzIG5vdFxuKyAqIHJlZmNvdW50ZWQsIHNvIEB6ZXJvX3BpcGVfYnVmX29wcyBtdXN0IGJlIHVzZWQgdG8gYXZvaWQgdGFraW5nIGFcbisgKiByZWZlcmVuY2Ugb24gaXQuXG4rICpcbisgKiBSZXR1cm46IHRoZSBudW1iZXIgb2YgYnl0ZXMgc3BsaWNlZC5cbisgKi9cbitzaXplX3Qgc3BsaWNlX3plcm9wYWdlX2ludG9fcGlwZShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLFxuK1x0XHRcdFx0IGxvZmZfdCBmcG9zLCBzaXplX3Qgc2l6ZSlcbit7XG4rXHRzaXplX3Qgb2Zmc2V0ID0gZnBvcyBcdTAwMjYgflBBR0VfTUFTSztcbitcbitcdHNpemUgPSBtaW5fdChzaXplX3QsIHNpemUsIFBBR0VfU0laRSAtIG9mZnNldCk7XG4rXG4rXHRpZiAoIXBpcGVfaXNfZnVsbChwaXBlKSkge1xuK1x0XHRzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1ZiA9IHBpcGVfaGVhZF9idWYocGlwZSk7XG4rXG4rXHRcdCpidWYgPSAoc3RydWN0IHBpcGVfYnVmZmVyKSB7XG4rXHRcdFx0Lm9wc1x0PSBcdTAwMjZ6ZXJvX3BpcGVfYnVmX29wcyxcbitcdFx0XHQucGFnZVx0PSBaRVJPX1BBR0UoMCksXG4rXHRcdFx0Lm9mZnNldFx0PSBvZmZzZXQsXG4rXHRcdFx0Lmxlblx0PSBzaXplLFxuK1x0XHR9O1xuK1x0XHRwaXBlLVx1MDAzZWhlYWQrKztcbitcdH1cbitcbitcdHJldHVybiBzaXplO1xuK31cbitcbiBjb25zdCBzdHJ1Y3QgcGlwZV9idWZfb3BlcmF0aW9ucyBkZWZhdWx0X3BpcGVfYnVmX29wcyA9IHtcbiBcdC5yZWxlYXNlXHQ9IGdlbmVyaWNfcGlwZV9idWZfcmVsZWFzZSxcbiBcdC50cnlfc3RlYWxcdD0gZ2VuZXJpY19waXBlX2J1Zl90cnlfc3RlYWwsXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zcGxpY2UuaCBiL2luY2x1ZGUvbGludXgvc3BsaWNlLmhcbmluZGV4IDlkZWM0ODYxZDA5ZjYuLmYxZDRhZWZhNGVjMmMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NwbGljZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NwbGljZS5oXG5AQCAtMTA4LDQgKzEwOCw3IEBAIGV4dGVybiB2b2lkIHNwbGljZV9zaHJpbmtfc3BkKHN0cnVjdCBzcGxpY2VfcGlwZV9kZXNjICopO1xuIFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgcGlwZV9idWZfb3BlcmF0aW9ucyBwYWdlX2NhY2hlX3BpcGVfYnVmX29wcztcbiBleHRlcm4gY29uc3Qgc3RydWN0IHBpcGVfYnVmX29wZXJhdGlvbnMgZGVmYXVsdF9waXBlX2J1Zl9vcHM7XG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBwaXBlX2J1Zl9vcGVyYXRpb25zIHplcm9fcGlwZV9idWZfb3BzO1xuK3NpemVfdCBzcGxpY2VfemVyb3BhZ2VfaW50b19waXBlKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsIGxvZmZfdCBmcG9zLFxuK1x0XHRcdFx0IHNpemVfdCBzaXplKTtcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uY1xuaW5kZXggOTAwMWFhZjNiN2I5NC4uMzlkOGRmZWZiZTlmNSAxMDA2NDRcbi0tLSBhL21tL3NobWVtLmNcbisrKyBiL21tL3NobWVtLmNcbkBAIC0zNDI3LDUxICszNDI3LDYgQEAgc3RhdGljIHNzaXplX3Qgc2htZW1fZmlsZV93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tc3RhdGljIGJvb2wgemVyb19waXBlX2J1Zl9nZXQoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSxcbi1cdFx0XHQgICAgICBzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1Zilcbi17XG4tXHRyZXR1cm4gdHJ1ZTtcbi19XG4tXG4tc3RhdGljIHZvaWQgemVyb19waXBlX2J1Zl9yZWxlYXNlKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsXG4tXHRcdFx0XHQgIHN0cnVjdCBwaXBlX2J1ZmZlciAqYnVmKVxuLXtcbi19XG4tXG4tc3RhdGljIGJvb2wgemVyb19waXBlX2J1Zl90cnlfc3RlYWwoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSxcbi1cdFx0XHRcdCAgICBzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1Zilcbi17XG4tXHRyZXR1cm4gZmFsc2U7XG4tfVxuLVxuLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGlwZV9idWZfb3BlcmF0aW9ucyB6ZXJvX3BpcGVfYnVmX29wcyA9IHtcbi1cdC5yZWxlYXNlXHQ9IHplcm9fcGlwZV9idWZfcmVsZWFzZSxcbi1cdC50cnlfc3RlYWxcdD0gemVyb19waXBlX2J1Zl90cnlfc3RlYWwsXG4tXHQuZ2V0XHRcdD0gemVyb19waXBlX2J1Zl9nZXQsXG4tfTtcbi1cbi1zdGF0aWMgc2l6ZV90IHNwbGljZV96ZXJvcGFnZV9pbnRvX3BpcGUoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSxcbi1cdFx0XHRcdFx0bG9mZl90IGZwb3MsIHNpemVfdCBzaXplKVxuLXtcbi1cdHNpemVfdCBvZmZzZXQgPSBmcG9zIFx1MDAyNiB+UEFHRV9NQVNLO1xuLVxuLVx0c2l6ZSA9IG1pbl90KHNpemVfdCwgc2l6ZSwgUEFHRV9TSVpFIC0gb2Zmc2V0KTtcbi1cbi1cdGlmICghcGlwZV9pc19mdWxsKHBpcGUpKSB7XG4tXHRcdHN0cnVjdCBwaXBlX2J1ZmZlciAqYnVmID0gcGlwZV9oZWFkX2J1ZihwaXBlKTtcbi1cbi1cdFx0KmJ1ZiA9IChzdHJ1Y3QgcGlwZV9idWZmZXIpIHtcbi1cdFx0XHQub3BzXHQ9IFx1MDAyNnplcm9fcGlwZV9idWZfb3BzLFxuLVx0XHRcdC5wYWdlXHQ9IFpFUk9fUEFHRSgwKSxcbi1cdFx0XHQub2Zmc2V0XHQ9IG9mZnNldCxcbi1cdFx0XHQubGVuXHQ9IHNpemUsXG4tXHRcdH07XG4tXHRcdHBpcGUtXHUwMDNlaGVhZCsrO1xuLVx0fVxuLVxuLVx0cmV0dXJuIHNpemU7XG4tfVxuLVxuIHN0YXRpYyBzc2l6ZV90IHNobWVtX2ZpbGVfc3BsaWNlX3JlYWQoc3RydWN0IGZpbGUgKmluLCBsb2ZmX3QgKnBwb3MsXG4gXHRcdFx0XHQgICAgICBzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLFxuIFx0XHRcdFx0ICAgICAgc2l6ZV90IGxlbiwgdW5zaWduZWQgaW50IGZsYWdzKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDU6MzM6NTYuMzE4MzgyMzQ2WiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwMTEwNTY2MzIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlZmFjdG9yaW5nIGAvZGV2L3plcm9gIGFuZCBgL2Rldi9mdWxsYCBTcGxpY2UgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGNsZWFuaW5nIHVwIHNvbWUgY29kZSwgbW92aW5nIGBzcGxpY2VfemVyb3BhZ2VfaW50b19waXBlYCBhbmQgYHplcm9fcGlwZV9idWZfb3BzYCBvdXQgb2YgYG1tL3NobWVtLmNgIGFuZCBpbnRvIGBmcy9zcGxpY2UuY2AuIFRoYXQgbWFrZXMgc2Vuc2U7IGl0J3MgbW9yZSBnZW5lcmFsIGFuZCBiZWxvbmdzIHRoZXJlIHNpbmNlIGl0J3MgYWJvdXQgdGhlIHNwbGljZSBmdW5jdGlvbmFsaXR5IGl0c2VsZi4gV2UncmUgYWxzbyBleHBvcnRpbmcgdGhlbSB2aWEgYGluY2x1ZGUvbGludXgvc3BsaWNlLmhgLCB3aGljaCBpcyBjcnVjaWFsIGZvciBtYWtpbmcgdGhlbSBhY2Nlc3NpYmxlIHRvIGAvZGV2L3plcm9gIGFuZCBgL2Rldi9mdWxsYC4gQW5kIGZpbmFsbHksIGltcGxlbWVudGluZyBgc3BsaWNlX3JlYWRfemVyb2Agd2l0aGluIGBkcml2ZXJzL2NoYXIvbWVtLmNgLiBMZXQncyBkaWcgaW50byBob3cgYHNwbGljZV9yZWFkX3plcm9gIGlzIGltcGxlbWVudGVkLlxuXG5Mb29raW5nIGF0IGBzcGxpY2VfcmVhZF96ZXJvYCwgSSBzZWUgdGhlIHVzdWFsIHN1c3BlY3RzOiBjaGVja2luZyBwaXBlIHVzYWdlLCBjYWxjdWxhdGluZyBob3cgbXVjaCB0byByZWFkLCBhbmQgdGhlbiB0aGlzIGBzcGxpY2VfemVyb3BhZ2VfaW50b19waXBlYCBjYWxsIHdpdGhpbiBhIGxvb3AuIFRoZSBsb29wIGxvb2tzIHNvdW5kLCBoYW5kbGluZyBwb3RlbnRpYWwgcGFydGlhbCBwYWdlIHJlYWRzLiBCdXQsIHRoYXQgYHNwbGljZV96ZXJvcGFnZV9pbnRvX3BpcGVgIGZ1bmN0aW9uIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLi4uXG5cbkFoLCBpbiBgc3BsaWNlX3plcm9wYWdlX2ludG9fcGlwZWAsIGEgc3RydWN0IGxpdGVyYWwgaXMgdXNlZCB0byBpbml0aWFsaXplIHRoZSBgcGlwZV9idWZmZXJgOlxuYCpidWYgPSAoc3RydWN0IHBpcGVfYnVmZmVyKSB7IC5vcHMgPSBcdTAwMjZ6ZXJvX3BpcGVfYnVmX29wcywgLnBhZ2UgPSBaRVJPX1BBR0UoMCksIC5vZmZzZXQgPSBvZmZzZXQsIC5sZW4gPSBzaXplLCB9O2BcblxuVGhlIGtleSBoZXJlIGlzIHRoYXQgaXQgc2V0cyBgLnBhZ2UgPSBaRVJPX1BBR0UoMClgLiBSaWdodCwgYFpFUk9fUEFHRSgwKWAgaXMgKnRoZSogZ2xvYmFsLCB6ZXJvLWZpbGxlZCBwYWdlLiBUaGlzIGF2b2lkcyBhbnkgYWN0dWFsIG1lbW9yeSBhbGxvY2F0aW9uLiBXZSdyZSBqdXN0IHBvaW50aW5nIHRvIGEgcHJlLWV4aXN0aW5nIHBhZ2UgZmlsbGVkIHdpdGggemVyb3MuIFRoYXQncyBhIGNsZXZlciBvcHRpbWl6YXRpb24sIGFuZCBpdCdzIHdoYXQgbWFrZXMgcmVhZGluZyBmcm9tIGAvZGV2L3plcm9gIGFuZCBgL2Rldi9mdWxsYCBzbyBlZmZpY2llbnQuIEFuZCBzaW5jZSBhIHN0cnVjdCBsaXRlcmFsIGlzIHVzZWQsIGFsbCB1bmFzc2lnbmVkIGZpZWxkcyBhcmUgemVyby1pbml0aWFsaXplZC4gTm93LCBsZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGBzdHJ1Y3QgcGlwZV9idWZmZXJgIGRlZmluaXRpb24ganVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhhdCBhbnkgcG90ZW50aWFsbHkgcmVsZXZhbnQgZmllbGRzIGFyZSBleHBsaWNpdGx5IGhhbmRsZWQgb3IgcHJvcGVybHkgemVyb2VkIGJ5IHRoZSBsaXRlcmFsLiBJIGNhbid0IGJlIHRvbyBjYXJlZnVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDY2LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDU6MzQ6MTYuNDI4OTUwNjU4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTM0NzQ5NDQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBwaXBlX2J1ZmZlciBcXFxce1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3BpcGVfZnNfaS5oLTI1LSAqKi9cXG5pbmNsdWRlL2xpbnV4L3BpcGVfZnNfaS5oOjI2OnN0cnVjdCBwaXBlX2J1ZmZlciB7XFxuaW5jbHVkZS9saW51eC9waXBlX2ZzX2kuaC0yNy1cXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDU6MzQ6MTguNTYzNzEwNTQzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ0MzY4NzQxNjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gUGlwZSBGUyBJbnRlcm5hbHMqKlxuXG5Pa2F5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGtlcm5lbCdzIHBpcGUgZmlsZXN5c3RlbSBvcGVyYXRlcy4gVGltZSB0byBjcmFjayBvcGVuIHRoZSBzb3VyY2UuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IGBpbmNsdWRlL2xpbnV4L3BpcGVfZnNfaS5oYCwgc3RhcnRpbmcgYXJvdW5kIGxpbmUgMjYuIFRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyBhbmQgbGlrZWx5IHNvbWUgY3J1Y2lhbCBtYWNybyBkZWZpbml0aW9ucyByZXNpZGUgZm9yIHRoZXNlIHR5cGVzIG9mIHN1YnN5c3RlbXMuIE15IGludHVpdGlvbiBzYXlzIHRoYXQncyB3aGVyZSBJIGNhbiBzdGFydCB1bnRhbmdsaW5nIHRoZSBpbnRlcmFjdGlvbnMgd2l0aGluIHRoZSBwaXBlIGZpbGVzeXN0ZW0uIFVuZGVyc3RhbmRpbmcgdGhlc2UgbG93LWxldmVsIGRldGFpbHMgd2lsbCBjbGFyaWZ5IGhvdyBwaXBlcyBhcmUgaW1wbGVtZW50ZWQsIGVzcGVjaWFsbHkgdGhlIGRhdGEgc3RydWN0dXJlcyB1c2VkIHRvIG1hbmFnZSB0aGUgYnVmZmVycyBhbmQgcmVhZGVyL3dyaXRlciBzeW5jaHJvbml6YXRpb24uIExldCdzIHNlZSB3aGF0IGBwaXBlX2ZzX2kuaGAgcmV2ZWFscyFcblxuXG4iLCJJbnB1dFRva2VucyI6NTI5NCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDA1OjM0OjIzLjAwMDU4NzE4MVoiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjA1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L3BpcGVfZnNfaS5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDI1OlxcdCAqKi9cXG4gIDI2OlxcdHN0cnVjdCBwaXBlX2J1ZmZlciB7XFxuICAyNzpcXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG4gIDI4OlxcdFxcdHVuc2lnbmVkIGludCBvZmZzZXQsIGxlbjtcXG4gIDI5OlxcdFxcdGNvbnN0IHN0cnVjdCBwaXBlX2J1Zl9vcGVyYXRpb25zICpvcHM7XFxuICAzMDpcXHRcXHR1bnNpZ25lZCBpbnQgZmxhZ3M7XFxuICAzMTpcXHRcXHR1bnNpZ25lZCBsb25nIHByaXZhdGU7XFxuICAzMjpcXHR9O1xcbiAgMzM6XFx0XFxuICAzNDpcXHQvKlxcbiAgMzU6XFx0ICogUmVhbGx5IG9ubHkgYWxwaGEgbmVlZHMgMzItYml0IGZpZWxkcywgYnV0XFxuICAzNjpcXHQgKiBtaWdodCBhcyB3ZWxsIGRvIGl0IGZvciA2NC1iaXQgYXJjaGl0ZWN0dXJlc1xcbiAgMzc6XFx0ICogc2luY2UgdGhhdCdzIHdoYXQgd2UndmUgaGlzdG9yaWNhbGx5IGRvbmUsXFxuICAzODpcXHQgKiBhbmQgaXQgbWFrZXMgJ2hlYWRfdGFpbCcgYWx3YXlzIGJlIGEgc2ltcGxlXFxuICAzOTpcXHQgKiAndW5zaWduZWQgbG9uZycuXFxuICA0MDpcXHQgKi9cXG4gIDQxOlxcdCNpZmRlZiBDT05GSUdfNjRCSVRcXG4gIDQyOlxcdHR5cGVkZWYgdW5zaWduZWQgaW50IHBpcGVfaW5kZXhfdDtcXG4gIDQzOlxcdCNlbHNlXFxuICA0NDpcXHR0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHBpcGVfaW5kZXhfdDtcXG4gIDQ1OlxcdCNlbmRpZlxcbiAgNDY6XFx0XFxuICA0NzpcXHQvKipcXG4gIDQ4OlxcdCAqXFx0c3RydWN0IHBpcGVfaW5kZXggLSBwaXBlIGluZGVjZXNcXG4gIDQ5OlxcdCAqXFx0QGhlYWQ6IFRoZSBwb2ludCBvZiBidWZmZXIgcHJvZHVjdGlvblxcbiAgNTA6XFx0ICpcXHRAdGFpbDogVGhlIHBvaW50IG9mIGJ1ZmZlciBjb25zdW1wdGlvblxcbiAgNTE6XFx0ICpcXHRAaGVhZF90YWlsOiB1bnNpZ25lZCBsb25nIHVuaW9uIG9mIEBoZWFkIGFuZCBAdGFpbFxcbiAgNTI6XFx0ICovXFxuICA1MzpcXHR1bmlvbiBwaXBlX2luZGV4IHtcXG4gIDU0OlxcdFxcdHVuc2lnbmVkIGxvbmcgaGVhZF90YWlsO1xcbiAgNTU6XFx0XFx0c3RydWN0IHtcXG4gIDU2OlxcdFxcdFxcdHBpcGVfaW5kZXhfdCBoZWFkO1xcbiAgNTc6XFx0XFx0XFx0cGlwZV9pbmRleF90IHRhaWw7XFxuICA1ODpcXHRcXHR9O1xcbiAgNTk6XFx0fTtcXG4gIDYwOlxcdFxcbiAgNjE6XFx0LyoqXFxuICA2MjpcXHQgKlxcdHN0cnVjdCBwaXBlX2lub2RlX2luZm8gLSBhIGxpbnV4IGtlcm5lbCBwaXBlXFxuICA2MzpcXHQgKlxcdEBtdXRleDogbXV0ZXggcHJvdGVjdGluZyB0aGUgd2hvbGUgdGhpbmdcXG4gIDY0OlxcdCAqXFx0QHJkX3dhaXQ6IHJlYWRlciB3YWl0IHBvaW50IGluIGNhc2Ugb2YgZW1wdHkgcGlwZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwNTozNDoyMy4wMDA2NzEyMjFaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjk3Nzg1Mzk3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEaXZpbmcgaW50byBzaG1lbSdzIFNwbGljZSBJbXBsZW1lbnRhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBzaGFyZWQgbWVtb3J5IChzaG1lbSkgdXRpbGl6ZXMgYHNwbGljZV96ZXJvcGFnZV9pbnRvX3BpcGVgIGFuZCBob3cgdGhhdCdzIGludGVyYWN0aW5nIHdpdGggYHNwbGljZV9yZWFkX3plcm9gLiBHaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIGtlcm5lbCBpbnRlcm5hbHMsIEknbGwgbmVlZCBhIHNvbGlkIGdyaXAgb24gdGhlIGxvdy1sZXZlbCBkZXRhaWxzIG9mIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGludGVydHdpbmVkLiBTbywgbXkgc3RhcnRpbmcgcG9pbnQgaXMgZ29pbmcgdG8gYmUgYG1tL3NobWVtLmNgLCB0aGF0J3Mgd2hlcmUgYHNobWVtX2ZpbGVfc3BsaWNlX3JlYWRgIHdpbGwgYmUgZGVmaW5lZC4gSXQncyB0aGUgbHluY2hwaW4gSSdtIGFmdGVyLCB0aGUgZnVuY3Rpb24gdGhhdCByZXZlYWxzIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiBzaG1lbSwgc3BsaWNpbmcsIGFuZCB0aGUgemVyby1wYWdlIG9wdGltaXphdGlvbi4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSBob3cgdGhleSdyZSBtYWtpbmcgdGhpcyBtYWdpYyBoYXBwZW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwMTQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDA1OjM0OjI1Ljk3ODUyNzk0MloiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzc5NDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3NobWVtLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzQyNSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzQyNTpcXHR1bmxvY2s6XFxuMzQyNjpcXHRcXHRpbm9kZV91bmxvY2soaW5vZGUpO1xcbjM0Mjc6XFx0XFx0cmV0dXJuIHJldDtcXG4zNDI4OlxcdH1cXG4zNDI5OlxcdFxcbjM0MzA6XFx0c3RhdGljIHNzaXplX3Qgc2htZW1fZmlsZV9zcGxpY2VfcmVhZChzdHJ1Y3QgZmlsZSAqaW4sIGxvZmZfdCAqcHBvcyxcXG4zNDMxOlxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsXFxuMzQzMjpcXHRcXHRcXHRcXHRcXHQgICAgICBzaXplX3QgbGVuLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuMzQzMzpcXHR7XFxuMzQzNDpcXHRcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShpbik7XFxuMzQzNTpcXHRcXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGlub2RlLVxcdTAwM2VpX21hcHBpbmc7XFxuMzQzNjpcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gTlVMTDtcXG4zNDM3OlxcdFxcdHNpemVfdCB0b3RhbF9zcGxpY2VkID0gMCwgdXNlZCwgbnBhZ2VzLCBuLCBwYXJ0O1xcbjM0Mzg6XFx0XFx0bG9mZl90IGlzaXplO1xcbjM0Mzk6XFx0XFx0aW50IGVycm9yID0gMDtcXG4zNDQwOlxcdFxcbjM0NDE6XFx0XFx0LyogV29yayBvdXQgaG93IG11Y2ggZGF0YSB3ZSBjYW4gYWN0dWFsbHkgYWRkIGludG8gdGhlIHBpcGUgKi9cXG4zNDQyOlxcdFxcdHVzZWQgPSBwaXBlX2J1Zl91c2FnZShwaXBlKTtcXG4zNDQzOlxcdFxcdG5wYWdlcyA9IG1heF90KHNzaXplX3QsIHBpcGUtXFx1MDAzZW1heF91c2FnZSAtIHVzZWQsIDApO1xcbjM0NDQ6XFx0XFx0bGVuID0gbWluX3Qoc2l6ZV90LCBsZW4sIG5wYWdlcyAqIFBBR0VfU0laRSk7XFxuMzQ0NTpcXHRcXG4zNDQ2OlxcdFxcdGRvIHtcXG4zNDQ3OlxcdFxcdFxcdGJvb2wgZmFsbGJhY2tfcGFnZV9zcGxpY2UgPSBmYWxzZTtcXG4zNDQ4OlxcdFxcdFxcdHN0cnVjdCBwYWdlICpwYWdlID0gTlVMTDtcXG4zNDQ5OlxcdFxcdFxcdHBnb2ZmX3QgaW5kZXg7XFxuMzQ1MDpcXHRcXHRcXHRzaXplX3Qgc2l6ZTtcXG4zNDUxOlxcdFxcbjM0NTI6XFx0XFx0XFx0aWYgKCpwcG9zIFxcdTAwM2U9IGlfc2l6ZV9yZWFkKGlub2RlKSlcXG4zNDUzOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjM0NTQ6XFx0XFxuMzQ1NTpcXHRcXHRcXHRpbmRleCA9ICpwcG9zIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuMzQ1NjpcXHRcXHRcXHRlcnJvciA9IHNobWVtX2dldF9mb2xpbyhpbm9kZSwgaW5kZXgsIDAsIFxcdTAwMjZmb2xpbywgU0dQX1JFQUQpO1xcbjM0NTc6XFx0XFx0XFx0aWYgKGVycm9yKSB7XFxuMzQ1ODpcXHRcXHRcXHRcXHRpZiAoZXJyb3IgPT0gLUVJTlZBTClcXG4zNDU5OlxcdFxcdFxcdFxcdFxcdGVycm9yID0gMDtcXG4zNDYwOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjM0NjE6XFx0XFx0XFx0fVxcbjM0NjI6XFx0XFx0XFx0aWYgKGZvbGlvKSB7XFxuMzQ2MzpcXHRcXHRcXHRcXHRmb2xpb191bmxvY2soZm9saW8pO1xcbjM0NjQ6XFx0XFxuMzQ2NTpcXHRcXHRcXHRcXHRwYWdlID0gZm9saW9fZmlsZV9wYWdlKGZvbGlvLCBpbmRleCk7XFxuMzQ2NjpcXHRcXHRcXHRcXHRpZiAoUGFnZUhXUG9pc29uKHBhZ2UpKSB7XFxuMzQ2NzpcXHRcXHRcXHRcXHRcXHRlcnJvciA9IC1FSU87XFxuMzQ2ODpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4zNDY5OlxcdFxcdFxcdFxcdH1cXG4zNDcwOlxcdFxcbjM0NzE6XFx0XFx0XFx0XFx0aWYgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pIFxcdTAwMjZcXHUwMDI2XFxuMzQ3MjpcXHRcXHRcXHRcXHQgICAgZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpXFxuMzQ3MzpcXHRcXHRcXHRcXHRcXHRmYWxsYmFja19wYWdlX3NwbGljZSA9IHRydWU7XFxuMzQ3NDpcXHRcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDA1OjM0OjI1Ljk3OTkxMDczMloiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMzc5ODU5NTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgRGVlcGVyIGludG8gYHNobWVtX2ZpbGVfc3BsaWNlX3JlYWRgKipcblxuQWxyaWdodCwgc28gdGhlIGZvY3VzIGlzIG5vdyBvbiBtZXRpY3Vsb3VzbHkgZXhhbWluaW5nIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgc2htZW1fZmlsZV9zcGxpY2VfcmVhZGAuIFdlJ3ZlIGFscmVhZHkgZ290IGEgZ29vZCBoYW5kbGUgb24gc29tZSBhc3BlY3RzLCBidXQgdGhlIGRldmlscyBhbHdheXMgaW4gdGhlIGRldGFpbHMsIGlzbid0IGl0PyBMZXQncyBhc3N1bWUgd2UncmUgYWxyZWFkeSBmYW1pbGlhciB3aXRoIGl0cyBjb3JlIGZ1bmN0aW9uYWxpdHkuIE5vdyBJIHdhbnQgdG8gdGhvcm91Z2hseSBkaXNzZWN0IHRoZSBmdW5jdGlvbiwgcHJvYmFibHkgdG8gY2F0Y2ggc29tZXRoaW5nIHNwZWNpZmljLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3Qgb3Zlcmxvb2tpbmcgYW55IHN1YnRsZSBlZGdlIGNhc2VzLCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIChlc3BlY2lhbGx5IHdpdGggc2hhcmVkIG1lbW9yeSBvcGVyYXRpb25zKSwgbWVtb3J5IGxlYWtzLCBvciBvYnNjdXJlIG9wdGltaXphdGlvbnMgKG9yIGxhY2sgdGhlcmVvZikgdGhhdCBjb3VsZCBiZSBjYXVzaW5nIGEgcGVyZm9ybWFuY2UgYm90dGxlbmVjayBvciwgZXZlbiB3b3JzZSwgYSBzZWN1cml0eSB2dWxuZXJhYmlsaXR5LiBXZSdyZSB0YWxraW5nIGFib3V0IHNoYXJlZCBtZW1vcnksIHNvIGFueSBzbGlwLXVwIGhlcmUgY291bGQgYmUgY2F0YXN0cm9waGljLiBJIG5lZWQgdG8gbG9vayBmb3IgYW55IHVuaGFuZGxlZCBlcnJvcnMsIGluYWRlcXVhdGUgYnVmZmVyIGhhbmRsaW5nLCBvciBwZXJoYXBzIG92ZXJseSBhZ2dyZXNzaXZlIGxvY2tpbmcgbWVjaGFuaXNtcyB0aGF0IG1pZ2h0IGJlIGNvdW50ZXJwcm9kdWN0aXZlLiBMZXQncyBzZWUgaWYgd2UncmUgZG9pbmcgdGhlIHJpZ2h0IHRoaW5nIGZvciBkYXRhIGFsaWdubWVudCBoZXJlLiBJIGhhdmUgYSBmZWVsaW5nIHdlJ3JlIG1pc3Npbmcgc29tZXRoaW5nIGFuZCBJJ20gcmVhZHkgdG8gZmlndXJlIGl0IG91dC4gVGltZSB0byByb2xsIHVwIHRoZSBzbGVldmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDA2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwNTozNDoyOS4zNTk3NzMyODdaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEzNzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3NobWVtLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzQ3NSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzQ3NTpcXHRcXG4zNDc2OlxcdFxcdFxcdC8qXFxuMzQ3NzpcXHRcXHRcXHQgKiBpX3NpemUgbXVzdCBiZSBjaGVja2VkIGFmdGVyIHdlIGtub3cgdGhlIHBhZ2VzIGFyZSBVcHRvZGF0ZS5cXG4zNDc4OlxcdFxcdFxcdCAqXFxuMzQ3OTpcXHRcXHRcXHQgKiBDaGVja2luZyBpX3NpemUgYWZ0ZXIgdGhlIGNoZWNrIGFsbG93cyB1cyB0byBjYWxjdWxhdGVcXG4zNDgwOlxcdFxcdFxcdCAqIHRoZSBjb3JyZWN0IHZhbHVlIGZvciBcXFwibnJcXFwiLCB3aGljaCBtZWFucyB0aGUgemVyby1maWxsZWRcXG4zNDgxOlxcdFxcdFxcdCAqIHBhcnQgb2YgdGhlIHBhZ2UgaXMgbm90IGNvcGllZCBiYWNrIHRvIHVzZXJzcGFjZSAodW5sZXNzXFxuMzQ4MjpcXHRcXHRcXHQgKiBhbm90aGVyIHRydW5jYXRlIGV4dGVuZHMgdGhlIGZpbGUgLSB0aGlzIGlzIGRlc2lyZWQgdGhvdWdoKS5cXG4zNDgzOlxcdFxcdFxcdCAqL1xcbjM0ODQ6XFx0XFx0XFx0aXNpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7XFxuMzQ4NTpcXHRcXHRcXHRpZiAodW5saWtlbHkoKnBwb3MgXFx1MDAzZT0gaXNpemUpKVxcbjM0ODY6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMzQ4NzpcXHRcXHRcXHQvKlxcbjM0ODg6XFx0XFx0XFx0ICogRmFsbGJhY2sgdG8gUEFHRV9TSVpFIHNwbGljZSBpZiB0aGUgbGFyZ2UgZm9saW8gaGFzIGh3cG9pc29uZWRcXG4zNDg5OlxcdFxcdFxcdCAqIHBhZ2VzLlxcbjM0OTA6XFx0XFx0XFx0ICovXFxuMzQ5MTpcXHRcXHRcXHRzaXplID0gbGVuO1xcbjM0OTI6XFx0XFx0XFx0aWYgKHVubGlrZWx5KGZhbGxiYWNrX3BhZ2Vfc3BsaWNlKSkge1xcbjM0OTM6XFx0XFx0XFx0XFx0c2l6ZV90IG9mZnNldCA9ICpwcG9zIFxcdTAwMjYgflBBR0VfTUFTSztcXG4zNDk0OlxcdFxcbjM0OTU6XFx0XFx0XFx0XFx0c2l6ZSA9IHVtaW4oc2l6ZSwgUEFHRV9TSVpFIC0gb2Zmc2V0KTtcXG4zNDk2OlxcdFxcdFxcdH1cXG4zNDk3OlxcdFxcdFxcdHBhcnQgPSBtaW5fdChsb2ZmX3QsIGlzaXplIC0gKnBwb3MsIHNpemUpO1xcbjM0OTg6XFx0XFxuMzQ5OTpcXHRcXHRcXHRpZiAoZm9saW8pIHtcXG4zNTAwOlxcdFxcdFxcdFxcdC8qXFxuMzUwMTpcXHRcXHRcXHRcXHQgKiBJZiB1c2VycyBjYW4gYmUgd3JpdGluZyB0byB0aGlzIHBhZ2UgdXNpbmcgYXJiaXRyYXJ5XFxuMzUwMjpcXHRcXHRcXHRcXHQgKiB2aXJ0dWFsIGFkZHJlc3NlcywgdGFrZSBjYXJlIGFib3V0IHBvdGVudGlhbCBhbGlhc2luZ1xcbjM1MDM6XFx0XFx0XFx0XFx0ICogYmVmb3JlIHJlYWRpbmcgdGhlIHBhZ2Ugb24gdGhlIGtlcm5lbCBzaWRlLlxcbjM1MDQ6XFx0XFx0XFx0XFx0ICovXFxuMzUwNTpcXHRcXHRcXHRcXHRpZiAobWFwcGluZ193cml0YWJseV9tYXBwZWQobWFwcGluZykpIHtcXG4zNTA2OlxcdFxcdFxcdFxcdFxcdGlmIChsaWtlbHkoIWZhbGxiYWNrX3BhZ2Vfc3BsaWNlKSlcXG4zNTA3OlxcdFxcdFxcdFxcdFxcdFxcdGZsdXNoX2RjYWNoZV9mb2xpbyhmb2xpbyk7XFxuMzUwODpcXHRcXHRcXHRcXHRcXHRlbHNlXFxuMzUwOTpcXHRcXHRcXHRcXHRcXHRcXHRmbHVzaF9kY2FjaGVfcGFnZShwYWdlKTtcXG4zNTEwOlxcdFxcdFxcdFxcdH1cXG4zNTExOlxcdFxcdFxcdFxcdGZvbGlvX21hcmtfYWNjZXNzZWQoZm9saW8pO1xcbjM1MTI6XFx0XFx0XFx0XFx0LypcXG4zNTEzOlxcdFxcdFxcdFxcdCAqIE9rLCB3ZSBoYXZlIHRoZSBwYWdlLCBhbmQgaXQncyB1cC10by1kYXRlLCBzbyB3ZSBjYW5cXG4zNTE0OlxcdFxcdFxcdFxcdCAqIG5vdyBzcGxpY2UgaXQgaW50byB0aGUgcGlwZS5cXG4zNTE1OlxcdFxcdFxcdFxcdCAqL1xcbjM1MTY6XFx0XFx0XFx0XFx0biA9IHNwbGljZV9mb2xpb19pbnRvX3BpcGUocGlwZSwgZm9saW8sICpwcG9zLCBwYXJ0KTtcXG4zNTE3OlxcdFxcdFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuMzUxODpcXHRcXHRcXHRcXHRmb2xpbyA9IE5VTEw7XFxuMzUxOTpcXHRcXHRcXHR9IGVsc2Uge1xcbjM1MjA6XFx0XFx0XFx0XFx0biA9IHNwbGljZV96ZXJvcGFnZV9pbnRvX3BpcGUocGlwZSwgKnBwb3MsIHBhcnQpO1xcbjM1MjE6XFx0XFx0XFx0fVxcbjM1MjI6XFx0XFxuMzUyMzpcXHRcXHRcXHRpZiAoIW4pXFxuMzUyNDpcXHRcXHRcXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDU6MzQ6MjkuMzU5OTg5OTQ3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjczMjI3NTA1MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgVW5pbml0aWFsaXplZCBNZW1vcnkgRXhwb3N1cmUqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGUgcGF0Y2ggbW92ZXMgYHNwbGljZV96ZXJvcGFnZV9pbnRvX3BpcGVgIGFuZCBgemVyb19waXBlX2J1Zl9vcHNgIGZyb20gYG1tL3NobWVtLmNgIHRvIGBmcy9zcGxpY2UuY2AuIFRoZW4sIGl0IHJldXNlcyBgc3BsaWNlX3plcm9wYWdlX2ludG9fcGlwZWAgd2l0aGluIGBzcGxpY2VfcmVhZF96ZXJvYCB0byBoYW5kbGUgYC9kZXYvemVyb2AgYW5kIGAvZGV2L2Z1bGxgIGluIGBkcml2ZXJzL2NoYXIvbWVtLmNgLCBlc3NlbnRpYWxseSBjaGFuZ2luZyB0aGVpciBgLnNwbGljZV9yZWFkYCBtZXRob2QgZnJvbSBgY29weV9zcGxpY2VfcmVhZGAgdG8gYHNwbGljZV9yZWFkX3plcm9gLiBTbywgdGhlIGNvcmUgY2hhbmdlIGlzIHJlZGlyZWN0aW5nIGAvZGV2L3plcm9gIGFuZCBgL2Rldi9mdWxsYCB0byBhIG5ldyBvcHRpbWl6ZWQgcGF0aC5cblxuTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uOiB1bmluaXRpYWxpemVkIG1lbW9yeS4gTGV0J3MgZGlnIGludG8gYHNwbGljZV9yZWFkX3plcm9gLiBJIHNlZSB0aGF0IHRoZSB2YXJpYWJsZXMgYHRvdGFsYCwgYHBvc2AsIGB1c2VkYCwgYW5kIGBucGFnZXNgIGFyZSBhbGwgcHJpbWl0aXZlIHR5cGVzIGFuZCBpbml0aWFsaXplZCBjb3JyZWN0bHkuIFRoZSBjYWxsIHRvIGBwaXBlX2J1Zl91c2FnZShwaXBlKWAgbG9va3Mgc3RhbmRhcmQuIEluIGBwaXBlX3plcm9wYWdlX2ludG9fcGlwZShwaXBlLCBwb3MsIGxlbilgLCBgcG9zYCBpcyBzdGFydGluZyBhdCAwIGFuZCB0aGUgYCpidWYgPSAoc3RydWN0IHBpcGVfYnVmZmVyKSB7IC4uLiB9YCBzeW50YXggZm9yIGluaXRpYWxpemluZyBgc3RydWN0IHBpcGVfYnVmZmVyYCBpcyBzcG90IG9uLCBndWFyYW50ZWVpbmcgYWxsIGZpZWxkcyBhcmUgaW5pdGlhbGl6ZWQsIHdpdGggdGhlIHJlc3QgemVyby1pbml0aWFsaXplZCBieSB0aGUgQyBzdGFuZGFyZC4gYFpFUk9fUEFHRSgwKWAgaXMsIG9mIGNvdXJzZSwgdGhlIGtlcm5lbCdzIHplcm8gcGFnZSDigJMgaXQncyBmdWxseSBpbml0aWFsaXplZCB0byB6ZXJvLiBUaGlzIG1lYW5zIHRoYXQgZGF0YSBjb21pbmcgb3V0IG9mIHRoaXMgY29kZSBwYXRoIHdpbGwgKmFsd2F5cyogYmUgemVyb2VkLlxuXG5TbywgZG9lcyB0aGlzIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnk/IE5vLiBUaGUgYFpFUk9fUEFHRSgwKWAgaXMgYWxsIHplcm9lcy4gVGhlIGBwaXBlX2J1ZmZlcmAgc3RydWN0IGlzIHByb3Blcmx5IGluaXRpYWxpemVkIHVzaW5nIEM5OSBzeW50YXgsIHdoaWNoIGluY2x1ZGVzIHplcm9pbmcgYW55IHJlbWFpbmluZyBmaWVsZHMuIE5vIGtlcm5lbCBzdGFjayBvciBoZWFwIG1lbW9yeSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciB1c2VkIGluIGNvbmRpdGlvbmFsIGxvZ2ljLiBUaGUgdmFyaWFibGVzIGBwb3NgLCBgdG90YWxgLCBgbGVuYCwgYHVzZWRgLCBgbnBhZ2VzYCBhcmUgYWxsIGluaXRpYWxpemVkIGFuZCBjb3JyZWN0bHkgY2FsY3VsYXRlZC5cblxuTm93LCByZWdhcmRpbmcgS01TQU4tc3BlY2lmaWMgY29uY2VybnMuIERvZXMgdGhpcyBpbnZvbHZlIGtlcm5lbCBzdHJ1Y3R1cmVzIGJlaW5nIHNlbnQgdG8gdXNlcnNwYWNlIHdpdGggcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBmaWVsZHM/IE5vLCB0aGUgdXNlciByZWFkcyBvbmx5IHplcm9lcyBmcm9tIGBaRVJPX1BBR0UoMClgLiBJcyB0aGVyZSBjb25kaXRpb25hbCBsb2dpYyByZWx5aW5nIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBOb3BlLCBhbGwgdGhlIHZhcmlhYmxlcyB3aXRoaW4gYHNwbGljZV9yZWFkX3plcm9gIGFyZSBpbml0aWFsaXplZCBhbmQgZGV0ZXJtaW5lZCBiYXNlZCBvbiB0aGUgY29kZS4gQXJlIHRoZXJlIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMgdGhhdCBjb3VsZCBiZSByZWFkIGxhdGVyPyBBZ2Fpbiwgbm8uIFRoZSBgc3RydWN0IHBpcGVfYnVmZmVyYCBpcyB6ZXJvZWQuIERvZXMgdGhpcyBwbGF5IHdpdGggYm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3MgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgZGF0YSBpbiBzdXJyb3VuZGluZyBidWZmZXJzPyBOb3QgYXQgYWxsLiBUaGUgZGF0YSBhbHdheXMgY29tZXMgZnJvbSB0aGUgZ2xvYmFsIHplcm8gcGFnZS5cblxuU28sIEknbSBjb25maWRlbnQgaW4gc2F5aW5nIHRoYXQgdGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBBbnkgYnVncyByZWxhdGVkIHRvIHBpcGUgYnVmZmVycywgcGFnZSByZWZjb3VudGluZywgb3Igc3BsaWNlIGxvY2tpbmcgd291bGQgYmUgaGFuZGxlZCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBjaGVja3MuIERlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzbid0IG5lY2Vzc2FyeSBoZXJlLiBOb3csIHRpbWUgdG8gZm9ybXVsYXRlIHRoZSByZXNwb25zZSBhbmQgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDMzLCJPdXRwdXRUb2tlbnMiOjI5OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc2MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDA1OjM0OjM2LjY4Mjc0MzE5N1oiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgY29weV9zcGxpY2VfcmVhZCB3aXRoIGEgc3BlY2lhbGl6ZWQgc3BsaWNlX3JlYWRfemVybyBpbXBsZW1lbnRhdGlvbiBmb3IgL2Rldi96ZXJvIGFuZCAvZGV2L2Z1bGwsIG1vdmluZyBzcGxpY2VfemVyb3BhZ2VfaW50b19waXBlIGFuZCB6ZXJvX3BpcGVfYnVmX29wcyBmcm9tIG1tL3NobWVtLmMgaW50byBmcy9zcGxpY2UuYy5cXG5cXG4xLiBNZW1vcnkgSW5pdGlhbGl6YXRpb246XFxuLSBJbiBzcGxpY2VfemVyb3BhZ2VfaW50b19waXBlLCB0aGUgcGlwZSBidWZmZXIgaXMgaW5pdGlhbGl6ZWQgdXNpbmcgYSBkZXNpZ25hdGVkIGluaXRpYWxpemVyIChzdHJ1Y3QgcGlwZV9idWZmZXIpeyAuLi4gfSwgd2hpY2ggemVyb2VzIGFsbCB1bm1lbnRpb25lZCBzdHJ1Y3QgZmllbGRzIChmbGFncywgcHJpdmF0ZSkuXFxuLSBUaGUgcGFnZSByZWZlcmVuY2VkIGlzIFpFUk9fUEFHRSgwKSwgd2hpY2ggaXMgc3RhdGljYWxseSBhbGxvY2F0ZWQgYW5kIHplcm8taW5pdGlhbGl6ZWQuXFxuLSBJbiBzcGxpY2VfcmVhZF96ZXJvLCBhbGwgbG9jYWwgdmFyaWFibGVzICh0b3RhbCwgcG9zLCB1c2VkLCBucGFnZXMsIG4sIGxlbikgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS5cXG5cXG4yLiBLQVNBTiB2cyBLTVNBTiBBcHBsaWNhYmlsaXR5Olxcbi0gS01TQU4gZGV0ZWN0cyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBhbmQgaW5mby1sZWFrcy4gU2luY2UgYWxsIG1lbW9yeSBzcGxpY2VkIGludG8gdGhlIHBpcGUgaXMgZnJvbSB0aGUgZ2xvYmFsbHkgemVyb2VkIHBhZ2UgYW5kIGFsbCBzdHJ1Y3R1cmVzIGFuZCBsb2NhbCB2YXJpYWJsZXMgYXJlIGZ1bGx5IGluaXRpYWxpemVkLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaGF6YXJkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyBpbnRyb2R1Y2VkLlxcbi0gQW55IHBvdGVudGlhbCBwaXBlIGJvdW5kcywgcmVmZXJlbmNlIGNvdW50aW5nLCBvciBjb25jdXJyZW5jeSBpc3N1ZXMgYXJlIHdpdGhpbiB0aGUgc2NvcGUgb2YgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMuXFxuXFxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZCAoTmVlZHNLTVNBTj1mYWxzZSkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgY29weV9zcGxpY2VfcmVhZCB3aXRoIGEgc3BlY2lhbGl6ZWQgc3BsaWNlX3JlYWRfemVybyBpbXBsZW1lbnRhdGlvbiBmb3IgL2Rldi96ZXJvIGFuZCAvZGV2L2Z1bGwsIG1vdmluZyBzcGxpY2VfemVyb3BhZ2VfaW50b19waXBlIGFuZCB6ZXJvX3BpcGVfYnVmX29wcyBmcm9tIG1tL3NobWVtLmMgaW50byBmcy9zcGxpY2UuYy5cXG5cXG4xLiBNZW1vcnkgSW5pdGlhbGl6YXRpb246XFxuLSBJbiBzcGxpY2VfemVyb3BhZ2VfaW50b19waXBlLCB0aGUgcGlwZSBidWZmZXIgaXMgaW5pdGlhbGl6ZWQgdXNpbmcgYSBkZXNpZ25hdGVkIGluaXRpYWxpemVyIChzdHJ1Y3QgcGlwZV9idWZmZXIpeyAuLi4gfSwgd2hpY2ggemVyb2VzIGFsbCB1bm1lbnRpb25lZCBzdHJ1Y3QgZmllbGRzIChmbGFncywgcHJpdmF0ZSkuXFxuLSBUaGUgcGFnZSByZWZlcmVuY2VkIGlzIFpFUk9fUEFHRSgwKSwgd2hpY2ggaXMgc3RhdGljYWxseSBhbGxvY2F0ZWQgYW5kIHplcm8taW5pdGlhbGl6ZWQuXFxuLSBJbiBzcGxpY2VfcmVhZF96ZXJvLCBhbGwgbG9jYWwgdmFyaWFibGVzICh0b3RhbCwgcG9zLCB1c2VkLCBucGFnZXMsIG4sIGxlbikgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS5cXG5cXG4yLiBLQVNBTiB2cyBLTVNBTiBBcHBsaWNhYmlsaXR5Olxcbi0gS01TQU4gZGV0ZWN0cyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBhbmQgaW5mby1sZWFrcy4gU2luY2UgYWxsIG1lbW9yeSBzcGxpY2VkIGludG8gdGhlIHBpcGUgaXMgZnJvbSB0aGUgZ2xvYmFsbHkgemVyb2VkIHBhZ2UgYW5kIGFsbCBzdHJ1Y3R1cmVzIGFuZCBsb2NhbCB2YXJpYWJsZXMgYXJlIGZ1bGx5IGluaXRpYWxpemVkLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaGF6YXJkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyBpbnRyb2R1Y2VkLlxcbi0gQW55IHBvdGVudGlhbCBwaXBlIGJvdW5kcywgcmVmZXJlbmNlIGNvdW50aW5nLCBvciBjb25jdXJyZW5jeSBpc3N1ZXMgYXJlIHdpdGhpbiB0aGUgc2NvcGUgb2YgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMuXFxuXFxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZCAoTmVlZHNLTVNBTj1mYWxzZSkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowfcxfv[1] Phase: Succeeded StartedAt: 2026-08-29 05:34:48 +0000 UTC FinishedAt: 2026-08-29 05:34:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfcxfv[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-29 05:34:48 +0000 UTC FinishedAt: 2026-08-29 05:34:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfcxfv[2] Phase: Succeeded StartedAt: 2026-08-29 05:34:48 +0000 UTC FinishedAt: 2026-08-29 09:13:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfcxfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["splice_zeropage_into_pipe","splice_read_zero","shmem_file_splice_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM"],"series_id":"2587909f-10e5-46eb-9827-51c7fd3bf5d5","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-29 05:34:48 +0000 UTC FinishedAt: 2026-08-29 09:13:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["splice_zeropage_into_pipe","splice_read_zero","shmem_file_splice_read"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM"],"series_id":"2587909f-10e5-46eb-9827-51c7fd3bf5d5","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowfcxfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["splice_zeropage_into_pipe","splice_read_zero","shmem_file_splice_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM"],"series_id":"2587909f-10e5-46eb-9827-51c7fd3bf5d5","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-29 05:34:48 +0000 UTC FinishedAt: 2026-08-29 05:34:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfcxfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["splice_zeropage_into_pipe","splice_read_zero","shmem_file_splice_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM"],"series_id":"2587909f-10e5-46eb-9827-51c7fd3bf5d5","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-29 05:34:48 +0000 UTC FinishedAt: 2026-08-29 05:34:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowfcxfv/series-workflowfcxfv-convert-artifact-2523483374/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfcxfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["splice_zeropage_into_pipe","splice_read_zero","shmem_file_splice_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM"],"series_id":"2587909f-10e5-46eb-9827-51c7fd3bf5d5","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-29 05:34:58 +0000 UTC FinishedAt: 2026-08-29 05:50:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfcxfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["splice_zeropage_into_pipe","splice_read_zero","shmem_file_splice_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM"],"series_id":"2587909f-10e5-46eb-9827-51c7fd3bf5d5","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-29 05:34:58 +0000 UTC FinishedAt: 2026-08-29 05:50:46 +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:*4f9fe05b-43a4-4b26-92b1-207e51a00527,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-workflowfcxfv/series-workflowfcxfv-convert-artifact-2523483374/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": "91656b3a-f205-4a80-becb-e778d4a4b96d", "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-workflowfcxfv/series-workflowfcxfv-build-action-380212308/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfcxfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["splice_zeropage_into_pipe","splice_read_zero","shmem_file_splice_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM"],"series_id":"2587909f-10e5-46eb-9827-51c7fd3bf5d5","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-29 05:34:58 +0000 UTC FinishedAt: 2026-08-29 05:50:36 +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:*4f9fe05b-43a4-4b26-92b1-207e51a00527,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-workflowfcxfv/series-workflowfcxfv-convert-artifact-2523483374/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": "91656b3a-f205-4a80-becb-e778d4a4b96d", "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-workflowfcxfv/series-workflowfcxfv-build-action-380212308/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfcxfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["splice_zeropage_into_pipe","splice_read_zero","shmem_file_splice_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM"],"series_id":"2587909f-10e5-46eb-9827-51c7fd3bf5d5","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-29 05:50:46 +0000 UTC FinishedAt: 2026-08-29 05:50:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfcxfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["splice_zeropage_into_pipe","splice_read_zero","shmem_file_splice_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM"],"series_id":"2587909f-10e5-46eb-9827-51c7fd3bf5d5","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-29 05:50:46 +0000 UTC FinishedAt: 2026-08-29 05:50:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfcxfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["splice_zeropage_into_pipe","splice_read_zero","shmem_file_splice_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM"],"series_id":"2587909f-10e5-46eb-9827-51c7fd3bf5d5","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-29 05:50:46 +0000 UTC FinishedAt: 2026-08-29 05:50:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfcxfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["splice_zeropage_into_pipe","splice_read_zero","shmem_file_splice_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM"],"series_id":"2587909f-10e5-46eb-9827-51c7fd3bf5d5","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-29 05:50:46 +0000 UTC FinishedAt: 2026-08-29 05:50:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM"],"series_id":"2587909f-10e5-46eb-9827-51c7fd3bf5d5","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowfcxfv/series-workflowfcxfv-convert-artifact-1763838177/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfcxfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["splice_zeropage_into_pipe","splice_read_zero","shmem_file_splice_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM"],"series_id":"2587909f-10e5-46eb-9827-51c7fd3bf5d5","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-29 05:50:56 +0000 UTC FinishedAt: 2026-08-29 05:52:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfcxfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["splice_zeropage_into_pipe","splice_read_zero","shmem_file_splice_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM"],"series_id":"2587909f-10e5-46eb-9827-51c7fd3bf5d5","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-29 05:50:56 +0000 UTC FinishedAt: 2026-08-29 05:52:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*91656b3a-f205-4a80-becb-e778d4a4b96d,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-workflowfcxfv/series-workflowfcxfv-build-action-380212308/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-workflowfcxfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["splice_zeropage_into_pipe","splice_read_zero","shmem_file_splice_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM"],"series_id":"2587909f-10e5-46eb-9827-51c7fd3bf5d5","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-29 05:52:48 +0000 UTC FinishedAt: 2026-08-29 05:52:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfcxfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["splice_zeropage_into_pipe","splice_read_zero","shmem_file_splice_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM"],"series_id":"2587909f-10e5-46eb-9827-51c7fd3bf5d5","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-29 05:52:48 +0000 UTC FinishedAt: 2026-08-29 05:52:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfcxfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["splice_zeropage_into_pipe","splice_read_zero","shmem_file_splice_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM"],"series_id":"2587909f-10e5-46eb-9827-51c7fd3bf5d5","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-29 05:52:48 +0000 UTC FinishedAt: 2026-08-29 06:08:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfcxfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["splice_zeropage_into_pipe","splice_read_zero","shmem_file_splice_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM"],"series_id":"2587909f-10e5-46eb-9827-51c7fd3bf5d5","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-29 05:52:48 +0000 UTC FinishedAt: 2026-08-29 06:08:30 +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:*4f9fe05b-43a4-4b26-92b1-207e51a00527,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-workflowfcxfv/series-workflowfcxfv-convert-artifact-1763838177/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": "198e4eb8-a47a-454c-9987-74802ccabd0e", "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-workflowfcxfv/series-workflowfcxfv-build-action-2314832365/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfcxfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["splice_zeropage_into_pipe","splice_read_zero","shmem_file_splice_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM"],"series_id":"2587909f-10e5-46eb-9827-51c7fd3bf5d5","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-29 05:52:48 +0000 UTC FinishedAt: 2026-08-29 06:08:20 +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:*4f9fe05b-43a4-4b26-92b1-207e51a00527,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-workflowfcxfv/series-workflowfcxfv-convert-artifact-1763838177/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": "198e4eb8-a47a-454c-9987-74802ccabd0e", "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-workflowfcxfv/series-workflowfcxfv-build-action-2314832365/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfcxfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["splice_zeropage_into_pipe","splice_read_zero","shmem_file_splice_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM"],"series_id":"2587909f-10e5-46eb-9827-51c7fd3bf5d5","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-29 06:08:30 +0000 UTC FinishedAt: 2026-08-29 06:08:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfcxfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["splice_zeropage_into_pipe","splice_read_zero","shmem_file_splice_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM"],"series_id":"2587909f-10e5-46eb-9827-51c7fd3bf5d5","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-29 06:08:30 +0000 UTC FinishedAt: 2026-08-29 06:08:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfcxfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["splice_zeropage_into_pipe","splice_read_zero","shmem_file_splice_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM"],"series_id":"2587909f-10e5-46eb-9827-51c7fd3bf5d5","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-29 06:08:30 +0000 UTC FinishedAt: 2026-08-29 06:10:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfcxfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["splice_zeropage_into_pipe","splice_read_zero","shmem_file_splice_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM"],"series_id":"2587909f-10e5-46eb-9827-51c7fd3bf5d5","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-29 06:08:30 +0000 UTC FinishedAt: 2026-08-29 06:10:05 +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:*198e4eb8-a47a-454c-9987-74802ccabd0e,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-workflowfcxfv/series-workflowfcxfv-build-action-2314832365/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-workflowfcxfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["splice_zeropage_into_pipe","splice_read_zero","shmem_file_splice_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM"],"series_id":"2587909f-10e5-46eb-9827-51c7fd3bf5d5","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-29 06:10:15 +0000 UTC FinishedAt: 2026-08-29 09:13:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfcxfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["splice_zeropage_into_pipe","splice_read_zero","shmem_file_splice_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM"],"series_id":"2587909f-10e5-46eb-9827-51c7fd3bf5d5","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-29 06:10:15 +0000 UTC FinishedAt: 2026-08-29 09:13:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["splice_zeropage_into_pipe","splice_read_zero","shmem_file_splice_read"],"skip_cover_check":true},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:*91656b3a-f205-4a80-becb-e778d4a4b96d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*198e4eb8-a47a-454c-9987-74802ccabd0e,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-workflowfcxfv/series-workflowfcxfv-build-action-380212308/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-workflowfcxfv/series-workflowfcxfv-build-action-2314832365/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowfcxfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["splice_zeropage_into_pipe","splice_read_zero","shmem_file_splice_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM"],"series_id":"2587909f-10e5-46eb-9827-51c7fd3bf5d5","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-29 06:10:15 +0000 UTC FinishedAt: 2026-08-29 06:10:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfcxfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["splice_zeropage_into_pipe","splice_read_zero","shmem_file_splice_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM"],"series_id":"2587909f-10e5-46eb-9827-51c7fd3bf5d5","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-29 06:10:15 +0000 UTC FinishedAt: 2026-08-29 06:10:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["splice_zeropage_into_pipe","splice_read_zero","shmem_file_splice_read"],"skip_cover_check":true},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-workflowfcxfv/series-workflowfcxfv-convert-artifact-820077430/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfcxfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["splice_zeropage_into_pipe","splice_read_zero","shmem_file_splice_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM"],"series_id":"2587909f-10e5-46eb-9827-51c7fd3bf5d5","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-29 06:10:15 +0000 UTC FinishedAt: 2026-08-29 06:10:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfcxfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["splice_zeropage_into_pipe","splice_read_zero","shmem_file_splice_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM"],"series_id":"2587909f-10e5-46eb-9827-51c7fd3bf5d5","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-29 06:10:15 +0000 UTC FinishedAt: 2026-08-29 06:10:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfcxfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["splice_zeropage_into_pipe","splice_read_zero","shmem_file_splice_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM"],"series_id":"2587909f-10e5-46eb-9827-51c7fd3bf5d5","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-29 06:10:15 +0000 UTC FinishedAt: 2026-08-29 06:10:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfcxfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["splice_zeropage_into_pipe","splice_read_zero","shmem_file_splice_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM"],"series_id":"2587909f-10e5-46eb-9827-51c7fd3bf5d5","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-29 06:10:25 +0000 UTC FinishedAt: 2026-08-29 09:13:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfcxfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["splice_zeropage_into_pipe","splice_read_zero","shmem_file_splice_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM"],"series_id":"2587909f-10e5-46eb-9827-51c7fd3bf5d5","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-29 06:10:25 +0000 UTC FinishedAt: 2026-08-29 09:13:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*91656b3a-f205-4a80-becb-e778d4a4b96d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*198e4eb8-a47a-454c-9987-74802ccabd0e,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-workflowfcxfv/series-workflowfcxfv-build-action-380212308/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-workflowfcxfv/series-workflowfcxfv-build-action-2314832365/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-workflowfcxfv/series-workflowfcxfv-convert-artifact-820077430/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,}