Name: series-workflowmvcp8 Phase: Succeeded StartedAt: 2026-07-13 22:22:58 +0000 UTC FinishedAt: 2026-07-14 02:48:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmvcp8[0] Phase: Succeeded StartedAt: 2026-07-13 22:22:58 +0000 UTC FinishedAt: 2026-07-13 22:39:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmvcp8[0].run-triage Phase: Succeeded StartedAt: 2026-07-13 22:22:58 +0000 UTC FinishedAt: 2026-07-13 22:39:37 +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": "35cb138c9029fed73eed7d7b9d0f100bdbf5ee44", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS" ], "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": "35cb138c9029fed73eed7d7b9d0f100bdbf5ee44", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS" ], "series_id": "1a12d3cf-d0b7-40ff-8759-2c2d0445c79a" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "allocate_file_region_entries", "region_add", "region_chg", "region_del" ], "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+CgkJCTx0ZD4yMDI2LzA3LzEzIDIyOjM4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FsbG9jYXRlX2ZpbGVfcmVnaW9uX2VudHJpZXMmIzM0OywKICAgICYjMzQ7cmVnaW9uX2FkZCYjMzQ7LAogICAgJiMzNDtyZWdpb25fY2hnJiMzNDssCiAgICAmIzM0O3JlZ2lvbl9kZWwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBsaXN0IGNvcnJ1cHRpb24gYnVnIGluIGFsbG9jYXRlX2ZpbGVfcmVnaW9uX2VudHJpZXMgaW4gaHVnZXRsYmZzLiBUaGUgYnVnIGlzIHRyaWdnZXJlZCBieSBhIHJhY2UgY29uZGl0aW9uIHdoZW4gdGhlIHJlZ2lvbiBjYWNoZSBuZWVkcyB0byBiZSByZWZpbGxlZCBtdWx0aXBsZSB0aW1lcy4gRnV6emluZyBodWdldGxiZnMgcmVzZXJ2YXRpb24gZnVuY3Rpb25zIGNhbiBoZWxwIGVuc3VyZSB0aGUgZml4IGlzIHJvYnVzdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAyMjozODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDhhZGJkNWI2ZjRiNDY3YWFlMTJjYjkxNzUwYzFiMGI4Njc0MmI2ZTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCAxMyAyMjozODoxMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmNcbmluZGV4IDU3MTIxMmI4MDgzNWVjLi5mOTU3N2E3ODlmZTY0ZiAxMDA2NDRcbi0tLSBhL21tL2h1Z2V0bGIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZXRsYi5jXG5AQCAtNjkzLDcgJiM0Mzs2OTMsNyBAQCBzdGF0aWMgaW50IGFsbG9jYXRlX2ZpbGVfcmVnaW9uX2VudHJpZXMoc3RydWN0IHJlc3ZfbWFwICpyZXN2LFxuIFxuIFx0XHRzcGluX2xvY2soXHUwMDI2cmVzdi1cdTAwM2Vsb2NrKTtcbiBcbi1cdFx0bGlzdF9zcGxpY2UoXHUwMDI2YWxsb2NhdGVkX3JlZ2lvbnMsIFx1MDAyNnJlc3YtXHUwMDNlcmVnaW9uX2NhY2hlKTtcbiYjNDM7XHRcdGxpc3Rfc3BsaWNlX2luaXQoXHUwMDI2YWxsb2NhdGVkX3JlZ2lvbnMsIFx1MDAyNnJlc3YtXHUwMDNlcmVnaW9uX2NhY2hlKTtcbiBcdFx0cmVzdi1cdTAwM2VyZWdpb25fY2FjaGVfY291bnQgJiM0Mzs9IHRvX2FsbG9jYXRlO1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLy5naXRpZ25vcmUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8uZ2l0aWdub3JlXG5pbmRleCA5Y2NkOWUxNDQ3ZTY2Yi4uN2RiODY1Nzk2MGQ5ZjAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8uZ2l0aWdub3JlXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8uZ2l0aWdub3JlXG5AQCAtNTksNiAmIzQzOzU5LDcgQEAgaHVnZXRsYl9tYWR2X3ZzX21hcFxuIG1zZWFsX3Rlc3RcbiBkcm9wcGFibGVcbiBodWdldGxiX2Rpb1xuJiM0MztodWdldGxiX3JlZ2lvbl9jYWNoZV9yYWNlXG4gcGtleV9zaWdoYW5kbGVyX3Rlc3RzXzMyXG4gcGtleV9zaWdoYW5kbGVyX3Rlc3RzXzY0XG4gZ3VhcmQtcmVnaW9uc1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGVcbmluZGV4IGU2ZGY5NjhmMDk3MWM4Li40MjFhMGI3ZmRkZGYyOCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZVxuQEAgLTY3LDYgJiM0Mzs2Nyw3IEBAIFRFU1RfR0VOX0ZJTEVTICYjNDM7PSBodWdldGxiLXJlYWQtaHdwb2lzb25cbiBURVNUX0dFTl9GSUxFUyAmIzQzOz0gaHVnZXRsYi1zaG1cbiBURVNUX0dFTl9GSUxFUyAmIzQzOz0gaHVnZXRsYi1zb2Z0LW9mZmxpbmVcbiBURVNUX0dFTl9GSUxFUyAmIzQzOz0gaHVnZXRsYi12bWVtbWFwXG4mIzQzO1RFU1RfR0VOX0ZJTEVTICYjNDM7PSBodWdldGxiX3JlZ2lvbl9jYWNoZV9yYWNlXG4gVEVTVF9HRU5fRklMRVMgJiM0Mzs9IGtodWdlcGFnZWRcbiBURVNUX0dFTl9GSUxFUyAmIzQzOz0gbWFkdl9wb3B1bGF0ZVxuIFRFU1RfR0VOX0ZJTEVTICYjNDM7PSBtYXBfZml4ZWRfbm9yZXBsYWNlXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9yZWdpb25fY2FjaGVfcmFjZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9yZWdpb25fY2FjaGVfcmFjZS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjZlM2Y3NTM2NDBiZThjXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX3JlZ2lvbl9jYWNoZV9yYWNlLmNcbkBAIC0wLDAgJiM0MzsxLDMxNSBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsvKlxuJiM0MzsgKiBSZWdyZXNzaW9uIHRlc3QgZm9yIGxpc3QgY29ycnVwdGlvbiBpblxuJiM0MzsgKiBtbS9odWdldGxiLmM6YWxsb2NhdGVfZmlsZV9yZWdpb25fZW50cmllcygpLlxuJiM0MzsgKlxuJiM0MzsgKiBGb3JrIHByb2Nlc3NlcyBzaGFyaW5nIGEgaHVnZXRsYiBpbm9kZSB2aWEgYG1lbWZkX2NyZWF0ZShNRkRfSFVHRVRMQilgXG4mIzQzOyAqIGFuZCBoYXZlIHRoZW0gZmF1bHQgcmFuZ2VzIGFuZCBwdW5jaCBob2xlcyB0byBmcmFnbWVudCB0aGUgc2hhcmVkXG4mIzQzOyAqIGByZXN2X21hcGAgd2hpbGUgZHJhaW5pbmcgYHJlc3YtXHUwMDNlcmVnaW9uX2NhY2hlYCBmcm9tIGEgc2VwYXJhdGUgYWRkcmVzc1xuJiM0MzsgKiBzcGFjZS5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgX0dOVV9TT1VSQ0VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NmY250bC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3NldGptcC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3NpZ25hbC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0ZGJvb2wuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRpbnQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0ZGxpYi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3RpbWUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzeXMvbW1hbi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N5cy9zeXNjYWxsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3lzL3dhaXQuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZmFsbG9jLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbWVtZmQuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7Li4va3NlbGZ0ZXN0LmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaFwmIzM0O1xuJiM0MztcbiYjNDM7LyogVHVuYWJsZXMgKG92ZXJyaWRhYmxlIHZpYSBhcmd2KS4gKi9cbiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgZmlsZV9wYWdlcyA9IDY0O1x0LyogaHVnZSBwYWdlcyBiYWNraW5nIHRoZSBzaGFyZWQgZmlsZSAqL1xuJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IG5yX3Byb2NzO1x0XHQvKiAwID1cdTAwM2UgYXV0byAoMiAqIG5yIG9ubGluZSBjcHVzKSAqL1xuJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IGR1cmF0aW9uX3NlYyA9IDU7XHQvKiAtLXRyaWdnZXIgcnVuIHRpbWUgKi9cbiYjNDM7XG4mIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIGh1Z2VfcGFnZV9zaXplO1x0LyogYnl0ZXMgKi9cbiYjNDM7c3RhdGljIGludCBtZW1mZCA9IC0xO1xuJiM0MztzdGF0aWMgdm9sYXRpbGUgaW50ICpzdG9wO1x0XHQvKiBzaGFyZWQgYWNyb3NzIGZvcmtlZCBjaGlsZHJlbiAqL1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogUGVyLXByb2Nlc3MgU0lHQlVTIGVzY2FwZTogYSBmYXVsdCBjYW4gZmFpbCAocG9vbCBleGhhdXN0ZWQpIGFuZCByYWlzZVxuJiM0MzsgKiBTSUdCVVM7IGp1bXAgYmFjayBhbmQgYWJhbmRvbiB0aGUgcmVzdCBvZiB0aGUgY3VycmVudCByYW5nZSBpbnN0ZWFkIG9mXG4mIzQzOyAqIGR5aW5nLiAgRWFjaCBjaGlsZCBpcyBzaW5nbGUtdGhyZWFkZWQsIHNvIGEgZmlsZS1zY29wZSBidWZmZXIgaXMgZmluZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBzaWdqbXBfYnVmIHNpZ2J1c19lbnY7XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBzaWdidXNfaGFuZGxlcihpbnQgc2lnKVxuJiM0Mzt7XG4mIzQzO1x0c2lnbG9uZ2ptcChzaWdidXNfZW52LCAxKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgaW5zdGFsbF9zaWdidXNfaGFuZGxlcih2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHNpZ2FjdGlvbiBzYSA9IHtcbiYjNDM7XHRcdC5zYV9oYW5kbGVyID0gc2lnYnVzX2hhbmRsZXIsXG4mIzQzO1x0fTtcbiYjNDM7XG4mIzQzO1x0c2lnZW1wdHlzZXQoXHUwMDI2c2Euc2FfbWFzayk7XG4mIzQzO1x0c2lnYWN0aW9uKFNJR0JVUywgXHUwMDI2c2EsIE5VTEwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgbG9uZyBzeXNfbWVtZmRfY3JlYXRlKGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGludCBmbGFncylcbiYjNDM7e1xuJiM0MztcdHJldHVybiBzeXNjYWxsKF9fTlJfbWVtZmRfY3JlYXRlLCBuYW1lLCBmbGFncyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIE1hcCBbc3RhcnQsIHN0YXJ0JiM0MztsZW4pIG9mIHRoZSBzaGFyZWQgZmlsZSBhbmQgZmF1bHQgZXZlcnkgcGFnZSBpbi5cbiYjNDM7ICpcbiYjNDM7ICogVGhlIG1tYXAoKSBkcml2ZXMgbW1hcC10aW1lIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyAtXHUwMDNlIHJlZ2lvbl9jaGcgKHRoZVxuJiM0MzsgKiB3aWRlLXdpbmRvdyB2aWN0aW0gd2hlbiB0aGUgcmFuZ2UgaXMgZnJhZ21lbnRlZCkgJiM0MzsgcmVnaW9uX2FkZC4gIFRoZVxuJiM0MzsgKiBzdWJzZXF1ZW50IHN0b3JlcyBmYXVsdCBwYWdlcyBpbiAqd2l0aG91dCogaW5vZGVfbG9jaywgZHJpdmluZyB0aGVcbiYjNDM7ICogbG9jay1mcmVlIHJlZ2lvbl9hZGQvcmVnaW9uX2NoZyB0aGF0IGRyYWlucyByZXN2LVx1MDAzZXJlZ2lvbl9jYWNoZSAtLSB0aGVcbiYjNDM7ICogY29uY3VycmVuY3kgdGhlIGJ1Z2d5IGxvb3AgbmVlZHMgZnJvbSAqb3RoZXIqIHByb2Nlc3Nlcy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIG1hcF9hbmRfZmF1bHRfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBsZW4pXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGk7XG4mIzQzO1x0Y2hhciAqYWRkcjtcbiYjNDM7XG4mIzQzO1x0aWYgKCFsZW4pXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0YWRkciA9IG1tYXAoTlVMTCwgbGVuICogaHVnZV9wYWdlX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG4mIzQzO1x0XHQgICAgTUFQX1NIQVJFRCwgbWVtZmQsIHN0YXJ0ICogaHVnZV9wYWdlX3NpemUpO1xuJiM0MztcdGlmIChhZGRyID09IE1BUF9GQUlMRUQpXG4mIzQzO1x0XHRyZXR1cm47XHRcdC8qIEVOT01FTSB1bmRlciBwb29sIHByZXNzdXJlIGlzIGZpbmUgKi9cbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbGVuOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKHNpZ3NldGptcChzaWdidXNfZW52LCAxKSA9PSAwKVxuJiM0MztcdFx0XHQqKHZvbGF0aWxlIGNoYXIgKikoYWRkciAmIzQzOyBpICogaHVnZV9wYWdlX3NpemUpID0gKGNoYXIpaTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0YnJlYWs7XHQvKiBTSUdCVVM6IHBvb2wgZXhoYXVzdGVkLCBzdG9wIGZhdWx0aW5nICovXG4mIzQzO1x0fVxuJiM0MztcdG11bm1hcChhZGRyLCBsZW4gKiBodWdlX3BhZ2Vfc2l6ZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFJlbW92ZSBbc3RhcnQsIHN0YXJ0JiM0MztsZW4pIGh1Z2UgcGFnZXMgZnJvbSB0aGUgc2hhcmVkIGZpbGUsIGRyaXZpbmdcbiYjNDM7ICogaHVnZXRsYmZzX3B1bmNoX2hvbGUgLVx1MDAzZSByZW1vdmVfaW5vZGVfaHVnZXBhZ2VzIC1cdTAwM2UgcmVnaW9uX2RlbCBmb3IgdGhlIHBhZ2VzXG4mIzQzOyAqIHRoYXQgd2VyZSBmYXVsdGVkIGluIGFib3ZlLiAgVGhpcyBmcmVlcyBwYWdlcyBiYWNrIHRvIHRoZSBwb29sIChib3VuZGluZ1xuJiM0MzsgKiByZXNpZGVuY3kpIGFuZCByZS1mcmFnbWVudHMgdGhlIHJlc3ZfbWFwIHNvIGxhdGVyIHJlZ2lvbl9jaGcgY2FsbHMga2VlcFxuJiM0MzsgKiBuZWVkaW5nIG11bHRpcGxlIGVudHJpZXMuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBwdW5jaF9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGxlbilcbiYjNDM7e1xuJiM0MztcdGlmICghbGVuKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdGZhbGxvY2F0ZShtZW1mZCwgRkFMTE9DX0ZMX1BVTkNIX0hPTEUgfCBGQUxMT0NfRkxfS0VFUF9TSVpFLFxuJiM0MztcdFx0ICBzdGFydCAqIGh1Z2VfcGFnZV9zaXplLCBsZW4gKiBodWdlX3BhZ2Vfc2l6ZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIE9uZSBmb3JrZWQgd29ya2VyLiAgRWFjaCB3b3JrZXIgaXMgc2ltdWx0YW5lb3VzbHkgYSB2aWN0aW0gKGl0cyB3aWRlXG4mIzQzOyAqIG1tYXAtdGltZSByZWdpb25fY2hnKSBhbmQsIGZvciB0aGUgb3RoZXIgd29ya2VycywgYSBsb2NrLWZyZWUgY2FjaGVcbiYjNDM7ICogZHJhaW5lciAoaXRzIGZhdWx0cykgLS0gZXhhY3RseSB0aGUgc2hhcmVkLWlub2RlIG1hcCYjNDM7ZmF1bHQgY2h1cm4gc2VlbiBpblxuJiM0MzsgKiB0aGUgb3JpZ2luYWwgY3Jhc2ggKFFFTVUgcHJlYWxsb2MgJiM0MzsgU1BESy9CeXRlbGlnaHQgb24gb25lIGd1ZXN0LVJBTSBmaWxlKS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGNoaWxkX3dvcmtlcih1bnNpZ25lZCBpbnQgaWQpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBpbnQgc2VlZCA9IGlkICogMjY1NDQzNTc2MXUgXiAodW5zaWduZWQgaW50KXRpbWUoTlVMTCkgXlxuJiM0MztcdFx0XHQgICAgKCh1bnNpZ25lZCBpbnQpZ2V0cGlkKCkgXHUwMDNjXHUwMDNjIDEpO1xuJiM0MztcbiYjNDM7XHRpbnN0YWxsX3NpZ2J1c19oYW5kbGVyKCk7XG4mIzQzO1xuJiM0MztcdHdoaWxlICghKnN0b3ApIHtcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgc3RhcnQgPSByYW5kX3IoXHUwMDI2c2VlZCkgJSBmaWxlX3BhZ2VzO1xuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBsZW4gPSAxICYjNDM7IHJhbmRfcihcdTAwMjZzZWVkKSAlIChmaWxlX3BhZ2VzIC0gc3RhcnQpO1xuJiM0MztcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBCaWFzIHRvd2FyZCBtYXAmIzQzO2ZhdWx0ICh2aWN0aW1zIGFuZCBkcmFpbmVycyk7IHB1bmNoIGFcbiYjNDM7XHRcdCAqIHF1YXJ0ZXIgb2YgdGhlIHRpbWUgdG8ga2VlcCB0aGUgbWFwIGZyYWdtZW50ZWQgYW5kIHRvIGNhcFxuJiM0MztcdFx0ICogaG93IG1hbnkgcGFnZXMgc3RheSByZXNpZGVudC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKHJhbmRfcihcdTAwMjZzZWVkKSAlIDQpXG4mIzQzO1x0XHRcdG1hcF9hbmRfZmF1bHRfcmFuZ2Uoc3RhcnQsIGxlbik7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdHB1bmNoX3JhbmdlKHN0YXJ0LCBsZW4pO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogU2FmZSwgc2luZ2xlLXByb2Nlc3MgZnVuY3Rpb25hbCBjaGVjay4gIEl0IGZyYWdtZW50cyB0aGUgc2hhcmVkIHJlc3ZfbWFwXG4mIzQzOyAqIChyZXNlcnZhdGlvbnMgZm9yIGEgc2hhcmVkIG1hcHBpbmcgcGVyc2lzdCBvbiB0aGUgaW5vZGUgYWZ0ZXIgbXVubWFwKSBzb1xuJiM0MzsgKiB0aGF0IGEgc3Vic2VxdWVudCB3aG9sZS1maWxlIG1tYXAgbWFrZXMgcmVnaW9uX2NoZyBjb21wdXRlXG4mIzQzOyAqIHJlZ2lvbnNfbmVlZGVkIFx1MDAzZSAxLCBmb3JjaW5nIGFsbG9jYXRlX2ZpbGVfcmVnaW9uX2VudHJpZXMgdG8gYWxsb2NhdGUgYW5kXG4mIzQzOyAqIHNwbGljZSBzZXZlcmFsIGVudHJpZXMuICBUaGlzIGV4ZXJjaXNlcyB0aGUgYnVnZ3kgbGluZSwgYnV0IHdpdGhvdXRcbiYjNDM7ICogY29uY3VycmVuY3kgaXQgYWx3YXlzIG1ha2VzIGV4YWN0bHkgb25lIGxvb3AgaXRlcmF0aW9uLCBzbyBpdCBjYW5ub3QgdHJpcFxuJiM0MzsgKiB0aGUgcmFjZSBhbmQgaXMgc2FmZSBvbiBhbnkga2VybmVsLiAgUmV0dXJucyAwIG9uIHN1Y2Nlc3MuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IGZ1bmN0aW9uYWxfY2hlY2sodm9pZClcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgaTtcbiYjNDM7XHR2b2lkICphZGRyO1xuJiM0MztcbiYjNDM7XHQvKiBQdW5jaCBldmVyeXRoaW5nIHNvIHdlIHN0YXJ0IGZyb20gYW4gZW1wdHkgcmVzdl9tYXAuICovXG4mIzQzO1x0cHVuY2hfcmFuZ2UoMCwgZmlsZV9wYWdlcyk7XG4mIzQzO1xuJiM0MztcdC8qIFJlc2VydmUgZXZlcnkgb3RoZXIgaHVnZSBwYWdlIC1cdTAwM2UgfmZpbGVfcGFnZXMvMiBkaXNqb2ludCByZWdpb25zLiAqL1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGZpbGVfcGFnZXM7IGkgJiM0Mzs9IDIpXG4mIzQzO1x0XHRtYXBfYW5kX2ZhdWx0X3JhbmdlKGksIDEpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIE9uZSBtYXBwaW5nIHNwYW5uaW5nIHRoZSB3aG9sZSBmaWxlIG11c3QgZmlsbCBhbGwgdGhlIGhvbGVzIGluIGFcbiYjNDM7XHQgKiBzaW5nbGUgcmVnaW9uX2NoZyAtXHUwMDNlIGEgbXVsdGktZW50cnkgcmVnaW9uX2NhY2hlIHJlZmlsbC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRhZGRyID0gbW1hcChOVUxMLCBmaWxlX3BhZ2VzICogaHVnZV9wYWdlX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG4mIzQzO1x0XHQgICAgTUFQX1NIQVJFRCwgbWVtZmQsIDApO1xuJiM0MztcdGlmIChhZGRyID09IE1BUF9GQUlMRUQpIHtcbiYjNDM7XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O3dob2xlLWZpbGUgbW1hcCBmYWlsZWQ6ICVzXFxuXCYjMzQ7LCBzdHJlcnJvcihlcnJubykpO1xuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcdH1cbiYjNDM7XHRtdW5tYXAoYWRkciwgZmlsZV9wYWdlcyAqIGh1Z2VfcGFnZV9zaXplKTtcbiYjNDM7XHRwdW5jaF9yYW5nZSgwLCBmaWxlX3BhZ2VzKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydW5fdHJpZ2dlcih2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0cGlkX3QgKnBpZHM7XG4mIzQzO1x0dW5zaWduZWQgaW50IGksIHN0YXJ0ZWQgPSAwO1xuJiM0MztcbiYjNDM7XHRzdG9wID0gbW1hcChOVUxMLCBzaXplb2YoKnN0b3ApLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxuJiM0MztcdFx0ICAgIE1BUF9TSEFSRUQgfCBNQVBfQU5PTllNT1VTLCAtMSwgMCk7XG4mIzQzO1x0aWYgKHN0b3AgPT0gTUFQX0ZBSUxFRClcbiYjNDM7XHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDttbWFwKHN0b3AgZmxhZyk6ICVzXFxuXCYjMzQ7LCBzdHJlcnJvcihlcnJubykpO1xuJiM0MztcdCpzdG9wID0gMDtcbiYjNDM7XG4mIzQzO1x0cGlkcyA9IGNhbGxvYyhucl9wcm9jcywgc2l6ZW9mKCpwaWRzKSk7XG4mIzQzO1x0aWYgKCFwaWRzKVxuJiM0MztcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O2NhbGxvYzogJXNcXG5cJiMzNDssIHN0cmVycm9yKGVycm5vKSk7XG4mIzQzO1xuJiM0MztcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O3N0cmVzc2luZyAldSBwcm9jZXNzZXMgZm9yICV1cyBvbiAlbHUgaHVnZSBwYWdlcyAoJWx1IE1pQilcXG5cJiMzNDssXG4mIzQzO1x0XHQgICAgICAgbnJfcHJvY3MsIGR1cmF0aW9uX3NlYywgZmlsZV9wYWdlcyxcbiYjNDM7XHRcdCAgICAgICAoZmlsZV9wYWdlcyAqIGh1Z2VfcGFnZV9zaXplKSBcdTAwM2VcdTAwM2UgMjApO1xuJiM0MztcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O1dBUk5JTkc6IGEgdnVsbmVyYWJsZSBrZXJuZWwgd2lsbCBwYW5pYyBoZXJlXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfcHJvY3M7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRwaWRfdCBwaWQgPSBmb3JrKCk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHBpZCBcdTAwM2MgMCkge1xuJiM0MztcdFx0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtmb3JrOiAlc1xcblwmIzM0Oywgc3RyZXJyb3IoZXJybm8pKTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRpZiAocGlkID09IDApIHtcbiYjNDM7XHRcdFx0ZnJlZShwaWRzKTtcbiYjNDM7XHRcdFx0Y2hpbGRfd29ya2VyKGkpO1xuJiM0MztcdFx0XHRfZXhpdCgwKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHBpZHNbc3RhcnRlZCYjNDM7JiM0MztdID0gcGlkO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFzdGFydGVkKSB7XG4mIzQzO1x0XHRmcmVlKHBpZHMpO1xuJiM0MztcdFx0bXVubWFwKCh2b2lkICopc3RvcCwgc2l6ZW9mKCpzdG9wKSk7XG4mIzQzO1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7bm8gd29ya2VyIHByb2Nlc3NlcyBzdGFydGVkXFxuXCYjMzQ7KTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNsZWVwKGR1cmF0aW9uX3NlYyk7XG4mIzQzO1x0KnN0b3AgPSAxO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBzdGFydGVkOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdHdhaXRwaWQocGlkc1tpXSwgTlVMTCwgMCk7XG4mIzQzO1x0ZnJlZShwaWRzKTtcbiYjNDM7XHRtdW5tYXAoKHZvaWQgKilzdG9wLCBzaXplb2YoKnN0b3ApKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdXNhZ2UoY29uc3QgY2hhciAqcHJvZylcbiYjNDM7e1xuJiM0MztcdGZwcmludGYoc3RkZXJyLFxuJiM0MztcdFx0XCYjMzQ7dXNhZ2U6ICVzIFstLXRyaWdnZXJdIFstcyBodWdlX3BhZ2VzXSBbLXQgcHJvY3NdIFstZCBzZWNvbmRzXVxcblwmIzM0O1xuJiM0MztcdFx0XCYjMzQ7ICAoZGVmYXVsdCkgcnVuIGEgc2FmZSBzaW5nbGUtcHJvY2VzcyBmdW5jdGlvbmFsIGNoZWNrXFxuXCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDsgIC0tdHJpZ2dlciBmb3JrJiM0MztmYXVsdCBjb25jdXJyZW50IHJlcHJvZHVjZXIgKENBTiBQQU5JQyBBIEJVR0dZIEhPU1QpXFxuXCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDsgIC1zICBodWdlIHBhZ2VzIGJhY2tpbmcgdGhlIHNoYXJlZCBmaWxlIChkZWZhdWx0ICVsdSlcXG5cJiMzNDtcbiYjNDM7XHRcdFwmIzM0OyAgLXQgIHdvcmtlciBwcm9jZXNzZXMgZm9yIC0tdHJpZ2dlciAoZGVmYXVsdCAyICogbnJfY3B1cylcXG5cJiMzNDtcbiYjNDM7XHRcdFwmIzM0OyAgLWQgIC0tdHJpZ2dlciBydW4gdGltZSBpbiBzZWNvbmRzIChkZWZhdWx0ICV1KVxcblwmIzM0OyxcbiYjNDM7XHRcdHByb2csIGZpbGVfcGFnZXMsIGR1cmF0aW9uX3NlYyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4mIzQzO3tcbiYjNDM7XHRib29sIHRyaWdnZXIgPSBmYWxzZTtcbiYjNDM7XHRpbnQgaSwgcmV0O1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAxOyBpIFx1MDAzYyBhcmdjOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKCFzdHJjbXAoYXJndltpXSwgXCYjMzQ7LS10cmlnZ2VyXCYjMzQ7KSkge1xuJiM0MztcdFx0XHR0cmlnZ2VyID0gdHJ1ZTtcbiYjNDM7XHRcdH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2W2ldLCBcJiMzNDstc1wmIzM0OykgXHUwMDI2XHUwMDI2IGkgJiM0MzsgMSBcdTAwM2MgYXJnYykge1xuJiM0MztcdFx0XHRmaWxlX3BhZ2VzID0gc3RydG91bChhcmd2WyYjNDM7JiM0MztpXSwgTlVMTCwgMCk7XG4mIzQzO1x0XHR9IGVsc2UgaWYgKCFzdHJjbXAoYXJndltpXSwgXCYjMzQ7LXRcJiMzNDspIFx1MDAyNlx1MDAyNiBpICYjNDM7IDEgXHUwMDNjIGFyZ2MpIHtcbiYjNDM7XHRcdFx0bnJfcHJvY3MgPSBzdHJ0b3VsKGFyZ3ZbJiM0MzsmIzQzO2ldLCBOVUxMLCAwKTtcbiYjNDM7XHRcdH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2W2ldLCBcJiMzNDstZFwmIzM0OykgXHUwMDI2XHUwMDI2IGkgJiM0MzsgMSBcdTAwM2MgYXJnYykge1xuJiM0MztcdFx0XHRkdXJhdGlvbl9zZWMgPSBzdHJ0b3VsKGFyZ3ZbJiM0MzsmIzQzO2ldLCBOVUxMLCAwKTtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdHVzYWdlKGFyZ3ZbMF0pO1xuJiM0MztcdFx0XHRyZXR1cm4gS1NGVF9GQUlMO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0a3NmdF9wcmludF9oZWFkZXIoKTtcbiYjNDM7XHRrc2Z0X3NldF9wbGFuKDEpO1xuJiM0MztcbiYjNDM7XHRpZiAoZmlsZV9wYWdlcyBcdTAwM2MgNClcbiYjNDM7XHRcdGZpbGVfcGFnZXMgPSA0O1xuJiM0MztcdGlmICghbnJfcHJvY3MpIHtcbiYjNDM7XHRcdGxvbmcgY3B1cyA9IHN5c2NvbmYoX1NDX05QUk9DRVNTT1JTX09OTE4pO1xuJiM0MztcbiYjNDM7XHRcdG5yX3Byb2NzID0gY3B1cyBcdTAwM2UgMCA/ICh1bnNpZ25lZCBpbnQpY3B1cyAqIDIgOiA0O1xuJiM0MztcdH1cbiYjNDM7XHRpZiAobnJfcHJvY3MgXHUwMDNjIDIpXG4mIzQzO1x0XHRucl9wcm9jcyA9IDI7XG4mIzQzO1xuJiM0MztcdGh1Z2VfcGFnZV9zaXplID0gZGVmYXVsdF9odWdlX3BhZ2Vfc2l6ZSgpO1xuJiM0MztcdGlmICghaHVnZV9wYWdlX3NpemUpXG4mIzQzO1x0XHRrc2Z0X2V4aXRfc2tpcChcJiMzNDtubyBodWdldGxiZnMgLyBodWdlIHBhZ2Ugc2l6ZSBhdmFpbGFibGVcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEJvdGggbW9kZXMgZmF1bHQgcGFnZXMgaW4gKGZ1bmN0aW9uYWxfY2hlY2sgdG91Y2hlcyBldmVyeSBwYWdlIGl0XG4mIzQzO1x0ICogbWFwcywgYW5kIC0tdHJpZ2dlciYjMzk7cyB3b3JrZXJzIGZhdWx0IHRoZSByYW5nZXMgdGhleSBtYXApLCBzbyB0aGVcbiYjNDM7XHQgKiB3aG9sZSBmaWxlIG1heSBiZWNvbWUgcmVzaWRlbnQ7IHJlcXVpcmUgdGhhdCBtYW55ICpmcmVlKiBodWdlIHBhZ2VzLFxuJiM0MztcdCAqIG5vdCBqdXN0IHJlc2VydmF0aW9ucy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoaHVnZXRsYl9mcmVlX2RlZmF1bHRfcGFnZXMoKSBcdTAwM2MgZmlsZV9wYWdlcylcbiYjNDM7XHRcdGtzZnRfZXhpdF9za2lwKFwmIzM0O25lZWQgJWx1IGZyZWUgaHVnZSBwYWdlcywgaGF2ZSAlbHUgKHNldCBucl9odWdlcGFnZXMpXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgICAgZmlsZV9wYWdlcywgaHVnZXRsYl9mcmVlX2RlZmF1bHRfcGFnZXMoKSk7XG4mIzQzO1xuJiM0MztcdG1lbWZkID0gc3lzX21lbWZkX2NyZWF0ZShcJiMzNDtodWdldGxiX3JlZ2lvbl9jYWNoZV9yYWNlXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCBNRkRfSFVHRVRMQiB8XG4mIzQzO1x0XHRcdFx0IChfX2J1aWx0aW5fY3R6bChodWdlX3BhZ2Vfc2l6ZSkgXHUwMDNjXHUwMDNjIE1GRF9IVUdFX1NISUZUKSk7XG4mIzQzO1x0aWYgKG1lbWZkIFx1MDAzYyAwKVxuJiM0MztcdFx0a3NmdF9leGl0X3NraXAoXCYjMzQ7bWVtZmRfY3JlYXRlKE1GRF9IVUdFVExCKTogJXNcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgICAgICBzdHJlcnJvcihlcnJubykpO1xuJiM0MztcdGlmIChmdHJ1bmNhdGUobWVtZmQsIGZpbGVfcGFnZXMgKiBodWdlX3BhZ2Vfc2l6ZSkpIHtcbiYjNDM7XHRcdGNsb3NlKG1lbWZkKTtcbiYjNDM7XHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtmdHJ1bmNhdGU6ICVzXFxuXCYjMzQ7LCBzdHJlcnJvcihlcnJubykpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHRyaWdnZXIpXG4mIzQzO1x0XHRyZXQgPSBydW5fdHJpZ2dlcigpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHJldCA9IGZ1bmN0aW9uYWxfY2hlY2soKTtcbiYjNDM7XG4mIzQzO1x0Y2xvc2UobWVtZmQpO1xuJiM0MztcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0a3NmdF90ZXN0X3Jlc3VsdF9mYWlsKFwmIzM0O2h1Z2V0bGIgcmVnaW9uX2NhY2hlIHJhY2UgY2hlY2tcXG5cJiMzNDspO1xuJiM0MztcdGVsc2UgaWYgKHRyaWdnZXIpXG4mIzQzO1x0XHRrc2Z0X3Rlc3RfcmVzdWx0X3Bhc3MoXCYjMzQ7c3Vydml2ZWQgY29uY3VycmVudCByZWdpb25fY2FjaGUgY2h1cm5cXG5cJiMzNDspO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGtzZnRfdGVzdF9yZXN1bHRfcGFzcyhcJiMzNDttdWx0aS1lbnRyeSByZWdpb25fY2FjaGUgcmVmaWxsIHdvcmtzXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0a3NmdF9maW5pc2hlZCgpO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaFxuaW5kZXggOGMyOTZkZWRmMDQ3NGQuLjBjYjg1NzA1NjkxNWY0IDEwMDc1NVxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2hcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoXG5AQCAtMjY3LDYgJiM0MzsyNjcsNyBAQCBDQVRFR09SWT1cJiMzNDtodWdldGxiXCYjMzQ7IHJ1bl90ZXN0IC4vaHVnZXRsYi1tYWR2aXNlXG4gQ0FURUdPUlk9XCYjMzQ7aHVnZXRsYlwmIzM0OyBydW5fdGVzdCAuL2h1Z2V0bGJfZGlvXG4gQ0FURUdPUlk9XCYjMzQ7aHVnZXRsYlwmIzM0OyBydW5fdGVzdCAuL2h1Z2V0bGJfZmF1bHRfYWZ0ZXJfbWFkdlxuIENBVEVHT1JZPVwmIzM0O2h1Z2V0bGJcJiMzNDsgcnVuX3Rlc3QgLi9odWdldGxiX21hZHZfdnNfbWFwXG4mIzQzO0NBVEVHT1JZPVwmIzM0O2h1Z2V0bGJcJiMzNDsgcnVuX3Rlc3QgLi9odWdldGxiX3JlZ2lvbl9jYWNoZV9yYWNlXG4gXG4gaWYgdGVzdF9zZWxlY3RlZCBcJiMzNDtodWdldGxiXCYjMzQ7OyB0aGVuXG4gXHRlY2hvIFwmIzM0O05PVEU6IFRoZXNlIGh1Z2V0bGIgdGVzdHMgcHJvdmlkZSBtaW5pbWFsIGNvdmVyYWdlLiAgVXNlXCYjMzQ7XHQgIHwgdGFwX3ByZWZpeFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDIyOjM4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FsbG9jYXRlX2ZpbGVfcmVnaW9uX2VudHJpZXMmIzM0OywKICAgICYjMzQ7cmVnaW9uX2FkZCYjMzQ7LAogICAgJiMzNDtyZWdpb25fY2hnJiMzNDssCiAgICAmIzM0O3JlZ2lvbl9kZWwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBsaXN0IGNvcnJ1cHRpb24gYnVnIGluIGFsbG9jYXRlX2ZpbGVfcmVnaW9uX2VudHJpZXMgaW4gaHVnZXRsYmZzLiBUaGUgYnVnIGlzIHRyaWdnZXJlZCBieSBhIHJhY2UgY29uZGl0aW9uIHdoZW4gdGhlIHJlZ2lvbiBjYWNoZSBuZWVkcyB0byBiZSByZWZpbGxlZCBtdWx0aXBsZSB0aW1lcy4gRnV6emluZyBodWdldGxiZnMgcmVzZXJ2YXRpb24gZnVuY3Rpb25zIGNhbiBoZWxwIGVuc3VyZSB0aGUgZml4IGlzIHJvYnVzdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOGFkYmQ1YjZmNGI0NjdhYWUxMmNiOTE3NTBjMWIwYjg2NzQyYjZlNgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gSnVsIDEzIDIyOjM4OjEyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYi5jIGIvbW0vaHVnZXRsYi5jCmluZGV4IDU3MTIxMmI4MDgzNWVjLi5mOTU3N2E3ODlmZTY0ZiAxMDA2NDQKLS0tIGEvbW0vaHVnZXRsYi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2V0bGIuYwpAQCAtNjkzLDcgJiM0Mzs2OTMsNyBAQCBzdGF0aWMgaW50IGFsbG9jYXRlX2ZpbGVfcmVnaW9uX2VudHJpZXMoc3RydWN0IHJlc3ZfbWFwICpyZXN2LAogCiAJCXNwaW5fbG9jaygmYW1wO3Jlc3YtJmd0O2xvY2spOwogCi0JCWxpc3Rfc3BsaWNlKCZhbXA7YWxsb2NhdGVkX3JlZ2lvbnMsICZhbXA7cmVzdi0mZ3Q7cmVnaW9uX2NhY2hlKTsKJiM0MzsJCWxpc3Rfc3BsaWNlX2luaXQoJmFtcDthbGxvY2F0ZWRfcmVnaW9ucywgJmFtcDtyZXN2LSZndDtyZWdpb25fY2FjaGUpOwogCQlyZXN2LSZndDtyZWdpb25fY2FjaGVfY291bnQgJiM0Mzs9IHRvX2FsbG9jYXRlOwogCX0KIApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vLmdpdGlnbm9yZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLy5naXRpZ25vcmUKaW5kZXggOWNjZDllMTQ0N2U2NmIuLjdkYjg2NTc5NjBkOWYwIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8uZ2l0aWdub3JlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLy5naXRpZ25vcmUKQEAgLTU5LDYgJiM0Mzs1OSw3IEBAIGh1Z2V0bGJfbWFkdl92c19tYXAKIG1zZWFsX3Rlc3QKIGRyb3BwYWJsZQogaHVnZXRsYl9kaW8KJiM0MztodWdldGxiX3JlZ2lvbl9jYWNoZV9yYWNlCiBwa2V5X3NpZ2hhbmRsZXJfdGVzdHNfMzIKIHBrZXlfc2lnaGFuZGxlcl90ZXN0c182NAogZ3VhcmQtcmVnaW9ucwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZQppbmRleCBlNmRmOTY4ZjA5NzFjOC4uNDIxYTBiN2ZkZGRmMjggMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlCkBAIC02Nyw2ICYjNDM7NjcsNyBAQCBURVNUX0dFTl9GSUxFUyAmIzQzOz0gaHVnZXRsYi1yZWFkLWh3cG9pc29uCiBURVNUX0dFTl9GSUxFUyAmIzQzOz0gaHVnZXRsYi1zaG0KIFRFU1RfR0VOX0ZJTEVTICYjNDM7PSBodWdldGxiLXNvZnQtb2ZmbGluZQogVEVTVF9HRU5fRklMRVMgJiM0Mzs9IGh1Z2V0bGItdm1lbW1hcAomIzQzO1RFU1RfR0VOX0ZJTEVTICYjNDM7PSBodWdldGxiX3JlZ2lvbl9jYWNoZV9yYWNlCiBURVNUX0dFTl9GSUxFUyAmIzQzOz0ga2h1Z2VwYWdlZAogVEVTVF9HRU5fRklMRVMgJiM0Mzs9IG1hZHZfcG9wdWxhdGUKIFRFU1RfR0VOX0ZJTEVTICYjNDM7PSBtYXBfZml4ZWRfbm9yZXBsYWNlCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX3JlZ2lvbl9jYWNoZV9yYWNlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX3JlZ2lvbl9jYWNoZV9yYWNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjZlM2Y3NTM2NDBiZThjCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9yZWdpb25fY2FjaGVfcmFjZS5jCkBAIC0wLDAgJiM0MzsxLDMxNSBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyoKJiM0MzsgKiBSZWdyZXNzaW9uIHRlc3QgZm9yIGxpc3QgY29ycnVwdGlvbiBpbgomIzQzOyAqIG1tL2h1Z2V0bGIuYzphbGxvY2F0ZV9maWxlX3JlZ2lvbl9lbnRyaWVzKCkuCiYjNDM7ICoKJiM0MzsgKiBGb3JrIHByb2Nlc3NlcyBzaGFyaW5nIGEgaHVnZXRsYiBpbm9kZSB2aWEgYG1lbWZkX2NyZWF0ZShNRkRfSFVHRVRMQilgCiYjNDM7ICogYW5kIGhhdmUgdGhlbSBmYXVsdCByYW5nZXMgYW5kIHB1bmNoIGhvbGVzIHRvIGZyYWdtZW50IHRoZSBzaGFyZWQKJiM0MzsgKiBgcmVzdl9tYXBgIHdoaWxlIGRyYWluaW5nIGByZXN2LSZndDtyZWdpb25fY2FjaGVgIGZyb20gYSBzZXBhcmF0ZSBhZGRyZXNzCiYjNDM7ICogc3BhY2UuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBfR05VX1NPVVJDRQomIzQzOyNpbmNsdWRlICZsdDtlcnJuby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtmY250bC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzZXRqbXAuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c2lnbmFsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGJvb2wuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkaW50LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGxpYi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7dGltZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL21tYW4uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL3N5c2NhbGwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL3dhaXQuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZmFsbG9jLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L21lbWZkLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDsuLi9rc2VsZnRlc3QuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oJiMzNDsKJiM0MzsKJiM0MzsvKiBUdW5hYmxlcyAob3ZlcnJpZGFibGUgdmlhIGFyZ3YpLiAqLwomIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIGZpbGVfcGFnZXMgPSA2NDsJLyogaHVnZSBwYWdlcyBiYWNraW5nIHRoZSBzaGFyZWQgZmlsZSAqLwomIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQgbnJfcHJvY3M7CQkvKiAwID0mZ3Q7IGF1dG8gKDIgKiBuciBvbmxpbmUgY3B1cykgKi8KJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IGR1cmF0aW9uX3NlYyA9IDU7CS8qIC0tdHJpZ2dlciBydW4gdGltZSAqLwomIzQzOwomIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIGh1Z2VfcGFnZV9zaXplOwkvKiBieXRlcyAqLwomIzQzO3N0YXRpYyBpbnQgbWVtZmQgPSAtMTsKJiM0MztzdGF0aWMgdm9sYXRpbGUgaW50ICpzdG9wOwkJLyogc2hhcmVkIGFjcm9zcyBmb3JrZWQgY2hpbGRyZW4gKi8KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFBlci1wcm9jZXNzIFNJR0JVUyBlc2NhcGU6IGEgZmF1bHQgY2FuIGZhaWwgKHBvb2wgZXhoYXVzdGVkKSBhbmQgcmFpc2UKJiM0MzsgKiBTSUdCVVM7IGp1bXAgYmFjayBhbmQgYWJhbmRvbiB0aGUgcmVzdCBvZiB0aGUgY3VycmVudCByYW5nZSBpbnN0ZWFkIG9mCiYjNDM7ICogZHlpbmcuICBFYWNoIGNoaWxkIGlzIHNpbmdsZS10aHJlYWRlZCwgc28gYSBmaWxlLXNjb3BlIGJ1ZmZlciBpcyBmaW5lLgomIzQzOyAqLwomIzQzO3N0YXRpYyBzaWdqbXBfYnVmIHNpZ2J1c19lbnY7CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgc2lnYnVzX2hhbmRsZXIoaW50IHNpZykKJiM0Mzt7CiYjNDM7CXNpZ2xvbmdqbXAoc2lnYnVzX2VudiwgMSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGluc3RhbGxfc2lnYnVzX2hhbmRsZXIodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzaWdhY3Rpb24gc2EgPSB7CiYjNDM7CQkuc2FfaGFuZGxlciA9IHNpZ2J1c19oYW5kbGVyLAomIzQzOwl9OwomIzQzOwomIzQzOwlzaWdlbXB0eXNldCgmYW1wO3NhLnNhX21hc2spOwomIzQzOwlzaWdhY3Rpb24oU0lHQlVTLCAmYW1wO3NhLCBOVUxMKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGxvbmcgc3lzX21lbWZkX2NyZWF0ZShjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiYjNDM7ewomIzQzOwlyZXR1cm4gc3lzY2FsbChfX05SX21lbWZkX2NyZWF0ZSwgbmFtZSwgZmxhZ3MpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIE1hcCBbc3RhcnQsIHN0YXJ0JiM0MztsZW4pIG9mIHRoZSBzaGFyZWQgZmlsZSBhbmQgZmF1bHQgZXZlcnkgcGFnZSBpbi4KJiM0MzsgKgomIzQzOyAqIFRoZSBtbWFwKCkgZHJpdmVzIG1tYXAtdGltZSBodWdldGxiX3Jlc2VydmVfcGFnZXMgLSZndDsgcmVnaW9uX2NoZyAodGhlCiYjNDM7ICogd2lkZS13aW5kb3cgdmljdGltIHdoZW4gdGhlIHJhbmdlIGlzIGZyYWdtZW50ZWQpICYjNDM7IHJlZ2lvbl9hZGQuICBUaGUKJiM0MzsgKiBzdWJzZXF1ZW50IHN0b3JlcyBmYXVsdCBwYWdlcyBpbiAqd2l0aG91dCogaW5vZGVfbG9jaywgZHJpdmluZyB0aGUKJiM0MzsgKiBsb2NrLWZyZWUgcmVnaW9uX2FkZC9yZWdpb25fY2hnIHRoYXQgZHJhaW5zIHJlc3YtJmd0O3JlZ2lvbl9jYWNoZSAtLSB0aGUKJiM0MzsgKiBjb25jdXJyZW5jeSB0aGUgYnVnZ3kgbG9vcCBuZWVkcyBmcm9tICpvdGhlciogcHJvY2Vzc2VzLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIG1hcF9hbmRfZmF1bHRfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBsZW4pCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIGk7CiYjNDM7CWNoYXIgKmFkZHI7CiYjNDM7CiYjNDM7CWlmICghbGVuKQomIzQzOwkJcmV0dXJuOwomIzQzOwlhZGRyID0gbW1hcChOVUxMLCBsZW4gKiBodWdlX3BhZ2Vfc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwKJiM0MzsJCSAgICBNQVBfU0hBUkVELCBtZW1mZCwgc3RhcnQgKiBodWdlX3BhZ2Vfc2l6ZSk7CiYjNDM7CWlmIChhZGRyID09IE1BUF9GQUlMRUQpCiYjNDM7CQlyZXR1cm47CQkvKiBFTk9NRU0gdW5kZXIgcG9vbCBwcmVzc3VyZSBpcyBmaW5lICovCiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBsZW47IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAoc2lnc2V0am1wKHNpZ2J1c19lbnYsIDEpID09IDApCiYjNDM7CQkJKih2b2xhdGlsZSBjaGFyICopKGFkZHIgJiM0MzsgaSAqIGh1Z2VfcGFnZV9zaXplKSA9IChjaGFyKWk7CiYjNDM7CQllbHNlCiYjNDM7CQkJYnJlYWs7CS8qIFNJR0JVUzogcG9vbCBleGhhdXN0ZWQsIHN0b3AgZmF1bHRpbmcgKi8KJiM0MzsJfQomIzQzOwltdW5tYXAoYWRkciwgbGVuICogaHVnZV9wYWdlX3NpemUpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFJlbW92ZSBbc3RhcnQsIHN0YXJ0JiM0MztsZW4pIGh1Z2UgcGFnZXMgZnJvbSB0aGUgc2hhcmVkIGZpbGUsIGRyaXZpbmcKJiM0MzsgKiBodWdldGxiZnNfcHVuY2hfaG9sZSAtJmd0OyByZW1vdmVfaW5vZGVfaHVnZXBhZ2VzIC0mZ3Q7IHJlZ2lvbl9kZWwgZm9yIHRoZSBwYWdlcwomIzQzOyAqIHRoYXQgd2VyZSBmYXVsdGVkIGluIGFib3ZlLiAgVGhpcyBmcmVlcyBwYWdlcyBiYWNrIHRvIHRoZSBwb29sIChib3VuZGluZwomIzQzOyAqIHJlc2lkZW5jeSkgYW5kIHJlLWZyYWdtZW50cyB0aGUgcmVzdl9tYXAgc28gbGF0ZXIgcmVnaW9uX2NoZyBjYWxscyBrZWVwCiYjNDM7ICogbmVlZGluZyBtdWx0aXBsZSBlbnRyaWVzLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHB1bmNoX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgbGVuKQomIzQzO3sKJiM0MzsJaWYgKCFsZW4pCiYjNDM7CQlyZXR1cm47CiYjNDM7CWZhbGxvY2F0ZShtZW1mZCwgRkFMTE9DX0ZMX1BVTkNIX0hPTEUgfCBGQUxMT0NfRkxfS0VFUF9TSVpFLAomIzQzOwkJICBzdGFydCAqIGh1Z2VfcGFnZV9zaXplLCBsZW4gKiBodWdlX3BhZ2Vfc2l6ZSk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogT25lIGZvcmtlZCB3b3JrZXIuICBFYWNoIHdvcmtlciBpcyBzaW11bHRhbmVvdXNseSBhIHZpY3RpbSAoaXRzIHdpZGUKJiM0MzsgKiBtbWFwLXRpbWUgcmVnaW9uX2NoZykgYW5kLCBmb3IgdGhlIG90aGVyIHdvcmtlcnMsIGEgbG9jay1mcmVlIGNhY2hlCiYjNDM7ICogZHJhaW5lciAoaXRzIGZhdWx0cykgLS0gZXhhY3RseSB0aGUgc2hhcmVkLWlub2RlIG1hcCYjNDM7ZmF1bHQgY2h1cm4gc2VlbiBpbgomIzQzOyAqIHRoZSBvcmlnaW5hbCBjcmFzaCAoUUVNVSBwcmVhbGxvYyAmIzQzOyBTUERLL0J5dGVsaWdodCBvbiBvbmUgZ3Vlc3QtUkFNIGZpbGUpLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGNoaWxkX3dvcmtlcih1bnNpZ25lZCBpbnQgaWQpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBpbnQgc2VlZCA9IGlkICogMjY1NDQzNTc2MXUgXiAodW5zaWduZWQgaW50KXRpbWUoTlVMTCkgXgomIzQzOwkJCSAgICAoKHVuc2lnbmVkIGludClnZXRwaWQoKSAmbHQ7Jmx0OyAxKTsKJiM0MzsKJiM0MzsJaW5zdGFsbF9zaWdidXNfaGFuZGxlcigpOwomIzQzOwomIzQzOwl3aGlsZSAoISpzdG9wKSB7CiYjNDM7CQl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gcmFuZF9yKCZhbXA7c2VlZCkgJSBmaWxlX3BhZ2VzOwomIzQzOwkJdW5zaWduZWQgbG9uZyBsZW4gPSAxICYjNDM7IHJhbmRfcigmYW1wO3NlZWQpICUgKGZpbGVfcGFnZXMgLSBzdGFydCk7CiYjNDM7CiYjNDM7CQkvKgomIzQzOwkJICogQmlhcyB0b3dhcmQgbWFwJiM0MztmYXVsdCAodmljdGltcyBhbmQgZHJhaW5lcnMpOyBwdW5jaCBhCiYjNDM7CQkgKiBxdWFydGVyIG9mIHRoZSB0aW1lIHRvIGtlZXAgdGhlIG1hcCBmcmFnbWVudGVkIGFuZCB0byBjYXAKJiM0MzsJCSAqIGhvdyBtYW55IHBhZ2VzIHN0YXkgcmVzaWRlbnQuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChyYW5kX3IoJmFtcDtzZWVkKSAlIDQpCiYjNDM7CQkJbWFwX2FuZF9mYXVsdF9yYW5nZShzdGFydCwgbGVuKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlwdW5jaF9yYW5nZShzdGFydCwgbGVuKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFNhZmUsIHNpbmdsZS1wcm9jZXNzIGZ1bmN0aW9uYWwgY2hlY2suICBJdCBmcmFnbWVudHMgdGhlIHNoYXJlZCByZXN2X21hcAomIzQzOyAqIChyZXNlcnZhdGlvbnMgZm9yIGEgc2hhcmVkIG1hcHBpbmcgcGVyc2lzdCBvbiB0aGUgaW5vZGUgYWZ0ZXIgbXVubWFwKSBzbwomIzQzOyAqIHRoYXQgYSBzdWJzZXF1ZW50IHdob2xlLWZpbGUgbW1hcCBtYWtlcyByZWdpb25fY2hnIGNvbXB1dGUKJiM0MzsgKiByZWdpb25zX25lZWRlZCAmZ3Q7IDEsIGZvcmNpbmcgYWxsb2NhdGVfZmlsZV9yZWdpb25fZW50cmllcyB0byBhbGxvY2F0ZSBhbmQKJiM0MzsgKiBzcGxpY2Ugc2V2ZXJhbCBlbnRyaWVzLiAgVGhpcyBleGVyY2lzZXMgdGhlIGJ1Z2d5IGxpbmUsIGJ1dCB3aXRob3V0CiYjNDM7ICogY29uY3VycmVuY3kgaXQgYWx3YXlzIG1ha2VzIGV4YWN0bHkgb25lIGxvb3AgaXRlcmF0aW9uLCBzbyBpdCBjYW5ub3QgdHJpcAomIzQzOyAqIHRoZSByYWNlIGFuZCBpcyBzYWZlIG9uIGFueSBrZXJuZWwuICBSZXR1cm5zIDAgb24gc3VjY2Vzcy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IGZ1bmN0aW9uYWxfY2hlY2sodm9pZCkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGxvbmcgaTsKJiM0MzsJdm9pZCAqYWRkcjsKJiM0MzsKJiM0MzsJLyogUHVuY2ggZXZlcnl0aGluZyBzbyB3ZSBzdGFydCBmcm9tIGFuIGVtcHR5IHJlc3ZfbWFwLiAqLwomIzQzOwlwdW5jaF9yYW5nZSgwLCBmaWxlX3BhZ2VzKTsKJiM0MzsKJiM0MzsJLyogUmVzZXJ2ZSBldmVyeSBvdGhlciBodWdlIHBhZ2UgLSZndDsgfmZpbGVfcGFnZXMvMiBkaXNqb2ludCByZWdpb25zLiAqLwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgZmlsZV9wYWdlczsgaSAmIzQzOz0gMikKJiM0MzsJCW1hcF9hbmRfZmF1bHRfcmFuZ2UoaSwgMSk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIE9uZSBtYXBwaW5nIHNwYW5uaW5nIHRoZSB3aG9sZSBmaWxlIG11c3QgZmlsbCBhbGwgdGhlIGhvbGVzIGluIGEKJiM0MzsJICogc2luZ2xlIHJlZ2lvbl9jaGcgLSZndDsgYSBtdWx0aS1lbnRyeSByZWdpb25fY2FjaGUgcmVmaWxsLgomIzQzOwkgKi8KJiM0MzsJYWRkciA9IG1tYXAoTlVMTCwgZmlsZV9wYWdlcyAqIGh1Z2VfcGFnZV9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLAomIzQzOwkJICAgIE1BUF9TSEFSRUQsIG1lbWZkLCAwKTsKJiM0MzsJaWYgKGFkZHIgPT0gTUFQX0ZBSUxFRCkgewomIzQzOwkJa3NmdF9wcmludF9tc2coJiMzNDt3aG9sZS1maWxlIG1tYXAgZmFpbGVkOiAlc1xuJiMzNDssIHN0cmVycm9yKGVycm5vKSk7CiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CX0KJiM0MzsJbXVubWFwKGFkZHIsIGZpbGVfcGFnZXMgKiBodWdlX3BhZ2Vfc2l6ZSk7CiYjNDM7CXB1bmNoX3JhbmdlKDAsIGZpbGVfcGFnZXMpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydW5fdHJpZ2dlcih2b2lkKQomIzQzO3sKJiM0MzsJcGlkX3QgKnBpZHM7CiYjNDM7CXVuc2lnbmVkIGludCBpLCBzdGFydGVkID0gMDsKJiM0MzsKJiM0MzsJc3RvcCA9IG1tYXAoTlVMTCwgc2l6ZW9mKCpzdG9wKSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwKJiM0MzsJCSAgICBNQVBfU0hBUkVEIHwgTUFQX0FOT05ZTU9VUywgLTEsIDApOwomIzQzOwlpZiAoc3RvcCA9PSBNQVBfRkFJTEVEKQomIzQzOwkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7bW1hcChzdG9wIGZsYWcpOiAlc1xuJiMzNDssIHN0cmVycm9yKGVycm5vKSk7CiYjNDM7CSpzdG9wID0gMDsKJiM0MzsKJiM0MzsJcGlkcyA9IGNhbGxvYyhucl9wcm9jcywgc2l6ZW9mKCpwaWRzKSk7CiYjNDM7CWlmICghcGlkcykKJiM0MzsJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O2NhbGxvYzogJXNcbiYjMzQ7LCBzdHJlcnJvcihlcnJubykpOwomIzQzOwomIzQzOwlrc2Z0X3ByaW50X21zZygmIzM0O3N0cmVzc2luZyAldSBwcm9jZXNzZXMgZm9yICV1cyBvbiAlbHUgaHVnZSBwYWdlcyAoJWx1IE1pQilcbiYjMzQ7LAomIzQzOwkJICAgICAgIG5yX3Byb2NzLCBkdXJhdGlvbl9zZWMsIGZpbGVfcGFnZXMsCiYjNDM7CQkgICAgICAgKGZpbGVfcGFnZXMgKiBodWdlX3BhZ2Vfc2l6ZSkgJmd0OyZndDsgMjApOwomIzQzOwlrc2Z0X3ByaW50X21zZygmIzM0O1dBUk5JTkc6IGEgdnVsbmVyYWJsZSBrZXJuZWwgd2lsbCBwYW5pYyBoZXJlXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBucl9wcm9jczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXBpZF90IHBpZCA9IGZvcmsoKTsKJiM0MzsKJiM0MzsJCWlmIChwaWQgJmx0OyAwKSB7CiYjNDM7CQkJa3NmdF9wcmludF9tc2coJiMzNDtmb3JrOiAlc1xuJiMzNDssIHN0cmVycm9yKGVycm5vKSk7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CQlpZiAocGlkID09IDApIHsKJiM0MzsJCQlmcmVlKHBpZHMpOwomIzQzOwkJCWNoaWxkX3dvcmtlcihpKTsKJiM0MzsJCQlfZXhpdCgwKTsKJiM0MzsJCX0KJiM0MzsJCXBpZHNbc3RhcnRlZCYjNDM7JiM0MztdID0gcGlkOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghc3RhcnRlZCkgewomIzQzOwkJZnJlZShwaWRzKTsKJiM0MzsJCW11bm1hcCgodm9pZCAqKXN0b3AsIHNpemVvZigqc3RvcCkpOwomIzQzOwkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7bm8gd29ya2VyIHByb2Nlc3NlcyBzdGFydGVkXG4mIzM0Oyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc2xlZXAoZHVyYXRpb25fc2VjKTsKJiM0MzsJKnN0b3AgPSAxOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgc3RhcnRlZDsgaSYjNDM7JiM0MzspCiYjNDM7CQl3YWl0cGlkKHBpZHNbaV0sIE5VTEwsIDApOwomIzQzOwlmcmVlKHBpZHMpOwomIzQzOwltdW5tYXAoKHZvaWQgKilzdG9wLCBzaXplb2YoKnN0b3ApKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHVzYWdlKGNvbnN0IGNoYXIgKnByb2cpCiYjNDM7ewomIzQzOwlmcHJpbnRmKHN0ZGVyciwKJiM0MzsJCSYjMzQ7dXNhZ2U6ICVzIFstLXRyaWdnZXJdIFstcyBodWdlX3BhZ2VzXSBbLXQgcHJvY3NdIFstZCBzZWNvbmRzXVxuJiMzNDsKJiM0MzsJCSYjMzQ7ICAoZGVmYXVsdCkgcnVuIGEgc2FmZSBzaW5nbGUtcHJvY2VzcyBmdW5jdGlvbmFsIGNoZWNrXG4mIzM0OwomIzQzOwkJJiMzNDsgIC0tdHJpZ2dlciBmb3JrJiM0MztmYXVsdCBjb25jdXJyZW50IHJlcHJvZHVjZXIgKENBTiBQQU5JQyBBIEJVR0dZIEhPU1QpXG4mIzM0OwomIzQzOwkJJiMzNDsgIC1zICBodWdlIHBhZ2VzIGJhY2tpbmcgdGhlIHNoYXJlZCBmaWxlIChkZWZhdWx0ICVsdSlcbiYjMzQ7CiYjNDM7CQkmIzM0OyAgLXQgIHdvcmtlciBwcm9jZXNzZXMgZm9yIC0tdHJpZ2dlciAoZGVmYXVsdCAyICogbnJfY3B1cylcbiYjMzQ7CiYjNDM7CQkmIzM0OyAgLWQgIC0tdHJpZ2dlciBydW4gdGltZSBpbiBzZWNvbmRzIChkZWZhdWx0ICV1KVxuJiMzNDssCiYjNDM7CQlwcm9nLCBmaWxlX3BhZ2VzLCBkdXJhdGlvbl9zZWMpOwomIzQzO30KJiM0MzsKJiM0MztpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQomIzQzO3sKJiM0MzsJYm9vbCB0cmlnZ2VyID0gZmFsc2U7CiYjNDM7CWludCBpLCByZXQ7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDE7IGkgJmx0OyBhcmdjOyBpJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKCFzdHJjbXAoYXJndltpXSwgJiMzNDstLXRyaWdnZXImIzM0OykpIHsKJiM0MzsJCQl0cmlnZ2VyID0gdHJ1ZTsKJiM0MzsJCX0gZWxzZSBpZiAoIXN0cmNtcChhcmd2W2ldLCAmIzM0Oy1zJiMzNDspICZhbXA7JmFtcDsgaSAmIzQzOyAxICZsdDsgYXJnYykgewomIzQzOwkJCWZpbGVfcGFnZXMgPSBzdHJ0b3VsKGFyZ3ZbJiM0MzsmIzQzO2ldLCBOVUxMLCAwKTsKJiM0MzsJCX0gZWxzZSBpZiAoIXN0cmNtcChhcmd2W2ldLCAmIzM0Oy10JiMzNDspICZhbXA7JmFtcDsgaSAmIzQzOyAxICZsdDsgYXJnYykgewomIzQzOwkJCW5yX3Byb2NzID0gc3RydG91bChhcmd2WyYjNDM7JiM0MztpXSwgTlVMTCwgMCk7CiYjNDM7CQl9IGVsc2UgaWYgKCFzdHJjbXAoYXJndltpXSwgJiMzNDstZCYjMzQ7KSAmYW1wOyZhbXA7IGkgJiM0MzsgMSAmbHQ7IGFyZ2MpIHsKJiM0MzsJCQlkdXJhdGlvbl9zZWMgPSBzdHJ0b3VsKGFyZ3ZbJiM0MzsmIzQzO2ldLCBOVUxMLCAwKTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJdXNhZ2UoYXJndlswXSk7CiYjNDM7CQkJcmV0dXJuIEtTRlRfRkFJTDsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlrc2Z0X3ByaW50X2hlYWRlcigpOwomIzQzOwlrc2Z0X3NldF9wbGFuKDEpOwomIzQzOwomIzQzOwlpZiAoZmlsZV9wYWdlcyAmbHQ7IDQpCiYjNDM7CQlmaWxlX3BhZ2VzID0gNDsKJiM0MzsJaWYgKCFucl9wcm9jcykgewomIzQzOwkJbG9uZyBjcHVzID0gc3lzY29uZihfU0NfTlBST0NFU1NPUlNfT05MTik7CiYjNDM7CiYjNDM7CQlucl9wcm9jcyA9IGNwdXMgJmd0OyAwID8gKHVuc2lnbmVkIGludCljcHVzICogMiA6IDQ7CiYjNDM7CX0KJiM0MzsJaWYgKG5yX3Byb2NzICZsdDsgMikKJiM0MzsJCW5yX3Byb2NzID0gMjsKJiM0MzsKJiM0MzsJaHVnZV9wYWdlX3NpemUgPSBkZWZhdWx0X2h1Z2VfcGFnZV9zaXplKCk7CiYjNDM7CWlmICghaHVnZV9wYWdlX3NpemUpCiYjNDM7CQlrc2Z0X2V4aXRfc2tpcCgmIzM0O25vIGh1Z2V0bGJmcyAvIGh1Z2UgcGFnZSBzaXplIGF2YWlsYWJsZVxuJiMzNDspOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBCb3RoIG1vZGVzIGZhdWx0IHBhZ2VzIGluIChmdW5jdGlvbmFsX2NoZWNrIHRvdWNoZXMgZXZlcnkgcGFnZSBpdAomIzQzOwkgKiBtYXBzLCBhbmQgLS10cmlnZ2VyJiMzOTtzIHdvcmtlcnMgZmF1bHQgdGhlIHJhbmdlcyB0aGV5IG1hcCksIHNvIHRoZQomIzQzOwkgKiB3aG9sZSBmaWxlIG1heSBiZWNvbWUgcmVzaWRlbnQ7IHJlcXVpcmUgdGhhdCBtYW55ICpmcmVlKiBodWdlIHBhZ2VzLAomIzQzOwkgKiBub3QganVzdCByZXNlcnZhdGlvbnMuCiYjNDM7CSAqLwomIzQzOwlpZiAoaHVnZXRsYl9mcmVlX2RlZmF1bHRfcGFnZXMoKSAmbHQ7IGZpbGVfcGFnZXMpCiYjNDM7CQlrc2Z0X2V4aXRfc2tpcCgmIzM0O25lZWQgJWx1IGZyZWUgaHVnZSBwYWdlcywgaGF2ZSAlbHUgKHNldCBucl9odWdlcGFnZXMpXG4mIzM0OywKJiM0MzsJCQkgICAgICAgZmlsZV9wYWdlcywgaHVnZXRsYl9mcmVlX2RlZmF1bHRfcGFnZXMoKSk7CiYjNDM7CiYjNDM7CW1lbWZkID0gc3lzX21lbWZkX2NyZWF0ZSgmIzM0O2h1Z2V0bGJfcmVnaW9uX2NhY2hlX3JhY2UmIzM0OywKJiM0MzsJCQkJIE1GRF9IVUdFVExCIHwKJiM0MzsJCQkJIChfX2J1aWx0aW5fY3R6bChodWdlX3BhZ2Vfc2l6ZSkgJmx0OyZsdDsgTUZEX0hVR0VfU0hJRlQpKTsKJiM0MzsJaWYgKG1lbWZkICZsdDsgMCkKJiM0MzsJCWtzZnRfZXhpdF9za2lwKCYjMzQ7bWVtZmRfY3JlYXRlKE1GRF9IVUdFVExCKTogJXNcbiYjMzQ7LAomIzQzOwkJCSAgICAgICBzdHJlcnJvcihlcnJubykpOwomIzQzOwlpZiAoZnRydW5jYXRlKG1lbWZkLCBmaWxlX3BhZ2VzICogaHVnZV9wYWdlX3NpemUpKSB7CiYjNDM7CQljbG9zZShtZW1mZCk7CiYjNDM7CQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtmdHJ1bmNhdGU6ICVzXG4mIzM0Oywgc3RyZXJyb3IoZXJybm8pKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAodHJpZ2dlcikKJiM0MzsJCXJldCA9IHJ1bl90cmlnZ2VyKCk7CiYjNDM7CWVsc2UKJiM0MzsJCXJldCA9IGZ1bmN0aW9uYWxfY2hlY2soKTsKJiM0MzsKJiM0MzsJY2xvc2UobWVtZmQpOwomIzQzOwomIzQzOwlpZiAocmV0KQomIzQzOwkJa3NmdF90ZXN0X3Jlc3VsdF9mYWlsKCYjMzQ7aHVnZXRsYiByZWdpb25fY2FjaGUgcmFjZSBjaGVja1xuJiMzNDspOwomIzQzOwllbHNlIGlmICh0cmlnZ2VyKQomIzQzOwkJa3NmdF90ZXN0X3Jlc3VsdF9wYXNzKCYjMzQ7c3Vydml2ZWQgY29uY3VycmVudCByZWdpb25fY2FjaGUgY2h1cm5cbiYjMzQ7KTsKJiM0MzsJZWxzZQomIzQzOwkJa3NmdF90ZXN0X3Jlc3VsdF9wYXNzKCYjMzQ7bXVsdGktZW50cnkgcmVnaW9uX2NhY2hlIHJlZmlsbCB3b3Jrc1xuJiMzNDspOwomIzQzOwomIzQzOwlrc2Z0X2ZpbmlzaGVkKCk7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaAppbmRleCA4YzI5NmRlZGYwNDc0ZC4uMGNiODU3MDU2OTE1ZjQgMTAwNzU1Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoCkBAIC0yNjcsNiAmIzQzOzI2Nyw3IEBAIENBVEVHT1JZPSYjMzQ7aHVnZXRsYiYjMzQ7IHJ1bl90ZXN0IC4vaHVnZXRsYi1tYWR2aXNlCiBDQVRFR09SWT0mIzM0O2h1Z2V0bGImIzM0OyBydW5fdGVzdCAuL2h1Z2V0bGJfZGlvCiBDQVRFR09SWT0mIzM0O2h1Z2V0bGImIzM0OyBydW5fdGVzdCAuL2h1Z2V0bGJfZmF1bHRfYWZ0ZXJfbWFkdgogQ0FURUdPUlk9JiMzNDtodWdldGxiJiMzNDsgcnVuX3Rlc3QgLi9odWdldGxiX21hZHZfdnNfbWFwCiYjNDM7Q0FURUdPUlk9JiMzNDtodWdldGxiJiMzNDsgcnVuX3Rlc3QgLi9odWdldGxiX3JlZ2lvbl9jYWNoZV9yYWNlCiAKIGlmIHRlc3Rfc2VsZWN0ZWQgJiMzNDtodWdldGxiJiMzNDs7IHRoZW4KIAllY2hvICYjMzQ7Tk9URTogVGhlc2UgaHVnZXRsYiB0ZXN0cyBwcm92aWRlIG1pbmltYWwgY292ZXJhZ2UuICBVc2UmIzM0OwkgIHwgdGFwX3ByZWZpeAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAyMjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTU4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEtlcm5lbCBQYXRjaDogSHVnZVRMQiBNb2RpZmljYXRpb24qKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF0IHRvdWNoZXMgYG1tL2h1Z2V0bGIuY2AgYW5kIGFsc28gYWRkcyBhIG5ldyBzZWxmdGVzdC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyB0aGlzIHN1YnRsZSBtb2RpZmljYXRpb24gd2l0aGluIGBhbGxvY2F0ZV9maWxlX3JlZ2lvbl9lbnRyaWVzYC4gVGhleSYjMzk7dmUgc3dhcHBlZCBvdXQgYGxpc3Rfc3BsaWNlYCBmb3IgYGxpc3Rfc3BsaWNlX2luaXRgIGluIHRoYXQgZnVuY3Rpb24uIFRoYXQmIzM5O3MgYSBzaWduaWZpY2FudCBjaGFuZ2UgdG8gY29yZSBrZXJuZWwgY29kZS4gQW55dGltZSB3ZSBzZWUgc29tZXRoaW5nIGxpa2UgdGhpcywgYSBjaGFuZ2UgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIEh1Z2VUTEIgaW4gdGhpcyBjYXNlLCBteSBmaXJzdCB0aG91Z2h0IGlzICYjMzQ7ZnV6emluZyYjMzQ7LiBUaGlzIG5lZWRzIGEgdGhvcm91Z2ggZXhhbWluYXRpb24uCgpMZXQmIzM5O3MgcXVpY2tseSB2ZXJpZnkgdGhhdCB0aGUgYGFsbG9jYXRlX2ZpbGVfcmVnaW9uX2VudHJpZXNgIGZ1bmN0aW9uIGlzIGluZGVlZCB0aGUgbG9jYXRpb24gb2YgdGhlIGNoYW5nZSwgYXMgaW5kaWNhdGVkIGJ5IHRoZSBkaWZmLiBJJiMzOTtsbCBmaXJlIHVwIGBncmVwcGVyYCBhbmQgZG91YmxlLWNoZWNrLCBidXQgSSYjMzk7bSBwcmV0dHkgc3VyZSB0aGF0JiMzOTtzIHRoZSBvbmUuIExldCYjMzk7cyBtYWtlIHN1cmUgYmVmb3JlIHdlIG1vdmUgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMjI6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2NhdGVfZmlsZV9yZWdpb25fZW50cmllcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2h1Z2V0bGIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdldGxiLmM9NTk0PXN0YXRpYyBsb25nIGFkZF9yZXNlcnZhdGlvbl9pbl9yYW5nZShzdHJ1Y3QgcmVzdl9tYXAgKnJlc3YsIGxvbmcgZiwgbG9uZyB0LFxuLS1cbm1tL2h1Z2V0bGIuYy02NTUtICovXG5tbS9odWdldGxiLmM6NjU2OnN0YXRpYyBpbnQgYWxsb2NhdGVfZmlsZV9yZWdpb25fZW50cmllcyhzdHJ1Y3QgcmVzdl9tYXAgKnJlc3YsXG5tbS9odWdldGxiLmMtNjU3LVx0XHRcdFx0XHRpbnQgcmVnaW9uc19uZWVkZWQpXG4tLVxubW0vaHVnZXRsYi5jPTcyNz1zdGF0aWMgbG9uZyByZWdpb25fYWRkKHN0cnVjdCByZXN2X21hcCAqcmVzdiwgbG9uZyBmLCBsb25nIHQsXG4tLVxubW0vaHVnZXRsYi5jLTc1Ny1cbm1tL2h1Z2V0bGIuYzo3NTg6XHRcdGlmIChhbGxvY2F0ZV9maWxlX3JlZ2lvbl9lbnRyaWVzKFxubW0vaHVnZXRsYi5jLTc1OS1cdFx0XHQgICAgcmVzdiwgYWN0dWFsX3JlZ2lvbnNfbmVlZGVkIC0gaW5fcmVnaW9uc19uZWVkZWQpKSB7XG4tLVxubW0vaHVnZXRsYi5jPTc5ND1zdGF0aWMgbG9uZyByZWdpb25fY2hnKHN0cnVjdCByZXN2X21hcCAqcmVzdiwgbG9uZyBmLCBsb25nIHQsXG4tLVxubW0vaHVnZXRsYi5jLTgwNy1cbm1tL2h1Z2V0bGIuYzo4MDg6XHRpZiAoYWxsb2NhdGVfZmlsZV9yZWdpb25fZW50cmllcyhyZXN2LCAqb3V0X3JlZ2lvbnNfbmVlZGVkKSlcbm1tL2h1Z2V0bGIuYy04MDktXHRcdHJldHVybiAtRU5PTUVNO1xuLS1cbm1tL2h1Z2V0bGIuYz01MTQxPXZvaWQgX191bm1hcF9odWdlcGFnZV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdldGxiLmMtNTI3Mi1cdFx0XHRpZiAocmMgXHUwMDNjIDApXG5tbS9odWdldGxiLmM6NTI3MzpcdFx0XHRcdC8qIFByZXNzdW1hYmx5IGFsbG9jYXRlX2ZpbGVfcmVnaW9uX2VudHJpZXMgZmFpbGVkXG5tbS9odWdldGxiLmMtNTI3NC1cdFx0XHRcdCAqIHRvIGFsbG9jYXRlIGEgZmlsZV9yZWdpb24gc3RydWN0LiBDbGVhclxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDIyOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwODUKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBhbGxvY2F0ZV9maWxlX3JlZ2lvbl9lbnRyaWVzYCBGdW5jdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgYWxsb2NhdGVfZmlsZV9yZWdpb25fZW50cmllc2AgZnVuY3Rpb24g4oCTIHNlZW1zIGltcG9ydGFudCwgYW5kIEkgY2FuIHNlZSBpdCYjMzk7cyBjaGFuZ2VkIGluIGBtbS9odWdldGxiLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSBhc3Nlc3MgYW55IGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBXaXRoIEh1Z2VUTEIgY2hhbmdlcywgYENPTkZJR19IVUdFVExCRlNgIGFuZCBgQ09ORklHX0hVR0VUTEJfUEFHRWAgYXJlIHRoZSBvYnZpb3VzIG9uZXMgdG8gY2hlY2ssIGJ1dCBJIGNhbiYjMzk7dCByZWx5IG9uIG1lbW9yeSBhbG9uZS4gSnVzdCB0byBiZSBzdXJlLCBJIHNob3VsZCB2ZXJpZnkgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb25zIHJlbGF0ZWQgdG8gdGhpcyBhcmVhLiBJJiMzOTtsbCB0YWtlIGEgbG9vayBhdCBgbW0vTWFrZWZpbGVgIHRvIGNvbmZpcm0gd2hpY2ggc2V0dGluZ3MgYXJlIHJlbGV2YW50IHRvIHRoaXMgZnVuY3Rpb24gYW5kIHRoZSBtb2R1bGUgaXQgbGl2ZXMgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMjI6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHVnZXRsYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTgwPW9iai0kKENPTkZJR19IQVNfRE1BKVx0JiM0Mzs9IGRtYXBvb2wub1xubW0vTWFrZWZpbGU6ODE6b2JqLSQoQ09ORklHX0hVR0VUTEJGUylcdCYjNDM7PSBodWdldGxiLm8gaHVnZXRsYl9zeXNmcy5vIGh1Z2V0bGJfc3lzY3RsLm9cbm1tL01ha2VmaWxlLTgyLWlmZGVmIENPTkZJR19DTUFcbm1tL01ha2VmaWxlOjgzOm9iai0kKENPTkZJR19IVUdFVExCRlMpXHQmIzQzOz0gaHVnZXRsYl9jbWEub1xubW0vTWFrZWZpbGUtODQtZW5kaWZcbm1tL01ha2VmaWxlOjg1Om9iai0kKENPTkZJR19IVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUClcdCYjNDM7PSBodWdldGxiX3ZtZW1tYXAub1xubW0vTWFrZWZpbGUtODYtb2JqLSQoQ09ORklHX05VTUEpIFx0JiM0Mzs9IG1lbXBvbGljeS5vXG4tLVxubW0vTWFrZWZpbGU9MTA4PWVuZGlmXG5tbS9NYWtlZmlsZToxMDk6b2JqLSQoQ09ORklHX0NHUk9VUF9IVUdFVExCKSAmIzQzOz0gaHVnZXRsYl9jZ3JvdXAub1xubW0vTWFrZWZpbGUtMTEwLW9iai0kKENPTkZJR19HVVBfVEVTVCkgJiM0Mzs9IGd1cF90ZXN0Lm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAyMjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTg4CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzczoKCioqRGl2aW5nIGludG8gSHVnZVRMQiBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBzbyBJIHNlZSBgQ09ORklHX0hVR0VUTEJGU2AgbWVudGlvbmVkLCB0aGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4gQnV0LCBoYW5nIG9uLCB0aGVyZSYjMzk7cyBhbHNvIGBDT05GSUdfSFVHRVRMQl9QQUdFYCDigJMgdGhvc2UgYXJlIGRlZmluaXRlbHkgaW50ZXJ0d2luZWQuIEkgbmVlZCB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlcy4gTGV0JiMzOTtzIHNlZS4uLiBgaW5pdC9LY29uZmlnYCBpcyBhIHBvc3NpYmlsaXR5LCBidXQgcHJvYmFibHkgbm90IHRoZSBiZXN0IHNwb3QgZm9yIGZpbGUgc3lzdGVtIG9wdGlvbnMsIHNvIGxldCYjMzk7cyBzdGFydCB3aXRoIGBmcy9LY29uZmlnYC4gT3IgbWF5YmUgaXQmIzM5O3MgbWVtb3J5IG1hbmFnZW1lbnQsIHNvIGBtbS9LY29uZmlnYCBtaWdodCBiZSB0aGUgcGxhY2UgdG8gZ28gZmlyc3QuIEkga25vdyBJIHdpbGwgZmluZCBpdCB0aGVyZS4gSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIG9wdGlvbnMgYW5kIGdldCB0aGUgZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAyMjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSFVHRVRMQkZTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL0tjb25maWc9MjQ3PWNvbmZpZyBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU1xuLS1cbmZzL0tjb25maWctMjQ5LVxuZnMvS2NvbmZpZzoyNTA6bWVudWNvbmZpZyBIVUdFVExCRlNcbmZzL0tjb25maWctMjUxLVx0Ym9vbCBcJiMzNDtIdWdlVExCIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAyMjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTE5CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQXNzZXNzaW5nIEh1Z2UgUGFnZSBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIHRoZSBpbml0aWFsIHByb21wdCBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYW4gZXhwZXJ0IGluIHRoaXMgYXJlYSwgaXMgdG8gemVybyBpbiBvbiBgY29uZmlnIEhVR0VUTEJfUEFHRWAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCB3aGVuIGl0IGNvbWVzIHRvIGh1Z2UgcGFnZSBpbXBsZW1lbnRhdGlvbiBhdCBhIGtlcm5lbCBsZXZlbC4gVGhpcyBpcyB0aGUgbHluY2hwaW4g4oCTIHRoZSBtYXN0ZXIgc3dpdGNoIGlmIHlvdSB3aWxsIOKAkyBmb3Igd2hldGhlciBvciBub3QgaHVnZSBwYWdlcyBhcmUgZXZlbiBlbmFibGVkIGFuZCBob3cgdGhlIHN5c3RlbSBldmVuIGxvb2tzIGZvciBsYXJnZSBtZW1vcnkgYmxvY2tzLiBJdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIGFueSBzZXJpb3VzIGludmVzdGlnYXRpb24sIGJlIGl0IHRyb3VibGVzaG9vdGluZyBwZXJmb3JtYW5jZSBpc3N1ZXMsIHZlcmlmeWluZyBhIHNldHVwLCBvciBjb25maXJtaW5nIGEgYnVpbGQgY29uZmlndXJhdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBrbm93IGl0cyBzdGF0ZSB0byBkZXRlcm1pbmUgbmV4dCBzdGVwcy4gSSYjMzk7bSBnb2luZyB0byBkZXRlcm1pbmUgd2hhdCB0aGF0IG1lYW5zIGZvciBwZXJmb3JtYW5jZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMjI6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEhVR0VUTEJfUEFHRSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3NoL21tL0tjb25maWc9MTU4PWNob2ljZVxuLS1cbmFyY2gvc2gvbW0vS2NvbmZpZy0xNjMtXG5hcmNoL3NoL21tL0tjb25maWc6MTY0OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV82NEtcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNjUtXHRib29sIFwmIzM0OzY0a0JcJiMzNDtcbi0tXG5hcmNoL3NoL21tL0tjb25maWctMTY3LVxuYXJjaC9zaC9tbS9LY29uZmlnOjE2ODpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfMjU2S1xuYXJjaC9zaC9tbS9LY29uZmlnLTE2OS1cdGJvb2wgXCYjMzQ7MjU2a0JcJiMzNDtcbi0tXG5hcmNoL3NoL21tL0tjb25maWctMTcxLVxuYXJjaC9zaC9tbS9LY29uZmlnOjE3Mjpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfMU1CXG5hcmNoL3NoL21tL0tjb25maWctMTczLVx0Ym9vbCBcJiMzNDsxTUJcJiMzNDtcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzQtXG5hcmNoL3NoL21tL0tjb25maWc6MTc1OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV80TUJcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzYtXHRib29sIFwmIzM0OzRNQlwmIzM0O1xuLS1cbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzgtXG5hcmNoL3NoL21tL0tjb25maWc6MTc5OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV82NE1CXG5hcmNoL3NoL21tL0tjb25maWctMTgwLVx0Ym9vbCBcJiMzNDs2NE1CXCYjMzQ7XG4tLVxuZnMvS2NvbmZpZz0yNjI9aWYgSFVHRVRMQkZTXG5mcy9LY29uZmlnOjI2Mzpjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBfREVGQVVMVF9PTlxuZnMvS2NvbmZpZy0yNjQtXHRib29sIFwmIzM0O0h1Z2VUTEIgVm1lbW1hcCBPcHRpbWl6YXRpb24gKEhWTykgZGVmYXVsdHMgdG8gb25cJiMzNDtcbi0tXG5mcy9LY29uZmlnPTI3MT1lbmRpZiAjIEhVR0VUTEJGU1xuZnMvS2NvbmZpZy0yNzItXG5mcy9LY29uZmlnOjI3Mzpjb25maWcgSFVHRVRMQl9QQUdFXG5mcy9LY29uZmlnLTI3NC1cdGRlZl9ib29sIEhVR0VUTEJGU1xuLS1cbmZzL0tjb25maWctMjc2LVxuZnMvS2NvbmZpZzoyNzc6Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXG5mcy9LY29uZmlnLTI3OC1cdGRlZl9ib29sIEhVR0VUTEJfUEFHRVxuLS1cbm1tL0tjb25maWc9NzA2PWNvbmZpZyBBUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OXG4tLVxubW0vS2NvbmZpZy03MDgtXG5tbS9LY29uZmlnOjcwOTpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfVkFSSUFCTEVcbm1tL0tjb25maWctNzEwLVx0ZGVmX2Jvb2wgblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAyMjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NzEzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgaHVnZXRsYmZzIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZm9jdXNlZCBvbiBgSFVHRVRMQkZTYCwgdGhhdCYjMzk7cyB0aGUga2V5IGNvbmZpZ3VyYXRpb24gc2V0dGluZyBoZXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgZnVuY3Rpb24gYGFsbG9jYXRlX2ZpbGVfcmVnaW9uX2VudHJpZXNgLiBJdCBsb29rcyBsaWtlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IGByZWdpb25fYWRkYCBhbmQgYHJlZ2lvbl9jaGdgLCB3aGljaCBJIGltbWVkaWF0ZWx5IHJlY29nbml6ZSBhcyBjcml0aWNhbCByb3V0aW5lcyBkZWFsaW5nIHdpdGggaHVnZXRsYmZzIHJlc2VydmF0aW9ucy4gSSBrbm93IHRoZXNlIGFyZSByZWxhdGVkIHRvIG1lbW9yeSBhbGxvY2F0aW9ucyBhbmQgbWFuYWdlbWVudCB3aXRoaW4gdGhlIGh1Z2V0bGJmcy4KClRoZSBidWcgaXMgaW4gYGFsbG9jYXRlX2ZpbGVfcmVnaW9uX2VudHJpZXNgLCBhbmQgaXQgc2VlbXMgbGlrZSB0aGV5IHdlcmUgdXNpbmcgYGxpc3Rfc3BsaWNlYCBpbnN0ZWFkIG9mIGBsaXN0X3NwbGljZV9pbml0YC4gVGhhdCYjMzk7cyBhIHJlZCBmbGFnISBVc2luZyBgbGlzdF9zcGxpY2VgIHdpdGhvdXQgaW5pdGlhbGl6aW5nIHRoZSBkZXN0aW5hdGlvbiBsaXN0IGNhbiBsZWF2ZSBgYWxsb2NhdGVkX3JlZ2lvbnNgIOKAkyBhIGxvY2FsIHZhcmlhYmxlLCBJIG5vdyByZW1lbWJlciDigJMgaW4gYW4gdW5kZWZpbmVkIHN0YXRlLiBJdHMgcG9pbnRlcnMsIHNwZWNpZmljYWxseSBgbmV4dGAgYW5kIGBwcmV2YCwgd291bGQgc3RpbGwgYmUgcmVmZXJlbmNpbmcgdGhlIG9sZCBlbGVtZW50cyB0aGF0IHdlcmUgc3BsaWNlZCAqaW50byogYHJlc3YtJmd0O3JlZ2lvbl9jYWNoZWAuIFRoaXMgY291bGQgbGVhZCB0byBhIHRleHRib29rIGNhc2Ugb2YgbGlzdCBjb3JydXB0aW9uIGRvd24gdGhlIGxpbmUgaWYgYGFsbG9jYXRlZF9yZWdpb25zYCBpcyByZS11c2VkLiBUaGlzIG5lZWRzIGEgZGVlcGVyIGRpdmUsIHNvIGxldCYjMzk7cyBjaGVjayBvdXQgdGhlIGNvZGUgb2YgYGFsbG9jYXRlX2ZpbGVfcmVnaW9uX2VudHJpZXNgIGRpcmVjdGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAyMjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2h1Z2V0bGIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY1NiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjU2Olx0c3RhdGljIGludCBhbGxvY2F0ZV9maWxlX3JlZ2lvbl9lbnRyaWVzKHN0cnVjdCByZXN2X21hcCAqcmVzdixcbiA2NTc6XHRcdFx0XHRcdFx0aW50IHJlZ2lvbnNfbmVlZGVkKVxuIDY1ODpcdFx0X19tdXN0X2hvbGQoXHUwMDI2cmVzdi1cdTAwM2Vsb2NrKVxuIDY1OTpcdHtcbiA2NjA6XHRcdExJU1RfSEVBRChhbGxvY2F0ZWRfcmVnaW9ucyk7XG4gNjYxOlx0XHRpbnQgdG9fYWxsb2NhdGUgPSAwLCBpID0gMDtcbiA2NjI6XHRcdHN0cnVjdCBmaWxlX3JlZ2lvbiAqdHJnID0gTlVMTCwgKnJnID0gTlVMTDtcbiA2NjM6XHRcbiA2NjQ6XHRcdFZNX0JVR19PTihyZWdpb25zX25lZWRlZCBcdTAwM2MgMCk7XG4gNjY1Olx0XG4gNjY2Olx0XHQvKlxuIDY2NzpcdFx0ICogQ2hlY2sgZm9yIHN1ZmZpY2llbnQgZGVzY3JpcHRvcnMgaW4gdGhlIGNhY2hlIHRvIGFjY29tbW9kYXRlXG4gNjY4Olx0XHQgKiB0aGUgbnVtYmVyIG9mIGluIHByb2dyZXNzIGFkZCBvcGVyYXRpb25zIHBsdXMgcmVnaW9uc19uZWVkZWQuXG4gNjY5Olx0XHQgKlxuIDY3MDpcdFx0ICogVGhpcyBpcyBhIHdoaWxlIGxvb3AgYmVjYXVzZSB3aGVuIHdlIGRyb3AgdGhlIGxvY2ssIHNvbWUgb3RoZXIgY2FsbFxuIDY3MTpcdFx0ICogdG8gcmVnaW9uX2FkZCBvciByZWdpb25fZGVsIG1heSBoYXZlIGNvbnN1bWVkIHNvbWUgcmVnaW9uX2VudHJpZXMsXG4gNjcyOlx0XHQgKiBzbyB3ZSBrZWVwIGxvb3BpbmcgaGVyZSB1bnRpbCB3ZSBmaW5hbGx5IGhhdmUgZW5vdWdoIGVudHJpZXMgZm9yXG4gNjczOlx0XHQgKiAoYWRkc19pbl9wcm9ncmVzcyAmIzQzOyByZWdpb25zX25lZWRlZCkuXG4gNjc0Olx0XHQgKi9cbiA2NzU6XHRcdHdoaWxlIChyZXN2LVx1MDAzZXJlZ2lvbl9jYWNoZV9jb3VudCBcdTAwM2NcbiA2NzY6XHRcdCAgICAgICAocmVzdi1cdTAwM2VhZGRzX2luX3Byb2dyZXNzICYjNDM7IHJlZ2lvbnNfbmVlZGVkKSkge1xuIDY3NzpcdFx0XHR0b19hbGxvY2F0ZSA9IHJlc3YtXHUwMDNlYWRkc19pbl9wcm9ncmVzcyAmIzQzOyByZWdpb25zX25lZWRlZCAtXG4gNjc4Olx0XHRcdFx0ICAgICAgcmVzdi1cdTAwM2VyZWdpb25fY2FjaGVfY291bnQ7XG4gNjc5Olx0XG4gNjgwOlx0XHRcdC8qIEF0IHRoaXMgcG9pbnQsIHdlIHNob3VsZCBoYXZlIGVub3VnaCBlbnRyaWVzIGluIHRoZSBjYWNoZVxuIDY4MTpcdFx0XHQgKiBmb3IgYWxsIHRoZSBleGlzdGluZyBhZGRzX2luX3Byb2dyZXNzLiBXZSBzaG91bGQgb25seSBiZVxuIDY4MjpcdFx0XHQgKiBuZWVkaW5nIHRvIGFsbG9jYXRlIGZvciByZWdpb25zX25lZWRlZC5cbiA2ODM6XHRcdFx0ICovXG4gNjg0Olx0XHRcdFZNX0JVR19PTihyZXN2LVx1MDAzZXJlZ2lvbl9jYWNoZV9jb3VudCBcdTAwM2MgcmVzdi1cdTAwM2VhZGRzX2luX3Byb2dyZXNzKTtcbiA2ODU6XHRcbiA2ODY6XHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2cmVzdi1cdTAwM2Vsb2NrKTtcbiA2ODc6XHRcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgdG9fYWxsb2NhdGU7IGkmIzQzOyYjNDM7KSB7XG4gNjg4Olx0XHRcdFx0dHJnID0ga21hbGxvY19vYmooKnRyZyk7XG4gNjg5Olx0XHRcdFx0aWYgKCF0cmcpXG4gNjkwOlx0XHRcdFx0XHRnb3RvIG91dF9vZl9tZW1vcnk7XG4gNjkxOlx0XHRcdFx0bGlzdF9hZGQoXHUwMDI2dHJnLVx1MDAzZWxpbmssIFx1MDAyNmFsbG9jYXRlZF9yZWdpb25zKTtcbiA2OTI6XHRcdFx0fVxuIDY5MzpcdFxuIDY5NDpcdFx0XHRzcGluX2xvY2soXHUwMDI2cmVzdi1cdTAwM2Vsb2NrKTtcbiA2OTU6XHRcbiA2OTY6XHRcdFx0bGlzdF9zcGxpY2VfaW5pdChcdTAwMjZhbGxvY2F0ZWRfcmVnaW9ucywgXHUwMDI2cmVzdi1cdTAwM2VyZWdpb25fY2FjaGUpO1xuIDY5NzpcdFx0XHRyZXN2LVx1MDAzZXJlZ2lvbl9jYWNoZV9jb3VudCAmIzQzOz0gdG9fYWxsb2NhdGU7XG4gNjk4Olx0XHR9XG4gNjk5Olx0XG4gNzAwOlx0XHRyZXR1cm4gMDtcbiA3MDE6XHRcbiA3MDI6XHRvdXRfb2ZfbWVtb3J5OlxuIDcwMzpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJnLCB0cmcsIFx1MDAyNmFsbG9jYXRlZF9yZWdpb25zLCBsaW5rKSB7XG4gNzA0Olx0XHRcdGxpc3RfZGVsKFx1MDAyNnJnLVx1MDAzZWxpbmspO1xuIDcwNTpcdFx0XHRrZnJlZShyZyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDIyOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5ODAKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQnVnIERpc2NvdmVyeSBhbmQgRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSBqdXN0IGp1bXBlZCBvdXQgYXQgbWUuIEkgc2VlIGBhbGxvY2F0ZWRfcmVnaW9uc2AgaXMgYSBsb2NhbCB2YXJpYWJsZSwgYnV0IGl0JiMzOTtzICppbnNpZGUqIHRoaXMgYHdoaWxlYCBsb29wIOKAkyB0aGF0JiMzOTtzIGEgcmVkIGZsYWchIFRoZW4gSSBkb3VibGUtY2hlY2sgYW5kIHNlZSBgTElTVF9IRUFEKGFsbG9jYXRlZF9yZWdpb25zKTtgIGlzIGRlY2xhcmVkICpvdXRzaWRlKiB0aGUgbG9vcC4gQWhhISBUaGUgbG9vcCByZXVzZXMgYGFsbG9jYXRlZF9yZWdpb25zYC4gSWYgYGxpc3Rfc3BsaWNlYCBoYWQgYmVlbiB1c2VkLCBpdCB3b3VsZCBoYXZlIHByZXZlbnRlZCByZS1pbml0aWFsaXphdGlvbi4gQnV0IHdpdGhvdXQgaXQsIG9uIHRoZSBzZWNvbmQgaXRlcmF0aW9uLCBgbGlzdF9hZGRgIGlzIGdvaW5nIHRvIGJlIGNhbGxlZCBvbiBhIGNvcnJ1cHRlZCBgYWxsb2NhdGVkX3JlZ2lvbnNgIGxpc3QgaGVhZC4gVGhhdCYjMzk7cyBhIHRleHRib29rIGV4YW1wbGUgb2YgYSBidWcsIGFuZCB0aGFua2Z1bGx5LCBpdCBsb29rcyBsaWtlIGl0IHdhcyBmaXhlZC4KCk5vdyB0aGF0IEkmIzM5O3ZlIHNwb3R0ZWQgdGhhdCwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBmdXp6aW5nLiBUaGUgYGFsbG9jYXRlX2ZpbGVfcmVnaW9uX2VudHJpZXNgIGZ1bmN0aW9uIGxvb2tzIGxpa2UgYSBwcmltZSBjYW5kaWRhdGUg4oCTIGl0JiMzOTtzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRoYXQgY291bGQgYmVuZWZpdCBmcm9tIGJlaW5nIHRlc3RlZCBtb3JlIHJpZ29yb3VzbHkuIExldCYjMzk7cyBtYWtlIHRoYXQgYSBmb2N1cy4gSSBzaG91bGQgcHJvYmFibHkgYWxzbyB0YXJnZXQgb3RoZXIgcmVsYXRlZCBmdW5jdGlvbnMuIEZ1bmN0aW9ucyBsaWtlIGByZWdpb25fYWRkYCwgYHJlZ2lvbl9jaGdgLCBhbmQgYHJlZ2lvbl9kZWxgIHdvdWxkIGFsbCBuZWVkIHRvIGJlIGZ1enplZCBhcyB3ZWxsLiBJJiMzOTtsbCBhZGQgdGhlbSB0byBgRm9jdXNTeW1ib2xzYC4KCkxldCYjMzk7cyBkbyBhIHF1aWNrIHNjYW4gdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIHJlbGF0ZWQgdG8gdGhlIGBGb2N1c1N5bWJvbHNgLiBMb29rcyBsaWtlIEkgZ290IHRoZW0gYWxsOyBgcmVnaW9uX2FkZGAsIGByZWdpb25fY2hnYCwgYHJlZ2lvbl9kZWxgLCBgYWxsb2NhdGVfZmlsZV9yZWdpb25fZW50cmllc2AuIE5vdyBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIGlmIGByZWdpb25fYWRkYCBhbmQgYHJlZ2lvbl9jaGdgIGFyZSBzdGF0aWMgZnVuY3Rpb25zLCBqdXN0IHRvIGdldCBhIGdvb2Qgc2Vuc2Ugb2YgdGhlIHNjb3BlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAyMjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZWdpb25fYWRkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vaHVnZXRsYi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2V0bGIuYz02NTY9c3RhdGljIGludCBhbGxvY2F0ZV9maWxlX3JlZ2lvbl9lbnRyaWVzKHN0cnVjdCByZXN2X21hcCAqcmVzdixcbi0tXG5tbS9odWdldGxiLmMtNjcwLVx0ICogVGhpcyBpcyBhIHdoaWxlIGxvb3AgYmVjYXVzZSB3aGVuIHdlIGRyb3AgdGhlIGxvY2ssIHNvbWUgb3RoZXIgY2FsbFxubW0vaHVnZXRsYi5jOjY3MTpcdCAqIHRvIHJlZ2lvbl9hZGQgb3IgcmVnaW9uX2RlbCBtYXkgaGF2ZSBjb25zdW1lZCBzb21lIHJlZ2lvbl9lbnRyaWVzLFxubW0vaHVnZXRsYi5jLTY3Mi1cdCAqIHNvIHdlIGtlZXAgbG9vcGluZyBoZXJlIHVudGlsIHdlIGZpbmFsbHkgaGF2ZSBlbm91Z2ggZW50cmllcyBmb3Jcbi0tXG5tbS9odWdldGxiLmMtNzE0LSAqIGNhbGwgdG8gcmVnaW9uX2NoZyB3aXRoIHRoZSBzYW1lIHJhbmdlLCBidXQgaW4gc29tZSBjYXNlcyB0aGUgY2FjaGUgd2lsbCBub3Rcbm1tL2h1Z2V0bGIuYzo3MTU6ICogaGF2ZSBzdWZmaWNpZW50IGVudHJpZXMgZHVlIHRvIHJhY2VzIHdpdGggb3RoZXIgY29kZSBkb2luZyByZWdpb25fYWRkIG9yXG5tbS9odWdldGxiLmMtNzE2LSAqIHJlZ2lvbl9kZWwuICBUaGUgZXh0cmEgbmVlZGVkIGVudHJpZXMgd2lsbCBiZSBhbGxvY2F0ZWQuXG4tLVxubW0vaHVnZXRsYi5jLTcyMi0gKiB0aGlzIG9wZXJhdGlvbiBhbmQgd2Ugd2VyZSBub3QgYWJsZSB0byBhbGxvY2F0ZSwgaXQgcmV0dXJucyAtRU5PTUVNLlxubW0vaHVnZXRsYi5jOjcyMzogKiByZWdpb25fYWRkIG9mIHJlZ2lvbnMgb2YgbGVuZ3RoIDEgbmV2ZXIgYWxsb2NhdGUgZmlsZV9yZWdpb25zIGFuZCBjYW5ub3Rcbm1tL2h1Z2V0bGIuYzo3MjQ6ICogZmFpbDsgcmVnaW9uX2NoZyB3aWxsIGFsd2F5cyBhbGxvY2F0ZSBhdCBsZWFzdCAxIGVudHJ5IGFuZCBhIHJlZ2lvbl9hZGQgZm9yXG5tbS9odWdldGxiLmMtNzI1LSAqIDEgcGFnZSB3aWxsIG9ubHkgcmVxdWlyZSBhdCBtb3N0IDEgZW50cnkuXG5tbS9odWdldGxiLmMtNzI2LSAqL1xubW0vaHVnZXRsYi5jOjcyNzpzdGF0aWMgbG9uZyByZWdpb25fYWRkKHN0cnVjdCByZXN2X21hcCAqcmVzdiwgbG9uZyBmLCBsb25nIHQsXG5tbS9odWdldGxiLmMtNzI4LVx0XHQgICAgICAgbG9uZyBpbl9yZWdpb25zX25lZWRlZCwgc3RydWN0IGhzdGF0ZSAqaCxcbi0tXG5tbS9odWdldGxiLmMtNzUyLVx0XHRcdCAgICAoYWN0dWFsX3JlZ2lvbnNfbmVlZGVkIC0gaW5fcmVnaW9uc19uZWVkZWQpKSB7XG5tbS9odWdldGxiLmM6NzUzOlx0XHQvKiByZWdpb25fYWRkIG9wZXJhdGlvbiBvZiByYW5nZSAxIHNob3VsZCBuZXZlciBuZWVkIHRvXG5tbS9odWdldGxiLmMtNzU0LVx0XHQgKiBhbGxvY2F0ZSBmaWxlX3JlZ2lvbiBlbnRyaWVzLlxuLS1cbm1tL2h1Z2V0bGIuYy03NzctICogcmVwcmVzZW50ZWQuICBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIGJlZm9yZSBhIHN1YnNlcXVlbnRcbm1tL2h1Z2V0bGIuYzo3Nzg6ICogY2FsbCB0byByZWdpb25fYWRkIHRoYXQgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHJlc2VydmVcbm1tL2h1Z2V0bGIuYy03NzktICogbWFwIHRvIGFkZCB0aGUgc3BlY2lmaWVkIHJhbmdlIFtmLCB0KS4gIHJlZ2lvbl9jaGcgZG9lc1xuLS1cbm1tL2h1Z2V0bGIuYy03ODEtICogbWFwLiAgQSBudW1iZXIgb2YgbmV3IGZpbGVfcmVnaW9uIHN0cnVjdHVyZXMgaXMgYWRkZWQgdG8gdGhlIGNhY2hlIGFzIGFcbm1tL2h1Z2V0bGIuYzo3ODI6ICogcGxhY2Vob2xkZXIsIGZvciB0aGUgc3Vic2VxdWVudCByZWdpb25fYWRkIGNhbGwgdG8gdXNlLiBBdCBsZWFzdCAxXG5tbS9odWdldGxiLmMtNzgzLSAqIGZpbGVfcmVnaW9uIHN0cnVjdHVyZSBpcyBhZGRlZC5cbi0tXG5tbS9odWdldGxiLmMtNzg2LSAqIHJlc3YtXHUwMDNlYWRkc19pbl9wcm9ncmVzcy4gIFRoaXMgdmFsdWUgbmVlZHMgdG8gYmUgcHJvdmlkZWQgdG8gYSBmb2xsb3cgdXAgY2FsbFxubW0vaHVnZXRsYi5jOjc4NzogKiB0byByZWdpb25fYWRkIG9yIHJlZ2lvbl9hYm9ydCBmb3IgcHJvcGVyIGFjY291bnRpbmcuXG5tbS9odWdldGxiLmMtNzg4LSAqXG4tLVxubW0vaHVnZXRsYi5jPTc5ND1zdGF0aWMgbG9uZyByZWdpb25fY2hnKHN0cnVjdCByZXN2X21hcCAqcmVzdiwgbG9uZyBmLCBsb25nIHQsXG4tLVxubW0vaHVnZXRsYi5jLTgxOS0gKiBvZiB0aGUgcmVzdl9tYXAga2VlcHMgdHJhY2sgb2YgdGhlIG9wZXJhdGlvbnMgaW4gcHJvZ3Jlc3MgYmV0d2VlblxubW0vaHVnZXRsYi5jOjgyMDogKiBjYWxscyB0byByZWdpb25fY2hnIGFuZCByZWdpb25fYWRkLiAgT3BlcmF0aW9ucyBhcmUgc29tZXRpbWVzXG5tbS9odWdldGxiLmMtODIxLSAqIGFib3J0ZWQgYWZ0ZXIgdGhlIGNhbGwgdG8gcmVnaW9uX2NoZy4gIEluIHN1Y2ggY2FzZXMsIHJlZ2lvbl9hYm9ydFxuLS1cbm1tL2h1Z2V0bGIuYz0yNDMwPXN0YXRpYyBsb25nIF9fdm1hX3Jlc2VydmF0aW9uX2NvbW1vbihzdHJ1Y3QgaHN0YXRlICpoLFxuLS1cbm1tL2h1Z2V0bGIuYy0yNDUzLVx0Y2FzZSBWTUFfQ09NTUlUX1JFU1Y6XG5tbS9odWdldGxiLmM6MjQ1NDpcdFx0cmV0ID0gcmVnaW9uX2FkZChyZXN2LCBpZHgsIGlkeCAmIzQzOyAxLCAxLCBOVUxMLCBOVUxMKTtcbm1tL2h1Z2V0bGIuYzoyNDU1Olx0XHQvKiByZWdpb25fYWRkIGNhbGxzIG9mIHJhbmdlIDEgc2hvdWxkIG5ldmVyIGZhaWwuICovXG5tbS9odWdldGxiLmMtMjQ1Ni1cdFx0Vk1fQlVHX09OKHJldCBcdTAwM2MgMCk7XG4tLVxubW0vaHVnZXRsYi5jLTI0NjMtXHRcdGlmICh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX01BWVNIQVJFKSB7XG5tbS9odWdldGxiLmM6MjQ2NDpcdFx0XHRyZXQgPSByZWdpb25fYWRkKHJlc3YsIGlkeCwgaWR4ICYjNDM7IDEsIDEsIE5VTEwsIE5VTEwpO1xubW0vaHVnZXRsYi5jOjI0NjU6XHRcdFx0LyogcmVnaW9uX2FkZCBjYWxscyBvZiByYW5nZSAxIHNob3VsZCBuZXZlciBmYWlsLiAqL1xubW0vaHVnZXRsYi5jLTI0NjYtXHRcdFx0Vk1fQlVHX09OKHJldCBcdTAwM2MgMCk7XG4tLVxubW0vaHVnZXRsYi5jLTI0NzYtXHRcdH0gZWxzZSB7XG5tbS9odWdldGxiLmM6MjQ3NzpcdFx0XHRyZXQgPSByZWdpb25fYWRkKHJlc3YsIGlkeCwgaWR4ICYjNDM7IDEsIDEsIE5VTEwsIE5VTEwpO1xubW0vaHVnZXRsYi5jOjI0Nzg6XHRcdFx0LyogcmVnaW9uX2FkZCBjYWxscyBvZiByYW5nZSAxIHNob3VsZCBuZXZlciBmYWlsLiAqL1xubW0vaHVnZXRsYi5jLTI0NzktXHRcdFx0Vk1fQlVHX09OKHJldCBcdTAwM2MgMCk7XG4tLVxubW0vaHVnZXRsYi5jPTY1NDA9bG9uZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5tbS9odWdldGxiLmMtNjY1MC1cdGlmICghdm1hIHx8IHZtYV90ZXN0KHZtYSwgVk1BX01BWVNIQVJFX0JJVCkpIHtcbm1tL2h1Z2V0bGIuYzo2NjUxOlx0XHRhZGQgPSByZWdpb25fYWRkKHJlc3ZfbWFwLCBmcm9tLCB0bywgcmVnaW9uc19uZWVkZWQsIGgsIGhfY2cpO1xubW0vaHVnZXRsYi5jLTY2NTItXG4tLVxubW0vaHVnZXRsYi5jLTY2NTktXHRcdFx0ICogcGFnZXMgaW4gdGhpcyByYW5nZSB3ZXJlIGFkZGVkIHRvIHRoZSByZXNlcnZlXG5tbS9odWdldGxiLmM6NjY2MDpcdFx0XHQgKiBtYXAgYmV0d2VlbiByZWdpb25fY2hnIGFuZCByZWdpb25fYWRkLiAgVGhpc1xubW0vaHVnZXRsYi5jLTY2NjEtXHRcdFx0ICogaW5kaWNhdGVzIGEgcmFjZSB3aXRoIGFsbG9jX2h1Z2V0bGJfZm9saW8uICBBZGp1c3Rcbi0tXG5tbS9odWdldGxiLmMtNjcxNi1cdFx0LyogT25seSBjYWxsIHJlZ2lvbl9hYm9ydCBpZiB0aGUgcmVnaW9uX2NoZyBzdWNjZWVkZWQgYnV0IHRoZVxubW0vaHVnZXRsYi5jOjY3MTc6XHRcdCAqIHJlZ2lvbl9hZGQgZmFpbGVkIG9yIGRpZG4mIzM5O3QgcnVuLlxubW0vaHVnZXRsYi5jLTY3MTgtXHRcdCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAyMjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjE0NgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDI4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBTdGF0aWMgQnVnIGluIGBhbGxvY2F0ZV9maWxlX3JlZ2lvbl9lbnRyaWVzYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQmIzM5O3MgcHJldHR5IGNsZWFyOiB0aGUgY29yZSBpc3N1ZSBpcyBpbiBgYWxsb2NhdGVfZmlsZV9yZWdpb25fZW50cmllc2AuIEl0JiMzOTtzIGRlZmluaXRlbHkgc3RhdGljLCB3aGljaCBzaW1wbGlmaWVzIHRoaW5ncyBhIGJpdC4gVGhlIGJ1ZyBpcyBsaXN0IGNvcnJ1cHRpb24uIFNwZWNpZmljYWxseSwgdGhlIGxpc3QgZ2V0cyBtZXNzZWQgdXAgd2hlbiB0aGUgYGFsbG9jYXRlX2ZpbGVfcmVnaW9uX2VudHJpZXNgIGZ1bmN0aW9uIGl0ZXJhdGVzIG1vcmUgdGhhbiBvbmNlLiBUaGlzIGhhcHBlbnMgd2hlbiB0aGUgdmFsdWUgb2YgYHJlc3YtJmd0O3JlZ2lvbl9jYWNoZV9jb3VudGAgaXMgbGVzcyB0aGFuIHRoZSBzdW0gb2YgYHJlc3YtJmd0O2FkZHNfaW5fcHJvZ3Jlc3NgIGFuZCBgcmVnaW9uc19uZWVkZWRgIGFmdGVyIHJlbGVhc2luZyB0aGUgbG9jaywgd2hpY2ggc2NyZWFtcyByYWNlIGNvbmRpdGlvbi4KClRoZSBzZWxmdGVzdCwgYGh1Z2V0bGJfcmVnaW9uX2NhY2hlX3JhY2VgLCBjbGV2ZXJseSB1c2VzIGBtZW1mZF9jcmVhdGUoTUZEX0hVR0VUTEIpYCBhbmQgYGZhbGxvY2F0ZShGQUxMT0NfRkxfUFVOQ0hfSE9MRSlgIHRvIGNyZWF0ZSBmcmFnbWVudGF0aW9uIHdpdGhpbiB0aGUgYHJlc3ZfbWFwYC4gVGhpcyBmcmFnbWVudGF0aW9uIHRoZW4gdHJpZ2dlcnMgdGhlIHJhY2UuIFNvLCB0aGUgZmVhdHVyZSBhcmVhIGlzIGh1Z2V0bGJmcy4gU2VlbXMgbGlrZSB0aGlzIGlzIGEgSFVHRVRMQkZTIHNwZWNpZmljIGlzc3VlLgoKVGhlIGtleSBmdW5jdGlvbnMgdG8gZm9jdXMgb24gaGVyZSBhcmUgYGFsbG9jYXRlX2ZpbGVfcmVnaW9uX2VudHJpZXNgIChvYnZpb3VzbHkpLCBgcmVnaW9uX2FkZGAsIGByZWdpb25fY2hnYCwgYW5kIGByZWdpb25fZGVsYCDigJMgdGhlIHN0YW5kYXJkIGxpc3QgbWFuaXB1bGF0aW9uIGZ1bmN0aW9ucyBpbiB0aGlzIGNvbnRleHQuIEkmIzM5O2xsIG5lZWQgdG8gbWV0aWN1bG91c2x5IHJldmlldyB0aGUgbG9ja2luZyBhbmQgYWNjZXNzIHBhdHRlcm5zIHdpdGhpbiB0aGVzZSBmdW5jdGlvbnMuCgpOb3csIGJlZm9yZSBJIGRpZyB0b28gZGVlcCwgbGV0IG1lIHF1aWNrbHkgc2NhbiBmb3IgYW55IHJlbGF0ZWQgY29uZmlncy4gSXMgdGhlcmUgYW55dGhpbmcgZWxzZSB0aGF0IG1pZ2h0IGNvbnRyaWJ1dGU/IEFoLCBgQ09ORklHX01FTUZEX0NSRUFURWAuIE5vLCB3YWl0IGEgbWludXRlLCBgbWVtZmRfY3JlYXRlYCBpcyBhbHdheXMgYXZhaWxhYmxlIGlmIGBDT05GSUdfU0hNRU1gIG9yIGBDT05GSUdfSFVHRVRMQkZTYCBpcyBlbmFibGVkLCB3aGljaCBtYWtlcyBzZW5zZS4gSSBoYXZlIHRvIHJlbWluZCBteXNlbGYgYG1lbWZkX2NyZWF0ZWAgaXMgYSBzeXNjYWxsLiBIbW0sIGxldCBtZSBjaGVjayB0aGUgYEhVR0VUTEJGU2AgY29uZmlnLCBzcGVjaWZpY2FsbHkgaW4gYGZzL0tjb25maWdgLiBJJiMzOTtsbCBzZWUgaWYgdGhlcmUmIzM5O3MgYW55IGltcGxpY2l0IGRlcGVuZGVuY3kgSSYjMzk7bSBtaXNzaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAyMjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSFVHRVRMQkZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9LY29uZmlnPTI0Nz1jb25maWcgQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcbi0tXG5mcy9LY29uZmlnLTI0OS1cbmZzL0tjb25maWc6MjUwOm1lbnVjb25maWcgSFVHRVRMQkZTXG5mcy9LY29uZmlnLTI1MS1cdGJvb2wgXCYjMzQ7SHVnZVRMQiBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDIyOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyOTU2CgkJCQkJCQlvdXRwdXQ6IDEyMwoJCQkJCQkJdGhvdWdodHM6IDIyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEhVR0VUTEJGUyBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gbG9va2luZyBhdCB0aGlzIHBhdGNoLCB0aGUgY2VudHJhbCBjb21wb25lbnQgYXBwZWFycyB0byBiZSBgSFVHRVRMQkZTYC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgSFVHRVRMQl9QQUdFYCBpc24mIzM5O3Qgc2VwYXJhdGVseSByZXF1aXJlZDsgYmFzZWQgb24gdGhlIGRlcGVuZGVuY3ksIGl0JiMzOTtzIGp1c3QgdGhlIGBIVUdFVExCRlNgIG9wdGlvbiB0aGF0JiMzOTtzIHRydWx5IGVzc2VudGlhbCBoZXJlLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydC4KCk5vdywgbGV0JiMzOTtzIGRyaWxsIGRvd24gYW5kIHNlZSB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZXMuIFRoZSBwcmltYXJ5IGZ1bmN0aW9uIG1vZGlmaWVkIHNlZW1zIHRvIGJlIGBhbGxvY2F0ZV9maWxlX3JlZ2lvbl9lbnRyaWVzYC4gTXkgaW5pdGlhbCBpbnNwZWN0aW9uIHNob3dzIG1vZGlmaWNhdGlvbnMgY29uZmluZWQgdG8gYG1tL2h1Z2V0bGIuY2AgYW5kIGEgZmV3IHNlbGZ0ZXN0IGFyZWFzLCBub3RoaW5nIHRoYXQgaW1tZWRpYXRlbHkgc2NyZWFtcyAmIzM0O3dpZGVzcHJlYWQgaW1wYWN0JiMzNDsgb3Igc2lnbmlmaWNhbnQgYXJjaGl0ZWN0dXJhbCBjaGFuZ2VzLiBJdCYjMzk7cyBhIGZvY3VzZWQgYWx0ZXJhdGlvbiwgd2hpY2ggc3VnZ2VzdHMgaXTigJlzIGEgZnVuY3Rpb25hbCBmaXgsIGV4YWN0bHkgdGhlIHNvcnQgdGhhdCB3YXJyYW50cyBmdXp6aW5nLgoKR2l2ZW4gdGhpcywgSSYjMzk7bSBnb2luZyB0byBjb2RpZnkgdGhpcyBpbnRvIHNvbWUgZnV6emluZyBkaXJlY3RpdmVzLgoKKipXb3J0aEZ1enppbmc6IHRydWUqKi4gQWJzb2x1dGVseSwgdGhpcyBoYXMgY2xlYXIgZnV6emluZyBwb3RlbnRpYWwuCgoqKkZvY3VzU3ltYm9sczogWyYjMzQ7YWxsb2NhdGVfZmlsZV9yZWdpb25fZW50cmllcyYjMzQ7LCAmIzM0O3JlZ2lvbl9hZGQmIzM0OywgJiMzNDtyZWdpb25fY2hnJiMzNDssICYjMzQ7cmVnaW9uX2RlbCYjMzQ7XSoqLiBUaGVzZSBhcmUgdGhlIGtleSBmdW5jdGlvbnMsIHBhcnRpY3VsYXJseSB0aGF0IGNvcmUgYGFsbG9jYXRlX2ZpbGVfcmVnaW9uX2VudHJpZXNgIGZ1bmN0aW9uIGFuZCB0aGUgcmVnaW9uIG1hbmFnZW1lbnQgZnVuY3Rpb25zLCB3aGljaCBhcHBlYXIgdG8gYmUgaW50aW1hdGVseSBpbnZvbHZlZCBpbiB0aGlzIGJ1Zy4KCioqRW5hYmxlQ29uZmlnczogWyYjMzQ7SFVHRVRMQkZTJiMzNDtdKiouIFRoYXQmIzM5O3MgdGhlIGNydWNpYWwgY29uZmlndXJhdGlvbiBlbGVtZW50IHRvIGVuYWJsZS4KCioqUmVhc29uaW5nOiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGxpc3QgY29ycnVwdGlvbiBidWcgaW4gYWxsb2NhdGVfZmlsZV9yZWdpb25fZW50cmllcyBpbiBodWdldGxiZnMuIFRoZSBidWcgaXMgdHJpZ2dlcmVkIGJ5IGEgcmFjZSBjb25kaXRpb24gd2hlbiB0aGUgcmVnaW9uIGNhY2hlIG5lZWRzIHRvIGJlIHJlZmlsbGVkIG11bHRpcGxlIHRpbWVzLiBGdXp6aW5nIGh1Z2V0bGJmcyByZXNlcnZhdGlvbiBmdW5jdGlvbnMgY2FuIGhlbHAgZW5zdXJlIHRoZSBmaXggaXMgcm9idXN0LiYjMzQ7KiogVGhpcyBzdW1tYXJpemVzIHRoZSB2dWxuZXJhYmlsaXR5JiMzOTtzIG5hdHVyZSBhbmQgdGhlIHJhdGlvbmFsZSBmb3Igb3VyIGZ1enppbmcgc3RyYXRlZ3kuIEVzc2VudGlhbGx5LCB3ZSYjMzk7cmUgbG9va2luZyB0byB2YWxpZGF0ZSB0aGUgZml4JiMzOTtzIHJvYnVzdG5lc3MgYWdhaW5zdCByYWNlIGNvbmRpdGlvbnMgaW4gdGhlIGh1Z2V0bGJmcyByZWdpb24gY2FjaGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDIyOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtIVUdFVExCRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthbGxvY2F0ZV9maWxlX3JlZ2lvbl9lbnRyaWVzJiMzNDssCiAgICAmIzM0O3JlZ2lvbl9hZGQmIzM0OywKICAgICYjMzQ7cmVnaW9uX2NoZyYjMzQ7LAogICAgJiMzNDtyZWdpb25fZGVsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbGlzdCBjb3JydXB0aW9uIGJ1ZyBpbiBhbGxvY2F0ZV9maWxlX3JlZ2lvbl9lbnRyaWVzIGluIGh1Z2V0bGJmcy4gVGhlIGJ1ZyBpcyB0cmlnZ2VyZWQgYnkgYSByYWNlIGNvbmRpdGlvbiB3aGVuIHRoZSByZWdpb24gY2FjaGUgbmVlZHMgdG8gYmUgcmVmaWxsZWQgbXVsdGlwbGUgdGltZXMuIEZ1enppbmcgaHVnZXRsYmZzIHJlc2VydmF0aW9uIGZ1bmN0aW9ucyBjYW4gaGVscCBlbnN1cmUgdGhlIGZpeCBpcyByb2J1c3QuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FsbG9jYXRlX2ZpbGVfcmVnaW9uX2VudHJpZXMmIzM0OywKICAgICYjMzQ7cmVnaW9uX2FkZCYjMzQ7LAogICAgJiMzNDtyZWdpb25fY2hnJiMzNDssCiAgICAmIzM0O3JlZ2lvbl9kZWwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBsaXN0IGNvcnJ1cHRpb24gYnVnIGluIGFsbG9jYXRlX2ZpbGVfcmVnaW9uX2VudHJpZXMgaW4gaHVnZXRsYmZzLiBUaGUgYnVnIGlzIHRyaWdnZXJlZCBieSBhIHJhY2UgY29uZGl0aW9uIHdoZW4gdGhlIHJlZ2lvbiBjYWNoZSBuZWVkcyB0byBiZSByZWZpbGxlZCBtdWx0aXBsZSB0aW1lcy4gRnV6emluZyBodWdldGxiZnMgcmVzZXJ2YXRpb24gZnVuY3Rpb25zIGNhbiBoZWxwIGVuc3VyZSB0aGUgZml4IGlzIHJvYnVzdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDIyOjM4OjE0LjA2MzIyMjkwMloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxOTYwMzkyMDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFsbG9jYXRlX2ZpbGVfcmVnaW9uX2VudHJpZXNcIixcbiAgICBcInJlZ2lvbl9hZGRcIixcbiAgICBcInJlZ2lvbl9jaGdcIixcbiAgICBcInJlZ2lvbl9kZWxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGxpc3QgY29ycnVwdGlvbiBidWcgaW4gYWxsb2NhdGVfZmlsZV9yZWdpb25fZW50cmllcyBpbiBodWdldGxiZnMuIFRoZSBidWcgaXMgdHJpZ2dlcmVkIGJ5IGEgcmFjZSBjb25kaXRpb24gd2hlbiB0aGUgcmVnaW9uIGNhY2hlIG5lZWRzIHRvIGJlIHJlZmlsbGVkIG11bHRpcGxlIHRpbWVzLiBGdXp6aW5nIGh1Z2V0bGJmcyByZXNlcnZhdGlvbiBmdW5jdGlvbnMgY2FuIGhlbHAgZW5zdXJlIHRoZSBmaXggaXMgcm9idXN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QyMjozODoxNC4wNjMyMzAzMDJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTc3NjI5NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4YWRiZDViNmY0YjQ2N2FhZTEyY2I5MTc1MGMxYjBiODY3NDJiNmU2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gSnVsIDEzIDIyOjM4OjEyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuY1xcbmluZGV4IDU3MTIxMmI4MDgzNWVjLi5mOTU3N2E3ODlmZTY0ZiAxMDA2NDRcXG4tLS0gYS9tbS9odWdldGxiLmNcXG4rKysgYi9tbS9odWdldGxiLmNcXG5AQCAtNjkzLDcgKzY5Myw3IEBAIHN0YXRpYyBpbnQgYWxsb2NhdGVfZmlsZV9yZWdpb25fZW50cmllcyhzdHJ1Y3QgcmVzdl9tYXAgKnJlc3YsXFxuIFxcbiBcXHRcXHRzcGluX2xvY2soXFx1MDAyNnJlc3YtXFx1MDAzZWxvY2spO1xcbiBcXG4tXFx0XFx0bGlzdF9zcGxpY2UoXFx1MDAyNmFsbG9jYXRlZF9yZWdpb25zLCBcXHUwMDI2cmVzdi1cXHUwMDNlcmVnaW9uX2NhY2hlKTtcXG4rXFx0XFx0bGlzdF9zcGxpY2VfaW5pdChcXHUwMDI2YWxsb2NhdGVkX3JlZ2lvbnMsIFxcdTAwMjZyZXN2LVxcdTAwM2VyZWdpb25fY2FjaGUpO1xcbiBcXHRcXHRyZXN2LVxcdTAwM2VyZWdpb25fY2FjaGVfY291bnQgKz0gdG9fYWxsb2NhdGU7XFxuIFxcdH1cXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLy5naXRpZ25vcmUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8uZ2l0aWdub3JlXFxuaW5kZXggOWNjZDllMTQ0N2U2NmIuLjdkYjg2NTc5NjBkOWYwIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLy5naXRpZ25vcmVcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8uZ2l0aWdub3JlXFxuQEAgLTU5LDYgKzU5LDcgQEAgaHVnZXRsYl9tYWR2X3ZzX21hcFxcbiBtc2VhbF90ZXN0XFxuIGRyb3BwYWJsZVxcbiBodWdldGxiX2Rpb1xcbitodWdldGxiX3JlZ2lvbl9jYWNoZV9yYWNlXFxuIHBrZXlfc2lnaGFuZGxlcl90ZXN0c18zMlxcbiBwa2V5X3NpZ2hhbmRsZXJfdGVzdHNfNjRcXG4gZ3VhcmQtcmVnaW9uc1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlXFxuaW5kZXggZTZkZjk2OGYwOTcxYzguLjQyMWEwYjdmZGRkZjI4IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGVcXG5AQCAtNjcsNiArNjcsNyBAQCBURVNUX0dFTl9GSUxFUyArPSBodWdldGxiLXJlYWQtaHdwb2lzb25cXG4gVEVTVF9HRU5fRklMRVMgKz0gaHVnZXRsYi1zaG1cXG4gVEVTVF9HRU5fRklMRVMgKz0gaHVnZXRsYi1zb2Z0LW9mZmxpbmVcXG4gVEVTVF9HRU5fRklMRVMgKz0gaHVnZXRsYi12bWVtbWFwXFxuK1RFU1RfR0VOX0ZJTEVTICs9IGh1Z2V0bGJfcmVnaW9uX2NhY2hlX3JhY2VcXG4gVEVTVF9HRU5fRklMRVMgKz0ga2h1Z2VwYWdlZFxcbiBURVNUX0dFTl9GSUxFUyArPSBtYWR2X3BvcHVsYXRlXFxuIFRFU1RfR0VOX0ZJTEVTICs9IG1hcF9maXhlZF9ub3JlcGxhY2VcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9yZWdpb25fY2FjaGVfcmFjZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9yZWdpb25fY2FjaGVfcmFjZS5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNmUzZjc1MzY0MGJlOGNcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9yZWdpb25fY2FjaGVfcmFjZS5jXFxuQEAgLTAsMCArMSwzMTUgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rLypcXG4rICogUmVncmVzc2lvbiB0ZXN0IGZvciBsaXN0IGNvcnJ1cHRpb24gaW5cXG4rICogbW0vaHVnZXRsYi5jOmFsbG9jYXRlX2ZpbGVfcmVnaW9uX2VudHJpZXMoKS5cXG4rICpcXG4rICogRm9yayBwcm9jZXNzZXMgc2hhcmluZyBhIGh1Z2V0bGIgaW5vZGUgdmlhIGBtZW1mZF9jcmVhdGUoTUZEX0hVR0VUTEIpYFxcbisgKiBhbmQgaGF2ZSB0aGVtIGZhdWx0IHJhbmdlcyBhbmQgcHVuY2ggaG9sZXMgdG8gZnJhZ21lbnQgdGhlIHNoYXJlZFxcbisgKiBgcmVzdl9tYXBgIHdoaWxlIGRyYWluaW5nIGByZXN2LVxcdTAwM2VyZWdpb25fY2FjaGVgIGZyb20gYSBzZXBhcmF0ZSBhZGRyZXNzXFxuKyAqIHNwYWNlLlxcbisgKi9cXG4rI2RlZmluZSBfR05VX1NPVVJDRVxcbisjaW5jbHVkZSBcXHUwMDNjZXJybm8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2ZjbnRsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzZXRqbXAuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3NpZ25hbC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkYm9vbC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkaW50LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdGRpby5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkbGliLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdHJpbmcuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3RpbWUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3VuaXN0ZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3lzL21tYW4uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N5cy9zeXNjYWxsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzeXMvd2FpdC5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZhbGxvYy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtZmQuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCIuLi9rc2VsZnRlc3QuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImh1Z2VwYWdlX3NldHRpbmdzLmhcXFwiXFxuK1xcbisvKiBUdW5hYmxlcyAob3ZlcnJpZGFibGUgdmlhIGFyZ3YpLiAqL1xcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBmaWxlX3BhZ2VzID0gNjQ7XFx0LyogaHVnZSBwYWdlcyBiYWNraW5nIHRoZSBzaGFyZWQgZmlsZSAqL1xcbitzdGF0aWMgdW5zaWduZWQgaW50IG5yX3Byb2NzO1xcdFxcdC8qIDAgPVxcdTAwM2UgYXV0byAoMiAqIG5yIG9ubGluZSBjcHVzKSAqL1xcbitzdGF0aWMgdW5zaWduZWQgaW50IGR1cmF0aW9uX3NlYyA9IDU7XFx0LyogLS10cmlnZ2VyIHJ1biB0aW1lICovXFxuK1xcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBodWdlX3BhZ2Vfc2l6ZTtcXHQvKiBieXRlcyAqL1xcbitzdGF0aWMgaW50IG1lbWZkID0gLTE7XFxuK3N0YXRpYyB2b2xhdGlsZSBpbnQgKnN0b3A7XFx0XFx0Lyogc2hhcmVkIGFjcm9zcyBmb3JrZWQgY2hpbGRyZW4gKi9cXG4rXFxuKy8qXFxuKyAqIFBlci1wcm9jZXNzIFNJR0JVUyBlc2NhcGU6IGEgZmF1bHQgY2FuIGZhaWwgKHBvb2wgZXhoYXVzdGVkKSBhbmQgcmFpc2VcXG4rICogU0lHQlVTOyBqdW1wIGJhY2sgYW5kIGFiYW5kb24gdGhlIHJlc3Qgb2YgdGhlIGN1cnJlbnQgcmFuZ2UgaW5zdGVhZCBvZlxcbisgKiBkeWluZy4gIEVhY2ggY2hpbGQgaXMgc2luZ2xlLXRocmVhZGVkLCBzbyBhIGZpbGUtc2NvcGUgYnVmZmVyIGlzIGZpbmUuXFxuKyAqL1xcbitzdGF0aWMgc2lnam1wX2J1ZiBzaWdidXNfZW52O1xcbitcXG4rc3RhdGljIHZvaWQgc2lnYnVzX2hhbmRsZXIoaW50IHNpZylcXG4re1xcbitcXHRzaWdsb25nam1wKHNpZ2J1c19lbnYsIDEpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBpbnN0YWxsX3NpZ2J1c19oYW5kbGVyKHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IHNpZ2FjdGlvbiBzYSA9IHtcXG4rXFx0XFx0LnNhX2hhbmRsZXIgPSBzaWdidXNfaGFuZGxlcixcXG4rXFx0fTtcXG4rXFxuK1xcdHNpZ2VtcHR5c2V0KFxcdTAwMjZzYS5zYV9tYXNrKTtcXG4rXFx0c2lnYWN0aW9uKFNJR0JVUywgXFx1MDAyNnNhLCBOVUxMKTtcXG4rfVxcbitcXG4rc3RhdGljIGxvbmcgc3lzX21lbWZkX2NyZWF0ZShjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuK3tcXG4rXFx0cmV0dXJuIHN5c2NhbGwoX19OUl9tZW1mZF9jcmVhdGUsIG5hbWUsIGZsYWdzKTtcXG4rfVxcbitcXG4rLypcXG4rICogTWFwIFtzdGFydCwgc3RhcnQrbGVuKSBvZiB0aGUgc2hhcmVkIGZpbGUgYW5kIGZhdWx0IGV2ZXJ5IHBhZ2UgaW4uXFxuKyAqXFxuKyAqIFRoZSBtbWFwKCkgZHJpdmVzIG1tYXAtdGltZSBodWdldGxiX3Jlc2VydmVfcGFnZXMgLVxcdTAwM2UgcmVnaW9uX2NoZyAodGhlXFxuKyAqIHdpZGUtd2luZG93IHZpY3RpbSB3aGVuIHRoZSByYW5nZSBpcyBmcmFnbWVudGVkKSArIHJlZ2lvbl9hZGQuICBUaGVcXG4rICogc3Vic2VxdWVudCBzdG9yZXMgZmF1bHQgcGFnZXMgaW4gKndpdGhvdXQqIGlub2RlX2xvY2ssIGRyaXZpbmcgdGhlXFxuKyAqIGxvY2stZnJlZSByZWdpb25fYWRkL3JlZ2lvbl9jaGcgdGhhdCBkcmFpbnMgcmVzdi1cXHUwMDNlcmVnaW9uX2NhY2hlIC0tIHRoZVxcbisgKiBjb25jdXJyZW5jeSB0aGUgYnVnZ3kgbG9vcCBuZWVkcyBmcm9tICpvdGhlciogcHJvY2Vzc2VzLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgbWFwX2FuZF9mYXVsdF9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGxlbilcXG4re1xcbitcXHR1bnNpZ25lZCBsb25nIGk7XFxuK1xcdGNoYXIgKmFkZHI7XFxuK1xcbitcXHRpZiAoIWxlbilcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHRhZGRyID0gbW1hcChOVUxMLCBsZW4gKiBodWdlX3BhZ2Vfc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcXG4rXFx0XFx0ICAgIE1BUF9TSEFSRUQsIG1lbWZkLCBzdGFydCAqIGh1Z2VfcGFnZV9zaXplKTtcXG4rXFx0aWYgKGFkZHIgPT0gTUFQX0ZBSUxFRClcXG4rXFx0XFx0cmV0dXJuO1xcdFxcdC8qIEVOT01FTSB1bmRlciBwb29sIHByZXNzdXJlIGlzIGZpbmUgKi9cXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBsZW47IGkrKykge1xcbitcXHRcXHRpZiAoc2lnc2V0am1wKHNpZ2J1c19lbnYsIDEpID09IDApXFxuK1xcdFxcdFxcdCoodm9sYXRpbGUgY2hhciAqKShhZGRyICsgaSAqIGh1Z2VfcGFnZV9zaXplKSA9IChjaGFyKWk7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0YnJlYWs7XFx0LyogU0lHQlVTOiBwb29sIGV4aGF1c3RlZCwgc3RvcCBmYXVsdGluZyAqL1xcbitcXHR9XFxuK1xcdG11bm1hcChhZGRyLCBsZW4gKiBodWdlX3BhZ2Vfc2l6ZSk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFJlbW92ZSBbc3RhcnQsIHN0YXJ0K2xlbikgaHVnZSBwYWdlcyBmcm9tIHRoZSBzaGFyZWQgZmlsZSwgZHJpdmluZ1xcbisgKiBodWdldGxiZnNfcHVuY2hfaG9sZSAtXFx1MDAzZSByZW1vdmVfaW5vZGVfaHVnZXBhZ2VzIC1cXHUwMDNlIHJlZ2lvbl9kZWwgZm9yIHRoZSBwYWdlc1xcbisgKiB0aGF0IHdlcmUgZmF1bHRlZCBpbiBhYm92ZS4gIFRoaXMgZnJlZXMgcGFnZXMgYmFjayB0byB0aGUgcG9vbCAoYm91bmRpbmdcXG4rICogcmVzaWRlbmN5KSBhbmQgcmUtZnJhZ21lbnRzIHRoZSByZXN2X21hcCBzbyBsYXRlciByZWdpb25fY2hnIGNhbGxzIGtlZXBcXG4rICogbmVlZGluZyBtdWx0aXBsZSBlbnRyaWVzLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgcHVuY2hfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBsZW4pXFxuK3tcXG4rXFx0aWYgKCFsZW4pXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0ZmFsbG9jYXRlKG1lbWZkLCBGQUxMT0NfRkxfUFVOQ0hfSE9MRSB8IEZBTExPQ19GTF9LRUVQX1NJWkUsXFxuK1xcdFxcdCAgc3RhcnQgKiBodWdlX3BhZ2Vfc2l6ZSwgbGVuICogaHVnZV9wYWdlX3NpemUpO1xcbit9XFxuK1xcbisvKlxcbisgKiBPbmUgZm9ya2VkIHdvcmtlci4gIEVhY2ggd29ya2VyIGlzIHNpbXVsdGFuZW91c2x5IGEgdmljdGltIChpdHMgd2lkZVxcbisgKiBtbWFwLXRpbWUgcmVnaW9uX2NoZykgYW5kLCBmb3IgdGhlIG90aGVyIHdvcmtlcnMsIGEgbG9jay1mcmVlIGNhY2hlXFxuKyAqIGRyYWluZXIgKGl0cyBmYXVsdHMpIC0tIGV4YWN0bHkgdGhlIHNoYXJlZC1pbm9kZSBtYXArZmF1bHQgY2h1cm4gc2VlbiBpblxcbisgKiB0aGUgb3JpZ2luYWwgY3Jhc2ggKFFFTVUgcHJlYWxsb2MgKyBTUERLL0J5dGVsaWdodCBvbiBvbmUgZ3Vlc3QtUkFNIGZpbGUpLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgY2hpbGRfd29ya2VyKHVuc2lnbmVkIGludCBpZClcXG4re1xcbitcXHR1bnNpZ25lZCBpbnQgc2VlZCA9IGlkICogMjY1NDQzNTc2MXUgXiAodW5zaWduZWQgaW50KXRpbWUoTlVMTCkgXlxcbitcXHRcXHRcXHQgICAgKCh1bnNpZ25lZCBpbnQpZ2V0cGlkKCkgXFx1MDAzY1xcdTAwM2MgMSk7XFxuK1xcbitcXHRpbnN0YWxsX3NpZ2J1c19oYW5kbGVyKCk7XFxuK1xcbitcXHR3aGlsZSAoISpzdG9wKSB7XFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgc3RhcnQgPSByYW5kX3IoXFx1MDAyNnNlZWQpICUgZmlsZV9wYWdlcztcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBsZW4gPSAxICsgcmFuZF9yKFxcdTAwMjZzZWVkKSAlIChmaWxlX3BhZ2VzIC0gc3RhcnQpO1xcbitcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogQmlhcyB0b3dhcmQgbWFwK2ZhdWx0ICh2aWN0aW1zIGFuZCBkcmFpbmVycyk7IHB1bmNoIGFcXG4rXFx0XFx0ICogcXVhcnRlciBvZiB0aGUgdGltZSB0byBrZWVwIHRoZSBtYXAgZnJhZ21lbnRlZCBhbmQgdG8gY2FwXFxuK1xcdFxcdCAqIGhvdyBtYW55IHBhZ2VzIHN0YXkgcmVzaWRlbnQuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAocmFuZF9yKFxcdTAwMjZzZWVkKSAlIDQpXFxuK1xcdFxcdFxcdG1hcF9hbmRfZmF1bHRfcmFuZ2Uoc3RhcnQsIGxlbik7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0cHVuY2hfcmFuZ2Uoc3RhcnQsIGxlbik7XFxuK1xcdH1cXG4rfVxcbitcXG4rLypcXG4rICogU2FmZSwgc2luZ2xlLXByb2Nlc3MgZnVuY3Rpb25hbCBjaGVjay4gIEl0IGZyYWdtZW50cyB0aGUgc2hhcmVkIHJlc3ZfbWFwXFxuKyAqIChyZXNlcnZhdGlvbnMgZm9yIGEgc2hhcmVkIG1hcHBpbmcgcGVyc2lzdCBvbiB0aGUgaW5vZGUgYWZ0ZXIgbXVubWFwKSBzb1xcbisgKiB0aGF0IGEgc3Vic2VxdWVudCB3aG9sZS1maWxlIG1tYXAgbWFrZXMgcmVnaW9uX2NoZyBjb21wdXRlXFxuKyAqIHJlZ2lvbnNfbmVlZGVkIFxcdTAwM2UgMSwgZm9yY2luZyBhbGxvY2F0ZV9maWxlX3JlZ2lvbl9lbnRyaWVzIHRvIGFsbG9jYXRlIGFuZFxcbisgKiBzcGxpY2Ugc2V2ZXJhbCBlbnRyaWVzLiAgVGhpcyBleGVyY2lzZXMgdGhlIGJ1Z2d5IGxpbmUsIGJ1dCB3aXRob3V0XFxuKyAqIGNvbmN1cnJlbmN5IGl0IGFsd2F5cyBtYWtlcyBleGFjdGx5IG9uZSBsb29wIGl0ZXJhdGlvbiwgc28gaXQgY2Fubm90IHRyaXBcXG4rICogdGhlIHJhY2UgYW5kIGlzIHNhZmUgb24gYW55IGtlcm5lbC4gIFJldHVybnMgMCBvbiBzdWNjZXNzLlxcbisgKi9cXG4rc3RhdGljIGludCBmdW5jdGlvbmFsX2NoZWNrKHZvaWQpXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyBpO1xcbitcXHR2b2lkICphZGRyO1xcbitcXG4rXFx0LyogUHVuY2ggZXZlcnl0aGluZyBzbyB3ZSBzdGFydCBmcm9tIGFuIGVtcHR5IHJlc3ZfbWFwLiAqL1xcbitcXHRwdW5jaF9yYW5nZSgwLCBmaWxlX3BhZ2VzKTtcXG4rXFxuK1xcdC8qIFJlc2VydmUgZXZlcnkgb3RoZXIgaHVnZSBwYWdlIC1cXHUwMDNlIH5maWxlX3BhZ2VzLzIgZGlzam9pbnQgcmVnaW9ucy4gKi9cXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGZpbGVfcGFnZXM7IGkgKz0gMilcXG4rXFx0XFx0bWFwX2FuZF9mYXVsdF9yYW5nZShpLCAxKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIE9uZSBtYXBwaW5nIHNwYW5uaW5nIHRoZSB3aG9sZSBmaWxlIG11c3QgZmlsbCBhbGwgdGhlIGhvbGVzIGluIGFcXG4rXFx0ICogc2luZ2xlIHJlZ2lvbl9jaGcgLVxcdTAwM2UgYSBtdWx0aS1lbnRyeSByZWdpb25fY2FjaGUgcmVmaWxsLlxcbitcXHQgKi9cXG4rXFx0YWRkciA9IG1tYXAoTlVMTCwgZmlsZV9wYWdlcyAqIGh1Z2VfcGFnZV9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxcbitcXHRcXHQgICAgTUFQX1NIQVJFRCwgbWVtZmQsIDApO1xcbitcXHRpZiAoYWRkciA9PSBNQVBfRkFJTEVEKSB7XFxuK1xcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJ3aG9sZS1maWxlIG1tYXAgZmFpbGVkOiAlc1xcXFxuXFxcIiwgc3RyZXJyb3IoZXJybm8pKTtcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXHR9XFxuK1xcdG11bm1hcChhZGRyLCBmaWxlX3BhZ2VzICogaHVnZV9wYWdlX3NpemUpO1xcbitcXHRwdW5jaF9yYW5nZSgwLCBmaWxlX3BhZ2VzKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnVuX3RyaWdnZXIodm9pZClcXG4re1xcbitcXHRwaWRfdCAqcGlkcztcXG4rXFx0dW5zaWduZWQgaW50IGksIHN0YXJ0ZWQgPSAwO1xcbitcXG4rXFx0c3RvcCA9IG1tYXAoTlVMTCwgc2l6ZW9mKCpzdG9wKSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcXG4rXFx0XFx0ICAgIE1BUF9TSEFSRUQgfCBNQVBfQU5PTllNT1VTLCAtMSwgMCk7XFxuK1xcdGlmIChzdG9wID09IE1BUF9GQUlMRUQpXFxuK1xcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwibW1hcChzdG9wIGZsYWcpOiAlc1xcXFxuXFxcIiwgc3RyZXJyb3IoZXJybm8pKTtcXG4rXFx0KnN0b3AgPSAwO1xcbitcXG4rXFx0cGlkcyA9IGNhbGxvYyhucl9wcm9jcywgc2l6ZW9mKCpwaWRzKSk7XFxuK1xcdGlmICghcGlkcylcXG4rXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJjYWxsb2M6ICVzXFxcXG5cXFwiLCBzdHJlcnJvcihlcnJubykpO1xcbitcXG4rXFx0a3NmdF9wcmludF9tc2coXFxcInN0cmVzc2luZyAldSBwcm9jZXNzZXMgZm9yICV1cyBvbiAlbHUgaHVnZSBwYWdlcyAoJWx1IE1pQilcXFxcblxcXCIsXFxuK1xcdFxcdCAgICAgICBucl9wcm9jcywgZHVyYXRpb25fc2VjLCBmaWxlX3BhZ2VzLFxcbitcXHRcXHQgICAgICAgKGZpbGVfcGFnZXMgKiBodWdlX3BhZ2Vfc2l6ZSkgXFx1MDAzZVxcdTAwM2UgMjApO1xcbitcXHRrc2Z0X3ByaW50X21zZyhcXFwiV0FSTklORzogYSB2dWxuZXJhYmxlIGtlcm5lbCB3aWxsIHBhbmljIGhlcmVcXFxcblxcXCIpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX3Byb2NzOyBpKyspIHtcXG4rXFx0XFx0cGlkX3QgcGlkID0gZm9yaygpO1xcbitcXG4rXFx0XFx0aWYgKHBpZCBcXHUwMDNjIDApIHtcXG4rXFx0XFx0XFx0a3NmdF9wcmludF9tc2coXFxcImZvcms6ICVzXFxcXG5cXFwiLCBzdHJlcnJvcihlcnJubykpO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbitcXHRcXHRpZiAocGlkID09IDApIHtcXG4rXFx0XFx0XFx0ZnJlZShwaWRzKTtcXG4rXFx0XFx0XFx0Y2hpbGRfd29ya2VyKGkpO1xcbitcXHRcXHRcXHRfZXhpdCgwKTtcXG4rXFx0XFx0fVxcbitcXHRcXHRwaWRzW3N0YXJ0ZWQrK10gPSBwaWQ7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghc3RhcnRlZCkge1xcbitcXHRcXHRmcmVlKHBpZHMpO1xcbitcXHRcXHRtdW5tYXAoKHZvaWQgKilzdG9wLCBzaXplb2YoKnN0b3ApKTtcXG4rXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJubyB3b3JrZXIgcHJvY2Vzc2VzIHN0YXJ0ZWRcXFxcblxcXCIpO1xcbitcXHR9XFxuK1xcbitcXHRzbGVlcChkdXJhdGlvbl9zZWMpO1xcbitcXHQqc3RvcCA9IDE7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgc3RhcnRlZDsgaSsrKVxcbitcXHRcXHR3YWl0cGlkKHBpZHNbaV0sIE5VTEwsIDApO1xcbitcXHRmcmVlKHBpZHMpO1xcbitcXHRtdW5tYXAoKHZvaWQgKilzdG9wLCBzaXplb2YoKnN0b3ApKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHVzYWdlKGNvbnN0IGNoYXIgKnByb2cpXFxuK3tcXG4rXFx0ZnByaW50ZihzdGRlcnIsXFxuK1xcdFxcdFxcXCJ1c2FnZTogJXMgWy0tdHJpZ2dlcl0gWy1zIGh1Z2VfcGFnZXNdIFstdCBwcm9jc10gWy1kIHNlY29uZHNdXFxcXG5cXFwiXFxuK1xcdFxcdFxcXCIgIChkZWZhdWx0KSBydW4gYSBzYWZlIHNpbmdsZS1wcm9jZXNzIGZ1bmN0aW9uYWwgY2hlY2tcXFxcblxcXCJcXG4rXFx0XFx0XFxcIiAgLS10cmlnZ2VyIGZvcmsrZmF1bHQgY29uY3VycmVudCByZXByb2R1Y2VyIChDQU4gUEFOSUMgQSBCVUdHWSBIT1NUKVxcXFxuXFxcIlxcbitcXHRcXHRcXFwiICAtcyAgaHVnZSBwYWdlcyBiYWNraW5nIHRoZSBzaGFyZWQgZmlsZSAoZGVmYXVsdCAlbHUpXFxcXG5cXFwiXFxuK1xcdFxcdFxcXCIgIC10ICB3b3JrZXIgcHJvY2Vzc2VzIGZvciAtLXRyaWdnZXIgKGRlZmF1bHQgMiAqIG5yX2NwdXMpXFxcXG5cXFwiXFxuK1xcdFxcdFxcXCIgIC1kICAtLXRyaWdnZXIgcnVuIHRpbWUgaW4gc2Vjb25kcyAoZGVmYXVsdCAldSlcXFxcblxcXCIsXFxuK1xcdFxcdHByb2csIGZpbGVfcGFnZXMsIGR1cmF0aW9uX3NlYyk7XFxuK31cXG4rXFxuK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXFxuK3tcXG4rXFx0Ym9vbCB0cmlnZ2VyID0gZmFsc2U7XFxuK1xcdGludCBpLCByZXQ7XFxuK1xcbitcXHRmb3IgKGkgPSAxOyBpIFxcdTAwM2MgYXJnYzsgaSsrKSB7XFxuK1xcdFxcdGlmICghc3RyY21wKGFyZ3ZbaV0sIFxcXCItLXRyaWdnZXJcXFwiKSkge1xcbitcXHRcXHRcXHR0cmlnZ2VyID0gdHJ1ZTtcXG4rXFx0XFx0fSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbaV0sIFxcXCItc1xcXCIpIFxcdTAwMjZcXHUwMDI2IGkgKyAxIFxcdTAwM2MgYXJnYykge1xcbitcXHRcXHRcXHRmaWxlX3BhZ2VzID0gc3RydG91bChhcmd2WysraV0sIE5VTEwsIDApO1xcbitcXHRcXHR9IGVsc2UgaWYgKCFzdHJjbXAoYXJndltpXSwgXFxcIi10XFxcIikgXFx1MDAyNlxcdTAwMjYgaSArIDEgXFx1MDAzYyBhcmdjKSB7XFxuK1xcdFxcdFxcdG5yX3Byb2NzID0gc3RydG91bChhcmd2WysraV0sIE5VTEwsIDApO1xcbitcXHRcXHR9IGVsc2UgaWYgKCFzdHJjbXAoYXJndltpXSwgXFxcIi1kXFxcIikgXFx1MDAyNlxcdTAwMjYgaSArIDEgXFx1MDAzYyBhcmdjKSB7XFxuK1xcdFxcdFxcdGR1cmF0aW9uX3NlYyA9IHN0cnRvdWwoYXJndlsrK2ldLCBOVUxMLCAwKTtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0dXNhZ2UoYXJndlswXSk7XFxuK1xcdFxcdFxcdHJldHVybiBLU0ZUX0ZBSUw7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0a3NmdF9wcmludF9oZWFkZXIoKTtcXG4rXFx0a3NmdF9zZXRfcGxhbigxKTtcXG4rXFxuK1xcdGlmIChmaWxlX3BhZ2VzIFxcdTAwM2MgNClcXG4rXFx0XFx0ZmlsZV9wYWdlcyA9IDQ7XFxuK1xcdGlmICghbnJfcHJvY3MpIHtcXG4rXFx0XFx0bG9uZyBjcHVzID0gc3lzY29uZihfU0NfTlBST0NFU1NPUlNfT05MTik7XFxuK1xcbitcXHRcXHRucl9wcm9jcyA9IGNwdXMgXFx1MDAzZSAwID8gKHVuc2lnbmVkIGludCljcHVzICogMiA6IDQ7XFxuK1xcdH1cXG4rXFx0aWYgKG5yX3Byb2NzIFxcdTAwM2MgMilcXG4rXFx0XFx0bnJfcHJvY3MgPSAyO1xcbitcXG4rXFx0aHVnZV9wYWdlX3NpemUgPSBkZWZhdWx0X2h1Z2VfcGFnZV9zaXplKCk7XFxuK1xcdGlmICghaHVnZV9wYWdlX3NpemUpXFxuK1xcdFxcdGtzZnRfZXhpdF9za2lwKFxcXCJubyBodWdldGxiZnMgLyBodWdlIHBhZ2Ugc2l6ZSBhdmFpbGFibGVcXFxcblxcXCIpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogQm90aCBtb2RlcyBmYXVsdCBwYWdlcyBpbiAoZnVuY3Rpb25hbF9jaGVjayB0b3VjaGVzIGV2ZXJ5IHBhZ2UgaXRcXG4rXFx0ICogbWFwcywgYW5kIC0tdHJpZ2dlcidzIHdvcmtlcnMgZmF1bHQgdGhlIHJhbmdlcyB0aGV5IG1hcCksIHNvIHRoZVxcbitcXHQgKiB3aG9sZSBmaWxlIG1heSBiZWNvbWUgcmVzaWRlbnQ7IHJlcXVpcmUgdGhhdCBtYW55ICpmcmVlKiBodWdlIHBhZ2VzLFxcbitcXHQgKiBub3QganVzdCByZXNlcnZhdGlvbnMuXFxuK1xcdCAqL1xcbitcXHRpZiAoaHVnZXRsYl9mcmVlX2RlZmF1bHRfcGFnZXMoKSBcXHUwMDNjIGZpbGVfcGFnZXMpXFxuK1xcdFxcdGtzZnRfZXhpdF9za2lwKFxcXCJuZWVkICVsdSBmcmVlIGh1Z2UgcGFnZXMsIGhhdmUgJWx1IChzZXQgbnJfaHVnZXBhZ2VzKVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgICAgIGZpbGVfcGFnZXMsIGh1Z2V0bGJfZnJlZV9kZWZhdWx0X3BhZ2VzKCkpO1xcbitcXG4rXFx0bWVtZmQgPSBzeXNfbWVtZmRfY3JlYXRlKFxcXCJodWdldGxiX3JlZ2lvbl9jYWNoZV9yYWNlXFxcIixcXG4rXFx0XFx0XFx0XFx0IE1GRF9IVUdFVExCIHxcXG4rXFx0XFx0XFx0XFx0IChfX2J1aWx0aW5fY3R6bChodWdlX3BhZ2Vfc2l6ZSkgXFx1MDAzY1xcdTAwM2MgTUZEX0hVR0VfU0hJRlQpKTtcXG4rXFx0aWYgKG1lbWZkIFxcdTAwM2MgMClcXG4rXFx0XFx0a3NmdF9leGl0X3NraXAoXFxcIm1lbWZkX2NyZWF0ZShNRkRfSFVHRVRMQik6ICVzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICAgICAgc3RyZXJyb3IoZXJybm8pKTtcXG4rXFx0aWYgKGZ0cnVuY2F0ZShtZW1mZCwgZmlsZV9wYWdlcyAqIGh1Z2VfcGFnZV9zaXplKSkge1xcbitcXHRcXHRjbG9zZShtZW1mZCk7XFxuK1xcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiZnRydW5jYXRlOiAlc1xcXFxuXFxcIiwgc3RyZXJyb3IoZXJybm8pKTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHRyaWdnZXIpXFxuK1xcdFxcdHJldCA9IHJ1bl90cmlnZ2VyKCk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0cmV0ID0gZnVuY3Rpb25hbF9jaGVjaygpO1xcbitcXG4rXFx0Y2xvc2UobWVtZmQpO1xcbitcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0a3NmdF90ZXN0X3Jlc3VsdF9mYWlsKFxcXCJodWdldGxiIHJlZ2lvbl9jYWNoZSByYWNlIGNoZWNrXFxcXG5cXFwiKTtcXG4rXFx0ZWxzZSBpZiAodHJpZ2dlcilcXG4rXFx0XFx0a3NmdF90ZXN0X3Jlc3VsdF9wYXNzKFxcXCJzdXJ2aXZlZCBjb25jdXJyZW50IHJlZ2lvbl9jYWNoZSBjaHVyblxcXFxuXFxcIik7XFxuK1xcdGVsc2VcXG4rXFx0XFx0a3NmdF90ZXN0X3Jlc3VsdF9wYXNzKFxcXCJtdWx0aS1lbnRyeSByZWdpb25fY2FjaGUgcmVmaWxsIHdvcmtzXFxcXG5cXFwiKTtcXG4rXFxuK1xcdGtzZnRfZmluaXNoZWQoKTtcXG4rfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoXFxuaW5kZXggOGMyOTZkZWRmMDQ3NGQuLjBjYjg1NzA1NjkxNWY0IDEwMDc1NVxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2hcXG5AQCAtMjY3LDYgKzI2Nyw3IEBAIENBVEVHT1JZPVxcXCJodWdldGxiXFxcIiBydW5fdGVzdCAuL2h1Z2V0bGItbWFkdmlzZVxcbiBDQVRFR09SWT1cXFwiaHVnZXRsYlxcXCIgcnVuX3Rlc3QgLi9odWdldGxiX2Rpb1xcbiBDQVRFR09SWT1cXFwiaHVnZXRsYlxcXCIgcnVuX3Rlc3QgLi9odWdldGxiX2ZhdWx0X2FmdGVyX21hZHZcXG4gQ0FURUdPUlk9XFxcImh1Z2V0bGJcXFwiIHJ1bl90ZXN0IC4vaHVnZXRsYl9tYWR2X3ZzX21hcFxcbitDQVRFR09SWT1cXFwiaHVnZXRsYlxcXCIgcnVuX3Rlc3QgLi9odWdldGxiX3JlZ2lvbl9jYWNoZV9yYWNlXFxuIFxcbiBpZiB0ZXN0X3NlbGVjdGVkIFxcXCJodWdldGxiXFxcIjsgdGhlblxcbiBcXHRlY2hvIFxcXCJOT1RFOiBUaGVzZSBodWdldGxiIHRlc3RzIHByb3ZpZGUgbWluaW1hbCBjb3ZlcmFnZS4gIFVzZVxcXCJcXHQgIHwgdGFwX3ByZWZpeFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QyMjozODoxNS4xODIxMzI4NjlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwODQxNDcyODUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFsbG9jYXRlX2ZpbGVfcmVnaW9uX2VudHJpZXNcIixcbiAgICBcInJlZ2lvbl9hZGRcIixcbiAgICBcInJlZ2lvbl9jaGdcIixcbiAgICBcInJlZ2lvbl9kZWxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGxpc3QgY29ycnVwdGlvbiBidWcgaW4gYWxsb2NhdGVfZmlsZV9yZWdpb25fZW50cmllcyBpbiBodWdldGxiZnMuIFRoZSBidWcgaXMgdHJpZ2dlcmVkIGJ5IGEgcmFjZSBjb25kaXRpb24gd2hlbiB0aGUgcmVnaW9uIGNhY2hlIG5lZWRzIHRvIGJlIHJlZmlsbGVkIG11bHRpcGxlIHRpbWVzLiBGdXp6aW5nIGh1Z2V0bGJmcyByZXNlcnZhdGlvbiBmdW5jdGlvbnMgY2FuIGhlbHAgZW5zdXJlIHRoZSBmaXggaXMgcm9idXN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDhhZGJkNWI2ZjRiNDY3YWFlMTJjYjkxNzUwYzFiMGI4Njc0MmI2ZTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCAxMyAyMjozODoxMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuY1xuaW5kZXggNTcxMjEyYjgwODM1ZWMuLmY5NTc3YTc4OWZlNjRmIDEwMDY0NFxuLS0tIGEvbW0vaHVnZXRsYi5jXG4rKysgYi9tbS9odWdldGxiLmNcbkBAIC02OTMsNyArNjkzLDcgQEAgc3RhdGljIGludCBhbGxvY2F0ZV9maWxlX3JlZ2lvbl9lbnRyaWVzKHN0cnVjdCByZXN2X21hcCAqcmVzdixcbiBcbiBcdFx0c3Bpbl9sb2NrKFx1MDAyNnJlc3YtXHUwMDNlbG9jayk7XG4gXG4tXHRcdGxpc3Rfc3BsaWNlKFx1MDAyNmFsbG9jYXRlZF9yZWdpb25zLCBcdTAwMjZyZXN2LVx1MDAzZXJlZ2lvbl9jYWNoZSk7XG4rXHRcdGxpc3Rfc3BsaWNlX2luaXQoXHUwMDI2YWxsb2NhdGVkX3JlZ2lvbnMsIFx1MDAyNnJlc3YtXHUwMDNlcmVnaW9uX2NhY2hlKTtcbiBcdFx0cmVzdi1cdTAwM2VyZWdpb25fY2FjaGVfY291bnQgKz0gdG9fYWxsb2NhdGU7XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vLmdpdGlnbm9yZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLy5naXRpZ25vcmVcbmluZGV4IDljY2Q5ZTE0NDdlNjZiLi43ZGI4NjU3OTYwZDlmMCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLy5naXRpZ25vcmVcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLy5naXRpZ25vcmVcbkBAIC01OSw2ICs1OSw3IEBAIGh1Z2V0bGJfbWFkdl92c19tYXBcbiBtc2VhbF90ZXN0XG4gZHJvcHBhYmxlXG4gaHVnZXRsYl9kaW9cbitodWdldGxiX3JlZ2lvbl9jYWNoZV9yYWNlXG4gcGtleV9zaWdoYW5kbGVyX3Rlc3RzXzMyXG4gcGtleV9zaWdoYW5kbGVyX3Rlc3RzXzY0XG4gZ3VhcmQtcmVnaW9uc1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGVcbmluZGV4IGU2ZGY5NjhmMDk3MWM4Li40MjFhMGI3ZmRkZGYyOCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZVxuQEAgLTY3LDYgKzY3LDcgQEAgVEVTVF9HRU5fRklMRVMgKz0gaHVnZXRsYi1yZWFkLWh3cG9pc29uXG4gVEVTVF9HRU5fRklMRVMgKz0gaHVnZXRsYi1zaG1cbiBURVNUX0dFTl9GSUxFUyArPSBodWdldGxiLXNvZnQtb2ZmbGluZVxuIFRFU1RfR0VOX0ZJTEVTICs9IGh1Z2V0bGItdm1lbW1hcFxuK1RFU1RfR0VOX0ZJTEVTICs9IGh1Z2V0bGJfcmVnaW9uX2NhY2hlX3JhY2VcbiBURVNUX0dFTl9GSUxFUyArPSBraHVnZXBhZ2VkXG4gVEVTVF9HRU5fRklMRVMgKz0gbWFkdl9wb3B1bGF0ZVxuIFRFU1RfR0VOX0ZJTEVTICs9IG1hcF9maXhlZF9ub3JlcGxhY2VcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX3JlZ2lvbl9jYWNoZV9yYWNlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX3JlZ2lvbl9jYWNoZV9yYWNlLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNmUzZjc1MzY0MGJlOGNcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfcmVnaW9uX2NhY2hlX3JhY2UuY1xuQEAgLTAsMCArMSwzMTUgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8qXG4rICogUmVncmVzc2lvbiB0ZXN0IGZvciBsaXN0IGNvcnJ1cHRpb24gaW5cbisgKiBtbS9odWdldGxiLmM6YWxsb2NhdGVfZmlsZV9yZWdpb25fZW50cmllcygpLlxuKyAqXG4rICogRm9yayBwcm9jZXNzZXMgc2hhcmluZyBhIGh1Z2V0bGIgaW5vZGUgdmlhIGBtZW1mZF9jcmVhdGUoTUZEX0hVR0VUTEIpYFxuKyAqIGFuZCBoYXZlIHRoZW0gZmF1bHQgcmFuZ2VzIGFuZCBwdW5jaCBob2xlcyB0byBmcmFnbWVudCB0aGUgc2hhcmVkXG4rICogYHJlc3ZfbWFwYCB3aGlsZSBkcmFpbmluZyBgcmVzdi1cdTAwM2VyZWdpb25fY2FjaGVgIGZyb20gYSBzZXBhcmF0ZSBhZGRyZXNzXG4rICogc3BhY2UuXG4rICovXG4rI2RlZmluZSBfR05VX1NPVVJDRVxuKyNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NmY250bC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc2V0am1wLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzaWduYWwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGJvb2wuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGludC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkaW8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGxpYi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2N0aW1lLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N5cy9tbWFuLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvc3lzY2FsbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3lzL3dhaXQuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZhbGxvYy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbWVtZmQuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwiLi4va3NlbGZ0ZXN0LmhcIlxuKyNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4rXG4rLyogVHVuYWJsZXMgKG92ZXJyaWRhYmxlIHZpYSBhcmd2KS4gKi9cbitzdGF0aWMgdW5zaWduZWQgbG9uZyBmaWxlX3BhZ2VzID0gNjQ7XHQvKiBodWdlIHBhZ2VzIGJhY2tpbmcgdGhlIHNoYXJlZCBmaWxlICovXG4rc3RhdGljIHVuc2lnbmVkIGludCBucl9wcm9jcztcdFx0LyogMCA9XHUwMDNlIGF1dG8gKDIgKiBuciBvbmxpbmUgY3B1cykgKi9cbitzdGF0aWMgdW5zaWduZWQgaW50IGR1cmF0aW9uX3NlYyA9IDU7XHQvKiAtLXRyaWdnZXIgcnVuIHRpbWUgKi9cbitcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBodWdlX3BhZ2Vfc2l6ZTtcdC8qIGJ5dGVzICovXG4rc3RhdGljIGludCBtZW1mZCA9IC0xO1xuK3N0YXRpYyB2b2xhdGlsZSBpbnQgKnN0b3A7XHRcdC8qIHNoYXJlZCBhY3Jvc3MgZm9ya2VkIGNoaWxkcmVuICovXG4rXG4rLypcbisgKiBQZXItcHJvY2VzcyBTSUdCVVMgZXNjYXBlOiBhIGZhdWx0IGNhbiBmYWlsIChwb29sIGV4aGF1c3RlZCkgYW5kIHJhaXNlXG4rICogU0lHQlVTOyBqdW1wIGJhY2sgYW5kIGFiYW5kb24gdGhlIHJlc3Qgb2YgdGhlIGN1cnJlbnQgcmFuZ2UgaW5zdGVhZCBvZlxuKyAqIGR5aW5nLiAgRWFjaCBjaGlsZCBpcyBzaW5nbGUtdGhyZWFkZWQsIHNvIGEgZmlsZS1zY29wZSBidWZmZXIgaXMgZmluZS5cbisgKi9cbitzdGF0aWMgc2lnam1wX2J1ZiBzaWdidXNfZW52O1xuK1xuK3N0YXRpYyB2b2lkIHNpZ2J1c19oYW5kbGVyKGludCBzaWcpXG4re1xuK1x0c2lnbG9uZ2ptcChzaWdidXNfZW52LCAxKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgaW5zdGFsbF9zaWdidXNfaGFuZGxlcih2b2lkKVxuK3tcbitcdHN0cnVjdCBzaWdhY3Rpb24gc2EgPSB7XG4rXHRcdC5zYV9oYW5kbGVyID0gc2lnYnVzX2hhbmRsZXIsXG4rXHR9O1xuK1xuK1x0c2lnZW1wdHlzZXQoXHUwMDI2c2Euc2FfbWFzayk7XG4rXHRzaWdhY3Rpb24oU0lHQlVTLCBcdTAwMjZzYSwgTlVMTCk7XG4rfVxuK1xuK3N0YXRpYyBsb25nIHN5c19tZW1mZF9jcmVhdGUoY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgaW50IGZsYWdzKVxuK3tcbitcdHJldHVybiBzeXNjYWxsKF9fTlJfbWVtZmRfY3JlYXRlLCBuYW1lLCBmbGFncyk7XG4rfVxuK1xuKy8qXG4rICogTWFwIFtzdGFydCwgc3RhcnQrbGVuKSBvZiB0aGUgc2hhcmVkIGZpbGUgYW5kIGZhdWx0IGV2ZXJ5IHBhZ2UgaW4uXG4rICpcbisgKiBUaGUgbW1hcCgpIGRyaXZlcyBtbWFwLXRpbWUgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzIC1cdTAwM2UgcmVnaW9uX2NoZyAodGhlXG4rICogd2lkZS13aW5kb3cgdmljdGltIHdoZW4gdGhlIHJhbmdlIGlzIGZyYWdtZW50ZWQpICsgcmVnaW9uX2FkZC4gIFRoZVxuKyAqIHN1YnNlcXVlbnQgc3RvcmVzIGZhdWx0IHBhZ2VzIGluICp3aXRob3V0KiBpbm9kZV9sb2NrLCBkcml2aW5nIHRoZVxuKyAqIGxvY2stZnJlZSByZWdpb25fYWRkL3JlZ2lvbl9jaGcgdGhhdCBkcmFpbnMgcmVzdi1cdTAwM2VyZWdpb25fY2FjaGUgLS0gdGhlXG4rICogY29uY3VycmVuY3kgdGhlIGJ1Z2d5IGxvb3AgbmVlZHMgZnJvbSAqb3RoZXIqIHByb2Nlc3Nlcy5cbisgKi9cbitzdGF0aWMgdm9pZCBtYXBfYW5kX2ZhdWx0X3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgbGVuKVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgaTtcbitcdGNoYXIgKmFkZHI7XG4rXG4rXHRpZiAoIWxlbilcbitcdFx0cmV0dXJuO1xuK1x0YWRkciA9IG1tYXAoTlVMTCwgbGVuICogaHVnZV9wYWdlX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG4rXHRcdCAgICBNQVBfU0hBUkVELCBtZW1mZCwgc3RhcnQgKiBodWdlX3BhZ2Vfc2l6ZSk7XG4rXHRpZiAoYWRkciA9PSBNQVBfRkFJTEVEKVxuK1x0XHRyZXR1cm47XHRcdC8qIEVOT01FTSB1bmRlciBwb29sIHByZXNzdXJlIGlzIGZpbmUgKi9cbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGxlbjsgaSsrKSB7XG4rXHRcdGlmIChzaWdzZXRqbXAoc2lnYnVzX2VudiwgMSkgPT0gMClcbitcdFx0XHQqKHZvbGF0aWxlIGNoYXIgKikoYWRkciArIGkgKiBodWdlX3BhZ2Vfc2l6ZSkgPSAoY2hhcilpO1xuK1x0XHRlbHNlXG4rXHRcdFx0YnJlYWs7XHQvKiBTSUdCVVM6IHBvb2wgZXhoYXVzdGVkLCBzdG9wIGZhdWx0aW5nICovXG4rXHR9XG4rXHRtdW5tYXAoYWRkciwgbGVuICogaHVnZV9wYWdlX3NpemUpO1xuK31cbitcbisvKlxuKyAqIFJlbW92ZSBbc3RhcnQsIHN0YXJ0K2xlbikgaHVnZSBwYWdlcyBmcm9tIHRoZSBzaGFyZWQgZmlsZSwgZHJpdmluZ1xuKyAqIGh1Z2V0bGJmc19wdW5jaF9ob2xlIC1cdTAwM2UgcmVtb3ZlX2lub2RlX2h1Z2VwYWdlcyAtXHUwMDNlIHJlZ2lvbl9kZWwgZm9yIHRoZSBwYWdlc1xuKyAqIHRoYXQgd2VyZSBmYXVsdGVkIGluIGFib3ZlLiAgVGhpcyBmcmVlcyBwYWdlcyBiYWNrIHRvIHRoZSBwb29sIChib3VuZGluZ1xuKyAqIHJlc2lkZW5jeSkgYW5kIHJlLWZyYWdtZW50cyB0aGUgcmVzdl9tYXAgc28gbGF0ZXIgcmVnaW9uX2NoZyBjYWxscyBrZWVwXG4rICogbmVlZGluZyBtdWx0aXBsZSBlbnRyaWVzLlxuKyAqL1xuK3N0YXRpYyB2b2lkIHB1bmNoX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgbGVuKVxuK3tcbitcdGlmICghbGVuKVxuK1x0XHRyZXR1cm47XG4rXHRmYWxsb2NhdGUobWVtZmQsIEZBTExPQ19GTF9QVU5DSF9IT0xFIHwgRkFMTE9DX0ZMX0tFRVBfU0laRSxcbitcdFx0ICBzdGFydCAqIGh1Z2VfcGFnZV9zaXplLCBsZW4gKiBodWdlX3BhZ2Vfc2l6ZSk7XG4rfVxuK1xuKy8qXG4rICogT25lIGZvcmtlZCB3b3JrZXIuICBFYWNoIHdvcmtlciBpcyBzaW11bHRhbmVvdXNseSBhIHZpY3RpbSAoaXRzIHdpZGVcbisgKiBtbWFwLXRpbWUgcmVnaW9uX2NoZykgYW5kLCBmb3IgdGhlIG90aGVyIHdvcmtlcnMsIGEgbG9jay1mcmVlIGNhY2hlXG4rICogZHJhaW5lciAoaXRzIGZhdWx0cykgLS0gZXhhY3RseSB0aGUgc2hhcmVkLWlub2RlIG1hcCtmYXVsdCBjaHVybiBzZWVuIGluXG4rICogdGhlIG9yaWdpbmFsIGNyYXNoIChRRU1VIHByZWFsbG9jICsgU1BESy9CeXRlbGlnaHQgb24gb25lIGd1ZXN0LVJBTSBmaWxlKS5cbisgKi9cbitzdGF0aWMgdm9pZCBjaGlsZF93b3JrZXIodW5zaWduZWQgaW50IGlkKVxuK3tcbitcdHVuc2lnbmVkIGludCBzZWVkID0gaWQgKiAyNjU0NDM1NzYxdSBeICh1bnNpZ25lZCBpbnQpdGltZShOVUxMKSBeXG4rXHRcdFx0ICAgICgodW5zaWduZWQgaW50KWdldHBpZCgpIFx1MDAzY1x1MDAzYyAxKTtcbitcbitcdGluc3RhbGxfc2lnYnVzX2hhbmRsZXIoKTtcbitcbitcdHdoaWxlICghKnN0b3ApIHtcbitcdFx0dW5zaWduZWQgbG9uZyBzdGFydCA9IHJhbmRfcihcdTAwMjZzZWVkKSAlIGZpbGVfcGFnZXM7XG4rXHRcdHVuc2lnbmVkIGxvbmcgbGVuID0gMSArIHJhbmRfcihcdTAwMjZzZWVkKSAlIChmaWxlX3BhZ2VzIC0gc3RhcnQpO1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBCaWFzIHRvd2FyZCBtYXArZmF1bHQgKHZpY3RpbXMgYW5kIGRyYWluZXJzKTsgcHVuY2ggYVxuK1x0XHQgKiBxdWFydGVyIG9mIHRoZSB0aW1lIHRvIGtlZXAgdGhlIG1hcCBmcmFnbWVudGVkIGFuZCB0byBjYXBcbitcdFx0ICogaG93IG1hbnkgcGFnZXMgc3RheSByZXNpZGVudC5cbitcdFx0ICovXG4rXHRcdGlmIChyYW5kX3IoXHUwMDI2c2VlZCkgJSA0KVxuK1x0XHRcdG1hcF9hbmRfZmF1bHRfcmFuZ2Uoc3RhcnQsIGxlbik7XG4rXHRcdGVsc2VcbitcdFx0XHRwdW5jaF9yYW5nZShzdGFydCwgbGVuKTtcbitcdH1cbit9XG4rXG4rLypcbisgKiBTYWZlLCBzaW5nbGUtcHJvY2VzcyBmdW5jdGlvbmFsIGNoZWNrLiAgSXQgZnJhZ21lbnRzIHRoZSBzaGFyZWQgcmVzdl9tYXBcbisgKiAocmVzZXJ2YXRpb25zIGZvciBhIHNoYXJlZCBtYXBwaW5nIHBlcnNpc3Qgb24gdGhlIGlub2RlIGFmdGVyIG11bm1hcCkgc29cbisgKiB0aGF0IGEgc3Vic2VxdWVudCB3aG9sZS1maWxlIG1tYXAgbWFrZXMgcmVnaW9uX2NoZyBjb21wdXRlXG4rICogcmVnaW9uc19uZWVkZWQgXHUwMDNlIDEsIGZvcmNpbmcgYWxsb2NhdGVfZmlsZV9yZWdpb25fZW50cmllcyB0byBhbGxvY2F0ZSBhbmRcbisgKiBzcGxpY2Ugc2V2ZXJhbCBlbnRyaWVzLiAgVGhpcyBleGVyY2lzZXMgdGhlIGJ1Z2d5IGxpbmUsIGJ1dCB3aXRob3V0XG4rICogY29uY3VycmVuY3kgaXQgYWx3YXlzIG1ha2VzIGV4YWN0bHkgb25lIGxvb3AgaXRlcmF0aW9uLCBzbyBpdCBjYW5ub3QgdHJpcFxuKyAqIHRoZSByYWNlIGFuZCBpcyBzYWZlIG9uIGFueSBrZXJuZWwuICBSZXR1cm5zIDAgb24gc3VjY2Vzcy5cbisgKi9cbitzdGF0aWMgaW50IGZ1bmN0aW9uYWxfY2hlY2sodm9pZClcbit7XG4rXHR1bnNpZ25lZCBsb25nIGk7XG4rXHR2b2lkICphZGRyO1xuK1xuK1x0LyogUHVuY2ggZXZlcnl0aGluZyBzbyB3ZSBzdGFydCBmcm9tIGFuIGVtcHR5IHJlc3ZfbWFwLiAqL1xuK1x0cHVuY2hfcmFuZ2UoMCwgZmlsZV9wYWdlcyk7XG4rXG4rXHQvKiBSZXNlcnZlIGV2ZXJ5IG90aGVyIGh1Z2UgcGFnZSAtXHUwMDNlIH5maWxlX3BhZ2VzLzIgZGlzam9pbnQgcmVnaW9ucy4gKi9cbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGZpbGVfcGFnZXM7IGkgKz0gMilcbitcdFx0bWFwX2FuZF9mYXVsdF9yYW5nZShpLCAxKTtcbitcbitcdC8qXG4rXHQgKiBPbmUgbWFwcGluZyBzcGFubmluZyB0aGUgd2hvbGUgZmlsZSBtdXN0IGZpbGwgYWxsIHRoZSBob2xlcyBpbiBhXG4rXHQgKiBzaW5nbGUgcmVnaW9uX2NoZyAtXHUwMDNlIGEgbXVsdGktZW50cnkgcmVnaW9uX2NhY2hlIHJlZmlsbC5cbitcdCAqL1xuK1x0YWRkciA9IG1tYXAoTlVMTCwgZmlsZV9wYWdlcyAqIGh1Z2VfcGFnZV9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxuK1x0XHQgICAgTUFQX1NIQVJFRCwgbWVtZmQsIDApO1xuK1x0aWYgKGFkZHIgPT0gTUFQX0ZBSUxFRCkge1xuK1x0XHRrc2Z0X3ByaW50X21zZyhcIndob2xlLWZpbGUgbW1hcCBmYWlsZWQ6ICVzXFxuXCIsIHN0cmVycm9yKGVycm5vKSk7XG4rXHRcdHJldHVybiAtMTtcbitcdH1cbitcdG11bm1hcChhZGRyLCBmaWxlX3BhZ2VzICogaHVnZV9wYWdlX3NpemUpO1xuK1x0cHVuY2hfcmFuZ2UoMCwgZmlsZV9wYWdlcyk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBydW5fdHJpZ2dlcih2b2lkKVxuK3tcbitcdHBpZF90ICpwaWRzO1xuK1x0dW5zaWduZWQgaW50IGksIHN0YXJ0ZWQgPSAwO1xuK1xuK1x0c3RvcCA9IG1tYXAoTlVMTCwgc2l6ZW9mKCpzdG9wKSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcbitcdFx0ICAgIE1BUF9TSEFSRUQgfCBNQVBfQU5PTllNT1VTLCAtMSwgMCk7XG4rXHRpZiAoc3RvcCA9PSBNQVBfRkFJTEVEKVxuK1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJtbWFwKHN0b3AgZmxhZyk6ICVzXFxuXCIsIHN0cmVycm9yKGVycm5vKSk7XG4rXHQqc3RvcCA9IDA7XG4rXG4rXHRwaWRzID0gY2FsbG9jKG5yX3Byb2NzLCBzaXplb2YoKnBpZHMpKTtcbitcdGlmICghcGlkcylcbitcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiY2FsbG9jOiAlc1xcblwiLCBzdHJlcnJvcihlcnJubykpO1xuK1xuK1x0a3NmdF9wcmludF9tc2coXCJzdHJlc3NpbmcgJXUgcHJvY2Vzc2VzIGZvciAldXMgb24gJWx1IGh1Z2UgcGFnZXMgKCVsdSBNaUIpXFxuXCIsXG4rXHRcdCAgICAgICBucl9wcm9jcywgZHVyYXRpb25fc2VjLCBmaWxlX3BhZ2VzLFxuK1x0XHQgICAgICAgKGZpbGVfcGFnZXMgKiBodWdlX3BhZ2Vfc2l6ZSkgXHUwMDNlXHUwMDNlIDIwKTtcbitcdGtzZnRfcHJpbnRfbXNnKFwiV0FSTklORzogYSB2dWxuZXJhYmxlIGtlcm5lbCB3aWxsIHBhbmljIGhlcmVcXG5cIik7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9wcm9jczsgaSsrKSB7XG4rXHRcdHBpZF90IHBpZCA9IGZvcmsoKTtcbitcbitcdFx0aWYgKHBpZCBcdTAwM2MgMCkge1xuK1x0XHRcdGtzZnRfcHJpbnRfbXNnKFwiZm9yazogJXNcXG5cIiwgc3RyZXJyb3IoZXJybm8pKTtcbitcdFx0XHRicmVhaztcbitcdFx0fVxuK1x0XHRpZiAocGlkID09IDApIHtcbitcdFx0XHRmcmVlKHBpZHMpO1xuK1x0XHRcdGNoaWxkX3dvcmtlcihpKTtcbitcdFx0XHRfZXhpdCgwKTtcbitcdFx0fVxuK1x0XHRwaWRzW3N0YXJ0ZWQrK10gPSBwaWQ7XG4rXHR9XG4rXG4rXHRpZiAoIXN0YXJ0ZWQpIHtcbitcdFx0ZnJlZShwaWRzKTtcbitcdFx0bXVubWFwKCh2b2lkICopc3RvcCwgc2l6ZW9mKCpzdG9wKSk7XG4rXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIm5vIHdvcmtlciBwcm9jZXNzZXMgc3RhcnRlZFxcblwiKTtcbitcdH1cbitcbitcdHNsZWVwKGR1cmF0aW9uX3NlYyk7XG4rXHQqc3RvcCA9IDE7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBzdGFydGVkOyBpKyspXG4rXHRcdHdhaXRwaWQocGlkc1tpXSwgTlVMTCwgMCk7XG4rXHRmcmVlKHBpZHMpO1xuK1x0bXVubWFwKCh2b2lkICopc3RvcCwgc2l6ZW9mKCpzdG9wKSk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZvaWQgdXNhZ2UoY29uc3QgY2hhciAqcHJvZylcbit7XG4rXHRmcHJpbnRmKHN0ZGVycixcbitcdFx0XCJ1c2FnZTogJXMgWy0tdHJpZ2dlcl0gWy1zIGh1Z2VfcGFnZXNdIFstdCBwcm9jc10gWy1kIHNlY29uZHNdXFxuXCJcbitcdFx0XCIgIChkZWZhdWx0KSBydW4gYSBzYWZlIHNpbmdsZS1wcm9jZXNzIGZ1bmN0aW9uYWwgY2hlY2tcXG5cIlxuK1x0XHRcIiAgLS10cmlnZ2VyIGZvcmsrZmF1bHQgY29uY3VycmVudCByZXByb2R1Y2VyIChDQU4gUEFOSUMgQSBCVUdHWSBIT1NUKVxcblwiXG4rXHRcdFwiICAtcyAgaHVnZSBwYWdlcyBiYWNraW5nIHRoZSBzaGFyZWQgZmlsZSAoZGVmYXVsdCAlbHUpXFxuXCJcbitcdFx0XCIgIC10ICB3b3JrZXIgcHJvY2Vzc2VzIGZvciAtLXRyaWdnZXIgKGRlZmF1bHQgMiAqIG5yX2NwdXMpXFxuXCJcbitcdFx0XCIgIC1kICAtLXRyaWdnZXIgcnVuIHRpbWUgaW4gc2Vjb25kcyAoZGVmYXVsdCAldSlcXG5cIixcbitcdFx0cHJvZywgZmlsZV9wYWdlcywgZHVyYXRpb25fc2VjKTtcbit9XG4rXG4raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbit7XG4rXHRib29sIHRyaWdnZXIgPSBmYWxzZTtcbitcdGludCBpLCByZXQ7XG4rXG4rXHRmb3IgKGkgPSAxOyBpIFx1MDAzYyBhcmdjOyBpKyspIHtcbitcdFx0aWYgKCFzdHJjbXAoYXJndltpXSwgXCItLXRyaWdnZXJcIikpIHtcbitcdFx0XHR0cmlnZ2VyID0gdHJ1ZTtcbitcdFx0fSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbaV0sIFwiLXNcIikgXHUwMDI2XHUwMDI2IGkgKyAxIFx1MDAzYyBhcmdjKSB7XG4rXHRcdFx0ZmlsZV9wYWdlcyA9IHN0cnRvdWwoYXJndlsrK2ldLCBOVUxMLCAwKTtcbitcdFx0fSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbaV0sIFwiLXRcIikgXHUwMDI2XHUwMDI2IGkgKyAxIFx1MDAzYyBhcmdjKSB7XG4rXHRcdFx0bnJfcHJvY3MgPSBzdHJ0b3VsKGFyZ3ZbKytpXSwgTlVMTCwgMCk7XG4rXHRcdH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2W2ldLCBcIi1kXCIpIFx1MDAyNlx1MDAyNiBpICsgMSBcdTAwM2MgYXJnYykge1xuK1x0XHRcdGR1cmF0aW9uX3NlYyA9IHN0cnRvdWwoYXJndlsrK2ldLCBOVUxMLCAwKTtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHR1c2FnZShhcmd2WzBdKTtcbitcdFx0XHRyZXR1cm4gS1NGVF9GQUlMO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRrc2Z0X3ByaW50X2hlYWRlcigpO1xuK1x0a3NmdF9zZXRfcGxhbigxKTtcbitcbitcdGlmIChmaWxlX3BhZ2VzIFx1MDAzYyA0KVxuK1x0XHRmaWxlX3BhZ2VzID0gNDtcbitcdGlmICghbnJfcHJvY3MpIHtcbitcdFx0bG9uZyBjcHVzID0gc3lzY29uZihfU0NfTlBST0NFU1NPUlNfT05MTik7XG4rXG4rXHRcdG5yX3Byb2NzID0gY3B1cyBcdTAwM2UgMCA/ICh1bnNpZ25lZCBpbnQpY3B1cyAqIDIgOiA0O1xuK1x0fVxuK1x0aWYgKG5yX3Byb2NzIFx1MDAzYyAyKVxuK1x0XHRucl9wcm9jcyA9IDI7XG4rXG4rXHRodWdlX3BhZ2Vfc2l6ZSA9IGRlZmF1bHRfaHVnZV9wYWdlX3NpemUoKTtcbitcdGlmICghaHVnZV9wYWdlX3NpemUpXG4rXHRcdGtzZnRfZXhpdF9za2lwKFwibm8gaHVnZXRsYmZzIC8gaHVnZSBwYWdlIHNpemUgYXZhaWxhYmxlXFxuXCIpO1xuK1xuK1x0LypcbitcdCAqIEJvdGggbW9kZXMgZmF1bHQgcGFnZXMgaW4gKGZ1bmN0aW9uYWxfY2hlY2sgdG91Y2hlcyBldmVyeSBwYWdlIGl0XG4rXHQgKiBtYXBzLCBhbmQgLS10cmlnZ2VyJ3Mgd29ya2VycyBmYXVsdCB0aGUgcmFuZ2VzIHRoZXkgbWFwKSwgc28gdGhlXG4rXHQgKiB3aG9sZSBmaWxlIG1heSBiZWNvbWUgcmVzaWRlbnQ7IHJlcXVpcmUgdGhhdCBtYW55ICpmcmVlKiBodWdlIHBhZ2VzLFxuK1x0ICogbm90IGp1c3QgcmVzZXJ2YXRpb25zLlxuK1x0ICovXG4rXHRpZiAoaHVnZXRsYl9mcmVlX2RlZmF1bHRfcGFnZXMoKSBcdTAwM2MgZmlsZV9wYWdlcylcbitcdFx0a3NmdF9leGl0X3NraXAoXCJuZWVkICVsdSBmcmVlIGh1Z2UgcGFnZXMsIGhhdmUgJWx1IChzZXQgbnJfaHVnZXBhZ2VzKVxcblwiLFxuK1x0XHRcdCAgICAgICBmaWxlX3BhZ2VzLCBodWdldGxiX2ZyZWVfZGVmYXVsdF9wYWdlcygpKTtcbitcbitcdG1lbWZkID0gc3lzX21lbWZkX2NyZWF0ZShcImh1Z2V0bGJfcmVnaW9uX2NhY2hlX3JhY2VcIixcbitcdFx0XHRcdCBNRkRfSFVHRVRMQiB8XG4rXHRcdFx0XHQgKF9fYnVpbHRpbl9jdHpsKGh1Z2VfcGFnZV9zaXplKSBcdTAwM2NcdTAwM2MgTUZEX0hVR0VfU0hJRlQpKTtcbitcdGlmIChtZW1mZCBcdTAwM2MgMClcbitcdFx0a3NmdF9leGl0X3NraXAoXCJtZW1mZF9jcmVhdGUoTUZEX0hVR0VUTEIpOiAlc1xcblwiLFxuK1x0XHRcdCAgICAgICBzdHJlcnJvcihlcnJubykpO1xuK1x0aWYgKGZ0cnVuY2F0ZShtZW1mZCwgZmlsZV9wYWdlcyAqIGh1Z2VfcGFnZV9zaXplKSkge1xuK1x0XHRjbG9zZShtZW1mZCk7XG4rXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcImZ0cnVuY2F0ZTogJXNcXG5cIiwgc3RyZXJyb3IoZXJybm8pKTtcbitcdH1cbitcbitcdGlmICh0cmlnZ2VyKVxuK1x0XHRyZXQgPSBydW5fdHJpZ2dlcigpO1xuK1x0ZWxzZVxuK1x0XHRyZXQgPSBmdW5jdGlvbmFsX2NoZWNrKCk7XG4rXG4rXHRjbG9zZShtZW1mZCk7XG4rXG4rXHRpZiAocmV0KVxuK1x0XHRrc2Z0X3Rlc3RfcmVzdWx0X2ZhaWwoXCJodWdldGxiIHJlZ2lvbl9jYWNoZSByYWNlIGNoZWNrXFxuXCIpO1xuK1x0ZWxzZSBpZiAodHJpZ2dlcilcbitcdFx0a3NmdF90ZXN0X3Jlc3VsdF9wYXNzKFwic3Vydml2ZWQgY29uY3VycmVudCByZWdpb25fY2FjaGUgY2h1cm5cXG5cIik7XG4rXHRlbHNlXG4rXHRcdGtzZnRfdGVzdF9yZXN1bHRfcGFzcyhcIm11bHRpLWVudHJ5IHJlZ2lvbl9jYWNoZSByZWZpbGwgd29ya3NcXG5cIik7XG4rXG4rXHRrc2Z0X2ZpbmlzaGVkKCk7XG4rfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2hcbmluZGV4IDhjMjk2ZGVkZjA0NzRkLi4wY2I4NTcwNTY5MTVmNCAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaFxuQEAgLTI2Nyw2ICsyNjcsNyBAQCBDQVRFR09SWT1cImh1Z2V0bGJcIiBydW5fdGVzdCAuL2h1Z2V0bGItbWFkdmlzZVxuIENBVEVHT1JZPVwiaHVnZXRsYlwiIHJ1bl90ZXN0IC4vaHVnZXRsYl9kaW9cbiBDQVRFR09SWT1cImh1Z2V0bGJcIiBydW5fdGVzdCAuL2h1Z2V0bGJfZmF1bHRfYWZ0ZXJfbWFkdlxuIENBVEVHT1JZPVwiaHVnZXRsYlwiIHJ1bl90ZXN0IC4vaHVnZXRsYl9tYWR2X3ZzX21hcFxuK0NBVEVHT1JZPVwiaHVnZXRsYlwiIHJ1bl90ZXN0IC4vaHVnZXRsYl9yZWdpb25fY2FjaGVfcmFjZVxuIFxuIGlmIHRlc3Rfc2VsZWN0ZWQgXCJodWdldGxiXCI7IHRoZW5cbiBcdGVjaG8gXCJOT1RFOiBUaGVzZSBodWdldGxiIHRlc3RzIHByb3ZpZGUgbWluaW1hbCBjb3ZlcmFnZS4gIFVzZVwiXHQgIHwgdGFwX3ByZWZpeFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMjI6Mzg6MTUuMTgyMTM1MzZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTE5MDM4NTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtlcm5lbCBQYXRjaDogSHVnZVRMQiBNb2RpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdCB0b3VjaGVzIGBtbS9odWdldGxiLmNgIGFuZCBhbHNvIGFkZHMgYSBuZXcgc2VsZnRlc3QuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaXMgdGhpcyBzdWJ0bGUgbW9kaWZpY2F0aW9uIHdpdGhpbiBgYWxsb2NhdGVfZmlsZV9yZWdpb25fZW50cmllc2AuIFRoZXkndmUgc3dhcHBlZCBvdXQgYGxpc3Rfc3BsaWNlYCBmb3IgYGxpc3Rfc3BsaWNlX2luaXRgIGluIHRoYXQgZnVuY3Rpb24uIFRoYXQncyBhIHNpZ25pZmljYW50IGNoYW5nZSB0byBjb3JlIGtlcm5lbCBjb2RlLiBBbnl0aW1lIHdlIHNlZSBzb21ldGhpbmcgbGlrZSB0aGlzLCBhIGNoYW5nZSB0byBtZW1vcnkgbWFuYWdlbWVudCwgSHVnZVRMQiBpbiB0aGlzIGNhc2UsIG15IGZpcnN0IHRob3VnaHQgaXMgXCJmdXp6aW5nXCIuIFRoaXMgbmVlZHMgYSB0aG9yb3VnaCBleGFtaW5hdGlvbi5cblxuTGV0J3MgcXVpY2tseSB2ZXJpZnkgdGhhdCB0aGUgYGFsbG9jYXRlX2ZpbGVfcmVnaW9uX2VudHJpZXNgIGZ1bmN0aW9uIGlzIGluZGVlZCB0aGUgbG9jYXRpb24gb2YgdGhlIGNoYW5nZSwgYXMgaW5kaWNhdGVkIGJ5IHRoZSBkaWZmLiBJJ2xsIGZpcmUgdXAgYGdyZXBwZXJgIGFuZCBkb3VibGUtY2hlY2ssIGJ1dCBJJ20gcHJldHR5IHN1cmUgdGhhdCdzIHRoZSBvbmUuIExldCdzIG1ha2Ugc3VyZSBiZWZvcmUgd2UgbW92ZSBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjE1OCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDIyOjM4OjIwLjMwMTE3NjQ1MVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjM4MjY0MDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWxsb2NhdGVfZmlsZV9yZWdpb25fZW50cmllc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9odWdldGxiLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZXRsYi5jPTU5ND1zdGF0aWMgbG9uZyBhZGRfcmVzZXJ2YXRpb25faW5fcmFuZ2Uoc3RydWN0IHJlc3ZfbWFwICpyZXN2LCBsb25nIGYsIGxvbmcgdCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy02NTUtICovXFxubW0vaHVnZXRsYi5jOjY1NjpzdGF0aWMgaW50IGFsbG9jYXRlX2ZpbGVfcmVnaW9uX2VudHJpZXMoc3RydWN0IHJlc3ZfbWFwICpyZXN2LFxcbm1tL2h1Z2V0bGIuYy02NTctXFx0XFx0XFx0XFx0XFx0aW50IHJlZ2lvbnNfbmVlZGVkKVxcbi0tXFxubW0vaHVnZXRsYi5jPTcyNz1zdGF0aWMgbG9uZyByZWdpb25fYWRkKHN0cnVjdCByZXN2X21hcCAqcmVzdiwgbG9uZyBmLCBsb25nIHQsXFxuLS1cXG5tbS9odWdldGxiLmMtNzU3LVxcbm1tL2h1Z2V0bGIuYzo3NTg6XFx0XFx0aWYgKGFsbG9jYXRlX2ZpbGVfcmVnaW9uX2VudHJpZXMoXFxubW0vaHVnZXRsYi5jLTc1OS1cXHRcXHRcXHQgICAgcmVzdiwgYWN0dWFsX3JlZ2lvbnNfbmVlZGVkIC0gaW5fcmVnaW9uc19uZWVkZWQpKSB7XFxuLS1cXG5tbS9odWdldGxiLmM9Nzk0PXN0YXRpYyBsb25nIHJlZ2lvbl9jaGcoc3RydWN0IHJlc3ZfbWFwICpyZXN2LCBsb25nIGYsIGxvbmcgdCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy04MDctXFxubW0vaHVnZXRsYi5jOjgwODpcXHRpZiAoYWxsb2NhdGVfZmlsZV9yZWdpb25fZW50cmllcyhyZXN2LCAqb3V0X3JlZ2lvbnNfbmVlZGVkKSlcXG5tbS9odWdldGxiLmMtODA5LVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbi0tXFxubW0vaHVnZXRsYi5jPTUxNDE9dm9pZCBfX3VubWFwX2h1Z2VwYWdlX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZXRsYi5jLTUyNzItXFx0XFx0XFx0aWYgKHJjIFxcdTAwM2MgMClcXG5tbS9odWdldGxiLmM6NTI3MzpcXHRcXHRcXHRcXHQvKiBQcmVzc3VtYWJseSBhbGxvY2F0ZV9maWxlX3JlZ2lvbl9lbnRyaWVzIGZhaWxlZFxcbm1tL2h1Z2V0bGIuYy01Mjc0LVxcdFxcdFxcdFxcdCAqIHRvIGFsbG9jYXRlIGEgZmlsZV9yZWdpb24gc3RydWN0LiBDbGVhclxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QyMjozODoyMC40MjUwMDg3MzJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDI3MzAyMDE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYGFsbG9jYXRlX2ZpbGVfcmVnaW9uX2VudHJpZXNgIEZ1bmN0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgYWxsb2NhdGVfZmlsZV9yZWdpb25fZW50cmllc2AgZnVuY3Rpb24g4oCTIHNlZW1zIGltcG9ydGFudCwgYW5kIEkgY2FuIHNlZSBpdCdzIGNoYW5nZWQgaW4gYG1tL2h1Z2V0bGIuY2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IGFzc2VzcyBhbnkgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIFdpdGggSHVnZVRMQiBjaGFuZ2VzLCBgQ09ORklHX0hVR0VUTEJGU2AgYW5kIGBDT05GSUdfSFVHRVRMQl9QQUdFYCBhcmUgdGhlIG9idmlvdXMgb25lcyB0byBjaGVjaywgYnV0IEkgY2FuJ3QgcmVseSBvbiBtZW1vcnkgYWxvbmUuIEp1c3QgdG8gYmUgc3VyZSwgSSBzaG91bGQgdmVyaWZ5IHRoZSBidWlsZCBjb25maWd1cmF0aW9ucyByZWxhdGVkIHRvIHRoaXMgYXJlYS4gSSdsbCB0YWtlIGEgbG9vayBhdCBgbW0vTWFrZWZpbGVgIHRvIGNvbmZpcm0gd2hpY2ggc2V0dGluZ3MgYXJlIHJlbGV2YW50IHRvIHRoaXMgZnVuY3Rpb24gYW5kIHRoZSBtb2R1bGUgaXQgbGl2ZXMgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwODUsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QyMjozODoyMy40NTIzMTI5NzhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODUzNDM4MzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHVnZXRsYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT04MD1vYmotJChDT05GSUdfSEFTX0RNQSlcXHQrPSBkbWFwb29sLm9cXG5tbS9NYWtlZmlsZTo4MTpvYmotJChDT05GSUdfSFVHRVRMQkZTKVxcdCs9IGh1Z2V0bGIubyBodWdldGxiX3N5c2ZzLm8gaHVnZXRsYl9zeXNjdGwub1xcbm1tL01ha2VmaWxlLTgyLWlmZGVmIENPTkZJR19DTUFcXG5tbS9NYWtlZmlsZTo4MzpvYmotJChDT05GSUdfSFVHRVRMQkZTKVxcdCs9IGh1Z2V0bGJfY21hLm9cXG5tbS9NYWtlZmlsZS04NC1lbmRpZlxcbm1tL01ha2VmaWxlOjg1Om9iai0kKENPTkZJR19IVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUClcXHQrPSBodWdldGxiX3ZtZW1tYXAub1xcbm1tL01ha2VmaWxlLTg2LW9iai0kKENPTkZJR19OVU1BKSBcXHQrPSBtZW1wb2xpY3kub1xcbi0tXFxubW0vTWFrZWZpbGU9MTA4PWVuZGlmXFxubW0vTWFrZWZpbGU6MTA5Om9iai0kKENPTkZJR19DR1JPVVBfSFVHRVRMQikgKz0gaHVnZXRsYl9jZ3JvdXAub1xcbm1tL01ha2VmaWxlLTExMC1vYmotJChDT05GSUdfR1VQX1RFU1QpICs9IGd1cF90ZXN0Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMjI6Mzg6MjMuNTM3NjY0NTcyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM0MTkxMDM5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gSHVnZVRMQiBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIHNvIEkgc2VlIGBDT05GSUdfSFVHRVRMQkZTYCBtZW50aW9uZWQsIHRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIEJ1dCwgaGFuZyBvbiwgdGhlcmUncyBhbHNvIGBDT05GSUdfSFVHRVRMQl9QQUdFYCDigJMgdGhvc2UgYXJlIGRlZmluaXRlbHkgaW50ZXJ0d2luZWQuIEkgbmVlZCB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlcy4gTGV0J3Mgc2VlLi4uIGBpbml0L0tjb25maWdgIGlzIGEgcG9zc2liaWxpdHksIGJ1dCBwcm9iYWJseSBub3QgdGhlIGJlc3Qgc3BvdCBmb3IgZmlsZSBzeXN0ZW0gb3B0aW9ucywgc28gbGV0J3Mgc3RhcnQgd2l0aCBgZnMvS2NvbmZpZ2AuIE9yIG1heWJlIGl0J3MgbWVtb3J5IG1hbmFnZW1lbnQsIHNvIGBtbS9LY29uZmlnYCBtaWdodCBiZSB0aGUgcGxhY2UgdG8gZ28gZmlyc3QuIEkga25vdyBJIHdpbGwgZmluZCBpdCB0aGVyZS4gSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIG9wdGlvbnMgYW5kIGdldCB0aGUgZGV0YWlscy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzU4OCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDIyOjM4OjI2Ljg3OTU3NzI0NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzk0NzU1Nzg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBIVUdFVExCRlNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvS2NvbmZpZz0yNDc9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTXFxuLS1cXG5mcy9LY29uZmlnLTI0OS1cXG5mcy9LY29uZmlnOjI1MDptZW51Y29uZmlnIEhVR0VUTEJGU1xcbmZzL0tjb25maWctMjUxLVxcdGJvb2wgXFxcIkh1Z2VUTEIgZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMjI6Mzg6MjkuNjc0MzM4MTI5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjU5NjIyNDg2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQXNzZXNzaW5nIEh1Z2UgUGFnZSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gdGhlIGluaXRpYWwgcHJvbXB0IGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbiBleHBlcnQgaW4gdGhpcyBhcmVhLCBpcyB0byB6ZXJvIGluIG9uIGBjb25maWcgSFVHRVRMQl9QQUdFYC4gVGhhdCdzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQgd2hlbiBpdCBjb21lcyB0byBodWdlIHBhZ2UgaW1wbGVtZW50YXRpb24gYXQgYSBrZXJuZWwgbGV2ZWwuIFRoaXMgaXMgdGhlIGx5bmNocGluIOKAkyB0aGUgbWFzdGVyIHN3aXRjaCBpZiB5b3Ugd2lsbCDigJMgZm9yIHdoZXRoZXIgb3Igbm90IGh1Z2UgcGFnZXMgYXJlIGV2ZW4gZW5hYmxlZCBhbmQgaG93IHRoZSBzeXN0ZW0gZXZlbiBsb29rcyBmb3IgbGFyZ2UgbWVtb3J5IGJsb2Nrcy4gSXQncyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIGFueSBzZXJpb3VzIGludmVzdGlnYXRpb24sIGJlIGl0IHRyb3VibGVzaG9vdGluZyBwZXJmb3JtYW5jZSBpc3N1ZXMsIHZlcmlmeWluZyBhIHNldHVwLCBvciBjb25maXJtaW5nIGEgYnVpbGQgY29uZmlndXJhdGlvbi4gSSdsbCBuZWVkIHRvIGtub3cgaXRzIHN0YXRlIHRvIGRldGVybWluZSBuZXh0IHN0ZXBzLiBJJ20gZ29pbmcgdG8gZGV0ZXJtaW5lIHdoYXQgdGhhdCBtZWFucyBmb3IgcGVyZm9ybWFuY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5MTksIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QyMjozODozMi4yNzA1NjU2MjdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NTAzOTAwNzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEhVR0VUTEJfUEFHRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3NoL21tL0tjb25maWc9MTU4PWNob2ljZVxcbi0tXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE2My1cXG5hcmNoL3NoL21tL0tjb25maWc6MTY0OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV82NEtcXG5hcmNoL3NoL21tL0tjb25maWctMTY1LVxcdGJvb2wgXFxcIjY0a0JcXFwiXFxuLS1cXG5hcmNoL3NoL21tL0tjb25maWctMTY3LVxcbmFyY2gvc2gvbW0vS2NvbmZpZzoxNjg6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzI1NktcXG5hcmNoL3NoL21tL0tjb25maWctMTY5LVxcdGJvb2wgXFxcIjI1NmtCXFxcIlxcbi0tXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE3MS1cXG5hcmNoL3NoL21tL0tjb25maWc6MTcyOmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV8xTUJcXG5hcmNoL3NoL21tL0tjb25maWctMTczLVxcdGJvb2wgXFxcIjFNQlxcXCJcXG5hcmNoL3NoL21tL0tjb25maWctMTc0LVxcbmFyY2gvc2gvbW0vS2NvbmZpZzoxNzU6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzRNQlxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzYtXFx0Ym9vbCBcXFwiNE1CXFxcIlxcbi0tXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE3OC1cXG5hcmNoL3NoL21tL0tjb25maWc6MTc5OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV82NE1CXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE4MC1cXHRib29sIFxcXCI2NE1CXFxcIlxcbi0tXFxuZnMvS2NvbmZpZz0yNjI9aWYgSFVHRVRMQkZTXFxuZnMvS2NvbmZpZzoyNjM6Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQX0RFRkFVTFRfT05cXG5mcy9LY29uZmlnLTI2NC1cXHRib29sIFxcXCJIdWdlVExCIFZtZW1tYXAgT3B0aW1pemF0aW9uIChIVk8pIGRlZmF1bHRzIHRvIG9uXFxcIlxcbi0tXFxuZnMvS2NvbmZpZz0yNzE9ZW5kaWYgIyBIVUdFVExCRlNcXG5mcy9LY29uZmlnLTI3Mi1cXG5mcy9LY29uZmlnOjI3Mzpjb25maWcgSFVHRVRMQl9QQUdFXFxuZnMvS2NvbmZpZy0yNzQtXFx0ZGVmX2Jvb2wgSFVHRVRMQkZTXFxuLS1cXG5mcy9LY29uZmlnLTI3Ni1cXG5mcy9LY29uZmlnOjI3Nzpjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBcXG5mcy9LY29uZmlnLTI3OC1cXHRkZWZfYm9vbCBIVUdFVExCX1BBR0VcXG4tLVxcbm1tL0tjb25maWc9NzA2PWNvbmZpZyBBUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OXFxuLS1cXG5tbS9LY29uZmlnLTcwOC1cXG5tbS9LY29uZmlnOjcwOTpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfVkFSSUFCTEVcXG5tbS9LY29uZmlnLTcxMC1cXHRkZWZfYm9vbCBuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDIyOjM4OjM0LjgyMDk2MDI2OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDY5NDU2Njk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgaHVnZXRsYmZzIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBmb2N1c2VkIG9uIGBIVUdFVExCRlNgLCB0aGF0J3MgdGhlIGtleSBjb25maWd1cmF0aW9uIHNldHRpbmcgaGVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhlIGZ1bmN0aW9uIGBhbGxvY2F0ZV9maWxlX3JlZ2lvbl9lbnRyaWVzYC4gSXQgbG9va3MgbGlrZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBgcmVnaW9uX2FkZGAgYW5kIGByZWdpb25fY2hnYCwgd2hpY2ggSSBpbW1lZGlhdGVseSByZWNvZ25pemUgYXMgY3JpdGljYWwgcm91dGluZXMgZGVhbGluZyB3aXRoIGh1Z2V0bGJmcyByZXNlcnZhdGlvbnMuIEkga25vdyB0aGVzZSBhcmUgcmVsYXRlZCB0byBtZW1vcnkgYWxsb2NhdGlvbnMgYW5kIG1hbmFnZW1lbnQgd2l0aGluIHRoZSBodWdldGxiZnMuXG5cblRoZSBidWcgaXMgaW4gYGFsbG9jYXRlX2ZpbGVfcmVnaW9uX2VudHJpZXNgLCBhbmQgaXQgc2VlbXMgbGlrZSB0aGV5IHdlcmUgdXNpbmcgYGxpc3Rfc3BsaWNlYCBpbnN0ZWFkIG9mIGBsaXN0X3NwbGljZV9pbml0YC4gVGhhdCdzIGEgcmVkIGZsYWchIFVzaW5nIGBsaXN0X3NwbGljZWAgd2l0aG91dCBpbml0aWFsaXppbmcgdGhlIGRlc3RpbmF0aW9uIGxpc3QgY2FuIGxlYXZlIGBhbGxvY2F0ZWRfcmVnaW9uc2Ag4oCTIGEgbG9jYWwgdmFyaWFibGUsIEkgbm93IHJlbWVtYmVyIOKAkyBpbiBhbiB1bmRlZmluZWQgc3RhdGUuIEl0cyBwb2ludGVycywgc3BlY2lmaWNhbGx5IGBuZXh0YCBhbmQgYHByZXZgLCB3b3VsZCBzdGlsbCBiZSByZWZlcmVuY2luZyB0aGUgb2xkIGVsZW1lbnRzIHRoYXQgd2VyZSBzcGxpY2VkICppbnRvKiBgcmVzdi1cdTAwM2VyZWdpb25fY2FjaGVgLiBUaGlzIGNvdWxkIGxlYWQgdG8gYSB0ZXh0Ym9vayBjYXNlIG9mIGxpc3QgY29ycnVwdGlvbiBkb3duIHRoZSBsaW5lIGlmIGBhbGxvY2F0ZWRfcmVnaW9uc2AgaXMgcmUtdXNlZC4gVGhpcyBuZWVkcyBhIGRlZXBlciBkaXZlLCBzbyBsZXQncyBjaGVjayBvdXQgdGhlIGNvZGUgb2YgYGFsbG9jYXRlX2ZpbGVfcmVnaW9uX2VudHJpZXNgIGRpcmVjdGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NzEzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDIyOjM4OjM4Ljg5MDQxOTY1OFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzI0MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vaHVnZXRsYi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY1NixcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDY1NjpcXHRzdGF0aWMgaW50IGFsbG9jYXRlX2ZpbGVfcmVnaW9uX2VudHJpZXMoc3RydWN0IHJlc3ZfbWFwICpyZXN2LFxcbiA2NTc6XFx0XFx0XFx0XFx0XFx0XFx0aW50IHJlZ2lvbnNfbmVlZGVkKVxcbiA2NTg6XFx0XFx0X19tdXN0X2hvbGQoXFx1MDAyNnJlc3YtXFx1MDAzZWxvY2spXFxuIDY1OTpcXHR7XFxuIDY2MDpcXHRcXHRMSVNUX0hFQUQoYWxsb2NhdGVkX3JlZ2lvbnMpO1xcbiA2NjE6XFx0XFx0aW50IHRvX2FsbG9jYXRlID0gMCwgaSA9IDA7XFxuIDY2MjpcXHRcXHRzdHJ1Y3QgZmlsZV9yZWdpb24gKnRyZyA9IE5VTEwsICpyZyA9IE5VTEw7XFxuIDY2MzpcXHRcXG4gNjY0OlxcdFxcdFZNX0JVR19PTihyZWdpb25zX25lZWRlZCBcXHUwMDNjIDApO1xcbiA2NjU6XFx0XFxuIDY2NjpcXHRcXHQvKlxcbiA2Njc6XFx0XFx0ICogQ2hlY2sgZm9yIHN1ZmZpY2llbnQgZGVzY3JpcHRvcnMgaW4gdGhlIGNhY2hlIHRvIGFjY29tbW9kYXRlXFxuIDY2ODpcXHRcXHQgKiB0aGUgbnVtYmVyIG9mIGluIHByb2dyZXNzIGFkZCBvcGVyYXRpb25zIHBsdXMgcmVnaW9uc19uZWVkZWQuXFxuIDY2OTpcXHRcXHQgKlxcbiA2NzA6XFx0XFx0ICogVGhpcyBpcyBhIHdoaWxlIGxvb3AgYmVjYXVzZSB3aGVuIHdlIGRyb3AgdGhlIGxvY2ssIHNvbWUgb3RoZXIgY2FsbFxcbiA2NzE6XFx0XFx0ICogdG8gcmVnaW9uX2FkZCBvciByZWdpb25fZGVsIG1heSBoYXZlIGNvbnN1bWVkIHNvbWUgcmVnaW9uX2VudHJpZXMsXFxuIDY3MjpcXHRcXHQgKiBzbyB3ZSBrZWVwIGxvb3BpbmcgaGVyZSB1bnRpbCB3ZSBmaW5hbGx5IGhhdmUgZW5vdWdoIGVudHJpZXMgZm9yXFxuIDY3MzpcXHRcXHQgKiAoYWRkc19pbl9wcm9ncmVzcyArIHJlZ2lvbnNfbmVlZGVkKS5cXG4gNjc0OlxcdFxcdCAqL1xcbiA2NzU6XFx0XFx0d2hpbGUgKHJlc3YtXFx1MDAzZXJlZ2lvbl9jYWNoZV9jb3VudCBcXHUwMDNjXFxuIDY3NjpcXHRcXHQgICAgICAgKHJlc3YtXFx1MDAzZWFkZHNfaW5fcHJvZ3Jlc3MgKyByZWdpb25zX25lZWRlZCkpIHtcXG4gNjc3OlxcdFxcdFxcdHRvX2FsbG9jYXRlID0gcmVzdi1cXHUwMDNlYWRkc19pbl9wcm9ncmVzcyArIHJlZ2lvbnNfbmVlZGVkIC1cXG4gNjc4OlxcdFxcdFxcdFxcdCAgICAgIHJlc3YtXFx1MDAzZXJlZ2lvbl9jYWNoZV9jb3VudDtcXG4gNjc5OlxcdFxcbiA2ODA6XFx0XFx0XFx0LyogQXQgdGhpcyBwb2ludCwgd2Ugc2hvdWxkIGhhdmUgZW5vdWdoIGVudHJpZXMgaW4gdGhlIGNhY2hlXFxuIDY4MTpcXHRcXHRcXHQgKiBmb3IgYWxsIHRoZSBleGlzdGluZyBhZGRzX2luX3Byb2dyZXNzLiBXZSBzaG91bGQgb25seSBiZVxcbiA2ODI6XFx0XFx0XFx0ICogbmVlZGluZyB0byBhbGxvY2F0ZSBmb3IgcmVnaW9uc19uZWVkZWQuXFxuIDY4MzpcXHRcXHRcXHQgKi9cXG4gNjg0OlxcdFxcdFxcdFZNX0JVR19PTihyZXN2LVxcdTAwM2VyZWdpb25fY2FjaGVfY291bnQgXFx1MDAzYyByZXN2LVxcdTAwM2VhZGRzX2luX3Byb2dyZXNzKTtcXG4gNjg1OlxcdFxcbiA2ODY6XFx0XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNnJlc3YtXFx1MDAzZWxvY2spO1xcbiA2ODc6XFx0XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHRvX2FsbG9jYXRlOyBpKyspIHtcXG4gNjg4OlxcdFxcdFxcdFxcdHRyZyA9IGttYWxsb2Nfb2JqKCp0cmcpO1xcbiA2ODk6XFx0XFx0XFx0XFx0aWYgKCF0cmcpXFxuIDY5MDpcXHRcXHRcXHRcXHRcXHRnb3RvIG91dF9vZl9tZW1vcnk7XFxuIDY5MTpcXHRcXHRcXHRcXHRsaXN0X2FkZChcXHUwMDI2dHJnLVxcdTAwM2VsaW5rLCBcXHUwMDI2YWxsb2NhdGVkX3JlZ2lvbnMpO1xcbiA2OTI6XFx0XFx0XFx0fVxcbiA2OTM6XFx0XFxuIDY5NDpcXHRcXHRcXHRzcGluX2xvY2soXFx1MDAyNnJlc3YtXFx1MDAzZWxvY2spO1xcbiA2OTU6XFx0XFxuIDY5NjpcXHRcXHRcXHRsaXN0X3NwbGljZV9pbml0KFxcdTAwMjZhbGxvY2F0ZWRfcmVnaW9ucywgXFx1MDAyNnJlc3YtXFx1MDAzZXJlZ2lvbl9jYWNoZSk7XFxuIDY5NzpcXHRcXHRcXHRyZXN2LVxcdTAwM2VyZWdpb25fY2FjaGVfY291bnQgKz0gdG9fYWxsb2NhdGU7XFxuIDY5ODpcXHRcXHR9XFxuIDY5OTpcXHRcXG4gNzAwOlxcdFxcdHJldHVybiAwO1xcbiA3MDE6XFx0XFxuIDcwMjpcXHRvdXRfb2ZfbWVtb3J5OlxcbiA3MDM6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJnLCB0cmcsIFxcdTAwMjZhbGxvY2F0ZWRfcmVnaW9ucywgbGluaykge1xcbiA3MDQ6XFx0XFx0XFx0bGlzdF9kZWwoXFx1MDAyNnJnLVxcdTAwM2VsaW5rKTtcXG4gNzA1OlxcdFxcdFxcdGtmcmVlKHJnKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMjI6Mzg6MzguODkwNzU0Nzg4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzMjI0Njc3MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQnVnIERpc2NvdmVyeSBhbmQgRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkganVzdCBqdW1wZWQgb3V0IGF0IG1lLiBJIHNlZSBgYWxsb2NhdGVkX3JlZ2lvbnNgIGlzIGEgbG9jYWwgdmFyaWFibGUsIGJ1dCBpdCdzICppbnNpZGUqIHRoaXMgYHdoaWxlYCBsb29wIOKAkyB0aGF0J3MgYSByZWQgZmxhZyEgVGhlbiBJIGRvdWJsZS1jaGVjayBhbmQgc2VlIGBMSVNUX0hFQUQoYWxsb2NhdGVkX3JlZ2lvbnMpO2AgaXMgZGVjbGFyZWQgKm91dHNpZGUqIHRoZSBsb29wLiBBaGEhIFRoZSBsb29wIHJldXNlcyBgYWxsb2NhdGVkX3JlZ2lvbnNgLiBJZiBgbGlzdF9zcGxpY2VgIGhhZCBiZWVuIHVzZWQsIGl0IHdvdWxkIGhhdmUgcHJldmVudGVkIHJlLWluaXRpYWxpemF0aW9uLiBCdXQgd2l0aG91dCBpdCwgb24gdGhlIHNlY29uZCBpdGVyYXRpb24sIGBsaXN0X2FkZGAgaXMgZ29pbmcgdG8gYmUgY2FsbGVkIG9uIGEgY29ycnVwdGVkIGBhbGxvY2F0ZWRfcmVnaW9uc2AgbGlzdCBoZWFkLiBUaGF0J3MgYSB0ZXh0Ym9vayBleGFtcGxlIG9mIGEgYnVnLCBhbmQgdGhhbmtmdWxseSwgaXQgbG9va3MgbGlrZSBpdCB3YXMgZml4ZWQuXG5cbk5vdyB0aGF0IEkndmUgc3BvdHRlZCB0aGF0LCBJJ20gdGhpbmtpbmcgYWJvdXQgZnV6emluZy4gVGhlIGBhbGxvY2F0ZV9maWxlX3JlZ2lvbl9lbnRyaWVzYCBmdW5jdGlvbiBsb29rcyBsaWtlIGEgcHJpbWUgY2FuZGlkYXRlIOKAkyBpdCdzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRoYXQgY291bGQgYmVuZWZpdCBmcm9tIGJlaW5nIHRlc3RlZCBtb3JlIHJpZ29yb3VzbHkuIExldCdzIG1ha2UgdGhhdCBhIGZvY3VzLiBJIHNob3VsZCBwcm9iYWJseSBhbHNvIHRhcmdldCBvdGhlciByZWxhdGVkIGZ1bmN0aW9ucy4gRnVuY3Rpb25zIGxpa2UgYHJlZ2lvbl9hZGRgLCBgcmVnaW9uX2NoZ2AsIGFuZCBgcmVnaW9uX2RlbGAgd291bGQgYWxsIG5lZWQgdG8gYmUgZnV6emVkIGFzIHdlbGwuIEknbGwgYWRkIHRoZW0gdG8gYEZvY3VzU3ltYm9sc2AuXG5cbkxldCdzIGRvIGEgcXVpY2sgc2NhbiB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZyByZWxhdGVkIHRvIHRoZSBgRm9jdXNTeW1ib2xzYC4gTG9va3MgbGlrZSBJIGdvdCB0aGVtIGFsbDsgYHJlZ2lvbl9hZGRgLCBgcmVnaW9uX2NoZ2AsIGByZWdpb25fZGVsYCwgYGFsbG9jYXRlX2ZpbGVfcmVnaW9uX2VudHJpZXNgLiBOb3cgSSdsbCBxdWlja2x5IGNoZWNrIGlmIGByZWdpb25fYWRkYCBhbmQgYHJlZ2lvbl9jaGdgIGFyZSBzdGF0aWMgZnVuY3Rpb25zLCBqdXN0IHRvIGdldCBhIGdvb2Qgc2Vuc2Ugb2YgdGhlIHNjb3BlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5OTgwLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMjI6Mzg6NDQuMjEzMjI1NzM1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTc4NjkwMzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVnaW9uX2FkZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9odWdldGxiLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZXRsYi5jPTY1Nj1zdGF0aWMgaW50IGFsbG9jYXRlX2ZpbGVfcmVnaW9uX2VudHJpZXMoc3RydWN0IHJlc3ZfbWFwICpyZXN2LFxcbi0tXFxubW0vaHVnZXRsYi5jLTY3MC1cXHQgKiBUaGlzIGlzIGEgd2hpbGUgbG9vcCBiZWNhdXNlIHdoZW4gd2UgZHJvcCB0aGUgbG9jaywgc29tZSBvdGhlciBjYWxsXFxubW0vaHVnZXRsYi5jOjY3MTpcXHQgKiB0byByZWdpb25fYWRkIG9yIHJlZ2lvbl9kZWwgbWF5IGhhdmUgY29uc3VtZWQgc29tZSByZWdpb25fZW50cmllcyxcXG5tbS9odWdldGxiLmMtNjcyLVxcdCAqIHNvIHdlIGtlZXAgbG9vcGluZyBoZXJlIHVudGlsIHdlIGZpbmFsbHkgaGF2ZSBlbm91Z2ggZW50cmllcyBmb3JcXG4tLVxcbm1tL2h1Z2V0bGIuYy03MTQtICogY2FsbCB0byByZWdpb25fY2hnIHdpdGggdGhlIHNhbWUgcmFuZ2UsIGJ1dCBpbiBzb21lIGNhc2VzIHRoZSBjYWNoZSB3aWxsIG5vdFxcbm1tL2h1Z2V0bGIuYzo3MTU6ICogaGF2ZSBzdWZmaWNpZW50IGVudHJpZXMgZHVlIHRvIHJhY2VzIHdpdGggb3RoZXIgY29kZSBkb2luZyByZWdpb25fYWRkIG9yXFxubW0vaHVnZXRsYi5jLTcxNi0gKiByZWdpb25fZGVsLiAgVGhlIGV4dHJhIG5lZWRlZCBlbnRyaWVzIHdpbGwgYmUgYWxsb2NhdGVkLlxcbi0tXFxubW0vaHVnZXRsYi5jLTcyMi0gKiB0aGlzIG9wZXJhdGlvbiBhbmQgd2Ugd2VyZSBub3QgYWJsZSB0byBhbGxvY2F0ZSwgaXQgcmV0dXJucyAtRU5PTUVNLlxcbm1tL2h1Z2V0bGIuYzo3MjM6ICogcmVnaW9uX2FkZCBvZiByZWdpb25zIG9mIGxlbmd0aCAxIG5ldmVyIGFsbG9jYXRlIGZpbGVfcmVnaW9ucyBhbmQgY2Fubm90XFxubW0vaHVnZXRsYi5jOjcyNDogKiBmYWlsOyByZWdpb25fY2hnIHdpbGwgYWx3YXlzIGFsbG9jYXRlIGF0IGxlYXN0IDEgZW50cnkgYW5kIGEgcmVnaW9uX2FkZCBmb3JcXG5tbS9odWdldGxiLmMtNzI1LSAqIDEgcGFnZSB3aWxsIG9ubHkgcmVxdWlyZSBhdCBtb3N0IDEgZW50cnkuXFxubW0vaHVnZXRsYi5jLTcyNi0gKi9cXG5tbS9odWdldGxiLmM6NzI3OnN0YXRpYyBsb25nIHJlZ2lvbl9hZGQoc3RydWN0IHJlc3ZfbWFwICpyZXN2LCBsb25nIGYsIGxvbmcgdCxcXG5tbS9odWdldGxiLmMtNzI4LVxcdFxcdCAgICAgICBsb25nIGluX3JlZ2lvbnNfbmVlZGVkLCBzdHJ1Y3QgaHN0YXRlICpoLFxcbi0tXFxubW0vaHVnZXRsYi5jLTc1Mi1cXHRcXHRcXHQgICAgKGFjdHVhbF9yZWdpb25zX25lZWRlZCAtIGluX3JlZ2lvbnNfbmVlZGVkKSkge1xcbm1tL2h1Z2V0bGIuYzo3NTM6XFx0XFx0LyogcmVnaW9uX2FkZCBvcGVyYXRpb24gb2YgcmFuZ2UgMSBzaG91bGQgbmV2ZXIgbmVlZCB0b1xcbm1tL2h1Z2V0bGIuYy03NTQtXFx0XFx0ICogYWxsb2NhdGUgZmlsZV9yZWdpb24gZW50cmllcy5cXG4tLVxcbm1tL2h1Z2V0bGIuYy03NzctICogcmVwcmVzZW50ZWQuICBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIGJlZm9yZSBhIHN1YnNlcXVlbnRcXG5tbS9odWdldGxiLmM6Nzc4OiAqIGNhbGwgdG8gcmVnaW9uX2FkZCB0aGF0IHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSByZXNlcnZlXFxubW0vaHVnZXRsYi5jLTc3OS0gKiBtYXAgdG8gYWRkIHRoZSBzcGVjaWZpZWQgcmFuZ2UgW2YsIHQpLiAgcmVnaW9uX2NoZyBkb2VzXFxuLS1cXG5tbS9odWdldGxiLmMtNzgxLSAqIG1hcC4gIEEgbnVtYmVyIG9mIG5ldyBmaWxlX3JlZ2lvbiBzdHJ1Y3R1cmVzIGlzIGFkZGVkIHRvIHRoZSBjYWNoZSBhcyBhXFxubW0vaHVnZXRsYi5jOjc4MjogKiBwbGFjZWhvbGRlciwgZm9yIHRoZSBzdWJzZXF1ZW50IHJlZ2lvbl9hZGQgY2FsbCB0byB1c2UuIEF0IGxlYXN0IDFcXG5tbS9odWdldGxiLmMtNzgzLSAqIGZpbGVfcmVnaW9uIHN0cnVjdHVyZSBpcyBhZGRlZC5cXG4tLVxcbm1tL2h1Z2V0bGIuYy03ODYtICogcmVzdi1cXHUwMDNlYWRkc19pbl9wcm9ncmVzcy4gIFRoaXMgdmFsdWUgbmVlZHMgdG8gYmUgcHJvdmlkZWQgdG8gYSBmb2xsb3cgdXAgY2FsbFxcbm1tL2h1Z2V0bGIuYzo3ODc6ICogdG8gcmVnaW9uX2FkZCBvciByZWdpb25fYWJvcnQgZm9yIHByb3BlciBhY2NvdW50aW5nLlxcbm1tL2h1Z2V0bGIuYy03ODgtICpcXG4tLVxcbm1tL2h1Z2V0bGIuYz03OTQ9c3RhdGljIGxvbmcgcmVnaW9uX2NoZyhzdHJ1Y3QgcmVzdl9tYXAgKnJlc3YsIGxvbmcgZiwgbG9uZyB0LFxcbi0tXFxubW0vaHVnZXRsYi5jLTgxOS0gKiBvZiB0aGUgcmVzdl9tYXAga2VlcHMgdHJhY2sgb2YgdGhlIG9wZXJhdGlvbnMgaW4gcHJvZ3Jlc3MgYmV0d2Vlblxcbm1tL2h1Z2V0bGIuYzo4MjA6ICogY2FsbHMgdG8gcmVnaW9uX2NoZyBhbmQgcmVnaW9uX2FkZC4gIE9wZXJhdGlvbnMgYXJlIHNvbWV0aW1lc1xcbm1tL2h1Z2V0bGIuYy04MjEtICogYWJvcnRlZCBhZnRlciB0aGUgY2FsbCB0byByZWdpb25fY2hnLiAgSW4gc3VjaCBjYXNlcywgcmVnaW9uX2Fib3J0XFxuLS1cXG5tbS9odWdldGxiLmM9MjQzMD1zdGF0aWMgbG9uZyBfX3ZtYV9yZXNlcnZhdGlvbl9jb21tb24oc3RydWN0IGhzdGF0ZSAqaCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yNDUzLVxcdGNhc2UgVk1BX0NPTU1JVF9SRVNWOlxcbm1tL2h1Z2V0bGIuYzoyNDU0OlxcdFxcdHJldCA9IHJlZ2lvbl9hZGQocmVzdiwgaWR4LCBpZHggKyAxLCAxLCBOVUxMLCBOVUxMKTtcXG5tbS9odWdldGxiLmM6MjQ1NTpcXHRcXHQvKiByZWdpb25fYWRkIGNhbGxzIG9mIHJhbmdlIDEgc2hvdWxkIG5ldmVyIGZhaWwuICovXFxubW0vaHVnZXRsYi5jLTI0NTYtXFx0XFx0Vk1fQlVHX09OKHJldCBcXHUwMDNjIDApO1xcbi0tXFxubW0vaHVnZXRsYi5jLTI0NjMtXFx0XFx0aWYgKHZtYS1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiBWTV9NQVlTSEFSRSkge1xcbm1tL2h1Z2V0bGIuYzoyNDY0OlxcdFxcdFxcdHJldCA9IHJlZ2lvbl9hZGQocmVzdiwgaWR4LCBpZHggKyAxLCAxLCBOVUxMLCBOVUxMKTtcXG5tbS9odWdldGxiLmM6MjQ2NTpcXHRcXHRcXHQvKiByZWdpb25fYWRkIGNhbGxzIG9mIHJhbmdlIDEgc2hvdWxkIG5ldmVyIGZhaWwuICovXFxubW0vaHVnZXRsYi5jLTI0NjYtXFx0XFx0XFx0Vk1fQlVHX09OKHJldCBcXHUwMDNjIDApO1xcbi0tXFxubW0vaHVnZXRsYi5jLTI0NzYtXFx0XFx0fSBlbHNlIHtcXG5tbS9odWdldGxiLmM6MjQ3NzpcXHRcXHRcXHRyZXQgPSByZWdpb25fYWRkKHJlc3YsIGlkeCwgaWR4ICsgMSwgMSwgTlVMTCwgTlVMTCk7XFxubW0vaHVnZXRsYi5jOjI0Nzg6XFx0XFx0XFx0LyogcmVnaW9uX2FkZCBjYWxscyBvZiByYW5nZSAxIHNob3VsZCBuZXZlciBmYWlsLiAqL1xcbm1tL2h1Z2V0bGIuYy0yNDc5LVxcdFxcdFxcdFZNX0JVR19PTihyZXQgXFx1MDAzYyAwKTtcXG4tLVxcbm1tL2h1Z2V0bGIuYz02NTQwPWxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5tbS9odWdldGxiLmMtNjY1MC1cXHRpZiAoIXZtYSB8fCB2bWFfdGVzdCh2bWEsIFZNQV9NQVlTSEFSRV9CSVQpKSB7XFxubW0vaHVnZXRsYi5jOjY2NTE6XFx0XFx0YWRkID0gcmVnaW9uX2FkZChyZXN2X21hcCwgZnJvbSwgdG8sIHJlZ2lvbnNfbmVlZGVkLCBoLCBoX2NnKTtcXG5tbS9odWdldGxiLmMtNjY1Mi1cXG4tLVxcbm1tL2h1Z2V0bGIuYy02NjU5LVxcdFxcdFxcdCAqIHBhZ2VzIGluIHRoaXMgcmFuZ2Ugd2VyZSBhZGRlZCB0byB0aGUgcmVzZXJ2ZVxcbm1tL2h1Z2V0bGIuYzo2NjYwOlxcdFxcdFxcdCAqIG1hcCBiZXR3ZWVuIHJlZ2lvbl9jaGcgYW5kIHJlZ2lvbl9hZGQuICBUaGlzXFxubW0vaHVnZXRsYi5jLTY2NjEtXFx0XFx0XFx0ICogaW5kaWNhdGVzIGEgcmFjZSB3aXRoIGFsbG9jX2h1Z2V0bGJfZm9saW8uICBBZGp1c3RcXG4tLVxcbm1tL2h1Z2V0bGIuYy02NzE2LVxcdFxcdC8qIE9ubHkgY2FsbCByZWdpb25fYWJvcnQgaWYgdGhlIHJlZ2lvbl9jaGcgc3VjY2VlZGVkIGJ1dCB0aGVcXG5tbS9odWdldGxiLmM6NjcxNzpcXHRcXHQgKiByZWdpb25fYWRkIGZhaWxlZCBvciBkaWRuJ3QgcnVuLlxcbm1tL2h1Z2V0bGIuYy02NzE4LVxcdFxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QyMjozODo0NC4zMzEwOTk4NTZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQ4NzU5ODI2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBTdGF0aWMgQnVnIGluIGBhbGxvY2F0ZV9maWxlX3JlZ2lvbl9lbnRyaWVzYCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0J3MgcHJldHR5IGNsZWFyOiB0aGUgY29yZSBpc3N1ZSBpcyBpbiBgYWxsb2NhdGVfZmlsZV9yZWdpb25fZW50cmllc2AuIEl0J3MgZGVmaW5pdGVseSBzdGF0aWMsIHdoaWNoIHNpbXBsaWZpZXMgdGhpbmdzIGEgYml0LiBUaGUgYnVnIGlzIGxpc3QgY29ycnVwdGlvbi4gU3BlY2lmaWNhbGx5LCB0aGUgbGlzdCBnZXRzIG1lc3NlZCB1cCB3aGVuIHRoZSBgYWxsb2NhdGVfZmlsZV9yZWdpb25fZW50cmllc2AgZnVuY3Rpb24gaXRlcmF0ZXMgbW9yZSB0aGFuIG9uY2UuIFRoaXMgaGFwcGVucyB3aGVuIHRoZSB2YWx1ZSBvZiBgcmVzdi1cdTAwM2VyZWdpb25fY2FjaGVfY291bnRgIGlzIGxlc3MgdGhhbiB0aGUgc3VtIG9mIGByZXN2LVx1MDAzZWFkZHNfaW5fcHJvZ3Jlc3NgIGFuZCBgcmVnaW9uc19uZWVkZWRgIGFmdGVyIHJlbGVhc2luZyB0aGUgbG9jaywgd2hpY2ggc2NyZWFtcyByYWNlIGNvbmRpdGlvbi5cblxuVGhlIHNlbGZ0ZXN0LCBgaHVnZXRsYl9yZWdpb25fY2FjaGVfcmFjZWAsIGNsZXZlcmx5IHVzZXMgYG1lbWZkX2NyZWF0ZShNRkRfSFVHRVRMQilgIGFuZCBgZmFsbG9jYXRlKEZBTExPQ19GTF9QVU5DSF9IT0xFKWAgdG8gY3JlYXRlIGZyYWdtZW50YXRpb24gd2l0aGluIHRoZSBgcmVzdl9tYXBgLiBUaGlzIGZyYWdtZW50YXRpb24gdGhlbiB0cmlnZ2VycyB0aGUgcmFjZS4gU28sIHRoZSBmZWF0dXJlIGFyZWEgaXMgaHVnZXRsYmZzLiBTZWVtcyBsaWtlIHRoaXMgaXMgYSBIVUdFVExCRlMgc3BlY2lmaWMgaXNzdWUuXG5cblRoZSBrZXkgZnVuY3Rpb25zIHRvIGZvY3VzIG9uIGhlcmUgYXJlIGBhbGxvY2F0ZV9maWxlX3JlZ2lvbl9lbnRyaWVzYCAob2J2aW91c2x5KSwgYHJlZ2lvbl9hZGRgLCBgcmVnaW9uX2NoZ2AsIGFuZCBgcmVnaW9uX2RlbGAg4oCTIHRoZSBzdGFuZGFyZCBsaXN0IG1hbmlwdWxhdGlvbiBmdW5jdGlvbnMgaW4gdGhpcyBjb250ZXh0LiBJJ2xsIG5lZWQgdG8gbWV0aWN1bG91c2x5IHJldmlldyB0aGUgbG9ja2luZyBhbmQgYWNjZXNzIHBhdHRlcm5zIHdpdGhpbiB0aGVzZSBmdW5jdGlvbnMuXG5cbk5vdywgYmVmb3JlIEkgZGlnIHRvbyBkZWVwLCBsZXQgbWUgcXVpY2tseSBzY2FuIGZvciBhbnkgcmVsYXRlZCBjb25maWdzLiBJcyB0aGVyZSBhbnl0aGluZyBlbHNlIHRoYXQgbWlnaHQgY29udHJpYnV0ZT8gQWgsIGBDT05GSUdfTUVNRkRfQ1JFQVRFYC4gTm8sIHdhaXQgYSBtaW51dGUsIGBtZW1mZF9jcmVhdGVgIGlzIGFsd2F5cyBhdmFpbGFibGUgaWYgYENPTkZJR19TSE1FTWAgb3IgYENPTkZJR19IVUdFVExCRlNgIGlzIGVuYWJsZWQsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIGhhdmUgdG8gcmVtaW5kIG15c2VsZiBgbWVtZmRfY3JlYXRlYCBpcyBhIHN5c2NhbGwuIEhtbSwgbGV0IG1lIGNoZWNrIHRoZSBgSFVHRVRMQkZTYCBjb25maWcsIHNwZWNpZmljYWxseSBpbiBgZnMvS2NvbmZpZ2AuIEknbGwgc2VlIGlmIHRoZXJlJ3MgYW55IGltcGxpY2l0IGRlcGVuZGVuY3kgSSdtIG1pc3NpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMTQ2LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDIyOjM4OjQ5LjgxODcwMDAxMVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEwMTI5MjMyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBIVUdFVExCRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9LY29uZmlnPTI0Nz1jb25maWcgQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcXG4tLVxcbmZzL0tjb25maWctMjQ5LVxcbmZzL0tjb25maWc6MjUwOm1lbnVjb25maWcgSFVHRVRMQkZTXFxuZnMvS2NvbmZpZy0yNTEtXFx0Ym9vbCBcXFwiSHVnZVRMQiBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QyMjozODo0OS45Mjg4MzcxMDJaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTkyNTY4ODY3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEhVR0VUTEJGUyBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIHRoZSBjZW50cmFsIGNvbXBvbmVudCBhcHBlYXJzIHRvIGJlIGBIVUdFVExCRlNgLiBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGBIVUdFVExCX1BBR0VgIGlzbid0IHNlcGFyYXRlbHkgcmVxdWlyZWQ7IGJhc2VkIG9uIHRoZSBkZXBlbmRlbmN5LCBpdCdzIGp1c3QgdGhlIGBIVUdFVExCRlNgIG9wdGlvbiB0aGF0J3MgdHJ1bHkgZXNzZW50aWFsIGhlcmUuIFRoYXQncyBhIGdvb2Qgc3RhcnQuXG5cbk5vdywgbGV0J3MgZHJpbGwgZG93biBhbmQgc2VlIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlcy4gVGhlIHByaW1hcnkgZnVuY3Rpb24gbW9kaWZpZWQgc2VlbXMgdG8gYmUgYGFsbG9jYXRlX2ZpbGVfcmVnaW9uX2VudHJpZXNgLiBNeSBpbml0aWFsIGluc3BlY3Rpb24gc2hvd3MgbW9kaWZpY2F0aW9ucyBjb25maW5lZCB0byBgbW0vaHVnZXRsYi5jYCBhbmQgYSBmZXcgc2VsZnRlc3QgYXJlYXMsIG5vdGhpbmcgdGhhdCBpbW1lZGlhdGVseSBzY3JlYW1zIFwid2lkZXNwcmVhZCBpbXBhY3RcIiBvciBzaWduaWZpY2FudCBhcmNoaXRlY3R1cmFsIGNoYW5nZXMuIEl0J3MgYSBmb2N1c2VkIGFsdGVyYXRpb24sIHdoaWNoIHN1Z2dlc3RzIGl04oCZcyBhIGZ1bmN0aW9uYWwgZml4LCBleGFjdGx5IHRoZSBzb3J0IHRoYXQgd2FycmFudHMgZnV6emluZy5cblxuR2l2ZW4gdGhpcywgSSdtIGdvaW5nIHRvIGNvZGlmeSB0aGlzIGludG8gc29tZSBmdXp6aW5nIGRpcmVjdGl2ZXMuXG5cbioqV29ydGhGdXp6aW5nOiB0cnVlKiouIEFic29sdXRlbHksIHRoaXMgaGFzIGNsZWFyIGZ1enppbmcgcG90ZW50aWFsLlxuXG4qKkZvY3VzU3ltYm9sczogW1wiYWxsb2NhdGVfZmlsZV9yZWdpb25fZW50cmllc1wiLCBcInJlZ2lvbl9hZGRcIiwgXCJyZWdpb25fY2hnXCIsIFwicmVnaW9uX2RlbFwiXSoqLiBUaGVzZSBhcmUgdGhlIGtleSBmdW5jdGlvbnMsIHBhcnRpY3VsYXJseSB0aGF0IGNvcmUgYGFsbG9jYXRlX2ZpbGVfcmVnaW9uX2VudHJpZXNgIGZ1bmN0aW9uIGFuZCB0aGUgcmVnaW9uIG1hbmFnZW1lbnQgZnVuY3Rpb25zLCB3aGljaCBhcHBlYXIgdG8gYmUgaW50aW1hdGVseSBpbnZvbHZlZCBpbiB0aGlzIGJ1Zy5cblxuKipFbmFibGVDb25maWdzOiBbXCJIVUdFVExCRlNcIl0qKi4gVGhhdCdzIHRoZSBjcnVjaWFsIGNvbmZpZ3VyYXRpb24gZWxlbWVudCB0byBlbmFibGUuXG5cbioqUmVhc29uaW5nOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGxpc3QgY29ycnVwdGlvbiBidWcgaW4gYWxsb2NhdGVfZmlsZV9yZWdpb25fZW50cmllcyBpbiBodWdldGxiZnMuIFRoZSBidWcgaXMgdHJpZ2dlcmVkIGJ5IGEgcmFjZSBjb25kaXRpb24gd2hlbiB0aGUgcmVnaW9uIGNhY2hlIG5lZWRzIHRvIGJlIHJlZmlsbGVkIG11bHRpcGxlIHRpbWVzLiBGdXp6aW5nIGh1Z2V0bGJmcyByZXNlcnZhdGlvbiBmdW5jdGlvbnMgY2FuIGhlbHAgZW5zdXJlIHRoZSBmaXggaXMgcm9idXN0LlwiKiogVGhpcyBzdW1tYXJpemVzIHRoZSB2dWxuZXJhYmlsaXR5J3MgbmF0dXJlIGFuZCB0aGUgcmF0aW9uYWxlIGZvciBvdXIgZnV6emluZyBzdHJhdGVneS4gRXNzZW50aWFsbHksIHdlJ3JlIGxvb2tpbmcgdG8gdmFsaWRhdGUgdGhlIGZpeCdzIHJvYnVzdG5lc3MgYWdhaW5zdCByYWNlIGNvbmRpdGlvbnMgaW4gdGhlIGh1Z2V0bGJmcyByZWdpb24gY2FjaGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTU2LCJPdXRwdXRUb2tlbnMiOjEyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QyMjozODo1NS44NTQ1MjgzNzVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjkwNzIyMTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFsbG9jYXRlX2ZpbGVfcmVnaW9uX2VudHJpZXNcIixcbiAgICBcInJlZ2lvbl9hZGRcIixcbiAgICBcInJlZ2lvbl9jaGdcIixcbiAgICBcInJlZ2lvbl9kZWxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGxpc3QgY29ycnVwdGlvbiBidWcgaW4gYWxsb2NhdGVfZmlsZV9yZWdpb25fZW50cmllcyBpbiBodWdldGxiZnMuIFRoZSBidWcgaXMgdHJpZ2dlcmVkIGJ5IGEgcmFjZSBjb25kaXRpb24gd2hlbiB0aGUgcmVnaW9uIGNhY2hlIG5lZWRzIHRvIGJlIHJlZmlsbGVkIG11bHRpcGxlIHRpbWVzLiBGdXp6aW5nIGh1Z2V0bGJmcyByZXNlcnZhdGlvbiBmdW5jdGlvbnMgY2FuIGhlbHAgZW5zdXJlIHRoZSBmaXggaXMgcm9idXN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFsbG9jYXRlX2ZpbGVfcmVnaW9uX2VudHJpZXNcIixcbiAgICBcInJlZ2lvbl9hZGRcIixcbiAgICBcInJlZ2lvbl9jaGdcIixcbiAgICBcInJlZ2lvbl9kZWxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGxpc3QgY29ycnVwdGlvbiBidWcgaW4gYWxsb2NhdGVfZmlsZV9yZWdpb25fZW50cmllcyBpbiBodWdldGxiZnMuIFRoZSBidWcgaXMgdHJpZ2dlcmVkIGJ5IGEgcmFjZSBjb25kaXRpb24gd2hlbiB0aGUgcmVnaW9uIGNhY2hlIG5lZWRzIHRvIGJlIHJlZmlsbGVkIG11bHRpcGxlIHRpbWVzLiBGdXp6aW5nIGh1Z2V0bGJmcyByZXNlcnZhdGlvbiBmdW5jdGlvbnMgY2FuIGhlbHAgZW5zdXJlIHRoZSBmaXggaXMgcm9idXN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowmvcp8[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-13 22:22:58 +0000 UTC FinishedAt: 2026-07-13 22:38:57 +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": "35cb138c9029fed73eed7d7b9d0f100bdbf5ee44", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS" ], "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": "35cb138c9029fed73eed7d7b9d0f100bdbf5ee44", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS" ], "series_id": "1a12d3cf-d0b7-40ff-8759-2c2d0445c79a" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "allocate_file_region_entries", "region_add", "region_chg", "region_del" ], "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+CgkJCTx0ZD4yMDI2LzA3LzEzIDIyOjM4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FsbG9jYXRlX2ZpbGVfcmVnaW9uX2VudHJpZXMmIzM0OywKICAgICYjMzQ7cmVnaW9uX2FkZCYjMzQ7LAogICAgJiMzNDtyZWdpb25fY2hnJiMzNDssCiAgICAmIzM0O3JlZ2lvbl9kZWwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBsaXN0IGNvcnJ1cHRpb24gYnVnIGluIGFsbG9jYXRlX2ZpbGVfcmVnaW9uX2VudHJpZXMgaW4gaHVnZXRsYmZzLiBUaGUgYnVnIGlzIHRyaWdnZXJlZCBieSBhIHJhY2UgY29uZGl0aW9uIHdoZW4gdGhlIHJlZ2lvbiBjYWNoZSBuZWVkcyB0byBiZSByZWZpbGxlZCBtdWx0aXBsZSB0aW1lcy4gRnV6emluZyBodWdldGxiZnMgcmVzZXJ2YXRpb24gZnVuY3Rpb25zIGNhbiBoZWxwIGVuc3VyZSB0aGUgZml4IGlzIHJvYnVzdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAyMjozODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDhhZGJkNWI2ZjRiNDY3YWFlMTJjYjkxNzUwYzFiMGI4Njc0MmI2ZTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCAxMyAyMjozODoxMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmNcbmluZGV4IDU3MTIxMmI4MDgzNWVjLi5mOTU3N2E3ODlmZTY0ZiAxMDA2NDRcbi0tLSBhL21tL2h1Z2V0bGIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZXRsYi5jXG5AQCAtNjkzLDcgJiM0Mzs2OTMsNyBAQCBzdGF0aWMgaW50IGFsbG9jYXRlX2ZpbGVfcmVnaW9uX2VudHJpZXMoc3RydWN0IHJlc3ZfbWFwICpyZXN2LFxuIFxuIFx0XHRzcGluX2xvY2soXHUwMDI2cmVzdi1cdTAwM2Vsb2NrKTtcbiBcbi1cdFx0bGlzdF9zcGxpY2UoXHUwMDI2YWxsb2NhdGVkX3JlZ2lvbnMsIFx1MDAyNnJlc3YtXHUwMDNlcmVnaW9uX2NhY2hlKTtcbiYjNDM7XHRcdGxpc3Rfc3BsaWNlX2luaXQoXHUwMDI2YWxsb2NhdGVkX3JlZ2lvbnMsIFx1MDAyNnJlc3YtXHUwMDNlcmVnaW9uX2NhY2hlKTtcbiBcdFx0cmVzdi1cdTAwM2VyZWdpb25fY2FjaGVfY291bnQgJiM0Mzs9IHRvX2FsbG9jYXRlO1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLy5naXRpZ25vcmUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8uZ2l0aWdub3JlXG5pbmRleCA5Y2NkOWUxNDQ3ZTY2Yi4uN2RiODY1Nzk2MGQ5ZjAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8uZ2l0aWdub3JlXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8uZ2l0aWdub3JlXG5AQCAtNTksNiAmIzQzOzU5LDcgQEAgaHVnZXRsYl9tYWR2X3ZzX21hcFxuIG1zZWFsX3Rlc3RcbiBkcm9wcGFibGVcbiBodWdldGxiX2Rpb1xuJiM0MztodWdldGxiX3JlZ2lvbl9jYWNoZV9yYWNlXG4gcGtleV9zaWdoYW5kbGVyX3Rlc3RzXzMyXG4gcGtleV9zaWdoYW5kbGVyX3Rlc3RzXzY0XG4gZ3VhcmQtcmVnaW9uc1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGVcbmluZGV4IGU2ZGY5NjhmMDk3MWM4Li40MjFhMGI3ZmRkZGYyOCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZVxuQEAgLTY3LDYgJiM0Mzs2Nyw3IEBAIFRFU1RfR0VOX0ZJTEVTICYjNDM7PSBodWdldGxiLXJlYWQtaHdwb2lzb25cbiBURVNUX0dFTl9GSUxFUyAmIzQzOz0gaHVnZXRsYi1zaG1cbiBURVNUX0dFTl9GSUxFUyAmIzQzOz0gaHVnZXRsYi1zb2Z0LW9mZmxpbmVcbiBURVNUX0dFTl9GSUxFUyAmIzQzOz0gaHVnZXRsYi12bWVtbWFwXG4mIzQzO1RFU1RfR0VOX0ZJTEVTICYjNDM7PSBodWdldGxiX3JlZ2lvbl9jYWNoZV9yYWNlXG4gVEVTVF9HRU5fRklMRVMgJiM0Mzs9IGtodWdlcGFnZWRcbiBURVNUX0dFTl9GSUxFUyAmIzQzOz0gbWFkdl9wb3B1bGF0ZVxuIFRFU1RfR0VOX0ZJTEVTICYjNDM7PSBtYXBfZml4ZWRfbm9yZXBsYWNlXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9yZWdpb25fY2FjaGVfcmFjZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9yZWdpb25fY2FjaGVfcmFjZS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjZlM2Y3NTM2NDBiZThjXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX3JlZ2lvbl9jYWNoZV9yYWNlLmNcbkBAIC0wLDAgJiM0MzsxLDMxNSBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsvKlxuJiM0MzsgKiBSZWdyZXNzaW9uIHRlc3QgZm9yIGxpc3QgY29ycnVwdGlvbiBpblxuJiM0MzsgKiBtbS9odWdldGxiLmM6YWxsb2NhdGVfZmlsZV9yZWdpb25fZW50cmllcygpLlxuJiM0MzsgKlxuJiM0MzsgKiBGb3JrIHByb2Nlc3NlcyBzaGFyaW5nIGEgaHVnZXRsYiBpbm9kZSB2aWEgYG1lbWZkX2NyZWF0ZShNRkRfSFVHRVRMQilgXG4mIzQzOyAqIGFuZCBoYXZlIHRoZW0gZmF1bHQgcmFuZ2VzIGFuZCBwdW5jaCBob2xlcyB0byBmcmFnbWVudCB0aGUgc2hhcmVkXG4mIzQzOyAqIGByZXN2X21hcGAgd2hpbGUgZHJhaW5pbmcgYHJlc3YtXHUwMDNlcmVnaW9uX2NhY2hlYCBmcm9tIGEgc2VwYXJhdGUgYWRkcmVzc1xuJiM0MzsgKiBzcGFjZS5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgX0dOVV9TT1VSQ0VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NmY250bC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3NldGptcC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3NpZ25hbC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0ZGJvb2wuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRpbnQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0ZGxpYi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3RpbWUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzeXMvbW1hbi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N5cy9zeXNjYWxsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3lzL3dhaXQuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZmFsbG9jLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbWVtZmQuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7Li4va3NlbGZ0ZXN0LmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7aHVnZXBhZ2Vfc2V0dGluZ3MuaFwmIzM0O1xuJiM0MztcbiYjNDM7LyogVHVuYWJsZXMgKG92ZXJyaWRhYmxlIHZpYSBhcmd2KS4gKi9cbiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgZmlsZV9wYWdlcyA9IDY0O1x0LyogaHVnZSBwYWdlcyBiYWNraW5nIHRoZSBzaGFyZWQgZmlsZSAqL1xuJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IG5yX3Byb2NzO1x0XHQvKiAwID1cdTAwM2UgYXV0byAoMiAqIG5yIG9ubGluZSBjcHVzKSAqL1xuJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IGR1cmF0aW9uX3NlYyA9IDU7XHQvKiAtLXRyaWdnZXIgcnVuIHRpbWUgKi9cbiYjNDM7XG4mIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIGh1Z2VfcGFnZV9zaXplO1x0LyogYnl0ZXMgKi9cbiYjNDM7c3RhdGljIGludCBtZW1mZCA9IC0xO1xuJiM0MztzdGF0aWMgdm9sYXRpbGUgaW50ICpzdG9wO1x0XHQvKiBzaGFyZWQgYWNyb3NzIGZvcmtlZCBjaGlsZHJlbiAqL1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogUGVyLXByb2Nlc3MgU0lHQlVTIGVzY2FwZTogYSBmYXVsdCBjYW4gZmFpbCAocG9vbCBleGhhdXN0ZWQpIGFuZCByYWlzZVxuJiM0MzsgKiBTSUdCVVM7IGp1bXAgYmFjayBhbmQgYWJhbmRvbiB0aGUgcmVzdCBvZiB0aGUgY3VycmVudCByYW5nZSBpbnN0ZWFkIG9mXG4mIzQzOyAqIGR5aW5nLiAgRWFjaCBjaGlsZCBpcyBzaW5nbGUtdGhyZWFkZWQsIHNvIGEgZmlsZS1zY29wZSBidWZmZXIgaXMgZmluZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBzaWdqbXBfYnVmIHNpZ2J1c19lbnY7XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBzaWdidXNfaGFuZGxlcihpbnQgc2lnKVxuJiM0Mzt7XG4mIzQzO1x0c2lnbG9uZ2ptcChzaWdidXNfZW52LCAxKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgaW5zdGFsbF9zaWdidXNfaGFuZGxlcih2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHNpZ2FjdGlvbiBzYSA9IHtcbiYjNDM7XHRcdC5zYV9oYW5kbGVyID0gc2lnYnVzX2hhbmRsZXIsXG4mIzQzO1x0fTtcbiYjNDM7XG4mIzQzO1x0c2lnZW1wdHlzZXQoXHUwMDI2c2Euc2FfbWFzayk7XG4mIzQzO1x0c2lnYWN0aW9uKFNJR0JVUywgXHUwMDI2c2EsIE5VTEwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgbG9uZyBzeXNfbWVtZmRfY3JlYXRlKGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGludCBmbGFncylcbiYjNDM7e1xuJiM0MztcdHJldHVybiBzeXNjYWxsKF9fTlJfbWVtZmRfY3JlYXRlLCBuYW1lLCBmbGFncyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIE1hcCBbc3RhcnQsIHN0YXJ0JiM0MztsZW4pIG9mIHRoZSBzaGFyZWQgZmlsZSBhbmQgZmF1bHQgZXZlcnkgcGFnZSBpbi5cbiYjNDM7ICpcbiYjNDM7ICogVGhlIG1tYXAoKSBkcml2ZXMgbW1hcC10aW1lIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyAtXHUwMDNlIHJlZ2lvbl9jaGcgKHRoZVxuJiM0MzsgKiB3aWRlLXdpbmRvdyB2aWN0aW0gd2hlbiB0aGUgcmFuZ2UgaXMgZnJhZ21lbnRlZCkgJiM0MzsgcmVnaW9uX2FkZC4gIFRoZVxuJiM0MzsgKiBzdWJzZXF1ZW50IHN0b3JlcyBmYXVsdCBwYWdlcyBpbiAqd2l0aG91dCogaW5vZGVfbG9jaywgZHJpdmluZyB0aGVcbiYjNDM7ICogbG9jay1mcmVlIHJlZ2lvbl9hZGQvcmVnaW9uX2NoZyB0aGF0IGRyYWlucyByZXN2LVx1MDAzZXJlZ2lvbl9jYWNoZSAtLSB0aGVcbiYjNDM7ICogY29uY3VycmVuY3kgdGhlIGJ1Z2d5IGxvb3AgbmVlZHMgZnJvbSAqb3RoZXIqIHByb2Nlc3Nlcy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIG1hcF9hbmRfZmF1bHRfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBsZW4pXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGk7XG4mIzQzO1x0Y2hhciAqYWRkcjtcbiYjNDM7XG4mIzQzO1x0aWYgKCFsZW4pXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0YWRkciA9IG1tYXAoTlVMTCwgbGVuICogaHVnZV9wYWdlX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG4mIzQzO1x0XHQgICAgTUFQX1NIQVJFRCwgbWVtZmQsIHN0YXJ0ICogaHVnZV9wYWdlX3NpemUpO1xuJiM0MztcdGlmIChhZGRyID09IE1BUF9GQUlMRUQpXG4mIzQzO1x0XHRyZXR1cm47XHRcdC8qIEVOT01FTSB1bmRlciBwb29sIHByZXNzdXJlIGlzIGZpbmUgKi9cbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbGVuOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKHNpZ3NldGptcChzaWdidXNfZW52LCAxKSA9PSAwKVxuJiM0MztcdFx0XHQqKHZvbGF0aWxlIGNoYXIgKikoYWRkciAmIzQzOyBpICogaHVnZV9wYWdlX3NpemUpID0gKGNoYXIpaTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0YnJlYWs7XHQvKiBTSUdCVVM6IHBvb2wgZXhoYXVzdGVkLCBzdG9wIGZhdWx0aW5nICovXG4mIzQzO1x0fVxuJiM0MztcdG11bm1hcChhZGRyLCBsZW4gKiBodWdlX3BhZ2Vfc2l6ZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFJlbW92ZSBbc3RhcnQsIHN0YXJ0JiM0MztsZW4pIGh1Z2UgcGFnZXMgZnJvbSB0aGUgc2hhcmVkIGZpbGUsIGRyaXZpbmdcbiYjNDM7ICogaHVnZXRsYmZzX3B1bmNoX2hvbGUgLVx1MDAzZSByZW1vdmVfaW5vZGVfaHVnZXBhZ2VzIC1cdTAwM2UgcmVnaW9uX2RlbCBmb3IgdGhlIHBhZ2VzXG4mIzQzOyAqIHRoYXQgd2VyZSBmYXVsdGVkIGluIGFib3ZlLiAgVGhpcyBmcmVlcyBwYWdlcyBiYWNrIHRvIHRoZSBwb29sIChib3VuZGluZ1xuJiM0MzsgKiByZXNpZGVuY3kpIGFuZCByZS1mcmFnbWVudHMgdGhlIHJlc3ZfbWFwIHNvIGxhdGVyIHJlZ2lvbl9jaGcgY2FsbHMga2VlcFxuJiM0MzsgKiBuZWVkaW5nIG11bHRpcGxlIGVudHJpZXMuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBwdW5jaF9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGxlbilcbiYjNDM7e1xuJiM0MztcdGlmICghbGVuKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdGZhbGxvY2F0ZShtZW1mZCwgRkFMTE9DX0ZMX1BVTkNIX0hPTEUgfCBGQUxMT0NfRkxfS0VFUF9TSVpFLFxuJiM0MztcdFx0ICBzdGFydCAqIGh1Z2VfcGFnZV9zaXplLCBsZW4gKiBodWdlX3BhZ2Vfc2l6ZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIE9uZSBmb3JrZWQgd29ya2VyLiAgRWFjaCB3b3JrZXIgaXMgc2ltdWx0YW5lb3VzbHkgYSB2aWN0aW0gKGl0cyB3aWRlXG4mIzQzOyAqIG1tYXAtdGltZSByZWdpb25fY2hnKSBhbmQsIGZvciB0aGUgb3RoZXIgd29ya2VycywgYSBsb2NrLWZyZWUgY2FjaGVcbiYjNDM7ICogZHJhaW5lciAoaXRzIGZhdWx0cykgLS0gZXhhY3RseSB0aGUgc2hhcmVkLWlub2RlIG1hcCYjNDM7ZmF1bHQgY2h1cm4gc2VlbiBpblxuJiM0MzsgKiB0aGUgb3JpZ2luYWwgY3Jhc2ggKFFFTVUgcHJlYWxsb2MgJiM0MzsgU1BESy9CeXRlbGlnaHQgb24gb25lIGd1ZXN0LVJBTSBmaWxlKS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGNoaWxkX3dvcmtlcih1bnNpZ25lZCBpbnQgaWQpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBpbnQgc2VlZCA9IGlkICogMjY1NDQzNTc2MXUgXiAodW5zaWduZWQgaW50KXRpbWUoTlVMTCkgXlxuJiM0MztcdFx0XHQgICAgKCh1bnNpZ25lZCBpbnQpZ2V0cGlkKCkgXHUwMDNjXHUwMDNjIDEpO1xuJiM0MztcbiYjNDM7XHRpbnN0YWxsX3NpZ2J1c19oYW5kbGVyKCk7XG4mIzQzO1xuJiM0MztcdHdoaWxlICghKnN0b3ApIHtcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgc3RhcnQgPSByYW5kX3IoXHUwMDI2c2VlZCkgJSBmaWxlX3BhZ2VzO1xuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBsZW4gPSAxICYjNDM7IHJhbmRfcihcdTAwMjZzZWVkKSAlIChmaWxlX3BhZ2VzIC0gc3RhcnQpO1xuJiM0MztcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBCaWFzIHRvd2FyZCBtYXAmIzQzO2ZhdWx0ICh2aWN0aW1zIGFuZCBkcmFpbmVycyk7IHB1bmNoIGFcbiYjNDM7XHRcdCAqIHF1YXJ0ZXIgb2YgdGhlIHRpbWUgdG8ga2VlcCB0aGUgbWFwIGZyYWdtZW50ZWQgYW5kIHRvIGNhcFxuJiM0MztcdFx0ICogaG93IG1hbnkgcGFnZXMgc3RheSByZXNpZGVudC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKHJhbmRfcihcdTAwMjZzZWVkKSAlIDQpXG4mIzQzO1x0XHRcdG1hcF9hbmRfZmF1bHRfcmFuZ2Uoc3RhcnQsIGxlbik7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdHB1bmNoX3JhbmdlKHN0YXJ0LCBsZW4pO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogU2FmZSwgc2luZ2xlLXByb2Nlc3MgZnVuY3Rpb25hbCBjaGVjay4gIEl0IGZyYWdtZW50cyB0aGUgc2hhcmVkIHJlc3ZfbWFwXG4mIzQzOyAqIChyZXNlcnZhdGlvbnMgZm9yIGEgc2hhcmVkIG1hcHBpbmcgcGVyc2lzdCBvbiB0aGUgaW5vZGUgYWZ0ZXIgbXVubWFwKSBzb1xuJiM0MzsgKiB0aGF0IGEgc3Vic2VxdWVudCB3aG9sZS1maWxlIG1tYXAgbWFrZXMgcmVnaW9uX2NoZyBjb21wdXRlXG4mIzQzOyAqIHJlZ2lvbnNfbmVlZGVkIFx1MDAzZSAxLCBmb3JjaW5nIGFsbG9jYXRlX2ZpbGVfcmVnaW9uX2VudHJpZXMgdG8gYWxsb2NhdGUgYW5kXG4mIzQzOyAqIHNwbGljZSBzZXZlcmFsIGVudHJpZXMuICBUaGlzIGV4ZXJjaXNlcyB0aGUgYnVnZ3kgbGluZSwgYnV0IHdpdGhvdXRcbiYjNDM7ICogY29uY3VycmVuY3kgaXQgYWx3YXlzIG1ha2VzIGV4YWN0bHkgb25lIGxvb3AgaXRlcmF0aW9uLCBzbyBpdCBjYW5ub3QgdHJpcFxuJiM0MzsgKiB0aGUgcmFjZSBhbmQgaXMgc2FmZSBvbiBhbnkga2VybmVsLiAgUmV0dXJucyAwIG9uIHN1Y2Nlc3MuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IGZ1bmN0aW9uYWxfY2hlY2sodm9pZClcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgaTtcbiYjNDM7XHR2b2lkICphZGRyO1xuJiM0MztcbiYjNDM7XHQvKiBQdW5jaCBldmVyeXRoaW5nIHNvIHdlIHN0YXJ0IGZyb20gYW4gZW1wdHkgcmVzdl9tYXAuICovXG4mIzQzO1x0cHVuY2hfcmFuZ2UoMCwgZmlsZV9wYWdlcyk7XG4mIzQzO1xuJiM0MztcdC8qIFJlc2VydmUgZXZlcnkgb3RoZXIgaHVnZSBwYWdlIC1cdTAwM2UgfmZpbGVfcGFnZXMvMiBkaXNqb2ludCByZWdpb25zLiAqL1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGZpbGVfcGFnZXM7IGkgJiM0Mzs9IDIpXG4mIzQzO1x0XHRtYXBfYW5kX2ZhdWx0X3JhbmdlKGksIDEpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIE9uZSBtYXBwaW5nIHNwYW5uaW5nIHRoZSB3aG9sZSBmaWxlIG11c3QgZmlsbCBhbGwgdGhlIGhvbGVzIGluIGFcbiYjNDM7XHQgKiBzaW5nbGUgcmVnaW9uX2NoZyAtXHUwMDNlIGEgbXVsdGktZW50cnkgcmVnaW9uX2NhY2hlIHJlZmlsbC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRhZGRyID0gbW1hcChOVUxMLCBmaWxlX3BhZ2VzICogaHVnZV9wYWdlX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG4mIzQzO1x0XHQgICAgTUFQX1NIQVJFRCwgbWVtZmQsIDApO1xuJiM0MztcdGlmIChhZGRyID09IE1BUF9GQUlMRUQpIHtcbiYjNDM7XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O3dob2xlLWZpbGUgbW1hcCBmYWlsZWQ6ICVzXFxuXCYjMzQ7LCBzdHJlcnJvcihlcnJubykpO1xuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcdH1cbiYjNDM7XHRtdW5tYXAoYWRkciwgZmlsZV9wYWdlcyAqIGh1Z2VfcGFnZV9zaXplKTtcbiYjNDM7XHRwdW5jaF9yYW5nZSgwLCBmaWxlX3BhZ2VzKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydW5fdHJpZ2dlcih2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0cGlkX3QgKnBpZHM7XG4mIzQzO1x0dW5zaWduZWQgaW50IGksIHN0YXJ0ZWQgPSAwO1xuJiM0MztcbiYjNDM7XHRzdG9wID0gbW1hcChOVUxMLCBzaXplb2YoKnN0b3ApLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxuJiM0MztcdFx0ICAgIE1BUF9TSEFSRUQgfCBNQVBfQU5PTllNT1VTLCAtMSwgMCk7XG4mIzQzO1x0aWYgKHN0b3AgPT0gTUFQX0ZBSUxFRClcbiYjNDM7XHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDttbWFwKHN0b3AgZmxhZyk6ICVzXFxuXCYjMzQ7LCBzdHJlcnJvcihlcnJubykpO1xuJiM0MztcdCpzdG9wID0gMDtcbiYjNDM7XG4mIzQzO1x0cGlkcyA9IGNhbGxvYyhucl9wcm9jcywgc2l6ZW9mKCpwaWRzKSk7XG4mIzQzO1x0aWYgKCFwaWRzKVxuJiM0MztcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O2NhbGxvYzogJXNcXG5cJiMzNDssIHN0cmVycm9yKGVycm5vKSk7XG4mIzQzO1xuJiM0MztcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O3N0cmVzc2luZyAldSBwcm9jZXNzZXMgZm9yICV1cyBvbiAlbHUgaHVnZSBwYWdlcyAoJWx1IE1pQilcXG5cJiMzNDssXG4mIzQzO1x0XHQgICAgICAgbnJfcHJvY3MsIGR1cmF0aW9uX3NlYywgZmlsZV9wYWdlcyxcbiYjNDM7XHRcdCAgICAgICAoZmlsZV9wYWdlcyAqIGh1Z2VfcGFnZV9zaXplKSBcdTAwM2VcdTAwM2UgMjApO1xuJiM0MztcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O1dBUk5JTkc6IGEgdnVsbmVyYWJsZSBrZXJuZWwgd2lsbCBwYW5pYyBoZXJlXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfcHJvY3M7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRwaWRfdCBwaWQgPSBmb3JrKCk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHBpZCBcdTAwM2MgMCkge1xuJiM0MztcdFx0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtmb3JrOiAlc1xcblwmIzM0Oywgc3RyZXJyb3IoZXJybm8pKTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRpZiAocGlkID09IDApIHtcbiYjNDM7XHRcdFx0ZnJlZShwaWRzKTtcbiYjNDM7XHRcdFx0Y2hpbGRfd29ya2VyKGkpO1xuJiM0MztcdFx0XHRfZXhpdCgwKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHBpZHNbc3RhcnRlZCYjNDM7JiM0MztdID0gcGlkO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFzdGFydGVkKSB7XG4mIzQzO1x0XHRmcmVlKHBpZHMpO1xuJiM0MztcdFx0bXVubWFwKCh2b2lkICopc3RvcCwgc2l6ZW9mKCpzdG9wKSk7XG4mIzQzO1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7bm8gd29ya2VyIHByb2Nlc3NlcyBzdGFydGVkXFxuXCYjMzQ7KTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNsZWVwKGR1cmF0aW9uX3NlYyk7XG4mIzQzO1x0KnN0b3AgPSAxO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBzdGFydGVkOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdHdhaXRwaWQocGlkc1tpXSwgTlVMTCwgMCk7XG4mIzQzO1x0ZnJlZShwaWRzKTtcbiYjNDM7XHRtdW5tYXAoKHZvaWQgKilzdG9wLCBzaXplb2YoKnN0b3ApKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdXNhZ2UoY29uc3QgY2hhciAqcHJvZylcbiYjNDM7e1xuJiM0MztcdGZwcmludGYoc3RkZXJyLFxuJiM0MztcdFx0XCYjMzQ7dXNhZ2U6ICVzIFstLXRyaWdnZXJdIFstcyBodWdlX3BhZ2VzXSBbLXQgcHJvY3NdIFstZCBzZWNvbmRzXVxcblwmIzM0O1xuJiM0MztcdFx0XCYjMzQ7ICAoZGVmYXVsdCkgcnVuIGEgc2FmZSBzaW5nbGUtcHJvY2VzcyBmdW5jdGlvbmFsIGNoZWNrXFxuXCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDsgIC0tdHJpZ2dlciBmb3JrJiM0MztmYXVsdCBjb25jdXJyZW50IHJlcHJvZHVjZXIgKENBTiBQQU5JQyBBIEJVR0dZIEhPU1QpXFxuXCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDsgIC1zICBodWdlIHBhZ2VzIGJhY2tpbmcgdGhlIHNoYXJlZCBmaWxlIChkZWZhdWx0ICVsdSlcXG5cJiMzNDtcbiYjNDM7XHRcdFwmIzM0OyAgLXQgIHdvcmtlciBwcm9jZXNzZXMgZm9yIC0tdHJpZ2dlciAoZGVmYXVsdCAyICogbnJfY3B1cylcXG5cJiMzNDtcbiYjNDM7XHRcdFwmIzM0OyAgLWQgIC0tdHJpZ2dlciBydW4gdGltZSBpbiBzZWNvbmRzIChkZWZhdWx0ICV1KVxcblwmIzM0OyxcbiYjNDM7XHRcdHByb2csIGZpbGVfcGFnZXMsIGR1cmF0aW9uX3NlYyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4mIzQzO3tcbiYjNDM7XHRib29sIHRyaWdnZXIgPSBmYWxzZTtcbiYjNDM7XHRpbnQgaSwgcmV0O1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAxOyBpIFx1MDAzYyBhcmdjOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKCFzdHJjbXAoYXJndltpXSwgXCYjMzQ7LS10cmlnZ2VyXCYjMzQ7KSkge1xuJiM0MztcdFx0XHR0cmlnZ2VyID0gdHJ1ZTtcbiYjNDM7XHRcdH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2W2ldLCBcJiMzNDstc1wmIzM0OykgXHUwMDI2XHUwMDI2IGkgJiM0MzsgMSBcdTAwM2MgYXJnYykge1xuJiM0MztcdFx0XHRmaWxlX3BhZ2VzID0gc3RydG91bChhcmd2WyYjNDM7JiM0MztpXSwgTlVMTCwgMCk7XG4mIzQzO1x0XHR9IGVsc2UgaWYgKCFzdHJjbXAoYXJndltpXSwgXCYjMzQ7LXRcJiMzNDspIFx1MDAyNlx1MDAyNiBpICYjNDM7IDEgXHUwMDNjIGFyZ2MpIHtcbiYjNDM7XHRcdFx0bnJfcHJvY3MgPSBzdHJ0b3VsKGFyZ3ZbJiM0MzsmIzQzO2ldLCBOVUxMLCAwKTtcbiYjNDM7XHRcdH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2W2ldLCBcJiMzNDstZFwmIzM0OykgXHUwMDI2XHUwMDI2IGkgJiM0MzsgMSBcdTAwM2MgYXJnYykge1xuJiM0MztcdFx0XHRkdXJhdGlvbl9zZWMgPSBzdHJ0b3VsKGFyZ3ZbJiM0MzsmIzQzO2ldLCBOVUxMLCAwKTtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdHVzYWdlKGFyZ3ZbMF0pO1xuJiM0MztcdFx0XHRyZXR1cm4gS1NGVF9GQUlMO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0a3NmdF9wcmludF9oZWFkZXIoKTtcbiYjNDM7XHRrc2Z0X3NldF9wbGFuKDEpO1xuJiM0MztcbiYjNDM7XHRpZiAoZmlsZV9wYWdlcyBcdTAwM2MgNClcbiYjNDM7XHRcdGZpbGVfcGFnZXMgPSA0O1xuJiM0MztcdGlmICghbnJfcHJvY3MpIHtcbiYjNDM7XHRcdGxvbmcgY3B1cyA9IHN5c2NvbmYoX1NDX05QUk9DRVNTT1JTX09OTE4pO1xuJiM0MztcbiYjNDM7XHRcdG5yX3Byb2NzID0gY3B1cyBcdTAwM2UgMCA/ICh1bnNpZ25lZCBpbnQpY3B1cyAqIDIgOiA0O1xuJiM0MztcdH1cbiYjNDM7XHRpZiAobnJfcHJvY3MgXHUwMDNjIDIpXG4mIzQzO1x0XHRucl9wcm9jcyA9IDI7XG4mIzQzO1xuJiM0MztcdGh1Z2VfcGFnZV9zaXplID0gZGVmYXVsdF9odWdlX3BhZ2Vfc2l6ZSgpO1xuJiM0MztcdGlmICghaHVnZV9wYWdlX3NpemUpXG4mIzQzO1x0XHRrc2Z0X2V4aXRfc2tpcChcJiMzNDtubyBodWdldGxiZnMgLyBodWdlIHBhZ2Ugc2l6ZSBhdmFpbGFibGVcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEJvdGggbW9kZXMgZmF1bHQgcGFnZXMgaW4gKGZ1bmN0aW9uYWxfY2hlY2sgdG91Y2hlcyBldmVyeSBwYWdlIGl0XG4mIzQzO1x0ICogbWFwcywgYW5kIC0tdHJpZ2dlciYjMzk7cyB3b3JrZXJzIGZhdWx0IHRoZSByYW5nZXMgdGhleSBtYXApLCBzbyB0aGVcbiYjNDM7XHQgKiB3aG9sZSBmaWxlIG1heSBiZWNvbWUgcmVzaWRlbnQ7IHJlcXVpcmUgdGhhdCBtYW55ICpmcmVlKiBodWdlIHBhZ2VzLFxuJiM0MztcdCAqIG5vdCBqdXN0IHJlc2VydmF0aW9ucy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoaHVnZXRsYl9mcmVlX2RlZmF1bHRfcGFnZXMoKSBcdTAwM2MgZmlsZV9wYWdlcylcbiYjNDM7XHRcdGtzZnRfZXhpdF9za2lwKFwmIzM0O25lZWQgJWx1IGZyZWUgaHVnZSBwYWdlcywgaGF2ZSAlbHUgKHNldCBucl9odWdlcGFnZXMpXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgICAgZmlsZV9wYWdlcywgaHVnZXRsYl9mcmVlX2RlZmF1bHRfcGFnZXMoKSk7XG4mIzQzO1xuJiM0MztcdG1lbWZkID0gc3lzX21lbWZkX2NyZWF0ZShcJiMzNDtodWdldGxiX3JlZ2lvbl9jYWNoZV9yYWNlXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCBNRkRfSFVHRVRMQiB8XG4mIzQzO1x0XHRcdFx0IChfX2J1aWx0aW5fY3R6bChodWdlX3BhZ2Vfc2l6ZSkgXHUwMDNjXHUwMDNjIE1GRF9IVUdFX1NISUZUKSk7XG4mIzQzO1x0aWYgKG1lbWZkIFx1MDAzYyAwKVxuJiM0MztcdFx0a3NmdF9leGl0X3NraXAoXCYjMzQ7bWVtZmRfY3JlYXRlKE1GRF9IVUdFVExCKTogJXNcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgICAgICBzdHJlcnJvcihlcnJubykpO1xuJiM0MztcdGlmIChmdHJ1bmNhdGUobWVtZmQsIGZpbGVfcGFnZXMgKiBodWdlX3BhZ2Vfc2l6ZSkpIHtcbiYjNDM7XHRcdGNsb3NlKG1lbWZkKTtcbiYjNDM7XHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtmdHJ1bmNhdGU6ICVzXFxuXCYjMzQ7LCBzdHJlcnJvcihlcnJubykpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHRyaWdnZXIpXG4mIzQzO1x0XHRyZXQgPSBydW5fdHJpZ2dlcigpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHJldCA9IGZ1bmN0aW9uYWxfY2hlY2soKTtcbiYjNDM7XG4mIzQzO1x0Y2xvc2UobWVtZmQpO1xuJiM0MztcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0a3NmdF90ZXN0X3Jlc3VsdF9mYWlsKFwmIzM0O2h1Z2V0bGIgcmVnaW9uX2NhY2hlIHJhY2UgY2hlY2tcXG5cJiMzNDspO1xuJiM0MztcdGVsc2UgaWYgKHRyaWdnZXIpXG4mIzQzO1x0XHRrc2Z0X3Rlc3RfcmVzdWx0X3Bhc3MoXCYjMzQ7c3Vydml2ZWQgY29uY3VycmVudCByZWdpb25fY2FjaGUgY2h1cm5cXG5cJiMzNDspO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGtzZnRfdGVzdF9yZXN1bHRfcGFzcyhcJiMzNDttdWx0aS1lbnRyeSByZWdpb25fY2FjaGUgcmVmaWxsIHdvcmtzXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0a3NmdF9maW5pc2hlZCgpO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaFxuaW5kZXggOGMyOTZkZWRmMDQ3NGQuLjBjYjg1NzA1NjkxNWY0IDEwMDc1NVxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2hcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoXG5AQCAtMjY3LDYgJiM0MzsyNjcsNyBAQCBDQVRFR09SWT1cJiMzNDtodWdldGxiXCYjMzQ7IHJ1bl90ZXN0IC4vaHVnZXRsYi1tYWR2aXNlXG4gQ0FURUdPUlk9XCYjMzQ7aHVnZXRsYlwmIzM0OyBydW5fdGVzdCAuL2h1Z2V0bGJfZGlvXG4gQ0FURUdPUlk9XCYjMzQ7aHVnZXRsYlwmIzM0OyBydW5fdGVzdCAuL2h1Z2V0bGJfZmF1bHRfYWZ0ZXJfbWFkdlxuIENBVEVHT1JZPVwmIzM0O2h1Z2V0bGJcJiMzNDsgcnVuX3Rlc3QgLi9odWdldGxiX21hZHZfdnNfbWFwXG4mIzQzO0NBVEVHT1JZPVwmIzM0O2h1Z2V0bGJcJiMzNDsgcnVuX3Rlc3QgLi9odWdldGxiX3JlZ2lvbl9jYWNoZV9yYWNlXG4gXG4gaWYgdGVzdF9zZWxlY3RlZCBcJiMzNDtodWdldGxiXCYjMzQ7OyB0aGVuXG4gXHRlY2hvIFwmIzM0O05PVEU6IFRoZXNlIGh1Z2V0bGIgdGVzdHMgcHJvdmlkZSBtaW5pbWFsIGNvdmVyYWdlLiAgVXNlXCYjMzQ7XHQgIHwgdGFwX3ByZWZpeFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDIyOjM4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FsbG9jYXRlX2ZpbGVfcmVnaW9uX2VudHJpZXMmIzM0OywKICAgICYjMzQ7cmVnaW9uX2FkZCYjMzQ7LAogICAgJiMzNDtyZWdpb25fY2hnJiMzNDssCiAgICAmIzM0O3JlZ2lvbl9kZWwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBsaXN0IGNvcnJ1cHRpb24gYnVnIGluIGFsbG9jYXRlX2ZpbGVfcmVnaW9uX2VudHJpZXMgaW4gaHVnZXRsYmZzLiBUaGUgYnVnIGlzIHRyaWdnZXJlZCBieSBhIHJhY2UgY29uZGl0aW9uIHdoZW4gdGhlIHJlZ2lvbiBjYWNoZSBuZWVkcyB0byBiZSByZWZpbGxlZCBtdWx0aXBsZSB0aW1lcy4gRnV6emluZyBodWdldGxiZnMgcmVzZXJ2YXRpb24gZnVuY3Rpb25zIGNhbiBoZWxwIGVuc3VyZSB0aGUgZml4IGlzIHJvYnVzdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOGFkYmQ1YjZmNGI0NjdhYWUxMmNiOTE3NTBjMWIwYjg2NzQyYjZlNgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gSnVsIDEzIDIyOjM4OjEyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYi5jIGIvbW0vaHVnZXRsYi5jCmluZGV4IDU3MTIxMmI4MDgzNWVjLi5mOTU3N2E3ODlmZTY0ZiAxMDA2NDQKLS0tIGEvbW0vaHVnZXRsYi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2V0bGIuYwpAQCAtNjkzLDcgJiM0Mzs2OTMsNyBAQCBzdGF0aWMgaW50IGFsbG9jYXRlX2ZpbGVfcmVnaW9uX2VudHJpZXMoc3RydWN0IHJlc3ZfbWFwICpyZXN2LAogCiAJCXNwaW5fbG9jaygmYW1wO3Jlc3YtJmd0O2xvY2spOwogCi0JCWxpc3Rfc3BsaWNlKCZhbXA7YWxsb2NhdGVkX3JlZ2lvbnMsICZhbXA7cmVzdi0mZ3Q7cmVnaW9uX2NhY2hlKTsKJiM0MzsJCWxpc3Rfc3BsaWNlX2luaXQoJmFtcDthbGxvY2F0ZWRfcmVnaW9ucywgJmFtcDtyZXN2LSZndDtyZWdpb25fY2FjaGUpOwogCQlyZXN2LSZndDtyZWdpb25fY2FjaGVfY291bnQgJiM0Mzs9IHRvX2FsbG9jYXRlOwogCX0KIApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vLmdpdGlnbm9yZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLy5naXRpZ25vcmUKaW5kZXggOWNjZDllMTQ0N2U2NmIuLjdkYjg2NTc5NjBkOWYwIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8uZ2l0aWdub3JlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLy5naXRpZ25vcmUKQEAgLTU5LDYgJiM0Mzs1OSw3IEBAIGh1Z2V0bGJfbWFkdl92c19tYXAKIG1zZWFsX3Rlc3QKIGRyb3BwYWJsZQogaHVnZXRsYl9kaW8KJiM0MztodWdldGxiX3JlZ2lvbl9jYWNoZV9yYWNlCiBwa2V5X3NpZ2hhbmRsZXJfdGVzdHNfMzIKIHBrZXlfc2lnaGFuZGxlcl90ZXN0c182NAogZ3VhcmQtcmVnaW9ucwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZQppbmRleCBlNmRmOTY4ZjA5NzFjOC4uNDIxYTBiN2ZkZGRmMjggMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlCkBAIC02Nyw2ICYjNDM7NjcsNyBAQCBURVNUX0dFTl9GSUxFUyAmIzQzOz0gaHVnZXRsYi1yZWFkLWh3cG9pc29uCiBURVNUX0dFTl9GSUxFUyAmIzQzOz0gaHVnZXRsYi1zaG0KIFRFU1RfR0VOX0ZJTEVTICYjNDM7PSBodWdldGxiLXNvZnQtb2ZmbGluZQogVEVTVF9HRU5fRklMRVMgJiM0Mzs9IGh1Z2V0bGItdm1lbW1hcAomIzQzO1RFU1RfR0VOX0ZJTEVTICYjNDM7PSBodWdldGxiX3JlZ2lvbl9jYWNoZV9yYWNlCiBURVNUX0dFTl9GSUxFUyAmIzQzOz0ga2h1Z2VwYWdlZAogVEVTVF9HRU5fRklMRVMgJiM0Mzs9IG1hZHZfcG9wdWxhdGUKIFRFU1RfR0VOX0ZJTEVTICYjNDM7PSBtYXBfZml4ZWRfbm9yZXBsYWNlCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX3JlZ2lvbl9jYWNoZV9yYWNlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX3JlZ2lvbl9jYWNoZV9yYWNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjZlM2Y3NTM2NDBiZThjCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9yZWdpb25fY2FjaGVfcmFjZS5jCkBAIC0wLDAgJiM0MzsxLDMxNSBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyoKJiM0MzsgKiBSZWdyZXNzaW9uIHRlc3QgZm9yIGxpc3QgY29ycnVwdGlvbiBpbgomIzQzOyAqIG1tL2h1Z2V0bGIuYzphbGxvY2F0ZV9maWxlX3JlZ2lvbl9lbnRyaWVzKCkuCiYjNDM7ICoKJiM0MzsgKiBGb3JrIHByb2Nlc3NlcyBzaGFyaW5nIGEgaHVnZXRsYiBpbm9kZSB2aWEgYG1lbWZkX2NyZWF0ZShNRkRfSFVHRVRMQilgCiYjNDM7ICogYW5kIGhhdmUgdGhlbSBmYXVsdCByYW5nZXMgYW5kIHB1bmNoIGhvbGVzIHRvIGZyYWdtZW50IHRoZSBzaGFyZWQKJiM0MzsgKiBgcmVzdl9tYXBgIHdoaWxlIGRyYWluaW5nIGByZXN2LSZndDtyZWdpb25fY2FjaGVgIGZyb20gYSBzZXBhcmF0ZSBhZGRyZXNzCiYjNDM7ICogc3BhY2UuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBfR05VX1NPVVJDRQomIzQzOyNpbmNsdWRlICZsdDtlcnJuby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtmY250bC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzZXRqbXAuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c2lnbmFsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGJvb2wuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkaW50LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGxpYi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7dGltZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL21tYW4uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL3N5c2NhbGwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL3dhaXQuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZmFsbG9jLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L21lbWZkLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDsuLi9rc2VsZnRlc3QuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtodWdlcGFnZV9zZXR0aW5ncy5oJiMzNDsKJiM0MzsKJiM0MzsvKiBUdW5hYmxlcyAob3ZlcnJpZGFibGUgdmlhIGFyZ3YpLiAqLwomIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIGZpbGVfcGFnZXMgPSA2NDsJLyogaHVnZSBwYWdlcyBiYWNraW5nIHRoZSBzaGFyZWQgZmlsZSAqLwomIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQgbnJfcHJvY3M7CQkvKiAwID0mZ3Q7IGF1dG8gKDIgKiBuciBvbmxpbmUgY3B1cykgKi8KJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IGR1cmF0aW9uX3NlYyA9IDU7CS8qIC0tdHJpZ2dlciBydW4gdGltZSAqLwomIzQzOwomIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIGh1Z2VfcGFnZV9zaXplOwkvKiBieXRlcyAqLwomIzQzO3N0YXRpYyBpbnQgbWVtZmQgPSAtMTsKJiM0MztzdGF0aWMgdm9sYXRpbGUgaW50ICpzdG9wOwkJLyogc2hhcmVkIGFjcm9zcyBmb3JrZWQgY2hpbGRyZW4gKi8KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFBlci1wcm9jZXNzIFNJR0JVUyBlc2NhcGU6IGEgZmF1bHQgY2FuIGZhaWwgKHBvb2wgZXhoYXVzdGVkKSBhbmQgcmFpc2UKJiM0MzsgKiBTSUdCVVM7IGp1bXAgYmFjayBhbmQgYWJhbmRvbiB0aGUgcmVzdCBvZiB0aGUgY3VycmVudCByYW5nZSBpbnN0ZWFkIG9mCiYjNDM7ICogZHlpbmcuICBFYWNoIGNoaWxkIGlzIHNpbmdsZS10aHJlYWRlZCwgc28gYSBmaWxlLXNjb3BlIGJ1ZmZlciBpcyBmaW5lLgomIzQzOyAqLwomIzQzO3N0YXRpYyBzaWdqbXBfYnVmIHNpZ2J1c19lbnY7CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgc2lnYnVzX2hhbmRsZXIoaW50IHNpZykKJiM0Mzt7CiYjNDM7CXNpZ2xvbmdqbXAoc2lnYnVzX2VudiwgMSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGluc3RhbGxfc2lnYnVzX2hhbmRsZXIodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzaWdhY3Rpb24gc2EgPSB7CiYjNDM7CQkuc2FfaGFuZGxlciA9IHNpZ2J1c19oYW5kbGVyLAomIzQzOwl9OwomIzQzOwomIzQzOwlzaWdlbXB0eXNldCgmYW1wO3NhLnNhX21hc2spOwomIzQzOwlzaWdhY3Rpb24oU0lHQlVTLCAmYW1wO3NhLCBOVUxMKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGxvbmcgc3lzX21lbWZkX2NyZWF0ZShjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiYjNDM7ewomIzQzOwlyZXR1cm4gc3lzY2FsbChfX05SX21lbWZkX2NyZWF0ZSwgbmFtZSwgZmxhZ3MpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIE1hcCBbc3RhcnQsIHN0YXJ0JiM0MztsZW4pIG9mIHRoZSBzaGFyZWQgZmlsZSBhbmQgZmF1bHQgZXZlcnkgcGFnZSBpbi4KJiM0MzsgKgomIzQzOyAqIFRoZSBtbWFwKCkgZHJpdmVzIG1tYXAtdGltZSBodWdldGxiX3Jlc2VydmVfcGFnZXMgLSZndDsgcmVnaW9uX2NoZyAodGhlCiYjNDM7ICogd2lkZS13aW5kb3cgdmljdGltIHdoZW4gdGhlIHJhbmdlIGlzIGZyYWdtZW50ZWQpICYjNDM7IHJlZ2lvbl9hZGQuICBUaGUKJiM0MzsgKiBzdWJzZXF1ZW50IHN0b3JlcyBmYXVsdCBwYWdlcyBpbiAqd2l0aG91dCogaW5vZGVfbG9jaywgZHJpdmluZyB0aGUKJiM0MzsgKiBsb2NrLWZyZWUgcmVnaW9uX2FkZC9yZWdpb25fY2hnIHRoYXQgZHJhaW5zIHJlc3YtJmd0O3JlZ2lvbl9jYWNoZSAtLSB0aGUKJiM0MzsgKiBjb25jdXJyZW5jeSB0aGUgYnVnZ3kgbG9vcCBuZWVkcyBmcm9tICpvdGhlciogcHJvY2Vzc2VzLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIG1hcF9hbmRfZmF1bHRfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBsZW4pCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIGk7CiYjNDM7CWNoYXIgKmFkZHI7CiYjNDM7CiYjNDM7CWlmICghbGVuKQomIzQzOwkJcmV0dXJuOwomIzQzOwlhZGRyID0gbW1hcChOVUxMLCBsZW4gKiBodWdlX3BhZ2Vfc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwKJiM0MzsJCSAgICBNQVBfU0hBUkVELCBtZW1mZCwgc3RhcnQgKiBodWdlX3BhZ2Vfc2l6ZSk7CiYjNDM7CWlmIChhZGRyID09IE1BUF9GQUlMRUQpCiYjNDM7CQlyZXR1cm47CQkvKiBFTk9NRU0gdW5kZXIgcG9vbCBwcmVzc3VyZSBpcyBmaW5lICovCiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBsZW47IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAoc2lnc2V0am1wKHNpZ2J1c19lbnYsIDEpID09IDApCiYjNDM7CQkJKih2b2xhdGlsZSBjaGFyICopKGFkZHIgJiM0MzsgaSAqIGh1Z2VfcGFnZV9zaXplKSA9IChjaGFyKWk7CiYjNDM7CQllbHNlCiYjNDM7CQkJYnJlYWs7CS8qIFNJR0JVUzogcG9vbCBleGhhdXN0ZWQsIHN0b3AgZmF1bHRpbmcgKi8KJiM0MzsJfQomIzQzOwltdW5tYXAoYWRkciwgbGVuICogaHVnZV9wYWdlX3NpemUpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFJlbW92ZSBbc3RhcnQsIHN0YXJ0JiM0MztsZW4pIGh1Z2UgcGFnZXMgZnJvbSB0aGUgc2hhcmVkIGZpbGUsIGRyaXZpbmcKJiM0MzsgKiBodWdldGxiZnNfcHVuY2hfaG9sZSAtJmd0OyByZW1vdmVfaW5vZGVfaHVnZXBhZ2VzIC0mZ3Q7IHJlZ2lvbl9kZWwgZm9yIHRoZSBwYWdlcwomIzQzOyAqIHRoYXQgd2VyZSBmYXVsdGVkIGluIGFib3ZlLiAgVGhpcyBmcmVlcyBwYWdlcyBiYWNrIHRvIHRoZSBwb29sIChib3VuZGluZwomIzQzOyAqIHJlc2lkZW5jeSkgYW5kIHJlLWZyYWdtZW50cyB0aGUgcmVzdl9tYXAgc28gbGF0ZXIgcmVnaW9uX2NoZyBjYWxscyBrZWVwCiYjNDM7ICogbmVlZGluZyBtdWx0aXBsZSBlbnRyaWVzLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHB1bmNoX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgbGVuKQomIzQzO3sKJiM0MzsJaWYgKCFsZW4pCiYjNDM7CQlyZXR1cm47CiYjNDM7CWZhbGxvY2F0ZShtZW1mZCwgRkFMTE9DX0ZMX1BVTkNIX0hPTEUgfCBGQUxMT0NfRkxfS0VFUF9TSVpFLAomIzQzOwkJICBzdGFydCAqIGh1Z2VfcGFnZV9zaXplLCBsZW4gKiBodWdlX3BhZ2Vfc2l6ZSk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogT25lIGZvcmtlZCB3b3JrZXIuICBFYWNoIHdvcmtlciBpcyBzaW11bHRhbmVvdXNseSBhIHZpY3RpbSAoaXRzIHdpZGUKJiM0MzsgKiBtbWFwLXRpbWUgcmVnaW9uX2NoZykgYW5kLCBmb3IgdGhlIG90aGVyIHdvcmtlcnMsIGEgbG9jay1mcmVlIGNhY2hlCiYjNDM7ICogZHJhaW5lciAoaXRzIGZhdWx0cykgLS0gZXhhY3RseSB0aGUgc2hhcmVkLWlub2RlIG1hcCYjNDM7ZmF1bHQgY2h1cm4gc2VlbiBpbgomIzQzOyAqIHRoZSBvcmlnaW5hbCBjcmFzaCAoUUVNVSBwcmVhbGxvYyAmIzQzOyBTUERLL0J5dGVsaWdodCBvbiBvbmUgZ3Vlc3QtUkFNIGZpbGUpLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGNoaWxkX3dvcmtlcih1bnNpZ25lZCBpbnQgaWQpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBpbnQgc2VlZCA9IGlkICogMjY1NDQzNTc2MXUgXiAodW5zaWduZWQgaW50KXRpbWUoTlVMTCkgXgomIzQzOwkJCSAgICAoKHVuc2lnbmVkIGludClnZXRwaWQoKSAmbHQ7Jmx0OyAxKTsKJiM0MzsKJiM0MzsJaW5zdGFsbF9zaWdidXNfaGFuZGxlcigpOwomIzQzOwomIzQzOwl3aGlsZSAoISpzdG9wKSB7CiYjNDM7CQl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gcmFuZF9yKCZhbXA7c2VlZCkgJSBmaWxlX3BhZ2VzOwomIzQzOwkJdW5zaWduZWQgbG9uZyBsZW4gPSAxICYjNDM7IHJhbmRfcigmYW1wO3NlZWQpICUgKGZpbGVfcGFnZXMgLSBzdGFydCk7CiYjNDM7CiYjNDM7CQkvKgomIzQzOwkJICogQmlhcyB0b3dhcmQgbWFwJiM0MztmYXVsdCAodmljdGltcyBhbmQgZHJhaW5lcnMpOyBwdW5jaCBhCiYjNDM7CQkgKiBxdWFydGVyIG9mIHRoZSB0aW1lIHRvIGtlZXAgdGhlIG1hcCBmcmFnbWVudGVkIGFuZCB0byBjYXAKJiM0MzsJCSAqIGhvdyBtYW55IHBhZ2VzIHN0YXkgcmVzaWRlbnQuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChyYW5kX3IoJmFtcDtzZWVkKSAlIDQpCiYjNDM7CQkJbWFwX2FuZF9mYXVsdF9yYW5nZShzdGFydCwgbGVuKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlwdW5jaF9yYW5nZShzdGFydCwgbGVuKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFNhZmUsIHNpbmdsZS1wcm9jZXNzIGZ1bmN0aW9uYWwgY2hlY2suICBJdCBmcmFnbWVudHMgdGhlIHNoYXJlZCByZXN2X21hcAomIzQzOyAqIChyZXNlcnZhdGlvbnMgZm9yIGEgc2hhcmVkIG1hcHBpbmcgcGVyc2lzdCBvbiB0aGUgaW5vZGUgYWZ0ZXIgbXVubWFwKSBzbwomIzQzOyAqIHRoYXQgYSBzdWJzZXF1ZW50IHdob2xlLWZpbGUgbW1hcCBtYWtlcyByZWdpb25fY2hnIGNvbXB1dGUKJiM0MzsgKiByZWdpb25zX25lZWRlZCAmZ3Q7IDEsIGZvcmNpbmcgYWxsb2NhdGVfZmlsZV9yZWdpb25fZW50cmllcyB0byBhbGxvY2F0ZSBhbmQKJiM0MzsgKiBzcGxpY2Ugc2V2ZXJhbCBlbnRyaWVzLiAgVGhpcyBleGVyY2lzZXMgdGhlIGJ1Z2d5IGxpbmUsIGJ1dCB3aXRob3V0CiYjNDM7ICogY29uY3VycmVuY3kgaXQgYWx3YXlzIG1ha2VzIGV4YWN0bHkgb25lIGxvb3AgaXRlcmF0aW9uLCBzbyBpdCBjYW5ub3QgdHJpcAomIzQzOyAqIHRoZSByYWNlIGFuZCBpcyBzYWZlIG9uIGFueSBrZXJuZWwuICBSZXR1cm5zIDAgb24gc3VjY2Vzcy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IGZ1bmN0aW9uYWxfY2hlY2sodm9pZCkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGxvbmcgaTsKJiM0MzsJdm9pZCAqYWRkcjsKJiM0MzsKJiM0MzsJLyogUHVuY2ggZXZlcnl0aGluZyBzbyB3ZSBzdGFydCBmcm9tIGFuIGVtcHR5IHJlc3ZfbWFwLiAqLwomIzQzOwlwdW5jaF9yYW5nZSgwLCBmaWxlX3BhZ2VzKTsKJiM0MzsKJiM0MzsJLyogUmVzZXJ2ZSBldmVyeSBvdGhlciBodWdlIHBhZ2UgLSZndDsgfmZpbGVfcGFnZXMvMiBkaXNqb2ludCByZWdpb25zLiAqLwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgZmlsZV9wYWdlczsgaSAmIzQzOz0gMikKJiM0MzsJCW1hcF9hbmRfZmF1bHRfcmFuZ2UoaSwgMSk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIE9uZSBtYXBwaW5nIHNwYW5uaW5nIHRoZSB3aG9sZSBmaWxlIG11c3QgZmlsbCBhbGwgdGhlIGhvbGVzIGluIGEKJiM0MzsJICogc2luZ2xlIHJlZ2lvbl9jaGcgLSZndDsgYSBtdWx0aS1lbnRyeSByZWdpb25fY2FjaGUgcmVmaWxsLgomIzQzOwkgKi8KJiM0MzsJYWRkciA9IG1tYXAoTlVMTCwgZmlsZV9wYWdlcyAqIGh1Z2VfcGFnZV9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLAomIzQzOwkJICAgIE1BUF9TSEFSRUQsIG1lbWZkLCAwKTsKJiM0MzsJaWYgKGFkZHIgPT0gTUFQX0ZBSUxFRCkgewomIzQzOwkJa3NmdF9wcmludF9tc2coJiMzNDt3aG9sZS1maWxlIG1tYXAgZmFpbGVkOiAlc1xuJiMzNDssIHN0cmVycm9yKGVycm5vKSk7CiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CX0KJiM0MzsJbXVubWFwKGFkZHIsIGZpbGVfcGFnZXMgKiBodWdlX3BhZ2Vfc2l6ZSk7CiYjNDM7CXB1bmNoX3JhbmdlKDAsIGZpbGVfcGFnZXMpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydW5fdHJpZ2dlcih2b2lkKQomIzQzO3sKJiM0MzsJcGlkX3QgKnBpZHM7CiYjNDM7CXVuc2lnbmVkIGludCBpLCBzdGFydGVkID0gMDsKJiM0MzsKJiM0MzsJc3RvcCA9IG1tYXAoTlVMTCwgc2l6ZW9mKCpzdG9wKSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwKJiM0MzsJCSAgICBNQVBfU0hBUkVEIHwgTUFQX0FOT05ZTU9VUywgLTEsIDApOwomIzQzOwlpZiAoc3RvcCA9PSBNQVBfRkFJTEVEKQomIzQzOwkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7bW1hcChzdG9wIGZsYWcpOiAlc1xuJiMzNDssIHN0cmVycm9yKGVycm5vKSk7CiYjNDM7CSpzdG9wID0gMDsKJiM0MzsKJiM0MzsJcGlkcyA9IGNhbGxvYyhucl9wcm9jcywgc2l6ZW9mKCpwaWRzKSk7CiYjNDM7CWlmICghcGlkcykKJiM0MzsJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O2NhbGxvYzogJXNcbiYjMzQ7LCBzdHJlcnJvcihlcnJubykpOwomIzQzOwomIzQzOwlrc2Z0X3ByaW50X21zZygmIzM0O3N0cmVzc2luZyAldSBwcm9jZXNzZXMgZm9yICV1cyBvbiAlbHUgaHVnZSBwYWdlcyAoJWx1IE1pQilcbiYjMzQ7LAomIzQzOwkJICAgICAgIG5yX3Byb2NzLCBkdXJhdGlvbl9zZWMsIGZpbGVfcGFnZXMsCiYjNDM7CQkgICAgICAgKGZpbGVfcGFnZXMgKiBodWdlX3BhZ2Vfc2l6ZSkgJmd0OyZndDsgMjApOwomIzQzOwlrc2Z0X3ByaW50X21zZygmIzM0O1dBUk5JTkc6IGEgdnVsbmVyYWJsZSBrZXJuZWwgd2lsbCBwYW5pYyBoZXJlXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBucl9wcm9jczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXBpZF90IHBpZCA9IGZvcmsoKTsKJiM0MzsKJiM0MzsJCWlmIChwaWQgJmx0OyAwKSB7CiYjNDM7CQkJa3NmdF9wcmludF9tc2coJiMzNDtmb3JrOiAlc1xuJiMzNDssIHN0cmVycm9yKGVycm5vKSk7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CQlpZiAocGlkID09IDApIHsKJiM0MzsJCQlmcmVlKHBpZHMpOwomIzQzOwkJCWNoaWxkX3dvcmtlcihpKTsKJiM0MzsJCQlfZXhpdCgwKTsKJiM0MzsJCX0KJiM0MzsJCXBpZHNbc3RhcnRlZCYjNDM7JiM0MztdID0gcGlkOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghc3RhcnRlZCkgewomIzQzOwkJZnJlZShwaWRzKTsKJiM0MzsJCW11bm1hcCgodm9pZCAqKXN0b3AsIHNpemVvZigqc3RvcCkpOwomIzQzOwkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7bm8gd29ya2VyIHByb2Nlc3NlcyBzdGFydGVkXG4mIzM0Oyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc2xlZXAoZHVyYXRpb25fc2VjKTsKJiM0MzsJKnN0b3AgPSAxOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgc3RhcnRlZDsgaSYjNDM7JiM0MzspCiYjNDM7CQl3YWl0cGlkKHBpZHNbaV0sIE5VTEwsIDApOwomIzQzOwlmcmVlKHBpZHMpOwomIzQzOwltdW5tYXAoKHZvaWQgKilzdG9wLCBzaXplb2YoKnN0b3ApKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHVzYWdlKGNvbnN0IGNoYXIgKnByb2cpCiYjNDM7ewomIzQzOwlmcHJpbnRmKHN0ZGVyciwKJiM0MzsJCSYjMzQ7dXNhZ2U6ICVzIFstLXRyaWdnZXJdIFstcyBodWdlX3BhZ2VzXSBbLXQgcHJvY3NdIFstZCBzZWNvbmRzXVxuJiMzNDsKJiM0MzsJCSYjMzQ7ICAoZGVmYXVsdCkgcnVuIGEgc2FmZSBzaW5nbGUtcHJvY2VzcyBmdW5jdGlvbmFsIGNoZWNrXG4mIzM0OwomIzQzOwkJJiMzNDsgIC0tdHJpZ2dlciBmb3JrJiM0MztmYXVsdCBjb25jdXJyZW50IHJlcHJvZHVjZXIgKENBTiBQQU5JQyBBIEJVR0dZIEhPU1QpXG4mIzM0OwomIzQzOwkJJiMzNDsgIC1zICBodWdlIHBhZ2VzIGJhY2tpbmcgdGhlIHNoYXJlZCBmaWxlIChkZWZhdWx0ICVsdSlcbiYjMzQ7CiYjNDM7CQkmIzM0OyAgLXQgIHdvcmtlciBwcm9jZXNzZXMgZm9yIC0tdHJpZ2dlciAoZGVmYXVsdCAyICogbnJfY3B1cylcbiYjMzQ7CiYjNDM7CQkmIzM0OyAgLWQgIC0tdHJpZ2dlciBydW4gdGltZSBpbiBzZWNvbmRzIChkZWZhdWx0ICV1KVxuJiMzNDssCiYjNDM7CQlwcm9nLCBmaWxlX3BhZ2VzLCBkdXJhdGlvbl9zZWMpOwomIzQzO30KJiM0MzsKJiM0MztpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQomIzQzO3sKJiM0MzsJYm9vbCB0cmlnZ2VyID0gZmFsc2U7CiYjNDM7CWludCBpLCByZXQ7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDE7IGkgJmx0OyBhcmdjOyBpJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKCFzdHJjbXAoYXJndltpXSwgJiMzNDstLXRyaWdnZXImIzM0OykpIHsKJiM0MzsJCQl0cmlnZ2VyID0gdHJ1ZTsKJiM0MzsJCX0gZWxzZSBpZiAoIXN0cmNtcChhcmd2W2ldLCAmIzM0Oy1zJiMzNDspICZhbXA7JmFtcDsgaSAmIzQzOyAxICZsdDsgYXJnYykgewomIzQzOwkJCWZpbGVfcGFnZXMgPSBzdHJ0b3VsKGFyZ3ZbJiM0MzsmIzQzO2ldLCBOVUxMLCAwKTsKJiM0MzsJCX0gZWxzZSBpZiAoIXN0cmNtcChhcmd2W2ldLCAmIzM0Oy10JiMzNDspICZhbXA7JmFtcDsgaSAmIzQzOyAxICZsdDsgYXJnYykgewomIzQzOwkJCW5yX3Byb2NzID0gc3RydG91bChhcmd2WyYjNDM7JiM0MztpXSwgTlVMTCwgMCk7CiYjNDM7CQl9IGVsc2UgaWYgKCFzdHJjbXAoYXJndltpXSwgJiMzNDstZCYjMzQ7KSAmYW1wOyZhbXA7IGkgJiM0MzsgMSAmbHQ7IGFyZ2MpIHsKJiM0MzsJCQlkdXJhdGlvbl9zZWMgPSBzdHJ0b3VsKGFyZ3ZbJiM0MzsmIzQzO2ldLCBOVUxMLCAwKTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJdXNhZ2UoYXJndlswXSk7CiYjNDM7CQkJcmV0dXJuIEtTRlRfRkFJTDsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlrc2Z0X3ByaW50X2hlYWRlcigpOwomIzQzOwlrc2Z0X3NldF9wbGFuKDEpOwomIzQzOwomIzQzOwlpZiAoZmlsZV9wYWdlcyAmbHQ7IDQpCiYjNDM7CQlmaWxlX3BhZ2VzID0gNDsKJiM0MzsJaWYgKCFucl9wcm9jcykgewomIzQzOwkJbG9uZyBjcHVzID0gc3lzY29uZihfU0NfTlBST0NFU1NPUlNfT05MTik7CiYjNDM7CiYjNDM7CQlucl9wcm9jcyA9IGNwdXMgJmd0OyAwID8gKHVuc2lnbmVkIGludCljcHVzICogMiA6IDQ7CiYjNDM7CX0KJiM0MzsJaWYgKG5yX3Byb2NzICZsdDsgMikKJiM0MzsJCW5yX3Byb2NzID0gMjsKJiM0MzsKJiM0MzsJaHVnZV9wYWdlX3NpemUgPSBkZWZhdWx0X2h1Z2VfcGFnZV9zaXplKCk7CiYjNDM7CWlmICghaHVnZV9wYWdlX3NpemUpCiYjNDM7CQlrc2Z0X2V4aXRfc2tpcCgmIzM0O25vIGh1Z2V0bGJmcyAvIGh1Z2UgcGFnZSBzaXplIGF2YWlsYWJsZVxuJiMzNDspOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBCb3RoIG1vZGVzIGZhdWx0IHBhZ2VzIGluIChmdW5jdGlvbmFsX2NoZWNrIHRvdWNoZXMgZXZlcnkgcGFnZSBpdAomIzQzOwkgKiBtYXBzLCBhbmQgLS10cmlnZ2VyJiMzOTtzIHdvcmtlcnMgZmF1bHQgdGhlIHJhbmdlcyB0aGV5IG1hcCksIHNvIHRoZQomIzQzOwkgKiB3aG9sZSBmaWxlIG1heSBiZWNvbWUgcmVzaWRlbnQ7IHJlcXVpcmUgdGhhdCBtYW55ICpmcmVlKiBodWdlIHBhZ2VzLAomIzQzOwkgKiBub3QganVzdCByZXNlcnZhdGlvbnMuCiYjNDM7CSAqLwomIzQzOwlpZiAoaHVnZXRsYl9mcmVlX2RlZmF1bHRfcGFnZXMoKSAmbHQ7IGZpbGVfcGFnZXMpCiYjNDM7CQlrc2Z0X2V4aXRfc2tpcCgmIzM0O25lZWQgJWx1IGZyZWUgaHVnZSBwYWdlcywgaGF2ZSAlbHUgKHNldCBucl9odWdlcGFnZXMpXG4mIzM0OywKJiM0MzsJCQkgICAgICAgZmlsZV9wYWdlcywgaHVnZXRsYl9mcmVlX2RlZmF1bHRfcGFnZXMoKSk7CiYjNDM7CiYjNDM7CW1lbWZkID0gc3lzX21lbWZkX2NyZWF0ZSgmIzM0O2h1Z2V0bGJfcmVnaW9uX2NhY2hlX3JhY2UmIzM0OywKJiM0MzsJCQkJIE1GRF9IVUdFVExCIHwKJiM0MzsJCQkJIChfX2J1aWx0aW5fY3R6bChodWdlX3BhZ2Vfc2l6ZSkgJmx0OyZsdDsgTUZEX0hVR0VfU0hJRlQpKTsKJiM0MzsJaWYgKG1lbWZkICZsdDsgMCkKJiM0MzsJCWtzZnRfZXhpdF9za2lwKCYjMzQ7bWVtZmRfY3JlYXRlKE1GRF9IVUdFVExCKTogJXNcbiYjMzQ7LAomIzQzOwkJCSAgICAgICBzdHJlcnJvcihlcnJubykpOwomIzQzOwlpZiAoZnRydW5jYXRlKG1lbWZkLCBmaWxlX3BhZ2VzICogaHVnZV9wYWdlX3NpemUpKSB7CiYjNDM7CQljbG9zZShtZW1mZCk7CiYjNDM7CQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtmdHJ1bmNhdGU6ICVzXG4mIzM0Oywgc3RyZXJyb3IoZXJybm8pKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAodHJpZ2dlcikKJiM0MzsJCXJldCA9IHJ1bl90cmlnZ2VyKCk7CiYjNDM7CWVsc2UKJiM0MzsJCXJldCA9IGZ1bmN0aW9uYWxfY2hlY2soKTsKJiM0MzsKJiM0MzsJY2xvc2UobWVtZmQpOwomIzQzOwomIzQzOwlpZiAocmV0KQomIzQzOwkJa3NmdF90ZXN0X3Jlc3VsdF9mYWlsKCYjMzQ7aHVnZXRsYiByZWdpb25fY2FjaGUgcmFjZSBjaGVja1xuJiMzNDspOwomIzQzOwllbHNlIGlmICh0cmlnZ2VyKQomIzQzOwkJa3NmdF90ZXN0X3Jlc3VsdF9wYXNzKCYjMzQ7c3Vydml2ZWQgY29uY3VycmVudCByZWdpb25fY2FjaGUgY2h1cm5cbiYjMzQ7KTsKJiM0MzsJZWxzZQomIzQzOwkJa3NmdF90ZXN0X3Jlc3VsdF9wYXNzKCYjMzQ7bXVsdGktZW50cnkgcmVnaW9uX2NhY2hlIHJlZmlsbCB3b3Jrc1xuJiMzNDspOwomIzQzOwomIzQzOwlrc2Z0X2ZpbmlzaGVkKCk7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaAppbmRleCA4YzI5NmRlZGYwNDc0ZC4uMGNiODU3MDU2OTE1ZjQgMTAwNzU1Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoCkBAIC0yNjcsNiAmIzQzOzI2Nyw3IEBAIENBVEVHT1JZPSYjMzQ7aHVnZXRsYiYjMzQ7IHJ1bl90ZXN0IC4vaHVnZXRsYi1tYWR2aXNlCiBDQVRFR09SWT0mIzM0O2h1Z2V0bGImIzM0OyBydW5fdGVzdCAuL2h1Z2V0bGJfZGlvCiBDQVRFR09SWT0mIzM0O2h1Z2V0bGImIzM0OyBydW5fdGVzdCAuL2h1Z2V0bGJfZmF1bHRfYWZ0ZXJfbWFkdgogQ0FURUdPUlk9JiMzNDtodWdldGxiJiMzNDsgcnVuX3Rlc3QgLi9odWdldGxiX21hZHZfdnNfbWFwCiYjNDM7Q0FURUdPUlk9JiMzNDtodWdldGxiJiMzNDsgcnVuX3Rlc3QgLi9odWdldGxiX3JlZ2lvbl9jYWNoZV9yYWNlCiAKIGlmIHRlc3Rfc2VsZWN0ZWQgJiMzNDtodWdldGxiJiMzNDs7IHRoZW4KIAllY2hvICYjMzQ7Tk9URTogVGhlc2UgaHVnZXRsYiB0ZXN0cyBwcm92aWRlIG1pbmltYWwgY292ZXJhZ2UuICBVc2UmIzM0OwkgIHwgdGFwX3ByZWZpeAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAyMjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTU4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEtlcm5lbCBQYXRjaDogSHVnZVRMQiBNb2RpZmljYXRpb24qKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF0IHRvdWNoZXMgYG1tL2h1Z2V0bGIuY2AgYW5kIGFsc28gYWRkcyBhIG5ldyBzZWxmdGVzdC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyB0aGlzIHN1YnRsZSBtb2RpZmljYXRpb24gd2l0aGluIGBhbGxvY2F0ZV9maWxlX3JlZ2lvbl9lbnRyaWVzYC4gVGhleSYjMzk7dmUgc3dhcHBlZCBvdXQgYGxpc3Rfc3BsaWNlYCBmb3IgYGxpc3Rfc3BsaWNlX2luaXRgIGluIHRoYXQgZnVuY3Rpb24uIFRoYXQmIzM5O3MgYSBzaWduaWZpY2FudCBjaGFuZ2UgdG8gY29yZSBrZXJuZWwgY29kZS4gQW55dGltZSB3ZSBzZWUgc29tZXRoaW5nIGxpa2UgdGhpcywgYSBjaGFuZ2UgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIEh1Z2VUTEIgaW4gdGhpcyBjYXNlLCBteSBmaXJzdCB0aG91Z2h0IGlzICYjMzQ7ZnV6emluZyYjMzQ7LiBUaGlzIG5lZWRzIGEgdGhvcm91Z2ggZXhhbWluYXRpb24uCgpMZXQmIzM5O3MgcXVpY2tseSB2ZXJpZnkgdGhhdCB0aGUgYGFsbG9jYXRlX2ZpbGVfcmVnaW9uX2VudHJpZXNgIGZ1bmN0aW9uIGlzIGluZGVlZCB0aGUgbG9jYXRpb24gb2YgdGhlIGNoYW5nZSwgYXMgaW5kaWNhdGVkIGJ5IHRoZSBkaWZmLiBJJiMzOTtsbCBmaXJlIHVwIGBncmVwcGVyYCBhbmQgZG91YmxlLWNoZWNrLCBidXQgSSYjMzk7bSBwcmV0dHkgc3VyZSB0aGF0JiMzOTtzIHRoZSBvbmUuIExldCYjMzk7cyBtYWtlIHN1cmUgYmVmb3JlIHdlIG1vdmUgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMjI6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2NhdGVfZmlsZV9yZWdpb25fZW50cmllcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2h1Z2V0bGIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdldGxiLmM9NTk0PXN0YXRpYyBsb25nIGFkZF9yZXNlcnZhdGlvbl9pbl9yYW5nZShzdHJ1Y3QgcmVzdl9tYXAgKnJlc3YsIGxvbmcgZiwgbG9uZyB0LFxuLS1cbm1tL2h1Z2V0bGIuYy02NTUtICovXG5tbS9odWdldGxiLmM6NjU2OnN0YXRpYyBpbnQgYWxsb2NhdGVfZmlsZV9yZWdpb25fZW50cmllcyhzdHJ1Y3QgcmVzdl9tYXAgKnJlc3YsXG5tbS9odWdldGxiLmMtNjU3LVx0XHRcdFx0XHRpbnQgcmVnaW9uc19uZWVkZWQpXG4tLVxubW0vaHVnZXRsYi5jPTcyNz1zdGF0aWMgbG9uZyByZWdpb25fYWRkKHN0cnVjdCByZXN2X21hcCAqcmVzdiwgbG9uZyBmLCBsb25nIHQsXG4tLVxubW0vaHVnZXRsYi5jLTc1Ny1cbm1tL2h1Z2V0bGIuYzo3NTg6XHRcdGlmIChhbGxvY2F0ZV9maWxlX3JlZ2lvbl9lbnRyaWVzKFxubW0vaHVnZXRsYi5jLTc1OS1cdFx0XHQgICAgcmVzdiwgYWN0dWFsX3JlZ2lvbnNfbmVlZGVkIC0gaW5fcmVnaW9uc19uZWVkZWQpKSB7XG4tLVxubW0vaHVnZXRsYi5jPTc5ND1zdGF0aWMgbG9uZyByZWdpb25fY2hnKHN0cnVjdCByZXN2X21hcCAqcmVzdiwgbG9uZyBmLCBsb25nIHQsXG4tLVxubW0vaHVnZXRsYi5jLTgwNy1cbm1tL2h1Z2V0bGIuYzo4MDg6XHRpZiAoYWxsb2NhdGVfZmlsZV9yZWdpb25fZW50cmllcyhyZXN2LCAqb3V0X3JlZ2lvbnNfbmVlZGVkKSlcbm1tL2h1Z2V0bGIuYy04MDktXHRcdHJldHVybiAtRU5PTUVNO1xuLS1cbm1tL2h1Z2V0bGIuYz01MTQxPXZvaWQgX191bm1hcF9odWdlcGFnZV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdldGxiLmMtNTI3Mi1cdFx0XHRpZiAocmMgXHUwMDNjIDApXG5tbS9odWdldGxiLmM6NTI3MzpcdFx0XHRcdC8qIFByZXNzdW1hYmx5IGFsbG9jYXRlX2ZpbGVfcmVnaW9uX2VudHJpZXMgZmFpbGVkXG5tbS9odWdldGxiLmMtNTI3NC1cdFx0XHRcdCAqIHRvIGFsbG9jYXRlIGEgZmlsZV9yZWdpb24gc3RydWN0LiBDbGVhclxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDIyOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwODUKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBhbGxvY2F0ZV9maWxlX3JlZ2lvbl9lbnRyaWVzYCBGdW5jdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgYWxsb2NhdGVfZmlsZV9yZWdpb25fZW50cmllc2AgZnVuY3Rpb24g4oCTIHNlZW1zIGltcG9ydGFudCwgYW5kIEkgY2FuIHNlZSBpdCYjMzk7cyBjaGFuZ2VkIGluIGBtbS9odWdldGxiLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSBhc3Nlc3MgYW55IGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBXaXRoIEh1Z2VUTEIgY2hhbmdlcywgYENPTkZJR19IVUdFVExCRlNgIGFuZCBgQ09ORklHX0hVR0VUTEJfUEFHRWAgYXJlIHRoZSBvYnZpb3VzIG9uZXMgdG8gY2hlY2ssIGJ1dCBJIGNhbiYjMzk7dCByZWx5IG9uIG1lbW9yeSBhbG9uZS4gSnVzdCB0byBiZSBzdXJlLCBJIHNob3VsZCB2ZXJpZnkgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb25zIHJlbGF0ZWQgdG8gdGhpcyBhcmVhLiBJJiMzOTtsbCB0YWtlIGEgbG9vayBhdCBgbW0vTWFrZWZpbGVgIHRvIGNvbmZpcm0gd2hpY2ggc2V0dGluZ3MgYXJlIHJlbGV2YW50IHRvIHRoaXMgZnVuY3Rpb24gYW5kIHRoZSBtb2R1bGUgaXQgbGl2ZXMgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMjI6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHVnZXRsYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTgwPW9iai0kKENPTkZJR19IQVNfRE1BKVx0JiM0Mzs9IGRtYXBvb2wub1xubW0vTWFrZWZpbGU6ODE6b2JqLSQoQ09ORklHX0hVR0VUTEJGUylcdCYjNDM7PSBodWdldGxiLm8gaHVnZXRsYl9zeXNmcy5vIGh1Z2V0bGJfc3lzY3RsLm9cbm1tL01ha2VmaWxlLTgyLWlmZGVmIENPTkZJR19DTUFcbm1tL01ha2VmaWxlOjgzOm9iai0kKENPTkZJR19IVUdFVExCRlMpXHQmIzQzOz0gaHVnZXRsYl9jbWEub1xubW0vTWFrZWZpbGUtODQtZW5kaWZcbm1tL01ha2VmaWxlOjg1Om9iai0kKENPTkZJR19IVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUClcdCYjNDM7PSBodWdldGxiX3ZtZW1tYXAub1xubW0vTWFrZWZpbGUtODYtb2JqLSQoQ09ORklHX05VTUEpIFx0JiM0Mzs9IG1lbXBvbGljeS5vXG4tLVxubW0vTWFrZWZpbGU9MTA4PWVuZGlmXG5tbS9NYWtlZmlsZToxMDk6b2JqLSQoQ09ORklHX0NHUk9VUF9IVUdFVExCKSAmIzQzOz0gaHVnZXRsYl9jZ3JvdXAub1xubW0vTWFrZWZpbGUtMTEwLW9iai0kKENPTkZJR19HVVBfVEVTVCkgJiM0Mzs9IGd1cF90ZXN0Lm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAyMjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTg4CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzczoKCioqRGl2aW5nIGludG8gSHVnZVRMQiBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBzbyBJIHNlZSBgQ09ORklHX0hVR0VUTEJGU2AgbWVudGlvbmVkLCB0aGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4gQnV0LCBoYW5nIG9uLCB0aGVyZSYjMzk7cyBhbHNvIGBDT05GSUdfSFVHRVRMQl9QQUdFYCDigJMgdGhvc2UgYXJlIGRlZmluaXRlbHkgaW50ZXJ0d2luZWQuIEkgbmVlZCB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlcy4gTGV0JiMzOTtzIHNlZS4uLiBgaW5pdC9LY29uZmlnYCBpcyBhIHBvc3NpYmlsaXR5LCBidXQgcHJvYmFibHkgbm90IHRoZSBiZXN0IHNwb3QgZm9yIGZpbGUgc3lzdGVtIG9wdGlvbnMsIHNvIGxldCYjMzk7cyBzdGFydCB3aXRoIGBmcy9LY29uZmlnYC4gT3IgbWF5YmUgaXQmIzM5O3MgbWVtb3J5IG1hbmFnZW1lbnQsIHNvIGBtbS9LY29uZmlnYCBtaWdodCBiZSB0aGUgcGxhY2UgdG8gZ28gZmlyc3QuIEkga25vdyBJIHdpbGwgZmluZCBpdCB0aGVyZS4gSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIG9wdGlvbnMgYW5kIGdldCB0aGUgZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAyMjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSFVHRVRMQkZTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL0tjb25maWc9MjQ3PWNvbmZpZyBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU1xuLS1cbmZzL0tjb25maWctMjQ5LVxuZnMvS2NvbmZpZzoyNTA6bWVudWNvbmZpZyBIVUdFVExCRlNcbmZzL0tjb25maWctMjUxLVx0Ym9vbCBcJiMzNDtIdWdlVExCIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAyMjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTE5CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQXNzZXNzaW5nIEh1Z2UgUGFnZSBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIHRoZSBpbml0aWFsIHByb21wdCBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYW4gZXhwZXJ0IGluIHRoaXMgYXJlYSwgaXMgdG8gemVybyBpbiBvbiBgY29uZmlnIEhVR0VUTEJfUEFHRWAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCB3aGVuIGl0IGNvbWVzIHRvIGh1Z2UgcGFnZSBpbXBsZW1lbnRhdGlvbiBhdCBhIGtlcm5lbCBsZXZlbC4gVGhpcyBpcyB0aGUgbHluY2hwaW4g4oCTIHRoZSBtYXN0ZXIgc3dpdGNoIGlmIHlvdSB3aWxsIOKAkyBmb3Igd2hldGhlciBvciBub3QgaHVnZSBwYWdlcyBhcmUgZXZlbiBlbmFibGVkIGFuZCBob3cgdGhlIHN5c3RlbSBldmVuIGxvb2tzIGZvciBsYXJnZSBtZW1vcnkgYmxvY2tzLiBJdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIGFueSBzZXJpb3VzIGludmVzdGlnYXRpb24sIGJlIGl0IHRyb3VibGVzaG9vdGluZyBwZXJmb3JtYW5jZSBpc3N1ZXMsIHZlcmlmeWluZyBhIHNldHVwLCBvciBjb25maXJtaW5nIGEgYnVpbGQgY29uZmlndXJhdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBrbm93IGl0cyBzdGF0ZSB0byBkZXRlcm1pbmUgbmV4dCBzdGVwcy4gSSYjMzk7bSBnb2luZyB0byBkZXRlcm1pbmUgd2hhdCB0aGF0IG1lYW5zIGZvciBwZXJmb3JtYW5jZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMjI6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEhVR0VUTEJfUEFHRSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3NoL21tL0tjb25maWc9MTU4PWNob2ljZVxuLS1cbmFyY2gvc2gvbW0vS2NvbmZpZy0xNjMtXG5hcmNoL3NoL21tL0tjb25maWc6MTY0OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV82NEtcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNjUtXHRib29sIFwmIzM0OzY0a0JcJiMzNDtcbi0tXG5hcmNoL3NoL21tL0tjb25maWctMTY3LVxuYXJjaC9zaC9tbS9LY29uZmlnOjE2ODpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfMjU2S1xuYXJjaC9zaC9tbS9LY29uZmlnLTE2OS1cdGJvb2wgXCYjMzQ7MjU2a0JcJiMzNDtcbi0tXG5hcmNoL3NoL21tL0tjb25maWctMTcxLVxuYXJjaC9zaC9tbS9LY29uZmlnOjE3Mjpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfMU1CXG5hcmNoL3NoL21tL0tjb25maWctMTczLVx0Ym9vbCBcJiMzNDsxTUJcJiMzNDtcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzQtXG5hcmNoL3NoL21tL0tjb25maWc6MTc1OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV80TUJcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzYtXHRib29sIFwmIzM0OzRNQlwmIzM0O1xuLS1cbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzgtXG5hcmNoL3NoL21tL0tjb25maWc6MTc5OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV82NE1CXG5hcmNoL3NoL21tL0tjb25maWctMTgwLVx0Ym9vbCBcJiMzNDs2NE1CXCYjMzQ7XG4tLVxuZnMvS2NvbmZpZz0yNjI9aWYgSFVHRVRMQkZTXG5mcy9LY29uZmlnOjI2Mzpjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBfREVGQVVMVF9PTlxuZnMvS2NvbmZpZy0yNjQtXHRib29sIFwmIzM0O0h1Z2VUTEIgVm1lbW1hcCBPcHRpbWl6YXRpb24gKEhWTykgZGVmYXVsdHMgdG8gb25cJiMzNDtcbi0tXG5mcy9LY29uZmlnPTI3MT1lbmRpZiAjIEhVR0VUTEJGU1xuZnMvS2NvbmZpZy0yNzItXG5mcy9LY29uZmlnOjI3Mzpjb25maWcgSFVHRVRMQl9QQUdFXG5mcy9LY29uZmlnLTI3NC1cdGRlZl9ib29sIEhVR0VUTEJGU1xuLS1cbmZzL0tjb25maWctMjc2LVxuZnMvS2NvbmZpZzoyNzc6Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXG5mcy9LY29uZmlnLTI3OC1cdGRlZl9ib29sIEhVR0VUTEJfUEFHRVxuLS1cbm1tL0tjb25maWc9NzA2PWNvbmZpZyBBUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OXG4tLVxubW0vS2NvbmZpZy03MDgtXG5tbS9LY29uZmlnOjcwOTpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfVkFSSUFCTEVcbm1tL0tjb25maWctNzEwLVx0ZGVmX2Jvb2wgblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAyMjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NzEzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgaHVnZXRsYmZzIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZm9jdXNlZCBvbiBgSFVHRVRMQkZTYCwgdGhhdCYjMzk7cyB0aGUga2V5IGNvbmZpZ3VyYXRpb24gc2V0dGluZyBoZXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgZnVuY3Rpb24gYGFsbG9jYXRlX2ZpbGVfcmVnaW9uX2VudHJpZXNgLiBJdCBsb29rcyBsaWtlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IGByZWdpb25fYWRkYCBhbmQgYHJlZ2lvbl9jaGdgLCB3aGljaCBJIGltbWVkaWF0ZWx5IHJlY29nbml6ZSBhcyBjcml0aWNhbCByb3V0aW5lcyBkZWFsaW5nIHdpdGggaHVnZXRsYmZzIHJlc2VydmF0aW9ucy4gSSBrbm93IHRoZXNlIGFyZSByZWxhdGVkIHRvIG1lbW9yeSBhbGxvY2F0aW9ucyBhbmQgbWFuYWdlbWVudCB3aXRoaW4gdGhlIGh1Z2V0bGJmcy4KClRoZSBidWcgaXMgaW4gYGFsbG9jYXRlX2ZpbGVfcmVnaW9uX2VudHJpZXNgLCBhbmQgaXQgc2VlbXMgbGlrZSB0aGV5IHdlcmUgdXNpbmcgYGxpc3Rfc3BsaWNlYCBpbnN0ZWFkIG9mIGBsaXN0X3NwbGljZV9pbml0YC4gVGhhdCYjMzk7cyBhIHJlZCBmbGFnISBVc2luZyBgbGlzdF9zcGxpY2VgIHdpdGhvdXQgaW5pdGlhbGl6aW5nIHRoZSBkZXN0aW5hdGlvbiBsaXN0IGNhbiBsZWF2ZSBgYWxsb2NhdGVkX3JlZ2lvbnNgIOKAkyBhIGxvY2FsIHZhcmlhYmxlLCBJIG5vdyByZW1lbWJlciDigJMgaW4gYW4gdW5kZWZpbmVkIHN0YXRlLiBJdHMgcG9pbnRlcnMsIHNwZWNpZmljYWxseSBgbmV4dGAgYW5kIGBwcmV2YCwgd291bGQgc3RpbGwgYmUgcmVmZXJlbmNpbmcgdGhlIG9sZCBlbGVtZW50cyB0aGF0IHdlcmUgc3BsaWNlZCAqaW50byogYHJlc3YtJmd0O3JlZ2lvbl9jYWNoZWAuIFRoaXMgY291bGQgbGVhZCB0byBhIHRleHRib29rIGNhc2Ugb2YgbGlzdCBjb3JydXB0aW9uIGRvd24gdGhlIGxpbmUgaWYgYGFsbG9jYXRlZF9yZWdpb25zYCBpcyByZS11c2VkLiBUaGlzIG5lZWRzIGEgZGVlcGVyIGRpdmUsIHNvIGxldCYjMzk7cyBjaGVjayBvdXQgdGhlIGNvZGUgb2YgYGFsbG9jYXRlX2ZpbGVfcmVnaW9uX2VudHJpZXNgIGRpcmVjdGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAyMjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2h1Z2V0bGIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY1NiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjU2Olx0c3RhdGljIGludCBhbGxvY2F0ZV9maWxlX3JlZ2lvbl9lbnRyaWVzKHN0cnVjdCByZXN2X21hcCAqcmVzdixcbiA2NTc6XHRcdFx0XHRcdFx0aW50IHJlZ2lvbnNfbmVlZGVkKVxuIDY1ODpcdFx0X19tdXN0X2hvbGQoXHUwMDI2cmVzdi1cdTAwM2Vsb2NrKVxuIDY1OTpcdHtcbiA2NjA6XHRcdExJU1RfSEVBRChhbGxvY2F0ZWRfcmVnaW9ucyk7XG4gNjYxOlx0XHRpbnQgdG9fYWxsb2NhdGUgPSAwLCBpID0gMDtcbiA2NjI6XHRcdHN0cnVjdCBmaWxlX3JlZ2lvbiAqdHJnID0gTlVMTCwgKnJnID0gTlVMTDtcbiA2NjM6XHRcbiA2NjQ6XHRcdFZNX0JVR19PTihyZWdpb25zX25lZWRlZCBcdTAwM2MgMCk7XG4gNjY1Olx0XG4gNjY2Olx0XHQvKlxuIDY2NzpcdFx0ICogQ2hlY2sgZm9yIHN1ZmZpY2llbnQgZGVzY3JpcHRvcnMgaW4gdGhlIGNhY2hlIHRvIGFjY29tbW9kYXRlXG4gNjY4Olx0XHQgKiB0aGUgbnVtYmVyIG9mIGluIHByb2dyZXNzIGFkZCBvcGVyYXRpb25zIHBsdXMgcmVnaW9uc19uZWVkZWQuXG4gNjY5Olx0XHQgKlxuIDY3MDpcdFx0ICogVGhpcyBpcyBhIHdoaWxlIGxvb3AgYmVjYXVzZSB3aGVuIHdlIGRyb3AgdGhlIGxvY2ssIHNvbWUgb3RoZXIgY2FsbFxuIDY3MTpcdFx0ICogdG8gcmVnaW9uX2FkZCBvciByZWdpb25fZGVsIG1heSBoYXZlIGNvbnN1bWVkIHNvbWUgcmVnaW9uX2VudHJpZXMsXG4gNjcyOlx0XHQgKiBzbyB3ZSBrZWVwIGxvb3BpbmcgaGVyZSB1bnRpbCB3ZSBmaW5hbGx5IGhhdmUgZW5vdWdoIGVudHJpZXMgZm9yXG4gNjczOlx0XHQgKiAoYWRkc19pbl9wcm9ncmVzcyAmIzQzOyByZWdpb25zX25lZWRlZCkuXG4gNjc0Olx0XHQgKi9cbiA2NzU6XHRcdHdoaWxlIChyZXN2LVx1MDAzZXJlZ2lvbl9jYWNoZV9jb3VudCBcdTAwM2NcbiA2NzY6XHRcdCAgICAgICAocmVzdi1cdTAwM2VhZGRzX2luX3Byb2dyZXNzICYjNDM7IHJlZ2lvbnNfbmVlZGVkKSkge1xuIDY3NzpcdFx0XHR0b19hbGxvY2F0ZSA9IHJlc3YtXHUwMDNlYWRkc19pbl9wcm9ncmVzcyAmIzQzOyByZWdpb25zX25lZWRlZCAtXG4gNjc4Olx0XHRcdFx0ICAgICAgcmVzdi1cdTAwM2VyZWdpb25fY2FjaGVfY291bnQ7XG4gNjc5Olx0XG4gNjgwOlx0XHRcdC8qIEF0IHRoaXMgcG9pbnQsIHdlIHNob3VsZCBoYXZlIGVub3VnaCBlbnRyaWVzIGluIHRoZSBjYWNoZVxuIDY4MTpcdFx0XHQgKiBmb3IgYWxsIHRoZSBleGlzdGluZyBhZGRzX2luX3Byb2dyZXNzLiBXZSBzaG91bGQgb25seSBiZVxuIDY4MjpcdFx0XHQgKiBuZWVkaW5nIHRvIGFsbG9jYXRlIGZvciByZWdpb25zX25lZWRlZC5cbiA2ODM6XHRcdFx0ICovXG4gNjg0Olx0XHRcdFZNX0JVR19PTihyZXN2LVx1MDAzZXJlZ2lvbl9jYWNoZV9jb3VudCBcdTAwM2MgcmVzdi1cdTAwM2VhZGRzX2luX3Byb2dyZXNzKTtcbiA2ODU6XHRcbiA2ODY6XHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2cmVzdi1cdTAwM2Vsb2NrKTtcbiA2ODc6XHRcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgdG9fYWxsb2NhdGU7IGkmIzQzOyYjNDM7KSB7XG4gNjg4Olx0XHRcdFx0dHJnID0ga21hbGxvY19vYmooKnRyZyk7XG4gNjg5Olx0XHRcdFx0aWYgKCF0cmcpXG4gNjkwOlx0XHRcdFx0XHRnb3RvIG91dF9vZl9tZW1vcnk7XG4gNjkxOlx0XHRcdFx0bGlzdF9hZGQoXHUwMDI2dHJnLVx1MDAzZWxpbmssIFx1MDAyNmFsbG9jYXRlZF9yZWdpb25zKTtcbiA2OTI6XHRcdFx0fVxuIDY5MzpcdFxuIDY5NDpcdFx0XHRzcGluX2xvY2soXHUwMDI2cmVzdi1cdTAwM2Vsb2NrKTtcbiA2OTU6XHRcbiA2OTY6XHRcdFx0bGlzdF9zcGxpY2VfaW5pdChcdTAwMjZhbGxvY2F0ZWRfcmVnaW9ucywgXHUwMDI2cmVzdi1cdTAwM2VyZWdpb25fY2FjaGUpO1xuIDY5NzpcdFx0XHRyZXN2LVx1MDAzZXJlZ2lvbl9jYWNoZV9jb3VudCAmIzQzOz0gdG9fYWxsb2NhdGU7XG4gNjk4Olx0XHR9XG4gNjk5Olx0XG4gNzAwOlx0XHRyZXR1cm4gMDtcbiA3MDE6XHRcbiA3MDI6XHRvdXRfb2ZfbWVtb3J5OlxuIDcwMzpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJnLCB0cmcsIFx1MDAyNmFsbG9jYXRlZF9yZWdpb25zLCBsaW5rKSB7XG4gNzA0Olx0XHRcdGxpc3RfZGVsKFx1MDAyNnJnLVx1MDAzZWxpbmspO1xuIDcwNTpcdFx0XHRrZnJlZShyZyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDIyOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5ODAKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQnVnIERpc2NvdmVyeSBhbmQgRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSBqdXN0IGp1bXBlZCBvdXQgYXQgbWUuIEkgc2VlIGBhbGxvY2F0ZWRfcmVnaW9uc2AgaXMgYSBsb2NhbCB2YXJpYWJsZSwgYnV0IGl0JiMzOTtzICppbnNpZGUqIHRoaXMgYHdoaWxlYCBsb29wIOKAkyB0aGF0JiMzOTtzIGEgcmVkIGZsYWchIFRoZW4gSSBkb3VibGUtY2hlY2sgYW5kIHNlZSBgTElTVF9IRUFEKGFsbG9jYXRlZF9yZWdpb25zKTtgIGlzIGRlY2xhcmVkICpvdXRzaWRlKiB0aGUgbG9vcC4gQWhhISBUaGUgbG9vcCByZXVzZXMgYGFsbG9jYXRlZF9yZWdpb25zYC4gSWYgYGxpc3Rfc3BsaWNlYCBoYWQgYmVlbiB1c2VkLCBpdCB3b3VsZCBoYXZlIHByZXZlbnRlZCByZS1pbml0aWFsaXphdGlvbi4gQnV0IHdpdGhvdXQgaXQsIG9uIHRoZSBzZWNvbmQgaXRlcmF0aW9uLCBgbGlzdF9hZGRgIGlzIGdvaW5nIHRvIGJlIGNhbGxlZCBvbiBhIGNvcnJ1cHRlZCBgYWxsb2NhdGVkX3JlZ2lvbnNgIGxpc3QgaGVhZC4gVGhhdCYjMzk7cyBhIHRleHRib29rIGV4YW1wbGUgb2YgYSBidWcsIGFuZCB0aGFua2Z1bGx5LCBpdCBsb29rcyBsaWtlIGl0IHdhcyBmaXhlZC4KCk5vdyB0aGF0IEkmIzM5O3ZlIHNwb3R0ZWQgdGhhdCwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBmdXp6aW5nLiBUaGUgYGFsbG9jYXRlX2ZpbGVfcmVnaW9uX2VudHJpZXNgIGZ1bmN0aW9uIGxvb2tzIGxpa2UgYSBwcmltZSBjYW5kaWRhdGUg4oCTIGl0JiMzOTtzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRoYXQgY291bGQgYmVuZWZpdCBmcm9tIGJlaW5nIHRlc3RlZCBtb3JlIHJpZ29yb3VzbHkuIExldCYjMzk7cyBtYWtlIHRoYXQgYSBmb2N1cy4gSSBzaG91bGQgcHJvYmFibHkgYWxzbyB0YXJnZXQgb3RoZXIgcmVsYXRlZCBmdW5jdGlvbnMuIEZ1bmN0aW9ucyBsaWtlIGByZWdpb25fYWRkYCwgYHJlZ2lvbl9jaGdgLCBhbmQgYHJlZ2lvbl9kZWxgIHdvdWxkIGFsbCBuZWVkIHRvIGJlIGZ1enplZCBhcyB3ZWxsLiBJJiMzOTtsbCBhZGQgdGhlbSB0byBgRm9jdXNTeW1ib2xzYC4KCkxldCYjMzk7cyBkbyBhIHF1aWNrIHNjYW4gdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIHJlbGF0ZWQgdG8gdGhlIGBGb2N1c1N5bWJvbHNgLiBMb29rcyBsaWtlIEkgZ290IHRoZW0gYWxsOyBgcmVnaW9uX2FkZGAsIGByZWdpb25fY2hnYCwgYHJlZ2lvbl9kZWxgLCBgYWxsb2NhdGVfZmlsZV9yZWdpb25fZW50cmllc2AuIE5vdyBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIGlmIGByZWdpb25fYWRkYCBhbmQgYHJlZ2lvbl9jaGdgIGFyZSBzdGF0aWMgZnVuY3Rpb25zLCBqdXN0IHRvIGdldCBhIGdvb2Qgc2Vuc2Ugb2YgdGhlIHNjb3BlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAyMjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZWdpb25fYWRkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vaHVnZXRsYi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2V0bGIuYz02NTY9c3RhdGljIGludCBhbGxvY2F0ZV9maWxlX3JlZ2lvbl9lbnRyaWVzKHN0cnVjdCByZXN2X21hcCAqcmVzdixcbi0tXG5tbS9odWdldGxiLmMtNjcwLVx0ICogVGhpcyBpcyBhIHdoaWxlIGxvb3AgYmVjYXVzZSB3aGVuIHdlIGRyb3AgdGhlIGxvY2ssIHNvbWUgb3RoZXIgY2FsbFxubW0vaHVnZXRsYi5jOjY3MTpcdCAqIHRvIHJlZ2lvbl9hZGQgb3IgcmVnaW9uX2RlbCBtYXkgaGF2ZSBjb25zdW1lZCBzb21lIHJlZ2lvbl9lbnRyaWVzLFxubW0vaHVnZXRsYi5jLTY3Mi1cdCAqIHNvIHdlIGtlZXAgbG9vcGluZyBoZXJlIHVudGlsIHdlIGZpbmFsbHkgaGF2ZSBlbm91Z2ggZW50cmllcyBmb3Jcbi0tXG5tbS9odWdldGxiLmMtNzE0LSAqIGNhbGwgdG8gcmVnaW9uX2NoZyB3aXRoIHRoZSBzYW1lIHJhbmdlLCBidXQgaW4gc29tZSBjYXNlcyB0aGUgY2FjaGUgd2lsbCBub3Rcbm1tL2h1Z2V0bGIuYzo3MTU6ICogaGF2ZSBzdWZmaWNpZW50IGVudHJpZXMgZHVlIHRvIHJhY2VzIHdpdGggb3RoZXIgY29kZSBkb2luZyByZWdpb25fYWRkIG9yXG5tbS9odWdldGxiLmMtNzE2LSAqIHJlZ2lvbl9kZWwuICBUaGUgZXh0cmEgbmVlZGVkIGVudHJpZXMgd2lsbCBiZSBhbGxvY2F0ZWQuXG4tLVxubW0vaHVnZXRsYi5jLTcyMi0gKiB0aGlzIG9wZXJhdGlvbiBhbmQgd2Ugd2VyZSBub3QgYWJsZSB0byBhbGxvY2F0ZSwgaXQgcmV0dXJucyAtRU5PTUVNLlxubW0vaHVnZXRsYi5jOjcyMzogKiByZWdpb25fYWRkIG9mIHJlZ2lvbnMgb2YgbGVuZ3RoIDEgbmV2ZXIgYWxsb2NhdGUgZmlsZV9yZWdpb25zIGFuZCBjYW5ub3Rcbm1tL2h1Z2V0bGIuYzo3MjQ6ICogZmFpbDsgcmVnaW9uX2NoZyB3aWxsIGFsd2F5cyBhbGxvY2F0ZSBhdCBsZWFzdCAxIGVudHJ5IGFuZCBhIHJlZ2lvbl9hZGQgZm9yXG5tbS9odWdldGxiLmMtNzI1LSAqIDEgcGFnZSB3aWxsIG9ubHkgcmVxdWlyZSBhdCBtb3N0IDEgZW50cnkuXG5tbS9odWdldGxiLmMtNzI2LSAqL1xubW0vaHVnZXRsYi5jOjcyNzpzdGF0aWMgbG9uZyByZWdpb25fYWRkKHN0cnVjdCByZXN2X21hcCAqcmVzdiwgbG9uZyBmLCBsb25nIHQsXG5tbS9odWdldGxiLmMtNzI4LVx0XHQgICAgICAgbG9uZyBpbl9yZWdpb25zX25lZWRlZCwgc3RydWN0IGhzdGF0ZSAqaCxcbi0tXG5tbS9odWdldGxiLmMtNzUyLVx0XHRcdCAgICAoYWN0dWFsX3JlZ2lvbnNfbmVlZGVkIC0gaW5fcmVnaW9uc19uZWVkZWQpKSB7XG5tbS9odWdldGxiLmM6NzUzOlx0XHQvKiByZWdpb25fYWRkIG9wZXJhdGlvbiBvZiByYW5nZSAxIHNob3VsZCBuZXZlciBuZWVkIHRvXG5tbS9odWdldGxiLmMtNzU0LVx0XHQgKiBhbGxvY2F0ZSBmaWxlX3JlZ2lvbiBlbnRyaWVzLlxuLS1cbm1tL2h1Z2V0bGIuYy03NzctICogcmVwcmVzZW50ZWQuICBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIGJlZm9yZSBhIHN1YnNlcXVlbnRcbm1tL2h1Z2V0bGIuYzo3Nzg6ICogY2FsbCB0byByZWdpb25fYWRkIHRoYXQgd2lsbCBhY3R1YWxseSBtb2RpZnkgdGhlIHJlc2VydmVcbm1tL2h1Z2V0bGIuYy03NzktICogbWFwIHRvIGFkZCB0aGUgc3BlY2lmaWVkIHJhbmdlIFtmLCB0KS4gIHJlZ2lvbl9jaGcgZG9lc1xuLS1cbm1tL2h1Z2V0bGIuYy03ODEtICogbWFwLiAgQSBudW1iZXIgb2YgbmV3IGZpbGVfcmVnaW9uIHN0cnVjdHVyZXMgaXMgYWRkZWQgdG8gdGhlIGNhY2hlIGFzIGFcbm1tL2h1Z2V0bGIuYzo3ODI6ICogcGxhY2Vob2xkZXIsIGZvciB0aGUgc3Vic2VxdWVudCByZWdpb25fYWRkIGNhbGwgdG8gdXNlLiBBdCBsZWFzdCAxXG5tbS9odWdldGxiLmMtNzgzLSAqIGZpbGVfcmVnaW9uIHN0cnVjdHVyZSBpcyBhZGRlZC5cbi0tXG5tbS9odWdldGxiLmMtNzg2LSAqIHJlc3YtXHUwMDNlYWRkc19pbl9wcm9ncmVzcy4gIFRoaXMgdmFsdWUgbmVlZHMgdG8gYmUgcHJvdmlkZWQgdG8gYSBmb2xsb3cgdXAgY2FsbFxubW0vaHVnZXRsYi5jOjc4NzogKiB0byByZWdpb25fYWRkIG9yIHJlZ2lvbl9hYm9ydCBmb3IgcHJvcGVyIGFjY291bnRpbmcuXG5tbS9odWdldGxiLmMtNzg4LSAqXG4tLVxubW0vaHVnZXRsYi5jPTc5ND1zdGF0aWMgbG9uZyByZWdpb25fY2hnKHN0cnVjdCByZXN2X21hcCAqcmVzdiwgbG9uZyBmLCBsb25nIHQsXG4tLVxubW0vaHVnZXRsYi5jLTgxOS0gKiBvZiB0aGUgcmVzdl9tYXAga2VlcHMgdHJhY2sgb2YgdGhlIG9wZXJhdGlvbnMgaW4gcHJvZ3Jlc3MgYmV0d2VlblxubW0vaHVnZXRsYi5jOjgyMDogKiBjYWxscyB0byByZWdpb25fY2hnIGFuZCByZWdpb25fYWRkLiAgT3BlcmF0aW9ucyBhcmUgc29tZXRpbWVzXG5tbS9odWdldGxiLmMtODIxLSAqIGFib3J0ZWQgYWZ0ZXIgdGhlIGNhbGwgdG8gcmVnaW9uX2NoZy4gIEluIHN1Y2ggY2FzZXMsIHJlZ2lvbl9hYm9ydFxuLS1cbm1tL2h1Z2V0bGIuYz0yNDMwPXN0YXRpYyBsb25nIF9fdm1hX3Jlc2VydmF0aW9uX2NvbW1vbihzdHJ1Y3QgaHN0YXRlICpoLFxuLS1cbm1tL2h1Z2V0bGIuYy0yNDUzLVx0Y2FzZSBWTUFfQ09NTUlUX1JFU1Y6XG5tbS9odWdldGxiLmM6MjQ1NDpcdFx0cmV0ID0gcmVnaW9uX2FkZChyZXN2LCBpZHgsIGlkeCAmIzQzOyAxLCAxLCBOVUxMLCBOVUxMKTtcbm1tL2h1Z2V0bGIuYzoyNDU1Olx0XHQvKiByZWdpb25fYWRkIGNhbGxzIG9mIHJhbmdlIDEgc2hvdWxkIG5ldmVyIGZhaWwuICovXG5tbS9odWdldGxiLmMtMjQ1Ni1cdFx0Vk1fQlVHX09OKHJldCBcdTAwM2MgMCk7XG4tLVxubW0vaHVnZXRsYi5jLTI0NjMtXHRcdGlmICh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX01BWVNIQVJFKSB7XG5tbS9odWdldGxiLmM6MjQ2NDpcdFx0XHRyZXQgPSByZWdpb25fYWRkKHJlc3YsIGlkeCwgaWR4ICYjNDM7IDEsIDEsIE5VTEwsIE5VTEwpO1xubW0vaHVnZXRsYi5jOjI0NjU6XHRcdFx0LyogcmVnaW9uX2FkZCBjYWxscyBvZiByYW5nZSAxIHNob3VsZCBuZXZlciBmYWlsLiAqL1xubW0vaHVnZXRsYi5jLTI0NjYtXHRcdFx0Vk1fQlVHX09OKHJldCBcdTAwM2MgMCk7XG4tLVxubW0vaHVnZXRsYi5jLTI0NzYtXHRcdH0gZWxzZSB7XG5tbS9odWdldGxiLmM6MjQ3NzpcdFx0XHRyZXQgPSByZWdpb25fYWRkKHJlc3YsIGlkeCwgaWR4ICYjNDM7IDEsIDEsIE5VTEwsIE5VTEwpO1xubW0vaHVnZXRsYi5jOjI0Nzg6XHRcdFx0LyogcmVnaW9uX2FkZCBjYWxscyBvZiByYW5nZSAxIHNob3VsZCBuZXZlciBmYWlsLiAqL1xubW0vaHVnZXRsYi5jLTI0NzktXHRcdFx0Vk1fQlVHX09OKHJldCBcdTAwM2MgMCk7XG4tLVxubW0vaHVnZXRsYi5jPTY1NDA9bG9uZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5tbS9odWdldGxiLmMtNjY1MC1cdGlmICghdm1hIHx8IHZtYV90ZXN0KHZtYSwgVk1BX01BWVNIQVJFX0JJVCkpIHtcbm1tL2h1Z2V0bGIuYzo2NjUxOlx0XHRhZGQgPSByZWdpb25fYWRkKHJlc3ZfbWFwLCBmcm9tLCB0bywgcmVnaW9uc19uZWVkZWQsIGgsIGhfY2cpO1xubW0vaHVnZXRsYi5jLTY2NTItXG4tLVxubW0vaHVnZXRsYi5jLTY2NTktXHRcdFx0ICogcGFnZXMgaW4gdGhpcyByYW5nZSB3ZXJlIGFkZGVkIHRvIHRoZSByZXNlcnZlXG5tbS9odWdldGxiLmM6NjY2MDpcdFx0XHQgKiBtYXAgYmV0d2VlbiByZWdpb25fY2hnIGFuZCByZWdpb25fYWRkLiAgVGhpc1xubW0vaHVnZXRsYi5jLTY2NjEtXHRcdFx0ICogaW5kaWNhdGVzIGEgcmFjZSB3aXRoIGFsbG9jX2h1Z2V0bGJfZm9saW8uICBBZGp1c3Rcbi0tXG5tbS9odWdldGxiLmMtNjcxNi1cdFx0LyogT25seSBjYWxsIHJlZ2lvbl9hYm9ydCBpZiB0aGUgcmVnaW9uX2NoZyBzdWNjZWVkZWQgYnV0IHRoZVxubW0vaHVnZXRsYi5jOjY3MTc6XHRcdCAqIHJlZ2lvbl9hZGQgZmFpbGVkIG9yIGRpZG4mIzM5O3QgcnVuLlxubW0vaHVnZXRsYi5jLTY3MTgtXHRcdCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAyMjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjE0NgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDI4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBTdGF0aWMgQnVnIGluIGBhbGxvY2F0ZV9maWxlX3JlZ2lvbl9lbnRyaWVzYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQmIzM5O3MgcHJldHR5IGNsZWFyOiB0aGUgY29yZSBpc3N1ZSBpcyBpbiBgYWxsb2NhdGVfZmlsZV9yZWdpb25fZW50cmllc2AuIEl0JiMzOTtzIGRlZmluaXRlbHkgc3RhdGljLCB3aGljaCBzaW1wbGlmaWVzIHRoaW5ncyBhIGJpdC4gVGhlIGJ1ZyBpcyBsaXN0IGNvcnJ1cHRpb24uIFNwZWNpZmljYWxseSwgdGhlIGxpc3QgZ2V0cyBtZXNzZWQgdXAgd2hlbiB0aGUgYGFsbG9jYXRlX2ZpbGVfcmVnaW9uX2VudHJpZXNgIGZ1bmN0aW9uIGl0ZXJhdGVzIG1vcmUgdGhhbiBvbmNlLiBUaGlzIGhhcHBlbnMgd2hlbiB0aGUgdmFsdWUgb2YgYHJlc3YtJmd0O3JlZ2lvbl9jYWNoZV9jb3VudGAgaXMgbGVzcyB0aGFuIHRoZSBzdW0gb2YgYHJlc3YtJmd0O2FkZHNfaW5fcHJvZ3Jlc3NgIGFuZCBgcmVnaW9uc19uZWVkZWRgIGFmdGVyIHJlbGVhc2luZyB0aGUgbG9jaywgd2hpY2ggc2NyZWFtcyByYWNlIGNvbmRpdGlvbi4KClRoZSBzZWxmdGVzdCwgYGh1Z2V0bGJfcmVnaW9uX2NhY2hlX3JhY2VgLCBjbGV2ZXJseSB1c2VzIGBtZW1mZF9jcmVhdGUoTUZEX0hVR0VUTEIpYCBhbmQgYGZhbGxvY2F0ZShGQUxMT0NfRkxfUFVOQ0hfSE9MRSlgIHRvIGNyZWF0ZSBmcmFnbWVudGF0aW9uIHdpdGhpbiB0aGUgYHJlc3ZfbWFwYC4gVGhpcyBmcmFnbWVudGF0aW9uIHRoZW4gdHJpZ2dlcnMgdGhlIHJhY2UuIFNvLCB0aGUgZmVhdHVyZSBhcmVhIGlzIGh1Z2V0bGJmcy4gU2VlbXMgbGlrZSB0aGlzIGlzIGEgSFVHRVRMQkZTIHNwZWNpZmljIGlzc3VlLgoKVGhlIGtleSBmdW5jdGlvbnMgdG8gZm9jdXMgb24gaGVyZSBhcmUgYGFsbG9jYXRlX2ZpbGVfcmVnaW9uX2VudHJpZXNgIChvYnZpb3VzbHkpLCBgcmVnaW9uX2FkZGAsIGByZWdpb25fY2hnYCwgYW5kIGByZWdpb25fZGVsYCDigJMgdGhlIHN0YW5kYXJkIGxpc3QgbWFuaXB1bGF0aW9uIGZ1bmN0aW9ucyBpbiB0aGlzIGNvbnRleHQuIEkmIzM5O2xsIG5lZWQgdG8gbWV0aWN1bG91c2x5IHJldmlldyB0aGUgbG9ja2luZyBhbmQgYWNjZXNzIHBhdHRlcm5zIHdpdGhpbiB0aGVzZSBmdW5jdGlvbnMuCgpOb3csIGJlZm9yZSBJIGRpZyB0b28gZGVlcCwgbGV0IG1lIHF1aWNrbHkgc2NhbiBmb3IgYW55IHJlbGF0ZWQgY29uZmlncy4gSXMgdGhlcmUgYW55dGhpbmcgZWxzZSB0aGF0IG1pZ2h0IGNvbnRyaWJ1dGU/IEFoLCBgQ09ORklHX01FTUZEX0NSRUFURWAuIE5vLCB3YWl0IGEgbWludXRlLCBgbWVtZmRfY3JlYXRlYCBpcyBhbHdheXMgYXZhaWxhYmxlIGlmIGBDT05GSUdfU0hNRU1gIG9yIGBDT05GSUdfSFVHRVRMQkZTYCBpcyBlbmFibGVkLCB3aGljaCBtYWtlcyBzZW5zZS4gSSBoYXZlIHRvIHJlbWluZCBteXNlbGYgYG1lbWZkX2NyZWF0ZWAgaXMgYSBzeXNjYWxsLiBIbW0sIGxldCBtZSBjaGVjayB0aGUgYEhVR0VUTEJGU2AgY29uZmlnLCBzcGVjaWZpY2FsbHkgaW4gYGZzL0tjb25maWdgLiBJJiMzOTtsbCBzZWUgaWYgdGhlcmUmIzM5O3MgYW55IGltcGxpY2l0IGRlcGVuZGVuY3kgSSYjMzk7bSBtaXNzaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAyMjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSFVHRVRMQkZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9LY29uZmlnPTI0Nz1jb25maWcgQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcbi0tXG5mcy9LY29uZmlnLTI0OS1cbmZzL0tjb25maWc6MjUwOm1lbnVjb25maWcgSFVHRVRMQkZTXG5mcy9LY29uZmlnLTI1MS1cdGJvb2wgXCYjMzQ7SHVnZVRMQiBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDIyOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyOTU2CgkJCQkJCQlvdXRwdXQ6IDEyMwoJCQkJCQkJdGhvdWdodHM6IDIyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEhVR0VUTEJGUyBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gbG9va2luZyBhdCB0aGlzIHBhdGNoLCB0aGUgY2VudHJhbCBjb21wb25lbnQgYXBwZWFycyB0byBiZSBgSFVHRVRMQkZTYC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgSFVHRVRMQl9QQUdFYCBpc24mIzM5O3Qgc2VwYXJhdGVseSByZXF1aXJlZDsgYmFzZWQgb24gdGhlIGRlcGVuZGVuY3ksIGl0JiMzOTtzIGp1c3QgdGhlIGBIVUdFVExCRlNgIG9wdGlvbiB0aGF0JiMzOTtzIHRydWx5IGVzc2VudGlhbCBoZXJlLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydC4KCk5vdywgbGV0JiMzOTtzIGRyaWxsIGRvd24gYW5kIHNlZSB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZXMuIFRoZSBwcmltYXJ5IGZ1bmN0aW9uIG1vZGlmaWVkIHNlZW1zIHRvIGJlIGBhbGxvY2F0ZV9maWxlX3JlZ2lvbl9lbnRyaWVzYC4gTXkgaW5pdGlhbCBpbnNwZWN0aW9uIHNob3dzIG1vZGlmaWNhdGlvbnMgY29uZmluZWQgdG8gYG1tL2h1Z2V0bGIuY2AgYW5kIGEgZmV3IHNlbGZ0ZXN0IGFyZWFzLCBub3RoaW5nIHRoYXQgaW1tZWRpYXRlbHkgc2NyZWFtcyAmIzM0O3dpZGVzcHJlYWQgaW1wYWN0JiMzNDsgb3Igc2lnbmlmaWNhbnQgYXJjaGl0ZWN0dXJhbCBjaGFuZ2VzLiBJdCYjMzk7cyBhIGZvY3VzZWQgYWx0ZXJhdGlvbiwgd2hpY2ggc3VnZ2VzdHMgaXTigJlzIGEgZnVuY3Rpb25hbCBmaXgsIGV4YWN0bHkgdGhlIHNvcnQgdGhhdCB3YXJyYW50cyBmdXp6aW5nLgoKR2l2ZW4gdGhpcywgSSYjMzk7bSBnb2luZyB0byBjb2RpZnkgdGhpcyBpbnRvIHNvbWUgZnV6emluZyBkaXJlY3RpdmVzLgoKKipXb3J0aEZ1enppbmc6IHRydWUqKi4gQWJzb2x1dGVseSwgdGhpcyBoYXMgY2xlYXIgZnV6emluZyBwb3RlbnRpYWwuCgoqKkZvY3VzU3ltYm9sczogWyYjMzQ7YWxsb2NhdGVfZmlsZV9yZWdpb25fZW50cmllcyYjMzQ7LCAmIzM0O3JlZ2lvbl9hZGQmIzM0OywgJiMzNDtyZWdpb25fY2hnJiMzNDssICYjMzQ7cmVnaW9uX2RlbCYjMzQ7XSoqLiBUaGVzZSBhcmUgdGhlIGtleSBmdW5jdGlvbnMsIHBhcnRpY3VsYXJseSB0aGF0IGNvcmUgYGFsbG9jYXRlX2ZpbGVfcmVnaW9uX2VudHJpZXNgIGZ1bmN0aW9uIGFuZCB0aGUgcmVnaW9uIG1hbmFnZW1lbnQgZnVuY3Rpb25zLCB3aGljaCBhcHBlYXIgdG8gYmUgaW50aW1hdGVseSBpbnZvbHZlZCBpbiB0aGlzIGJ1Zy4KCioqRW5hYmxlQ29uZmlnczogWyYjMzQ7SFVHRVRMQkZTJiMzNDtdKiouIFRoYXQmIzM5O3MgdGhlIGNydWNpYWwgY29uZmlndXJhdGlvbiBlbGVtZW50IHRvIGVuYWJsZS4KCioqUmVhc29uaW5nOiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGxpc3QgY29ycnVwdGlvbiBidWcgaW4gYWxsb2NhdGVfZmlsZV9yZWdpb25fZW50cmllcyBpbiBodWdldGxiZnMuIFRoZSBidWcgaXMgdHJpZ2dlcmVkIGJ5IGEgcmFjZSBjb25kaXRpb24gd2hlbiB0aGUgcmVnaW9uIGNhY2hlIG5lZWRzIHRvIGJlIHJlZmlsbGVkIG11bHRpcGxlIHRpbWVzLiBGdXp6aW5nIGh1Z2V0bGJmcyByZXNlcnZhdGlvbiBmdW5jdGlvbnMgY2FuIGhlbHAgZW5zdXJlIHRoZSBmaXggaXMgcm9idXN0LiYjMzQ7KiogVGhpcyBzdW1tYXJpemVzIHRoZSB2dWxuZXJhYmlsaXR5JiMzOTtzIG5hdHVyZSBhbmQgdGhlIHJhdGlvbmFsZSBmb3Igb3VyIGZ1enppbmcgc3RyYXRlZ3kuIEVzc2VudGlhbGx5LCB3ZSYjMzk7cmUgbG9va2luZyB0byB2YWxpZGF0ZSB0aGUgZml4JiMzOTtzIHJvYnVzdG5lc3MgYWdhaW5zdCByYWNlIGNvbmRpdGlvbnMgaW4gdGhlIGh1Z2V0bGJmcyByZWdpb24gY2FjaGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDIyOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtIVUdFVExCRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthbGxvY2F0ZV9maWxlX3JlZ2lvbl9lbnRyaWVzJiMzNDssCiAgICAmIzM0O3JlZ2lvbl9hZGQmIzM0OywKICAgICYjMzQ7cmVnaW9uX2NoZyYjMzQ7LAogICAgJiMzNDtyZWdpb25fZGVsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbGlzdCBjb3JydXB0aW9uIGJ1ZyBpbiBhbGxvY2F0ZV9maWxlX3JlZ2lvbl9lbnRyaWVzIGluIGh1Z2V0bGJmcy4gVGhlIGJ1ZyBpcyB0cmlnZ2VyZWQgYnkgYSByYWNlIGNvbmRpdGlvbiB3aGVuIHRoZSByZWdpb24gY2FjaGUgbmVlZHMgdG8gYmUgcmVmaWxsZWQgbXVsdGlwbGUgdGltZXMuIEZ1enppbmcgaHVnZXRsYmZzIHJlc2VydmF0aW9uIGZ1bmN0aW9ucyBjYW4gaGVscCBlbnN1cmUgdGhlIGZpeCBpcyByb2J1c3QuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FsbG9jYXRlX2ZpbGVfcmVnaW9uX2VudHJpZXMmIzM0OywKICAgICYjMzQ7cmVnaW9uX2FkZCYjMzQ7LAogICAgJiMzNDtyZWdpb25fY2hnJiMzNDssCiAgICAmIzM0O3JlZ2lvbl9kZWwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBsaXN0IGNvcnJ1cHRpb24gYnVnIGluIGFsbG9jYXRlX2ZpbGVfcmVnaW9uX2VudHJpZXMgaW4gaHVnZXRsYmZzLiBUaGUgYnVnIGlzIHRyaWdnZXJlZCBieSBhIHJhY2UgY29uZGl0aW9uIHdoZW4gdGhlIHJlZ2lvbiBjYWNoZSBuZWVkcyB0byBiZSByZWZpbGxlZCBtdWx0aXBsZSB0aW1lcy4gRnV6emluZyBodWdldGxiZnMgcmVzZXJ2YXRpb24gZnVuY3Rpb25zIGNhbiBoZWxwIGVuc3VyZSB0aGUgZml4IGlzIHJvYnVzdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDIyOjM4OjE0LjA2MzIyMjkwMloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxOTYwMzkyMDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFsbG9jYXRlX2ZpbGVfcmVnaW9uX2VudHJpZXNcIixcbiAgICBcInJlZ2lvbl9hZGRcIixcbiAgICBcInJlZ2lvbl9jaGdcIixcbiAgICBcInJlZ2lvbl9kZWxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGxpc3QgY29ycnVwdGlvbiBidWcgaW4gYWxsb2NhdGVfZmlsZV9yZWdpb25fZW50cmllcyBpbiBodWdldGxiZnMuIFRoZSBidWcgaXMgdHJpZ2dlcmVkIGJ5IGEgcmFjZSBjb25kaXRpb24gd2hlbiB0aGUgcmVnaW9uIGNhY2hlIG5lZWRzIHRvIGJlIHJlZmlsbGVkIG11bHRpcGxlIHRpbWVzLiBGdXp6aW5nIGh1Z2V0bGJmcyByZXNlcnZhdGlvbiBmdW5jdGlvbnMgY2FuIGhlbHAgZW5zdXJlIHRoZSBmaXggaXMgcm9idXN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QyMjozODoxNC4wNjMyMzAzMDJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTc3NjI5NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4YWRiZDViNmY0YjQ2N2FhZTEyY2I5MTc1MGMxYjBiODY3NDJiNmU2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gSnVsIDEzIDIyOjM4OjEyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuY1xcbmluZGV4IDU3MTIxMmI4MDgzNWVjLi5mOTU3N2E3ODlmZTY0ZiAxMDA2NDRcXG4tLS0gYS9tbS9odWdldGxiLmNcXG4rKysgYi9tbS9odWdldGxiLmNcXG5AQCAtNjkzLDcgKzY5Myw3IEBAIHN0YXRpYyBpbnQgYWxsb2NhdGVfZmlsZV9yZWdpb25fZW50cmllcyhzdHJ1Y3QgcmVzdl9tYXAgKnJlc3YsXFxuIFxcbiBcXHRcXHRzcGluX2xvY2soXFx1MDAyNnJlc3YtXFx1MDAzZWxvY2spO1xcbiBcXG4tXFx0XFx0bGlzdF9zcGxpY2UoXFx1MDAyNmFsbG9jYXRlZF9yZWdpb25zLCBcXHUwMDI2cmVzdi1cXHUwMDNlcmVnaW9uX2NhY2hlKTtcXG4rXFx0XFx0bGlzdF9zcGxpY2VfaW5pdChcXHUwMDI2YWxsb2NhdGVkX3JlZ2lvbnMsIFxcdTAwMjZyZXN2LVxcdTAwM2VyZWdpb25fY2FjaGUpO1xcbiBcXHRcXHRyZXN2LVxcdTAwM2VyZWdpb25fY2FjaGVfY291bnQgKz0gdG9fYWxsb2NhdGU7XFxuIFxcdH1cXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLy5naXRpZ25vcmUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8uZ2l0aWdub3JlXFxuaW5kZXggOWNjZDllMTQ0N2U2NmIuLjdkYjg2NTc5NjBkOWYwIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLy5naXRpZ25vcmVcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8uZ2l0aWdub3JlXFxuQEAgLTU5LDYgKzU5LDcgQEAgaHVnZXRsYl9tYWR2X3ZzX21hcFxcbiBtc2VhbF90ZXN0XFxuIGRyb3BwYWJsZVxcbiBodWdldGxiX2Rpb1xcbitodWdldGxiX3JlZ2lvbl9jYWNoZV9yYWNlXFxuIHBrZXlfc2lnaGFuZGxlcl90ZXN0c18zMlxcbiBwa2V5X3NpZ2hhbmRsZXJfdGVzdHNfNjRcXG4gZ3VhcmQtcmVnaW9uc1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlXFxuaW5kZXggZTZkZjk2OGYwOTcxYzguLjQyMWEwYjdmZGRkZjI4IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGVcXG5AQCAtNjcsNiArNjcsNyBAQCBURVNUX0dFTl9GSUxFUyArPSBodWdldGxiLXJlYWQtaHdwb2lzb25cXG4gVEVTVF9HRU5fRklMRVMgKz0gaHVnZXRsYi1zaG1cXG4gVEVTVF9HRU5fRklMRVMgKz0gaHVnZXRsYi1zb2Z0LW9mZmxpbmVcXG4gVEVTVF9HRU5fRklMRVMgKz0gaHVnZXRsYi12bWVtbWFwXFxuK1RFU1RfR0VOX0ZJTEVTICs9IGh1Z2V0bGJfcmVnaW9uX2NhY2hlX3JhY2VcXG4gVEVTVF9HRU5fRklMRVMgKz0ga2h1Z2VwYWdlZFxcbiBURVNUX0dFTl9GSUxFUyArPSBtYWR2X3BvcHVsYXRlXFxuIFRFU1RfR0VOX0ZJTEVTICs9IG1hcF9maXhlZF9ub3JlcGxhY2VcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9yZWdpb25fY2FjaGVfcmFjZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9yZWdpb25fY2FjaGVfcmFjZS5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNmUzZjc1MzY0MGJlOGNcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9yZWdpb25fY2FjaGVfcmFjZS5jXFxuQEAgLTAsMCArMSwzMTUgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rLypcXG4rICogUmVncmVzc2lvbiB0ZXN0IGZvciBsaXN0IGNvcnJ1cHRpb24gaW5cXG4rICogbW0vaHVnZXRsYi5jOmFsbG9jYXRlX2ZpbGVfcmVnaW9uX2VudHJpZXMoKS5cXG4rICpcXG4rICogRm9yayBwcm9jZXNzZXMgc2hhcmluZyBhIGh1Z2V0bGIgaW5vZGUgdmlhIGBtZW1mZF9jcmVhdGUoTUZEX0hVR0VUTEIpYFxcbisgKiBhbmQgaGF2ZSB0aGVtIGZhdWx0IHJhbmdlcyBhbmQgcHVuY2ggaG9sZXMgdG8gZnJhZ21lbnQgdGhlIHNoYXJlZFxcbisgKiBgcmVzdl9tYXBgIHdoaWxlIGRyYWluaW5nIGByZXN2LVxcdTAwM2VyZWdpb25fY2FjaGVgIGZyb20gYSBzZXBhcmF0ZSBhZGRyZXNzXFxuKyAqIHNwYWNlLlxcbisgKi9cXG4rI2RlZmluZSBfR05VX1NPVVJDRVxcbisjaW5jbHVkZSBcXHUwMDNjZXJybm8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2ZjbnRsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzZXRqbXAuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3NpZ25hbC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkYm9vbC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkaW50LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdGRpby5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkbGliLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdHJpbmcuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3RpbWUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3VuaXN0ZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3lzL21tYW4uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N5cy9zeXNjYWxsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzeXMvd2FpdC5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZhbGxvYy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtZmQuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCIuLi9rc2VsZnRlc3QuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImh1Z2VwYWdlX3NldHRpbmdzLmhcXFwiXFxuK1xcbisvKiBUdW5hYmxlcyAob3ZlcnJpZGFibGUgdmlhIGFyZ3YpLiAqL1xcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBmaWxlX3BhZ2VzID0gNjQ7XFx0LyogaHVnZSBwYWdlcyBiYWNraW5nIHRoZSBzaGFyZWQgZmlsZSAqL1xcbitzdGF0aWMgdW5zaWduZWQgaW50IG5yX3Byb2NzO1xcdFxcdC8qIDAgPVxcdTAwM2UgYXV0byAoMiAqIG5yIG9ubGluZSBjcHVzKSAqL1xcbitzdGF0aWMgdW5zaWduZWQgaW50IGR1cmF0aW9uX3NlYyA9IDU7XFx0LyogLS10cmlnZ2VyIHJ1biB0aW1lICovXFxuK1xcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBodWdlX3BhZ2Vfc2l6ZTtcXHQvKiBieXRlcyAqL1xcbitzdGF0aWMgaW50IG1lbWZkID0gLTE7XFxuK3N0YXRpYyB2b2xhdGlsZSBpbnQgKnN0b3A7XFx0XFx0Lyogc2hhcmVkIGFjcm9zcyBmb3JrZWQgY2hpbGRyZW4gKi9cXG4rXFxuKy8qXFxuKyAqIFBlci1wcm9jZXNzIFNJR0JVUyBlc2NhcGU6IGEgZmF1bHQgY2FuIGZhaWwgKHBvb2wgZXhoYXVzdGVkKSBhbmQgcmFpc2VcXG4rICogU0lHQlVTOyBqdW1wIGJhY2sgYW5kIGFiYW5kb24gdGhlIHJlc3Qgb2YgdGhlIGN1cnJlbnQgcmFuZ2UgaW5zdGVhZCBvZlxcbisgKiBkeWluZy4gIEVhY2ggY2hpbGQgaXMgc2luZ2xlLXRocmVhZGVkLCBzbyBhIGZpbGUtc2NvcGUgYnVmZmVyIGlzIGZpbmUuXFxuKyAqL1xcbitzdGF0aWMgc2lnam1wX2J1ZiBzaWdidXNfZW52O1xcbitcXG4rc3RhdGljIHZvaWQgc2lnYnVzX2hhbmRsZXIoaW50IHNpZylcXG4re1xcbitcXHRzaWdsb25nam1wKHNpZ2J1c19lbnYsIDEpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBpbnN0YWxsX3NpZ2J1c19oYW5kbGVyKHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IHNpZ2FjdGlvbiBzYSA9IHtcXG4rXFx0XFx0LnNhX2hhbmRsZXIgPSBzaWdidXNfaGFuZGxlcixcXG4rXFx0fTtcXG4rXFxuK1xcdHNpZ2VtcHR5c2V0KFxcdTAwMjZzYS5zYV9tYXNrKTtcXG4rXFx0c2lnYWN0aW9uKFNJR0JVUywgXFx1MDAyNnNhLCBOVUxMKTtcXG4rfVxcbitcXG4rc3RhdGljIGxvbmcgc3lzX21lbWZkX2NyZWF0ZShjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuK3tcXG4rXFx0cmV0dXJuIHN5c2NhbGwoX19OUl9tZW1mZF9jcmVhdGUsIG5hbWUsIGZsYWdzKTtcXG4rfVxcbitcXG4rLypcXG4rICogTWFwIFtzdGFydCwgc3RhcnQrbGVuKSBvZiB0aGUgc2hhcmVkIGZpbGUgYW5kIGZhdWx0IGV2ZXJ5IHBhZ2UgaW4uXFxuKyAqXFxuKyAqIFRoZSBtbWFwKCkgZHJpdmVzIG1tYXAtdGltZSBodWdldGxiX3Jlc2VydmVfcGFnZXMgLVxcdTAwM2UgcmVnaW9uX2NoZyAodGhlXFxuKyAqIHdpZGUtd2luZG93IHZpY3RpbSB3aGVuIHRoZSByYW5nZSBpcyBmcmFnbWVudGVkKSArIHJlZ2lvbl9hZGQuICBUaGVcXG4rICogc3Vic2VxdWVudCBzdG9yZXMgZmF1bHQgcGFnZXMgaW4gKndpdGhvdXQqIGlub2RlX2xvY2ssIGRyaXZpbmcgdGhlXFxuKyAqIGxvY2stZnJlZSByZWdpb25fYWRkL3JlZ2lvbl9jaGcgdGhhdCBkcmFpbnMgcmVzdi1cXHUwMDNlcmVnaW9uX2NhY2hlIC0tIHRoZVxcbisgKiBjb25jdXJyZW5jeSB0aGUgYnVnZ3kgbG9vcCBuZWVkcyBmcm9tICpvdGhlciogcHJvY2Vzc2VzLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgbWFwX2FuZF9mYXVsdF9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGxlbilcXG4re1xcbitcXHR1bnNpZ25lZCBsb25nIGk7XFxuK1xcdGNoYXIgKmFkZHI7XFxuK1xcbitcXHRpZiAoIWxlbilcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHRhZGRyID0gbW1hcChOVUxMLCBsZW4gKiBodWdlX3BhZ2Vfc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcXG4rXFx0XFx0ICAgIE1BUF9TSEFSRUQsIG1lbWZkLCBzdGFydCAqIGh1Z2VfcGFnZV9zaXplKTtcXG4rXFx0aWYgKGFkZHIgPT0gTUFQX0ZBSUxFRClcXG4rXFx0XFx0cmV0dXJuO1xcdFxcdC8qIEVOT01FTSB1bmRlciBwb29sIHByZXNzdXJlIGlzIGZpbmUgKi9cXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBsZW47IGkrKykge1xcbitcXHRcXHRpZiAoc2lnc2V0am1wKHNpZ2J1c19lbnYsIDEpID09IDApXFxuK1xcdFxcdFxcdCoodm9sYXRpbGUgY2hhciAqKShhZGRyICsgaSAqIGh1Z2VfcGFnZV9zaXplKSA9IChjaGFyKWk7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0YnJlYWs7XFx0LyogU0lHQlVTOiBwb29sIGV4aGF1c3RlZCwgc3RvcCBmYXVsdGluZyAqL1xcbitcXHR9XFxuK1xcdG11bm1hcChhZGRyLCBsZW4gKiBodWdlX3BhZ2Vfc2l6ZSk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFJlbW92ZSBbc3RhcnQsIHN0YXJ0K2xlbikgaHVnZSBwYWdlcyBmcm9tIHRoZSBzaGFyZWQgZmlsZSwgZHJpdmluZ1xcbisgKiBodWdldGxiZnNfcHVuY2hfaG9sZSAtXFx1MDAzZSByZW1vdmVfaW5vZGVfaHVnZXBhZ2VzIC1cXHUwMDNlIHJlZ2lvbl9kZWwgZm9yIHRoZSBwYWdlc1xcbisgKiB0aGF0IHdlcmUgZmF1bHRlZCBpbiBhYm92ZS4gIFRoaXMgZnJlZXMgcGFnZXMgYmFjayB0byB0aGUgcG9vbCAoYm91bmRpbmdcXG4rICogcmVzaWRlbmN5KSBhbmQgcmUtZnJhZ21lbnRzIHRoZSByZXN2X21hcCBzbyBsYXRlciByZWdpb25fY2hnIGNhbGxzIGtlZXBcXG4rICogbmVlZGluZyBtdWx0aXBsZSBlbnRyaWVzLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgcHVuY2hfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBsZW4pXFxuK3tcXG4rXFx0aWYgKCFsZW4pXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0ZmFsbG9jYXRlKG1lbWZkLCBGQUxMT0NfRkxfUFVOQ0hfSE9MRSB8IEZBTExPQ19GTF9LRUVQX1NJWkUsXFxuK1xcdFxcdCAgc3RhcnQgKiBodWdlX3BhZ2Vfc2l6ZSwgbGVuICogaHVnZV9wYWdlX3NpemUpO1xcbit9XFxuK1xcbisvKlxcbisgKiBPbmUgZm9ya2VkIHdvcmtlci4gIEVhY2ggd29ya2VyIGlzIHNpbXVsdGFuZW91c2x5IGEgdmljdGltIChpdHMgd2lkZVxcbisgKiBtbWFwLXRpbWUgcmVnaW9uX2NoZykgYW5kLCBmb3IgdGhlIG90aGVyIHdvcmtlcnMsIGEgbG9jay1mcmVlIGNhY2hlXFxuKyAqIGRyYWluZXIgKGl0cyBmYXVsdHMpIC0tIGV4YWN0bHkgdGhlIHNoYXJlZC1pbm9kZSBtYXArZmF1bHQgY2h1cm4gc2VlbiBpblxcbisgKiB0aGUgb3JpZ2luYWwgY3Jhc2ggKFFFTVUgcHJlYWxsb2MgKyBTUERLL0J5dGVsaWdodCBvbiBvbmUgZ3Vlc3QtUkFNIGZpbGUpLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgY2hpbGRfd29ya2VyKHVuc2lnbmVkIGludCBpZClcXG4re1xcbitcXHR1bnNpZ25lZCBpbnQgc2VlZCA9IGlkICogMjY1NDQzNTc2MXUgXiAodW5zaWduZWQgaW50KXRpbWUoTlVMTCkgXlxcbitcXHRcXHRcXHQgICAgKCh1bnNpZ25lZCBpbnQpZ2V0cGlkKCkgXFx1MDAzY1xcdTAwM2MgMSk7XFxuK1xcbitcXHRpbnN0YWxsX3NpZ2J1c19oYW5kbGVyKCk7XFxuK1xcbitcXHR3aGlsZSAoISpzdG9wKSB7XFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgc3RhcnQgPSByYW5kX3IoXFx1MDAyNnNlZWQpICUgZmlsZV9wYWdlcztcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBsZW4gPSAxICsgcmFuZF9yKFxcdTAwMjZzZWVkKSAlIChmaWxlX3BhZ2VzIC0gc3RhcnQpO1xcbitcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogQmlhcyB0b3dhcmQgbWFwK2ZhdWx0ICh2aWN0aW1zIGFuZCBkcmFpbmVycyk7IHB1bmNoIGFcXG4rXFx0XFx0ICogcXVhcnRlciBvZiB0aGUgdGltZSB0byBrZWVwIHRoZSBtYXAgZnJhZ21lbnRlZCBhbmQgdG8gY2FwXFxuK1xcdFxcdCAqIGhvdyBtYW55IHBhZ2VzIHN0YXkgcmVzaWRlbnQuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAocmFuZF9yKFxcdTAwMjZzZWVkKSAlIDQpXFxuK1xcdFxcdFxcdG1hcF9hbmRfZmF1bHRfcmFuZ2Uoc3RhcnQsIGxlbik7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0cHVuY2hfcmFuZ2Uoc3RhcnQsIGxlbik7XFxuK1xcdH1cXG4rfVxcbitcXG4rLypcXG4rICogU2FmZSwgc2luZ2xlLXByb2Nlc3MgZnVuY3Rpb25hbCBjaGVjay4gIEl0IGZyYWdtZW50cyB0aGUgc2hhcmVkIHJlc3ZfbWFwXFxuKyAqIChyZXNlcnZhdGlvbnMgZm9yIGEgc2hhcmVkIG1hcHBpbmcgcGVyc2lzdCBvbiB0aGUgaW5vZGUgYWZ0ZXIgbXVubWFwKSBzb1xcbisgKiB0aGF0IGEgc3Vic2VxdWVudCB3aG9sZS1maWxlIG1tYXAgbWFrZXMgcmVnaW9uX2NoZyBjb21wdXRlXFxuKyAqIHJlZ2lvbnNfbmVlZGVkIFxcdTAwM2UgMSwgZm9yY2luZyBhbGxvY2F0ZV9maWxlX3JlZ2lvbl9lbnRyaWVzIHRvIGFsbG9jYXRlIGFuZFxcbisgKiBzcGxpY2Ugc2V2ZXJhbCBlbnRyaWVzLiAgVGhpcyBleGVyY2lzZXMgdGhlIGJ1Z2d5IGxpbmUsIGJ1dCB3aXRob3V0XFxuKyAqIGNvbmN1cnJlbmN5IGl0IGFsd2F5cyBtYWtlcyBleGFjdGx5IG9uZSBsb29wIGl0ZXJhdGlvbiwgc28gaXQgY2Fubm90IHRyaXBcXG4rICogdGhlIHJhY2UgYW5kIGlzIHNhZmUgb24gYW55IGtlcm5lbC4gIFJldHVybnMgMCBvbiBzdWNjZXNzLlxcbisgKi9cXG4rc3RhdGljIGludCBmdW5jdGlvbmFsX2NoZWNrKHZvaWQpXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyBpO1xcbitcXHR2b2lkICphZGRyO1xcbitcXG4rXFx0LyogUHVuY2ggZXZlcnl0aGluZyBzbyB3ZSBzdGFydCBmcm9tIGFuIGVtcHR5IHJlc3ZfbWFwLiAqL1xcbitcXHRwdW5jaF9yYW5nZSgwLCBmaWxlX3BhZ2VzKTtcXG4rXFxuK1xcdC8qIFJlc2VydmUgZXZlcnkgb3RoZXIgaHVnZSBwYWdlIC1cXHUwMDNlIH5maWxlX3BhZ2VzLzIgZGlzam9pbnQgcmVnaW9ucy4gKi9cXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGZpbGVfcGFnZXM7IGkgKz0gMilcXG4rXFx0XFx0bWFwX2FuZF9mYXVsdF9yYW5nZShpLCAxKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIE9uZSBtYXBwaW5nIHNwYW5uaW5nIHRoZSB3aG9sZSBmaWxlIG11c3QgZmlsbCBhbGwgdGhlIGhvbGVzIGluIGFcXG4rXFx0ICogc2luZ2xlIHJlZ2lvbl9jaGcgLVxcdTAwM2UgYSBtdWx0aS1lbnRyeSByZWdpb25fY2FjaGUgcmVmaWxsLlxcbitcXHQgKi9cXG4rXFx0YWRkciA9IG1tYXAoTlVMTCwgZmlsZV9wYWdlcyAqIGh1Z2VfcGFnZV9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxcbitcXHRcXHQgICAgTUFQX1NIQVJFRCwgbWVtZmQsIDApO1xcbitcXHRpZiAoYWRkciA9PSBNQVBfRkFJTEVEKSB7XFxuK1xcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJ3aG9sZS1maWxlIG1tYXAgZmFpbGVkOiAlc1xcXFxuXFxcIiwgc3RyZXJyb3IoZXJybm8pKTtcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXHR9XFxuK1xcdG11bm1hcChhZGRyLCBmaWxlX3BhZ2VzICogaHVnZV9wYWdlX3NpemUpO1xcbitcXHRwdW5jaF9yYW5nZSgwLCBmaWxlX3BhZ2VzKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnVuX3RyaWdnZXIodm9pZClcXG4re1xcbitcXHRwaWRfdCAqcGlkcztcXG4rXFx0dW5zaWduZWQgaW50IGksIHN0YXJ0ZWQgPSAwO1xcbitcXG4rXFx0c3RvcCA9IG1tYXAoTlVMTCwgc2l6ZW9mKCpzdG9wKSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcXG4rXFx0XFx0ICAgIE1BUF9TSEFSRUQgfCBNQVBfQU5PTllNT1VTLCAtMSwgMCk7XFxuK1xcdGlmIChzdG9wID09IE1BUF9GQUlMRUQpXFxuK1xcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwibW1hcChzdG9wIGZsYWcpOiAlc1xcXFxuXFxcIiwgc3RyZXJyb3IoZXJybm8pKTtcXG4rXFx0KnN0b3AgPSAwO1xcbitcXG4rXFx0cGlkcyA9IGNhbGxvYyhucl9wcm9jcywgc2l6ZW9mKCpwaWRzKSk7XFxuK1xcdGlmICghcGlkcylcXG4rXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJjYWxsb2M6ICVzXFxcXG5cXFwiLCBzdHJlcnJvcihlcnJubykpO1xcbitcXG4rXFx0a3NmdF9wcmludF9tc2coXFxcInN0cmVzc2luZyAldSBwcm9jZXNzZXMgZm9yICV1cyBvbiAlbHUgaHVnZSBwYWdlcyAoJWx1IE1pQilcXFxcblxcXCIsXFxuK1xcdFxcdCAgICAgICBucl9wcm9jcywgZHVyYXRpb25fc2VjLCBmaWxlX3BhZ2VzLFxcbitcXHRcXHQgICAgICAgKGZpbGVfcGFnZXMgKiBodWdlX3BhZ2Vfc2l6ZSkgXFx1MDAzZVxcdTAwM2UgMjApO1xcbitcXHRrc2Z0X3ByaW50X21zZyhcXFwiV0FSTklORzogYSB2dWxuZXJhYmxlIGtlcm5lbCB3aWxsIHBhbmljIGhlcmVcXFxcblxcXCIpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX3Byb2NzOyBpKyspIHtcXG4rXFx0XFx0cGlkX3QgcGlkID0gZm9yaygpO1xcbitcXG4rXFx0XFx0aWYgKHBpZCBcXHUwMDNjIDApIHtcXG4rXFx0XFx0XFx0a3NmdF9wcmludF9tc2coXFxcImZvcms6ICVzXFxcXG5cXFwiLCBzdHJlcnJvcihlcnJubykpO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbitcXHRcXHRpZiAocGlkID09IDApIHtcXG4rXFx0XFx0XFx0ZnJlZShwaWRzKTtcXG4rXFx0XFx0XFx0Y2hpbGRfd29ya2VyKGkpO1xcbitcXHRcXHRcXHRfZXhpdCgwKTtcXG4rXFx0XFx0fVxcbitcXHRcXHRwaWRzW3N0YXJ0ZWQrK10gPSBwaWQ7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghc3RhcnRlZCkge1xcbitcXHRcXHRmcmVlKHBpZHMpO1xcbitcXHRcXHRtdW5tYXAoKHZvaWQgKilzdG9wLCBzaXplb2YoKnN0b3ApKTtcXG4rXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJubyB3b3JrZXIgcHJvY2Vzc2VzIHN0YXJ0ZWRcXFxcblxcXCIpO1xcbitcXHR9XFxuK1xcbitcXHRzbGVlcChkdXJhdGlvbl9zZWMpO1xcbitcXHQqc3RvcCA9IDE7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgc3RhcnRlZDsgaSsrKVxcbitcXHRcXHR3YWl0cGlkKHBpZHNbaV0sIE5VTEwsIDApO1xcbitcXHRmcmVlKHBpZHMpO1xcbitcXHRtdW5tYXAoKHZvaWQgKilzdG9wLCBzaXplb2YoKnN0b3ApKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHVzYWdlKGNvbnN0IGNoYXIgKnByb2cpXFxuK3tcXG4rXFx0ZnByaW50ZihzdGRlcnIsXFxuK1xcdFxcdFxcXCJ1c2FnZTogJXMgWy0tdHJpZ2dlcl0gWy1zIGh1Z2VfcGFnZXNdIFstdCBwcm9jc10gWy1kIHNlY29uZHNdXFxcXG5cXFwiXFxuK1xcdFxcdFxcXCIgIChkZWZhdWx0KSBydW4gYSBzYWZlIHNpbmdsZS1wcm9jZXNzIGZ1bmN0aW9uYWwgY2hlY2tcXFxcblxcXCJcXG4rXFx0XFx0XFxcIiAgLS10cmlnZ2VyIGZvcmsrZmF1bHQgY29uY3VycmVudCByZXByb2R1Y2VyIChDQU4gUEFOSUMgQSBCVUdHWSBIT1NUKVxcXFxuXFxcIlxcbitcXHRcXHRcXFwiICAtcyAgaHVnZSBwYWdlcyBiYWNraW5nIHRoZSBzaGFyZWQgZmlsZSAoZGVmYXVsdCAlbHUpXFxcXG5cXFwiXFxuK1xcdFxcdFxcXCIgIC10ICB3b3JrZXIgcHJvY2Vzc2VzIGZvciAtLXRyaWdnZXIgKGRlZmF1bHQgMiAqIG5yX2NwdXMpXFxcXG5cXFwiXFxuK1xcdFxcdFxcXCIgIC1kICAtLXRyaWdnZXIgcnVuIHRpbWUgaW4gc2Vjb25kcyAoZGVmYXVsdCAldSlcXFxcblxcXCIsXFxuK1xcdFxcdHByb2csIGZpbGVfcGFnZXMsIGR1cmF0aW9uX3NlYyk7XFxuK31cXG4rXFxuK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXFxuK3tcXG4rXFx0Ym9vbCB0cmlnZ2VyID0gZmFsc2U7XFxuK1xcdGludCBpLCByZXQ7XFxuK1xcbitcXHRmb3IgKGkgPSAxOyBpIFxcdTAwM2MgYXJnYzsgaSsrKSB7XFxuK1xcdFxcdGlmICghc3RyY21wKGFyZ3ZbaV0sIFxcXCItLXRyaWdnZXJcXFwiKSkge1xcbitcXHRcXHRcXHR0cmlnZ2VyID0gdHJ1ZTtcXG4rXFx0XFx0fSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbaV0sIFxcXCItc1xcXCIpIFxcdTAwMjZcXHUwMDI2IGkgKyAxIFxcdTAwM2MgYXJnYykge1xcbitcXHRcXHRcXHRmaWxlX3BhZ2VzID0gc3RydG91bChhcmd2WysraV0sIE5VTEwsIDApO1xcbitcXHRcXHR9IGVsc2UgaWYgKCFzdHJjbXAoYXJndltpXSwgXFxcIi10XFxcIikgXFx1MDAyNlxcdTAwMjYgaSArIDEgXFx1MDAzYyBhcmdjKSB7XFxuK1xcdFxcdFxcdG5yX3Byb2NzID0gc3RydG91bChhcmd2WysraV0sIE5VTEwsIDApO1xcbitcXHRcXHR9IGVsc2UgaWYgKCFzdHJjbXAoYXJndltpXSwgXFxcIi1kXFxcIikgXFx1MDAyNlxcdTAwMjYgaSArIDEgXFx1MDAzYyBhcmdjKSB7XFxuK1xcdFxcdFxcdGR1cmF0aW9uX3NlYyA9IHN0cnRvdWwoYXJndlsrK2ldLCBOVUxMLCAwKTtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0dXNhZ2UoYXJndlswXSk7XFxuK1xcdFxcdFxcdHJldHVybiBLU0ZUX0ZBSUw7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0a3NmdF9wcmludF9oZWFkZXIoKTtcXG4rXFx0a3NmdF9zZXRfcGxhbigxKTtcXG4rXFxuK1xcdGlmIChmaWxlX3BhZ2VzIFxcdTAwM2MgNClcXG4rXFx0XFx0ZmlsZV9wYWdlcyA9IDQ7XFxuK1xcdGlmICghbnJfcHJvY3MpIHtcXG4rXFx0XFx0bG9uZyBjcHVzID0gc3lzY29uZihfU0NfTlBST0NFU1NPUlNfT05MTik7XFxuK1xcbitcXHRcXHRucl9wcm9jcyA9IGNwdXMgXFx1MDAzZSAwID8gKHVuc2lnbmVkIGludCljcHVzICogMiA6IDQ7XFxuK1xcdH1cXG4rXFx0aWYgKG5yX3Byb2NzIFxcdTAwM2MgMilcXG4rXFx0XFx0bnJfcHJvY3MgPSAyO1xcbitcXG4rXFx0aHVnZV9wYWdlX3NpemUgPSBkZWZhdWx0X2h1Z2VfcGFnZV9zaXplKCk7XFxuK1xcdGlmICghaHVnZV9wYWdlX3NpemUpXFxuK1xcdFxcdGtzZnRfZXhpdF9za2lwKFxcXCJubyBodWdldGxiZnMgLyBodWdlIHBhZ2Ugc2l6ZSBhdmFpbGFibGVcXFxcblxcXCIpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogQm90aCBtb2RlcyBmYXVsdCBwYWdlcyBpbiAoZnVuY3Rpb25hbF9jaGVjayB0b3VjaGVzIGV2ZXJ5IHBhZ2UgaXRcXG4rXFx0ICogbWFwcywgYW5kIC0tdHJpZ2dlcidzIHdvcmtlcnMgZmF1bHQgdGhlIHJhbmdlcyB0aGV5IG1hcCksIHNvIHRoZVxcbitcXHQgKiB3aG9sZSBmaWxlIG1heSBiZWNvbWUgcmVzaWRlbnQ7IHJlcXVpcmUgdGhhdCBtYW55ICpmcmVlKiBodWdlIHBhZ2VzLFxcbitcXHQgKiBub3QganVzdCByZXNlcnZhdGlvbnMuXFxuK1xcdCAqL1xcbitcXHRpZiAoaHVnZXRsYl9mcmVlX2RlZmF1bHRfcGFnZXMoKSBcXHUwMDNjIGZpbGVfcGFnZXMpXFxuK1xcdFxcdGtzZnRfZXhpdF9za2lwKFxcXCJuZWVkICVsdSBmcmVlIGh1Z2UgcGFnZXMsIGhhdmUgJWx1IChzZXQgbnJfaHVnZXBhZ2VzKVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgICAgIGZpbGVfcGFnZXMsIGh1Z2V0bGJfZnJlZV9kZWZhdWx0X3BhZ2VzKCkpO1xcbitcXG4rXFx0bWVtZmQgPSBzeXNfbWVtZmRfY3JlYXRlKFxcXCJodWdldGxiX3JlZ2lvbl9jYWNoZV9yYWNlXFxcIixcXG4rXFx0XFx0XFx0XFx0IE1GRF9IVUdFVExCIHxcXG4rXFx0XFx0XFx0XFx0IChfX2J1aWx0aW5fY3R6bChodWdlX3BhZ2Vfc2l6ZSkgXFx1MDAzY1xcdTAwM2MgTUZEX0hVR0VfU0hJRlQpKTtcXG4rXFx0aWYgKG1lbWZkIFxcdTAwM2MgMClcXG4rXFx0XFx0a3NmdF9leGl0X3NraXAoXFxcIm1lbWZkX2NyZWF0ZShNRkRfSFVHRVRMQik6ICVzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICAgICAgc3RyZXJyb3IoZXJybm8pKTtcXG4rXFx0aWYgKGZ0cnVuY2F0ZShtZW1mZCwgZmlsZV9wYWdlcyAqIGh1Z2VfcGFnZV9zaXplKSkge1xcbitcXHRcXHRjbG9zZShtZW1mZCk7XFxuK1xcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiZnRydW5jYXRlOiAlc1xcXFxuXFxcIiwgc3RyZXJyb3IoZXJybm8pKTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHRyaWdnZXIpXFxuK1xcdFxcdHJldCA9IHJ1bl90cmlnZ2VyKCk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0cmV0ID0gZnVuY3Rpb25hbF9jaGVjaygpO1xcbitcXG4rXFx0Y2xvc2UobWVtZmQpO1xcbitcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0a3NmdF90ZXN0X3Jlc3VsdF9mYWlsKFxcXCJodWdldGxiIHJlZ2lvbl9jYWNoZSByYWNlIGNoZWNrXFxcXG5cXFwiKTtcXG4rXFx0ZWxzZSBpZiAodHJpZ2dlcilcXG4rXFx0XFx0a3NmdF90ZXN0X3Jlc3VsdF9wYXNzKFxcXCJzdXJ2aXZlZCBjb25jdXJyZW50IHJlZ2lvbl9jYWNoZSBjaHVyblxcXFxuXFxcIik7XFxuK1xcdGVsc2VcXG4rXFx0XFx0a3NmdF90ZXN0X3Jlc3VsdF9wYXNzKFxcXCJtdWx0aS1lbnRyeSByZWdpb25fY2FjaGUgcmVmaWxsIHdvcmtzXFxcXG5cXFwiKTtcXG4rXFxuK1xcdGtzZnRfZmluaXNoZWQoKTtcXG4rfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoXFxuaW5kZXggOGMyOTZkZWRmMDQ3NGQuLjBjYjg1NzA1NjkxNWY0IDEwMDc1NVxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2hcXG5AQCAtMjY3LDYgKzI2Nyw3IEBAIENBVEVHT1JZPVxcXCJodWdldGxiXFxcIiBydW5fdGVzdCAuL2h1Z2V0bGItbWFkdmlzZVxcbiBDQVRFR09SWT1cXFwiaHVnZXRsYlxcXCIgcnVuX3Rlc3QgLi9odWdldGxiX2Rpb1xcbiBDQVRFR09SWT1cXFwiaHVnZXRsYlxcXCIgcnVuX3Rlc3QgLi9odWdldGxiX2ZhdWx0X2FmdGVyX21hZHZcXG4gQ0FURUdPUlk9XFxcImh1Z2V0bGJcXFwiIHJ1bl90ZXN0IC4vaHVnZXRsYl9tYWR2X3ZzX21hcFxcbitDQVRFR09SWT1cXFwiaHVnZXRsYlxcXCIgcnVuX3Rlc3QgLi9odWdldGxiX3JlZ2lvbl9jYWNoZV9yYWNlXFxuIFxcbiBpZiB0ZXN0X3NlbGVjdGVkIFxcXCJodWdldGxiXFxcIjsgdGhlblxcbiBcXHRlY2hvIFxcXCJOT1RFOiBUaGVzZSBodWdldGxiIHRlc3RzIHByb3ZpZGUgbWluaW1hbCBjb3ZlcmFnZS4gIFVzZVxcXCJcXHQgIHwgdGFwX3ByZWZpeFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QyMjozODoxNS4xODIxMzI4NjlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwODQxNDcyODUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFsbG9jYXRlX2ZpbGVfcmVnaW9uX2VudHJpZXNcIixcbiAgICBcInJlZ2lvbl9hZGRcIixcbiAgICBcInJlZ2lvbl9jaGdcIixcbiAgICBcInJlZ2lvbl9kZWxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGxpc3QgY29ycnVwdGlvbiBidWcgaW4gYWxsb2NhdGVfZmlsZV9yZWdpb25fZW50cmllcyBpbiBodWdldGxiZnMuIFRoZSBidWcgaXMgdHJpZ2dlcmVkIGJ5IGEgcmFjZSBjb25kaXRpb24gd2hlbiB0aGUgcmVnaW9uIGNhY2hlIG5lZWRzIHRvIGJlIHJlZmlsbGVkIG11bHRpcGxlIHRpbWVzLiBGdXp6aW5nIGh1Z2V0bGJmcyByZXNlcnZhdGlvbiBmdW5jdGlvbnMgY2FuIGhlbHAgZW5zdXJlIHRoZSBmaXggaXMgcm9idXN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDhhZGJkNWI2ZjRiNDY3YWFlMTJjYjkxNzUwYzFiMGI4Njc0MmI2ZTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCAxMyAyMjozODoxMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuY1xuaW5kZXggNTcxMjEyYjgwODM1ZWMuLmY5NTc3YTc4OWZlNjRmIDEwMDY0NFxuLS0tIGEvbW0vaHVnZXRsYi5jXG4rKysgYi9tbS9odWdldGxiLmNcbkBAIC02OTMsNyArNjkzLDcgQEAgc3RhdGljIGludCBhbGxvY2F0ZV9maWxlX3JlZ2lvbl9lbnRyaWVzKHN0cnVjdCByZXN2X21hcCAqcmVzdixcbiBcbiBcdFx0c3Bpbl9sb2NrKFx1MDAyNnJlc3YtXHUwMDNlbG9jayk7XG4gXG4tXHRcdGxpc3Rfc3BsaWNlKFx1MDAyNmFsbG9jYXRlZF9yZWdpb25zLCBcdTAwMjZyZXN2LVx1MDAzZXJlZ2lvbl9jYWNoZSk7XG4rXHRcdGxpc3Rfc3BsaWNlX2luaXQoXHUwMDI2YWxsb2NhdGVkX3JlZ2lvbnMsIFx1MDAyNnJlc3YtXHUwMDNlcmVnaW9uX2NhY2hlKTtcbiBcdFx0cmVzdi1cdTAwM2VyZWdpb25fY2FjaGVfY291bnQgKz0gdG9fYWxsb2NhdGU7XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vLmdpdGlnbm9yZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLy5naXRpZ25vcmVcbmluZGV4IDljY2Q5ZTE0NDdlNjZiLi43ZGI4NjU3OTYwZDlmMCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLy5naXRpZ25vcmVcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLy5naXRpZ25vcmVcbkBAIC01OSw2ICs1OSw3IEBAIGh1Z2V0bGJfbWFkdl92c19tYXBcbiBtc2VhbF90ZXN0XG4gZHJvcHBhYmxlXG4gaHVnZXRsYl9kaW9cbitodWdldGxiX3JlZ2lvbl9jYWNoZV9yYWNlXG4gcGtleV9zaWdoYW5kbGVyX3Rlc3RzXzMyXG4gcGtleV9zaWdoYW5kbGVyX3Rlc3RzXzY0XG4gZ3VhcmQtcmVnaW9uc1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGVcbmluZGV4IGU2ZGY5NjhmMDk3MWM4Li40MjFhMGI3ZmRkZGYyOCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZVxuQEAgLTY3LDYgKzY3LDcgQEAgVEVTVF9HRU5fRklMRVMgKz0gaHVnZXRsYi1yZWFkLWh3cG9pc29uXG4gVEVTVF9HRU5fRklMRVMgKz0gaHVnZXRsYi1zaG1cbiBURVNUX0dFTl9GSUxFUyArPSBodWdldGxiLXNvZnQtb2ZmbGluZVxuIFRFU1RfR0VOX0ZJTEVTICs9IGh1Z2V0bGItdm1lbW1hcFxuK1RFU1RfR0VOX0ZJTEVTICs9IGh1Z2V0bGJfcmVnaW9uX2NhY2hlX3JhY2VcbiBURVNUX0dFTl9GSUxFUyArPSBraHVnZXBhZ2VkXG4gVEVTVF9HRU5fRklMRVMgKz0gbWFkdl9wb3B1bGF0ZVxuIFRFU1RfR0VOX0ZJTEVTICs9IG1hcF9maXhlZF9ub3JlcGxhY2VcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX3JlZ2lvbl9jYWNoZV9yYWNlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX3JlZ2lvbl9jYWNoZV9yYWNlLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNmUzZjc1MzY0MGJlOGNcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfcmVnaW9uX2NhY2hlX3JhY2UuY1xuQEAgLTAsMCArMSwzMTUgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8qXG4rICogUmVncmVzc2lvbiB0ZXN0IGZvciBsaXN0IGNvcnJ1cHRpb24gaW5cbisgKiBtbS9odWdldGxiLmM6YWxsb2NhdGVfZmlsZV9yZWdpb25fZW50cmllcygpLlxuKyAqXG4rICogRm9yayBwcm9jZXNzZXMgc2hhcmluZyBhIGh1Z2V0bGIgaW5vZGUgdmlhIGBtZW1mZF9jcmVhdGUoTUZEX0hVR0VUTEIpYFxuKyAqIGFuZCBoYXZlIHRoZW0gZmF1bHQgcmFuZ2VzIGFuZCBwdW5jaCBob2xlcyB0byBmcmFnbWVudCB0aGUgc2hhcmVkXG4rICogYHJlc3ZfbWFwYCB3aGlsZSBkcmFpbmluZyBgcmVzdi1cdTAwM2VyZWdpb25fY2FjaGVgIGZyb20gYSBzZXBhcmF0ZSBhZGRyZXNzXG4rICogc3BhY2UuXG4rICovXG4rI2RlZmluZSBfR05VX1NPVVJDRVxuKyNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NmY250bC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc2V0am1wLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzaWduYWwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGJvb2wuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGludC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkaW8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGxpYi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2N0aW1lLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N5cy9tbWFuLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvc3lzY2FsbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3lzL3dhaXQuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZhbGxvYy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbWVtZmQuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwiLi4va3NlbGZ0ZXN0LmhcIlxuKyNpbmNsdWRlIFwiaHVnZXBhZ2Vfc2V0dGluZ3MuaFwiXG4rXG4rLyogVHVuYWJsZXMgKG92ZXJyaWRhYmxlIHZpYSBhcmd2KS4gKi9cbitzdGF0aWMgdW5zaWduZWQgbG9uZyBmaWxlX3BhZ2VzID0gNjQ7XHQvKiBodWdlIHBhZ2VzIGJhY2tpbmcgdGhlIHNoYXJlZCBmaWxlICovXG4rc3RhdGljIHVuc2lnbmVkIGludCBucl9wcm9jcztcdFx0LyogMCA9XHUwMDNlIGF1dG8gKDIgKiBuciBvbmxpbmUgY3B1cykgKi9cbitzdGF0aWMgdW5zaWduZWQgaW50IGR1cmF0aW9uX3NlYyA9IDU7XHQvKiAtLXRyaWdnZXIgcnVuIHRpbWUgKi9cbitcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBodWdlX3BhZ2Vfc2l6ZTtcdC8qIGJ5dGVzICovXG4rc3RhdGljIGludCBtZW1mZCA9IC0xO1xuK3N0YXRpYyB2b2xhdGlsZSBpbnQgKnN0b3A7XHRcdC8qIHNoYXJlZCBhY3Jvc3MgZm9ya2VkIGNoaWxkcmVuICovXG4rXG4rLypcbisgKiBQZXItcHJvY2VzcyBTSUdCVVMgZXNjYXBlOiBhIGZhdWx0IGNhbiBmYWlsIChwb29sIGV4aGF1c3RlZCkgYW5kIHJhaXNlXG4rICogU0lHQlVTOyBqdW1wIGJhY2sgYW5kIGFiYW5kb24gdGhlIHJlc3Qgb2YgdGhlIGN1cnJlbnQgcmFuZ2UgaW5zdGVhZCBvZlxuKyAqIGR5aW5nLiAgRWFjaCBjaGlsZCBpcyBzaW5nbGUtdGhyZWFkZWQsIHNvIGEgZmlsZS1zY29wZSBidWZmZXIgaXMgZmluZS5cbisgKi9cbitzdGF0aWMgc2lnam1wX2J1ZiBzaWdidXNfZW52O1xuK1xuK3N0YXRpYyB2b2lkIHNpZ2J1c19oYW5kbGVyKGludCBzaWcpXG4re1xuK1x0c2lnbG9uZ2ptcChzaWdidXNfZW52LCAxKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgaW5zdGFsbF9zaWdidXNfaGFuZGxlcih2b2lkKVxuK3tcbitcdHN0cnVjdCBzaWdhY3Rpb24gc2EgPSB7XG4rXHRcdC5zYV9oYW5kbGVyID0gc2lnYnVzX2hhbmRsZXIsXG4rXHR9O1xuK1xuK1x0c2lnZW1wdHlzZXQoXHUwMDI2c2Euc2FfbWFzayk7XG4rXHRzaWdhY3Rpb24oU0lHQlVTLCBcdTAwMjZzYSwgTlVMTCk7XG4rfVxuK1xuK3N0YXRpYyBsb25nIHN5c19tZW1mZF9jcmVhdGUoY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgaW50IGZsYWdzKVxuK3tcbitcdHJldHVybiBzeXNjYWxsKF9fTlJfbWVtZmRfY3JlYXRlLCBuYW1lLCBmbGFncyk7XG4rfVxuK1xuKy8qXG4rICogTWFwIFtzdGFydCwgc3RhcnQrbGVuKSBvZiB0aGUgc2hhcmVkIGZpbGUgYW5kIGZhdWx0IGV2ZXJ5IHBhZ2UgaW4uXG4rICpcbisgKiBUaGUgbW1hcCgpIGRyaXZlcyBtbWFwLXRpbWUgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzIC1cdTAwM2UgcmVnaW9uX2NoZyAodGhlXG4rICogd2lkZS13aW5kb3cgdmljdGltIHdoZW4gdGhlIHJhbmdlIGlzIGZyYWdtZW50ZWQpICsgcmVnaW9uX2FkZC4gIFRoZVxuKyAqIHN1YnNlcXVlbnQgc3RvcmVzIGZhdWx0IHBhZ2VzIGluICp3aXRob3V0KiBpbm9kZV9sb2NrLCBkcml2aW5nIHRoZVxuKyAqIGxvY2stZnJlZSByZWdpb25fYWRkL3JlZ2lvbl9jaGcgdGhhdCBkcmFpbnMgcmVzdi1cdTAwM2VyZWdpb25fY2FjaGUgLS0gdGhlXG4rICogY29uY3VycmVuY3kgdGhlIGJ1Z2d5IGxvb3AgbmVlZHMgZnJvbSAqb3RoZXIqIHByb2Nlc3Nlcy5cbisgKi9cbitzdGF0aWMgdm9pZCBtYXBfYW5kX2ZhdWx0X3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgbGVuKVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgaTtcbitcdGNoYXIgKmFkZHI7XG4rXG4rXHRpZiAoIWxlbilcbitcdFx0cmV0dXJuO1xuK1x0YWRkciA9IG1tYXAoTlVMTCwgbGVuICogaHVnZV9wYWdlX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG4rXHRcdCAgICBNQVBfU0hBUkVELCBtZW1mZCwgc3RhcnQgKiBodWdlX3BhZ2Vfc2l6ZSk7XG4rXHRpZiAoYWRkciA9PSBNQVBfRkFJTEVEKVxuK1x0XHRyZXR1cm47XHRcdC8qIEVOT01FTSB1bmRlciBwb29sIHByZXNzdXJlIGlzIGZpbmUgKi9cbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGxlbjsgaSsrKSB7XG4rXHRcdGlmIChzaWdzZXRqbXAoc2lnYnVzX2VudiwgMSkgPT0gMClcbitcdFx0XHQqKHZvbGF0aWxlIGNoYXIgKikoYWRkciArIGkgKiBodWdlX3BhZ2Vfc2l6ZSkgPSAoY2hhcilpO1xuK1x0XHRlbHNlXG4rXHRcdFx0YnJlYWs7XHQvKiBTSUdCVVM6IHBvb2wgZXhoYXVzdGVkLCBzdG9wIGZhdWx0aW5nICovXG4rXHR9XG4rXHRtdW5tYXAoYWRkciwgbGVuICogaHVnZV9wYWdlX3NpemUpO1xuK31cbitcbisvKlxuKyAqIFJlbW92ZSBbc3RhcnQsIHN0YXJ0K2xlbikgaHVnZSBwYWdlcyBmcm9tIHRoZSBzaGFyZWQgZmlsZSwgZHJpdmluZ1xuKyAqIGh1Z2V0bGJmc19wdW5jaF9ob2xlIC1cdTAwM2UgcmVtb3ZlX2lub2RlX2h1Z2VwYWdlcyAtXHUwMDNlIHJlZ2lvbl9kZWwgZm9yIHRoZSBwYWdlc1xuKyAqIHRoYXQgd2VyZSBmYXVsdGVkIGluIGFib3ZlLiAgVGhpcyBmcmVlcyBwYWdlcyBiYWNrIHRvIHRoZSBwb29sIChib3VuZGluZ1xuKyAqIHJlc2lkZW5jeSkgYW5kIHJlLWZyYWdtZW50cyB0aGUgcmVzdl9tYXAgc28gbGF0ZXIgcmVnaW9uX2NoZyBjYWxscyBrZWVwXG4rICogbmVlZGluZyBtdWx0aXBsZSBlbnRyaWVzLlxuKyAqL1xuK3N0YXRpYyB2b2lkIHB1bmNoX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgbGVuKVxuK3tcbitcdGlmICghbGVuKVxuK1x0XHRyZXR1cm47XG4rXHRmYWxsb2NhdGUobWVtZmQsIEZBTExPQ19GTF9QVU5DSF9IT0xFIHwgRkFMTE9DX0ZMX0tFRVBfU0laRSxcbitcdFx0ICBzdGFydCAqIGh1Z2VfcGFnZV9zaXplLCBsZW4gKiBodWdlX3BhZ2Vfc2l6ZSk7XG4rfVxuK1xuKy8qXG4rICogT25lIGZvcmtlZCB3b3JrZXIuICBFYWNoIHdvcmtlciBpcyBzaW11bHRhbmVvdXNseSBhIHZpY3RpbSAoaXRzIHdpZGVcbisgKiBtbWFwLXRpbWUgcmVnaW9uX2NoZykgYW5kLCBmb3IgdGhlIG90aGVyIHdvcmtlcnMsIGEgbG9jay1mcmVlIGNhY2hlXG4rICogZHJhaW5lciAoaXRzIGZhdWx0cykgLS0gZXhhY3RseSB0aGUgc2hhcmVkLWlub2RlIG1hcCtmYXVsdCBjaHVybiBzZWVuIGluXG4rICogdGhlIG9yaWdpbmFsIGNyYXNoIChRRU1VIHByZWFsbG9jICsgU1BESy9CeXRlbGlnaHQgb24gb25lIGd1ZXN0LVJBTSBmaWxlKS5cbisgKi9cbitzdGF0aWMgdm9pZCBjaGlsZF93b3JrZXIodW5zaWduZWQgaW50IGlkKVxuK3tcbitcdHVuc2lnbmVkIGludCBzZWVkID0gaWQgKiAyNjU0NDM1NzYxdSBeICh1bnNpZ25lZCBpbnQpdGltZShOVUxMKSBeXG4rXHRcdFx0ICAgICgodW5zaWduZWQgaW50KWdldHBpZCgpIFx1MDAzY1x1MDAzYyAxKTtcbitcbitcdGluc3RhbGxfc2lnYnVzX2hhbmRsZXIoKTtcbitcbitcdHdoaWxlICghKnN0b3ApIHtcbitcdFx0dW5zaWduZWQgbG9uZyBzdGFydCA9IHJhbmRfcihcdTAwMjZzZWVkKSAlIGZpbGVfcGFnZXM7XG4rXHRcdHVuc2lnbmVkIGxvbmcgbGVuID0gMSArIHJhbmRfcihcdTAwMjZzZWVkKSAlIChmaWxlX3BhZ2VzIC0gc3RhcnQpO1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBCaWFzIHRvd2FyZCBtYXArZmF1bHQgKHZpY3RpbXMgYW5kIGRyYWluZXJzKTsgcHVuY2ggYVxuK1x0XHQgKiBxdWFydGVyIG9mIHRoZSB0aW1lIHRvIGtlZXAgdGhlIG1hcCBmcmFnbWVudGVkIGFuZCB0byBjYXBcbitcdFx0ICogaG93IG1hbnkgcGFnZXMgc3RheSByZXNpZGVudC5cbitcdFx0ICovXG4rXHRcdGlmIChyYW5kX3IoXHUwMDI2c2VlZCkgJSA0KVxuK1x0XHRcdG1hcF9hbmRfZmF1bHRfcmFuZ2Uoc3RhcnQsIGxlbik7XG4rXHRcdGVsc2VcbitcdFx0XHRwdW5jaF9yYW5nZShzdGFydCwgbGVuKTtcbitcdH1cbit9XG4rXG4rLypcbisgKiBTYWZlLCBzaW5nbGUtcHJvY2VzcyBmdW5jdGlvbmFsIGNoZWNrLiAgSXQgZnJhZ21lbnRzIHRoZSBzaGFyZWQgcmVzdl9tYXBcbisgKiAocmVzZXJ2YXRpb25zIGZvciBhIHNoYXJlZCBtYXBwaW5nIHBlcnNpc3Qgb24gdGhlIGlub2RlIGFmdGVyIG11bm1hcCkgc29cbisgKiB0aGF0IGEgc3Vic2VxdWVudCB3aG9sZS1maWxlIG1tYXAgbWFrZXMgcmVnaW9uX2NoZyBjb21wdXRlXG4rICogcmVnaW9uc19uZWVkZWQgXHUwMDNlIDEsIGZvcmNpbmcgYWxsb2NhdGVfZmlsZV9yZWdpb25fZW50cmllcyB0byBhbGxvY2F0ZSBhbmRcbisgKiBzcGxpY2Ugc2V2ZXJhbCBlbnRyaWVzLiAgVGhpcyBleGVyY2lzZXMgdGhlIGJ1Z2d5IGxpbmUsIGJ1dCB3aXRob3V0XG4rICogY29uY3VycmVuY3kgaXQgYWx3YXlzIG1ha2VzIGV4YWN0bHkgb25lIGxvb3AgaXRlcmF0aW9uLCBzbyBpdCBjYW5ub3QgdHJpcFxuKyAqIHRoZSByYWNlIGFuZCBpcyBzYWZlIG9uIGFueSBrZXJuZWwuICBSZXR1cm5zIDAgb24gc3VjY2Vzcy5cbisgKi9cbitzdGF0aWMgaW50IGZ1bmN0aW9uYWxfY2hlY2sodm9pZClcbit7XG4rXHR1bnNpZ25lZCBsb25nIGk7XG4rXHR2b2lkICphZGRyO1xuK1xuK1x0LyogUHVuY2ggZXZlcnl0aGluZyBzbyB3ZSBzdGFydCBmcm9tIGFuIGVtcHR5IHJlc3ZfbWFwLiAqL1xuK1x0cHVuY2hfcmFuZ2UoMCwgZmlsZV9wYWdlcyk7XG4rXG4rXHQvKiBSZXNlcnZlIGV2ZXJ5IG90aGVyIGh1Z2UgcGFnZSAtXHUwMDNlIH5maWxlX3BhZ2VzLzIgZGlzam9pbnQgcmVnaW9ucy4gKi9cbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGZpbGVfcGFnZXM7IGkgKz0gMilcbitcdFx0bWFwX2FuZF9mYXVsdF9yYW5nZShpLCAxKTtcbitcbitcdC8qXG4rXHQgKiBPbmUgbWFwcGluZyBzcGFubmluZyB0aGUgd2hvbGUgZmlsZSBtdXN0IGZpbGwgYWxsIHRoZSBob2xlcyBpbiBhXG4rXHQgKiBzaW5nbGUgcmVnaW9uX2NoZyAtXHUwMDNlIGEgbXVsdGktZW50cnkgcmVnaW9uX2NhY2hlIHJlZmlsbC5cbitcdCAqL1xuK1x0YWRkciA9IG1tYXAoTlVMTCwgZmlsZV9wYWdlcyAqIGh1Z2VfcGFnZV9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxuK1x0XHQgICAgTUFQX1NIQVJFRCwgbWVtZmQsIDApO1xuK1x0aWYgKGFkZHIgPT0gTUFQX0ZBSUxFRCkge1xuK1x0XHRrc2Z0X3ByaW50X21zZyhcIndob2xlLWZpbGUgbW1hcCBmYWlsZWQ6ICVzXFxuXCIsIHN0cmVycm9yKGVycm5vKSk7XG4rXHRcdHJldHVybiAtMTtcbitcdH1cbitcdG11bm1hcChhZGRyLCBmaWxlX3BhZ2VzICogaHVnZV9wYWdlX3NpemUpO1xuK1x0cHVuY2hfcmFuZ2UoMCwgZmlsZV9wYWdlcyk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBydW5fdHJpZ2dlcih2b2lkKVxuK3tcbitcdHBpZF90ICpwaWRzO1xuK1x0dW5zaWduZWQgaW50IGksIHN0YXJ0ZWQgPSAwO1xuK1xuK1x0c3RvcCA9IG1tYXAoTlVMTCwgc2l6ZW9mKCpzdG9wKSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcbitcdFx0ICAgIE1BUF9TSEFSRUQgfCBNQVBfQU5PTllNT1VTLCAtMSwgMCk7XG4rXHRpZiAoc3RvcCA9PSBNQVBfRkFJTEVEKVxuK1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJtbWFwKHN0b3AgZmxhZyk6ICVzXFxuXCIsIHN0cmVycm9yKGVycm5vKSk7XG4rXHQqc3RvcCA9IDA7XG4rXG4rXHRwaWRzID0gY2FsbG9jKG5yX3Byb2NzLCBzaXplb2YoKnBpZHMpKTtcbitcdGlmICghcGlkcylcbitcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiY2FsbG9jOiAlc1xcblwiLCBzdHJlcnJvcihlcnJubykpO1xuK1xuK1x0a3NmdF9wcmludF9tc2coXCJzdHJlc3NpbmcgJXUgcHJvY2Vzc2VzIGZvciAldXMgb24gJWx1IGh1Z2UgcGFnZXMgKCVsdSBNaUIpXFxuXCIsXG4rXHRcdCAgICAgICBucl9wcm9jcywgZHVyYXRpb25fc2VjLCBmaWxlX3BhZ2VzLFxuK1x0XHQgICAgICAgKGZpbGVfcGFnZXMgKiBodWdlX3BhZ2Vfc2l6ZSkgXHUwMDNlXHUwMDNlIDIwKTtcbitcdGtzZnRfcHJpbnRfbXNnKFwiV0FSTklORzogYSB2dWxuZXJhYmxlIGtlcm5lbCB3aWxsIHBhbmljIGhlcmVcXG5cIik7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9wcm9jczsgaSsrKSB7XG4rXHRcdHBpZF90IHBpZCA9IGZvcmsoKTtcbitcbitcdFx0aWYgKHBpZCBcdTAwM2MgMCkge1xuK1x0XHRcdGtzZnRfcHJpbnRfbXNnKFwiZm9yazogJXNcXG5cIiwgc3RyZXJyb3IoZXJybm8pKTtcbitcdFx0XHRicmVhaztcbitcdFx0fVxuK1x0XHRpZiAocGlkID09IDApIHtcbitcdFx0XHRmcmVlKHBpZHMpO1xuK1x0XHRcdGNoaWxkX3dvcmtlcihpKTtcbitcdFx0XHRfZXhpdCgwKTtcbitcdFx0fVxuK1x0XHRwaWRzW3N0YXJ0ZWQrK10gPSBwaWQ7XG4rXHR9XG4rXG4rXHRpZiAoIXN0YXJ0ZWQpIHtcbitcdFx0ZnJlZShwaWRzKTtcbitcdFx0bXVubWFwKCh2b2lkICopc3RvcCwgc2l6ZW9mKCpzdG9wKSk7XG4rXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIm5vIHdvcmtlciBwcm9jZXNzZXMgc3RhcnRlZFxcblwiKTtcbitcdH1cbitcbitcdHNsZWVwKGR1cmF0aW9uX3NlYyk7XG4rXHQqc3RvcCA9IDE7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBzdGFydGVkOyBpKyspXG4rXHRcdHdhaXRwaWQocGlkc1tpXSwgTlVMTCwgMCk7XG4rXHRmcmVlKHBpZHMpO1xuK1x0bXVubWFwKCh2b2lkICopc3RvcCwgc2l6ZW9mKCpzdG9wKSk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZvaWQgdXNhZ2UoY29uc3QgY2hhciAqcHJvZylcbit7XG4rXHRmcHJpbnRmKHN0ZGVycixcbitcdFx0XCJ1c2FnZTogJXMgWy0tdHJpZ2dlcl0gWy1zIGh1Z2VfcGFnZXNdIFstdCBwcm9jc10gWy1kIHNlY29uZHNdXFxuXCJcbitcdFx0XCIgIChkZWZhdWx0KSBydW4gYSBzYWZlIHNpbmdsZS1wcm9jZXNzIGZ1bmN0aW9uYWwgY2hlY2tcXG5cIlxuK1x0XHRcIiAgLS10cmlnZ2VyIGZvcmsrZmF1bHQgY29uY3VycmVudCByZXByb2R1Y2VyIChDQU4gUEFOSUMgQSBCVUdHWSBIT1NUKVxcblwiXG4rXHRcdFwiICAtcyAgaHVnZSBwYWdlcyBiYWNraW5nIHRoZSBzaGFyZWQgZmlsZSAoZGVmYXVsdCAlbHUpXFxuXCJcbitcdFx0XCIgIC10ICB3b3JrZXIgcHJvY2Vzc2VzIGZvciAtLXRyaWdnZXIgKGRlZmF1bHQgMiAqIG5yX2NwdXMpXFxuXCJcbitcdFx0XCIgIC1kICAtLXRyaWdnZXIgcnVuIHRpbWUgaW4gc2Vjb25kcyAoZGVmYXVsdCAldSlcXG5cIixcbitcdFx0cHJvZywgZmlsZV9wYWdlcywgZHVyYXRpb25fc2VjKTtcbit9XG4rXG4raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbit7XG4rXHRib29sIHRyaWdnZXIgPSBmYWxzZTtcbitcdGludCBpLCByZXQ7XG4rXG4rXHRmb3IgKGkgPSAxOyBpIFx1MDAzYyBhcmdjOyBpKyspIHtcbitcdFx0aWYgKCFzdHJjbXAoYXJndltpXSwgXCItLXRyaWdnZXJcIikpIHtcbitcdFx0XHR0cmlnZ2VyID0gdHJ1ZTtcbitcdFx0fSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbaV0sIFwiLXNcIikgXHUwMDI2XHUwMDI2IGkgKyAxIFx1MDAzYyBhcmdjKSB7XG4rXHRcdFx0ZmlsZV9wYWdlcyA9IHN0cnRvdWwoYXJndlsrK2ldLCBOVUxMLCAwKTtcbitcdFx0fSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbaV0sIFwiLXRcIikgXHUwMDI2XHUwMDI2IGkgKyAxIFx1MDAzYyBhcmdjKSB7XG4rXHRcdFx0bnJfcHJvY3MgPSBzdHJ0b3VsKGFyZ3ZbKytpXSwgTlVMTCwgMCk7XG4rXHRcdH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2W2ldLCBcIi1kXCIpIFx1MDAyNlx1MDAyNiBpICsgMSBcdTAwM2MgYXJnYykge1xuK1x0XHRcdGR1cmF0aW9uX3NlYyA9IHN0cnRvdWwoYXJndlsrK2ldLCBOVUxMLCAwKTtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHR1c2FnZShhcmd2WzBdKTtcbitcdFx0XHRyZXR1cm4gS1NGVF9GQUlMO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRrc2Z0X3ByaW50X2hlYWRlcigpO1xuK1x0a3NmdF9zZXRfcGxhbigxKTtcbitcbitcdGlmIChmaWxlX3BhZ2VzIFx1MDAzYyA0KVxuK1x0XHRmaWxlX3BhZ2VzID0gNDtcbitcdGlmICghbnJfcHJvY3MpIHtcbitcdFx0bG9uZyBjcHVzID0gc3lzY29uZihfU0NfTlBST0NFU1NPUlNfT05MTik7XG4rXG4rXHRcdG5yX3Byb2NzID0gY3B1cyBcdTAwM2UgMCA/ICh1bnNpZ25lZCBpbnQpY3B1cyAqIDIgOiA0O1xuK1x0fVxuK1x0aWYgKG5yX3Byb2NzIFx1MDAzYyAyKVxuK1x0XHRucl9wcm9jcyA9IDI7XG4rXG4rXHRodWdlX3BhZ2Vfc2l6ZSA9IGRlZmF1bHRfaHVnZV9wYWdlX3NpemUoKTtcbitcdGlmICghaHVnZV9wYWdlX3NpemUpXG4rXHRcdGtzZnRfZXhpdF9za2lwKFwibm8gaHVnZXRsYmZzIC8gaHVnZSBwYWdlIHNpemUgYXZhaWxhYmxlXFxuXCIpO1xuK1xuK1x0LypcbitcdCAqIEJvdGggbW9kZXMgZmF1bHQgcGFnZXMgaW4gKGZ1bmN0aW9uYWxfY2hlY2sgdG91Y2hlcyBldmVyeSBwYWdlIGl0XG4rXHQgKiBtYXBzLCBhbmQgLS10cmlnZ2VyJ3Mgd29ya2VycyBmYXVsdCB0aGUgcmFuZ2VzIHRoZXkgbWFwKSwgc28gdGhlXG4rXHQgKiB3aG9sZSBmaWxlIG1heSBiZWNvbWUgcmVzaWRlbnQ7IHJlcXVpcmUgdGhhdCBtYW55ICpmcmVlKiBodWdlIHBhZ2VzLFxuK1x0ICogbm90IGp1c3QgcmVzZXJ2YXRpb25zLlxuK1x0ICovXG4rXHRpZiAoaHVnZXRsYl9mcmVlX2RlZmF1bHRfcGFnZXMoKSBcdTAwM2MgZmlsZV9wYWdlcylcbitcdFx0a3NmdF9leGl0X3NraXAoXCJuZWVkICVsdSBmcmVlIGh1Z2UgcGFnZXMsIGhhdmUgJWx1IChzZXQgbnJfaHVnZXBhZ2VzKVxcblwiLFxuK1x0XHRcdCAgICAgICBmaWxlX3BhZ2VzLCBodWdldGxiX2ZyZWVfZGVmYXVsdF9wYWdlcygpKTtcbitcbitcdG1lbWZkID0gc3lzX21lbWZkX2NyZWF0ZShcImh1Z2V0bGJfcmVnaW9uX2NhY2hlX3JhY2VcIixcbitcdFx0XHRcdCBNRkRfSFVHRVRMQiB8XG4rXHRcdFx0XHQgKF9fYnVpbHRpbl9jdHpsKGh1Z2VfcGFnZV9zaXplKSBcdTAwM2NcdTAwM2MgTUZEX0hVR0VfU0hJRlQpKTtcbitcdGlmIChtZW1mZCBcdTAwM2MgMClcbitcdFx0a3NmdF9leGl0X3NraXAoXCJtZW1mZF9jcmVhdGUoTUZEX0hVR0VUTEIpOiAlc1xcblwiLFxuK1x0XHRcdCAgICAgICBzdHJlcnJvcihlcnJubykpO1xuK1x0aWYgKGZ0cnVuY2F0ZShtZW1mZCwgZmlsZV9wYWdlcyAqIGh1Z2VfcGFnZV9zaXplKSkge1xuK1x0XHRjbG9zZShtZW1mZCk7XG4rXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcImZ0cnVuY2F0ZTogJXNcXG5cIiwgc3RyZXJyb3IoZXJybm8pKTtcbitcdH1cbitcbitcdGlmICh0cmlnZ2VyKVxuK1x0XHRyZXQgPSBydW5fdHJpZ2dlcigpO1xuK1x0ZWxzZVxuK1x0XHRyZXQgPSBmdW5jdGlvbmFsX2NoZWNrKCk7XG4rXG4rXHRjbG9zZShtZW1mZCk7XG4rXG4rXHRpZiAocmV0KVxuK1x0XHRrc2Z0X3Rlc3RfcmVzdWx0X2ZhaWwoXCJodWdldGxiIHJlZ2lvbl9jYWNoZSByYWNlIGNoZWNrXFxuXCIpO1xuK1x0ZWxzZSBpZiAodHJpZ2dlcilcbitcdFx0a3NmdF90ZXN0X3Jlc3VsdF9wYXNzKFwic3Vydml2ZWQgY29uY3VycmVudCByZWdpb25fY2FjaGUgY2h1cm5cXG5cIik7XG4rXHRlbHNlXG4rXHRcdGtzZnRfdGVzdF9yZXN1bHRfcGFzcyhcIm11bHRpLWVudHJ5IHJlZ2lvbl9jYWNoZSByZWZpbGwgd29ya3NcXG5cIik7XG4rXG4rXHRrc2Z0X2ZpbmlzaGVkKCk7XG4rfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2hcbmluZGV4IDhjMjk2ZGVkZjA0NzRkLi4wY2I4NTcwNTY5MTVmNCAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaFxuQEAgLTI2Nyw2ICsyNjcsNyBAQCBDQVRFR09SWT1cImh1Z2V0bGJcIiBydW5fdGVzdCAuL2h1Z2V0bGItbWFkdmlzZVxuIENBVEVHT1JZPVwiaHVnZXRsYlwiIHJ1bl90ZXN0IC4vaHVnZXRsYl9kaW9cbiBDQVRFR09SWT1cImh1Z2V0bGJcIiBydW5fdGVzdCAuL2h1Z2V0bGJfZmF1bHRfYWZ0ZXJfbWFkdlxuIENBVEVHT1JZPVwiaHVnZXRsYlwiIHJ1bl90ZXN0IC4vaHVnZXRsYl9tYWR2X3ZzX21hcFxuK0NBVEVHT1JZPVwiaHVnZXRsYlwiIHJ1bl90ZXN0IC4vaHVnZXRsYl9yZWdpb25fY2FjaGVfcmFjZVxuIFxuIGlmIHRlc3Rfc2VsZWN0ZWQgXCJodWdldGxiXCI7IHRoZW5cbiBcdGVjaG8gXCJOT1RFOiBUaGVzZSBodWdldGxiIHRlc3RzIHByb3ZpZGUgbWluaW1hbCBjb3ZlcmFnZS4gIFVzZVwiXHQgIHwgdGFwX3ByZWZpeFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMjI6Mzg6MTUuMTgyMTM1MzZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTE5MDM4NTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtlcm5lbCBQYXRjaDogSHVnZVRMQiBNb2RpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdCB0b3VjaGVzIGBtbS9odWdldGxiLmNgIGFuZCBhbHNvIGFkZHMgYSBuZXcgc2VsZnRlc3QuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaXMgdGhpcyBzdWJ0bGUgbW9kaWZpY2F0aW9uIHdpdGhpbiBgYWxsb2NhdGVfZmlsZV9yZWdpb25fZW50cmllc2AuIFRoZXkndmUgc3dhcHBlZCBvdXQgYGxpc3Rfc3BsaWNlYCBmb3IgYGxpc3Rfc3BsaWNlX2luaXRgIGluIHRoYXQgZnVuY3Rpb24uIFRoYXQncyBhIHNpZ25pZmljYW50IGNoYW5nZSB0byBjb3JlIGtlcm5lbCBjb2RlLiBBbnl0aW1lIHdlIHNlZSBzb21ldGhpbmcgbGlrZSB0aGlzLCBhIGNoYW5nZSB0byBtZW1vcnkgbWFuYWdlbWVudCwgSHVnZVRMQiBpbiB0aGlzIGNhc2UsIG15IGZpcnN0IHRob3VnaHQgaXMgXCJmdXp6aW5nXCIuIFRoaXMgbmVlZHMgYSB0aG9yb3VnaCBleGFtaW5hdGlvbi5cblxuTGV0J3MgcXVpY2tseSB2ZXJpZnkgdGhhdCB0aGUgYGFsbG9jYXRlX2ZpbGVfcmVnaW9uX2VudHJpZXNgIGZ1bmN0aW9uIGlzIGluZGVlZCB0aGUgbG9jYXRpb24gb2YgdGhlIGNoYW5nZSwgYXMgaW5kaWNhdGVkIGJ5IHRoZSBkaWZmLiBJJ2xsIGZpcmUgdXAgYGdyZXBwZXJgIGFuZCBkb3VibGUtY2hlY2ssIGJ1dCBJJ20gcHJldHR5IHN1cmUgdGhhdCdzIHRoZSBvbmUuIExldCdzIG1ha2Ugc3VyZSBiZWZvcmUgd2UgbW92ZSBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjE1OCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDIyOjM4OjIwLjMwMTE3NjQ1MVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjM4MjY0MDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWxsb2NhdGVfZmlsZV9yZWdpb25fZW50cmllc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9odWdldGxiLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZXRsYi5jPTU5ND1zdGF0aWMgbG9uZyBhZGRfcmVzZXJ2YXRpb25faW5fcmFuZ2Uoc3RydWN0IHJlc3ZfbWFwICpyZXN2LCBsb25nIGYsIGxvbmcgdCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy02NTUtICovXFxubW0vaHVnZXRsYi5jOjY1NjpzdGF0aWMgaW50IGFsbG9jYXRlX2ZpbGVfcmVnaW9uX2VudHJpZXMoc3RydWN0IHJlc3ZfbWFwICpyZXN2LFxcbm1tL2h1Z2V0bGIuYy02NTctXFx0XFx0XFx0XFx0XFx0aW50IHJlZ2lvbnNfbmVlZGVkKVxcbi0tXFxubW0vaHVnZXRsYi5jPTcyNz1zdGF0aWMgbG9uZyByZWdpb25fYWRkKHN0cnVjdCByZXN2X21hcCAqcmVzdiwgbG9uZyBmLCBsb25nIHQsXFxuLS1cXG5tbS9odWdldGxiLmMtNzU3LVxcbm1tL2h1Z2V0bGIuYzo3NTg6XFx0XFx0aWYgKGFsbG9jYXRlX2ZpbGVfcmVnaW9uX2VudHJpZXMoXFxubW0vaHVnZXRsYi5jLTc1OS1cXHRcXHRcXHQgICAgcmVzdiwgYWN0dWFsX3JlZ2lvbnNfbmVlZGVkIC0gaW5fcmVnaW9uc19uZWVkZWQpKSB7XFxuLS1cXG5tbS9odWdldGxiLmM9Nzk0PXN0YXRpYyBsb25nIHJlZ2lvbl9jaGcoc3RydWN0IHJlc3ZfbWFwICpyZXN2LCBsb25nIGYsIGxvbmcgdCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy04MDctXFxubW0vaHVnZXRsYi5jOjgwODpcXHRpZiAoYWxsb2NhdGVfZmlsZV9yZWdpb25fZW50cmllcyhyZXN2LCAqb3V0X3JlZ2lvbnNfbmVlZGVkKSlcXG5tbS9odWdldGxiLmMtODA5LVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbi0tXFxubW0vaHVnZXRsYi5jPTUxNDE9dm9pZCBfX3VubWFwX2h1Z2VwYWdlX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZXRsYi5jLTUyNzItXFx0XFx0XFx0aWYgKHJjIFxcdTAwM2MgMClcXG5tbS9odWdldGxiLmM6NTI3MzpcXHRcXHRcXHRcXHQvKiBQcmVzc3VtYWJseSBhbGxvY2F0ZV9maWxlX3JlZ2lvbl9lbnRyaWVzIGZhaWxlZFxcbm1tL2h1Z2V0bGIuYy01Mjc0LVxcdFxcdFxcdFxcdCAqIHRvIGFsbG9jYXRlIGEgZmlsZV9yZWdpb24gc3RydWN0LiBDbGVhclxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QyMjozODoyMC40MjUwMDg3MzJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDI3MzAyMDE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYGFsbG9jYXRlX2ZpbGVfcmVnaW9uX2VudHJpZXNgIEZ1bmN0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgYWxsb2NhdGVfZmlsZV9yZWdpb25fZW50cmllc2AgZnVuY3Rpb24g4oCTIHNlZW1zIGltcG9ydGFudCwgYW5kIEkgY2FuIHNlZSBpdCdzIGNoYW5nZWQgaW4gYG1tL2h1Z2V0bGIuY2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IGFzc2VzcyBhbnkgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIFdpdGggSHVnZVRMQiBjaGFuZ2VzLCBgQ09ORklHX0hVR0VUTEJGU2AgYW5kIGBDT05GSUdfSFVHRVRMQl9QQUdFYCBhcmUgdGhlIG9idmlvdXMgb25lcyB0byBjaGVjaywgYnV0IEkgY2FuJ3QgcmVseSBvbiBtZW1vcnkgYWxvbmUuIEp1c3QgdG8gYmUgc3VyZSwgSSBzaG91bGQgdmVyaWZ5IHRoZSBidWlsZCBjb25maWd1cmF0aW9ucyByZWxhdGVkIHRvIHRoaXMgYXJlYS4gSSdsbCB0YWtlIGEgbG9vayBhdCBgbW0vTWFrZWZpbGVgIHRvIGNvbmZpcm0gd2hpY2ggc2V0dGluZ3MgYXJlIHJlbGV2YW50IHRvIHRoaXMgZnVuY3Rpb24gYW5kIHRoZSBtb2R1bGUgaXQgbGl2ZXMgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwODUsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QyMjozODoyMy40NTIzMTI5NzhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODUzNDM4MzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHVnZXRsYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT04MD1vYmotJChDT05GSUdfSEFTX0RNQSlcXHQrPSBkbWFwb29sLm9cXG5tbS9NYWtlZmlsZTo4MTpvYmotJChDT05GSUdfSFVHRVRMQkZTKVxcdCs9IGh1Z2V0bGIubyBodWdldGxiX3N5c2ZzLm8gaHVnZXRsYl9zeXNjdGwub1xcbm1tL01ha2VmaWxlLTgyLWlmZGVmIENPTkZJR19DTUFcXG5tbS9NYWtlZmlsZTo4MzpvYmotJChDT05GSUdfSFVHRVRMQkZTKVxcdCs9IGh1Z2V0bGJfY21hLm9cXG5tbS9NYWtlZmlsZS04NC1lbmRpZlxcbm1tL01ha2VmaWxlOjg1Om9iai0kKENPTkZJR19IVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUClcXHQrPSBodWdldGxiX3ZtZW1tYXAub1xcbm1tL01ha2VmaWxlLTg2LW9iai0kKENPTkZJR19OVU1BKSBcXHQrPSBtZW1wb2xpY3kub1xcbi0tXFxubW0vTWFrZWZpbGU9MTA4PWVuZGlmXFxubW0vTWFrZWZpbGU6MTA5Om9iai0kKENPTkZJR19DR1JPVVBfSFVHRVRMQikgKz0gaHVnZXRsYl9jZ3JvdXAub1xcbm1tL01ha2VmaWxlLTExMC1vYmotJChDT05GSUdfR1VQX1RFU1QpICs9IGd1cF90ZXN0Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMjI6Mzg6MjMuNTM3NjY0NTcyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM0MTkxMDM5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gSHVnZVRMQiBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIHNvIEkgc2VlIGBDT05GSUdfSFVHRVRMQkZTYCBtZW50aW9uZWQsIHRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIEJ1dCwgaGFuZyBvbiwgdGhlcmUncyBhbHNvIGBDT05GSUdfSFVHRVRMQl9QQUdFYCDigJMgdGhvc2UgYXJlIGRlZmluaXRlbHkgaW50ZXJ0d2luZWQuIEkgbmVlZCB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlcy4gTGV0J3Mgc2VlLi4uIGBpbml0L0tjb25maWdgIGlzIGEgcG9zc2liaWxpdHksIGJ1dCBwcm9iYWJseSBub3QgdGhlIGJlc3Qgc3BvdCBmb3IgZmlsZSBzeXN0ZW0gb3B0aW9ucywgc28gbGV0J3Mgc3RhcnQgd2l0aCBgZnMvS2NvbmZpZ2AuIE9yIG1heWJlIGl0J3MgbWVtb3J5IG1hbmFnZW1lbnQsIHNvIGBtbS9LY29uZmlnYCBtaWdodCBiZSB0aGUgcGxhY2UgdG8gZ28gZmlyc3QuIEkga25vdyBJIHdpbGwgZmluZCBpdCB0aGVyZS4gSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIG9wdGlvbnMgYW5kIGdldCB0aGUgZGV0YWlscy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzU4OCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDIyOjM4OjI2Ljg3OTU3NzI0NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzk0NzU1Nzg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBIVUdFVExCRlNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvS2NvbmZpZz0yNDc9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTXFxuLS1cXG5mcy9LY29uZmlnLTI0OS1cXG5mcy9LY29uZmlnOjI1MDptZW51Y29uZmlnIEhVR0VUTEJGU1xcbmZzL0tjb25maWctMjUxLVxcdGJvb2wgXFxcIkh1Z2VUTEIgZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMjI6Mzg6MjkuNjc0MzM4MTI5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjU5NjIyNDg2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQXNzZXNzaW5nIEh1Z2UgUGFnZSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gdGhlIGluaXRpYWwgcHJvbXB0IGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbiBleHBlcnQgaW4gdGhpcyBhcmVhLCBpcyB0byB6ZXJvIGluIG9uIGBjb25maWcgSFVHRVRMQl9QQUdFYC4gVGhhdCdzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQgd2hlbiBpdCBjb21lcyB0byBodWdlIHBhZ2UgaW1wbGVtZW50YXRpb24gYXQgYSBrZXJuZWwgbGV2ZWwuIFRoaXMgaXMgdGhlIGx5bmNocGluIOKAkyB0aGUgbWFzdGVyIHN3aXRjaCBpZiB5b3Ugd2lsbCDigJMgZm9yIHdoZXRoZXIgb3Igbm90IGh1Z2UgcGFnZXMgYXJlIGV2ZW4gZW5hYmxlZCBhbmQgaG93IHRoZSBzeXN0ZW0gZXZlbiBsb29rcyBmb3IgbGFyZ2UgbWVtb3J5IGJsb2Nrcy4gSXQncyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIGFueSBzZXJpb3VzIGludmVzdGlnYXRpb24sIGJlIGl0IHRyb3VibGVzaG9vdGluZyBwZXJmb3JtYW5jZSBpc3N1ZXMsIHZlcmlmeWluZyBhIHNldHVwLCBvciBjb25maXJtaW5nIGEgYnVpbGQgY29uZmlndXJhdGlvbi4gSSdsbCBuZWVkIHRvIGtub3cgaXRzIHN0YXRlIHRvIGRldGVybWluZSBuZXh0IHN0ZXBzLiBJJ20gZ29pbmcgdG8gZGV0ZXJtaW5lIHdoYXQgdGhhdCBtZWFucyBmb3IgcGVyZm9ybWFuY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5MTksIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QyMjozODozMi4yNzA1NjU2MjdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NTAzOTAwNzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEhVR0VUTEJfUEFHRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3NoL21tL0tjb25maWc9MTU4PWNob2ljZVxcbi0tXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE2My1cXG5hcmNoL3NoL21tL0tjb25maWc6MTY0OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV82NEtcXG5hcmNoL3NoL21tL0tjb25maWctMTY1LVxcdGJvb2wgXFxcIjY0a0JcXFwiXFxuLS1cXG5hcmNoL3NoL21tL0tjb25maWctMTY3LVxcbmFyY2gvc2gvbW0vS2NvbmZpZzoxNjg6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzI1NktcXG5hcmNoL3NoL21tL0tjb25maWctMTY5LVxcdGJvb2wgXFxcIjI1NmtCXFxcIlxcbi0tXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE3MS1cXG5hcmNoL3NoL21tL0tjb25maWc6MTcyOmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV8xTUJcXG5hcmNoL3NoL21tL0tjb25maWctMTczLVxcdGJvb2wgXFxcIjFNQlxcXCJcXG5hcmNoL3NoL21tL0tjb25maWctMTc0LVxcbmFyY2gvc2gvbW0vS2NvbmZpZzoxNzU6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzRNQlxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzYtXFx0Ym9vbCBcXFwiNE1CXFxcIlxcbi0tXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE3OC1cXG5hcmNoL3NoL21tL0tjb25maWc6MTc5OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV82NE1CXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE4MC1cXHRib29sIFxcXCI2NE1CXFxcIlxcbi0tXFxuZnMvS2NvbmZpZz0yNjI9aWYgSFVHRVRMQkZTXFxuZnMvS2NvbmZpZzoyNjM6Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQX0RFRkFVTFRfT05cXG5mcy9LY29uZmlnLTI2NC1cXHRib29sIFxcXCJIdWdlVExCIFZtZW1tYXAgT3B0aW1pemF0aW9uIChIVk8pIGRlZmF1bHRzIHRvIG9uXFxcIlxcbi0tXFxuZnMvS2NvbmZpZz0yNzE9ZW5kaWYgIyBIVUdFVExCRlNcXG5mcy9LY29uZmlnLTI3Mi1cXG5mcy9LY29uZmlnOjI3Mzpjb25maWcgSFVHRVRMQl9QQUdFXFxuZnMvS2NvbmZpZy0yNzQtXFx0ZGVmX2Jvb2wgSFVHRVRMQkZTXFxuLS1cXG5mcy9LY29uZmlnLTI3Ni1cXG5mcy9LY29uZmlnOjI3Nzpjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBcXG5mcy9LY29uZmlnLTI3OC1cXHRkZWZfYm9vbCBIVUdFVExCX1BBR0VcXG4tLVxcbm1tL0tjb25maWc9NzA2PWNvbmZpZyBBUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OXFxuLS1cXG5tbS9LY29uZmlnLTcwOC1cXG5tbS9LY29uZmlnOjcwOTpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfVkFSSUFCTEVcXG5tbS9LY29uZmlnLTcxMC1cXHRkZWZfYm9vbCBuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDIyOjM4OjM0LjgyMDk2MDI2OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDY5NDU2Njk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgaHVnZXRsYmZzIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBmb2N1c2VkIG9uIGBIVUdFVExCRlNgLCB0aGF0J3MgdGhlIGtleSBjb25maWd1cmF0aW9uIHNldHRpbmcgaGVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhlIGZ1bmN0aW9uIGBhbGxvY2F0ZV9maWxlX3JlZ2lvbl9lbnRyaWVzYC4gSXQgbG9va3MgbGlrZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBgcmVnaW9uX2FkZGAgYW5kIGByZWdpb25fY2hnYCwgd2hpY2ggSSBpbW1lZGlhdGVseSByZWNvZ25pemUgYXMgY3JpdGljYWwgcm91dGluZXMgZGVhbGluZyB3aXRoIGh1Z2V0bGJmcyByZXNlcnZhdGlvbnMuIEkga25vdyB0aGVzZSBhcmUgcmVsYXRlZCB0byBtZW1vcnkgYWxsb2NhdGlvbnMgYW5kIG1hbmFnZW1lbnQgd2l0aGluIHRoZSBodWdldGxiZnMuXG5cblRoZSBidWcgaXMgaW4gYGFsbG9jYXRlX2ZpbGVfcmVnaW9uX2VudHJpZXNgLCBhbmQgaXQgc2VlbXMgbGlrZSB0aGV5IHdlcmUgdXNpbmcgYGxpc3Rfc3BsaWNlYCBpbnN0ZWFkIG9mIGBsaXN0X3NwbGljZV9pbml0YC4gVGhhdCdzIGEgcmVkIGZsYWchIFVzaW5nIGBsaXN0X3NwbGljZWAgd2l0aG91dCBpbml0aWFsaXppbmcgdGhlIGRlc3RpbmF0aW9uIGxpc3QgY2FuIGxlYXZlIGBhbGxvY2F0ZWRfcmVnaW9uc2Ag4oCTIGEgbG9jYWwgdmFyaWFibGUsIEkgbm93IHJlbWVtYmVyIOKAkyBpbiBhbiB1bmRlZmluZWQgc3RhdGUuIEl0cyBwb2ludGVycywgc3BlY2lmaWNhbGx5IGBuZXh0YCBhbmQgYHByZXZgLCB3b3VsZCBzdGlsbCBiZSByZWZlcmVuY2luZyB0aGUgb2xkIGVsZW1lbnRzIHRoYXQgd2VyZSBzcGxpY2VkICppbnRvKiBgcmVzdi1cdTAwM2VyZWdpb25fY2FjaGVgLiBUaGlzIGNvdWxkIGxlYWQgdG8gYSB0ZXh0Ym9vayBjYXNlIG9mIGxpc3QgY29ycnVwdGlvbiBkb3duIHRoZSBsaW5lIGlmIGBhbGxvY2F0ZWRfcmVnaW9uc2AgaXMgcmUtdXNlZC4gVGhpcyBuZWVkcyBhIGRlZXBlciBkaXZlLCBzbyBsZXQncyBjaGVjayBvdXQgdGhlIGNvZGUgb2YgYGFsbG9jYXRlX2ZpbGVfcmVnaW9uX2VudHJpZXNgIGRpcmVjdGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NzEzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDIyOjM4OjM4Ljg5MDQxOTY1OFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzI0MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vaHVnZXRsYi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY1NixcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDY1NjpcXHRzdGF0aWMgaW50IGFsbG9jYXRlX2ZpbGVfcmVnaW9uX2VudHJpZXMoc3RydWN0IHJlc3ZfbWFwICpyZXN2LFxcbiA2NTc6XFx0XFx0XFx0XFx0XFx0XFx0aW50IHJlZ2lvbnNfbmVlZGVkKVxcbiA2NTg6XFx0XFx0X19tdXN0X2hvbGQoXFx1MDAyNnJlc3YtXFx1MDAzZWxvY2spXFxuIDY1OTpcXHR7XFxuIDY2MDpcXHRcXHRMSVNUX0hFQUQoYWxsb2NhdGVkX3JlZ2lvbnMpO1xcbiA2NjE6XFx0XFx0aW50IHRvX2FsbG9jYXRlID0gMCwgaSA9IDA7XFxuIDY2MjpcXHRcXHRzdHJ1Y3QgZmlsZV9yZWdpb24gKnRyZyA9IE5VTEwsICpyZyA9IE5VTEw7XFxuIDY2MzpcXHRcXG4gNjY0OlxcdFxcdFZNX0JVR19PTihyZWdpb25zX25lZWRlZCBcXHUwMDNjIDApO1xcbiA2NjU6XFx0XFxuIDY2NjpcXHRcXHQvKlxcbiA2Njc6XFx0XFx0ICogQ2hlY2sgZm9yIHN1ZmZpY2llbnQgZGVzY3JpcHRvcnMgaW4gdGhlIGNhY2hlIHRvIGFjY29tbW9kYXRlXFxuIDY2ODpcXHRcXHQgKiB0aGUgbnVtYmVyIG9mIGluIHByb2dyZXNzIGFkZCBvcGVyYXRpb25zIHBsdXMgcmVnaW9uc19uZWVkZWQuXFxuIDY2OTpcXHRcXHQgKlxcbiA2NzA6XFx0XFx0ICogVGhpcyBpcyBhIHdoaWxlIGxvb3AgYmVjYXVzZSB3aGVuIHdlIGRyb3AgdGhlIGxvY2ssIHNvbWUgb3RoZXIgY2FsbFxcbiA2NzE6XFx0XFx0ICogdG8gcmVnaW9uX2FkZCBvciByZWdpb25fZGVsIG1heSBoYXZlIGNvbnN1bWVkIHNvbWUgcmVnaW9uX2VudHJpZXMsXFxuIDY3MjpcXHRcXHQgKiBzbyB3ZSBrZWVwIGxvb3BpbmcgaGVyZSB1bnRpbCB3ZSBmaW5hbGx5IGhhdmUgZW5vdWdoIGVudHJpZXMgZm9yXFxuIDY3MzpcXHRcXHQgKiAoYWRkc19pbl9wcm9ncmVzcyArIHJlZ2lvbnNfbmVlZGVkKS5cXG4gNjc0OlxcdFxcdCAqL1xcbiA2NzU6XFx0XFx0d2hpbGUgKHJlc3YtXFx1MDAzZXJlZ2lvbl9jYWNoZV9jb3VudCBcXHUwMDNjXFxuIDY3NjpcXHRcXHQgICAgICAgKHJlc3YtXFx1MDAzZWFkZHNfaW5fcHJvZ3Jlc3MgKyByZWdpb25zX25lZWRlZCkpIHtcXG4gNjc3OlxcdFxcdFxcdHRvX2FsbG9jYXRlID0gcmVzdi1cXHUwMDNlYWRkc19pbl9wcm9ncmVzcyArIHJlZ2lvbnNfbmVlZGVkIC1cXG4gNjc4OlxcdFxcdFxcdFxcdCAgICAgIHJlc3YtXFx1MDAzZXJlZ2lvbl9jYWNoZV9jb3VudDtcXG4gNjc5OlxcdFxcbiA2ODA6XFx0XFx0XFx0LyogQXQgdGhpcyBwb2ludCwgd2Ugc2hvdWxkIGhhdmUgZW5vdWdoIGVudHJpZXMgaW4gdGhlIGNhY2hlXFxuIDY4MTpcXHRcXHRcXHQgKiBmb3IgYWxsIHRoZSBleGlzdGluZyBhZGRzX2luX3Byb2dyZXNzLiBXZSBzaG91bGQgb25seSBiZVxcbiA2ODI6XFx0XFx0XFx0ICogbmVlZGluZyB0byBhbGxvY2F0ZSBmb3IgcmVnaW9uc19uZWVkZWQuXFxuIDY4MzpcXHRcXHRcXHQgKi9cXG4gNjg0OlxcdFxcdFxcdFZNX0JVR19PTihyZXN2LVxcdTAwM2VyZWdpb25fY2FjaGVfY291bnQgXFx1MDAzYyByZXN2LVxcdTAwM2VhZGRzX2luX3Byb2dyZXNzKTtcXG4gNjg1OlxcdFxcbiA2ODY6XFx0XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNnJlc3YtXFx1MDAzZWxvY2spO1xcbiA2ODc6XFx0XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHRvX2FsbG9jYXRlOyBpKyspIHtcXG4gNjg4OlxcdFxcdFxcdFxcdHRyZyA9IGttYWxsb2Nfb2JqKCp0cmcpO1xcbiA2ODk6XFx0XFx0XFx0XFx0aWYgKCF0cmcpXFxuIDY5MDpcXHRcXHRcXHRcXHRcXHRnb3RvIG91dF9vZl9tZW1vcnk7XFxuIDY5MTpcXHRcXHRcXHRcXHRsaXN0X2FkZChcXHUwMDI2dHJnLVxcdTAwM2VsaW5rLCBcXHUwMDI2YWxsb2NhdGVkX3JlZ2lvbnMpO1xcbiA2OTI6XFx0XFx0XFx0fVxcbiA2OTM6XFx0XFxuIDY5NDpcXHRcXHRcXHRzcGluX2xvY2soXFx1MDAyNnJlc3YtXFx1MDAzZWxvY2spO1xcbiA2OTU6XFx0XFxuIDY5NjpcXHRcXHRcXHRsaXN0X3NwbGljZV9pbml0KFxcdTAwMjZhbGxvY2F0ZWRfcmVnaW9ucywgXFx1MDAyNnJlc3YtXFx1MDAzZXJlZ2lvbl9jYWNoZSk7XFxuIDY5NzpcXHRcXHRcXHRyZXN2LVxcdTAwM2VyZWdpb25fY2FjaGVfY291bnQgKz0gdG9fYWxsb2NhdGU7XFxuIDY5ODpcXHRcXHR9XFxuIDY5OTpcXHRcXG4gNzAwOlxcdFxcdHJldHVybiAwO1xcbiA3MDE6XFx0XFxuIDcwMjpcXHRvdXRfb2ZfbWVtb3J5OlxcbiA3MDM6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJnLCB0cmcsIFxcdTAwMjZhbGxvY2F0ZWRfcmVnaW9ucywgbGluaykge1xcbiA3MDQ6XFx0XFx0XFx0bGlzdF9kZWwoXFx1MDAyNnJnLVxcdTAwM2VsaW5rKTtcXG4gNzA1OlxcdFxcdFxcdGtmcmVlKHJnKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMjI6Mzg6MzguODkwNzU0Nzg4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzMjI0Njc3MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQnVnIERpc2NvdmVyeSBhbmQgRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkganVzdCBqdW1wZWQgb3V0IGF0IG1lLiBJIHNlZSBgYWxsb2NhdGVkX3JlZ2lvbnNgIGlzIGEgbG9jYWwgdmFyaWFibGUsIGJ1dCBpdCdzICppbnNpZGUqIHRoaXMgYHdoaWxlYCBsb29wIOKAkyB0aGF0J3MgYSByZWQgZmxhZyEgVGhlbiBJIGRvdWJsZS1jaGVjayBhbmQgc2VlIGBMSVNUX0hFQUQoYWxsb2NhdGVkX3JlZ2lvbnMpO2AgaXMgZGVjbGFyZWQgKm91dHNpZGUqIHRoZSBsb29wLiBBaGEhIFRoZSBsb29wIHJldXNlcyBgYWxsb2NhdGVkX3JlZ2lvbnNgLiBJZiBgbGlzdF9zcGxpY2VgIGhhZCBiZWVuIHVzZWQsIGl0IHdvdWxkIGhhdmUgcHJldmVudGVkIHJlLWluaXRpYWxpemF0aW9uLiBCdXQgd2l0aG91dCBpdCwgb24gdGhlIHNlY29uZCBpdGVyYXRpb24sIGBsaXN0X2FkZGAgaXMgZ29pbmcgdG8gYmUgY2FsbGVkIG9uIGEgY29ycnVwdGVkIGBhbGxvY2F0ZWRfcmVnaW9uc2AgbGlzdCBoZWFkLiBUaGF0J3MgYSB0ZXh0Ym9vayBleGFtcGxlIG9mIGEgYnVnLCBhbmQgdGhhbmtmdWxseSwgaXQgbG9va3MgbGlrZSBpdCB3YXMgZml4ZWQuXG5cbk5vdyB0aGF0IEkndmUgc3BvdHRlZCB0aGF0LCBJJ20gdGhpbmtpbmcgYWJvdXQgZnV6emluZy4gVGhlIGBhbGxvY2F0ZV9maWxlX3JlZ2lvbl9lbnRyaWVzYCBmdW5jdGlvbiBsb29rcyBsaWtlIGEgcHJpbWUgY2FuZGlkYXRlIOKAkyBpdCdzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRoYXQgY291bGQgYmVuZWZpdCBmcm9tIGJlaW5nIHRlc3RlZCBtb3JlIHJpZ29yb3VzbHkuIExldCdzIG1ha2UgdGhhdCBhIGZvY3VzLiBJIHNob3VsZCBwcm9iYWJseSBhbHNvIHRhcmdldCBvdGhlciByZWxhdGVkIGZ1bmN0aW9ucy4gRnVuY3Rpb25zIGxpa2UgYHJlZ2lvbl9hZGRgLCBgcmVnaW9uX2NoZ2AsIGFuZCBgcmVnaW9uX2RlbGAgd291bGQgYWxsIG5lZWQgdG8gYmUgZnV6emVkIGFzIHdlbGwuIEknbGwgYWRkIHRoZW0gdG8gYEZvY3VzU3ltYm9sc2AuXG5cbkxldCdzIGRvIGEgcXVpY2sgc2NhbiB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZyByZWxhdGVkIHRvIHRoZSBgRm9jdXNTeW1ib2xzYC4gTG9va3MgbGlrZSBJIGdvdCB0aGVtIGFsbDsgYHJlZ2lvbl9hZGRgLCBgcmVnaW9uX2NoZ2AsIGByZWdpb25fZGVsYCwgYGFsbG9jYXRlX2ZpbGVfcmVnaW9uX2VudHJpZXNgLiBOb3cgSSdsbCBxdWlja2x5IGNoZWNrIGlmIGByZWdpb25fYWRkYCBhbmQgYHJlZ2lvbl9jaGdgIGFyZSBzdGF0aWMgZnVuY3Rpb25zLCBqdXN0IHRvIGdldCBhIGdvb2Qgc2Vuc2Ugb2YgdGhlIHNjb3BlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5OTgwLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMjI6Mzg6NDQuMjEzMjI1NzM1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTc4NjkwMzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVnaW9uX2FkZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9odWdldGxiLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZXRsYi5jPTY1Nj1zdGF0aWMgaW50IGFsbG9jYXRlX2ZpbGVfcmVnaW9uX2VudHJpZXMoc3RydWN0IHJlc3ZfbWFwICpyZXN2LFxcbi0tXFxubW0vaHVnZXRsYi5jLTY3MC1cXHQgKiBUaGlzIGlzIGEgd2hpbGUgbG9vcCBiZWNhdXNlIHdoZW4gd2UgZHJvcCB0aGUgbG9jaywgc29tZSBvdGhlciBjYWxsXFxubW0vaHVnZXRsYi5jOjY3MTpcXHQgKiB0byByZWdpb25fYWRkIG9yIHJlZ2lvbl9kZWwgbWF5IGhhdmUgY29uc3VtZWQgc29tZSByZWdpb25fZW50cmllcyxcXG5tbS9odWdldGxiLmMtNjcyLVxcdCAqIHNvIHdlIGtlZXAgbG9vcGluZyBoZXJlIHVudGlsIHdlIGZpbmFsbHkgaGF2ZSBlbm91Z2ggZW50cmllcyBmb3JcXG4tLVxcbm1tL2h1Z2V0bGIuYy03MTQtICogY2FsbCB0byByZWdpb25fY2hnIHdpdGggdGhlIHNhbWUgcmFuZ2UsIGJ1dCBpbiBzb21lIGNhc2VzIHRoZSBjYWNoZSB3aWxsIG5vdFxcbm1tL2h1Z2V0bGIuYzo3MTU6ICogaGF2ZSBzdWZmaWNpZW50IGVudHJpZXMgZHVlIHRvIHJhY2VzIHdpdGggb3RoZXIgY29kZSBkb2luZyByZWdpb25fYWRkIG9yXFxubW0vaHVnZXRsYi5jLTcxNi0gKiByZWdpb25fZGVsLiAgVGhlIGV4dHJhIG5lZWRlZCBlbnRyaWVzIHdpbGwgYmUgYWxsb2NhdGVkLlxcbi0tXFxubW0vaHVnZXRsYi5jLTcyMi0gKiB0aGlzIG9wZXJhdGlvbiBhbmQgd2Ugd2VyZSBub3QgYWJsZSB0byBhbGxvY2F0ZSwgaXQgcmV0dXJucyAtRU5PTUVNLlxcbm1tL2h1Z2V0bGIuYzo3MjM6ICogcmVnaW9uX2FkZCBvZiByZWdpb25zIG9mIGxlbmd0aCAxIG5ldmVyIGFsbG9jYXRlIGZpbGVfcmVnaW9ucyBhbmQgY2Fubm90XFxubW0vaHVnZXRsYi5jOjcyNDogKiBmYWlsOyByZWdpb25fY2hnIHdpbGwgYWx3YXlzIGFsbG9jYXRlIGF0IGxlYXN0IDEgZW50cnkgYW5kIGEgcmVnaW9uX2FkZCBmb3JcXG5tbS9odWdldGxiLmMtNzI1LSAqIDEgcGFnZSB3aWxsIG9ubHkgcmVxdWlyZSBhdCBtb3N0IDEgZW50cnkuXFxubW0vaHVnZXRsYi5jLTcyNi0gKi9cXG5tbS9odWdldGxiLmM6NzI3OnN0YXRpYyBsb25nIHJlZ2lvbl9hZGQoc3RydWN0IHJlc3ZfbWFwICpyZXN2LCBsb25nIGYsIGxvbmcgdCxcXG5tbS9odWdldGxiLmMtNzI4LVxcdFxcdCAgICAgICBsb25nIGluX3JlZ2lvbnNfbmVlZGVkLCBzdHJ1Y3QgaHN0YXRlICpoLFxcbi0tXFxubW0vaHVnZXRsYi5jLTc1Mi1cXHRcXHRcXHQgICAgKGFjdHVhbF9yZWdpb25zX25lZWRlZCAtIGluX3JlZ2lvbnNfbmVlZGVkKSkge1xcbm1tL2h1Z2V0bGIuYzo3NTM6XFx0XFx0LyogcmVnaW9uX2FkZCBvcGVyYXRpb24gb2YgcmFuZ2UgMSBzaG91bGQgbmV2ZXIgbmVlZCB0b1xcbm1tL2h1Z2V0bGIuYy03NTQtXFx0XFx0ICogYWxsb2NhdGUgZmlsZV9yZWdpb24gZW50cmllcy5cXG4tLVxcbm1tL2h1Z2V0bGIuYy03NzctICogcmVwcmVzZW50ZWQuICBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIGJlZm9yZSBhIHN1YnNlcXVlbnRcXG5tbS9odWdldGxiLmM6Nzc4OiAqIGNhbGwgdG8gcmVnaW9uX2FkZCB0aGF0IHdpbGwgYWN0dWFsbHkgbW9kaWZ5IHRoZSByZXNlcnZlXFxubW0vaHVnZXRsYi5jLTc3OS0gKiBtYXAgdG8gYWRkIHRoZSBzcGVjaWZpZWQgcmFuZ2UgW2YsIHQpLiAgcmVnaW9uX2NoZyBkb2VzXFxuLS1cXG5tbS9odWdldGxiLmMtNzgxLSAqIG1hcC4gIEEgbnVtYmVyIG9mIG5ldyBmaWxlX3JlZ2lvbiBzdHJ1Y3R1cmVzIGlzIGFkZGVkIHRvIHRoZSBjYWNoZSBhcyBhXFxubW0vaHVnZXRsYi5jOjc4MjogKiBwbGFjZWhvbGRlciwgZm9yIHRoZSBzdWJzZXF1ZW50IHJlZ2lvbl9hZGQgY2FsbCB0byB1c2UuIEF0IGxlYXN0IDFcXG5tbS9odWdldGxiLmMtNzgzLSAqIGZpbGVfcmVnaW9uIHN0cnVjdHVyZSBpcyBhZGRlZC5cXG4tLVxcbm1tL2h1Z2V0bGIuYy03ODYtICogcmVzdi1cXHUwMDNlYWRkc19pbl9wcm9ncmVzcy4gIFRoaXMgdmFsdWUgbmVlZHMgdG8gYmUgcHJvdmlkZWQgdG8gYSBmb2xsb3cgdXAgY2FsbFxcbm1tL2h1Z2V0bGIuYzo3ODc6ICogdG8gcmVnaW9uX2FkZCBvciByZWdpb25fYWJvcnQgZm9yIHByb3BlciBhY2NvdW50aW5nLlxcbm1tL2h1Z2V0bGIuYy03ODgtICpcXG4tLVxcbm1tL2h1Z2V0bGIuYz03OTQ9c3RhdGljIGxvbmcgcmVnaW9uX2NoZyhzdHJ1Y3QgcmVzdl9tYXAgKnJlc3YsIGxvbmcgZiwgbG9uZyB0LFxcbi0tXFxubW0vaHVnZXRsYi5jLTgxOS0gKiBvZiB0aGUgcmVzdl9tYXAga2VlcHMgdHJhY2sgb2YgdGhlIG9wZXJhdGlvbnMgaW4gcHJvZ3Jlc3MgYmV0d2Vlblxcbm1tL2h1Z2V0bGIuYzo4MjA6ICogY2FsbHMgdG8gcmVnaW9uX2NoZyBhbmQgcmVnaW9uX2FkZC4gIE9wZXJhdGlvbnMgYXJlIHNvbWV0aW1lc1xcbm1tL2h1Z2V0bGIuYy04MjEtICogYWJvcnRlZCBhZnRlciB0aGUgY2FsbCB0byByZWdpb25fY2hnLiAgSW4gc3VjaCBjYXNlcywgcmVnaW9uX2Fib3J0XFxuLS1cXG5tbS9odWdldGxiLmM9MjQzMD1zdGF0aWMgbG9uZyBfX3ZtYV9yZXNlcnZhdGlvbl9jb21tb24oc3RydWN0IGhzdGF0ZSAqaCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yNDUzLVxcdGNhc2UgVk1BX0NPTU1JVF9SRVNWOlxcbm1tL2h1Z2V0bGIuYzoyNDU0OlxcdFxcdHJldCA9IHJlZ2lvbl9hZGQocmVzdiwgaWR4LCBpZHggKyAxLCAxLCBOVUxMLCBOVUxMKTtcXG5tbS9odWdldGxiLmM6MjQ1NTpcXHRcXHQvKiByZWdpb25fYWRkIGNhbGxzIG9mIHJhbmdlIDEgc2hvdWxkIG5ldmVyIGZhaWwuICovXFxubW0vaHVnZXRsYi5jLTI0NTYtXFx0XFx0Vk1fQlVHX09OKHJldCBcXHUwMDNjIDApO1xcbi0tXFxubW0vaHVnZXRsYi5jLTI0NjMtXFx0XFx0aWYgKHZtYS1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiBWTV9NQVlTSEFSRSkge1xcbm1tL2h1Z2V0bGIuYzoyNDY0OlxcdFxcdFxcdHJldCA9IHJlZ2lvbl9hZGQocmVzdiwgaWR4LCBpZHggKyAxLCAxLCBOVUxMLCBOVUxMKTtcXG5tbS9odWdldGxiLmM6MjQ2NTpcXHRcXHRcXHQvKiByZWdpb25fYWRkIGNhbGxzIG9mIHJhbmdlIDEgc2hvdWxkIG5ldmVyIGZhaWwuICovXFxubW0vaHVnZXRsYi5jLTI0NjYtXFx0XFx0XFx0Vk1fQlVHX09OKHJldCBcXHUwMDNjIDApO1xcbi0tXFxubW0vaHVnZXRsYi5jLTI0NzYtXFx0XFx0fSBlbHNlIHtcXG5tbS9odWdldGxiLmM6MjQ3NzpcXHRcXHRcXHRyZXQgPSByZWdpb25fYWRkKHJlc3YsIGlkeCwgaWR4ICsgMSwgMSwgTlVMTCwgTlVMTCk7XFxubW0vaHVnZXRsYi5jOjI0Nzg6XFx0XFx0XFx0LyogcmVnaW9uX2FkZCBjYWxscyBvZiByYW5nZSAxIHNob3VsZCBuZXZlciBmYWlsLiAqL1xcbm1tL2h1Z2V0bGIuYy0yNDc5LVxcdFxcdFxcdFZNX0JVR19PTihyZXQgXFx1MDAzYyAwKTtcXG4tLVxcbm1tL2h1Z2V0bGIuYz02NTQwPWxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5tbS9odWdldGxiLmMtNjY1MC1cXHRpZiAoIXZtYSB8fCB2bWFfdGVzdCh2bWEsIFZNQV9NQVlTSEFSRV9CSVQpKSB7XFxubW0vaHVnZXRsYi5jOjY2NTE6XFx0XFx0YWRkID0gcmVnaW9uX2FkZChyZXN2X21hcCwgZnJvbSwgdG8sIHJlZ2lvbnNfbmVlZGVkLCBoLCBoX2NnKTtcXG5tbS9odWdldGxiLmMtNjY1Mi1cXG4tLVxcbm1tL2h1Z2V0bGIuYy02NjU5LVxcdFxcdFxcdCAqIHBhZ2VzIGluIHRoaXMgcmFuZ2Ugd2VyZSBhZGRlZCB0byB0aGUgcmVzZXJ2ZVxcbm1tL2h1Z2V0bGIuYzo2NjYwOlxcdFxcdFxcdCAqIG1hcCBiZXR3ZWVuIHJlZ2lvbl9jaGcgYW5kIHJlZ2lvbl9hZGQuICBUaGlzXFxubW0vaHVnZXRsYi5jLTY2NjEtXFx0XFx0XFx0ICogaW5kaWNhdGVzIGEgcmFjZSB3aXRoIGFsbG9jX2h1Z2V0bGJfZm9saW8uICBBZGp1c3RcXG4tLVxcbm1tL2h1Z2V0bGIuYy02NzE2LVxcdFxcdC8qIE9ubHkgY2FsbCByZWdpb25fYWJvcnQgaWYgdGhlIHJlZ2lvbl9jaGcgc3VjY2VlZGVkIGJ1dCB0aGVcXG5tbS9odWdldGxiLmM6NjcxNzpcXHRcXHQgKiByZWdpb25fYWRkIGZhaWxlZCBvciBkaWRuJ3QgcnVuLlxcbm1tL2h1Z2V0bGIuYy02NzE4LVxcdFxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QyMjozODo0NC4zMzEwOTk4NTZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQ4NzU5ODI2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBTdGF0aWMgQnVnIGluIGBhbGxvY2F0ZV9maWxlX3JlZ2lvbl9lbnRyaWVzYCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0J3MgcHJldHR5IGNsZWFyOiB0aGUgY29yZSBpc3N1ZSBpcyBpbiBgYWxsb2NhdGVfZmlsZV9yZWdpb25fZW50cmllc2AuIEl0J3MgZGVmaW5pdGVseSBzdGF0aWMsIHdoaWNoIHNpbXBsaWZpZXMgdGhpbmdzIGEgYml0LiBUaGUgYnVnIGlzIGxpc3QgY29ycnVwdGlvbi4gU3BlY2lmaWNhbGx5LCB0aGUgbGlzdCBnZXRzIG1lc3NlZCB1cCB3aGVuIHRoZSBgYWxsb2NhdGVfZmlsZV9yZWdpb25fZW50cmllc2AgZnVuY3Rpb24gaXRlcmF0ZXMgbW9yZSB0aGFuIG9uY2UuIFRoaXMgaGFwcGVucyB3aGVuIHRoZSB2YWx1ZSBvZiBgcmVzdi1cdTAwM2VyZWdpb25fY2FjaGVfY291bnRgIGlzIGxlc3MgdGhhbiB0aGUgc3VtIG9mIGByZXN2LVx1MDAzZWFkZHNfaW5fcHJvZ3Jlc3NgIGFuZCBgcmVnaW9uc19uZWVkZWRgIGFmdGVyIHJlbGVhc2luZyB0aGUgbG9jaywgd2hpY2ggc2NyZWFtcyByYWNlIGNvbmRpdGlvbi5cblxuVGhlIHNlbGZ0ZXN0LCBgaHVnZXRsYl9yZWdpb25fY2FjaGVfcmFjZWAsIGNsZXZlcmx5IHVzZXMgYG1lbWZkX2NyZWF0ZShNRkRfSFVHRVRMQilgIGFuZCBgZmFsbG9jYXRlKEZBTExPQ19GTF9QVU5DSF9IT0xFKWAgdG8gY3JlYXRlIGZyYWdtZW50YXRpb24gd2l0aGluIHRoZSBgcmVzdl9tYXBgLiBUaGlzIGZyYWdtZW50YXRpb24gdGhlbiB0cmlnZ2VycyB0aGUgcmFjZS4gU28sIHRoZSBmZWF0dXJlIGFyZWEgaXMgaHVnZXRsYmZzLiBTZWVtcyBsaWtlIHRoaXMgaXMgYSBIVUdFVExCRlMgc3BlY2lmaWMgaXNzdWUuXG5cblRoZSBrZXkgZnVuY3Rpb25zIHRvIGZvY3VzIG9uIGhlcmUgYXJlIGBhbGxvY2F0ZV9maWxlX3JlZ2lvbl9lbnRyaWVzYCAob2J2aW91c2x5KSwgYHJlZ2lvbl9hZGRgLCBgcmVnaW9uX2NoZ2AsIGFuZCBgcmVnaW9uX2RlbGAg4oCTIHRoZSBzdGFuZGFyZCBsaXN0IG1hbmlwdWxhdGlvbiBmdW5jdGlvbnMgaW4gdGhpcyBjb250ZXh0LiBJJ2xsIG5lZWQgdG8gbWV0aWN1bG91c2x5IHJldmlldyB0aGUgbG9ja2luZyBhbmQgYWNjZXNzIHBhdHRlcm5zIHdpdGhpbiB0aGVzZSBmdW5jdGlvbnMuXG5cbk5vdywgYmVmb3JlIEkgZGlnIHRvbyBkZWVwLCBsZXQgbWUgcXVpY2tseSBzY2FuIGZvciBhbnkgcmVsYXRlZCBjb25maWdzLiBJcyB0aGVyZSBhbnl0aGluZyBlbHNlIHRoYXQgbWlnaHQgY29udHJpYnV0ZT8gQWgsIGBDT05GSUdfTUVNRkRfQ1JFQVRFYC4gTm8sIHdhaXQgYSBtaW51dGUsIGBtZW1mZF9jcmVhdGVgIGlzIGFsd2F5cyBhdmFpbGFibGUgaWYgYENPTkZJR19TSE1FTWAgb3IgYENPTkZJR19IVUdFVExCRlNgIGlzIGVuYWJsZWQsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIGhhdmUgdG8gcmVtaW5kIG15c2VsZiBgbWVtZmRfY3JlYXRlYCBpcyBhIHN5c2NhbGwuIEhtbSwgbGV0IG1lIGNoZWNrIHRoZSBgSFVHRVRMQkZTYCBjb25maWcsIHNwZWNpZmljYWxseSBpbiBgZnMvS2NvbmZpZ2AuIEknbGwgc2VlIGlmIHRoZXJlJ3MgYW55IGltcGxpY2l0IGRlcGVuZGVuY3kgSSdtIG1pc3NpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMTQ2LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDIyOjM4OjQ5LjgxODcwMDAxMVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEwMTI5MjMyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBIVUdFVExCRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9LY29uZmlnPTI0Nz1jb25maWcgQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcXG4tLVxcbmZzL0tjb25maWctMjQ5LVxcbmZzL0tjb25maWc6MjUwOm1lbnVjb25maWcgSFVHRVRMQkZTXFxuZnMvS2NvbmZpZy0yNTEtXFx0Ym9vbCBcXFwiSHVnZVRMQiBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QyMjozODo0OS45Mjg4MzcxMDJaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTkyNTY4ODY3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEhVR0VUTEJGUyBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIHRoZSBjZW50cmFsIGNvbXBvbmVudCBhcHBlYXJzIHRvIGJlIGBIVUdFVExCRlNgLiBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGBIVUdFVExCX1BBR0VgIGlzbid0IHNlcGFyYXRlbHkgcmVxdWlyZWQ7IGJhc2VkIG9uIHRoZSBkZXBlbmRlbmN5LCBpdCdzIGp1c3QgdGhlIGBIVUdFVExCRlNgIG9wdGlvbiB0aGF0J3MgdHJ1bHkgZXNzZW50aWFsIGhlcmUuIFRoYXQncyBhIGdvb2Qgc3RhcnQuXG5cbk5vdywgbGV0J3MgZHJpbGwgZG93biBhbmQgc2VlIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlcy4gVGhlIHByaW1hcnkgZnVuY3Rpb24gbW9kaWZpZWQgc2VlbXMgdG8gYmUgYGFsbG9jYXRlX2ZpbGVfcmVnaW9uX2VudHJpZXNgLiBNeSBpbml0aWFsIGluc3BlY3Rpb24gc2hvd3MgbW9kaWZpY2F0aW9ucyBjb25maW5lZCB0byBgbW0vaHVnZXRsYi5jYCBhbmQgYSBmZXcgc2VsZnRlc3QgYXJlYXMsIG5vdGhpbmcgdGhhdCBpbW1lZGlhdGVseSBzY3JlYW1zIFwid2lkZXNwcmVhZCBpbXBhY3RcIiBvciBzaWduaWZpY2FudCBhcmNoaXRlY3R1cmFsIGNoYW5nZXMuIEl0J3MgYSBmb2N1c2VkIGFsdGVyYXRpb24sIHdoaWNoIHN1Z2dlc3RzIGl04oCZcyBhIGZ1bmN0aW9uYWwgZml4LCBleGFjdGx5IHRoZSBzb3J0IHRoYXQgd2FycmFudHMgZnV6emluZy5cblxuR2l2ZW4gdGhpcywgSSdtIGdvaW5nIHRvIGNvZGlmeSB0aGlzIGludG8gc29tZSBmdXp6aW5nIGRpcmVjdGl2ZXMuXG5cbioqV29ydGhGdXp6aW5nOiB0cnVlKiouIEFic29sdXRlbHksIHRoaXMgaGFzIGNsZWFyIGZ1enppbmcgcG90ZW50aWFsLlxuXG4qKkZvY3VzU3ltYm9sczogW1wiYWxsb2NhdGVfZmlsZV9yZWdpb25fZW50cmllc1wiLCBcInJlZ2lvbl9hZGRcIiwgXCJyZWdpb25fY2hnXCIsIFwicmVnaW9uX2RlbFwiXSoqLiBUaGVzZSBhcmUgdGhlIGtleSBmdW5jdGlvbnMsIHBhcnRpY3VsYXJseSB0aGF0IGNvcmUgYGFsbG9jYXRlX2ZpbGVfcmVnaW9uX2VudHJpZXNgIGZ1bmN0aW9uIGFuZCB0aGUgcmVnaW9uIG1hbmFnZW1lbnQgZnVuY3Rpb25zLCB3aGljaCBhcHBlYXIgdG8gYmUgaW50aW1hdGVseSBpbnZvbHZlZCBpbiB0aGlzIGJ1Zy5cblxuKipFbmFibGVDb25maWdzOiBbXCJIVUdFVExCRlNcIl0qKi4gVGhhdCdzIHRoZSBjcnVjaWFsIGNvbmZpZ3VyYXRpb24gZWxlbWVudCB0byBlbmFibGUuXG5cbioqUmVhc29uaW5nOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGxpc3QgY29ycnVwdGlvbiBidWcgaW4gYWxsb2NhdGVfZmlsZV9yZWdpb25fZW50cmllcyBpbiBodWdldGxiZnMuIFRoZSBidWcgaXMgdHJpZ2dlcmVkIGJ5IGEgcmFjZSBjb25kaXRpb24gd2hlbiB0aGUgcmVnaW9uIGNhY2hlIG5lZWRzIHRvIGJlIHJlZmlsbGVkIG11bHRpcGxlIHRpbWVzLiBGdXp6aW5nIGh1Z2V0bGJmcyByZXNlcnZhdGlvbiBmdW5jdGlvbnMgY2FuIGhlbHAgZW5zdXJlIHRoZSBmaXggaXMgcm9idXN0LlwiKiogVGhpcyBzdW1tYXJpemVzIHRoZSB2dWxuZXJhYmlsaXR5J3MgbmF0dXJlIGFuZCB0aGUgcmF0aW9uYWxlIGZvciBvdXIgZnV6emluZyBzdHJhdGVneS4gRXNzZW50aWFsbHksIHdlJ3JlIGxvb2tpbmcgdG8gdmFsaWRhdGUgdGhlIGZpeCdzIHJvYnVzdG5lc3MgYWdhaW5zdCByYWNlIGNvbmRpdGlvbnMgaW4gdGhlIGh1Z2V0bGJmcyByZWdpb24gY2FjaGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTU2LCJPdXRwdXRUb2tlbnMiOjEyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QyMjozODo1NS44NTQ1MjgzNzVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjkwNzIyMTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFsbG9jYXRlX2ZpbGVfcmVnaW9uX2VudHJpZXNcIixcbiAgICBcInJlZ2lvbl9hZGRcIixcbiAgICBcInJlZ2lvbl9jaGdcIixcbiAgICBcInJlZ2lvbl9kZWxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGxpc3QgY29ycnVwdGlvbiBidWcgaW4gYWxsb2NhdGVfZmlsZV9yZWdpb25fZW50cmllcyBpbiBodWdldGxiZnMuIFRoZSBidWcgaXMgdHJpZ2dlcmVkIGJ5IGEgcmFjZSBjb25kaXRpb24gd2hlbiB0aGUgcmVnaW9uIGNhY2hlIG5lZWRzIHRvIGJlIHJlZmlsbGVkIG11bHRpcGxlIHRpbWVzLiBGdXp6aW5nIGh1Z2V0bGJmcyByZXNlcnZhdGlvbiBmdW5jdGlvbnMgY2FuIGhlbHAgZW5zdXJlIHRoZSBmaXggaXMgcm9idXN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFsbG9jYXRlX2ZpbGVfcmVnaW9uX2VudHJpZXNcIixcbiAgICBcInJlZ2lvbl9hZGRcIixcbiAgICBcInJlZ2lvbl9jaGdcIixcbiAgICBcInJlZ2lvbl9kZWxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGxpc3QgY29ycnVwdGlvbiBidWcgaW4gYWxsb2NhdGVfZmlsZV9yZWdpb25fZW50cmllcyBpbiBodWdldGxiZnMuIFRoZSBidWcgaXMgdHJpZ2dlcmVkIGJ5IGEgcmFjZSBjb25kaXRpb24gd2hlbiB0aGUgcmVnaW9uIGNhY2hlIG5lZWRzIHRvIGJlIHJlZmlsbGVkIG11bHRpcGxlIHRpbWVzLiBGdXp6aW5nIGh1Z2V0bGJmcyByZXNlcnZhdGlvbiBmdW5jdGlvbnMgY2FuIGhlbHAgZW5zdXJlIHRoZSBmaXggaXMgcm9idXN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowmvcp8[1] Phase: Succeeded StartedAt: 2026-07-13 22:39:37 +0000 UTC FinishedAt: 2026-07-13 22:39:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmvcp8[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-13 22:39:37 +0000 UTC FinishedAt: 2026-07-13 22:39:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmvcp8[2] Phase: Succeeded StartedAt: 2026-07-13 22:39:37 +0000 UTC FinishedAt: 2026-07-14 02:48:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmvcp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"35cb138c9029fed73eed7d7b9d0f100bdbf5ee44","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"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":["allocate_file_region_entries","region_add","region_chg","region_del"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"35cb138c9029fed73eed7d7b9d0f100bdbf5ee44","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"1a12d3cf-d0b7-40ff-8759-2c2d0445c79a","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-13 22:39:37 +0000 UTC FinishedAt: 2026-07-14 02:48:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"35cb138c9029fed73eed7d7b9d0f100bdbf5ee44","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"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":["allocate_file_region_entries","region_add","region_chg","region_del"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"35cb138c9029fed73eed7d7b9d0f100bdbf5ee44","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"1a12d3cf-d0b7-40ff-8759-2c2d0445c79a","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-workflowmvcp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"35cb138c9029fed73eed7d7b9d0f100bdbf5ee44","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"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":["allocate_file_region_entries","region_add","region_chg","region_del"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"35cb138c9029fed73eed7d7b9d0f100bdbf5ee44","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"1a12d3cf-d0b7-40ff-8759-2c2d0445c79a","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-13 22:39:37 +0000 UTC FinishedAt: 2026-07-13 22:39:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmvcp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"35cb138c9029fed73eed7d7b9d0f100bdbf5ee44","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"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":["allocate_file_region_entries","region_add","region_chg","region_del"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"35cb138c9029fed73eed7d7b9d0f100bdbf5ee44","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"1a12d3cf-d0b7-40ff-8759-2c2d0445c79a","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-13 22:39:37 +0000 UTC FinishedAt: 2026-07-13 22:39:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"35cb138c9029fed73eed7d7b9d0f100bdbf5ee44","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"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-workflowmvcp8/series-workflowmvcp8-convert-artifact-3040731291/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmvcp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"35cb138c9029fed73eed7d7b9d0f100bdbf5ee44","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"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":["allocate_file_region_entries","region_add","region_chg","region_del"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"35cb138c9029fed73eed7d7b9d0f100bdbf5ee44","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"1a12d3cf-d0b7-40ff-8759-2c2d0445c79a","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-13 22:39:57 +0000 UTC FinishedAt: 2026-07-13 23:07:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmvcp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"35cb138c9029fed73eed7d7b9d0f100bdbf5ee44","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"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":["allocate_file_region_entries","region_add","region_chg","region_del"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"35cb138c9029fed73eed7d7b9d0f100bdbf5ee44","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"1a12d3cf-d0b7-40ff-8759-2c2d0445c79a","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-13 22:39:57 +0000 UTC FinishedAt: 2026-07-13 23:07:51 +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:*1bc6ebbb-a8f4-4f35-a301-6e41afcef80c,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-workflowmvcp8/series-workflowmvcp8-convert-artifact-3040731291/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": "41070462-e177-4ebd-b2fe-de919103fd85", "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-workflowmvcp8/series-workflowmvcp8-build-action-3329453273/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmvcp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"35cb138c9029fed73eed7d7b9d0f100bdbf5ee44","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"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":["allocate_file_region_entries","region_add","region_chg","region_del"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"35cb138c9029fed73eed7d7b9d0f100bdbf5ee44","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"1a12d3cf-d0b7-40ff-8759-2c2d0445c79a","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-13 22:39:57 +0000 UTC FinishedAt: 2026-07-13 23:07:41 +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:*1bc6ebbb-a8f4-4f35-a301-6e41afcef80c,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-workflowmvcp8/series-workflowmvcp8-convert-artifact-3040731291/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": "41070462-e177-4ebd-b2fe-de919103fd85", "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-workflowmvcp8/series-workflowmvcp8-build-action-3329453273/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmvcp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"35cb138c9029fed73eed7d7b9d0f100bdbf5ee44","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"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":["allocate_file_region_entries","region_add","region_chg","region_del"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"35cb138c9029fed73eed7d7b9d0f100bdbf5ee44","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"1a12d3cf-d0b7-40ff-8759-2c2d0445c79a","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-13 23:07:51 +0000 UTC FinishedAt: 2026-07-13 23:07:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmvcp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"35cb138c9029fed73eed7d7b9d0f100bdbf5ee44","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"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":["allocate_file_region_entries","region_add","region_chg","region_del"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"35cb138c9029fed73eed7d7b9d0f100bdbf5ee44","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"1a12d3cf-d0b7-40ff-8759-2c2d0445c79a","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-13 23:07:51 +0000 UTC FinishedAt: 2026-07-13 23:07:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmvcp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"35cb138c9029fed73eed7d7b9d0f100bdbf5ee44","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"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":["allocate_file_region_entries","region_add","region_chg","region_del"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"35cb138c9029fed73eed7d7b9d0f100bdbf5ee44","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"1a12d3cf-d0b7-40ff-8759-2c2d0445c79a","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-13 23:07:51 +0000 UTC FinishedAt: 2026-07-13 23:08:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmvcp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"35cb138c9029fed73eed7d7b9d0f100bdbf5ee44","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"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":["allocate_file_region_entries","region_add","region_chg","region_del"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"35cb138c9029fed73eed7d7b9d0f100bdbf5ee44","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"1a12d3cf-d0b7-40ff-8759-2c2d0445c79a","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-13 23:07:51 +0000 UTC FinishedAt: 2026-07-13 23:07:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"35cb138c9029fed73eed7d7b9d0f100bdbf5ee44","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"1a12d3cf-d0b7-40ff-8759-2c2d0445c79a","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-workflowmvcp8/series-workflowmvcp8-convert-artifact-3373153266/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmvcp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"35cb138c9029fed73eed7d7b9d0f100bdbf5ee44","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"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":["allocate_file_region_entries","region_add","region_chg","region_del"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"35cb138c9029fed73eed7d7b9d0f100bdbf5ee44","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"1a12d3cf-d0b7-40ff-8759-2c2d0445c79a","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-13 23:08:01 +0000 UTC FinishedAt: 2026-07-13 23:10:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmvcp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"35cb138c9029fed73eed7d7b9d0f100bdbf5ee44","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"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":["allocate_file_region_entries","region_add","region_chg","region_del"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"35cb138c9029fed73eed7d7b9d0f100bdbf5ee44","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"1a12d3cf-d0b7-40ff-8759-2c2d0445c79a","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-13 23:08:01 +0000 UTC FinishedAt: 2026-07-13 23:09:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*41070462-e177-4ebd-b2fe-de919103fd85,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-workflowmvcp8/series-workflowmvcp8-build-action-3329453273/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-workflowmvcp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"35cb138c9029fed73eed7d7b9d0f100bdbf5ee44","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"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":["allocate_file_region_entries","region_add","region_chg","region_del"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"35cb138c9029fed73eed7d7b9d0f100bdbf5ee44","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"1a12d3cf-d0b7-40ff-8759-2c2d0445c79a","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-13 23:10:03 +0000 UTC FinishedAt: 2026-07-13 23:10:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmvcp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"35cb138c9029fed73eed7d7b9d0f100bdbf5ee44","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"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":["allocate_file_region_entries","region_add","region_chg","region_del"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"35cb138c9029fed73eed7d7b9d0f100bdbf5ee44","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"1a12d3cf-d0b7-40ff-8759-2c2d0445c79a","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-13 23:10:03 +0000 UTC FinishedAt: 2026-07-13 23:10:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmvcp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"35cb138c9029fed73eed7d7b9d0f100bdbf5ee44","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"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":["allocate_file_region_entries","region_add","region_chg","region_del"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"35cb138c9029fed73eed7d7b9d0f100bdbf5ee44","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"1a12d3cf-d0b7-40ff-8759-2c2d0445c79a","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-13 23:10:03 +0000 UTC FinishedAt: 2026-07-13 23:43:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmvcp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"35cb138c9029fed73eed7d7b9d0f100bdbf5ee44","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"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":["allocate_file_region_entries","region_add","region_chg","region_del"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"35cb138c9029fed73eed7d7b9d0f100bdbf5ee44","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"1a12d3cf-d0b7-40ff-8759-2c2d0445c79a","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-13 23:10:03 +0000 UTC FinishedAt: 2026-07-13 23:43:32 +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:*1bc6ebbb-a8f4-4f35-a301-6e41afcef80c,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-workflowmvcp8/series-workflowmvcp8-convert-artifact-3373153266/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": "5e772f85-fe37-4ab6-b20e-e9195c0c5e72", "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-workflowmvcp8/series-workflowmvcp8-build-action-4038867846/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmvcp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"35cb138c9029fed73eed7d7b9d0f100bdbf5ee44","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"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":["allocate_file_region_entries","region_add","region_chg","region_del"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"35cb138c9029fed73eed7d7b9d0f100bdbf5ee44","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"1a12d3cf-d0b7-40ff-8759-2c2d0445c79a","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-13 23:10:03 +0000 UTC FinishedAt: 2026-07-13 23:43:22 +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:*1bc6ebbb-a8f4-4f35-a301-6e41afcef80c,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-workflowmvcp8/series-workflowmvcp8-convert-artifact-3373153266/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": "5e772f85-fe37-4ab6-b20e-e9195c0c5e72", "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-workflowmvcp8/series-workflowmvcp8-build-action-4038867846/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmvcp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"35cb138c9029fed73eed7d7b9d0f100bdbf5ee44","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"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":["allocate_file_region_entries","region_add","region_chg","region_del"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"35cb138c9029fed73eed7d7b9d0f100bdbf5ee44","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"1a12d3cf-d0b7-40ff-8759-2c2d0445c79a","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-13 23:43:32 +0000 UTC FinishedAt: 2026-07-13 23:43:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmvcp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"35cb138c9029fed73eed7d7b9d0f100bdbf5ee44","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"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":["allocate_file_region_entries","region_add","region_chg","region_del"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"35cb138c9029fed73eed7d7b9d0f100bdbf5ee44","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"1a12d3cf-d0b7-40ff-8759-2c2d0445c79a","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-13 23:43:32 +0000 UTC FinishedAt: 2026-07-13 23:43:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmvcp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"35cb138c9029fed73eed7d7b9d0f100bdbf5ee44","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"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":["allocate_file_region_entries","region_add","region_chg","region_del"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"35cb138c9029fed73eed7d7b9d0f100bdbf5ee44","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"1a12d3cf-d0b7-40ff-8759-2c2d0445c79a","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-13 23:43:32 +0000 UTC FinishedAt: 2026-07-13 23:45:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmvcp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"35cb138c9029fed73eed7d7b9d0f100bdbf5ee44","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"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":["allocate_file_region_entries","region_add","region_chg","region_del"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"35cb138c9029fed73eed7d7b9d0f100bdbf5ee44","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"1a12d3cf-d0b7-40ff-8759-2c2d0445c79a","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-13 23:43:32 +0000 UTC FinishedAt: 2026-07-13 23:45:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5e772f85-fe37-4ab6-b20e-e9195c0c5e72,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-workflowmvcp8/series-workflowmvcp8-build-action-4038867846/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-workflowmvcp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"35cb138c9029fed73eed7d7b9d0f100bdbf5ee44","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"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":["allocate_file_region_entries","region_add","region_chg","region_del"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"35cb138c9029fed73eed7d7b9d0f100bdbf5ee44","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"1a12d3cf-d0b7-40ff-8759-2c2d0445c79a","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-13 23:45:22 +0000 UTC FinishedAt: 2026-07-14 02:48:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmvcp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"35cb138c9029fed73eed7d7b9d0f100bdbf5ee44","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"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":["allocate_file_region_entries","region_add","region_chg","region_del"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"35cb138c9029fed73eed7d7b9d0f100bdbf5ee44","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"1a12d3cf-d0b7-40ff-8759-2c2d0445c79a","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-13 23:45:22 +0000 UTC FinishedAt: 2026-07-14 02:48: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":["allocate_file_region_entries","region_add","region_chg","region_del"],"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:*41070462-e177-4ebd-b2fe-de919103fd85,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5e772f85-fe37-4ab6-b20e-e9195c0c5e72,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-workflowmvcp8/series-workflowmvcp8-build-action-3329453273/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-workflowmvcp8/series-workflowmvcp8-build-action-4038867846/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowmvcp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"35cb138c9029fed73eed7d7b9d0f100bdbf5ee44","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"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":["allocate_file_region_entries","region_add","region_chg","region_del"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"35cb138c9029fed73eed7d7b9d0f100bdbf5ee44","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"1a12d3cf-d0b7-40ff-8759-2c2d0445c79a","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-13 23:45:22 +0000 UTC FinishedAt: 2026-07-13 23:45:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmvcp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"35cb138c9029fed73eed7d7b9d0f100bdbf5ee44","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"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":["allocate_file_region_entries","region_add","region_chg","region_del"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"35cb138c9029fed73eed7d7b9d0f100bdbf5ee44","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"1a12d3cf-d0b7-40ff-8759-2c2d0445c79a","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-13 23:45:22 +0000 UTC FinishedAt: 2026-07-13 23:45:27 +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":["allocate_file_region_entries","region_add","region_chg","region_del"],"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-workflowmvcp8/series-workflowmvcp8-convert-artifact-3963678791/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmvcp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"35cb138c9029fed73eed7d7b9d0f100bdbf5ee44","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"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":["allocate_file_region_entries","region_add","region_chg","region_del"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"35cb138c9029fed73eed7d7b9d0f100bdbf5ee44","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"1a12d3cf-d0b7-40ff-8759-2c2d0445c79a","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-13 23:45:22 +0000 UTC FinishedAt: 2026-07-13 23:45:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmvcp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"35cb138c9029fed73eed7d7b9d0f100bdbf5ee44","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"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":["allocate_file_region_entries","region_add","region_chg","region_del"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"35cb138c9029fed73eed7d7b9d0f100bdbf5ee44","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"1a12d3cf-d0b7-40ff-8759-2c2d0445c79a","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-13 23:45:22 +0000 UTC FinishedAt: 2026-07-13 23:45:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmvcp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"35cb138c9029fed73eed7d7b9d0f100bdbf5ee44","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"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":["allocate_file_region_entries","region_add","region_chg","region_del"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"35cb138c9029fed73eed7d7b9d0f100bdbf5ee44","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"1a12d3cf-d0b7-40ff-8759-2c2d0445c79a","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-13 23:45:22 +0000 UTC FinishedAt: 2026-07-13 23:45:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmvcp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"35cb138c9029fed73eed7d7b9d0f100bdbf5ee44","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"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":["allocate_file_region_entries","region_add","region_chg","region_del"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"35cb138c9029fed73eed7d7b9d0f100bdbf5ee44","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"1a12d3cf-d0b7-40ff-8759-2c2d0445c79a","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-13 23:45:32 +0000 UTC FinishedAt: 2026-07-14 02:48:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmvcp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"35cb138c9029fed73eed7d7b9d0f100bdbf5ee44","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"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":["allocate_file_region_entries","region_add","region_chg","region_del"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"35cb138c9029fed73eed7d7b9d0f100bdbf5ee44","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"1a12d3cf-d0b7-40ff-8759-2c2d0445c79a","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-13 23:45:32 +0000 UTC FinishedAt: 2026-07-14 02:48:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*41070462-e177-4ebd-b2fe-de919103fd85,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5e772f85-fe37-4ab6-b20e-e9195c0c5e72,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-workflowmvcp8/series-workflowmvcp8-build-action-3329453273/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-workflowmvcp8/series-workflowmvcp8-build-action-4038867846/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-workflowmvcp8/series-workflowmvcp8-convert-artifact-3963678791/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,}