Name: series-workflowh42k7 Phase: Succeeded StartedAt: 2026-07-05 13:24:17 +0000 UTC FinishedAt: 2026-07-05 18:21:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh42k7[0] Phase: Succeeded StartedAt: 2026-07-05 13:24:17 +0000 UTC FinishedAt: 2026-07-05 13:59:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh42k7[0].run-triage Phase: Succeeded StartedAt: 2026-07-05 13:24:17 +0000 UTC FinishedAt: 2026-07-05 13:59:44 +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": "e031e55776cf9193b4720a253e92539ca536d224", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USERFAULTFD", "TRANSPARENT_HUGEPAGE", "MIGRATION" ], "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": "e031e55776cf9193b4720a253e92539ca536d224", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USERFAULTFD", "TRANSPARENT_HUGEPAGE", "MIGRATION" ], "series_id": "aaeca1ea-6692-4bf8-a1b5-4509a0ce2c59" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "move_pages_huge_pmd" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDEzOjU2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTRVJGQVVMVEZEJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O01JR1JBVElPTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21vdmVfcGFnZXNfaHVnZV9wbWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYG1vdmVfcGFnZXNfaHVnZV9wbWRgIHdoZXJlIGBwbWRfbWlncmF0aW9uX2VudHJ5X3dhaXRgIHdhcyBpbmNvcnJlY3RseSBjYWxsZWQgd2l0aCBhIHBvaW50ZXIgdG8gYSBsb2NhbCB2YXJpYWJsZSBpbnN0ZWFkIG9mIHRoZSBhY3R1YWwgUE1EIHBvaW50ZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgdXNlcmZhdWx0ZmQgVUZGRElPX01PVkUgaW1wbGVtZW50YXRpb24gZm9yIHRyYW5zcGFyZW50IGh1Z2VwYWdlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAxMzo1NjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDNlY2ViOTIyZTMzNDEyZDkyODg3YmM2Y2M4ODBlZTJlZjE5ZjhkZTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEp1bCA1IDEzOjU2OjMyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jXG5pbmRleCBiZGQ4NjM1OTIyZjk2ZC4uYzA4OTJjYzUzM2E5ZmMgMTAwNjQ0XG4tLS0gYS9tbS9odWdlX21lbW9yeS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdlX21lbW9yeS5jXG5AQCAtMjc3NSw3ICYjNDM7Mjc3NSw3IEBAIGludCBtb3ZlX3BhZ2VzX2h1Z2VfcG1kKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqZHN0X3BtZCwgcG1kX3QgKnNyY19wbWQsIHBtXG4gXHRpZiAoIXBtZF90cmFuc19odWdlKHNyY19wbWR2YWwpKSB7XG4gXHRcdHNwaW5fdW5sb2NrKHNyY19wdGwpO1xuIFx0XHRpZiAocG1kX2lzX21pZ3JhdGlvbl9lbnRyeShzcmNfcG1kdmFsKSkge1xuLVx0XHRcdHBtZF9taWdyYXRpb25fZW50cnlfd2FpdChtbSwgXHUwMDI2c3JjX3BtZHZhbCk7XG4mIzQzO1x0XHRcdHBtZF9taWdyYXRpb25fZW50cnlfd2FpdChtbSwgc3JjX3BtZCk7XG4gXHRcdFx0cmV0dXJuIC1FQUdBSU47XG4gXHRcdH1cbiBcdFx0cmV0dXJuIC1FTk9FTlQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMTM6NTY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VVNFUkZBVUxURkQmIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAgICYjMzQ7TUlHUkFUSU9OJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bW92ZV9wYWdlc19odWdlX3BtZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgbW92ZV9wYWdlc19odWdlX3BtZGAgd2hlcmUgYHBtZF9taWdyYXRpb25fZW50cnlfd2FpdGAgd2FzIGluY29ycmVjdGx5IGNhbGxlZCB3aXRoIGEgcG9pbnRlciB0byBhIGxvY2FsIHZhcmlhYmxlIGluc3RlYWQgb2YgdGhlIGFjdHVhbCBQTUQgcG9pbnRlci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSB1c2VyZmF1bHRmZCBVRkZESU9fTU9WRSBpbXBsZW1lbnRhdGlvbiBmb3IgdHJhbnNwYXJlbnQgaHVnZXBhZ2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzZWNlYjkyMmUzMzQxMmQ5Mjg4N2JjNmNjODgwZWUyZWYxOWY4ZGU5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBKdWwgNSAxMzo1NjozMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jCmluZGV4IGJkZDg2MzU5MjJmOTZkLi5jMDg5MmNjNTMzYTlmYyAxMDA2NDQKLS0tIGEvbW0vaHVnZV9tZW1vcnkuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdlX21lbW9yeS5jCkBAIC0yNzc1LDcgJiM0MzsyNzc1LDcgQEAgaW50IG1vdmVfcGFnZXNfaHVnZV9wbWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpkc3RfcG1kLCBwbWRfdCAqc3JjX3BtZCwgcG0KIAlpZiAoIXBtZF90cmFuc19odWdlKHNyY19wbWR2YWwpKSB7CiAJCXNwaW5fdW5sb2NrKHNyY19wdGwpOwogCQlpZiAocG1kX2lzX21pZ3JhdGlvbl9lbnRyeShzcmNfcG1kdmFsKSkgewotCQkJcG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0KG1tLCAmYW1wO3NyY19wbWR2YWwpOwomIzQzOwkJCXBtZF9taWdyYXRpb25fZW50cnlfd2FpdChtbSwgc3JjX3BtZCk7CiAJCQlyZXR1cm4gLUVBR0FJTjsKIAkJfQogCQlyZXR1cm4gLUVOT0VOVDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMTM6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg2NwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZToKCioqUGF0Y2ggQW5hbHlzaXM6IEEgU3VidGxlIGJ1dCBQb3RlbnRpYWxseSBTaWduaWZpY2FudCBDaGFuZ2UqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCYjMzk7cyB0d2Vha2luZyBgbW0vaHVnZV9tZW1vcnkuY2AuIFNwZWNpZmljYWxseSwgdGhleSYjMzk7cmUgbW9kaWZ5aW5nIHRoZSBjYWxsIHRvIGBwbWRfbWlncmF0aW9uX2VudHJ5X3dhaXRgIHdpdGhpbiB0aGUgYG1vdmVfcGFnZXNfaHVnZV9wbWRgIGZ1bmN0aW9uLiBJdCBzZWVtcyB0aGV5JiMzOTt2ZSBzd2l0Y2hlZCBmcm9tIHBhc3NpbmcgdGhlIGFkZHJlc3Mgb2YgYHNyY19wbWR2YWxgIOKAkyB0aGF0IGlzLCBgJmFtcDtzcmNfcG1kdmFsYCDigJMgdG8gcGFzc2luZyB0aGUgYHNyY19wbWRgIHZhcmlhYmxlIGl0c2VsZiwgd2hpY2ggaXMgdmVyeSBsaWtlbHkgYSBgcG1kX3RgIHR5cGUuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgZGl2ZSBpbnRvIGBtb3ZlX3BhZ2VzX2h1Z2VfcG1kYCBhbmQgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLiBXaHkgYXJlIHRoZXkgZGlyZWN0bHkgcGFzc2luZyB0aGUgYHBtZF90YCBub3c/IElzIHRoaXMgYSBwb3RlbnRpYWwgb3B0aW1pemF0aW9uPyBPciBwZXJoYXBzIGEgZml4IGZvciBhIHN1YnRsZSByYWNlIGNvbmRpdGlvbiBvciBhbGlnbm1lbnQgaXNzdWU/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYHBtZF9taWdyYXRpb25fZW50cnlfd2FpdGAgZXhwZWN0cywgYW5kIGhvdyBpdCYjMzk7cyBiZWluZyB1c2VkIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLgoKVGhlIG9sZCB3YXkgdXNpbmcgYSBwb2ludGVyIG1pZ2h0IGluZGljYXRlIHRoYXQgYHBtZF9taWdyYXRpb25fZW50cnlfd2FpdGAgaW50ZW5kZWQgdG8gbW9kaWZ5IHRoZSB2YWx1ZS4gUGFzc2luZyB0aGUgYHBtZF90YCBkaXJlY3RseSBvZnRlbiBpbXBsaWVzIHJlYWQtb25seSBhY2Nlc3MsIG9yIHBlcmhhcHMgdGhlIGZ1bmN0aW9uIG5vdyBoYW5kbGVzIHRoZSBhZGRyZXNzIGludGVybmFsbHkuIElzIHRoZXJlIGEgY2hhbmNlIHRoYXQgYSBwb3RlbnRpYWwgd3JpdGUgaW4gYSBwYXJhbGxlbCB0aHJlYWQsIGJldHdlZW4gcmVhZGluZyB0aGUgdmFsdWUgYW5kIHdhaXRpbmcgb24gaXQgY291bGQgaGF2ZSBjcmVhdGVkIGEgZmxhdz8KCkkmIzM5O20ga2VlbiB0byB0cmFjZSBob3cgYHNyY19wbWRgIGlzIGJlaW5nIGluaXRpYWxpemVkIGFuZCB1c2VkIGJlZm9yZSB0aGUgZnVuY3Rpb24gY2FsbCwgYW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nICppbnNpZGUqIGBwbWRfbWlncmF0aW9uX2VudHJ5X3dhaXRgIHRvIGRldGVybWluZSB0aGUgZXhhY3QgaW1wYWN0IG9mIHRoaXMgYWRqdXN0bWVudC4gQW55IGNoYW5nZSBpbiBsb2NraW5nIG9yIG1lbW9yeSBhY2Nlc3MgcGF0dGVybnMgaGVyZSBjb3VsZCBiZSBwcmV0dHkgaW1wYWN0ZnVsLiBUaGlzIG5lZWRzIGEgdGhvcm91Z2ggcmV2aWV3LiBJIG5lZWQgdG8gbG9vayBhdCBib3RoIHRoZSBjYWxsZXIgYW5kIHRoZSBjYWxsZWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMTM6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW92ZV9wYWdlc19odWdlX3BtZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYz0yNzAyPWludCBjaGFuZ2VfaHVnZV9wdWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0yNzQ4LSAqL1xubW0vaHVnZV9tZW1vcnkuYzoyNzQ5OmludCBtb3ZlX3BhZ2VzX2h1Z2VfcG1kKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqZHN0X3BtZCwgcG1kX3QgKnNyY19wbWQsIHBtZF90IGRzdF9wbWR2YWwsXG5tbS9odWdlX21lbW9yeS5jLTI3NTAtXHRcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnNyY192bWEsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMTM6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU2MAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OgoKKipEaXZpbmcgaW50byBgbW92ZV9wYWdlc19odWdlX3BtZGAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGl0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb24gYG1vdmVfcGFnZXNfaHVnZV9wbWRgLiBCZWZvcmUgSSBjYW4gbWFrZSBhbnkgbWVhbmluZ2Z1bCBhc3Nlc3NtZW50LCBJIG5lZWQgdG8gcGxhY2UgdGhpcyBmdW5jdGlvbiB3aXRoaW4gaXRzIG92ZXJhbGwgY29udGV4dC4gSSBrbm93IHRoaXMgaXMgYSBjcml0aWNhbCBsb3ctbGV2ZWwgZnVuY3Rpb24gcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCBodWdlIHBhZ2VzIGFuZCBwb3RlbnRpYWxseSBQTURzIChQYWdlIE1pZGRsZSBEaXJlY3RvcmllcykuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IHRoZSB1c2UgY2FzZShzKSBpdCBhZGRyZXNzZXMgd2l0aGluIGEgc3lzdGVtLiBJIG5lZWQgdG8ga25vdyB3aHkgbW92aW5nIHBhZ2VzLCBhbmQgZXNwZWNpYWxseSBodWdlIHBhZ2VzLCB3b3VsZCBiZSBuZWNlc3NhcnkuIElzIGl0IGZvciBOVU1BIGJhbGFuY2luZz8gTWVtb3J5IGhvdHBsdWdnaW5nPyBEeW5hbWljIG1lbW9yeSBhbGxvY2F0aW9uL2RlYWxsb2NhdGlvbiBvcHRpbWl6YXRpb24/IERhdGEgbWlncmF0aW9uIGR1cmluZyBsaXZlIHN5c3RlbSB1cGRhdGVzPyBUaGUgc3BlY2lmaWMgZnVuY3Rpb24gb2YgdGhpcyBwaWVjZSBkZXBlbmRzIGhlYXZpbHkgb24gaXRzIGRlc2lnbiBmb3IgdGhlc2UgbGFyZ2VyIGdvYWxzLiBJIG11c3QgdW5kZXJzdGFuZCB0aGUgaW50ZW5kZWQgcHVycG9zZSB0byBwYXJzZSBob3cgdGhlIGNvZGUgYWNoaWV2ZXMgaXQgYW5kIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3IgY2xldmVyIG9wdGltaXphdGlvbnMgaXQgZW1wbG95cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAxMzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNzQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI3NDU6XHQgKiBKdXN0IG1vdmUgdGhlIHBhZ2UgZnJvbSBzcmNfcG1kIHRvIGRzdF9wbWQgaWYgcG9zc2libGUuXG4yNzQ2Olx0ICogUmV0dXJuIHplcm8gaWYgc3VjY2VlZGVkIGluIG1vdmluZyB0aGUgcGFnZSwgLUVBR0FJTiBpZiBpdCBuZWVkcyB0byBiZVxuMjc0NzpcdCAqIHJlcGVhdGVkIGJ5IHRoZSBjYWxsZXIsIG9yIG90aGVyIGVycm9ycyBpbiBjYXNlIG9mIGZhaWx1cmUuXG4yNzQ4Olx0ICovXG4yNzQ5Olx0aW50IG1vdmVfcGFnZXNfaHVnZV9wbWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpkc3RfcG1kLCBwbWRfdCAqc3JjX3BtZCwgcG1kX3QgZHN0X3BtZHZhbCxcbjI3NTA6XHRcdFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdF92bWEsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3JjX3ZtYSxcbjI3NTE6XHRcdFx0XHR1bnNpZ25lZCBsb25nIGRzdF9hZGRyLCB1bnNpZ25lZCBsb25nIHNyY19hZGRyKVxuMjc1MjpcdHtcbjI3NTM6XHRcdHBtZF90IF9kc3RfcG1kLCBzcmNfcG1kdmFsO1xuMjc1NDpcdFx0c3RydWN0IHBhZ2UgKnNyY19wYWdlO1xuMjc1NTpcdFx0c3RydWN0IGZvbGlvICpzcmNfZm9saW87XG4yNzU2Olx0XHRzcGlubG9ja190ICpzcmNfcHRsLCAqZHN0X3B0bDtcbjI3NTc6XHRcdHBndGFibGVfdCBzcmNfcGd0YWJsZTtcbjI3NTg6XHRcdHN0cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UgcmFuZ2U7XG4yNzU5Olx0XHRpbnQgZXJyID0gMDtcbjI3NjA6XHRcbjI3NjE6XHRcdHNyY19wbWR2YWwgPSAqc3JjX3BtZDtcbjI3NjI6XHRcdHNyY19wdGwgPSBwbWRfbG9ja3B0cihtbSwgc3JjX3BtZCk7XG4yNzYzOlx0XG4yNzY0Olx0XHRsb2NrZGVwX2Fzc2VydF9oZWxkKHNyY19wdGwpO1xuMjc2NTpcdFx0dm1hX2Fzc2VydF9sb2NrZWQoc3JjX3ZtYSk7XG4yNzY2Olx0XHR2bWFfYXNzZXJ0X2xvY2tlZChkc3Rfdm1hKTtcbjI3Njc6XHRcbjI3Njg6XHRcdC8qIFNhbml0eSBjaGVja3MgYmVmb3JlIHRoZSBvcGVyYXRpb24gKi9cbjI3Njk6XHRcdGlmIChXQVJOX09OX09OQ0UoIXBtZF9ub25lKGRzdF9wbWR2YWwpKSB8fCBXQVJOX09OX09OQ0Uoc3JjX2FkZHIgXHUwMDI2IH5IUEFHRV9QTURfTUFTSykgfHxcbjI3NzA6XHRcdCAgICBXQVJOX09OX09OQ0UoZHN0X2FkZHIgXHUwMDI2IH5IUEFHRV9QTURfTUFTSykpIHtcbjI3NzE6XHRcdFx0c3Bpbl91bmxvY2soc3JjX3B0bCk7XG4yNzcyOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuMjc3MzpcdFx0fVxuMjc3NDpcdFxuMjc3NTpcdFx0aWYgKCFwbWRfdHJhbnNfaHVnZShzcmNfcG1kdmFsKSkge1xuMjc3NjpcdFx0XHRzcGluX3VubG9jayhzcmNfcHRsKTtcbjI3Nzc6XHRcdFx0aWYgKHBtZF9pc19taWdyYXRpb25fZW50cnkoc3JjX3BtZHZhbCkpIHtcbjI3Nzg6XHRcdFx0XHRwbWRfbWlncmF0aW9uX2VudHJ5X3dhaXQobW0sIHNyY19wbWQpO1xuMjc3OTpcdFx0XHRcdHJldHVybiAtRUFHQUlOO1xuMjc4MDpcdFx0XHR9XG4yNzgxOlx0XHRcdHJldHVybiAtRU5PRU5UO1xuMjc4MjpcdFx0fVxuMjc4MzpcdFxuMjc4NDpcdFx0c3JjX3BhZ2UgPSBwbWRfcGFnZShzcmNfcG1kdmFsKTtcbjI3ODU6XHRcbjI3ODY6XHRcdGlmICghaXNfaHVnZV96ZXJvX3BtZChzcmNfcG1kdmFsKSkge1xuMjc4NzpcdFx0XHRpZiAodW5saWtlbHkoIVBhZ2VBbm9uRXhjbHVzaXZlKHNyY19wYWdlKSkpIHtcbjI3ODg6XHRcdFx0XHRzcGluX3VubG9jayhzcmNfcHRsKTtcbjI3ODk6XHRcdFx0XHRyZXR1cm4gLUVCVVNZO1xuMjc5MDpcdFx0XHR9XG4yNzkxOlx0XG4yNzkyOlx0XHRcdHNyY19mb2xpbyA9IHBhZ2VfZm9saW8oc3JjX3BhZ2UpO1xuMjc5MzpcdFx0XHRmb2xpb19nZXQoc3JjX2ZvbGlvKTtcbjI3OTQ6XHRcdH0gZWxzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDEzOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3MDIKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBNRCBNaWdyYXRpb24gQnVnIEZpeCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHBvaW50aW5nIG91dCBhIHByZXR0eSBzaWduaWZpY2FudCBidWcuIEl0IHNlZW1zIHRoYXQgdGhlIGBwbWRfbWlncmF0aW9uX2VudHJ5X3dhaXRgIGZ1bmN0aW9uIHdhcyBiZWluZyBjYWxsZWQgd2l0aCBhIGxvY2FsIHZhcmlhYmxlLCBgc3JjX3BtZHZhbGAsIGluc3RlYWQgb2YgdGhlIGludGVuZGVkIGBzcmNfcG1kYCBwb2ludGVyLiBUaGF0JiMzOTtzIGEgY2xhc3NpYyBwb2ludGVyIG1pc2hhcCwgYW5kIGEgZmFpcmx5IHNlcmlvdXMgb25lLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIGFsbCBzb3J0cyBvZiBtZW1vcnkgY29ycnVwdGlvbiBvciBpbmNvcnJlY3QgYmVoYXZpb3IuIFNpbmNlIHRoaXMgaXMgYSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9uLCB0aGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IG5lZWRzIGNhcmVmdWwgcmV2aWV3LiBSaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgYHBtZF9taWdyYXRpb25fZW50cnlfd2FpdGAgZnVuY3Rpb24gaXRzZWxmIGFuZCBzZWUgaG93IHRoaXMgaW5jb3JyZWN0IHBvaW50ZXIgd2FzIGJlaW5nIHVzZWQgYW5kIHdoYXQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgZml4IGFyZS4gVGhpcyBraW5kIG9mIG1pc3Rha2UgY2FuIGhhdmUgc3VidGxlIGJ1dCBkZXZhc3RhdGluZyBlZmZlY3RzLCBzbyBsZXQmIzM5O3MgbWFrZSBzdXJlIHdlIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIHJhbWlmaWNhdGlvbnMgb2YgdGhpcyBwYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAxMzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwbWRfbWlncmF0aW9uX2VudHJ5X3dhaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zd2Fwb3BzLmg9MzI4PWV4dGVybiB2b2lkIHJlbW92ZV9taWdyYXRpb25fcG1kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcbi0tXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0zMzAtXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaDozMzE6ZXh0ZXJuIHZvaWQgcG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kKTtcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTMzMi1cbi0tXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaD0zNDg9c3RhdGljIGlubGluZSB2b2lkIHJlbW92ZV9taWdyYXRpb25fcG1kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcbi0tXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0zNTMtXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaDozNTQ6c3RhdGljIGlubGluZSB2b2lkIHBtZF9taWdyYXRpb25fZW50cnlfd2FpdChzdHJ1Y3QgbW1fc3RydWN0ICptLCBwbWRfdCAqcCkgeyB9XG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0zNTUtXG4tLVxubW0vaG1tLmM9Mzk2PXN0YXRpYyBpbnQgaG1tX3ZtYV93YWxrX3BtZChwbWRfdCAqcG1kcCxcbi0tXG5tbS9obW0uYy00MTctXHRcdFx0aG1tX3ZtYV93YWxrLVx1MDAzZWxhc3QgPSBhZGRyO1xubW0vaG1tLmM6NDE4Olx0XHRcdHBtZF9taWdyYXRpb25fZW50cnlfd2FpdCh3YWxrLVx1MDAzZW1tLCBwbWRwKTtcbm1tL2htbS5jLTQxOS1cdFx0XHRyZXR1cm4gLUVCVVNZO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9Mjc0OT1pbnQgbW92ZV9wYWdlc19odWdlX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKmRzdF9wbWQsIHBtZF90ICpzcmNfcG1kLCBwbWRfdCBkc3RfcG1kdmFsLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMjc3Ny1cdFx0aWYgKHBtZF9pc19taWdyYXRpb25fZW50cnkoc3JjX3BtZHZhbCkpIHtcbm1tL2h1Z2VfbWVtb3J5LmM6Mjc3ODpcdFx0XHRwbWRfbWlncmF0aW9uX2VudHJ5X3dhaXQobW0sIHNyY19wbWQpO1xubW0vaHVnZV9tZW1vcnkuYy0yNzc5LVx0XHRcdHJldHVybiAtRUFHQUlOO1xuLS1cbm1tL21lbW9yeS5jPTY0MTA9c3RhdGljIHZtX2ZhdWx0X3QgX19oYW5kbGVfbW1fZmF1bHQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vbWVtb3J5LmMtNjQ4Ny1cdFx0aWYgKHBtZF9pc19taWdyYXRpb25fZW50cnkodm1mLm9yaWdfcG1kKSlcbm1tL21lbW9yeS5jOjY0ODg6XHRcdFx0cG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0KG1tLCB2bWYucG1kKTtcbm1tL21lbW9yeS5jLTY0ODktXHRcdHJldHVybiAwO1xuLS1cbm1tL21pZ3JhdGUuYz01MTY9dm9pZCBtaWdyYXRpb25fZW50cnlfd2FpdF9odWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKVxuLS1cbm1tL21pZ3JhdGUuYy01NDgtI2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRlxubW0vbWlncmF0ZS5jOjU0OTp2b2lkIHBtZF9taWdyYXRpb25fZW50cnlfd2FpdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZClcbm1tL21pZ3JhdGUuYy01NTAte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDEzOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2OTMKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgdGhlIGBtb3ZlX3BhZ2VzX2h1Z2VfcG1kYCBDYWxsIENoYWluKioKCkhtbSwgc28gYG1vdmVfcGFnZXNfaHVnZV9wbWRgIGlzIHRoZSBmdW5jdGlvbiBvZiBpbnRlcmVzdC4gSSBrbm93IGl0JiMzOTtzIGludm9sdmVkIGluIG1vdmluZyBodWdlIHBhZ2VzLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgb3RoZXIgcGFnZSBtaWdyYXRpb24gZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgYG1vdmVfcGFnZXNfcHRlYCBhbmQgYG1vdmVfcGFnZV90YWJsZXNgLiBSaWdodCwgdGhlIGNvcmUgcXVlc3Rpb24gaXMgKmhvdyogaXMgYG1vdmVfcGFnZXNfaHVnZV9wbWRgIGNhbGxlZD8gSXMgaXQgYSBkaXJlY3QgZW50cnkgcG9pbnQsIG9yIGRvZXMgaXQgZ2V0IGludm9rZWQgYnkgdGhvc2Ugb3RoZXIgcm91dGluZXM/IFRoZSBiZXN0IHdheSB0byB1bmRlcnN0YW5kIHRoaXMgaXMgdG8gY2hlY2sgdGhlICpjYWxsZXJzKiBvZiBgbW92ZV9wYWdlc19odWdlX3BtZGAuIEZpbmRpbmcgb3V0IHdoYXQgZnVuY3Rpb25zIGRpcmVjdGx5IGNhbGwgaXQgd2lsbCBpbGx1bWluYXRlIHRoZSBjb250cm9sIGZsb3cgYW5kIGxldCBtZSB1bmRlcnN0YW5kIGl0cyBwbGFjZSBpbiB0aGUgYnJvYWRlciBtaWdyYXRpb24gc3RyYXRlZ3kuIEdvdHRhIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIHJvbGUuIFRpbWUgdG8gZGlnIGluIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAxMzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttb3ZlX3BhZ2VzX2h1Z2VfcG1kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oPTE1NT12b2lkIGRvdWJsZV9wdF91bmxvY2soc3BpbmxvY2tfdCAqcHRsMSwgc3BpbmxvY2tfdCAqcHRsMik7XG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaDoxNTY6aW50IG1vdmVfcGFnZXNfaHVnZV9wbWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpkc3RfcG1kLCBwbWRfdCAqc3JjX3BtZCwgcG1kX3QgZHN0X3BtZHZhbCxcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oLTE1Ny1cdFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdF92bWEsXG4tLVxubW0vaHVnZV9tZW1vcnkuYz0yNzAyPWludCBjaGFuZ2VfaHVnZV9wdWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0yNzQ4LSAqL1xubW0vaHVnZV9tZW1vcnkuYzoyNzQ5OmludCBtb3ZlX3BhZ2VzX2h1Z2VfcG1kKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqZHN0X3BtZCwgcG1kX3QgKnNyY19wbWQsIHBtZF90IGRzdF9wbWR2YWwsXG5tbS9odWdlX21lbW9yeS5jLTI3NTAtXHRcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnNyY192bWEsXG4tLVxubW0vdXNlcmZhdWx0ZmQuYz0xOTM0PXN0YXRpYyBzc2l6ZV90IG1vdmVfcGFnZXMoc3RydWN0IHVzZXJmYXVsdGZkX2N0eCAqY3R4LCB1bnNpZ25lZCBsb25nIGRzdF9zdGFydCxcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTIwMTQtXHRcdCAqIGJlIHN0cmljdC4gSWYgZHN0X3BtZCBjaGFuZ2VzIGludG8gVFBIIGFmdGVyIHRoaXMgY2hlY2ssIHRoZVxubW0vdXNlcmZhdWx0ZmQuYzoyMDE1Olx0XHQgKiBtb3ZlX3BhZ2VzX2h1Z2VfcG1kKCkgd2lsbCBkZXRlY3QgdGhlIGNoYW5nZSBhbmQgcmV0cnlcbm1tL3VzZXJmYXVsdGZkLmMtMjAxNi1cdFx0ICogd2hpbGUgbW92ZV9wYWdlc19wdGUoKSB3aWxsIGRldGVjdCB0aGUgY2hhbmdlIGFuZCBmYWlsLlxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtMjA0NS1cbm1tL3VzZXJmYXVsdGZkLmM6MjA0NjpcdFx0XHRlcnIgPSBtb3ZlX3BhZ2VzX2h1Z2VfcG1kKG1tLCBkc3RfcG1kLCBzcmNfcG1kLFxubW0vdXNlcmZhdWx0ZmQuYy0yMDQ3LVx0XHRcdFx0XHRcdCAgZHN0X3BtZHZhbCwgZHN0X3ZtYSwgc3JjX3ZtYSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMTM6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTQ5NQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBDb3JlIE1lbW9yeSBNYW5hZ2VtZW50IEJ1ZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIEkgcmVjb2duaXplIHRoZSBhcmVhLiBUaGlzIGhhcyB0byBkbyB3aXRoIGhvdyBgdXNlcmZhdWx0ZmRgIGFuZCBgbW92ZV9wYWdlc2AgaW50ZXJhY3QsIHNwZWNpZmljYWxseSB3aXRoIHRoZSBgVUZGRElPX01PVkVgIG9wZXJhdGlvbiwgd2hpY2ggdXRpbGl6ZXMgYG1vdmVfcGFnZXNfaHVnZV9wbWRgLiBHb3QgaXQuIFRoaXMgaXMgZGVmaW5pdGVseSBhIGNyaXRpY2FsIHBhdGgsIGEgZnVuY3Rpb24gdGhhdCYjMzk7cyBkZWZpbml0ZWx5IHVzZWQgYW5kIHJlYWNoYWJsZS4KCk5vdywgdGhlIGNvcmUgb2YgdGhlIHByb2JsZW0uLi4gaXQgbG9va3MgbGlrZSB0aGV5JiMzOTtyZSBjaGFuZ2luZyBgcG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0KG1tLCAmYW1wO3NyY19wbWR2YWwpYCB0byBgcG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0KG1tLCBzcmNfcG1kKWAuIEFuZCAqdGhhdCogaXMgdGhlIGtleS4gVGhleSYjMzk7cmUgcGFzc2luZyB0aGUgKmFkZHJlc3MqIG9mIGEgbG9jYWwgdmFyaWFibGUsIGBzcmNfcG1kdmFsYCwgdG8gYSBmdW5jdGlvbiB0aGF0JiMzOTtzIHN1cHBvc2VkIHRvIHdhaXQgb24gYSBtaWdyYXRpb24gZW50cnkuIFdhaXRpbmcgb24gYSBzdGFjayBhZGRyZXNzPyBUaGF0JiMzOTtzIGp1c3QgYXNraW5nIGZvciB0cm91YmxlISBUaGF0JiMzOTtzIGFsbW9zdCBjZXJ0YWlubHkgdGhlIHJvb3QgY2F1c2Ugb2YgYW55IGNyYXNoIG9yIGhhbmcgdGhleSYjMzk7cmUgc2VlaW5nLiBJdCYjMzk7cyBpbmNvcnJlY3QuIEkgY2FuIHNlZSB3aHkuIFBhc3NpbmcgYHNyY19wbWRgLCB3aGljaCBpcyB0aGUgYWN0dWFsIHBhZ2UgbWFwIGRlc2NyaXB0b3IsIGlzIHRoZSBjb3JyZWN0IGZpeC4KCkxldCBtZSBqdXN0IHF1aWNrbHkgdmVyaWZ5IHRoYXQgYENPTkZJR19VU0VSRkFVTFRGRGAsIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBhbmQgYENPTkZJR19NSUdSQVRJT05gIGFyZSBhbGwgZW5hYmxlZC4gVGhhdCBtYWtlcyB0aGUgY29udGV4dCBjbGVhci4gVGhpcyBpcyBwcmVjaXNlbHkgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gc2VlIHRoaXMga2luZCBvZiBpc3N1ZSBhcmlzZSB3aXRoIHRob3NlIGNvbmZpZ3VyYXRpb25zIGluIHBsYWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAxMzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttb3ZlX3BhZ2VzX2h1Z2VfcG1kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jPTI3MDI9aW50IGNoYW5nZV9odWdlX3B1ZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTI3NDgtICovXG5tbS9odWdlX21lbW9yeS5jOjI3NDk6aW50IG1vdmVfcGFnZXNfaHVnZV9wbWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpkc3RfcG1kLCBwbWRfdCAqc3JjX3BtZCwgcG1kX3QgZHN0X3BtZHZhbCxcbm1tL2h1Z2VfbWVtb3J5LmMtMjc1MC1cdFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdF92bWEsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3JjX3ZtYSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMTM6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjE4NQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGlzIGFyZWE6CgoqKkNoZWNraW5nIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uIG9mIGBtb3ZlX3BhZ2VzX2h1Z2VfcG1kYCoqCgpBbHJpZ2h0LCBJJiMzOTttIHF1aWNrbHkgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYG1vdmVfcGFnZXNfaHVnZV9wbWRgIGlzIGRlZmluZWQgYW5kIGhvdyBpdCByZWxhdGVzIHRvIFRyYW5zcGFyZW50IEh1Z2VwYWdlcy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7SXMgdGhpcyBmdW5jdGlvbiBldmVuICphdmFpbGFibGUqIHVubGVzcyBUcmFuc3BhcmVudCBIdWdlcGFnZXMgYXJlIGVuYWJsZWQ/JiMzNDsgU28sIEkmIzM5O20gZ29pbmcgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZSBjb2RlLCBzcGVjaWZpY2FsbHkgYG1tL2h1Z2VfbWVtb3J5LmNgLiBHaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtLCB0aGUgZXhpc3RlbmNlIG9mIHRoYXQgZmlsZSBpcywgaW4gaXRzZWxmLCBhIHN0cm9uZyBpbmRpY2F0b3IuIEl0IG1ha2VzIHNlbnNlLCBhcyB0aGUgaHVnZSBwYWdlIGNvZGUgd291bGQgYmUgaW4gYSBzZXBhcmF0ZSBjb21waWxhdGlvbiB1bml0LiBCdXQsIEkgbmVlZCBjb25maXJtYXRpb24uIEkmIzM5O20gaW1wbGljaXRseSByZWFzb25pbmcgdGhhdCBpZiBgbW0vaHVnZV9tZW1vcnkuY2AgaXMgY29tcGlsZWQgYmFzZWQgb24gdGhlIGAjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBtYWNybywgdGhlbiBgbW92ZV9wYWdlc19odWdlX3BtZGAgd2lsbCBvbmx5IGJlIGFjY2Vzc2libGUgaWYgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgZW5hYmxlZC4gVGltZSB0byBjb25maXJtIGFuZCB0aGVuIEkgd2lsbCBrbm93IG1vcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDEzOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2h1Z2VfbWVtb3J5Lm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT0xMDA9b2JqLSQoQ09ORklHX0RFVklDRV9NSUdSQVRJT04pICYjNDM7PSBtaWdyYXRlX2RldmljZS5vXG5tbS9NYWtlZmlsZToxMDE6b2JqLSQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSAmIzQzOz0gaHVnZV9tZW1vcnkubyBraHVnZXBhZ2VkLm9cbm1tL01ha2VmaWxlLTEwMi1vYmotJChDT05GSUdfUEFHRV9DT1VOVEVSKSAmIzQzOz0gcGFnZV9jb3VudGVyLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMTM6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjYwNgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkRlcGVuZGVuY2llcyBhbmQgVXNhZ2Ugb2YgVHJhbnNwYXJlbnQgSHVnZXBhZ2VzIGFuZCBVc2VyZmF1bHRmZCoqCgpSaWdodCwgc28gdG8gbWFrZSB0aGlzIHdvcmssIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gY29uZmlybSBpcyB0aGF0IGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIGFic29sdXRlbHkgZXNzZW50aWFsLiBUaGF0JiMzOTtzIGEgZ2l2ZW4uIEFuZCBvZiBjb3Vyc2UsIHRvIGxldmVyYWdlIGBtb3ZlX3BhZ2VzYCB0byBhY3R1YWxseSAqcmVhY2gqIHRob3NlIGh1Z2VwYWdlcywgYENPTkZJR19VU0VSRkFVTFRGRGAgaXMgYWxzbyBhIGhhcmQgcmVxdWlyZW1lbnQuIEkgbmVlZCBib3RoIG9mIHRob3NlIGtlcm5lbCBmZWF0dXJlcy4KCk5vdywgSSYjMzk7bSBqdXN0IGN1cmlvdXMgYWJvdXQgc29tZXRoaW5nIC0gSSBzaG91bGQgZG91YmxlLWNoZWNrIGFuZCBtYWtlIHN1cmUgdGhhdCBgbW92ZV9wYWdlc19odWdlX3BtZGAgaXNuJiMzOTt0IGNhbGxlZCBmcm9tIG90aGVyIHBsYWNlcyBiZXNpZGVzIHdoZXJlIEkgZXhwZWN0IGl0LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZnVsbCBzY29wZSBvZiBob3cgdGhpcyBmdW5jdGlvbiBpcyB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAxMzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttb3ZlX3BhZ2VzX2h1Z2VfcG1kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oPTE1NT12b2lkIGRvdWJsZV9wdF91bmxvY2soc3BpbmxvY2tfdCAqcHRsMSwgc3BpbmxvY2tfdCAqcHRsMik7XG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaDoxNTY6aW50IG1vdmVfcGFnZXNfaHVnZV9wbWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpkc3RfcG1kLCBwbWRfdCAqc3JjX3BtZCwgcG1kX3QgZHN0X3BtZHZhbCxcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oLTE1Ny1cdFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdF92bWEsXG4tLVxubW0vaHVnZV9tZW1vcnkuYz0yNzAyPWludCBjaGFuZ2VfaHVnZV9wdWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0yNzQ4LSAqL1xubW0vaHVnZV9tZW1vcnkuYzoyNzQ5OmludCBtb3ZlX3BhZ2VzX2h1Z2VfcG1kKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqZHN0X3BtZCwgcG1kX3QgKnNyY19wbWQsIHBtZF90IGRzdF9wbWR2YWwsXG5tbS9odWdlX21lbW9yeS5jLTI3NTAtXHRcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnNyY192bWEsXG4tLVxubW0vdXNlcmZhdWx0ZmQuYz0xOTM0PXN0YXRpYyBzc2l6ZV90IG1vdmVfcGFnZXMoc3RydWN0IHVzZXJmYXVsdGZkX2N0eCAqY3R4LCB1bnNpZ25lZCBsb25nIGRzdF9zdGFydCxcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTIwMTQtXHRcdCAqIGJlIHN0cmljdC4gSWYgZHN0X3BtZCBjaGFuZ2VzIGludG8gVFBIIGFmdGVyIHRoaXMgY2hlY2ssIHRoZVxubW0vdXNlcmZhdWx0ZmQuYzoyMDE1Olx0XHQgKiBtb3ZlX3BhZ2VzX2h1Z2VfcG1kKCkgd2lsbCBkZXRlY3QgdGhlIGNoYW5nZSBhbmQgcmV0cnlcbm1tL3VzZXJmYXVsdGZkLmMtMjAxNi1cdFx0ICogd2hpbGUgbW92ZV9wYWdlc19wdGUoKSB3aWxsIGRldGVjdCB0aGUgY2hhbmdlIGFuZCBmYWlsLlxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtMjA0NS1cbm1tL3VzZXJmYXVsdGZkLmM6MjA0NjpcdFx0XHRlcnIgPSBtb3ZlX3BhZ2VzX2h1Z2VfcG1kKG1tLCBkc3RfcG1kLCBzcmNfcG1kLFxubW0vdXNlcmZhdWx0ZmQuYy0yMDQ3LVx0XHRcdFx0XHRcdCAgZHN0X3BtZHZhbCwgZHN0X3ZtYSwgc3JjX3ZtYSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMTM6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzM4OAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGRpc3RpbGxlZCB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpczoKCioqTmFycm93aW5nIHRoZSBTY29wZTogVUZGRCBhbmQgSHVnZSBQYWdlcyoqCgpPa2F5LCB0aGlzIGxvb2tzIGxpa2UgYSB0YXJnZXRlZCBpbnZlc3RpZ2F0aW9uLiBJJiMzOTttIHNlZWluZyB0aGlzIGlzIGFsbCBhYm91dCBgbW0vdXNlcmZhdWx0ZmQuY2AsIHNvIEkmIzM5O20gaW1tZWRpYXRlbHkgaG9taW5nIGluIG9uIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIFVzZXJmYXVsdGZkIChVRkZEKSBhbmQgbGlrZWx5IFRyYW5zcGFyZW50IEh1Z2VQYWdlcyAoVEhQKS4gTXkgYnJhaW4mIzM5O3MgYWxyZWFkeSBmbGFzaGluZyBvbiB0aG9zZSBrZXkgY29uZmlnIG9wdGlvbnM6IGBDT05GSUdfVVNFUkZBVUxURkRgIGFuZCBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoZXNlIHR3byBzeXN0ZW1zIGFyZSB3b3JraW5nIChvciBwb3RlbnRpYWxseSBmYWlsaW5nIHRvIHdvcmspIHRvZ2V0aGVyLiBNeSBpbnN0aW5jdCBpcyB0aGF0IHRoZSBgbW92ZV9wYWdlc19odWdlX3BtZGAgZnVuY3Rpb24gaXMgdGhlIHBsYWNlIHRvIHN0YXJ0LiBUaGF0IGxvb2tzIGxpa2UgdGhlIGNvcmUgd29yaywgbW92aW5nIHRoZSBsYXJnZSBwYWdlcy4KCkkmIzM5O2xsIHF1aWNrbHkgY29uZmlybSB0aGF0IGBtb3ZlX3BhZ2VzYCBpbiBgbW0vdXNlcmZhdWx0ZmQuY2AgaXMgc3RhdGljLiBBbHJpZ2h0LCBqdXN0IGFzIEkgc3VzcGVjdGVkIGl0IGlzLiBUaGF0IG5hcnJvd3MgZG93biB3aGVyZSBpdCBjYW4gYmUgY2FsbGVkIGZyb20uIEEgcXVpY2sgc2VhcmNoIHRocm91Z2ggdGhlIGNvZGUgcmV2ZWFscyBgdXNlcmZhdWx0ZmRfbW92ZWAgaXMgdGhlIGNhbGxlci4gSSYjMzk7bGwgbmVlZCB0byBmb2xsb3cgdGhlIGV4ZWN1dGlvbiBmbG93IGZyb20gdGhlcmUuIFRoYXQgc2VlbXMgdG8gYmUgdGhlIGNyaXRpY2FsIGVudHJ5IHBvaW50IHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHN5c3RlbXMgaW50ZXJwbGF5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAxMzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttb3ZlX3BhZ2VzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdXNlcmZhdWx0ZmQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS91c2VyZmF1bHRmZC5jPTEzODI9c3RhdGljIGludCBtb3ZlX3plcm9wYWdlX3B0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTE0MTQtICovXG5tbS91c2VyZmF1bHRmZC5jOjE0MTU6c3RhdGljIGxvbmcgbW92ZV9wYWdlc19wdGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqZHN0X3BtZCwgcG1kX3QgKnNyY19wbWQsXG5tbS91c2VyZmF1bHRmZC5jLTE0MTYtXHRcdFx0ICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSxcbi0tXG5tbS91c2VyZmF1bHRmZC5jPTE4NTk9c3RhdGljIHZvaWQgdWZmZF9tb3ZlX3VubG9jayhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdF92bWEsXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0xODY3LS8qKlxubW0vdXNlcmZhdWx0ZmQuYzoxODY4OiAqIG1vdmVfcGFnZXMgLSBtb3ZlIGFyYml0cmFyeSBhbm9ueW1vdXMgcGFnZXMgb2YgYW4gZXhpc3Rpbmcgdm1hXG5tbS91c2VyZmF1bHRmZC5jLTE4NjktICogQGN0eDogcG9pbnRlciB0byB0aGUgdXNlcmZhdWx0ZmQgY29udGV4dFxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtMTg3Ni0gKlxubW0vdXNlcmZhdWx0ZmQuYzoxODc3OiAqIG1vdmVfcGFnZXMoKSByZW1hcHMgYXJiaXRyYXJ5IGFub255bW91cyBwYWdlcyBhdG9taWNhbGx5IGluIHplcm9cbm1tL3VzZXJmYXVsdGZkLmMtMTg3OC0gKiBjb3B5LiBJdCBvbmx5IHdvcmtzIG9uIG5vbiBzaGFyZWQgYW5vbnltb3VzIHBhZ2VzIGJlY2F1c2UgdGhvc2UgY2FuXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0xODg4LSAqIHN0b3JhZ2Ugb3IgYW55IG90aGVyIEkvTyBkZXZpY2UgKE1BRFZfRE9OVEZPUksgaW4gdGhlIHNvdXJjZSB2bWFcbm1tL3VzZXJmYXVsdGZkLmM6MTg4OTogKiBhdm9pZHMgbW92ZV9wYWdlcygpIHRvIGZhaWwgd2l0aCAtRUJVU1kgaWYgdGhlIHByb2Nlc3MgZm9ya3MgYmVmb3JlXG5tbS91c2VyZmF1bHRmZC5jOjE4OTA6ICogbW92ZV9wYWdlcygpIGlzIGNhbGxlZCksIHRoZW4gaXQgd2lsbCBjYWxsIG1vdmVfcGFnZXMoKSB0byBtYXAgdGhlXG5tbS91c2VyZmF1bHRmZC5jLTE4OTEtICogcGFnZSBpbiB0aGUgZmF1bHRpbmcgYWRkcmVzcyBpbiB0aGUgZGVzdGluYXRpb24gdm1hLlxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtMTkwNS0gKiB0aGUgZGVzdGluYXRpb24gdmlydHVhbCBtZW1vcnkgcmFuZ2UgaXMgbm90IGEgd2hvbGUgdW5tYXBwZWQgaG9sZSxcbm1tL3VzZXJmYXVsdGZkLmM6MTkwNjogKiBtb3ZlX3BhZ2VzKCkgd2lsbCBmYWlsIHJlc3BlY3RpdmVseSB3aXRoIC1FTk9FTlQgb3IgLUVFWElTVC4gVGhpc1xubW0vdXNlcmZhdWx0ZmQuYy0xOTA3LSAqIHByb3ZpZGVzIGEgdmVyeSBzdHJpY3QgYmVoYXZpb3IgdG8gYXZvaWQgYW55IGNoYW5jZSBvZiBtZW1vcnlcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTE5MTAtICogdGltZSBmb3IgYW55IGdpdmVuIGZhdWx0aW5nIGFkZHJlc3MuIFRoaXMgbWVhbnMgdGhhdCBpZiB0d28gdGhyZWFkc1xubW0vdXNlcmZhdWx0ZmQuYzoxOTExOiAqIHRyeSB0byBib3RoIGNhbGwgbW92ZV9wYWdlcygpIG9uIHRoZSBzYW1lIGRlc3RpbmF0aW9uIGFkZHJlc3MgYXQgdGhlXG5tbS91c2VyZmF1bHRmZC5jLTE5MTItICogc2FtZSB0aW1lLCB0aGUgc2Vjb25kIHRocmVhZCB3aWxsIGdldCBhbiBleHBsaWNpdCBlcnJvciBmcm9tIHRoaXNcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTE5MjAtICogYW4gYW1vdW50IG9mIGJ5dGVzIHN1Y2Nlc3NmdWxseSBtb3ZlZC4gSWYgdGhlIHJldHZhbCByZXBvcnRzIGFcbm1tL3VzZXJmYXVsdGZkLmM6MTkyMTogKiBcJiMzNDtzaG9ydFwmIzM0OyByZW1hcCwgdGhlIG1vdmVfcGFnZXMoKSBjb21tYW5kIHNob3VsZCBiZSByZXBlYXRlZCBieVxubW0vdXNlcmZhdWx0ZmQuYy0xOTIyLSAqIHVzZXJsYW5kIHdpdGggc3JjJiM0MztyZXR2YWwsIGRzdCYjNDM7cmV2YWwsIGxlbi1yZXR2YWwgaWYgaXQgd2FudHMgdG8ga25vd1xuLS1cbm1tL3VzZXJmYXVsdGZkLmMtMTkzMy0gKi9cbm1tL3VzZXJmYXVsdGZkLmM6MTkzNDpzdGF0aWMgc3NpemVfdCBtb3ZlX3BhZ2VzKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCwgdW5zaWduZWQgbG9uZyBkc3Rfc3RhcnQsXG5tbS91c2VyZmF1bHRmZC5jLTE5MzUtXHRcdCAgIHVuc2lnbmVkIGxvbmcgc3JjX3N0YXJ0LCB1bnNpZ25lZCBsb25nIGxlbiwgX191NjQgbW9kZSlcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTIwMTQtXHRcdCAqIGJlIHN0cmljdC4gSWYgZHN0X3BtZCBjaGFuZ2VzIGludG8gVFBIIGFmdGVyIHRoaXMgY2hlY2ssIHRoZVxubW0vdXNlcmZhdWx0ZmQuYzoyMDE1Olx0XHQgKiBtb3ZlX3BhZ2VzX2h1Z2VfcG1kKCkgd2lsbCBkZXRlY3QgdGhlIGNoYW5nZSBhbmQgcmV0cnlcbm1tL3VzZXJmYXVsdGZkLmM6MjAxNjpcdFx0ICogd2hpbGUgbW92ZV9wYWdlc19wdGUoKSB3aWxsIGRldGVjdCB0aGUgY2hhbmdlIGFuZCBmYWlsLlxubW0vdXNlcmZhdWx0ZmQuYy0yMDE3LVx0XHQgKi9cbi0tXG5tbS91c2VyZmF1bHRmZC5jLTIwNDEtXHRcdFx0XHRzcGxpdF9odWdlX3BtZChzcmNfdm1hLCBzcmNfcG1kLCBzcmNfYWRkcik7XG5tbS91c2VyZmF1bHRmZC5jOjIwNDI6XHRcdFx0XHQvKiBUaGUgZm9saW8gd2lsbCBiZSBzcGxpdCBieSBtb3ZlX3BhZ2VzX3B0ZSgpICovXG5tbS91c2VyZmF1bHRmZC5jLTIwNDMtXHRcdFx0XHRjb250aW51ZTtcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTIwNDUtXG5tbS91c2VyZmF1bHRmZC5jOjIwNDY6XHRcdFx0ZXJyID0gbW92ZV9wYWdlc19odWdlX3BtZChtbSwgZHN0X3BtZCwgc3JjX3BtZCxcbm1tL3VzZXJmYXVsdGZkLmMtMjA0Ny1cdFx0XHRcdFx0XHQgIGRzdF9wbWR2YWwsIGRzdF92bWEsIHNyY192bWEsXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0yMDY4LVxubW0vdXNlcmZhdWx0ZmQuYzoyMDY5Olx0XHRcdHJldCA9IG1vdmVfcGFnZXNfcHRlcyhtbSwgZHN0X3BtZCwgc3JjX3BtZCxcbm1tL3VzZXJmYXVsdGZkLmMtMjA3MC1cdFx0XHRcdFx0ICAgICAgZHN0X3ZtYSwgc3JjX3ZtYSwgZHN0X2FkZHIsXG4tLVxubW0vdXNlcmZhdWx0ZmQuYz00MjE5PXN0YXRpYyBpbnQgdXNlcmZhdWx0ZmRfbW92ZShzdHJ1Y3QgdXNlcmZhdWx0ZmRfY3R4ICpjdHgsXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy00MjU4LVx0aWYgKG1tZ2V0X25vdF96ZXJvKG1tKSkge1xubW0vdXNlcmZhdWx0ZmQuYzo0MjU5Olx0XHRyZXQgPSBtb3ZlX3BhZ2VzKGN0eCwgdWZmZGlvX21vdmUuZHN0LCB1ZmZkaW9fbW92ZS5zcmMsXG5tbS91c2VyZmF1bHRmZC5jLTQyNjAtXHRcdFx0XHQgdWZmZGlvX21vdmUubGVuLCB1ZmZkaW9fbW92ZS5tb2RlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMTM6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTA2OQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipNeSBBbmFseXNpcyBvZiBgbW92ZV9wYWdlc19odWdlX3BtZGAgYW5kIFJlbGF0ZWQgQ29uZmlndXJhdGlvbnMqKgoKUmlnaHQsIHNvIEkgc2VlIGBtb3ZlX3BhZ2VzX2h1Z2VfcG1kYCBpcyB0aGUgY2VudHJhbCBmdW5jdGlvbiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGhlcmUg4oCTIHRoYXQmIzM5O3MgdGhlIG9uZSB0byBzY3J1dGluaXplIGZpcnN0LiBUaGUga2V5IGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byBrZWVwIGluIG1pbmQsIG9mIGNvdXJzZSwgYXJlIGBVU0VSRkFVTFRGRGAgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuIFRoZXnigJlsbCB1bmRvdWJ0ZWRseSBwbGF5IGEgc2lnbmlmaWNhbnQgcm9sZSBpbiBob3cgdGhpcyBmdW5jdGlvbiBvcGVyYXRlcywgaGFuZGxpbmcgcGFnZSBmYXVsdHMsIGFuZCBkZWFsaW5nIHdpdGggdHJhbnNwYXJlbnQgaHVnZXBhZ2VzLCByZXNwZWN0aXZlbHkuIEkgbmVlZCB0byBiZSBhd2FyZSBvZiB0aGVpciBpbnRlcmFjdGlvbnMuCgpOb3csIGEgcXVpY2sgc2lkZSB0aG91Z2h04oCmIEkgc2hvdWxkIGp1c3QgZG91YmxlLWNoZWNrIGlmIGBDT05GSUdfTUlHUkFUSU9OYCBpcyBhY3R1YWxseSBhIGhhcmQgcmVxdWlyZW1lbnQgaGVyZS4gSXQgc2VlbXMgbGlrZSBhIGNvcmUgY29uY2VwdCwgYnV0IEkgc2hvdWxkIGNvbmZpcm0gaXTigJlzIGVzc2VudGlhbCB0byB0aGUgZnVuY3Rpb24mIzM5O3Mgb3BlcmF0aW9uIG9yIGlmIGl04oCZcyBtb3JlIGZvciBhIGJyb2FkZXIgY29udGV4dC4gT2theSwgbGV0IG1lIGRvIGEgcXVpY2sgc2VhcmNoLiBBaCwgcmlnaHQuIEl0IGxvb2tzIGxpa2UgYHBtZF9taWdyYXRpb25fZW50cnlfd2FpdGAgaXMgZGVmaW5lZCBpbiBgaW5jbHVkZS9saW51eC9zd2Fwb3BzLmhgLCB3aGljaCBnaXZlcyBhIGhpbnQgb24gaXRzIHB1cnBvc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDEzOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BtZF9taWdyYXRpb25fZW50cnlfd2FpdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc3dhcG9wcy5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc3dhcG9wcy5oPTMyOD1leHRlcm4gdm9pZCByZW1vdmVfbWlncmF0aW9uX3BtZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsXG4tLVxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzMwLVxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg6MzMxOmV4dGVybiB2b2lkIHBtZF9taWdyYXRpb25fZW50cnlfd2FpdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZCk7XG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0zMzItXG4tLVxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg9MzQ4PXN0YXRpYyBpbmxpbmUgdm9pZCByZW1vdmVfbWlncmF0aW9uX3BtZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsXG4tLVxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzUzLVxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg6MzU0OnN0YXRpYyBpbmxpbmUgdm9pZCBwbWRfbWlncmF0aW9uX2VudHJ5X3dhaXQoc3RydWN0IG1tX3N0cnVjdCAqbSwgcG1kX3QgKnApIHsgfVxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzU1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAxMzo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NjU0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6CgoqKkFuYWx5emluZyBgcG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0YCBpbiBgc3dhcG9wcy5oYCoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gc3Vycm91bmRpbmcgYHBtZF9taWdyYXRpb25fZW50cnlfd2FpdGAgd2l0aGluIGBpbmNsdWRlL2xpbnV4L3N3YXBvcHMuaGAuIFRoaXMgbGlrZWx5IGluZGljYXRlcyB0aGF0IGl0cyBiZWhhdmlvciBvciBldmVuIGl0cyBleGlzdGVuY2UgaXMgcGxhdGZvcm0tc3BlY2lmaWMgb3IgZGVwZW5kcyBvbiBjZXJ0YWluIGtlcm5lbCBjb25maWd1cmF0aW9ucy4gVGhlIGAjaWZkZWZgIGRpcmVjdGl2ZXMgYXJlIHRoZSBrZXkgaGVyZS4gSSB3YW50IHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHVuZGVyIHdoaWNoIGNvbmRpdGlvbnMgdGhpcyBmdW5jdGlvbiBpcyAqcHJlc2VudCogYW5kICp3aGF0KiB0aG9zZSBjb25kaXRpb25zIGFyZS4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBzcGVjaWZpYyBhcmNoaXRlY3R1cmUsIGEgZmVhdHVyZSBmbGFnLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gS25vd2luZyB0aGlzIGNvbnRleHQgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgZnVuY3Rpb24mIzM5O3MgcHVycG9zZSBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBtZW1vcnkgbWFuYWdlbWVudCBmcmFtZXdvcmsuIEVzc2VudGlhbGx5LCBmaWd1cmluZyBvdXQgd2hlbiAqaXQmIzM5O3MgdGhlcmUqIHdpbGwgdGVsbCBtZSBhIGxvdCBhYm91dCAqd2h5KiBpdCYjMzk7cyB0aGVyZS4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgaXRzIHVzZTsgd2hhdCBjb25maWd1cmF0aW9ucyByZWx5IG9uIGl0LCBhbmQgd2hhdCBjb25maWd1cmF0aW9ucyBkbyBub3Q/IFRoaXMgd2lsbCB0ZWxsIG1lIGhvdyBjcml0aWNhbCBpdCBpcyBmb3IgYSBnZW5lcmFsIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvZGUuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgZ2V0dGluZyB0byB0aGF0IGxpbmUsIGFuZCB0aGVuIGJhY2tpbmcgb3V0IHVudGlsIEkgc2VlIHdoYXQgaXMgaGFwcGVuaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAxMzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc3dhcG9wcy5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMjA6XHR9XG4gMzIxOlx0XG4gMzIyOlx0c3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrO1xuIDMyMzpcdFxuIDMyNDpcdCNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUZcbiAzMjU6XHRleHRlcm4gaW50IHNldF9wbWRfbWlncmF0aW9uX2VudHJ5KHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcbiAzMjY6XHRcdFx0c3RydWN0IHBhZ2UgKnBhZ2UpO1xuIDMyNzpcdFxuIDMyODpcdGV4dGVybiB2b2lkIHJlbW92ZV9taWdyYXRpb25fcG1kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcbiAzMjk6XHRcdFx0c3RydWN0IHBhZ2UgKm5ldyk7XG4gMzMwOlx0XG4gMzMxOlx0ZXh0ZXJuIHZvaWQgcG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kKTtcbiAzMzI6XHRcbiAzMzM6XHRzdGF0aWMgaW5saW5lIHBtZF90IHN3cF9lbnRyeV90b19wbWQoc3dwX2VudHJ5X3QgZW50cnkpXG4gMzM0Olx0e1xuIDMzNTpcdFx0c3dwX2VudHJ5X3QgYXJjaF9lbnRyeTtcbiAzMzY6XHRcbiAzMzc6XHRcdGFyY2hfZW50cnkgPSBfX3N3cF9lbnRyeShzd3BfdHlwZShlbnRyeSksIHN3cF9vZmZzZXQoZW50cnkpKTtcbiAzMzg6XHRcdHJldHVybiBfX3N3cF9lbnRyeV90b19wbWQoYXJjaF9lbnRyeSk7XG4gMzM5Olx0fVxuIDM0MDpcdFxuIDM0MTpcdCNlbHNlICAvKiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYgKi9cbiAzNDI6XHRzdGF0aWMgaW5saW5lIGludCBzZXRfcG1kX21pZ3JhdGlvbl9lbnRyeShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsXG4gMzQzOlx0XHRcdHN0cnVjdCBwYWdlICpwYWdlKVxuIDM0NDpcdHtcbiAzNDU6XHRcdEJVSUxEX0JVRygpO1xuIDM0NjpcdH1cbiAzNDc6XHRcbiAzNDg6XHRzdGF0aWMgaW5saW5lIHZvaWQgcmVtb3ZlX21pZ3JhdGlvbl9wbWQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LFxuIDM0OTpcdFx0XHRzdHJ1Y3QgcGFnZSAqbmV3KVxuIDM1MDpcdHtcbiAzNTE6XHRcdEJVSUxEX0JVRygpO1xuIDM1MjpcdH1cbiAzNTM6XHRcbiAzNTQ6XHRzdGF0aWMgaW5saW5lIHZvaWQgcG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0KHN0cnVjdCBtbV9zdHJ1Y3QgKm0sIHBtZF90ICpwKSB7IH1cbiAzNTU6XHRcbiAzNTY6XHRzdGF0aWMgaW5saW5lIHBtZF90IHN3cF9lbnRyeV90b19wbWQoc3dwX2VudHJ5X3QgZW50cnkpXG4gMzU3Olx0e1xuIDM1ODpcdFx0cmV0dXJuIF9fcG1kKDApO1xuIDM1OTpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMTM6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA2MTMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgQ29kZWJhc2U6IFRoZSBTZWFyY2ggZm9yIGBwbWRfbWlncmF0aW9uX2VudHJ5X3dhaXRgKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYHBtZF9taWdyYXRpb25fZW50cnlfd2FpdGAgaXMgYWN0dWFsbHkgKmRlZmluZWQqLiBJIHZhZ3VlbHkgcmVtZW1iZXIgaXQsIGJ1dCBhIHF1aWNrIHNlYXJjaCBkaWRuJiMzOTt0IGltbWVkaWF0ZWx5IHR1cm4gdXAgdGhlIHNvdXJjZS4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgZXJyb3IgbWVzc2FnZSBvciBjb250ZXh0IGhhZCB0byBoYXZlIG1lbnRpb25lZCB0aGUgZmlsZS4gQWgsIHllcyEgSXQgbG9va3MgbGlrZSB0aGUgc3lzdGVtJiMzOTtzIHRlbGxpbmcgbWUgaXQmIzM5O3MgbG9jYXRlZCBpbiBgbW0vbWlncmF0ZS5jYC4gT2theSwgdGhhdCBtYWtlcyBzZW5zZTsgdGhhdCBzb3VuZHMgbGlrZSBhIHBsYXVzaWJsZSBsb2NhdGlvbiBmb3IgbWVtb3J5IG1pZ3JhdGlvbiByZWxhdGVkIGZ1bmN0aW9ucy4gQWxyaWdodCwgdGltZSB0byBvcGVuIHVwIGBtbS9taWdyYXRlLmNgIGFuZCBkaWcgaW50byB0aGUgaW1wbGVtZW50YXRpb24gdGhlcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBmdW5jdGlvbiBkb2VzIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIG1pZ3JhdGlvbiBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAxMzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwbWRfbWlncmF0aW9uX2VudHJ5X3dhaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9taWdyYXRlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWlncmF0ZS5jPTUxNj12b2lkIG1pZ3JhdGlvbl9lbnRyeV93YWl0X2h1Z2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApXG4tLVxubW0vbWlncmF0ZS5jLTU0OC0jaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGXG5tbS9taWdyYXRlLmM6NTQ5OnZvaWQgcG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kKVxubW0vbWlncmF0ZS5jLTU1MC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDEzOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwOTg1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGBwbWRfbWlncmF0aW9uX2VudHJ5X3dhaXRgJiMzOTtzIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgbW0vbWlncmF0ZS5jYCBhbmQgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHN1cnJvdW5kaW5nIGBwbWRfbWlncmF0aW9uX2VudHJ5X3dhaXRgLiBJIGtub3cgdGhpcyBmdW5jdGlvbiBpcyBjcml0aWNhbCBmb3IgaGFuZGxpbmcgcGFnZSBtaWdyYXRpb25zIGF0IHRoZSBQYWdlIE1pZGRsZSBEaXJlY3RvcnkgKFBNRCkgbGV2ZWwuIE15IGluaXRpYWwgaHlwb3RoZXNpcyBpcyB0aGF0IGl0cyBwcmVzZW5jZSBvciBiZWhhdmlvciBpcyBwcm9iYWJseSB0aWVkIHRvIHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9ucyBvciBhcmNoaXRlY3R1cmFsIGZlYXR1cmVzIHJlbGF0ZWQgdG8gcGFnZSBtaWdyYXRpb24sIGVpdGhlciBvbiBhIHNwZWNpZmljIGFyY2hpdGVjdHVyZSwgb3IgYSBwYXJ0aWN1bGFyIGtlcm5lbCBjb25maWcuIEkgd2FudCB0byB1bmRlcnN0YW5kIHdoYXQgY29uZmlndXJhdGlvbnMgcmVxdWlyZSBvciBlbmFibGUgdGhpcyBmdW5jdGlvbmFsaXR5OyBhIGAjaWZkZWZgIGNoZWNrIHdpbGwgYmUgdGhlIHF1aWNrZXN0IHdheSB0byBkbyB0aGF0LiBJIGV4cGVjdCBpdCYjMzk7cyBnb2luZyB0byBiZSBzb21ldGhpbmcgbGlrZSBhIGZsYWcgZm9yIFRIUCBtaWdyYXRpb24sIE5VTUEsIG9yIHNvbWUgb3RoZXIgbWVtb3J5IG1hbmFnZW1lbnQgc2V0dGluZy4gVW5kZXJzdGFuZGluZyB0aGUgY29uZGl0aW9uYWwgY29tcGlsZSB3aWxsIGhlbHAgbWUgcXVpY2tseSBhc2NlcnRhaW4gd2hpY2gga2VybmVsIGJ1aWxkIHRoaXMgc3BlY2lmaWMgc2VjdGlvbiBvZiBjb2RlIGFwcGxpZXMgdG8uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDEzOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWlncmF0ZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1NDU6XHR9XG4gNTQ2Olx0I2VuZGlmXG4gNTQ3Olx0XG4gNTQ4Olx0I2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRlxuIDU0OTpcdHZvaWQgcG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kKVxuIDU1MDpcdHtcbiA1NTE6XHRcdHNwaW5sb2NrX3QgKnB0bDtcbiA1NTI6XHRcbiA1NTM6XHRcdHB0bCA9IHBtZF9sb2NrKG1tLCBwbWQpO1xuIDU1NDpcdFx0aWYgKCFwbWRfaXNfbWlncmF0aW9uX2VudHJ5KCpwbWQpKVxuIDU1NTpcdFx0XHRnb3RvIHVubG9jaztcbiA1NTY6XHRcdHNvZnRsZWFmX2VudHJ5X3dhaXRfb25fbG9ja2VkKHNvZnRsZWFmX2Zyb21fcG1kKCpwbWQpLCBwdGwpO1xuIDU1NzpcdFx0cmV0dXJuO1xuIDU1ODpcdHVubG9jazpcbiA1NTk6XHRcdHNwaW5fdW5sb2NrKHB0bCk7XG4gNTYwOlx0fVxuIDU2MTpcdCNlbmRpZlxuIDU2MjpcdFxuIDU2MzpcdC8qXG4gNTY0Olx0ICogUmVwbGFjZSB0aGUgZm9saW8gaW4gdGhlIG1hcHBpbmcuXG4gNTY1Olx0ICpcbiA1NjY6XHQgKiBUaGUgbnVtYmVyIG9mIHJlbWFpbmluZyByZWZlcmVuY2VzIG11c3QgYmU6XG4gNTY3Olx0ICogMSBmb3IgYW5vbnltb3VzIGZvbGlvcyB3aXRob3V0IGEgbWFwcGluZ1xuIDU2ODpcdCAqIDIgZm9yIGZvbGlvcyB3aXRoIGEgbWFwcGluZ1xuIDU2OTpcdCAqIDMgZm9yIGZvbGlvcyB3aXRoIGEgbWFwcGluZyBhbmQgdGhlIHByaXZhdGUgZmxhZyBzZXQuXG4gNTcwOlx0ICovXG4gNTcxOlx0c3RhdGljIGludCBfX2ZvbGlvX21pZ3JhdGVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiA1NzI6XHRcdFx0c3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGV4cGVjdGVkX2NvdW50KVxuIDU3MzpcdHtcbiA1NzQ6XHRcdFhBX1NUQVRFKHhhcywgXHUwMDI2bWFwcGluZy1cdTAwM2VpX3BhZ2VzLCBmb2xpby1cdTAwM2VpbmRleCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDEzOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjk1CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIHdpdGggdGhlIGJvbGRlZCBoZWFkZXIgYXMgcmVxdWVzdGVkOgoKKipVbmRlcnN0YW5kaW5nIHRoZSBSZWxhdGlvbnNoaXAgQmV0d2VlbiBQTUQgU29mdGxlYWYgU3VwcG9ydCBhbmQgTWlncmF0aW9uKioKCkFscmlnaHQsIGxldCBtZSBzZWUgaWYgSSYjMzk7dmUgZ290IHRoaXMgcmlnaHQuIEkmIzM5O20gbG9va2luZyBhdCB0aGUgZGVwZW5kZW5jaWVzIGhlcmUuIEl0IHNlZW1zIHRoYXQgYENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRmAgaXMgYSAqcHJlLXJlcXVpc2l0ZSogZm9yIHRoZSBgcG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0YCB2YXJpYWJsZSB0byBldmVuICpleGlzdCogaW4gYSBtZWFuaW5nZnVsIHN0YXRlLCByaWdodD8gTWVhbmluZyBpdCBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBhbnl0aGluZyByZWxhdGVkIHRvIG1pZ3JhdGlvbiB0byBmdW5jdGlvbi4gVGhlIGxvZ2ljJiMzOTtzIGxpa2VseSBzdHJ1Y3R1cmVkIHN1Y2ggdGhhdCBpZiB0aGUgYXJjaGl0ZWN0dXJlIGRvZXNuJiMzOTt0IHN1cHBvcnQgdGhlIGZpbmVyLWdyYWluZWQgaGFuZGxpbmcgb2YgUGFnZSBUYWJsZSBlbnRyaWVzIHRoYXQgYSBzb2Z0bGVhZiBwcm92aWRlcywgdGhlbiB0aGUgbWlncmF0aW9uIGxvZ2ljIHdvdWxkbiYjMzk7dCBiZSBzZXR1cCB0byB1dGlsaXplIGl0LgoKQW5kIHRoZW4gSSYjMzk7bSB0aGlua2luZywgaGFuZyBvbiwgdGhlIGNvcmUgbWlncmF0aW9uIGNvZGUgaXRzZWxmLCB3aGljaCBsaXZlcyBpbiBgbW0vbWlncmF0ZS5jYCwgaXMgb25seSBldmVuICpjb21waWxlZCogaW50byB0aGUga2VybmVsIGlmIGBDT05GSUdfTUlHUkFUSU9OYCBpcyBlbmFibGVkIGluIHRoZSBmaXJzdCBwbGFjZS4gU28sIHRoZSB3aG9sZSBtaWdyYXRpb24gc3Vic3lzdGVtIGlzIGdhdGVkIGJ5IHRoaXMgY29uZmlndXJhdGlvbi4gVGhlIGluaXRpYWwgY29uZGl0aW9uIGZvciBhbnl0aGluZyB0byBtYXR0ZXIgaXMgYENPTkZJR19NSUdSQVRJT05gLCBhbmQgaWYgdGhhdCYjMzk7cyB0cnVlLCB0aGVuIGBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUZgIGlzIG5lZWRlZCBmb3IgYHBtZF9taWdyYXRpb25fZW50cnlfd2FpdGAgdG8gZG8gaXRzIGpvYi4gSXQmIzM5O3MgYWxtb3N0IGEgY2FzY2FkaW5nIHNldCBvZiBjb25kaXRpb25hbHMgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMTM6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWlncmF0ZS5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9OTc9b2JqLSQoQ09ORklHX01FTVRFU1QpXHRcdCYjNDM7PSBtZW10ZXN0Lm9cbm1tL01ha2VmaWxlOjk4Om9iai0kKENPTkZJR19NSUdSQVRJT04pICYjNDM7PSBtaWdyYXRlLm9cbm1tL01ha2VmaWxlLTk5LW9iai0kKENPTkZJR19OVU1BKSAmIzQzOz0gbWVtb3J5LXRpZXJzLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMTM6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIxNTgKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKktlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llczogUE1EIFNvZnRsZWFmIGFuZCBNaWdyYXRpb24qKgoKQWxyaWdodCwgSSBzZWUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBgQ09ORklHX01JR1JBVElPTmAgYXMgYSBwcmVyZXF1aXNpdGUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBsZXQmIzM5O3MgZGV0ZXJtaW5lIGlmIHdlIGNhbiBlbmFibGUgYENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRmAuIEdpdmVuIHRoZSBjb250ZXh0LCBJJiMzOTttIGluZmVycmluZyB0aGlzIGlzIHBhcnQgb2YgdGhlIGRlcGVuZGVuY3kgY2hhaW4uIElzIHRoaXMgcGFydGljdWxhciBhcmNoaXRlY3R1cmUgZXZlbiBjYXBhYmxlIG9mIGxldmVyYWdpbmcgUE1EIHNvZnRsZWFmPyBVbmRlcnN0YW5kaW5nIHRoYXQgYml0IGlzIGNydWNpYWwgYmVmb3JlIHdlIHByb2NlZWQuIFdlIG5lZWQgdG8gYXNjZXJ0YWluIGlmIHRoZSBoYXJkd2FyZSBhbmQgcmVsZXZhbnQgYXJjaGl0ZWN0dXJlIHN1cHBvcnQgYENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRmAgYmVmb3JlIHdlIGNhbiBzdGFydCBjb25zaWRlcmluZyBmdXJ0aGVyIGNvbmZpZ3VyYXRpb24uIE90aGVyd2lzZSwgYW55IGVmZm9ydCBkb3duIHRoYXQgcGF0aCB3b3VsZCBiZSB3YXN0ZWQsIG9yIHdvcnNlLCBsZWFkIHRvIGluc3RhYmlsaXR5LiBUaGUgZW5hYmxlbWVudCBvZiBgQ09ORklHX01JR1JBVElPTmAgbGlrZWx5IGhpbmdlcyBvbiB0aGlzLCBzbyBpdCYjMzk7cyBhIGNyaXRpY2FsIGZpcnN0IGNoZWNrLiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBLY29uZmlnIG9wdGlvbnMgdG8gY29uZmlybS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMTM6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9LY29uZmlnPTI9Y29uZmlnIEFSTTY0XG4tLVxuYXJjaC9hcm02NC9LY29uZmlnLTE5LVx0c2VsZWN0IEFSQ0hfRU5BQkxFX1NQTElUX1BNRF9QVExPQ0sgaWYgUEdUQUJMRV9MRVZFTFMgXHUwMDNlIDJcbmFyY2gvYXJtNjQvS2NvbmZpZzoyMDpcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiBpZiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxuYXJjaC9hcm02NC9LY29uZmlnLTIxLVx0c2VsZWN0IEFSQ0hfSEFTX0NBQ0hFX0xJTkVfU0laRVxuLS1cbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oPTE1MDY9c3RhdGljIGlubGluZSBwbWRfdCBwbWRwX2VzdGFibGlzaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaC0xNTM2LVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg6MTUzNzojaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaC0xNTM4LSNkZWZpbmUgX19wbWRfdG9fc3dwX2VudHJ5KHBtZClcdFx0KChzd3BfZW50cnlfdCkgeyBwbWRfdmFsKHBtZCkgfSlcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTE1MzktI2RlZmluZSBfX3N3cF9lbnRyeV90b19wbWQoc3dwKVx0XHRfX3BtZCgoc3dwKS52YWwpXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaDoxNTQwOiNlbmRpZiAvKiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYgKi9cbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTE1NDEtXG4tLVxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZz0yPWNvbmZpZyBMT09OR0FSQ0hcbi0tXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnLTE0LVx0c2VsZWN0IEFSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnOjE1Olx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGIGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnLTE2LVx0c2VsZWN0IEFSQ0hfSEFTX0FDUElfVEFCTEVfVVBHUkFERVx0aWYgQUNQSVxuLS1cbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGd0YWJsZS5oPTEwNDQ9c3RhdGljIGlubGluZSBwdGVfdCAqcG1kcF9wdGVwKHBtZF90ICpwbWQpXG4tLVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmgtMTA2Mi1cbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGd0YWJsZS5oOjEwNjM6I2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRlxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmgtMTA2NC0jZGVmaW5lIHBtZF9zd3BfbWtzb2Z0X2RpcnR5KHBtZClcdHB0ZV9wbWQocHRlX3N3cF9ta3NvZnRfZGlydHkocG1kX3B0ZShwbWQpKSlcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcuY3B1dHlwZT0xMDk9Y29uZmlnIFBQQ19USFBcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcuY3B1dHlwZS0xMTQtICAgICAgIHNlbGVjdCBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcuY3B1dHlwZToxMTU6ICAgICAgIHNlbGVjdCBBUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiBpZiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnLmNwdXR5cGUtMTE2LVxuLS1cbmFyY2gvcmlzY3YvS2NvbmZpZz0xMz1jb25maWcgUklTQ1Zcbi0tXG5hcmNoL3Jpc2N2L0tjb25maWctMjQtXHRzZWxlY3QgQVJDSF9FTkFCTEVfU1BMSVRfUE1EX1BUTE9DSyBpZiBQR1RBQkxFX0xFVkVMUyBcdTAwM2UgMlxuYXJjaC9yaXNjdi9LY29uZmlnOjI1Olx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGIGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG5hcmNoL3Jpc2N2L0tjb25maWctMjYtXHRzZWxlY3QgQVJDSF9IQVNfQklORk1UX0ZMQVRcbi0tXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BndGFibGUuaD05NDQ9c3RhdGljIGlubGluZSBwbWRfdCBwbWRfY2xlYXJfc29mdF9kaXJ0eShwbWRfdCBwbWQpXG4tLVxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtOTQ4LVxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg6OTQ5OiNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUZcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTk1MC1zdGF0aWMgaW5saW5lIGJvb2wgcG1kX3N3cF9zb2Z0X2RpcnR5KHBtZF90IHBtZClcbi0tXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BndGFibGUuaD05NjA9c3RhdGljIGlubGluZSBwbWRfdCBwbWRfc3dwX2NsZWFyX3NvZnRfZGlydHkocG1kX3QgcG1kKVxuLS1cbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTk2My19XG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BndGFibGUuaDo5NjQ6I2VuZGlmIC8qIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiAqL1xuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtOTY1LSNlbmRpZiAvKiBDT05GSUdfSEFWRV9BUkNIX1NPRlRfRElSVFkgKi9cbi0tXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BndGFibGUuaD0xMjA2PXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX3N3cF9jbGVhcl9leGNsdXNpdmUocHRlX3QgcHRlKVxuLS1cbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTEyMTAtXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BndGFibGUuaDoxMjExOiNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUZcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTEyMTItI2RlZmluZSBfX3BtZF90b19zd3BfZW50cnkocG1kKSAoKHN3cF9lbnRyeV90KSB7IHBtZF92YWwocG1kKSB9KVxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtMTIxMy0jZGVmaW5lIF9fc3dwX2VudHJ5X3RvX3BtZChzd3ApIF9fcG1kKChzd3ApLnZhbClcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oOjEyMTQ6I2VuZGlmIC8qIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiAqL1xuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtMTIxNS1cbi0tXG5hcmNoL3MzOTAvS2NvbmZpZz03NT1jb25maWcgUzM5MFxuLS1cbmFyY2gvczM5MC9LY29uZmlnLTg0LVx0c2VsZWN0IEFSQ0hfRU5BQkxFX1NQTElUX1BNRF9QVExPQ0sgaWYgUEdUQUJMRV9MRVZFTFMgXHUwMDNlIDJcbmFyY2gvczM5MC9LY29uZmlnOjg1Olx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGIGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG5hcmNoL3MzOTAvS2NvbmZpZy04Ni1cdHNlbGVjdCBBUkNIX0hBU19DQ19DQU5fTElOS1xuLS1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg9OTAxPXN0YXRpYyBpbmxpbmUgcG1kX3QgcG1kX2NsZWFyX3NvZnRfZGlydHkocG1kX3QgcG1kKVxuLS1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtOTA1LVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaDo5MDY6I2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRlxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaC05MDctI2RlZmluZSBwbWRfc3dwX3NvZnRfZGlydHkocG1kKVx0XHRwbWRfc29mdF9kaXJ0eShwbWQpXG4tLVxuYXJjaC94ODYvS2NvbmZpZz01OD1jb25maWcgWDg2XG4tLVxuYXJjaC94ODYvS2NvbmZpZy03Mi1cdHNlbGVjdCBBUkNIX0VOQUJMRV9TUExJVF9QTURfUFRMT0NLIGlmIChQR1RBQkxFX0xFVkVMUyBcdTAwM2UgMikgXHUwMDI2XHUwMDI2IChYODZfNjQgfHwgWDg2X1BBRSlcbmFyY2gveDg2L0tjb25maWc6NzM6XHRzZWxlY3QgQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYgaWYgWDg2XzY0IFx1MDAyNlx1MDAyNiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxuYXJjaC94ODYvS2NvbmZpZy03NC1cdHNlbGVjdCBBUkNIX0hBU19BQ1BJX1RBQkxFX1VQR1JBREVcdGlmIEFDUElcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg9MTU0Mz1zdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9zd3BfY2xlYXJfc29mdF9kaXJ0eShwdGVfdCBwdGUpXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTE1NDctXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg6MTU0ODojaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtMTU0OS1zdGF0aWMgaW5saW5lIHBtZF90IHBtZF9zd3BfbWtzb2Z0X2RpcnR5KHBtZF90IHBtZClcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD01Njg9c3RhdGljIGlubGluZSBib29sIHRocF9taWdyYXRpb25fc3VwcG9ydGVkKHZvaWQpXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC01Njkte1xuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NTcwOlx0cmV0dXJuIElTX0VOQUJMRUQoQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGKTtcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTU3MS19XG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg9Nzg9c3RhdGljIGlubGluZSBwdGVfdCBzb2Z0bGVhZl90b19wdGUoc29mdGxlYWZfdCBlbnRyeSlcbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC04My1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjg0OiNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUZcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTg1LS8qKlxuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTU3ND1zdGF0aWMgaW5saW5lIGJvb2wgcHRlX2lzX3VmZmRfbWFya2VyKHB0ZV90IHB0ZSlcbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC01ODktXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo1OTA6I2lmIGRlZmluZWQoQ09ORklHX1pPTkVfREVWSUNFKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYpXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC01OTEtXG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg9NjA0PXN0YXRpYyBpbmxpbmUgYm9vbCBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkocG1kX3QgcG1kKVxuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTYwOC1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjYwOTojZWxzZSAgLyogQ09ORklHX1pPTkVfREVWSUNFIFx1MDAyNlx1MDAyNiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYgKi9cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTYxMC1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTYxMT1zdGF0aWMgaW5saW5lIGJvb2wgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KHBtZF90IHBtZClcbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC02MTUtXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo2MTY6I2VuZGlmIC8qIENPTkZJR19aT05FX0RFVklDRSBcdTAwMjZcdTAwMjYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGICovXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC02MTctXG4tLVxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmg9MTc5Mz1zdGF0aWMgaW5saW5lIHBncHJvdF90IHBncHJvdF9tb2RpZnkocGdwcm90X3Qgb2xkcHJvdCwgcGdwcm90X3QgbmV3cHJvdClcbi0tXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaC0xODQxLSNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1NPRlRfRElSVFlcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oOjE4NDI6I2lmbmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUZcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oLTE4NDMtc3RhdGljIGlubGluZSBwbWRfdCBwbWRfc3dwX21rc29mdF9kaXJ0eShwbWRfdCBwbWQpXG4tLVxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg9MzIyPXN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsaztcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTMyMy1cbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oOjMyNDojaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0zMjUtZXh0ZXJuIGludCBzZXRfcG1kX21pZ3JhdGlvbl9lbnRyeShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsXG4tLVxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg9MzMzPXN0YXRpYyBpbmxpbmUgcG1kX3Qgc3dwX2VudHJ5X3RvX3BtZChzd3BfZW50cnlfdCBlbnRyeSlcbi0tXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0zNDAtXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaDozNDE6I2Vsc2UgIC8qIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiAqL1xuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzQyLXN0YXRpYyBpbmxpbmUgaW50IHNldF9wbWRfbWlncmF0aW9uX2VudHJ5KHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcbi0tXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaD0zNTY9c3RhdGljIGlubGluZSBwbWRfdCBzd3BfZW50cnlfdG9fcG1kKHN3cF9lbnRyeV90IGVudHJ5KVxuLS1cbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTM2MC1cbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oOjM2MTojZW5kaWYgIC8qIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiAqL1xuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzYyLVxuLS1cbm1tL0tjb25maWc9NzAzPWNvbmZpZyBBUkNIX0VOQUJMRV9IVUdFUEFHRV9NSUdSQVRJT05cbi0tXG5tbS9LY29uZmlnLTcwNS1cbm1tL0tjb25maWc6NzA2OmNvbmZpZyBBUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRlxubW0vS2NvbmZpZy03MDctXHRib29sXG4tLVxubW0vZGVidWdfdm1fcGd0YWJsZS5jPTc0OT1zdGF0aWMgdm9pZCBfX2luaXQgcG1kX2xlYWZfc29mdF9kaXJ0eV90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYy03NTMtXHRpZiAoIXBndGFibGVfc3VwcG9ydHNfc29mdF9kaXJ0eSgpIHx8XG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6NzU0Olx0ICAgICFJU19FTkFCTEVEKENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRikpXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtNzU1LVx0XHRyZXR1cm47XG4tLVxubW0vZGVidWdfdm1fcGd0YWJsZS5jPTgwNT1zdGF0aWMgdm9pZCBfX2luaXQgcHRlX3N3YXBfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcbi0tXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtODIxLVxubW0vZGVidWdfdm1fcGd0YWJsZS5jOjgyMjojaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtODIzLXN0YXRpYyB2b2lkIF9faW5pdCBwbWRfc29mdGxlYWZfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcbi0tXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtODM5LX1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYzo4NDA6I2Vsc2UgIC8qICFDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYgKi9cbm1tL2RlYnVnX3ZtX3BndGFibGUuYy04NDEtc3RhdGljIHZvaWQgX19pbml0IHBtZF9zb2Z0bGVhZl90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKSB7IH1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYzo4NDI6I2VuZGlmIC8qIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiAqL1xubW0vZGVidWdfdm1fcGd0YWJsZS5jLTg0My1cbi0tXG5tbS9obW0uYz0yMzU9c3RhdGljIGludCBobW1fdm1hX2hhbmRsZV9wdGUoc3RydWN0IG1tX3dhbGsgKndhbGssIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9obW0uYy0zMzMtXG5tbS9obW0uYzozMzQ6I2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRlxubW0vaG1tLmMtMzM1LXN0YXRpYyBpbnQgaG1tX3ZtYV9oYW5kbGVfYWJzZW50X3BtZChzdHJ1Y3QgbW1fd2FsayAqd2FsaywgdW5zaWduZWQgbG9uZyBzdGFydCxcbi0tXG5tbS9obW0uYz0zODI9c3RhdGljIGludCBobW1fdm1hX2hhbmRsZV9hYnNlbnRfcG1kKHN0cnVjdCBtbV93YWxrICp3YWxrLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuLS1cbm1tL2htbS5jLTM5My19XG5tbS9obW0uYzozOTQ6I2VuZGlmICAvKiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYgKi9cbm1tL2htbS5jLTM5NS1cbi0tXG5tbS9odWdlX21lbW9yeS5jPTQ4Njg9bGF0ZV9pbml0Y2FsbChzcGxpdF9odWdlX3BhZ2VzX2RlYnVnZnMpO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDg3MC1cbm1tL2h1Z2VfbWVtb3J5LmM6NDg3MTojaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGXG5tbS9odWdlX21lbW9yeS5jLTQ4NzItaW50IHNldF9wbWRfbWlncmF0aW9uX2VudHJ5KHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcbi0tXG5tbS9taWdyYXRlLmM9MzQ2PXN0YXRpYyBib29sIHJlbW92ZV9taWdyYXRpb25fcHRlKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vbWlncmF0ZS5jLTM2NC1cbm1tL21pZ3JhdGUuYzozNjU6I2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRlxubW0vbWlncmF0ZS5jLTM2Ni1cdFx0LyogUE1ELW1hcHBlZCBUSFAgbWlncmF0aW9uIGVudHJ5ICovXG4tLVxubW0vbWlncmF0ZS5jPTUxNj12b2lkIG1pZ3JhdGlvbl9lbnRyeV93YWl0X2h1Z2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApXG4tLVxubW0vbWlncmF0ZS5jLTU0Ny1cbm1tL21pZ3JhdGUuYzo1NDg6I2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRlxubW0vbWlncmF0ZS5jLTU0OS12b2lkIHBtZF9taWdyYXRpb25fZW50cnlfd2FpdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZClcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jPTc3OT1FWFBPUlRfU1lNQk9MKG1pZ3JhdGVfdm1hX3NldHVwKTtcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNzgwLVxubW0vbWlncmF0ZV9kZXZpY2UuYzo3ODE6I2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRlxubW0vbWlncmF0ZV9kZXZpY2UuYy03ODItLyoqXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYz05MTE9c3RhdGljIGludCBtaWdyYXRlX3ZtYV9zcGxpdF91bm1hcHBlZF9mb2xpbyhzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUsXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy05MzUtfVxubW0vbWlncmF0ZV9kZXZpY2UuYzo5MzY6I2Vsc2UgLyogIUNPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiAqL1xubW0vbWlncmF0ZV9kZXZpY2UuYy05Mzctc3RhdGljIGludCBtaWdyYXRlX3ZtYV9pbnNlcnRfaHVnZV9wbWRfcGFnZShzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUsXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYz05NTQ9c3RhdGljIHVuc2lnbmVkIGxvbmcgbWlncmF0ZV92bWFfbnJfcGFnZXModW5zaWduZWQgbG9uZyAqc3JjKVxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtOTU2LVx0dW5zaWduZWQgbG9uZyBuciA9IDE7XG5tbS9taWdyYXRlX2RldmljZS5jOjk1NzojaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGXG5tbS9taWdyYXRlX2RldmljZS5jLTk1OC1cdGlmICgqc3JjIFx1MDAyNiBNSUdSQVRFX1BGTl9DT01QT1VORClcbi0tXG5tbS9ybWFwLmM9MjQxMD1zdGF0aWMgYm9vbCB0cnlfdG9fbWlncmF0ZV9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vcm1hcC5jLTI0NzQtXHRcdFx0fVxubW0vcm1hcC5jOjI0NzU6I2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRlxubW0vcm1hcC5jLTI0NzYtXHRcdFx0cG1kdmFsID0gcG1kcF9nZXQocHZtdy5wbWQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAxMzo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjgxOAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDM2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBhIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHNlZW1zIGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLiBJdCBsb29rcyBsaWtlIGBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUZgIGlzIGF1dG9tYXRpY2FsbHkgZW5hYmxlZCBieSBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIG9uIGEgYnVuY2ggb2YgYXJjaGl0ZWN0dXJlcyBJJiMzOTttIGZhbWlsaWFyIHdpdGgg4oCTIHg4Nl82NCwgYXJtNjQsIHJpc2N2LCBzMzkwLCBwb3dlcnBjLCBhbmQgbG9vbmdhcmNoLiBHb29kLCB0aGF0IHNpbXBsaWZpZXMgdGhpbmdzOyBJIGRvbiYjMzk7dCBuZWVkIHRvIHdvcnJ5IGFib3V0IGV4cGxpY2l0bHkgbGlzdGluZyB0aGF0IGNvbmZpZ3VyYXRpb24uCgpUaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGNlbnRlciBhcm91bmQgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gYFVTRVJGQVVMVEZEYCBhbmQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYC4gIE15IGF0dGVudGlvbiBpcyBkcmF3biB0byB0aGUgYG1vdmVfcGFnZXNfaHVnZV9wbWRgIGZ1bmN0aW9uLiBJdCBsb29rcyBsaWtlIGl0IGlzIGNydWNpYWwgZm9yIGVuYWJsaW5nIHRoZSBVRkZESU9fTU9WRSBpb2N0bCBwYXRoLgoKTGV0JiMzOTtzIGNvbmZpcm0gcmVhY2hhYmlsaXR5LiBZZXMsIGBtb3ZlX3BhZ2VzYCAqaXMqIGluZGVlZCByZWFjaGFibGUgdGhyb3VnaCB0aGUgYGlvY3RsKHVmZmQsIFVGRkRJT19NT1ZFLCAuLi4pYCBjYWxsLiBUaGlzIGNvbmZpcm1zIGl0LiBDcnVjaWFsbHksIGl0IHJlbGllcyBvbiBib3RoIGBVU0VSRkFVTFRGRGAgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgYmVpbmcgZW5hYmxlZC4KClNvLCBsZXQmIzM5O3Mgc3VtbWFyaXplIG15IGZpbmRpbmdzIG5lYXRseToKCiogICAqKldvcnRoRnV6emluZzogdHJ1ZSoqIC0gVGhpcyBsb29rcyBwcm9taXNpbmcuCiogICAqKkZvY3VzU3ltYm9sczogXFsmIzM0O21vdmVcX3BhZ2VzXF9odWdlXF9wbWQmIzM0O10qKiAtIFRoaXMgaXMgdGhlIHByaW1hcnkgZnVuY3Rpb24gdG8gdGFyZ2V0LgoqICAgKipFbmFibGVDb25maWdzOiBcWyYjMzQ7VVNFUkZBVUxURkQmIzM0OywgJiMzNDtUUkFOU1BBUkVOVFxfSFVHRVBBR0UmIzM0O10qKiAtIFRoZXNlIGFyZSB0aGUga2V5IGNvbmZpZ3VyYXRpb25zIHRoYXQgbmVlZCB0byBiZSBlbmFibGVkLgoqICAgKipSZWFzb25pbmc6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBtb3ZlX3BhZ2VzX2h1Z2VfcG1kYCB3aGVyZSBgcG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0YCB3YXMgaW5jb3JyZWN0bHkgY2FsbGVkIHdpdGggYSBwb2ludGVyIHRvIGEgbG9jYWwgdmFyaWFibGUgaW5zdGVhZCBvZiB0aGUgYWN0dWFsIFBNRCBwb2ludGVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHVzZXJmYXVsdGZkIFVGRkRJT19NT1ZFIGltcGxlbWVudGF0aW9uIGZvciB0cmFuc3BhcmVudCBodWdlcGFnZXMuJiMzNDsqKiAtIFRoaXMgZXhwbGFpbnMgdGhlIGZ1bmN0aW9uYWwgY29udGV4dCBhbmQgdGhlIG5hdHVyZSBvZiB0aGUgYnVnIGZpeC4KCk5vdywgYSBxdWljayB0aG91Z2h0OiBJcyB0aGVyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBkZXBlbmRlbmN5IEkgbWlnaHQgYmUgbWlzc2luZz8gSSByZWNhbGwgdGhhdCBgQ09ORklHX01JR1JBVElPTmAgaXMgbmVlZGVkIGZvciBgcG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0YCB0byBhY3R1YWxseSAqZG8qIHNvbWV0aGluZy4gSG93ZXZlciwgaXQmIzM5O3MgcHJldHR5IHViaXF1aXRvdXMgb3Igc2VsZWN0ZWQgYnkgb3RoZXIgc2V0dGluZ3MsIHNvIEkgc2hvdWxkIGRvdWJsZS1jaGVjayBgbW0vS2NvbmZpZ2AganVzdCB0byBiZSBjb21wbGV0ZWx5IHRob3JvdWdoLiBJdCYjMzk7cyBhIGdvb2QgcHJhY3RpY2UgdG8gdmVyaWZ5IHRoZXNlIGFzc3VtcHRpb25zLCBldmVuIHdoZW4gdGhleSBzZWVtIGxpa2VseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMTM6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1JR1JBVElPTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz02ODU9Y29uZmlnIE5VTUFfTUlHUkFUSU9OXG4tLVxubW0vS2NvbmZpZy02OTUtXG5tbS9LY29uZmlnOjY5Njpjb25maWcgTUlHUkFUSU9OXG5tbS9LY29uZmlnLTY5Ny1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMTM6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc4MTIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSb2xlIG9mIE1JR1JBVElPTiBpbiBNZW1vcnkgTWFuYWdlbWVudCoqCgpPa2F5LCBzbyBJJiMzOTttIHRha2luZyBhIGxvb2sgYXQgaG93IHRoaXMgYE1JR1JBVElPTmAgZmxhZyBmYWN0b3JzIGludG8gdGhlIHN5c3RlbS4gSXQmIzM5O3Mgb2Z0ZW4gaW5mbHVlbmNlZCBieSBjb21wb25lbnRzIGxpa2UgYE5VTUFgLCBgQ09NUEFDVElPTmAsIGBNRU1PUllfSE9UUExVR2AsIGFuZCBgQ01BYC4gSnVzdCB0byBiZSBzdXJlIEkmIzM5O3ZlIGdvdCBhIGNvbXBsZXRlIHBpY3R1cmUsIEkmIzM5O20gZ29pbmcgdG8gYWRkIGBNSUdSQVRJT05gIHRvIHRoYXQgbGlzdCBhcyBhIHBvdGVudGlhbCB0cmlnZ2VyLiBHb29kIHByYWN0aWNlIHRvIGJlIHRob3JvdWdoLgoKUmlnaHQsIG5vdywgSSBuZWVkIHRvIHBpbnBvaW50IHdoZXJlIHRoaXMgYE1JR1JBVElPTmAgbG9naWMgaXMgYWN0dWFsbHkgaW1wbGVtZW50ZWQuIExvb2tzIGxpa2UgYG1vdmVfcGFnZXNfaHVnZV9wbWRgIGlzIHRoZSBrZXkgZnVuY3Rpb24gYmVpbmcgbW9kaWZpZWQgaW4gdGhpcyBjb250ZXh0LiBBIHF1aWNrIHNlYXJjaCBjb25maXJtcyB0aGF0IGl0JiMzOTtzIHRoZSAqb25seSogZnVuY3Rpb24gdGhhdCYjMzk7cyBiZWVuIHRvdWNoZWQuCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGBtb3ZlX3BhZ2VzX2h1Z2VfcG1kYCBpdHNlbGYuIEkmIzM5O2xsIHB1bGwgaXQgdXAgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgIGFuZCBzZWUgd2hhdCBpdCYjMzk7cyByZWFsbHkgZG9pbmcuIFRpbWUgdG8gdW5kZXJzdGFuZCB0aGUgYWN0dWFsIG1lY2hhbmljcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMTM6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjc2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNzYwOlx0XG4yNzYxOlx0XHRzcmNfcG1kdmFsID0gKnNyY19wbWQ7XG4yNzYyOlx0XHRzcmNfcHRsID0gcG1kX2xvY2twdHIobW0sIHNyY19wbWQpO1xuMjc2MzpcdFxuMjc2NDpcdFx0bG9ja2RlcF9hc3NlcnRfaGVsZChzcmNfcHRsKTtcbjI3NjU6XHRcdHZtYV9hc3NlcnRfbG9ja2VkKHNyY192bWEpO1xuMjc2NjpcdFx0dm1hX2Fzc2VydF9sb2NrZWQoZHN0X3ZtYSk7XG4yNzY3Olx0XG4yNzY4Olx0XHQvKiBTYW5pdHkgY2hlY2tzIGJlZm9yZSB0aGUgb3BlcmF0aW9uICovXG4yNzY5Olx0XHRpZiAoV0FSTl9PTl9PTkNFKCFwbWRfbm9uZShkc3RfcG1kdmFsKSkgfHwgV0FSTl9PTl9PTkNFKHNyY19hZGRyIFx1MDAyNiB+SFBBR0VfUE1EX01BU0spIHx8XG4yNzcwOlx0XHQgICAgV0FSTl9PTl9PTkNFKGRzdF9hZGRyIFx1MDAyNiB+SFBBR0VfUE1EX01BU0spKSB7XG4yNzcxOlx0XHRcdHNwaW5fdW5sb2NrKHNyY19wdGwpO1xuMjc3MjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjI3NzM6XHRcdH1cbjI3NzQ6XHRcbjI3NzU6XHRcdGlmICghcG1kX3RyYW5zX2h1Z2Uoc3JjX3BtZHZhbCkpIHtcbjI3NzY6XHRcdFx0c3Bpbl91bmxvY2soc3JjX3B0bCk7XG4yNzc3Olx0XHRcdGlmIChwbWRfaXNfbWlncmF0aW9uX2VudHJ5KHNyY19wbWR2YWwpKSB7XG4yNzc4Olx0XHRcdFx0cG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0KG1tLCBzcmNfcG1kKTtcbjI3Nzk6XHRcdFx0XHRyZXR1cm4gLUVBR0FJTjtcbjI3ODA6XHRcdFx0fVxuMjc4MTpcdFx0XHRyZXR1cm4gLUVOT0VOVDtcbjI3ODI6XHRcdH1cbjI3ODM6XHRcbjI3ODQ6XHRcdHNyY19wYWdlID0gcG1kX3BhZ2Uoc3JjX3BtZHZhbCk7XG4yNzg1Olx0XG4yNzg2Olx0XHRpZiAoIWlzX2h1Z2VfemVyb19wbWQoc3JjX3BtZHZhbCkpIHtcbjI3ODc6XHRcdFx0aWYgKHVubGlrZWx5KCFQYWdlQW5vbkV4Y2x1c2l2ZShzcmNfcGFnZSkpKSB7XG4yNzg4Olx0XHRcdFx0c3Bpbl91bmxvY2soc3JjX3B0bCk7XG4yNzg5Olx0XHRcdFx0cmV0dXJuIC1FQlVTWTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMTM6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg2ODYKCQkJCQkJCW91dHB1dDogMTI5CgkJCQkJCQl0aG91Z2h0czogNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZywgZm9ybWF0dGVkIGFzIHJlcXVlc3RlZDoKCioqQnVnIEZpeCBhbmQgUmVtZWRpYXRpb24gVGhvdWdodHMqKgoKQWxyaWdodCwgbG9va2luZyBhdCB0aGlzIGNvZGUgc25pcHBldCwgSSBpbW1lZGlhdGVseSBzcG90IHRoZSBwcm9ibGVtLiBUaGUgY2hhbmdlIGhlcmUgaXMgcHJlY2lzZWx5IHRoaXM6CgpgYGBjCi0JCQlwbWRfbWlncmF0aW9uX2VudHJ5X3dhaXQobW0sICZhbXA7c3JjX3BtZHZhbCk7CiYjNDM7CQkJcG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0KG1tLCBzcmNfcG1kKTsKYGBgCgpUaGF0JiMzOTtzIGEgdGV4dGJvb2sgcG9pbnRlci10by1sb2NhbC12YXJpYWJsZSBpc3N1ZS4gV2Ugd2VyZSBwYXNzaW5nIHRoZSAqYWRkcmVzcyogb2YgYSBsb2NhbCB2YXJpYWJsZSwgYCZhbXA7c3JjX3BtZHZhbGAsIHdoaWNoIGxpa2VseSB3ZW50IG91dCBvZiBzY29wZSwgbGVhdmluZyBgcG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0YCBvcGVyYXRpbmcgb24gZ2FyYmFnZSBkYXRhIG9yIGEgbWVtb3J5IGxvY2F0aW9uIHRoYXQgY291bGQgYmUgb3ZlcndyaXR0ZW4gYXQgYW55IHRpbWUuIFRoZSBmaXggY29ycmVjdGx5IHBhc3NlcyB0aGUgcG9pbnRlciBgc3JjX3BtZGAgaXRzZWxmLCB3aGljaCwgSSBhc3N1bWUsIGlzIHByb3Blcmx5IG1hbmFnZWQuIFRoaXMgaXMgYSBzdHJhaWdodGZvcndhcmQsIGNyaXRpY2FsIGJ1ZyBmaXguIE5vIHJlYWwgc3VycHJpc2VzIGhlcmUsIGJ1dCBnb29kIHRvIGNhdGNoIGl0LiBJJiMzOTttIGdsYWQgdGhpcyB3YXMgaWRlbnRpZmllZCBhbmQgY29ycmVjdGVkLgoKR2l2ZW4gdGhhdCBjbGFyaXR5LCBJIGFtIG5vdyBnb2luZyB0byBwcm9jZWVkIGFuZCBleGVjdXRlIGBzZXQtcmVzdWx0c2AuIERvbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDEzOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVU0VSRkFVTFRGRCYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICAgJiMzNDtNSUdSQVRJT04mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttb3ZlX3BhZ2VzX2h1Z2VfcG1kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBtb3ZlX3BhZ2VzX2h1Z2VfcG1kYCB3aGVyZSBgcG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0YCB3YXMgaW5jb3JyZWN0bHkgY2FsbGVkIHdpdGggYSBwb2ludGVyIHRvIGEgbG9jYWwgdmFyaWFibGUgaW5zdGVhZCBvZiB0aGUgYWN0dWFsIFBNRCBwb2ludGVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHVzZXJmYXVsdGZkIFVGRkRJT19NT1ZFIGltcGxlbWVudGF0aW9uIGZvciB0cmFuc3BhcmVudCBodWdlcGFnZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTRVJGQVVMVEZEJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O01JR1JBVElPTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21vdmVfcGFnZXNfaHVnZV9wbWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYG1vdmVfcGFnZXNfaHVnZV9wbWRgIHdoZXJlIGBwbWRfbWlncmF0aW9uX2VudHJ5X3dhaXRgIHdhcyBpbmNvcnJlY3RseSBjYWxsZWQgd2l0aCBhIHBvaW50ZXIgdG8gYSBsb2NhbCB2YXJpYWJsZSBpbnN0ZWFkIG9mIHRoZSBhY3R1YWwgUE1EIHBvaW50ZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgdXNlcmZhdWx0ZmQgVUZGRElPX01PVkUgaW1wbGVtZW50YXRpb24gZm9yIHRyYW5zcGFyZW50IGh1Z2VwYWdlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDEzOjU2OjMzLjY2MjQ2ODI5NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0MDQ1MzgwMTYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTRVJGQVVMVEZEXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiTUlHUkFUSU9OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibW92ZV9wYWdlc19odWdlX3BtZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBtb3ZlX3BhZ2VzX2h1Z2VfcG1kYCB3aGVyZSBgcG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0YCB3YXMgaW5jb3JyZWN0bHkgY2FsbGVkIHdpdGggYSBwb2ludGVyIHRvIGEgbG9jYWwgdmFyaWFibGUgaW5zdGVhZCBvZiB0aGUgYWN0dWFsIFBNRCBwb2ludGVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHVzZXJmYXVsdGZkIFVGRkRJT19NT1ZFIGltcGxlbWVudGF0aW9uIGZvciB0cmFuc3BhcmVudCBodWdlcGFnZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDEzOjU2OjMzLjY2MjQ3MzgzNFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDExNjI0NTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgM2VjZWI5MjJlMzM0MTJkOTI4ODdiYzZjYzg4MGVlMmVmMTlmOGRlOVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIEp1bCA1IDEzOjU2OjMyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jXFxuaW5kZXggYmRkODYzNTkyMmY5NmQuLmMwODkyY2M1MzNhOWZjIDEwMDY0NFxcbi0tLSBhL21tL2h1Z2VfbWVtb3J5LmNcXG4rKysgYi9tbS9odWdlX21lbW9yeS5jXFxuQEAgLTI3NzUsNyArMjc3NSw3IEBAIGludCBtb3ZlX3BhZ2VzX2h1Z2VfcG1kKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqZHN0X3BtZCwgcG1kX3QgKnNyY19wbWQsIHBtXFxuIFxcdGlmICghcG1kX3RyYW5zX2h1Z2Uoc3JjX3BtZHZhbCkpIHtcXG4gXFx0XFx0c3Bpbl91bmxvY2soc3JjX3B0bCk7XFxuIFxcdFxcdGlmIChwbWRfaXNfbWlncmF0aW9uX2VudHJ5KHNyY19wbWR2YWwpKSB7XFxuLVxcdFxcdFxcdHBtZF9taWdyYXRpb25fZW50cnlfd2FpdChtbSwgXFx1MDAyNnNyY19wbWR2YWwpO1xcbitcXHRcXHRcXHRwbWRfbWlncmF0aW9uX2VudHJ5X3dhaXQobW0sIHNyY19wbWQpO1xcbiBcXHRcXHRcXHRyZXR1cm4gLUVBR0FJTjtcXG4gXFx0XFx0fVxcbiBcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMTM6NTY6MzQuMDc0ODg0MjYyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MzYzMjk1NDU4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0VSRkFVTFRGRFwiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIk1JR1JBVElPTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1vdmVfcGFnZXNfaHVnZV9wbWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgbW92ZV9wYWdlc19odWdlX3BtZGAgd2hlcmUgYHBtZF9taWdyYXRpb25fZW50cnlfd2FpdGAgd2FzIGluY29ycmVjdGx5IGNhbGxlZCB3aXRoIGEgcG9pbnRlciB0byBhIGxvY2FsIHZhcmlhYmxlIGluc3RlYWQgb2YgdGhlIGFjdHVhbCBQTUQgcG9pbnRlci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSB1c2VyZmF1bHRmZCBVRkZESU9fTU9WRSBpbXBsZW1lbnRhdGlvbiBmb3IgdHJhbnNwYXJlbnQgaHVnZXBhZ2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDNlY2ViOTIyZTMzNDEyZDkyODg3YmM2Y2M4ODBlZTJlZjE5ZjhkZTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEp1bCA1IDEzOjU2OjMyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmNcbmluZGV4IGJkZDg2MzU5MjJmOTZkLi5jMDg5MmNjNTMzYTlmYyAxMDA2NDRcbi0tLSBhL21tL2h1Z2VfbWVtb3J5LmNcbisrKyBiL21tL2h1Z2VfbWVtb3J5LmNcbkBAIC0yNzc1LDcgKzI3NzUsNyBAQCBpbnQgbW92ZV9wYWdlc19odWdlX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKmRzdF9wbWQsIHBtZF90ICpzcmNfcG1kLCBwbVxuIFx0aWYgKCFwbWRfdHJhbnNfaHVnZShzcmNfcG1kdmFsKSkge1xuIFx0XHRzcGluX3VubG9jayhzcmNfcHRsKTtcbiBcdFx0aWYgKHBtZF9pc19taWdyYXRpb25fZW50cnkoc3JjX3BtZHZhbCkpIHtcbi1cdFx0XHRwbWRfbWlncmF0aW9uX2VudHJ5X3dhaXQobW0sIFx1MDAyNnNyY19wbWR2YWwpO1xuK1x0XHRcdHBtZF9taWdyYXRpb25fZW50cnlfd2FpdChtbSwgc3JjX3BtZCk7XG4gXHRcdFx0cmV0dXJuIC1FQUdBSU47XG4gXHRcdH1cbiBcdFx0cmV0dXJuIC1FTk9FTlQ7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQxMzo1NjozNC4wNzQ4ODU3MzJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mjc5NDg5NzQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgZXhwZXJ0IHBlcnNwZWN0aXZlOlxuXG4qKlBhdGNoIEFuYWx5c2lzOiBBIFN1YnRsZSBidXQgUG90ZW50aWFsbHkgU2lnbmlmaWNhbnQgQ2hhbmdlKipcblxuQWxyaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0J3MgdHdlYWtpbmcgYG1tL2h1Z2VfbWVtb3J5LmNgLiBTcGVjaWZpY2FsbHksIHRoZXkncmUgbW9kaWZ5aW5nIHRoZSBjYWxsIHRvIGBwbWRfbWlncmF0aW9uX2VudHJ5X3dhaXRgIHdpdGhpbiB0aGUgYG1vdmVfcGFnZXNfaHVnZV9wbWRgIGZ1bmN0aW9uLiBJdCBzZWVtcyB0aGV5J3ZlIHN3aXRjaGVkIGZyb20gcGFzc2luZyB0aGUgYWRkcmVzcyBvZiBgc3JjX3BtZHZhbGAg4oCTIHRoYXQgaXMsIGBcdTAwMjZzcmNfcG1kdmFsYCDigJMgdG8gcGFzc2luZyB0aGUgYHNyY19wbWRgIHZhcmlhYmxlIGl0c2VsZiwgd2hpY2ggaXMgdmVyeSBsaWtlbHkgYSBgcG1kX3RgIHR5cGUuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpbW1lZGlhdGVseSBkaXZlIGludG8gYG1vdmVfcGFnZXNfaHVnZV9wbWRgIGFuZCB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuIFdoeSBhcmUgdGhleSBkaXJlY3RseSBwYXNzaW5nIHRoZSBgcG1kX3RgIG5vdz8gSXMgdGhpcyBhIHBvdGVudGlhbCBvcHRpbWl6YXRpb24/IE9yIHBlcmhhcHMgYSBmaXggZm9yIGEgc3VidGxlIHJhY2UgY29uZGl0aW9uIG9yIGFsaWdubWVudCBpc3N1ZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgcG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0YCBleHBlY3RzLCBhbmQgaG93IGl0J3MgYmVpbmcgdXNlZCB3aXRoaW4gdGhhdCBmdW5jdGlvbi5cblxuVGhlIG9sZCB3YXkgdXNpbmcgYSBwb2ludGVyIG1pZ2h0IGluZGljYXRlIHRoYXQgYHBtZF9taWdyYXRpb25fZW50cnlfd2FpdGAgaW50ZW5kZWQgdG8gbW9kaWZ5IHRoZSB2YWx1ZS4gUGFzc2luZyB0aGUgYHBtZF90YCBkaXJlY3RseSBvZnRlbiBpbXBsaWVzIHJlYWQtb25seSBhY2Nlc3MsIG9yIHBlcmhhcHMgdGhlIGZ1bmN0aW9uIG5vdyBoYW5kbGVzIHRoZSBhZGRyZXNzIGludGVybmFsbHkuIElzIHRoZXJlIGEgY2hhbmNlIHRoYXQgYSBwb3RlbnRpYWwgd3JpdGUgaW4gYSBwYXJhbGxlbCB0aHJlYWQsIGJldHdlZW4gcmVhZGluZyB0aGUgdmFsdWUgYW5kIHdhaXRpbmcgb24gaXQgY291bGQgaGF2ZSBjcmVhdGVkIGEgZmxhdz9cblxuSSdtIGtlZW4gdG8gdHJhY2UgaG93IGBzcmNfcG1kYCBpcyBiZWluZyBpbml0aWFsaXplZCBhbmQgdXNlZCBiZWZvcmUgdGhlIGZ1bmN0aW9uIGNhbGwsIGFuZCB3aGF0J3MgaGFwcGVuaW5nICppbnNpZGUqIGBwbWRfbWlncmF0aW9uX2VudHJ5X3dhaXRgIHRvIGRldGVybWluZSB0aGUgZXhhY3QgaW1wYWN0IG9mIHRoaXMgYWRqdXN0bWVudC4gQW55IGNoYW5nZSBpbiBsb2NraW5nIG9yIG1lbW9yeSBhY2Nlc3MgcGF0dGVybnMgaGVyZSBjb3VsZCBiZSBwcmV0dHkgaW1wYWN0ZnVsLiBUaGlzIG5lZWRzIGEgdGhvcm91Z2ggcmV2aWV3LiBJIG5lZWQgdG8gbG9vayBhdCBib3RoIHRoZSBjYWxsZXIgYW5kIHRoZSBjYWxsZWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NjcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDEzOjU2OjM4LjM1NDM3NzM4OFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjU4NDc2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtb3ZlX3BhZ2VzX2h1Z2VfcG1kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2h1Z2VfbWVtb3J5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZV9tZW1vcnkuYz0yNzAyPWludCBjaGFuZ2VfaHVnZV9wdWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTI3NDgtICovXFxubW0vaHVnZV9tZW1vcnkuYzoyNzQ5OmludCBtb3ZlX3BhZ2VzX2h1Z2VfcG1kKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqZHN0X3BtZCwgcG1kX3QgKnNyY19wbWQsIHBtZF90IGRzdF9wbWR2YWwsXFxubW0vaHVnZV9tZW1vcnkuYy0yNzUwLVxcdFxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmNfdm1hLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQxMzo1NjozOC40MTY5Njg2MzNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDI2ODM2OTIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6XG5cbioqRGl2aW5nIGludG8gYG1vdmVfcGFnZXNfaHVnZV9wbWRgKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gaXQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbiBgbW92ZV9wYWdlc19odWdlX3BtZGAuIEJlZm9yZSBJIGNhbiBtYWtlIGFueSBtZWFuaW5nZnVsIGFzc2Vzc21lbnQsIEkgbmVlZCB0byBwbGFjZSB0aGlzIGZ1bmN0aW9uIHdpdGhpbiBpdHMgb3ZlcmFsbCBjb250ZXh0LiBJIGtub3cgdGhpcyBpcyBhIGNyaXRpY2FsIGxvdy1sZXZlbCBmdW5jdGlvbiByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgZGVhbGluZyB3aXRoIGh1Z2UgcGFnZXMgYW5kIHBvdGVudGlhbGx5IFBNRHMgKFBhZ2UgTWlkZGxlIERpcmVjdG9yaWVzKS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgdGhlIHVzZSBjYXNlKHMpIGl0IGFkZHJlc3NlcyB3aXRoaW4gYSBzeXN0ZW0uIEkgbmVlZCB0byBrbm93IHdoeSBtb3ZpbmcgcGFnZXMsIGFuZCBlc3BlY2lhbGx5IGh1Z2UgcGFnZXMsIHdvdWxkIGJlIG5lY2Vzc2FyeS4gSXMgaXQgZm9yIE5VTUEgYmFsYW5jaW5nPyBNZW1vcnkgaG90cGx1Z2dpbmc/IER5bmFtaWMgbWVtb3J5IGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uIG9wdGltaXphdGlvbj8gRGF0YSBtaWdyYXRpb24gZHVyaW5nIGxpdmUgc3lzdGVtIHVwZGF0ZXM/IFRoZSBzcGVjaWZpYyBmdW5jdGlvbiBvZiB0aGlzIHBpZWNlIGRlcGVuZHMgaGVhdmlseSBvbiBpdHMgZGVzaWduIGZvciB0aGVzZSBsYXJnZXIgZ29hbHMuIEkgbXVzdCB1bmRlcnN0YW5kIHRoZSBpbnRlbmRlZCBwdXJwb3NlIHRvIHBhcnNlIGhvdyB0aGUgY29kZSBhY2hpZXZlcyBpdCBhbmQgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBjbGV2ZXIgb3B0aW1pemF0aW9ucyBpdCBlbXBsb3lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTYwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMTM6NTY6NDEuNDQzODA3NDA0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM0MDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2h1Z2VfbWVtb3J5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjc0NSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjc0NTpcXHQgKiBKdXN0IG1vdmUgdGhlIHBhZ2UgZnJvbSBzcmNfcG1kIHRvIGRzdF9wbWQgaWYgcG9zc2libGUuXFxuMjc0NjpcXHQgKiBSZXR1cm4gemVybyBpZiBzdWNjZWVkZWQgaW4gbW92aW5nIHRoZSBwYWdlLCAtRUFHQUlOIGlmIGl0IG5lZWRzIHRvIGJlXFxuMjc0NzpcXHQgKiByZXBlYXRlZCBieSB0aGUgY2FsbGVyLCBvciBvdGhlciBlcnJvcnMgaW4gY2FzZSBvZiBmYWlsdXJlLlxcbjI3NDg6XFx0ICovXFxuMjc0OTpcXHRpbnQgbW92ZV9wYWdlc19odWdlX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKmRzdF9wbWQsIHBtZF90ICpzcmNfcG1kLCBwbWRfdCBkc3RfcG1kdmFsLFxcbjI3NTA6XFx0XFx0XFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnNyY192bWEsXFxuMjc1MTpcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGRzdF9hZGRyLCB1bnNpZ25lZCBsb25nIHNyY19hZGRyKVxcbjI3NTI6XFx0e1xcbjI3NTM6XFx0XFx0cG1kX3QgX2RzdF9wbWQsIHNyY19wbWR2YWw7XFxuMjc1NDpcXHRcXHRzdHJ1Y3QgcGFnZSAqc3JjX3BhZ2U7XFxuMjc1NTpcXHRcXHRzdHJ1Y3QgZm9saW8gKnNyY19mb2xpbztcXG4yNzU2OlxcdFxcdHNwaW5sb2NrX3QgKnNyY19wdGwsICpkc3RfcHRsO1xcbjI3NTc6XFx0XFx0cGd0YWJsZV90IHNyY19wZ3RhYmxlO1xcbjI3NTg6XFx0XFx0c3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSByYW5nZTtcXG4yNzU5OlxcdFxcdGludCBlcnIgPSAwO1xcbjI3NjA6XFx0XFxuMjc2MTpcXHRcXHRzcmNfcG1kdmFsID0gKnNyY19wbWQ7XFxuMjc2MjpcXHRcXHRzcmNfcHRsID0gcG1kX2xvY2twdHIobW0sIHNyY19wbWQpO1xcbjI3NjM6XFx0XFxuMjc2NDpcXHRcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKHNyY19wdGwpO1xcbjI3NjU6XFx0XFx0dm1hX2Fzc2VydF9sb2NrZWQoc3JjX3ZtYSk7XFxuMjc2NjpcXHRcXHR2bWFfYXNzZXJ0X2xvY2tlZChkc3Rfdm1hKTtcXG4yNzY3OlxcdFxcbjI3Njg6XFx0XFx0LyogU2FuaXR5IGNoZWNrcyBiZWZvcmUgdGhlIG9wZXJhdGlvbiAqL1xcbjI3Njk6XFx0XFx0aWYgKFdBUk5fT05fT05DRSghcG1kX25vbmUoZHN0X3BtZHZhbCkpIHx8IFdBUk5fT05fT05DRShzcmNfYWRkciBcXHUwMDI2IH5IUEFHRV9QTURfTUFTSykgfHxcXG4yNzcwOlxcdFxcdCAgICBXQVJOX09OX09OQ0UoZHN0X2FkZHIgXFx1MDAyNiB+SFBBR0VfUE1EX01BU0spKSB7XFxuMjc3MTpcXHRcXHRcXHRzcGluX3VubG9jayhzcmNfcHRsKTtcXG4yNzcyOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjI3NzM6XFx0XFx0fVxcbjI3NzQ6XFx0XFxuMjc3NTpcXHRcXHRpZiAoIXBtZF90cmFuc19odWdlKHNyY19wbWR2YWwpKSB7XFxuMjc3NjpcXHRcXHRcXHRzcGluX3VubG9jayhzcmNfcHRsKTtcXG4yNzc3OlxcdFxcdFxcdGlmIChwbWRfaXNfbWlncmF0aW9uX2VudHJ5KHNyY19wbWR2YWwpKSB7XFxuMjc3ODpcXHRcXHRcXHRcXHRwbWRfbWlncmF0aW9uX2VudHJ5X3dhaXQobW0sIHNyY19wbWQpO1xcbjI3Nzk6XFx0XFx0XFx0XFx0cmV0dXJuIC1FQUdBSU47XFxuMjc4MDpcXHRcXHRcXHR9XFxuMjc4MTpcXHRcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4yNzgyOlxcdFxcdH1cXG4yNzgzOlxcdFxcbjI3ODQ6XFx0XFx0c3JjX3BhZ2UgPSBwbWRfcGFnZShzcmNfcG1kdmFsKTtcXG4yNzg1OlxcdFxcbjI3ODY6XFx0XFx0aWYgKCFpc19odWdlX3plcm9fcG1kKHNyY19wbWR2YWwpKSB7XFxuMjc4NzpcXHRcXHRcXHRpZiAodW5saWtlbHkoIVBhZ2VBbm9uRXhjbHVzaXZlKHNyY19wYWdlKSkpIHtcXG4yNzg4OlxcdFxcdFxcdFxcdHNwaW5fdW5sb2NrKHNyY19wdGwpO1xcbjI3ODk6XFx0XFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4yNzkwOlxcdFxcdFxcdH1cXG4yNzkxOlxcdFxcbjI3OTI6XFx0XFx0XFx0c3JjX2ZvbGlvID0gcGFnZV9mb2xpbyhzcmNfcGFnZSk7XFxuMjc5MzpcXHRcXHRcXHRmb2xpb19nZXQoc3JjX2ZvbGlvKTtcXG4yNzk0OlxcdFxcdH0gZWxzZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQxMzo1Njo0MS40NDQwNDMyOTRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjMwNjgxMjg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUE1EIE1pZ3JhdGlvbiBCdWcgRml4KipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBwb2ludGluZyBvdXQgYSBwcmV0dHkgc2lnbmlmaWNhbnQgYnVnLiBJdCBzZWVtcyB0aGF0IHRoZSBgcG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0YCBmdW5jdGlvbiB3YXMgYmVpbmcgY2FsbGVkIHdpdGggYSBsb2NhbCB2YXJpYWJsZSwgYHNyY19wbWR2YWxgLCBpbnN0ZWFkIG9mIHRoZSBpbnRlbmRlZCBgc3JjX3BtZGAgcG9pbnRlci4gVGhhdCdzIGEgY2xhc3NpYyBwb2ludGVyIG1pc2hhcCwgYW5kIGEgZmFpcmx5IHNlcmlvdXMgb25lLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIGFsbCBzb3J0cyBvZiBtZW1vcnkgY29ycnVwdGlvbiBvciBpbmNvcnJlY3QgYmVoYXZpb3IuIFNpbmNlIHRoaXMgaXMgYSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9uLCB0aGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IG5lZWRzIGNhcmVmdWwgcmV2aWV3LiBSaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBgcG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0YCBmdW5jdGlvbiBpdHNlbGYgYW5kIHNlZSBob3cgdGhpcyBpbmNvcnJlY3QgcG9pbnRlciB3YXMgYmVpbmcgdXNlZCBhbmQgd2hhdCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBmaXggYXJlLiBUaGlzIGtpbmQgb2YgbWlzdGFrZSBjYW4gaGF2ZSBzdWJ0bGUgYnV0IGRldmFzdGF0aW5nIGVmZmVjdHMsIHNvIGxldCdzIG1ha2Ugc3VyZSB3ZSBmdWxseSB1bmRlcnN0YW5kIHRoZSByYW1pZmljYXRpb25zIG9mIHRoaXMgcGF0Y2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3MDIsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDEzOjU2OjQ0LjY3NDcyNjk4OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODQ4Nzc0MjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBtZF9taWdyYXRpb25fZW50cnlfd2FpdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg9MzI4PWV4dGVybiB2b2lkIHJlbW92ZV9taWdyYXRpb25fcG1kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcXG4tLVxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTMzMC1cXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaDozMzE6ZXh0ZXJuIHZvaWQgcG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kKTtcXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0zMzItXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaD0zNDg9c3RhdGljIGlubGluZSB2b2lkIHJlbW92ZV9taWdyYXRpb25fcG1kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcXG4tLVxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTM1My1cXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaDozNTQ6c3RhdGljIGlubGluZSB2b2lkIHBtZF9taWdyYXRpb25fZW50cnlfd2FpdChzdHJ1Y3QgbW1fc3RydWN0ICptLCBwbWRfdCAqcCkgeyB9XFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzU1LVxcbi0tXFxubW0vaG1tLmM9Mzk2PXN0YXRpYyBpbnQgaG1tX3ZtYV93YWxrX3BtZChwbWRfdCAqcG1kcCxcXG4tLVxcbm1tL2htbS5jLTQxNy1cXHRcXHRcXHRobW1fdm1hX3dhbGstXFx1MDAzZWxhc3QgPSBhZGRyO1xcbm1tL2htbS5jOjQxODpcXHRcXHRcXHRwbWRfbWlncmF0aW9uX2VudHJ5X3dhaXQod2Fsay1cXHUwMDNlbW0sIHBtZHApO1xcbm1tL2htbS5jLTQxOS1cXHRcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0yNzQ5PWludCBtb3ZlX3BhZ2VzX2h1Z2VfcG1kKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqZHN0X3BtZCwgcG1kX3QgKnNyY19wbWQsIHBtZF90IGRzdF9wbWR2YWwsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTI3NzctXFx0XFx0aWYgKHBtZF9pc19taWdyYXRpb25fZW50cnkoc3JjX3BtZHZhbCkpIHtcXG5tbS9odWdlX21lbW9yeS5jOjI3Nzg6XFx0XFx0XFx0cG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0KG1tLCBzcmNfcG1kKTtcXG5tbS9odWdlX21lbW9yeS5jLTI3NzktXFx0XFx0XFx0cmV0dXJuIC1FQUdBSU47XFxuLS1cXG5tbS9tZW1vcnkuYz02NDEwPXN0YXRpYyB2bV9mYXVsdF90IF9faGFuZGxlX21tX2ZhdWx0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vbWVtb3J5LmMtNjQ4Ny1cXHRcXHRpZiAocG1kX2lzX21pZ3JhdGlvbl9lbnRyeSh2bWYub3JpZ19wbWQpKVxcbm1tL21lbW9yeS5jOjY0ODg6XFx0XFx0XFx0cG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0KG1tLCB2bWYucG1kKTtcXG5tbS9tZW1vcnkuYy02NDg5LVxcdFxcdHJldHVybiAwO1xcbi0tXFxubW0vbWlncmF0ZS5jPTUxNj12b2lkIG1pZ3JhdGlvbl9lbnRyeV93YWl0X2h1Z2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApXFxuLS1cXG5tbS9taWdyYXRlLmMtNTQ4LSNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUZcXG5tbS9taWdyYXRlLmM6NTQ5OnZvaWQgcG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kKVxcbm1tL21pZ3JhdGUuYy01NTAte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQxMzo1Njo0Ni41MjM1MDYyMjlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjI1NDU0MzI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBtb3ZlX3BhZ2VzX2h1Z2VfcG1kYCBDYWxsIENoYWluKipcblxuSG1tLCBzbyBgbW92ZV9wYWdlc19odWdlX3BtZGAgaXMgdGhlIGZ1bmN0aW9uIG9mIGludGVyZXN0LiBJIGtub3cgaXQncyBpbnZvbHZlZCBpbiBtb3ZpbmcgaHVnZSBwYWdlcywgYnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gdGhlIG90aGVyIHBhZ2UgbWlncmF0aW9uIGZ1bmN0aW9ucywgc3BlY2lmaWNhbGx5IGBtb3ZlX3BhZ2VzX3B0ZWAgYW5kIGBtb3ZlX3BhZ2VfdGFibGVzYC4gUmlnaHQsIHRoZSBjb3JlIHF1ZXN0aW9uIGlzICpob3cqIGlzIGBtb3ZlX3BhZ2VzX2h1Z2VfcG1kYCBjYWxsZWQ/IElzIGl0IGEgZGlyZWN0IGVudHJ5IHBvaW50LCBvciBkb2VzIGl0IGdldCBpbnZva2VkIGJ5IHRob3NlIG90aGVyIHJvdXRpbmVzPyBUaGUgYmVzdCB3YXkgdG8gdW5kZXJzdGFuZCB0aGlzIGlzIHRvIGNoZWNrIHRoZSAqY2FsbGVycyogb2YgYG1vdmVfcGFnZXNfaHVnZV9wbWRgLiBGaW5kaW5nIG91dCB3aGF0IGZ1bmN0aW9ucyBkaXJlY3RseSBjYWxsIGl0IHdpbGwgaWxsdW1pbmF0ZSB0aGUgY29udHJvbCBmbG93IGFuZCBsZXQgbWUgdW5kZXJzdGFuZCBpdHMgcGxhY2UgaW4gdGhlIGJyb2FkZXIgbWlncmF0aW9uIHN0cmF0ZWd5LiBHb3R0YSBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyByb2xlLiBUaW1lIHRvIGRpZyBpbiFcblxuXG4iLCJJbnB1dFRva2VucyI6NDY5MywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDEzOjU2OjQ5Ljc0ODk2MjMxNVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk3ODMwNjYxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtb3ZlX3BhZ2VzX2h1Z2VfcG1kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaD0xNTU9dm9pZCBkb3VibGVfcHRfdW5sb2NrKHNwaW5sb2NrX3QgKnB0bDEsIHNwaW5sb2NrX3QgKnB0bDIpO1xcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oOjE1NjppbnQgbW92ZV9wYWdlc19odWdlX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKmRzdF9wbWQsIHBtZF90ICpzcmNfcG1kLCBwbWRfdCBkc3RfcG1kdmFsLFxcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oLTE1Ny1cXHRcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdF92bWEsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTI3MDI9aW50IGNoYW5nZV9odWdlX3B1ZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMjc0OC0gKi9cXG5tbS9odWdlX21lbW9yeS5jOjI3NDk6aW50IG1vdmVfcGFnZXNfaHVnZV9wbWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpkc3RfcG1kLCBwbWRfdCAqc3JjX3BtZCwgcG1kX3QgZHN0X3BtZHZhbCxcXG5tbS9odWdlX21lbW9yeS5jLTI3NTAtXFx0XFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnNyY192bWEsXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jPTE5MzQ9c3RhdGljIHNzaXplX3QgbW92ZV9wYWdlcyhzdHJ1Y3QgdXNlcmZhdWx0ZmRfY3R4ICpjdHgsIHVuc2lnbmVkIGxvbmcgZHN0X3N0YXJ0LFxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0yMDE0LVxcdFxcdCAqIGJlIHN0cmljdC4gSWYgZHN0X3BtZCBjaGFuZ2VzIGludG8gVFBIIGFmdGVyIHRoaXMgY2hlY2ssIHRoZVxcbm1tL3VzZXJmYXVsdGZkLmM6MjAxNTpcXHRcXHQgKiBtb3ZlX3BhZ2VzX2h1Z2VfcG1kKCkgd2lsbCBkZXRlY3QgdGhlIGNoYW5nZSBhbmQgcmV0cnlcXG5tbS91c2VyZmF1bHRmZC5jLTIwMTYtXFx0XFx0ICogd2hpbGUgbW92ZV9wYWdlc19wdGUoKSB3aWxsIGRldGVjdCB0aGUgY2hhbmdlIGFuZCBmYWlsLlxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0yMDQ1LVxcbm1tL3VzZXJmYXVsdGZkLmM6MjA0NjpcXHRcXHRcXHRlcnIgPSBtb3ZlX3BhZ2VzX2h1Z2VfcG1kKG1tLCBkc3RfcG1kLCBzcmNfcG1kLFxcbm1tL3VzZXJmYXVsdGZkLmMtMjA0Ny1cXHRcXHRcXHRcXHRcXHRcXHQgIGRzdF9wbWR2YWwsIGRzdF92bWEsIHNyY192bWEsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDEzOjU2OjUxLjcyNzI3NzE1NVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjQ4NzE3ODQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIENvcmUgTWVtb3J5IE1hbmFnZW1lbnQgQnVnKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIEkgcmVjb2duaXplIHRoZSBhcmVhLiBUaGlzIGhhcyB0byBkbyB3aXRoIGhvdyBgdXNlcmZhdWx0ZmRgIGFuZCBgbW92ZV9wYWdlc2AgaW50ZXJhY3QsIHNwZWNpZmljYWxseSB3aXRoIHRoZSBgVUZGRElPX01PVkVgIG9wZXJhdGlvbiwgd2hpY2ggdXRpbGl6ZXMgYG1vdmVfcGFnZXNfaHVnZV9wbWRgLiBHb3QgaXQuIFRoaXMgaXMgZGVmaW5pdGVseSBhIGNyaXRpY2FsIHBhdGgsIGEgZnVuY3Rpb24gdGhhdCdzIGRlZmluaXRlbHkgdXNlZCBhbmQgcmVhY2hhYmxlLlxuXG5Ob3csIHRoZSBjb3JlIG9mIHRoZSBwcm9ibGVtLi4uIGl0IGxvb2tzIGxpa2UgdGhleSdyZSBjaGFuZ2luZyBgcG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0KG1tLCBcdTAwMjZzcmNfcG1kdmFsKWAgdG8gYHBtZF9taWdyYXRpb25fZW50cnlfd2FpdChtbSwgc3JjX3BtZClgLiBBbmQgKnRoYXQqIGlzIHRoZSBrZXkuIFRoZXkncmUgcGFzc2luZyB0aGUgKmFkZHJlc3MqIG9mIGEgbG9jYWwgdmFyaWFibGUsIGBzcmNfcG1kdmFsYCwgdG8gYSBmdW5jdGlvbiB0aGF0J3Mgc3VwcG9zZWQgdG8gd2FpdCBvbiBhIG1pZ3JhdGlvbiBlbnRyeS4gV2FpdGluZyBvbiBhIHN0YWNrIGFkZHJlc3M/IFRoYXQncyBqdXN0IGFza2luZyBmb3IgdHJvdWJsZSEgVGhhdCdzIGFsbW9zdCBjZXJ0YWlubHkgdGhlIHJvb3QgY2F1c2Ugb2YgYW55IGNyYXNoIG9yIGhhbmcgdGhleSdyZSBzZWVpbmcuIEl0J3MgaW5jb3JyZWN0LiBJIGNhbiBzZWUgd2h5LiBQYXNzaW5nIGBzcmNfcG1kYCwgd2hpY2ggaXMgdGhlIGFjdHVhbCBwYWdlIG1hcCBkZXNjcmlwdG9yLCBpcyB0aGUgY29ycmVjdCBmaXguXG5cbkxldCBtZSBqdXN0IHF1aWNrbHkgdmVyaWZ5IHRoYXQgYENPTkZJR19VU0VSRkFVTFRGRGAsIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBhbmQgYENPTkZJR19NSUdSQVRJT05gIGFyZSBhbGwgZW5hYmxlZC4gVGhhdCBtYWtlcyB0aGUgY29udGV4dCBjbGVhci4gVGhpcyBpcyBwcmVjaXNlbHkgd2hlcmUgSSdkIGV4cGVjdCB0byBzZWUgdGhpcyBraW5kIG9mIGlzc3VlIGFyaXNlIHdpdGggdGhvc2UgY29uZmlndXJhdGlvbnMgaW4gcGxhY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0OTUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMTM6NTY6NTYuMzc1OTk3NzQzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzg0NzcwMDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW92ZV9wYWdlc19odWdlX3BtZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9odWdlX21lbW9yeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2VfbWVtb3J5LmM9MjcwMj1pbnQgY2hhbmdlX2h1Z2VfcHVkKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0yNzQ4LSAqL1xcbm1tL2h1Z2VfbWVtb3J5LmM6Mjc0OTppbnQgbW92ZV9wYWdlc19odWdlX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKmRzdF9wbWQsIHBtZF90ICpzcmNfcG1kLCBwbWRfdCBkc3RfcG1kdmFsLFxcbm1tL2h1Z2VfbWVtb3J5LmMtMjc1MC1cXHRcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdF92bWEsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3JjX3ZtYSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMTM6NTY6NTYuNzE0NDc4OTM3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNTI2ODEzMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiB0aGlzIGFyZWE6XG5cbioqQ2hlY2tpbmcgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gb2YgYG1vdmVfcGFnZXNfaHVnZV9wbWRgKipcblxuQWxyaWdodCwgSSdtIHF1aWNrbHkgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYG1vdmVfcGFnZXNfaHVnZV9wbWRgIGlzIGRlZmluZWQgYW5kIGhvdyBpdCByZWxhdGVzIHRvIFRyYW5zcGFyZW50IEh1Z2VwYWdlcy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiSXMgdGhpcyBmdW5jdGlvbiBldmVuICphdmFpbGFibGUqIHVubGVzcyBUcmFuc3BhcmVudCBIdWdlcGFnZXMgYXJlIGVuYWJsZWQ/XCIgU28sIEknbSBnb2luZyBzdHJhaWdodCB0byB0aGUgc291cmNlIGNvZGUsIHNwZWNpZmljYWxseSBgbW0vaHVnZV9tZW1vcnkuY2AuIEdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0sIHRoZSBleGlzdGVuY2Ugb2YgdGhhdCBmaWxlIGlzLCBpbiBpdHNlbGYsIGEgc3Ryb25nIGluZGljYXRvci4gSXQgbWFrZXMgc2Vuc2UsIGFzIHRoZSBodWdlIHBhZ2UgY29kZSB3b3VsZCBiZSBpbiBhIHNlcGFyYXRlIGNvbXBpbGF0aW9uIHVuaXQuIEJ1dCwgSSBuZWVkIGNvbmZpcm1hdGlvbi4gSSdtIGltcGxpY2l0bHkgcmVhc29uaW5nIHRoYXQgaWYgYG1tL2h1Z2VfbWVtb3J5LmNgIGlzIGNvbXBpbGVkIGJhc2VkIG9uIHRoZSBgI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgbWFjcm8sIHRoZW4gYG1vdmVfcGFnZXNfaHVnZV9wbWRgIHdpbGwgb25seSBiZSBhY2Nlc3NpYmxlIGlmIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIGVuYWJsZWQuIFRpbWUgdG8gY29uZmlybSBhbmQgdGhlbiBJIHdpbGwga25vdyBtb3JlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTg1LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMTM6NTc6MDAuMDY3MTYyMTAzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjI2MTI5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJodWdlX21lbW9yeS5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTEwMD1vYmotJChDT05GSUdfREVWSUNFX01JR1JBVElPTikgKz0gbWlncmF0ZV9kZXZpY2Uub1xcbm1tL01ha2VmaWxlOjEwMTpvYmotJChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpICs9IGh1Z2VfbWVtb3J5Lm8ga2h1Z2VwYWdlZC5vXFxubW0vTWFrZWZpbGUtMTAyLW9iai0kKENPTkZJR19QQUdFX0NPVU5URVIpICs9IHBhZ2VfY291bnRlci5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDEzOjU3OjAwLjEyOTQyODE0OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTk1MzQ1OTAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipEZXBlbmRlbmNpZXMgYW5kIFVzYWdlIG9mIFRyYW5zcGFyZW50IEh1Z2VwYWdlcyBhbmQgVXNlcmZhdWx0ZmQqKlxuXG5SaWdodCwgc28gdG8gbWFrZSB0aGlzIHdvcmssIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gY29uZmlybSBpcyB0aGF0IGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIGFic29sdXRlbHkgZXNzZW50aWFsLiBUaGF0J3MgYSBnaXZlbi4gQW5kIG9mIGNvdXJzZSwgdG8gbGV2ZXJhZ2UgYG1vdmVfcGFnZXNgIHRvIGFjdHVhbGx5ICpyZWFjaCogdGhvc2UgaHVnZXBhZ2VzLCBgQ09ORklHX1VTRVJGQVVMVEZEYCBpcyBhbHNvIGEgaGFyZCByZXF1aXJlbWVudC4gSSBuZWVkIGJvdGggb2YgdGhvc2Uga2VybmVsIGZlYXR1cmVzLlxuXG5Ob3csIEknbSBqdXN0IGN1cmlvdXMgYWJvdXQgc29tZXRoaW5nIC0gSSBzaG91bGQgZG91YmxlLWNoZWNrIGFuZCBtYWtlIHN1cmUgdGhhdCBgbW92ZV9wYWdlc19odWdlX3BtZGAgaXNuJ3QgY2FsbGVkIGZyb20gb3RoZXIgcGxhY2VzIGJlc2lkZXMgd2hlcmUgSSBleHBlY3QgaXQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBmdWxsIHNjb3BlIG9mIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2MDYsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQxMzo1NzowMy4xMjQ3NzYyMTJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NzgxNTMwMjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW92ZV9wYWdlc19odWdlX3BtZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmg9MTU1PXZvaWQgZG91YmxlX3B0X3VubG9jayhzcGlubG9ja190ICpwdGwxLCBzcGlubG9ja190ICpwdGwyKTtcXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaDoxNTY6aW50IG1vdmVfcGFnZXNfaHVnZV9wbWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpkc3RfcG1kLCBwbWRfdCAqc3JjX3BtZCwgcG1kX3QgZHN0X3BtZHZhbCxcXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaC0xNTctXFx0XFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0yNzAyPWludCBjaGFuZ2VfaHVnZV9wdWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTI3NDgtICovXFxubW0vaHVnZV9tZW1vcnkuYzoyNzQ5OmludCBtb3ZlX3BhZ2VzX2h1Z2VfcG1kKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqZHN0X3BtZCwgcG1kX3QgKnNyY19wbWQsIHBtZF90IGRzdF9wbWR2YWwsXFxubW0vaHVnZV9tZW1vcnkuYy0yNzUwLVxcdFxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmNfdm1hLFxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYz0xOTM0PXN0YXRpYyBzc2l6ZV90IG1vdmVfcGFnZXMoc3RydWN0IHVzZXJmYXVsdGZkX2N0eCAqY3R4LCB1bnNpZ25lZCBsb25nIGRzdF9zdGFydCxcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtMjAxNC1cXHRcXHQgKiBiZSBzdHJpY3QuIElmIGRzdF9wbWQgY2hhbmdlcyBpbnRvIFRQSCBhZnRlciB0aGlzIGNoZWNrLCB0aGVcXG5tbS91c2VyZmF1bHRmZC5jOjIwMTU6XFx0XFx0ICogbW92ZV9wYWdlc19odWdlX3BtZCgpIHdpbGwgZGV0ZWN0IHRoZSBjaGFuZ2UgYW5kIHJldHJ5XFxubW0vdXNlcmZhdWx0ZmQuYy0yMDE2LVxcdFxcdCAqIHdoaWxlIG1vdmVfcGFnZXNfcHRlKCkgd2lsbCBkZXRlY3QgdGhlIGNoYW5nZSBhbmQgZmFpbC5cXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtMjA0NS1cXG5tbS91c2VyZmF1bHRmZC5jOjIwNDY6XFx0XFx0XFx0ZXJyID0gbW92ZV9wYWdlc19odWdlX3BtZChtbSwgZHN0X3BtZCwgc3JjX3BtZCxcXG5tbS91c2VyZmF1bHRmZC5jLTIwNDctXFx0XFx0XFx0XFx0XFx0XFx0ICBkc3RfcG1kdmFsLCBkc3Rfdm1hLCBzcmNfdm1hLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQxMzo1NzowNC45MDI5MzU4NjdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcxMjAxODM1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGRpc3RpbGxlZCB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpczpcblxuKipOYXJyb3dpbmcgdGhlIFNjb3BlOiBVRkZEIGFuZCBIdWdlIFBhZ2VzKipcblxuT2theSwgdGhpcyBsb29rcyBsaWtlIGEgdGFyZ2V0ZWQgaW52ZXN0aWdhdGlvbi4gSSdtIHNlZWluZyB0aGlzIGlzIGFsbCBhYm91dCBgbW0vdXNlcmZhdWx0ZmQuY2AsIHNvIEknbSBpbW1lZGlhdGVseSBob21pbmcgaW4gb24gdGhlIGludGVyYWN0aW9uIGJldHdlZW4gVXNlcmZhdWx0ZmQgKFVGRkQpIGFuZCBsaWtlbHkgVHJhbnNwYXJlbnQgSHVnZVBhZ2VzIChUSFApLiBNeSBicmFpbidzIGFscmVhZHkgZmxhc2hpbmcgb24gdGhvc2Uga2V5IGNvbmZpZyBvcHRpb25zOiBgQ09ORklHX1VTRVJGQVVMVEZEYCBhbmQgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGVzZSB0d28gc3lzdGVtcyBhcmUgd29ya2luZyAob3IgcG90ZW50aWFsbHkgZmFpbGluZyB0byB3b3JrKSB0b2dldGhlci4gTXkgaW5zdGluY3QgaXMgdGhhdCB0aGUgYG1vdmVfcGFnZXNfaHVnZV9wbWRgIGZ1bmN0aW9uIGlzIHRoZSBwbGFjZSB0byBzdGFydC4gVGhhdCBsb29rcyBsaWtlIHRoZSBjb3JlIHdvcmssIG1vdmluZyB0aGUgbGFyZ2UgcGFnZXMuXG5cbkknbGwgcXVpY2tseSBjb25maXJtIHRoYXQgYG1vdmVfcGFnZXNgIGluIGBtbS91c2VyZmF1bHRmZC5jYCBpcyBzdGF0aWMuIEFscmlnaHQsIGp1c3QgYXMgSSBzdXNwZWN0ZWQgaXQgaXMuIFRoYXQgbmFycm93cyBkb3duIHdoZXJlIGl0IGNhbiBiZSBjYWxsZWQgZnJvbS4gQSBxdWljayBzZWFyY2ggdGhyb3VnaCB0aGUgY29kZSByZXZlYWxzIGB1c2VyZmF1bHRmZF9tb3ZlYCBpcyB0aGUgY2FsbGVyLiBJJ2xsIG5lZWQgdG8gZm9sbG93IHRoZSBleGVjdXRpb24gZmxvdyBmcm9tIHRoZXJlLiBUaGF0IHNlZW1zIHRvIGJlIHRoZSBjcml0aWNhbCBlbnRyeSBwb2ludCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBzeXN0ZW1zIGludGVycGxheS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzM4OCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDEzOjU3OjA4LjYxNDk1Nzc5NloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg2NjQ1NzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW92ZV9wYWdlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS91c2VyZmF1bHRmZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3VzZXJmYXVsdGZkLmM9MTM4Mj1zdGF0aWMgaW50IG1vdmVfemVyb3BhZ2VfcHRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0xNDE0LSAqL1xcbm1tL3VzZXJmYXVsdGZkLmM6MTQxNTpzdGF0aWMgbG9uZyBtb3ZlX3BhZ2VzX3B0ZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpkc3RfcG1kLCBwbWRfdCAqc3JjX3BtZCxcXG5tbS91c2VyZmF1bHRmZC5jLTE0MTYtXFx0XFx0XFx0ICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSxcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmM9MTg1OT1zdGF0aWMgdm9pZCB1ZmZkX21vdmVfdW5sb2NrKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSxcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtMTg2Ny0vKipcXG5tbS91c2VyZmF1bHRmZC5jOjE4Njg6ICogbW92ZV9wYWdlcyAtIG1vdmUgYXJiaXRyYXJ5IGFub255bW91cyBwYWdlcyBvZiBhbiBleGlzdGluZyB2bWFcXG5tbS91c2VyZmF1bHRmZC5jLTE4NjktICogQGN0eDogcG9pbnRlciB0byB0aGUgdXNlcmZhdWx0ZmQgY29udGV4dFxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0xODc2LSAqXFxubW0vdXNlcmZhdWx0ZmQuYzoxODc3OiAqIG1vdmVfcGFnZXMoKSByZW1hcHMgYXJiaXRyYXJ5IGFub255bW91cyBwYWdlcyBhdG9taWNhbGx5IGluIHplcm9cXG5tbS91c2VyZmF1bHRmZC5jLTE4NzgtICogY29weS4gSXQgb25seSB3b3JrcyBvbiBub24gc2hhcmVkIGFub255bW91cyBwYWdlcyBiZWNhdXNlIHRob3NlIGNhblxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0xODg4LSAqIHN0b3JhZ2Ugb3IgYW55IG90aGVyIEkvTyBkZXZpY2UgKE1BRFZfRE9OVEZPUksgaW4gdGhlIHNvdXJjZSB2bWFcXG5tbS91c2VyZmF1bHRmZC5jOjE4ODk6ICogYXZvaWRzIG1vdmVfcGFnZXMoKSB0byBmYWlsIHdpdGggLUVCVVNZIGlmIHRoZSBwcm9jZXNzIGZvcmtzIGJlZm9yZVxcbm1tL3VzZXJmYXVsdGZkLmM6MTg5MDogKiBtb3ZlX3BhZ2VzKCkgaXMgY2FsbGVkKSwgdGhlbiBpdCB3aWxsIGNhbGwgbW92ZV9wYWdlcygpIHRvIG1hcCB0aGVcXG5tbS91c2VyZmF1bHRmZC5jLTE4OTEtICogcGFnZSBpbiB0aGUgZmF1bHRpbmcgYWRkcmVzcyBpbiB0aGUgZGVzdGluYXRpb24gdm1hLlxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0xOTA1LSAqIHRoZSBkZXN0aW5hdGlvbiB2aXJ0dWFsIG1lbW9yeSByYW5nZSBpcyBub3QgYSB3aG9sZSB1bm1hcHBlZCBob2xlLFxcbm1tL3VzZXJmYXVsdGZkLmM6MTkwNjogKiBtb3ZlX3BhZ2VzKCkgd2lsbCBmYWlsIHJlc3BlY3RpdmVseSB3aXRoIC1FTk9FTlQgb3IgLUVFWElTVC4gVGhpc1xcbm1tL3VzZXJmYXVsdGZkLmMtMTkwNy0gKiBwcm92aWRlcyBhIHZlcnkgc3RyaWN0IGJlaGF2aW9yIHRvIGF2b2lkIGFueSBjaGFuY2Ugb2YgbWVtb3J5XFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTE5MTAtICogdGltZSBmb3IgYW55IGdpdmVuIGZhdWx0aW5nIGFkZHJlc3MuIFRoaXMgbWVhbnMgdGhhdCBpZiB0d28gdGhyZWFkc1xcbm1tL3VzZXJmYXVsdGZkLmM6MTkxMTogKiB0cnkgdG8gYm90aCBjYWxsIG1vdmVfcGFnZXMoKSBvbiB0aGUgc2FtZSBkZXN0aW5hdGlvbiBhZGRyZXNzIGF0IHRoZVxcbm1tL3VzZXJmYXVsdGZkLmMtMTkxMi0gKiBzYW1lIHRpbWUsIHRoZSBzZWNvbmQgdGhyZWFkIHdpbGwgZ2V0IGFuIGV4cGxpY2l0IGVycm9yIGZyb20gdGhpc1xcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0xOTIwLSAqIGFuIGFtb3VudCBvZiBieXRlcyBzdWNjZXNzZnVsbHkgbW92ZWQuIElmIHRoZSByZXR2YWwgcmVwb3J0cyBhXFxubW0vdXNlcmZhdWx0ZmQuYzoxOTIxOiAqIFxcXCJzaG9ydFxcXCIgcmVtYXAsIHRoZSBtb3ZlX3BhZ2VzKCkgY29tbWFuZCBzaG91bGQgYmUgcmVwZWF0ZWQgYnlcXG5tbS91c2VyZmF1bHRmZC5jLTE5MjItICogdXNlcmxhbmQgd2l0aCBzcmMrcmV0dmFsLCBkc3QrcmV2YWwsIGxlbi1yZXR2YWwgaWYgaXQgd2FudHMgdG8ga25vd1xcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0xOTMzLSAqL1xcbm1tL3VzZXJmYXVsdGZkLmM6MTkzNDpzdGF0aWMgc3NpemVfdCBtb3ZlX3BhZ2VzKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCwgdW5zaWduZWQgbG9uZyBkc3Rfc3RhcnQsXFxubW0vdXNlcmZhdWx0ZmQuYy0xOTM1LVxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgc3JjX3N0YXJ0LCB1bnNpZ25lZCBsb25nIGxlbiwgX191NjQgbW9kZSlcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtMjAxNC1cXHRcXHQgKiBiZSBzdHJpY3QuIElmIGRzdF9wbWQgY2hhbmdlcyBpbnRvIFRQSCBhZnRlciB0aGlzIGNoZWNrLCB0aGVcXG5tbS91c2VyZmF1bHRmZC5jOjIwMTU6XFx0XFx0ICogbW92ZV9wYWdlc19odWdlX3BtZCgpIHdpbGwgZGV0ZWN0IHRoZSBjaGFuZ2UgYW5kIHJldHJ5XFxubW0vdXNlcmZhdWx0ZmQuYzoyMDE2OlxcdFxcdCAqIHdoaWxlIG1vdmVfcGFnZXNfcHRlKCkgd2lsbCBkZXRlY3QgdGhlIGNoYW5nZSBhbmQgZmFpbC5cXG5tbS91c2VyZmF1bHRmZC5jLTIwMTctXFx0XFx0ICovXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTIwNDEtXFx0XFx0XFx0XFx0c3BsaXRfaHVnZV9wbWQoc3JjX3ZtYSwgc3JjX3BtZCwgc3JjX2FkZHIpO1xcbm1tL3VzZXJmYXVsdGZkLmM6MjA0MjpcXHRcXHRcXHRcXHQvKiBUaGUgZm9saW8gd2lsbCBiZSBzcGxpdCBieSBtb3ZlX3BhZ2VzX3B0ZSgpICovXFxubW0vdXNlcmZhdWx0ZmQuYy0yMDQzLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0yMDQ1LVxcbm1tL3VzZXJmYXVsdGZkLmM6MjA0NjpcXHRcXHRcXHRlcnIgPSBtb3ZlX3BhZ2VzX2h1Z2VfcG1kKG1tLCBkc3RfcG1kLCBzcmNfcG1kLFxcbm1tL3VzZXJmYXVsdGZkLmMtMjA0Ny1cXHRcXHRcXHRcXHRcXHRcXHQgIGRzdF9wbWR2YWwsIGRzdF92bWEsIHNyY192bWEsXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTIwNjgtXFxubW0vdXNlcmZhdWx0ZmQuYzoyMDY5OlxcdFxcdFxcdHJldCA9IG1vdmVfcGFnZXNfcHRlcyhtbSwgZHN0X3BtZCwgc3JjX3BtZCxcXG5tbS91c2VyZmF1bHRmZC5jLTIwNzAtXFx0XFx0XFx0XFx0XFx0ICAgICAgZHN0X3ZtYSwgc3JjX3ZtYSwgZHN0X2FkZHIsXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jPTQyMTk9c3RhdGljIGludCB1c2VyZmF1bHRmZF9tb3ZlKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCxcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtNDI1OC1cXHRpZiAobW1nZXRfbm90X3plcm8obW0pKSB7XFxubW0vdXNlcmZhdWx0ZmQuYzo0MjU5OlxcdFxcdHJldCA9IG1vdmVfcGFnZXMoY3R4LCB1ZmZkaW9fbW92ZS5kc3QsIHVmZmRpb19tb3ZlLnNyYyxcXG5tbS91c2VyZmF1bHRmZC5jLTQyNjAtXFx0XFx0XFx0XFx0IHVmZmRpb19tb3ZlLmxlbiwgdWZmZGlvX21vdmUubW9kZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDEzOjU3OjA4LjY5MzYyODY0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MjkzMzAxNjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipNeSBBbmFseXNpcyBvZiBgbW92ZV9wYWdlc19odWdlX3BtZGAgYW5kIFJlbGF0ZWQgQ29uZmlndXJhdGlvbnMqKlxuXG5SaWdodCwgc28gSSBzZWUgYG1vdmVfcGFnZXNfaHVnZV9wbWRgIGlzIHRoZSBjZW50cmFsIGZ1bmN0aW9uIHdlJ3JlIGRlYWxpbmcgd2l0aCBoZXJlIOKAkyB0aGF0J3MgdGhlIG9uZSB0byBzY3J1dGluaXplIGZpcnN0LiBUaGUga2V5IGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byBrZWVwIGluIG1pbmQsIG9mIGNvdXJzZSwgYXJlIGBVU0VSRkFVTFRGRGAgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuIFRoZXnigJlsbCB1bmRvdWJ0ZWRseSBwbGF5IGEgc2lnbmlmaWNhbnQgcm9sZSBpbiBob3cgdGhpcyBmdW5jdGlvbiBvcGVyYXRlcywgaGFuZGxpbmcgcGFnZSBmYXVsdHMsIGFuZCBkZWFsaW5nIHdpdGggdHJhbnNwYXJlbnQgaHVnZXBhZ2VzLCByZXNwZWN0aXZlbHkuIEkgbmVlZCB0byBiZSBhd2FyZSBvZiB0aGVpciBpbnRlcmFjdGlvbnMuXG5cbk5vdywgYSBxdWljayBzaWRlIHRob3VnaHTigKYgSSBzaG91bGQganVzdCBkb3VibGUtY2hlY2sgaWYgYENPTkZJR19NSUdSQVRJT05gIGlzIGFjdHVhbGx5IGEgaGFyZCByZXF1aXJlbWVudCBoZXJlLiBJdCBzZWVtcyBsaWtlIGEgY29yZSBjb25jZXB0LCBidXQgSSBzaG91bGQgY29uZmlybSBpdOKAmXMgZXNzZW50aWFsIHRvIHRoZSBmdW5jdGlvbidzIG9wZXJhdGlvbiBvciBpZiBpdOKAmXMgbW9yZSBmb3IgYSBicm9hZGVyIGNvbnRleHQuIE9rYXksIGxldCBtZSBkbyBhIHF1aWNrIHNlYXJjaC4gQWgsIHJpZ2h0LiBJdCBsb29rcyBsaWtlIGBwbWRfbWlncmF0aW9uX2VudHJ5X3dhaXRgIGlzIGRlZmluZWQgaW4gYGluY2x1ZGUvbGludXgvc3dhcG9wcy5oYCwgd2hpY2ggZ2l2ZXMgYSBoaW50IG9uIGl0cyBwdXJwb3NlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDY5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMTM6NTc6MTIuNDIyOTYxMDY3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODg0NzExNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwbWRfbWlncmF0aW9uX2VudHJ5X3dhaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9zd2Fwb3BzLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg9MzI4PWV4dGVybiB2b2lkIHJlbW92ZV9taWdyYXRpb25fcG1kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcXG4tLVxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTMzMC1cXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaDozMzE6ZXh0ZXJuIHZvaWQgcG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kKTtcXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0zMzItXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaD0zNDg9c3RhdGljIGlubGluZSB2b2lkIHJlbW92ZV9taWdyYXRpb25fcG1kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcXG4tLVxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTM1My1cXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaDozNTQ6c3RhdGljIGlubGluZSB2b2lkIHBtZF9taWdyYXRpb25fZW50cnlfd2FpdChzdHJ1Y3QgbW1fc3RydWN0ICptLCBwbWRfdCAqcCkgeyB9XFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzU1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQxMzo1NzoxMi40ODE4MTYyNjNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY5ODg2ODQzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYHBtZF9taWdyYXRpb25fZW50cnlfd2FpdGAgaW4gYHN3YXBvcHMuaGAqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gc3Vycm91bmRpbmcgYHBtZF9taWdyYXRpb25fZW50cnlfd2FpdGAgd2l0aGluIGBpbmNsdWRlL2xpbnV4L3N3YXBvcHMuaGAuIFRoaXMgbGlrZWx5IGluZGljYXRlcyB0aGF0IGl0cyBiZWhhdmlvciBvciBldmVuIGl0cyBleGlzdGVuY2UgaXMgcGxhdGZvcm0tc3BlY2lmaWMgb3IgZGVwZW5kcyBvbiBjZXJ0YWluIGtlcm5lbCBjb25maWd1cmF0aW9ucy4gVGhlIGAjaWZkZWZgIGRpcmVjdGl2ZXMgYXJlIHRoZSBrZXkgaGVyZS4gSSB3YW50IHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHVuZGVyIHdoaWNoIGNvbmRpdGlvbnMgdGhpcyBmdW5jdGlvbiBpcyAqcHJlc2VudCogYW5kICp3aGF0KiB0aG9zZSBjb25kaXRpb25zIGFyZS4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBzcGVjaWZpYyBhcmNoaXRlY3R1cmUsIGEgZmVhdHVyZSBmbGFnLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gS25vd2luZyB0aGlzIGNvbnRleHQgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgZnVuY3Rpb24ncyBwdXJwb3NlIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIG1lbW9yeSBtYW5hZ2VtZW50IGZyYW1ld29yay4gRXNzZW50aWFsbHksIGZpZ3VyaW5nIG91dCB3aGVuICppdCdzIHRoZXJlKiB3aWxsIHRlbGwgbWUgYSBsb3QgYWJvdXQgKndoeSogaXQncyB0aGVyZS4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgaXRzIHVzZTsgd2hhdCBjb25maWd1cmF0aW9ucyByZWx5IG9uIGl0LCBhbmQgd2hhdCBjb25maWd1cmF0aW9ucyBkbyBub3Q/IFRoaXMgd2lsbCB0ZWxsIG1lIGhvdyBjcml0aWNhbCBpdCBpcyBmb3IgYSBnZW5lcmFsIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvZGUuIEknbSBnb2luZyB0byBzdGFydCBieSBnZXR0aW5nIHRvIHRoYXQgbGluZSwgYW5kIHRoZW4gYmFja2luZyBvdXQgdW50aWwgSSBzZWUgd2hhdCBpcyBoYXBwZW5pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2NTQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQxMzo1NzoxNi4xODA2ODcxNjNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAzODMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvc3dhcG9wcy5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMyMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMyMDpcXHR9XFxuIDMyMTpcXHRcXG4gMzIyOlxcdHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsaztcXG4gMzIzOlxcdFxcbiAzMjQ6XFx0I2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRlxcbiAzMjU6XFx0ZXh0ZXJuIGludCBzZXRfcG1kX21pZ3JhdGlvbl9lbnRyeShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsXFxuIDMyNjpcXHRcXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZSk7XFxuIDMyNzpcXHRcXG4gMzI4OlxcdGV4dGVybiB2b2lkIHJlbW92ZV9taWdyYXRpb25fcG1kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcXG4gMzI5OlxcdFxcdFxcdHN0cnVjdCBwYWdlICpuZXcpO1xcbiAzMzA6XFx0XFxuIDMzMTpcXHRleHRlcm4gdm9pZCBwbWRfbWlncmF0aW9uX2VudHJ5X3dhaXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQpO1xcbiAzMzI6XFx0XFxuIDMzMzpcXHRzdGF0aWMgaW5saW5lIHBtZF90IHN3cF9lbnRyeV90b19wbWQoc3dwX2VudHJ5X3QgZW50cnkpXFxuIDMzNDpcXHR7XFxuIDMzNTpcXHRcXHRzd3BfZW50cnlfdCBhcmNoX2VudHJ5O1xcbiAzMzY6XFx0XFxuIDMzNzpcXHRcXHRhcmNoX2VudHJ5ID0gX19zd3BfZW50cnkoc3dwX3R5cGUoZW50cnkpLCBzd3Bfb2Zmc2V0KGVudHJ5KSk7XFxuIDMzODpcXHRcXHRyZXR1cm4gX19zd3BfZW50cnlfdG9fcG1kKGFyY2hfZW50cnkpO1xcbiAzMzk6XFx0fVxcbiAzNDA6XFx0XFxuIDM0MTpcXHQjZWxzZSAgLyogQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGICovXFxuIDM0MjpcXHRzdGF0aWMgaW5saW5lIGludCBzZXRfcG1kX21pZ3JhdGlvbl9lbnRyeShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsXFxuIDM0MzpcXHRcXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4gMzQ0OlxcdHtcXG4gMzQ1OlxcdFxcdEJVSUxEX0JVRygpO1xcbiAzNDY6XFx0fVxcbiAzNDc6XFx0XFxuIDM0ODpcXHRzdGF0aWMgaW5saW5lIHZvaWQgcmVtb3ZlX21pZ3JhdGlvbl9wbWQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LFxcbiAzNDk6XFx0XFx0XFx0c3RydWN0IHBhZ2UgKm5ldylcXG4gMzUwOlxcdHtcXG4gMzUxOlxcdFxcdEJVSUxEX0JVRygpO1xcbiAzNTI6XFx0fVxcbiAzNTM6XFx0XFxuIDM1NDpcXHRzdGF0aWMgaW5saW5lIHZvaWQgcG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0KHN0cnVjdCBtbV9zdHJ1Y3QgKm0sIHBtZF90ICpwKSB7IH1cXG4gMzU1OlxcdFxcbiAzNTY6XFx0c3RhdGljIGlubGluZSBwbWRfdCBzd3BfZW50cnlfdG9fcG1kKHN3cF9lbnRyeV90IGVudHJ5KVxcbiAzNTc6XFx0e1xcbiAzNTg6XFx0XFx0cmV0dXJuIF9fcG1kKDApO1xcbiAzNTk6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQxMzo1NzoxNi4xODA3OTI3OTNaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI3NTExNTc3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIENvZGViYXNlOiBUaGUgU2VhcmNoIGZvciBgcG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0YCoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCB3aGVyZSBgcG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0YCBpcyBhY3R1YWxseSAqZGVmaW5lZCouIEkgdmFndWVseSByZW1lbWJlciBpdCwgYnV0IGEgcXVpY2sgc2VhcmNoIGRpZG4ndCBpbW1lZGlhdGVseSB0dXJuIHVwIHRoZSBzb3VyY2UuIExldCdzIHNlZS4uLiB0aGUgZXJyb3IgbWVzc2FnZSBvciBjb250ZXh0IGhhZCB0byBoYXZlIG1lbnRpb25lZCB0aGUgZmlsZS4gQWgsIHllcyEgSXQgbG9va3MgbGlrZSB0aGUgc3lzdGVtJ3MgdGVsbGluZyBtZSBpdCdzIGxvY2F0ZWQgaW4gYG1tL21pZ3JhdGUuY2AuIE9rYXksIHRoYXQgbWFrZXMgc2Vuc2U7IHRoYXQgc291bmRzIGxpa2UgYSBwbGF1c2libGUgbG9jYXRpb24gZm9yIG1lbW9yeSBtaWdyYXRpb24gcmVsYXRlZCBmdW5jdGlvbnMuIEFscmlnaHQsIHRpbWUgdG8gb3BlbiB1cCBgbW0vbWlncmF0ZS5jYCBhbmQgZGlnIGludG8gdGhlIGltcGxlbWVudGF0aW9uIHRoZXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgZnVuY3Rpb24gZG9lcyBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBtaWdyYXRpb24gY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA2MTMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDEzOjU3OjE5LjQ1NTkxMDc0NVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI1NDc1MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21pZ3JhdGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9taWdyYXRlLmM9NTE2PXZvaWQgbWlncmF0aW9uX2VudHJ5X3dhaXRfaHVnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcClcXG4tLVxcbm1tL21pZ3JhdGUuYy01NDgtI2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRlxcbm1tL21pZ3JhdGUuYzo1NDk6dm9pZCBwbWRfbWlncmF0aW9uX2VudHJ5X3dhaXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQpXFxubW0vbWlncmF0ZS5jLTU1MC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDEzOjU3OjE5LjUxODQ2MzM0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMDA1NDYyMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgcG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0YCdzIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYG1tL21pZ3JhdGUuY2AgYW5kIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBzdXJyb3VuZGluZyBgcG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0YC4gSSBrbm93IHRoaXMgZnVuY3Rpb24gaXMgY3JpdGljYWwgZm9yIGhhbmRsaW5nIHBhZ2UgbWlncmF0aW9ucyBhdCB0aGUgUGFnZSBNaWRkbGUgRGlyZWN0b3J5IChQTUQpIGxldmVsLiBNeSBpbml0aWFsIGh5cG90aGVzaXMgaXMgdGhhdCBpdHMgcHJlc2VuY2Ugb3IgYmVoYXZpb3IgaXMgcHJvYmFibHkgdGllZCB0byBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbnMgb3IgYXJjaGl0ZWN0dXJhbCBmZWF0dXJlcyByZWxhdGVkIHRvIHBhZ2UgbWlncmF0aW9uLCBlaXRoZXIgb24gYSBzcGVjaWZpYyBhcmNoaXRlY3R1cmUsIG9yIGEgcGFydGljdWxhciBrZXJuZWwgY29uZmlnLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB3aGF0IGNvbmZpZ3VyYXRpb25zIHJlcXVpcmUgb3IgZW5hYmxlIHRoaXMgZnVuY3Rpb25hbGl0eTsgYSBgI2lmZGVmYCBjaGVjayB3aWxsIGJlIHRoZSBxdWlja2VzdCB3YXkgdG8gZG8gdGhhdC4gSSBleHBlY3QgaXQncyBnb2luZyB0byBiZSBzb21ldGhpbmcgbGlrZSBhIGZsYWcgZm9yIFRIUCBtaWdyYXRpb24sIE5VTUEsIG9yIHNvbWUgb3RoZXIgbWVtb3J5IG1hbmFnZW1lbnQgc2V0dGluZy4gVW5kZXJzdGFuZGluZyB0aGUgY29uZGl0aW9uYWwgY29tcGlsZSB3aWxsIGhlbHAgbWUgcXVpY2tseSBhc2NlcnRhaW4gd2hpY2gga2VybmVsIGJ1aWxkIHRoaXMgc3BlY2lmaWMgc2VjdGlvbiBvZiBjb2RlIGFwcGxpZXMgdG8uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwOTg1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMTM6NTc6MjIuODE5MDEyMzVaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE5MDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21pZ3JhdGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NDUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1NDU6XFx0fVxcbiA1NDY6XFx0I2VuZGlmXFxuIDU0NzpcXHRcXG4gNTQ4OlxcdCNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUZcXG4gNTQ5OlxcdHZvaWQgcG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kKVxcbiA1NTA6XFx0e1xcbiA1NTE6XFx0XFx0c3BpbmxvY2tfdCAqcHRsO1xcbiA1NTI6XFx0XFxuIDU1MzpcXHRcXHRwdGwgPSBwbWRfbG9jayhtbSwgcG1kKTtcXG4gNTU0OlxcdFxcdGlmICghcG1kX2lzX21pZ3JhdGlvbl9lbnRyeSgqcG1kKSlcXG4gNTU1OlxcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbiA1NTY6XFx0XFx0c29mdGxlYWZfZW50cnlfd2FpdF9vbl9sb2NrZWQoc29mdGxlYWZfZnJvbV9wbWQoKnBtZCksIHB0bCk7XFxuIDU1NzpcXHRcXHRyZXR1cm47XFxuIDU1ODpcXHR1bmxvY2s6XFxuIDU1OTpcXHRcXHRzcGluX3VubG9jayhwdGwpO1xcbiA1NjA6XFx0fVxcbiA1NjE6XFx0I2VuZGlmXFxuIDU2MjpcXHRcXG4gNTYzOlxcdC8qXFxuIDU2NDpcXHQgKiBSZXBsYWNlIHRoZSBmb2xpbyBpbiB0aGUgbWFwcGluZy5cXG4gNTY1OlxcdCAqXFxuIDU2NjpcXHQgKiBUaGUgbnVtYmVyIG9mIHJlbWFpbmluZyByZWZlcmVuY2VzIG11c3QgYmU6XFxuIDU2NzpcXHQgKiAxIGZvciBhbm9ueW1vdXMgZm9saW9zIHdpdGhvdXQgYSBtYXBwaW5nXFxuIDU2ODpcXHQgKiAyIGZvciBmb2xpb3Mgd2l0aCBhIG1hcHBpbmdcXG4gNTY5OlxcdCAqIDMgZm9yIGZvbGlvcyB3aXRoIGEgbWFwcGluZyBhbmQgdGhlIHByaXZhdGUgZmxhZyBzZXQuXFxuIDU3MDpcXHQgKi9cXG4gNTcxOlxcdHN0YXRpYyBpbnQgX19mb2xpb19taWdyYXRlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuIDU3MjpcXHRcXHRcXHRzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgZXhwZWN0ZWRfY291bnQpXFxuIDU3MzpcXHR7XFxuIDU3NDpcXHRcXHRYQV9TVEFURSh4YXMsIFxcdTAwMjZtYXBwaW5nLVxcdTAwM2VpX3BhZ2VzLCBmb2xpby1cXHUwMDNlaW5kZXgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQxMzo1NzoyMi44MTkzMzQxM1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTEyMDAxODE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIHdpdGggdGhlIGJvbGRlZCBoZWFkZXIgYXMgcmVxdWVzdGVkOlxuXG4qKlVuZGVyc3RhbmRpbmcgdGhlIFJlbGF0aW9uc2hpcCBCZXR3ZWVuIFBNRCBTb2Z0bGVhZiBTdXBwb3J0IGFuZCBNaWdyYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQgbWUgc2VlIGlmIEkndmUgZ290IHRoaXMgcmlnaHQuIEknbSBsb29raW5nIGF0IHRoZSBkZXBlbmRlbmNpZXMgaGVyZS4gSXQgc2VlbXMgdGhhdCBgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGYCBpcyBhICpwcmUtcmVxdWlzaXRlKiBmb3IgdGhlIGBwbWRfbWlncmF0aW9uX2VudHJ5X3dhaXRgIHZhcmlhYmxlIHRvIGV2ZW4gKmV4aXN0KiBpbiBhIG1lYW5pbmdmdWwgc3RhdGUsIHJpZ2h0PyBNZWFuaW5nIGl0IG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIGFueXRoaW5nIHJlbGF0ZWQgdG8gbWlncmF0aW9uIHRvIGZ1bmN0aW9uLiBUaGUgbG9naWMncyBsaWtlbHkgc3RydWN0dXJlZCBzdWNoIHRoYXQgaWYgdGhlIGFyY2hpdGVjdHVyZSBkb2Vzbid0IHN1cHBvcnQgdGhlIGZpbmVyLWdyYWluZWQgaGFuZGxpbmcgb2YgUGFnZSBUYWJsZSBlbnRyaWVzIHRoYXQgYSBzb2Z0bGVhZiBwcm92aWRlcywgdGhlbiB0aGUgbWlncmF0aW9uIGxvZ2ljIHdvdWxkbid0IGJlIHNldHVwIHRvIHV0aWxpemUgaXQuXG5cbkFuZCB0aGVuIEknbSB0aGlua2luZywgaGFuZyBvbiwgdGhlIGNvcmUgbWlncmF0aW9uIGNvZGUgaXRzZWxmLCB3aGljaCBsaXZlcyBpbiBgbW0vbWlncmF0ZS5jYCwgaXMgb25seSBldmVuICpjb21waWxlZCogaW50byB0aGUga2VybmVsIGlmIGBDT05GSUdfTUlHUkFUSU9OYCBpcyBlbmFibGVkIGluIHRoZSBmaXJzdCBwbGFjZS4gU28sIHRoZSB3aG9sZSBtaWdyYXRpb24gc3Vic3lzdGVtIGlzIGdhdGVkIGJ5IHRoaXMgY29uZmlndXJhdGlvbi4gVGhlIGluaXRpYWwgY29uZGl0aW9uIGZvciBhbnl0aGluZyB0byBtYXR0ZXIgaXMgYENPTkZJR19NSUdSQVRJT05gLCBhbmQgaWYgdGhhdCdzIHRydWUsIHRoZW4gYENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRmAgaXMgbmVlZGVkIGZvciBgcG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0YCB0byBkbyBpdHMgam9iLiBJdCdzIGFsbW9zdCBhIGNhc2NhZGluZyBzZXQgb2YgY29uZGl0aW9uYWxzIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjk1LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQxMzo1NzoyNi45MzEzMzk3MzhaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMDgwNTM2MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtaWdyYXRlLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9OTc9b2JqLSQoQ09ORklHX01FTVRFU1QpXFx0XFx0Kz0gbWVtdGVzdC5vXFxubW0vTWFrZWZpbGU6OTg6b2JqLSQoQ09ORklHX01JR1JBVElPTikgKz0gbWlncmF0ZS5vXFxubW0vTWFrZWZpbGUtOTktb2JqLSQoQ09ORklHX05VTUEpICs9IG1lbW9yeS10aWVycy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDEzOjU3OjI3LjE2MjE1MTk1MVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzYyMDQ3NTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKktlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llczogUE1EIFNvZnRsZWFmIGFuZCBNaWdyYXRpb24qKlxuXG5BbHJpZ2h0LCBJIHNlZSB3ZSdyZSBkZWFsaW5nIHdpdGggYENPTkZJR19NSUdSQVRJT05gIGFzIGEgcHJlcmVxdWlzaXRlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgbGV0J3MgZGV0ZXJtaW5lIGlmIHdlIGNhbiBlbmFibGUgYENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRmAuIEdpdmVuIHRoZSBjb250ZXh0LCBJJ20gaW5mZXJyaW5nIHRoaXMgaXMgcGFydCBvZiB0aGUgZGVwZW5kZW5jeSBjaGFpbi4gSXMgdGhpcyBwYXJ0aWN1bGFyIGFyY2hpdGVjdHVyZSBldmVuIGNhcGFibGUgb2YgbGV2ZXJhZ2luZyBQTUQgc29mdGxlYWY/IFVuZGVyc3RhbmRpbmcgdGhhdCBiaXQgaXMgY3J1Y2lhbCBiZWZvcmUgd2UgcHJvY2VlZC4gV2UgbmVlZCB0byBhc2NlcnRhaW4gaWYgdGhlIGhhcmR3YXJlIGFuZCByZWxldmFudCBhcmNoaXRlY3R1cmUgc3VwcG9ydCBgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGYCBiZWZvcmUgd2UgY2FuIHN0YXJ0IGNvbnNpZGVyaW5nIGZ1cnRoZXIgY29uZmlndXJhdGlvbi4gT3RoZXJ3aXNlLCBhbnkgZWZmb3J0IGRvd24gdGhhdCBwYXRoIHdvdWxkIGJlIHdhc3RlZCwgb3Igd29yc2UsIGxlYWQgdG8gaW5zdGFiaWxpdHkuIFRoZSBlbmFibGVtZW50IG9mIGBDT05GSUdfTUlHUkFUSU9OYCBsaWtlbHkgaGluZ2VzIG9uIHRoaXMsIHNvIGl0J3MgYSBjcml0aWNhbCBmaXJzdCBjaGVjay4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgS2NvbmZpZyBvcHRpb25zIHRvIGNvbmZpcm0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMTU4LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMTM6NTc6MzAuNTI0MjAxOTI2WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODc1NDg4MDU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkFSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L0tjb25maWc9Mj1jb25maWcgQVJNNjRcXG4tLVxcbmFyY2gvYXJtNjQvS2NvbmZpZy0xOS1cXHRzZWxlY3QgQVJDSF9FTkFCTEVfU1BMSVRfUE1EX1BUTE9DSyBpZiBQR1RBQkxFX0xFVkVMUyBcXHUwMDNlIDJcXG5hcmNoL2FybTY0L0tjb25maWc6MjA6XFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGIGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxuYXJjaC9hcm02NC9LY29uZmlnLTIxLVxcdHNlbGVjdCBBUkNIX0hBU19DQUNIRV9MSU5FX1NJWkVcXG4tLVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oPTE1MDY9c3RhdGljIGlubGluZSBwbWRfdCBwbWRwX2VzdGFibGlzaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTE1MzYtXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg6MTUzNzojaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtMTUzOC0jZGVmaW5lIF9fcG1kX3RvX3N3cF9lbnRyeShwbWQpXFx0XFx0KChzd3BfZW50cnlfdCkgeyBwbWRfdmFsKHBtZCkgfSlcXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaC0xNTM5LSNkZWZpbmUgX19zd3BfZW50cnlfdG9fcG1kKHN3cClcXHRcXHRfX3BtZCgoc3dwKS52YWwpXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg6MTU0MDojZW5kaWYgLyogQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGICovXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtMTU0MS1cXG4tLVxcbmFyY2gvbG9vbmdhcmNoL0tjb25maWc9Mj1jb25maWcgTE9PTkdBUkNIXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnLTE0LVxcdHNlbGVjdCBBUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVR1xcbmFyY2gvbG9vbmdhcmNoL0tjb25maWc6MTU6XFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGIGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZy0xNi1cXHRzZWxlY3QgQVJDSF9IQVNfQUNQSV9UQUJMRV9VUEdSQURFXFx0aWYgQUNQSVxcbi0tXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmg9MTA0ND1zdGF0aWMgaW5saW5lIHB0ZV90ICpwbWRwX3B0ZXAocG1kX3QgKnBtZClcXG4tLVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGd0YWJsZS5oLTEwNjItXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmg6MTA2MzojaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmgtMTA2NC0jZGVmaW5lIHBtZF9zd3BfbWtzb2Z0X2RpcnR5KHBtZClcXHRwdGVfcG1kKHB0ZV9zd3BfbWtzb2Z0X2RpcnR5KHBtZF9wdGUocG1kKSkpXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcuY3B1dHlwZT0xMDk9Y29uZmlnIFBQQ19USFBcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZy5jcHV0eXBlLTExNC0gICAgICAgc2VsZWN0IEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVURcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcuY3B1dHlwZToxMTU6ICAgICAgIHNlbGVjdCBBUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiBpZiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZy5jcHV0eXBlLTExNi1cXG4tLVxcbmFyY2gvcmlzY3YvS2NvbmZpZz0xMz1jb25maWcgUklTQ1ZcXG4tLVxcbmFyY2gvcmlzY3YvS2NvbmZpZy0yNC1cXHRzZWxlY3QgQVJDSF9FTkFCTEVfU1BMSVRfUE1EX1BUTE9DSyBpZiBQR1RBQkxFX0xFVkVMUyBcXHUwMDNlIDJcXG5hcmNoL3Jpc2N2L0tjb25maWc6MjU6XFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGIGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxuYXJjaC9yaXNjdi9LY29uZmlnLTI2LVxcdHNlbGVjdCBBUkNIX0hBU19CSU5GTVRfRkxBVFxcbi0tXFxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg9OTQ0PXN0YXRpYyBpbmxpbmUgcG1kX3QgcG1kX2NsZWFyX3NvZnRfZGlydHkocG1kX3QgcG1kKVxcbi0tXFxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtOTQ4LVxcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oOjk0OTojaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGXFxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtOTUwLXN0YXRpYyBpbmxpbmUgYm9vbCBwbWRfc3dwX3NvZnRfZGlydHkocG1kX3QgcG1kKVxcbi0tXFxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg9OTYwPXN0YXRpYyBpbmxpbmUgcG1kX3QgcG1kX3N3cF9jbGVhcl9zb2Z0X2RpcnR5KHBtZF90IHBtZClcXG4tLVxcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTk2My19XFxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg6OTY0OiNlbmRpZiAvKiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYgKi9cXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BndGFibGUuaC05NjUtI2VuZGlmIC8qIENPTkZJR19IQVZFX0FSQ0hfU09GVF9ESVJUWSAqL1xcbi0tXFxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg9MTIwNj1zdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9zd3BfY2xlYXJfZXhjbHVzaXZlKHB0ZV90IHB0ZSlcXG4tLVxcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTEyMTAtXFxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg6MTIxMTojaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGXFxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtMTIxMi0jZGVmaW5lIF9fcG1kX3RvX3N3cF9lbnRyeShwbWQpICgoc3dwX2VudHJ5X3QpIHsgcG1kX3ZhbChwbWQpIH0pXFxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtMTIxMy0jZGVmaW5lIF9fc3dwX2VudHJ5X3RvX3BtZChzd3ApIF9fcG1kKChzd3ApLnZhbClcXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BndGFibGUuaDoxMjE0OiNlbmRpZiAvKiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYgKi9cXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BndGFibGUuaC0xMjE1LVxcbi0tXFxuYXJjaC9zMzkwL0tjb25maWc9NzU9Y29uZmlnIFMzOTBcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTg0LVxcdHNlbGVjdCBBUkNIX0VOQUJMRV9TUExJVF9QTURfUFRMT0NLIGlmIFBHVEFCTEVfTEVWRUxTIFxcdTAwM2UgMlxcbmFyY2gvczM5MC9LY29uZmlnOjg1OlxcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiBpZiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcbmFyY2gvczM5MC9LY29uZmlnLTg2LVxcdHNlbGVjdCBBUkNIX0hBU19DQ19DQU5fTElOS1xcbi0tXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaD05MDE9c3RhdGljIGlubGluZSBwbWRfdCBwbWRfY2xlYXJfc29mdF9kaXJ0eShwbWRfdCBwbWQpXFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTkwNS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oOjkwNjojaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaC05MDctI2RlZmluZSBwbWRfc3dwX3NvZnRfZGlydHkocG1kKVxcdFxcdHBtZF9zb2Z0X2RpcnR5KHBtZClcXG4tLVxcbmFyY2gveDg2L0tjb25maWc9NTg9Y29uZmlnIFg4Nlxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy03Mi1cXHRzZWxlY3QgQVJDSF9FTkFCTEVfU1BMSVRfUE1EX1BUTE9DSyBpZiAoUEdUQUJMRV9MRVZFTFMgXFx1MDAzZSAyKSBcXHUwMDI2XFx1MDAyNiAoWDg2XzY0IHx8IFg4Nl9QQUUpXFxuYXJjaC94ODYvS2NvbmZpZzo3MzpcXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYgaWYgWDg2XzY0IFxcdTAwMjZcXHUwMDI2IFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxuYXJjaC94ODYvS2NvbmZpZy03NC1cXHRzZWxlY3QgQVJDSF9IQVNfQUNQSV9UQUJMRV9VUEdSQURFXFx0aWYgQUNQSVxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oPTE1NDM9c3RhdGljIGlubGluZSBwdGVfdCBwdGVfc3dwX2NsZWFyX3NvZnRfZGlydHkocHRlX3QgcHRlKVxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTE1NDctXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oOjE1NDg6I2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRlxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaC0xNTQ5LXN0YXRpYyBpbmxpbmUgcG1kX3QgcG1kX3N3cF9ta3NvZnRfZGlydHkocG1kX3QgcG1kKVxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9NTY4PXN0YXRpYyBpbmxpbmUgYm9vbCB0aHBfbWlncmF0aW9uX3N1cHBvcnRlZCh2b2lkKVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTU2OS17XFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NTcwOlxcdHJldHVybiBJU19FTkFCTEVEKENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRik7XFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNTcxLX1cXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTc4PXN0YXRpYyBpbmxpbmUgcHRlX3Qgc29mdGxlYWZfdG9fcHRlKHNvZnRsZWFmX3QgZW50cnkpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC04My1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo4NDojaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtODUtLyoqXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD01NzQ9c3RhdGljIGlubGluZSBib29sIHB0ZV9pc191ZmZkX21hcmtlcihwdGVfdCBwdGUpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC01ODktXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6NTkwOiNpZiBkZWZpbmVkKENPTkZJR19aT05FX0RFVklDRSkgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYpXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNTkxLVxcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg9NjA0PXN0YXRpYyBpbmxpbmUgYm9vbCBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkocG1kX3QgcG1kKVxcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNjA4LVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjYwOTojZWxzZSAgLyogQ09ORklHX1pPTkVfREVWSUNFIFxcdTAwMjZcXHUwMDI2IENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiAqL1xcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTYxMC1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD02MTE9c3RhdGljIGlubGluZSBib29sIHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShwbWRfdCBwbWQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC02MTUtXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6NjE2OiNlbmRpZiAvKiBDT05GSUdfWk9ORV9ERVZJQ0UgXFx1MDAyNlxcdTAwMjYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGICovXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNjE3LVxcbi0tXFxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmg9MTc5Mz1zdGF0aWMgaW5saW5lIHBncHJvdF90IHBncHJvdF9tb2RpZnkocGdwcm90X3Qgb2xkcHJvdCwgcGdwcm90X3QgbmV3cHJvdClcXG4tLVxcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oLTE4NDEtI2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfU09GVF9ESVJUWVxcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oOjE4NDI6I2lmbmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUZcXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaC0xODQzLXN0YXRpYyBpbmxpbmUgcG1kX3QgcG1kX3N3cF9ta3NvZnRfZGlydHkocG1kX3QgcG1kKVxcbi0tXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg9MzIyPXN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsaztcXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0zMjMtXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg6MzI0OiNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUZcXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0zMjUtZXh0ZXJuIGludCBzZXRfcG1kX21pZ3JhdGlvbl9lbnRyeShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaD0zMzM9c3RhdGljIGlubGluZSBwbWRfdCBzd3BfZW50cnlfdG9fcG1kKHN3cF9lbnRyeV90IGVudHJ5KVxcbi0tXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzQwLVxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oOjM0MTojZWxzZSAgLyogQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGICovXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzQyLXN0YXRpYyBpbmxpbmUgaW50IHNldF9wbWRfbWlncmF0aW9uX2VudHJ5KHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcXG4tLVxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oPTM1Nj1zdGF0aWMgaW5saW5lIHBtZF90IHN3cF9lbnRyeV90b19wbWQoc3dwX2VudHJ5X3QgZW50cnkpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0zNjAtXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg6MzYxOiNlbmRpZiAgLyogQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGICovXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzYyLVxcbi0tXFxubW0vS2NvbmZpZz03MDM9Y29uZmlnIEFSQ0hfRU5BQkxFX0hVR0VQQUdFX01JR1JBVElPTlxcbi0tXFxubW0vS2NvbmZpZy03MDUtXFxubW0vS2NvbmZpZzo3MDY6Y29uZmlnIEFSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGXFxubW0vS2NvbmZpZy03MDctXFx0Ym9vbFxcbi0tXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jPTc0OT1zdGF0aWMgdm9pZCBfX2luaXQgcG1kX2xlYWZfc29mdF9kaXJ0eV90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxcbi0tXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTc1My1cXHRpZiAoIXBndGFibGVfc3VwcG9ydHNfc29mdF9kaXJ0eSgpIHx8XFxubW0vZGVidWdfdm1fcGd0YWJsZS5jOjc1NDpcXHQgICAgIUlTX0VOQUJMRUQoQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGKSlcXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtNzU1LVxcdFxcdHJldHVybjtcXG4tLVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYz04MDU9c3RhdGljIHZvaWQgX19pbml0IHB0ZV9zd2FwX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpXFxuLS1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtODIxLVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYzo4MjI6I2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRlxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy04MjMtc3RhdGljIHZvaWQgX19pbml0IHBtZF9zb2Z0bGVhZl90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxcbi0tXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTgzOS19XFxubW0vZGVidWdfdm1fcGd0YWJsZS5jOjg0MDojZWxzZSAgLyogIUNPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiAqL1xcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy04NDEtc3RhdGljIHZvaWQgX19pbml0IHBtZF9zb2Z0bGVhZl90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKSB7IH1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6ODQyOiNlbmRpZiAvKiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYgKi9cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtODQzLVxcbi0tXFxubW0vaG1tLmM9MjM1PXN0YXRpYyBpbnQgaG1tX3ZtYV9oYW5kbGVfcHRlKHN0cnVjdCBtbV93YWxrICp3YWxrLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9obW0uYy0zMzMtXFxubW0vaG1tLmM6MzM0OiNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUZcXG5tbS9obW0uYy0zMzUtc3RhdGljIGludCBobW1fdm1hX2hhbmRsZV9hYnNlbnRfcG1kKHN0cnVjdCBtbV93YWxrICp3YWxrLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbi0tXFxubW0vaG1tLmM9MzgyPXN0YXRpYyBpbnQgaG1tX3ZtYV9oYW5kbGVfYWJzZW50X3BtZChzdHJ1Y3QgbW1fd2FsayAqd2FsaywgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4tLVxcbm1tL2htbS5jLTM5My19XFxubW0vaG1tLmM6Mzk0OiNlbmRpZiAgLyogQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGICovXFxubW0vaG1tLmMtMzk1LVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz00ODY4PWxhdGVfaW5pdGNhbGwoc3BsaXRfaHVnZV9wYWdlc19kZWJ1Z2ZzKTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDg3MC1cXG5tbS9odWdlX21lbW9yeS5jOjQ4NzE6I2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRlxcbm1tL2h1Z2VfbWVtb3J5LmMtNDg3Mi1pbnQgc2V0X3BtZF9taWdyYXRpb25fZW50cnkoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LFxcbi0tXFxubW0vbWlncmF0ZS5jPTM0Nj1zdGF0aWMgYm9vbCByZW1vdmVfbWlncmF0aW9uX3B0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vbWlncmF0ZS5jLTM2NC1cXG5tbS9taWdyYXRlLmM6MzY1OiNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUZcXG5tbS9taWdyYXRlLmMtMzY2LVxcdFxcdC8qIFBNRC1tYXBwZWQgVEhQIG1pZ3JhdGlvbiBlbnRyeSAqL1xcbi0tXFxubW0vbWlncmF0ZS5jPTUxNj12b2lkIG1pZ3JhdGlvbl9lbnRyeV93YWl0X2h1Z2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApXFxuLS1cXG5tbS9taWdyYXRlLmMtNTQ3LVxcbm1tL21pZ3JhdGUuYzo1NDg6I2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRlxcbm1tL21pZ3JhdGUuYy01NDktdm9pZCBwbWRfbWlncmF0aW9uX2VudHJ5X3dhaXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQpXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jPTc3OT1FWFBPUlRfU1lNQk9MKG1pZ3JhdGVfdm1hX3NldHVwKTtcXG5tbS9taWdyYXRlX2RldmljZS5jLTc4MC1cXG5tbS9taWdyYXRlX2RldmljZS5jOjc4MTojaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGXFxubW0vbWlncmF0ZV9kZXZpY2UuYy03ODItLyoqXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jPTkxMT1zdGF0aWMgaW50IG1pZ3JhdGVfdm1hX3NwbGl0X3VubWFwcGVkX2ZvbGlvKHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSxcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtOTM1LX1cXG5tbS9taWdyYXRlX2RldmljZS5jOjkzNjojZWxzZSAvKiAhQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGICovXFxubW0vbWlncmF0ZV9kZXZpY2UuYy05Mzctc3RhdGljIGludCBtaWdyYXRlX3ZtYV9pbnNlcnRfaHVnZV9wbWRfcGFnZShzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUsXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jPTk1ND1zdGF0aWMgdW5zaWduZWQgbG9uZyBtaWdyYXRlX3ZtYV9ucl9wYWdlcyh1bnNpZ25lZCBsb25nICpzcmMpXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTk1Ni1cXHR1bnNpZ25lZCBsb25nIG5yID0gMTtcXG5tbS9taWdyYXRlX2RldmljZS5jOjk1NzojaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGXFxubW0vbWlncmF0ZV9kZXZpY2UuYy05NTgtXFx0aWYgKCpzcmMgXFx1MDAyNiBNSUdSQVRFX1BGTl9DT01QT1VORClcXG4tLVxcbm1tL3JtYXAuYz0yNDEwPXN0YXRpYyBib29sIHRyeV90b19taWdyYXRlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL3JtYXAuYy0yNDc0LVxcdFxcdFxcdH1cXG5tbS9ybWFwLmM6MjQ3NTojaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGXFxubW0vcm1hcC5jLTI0NzYtXFx0XFx0XFx0cG1kdmFsID0gcG1kcF9nZXQocHZtdy5wbWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQxMzo1NzozMi4zOTk2OTU4NzRaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjY2OTI5NDI5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBhIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCBzZWVtcyBpbnRlcmVzdGluZyBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZS4gSXQgbG9va3MgbGlrZSBgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGYCBpcyBhdXRvbWF0aWNhbGx5IGVuYWJsZWQgYnkgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBvbiBhIGJ1bmNoIG9mIGFyY2hpdGVjdHVyZXMgSSdtIGZhbWlsaWFyIHdpdGgg4oCTIHg4Nl82NCwgYXJtNjQsIHJpc2N2LCBzMzkwLCBwb3dlcnBjLCBhbmQgbG9vbmdhcmNoLiBHb29kLCB0aGF0IHNpbXBsaWZpZXMgdGhpbmdzOyBJIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgZXhwbGljaXRseSBsaXN0aW5nIHRoYXQgY29uZmlndXJhdGlvbi5cblxuVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBjZW50ZXIgYXJvdW5kIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGBVU0VSRkFVTFRGRGAgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuICBNeSBhdHRlbnRpb24gaXMgZHJhd24gdG8gdGhlIGBtb3ZlX3BhZ2VzX2h1Z2VfcG1kYCBmdW5jdGlvbi4gSXQgbG9va3MgbGlrZSBpdCBpcyBjcnVjaWFsIGZvciBlbmFibGluZyB0aGUgVUZGRElPX01PVkUgaW9jdGwgcGF0aC5cblxuTGV0J3MgY29uZmlybSByZWFjaGFiaWxpdHkuIFllcywgYG1vdmVfcGFnZXNgICppcyogaW5kZWVkIHJlYWNoYWJsZSB0aHJvdWdoIHRoZSBgaW9jdGwodWZmZCwgVUZGRElPX01PVkUsIC4uLilgIGNhbGwuIFRoaXMgY29uZmlybXMgaXQuIENydWNpYWxseSwgaXQgcmVsaWVzIG9uIGJvdGggYFVTRVJGQVVMVEZEYCBhbmQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBiZWluZyBlbmFibGVkLlxuXG5TbywgbGV0J3Mgc3VtbWFyaXplIG15IGZpbmRpbmdzIG5lYXRseTpcblxuKiAgICoqV29ydGhGdXp6aW5nOiB0cnVlKiogLSBUaGlzIGxvb2tzIHByb21pc2luZy5cbiogICAqKkZvY3VzU3ltYm9sczogXFxbXCJtb3ZlXFxfcGFnZXNcXF9odWdlXFxfcG1kXCJdKiogLSBUaGlzIGlzIHRoZSBwcmltYXJ5IGZ1bmN0aW9uIHRvIHRhcmdldC5cbiogICAqKkVuYWJsZUNvbmZpZ3M6IFxcW1wiVVNFUkZBVUxURkRcIiwgXCJUUkFOU1BBUkVOVFxcX0hVR0VQQUdFXCJdKiogLSBUaGVzZSBhcmUgdGhlIGtleSBjb25maWd1cmF0aW9ucyB0aGF0IG5lZWQgdG8gYmUgZW5hYmxlZC5cbiogICAqKlJlYXNvbmluZzogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYG1vdmVfcGFnZXNfaHVnZV9wbWRgIHdoZXJlIGBwbWRfbWlncmF0aW9uX2VudHJ5X3dhaXRgIHdhcyBpbmNvcnJlY3RseSBjYWxsZWQgd2l0aCBhIHBvaW50ZXIgdG8gYSBsb2NhbCB2YXJpYWJsZSBpbnN0ZWFkIG9mIHRoZSBhY3R1YWwgUE1EIHBvaW50ZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgdXNlcmZhdWx0ZmQgVUZGRElPX01PVkUgaW1wbGVtZW50YXRpb24gZm9yIHRyYW5zcGFyZW50IGh1Z2VwYWdlcy5cIioqIC0gVGhpcyBleHBsYWlucyB0aGUgZnVuY3Rpb25hbCBjb250ZXh0IGFuZCB0aGUgbmF0dXJlIG9mIHRoZSBidWcgZml4LlxuXG5Ob3csIGEgcXVpY2sgdGhvdWdodDogSXMgdGhlcmUgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jeSBJIG1pZ2h0IGJlIG1pc3Npbmc/IEkgcmVjYWxsIHRoYXQgYENPTkZJR19NSUdSQVRJT05gIGlzIG5lZWRlZCBmb3IgYHBtZF9taWdyYXRpb25fZW50cnlfd2FpdGAgdG8gYWN0dWFsbHkgKmRvKiBzb21ldGhpbmcuIEhvd2V2ZXIsIGl0J3MgcHJldHR5IHViaXF1aXRvdXMgb3Igc2VsZWN0ZWQgYnkgb3RoZXIgc2V0dGluZ3MsIHNvIEkgc2hvdWxkIGRvdWJsZS1jaGVjayBgbW0vS2NvbmZpZ2AganVzdCB0byBiZSBjb21wbGV0ZWx5IHRob3JvdWdoLiBJdCdzIGEgZ29vZCBwcmFjdGljZSB0byB2ZXJpZnkgdGhlc2UgYXNzdW1wdGlvbnMsIGV2ZW4gd2hlbiB0aGV5IHNlZW0gbGlrZWx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjgxOCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQxMzo1NzozOS4wNjg5OTI4ODlaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNzc3MDIxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUlHUkFUSU9OXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz02ODU9Y29uZmlnIE5VTUFfTUlHUkFUSU9OXFxuLS1cXG5tbS9LY29uZmlnLTY5NS1cXG5tbS9LY29uZmlnOjY5Njpjb25maWcgTUlHUkFUSU9OXFxubW0vS2NvbmZpZy02OTctXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQxMzo1NzozOS4yMDY3Njk5MzlaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA4MDk2NTI2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJvbGUgb2YgTUlHUkFUSU9OIGluIE1lbW9yeSBNYW5hZ2VtZW50KipcblxuT2theSwgc28gSSdtIHRha2luZyBhIGxvb2sgYXQgaG93IHRoaXMgYE1JR1JBVElPTmAgZmxhZyBmYWN0b3JzIGludG8gdGhlIHN5c3RlbS4gSXQncyBvZnRlbiBpbmZsdWVuY2VkIGJ5IGNvbXBvbmVudHMgbGlrZSBgTlVNQWAsIGBDT01QQUNUSU9OYCwgYE1FTU9SWV9IT1RQTFVHYCwgYW5kIGBDTUFgLiBKdXN0IHRvIGJlIHN1cmUgSSd2ZSBnb3QgYSBjb21wbGV0ZSBwaWN0dXJlLCBJJ20gZ29pbmcgdG8gYWRkIGBNSUdSQVRJT05gIHRvIHRoYXQgbGlzdCBhcyBhIHBvdGVudGlhbCB0cmlnZ2VyLiBHb29kIHByYWN0aWNlIHRvIGJlIHRob3JvdWdoLlxuXG5SaWdodCwgbm93LCBJIG5lZWQgdG8gcGlucG9pbnQgd2hlcmUgdGhpcyBgTUlHUkFUSU9OYCBsb2dpYyBpcyBhY3R1YWxseSBpbXBsZW1lbnRlZC4gTG9va3MgbGlrZSBgbW92ZV9wYWdlc19odWdlX3BtZGAgaXMgdGhlIGtleSBmdW5jdGlvbiBiZWluZyBtb2RpZmllZCBpbiB0aGlzIGNvbnRleHQuIEEgcXVpY2sgc2VhcmNoIGNvbmZpcm1zIHRoYXQgaXQncyB0aGUgKm9ubHkqIGZ1bmN0aW9uIHRoYXQncyBiZWVuIHRvdWNoZWQuXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byBgbW92ZV9wYWdlc19odWdlX3BtZGAgaXRzZWxmLiBJJ2xsIHB1bGwgaXQgdXAgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgIGFuZCBzZWUgd2hhdCBpdCdzIHJlYWxseSBkb2luZy4gVGltZSB0byB1bmRlcnN0YW5kIHRoZSBhY3R1YWwgbWVjaGFuaWNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzgxMiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQxMzo1Nzo0My4yODc3Mzg0NjlaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUwNjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2h1Z2VfbWVtb3J5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjc2MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjc2MDpcXHRcXG4yNzYxOlxcdFxcdHNyY19wbWR2YWwgPSAqc3JjX3BtZDtcXG4yNzYyOlxcdFxcdHNyY19wdGwgPSBwbWRfbG9ja3B0cihtbSwgc3JjX3BtZCk7XFxuMjc2MzpcXHRcXG4yNzY0OlxcdFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoc3JjX3B0bCk7XFxuMjc2NTpcXHRcXHR2bWFfYXNzZXJ0X2xvY2tlZChzcmNfdm1hKTtcXG4yNzY2OlxcdFxcdHZtYV9hc3NlcnRfbG9ja2VkKGRzdF92bWEpO1xcbjI3Njc6XFx0XFxuMjc2ODpcXHRcXHQvKiBTYW5pdHkgY2hlY2tzIGJlZm9yZSB0aGUgb3BlcmF0aW9uICovXFxuMjc2OTpcXHRcXHRpZiAoV0FSTl9PTl9PTkNFKCFwbWRfbm9uZShkc3RfcG1kdmFsKSkgfHwgV0FSTl9PTl9PTkNFKHNyY19hZGRyIFxcdTAwMjYgfkhQQUdFX1BNRF9NQVNLKSB8fFxcbjI3NzA6XFx0XFx0ICAgIFdBUk5fT05fT05DRShkc3RfYWRkciBcXHUwMDI2IH5IUEFHRV9QTURfTUFTSykpIHtcXG4yNzcxOlxcdFxcdFxcdHNwaW5fdW5sb2NrKHNyY19wdGwpO1xcbjI3NzI6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMjc3MzpcXHRcXHR9XFxuMjc3NDpcXHRcXG4yNzc1OlxcdFxcdGlmICghcG1kX3RyYW5zX2h1Z2Uoc3JjX3BtZHZhbCkpIHtcXG4yNzc2OlxcdFxcdFxcdHNwaW5fdW5sb2NrKHNyY19wdGwpO1xcbjI3Nzc6XFx0XFx0XFx0aWYgKHBtZF9pc19taWdyYXRpb25fZW50cnkoc3JjX3BtZHZhbCkpIHtcXG4yNzc4OlxcdFxcdFxcdFxcdHBtZF9taWdyYXRpb25fZW50cnlfd2FpdChtbSwgc3JjX3BtZCk7XFxuMjc3OTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVBR0FJTjtcXG4yNzgwOlxcdFxcdFxcdH1cXG4yNzgxOlxcdFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbjI3ODI6XFx0XFx0fVxcbjI3ODM6XFx0XFxuMjc4NDpcXHRcXHRzcmNfcGFnZSA9IHBtZF9wYWdlKHNyY19wbWR2YWwpO1xcbjI3ODU6XFx0XFxuMjc4NjpcXHRcXHRpZiAoIWlzX2h1Z2VfemVyb19wbWQoc3JjX3BtZHZhbCkpIHtcXG4yNzg3OlxcdFxcdFxcdGlmICh1bmxpa2VseSghUGFnZUFub25FeGNsdXNpdmUoc3JjX3BhZ2UpKSkge1xcbjI3ODg6XFx0XFx0XFx0XFx0c3Bpbl91bmxvY2soc3JjX3B0bCk7XFxuMjc4OTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVCVVNZO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQxMzo1Nzo0My4yODc5OTMwNDlaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM0MDcwMzc4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHVuZGVyc3RhbmRpbmcsIGZvcm1hdHRlZCBhcyByZXF1ZXN0ZWQ6XG5cbioqQnVnIEZpeCBhbmQgUmVtZWRpYXRpb24gVGhvdWdodHMqKlxuXG5BbHJpZ2h0LCBsb29raW5nIGF0IHRoaXMgY29kZSBzbmlwcGV0LCBJIGltbWVkaWF0ZWx5IHNwb3QgdGhlIHByb2JsZW0uIFRoZSBjaGFuZ2UgaGVyZSBpcyBwcmVjaXNlbHkgdGhpczpcblxuYGBgY1xuLVx0XHRcdHBtZF9taWdyYXRpb25fZW50cnlfd2FpdChtbSwgXHUwMDI2c3JjX3BtZHZhbCk7XG4rXHRcdFx0cG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0KG1tLCBzcmNfcG1kKTtcbmBgYFxuXG5UaGF0J3MgYSB0ZXh0Ym9vayBwb2ludGVyLXRvLWxvY2FsLXZhcmlhYmxlIGlzc3VlLiBXZSB3ZXJlIHBhc3NpbmcgdGhlICphZGRyZXNzKiBvZiBhIGxvY2FsIHZhcmlhYmxlLCBgXHUwMDI2c3JjX3BtZHZhbGAsIHdoaWNoIGxpa2VseSB3ZW50IG91dCBvZiBzY29wZSwgbGVhdmluZyBgcG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0YCBvcGVyYXRpbmcgb24gZ2FyYmFnZSBkYXRhIG9yIGEgbWVtb3J5IGxvY2F0aW9uIHRoYXQgY291bGQgYmUgb3ZlcndyaXR0ZW4gYXQgYW55IHRpbWUuIFRoZSBmaXggY29ycmVjdGx5IHBhc3NlcyB0aGUgcG9pbnRlciBgc3JjX3BtZGAgaXRzZWxmLCB3aGljaCwgSSBhc3N1bWUsIGlzIHByb3Blcmx5IG1hbmFnZWQuIFRoaXMgaXMgYSBzdHJhaWdodGZvcndhcmQsIGNyaXRpY2FsIGJ1ZyBmaXguIE5vIHJlYWwgc3VycHJpc2VzIGhlcmUsIGJ1dCBnb29kIHRvIGNhdGNoIGl0LiBJJ20gZ2xhZCB0aGlzIHdhcyBpZGVudGlmaWVkIGFuZCBjb3JyZWN0ZWQuXG5cbkdpdmVuIHRoYXQgY2xhcml0eSwgSSBhbSBub3cgZ29pbmcgdG8gcHJvY2VlZCBhbmQgZXhlY3V0ZSBgc2V0LXJlc3VsdHNgLiBEb25lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODY4NiwiT3V0cHV0VG9rZW5zIjoxMjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDEzOjU3OjQ3LjYyODY5OTIwMVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5MTM1NjI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0VSRkFVTFRGRFwiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIk1JR1JBVElPTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1vdmVfcGFnZXNfaHVnZV9wbWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgbW92ZV9wYWdlc19odWdlX3BtZGAgd2hlcmUgYHBtZF9taWdyYXRpb25fZW50cnlfd2FpdGAgd2FzIGluY29ycmVjdGx5IGNhbGxlZCB3aXRoIGEgcG9pbnRlciB0byBhIGxvY2FsIHZhcmlhYmxlIGluc3RlYWQgb2YgdGhlIGFjdHVhbCBQTUQgcG9pbnRlci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSB1c2VyZmF1bHRmZCBVRkZESU9fTU9WRSBpbXBsZW1lbnRhdGlvbiBmb3IgdHJhbnNwYXJlbnQgaHVnZXBhZ2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTRVJGQVVMVEZEXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiTUlHUkFUSU9OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibW92ZV9wYWdlc19odWdlX3BtZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBtb3ZlX3BhZ2VzX2h1Z2VfcG1kYCB3aGVyZSBgcG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0YCB3YXMgaW5jb3JyZWN0bHkgY2FsbGVkIHdpdGggYSBwb2ludGVyIHRvIGEgbG9jYWwgdmFyaWFibGUgaW5zdGVhZCBvZiB0aGUgYWN0dWFsIFBNRCBwb2ludGVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHVzZXJmYXVsdGZkIFVGRkRJT19NT1ZFIGltcGxlbWVudGF0aW9uIGZvciB0cmFuc3BhcmVudCBodWdlcGFnZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowh42k7[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-05 13:24:17 +0000 UTC FinishedAt: 2026-07-05 13:57:49 +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": "e031e55776cf9193b4720a253e92539ca536d224", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USERFAULTFD", "TRANSPARENT_HUGEPAGE", "MIGRATION" ], "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": "e031e55776cf9193b4720a253e92539ca536d224", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USERFAULTFD", "TRANSPARENT_HUGEPAGE", "MIGRATION" ], "series_id": "aaeca1ea-6692-4bf8-a1b5-4509a0ce2c59" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "move_pages_huge_pmd" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDEzOjU2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTRVJGQVVMVEZEJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O01JR1JBVElPTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21vdmVfcGFnZXNfaHVnZV9wbWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYG1vdmVfcGFnZXNfaHVnZV9wbWRgIHdoZXJlIGBwbWRfbWlncmF0aW9uX2VudHJ5X3dhaXRgIHdhcyBpbmNvcnJlY3RseSBjYWxsZWQgd2l0aCBhIHBvaW50ZXIgdG8gYSBsb2NhbCB2YXJpYWJsZSBpbnN0ZWFkIG9mIHRoZSBhY3R1YWwgUE1EIHBvaW50ZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgdXNlcmZhdWx0ZmQgVUZGRElPX01PVkUgaW1wbGVtZW50YXRpb24gZm9yIHRyYW5zcGFyZW50IGh1Z2VwYWdlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAxMzo1NjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDNlY2ViOTIyZTMzNDEyZDkyODg3YmM2Y2M4ODBlZTJlZjE5ZjhkZTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEp1bCA1IDEzOjU2OjMyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jXG5pbmRleCBiZGQ4NjM1OTIyZjk2ZC4uYzA4OTJjYzUzM2E5ZmMgMTAwNjQ0XG4tLS0gYS9tbS9odWdlX21lbW9yeS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdlX21lbW9yeS5jXG5AQCAtMjc3NSw3ICYjNDM7Mjc3NSw3IEBAIGludCBtb3ZlX3BhZ2VzX2h1Z2VfcG1kKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqZHN0X3BtZCwgcG1kX3QgKnNyY19wbWQsIHBtXG4gXHRpZiAoIXBtZF90cmFuc19odWdlKHNyY19wbWR2YWwpKSB7XG4gXHRcdHNwaW5fdW5sb2NrKHNyY19wdGwpO1xuIFx0XHRpZiAocG1kX2lzX21pZ3JhdGlvbl9lbnRyeShzcmNfcG1kdmFsKSkge1xuLVx0XHRcdHBtZF9taWdyYXRpb25fZW50cnlfd2FpdChtbSwgXHUwMDI2c3JjX3BtZHZhbCk7XG4mIzQzO1x0XHRcdHBtZF9taWdyYXRpb25fZW50cnlfd2FpdChtbSwgc3JjX3BtZCk7XG4gXHRcdFx0cmV0dXJuIC1FQUdBSU47XG4gXHRcdH1cbiBcdFx0cmV0dXJuIC1FTk9FTlQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMTM6NTY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VVNFUkZBVUxURkQmIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAgICYjMzQ7TUlHUkFUSU9OJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bW92ZV9wYWdlc19odWdlX3BtZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgbW92ZV9wYWdlc19odWdlX3BtZGAgd2hlcmUgYHBtZF9taWdyYXRpb25fZW50cnlfd2FpdGAgd2FzIGluY29ycmVjdGx5IGNhbGxlZCB3aXRoIGEgcG9pbnRlciB0byBhIGxvY2FsIHZhcmlhYmxlIGluc3RlYWQgb2YgdGhlIGFjdHVhbCBQTUQgcG9pbnRlci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSB1c2VyZmF1bHRmZCBVRkZESU9fTU9WRSBpbXBsZW1lbnRhdGlvbiBmb3IgdHJhbnNwYXJlbnQgaHVnZXBhZ2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzZWNlYjkyMmUzMzQxMmQ5Mjg4N2JjNmNjODgwZWUyZWYxOWY4ZGU5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBKdWwgNSAxMzo1NjozMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jCmluZGV4IGJkZDg2MzU5MjJmOTZkLi5jMDg5MmNjNTMzYTlmYyAxMDA2NDQKLS0tIGEvbW0vaHVnZV9tZW1vcnkuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdlX21lbW9yeS5jCkBAIC0yNzc1LDcgJiM0MzsyNzc1LDcgQEAgaW50IG1vdmVfcGFnZXNfaHVnZV9wbWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpkc3RfcG1kLCBwbWRfdCAqc3JjX3BtZCwgcG0KIAlpZiAoIXBtZF90cmFuc19odWdlKHNyY19wbWR2YWwpKSB7CiAJCXNwaW5fdW5sb2NrKHNyY19wdGwpOwogCQlpZiAocG1kX2lzX21pZ3JhdGlvbl9lbnRyeShzcmNfcG1kdmFsKSkgewotCQkJcG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0KG1tLCAmYW1wO3NyY19wbWR2YWwpOwomIzQzOwkJCXBtZF9taWdyYXRpb25fZW50cnlfd2FpdChtbSwgc3JjX3BtZCk7CiAJCQlyZXR1cm4gLUVBR0FJTjsKIAkJfQogCQlyZXR1cm4gLUVOT0VOVDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMTM6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg2NwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZToKCioqUGF0Y2ggQW5hbHlzaXM6IEEgU3VidGxlIGJ1dCBQb3RlbnRpYWxseSBTaWduaWZpY2FudCBDaGFuZ2UqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCYjMzk7cyB0d2Vha2luZyBgbW0vaHVnZV9tZW1vcnkuY2AuIFNwZWNpZmljYWxseSwgdGhleSYjMzk7cmUgbW9kaWZ5aW5nIHRoZSBjYWxsIHRvIGBwbWRfbWlncmF0aW9uX2VudHJ5X3dhaXRgIHdpdGhpbiB0aGUgYG1vdmVfcGFnZXNfaHVnZV9wbWRgIGZ1bmN0aW9uLiBJdCBzZWVtcyB0aGV5JiMzOTt2ZSBzd2l0Y2hlZCBmcm9tIHBhc3NpbmcgdGhlIGFkZHJlc3Mgb2YgYHNyY19wbWR2YWxgIOKAkyB0aGF0IGlzLCBgJmFtcDtzcmNfcG1kdmFsYCDigJMgdG8gcGFzc2luZyB0aGUgYHNyY19wbWRgIHZhcmlhYmxlIGl0c2VsZiwgd2hpY2ggaXMgdmVyeSBsaWtlbHkgYSBgcG1kX3RgIHR5cGUuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgZGl2ZSBpbnRvIGBtb3ZlX3BhZ2VzX2h1Z2VfcG1kYCBhbmQgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLiBXaHkgYXJlIHRoZXkgZGlyZWN0bHkgcGFzc2luZyB0aGUgYHBtZF90YCBub3c/IElzIHRoaXMgYSBwb3RlbnRpYWwgb3B0aW1pemF0aW9uPyBPciBwZXJoYXBzIGEgZml4IGZvciBhIHN1YnRsZSByYWNlIGNvbmRpdGlvbiBvciBhbGlnbm1lbnQgaXNzdWU/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYHBtZF9taWdyYXRpb25fZW50cnlfd2FpdGAgZXhwZWN0cywgYW5kIGhvdyBpdCYjMzk7cyBiZWluZyB1c2VkIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLgoKVGhlIG9sZCB3YXkgdXNpbmcgYSBwb2ludGVyIG1pZ2h0IGluZGljYXRlIHRoYXQgYHBtZF9taWdyYXRpb25fZW50cnlfd2FpdGAgaW50ZW5kZWQgdG8gbW9kaWZ5IHRoZSB2YWx1ZS4gUGFzc2luZyB0aGUgYHBtZF90YCBkaXJlY3RseSBvZnRlbiBpbXBsaWVzIHJlYWQtb25seSBhY2Nlc3MsIG9yIHBlcmhhcHMgdGhlIGZ1bmN0aW9uIG5vdyBoYW5kbGVzIHRoZSBhZGRyZXNzIGludGVybmFsbHkuIElzIHRoZXJlIGEgY2hhbmNlIHRoYXQgYSBwb3RlbnRpYWwgd3JpdGUgaW4gYSBwYXJhbGxlbCB0aHJlYWQsIGJldHdlZW4gcmVhZGluZyB0aGUgdmFsdWUgYW5kIHdhaXRpbmcgb24gaXQgY291bGQgaGF2ZSBjcmVhdGVkIGEgZmxhdz8KCkkmIzM5O20ga2VlbiB0byB0cmFjZSBob3cgYHNyY19wbWRgIGlzIGJlaW5nIGluaXRpYWxpemVkIGFuZCB1c2VkIGJlZm9yZSB0aGUgZnVuY3Rpb24gY2FsbCwgYW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nICppbnNpZGUqIGBwbWRfbWlncmF0aW9uX2VudHJ5X3dhaXRgIHRvIGRldGVybWluZSB0aGUgZXhhY3QgaW1wYWN0IG9mIHRoaXMgYWRqdXN0bWVudC4gQW55IGNoYW5nZSBpbiBsb2NraW5nIG9yIG1lbW9yeSBhY2Nlc3MgcGF0dGVybnMgaGVyZSBjb3VsZCBiZSBwcmV0dHkgaW1wYWN0ZnVsLiBUaGlzIG5lZWRzIGEgdGhvcm91Z2ggcmV2aWV3LiBJIG5lZWQgdG8gbG9vayBhdCBib3RoIHRoZSBjYWxsZXIgYW5kIHRoZSBjYWxsZWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMTM6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW92ZV9wYWdlc19odWdlX3BtZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYz0yNzAyPWludCBjaGFuZ2VfaHVnZV9wdWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0yNzQ4LSAqL1xubW0vaHVnZV9tZW1vcnkuYzoyNzQ5OmludCBtb3ZlX3BhZ2VzX2h1Z2VfcG1kKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqZHN0X3BtZCwgcG1kX3QgKnNyY19wbWQsIHBtZF90IGRzdF9wbWR2YWwsXG5tbS9odWdlX21lbW9yeS5jLTI3NTAtXHRcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnNyY192bWEsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMTM6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU2MAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OgoKKipEaXZpbmcgaW50byBgbW92ZV9wYWdlc19odWdlX3BtZGAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGl0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb24gYG1vdmVfcGFnZXNfaHVnZV9wbWRgLiBCZWZvcmUgSSBjYW4gbWFrZSBhbnkgbWVhbmluZ2Z1bCBhc3Nlc3NtZW50LCBJIG5lZWQgdG8gcGxhY2UgdGhpcyBmdW5jdGlvbiB3aXRoaW4gaXRzIG92ZXJhbGwgY29udGV4dC4gSSBrbm93IHRoaXMgaXMgYSBjcml0aWNhbCBsb3ctbGV2ZWwgZnVuY3Rpb24gcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCBodWdlIHBhZ2VzIGFuZCBwb3RlbnRpYWxseSBQTURzIChQYWdlIE1pZGRsZSBEaXJlY3RvcmllcykuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IHRoZSB1c2UgY2FzZShzKSBpdCBhZGRyZXNzZXMgd2l0aGluIGEgc3lzdGVtLiBJIG5lZWQgdG8ga25vdyB3aHkgbW92aW5nIHBhZ2VzLCBhbmQgZXNwZWNpYWxseSBodWdlIHBhZ2VzLCB3b3VsZCBiZSBuZWNlc3NhcnkuIElzIGl0IGZvciBOVU1BIGJhbGFuY2luZz8gTWVtb3J5IGhvdHBsdWdnaW5nPyBEeW5hbWljIG1lbW9yeSBhbGxvY2F0aW9uL2RlYWxsb2NhdGlvbiBvcHRpbWl6YXRpb24/IERhdGEgbWlncmF0aW9uIGR1cmluZyBsaXZlIHN5c3RlbSB1cGRhdGVzPyBUaGUgc3BlY2lmaWMgZnVuY3Rpb24gb2YgdGhpcyBwaWVjZSBkZXBlbmRzIGhlYXZpbHkgb24gaXRzIGRlc2lnbiBmb3IgdGhlc2UgbGFyZ2VyIGdvYWxzLiBJIG11c3QgdW5kZXJzdGFuZCB0aGUgaW50ZW5kZWQgcHVycG9zZSB0byBwYXJzZSBob3cgdGhlIGNvZGUgYWNoaWV2ZXMgaXQgYW5kIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3IgY2xldmVyIG9wdGltaXphdGlvbnMgaXQgZW1wbG95cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAxMzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNzQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI3NDU6XHQgKiBKdXN0IG1vdmUgdGhlIHBhZ2UgZnJvbSBzcmNfcG1kIHRvIGRzdF9wbWQgaWYgcG9zc2libGUuXG4yNzQ2Olx0ICogUmV0dXJuIHplcm8gaWYgc3VjY2VlZGVkIGluIG1vdmluZyB0aGUgcGFnZSwgLUVBR0FJTiBpZiBpdCBuZWVkcyB0byBiZVxuMjc0NzpcdCAqIHJlcGVhdGVkIGJ5IHRoZSBjYWxsZXIsIG9yIG90aGVyIGVycm9ycyBpbiBjYXNlIG9mIGZhaWx1cmUuXG4yNzQ4Olx0ICovXG4yNzQ5Olx0aW50IG1vdmVfcGFnZXNfaHVnZV9wbWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpkc3RfcG1kLCBwbWRfdCAqc3JjX3BtZCwgcG1kX3QgZHN0X3BtZHZhbCxcbjI3NTA6XHRcdFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdF92bWEsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3JjX3ZtYSxcbjI3NTE6XHRcdFx0XHR1bnNpZ25lZCBsb25nIGRzdF9hZGRyLCB1bnNpZ25lZCBsb25nIHNyY19hZGRyKVxuMjc1MjpcdHtcbjI3NTM6XHRcdHBtZF90IF9kc3RfcG1kLCBzcmNfcG1kdmFsO1xuMjc1NDpcdFx0c3RydWN0IHBhZ2UgKnNyY19wYWdlO1xuMjc1NTpcdFx0c3RydWN0IGZvbGlvICpzcmNfZm9saW87XG4yNzU2Olx0XHRzcGlubG9ja190ICpzcmNfcHRsLCAqZHN0X3B0bDtcbjI3NTc6XHRcdHBndGFibGVfdCBzcmNfcGd0YWJsZTtcbjI3NTg6XHRcdHN0cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UgcmFuZ2U7XG4yNzU5Olx0XHRpbnQgZXJyID0gMDtcbjI3NjA6XHRcbjI3NjE6XHRcdHNyY19wbWR2YWwgPSAqc3JjX3BtZDtcbjI3NjI6XHRcdHNyY19wdGwgPSBwbWRfbG9ja3B0cihtbSwgc3JjX3BtZCk7XG4yNzYzOlx0XG4yNzY0Olx0XHRsb2NrZGVwX2Fzc2VydF9oZWxkKHNyY19wdGwpO1xuMjc2NTpcdFx0dm1hX2Fzc2VydF9sb2NrZWQoc3JjX3ZtYSk7XG4yNzY2Olx0XHR2bWFfYXNzZXJ0X2xvY2tlZChkc3Rfdm1hKTtcbjI3Njc6XHRcbjI3Njg6XHRcdC8qIFNhbml0eSBjaGVja3MgYmVmb3JlIHRoZSBvcGVyYXRpb24gKi9cbjI3Njk6XHRcdGlmIChXQVJOX09OX09OQ0UoIXBtZF9ub25lKGRzdF9wbWR2YWwpKSB8fCBXQVJOX09OX09OQ0Uoc3JjX2FkZHIgXHUwMDI2IH5IUEFHRV9QTURfTUFTSykgfHxcbjI3NzA6XHRcdCAgICBXQVJOX09OX09OQ0UoZHN0X2FkZHIgXHUwMDI2IH5IUEFHRV9QTURfTUFTSykpIHtcbjI3NzE6XHRcdFx0c3Bpbl91bmxvY2soc3JjX3B0bCk7XG4yNzcyOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuMjc3MzpcdFx0fVxuMjc3NDpcdFxuMjc3NTpcdFx0aWYgKCFwbWRfdHJhbnNfaHVnZShzcmNfcG1kdmFsKSkge1xuMjc3NjpcdFx0XHRzcGluX3VubG9jayhzcmNfcHRsKTtcbjI3Nzc6XHRcdFx0aWYgKHBtZF9pc19taWdyYXRpb25fZW50cnkoc3JjX3BtZHZhbCkpIHtcbjI3Nzg6XHRcdFx0XHRwbWRfbWlncmF0aW9uX2VudHJ5X3dhaXQobW0sIHNyY19wbWQpO1xuMjc3OTpcdFx0XHRcdHJldHVybiAtRUFHQUlOO1xuMjc4MDpcdFx0XHR9XG4yNzgxOlx0XHRcdHJldHVybiAtRU5PRU5UO1xuMjc4MjpcdFx0fVxuMjc4MzpcdFxuMjc4NDpcdFx0c3JjX3BhZ2UgPSBwbWRfcGFnZShzcmNfcG1kdmFsKTtcbjI3ODU6XHRcbjI3ODY6XHRcdGlmICghaXNfaHVnZV96ZXJvX3BtZChzcmNfcG1kdmFsKSkge1xuMjc4NzpcdFx0XHRpZiAodW5saWtlbHkoIVBhZ2VBbm9uRXhjbHVzaXZlKHNyY19wYWdlKSkpIHtcbjI3ODg6XHRcdFx0XHRzcGluX3VubG9jayhzcmNfcHRsKTtcbjI3ODk6XHRcdFx0XHRyZXR1cm4gLUVCVVNZO1xuMjc5MDpcdFx0XHR9XG4yNzkxOlx0XG4yNzkyOlx0XHRcdHNyY19mb2xpbyA9IHBhZ2VfZm9saW8oc3JjX3BhZ2UpO1xuMjc5MzpcdFx0XHRmb2xpb19nZXQoc3JjX2ZvbGlvKTtcbjI3OTQ6XHRcdH0gZWxzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDEzOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3MDIKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBNRCBNaWdyYXRpb24gQnVnIEZpeCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHBvaW50aW5nIG91dCBhIHByZXR0eSBzaWduaWZpY2FudCBidWcuIEl0IHNlZW1zIHRoYXQgdGhlIGBwbWRfbWlncmF0aW9uX2VudHJ5X3dhaXRgIGZ1bmN0aW9uIHdhcyBiZWluZyBjYWxsZWQgd2l0aCBhIGxvY2FsIHZhcmlhYmxlLCBgc3JjX3BtZHZhbGAsIGluc3RlYWQgb2YgdGhlIGludGVuZGVkIGBzcmNfcG1kYCBwb2ludGVyLiBUaGF0JiMzOTtzIGEgY2xhc3NpYyBwb2ludGVyIG1pc2hhcCwgYW5kIGEgZmFpcmx5IHNlcmlvdXMgb25lLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIGFsbCBzb3J0cyBvZiBtZW1vcnkgY29ycnVwdGlvbiBvciBpbmNvcnJlY3QgYmVoYXZpb3IuIFNpbmNlIHRoaXMgaXMgYSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9uLCB0aGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IG5lZWRzIGNhcmVmdWwgcmV2aWV3LiBSaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgYHBtZF9taWdyYXRpb25fZW50cnlfd2FpdGAgZnVuY3Rpb24gaXRzZWxmIGFuZCBzZWUgaG93IHRoaXMgaW5jb3JyZWN0IHBvaW50ZXIgd2FzIGJlaW5nIHVzZWQgYW5kIHdoYXQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgZml4IGFyZS4gVGhpcyBraW5kIG9mIG1pc3Rha2UgY2FuIGhhdmUgc3VidGxlIGJ1dCBkZXZhc3RhdGluZyBlZmZlY3RzLCBzbyBsZXQmIzM5O3MgbWFrZSBzdXJlIHdlIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIHJhbWlmaWNhdGlvbnMgb2YgdGhpcyBwYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAxMzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwbWRfbWlncmF0aW9uX2VudHJ5X3dhaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zd2Fwb3BzLmg9MzI4PWV4dGVybiB2b2lkIHJlbW92ZV9taWdyYXRpb25fcG1kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcbi0tXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0zMzAtXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaDozMzE6ZXh0ZXJuIHZvaWQgcG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kKTtcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTMzMi1cbi0tXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaD0zNDg9c3RhdGljIGlubGluZSB2b2lkIHJlbW92ZV9taWdyYXRpb25fcG1kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcbi0tXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0zNTMtXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaDozNTQ6c3RhdGljIGlubGluZSB2b2lkIHBtZF9taWdyYXRpb25fZW50cnlfd2FpdChzdHJ1Y3QgbW1fc3RydWN0ICptLCBwbWRfdCAqcCkgeyB9XG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0zNTUtXG4tLVxubW0vaG1tLmM9Mzk2PXN0YXRpYyBpbnQgaG1tX3ZtYV93YWxrX3BtZChwbWRfdCAqcG1kcCxcbi0tXG5tbS9obW0uYy00MTctXHRcdFx0aG1tX3ZtYV93YWxrLVx1MDAzZWxhc3QgPSBhZGRyO1xubW0vaG1tLmM6NDE4Olx0XHRcdHBtZF9taWdyYXRpb25fZW50cnlfd2FpdCh3YWxrLVx1MDAzZW1tLCBwbWRwKTtcbm1tL2htbS5jLTQxOS1cdFx0XHRyZXR1cm4gLUVCVVNZO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9Mjc0OT1pbnQgbW92ZV9wYWdlc19odWdlX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKmRzdF9wbWQsIHBtZF90ICpzcmNfcG1kLCBwbWRfdCBkc3RfcG1kdmFsLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMjc3Ny1cdFx0aWYgKHBtZF9pc19taWdyYXRpb25fZW50cnkoc3JjX3BtZHZhbCkpIHtcbm1tL2h1Z2VfbWVtb3J5LmM6Mjc3ODpcdFx0XHRwbWRfbWlncmF0aW9uX2VudHJ5X3dhaXQobW0sIHNyY19wbWQpO1xubW0vaHVnZV9tZW1vcnkuYy0yNzc5LVx0XHRcdHJldHVybiAtRUFHQUlOO1xuLS1cbm1tL21lbW9yeS5jPTY0MTA9c3RhdGljIHZtX2ZhdWx0X3QgX19oYW5kbGVfbW1fZmF1bHQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vbWVtb3J5LmMtNjQ4Ny1cdFx0aWYgKHBtZF9pc19taWdyYXRpb25fZW50cnkodm1mLm9yaWdfcG1kKSlcbm1tL21lbW9yeS5jOjY0ODg6XHRcdFx0cG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0KG1tLCB2bWYucG1kKTtcbm1tL21lbW9yeS5jLTY0ODktXHRcdHJldHVybiAwO1xuLS1cbm1tL21pZ3JhdGUuYz01MTY9dm9pZCBtaWdyYXRpb25fZW50cnlfd2FpdF9odWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKVxuLS1cbm1tL21pZ3JhdGUuYy01NDgtI2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRlxubW0vbWlncmF0ZS5jOjU0OTp2b2lkIHBtZF9taWdyYXRpb25fZW50cnlfd2FpdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZClcbm1tL21pZ3JhdGUuYy01NTAte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDEzOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2OTMKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgdGhlIGBtb3ZlX3BhZ2VzX2h1Z2VfcG1kYCBDYWxsIENoYWluKioKCkhtbSwgc28gYG1vdmVfcGFnZXNfaHVnZV9wbWRgIGlzIHRoZSBmdW5jdGlvbiBvZiBpbnRlcmVzdC4gSSBrbm93IGl0JiMzOTtzIGludm9sdmVkIGluIG1vdmluZyBodWdlIHBhZ2VzLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgb3RoZXIgcGFnZSBtaWdyYXRpb24gZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgYG1vdmVfcGFnZXNfcHRlYCBhbmQgYG1vdmVfcGFnZV90YWJsZXNgLiBSaWdodCwgdGhlIGNvcmUgcXVlc3Rpb24gaXMgKmhvdyogaXMgYG1vdmVfcGFnZXNfaHVnZV9wbWRgIGNhbGxlZD8gSXMgaXQgYSBkaXJlY3QgZW50cnkgcG9pbnQsIG9yIGRvZXMgaXQgZ2V0IGludm9rZWQgYnkgdGhvc2Ugb3RoZXIgcm91dGluZXM/IFRoZSBiZXN0IHdheSB0byB1bmRlcnN0YW5kIHRoaXMgaXMgdG8gY2hlY2sgdGhlICpjYWxsZXJzKiBvZiBgbW92ZV9wYWdlc19odWdlX3BtZGAuIEZpbmRpbmcgb3V0IHdoYXQgZnVuY3Rpb25zIGRpcmVjdGx5IGNhbGwgaXQgd2lsbCBpbGx1bWluYXRlIHRoZSBjb250cm9sIGZsb3cgYW5kIGxldCBtZSB1bmRlcnN0YW5kIGl0cyBwbGFjZSBpbiB0aGUgYnJvYWRlciBtaWdyYXRpb24gc3RyYXRlZ3kuIEdvdHRhIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIHJvbGUuIFRpbWUgdG8gZGlnIGluIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAxMzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttb3ZlX3BhZ2VzX2h1Z2VfcG1kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oPTE1NT12b2lkIGRvdWJsZV9wdF91bmxvY2soc3BpbmxvY2tfdCAqcHRsMSwgc3BpbmxvY2tfdCAqcHRsMik7XG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaDoxNTY6aW50IG1vdmVfcGFnZXNfaHVnZV9wbWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpkc3RfcG1kLCBwbWRfdCAqc3JjX3BtZCwgcG1kX3QgZHN0X3BtZHZhbCxcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oLTE1Ny1cdFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdF92bWEsXG4tLVxubW0vaHVnZV9tZW1vcnkuYz0yNzAyPWludCBjaGFuZ2VfaHVnZV9wdWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0yNzQ4LSAqL1xubW0vaHVnZV9tZW1vcnkuYzoyNzQ5OmludCBtb3ZlX3BhZ2VzX2h1Z2VfcG1kKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqZHN0X3BtZCwgcG1kX3QgKnNyY19wbWQsIHBtZF90IGRzdF9wbWR2YWwsXG5tbS9odWdlX21lbW9yeS5jLTI3NTAtXHRcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnNyY192bWEsXG4tLVxubW0vdXNlcmZhdWx0ZmQuYz0xOTM0PXN0YXRpYyBzc2l6ZV90IG1vdmVfcGFnZXMoc3RydWN0IHVzZXJmYXVsdGZkX2N0eCAqY3R4LCB1bnNpZ25lZCBsb25nIGRzdF9zdGFydCxcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTIwMTQtXHRcdCAqIGJlIHN0cmljdC4gSWYgZHN0X3BtZCBjaGFuZ2VzIGludG8gVFBIIGFmdGVyIHRoaXMgY2hlY2ssIHRoZVxubW0vdXNlcmZhdWx0ZmQuYzoyMDE1Olx0XHQgKiBtb3ZlX3BhZ2VzX2h1Z2VfcG1kKCkgd2lsbCBkZXRlY3QgdGhlIGNoYW5nZSBhbmQgcmV0cnlcbm1tL3VzZXJmYXVsdGZkLmMtMjAxNi1cdFx0ICogd2hpbGUgbW92ZV9wYWdlc19wdGUoKSB3aWxsIGRldGVjdCB0aGUgY2hhbmdlIGFuZCBmYWlsLlxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtMjA0NS1cbm1tL3VzZXJmYXVsdGZkLmM6MjA0NjpcdFx0XHRlcnIgPSBtb3ZlX3BhZ2VzX2h1Z2VfcG1kKG1tLCBkc3RfcG1kLCBzcmNfcG1kLFxubW0vdXNlcmZhdWx0ZmQuYy0yMDQ3LVx0XHRcdFx0XHRcdCAgZHN0X3BtZHZhbCwgZHN0X3ZtYSwgc3JjX3ZtYSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMTM6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTQ5NQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBDb3JlIE1lbW9yeSBNYW5hZ2VtZW50IEJ1ZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIEkgcmVjb2duaXplIHRoZSBhcmVhLiBUaGlzIGhhcyB0byBkbyB3aXRoIGhvdyBgdXNlcmZhdWx0ZmRgIGFuZCBgbW92ZV9wYWdlc2AgaW50ZXJhY3QsIHNwZWNpZmljYWxseSB3aXRoIHRoZSBgVUZGRElPX01PVkVgIG9wZXJhdGlvbiwgd2hpY2ggdXRpbGl6ZXMgYG1vdmVfcGFnZXNfaHVnZV9wbWRgLiBHb3QgaXQuIFRoaXMgaXMgZGVmaW5pdGVseSBhIGNyaXRpY2FsIHBhdGgsIGEgZnVuY3Rpb24gdGhhdCYjMzk7cyBkZWZpbml0ZWx5IHVzZWQgYW5kIHJlYWNoYWJsZS4KCk5vdywgdGhlIGNvcmUgb2YgdGhlIHByb2JsZW0uLi4gaXQgbG9va3MgbGlrZSB0aGV5JiMzOTtyZSBjaGFuZ2luZyBgcG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0KG1tLCAmYW1wO3NyY19wbWR2YWwpYCB0byBgcG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0KG1tLCBzcmNfcG1kKWAuIEFuZCAqdGhhdCogaXMgdGhlIGtleS4gVGhleSYjMzk7cmUgcGFzc2luZyB0aGUgKmFkZHJlc3MqIG9mIGEgbG9jYWwgdmFyaWFibGUsIGBzcmNfcG1kdmFsYCwgdG8gYSBmdW5jdGlvbiB0aGF0JiMzOTtzIHN1cHBvc2VkIHRvIHdhaXQgb24gYSBtaWdyYXRpb24gZW50cnkuIFdhaXRpbmcgb24gYSBzdGFjayBhZGRyZXNzPyBUaGF0JiMzOTtzIGp1c3QgYXNraW5nIGZvciB0cm91YmxlISBUaGF0JiMzOTtzIGFsbW9zdCBjZXJ0YWlubHkgdGhlIHJvb3QgY2F1c2Ugb2YgYW55IGNyYXNoIG9yIGhhbmcgdGhleSYjMzk7cmUgc2VlaW5nLiBJdCYjMzk7cyBpbmNvcnJlY3QuIEkgY2FuIHNlZSB3aHkuIFBhc3NpbmcgYHNyY19wbWRgLCB3aGljaCBpcyB0aGUgYWN0dWFsIHBhZ2UgbWFwIGRlc2NyaXB0b3IsIGlzIHRoZSBjb3JyZWN0IGZpeC4KCkxldCBtZSBqdXN0IHF1aWNrbHkgdmVyaWZ5IHRoYXQgYENPTkZJR19VU0VSRkFVTFRGRGAsIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBhbmQgYENPTkZJR19NSUdSQVRJT05gIGFyZSBhbGwgZW5hYmxlZC4gVGhhdCBtYWtlcyB0aGUgY29udGV4dCBjbGVhci4gVGhpcyBpcyBwcmVjaXNlbHkgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gc2VlIHRoaXMga2luZCBvZiBpc3N1ZSBhcmlzZSB3aXRoIHRob3NlIGNvbmZpZ3VyYXRpb25zIGluIHBsYWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAxMzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttb3ZlX3BhZ2VzX2h1Z2VfcG1kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jPTI3MDI9aW50IGNoYW5nZV9odWdlX3B1ZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTI3NDgtICovXG5tbS9odWdlX21lbW9yeS5jOjI3NDk6aW50IG1vdmVfcGFnZXNfaHVnZV9wbWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpkc3RfcG1kLCBwbWRfdCAqc3JjX3BtZCwgcG1kX3QgZHN0X3BtZHZhbCxcbm1tL2h1Z2VfbWVtb3J5LmMtMjc1MC1cdFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdF92bWEsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3JjX3ZtYSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMTM6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjE4NQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGlzIGFyZWE6CgoqKkNoZWNraW5nIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uIG9mIGBtb3ZlX3BhZ2VzX2h1Z2VfcG1kYCoqCgpBbHJpZ2h0LCBJJiMzOTttIHF1aWNrbHkgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYG1vdmVfcGFnZXNfaHVnZV9wbWRgIGlzIGRlZmluZWQgYW5kIGhvdyBpdCByZWxhdGVzIHRvIFRyYW5zcGFyZW50IEh1Z2VwYWdlcy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7SXMgdGhpcyBmdW5jdGlvbiBldmVuICphdmFpbGFibGUqIHVubGVzcyBUcmFuc3BhcmVudCBIdWdlcGFnZXMgYXJlIGVuYWJsZWQ/JiMzNDsgU28sIEkmIzM5O20gZ29pbmcgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZSBjb2RlLCBzcGVjaWZpY2FsbHkgYG1tL2h1Z2VfbWVtb3J5LmNgLiBHaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtLCB0aGUgZXhpc3RlbmNlIG9mIHRoYXQgZmlsZSBpcywgaW4gaXRzZWxmLCBhIHN0cm9uZyBpbmRpY2F0b3IuIEl0IG1ha2VzIHNlbnNlLCBhcyB0aGUgaHVnZSBwYWdlIGNvZGUgd291bGQgYmUgaW4gYSBzZXBhcmF0ZSBjb21waWxhdGlvbiB1bml0LiBCdXQsIEkgbmVlZCBjb25maXJtYXRpb24uIEkmIzM5O20gaW1wbGljaXRseSByZWFzb25pbmcgdGhhdCBpZiBgbW0vaHVnZV9tZW1vcnkuY2AgaXMgY29tcGlsZWQgYmFzZWQgb24gdGhlIGAjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBtYWNybywgdGhlbiBgbW92ZV9wYWdlc19odWdlX3BtZGAgd2lsbCBvbmx5IGJlIGFjY2Vzc2libGUgaWYgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgZW5hYmxlZC4gVGltZSB0byBjb25maXJtIGFuZCB0aGVuIEkgd2lsbCBrbm93IG1vcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDEzOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2h1Z2VfbWVtb3J5Lm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT0xMDA9b2JqLSQoQ09ORklHX0RFVklDRV9NSUdSQVRJT04pICYjNDM7PSBtaWdyYXRlX2RldmljZS5vXG5tbS9NYWtlZmlsZToxMDE6b2JqLSQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSAmIzQzOz0gaHVnZV9tZW1vcnkubyBraHVnZXBhZ2VkLm9cbm1tL01ha2VmaWxlLTEwMi1vYmotJChDT05GSUdfUEFHRV9DT1VOVEVSKSAmIzQzOz0gcGFnZV9jb3VudGVyLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMTM6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjYwNgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkRlcGVuZGVuY2llcyBhbmQgVXNhZ2Ugb2YgVHJhbnNwYXJlbnQgSHVnZXBhZ2VzIGFuZCBVc2VyZmF1bHRmZCoqCgpSaWdodCwgc28gdG8gbWFrZSB0aGlzIHdvcmssIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gY29uZmlybSBpcyB0aGF0IGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIGFic29sdXRlbHkgZXNzZW50aWFsLiBUaGF0JiMzOTtzIGEgZ2l2ZW4uIEFuZCBvZiBjb3Vyc2UsIHRvIGxldmVyYWdlIGBtb3ZlX3BhZ2VzYCB0byBhY3R1YWxseSAqcmVhY2gqIHRob3NlIGh1Z2VwYWdlcywgYENPTkZJR19VU0VSRkFVTFRGRGAgaXMgYWxzbyBhIGhhcmQgcmVxdWlyZW1lbnQuIEkgbmVlZCBib3RoIG9mIHRob3NlIGtlcm5lbCBmZWF0dXJlcy4KCk5vdywgSSYjMzk7bSBqdXN0IGN1cmlvdXMgYWJvdXQgc29tZXRoaW5nIC0gSSBzaG91bGQgZG91YmxlLWNoZWNrIGFuZCBtYWtlIHN1cmUgdGhhdCBgbW92ZV9wYWdlc19odWdlX3BtZGAgaXNuJiMzOTt0IGNhbGxlZCBmcm9tIG90aGVyIHBsYWNlcyBiZXNpZGVzIHdoZXJlIEkgZXhwZWN0IGl0LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZnVsbCBzY29wZSBvZiBob3cgdGhpcyBmdW5jdGlvbiBpcyB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAxMzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttb3ZlX3BhZ2VzX2h1Z2VfcG1kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oPTE1NT12b2lkIGRvdWJsZV9wdF91bmxvY2soc3BpbmxvY2tfdCAqcHRsMSwgc3BpbmxvY2tfdCAqcHRsMik7XG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaDoxNTY6aW50IG1vdmVfcGFnZXNfaHVnZV9wbWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpkc3RfcG1kLCBwbWRfdCAqc3JjX3BtZCwgcG1kX3QgZHN0X3BtZHZhbCxcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oLTE1Ny1cdFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdF92bWEsXG4tLVxubW0vaHVnZV9tZW1vcnkuYz0yNzAyPWludCBjaGFuZ2VfaHVnZV9wdWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0yNzQ4LSAqL1xubW0vaHVnZV9tZW1vcnkuYzoyNzQ5OmludCBtb3ZlX3BhZ2VzX2h1Z2VfcG1kKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqZHN0X3BtZCwgcG1kX3QgKnNyY19wbWQsIHBtZF90IGRzdF9wbWR2YWwsXG5tbS9odWdlX21lbW9yeS5jLTI3NTAtXHRcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnNyY192bWEsXG4tLVxubW0vdXNlcmZhdWx0ZmQuYz0xOTM0PXN0YXRpYyBzc2l6ZV90IG1vdmVfcGFnZXMoc3RydWN0IHVzZXJmYXVsdGZkX2N0eCAqY3R4LCB1bnNpZ25lZCBsb25nIGRzdF9zdGFydCxcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTIwMTQtXHRcdCAqIGJlIHN0cmljdC4gSWYgZHN0X3BtZCBjaGFuZ2VzIGludG8gVFBIIGFmdGVyIHRoaXMgY2hlY2ssIHRoZVxubW0vdXNlcmZhdWx0ZmQuYzoyMDE1Olx0XHQgKiBtb3ZlX3BhZ2VzX2h1Z2VfcG1kKCkgd2lsbCBkZXRlY3QgdGhlIGNoYW5nZSBhbmQgcmV0cnlcbm1tL3VzZXJmYXVsdGZkLmMtMjAxNi1cdFx0ICogd2hpbGUgbW92ZV9wYWdlc19wdGUoKSB3aWxsIGRldGVjdCB0aGUgY2hhbmdlIGFuZCBmYWlsLlxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtMjA0NS1cbm1tL3VzZXJmYXVsdGZkLmM6MjA0NjpcdFx0XHRlcnIgPSBtb3ZlX3BhZ2VzX2h1Z2VfcG1kKG1tLCBkc3RfcG1kLCBzcmNfcG1kLFxubW0vdXNlcmZhdWx0ZmQuYy0yMDQ3LVx0XHRcdFx0XHRcdCAgZHN0X3BtZHZhbCwgZHN0X3ZtYSwgc3JjX3ZtYSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMTM6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzM4OAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGRpc3RpbGxlZCB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpczoKCioqTmFycm93aW5nIHRoZSBTY29wZTogVUZGRCBhbmQgSHVnZSBQYWdlcyoqCgpPa2F5LCB0aGlzIGxvb2tzIGxpa2UgYSB0YXJnZXRlZCBpbnZlc3RpZ2F0aW9uLiBJJiMzOTttIHNlZWluZyB0aGlzIGlzIGFsbCBhYm91dCBgbW0vdXNlcmZhdWx0ZmQuY2AsIHNvIEkmIzM5O20gaW1tZWRpYXRlbHkgaG9taW5nIGluIG9uIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIFVzZXJmYXVsdGZkIChVRkZEKSBhbmQgbGlrZWx5IFRyYW5zcGFyZW50IEh1Z2VQYWdlcyAoVEhQKS4gTXkgYnJhaW4mIzM5O3MgYWxyZWFkeSBmbGFzaGluZyBvbiB0aG9zZSBrZXkgY29uZmlnIG9wdGlvbnM6IGBDT05GSUdfVVNFUkZBVUxURkRgIGFuZCBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoZXNlIHR3byBzeXN0ZW1zIGFyZSB3b3JraW5nIChvciBwb3RlbnRpYWxseSBmYWlsaW5nIHRvIHdvcmspIHRvZ2V0aGVyLiBNeSBpbnN0aW5jdCBpcyB0aGF0IHRoZSBgbW92ZV9wYWdlc19odWdlX3BtZGAgZnVuY3Rpb24gaXMgdGhlIHBsYWNlIHRvIHN0YXJ0LiBUaGF0IGxvb2tzIGxpa2UgdGhlIGNvcmUgd29yaywgbW92aW5nIHRoZSBsYXJnZSBwYWdlcy4KCkkmIzM5O2xsIHF1aWNrbHkgY29uZmlybSB0aGF0IGBtb3ZlX3BhZ2VzYCBpbiBgbW0vdXNlcmZhdWx0ZmQuY2AgaXMgc3RhdGljLiBBbHJpZ2h0LCBqdXN0IGFzIEkgc3VzcGVjdGVkIGl0IGlzLiBUaGF0IG5hcnJvd3MgZG93biB3aGVyZSBpdCBjYW4gYmUgY2FsbGVkIGZyb20uIEEgcXVpY2sgc2VhcmNoIHRocm91Z2ggdGhlIGNvZGUgcmV2ZWFscyBgdXNlcmZhdWx0ZmRfbW92ZWAgaXMgdGhlIGNhbGxlci4gSSYjMzk7bGwgbmVlZCB0byBmb2xsb3cgdGhlIGV4ZWN1dGlvbiBmbG93IGZyb20gdGhlcmUuIFRoYXQgc2VlbXMgdG8gYmUgdGhlIGNyaXRpY2FsIGVudHJ5IHBvaW50IHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHN5c3RlbXMgaW50ZXJwbGF5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAxMzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttb3ZlX3BhZ2VzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdXNlcmZhdWx0ZmQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS91c2VyZmF1bHRmZC5jPTEzODI9c3RhdGljIGludCBtb3ZlX3plcm9wYWdlX3B0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTE0MTQtICovXG5tbS91c2VyZmF1bHRmZC5jOjE0MTU6c3RhdGljIGxvbmcgbW92ZV9wYWdlc19wdGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqZHN0X3BtZCwgcG1kX3QgKnNyY19wbWQsXG5tbS91c2VyZmF1bHRmZC5jLTE0MTYtXHRcdFx0ICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSxcbi0tXG5tbS91c2VyZmF1bHRmZC5jPTE4NTk9c3RhdGljIHZvaWQgdWZmZF9tb3ZlX3VubG9jayhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdF92bWEsXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0xODY3LS8qKlxubW0vdXNlcmZhdWx0ZmQuYzoxODY4OiAqIG1vdmVfcGFnZXMgLSBtb3ZlIGFyYml0cmFyeSBhbm9ueW1vdXMgcGFnZXMgb2YgYW4gZXhpc3Rpbmcgdm1hXG5tbS91c2VyZmF1bHRmZC5jLTE4NjktICogQGN0eDogcG9pbnRlciB0byB0aGUgdXNlcmZhdWx0ZmQgY29udGV4dFxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtMTg3Ni0gKlxubW0vdXNlcmZhdWx0ZmQuYzoxODc3OiAqIG1vdmVfcGFnZXMoKSByZW1hcHMgYXJiaXRyYXJ5IGFub255bW91cyBwYWdlcyBhdG9taWNhbGx5IGluIHplcm9cbm1tL3VzZXJmYXVsdGZkLmMtMTg3OC0gKiBjb3B5LiBJdCBvbmx5IHdvcmtzIG9uIG5vbiBzaGFyZWQgYW5vbnltb3VzIHBhZ2VzIGJlY2F1c2UgdGhvc2UgY2FuXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0xODg4LSAqIHN0b3JhZ2Ugb3IgYW55IG90aGVyIEkvTyBkZXZpY2UgKE1BRFZfRE9OVEZPUksgaW4gdGhlIHNvdXJjZSB2bWFcbm1tL3VzZXJmYXVsdGZkLmM6MTg4OTogKiBhdm9pZHMgbW92ZV9wYWdlcygpIHRvIGZhaWwgd2l0aCAtRUJVU1kgaWYgdGhlIHByb2Nlc3MgZm9ya3MgYmVmb3JlXG5tbS91c2VyZmF1bHRmZC5jOjE4OTA6ICogbW92ZV9wYWdlcygpIGlzIGNhbGxlZCksIHRoZW4gaXQgd2lsbCBjYWxsIG1vdmVfcGFnZXMoKSB0byBtYXAgdGhlXG5tbS91c2VyZmF1bHRmZC5jLTE4OTEtICogcGFnZSBpbiB0aGUgZmF1bHRpbmcgYWRkcmVzcyBpbiB0aGUgZGVzdGluYXRpb24gdm1hLlxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtMTkwNS0gKiB0aGUgZGVzdGluYXRpb24gdmlydHVhbCBtZW1vcnkgcmFuZ2UgaXMgbm90IGEgd2hvbGUgdW5tYXBwZWQgaG9sZSxcbm1tL3VzZXJmYXVsdGZkLmM6MTkwNjogKiBtb3ZlX3BhZ2VzKCkgd2lsbCBmYWlsIHJlc3BlY3RpdmVseSB3aXRoIC1FTk9FTlQgb3IgLUVFWElTVC4gVGhpc1xubW0vdXNlcmZhdWx0ZmQuYy0xOTA3LSAqIHByb3ZpZGVzIGEgdmVyeSBzdHJpY3QgYmVoYXZpb3IgdG8gYXZvaWQgYW55IGNoYW5jZSBvZiBtZW1vcnlcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTE5MTAtICogdGltZSBmb3IgYW55IGdpdmVuIGZhdWx0aW5nIGFkZHJlc3MuIFRoaXMgbWVhbnMgdGhhdCBpZiB0d28gdGhyZWFkc1xubW0vdXNlcmZhdWx0ZmQuYzoxOTExOiAqIHRyeSB0byBib3RoIGNhbGwgbW92ZV9wYWdlcygpIG9uIHRoZSBzYW1lIGRlc3RpbmF0aW9uIGFkZHJlc3MgYXQgdGhlXG5tbS91c2VyZmF1bHRmZC5jLTE5MTItICogc2FtZSB0aW1lLCB0aGUgc2Vjb25kIHRocmVhZCB3aWxsIGdldCBhbiBleHBsaWNpdCBlcnJvciBmcm9tIHRoaXNcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTE5MjAtICogYW4gYW1vdW50IG9mIGJ5dGVzIHN1Y2Nlc3NmdWxseSBtb3ZlZC4gSWYgdGhlIHJldHZhbCByZXBvcnRzIGFcbm1tL3VzZXJmYXVsdGZkLmM6MTkyMTogKiBcJiMzNDtzaG9ydFwmIzM0OyByZW1hcCwgdGhlIG1vdmVfcGFnZXMoKSBjb21tYW5kIHNob3VsZCBiZSByZXBlYXRlZCBieVxubW0vdXNlcmZhdWx0ZmQuYy0xOTIyLSAqIHVzZXJsYW5kIHdpdGggc3JjJiM0MztyZXR2YWwsIGRzdCYjNDM7cmV2YWwsIGxlbi1yZXR2YWwgaWYgaXQgd2FudHMgdG8ga25vd1xuLS1cbm1tL3VzZXJmYXVsdGZkLmMtMTkzMy0gKi9cbm1tL3VzZXJmYXVsdGZkLmM6MTkzNDpzdGF0aWMgc3NpemVfdCBtb3ZlX3BhZ2VzKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCwgdW5zaWduZWQgbG9uZyBkc3Rfc3RhcnQsXG5tbS91c2VyZmF1bHRmZC5jLTE5MzUtXHRcdCAgIHVuc2lnbmVkIGxvbmcgc3JjX3N0YXJ0LCB1bnNpZ25lZCBsb25nIGxlbiwgX191NjQgbW9kZSlcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTIwMTQtXHRcdCAqIGJlIHN0cmljdC4gSWYgZHN0X3BtZCBjaGFuZ2VzIGludG8gVFBIIGFmdGVyIHRoaXMgY2hlY2ssIHRoZVxubW0vdXNlcmZhdWx0ZmQuYzoyMDE1Olx0XHQgKiBtb3ZlX3BhZ2VzX2h1Z2VfcG1kKCkgd2lsbCBkZXRlY3QgdGhlIGNoYW5nZSBhbmQgcmV0cnlcbm1tL3VzZXJmYXVsdGZkLmM6MjAxNjpcdFx0ICogd2hpbGUgbW92ZV9wYWdlc19wdGUoKSB3aWxsIGRldGVjdCB0aGUgY2hhbmdlIGFuZCBmYWlsLlxubW0vdXNlcmZhdWx0ZmQuYy0yMDE3LVx0XHQgKi9cbi0tXG5tbS91c2VyZmF1bHRmZC5jLTIwNDEtXHRcdFx0XHRzcGxpdF9odWdlX3BtZChzcmNfdm1hLCBzcmNfcG1kLCBzcmNfYWRkcik7XG5tbS91c2VyZmF1bHRmZC5jOjIwNDI6XHRcdFx0XHQvKiBUaGUgZm9saW8gd2lsbCBiZSBzcGxpdCBieSBtb3ZlX3BhZ2VzX3B0ZSgpICovXG5tbS91c2VyZmF1bHRmZC5jLTIwNDMtXHRcdFx0XHRjb250aW51ZTtcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTIwNDUtXG5tbS91c2VyZmF1bHRmZC5jOjIwNDY6XHRcdFx0ZXJyID0gbW92ZV9wYWdlc19odWdlX3BtZChtbSwgZHN0X3BtZCwgc3JjX3BtZCxcbm1tL3VzZXJmYXVsdGZkLmMtMjA0Ny1cdFx0XHRcdFx0XHQgIGRzdF9wbWR2YWwsIGRzdF92bWEsIHNyY192bWEsXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0yMDY4LVxubW0vdXNlcmZhdWx0ZmQuYzoyMDY5Olx0XHRcdHJldCA9IG1vdmVfcGFnZXNfcHRlcyhtbSwgZHN0X3BtZCwgc3JjX3BtZCxcbm1tL3VzZXJmYXVsdGZkLmMtMjA3MC1cdFx0XHRcdFx0ICAgICAgZHN0X3ZtYSwgc3JjX3ZtYSwgZHN0X2FkZHIsXG4tLVxubW0vdXNlcmZhdWx0ZmQuYz00MjE5PXN0YXRpYyBpbnQgdXNlcmZhdWx0ZmRfbW92ZShzdHJ1Y3QgdXNlcmZhdWx0ZmRfY3R4ICpjdHgsXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy00MjU4LVx0aWYgKG1tZ2V0X25vdF96ZXJvKG1tKSkge1xubW0vdXNlcmZhdWx0ZmQuYzo0MjU5Olx0XHRyZXQgPSBtb3ZlX3BhZ2VzKGN0eCwgdWZmZGlvX21vdmUuZHN0LCB1ZmZkaW9fbW92ZS5zcmMsXG5tbS91c2VyZmF1bHRmZC5jLTQyNjAtXHRcdFx0XHQgdWZmZGlvX21vdmUubGVuLCB1ZmZkaW9fbW92ZS5tb2RlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMTM6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTA2OQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipNeSBBbmFseXNpcyBvZiBgbW92ZV9wYWdlc19odWdlX3BtZGAgYW5kIFJlbGF0ZWQgQ29uZmlndXJhdGlvbnMqKgoKUmlnaHQsIHNvIEkgc2VlIGBtb3ZlX3BhZ2VzX2h1Z2VfcG1kYCBpcyB0aGUgY2VudHJhbCBmdW5jdGlvbiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGhlcmUg4oCTIHRoYXQmIzM5O3MgdGhlIG9uZSB0byBzY3J1dGluaXplIGZpcnN0LiBUaGUga2V5IGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byBrZWVwIGluIG1pbmQsIG9mIGNvdXJzZSwgYXJlIGBVU0VSRkFVTFRGRGAgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuIFRoZXnigJlsbCB1bmRvdWJ0ZWRseSBwbGF5IGEgc2lnbmlmaWNhbnQgcm9sZSBpbiBob3cgdGhpcyBmdW5jdGlvbiBvcGVyYXRlcywgaGFuZGxpbmcgcGFnZSBmYXVsdHMsIGFuZCBkZWFsaW5nIHdpdGggdHJhbnNwYXJlbnQgaHVnZXBhZ2VzLCByZXNwZWN0aXZlbHkuIEkgbmVlZCB0byBiZSBhd2FyZSBvZiB0aGVpciBpbnRlcmFjdGlvbnMuCgpOb3csIGEgcXVpY2sgc2lkZSB0aG91Z2h04oCmIEkgc2hvdWxkIGp1c3QgZG91YmxlLWNoZWNrIGlmIGBDT05GSUdfTUlHUkFUSU9OYCBpcyBhY3R1YWxseSBhIGhhcmQgcmVxdWlyZW1lbnQgaGVyZS4gSXQgc2VlbXMgbGlrZSBhIGNvcmUgY29uY2VwdCwgYnV0IEkgc2hvdWxkIGNvbmZpcm0gaXTigJlzIGVzc2VudGlhbCB0byB0aGUgZnVuY3Rpb24mIzM5O3Mgb3BlcmF0aW9uIG9yIGlmIGl04oCZcyBtb3JlIGZvciBhIGJyb2FkZXIgY29udGV4dC4gT2theSwgbGV0IG1lIGRvIGEgcXVpY2sgc2VhcmNoLiBBaCwgcmlnaHQuIEl0IGxvb2tzIGxpa2UgYHBtZF9taWdyYXRpb25fZW50cnlfd2FpdGAgaXMgZGVmaW5lZCBpbiBgaW5jbHVkZS9saW51eC9zd2Fwb3BzLmhgLCB3aGljaCBnaXZlcyBhIGhpbnQgb24gaXRzIHB1cnBvc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDEzOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BtZF9taWdyYXRpb25fZW50cnlfd2FpdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc3dhcG9wcy5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc3dhcG9wcy5oPTMyOD1leHRlcm4gdm9pZCByZW1vdmVfbWlncmF0aW9uX3BtZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsXG4tLVxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzMwLVxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg6MzMxOmV4dGVybiB2b2lkIHBtZF9taWdyYXRpb25fZW50cnlfd2FpdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZCk7XG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0zMzItXG4tLVxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg9MzQ4PXN0YXRpYyBpbmxpbmUgdm9pZCByZW1vdmVfbWlncmF0aW9uX3BtZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsXG4tLVxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzUzLVxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg6MzU0OnN0YXRpYyBpbmxpbmUgdm9pZCBwbWRfbWlncmF0aW9uX2VudHJ5X3dhaXQoc3RydWN0IG1tX3N0cnVjdCAqbSwgcG1kX3QgKnApIHsgfVxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzU1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAxMzo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NjU0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6CgoqKkFuYWx5emluZyBgcG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0YCBpbiBgc3dhcG9wcy5oYCoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gc3Vycm91bmRpbmcgYHBtZF9taWdyYXRpb25fZW50cnlfd2FpdGAgd2l0aGluIGBpbmNsdWRlL2xpbnV4L3N3YXBvcHMuaGAuIFRoaXMgbGlrZWx5IGluZGljYXRlcyB0aGF0IGl0cyBiZWhhdmlvciBvciBldmVuIGl0cyBleGlzdGVuY2UgaXMgcGxhdGZvcm0tc3BlY2lmaWMgb3IgZGVwZW5kcyBvbiBjZXJ0YWluIGtlcm5lbCBjb25maWd1cmF0aW9ucy4gVGhlIGAjaWZkZWZgIGRpcmVjdGl2ZXMgYXJlIHRoZSBrZXkgaGVyZS4gSSB3YW50IHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHVuZGVyIHdoaWNoIGNvbmRpdGlvbnMgdGhpcyBmdW5jdGlvbiBpcyAqcHJlc2VudCogYW5kICp3aGF0KiB0aG9zZSBjb25kaXRpb25zIGFyZS4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBzcGVjaWZpYyBhcmNoaXRlY3R1cmUsIGEgZmVhdHVyZSBmbGFnLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gS25vd2luZyB0aGlzIGNvbnRleHQgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgZnVuY3Rpb24mIzM5O3MgcHVycG9zZSBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBtZW1vcnkgbWFuYWdlbWVudCBmcmFtZXdvcmsuIEVzc2VudGlhbGx5LCBmaWd1cmluZyBvdXQgd2hlbiAqaXQmIzM5O3MgdGhlcmUqIHdpbGwgdGVsbCBtZSBhIGxvdCBhYm91dCAqd2h5KiBpdCYjMzk7cyB0aGVyZS4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgaXRzIHVzZTsgd2hhdCBjb25maWd1cmF0aW9ucyByZWx5IG9uIGl0LCBhbmQgd2hhdCBjb25maWd1cmF0aW9ucyBkbyBub3Q/IFRoaXMgd2lsbCB0ZWxsIG1lIGhvdyBjcml0aWNhbCBpdCBpcyBmb3IgYSBnZW5lcmFsIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvZGUuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgZ2V0dGluZyB0byB0aGF0IGxpbmUsIGFuZCB0aGVuIGJhY2tpbmcgb3V0IHVudGlsIEkgc2VlIHdoYXQgaXMgaGFwcGVuaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAxMzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc3dhcG9wcy5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMjA6XHR9XG4gMzIxOlx0XG4gMzIyOlx0c3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrO1xuIDMyMzpcdFxuIDMyNDpcdCNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUZcbiAzMjU6XHRleHRlcm4gaW50IHNldF9wbWRfbWlncmF0aW9uX2VudHJ5KHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcbiAzMjY6XHRcdFx0c3RydWN0IHBhZ2UgKnBhZ2UpO1xuIDMyNzpcdFxuIDMyODpcdGV4dGVybiB2b2lkIHJlbW92ZV9taWdyYXRpb25fcG1kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcbiAzMjk6XHRcdFx0c3RydWN0IHBhZ2UgKm5ldyk7XG4gMzMwOlx0XG4gMzMxOlx0ZXh0ZXJuIHZvaWQgcG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kKTtcbiAzMzI6XHRcbiAzMzM6XHRzdGF0aWMgaW5saW5lIHBtZF90IHN3cF9lbnRyeV90b19wbWQoc3dwX2VudHJ5X3QgZW50cnkpXG4gMzM0Olx0e1xuIDMzNTpcdFx0c3dwX2VudHJ5X3QgYXJjaF9lbnRyeTtcbiAzMzY6XHRcbiAzMzc6XHRcdGFyY2hfZW50cnkgPSBfX3N3cF9lbnRyeShzd3BfdHlwZShlbnRyeSksIHN3cF9vZmZzZXQoZW50cnkpKTtcbiAzMzg6XHRcdHJldHVybiBfX3N3cF9lbnRyeV90b19wbWQoYXJjaF9lbnRyeSk7XG4gMzM5Olx0fVxuIDM0MDpcdFxuIDM0MTpcdCNlbHNlICAvKiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYgKi9cbiAzNDI6XHRzdGF0aWMgaW5saW5lIGludCBzZXRfcG1kX21pZ3JhdGlvbl9lbnRyeShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsXG4gMzQzOlx0XHRcdHN0cnVjdCBwYWdlICpwYWdlKVxuIDM0NDpcdHtcbiAzNDU6XHRcdEJVSUxEX0JVRygpO1xuIDM0NjpcdH1cbiAzNDc6XHRcbiAzNDg6XHRzdGF0aWMgaW5saW5lIHZvaWQgcmVtb3ZlX21pZ3JhdGlvbl9wbWQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LFxuIDM0OTpcdFx0XHRzdHJ1Y3QgcGFnZSAqbmV3KVxuIDM1MDpcdHtcbiAzNTE6XHRcdEJVSUxEX0JVRygpO1xuIDM1MjpcdH1cbiAzNTM6XHRcbiAzNTQ6XHRzdGF0aWMgaW5saW5lIHZvaWQgcG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0KHN0cnVjdCBtbV9zdHJ1Y3QgKm0sIHBtZF90ICpwKSB7IH1cbiAzNTU6XHRcbiAzNTY6XHRzdGF0aWMgaW5saW5lIHBtZF90IHN3cF9lbnRyeV90b19wbWQoc3dwX2VudHJ5X3QgZW50cnkpXG4gMzU3Olx0e1xuIDM1ODpcdFx0cmV0dXJuIF9fcG1kKDApO1xuIDM1OTpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMTM6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA2MTMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgQ29kZWJhc2U6IFRoZSBTZWFyY2ggZm9yIGBwbWRfbWlncmF0aW9uX2VudHJ5X3dhaXRgKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYHBtZF9taWdyYXRpb25fZW50cnlfd2FpdGAgaXMgYWN0dWFsbHkgKmRlZmluZWQqLiBJIHZhZ3VlbHkgcmVtZW1iZXIgaXQsIGJ1dCBhIHF1aWNrIHNlYXJjaCBkaWRuJiMzOTt0IGltbWVkaWF0ZWx5IHR1cm4gdXAgdGhlIHNvdXJjZS4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgZXJyb3IgbWVzc2FnZSBvciBjb250ZXh0IGhhZCB0byBoYXZlIG1lbnRpb25lZCB0aGUgZmlsZS4gQWgsIHllcyEgSXQgbG9va3MgbGlrZSB0aGUgc3lzdGVtJiMzOTtzIHRlbGxpbmcgbWUgaXQmIzM5O3MgbG9jYXRlZCBpbiBgbW0vbWlncmF0ZS5jYC4gT2theSwgdGhhdCBtYWtlcyBzZW5zZTsgdGhhdCBzb3VuZHMgbGlrZSBhIHBsYXVzaWJsZSBsb2NhdGlvbiBmb3IgbWVtb3J5IG1pZ3JhdGlvbiByZWxhdGVkIGZ1bmN0aW9ucy4gQWxyaWdodCwgdGltZSB0byBvcGVuIHVwIGBtbS9taWdyYXRlLmNgIGFuZCBkaWcgaW50byB0aGUgaW1wbGVtZW50YXRpb24gdGhlcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBmdW5jdGlvbiBkb2VzIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIG1pZ3JhdGlvbiBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAxMzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwbWRfbWlncmF0aW9uX2VudHJ5X3dhaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9taWdyYXRlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWlncmF0ZS5jPTUxNj12b2lkIG1pZ3JhdGlvbl9lbnRyeV93YWl0X2h1Z2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApXG4tLVxubW0vbWlncmF0ZS5jLTU0OC0jaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGXG5tbS9taWdyYXRlLmM6NTQ5OnZvaWQgcG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kKVxubW0vbWlncmF0ZS5jLTU1MC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDEzOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwOTg1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGBwbWRfbWlncmF0aW9uX2VudHJ5X3dhaXRgJiMzOTtzIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgbW0vbWlncmF0ZS5jYCBhbmQgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHN1cnJvdW5kaW5nIGBwbWRfbWlncmF0aW9uX2VudHJ5X3dhaXRgLiBJIGtub3cgdGhpcyBmdW5jdGlvbiBpcyBjcml0aWNhbCBmb3IgaGFuZGxpbmcgcGFnZSBtaWdyYXRpb25zIGF0IHRoZSBQYWdlIE1pZGRsZSBEaXJlY3RvcnkgKFBNRCkgbGV2ZWwuIE15IGluaXRpYWwgaHlwb3RoZXNpcyBpcyB0aGF0IGl0cyBwcmVzZW5jZSBvciBiZWhhdmlvciBpcyBwcm9iYWJseSB0aWVkIHRvIHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9ucyBvciBhcmNoaXRlY3R1cmFsIGZlYXR1cmVzIHJlbGF0ZWQgdG8gcGFnZSBtaWdyYXRpb24sIGVpdGhlciBvbiBhIHNwZWNpZmljIGFyY2hpdGVjdHVyZSwgb3IgYSBwYXJ0aWN1bGFyIGtlcm5lbCBjb25maWcuIEkgd2FudCB0byB1bmRlcnN0YW5kIHdoYXQgY29uZmlndXJhdGlvbnMgcmVxdWlyZSBvciBlbmFibGUgdGhpcyBmdW5jdGlvbmFsaXR5OyBhIGAjaWZkZWZgIGNoZWNrIHdpbGwgYmUgdGhlIHF1aWNrZXN0IHdheSB0byBkbyB0aGF0LiBJIGV4cGVjdCBpdCYjMzk7cyBnb2luZyB0byBiZSBzb21ldGhpbmcgbGlrZSBhIGZsYWcgZm9yIFRIUCBtaWdyYXRpb24sIE5VTUEsIG9yIHNvbWUgb3RoZXIgbWVtb3J5IG1hbmFnZW1lbnQgc2V0dGluZy4gVW5kZXJzdGFuZGluZyB0aGUgY29uZGl0aW9uYWwgY29tcGlsZSB3aWxsIGhlbHAgbWUgcXVpY2tseSBhc2NlcnRhaW4gd2hpY2gga2VybmVsIGJ1aWxkIHRoaXMgc3BlY2lmaWMgc2VjdGlvbiBvZiBjb2RlIGFwcGxpZXMgdG8uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDEzOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWlncmF0ZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1NDU6XHR9XG4gNTQ2Olx0I2VuZGlmXG4gNTQ3Olx0XG4gNTQ4Olx0I2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRlxuIDU0OTpcdHZvaWQgcG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kKVxuIDU1MDpcdHtcbiA1NTE6XHRcdHNwaW5sb2NrX3QgKnB0bDtcbiA1NTI6XHRcbiA1NTM6XHRcdHB0bCA9IHBtZF9sb2NrKG1tLCBwbWQpO1xuIDU1NDpcdFx0aWYgKCFwbWRfaXNfbWlncmF0aW9uX2VudHJ5KCpwbWQpKVxuIDU1NTpcdFx0XHRnb3RvIHVubG9jaztcbiA1NTY6XHRcdHNvZnRsZWFmX2VudHJ5X3dhaXRfb25fbG9ja2VkKHNvZnRsZWFmX2Zyb21fcG1kKCpwbWQpLCBwdGwpO1xuIDU1NzpcdFx0cmV0dXJuO1xuIDU1ODpcdHVubG9jazpcbiA1NTk6XHRcdHNwaW5fdW5sb2NrKHB0bCk7XG4gNTYwOlx0fVxuIDU2MTpcdCNlbmRpZlxuIDU2MjpcdFxuIDU2MzpcdC8qXG4gNTY0Olx0ICogUmVwbGFjZSB0aGUgZm9saW8gaW4gdGhlIG1hcHBpbmcuXG4gNTY1Olx0ICpcbiA1NjY6XHQgKiBUaGUgbnVtYmVyIG9mIHJlbWFpbmluZyByZWZlcmVuY2VzIG11c3QgYmU6XG4gNTY3Olx0ICogMSBmb3IgYW5vbnltb3VzIGZvbGlvcyB3aXRob3V0IGEgbWFwcGluZ1xuIDU2ODpcdCAqIDIgZm9yIGZvbGlvcyB3aXRoIGEgbWFwcGluZ1xuIDU2OTpcdCAqIDMgZm9yIGZvbGlvcyB3aXRoIGEgbWFwcGluZyBhbmQgdGhlIHByaXZhdGUgZmxhZyBzZXQuXG4gNTcwOlx0ICovXG4gNTcxOlx0c3RhdGljIGludCBfX2ZvbGlvX21pZ3JhdGVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiA1NzI6XHRcdFx0c3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGV4cGVjdGVkX2NvdW50KVxuIDU3MzpcdHtcbiA1NzQ6XHRcdFhBX1NUQVRFKHhhcywgXHUwMDI2bWFwcGluZy1cdTAwM2VpX3BhZ2VzLCBmb2xpby1cdTAwM2VpbmRleCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDEzOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjk1CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIHdpdGggdGhlIGJvbGRlZCBoZWFkZXIgYXMgcmVxdWVzdGVkOgoKKipVbmRlcnN0YW5kaW5nIHRoZSBSZWxhdGlvbnNoaXAgQmV0d2VlbiBQTUQgU29mdGxlYWYgU3VwcG9ydCBhbmQgTWlncmF0aW9uKioKCkFscmlnaHQsIGxldCBtZSBzZWUgaWYgSSYjMzk7dmUgZ290IHRoaXMgcmlnaHQuIEkmIzM5O20gbG9va2luZyBhdCB0aGUgZGVwZW5kZW5jaWVzIGhlcmUuIEl0IHNlZW1zIHRoYXQgYENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRmAgaXMgYSAqcHJlLXJlcXVpc2l0ZSogZm9yIHRoZSBgcG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0YCB2YXJpYWJsZSB0byBldmVuICpleGlzdCogaW4gYSBtZWFuaW5nZnVsIHN0YXRlLCByaWdodD8gTWVhbmluZyBpdCBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBhbnl0aGluZyByZWxhdGVkIHRvIG1pZ3JhdGlvbiB0byBmdW5jdGlvbi4gVGhlIGxvZ2ljJiMzOTtzIGxpa2VseSBzdHJ1Y3R1cmVkIHN1Y2ggdGhhdCBpZiB0aGUgYXJjaGl0ZWN0dXJlIGRvZXNuJiMzOTt0IHN1cHBvcnQgdGhlIGZpbmVyLWdyYWluZWQgaGFuZGxpbmcgb2YgUGFnZSBUYWJsZSBlbnRyaWVzIHRoYXQgYSBzb2Z0bGVhZiBwcm92aWRlcywgdGhlbiB0aGUgbWlncmF0aW9uIGxvZ2ljIHdvdWxkbiYjMzk7dCBiZSBzZXR1cCB0byB1dGlsaXplIGl0LgoKQW5kIHRoZW4gSSYjMzk7bSB0aGlua2luZywgaGFuZyBvbiwgdGhlIGNvcmUgbWlncmF0aW9uIGNvZGUgaXRzZWxmLCB3aGljaCBsaXZlcyBpbiBgbW0vbWlncmF0ZS5jYCwgaXMgb25seSBldmVuICpjb21waWxlZCogaW50byB0aGUga2VybmVsIGlmIGBDT05GSUdfTUlHUkFUSU9OYCBpcyBlbmFibGVkIGluIHRoZSBmaXJzdCBwbGFjZS4gU28sIHRoZSB3aG9sZSBtaWdyYXRpb24gc3Vic3lzdGVtIGlzIGdhdGVkIGJ5IHRoaXMgY29uZmlndXJhdGlvbi4gVGhlIGluaXRpYWwgY29uZGl0aW9uIGZvciBhbnl0aGluZyB0byBtYXR0ZXIgaXMgYENPTkZJR19NSUdSQVRJT05gLCBhbmQgaWYgdGhhdCYjMzk7cyB0cnVlLCB0aGVuIGBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUZgIGlzIG5lZWRlZCBmb3IgYHBtZF9taWdyYXRpb25fZW50cnlfd2FpdGAgdG8gZG8gaXRzIGpvYi4gSXQmIzM5O3MgYWxtb3N0IGEgY2FzY2FkaW5nIHNldCBvZiBjb25kaXRpb25hbHMgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMTM6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWlncmF0ZS5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9OTc9b2JqLSQoQ09ORklHX01FTVRFU1QpXHRcdCYjNDM7PSBtZW10ZXN0Lm9cbm1tL01ha2VmaWxlOjk4Om9iai0kKENPTkZJR19NSUdSQVRJT04pICYjNDM7PSBtaWdyYXRlLm9cbm1tL01ha2VmaWxlLTk5LW9iai0kKENPTkZJR19OVU1BKSAmIzQzOz0gbWVtb3J5LXRpZXJzLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMTM6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIxNTgKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKktlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llczogUE1EIFNvZnRsZWFmIGFuZCBNaWdyYXRpb24qKgoKQWxyaWdodCwgSSBzZWUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBgQ09ORklHX01JR1JBVElPTmAgYXMgYSBwcmVyZXF1aXNpdGUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBsZXQmIzM5O3MgZGV0ZXJtaW5lIGlmIHdlIGNhbiBlbmFibGUgYENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRmAuIEdpdmVuIHRoZSBjb250ZXh0LCBJJiMzOTttIGluZmVycmluZyB0aGlzIGlzIHBhcnQgb2YgdGhlIGRlcGVuZGVuY3kgY2hhaW4uIElzIHRoaXMgcGFydGljdWxhciBhcmNoaXRlY3R1cmUgZXZlbiBjYXBhYmxlIG9mIGxldmVyYWdpbmcgUE1EIHNvZnRsZWFmPyBVbmRlcnN0YW5kaW5nIHRoYXQgYml0IGlzIGNydWNpYWwgYmVmb3JlIHdlIHByb2NlZWQuIFdlIG5lZWQgdG8gYXNjZXJ0YWluIGlmIHRoZSBoYXJkd2FyZSBhbmQgcmVsZXZhbnQgYXJjaGl0ZWN0dXJlIHN1cHBvcnQgYENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRmAgYmVmb3JlIHdlIGNhbiBzdGFydCBjb25zaWRlcmluZyBmdXJ0aGVyIGNvbmZpZ3VyYXRpb24uIE90aGVyd2lzZSwgYW55IGVmZm9ydCBkb3duIHRoYXQgcGF0aCB3b3VsZCBiZSB3YXN0ZWQsIG9yIHdvcnNlLCBsZWFkIHRvIGluc3RhYmlsaXR5LiBUaGUgZW5hYmxlbWVudCBvZiBgQ09ORklHX01JR1JBVElPTmAgbGlrZWx5IGhpbmdlcyBvbiB0aGlzLCBzbyBpdCYjMzk7cyBhIGNyaXRpY2FsIGZpcnN0IGNoZWNrLiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBLY29uZmlnIG9wdGlvbnMgdG8gY29uZmlybS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMTM6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9LY29uZmlnPTI9Y29uZmlnIEFSTTY0XG4tLVxuYXJjaC9hcm02NC9LY29uZmlnLTE5LVx0c2VsZWN0IEFSQ0hfRU5BQkxFX1NQTElUX1BNRF9QVExPQ0sgaWYgUEdUQUJMRV9MRVZFTFMgXHUwMDNlIDJcbmFyY2gvYXJtNjQvS2NvbmZpZzoyMDpcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiBpZiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxuYXJjaC9hcm02NC9LY29uZmlnLTIxLVx0c2VsZWN0IEFSQ0hfSEFTX0NBQ0hFX0xJTkVfU0laRVxuLS1cbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oPTE1MDY9c3RhdGljIGlubGluZSBwbWRfdCBwbWRwX2VzdGFibGlzaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaC0xNTM2LVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg6MTUzNzojaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaC0xNTM4LSNkZWZpbmUgX19wbWRfdG9fc3dwX2VudHJ5KHBtZClcdFx0KChzd3BfZW50cnlfdCkgeyBwbWRfdmFsKHBtZCkgfSlcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTE1MzktI2RlZmluZSBfX3N3cF9lbnRyeV90b19wbWQoc3dwKVx0XHRfX3BtZCgoc3dwKS52YWwpXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaDoxNTQwOiNlbmRpZiAvKiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYgKi9cbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTE1NDEtXG4tLVxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZz0yPWNvbmZpZyBMT09OR0FSQ0hcbi0tXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnLTE0LVx0c2VsZWN0IEFSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnOjE1Olx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGIGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnLTE2LVx0c2VsZWN0IEFSQ0hfSEFTX0FDUElfVEFCTEVfVVBHUkFERVx0aWYgQUNQSVxuLS1cbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGd0YWJsZS5oPTEwNDQ9c3RhdGljIGlubGluZSBwdGVfdCAqcG1kcF9wdGVwKHBtZF90ICpwbWQpXG4tLVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmgtMTA2Mi1cbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGd0YWJsZS5oOjEwNjM6I2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRlxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmgtMTA2NC0jZGVmaW5lIHBtZF9zd3BfbWtzb2Z0X2RpcnR5KHBtZClcdHB0ZV9wbWQocHRlX3N3cF9ta3NvZnRfZGlydHkocG1kX3B0ZShwbWQpKSlcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcuY3B1dHlwZT0xMDk9Y29uZmlnIFBQQ19USFBcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcuY3B1dHlwZS0xMTQtICAgICAgIHNlbGVjdCBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcuY3B1dHlwZToxMTU6ICAgICAgIHNlbGVjdCBBUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiBpZiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnLmNwdXR5cGUtMTE2LVxuLS1cbmFyY2gvcmlzY3YvS2NvbmZpZz0xMz1jb25maWcgUklTQ1Zcbi0tXG5hcmNoL3Jpc2N2L0tjb25maWctMjQtXHRzZWxlY3QgQVJDSF9FTkFCTEVfU1BMSVRfUE1EX1BUTE9DSyBpZiBQR1RBQkxFX0xFVkVMUyBcdTAwM2UgMlxuYXJjaC9yaXNjdi9LY29uZmlnOjI1Olx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGIGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG5hcmNoL3Jpc2N2L0tjb25maWctMjYtXHRzZWxlY3QgQVJDSF9IQVNfQklORk1UX0ZMQVRcbi0tXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BndGFibGUuaD05NDQ9c3RhdGljIGlubGluZSBwbWRfdCBwbWRfY2xlYXJfc29mdF9kaXJ0eShwbWRfdCBwbWQpXG4tLVxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtOTQ4LVxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg6OTQ5OiNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUZcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTk1MC1zdGF0aWMgaW5saW5lIGJvb2wgcG1kX3N3cF9zb2Z0X2RpcnR5KHBtZF90IHBtZClcbi0tXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BndGFibGUuaD05NjA9c3RhdGljIGlubGluZSBwbWRfdCBwbWRfc3dwX2NsZWFyX3NvZnRfZGlydHkocG1kX3QgcG1kKVxuLS1cbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTk2My19XG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BndGFibGUuaDo5NjQ6I2VuZGlmIC8qIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiAqL1xuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtOTY1LSNlbmRpZiAvKiBDT05GSUdfSEFWRV9BUkNIX1NPRlRfRElSVFkgKi9cbi0tXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BndGFibGUuaD0xMjA2PXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX3N3cF9jbGVhcl9leGNsdXNpdmUocHRlX3QgcHRlKVxuLS1cbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTEyMTAtXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BndGFibGUuaDoxMjExOiNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUZcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTEyMTItI2RlZmluZSBfX3BtZF90b19zd3BfZW50cnkocG1kKSAoKHN3cF9lbnRyeV90KSB7IHBtZF92YWwocG1kKSB9KVxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtMTIxMy0jZGVmaW5lIF9fc3dwX2VudHJ5X3RvX3BtZChzd3ApIF9fcG1kKChzd3ApLnZhbClcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oOjEyMTQ6I2VuZGlmIC8qIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiAqL1xuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtMTIxNS1cbi0tXG5hcmNoL3MzOTAvS2NvbmZpZz03NT1jb25maWcgUzM5MFxuLS1cbmFyY2gvczM5MC9LY29uZmlnLTg0LVx0c2VsZWN0IEFSQ0hfRU5BQkxFX1NQTElUX1BNRF9QVExPQ0sgaWYgUEdUQUJMRV9MRVZFTFMgXHUwMDNlIDJcbmFyY2gvczM5MC9LY29uZmlnOjg1Olx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGIGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG5hcmNoL3MzOTAvS2NvbmZpZy04Ni1cdHNlbGVjdCBBUkNIX0hBU19DQ19DQU5fTElOS1xuLS1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg9OTAxPXN0YXRpYyBpbmxpbmUgcG1kX3QgcG1kX2NsZWFyX3NvZnRfZGlydHkocG1kX3QgcG1kKVxuLS1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtOTA1LVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaDo5MDY6I2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRlxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaC05MDctI2RlZmluZSBwbWRfc3dwX3NvZnRfZGlydHkocG1kKVx0XHRwbWRfc29mdF9kaXJ0eShwbWQpXG4tLVxuYXJjaC94ODYvS2NvbmZpZz01OD1jb25maWcgWDg2XG4tLVxuYXJjaC94ODYvS2NvbmZpZy03Mi1cdHNlbGVjdCBBUkNIX0VOQUJMRV9TUExJVF9QTURfUFRMT0NLIGlmIChQR1RBQkxFX0xFVkVMUyBcdTAwM2UgMikgXHUwMDI2XHUwMDI2IChYODZfNjQgfHwgWDg2X1BBRSlcbmFyY2gveDg2L0tjb25maWc6NzM6XHRzZWxlY3QgQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYgaWYgWDg2XzY0IFx1MDAyNlx1MDAyNiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxuYXJjaC94ODYvS2NvbmZpZy03NC1cdHNlbGVjdCBBUkNIX0hBU19BQ1BJX1RBQkxFX1VQR1JBREVcdGlmIEFDUElcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg9MTU0Mz1zdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9zd3BfY2xlYXJfc29mdF9kaXJ0eShwdGVfdCBwdGUpXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTE1NDctXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg6MTU0ODojaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtMTU0OS1zdGF0aWMgaW5saW5lIHBtZF90IHBtZF9zd3BfbWtzb2Z0X2RpcnR5KHBtZF90IHBtZClcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD01Njg9c3RhdGljIGlubGluZSBib29sIHRocF9taWdyYXRpb25fc3VwcG9ydGVkKHZvaWQpXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC01Njkte1xuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NTcwOlx0cmV0dXJuIElTX0VOQUJMRUQoQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGKTtcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTU3MS19XG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg9Nzg9c3RhdGljIGlubGluZSBwdGVfdCBzb2Z0bGVhZl90b19wdGUoc29mdGxlYWZfdCBlbnRyeSlcbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC04My1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjg0OiNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUZcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTg1LS8qKlxuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTU3ND1zdGF0aWMgaW5saW5lIGJvb2wgcHRlX2lzX3VmZmRfbWFya2VyKHB0ZV90IHB0ZSlcbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC01ODktXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo1OTA6I2lmIGRlZmluZWQoQ09ORklHX1pPTkVfREVWSUNFKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYpXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC01OTEtXG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg9NjA0PXN0YXRpYyBpbmxpbmUgYm9vbCBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkocG1kX3QgcG1kKVxuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTYwOC1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjYwOTojZWxzZSAgLyogQ09ORklHX1pPTkVfREVWSUNFIFx1MDAyNlx1MDAyNiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYgKi9cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTYxMC1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTYxMT1zdGF0aWMgaW5saW5lIGJvb2wgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KHBtZF90IHBtZClcbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC02MTUtXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo2MTY6I2VuZGlmIC8qIENPTkZJR19aT05FX0RFVklDRSBcdTAwMjZcdTAwMjYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGICovXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC02MTctXG4tLVxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmg9MTc5Mz1zdGF0aWMgaW5saW5lIHBncHJvdF90IHBncHJvdF9tb2RpZnkocGdwcm90X3Qgb2xkcHJvdCwgcGdwcm90X3QgbmV3cHJvdClcbi0tXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaC0xODQxLSNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1NPRlRfRElSVFlcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oOjE4NDI6I2lmbmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUZcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oLTE4NDMtc3RhdGljIGlubGluZSBwbWRfdCBwbWRfc3dwX21rc29mdF9kaXJ0eShwbWRfdCBwbWQpXG4tLVxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg9MzIyPXN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsaztcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTMyMy1cbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oOjMyNDojaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0zMjUtZXh0ZXJuIGludCBzZXRfcG1kX21pZ3JhdGlvbl9lbnRyeShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsXG4tLVxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg9MzMzPXN0YXRpYyBpbmxpbmUgcG1kX3Qgc3dwX2VudHJ5X3RvX3BtZChzd3BfZW50cnlfdCBlbnRyeSlcbi0tXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0zNDAtXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaDozNDE6I2Vsc2UgIC8qIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiAqL1xuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzQyLXN0YXRpYyBpbmxpbmUgaW50IHNldF9wbWRfbWlncmF0aW9uX2VudHJ5KHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcbi0tXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaD0zNTY9c3RhdGljIGlubGluZSBwbWRfdCBzd3BfZW50cnlfdG9fcG1kKHN3cF9lbnRyeV90IGVudHJ5KVxuLS1cbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTM2MC1cbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oOjM2MTojZW5kaWYgIC8qIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiAqL1xuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzYyLVxuLS1cbm1tL0tjb25maWc9NzAzPWNvbmZpZyBBUkNIX0VOQUJMRV9IVUdFUEFHRV9NSUdSQVRJT05cbi0tXG5tbS9LY29uZmlnLTcwNS1cbm1tL0tjb25maWc6NzA2OmNvbmZpZyBBUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRlxubW0vS2NvbmZpZy03MDctXHRib29sXG4tLVxubW0vZGVidWdfdm1fcGd0YWJsZS5jPTc0OT1zdGF0aWMgdm9pZCBfX2luaXQgcG1kX2xlYWZfc29mdF9kaXJ0eV90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYy03NTMtXHRpZiAoIXBndGFibGVfc3VwcG9ydHNfc29mdF9kaXJ0eSgpIHx8XG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6NzU0Olx0ICAgICFJU19FTkFCTEVEKENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRikpXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtNzU1LVx0XHRyZXR1cm47XG4tLVxubW0vZGVidWdfdm1fcGd0YWJsZS5jPTgwNT1zdGF0aWMgdm9pZCBfX2luaXQgcHRlX3N3YXBfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcbi0tXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtODIxLVxubW0vZGVidWdfdm1fcGd0YWJsZS5jOjgyMjojaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtODIzLXN0YXRpYyB2b2lkIF9faW5pdCBwbWRfc29mdGxlYWZfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcbi0tXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtODM5LX1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYzo4NDA6I2Vsc2UgIC8qICFDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYgKi9cbm1tL2RlYnVnX3ZtX3BndGFibGUuYy04NDEtc3RhdGljIHZvaWQgX19pbml0IHBtZF9zb2Z0bGVhZl90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKSB7IH1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYzo4NDI6I2VuZGlmIC8qIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiAqL1xubW0vZGVidWdfdm1fcGd0YWJsZS5jLTg0My1cbi0tXG5tbS9obW0uYz0yMzU9c3RhdGljIGludCBobW1fdm1hX2hhbmRsZV9wdGUoc3RydWN0IG1tX3dhbGsgKndhbGssIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9obW0uYy0zMzMtXG5tbS9obW0uYzozMzQ6I2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRlxubW0vaG1tLmMtMzM1LXN0YXRpYyBpbnQgaG1tX3ZtYV9oYW5kbGVfYWJzZW50X3BtZChzdHJ1Y3QgbW1fd2FsayAqd2FsaywgdW5zaWduZWQgbG9uZyBzdGFydCxcbi0tXG5tbS9obW0uYz0zODI9c3RhdGljIGludCBobW1fdm1hX2hhbmRsZV9hYnNlbnRfcG1kKHN0cnVjdCBtbV93YWxrICp3YWxrLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuLS1cbm1tL2htbS5jLTM5My19XG5tbS9obW0uYzozOTQ6I2VuZGlmICAvKiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYgKi9cbm1tL2htbS5jLTM5NS1cbi0tXG5tbS9odWdlX21lbW9yeS5jPTQ4Njg9bGF0ZV9pbml0Y2FsbChzcGxpdF9odWdlX3BhZ2VzX2RlYnVnZnMpO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDg3MC1cbm1tL2h1Z2VfbWVtb3J5LmM6NDg3MTojaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGXG5tbS9odWdlX21lbW9yeS5jLTQ4NzItaW50IHNldF9wbWRfbWlncmF0aW9uX2VudHJ5KHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcbi0tXG5tbS9taWdyYXRlLmM9MzQ2PXN0YXRpYyBib29sIHJlbW92ZV9taWdyYXRpb25fcHRlKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vbWlncmF0ZS5jLTM2NC1cbm1tL21pZ3JhdGUuYzozNjU6I2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRlxubW0vbWlncmF0ZS5jLTM2Ni1cdFx0LyogUE1ELW1hcHBlZCBUSFAgbWlncmF0aW9uIGVudHJ5ICovXG4tLVxubW0vbWlncmF0ZS5jPTUxNj12b2lkIG1pZ3JhdGlvbl9lbnRyeV93YWl0X2h1Z2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApXG4tLVxubW0vbWlncmF0ZS5jLTU0Ny1cbm1tL21pZ3JhdGUuYzo1NDg6I2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRlxubW0vbWlncmF0ZS5jLTU0OS12b2lkIHBtZF9taWdyYXRpb25fZW50cnlfd2FpdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZClcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jPTc3OT1FWFBPUlRfU1lNQk9MKG1pZ3JhdGVfdm1hX3NldHVwKTtcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNzgwLVxubW0vbWlncmF0ZV9kZXZpY2UuYzo3ODE6I2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRlxubW0vbWlncmF0ZV9kZXZpY2UuYy03ODItLyoqXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYz05MTE9c3RhdGljIGludCBtaWdyYXRlX3ZtYV9zcGxpdF91bm1hcHBlZF9mb2xpbyhzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUsXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy05MzUtfVxubW0vbWlncmF0ZV9kZXZpY2UuYzo5MzY6I2Vsc2UgLyogIUNPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiAqL1xubW0vbWlncmF0ZV9kZXZpY2UuYy05Mzctc3RhdGljIGludCBtaWdyYXRlX3ZtYV9pbnNlcnRfaHVnZV9wbWRfcGFnZShzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUsXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYz05NTQ9c3RhdGljIHVuc2lnbmVkIGxvbmcgbWlncmF0ZV92bWFfbnJfcGFnZXModW5zaWduZWQgbG9uZyAqc3JjKVxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtOTU2LVx0dW5zaWduZWQgbG9uZyBuciA9IDE7XG5tbS9taWdyYXRlX2RldmljZS5jOjk1NzojaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGXG5tbS9taWdyYXRlX2RldmljZS5jLTk1OC1cdGlmICgqc3JjIFx1MDAyNiBNSUdSQVRFX1BGTl9DT01QT1VORClcbi0tXG5tbS9ybWFwLmM9MjQxMD1zdGF0aWMgYm9vbCB0cnlfdG9fbWlncmF0ZV9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vcm1hcC5jLTI0NzQtXHRcdFx0fVxubW0vcm1hcC5jOjI0NzU6I2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRlxubW0vcm1hcC5jLTI0NzYtXHRcdFx0cG1kdmFsID0gcG1kcF9nZXQocHZtdy5wbWQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAxMzo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjgxOAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDM2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBhIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHNlZW1zIGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLiBJdCBsb29rcyBsaWtlIGBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUZgIGlzIGF1dG9tYXRpY2FsbHkgZW5hYmxlZCBieSBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIG9uIGEgYnVuY2ggb2YgYXJjaGl0ZWN0dXJlcyBJJiMzOTttIGZhbWlsaWFyIHdpdGgg4oCTIHg4Nl82NCwgYXJtNjQsIHJpc2N2LCBzMzkwLCBwb3dlcnBjLCBhbmQgbG9vbmdhcmNoLiBHb29kLCB0aGF0IHNpbXBsaWZpZXMgdGhpbmdzOyBJIGRvbiYjMzk7dCBuZWVkIHRvIHdvcnJ5IGFib3V0IGV4cGxpY2l0bHkgbGlzdGluZyB0aGF0IGNvbmZpZ3VyYXRpb24uCgpUaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGNlbnRlciBhcm91bmQgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gYFVTRVJGQVVMVEZEYCBhbmQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYC4gIE15IGF0dGVudGlvbiBpcyBkcmF3biB0byB0aGUgYG1vdmVfcGFnZXNfaHVnZV9wbWRgIGZ1bmN0aW9uLiBJdCBsb29rcyBsaWtlIGl0IGlzIGNydWNpYWwgZm9yIGVuYWJsaW5nIHRoZSBVRkZESU9fTU9WRSBpb2N0bCBwYXRoLgoKTGV0JiMzOTtzIGNvbmZpcm0gcmVhY2hhYmlsaXR5LiBZZXMsIGBtb3ZlX3BhZ2VzYCAqaXMqIGluZGVlZCByZWFjaGFibGUgdGhyb3VnaCB0aGUgYGlvY3RsKHVmZmQsIFVGRkRJT19NT1ZFLCAuLi4pYCBjYWxsLiBUaGlzIGNvbmZpcm1zIGl0LiBDcnVjaWFsbHksIGl0IHJlbGllcyBvbiBib3RoIGBVU0VSRkFVTFRGRGAgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgYmVpbmcgZW5hYmxlZC4KClNvLCBsZXQmIzM5O3Mgc3VtbWFyaXplIG15IGZpbmRpbmdzIG5lYXRseToKCiogICAqKldvcnRoRnV6emluZzogdHJ1ZSoqIC0gVGhpcyBsb29rcyBwcm9taXNpbmcuCiogICAqKkZvY3VzU3ltYm9sczogXFsmIzM0O21vdmVcX3BhZ2VzXF9odWdlXF9wbWQmIzM0O10qKiAtIFRoaXMgaXMgdGhlIHByaW1hcnkgZnVuY3Rpb24gdG8gdGFyZ2V0LgoqICAgKipFbmFibGVDb25maWdzOiBcWyYjMzQ7VVNFUkZBVUxURkQmIzM0OywgJiMzNDtUUkFOU1BBUkVOVFxfSFVHRVBBR0UmIzM0O10qKiAtIFRoZXNlIGFyZSB0aGUga2V5IGNvbmZpZ3VyYXRpb25zIHRoYXQgbmVlZCB0byBiZSBlbmFibGVkLgoqICAgKipSZWFzb25pbmc6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBtb3ZlX3BhZ2VzX2h1Z2VfcG1kYCB3aGVyZSBgcG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0YCB3YXMgaW5jb3JyZWN0bHkgY2FsbGVkIHdpdGggYSBwb2ludGVyIHRvIGEgbG9jYWwgdmFyaWFibGUgaW5zdGVhZCBvZiB0aGUgYWN0dWFsIFBNRCBwb2ludGVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHVzZXJmYXVsdGZkIFVGRkRJT19NT1ZFIGltcGxlbWVudGF0aW9uIGZvciB0cmFuc3BhcmVudCBodWdlcGFnZXMuJiMzNDsqKiAtIFRoaXMgZXhwbGFpbnMgdGhlIGZ1bmN0aW9uYWwgY29udGV4dCBhbmQgdGhlIG5hdHVyZSBvZiB0aGUgYnVnIGZpeC4KCk5vdywgYSBxdWljayB0aG91Z2h0OiBJcyB0aGVyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBkZXBlbmRlbmN5IEkgbWlnaHQgYmUgbWlzc2luZz8gSSByZWNhbGwgdGhhdCBgQ09ORklHX01JR1JBVElPTmAgaXMgbmVlZGVkIGZvciBgcG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0YCB0byBhY3R1YWxseSAqZG8qIHNvbWV0aGluZy4gSG93ZXZlciwgaXQmIzM5O3MgcHJldHR5IHViaXF1aXRvdXMgb3Igc2VsZWN0ZWQgYnkgb3RoZXIgc2V0dGluZ3MsIHNvIEkgc2hvdWxkIGRvdWJsZS1jaGVjayBgbW0vS2NvbmZpZ2AganVzdCB0byBiZSBjb21wbGV0ZWx5IHRob3JvdWdoLiBJdCYjMzk7cyBhIGdvb2QgcHJhY3RpY2UgdG8gdmVyaWZ5IHRoZXNlIGFzc3VtcHRpb25zLCBldmVuIHdoZW4gdGhleSBzZWVtIGxpa2VseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMTM6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1JR1JBVElPTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz02ODU9Y29uZmlnIE5VTUFfTUlHUkFUSU9OXG4tLVxubW0vS2NvbmZpZy02OTUtXG5tbS9LY29uZmlnOjY5Njpjb25maWcgTUlHUkFUSU9OXG5tbS9LY29uZmlnLTY5Ny1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMTM6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc4MTIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSb2xlIG9mIE1JR1JBVElPTiBpbiBNZW1vcnkgTWFuYWdlbWVudCoqCgpPa2F5LCBzbyBJJiMzOTttIHRha2luZyBhIGxvb2sgYXQgaG93IHRoaXMgYE1JR1JBVElPTmAgZmxhZyBmYWN0b3JzIGludG8gdGhlIHN5c3RlbS4gSXQmIzM5O3Mgb2Z0ZW4gaW5mbHVlbmNlZCBieSBjb21wb25lbnRzIGxpa2UgYE5VTUFgLCBgQ09NUEFDVElPTmAsIGBNRU1PUllfSE9UUExVR2AsIGFuZCBgQ01BYC4gSnVzdCB0byBiZSBzdXJlIEkmIzM5O3ZlIGdvdCBhIGNvbXBsZXRlIHBpY3R1cmUsIEkmIzM5O20gZ29pbmcgdG8gYWRkIGBNSUdSQVRJT05gIHRvIHRoYXQgbGlzdCBhcyBhIHBvdGVudGlhbCB0cmlnZ2VyLiBHb29kIHByYWN0aWNlIHRvIGJlIHRob3JvdWdoLgoKUmlnaHQsIG5vdywgSSBuZWVkIHRvIHBpbnBvaW50IHdoZXJlIHRoaXMgYE1JR1JBVElPTmAgbG9naWMgaXMgYWN0dWFsbHkgaW1wbGVtZW50ZWQuIExvb2tzIGxpa2UgYG1vdmVfcGFnZXNfaHVnZV9wbWRgIGlzIHRoZSBrZXkgZnVuY3Rpb24gYmVpbmcgbW9kaWZpZWQgaW4gdGhpcyBjb250ZXh0LiBBIHF1aWNrIHNlYXJjaCBjb25maXJtcyB0aGF0IGl0JiMzOTtzIHRoZSAqb25seSogZnVuY3Rpb24gdGhhdCYjMzk7cyBiZWVuIHRvdWNoZWQuCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGBtb3ZlX3BhZ2VzX2h1Z2VfcG1kYCBpdHNlbGYuIEkmIzM5O2xsIHB1bGwgaXQgdXAgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgIGFuZCBzZWUgd2hhdCBpdCYjMzk7cyByZWFsbHkgZG9pbmcuIFRpbWUgdG8gdW5kZXJzdGFuZCB0aGUgYWN0dWFsIG1lY2hhbmljcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMTM6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjc2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNzYwOlx0XG4yNzYxOlx0XHRzcmNfcG1kdmFsID0gKnNyY19wbWQ7XG4yNzYyOlx0XHRzcmNfcHRsID0gcG1kX2xvY2twdHIobW0sIHNyY19wbWQpO1xuMjc2MzpcdFxuMjc2NDpcdFx0bG9ja2RlcF9hc3NlcnRfaGVsZChzcmNfcHRsKTtcbjI3NjU6XHRcdHZtYV9hc3NlcnRfbG9ja2VkKHNyY192bWEpO1xuMjc2NjpcdFx0dm1hX2Fzc2VydF9sb2NrZWQoZHN0X3ZtYSk7XG4yNzY3Olx0XG4yNzY4Olx0XHQvKiBTYW5pdHkgY2hlY2tzIGJlZm9yZSB0aGUgb3BlcmF0aW9uICovXG4yNzY5Olx0XHRpZiAoV0FSTl9PTl9PTkNFKCFwbWRfbm9uZShkc3RfcG1kdmFsKSkgfHwgV0FSTl9PTl9PTkNFKHNyY19hZGRyIFx1MDAyNiB+SFBBR0VfUE1EX01BU0spIHx8XG4yNzcwOlx0XHQgICAgV0FSTl9PTl9PTkNFKGRzdF9hZGRyIFx1MDAyNiB+SFBBR0VfUE1EX01BU0spKSB7XG4yNzcxOlx0XHRcdHNwaW5fdW5sb2NrKHNyY19wdGwpO1xuMjc3MjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjI3NzM6XHRcdH1cbjI3NzQ6XHRcbjI3NzU6XHRcdGlmICghcG1kX3RyYW5zX2h1Z2Uoc3JjX3BtZHZhbCkpIHtcbjI3NzY6XHRcdFx0c3Bpbl91bmxvY2soc3JjX3B0bCk7XG4yNzc3Olx0XHRcdGlmIChwbWRfaXNfbWlncmF0aW9uX2VudHJ5KHNyY19wbWR2YWwpKSB7XG4yNzc4Olx0XHRcdFx0cG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0KG1tLCBzcmNfcG1kKTtcbjI3Nzk6XHRcdFx0XHRyZXR1cm4gLUVBR0FJTjtcbjI3ODA6XHRcdFx0fVxuMjc4MTpcdFx0XHRyZXR1cm4gLUVOT0VOVDtcbjI3ODI6XHRcdH1cbjI3ODM6XHRcbjI3ODQ6XHRcdHNyY19wYWdlID0gcG1kX3BhZ2Uoc3JjX3BtZHZhbCk7XG4yNzg1Olx0XG4yNzg2Olx0XHRpZiAoIWlzX2h1Z2VfemVyb19wbWQoc3JjX3BtZHZhbCkpIHtcbjI3ODc6XHRcdFx0aWYgKHVubGlrZWx5KCFQYWdlQW5vbkV4Y2x1c2l2ZShzcmNfcGFnZSkpKSB7XG4yNzg4Olx0XHRcdFx0c3Bpbl91bmxvY2soc3JjX3B0bCk7XG4yNzg5Olx0XHRcdFx0cmV0dXJuIC1FQlVTWTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMTM6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg2ODYKCQkJCQkJCW91dHB1dDogMTI5CgkJCQkJCQl0aG91Z2h0czogNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZywgZm9ybWF0dGVkIGFzIHJlcXVlc3RlZDoKCioqQnVnIEZpeCBhbmQgUmVtZWRpYXRpb24gVGhvdWdodHMqKgoKQWxyaWdodCwgbG9va2luZyBhdCB0aGlzIGNvZGUgc25pcHBldCwgSSBpbW1lZGlhdGVseSBzcG90IHRoZSBwcm9ibGVtLiBUaGUgY2hhbmdlIGhlcmUgaXMgcHJlY2lzZWx5IHRoaXM6CgpgYGBjCi0JCQlwbWRfbWlncmF0aW9uX2VudHJ5X3dhaXQobW0sICZhbXA7c3JjX3BtZHZhbCk7CiYjNDM7CQkJcG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0KG1tLCBzcmNfcG1kKTsKYGBgCgpUaGF0JiMzOTtzIGEgdGV4dGJvb2sgcG9pbnRlci10by1sb2NhbC12YXJpYWJsZSBpc3N1ZS4gV2Ugd2VyZSBwYXNzaW5nIHRoZSAqYWRkcmVzcyogb2YgYSBsb2NhbCB2YXJpYWJsZSwgYCZhbXA7c3JjX3BtZHZhbGAsIHdoaWNoIGxpa2VseSB3ZW50IG91dCBvZiBzY29wZSwgbGVhdmluZyBgcG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0YCBvcGVyYXRpbmcgb24gZ2FyYmFnZSBkYXRhIG9yIGEgbWVtb3J5IGxvY2F0aW9uIHRoYXQgY291bGQgYmUgb3ZlcndyaXR0ZW4gYXQgYW55IHRpbWUuIFRoZSBmaXggY29ycmVjdGx5IHBhc3NlcyB0aGUgcG9pbnRlciBgc3JjX3BtZGAgaXRzZWxmLCB3aGljaCwgSSBhc3N1bWUsIGlzIHByb3Blcmx5IG1hbmFnZWQuIFRoaXMgaXMgYSBzdHJhaWdodGZvcndhcmQsIGNyaXRpY2FsIGJ1ZyBmaXguIE5vIHJlYWwgc3VycHJpc2VzIGhlcmUsIGJ1dCBnb29kIHRvIGNhdGNoIGl0LiBJJiMzOTttIGdsYWQgdGhpcyB3YXMgaWRlbnRpZmllZCBhbmQgY29ycmVjdGVkLgoKR2l2ZW4gdGhhdCBjbGFyaXR5LCBJIGFtIG5vdyBnb2luZyB0byBwcm9jZWVkIGFuZCBleGVjdXRlIGBzZXQtcmVzdWx0c2AuIERvbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDEzOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVU0VSRkFVTFRGRCYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICAgJiMzNDtNSUdSQVRJT04mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttb3ZlX3BhZ2VzX2h1Z2VfcG1kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBtb3ZlX3BhZ2VzX2h1Z2VfcG1kYCB3aGVyZSBgcG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0YCB3YXMgaW5jb3JyZWN0bHkgY2FsbGVkIHdpdGggYSBwb2ludGVyIHRvIGEgbG9jYWwgdmFyaWFibGUgaW5zdGVhZCBvZiB0aGUgYWN0dWFsIFBNRCBwb2ludGVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHVzZXJmYXVsdGZkIFVGRkRJT19NT1ZFIGltcGxlbWVudGF0aW9uIGZvciB0cmFuc3BhcmVudCBodWdlcGFnZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTRVJGQVVMVEZEJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O01JR1JBVElPTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21vdmVfcGFnZXNfaHVnZV9wbWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYG1vdmVfcGFnZXNfaHVnZV9wbWRgIHdoZXJlIGBwbWRfbWlncmF0aW9uX2VudHJ5X3dhaXRgIHdhcyBpbmNvcnJlY3RseSBjYWxsZWQgd2l0aCBhIHBvaW50ZXIgdG8gYSBsb2NhbCB2YXJpYWJsZSBpbnN0ZWFkIG9mIHRoZSBhY3R1YWwgUE1EIHBvaW50ZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgdXNlcmZhdWx0ZmQgVUZGRElPX01PVkUgaW1wbGVtZW50YXRpb24gZm9yIHRyYW5zcGFyZW50IGh1Z2VwYWdlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDEzOjU2OjMzLjY2MjQ2ODI5NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0MDQ1MzgwMTYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTRVJGQVVMVEZEXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiTUlHUkFUSU9OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibW92ZV9wYWdlc19odWdlX3BtZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBtb3ZlX3BhZ2VzX2h1Z2VfcG1kYCB3aGVyZSBgcG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0YCB3YXMgaW5jb3JyZWN0bHkgY2FsbGVkIHdpdGggYSBwb2ludGVyIHRvIGEgbG9jYWwgdmFyaWFibGUgaW5zdGVhZCBvZiB0aGUgYWN0dWFsIFBNRCBwb2ludGVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHVzZXJmYXVsdGZkIFVGRkRJT19NT1ZFIGltcGxlbWVudGF0aW9uIGZvciB0cmFuc3BhcmVudCBodWdlcGFnZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDEzOjU2OjMzLjY2MjQ3MzgzNFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDExNjI0NTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgM2VjZWI5MjJlMzM0MTJkOTI4ODdiYzZjYzg4MGVlMmVmMTlmOGRlOVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIEp1bCA1IDEzOjU2OjMyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jXFxuaW5kZXggYmRkODYzNTkyMmY5NmQuLmMwODkyY2M1MzNhOWZjIDEwMDY0NFxcbi0tLSBhL21tL2h1Z2VfbWVtb3J5LmNcXG4rKysgYi9tbS9odWdlX21lbW9yeS5jXFxuQEAgLTI3NzUsNyArMjc3NSw3IEBAIGludCBtb3ZlX3BhZ2VzX2h1Z2VfcG1kKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqZHN0X3BtZCwgcG1kX3QgKnNyY19wbWQsIHBtXFxuIFxcdGlmICghcG1kX3RyYW5zX2h1Z2Uoc3JjX3BtZHZhbCkpIHtcXG4gXFx0XFx0c3Bpbl91bmxvY2soc3JjX3B0bCk7XFxuIFxcdFxcdGlmIChwbWRfaXNfbWlncmF0aW9uX2VudHJ5KHNyY19wbWR2YWwpKSB7XFxuLVxcdFxcdFxcdHBtZF9taWdyYXRpb25fZW50cnlfd2FpdChtbSwgXFx1MDAyNnNyY19wbWR2YWwpO1xcbitcXHRcXHRcXHRwbWRfbWlncmF0aW9uX2VudHJ5X3dhaXQobW0sIHNyY19wbWQpO1xcbiBcXHRcXHRcXHRyZXR1cm4gLUVBR0FJTjtcXG4gXFx0XFx0fVxcbiBcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMTM6NTY6MzQuMDc0ODg0MjYyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MzYzMjk1NDU4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0VSRkFVTFRGRFwiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIk1JR1JBVElPTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1vdmVfcGFnZXNfaHVnZV9wbWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgbW92ZV9wYWdlc19odWdlX3BtZGAgd2hlcmUgYHBtZF9taWdyYXRpb25fZW50cnlfd2FpdGAgd2FzIGluY29ycmVjdGx5IGNhbGxlZCB3aXRoIGEgcG9pbnRlciB0byBhIGxvY2FsIHZhcmlhYmxlIGluc3RlYWQgb2YgdGhlIGFjdHVhbCBQTUQgcG9pbnRlci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSB1c2VyZmF1bHRmZCBVRkZESU9fTU9WRSBpbXBsZW1lbnRhdGlvbiBmb3IgdHJhbnNwYXJlbnQgaHVnZXBhZ2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDNlY2ViOTIyZTMzNDEyZDkyODg3YmM2Y2M4ODBlZTJlZjE5ZjhkZTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEp1bCA1IDEzOjU2OjMyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmNcbmluZGV4IGJkZDg2MzU5MjJmOTZkLi5jMDg5MmNjNTMzYTlmYyAxMDA2NDRcbi0tLSBhL21tL2h1Z2VfbWVtb3J5LmNcbisrKyBiL21tL2h1Z2VfbWVtb3J5LmNcbkBAIC0yNzc1LDcgKzI3NzUsNyBAQCBpbnQgbW92ZV9wYWdlc19odWdlX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKmRzdF9wbWQsIHBtZF90ICpzcmNfcG1kLCBwbVxuIFx0aWYgKCFwbWRfdHJhbnNfaHVnZShzcmNfcG1kdmFsKSkge1xuIFx0XHRzcGluX3VubG9jayhzcmNfcHRsKTtcbiBcdFx0aWYgKHBtZF9pc19taWdyYXRpb25fZW50cnkoc3JjX3BtZHZhbCkpIHtcbi1cdFx0XHRwbWRfbWlncmF0aW9uX2VudHJ5X3dhaXQobW0sIFx1MDAyNnNyY19wbWR2YWwpO1xuK1x0XHRcdHBtZF9taWdyYXRpb25fZW50cnlfd2FpdChtbSwgc3JjX3BtZCk7XG4gXHRcdFx0cmV0dXJuIC1FQUdBSU47XG4gXHRcdH1cbiBcdFx0cmV0dXJuIC1FTk9FTlQ7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQxMzo1NjozNC4wNzQ4ODU3MzJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mjc5NDg5NzQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgZXhwZXJ0IHBlcnNwZWN0aXZlOlxuXG4qKlBhdGNoIEFuYWx5c2lzOiBBIFN1YnRsZSBidXQgUG90ZW50aWFsbHkgU2lnbmlmaWNhbnQgQ2hhbmdlKipcblxuQWxyaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0J3MgdHdlYWtpbmcgYG1tL2h1Z2VfbWVtb3J5LmNgLiBTcGVjaWZpY2FsbHksIHRoZXkncmUgbW9kaWZ5aW5nIHRoZSBjYWxsIHRvIGBwbWRfbWlncmF0aW9uX2VudHJ5X3dhaXRgIHdpdGhpbiB0aGUgYG1vdmVfcGFnZXNfaHVnZV9wbWRgIGZ1bmN0aW9uLiBJdCBzZWVtcyB0aGV5J3ZlIHN3aXRjaGVkIGZyb20gcGFzc2luZyB0aGUgYWRkcmVzcyBvZiBgc3JjX3BtZHZhbGAg4oCTIHRoYXQgaXMsIGBcdTAwMjZzcmNfcG1kdmFsYCDigJMgdG8gcGFzc2luZyB0aGUgYHNyY19wbWRgIHZhcmlhYmxlIGl0c2VsZiwgd2hpY2ggaXMgdmVyeSBsaWtlbHkgYSBgcG1kX3RgIHR5cGUuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpbW1lZGlhdGVseSBkaXZlIGludG8gYG1vdmVfcGFnZXNfaHVnZV9wbWRgIGFuZCB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuIFdoeSBhcmUgdGhleSBkaXJlY3RseSBwYXNzaW5nIHRoZSBgcG1kX3RgIG5vdz8gSXMgdGhpcyBhIHBvdGVudGlhbCBvcHRpbWl6YXRpb24/IE9yIHBlcmhhcHMgYSBmaXggZm9yIGEgc3VidGxlIHJhY2UgY29uZGl0aW9uIG9yIGFsaWdubWVudCBpc3N1ZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgcG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0YCBleHBlY3RzLCBhbmQgaG93IGl0J3MgYmVpbmcgdXNlZCB3aXRoaW4gdGhhdCBmdW5jdGlvbi5cblxuVGhlIG9sZCB3YXkgdXNpbmcgYSBwb2ludGVyIG1pZ2h0IGluZGljYXRlIHRoYXQgYHBtZF9taWdyYXRpb25fZW50cnlfd2FpdGAgaW50ZW5kZWQgdG8gbW9kaWZ5IHRoZSB2YWx1ZS4gUGFzc2luZyB0aGUgYHBtZF90YCBkaXJlY3RseSBvZnRlbiBpbXBsaWVzIHJlYWQtb25seSBhY2Nlc3MsIG9yIHBlcmhhcHMgdGhlIGZ1bmN0aW9uIG5vdyBoYW5kbGVzIHRoZSBhZGRyZXNzIGludGVybmFsbHkuIElzIHRoZXJlIGEgY2hhbmNlIHRoYXQgYSBwb3RlbnRpYWwgd3JpdGUgaW4gYSBwYXJhbGxlbCB0aHJlYWQsIGJldHdlZW4gcmVhZGluZyB0aGUgdmFsdWUgYW5kIHdhaXRpbmcgb24gaXQgY291bGQgaGF2ZSBjcmVhdGVkIGEgZmxhdz9cblxuSSdtIGtlZW4gdG8gdHJhY2UgaG93IGBzcmNfcG1kYCBpcyBiZWluZyBpbml0aWFsaXplZCBhbmQgdXNlZCBiZWZvcmUgdGhlIGZ1bmN0aW9uIGNhbGwsIGFuZCB3aGF0J3MgaGFwcGVuaW5nICppbnNpZGUqIGBwbWRfbWlncmF0aW9uX2VudHJ5X3dhaXRgIHRvIGRldGVybWluZSB0aGUgZXhhY3QgaW1wYWN0IG9mIHRoaXMgYWRqdXN0bWVudC4gQW55IGNoYW5nZSBpbiBsb2NraW5nIG9yIG1lbW9yeSBhY2Nlc3MgcGF0dGVybnMgaGVyZSBjb3VsZCBiZSBwcmV0dHkgaW1wYWN0ZnVsLiBUaGlzIG5lZWRzIGEgdGhvcm91Z2ggcmV2aWV3LiBJIG5lZWQgdG8gbG9vayBhdCBib3RoIHRoZSBjYWxsZXIgYW5kIHRoZSBjYWxsZWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NjcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDEzOjU2OjM4LjM1NDM3NzM4OFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjU4NDc2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtb3ZlX3BhZ2VzX2h1Z2VfcG1kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2h1Z2VfbWVtb3J5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZV9tZW1vcnkuYz0yNzAyPWludCBjaGFuZ2VfaHVnZV9wdWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTI3NDgtICovXFxubW0vaHVnZV9tZW1vcnkuYzoyNzQ5OmludCBtb3ZlX3BhZ2VzX2h1Z2VfcG1kKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqZHN0X3BtZCwgcG1kX3QgKnNyY19wbWQsIHBtZF90IGRzdF9wbWR2YWwsXFxubW0vaHVnZV9tZW1vcnkuYy0yNzUwLVxcdFxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmNfdm1hLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQxMzo1NjozOC40MTY5Njg2MzNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDI2ODM2OTIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6XG5cbioqRGl2aW5nIGludG8gYG1vdmVfcGFnZXNfaHVnZV9wbWRgKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gaXQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbiBgbW92ZV9wYWdlc19odWdlX3BtZGAuIEJlZm9yZSBJIGNhbiBtYWtlIGFueSBtZWFuaW5nZnVsIGFzc2Vzc21lbnQsIEkgbmVlZCB0byBwbGFjZSB0aGlzIGZ1bmN0aW9uIHdpdGhpbiBpdHMgb3ZlcmFsbCBjb250ZXh0LiBJIGtub3cgdGhpcyBpcyBhIGNyaXRpY2FsIGxvdy1sZXZlbCBmdW5jdGlvbiByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgZGVhbGluZyB3aXRoIGh1Z2UgcGFnZXMgYW5kIHBvdGVudGlhbGx5IFBNRHMgKFBhZ2UgTWlkZGxlIERpcmVjdG9yaWVzKS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgdGhlIHVzZSBjYXNlKHMpIGl0IGFkZHJlc3NlcyB3aXRoaW4gYSBzeXN0ZW0uIEkgbmVlZCB0byBrbm93IHdoeSBtb3ZpbmcgcGFnZXMsIGFuZCBlc3BlY2lhbGx5IGh1Z2UgcGFnZXMsIHdvdWxkIGJlIG5lY2Vzc2FyeS4gSXMgaXQgZm9yIE5VTUEgYmFsYW5jaW5nPyBNZW1vcnkgaG90cGx1Z2dpbmc/IER5bmFtaWMgbWVtb3J5IGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uIG9wdGltaXphdGlvbj8gRGF0YSBtaWdyYXRpb24gZHVyaW5nIGxpdmUgc3lzdGVtIHVwZGF0ZXM/IFRoZSBzcGVjaWZpYyBmdW5jdGlvbiBvZiB0aGlzIHBpZWNlIGRlcGVuZHMgaGVhdmlseSBvbiBpdHMgZGVzaWduIGZvciB0aGVzZSBsYXJnZXIgZ29hbHMuIEkgbXVzdCB1bmRlcnN0YW5kIHRoZSBpbnRlbmRlZCBwdXJwb3NlIHRvIHBhcnNlIGhvdyB0aGUgY29kZSBhY2hpZXZlcyBpdCBhbmQgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBjbGV2ZXIgb3B0aW1pemF0aW9ucyBpdCBlbXBsb3lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTYwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMTM6NTY6NDEuNDQzODA3NDA0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM0MDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2h1Z2VfbWVtb3J5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjc0NSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjc0NTpcXHQgKiBKdXN0IG1vdmUgdGhlIHBhZ2UgZnJvbSBzcmNfcG1kIHRvIGRzdF9wbWQgaWYgcG9zc2libGUuXFxuMjc0NjpcXHQgKiBSZXR1cm4gemVybyBpZiBzdWNjZWVkZWQgaW4gbW92aW5nIHRoZSBwYWdlLCAtRUFHQUlOIGlmIGl0IG5lZWRzIHRvIGJlXFxuMjc0NzpcXHQgKiByZXBlYXRlZCBieSB0aGUgY2FsbGVyLCBvciBvdGhlciBlcnJvcnMgaW4gY2FzZSBvZiBmYWlsdXJlLlxcbjI3NDg6XFx0ICovXFxuMjc0OTpcXHRpbnQgbW92ZV9wYWdlc19odWdlX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKmRzdF9wbWQsIHBtZF90ICpzcmNfcG1kLCBwbWRfdCBkc3RfcG1kdmFsLFxcbjI3NTA6XFx0XFx0XFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnNyY192bWEsXFxuMjc1MTpcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGRzdF9hZGRyLCB1bnNpZ25lZCBsb25nIHNyY19hZGRyKVxcbjI3NTI6XFx0e1xcbjI3NTM6XFx0XFx0cG1kX3QgX2RzdF9wbWQsIHNyY19wbWR2YWw7XFxuMjc1NDpcXHRcXHRzdHJ1Y3QgcGFnZSAqc3JjX3BhZ2U7XFxuMjc1NTpcXHRcXHRzdHJ1Y3QgZm9saW8gKnNyY19mb2xpbztcXG4yNzU2OlxcdFxcdHNwaW5sb2NrX3QgKnNyY19wdGwsICpkc3RfcHRsO1xcbjI3NTc6XFx0XFx0cGd0YWJsZV90IHNyY19wZ3RhYmxlO1xcbjI3NTg6XFx0XFx0c3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSByYW5nZTtcXG4yNzU5OlxcdFxcdGludCBlcnIgPSAwO1xcbjI3NjA6XFx0XFxuMjc2MTpcXHRcXHRzcmNfcG1kdmFsID0gKnNyY19wbWQ7XFxuMjc2MjpcXHRcXHRzcmNfcHRsID0gcG1kX2xvY2twdHIobW0sIHNyY19wbWQpO1xcbjI3NjM6XFx0XFxuMjc2NDpcXHRcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKHNyY19wdGwpO1xcbjI3NjU6XFx0XFx0dm1hX2Fzc2VydF9sb2NrZWQoc3JjX3ZtYSk7XFxuMjc2NjpcXHRcXHR2bWFfYXNzZXJ0X2xvY2tlZChkc3Rfdm1hKTtcXG4yNzY3OlxcdFxcbjI3Njg6XFx0XFx0LyogU2FuaXR5IGNoZWNrcyBiZWZvcmUgdGhlIG9wZXJhdGlvbiAqL1xcbjI3Njk6XFx0XFx0aWYgKFdBUk5fT05fT05DRSghcG1kX25vbmUoZHN0X3BtZHZhbCkpIHx8IFdBUk5fT05fT05DRShzcmNfYWRkciBcXHUwMDI2IH5IUEFHRV9QTURfTUFTSykgfHxcXG4yNzcwOlxcdFxcdCAgICBXQVJOX09OX09OQ0UoZHN0X2FkZHIgXFx1MDAyNiB+SFBBR0VfUE1EX01BU0spKSB7XFxuMjc3MTpcXHRcXHRcXHRzcGluX3VubG9jayhzcmNfcHRsKTtcXG4yNzcyOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjI3NzM6XFx0XFx0fVxcbjI3NzQ6XFx0XFxuMjc3NTpcXHRcXHRpZiAoIXBtZF90cmFuc19odWdlKHNyY19wbWR2YWwpKSB7XFxuMjc3NjpcXHRcXHRcXHRzcGluX3VubG9jayhzcmNfcHRsKTtcXG4yNzc3OlxcdFxcdFxcdGlmIChwbWRfaXNfbWlncmF0aW9uX2VudHJ5KHNyY19wbWR2YWwpKSB7XFxuMjc3ODpcXHRcXHRcXHRcXHRwbWRfbWlncmF0aW9uX2VudHJ5X3dhaXQobW0sIHNyY19wbWQpO1xcbjI3Nzk6XFx0XFx0XFx0XFx0cmV0dXJuIC1FQUdBSU47XFxuMjc4MDpcXHRcXHRcXHR9XFxuMjc4MTpcXHRcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4yNzgyOlxcdFxcdH1cXG4yNzgzOlxcdFxcbjI3ODQ6XFx0XFx0c3JjX3BhZ2UgPSBwbWRfcGFnZShzcmNfcG1kdmFsKTtcXG4yNzg1OlxcdFxcbjI3ODY6XFx0XFx0aWYgKCFpc19odWdlX3plcm9fcG1kKHNyY19wbWR2YWwpKSB7XFxuMjc4NzpcXHRcXHRcXHRpZiAodW5saWtlbHkoIVBhZ2VBbm9uRXhjbHVzaXZlKHNyY19wYWdlKSkpIHtcXG4yNzg4OlxcdFxcdFxcdFxcdHNwaW5fdW5sb2NrKHNyY19wdGwpO1xcbjI3ODk6XFx0XFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4yNzkwOlxcdFxcdFxcdH1cXG4yNzkxOlxcdFxcbjI3OTI6XFx0XFx0XFx0c3JjX2ZvbGlvID0gcGFnZV9mb2xpbyhzcmNfcGFnZSk7XFxuMjc5MzpcXHRcXHRcXHRmb2xpb19nZXQoc3JjX2ZvbGlvKTtcXG4yNzk0OlxcdFxcdH0gZWxzZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQxMzo1Njo0MS40NDQwNDMyOTRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjMwNjgxMjg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUE1EIE1pZ3JhdGlvbiBCdWcgRml4KipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBwb2ludGluZyBvdXQgYSBwcmV0dHkgc2lnbmlmaWNhbnQgYnVnLiBJdCBzZWVtcyB0aGF0IHRoZSBgcG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0YCBmdW5jdGlvbiB3YXMgYmVpbmcgY2FsbGVkIHdpdGggYSBsb2NhbCB2YXJpYWJsZSwgYHNyY19wbWR2YWxgLCBpbnN0ZWFkIG9mIHRoZSBpbnRlbmRlZCBgc3JjX3BtZGAgcG9pbnRlci4gVGhhdCdzIGEgY2xhc3NpYyBwb2ludGVyIG1pc2hhcCwgYW5kIGEgZmFpcmx5IHNlcmlvdXMgb25lLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIGFsbCBzb3J0cyBvZiBtZW1vcnkgY29ycnVwdGlvbiBvciBpbmNvcnJlY3QgYmVoYXZpb3IuIFNpbmNlIHRoaXMgaXMgYSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9uLCB0aGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IG5lZWRzIGNhcmVmdWwgcmV2aWV3LiBSaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBgcG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0YCBmdW5jdGlvbiBpdHNlbGYgYW5kIHNlZSBob3cgdGhpcyBpbmNvcnJlY3QgcG9pbnRlciB3YXMgYmVpbmcgdXNlZCBhbmQgd2hhdCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBmaXggYXJlLiBUaGlzIGtpbmQgb2YgbWlzdGFrZSBjYW4gaGF2ZSBzdWJ0bGUgYnV0IGRldmFzdGF0aW5nIGVmZmVjdHMsIHNvIGxldCdzIG1ha2Ugc3VyZSB3ZSBmdWxseSB1bmRlcnN0YW5kIHRoZSByYW1pZmljYXRpb25zIG9mIHRoaXMgcGF0Y2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3MDIsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDEzOjU2OjQ0LjY3NDcyNjk4OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODQ4Nzc0MjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBtZF9taWdyYXRpb25fZW50cnlfd2FpdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg9MzI4PWV4dGVybiB2b2lkIHJlbW92ZV9taWdyYXRpb25fcG1kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcXG4tLVxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTMzMC1cXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaDozMzE6ZXh0ZXJuIHZvaWQgcG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kKTtcXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0zMzItXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaD0zNDg9c3RhdGljIGlubGluZSB2b2lkIHJlbW92ZV9taWdyYXRpb25fcG1kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcXG4tLVxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTM1My1cXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaDozNTQ6c3RhdGljIGlubGluZSB2b2lkIHBtZF9taWdyYXRpb25fZW50cnlfd2FpdChzdHJ1Y3QgbW1fc3RydWN0ICptLCBwbWRfdCAqcCkgeyB9XFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzU1LVxcbi0tXFxubW0vaG1tLmM9Mzk2PXN0YXRpYyBpbnQgaG1tX3ZtYV93YWxrX3BtZChwbWRfdCAqcG1kcCxcXG4tLVxcbm1tL2htbS5jLTQxNy1cXHRcXHRcXHRobW1fdm1hX3dhbGstXFx1MDAzZWxhc3QgPSBhZGRyO1xcbm1tL2htbS5jOjQxODpcXHRcXHRcXHRwbWRfbWlncmF0aW9uX2VudHJ5X3dhaXQod2Fsay1cXHUwMDNlbW0sIHBtZHApO1xcbm1tL2htbS5jLTQxOS1cXHRcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0yNzQ5PWludCBtb3ZlX3BhZ2VzX2h1Z2VfcG1kKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqZHN0X3BtZCwgcG1kX3QgKnNyY19wbWQsIHBtZF90IGRzdF9wbWR2YWwsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTI3NzctXFx0XFx0aWYgKHBtZF9pc19taWdyYXRpb25fZW50cnkoc3JjX3BtZHZhbCkpIHtcXG5tbS9odWdlX21lbW9yeS5jOjI3Nzg6XFx0XFx0XFx0cG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0KG1tLCBzcmNfcG1kKTtcXG5tbS9odWdlX21lbW9yeS5jLTI3NzktXFx0XFx0XFx0cmV0dXJuIC1FQUdBSU47XFxuLS1cXG5tbS9tZW1vcnkuYz02NDEwPXN0YXRpYyB2bV9mYXVsdF90IF9faGFuZGxlX21tX2ZhdWx0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vbWVtb3J5LmMtNjQ4Ny1cXHRcXHRpZiAocG1kX2lzX21pZ3JhdGlvbl9lbnRyeSh2bWYub3JpZ19wbWQpKVxcbm1tL21lbW9yeS5jOjY0ODg6XFx0XFx0XFx0cG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0KG1tLCB2bWYucG1kKTtcXG5tbS9tZW1vcnkuYy02NDg5LVxcdFxcdHJldHVybiAwO1xcbi0tXFxubW0vbWlncmF0ZS5jPTUxNj12b2lkIG1pZ3JhdGlvbl9lbnRyeV93YWl0X2h1Z2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApXFxuLS1cXG5tbS9taWdyYXRlLmMtNTQ4LSNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUZcXG5tbS9taWdyYXRlLmM6NTQ5OnZvaWQgcG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kKVxcbm1tL21pZ3JhdGUuYy01NTAte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQxMzo1Njo0Ni41MjM1MDYyMjlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjI1NDU0MzI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBtb3ZlX3BhZ2VzX2h1Z2VfcG1kYCBDYWxsIENoYWluKipcblxuSG1tLCBzbyBgbW92ZV9wYWdlc19odWdlX3BtZGAgaXMgdGhlIGZ1bmN0aW9uIG9mIGludGVyZXN0LiBJIGtub3cgaXQncyBpbnZvbHZlZCBpbiBtb3ZpbmcgaHVnZSBwYWdlcywgYnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gdGhlIG90aGVyIHBhZ2UgbWlncmF0aW9uIGZ1bmN0aW9ucywgc3BlY2lmaWNhbGx5IGBtb3ZlX3BhZ2VzX3B0ZWAgYW5kIGBtb3ZlX3BhZ2VfdGFibGVzYC4gUmlnaHQsIHRoZSBjb3JlIHF1ZXN0aW9uIGlzICpob3cqIGlzIGBtb3ZlX3BhZ2VzX2h1Z2VfcG1kYCBjYWxsZWQ/IElzIGl0IGEgZGlyZWN0IGVudHJ5IHBvaW50LCBvciBkb2VzIGl0IGdldCBpbnZva2VkIGJ5IHRob3NlIG90aGVyIHJvdXRpbmVzPyBUaGUgYmVzdCB3YXkgdG8gdW5kZXJzdGFuZCB0aGlzIGlzIHRvIGNoZWNrIHRoZSAqY2FsbGVycyogb2YgYG1vdmVfcGFnZXNfaHVnZV9wbWRgLiBGaW5kaW5nIG91dCB3aGF0IGZ1bmN0aW9ucyBkaXJlY3RseSBjYWxsIGl0IHdpbGwgaWxsdW1pbmF0ZSB0aGUgY29udHJvbCBmbG93IGFuZCBsZXQgbWUgdW5kZXJzdGFuZCBpdHMgcGxhY2UgaW4gdGhlIGJyb2FkZXIgbWlncmF0aW9uIHN0cmF0ZWd5LiBHb3R0YSBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyByb2xlLiBUaW1lIHRvIGRpZyBpbiFcblxuXG4iLCJJbnB1dFRva2VucyI6NDY5MywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDEzOjU2OjQ5Ljc0ODk2MjMxNVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk3ODMwNjYxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtb3ZlX3BhZ2VzX2h1Z2VfcG1kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaD0xNTU9dm9pZCBkb3VibGVfcHRfdW5sb2NrKHNwaW5sb2NrX3QgKnB0bDEsIHNwaW5sb2NrX3QgKnB0bDIpO1xcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oOjE1NjppbnQgbW92ZV9wYWdlc19odWdlX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKmRzdF9wbWQsIHBtZF90ICpzcmNfcG1kLCBwbWRfdCBkc3RfcG1kdmFsLFxcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oLTE1Ny1cXHRcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdF92bWEsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTI3MDI9aW50IGNoYW5nZV9odWdlX3B1ZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMjc0OC0gKi9cXG5tbS9odWdlX21lbW9yeS5jOjI3NDk6aW50IG1vdmVfcGFnZXNfaHVnZV9wbWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpkc3RfcG1kLCBwbWRfdCAqc3JjX3BtZCwgcG1kX3QgZHN0X3BtZHZhbCxcXG5tbS9odWdlX21lbW9yeS5jLTI3NTAtXFx0XFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnNyY192bWEsXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jPTE5MzQ9c3RhdGljIHNzaXplX3QgbW92ZV9wYWdlcyhzdHJ1Y3QgdXNlcmZhdWx0ZmRfY3R4ICpjdHgsIHVuc2lnbmVkIGxvbmcgZHN0X3N0YXJ0LFxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0yMDE0LVxcdFxcdCAqIGJlIHN0cmljdC4gSWYgZHN0X3BtZCBjaGFuZ2VzIGludG8gVFBIIGFmdGVyIHRoaXMgY2hlY2ssIHRoZVxcbm1tL3VzZXJmYXVsdGZkLmM6MjAxNTpcXHRcXHQgKiBtb3ZlX3BhZ2VzX2h1Z2VfcG1kKCkgd2lsbCBkZXRlY3QgdGhlIGNoYW5nZSBhbmQgcmV0cnlcXG5tbS91c2VyZmF1bHRmZC5jLTIwMTYtXFx0XFx0ICogd2hpbGUgbW92ZV9wYWdlc19wdGUoKSB3aWxsIGRldGVjdCB0aGUgY2hhbmdlIGFuZCBmYWlsLlxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0yMDQ1LVxcbm1tL3VzZXJmYXVsdGZkLmM6MjA0NjpcXHRcXHRcXHRlcnIgPSBtb3ZlX3BhZ2VzX2h1Z2VfcG1kKG1tLCBkc3RfcG1kLCBzcmNfcG1kLFxcbm1tL3VzZXJmYXVsdGZkLmMtMjA0Ny1cXHRcXHRcXHRcXHRcXHRcXHQgIGRzdF9wbWR2YWwsIGRzdF92bWEsIHNyY192bWEsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDEzOjU2OjUxLjcyNzI3NzE1NVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjQ4NzE3ODQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIENvcmUgTWVtb3J5IE1hbmFnZW1lbnQgQnVnKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIEkgcmVjb2duaXplIHRoZSBhcmVhLiBUaGlzIGhhcyB0byBkbyB3aXRoIGhvdyBgdXNlcmZhdWx0ZmRgIGFuZCBgbW92ZV9wYWdlc2AgaW50ZXJhY3QsIHNwZWNpZmljYWxseSB3aXRoIHRoZSBgVUZGRElPX01PVkVgIG9wZXJhdGlvbiwgd2hpY2ggdXRpbGl6ZXMgYG1vdmVfcGFnZXNfaHVnZV9wbWRgLiBHb3QgaXQuIFRoaXMgaXMgZGVmaW5pdGVseSBhIGNyaXRpY2FsIHBhdGgsIGEgZnVuY3Rpb24gdGhhdCdzIGRlZmluaXRlbHkgdXNlZCBhbmQgcmVhY2hhYmxlLlxuXG5Ob3csIHRoZSBjb3JlIG9mIHRoZSBwcm9ibGVtLi4uIGl0IGxvb2tzIGxpa2UgdGhleSdyZSBjaGFuZ2luZyBgcG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0KG1tLCBcdTAwMjZzcmNfcG1kdmFsKWAgdG8gYHBtZF9taWdyYXRpb25fZW50cnlfd2FpdChtbSwgc3JjX3BtZClgLiBBbmQgKnRoYXQqIGlzIHRoZSBrZXkuIFRoZXkncmUgcGFzc2luZyB0aGUgKmFkZHJlc3MqIG9mIGEgbG9jYWwgdmFyaWFibGUsIGBzcmNfcG1kdmFsYCwgdG8gYSBmdW5jdGlvbiB0aGF0J3Mgc3VwcG9zZWQgdG8gd2FpdCBvbiBhIG1pZ3JhdGlvbiBlbnRyeS4gV2FpdGluZyBvbiBhIHN0YWNrIGFkZHJlc3M/IFRoYXQncyBqdXN0IGFza2luZyBmb3IgdHJvdWJsZSEgVGhhdCdzIGFsbW9zdCBjZXJ0YWlubHkgdGhlIHJvb3QgY2F1c2Ugb2YgYW55IGNyYXNoIG9yIGhhbmcgdGhleSdyZSBzZWVpbmcuIEl0J3MgaW5jb3JyZWN0LiBJIGNhbiBzZWUgd2h5LiBQYXNzaW5nIGBzcmNfcG1kYCwgd2hpY2ggaXMgdGhlIGFjdHVhbCBwYWdlIG1hcCBkZXNjcmlwdG9yLCBpcyB0aGUgY29ycmVjdCBmaXguXG5cbkxldCBtZSBqdXN0IHF1aWNrbHkgdmVyaWZ5IHRoYXQgYENPTkZJR19VU0VSRkFVTFRGRGAsIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBhbmQgYENPTkZJR19NSUdSQVRJT05gIGFyZSBhbGwgZW5hYmxlZC4gVGhhdCBtYWtlcyB0aGUgY29udGV4dCBjbGVhci4gVGhpcyBpcyBwcmVjaXNlbHkgd2hlcmUgSSdkIGV4cGVjdCB0byBzZWUgdGhpcyBraW5kIG9mIGlzc3VlIGFyaXNlIHdpdGggdGhvc2UgY29uZmlndXJhdGlvbnMgaW4gcGxhY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0OTUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMTM6NTY6NTYuMzc1OTk3NzQzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzg0NzcwMDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW92ZV9wYWdlc19odWdlX3BtZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9odWdlX21lbW9yeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2VfbWVtb3J5LmM9MjcwMj1pbnQgY2hhbmdlX2h1Z2VfcHVkKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0yNzQ4LSAqL1xcbm1tL2h1Z2VfbWVtb3J5LmM6Mjc0OTppbnQgbW92ZV9wYWdlc19odWdlX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKmRzdF9wbWQsIHBtZF90ICpzcmNfcG1kLCBwbWRfdCBkc3RfcG1kdmFsLFxcbm1tL2h1Z2VfbWVtb3J5LmMtMjc1MC1cXHRcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdF92bWEsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3JjX3ZtYSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMTM6NTY6NTYuNzE0NDc4OTM3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNTI2ODEzMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiB0aGlzIGFyZWE6XG5cbioqQ2hlY2tpbmcgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gb2YgYG1vdmVfcGFnZXNfaHVnZV9wbWRgKipcblxuQWxyaWdodCwgSSdtIHF1aWNrbHkgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYG1vdmVfcGFnZXNfaHVnZV9wbWRgIGlzIGRlZmluZWQgYW5kIGhvdyBpdCByZWxhdGVzIHRvIFRyYW5zcGFyZW50IEh1Z2VwYWdlcy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiSXMgdGhpcyBmdW5jdGlvbiBldmVuICphdmFpbGFibGUqIHVubGVzcyBUcmFuc3BhcmVudCBIdWdlcGFnZXMgYXJlIGVuYWJsZWQ/XCIgU28sIEknbSBnb2luZyBzdHJhaWdodCB0byB0aGUgc291cmNlIGNvZGUsIHNwZWNpZmljYWxseSBgbW0vaHVnZV9tZW1vcnkuY2AuIEdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0sIHRoZSBleGlzdGVuY2Ugb2YgdGhhdCBmaWxlIGlzLCBpbiBpdHNlbGYsIGEgc3Ryb25nIGluZGljYXRvci4gSXQgbWFrZXMgc2Vuc2UsIGFzIHRoZSBodWdlIHBhZ2UgY29kZSB3b3VsZCBiZSBpbiBhIHNlcGFyYXRlIGNvbXBpbGF0aW9uIHVuaXQuIEJ1dCwgSSBuZWVkIGNvbmZpcm1hdGlvbi4gSSdtIGltcGxpY2l0bHkgcmVhc29uaW5nIHRoYXQgaWYgYG1tL2h1Z2VfbWVtb3J5LmNgIGlzIGNvbXBpbGVkIGJhc2VkIG9uIHRoZSBgI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgbWFjcm8sIHRoZW4gYG1vdmVfcGFnZXNfaHVnZV9wbWRgIHdpbGwgb25seSBiZSBhY2Nlc3NpYmxlIGlmIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIGVuYWJsZWQuIFRpbWUgdG8gY29uZmlybSBhbmQgdGhlbiBJIHdpbGwga25vdyBtb3JlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTg1LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMTM6NTc6MDAuMDY3MTYyMTAzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjI2MTI5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJodWdlX21lbW9yeS5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTEwMD1vYmotJChDT05GSUdfREVWSUNFX01JR1JBVElPTikgKz0gbWlncmF0ZV9kZXZpY2Uub1xcbm1tL01ha2VmaWxlOjEwMTpvYmotJChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpICs9IGh1Z2VfbWVtb3J5Lm8ga2h1Z2VwYWdlZC5vXFxubW0vTWFrZWZpbGUtMTAyLW9iai0kKENPTkZJR19QQUdFX0NPVU5URVIpICs9IHBhZ2VfY291bnRlci5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDEzOjU3OjAwLjEyOTQyODE0OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTk1MzQ1OTAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipEZXBlbmRlbmNpZXMgYW5kIFVzYWdlIG9mIFRyYW5zcGFyZW50IEh1Z2VwYWdlcyBhbmQgVXNlcmZhdWx0ZmQqKlxuXG5SaWdodCwgc28gdG8gbWFrZSB0aGlzIHdvcmssIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gY29uZmlybSBpcyB0aGF0IGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIGFic29sdXRlbHkgZXNzZW50aWFsLiBUaGF0J3MgYSBnaXZlbi4gQW5kIG9mIGNvdXJzZSwgdG8gbGV2ZXJhZ2UgYG1vdmVfcGFnZXNgIHRvIGFjdHVhbGx5ICpyZWFjaCogdGhvc2UgaHVnZXBhZ2VzLCBgQ09ORklHX1VTRVJGQVVMVEZEYCBpcyBhbHNvIGEgaGFyZCByZXF1aXJlbWVudC4gSSBuZWVkIGJvdGggb2YgdGhvc2Uga2VybmVsIGZlYXR1cmVzLlxuXG5Ob3csIEknbSBqdXN0IGN1cmlvdXMgYWJvdXQgc29tZXRoaW5nIC0gSSBzaG91bGQgZG91YmxlLWNoZWNrIGFuZCBtYWtlIHN1cmUgdGhhdCBgbW92ZV9wYWdlc19odWdlX3BtZGAgaXNuJ3QgY2FsbGVkIGZyb20gb3RoZXIgcGxhY2VzIGJlc2lkZXMgd2hlcmUgSSBleHBlY3QgaXQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBmdWxsIHNjb3BlIG9mIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2MDYsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQxMzo1NzowMy4xMjQ3NzYyMTJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NzgxNTMwMjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW92ZV9wYWdlc19odWdlX3BtZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmg9MTU1PXZvaWQgZG91YmxlX3B0X3VubG9jayhzcGlubG9ja190ICpwdGwxLCBzcGlubG9ja190ICpwdGwyKTtcXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaDoxNTY6aW50IG1vdmVfcGFnZXNfaHVnZV9wbWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpkc3RfcG1kLCBwbWRfdCAqc3JjX3BtZCwgcG1kX3QgZHN0X3BtZHZhbCxcXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaC0xNTctXFx0XFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0yNzAyPWludCBjaGFuZ2VfaHVnZV9wdWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTI3NDgtICovXFxubW0vaHVnZV9tZW1vcnkuYzoyNzQ5OmludCBtb3ZlX3BhZ2VzX2h1Z2VfcG1kKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqZHN0X3BtZCwgcG1kX3QgKnNyY19wbWQsIHBtZF90IGRzdF9wbWR2YWwsXFxubW0vaHVnZV9tZW1vcnkuYy0yNzUwLVxcdFxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmNfdm1hLFxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYz0xOTM0PXN0YXRpYyBzc2l6ZV90IG1vdmVfcGFnZXMoc3RydWN0IHVzZXJmYXVsdGZkX2N0eCAqY3R4LCB1bnNpZ25lZCBsb25nIGRzdF9zdGFydCxcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtMjAxNC1cXHRcXHQgKiBiZSBzdHJpY3QuIElmIGRzdF9wbWQgY2hhbmdlcyBpbnRvIFRQSCBhZnRlciB0aGlzIGNoZWNrLCB0aGVcXG5tbS91c2VyZmF1bHRmZC5jOjIwMTU6XFx0XFx0ICogbW92ZV9wYWdlc19odWdlX3BtZCgpIHdpbGwgZGV0ZWN0IHRoZSBjaGFuZ2UgYW5kIHJldHJ5XFxubW0vdXNlcmZhdWx0ZmQuYy0yMDE2LVxcdFxcdCAqIHdoaWxlIG1vdmVfcGFnZXNfcHRlKCkgd2lsbCBkZXRlY3QgdGhlIGNoYW5nZSBhbmQgZmFpbC5cXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtMjA0NS1cXG5tbS91c2VyZmF1bHRmZC5jOjIwNDY6XFx0XFx0XFx0ZXJyID0gbW92ZV9wYWdlc19odWdlX3BtZChtbSwgZHN0X3BtZCwgc3JjX3BtZCxcXG5tbS91c2VyZmF1bHRmZC5jLTIwNDctXFx0XFx0XFx0XFx0XFx0XFx0ICBkc3RfcG1kdmFsLCBkc3Rfdm1hLCBzcmNfdm1hLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQxMzo1NzowNC45MDI5MzU4NjdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcxMjAxODM1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGRpc3RpbGxlZCB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpczpcblxuKipOYXJyb3dpbmcgdGhlIFNjb3BlOiBVRkZEIGFuZCBIdWdlIFBhZ2VzKipcblxuT2theSwgdGhpcyBsb29rcyBsaWtlIGEgdGFyZ2V0ZWQgaW52ZXN0aWdhdGlvbi4gSSdtIHNlZWluZyB0aGlzIGlzIGFsbCBhYm91dCBgbW0vdXNlcmZhdWx0ZmQuY2AsIHNvIEknbSBpbW1lZGlhdGVseSBob21pbmcgaW4gb24gdGhlIGludGVyYWN0aW9uIGJldHdlZW4gVXNlcmZhdWx0ZmQgKFVGRkQpIGFuZCBsaWtlbHkgVHJhbnNwYXJlbnQgSHVnZVBhZ2VzIChUSFApLiBNeSBicmFpbidzIGFscmVhZHkgZmxhc2hpbmcgb24gdGhvc2Uga2V5IGNvbmZpZyBvcHRpb25zOiBgQ09ORklHX1VTRVJGQVVMVEZEYCBhbmQgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGVzZSB0d28gc3lzdGVtcyBhcmUgd29ya2luZyAob3IgcG90ZW50aWFsbHkgZmFpbGluZyB0byB3b3JrKSB0b2dldGhlci4gTXkgaW5zdGluY3QgaXMgdGhhdCB0aGUgYG1vdmVfcGFnZXNfaHVnZV9wbWRgIGZ1bmN0aW9uIGlzIHRoZSBwbGFjZSB0byBzdGFydC4gVGhhdCBsb29rcyBsaWtlIHRoZSBjb3JlIHdvcmssIG1vdmluZyB0aGUgbGFyZ2UgcGFnZXMuXG5cbkknbGwgcXVpY2tseSBjb25maXJtIHRoYXQgYG1vdmVfcGFnZXNgIGluIGBtbS91c2VyZmF1bHRmZC5jYCBpcyBzdGF0aWMuIEFscmlnaHQsIGp1c3QgYXMgSSBzdXNwZWN0ZWQgaXQgaXMuIFRoYXQgbmFycm93cyBkb3duIHdoZXJlIGl0IGNhbiBiZSBjYWxsZWQgZnJvbS4gQSBxdWljayBzZWFyY2ggdGhyb3VnaCB0aGUgY29kZSByZXZlYWxzIGB1c2VyZmF1bHRmZF9tb3ZlYCBpcyB0aGUgY2FsbGVyLiBJJ2xsIG5lZWQgdG8gZm9sbG93IHRoZSBleGVjdXRpb24gZmxvdyBmcm9tIHRoZXJlLiBUaGF0IHNlZW1zIHRvIGJlIHRoZSBjcml0aWNhbCBlbnRyeSBwb2ludCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBzeXN0ZW1zIGludGVycGxheS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzM4OCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDEzOjU3OjA4LjYxNDk1Nzc5NloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg2NjQ1NzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW92ZV9wYWdlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS91c2VyZmF1bHRmZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3VzZXJmYXVsdGZkLmM9MTM4Mj1zdGF0aWMgaW50IG1vdmVfemVyb3BhZ2VfcHRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0xNDE0LSAqL1xcbm1tL3VzZXJmYXVsdGZkLmM6MTQxNTpzdGF0aWMgbG9uZyBtb3ZlX3BhZ2VzX3B0ZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpkc3RfcG1kLCBwbWRfdCAqc3JjX3BtZCxcXG5tbS91c2VyZmF1bHRmZC5jLTE0MTYtXFx0XFx0XFx0ICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSxcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmM9MTg1OT1zdGF0aWMgdm9pZCB1ZmZkX21vdmVfdW5sb2NrKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSxcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtMTg2Ny0vKipcXG5tbS91c2VyZmF1bHRmZC5jOjE4Njg6ICogbW92ZV9wYWdlcyAtIG1vdmUgYXJiaXRyYXJ5IGFub255bW91cyBwYWdlcyBvZiBhbiBleGlzdGluZyB2bWFcXG5tbS91c2VyZmF1bHRmZC5jLTE4NjktICogQGN0eDogcG9pbnRlciB0byB0aGUgdXNlcmZhdWx0ZmQgY29udGV4dFxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0xODc2LSAqXFxubW0vdXNlcmZhdWx0ZmQuYzoxODc3OiAqIG1vdmVfcGFnZXMoKSByZW1hcHMgYXJiaXRyYXJ5IGFub255bW91cyBwYWdlcyBhdG9taWNhbGx5IGluIHplcm9cXG5tbS91c2VyZmF1bHRmZC5jLTE4NzgtICogY29weS4gSXQgb25seSB3b3JrcyBvbiBub24gc2hhcmVkIGFub255bW91cyBwYWdlcyBiZWNhdXNlIHRob3NlIGNhblxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0xODg4LSAqIHN0b3JhZ2Ugb3IgYW55IG90aGVyIEkvTyBkZXZpY2UgKE1BRFZfRE9OVEZPUksgaW4gdGhlIHNvdXJjZSB2bWFcXG5tbS91c2VyZmF1bHRmZC5jOjE4ODk6ICogYXZvaWRzIG1vdmVfcGFnZXMoKSB0byBmYWlsIHdpdGggLUVCVVNZIGlmIHRoZSBwcm9jZXNzIGZvcmtzIGJlZm9yZVxcbm1tL3VzZXJmYXVsdGZkLmM6MTg5MDogKiBtb3ZlX3BhZ2VzKCkgaXMgY2FsbGVkKSwgdGhlbiBpdCB3aWxsIGNhbGwgbW92ZV9wYWdlcygpIHRvIG1hcCB0aGVcXG5tbS91c2VyZmF1bHRmZC5jLTE4OTEtICogcGFnZSBpbiB0aGUgZmF1bHRpbmcgYWRkcmVzcyBpbiB0aGUgZGVzdGluYXRpb24gdm1hLlxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0xOTA1LSAqIHRoZSBkZXN0aW5hdGlvbiB2aXJ0dWFsIG1lbW9yeSByYW5nZSBpcyBub3QgYSB3aG9sZSB1bm1hcHBlZCBob2xlLFxcbm1tL3VzZXJmYXVsdGZkLmM6MTkwNjogKiBtb3ZlX3BhZ2VzKCkgd2lsbCBmYWlsIHJlc3BlY3RpdmVseSB3aXRoIC1FTk9FTlQgb3IgLUVFWElTVC4gVGhpc1xcbm1tL3VzZXJmYXVsdGZkLmMtMTkwNy0gKiBwcm92aWRlcyBhIHZlcnkgc3RyaWN0IGJlaGF2aW9yIHRvIGF2b2lkIGFueSBjaGFuY2Ugb2YgbWVtb3J5XFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTE5MTAtICogdGltZSBmb3IgYW55IGdpdmVuIGZhdWx0aW5nIGFkZHJlc3MuIFRoaXMgbWVhbnMgdGhhdCBpZiB0d28gdGhyZWFkc1xcbm1tL3VzZXJmYXVsdGZkLmM6MTkxMTogKiB0cnkgdG8gYm90aCBjYWxsIG1vdmVfcGFnZXMoKSBvbiB0aGUgc2FtZSBkZXN0aW5hdGlvbiBhZGRyZXNzIGF0IHRoZVxcbm1tL3VzZXJmYXVsdGZkLmMtMTkxMi0gKiBzYW1lIHRpbWUsIHRoZSBzZWNvbmQgdGhyZWFkIHdpbGwgZ2V0IGFuIGV4cGxpY2l0IGVycm9yIGZyb20gdGhpc1xcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0xOTIwLSAqIGFuIGFtb3VudCBvZiBieXRlcyBzdWNjZXNzZnVsbHkgbW92ZWQuIElmIHRoZSByZXR2YWwgcmVwb3J0cyBhXFxubW0vdXNlcmZhdWx0ZmQuYzoxOTIxOiAqIFxcXCJzaG9ydFxcXCIgcmVtYXAsIHRoZSBtb3ZlX3BhZ2VzKCkgY29tbWFuZCBzaG91bGQgYmUgcmVwZWF0ZWQgYnlcXG5tbS91c2VyZmF1bHRmZC5jLTE5MjItICogdXNlcmxhbmQgd2l0aCBzcmMrcmV0dmFsLCBkc3QrcmV2YWwsIGxlbi1yZXR2YWwgaWYgaXQgd2FudHMgdG8ga25vd1xcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0xOTMzLSAqL1xcbm1tL3VzZXJmYXVsdGZkLmM6MTkzNDpzdGF0aWMgc3NpemVfdCBtb3ZlX3BhZ2VzKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCwgdW5zaWduZWQgbG9uZyBkc3Rfc3RhcnQsXFxubW0vdXNlcmZhdWx0ZmQuYy0xOTM1LVxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgc3JjX3N0YXJ0LCB1bnNpZ25lZCBsb25nIGxlbiwgX191NjQgbW9kZSlcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtMjAxNC1cXHRcXHQgKiBiZSBzdHJpY3QuIElmIGRzdF9wbWQgY2hhbmdlcyBpbnRvIFRQSCBhZnRlciB0aGlzIGNoZWNrLCB0aGVcXG5tbS91c2VyZmF1bHRmZC5jOjIwMTU6XFx0XFx0ICogbW92ZV9wYWdlc19odWdlX3BtZCgpIHdpbGwgZGV0ZWN0IHRoZSBjaGFuZ2UgYW5kIHJldHJ5XFxubW0vdXNlcmZhdWx0ZmQuYzoyMDE2OlxcdFxcdCAqIHdoaWxlIG1vdmVfcGFnZXNfcHRlKCkgd2lsbCBkZXRlY3QgdGhlIGNoYW5nZSBhbmQgZmFpbC5cXG5tbS91c2VyZmF1bHRmZC5jLTIwMTctXFx0XFx0ICovXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTIwNDEtXFx0XFx0XFx0XFx0c3BsaXRfaHVnZV9wbWQoc3JjX3ZtYSwgc3JjX3BtZCwgc3JjX2FkZHIpO1xcbm1tL3VzZXJmYXVsdGZkLmM6MjA0MjpcXHRcXHRcXHRcXHQvKiBUaGUgZm9saW8gd2lsbCBiZSBzcGxpdCBieSBtb3ZlX3BhZ2VzX3B0ZSgpICovXFxubW0vdXNlcmZhdWx0ZmQuYy0yMDQzLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0yMDQ1LVxcbm1tL3VzZXJmYXVsdGZkLmM6MjA0NjpcXHRcXHRcXHRlcnIgPSBtb3ZlX3BhZ2VzX2h1Z2VfcG1kKG1tLCBkc3RfcG1kLCBzcmNfcG1kLFxcbm1tL3VzZXJmYXVsdGZkLmMtMjA0Ny1cXHRcXHRcXHRcXHRcXHRcXHQgIGRzdF9wbWR2YWwsIGRzdF92bWEsIHNyY192bWEsXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTIwNjgtXFxubW0vdXNlcmZhdWx0ZmQuYzoyMDY5OlxcdFxcdFxcdHJldCA9IG1vdmVfcGFnZXNfcHRlcyhtbSwgZHN0X3BtZCwgc3JjX3BtZCxcXG5tbS91c2VyZmF1bHRmZC5jLTIwNzAtXFx0XFx0XFx0XFx0XFx0ICAgICAgZHN0X3ZtYSwgc3JjX3ZtYSwgZHN0X2FkZHIsXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jPTQyMTk9c3RhdGljIGludCB1c2VyZmF1bHRmZF9tb3ZlKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCxcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtNDI1OC1cXHRpZiAobW1nZXRfbm90X3plcm8obW0pKSB7XFxubW0vdXNlcmZhdWx0ZmQuYzo0MjU5OlxcdFxcdHJldCA9IG1vdmVfcGFnZXMoY3R4LCB1ZmZkaW9fbW92ZS5kc3QsIHVmZmRpb19tb3ZlLnNyYyxcXG5tbS91c2VyZmF1bHRmZC5jLTQyNjAtXFx0XFx0XFx0XFx0IHVmZmRpb19tb3ZlLmxlbiwgdWZmZGlvX21vdmUubW9kZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDEzOjU3OjA4LjY5MzYyODY0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MjkzMzAxNjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipNeSBBbmFseXNpcyBvZiBgbW92ZV9wYWdlc19odWdlX3BtZGAgYW5kIFJlbGF0ZWQgQ29uZmlndXJhdGlvbnMqKlxuXG5SaWdodCwgc28gSSBzZWUgYG1vdmVfcGFnZXNfaHVnZV9wbWRgIGlzIHRoZSBjZW50cmFsIGZ1bmN0aW9uIHdlJ3JlIGRlYWxpbmcgd2l0aCBoZXJlIOKAkyB0aGF0J3MgdGhlIG9uZSB0byBzY3J1dGluaXplIGZpcnN0LiBUaGUga2V5IGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byBrZWVwIGluIG1pbmQsIG9mIGNvdXJzZSwgYXJlIGBVU0VSRkFVTFRGRGAgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuIFRoZXnigJlsbCB1bmRvdWJ0ZWRseSBwbGF5IGEgc2lnbmlmaWNhbnQgcm9sZSBpbiBob3cgdGhpcyBmdW5jdGlvbiBvcGVyYXRlcywgaGFuZGxpbmcgcGFnZSBmYXVsdHMsIGFuZCBkZWFsaW5nIHdpdGggdHJhbnNwYXJlbnQgaHVnZXBhZ2VzLCByZXNwZWN0aXZlbHkuIEkgbmVlZCB0byBiZSBhd2FyZSBvZiB0aGVpciBpbnRlcmFjdGlvbnMuXG5cbk5vdywgYSBxdWljayBzaWRlIHRob3VnaHTigKYgSSBzaG91bGQganVzdCBkb3VibGUtY2hlY2sgaWYgYENPTkZJR19NSUdSQVRJT05gIGlzIGFjdHVhbGx5IGEgaGFyZCByZXF1aXJlbWVudCBoZXJlLiBJdCBzZWVtcyBsaWtlIGEgY29yZSBjb25jZXB0LCBidXQgSSBzaG91bGQgY29uZmlybSBpdOKAmXMgZXNzZW50aWFsIHRvIHRoZSBmdW5jdGlvbidzIG9wZXJhdGlvbiBvciBpZiBpdOKAmXMgbW9yZSBmb3IgYSBicm9hZGVyIGNvbnRleHQuIE9rYXksIGxldCBtZSBkbyBhIHF1aWNrIHNlYXJjaC4gQWgsIHJpZ2h0LiBJdCBsb29rcyBsaWtlIGBwbWRfbWlncmF0aW9uX2VudHJ5X3dhaXRgIGlzIGRlZmluZWQgaW4gYGluY2x1ZGUvbGludXgvc3dhcG9wcy5oYCwgd2hpY2ggZ2l2ZXMgYSBoaW50IG9uIGl0cyBwdXJwb3NlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDY5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMTM6NTc6MTIuNDIyOTYxMDY3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODg0NzExNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwbWRfbWlncmF0aW9uX2VudHJ5X3dhaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9zd2Fwb3BzLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg9MzI4PWV4dGVybiB2b2lkIHJlbW92ZV9taWdyYXRpb25fcG1kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcXG4tLVxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTMzMC1cXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaDozMzE6ZXh0ZXJuIHZvaWQgcG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kKTtcXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0zMzItXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaD0zNDg9c3RhdGljIGlubGluZSB2b2lkIHJlbW92ZV9taWdyYXRpb25fcG1kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcXG4tLVxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTM1My1cXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaDozNTQ6c3RhdGljIGlubGluZSB2b2lkIHBtZF9taWdyYXRpb25fZW50cnlfd2FpdChzdHJ1Y3QgbW1fc3RydWN0ICptLCBwbWRfdCAqcCkgeyB9XFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzU1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQxMzo1NzoxMi40ODE4MTYyNjNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY5ODg2ODQzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYHBtZF9taWdyYXRpb25fZW50cnlfd2FpdGAgaW4gYHN3YXBvcHMuaGAqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gc3Vycm91bmRpbmcgYHBtZF9taWdyYXRpb25fZW50cnlfd2FpdGAgd2l0aGluIGBpbmNsdWRlL2xpbnV4L3N3YXBvcHMuaGAuIFRoaXMgbGlrZWx5IGluZGljYXRlcyB0aGF0IGl0cyBiZWhhdmlvciBvciBldmVuIGl0cyBleGlzdGVuY2UgaXMgcGxhdGZvcm0tc3BlY2lmaWMgb3IgZGVwZW5kcyBvbiBjZXJ0YWluIGtlcm5lbCBjb25maWd1cmF0aW9ucy4gVGhlIGAjaWZkZWZgIGRpcmVjdGl2ZXMgYXJlIHRoZSBrZXkgaGVyZS4gSSB3YW50IHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHVuZGVyIHdoaWNoIGNvbmRpdGlvbnMgdGhpcyBmdW5jdGlvbiBpcyAqcHJlc2VudCogYW5kICp3aGF0KiB0aG9zZSBjb25kaXRpb25zIGFyZS4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBzcGVjaWZpYyBhcmNoaXRlY3R1cmUsIGEgZmVhdHVyZSBmbGFnLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gS25vd2luZyB0aGlzIGNvbnRleHQgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgZnVuY3Rpb24ncyBwdXJwb3NlIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIG1lbW9yeSBtYW5hZ2VtZW50IGZyYW1ld29yay4gRXNzZW50aWFsbHksIGZpZ3VyaW5nIG91dCB3aGVuICppdCdzIHRoZXJlKiB3aWxsIHRlbGwgbWUgYSBsb3QgYWJvdXQgKndoeSogaXQncyB0aGVyZS4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgaXRzIHVzZTsgd2hhdCBjb25maWd1cmF0aW9ucyByZWx5IG9uIGl0LCBhbmQgd2hhdCBjb25maWd1cmF0aW9ucyBkbyBub3Q/IFRoaXMgd2lsbCB0ZWxsIG1lIGhvdyBjcml0aWNhbCBpdCBpcyBmb3IgYSBnZW5lcmFsIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvZGUuIEknbSBnb2luZyB0byBzdGFydCBieSBnZXR0aW5nIHRvIHRoYXQgbGluZSwgYW5kIHRoZW4gYmFja2luZyBvdXQgdW50aWwgSSBzZWUgd2hhdCBpcyBoYXBwZW5pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2NTQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQxMzo1NzoxNi4xODA2ODcxNjNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAzODMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvc3dhcG9wcy5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMyMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMyMDpcXHR9XFxuIDMyMTpcXHRcXG4gMzIyOlxcdHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsaztcXG4gMzIzOlxcdFxcbiAzMjQ6XFx0I2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRlxcbiAzMjU6XFx0ZXh0ZXJuIGludCBzZXRfcG1kX21pZ3JhdGlvbl9lbnRyeShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsXFxuIDMyNjpcXHRcXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZSk7XFxuIDMyNzpcXHRcXG4gMzI4OlxcdGV4dGVybiB2b2lkIHJlbW92ZV9taWdyYXRpb25fcG1kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcXG4gMzI5OlxcdFxcdFxcdHN0cnVjdCBwYWdlICpuZXcpO1xcbiAzMzA6XFx0XFxuIDMzMTpcXHRleHRlcm4gdm9pZCBwbWRfbWlncmF0aW9uX2VudHJ5X3dhaXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQpO1xcbiAzMzI6XFx0XFxuIDMzMzpcXHRzdGF0aWMgaW5saW5lIHBtZF90IHN3cF9lbnRyeV90b19wbWQoc3dwX2VudHJ5X3QgZW50cnkpXFxuIDMzNDpcXHR7XFxuIDMzNTpcXHRcXHRzd3BfZW50cnlfdCBhcmNoX2VudHJ5O1xcbiAzMzY6XFx0XFxuIDMzNzpcXHRcXHRhcmNoX2VudHJ5ID0gX19zd3BfZW50cnkoc3dwX3R5cGUoZW50cnkpLCBzd3Bfb2Zmc2V0KGVudHJ5KSk7XFxuIDMzODpcXHRcXHRyZXR1cm4gX19zd3BfZW50cnlfdG9fcG1kKGFyY2hfZW50cnkpO1xcbiAzMzk6XFx0fVxcbiAzNDA6XFx0XFxuIDM0MTpcXHQjZWxzZSAgLyogQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGICovXFxuIDM0MjpcXHRzdGF0aWMgaW5saW5lIGludCBzZXRfcG1kX21pZ3JhdGlvbl9lbnRyeShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsXFxuIDM0MzpcXHRcXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4gMzQ0OlxcdHtcXG4gMzQ1OlxcdFxcdEJVSUxEX0JVRygpO1xcbiAzNDY6XFx0fVxcbiAzNDc6XFx0XFxuIDM0ODpcXHRzdGF0aWMgaW5saW5lIHZvaWQgcmVtb3ZlX21pZ3JhdGlvbl9wbWQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LFxcbiAzNDk6XFx0XFx0XFx0c3RydWN0IHBhZ2UgKm5ldylcXG4gMzUwOlxcdHtcXG4gMzUxOlxcdFxcdEJVSUxEX0JVRygpO1xcbiAzNTI6XFx0fVxcbiAzNTM6XFx0XFxuIDM1NDpcXHRzdGF0aWMgaW5saW5lIHZvaWQgcG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0KHN0cnVjdCBtbV9zdHJ1Y3QgKm0sIHBtZF90ICpwKSB7IH1cXG4gMzU1OlxcdFxcbiAzNTY6XFx0c3RhdGljIGlubGluZSBwbWRfdCBzd3BfZW50cnlfdG9fcG1kKHN3cF9lbnRyeV90IGVudHJ5KVxcbiAzNTc6XFx0e1xcbiAzNTg6XFx0XFx0cmV0dXJuIF9fcG1kKDApO1xcbiAzNTk6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQxMzo1NzoxNi4xODA3OTI3OTNaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI3NTExNTc3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIENvZGViYXNlOiBUaGUgU2VhcmNoIGZvciBgcG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0YCoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCB3aGVyZSBgcG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0YCBpcyBhY3R1YWxseSAqZGVmaW5lZCouIEkgdmFndWVseSByZW1lbWJlciBpdCwgYnV0IGEgcXVpY2sgc2VhcmNoIGRpZG4ndCBpbW1lZGlhdGVseSB0dXJuIHVwIHRoZSBzb3VyY2UuIExldCdzIHNlZS4uLiB0aGUgZXJyb3IgbWVzc2FnZSBvciBjb250ZXh0IGhhZCB0byBoYXZlIG1lbnRpb25lZCB0aGUgZmlsZS4gQWgsIHllcyEgSXQgbG9va3MgbGlrZSB0aGUgc3lzdGVtJ3MgdGVsbGluZyBtZSBpdCdzIGxvY2F0ZWQgaW4gYG1tL21pZ3JhdGUuY2AuIE9rYXksIHRoYXQgbWFrZXMgc2Vuc2U7IHRoYXQgc291bmRzIGxpa2UgYSBwbGF1c2libGUgbG9jYXRpb24gZm9yIG1lbW9yeSBtaWdyYXRpb24gcmVsYXRlZCBmdW5jdGlvbnMuIEFscmlnaHQsIHRpbWUgdG8gb3BlbiB1cCBgbW0vbWlncmF0ZS5jYCBhbmQgZGlnIGludG8gdGhlIGltcGxlbWVudGF0aW9uIHRoZXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgZnVuY3Rpb24gZG9lcyBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBtaWdyYXRpb24gY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA2MTMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDEzOjU3OjE5LjQ1NTkxMDc0NVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI1NDc1MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21pZ3JhdGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9taWdyYXRlLmM9NTE2PXZvaWQgbWlncmF0aW9uX2VudHJ5X3dhaXRfaHVnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcClcXG4tLVxcbm1tL21pZ3JhdGUuYy01NDgtI2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRlxcbm1tL21pZ3JhdGUuYzo1NDk6dm9pZCBwbWRfbWlncmF0aW9uX2VudHJ5X3dhaXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQpXFxubW0vbWlncmF0ZS5jLTU1MC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDEzOjU3OjE5LjUxODQ2MzM0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMDA1NDYyMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgcG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0YCdzIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYG1tL21pZ3JhdGUuY2AgYW5kIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBzdXJyb3VuZGluZyBgcG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0YC4gSSBrbm93IHRoaXMgZnVuY3Rpb24gaXMgY3JpdGljYWwgZm9yIGhhbmRsaW5nIHBhZ2UgbWlncmF0aW9ucyBhdCB0aGUgUGFnZSBNaWRkbGUgRGlyZWN0b3J5IChQTUQpIGxldmVsLiBNeSBpbml0aWFsIGh5cG90aGVzaXMgaXMgdGhhdCBpdHMgcHJlc2VuY2Ugb3IgYmVoYXZpb3IgaXMgcHJvYmFibHkgdGllZCB0byBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbnMgb3IgYXJjaGl0ZWN0dXJhbCBmZWF0dXJlcyByZWxhdGVkIHRvIHBhZ2UgbWlncmF0aW9uLCBlaXRoZXIgb24gYSBzcGVjaWZpYyBhcmNoaXRlY3R1cmUsIG9yIGEgcGFydGljdWxhciBrZXJuZWwgY29uZmlnLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB3aGF0IGNvbmZpZ3VyYXRpb25zIHJlcXVpcmUgb3IgZW5hYmxlIHRoaXMgZnVuY3Rpb25hbGl0eTsgYSBgI2lmZGVmYCBjaGVjayB3aWxsIGJlIHRoZSBxdWlja2VzdCB3YXkgdG8gZG8gdGhhdC4gSSBleHBlY3QgaXQncyBnb2luZyB0byBiZSBzb21ldGhpbmcgbGlrZSBhIGZsYWcgZm9yIFRIUCBtaWdyYXRpb24sIE5VTUEsIG9yIHNvbWUgb3RoZXIgbWVtb3J5IG1hbmFnZW1lbnQgc2V0dGluZy4gVW5kZXJzdGFuZGluZyB0aGUgY29uZGl0aW9uYWwgY29tcGlsZSB3aWxsIGhlbHAgbWUgcXVpY2tseSBhc2NlcnRhaW4gd2hpY2gga2VybmVsIGJ1aWxkIHRoaXMgc3BlY2lmaWMgc2VjdGlvbiBvZiBjb2RlIGFwcGxpZXMgdG8uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwOTg1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMTM6NTc6MjIuODE5MDEyMzVaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE5MDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21pZ3JhdGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NDUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1NDU6XFx0fVxcbiA1NDY6XFx0I2VuZGlmXFxuIDU0NzpcXHRcXG4gNTQ4OlxcdCNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUZcXG4gNTQ5OlxcdHZvaWQgcG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kKVxcbiA1NTA6XFx0e1xcbiA1NTE6XFx0XFx0c3BpbmxvY2tfdCAqcHRsO1xcbiA1NTI6XFx0XFxuIDU1MzpcXHRcXHRwdGwgPSBwbWRfbG9jayhtbSwgcG1kKTtcXG4gNTU0OlxcdFxcdGlmICghcG1kX2lzX21pZ3JhdGlvbl9lbnRyeSgqcG1kKSlcXG4gNTU1OlxcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbiA1NTY6XFx0XFx0c29mdGxlYWZfZW50cnlfd2FpdF9vbl9sb2NrZWQoc29mdGxlYWZfZnJvbV9wbWQoKnBtZCksIHB0bCk7XFxuIDU1NzpcXHRcXHRyZXR1cm47XFxuIDU1ODpcXHR1bmxvY2s6XFxuIDU1OTpcXHRcXHRzcGluX3VubG9jayhwdGwpO1xcbiA1NjA6XFx0fVxcbiA1NjE6XFx0I2VuZGlmXFxuIDU2MjpcXHRcXG4gNTYzOlxcdC8qXFxuIDU2NDpcXHQgKiBSZXBsYWNlIHRoZSBmb2xpbyBpbiB0aGUgbWFwcGluZy5cXG4gNTY1OlxcdCAqXFxuIDU2NjpcXHQgKiBUaGUgbnVtYmVyIG9mIHJlbWFpbmluZyByZWZlcmVuY2VzIG11c3QgYmU6XFxuIDU2NzpcXHQgKiAxIGZvciBhbm9ueW1vdXMgZm9saW9zIHdpdGhvdXQgYSBtYXBwaW5nXFxuIDU2ODpcXHQgKiAyIGZvciBmb2xpb3Mgd2l0aCBhIG1hcHBpbmdcXG4gNTY5OlxcdCAqIDMgZm9yIGZvbGlvcyB3aXRoIGEgbWFwcGluZyBhbmQgdGhlIHByaXZhdGUgZmxhZyBzZXQuXFxuIDU3MDpcXHQgKi9cXG4gNTcxOlxcdHN0YXRpYyBpbnQgX19mb2xpb19taWdyYXRlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuIDU3MjpcXHRcXHRcXHRzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgZXhwZWN0ZWRfY291bnQpXFxuIDU3MzpcXHR7XFxuIDU3NDpcXHRcXHRYQV9TVEFURSh4YXMsIFxcdTAwMjZtYXBwaW5nLVxcdTAwM2VpX3BhZ2VzLCBmb2xpby1cXHUwMDNlaW5kZXgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQxMzo1NzoyMi44MTkzMzQxM1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTEyMDAxODE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIHdpdGggdGhlIGJvbGRlZCBoZWFkZXIgYXMgcmVxdWVzdGVkOlxuXG4qKlVuZGVyc3RhbmRpbmcgdGhlIFJlbGF0aW9uc2hpcCBCZXR3ZWVuIFBNRCBTb2Z0bGVhZiBTdXBwb3J0IGFuZCBNaWdyYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQgbWUgc2VlIGlmIEkndmUgZ290IHRoaXMgcmlnaHQuIEknbSBsb29raW5nIGF0IHRoZSBkZXBlbmRlbmNpZXMgaGVyZS4gSXQgc2VlbXMgdGhhdCBgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGYCBpcyBhICpwcmUtcmVxdWlzaXRlKiBmb3IgdGhlIGBwbWRfbWlncmF0aW9uX2VudHJ5X3dhaXRgIHZhcmlhYmxlIHRvIGV2ZW4gKmV4aXN0KiBpbiBhIG1lYW5pbmdmdWwgc3RhdGUsIHJpZ2h0PyBNZWFuaW5nIGl0IG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIGFueXRoaW5nIHJlbGF0ZWQgdG8gbWlncmF0aW9uIHRvIGZ1bmN0aW9uLiBUaGUgbG9naWMncyBsaWtlbHkgc3RydWN0dXJlZCBzdWNoIHRoYXQgaWYgdGhlIGFyY2hpdGVjdHVyZSBkb2Vzbid0IHN1cHBvcnQgdGhlIGZpbmVyLWdyYWluZWQgaGFuZGxpbmcgb2YgUGFnZSBUYWJsZSBlbnRyaWVzIHRoYXQgYSBzb2Z0bGVhZiBwcm92aWRlcywgdGhlbiB0aGUgbWlncmF0aW9uIGxvZ2ljIHdvdWxkbid0IGJlIHNldHVwIHRvIHV0aWxpemUgaXQuXG5cbkFuZCB0aGVuIEknbSB0aGlua2luZywgaGFuZyBvbiwgdGhlIGNvcmUgbWlncmF0aW9uIGNvZGUgaXRzZWxmLCB3aGljaCBsaXZlcyBpbiBgbW0vbWlncmF0ZS5jYCwgaXMgb25seSBldmVuICpjb21waWxlZCogaW50byB0aGUga2VybmVsIGlmIGBDT05GSUdfTUlHUkFUSU9OYCBpcyBlbmFibGVkIGluIHRoZSBmaXJzdCBwbGFjZS4gU28sIHRoZSB3aG9sZSBtaWdyYXRpb24gc3Vic3lzdGVtIGlzIGdhdGVkIGJ5IHRoaXMgY29uZmlndXJhdGlvbi4gVGhlIGluaXRpYWwgY29uZGl0aW9uIGZvciBhbnl0aGluZyB0byBtYXR0ZXIgaXMgYENPTkZJR19NSUdSQVRJT05gLCBhbmQgaWYgdGhhdCdzIHRydWUsIHRoZW4gYENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRmAgaXMgbmVlZGVkIGZvciBgcG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0YCB0byBkbyBpdHMgam9iLiBJdCdzIGFsbW9zdCBhIGNhc2NhZGluZyBzZXQgb2YgY29uZGl0aW9uYWxzIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjk1LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQxMzo1NzoyNi45MzEzMzk3MzhaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMDgwNTM2MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtaWdyYXRlLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9OTc9b2JqLSQoQ09ORklHX01FTVRFU1QpXFx0XFx0Kz0gbWVtdGVzdC5vXFxubW0vTWFrZWZpbGU6OTg6b2JqLSQoQ09ORklHX01JR1JBVElPTikgKz0gbWlncmF0ZS5vXFxubW0vTWFrZWZpbGUtOTktb2JqLSQoQ09ORklHX05VTUEpICs9IG1lbW9yeS10aWVycy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDEzOjU3OjI3LjE2MjE1MTk1MVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzYyMDQ3NTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKktlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llczogUE1EIFNvZnRsZWFmIGFuZCBNaWdyYXRpb24qKlxuXG5BbHJpZ2h0LCBJIHNlZSB3ZSdyZSBkZWFsaW5nIHdpdGggYENPTkZJR19NSUdSQVRJT05gIGFzIGEgcHJlcmVxdWlzaXRlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgbGV0J3MgZGV0ZXJtaW5lIGlmIHdlIGNhbiBlbmFibGUgYENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRmAuIEdpdmVuIHRoZSBjb250ZXh0LCBJJ20gaW5mZXJyaW5nIHRoaXMgaXMgcGFydCBvZiB0aGUgZGVwZW5kZW5jeSBjaGFpbi4gSXMgdGhpcyBwYXJ0aWN1bGFyIGFyY2hpdGVjdHVyZSBldmVuIGNhcGFibGUgb2YgbGV2ZXJhZ2luZyBQTUQgc29mdGxlYWY/IFVuZGVyc3RhbmRpbmcgdGhhdCBiaXQgaXMgY3J1Y2lhbCBiZWZvcmUgd2UgcHJvY2VlZC4gV2UgbmVlZCB0byBhc2NlcnRhaW4gaWYgdGhlIGhhcmR3YXJlIGFuZCByZWxldmFudCBhcmNoaXRlY3R1cmUgc3VwcG9ydCBgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGYCBiZWZvcmUgd2UgY2FuIHN0YXJ0IGNvbnNpZGVyaW5nIGZ1cnRoZXIgY29uZmlndXJhdGlvbi4gT3RoZXJ3aXNlLCBhbnkgZWZmb3J0IGRvd24gdGhhdCBwYXRoIHdvdWxkIGJlIHdhc3RlZCwgb3Igd29yc2UsIGxlYWQgdG8gaW5zdGFiaWxpdHkuIFRoZSBlbmFibGVtZW50IG9mIGBDT05GSUdfTUlHUkFUSU9OYCBsaWtlbHkgaGluZ2VzIG9uIHRoaXMsIHNvIGl0J3MgYSBjcml0aWNhbCBmaXJzdCBjaGVjay4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgS2NvbmZpZyBvcHRpb25zIHRvIGNvbmZpcm0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMTU4LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMTM6NTc6MzAuNTI0MjAxOTI2WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODc1NDg4MDU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkFSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L0tjb25maWc9Mj1jb25maWcgQVJNNjRcXG4tLVxcbmFyY2gvYXJtNjQvS2NvbmZpZy0xOS1cXHRzZWxlY3QgQVJDSF9FTkFCTEVfU1BMSVRfUE1EX1BUTE9DSyBpZiBQR1RBQkxFX0xFVkVMUyBcXHUwMDNlIDJcXG5hcmNoL2FybTY0L0tjb25maWc6MjA6XFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGIGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxuYXJjaC9hcm02NC9LY29uZmlnLTIxLVxcdHNlbGVjdCBBUkNIX0hBU19DQUNIRV9MSU5FX1NJWkVcXG4tLVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oPTE1MDY9c3RhdGljIGlubGluZSBwbWRfdCBwbWRwX2VzdGFibGlzaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTE1MzYtXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg6MTUzNzojaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtMTUzOC0jZGVmaW5lIF9fcG1kX3RvX3N3cF9lbnRyeShwbWQpXFx0XFx0KChzd3BfZW50cnlfdCkgeyBwbWRfdmFsKHBtZCkgfSlcXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaC0xNTM5LSNkZWZpbmUgX19zd3BfZW50cnlfdG9fcG1kKHN3cClcXHRcXHRfX3BtZCgoc3dwKS52YWwpXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg6MTU0MDojZW5kaWYgLyogQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGICovXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtMTU0MS1cXG4tLVxcbmFyY2gvbG9vbmdhcmNoL0tjb25maWc9Mj1jb25maWcgTE9PTkdBUkNIXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnLTE0LVxcdHNlbGVjdCBBUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVR1xcbmFyY2gvbG9vbmdhcmNoL0tjb25maWc6MTU6XFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGIGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZy0xNi1cXHRzZWxlY3QgQVJDSF9IQVNfQUNQSV9UQUJMRV9VUEdSQURFXFx0aWYgQUNQSVxcbi0tXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmg9MTA0ND1zdGF0aWMgaW5saW5lIHB0ZV90ICpwbWRwX3B0ZXAocG1kX3QgKnBtZClcXG4tLVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGd0YWJsZS5oLTEwNjItXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmg6MTA2MzojaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmgtMTA2NC0jZGVmaW5lIHBtZF9zd3BfbWtzb2Z0X2RpcnR5KHBtZClcXHRwdGVfcG1kKHB0ZV9zd3BfbWtzb2Z0X2RpcnR5KHBtZF9wdGUocG1kKSkpXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcuY3B1dHlwZT0xMDk9Y29uZmlnIFBQQ19USFBcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZy5jcHV0eXBlLTExNC0gICAgICAgc2VsZWN0IEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVURcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcuY3B1dHlwZToxMTU6ICAgICAgIHNlbGVjdCBBUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiBpZiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZy5jcHV0eXBlLTExNi1cXG4tLVxcbmFyY2gvcmlzY3YvS2NvbmZpZz0xMz1jb25maWcgUklTQ1ZcXG4tLVxcbmFyY2gvcmlzY3YvS2NvbmZpZy0yNC1cXHRzZWxlY3QgQVJDSF9FTkFCTEVfU1BMSVRfUE1EX1BUTE9DSyBpZiBQR1RBQkxFX0xFVkVMUyBcXHUwMDNlIDJcXG5hcmNoL3Jpc2N2L0tjb25maWc6MjU6XFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGIGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxuYXJjaC9yaXNjdi9LY29uZmlnLTI2LVxcdHNlbGVjdCBBUkNIX0hBU19CSU5GTVRfRkxBVFxcbi0tXFxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg9OTQ0PXN0YXRpYyBpbmxpbmUgcG1kX3QgcG1kX2NsZWFyX3NvZnRfZGlydHkocG1kX3QgcG1kKVxcbi0tXFxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtOTQ4LVxcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oOjk0OTojaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGXFxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtOTUwLXN0YXRpYyBpbmxpbmUgYm9vbCBwbWRfc3dwX3NvZnRfZGlydHkocG1kX3QgcG1kKVxcbi0tXFxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg9OTYwPXN0YXRpYyBpbmxpbmUgcG1kX3QgcG1kX3N3cF9jbGVhcl9zb2Z0X2RpcnR5KHBtZF90IHBtZClcXG4tLVxcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTk2My19XFxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg6OTY0OiNlbmRpZiAvKiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYgKi9cXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BndGFibGUuaC05NjUtI2VuZGlmIC8qIENPTkZJR19IQVZFX0FSQ0hfU09GVF9ESVJUWSAqL1xcbi0tXFxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg9MTIwNj1zdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9zd3BfY2xlYXJfZXhjbHVzaXZlKHB0ZV90IHB0ZSlcXG4tLVxcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTEyMTAtXFxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg6MTIxMTojaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGXFxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtMTIxMi0jZGVmaW5lIF9fcG1kX3RvX3N3cF9lbnRyeShwbWQpICgoc3dwX2VudHJ5X3QpIHsgcG1kX3ZhbChwbWQpIH0pXFxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtMTIxMy0jZGVmaW5lIF9fc3dwX2VudHJ5X3RvX3BtZChzd3ApIF9fcG1kKChzd3ApLnZhbClcXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BndGFibGUuaDoxMjE0OiNlbmRpZiAvKiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYgKi9cXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BndGFibGUuaC0xMjE1LVxcbi0tXFxuYXJjaC9zMzkwL0tjb25maWc9NzU9Y29uZmlnIFMzOTBcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTg0LVxcdHNlbGVjdCBBUkNIX0VOQUJMRV9TUExJVF9QTURfUFRMT0NLIGlmIFBHVEFCTEVfTEVWRUxTIFxcdTAwM2UgMlxcbmFyY2gvczM5MC9LY29uZmlnOjg1OlxcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiBpZiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcbmFyY2gvczM5MC9LY29uZmlnLTg2LVxcdHNlbGVjdCBBUkNIX0hBU19DQ19DQU5fTElOS1xcbi0tXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaD05MDE9c3RhdGljIGlubGluZSBwbWRfdCBwbWRfY2xlYXJfc29mdF9kaXJ0eShwbWRfdCBwbWQpXFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTkwNS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oOjkwNjojaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaC05MDctI2RlZmluZSBwbWRfc3dwX3NvZnRfZGlydHkocG1kKVxcdFxcdHBtZF9zb2Z0X2RpcnR5KHBtZClcXG4tLVxcbmFyY2gveDg2L0tjb25maWc9NTg9Y29uZmlnIFg4Nlxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy03Mi1cXHRzZWxlY3QgQVJDSF9FTkFCTEVfU1BMSVRfUE1EX1BUTE9DSyBpZiAoUEdUQUJMRV9MRVZFTFMgXFx1MDAzZSAyKSBcXHUwMDI2XFx1MDAyNiAoWDg2XzY0IHx8IFg4Nl9QQUUpXFxuYXJjaC94ODYvS2NvbmZpZzo3MzpcXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYgaWYgWDg2XzY0IFxcdTAwMjZcXHUwMDI2IFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxuYXJjaC94ODYvS2NvbmZpZy03NC1cXHRzZWxlY3QgQVJDSF9IQVNfQUNQSV9UQUJMRV9VUEdSQURFXFx0aWYgQUNQSVxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oPTE1NDM9c3RhdGljIGlubGluZSBwdGVfdCBwdGVfc3dwX2NsZWFyX3NvZnRfZGlydHkocHRlX3QgcHRlKVxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTE1NDctXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oOjE1NDg6I2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRlxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaC0xNTQ5LXN0YXRpYyBpbmxpbmUgcG1kX3QgcG1kX3N3cF9ta3NvZnRfZGlydHkocG1kX3QgcG1kKVxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9NTY4PXN0YXRpYyBpbmxpbmUgYm9vbCB0aHBfbWlncmF0aW9uX3N1cHBvcnRlZCh2b2lkKVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTU2OS17XFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NTcwOlxcdHJldHVybiBJU19FTkFCTEVEKENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRik7XFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNTcxLX1cXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTc4PXN0YXRpYyBpbmxpbmUgcHRlX3Qgc29mdGxlYWZfdG9fcHRlKHNvZnRsZWFmX3QgZW50cnkpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC04My1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo4NDojaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtODUtLyoqXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD01NzQ9c3RhdGljIGlubGluZSBib29sIHB0ZV9pc191ZmZkX21hcmtlcihwdGVfdCBwdGUpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC01ODktXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6NTkwOiNpZiBkZWZpbmVkKENPTkZJR19aT05FX0RFVklDRSkgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYpXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNTkxLVxcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg9NjA0PXN0YXRpYyBpbmxpbmUgYm9vbCBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkocG1kX3QgcG1kKVxcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNjA4LVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjYwOTojZWxzZSAgLyogQ09ORklHX1pPTkVfREVWSUNFIFxcdTAwMjZcXHUwMDI2IENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiAqL1xcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTYxMC1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD02MTE9c3RhdGljIGlubGluZSBib29sIHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShwbWRfdCBwbWQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC02MTUtXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6NjE2OiNlbmRpZiAvKiBDT05GSUdfWk9ORV9ERVZJQ0UgXFx1MDAyNlxcdTAwMjYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGICovXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNjE3LVxcbi0tXFxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmg9MTc5Mz1zdGF0aWMgaW5saW5lIHBncHJvdF90IHBncHJvdF9tb2RpZnkocGdwcm90X3Qgb2xkcHJvdCwgcGdwcm90X3QgbmV3cHJvdClcXG4tLVxcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oLTE4NDEtI2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfU09GVF9ESVJUWVxcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oOjE4NDI6I2lmbmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUZcXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaC0xODQzLXN0YXRpYyBpbmxpbmUgcG1kX3QgcG1kX3N3cF9ta3NvZnRfZGlydHkocG1kX3QgcG1kKVxcbi0tXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg9MzIyPXN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsaztcXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0zMjMtXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg6MzI0OiNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUZcXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0zMjUtZXh0ZXJuIGludCBzZXRfcG1kX21pZ3JhdGlvbl9lbnRyeShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaD0zMzM9c3RhdGljIGlubGluZSBwbWRfdCBzd3BfZW50cnlfdG9fcG1kKHN3cF9lbnRyeV90IGVudHJ5KVxcbi0tXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzQwLVxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oOjM0MTojZWxzZSAgLyogQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGICovXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzQyLXN0YXRpYyBpbmxpbmUgaW50IHNldF9wbWRfbWlncmF0aW9uX2VudHJ5KHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcXG4tLVxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oPTM1Nj1zdGF0aWMgaW5saW5lIHBtZF90IHN3cF9lbnRyeV90b19wbWQoc3dwX2VudHJ5X3QgZW50cnkpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0zNjAtXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg6MzYxOiNlbmRpZiAgLyogQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGICovXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzYyLVxcbi0tXFxubW0vS2NvbmZpZz03MDM9Y29uZmlnIEFSQ0hfRU5BQkxFX0hVR0VQQUdFX01JR1JBVElPTlxcbi0tXFxubW0vS2NvbmZpZy03MDUtXFxubW0vS2NvbmZpZzo3MDY6Y29uZmlnIEFSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGXFxubW0vS2NvbmZpZy03MDctXFx0Ym9vbFxcbi0tXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jPTc0OT1zdGF0aWMgdm9pZCBfX2luaXQgcG1kX2xlYWZfc29mdF9kaXJ0eV90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxcbi0tXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTc1My1cXHRpZiAoIXBndGFibGVfc3VwcG9ydHNfc29mdF9kaXJ0eSgpIHx8XFxubW0vZGVidWdfdm1fcGd0YWJsZS5jOjc1NDpcXHQgICAgIUlTX0VOQUJMRUQoQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGKSlcXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtNzU1LVxcdFxcdHJldHVybjtcXG4tLVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYz04MDU9c3RhdGljIHZvaWQgX19pbml0IHB0ZV9zd2FwX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpXFxuLS1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtODIxLVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYzo4MjI6I2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRlxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy04MjMtc3RhdGljIHZvaWQgX19pbml0IHBtZF9zb2Z0bGVhZl90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxcbi0tXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTgzOS19XFxubW0vZGVidWdfdm1fcGd0YWJsZS5jOjg0MDojZWxzZSAgLyogIUNPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiAqL1xcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy04NDEtc3RhdGljIHZvaWQgX19pbml0IHBtZF9zb2Z0bGVhZl90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKSB7IH1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6ODQyOiNlbmRpZiAvKiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYgKi9cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtODQzLVxcbi0tXFxubW0vaG1tLmM9MjM1PXN0YXRpYyBpbnQgaG1tX3ZtYV9oYW5kbGVfcHRlKHN0cnVjdCBtbV93YWxrICp3YWxrLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9obW0uYy0zMzMtXFxubW0vaG1tLmM6MzM0OiNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUZcXG5tbS9obW0uYy0zMzUtc3RhdGljIGludCBobW1fdm1hX2hhbmRsZV9hYnNlbnRfcG1kKHN0cnVjdCBtbV93YWxrICp3YWxrLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbi0tXFxubW0vaG1tLmM9MzgyPXN0YXRpYyBpbnQgaG1tX3ZtYV9oYW5kbGVfYWJzZW50X3BtZChzdHJ1Y3QgbW1fd2FsayAqd2FsaywgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4tLVxcbm1tL2htbS5jLTM5My19XFxubW0vaG1tLmM6Mzk0OiNlbmRpZiAgLyogQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGICovXFxubW0vaG1tLmMtMzk1LVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz00ODY4PWxhdGVfaW5pdGNhbGwoc3BsaXRfaHVnZV9wYWdlc19kZWJ1Z2ZzKTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDg3MC1cXG5tbS9odWdlX21lbW9yeS5jOjQ4NzE6I2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRlxcbm1tL2h1Z2VfbWVtb3J5LmMtNDg3Mi1pbnQgc2V0X3BtZF9taWdyYXRpb25fZW50cnkoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LFxcbi0tXFxubW0vbWlncmF0ZS5jPTM0Nj1zdGF0aWMgYm9vbCByZW1vdmVfbWlncmF0aW9uX3B0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vbWlncmF0ZS5jLTM2NC1cXG5tbS9taWdyYXRlLmM6MzY1OiNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUZcXG5tbS9taWdyYXRlLmMtMzY2LVxcdFxcdC8qIFBNRC1tYXBwZWQgVEhQIG1pZ3JhdGlvbiBlbnRyeSAqL1xcbi0tXFxubW0vbWlncmF0ZS5jPTUxNj12b2lkIG1pZ3JhdGlvbl9lbnRyeV93YWl0X2h1Z2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApXFxuLS1cXG5tbS9taWdyYXRlLmMtNTQ3LVxcbm1tL21pZ3JhdGUuYzo1NDg6I2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRlxcbm1tL21pZ3JhdGUuYy01NDktdm9pZCBwbWRfbWlncmF0aW9uX2VudHJ5X3dhaXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQpXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jPTc3OT1FWFBPUlRfU1lNQk9MKG1pZ3JhdGVfdm1hX3NldHVwKTtcXG5tbS9taWdyYXRlX2RldmljZS5jLTc4MC1cXG5tbS9taWdyYXRlX2RldmljZS5jOjc4MTojaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGXFxubW0vbWlncmF0ZV9kZXZpY2UuYy03ODItLyoqXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jPTkxMT1zdGF0aWMgaW50IG1pZ3JhdGVfdm1hX3NwbGl0X3VubWFwcGVkX2ZvbGlvKHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSxcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtOTM1LX1cXG5tbS9taWdyYXRlX2RldmljZS5jOjkzNjojZWxzZSAvKiAhQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGICovXFxubW0vbWlncmF0ZV9kZXZpY2UuYy05Mzctc3RhdGljIGludCBtaWdyYXRlX3ZtYV9pbnNlcnRfaHVnZV9wbWRfcGFnZShzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUsXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jPTk1ND1zdGF0aWMgdW5zaWduZWQgbG9uZyBtaWdyYXRlX3ZtYV9ucl9wYWdlcyh1bnNpZ25lZCBsb25nICpzcmMpXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTk1Ni1cXHR1bnNpZ25lZCBsb25nIG5yID0gMTtcXG5tbS9taWdyYXRlX2RldmljZS5jOjk1NzojaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGXFxubW0vbWlncmF0ZV9kZXZpY2UuYy05NTgtXFx0aWYgKCpzcmMgXFx1MDAyNiBNSUdSQVRFX1BGTl9DT01QT1VORClcXG4tLVxcbm1tL3JtYXAuYz0yNDEwPXN0YXRpYyBib29sIHRyeV90b19taWdyYXRlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL3JtYXAuYy0yNDc0LVxcdFxcdFxcdH1cXG5tbS9ybWFwLmM6MjQ3NTojaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGXFxubW0vcm1hcC5jLTI0NzYtXFx0XFx0XFx0cG1kdmFsID0gcG1kcF9nZXQocHZtdy5wbWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQxMzo1NzozMi4zOTk2OTU4NzRaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjY2OTI5NDI5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBhIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCBzZWVtcyBpbnRlcmVzdGluZyBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZS4gSXQgbG9va3MgbGlrZSBgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGYCBpcyBhdXRvbWF0aWNhbGx5IGVuYWJsZWQgYnkgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBvbiBhIGJ1bmNoIG9mIGFyY2hpdGVjdHVyZXMgSSdtIGZhbWlsaWFyIHdpdGgg4oCTIHg4Nl82NCwgYXJtNjQsIHJpc2N2LCBzMzkwLCBwb3dlcnBjLCBhbmQgbG9vbmdhcmNoLiBHb29kLCB0aGF0IHNpbXBsaWZpZXMgdGhpbmdzOyBJIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgZXhwbGljaXRseSBsaXN0aW5nIHRoYXQgY29uZmlndXJhdGlvbi5cblxuVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBjZW50ZXIgYXJvdW5kIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGBVU0VSRkFVTFRGRGAgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuICBNeSBhdHRlbnRpb24gaXMgZHJhd24gdG8gdGhlIGBtb3ZlX3BhZ2VzX2h1Z2VfcG1kYCBmdW5jdGlvbi4gSXQgbG9va3MgbGlrZSBpdCBpcyBjcnVjaWFsIGZvciBlbmFibGluZyB0aGUgVUZGRElPX01PVkUgaW9jdGwgcGF0aC5cblxuTGV0J3MgY29uZmlybSByZWFjaGFiaWxpdHkuIFllcywgYG1vdmVfcGFnZXNgICppcyogaW5kZWVkIHJlYWNoYWJsZSB0aHJvdWdoIHRoZSBgaW9jdGwodWZmZCwgVUZGRElPX01PVkUsIC4uLilgIGNhbGwuIFRoaXMgY29uZmlybXMgaXQuIENydWNpYWxseSwgaXQgcmVsaWVzIG9uIGJvdGggYFVTRVJGQVVMVEZEYCBhbmQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBiZWluZyBlbmFibGVkLlxuXG5TbywgbGV0J3Mgc3VtbWFyaXplIG15IGZpbmRpbmdzIG5lYXRseTpcblxuKiAgICoqV29ydGhGdXp6aW5nOiB0cnVlKiogLSBUaGlzIGxvb2tzIHByb21pc2luZy5cbiogICAqKkZvY3VzU3ltYm9sczogXFxbXCJtb3ZlXFxfcGFnZXNcXF9odWdlXFxfcG1kXCJdKiogLSBUaGlzIGlzIHRoZSBwcmltYXJ5IGZ1bmN0aW9uIHRvIHRhcmdldC5cbiogICAqKkVuYWJsZUNvbmZpZ3M6IFxcW1wiVVNFUkZBVUxURkRcIiwgXCJUUkFOU1BBUkVOVFxcX0hVR0VQQUdFXCJdKiogLSBUaGVzZSBhcmUgdGhlIGtleSBjb25maWd1cmF0aW9ucyB0aGF0IG5lZWQgdG8gYmUgZW5hYmxlZC5cbiogICAqKlJlYXNvbmluZzogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYG1vdmVfcGFnZXNfaHVnZV9wbWRgIHdoZXJlIGBwbWRfbWlncmF0aW9uX2VudHJ5X3dhaXRgIHdhcyBpbmNvcnJlY3RseSBjYWxsZWQgd2l0aCBhIHBvaW50ZXIgdG8gYSBsb2NhbCB2YXJpYWJsZSBpbnN0ZWFkIG9mIHRoZSBhY3R1YWwgUE1EIHBvaW50ZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgdXNlcmZhdWx0ZmQgVUZGRElPX01PVkUgaW1wbGVtZW50YXRpb24gZm9yIHRyYW5zcGFyZW50IGh1Z2VwYWdlcy5cIioqIC0gVGhpcyBleHBsYWlucyB0aGUgZnVuY3Rpb25hbCBjb250ZXh0IGFuZCB0aGUgbmF0dXJlIG9mIHRoZSBidWcgZml4LlxuXG5Ob3csIGEgcXVpY2sgdGhvdWdodDogSXMgdGhlcmUgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jeSBJIG1pZ2h0IGJlIG1pc3Npbmc/IEkgcmVjYWxsIHRoYXQgYENPTkZJR19NSUdSQVRJT05gIGlzIG5lZWRlZCBmb3IgYHBtZF9taWdyYXRpb25fZW50cnlfd2FpdGAgdG8gYWN0dWFsbHkgKmRvKiBzb21ldGhpbmcuIEhvd2V2ZXIsIGl0J3MgcHJldHR5IHViaXF1aXRvdXMgb3Igc2VsZWN0ZWQgYnkgb3RoZXIgc2V0dGluZ3MsIHNvIEkgc2hvdWxkIGRvdWJsZS1jaGVjayBgbW0vS2NvbmZpZ2AganVzdCB0byBiZSBjb21wbGV0ZWx5IHRob3JvdWdoLiBJdCdzIGEgZ29vZCBwcmFjdGljZSB0byB2ZXJpZnkgdGhlc2UgYXNzdW1wdGlvbnMsIGV2ZW4gd2hlbiB0aGV5IHNlZW0gbGlrZWx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjgxOCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQxMzo1NzozOS4wNjg5OTI4ODlaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNzc3MDIxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUlHUkFUSU9OXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz02ODU9Y29uZmlnIE5VTUFfTUlHUkFUSU9OXFxuLS1cXG5tbS9LY29uZmlnLTY5NS1cXG5tbS9LY29uZmlnOjY5Njpjb25maWcgTUlHUkFUSU9OXFxubW0vS2NvbmZpZy02OTctXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQxMzo1NzozOS4yMDY3Njk5MzlaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA4MDk2NTI2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJvbGUgb2YgTUlHUkFUSU9OIGluIE1lbW9yeSBNYW5hZ2VtZW50KipcblxuT2theSwgc28gSSdtIHRha2luZyBhIGxvb2sgYXQgaG93IHRoaXMgYE1JR1JBVElPTmAgZmxhZyBmYWN0b3JzIGludG8gdGhlIHN5c3RlbS4gSXQncyBvZnRlbiBpbmZsdWVuY2VkIGJ5IGNvbXBvbmVudHMgbGlrZSBgTlVNQWAsIGBDT01QQUNUSU9OYCwgYE1FTU9SWV9IT1RQTFVHYCwgYW5kIGBDTUFgLiBKdXN0IHRvIGJlIHN1cmUgSSd2ZSBnb3QgYSBjb21wbGV0ZSBwaWN0dXJlLCBJJ20gZ29pbmcgdG8gYWRkIGBNSUdSQVRJT05gIHRvIHRoYXQgbGlzdCBhcyBhIHBvdGVudGlhbCB0cmlnZ2VyLiBHb29kIHByYWN0aWNlIHRvIGJlIHRob3JvdWdoLlxuXG5SaWdodCwgbm93LCBJIG5lZWQgdG8gcGlucG9pbnQgd2hlcmUgdGhpcyBgTUlHUkFUSU9OYCBsb2dpYyBpcyBhY3R1YWxseSBpbXBsZW1lbnRlZC4gTG9va3MgbGlrZSBgbW92ZV9wYWdlc19odWdlX3BtZGAgaXMgdGhlIGtleSBmdW5jdGlvbiBiZWluZyBtb2RpZmllZCBpbiB0aGlzIGNvbnRleHQuIEEgcXVpY2sgc2VhcmNoIGNvbmZpcm1zIHRoYXQgaXQncyB0aGUgKm9ubHkqIGZ1bmN0aW9uIHRoYXQncyBiZWVuIHRvdWNoZWQuXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byBgbW92ZV9wYWdlc19odWdlX3BtZGAgaXRzZWxmLiBJJ2xsIHB1bGwgaXQgdXAgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgIGFuZCBzZWUgd2hhdCBpdCdzIHJlYWxseSBkb2luZy4gVGltZSB0byB1bmRlcnN0YW5kIHRoZSBhY3R1YWwgbWVjaGFuaWNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzgxMiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQxMzo1Nzo0My4yODc3Mzg0NjlaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUwNjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2h1Z2VfbWVtb3J5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjc2MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjc2MDpcXHRcXG4yNzYxOlxcdFxcdHNyY19wbWR2YWwgPSAqc3JjX3BtZDtcXG4yNzYyOlxcdFxcdHNyY19wdGwgPSBwbWRfbG9ja3B0cihtbSwgc3JjX3BtZCk7XFxuMjc2MzpcXHRcXG4yNzY0OlxcdFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoc3JjX3B0bCk7XFxuMjc2NTpcXHRcXHR2bWFfYXNzZXJ0X2xvY2tlZChzcmNfdm1hKTtcXG4yNzY2OlxcdFxcdHZtYV9hc3NlcnRfbG9ja2VkKGRzdF92bWEpO1xcbjI3Njc6XFx0XFxuMjc2ODpcXHRcXHQvKiBTYW5pdHkgY2hlY2tzIGJlZm9yZSB0aGUgb3BlcmF0aW9uICovXFxuMjc2OTpcXHRcXHRpZiAoV0FSTl9PTl9PTkNFKCFwbWRfbm9uZShkc3RfcG1kdmFsKSkgfHwgV0FSTl9PTl9PTkNFKHNyY19hZGRyIFxcdTAwMjYgfkhQQUdFX1BNRF9NQVNLKSB8fFxcbjI3NzA6XFx0XFx0ICAgIFdBUk5fT05fT05DRShkc3RfYWRkciBcXHUwMDI2IH5IUEFHRV9QTURfTUFTSykpIHtcXG4yNzcxOlxcdFxcdFxcdHNwaW5fdW5sb2NrKHNyY19wdGwpO1xcbjI3NzI6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMjc3MzpcXHRcXHR9XFxuMjc3NDpcXHRcXG4yNzc1OlxcdFxcdGlmICghcG1kX3RyYW5zX2h1Z2Uoc3JjX3BtZHZhbCkpIHtcXG4yNzc2OlxcdFxcdFxcdHNwaW5fdW5sb2NrKHNyY19wdGwpO1xcbjI3Nzc6XFx0XFx0XFx0aWYgKHBtZF9pc19taWdyYXRpb25fZW50cnkoc3JjX3BtZHZhbCkpIHtcXG4yNzc4OlxcdFxcdFxcdFxcdHBtZF9taWdyYXRpb25fZW50cnlfd2FpdChtbSwgc3JjX3BtZCk7XFxuMjc3OTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVBR0FJTjtcXG4yNzgwOlxcdFxcdFxcdH1cXG4yNzgxOlxcdFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbjI3ODI6XFx0XFx0fVxcbjI3ODM6XFx0XFxuMjc4NDpcXHRcXHRzcmNfcGFnZSA9IHBtZF9wYWdlKHNyY19wbWR2YWwpO1xcbjI3ODU6XFx0XFxuMjc4NjpcXHRcXHRpZiAoIWlzX2h1Z2VfemVyb19wbWQoc3JjX3BtZHZhbCkpIHtcXG4yNzg3OlxcdFxcdFxcdGlmICh1bmxpa2VseSghUGFnZUFub25FeGNsdXNpdmUoc3JjX3BhZ2UpKSkge1xcbjI3ODg6XFx0XFx0XFx0XFx0c3Bpbl91bmxvY2soc3JjX3B0bCk7XFxuMjc4OTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVCVVNZO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQxMzo1Nzo0My4yODc5OTMwNDlaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM0MDcwMzc4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHVuZGVyc3RhbmRpbmcsIGZvcm1hdHRlZCBhcyByZXF1ZXN0ZWQ6XG5cbioqQnVnIEZpeCBhbmQgUmVtZWRpYXRpb24gVGhvdWdodHMqKlxuXG5BbHJpZ2h0LCBsb29raW5nIGF0IHRoaXMgY29kZSBzbmlwcGV0LCBJIGltbWVkaWF0ZWx5IHNwb3QgdGhlIHByb2JsZW0uIFRoZSBjaGFuZ2UgaGVyZSBpcyBwcmVjaXNlbHkgdGhpczpcblxuYGBgY1xuLVx0XHRcdHBtZF9taWdyYXRpb25fZW50cnlfd2FpdChtbSwgXHUwMDI2c3JjX3BtZHZhbCk7XG4rXHRcdFx0cG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0KG1tLCBzcmNfcG1kKTtcbmBgYFxuXG5UaGF0J3MgYSB0ZXh0Ym9vayBwb2ludGVyLXRvLWxvY2FsLXZhcmlhYmxlIGlzc3VlLiBXZSB3ZXJlIHBhc3NpbmcgdGhlICphZGRyZXNzKiBvZiBhIGxvY2FsIHZhcmlhYmxlLCBgXHUwMDI2c3JjX3BtZHZhbGAsIHdoaWNoIGxpa2VseSB3ZW50IG91dCBvZiBzY29wZSwgbGVhdmluZyBgcG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0YCBvcGVyYXRpbmcgb24gZ2FyYmFnZSBkYXRhIG9yIGEgbWVtb3J5IGxvY2F0aW9uIHRoYXQgY291bGQgYmUgb3ZlcndyaXR0ZW4gYXQgYW55IHRpbWUuIFRoZSBmaXggY29ycmVjdGx5IHBhc3NlcyB0aGUgcG9pbnRlciBgc3JjX3BtZGAgaXRzZWxmLCB3aGljaCwgSSBhc3N1bWUsIGlzIHByb3Blcmx5IG1hbmFnZWQuIFRoaXMgaXMgYSBzdHJhaWdodGZvcndhcmQsIGNyaXRpY2FsIGJ1ZyBmaXguIE5vIHJlYWwgc3VycHJpc2VzIGhlcmUsIGJ1dCBnb29kIHRvIGNhdGNoIGl0LiBJJ20gZ2xhZCB0aGlzIHdhcyBpZGVudGlmaWVkIGFuZCBjb3JyZWN0ZWQuXG5cbkdpdmVuIHRoYXQgY2xhcml0eSwgSSBhbSBub3cgZ29pbmcgdG8gcHJvY2VlZCBhbmQgZXhlY3V0ZSBgc2V0LXJlc3VsdHNgLiBEb25lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODY4NiwiT3V0cHV0VG9rZW5zIjoxMjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDEzOjU3OjQ3LjYyODY5OTIwMVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5MTM1NjI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0VSRkFVTFRGRFwiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIk1JR1JBVElPTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1vdmVfcGFnZXNfaHVnZV9wbWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgbW92ZV9wYWdlc19odWdlX3BtZGAgd2hlcmUgYHBtZF9taWdyYXRpb25fZW50cnlfd2FpdGAgd2FzIGluY29ycmVjdGx5IGNhbGxlZCB3aXRoIGEgcG9pbnRlciB0byBhIGxvY2FsIHZhcmlhYmxlIGluc3RlYWQgb2YgdGhlIGFjdHVhbCBQTUQgcG9pbnRlci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSB1c2VyZmF1bHRmZCBVRkZESU9fTU9WRSBpbXBsZW1lbnRhdGlvbiBmb3IgdHJhbnNwYXJlbnQgaHVnZXBhZ2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTRVJGQVVMVEZEXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiTUlHUkFUSU9OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibW92ZV9wYWdlc19odWdlX3BtZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBtb3ZlX3BhZ2VzX2h1Z2VfcG1kYCB3aGVyZSBgcG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0YCB3YXMgaW5jb3JyZWN0bHkgY2FsbGVkIHdpdGggYSBwb2ludGVyIHRvIGEgbG9jYWwgdmFyaWFibGUgaW5zdGVhZCBvZiB0aGUgYWN0dWFsIFBNRCBwb2ludGVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHVzZXJmYXVsdGZkIFVGRkRJT19NT1ZFIGltcGxlbWVudGF0aW9uIGZvciB0cmFuc3BhcmVudCBodWdlcGFnZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowh42k7[1] Phase: Succeeded StartedAt: 2026-07-05 13:59:44 +0000 UTC FinishedAt: 2026-07-05 13:59:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh42k7[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-05 13:59:44 +0000 UTC FinishedAt: 2026-07-05 13:59:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh42k7[2] Phase: Succeeded StartedAt: 2026-07-05 13:59:44 +0000 UTC FinishedAt: 2026-07-05 18:21:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh42k7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e031e55776cf9193b4720a253e92539ca536d224","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE","MIGRATION"],"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"],"focus":null,"focus_symbols":["move_pages_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e031e55776cf9193b4720a253e92539ca536d224","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE","MIGRATION"],"series_id":"aaeca1ea-6692-4bf8-a1b5-4509a0ce2c59","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-07-05 13:59:44 +0000 UTC FinishedAt: 2026-07-05 18:21:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"e031e55776cf9193b4720a253e92539ca536d224","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE","MIGRATION"],"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"],"focus":null,"focus_symbols":["move_pages_huge_pmd"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"e031e55776cf9193b4720a253e92539ca536d224","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE","MIGRATION"],"series_id":"aaeca1ea-6692-4bf8-a1b5-4509a0ce2c59","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-workflowh42k7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e031e55776cf9193b4720a253e92539ca536d224","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE","MIGRATION"],"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"],"focus":null,"focus_symbols":["move_pages_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e031e55776cf9193b4720a253e92539ca536d224","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE","MIGRATION"],"series_id":"aaeca1ea-6692-4bf8-a1b5-4509a0ce2c59","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-07-05 13:59:44 +0000 UTC FinishedAt: 2026-07-05 14:00:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh42k7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e031e55776cf9193b4720a253e92539ca536d224","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE","MIGRATION"],"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"],"focus":null,"focus_symbols":["move_pages_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e031e55776cf9193b4720a253e92539ca536d224","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE","MIGRATION"],"series_id":"aaeca1ea-6692-4bf8-a1b5-4509a0ce2c59","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-07-05 13:59:44 +0000 UTC FinishedAt: 2026-07-05 13:59:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e031e55776cf9193b4720a253e92539ca536d224","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE","MIGRATION"],"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-workflowh42k7/series-workflowh42k7-convert-artifact-1325349073/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowh42k7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e031e55776cf9193b4720a253e92539ca536d224","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE","MIGRATION"],"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"],"focus":null,"focus_symbols":["move_pages_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e031e55776cf9193b4720a253e92539ca536d224","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE","MIGRATION"],"series_id":"aaeca1ea-6692-4bf8-a1b5-4509a0ce2c59","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-07-05 14:00:04 +0000 UTC FinishedAt: 2026-07-05 14:41:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh42k7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e031e55776cf9193b4720a253e92539ca536d224","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE","MIGRATION"],"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"],"focus":null,"focus_symbols":["move_pages_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e031e55776cf9193b4720a253e92539ca536d224","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE","MIGRATION"],"series_id":"aaeca1ea-6692-4bf8-a1b5-4509a0ce2c59","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-07-05 14:00:04 +0000 UTC FinishedAt: 2026-07-05 14:41:57 +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:*5f0af8a9-dda7-47a9-8543-9ca21a3dcd92,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-workflowh42k7/series-workflowh42k7-convert-artifact-1325349073/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": "6ecdd21a-3728-4694-aecd-9ffe5d357f3c", "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-workflowh42k7/series-workflowh42k7-build-action-4194292351/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowh42k7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e031e55776cf9193b4720a253e92539ca536d224","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE","MIGRATION"],"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"],"focus":null,"focus_symbols":["move_pages_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e031e55776cf9193b4720a253e92539ca536d224","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE","MIGRATION"],"series_id":"aaeca1ea-6692-4bf8-a1b5-4509a0ce2c59","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-07-05 14:00:04 +0000 UTC FinishedAt: 2026-07-05 14:41:30 +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:*5f0af8a9-dda7-47a9-8543-9ca21a3dcd92,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-workflowh42k7/series-workflowh42k7-convert-artifact-1325349073/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": "6ecdd21a-3728-4694-aecd-9ffe5d357f3c", "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-workflowh42k7/series-workflowh42k7-build-action-4194292351/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowh42k7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e031e55776cf9193b4720a253e92539ca536d224","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE","MIGRATION"],"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"],"focus":null,"focus_symbols":["move_pages_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e031e55776cf9193b4720a253e92539ca536d224","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE","MIGRATION"],"series_id":"aaeca1ea-6692-4bf8-a1b5-4509a0ce2c59","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-07-05 14:41:57 +0000 UTC FinishedAt: 2026-07-05 14:41:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh42k7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e031e55776cf9193b4720a253e92539ca536d224","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE","MIGRATION"],"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"],"focus":null,"focus_symbols":["move_pages_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e031e55776cf9193b4720a253e92539ca536d224","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE","MIGRATION"],"series_id":"aaeca1ea-6692-4bf8-a1b5-4509a0ce2c59","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-07-05 14:41:57 +0000 UTC FinishedAt: 2026-07-05 14:41:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh42k7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e031e55776cf9193b4720a253e92539ca536d224","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE","MIGRATION"],"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"],"focus":null,"focus_symbols":["move_pages_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e031e55776cf9193b4720a253e92539ca536d224","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE","MIGRATION"],"series_id":"aaeca1ea-6692-4bf8-a1b5-4509a0ce2c59","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-07-05 14:41:57 +0000 UTC FinishedAt: 2026-07-05 14:42:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh42k7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e031e55776cf9193b4720a253e92539ca536d224","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE","MIGRATION"],"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"],"focus":null,"focus_symbols":["move_pages_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e031e55776cf9193b4720a253e92539ca536d224","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE","MIGRATION"],"series_id":"aaeca1ea-6692-4bf8-a1b5-4509a0ce2c59","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-07-05 14:41:57 +0000 UTC FinishedAt: 2026-07-05 14:42:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e031e55776cf9193b4720a253e92539ca536d224","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE","MIGRATION"],"series_id":"aaeca1ea-6692-4bf8-a1b5-4509a0ce2c59","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-workflowh42k7/series-workflowh42k7-convert-artifact-258009508/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowh42k7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e031e55776cf9193b4720a253e92539ca536d224","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE","MIGRATION"],"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"],"focus":null,"focus_symbols":["move_pages_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e031e55776cf9193b4720a253e92539ca536d224","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE","MIGRATION"],"series_id":"aaeca1ea-6692-4bf8-a1b5-4509a0ce2c59","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-07-05 14:42:21 +0000 UTC FinishedAt: 2026-07-05 14:44:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh42k7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e031e55776cf9193b4720a253e92539ca536d224","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE","MIGRATION"],"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"],"focus":null,"focus_symbols":["move_pages_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e031e55776cf9193b4720a253e92539ca536d224","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE","MIGRATION"],"series_id":"aaeca1ea-6692-4bf8-a1b5-4509a0ce2c59","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-07-05 14:42:21 +0000 UTC FinishedAt: 2026-07-05 14:44:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6ecdd21a-3728-4694-aecd-9ffe5d357f3c,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-workflowh42k7/series-workflowh42k7-build-action-4194292351/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-workflowh42k7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e031e55776cf9193b4720a253e92539ca536d224","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE","MIGRATION"],"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"],"focus":null,"focus_symbols":["move_pages_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e031e55776cf9193b4720a253e92539ca536d224","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE","MIGRATION"],"series_id":"aaeca1ea-6692-4bf8-a1b5-4509a0ce2c59","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-07-05 14:44:30 +0000 UTC FinishedAt: 2026-07-05 14:44:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh42k7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e031e55776cf9193b4720a253e92539ca536d224","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE","MIGRATION"],"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"],"focus":null,"focus_symbols":["move_pages_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e031e55776cf9193b4720a253e92539ca536d224","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE","MIGRATION"],"series_id":"aaeca1ea-6692-4bf8-a1b5-4509a0ce2c59","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-07-05 14:44:30 +0000 UTC FinishedAt: 2026-07-05 14:44:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh42k7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e031e55776cf9193b4720a253e92539ca536d224","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE","MIGRATION"],"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"],"focus":null,"focus_symbols":["move_pages_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e031e55776cf9193b4720a253e92539ca536d224","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE","MIGRATION"],"series_id":"aaeca1ea-6692-4bf8-a1b5-4509a0ce2c59","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-07-05 14:44:30 +0000 UTC FinishedAt: 2026-07-05 15:14:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh42k7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e031e55776cf9193b4720a253e92539ca536d224","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE","MIGRATION"],"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"],"focus":null,"focus_symbols":["move_pages_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e031e55776cf9193b4720a253e92539ca536d224","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE","MIGRATION"],"series_id":"aaeca1ea-6692-4bf8-a1b5-4509a0ce2c59","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-07-05 14:44:30 +0000 UTC FinishedAt: 2026-07-05 15:14:23 +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:*5f0af8a9-dda7-47a9-8543-9ca21a3dcd92,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-workflowh42k7/series-workflowh42k7-convert-artifact-258009508/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": "e6424b57-6c4a-47cd-bb5c-12c87e9239d2", "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-workflowh42k7/series-workflowh42k7-build-action-1704943664/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowh42k7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e031e55776cf9193b4720a253e92539ca536d224","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE","MIGRATION"],"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"],"focus":null,"focus_symbols":["move_pages_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e031e55776cf9193b4720a253e92539ca536d224","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE","MIGRATION"],"series_id":"aaeca1ea-6692-4bf8-a1b5-4509a0ce2c59","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-07-05 14:44:30 +0000 UTC FinishedAt: 2026-07-05 15:14:13 +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:*5f0af8a9-dda7-47a9-8543-9ca21a3dcd92,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-workflowh42k7/series-workflowh42k7-convert-artifact-258009508/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": "e6424b57-6c4a-47cd-bb5c-12c87e9239d2", "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-workflowh42k7/series-workflowh42k7-build-action-1704943664/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowh42k7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e031e55776cf9193b4720a253e92539ca536d224","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE","MIGRATION"],"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"],"focus":null,"focus_symbols":["move_pages_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e031e55776cf9193b4720a253e92539ca536d224","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE","MIGRATION"],"series_id":"aaeca1ea-6692-4bf8-a1b5-4509a0ce2c59","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-07-05 15:14:23 +0000 UTC FinishedAt: 2026-07-05 15:14:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh42k7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e031e55776cf9193b4720a253e92539ca536d224","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE","MIGRATION"],"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"],"focus":null,"focus_symbols":["move_pages_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e031e55776cf9193b4720a253e92539ca536d224","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE","MIGRATION"],"series_id":"aaeca1ea-6692-4bf8-a1b5-4509a0ce2c59","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-07-05 15:14:23 +0000 UTC FinishedAt: 2026-07-05 15:14:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh42k7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e031e55776cf9193b4720a253e92539ca536d224","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE","MIGRATION"],"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"],"focus":null,"focus_symbols":["move_pages_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e031e55776cf9193b4720a253e92539ca536d224","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE","MIGRATION"],"series_id":"aaeca1ea-6692-4bf8-a1b5-4509a0ce2c59","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-07-05 15:14:23 +0000 UTC FinishedAt: 2026-07-05 15:16:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh42k7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e031e55776cf9193b4720a253e92539ca536d224","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE","MIGRATION"],"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"],"focus":null,"focus_symbols":["move_pages_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e031e55776cf9193b4720a253e92539ca536d224","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE","MIGRATION"],"series_id":"aaeca1ea-6692-4bf8-a1b5-4509a0ce2c59","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-07-05 15:14:23 +0000 UTC FinishedAt: 2026-07-05 15:16:35 +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:*e6424b57-6c4a-47cd-bb5c-12c87e9239d2,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-workflowh42k7/series-workflowh42k7-build-action-1704943664/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-workflowh42k7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e031e55776cf9193b4720a253e92539ca536d224","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE","MIGRATION"],"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"],"focus":null,"focus_symbols":["move_pages_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e031e55776cf9193b4720a253e92539ca536d224","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE","MIGRATION"],"series_id":"aaeca1ea-6692-4bf8-a1b5-4509a0ce2c59","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-07-05 15:16:44 +0000 UTC FinishedAt: 2026-07-05 18:21:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh42k7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e031e55776cf9193b4720a253e92539ca536d224","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE","MIGRATION"],"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"],"focus":null,"focus_symbols":["move_pages_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e031e55776cf9193b4720a253e92539ca536d224","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE","MIGRATION"],"series_id":"aaeca1ea-6692-4bf8-a1b5-4509a0ce2c59","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-07-05 15:16:44 +0000 UTC FinishedAt: 2026-07-05 18:21:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["move_pages_huge_pmd"],"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:*6ecdd21a-3728-4694-aecd-9ffe5d357f3c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e6424b57-6c4a-47cd-bb5c-12c87e9239d2,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-workflowh42k7/series-workflowh42k7-build-action-4194292351/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-workflowh42k7/series-workflowh42k7-build-action-1704943664/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowh42k7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e031e55776cf9193b4720a253e92539ca536d224","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE","MIGRATION"],"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"],"focus":null,"focus_symbols":["move_pages_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e031e55776cf9193b4720a253e92539ca536d224","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE","MIGRATION"],"series_id":"aaeca1ea-6692-4bf8-a1b5-4509a0ce2c59","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-07-05 15:16:44 +0000 UTC FinishedAt: 2026-07-05 15:16:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh42k7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e031e55776cf9193b4720a253e92539ca536d224","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE","MIGRATION"],"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"],"focus":null,"focus_symbols":["move_pages_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e031e55776cf9193b4720a253e92539ca536d224","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE","MIGRATION"],"series_id":"aaeca1ea-6692-4bf8-a1b5-4509a0ce2c59","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-07-05 15:16:44 +0000 UTC FinishedAt: 2026-07-05 15:16:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["move_pages_huge_pmd"],"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-workflowh42k7/series-workflowh42k7-convert-artifact-1388569645/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowh42k7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e031e55776cf9193b4720a253e92539ca536d224","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE","MIGRATION"],"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"],"focus":null,"focus_symbols":["move_pages_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e031e55776cf9193b4720a253e92539ca536d224","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE","MIGRATION"],"series_id":"aaeca1ea-6692-4bf8-a1b5-4509a0ce2c59","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-07-05 15:16:44 +0000 UTC FinishedAt: 2026-07-05 15:16:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh42k7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e031e55776cf9193b4720a253e92539ca536d224","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE","MIGRATION"],"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"],"focus":null,"focus_symbols":["move_pages_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e031e55776cf9193b4720a253e92539ca536d224","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE","MIGRATION"],"series_id":"aaeca1ea-6692-4bf8-a1b5-4509a0ce2c59","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-07-05 15:16:44 +0000 UTC FinishedAt: 2026-07-05 15:16:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh42k7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e031e55776cf9193b4720a253e92539ca536d224","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE","MIGRATION"],"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"],"focus":null,"focus_symbols":["move_pages_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e031e55776cf9193b4720a253e92539ca536d224","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE","MIGRATION"],"series_id":"aaeca1ea-6692-4bf8-a1b5-4509a0ce2c59","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-07-05 15:16:44 +0000 UTC FinishedAt: 2026-07-05 15:16:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh42k7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e031e55776cf9193b4720a253e92539ca536d224","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE","MIGRATION"],"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"],"focus":null,"focus_symbols":["move_pages_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e031e55776cf9193b4720a253e92539ca536d224","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE","MIGRATION"],"series_id":"aaeca1ea-6692-4bf8-a1b5-4509a0ce2c59","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-07-05 15:16:54 +0000 UTC FinishedAt: 2026-07-05 18:21:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh42k7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e031e55776cf9193b4720a253e92539ca536d224","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE","MIGRATION"],"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"],"focus":null,"focus_symbols":["move_pages_huge_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e031e55776cf9193b4720a253e92539ca536d224","config_name":"upstream-apparmor-kasan.config","enable_configs":["USERFAULTFD","TRANSPARENT_HUGEPAGE","MIGRATION"],"series_id":"aaeca1ea-6692-4bf8-a1b5-4509a0ce2c59","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-07-05 15:16:54 +0000 UTC FinishedAt: 2026-07-05 18:21:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6ecdd21a-3728-4694-aecd-9ffe5d357f3c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e6424b57-6c4a-47cd-bb5c-12c87e9239d2,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-workflowh42k7/series-workflowh42k7-build-action-4194292351/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-workflowh42k7/series-workflowh42k7-build-action-1704943664/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-workflowh42k7/series-workflowh42k7-convert-artifact-1388569645/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,}