Name: series-workflow7djrl Phase: Succeeded StartedAt: 2026-07-30 16:55:04 +0000 UTC FinishedAt: 2026-07-30 18:44:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7djrl[0] Phase: Succeeded StartedAt: 2026-07-30 16:55:04 +0000 UTC FinishedAt: 2026-07-30 17:13:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7djrl[0].run-triage Phase: Succeeded StartedAt: 2026-07-30 16:55:04 +0000 UTC FinishedAt: 2026-07-30 17:13:05 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "6677ee30e197d1c6236d2ad363258bc918c7a3a2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NTFS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "6677ee30e197d1c6236d2ad363258bc918c7a3a2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NTFS_FS" ], "series_id": "0eb9e701-56ca-4a44-9c51-3fd2fe279335" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ntfs_ioctl" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE3OjExPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05URlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtudGZzX2lvY3RsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgbmV3IGlvY3RscyB0byB0aGUgTlRGUyBmaWxlc3lzdGVtIHRvIHJlYWQsIHdyaXRlLCByZW1vdmUsIGFuZCBsaXN0IG5hbWVkIHN0cmVhbXMgKEFsdGVybmF0ZSBEYXRhIFN0cmVhbXMpLiBUaGUgaW9jdGxzIGFyZSByZWFjaGFibGUgdmlhIGBudGZzX2lvY3RsYC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxNzoxMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGMyZDU1NjM3ZjM3YjYzZjRiNzEwODFiNzgwNGFkOWNlNzk0ZjJhYTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAzMCAxNzoxMTozMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VzZXJzcGFjZS1hcGkvaW9jdGwvaW9jdGwtbnVtYmVyLnJzdCBiL0RvY3VtZW50YXRpb24vdXNlcnNwYWNlLWFwaS9pb2N0bC9pb2N0bC1udW1iZXIucnN0XG5pbmRleCAzZjBlZjFlMjdlYjA3Li4yYjk4NjlhZWI4MTFiIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi91c2Vyc3BhY2UtYXBpL2lvY3RsL2lvY3RsLW51bWJlci5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vdXNlcnNwYWNlLWFwaS9pb2N0bC9pb2N0bC1udW1iZXIucnN0XG5AQCAtMzk5LDYgJiM0MzszOTksNyBAQCBDb2RlICBTZXEjICAgIEluY2x1ZGUgRmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbW1lbnRzXG4gMHhFNSAgMDAtM0YgIGxpbnV4L2Z1c2UuaFxuIDB4RUMgIDAwLTAxICBkcml2ZXJzL3BsYXRmb3JtL2Nocm9tZS9jcm9zX2VjX2Rldi5oICAgICAgICAgICAgICAgICAgICAgQ2hyb21lT1MgRUMgZHJpdmVyXG4gMHhFRSAgMDAtMDkgIHVhcGkvbGludXgvcGZydXQuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQbGF0Zm9ybSBGaXJtd2FyZSBSdW50aW1lIFVwZGF0ZSBhbmQgVGVsZW1ldHJ5XG4mIzQzOzB4RUYgIDAwLTBGICB1YXBpL2xpbnV4L250ZnMuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlRGU1xuIDB4RjMgIDAwLTNGICBkcml2ZXJzL3VzYi9taXNjL3Npc3VzYnZnYS9zaXN1c2IuaCAgICAgICAgICAgICAgICAgICAgICAgc2lzZmIgKGluIGRldmVsb3BtZW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHUwMDNjbWFpbHRvOnRob21hc0B3aW5pc2NoaG9mZXIubmV0XHUwMDNlXG4gMHhGNiAgYWxsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVFRuZyBMaW51eCBUcmFjZSBUb29sa2l0IE5leHQgR2VuZXJhdGlvblxuZGlmZiAtLWdpdCBhL2ZzL250ZnMvZmlsZS5jIGIvZnMvbnRmcy9maWxlLmNcbmluZGV4IGQ0MjgyODIyYjNjZWYuLjk2MWI5NGY1NDVmMmMgMTAwNjQ0XG4tLS0gYS9mcy9udGZzL2ZpbGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvbnRmcy9maWxlLmNcbkBAIC0xNSw2ICYjNDM7MTUsOCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3Bvc2l4X2FjbF94YXR0ci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY29tcGF0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9mYWxsb2MuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9vdmVyZmxvdy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvbnRmcy5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7bGNuYWxsb2MuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O250ZnMuaFwmIzM0O1xuQEAgLTIzLDYgJiM0MzsyNSw3IEBAXG4gI2luY2x1ZGUgXCYjMzQ7aW9tYXAuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2JpdG1hcC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7dm9sdW1lLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7bWZ0LmhcJiMzNDtcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9maWxlbG9jay5oXHUwMDNlXG4gXG5AQCAtODM5LDYgJiM0Mzs4NDIsNTA0IEBAIHN0YXRpYyBpbnQgbnRmc19pb2N0bF9maXRyaW0oc3RydWN0IG50ZnNfdm9sdW1lICp2b2wsIHVuc2lnbmVkIGxvbmcgYXJnKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MzsjZGVmaW5lIE5URlNfU1RSRUFNX01BWF9JT1x0KDE2ICogMTAyNCAqIDEwMjQpIC8qIDE2TUIgbGltaXQgKi9cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIG50ZnNfcmVhZF9uYW1lZF9zdHJlYW0gLSBSZWFkIGRhdGEgZnJvbSBhIG5hbWVkICREQVRBIHN0cmVhbS5cbiYjNDM7ICpcbiYjNDM7ICogQG5pOlx0XHROVEZTIGlub2RlXG4mIzQzOyAqIEB1bmFtZTpcdFN0cmVhbSBuYW1lXG4mIzQzOyAqIEB1bmFtZV9sZW46XHRMZW5ndGggb2YgbmFtZSBpbiBVbmljb2RlIGNoYXJhY3RlcnNcbiYjNDM7ICogQG9mZnNldDpcdEJ5dGUgb2Zmc2V0IGluIHRoZSBzdHJlYW1cbiYjNDM7ICogQGxlbjpcdE51bWJlciBvZiBieXRlcyB0byByZWFkXG4mIzQzOyAqIEBkYXRhX2J1ZjpcdEJ1ZmZlciB0byBjb3B5IGRhdGEgdG9cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOlx0MCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS5cbiYjNDM7ICpcdFx0SWYgb2Zmc2V0IFx1MDAzZT0gc3RyZWFtIHNpemUsIHJldHVybnMgMC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgbnRmc19yZWFkX25hbWVkX3N0cmVhbShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIF9fbGUxNiAqdW5hbWUsXG4mIzQzO1x0XHR1MzIgdW5hbWVfbGVuLCB1NjQgb2Zmc2V0LCB1NjQgbGVuLCB2b2lkICpkYXRhX2J1ZixcbiYjNDM7XHRcdHU2NCAqcmJ5dGVzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHg7XG4mIzQzO1x0c3RydWN0IGlub2RlICphdHRyX3ZpO1xuJiM0MztcdGludCBlcnIgPSAwO1xuJiM0MztcdHU2NCBkYXRhX3NpemU7XG4mIzQzO1x0czY0IGJ5dGVzO1xuJiM0MztcdGNoYXIgKnJidWYgPSBOVUxMO1xuJiM0MztcbiYjNDM7XHRpZiAoIW5pIHx8ICF1bmFtZSB8fCB1bmFtZV9sZW4gPT0gMClcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRpZiAobGVuID09IDAgfHwgbGVuIFx1MDAzZSBOVEZTX1NUUkVBTV9NQVhfSU8pXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZuaS1cdTAwM2VtcmVjX2xvY2spO1xuJiM0MztcdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuaSwgTlVMTCk7XG4mIzQzO1x0aWYgKCFjdHgpIHtcbiYjNDM7XHRcdG11dGV4X3VubG9jayhcdTAwMjZuaS1cdTAwM2VtcmVjX2xvY2spO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRlcnIgPSBudGZzX2F0dHJfbG9va3VwKEFUX0RBVEEsIHVuYW1lLCB1bmFtZV9sZW4sIENBU0VfU0VOU0lUSVZFLCAwLFxuJiM0MztcdFx0XHROVUxMLCAwLCBjdHgpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIG91dF9sb2NrO1xuJiM0MztcbiYjNDM7XHRpZiAoY3R4LVx1MDAzZWF0dHItXHUwMDNlbm9uX3Jlc2lkZW50KVxuJiM0MztcdFx0ZGF0YV9zaXplID0gbGU2NF90b19jcHUoY3R4LVx1MDAzZWF0dHItXHUwMDNlZGF0YS5ub25fcmVzaWRlbnQuZGF0YV9zaXplKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRkYXRhX3NpemUgPSBsZTMyX3RvX2NwdShjdHgtXHUwMDNlYXR0ci1cdTAwM2VkYXRhLnJlc2lkZW50LnZhbHVlX2xlbmd0aCk7XG4mIzQzO1xuJiM0MztcdGlmIChvZmZzZXQgXHUwMDNlPSBkYXRhX3NpemUpIHtcbiYjNDM7XHRcdCpyYnl0ZXMgPSAwO1xuJiM0MztcdFx0LyogRU9GOiBub3RoaW5nIHRvIHJlYWQgKi9cbiYjNDM7XHRcdGdvdG8gb3V0X2xvY2s7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBBZGp1c3QgbGVuZ3RoIHRvIG5vdCByZWFkIGJleW9uZCBFT0YgKi9cbiYjNDM7XHRpZiAobGVuIFx1MDAzZSBkYXRhX3NpemUgLSBvZmZzZXQpXG4mIzQzO1x0XHRsZW4gPSBkYXRhX3NpemUgLSBvZmZzZXQ7XG4mIzQzO1xuJiM0MztcdGF0dHJfdmkgPSBudGZzX2F0dHJfaWdldChWRlNfSShuaSksIEFUX0RBVEEsIHVuYW1lLCB1bmFtZV9sZW4pO1xuJiM0MztcdG50ZnNfYXR0cl9wdXRfc2VhcmNoX2N0eChjdHgpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZuaS1cdTAwM2VtcmVjX2xvY2spO1xuJiM0MztcbiYjNDM7XHRpZiAoSVNfRVJSKGF0dHJfdmkpKSB7XG4mIzQzO1x0XHRlcnIgPSBQVFJfRVJSKGF0dHJfdmkpO1xuJiM0MztcdFx0Z290byBvdXRfZnJlZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJidWYgPSBrdnphbGxvYyhsZW4sIEdGUF9OT0ZTKTtcbiYjNDM7XHRpZiAoIXJidWYpIHtcbiYjNDM7XHRcdGVyciA9IC1FTk9NRU07XG4mIzQzO1x0XHRpcHV0KGF0dHJfdmkpO1xuJiM0MztcdFx0Z290byBvdXRfZnJlZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGJ5dGVzID0gbnRmc19pbm9kZV9hdHRyX3ByZWFkKGF0dHJfdmksIG9mZnNldCwgbGVuLCByYnVmKTtcbiYjNDM7XHRpcHV0KGF0dHJfdmkpO1xuJiM0MztcdGlmIChieXRlcyBcdTAwM2MgMCkge1xuJiM0MztcdFx0ZXJyID0gYnl0ZXM7XG4mIzQzO1x0XHRnb3RvIG91dF9mcmVlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0KnJieXRlcyA9IGJ5dGVzO1xuJiM0MztcdG1lbWNweShkYXRhX2J1ZiwgcmJ1ZiwgYnl0ZXMpO1xuJiM0MztcbiYjNDM7b3V0X2ZyZWU6XG4mIzQzO1x0a3ZmcmVlKHJidWYpO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztvdXRfbG9jazpcbiYjNDM7XHRudGZzX2F0dHJfcHV0X3NlYXJjaF9jdHgoY3R4KTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2bmktXHUwMDNlbXJlY19sb2NrKTtcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBudGZzX3dyaXRlX25hbWVkX3N0cmVhbSAtIFdyaXRlIGRhdGEgZnJvbSBhIG5hbWVkICREQVRBIHN0cmVhbS5cbiYjNDM7ICpcbiYjNDM7ICogQG5pOlx0XHROVEZTIGlub2RlXG4mIzQzOyAqIEB1bmFtZTpcdFN0cmVhbSBuYW1lXG4mIzQzOyAqIEB1bmFtZV9sZW46XHRMZW5ndGggb2YgbmFtZSBpbiBVbmljb2RlIGNoYXJhY3RlcnNcbiYjNDM7ICogQG9mZnNldDpcdEJ5dGUgb2Zmc2V0IGluIHRoZSBzdHJlYW1cbiYjNDM7ICogQGxlbjpcdE51bWJlciBvZiBieXRlcyB0byB3cml0ZVxuJiM0MzsgKiBAZGF0YV9zdHJlYW06IERhdGEgdG8gd3JpdGVcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOlx0MCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgbnRmc193cml0ZV9uYW1lZF9zdHJlYW0oc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBfX2xlMTYgKnVuYW1lLFxuJiM0MztcdFx0dTMyIHVuYW1lX2xlbiwgdTY0IG9mZnNldCwgdTY0IGxlbiwgdm9pZCAqZGF0YV9zdHJlYW0sXG4mIzQzO1x0XHR1NjQgKndieXRlcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBudGZzX2F0dHJfc2VhcmNoX2N0eCAqY3R4O1xuJiM0MztcdHN0cnVjdCBpbm9kZSAqYXR0cl92aTtcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcdHM2NCBieXRlcztcbiYjNDM7XG4mIzQzO1x0aWYgKCFuaSB8fCAhdW5hbWUgfHwgdW5hbWVfbGVuID09IDAgfHwgIWRhdGFfc3RyZWFtKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdGlmIChsZW4gPT0gMCB8fCBsZW4gXHUwMDNlIE5URlNfU1RSRUFNX01BWF9JTylcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNm5pLVx1MDAzZW1yZWNfbG9jayk7XG4mIzQzO1x0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBOVUxMKTtcbiYjNDM7XHRpZiAoIWN0eCkge1xuJiM0MztcdFx0ZXJyID0gLUVOT01FTTtcbiYjNDM7XHRcdGdvdG8gb3V0X3VubG9jaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGVyciA9IG50ZnNfYXR0cl9sb29rdXAoQVRfREFUQSwgdW5hbWUsIHVuYW1lX2xlbiwgQ0FTRV9TRU5TSVRJVkUsIDAsXG4mIzQzO1x0XHRcdE5VTEwsIDAsIGN0eCk7XG4mIzQzO1x0aWYgKGVycikge1xuJiM0MztcdFx0aWYgKGVyciAhPSAtRU5PRU5UKVxuJiM0MztcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4mIzQzO1x0XHRlcnIgPSBudGZzX2F0dHJfYWRkKG5pLCBBVF9EQVRBLCB1bmFtZSwgdW5hbWVfbGVuLCBOVUxMLCAwKTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdGdvdG8gb3V0X3VubG9jaztcbiYjNDM7XHRcdG1hcmtfbWZ0X3JlY29yZF9kaXJ0eShuaSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRhdHRyX3ZpID0gbnRmc19hdHRyX2lnZXQoVkZTX0kobmkpLCBBVF9EQVRBLCB1bmFtZSwgdW5hbWVfbGVuKTtcbiYjNDM7XHRudGZzX2F0dHJfcHV0X3NlYXJjaF9jdHgoY3R4KTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2bmktXHUwMDNlbXJlY19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0aWYgKElTX0VSUihhdHRyX3ZpKSkge1xuJiM0MztcdFx0ZXJyID0gUFRSX0VSUihhdHRyX3ZpKTtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Ynl0ZXMgPSBudGZzX2lub2RlX2F0dHJfcHdyaXRlKGF0dHJfdmksIG9mZnNldCwgbGVuLCBkYXRhX3N0cmVhbSxcbiYjNDM7XHRcdFx0XHQgICAgICAgZmFsc2UpO1xuJiM0MztcdGlmIChieXRlcyBcdTAwM2MgMClcbiYjNDM7XHRcdGVyciA9IGJ5dGVzO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdCp3Ynl0ZXMgPSBieXRlcztcbiYjNDM7XHRpcHV0KGF0dHJfdmkpO1xuJiM0MztcbiYjNDM7b3V0OlxuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztvdXRfdW5sb2NrOlxuJiM0MztcdGlmIChjdHgpXG4mIzQzO1x0XHRudGZzX2F0dHJfcHV0X3NlYXJjaF9jdHgoY3R4KTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2bmktXHUwMDNlbXJlY19sb2NrKTtcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBudGZzX3JlbW92ZV9uYW1lZF9zdHJlYW0gLSBSZW1vdmUgYSBuYW1lZCAkREFUQSBzdHJlYW0uXG4mIzQzOyAqXG4mIzQzOyAqIEBuaTpcdFx0TlRGUyBpbm9kZVxuJiM0MzsgKiBAdW5hbWU6XHRTdHJlYW0gbmFtZVxuJiM0MzsgKiBAdW5hbWVfbGVuOlx0TmFtZSBsZW5ndGggaW4gVW5pY29kZSBjaGFyYWN0ZXJzXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjpcdDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3JcbiYjNDM7ICogICAgICAgICAgICAgIC1FTk9FTlQgaWYgc3RyZWFtIG5vdCBmb3VuZFxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBudGZzX3JlbW92ZV9uYW1lZF9zdHJlYW0oc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBfX2xlMTYgKnVuYW1lLFxuJiM0MztcdFx0dTMyIHVuYW1lX2xlbilcbiYjNDM7e1xuJiM0MztcdGlmICghbmkgfHwgIXVuYW1lIHx8IHVuYW1lX2xlbiA9PSAwKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdHJldHVybiBudGZzX2F0dHJfcmVtb3ZlKG5pLCBBVF9EQVRBLCB1bmFtZSwgdW5hbWVfbGVuKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7ZW51bSBudGZzX3N0cmVhbV9vcCB7XG4mIzQzO1x0TlRGU19TVFJFQU1fT1BfUkVBRCxcbiYjNDM7XHROVEZTX1NUUkVBTV9PUF9XUklURSxcbiYjNDM7XHROVEZTX1NUUkVBTV9PUF9SRU1PVkUsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgbG9uZyBudGZzX2lvY3RsX3N0cmVhbShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhcmcsXG4mIzQzO1x0XHRcdCAgICAgIGVudW0gbnRmc19zdHJlYW1fb3Agb3ApXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShmaWxwKTtcbiYjNDM7XHRzdHJ1Y3QgbnRmc19pbm9kZSAqbmkgPSBOVEZTX0koaW5vZGUpO1xuJiM0MztcdHN0cnVjdCBudGZzX3N0cmVhbSBfX3VzZXIgKnVyZXEgPVxuJiM0MztcdFx0KHN0cnVjdCBudGZzX3N0cmVhbSBfX3VzZXIgKilhcmc7XG4mIzQzO1x0c3RydWN0IG50ZnNfc3RyZWFtICpyZXE7XG4mIzQzO1x0c2l6ZV90IGhlYWRlcl9zaXplID0gc2l6ZW9mKHN0cnVjdCBudGZzX3N0cmVhbSk7XG4mIzQzO1x0c2l6ZV90IGRhdGFfc2l6ZSwgdG90YWxfc2l6ZTtcbiYjNDM7XHRjaGFyICprbmFtZSwgKmtkYXRhO1xuJiM0MztcdF9fbGUxNiAqdW5hbWUgPSBOVUxMLCAqc25hbWU7XG4mIzQzO1x0aW50IGVyciA9IDAsIHNuYW1lX2xlbjtcbiYjNDM7XHRib29sIHV0ZjE2O1xuJiM0MztcdHN0cnVjdCBudGZzX3N0cmVhbSBoZHI7XG4mIzQzO1xuJiM0MztcdC8qIEZpcnN0IGNvcHkgZml4ZWQgaGVhZGVyICovXG4mIzQzO1x0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNmhkciwgdXJlcSwgaGVhZGVyX3NpemUpKVxuJiM0MztcdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1xuJiM0MztcdGlmIChoZHIuaW9fbGVuIFx1MDAzZSBOVEZTX1NUUkVBTV9NQVhfSU8gfHxcbiYjNDM7XHQgICAgKGhkci5mbGFncyBcdTAwMjYgfk5URlNfU1RSRUFNX0ZMX1VURjE2KSB8fCBoZHIucmVzZXJ2ZWQpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0dXRmMTYgPSBoZHIuZmxhZ3MgXHUwMDI2IE5URlNfU1RSRUFNX0ZMX1VURjE2O1xuJiM0MztcbiYjNDM7XHRpZiAoaGRyLm5hbWVfbGVuID09IDApXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRpZiAodXRmMTYpIHtcbiYjNDM7XHRcdC8qIFVURi0xNkxFIGJ5dGUgY291bnQ6IG11c3QgYmUgZXZlbiBhbmQgd2l0aGluIHRoZSBsaW1pdC4gKi9cbiYjNDM7XHRcdGlmICgoaGRyLm5hbWVfbGVuIFx1MDAyNiAxKSB8fFxuJiM0MztcdFx0ICAgIGhkci5uYW1lX2xlbiBcdTAwM2UgTlRGU19NQVhfTkFNRV9MRU4gKiBzaXplb2YoX19sZTE2KSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fSBlbHNlIGlmIChoZHIubmFtZV9sZW4gXHUwMDNlIE5URlNfTUFYX05BTUVfTEVOKSB7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAob3ApIHtcbiYjNDM7XHRjYXNlIE5URlNfU1RSRUFNX09QX1JFQUQ6XG4mIzQzO1x0XHRpZiAoIShmaWxwLVx1MDAzZWZfbW9kZSBcdTAwMjYgRk1PREVfUkVBRCkgfHwgaGRyLmlvX2xlbiA9PSAwKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdGRhdGFfc2l6ZSA9IGhkci5pb19sZW47XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIE5URlNfU1RSRUFNX09QX1dSSVRFOlxuJiM0MztcdFx0aWYgKCEoZmlscC1cdTAwM2VmX21vZGUgXHUwMDI2IEZNT0RFX1dSSVRFKSB8fCBoZHIuaW9fbGVuID09IDApXG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0ZGF0YV9zaXplID0gaGRyLmlvX2xlbjtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgTlRGU19TVFJFQU1fT1BfUkVNT1ZFOlxuJiM0MztcdFx0aWYgKCEoZmlscC1cdTAwM2VmX21vZGUgXHUwMDI2IEZNT0RFX1dSSVRFKSB8fCBoZHIuaW9fbGVuICE9IDApXG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0ZGF0YV9zaXplID0gMDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gLUVOT1RUWTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChjaGVja19hZGRfb3ZlcmZsb3coaGVhZGVyX3NpemUsIChzaXplX3QpaGRyLm5hbWVfbGVuLCBcdTAwMjZ0b3RhbF9zaXplKSB8fFxuJiM0MztcdCAgICBjaGVja19hZGRfb3ZlcmZsb3codG90YWxfc2l6ZSwgZGF0YV9zaXplLCBcdTAwMjZ0b3RhbF9zaXplKSlcbiYjNDM7XHRcdHJldHVybiAtRU9WRVJGTE9XO1xuJiM0MztcbiYjNDM7XHRyZXEgPSBtZW1kdXBfdXNlcih1cmVxLCB0b3RhbF9zaXplKTtcbiYjNDM7XHRpZiAoSVNfRVJSKHJlcSkpXG4mIzQzO1x0XHRyZXR1cm4gUFRSX0VSUihyZXEpO1xuJiM0MztcbiYjNDM7XHRyZXEtXHUwMDNlYnl0ZXNfcmV0dXJuZWQgPSAwO1xuJiM0MztcbiYjNDM7XHRrbmFtZSA9IChjaGFyICopcmVxLVx1MDAzZWJ1ZmZlcjtcbiYjNDM7XHRrZGF0YSA9IChjaGFyICopcmVxLVx1MDAzZWJ1ZmZlciAmIzQzOyByZXEtXHUwMDNlbmFtZV9sZW47XG4mIzQzO1xuJiM0MztcdGlmIChyZXEtXHUwMDNlbmFtZV9sZW4gIT0gaGRyLm5hbWVfbGVuIHx8IHJlcS1cdTAwM2Vpb19sZW4gIT0gaGRyLmlvX2xlbiB8fFxuJiM0MztcdCAgICByZXEtXHUwMDNlZmxhZ3MgIT0gaGRyLmZsYWdzIHx8IHJlcS1cdTAwM2VyZXNlcnZlZCkge1xuJiM0MztcdFx0ZXJyID0gLUVJTlZBTDtcbiYjNDM7XHRcdGdvdG8gb3V0X2ZyZWU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAodXRmMTYpIHtcbiYjNDM7XHRcdC8qIE5hbWUgaXMgYWxyZWFkeSBvbi1kaXNrIFVURi0xNkxFOyB1c2UgaXQgaW4gcGxhY2UuICovXG4mIzQzO1x0XHRzbmFtZSA9IChfX2xlMTYgKilrbmFtZTtcbiYjNDM7XHRcdHNuYW1lX2xlbiA9IHJlcS1cdTAwM2VuYW1lX2xlbiAvIHNpemVvZihfX2xlMTYpO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRpZiAobWVtY2hyKGtuYW1lLCAmIzM5O1xcMCYjMzk7LCByZXEtXHUwMDNlbmFtZV9sZW4pKSB7XG4mIzQzO1x0XHRcdGVyciA9IC1FSU5WQUw7XG4mIzQzO1x0XHRcdGdvdG8gb3V0X2ZyZWU7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRzbmFtZV9sZW4gPSBudGZzX25sc3RvdWNzKG5pLVx1MDAzZXZvbCwga25hbWUsIHJlcS1cdTAwM2VuYW1lX2xlbixcbiYjNDM7XHRcdFx0XHRcdTAwMjZ1bmFtZSwgTlRGU19NQVhfTkFNRV9MRU4pO1xuJiM0MztcdFx0aWYgKHNuYW1lX2xlbiBcdTAwM2MgMCkge1xuJiM0MztcdFx0XHRlcnIgPSBzbmFtZV9sZW47XG4mIzQzO1x0XHRcdGdvdG8gb3V0X2ZyZWU7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRzbmFtZSA9IHVuYW1lO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChvcCkge1xuJiM0MztcdGNhc2UgTlRGU19TVFJFQU1fT1BfUkVBRDpcbiYjNDM7XHRcdGVyciA9IG50ZnNfcmVhZF9uYW1lZF9zdHJlYW0obmksIHNuYW1lLCBzbmFtZV9sZW4sXG4mIzQzO1x0XHRcdFx0XHQgICAgIHJlcS1cdTAwM2VzdHJlYW1fb2Zmc2V0LCByZXEtXHUwMDNlaW9fbGVuLFxuJiM0MztcdFx0XHRcdFx0ICAgICBrZGF0YSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgXHUwMDI2cmVxLVx1MDAzZWJ5dGVzX3JldHVybmVkKTtcbiYjNDM7XHRcdGlmICghZXJyKSB7XG4mIzQzO1x0XHRcdGlmIChjb3B5X3RvX3VzZXIodXJlcSwgcmVxLFxuJiM0MztcdFx0XHRcdFx0aGVhZGVyX3NpemUgJiM0MzsgcmVxLVx1MDAzZW5hbWVfbGVuICYjNDM7IHJlcS1cdTAwM2VieXRlc19yZXR1cm5lZCkpXG4mIzQzO1x0XHRcdFx0ZXJyID0gLUVGQVVMVDtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgTlRGU19TVFJFQU1fT1BfV1JJVEU6XG4mIzQzO1x0XHRlcnIgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbHApO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRlcnIgPSBudGZzX3dyaXRlX25hbWVkX3N0cmVhbShuaSwgc25hbWUsIHNuYW1lX2xlbixcbiYjNDM7XHRcdFx0XHRcdCAgICAgIHJlcS1cdTAwM2VzdHJlYW1fb2Zmc2V0LCByZXEtXHUwMDNlaW9fbGVuLFxuJiM0MztcdFx0XHRcdFx0ICAgICAga2RhdGEsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBcdTAwMjZyZXEtXHUwMDNlYnl0ZXNfcmV0dXJuZWQpO1xuJiM0MztcdFx0bW50X2Ryb3Bfd3JpdGVfZmlsZShmaWxwKTtcbiYjNDM7XHRcdGlmICghZXJyKSB7XG4mIzQzO1x0XHRcdGlmIChjb3B5X3RvX3VzZXIoXHUwMDI2dXJlcS1cdTAwM2VieXRlc19yZXR1cm5lZCxcbiYjNDM7XHRcdFx0XHRcdCBcdTAwMjZyZXEtXHUwMDNlYnl0ZXNfcmV0dXJuZWQsXG4mIzQzO1x0XHRcdFx0XHQgc2l6ZW9mKHJlcS1cdTAwM2VieXRlc19yZXR1cm5lZCkpKVxuJiM0MztcdFx0XHRcdGVyciA9IC1FRkFVTFQ7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIE5URlNfU1RSRUFNX09QX1JFTU9WRTpcbiYjNDM7XHRcdGVyciA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlscCk7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGVyciA9IG50ZnNfcmVtb3ZlX25hbWVkX3N0cmVhbShuaSwgc25hbWUsIHNuYW1lX2xlbik7XG4mIzQzO1x0XHRtbnRfZHJvcF93cml0ZV9maWxlKGZpbHApO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdGVyciA9IC1FTk9UVFk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7b3V0X2ZyZWU6XG4mIzQzO1x0aWYgKHVuYW1lKVxuJiM0MztcdFx0a21lbV9jYWNoZV9mcmVlKG50ZnNfbmFtZV9jYWNoZSwgdW5hbWUpO1xuJiM0MztcdGtmcmVlKHJlcSk7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBudGZzX2lvY3RsX2xpc3Rfc3RyZWFtcyhzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhcmcpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShmaWxwKTtcbiYjNDM7XHRzdHJ1Y3QgbnRmc19pbm9kZSAqbmkgPSBOVEZTX0koaW5vZGUpO1xuJiM0MztcdHN0cnVjdCBudGZzX2xpc3Rfc3RyZWFtcyBoZHI7XG4mIzQzO1x0c3RydWN0IG50ZnNfc3RyZWFtX2VudHJ5ICplbnRyeSwgKmxhc3RfZW50cnkgPSBOVUxMO1xuJiM0MztcdHNpemVfdCByZXF1aXJlZCA9IDA7XG4mIzQzO1x0dm9pZCAqa2J1ZiA9IE5VTEw7XG4mIzQzO1x0dm9pZCBfX3VzZXIgKnVidWY7XG4mIzQzO1x0c3RydWN0IGF0dHJfcmVjb3JkICphO1xuJiM0MztcdHN0cnVjdCBudGZzX2F0dHJfc2VhcmNoX2N0eCAqYWN0eDtcbiYjNDM7XHRpbnQgcmV0ID0gMCwgZXJyLCBjb3VudCA9IDA7XG4mIzQzO1x0c2l6ZV90IGVudHJ5X3NpemUsIG9mZnNldCA9IDA7XG4mIzQzO1x0dW5zaWduZWQgaW50IG5hbWVfbGVuO1xuJiM0MztcdHVuc2lnbmVkIGNoYXIgKnNuO1xuJiM0MztcdGJvb2wgdXRmMTY7XG4mIzQzO1xuJiM0MztcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZoZHIsICh2b2lkIF9fdXNlciAqKWFyZywgc2l6ZW9mKGhkcikpKVxuJiM0MztcdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1xuJiM0MztcdGlmICgoaGRyLmZsYWdzIFx1MDAyNiB+TlRGU19TVFJFQU1fRkxfVVRGMTYpIHx8IGhkci5yZXNlcnZlZClcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHR1dGYxNiA9IGhkci5mbGFncyBcdTAwMjYgTlRGU19TVFJFQU1fRkxfVVRGMTY7XG4mIzQzO1xuJiM0MztcdHVidWYgPSAodm9pZCBfX3VzZXIgKilhcmcgJiM0Mzsgc2l6ZW9mKGhkcik7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2bmktXHUwMDNlbXJlY19sb2NrKTtcbiYjNDM7XHRhY3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBOVUxMKTtcbiYjNDM7XHRpZiAoIWFjdHgpIHtcbiYjNDM7XHRcdG11dGV4X3VubG9jayhcdTAwMjZuaS1cdTAwM2VtcmVjX2xvY2spO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHR3aGlsZSAoKGVyciA9IG50ZnNfYXR0cnNfd2FsayhhY3R4KSkgPT0gMCkge1xuJiM0MztcdFx0YSA9IGFjdHgtXHUwMDNlYXR0cjtcbiYjNDM7XHRcdGlmIChhLVx1MDAzZXR5cGUgIT0gQVRfREFUQSB8fCAhYS1cdTAwM2VuYW1lX2xlbmd0aClcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHV0ZjE2KSB7XG4mIzQzO1x0XHRcdG5hbWVfbGVuID0gYS1cdTAwM2VuYW1lX2xlbmd0aCAqIHNpemVvZihfX2xlMTYpO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0c24gPSBudGZzX2F0dHJfbmFtZV9nZXQobmktXHUwMDNldm9sLFxuJiM0MztcdFx0XHRcdFx0KF9fbGUxNiAqKSgodTggKilhICYjNDM7IGxlMTZfdG9fY3B1KGEtXHUwMDNlbmFtZV9vZmZzZXQpKSxcbiYjNDM7XHRcdFx0XHRcdGEtXHUwMDNlbmFtZV9sZW5ndGgpO1xuJiM0MztcdFx0XHRpZiAoIXNuKSB7XG4mIzQzO1x0XHRcdFx0cmV0ID0gLUVJTztcbiYjNDM7XHRcdFx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRuYW1lX2xlbiA9IHN0cmxlbihzbik7XG4mIzQzO1x0XHRcdG50ZnNfYXR0cl9uYW1lX2ZyZWUoXHUwMDI2c24pO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGVudHJ5X3NpemUgPSBzaXplb2YoKmVudHJ5KSAmIzQzOyBuYW1lX2xlbjtcbiYjNDM7XHRcdGVudHJ5X3NpemUgPSBBTElHTihlbnRyeV9zaXplLCA4KTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAocmVxdWlyZWQgXHUwMDNlIFNJWkVfTUFYIC0gZW50cnlfc2l6ZSkge1xuJiM0MztcdFx0XHRyZXQgPSAtRU9WRVJGTE9XO1xuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHJlcXVpcmVkICYjNDM7PSBlbnRyeV9zaXplO1xuJiM0MztcdFx0Y291bnQmIzQzOyYjNDM7O1xuJiM0MztcdH1cbiYjNDM7XHRpZiAoZXJyICE9IC1FTk9FTlQpIHtcbiYjNDM7XHRcdHJldCA9IGVycjtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aGRyLnN0cmVhbV9jb3VudCA9IGNvdW50O1xuJiM0MztcdGhkci5ieXRlc19yZXR1cm5lZCA9IHJlcXVpcmVkO1xuJiM0MztcbiYjNDM7XHRpZiAoIWNvdW50KVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdGlmIChoZHIuYnVmZmVyX3NpemUgXHUwMDNjIHJlcXVpcmVkKSB7XG4mIzQzO1x0XHRyZXQgPSAtRU5PU1BDO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRrYnVmID0ga3Z6YWxsb2MocmVxdWlyZWQsIEdGUF9OT0ZTKTtcbiYjNDM7XHRpZiAoIWtidWYpIHtcbiYjNDM7XHRcdHJldCA9IC1FTk9NRU07XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG50ZnNfYXR0cl9yZWluaXRfc2VhcmNoX2N0eChhY3R4KTtcbiYjNDM7XHR3aGlsZSAoKGVyciA9IG50ZnNfYXR0cnNfd2FsayhhY3R4KSkgPT0gMCkge1xuJiM0MztcdFx0YSA9IGFjdHgtXHUwMDNlYXR0cjtcbiYjNDM7XHRcdGlmIChhLVx1MDAzZXR5cGUgIT0gQVRfREFUQSB8fCAhYS1cdTAwM2VuYW1lX2xlbmd0aClcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRpZiAodXRmMTYpIHtcbiYjNDM7XHRcdFx0c24gPSBOVUxMO1xuJiM0MztcdFx0XHRuYW1lX2xlbiA9IGEtXHUwMDNlbmFtZV9sZW5ndGggKiBzaXplb2YoX19sZTE2KTtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdHNuID0gbnRmc19hdHRyX25hbWVfZ2V0KG5pLVx1MDAzZXZvbCxcbiYjNDM7XHRcdFx0XHRcdChfX2xlMTYgKikoKHU4ICopYSAmIzQzOyBsZTE2X3RvX2NwdShhLVx1MDAzZW5hbWVfb2Zmc2V0KSksXG4mIzQzO1x0XHRcdFx0XHRhLVx1MDAzZW5hbWVfbGVuZ3RoKTtcbiYjNDM7XHRcdFx0aWYgKCFzbikge1xuJiM0MztcdFx0XHRcdHJldCA9IC1FSU87XG4mIzQzO1x0XHRcdFx0Z290byBvdXQ7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0bmFtZV9sZW4gPSBzdHJsZW4oc24pO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGVudHJ5X3NpemUgPSBzaXplb2YoKmVudHJ5KSAmIzQzOyBuYW1lX2xlbjtcbiYjNDM7XHRcdGVudHJ5X3NpemUgPSBBTElHTihlbnRyeV9zaXplLCA4KTtcbiYjNDM7XHRcdGlmIChvZmZzZXQgXHUwMDNlIHJlcXVpcmVkIC0gZW50cnlfc2l6ZSkge1xuJiM0MztcdFx0XHRyZXQgPSAtRU9WRVJGTE9XO1xuJiM0MztcdFx0XHRudGZzX2F0dHJfbmFtZV9mcmVlKFx1MDAyNnNuKTtcbiYjNDM7XHRcdFx0Z290byBvdXQ7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0ZW50cnkgPSAoc3RydWN0IG50ZnNfc3RyZWFtX2VudHJ5ICopKGtidWYgJiM0Mzsgb2Zmc2V0KTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoYS1cdTAwM2Vub25fcmVzaWRlbnQpIHtcbiYjNDM7XHRcdFx0ZW50cnktXHUwMDNlc2l6ZSA9IGxlNjRfdG9fY3B1KGEtXHUwMDNlZGF0YS5ub25fcmVzaWRlbnQuZGF0YV9zaXplKTtcbiYjNDM7XHRcdFx0ZW50cnktXHUwMDNlYWxsb2Nfc2l6ZSA9XG4mIzQzO1x0XHRcdFx0bGU2NF90b19jcHUoYS1cdTAwM2VkYXRhLm5vbl9yZXNpZGVudC5hbGxvY2F0ZWRfc2l6ZSk7XG4mIzQzO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0ZW50cnktXHUwMDNlc2l6ZSA9IGxlMzJfdG9fY3B1KGEtXHUwMDNlZGF0YS5yZXNpZGVudC52YWx1ZV9sZW5ndGgpO1xuJiM0MztcdFx0XHRlbnRyeS1cdTAwM2VhbGxvY19zaXplID0gbGUzMl90b19jcHUoYS1cdTAwM2VsZW5ndGgpIC1cbiYjNDM7XHRcdFx0XHRsZTE2X3RvX2NwdShhLVx1MDAzZWRhdGEucmVzaWRlbnQudmFsdWVfb2Zmc2V0KTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRlbnRyeS1cdTAwM2VuYW1lX2xlbiA9IG5hbWVfbGVuO1xuJiM0MztcdFx0aWYgKHV0ZjE2KVxuJiM0MztcdFx0XHRtZW1jcHkoZW50cnktXHUwMDNlbmFtZSxcbiYjNDM7XHRcdFx0ICAgICAgICh1OCAqKWEgJiM0MzsgbGUxNl90b19jcHUoYS1cdTAwM2VuYW1lX29mZnNldCksIG5hbWVfbGVuKTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0bWVtY3B5KGVudHJ5LVx1MDAzZW5hbWUsIHNuLCBuYW1lX2xlbik7XG4mIzQzO1x0XHRudGZzX2F0dHJfbmFtZV9mcmVlKFx1MDAyNnNuKTtcbiYjNDM7XG4mIzQzO1x0XHRlbnRyeS1cdTAwM2VuZXh0X2VudHJ5X29mZiA9IGVudHJ5X3NpemU7XG4mIzQzO1x0XHRsYXN0X2VudHJ5ID0gZW50cnk7XG4mIzQzO1x0XHRvZmZzZXQgJiM0Mzs9IGVudHJ5X3NpemU7XG4mIzQzO1x0fVxuJiM0MztcdGlmIChlcnIgIT0gLUVOT0VOVCkge1xuJiM0MztcdFx0cmV0ID0gZXJyO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHQvKiBUaGUgY2hhaW4gdGVybWluYXRlcyBhdCB0aGUgbGFzdCBlbnRyeS4gKi9cbiYjNDM7XHRcdGlmIChsYXN0X2VudHJ5KVxuJiM0MztcdFx0XHRsYXN0X2VudHJ5LVx1MDAzZW5leHRfZW50cnlfb2ZmID0gMDtcbiYjNDM7XHRcdGhkci5ieXRlc19yZXR1cm5lZCA9IG9mZnNldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztvdXQ6XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNm5pLVx1MDAzZW1yZWNfbG9jayk7XG4mIzQzO1x0bnRmc19hdHRyX3B1dF9zZWFyY2hfY3R4KGFjdHgpO1xuJiM0MztcbiYjNDM7XHRpZiAocmV0IFx1MDAyNlx1MDAyNiByZXQgIT0gLUVOT1NQQylcbiYjNDM7XHRcdGdvdG8gb3V0X2ZyZWU7XG4mIzQzO1xuJiM0MztcdGlmICghcmV0IFx1MDAyNlx1MDAyNiBrYnVmIFx1MDAyNlx1MDAyNiBjb3B5X3RvX3VzZXIodWJ1Ziwga2J1ZiwgaGRyLmJ5dGVzX3JldHVybmVkKSkge1xuJiM0MztcdFx0cmV0ID0gLUVGQVVMVDtcbiYjNDM7XHRcdGdvdG8gb3V0X2ZyZWU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKWFyZywgXHUwMDI2aGRyLCBzaXplb2YoaGRyKSkpXG4mIzQzO1x0XHRyZXQgPSAtRUZBVUxUO1xuJiM0MztcbiYjNDM7b3V0X2ZyZWU6XG4mIzQzO1x0a3ZmcmVlKGtidWYpO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4gbG9uZyBudGZzX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbiB7XG4gXHRzd2l0Y2ggKGNtZCkge1xuQEAgLTg1MCw2ICYjNDM7MTM1MSwxNCBAQCBsb25nIG50ZnNfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuIFx0XHRyZXR1cm4gbnRmc19pb2N0bF9zZXRfdm9sdW1lX2xhYmVsKGZpbHAsIGFyZyk7XG4gXHRjYXNlIEZJVFJJTTpcbiBcdFx0cmV0dXJuIG50ZnNfaW9jdGxfZml0cmltKE5URlNfU0IoZmlsZV9pbm9kZShmaWxwKS1cdTAwM2VpX3NiKSwgYXJnKTtcbiYjNDM7XHRjYXNlIE5URlNfSU9DX1NUUkVBTV9SRUFEOlxuJiM0MztcdFx0cmV0dXJuIG50ZnNfaW9jdGxfc3RyZWFtKGZpbHAsIGFyZywgTlRGU19TVFJFQU1fT1BfUkVBRCk7XG4mIzQzO1x0Y2FzZSBOVEZTX0lPQ19TVFJFQU1fV1JJVEU6XG4mIzQzO1x0XHRyZXR1cm4gbnRmc19pb2N0bF9zdHJlYW0oZmlscCwgYXJnLCBOVEZTX1NUUkVBTV9PUF9XUklURSk7XG4mIzQzO1x0Y2FzZSBOVEZTX0lPQ19TVFJFQU1fUkVNT1ZFOlxuJiM0MztcdFx0cmV0dXJuIG50ZnNfaW9jdGxfc3RyZWFtKGZpbHAsIGFyZywgTlRGU19TVFJFQU1fT1BfUkVNT1ZFKTtcbiYjNDM7XHRjYXNlIE5URlNfSU9DX0xJU1RfU1RSRUFNUzpcbiYjNDM7XHRcdHJldHVybiBudGZzX2lvY3RsX2xpc3Rfc3RyZWFtcyhmaWxwLCBhcmcpO1xuIFx0ZGVmYXVsdDpcbiBcdFx0cmV0dXJuIC1FTk9UVFk7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L250ZnMuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9udGZzLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5hNTc4M2RjM2I5MDU0XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvbnRmcy5oXG5AQCAtMCwwICYjNDM7MSwxMTUgQEBcbiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgV0lUSCBMaW51eC1zeXNjYWxsLW5vdGUgKi9cbiYjNDM7LypcbiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI2IExHIEVsZWN0cm9uaWNzIENvLiwgTHRkLlxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpZm5kZWYgX1VBUElfTElOVVhfTlRGU19IXG4mIzQzOyNkZWZpbmUgX1VBUElfTElOVVhfTlRGU19IXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaW9jdGwuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2RlZmluZSBOVEZTX0lPQ19NQUdJQ1x0MHhFRlxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogRmxhZ3MgZm9yIG50ZnNfc3RyZWFtLmZsYWdzIGFuZCBudGZzX2xpc3Rfc3RyZWFtcy5mbGFncy5cbiYjNDM7ICpcbiYjNDM7ICogVGhlIHN0cmVhbSBuYW1lIGlzIHJhdyBVVEYtMTZMRSwgZXhhY3RseSBhcyBzdG9yZWQgb24gZGlzaywgaW5zdGVhZCBvZlxuJiM0MzsgKiBiZWluZyBlbmNvZGVkIHdpdGggdGhlIG1vdW50ZWQgZmlsZXN5c3RlbSBOTFMuIFRoaXMgYWxsb3dzIGxvc3NsZXNzXG4mIzQzOyAqIHJvdW5kLXRyaXBwaW5nIG9mIHN0cmVhbSBuYW1lcyB3aG9zZSBjaGFyYWN0ZXJzIGFyZSBub3QgcmVwcmVzZW50YWJsZVxuJiM0MzsgKiBpbiB0aGUgbW91bnQgTkxTIChlLmcuIGZvciBXaW5lLCB3aGljaCB3b3JrcyBpbiBVVEYtMTYgbmF0aXZlbHkpLlxuJiM0MzsgKiBXaGVuIHNldCwgdGhlIG5hbWUgbGVuZ3RoIGZpZWxkcyBjb3VudCBieXRlcyBvZiBVVEYtMTZMRSBhbmQgbXVzdFxuJiM0MzsgKiB0aGVyZWZvcmUgYmUgZXZlbi5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgTlRGU19TVFJFQU1fRkxfVVRGMTZcdDB4MVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogbnRmcyBuYW1lZCBzdHJlYW0gaW9jdGwgc3RydWN0dXJlLlxuJiM0MzsgKlxuJiM0MzsgKiBAc3RyZWFtX29mZnNldDpcdE9mZnNldCB3aXRoaW4gdGhlIG5hbWVkIHN0cmVhbS5cbiYjNDM7ICogQGlvX2xlbjpcdFx0TnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQvd3JpdGUuXG4mIzQzOyAqIEBieXRlc19yZXR1cm5lZDpcdEFjdHVhbCBieXRlcyB0cmFuc2ZlcnJlZCAob3V0KS5cbiYjNDM7ICogQG5hbWVfbGVuOlx0XHRTdHJlYW0gbmFtZSBsZW5ndGggaW4gYnl0ZXMsIG5vdCBpbmNsdWRpbmcgYW55XG4mIzQzOyAqXHRcdFx0dGVybWluYXRpbmcgTlVMICh3aGljaCBtdXN0IG5vdCBiZSBwcmVzZW50KS4gV2hlblxuJiM0MzsgKlx0XHRcdE5URlNfU1RSRUFNX0ZMX1VURjE2IGlzIHNldCB0aGlzIGlzIGEgVVRGLTE2TEUgYnl0ZVxuJiM0MzsgKlx0XHRcdGNvdW50IGFuZCBtdXN0IGJlIGV2ZW4uXG4mIzQzOyAqIEBmbGFnczpcdFx0Qml0IG1hc2sgb2YgTlRGU19TVFJFQU1fRkxfKiBmbGFncy4gb3RoZXIgYml0cyBtdXN0IGJlXG4mIzQzOyAqXHRcdFx0emVyby5cbiYjNDM7ICogQHJlc2VydmVkOlx0XHRNdXN0IGJlIHplcm8uXG4mIzQzOyAqIEBidWZmZXI6XHRcdFN0cmVhbSBuYW1lIGZvbGxvd2VkIGJ5IHN0cmVhbSBkYXRhLlxuJiM0MzsgKlxuJiM0MzsgKiBUaGUgc3RyZWFtIG5hbWUgaXMgdGhlIGJhcmUgc3RyZWFtIG5hbWUsIHdpdGhvdXQgdGhlIGxlYWRpbmcgJiMzOTs6JiMzOTsgb3IgdGhlXG4mIzQzOyAqIHRyYWlsaW5nIFwmIzM0OzokREFUQVwmIzM0OyBkZWNvcmF0aW9uIHVzZWQgYnkgV2luZG93cy4gQnkgZGVmYXVsdCBpdCBpcyBlbmNvZGVkIHdpdGhcbiYjNDM7ICogdGhlIG1vdW50ZWQgZmlsZXN5c3RlbSBOTFMuIElmIE5URlNfU1RSRUFNX0ZMX1VURjE2IGlzIHNldCBpbiBAZmxhZ3MgaXQgaXNcbiYjNDM7ICogcmF3IFVURi0xNkxFIGluc3RlYWQuIEZvciByZWFkIGFuZCB3cml0ZSwgQGlvX2xlbiBieXRlcyBvZiBkYXRhIGZvbGxvdyB0aGVcbiYjNDM7ICogbmFtZS4gRm9yIHJlbW92ZSwgb25seSB0aGUgbmFtZSBpcyByZXF1aXJlZCBhbmQgQGlvX2xlbiBtdXN0IGJlIHplcm8uXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgbnRmc19zdHJlYW0ge1xuJiM0MztcdF9fYWxpZ25lZF91NjQgc3RyZWFtX29mZnNldDtcbiYjNDM7XHRfX2FsaWduZWRfdTY0IGlvX2xlbjtcbiYjNDM7XHRfX2FsaWduZWRfdTY0IGJ5dGVzX3JldHVybmVkO1xuJiM0MztcdF9fdTMyIG5hbWVfbGVuO1xuJiM0MztcdF9fdTMyIGZsYWdzO1xuJiM0MztcdF9fYWxpZ25lZF91NjQgcmVzZXJ2ZWQ7XG4mIzQzO1x0X191OCBidWZmZXJbXTsgLyogbmFtZSAmIzQzOyBkYXRhICovXG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBTaW5nbGUgc3RyZWFtIGVudHJ5IHJldHVybmVkIGJ5IE5URlNfSU9DX0xJU1RfU1RSRUFNUy5cbiYjNDM7ICpcbiYjNDM7ICogQG5leHRfZW50cnlfb2ZmOlx0Qnl0ZSBvZmZzZXQgZnJvbSB0aGUgc3RhcnQgb2YgdGhpcyBlbnRyeSB0byB0aGUgbmV4dFxuJiM0MzsgKlx0XHRcdGVudHJ5LCBvciB6ZXJvIGZvciB0aGUgbGFzdCBlbnRyeS4gQWx3YXlzIGEgbXVsdGlwbGVcbiYjNDM7ICpcdFx0XHRvZiA4LiBDb25zdW1lcnMgbXVzdCB1c2UgdGhpcyB0byBhZHZhbmNlIGluc3RlYWQgb2ZcbiYjNDM7ICpcdFx0XHRjb21wdXRpbmcgdGhlIHN0cmlkZSB0aGVtc2VsdmVzLCBzbyB0aGUgZW50cnkgY2FuIGdyb3dcbiYjNDM7ICpcdFx0XHRuZXcgZmllbGRzIHdpdGhvdXQgYnJlYWtpbmcgdGhlIEFCSS5cbiYjNDM7ICogQHNpemU6XHRcdFN0cmVhbSBkYXRhIHNpemUgaW4gYnl0ZXMuXG4mIzQzOyAqIEBhbGxvY19zaXplOlx0XHRCeXRlcyBhbGxvY2F0ZWQgZm9yIHRoZSBzdHJlYW0gKGNsdXN0ZXIgYWxpZ25lZCBmb3JcbiYjNDM7ICpcdFx0XHRub24tcmVzaWRlbnQgc3RyZWFtcykuXG4mIzQzOyAqIEBuYW1lX2xlbjpcdFx0U3RyZWFtIG5hbWUgbGVuZ3RoIGluIGJ5dGVzLCBub3QgaW5jbHVkaW5nIGEgTlVMXG4mIzQzOyAqXHRcdFx0dGVybWluYXRvciAobm9uZSBpcyBzdG9yZWQpLiBDb3VudHMgVVRGLTE2TEUgYnl0ZXNcbiYjNDM7ICpcdFx0XHR3aGVuIE5URlNfU1RSRUFNX0ZMX1VURjE2IHdhcyByZXF1ZXN0ZWQuXG4mIzQzOyAqIEByZXNlcnZlZDpcdFx0TXVzdCBiZSB6ZXJvLlxuJiM0MzsgKiBAbmFtZTpcdFx0QmFyZSBzdHJlYW0gbmFtZTsgTkxTIGVuY29kZWQsIG9yIHJhdyBVVEYtMTZMRSB3aGVuXG4mIzQzOyAqXHRcdFx0TlRGU19TVFJFQU1fRkxfVVRGMTYgd2FzIHJlcXVlc3RlZCAoc2VlIHN0cnVjdFxuJiM0MzsgKlx0XHRcdG50ZnNfc3RyZWFtKS5cbiYjNDM7ICovXG4mIzQzO3N0cnVjdCBudGZzX3N0cmVhbV9lbnRyeSB7XG4mIzQzO1x0X19hbGlnbmVkX3U2NCBuZXh0X2VudHJ5X29mZjtcbiYjNDM7XHRfX2FsaWduZWRfdTY0IHNpemU7XG4mIzQzO1x0X19hbGlnbmVkX3U2NCBhbGxvY19zaXplO1xuJiM0MztcdF9fdTMyIG5hbWVfbGVuO1xuJiM0MztcdF9fdTMyIHJlc2VydmVkO1xuJiM0MztcdF9fdTggbmFtZVtdO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogbnRmcyBsaXN0IHN0cmVhbXMgaW9jdGwgc3RydWN0dXJlLlxuJiM0MzsgKlxuJiM0MzsgKiBAYnVmZmVyX3NpemU6XHR1c2VyIGJ1ZmZlciBzaXplKGluKS5cbiYjNDM7ICogQGJ5dGVzX3JldHVybmVkOlx0YWN0dWFsIGJ5dGVzIHdyaXR0ZW4gb3IgcmVxdWlyZWQob3V0KS5cbiYjNDM7ICogQHN0cmVhbV9jb3VudDpcdG51bWJlciBvZiBzdHJlYW1zKG91dCkuXG4mIzQzOyAqIEBmbGFnczpcdFx0Qml0IG1hc2sgb2YgTlRGU19TVFJFQU1fRkxfKiBmbGFncyBjb250cm9sbGluZyB0aGVcbiYjNDM7ICpcdFx0XHRlbmNvZGluZyBvZiB0aGUgcmV0dXJuZWQgbmFtZXM7IG90aGVyIGJpdHMgbXVzdCBiZSB6ZXJvLlxuJiM0MzsgKiBAcmVzZXJ2ZWQ6XHRcdE11c3QgYmUgemVyby5cbiYjNDM7ICogQGJ1ZmZlcjpcdFx0bnRmc19zdHJlYW1fZW50cnkgYXJyYXkuXG4mIzQzOyAqXG4mIzQzOyAqIFRoZSB2YXJpYWJsZS1sZW5ndGggZW50cmllcyBmb2xsb3cgdGhlIGhlYWRlciBpbiBAYnVmZmVyLCBlYWNoIGFsaWduZWQgb25cbiYjNDM7ICogYW4gOC1ieXRlIGJvdW5kYXJ5IGFuZCBjaGFpbmVkIHZpYSBudGZzX3N0cmVhbV9lbnRyeS5uZXh0X2VudHJ5X29mZi4gSWZcbiYjNDM7ICogQGJ1ZmZlcl9zaXplIGlzIHRvbyBzbWFsbCwgbm8gZGF0YSBpcyBjb3BpZWQsIEBzdHJlYW1fY291bnQgYW5kXG4mIzQzOyAqIEBieXRlc19yZXR1cm5lZCByZXBvcnQgdGhlIHJlcXVpcmVkIHZhbHVlcyBhbmQgdGhlIGlvY3RsIGZhaWxzIHdpdGhcbiYjNDM7ICogLUVOT1NQQy5cbiYjNDM7ICovXG4mIzQzO3N0cnVjdCBudGZzX2xpc3Rfc3RyZWFtcyB7XG4mIzQzO1x0X19hbGlnbmVkX3U2NCBidWZmZXJfc2l6ZTtcbiYjNDM7XHRfX2FsaWduZWRfdTY0IGJ5dGVzX3JldHVybmVkO1xuJiM0MztcdF9fYWxpZ25lZF91NjQgc3RyZWFtX2NvdW50O1xuJiM0MztcdF9fdTMyIGZsYWdzO1xuJiM0MztcdF9fdTMyIHJlc2VydmVkO1xuJiM0MztcdF9fdTggYnVmZmVyW107XG4mIzQzO307XG4mIzQzO1xuJiM0MzsjZGVmaW5lIE5URlNfSU9DX1NUUkVBTV9SRUFEXHRcdF9JT1dSKE5URlNfSU9DX01BR0lDLCAxLCBzdHJ1Y3QgbnRmc19zdHJlYW0pXG4mIzQzOyNkZWZpbmUgTlRGU19JT0NfU1RSRUFNX1dSSVRFXHRcdF9JT1dSKE5URlNfSU9DX01BR0lDLCAyLCBzdHJ1Y3QgbnRmc19zdHJlYW0pXG4mIzQzOyNkZWZpbmUgTlRGU19JT0NfU1RSRUFNX1JFTU9WRVx0XHRfSU9XUihOVEZTX0lPQ19NQUdJQywgMywgc3RydWN0IG50ZnNfc3RyZWFtKVxuJiM0MzsjZGVmaW5lIE5URlNfSU9DX0xJU1RfU1RSRUFNU1x0XHRfSU9XUihOVEZTX0lPQ19NQUdJQywgNCwgc3RydWN0IG50ZnNfbGlzdF9zdHJlYW1zKVxuJiM0MztcbiYjNDM7I2VuZGlmIC8qIF9VQVBJX0xJTlVYX05URlNfSCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE3OjExPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtOVEZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bnRmc19pb2N0bCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIG5ldyBpb2N0bHMgdG8gdGhlIE5URlMgZmlsZXN5c3RlbSB0byByZWFkLCB3cml0ZSwgcmVtb3ZlLCBhbmQgbGlzdCBuYW1lZCBzdHJlYW1zIChBbHRlcm5hdGUgRGF0YSBTdHJlYW1zKS4gVGhlIGlvY3RscyBhcmUgcmVhY2hhYmxlIHZpYSBgbnRmc19pb2N0bGAuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjMmQ1NTYzN2YzN2I2M2Y0YjcxMDgxYjc4MDRhZDljZTc5NGYyYWE5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBKdWwgMzAgMTc6MTE6MzIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VzZXJzcGFjZS1hcGkvaW9jdGwvaW9jdGwtbnVtYmVyLnJzdCBiL0RvY3VtZW50YXRpb24vdXNlcnNwYWNlLWFwaS9pb2N0bC9pb2N0bC1udW1iZXIucnN0CmluZGV4IDNmMGVmMWUyN2ViMDcuLjJiOTg2OWFlYjgxMWIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdXNlcnNwYWNlLWFwaS9pb2N0bC9pb2N0bC1udW1iZXIucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vdXNlcnNwYWNlLWFwaS9pb2N0bC9pb2N0bC1udW1iZXIucnN0CkBAIC0zOTksNiAmIzQzOzM5OSw3IEBAIENvZGUgIFNlcSMgICAgSW5jbHVkZSBGaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tbWVudHMKIDB4RTUgIDAwLTNGICBsaW51eC9mdXNlLmgKIDB4RUMgIDAwLTAxICBkcml2ZXJzL3BsYXRmb3JtL2Nocm9tZS9jcm9zX2VjX2Rldi5oICAgICAgICAgICAgICAgICAgICAgQ2hyb21lT1MgRUMgZHJpdmVyCiAweEVFICAwMC0wOSAgdWFwaS9saW51eC9wZnJ1dC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsYXRmb3JtIEZpcm13YXJlIFJ1bnRpbWUgVXBkYXRlIGFuZCBUZWxlbWV0cnkKJiM0MzsweEVGICAwMC0wRiAgdWFwaS9saW51eC9udGZzLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5URlMKIDB4RjMgIDAwLTNGICBkcml2ZXJzL3VzYi9taXNjL3Npc3VzYnZnYS9zaXN1c2IuaCAgICAgICAgICAgICAgICAgICAgICAgc2lzZmIgKGluIGRldmVsb3BtZW50KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbHQ7bWFpbHRvOnRob21hc0B3aW5pc2NoaG9mZXIubmV0Jmd0OwogMHhGNiAgYWxsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVFRuZyBMaW51eCBUcmFjZSBUb29sa2l0IE5leHQgR2VuZXJhdGlvbgpkaWZmIC0tZ2l0IGEvZnMvbnRmcy9maWxlLmMgYi9mcy9udGZzL2ZpbGUuYwppbmRleCBkNDI4MjgyMmIzY2VmLi45NjFiOTRmNTQ1ZjJjIDEwMDY0NAotLS0gYS9mcy9udGZzL2ZpbGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9udGZzL2ZpbGUuYwpAQCAtMTUsNiAmIzQzOzE1LDggQEAKICNpbmNsdWRlICZsdDtsaW51eC9wb3NpeF9hY2xfeGF0dHIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9jb21wYXQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9mYWxsb2MuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvb3ZlcmZsb3cuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7dWFwaS9saW51eC9udGZzLmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7bGNuYWxsb2MuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O250ZnMuaCYjMzQ7CkBAIC0yMyw2ICYjNDM7MjUsNyBAQAogI2luY2x1ZGUgJiMzNDtpb21hcC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7Yml0bWFwLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt2b2x1bWUuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDttZnQuaCYjMzQ7CiAKICNpbmNsdWRlICZsdDtsaW51eC9maWxlbG9jay5oJmd0OwogCkBAIC04MzksNiAmIzQzOzg0Miw1MDQgQEAgc3RhdGljIGludCBudGZzX2lvY3RsX2ZpdHJpbShzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCwgdW5zaWduZWQgbG9uZyBhcmcpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MzsjZGVmaW5lIE5URlNfU1RSRUFNX01BWF9JTwkoMTYgKiAxMDI0ICogMTAyNCkgLyogMTZNQiBsaW1pdCAqLwomIzQzOwomIzQzOy8qCiYjNDM7ICogbnRmc19yZWFkX25hbWVkX3N0cmVhbSAtIFJlYWQgZGF0YSBmcm9tIGEgbmFtZWQgJERBVEEgc3RyZWFtLgomIzQzOyAqCiYjNDM7ICogQG5pOgkJTlRGUyBpbm9kZQomIzQzOyAqIEB1bmFtZToJU3RyZWFtIG5hbWUKJiM0MzsgKiBAdW5hbWVfbGVuOglMZW5ndGggb2YgbmFtZSBpbiBVbmljb2RlIGNoYXJhY3RlcnMKJiM0MzsgKiBAb2Zmc2V0OglCeXRlIG9mZnNldCBpbiB0aGUgc3RyZWFtCiYjNDM7ICogQGxlbjoJTnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQKJiM0MzsgKiBAZGF0YV9idWY6CUJ1ZmZlciB0byBjb3B5IGRhdGEgdG8KJiM0MzsgKgomIzQzOyAqIFJldHVybjoJMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS4KJiM0MzsgKgkJSWYgb2Zmc2V0ICZndDs9IHN0cmVhbSBzaXplLCByZXR1cm5zIDAuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBudGZzX3JlYWRfbmFtZWRfc3RyZWFtKHN0cnVjdCBudGZzX2lub2RlICpuaSwgX19sZTE2ICp1bmFtZSwKJiM0MzsJCXUzMiB1bmFtZV9sZW4sIHU2NCBvZmZzZXQsIHU2NCBsZW4sIHZvaWQgKmRhdGFfYnVmLAomIzQzOwkJdTY0ICpyYnl0ZXMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbnRmc19hdHRyX3NlYXJjaF9jdHggKmN0eDsKJiM0MzsJc3RydWN0IGlub2RlICphdHRyX3ZpOwomIzQzOwlpbnQgZXJyID0gMDsKJiM0MzsJdTY0IGRhdGFfc2l6ZTsKJiM0MzsJczY0IGJ5dGVzOwomIzQzOwljaGFyICpyYnVmID0gTlVMTDsKJiM0MzsKJiM0MzsJaWYgKCFuaSB8fCAhdW5hbWUgfHwgdW5hbWVfbGVuID09IDApCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJaWYgKGxlbiA9PSAwIHx8IGxlbiAmZ3Q7IE5URlNfU1RSRUFNX01BWF9JTykKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7bmktJmd0O21yZWNfbG9jayk7CiYjNDM7CWN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuaSwgTlVMTCk7CiYjNDM7CWlmICghY3R4KSB7CiYjNDM7CQltdXRleF91bmxvY2soJmFtcDtuaS0mZ3Q7bXJlY19sb2NrKTsKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiYjNDM7CiYjNDM7CWVyciA9IG50ZnNfYXR0cl9sb29rdXAoQVRfREFUQSwgdW5hbWUsIHVuYW1lX2xlbiwgQ0FTRV9TRU5TSVRJVkUsIDAsCiYjNDM7CQkJTlVMTCwgMCwgY3R4KTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gb3V0X2xvY2s7CiYjNDM7CiYjNDM7CWlmIChjdHgtJmd0O2F0dHItJmd0O25vbl9yZXNpZGVudCkKJiM0MzsJCWRhdGFfc2l6ZSA9IGxlNjRfdG9fY3B1KGN0eC0mZ3Q7YXR0ci0mZ3Q7ZGF0YS5ub25fcmVzaWRlbnQuZGF0YV9zaXplKTsKJiM0MzsJZWxzZQomIzQzOwkJZGF0YV9zaXplID0gbGUzMl90b19jcHUoY3R4LSZndDthdHRyLSZndDtkYXRhLnJlc2lkZW50LnZhbHVlX2xlbmd0aCk7CiYjNDM7CiYjNDM7CWlmIChvZmZzZXQgJmd0Oz0gZGF0YV9zaXplKSB7CiYjNDM7CQkqcmJ5dGVzID0gMDsKJiM0MzsJCS8qIEVPRjogbm90aGluZyB0byByZWFkICovCiYjNDM7CQlnb3RvIG91dF9sb2NrOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIEFkanVzdCBsZW5ndGggdG8gbm90IHJlYWQgYmV5b25kIEVPRiAqLwomIzQzOwlpZiAobGVuICZndDsgZGF0YV9zaXplIC0gb2Zmc2V0KQomIzQzOwkJbGVuID0gZGF0YV9zaXplIC0gb2Zmc2V0OwomIzQzOwomIzQzOwlhdHRyX3ZpID0gbnRmc19hdHRyX2lnZXQoVkZTX0kobmkpLCBBVF9EQVRBLCB1bmFtZSwgdW5hbWVfbGVuKTsKJiM0MzsJbnRmc19hdHRyX3B1dF9zZWFyY2hfY3R4KGN0eCk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO25pLSZndDttcmVjX2xvY2spOwomIzQzOwomIzQzOwlpZiAoSVNfRVJSKGF0dHJfdmkpKSB7CiYjNDM7CQllcnIgPSBQVFJfRVJSKGF0dHJfdmkpOwomIzQzOwkJZ290byBvdXRfZnJlZTsKJiM0MzsJfQomIzQzOwomIzQzOwlyYnVmID0ga3Z6YWxsb2MobGVuLCBHRlBfTk9GUyk7CiYjNDM7CWlmICghcmJ1ZikgewomIzQzOwkJZXJyID0gLUVOT01FTTsKJiM0MzsJCWlwdXQoYXR0cl92aSk7CiYjNDM7CQlnb3RvIG91dF9mcmVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CWJ5dGVzID0gbnRmc19pbm9kZV9hdHRyX3ByZWFkKGF0dHJfdmksIG9mZnNldCwgbGVuLCByYnVmKTsKJiM0MzsJaXB1dChhdHRyX3ZpKTsKJiM0MzsJaWYgKGJ5dGVzICZsdDsgMCkgewomIzQzOwkJZXJyID0gYnl0ZXM7CiYjNDM7CQlnb3RvIG91dF9mcmVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CSpyYnl0ZXMgPSBieXRlczsKJiM0MzsJbWVtY3B5KGRhdGFfYnVmLCByYnVmLCBieXRlcyk7CiYjNDM7CiYjNDM7b3V0X2ZyZWU6CiYjNDM7CWt2ZnJlZShyYnVmKTsKJiM0MzsJcmV0dXJuIGVycjsKJiM0MzsKJiM0MztvdXRfbG9jazoKJiM0MzsJbnRmc19hdHRyX3B1dF9zZWFyY2hfY3R4KGN0eCk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO25pLSZndDttcmVjX2xvY2spOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIG50ZnNfd3JpdGVfbmFtZWRfc3RyZWFtIC0gV3JpdGUgZGF0YSBmcm9tIGEgbmFtZWQgJERBVEEgc3RyZWFtLgomIzQzOyAqCiYjNDM7ICogQG5pOgkJTlRGUyBpbm9kZQomIzQzOyAqIEB1bmFtZToJU3RyZWFtIG5hbWUKJiM0MzsgKiBAdW5hbWVfbGVuOglMZW5ndGggb2YgbmFtZSBpbiBVbmljb2RlIGNoYXJhY3RlcnMKJiM0MzsgKiBAb2Zmc2V0OglCeXRlIG9mZnNldCBpbiB0aGUgc3RyZWFtCiYjNDM7ICogQGxlbjoJTnVtYmVyIG9mIGJ5dGVzIHRvIHdyaXRlCiYjNDM7ICogQGRhdGFfc3RyZWFtOiBEYXRhIHRvIHdyaXRlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46CTAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2UuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBudGZzX3dyaXRlX25hbWVkX3N0cmVhbShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIF9fbGUxNiAqdW5hbWUsCiYjNDM7CQl1MzIgdW5hbWVfbGVuLCB1NjQgb2Zmc2V0LCB1NjQgbGVuLCB2b2lkICpkYXRhX3N0cmVhbSwKJiM0MzsJCXU2NCAqd2J5dGVzKQomIzQzO3sKJiM0MzsJc3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHg7CiYjNDM7CXN0cnVjdCBpbm9kZSAqYXR0cl92aTsKJiM0MzsJaW50IGVycjsKJiM0MzsJczY0IGJ5dGVzOwomIzQzOwomIzQzOwlpZiAoIW5pIHx8ICF1bmFtZSB8fCB1bmFtZV9sZW4gPT0gMCB8fCAhZGF0YV9zdHJlYW0pCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJaWYgKGxlbiA9PSAwIHx8IGxlbiAmZ3Q7IE5URlNfU1RSRUFNX01BWF9JTykKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7bmktJmd0O21yZWNfbG9jayk7CiYjNDM7CWN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuaSwgTlVMTCk7CiYjNDM7CWlmICghY3R4KSB7CiYjNDM7CQllcnIgPSAtRU5PTUVNOwomIzQzOwkJZ290byBvdXRfdW5sb2NrOwomIzQzOwl9CiYjNDM7CiYjNDM7CWVyciA9IG50ZnNfYXR0cl9sb29rdXAoQVRfREFUQSwgdW5hbWUsIHVuYW1lX2xlbiwgQ0FTRV9TRU5TSVRJVkUsIDAsCiYjNDM7CQkJTlVMTCwgMCwgY3R4KTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJaWYgKGVyciAhPSAtRU5PRU5UKQomIzQzOwkJCWdvdG8gb3V0X3VubG9jazsKJiM0MzsJCWVyciA9IG50ZnNfYXR0cl9hZGQobmksIEFUX0RBVEEsIHVuYW1lLCB1bmFtZV9sZW4sIE5VTEwsIDApOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlnb3RvIG91dF91bmxvY2s7CiYjNDM7CQltYXJrX21mdF9yZWNvcmRfZGlydHkobmkpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWF0dHJfdmkgPSBudGZzX2F0dHJfaWdldChWRlNfSShuaSksIEFUX0RBVEEsIHVuYW1lLCB1bmFtZV9sZW4pOwomIzQzOwludGZzX2F0dHJfcHV0X3NlYXJjaF9jdHgoY3R4KTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7bmktJmd0O21yZWNfbG9jayk7CiYjNDM7CiYjNDM7CWlmIChJU19FUlIoYXR0cl92aSkpIHsKJiM0MzsJCWVyciA9IFBUUl9FUlIoYXR0cl92aSk7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwomIzQzOwlieXRlcyA9IG50ZnNfaW5vZGVfYXR0cl9wd3JpdGUoYXR0cl92aSwgb2Zmc2V0LCBsZW4sIGRhdGFfc3RyZWFtLAomIzQzOwkJCQkgICAgICAgZmFsc2UpOwomIzQzOwlpZiAoYnl0ZXMgJmx0OyAwKQomIzQzOwkJZXJyID0gYnl0ZXM7CiYjNDM7CWVsc2UKJiM0MzsJCSp3Ynl0ZXMgPSBieXRlczsKJiM0MzsJaXB1dChhdHRyX3ZpKTsKJiM0MzsKJiM0MztvdXQ6CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7CiYjNDM7b3V0X3VubG9jazoKJiM0MzsJaWYgKGN0eCkKJiM0MzsJCW50ZnNfYXR0cl9wdXRfc2VhcmNoX2N0eChjdHgpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtuaS0mZ3Q7bXJlY19sb2NrKTsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBudGZzX3JlbW92ZV9uYW1lZF9zdHJlYW0gLSBSZW1vdmUgYSBuYW1lZCAkREFUQSBzdHJlYW0uCiYjNDM7ICoKJiM0MzsgKiBAbmk6CQlOVEZTIGlub2RlCiYjNDM7ICogQHVuYW1lOglTdHJlYW0gbmFtZQomIzQzOyAqIEB1bmFtZV9sZW46CU5hbWUgbGVuZ3RoIGluIFVuaWNvZGUgY2hhcmFjdGVycwomIzQzOyAqCiYjNDM7ICogUmV0dXJuOgkwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yCiYjNDM7ICogICAgICAgICAgICAgIC1FTk9FTlQgaWYgc3RyZWFtIG5vdCBmb3VuZAomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgbnRmc19yZW1vdmVfbmFtZWRfc3RyZWFtKHN0cnVjdCBudGZzX2lub2RlICpuaSwgX19sZTE2ICp1bmFtZSwKJiM0MzsJCXUzMiB1bmFtZV9sZW4pCiYjNDM7ewomIzQzOwlpZiAoIW5pIHx8ICF1bmFtZSB8fCB1bmFtZV9sZW4gPT0gMCkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlyZXR1cm4gbnRmc19hdHRyX3JlbW92ZShuaSwgQVRfREFUQSwgdW5hbWUsIHVuYW1lX2xlbik7CiYjNDM7fQomIzQzOwomIzQzO2VudW0gbnRmc19zdHJlYW1fb3AgewomIzQzOwlOVEZTX1NUUkVBTV9PUF9SRUFELAomIzQzOwlOVEZTX1NUUkVBTV9PUF9XUklURSwKJiM0MzsJTlRGU19TVFJFQU1fT1BfUkVNT1ZFLAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGxvbmcgbnRmc19pb2N0bF9zdHJlYW0oc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYXJnLAomIzQzOwkJCSAgICAgIGVudW0gbnRmc19zdHJlYW1fb3Agb3ApCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShmaWxwKTsKJiM0MzsJc3RydWN0IG50ZnNfaW5vZGUgKm5pID0gTlRGU19JKGlub2RlKTsKJiM0MzsJc3RydWN0IG50ZnNfc3RyZWFtIF9fdXNlciAqdXJlcSA9CiYjNDM7CQkoc3RydWN0IG50ZnNfc3RyZWFtIF9fdXNlciAqKWFyZzsKJiM0MzsJc3RydWN0IG50ZnNfc3RyZWFtICpyZXE7CiYjNDM7CXNpemVfdCBoZWFkZXJfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgbnRmc19zdHJlYW0pOwomIzQzOwlzaXplX3QgZGF0YV9zaXplLCB0b3RhbF9zaXplOwomIzQzOwljaGFyICprbmFtZSwgKmtkYXRhOwomIzQzOwlfX2xlMTYgKnVuYW1lID0gTlVMTCwgKnNuYW1lOwomIzQzOwlpbnQgZXJyID0gMCwgc25hbWVfbGVuOwomIzQzOwlib29sIHV0ZjE2OwomIzQzOwlzdHJ1Y3QgbnRmc19zdHJlYW0gaGRyOwomIzQzOwomIzQzOwkvKiBGaXJzdCBjb3B5IGZpeGVkIGhlYWRlciAqLwomIzQzOwlpZiAoY29weV9mcm9tX3VzZXIoJmFtcDtoZHIsIHVyZXEsIGhlYWRlcl9zaXplKSkKJiM0MzsJCXJldHVybiAtRUZBVUxUOwomIzQzOwomIzQzOwlpZiAoaGRyLmlvX2xlbiAmZ3Q7IE5URlNfU1RSRUFNX01BWF9JTyB8fAomIzQzOwkgICAgKGhkci5mbGFncyAmYW1wOyB+TlRGU19TVFJFQU1fRkxfVVRGMTYpIHx8IGhkci5yZXNlcnZlZCkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwl1dGYxNiA9IGhkci5mbGFncyAmYW1wOyBOVEZTX1NUUkVBTV9GTF9VVEYxNjsKJiM0MzsKJiM0MzsJaWYgKGhkci5uYW1lX2xlbiA9PSAwKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CWlmICh1dGYxNikgewomIzQzOwkJLyogVVRGLTE2TEUgYnl0ZSBjb3VudDogbXVzdCBiZSBldmVuIGFuZCB3aXRoaW4gdGhlIGxpbWl0LiAqLwomIzQzOwkJaWYgKChoZHIubmFtZV9sZW4gJmFtcDsgMSkgfHwKJiM0MzsJCSAgICBoZHIubmFtZV9sZW4gJmd0OyBOVEZTX01BWF9OQU1FX0xFTiAqIHNpemVvZihfX2xlMTYpKQomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9IGVsc2UgaWYgKGhkci5uYW1lX2xlbiAmZ3Q7IE5URlNfTUFYX05BTUVfTEVOKSB7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlzd2l0Y2ggKG9wKSB7CiYjNDM7CWNhc2UgTlRGU19TVFJFQU1fT1BfUkVBRDoKJiM0MzsJCWlmICghKGZpbHAtJmd0O2ZfbW9kZSAmYW1wOyBGTU9ERV9SRUFEKSB8fCBoZHIuaW9fbGVuID09IDApCiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQlkYXRhX3NpemUgPSBoZHIuaW9fbGVuOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgTlRGU19TVFJFQU1fT1BfV1JJVEU6CiYjNDM7CQlpZiAoIShmaWxwLSZndDtmX21vZGUgJmFtcDsgRk1PREVfV1JJVEUpIHx8IGhkci5pb19sZW4gPT0gMCkKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCWRhdGFfc2l6ZSA9IGhkci5pb19sZW47CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBOVEZTX1NUUkVBTV9PUF9SRU1PVkU6CiYjNDM7CQlpZiAoIShmaWxwLSZndDtmX21vZGUgJmFtcDsgRk1PREVfV1JJVEUpIHx8IGhkci5pb19sZW4gIT0gMCkKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCWRhdGFfc2l6ZSA9IDA7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAtRU5PVFRZOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChjaGVja19hZGRfb3ZlcmZsb3coaGVhZGVyX3NpemUsIChzaXplX3QpaGRyLm5hbWVfbGVuLCAmYW1wO3RvdGFsX3NpemUpIHx8CiYjNDM7CSAgICBjaGVja19hZGRfb3ZlcmZsb3codG90YWxfc2l6ZSwgZGF0YV9zaXplLCAmYW1wO3RvdGFsX3NpemUpKQomIzQzOwkJcmV0dXJuIC1FT1ZFUkZMT1c7CiYjNDM7CiYjNDM7CXJlcSA9IG1lbWR1cF91c2VyKHVyZXEsIHRvdGFsX3NpemUpOwomIzQzOwlpZiAoSVNfRVJSKHJlcSkpCiYjNDM7CQlyZXR1cm4gUFRSX0VSUihyZXEpOwomIzQzOwomIzQzOwlyZXEtJmd0O2J5dGVzX3JldHVybmVkID0gMDsKJiM0MzsKJiM0MzsJa25hbWUgPSAoY2hhciAqKXJlcS0mZ3Q7YnVmZmVyOwomIzQzOwlrZGF0YSA9IChjaGFyICopcmVxLSZndDtidWZmZXIgJiM0MzsgcmVxLSZndDtuYW1lX2xlbjsKJiM0MzsKJiM0MzsJaWYgKHJlcS0mZ3Q7bmFtZV9sZW4gIT0gaGRyLm5hbWVfbGVuIHx8IHJlcS0mZ3Q7aW9fbGVuICE9IGhkci5pb19sZW4gfHwKJiM0MzsJICAgIHJlcS0mZ3Q7ZmxhZ3MgIT0gaGRyLmZsYWdzIHx8IHJlcS0mZ3Q7cmVzZXJ2ZWQpIHsKJiM0MzsJCWVyciA9IC1FSU5WQUw7CiYjNDM7CQlnb3RvIG91dF9mcmVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICh1dGYxNikgewomIzQzOwkJLyogTmFtZSBpcyBhbHJlYWR5IG9uLWRpc2sgVVRGLTE2TEU7IHVzZSBpdCBpbiBwbGFjZS4gKi8KJiM0MzsJCXNuYW1lID0gKF9fbGUxNiAqKWtuYW1lOwomIzQzOwkJc25hbWVfbGVuID0gcmVxLSZndDtuYW1lX2xlbiAvIHNpemVvZihfX2xlMTYpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJaWYgKG1lbWNocihrbmFtZSwgJiMzOTtcMCYjMzk7LCByZXEtJmd0O25hbWVfbGVuKSkgewomIzQzOwkJCWVyciA9IC1FSU5WQUw7CiYjNDM7CQkJZ290byBvdXRfZnJlZTsKJiM0MzsJCX0KJiM0MzsJCXNuYW1lX2xlbiA9IG50ZnNfbmxzdG91Y3MobmktJmd0O3ZvbCwga25hbWUsIHJlcS0mZ3Q7bmFtZV9sZW4sCiYjNDM7CQkJCSZhbXA7dW5hbWUsIE5URlNfTUFYX05BTUVfTEVOKTsKJiM0MzsJCWlmIChzbmFtZV9sZW4gJmx0OyAwKSB7CiYjNDM7CQkJZXJyID0gc25hbWVfbGVuOwomIzQzOwkJCWdvdG8gb3V0X2ZyZWU7CiYjNDM7CQl9CiYjNDM7CQlzbmFtZSA9IHVuYW1lOwomIzQzOwl9CiYjNDM7CiYjNDM7CXN3aXRjaCAob3ApIHsKJiM0MzsJY2FzZSBOVEZTX1NUUkVBTV9PUF9SRUFEOgomIzQzOwkJZXJyID0gbnRmc19yZWFkX25hbWVkX3N0cmVhbShuaSwgc25hbWUsIHNuYW1lX2xlbiwKJiM0MzsJCQkJCSAgICAgcmVxLSZndDtzdHJlYW1fb2Zmc2V0LCByZXEtJmd0O2lvX2xlbiwKJiM0MzsJCQkJCSAgICAga2RhdGEsCiYjNDM7CQkJCQkgICAgICZhbXA7cmVxLSZndDtieXRlc19yZXR1cm5lZCk7CiYjNDM7CQlpZiAoIWVycikgewomIzQzOwkJCWlmIChjb3B5X3RvX3VzZXIodXJlcSwgcmVxLAomIzQzOwkJCQkJaGVhZGVyX3NpemUgJiM0MzsgcmVxLSZndDtuYW1lX2xlbiAmIzQzOyByZXEtJmd0O2J5dGVzX3JldHVybmVkKSkKJiM0MzsJCQkJZXJyID0gLUVGQVVMVDsKJiM0MzsJCX0KJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIE5URlNfU1RSRUFNX09QX1dSSVRFOgomIzQzOwkJZXJyID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxwKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CQllcnIgPSBudGZzX3dyaXRlX25hbWVkX3N0cmVhbShuaSwgc25hbWUsIHNuYW1lX2xlbiwKJiM0MzsJCQkJCSAgICAgIHJlcS0mZ3Q7c3RyZWFtX29mZnNldCwgcmVxLSZndDtpb19sZW4sCiYjNDM7CQkJCQkgICAgICBrZGF0YSwKJiM0MzsJCQkJCSAgICAgICZhbXA7cmVxLSZndDtieXRlc19yZXR1cm5lZCk7CiYjNDM7CQltbnRfZHJvcF93cml0ZV9maWxlKGZpbHApOwomIzQzOwkJaWYgKCFlcnIpIHsKJiM0MzsJCQlpZiAoY29weV90b191c2VyKCZhbXA7dXJlcS0mZ3Q7Ynl0ZXNfcmV0dXJuZWQsCiYjNDM7CQkJCQkgJmFtcDtyZXEtJmd0O2J5dGVzX3JldHVybmVkLAomIzQzOwkJCQkJIHNpemVvZihyZXEtJmd0O2J5dGVzX3JldHVybmVkKSkpCiYjNDM7CQkJCWVyciA9IC1FRkFVTFQ7CiYjNDM7CQl9CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBOVEZTX1NUUkVBTV9PUF9SRU1PVkU6CiYjNDM7CQllcnIgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbHApOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlicmVhazsKJiM0MzsJCWVyciA9IG50ZnNfcmVtb3ZlX25hbWVkX3N0cmVhbShuaSwgc25hbWUsIHNuYW1lX2xlbik7CiYjNDM7CQltbnRfZHJvcF93cml0ZV9maWxlKGZpbHApOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQllcnIgPSAtRU5PVFRZOwomIzQzOwl9CiYjNDM7CiYjNDM7b3V0X2ZyZWU6CiYjNDM7CWlmICh1bmFtZSkKJiM0MzsJCWttZW1fY2FjaGVfZnJlZShudGZzX25hbWVfY2FjaGUsIHVuYW1lKTsKJiM0MzsJa2ZyZWUocmVxKTsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBudGZzX2lvY3RsX2xpc3Rfc3RyZWFtcyhzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhcmcpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShmaWxwKTsKJiM0MzsJc3RydWN0IG50ZnNfaW5vZGUgKm5pID0gTlRGU19JKGlub2RlKTsKJiM0MzsJc3RydWN0IG50ZnNfbGlzdF9zdHJlYW1zIGhkcjsKJiM0MzsJc3RydWN0IG50ZnNfc3RyZWFtX2VudHJ5ICplbnRyeSwgKmxhc3RfZW50cnkgPSBOVUxMOwomIzQzOwlzaXplX3QgcmVxdWlyZWQgPSAwOwomIzQzOwl2b2lkICprYnVmID0gTlVMTDsKJiM0MzsJdm9pZCBfX3VzZXIgKnVidWY7CiYjNDM7CXN0cnVjdCBhdHRyX3JlY29yZCAqYTsKJiM0MzsJc3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICphY3R4OwomIzQzOwlpbnQgcmV0ID0gMCwgZXJyLCBjb3VudCA9IDA7CiYjNDM7CXNpemVfdCBlbnRyeV9zaXplLCBvZmZzZXQgPSAwOwomIzQzOwl1bnNpZ25lZCBpbnQgbmFtZV9sZW47CiYjNDM7CXVuc2lnbmVkIGNoYXIgKnNuOwomIzQzOwlib29sIHV0ZjE2OwomIzQzOwomIzQzOwlpZiAoY29weV9mcm9tX3VzZXIoJmFtcDtoZHIsICh2b2lkIF9fdXNlciAqKWFyZywgc2l6ZW9mKGhkcikpKQomIzQzOwkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CiYjNDM7CWlmICgoaGRyLmZsYWdzICZhbXA7IH5OVEZTX1NUUkVBTV9GTF9VVEYxNikgfHwgaGRyLnJlc2VydmVkKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CXV0ZjE2ID0gaGRyLmZsYWdzICZhbXA7IE5URlNfU1RSRUFNX0ZMX1VURjE2OwomIzQzOwomIzQzOwl1YnVmID0gKHZvaWQgX191c2VyICopYXJnICYjNDM7IHNpemVvZihoZHIpOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7bmktJmd0O21yZWNfbG9jayk7CiYjNDM7CWFjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIE5VTEwpOwomIzQzOwlpZiAoIWFjdHgpIHsKJiM0MzsJCW11dGV4X3VubG9jaygmYW1wO25pLSZndDttcmVjX2xvY2spOwomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CX0KJiM0MzsKJiM0MzsJd2hpbGUgKChlcnIgPSBudGZzX2F0dHJzX3dhbGsoYWN0eCkpID09IDApIHsKJiM0MzsJCWEgPSBhY3R4LSZndDthdHRyOwomIzQzOwkJaWYgKGEtJmd0O3R5cGUgIT0gQVRfREFUQSB8fCAhYS0mZ3Q7bmFtZV9sZW5ndGgpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlpZiAodXRmMTYpIHsKJiM0MzsJCQluYW1lX2xlbiA9IGEtJmd0O25hbWVfbGVuZ3RoICogc2l6ZW9mKF9fbGUxNik7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCXNuID0gbnRmc19hdHRyX25hbWVfZ2V0KG5pLSZndDt2b2wsCiYjNDM7CQkJCQkoX19sZTE2ICopKCh1OCAqKWEgJiM0MzsgbGUxNl90b19jcHUoYS0mZ3Q7bmFtZV9vZmZzZXQpKSwKJiM0MzsJCQkJCWEtJmd0O25hbWVfbGVuZ3RoKTsKJiM0MzsJCQlpZiAoIXNuKSB7CiYjNDM7CQkJCXJldCA9IC1FSU87CiYjNDM7CQkJCWdvdG8gb3V0OwomIzQzOwkJCX0KJiM0MzsJCQluYW1lX2xlbiA9IHN0cmxlbihzbik7CiYjNDM7CQkJbnRmc19hdHRyX25hbWVfZnJlZSgmYW1wO3NuKTsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWVudHJ5X3NpemUgPSBzaXplb2YoKmVudHJ5KSAmIzQzOyBuYW1lX2xlbjsKJiM0MzsJCWVudHJ5X3NpemUgPSBBTElHTihlbnRyeV9zaXplLCA4KTsKJiM0MzsKJiM0MzsJCWlmIChyZXF1aXJlZCAmZ3Q7IFNJWkVfTUFYIC0gZW50cnlfc2l6ZSkgewomIzQzOwkJCXJldCA9IC1FT1ZFUkZMT1c7CiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CQl9CiYjNDM7CQlyZXF1aXJlZCAmIzQzOz0gZW50cnlfc2l6ZTsKJiM0MzsJCWNvdW50JiM0MzsmIzQzOzsKJiM0MzsJfQomIzQzOwlpZiAoZXJyICE9IC1FTk9FTlQpIHsKJiM0MzsJCXJldCA9IGVycjsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWhkci5zdHJlYW1fY291bnQgPSBjb3VudDsKJiM0MzsJaGRyLmJ5dGVzX3JldHVybmVkID0gcmVxdWlyZWQ7CiYjNDM7CiYjNDM7CWlmICghY291bnQpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJaWYgKGhkci5idWZmZXJfc2l6ZSAmbHQ7IHJlcXVpcmVkKSB7CiYjNDM7CQlyZXQgPSAtRU5PU1BDOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJa2J1ZiA9IGt2emFsbG9jKHJlcXVpcmVkLCBHRlBfTk9GUyk7CiYjNDM7CWlmICgha2J1ZikgewomIzQzOwkJcmV0ID0gLUVOT01FTTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CW50ZnNfYXR0cl9yZWluaXRfc2VhcmNoX2N0eChhY3R4KTsKJiM0MzsJd2hpbGUgKChlcnIgPSBudGZzX2F0dHJzX3dhbGsoYWN0eCkpID09IDApIHsKJiM0MzsJCWEgPSBhY3R4LSZndDthdHRyOwomIzQzOwkJaWYgKGEtJmd0O3R5cGUgIT0gQVRfREFUQSB8fCAhYS0mZ3Q7bmFtZV9sZW5ndGgpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CQlpZiAodXRmMTYpIHsKJiM0MzsJCQlzbiA9IE5VTEw7CiYjNDM7CQkJbmFtZV9sZW4gPSBhLSZndDtuYW1lX2xlbmd0aCAqIHNpemVvZihfX2xlMTYpOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlzbiA9IG50ZnNfYXR0cl9uYW1lX2dldChuaS0mZ3Q7dm9sLAomIzQzOwkJCQkJKF9fbGUxNiAqKSgodTggKilhICYjNDM7IGxlMTZfdG9fY3B1KGEtJmd0O25hbWVfb2Zmc2V0KSksCiYjNDM7CQkJCQlhLSZndDtuYW1lX2xlbmd0aCk7CiYjNDM7CQkJaWYgKCFzbikgewomIzQzOwkJCQlyZXQgPSAtRUlPOwomIzQzOwkJCQlnb3RvIG91dDsKJiM0MzsJCQl9CiYjNDM7CQkJbmFtZV9sZW4gPSBzdHJsZW4oc24pOwomIzQzOwkJfQomIzQzOwomIzQzOwkJZW50cnlfc2l6ZSA9IHNpemVvZigqZW50cnkpICYjNDM7IG5hbWVfbGVuOwomIzQzOwkJZW50cnlfc2l6ZSA9IEFMSUdOKGVudHJ5X3NpemUsIDgpOwomIzQzOwkJaWYgKG9mZnNldCAmZ3Q7IHJlcXVpcmVkIC0gZW50cnlfc2l6ZSkgewomIzQzOwkJCXJldCA9IC1FT1ZFUkZMT1c7CiYjNDM7CQkJbnRmc19hdHRyX25hbWVfZnJlZSgmYW1wO3NuKTsKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWVudHJ5ID0gKHN0cnVjdCBudGZzX3N0cmVhbV9lbnRyeSAqKShrYnVmICYjNDM7IG9mZnNldCk7CiYjNDM7CiYjNDM7CQlpZiAoYS0mZ3Q7bm9uX3Jlc2lkZW50KSB7CiYjNDM7CQkJZW50cnktJmd0O3NpemUgPSBsZTY0X3RvX2NwdShhLSZndDtkYXRhLm5vbl9yZXNpZGVudC5kYXRhX3NpemUpOwomIzQzOwkJCWVudHJ5LSZndDthbGxvY19zaXplID0KJiM0MzsJCQkJbGU2NF90b19jcHUoYS0mZ3Q7ZGF0YS5ub25fcmVzaWRlbnQuYWxsb2NhdGVkX3NpemUpOwomIzQzOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQllbnRyeS0mZ3Q7c2l6ZSA9IGxlMzJfdG9fY3B1KGEtJmd0O2RhdGEucmVzaWRlbnQudmFsdWVfbGVuZ3RoKTsKJiM0MzsJCQllbnRyeS0mZ3Q7YWxsb2Nfc2l6ZSA9IGxlMzJfdG9fY3B1KGEtJmd0O2xlbmd0aCkgLQomIzQzOwkJCQlsZTE2X3RvX2NwdShhLSZndDtkYXRhLnJlc2lkZW50LnZhbHVlX29mZnNldCk7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQllbnRyeS0mZ3Q7bmFtZV9sZW4gPSBuYW1lX2xlbjsKJiM0MzsJCWlmICh1dGYxNikKJiM0MzsJCQltZW1jcHkoZW50cnktJmd0O25hbWUsCiYjNDM7CQkJICAgICAgICh1OCAqKWEgJiM0MzsgbGUxNl90b19jcHUoYS0mZ3Q7bmFtZV9vZmZzZXQpLCBuYW1lX2xlbik7CiYjNDM7CQllbHNlCiYjNDM7CQkJbWVtY3B5KGVudHJ5LSZndDtuYW1lLCBzbiwgbmFtZV9sZW4pOwomIzQzOwkJbnRmc19hdHRyX25hbWVfZnJlZSgmYW1wO3NuKTsKJiM0MzsKJiM0MzsJCWVudHJ5LSZndDtuZXh0X2VudHJ5X29mZiA9IGVudHJ5X3NpemU7CiYjNDM7CQlsYXN0X2VudHJ5ID0gZW50cnk7CiYjNDM7CQlvZmZzZXQgJiM0Mzs9IGVudHJ5X3NpemU7CiYjNDM7CX0KJiM0MzsJaWYgKGVyciAhPSAtRU5PRU5UKSB7CiYjNDM7CQlyZXQgPSBlcnI7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQkvKiBUaGUgY2hhaW4gdGVybWluYXRlcyBhdCB0aGUgbGFzdCBlbnRyeS4gKi8KJiM0MzsJCWlmIChsYXN0X2VudHJ5KQomIzQzOwkJCWxhc3RfZW50cnktJmd0O25leHRfZW50cnlfb2ZmID0gMDsKJiM0MzsJCWhkci5ieXRlc19yZXR1cm5lZCA9IG9mZnNldDsKJiM0MzsJfQomIzQzOwomIzQzO291dDoKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7bmktJmd0O21yZWNfbG9jayk7CiYjNDM7CW50ZnNfYXR0cl9wdXRfc2VhcmNoX2N0eChhY3R4KTsKJiM0MzsKJiM0MzsJaWYgKHJldCAmYW1wOyZhbXA7IHJldCAhPSAtRU5PU1BDKQomIzQzOwkJZ290byBvdXRfZnJlZTsKJiM0MzsKJiM0MzsJaWYgKCFyZXQgJmFtcDsmYW1wOyBrYnVmICZhbXA7JmFtcDsgY29weV90b191c2VyKHVidWYsIGtidWYsIGhkci5ieXRlc19yZXR1cm5lZCkpIHsKJiM0MzsJCXJldCA9IC1FRkFVTFQ7CiYjNDM7CQlnb3RvIG91dF9mcmVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLCAmYW1wO2hkciwgc2l6ZW9mKGhkcikpKQomIzQzOwkJcmV0ID0gLUVGQVVMVDsKJiM0MzsKJiM0MztvdXRfZnJlZToKJiM0MzsJa3ZmcmVlKGtidWYpOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKIGxvbmcgbnRmc19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJc3dpdGNoIChjbWQpIHsKQEAgLTg1MCw2ICYjNDM7MTM1MSwxNCBAQCBsb25nIG50ZnNfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogCQlyZXR1cm4gbnRmc19pb2N0bF9zZXRfdm9sdW1lX2xhYmVsKGZpbHAsIGFyZyk7CiAJY2FzZSBGSVRSSU06CiAJCXJldHVybiBudGZzX2lvY3RsX2ZpdHJpbShOVEZTX1NCKGZpbGVfaW5vZGUoZmlscCktJmd0O2lfc2IpLCBhcmcpOwomIzQzOwljYXNlIE5URlNfSU9DX1NUUkVBTV9SRUFEOgomIzQzOwkJcmV0dXJuIG50ZnNfaW9jdGxfc3RyZWFtKGZpbHAsIGFyZywgTlRGU19TVFJFQU1fT1BfUkVBRCk7CiYjNDM7CWNhc2UgTlRGU19JT0NfU1RSRUFNX1dSSVRFOgomIzQzOwkJcmV0dXJuIG50ZnNfaW9jdGxfc3RyZWFtKGZpbHAsIGFyZywgTlRGU19TVFJFQU1fT1BfV1JJVEUpOwomIzQzOwljYXNlIE5URlNfSU9DX1NUUkVBTV9SRU1PVkU6CiYjNDM7CQlyZXR1cm4gbnRmc19pb2N0bF9zdHJlYW0oZmlscCwgYXJnLCBOVEZTX1NUUkVBTV9PUF9SRU1PVkUpOwomIzQzOwljYXNlIE5URlNfSU9DX0xJU1RfU1RSRUFNUzoKJiM0MzsJCXJldHVybiBudGZzX2lvY3RsX2xpc3Rfc3RyZWFtcyhmaWxwLCBhcmcpOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRU5PVFRZOwogCX0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9udGZzLmggYi9pbmNsdWRlL3VhcGkvbGludXgvbnRmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmE1NzgzZGMzYjkwNTQKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvbnRmcy5oCkBAIC0wLDAgJiM0MzsxLDExNSBAQAomIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIFdJVEggTGludXgtc3lzY2FsbC1ub3RlICovCiYjNDM7LyoKJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjYgTEcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCiYjNDM7ICovCiYjNDM7CiYjNDM7I2lmbmRlZiBfVUFQSV9MSU5VWF9OVEZTX0gKJiM0MzsjZGVmaW5lIF9VQVBJX0xJTlVYX05URlNfSAomIzQzOyNpbmNsdWRlICZsdDtsaW51eC90eXBlcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pb2N0bC5oJmd0OwomIzQzOwomIzQzOyNkZWZpbmUgTlRGU19JT0NfTUFHSUMJMHhFRgomIzQzOwomIzQzOy8qCiYjNDM7ICogRmxhZ3MgZm9yIG50ZnNfc3RyZWFtLmZsYWdzIGFuZCBudGZzX2xpc3Rfc3RyZWFtcy5mbGFncy4KJiM0MzsgKgomIzQzOyAqIFRoZSBzdHJlYW0gbmFtZSBpcyByYXcgVVRGLTE2TEUsIGV4YWN0bHkgYXMgc3RvcmVkIG9uIGRpc2ssIGluc3RlYWQgb2YKJiM0MzsgKiBiZWluZyBlbmNvZGVkIHdpdGggdGhlIG1vdW50ZWQgZmlsZXN5c3RlbSBOTFMuIFRoaXMgYWxsb3dzIGxvc3NsZXNzCiYjNDM7ICogcm91bmQtdHJpcHBpbmcgb2Ygc3RyZWFtIG5hbWVzIHdob3NlIGNoYXJhY3RlcnMgYXJlIG5vdCByZXByZXNlbnRhYmxlCiYjNDM7ICogaW4gdGhlIG1vdW50IE5MUyAoZS5nLiBmb3IgV2luZSwgd2hpY2ggd29ya3MgaW4gVVRGLTE2IG5hdGl2ZWx5KS4KJiM0MzsgKiBXaGVuIHNldCwgdGhlIG5hbWUgbGVuZ3RoIGZpZWxkcyBjb3VudCBieXRlcyBvZiBVVEYtMTZMRSBhbmQgbXVzdAomIzQzOyAqIHRoZXJlZm9yZSBiZSBldmVuLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgTlRGU19TVFJFQU1fRkxfVVRGMTYJMHgxCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBudGZzIG5hbWVkIHN0cmVhbSBpb2N0bCBzdHJ1Y3R1cmUuCiYjNDM7ICoKJiM0MzsgKiBAc3RyZWFtX29mZnNldDoJT2Zmc2V0IHdpdGhpbiB0aGUgbmFtZWQgc3RyZWFtLgomIzQzOyAqIEBpb19sZW46CQlOdW1iZXIgb2YgYnl0ZXMgdG8gcmVhZC93cml0ZS4KJiM0MzsgKiBAYnl0ZXNfcmV0dXJuZWQ6CUFjdHVhbCBieXRlcyB0cmFuc2ZlcnJlZCAob3V0KS4KJiM0MzsgKiBAbmFtZV9sZW46CQlTdHJlYW0gbmFtZSBsZW5ndGggaW4gYnl0ZXMsIG5vdCBpbmNsdWRpbmcgYW55CiYjNDM7ICoJCQl0ZXJtaW5hdGluZyBOVUwgKHdoaWNoIG11c3Qgbm90IGJlIHByZXNlbnQpLiBXaGVuCiYjNDM7ICoJCQlOVEZTX1NUUkVBTV9GTF9VVEYxNiBpcyBzZXQgdGhpcyBpcyBhIFVURi0xNkxFIGJ5dGUKJiM0MzsgKgkJCWNvdW50IGFuZCBtdXN0IGJlIGV2ZW4uCiYjNDM7ICogQGZsYWdzOgkJQml0IG1hc2sgb2YgTlRGU19TVFJFQU1fRkxfKiBmbGFncy4gb3RoZXIgYml0cyBtdXN0IGJlCiYjNDM7ICoJCQl6ZXJvLgomIzQzOyAqIEByZXNlcnZlZDoJCU11c3QgYmUgemVyby4KJiM0MzsgKiBAYnVmZmVyOgkJU3RyZWFtIG5hbWUgZm9sbG93ZWQgYnkgc3RyZWFtIGRhdGEuCiYjNDM7ICoKJiM0MzsgKiBUaGUgc3RyZWFtIG5hbWUgaXMgdGhlIGJhcmUgc3RyZWFtIG5hbWUsIHdpdGhvdXQgdGhlIGxlYWRpbmcgJiMzOTs6JiMzOTsgb3IgdGhlCiYjNDM7ICogdHJhaWxpbmcgJiMzNDs6JERBVEEmIzM0OyBkZWNvcmF0aW9uIHVzZWQgYnkgV2luZG93cy4gQnkgZGVmYXVsdCBpdCBpcyBlbmNvZGVkIHdpdGgKJiM0MzsgKiB0aGUgbW91bnRlZCBmaWxlc3lzdGVtIE5MUy4gSWYgTlRGU19TVFJFQU1fRkxfVVRGMTYgaXMgc2V0IGluIEBmbGFncyBpdCBpcwomIzQzOyAqIHJhdyBVVEYtMTZMRSBpbnN0ZWFkLiBGb3IgcmVhZCBhbmQgd3JpdGUsIEBpb19sZW4gYnl0ZXMgb2YgZGF0YSBmb2xsb3cgdGhlCiYjNDM7ICogbmFtZS4gRm9yIHJlbW92ZSwgb25seSB0aGUgbmFtZSBpcyByZXF1aXJlZCBhbmQgQGlvX2xlbiBtdXN0IGJlIHplcm8uCiYjNDM7ICovCiYjNDM7c3RydWN0IG50ZnNfc3RyZWFtIHsKJiM0MzsJX19hbGlnbmVkX3U2NCBzdHJlYW1fb2Zmc2V0OwomIzQzOwlfX2FsaWduZWRfdTY0IGlvX2xlbjsKJiM0MzsJX19hbGlnbmVkX3U2NCBieXRlc19yZXR1cm5lZDsKJiM0MzsJX191MzIgbmFtZV9sZW47CiYjNDM7CV9fdTMyIGZsYWdzOwomIzQzOwlfX2FsaWduZWRfdTY0IHJlc2VydmVkOwomIzQzOwlfX3U4IGJ1ZmZlcltdOyAvKiBuYW1lICYjNDM7IGRhdGEgKi8KJiM0Mzt9OwomIzQzOwomIzQzOy8qCiYjNDM7ICogU2luZ2xlIHN0cmVhbSBlbnRyeSByZXR1cm5lZCBieSBOVEZTX0lPQ19MSVNUX1NUUkVBTVMuCiYjNDM7ICoKJiM0MzsgKiBAbmV4dF9lbnRyeV9vZmY6CUJ5dGUgb2Zmc2V0IGZyb20gdGhlIHN0YXJ0IG9mIHRoaXMgZW50cnkgdG8gdGhlIG5leHQKJiM0MzsgKgkJCWVudHJ5LCBvciB6ZXJvIGZvciB0aGUgbGFzdCBlbnRyeS4gQWx3YXlzIGEgbXVsdGlwbGUKJiM0MzsgKgkJCW9mIDguIENvbnN1bWVycyBtdXN0IHVzZSB0aGlzIHRvIGFkdmFuY2UgaW5zdGVhZCBvZgomIzQzOyAqCQkJY29tcHV0aW5nIHRoZSBzdHJpZGUgdGhlbXNlbHZlcywgc28gdGhlIGVudHJ5IGNhbiBncm93CiYjNDM7ICoJCQluZXcgZmllbGRzIHdpdGhvdXQgYnJlYWtpbmcgdGhlIEFCSS4KJiM0MzsgKiBAc2l6ZToJCVN0cmVhbSBkYXRhIHNpemUgaW4gYnl0ZXMuCiYjNDM7ICogQGFsbG9jX3NpemU6CQlCeXRlcyBhbGxvY2F0ZWQgZm9yIHRoZSBzdHJlYW0gKGNsdXN0ZXIgYWxpZ25lZCBmb3IKJiM0MzsgKgkJCW5vbi1yZXNpZGVudCBzdHJlYW1zKS4KJiM0MzsgKiBAbmFtZV9sZW46CQlTdHJlYW0gbmFtZSBsZW5ndGggaW4gYnl0ZXMsIG5vdCBpbmNsdWRpbmcgYSBOVUwKJiM0MzsgKgkJCXRlcm1pbmF0b3IgKG5vbmUgaXMgc3RvcmVkKS4gQ291bnRzIFVURi0xNkxFIGJ5dGVzCiYjNDM7ICoJCQl3aGVuIE5URlNfU1RSRUFNX0ZMX1VURjE2IHdhcyByZXF1ZXN0ZWQuCiYjNDM7ICogQHJlc2VydmVkOgkJTXVzdCBiZSB6ZXJvLgomIzQzOyAqIEBuYW1lOgkJQmFyZSBzdHJlYW0gbmFtZTsgTkxTIGVuY29kZWQsIG9yIHJhdyBVVEYtMTZMRSB3aGVuCiYjNDM7ICoJCQlOVEZTX1NUUkVBTV9GTF9VVEYxNiB3YXMgcmVxdWVzdGVkIChzZWUgc3RydWN0CiYjNDM7ICoJCQludGZzX3N0cmVhbSkuCiYjNDM7ICovCiYjNDM7c3RydWN0IG50ZnNfc3RyZWFtX2VudHJ5IHsKJiM0MzsJX19hbGlnbmVkX3U2NCBuZXh0X2VudHJ5X29mZjsKJiM0MzsJX19hbGlnbmVkX3U2NCBzaXplOwomIzQzOwlfX2FsaWduZWRfdTY0IGFsbG9jX3NpemU7CiYjNDM7CV9fdTMyIG5hbWVfbGVuOwomIzQzOwlfX3UzMiByZXNlcnZlZDsKJiM0MzsJX191OCBuYW1lW107CiYjNDM7fTsKJiM0MzsKJiM0MzsvKgomIzQzOyAqIG50ZnMgbGlzdCBzdHJlYW1zIGlvY3RsIHN0cnVjdHVyZS4KJiM0MzsgKgomIzQzOyAqIEBidWZmZXJfc2l6ZToJdXNlciBidWZmZXIgc2l6ZShpbikuCiYjNDM7ICogQGJ5dGVzX3JldHVybmVkOglhY3R1YWwgYnl0ZXMgd3JpdHRlbiBvciByZXF1aXJlZChvdXQpLgomIzQzOyAqIEBzdHJlYW1fY291bnQ6CW51bWJlciBvZiBzdHJlYW1zKG91dCkuCiYjNDM7ICogQGZsYWdzOgkJQml0IG1hc2sgb2YgTlRGU19TVFJFQU1fRkxfKiBmbGFncyBjb250cm9sbGluZyB0aGUKJiM0MzsgKgkJCWVuY29kaW5nIG9mIHRoZSByZXR1cm5lZCBuYW1lczsgb3RoZXIgYml0cyBtdXN0IGJlIHplcm8uCiYjNDM7ICogQHJlc2VydmVkOgkJTXVzdCBiZSB6ZXJvLgomIzQzOyAqIEBidWZmZXI6CQludGZzX3N0cmVhbV9lbnRyeSBhcnJheS4KJiM0MzsgKgomIzQzOyAqIFRoZSB2YXJpYWJsZS1sZW5ndGggZW50cmllcyBmb2xsb3cgdGhlIGhlYWRlciBpbiBAYnVmZmVyLCBlYWNoIGFsaWduZWQgb24KJiM0MzsgKiBhbiA4LWJ5dGUgYm91bmRhcnkgYW5kIGNoYWluZWQgdmlhIG50ZnNfc3RyZWFtX2VudHJ5Lm5leHRfZW50cnlfb2ZmLiBJZgomIzQzOyAqIEBidWZmZXJfc2l6ZSBpcyB0b28gc21hbGwsIG5vIGRhdGEgaXMgY29waWVkLCBAc3RyZWFtX2NvdW50IGFuZAomIzQzOyAqIEBieXRlc19yZXR1cm5lZCByZXBvcnQgdGhlIHJlcXVpcmVkIHZhbHVlcyBhbmQgdGhlIGlvY3RsIGZhaWxzIHdpdGgKJiM0MzsgKiAtRU5PU1BDLgomIzQzOyAqLwomIzQzO3N0cnVjdCBudGZzX2xpc3Rfc3RyZWFtcyB7CiYjNDM7CV9fYWxpZ25lZF91NjQgYnVmZmVyX3NpemU7CiYjNDM7CV9fYWxpZ25lZF91NjQgYnl0ZXNfcmV0dXJuZWQ7CiYjNDM7CV9fYWxpZ25lZF91NjQgc3RyZWFtX2NvdW50OwomIzQzOwlfX3UzMiBmbGFnczsKJiM0MzsJX191MzIgcmVzZXJ2ZWQ7CiYjNDM7CV9fdTggYnVmZmVyW107CiYjNDM7fTsKJiM0MzsKJiM0MzsjZGVmaW5lIE5URlNfSU9DX1NUUkVBTV9SRUFECQlfSU9XUihOVEZTX0lPQ19NQUdJQywgMSwgc3RydWN0IG50ZnNfc3RyZWFtKQomIzQzOyNkZWZpbmUgTlRGU19JT0NfU1RSRUFNX1dSSVRFCQlfSU9XUihOVEZTX0lPQ19NQUdJQywgMiwgc3RydWN0IG50ZnNfc3RyZWFtKQomIzQzOyNkZWZpbmUgTlRGU19JT0NfU1RSRUFNX1JFTU9WRQkJX0lPV1IoTlRGU19JT0NfTUFHSUMsIDMsIHN0cnVjdCBudGZzX3N0cmVhbSkKJiM0MzsjZGVmaW5lIE5URlNfSU9DX0xJU1RfU1RSRUFNUwkJX0lPV1IoTlRGU19JT0NfTUFHSUMsIDQsIHN0cnVjdCBudGZzX2xpc3Rfc3RyZWFtcykKJiM0MzsKJiM0MzsjZW5kaWYgLyogX1VBUElfTElOVVhfTlRGU19IICovCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE3OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0NzEKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOVEZTIE5hbWVkIFN0cmVhbSBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGludHJvZHVjaW5nIGlvY3RscyBmb3IgTlRGUywgc3BlY2lmaWNhbGx5IGhhbmRsaW5nIG5hbWVkIHN0cmVhbXMgb3IgQWx0ZXJuYXRlIERhdGEgU3RyZWFtcy4gSSBzZWUgd2UgaGF2ZSBgTlRGU19JT0NfU1RSRUFNX1JFQURgLCBgTlRGU19JT0NfU1RSRUFNX1dSSVRFYCwgYE5URlNfSU9DX1NUUkVBTV9SRU1PVkVgLCBhbmQgYE5URlNfSU9DX0xJU1RfU1RSRUFNU2AuIFRoYXQmIzM5O3Mgc3RhbmRhcmQgZnVuY3Rpb25hbGl0eSwgcmVhbGx5OyBpdCBjb3ZlcnMgdGhlIGJhc2ljIHJlYWQsIHdyaXRlLCByZW1vdmUsIGFuZCBsaXN0aW5nIG9wZXJhdGlvbnMuIEdvb2QuCgpUaGUgaW1wb3J0YW50IGZpbGVzIGFyZSBgZnMvbnRmcy9maWxlLmNgIHdoaWNoLCBhcyBhbiBleHBlcnQsIEkgd291bGQgZXhwZWN0IGhhbmRsZXMgYSBsb3Qgb2YgdGhlIGNvcmUgZmlsZSBvcGVyYXRpb25zLCBhbmQgYSBuZXcgaGVhZGVyLCBgaW5jbHVkZS91YXBpL2xpbnV4L250ZnMuaGAgd2hpY2ggd2lsbCBkZWZpbmUgdGhlIG5ldyBpb2N0bCBudW1iZXJzIGFuZCBzdHJ1Y3R1cmVzLiBNYWtlcyBzZW5zZS4KCkJ1dCB3YWl0IGEgbWludXRl4oCmIFRoaXMgaXMgYGZzL250ZnMvZmlsZS5jYOKApiBJcyB0aGlzIHRoZSAqb2xkKiBOVEZTIGRyaXZlciBvciB0aGUgbmV3ZXIgYG50ZnMzYD8gSSBuZWVkIHRvIGNsYXJpZnkgdGhhdCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgaXMgZ29pbmcgaW50byBhIGxlZ2FjeSBjb2RlIHBhdGggb3Igc29tZXRoaW5nIG1vcmUgbW9kZXJuLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgaWYgdGhlIG9sZCBgZnMvbnRmc2AgaXMgc3RpbGwgZXZlbiBlbmFibGVkLCBhbmQgaG93IGl04oCZcyBjb25maWd1cmVkLiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBgZ3JlcHBlcmAgdG8gc2VhcmNoIHRocm91Z2ggdGhlIEtjb25maWcgZmlsZXMgZm9yIGBOVEZTX0ZTYCBvciBhIHNpbWlsYXIgY29uZmlndXJhdGlvbiBzeW1ib2wuIFRoYXQgc2hvdWxkIGNsZWFyIHRoaW5ncyB1cCBmYXN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE3OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBOVEZTX0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbnRmcy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL250ZnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvbnRmcy9LY29uZmlnOjI6Y29uZmlnIE5URlNfRlNcbmZzL250ZnMvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7TlRGUyBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvbnRmcy9LY29uZmlnPTEzPWNvbmZpZyBOVEZTX0RFQlVHXG4tLVxuZnMvbnRmcy9LY29uZmlnLTM0LVxuZnMvbnRmcy9LY29uZmlnOjM1OmNvbmZpZyBOVEZTX0ZTX1BPU0lYX0FDTFxuZnMvbnRmcy9LY29uZmlnLTM2LVx0Ym9vbCBcJiMzNDtOVEZTIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTc6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAxMjkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOVEZTIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHdvcmtpbmcgd2l0aCB0aGUgKm9sZCogTlRGUyBkcml2ZXIsIHNwZWNpZmljYWxseSBgZnMvbnRmc2AuIEkgbmVlZCB0byByZW1lbWJlciB0aGF0IHRoaXMgbGVnYWN5IGRyaXZlciBpcyBzdGlsbCBhcm91bmQuIEl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBsaWVzIGluIGFkZGluZyBuZXcgaW9jdGxzIHRvIGBmcy9udGZzL2ZpbGUuY2AuIExldCYjMzk7cyBzZWUgd2hhdCB0aG9zZSBuZXcgaW9jdGxzIGFyZS4uLiByaWdodCwgdGhlIHBhdGNoIGFkZHM6CgoqICAgYG50ZnNfcmVhZF9uYW1lZF9zdHJlYW1gCiogICBgbnRmc193cml0ZV9uYW1lZF9zdHJlYW1gCiogICBgbnRmc19yZW1vdmVfbmFtZWRfc3RyZWFtYAoqICAgYG50ZnNfaW9jdGxfc3RyZWFtYAoqICAgYG50ZnNfaW9jdGxfbGlzdF9zdHJlYW1zYAoKTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzOiBhcmUgdGhlc2UgYWN0dWFsbHkgKnJlYWNoYWJsZSo/IEFoLCB5ZXMsIHRoZXkgYXJlLCB2aWEgYG50ZnNfaW9jdGxgLiBUaGF0IGZ1bmN0aW9uIHdvdWxkIGJlIHRoZSBgLnVubG9ja2VkX2lvY3RsYCBlbnRyeSBwb2ludCBmb3IgTlRGUyBmaWxlcywgd2hpY2ggbWFrZXMgc2Vuc2UuIEp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJIHNob3VsZCB2ZXJpZnkgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBudGZzX2lvY3RsYCBpdHNlbGYgaW4gYGZzL250ZnMvZmlsZS5jYC4gR290dGEgYmUgdGhvcm91Z2ggd2l0aCB0aGVzZSBkcml2ZXIgY2hhbmdlcywgZXNwZWNpYWxseSB3aXRoIHNvbWV0aGluZyBhcyBmdW5kYW1lbnRhbCBhcyBmaWxlIHN5c3RlbSBJL08uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTc6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bnRmc19pb2N0bCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL250ZnMvZmlsZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL250ZnMvZmlsZS5jPTc0MD1zdGF0aWMgc3NpemVfdCBudGZzX2ZpbGVfc3BsaWNlX3JlYWQoc3RydWN0IGZpbGUgKmluLCBsb2ZmX3QgKnBwb3MsXG4tLVxuZnMvbnRmcy9maWxlLmMtNzQ4LVxuZnMvbnRmcy9maWxlLmM6NzQ5OnN0YXRpYyBpbnQgbnRmc19pb2N0bF9zaHV0ZG93bihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIGFyZylcbmZzL250ZnMvZmlsZS5jLTc1MC17XG4tLVxuZnMvbnRmcy9maWxlLmMtNzYxLVxuZnMvbnRmcy9maWxlLmM6NzYyOnN0YXRpYyBpbnQgbnRmc19pb2N0bF9nZXRfdm9sdW1lX2xhYmVsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFyZylcbmZzL250ZnMvZmlsZS5jLTc2My17XG4tLVxuZnMvbnRmcy9maWxlLmMtNzg0LVxuZnMvbnRmcy9maWxlLmM6Nzg1OnN0YXRpYyBpbnQgbnRmc19pb2N0bF9zZXRfdm9sdW1lX2xhYmVsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFyZylcbmZzL250ZnMvZmlsZS5jLTc4Ni17XG4tLVxuZnMvbnRmcy9maWxlLmMtODA4LVxuZnMvbnRmcy9maWxlLmM6ODA5OnN0YXRpYyBpbnQgbnRmc19pb2N0bF9maXRyaW0oc3RydWN0IG50ZnNfdm9sdW1lICp2b2wsIHVuc2lnbmVkIGxvbmcgYXJnKVxuZnMvbnRmcy9maWxlLmMtODEwLXtcbi0tXG5mcy9udGZzL2ZpbGUuYz0xMDMxPWVudW0gbnRmc19zdHJlYW1fb3Age1xuLS1cbmZzL250ZnMvZmlsZS5jLTEwMzYtXG5mcy9udGZzL2ZpbGUuYzoxMDM3OnN0YXRpYyBsb25nIG50ZnNfaW9jdGxfc3RyZWFtKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFyZyxcbmZzL250ZnMvZmlsZS5jLTEwMzgtXHRcdFx0ICAgICAgZW51bSBudGZzX3N0cmVhbV9vcCBvcClcbi0tXG5mcy9udGZzL2ZpbGUuYy0xMTc2LVxuZnMvbnRmcy9maWxlLmM6MTE3NzpzdGF0aWMgaW50IG50ZnNfaW9jdGxfbGlzdF9zdHJlYW1zKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFyZylcbmZzL250ZnMvZmlsZS5jLTExNzgte1xuLS1cbmZzL250ZnMvZmlsZS5jLTEzNDItXG5mcy9udGZzL2ZpbGUuYzoxMzQzOmxvbmcgbnRmc19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG5mcy9udGZzL2ZpbGUuYy0xMzQ0LXtcbi0tXG5mcy9udGZzL2ZpbGUuYy0xMzQ2LVx0Y2FzZSBGU19JT0NfU0hVVERPV046XG5mcy9udGZzL2ZpbGUuYzoxMzQ3Olx0XHRyZXR1cm4gbnRmc19pb2N0bF9zaHV0ZG93bihmaWxlX2lub2RlKGZpbHApLVx1MDAzZWlfc2IsIGFyZyk7XG5mcy9udGZzL2ZpbGUuYy0xMzQ4LVx0Y2FzZSBGU19JT0NfR0VURlNMQUJFTDpcbmZzL250ZnMvZmlsZS5jOjEzNDk6XHRcdHJldHVybiBudGZzX2lvY3RsX2dldF92b2x1bWVfbGFiZWwoZmlscCwgYXJnKTtcbmZzL250ZnMvZmlsZS5jLTEzNTAtXHRjYXNlIEZTX0lPQ19TRVRGU0xBQkVMOlxuZnMvbnRmcy9maWxlLmM6MTM1MTpcdFx0cmV0dXJuIG50ZnNfaW9jdGxfc2V0X3ZvbHVtZV9sYWJlbChmaWxwLCBhcmcpO1xuZnMvbnRmcy9maWxlLmMtMTM1Mi1cdGNhc2UgRklUUklNOlxuZnMvbnRmcy9maWxlLmM6MTM1MzpcdFx0cmV0dXJuIG50ZnNfaW9jdGxfZml0cmltKE5URlNfU0IoZmlsZV9pbm9kZShmaWxwKS1cdTAwM2VpX3NiKSwgYXJnKTtcbmZzL250ZnMvZmlsZS5jLTEzNTQtXHRjYXNlIE5URlNfSU9DX1NUUkVBTV9SRUFEOlxuZnMvbnRmcy9maWxlLmM6MTM1NTpcdFx0cmV0dXJuIG50ZnNfaW9jdGxfc3RyZWFtKGZpbHAsIGFyZywgTlRGU19TVFJFQU1fT1BfUkVBRCk7XG5mcy9udGZzL2ZpbGUuYy0xMzU2LVx0Y2FzZSBOVEZTX0lPQ19TVFJFQU1fV1JJVEU6XG5mcy9udGZzL2ZpbGUuYzoxMzU3Olx0XHRyZXR1cm4gbnRmc19pb2N0bF9zdHJlYW0oZmlscCwgYXJnLCBOVEZTX1NUUkVBTV9PUF9XUklURSk7XG5mcy9udGZzL2ZpbGUuYy0xMzU4LVx0Y2FzZSBOVEZTX0lPQ19TVFJFQU1fUkVNT1ZFOlxuZnMvbnRmcy9maWxlLmM6MTM1OTpcdFx0cmV0dXJuIG50ZnNfaW9jdGxfc3RyZWFtKGZpbHAsIGFyZywgTlRGU19TVFJFQU1fT1BfUkVNT1ZFKTtcbmZzL250ZnMvZmlsZS5jLTEzNjAtXHRjYXNlIE5URlNfSU9DX0xJU1RfU1RSRUFNUzpcbmZzL250ZnMvZmlsZS5jOjEzNjE6XHRcdHJldHVybiBudGZzX2lvY3RsX2xpc3Rfc3RyZWFtcyhmaWxwLCBhcmcpO1xuZnMvbnRmcy9maWxlLmMtMTM2Mi1cdGRlZmF1bHQ6XG4tLVxuZnMvbnRmcy9maWxlLmM9MTM2OD1sb25nIG50ZnNfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLFxuLS1cbmZzL250ZnMvZmlsZS5jLTEzNzAte1xuZnMvbnRmcy9maWxlLmM6MTM3MTpcdHJldHVybiBudGZzX2lvY3RsKGZpbHAsIGNtZCwgKHVuc2lnbmVkIGxvbmcpY29tcGF0X3B0cihhcmcpKTtcbmZzL250ZnMvZmlsZS5jLTEzNzItfVxuLS1cbmZzL250ZnMvZmlsZS5jPTE2ODQ9Y29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBudGZzX2ZpbGVfb3BzID0ge1xuLS1cbmZzL250ZnMvZmlsZS5jLTE2OTMtXHQuc3BsaWNlX3dyaXRlXHQ9IGl0ZXJfZmlsZV9zcGxpY2Vfd3JpdGUsXG5mcy9udGZzL2ZpbGUuYzoxNjk0Olx0LnVubG9ja2VkX2lvY3RsXHQ9IG50ZnNfaW9jdGwsXG5mcy9udGZzL2ZpbGUuYy0xNjk1LSNpZmRlZiBDT05GSUdfQ09NUEFUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTc6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4NDEKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE5URlMgSU9DVExzKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoZXNlIE5URlMgSU9DVExzLiBGaXJzdCB0aG91Z2h0IGlzLCB5ZWFoLCB0aGUgSU9DVEwgZW50cnkgcG9pbnRzICphcmUqIGRlZmluaXRlbHkgYWNjZXNzaWJsZSwgc28gbGV0JiMzOTtzIHN0YXJ0IHRoZXJlLiBSaWdodCwgYG50ZnNfaW9jdGxgIGlzIHRoZSBpbml0aWFsIHBvaW50IG9mIGVudHJ5LiAKCk5vdywgd2hpY2ggZnVuY3Rpb25zIGFyZSB0aGUga2V5IHBsYXllcnMgaW4gdGhpcyBhcmVhPyBJIHRoaW5rIGl0IGJvaWxzIGRvd24gdG86IGBudGZzX2lvY3RsX3N0cmVhbWAsIGBudGZzX2lvY3RsX2xpc3Rfc3RyZWFtc2AsIGBudGZzX3JlYWRfbmFtZWRfc3RyZWFtYCwgYG50ZnNfd3JpdGVfbmFtZWRfc3RyZWFtYCwgYW5kIGBudGZzX3JlbW92ZV9uYW1lZF9zdHJlYW1gLgoKV2FpdCBhIG1pbnV0ZS4uLiBib3RoIGBudGZzX2lvY3RsX3N0cmVhbWAgYW5kIGBudGZzX2lvY3RsX2xpc3Rfc3RyZWFtc2AgYXJlIHN0YXRpYyBmdW5jdGlvbnMsIHdoaWxlIGBudGZzX2lvY3RsYCBpdHNlbGYgaXNuJiMzOTt0LiBJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8gc2VlIGlmIGBudGZzX2lvY3RsYCBpcyBleHBvcnRlZCBhcyBhIHN5bWJvbCBvciBpZiBpdCYjMzk7cyBvbmx5IGNhbGxlZCB3aXRoaW4gYG50ZnNfZmlsZV9vcHNgLiBBbHJpZ2h0LCBpdCYjMzk7cyB1c2VkIHdpdGhpbiBgbnRmc19maWxlX29wc2AuIEkgc2hvdWxkIGJlIGFibGUgdG8gc3BlY2lmeSBgbnRmc19pb2N0bGAgYXMgYSBmb2N1cyBzeW1ib2wuCgpDYW4gSSBzcGVjaWZ5IGBudGZzX2lvY3RsX3N0cmVhbWAgZGlyZWN0bHk/IFNpbmNlIGl0JiMzOTtzIHN0YXRpYywgaXQgbWlnaHQgYmUgaW5saW5lZCBkdXJpbmcgY29tcGlsYXRpb24sIG1lYW5pbmcgaXQgbWlnaHQgbm90IGhhdmUgaXRzIG93biBzeW1ib2wuIEFjdHVhbGx5LCB3YWl0IGEgbWludXRlLCBgbnRmc19pb2N0bF9zdHJlYW1gIGlzIGEgZmFpcmx5IHNpemFibGUgZnVuY3Rpb24uIEl0IG1pZ2h0IG5vdCBiZSBpbmxpbmVkLiBCdXQgdG8gYmUgc2FmZSwgSSYjMzk7bSBnb2luZyB0byBpbmNsdWRlIGBudGZzX2lvY3RsYCBhbG9uZyB3aXRoIGl0LgoKQWgsIGFuZCB0aG9zZSBvdGhlciBzdHJlYW0gZnVuY3Rpb25zIOKAkyBgbnRmc19yZWFkX25hbWVkX3N0cmVhbWAsIGBudGZzX3dyaXRlX25hbWVkX3N0cmVhbWAsIGFuZCBgbnRmc19yZW1vdmVfbmFtZWRfc3RyZWFtYCDigJMgdGhvc2UgYXJlIGFsc28gc3RhdGljLiBMZXQgbWUganVzdCBjb25maXJtIHRoYXQuIFllcCwgdGhleSBhcmUuIFNvIHJlYWxseSwgbXkgZm9jdXMgc2hvdWxkIGJlIG9uIGBudGZzX2lvY3RsYCB0aGVuLiBUaGF0JiMzOTtzIHRoZSBrZXkgZW50cnkgcG9pbnQuCgpPa2F5LCBsZXQmIzM5O3Mgc3dpdGNoIGdlYXJzIGZvciBhIG1vbWVudCBhbmQgc2VlIHdoaWNoIGNvbmZpZyBvcHRpb24gZW5hYmxlcyB0aGUgTlRGUyBkcml2ZXIuIEl0JiMzOTtzIHRoZSBgTlRGU19GU2AgY29uZmlnLiBXYWl0LCBkb2VzIGBOVEZTX1JXYCBleGlzdD8gSXQmIzM5O3MgdGltZSB0byBjaGVjayB0aGUgYGZzL250ZnMvS2NvbmZpZ2AgZmlsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxNzoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBOVEZTX1JXJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbnRmcy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxNzoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjcxNQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgTlRGUyBXcml0ZSBTdXBwb3J0IENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIEdpdmVuIHRoZSB0YXNrIGF0IGhhbmQsIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgTlRGUyB3aXRoaW4gdGhlIGtlcm5lbC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHdyaXRlIHN1cHBvcnQuIFdoZXJlIHdvdWxkIHRoYXQgYmUgZGVmaW5lZD8gTXkgZ3V0IHRlbGxzIG1lIGBmcy9udGZzL0tjb25maWdgIGlzIHRoZSBsaWtlbHkgcGxhY2UuIEl0JiMzOTtzIHRoZSBzdGFuZGFyZCBsb2NhdGlvbiBmb3IgZmlsZXN5c3RlbS1zcGVjaWZpYyBjb25maWd1cmF0aW9uLiBUaW1lIHRvIGNoZWNrIGlmIHRoZSByZXF1aXNpdGUgb3B0aW9ucyBmb3IgcmVhZC93cml0ZSBmdW5jdGlvbmFsaXR5IGFyZSBleHBvc2VkLCBhbG9uZyB3aXRoIGFueSByZWxldmFudCBkZXBlbmRlbmNpZXMgb3IgcG90ZW50aWFsIGNhdmVhdHMuIEl0JiMzOTtzIGxpa2VseSB0aGF0IHdyaXRlIHN1cHBvcnQsIGlmIHByZXNlbnQsIG1pZ2h0IGJlIGNvbnRpbmdlbnQgb24gY2VydGFpbiBrZXJuZWwgZmVhdHVyZXMgb3IgZXh0ZXJuYWwgbGlicmFyaWVzLiBUaGlzIGluaXRpYWwgZXhwbG9yYXRpb24gd2lsbCBndWlkZSBteSBuZXh0IHN0ZXBzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxNzoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTlRGU18mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9udGZzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbnRmcy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9udGZzL0tjb25maWc6Mjpjb25maWcgTlRGU19GU1xuZnMvbnRmcy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtOVEZTIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDtcbi0tXG5mcy9udGZzL0tjb25maWctMTItXG5mcy9udGZzL0tjb25maWc6MTM6Y29uZmlnIE5URlNfREVCVUdcbmZzL250ZnMvS2NvbmZpZy0xNC1cdGJvb2wgXCYjMzQ7TlRGUyBkZWJ1Z2dpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbmZzL250ZnMvS2NvbmZpZy0zNC1cbmZzL250ZnMvS2NvbmZpZzozNTpjb25maWcgTlRGU19GU19QT1NJWF9BQ0xcbmZzL250ZnMvS2NvbmZpZy0zNi1cdGJvb2wgXCYjMzQ7TlRGUyBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxNzoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzEwOQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkV4YW1pbmluZyBOVEZTIFdyaXRlIFN1cHBvcnQqKgoKQWxyaWdodCwgaGFuZyBvbiBhIHNlY29uZC4uLiBgTlRGU19SV2AgaXMgcG9pbnRpbmcgdG8gdGhlICpuZXcqIGBmcy9udGZzM2AgZHJpdmVyLCBub3QgdGhlIGxlZ2FjeSBgZnMvbnRmc2A/IEludGVyZXN0aW5nLiBJIG5lZWQgdG8gcXVpY2tseSBjb25maXJtIHNvbWV0aGluZyBhYm91dCB3cml0ZSBjYXBhYmlsaXRpZXMgaGVyZS4gSXMgd3JpdGUgc3VwcG9ydCBmb3IgdGhlIG9sZGVyIGBmcy9udGZzYCBkcml2ZXIgZW5hYmxlZCBieSBkZWZhdWx0LCBvciBpcyBpdCBnYXRlZCBiZWhpbmQgYSBzZXBhcmF0ZSBjb25maWd1cmF0aW9uIG9wdGlvbiwgbGlrZSBgQ09ORklHX05URlNfV1JJVEVgPyBJIG5lZWQgdG8gY2hlY2sgdGhlIGtlcm5lbCBjb25maWcgb3B0aW9ucyB0byBnZXQgYSBwcm9wZXIgaGFuZGxlIG9uIHRoZSBjdXJyZW50IGxhbmRzY2FwZS4gVGhpcyBpcyBsaWtlbHkgZHVlIHRvIHRoZSBuZWVkIGZvciBhIHN0YWJsZSBhbmQgbW9yZSBmZWF0dXJlLXJpY2ggc29sdXRpb24gd2l0aCBudGZzMy4gS25vd2luZyB0aGUgd3JpdGUgc3VwcG9ydCBzdGF0dXMgb2YgYm90aCBkcml2ZXJzIHdpbGwgaW5mb3JtIHRoZSBmdXR1cmUgZGlyZWN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxNzoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBOVEZTX1JXJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbnRmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxNzoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzM2NgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgTlRGUyBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBpbnRvIHRoZSBOVEZTIGZpbGUgc3lzdGVtIGNvbmZpZ3VyYXRpb24gYW5kLCBiYXNlZCBvbiB3aGF0IEkgc2VlIGluIGBmcy9udGZzL0tjb25maWdgLCBpdCBzZWVtcyBwcmV0dHkgbGltaXRlZC4gSSYjMzk7bSBvbmx5IHNlZWluZyBvcHRpb25zIGZvciBgTlRGU19GU2AsIGBOVEZTX0RFQlVHYCwgYW5kIGBOVEZTX0ZTX1BPU0lYX0FDTGAuIFRoYXQgZmVlbHMgc3BhcnNlLCByaWdodD8gSSB3YXMgZXhwZWN0aW5nIG1vcmUgZ3JhbnVsYXIgY29udHJvbCBoZXJlLgoKTm93LCBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHJlYWQtd3JpdGUgY2FwYWJpbGl0aWVzIGFyZSBleHBsaWNpdGx5IGNvbmZpZ3VyZWQuIExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGBmcy9udGZzL0tjb25maWdgIGZvciB0aGUgYE5URlNfUldgIG9wdGlvbi4gSSBjYW4mIzM5O3QgYmUgc3VyZSwgYnV0IEkgZmVlbCBsaWtlIEkmIzM5O20gbWlzc2luZyBzb21ldGhpbmcgaW1wb3J0YW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxNzoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1JXJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbnRmcy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTc6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM2MTQKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk5hdmlnYXRpbmcgdGhlIE5URlMgTGFuZHNjYXBlKioKClJpZ2h0LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGUgTlRGUyBkcml2ZXIgc2l0dWF0aW9uLCB0cnlpbmcgdG8gZmlndXJlIG91dCBzb21lIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSByZW1lbWJlciBzZWVpbmcgc29tZXRoaW5nIGFib3V0IHJlYWQtd3JpdGUgY2FwYWJpbGl0aWVzLi4uIGFuZCBpbml0aWFsbHksIEkgd2FzIGxvb2tpbmcgYXQgdGhlIG9sZCBgZnMvbnRmcy9LY29uZmlnYCwgYnV0ICp0aGF0JiMzOTtzKiBub3QgcXVpdGUgcmlnaHQuIEhtbSwgbm8gYE5URlNfUldgIGRlZmluZWQgdGhlcmUuIER1aCwgb2YgY291cnNlISBUaGF0JiMzOTtzIGxlZ2FjeSBjb2RlLiBJIG5lZWQgdG8gYmUgaW4gdGhlIG5ldyBgbnRmczNgIGRyaXZlciBub3cuIExldCYjMzk7cyBwaXZvdCBhbmQgY2hlY2sgYGZzL250ZnMzL0tjb25maWdgIGluc3RlYWQuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyAqc2hvdWxkKiByZXNpZGUsIGFuZCB3aGVyZSBJIHNob3VsZCBmaW5kIHRoZSBzZXR0aW5ncyBmb3IgcmVhZC13cml0ZSBzdXBwb3J0LCBub3cgdGhhdCB0aGUgcmV3cml0ZSBpcyBmdWxseSBpbnRlZ3JhdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxNzoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTlRGUzNfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9udGZzMy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL250ZnMzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL250ZnMzL0tjb25maWc6Mjpjb25maWcgTlRGUzNfRlNcbmZzL250ZnMzL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O05URlMgUmVhZC1Xcml0ZSBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvbnRmczMvS2NvbmZpZz0yOD1jb25maWcgTlRGUzNfTFpYX1hQUkVTU1xuLS1cbmZzL250ZnMzL0tjb25maWctMzctXG5mcy9udGZzMy9LY29uZmlnOjM4OmNvbmZpZyBOVEZTM19GU19QT1NJWF9BQ0xcbmZzL250ZnMzL0tjb25maWctMzktXHRib29sIFwmIzM0O05URlMgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTc6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQwNDUKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyB0aGUgTlRGUyBQYXRjaCoqCgpBbHJpZ2h0LCB0aGUgcGF0Y2ggbGFuZGVkIGluIGBmcy9udGZzL2ZpbGUuY2AuIFRoYXQmIzM5O3MgYSBrZXkgZmlsZSwgYnV0IEkgbmVlZCBhIHF1aWNrIHNhbml0eSBjaGVjayBiZWZvcmUgZGl2aW5nIGRlZXAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjb25maXJtIHdoZXJlIHdyaXRlIHN1cHBvcnQgZXhpc3RzLCBsZXQmIzM5O3MgbWFrZSBzdXJlIHRoYXQgdGhhdCBpcyBwcmVzZW50IHdpdGhpbiBgZnMvbnRmcy9LY29uZmlnYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTc6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt3cml0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL250ZnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE3OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MjE2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKktjb25maWcgRmlsZSBFeGFtaW5hdGlvbioqCgpIbW0sIHN0cmFuZ2UuIEkgd2FzIGV4cGVjdGluZyB0byBmaW5kIHNvbWV0aGluZyByZWxhdGVkIHRvICYjMzQ7d3JpdGUmIzM0OyBmdW5jdGlvbmFsaXR5IGluIGBmcy9udGZzL0tjb25maWdgLCBidXQgYSBxdWljayBzY2FuIHN1Z2dlc3RzIGl0JiMzOTtzIG5vdCBwcmVzZW50LiBPa2F5LCBJIG5lZWQgdG8gYmUgdGhvcm91Z2guIEkgY2FuJiMzOTt0IGp1c3QgYXNzdW1lIEkmIzM5O20gcmlnaHQsIGV2ZW4gd2l0aCBteSBleHBlcmllbmNlLiBJJiMzOTtsbCBuZWVkIHRvIGdvIGJhY2sgYW5kIG1ldGhvZGljYWxseSBjaGVjayB0aGUgZW50aXJlIGZpbGUgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgdGhlIGtleXdvcmQgaXNuJiMzOTt0IHVzZWQuIEkgZG9uJiMzOTt0IHdhbnQgdG8gbWlzcyBhbnl0aGluZyBzdWJ0bGUgaGlkZGVuIHdpdGhpbiBhIGRlcGVuZGVuY3kgc3RhdGVtZW50IG9yIGEgY29tbWVudC4gR290dGEgYmUgbWV0aWN1bG91cyBoZXJlLiBUaGlzIEtjb25maWcgZmlsZSBpcyBhIGNydWNpYWwgZWxlbWVudCBvZiBmaWxlc3lzdGVtIGNvbmZpZ3VyYXRpb24sIGFuZCBtaXNzaW5nIGEgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb24gY2FuIGludHJvZHVjZSBpc3N1ZXMgZG93biB0aGUgbGluZSwgc28gY2FyZWZ1bCBpbnNwZWN0aW9uIGlzIHBhcmFtb3VudC4gSSYjMzk7bGwgdGFrZSBteSB0aW1lIGFuZCBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE3OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvbnRmcy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBOVEZTX0ZTXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtOVEZTIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDtcbiAgIDQ6XHRcdHNlbGVjdCBOTFNcbiAgIDU6XHRcdHNlbGVjdCBGU19JT01BUFxuICAgNjpcdFx0aGVscFxuICAgNzpcdFx0ICBOVEZTIGlzIHRoZSBmaWxlIHN5c3RlbSBvZiBNaWNyb3NvZnQgV2luZG93cyBOVCwgMjAwMCwgWFAgYW5kIDIwMDMuXG4gICA4Olx0XHQgIFRoaXMgYWxsb3dzIHlvdSB0byBtb3VudCBkZXZpY2VzIGZvcm1hdHRlZCB3aXRoIHRoZSBudGZzIGZpbGUgc3lzdGVtLlxuICAgOTpcdFxuICAxMDpcdFx0ICBUbyBjb21waWxlIHRoaXMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWRcbiAgMTE6XHRcdCAgbnRmcy5cbiAgMTI6XHRcbiAgMTM6XHRjb25maWcgTlRGU19ERUJVR1xuICAxNDpcdFx0Ym9vbCBcJiMzNDtOVEZTIGRlYnVnZ2luZyBzdXBwb3J0XCYjMzQ7XG4gIDE1Olx0XHRkZXBlbmRzIG9uIE5URlNfRlNcbiAgMTY6XHRcdGhlbHBcbiAgMTc6XHRcdCAgSWYgeW91IGFyZSBleHBlcmllbmNpbmcgYW55IHByb2JsZW1zIHdpdGggdGhlIE5URlMgZmlsZSBzeXN0ZW0sIHNheVxuICAxODpcdFx0ICBZIGhlcmUuICBUaGlzIHdpbGwgcmVzdWx0IGluIGFkZGl0aW9uYWwgY29uc2lzdGVuY3kgY2hlY2tzIHRvIGJlXG4gIDE5Olx0XHQgIHBlcmZvcm1lZCBieSB0aGUgZHJpdmVyIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBkZWJ1Z2dpbmcgbWVzc2FnZXMgdG9cbiAgMjA6XHRcdCAgYmUgd3JpdHRlbiB0byB0aGUgc3lzdGVtIGxvZy4gIE5vdGUgdGhhdCBkZWJ1Z2dpbmcgbWVzc2FnZXMgYXJlXG4gIDIxOlx0XHQgIGRpc2FibGVkIGJ5IGRlZmF1bHQuICBUbyBlbmFibGUgdGhlbSwgc3VwcGx5IHRoZSBvcHRpb24gZGVidWdfbXNncz0xXG4gIDIyOlx0XHQgIGF0IHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lIHdoZW4gYm9vdGluZyB0aGUga2VybmVsIG9yIGFzIGFuIG9wdGlvblxuICAyMzpcdFx0ICB0byBpbnNtb2Qgd2hlbiBsb2FkaW5nIHRoZSBudGZzIG1vZHVsZS4gIE9uY2UgdGhlIGRyaXZlciBpcyBhY3RpdmUsXG4gIDI0Olx0XHQgIHlvdSBjYW4gZW5hYmxlIGRlYnVnZ2luZyBtZXNzYWdlcyBieSBkb2luZyAoYXMgcm9vdCk6XG4gIDI1Olx0XHQgIGVjaG8gMSBcdTAwM2UgL3Byb2Mvc3lzL2ZzL250ZnMtZGVidWdcbiAgMjY6XHRcdCAgUmVwbGFjaW5nIHRoZSBcJiMzNDsxXCYjMzQ7IHdpdGggXCYjMzQ7MFwmIzM0OyB3b3VsZCBkaXNhYmxlIGRlYnVnIG1lc3NhZ2VzLlxuICAyNzpcdFxuICAyODpcdFx0ICBJZiB5b3UgbGVhdmUgZGVidWdnaW5nIG1lc3NhZ2VzIGRpc2FibGVkLCB0aGlzIHJlc3VsdHMgaW4gbGl0dGxlXG4gIDI5Olx0XHQgIG92ZXJoZWFkLCBidXQgZW5hYmxpbmcgZGVidWcgbWVzc2FnZXMgcmVzdWx0cyBpbiB2ZXJ5IHNpZ25pZmljYW50XG4gIDMwOlx0XHQgIHNsb3dkb3duIG9mIHRoZSBzeXN0ZW0uXG4gIDMxOlx0XG4gIDMyOlx0XHQgIFdoZW4gcmVwb3J0aW5nIGJ1Z3MsIHBsZWFzZSB0cnkgdG8gaGF2ZSBhdmFpbGFibGUgYSBmdWxsIGR1bXAgb2ZcbiAgMzM6XHRcdCAgZGVidWdnaW5nIG1lc3NhZ2VzIHdoaWxlIHRoZSBtaXNiZWhhdmlvdXIgd2FzIG9jY3VycmluZy5cbiAgMzQ6XHRcbiAgMzU6XHRjb25maWcgTlRGU19GU19QT1NJWF9BQ0xcbiAgMzY6XHRcdGJvb2wgXCYjMzQ7TlRGUyBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1wmIzM0O1xuICAzNzpcdFx0ZGVwZW5kcyBvbiBOVEZTX0ZTXG4gIDM4Olx0XHRzZWxlY3QgRlNfUE9TSVhfQUNMXG4gIDM5Olx0XHRoZWxwXG4gIDQwOlx0XHQgIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzIChBQ0xzKSBzdXBwb3J0IGFkZGl0aW9uYWwgYWNjZXNzIHJpZ2h0c1xuICA0MTpcdFx0ICBmb3IgdXNlcnMgYW5kIGdyb3VwcyBiZXlvbmQgdGhlIHN0YW5kYXJkIG93bmVyL2dyb3VwL3dvcmxkIHNjaGVtZS5cbiAgNDI6XHRcbiAgNDM6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBBQ0wgc3VwcG9ydCBmb3IgbnRmcywgcHJvdmlkaW5nIGZ1bmN0aW9uYWwgcGFyaXR5XG4gIDQ0Olx0XHQgIHdpdGggbnRmczMgZHJpdmllci5cbiAgNDU6XHRcbiAgNDY6XHRcdCAgTk9URTogdGhpcyBpcyBsaW51eCBvbmx5IGZlYXR1cmUuIFdpbmRvd3Mgd2lsbCBpZ25vcmUgdGhlc2UgQUNMcy5cbiAgNDc6XHRcbiAgNDg6XHRcdCAgSWYgeW91IGRvbiYjMzk7dCBrbm93IHdoYXQgQWNjZXNzIENvbnRyb2wgTGlzdHMgYXJlLCBzYXkgTi5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTc6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxNzUKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgTlRGUyBMYW5kc2NhcGUqKgoKSG1tLCBpbnRlcmVzdGluZy4gSXQgc2VlbXMgbGlrZSBgZnMvbnRmc2AgaGFzIHdyaXRlIHN1cHBvcnQgZW5hYmxlZCByaWdodCBvdXQgb2YgdGhlIGJveCBub3cuIFRoYXQmIzM5O3MgYSBkZXBhcnR1cmUgZnJvbSBob3cgdGhpbmdzIHVzZWQgdG8gYmUuIEkgc2VlbSB0byByZWNhbGwgdGhhdCBpbiBlYXJsaWVyIGtlcm5lbHMsIHRoZSBOVEZTIGZpbGVzeXN0ZW0gbW9kdWxlIGhhZCBhIGBOVEZTX1JXYCBmbGFnLi4ucmlnaHQ/IFdhcyBpdCBkcm9wcGVkLCBvciBwZXJoYXBzIG1lcmdlZCBpbnRvIHNvbWV0aGluZyBlbHNlPyBJdCYjMzk7cyBiZWVuIGEgd2hpbGUgc2luY2UgSSBoYWQgdG8gcmVhbGx5IGRpZyBpbnRvIHRoaXMgcGFydGljdWxhciBiaXQgb2Yga2VybmVsIGNvZGUuIEJlc3Qgd2F5IHRvIGZpZ3VyZSBvdXQgd2hhdCYjMzk7cyBjaGFuZ2VkIGlzIHRvIGdvIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2UuIExldCBtZSB0YWtlIGEgbG9vayBhdCB0aGUgYGZzL250ZnMvTWFrZWZpbGVgIGFuZCBzZWUgaWYgdGhlIGNsdWVzIGFyZSBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTc6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9udGZzL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHRcbiAgIDM6XHRvYmotJChDT05GSUdfTlRGU19GUykgJiM0Mzs9IG50ZnMub1xuICAgNDpcdFxuICAgNTpcdG50ZnMteSA6PSBhb3BzLm8gYXR0cmliLm8gY29sbGF0ZS5vIGRpci5vIGZpbGUubyBpbmRleC5vIGlub2RlLm8gXFxcbiAgIDY6XHRcdCAgbWZ0Lm8gbXN0Lm8gbmFtZWkubyBydW5saXN0Lm8gc3VwZXIubyB1bmlzdHIubyBhdHRybGlzdC5vIGVhLm8gXFxcbiAgIDc6XHRcdCAgdXBjYXNlLm8gYml0bWFwLm8gbGNuYWxsb2MubyBsb2dmaWxlLm8gcmVwYXJzZS5vIGNvbXByZXNzLm8gXFxcbiAgIDg6XHRcdCAgaW9tYXAubyBkZWJ1Zy5vIHN5c2N0bC5vIG9iamVjdF9pZC5vIGJkZXYtaW8ub1xuICAgOTpcdFxuICAxMDpcdGNjZmxhZ3MtJChDT05GSUdfTlRGU19ERUJVRykgJiM0Mzs9IC1EREVCVUdcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTc6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU2NDAKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBOVEZTOiBBIEZvY3VzZWQgQXBwcm9hY2gqKgoKQWxyaWdodCwgaXQgbG9va3MgbGlrZSBgTlRGU19GU2AgaXMgdGhlIG9ubHkgY29uZmlndXJhdGlvbiBvcHRpb24gSSBuZWVkIHRvIGNvbnNpZGVyIGZvciB0aGlzLiBTdHJhaWdodGZvcndhcmQgZW5vdWdoLiBCdXQgaG9sZCBvbiwgdGhpcyBwYXRjaCBpcyBpbnRyb2R1Y2luZyBpb2N0bHMgd2l0aGluIGBmcy9udGZzL2ZpbGUuY2AuIExldCYjMzk7cyBzZWUuLi4gd2UmIzM5O3ZlIGdvdCBgTlRGU19JT0NfU1RSRUFNX1JFQURgLCBgTlRGU19JT0NfU1RSRUFNX1dSSVRFYCwgYE5URlNfSU9DX1NUUkVBTV9SRU1PVkVgLCBhbmQgYE5URlNfSU9DX0xJU1RfU1RSRUFNU2AuIEludGVyZXN0aW5nLiBUaGVzZSBkZWZpbml0ZWx5IHdhcnJhbnQgYSBjbG9zZXIgbG9vayB3aXRoIGZ1enppbmcuCgpNeSBwcmltYXJ5IGZvY3VzIGhlcmUgd2lsbCBiZSBgbnRmc19pb2N0bGAuIEl0IGFwcGVhcnMgdG8gYmUgdGhlIGVudHJ5IHBvaW50IGZvciBoYW5kbGluZyB0aGVzZSBuZXcgaW9jdGxzLiBMZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBjb2RlIGRpZmYgcXVpY2tseSB0byBjb25maXJtIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zLiBPa2F5LCBgbnRmc19yZWFkX25hbWVkX3N0cmVhbWAsIGBudGZzX3dyaXRlX25hbWVkX3N0cmVhbWAsIGBudGZzX3JlbW92ZV9uYW1lZF9zdHJlYW1gLCBgbnRmc19pb2N0bF9zdHJlYW1gLCBhbmQgYG50ZnNfaW9jdGxfbGlzdF9zdHJlYW1zYCBhcmUgYWxsIHN0YXRpYyBoZWxwZXJzLiBKdXN0IGBudGZzX2lvY3RsYCBpcyBub24tc3RhdGljLgoKTm93LCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgYG50ZnNfaW9jdGxgIGlzIGFjdHVhbGx5IGV4cG9ydGVkIGFuZCB1c2VkIG91dHNpZGUgb2YgYGZzL250ZnMvZmlsZS5jYC4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCBmdXp6aW5nIHBvdGVudGlhbCBsaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxNzoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtudGZzX2lvY3RsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbnRmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbnRmcy9kaXIuYz0xMTk1PWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbnRmc19kaXJfb3BzID0ge1xuLS1cbmZzL250ZnMvZGlyLmMtMTIwMS1cdC5yZWxlYXNlXHQ9IG50ZnNfZGlyX3JlbGVhc2UsXG5mcy9udGZzL2Rpci5jOjEyMDI6XHQudW5sb2NrZWRfaW9jdGxcdD0gbnRmc19pb2N0bCxcbmZzL250ZnMvZGlyLmMtMTIwMy0jaWZkZWYgQ09ORklHX0NPTVBBVFxuLS1cbmZzL250ZnMvZmlsZS5jPTc0MD1zdGF0aWMgc3NpemVfdCBudGZzX2ZpbGVfc3BsaWNlX3JlYWQoc3RydWN0IGZpbGUgKmluLCBsb2ZmX3QgKnBwb3MsXG4tLVxuZnMvbnRmcy9maWxlLmMtNzQ4LVxuZnMvbnRmcy9maWxlLmM6NzQ5OnN0YXRpYyBpbnQgbnRmc19pb2N0bF9zaHV0ZG93bihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIGFyZylcbmZzL250ZnMvZmlsZS5jLTc1MC17XG4tLVxuZnMvbnRmcy9maWxlLmMtNzYxLVxuZnMvbnRmcy9maWxlLmM6NzYyOnN0YXRpYyBpbnQgbnRmc19pb2N0bF9nZXRfdm9sdW1lX2xhYmVsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFyZylcbmZzL250ZnMvZmlsZS5jLTc2My17XG4tLVxuZnMvbnRmcy9maWxlLmMtNzg0LVxuZnMvbnRmcy9maWxlLmM6Nzg1OnN0YXRpYyBpbnQgbnRmc19pb2N0bF9zZXRfdm9sdW1lX2xhYmVsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFyZylcbmZzL250ZnMvZmlsZS5jLTc4Ni17XG4tLVxuZnMvbnRmcy9maWxlLmMtODA4LVxuZnMvbnRmcy9maWxlLmM6ODA5OnN0YXRpYyBpbnQgbnRmc19pb2N0bF9maXRyaW0oc3RydWN0IG50ZnNfdm9sdW1lICp2b2wsIHVuc2lnbmVkIGxvbmcgYXJnKVxuZnMvbnRmcy9maWxlLmMtODEwLXtcbi0tXG5mcy9udGZzL2ZpbGUuYz0xMDMxPWVudW0gbnRmc19zdHJlYW1fb3Age1xuLS1cbmZzL250ZnMvZmlsZS5jLTEwMzYtXG5mcy9udGZzL2ZpbGUuYzoxMDM3OnN0YXRpYyBsb25nIG50ZnNfaW9jdGxfc3RyZWFtKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFyZyxcbmZzL250ZnMvZmlsZS5jLTEwMzgtXHRcdFx0ICAgICAgZW51bSBudGZzX3N0cmVhbV9vcCBvcClcbi0tXG5mcy9udGZzL2ZpbGUuYy0xMTc2LVxuZnMvbnRmcy9maWxlLmM6MTE3NzpzdGF0aWMgaW50IG50ZnNfaW9jdGxfbGlzdF9zdHJlYW1zKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFyZylcbmZzL250ZnMvZmlsZS5jLTExNzgte1xuLS1cbmZzL250ZnMvZmlsZS5jLTEzNDItXG5mcy9udGZzL2ZpbGUuYzoxMzQzOmxvbmcgbnRmc19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG5mcy9udGZzL2ZpbGUuYy0xMzQ0LXtcbi0tXG5mcy9udGZzL2ZpbGUuYy0xMzQ2LVx0Y2FzZSBGU19JT0NfU0hVVERPV046XG5mcy9udGZzL2ZpbGUuYzoxMzQ3Olx0XHRyZXR1cm4gbnRmc19pb2N0bF9zaHV0ZG93bihmaWxlX2lub2RlKGZpbHApLVx1MDAzZWlfc2IsIGFyZyk7XG5mcy9udGZzL2ZpbGUuYy0xMzQ4LVx0Y2FzZSBGU19JT0NfR0VURlNMQUJFTDpcbmZzL250ZnMvZmlsZS5jOjEzNDk6XHRcdHJldHVybiBudGZzX2lvY3RsX2dldF92b2x1bWVfbGFiZWwoZmlscCwgYXJnKTtcbmZzL250ZnMvZmlsZS5jLTEzNTAtXHRjYXNlIEZTX0lPQ19TRVRGU0xBQkVMOlxuZnMvbnRmcy9maWxlLmM6MTM1MTpcdFx0cmV0dXJuIG50ZnNfaW9jdGxfc2V0X3ZvbHVtZV9sYWJlbChmaWxwLCBhcmcpO1xuZnMvbnRmcy9maWxlLmMtMTM1Mi1cdGNhc2UgRklUUklNOlxuZnMvbnRmcy9maWxlLmM6MTM1MzpcdFx0cmV0dXJuIG50ZnNfaW9jdGxfZml0cmltKE5URlNfU0IoZmlsZV9pbm9kZShmaWxwKS1cdTAwM2VpX3NiKSwgYXJnKTtcbmZzL250ZnMvZmlsZS5jLTEzNTQtXHRjYXNlIE5URlNfSU9DX1NUUkVBTV9SRUFEOlxuZnMvbnRmcy9maWxlLmM6MTM1NTpcdFx0cmV0dXJuIG50ZnNfaW9jdGxfc3RyZWFtKGZpbHAsIGFyZywgTlRGU19TVFJFQU1fT1BfUkVBRCk7XG5mcy9udGZzL2ZpbGUuYy0xMzU2LVx0Y2FzZSBOVEZTX0lPQ19TVFJFQU1fV1JJVEU6XG5mcy9udGZzL2ZpbGUuYzoxMzU3Olx0XHRyZXR1cm4gbnRmc19pb2N0bF9zdHJlYW0oZmlscCwgYXJnLCBOVEZTX1NUUkVBTV9PUF9XUklURSk7XG5mcy9udGZzL2ZpbGUuYy0xMzU4LVx0Y2FzZSBOVEZTX0lPQ19TVFJFQU1fUkVNT1ZFOlxuZnMvbnRmcy9maWxlLmM6MTM1OTpcdFx0cmV0dXJuIG50ZnNfaW9jdGxfc3RyZWFtKGZpbHAsIGFyZywgTlRGU19TVFJFQU1fT1BfUkVNT1ZFKTtcbmZzL250ZnMvZmlsZS5jLTEzNjAtXHRjYXNlIE5URlNfSU9DX0xJU1RfU1RSRUFNUzpcbmZzL250ZnMvZmlsZS5jOjEzNjE6XHRcdHJldHVybiBudGZzX2lvY3RsX2xpc3Rfc3RyZWFtcyhmaWxwLCBhcmcpO1xuZnMvbnRmcy9maWxlLmMtMTM2Mi1cdGRlZmF1bHQ6XG4tLVxuZnMvbnRmcy9maWxlLmM9MTM2OD1sb25nIG50ZnNfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLFxuLS1cbmZzL250ZnMvZmlsZS5jLTEzNzAte1xuZnMvbnRmcy9maWxlLmM6MTM3MTpcdHJldHVybiBudGZzX2lvY3RsKGZpbHAsIGNtZCwgKHVuc2lnbmVkIGxvbmcpY29tcGF0X3B0cihhcmcpKTtcbmZzL250ZnMvZmlsZS5jLTEzNzItfVxuLS1cbmZzL250ZnMvZmlsZS5jPTE2ODQ9Y29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBudGZzX2ZpbGVfb3BzID0ge1xuLS1cbmZzL250ZnMvZmlsZS5jLTE2OTMtXHQuc3BsaWNlX3dyaXRlXHQ9IGl0ZXJfZmlsZV9zcGxpY2Vfd3JpdGUsXG5mcy9udGZzL2ZpbGUuYzoxNjk0Olx0LnVubG9ja2VkX2lvY3RsXHQ9IG50ZnNfaW9jdGwsXG5mcy9udGZzL2ZpbGUuYy0xNjk1LSNpZmRlZiBDT05GSUdfQ09NUEFUXG4tLVxuZnMvbnRmcy9udGZzLmg9MjUzPWludCBudGZzX2ZvcmNlX3NodXRkb3duKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBmbGFncyk7XG5mcy9udGZzL250ZnMuaDoyNTQ6bG9uZyBudGZzX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7XG5mcy9udGZzL250ZnMuaC0yNTUtI2lmZGVmIENPTkZJR19DT01QQVRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTc6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc2ODEKCQkJCQkJCW91dHB1dDogODMKCQkJCQkJCXRob3VnaHRzOiA5NTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgTlRGUyBJb2N0bCBQYXRjaCBmb3IgRnV6emluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIGZvciBmdXp6aW5nLiBgbnRmc19pb2N0bGAgaW1tZWRpYXRlbHkganVtcHMgb3V0IGFzIHRoZSBjZW50cmFsIHBvaW50IGhlcmUuIEl0JiMzOTtzIG5vbi1zdGF0aWMgYW5kIGFscmVhZHkgdXRpbGl6ZWQgd2l0aGluIGBudGZzX2Rpcl9vcHNgIGFuZCBgbnRmc19maWxlX29wc2AsIHNvIGl0JiMzOTtzIGNsZWFybHkgdGhlIHJpZ2h0IHN5bWJvbCB0byBmb2N1cyBvbi4KCkZpcnN0LCBJIHF1aWNrbHkgY29uZmlybWVkIHRoYXQgYGZzL250ZnNgIGlzIHN0aWxsIHByZXNlbnQgaW4gdGhlIGtlcm5lbCwgYW5kIHRoZSBwYXRjaCwgd2hpY2ggaW50cm9kdWNlcyB0aGUgbmV3IGlvY3Rscywgd2FzIGluZGVlZCBhcHBsaWVkIHRvIGBmcy9udGZzL2ZpbGUuY2AuIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsaXR5IGZvciBuYW1lZCBzdHJlYW1zLCBhZGRpbmcgYE5URlNfSU9DX1NUUkVBTV9SRUFEYCwgYE5URlNfSU9DX1NUUkVBTV9XUklURWAsIGBOVEZTX0lPQ19TVFJFQU1fUkVNT1ZFYCwgYW5kIGBOVEZTX0lPQ19MSVNUX1NUUkVBTVNgLCBhcyB3ZWxsIGFzIGEgY29ycmVzcG9uZGluZyBgdWFwaS9saW51eC9udGZzLmhgIGhlYWRlci4KCkkgY2hlY2tlZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLCBhbmQgYE5URlNfRlNgIGlzIHRoZSBvbmx5IG9uZSByZXF1aXJlZC4gTm8gZGVwZW5kZW5jZSBvbiBgTlRGU19GU19QT1NJWF9BQ0xgIG9yIGFueSBvdGhlciBvYnNjdXJlIHNldHRpbmdzLiBUaGlzIHNpbXBsaWZpZXMgdGhpbmdzLgoKQSBxdWljayByZXZpZXcgb2YgdGhlIG5ldyBmdW5jdGlvbnMgYWRkZWQgc2hvd2VkIHRoYXQgdGhleSBhcmUgYWxsIHN0YXRpYywgZXhjZXB0IGZvciBgbnRmc19pb2N0bGAsIHdoaWNoIGlzIGEga2V5IG1vZGlmaWNhdGlvbiB0byBoYW5kbGUgdGhlIG5ldyBpb2N0bHMuCgpMZXQgbWUgdGFrZSBhbm90aGVyIGxvb2sgYXQgdGhlIHBhdGNoIGl0c2VsZiB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmc6CmBgYGMKJiM0MztzdGF0aWMgaW50IG50ZnNfcmVhZF9uYW1lZF9zdHJlYW0oc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBfX2xlMTYgKnVuYW1lLAomIzQzOwkJdTMyIHVuYW1lX2xlbiwgdTY0IG9mZnNldCwgdTY0IGxlbiwgdm9pZCAqZGF0YV9idWYsCiYjNDM7CQl1NjQgKnJieXRlcykKLi4uCiYjNDM7c3RhdGljIGludCBudGZzX3dyaXRlX25hbWVkX3N0cmVhbShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIF9fbGUxNiAqdW5hbWUsCiYjNDM7CQl1MzIgdW5hbWVfbGVuLCB1NjQgb2Zmc2V0LCB1NjQgbGVuLCB2b2lkICpkYXRhX3N0cmVhbSwKJiM0MzsJCXU2NCAqd2J5dGVzKQouLi4KJiM0MztzdGF0aWMgaW50IG50ZnNfcmVtb3ZlX25hbWVkX3N0cmVhbShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIF9fbGUxNiAqdW5hbWUsCiYjNDM7CQl1MzIgdW5hbWVfbGVuKQouLi4KJiM0MztzdGF0aWMgbG9uZyBudGZzX2lvY3RsX3N0cmVhbShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhcmcsCiYjNDM7CQkJICAgICAgZW51bSBudGZzX3N0cmVhbV9vcCBvcCkKLi4uCiYjNDM7c3RhdGljIGludCBudGZzX2lvY3RsX2xpc3Rfc3RyZWFtcyhzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhcmcpCi4uLgogbG9uZyBudGZzX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlzd2l0Y2ggKGNtZCkgewpAQCAtODUwLDYgJiM0MzsxMzUxLDE0IEBAIGxvbmcgbnRmc19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiAJCXJldHVybiBudGZzX2lvY3RsX3NldF92b2x1bWVfbGFiZWwoZmlscCwgYXJnKTsKIAljYXNlIEZJVFJJTToKIAkJcmV0dXJuIG50ZnNfaW9jdGxfZml0cmltKE5URlNfU0IoZmlsZV9pbm9kZShmaWxwKS0mZ3Q7aV9zYiksIGFyZyk7CiYjNDM7CWNhc2UgTlRGU19JT0NfU1RSRUFNX1JFQUQ6CiYjNDM7CQlyZXR1cm4gbnRmc19pb2N0bF9zdHJlYW0oZmlscCwgYXJnLCBOVEZTX1NUUkVBTV9PUF9SRUFEKTsKJiM0MzsJY2FzZSBOVEZTX0lPQ19TVFJFQU1fV1JJVEU6CiYjNDM7CQlyZXR1cm4gbnRmc19pb2N0bF9zdHJlYW0oZmlscCwgYXJnLCBOVEZTX1NUUkVBTV9PUF9XUklURSk7CiYjNDM7CWNhc2UgTlRGU19JT0NfU1RSRUFNX1JFTU9WRToKJiM0MzsJCXJldHVybiBudGZzX2lvY3RsX3N0cmVhbShmaWxwLCBhcmcsIE5URlNfU1RSRUFNX09QX1JFTU9WRSk7CiYjNDM7CWNhc2UgTlRGU19JT0NfTElTVF9TVFJFQU1TOgomIzQzOwkJcmV0dXJuIG50ZnNfaW9jdGxfbGlzdF9zdHJlYW1zKGZpbHAsIGFyZyk7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FTk9UVFk7CiAJfQpgYGAKCkluZGVlZCwgdGhlIHBhdGNoIGlzIGZ1bmN0aW9uYWwgYW5kIGFkZHMgZnVuY3Rpb25hbGl0eSByZWxhdGVkIHRvIG5hbWVkIHN0cmVhbXMgKEFsdGVybmF0ZSBEYXRhIFN0cmVhbXMpIHRvIE5URlMsIGFsbCByZWFjaGFibGUgdGhyb3VnaCBgbnRmc19pb2N0bGAuIEl0JiMzOTtzIGNsZWFybHkgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuCgpNeSBjb25jbHVzaW9uIGlzOgoKQ29uZmlnczogYE5URlNfRlNgCkZvY3VzIFN5bWJvbDogYG50ZnNfaW9jdGxgClJlYXNvbmluZzogVGhlIHBhdGNoIGFkZHMgbmV3IGlvY3RscyB0byB0aGUgTlRGUyBmaWxlc3lzdGVtIHRvIHJlYWQsIHdyaXRlLCByZW1vdmUsIGFuZCBsaXN0IG5hbWVkIHN0cmVhbXMuIFRoZXNlIGlvY3RscyBhcmUgYWxsIGhhbmRsZWQgd2l0aGluIGBudGZzX2lvY3RsYC4gYE5URlNfRlNgIGlzIHRoZSBvbmx5IGNvbmZpZyBuZWVkZWQuCkkmIzM5O2xsIG5vdyBwcm92aWRlIHRoZSByZWxldmFudCByZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxNzoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TlRGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O250ZnNfaW9jdGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBuZXcgaW9jdGxzIHRvIHRoZSBOVEZTIGZpbGVzeXN0ZW0gdG8gcmVhZCwgd3JpdGUsIHJlbW92ZSwgYW5kIGxpc3QgbmFtZWQgc3RyZWFtcyAoQWx0ZXJuYXRlIERhdGEgU3RyZWFtcykuIFRoZSBpb2N0bHMgYXJlIHJlYWNoYWJsZSB2aWEgYG50ZnNfaW9jdGxgLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtOVEZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bnRmc19pb2N0bCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIG5ldyBpb2N0bHMgdG8gdGhlIE5URlMgZmlsZXN5c3RlbSB0byByZWFkLCB3cml0ZSwgcmVtb3ZlLCBhbmQgbGlzdCBuYW1lZCBzdHJlYW1zIChBbHRlcm5hdGUgRGF0YSBTdHJlYW1zKS4gVGhlIGlvY3RscyBhcmUgcmVhY2hhYmxlIHZpYSBgbnRmc19pb2N0bGAuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxNzoxMTozMy4xMDQ3NTc2NjVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTA1NDc2MzE1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJOVEZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibnRmc19pb2N0bFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgbmV3IGlvY3RscyB0byB0aGUgTlRGUyBmaWxlc3lzdGVtIHRvIHJlYWQsIHdyaXRlLCByZW1vdmUsIGFuZCBsaXN0IG5hbWVkIHN0cmVhbXMgKEFsdGVybmF0ZSBEYXRhIFN0cmVhbXMpLiBUaGUgaW9jdGxzIGFyZSByZWFjaGFibGUgdmlhIGBudGZzX2lvY3RsYC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTc6MTE6MzMuMTA0NzY4MDE1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzEwMzYzNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBjMmQ1NTYzN2YzN2I2M2Y0YjcxMDgxYjc4MDRhZDljZTc5NGYyYWE5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVsIDMwIDE3OjExOjMyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdXNlcnNwYWNlLWFwaS9pb2N0bC9pb2N0bC1udW1iZXIucnN0IGIvRG9jdW1lbnRhdGlvbi91c2Vyc3BhY2UtYXBpL2lvY3RsL2lvY3RsLW51bWJlci5yc3RcXG5pbmRleCAzZjBlZjFlMjdlYjA3Li4yYjk4NjlhZWI4MTFiIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vdXNlcnNwYWNlLWFwaS9pb2N0bC9pb2N0bC1udW1iZXIucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi91c2Vyc3BhY2UtYXBpL2lvY3RsL2lvY3RsLW51bWJlci5yc3RcXG5AQCAtMzk5LDYgKzM5OSw3IEBAIENvZGUgIFNlcSMgICAgSW5jbHVkZSBGaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tbWVudHNcXG4gMHhFNSAgMDAtM0YgIGxpbnV4L2Z1c2UuaFxcbiAweEVDICAwMC0wMSAgZHJpdmVycy9wbGF0Zm9ybS9jaHJvbWUvY3Jvc19lY19kZXYuaCAgICAgICAgICAgICAgICAgICAgIENocm9tZU9TIEVDIGRyaXZlclxcbiAweEVFICAwMC0wOSAgdWFwaS9saW51eC9wZnJ1dC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsYXRmb3JtIEZpcm13YXJlIFJ1bnRpbWUgVXBkYXRlIGFuZCBUZWxlbWV0cnlcXG4rMHhFRiAgMDAtMEYgIHVhcGkvbGludXgvbnRmcy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVEZTXFxuIDB4RjMgIDAwLTNGICBkcml2ZXJzL3VzYi9taXNjL3Npc3VzYnZnYS9zaXN1c2IuaCAgICAgICAgICAgICAgICAgICAgICAgc2lzZmIgKGluIGRldmVsb3BtZW50KVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcdTAwM2NtYWlsdG86dGhvbWFzQHdpbmlzY2hob2Zlci5uZXRcXHUwMDNlXFxuIDB4RjYgIGFsbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRUbmcgTGludXggVHJhY2UgVG9vbGtpdCBOZXh0IEdlbmVyYXRpb25cXG5kaWZmIC0tZ2l0IGEvZnMvbnRmcy9maWxlLmMgYi9mcy9udGZzL2ZpbGUuY1xcbmluZGV4IGQ0MjgyODIyYjNjZWYuLjk2MWI5NGY1NDVmMmMgMTAwNjQ0XFxuLS0tIGEvZnMvbnRmcy9maWxlLmNcXG4rKysgYi9mcy9udGZzL2ZpbGUuY1xcbkBAIC0xNSw2ICsxNSw4IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wb3NpeF9hY2xfeGF0dHIuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NvbXBhdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZmFsbG9jLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9vdmVyZmxvdy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjdWFwaS9saW51eC9udGZzLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXFwibGNuYWxsb2MuaFxcXCJcXG4gI2luY2x1ZGUgXFxcIm50ZnMuaFxcXCJcXG5AQCAtMjMsNiArMjUsNyBAQFxcbiAjaW5jbHVkZSBcXFwiaW9tYXAuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImJpdG1hcC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwidm9sdW1lLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJtZnQuaFxcXCJcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9maWxlbG9jay5oXFx1MDAzZVxcbiBcXG5AQCAtODM5LDYgKzg0Miw1MDQgQEAgc3RhdGljIGludCBudGZzX2lvY3RsX2ZpdHJpbShzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbisjZGVmaW5lIE5URlNfU1RSRUFNX01BWF9JT1xcdCgxNiAqIDEwMjQgKiAxMDI0KSAvKiAxNk1CIGxpbWl0ICovXFxuK1xcbisvKlxcbisgKiBudGZzX3JlYWRfbmFtZWRfc3RyZWFtIC0gUmVhZCBkYXRhIGZyb20gYSBuYW1lZCAkREFUQSBzdHJlYW0uXFxuKyAqXFxuKyAqIEBuaTpcXHRcXHROVEZTIGlub2RlXFxuKyAqIEB1bmFtZTpcXHRTdHJlYW0gbmFtZVxcbisgKiBAdW5hbWVfbGVuOlxcdExlbmd0aCBvZiBuYW1lIGluIFVuaWNvZGUgY2hhcmFjdGVyc1xcbisgKiBAb2Zmc2V0OlxcdEJ5dGUgb2Zmc2V0IGluIHRoZSBzdHJlYW1cXG4rICogQGxlbjpcXHROdW1iZXIgb2YgYnl0ZXMgdG8gcmVhZFxcbisgKiBAZGF0YV9idWY6XFx0QnVmZmVyIHRvIGNvcHkgZGF0YSB0b1xcbisgKlxcbisgKiBSZXR1cm46XFx0MCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS5cXG4rICpcXHRcXHRJZiBvZmZzZXQgXFx1MDAzZT0gc3RyZWFtIHNpemUsIHJldHVybnMgMC5cXG4rICovXFxuK3N0YXRpYyBpbnQgbnRmc19yZWFkX25hbWVkX3N0cmVhbShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIF9fbGUxNiAqdW5hbWUsXFxuK1xcdFxcdHUzMiB1bmFtZV9sZW4sIHU2NCBvZmZzZXQsIHU2NCBsZW4sIHZvaWQgKmRhdGFfYnVmLFxcbitcXHRcXHR1NjQgKnJieXRlcylcXG4re1xcbitcXHRzdHJ1Y3QgbnRmc19hdHRyX3NlYXJjaF9jdHggKmN0eDtcXG4rXFx0c3RydWN0IGlub2RlICphdHRyX3ZpO1xcbitcXHRpbnQgZXJyID0gMDtcXG4rXFx0dTY0IGRhdGFfc2l6ZTtcXG4rXFx0czY0IGJ5dGVzO1xcbitcXHRjaGFyICpyYnVmID0gTlVMTDtcXG4rXFxuK1xcdGlmICghbmkgfHwgIXVuYW1lIHx8IHVuYW1lX2xlbiA9PSAwKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGlmIChsZW4gPT0gMCB8fCBsZW4gXFx1MDAzZSBOVEZTX1NUUkVBTV9NQVhfSU8pXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2bmktXFx1MDAzZW1yZWNfbG9jayk7XFxuK1xcdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuaSwgTlVMTCk7XFxuK1xcdGlmICghY3R4KSB7XFxuK1xcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bmktXFx1MDAzZW1yZWNfbG9jayk7XFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHR9XFxuK1xcbitcXHRlcnIgPSBudGZzX2F0dHJfbG9va3VwKEFUX0RBVEEsIHVuYW1lLCB1bmFtZV9sZW4sIENBU0VfU0VOU0lUSVZFLCAwLFxcbitcXHRcXHRcXHROVUxMLCAwLCBjdHgpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIG91dF9sb2NrO1xcbitcXG4rXFx0aWYgKGN0eC1cXHUwMDNlYXR0ci1cXHUwMDNlbm9uX3Jlc2lkZW50KVxcbitcXHRcXHRkYXRhX3NpemUgPSBsZTY0X3RvX2NwdShjdHgtXFx1MDAzZWF0dHItXFx1MDAzZWRhdGEubm9uX3Jlc2lkZW50LmRhdGFfc2l6ZSk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0ZGF0YV9zaXplID0gbGUzMl90b19jcHUoY3R4LVxcdTAwM2VhdHRyLVxcdTAwM2VkYXRhLnJlc2lkZW50LnZhbHVlX2xlbmd0aCk7XFxuK1xcbitcXHRpZiAob2Zmc2V0IFxcdTAwM2U9IGRhdGFfc2l6ZSkge1xcbitcXHRcXHQqcmJ5dGVzID0gMDtcXG4rXFx0XFx0LyogRU9GOiBub3RoaW5nIHRvIHJlYWQgKi9cXG4rXFx0XFx0Z290byBvdXRfbG9jaztcXG4rXFx0fVxcbitcXG4rXFx0LyogQWRqdXN0IGxlbmd0aCB0byBub3QgcmVhZCBiZXlvbmQgRU9GICovXFxuK1xcdGlmIChsZW4gXFx1MDAzZSBkYXRhX3NpemUgLSBvZmZzZXQpXFxuK1xcdFxcdGxlbiA9IGRhdGFfc2l6ZSAtIG9mZnNldDtcXG4rXFxuK1xcdGF0dHJfdmkgPSBudGZzX2F0dHJfaWdldChWRlNfSShuaSksIEFUX0RBVEEsIHVuYW1lLCB1bmFtZV9sZW4pO1xcbitcXHRudGZzX2F0dHJfcHV0X3NlYXJjaF9jdHgoY3R4KTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZuaS1cXHUwMDNlbXJlY19sb2NrKTtcXG4rXFxuK1xcdGlmIChJU19FUlIoYXR0cl92aSkpIHtcXG4rXFx0XFx0ZXJyID0gUFRSX0VSUihhdHRyX3ZpKTtcXG4rXFx0XFx0Z290byBvdXRfZnJlZTtcXG4rXFx0fVxcbitcXG4rXFx0cmJ1ZiA9IGt2emFsbG9jKGxlbiwgR0ZQX05PRlMpO1xcbitcXHRpZiAoIXJidWYpIHtcXG4rXFx0XFx0ZXJyID0gLUVOT01FTTtcXG4rXFx0XFx0aXB1dChhdHRyX3ZpKTtcXG4rXFx0XFx0Z290byBvdXRfZnJlZTtcXG4rXFx0fVxcbitcXG4rXFx0Ynl0ZXMgPSBudGZzX2lub2RlX2F0dHJfcHJlYWQoYXR0cl92aSwgb2Zmc2V0LCBsZW4sIHJidWYpO1xcbitcXHRpcHV0KGF0dHJfdmkpO1xcbitcXHRpZiAoYnl0ZXMgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdGVyciA9IGJ5dGVzO1xcbitcXHRcXHRnb3RvIG91dF9mcmVlO1xcbitcXHR9XFxuK1xcbitcXHQqcmJ5dGVzID0gYnl0ZXM7XFxuK1xcdG1lbWNweShkYXRhX2J1ZiwgcmJ1ZiwgYnl0ZXMpO1xcbitcXG4rb3V0X2ZyZWU6XFxuK1xcdGt2ZnJlZShyYnVmKTtcXG4rXFx0cmV0dXJuIGVycjtcXG4rXFxuK291dF9sb2NrOlxcbitcXHRudGZzX2F0dHJfcHV0X3NlYXJjaF9jdHgoY3R4KTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZuaS1cXHUwMDNlbXJlY19sb2NrKTtcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4rLypcXG4rICogbnRmc193cml0ZV9uYW1lZF9zdHJlYW0gLSBXcml0ZSBkYXRhIGZyb20gYSBuYW1lZCAkREFUQSBzdHJlYW0uXFxuKyAqXFxuKyAqIEBuaTpcXHRcXHROVEZTIGlub2RlXFxuKyAqIEB1bmFtZTpcXHRTdHJlYW0gbmFtZVxcbisgKiBAdW5hbWVfbGVuOlxcdExlbmd0aCBvZiBuYW1lIGluIFVuaWNvZGUgY2hhcmFjdGVyc1xcbisgKiBAb2Zmc2V0OlxcdEJ5dGUgb2Zmc2V0IGluIHRoZSBzdHJlYW1cXG4rICogQGxlbjpcXHROdW1iZXIgb2YgYnl0ZXMgdG8gd3JpdGVcXG4rICogQGRhdGFfc3RyZWFtOiBEYXRhIHRvIHdyaXRlXFxuKyAqXFxuKyAqIFJldHVybjpcXHQwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlLlxcbisgKi9cXG4rc3RhdGljIGludCBudGZzX3dyaXRlX25hbWVkX3N0cmVhbShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIF9fbGUxNiAqdW5hbWUsXFxuK1xcdFxcdHUzMiB1bmFtZV9sZW4sIHU2NCBvZmZzZXQsIHU2NCBsZW4sIHZvaWQgKmRhdGFfc3RyZWFtLFxcbitcXHRcXHR1NjQgKndieXRlcylcXG4re1xcbitcXHRzdHJ1Y3QgbnRmc19hdHRyX3NlYXJjaF9jdHggKmN0eDtcXG4rXFx0c3RydWN0IGlub2RlICphdHRyX3ZpO1xcbitcXHRpbnQgZXJyO1xcbitcXHRzNjQgYnl0ZXM7XFxuK1xcbitcXHRpZiAoIW5pIHx8ICF1bmFtZSB8fCB1bmFtZV9sZW4gPT0gMCB8fCAhZGF0YV9zdHJlYW0pXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0aWYgKGxlbiA9PSAwIHx8IGxlbiBcXHUwMDNlIE5URlNfU1RSRUFNX01BWF9JTylcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZuaS1cXHUwMDNlbXJlY19sb2NrKTtcXG4rXFx0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBOVUxMKTtcXG4rXFx0aWYgKCFjdHgpIHtcXG4rXFx0XFx0ZXJyID0gLUVOT01FTTtcXG4rXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbitcXHR9XFxuK1xcbitcXHRlcnIgPSBudGZzX2F0dHJfbG9va3VwKEFUX0RBVEEsIHVuYW1lLCB1bmFtZV9sZW4sIENBU0VfU0VOU0lUSVZFLCAwLFxcbitcXHRcXHRcXHROVUxMLCAwLCBjdHgpO1xcbitcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdGlmIChlcnIgIT0gLUVOT0VOVClcXG4rXFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbitcXHRcXHRlcnIgPSBudGZzX2F0dHJfYWRkKG5pLCBBVF9EQVRBLCB1bmFtZSwgdW5hbWVfbGVuLCBOVUxMLCAwKTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbitcXHRcXHRtYXJrX21mdF9yZWNvcmRfZGlydHkobmkpO1xcbitcXHR9XFxuK1xcbitcXHRhdHRyX3ZpID0gbnRmc19hdHRyX2lnZXQoVkZTX0kobmkpLCBBVF9EQVRBLCB1bmFtZSwgdW5hbWVfbGVuKTtcXG4rXFx0bnRmc19hdHRyX3B1dF9zZWFyY2hfY3R4KGN0eCk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2bmktXFx1MDAzZW1yZWNfbG9jayk7XFxuK1xcbitcXHRpZiAoSVNfRVJSKGF0dHJfdmkpKSB7XFxuK1xcdFxcdGVyciA9IFBUUl9FUlIoYXR0cl92aSk7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcbitcXHRieXRlcyA9IG50ZnNfaW5vZGVfYXR0cl9wd3JpdGUoYXR0cl92aSwgb2Zmc2V0LCBsZW4sIGRhdGFfc3RyZWFtLFxcbitcXHRcXHRcXHRcXHQgICAgICAgZmFsc2UpO1xcbitcXHRpZiAoYnl0ZXMgXFx1MDAzYyAwKVxcbitcXHRcXHRlcnIgPSBieXRlcztcXG4rXFx0ZWxzZVxcbitcXHRcXHQqd2J5dGVzID0gYnl0ZXM7XFxuK1xcdGlwdXQoYXR0cl92aSk7XFxuK1xcbitvdXQ6XFxuK1xcdHJldHVybiBlcnI7XFxuK1xcbitvdXRfdW5sb2NrOlxcbitcXHRpZiAoY3R4KVxcbitcXHRcXHRudGZzX2F0dHJfcHV0X3NlYXJjaF9jdHgoY3R4KTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZuaS1cXHUwMDNlbXJlY19sb2NrKTtcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4rLypcXG4rICogbnRmc19yZW1vdmVfbmFtZWRfc3RyZWFtIC0gUmVtb3ZlIGEgbmFtZWQgJERBVEEgc3RyZWFtLlxcbisgKlxcbisgKiBAbmk6XFx0XFx0TlRGUyBpbm9kZVxcbisgKiBAdW5hbWU6XFx0U3RyZWFtIG5hbWVcXG4rICogQHVuYW1lX2xlbjpcXHROYW1lIGxlbmd0aCBpbiBVbmljb2RlIGNoYXJhY3RlcnNcXG4rICpcXG4rICogUmV0dXJuOlxcdDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3JcXG4rICogICAgICAgICAgICAgIC1FTk9FTlQgaWYgc3RyZWFtIG5vdCBmb3VuZFxcbisgKi9cXG4rc3RhdGljIGludCBudGZzX3JlbW92ZV9uYW1lZF9zdHJlYW0oc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBfX2xlMTYgKnVuYW1lLFxcbitcXHRcXHR1MzIgdW5hbWVfbGVuKVxcbit7XFxuK1xcdGlmICghbmkgfHwgIXVuYW1lIHx8IHVuYW1lX2xlbiA9PSAwKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdHJldHVybiBudGZzX2F0dHJfcmVtb3ZlKG5pLCBBVF9EQVRBLCB1bmFtZSwgdW5hbWVfbGVuKTtcXG4rfVxcbitcXG4rZW51bSBudGZzX3N0cmVhbV9vcCB7XFxuK1xcdE5URlNfU1RSRUFNX09QX1JFQUQsXFxuK1xcdE5URlNfU1RSRUFNX09QX1dSSVRFLFxcbitcXHROVEZTX1NUUkVBTV9PUF9SRU1PVkUsXFxuK307XFxuK1xcbitzdGF0aWMgbG9uZyBudGZzX2lvY3RsX3N0cmVhbShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhcmcsXFxuK1xcdFxcdFxcdCAgICAgIGVudW0gbnRmc19zdHJlYW1fb3Agb3ApXFxuK3tcXG4rXFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoZmlscCk7XFxuK1xcdHN0cnVjdCBudGZzX2lub2RlICpuaSA9IE5URlNfSShpbm9kZSk7XFxuK1xcdHN0cnVjdCBudGZzX3N0cmVhbSBfX3VzZXIgKnVyZXEgPVxcbitcXHRcXHQoc3RydWN0IG50ZnNfc3RyZWFtIF9fdXNlciAqKWFyZztcXG4rXFx0c3RydWN0IG50ZnNfc3RyZWFtICpyZXE7XFxuK1xcdHNpemVfdCBoZWFkZXJfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgbnRmc19zdHJlYW0pO1xcbitcXHRzaXplX3QgZGF0YV9zaXplLCB0b3RhbF9zaXplO1xcbitcXHRjaGFyICprbmFtZSwgKmtkYXRhO1xcbitcXHRfX2xlMTYgKnVuYW1lID0gTlVMTCwgKnNuYW1lO1xcbitcXHRpbnQgZXJyID0gMCwgc25hbWVfbGVuO1xcbitcXHRib29sIHV0ZjE2O1xcbitcXHRzdHJ1Y3QgbnRmc19zdHJlYW0gaGRyO1xcbitcXG4rXFx0LyogRmlyc3QgY29weSBmaXhlZCBoZWFkZXIgKi9cXG4rXFx0aWYgKGNvcHlfZnJvbV91c2VyKFxcdTAwMjZoZHIsIHVyZXEsIGhlYWRlcl9zaXplKSlcXG4rXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuK1xcbitcXHRpZiAoaGRyLmlvX2xlbiBcXHUwMDNlIE5URlNfU1RSRUFNX01BWF9JTyB8fFxcbitcXHQgICAgKGhkci5mbGFncyBcXHUwMDI2IH5OVEZTX1NUUkVBTV9GTF9VVEYxNikgfHwgaGRyLnJlc2VydmVkKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdHV0ZjE2ID0gaGRyLmZsYWdzIFxcdTAwMjYgTlRGU19TVFJFQU1fRkxfVVRGMTY7XFxuK1xcbitcXHRpZiAoaGRyLm5hbWVfbGVuID09IDApXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRpZiAodXRmMTYpIHtcXG4rXFx0XFx0LyogVVRGLTE2TEUgYnl0ZSBjb3VudDogbXVzdCBiZSBldmVuIGFuZCB3aXRoaW4gdGhlIGxpbWl0LiAqL1xcbitcXHRcXHRpZiAoKGhkci5uYW1lX2xlbiBcXHUwMDI2IDEpIHx8XFxuK1xcdFxcdCAgICBoZHIubmFtZV9sZW4gXFx1MDAzZSBOVEZTX01BWF9OQU1FX0xFTiAqIHNpemVvZihfX2xlMTYpKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fSBlbHNlIGlmIChoZHIubmFtZV9sZW4gXFx1MDAzZSBOVEZTX01BWF9OQU1FX0xFTikge1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0c3dpdGNoIChvcCkge1xcbitcXHRjYXNlIE5URlNfU1RSRUFNX09QX1JFQUQ6XFxuK1xcdFxcdGlmICghKGZpbHAtXFx1MDAzZWZfbW9kZSBcXHUwMDI2IEZNT0RFX1JFQUQpIHx8IGhkci5pb19sZW4gPT0gMClcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdGRhdGFfc2l6ZSA9IGhkci5pb19sZW47XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIE5URlNfU1RSRUFNX09QX1dSSVRFOlxcbitcXHRcXHRpZiAoIShmaWxwLVxcdTAwM2VmX21vZGUgXFx1MDAyNiBGTU9ERV9XUklURSkgfHwgaGRyLmlvX2xlbiA9PSAwKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0ZGF0YV9zaXplID0gaGRyLmlvX2xlbjtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgTlRGU19TVFJFQU1fT1BfUkVNT1ZFOlxcbitcXHRcXHRpZiAoIShmaWxwLVxcdTAwM2VmX21vZGUgXFx1MDAyNiBGTU9ERV9XUklURSkgfHwgaGRyLmlvX2xlbiAhPSAwKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0ZGF0YV9zaXplID0gMDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiAtRU5PVFRZO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoY2hlY2tfYWRkX292ZXJmbG93KGhlYWRlcl9zaXplLCAoc2l6ZV90KWhkci5uYW1lX2xlbiwgXFx1MDAyNnRvdGFsX3NpemUpIHx8XFxuK1xcdCAgICBjaGVja19hZGRfb3ZlcmZsb3codG90YWxfc2l6ZSwgZGF0YV9zaXplLCBcXHUwMDI2dG90YWxfc2l6ZSkpXFxuK1xcdFxcdHJldHVybiAtRU9WRVJGTE9XO1xcbitcXG4rXFx0cmVxID0gbWVtZHVwX3VzZXIodXJlcSwgdG90YWxfc2l6ZSk7XFxuK1xcdGlmIChJU19FUlIocmVxKSlcXG4rXFx0XFx0cmV0dXJuIFBUUl9FUlIocmVxKTtcXG4rXFxuK1xcdHJlcS1cXHUwMDNlYnl0ZXNfcmV0dXJuZWQgPSAwO1xcbitcXG4rXFx0a25hbWUgPSAoY2hhciAqKXJlcS1cXHUwMDNlYnVmZmVyO1xcbitcXHRrZGF0YSA9IChjaGFyICopcmVxLVxcdTAwM2VidWZmZXIgKyByZXEtXFx1MDAzZW5hbWVfbGVuO1xcbitcXG4rXFx0aWYgKHJlcS1cXHUwMDNlbmFtZV9sZW4gIT0gaGRyLm5hbWVfbGVuIHx8IHJlcS1cXHUwMDNlaW9fbGVuICE9IGhkci5pb19sZW4gfHxcXG4rXFx0ICAgIHJlcS1cXHUwMDNlZmxhZ3MgIT0gaGRyLmZsYWdzIHx8IHJlcS1cXHUwMDNlcmVzZXJ2ZWQpIHtcXG4rXFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4rXFx0XFx0Z290byBvdXRfZnJlZTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHV0ZjE2KSB7XFxuK1xcdFxcdC8qIE5hbWUgaXMgYWxyZWFkeSBvbi1kaXNrIFVURi0xNkxFOyB1c2UgaXQgaW4gcGxhY2UuICovXFxuK1xcdFxcdHNuYW1lID0gKF9fbGUxNiAqKWtuYW1lO1xcbitcXHRcXHRzbmFtZV9sZW4gPSByZXEtXFx1MDAzZW5hbWVfbGVuIC8gc2l6ZW9mKF9fbGUxNik7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGlmIChtZW1jaHIoa25hbWUsICdcXFxcMCcsIHJlcS1cXHUwMDNlbmFtZV9sZW4pKSB7XFxuK1xcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuK1xcdFxcdFxcdGdvdG8gb3V0X2ZyZWU7XFxuK1xcdFxcdH1cXG4rXFx0XFx0c25hbWVfbGVuID0gbnRmc19ubHN0b3VjcyhuaS1cXHUwMDNldm9sLCBrbmFtZSwgcmVxLVxcdTAwM2VuYW1lX2xlbixcXG4rXFx0XFx0XFx0XFx0XFx1MDAyNnVuYW1lLCBOVEZTX01BWF9OQU1FX0xFTik7XFxuK1xcdFxcdGlmIChzbmFtZV9sZW4gXFx1MDAzYyAwKSB7XFxuK1xcdFxcdFxcdGVyciA9IHNuYW1lX2xlbjtcXG4rXFx0XFx0XFx0Z290byBvdXRfZnJlZTtcXG4rXFx0XFx0fVxcbitcXHRcXHRzbmFtZSA9IHVuYW1lO1xcbitcXHR9XFxuK1xcbitcXHRzd2l0Y2ggKG9wKSB7XFxuK1xcdGNhc2UgTlRGU19TVFJFQU1fT1BfUkVBRDpcXG4rXFx0XFx0ZXJyID0gbnRmc19yZWFkX25hbWVkX3N0cmVhbShuaSwgc25hbWUsIHNuYW1lX2xlbixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICByZXEtXFx1MDAzZXN0cmVhbV9vZmZzZXQsIHJlcS1cXHUwMDNlaW9fbGVuLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIGtkYXRhLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZyZXEtXFx1MDAzZWJ5dGVzX3JldHVybmVkKTtcXG4rXFx0XFx0aWYgKCFlcnIpIHtcXG4rXFx0XFx0XFx0aWYgKGNvcHlfdG9fdXNlcih1cmVxLCByZXEsXFxuK1xcdFxcdFxcdFxcdFxcdGhlYWRlcl9zaXplICsgcmVxLVxcdTAwM2VuYW1lX2xlbiArIHJlcS1cXHUwMDNlYnl0ZXNfcmV0dXJuZWQpKVxcbitcXHRcXHRcXHRcXHRlcnIgPSAtRUZBVUxUO1xcbitcXHRcXHR9XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIE5URlNfU1RSRUFNX09QX1dSSVRFOlxcbitcXHRcXHRlcnIgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbHApO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0ZXJyID0gbnRmc193cml0ZV9uYW1lZF9zdHJlYW0obmksIHNuYW1lLCBzbmFtZV9sZW4sXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIHJlcS1cXHUwMDNlc3RyZWFtX29mZnNldCwgcmVxLVxcdTAwM2Vpb19sZW4sXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIGtkYXRhLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2cmVxLVxcdTAwM2VieXRlc19yZXR1cm5lZCk7XFxuK1xcdFxcdG1udF9kcm9wX3dyaXRlX2ZpbGUoZmlscCk7XFxuK1xcdFxcdGlmICghZXJyKSB7XFxuK1xcdFxcdFxcdGlmIChjb3B5X3RvX3VzZXIoXFx1MDAyNnVyZXEtXFx1MDAzZWJ5dGVzX3JldHVybmVkLFxcbitcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNnJlcS1cXHUwMDNlYnl0ZXNfcmV0dXJuZWQsXFxuK1xcdFxcdFxcdFxcdFxcdCBzaXplb2YocmVxLVxcdTAwM2VieXRlc19yZXR1cm5lZCkpKVxcbitcXHRcXHRcXHRcXHRlcnIgPSAtRUZBVUxUO1xcbitcXHRcXHR9XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIE5URlNfU1RSRUFNX09QX1JFTU9WRTpcXG4rXFx0XFx0ZXJyID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxwKTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGVyciA9IG50ZnNfcmVtb3ZlX25hbWVkX3N0cmVhbShuaSwgc25hbWUsIHNuYW1lX2xlbik7XFxuK1xcdFxcdG1udF9kcm9wX3dyaXRlX2ZpbGUoZmlscCk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRlcnIgPSAtRU5PVFRZO1xcbitcXHR9XFxuK1xcbitvdXRfZnJlZTpcXG4rXFx0aWYgKHVuYW1lKVxcbitcXHRcXHRrbWVtX2NhY2hlX2ZyZWUobnRmc19uYW1lX2NhY2hlLCB1bmFtZSk7XFxuK1xcdGtmcmVlKHJlcSk7XFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgbnRmc19pb2N0bF9saXN0X3N0cmVhbXMoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbit7XFxuK1xcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGZpbHApO1xcbitcXHRzdHJ1Y3QgbnRmc19pbm9kZSAqbmkgPSBOVEZTX0koaW5vZGUpO1xcbitcXHRzdHJ1Y3QgbnRmc19saXN0X3N0cmVhbXMgaGRyO1xcbitcXHRzdHJ1Y3QgbnRmc19zdHJlYW1fZW50cnkgKmVudHJ5LCAqbGFzdF9lbnRyeSA9IE5VTEw7XFxuK1xcdHNpemVfdCByZXF1aXJlZCA9IDA7XFxuK1xcdHZvaWQgKmtidWYgPSBOVUxMO1xcbitcXHR2b2lkIF9fdXNlciAqdWJ1ZjtcXG4rXFx0c3RydWN0IGF0dHJfcmVjb3JkICphO1xcbitcXHRzdHJ1Y3QgbnRmc19hdHRyX3NlYXJjaF9jdHggKmFjdHg7XFxuK1xcdGludCByZXQgPSAwLCBlcnIsIGNvdW50ID0gMDtcXG4rXFx0c2l6ZV90IGVudHJ5X3NpemUsIG9mZnNldCA9IDA7XFxuK1xcdHVuc2lnbmVkIGludCBuYW1lX2xlbjtcXG4rXFx0dW5zaWduZWQgY2hhciAqc247XFxuK1xcdGJvb2wgdXRmMTY7XFxuK1xcbitcXHRpZiAoY29weV9mcm9tX3VzZXIoXFx1MDAyNmhkciwgKHZvaWQgX191c2VyICopYXJnLCBzaXplb2YoaGRyKSkpXFxuK1xcdFxcdHJldHVybiAtRUZBVUxUO1xcbitcXG4rXFx0aWYgKChoZHIuZmxhZ3MgXFx1MDAyNiB+TlRGU19TVFJFQU1fRkxfVVRGMTYpIHx8IGhkci5yZXNlcnZlZClcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHR1dGYxNiA9IGhkci5mbGFncyBcXHUwMDI2IE5URlNfU1RSRUFNX0ZMX1VURjE2O1xcbitcXG4rXFx0dWJ1ZiA9ICh2b2lkIF9fdXNlciAqKWFyZyArIHNpemVvZihoZHIpO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2bmktXFx1MDAzZW1yZWNfbG9jayk7XFxuK1xcdGFjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIE5VTEwpO1xcbitcXHRpZiAoIWFjdHgpIHtcXG4rXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZuaS1cXHUwMDNlbXJlY19sb2NrKTtcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdH1cXG4rXFxuK1xcdHdoaWxlICgoZXJyID0gbnRmc19hdHRyc193YWxrKGFjdHgpKSA9PSAwKSB7XFxuK1xcdFxcdGEgPSBhY3R4LVxcdTAwM2VhdHRyO1xcbitcXHRcXHRpZiAoYS1cXHUwMDNldHlwZSAhPSBBVF9EQVRBIHx8ICFhLVxcdTAwM2VuYW1lX2xlbmd0aClcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRpZiAodXRmMTYpIHtcXG4rXFx0XFx0XFx0bmFtZV9sZW4gPSBhLVxcdTAwM2VuYW1lX2xlbmd0aCAqIHNpemVvZihfX2xlMTYpO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRzbiA9IG50ZnNfYXR0cl9uYW1lX2dldChuaS1cXHUwMDNldm9sLFxcbitcXHRcXHRcXHRcXHRcXHQoX19sZTE2ICopKCh1OCAqKWEgKyBsZTE2X3RvX2NwdShhLVxcdTAwM2VuYW1lX29mZnNldCkpLFxcbitcXHRcXHRcXHRcXHRcXHRhLVxcdTAwM2VuYW1lX2xlbmd0aCk7XFxuK1xcdFxcdFxcdGlmICghc24pIHtcXG4rXFx0XFx0XFx0XFx0cmV0ID0gLUVJTztcXG4rXFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0bmFtZV9sZW4gPSBzdHJsZW4oc24pO1xcbitcXHRcXHRcXHRudGZzX2F0dHJfbmFtZV9mcmVlKFxcdTAwMjZzbik7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGVudHJ5X3NpemUgPSBzaXplb2YoKmVudHJ5KSArIG5hbWVfbGVuO1xcbitcXHRcXHRlbnRyeV9zaXplID0gQUxJR04oZW50cnlfc2l6ZSwgOCk7XFxuK1xcbitcXHRcXHRpZiAocmVxdWlyZWQgXFx1MDAzZSBTSVpFX01BWCAtIGVudHJ5X3NpemUpIHtcXG4rXFx0XFx0XFx0cmV0ID0gLUVPVkVSRkxPVztcXG4rXFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcdFxcdH1cXG4rXFx0XFx0cmVxdWlyZWQgKz0gZW50cnlfc2l6ZTtcXG4rXFx0XFx0Y291bnQrKztcXG4rXFx0fVxcbitcXHRpZiAoZXJyICE9IC1FTk9FTlQpIHtcXG4rXFx0XFx0cmV0ID0gZXJyO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4rXFx0aGRyLnN0cmVhbV9jb3VudCA9IGNvdW50O1xcbitcXHRoZHIuYnl0ZXNfcmV0dXJuZWQgPSByZXF1aXJlZDtcXG4rXFxuK1xcdGlmICghY291bnQpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0aWYgKGhkci5idWZmZXJfc2l6ZSBcXHUwMDNjIHJlcXVpcmVkKSB7XFxuK1xcdFxcdHJldCA9IC1FTk9TUEM7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcbitcXHRrYnVmID0ga3Z6YWxsb2MocmVxdWlyZWQsIEdGUF9OT0ZTKTtcXG4rXFx0aWYgKCFrYnVmKSB7XFxuK1xcdFxcdHJldCA9IC1FTk9NRU07XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcbitcXHRudGZzX2F0dHJfcmVpbml0X3NlYXJjaF9jdHgoYWN0eCk7XFxuK1xcdHdoaWxlICgoZXJyID0gbnRmc19hdHRyc193YWxrKGFjdHgpKSA9PSAwKSB7XFxuK1xcdFxcdGEgPSBhY3R4LVxcdTAwM2VhdHRyO1xcbitcXHRcXHRpZiAoYS1cXHUwMDNldHlwZSAhPSBBVF9EQVRBIHx8ICFhLVxcdTAwM2VuYW1lX2xlbmd0aClcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdGlmICh1dGYxNikge1xcbitcXHRcXHRcXHRzbiA9IE5VTEw7XFxuK1xcdFxcdFxcdG5hbWVfbGVuID0gYS1cXHUwMDNlbmFtZV9sZW5ndGggKiBzaXplb2YoX19sZTE2KTtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0c24gPSBudGZzX2F0dHJfbmFtZV9nZXQobmktXFx1MDAzZXZvbCxcXG4rXFx0XFx0XFx0XFx0XFx0KF9fbGUxNiAqKSgodTggKilhICsgbGUxNl90b19jcHUoYS1cXHUwMDNlbmFtZV9vZmZzZXQpKSxcXG4rXFx0XFx0XFx0XFx0XFx0YS1cXHUwMDNlbmFtZV9sZW5ndGgpO1xcbitcXHRcXHRcXHRpZiAoIXNuKSB7XFxuK1xcdFxcdFxcdFxcdHJldCA9IC1FSU87XFxuK1xcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdG5hbWVfbGVuID0gc3RybGVuKHNuKTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0ZW50cnlfc2l6ZSA9IHNpemVvZigqZW50cnkpICsgbmFtZV9sZW47XFxuK1xcdFxcdGVudHJ5X3NpemUgPSBBTElHTihlbnRyeV9zaXplLCA4KTtcXG4rXFx0XFx0aWYgKG9mZnNldCBcXHUwMDNlIHJlcXVpcmVkIC0gZW50cnlfc2l6ZSkge1xcbitcXHRcXHRcXHRyZXQgPSAtRU9WRVJGTE9XO1xcbitcXHRcXHRcXHRudGZzX2F0dHJfbmFtZV9mcmVlKFxcdTAwMjZzbik7XFxuK1xcdFxcdFxcdGdvdG8gb3V0O1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRlbnRyeSA9IChzdHJ1Y3QgbnRmc19zdHJlYW1fZW50cnkgKikoa2J1ZiArIG9mZnNldCk7XFxuK1xcbitcXHRcXHRpZiAoYS1cXHUwMDNlbm9uX3Jlc2lkZW50KSB7XFxuK1xcdFxcdFxcdGVudHJ5LVxcdTAwM2VzaXplID0gbGU2NF90b19jcHUoYS1cXHUwMDNlZGF0YS5ub25fcmVzaWRlbnQuZGF0YV9zaXplKTtcXG4rXFx0XFx0XFx0ZW50cnktXFx1MDAzZWFsbG9jX3NpemUgPVxcbitcXHRcXHRcXHRcXHRsZTY0X3RvX2NwdShhLVxcdTAwM2VkYXRhLm5vbl9yZXNpZGVudC5hbGxvY2F0ZWRfc2l6ZSk7XFxuK1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRlbnRyeS1cXHUwMDNlc2l6ZSA9IGxlMzJfdG9fY3B1KGEtXFx1MDAzZWRhdGEucmVzaWRlbnQudmFsdWVfbGVuZ3RoKTtcXG4rXFx0XFx0XFx0ZW50cnktXFx1MDAzZWFsbG9jX3NpemUgPSBsZTMyX3RvX2NwdShhLVxcdTAwM2VsZW5ndGgpIC1cXG4rXFx0XFx0XFx0XFx0bGUxNl90b19jcHUoYS1cXHUwMDNlZGF0YS5yZXNpZGVudC52YWx1ZV9vZmZzZXQpO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRlbnRyeS1cXHUwMDNlbmFtZV9sZW4gPSBuYW1lX2xlbjtcXG4rXFx0XFx0aWYgKHV0ZjE2KVxcbitcXHRcXHRcXHRtZW1jcHkoZW50cnktXFx1MDAzZW5hbWUsXFxuK1xcdFxcdFxcdCAgICAgICAodTggKilhICsgbGUxNl90b19jcHUoYS1cXHUwMDNlbmFtZV9vZmZzZXQpLCBuYW1lX2xlbik7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0bWVtY3B5KGVudHJ5LVxcdTAwM2VuYW1lLCBzbiwgbmFtZV9sZW4pO1xcbitcXHRcXHRudGZzX2F0dHJfbmFtZV9mcmVlKFxcdTAwMjZzbik7XFxuK1xcbitcXHRcXHRlbnRyeS1cXHUwMDNlbmV4dF9lbnRyeV9vZmYgPSBlbnRyeV9zaXplO1xcbitcXHRcXHRsYXN0X2VudHJ5ID0gZW50cnk7XFxuK1xcdFxcdG9mZnNldCArPSBlbnRyeV9zaXplO1xcbitcXHR9XFxuK1xcdGlmIChlcnIgIT0gLUVOT0VOVCkge1xcbitcXHRcXHRyZXQgPSBlcnI7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdC8qIFRoZSBjaGFpbiB0ZXJtaW5hdGVzIGF0IHRoZSBsYXN0IGVudHJ5LiAqL1xcbitcXHRcXHRpZiAobGFzdF9lbnRyeSlcXG4rXFx0XFx0XFx0bGFzdF9lbnRyeS1cXHUwMDNlbmV4dF9lbnRyeV9vZmYgPSAwO1xcbitcXHRcXHRoZHIuYnl0ZXNfcmV0dXJuZWQgPSBvZmZzZXQ7XFxuK1xcdH1cXG4rXFxuK291dDpcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZuaS1cXHUwMDNlbXJlY19sb2NrKTtcXG4rXFx0bnRmc19hdHRyX3B1dF9zZWFyY2hfY3R4KGFjdHgpO1xcbitcXG4rXFx0aWYgKHJldCBcXHUwMDI2XFx1MDAyNiByZXQgIT0gLUVOT1NQQylcXG4rXFx0XFx0Z290byBvdXRfZnJlZTtcXG4rXFxuK1xcdGlmICghcmV0IFxcdTAwMjZcXHUwMDI2IGtidWYgXFx1MDAyNlxcdTAwMjYgY29weV90b191c2VyKHVidWYsIGtidWYsIGhkci5ieXRlc19yZXR1cm5lZCkpIHtcXG4rXFx0XFx0cmV0ID0gLUVGQVVMVDtcXG4rXFx0XFx0Z290byBvdXRfZnJlZTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKilhcmcsIFxcdTAwMjZoZHIsIHNpemVvZihoZHIpKSlcXG4rXFx0XFx0cmV0ID0gLUVGQVVMVDtcXG4rXFxuK291dF9mcmVlOlxcbitcXHRrdmZyZWUoa2J1Zik7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuIGxvbmcgbnRmc19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuIHtcXG4gXFx0c3dpdGNoIChjbWQpIHtcXG5AQCAtODUwLDYgKzEzNTEsMTQgQEAgbG9uZyBudGZzX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcXG4gXFx0XFx0cmV0dXJuIG50ZnNfaW9jdGxfc2V0X3ZvbHVtZV9sYWJlbChmaWxwLCBhcmcpO1xcbiBcXHRjYXNlIEZJVFJJTTpcXG4gXFx0XFx0cmV0dXJuIG50ZnNfaW9jdGxfZml0cmltKE5URlNfU0IoZmlsZV9pbm9kZShmaWxwKS1cXHUwMDNlaV9zYiksIGFyZyk7XFxuK1xcdGNhc2UgTlRGU19JT0NfU1RSRUFNX1JFQUQ6XFxuK1xcdFxcdHJldHVybiBudGZzX2lvY3RsX3N0cmVhbShmaWxwLCBhcmcsIE5URlNfU1RSRUFNX09QX1JFQUQpO1xcbitcXHRjYXNlIE5URlNfSU9DX1NUUkVBTV9XUklURTpcXG4rXFx0XFx0cmV0dXJuIG50ZnNfaW9jdGxfc3RyZWFtKGZpbHAsIGFyZywgTlRGU19TVFJFQU1fT1BfV1JJVEUpO1xcbitcXHRjYXNlIE5URlNfSU9DX1NUUkVBTV9SRU1PVkU6XFxuK1xcdFxcdHJldHVybiBudGZzX2lvY3RsX3N0cmVhbShmaWxwLCBhcmcsIE5URlNfU1RSRUFNX09QX1JFTU9WRSk7XFxuK1xcdGNhc2UgTlRGU19JT0NfTElTVF9TVFJFQU1TOlxcbitcXHRcXHRyZXR1cm4gbnRmc19pb2N0bF9saXN0X3N0cmVhbXMoZmlscCwgYXJnKTtcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0cmV0dXJuIC1FTk9UVFk7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L250ZnMuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9udGZzLmhcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmE1NzgzZGMzYjkwNTRcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L250ZnMuaFxcbkBAIC0wLDAgKzEsMTE1IEBAXFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIFdJVEggTGludXgtc3lzY2FsbC1ub3RlICovXFxuKy8qXFxuKyAqIENvcHlyaWdodCAoYykgMjAyNiBMRyBFbGVjdHJvbmljcyBDby4sIEx0ZC5cXG4rICovXFxuK1xcbisjaWZuZGVmIF9VQVBJX0xJTlVYX05URlNfSFxcbisjZGVmaW5lIF9VQVBJX0xJTlVYX05URlNfSFxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdHlwZXMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lvY3RsLmhcXHUwMDNlXFxuK1xcbisjZGVmaW5lIE5URlNfSU9DX01BR0lDXFx0MHhFRlxcbitcXG4rLypcXG4rICogRmxhZ3MgZm9yIG50ZnNfc3RyZWFtLmZsYWdzIGFuZCBudGZzX2xpc3Rfc3RyZWFtcy5mbGFncy5cXG4rICpcXG4rICogVGhlIHN0cmVhbSBuYW1lIGlzIHJhdyBVVEYtMTZMRSwgZXhhY3RseSBhcyBzdG9yZWQgb24gZGlzaywgaW5zdGVhZCBvZlxcbisgKiBiZWluZyBlbmNvZGVkIHdpdGggdGhlIG1vdW50ZWQgZmlsZXN5c3RlbSBOTFMuIFRoaXMgYWxsb3dzIGxvc3NsZXNzXFxuKyAqIHJvdW5kLXRyaXBwaW5nIG9mIHN0cmVhbSBuYW1lcyB3aG9zZSBjaGFyYWN0ZXJzIGFyZSBub3QgcmVwcmVzZW50YWJsZVxcbisgKiBpbiB0aGUgbW91bnQgTkxTIChlLmcuIGZvciBXaW5lLCB3aGljaCB3b3JrcyBpbiBVVEYtMTYgbmF0aXZlbHkpLlxcbisgKiBXaGVuIHNldCwgdGhlIG5hbWUgbGVuZ3RoIGZpZWxkcyBjb3VudCBieXRlcyBvZiBVVEYtMTZMRSBhbmQgbXVzdFxcbisgKiB0aGVyZWZvcmUgYmUgZXZlbi5cXG4rICovXFxuKyNkZWZpbmUgTlRGU19TVFJFQU1fRkxfVVRGMTZcXHQweDFcXG4rXFxuKy8qXFxuKyAqIG50ZnMgbmFtZWQgc3RyZWFtIGlvY3RsIHN0cnVjdHVyZS5cXG4rICpcXG4rICogQHN0cmVhbV9vZmZzZXQ6XFx0T2Zmc2V0IHdpdGhpbiB0aGUgbmFtZWQgc3RyZWFtLlxcbisgKiBAaW9fbGVuOlxcdFxcdE51bWJlciBvZiBieXRlcyB0byByZWFkL3dyaXRlLlxcbisgKiBAYnl0ZXNfcmV0dXJuZWQ6XFx0QWN0dWFsIGJ5dGVzIHRyYW5zZmVycmVkIChvdXQpLlxcbisgKiBAbmFtZV9sZW46XFx0XFx0U3RyZWFtIG5hbWUgbGVuZ3RoIGluIGJ5dGVzLCBub3QgaW5jbHVkaW5nIGFueVxcbisgKlxcdFxcdFxcdHRlcm1pbmF0aW5nIE5VTCAod2hpY2ggbXVzdCBub3QgYmUgcHJlc2VudCkuIFdoZW5cXG4rICpcXHRcXHRcXHROVEZTX1NUUkVBTV9GTF9VVEYxNiBpcyBzZXQgdGhpcyBpcyBhIFVURi0xNkxFIGJ5dGVcXG4rICpcXHRcXHRcXHRjb3VudCBhbmQgbXVzdCBiZSBldmVuLlxcbisgKiBAZmxhZ3M6XFx0XFx0Qml0IG1hc2sgb2YgTlRGU19TVFJFQU1fRkxfKiBmbGFncy4gb3RoZXIgYml0cyBtdXN0IGJlXFxuKyAqXFx0XFx0XFx0emVyby5cXG4rICogQHJlc2VydmVkOlxcdFxcdE11c3QgYmUgemVyby5cXG4rICogQGJ1ZmZlcjpcXHRcXHRTdHJlYW0gbmFtZSBmb2xsb3dlZCBieSBzdHJlYW0gZGF0YS5cXG4rICpcXG4rICogVGhlIHN0cmVhbSBuYW1lIGlzIHRoZSBiYXJlIHN0cmVhbSBuYW1lLCB3aXRob3V0IHRoZSBsZWFkaW5nICc6JyBvciB0aGVcXG4rICogdHJhaWxpbmcgXFxcIjokREFUQVxcXCIgZGVjb3JhdGlvbiB1c2VkIGJ5IFdpbmRvd3MuIEJ5IGRlZmF1bHQgaXQgaXMgZW5jb2RlZCB3aXRoXFxuKyAqIHRoZSBtb3VudGVkIGZpbGVzeXN0ZW0gTkxTLiBJZiBOVEZTX1NUUkVBTV9GTF9VVEYxNiBpcyBzZXQgaW4gQGZsYWdzIGl0IGlzXFxuKyAqIHJhdyBVVEYtMTZMRSBpbnN0ZWFkLiBGb3IgcmVhZCBhbmQgd3JpdGUsIEBpb19sZW4gYnl0ZXMgb2YgZGF0YSBmb2xsb3cgdGhlXFxuKyAqIG5hbWUuIEZvciByZW1vdmUsIG9ubHkgdGhlIG5hbWUgaXMgcmVxdWlyZWQgYW5kIEBpb19sZW4gbXVzdCBiZSB6ZXJvLlxcbisgKi9cXG4rc3RydWN0IG50ZnNfc3RyZWFtIHtcXG4rXFx0X19hbGlnbmVkX3U2NCBzdHJlYW1fb2Zmc2V0O1xcbitcXHRfX2FsaWduZWRfdTY0IGlvX2xlbjtcXG4rXFx0X19hbGlnbmVkX3U2NCBieXRlc19yZXR1cm5lZDtcXG4rXFx0X191MzIgbmFtZV9sZW47XFxuK1xcdF9fdTMyIGZsYWdzO1xcbitcXHRfX2FsaWduZWRfdTY0IHJlc2VydmVkO1xcbitcXHRfX3U4IGJ1ZmZlcltdOyAvKiBuYW1lICsgZGF0YSAqL1xcbit9O1xcbitcXG4rLypcXG4rICogU2luZ2xlIHN0cmVhbSBlbnRyeSByZXR1cm5lZCBieSBOVEZTX0lPQ19MSVNUX1NUUkVBTVMuXFxuKyAqXFxuKyAqIEBuZXh0X2VudHJ5X29mZjpcXHRCeXRlIG9mZnNldCBmcm9tIHRoZSBzdGFydCBvZiB0aGlzIGVudHJ5IHRvIHRoZSBuZXh0XFxuKyAqXFx0XFx0XFx0ZW50cnksIG9yIHplcm8gZm9yIHRoZSBsYXN0IGVudHJ5LiBBbHdheXMgYSBtdWx0aXBsZVxcbisgKlxcdFxcdFxcdG9mIDguIENvbnN1bWVycyBtdXN0IHVzZSB0aGlzIHRvIGFkdmFuY2UgaW5zdGVhZCBvZlxcbisgKlxcdFxcdFxcdGNvbXB1dGluZyB0aGUgc3RyaWRlIHRoZW1zZWx2ZXMsIHNvIHRoZSBlbnRyeSBjYW4gZ3Jvd1xcbisgKlxcdFxcdFxcdG5ldyBmaWVsZHMgd2l0aG91dCBicmVha2luZyB0aGUgQUJJLlxcbisgKiBAc2l6ZTpcXHRcXHRTdHJlYW0gZGF0YSBzaXplIGluIGJ5dGVzLlxcbisgKiBAYWxsb2Nfc2l6ZTpcXHRcXHRCeXRlcyBhbGxvY2F0ZWQgZm9yIHRoZSBzdHJlYW0gKGNsdXN0ZXIgYWxpZ25lZCBmb3JcXG4rICpcXHRcXHRcXHRub24tcmVzaWRlbnQgc3RyZWFtcykuXFxuKyAqIEBuYW1lX2xlbjpcXHRcXHRTdHJlYW0gbmFtZSBsZW5ndGggaW4gYnl0ZXMsIG5vdCBpbmNsdWRpbmcgYSBOVUxcXG4rICpcXHRcXHRcXHR0ZXJtaW5hdG9yIChub25lIGlzIHN0b3JlZCkuIENvdW50cyBVVEYtMTZMRSBieXRlc1xcbisgKlxcdFxcdFxcdHdoZW4gTlRGU19TVFJFQU1fRkxfVVRGMTYgd2FzIHJlcXVlc3RlZC5cXG4rICogQHJlc2VydmVkOlxcdFxcdE11c3QgYmUgemVyby5cXG4rICogQG5hbWU6XFx0XFx0QmFyZSBzdHJlYW0gbmFtZTsgTkxTIGVuY29kZWQsIG9yIHJhdyBVVEYtMTZMRSB3aGVuXFxuKyAqXFx0XFx0XFx0TlRGU19TVFJFQU1fRkxfVVRGMTYgd2FzIHJlcXVlc3RlZCAoc2VlIHN0cnVjdFxcbisgKlxcdFxcdFxcdG50ZnNfc3RyZWFtKS5cXG4rICovXFxuK3N0cnVjdCBudGZzX3N0cmVhbV9lbnRyeSB7XFxuK1xcdF9fYWxpZ25lZF91NjQgbmV4dF9lbnRyeV9vZmY7XFxuK1xcdF9fYWxpZ25lZF91NjQgc2l6ZTtcXG4rXFx0X19hbGlnbmVkX3U2NCBhbGxvY19zaXplO1xcbitcXHRfX3UzMiBuYW1lX2xlbjtcXG4rXFx0X191MzIgcmVzZXJ2ZWQ7XFxuK1xcdF9fdTggbmFtZVtdO1xcbit9O1xcbitcXG4rLypcXG4rICogbnRmcyBsaXN0IHN0cmVhbXMgaW9jdGwgc3RydWN0dXJlLlxcbisgKlxcbisgKiBAYnVmZmVyX3NpemU6XFx0dXNlciBidWZmZXIgc2l6ZShpbikuXFxuKyAqIEBieXRlc19yZXR1cm5lZDpcXHRhY3R1YWwgYnl0ZXMgd3JpdHRlbiBvciByZXF1aXJlZChvdXQpLlxcbisgKiBAc3RyZWFtX2NvdW50OlxcdG51bWJlciBvZiBzdHJlYW1zKG91dCkuXFxuKyAqIEBmbGFnczpcXHRcXHRCaXQgbWFzayBvZiBOVEZTX1NUUkVBTV9GTF8qIGZsYWdzIGNvbnRyb2xsaW5nIHRoZVxcbisgKlxcdFxcdFxcdGVuY29kaW5nIG9mIHRoZSByZXR1cm5lZCBuYW1lczsgb3RoZXIgYml0cyBtdXN0IGJlIHplcm8uXFxuKyAqIEByZXNlcnZlZDpcXHRcXHRNdXN0IGJlIHplcm8uXFxuKyAqIEBidWZmZXI6XFx0XFx0bnRmc19zdHJlYW1fZW50cnkgYXJyYXkuXFxuKyAqXFxuKyAqIFRoZSB2YXJpYWJsZS1sZW5ndGggZW50cmllcyBmb2xsb3cgdGhlIGhlYWRlciBpbiBAYnVmZmVyLCBlYWNoIGFsaWduZWQgb25cXG4rICogYW4gOC1ieXRlIGJvdW5kYXJ5IGFuZCBjaGFpbmVkIHZpYSBudGZzX3N0cmVhbV9lbnRyeS5uZXh0X2VudHJ5X29mZi4gSWZcXG4rICogQGJ1ZmZlcl9zaXplIGlzIHRvbyBzbWFsbCwgbm8gZGF0YSBpcyBjb3BpZWQsIEBzdHJlYW1fY291bnQgYW5kXFxuKyAqIEBieXRlc19yZXR1cm5lZCByZXBvcnQgdGhlIHJlcXVpcmVkIHZhbHVlcyBhbmQgdGhlIGlvY3RsIGZhaWxzIHdpdGhcXG4rICogLUVOT1NQQy5cXG4rICovXFxuK3N0cnVjdCBudGZzX2xpc3Rfc3RyZWFtcyB7XFxuK1xcdF9fYWxpZ25lZF91NjQgYnVmZmVyX3NpemU7XFxuK1xcdF9fYWxpZ25lZF91NjQgYnl0ZXNfcmV0dXJuZWQ7XFxuK1xcdF9fYWxpZ25lZF91NjQgc3RyZWFtX2NvdW50O1xcbitcXHRfX3UzMiBmbGFncztcXG4rXFx0X191MzIgcmVzZXJ2ZWQ7XFxuK1xcdF9fdTggYnVmZmVyW107XFxuK307XFxuK1xcbisjZGVmaW5lIE5URlNfSU9DX1NUUkVBTV9SRUFEXFx0XFx0X0lPV1IoTlRGU19JT0NfTUFHSUMsIDEsIHN0cnVjdCBudGZzX3N0cmVhbSlcXG4rI2RlZmluZSBOVEZTX0lPQ19TVFJFQU1fV1JJVEVcXHRcXHRfSU9XUihOVEZTX0lPQ19NQUdJQywgMiwgc3RydWN0IG50ZnNfc3RyZWFtKVxcbisjZGVmaW5lIE5URlNfSU9DX1NUUkVBTV9SRU1PVkVcXHRcXHRfSU9XUihOVEZTX0lPQ19NQUdJQywgMywgc3RydWN0IG50ZnNfc3RyZWFtKVxcbisjZGVmaW5lIE5URlNfSU9DX0xJU1RfU1RSRUFNU1xcdFxcdF9JT1dSKE5URlNfSU9DX01BR0lDLCA0LCBzdHJ1Y3QgbnRmc19saXN0X3N0cmVhbXMpXFxuK1xcbisjZW5kaWYgLyogX1VBUElfTElOVVhfTlRGU19IICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE3OjExOjMzLjM3NjUwOTQyMVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjU4NzgzMDAyMDQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5URlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJudGZzX2lvY3RsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBuZXcgaW9jdGxzIHRvIHRoZSBOVEZTIGZpbGVzeXN0ZW0gdG8gcmVhZCwgd3JpdGUsIHJlbW92ZSwgYW5kIGxpc3QgbmFtZWQgc3RyZWFtcyAoQWx0ZXJuYXRlIERhdGEgU3RyZWFtcykuIFRoZSBpb2N0bHMgYXJlIHJlYWNoYWJsZSB2aWEgYG50ZnNfaW9jdGxgLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjMmQ1NTYzN2YzN2I2M2Y0YjcxMDgxYjc4MDRhZDljZTc5NGYyYWE5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMzAgMTc6MTE6MzIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VzZXJzcGFjZS1hcGkvaW9jdGwvaW9jdGwtbnVtYmVyLnJzdCBiL0RvY3VtZW50YXRpb24vdXNlcnNwYWNlLWFwaS9pb2N0bC9pb2N0bC1udW1iZXIucnN0XG5pbmRleCAzZjBlZjFlMjdlYjA3Li4yYjk4NjlhZWI4MTFiIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi91c2Vyc3BhY2UtYXBpL2lvY3RsL2lvY3RsLW51bWJlci5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vdXNlcnNwYWNlLWFwaS9pb2N0bC9pb2N0bC1udW1iZXIucnN0XG5AQCAtMzk5LDYgKzM5OSw3IEBAIENvZGUgIFNlcSMgICAgSW5jbHVkZSBGaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tbWVudHNcbiAweEU1ICAwMC0zRiAgbGludXgvZnVzZS5oXG4gMHhFQyAgMDAtMDEgIGRyaXZlcnMvcGxhdGZvcm0vY2hyb21lL2Nyb3NfZWNfZGV2LmggICAgICAgICAgICAgICAgICAgICBDaHJvbWVPUyBFQyBkcml2ZXJcbiAweEVFICAwMC0wOSAgdWFwaS9saW51eC9wZnJ1dC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsYXRmb3JtIEZpcm13YXJlIFJ1bnRpbWUgVXBkYXRlIGFuZCBUZWxlbWV0cnlcbisweEVGICAwMC0wRiAgdWFwaS9saW51eC9udGZzLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5URlNcbiAweEYzICAwMC0zRiAgZHJpdmVycy91c2IvbWlzYy9zaXN1c2J2Z2Evc2lzdXNiLmggICAgICAgICAgICAgICAgICAgICAgIHNpc2ZiIChpbiBkZXZlbG9wbWVudClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFx1MDAzY21haWx0bzp0aG9tYXNAd2luaXNjaGhvZmVyLm5ldFx1MDAzZVxuIDB4RjYgIGFsbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRUbmcgTGludXggVHJhY2UgVG9vbGtpdCBOZXh0IEdlbmVyYXRpb25cbmRpZmYgLS1naXQgYS9mcy9udGZzL2ZpbGUuYyBiL2ZzL250ZnMvZmlsZS5jXG5pbmRleCBkNDI4MjgyMmIzY2VmLi45NjFiOTRmNTQ1ZjJjIDEwMDY0NFxuLS0tIGEvZnMvbnRmcy9maWxlLmNcbisrKyBiL2ZzL250ZnMvZmlsZS5jXG5AQCAtMTUsNiArMTUsOCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3Bvc2l4X2FjbF94YXR0ci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY29tcGF0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9mYWxsb2MuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L292ZXJmbG93LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2N1YXBpL2xpbnV4L250ZnMuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwibGNuYWxsb2MuaFwiXG4gI2luY2x1ZGUgXCJudGZzLmhcIlxuQEAgLTIzLDYgKzI1LDcgQEBcbiAjaW5jbHVkZSBcImlvbWFwLmhcIlxuICNpbmNsdWRlIFwiYml0bWFwLmhcIlxuICNpbmNsdWRlIFwidm9sdW1lLmhcIlxuKyNpbmNsdWRlIFwibWZ0LmhcIlxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZpbGVsb2NrLmhcdTAwM2VcbiBcbkBAIC04MzksNiArODQyLDUwNCBAQCBzdGF0aWMgaW50IG50ZnNfaW9jdGxfZml0cmltKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sLCB1bnNpZ25lZCBsb25nIGFyZylcbiBcdHJldHVybiAwO1xuIH1cbiBcbisjZGVmaW5lIE5URlNfU1RSRUFNX01BWF9JT1x0KDE2ICogMTAyNCAqIDEwMjQpIC8qIDE2TUIgbGltaXQgKi9cbitcbisvKlxuKyAqIG50ZnNfcmVhZF9uYW1lZF9zdHJlYW0gLSBSZWFkIGRhdGEgZnJvbSBhIG5hbWVkICREQVRBIHN0cmVhbS5cbisgKlxuKyAqIEBuaTpcdFx0TlRGUyBpbm9kZVxuKyAqIEB1bmFtZTpcdFN0cmVhbSBuYW1lXG4rICogQHVuYW1lX2xlbjpcdExlbmd0aCBvZiBuYW1lIGluIFVuaWNvZGUgY2hhcmFjdGVyc1xuKyAqIEBvZmZzZXQ6XHRCeXRlIG9mZnNldCBpbiB0aGUgc3RyZWFtXG4rICogQGxlbjpcdE51bWJlciBvZiBieXRlcyB0byByZWFkXG4rICogQGRhdGFfYnVmOlx0QnVmZmVyIHRvIGNvcHkgZGF0YSB0b1xuKyAqXG4rICogUmV0dXJuOlx0MCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS5cbisgKlx0XHRJZiBvZmZzZXQgXHUwMDNlPSBzdHJlYW0gc2l6ZSwgcmV0dXJucyAwLlxuKyAqL1xuK3N0YXRpYyBpbnQgbnRmc19yZWFkX25hbWVkX3N0cmVhbShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIF9fbGUxNiAqdW5hbWUsXG4rXHRcdHUzMiB1bmFtZV9sZW4sIHU2NCBvZmZzZXQsIHU2NCBsZW4sIHZvaWQgKmRhdGFfYnVmLFxuK1x0XHR1NjQgKnJieXRlcylcbit7XG4rXHRzdHJ1Y3QgbnRmc19hdHRyX3NlYXJjaF9jdHggKmN0eDtcbitcdHN0cnVjdCBpbm9kZSAqYXR0cl92aTtcbitcdGludCBlcnIgPSAwO1xuK1x0dTY0IGRhdGFfc2l6ZTtcbitcdHM2NCBieXRlcztcbitcdGNoYXIgKnJidWYgPSBOVUxMO1xuK1xuK1x0aWYgKCFuaSB8fCAhdW5hbWUgfHwgdW5hbWVfbGVuID09IDApXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0aWYgKGxlbiA9PSAwIHx8IGxlbiBcdTAwM2UgTlRGU19TVFJFQU1fTUFYX0lPKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2bmktXHUwMDNlbXJlY19sb2NrKTtcbitcdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuaSwgTlVMTCk7XG4rXHRpZiAoIWN0eCkge1xuK1x0XHRtdXRleF91bmxvY2soXHUwMDI2bmktXHUwMDNlbXJlY19sb2NrKTtcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHR9XG4rXG4rXHRlcnIgPSBudGZzX2F0dHJfbG9va3VwKEFUX0RBVEEsIHVuYW1lLCB1bmFtZV9sZW4sIENBU0VfU0VOU0lUSVZFLCAwLFxuK1x0XHRcdE5VTEwsIDAsIGN0eCk7XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIG91dF9sb2NrO1xuK1xuK1x0aWYgKGN0eC1cdTAwM2VhdHRyLVx1MDAzZW5vbl9yZXNpZGVudClcbitcdFx0ZGF0YV9zaXplID0gbGU2NF90b19jcHUoY3R4LVx1MDAzZWF0dHItXHUwMDNlZGF0YS5ub25fcmVzaWRlbnQuZGF0YV9zaXplKTtcbitcdGVsc2VcbitcdFx0ZGF0YV9zaXplID0gbGUzMl90b19jcHUoY3R4LVx1MDAzZWF0dHItXHUwMDNlZGF0YS5yZXNpZGVudC52YWx1ZV9sZW5ndGgpO1xuK1xuK1x0aWYgKG9mZnNldCBcdTAwM2U9IGRhdGFfc2l6ZSkge1xuK1x0XHQqcmJ5dGVzID0gMDtcbitcdFx0LyogRU9GOiBub3RoaW5nIHRvIHJlYWQgKi9cbitcdFx0Z290byBvdXRfbG9jaztcbitcdH1cbitcbitcdC8qIEFkanVzdCBsZW5ndGggdG8gbm90IHJlYWQgYmV5b25kIEVPRiAqL1xuK1x0aWYgKGxlbiBcdTAwM2UgZGF0YV9zaXplIC0gb2Zmc2V0KVxuK1x0XHRsZW4gPSBkYXRhX3NpemUgLSBvZmZzZXQ7XG4rXG4rXHRhdHRyX3ZpID0gbnRmc19hdHRyX2lnZXQoVkZTX0kobmkpLCBBVF9EQVRBLCB1bmFtZSwgdW5hbWVfbGVuKTtcbitcdG50ZnNfYXR0cl9wdXRfc2VhcmNoX2N0eChjdHgpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNm5pLVx1MDAzZW1yZWNfbG9jayk7XG4rXG4rXHRpZiAoSVNfRVJSKGF0dHJfdmkpKSB7XG4rXHRcdGVyciA9IFBUUl9FUlIoYXR0cl92aSk7XG4rXHRcdGdvdG8gb3V0X2ZyZWU7XG4rXHR9XG4rXG4rXHRyYnVmID0ga3Z6YWxsb2MobGVuLCBHRlBfTk9GUyk7XG4rXHRpZiAoIXJidWYpIHtcbitcdFx0ZXJyID0gLUVOT01FTTtcbitcdFx0aXB1dChhdHRyX3ZpKTtcbitcdFx0Z290byBvdXRfZnJlZTtcbitcdH1cbitcbitcdGJ5dGVzID0gbnRmc19pbm9kZV9hdHRyX3ByZWFkKGF0dHJfdmksIG9mZnNldCwgbGVuLCByYnVmKTtcbitcdGlwdXQoYXR0cl92aSk7XG4rXHRpZiAoYnl0ZXMgXHUwMDNjIDApIHtcbitcdFx0ZXJyID0gYnl0ZXM7XG4rXHRcdGdvdG8gb3V0X2ZyZWU7XG4rXHR9XG4rXG4rXHQqcmJ5dGVzID0gYnl0ZXM7XG4rXHRtZW1jcHkoZGF0YV9idWYsIHJidWYsIGJ5dGVzKTtcbitcbitvdXRfZnJlZTpcbitcdGt2ZnJlZShyYnVmKTtcbitcdHJldHVybiBlcnI7XG4rXG4rb3V0X2xvY2s6XG4rXHRudGZzX2F0dHJfcHV0X3NlYXJjaF9jdHgoY3R4KTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZuaS1cdTAwM2VtcmVjX2xvY2spO1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4rLypcbisgKiBudGZzX3dyaXRlX25hbWVkX3N0cmVhbSAtIFdyaXRlIGRhdGEgZnJvbSBhIG5hbWVkICREQVRBIHN0cmVhbS5cbisgKlxuKyAqIEBuaTpcdFx0TlRGUyBpbm9kZVxuKyAqIEB1bmFtZTpcdFN0cmVhbSBuYW1lXG4rICogQHVuYW1lX2xlbjpcdExlbmd0aCBvZiBuYW1lIGluIFVuaWNvZGUgY2hhcmFjdGVyc1xuKyAqIEBvZmZzZXQ6XHRCeXRlIG9mZnNldCBpbiB0aGUgc3RyZWFtXG4rICogQGxlbjpcdE51bWJlciBvZiBieXRlcyB0byB3cml0ZVxuKyAqIEBkYXRhX3N0cmVhbTogRGF0YSB0byB3cml0ZVxuKyAqXG4rICogUmV0dXJuOlx0MCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS5cbisgKi9cbitzdGF0aWMgaW50IG50ZnNfd3JpdGVfbmFtZWRfc3RyZWFtKHN0cnVjdCBudGZzX2lub2RlICpuaSwgX19sZTE2ICp1bmFtZSxcbitcdFx0dTMyIHVuYW1lX2xlbiwgdTY0IG9mZnNldCwgdTY0IGxlbiwgdm9pZCAqZGF0YV9zdHJlYW0sXG4rXHRcdHU2NCAqd2J5dGVzKVxuK3tcbitcdHN0cnVjdCBudGZzX2F0dHJfc2VhcmNoX2N0eCAqY3R4O1xuK1x0c3RydWN0IGlub2RlICphdHRyX3ZpO1xuK1x0aW50IGVycjtcbitcdHM2NCBieXRlcztcbitcbitcdGlmICghbmkgfHwgIXVuYW1lIHx8IHVuYW1lX2xlbiA9PSAwIHx8ICFkYXRhX3N0cmVhbSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRpZiAobGVuID09IDAgfHwgbGVuIFx1MDAzZSBOVEZTX1NUUkVBTV9NQVhfSU8pXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZuaS1cdTAwM2VtcmVjX2xvY2spO1xuK1x0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBOVUxMKTtcbitcdGlmICghY3R4KSB7XG4rXHRcdGVyciA9IC1FTk9NRU07XG4rXHRcdGdvdG8gb3V0X3VubG9jaztcbitcdH1cbitcbitcdGVyciA9IG50ZnNfYXR0cl9sb29rdXAoQVRfREFUQSwgdW5hbWUsIHVuYW1lX2xlbiwgQ0FTRV9TRU5TSVRJVkUsIDAsXG4rXHRcdFx0TlVMTCwgMCwgY3R4KTtcbitcdGlmIChlcnIpIHtcbitcdFx0aWYgKGVyciAhPSAtRU5PRU5UKVxuK1x0XHRcdGdvdG8gb3V0X3VubG9jaztcbitcdFx0ZXJyID0gbnRmc19hdHRyX2FkZChuaSwgQVRfREFUQSwgdW5hbWUsIHVuYW1lX2xlbiwgTlVMTCwgMCk7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0Z290byBvdXRfdW5sb2NrO1xuK1x0XHRtYXJrX21mdF9yZWNvcmRfZGlydHkobmkpO1xuK1x0fVxuK1xuK1x0YXR0cl92aSA9IG50ZnNfYXR0cl9pZ2V0KFZGU19JKG5pKSwgQVRfREFUQSwgdW5hbWUsIHVuYW1lX2xlbik7XG4rXHRudGZzX2F0dHJfcHV0X3NlYXJjaF9jdHgoY3R4KTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZuaS1cdTAwM2VtcmVjX2xvY2spO1xuK1xuK1x0aWYgKElTX0VSUihhdHRyX3ZpKSkge1xuK1x0XHRlcnIgPSBQVFJfRVJSKGF0dHJfdmkpO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdGJ5dGVzID0gbnRmc19pbm9kZV9hdHRyX3B3cml0ZShhdHRyX3ZpLCBvZmZzZXQsIGxlbiwgZGF0YV9zdHJlYW0sXG4rXHRcdFx0XHQgICAgICAgZmFsc2UpO1xuK1x0aWYgKGJ5dGVzIFx1MDAzYyAwKVxuK1x0XHRlcnIgPSBieXRlcztcbitcdGVsc2VcbitcdFx0KndieXRlcyA9IGJ5dGVzO1xuK1x0aXB1dChhdHRyX3ZpKTtcbitcbitvdXQ6XG4rXHRyZXR1cm4gZXJyO1xuK1xuK291dF91bmxvY2s6XG4rXHRpZiAoY3R4KVxuK1x0XHRudGZzX2F0dHJfcHV0X3NlYXJjaF9jdHgoY3R4KTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZuaS1cdTAwM2VtcmVjX2xvY2spO1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4rLypcbisgKiBudGZzX3JlbW92ZV9uYW1lZF9zdHJlYW0gLSBSZW1vdmUgYSBuYW1lZCAkREFUQSBzdHJlYW0uXG4rICpcbisgKiBAbmk6XHRcdE5URlMgaW5vZGVcbisgKiBAdW5hbWU6XHRTdHJlYW0gbmFtZVxuKyAqIEB1bmFtZV9sZW46XHROYW1lIGxlbmd0aCBpbiBVbmljb2RlIGNoYXJhY3RlcnNcbisgKlxuKyAqIFJldHVybjpcdDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3JcbisgKiAgICAgICAgICAgICAgLUVOT0VOVCBpZiBzdHJlYW0gbm90IGZvdW5kXG4rICovXG4rc3RhdGljIGludCBudGZzX3JlbW92ZV9uYW1lZF9zdHJlYW0oc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBfX2xlMTYgKnVuYW1lLFxuK1x0XHR1MzIgdW5hbWVfbGVuKVxuK3tcbitcdGlmICghbmkgfHwgIXVuYW1lIHx8IHVuYW1lX2xlbiA9PSAwKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdHJldHVybiBudGZzX2F0dHJfcmVtb3ZlKG5pLCBBVF9EQVRBLCB1bmFtZSwgdW5hbWVfbGVuKTtcbit9XG4rXG4rZW51bSBudGZzX3N0cmVhbV9vcCB7XG4rXHROVEZTX1NUUkVBTV9PUF9SRUFELFxuK1x0TlRGU19TVFJFQU1fT1BfV1JJVEUsXG4rXHROVEZTX1NUUkVBTV9PUF9SRU1PVkUsXG4rfTtcbitcbitzdGF0aWMgbG9uZyBudGZzX2lvY3RsX3N0cmVhbShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhcmcsXG4rXHRcdFx0ICAgICAgZW51bSBudGZzX3N0cmVhbV9vcCBvcClcbit7XG4rXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShmaWxwKTtcbitcdHN0cnVjdCBudGZzX2lub2RlICpuaSA9IE5URlNfSShpbm9kZSk7XG4rXHRzdHJ1Y3QgbnRmc19zdHJlYW0gX191c2VyICp1cmVxID1cbitcdFx0KHN0cnVjdCBudGZzX3N0cmVhbSBfX3VzZXIgKilhcmc7XG4rXHRzdHJ1Y3QgbnRmc19zdHJlYW0gKnJlcTtcbitcdHNpemVfdCBoZWFkZXJfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgbnRmc19zdHJlYW0pO1xuK1x0c2l6ZV90IGRhdGFfc2l6ZSwgdG90YWxfc2l6ZTtcbitcdGNoYXIgKmtuYW1lLCAqa2RhdGE7XG4rXHRfX2xlMTYgKnVuYW1lID0gTlVMTCwgKnNuYW1lO1xuK1x0aW50IGVyciA9IDAsIHNuYW1lX2xlbjtcbitcdGJvb2wgdXRmMTY7XG4rXHRzdHJ1Y3QgbnRmc19zdHJlYW0gaGRyO1xuK1xuK1x0LyogRmlyc3QgY29weSBmaXhlZCBoZWFkZXIgKi9cbitcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZoZHIsIHVyZXEsIGhlYWRlcl9zaXplKSlcbitcdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXG4rXHRpZiAoaGRyLmlvX2xlbiBcdTAwM2UgTlRGU19TVFJFQU1fTUFYX0lPIHx8XG4rXHQgICAgKGhkci5mbGFncyBcdTAwMjYgfk5URlNfU1RSRUFNX0ZMX1VURjE2KSB8fCBoZHIucmVzZXJ2ZWQpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0dXRmMTYgPSBoZHIuZmxhZ3MgXHUwMDI2IE5URlNfU1RSRUFNX0ZMX1VURjE2O1xuK1xuK1x0aWYgKGhkci5uYW1lX2xlbiA9PSAwKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdGlmICh1dGYxNikge1xuK1x0XHQvKiBVVEYtMTZMRSBieXRlIGNvdW50OiBtdXN0IGJlIGV2ZW4gYW5kIHdpdGhpbiB0aGUgbGltaXQuICovXG4rXHRcdGlmICgoaGRyLm5hbWVfbGVuIFx1MDAyNiAxKSB8fFxuK1x0XHQgICAgaGRyLm5hbWVfbGVuIFx1MDAzZSBOVEZTX01BWF9OQU1FX0xFTiAqIHNpemVvZihfX2xlMTYpKVxuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fSBlbHNlIGlmIChoZHIubmFtZV9sZW4gXHUwMDNlIE5URlNfTUFYX05BTUVfTEVOKSB7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0c3dpdGNoIChvcCkge1xuK1x0Y2FzZSBOVEZTX1NUUkVBTV9PUF9SRUFEOlxuK1x0XHRpZiAoIShmaWxwLVx1MDAzZWZfbW9kZSBcdTAwMjYgRk1PREVfUkVBRCkgfHwgaGRyLmlvX2xlbiA9PSAwKVxuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHRkYXRhX3NpemUgPSBoZHIuaW9fbGVuO1xuK1x0XHRicmVhaztcbitcdGNhc2UgTlRGU19TVFJFQU1fT1BfV1JJVEU6XG4rXHRcdGlmICghKGZpbHAtXHUwMDNlZl9tb2RlIFx1MDAyNiBGTU9ERV9XUklURSkgfHwgaGRyLmlvX2xlbiA9PSAwKVxuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHRkYXRhX3NpemUgPSBoZHIuaW9fbGVuO1xuK1x0XHRicmVhaztcbitcdGNhc2UgTlRGU19TVFJFQU1fT1BfUkVNT1ZFOlxuK1x0XHRpZiAoIShmaWxwLVx1MDAzZWZfbW9kZSBcdTAwMjYgRk1PREVfV1JJVEUpIHx8IGhkci5pb19sZW4gIT0gMClcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0ZGF0YV9zaXplID0gMDtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gLUVOT1RUWTtcbitcdH1cbitcbitcdGlmIChjaGVja19hZGRfb3ZlcmZsb3coaGVhZGVyX3NpemUsIChzaXplX3QpaGRyLm5hbWVfbGVuLCBcdTAwMjZ0b3RhbF9zaXplKSB8fFxuK1x0ICAgIGNoZWNrX2FkZF9vdmVyZmxvdyh0b3RhbF9zaXplLCBkYXRhX3NpemUsIFx1MDAyNnRvdGFsX3NpemUpKVxuK1x0XHRyZXR1cm4gLUVPVkVSRkxPVztcbitcbitcdHJlcSA9IG1lbWR1cF91c2VyKHVyZXEsIHRvdGFsX3NpemUpO1xuK1x0aWYgKElTX0VSUihyZXEpKVxuK1x0XHRyZXR1cm4gUFRSX0VSUihyZXEpO1xuK1xuK1x0cmVxLVx1MDAzZWJ5dGVzX3JldHVybmVkID0gMDtcbitcbitcdGtuYW1lID0gKGNoYXIgKilyZXEtXHUwMDNlYnVmZmVyO1xuK1x0a2RhdGEgPSAoY2hhciAqKXJlcS1cdTAwM2VidWZmZXIgKyByZXEtXHUwMDNlbmFtZV9sZW47XG4rXG4rXHRpZiAocmVxLVx1MDAzZW5hbWVfbGVuICE9IGhkci5uYW1lX2xlbiB8fCByZXEtXHUwMDNlaW9fbGVuICE9IGhkci5pb19sZW4gfHxcbitcdCAgICByZXEtXHUwMDNlZmxhZ3MgIT0gaGRyLmZsYWdzIHx8IHJlcS1cdTAwM2VyZXNlcnZlZCkge1xuK1x0XHRlcnIgPSAtRUlOVkFMO1xuK1x0XHRnb3RvIG91dF9mcmVlO1xuK1x0fVxuK1xuK1x0aWYgKHV0ZjE2KSB7XG4rXHRcdC8qIE5hbWUgaXMgYWxyZWFkeSBvbi1kaXNrIFVURi0xNkxFOyB1c2UgaXQgaW4gcGxhY2UuICovXG4rXHRcdHNuYW1lID0gKF9fbGUxNiAqKWtuYW1lO1xuK1x0XHRzbmFtZV9sZW4gPSByZXEtXHUwMDNlbmFtZV9sZW4gLyBzaXplb2YoX19sZTE2KTtcbitcdH0gZWxzZSB7XG4rXHRcdGlmIChtZW1jaHIoa25hbWUsICdcXDAnLCByZXEtXHUwMDNlbmFtZV9sZW4pKSB7XG4rXHRcdFx0ZXJyID0gLUVJTlZBTDtcbitcdFx0XHRnb3RvIG91dF9mcmVlO1xuK1x0XHR9XG4rXHRcdHNuYW1lX2xlbiA9IG50ZnNfbmxzdG91Y3MobmktXHUwMDNldm9sLCBrbmFtZSwgcmVxLVx1MDAzZW5hbWVfbGVuLFxuK1x0XHRcdFx0XHUwMDI2dW5hbWUsIE5URlNfTUFYX05BTUVfTEVOKTtcbitcdFx0aWYgKHNuYW1lX2xlbiBcdTAwM2MgMCkge1xuK1x0XHRcdGVyciA9IHNuYW1lX2xlbjtcbitcdFx0XHRnb3RvIG91dF9mcmVlO1xuK1x0XHR9XG4rXHRcdHNuYW1lID0gdW5hbWU7XG4rXHR9XG4rXG4rXHRzd2l0Y2ggKG9wKSB7XG4rXHRjYXNlIE5URlNfU1RSRUFNX09QX1JFQUQ6XG4rXHRcdGVyciA9IG50ZnNfcmVhZF9uYW1lZF9zdHJlYW0obmksIHNuYW1lLCBzbmFtZV9sZW4sXG4rXHRcdFx0XHRcdCAgICAgcmVxLVx1MDAzZXN0cmVhbV9vZmZzZXQsIHJlcS1cdTAwM2Vpb19sZW4sXG4rXHRcdFx0XHRcdCAgICAga2RhdGEsXG4rXHRcdFx0XHRcdCAgICAgXHUwMDI2cmVxLVx1MDAzZWJ5dGVzX3JldHVybmVkKTtcbitcdFx0aWYgKCFlcnIpIHtcbitcdFx0XHRpZiAoY29weV90b191c2VyKHVyZXEsIHJlcSxcbitcdFx0XHRcdFx0aGVhZGVyX3NpemUgKyByZXEtXHUwMDNlbmFtZV9sZW4gKyByZXEtXHUwMDNlYnl0ZXNfcmV0dXJuZWQpKVxuK1x0XHRcdFx0ZXJyID0gLUVGQVVMVDtcbitcdFx0fVxuK1x0XHRicmVhaztcbitcdGNhc2UgTlRGU19TVFJFQU1fT1BfV1JJVEU6XG4rXHRcdGVyciA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlscCk7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0YnJlYWs7XG4rXHRcdGVyciA9IG50ZnNfd3JpdGVfbmFtZWRfc3RyZWFtKG5pLCBzbmFtZSwgc25hbWVfbGVuLFxuK1x0XHRcdFx0XHQgICAgICByZXEtXHUwMDNlc3RyZWFtX29mZnNldCwgcmVxLVx1MDAzZWlvX2xlbixcbitcdFx0XHRcdFx0ICAgICAga2RhdGEsXG4rXHRcdFx0XHRcdCAgICAgIFx1MDAyNnJlcS1cdTAwM2VieXRlc19yZXR1cm5lZCk7XG4rXHRcdG1udF9kcm9wX3dyaXRlX2ZpbGUoZmlscCk7XG4rXHRcdGlmICghZXJyKSB7XG4rXHRcdFx0aWYgKGNvcHlfdG9fdXNlcihcdTAwMjZ1cmVxLVx1MDAzZWJ5dGVzX3JldHVybmVkLFxuK1x0XHRcdFx0XHQgXHUwMDI2cmVxLVx1MDAzZWJ5dGVzX3JldHVybmVkLFxuK1x0XHRcdFx0XHQgc2l6ZW9mKHJlcS1cdTAwM2VieXRlc19yZXR1cm5lZCkpKVxuK1x0XHRcdFx0ZXJyID0gLUVGQVVMVDtcbitcdFx0fVxuK1x0XHRicmVhaztcbitcdGNhc2UgTlRGU19TVFJFQU1fT1BfUkVNT1ZFOlxuK1x0XHRlcnIgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbHApO1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdGJyZWFrO1xuK1x0XHRlcnIgPSBudGZzX3JlbW92ZV9uYW1lZF9zdHJlYW0obmksIHNuYW1lLCBzbmFtZV9sZW4pO1xuK1x0XHRtbnRfZHJvcF93cml0ZV9maWxlKGZpbHApO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdGVyciA9IC1FTk9UVFk7XG4rXHR9XG4rXG4rb3V0X2ZyZWU6XG4rXHRpZiAodW5hbWUpXG4rXHRcdGttZW1fY2FjaGVfZnJlZShudGZzX25hbWVfY2FjaGUsIHVuYW1lKTtcbitcdGtmcmVlKHJlcSk7XG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbitzdGF0aWMgaW50IG50ZnNfaW9jdGxfbGlzdF9zdHJlYW1zKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFyZylcbit7XG4rXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShmaWxwKTtcbitcdHN0cnVjdCBudGZzX2lub2RlICpuaSA9IE5URlNfSShpbm9kZSk7XG4rXHRzdHJ1Y3QgbnRmc19saXN0X3N0cmVhbXMgaGRyO1xuK1x0c3RydWN0IG50ZnNfc3RyZWFtX2VudHJ5ICplbnRyeSwgKmxhc3RfZW50cnkgPSBOVUxMO1xuK1x0c2l6ZV90IHJlcXVpcmVkID0gMDtcbitcdHZvaWQgKmtidWYgPSBOVUxMO1xuK1x0dm9pZCBfX3VzZXIgKnVidWY7XG4rXHRzdHJ1Y3QgYXR0cl9yZWNvcmQgKmE7XG4rXHRzdHJ1Y3QgbnRmc19hdHRyX3NlYXJjaF9jdHggKmFjdHg7XG4rXHRpbnQgcmV0ID0gMCwgZXJyLCBjb3VudCA9IDA7XG4rXHRzaXplX3QgZW50cnlfc2l6ZSwgb2Zmc2V0ID0gMDtcbitcdHVuc2lnbmVkIGludCBuYW1lX2xlbjtcbitcdHVuc2lnbmVkIGNoYXIgKnNuO1xuK1x0Ym9vbCB1dGYxNjtcbitcbitcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZoZHIsICh2b2lkIF9fdXNlciAqKWFyZywgc2l6ZW9mKGhkcikpKVxuK1x0XHRyZXR1cm4gLUVGQVVMVDtcbitcbitcdGlmICgoaGRyLmZsYWdzIFx1MDAyNiB+TlRGU19TVFJFQU1fRkxfVVRGMTYpIHx8IGhkci5yZXNlcnZlZClcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHR1dGYxNiA9IGhkci5mbGFncyBcdTAwMjYgTlRGU19TVFJFQU1fRkxfVVRGMTY7XG4rXG4rXHR1YnVmID0gKHZvaWQgX191c2VyICopYXJnICsgc2l6ZW9mKGhkcik7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNm5pLVx1MDAzZW1yZWNfbG9jayk7XG4rXHRhY3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBOVUxMKTtcbitcdGlmICghYWN0eCkge1xuK1x0XHRtdXRleF91bmxvY2soXHUwMDI2bmktXHUwMDNlbXJlY19sb2NrKTtcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHR9XG4rXG4rXHR3aGlsZSAoKGVyciA9IG50ZnNfYXR0cnNfd2FsayhhY3R4KSkgPT0gMCkge1xuK1x0XHRhID0gYWN0eC1cdTAwM2VhdHRyO1xuK1x0XHRpZiAoYS1cdTAwM2V0eXBlICE9IEFUX0RBVEEgfHwgIWEtXHUwMDNlbmFtZV9sZW5ndGgpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdGlmICh1dGYxNikge1xuK1x0XHRcdG5hbWVfbGVuID0gYS1cdTAwM2VuYW1lX2xlbmd0aCAqIHNpemVvZihfX2xlMTYpO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdHNuID0gbnRmc19hdHRyX25hbWVfZ2V0KG5pLVx1MDAzZXZvbCxcbitcdFx0XHRcdFx0KF9fbGUxNiAqKSgodTggKilhICsgbGUxNl90b19jcHUoYS1cdTAwM2VuYW1lX29mZnNldCkpLFxuK1x0XHRcdFx0XHRhLVx1MDAzZW5hbWVfbGVuZ3RoKTtcbitcdFx0XHRpZiAoIXNuKSB7XG4rXHRcdFx0XHRyZXQgPSAtRUlPO1xuK1x0XHRcdFx0Z290byBvdXQ7XG4rXHRcdFx0fVxuK1x0XHRcdG5hbWVfbGVuID0gc3RybGVuKHNuKTtcbitcdFx0XHRudGZzX2F0dHJfbmFtZV9mcmVlKFx1MDAyNnNuKTtcbitcdFx0fVxuK1xuK1x0XHRlbnRyeV9zaXplID0gc2l6ZW9mKCplbnRyeSkgKyBuYW1lX2xlbjtcbitcdFx0ZW50cnlfc2l6ZSA9IEFMSUdOKGVudHJ5X3NpemUsIDgpO1xuK1xuK1x0XHRpZiAocmVxdWlyZWQgXHUwMDNlIFNJWkVfTUFYIC0gZW50cnlfc2l6ZSkge1xuK1x0XHRcdHJldCA9IC1FT1ZFUkZMT1c7XG4rXHRcdFx0Z290byBvdXQ7XG4rXHRcdH1cbitcdFx0cmVxdWlyZWQgKz0gZW50cnlfc2l6ZTtcbitcdFx0Y291bnQrKztcbitcdH1cbitcdGlmIChlcnIgIT0gLUVOT0VOVCkge1xuK1x0XHRyZXQgPSBlcnI7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1xuK1x0aGRyLnN0cmVhbV9jb3VudCA9IGNvdW50O1xuK1x0aGRyLmJ5dGVzX3JldHVybmVkID0gcmVxdWlyZWQ7XG4rXG4rXHRpZiAoIWNvdW50KVxuK1x0XHRnb3RvIG91dDtcbitcbitcdGlmIChoZHIuYnVmZmVyX3NpemUgXHUwMDNjIHJlcXVpcmVkKSB7XG4rXHRcdHJldCA9IC1FTk9TUEM7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1xuK1x0a2J1ZiA9IGt2emFsbG9jKHJlcXVpcmVkLCBHRlBfTk9GUyk7XG4rXHRpZiAoIWtidWYpIHtcbitcdFx0cmV0ID0gLUVOT01FTTtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4rXHRudGZzX2F0dHJfcmVpbml0X3NlYXJjaF9jdHgoYWN0eCk7XG4rXHR3aGlsZSAoKGVyciA9IG50ZnNfYXR0cnNfd2FsayhhY3R4KSkgPT0gMCkge1xuK1x0XHRhID0gYWN0eC1cdTAwM2VhdHRyO1xuK1x0XHRpZiAoYS1cdTAwM2V0eXBlICE9IEFUX0RBVEEgfHwgIWEtXHUwMDNlbmFtZV9sZW5ndGgpXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdGlmICh1dGYxNikge1xuK1x0XHRcdHNuID0gTlVMTDtcbitcdFx0XHRuYW1lX2xlbiA9IGEtXHUwMDNlbmFtZV9sZW5ndGggKiBzaXplb2YoX19sZTE2KTtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRzbiA9IG50ZnNfYXR0cl9uYW1lX2dldChuaS1cdTAwM2V2b2wsXG4rXHRcdFx0XHRcdChfX2xlMTYgKikoKHU4ICopYSArIGxlMTZfdG9fY3B1KGEtXHUwMDNlbmFtZV9vZmZzZXQpKSxcbitcdFx0XHRcdFx0YS1cdTAwM2VuYW1lX2xlbmd0aCk7XG4rXHRcdFx0aWYgKCFzbikge1xuK1x0XHRcdFx0cmV0ID0gLUVJTztcbitcdFx0XHRcdGdvdG8gb3V0O1xuK1x0XHRcdH1cbitcdFx0XHRuYW1lX2xlbiA9IHN0cmxlbihzbik7XG4rXHRcdH1cbitcbitcdFx0ZW50cnlfc2l6ZSA9IHNpemVvZigqZW50cnkpICsgbmFtZV9sZW47XG4rXHRcdGVudHJ5X3NpemUgPSBBTElHTihlbnRyeV9zaXplLCA4KTtcbitcdFx0aWYgKG9mZnNldCBcdTAwM2UgcmVxdWlyZWQgLSBlbnRyeV9zaXplKSB7XG4rXHRcdFx0cmV0ID0gLUVPVkVSRkxPVztcbitcdFx0XHRudGZzX2F0dHJfbmFtZV9mcmVlKFx1MDAyNnNuKTtcbitcdFx0XHRnb3RvIG91dDtcbitcdFx0fVxuK1xuK1x0XHRlbnRyeSA9IChzdHJ1Y3QgbnRmc19zdHJlYW1fZW50cnkgKikoa2J1ZiArIG9mZnNldCk7XG4rXG4rXHRcdGlmIChhLVx1MDAzZW5vbl9yZXNpZGVudCkge1xuK1x0XHRcdGVudHJ5LVx1MDAzZXNpemUgPSBsZTY0X3RvX2NwdShhLVx1MDAzZWRhdGEubm9uX3Jlc2lkZW50LmRhdGFfc2l6ZSk7XG4rXHRcdFx0ZW50cnktXHUwMDNlYWxsb2Nfc2l6ZSA9XG4rXHRcdFx0XHRsZTY0X3RvX2NwdShhLVx1MDAzZWRhdGEubm9uX3Jlc2lkZW50LmFsbG9jYXRlZF9zaXplKTtcbitcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRlbnRyeS1cdTAwM2VzaXplID0gbGUzMl90b19jcHUoYS1cdTAwM2VkYXRhLnJlc2lkZW50LnZhbHVlX2xlbmd0aCk7XG4rXHRcdFx0ZW50cnktXHUwMDNlYWxsb2Nfc2l6ZSA9IGxlMzJfdG9fY3B1KGEtXHUwMDNlbGVuZ3RoKSAtXG4rXHRcdFx0XHRsZTE2X3RvX2NwdShhLVx1MDAzZWRhdGEucmVzaWRlbnQudmFsdWVfb2Zmc2V0KTtcbitcdFx0fVxuK1xuK1x0XHRlbnRyeS1cdTAwM2VuYW1lX2xlbiA9IG5hbWVfbGVuO1xuK1x0XHRpZiAodXRmMTYpXG4rXHRcdFx0bWVtY3B5KGVudHJ5LVx1MDAzZW5hbWUsXG4rXHRcdFx0ICAgICAgICh1OCAqKWEgKyBsZTE2X3RvX2NwdShhLVx1MDAzZW5hbWVfb2Zmc2V0KSwgbmFtZV9sZW4pO1xuK1x0XHRlbHNlXG4rXHRcdFx0bWVtY3B5KGVudHJ5LVx1MDAzZW5hbWUsIHNuLCBuYW1lX2xlbik7XG4rXHRcdG50ZnNfYXR0cl9uYW1lX2ZyZWUoXHUwMDI2c24pO1xuK1xuK1x0XHRlbnRyeS1cdTAwM2VuZXh0X2VudHJ5X29mZiA9IGVudHJ5X3NpemU7XG4rXHRcdGxhc3RfZW50cnkgPSBlbnRyeTtcbitcdFx0b2Zmc2V0ICs9IGVudHJ5X3NpemU7XG4rXHR9XG4rXHRpZiAoZXJyICE9IC1FTk9FTlQpIHtcbitcdFx0cmV0ID0gZXJyO1xuK1x0fSBlbHNlIHtcbitcdFx0LyogVGhlIGNoYWluIHRlcm1pbmF0ZXMgYXQgdGhlIGxhc3QgZW50cnkuICovXG4rXHRcdGlmIChsYXN0X2VudHJ5KVxuK1x0XHRcdGxhc3RfZW50cnktXHUwMDNlbmV4dF9lbnRyeV9vZmYgPSAwO1xuK1x0XHRoZHIuYnl0ZXNfcmV0dXJuZWQgPSBvZmZzZXQ7XG4rXHR9XG4rXG4rb3V0OlxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNm5pLVx1MDAzZW1yZWNfbG9jayk7XG4rXHRudGZzX2F0dHJfcHV0X3NlYXJjaF9jdHgoYWN0eCk7XG4rXG4rXHRpZiAocmV0IFx1MDAyNlx1MDAyNiByZXQgIT0gLUVOT1NQQylcbitcdFx0Z290byBvdXRfZnJlZTtcbitcbitcdGlmICghcmV0IFx1MDAyNlx1MDAyNiBrYnVmIFx1MDAyNlx1MDAyNiBjb3B5X3RvX3VzZXIodWJ1Ziwga2J1ZiwgaGRyLmJ5dGVzX3JldHVybmVkKSkge1xuK1x0XHRyZXQgPSAtRUZBVUxUO1xuK1x0XHRnb3RvIG91dF9mcmVlO1xuK1x0fVxuK1xuK1x0aWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKilhcmcsIFx1MDAyNmhkciwgc2l6ZW9mKGhkcikpKVxuK1x0XHRyZXQgPSAtRUZBVUxUO1xuK1xuK291dF9mcmVlOlxuK1x0a3ZmcmVlKGtidWYpO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4gbG9uZyBudGZzX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbiB7XG4gXHRzd2l0Y2ggKGNtZCkge1xuQEAgLTg1MCw2ICsxMzUxLDE0IEBAIGxvbmcgbnRmc19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4gXHRcdHJldHVybiBudGZzX2lvY3RsX3NldF92b2x1bWVfbGFiZWwoZmlscCwgYXJnKTtcbiBcdGNhc2UgRklUUklNOlxuIFx0XHRyZXR1cm4gbnRmc19pb2N0bF9maXRyaW0oTlRGU19TQihmaWxlX2lub2RlKGZpbHApLVx1MDAzZWlfc2IpLCBhcmcpO1xuK1x0Y2FzZSBOVEZTX0lPQ19TVFJFQU1fUkVBRDpcbitcdFx0cmV0dXJuIG50ZnNfaW9jdGxfc3RyZWFtKGZpbHAsIGFyZywgTlRGU19TVFJFQU1fT1BfUkVBRCk7XG4rXHRjYXNlIE5URlNfSU9DX1NUUkVBTV9XUklURTpcbitcdFx0cmV0dXJuIG50ZnNfaW9jdGxfc3RyZWFtKGZpbHAsIGFyZywgTlRGU19TVFJFQU1fT1BfV1JJVEUpO1xuK1x0Y2FzZSBOVEZTX0lPQ19TVFJFQU1fUkVNT1ZFOlxuK1x0XHRyZXR1cm4gbnRmc19pb2N0bF9zdHJlYW0oZmlscCwgYXJnLCBOVEZTX1NUUkVBTV9PUF9SRU1PVkUpO1xuK1x0Y2FzZSBOVEZTX0lPQ19MSVNUX1NUUkVBTVM6XG4rXHRcdHJldHVybiBudGZzX2lvY3RsX2xpc3Rfc3RyZWFtcyhmaWxwLCBhcmcpO1xuIFx0ZGVmYXVsdDpcbiBcdFx0cmV0dXJuIC1FTk9UVFk7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L250ZnMuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9udGZzLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5hNTc4M2RjM2I5MDU0XG4tLS0gL2Rldi9udWxsXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvbnRmcy5oXG5AQCAtMCwwICsxLDExNSBAQFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIFdJVEggTGludXgtc3lzY2FsbC1ub3RlICovXG4rLypcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjYgTEcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuXG4rICovXG4rXG4rI2lmbmRlZiBfVUFQSV9MSU5VWF9OVEZTX0hcbisjZGVmaW5lIF9VQVBJX0xJTlVYX05URlNfSFxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pb2N0bC5oXHUwMDNlXG4rXG4rI2RlZmluZSBOVEZTX0lPQ19NQUdJQ1x0MHhFRlxuK1xuKy8qXG4rICogRmxhZ3MgZm9yIG50ZnNfc3RyZWFtLmZsYWdzIGFuZCBudGZzX2xpc3Rfc3RyZWFtcy5mbGFncy5cbisgKlxuKyAqIFRoZSBzdHJlYW0gbmFtZSBpcyByYXcgVVRGLTE2TEUsIGV4YWN0bHkgYXMgc3RvcmVkIG9uIGRpc2ssIGluc3RlYWQgb2ZcbisgKiBiZWluZyBlbmNvZGVkIHdpdGggdGhlIG1vdW50ZWQgZmlsZXN5c3RlbSBOTFMuIFRoaXMgYWxsb3dzIGxvc3NsZXNzXG4rICogcm91bmQtdHJpcHBpbmcgb2Ygc3RyZWFtIG5hbWVzIHdob3NlIGNoYXJhY3RlcnMgYXJlIG5vdCByZXByZXNlbnRhYmxlXG4rICogaW4gdGhlIG1vdW50IE5MUyAoZS5nLiBmb3IgV2luZSwgd2hpY2ggd29ya3MgaW4gVVRGLTE2IG5hdGl2ZWx5KS5cbisgKiBXaGVuIHNldCwgdGhlIG5hbWUgbGVuZ3RoIGZpZWxkcyBjb3VudCBieXRlcyBvZiBVVEYtMTZMRSBhbmQgbXVzdFxuKyAqIHRoZXJlZm9yZSBiZSBldmVuLlxuKyAqL1xuKyNkZWZpbmUgTlRGU19TVFJFQU1fRkxfVVRGMTZcdDB4MVxuK1xuKy8qXG4rICogbnRmcyBuYW1lZCBzdHJlYW0gaW9jdGwgc3RydWN0dXJlLlxuKyAqXG4rICogQHN0cmVhbV9vZmZzZXQ6XHRPZmZzZXQgd2l0aGluIHRoZSBuYW1lZCBzdHJlYW0uXG4rICogQGlvX2xlbjpcdFx0TnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQvd3JpdGUuXG4rICogQGJ5dGVzX3JldHVybmVkOlx0QWN0dWFsIGJ5dGVzIHRyYW5zZmVycmVkIChvdXQpLlxuKyAqIEBuYW1lX2xlbjpcdFx0U3RyZWFtIG5hbWUgbGVuZ3RoIGluIGJ5dGVzLCBub3QgaW5jbHVkaW5nIGFueVxuKyAqXHRcdFx0dGVybWluYXRpbmcgTlVMICh3aGljaCBtdXN0IG5vdCBiZSBwcmVzZW50KS4gV2hlblxuKyAqXHRcdFx0TlRGU19TVFJFQU1fRkxfVVRGMTYgaXMgc2V0IHRoaXMgaXMgYSBVVEYtMTZMRSBieXRlXG4rICpcdFx0XHRjb3VudCBhbmQgbXVzdCBiZSBldmVuLlxuKyAqIEBmbGFnczpcdFx0Qml0IG1hc2sgb2YgTlRGU19TVFJFQU1fRkxfKiBmbGFncy4gb3RoZXIgYml0cyBtdXN0IGJlXG4rICpcdFx0XHR6ZXJvLlxuKyAqIEByZXNlcnZlZDpcdFx0TXVzdCBiZSB6ZXJvLlxuKyAqIEBidWZmZXI6XHRcdFN0cmVhbSBuYW1lIGZvbGxvd2VkIGJ5IHN0cmVhbSBkYXRhLlxuKyAqXG4rICogVGhlIHN0cmVhbSBuYW1lIGlzIHRoZSBiYXJlIHN0cmVhbSBuYW1lLCB3aXRob3V0IHRoZSBsZWFkaW5nICc6JyBvciB0aGVcbisgKiB0cmFpbGluZyBcIjokREFUQVwiIGRlY29yYXRpb24gdXNlZCBieSBXaW5kb3dzLiBCeSBkZWZhdWx0IGl0IGlzIGVuY29kZWQgd2l0aFxuKyAqIHRoZSBtb3VudGVkIGZpbGVzeXN0ZW0gTkxTLiBJZiBOVEZTX1NUUkVBTV9GTF9VVEYxNiBpcyBzZXQgaW4gQGZsYWdzIGl0IGlzXG4rICogcmF3IFVURi0xNkxFIGluc3RlYWQuIEZvciByZWFkIGFuZCB3cml0ZSwgQGlvX2xlbiBieXRlcyBvZiBkYXRhIGZvbGxvdyB0aGVcbisgKiBuYW1lLiBGb3IgcmVtb3ZlLCBvbmx5IHRoZSBuYW1lIGlzIHJlcXVpcmVkIGFuZCBAaW9fbGVuIG11c3QgYmUgemVyby5cbisgKi9cbitzdHJ1Y3QgbnRmc19zdHJlYW0ge1xuK1x0X19hbGlnbmVkX3U2NCBzdHJlYW1fb2Zmc2V0O1xuK1x0X19hbGlnbmVkX3U2NCBpb19sZW47XG4rXHRfX2FsaWduZWRfdTY0IGJ5dGVzX3JldHVybmVkO1xuK1x0X191MzIgbmFtZV9sZW47XG4rXHRfX3UzMiBmbGFncztcbitcdF9fYWxpZ25lZF91NjQgcmVzZXJ2ZWQ7XG4rXHRfX3U4IGJ1ZmZlcltdOyAvKiBuYW1lICsgZGF0YSAqL1xuK307XG4rXG4rLypcbisgKiBTaW5nbGUgc3RyZWFtIGVudHJ5IHJldHVybmVkIGJ5IE5URlNfSU9DX0xJU1RfU1RSRUFNUy5cbisgKlxuKyAqIEBuZXh0X2VudHJ5X29mZjpcdEJ5dGUgb2Zmc2V0IGZyb20gdGhlIHN0YXJ0IG9mIHRoaXMgZW50cnkgdG8gdGhlIG5leHRcbisgKlx0XHRcdGVudHJ5LCBvciB6ZXJvIGZvciB0aGUgbGFzdCBlbnRyeS4gQWx3YXlzIGEgbXVsdGlwbGVcbisgKlx0XHRcdG9mIDguIENvbnN1bWVycyBtdXN0IHVzZSB0aGlzIHRvIGFkdmFuY2UgaW5zdGVhZCBvZlxuKyAqXHRcdFx0Y29tcHV0aW5nIHRoZSBzdHJpZGUgdGhlbXNlbHZlcywgc28gdGhlIGVudHJ5IGNhbiBncm93XG4rICpcdFx0XHRuZXcgZmllbGRzIHdpdGhvdXQgYnJlYWtpbmcgdGhlIEFCSS5cbisgKiBAc2l6ZTpcdFx0U3RyZWFtIGRhdGEgc2l6ZSBpbiBieXRlcy5cbisgKiBAYWxsb2Nfc2l6ZTpcdFx0Qnl0ZXMgYWxsb2NhdGVkIGZvciB0aGUgc3RyZWFtIChjbHVzdGVyIGFsaWduZWQgZm9yXG4rICpcdFx0XHRub24tcmVzaWRlbnQgc3RyZWFtcykuXG4rICogQG5hbWVfbGVuOlx0XHRTdHJlYW0gbmFtZSBsZW5ndGggaW4gYnl0ZXMsIG5vdCBpbmNsdWRpbmcgYSBOVUxcbisgKlx0XHRcdHRlcm1pbmF0b3IgKG5vbmUgaXMgc3RvcmVkKS4gQ291bnRzIFVURi0xNkxFIGJ5dGVzXG4rICpcdFx0XHR3aGVuIE5URlNfU1RSRUFNX0ZMX1VURjE2IHdhcyByZXF1ZXN0ZWQuXG4rICogQHJlc2VydmVkOlx0XHRNdXN0IGJlIHplcm8uXG4rICogQG5hbWU6XHRcdEJhcmUgc3RyZWFtIG5hbWU7IE5MUyBlbmNvZGVkLCBvciByYXcgVVRGLTE2TEUgd2hlblxuKyAqXHRcdFx0TlRGU19TVFJFQU1fRkxfVVRGMTYgd2FzIHJlcXVlc3RlZCAoc2VlIHN0cnVjdFxuKyAqXHRcdFx0bnRmc19zdHJlYW0pLlxuKyAqL1xuK3N0cnVjdCBudGZzX3N0cmVhbV9lbnRyeSB7XG4rXHRfX2FsaWduZWRfdTY0IG5leHRfZW50cnlfb2ZmO1xuK1x0X19hbGlnbmVkX3U2NCBzaXplO1xuK1x0X19hbGlnbmVkX3U2NCBhbGxvY19zaXplO1xuK1x0X191MzIgbmFtZV9sZW47XG4rXHRfX3UzMiByZXNlcnZlZDtcbitcdF9fdTggbmFtZVtdO1xuK307XG4rXG4rLypcbisgKiBudGZzIGxpc3Qgc3RyZWFtcyBpb2N0bCBzdHJ1Y3R1cmUuXG4rICpcbisgKiBAYnVmZmVyX3NpemU6XHR1c2VyIGJ1ZmZlciBzaXplKGluKS5cbisgKiBAYnl0ZXNfcmV0dXJuZWQ6XHRhY3R1YWwgYnl0ZXMgd3JpdHRlbiBvciByZXF1aXJlZChvdXQpLlxuKyAqIEBzdHJlYW1fY291bnQ6XHRudW1iZXIgb2Ygc3RyZWFtcyhvdXQpLlxuKyAqIEBmbGFnczpcdFx0Qml0IG1hc2sgb2YgTlRGU19TVFJFQU1fRkxfKiBmbGFncyBjb250cm9sbGluZyB0aGVcbisgKlx0XHRcdGVuY29kaW5nIG9mIHRoZSByZXR1cm5lZCBuYW1lczsgb3RoZXIgYml0cyBtdXN0IGJlIHplcm8uXG4rICogQHJlc2VydmVkOlx0XHRNdXN0IGJlIHplcm8uXG4rICogQGJ1ZmZlcjpcdFx0bnRmc19zdHJlYW1fZW50cnkgYXJyYXkuXG4rICpcbisgKiBUaGUgdmFyaWFibGUtbGVuZ3RoIGVudHJpZXMgZm9sbG93IHRoZSBoZWFkZXIgaW4gQGJ1ZmZlciwgZWFjaCBhbGlnbmVkIG9uXG4rICogYW4gOC1ieXRlIGJvdW5kYXJ5IGFuZCBjaGFpbmVkIHZpYSBudGZzX3N0cmVhbV9lbnRyeS5uZXh0X2VudHJ5X29mZi4gSWZcbisgKiBAYnVmZmVyX3NpemUgaXMgdG9vIHNtYWxsLCBubyBkYXRhIGlzIGNvcGllZCwgQHN0cmVhbV9jb3VudCBhbmRcbisgKiBAYnl0ZXNfcmV0dXJuZWQgcmVwb3J0IHRoZSByZXF1aXJlZCB2YWx1ZXMgYW5kIHRoZSBpb2N0bCBmYWlscyB3aXRoXG4rICogLUVOT1NQQy5cbisgKi9cbitzdHJ1Y3QgbnRmc19saXN0X3N0cmVhbXMge1xuK1x0X19hbGlnbmVkX3U2NCBidWZmZXJfc2l6ZTtcbitcdF9fYWxpZ25lZF91NjQgYnl0ZXNfcmV0dXJuZWQ7XG4rXHRfX2FsaWduZWRfdTY0IHN0cmVhbV9jb3VudDtcbitcdF9fdTMyIGZsYWdzO1xuK1x0X191MzIgcmVzZXJ2ZWQ7XG4rXHRfX3U4IGJ1ZmZlcltdO1xuK307XG4rXG4rI2RlZmluZSBOVEZTX0lPQ19TVFJFQU1fUkVBRFx0XHRfSU9XUihOVEZTX0lPQ19NQUdJQywgMSwgc3RydWN0IG50ZnNfc3RyZWFtKVxuKyNkZWZpbmUgTlRGU19JT0NfU1RSRUFNX1dSSVRFXHRcdF9JT1dSKE5URlNfSU9DX01BR0lDLCAyLCBzdHJ1Y3QgbnRmc19zdHJlYW0pXG4rI2RlZmluZSBOVEZTX0lPQ19TVFJFQU1fUkVNT1ZFXHRcdF9JT1dSKE5URlNfSU9DX01BR0lDLCAzLCBzdHJ1Y3QgbnRmc19zdHJlYW0pXG4rI2RlZmluZSBOVEZTX0lPQ19MSVNUX1NUUkVBTVNcdFx0X0lPV1IoTlRGU19JT0NfTUFHSUMsIDQsIHN0cnVjdCBudGZzX2xpc3Rfc3RyZWFtcylcbitcbisjZW5kaWYgLyogX1VBUElfTElOVVhfTlRGU19IICovXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxNzoxMTozMy4zNzY1MTA5NDFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzMyNjYzNDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTlRGUyBOYW1lZCBTdHJlYW0gUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGludHJvZHVjaW5nIGlvY3RscyBmb3IgTlRGUywgc3BlY2lmaWNhbGx5IGhhbmRsaW5nIG5hbWVkIHN0cmVhbXMgb3IgQWx0ZXJuYXRlIERhdGEgU3RyZWFtcy4gSSBzZWUgd2UgaGF2ZSBgTlRGU19JT0NfU1RSRUFNX1JFQURgLCBgTlRGU19JT0NfU1RSRUFNX1dSSVRFYCwgYE5URlNfSU9DX1NUUkVBTV9SRU1PVkVgLCBhbmQgYE5URlNfSU9DX0xJU1RfU1RSRUFNU2AuIFRoYXQncyBzdGFuZGFyZCBmdW5jdGlvbmFsaXR5LCByZWFsbHk7IGl0IGNvdmVycyB0aGUgYmFzaWMgcmVhZCwgd3JpdGUsIHJlbW92ZSwgYW5kIGxpc3Rpbmcgb3BlcmF0aW9ucy4gR29vZC5cblxuVGhlIGltcG9ydGFudCBmaWxlcyBhcmUgYGZzL250ZnMvZmlsZS5jYCB3aGljaCwgYXMgYW4gZXhwZXJ0LCBJIHdvdWxkIGV4cGVjdCBoYW5kbGVzIGEgbG90IG9mIHRoZSBjb3JlIGZpbGUgb3BlcmF0aW9ucywgYW5kIGEgbmV3IGhlYWRlciwgYGluY2x1ZGUvdWFwaS9saW51eC9udGZzLmhgIHdoaWNoIHdpbGwgZGVmaW5lIHRoZSBuZXcgaW9jdGwgbnVtYmVycyBhbmQgc3RydWN0dXJlcy4gTWFrZXMgc2Vuc2UuXG5cbkJ1dCB3YWl0IGEgbWludXRl4oCmIFRoaXMgaXMgYGZzL250ZnMvZmlsZS5jYOKApiBJcyB0aGlzIHRoZSAqb2xkKiBOVEZTIGRyaXZlciBvciB0aGUgbmV3ZXIgYG50ZnMzYD8gSSBuZWVkIHRvIGNsYXJpZnkgdGhhdCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgaXMgZ29pbmcgaW50byBhIGxlZ2FjeSBjb2RlIHBhdGggb3Igc29tZXRoaW5nIG1vcmUgbW9kZXJuLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBpZiB0aGUgb2xkIGBmcy9udGZzYCBpcyBzdGlsbCBldmVuIGVuYWJsZWQsIGFuZCBob3cgaXTigJlzIGNvbmZpZ3VyZWQuIEknbGwgbmVlZCB0byB1c2UgYGdyZXBwZXJgIHRvIHNlYXJjaCB0aHJvdWdoIHRoZSBLY29uZmlnIGZpbGVzIGZvciBgTlRGU19GU2Agb3IgYSBzaW1pbGFyIGNvbmZpZ3VyYXRpb24gc3ltYm9sLiBUaGF0IHNob3VsZCBjbGVhciB0aGluZ3MgdXAgZmFzdC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQ3MSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE3OjExOjM4LjcwOTE3ODA2NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDIxNTE1NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5URlNfRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbnRmcy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL250ZnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL250ZnMvS2NvbmZpZzoyOmNvbmZpZyBOVEZTX0ZTXFxuZnMvbnRmcy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIk5URlMgZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCJcXG4tLVxcbmZzL250ZnMvS2NvbmZpZz0xMz1jb25maWcgTlRGU19ERUJVR1xcbi0tXFxuZnMvbnRmcy9LY29uZmlnLTM0LVxcbmZzL250ZnMvS2NvbmZpZzozNTpjb25maWcgTlRGU19GU19QT1NJWF9BQ0xcXG5mcy9udGZzL0tjb25maWctMzYtXFx0Ym9vbCBcXFwiTlRGUyBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTc6MTE6MzguODUxMzcyMjI0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAwMjIwODAwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5URlMgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB3b3JraW5nIHdpdGggdGhlICpvbGQqIE5URlMgZHJpdmVyLCBzcGVjaWZpY2FsbHkgYGZzL250ZnNgLiBJIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCB0aGlzIGxlZ2FjeSBkcml2ZXIgaXMgc3RpbGwgYXJvdW5kLiBJdCBsb29rcyBsaWtlIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgbGllcyBpbiBhZGRpbmcgbmV3IGlvY3RscyB0byBgZnMvbnRmcy9maWxlLmNgLiBMZXQncyBzZWUgd2hhdCB0aG9zZSBuZXcgaW9jdGxzIGFyZS4uLiByaWdodCwgdGhlIHBhdGNoIGFkZHM6XG5cbiogICBgbnRmc19yZWFkX25hbWVkX3N0cmVhbWBcbiogICBgbnRmc193cml0ZV9uYW1lZF9zdHJlYW1gXG4qICAgYG50ZnNfcmVtb3ZlX25hbWVkX3N0cmVhbWBcbiogICBgbnRmc19pb2N0bF9zdHJlYW1gXG4qICAgYG50ZnNfaW9jdGxfbGlzdF9zdHJlYW1zYFxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gaXM6IGFyZSB0aGVzZSBhY3R1YWxseSAqcmVhY2hhYmxlKj8gQWgsIHllcywgdGhleSBhcmUsIHZpYSBgbnRmc19pb2N0bGAuIFRoYXQgZnVuY3Rpb24gd291bGQgYmUgdGhlIGAudW5sb2NrZWRfaW9jdGxgIGVudHJ5IHBvaW50IGZvciBOVEZTIGZpbGVzLCB3aGljaCBtYWtlcyBzZW5zZS4gSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkgc2hvdWxkIHZlcmlmeSB0aGUgaW1wbGVtZW50YXRpb24gb2YgYG50ZnNfaW9jdGxgIGl0c2VsZiBpbiBgZnMvbnRmcy9maWxlLmNgLiBHb3R0YSBiZSB0aG9yb3VnaCB3aXRoIHRoZXNlIGRyaXZlciBjaGFuZ2VzLCBlc3BlY2lhbGx5IHdpdGggc29tZXRoaW5nIGFzIGZ1bmRhbWVudGFsIGFzIGZpbGUgc3lzdGVtIEkvTy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAxMjksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTc6MTE6NDIuODUzNTg0ODhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUzNzA1NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibnRmc19pb2N0bFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9udGZzL2ZpbGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9udGZzL2ZpbGUuYz03NDA9c3RhdGljIHNzaXplX3QgbnRmc19maWxlX3NwbGljZV9yZWFkKHN0cnVjdCBmaWxlICppbiwgbG9mZl90ICpwcG9zLFxcbi0tXFxuZnMvbnRmcy9maWxlLmMtNzQ4LVxcbmZzL250ZnMvZmlsZS5jOjc0OTpzdGF0aWMgaW50IG50ZnNfaW9jdGxfc2h1dGRvd24oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyBhcmcpXFxuZnMvbnRmcy9maWxlLmMtNzUwLXtcXG4tLVxcbmZzL250ZnMvZmlsZS5jLTc2MS1cXG5mcy9udGZzL2ZpbGUuYzo3NjI6c3RhdGljIGludCBudGZzX2lvY3RsX2dldF92b2x1bWVfbGFiZWwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbmZzL250ZnMvZmlsZS5jLTc2My17XFxuLS1cXG5mcy9udGZzL2ZpbGUuYy03ODQtXFxuZnMvbnRmcy9maWxlLmM6Nzg1OnN0YXRpYyBpbnQgbnRmc19pb2N0bF9zZXRfdm9sdW1lX2xhYmVsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFyZylcXG5mcy9udGZzL2ZpbGUuYy03ODYte1xcbi0tXFxuZnMvbnRmcy9maWxlLmMtODA4LVxcbmZzL250ZnMvZmlsZS5jOjgwOTpzdGF0aWMgaW50IG50ZnNfaW9jdGxfZml0cmltKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sLCB1bnNpZ25lZCBsb25nIGFyZylcXG5mcy9udGZzL2ZpbGUuYy04MTAte1xcbi0tXFxuZnMvbnRmcy9maWxlLmM9MTAzMT1lbnVtIG50ZnNfc3RyZWFtX29wIHtcXG4tLVxcbmZzL250ZnMvZmlsZS5jLTEwMzYtXFxuZnMvbnRmcy9maWxlLmM6MTAzNzpzdGF0aWMgbG9uZyBudGZzX2lvY3RsX3N0cmVhbShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhcmcsXFxuZnMvbnRmcy9maWxlLmMtMTAzOC1cXHRcXHRcXHQgICAgICBlbnVtIG50ZnNfc3RyZWFtX29wIG9wKVxcbi0tXFxuZnMvbnRmcy9maWxlLmMtMTE3Ni1cXG5mcy9udGZzL2ZpbGUuYzoxMTc3OnN0YXRpYyBpbnQgbnRmc19pb2N0bF9saXN0X3N0cmVhbXMoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbmZzL250ZnMvZmlsZS5jLTExNzgte1xcbi0tXFxuZnMvbnRmcy9maWxlLmMtMTM0Mi1cXG5mcy9udGZzL2ZpbGUuYzoxMzQzOmxvbmcgbnRmc19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuZnMvbnRmcy9maWxlLmMtMTM0NC17XFxuLS1cXG5mcy9udGZzL2ZpbGUuYy0xMzQ2LVxcdGNhc2UgRlNfSU9DX1NIVVRET1dOOlxcbmZzL250ZnMvZmlsZS5jOjEzNDc6XFx0XFx0cmV0dXJuIG50ZnNfaW9jdGxfc2h1dGRvd24oZmlsZV9pbm9kZShmaWxwKS1cXHUwMDNlaV9zYiwgYXJnKTtcXG5mcy9udGZzL2ZpbGUuYy0xMzQ4LVxcdGNhc2UgRlNfSU9DX0dFVEZTTEFCRUw6XFxuZnMvbnRmcy9maWxlLmM6MTM0OTpcXHRcXHRyZXR1cm4gbnRmc19pb2N0bF9nZXRfdm9sdW1lX2xhYmVsKGZpbHAsIGFyZyk7XFxuZnMvbnRmcy9maWxlLmMtMTM1MC1cXHRjYXNlIEZTX0lPQ19TRVRGU0xBQkVMOlxcbmZzL250ZnMvZmlsZS5jOjEzNTE6XFx0XFx0cmV0dXJuIG50ZnNfaW9jdGxfc2V0X3ZvbHVtZV9sYWJlbChmaWxwLCBhcmcpO1xcbmZzL250ZnMvZmlsZS5jLTEzNTItXFx0Y2FzZSBGSVRSSU06XFxuZnMvbnRmcy9maWxlLmM6MTM1MzpcXHRcXHRyZXR1cm4gbnRmc19pb2N0bF9maXRyaW0oTlRGU19TQihmaWxlX2lub2RlKGZpbHApLVxcdTAwM2VpX3NiKSwgYXJnKTtcXG5mcy9udGZzL2ZpbGUuYy0xMzU0LVxcdGNhc2UgTlRGU19JT0NfU1RSRUFNX1JFQUQ6XFxuZnMvbnRmcy9maWxlLmM6MTM1NTpcXHRcXHRyZXR1cm4gbnRmc19pb2N0bF9zdHJlYW0oZmlscCwgYXJnLCBOVEZTX1NUUkVBTV9PUF9SRUFEKTtcXG5mcy9udGZzL2ZpbGUuYy0xMzU2LVxcdGNhc2UgTlRGU19JT0NfU1RSRUFNX1dSSVRFOlxcbmZzL250ZnMvZmlsZS5jOjEzNTc6XFx0XFx0cmV0dXJuIG50ZnNfaW9jdGxfc3RyZWFtKGZpbHAsIGFyZywgTlRGU19TVFJFQU1fT1BfV1JJVEUpO1xcbmZzL250ZnMvZmlsZS5jLTEzNTgtXFx0Y2FzZSBOVEZTX0lPQ19TVFJFQU1fUkVNT1ZFOlxcbmZzL250ZnMvZmlsZS5jOjEzNTk6XFx0XFx0cmV0dXJuIG50ZnNfaW9jdGxfc3RyZWFtKGZpbHAsIGFyZywgTlRGU19TVFJFQU1fT1BfUkVNT1ZFKTtcXG5mcy9udGZzL2ZpbGUuYy0xMzYwLVxcdGNhc2UgTlRGU19JT0NfTElTVF9TVFJFQU1TOlxcbmZzL250ZnMvZmlsZS5jOjEzNjE6XFx0XFx0cmV0dXJuIG50ZnNfaW9jdGxfbGlzdF9zdHJlYW1zKGZpbHAsIGFyZyk7XFxuZnMvbnRmcy9maWxlLmMtMTM2Mi1cXHRkZWZhdWx0Olxcbi0tXFxuZnMvbnRmcy9maWxlLmM9MTM2OD1sb25nIG50ZnNfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLFxcbi0tXFxuZnMvbnRmcy9maWxlLmMtMTM3MC17XFxuZnMvbnRmcy9maWxlLmM6MTM3MTpcXHRyZXR1cm4gbnRmc19pb2N0bChmaWxwLCBjbWQsICh1bnNpZ25lZCBsb25nKWNvbXBhdF9wdHIoYXJnKSk7XFxuZnMvbnRmcy9maWxlLmMtMTM3Mi19XFxuLS1cXG5mcy9udGZzL2ZpbGUuYz0xNjg0PWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbnRmc19maWxlX29wcyA9IHtcXG4tLVxcbmZzL250ZnMvZmlsZS5jLTE2OTMtXFx0LnNwbGljZV93cml0ZVxcdD0gaXRlcl9maWxlX3NwbGljZV93cml0ZSxcXG5mcy9udGZzL2ZpbGUuYzoxNjk0OlxcdC51bmxvY2tlZF9pb2N0bFxcdD0gbnRmc19pb2N0bCxcXG5mcy9udGZzL2ZpbGUuYy0xNjk1LSNpZmRlZiBDT05GSUdfQ09NUEFUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE3OjExOjQyLjg5ODk2MDMwOVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY5NTMwNjk2ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE5URlMgSU9DVExzKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGVzZSBOVEZTIElPQ1RMcy4gRmlyc3QgdGhvdWdodCBpcywgeWVhaCwgdGhlIElPQ1RMIGVudHJ5IHBvaW50cyAqYXJlKiBkZWZpbml0ZWx5IGFjY2Vzc2libGUsIHNvIGxldCdzIHN0YXJ0IHRoZXJlLiBSaWdodCwgYG50ZnNfaW9jdGxgIGlzIHRoZSBpbml0aWFsIHBvaW50IG9mIGVudHJ5LiBcblxuTm93LCB3aGljaCBmdW5jdGlvbnMgYXJlIHRoZSBrZXkgcGxheWVycyBpbiB0aGlzIGFyZWE/IEkgdGhpbmsgaXQgYm9pbHMgZG93biB0bzogYG50ZnNfaW9jdGxfc3RyZWFtYCwgYG50ZnNfaW9jdGxfbGlzdF9zdHJlYW1zYCwgYG50ZnNfcmVhZF9uYW1lZF9zdHJlYW1gLCBgbnRmc193cml0ZV9uYW1lZF9zdHJlYW1gLCBhbmQgYG50ZnNfcmVtb3ZlX25hbWVkX3N0cmVhbWAuXG5cbldhaXQgYSBtaW51dGUuLi4gYm90aCBgbnRmc19pb2N0bF9zdHJlYW1gIGFuZCBgbnRmc19pb2N0bF9saXN0X3N0cmVhbXNgIGFyZSBzdGF0aWMgZnVuY3Rpb25zLCB3aGlsZSBgbnRmc19pb2N0bGAgaXRzZWxmIGlzbid0LiBJJ20gZ29pbmcgdG8gaGF2ZSB0byBzZWUgaWYgYG50ZnNfaW9jdGxgIGlzIGV4cG9ydGVkIGFzIGEgc3ltYm9sIG9yIGlmIGl0J3Mgb25seSBjYWxsZWQgd2l0aGluIGBudGZzX2ZpbGVfb3BzYC4gQWxyaWdodCwgaXQncyB1c2VkIHdpdGhpbiBgbnRmc19maWxlX29wc2AuIEkgc2hvdWxkIGJlIGFibGUgdG8gc3BlY2lmeSBgbnRmc19pb2N0bGAgYXMgYSBmb2N1cyBzeW1ib2wuXG5cbkNhbiBJIHNwZWNpZnkgYG50ZnNfaW9jdGxfc3RyZWFtYCBkaXJlY3RseT8gU2luY2UgaXQncyBzdGF0aWMsIGl0IG1pZ2h0IGJlIGlubGluZWQgZHVyaW5nIGNvbXBpbGF0aW9uLCBtZWFuaW5nIGl0IG1pZ2h0IG5vdCBoYXZlIGl0cyBvd24gc3ltYm9sLiBBY3R1YWxseSwgd2FpdCBhIG1pbnV0ZSwgYG50ZnNfaW9jdGxfc3RyZWFtYCBpcyBhIGZhaXJseSBzaXphYmxlIGZ1bmN0aW9uLiBJdCBtaWdodCBub3QgYmUgaW5saW5lZC4gQnV0IHRvIGJlIHNhZmUsIEknbSBnb2luZyB0byBpbmNsdWRlIGBudGZzX2lvY3RsYCBhbG9uZyB3aXRoIGl0LlxuXG5BaCwgYW5kIHRob3NlIG90aGVyIHN0cmVhbSBmdW5jdGlvbnMg4oCTIGBudGZzX3JlYWRfbmFtZWRfc3RyZWFtYCwgYG50ZnNfd3JpdGVfbmFtZWRfc3RyZWFtYCwgYW5kIGBudGZzX3JlbW92ZV9uYW1lZF9zdHJlYW1gIOKAkyB0aG9zZSBhcmUgYWxzbyBzdGF0aWMuIExldCBtZSBqdXN0IGNvbmZpcm0gdGhhdC4gWWVwLCB0aGV5IGFyZS4gU28gcmVhbGx5LCBteSBmb2N1cyBzaG91bGQgYmUgb24gYG50ZnNfaW9jdGxgIHRoZW4uIFRoYXQncyB0aGUga2V5IGVudHJ5IHBvaW50LlxuXG5Pa2F5LCBsZXQncyBzd2l0Y2ggZ2VhcnMgZm9yIGEgbW9tZW50IGFuZCBzZWUgd2hpY2ggY29uZmlnIG9wdGlvbiBlbmFibGVzIHRoZSBOVEZTIGRyaXZlci4gSXQncyB0aGUgYE5URlNfRlNgIGNvbmZpZy4gV2FpdCwgZG9lcyBgTlRGU19SV2AgZXhpc3Q/IEl0J3MgdGltZSB0byBjaGVjayB0aGUgYGZzL250ZnMvS2NvbmZpZ2AgZmlsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4NDEsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTc6MTE6NDkuODUyMDMyNjM5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NjIyMTg5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTlRGU19SV1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9udGZzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE3OjExOjQ5Ljg5NjY2Mjc3OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwOTg1OTMwNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgTlRGUyBXcml0ZSBTdXBwb3J0IENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBHaXZlbiB0aGUgdGFzayBhdCBoYW5kLCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIE5URlMgd2l0aGluIHRoZSBrZXJuZWwuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IHdyaXRlIHN1cHBvcnQuIFdoZXJlIHdvdWxkIHRoYXQgYmUgZGVmaW5lZD8gTXkgZ3V0IHRlbGxzIG1lIGBmcy9udGZzL0tjb25maWdgIGlzIHRoZSBsaWtlbHkgcGxhY2UuIEl0J3MgdGhlIHN0YW5kYXJkIGxvY2F0aW9uIGZvciBmaWxlc3lzdGVtLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24uIFRpbWUgdG8gY2hlY2sgaWYgdGhlIHJlcXVpc2l0ZSBvcHRpb25zIGZvciByZWFkL3dyaXRlIGZ1bmN0aW9uYWxpdHkgYXJlIGV4cG9zZWQsIGFsb25nIHdpdGggYW55IHJlbGV2YW50IGRlcGVuZGVuY2llcyBvciBwb3RlbnRpYWwgY2F2ZWF0cy4gSXQncyBsaWtlbHkgdGhhdCB3cml0ZSBzdXBwb3J0LCBpZiBwcmVzZW50LCBtaWdodCBiZSBjb250aW5nZW50IG9uIGNlcnRhaW4ga2VybmVsIGZlYXR1cmVzIG9yIGV4dGVybmFsIGxpYnJhcmllcy4gVGhpcyBpbml0aWFsIGV4cGxvcmF0aW9uIHdpbGwgZ3VpZGUgbXkgbmV4dCBzdGVwcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI3MTUsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxNzoxMTo1My45OTUyNTgwMTNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MTM2Mjk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBOVEZTX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9udGZzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbnRmcy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvbnRmcy9LY29uZmlnOjI6Y29uZmlnIE5URlNfRlNcXG5mcy9udGZzL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiTlRGUyBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvbnRmcy9LY29uZmlnLTEyLVxcbmZzL250ZnMvS2NvbmZpZzoxMzpjb25maWcgTlRGU19ERUJVR1xcbmZzL250ZnMvS2NvbmZpZy0xNC1cXHRib29sIFxcXCJOVEZTIGRlYnVnZ2luZyBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvbnRmcy9LY29uZmlnLTM0LVxcbmZzL250ZnMvS2NvbmZpZzozNTpjb25maWcgTlRGU19GU19QT1NJWF9BQ0xcXG5mcy9udGZzL0tjb25maWctMzYtXFx0Ym9vbCBcXFwiTlRGUyBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTc6MTE6NTQuMDM5NDAzMTkyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NDgwODE2NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkV4YW1pbmluZyBOVEZTIFdyaXRlIFN1cHBvcnQqKlxuXG5BbHJpZ2h0LCBoYW5nIG9uIGEgc2Vjb25kLi4uIGBOVEZTX1JXYCBpcyBwb2ludGluZyB0byB0aGUgKm5ldyogYGZzL250ZnMzYCBkcml2ZXIsIG5vdCB0aGUgbGVnYWN5IGBmcy9udGZzYD8gSW50ZXJlc3RpbmcuIEkgbmVlZCB0byBxdWlja2x5IGNvbmZpcm0gc29tZXRoaW5nIGFib3V0IHdyaXRlIGNhcGFiaWxpdGllcyBoZXJlLiBJcyB3cml0ZSBzdXBwb3J0IGZvciB0aGUgb2xkZXIgYGZzL250ZnNgIGRyaXZlciBlbmFibGVkIGJ5IGRlZmF1bHQsIG9yIGlzIGl0IGdhdGVkIGJlaGluZCBhIHNlcGFyYXRlIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBsaWtlIGBDT05GSUdfTlRGU19XUklURWA/IEkgbmVlZCB0byBjaGVjayB0aGUga2VybmVsIGNvbmZpZyBvcHRpb25zIHRvIGdldCBhIHByb3BlciBoYW5kbGUgb24gdGhlIGN1cnJlbnQgbGFuZHNjYXBlLiBUaGlzIGlzIGxpa2VseSBkdWUgdG8gdGhlIG5lZWQgZm9yIGEgc3RhYmxlIGFuZCBtb3JlIGZlYXR1cmUtcmljaCBzb2x1dGlvbiB3aXRoIG50ZnMzLiBLbm93aW5nIHRoZSB3cml0ZSBzdXBwb3J0IHN0YXR1cyBvZiBib3RoIGRyaXZlcnMgd2lsbCBpbmZvcm0gdGhlIGZ1dHVyZSBkaXJlY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMTA5LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTc6MTE6NTcuOTg3NDg4MDZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxMTgyMzUwLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTlRGU19SV1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9udGZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTc6MTE6NTguMDQ4Njc3ODM5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMTc5OTcxMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBOVEZTIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBpbnRvIHRoZSBOVEZTIGZpbGUgc3lzdGVtIGNvbmZpZ3VyYXRpb24gYW5kLCBiYXNlZCBvbiB3aGF0IEkgc2VlIGluIGBmcy9udGZzL0tjb25maWdgLCBpdCBzZWVtcyBwcmV0dHkgbGltaXRlZC4gSSdtIG9ubHkgc2VlaW5nIG9wdGlvbnMgZm9yIGBOVEZTX0ZTYCwgYE5URlNfREVCVUdgLCBhbmQgYE5URlNfRlNfUE9TSVhfQUNMYC4gVGhhdCBmZWVscyBzcGFyc2UsIHJpZ2h0PyBJIHdhcyBleHBlY3RpbmcgbW9yZSBncmFudWxhciBjb250cm9sIGhlcmUuXG5cbk5vdywgSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciByZWFkLXdyaXRlIGNhcGFiaWxpdGllcyBhcmUgZXhwbGljaXRseSBjb25maWd1cmVkLiBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBgZnMvbnRmcy9LY29uZmlnYCBmb3IgdGhlIGBOVEZTX1JXYCBvcHRpb24uIEkgY2FuJ3QgYmUgc3VyZSwgYnV0IEkgZmVlbCBsaWtlIEknbSBtaXNzaW5nIHNvbWV0aGluZyBpbXBvcnRhbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMzY2LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTc6MTI6MDEuMzY2Njc4MTY2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTMzNzI4OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiUldcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbnRmcy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxNzoxMjowMS40MDgwMjI2NzVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ4ODg5MjA4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipOYXZpZ2F0aW5nIHRoZSBOVEZTIExhbmRzY2FwZSoqXG5cblJpZ2h0LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoZSBOVEZTIGRyaXZlciBzaXR1YXRpb24sIHRyeWluZyB0byBmaWd1cmUgb3V0IHNvbWUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJIHJlbWVtYmVyIHNlZWluZyBzb21ldGhpbmcgYWJvdXQgcmVhZC13cml0ZSBjYXBhYmlsaXRpZXMuLi4gYW5kIGluaXRpYWxseSwgSSB3YXMgbG9va2luZyBhdCB0aGUgb2xkIGBmcy9udGZzL0tjb25maWdgLCBidXQgKnRoYXQncyogbm90IHF1aXRlIHJpZ2h0LiBIbW0sIG5vIGBOVEZTX1JXYCBkZWZpbmVkIHRoZXJlLiBEdWgsIG9mIGNvdXJzZSEgVGhhdCdzIGxlZ2FjeSBjb2RlLiBJIG5lZWQgdG8gYmUgaW4gdGhlIG5ldyBgbnRmczNgIGRyaXZlciBub3cuIExldCdzIHBpdm90IGFuZCBjaGVjayBgZnMvbnRmczMvS2NvbmZpZ2AgaW5zdGVhZC4gVGhhdCdzIHdoZXJlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgKnNob3VsZCogcmVzaWRlLCBhbmQgd2hlcmUgSSBzaG91bGQgZmluZCB0aGUgc2V0dGluZ3MgZm9yIHJlYWQtd3JpdGUgc3VwcG9ydCwgbm93IHRoYXQgdGhlIHJld3JpdGUgaXMgZnVsbHkgaW50ZWdyYXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM2MTQsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxNzoxMjowNC44OTY5MTY5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjI1Njc0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTlRGUzNfRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbnRmczMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9udGZzMy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvbnRmczMvS2NvbmZpZzoyOmNvbmZpZyBOVEZTM19GU1xcbmZzL250ZnMzL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiTlRGUyBSZWFkLVdyaXRlIGZpbGUgc3lzdGVtIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9udGZzMy9LY29uZmlnPTI4PWNvbmZpZyBOVEZTM19MWlhfWFBSRVNTXFxuLS1cXG5mcy9udGZzMy9LY29uZmlnLTM3LVxcbmZzL250ZnMzL0tjb25maWc6Mzg6Y29uZmlnIE5URlMzX0ZTX1BPU0lYX0FDTFxcbmZzL250ZnMzL0tjb25maWctMzktXFx0Ym9vbCBcXFwiTlRGUyBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTc6MTI6MDQuOTQzMTgwMjI5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NDYwODA3NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIE5URlMgUGF0Y2gqKlxuXG5BbHJpZ2h0LCB0aGUgcGF0Y2ggbGFuZGVkIGluIGBmcy9udGZzL2ZpbGUuY2AuIFRoYXQncyBhIGtleSBmaWxlLCBidXQgSSBuZWVkIGEgcXVpY2sgc2FuaXR5IGNoZWNrIGJlZm9yZSBkaXZpbmcgZGVlcC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNvbmZpcm0gd2hlcmUgd3JpdGUgc3VwcG9ydCBleGlzdHMsIGxldCdzIG1ha2Ugc3VyZSB0aGF0IHRoYXQgaXMgcHJlc2VudCB3aXRoaW4gYGZzL250ZnMvS2NvbmZpZ2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MDQ1LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTc6MTI6MDcuODg5MjYzMzgyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDk5Mzc4OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwid3JpdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbnRmcy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxNzoxMjowNy45MzQyNjgzMDFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEyNTM0MjQ1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKktjb25maWcgRmlsZSBFeGFtaW5hdGlvbioqXG5cbkhtbSwgc3RyYW5nZS4gSSB3YXMgZXhwZWN0aW5nIHRvIGZpbmQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gXCJ3cml0ZVwiIGZ1bmN0aW9uYWxpdHkgaW4gYGZzL250ZnMvS2NvbmZpZ2AsIGJ1dCBhIHF1aWNrIHNjYW4gc3VnZ2VzdHMgaXQncyBub3QgcHJlc2VudC4gT2theSwgSSBuZWVkIHRvIGJlIHRob3JvdWdoLiBJIGNhbid0IGp1c3QgYXNzdW1lIEknbSByaWdodCwgZXZlbiB3aXRoIG15IGV4cGVyaWVuY2UuIEknbGwgbmVlZCB0byBnbyBiYWNrIGFuZCBtZXRob2RpY2FsbHkgY2hlY2sgdGhlIGVudGlyZSBmaWxlIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIHRoZSBrZXl3b3JkIGlzbid0IHVzZWQuIEkgZG9uJ3Qgd2FudCB0byBtaXNzIGFueXRoaW5nIHN1YnRsZSBoaWRkZW4gd2l0aGluIGEgZGVwZW5kZW5jeSBzdGF0ZW1lbnQgb3IgYSBjb21tZW50LiBHb3R0YSBiZSBtZXRpY3Vsb3VzIGhlcmUuIFRoaXMgS2NvbmZpZyBmaWxlIGlzIGEgY3J1Y2lhbCBlbGVtZW50IG9mIGZpbGVzeXN0ZW0gY29uZmlndXJhdGlvbiwgYW5kIG1pc3NpbmcgYSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbiBjYW4gaW50cm9kdWNlIGlzc3VlcyBkb3duIHRoZSBsaW5lLCBzbyBjYXJlZnVsIGluc3BlY3Rpb24gaXMgcGFyYW1vdW50LiBJJ2xsIHRha2UgbXkgdGltZSBhbmQgbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MjE2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTc6MTI6MTEuMDU5NjEzMjgyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0NzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL250ZnMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBOVEZTX0ZTXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiTlRGUyBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcbiAgIDQ6XFx0XFx0c2VsZWN0IE5MU1xcbiAgIDU6XFx0XFx0c2VsZWN0IEZTX0lPTUFQXFxuICAgNjpcXHRcXHRoZWxwXFxuICAgNzpcXHRcXHQgIE5URlMgaXMgdGhlIGZpbGUgc3lzdGVtIG9mIE1pY3Jvc29mdCBXaW5kb3dzIE5ULCAyMDAwLCBYUCBhbmQgMjAwMy5cXG4gICA4OlxcdFxcdCAgVGhpcyBhbGxvd3MgeW91IHRvIG1vdW50IGRldmljZXMgZm9ybWF0dGVkIHdpdGggdGhlIG50ZnMgZmlsZSBzeXN0ZW0uXFxuICAgOTpcXHRcXG4gIDEwOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkXFxuICAxMTpcXHRcXHQgIG50ZnMuXFxuICAxMjpcXHRcXG4gIDEzOlxcdGNvbmZpZyBOVEZTX0RFQlVHXFxuICAxNDpcXHRcXHRib29sIFxcXCJOVEZTIGRlYnVnZ2luZyBzdXBwb3J0XFxcIlxcbiAgMTU6XFx0XFx0ZGVwZW5kcyBvbiBOVEZTX0ZTXFxuICAxNjpcXHRcXHRoZWxwXFxuICAxNzpcXHRcXHQgIElmIHlvdSBhcmUgZXhwZXJpZW5jaW5nIGFueSBwcm9ibGVtcyB3aXRoIHRoZSBOVEZTIGZpbGUgc3lzdGVtLCBzYXlcXG4gIDE4OlxcdFxcdCAgWSBoZXJlLiAgVGhpcyB3aWxsIHJlc3VsdCBpbiBhZGRpdGlvbmFsIGNvbnNpc3RlbmN5IGNoZWNrcyB0byBiZVxcbiAgMTk6XFx0XFx0ICBwZXJmb3JtZWQgYnkgdGhlIGRyaXZlciBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgZGVidWdnaW5nIG1lc3NhZ2VzIHRvXFxuICAyMDpcXHRcXHQgIGJlIHdyaXR0ZW4gdG8gdGhlIHN5c3RlbSBsb2cuICBOb3RlIHRoYXQgZGVidWdnaW5nIG1lc3NhZ2VzIGFyZVxcbiAgMjE6XFx0XFx0ICBkaXNhYmxlZCBieSBkZWZhdWx0LiAgVG8gZW5hYmxlIHRoZW0sIHN1cHBseSB0aGUgb3B0aW9uIGRlYnVnX21zZ3M9MVxcbiAgMjI6XFx0XFx0ICBhdCB0aGUga2VybmVsIGNvbW1hbmQgbGluZSB3aGVuIGJvb3RpbmcgdGhlIGtlcm5lbCBvciBhcyBhbiBvcHRpb25cXG4gIDIzOlxcdFxcdCAgdG8gaW5zbW9kIHdoZW4gbG9hZGluZyB0aGUgbnRmcyBtb2R1bGUuICBPbmNlIHRoZSBkcml2ZXIgaXMgYWN0aXZlLFxcbiAgMjQ6XFx0XFx0ICB5b3UgY2FuIGVuYWJsZSBkZWJ1Z2dpbmcgbWVzc2FnZXMgYnkgZG9pbmcgKGFzIHJvb3QpOlxcbiAgMjU6XFx0XFx0ICBlY2hvIDEgXFx1MDAzZSAvcHJvYy9zeXMvZnMvbnRmcy1kZWJ1Z1xcbiAgMjY6XFx0XFx0ICBSZXBsYWNpbmcgdGhlIFxcXCIxXFxcIiB3aXRoIFxcXCIwXFxcIiB3b3VsZCBkaXNhYmxlIGRlYnVnIG1lc3NhZ2VzLlxcbiAgMjc6XFx0XFxuICAyODpcXHRcXHQgIElmIHlvdSBsZWF2ZSBkZWJ1Z2dpbmcgbWVzc2FnZXMgZGlzYWJsZWQsIHRoaXMgcmVzdWx0cyBpbiBsaXR0bGVcXG4gIDI5OlxcdFxcdCAgb3ZlcmhlYWQsIGJ1dCBlbmFibGluZyBkZWJ1ZyBtZXNzYWdlcyByZXN1bHRzIGluIHZlcnkgc2lnbmlmaWNhbnRcXG4gIDMwOlxcdFxcdCAgc2xvd2Rvd24gb2YgdGhlIHN5c3RlbS5cXG4gIDMxOlxcdFxcbiAgMzI6XFx0XFx0ICBXaGVuIHJlcG9ydGluZyBidWdzLCBwbGVhc2UgdHJ5IHRvIGhhdmUgYXZhaWxhYmxlIGEgZnVsbCBkdW1wIG9mXFxuICAzMzpcXHRcXHQgIGRlYnVnZ2luZyBtZXNzYWdlcyB3aGlsZSB0aGUgbWlzYmVoYXZpb3VyIHdhcyBvY2N1cnJpbmcuXFxuICAzNDpcXHRcXG4gIDM1OlxcdGNvbmZpZyBOVEZTX0ZTX1BPU0lYX0FDTFxcbiAgMzY6XFx0XFx0Ym9vbCBcXFwiTlRGUyBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1xcXCJcXG4gIDM3OlxcdFxcdGRlcGVuZHMgb24gTlRGU19GU1xcbiAgMzg6XFx0XFx0c2VsZWN0IEZTX1BPU0lYX0FDTFxcbiAgMzk6XFx0XFx0aGVscFxcbiAgNDA6XFx0XFx0ICBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0cyAoQUNMcykgc3VwcG9ydCBhZGRpdGlvbmFsIGFjY2VzcyByaWdodHNcXG4gIDQxOlxcdFxcdCAgZm9yIHVzZXJzIGFuZCBncm91cHMgYmV5b25kIHRoZSBzdGFuZGFyZCBvd25lci9ncm91cC93b3JsZCBzY2hlbWUuXFxuICA0MjpcXHRcXG4gIDQzOlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBBQ0wgc3VwcG9ydCBmb3IgbnRmcywgcHJvdmlkaW5nIGZ1bmN0aW9uYWwgcGFyaXR5XFxuICA0NDpcXHRcXHQgIHdpdGggbnRmczMgZHJpdmllci5cXG4gIDQ1OlxcdFxcbiAgNDY6XFx0XFx0ICBOT1RFOiB0aGlzIGlzIGxpbnV4IG9ubHkgZmVhdHVyZS4gV2luZG93cyB3aWxsIGlnbm9yZSB0aGVzZSBBQ0xzLlxcbiAgNDc6XFx0XFxuICA0ODpcXHRcXHQgIElmIHlvdSBkb24ndCBrbm93IHdoYXQgQWNjZXNzIENvbnRyb2wgTGlzdHMgYXJlLCBzYXkgTi5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTc6MTI6MTEuMDU5Njg5MTkyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MDU3Njc5NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBOVEZTIExhbmRzY2FwZSoqXG5cbkhtbSwgaW50ZXJlc3RpbmcuIEl0IHNlZW1zIGxpa2UgYGZzL250ZnNgIGhhcyB3cml0ZSBzdXBwb3J0IGVuYWJsZWQgcmlnaHQgb3V0IG9mIHRoZSBib3ggbm93LiBUaGF0J3MgYSBkZXBhcnR1cmUgZnJvbSBob3cgdGhpbmdzIHVzZWQgdG8gYmUuIEkgc2VlbSB0byByZWNhbGwgdGhhdCBpbiBlYXJsaWVyIGtlcm5lbHMsIHRoZSBOVEZTIGZpbGVzeXN0ZW0gbW9kdWxlIGhhZCBhIGBOVEZTX1JXYCBmbGFnLi4ucmlnaHQ/IFdhcyBpdCBkcm9wcGVkLCBvciBwZXJoYXBzIG1lcmdlZCBpbnRvIHNvbWV0aGluZyBlbHNlPyBJdCdzIGJlZW4gYSB3aGlsZSBzaW5jZSBJIGhhZCB0byByZWFsbHkgZGlnIGludG8gdGhpcyBwYXJ0aWN1bGFyIGJpdCBvZiBrZXJuZWwgY29kZS4gQmVzdCB3YXkgdG8gZmlndXJlIG91dCB3aGF0J3MgY2hhbmdlZCBpcyB0byBnbyBkaXJlY3RseSB0byB0aGUgc291cmNlLiBMZXQgbWUgdGFrZSBhIGxvb2sgYXQgdGhlIGBmcy9udGZzL01ha2VmaWxlYCBhbmQgc2VlIGlmIHRoZSBjbHVlcyBhcmUgaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MTc1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxNzoxMjoxNC41NjU0NTk0NzZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE4OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvbnRmcy9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHRcXG4gICAzOlxcdG9iai0kKENPTkZJR19OVEZTX0ZTKSArPSBudGZzLm9cXG4gICA0OlxcdFxcbiAgIDU6XFx0bnRmcy15IDo9IGFvcHMubyBhdHRyaWIubyBjb2xsYXRlLm8gZGlyLm8gZmlsZS5vIGluZGV4Lm8gaW5vZGUubyBcXFxcXFxuICAgNjpcXHRcXHQgIG1mdC5vIG1zdC5vIG5hbWVpLm8gcnVubGlzdC5vIHN1cGVyLm8gdW5pc3RyLm8gYXR0cmxpc3QubyBlYS5vIFxcXFxcXG4gICA3OlxcdFxcdCAgdXBjYXNlLm8gYml0bWFwLm8gbGNuYWxsb2MubyBsb2dmaWxlLm8gcmVwYXJzZS5vIGNvbXByZXNzLm8gXFxcXFxcbiAgIDg6XFx0XFx0ICBpb21hcC5vIGRlYnVnLm8gc3lzY3RsLm8gb2JqZWN0X2lkLm8gYmRldi1pby5vXFxuICAgOTpcXHRcXG4gIDEwOlxcdGNjZmxhZ3MtJChDT05GSUdfTlRGU19ERUJVRykgKz0gLURERUJVR1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxNzoxMjoxNC41NjU1MjI2ODZaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA2MjQ2MTYzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIE5URlM6IEEgRm9jdXNlZCBBcHByb2FjaCoqXG5cbkFscmlnaHQsIGl0IGxvb2tzIGxpa2UgYE5URlNfRlNgIGlzIHRoZSBvbmx5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIEkgbmVlZCB0byBjb25zaWRlciBmb3IgdGhpcy4gU3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gQnV0IGhvbGQgb24sIHRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgaW9jdGxzIHdpdGhpbiBgZnMvbnRmcy9maWxlLmNgLiBMZXQncyBzZWUuLi4gd2UndmUgZ290IGBOVEZTX0lPQ19TVFJFQU1fUkVBRGAsIGBOVEZTX0lPQ19TVFJFQU1fV1JJVEVgLCBgTlRGU19JT0NfU1RSRUFNX1JFTU9WRWAsIGFuZCBgTlRGU19JT0NfTElTVF9TVFJFQU1TYC4gSW50ZXJlc3RpbmcuIFRoZXNlIGRlZmluaXRlbHkgd2FycmFudCBhIGNsb3NlciBsb29rIHdpdGggZnV6emluZy5cblxuTXkgcHJpbWFyeSBmb2N1cyBoZXJlIHdpbGwgYmUgYG50ZnNfaW9jdGxgLiBJdCBhcHBlYXJzIHRvIGJlIHRoZSBlbnRyeSBwb2ludCBmb3IgaGFuZGxpbmcgdGhlc2UgbmV3IGlvY3Rscy4gTGV0IG1lIGRvdWJsZS1jaGVjayB0aGUgY29kZSBkaWZmIHF1aWNrbHkgdG8gY29uZmlybSB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zLiBPa2F5LCBgbnRmc19yZWFkX25hbWVkX3N0cmVhbWAsIGBudGZzX3dyaXRlX25hbWVkX3N0cmVhbWAsIGBudGZzX3JlbW92ZV9uYW1lZF9zdHJlYW1gLCBgbnRmc19pb2N0bF9zdHJlYW1gLCBhbmQgYG50ZnNfaW9jdGxfbGlzdF9zdHJlYW1zYCBhcmUgYWxsIHN0YXRpYyBoZWxwZXJzLiBKdXN0IGBudGZzX2lvY3RsYCBpcyBub24tc3RhdGljLlxuXG5Ob3csIGxldCdzIGp1c3QgbWFrZSBzdXJlIGBudGZzX2lvY3RsYCBpcyBhY3R1YWxseSBleHBvcnRlZCBhbmQgdXNlZCBvdXRzaWRlIG9mIGBmcy9udGZzL2ZpbGUuY2AuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgZnV6emluZyBwb3RlbnRpYWwgbGllcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU2NDAsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxNzoxMjoxOS42Mjc5ODY5ODVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxMTI4Mjk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm50ZnNfaW9jdGxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbnRmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbnRmcy9kaXIuYz0xMTk1PWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbnRmc19kaXJfb3BzID0ge1xcbi0tXFxuZnMvbnRmcy9kaXIuYy0xMjAxLVxcdC5yZWxlYXNlXFx0PSBudGZzX2Rpcl9yZWxlYXNlLFxcbmZzL250ZnMvZGlyLmM6MTIwMjpcXHQudW5sb2NrZWRfaW9jdGxcXHQ9IG50ZnNfaW9jdGwsXFxuZnMvbnRmcy9kaXIuYy0xMjAzLSNpZmRlZiBDT05GSUdfQ09NUEFUXFxuLS1cXG5mcy9udGZzL2ZpbGUuYz03NDA9c3RhdGljIHNzaXplX3QgbnRmc19maWxlX3NwbGljZV9yZWFkKHN0cnVjdCBmaWxlICppbiwgbG9mZl90ICpwcG9zLFxcbi0tXFxuZnMvbnRmcy9maWxlLmMtNzQ4LVxcbmZzL250ZnMvZmlsZS5jOjc0OTpzdGF0aWMgaW50IG50ZnNfaW9jdGxfc2h1dGRvd24oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyBhcmcpXFxuZnMvbnRmcy9maWxlLmMtNzUwLXtcXG4tLVxcbmZzL250ZnMvZmlsZS5jLTc2MS1cXG5mcy9udGZzL2ZpbGUuYzo3NjI6c3RhdGljIGludCBudGZzX2lvY3RsX2dldF92b2x1bWVfbGFiZWwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbmZzL250ZnMvZmlsZS5jLTc2My17XFxuLS1cXG5mcy9udGZzL2ZpbGUuYy03ODQtXFxuZnMvbnRmcy9maWxlLmM6Nzg1OnN0YXRpYyBpbnQgbnRmc19pb2N0bF9zZXRfdm9sdW1lX2xhYmVsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFyZylcXG5mcy9udGZzL2ZpbGUuYy03ODYte1xcbi0tXFxuZnMvbnRmcy9maWxlLmMtODA4LVxcbmZzL250ZnMvZmlsZS5jOjgwOTpzdGF0aWMgaW50IG50ZnNfaW9jdGxfZml0cmltKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sLCB1bnNpZ25lZCBsb25nIGFyZylcXG5mcy9udGZzL2ZpbGUuYy04MTAte1xcbi0tXFxuZnMvbnRmcy9maWxlLmM9MTAzMT1lbnVtIG50ZnNfc3RyZWFtX29wIHtcXG4tLVxcbmZzL250ZnMvZmlsZS5jLTEwMzYtXFxuZnMvbnRmcy9maWxlLmM6MTAzNzpzdGF0aWMgbG9uZyBudGZzX2lvY3RsX3N0cmVhbShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhcmcsXFxuZnMvbnRmcy9maWxlLmMtMTAzOC1cXHRcXHRcXHQgICAgICBlbnVtIG50ZnNfc3RyZWFtX29wIG9wKVxcbi0tXFxuZnMvbnRmcy9maWxlLmMtMTE3Ni1cXG5mcy9udGZzL2ZpbGUuYzoxMTc3OnN0YXRpYyBpbnQgbnRmc19pb2N0bF9saXN0X3N0cmVhbXMoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbmZzL250ZnMvZmlsZS5jLTExNzgte1xcbi0tXFxuZnMvbnRmcy9maWxlLmMtMTM0Mi1cXG5mcy9udGZzL2ZpbGUuYzoxMzQzOmxvbmcgbnRmc19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuZnMvbnRmcy9maWxlLmMtMTM0NC17XFxuLS1cXG5mcy9udGZzL2ZpbGUuYy0xMzQ2LVxcdGNhc2UgRlNfSU9DX1NIVVRET1dOOlxcbmZzL250ZnMvZmlsZS5jOjEzNDc6XFx0XFx0cmV0dXJuIG50ZnNfaW9jdGxfc2h1dGRvd24oZmlsZV9pbm9kZShmaWxwKS1cXHUwMDNlaV9zYiwgYXJnKTtcXG5mcy9udGZzL2ZpbGUuYy0xMzQ4LVxcdGNhc2UgRlNfSU9DX0dFVEZTTEFCRUw6XFxuZnMvbnRmcy9maWxlLmM6MTM0OTpcXHRcXHRyZXR1cm4gbnRmc19pb2N0bF9nZXRfdm9sdW1lX2xhYmVsKGZpbHAsIGFyZyk7XFxuZnMvbnRmcy9maWxlLmMtMTM1MC1cXHRjYXNlIEZTX0lPQ19TRVRGU0xBQkVMOlxcbmZzL250ZnMvZmlsZS5jOjEzNTE6XFx0XFx0cmV0dXJuIG50ZnNfaW9jdGxfc2V0X3ZvbHVtZV9sYWJlbChmaWxwLCBhcmcpO1xcbmZzL250ZnMvZmlsZS5jLTEzNTItXFx0Y2FzZSBGSVRSSU06XFxuZnMvbnRmcy9maWxlLmM6MTM1MzpcXHRcXHRyZXR1cm4gbnRmc19pb2N0bF9maXRyaW0oTlRGU19TQihmaWxlX2lub2RlKGZpbHApLVxcdTAwM2VpX3NiKSwgYXJnKTtcXG5mcy9udGZzL2ZpbGUuYy0xMzU0LVxcdGNhc2UgTlRGU19JT0NfU1RSRUFNX1JFQUQ6XFxuZnMvbnRmcy9maWxlLmM6MTM1NTpcXHRcXHRyZXR1cm4gbnRmc19pb2N0bF9zdHJlYW0oZmlscCwgYXJnLCBOVEZTX1NUUkVBTV9PUF9SRUFEKTtcXG5mcy9udGZzL2ZpbGUuYy0xMzU2LVxcdGNhc2UgTlRGU19JT0NfU1RSRUFNX1dSSVRFOlxcbmZzL250ZnMvZmlsZS5jOjEzNTc6XFx0XFx0cmV0dXJuIG50ZnNfaW9jdGxfc3RyZWFtKGZpbHAsIGFyZywgTlRGU19TVFJFQU1fT1BfV1JJVEUpO1xcbmZzL250ZnMvZmlsZS5jLTEzNTgtXFx0Y2FzZSBOVEZTX0lPQ19TVFJFQU1fUkVNT1ZFOlxcbmZzL250ZnMvZmlsZS5jOjEzNTk6XFx0XFx0cmV0dXJuIG50ZnNfaW9jdGxfc3RyZWFtKGZpbHAsIGFyZywgTlRGU19TVFJFQU1fT1BfUkVNT1ZFKTtcXG5mcy9udGZzL2ZpbGUuYy0xMzYwLVxcdGNhc2UgTlRGU19JT0NfTElTVF9TVFJFQU1TOlxcbmZzL250ZnMvZmlsZS5jOjEzNjE6XFx0XFx0cmV0dXJuIG50ZnNfaW9jdGxfbGlzdF9zdHJlYW1zKGZpbHAsIGFyZyk7XFxuZnMvbnRmcy9maWxlLmMtMTM2Mi1cXHRkZWZhdWx0Olxcbi0tXFxuZnMvbnRmcy9maWxlLmM9MTM2OD1sb25nIG50ZnNfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLFxcbi0tXFxuZnMvbnRmcy9maWxlLmMtMTM3MC17XFxuZnMvbnRmcy9maWxlLmM6MTM3MTpcXHRyZXR1cm4gbnRmc19pb2N0bChmaWxwLCBjbWQsICh1bnNpZ25lZCBsb25nKWNvbXBhdF9wdHIoYXJnKSk7XFxuZnMvbnRmcy9maWxlLmMtMTM3Mi19XFxuLS1cXG5mcy9udGZzL2ZpbGUuYz0xNjg0PWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbnRmc19maWxlX29wcyA9IHtcXG4tLVxcbmZzL250ZnMvZmlsZS5jLTE2OTMtXFx0LnNwbGljZV93cml0ZVxcdD0gaXRlcl9maWxlX3NwbGljZV93cml0ZSxcXG5mcy9udGZzL2ZpbGUuYzoxNjk0OlxcdC51bmxvY2tlZF9pb2N0bFxcdD0gbnRmc19pb2N0bCxcXG5mcy9udGZzL2ZpbGUuYy0xNjk1LSNpZmRlZiBDT05GSUdfQ09NUEFUXFxuLS1cXG5mcy9udGZzL250ZnMuaD0yNTM9aW50IG50ZnNfZm9yY2Vfc2h1dGRvd24oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIGZsYWdzKTtcXG5mcy9udGZzL250ZnMuaDoyNTQ6bG9uZyBudGZzX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7XFxuZnMvbnRmcy9udGZzLmgtMjU1LSNpZmRlZiBDT05GSUdfQ09NUEFUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE3OjEyOjE5LjY3OTEyMDUwNFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjM5ODMxNjk5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBOVEZTIElvY3RsIFBhdGNoIGZvciBGdXp6aW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIGZvciBmdXp6aW5nLiBgbnRmc19pb2N0bGAgaW1tZWRpYXRlbHkganVtcHMgb3V0IGFzIHRoZSBjZW50cmFsIHBvaW50IGhlcmUuIEl0J3Mgbm9uLXN0YXRpYyBhbmQgYWxyZWFkeSB1dGlsaXplZCB3aXRoaW4gYG50ZnNfZGlyX29wc2AgYW5kIGBudGZzX2ZpbGVfb3BzYCwgc28gaXQncyBjbGVhcmx5IHRoZSByaWdodCBzeW1ib2wgdG8gZm9jdXMgb24uXG5cbkZpcnN0LCBJIHF1aWNrbHkgY29uZmlybWVkIHRoYXQgYGZzL250ZnNgIGlzIHN0aWxsIHByZXNlbnQgaW4gdGhlIGtlcm5lbCwgYW5kIHRoZSBwYXRjaCwgd2hpY2ggaW50cm9kdWNlcyB0aGUgbmV3IGlvY3Rscywgd2FzIGluZGVlZCBhcHBsaWVkIHRvIGBmcy9udGZzL2ZpbGUuY2AuIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsaXR5IGZvciBuYW1lZCBzdHJlYW1zLCBhZGRpbmcgYE5URlNfSU9DX1NUUkVBTV9SRUFEYCwgYE5URlNfSU9DX1NUUkVBTV9XUklURWAsIGBOVEZTX0lPQ19TVFJFQU1fUkVNT1ZFYCwgYW5kIGBOVEZTX0lPQ19MSVNUX1NUUkVBTVNgLCBhcyB3ZWxsIGFzIGEgY29ycmVzcG9uZGluZyBgdWFwaS9saW51eC9udGZzLmhgIGhlYWRlci5cblxuSSBjaGVja2VkIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGFuZCBgTlRGU19GU2AgaXMgdGhlIG9ubHkgb25lIHJlcXVpcmVkLiBObyBkZXBlbmRlbmNlIG9uIGBOVEZTX0ZTX1BPU0lYX0FDTGAgb3IgYW55IG90aGVyIG9ic2N1cmUgc2V0dGluZ3MuIFRoaXMgc2ltcGxpZmllcyB0aGluZ3MuXG5cbkEgcXVpY2sgcmV2aWV3IG9mIHRoZSBuZXcgZnVuY3Rpb25zIGFkZGVkIHNob3dlZCB0aGF0IHRoZXkgYXJlIGFsbCBzdGF0aWMsIGV4Y2VwdCBmb3IgYG50ZnNfaW9jdGxgLCB3aGljaCBpcyBhIGtleSBtb2RpZmljYXRpb24gdG8gaGFuZGxlIHRoZSBuZXcgaW9jdGxzLlxuXG5MZXQgbWUgdGFrZSBhbm90aGVyIGxvb2sgYXQgdGhlIHBhdGNoIGl0c2VsZiB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmc6XG5gYGBjXG4rc3RhdGljIGludCBudGZzX3JlYWRfbmFtZWRfc3RyZWFtKHN0cnVjdCBudGZzX2lub2RlICpuaSwgX19sZTE2ICp1bmFtZSxcbitcdFx0dTMyIHVuYW1lX2xlbiwgdTY0IG9mZnNldCwgdTY0IGxlbiwgdm9pZCAqZGF0YV9idWYsXG4rXHRcdHU2NCAqcmJ5dGVzKVxuLi4uXG4rc3RhdGljIGludCBudGZzX3dyaXRlX25hbWVkX3N0cmVhbShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIF9fbGUxNiAqdW5hbWUsXG4rXHRcdHUzMiB1bmFtZV9sZW4sIHU2NCBvZmZzZXQsIHU2NCBsZW4sIHZvaWQgKmRhdGFfc3RyZWFtLFxuK1x0XHR1NjQgKndieXRlcylcbi4uLlxuK3N0YXRpYyBpbnQgbnRmc19yZW1vdmVfbmFtZWRfc3RyZWFtKHN0cnVjdCBudGZzX2lub2RlICpuaSwgX19sZTE2ICp1bmFtZSxcbitcdFx0dTMyIHVuYW1lX2xlbilcbi4uLlxuK3N0YXRpYyBsb25nIG50ZnNfaW9jdGxfc3RyZWFtKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFyZyxcbitcdFx0XHQgICAgICBlbnVtIG50ZnNfc3RyZWFtX29wIG9wKVxuLi4uXG4rc3RhdGljIGludCBudGZzX2lvY3RsX2xpc3Rfc3RyZWFtcyhzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhcmcpXG4uLi5cbiBsb25nIG50ZnNfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuIHtcbiBcdHN3aXRjaCAoY21kKSB7XG5AQCAtODUwLDYgKzEzNTEsMTQgQEAgbG9uZyBudGZzX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbiBcdFx0cmV0dXJuIG50ZnNfaW9jdGxfc2V0X3ZvbHVtZV9sYWJlbChmaWxwLCBhcmcpO1xuIFx0Y2FzZSBGSVRSSU06XG4gXHRcdHJldHVybiBudGZzX2lvY3RsX2ZpdHJpbShOVEZTX1NCKGZpbGVfaW5vZGUoZmlscCktXHUwMDNlaV9zYiksIGFyZyk7XG4rXHRjYXNlIE5URlNfSU9DX1NUUkVBTV9SRUFEOlxuK1x0XHRyZXR1cm4gbnRmc19pb2N0bF9zdHJlYW0oZmlscCwgYXJnLCBOVEZTX1NUUkVBTV9PUF9SRUFEKTtcbitcdGNhc2UgTlRGU19JT0NfU1RSRUFNX1dSSVRFOlxuK1x0XHRyZXR1cm4gbnRmc19pb2N0bF9zdHJlYW0oZmlscCwgYXJnLCBOVEZTX1NUUkVBTV9PUF9XUklURSk7XG4rXHRjYXNlIE5URlNfSU9DX1NUUkVBTV9SRU1PVkU6XG4rXHRcdHJldHVybiBudGZzX2lvY3RsX3N0cmVhbShmaWxwLCBhcmcsIE5URlNfU1RSRUFNX09QX1JFTU9WRSk7XG4rXHRjYXNlIE5URlNfSU9DX0xJU1RfU1RSRUFNUzpcbitcdFx0cmV0dXJuIG50ZnNfaW9jdGxfbGlzdF9zdHJlYW1zKGZpbHAsIGFyZyk7XG4gXHRkZWZhdWx0OlxuIFx0XHRyZXR1cm4gLUVOT1RUWTtcbiBcdH1cbmBgYFxuXG5JbmRlZWQsIHRoZSBwYXRjaCBpcyBmdW5jdGlvbmFsIGFuZCBhZGRzIGZ1bmN0aW9uYWxpdHkgcmVsYXRlZCB0byBuYW1lZCBzdHJlYW1zIChBbHRlcm5hdGUgRGF0YSBTdHJlYW1zKSB0byBOVEZTLCBhbGwgcmVhY2hhYmxlIHRocm91Z2ggYG50ZnNfaW9jdGxgLiBJdCdzIGNsZWFybHkgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuXG5cbk15IGNvbmNsdXNpb24gaXM6XG5cbkNvbmZpZ3M6IGBOVEZTX0ZTYFxuRm9jdXMgU3ltYm9sOiBgbnRmc19pb2N0bGBcblJlYXNvbmluZzogVGhlIHBhdGNoIGFkZHMgbmV3IGlvY3RscyB0byB0aGUgTlRGUyBmaWxlc3lzdGVtIHRvIHJlYWQsIHdyaXRlLCByZW1vdmUsIGFuZCBsaXN0IG5hbWVkIHN0cmVhbXMuIFRoZXNlIGlvY3RscyBhcmUgYWxsIGhhbmRsZWQgd2l0aGluIGBudGZzX2lvY3RsYC4gYE5URlNfRlNgIGlzIHRoZSBvbmx5IGNvbmZpZyBuZWVkZWQuXG5JJ2xsIG5vdyBwcm92aWRlIHRoZSByZWxldmFudCByZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzY4MSwiT3V0cHV0VG9rZW5zIjo4MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxNzoxMjozMi4wNzc0NDE3NjdaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjA2NTg5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTlRGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm50ZnNfaW9jdGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIG5ldyBpb2N0bHMgdG8gdGhlIE5URlMgZmlsZXN5c3RlbSB0byByZWFkLCB3cml0ZSwgcmVtb3ZlLCBhbmQgbGlzdCBuYW1lZCBzdHJlYW1zIChBbHRlcm5hdGUgRGF0YSBTdHJlYW1zKS4gVGhlIGlvY3RscyBhcmUgcmVhY2hhYmxlIHZpYSBgbnRmc19pb2N0bGAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTlRGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm50ZnNfaW9jdGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIG5ldyBpb2N0bHMgdG8gdGhlIE5URlMgZmlsZXN5c3RlbSB0byByZWFkLCB3cml0ZSwgcmVtb3ZlLCBhbmQgbGlzdCBuYW1lZCBzdHJlYW1zIChBbHRlcm5hdGUgRGF0YSBTdHJlYW1zKS4gVGhlIGlvY3RscyBhcmUgcmVhY2hhYmxlIHZpYSBgbnRmc19pb2N0bGAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow7djrl[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-30 16:55:04 +0000 UTC FinishedAt: 2026-07-30 17:12:33 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "6677ee30e197d1c6236d2ad363258bc918c7a3a2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NTFS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "6677ee30e197d1c6236d2ad363258bc918c7a3a2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NTFS_FS" ], "series_id": "0eb9e701-56ca-4a44-9c51-3fd2fe279335" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ntfs_ioctl" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE3OjExPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05URlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtudGZzX2lvY3RsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgbmV3IGlvY3RscyB0byB0aGUgTlRGUyBmaWxlc3lzdGVtIHRvIHJlYWQsIHdyaXRlLCByZW1vdmUsIGFuZCBsaXN0IG5hbWVkIHN0cmVhbXMgKEFsdGVybmF0ZSBEYXRhIFN0cmVhbXMpLiBUaGUgaW9jdGxzIGFyZSByZWFjaGFibGUgdmlhIGBudGZzX2lvY3RsYC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxNzoxMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGMyZDU1NjM3ZjM3YjYzZjRiNzEwODFiNzgwNGFkOWNlNzk0ZjJhYTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAzMCAxNzoxMTozMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VzZXJzcGFjZS1hcGkvaW9jdGwvaW9jdGwtbnVtYmVyLnJzdCBiL0RvY3VtZW50YXRpb24vdXNlcnNwYWNlLWFwaS9pb2N0bC9pb2N0bC1udW1iZXIucnN0XG5pbmRleCAzZjBlZjFlMjdlYjA3Li4yYjk4NjlhZWI4MTFiIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi91c2Vyc3BhY2UtYXBpL2lvY3RsL2lvY3RsLW51bWJlci5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vdXNlcnNwYWNlLWFwaS9pb2N0bC9pb2N0bC1udW1iZXIucnN0XG5AQCAtMzk5LDYgJiM0MzszOTksNyBAQCBDb2RlICBTZXEjICAgIEluY2x1ZGUgRmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbW1lbnRzXG4gMHhFNSAgMDAtM0YgIGxpbnV4L2Z1c2UuaFxuIDB4RUMgIDAwLTAxICBkcml2ZXJzL3BsYXRmb3JtL2Nocm9tZS9jcm9zX2VjX2Rldi5oICAgICAgICAgICAgICAgICAgICAgQ2hyb21lT1MgRUMgZHJpdmVyXG4gMHhFRSAgMDAtMDkgIHVhcGkvbGludXgvcGZydXQuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQbGF0Zm9ybSBGaXJtd2FyZSBSdW50aW1lIFVwZGF0ZSBhbmQgVGVsZW1ldHJ5XG4mIzQzOzB4RUYgIDAwLTBGICB1YXBpL2xpbnV4L250ZnMuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlRGU1xuIDB4RjMgIDAwLTNGICBkcml2ZXJzL3VzYi9taXNjL3Npc3VzYnZnYS9zaXN1c2IuaCAgICAgICAgICAgICAgICAgICAgICAgc2lzZmIgKGluIGRldmVsb3BtZW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHUwMDNjbWFpbHRvOnRob21hc0B3aW5pc2NoaG9mZXIubmV0XHUwMDNlXG4gMHhGNiAgYWxsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVFRuZyBMaW51eCBUcmFjZSBUb29sa2l0IE5leHQgR2VuZXJhdGlvblxuZGlmZiAtLWdpdCBhL2ZzL250ZnMvZmlsZS5jIGIvZnMvbnRmcy9maWxlLmNcbmluZGV4IGQ0MjgyODIyYjNjZWYuLjk2MWI5NGY1NDVmMmMgMTAwNjQ0XG4tLS0gYS9mcy9udGZzL2ZpbGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvbnRmcy9maWxlLmNcbkBAIC0xNSw2ICYjNDM7MTUsOCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3Bvc2l4X2FjbF94YXR0ci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY29tcGF0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9mYWxsb2MuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9vdmVyZmxvdy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvbnRmcy5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7bGNuYWxsb2MuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O250ZnMuaFwmIzM0O1xuQEAgLTIzLDYgJiM0MzsyNSw3IEBAXG4gI2luY2x1ZGUgXCYjMzQ7aW9tYXAuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2JpdG1hcC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7dm9sdW1lLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7bWZ0LmhcJiMzNDtcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9maWxlbG9jay5oXHUwMDNlXG4gXG5AQCAtODM5LDYgJiM0Mzs4NDIsNTA0IEBAIHN0YXRpYyBpbnQgbnRmc19pb2N0bF9maXRyaW0oc3RydWN0IG50ZnNfdm9sdW1lICp2b2wsIHVuc2lnbmVkIGxvbmcgYXJnKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MzsjZGVmaW5lIE5URlNfU1RSRUFNX01BWF9JT1x0KDE2ICogMTAyNCAqIDEwMjQpIC8qIDE2TUIgbGltaXQgKi9cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIG50ZnNfcmVhZF9uYW1lZF9zdHJlYW0gLSBSZWFkIGRhdGEgZnJvbSBhIG5hbWVkICREQVRBIHN0cmVhbS5cbiYjNDM7ICpcbiYjNDM7ICogQG5pOlx0XHROVEZTIGlub2RlXG4mIzQzOyAqIEB1bmFtZTpcdFN0cmVhbSBuYW1lXG4mIzQzOyAqIEB1bmFtZV9sZW46XHRMZW5ndGggb2YgbmFtZSBpbiBVbmljb2RlIGNoYXJhY3RlcnNcbiYjNDM7ICogQG9mZnNldDpcdEJ5dGUgb2Zmc2V0IGluIHRoZSBzdHJlYW1cbiYjNDM7ICogQGxlbjpcdE51bWJlciBvZiBieXRlcyB0byByZWFkXG4mIzQzOyAqIEBkYXRhX2J1ZjpcdEJ1ZmZlciB0byBjb3B5IGRhdGEgdG9cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOlx0MCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS5cbiYjNDM7ICpcdFx0SWYgb2Zmc2V0IFx1MDAzZT0gc3RyZWFtIHNpemUsIHJldHVybnMgMC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgbnRmc19yZWFkX25hbWVkX3N0cmVhbShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIF9fbGUxNiAqdW5hbWUsXG4mIzQzO1x0XHR1MzIgdW5hbWVfbGVuLCB1NjQgb2Zmc2V0LCB1NjQgbGVuLCB2b2lkICpkYXRhX2J1ZixcbiYjNDM7XHRcdHU2NCAqcmJ5dGVzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHg7XG4mIzQzO1x0c3RydWN0IGlub2RlICphdHRyX3ZpO1xuJiM0MztcdGludCBlcnIgPSAwO1xuJiM0MztcdHU2NCBkYXRhX3NpemU7XG4mIzQzO1x0czY0IGJ5dGVzO1xuJiM0MztcdGNoYXIgKnJidWYgPSBOVUxMO1xuJiM0MztcbiYjNDM7XHRpZiAoIW5pIHx8ICF1bmFtZSB8fCB1bmFtZV9sZW4gPT0gMClcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRpZiAobGVuID09IDAgfHwgbGVuIFx1MDAzZSBOVEZTX1NUUkVBTV9NQVhfSU8pXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZuaS1cdTAwM2VtcmVjX2xvY2spO1xuJiM0MztcdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuaSwgTlVMTCk7XG4mIzQzO1x0aWYgKCFjdHgpIHtcbiYjNDM7XHRcdG11dGV4X3VubG9jayhcdTAwMjZuaS1cdTAwM2VtcmVjX2xvY2spO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRlcnIgPSBudGZzX2F0dHJfbG9va3VwKEFUX0RBVEEsIHVuYW1lLCB1bmFtZV9sZW4sIENBU0VfU0VOU0lUSVZFLCAwLFxuJiM0MztcdFx0XHROVUxMLCAwLCBjdHgpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIG91dF9sb2NrO1xuJiM0MztcbiYjNDM7XHRpZiAoY3R4LVx1MDAzZWF0dHItXHUwMDNlbm9uX3Jlc2lkZW50KVxuJiM0MztcdFx0ZGF0YV9zaXplID0gbGU2NF90b19jcHUoY3R4LVx1MDAzZWF0dHItXHUwMDNlZGF0YS5ub25fcmVzaWRlbnQuZGF0YV9zaXplKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRkYXRhX3NpemUgPSBsZTMyX3RvX2NwdShjdHgtXHUwMDNlYXR0ci1cdTAwM2VkYXRhLnJlc2lkZW50LnZhbHVlX2xlbmd0aCk7XG4mIzQzO1xuJiM0MztcdGlmIChvZmZzZXQgXHUwMDNlPSBkYXRhX3NpemUpIHtcbiYjNDM7XHRcdCpyYnl0ZXMgPSAwO1xuJiM0MztcdFx0LyogRU9GOiBub3RoaW5nIHRvIHJlYWQgKi9cbiYjNDM7XHRcdGdvdG8gb3V0X2xvY2s7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBBZGp1c3QgbGVuZ3RoIHRvIG5vdCByZWFkIGJleW9uZCBFT0YgKi9cbiYjNDM7XHRpZiAobGVuIFx1MDAzZSBkYXRhX3NpemUgLSBvZmZzZXQpXG4mIzQzO1x0XHRsZW4gPSBkYXRhX3NpemUgLSBvZmZzZXQ7XG4mIzQzO1xuJiM0MztcdGF0dHJfdmkgPSBudGZzX2F0dHJfaWdldChWRlNfSShuaSksIEFUX0RBVEEsIHVuYW1lLCB1bmFtZV9sZW4pO1xuJiM0MztcdG50ZnNfYXR0cl9wdXRfc2VhcmNoX2N0eChjdHgpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZuaS1cdTAwM2VtcmVjX2xvY2spO1xuJiM0MztcbiYjNDM7XHRpZiAoSVNfRVJSKGF0dHJfdmkpKSB7XG4mIzQzO1x0XHRlcnIgPSBQVFJfRVJSKGF0dHJfdmkpO1xuJiM0MztcdFx0Z290byBvdXRfZnJlZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJidWYgPSBrdnphbGxvYyhsZW4sIEdGUF9OT0ZTKTtcbiYjNDM7XHRpZiAoIXJidWYpIHtcbiYjNDM7XHRcdGVyciA9IC1FTk9NRU07XG4mIzQzO1x0XHRpcHV0KGF0dHJfdmkpO1xuJiM0MztcdFx0Z290byBvdXRfZnJlZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGJ5dGVzID0gbnRmc19pbm9kZV9hdHRyX3ByZWFkKGF0dHJfdmksIG9mZnNldCwgbGVuLCByYnVmKTtcbiYjNDM7XHRpcHV0KGF0dHJfdmkpO1xuJiM0MztcdGlmIChieXRlcyBcdTAwM2MgMCkge1xuJiM0MztcdFx0ZXJyID0gYnl0ZXM7XG4mIzQzO1x0XHRnb3RvIG91dF9mcmVlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0KnJieXRlcyA9IGJ5dGVzO1xuJiM0MztcdG1lbWNweShkYXRhX2J1ZiwgcmJ1ZiwgYnl0ZXMpO1xuJiM0MztcbiYjNDM7b3V0X2ZyZWU6XG4mIzQzO1x0a3ZmcmVlKHJidWYpO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztvdXRfbG9jazpcbiYjNDM7XHRudGZzX2F0dHJfcHV0X3NlYXJjaF9jdHgoY3R4KTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2bmktXHUwMDNlbXJlY19sb2NrKTtcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBudGZzX3dyaXRlX25hbWVkX3N0cmVhbSAtIFdyaXRlIGRhdGEgZnJvbSBhIG5hbWVkICREQVRBIHN0cmVhbS5cbiYjNDM7ICpcbiYjNDM7ICogQG5pOlx0XHROVEZTIGlub2RlXG4mIzQzOyAqIEB1bmFtZTpcdFN0cmVhbSBuYW1lXG4mIzQzOyAqIEB1bmFtZV9sZW46XHRMZW5ndGggb2YgbmFtZSBpbiBVbmljb2RlIGNoYXJhY3RlcnNcbiYjNDM7ICogQG9mZnNldDpcdEJ5dGUgb2Zmc2V0IGluIHRoZSBzdHJlYW1cbiYjNDM7ICogQGxlbjpcdE51bWJlciBvZiBieXRlcyB0byB3cml0ZVxuJiM0MzsgKiBAZGF0YV9zdHJlYW06IERhdGEgdG8gd3JpdGVcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOlx0MCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgbnRmc193cml0ZV9uYW1lZF9zdHJlYW0oc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBfX2xlMTYgKnVuYW1lLFxuJiM0MztcdFx0dTMyIHVuYW1lX2xlbiwgdTY0IG9mZnNldCwgdTY0IGxlbiwgdm9pZCAqZGF0YV9zdHJlYW0sXG4mIzQzO1x0XHR1NjQgKndieXRlcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBudGZzX2F0dHJfc2VhcmNoX2N0eCAqY3R4O1xuJiM0MztcdHN0cnVjdCBpbm9kZSAqYXR0cl92aTtcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcdHM2NCBieXRlcztcbiYjNDM7XG4mIzQzO1x0aWYgKCFuaSB8fCAhdW5hbWUgfHwgdW5hbWVfbGVuID09IDAgfHwgIWRhdGFfc3RyZWFtKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdGlmIChsZW4gPT0gMCB8fCBsZW4gXHUwMDNlIE5URlNfU1RSRUFNX01BWF9JTylcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNm5pLVx1MDAzZW1yZWNfbG9jayk7XG4mIzQzO1x0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBOVUxMKTtcbiYjNDM7XHRpZiAoIWN0eCkge1xuJiM0MztcdFx0ZXJyID0gLUVOT01FTTtcbiYjNDM7XHRcdGdvdG8gb3V0X3VubG9jaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGVyciA9IG50ZnNfYXR0cl9sb29rdXAoQVRfREFUQSwgdW5hbWUsIHVuYW1lX2xlbiwgQ0FTRV9TRU5TSVRJVkUsIDAsXG4mIzQzO1x0XHRcdE5VTEwsIDAsIGN0eCk7XG4mIzQzO1x0aWYgKGVycikge1xuJiM0MztcdFx0aWYgKGVyciAhPSAtRU5PRU5UKVxuJiM0MztcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4mIzQzO1x0XHRlcnIgPSBudGZzX2F0dHJfYWRkKG5pLCBBVF9EQVRBLCB1bmFtZSwgdW5hbWVfbGVuLCBOVUxMLCAwKTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdGdvdG8gb3V0X3VubG9jaztcbiYjNDM7XHRcdG1hcmtfbWZ0X3JlY29yZF9kaXJ0eShuaSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRhdHRyX3ZpID0gbnRmc19hdHRyX2lnZXQoVkZTX0kobmkpLCBBVF9EQVRBLCB1bmFtZSwgdW5hbWVfbGVuKTtcbiYjNDM7XHRudGZzX2F0dHJfcHV0X3NlYXJjaF9jdHgoY3R4KTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2bmktXHUwMDNlbXJlY19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0aWYgKElTX0VSUihhdHRyX3ZpKSkge1xuJiM0MztcdFx0ZXJyID0gUFRSX0VSUihhdHRyX3ZpKTtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Ynl0ZXMgPSBudGZzX2lub2RlX2F0dHJfcHdyaXRlKGF0dHJfdmksIG9mZnNldCwgbGVuLCBkYXRhX3N0cmVhbSxcbiYjNDM7XHRcdFx0XHQgICAgICAgZmFsc2UpO1xuJiM0MztcdGlmIChieXRlcyBcdTAwM2MgMClcbiYjNDM7XHRcdGVyciA9IGJ5dGVzO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdCp3Ynl0ZXMgPSBieXRlcztcbiYjNDM7XHRpcHV0KGF0dHJfdmkpO1xuJiM0MztcbiYjNDM7b3V0OlxuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztvdXRfdW5sb2NrOlxuJiM0MztcdGlmIChjdHgpXG4mIzQzO1x0XHRudGZzX2F0dHJfcHV0X3NlYXJjaF9jdHgoY3R4KTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2bmktXHUwMDNlbXJlY19sb2NrKTtcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBudGZzX3JlbW92ZV9uYW1lZF9zdHJlYW0gLSBSZW1vdmUgYSBuYW1lZCAkREFUQSBzdHJlYW0uXG4mIzQzOyAqXG4mIzQzOyAqIEBuaTpcdFx0TlRGUyBpbm9kZVxuJiM0MzsgKiBAdW5hbWU6XHRTdHJlYW0gbmFtZVxuJiM0MzsgKiBAdW5hbWVfbGVuOlx0TmFtZSBsZW5ndGggaW4gVW5pY29kZSBjaGFyYWN0ZXJzXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjpcdDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3JcbiYjNDM7ICogICAgICAgICAgICAgIC1FTk9FTlQgaWYgc3RyZWFtIG5vdCBmb3VuZFxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBudGZzX3JlbW92ZV9uYW1lZF9zdHJlYW0oc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBfX2xlMTYgKnVuYW1lLFxuJiM0MztcdFx0dTMyIHVuYW1lX2xlbilcbiYjNDM7e1xuJiM0MztcdGlmICghbmkgfHwgIXVuYW1lIHx8IHVuYW1lX2xlbiA9PSAwKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdHJldHVybiBudGZzX2F0dHJfcmVtb3ZlKG5pLCBBVF9EQVRBLCB1bmFtZSwgdW5hbWVfbGVuKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7ZW51bSBudGZzX3N0cmVhbV9vcCB7XG4mIzQzO1x0TlRGU19TVFJFQU1fT1BfUkVBRCxcbiYjNDM7XHROVEZTX1NUUkVBTV9PUF9XUklURSxcbiYjNDM7XHROVEZTX1NUUkVBTV9PUF9SRU1PVkUsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgbG9uZyBudGZzX2lvY3RsX3N0cmVhbShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhcmcsXG4mIzQzO1x0XHRcdCAgICAgIGVudW0gbnRmc19zdHJlYW1fb3Agb3ApXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShmaWxwKTtcbiYjNDM7XHRzdHJ1Y3QgbnRmc19pbm9kZSAqbmkgPSBOVEZTX0koaW5vZGUpO1xuJiM0MztcdHN0cnVjdCBudGZzX3N0cmVhbSBfX3VzZXIgKnVyZXEgPVxuJiM0MztcdFx0KHN0cnVjdCBudGZzX3N0cmVhbSBfX3VzZXIgKilhcmc7XG4mIzQzO1x0c3RydWN0IG50ZnNfc3RyZWFtICpyZXE7XG4mIzQzO1x0c2l6ZV90IGhlYWRlcl9zaXplID0gc2l6ZW9mKHN0cnVjdCBudGZzX3N0cmVhbSk7XG4mIzQzO1x0c2l6ZV90IGRhdGFfc2l6ZSwgdG90YWxfc2l6ZTtcbiYjNDM7XHRjaGFyICprbmFtZSwgKmtkYXRhO1xuJiM0MztcdF9fbGUxNiAqdW5hbWUgPSBOVUxMLCAqc25hbWU7XG4mIzQzO1x0aW50IGVyciA9IDAsIHNuYW1lX2xlbjtcbiYjNDM7XHRib29sIHV0ZjE2O1xuJiM0MztcdHN0cnVjdCBudGZzX3N0cmVhbSBoZHI7XG4mIzQzO1xuJiM0MztcdC8qIEZpcnN0IGNvcHkgZml4ZWQgaGVhZGVyICovXG4mIzQzO1x0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNmhkciwgdXJlcSwgaGVhZGVyX3NpemUpKVxuJiM0MztcdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1xuJiM0MztcdGlmIChoZHIuaW9fbGVuIFx1MDAzZSBOVEZTX1NUUkVBTV9NQVhfSU8gfHxcbiYjNDM7XHQgICAgKGhkci5mbGFncyBcdTAwMjYgfk5URlNfU1RSRUFNX0ZMX1VURjE2KSB8fCBoZHIucmVzZXJ2ZWQpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0dXRmMTYgPSBoZHIuZmxhZ3MgXHUwMDI2IE5URlNfU1RSRUFNX0ZMX1VURjE2O1xuJiM0MztcbiYjNDM7XHRpZiAoaGRyLm5hbWVfbGVuID09IDApXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRpZiAodXRmMTYpIHtcbiYjNDM7XHRcdC8qIFVURi0xNkxFIGJ5dGUgY291bnQ6IG11c3QgYmUgZXZlbiBhbmQgd2l0aGluIHRoZSBsaW1pdC4gKi9cbiYjNDM7XHRcdGlmICgoaGRyLm5hbWVfbGVuIFx1MDAyNiAxKSB8fFxuJiM0MztcdFx0ICAgIGhkci5uYW1lX2xlbiBcdTAwM2UgTlRGU19NQVhfTkFNRV9MRU4gKiBzaXplb2YoX19sZTE2KSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fSBlbHNlIGlmIChoZHIubmFtZV9sZW4gXHUwMDNlIE5URlNfTUFYX05BTUVfTEVOKSB7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAob3ApIHtcbiYjNDM7XHRjYXNlIE5URlNfU1RSRUFNX09QX1JFQUQ6XG4mIzQzO1x0XHRpZiAoIShmaWxwLVx1MDAzZWZfbW9kZSBcdTAwMjYgRk1PREVfUkVBRCkgfHwgaGRyLmlvX2xlbiA9PSAwKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdGRhdGFfc2l6ZSA9IGhkci5pb19sZW47XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIE5URlNfU1RSRUFNX09QX1dSSVRFOlxuJiM0MztcdFx0aWYgKCEoZmlscC1cdTAwM2VmX21vZGUgXHUwMDI2IEZNT0RFX1dSSVRFKSB8fCBoZHIuaW9fbGVuID09IDApXG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0ZGF0YV9zaXplID0gaGRyLmlvX2xlbjtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgTlRGU19TVFJFQU1fT1BfUkVNT1ZFOlxuJiM0MztcdFx0aWYgKCEoZmlscC1cdTAwM2VmX21vZGUgXHUwMDI2IEZNT0RFX1dSSVRFKSB8fCBoZHIuaW9fbGVuICE9IDApXG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0ZGF0YV9zaXplID0gMDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gLUVOT1RUWTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChjaGVja19hZGRfb3ZlcmZsb3coaGVhZGVyX3NpemUsIChzaXplX3QpaGRyLm5hbWVfbGVuLCBcdTAwMjZ0b3RhbF9zaXplKSB8fFxuJiM0MztcdCAgICBjaGVja19hZGRfb3ZlcmZsb3codG90YWxfc2l6ZSwgZGF0YV9zaXplLCBcdTAwMjZ0b3RhbF9zaXplKSlcbiYjNDM7XHRcdHJldHVybiAtRU9WRVJGTE9XO1xuJiM0MztcbiYjNDM7XHRyZXEgPSBtZW1kdXBfdXNlcih1cmVxLCB0b3RhbF9zaXplKTtcbiYjNDM7XHRpZiAoSVNfRVJSKHJlcSkpXG4mIzQzO1x0XHRyZXR1cm4gUFRSX0VSUihyZXEpO1xuJiM0MztcbiYjNDM7XHRyZXEtXHUwMDNlYnl0ZXNfcmV0dXJuZWQgPSAwO1xuJiM0MztcbiYjNDM7XHRrbmFtZSA9IChjaGFyICopcmVxLVx1MDAzZWJ1ZmZlcjtcbiYjNDM7XHRrZGF0YSA9IChjaGFyICopcmVxLVx1MDAzZWJ1ZmZlciAmIzQzOyByZXEtXHUwMDNlbmFtZV9sZW47XG4mIzQzO1xuJiM0MztcdGlmIChyZXEtXHUwMDNlbmFtZV9sZW4gIT0gaGRyLm5hbWVfbGVuIHx8IHJlcS1cdTAwM2Vpb19sZW4gIT0gaGRyLmlvX2xlbiB8fFxuJiM0MztcdCAgICByZXEtXHUwMDNlZmxhZ3MgIT0gaGRyLmZsYWdzIHx8IHJlcS1cdTAwM2VyZXNlcnZlZCkge1xuJiM0MztcdFx0ZXJyID0gLUVJTlZBTDtcbiYjNDM7XHRcdGdvdG8gb3V0X2ZyZWU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAodXRmMTYpIHtcbiYjNDM7XHRcdC8qIE5hbWUgaXMgYWxyZWFkeSBvbi1kaXNrIFVURi0xNkxFOyB1c2UgaXQgaW4gcGxhY2UuICovXG4mIzQzO1x0XHRzbmFtZSA9IChfX2xlMTYgKilrbmFtZTtcbiYjNDM7XHRcdHNuYW1lX2xlbiA9IHJlcS1cdTAwM2VuYW1lX2xlbiAvIHNpemVvZihfX2xlMTYpO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRpZiAobWVtY2hyKGtuYW1lLCAmIzM5O1xcMCYjMzk7LCByZXEtXHUwMDNlbmFtZV9sZW4pKSB7XG4mIzQzO1x0XHRcdGVyciA9IC1FSU5WQUw7XG4mIzQzO1x0XHRcdGdvdG8gb3V0X2ZyZWU7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRzbmFtZV9sZW4gPSBudGZzX25sc3RvdWNzKG5pLVx1MDAzZXZvbCwga25hbWUsIHJlcS1cdTAwM2VuYW1lX2xlbixcbiYjNDM7XHRcdFx0XHRcdTAwMjZ1bmFtZSwgTlRGU19NQVhfTkFNRV9MRU4pO1xuJiM0MztcdFx0aWYgKHNuYW1lX2xlbiBcdTAwM2MgMCkge1xuJiM0MztcdFx0XHRlcnIgPSBzbmFtZV9sZW47XG4mIzQzO1x0XHRcdGdvdG8gb3V0X2ZyZWU7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRzbmFtZSA9IHVuYW1lO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChvcCkge1xuJiM0MztcdGNhc2UgTlRGU19TVFJFQU1fT1BfUkVBRDpcbiYjNDM7XHRcdGVyciA9IG50ZnNfcmVhZF9uYW1lZF9zdHJlYW0obmksIHNuYW1lLCBzbmFtZV9sZW4sXG4mIzQzO1x0XHRcdFx0XHQgICAgIHJlcS1cdTAwM2VzdHJlYW1fb2Zmc2V0LCByZXEtXHUwMDNlaW9fbGVuLFxuJiM0MztcdFx0XHRcdFx0ICAgICBrZGF0YSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgXHUwMDI2cmVxLVx1MDAzZWJ5dGVzX3JldHVybmVkKTtcbiYjNDM7XHRcdGlmICghZXJyKSB7XG4mIzQzO1x0XHRcdGlmIChjb3B5X3RvX3VzZXIodXJlcSwgcmVxLFxuJiM0MztcdFx0XHRcdFx0aGVhZGVyX3NpemUgJiM0MzsgcmVxLVx1MDAzZW5hbWVfbGVuICYjNDM7IHJlcS1cdTAwM2VieXRlc19yZXR1cm5lZCkpXG4mIzQzO1x0XHRcdFx0ZXJyID0gLUVGQVVMVDtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgTlRGU19TVFJFQU1fT1BfV1JJVEU6XG4mIzQzO1x0XHRlcnIgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbHApO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRlcnIgPSBudGZzX3dyaXRlX25hbWVkX3N0cmVhbShuaSwgc25hbWUsIHNuYW1lX2xlbixcbiYjNDM7XHRcdFx0XHRcdCAgICAgIHJlcS1cdTAwM2VzdHJlYW1fb2Zmc2V0LCByZXEtXHUwMDNlaW9fbGVuLFxuJiM0MztcdFx0XHRcdFx0ICAgICAga2RhdGEsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBcdTAwMjZyZXEtXHUwMDNlYnl0ZXNfcmV0dXJuZWQpO1xuJiM0MztcdFx0bW50X2Ryb3Bfd3JpdGVfZmlsZShmaWxwKTtcbiYjNDM7XHRcdGlmICghZXJyKSB7XG4mIzQzO1x0XHRcdGlmIChjb3B5X3RvX3VzZXIoXHUwMDI2dXJlcS1cdTAwM2VieXRlc19yZXR1cm5lZCxcbiYjNDM7XHRcdFx0XHRcdCBcdTAwMjZyZXEtXHUwMDNlYnl0ZXNfcmV0dXJuZWQsXG4mIzQzO1x0XHRcdFx0XHQgc2l6ZW9mKHJlcS1cdTAwM2VieXRlc19yZXR1cm5lZCkpKVxuJiM0MztcdFx0XHRcdGVyciA9IC1FRkFVTFQ7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIE5URlNfU1RSRUFNX09QX1JFTU9WRTpcbiYjNDM7XHRcdGVyciA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlscCk7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGVyciA9IG50ZnNfcmVtb3ZlX25hbWVkX3N0cmVhbShuaSwgc25hbWUsIHNuYW1lX2xlbik7XG4mIzQzO1x0XHRtbnRfZHJvcF93cml0ZV9maWxlKGZpbHApO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdGVyciA9IC1FTk9UVFk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7b3V0X2ZyZWU6XG4mIzQzO1x0aWYgKHVuYW1lKVxuJiM0MztcdFx0a21lbV9jYWNoZV9mcmVlKG50ZnNfbmFtZV9jYWNoZSwgdW5hbWUpO1xuJiM0MztcdGtmcmVlKHJlcSk7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBudGZzX2lvY3RsX2xpc3Rfc3RyZWFtcyhzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhcmcpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShmaWxwKTtcbiYjNDM7XHRzdHJ1Y3QgbnRmc19pbm9kZSAqbmkgPSBOVEZTX0koaW5vZGUpO1xuJiM0MztcdHN0cnVjdCBudGZzX2xpc3Rfc3RyZWFtcyBoZHI7XG4mIzQzO1x0c3RydWN0IG50ZnNfc3RyZWFtX2VudHJ5ICplbnRyeSwgKmxhc3RfZW50cnkgPSBOVUxMO1xuJiM0MztcdHNpemVfdCByZXF1aXJlZCA9IDA7XG4mIzQzO1x0dm9pZCAqa2J1ZiA9IE5VTEw7XG4mIzQzO1x0dm9pZCBfX3VzZXIgKnVidWY7XG4mIzQzO1x0c3RydWN0IGF0dHJfcmVjb3JkICphO1xuJiM0MztcdHN0cnVjdCBudGZzX2F0dHJfc2VhcmNoX2N0eCAqYWN0eDtcbiYjNDM7XHRpbnQgcmV0ID0gMCwgZXJyLCBjb3VudCA9IDA7XG4mIzQzO1x0c2l6ZV90IGVudHJ5X3NpemUsIG9mZnNldCA9IDA7XG4mIzQzO1x0dW5zaWduZWQgaW50IG5hbWVfbGVuO1xuJiM0MztcdHVuc2lnbmVkIGNoYXIgKnNuO1xuJiM0MztcdGJvb2wgdXRmMTY7XG4mIzQzO1xuJiM0MztcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZoZHIsICh2b2lkIF9fdXNlciAqKWFyZywgc2l6ZW9mKGhkcikpKVxuJiM0MztcdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1xuJiM0MztcdGlmICgoaGRyLmZsYWdzIFx1MDAyNiB+TlRGU19TVFJFQU1fRkxfVVRGMTYpIHx8IGhkci5yZXNlcnZlZClcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHR1dGYxNiA9IGhkci5mbGFncyBcdTAwMjYgTlRGU19TVFJFQU1fRkxfVVRGMTY7XG4mIzQzO1xuJiM0MztcdHVidWYgPSAodm9pZCBfX3VzZXIgKilhcmcgJiM0Mzsgc2l6ZW9mKGhkcik7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2bmktXHUwMDNlbXJlY19sb2NrKTtcbiYjNDM7XHRhY3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBOVUxMKTtcbiYjNDM7XHRpZiAoIWFjdHgpIHtcbiYjNDM7XHRcdG11dGV4X3VubG9jayhcdTAwMjZuaS1cdTAwM2VtcmVjX2xvY2spO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHR3aGlsZSAoKGVyciA9IG50ZnNfYXR0cnNfd2FsayhhY3R4KSkgPT0gMCkge1xuJiM0MztcdFx0YSA9IGFjdHgtXHUwMDNlYXR0cjtcbiYjNDM7XHRcdGlmIChhLVx1MDAzZXR5cGUgIT0gQVRfREFUQSB8fCAhYS1cdTAwM2VuYW1lX2xlbmd0aClcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHV0ZjE2KSB7XG4mIzQzO1x0XHRcdG5hbWVfbGVuID0gYS1cdTAwM2VuYW1lX2xlbmd0aCAqIHNpemVvZihfX2xlMTYpO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0c24gPSBudGZzX2F0dHJfbmFtZV9nZXQobmktXHUwMDNldm9sLFxuJiM0MztcdFx0XHRcdFx0KF9fbGUxNiAqKSgodTggKilhICYjNDM7IGxlMTZfdG9fY3B1KGEtXHUwMDNlbmFtZV9vZmZzZXQpKSxcbiYjNDM7XHRcdFx0XHRcdGEtXHUwMDNlbmFtZV9sZW5ndGgpO1xuJiM0MztcdFx0XHRpZiAoIXNuKSB7XG4mIzQzO1x0XHRcdFx0cmV0ID0gLUVJTztcbiYjNDM7XHRcdFx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRuYW1lX2xlbiA9IHN0cmxlbihzbik7XG4mIzQzO1x0XHRcdG50ZnNfYXR0cl9uYW1lX2ZyZWUoXHUwMDI2c24pO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGVudHJ5X3NpemUgPSBzaXplb2YoKmVudHJ5KSAmIzQzOyBuYW1lX2xlbjtcbiYjNDM7XHRcdGVudHJ5X3NpemUgPSBBTElHTihlbnRyeV9zaXplLCA4KTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAocmVxdWlyZWQgXHUwMDNlIFNJWkVfTUFYIC0gZW50cnlfc2l6ZSkge1xuJiM0MztcdFx0XHRyZXQgPSAtRU9WRVJGTE9XO1xuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHJlcXVpcmVkICYjNDM7PSBlbnRyeV9zaXplO1xuJiM0MztcdFx0Y291bnQmIzQzOyYjNDM7O1xuJiM0MztcdH1cbiYjNDM7XHRpZiAoZXJyICE9IC1FTk9FTlQpIHtcbiYjNDM7XHRcdHJldCA9IGVycjtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aGRyLnN0cmVhbV9jb3VudCA9IGNvdW50O1xuJiM0MztcdGhkci5ieXRlc19yZXR1cm5lZCA9IHJlcXVpcmVkO1xuJiM0MztcbiYjNDM7XHRpZiAoIWNvdW50KVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdGlmIChoZHIuYnVmZmVyX3NpemUgXHUwMDNjIHJlcXVpcmVkKSB7XG4mIzQzO1x0XHRyZXQgPSAtRU5PU1BDO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRrYnVmID0ga3Z6YWxsb2MocmVxdWlyZWQsIEdGUF9OT0ZTKTtcbiYjNDM7XHRpZiAoIWtidWYpIHtcbiYjNDM7XHRcdHJldCA9IC1FTk9NRU07XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG50ZnNfYXR0cl9yZWluaXRfc2VhcmNoX2N0eChhY3R4KTtcbiYjNDM7XHR3aGlsZSAoKGVyciA9IG50ZnNfYXR0cnNfd2FsayhhY3R4KSkgPT0gMCkge1xuJiM0MztcdFx0YSA9IGFjdHgtXHUwMDNlYXR0cjtcbiYjNDM7XHRcdGlmIChhLVx1MDAzZXR5cGUgIT0gQVRfREFUQSB8fCAhYS1cdTAwM2VuYW1lX2xlbmd0aClcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRpZiAodXRmMTYpIHtcbiYjNDM7XHRcdFx0c24gPSBOVUxMO1xuJiM0MztcdFx0XHRuYW1lX2xlbiA9IGEtXHUwMDNlbmFtZV9sZW5ndGggKiBzaXplb2YoX19sZTE2KTtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdHNuID0gbnRmc19hdHRyX25hbWVfZ2V0KG5pLVx1MDAzZXZvbCxcbiYjNDM7XHRcdFx0XHRcdChfX2xlMTYgKikoKHU4ICopYSAmIzQzOyBsZTE2X3RvX2NwdShhLVx1MDAzZW5hbWVfb2Zmc2V0KSksXG4mIzQzO1x0XHRcdFx0XHRhLVx1MDAzZW5hbWVfbGVuZ3RoKTtcbiYjNDM7XHRcdFx0aWYgKCFzbikge1xuJiM0MztcdFx0XHRcdHJldCA9IC1FSU87XG4mIzQzO1x0XHRcdFx0Z290byBvdXQ7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0bmFtZV9sZW4gPSBzdHJsZW4oc24pO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGVudHJ5X3NpemUgPSBzaXplb2YoKmVudHJ5KSAmIzQzOyBuYW1lX2xlbjtcbiYjNDM7XHRcdGVudHJ5X3NpemUgPSBBTElHTihlbnRyeV9zaXplLCA4KTtcbiYjNDM7XHRcdGlmIChvZmZzZXQgXHUwMDNlIHJlcXVpcmVkIC0gZW50cnlfc2l6ZSkge1xuJiM0MztcdFx0XHRyZXQgPSAtRU9WRVJGTE9XO1xuJiM0MztcdFx0XHRudGZzX2F0dHJfbmFtZV9mcmVlKFx1MDAyNnNuKTtcbiYjNDM7XHRcdFx0Z290byBvdXQ7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0ZW50cnkgPSAoc3RydWN0IG50ZnNfc3RyZWFtX2VudHJ5ICopKGtidWYgJiM0Mzsgb2Zmc2V0KTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoYS1cdTAwM2Vub25fcmVzaWRlbnQpIHtcbiYjNDM7XHRcdFx0ZW50cnktXHUwMDNlc2l6ZSA9IGxlNjRfdG9fY3B1KGEtXHUwMDNlZGF0YS5ub25fcmVzaWRlbnQuZGF0YV9zaXplKTtcbiYjNDM7XHRcdFx0ZW50cnktXHUwMDNlYWxsb2Nfc2l6ZSA9XG4mIzQzO1x0XHRcdFx0bGU2NF90b19jcHUoYS1cdTAwM2VkYXRhLm5vbl9yZXNpZGVudC5hbGxvY2F0ZWRfc2l6ZSk7XG4mIzQzO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0ZW50cnktXHUwMDNlc2l6ZSA9IGxlMzJfdG9fY3B1KGEtXHUwMDNlZGF0YS5yZXNpZGVudC52YWx1ZV9sZW5ndGgpO1xuJiM0MztcdFx0XHRlbnRyeS1cdTAwM2VhbGxvY19zaXplID0gbGUzMl90b19jcHUoYS1cdTAwM2VsZW5ndGgpIC1cbiYjNDM7XHRcdFx0XHRsZTE2X3RvX2NwdShhLVx1MDAzZWRhdGEucmVzaWRlbnQudmFsdWVfb2Zmc2V0KTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRlbnRyeS1cdTAwM2VuYW1lX2xlbiA9IG5hbWVfbGVuO1xuJiM0MztcdFx0aWYgKHV0ZjE2KVxuJiM0MztcdFx0XHRtZW1jcHkoZW50cnktXHUwMDNlbmFtZSxcbiYjNDM7XHRcdFx0ICAgICAgICh1OCAqKWEgJiM0MzsgbGUxNl90b19jcHUoYS1cdTAwM2VuYW1lX29mZnNldCksIG5hbWVfbGVuKTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0bWVtY3B5KGVudHJ5LVx1MDAzZW5hbWUsIHNuLCBuYW1lX2xlbik7XG4mIzQzO1x0XHRudGZzX2F0dHJfbmFtZV9mcmVlKFx1MDAyNnNuKTtcbiYjNDM7XG4mIzQzO1x0XHRlbnRyeS1cdTAwM2VuZXh0X2VudHJ5X29mZiA9IGVudHJ5X3NpemU7XG4mIzQzO1x0XHRsYXN0X2VudHJ5ID0gZW50cnk7XG4mIzQzO1x0XHRvZmZzZXQgJiM0Mzs9IGVudHJ5X3NpemU7XG4mIzQzO1x0fVxuJiM0MztcdGlmIChlcnIgIT0gLUVOT0VOVCkge1xuJiM0MztcdFx0cmV0ID0gZXJyO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHQvKiBUaGUgY2hhaW4gdGVybWluYXRlcyBhdCB0aGUgbGFzdCBlbnRyeS4gKi9cbiYjNDM7XHRcdGlmIChsYXN0X2VudHJ5KVxuJiM0MztcdFx0XHRsYXN0X2VudHJ5LVx1MDAzZW5leHRfZW50cnlfb2ZmID0gMDtcbiYjNDM7XHRcdGhkci5ieXRlc19yZXR1cm5lZCA9IG9mZnNldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztvdXQ6XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNm5pLVx1MDAzZW1yZWNfbG9jayk7XG4mIzQzO1x0bnRmc19hdHRyX3B1dF9zZWFyY2hfY3R4KGFjdHgpO1xuJiM0MztcbiYjNDM7XHRpZiAocmV0IFx1MDAyNlx1MDAyNiByZXQgIT0gLUVOT1NQQylcbiYjNDM7XHRcdGdvdG8gb3V0X2ZyZWU7XG4mIzQzO1xuJiM0MztcdGlmICghcmV0IFx1MDAyNlx1MDAyNiBrYnVmIFx1MDAyNlx1MDAyNiBjb3B5X3RvX3VzZXIodWJ1Ziwga2J1ZiwgaGRyLmJ5dGVzX3JldHVybmVkKSkge1xuJiM0MztcdFx0cmV0ID0gLUVGQVVMVDtcbiYjNDM7XHRcdGdvdG8gb3V0X2ZyZWU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKWFyZywgXHUwMDI2aGRyLCBzaXplb2YoaGRyKSkpXG4mIzQzO1x0XHRyZXQgPSAtRUZBVUxUO1xuJiM0MztcbiYjNDM7b3V0X2ZyZWU6XG4mIzQzO1x0a3ZmcmVlKGtidWYpO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4gbG9uZyBudGZzX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbiB7XG4gXHRzd2l0Y2ggKGNtZCkge1xuQEAgLTg1MCw2ICYjNDM7MTM1MSwxNCBAQCBsb25nIG50ZnNfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuIFx0XHRyZXR1cm4gbnRmc19pb2N0bF9zZXRfdm9sdW1lX2xhYmVsKGZpbHAsIGFyZyk7XG4gXHRjYXNlIEZJVFJJTTpcbiBcdFx0cmV0dXJuIG50ZnNfaW9jdGxfZml0cmltKE5URlNfU0IoZmlsZV9pbm9kZShmaWxwKS1cdTAwM2VpX3NiKSwgYXJnKTtcbiYjNDM7XHRjYXNlIE5URlNfSU9DX1NUUkVBTV9SRUFEOlxuJiM0MztcdFx0cmV0dXJuIG50ZnNfaW9jdGxfc3RyZWFtKGZpbHAsIGFyZywgTlRGU19TVFJFQU1fT1BfUkVBRCk7XG4mIzQzO1x0Y2FzZSBOVEZTX0lPQ19TVFJFQU1fV1JJVEU6XG4mIzQzO1x0XHRyZXR1cm4gbnRmc19pb2N0bF9zdHJlYW0oZmlscCwgYXJnLCBOVEZTX1NUUkVBTV9PUF9XUklURSk7XG4mIzQzO1x0Y2FzZSBOVEZTX0lPQ19TVFJFQU1fUkVNT1ZFOlxuJiM0MztcdFx0cmV0dXJuIG50ZnNfaW9jdGxfc3RyZWFtKGZpbHAsIGFyZywgTlRGU19TVFJFQU1fT1BfUkVNT1ZFKTtcbiYjNDM7XHRjYXNlIE5URlNfSU9DX0xJU1RfU1RSRUFNUzpcbiYjNDM7XHRcdHJldHVybiBudGZzX2lvY3RsX2xpc3Rfc3RyZWFtcyhmaWxwLCBhcmcpO1xuIFx0ZGVmYXVsdDpcbiBcdFx0cmV0dXJuIC1FTk9UVFk7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L250ZnMuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9udGZzLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5hNTc4M2RjM2I5MDU0XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvbnRmcy5oXG5AQCAtMCwwICYjNDM7MSwxMTUgQEBcbiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgV0lUSCBMaW51eC1zeXNjYWxsLW5vdGUgKi9cbiYjNDM7LypcbiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI2IExHIEVsZWN0cm9uaWNzIENvLiwgTHRkLlxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpZm5kZWYgX1VBUElfTElOVVhfTlRGU19IXG4mIzQzOyNkZWZpbmUgX1VBUElfTElOVVhfTlRGU19IXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaW9jdGwuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2RlZmluZSBOVEZTX0lPQ19NQUdJQ1x0MHhFRlxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogRmxhZ3MgZm9yIG50ZnNfc3RyZWFtLmZsYWdzIGFuZCBudGZzX2xpc3Rfc3RyZWFtcy5mbGFncy5cbiYjNDM7ICpcbiYjNDM7ICogVGhlIHN0cmVhbSBuYW1lIGlzIHJhdyBVVEYtMTZMRSwgZXhhY3RseSBhcyBzdG9yZWQgb24gZGlzaywgaW5zdGVhZCBvZlxuJiM0MzsgKiBiZWluZyBlbmNvZGVkIHdpdGggdGhlIG1vdW50ZWQgZmlsZXN5c3RlbSBOTFMuIFRoaXMgYWxsb3dzIGxvc3NsZXNzXG4mIzQzOyAqIHJvdW5kLXRyaXBwaW5nIG9mIHN0cmVhbSBuYW1lcyB3aG9zZSBjaGFyYWN0ZXJzIGFyZSBub3QgcmVwcmVzZW50YWJsZVxuJiM0MzsgKiBpbiB0aGUgbW91bnQgTkxTIChlLmcuIGZvciBXaW5lLCB3aGljaCB3b3JrcyBpbiBVVEYtMTYgbmF0aXZlbHkpLlxuJiM0MzsgKiBXaGVuIHNldCwgdGhlIG5hbWUgbGVuZ3RoIGZpZWxkcyBjb3VudCBieXRlcyBvZiBVVEYtMTZMRSBhbmQgbXVzdFxuJiM0MzsgKiB0aGVyZWZvcmUgYmUgZXZlbi5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgTlRGU19TVFJFQU1fRkxfVVRGMTZcdDB4MVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogbnRmcyBuYW1lZCBzdHJlYW0gaW9jdGwgc3RydWN0dXJlLlxuJiM0MzsgKlxuJiM0MzsgKiBAc3RyZWFtX29mZnNldDpcdE9mZnNldCB3aXRoaW4gdGhlIG5hbWVkIHN0cmVhbS5cbiYjNDM7ICogQGlvX2xlbjpcdFx0TnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQvd3JpdGUuXG4mIzQzOyAqIEBieXRlc19yZXR1cm5lZDpcdEFjdHVhbCBieXRlcyB0cmFuc2ZlcnJlZCAob3V0KS5cbiYjNDM7ICogQG5hbWVfbGVuOlx0XHRTdHJlYW0gbmFtZSBsZW5ndGggaW4gYnl0ZXMsIG5vdCBpbmNsdWRpbmcgYW55XG4mIzQzOyAqXHRcdFx0dGVybWluYXRpbmcgTlVMICh3aGljaCBtdXN0IG5vdCBiZSBwcmVzZW50KS4gV2hlblxuJiM0MzsgKlx0XHRcdE5URlNfU1RSRUFNX0ZMX1VURjE2IGlzIHNldCB0aGlzIGlzIGEgVVRGLTE2TEUgYnl0ZVxuJiM0MzsgKlx0XHRcdGNvdW50IGFuZCBtdXN0IGJlIGV2ZW4uXG4mIzQzOyAqIEBmbGFnczpcdFx0Qml0IG1hc2sgb2YgTlRGU19TVFJFQU1fRkxfKiBmbGFncy4gb3RoZXIgYml0cyBtdXN0IGJlXG4mIzQzOyAqXHRcdFx0emVyby5cbiYjNDM7ICogQHJlc2VydmVkOlx0XHRNdXN0IGJlIHplcm8uXG4mIzQzOyAqIEBidWZmZXI6XHRcdFN0cmVhbSBuYW1lIGZvbGxvd2VkIGJ5IHN0cmVhbSBkYXRhLlxuJiM0MzsgKlxuJiM0MzsgKiBUaGUgc3RyZWFtIG5hbWUgaXMgdGhlIGJhcmUgc3RyZWFtIG5hbWUsIHdpdGhvdXQgdGhlIGxlYWRpbmcgJiMzOTs6JiMzOTsgb3IgdGhlXG4mIzQzOyAqIHRyYWlsaW5nIFwmIzM0OzokREFUQVwmIzM0OyBkZWNvcmF0aW9uIHVzZWQgYnkgV2luZG93cy4gQnkgZGVmYXVsdCBpdCBpcyBlbmNvZGVkIHdpdGhcbiYjNDM7ICogdGhlIG1vdW50ZWQgZmlsZXN5c3RlbSBOTFMuIElmIE5URlNfU1RSRUFNX0ZMX1VURjE2IGlzIHNldCBpbiBAZmxhZ3MgaXQgaXNcbiYjNDM7ICogcmF3IFVURi0xNkxFIGluc3RlYWQuIEZvciByZWFkIGFuZCB3cml0ZSwgQGlvX2xlbiBieXRlcyBvZiBkYXRhIGZvbGxvdyB0aGVcbiYjNDM7ICogbmFtZS4gRm9yIHJlbW92ZSwgb25seSB0aGUgbmFtZSBpcyByZXF1aXJlZCBhbmQgQGlvX2xlbiBtdXN0IGJlIHplcm8uXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgbnRmc19zdHJlYW0ge1xuJiM0MztcdF9fYWxpZ25lZF91NjQgc3RyZWFtX29mZnNldDtcbiYjNDM7XHRfX2FsaWduZWRfdTY0IGlvX2xlbjtcbiYjNDM7XHRfX2FsaWduZWRfdTY0IGJ5dGVzX3JldHVybmVkO1xuJiM0MztcdF9fdTMyIG5hbWVfbGVuO1xuJiM0MztcdF9fdTMyIGZsYWdzO1xuJiM0MztcdF9fYWxpZ25lZF91NjQgcmVzZXJ2ZWQ7XG4mIzQzO1x0X191OCBidWZmZXJbXTsgLyogbmFtZSAmIzQzOyBkYXRhICovXG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBTaW5nbGUgc3RyZWFtIGVudHJ5IHJldHVybmVkIGJ5IE5URlNfSU9DX0xJU1RfU1RSRUFNUy5cbiYjNDM7ICpcbiYjNDM7ICogQG5leHRfZW50cnlfb2ZmOlx0Qnl0ZSBvZmZzZXQgZnJvbSB0aGUgc3RhcnQgb2YgdGhpcyBlbnRyeSB0byB0aGUgbmV4dFxuJiM0MzsgKlx0XHRcdGVudHJ5LCBvciB6ZXJvIGZvciB0aGUgbGFzdCBlbnRyeS4gQWx3YXlzIGEgbXVsdGlwbGVcbiYjNDM7ICpcdFx0XHRvZiA4LiBDb25zdW1lcnMgbXVzdCB1c2UgdGhpcyB0byBhZHZhbmNlIGluc3RlYWQgb2ZcbiYjNDM7ICpcdFx0XHRjb21wdXRpbmcgdGhlIHN0cmlkZSB0aGVtc2VsdmVzLCBzbyB0aGUgZW50cnkgY2FuIGdyb3dcbiYjNDM7ICpcdFx0XHRuZXcgZmllbGRzIHdpdGhvdXQgYnJlYWtpbmcgdGhlIEFCSS5cbiYjNDM7ICogQHNpemU6XHRcdFN0cmVhbSBkYXRhIHNpemUgaW4gYnl0ZXMuXG4mIzQzOyAqIEBhbGxvY19zaXplOlx0XHRCeXRlcyBhbGxvY2F0ZWQgZm9yIHRoZSBzdHJlYW0gKGNsdXN0ZXIgYWxpZ25lZCBmb3JcbiYjNDM7ICpcdFx0XHRub24tcmVzaWRlbnQgc3RyZWFtcykuXG4mIzQzOyAqIEBuYW1lX2xlbjpcdFx0U3RyZWFtIG5hbWUgbGVuZ3RoIGluIGJ5dGVzLCBub3QgaW5jbHVkaW5nIGEgTlVMXG4mIzQzOyAqXHRcdFx0dGVybWluYXRvciAobm9uZSBpcyBzdG9yZWQpLiBDb3VudHMgVVRGLTE2TEUgYnl0ZXNcbiYjNDM7ICpcdFx0XHR3aGVuIE5URlNfU1RSRUFNX0ZMX1VURjE2IHdhcyByZXF1ZXN0ZWQuXG4mIzQzOyAqIEByZXNlcnZlZDpcdFx0TXVzdCBiZSB6ZXJvLlxuJiM0MzsgKiBAbmFtZTpcdFx0QmFyZSBzdHJlYW0gbmFtZTsgTkxTIGVuY29kZWQsIG9yIHJhdyBVVEYtMTZMRSB3aGVuXG4mIzQzOyAqXHRcdFx0TlRGU19TVFJFQU1fRkxfVVRGMTYgd2FzIHJlcXVlc3RlZCAoc2VlIHN0cnVjdFxuJiM0MzsgKlx0XHRcdG50ZnNfc3RyZWFtKS5cbiYjNDM7ICovXG4mIzQzO3N0cnVjdCBudGZzX3N0cmVhbV9lbnRyeSB7XG4mIzQzO1x0X19hbGlnbmVkX3U2NCBuZXh0X2VudHJ5X29mZjtcbiYjNDM7XHRfX2FsaWduZWRfdTY0IHNpemU7XG4mIzQzO1x0X19hbGlnbmVkX3U2NCBhbGxvY19zaXplO1xuJiM0MztcdF9fdTMyIG5hbWVfbGVuO1xuJiM0MztcdF9fdTMyIHJlc2VydmVkO1xuJiM0MztcdF9fdTggbmFtZVtdO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogbnRmcyBsaXN0IHN0cmVhbXMgaW9jdGwgc3RydWN0dXJlLlxuJiM0MzsgKlxuJiM0MzsgKiBAYnVmZmVyX3NpemU6XHR1c2VyIGJ1ZmZlciBzaXplKGluKS5cbiYjNDM7ICogQGJ5dGVzX3JldHVybmVkOlx0YWN0dWFsIGJ5dGVzIHdyaXR0ZW4gb3IgcmVxdWlyZWQob3V0KS5cbiYjNDM7ICogQHN0cmVhbV9jb3VudDpcdG51bWJlciBvZiBzdHJlYW1zKG91dCkuXG4mIzQzOyAqIEBmbGFnczpcdFx0Qml0IG1hc2sgb2YgTlRGU19TVFJFQU1fRkxfKiBmbGFncyBjb250cm9sbGluZyB0aGVcbiYjNDM7ICpcdFx0XHRlbmNvZGluZyBvZiB0aGUgcmV0dXJuZWQgbmFtZXM7IG90aGVyIGJpdHMgbXVzdCBiZSB6ZXJvLlxuJiM0MzsgKiBAcmVzZXJ2ZWQ6XHRcdE11c3QgYmUgemVyby5cbiYjNDM7ICogQGJ1ZmZlcjpcdFx0bnRmc19zdHJlYW1fZW50cnkgYXJyYXkuXG4mIzQzOyAqXG4mIzQzOyAqIFRoZSB2YXJpYWJsZS1sZW5ndGggZW50cmllcyBmb2xsb3cgdGhlIGhlYWRlciBpbiBAYnVmZmVyLCBlYWNoIGFsaWduZWQgb25cbiYjNDM7ICogYW4gOC1ieXRlIGJvdW5kYXJ5IGFuZCBjaGFpbmVkIHZpYSBudGZzX3N0cmVhbV9lbnRyeS5uZXh0X2VudHJ5X29mZi4gSWZcbiYjNDM7ICogQGJ1ZmZlcl9zaXplIGlzIHRvbyBzbWFsbCwgbm8gZGF0YSBpcyBjb3BpZWQsIEBzdHJlYW1fY291bnQgYW5kXG4mIzQzOyAqIEBieXRlc19yZXR1cm5lZCByZXBvcnQgdGhlIHJlcXVpcmVkIHZhbHVlcyBhbmQgdGhlIGlvY3RsIGZhaWxzIHdpdGhcbiYjNDM7ICogLUVOT1NQQy5cbiYjNDM7ICovXG4mIzQzO3N0cnVjdCBudGZzX2xpc3Rfc3RyZWFtcyB7XG4mIzQzO1x0X19hbGlnbmVkX3U2NCBidWZmZXJfc2l6ZTtcbiYjNDM7XHRfX2FsaWduZWRfdTY0IGJ5dGVzX3JldHVybmVkO1xuJiM0MztcdF9fYWxpZ25lZF91NjQgc3RyZWFtX2NvdW50O1xuJiM0MztcdF9fdTMyIGZsYWdzO1xuJiM0MztcdF9fdTMyIHJlc2VydmVkO1xuJiM0MztcdF9fdTggYnVmZmVyW107XG4mIzQzO307XG4mIzQzO1xuJiM0MzsjZGVmaW5lIE5URlNfSU9DX1NUUkVBTV9SRUFEXHRcdF9JT1dSKE5URlNfSU9DX01BR0lDLCAxLCBzdHJ1Y3QgbnRmc19zdHJlYW0pXG4mIzQzOyNkZWZpbmUgTlRGU19JT0NfU1RSRUFNX1dSSVRFXHRcdF9JT1dSKE5URlNfSU9DX01BR0lDLCAyLCBzdHJ1Y3QgbnRmc19zdHJlYW0pXG4mIzQzOyNkZWZpbmUgTlRGU19JT0NfU1RSRUFNX1JFTU9WRVx0XHRfSU9XUihOVEZTX0lPQ19NQUdJQywgMywgc3RydWN0IG50ZnNfc3RyZWFtKVxuJiM0MzsjZGVmaW5lIE5URlNfSU9DX0xJU1RfU1RSRUFNU1x0XHRfSU9XUihOVEZTX0lPQ19NQUdJQywgNCwgc3RydWN0IG50ZnNfbGlzdF9zdHJlYW1zKVxuJiM0MztcbiYjNDM7I2VuZGlmIC8qIF9VQVBJX0xJTlVYX05URlNfSCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE3OjExPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtOVEZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bnRmc19pb2N0bCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIG5ldyBpb2N0bHMgdG8gdGhlIE5URlMgZmlsZXN5c3RlbSB0byByZWFkLCB3cml0ZSwgcmVtb3ZlLCBhbmQgbGlzdCBuYW1lZCBzdHJlYW1zIChBbHRlcm5hdGUgRGF0YSBTdHJlYW1zKS4gVGhlIGlvY3RscyBhcmUgcmVhY2hhYmxlIHZpYSBgbnRmc19pb2N0bGAuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjMmQ1NTYzN2YzN2I2M2Y0YjcxMDgxYjc4MDRhZDljZTc5NGYyYWE5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBKdWwgMzAgMTc6MTE6MzIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VzZXJzcGFjZS1hcGkvaW9jdGwvaW9jdGwtbnVtYmVyLnJzdCBiL0RvY3VtZW50YXRpb24vdXNlcnNwYWNlLWFwaS9pb2N0bC9pb2N0bC1udW1iZXIucnN0CmluZGV4IDNmMGVmMWUyN2ViMDcuLjJiOTg2OWFlYjgxMWIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdXNlcnNwYWNlLWFwaS9pb2N0bC9pb2N0bC1udW1iZXIucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vdXNlcnNwYWNlLWFwaS9pb2N0bC9pb2N0bC1udW1iZXIucnN0CkBAIC0zOTksNiAmIzQzOzM5OSw3IEBAIENvZGUgIFNlcSMgICAgSW5jbHVkZSBGaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tbWVudHMKIDB4RTUgIDAwLTNGICBsaW51eC9mdXNlLmgKIDB4RUMgIDAwLTAxICBkcml2ZXJzL3BsYXRmb3JtL2Nocm9tZS9jcm9zX2VjX2Rldi5oICAgICAgICAgICAgICAgICAgICAgQ2hyb21lT1MgRUMgZHJpdmVyCiAweEVFICAwMC0wOSAgdWFwaS9saW51eC9wZnJ1dC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsYXRmb3JtIEZpcm13YXJlIFJ1bnRpbWUgVXBkYXRlIGFuZCBUZWxlbWV0cnkKJiM0MzsweEVGICAwMC0wRiAgdWFwaS9saW51eC9udGZzLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5URlMKIDB4RjMgIDAwLTNGICBkcml2ZXJzL3VzYi9taXNjL3Npc3VzYnZnYS9zaXN1c2IuaCAgICAgICAgICAgICAgICAgICAgICAgc2lzZmIgKGluIGRldmVsb3BtZW50KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbHQ7bWFpbHRvOnRob21hc0B3aW5pc2NoaG9mZXIubmV0Jmd0OwogMHhGNiAgYWxsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVFRuZyBMaW51eCBUcmFjZSBUb29sa2l0IE5leHQgR2VuZXJhdGlvbgpkaWZmIC0tZ2l0IGEvZnMvbnRmcy9maWxlLmMgYi9mcy9udGZzL2ZpbGUuYwppbmRleCBkNDI4MjgyMmIzY2VmLi45NjFiOTRmNTQ1ZjJjIDEwMDY0NAotLS0gYS9mcy9udGZzL2ZpbGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9udGZzL2ZpbGUuYwpAQCAtMTUsNiAmIzQzOzE1LDggQEAKICNpbmNsdWRlICZsdDtsaW51eC9wb3NpeF9hY2xfeGF0dHIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9jb21wYXQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9mYWxsb2MuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvb3ZlcmZsb3cuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7dWFwaS9saW51eC9udGZzLmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7bGNuYWxsb2MuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O250ZnMuaCYjMzQ7CkBAIC0yMyw2ICYjNDM7MjUsNyBAQAogI2luY2x1ZGUgJiMzNDtpb21hcC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7Yml0bWFwLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt2b2x1bWUuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDttZnQuaCYjMzQ7CiAKICNpbmNsdWRlICZsdDtsaW51eC9maWxlbG9jay5oJmd0OwogCkBAIC04MzksNiAmIzQzOzg0Miw1MDQgQEAgc3RhdGljIGludCBudGZzX2lvY3RsX2ZpdHJpbShzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCwgdW5zaWduZWQgbG9uZyBhcmcpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MzsjZGVmaW5lIE5URlNfU1RSRUFNX01BWF9JTwkoMTYgKiAxMDI0ICogMTAyNCkgLyogMTZNQiBsaW1pdCAqLwomIzQzOwomIzQzOy8qCiYjNDM7ICogbnRmc19yZWFkX25hbWVkX3N0cmVhbSAtIFJlYWQgZGF0YSBmcm9tIGEgbmFtZWQgJERBVEEgc3RyZWFtLgomIzQzOyAqCiYjNDM7ICogQG5pOgkJTlRGUyBpbm9kZQomIzQzOyAqIEB1bmFtZToJU3RyZWFtIG5hbWUKJiM0MzsgKiBAdW5hbWVfbGVuOglMZW5ndGggb2YgbmFtZSBpbiBVbmljb2RlIGNoYXJhY3RlcnMKJiM0MzsgKiBAb2Zmc2V0OglCeXRlIG9mZnNldCBpbiB0aGUgc3RyZWFtCiYjNDM7ICogQGxlbjoJTnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQKJiM0MzsgKiBAZGF0YV9idWY6CUJ1ZmZlciB0byBjb3B5IGRhdGEgdG8KJiM0MzsgKgomIzQzOyAqIFJldHVybjoJMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS4KJiM0MzsgKgkJSWYgb2Zmc2V0ICZndDs9IHN0cmVhbSBzaXplLCByZXR1cm5zIDAuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBudGZzX3JlYWRfbmFtZWRfc3RyZWFtKHN0cnVjdCBudGZzX2lub2RlICpuaSwgX19sZTE2ICp1bmFtZSwKJiM0MzsJCXUzMiB1bmFtZV9sZW4sIHU2NCBvZmZzZXQsIHU2NCBsZW4sIHZvaWQgKmRhdGFfYnVmLAomIzQzOwkJdTY0ICpyYnl0ZXMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbnRmc19hdHRyX3NlYXJjaF9jdHggKmN0eDsKJiM0MzsJc3RydWN0IGlub2RlICphdHRyX3ZpOwomIzQzOwlpbnQgZXJyID0gMDsKJiM0MzsJdTY0IGRhdGFfc2l6ZTsKJiM0MzsJczY0IGJ5dGVzOwomIzQzOwljaGFyICpyYnVmID0gTlVMTDsKJiM0MzsKJiM0MzsJaWYgKCFuaSB8fCAhdW5hbWUgfHwgdW5hbWVfbGVuID09IDApCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJaWYgKGxlbiA9PSAwIHx8IGxlbiAmZ3Q7IE5URlNfU1RSRUFNX01BWF9JTykKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7bmktJmd0O21yZWNfbG9jayk7CiYjNDM7CWN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuaSwgTlVMTCk7CiYjNDM7CWlmICghY3R4KSB7CiYjNDM7CQltdXRleF91bmxvY2soJmFtcDtuaS0mZ3Q7bXJlY19sb2NrKTsKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiYjNDM7CiYjNDM7CWVyciA9IG50ZnNfYXR0cl9sb29rdXAoQVRfREFUQSwgdW5hbWUsIHVuYW1lX2xlbiwgQ0FTRV9TRU5TSVRJVkUsIDAsCiYjNDM7CQkJTlVMTCwgMCwgY3R4KTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gb3V0X2xvY2s7CiYjNDM7CiYjNDM7CWlmIChjdHgtJmd0O2F0dHItJmd0O25vbl9yZXNpZGVudCkKJiM0MzsJCWRhdGFfc2l6ZSA9IGxlNjRfdG9fY3B1KGN0eC0mZ3Q7YXR0ci0mZ3Q7ZGF0YS5ub25fcmVzaWRlbnQuZGF0YV9zaXplKTsKJiM0MzsJZWxzZQomIzQzOwkJZGF0YV9zaXplID0gbGUzMl90b19jcHUoY3R4LSZndDthdHRyLSZndDtkYXRhLnJlc2lkZW50LnZhbHVlX2xlbmd0aCk7CiYjNDM7CiYjNDM7CWlmIChvZmZzZXQgJmd0Oz0gZGF0YV9zaXplKSB7CiYjNDM7CQkqcmJ5dGVzID0gMDsKJiM0MzsJCS8qIEVPRjogbm90aGluZyB0byByZWFkICovCiYjNDM7CQlnb3RvIG91dF9sb2NrOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIEFkanVzdCBsZW5ndGggdG8gbm90IHJlYWQgYmV5b25kIEVPRiAqLwomIzQzOwlpZiAobGVuICZndDsgZGF0YV9zaXplIC0gb2Zmc2V0KQomIzQzOwkJbGVuID0gZGF0YV9zaXplIC0gb2Zmc2V0OwomIzQzOwomIzQzOwlhdHRyX3ZpID0gbnRmc19hdHRyX2lnZXQoVkZTX0kobmkpLCBBVF9EQVRBLCB1bmFtZSwgdW5hbWVfbGVuKTsKJiM0MzsJbnRmc19hdHRyX3B1dF9zZWFyY2hfY3R4KGN0eCk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO25pLSZndDttcmVjX2xvY2spOwomIzQzOwomIzQzOwlpZiAoSVNfRVJSKGF0dHJfdmkpKSB7CiYjNDM7CQllcnIgPSBQVFJfRVJSKGF0dHJfdmkpOwomIzQzOwkJZ290byBvdXRfZnJlZTsKJiM0MzsJfQomIzQzOwomIzQzOwlyYnVmID0ga3Z6YWxsb2MobGVuLCBHRlBfTk9GUyk7CiYjNDM7CWlmICghcmJ1ZikgewomIzQzOwkJZXJyID0gLUVOT01FTTsKJiM0MzsJCWlwdXQoYXR0cl92aSk7CiYjNDM7CQlnb3RvIG91dF9mcmVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CWJ5dGVzID0gbnRmc19pbm9kZV9hdHRyX3ByZWFkKGF0dHJfdmksIG9mZnNldCwgbGVuLCByYnVmKTsKJiM0MzsJaXB1dChhdHRyX3ZpKTsKJiM0MzsJaWYgKGJ5dGVzICZsdDsgMCkgewomIzQzOwkJZXJyID0gYnl0ZXM7CiYjNDM7CQlnb3RvIG91dF9mcmVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CSpyYnl0ZXMgPSBieXRlczsKJiM0MzsJbWVtY3B5KGRhdGFfYnVmLCByYnVmLCBieXRlcyk7CiYjNDM7CiYjNDM7b3V0X2ZyZWU6CiYjNDM7CWt2ZnJlZShyYnVmKTsKJiM0MzsJcmV0dXJuIGVycjsKJiM0MzsKJiM0MztvdXRfbG9jazoKJiM0MzsJbnRmc19hdHRyX3B1dF9zZWFyY2hfY3R4KGN0eCk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO25pLSZndDttcmVjX2xvY2spOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIG50ZnNfd3JpdGVfbmFtZWRfc3RyZWFtIC0gV3JpdGUgZGF0YSBmcm9tIGEgbmFtZWQgJERBVEEgc3RyZWFtLgomIzQzOyAqCiYjNDM7ICogQG5pOgkJTlRGUyBpbm9kZQomIzQzOyAqIEB1bmFtZToJU3RyZWFtIG5hbWUKJiM0MzsgKiBAdW5hbWVfbGVuOglMZW5ndGggb2YgbmFtZSBpbiBVbmljb2RlIGNoYXJhY3RlcnMKJiM0MzsgKiBAb2Zmc2V0OglCeXRlIG9mZnNldCBpbiB0aGUgc3RyZWFtCiYjNDM7ICogQGxlbjoJTnVtYmVyIG9mIGJ5dGVzIHRvIHdyaXRlCiYjNDM7ICogQGRhdGFfc3RyZWFtOiBEYXRhIHRvIHdyaXRlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46CTAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2UuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBudGZzX3dyaXRlX25hbWVkX3N0cmVhbShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIF9fbGUxNiAqdW5hbWUsCiYjNDM7CQl1MzIgdW5hbWVfbGVuLCB1NjQgb2Zmc2V0LCB1NjQgbGVuLCB2b2lkICpkYXRhX3N0cmVhbSwKJiM0MzsJCXU2NCAqd2J5dGVzKQomIzQzO3sKJiM0MzsJc3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHg7CiYjNDM7CXN0cnVjdCBpbm9kZSAqYXR0cl92aTsKJiM0MzsJaW50IGVycjsKJiM0MzsJczY0IGJ5dGVzOwomIzQzOwomIzQzOwlpZiAoIW5pIHx8ICF1bmFtZSB8fCB1bmFtZV9sZW4gPT0gMCB8fCAhZGF0YV9zdHJlYW0pCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJaWYgKGxlbiA9PSAwIHx8IGxlbiAmZ3Q7IE5URlNfU1RSRUFNX01BWF9JTykKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7bmktJmd0O21yZWNfbG9jayk7CiYjNDM7CWN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuaSwgTlVMTCk7CiYjNDM7CWlmICghY3R4KSB7CiYjNDM7CQllcnIgPSAtRU5PTUVNOwomIzQzOwkJZ290byBvdXRfdW5sb2NrOwomIzQzOwl9CiYjNDM7CiYjNDM7CWVyciA9IG50ZnNfYXR0cl9sb29rdXAoQVRfREFUQSwgdW5hbWUsIHVuYW1lX2xlbiwgQ0FTRV9TRU5TSVRJVkUsIDAsCiYjNDM7CQkJTlVMTCwgMCwgY3R4KTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJaWYgKGVyciAhPSAtRU5PRU5UKQomIzQzOwkJCWdvdG8gb3V0X3VubG9jazsKJiM0MzsJCWVyciA9IG50ZnNfYXR0cl9hZGQobmksIEFUX0RBVEEsIHVuYW1lLCB1bmFtZV9sZW4sIE5VTEwsIDApOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlnb3RvIG91dF91bmxvY2s7CiYjNDM7CQltYXJrX21mdF9yZWNvcmRfZGlydHkobmkpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWF0dHJfdmkgPSBudGZzX2F0dHJfaWdldChWRlNfSShuaSksIEFUX0RBVEEsIHVuYW1lLCB1bmFtZV9sZW4pOwomIzQzOwludGZzX2F0dHJfcHV0X3NlYXJjaF9jdHgoY3R4KTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7bmktJmd0O21yZWNfbG9jayk7CiYjNDM7CiYjNDM7CWlmIChJU19FUlIoYXR0cl92aSkpIHsKJiM0MzsJCWVyciA9IFBUUl9FUlIoYXR0cl92aSk7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwomIzQzOwlieXRlcyA9IG50ZnNfaW5vZGVfYXR0cl9wd3JpdGUoYXR0cl92aSwgb2Zmc2V0LCBsZW4sIGRhdGFfc3RyZWFtLAomIzQzOwkJCQkgICAgICAgZmFsc2UpOwomIzQzOwlpZiAoYnl0ZXMgJmx0OyAwKQomIzQzOwkJZXJyID0gYnl0ZXM7CiYjNDM7CWVsc2UKJiM0MzsJCSp3Ynl0ZXMgPSBieXRlczsKJiM0MzsJaXB1dChhdHRyX3ZpKTsKJiM0MzsKJiM0MztvdXQ6CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7CiYjNDM7b3V0X3VubG9jazoKJiM0MzsJaWYgKGN0eCkKJiM0MzsJCW50ZnNfYXR0cl9wdXRfc2VhcmNoX2N0eChjdHgpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtuaS0mZ3Q7bXJlY19sb2NrKTsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBudGZzX3JlbW92ZV9uYW1lZF9zdHJlYW0gLSBSZW1vdmUgYSBuYW1lZCAkREFUQSBzdHJlYW0uCiYjNDM7ICoKJiM0MzsgKiBAbmk6CQlOVEZTIGlub2RlCiYjNDM7ICogQHVuYW1lOglTdHJlYW0gbmFtZQomIzQzOyAqIEB1bmFtZV9sZW46CU5hbWUgbGVuZ3RoIGluIFVuaWNvZGUgY2hhcmFjdGVycwomIzQzOyAqCiYjNDM7ICogUmV0dXJuOgkwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yCiYjNDM7ICogICAgICAgICAgICAgIC1FTk9FTlQgaWYgc3RyZWFtIG5vdCBmb3VuZAomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgbnRmc19yZW1vdmVfbmFtZWRfc3RyZWFtKHN0cnVjdCBudGZzX2lub2RlICpuaSwgX19sZTE2ICp1bmFtZSwKJiM0MzsJCXUzMiB1bmFtZV9sZW4pCiYjNDM7ewomIzQzOwlpZiAoIW5pIHx8ICF1bmFtZSB8fCB1bmFtZV9sZW4gPT0gMCkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlyZXR1cm4gbnRmc19hdHRyX3JlbW92ZShuaSwgQVRfREFUQSwgdW5hbWUsIHVuYW1lX2xlbik7CiYjNDM7fQomIzQzOwomIzQzO2VudW0gbnRmc19zdHJlYW1fb3AgewomIzQzOwlOVEZTX1NUUkVBTV9PUF9SRUFELAomIzQzOwlOVEZTX1NUUkVBTV9PUF9XUklURSwKJiM0MzsJTlRGU19TVFJFQU1fT1BfUkVNT1ZFLAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGxvbmcgbnRmc19pb2N0bF9zdHJlYW0oc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYXJnLAomIzQzOwkJCSAgICAgIGVudW0gbnRmc19zdHJlYW1fb3Agb3ApCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShmaWxwKTsKJiM0MzsJc3RydWN0IG50ZnNfaW5vZGUgKm5pID0gTlRGU19JKGlub2RlKTsKJiM0MzsJc3RydWN0IG50ZnNfc3RyZWFtIF9fdXNlciAqdXJlcSA9CiYjNDM7CQkoc3RydWN0IG50ZnNfc3RyZWFtIF9fdXNlciAqKWFyZzsKJiM0MzsJc3RydWN0IG50ZnNfc3RyZWFtICpyZXE7CiYjNDM7CXNpemVfdCBoZWFkZXJfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgbnRmc19zdHJlYW0pOwomIzQzOwlzaXplX3QgZGF0YV9zaXplLCB0b3RhbF9zaXplOwomIzQzOwljaGFyICprbmFtZSwgKmtkYXRhOwomIzQzOwlfX2xlMTYgKnVuYW1lID0gTlVMTCwgKnNuYW1lOwomIzQzOwlpbnQgZXJyID0gMCwgc25hbWVfbGVuOwomIzQzOwlib29sIHV0ZjE2OwomIzQzOwlzdHJ1Y3QgbnRmc19zdHJlYW0gaGRyOwomIzQzOwomIzQzOwkvKiBGaXJzdCBjb3B5IGZpeGVkIGhlYWRlciAqLwomIzQzOwlpZiAoY29weV9mcm9tX3VzZXIoJmFtcDtoZHIsIHVyZXEsIGhlYWRlcl9zaXplKSkKJiM0MzsJCXJldHVybiAtRUZBVUxUOwomIzQzOwomIzQzOwlpZiAoaGRyLmlvX2xlbiAmZ3Q7IE5URlNfU1RSRUFNX01BWF9JTyB8fAomIzQzOwkgICAgKGhkci5mbGFncyAmYW1wOyB+TlRGU19TVFJFQU1fRkxfVVRGMTYpIHx8IGhkci5yZXNlcnZlZCkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwl1dGYxNiA9IGhkci5mbGFncyAmYW1wOyBOVEZTX1NUUkVBTV9GTF9VVEYxNjsKJiM0MzsKJiM0MzsJaWYgKGhkci5uYW1lX2xlbiA9PSAwKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CWlmICh1dGYxNikgewomIzQzOwkJLyogVVRGLTE2TEUgYnl0ZSBjb3VudDogbXVzdCBiZSBldmVuIGFuZCB3aXRoaW4gdGhlIGxpbWl0LiAqLwomIzQzOwkJaWYgKChoZHIubmFtZV9sZW4gJmFtcDsgMSkgfHwKJiM0MzsJCSAgICBoZHIubmFtZV9sZW4gJmd0OyBOVEZTX01BWF9OQU1FX0xFTiAqIHNpemVvZihfX2xlMTYpKQomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9IGVsc2UgaWYgKGhkci5uYW1lX2xlbiAmZ3Q7IE5URlNfTUFYX05BTUVfTEVOKSB7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlzd2l0Y2ggKG9wKSB7CiYjNDM7CWNhc2UgTlRGU19TVFJFQU1fT1BfUkVBRDoKJiM0MzsJCWlmICghKGZpbHAtJmd0O2ZfbW9kZSAmYW1wOyBGTU9ERV9SRUFEKSB8fCBoZHIuaW9fbGVuID09IDApCiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQlkYXRhX3NpemUgPSBoZHIuaW9fbGVuOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgTlRGU19TVFJFQU1fT1BfV1JJVEU6CiYjNDM7CQlpZiAoIShmaWxwLSZndDtmX21vZGUgJmFtcDsgRk1PREVfV1JJVEUpIHx8IGhkci5pb19sZW4gPT0gMCkKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCWRhdGFfc2l6ZSA9IGhkci5pb19sZW47CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBOVEZTX1NUUkVBTV9PUF9SRU1PVkU6CiYjNDM7CQlpZiAoIShmaWxwLSZndDtmX21vZGUgJmFtcDsgRk1PREVfV1JJVEUpIHx8IGhkci5pb19sZW4gIT0gMCkKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCWRhdGFfc2l6ZSA9IDA7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAtRU5PVFRZOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChjaGVja19hZGRfb3ZlcmZsb3coaGVhZGVyX3NpemUsIChzaXplX3QpaGRyLm5hbWVfbGVuLCAmYW1wO3RvdGFsX3NpemUpIHx8CiYjNDM7CSAgICBjaGVja19hZGRfb3ZlcmZsb3codG90YWxfc2l6ZSwgZGF0YV9zaXplLCAmYW1wO3RvdGFsX3NpemUpKQomIzQzOwkJcmV0dXJuIC1FT1ZFUkZMT1c7CiYjNDM7CiYjNDM7CXJlcSA9IG1lbWR1cF91c2VyKHVyZXEsIHRvdGFsX3NpemUpOwomIzQzOwlpZiAoSVNfRVJSKHJlcSkpCiYjNDM7CQlyZXR1cm4gUFRSX0VSUihyZXEpOwomIzQzOwomIzQzOwlyZXEtJmd0O2J5dGVzX3JldHVybmVkID0gMDsKJiM0MzsKJiM0MzsJa25hbWUgPSAoY2hhciAqKXJlcS0mZ3Q7YnVmZmVyOwomIzQzOwlrZGF0YSA9IChjaGFyICopcmVxLSZndDtidWZmZXIgJiM0MzsgcmVxLSZndDtuYW1lX2xlbjsKJiM0MzsKJiM0MzsJaWYgKHJlcS0mZ3Q7bmFtZV9sZW4gIT0gaGRyLm5hbWVfbGVuIHx8IHJlcS0mZ3Q7aW9fbGVuICE9IGhkci5pb19sZW4gfHwKJiM0MzsJICAgIHJlcS0mZ3Q7ZmxhZ3MgIT0gaGRyLmZsYWdzIHx8IHJlcS0mZ3Q7cmVzZXJ2ZWQpIHsKJiM0MzsJCWVyciA9IC1FSU5WQUw7CiYjNDM7CQlnb3RvIG91dF9mcmVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICh1dGYxNikgewomIzQzOwkJLyogTmFtZSBpcyBhbHJlYWR5IG9uLWRpc2sgVVRGLTE2TEU7IHVzZSBpdCBpbiBwbGFjZS4gKi8KJiM0MzsJCXNuYW1lID0gKF9fbGUxNiAqKWtuYW1lOwomIzQzOwkJc25hbWVfbGVuID0gcmVxLSZndDtuYW1lX2xlbiAvIHNpemVvZihfX2xlMTYpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJaWYgKG1lbWNocihrbmFtZSwgJiMzOTtcMCYjMzk7LCByZXEtJmd0O25hbWVfbGVuKSkgewomIzQzOwkJCWVyciA9IC1FSU5WQUw7CiYjNDM7CQkJZ290byBvdXRfZnJlZTsKJiM0MzsJCX0KJiM0MzsJCXNuYW1lX2xlbiA9IG50ZnNfbmxzdG91Y3MobmktJmd0O3ZvbCwga25hbWUsIHJlcS0mZ3Q7bmFtZV9sZW4sCiYjNDM7CQkJCSZhbXA7dW5hbWUsIE5URlNfTUFYX05BTUVfTEVOKTsKJiM0MzsJCWlmIChzbmFtZV9sZW4gJmx0OyAwKSB7CiYjNDM7CQkJZXJyID0gc25hbWVfbGVuOwomIzQzOwkJCWdvdG8gb3V0X2ZyZWU7CiYjNDM7CQl9CiYjNDM7CQlzbmFtZSA9IHVuYW1lOwomIzQzOwl9CiYjNDM7CiYjNDM7CXN3aXRjaCAob3ApIHsKJiM0MzsJY2FzZSBOVEZTX1NUUkVBTV9PUF9SRUFEOgomIzQzOwkJZXJyID0gbnRmc19yZWFkX25hbWVkX3N0cmVhbShuaSwgc25hbWUsIHNuYW1lX2xlbiwKJiM0MzsJCQkJCSAgICAgcmVxLSZndDtzdHJlYW1fb2Zmc2V0LCByZXEtJmd0O2lvX2xlbiwKJiM0MzsJCQkJCSAgICAga2RhdGEsCiYjNDM7CQkJCQkgICAgICZhbXA7cmVxLSZndDtieXRlc19yZXR1cm5lZCk7CiYjNDM7CQlpZiAoIWVycikgewomIzQzOwkJCWlmIChjb3B5X3RvX3VzZXIodXJlcSwgcmVxLAomIzQzOwkJCQkJaGVhZGVyX3NpemUgJiM0MzsgcmVxLSZndDtuYW1lX2xlbiAmIzQzOyByZXEtJmd0O2J5dGVzX3JldHVybmVkKSkKJiM0MzsJCQkJZXJyID0gLUVGQVVMVDsKJiM0MzsJCX0KJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIE5URlNfU1RSRUFNX09QX1dSSVRFOgomIzQzOwkJZXJyID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxwKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CQllcnIgPSBudGZzX3dyaXRlX25hbWVkX3N0cmVhbShuaSwgc25hbWUsIHNuYW1lX2xlbiwKJiM0MzsJCQkJCSAgICAgIHJlcS0mZ3Q7c3RyZWFtX29mZnNldCwgcmVxLSZndDtpb19sZW4sCiYjNDM7CQkJCQkgICAgICBrZGF0YSwKJiM0MzsJCQkJCSAgICAgICZhbXA7cmVxLSZndDtieXRlc19yZXR1cm5lZCk7CiYjNDM7CQltbnRfZHJvcF93cml0ZV9maWxlKGZpbHApOwomIzQzOwkJaWYgKCFlcnIpIHsKJiM0MzsJCQlpZiAoY29weV90b191c2VyKCZhbXA7dXJlcS0mZ3Q7Ynl0ZXNfcmV0dXJuZWQsCiYjNDM7CQkJCQkgJmFtcDtyZXEtJmd0O2J5dGVzX3JldHVybmVkLAomIzQzOwkJCQkJIHNpemVvZihyZXEtJmd0O2J5dGVzX3JldHVybmVkKSkpCiYjNDM7CQkJCWVyciA9IC1FRkFVTFQ7CiYjNDM7CQl9CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBOVEZTX1NUUkVBTV9PUF9SRU1PVkU6CiYjNDM7CQllcnIgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbHApOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlicmVhazsKJiM0MzsJCWVyciA9IG50ZnNfcmVtb3ZlX25hbWVkX3N0cmVhbShuaSwgc25hbWUsIHNuYW1lX2xlbik7CiYjNDM7CQltbnRfZHJvcF93cml0ZV9maWxlKGZpbHApOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQllcnIgPSAtRU5PVFRZOwomIzQzOwl9CiYjNDM7CiYjNDM7b3V0X2ZyZWU6CiYjNDM7CWlmICh1bmFtZSkKJiM0MzsJCWttZW1fY2FjaGVfZnJlZShudGZzX25hbWVfY2FjaGUsIHVuYW1lKTsKJiM0MzsJa2ZyZWUocmVxKTsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBudGZzX2lvY3RsX2xpc3Rfc3RyZWFtcyhzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhcmcpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShmaWxwKTsKJiM0MzsJc3RydWN0IG50ZnNfaW5vZGUgKm5pID0gTlRGU19JKGlub2RlKTsKJiM0MzsJc3RydWN0IG50ZnNfbGlzdF9zdHJlYW1zIGhkcjsKJiM0MzsJc3RydWN0IG50ZnNfc3RyZWFtX2VudHJ5ICplbnRyeSwgKmxhc3RfZW50cnkgPSBOVUxMOwomIzQzOwlzaXplX3QgcmVxdWlyZWQgPSAwOwomIzQzOwl2b2lkICprYnVmID0gTlVMTDsKJiM0MzsJdm9pZCBfX3VzZXIgKnVidWY7CiYjNDM7CXN0cnVjdCBhdHRyX3JlY29yZCAqYTsKJiM0MzsJc3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICphY3R4OwomIzQzOwlpbnQgcmV0ID0gMCwgZXJyLCBjb3VudCA9IDA7CiYjNDM7CXNpemVfdCBlbnRyeV9zaXplLCBvZmZzZXQgPSAwOwomIzQzOwl1bnNpZ25lZCBpbnQgbmFtZV9sZW47CiYjNDM7CXVuc2lnbmVkIGNoYXIgKnNuOwomIzQzOwlib29sIHV0ZjE2OwomIzQzOwomIzQzOwlpZiAoY29weV9mcm9tX3VzZXIoJmFtcDtoZHIsICh2b2lkIF9fdXNlciAqKWFyZywgc2l6ZW9mKGhkcikpKQomIzQzOwkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CiYjNDM7CWlmICgoaGRyLmZsYWdzICZhbXA7IH5OVEZTX1NUUkVBTV9GTF9VVEYxNikgfHwgaGRyLnJlc2VydmVkKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CXV0ZjE2ID0gaGRyLmZsYWdzICZhbXA7IE5URlNfU1RSRUFNX0ZMX1VURjE2OwomIzQzOwomIzQzOwl1YnVmID0gKHZvaWQgX191c2VyICopYXJnICYjNDM7IHNpemVvZihoZHIpOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7bmktJmd0O21yZWNfbG9jayk7CiYjNDM7CWFjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIE5VTEwpOwomIzQzOwlpZiAoIWFjdHgpIHsKJiM0MzsJCW11dGV4X3VubG9jaygmYW1wO25pLSZndDttcmVjX2xvY2spOwomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CX0KJiM0MzsKJiM0MzsJd2hpbGUgKChlcnIgPSBudGZzX2F0dHJzX3dhbGsoYWN0eCkpID09IDApIHsKJiM0MzsJCWEgPSBhY3R4LSZndDthdHRyOwomIzQzOwkJaWYgKGEtJmd0O3R5cGUgIT0gQVRfREFUQSB8fCAhYS0mZ3Q7bmFtZV9sZW5ndGgpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlpZiAodXRmMTYpIHsKJiM0MzsJCQluYW1lX2xlbiA9IGEtJmd0O25hbWVfbGVuZ3RoICogc2l6ZW9mKF9fbGUxNik7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCXNuID0gbnRmc19hdHRyX25hbWVfZ2V0KG5pLSZndDt2b2wsCiYjNDM7CQkJCQkoX19sZTE2ICopKCh1OCAqKWEgJiM0MzsgbGUxNl90b19jcHUoYS0mZ3Q7bmFtZV9vZmZzZXQpKSwKJiM0MzsJCQkJCWEtJmd0O25hbWVfbGVuZ3RoKTsKJiM0MzsJCQlpZiAoIXNuKSB7CiYjNDM7CQkJCXJldCA9IC1FSU87CiYjNDM7CQkJCWdvdG8gb3V0OwomIzQzOwkJCX0KJiM0MzsJCQluYW1lX2xlbiA9IHN0cmxlbihzbik7CiYjNDM7CQkJbnRmc19hdHRyX25hbWVfZnJlZSgmYW1wO3NuKTsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWVudHJ5X3NpemUgPSBzaXplb2YoKmVudHJ5KSAmIzQzOyBuYW1lX2xlbjsKJiM0MzsJCWVudHJ5X3NpemUgPSBBTElHTihlbnRyeV9zaXplLCA4KTsKJiM0MzsKJiM0MzsJCWlmIChyZXF1aXJlZCAmZ3Q7IFNJWkVfTUFYIC0gZW50cnlfc2l6ZSkgewomIzQzOwkJCXJldCA9IC1FT1ZFUkZMT1c7CiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CQl9CiYjNDM7CQlyZXF1aXJlZCAmIzQzOz0gZW50cnlfc2l6ZTsKJiM0MzsJCWNvdW50JiM0MzsmIzQzOzsKJiM0MzsJfQomIzQzOwlpZiAoZXJyICE9IC1FTk9FTlQpIHsKJiM0MzsJCXJldCA9IGVycjsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWhkci5zdHJlYW1fY291bnQgPSBjb3VudDsKJiM0MzsJaGRyLmJ5dGVzX3JldHVybmVkID0gcmVxdWlyZWQ7CiYjNDM7CiYjNDM7CWlmICghY291bnQpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJaWYgKGhkci5idWZmZXJfc2l6ZSAmbHQ7IHJlcXVpcmVkKSB7CiYjNDM7CQlyZXQgPSAtRU5PU1BDOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJa2J1ZiA9IGt2emFsbG9jKHJlcXVpcmVkLCBHRlBfTk9GUyk7CiYjNDM7CWlmICgha2J1ZikgewomIzQzOwkJcmV0ID0gLUVOT01FTTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CW50ZnNfYXR0cl9yZWluaXRfc2VhcmNoX2N0eChhY3R4KTsKJiM0MzsJd2hpbGUgKChlcnIgPSBudGZzX2F0dHJzX3dhbGsoYWN0eCkpID09IDApIHsKJiM0MzsJCWEgPSBhY3R4LSZndDthdHRyOwomIzQzOwkJaWYgKGEtJmd0O3R5cGUgIT0gQVRfREFUQSB8fCAhYS0mZ3Q7bmFtZV9sZW5ndGgpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CQlpZiAodXRmMTYpIHsKJiM0MzsJCQlzbiA9IE5VTEw7CiYjNDM7CQkJbmFtZV9sZW4gPSBhLSZndDtuYW1lX2xlbmd0aCAqIHNpemVvZihfX2xlMTYpOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlzbiA9IG50ZnNfYXR0cl9uYW1lX2dldChuaS0mZ3Q7dm9sLAomIzQzOwkJCQkJKF9fbGUxNiAqKSgodTggKilhICYjNDM7IGxlMTZfdG9fY3B1KGEtJmd0O25hbWVfb2Zmc2V0KSksCiYjNDM7CQkJCQlhLSZndDtuYW1lX2xlbmd0aCk7CiYjNDM7CQkJaWYgKCFzbikgewomIzQzOwkJCQlyZXQgPSAtRUlPOwomIzQzOwkJCQlnb3RvIG91dDsKJiM0MzsJCQl9CiYjNDM7CQkJbmFtZV9sZW4gPSBzdHJsZW4oc24pOwomIzQzOwkJfQomIzQzOwomIzQzOwkJZW50cnlfc2l6ZSA9IHNpemVvZigqZW50cnkpICYjNDM7IG5hbWVfbGVuOwomIzQzOwkJZW50cnlfc2l6ZSA9IEFMSUdOKGVudHJ5X3NpemUsIDgpOwomIzQzOwkJaWYgKG9mZnNldCAmZ3Q7IHJlcXVpcmVkIC0gZW50cnlfc2l6ZSkgewomIzQzOwkJCXJldCA9IC1FT1ZFUkZMT1c7CiYjNDM7CQkJbnRmc19hdHRyX25hbWVfZnJlZSgmYW1wO3NuKTsKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWVudHJ5ID0gKHN0cnVjdCBudGZzX3N0cmVhbV9lbnRyeSAqKShrYnVmICYjNDM7IG9mZnNldCk7CiYjNDM7CiYjNDM7CQlpZiAoYS0mZ3Q7bm9uX3Jlc2lkZW50KSB7CiYjNDM7CQkJZW50cnktJmd0O3NpemUgPSBsZTY0X3RvX2NwdShhLSZndDtkYXRhLm5vbl9yZXNpZGVudC5kYXRhX3NpemUpOwomIzQzOwkJCWVudHJ5LSZndDthbGxvY19zaXplID0KJiM0MzsJCQkJbGU2NF90b19jcHUoYS0mZ3Q7ZGF0YS5ub25fcmVzaWRlbnQuYWxsb2NhdGVkX3NpemUpOwomIzQzOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQllbnRyeS0mZ3Q7c2l6ZSA9IGxlMzJfdG9fY3B1KGEtJmd0O2RhdGEucmVzaWRlbnQudmFsdWVfbGVuZ3RoKTsKJiM0MzsJCQllbnRyeS0mZ3Q7YWxsb2Nfc2l6ZSA9IGxlMzJfdG9fY3B1KGEtJmd0O2xlbmd0aCkgLQomIzQzOwkJCQlsZTE2X3RvX2NwdShhLSZndDtkYXRhLnJlc2lkZW50LnZhbHVlX29mZnNldCk7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQllbnRyeS0mZ3Q7bmFtZV9sZW4gPSBuYW1lX2xlbjsKJiM0MzsJCWlmICh1dGYxNikKJiM0MzsJCQltZW1jcHkoZW50cnktJmd0O25hbWUsCiYjNDM7CQkJICAgICAgICh1OCAqKWEgJiM0MzsgbGUxNl90b19jcHUoYS0mZ3Q7bmFtZV9vZmZzZXQpLCBuYW1lX2xlbik7CiYjNDM7CQllbHNlCiYjNDM7CQkJbWVtY3B5KGVudHJ5LSZndDtuYW1lLCBzbiwgbmFtZV9sZW4pOwomIzQzOwkJbnRmc19hdHRyX25hbWVfZnJlZSgmYW1wO3NuKTsKJiM0MzsKJiM0MzsJCWVudHJ5LSZndDtuZXh0X2VudHJ5X29mZiA9IGVudHJ5X3NpemU7CiYjNDM7CQlsYXN0X2VudHJ5ID0gZW50cnk7CiYjNDM7CQlvZmZzZXQgJiM0Mzs9IGVudHJ5X3NpemU7CiYjNDM7CX0KJiM0MzsJaWYgKGVyciAhPSAtRU5PRU5UKSB7CiYjNDM7CQlyZXQgPSBlcnI7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQkvKiBUaGUgY2hhaW4gdGVybWluYXRlcyBhdCB0aGUgbGFzdCBlbnRyeS4gKi8KJiM0MzsJCWlmIChsYXN0X2VudHJ5KQomIzQzOwkJCWxhc3RfZW50cnktJmd0O25leHRfZW50cnlfb2ZmID0gMDsKJiM0MzsJCWhkci5ieXRlc19yZXR1cm5lZCA9IG9mZnNldDsKJiM0MzsJfQomIzQzOwomIzQzO291dDoKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7bmktJmd0O21yZWNfbG9jayk7CiYjNDM7CW50ZnNfYXR0cl9wdXRfc2VhcmNoX2N0eChhY3R4KTsKJiM0MzsKJiM0MzsJaWYgKHJldCAmYW1wOyZhbXA7IHJldCAhPSAtRU5PU1BDKQomIzQzOwkJZ290byBvdXRfZnJlZTsKJiM0MzsKJiM0MzsJaWYgKCFyZXQgJmFtcDsmYW1wOyBrYnVmICZhbXA7JmFtcDsgY29weV90b191c2VyKHVidWYsIGtidWYsIGhkci5ieXRlc19yZXR1cm5lZCkpIHsKJiM0MzsJCXJldCA9IC1FRkFVTFQ7CiYjNDM7CQlnb3RvIG91dF9mcmVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLCAmYW1wO2hkciwgc2l6ZW9mKGhkcikpKQomIzQzOwkJcmV0ID0gLUVGQVVMVDsKJiM0MzsKJiM0MztvdXRfZnJlZToKJiM0MzsJa3ZmcmVlKGtidWYpOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKIGxvbmcgbnRmc19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJc3dpdGNoIChjbWQpIHsKQEAgLTg1MCw2ICYjNDM7MTM1MSwxNCBAQCBsb25nIG50ZnNfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogCQlyZXR1cm4gbnRmc19pb2N0bF9zZXRfdm9sdW1lX2xhYmVsKGZpbHAsIGFyZyk7CiAJY2FzZSBGSVRSSU06CiAJCXJldHVybiBudGZzX2lvY3RsX2ZpdHJpbShOVEZTX1NCKGZpbGVfaW5vZGUoZmlscCktJmd0O2lfc2IpLCBhcmcpOwomIzQzOwljYXNlIE5URlNfSU9DX1NUUkVBTV9SRUFEOgomIzQzOwkJcmV0dXJuIG50ZnNfaW9jdGxfc3RyZWFtKGZpbHAsIGFyZywgTlRGU19TVFJFQU1fT1BfUkVBRCk7CiYjNDM7CWNhc2UgTlRGU19JT0NfU1RSRUFNX1dSSVRFOgomIzQzOwkJcmV0dXJuIG50ZnNfaW9jdGxfc3RyZWFtKGZpbHAsIGFyZywgTlRGU19TVFJFQU1fT1BfV1JJVEUpOwomIzQzOwljYXNlIE5URlNfSU9DX1NUUkVBTV9SRU1PVkU6CiYjNDM7CQlyZXR1cm4gbnRmc19pb2N0bF9zdHJlYW0oZmlscCwgYXJnLCBOVEZTX1NUUkVBTV9PUF9SRU1PVkUpOwomIzQzOwljYXNlIE5URlNfSU9DX0xJU1RfU1RSRUFNUzoKJiM0MzsJCXJldHVybiBudGZzX2lvY3RsX2xpc3Rfc3RyZWFtcyhmaWxwLCBhcmcpOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRU5PVFRZOwogCX0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9udGZzLmggYi9pbmNsdWRlL3VhcGkvbGludXgvbnRmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmE1NzgzZGMzYjkwNTQKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvbnRmcy5oCkBAIC0wLDAgJiM0MzsxLDExNSBAQAomIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIFdJVEggTGludXgtc3lzY2FsbC1ub3RlICovCiYjNDM7LyoKJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjYgTEcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCiYjNDM7ICovCiYjNDM7CiYjNDM7I2lmbmRlZiBfVUFQSV9MSU5VWF9OVEZTX0gKJiM0MzsjZGVmaW5lIF9VQVBJX0xJTlVYX05URlNfSAomIzQzOyNpbmNsdWRlICZsdDtsaW51eC90eXBlcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pb2N0bC5oJmd0OwomIzQzOwomIzQzOyNkZWZpbmUgTlRGU19JT0NfTUFHSUMJMHhFRgomIzQzOwomIzQzOy8qCiYjNDM7ICogRmxhZ3MgZm9yIG50ZnNfc3RyZWFtLmZsYWdzIGFuZCBudGZzX2xpc3Rfc3RyZWFtcy5mbGFncy4KJiM0MzsgKgomIzQzOyAqIFRoZSBzdHJlYW0gbmFtZSBpcyByYXcgVVRGLTE2TEUsIGV4YWN0bHkgYXMgc3RvcmVkIG9uIGRpc2ssIGluc3RlYWQgb2YKJiM0MzsgKiBiZWluZyBlbmNvZGVkIHdpdGggdGhlIG1vdW50ZWQgZmlsZXN5c3RlbSBOTFMuIFRoaXMgYWxsb3dzIGxvc3NsZXNzCiYjNDM7ICogcm91bmQtdHJpcHBpbmcgb2Ygc3RyZWFtIG5hbWVzIHdob3NlIGNoYXJhY3RlcnMgYXJlIG5vdCByZXByZXNlbnRhYmxlCiYjNDM7ICogaW4gdGhlIG1vdW50IE5MUyAoZS5nLiBmb3IgV2luZSwgd2hpY2ggd29ya3MgaW4gVVRGLTE2IG5hdGl2ZWx5KS4KJiM0MzsgKiBXaGVuIHNldCwgdGhlIG5hbWUgbGVuZ3RoIGZpZWxkcyBjb3VudCBieXRlcyBvZiBVVEYtMTZMRSBhbmQgbXVzdAomIzQzOyAqIHRoZXJlZm9yZSBiZSBldmVuLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgTlRGU19TVFJFQU1fRkxfVVRGMTYJMHgxCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBudGZzIG5hbWVkIHN0cmVhbSBpb2N0bCBzdHJ1Y3R1cmUuCiYjNDM7ICoKJiM0MzsgKiBAc3RyZWFtX29mZnNldDoJT2Zmc2V0IHdpdGhpbiB0aGUgbmFtZWQgc3RyZWFtLgomIzQzOyAqIEBpb19sZW46CQlOdW1iZXIgb2YgYnl0ZXMgdG8gcmVhZC93cml0ZS4KJiM0MzsgKiBAYnl0ZXNfcmV0dXJuZWQ6CUFjdHVhbCBieXRlcyB0cmFuc2ZlcnJlZCAob3V0KS4KJiM0MzsgKiBAbmFtZV9sZW46CQlTdHJlYW0gbmFtZSBsZW5ndGggaW4gYnl0ZXMsIG5vdCBpbmNsdWRpbmcgYW55CiYjNDM7ICoJCQl0ZXJtaW5hdGluZyBOVUwgKHdoaWNoIG11c3Qgbm90IGJlIHByZXNlbnQpLiBXaGVuCiYjNDM7ICoJCQlOVEZTX1NUUkVBTV9GTF9VVEYxNiBpcyBzZXQgdGhpcyBpcyBhIFVURi0xNkxFIGJ5dGUKJiM0MzsgKgkJCWNvdW50IGFuZCBtdXN0IGJlIGV2ZW4uCiYjNDM7ICogQGZsYWdzOgkJQml0IG1hc2sgb2YgTlRGU19TVFJFQU1fRkxfKiBmbGFncy4gb3RoZXIgYml0cyBtdXN0IGJlCiYjNDM7ICoJCQl6ZXJvLgomIzQzOyAqIEByZXNlcnZlZDoJCU11c3QgYmUgemVyby4KJiM0MzsgKiBAYnVmZmVyOgkJU3RyZWFtIG5hbWUgZm9sbG93ZWQgYnkgc3RyZWFtIGRhdGEuCiYjNDM7ICoKJiM0MzsgKiBUaGUgc3RyZWFtIG5hbWUgaXMgdGhlIGJhcmUgc3RyZWFtIG5hbWUsIHdpdGhvdXQgdGhlIGxlYWRpbmcgJiMzOTs6JiMzOTsgb3IgdGhlCiYjNDM7ICogdHJhaWxpbmcgJiMzNDs6JERBVEEmIzM0OyBkZWNvcmF0aW9uIHVzZWQgYnkgV2luZG93cy4gQnkgZGVmYXVsdCBpdCBpcyBlbmNvZGVkIHdpdGgKJiM0MzsgKiB0aGUgbW91bnRlZCBmaWxlc3lzdGVtIE5MUy4gSWYgTlRGU19TVFJFQU1fRkxfVVRGMTYgaXMgc2V0IGluIEBmbGFncyBpdCBpcwomIzQzOyAqIHJhdyBVVEYtMTZMRSBpbnN0ZWFkLiBGb3IgcmVhZCBhbmQgd3JpdGUsIEBpb19sZW4gYnl0ZXMgb2YgZGF0YSBmb2xsb3cgdGhlCiYjNDM7ICogbmFtZS4gRm9yIHJlbW92ZSwgb25seSB0aGUgbmFtZSBpcyByZXF1aXJlZCBhbmQgQGlvX2xlbiBtdXN0IGJlIHplcm8uCiYjNDM7ICovCiYjNDM7c3RydWN0IG50ZnNfc3RyZWFtIHsKJiM0MzsJX19hbGlnbmVkX3U2NCBzdHJlYW1fb2Zmc2V0OwomIzQzOwlfX2FsaWduZWRfdTY0IGlvX2xlbjsKJiM0MzsJX19hbGlnbmVkX3U2NCBieXRlc19yZXR1cm5lZDsKJiM0MzsJX191MzIgbmFtZV9sZW47CiYjNDM7CV9fdTMyIGZsYWdzOwomIzQzOwlfX2FsaWduZWRfdTY0IHJlc2VydmVkOwomIzQzOwlfX3U4IGJ1ZmZlcltdOyAvKiBuYW1lICYjNDM7IGRhdGEgKi8KJiM0Mzt9OwomIzQzOwomIzQzOy8qCiYjNDM7ICogU2luZ2xlIHN0cmVhbSBlbnRyeSByZXR1cm5lZCBieSBOVEZTX0lPQ19MSVNUX1NUUkVBTVMuCiYjNDM7ICoKJiM0MzsgKiBAbmV4dF9lbnRyeV9vZmY6CUJ5dGUgb2Zmc2V0IGZyb20gdGhlIHN0YXJ0IG9mIHRoaXMgZW50cnkgdG8gdGhlIG5leHQKJiM0MzsgKgkJCWVudHJ5LCBvciB6ZXJvIGZvciB0aGUgbGFzdCBlbnRyeS4gQWx3YXlzIGEgbXVsdGlwbGUKJiM0MzsgKgkJCW9mIDguIENvbnN1bWVycyBtdXN0IHVzZSB0aGlzIHRvIGFkdmFuY2UgaW5zdGVhZCBvZgomIzQzOyAqCQkJY29tcHV0aW5nIHRoZSBzdHJpZGUgdGhlbXNlbHZlcywgc28gdGhlIGVudHJ5IGNhbiBncm93CiYjNDM7ICoJCQluZXcgZmllbGRzIHdpdGhvdXQgYnJlYWtpbmcgdGhlIEFCSS4KJiM0MzsgKiBAc2l6ZToJCVN0cmVhbSBkYXRhIHNpemUgaW4gYnl0ZXMuCiYjNDM7ICogQGFsbG9jX3NpemU6CQlCeXRlcyBhbGxvY2F0ZWQgZm9yIHRoZSBzdHJlYW0gKGNsdXN0ZXIgYWxpZ25lZCBmb3IKJiM0MzsgKgkJCW5vbi1yZXNpZGVudCBzdHJlYW1zKS4KJiM0MzsgKiBAbmFtZV9sZW46CQlTdHJlYW0gbmFtZSBsZW5ndGggaW4gYnl0ZXMsIG5vdCBpbmNsdWRpbmcgYSBOVUwKJiM0MzsgKgkJCXRlcm1pbmF0b3IgKG5vbmUgaXMgc3RvcmVkKS4gQ291bnRzIFVURi0xNkxFIGJ5dGVzCiYjNDM7ICoJCQl3aGVuIE5URlNfU1RSRUFNX0ZMX1VURjE2IHdhcyByZXF1ZXN0ZWQuCiYjNDM7ICogQHJlc2VydmVkOgkJTXVzdCBiZSB6ZXJvLgomIzQzOyAqIEBuYW1lOgkJQmFyZSBzdHJlYW0gbmFtZTsgTkxTIGVuY29kZWQsIG9yIHJhdyBVVEYtMTZMRSB3aGVuCiYjNDM7ICoJCQlOVEZTX1NUUkVBTV9GTF9VVEYxNiB3YXMgcmVxdWVzdGVkIChzZWUgc3RydWN0CiYjNDM7ICoJCQludGZzX3N0cmVhbSkuCiYjNDM7ICovCiYjNDM7c3RydWN0IG50ZnNfc3RyZWFtX2VudHJ5IHsKJiM0MzsJX19hbGlnbmVkX3U2NCBuZXh0X2VudHJ5X29mZjsKJiM0MzsJX19hbGlnbmVkX3U2NCBzaXplOwomIzQzOwlfX2FsaWduZWRfdTY0IGFsbG9jX3NpemU7CiYjNDM7CV9fdTMyIG5hbWVfbGVuOwomIzQzOwlfX3UzMiByZXNlcnZlZDsKJiM0MzsJX191OCBuYW1lW107CiYjNDM7fTsKJiM0MzsKJiM0MzsvKgomIzQzOyAqIG50ZnMgbGlzdCBzdHJlYW1zIGlvY3RsIHN0cnVjdHVyZS4KJiM0MzsgKgomIzQzOyAqIEBidWZmZXJfc2l6ZToJdXNlciBidWZmZXIgc2l6ZShpbikuCiYjNDM7ICogQGJ5dGVzX3JldHVybmVkOglhY3R1YWwgYnl0ZXMgd3JpdHRlbiBvciByZXF1aXJlZChvdXQpLgomIzQzOyAqIEBzdHJlYW1fY291bnQ6CW51bWJlciBvZiBzdHJlYW1zKG91dCkuCiYjNDM7ICogQGZsYWdzOgkJQml0IG1hc2sgb2YgTlRGU19TVFJFQU1fRkxfKiBmbGFncyBjb250cm9sbGluZyB0aGUKJiM0MzsgKgkJCWVuY29kaW5nIG9mIHRoZSByZXR1cm5lZCBuYW1lczsgb3RoZXIgYml0cyBtdXN0IGJlIHplcm8uCiYjNDM7ICogQHJlc2VydmVkOgkJTXVzdCBiZSB6ZXJvLgomIzQzOyAqIEBidWZmZXI6CQludGZzX3N0cmVhbV9lbnRyeSBhcnJheS4KJiM0MzsgKgomIzQzOyAqIFRoZSB2YXJpYWJsZS1sZW5ndGggZW50cmllcyBmb2xsb3cgdGhlIGhlYWRlciBpbiBAYnVmZmVyLCBlYWNoIGFsaWduZWQgb24KJiM0MzsgKiBhbiA4LWJ5dGUgYm91bmRhcnkgYW5kIGNoYWluZWQgdmlhIG50ZnNfc3RyZWFtX2VudHJ5Lm5leHRfZW50cnlfb2ZmLiBJZgomIzQzOyAqIEBidWZmZXJfc2l6ZSBpcyB0b28gc21hbGwsIG5vIGRhdGEgaXMgY29waWVkLCBAc3RyZWFtX2NvdW50IGFuZAomIzQzOyAqIEBieXRlc19yZXR1cm5lZCByZXBvcnQgdGhlIHJlcXVpcmVkIHZhbHVlcyBhbmQgdGhlIGlvY3RsIGZhaWxzIHdpdGgKJiM0MzsgKiAtRU5PU1BDLgomIzQzOyAqLwomIzQzO3N0cnVjdCBudGZzX2xpc3Rfc3RyZWFtcyB7CiYjNDM7CV9fYWxpZ25lZF91NjQgYnVmZmVyX3NpemU7CiYjNDM7CV9fYWxpZ25lZF91NjQgYnl0ZXNfcmV0dXJuZWQ7CiYjNDM7CV9fYWxpZ25lZF91NjQgc3RyZWFtX2NvdW50OwomIzQzOwlfX3UzMiBmbGFnczsKJiM0MzsJX191MzIgcmVzZXJ2ZWQ7CiYjNDM7CV9fdTggYnVmZmVyW107CiYjNDM7fTsKJiM0MzsKJiM0MzsjZGVmaW5lIE5URlNfSU9DX1NUUkVBTV9SRUFECQlfSU9XUihOVEZTX0lPQ19NQUdJQywgMSwgc3RydWN0IG50ZnNfc3RyZWFtKQomIzQzOyNkZWZpbmUgTlRGU19JT0NfU1RSRUFNX1dSSVRFCQlfSU9XUihOVEZTX0lPQ19NQUdJQywgMiwgc3RydWN0IG50ZnNfc3RyZWFtKQomIzQzOyNkZWZpbmUgTlRGU19JT0NfU1RSRUFNX1JFTU9WRQkJX0lPV1IoTlRGU19JT0NfTUFHSUMsIDMsIHN0cnVjdCBudGZzX3N0cmVhbSkKJiM0MzsjZGVmaW5lIE5URlNfSU9DX0xJU1RfU1RSRUFNUwkJX0lPV1IoTlRGU19JT0NfTUFHSUMsIDQsIHN0cnVjdCBudGZzX2xpc3Rfc3RyZWFtcykKJiM0MzsKJiM0MzsjZW5kaWYgLyogX1VBUElfTElOVVhfTlRGU19IICovCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE3OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0NzEKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOVEZTIE5hbWVkIFN0cmVhbSBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGludHJvZHVjaW5nIGlvY3RscyBmb3IgTlRGUywgc3BlY2lmaWNhbGx5IGhhbmRsaW5nIG5hbWVkIHN0cmVhbXMgb3IgQWx0ZXJuYXRlIERhdGEgU3RyZWFtcy4gSSBzZWUgd2UgaGF2ZSBgTlRGU19JT0NfU1RSRUFNX1JFQURgLCBgTlRGU19JT0NfU1RSRUFNX1dSSVRFYCwgYE5URlNfSU9DX1NUUkVBTV9SRU1PVkVgLCBhbmQgYE5URlNfSU9DX0xJU1RfU1RSRUFNU2AuIFRoYXQmIzM5O3Mgc3RhbmRhcmQgZnVuY3Rpb25hbGl0eSwgcmVhbGx5OyBpdCBjb3ZlcnMgdGhlIGJhc2ljIHJlYWQsIHdyaXRlLCByZW1vdmUsIGFuZCBsaXN0aW5nIG9wZXJhdGlvbnMuIEdvb2QuCgpUaGUgaW1wb3J0YW50IGZpbGVzIGFyZSBgZnMvbnRmcy9maWxlLmNgIHdoaWNoLCBhcyBhbiBleHBlcnQsIEkgd291bGQgZXhwZWN0IGhhbmRsZXMgYSBsb3Qgb2YgdGhlIGNvcmUgZmlsZSBvcGVyYXRpb25zLCBhbmQgYSBuZXcgaGVhZGVyLCBgaW5jbHVkZS91YXBpL2xpbnV4L250ZnMuaGAgd2hpY2ggd2lsbCBkZWZpbmUgdGhlIG5ldyBpb2N0bCBudW1iZXJzIGFuZCBzdHJ1Y3R1cmVzLiBNYWtlcyBzZW5zZS4KCkJ1dCB3YWl0IGEgbWludXRl4oCmIFRoaXMgaXMgYGZzL250ZnMvZmlsZS5jYOKApiBJcyB0aGlzIHRoZSAqb2xkKiBOVEZTIGRyaXZlciBvciB0aGUgbmV3ZXIgYG50ZnMzYD8gSSBuZWVkIHRvIGNsYXJpZnkgdGhhdCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgaXMgZ29pbmcgaW50byBhIGxlZ2FjeSBjb2RlIHBhdGggb3Igc29tZXRoaW5nIG1vcmUgbW9kZXJuLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgaWYgdGhlIG9sZCBgZnMvbnRmc2AgaXMgc3RpbGwgZXZlbiBlbmFibGVkLCBhbmQgaG93IGl04oCZcyBjb25maWd1cmVkLiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBgZ3JlcHBlcmAgdG8gc2VhcmNoIHRocm91Z2ggdGhlIEtjb25maWcgZmlsZXMgZm9yIGBOVEZTX0ZTYCBvciBhIHNpbWlsYXIgY29uZmlndXJhdGlvbiBzeW1ib2wuIFRoYXQgc2hvdWxkIGNsZWFyIHRoaW5ncyB1cCBmYXN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE3OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBOVEZTX0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbnRmcy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL250ZnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvbnRmcy9LY29uZmlnOjI6Y29uZmlnIE5URlNfRlNcbmZzL250ZnMvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7TlRGUyBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvbnRmcy9LY29uZmlnPTEzPWNvbmZpZyBOVEZTX0RFQlVHXG4tLVxuZnMvbnRmcy9LY29uZmlnLTM0LVxuZnMvbnRmcy9LY29uZmlnOjM1OmNvbmZpZyBOVEZTX0ZTX1BPU0lYX0FDTFxuZnMvbnRmcy9LY29uZmlnLTM2LVx0Ym9vbCBcJiMzNDtOVEZTIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTc6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAxMjkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOVEZTIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHdvcmtpbmcgd2l0aCB0aGUgKm9sZCogTlRGUyBkcml2ZXIsIHNwZWNpZmljYWxseSBgZnMvbnRmc2AuIEkgbmVlZCB0byByZW1lbWJlciB0aGF0IHRoaXMgbGVnYWN5IGRyaXZlciBpcyBzdGlsbCBhcm91bmQuIEl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBsaWVzIGluIGFkZGluZyBuZXcgaW9jdGxzIHRvIGBmcy9udGZzL2ZpbGUuY2AuIExldCYjMzk7cyBzZWUgd2hhdCB0aG9zZSBuZXcgaW9jdGxzIGFyZS4uLiByaWdodCwgdGhlIHBhdGNoIGFkZHM6CgoqICAgYG50ZnNfcmVhZF9uYW1lZF9zdHJlYW1gCiogICBgbnRmc193cml0ZV9uYW1lZF9zdHJlYW1gCiogICBgbnRmc19yZW1vdmVfbmFtZWRfc3RyZWFtYAoqICAgYG50ZnNfaW9jdGxfc3RyZWFtYAoqICAgYG50ZnNfaW9jdGxfbGlzdF9zdHJlYW1zYAoKTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzOiBhcmUgdGhlc2UgYWN0dWFsbHkgKnJlYWNoYWJsZSo/IEFoLCB5ZXMsIHRoZXkgYXJlLCB2aWEgYG50ZnNfaW9jdGxgLiBUaGF0IGZ1bmN0aW9uIHdvdWxkIGJlIHRoZSBgLnVubG9ja2VkX2lvY3RsYCBlbnRyeSBwb2ludCBmb3IgTlRGUyBmaWxlcywgd2hpY2ggbWFrZXMgc2Vuc2UuIEp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJIHNob3VsZCB2ZXJpZnkgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBudGZzX2lvY3RsYCBpdHNlbGYgaW4gYGZzL250ZnMvZmlsZS5jYC4gR290dGEgYmUgdGhvcm91Z2ggd2l0aCB0aGVzZSBkcml2ZXIgY2hhbmdlcywgZXNwZWNpYWxseSB3aXRoIHNvbWV0aGluZyBhcyBmdW5kYW1lbnRhbCBhcyBmaWxlIHN5c3RlbSBJL08uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTc6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bnRmc19pb2N0bCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL250ZnMvZmlsZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL250ZnMvZmlsZS5jPTc0MD1zdGF0aWMgc3NpemVfdCBudGZzX2ZpbGVfc3BsaWNlX3JlYWQoc3RydWN0IGZpbGUgKmluLCBsb2ZmX3QgKnBwb3MsXG4tLVxuZnMvbnRmcy9maWxlLmMtNzQ4LVxuZnMvbnRmcy9maWxlLmM6NzQ5OnN0YXRpYyBpbnQgbnRmc19pb2N0bF9zaHV0ZG93bihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIGFyZylcbmZzL250ZnMvZmlsZS5jLTc1MC17XG4tLVxuZnMvbnRmcy9maWxlLmMtNzYxLVxuZnMvbnRmcy9maWxlLmM6NzYyOnN0YXRpYyBpbnQgbnRmc19pb2N0bF9nZXRfdm9sdW1lX2xhYmVsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFyZylcbmZzL250ZnMvZmlsZS5jLTc2My17XG4tLVxuZnMvbnRmcy9maWxlLmMtNzg0LVxuZnMvbnRmcy9maWxlLmM6Nzg1OnN0YXRpYyBpbnQgbnRmc19pb2N0bF9zZXRfdm9sdW1lX2xhYmVsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFyZylcbmZzL250ZnMvZmlsZS5jLTc4Ni17XG4tLVxuZnMvbnRmcy9maWxlLmMtODA4LVxuZnMvbnRmcy9maWxlLmM6ODA5OnN0YXRpYyBpbnQgbnRmc19pb2N0bF9maXRyaW0oc3RydWN0IG50ZnNfdm9sdW1lICp2b2wsIHVuc2lnbmVkIGxvbmcgYXJnKVxuZnMvbnRmcy9maWxlLmMtODEwLXtcbi0tXG5mcy9udGZzL2ZpbGUuYz0xMDMxPWVudW0gbnRmc19zdHJlYW1fb3Age1xuLS1cbmZzL250ZnMvZmlsZS5jLTEwMzYtXG5mcy9udGZzL2ZpbGUuYzoxMDM3OnN0YXRpYyBsb25nIG50ZnNfaW9jdGxfc3RyZWFtKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFyZyxcbmZzL250ZnMvZmlsZS5jLTEwMzgtXHRcdFx0ICAgICAgZW51bSBudGZzX3N0cmVhbV9vcCBvcClcbi0tXG5mcy9udGZzL2ZpbGUuYy0xMTc2LVxuZnMvbnRmcy9maWxlLmM6MTE3NzpzdGF0aWMgaW50IG50ZnNfaW9jdGxfbGlzdF9zdHJlYW1zKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFyZylcbmZzL250ZnMvZmlsZS5jLTExNzgte1xuLS1cbmZzL250ZnMvZmlsZS5jLTEzNDItXG5mcy9udGZzL2ZpbGUuYzoxMzQzOmxvbmcgbnRmc19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG5mcy9udGZzL2ZpbGUuYy0xMzQ0LXtcbi0tXG5mcy9udGZzL2ZpbGUuYy0xMzQ2LVx0Y2FzZSBGU19JT0NfU0hVVERPV046XG5mcy9udGZzL2ZpbGUuYzoxMzQ3Olx0XHRyZXR1cm4gbnRmc19pb2N0bF9zaHV0ZG93bihmaWxlX2lub2RlKGZpbHApLVx1MDAzZWlfc2IsIGFyZyk7XG5mcy9udGZzL2ZpbGUuYy0xMzQ4LVx0Y2FzZSBGU19JT0NfR0VURlNMQUJFTDpcbmZzL250ZnMvZmlsZS5jOjEzNDk6XHRcdHJldHVybiBudGZzX2lvY3RsX2dldF92b2x1bWVfbGFiZWwoZmlscCwgYXJnKTtcbmZzL250ZnMvZmlsZS5jLTEzNTAtXHRjYXNlIEZTX0lPQ19TRVRGU0xBQkVMOlxuZnMvbnRmcy9maWxlLmM6MTM1MTpcdFx0cmV0dXJuIG50ZnNfaW9jdGxfc2V0X3ZvbHVtZV9sYWJlbChmaWxwLCBhcmcpO1xuZnMvbnRmcy9maWxlLmMtMTM1Mi1cdGNhc2UgRklUUklNOlxuZnMvbnRmcy9maWxlLmM6MTM1MzpcdFx0cmV0dXJuIG50ZnNfaW9jdGxfZml0cmltKE5URlNfU0IoZmlsZV9pbm9kZShmaWxwKS1cdTAwM2VpX3NiKSwgYXJnKTtcbmZzL250ZnMvZmlsZS5jLTEzNTQtXHRjYXNlIE5URlNfSU9DX1NUUkVBTV9SRUFEOlxuZnMvbnRmcy9maWxlLmM6MTM1NTpcdFx0cmV0dXJuIG50ZnNfaW9jdGxfc3RyZWFtKGZpbHAsIGFyZywgTlRGU19TVFJFQU1fT1BfUkVBRCk7XG5mcy9udGZzL2ZpbGUuYy0xMzU2LVx0Y2FzZSBOVEZTX0lPQ19TVFJFQU1fV1JJVEU6XG5mcy9udGZzL2ZpbGUuYzoxMzU3Olx0XHRyZXR1cm4gbnRmc19pb2N0bF9zdHJlYW0oZmlscCwgYXJnLCBOVEZTX1NUUkVBTV9PUF9XUklURSk7XG5mcy9udGZzL2ZpbGUuYy0xMzU4LVx0Y2FzZSBOVEZTX0lPQ19TVFJFQU1fUkVNT1ZFOlxuZnMvbnRmcy9maWxlLmM6MTM1OTpcdFx0cmV0dXJuIG50ZnNfaW9jdGxfc3RyZWFtKGZpbHAsIGFyZywgTlRGU19TVFJFQU1fT1BfUkVNT1ZFKTtcbmZzL250ZnMvZmlsZS5jLTEzNjAtXHRjYXNlIE5URlNfSU9DX0xJU1RfU1RSRUFNUzpcbmZzL250ZnMvZmlsZS5jOjEzNjE6XHRcdHJldHVybiBudGZzX2lvY3RsX2xpc3Rfc3RyZWFtcyhmaWxwLCBhcmcpO1xuZnMvbnRmcy9maWxlLmMtMTM2Mi1cdGRlZmF1bHQ6XG4tLVxuZnMvbnRmcy9maWxlLmM9MTM2OD1sb25nIG50ZnNfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLFxuLS1cbmZzL250ZnMvZmlsZS5jLTEzNzAte1xuZnMvbnRmcy9maWxlLmM6MTM3MTpcdHJldHVybiBudGZzX2lvY3RsKGZpbHAsIGNtZCwgKHVuc2lnbmVkIGxvbmcpY29tcGF0X3B0cihhcmcpKTtcbmZzL250ZnMvZmlsZS5jLTEzNzItfVxuLS1cbmZzL250ZnMvZmlsZS5jPTE2ODQ9Y29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBudGZzX2ZpbGVfb3BzID0ge1xuLS1cbmZzL250ZnMvZmlsZS5jLTE2OTMtXHQuc3BsaWNlX3dyaXRlXHQ9IGl0ZXJfZmlsZV9zcGxpY2Vfd3JpdGUsXG5mcy9udGZzL2ZpbGUuYzoxNjk0Olx0LnVubG9ja2VkX2lvY3RsXHQ9IG50ZnNfaW9jdGwsXG5mcy9udGZzL2ZpbGUuYy0xNjk1LSNpZmRlZiBDT05GSUdfQ09NUEFUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTc6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4NDEKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE5URlMgSU9DVExzKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoZXNlIE5URlMgSU9DVExzLiBGaXJzdCB0aG91Z2h0IGlzLCB5ZWFoLCB0aGUgSU9DVEwgZW50cnkgcG9pbnRzICphcmUqIGRlZmluaXRlbHkgYWNjZXNzaWJsZSwgc28gbGV0JiMzOTtzIHN0YXJ0IHRoZXJlLiBSaWdodCwgYG50ZnNfaW9jdGxgIGlzIHRoZSBpbml0aWFsIHBvaW50IG9mIGVudHJ5LiAKCk5vdywgd2hpY2ggZnVuY3Rpb25zIGFyZSB0aGUga2V5IHBsYXllcnMgaW4gdGhpcyBhcmVhPyBJIHRoaW5rIGl0IGJvaWxzIGRvd24gdG86IGBudGZzX2lvY3RsX3N0cmVhbWAsIGBudGZzX2lvY3RsX2xpc3Rfc3RyZWFtc2AsIGBudGZzX3JlYWRfbmFtZWRfc3RyZWFtYCwgYG50ZnNfd3JpdGVfbmFtZWRfc3RyZWFtYCwgYW5kIGBudGZzX3JlbW92ZV9uYW1lZF9zdHJlYW1gLgoKV2FpdCBhIG1pbnV0ZS4uLiBib3RoIGBudGZzX2lvY3RsX3N0cmVhbWAgYW5kIGBudGZzX2lvY3RsX2xpc3Rfc3RyZWFtc2AgYXJlIHN0YXRpYyBmdW5jdGlvbnMsIHdoaWxlIGBudGZzX2lvY3RsYCBpdHNlbGYgaXNuJiMzOTt0LiBJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8gc2VlIGlmIGBudGZzX2lvY3RsYCBpcyBleHBvcnRlZCBhcyBhIHN5bWJvbCBvciBpZiBpdCYjMzk7cyBvbmx5IGNhbGxlZCB3aXRoaW4gYG50ZnNfZmlsZV9vcHNgLiBBbHJpZ2h0LCBpdCYjMzk7cyB1c2VkIHdpdGhpbiBgbnRmc19maWxlX29wc2AuIEkgc2hvdWxkIGJlIGFibGUgdG8gc3BlY2lmeSBgbnRmc19pb2N0bGAgYXMgYSBmb2N1cyBzeW1ib2wuCgpDYW4gSSBzcGVjaWZ5IGBudGZzX2lvY3RsX3N0cmVhbWAgZGlyZWN0bHk/IFNpbmNlIGl0JiMzOTtzIHN0YXRpYywgaXQgbWlnaHQgYmUgaW5saW5lZCBkdXJpbmcgY29tcGlsYXRpb24sIG1lYW5pbmcgaXQgbWlnaHQgbm90IGhhdmUgaXRzIG93biBzeW1ib2wuIEFjdHVhbGx5LCB3YWl0IGEgbWludXRlLCBgbnRmc19pb2N0bF9zdHJlYW1gIGlzIGEgZmFpcmx5IHNpemFibGUgZnVuY3Rpb24uIEl0IG1pZ2h0IG5vdCBiZSBpbmxpbmVkLiBCdXQgdG8gYmUgc2FmZSwgSSYjMzk7bSBnb2luZyB0byBpbmNsdWRlIGBudGZzX2lvY3RsYCBhbG9uZyB3aXRoIGl0LgoKQWgsIGFuZCB0aG9zZSBvdGhlciBzdHJlYW0gZnVuY3Rpb25zIOKAkyBgbnRmc19yZWFkX25hbWVkX3N0cmVhbWAsIGBudGZzX3dyaXRlX25hbWVkX3N0cmVhbWAsIGFuZCBgbnRmc19yZW1vdmVfbmFtZWRfc3RyZWFtYCDigJMgdGhvc2UgYXJlIGFsc28gc3RhdGljLiBMZXQgbWUganVzdCBjb25maXJtIHRoYXQuIFllcCwgdGhleSBhcmUuIFNvIHJlYWxseSwgbXkgZm9jdXMgc2hvdWxkIGJlIG9uIGBudGZzX2lvY3RsYCB0aGVuLiBUaGF0JiMzOTtzIHRoZSBrZXkgZW50cnkgcG9pbnQuCgpPa2F5LCBsZXQmIzM5O3Mgc3dpdGNoIGdlYXJzIGZvciBhIG1vbWVudCBhbmQgc2VlIHdoaWNoIGNvbmZpZyBvcHRpb24gZW5hYmxlcyB0aGUgTlRGUyBkcml2ZXIuIEl0JiMzOTtzIHRoZSBgTlRGU19GU2AgY29uZmlnLiBXYWl0LCBkb2VzIGBOVEZTX1JXYCBleGlzdD8gSXQmIzM5O3MgdGltZSB0byBjaGVjayB0aGUgYGZzL250ZnMvS2NvbmZpZ2AgZmlsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxNzoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBOVEZTX1JXJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbnRmcy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxNzoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjcxNQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgTlRGUyBXcml0ZSBTdXBwb3J0IENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIEdpdmVuIHRoZSB0YXNrIGF0IGhhbmQsIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgTlRGUyB3aXRoaW4gdGhlIGtlcm5lbC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHdyaXRlIHN1cHBvcnQuIFdoZXJlIHdvdWxkIHRoYXQgYmUgZGVmaW5lZD8gTXkgZ3V0IHRlbGxzIG1lIGBmcy9udGZzL0tjb25maWdgIGlzIHRoZSBsaWtlbHkgcGxhY2UuIEl0JiMzOTtzIHRoZSBzdGFuZGFyZCBsb2NhdGlvbiBmb3IgZmlsZXN5c3RlbS1zcGVjaWZpYyBjb25maWd1cmF0aW9uLiBUaW1lIHRvIGNoZWNrIGlmIHRoZSByZXF1aXNpdGUgb3B0aW9ucyBmb3IgcmVhZC93cml0ZSBmdW5jdGlvbmFsaXR5IGFyZSBleHBvc2VkLCBhbG9uZyB3aXRoIGFueSByZWxldmFudCBkZXBlbmRlbmNpZXMgb3IgcG90ZW50aWFsIGNhdmVhdHMuIEl0JiMzOTtzIGxpa2VseSB0aGF0IHdyaXRlIHN1cHBvcnQsIGlmIHByZXNlbnQsIG1pZ2h0IGJlIGNvbnRpbmdlbnQgb24gY2VydGFpbiBrZXJuZWwgZmVhdHVyZXMgb3IgZXh0ZXJuYWwgbGlicmFyaWVzLiBUaGlzIGluaXRpYWwgZXhwbG9yYXRpb24gd2lsbCBndWlkZSBteSBuZXh0IHN0ZXBzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxNzoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTlRGU18mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9udGZzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbnRmcy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9udGZzL0tjb25maWc6Mjpjb25maWcgTlRGU19GU1xuZnMvbnRmcy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtOVEZTIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDtcbi0tXG5mcy9udGZzL0tjb25maWctMTItXG5mcy9udGZzL0tjb25maWc6MTM6Y29uZmlnIE5URlNfREVCVUdcbmZzL250ZnMvS2NvbmZpZy0xNC1cdGJvb2wgXCYjMzQ7TlRGUyBkZWJ1Z2dpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbmZzL250ZnMvS2NvbmZpZy0zNC1cbmZzL250ZnMvS2NvbmZpZzozNTpjb25maWcgTlRGU19GU19QT1NJWF9BQ0xcbmZzL250ZnMvS2NvbmZpZy0zNi1cdGJvb2wgXCYjMzQ7TlRGUyBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxNzoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzEwOQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkV4YW1pbmluZyBOVEZTIFdyaXRlIFN1cHBvcnQqKgoKQWxyaWdodCwgaGFuZyBvbiBhIHNlY29uZC4uLiBgTlRGU19SV2AgaXMgcG9pbnRpbmcgdG8gdGhlICpuZXcqIGBmcy9udGZzM2AgZHJpdmVyLCBub3QgdGhlIGxlZ2FjeSBgZnMvbnRmc2A/IEludGVyZXN0aW5nLiBJIG5lZWQgdG8gcXVpY2tseSBjb25maXJtIHNvbWV0aGluZyBhYm91dCB3cml0ZSBjYXBhYmlsaXRpZXMgaGVyZS4gSXMgd3JpdGUgc3VwcG9ydCBmb3IgdGhlIG9sZGVyIGBmcy9udGZzYCBkcml2ZXIgZW5hYmxlZCBieSBkZWZhdWx0LCBvciBpcyBpdCBnYXRlZCBiZWhpbmQgYSBzZXBhcmF0ZSBjb25maWd1cmF0aW9uIG9wdGlvbiwgbGlrZSBgQ09ORklHX05URlNfV1JJVEVgPyBJIG5lZWQgdG8gY2hlY2sgdGhlIGtlcm5lbCBjb25maWcgb3B0aW9ucyB0byBnZXQgYSBwcm9wZXIgaGFuZGxlIG9uIHRoZSBjdXJyZW50IGxhbmRzY2FwZS4gVGhpcyBpcyBsaWtlbHkgZHVlIHRvIHRoZSBuZWVkIGZvciBhIHN0YWJsZSBhbmQgbW9yZSBmZWF0dXJlLXJpY2ggc29sdXRpb24gd2l0aCBudGZzMy4gS25vd2luZyB0aGUgd3JpdGUgc3VwcG9ydCBzdGF0dXMgb2YgYm90aCBkcml2ZXJzIHdpbGwgaW5mb3JtIHRoZSBmdXR1cmUgZGlyZWN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxNzoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBOVEZTX1JXJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbnRmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxNzoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzM2NgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgTlRGUyBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBpbnRvIHRoZSBOVEZTIGZpbGUgc3lzdGVtIGNvbmZpZ3VyYXRpb24gYW5kLCBiYXNlZCBvbiB3aGF0IEkgc2VlIGluIGBmcy9udGZzL0tjb25maWdgLCBpdCBzZWVtcyBwcmV0dHkgbGltaXRlZC4gSSYjMzk7bSBvbmx5IHNlZWluZyBvcHRpb25zIGZvciBgTlRGU19GU2AsIGBOVEZTX0RFQlVHYCwgYW5kIGBOVEZTX0ZTX1BPU0lYX0FDTGAuIFRoYXQgZmVlbHMgc3BhcnNlLCByaWdodD8gSSB3YXMgZXhwZWN0aW5nIG1vcmUgZ3JhbnVsYXIgY29udHJvbCBoZXJlLgoKTm93LCBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHJlYWQtd3JpdGUgY2FwYWJpbGl0aWVzIGFyZSBleHBsaWNpdGx5IGNvbmZpZ3VyZWQuIExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGBmcy9udGZzL0tjb25maWdgIGZvciB0aGUgYE5URlNfUldgIG9wdGlvbi4gSSBjYW4mIzM5O3QgYmUgc3VyZSwgYnV0IEkgZmVlbCBsaWtlIEkmIzM5O20gbWlzc2luZyBzb21ldGhpbmcgaW1wb3J0YW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxNzoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1JXJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbnRmcy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTc6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM2MTQKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk5hdmlnYXRpbmcgdGhlIE5URlMgTGFuZHNjYXBlKioKClJpZ2h0LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGUgTlRGUyBkcml2ZXIgc2l0dWF0aW9uLCB0cnlpbmcgdG8gZmlndXJlIG91dCBzb21lIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSByZW1lbWJlciBzZWVpbmcgc29tZXRoaW5nIGFib3V0IHJlYWQtd3JpdGUgY2FwYWJpbGl0aWVzLi4uIGFuZCBpbml0aWFsbHksIEkgd2FzIGxvb2tpbmcgYXQgdGhlIG9sZCBgZnMvbnRmcy9LY29uZmlnYCwgYnV0ICp0aGF0JiMzOTtzKiBub3QgcXVpdGUgcmlnaHQuIEhtbSwgbm8gYE5URlNfUldgIGRlZmluZWQgdGhlcmUuIER1aCwgb2YgY291cnNlISBUaGF0JiMzOTtzIGxlZ2FjeSBjb2RlLiBJIG5lZWQgdG8gYmUgaW4gdGhlIG5ldyBgbnRmczNgIGRyaXZlciBub3cuIExldCYjMzk7cyBwaXZvdCBhbmQgY2hlY2sgYGZzL250ZnMzL0tjb25maWdgIGluc3RlYWQuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyAqc2hvdWxkKiByZXNpZGUsIGFuZCB3aGVyZSBJIHNob3VsZCBmaW5kIHRoZSBzZXR0aW5ncyBmb3IgcmVhZC13cml0ZSBzdXBwb3J0LCBub3cgdGhhdCB0aGUgcmV3cml0ZSBpcyBmdWxseSBpbnRlZ3JhdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxNzoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTlRGUzNfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9udGZzMy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL250ZnMzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL250ZnMzL0tjb25maWc6Mjpjb25maWcgTlRGUzNfRlNcbmZzL250ZnMzL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O05URlMgUmVhZC1Xcml0ZSBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvbnRmczMvS2NvbmZpZz0yOD1jb25maWcgTlRGUzNfTFpYX1hQUkVTU1xuLS1cbmZzL250ZnMzL0tjb25maWctMzctXG5mcy9udGZzMy9LY29uZmlnOjM4OmNvbmZpZyBOVEZTM19GU19QT1NJWF9BQ0xcbmZzL250ZnMzL0tjb25maWctMzktXHRib29sIFwmIzM0O05URlMgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTc6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQwNDUKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyB0aGUgTlRGUyBQYXRjaCoqCgpBbHJpZ2h0LCB0aGUgcGF0Y2ggbGFuZGVkIGluIGBmcy9udGZzL2ZpbGUuY2AuIFRoYXQmIzM5O3MgYSBrZXkgZmlsZSwgYnV0IEkgbmVlZCBhIHF1aWNrIHNhbml0eSBjaGVjayBiZWZvcmUgZGl2aW5nIGRlZXAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjb25maXJtIHdoZXJlIHdyaXRlIHN1cHBvcnQgZXhpc3RzLCBsZXQmIzM5O3MgbWFrZSBzdXJlIHRoYXQgdGhhdCBpcyBwcmVzZW50IHdpdGhpbiBgZnMvbnRmcy9LY29uZmlnYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTc6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt3cml0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL250ZnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE3OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MjE2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKktjb25maWcgRmlsZSBFeGFtaW5hdGlvbioqCgpIbW0sIHN0cmFuZ2UuIEkgd2FzIGV4cGVjdGluZyB0byBmaW5kIHNvbWV0aGluZyByZWxhdGVkIHRvICYjMzQ7d3JpdGUmIzM0OyBmdW5jdGlvbmFsaXR5IGluIGBmcy9udGZzL0tjb25maWdgLCBidXQgYSBxdWljayBzY2FuIHN1Z2dlc3RzIGl0JiMzOTtzIG5vdCBwcmVzZW50LiBPa2F5LCBJIG5lZWQgdG8gYmUgdGhvcm91Z2guIEkgY2FuJiMzOTt0IGp1c3QgYXNzdW1lIEkmIzM5O20gcmlnaHQsIGV2ZW4gd2l0aCBteSBleHBlcmllbmNlLiBJJiMzOTtsbCBuZWVkIHRvIGdvIGJhY2sgYW5kIG1ldGhvZGljYWxseSBjaGVjayB0aGUgZW50aXJlIGZpbGUgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgdGhlIGtleXdvcmQgaXNuJiMzOTt0IHVzZWQuIEkgZG9uJiMzOTt0IHdhbnQgdG8gbWlzcyBhbnl0aGluZyBzdWJ0bGUgaGlkZGVuIHdpdGhpbiBhIGRlcGVuZGVuY3kgc3RhdGVtZW50IG9yIGEgY29tbWVudC4gR290dGEgYmUgbWV0aWN1bG91cyBoZXJlLiBUaGlzIEtjb25maWcgZmlsZSBpcyBhIGNydWNpYWwgZWxlbWVudCBvZiBmaWxlc3lzdGVtIGNvbmZpZ3VyYXRpb24sIGFuZCBtaXNzaW5nIGEgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb24gY2FuIGludHJvZHVjZSBpc3N1ZXMgZG93biB0aGUgbGluZSwgc28gY2FyZWZ1bCBpbnNwZWN0aW9uIGlzIHBhcmFtb3VudC4gSSYjMzk7bGwgdGFrZSBteSB0aW1lIGFuZCBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE3OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvbnRmcy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBOVEZTX0ZTXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtOVEZTIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDtcbiAgIDQ6XHRcdHNlbGVjdCBOTFNcbiAgIDU6XHRcdHNlbGVjdCBGU19JT01BUFxuICAgNjpcdFx0aGVscFxuICAgNzpcdFx0ICBOVEZTIGlzIHRoZSBmaWxlIHN5c3RlbSBvZiBNaWNyb3NvZnQgV2luZG93cyBOVCwgMjAwMCwgWFAgYW5kIDIwMDMuXG4gICA4Olx0XHQgIFRoaXMgYWxsb3dzIHlvdSB0byBtb3VudCBkZXZpY2VzIGZvcm1hdHRlZCB3aXRoIHRoZSBudGZzIGZpbGUgc3lzdGVtLlxuICAgOTpcdFxuICAxMDpcdFx0ICBUbyBjb21waWxlIHRoaXMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWRcbiAgMTE6XHRcdCAgbnRmcy5cbiAgMTI6XHRcbiAgMTM6XHRjb25maWcgTlRGU19ERUJVR1xuICAxNDpcdFx0Ym9vbCBcJiMzNDtOVEZTIGRlYnVnZ2luZyBzdXBwb3J0XCYjMzQ7XG4gIDE1Olx0XHRkZXBlbmRzIG9uIE5URlNfRlNcbiAgMTY6XHRcdGhlbHBcbiAgMTc6XHRcdCAgSWYgeW91IGFyZSBleHBlcmllbmNpbmcgYW55IHByb2JsZW1zIHdpdGggdGhlIE5URlMgZmlsZSBzeXN0ZW0sIHNheVxuICAxODpcdFx0ICBZIGhlcmUuICBUaGlzIHdpbGwgcmVzdWx0IGluIGFkZGl0aW9uYWwgY29uc2lzdGVuY3kgY2hlY2tzIHRvIGJlXG4gIDE5Olx0XHQgIHBlcmZvcm1lZCBieSB0aGUgZHJpdmVyIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBkZWJ1Z2dpbmcgbWVzc2FnZXMgdG9cbiAgMjA6XHRcdCAgYmUgd3JpdHRlbiB0byB0aGUgc3lzdGVtIGxvZy4gIE5vdGUgdGhhdCBkZWJ1Z2dpbmcgbWVzc2FnZXMgYXJlXG4gIDIxOlx0XHQgIGRpc2FibGVkIGJ5IGRlZmF1bHQuICBUbyBlbmFibGUgdGhlbSwgc3VwcGx5IHRoZSBvcHRpb24gZGVidWdfbXNncz0xXG4gIDIyOlx0XHQgIGF0IHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lIHdoZW4gYm9vdGluZyB0aGUga2VybmVsIG9yIGFzIGFuIG9wdGlvblxuICAyMzpcdFx0ICB0byBpbnNtb2Qgd2hlbiBsb2FkaW5nIHRoZSBudGZzIG1vZHVsZS4gIE9uY2UgdGhlIGRyaXZlciBpcyBhY3RpdmUsXG4gIDI0Olx0XHQgIHlvdSBjYW4gZW5hYmxlIGRlYnVnZ2luZyBtZXNzYWdlcyBieSBkb2luZyAoYXMgcm9vdCk6XG4gIDI1Olx0XHQgIGVjaG8gMSBcdTAwM2UgL3Byb2Mvc3lzL2ZzL250ZnMtZGVidWdcbiAgMjY6XHRcdCAgUmVwbGFjaW5nIHRoZSBcJiMzNDsxXCYjMzQ7IHdpdGggXCYjMzQ7MFwmIzM0OyB3b3VsZCBkaXNhYmxlIGRlYnVnIG1lc3NhZ2VzLlxuICAyNzpcdFxuICAyODpcdFx0ICBJZiB5b3UgbGVhdmUgZGVidWdnaW5nIG1lc3NhZ2VzIGRpc2FibGVkLCB0aGlzIHJlc3VsdHMgaW4gbGl0dGxlXG4gIDI5Olx0XHQgIG92ZXJoZWFkLCBidXQgZW5hYmxpbmcgZGVidWcgbWVzc2FnZXMgcmVzdWx0cyBpbiB2ZXJ5IHNpZ25pZmljYW50XG4gIDMwOlx0XHQgIHNsb3dkb3duIG9mIHRoZSBzeXN0ZW0uXG4gIDMxOlx0XG4gIDMyOlx0XHQgIFdoZW4gcmVwb3J0aW5nIGJ1Z3MsIHBsZWFzZSB0cnkgdG8gaGF2ZSBhdmFpbGFibGUgYSBmdWxsIGR1bXAgb2ZcbiAgMzM6XHRcdCAgZGVidWdnaW5nIG1lc3NhZ2VzIHdoaWxlIHRoZSBtaXNiZWhhdmlvdXIgd2FzIG9jY3VycmluZy5cbiAgMzQ6XHRcbiAgMzU6XHRjb25maWcgTlRGU19GU19QT1NJWF9BQ0xcbiAgMzY6XHRcdGJvb2wgXCYjMzQ7TlRGUyBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1wmIzM0O1xuICAzNzpcdFx0ZGVwZW5kcyBvbiBOVEZTX0ZTXG4gIDM4Olx0XHRzZWxlY3QgRlNfUE9TSVhfQUNMXG4gIDM5Olx0XHRoZWxwXG4gIDQwOlx0XHQgIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzIChBQ0xzKSBzdXBwb3J0IGFkZGl0aW9uYWwgYWNjZXNzIHJpZ2h0c1xuICA0MTpcdFx0ICBmb3IgdXNlcnMgYW5kIGdyb3VwcyBiZXlvbmQgdGhlIHN0YW5kYXJkIG93bmVyL2dyb3VwL3dvcmxkIHNjaGVtZS5cbiAgNDI6XHRcbiAgNDM6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBBQ0wgc3VwcG9ydCBmb3IgbnRmcywgcHJvdmlkaW5nIGZ1bmN0aW9uYWwgcGFyaXR5XG4gIDQ0Olx0XHQgIHdpdGggbnRmczMgZHJpdmllci5cbiAgNDU6XHRcbiAgNDY6XHRcdCAgTk9URTogdGhpcyBpcyBsaW51eCBvbmx5IGZlYXR1cmUuIFdpbmRvd3Mgd2lsbCBpZ25vcmUgdGhlc2UgQUNMcy5cbiAgNDc6XHRcbiAgNDg6XHRcdCAgSWYgeW91IGRvbiYjMzk7dCBrbm93IHdoYXQgQWNjZXNzIENvbnRyb2wgTGlzdHMgYXJlLCBzYXkgTi5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTc6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxNzUKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgTlRGUyBMYW5kc2NhcGUqKgoKSG1tLCBpbnRlcmVzdGluZy4gSXQgc2VlbXMgbGlrZSBgZnMvbnRmc2AgaGFzIHdyaXRlIHN1cHBvcnQgZW5hYmxlZCByaWdodCBvdXQgb2YgdGhlIGJveCBub3cuIFRoYXQmIzM5O3MgYSBkZXBhcnR1cmUgZnJvbSBob3cgdGhpbmdzIHVzZWQgdG8gYmUuIEkgc2VlbSB0byByZWNhbGwgdGhhdCBpbiBlYXJsaWVyIGtlcm5lbHMsIHRoZSBOVEZTIGZpbGVzeXN0ZW0gbW9kdWxlIGhhZCBhIGBOVEZTX1JXYCBmbGFnLi4ucmlnaHQ/IFdhcyBpdCBkcm9wcGVkLCBvciBwZXJoYXBzIG1lcmdlZCBpbnRvIHNvbWV0aGluZyBlbHNlPyBJdCYjMzk7cyBiZWVuIGEgd2hpbGUgc2luY2UgSSBoYWQgdG8gcmVhbGx5IGRpZyBpbnRvIHRoaXMgcGFydGljdWxhciBiaXQgb2Yga2VybmVsIGNvZGUuIEJlc3Qgd2F5IHRvIGZpZ3VyZSBvdXQgd2hhdCYjMzk7cyBjaGFuZ2VkIGlzIHRvIGdvIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2UuIExldCBtZSB0YWtlIGEgbG9vayBhdCB0aGUgYGZzL250ZnMvTWFrZWZpbGVgIGFuZCBzZWUgaWYgdGhlIGNsdWVzIGFyZSBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTc6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9udGZzL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHRcbiAgIDM6XHRvYmotJChDT05GSUdfTlRGU19GUykgJiM0Mzs9IG50ZnMub1xuICAgNDpcdFxuICAgNTpcdG50ZnMteSA6PSBhb3BzLm8gYXR0cmliLm8gY29sbGF0ZS5vIGRpci5vIGZpbGUubyBpbmRleC5vIGlub2RlLm8gXFxcbiAgIDY6XHRcdCAgbWZ0Lm8gbXN0Lm8gbmFtZWkubyBydW5saXN0Lm8gc3VwZXIubyB1bmlzdHIubyBhdHRybGlzdC5vIGVhLm8gXFxcbiAgIDc6XHRcdCAgdXBjYXNlLm8gYml0bWFwLm8gbGNuYWxsb2MubyBsb2dmaWxlLm8gcmVwYXJzZS5vIGNvbXByZXNzLm8gXFxcbiAgIDg6XHRcdCAgaW9tYXAubyBkZWJ1Zy5vIHN5c2N0bC5vIG9iamVjdF9pZC5vIGJkZXYtaW8ub1xuICAgOTpcdFxuICAxMDpcdGNjZmxhZ3MtJChDT05GSUdfTlRGU19ERUJVRykgJiM0Mzs9IC1EREVCVUdcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTc6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU2NDAKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBOVEZTOiBBIEZvY3VzZWQgQXBwcm9hY2gqKgoKQWxyaWdodCwgaXQgbG9va3MgbGlrZSBgTlRGU19GU2AgaXMgdGhlIG9ubHkgY29uZmlndXJhdGlvbiBvcHRpb24gSSBuZWVkIHRvIGNvbnNpZGVyIGZvciB0aGlzLiBTdHJhaWdodGZvcndhcmQgZW5vdWdoLiBCdXQgaG9sZCBvbiwgdGhpcyBwYXRjaCBpcyBpbnRyb2R1Y2luZyBpb2N0bHMgd2l0aGluIGBmcy9udGZzL2ZpbGUuY2AuIExldCYjMzk7cyBzZWUuLi4gd2UmIzM5O3ZlIGdvdCBgTlRGU19JT0NfU1RSRUFNX1JFQURgLCBgTlRGU19JT0NfU1RSRUFNX1dSSVRFYCwgYE5URlNfSU9DX1NUUkVBTV9SRU1PVkVgLCBhbmQgYE5URlNfSU9DX0xJU1RfU1RSRUFNU2AuIEludGVyZXN0aW5nLiBUaGVzZSBkZWZpbml0ZWx5IHdhcnJhbnQgYSBjbG9zZXIgbG9vayB3aXRoIGZ1enppbmcuCgpNeSBwcmltYXJ5IGZvY3VzIGhlcmUgd2lsbCBiZSBgbnRmc19pb2N0bGAuIEl0IGFwcGVhcnMgdG8gYmUgdGhlIGVudHJ5IHBvaW50IGZvciBoYW5kbGluZyB0aGVzZSBuZXcgaW9jdGxzLiBMZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBjb2RlIGRpZmYgcXVpY2tseSB0byBjb25maXJtIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zLiBPa2F5LCBgbnRmc19yZWFkX25hbWVkX3N0cmVhbWAsIGBudGZzX3dyaXRlX25hbWVkX3N0cmVhbWAsIGBudGZzX3JlbW92ZV9uYW1lZF9zdHJlYW1gLCBgbnRmc19pb2N0bF9zdHJlYW1gLCBhbmQgYG50ZnNfaW9jdGxfbGlzdF9zdHJlYW1zYCBhcmUgYWxsIHN0YXRpYyBoZWxwZXJzLiBKdXN0IGBudGZzX2lvY3RsYCBpcyBub24tc3RhdGljLgoKTm93LCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgYG50ZnNfaW9jdGxgIGlzIGFjdHVhbGx5IGV4cG9ydGVkIGFuZCB1c2VkIG91dHNpZGUgb2YgYGZzL250ZnMvZmlsZS5jYC4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCBmdXp6aW5nIHBvdGVudGlhbCBsaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxNzoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtudGZzX2lvY3RsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbnRmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbnRmcy9kaXIuYz0xMTk1PWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbnRmc19kaXJfb3BzID0ge1xuLS1cbmZzL250ZnMvZGlyLmMtMTIwMS1cdC5yZWxlYXNlXHQ9IG50ZnNfZGlyX3JlbGVhc2UsXG5mcy9udGZzL2Rpci5jOjEyMDI6XHQudW5sb2NrZWRfaW9jdGxcdD0gbnRmc19pb2N0bCxcbmZzL250ZnMvZGlyLmMtMTIwMy0jaWZkZWYgQ09ORklHX0NPTVBBVFxuLS1cbmZzL250ZnMvZmlsZS5jPTc0MD1zdGF0aWMgc3NpemVfdCBudGZzX2ZpbGVfc3BsaWNlX3JlYWQoc3RydWN0IGZpbGUgKmluLCBsb2ZmX3QgKnBwb3MsXG4tLVxuZnMvbnRmcy9maWxlLmMtNzQ4LVxuZnMvbnRmcy9maWxlLmM6NzQ5OnN0YXRpYyBpbnQgbnRmc19pb2N0bF9zaHV0ZG93bihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIGFyZylcbmZzL250ZnMvZmlsZS5jLTc1MC17XG4tLVxuZnMvbnRmcy9maWxlLmMtNzYxLVxuZnMvbnRmcy9maWxlLmM6NzYyOnN0YXRpYyBpbnQgbnRmc19pb2N0bF9nZXRfdm9sdW1lX2xhYmVsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFyZylcbmZzL250ZnMvZmlsZS5jLTc2My17XG4tLVxuZnMvbnRmcy9maWxlLmMtNzg0LVxuZnMvbnRmcy9maWxlLmM6Nzg1OnN0YXRpYyBpbnQgbnRmc19pb2N0bF9zZXRfdm9sdW1lX2xhYmVsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFyZylcbmZzL250ZnMvZmlsZS5jLTc4Ni17XG4tLVxuZnMvbnRmcy9maWxlLmMtODA4LVxuZnMvbnRmcy9maWxlLmM6ODA5OnN0YXRpYyBpbnQgbnRmc19pb2N0bF9maXRyaW0oc3RydWN0IG50ZnNfdm9sdW1lICp2b2wsIHVuc2lnbmVkIGxvbmcgYXJnKVxuZnMvbnRmcy9maWxlLmMtODEwLXtcbi0tXG5mcy9udGZzL2ZpbGUuYz0xMDMxPWVudW0gbnRmc19zdHJlYW1fb3Age1xuLS1cbmZzL250ZnMvZmlsZS5jLTEwMzYtXG5mcy9udGZzL2ZpbGUuYzoxMDM3OnN0YXRpYyBsb25nIG50ZnNfaW9jdGxfc3RyZWFtKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFyZyxcbmZzL250ZnMvZmlsZS5jLTEwMzgtXHRcdFx0ICAgICAgZW51bSBudGZzX3N0cmVhbV9vcCBvcClcbi0tXG5mcy9udGZzL2ZpbGUuYy0xMTc2LVxuZnMvbnRmcy9maWxlLmM6MTE3NzpzdGF0aWMgaW50IG50ZnNfaW9jdGxfbGlzdF9zdHJlYW1zKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFyZylcbmZzL250ZnMvZmlsZS5jLTExNzgte1xuLS1cbmZzL250ZnMvZmlsZS5jLTEzNDItXG5mcy9udGZzL2ZpbGUuYzoxMzQzOmxvbmcgbnRmc19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG5mcy9udGZzL2ZpbGUuYy0xMzQ0LXtcbi0tXG5mcy9udGZzL2ZpbGUuYy0xMzQ2LVx0Y2FzZSBGU19JT0NfU0hVVERPV046XG5mcy9udGZzL2ZpbGUuYzoxMzQ3Olx0XHRyZXR1cm4gbnRmc19pb2N0bF9zaHV0ZG93bihmaWxlX2lub2RlKGZpbHApLVx1MDAzZWlfc2IsIGFyZyk7XG5mcy9udGZzL2ZpbGUuYy0xMzQ4LVx0Y2FzZSBGU19JT0NfR0VURlNMQUJFTDpcbmZzL250ZnMvZmlsZS5jOjEzNDk6XHRcdHJldHVybiBudGZzX2lvY3RsX2dldF92b2x1bWVfbGFiZWwoZmlscCwgYXJnKTtcbmZzL250ZnMvZmlsZS5jLTEzNTAtXHRjYXNlIEZTX0lPQ19TRVRGU0xBQkVMOlxuZnMvbnRmcy9maWxlLmM6MTM1MTpcdFx0cmV0dXJuIG50ZnNfaW9jdGxfc2V0X3ZvbHVtZV9sYWJlbChmaWxwLCBhcmcpO1xuZnMvbnRmcy9maWxlLmMtMTM1Mi1cdGNhc2UgRklUUklNOlxuZnMvbnRmcy9maWxlLmM6MTM1MzpcdFx0cmV0dXJuIG50ZnNfaW9jdGxfZml0cmltKE5URlNfU0IoZmlsZV9pbm9kZShmaWxwKS1cdTAwM2VpX3NiKSwgYXJnKTtcbmZzL250ZnMvZmlsZS5jLTEzNTQtXHRjYXNlIE5URlNfSU9DX1NUUkVBTV9SRUFEOlxuZnMvbnRmcy9maWxlLmM6MTM1NTpcdFx0cmV0dXJuIG50ZnNfaW9jdGxfc3RyZWFtKGZpbHAsIGFyZywgTlRGU19TVFJFQU1fT1BfUkVBRCk7XG5mcy9udGZzL2ZpbGUuYy0xMzU2LVx0Y2FzZSBOVEZTX0lPQ19TVFJFQU1fV1JJVEU6XG5mcy9udGZzL2ZpbGUuYzoxMzU3Olx0XHRyZXR1cm4gbnRmc19pb2N0bF9zdHJlYW0oZmlscCwgYXJnLCBOVEZTX1NUUkVBTV9PUF9XUklURSk7XG5mcy9udGZzL2ZpbGUuYy0xMzU4LVx0Y2FzZSBOVEZTX0lPQ19TVFJFQU1fUkVNT1ZFOlxuZnMvbnRmcy9maWxlLmM6MTM1OTpcdFx0cmV0dXJuIG50ZnNfaW9jdGxfc3RyZWFtKGZpbHAsIGFyZywgTlRGU19TVFJFQU1fT1BfUkVNT1ZFKTtcbmZzL250ZnMvZmlsZS5jLTEzNjAtXHRjYXNlIE5URlNfSU9DX0xJU1RfU1RSRUFNUzpcbmZzL250ZnMvZmlsZS5jOjEzNjE6XHRcdHJldHVybiBudGZzX2lvY3RsX2xpc3Rfc3RyZWFtcyhmaWxwLCBhcmcpO1xuZnMvbnRmcy9maWxlLmMtMTM2Mi1cdGRlZmF1bHQ6XG4tLVxuZnMvbnRmcy9maWxlLmM9MTM2OD1sb25nIG50ZnNfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLFxuLS1cbmZzL250ZnMvZmlsZS5jLTEzNzAte1xuZnMvbnRmcy9maWxlLmM6MTM3MTpcdHJldHVybiBudGZzX2lvY3RsKGZpbHAsIGNtZCwgKHVuc2lnbmVkIGxvbmcpY29tcGF0X3B0cihhcmcpKTtcbmZzL250ZnMvZmlsZS5jLTEzNzItfVxuLS1cbmZzL250ZnMvZmlsZS5jPTE2ODQ9Y29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBudGZzX2ZpbGVfb3BzID0ge1xuLS1cbmZzL250ZnMvZmlsZS5jLTE2OTMtXHQuc3BsaWNlX3dyaXRlXHQ9IGl0ZXJfZmlsZV9zcGxpY2Vfd3JpdGUsXG5mcy9udGZzL2ZpbGUuYzoxNjk0Olx0LnVubG9ja2VkX2lvY3RsXHQ9IG50ZnNfaW9jdGwsXG5mcy9udGZzL2ZpbGUuYy0xNjk1LSNpZmRlZiBDT05GSUdfQ09NUEFUXG4tLVxuZnMvbnRmcy9udGZzLmg9MjUzPWludCBudGZzX2ZvcmNlX3NodXRkb3duKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBmbGFncyk7XG5mcy9udGZzL250ZnMuaDoyNTQ6bG9uZyBudGZzX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7XG5mcy9udGZzL250ZnMuaC0yNTUtI2lmZGVmIENPTkZJR19DT01QQVRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTc6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc2ODEKCQkJCQkJCW91dHB1dDogODMKCQkJCQkJCXRob3VnaHRzOiA5NTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgTlRGUyBJb2N0bCBQYXRjaCBmb3IgRnV6emluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIGZvciBmdXp6aW5nLiBgbnRmc19pb2N0bGAgaW1tZWRpYXRlbHkganVtcHMgb3V0IGFzIHRoZSBjZW50cmFsIHBvaW50IGhlcmUuIEl0JiMzOTtzIG5vbi1zdGF0aWMgYW5kIGFscmVhZHkgdXRpbGl6ZWQgd2l0aGluIGBudGZzX2Rpcl9vcHNgIGFuZCBgbnRmc19maWxlX29wc2AsIHNvIGl0JiMzOTtzIGNsZWFybHkgdGhlIHJpZ2h0IHN5bWJvbCB0byBmb2N1cyBvbi4KCkZpcnN0LCBJIHF1aWNrbHkgY29uZmlybWVkIHRoYXQgYGZzL250ZnNgIGlzIHN0aWxsIHByZXNlbnQgaW4gdGhlIGtlcm5lbCwgYW5kIHRoZSBwYXRjaCwgd2hpY2ggaW50cm9kdWNlcyB0aGUgbmV3IGlvY3Rscywgd2FzIGluZGVlZCBhcHBsaWVkIHRvIGBmcy9udGZzL2ZpbGUuY2AuIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsaXR5IGZvciBuYW1lZCBzdHJlYW1zLCBhZGRpbmcgYE5URlNfSU9DX1NUUkVBTV9SRUFEYCwgYE5URlNfSU9DX1NUUkVBTV9XUklURWAsIGBOVEZTX0lPQ19TVFJFQU1fUkVNT1ZFYCwgYW5kIGBOVEZTX0lPQ19MSVNUX1NUUkVBTVNgLCBhcyB3ZWxsIGFzIGEgY29ycmVzcG9uZGluZyBgdWFwaS9saW51eC9udGZzLmhgIGhlYWRlci4KCkkgY2hlY2tlZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLCBhbmQgYE5URlNfRlNgIGlzIHRoZSBvbmx5IG9uZSByZXF1aXJlZC4gTm8gZGVwZW5kZW5jZSBvbiBgTlRGU19GU19QT1NJWF9BQ0xgIG9yIGFueSBvdGhlciBvYnNjdXJlIHNldHRpbmdzLiBUaGlzIHNpbXBsaWZpZXMgdGhpbmdzLgoKQSBxdWljayByZXZpZXcgb2YgdGhlIG5ldyBmdW5jdGlvbnMgYWRkZWQgc2hvd2VkIHRoYXQgdGhleSBhcmUgYWxsIHN0YXRpYywgZXhjZXB0IGZvciBgbnRmc19pb2N0bGAsIHdoaWNoIGlzIGEga2V5IG1vZGlmaWNhdGlvbiB0byBoYW5kbGUgdGhlIG5ldyBpb2N0bHMuCgpMZXQgbWUgdGFrZSBhbm90aGVyIGxvb2sgYXQgdGhlIHBhdGNoIGl0c2VsZiB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmc6CmBgYGMKJiM0MztzdGF0aWMgaW50IG50ZnNfcmVhZF9uYW1lZF9zdHJlYW0oc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBfX2xlMTYgKnVuYW1lLAomIzQzOwkJdTMyIHVuYW1lX2xlbiwgdTY0IG9mZnNldCwgdTY0IGxlbiwgdm9pZCAqZGF0YV9idWYsCiYjNDM7CQl1NjQgKnJieXRlcykKLi4uCiYjNDM7c3RhdGljIGludCBudGZzX3dyaXRlX25hbWVkX3N0cmVhbShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIF9fbGUxNiAqdW5hbWUsCiYjNDM7CQl1MzIgdW5hbWVfbGVuLCB1NjQgb2Zmc2V0LCB1NjQgbGVuLCB2b2lkICpkYXRhX3N0cmVhbSwKJiM0MzsJCXU2NCAqd2J5dGVzKQouLi4KJiM0MztzdGF0aWMgaW50IG50ZnNfcmVtb3ZlX25hbWVkX3N0cmVhbShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIF9fbGUxNiAqdW5hbWUsCiYjNDM7CQl1MzIgdW5hbWVfbGVuKQouLi4KJiM0MztzdGF0aWMgbG9uZyBudGZzX2lvY3RsX3N0cmVhbShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhcmcsCiYjNDM7CQkJICAgICAgZW51bSBudGZzX3N0cmVhbV9vcCBvcCkKLi4uCiYjNDM7c3RhdGljIGludCBudGZzX2lvY3RsX2xpc3Rfc3RyZWFtcyhzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhcmcpCi4uLgogbG9uZyBudGZzX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlzd2l0Y2ggKGNtZCkgewpAQCAtODUwLDYgJiM0MzsxMzUxLDE0IEBAIGxvbmcgbnRmc19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiAJCXJldHVybiBudGZzX2lvY3RsX3NldF92b2x1bWVfbGFiZWwoZmlscCwgYXJnKTsKIAljYXNlIEZJVFJJTToKIAkJcmV0dXJuIG50ZnNfaW9jdGxfZml0cmltKE5URlNfU0IoZmlsZV9pbm9kZShmaWxwKS0mZ3Q7aV9zYiksIGFyZyk7CiYjNDM7CWNhc2UgTlRGU19JT0NfU1RSRUFNX1JFQUQ6CiYjNDM7CQlyZXR1cm4gbnRmc19pb2N0bF9zdHJlYW0oZmlscCwgYXJnLCBOVEZTX1NUUkVBTV9PUF9SRUFEKTsKJiM0MzsJY2FzZSBOVEZTX0lPQ19TVFJFQU1fV1JJVEU6CiYjNDM7CQlyZXR1cm4gbnRmc19pb2N0bF9zdHJlYW0oZmlscCwgYXJnLCBOVEZTX1NUUkVBTV9PUF9XUklURSk7CiYjNDM7CWNhc2UgTlRGU19JT0NfU1RSRUFNX1JFTU9WRToKJiM0MzsJCXJldHVybiBudGZzX2lvY3RsX3N0cmVhbShmaWxwLCBhcmcsIE5URlNfU1RSRUFNX09QX1JFTU9WRSk7CiYjNDM7CWNhc2UgTlRGU19JT0NfTElTVF9TVFJFQU1TOgomIzQzOwkJcmV0dXJuIG50ZnNfaW9jdGxfbGlzdF9zdHJlYW1zKGZpbHAsIGFyZyk7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FTk9UVFk7CiAJfQpgYGAKCkluZGVlZCwgdGhlIHBhdGNoIGlzIGZ1bmN0aW9uYWwgYW5kIGFkZHMgZnVuY3Rpb25hbGl0eSByZWxhdGVkIHRvIG5hbWVkIHN0cmVhbXMgKEFsdGVybmF0ZSBEYXRhIFN0cmVhbXMpIHRvIE5URlMsIGFsbCByZWFjaGFibGUgdGhyb3VnaCBgbnRmc19pb2N0bGAuIEl0JiMzOTtzIGNsZWFybHkgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuCgpNeSBjb25jbHVzaW9uIGlzOgoKQ29uZmlnczogYE5URlNfRlNgCkZvY3VzIFN5bWJvbDogYG50ZnNfaW9jdGxgClJlYXNvbmluZzogVGhlIHBhdGNoIGFkZHMgbmV3IGlvY3RscyB0byB0aGUgTlRGUyBmaWxlc3lzdGVtIHRvIHJlYWQsIHdyaXRlLCByZW1vdmUsIGFuZCBsaXN0IG5hbWVkIHN0cmVhbXMuIFRoZXNlIGlvY3RscyBhcmUgYWxsIGhhbmRsZWQgd2l0aGluIGBudGZzX2lvY3RsYC4gYE5URlNfRlNgIGlzIHRoZSBvbmx5IGNvbmZpZyBuZWVkZWQuCkkmIzM5O2xsIG5vdyBwcm92aWRlIHRoZSByZWxldmFudCByZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxNzoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TlRGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O250ZnNfaW9jdGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBuZXcgaW9jdGxzIHRvIHRoZSBOVEZTIGZpbGVzeXN0ZW0gdG8gcmVhZCwgd3JpdGUsIHJlbW92ZSwgYW5kIGxpc3QgbmFtZWQgc3RyZWFtcyAoQWx0ZXJuYXRlIERhdGEgU3RyZWFtcykuIFRoZSBpb2N0bHMgYXJlIHJlYWNoYWJsZSB2aWEgYG50ZnNfaW9jdGxgLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtOVEZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bnRmc19pb2N0bCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIG5ldyBpb2N0bHMgdG8gdGhlIE5URlMgZmlsZXN5c3RlbSB0byByZWFkLCB3cml0ZSwgcmVtb3ZlLCBhbmQgbGlzdCBuYW1lZCBzdHJlYW1zIChBbHRlcm5hdGUgRGF0YSBTdHJlYW1zKS4gVGhlIGlvY3RscyBhcmUgcmVhY2hhYmxlIHZpYSBgbnRmc19pb2N0bGAuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxNzoxMTozMy4xMDQ3NTc2NjVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTA1NDc2MzE1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJOVEZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibnRmc19pb2N0bFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgbmV3IGlvY3RscyB0byB0aGUgTlRGUyBmaWxlc3lzdGVtIHRvIHJlYWQsIHdyaXRlLCByZW1vdmUsIGFuZCBsaXN0IG5hbWVkIHN0cmVhbXMgKEFsdGVybmF0ZSBEYXRhIFN0cmVhbXMpLiBUaGUgaW9jdGxzIGFyZSByZWFjaGFibGUgdmlhIGBudGZzX2lvY3RsYC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTc6MTE6MzMuMTA0NzY4MDE1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzEwMzYzNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBjMmQ1NTYzN2YzN2I2M2Y0YjcxMDgxYjc4MDRhZDljZTc5NGYyYWE5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVsIDMwIDE3OjExOjMyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdXNlcnNwYWNlLWFwaS9pb2N0bC9pb2N0bC1udW1iZXIucnN0IGIvRG9jdW1lbnRhdGlvbi91c2Vyc3BhY2UtYXBpL2lvY3RsL2lvY3RsLW51bWJlci5yc3RcXG5pbmRleCAzZjBlZjFlMjdlYjA3Li4yYjk4NjlhZWI4MTFiIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vdXNlcnNwYWNlLWFwaS9pb2N0bC9pb2N0bC1udW1iZXIucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi91c2Vyc3BhY2UtYXBpL2lvY3RsL2lvY3RsLW51bWJlci5yc3RcXG5AQCAtMzk5LDYgKzM5OSw3IEBAIENvZGUgIFNlcSMgICAgSW5jbHVkZSBGaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tbWVudHNcXG4gMHhFNSAgMDAtM0YgIGxpbnV4L2Z1c2UuaFxcbiAweEVDICAwMC0wMSAgZHJpdmVycy9wbGF0Zm9ybS9jaHJvbWUvY3Jvc19lY19kZXYuaCAgICAgICAgICAgICAgICAgICAgIENocm9tZU9TIEVDIGRyaXZlclxcbiAweEVFICAwMC0wOSAgdWFwaS9saW51eC9wZnJ1dC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsYXRmb3JtIEZpcm13YXJlIFJ1bnRpbWUgVXBkYXRlIGFuZCBUZWxlbWV0cnlcXG4rMHhFRiAgMDAtMEYgIHVhcGkvbGludXgvbnRmcy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVEZTXFxuIDB4RjMgIDAwLTNGICBkcml2ZXJzL3VzYi9taXNjL3Npc3VzYnZnYS9zaXN1c2IuaCAgICAgICAgICAgICAgICAgICAgICAgc2lzZmIgKGluIGRldmVsb3BtZW50KVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcdTAwM2NtYWlsdG86dGhvbWFzQHdpbmlzY2hob2Zlci5uZXRcXHUwMDNlXFxuIDB4RjYgIGFsbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRUbmcgTGludXggVHJhY2UgVG9vbGtpdCBOZXh0IEdlbmVyYXRpb25cXG5kaWZmIC0tZ2l0IGEvZnMvbnRmcy9maWxlLmMgYi9mcy9udGZzL2ZpbGUuY1xcbmluZGV4IGQ0MjgyODIyYjNjZWYuLjk2MWI5NGY1NDVmMmMgMTAwNjQ0XFxuLS0tIGEvZnMvbnRmcy9maWxlLmNcXG4rKysgYi9mcy9udGZzL2ZpbGUuY1xcbkBAIC0xNSw2ICsxNSw4IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wb3NpeF9hY2xfeGF0dHIuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NvbXBhdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZmFsbG9jLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9vdmVyZmxvdy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjdWFwaS9saW51eC9udGZzLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXFwibGNuYWxsb2MuaFxcXCJcXG4gI2luY2x1ZGUgXFxcIm50ZnMuaFxcXCJcXG5AQCAtMjMsNiArMjUsNyBAQFxcbiAjaW5jbHVkZSBcXFwiaW9tYXAuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImJpdG1hcC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwidm9sdW1lLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJtZnQuaFxcXCJcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9maWxlbG9jay5oXFx1MDAzZVxcbiBcXG5AQCAtODM5LDYgKzg0Miw1MDQgQEAgc3RhdGljIGludCBudGZzX2lvY3RsX2ZpdHJpbShzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbisjZGVmaW5lIE5URlNfU1RSRUFNX01BWF9JT1xcdCgxNiAqIDEwMjQgKiAxMDI0KSAvKiAxNk1CIGxpbWl0ICovXFxuK1xcbisvKlxcbisgKiBudGZzX3JlYWRfbmFtZWRfc3RyZWFtIC0gUmVhZCBkYXRhIGZyb20gYSBuYW1lZCAkREFUQSBzdHJlYW0uXFxuKyAqXFxuKyAqIEBuaTpcXHRcXHROVEZTIGlub2RlXFxuKyAqIEB1bmFtZTpcXHRTdHJlYW0gbmFtZVxcbisgKiBAdW5hbWVfbGVuOlxcdExlbmd0aCBvZiBuYW1lIGluIFVuaWNvZGUgY2hhcmFjdGVyc1xcbisgKiBAb2Zmc2V0OlxcdEJ5dGUgb2Zmc2V0IGluIHRoZSBzdHJlYW1cXG4rICogQGxlbjpcXHROdW1iZXIgb2YgYnl0ZXMgdG8gcmVhZFxcbisgKiBAZGF0YV9idWY6XFx0QnVmZmVyIHRvIGNvcHkgZGF0YSB0b1xcbisgKlxcbisgKiBSZXR1cm46XFx0MCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS5cXG4rICpcXHRcXHRJZiBvZmZzZXQgXFx1MDAzZT0gc3RyZWFtIHNpemUsIHJldHVybnMgMC5cXG4rICovXFxuK3N0YXRpYyBpbnQgbnRmc19yZWFkX25hbWVkX3N0cmVhbShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIF9fbGUxNiAqdW5hbWUsXFxuK1xcdFxcdHUzMiB1bmFtZV9sZW4sIHU2NCBvZmZzZXQsIHU2NCBsZW4sIHZvaWQgKmRhdGFfYnVmLFxcbitcXHRcXHR1NjQgKnJieXRlcylcXG4re1xcbitcXHRzdHJ1Y3QgbnRmc19hdHRyX3NlYXJjaF9jdHggKmN0eDtcXG4rXFx0c3RydWN0IGlub2RlICphdHRyX3ZpO1xcbitcXHRpbnQgZXJyID0gMDtcXG4rXFx0dTY0IGRhdGFfc2l6ZTtcXG4rXFx0czY0IGJ5dGVzO1xcbitcXHRjaGFyICpyYnVmID0gTlVMTDtcXG4rXFxuK1xcdGlmICghbmkgfHwgIXVuYW1lIHx8IHVuYW1lX2xlbiA9PSAwKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGlmIChsZW4gPT0gMCB8fCBsZW4gXFx1MDAzZSBOVEZTX1NUUkVBTV9NQVhfSU8pXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2bmktXFx1MDAzZW1yZWNfbG9jayk7XFxuK1xcdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuaSwgTlVMTCk7XFxuK1xcdGlmICghY3R4KSB7XFxuK1xcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bmktXFx1MDAzZW1yZWNfbG9jayk7XFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHR9XFxuK1xcbitcXHRlcnIgPSBudGZzX2F0dHJfbG9va3VwKEFUX0RBVEEsIHVuYW1lLCB1bmFtZV9sZW4sIENBU0VfU0VOU0lUSVZFLCAwLFxcbitcXHRcXHRcXHROVUxMLCAwLCBjdHgpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIG91dF9sb2NrO1xcbitcXG4rXFx0aWYgKGN0eC1cXHUwMDNlYXR0ci1cXHUwMDNlbm9uX3Jlc2lkZW50KVxcbitcXHRcXHRkYXRhX3NpemUgPSBsZTY0X3RvX2NwdShjdHgtXFx1MDAzZWF0dHItXFx1MDAzZWRhdGEubm9uX3Jlc2lkZW50LmRhdGFfc2l6ZSk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0ZGF0YV9zaXplID0gbGUzMl90b19jcHUoY3R4LVxcdTAwM2VhdHRyLVxcdTAwM2VkYXRhLnJlc2lkZW50LnZhbHVlX2xlbmd0aCk7XFxuK1xcbitcXHRpZiAob2Zmc2V0IFxcdTAwM2U9IGRhdGFfc2l6ZSkge1xcbitcXHRcXHQqcmJ5dGVzID0gMDtcXG4rXFx0XFx0LyogRU9GOiBub3RoaW5nIHRvIHJlYWQgKi9cXG4rXFx0XFx0Z290byBvdXRfbG9jaztcXG4rXFx0fVxcbitcXG4rXFx0LyogQWRqdXN0IGxlbmd0aCB0byBub3QgcmVhZCBiZXlvbmQgRU9GICovXFxuK1xcdGlmIChsZW4gXFx1MDAzZSBkYXRhX3NpemUgLSBvZmZzZXQpXFxuK1xcdFxcdGxlbiA9IGRhdGFfc2l6ZSAtIG9mZnNldDtcXG4rXFxuK1xcdGF0dHJfdmkgPSBudGZzX2F0dHJfaWdldChWRlNfSShuaSksIEFUX0RBVEEsIHVuYW1lLCB1bmFtZV9sZW4pO1xcbitcXHRudGZzX2F0dHJfcHV0X3NlYXJjaF9jdHgoY3R4KTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZuaS1cXHUwMDNlbXJlY19sb2NrKTtcXG4rXFxuK1xcdGlmIChJU19FUlIoYXR0cl92aSkpIHtcXG4rXFx0XFx0ZXJyID0gUFRSX0VSUihhdHRyX3ZpKTtcXG4rXFx0XFx0Z290byBvdXRfZnJlZTtcXG4rXFx0fVxcbitcXG4rXFx0cmJ1ZiA9IGt2emFsbG9jKGxlbiwgR0ZQX05PRlMpO1xcbitcXHRpZiAoIXJidWYpIHtcXG4rXFx0XFx0ZXJyID0gLUVOT01FTTtcXG4rXFx0XFx0aXB1dChhdHRyX3ZpKTtcXG4rXFx0XFx0Z290byBvdXRfZnJlZTtcXG4rXFx0fVxcbitcXG4rXFx0Ynl0ZXMgPSBudGZzX2lub2RlX2F0dHJfcHJlYWQoYXR0cl92aSwgb2Zmc2V0LCBsZW4sIHJidWYpO1xcbitcXHRpcHV0KGF0dHJfdmkpO1xcbitcXHRpZiAoYnl0ZXMgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdGVyciA9IGJ5dGVzO1xcbitcXHRcXHRnb3RvIG91dF9mcmVlO1xcbitcXHR9XFxuK1xcbitcXHQqcmJ5dGVzID0gYnl0ZXM7XFxuK1xcdG1lbWNweShkYXRhX2J1ZiwgcmJ1ZiwgYnl0ZXMpO1xcbitcXG4rb3V0X2ZyZWU6XFxuK1xcdGt2ZnJlZShyYnVmKTtcXG4rXFx0cmV0dXJuIGVycjtcXG4rXFxuK291dF9sb2NrOlxcbitcXHRudGZzX2F0dHJfcHV0X3NlYXJjaF9jdHgoY3R4KTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZuaS1cXHUwMDNlbXJlY19sb2NrKTtcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4rLypcXG4rICogbnRmc193cml0ZV9uYW1lZF9zdHJlYW0gLSBXcml0ZSBkYXRhIGZyb20gYSBuYW1lZCAkREFUQSBzdHJlYW0uXFxuKyAqXFxuKyAqIEBuaTpcXHRcXHROVEZTIGlub2RlXFxuKyAqIEB1bmFtZTpcXHRTdHJlYW0gbmFtZVxcbisgKiBAdW5hbWVfbGVuOlxcdExlbmd0aCBvZiBuYW1lIGluIFVuaWNvZGUgY2hhcmFjdGVyc1xcbisgKiBAb2Zmc2V0OlxcdEJ5dGUgb2Zmc2V0IGluIHRoZSBzdHJlYW1cXG4rICogQGxlbjpcXHROdW1iZXIgb2YgYnl0ZXMgdG8gd3JpdGVcXG4rICogQGRhdGFfc3RyZWFtOiBEYXRhIHRvIHdyaXRlXFxuKyAqXFxuKyAqIFJldHVybjpcXHQwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlLlxcbisgKi9cXG4rc3RhdGljIGludCBudGZzX3dyaXRlX25hbWVkX3N0cmVhbShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIF9fbGUxNiAqdW5hbWUsXFxuK1xcdFxcdHUzMiB1bmFtZV9sZW4sIHU2NCBvZmZzZXQsIHU2NCBsZW4sIHZvaWQgKmRhdGFfc3RyZWFtLFxcbitcXHRcXHR1NjQgKndieXRlcylcXG4re1xcbitcXHRzdHJ1Y3QgbnRmc19hdHRyX3NlYXJjaF9jdHggKmN0eDtcXG4rXFx0c3RydWN0IGlub2RlICphdHRyX3ZpO1xcbitcXHRpbnQgZXJyO1xcbitcXHRzNjQgYnl0ZXM7XFxuK1xcbitcXHRpZiAoIW5pIHx8ICF1bmFtZSB8fCB1bmFtZV9sZW4gPT0gMCB8fCAhZGF0YV9zdHJlYW0pXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0aWYgKGxlbiA9PSAwIHx8IGxlbiBcXHUwMDNlIE5URlNfU1RSRUFNX01BWF9JTylcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZuaS1cXHUwMDNlbXJlY19sb2NrKTtcXG4rXFx0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBOVUxMKTtcXG4rXFx0aWYgKCFjdHgpIHtcXG4rXFx0XFx0ZXJyID0gLUVOT01FTTtcXG4rXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbitcXHR9XFxuK1xcbitcXHRlcnIgPSBudGZzX2F0dHJfbG9va3VwKEFUX0RBVEEsIHVuYW1lLCB1bmFtZV9sZW4sIENBU0VfU0VOU0lUSVZFLCAwLFxcbitcXHRcXHRcXHROVUxMLCAwLCBjdHgpO1xcbitcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdGlmIChlcnIgIT0gLUVOT0VOVClcXG4rXFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbitcXHRcXHRlcnIgPSBudGZzX2F0dHJfYWRkKG5pLCBBVF9EQVRBLCB1bmFtZSwgdW5hbWVfbGVuLCBOVUxMLCAwKTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbitcXHRcXHRtYXJrX21mdF9yZWNvcmRfZGlydHkobmkpO1xcbitcXHR9XFxuK1xcbitcXHRhdHRyX3ZpID0gbnRmc19hdHRyX2lnZXQoVkZTX0kobmkpLCBBVF9EQVRBLCB1bmFtZSwgdW5hbWVfbGVuKTtcXG4rXFx0bnRmc19hdHRyX3B1dF9zZWFyY2hfY3R4KGN0eCk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2bmktXFx1MDAzZW1yZWNfbG9jayk7XFxuK1xcbitcXHRpZiAoSVNfRVJSKGF0dHJfdmkpKSB7XFxuK1xcdFxcdGVyciA9IFBUUl9FUlIoYXR0cl92aSk7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcbitcXHRieXRlcyA9IG50ZnNfaW5vZGVfYXR0cl9wd3JpdGUoYXR0cl92aSwgb2Zmc2V0LCBsZW4sIGRhdGFfc3RyZWFtLFxcbitcXHRcXHRcXHRcXHQgICAgICAgZmFsc2UpO1xcbitcXHRpZiAoYnl0ZXMgXFx1MDAzYyAwKVxcbitcXHRcXHRlcnIgPSBieXRlcztcXG4rXFx0ZWxzZVxcbitcXHRcXHQqd2J5dGVzID0gYnl0ZXM7XFxuK1xcdGlwdXQoYXR0cl92aSk7XFxuK1xcbitvdXQ6XFxuK1xcdHJldHVybiBlcnI7XFxuK1xcbitvdXRfdW5sb2NrOlxcbitcXHRpZiAoY3R4KVxcbitcXHRcXHRudGZzX2F0dHJfcHV0X3NlYXJjaF9jdHgoY3R4KTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZuaS1cXHUwMDNlbXJlY19sb2NrKTtcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4rLypcXG4rICogbnRmc19yZW1vdmVfbmFtZWRfc3RyZWFtIC0gUmVtb3ZlIGEgbmFtZWQgJERBVEEgc3RyZWFtLlxcbisgKlxcbisgKiBAbmk6XFx0XFx0TlRGUyBpbm9kZVxcbisgKiBAdW5hbWU6XFx0U3RyZWFtIG5hbWVcXG4rICogQHVuYW1lX2xlbjpcXHROYW1lIGxlbmd0aCBpbiBVbmljb2RlIGNoYXJhY3RlcnNcXG4rICpcXG4rICogUmV0dXJuOlxcdDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3JcXG4rICogICAgICAgICAgICAgIC1FTk9FTlQgaWYgc3RyZWFtIG5vdCBmb3VuZFxcbisgKi9cXG4rc3RhdGljIGludCBudGZzX3JlbW92ZV9uYW1lZF9zdHJlYW0oc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBfX2xlMTYgKnVuYW1lLFxcbitcXHRcXHR1MzIgdW5hbWVfbGVuKVxcbit7XFxuK1xcdGlmICghbmkgfHwgIXVuYW1lIHx8IHVuYW1lX2xlbiA9PSAwKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdHJldHVybiBudGZzX2F0dHJfcmVtb3ZlKG5pLCBBVF9EQVRBLCB1bmFtZSwgdW5hbWVfbGVuKTtcXG4rfVxcbitcXG4rZW51bSBudGZzX3N0cmVhbV9vcCB7XFxuK1xcdE5URlNfU1RSRUFNX09QX1JFQUQsXFxuK1xcdE5URlNfU1RSRUFNX09QX1dSSVRFLFxcbitcXHROVEZTX1NUUkVBTV9PUF9SRU1PVkUsXFxuK307XFxuK1xcbitzdGF0aWMgbG9uZyBudGZzX2lvY3RsX3N0cmVhbShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhcmcsXFxuK1xcdFxcdFxcdCAgICAgIGVudW0gbnRmc19zdHJlYW1fb3Agb3ApXFxuK3tcXG4rXFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoZmlscCk7XFxuK1xcdHN0cnVjdCBudGZzX2lub2RlICpuaSA9IE5URlNfSShpbm9kZSk7XFxuK1xcdHN0cnVjdCBudGZzX3N0cmVhbSBfX3VzZXIgKnVyZXEgPVxcbitcXHRcXHQoc3RydWN0IG50ZnNfc3RyZWFtIF9fdXNlciAqKWFyZztcXG4rXFx0c3RydWN0IG50ZnNfc3RyZWFtICpyZXE7XFxuK1xcdHNpemVfdCBoZWFkZXJfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgbnRmc19zdHJlYW0pO1xcbitcXHRzaXplX3QgZGF0YV9zaXplLCB0b3RhbF9zaXplO1xcbitcXHRjaGFyICprbmFtZSwgKmtkYXRhO1xcbitcXHRfX2xlMTYgKnVuYW1lID0gTlVMTCwgKnNuYW1lO1xcbitcXHRpbnQgZXJyID0gMCwgc25hbWVfbGVuO1xcbitcXHRib29sIHV0ZjE2O1xcbitcXHRzdHJ1Y3QgbnRmc19zdHJlYW0gaGRyO1xcbitcXG4rXFx0LyogRmlyc3QgY29weSBmaXhlZCBoZWFkZXIgKi9cXG4rXFx0aWYgKGNvcHlfZnJvbV91c2VyKFxcdTAwMjZoZHIsIHVyZXEsIGhlYWRlcl9zaXplKSlcXG4rXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuK1xcbitcXHRpZiAoaGRyLmlvX2xlbiBcXHUwMDNlIE5URlNfU1RSRUFNX01BWF9JTyB8fFxcbitcXHQgICAgKGhkci5mbGFncyBcXHUwMDI2IH5OVEZTX1NUUkVBTV9GTF9VVEYxNikgfHwgaGRyLnJlc2VydmVkKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdHV0ZjE2ID0gaGRyLmZsYWdzIFxcdTAwMjYgTlRGU19TVFJFQU1fRkxfVVRGMTY7XFxuK1xcbitcXHRpZiAoaGRyLm5hbWVfbGVuID09IDApXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRpZiAodXRmMTYpIHtcXG4rXFx0XFx0LyogVVRGLTE2TEUgYnl0ZSBjb3VudDogbXVzdCBiZSBldmVuIGFuZCB3aXRoaW4gdGhlIGxpbWl0LiAqL1xcbitcXHRcXHRpZiAoKGhkci5uYW1lX2xlbiBcXHUwMDI2IDEpIHx8XFxuK1xcdFxcdCAgICBoZHIubmFtZV9sZW4gXFx1MDAzZSBOVEZTX01BWF9OQU1FX0xFTiAqIHNpemVvZihfX2xlMTYpKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fSBlbHNlIGlmIChoZHIubmFtZV9sZW4gXFx1MDAzZSBOVEZTX01BWF9OQU1FX0xFTikge1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0c3dpdGNoIChvcCkge1xcbitcXHRjYXNlIE5URlNfU1RSRUFNX09QX1JFQUQ6XFxuK1xcdFxcdGlmICghKGZpbHAtXFx1MDAzZWZfbW9kZSBcXHUwMDI2IEZNT0RFX1JFQUQpIHx8IGhkci5pb19sZW4gPT0gMClcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdGRhdGFfc2l6ZSA9IGhkci5pb19sZW47XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIE5URlNfU1RSRUFNX09QX1dSSVRFOlxcbitcXHRcXHRpZiAoIShmaWxwLVxcdTAwM2VmX21vZGUgXFx1MDAyNiBGTU9ERV9XUklURSkgfHwgaGRyLmlvX2xlbiA9PSAwKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0ZGF0YV9zaXplID0gaGRyLmlvX2xlbjtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgTlRGU19TVFJFQU1fT1BfUkVNT1ZFOlxcbitcXHRcXHRpZiAoIShmaWxwLVxcdTAwM2VmX21vZGUgXFx1MDAyNiBGTU9ERV9XUklURSkgfHwgaGRyLmlvX2xlbiAhPSAwKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0ZGF0YV9zaXplID0gMDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiAtRU5PVFRZO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoY2hlY2tfYWRkX292ZXJmbG93KGhlYWRlcl9zaXplLCAoc2l6ZV90KWhkci5uYW1lX2xlbiwgXFx1MDAyNnRvdGFsX3NpemUpIHx8XFxuK1xcdCAgICBjaGVja19hZGRfb3ZlcmZsb3codG90YWxfc2l6ZSwgZGF0YV9zaXplLCBcXHUwMDI2dG90YWxfc2l6ZSkpXFxuK1xcdFxcdHJldHVybiAtRU9WRVJGTE9XO1xcbitcXG4rXFx0cmVxID0gbWVtZHVwX3VzZXIodXJlcSwgdG90YWxfc2l6ZSk7XFxuK1xcdGlmIChJU19FUlIocmVxKSlcXG4rXFx0XFx0cmV0dXJuIFBUUl9FUlIocmVxKTtcXG4rXFxuK1xcdHJlcS1cXHUwMDNlYnl0ZXNfcmV0dXJuZWQgPSAwO1xcbitcXG4rXFx0a25hbWUgPSAoY2hhciAqKXJlcS1cXHUwMDNlYnVmZmVyO1xcbitcXHRrZGF0YSA9IChjaGFyICopcmVxLVxcdTAwM2VidWZmZXIgKyByZXEtXFx1MDAzZW5hbWVfbGVuO1xcbitcXG4rXFx0aWYgKHJlcS1cXHUwMDNlbmFtZV9sZW4gIT0gaGRyLm5hbWVfbGVuIHx8IHJlcS1cXHUwMDNlaW9fbGVuICE9IGhkci5pb19sZW4gfHxcXG4rXFx0ICAgIHJlcS1cXHUwMDNlZmxhZ3MgIT0gaGRyLmZsYWdzIHx8IHJlcS1cXHUwMDNlcmVzZXJ2ZWQpIHtcXG4rXFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4rXFx0XFx0Z290byBvdXRfZnJlZTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHV0ZjE2KSB7XFxuK1xcdFxcdC8qIE5hbWUgaXMgYWxyZWFkeSBvbi1kaXNrIFVURi0xNkxFOyB1c2UgaXQgaW4gcGxhY2UuICovXFxuK1xcdFxcdHNuYW1lID0gKF9fbGUxNiAqKWtuYW1lO1xcbitcXHRcXHRzbmFtZV9sZW4gPSByZXEtXFx1MDAzZW5hbWVfbGVuIC8gc2l6ZW9mKF9fbGUxNik7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGlmIChtZW1jaHIoa25hbWUsICdcXFxcMCcsIHJlcS1cXHUwMDNlbmFtZV9sZW4pKSB7XFxuK1xcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuK1xcdFxcdFxcdGdvdG8gb3V0X2ZyZWU7XFxuK1xcdFxcdH1cXG4rXFx0XFx0c25hbWVfbGVuID0gbnRmc19ubHN0b3VjcyhuaS1cXHUwMDNldm9sLCBrbmFtZSwgcmVxLVxcdTAwM2VuYW1lX2xlbixcXG4rXFx0XFx0XFx0XFx0XFx1MDAyNnVuYW1lLCBOVEZTX01BWF9OQU1FX0xFTik7XFxuK1xcdFxcdGlmIChzbmFtZV9sZW4gXFx1MDAzYyAwKSB7XFxuK1xcdFxcdFxcdGVyciA9IHNuYW1lX2xlbjtcXG4rXFx0XFx0XFx0Z290byBvdXRfZnJlZTtcXG4rXFx0XFx0fVxcbitcXHRcXHRzbmFtZSA9IHVuYW1lO1xcbitcXHR9XFxuK1xcbitcXHRzd2l0Y2ggKG9wKSB7XFxuK1xcdGNhc2UgTlRGU19TVFJFQU1fT1BfUkVBRDpcXG4rXFx0XFx0ZXJyID0gbnRmc19yZWFkX25hbWVkX3N0cmVhbShuaSwgc25hbWUsIHNuYW1lX2xlbixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICByZXEtXFx1MDAzZXN0cmVhbV9vZmZzZXQsIHJlcS1cXHUwMDNlaW9fbGVuLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIGtkYXRhLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZyZXEtXFx1MDAzZWJ5dGVzX3JldHVybmVkKTtcXG4rXFx0XFx0aWYgKCFlcnIpIHtcXG4rXFx0XFx0XFx0aWYgKGNvcHlfdG9fdXNlcih1cmVxLCByZXEsXFxuK1xcdFxcdFxcdFxcdFxcdGhlYWRlcl9zaXplICsgcmVxLVxcdTAwM2VuYW1lX2xlbiArIHJlcS1cXHUwMDNlYnl0ZXNfcmV0dXJuZWQpKVxcbitcXHRcXHRcXHRcXHRlcnIgPSAtRUZBVUxUO1xcbitcXHRcXHR9XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIE5URlNfU1RSRUFNX09QX1dSSVRFOlxcbitcXHRcXHRlcnIgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbHApO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0ZXJyID0gbnRmc193cml0ZV9uYW1lZF9zdHJlYW0obmksIHNuYW1lLCBzbmFtZV9sZW4sXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIHJlcS1cXHUwMDNlc3RyZWFtX29mZnNldCwgcmVxLVxcdTAwM2Vpb19sZW4sXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIGtkYXRhLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2cmVxLVxcdTAwM2VieXRlc19yZXR1cm5lZCk7XFxuK1xcdFxcdG1udF9kcm9wX3dyaXRlX2ZpbGUoZmlscCk7XFxuK1xcdFxcdGlmICghZXJyKSB7XFxuK1xcdFxcdFxcdGlmIChjb3B5X3RvX3VzZXIoXFx1MDAyNnVyZXEtXFx1MDAzZWJ5dGVzX3JldHVybmVkLFxcbitcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNnJlcS1cXHUwMDNlYnl0ZXNfcmV0dXJuZWQsXFxuK1xcdFxcdFxcdFxcdFxcdCBzaXplb2YocmVxLVxcdTAwM2VieXRlc19yZXR1cm5lZCkpKVxcbitcXHRcXHRcXHRcXHRlcnIgPSAtRUZBVUxUO1xcbitcXHRcXHR9XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIE5URlNfU1RSRUFNX09QX1JFTU9WRTpcXG4rXFx0XFx0ZXJyID0gbW50X3dhbnRfd3JpdGVfZmlsZShmaWxwKTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGVyciA9IG50ZnNfcmVtb3ZlX25hbWVkX3N0cmVhbShuaSwgc25hbWUsIHNuYW1lX2xlbik7XFxuK1xcdFxcdG1udF9kcm9wX3dyaXRlX2ZpbGUoZmlscCk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRlcnIgPSAtRU5PVFRZO1xcbitcXHR9XFxuK1xcbitvdXRfZnJlZTpcXG4rXFx0aWYgKHVuYW1lKVxcbitcXHRcXHRrbWVtX2NhY2hlX2ZyZWUobnRmc19uYW1lX2NhY2hlLCB1bmFtZSk7XFxuK1xcdGtmcmVlKHJlcSk7XFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgbnRmc19pb2N0bF9saXN0X3N0cmVhbXMoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbit7XFxuK1xcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGZpbHApO1xcbitcXHRzdHJ1Y3QgbnRmc19pbm9kZSAqbmkgPSBOVEZTX0koaW5vZGUpO1xcbitcXHRzdHJ1Y3QgbnRmc19saXN0X3N0cmVhbXMgaGRyO1xcbitcXHRzdHJ1Y3QgbnRmc19zdHJlYW1fZW50cnkgKmVudHJ5LCAqbGFzdF9lbnRyeSA9IE5VTEw7XFxuK1xcdHNpemVfdCByZXF1aXJlZCA9IDA7XFxuK1xcdHZvaWQgKmtidWYgPSBOVUxMO1xcbitcXHR2b2lkIF9fdXNlciAqdWJ1ZjtcXG4rXFx0c3RydWN0IGF0dHJfcmVjb3JkICphO1xcbitcXHRzdHJ1Y3QgbnRmc19hdHRyX3NlYXJjaF9jdHggKmFjdHg7XFxuK1xcdGludCByZXQgPSAwLCBlcnIsIGNvdW50ID0gMDtcXG4rXFx0c2l6ZV90IGVudHJ5X3NpemUsIG9mZnNldCA9IDA7XFxuK1xcdHVuc2lnbmVkIGludCBuYW1lX2xlbjtcXG4rXFx0dW5zaWduZWQgY2hhciAqc247XFxuK1xcdGJvb2wgdXRmMTY7XFxuK1xcbitcXHRpZiAoY29weV9mcm9tX3VzZXIoXFx1MDAyNmhkciwgKHZvaWQgX191c2VyICopYXJnLCBzaXplb2YoaGRyKSkpXFxuK1xcdFxcdHJldHVybiAtRUZBVUxUO1xcbitcXG4rXFx0aWYgKChoZHIuZmxhZ3MgXFx1MDAyNiB+TlRGU19TVFJFQU1fRkxfVVRGMTYpIHx8IGhkci5yZXNlcnZlZClcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHR1dGYxNiA9IGhkci5mbGFncyBcXHUwMDI2IE5URlNfU1RSRUFNX0ZMX1VURjE2O1xcbitcXG4rXFx0dWJ1ZiA9ICh2b2lkIF9fdXNlciAqKWFyZyArIHNpemVvZihoZHIpO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2bmktXFx1MDAzZW1yZWNfbG9jayk7XFxuK1xcdGFjdHggPSBudGZzX2F0dHJfZ2V0X3NlYXJjaF9jdHgobmksIE5VTEwpO1xcbitcXHRpZiAoIWFjdHgpIHtcXG4rXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZuaS1cXHUwMDNlbXJlY19sb2NrKTtcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdH1cXG4rXFxuK1xcdHdoaWxlICgoZXJyID0gbnRmc19hdHRyc193YWxrKGFjdHgpKSA9PSAwKSB7XFxuK1xcdFxcdGEgPSBhY3R4LVxcdTAwM2VhdHRyO1xcbitcXHRcXHRpZiAoYS1cXHUwMDNldHlwZSAhPSBBVF9EQVRBIHx8ICFhLVxcdTAwM2VuYW1lX2xlbmd0aClcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRpZiAodXRmMTYpIHtcXG4rXFx0XFx0XFx0bmFtZV9sZW4gPSBhLVxcdTAwM2VuYW1lX2xlbmd0aCAqIHNpemVvZihfX2xlMTYpO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRzbiA9IG50ZnNfYXR0cl9uYW1lX2dldChuaS1cXHUwMDNldm9sLFxcbitcXHRcXHRcXHRcXHRcXHQoX19sZTE2ICopKCh1OCAqKWEgKyBsZTE2X3RvX2NwdShhLVxcdTAwM2VuYW1lX29mZnNldCkpLFxcbitcXHRcXHRcXHRcXHRcXHRhLVxcdTAwM2VuYW1lX2xlbmd0aCk7XFxuK1xcdFxcdFxcdGlmICghc24pIHtcXG4rXFx0XFx0XFx0XFx0cmV0ID0gLUVJTztcXG4rXFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0bmFtZV9sZW4gPSBzdHJsZW4oc24pO1xcbitcXHRcXHRcXHRudGZzX2F0dHJfbmFtZV9mcmVlKFxcdTAwMjZzbik7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGVudHJ5X3NpemUgPSBzaXplb2YoKmVudHJ5KSArIG5hbWVfbGVuO1xcbitcXHRcXHRlbnRyeV9zaXplID0gQUxJR04oZW50cnlfc2l6ZSwgOCk7XFxuK1xcbitcXHRcXHRpZiAocmVxdWlyZWQgXFx1MDAzZSBTSVpFX01BWCAtIGVudHJ5X3NpemUpIHtcXG4rXFx0XFx0XFx0cmV0ID0gLUVPVkVSRkxPVztcXG4rXFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcdFxcdH1cXG4rXFx0XFx0cmVxdWlyZWQgKz0gZW50cnlfc2l6ZTtcXG4rXFx0XFx0Y291bnQrKztcXG4rXFx0fVxcbitcXHRpZiAoZXJyICE9IC1FTk9FTlQpIHtcXG4rXFx0XFx0cmV0ID0gZXJyO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4rXFx0aGRyLnN0cmVhbV9jb3VudCA9IGNvdW50O1xcbitcXHRoZHIuYnl0ZXNfcmV0dXJuZWQgPSByZXF1aXJlZDtcXG4rXFxuK1xcdGlmICghY291bnQpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0aWYgKGhkci5idWZmZXJfc2l6ZSBcXHUwMDNjIHJlcXVpcmVkKSB7XFxuK1xcdFxcdHJldCA9IC1FTk9TUEM7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcbitcXHRrYnVmID0ga3Z6YWxsb2MocmVxdWlyZWQsIEdGUF9OT0ZTKTtcXG4rXFx0aWYgKCFrYnVmKSB7XFxuK1xcdFxcdHJldCA9IC1FTk9NRU07XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcbitcXHRudGZzX2F0dHJfcmVpbml0X3NlYXJjaF9jdHgoYWN0eCk7XFxuK1xcdHdoaWxlICgoZXJyID0gbnRmc19hdHRyc193YWxrKGFjdHgpKSA9PSAwKSB7XFxuK1xcdFxcdGEgPSBhY3R4LVxcdTAwM2VhdHRyO1xcbitcXHRcXHRpZiAoYS1cXHUwMDNldHlwZSAhPSBBVF9EQVRBIHx8ICFhLVxcdTAwM2VuYW1lX2xlbmd0aClcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdGlmICh1dGYxNikge1xcbitcXHRcXHRcXHRzbiA9IE5VTEw7XFxuK1xcdFxcdFxcdG5hbWVfbGVuID0gYS1cXHUwMDNlbmFtZV9sZW5ndGggKiBzaXplb2YoX19sZTE2KTtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0c24gPSBudGZzX2F0dHJfbmFtZV9nZXQobmktXFx1MDAzZXZvbCxcXG4rXFx0XFx0XFx0XFx0XFx0KF9fbGUxNiAqKSgodTggKilhICsgbGUxNl90b19jcHUoYS1cXHUwMDNlbmFtZV9vZmZzZXQpKSxcXG4rXFx0XFx0XFx0XFx0XFx0YS1cXHUwMDNlbmFtZV9sZW5ndGgpO1xcbitcXHRcXHRcXHRpZiAoIXNuKSB7XFxuK1xcdFxcdFxcdFxcdHJldCA9IC1FSU87XFxuK1xcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdG5hbWVfbGVuID0gc3RybGVuKHNuKTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0ZW50cnlfc2l6ZSA9IHNpemVvZigqZW50cnkpICsgbmFtZV9sZW47XFxuK1xcdFxcdGVudHJ5X3NpemUgPSBBTElHTihlbnRyeV9zaXplLCA4KTtcXG4rXFx0XFx0aWYgKG9mZnNldCBcXHUwMDNlIHJlcXVpcmVkIC0gZW50cnlfc2l6ZSkge1xcbitcXHRcXHRcXHRyZXQgPSAtRU9WRVJGTE9XO1xcbitcXHRcXHRcXHRudGZzX2F0dHJfbmFtZV9mcmVlKFxcdTAwMjZzbik7XFxuK1xcdFxcdFxcdGdvdG8gb3V0O1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRlbnRyeSA9IChzdHJ1Y3QgbnRmc19zdHJlYW1fZW50cnkgKikoa2J1ZiArIG9mZnNldCk7XFxuK1xcbitcXHRcXHRpZiAoYS1cXHUwMDNlbm9uX3Jlc2lkZW50KSB7XFxuK1xcdFxcdFxcdGVudHJ5LVxcdTAwM2VzaXplID0gbGU2NF90b19jcHUoYS1cXHUwMDNlZGF0YS5ub25fcmVzaWRlbnQuZGF0YV9zaXplKTtcXG4rXFx0XFx0XFx0ZW50cnktXFx1MDAzZWFsbG9jX3NpemUgPVxcbitcXHRcXHRcXHRcXHRsZTY0X3RvX2NwdShhLVxcdTAwM2VkYXRhLm5vbl9yZXNpZGVudC5hbGxvY2F0ZWRfc2l6ZSk7XFxuK1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRlbnRyeS1cXHUwMDNlc2l6ZSA9IGxlMzJfdG9fY3B1KGEtXFx1MDAzZWRhdGEucmVzaWRlbnQudmFsdWVfbGVuZ3RoKTtcXG4rXFx0XFx0XFx0ZW50cnktXFx1MDAzZWFsbG9jX3NpemUgPSBsZTMyX3RvX2NwdShhLVxcdTAwM2VsZW5ndGgpIC1cXG4rXFx0XFx0XFx0XFx0bGUxNl90b19jcHUoYS1cXHUwMDNlZGF0YS5yZXNpZGVudC52YWx1ZV9vZmZzZXQpO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRlbnRyeS1cXHUwMDNlbmFtZV9sZW4gPSBuYW1lX2xlbjtcXG4rXFx0XFx0aWYgKHV0ZjE2KVxcbitcXHRcXHRcXHRtZW1jcHkoZW50cnktXFx1MDAzZW5hbWUsXFxuK1xcdFxcdFxcdCAgICAgICAodTggKilhICsgbGUxNl90b19jcHUoYS1cXHUwMDNlbmFtZV9vZmZzZXQpLCBuYW1lX2xlbik7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0bWVtY3B5KGVudHJ5LVxcdTAwM2VuYW1lLCBzbiwgbmFtZV9sZW4pO1xcbitcXHRcXHRudGZzX2F0dHJfbmFtZV9mcmVlKFxcdTAwMjZzbik7XFxuK1xcbitcXHRcXHRlbnRyeS1cXHUwMDNlbmV4dF9lbnRyeV9vZmYgPSBlbnRyeV9zaXplO1xcbitcXHRcXHRsYXN0X2VudHJ5ID0gZW50cnk7XFxuK1xcdFxcdG9mZnNldCArPSBlbnRyeV9zaXplO1xcbitcXHR9XFxuK1xcdGlmIChlcnIgIT0gLUVOT0VOVCkge1xcbitcXHRcXHRyZXQgPSBlcnI7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdC8qIFRoZSBjaGFpbiB0ZXJtaW5hdGVzIGF0IHRoZSBsYXN0IGVudHJ5LiAqL1xcbitcXHRcXHRpZiAobGFzdF9lbnRyeSlcXG4rXFx0XFx0XFx0bGFzdF9lbnRyeS1cXHUwMDNlbmV4dF9lbnRyeV9vZmYgPSAwO1xcbitcXHRcXHRoZHIuYnl0ZXNfcmV0dXJuZWQgPSBvZmZzZXQ7XFxuK1xcdH1cXG4rXFxuK291dDpcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZuaS1cXHUwMDNlbXJlY19sb2NrKTtcXG4rXFx0bnRmc19hdHRyX3B1dF9zZWFyY2hfY3R4KGFjdHgpO1xcbitcXG4rXFx0aWYgKHJldCBcXHUwMDI2XFx1MDAyNiByZXQgIT0gLUVOT1NQQylcXG4rXFx0XFx0Z290byBvdXRfZnJlZTtcXG4rXFxuK1xcdGlmICghcmV0IFxcdTAwMjZcXHUwMDI2IGtidWYgXFx1MDAyNlxcdTAwMjYgY29weV90b191c2VyKHVidWYsIGtidWYsIGhkci5ieXRlc19yZXR1cm5lZCkpIHtcXG4rXFx0XFx0cmV0ID0gLUVGQVVMVDtcXG4rXFx0XFx0Z290byBvdXRfZnJlZTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKilhcmcsIFxcdTAwMjZoZHIsIHNpemVvZihoZHIpKSlcXG4rXFx0XFx0cmV0ID0gLUVGQVVMVDtcXG4rXFxuK291dF9mcmVlOlxcbitcXHRrdmZyZWUoa2J1Zik7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuIGxvbmcgbnRmc19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuIHtcXG4gXFx0c3dpdGNoIChjbWQpIHtcXG5AQCAtODUwLDYgKzEzNTEsMTQgQEAgbG9uZyBudGZzX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcXG4gXFx0XFx0cmV0dXJuIG50ZnNfaW9jdGxfc2V0X3ZvbHVtZV9sYWJlbChmaWxwLCBhcmcpO1xcbiBcXHRjYXNlIEZJVFJJTTpcXG4gXFx0XFx0cmV0dXJuIG50ZnNfaW9jdGxfZml0cmltKE5URlNfU0IoZmlsZV9pbm9kZShmaWxwKS1cXHUwMDNlaV9zYiksIGFyZyk7XFxuK1xcdGNhc2UgTlRGU19JT0NfU1RSRUFNX1JFQUQ6XFxuK1xcdFxcdHJldHVybiBudGZzX2lvY3RsX3N0cmVhbShmaWxwLCBhcmcsIE5URlNfU1RSRUFNX09QX1JFQUQpO1xcbitcXHRjYXNlIE5URlNfSU9DX1NUUkVBTV9XUklURTpcXG4rXFx0XFx0cmV0dXJuIG50ZnNfaW9jdGxfc3RyZWFtKGZpbHAsIGFyZywgTlRGU19TVFJFQU1fT1BfV1JJVEUpO1xcbitcXHRjYXNlIE5URlNfSU9DX1NUUkVBTV9SRU1PVkU6XFxuK1xcdFxcdHJldHVybiBudGZzX2lvY3RsX3N0cmVhbShmaWxwLCBhcmcsIE5URlNfU1RSRUFNX09QX1JFTU9WRSk7XFxuK1xcdGNhc2UgTlRGU19JT0NfTElTVF9TVFJFQU1TOlxcbitcXHRcXHRyZXR1cm4gbnRmc19pb2N0bF9saXN0X3N0cmVhbXMoZmlscCwgYXJnKTtcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0cmV0dXJuIC1FTk9UVFk7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L250ZnMuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9udGZzLmhcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmE1NzgzZGMzYjkwNTRcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L250ZnMuaFxcbkBAIC0wLDAgKzEsMTE1IEBAXFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIFdJVEggTGludXgtc3lzY2FsbC1ub3RlICovXFxuKy8qXFxuKyAqIENvcHlyaWdodCAoYykgMjAyNiBMRyBFbGVjdHJvbmljcyBDby4sIEx0ZC5cXG4rICovXFxuK1xcbisjaWZuZGVmIF9VQVBJX0xJTlVYX05URlNfSFxcbisjZGVmaW5lIF9VQVBJX0xJTlVYX05URlNfSFxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdHlwZXMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lvY3RsLmhcXHUwMDNlXFxuK1xcbisjZGVmaW5lIE5URlNfSU9DX01BR0lDXFx0MHhFRlxcbitcXG4rLypcXG4rICogRmxhZ3MgZm9yIG50ZnNfc3RyZWFtLmZsYWdzIGFuZCBudGZzX2xpc3Rfc3RyZWFtcy5mbGFncy5cXG4rICpcXG4rICogVGhlIHN0cmVhbSBuYW1lIGlzIHJhdyBVVEYtMTZMRSwgZXhhY3RseSBhcyBzdG9yZWQgb24gZGlzaywgaW5zdGVhZCBvZlxcbisgKiBiZWluZyBlbmNvZGVkIHdpdGggdGhlIG1vdW50ZWQgZmlsZXN5c3RlbSBOTFMuIFRoaXMgYWxsb3dzIGxvc3NsZXNzXFxuKyAqIHJvdW5kLXRyaXBwaW5nIG9mIHN0cmVhbSBuYW1lcyB3aG9zZSBjaGFyYWN0ZXJzIGFyZSBub3QgcmVwcmVzZW50YWJsZVxcbisgKiBpbiB0aGUgbW91bnQgTkxTIChlLmcuIGZvciBXaW5lLCB3aGljaCB3b3JrcyBpbiBVVEYtMTYgbmF0aXZlbHkpLlxcbisgKiBXaGVuIHNldCwgdGhlIG5hbWUgbGVuZ3RoIGZpZWxkcyBjb3VudCBieXRlcyBvZiBVVEYtMTZMRSBhbmQgbXVzdFxcbisgKiB0aGVyZWZvcmUgYmUgZXZlbi5cXG4rICovXFxuKyNkZWZpbmUgTlRGU19TVFJFQU1fRkxfVVRGMTZcXHQweDFcXG4rXFxuKy8qXFxuKyAqIG50ZnMgbmFtZWQgc3RyZWFtIGlvY3RsIHN0cnVjdHVyZS5cXG4rICpcXG4rICogQHN0cmVhbV9vZmZzZXQ6XFx0T2Zmc2V0IHdpdGhpbiB0aGUgbmFtZWQgc3RyZWFtLlxcbisgKiBAaW9fbGVuOlxcdFxcdE51bWJlciBvZiBieXRlcyB0byByZWFkL3dyaXRlLlxcbisgKiBAYnl0ZXNfcmV0dXJuZWQ6XFx0QWN0dWFsIGJ5dGVzIHRyYW5zZmVycmVkIChvdXQpLlxcbisgKiBAbmFtZV9sZW46XFx0XFx0U3RyZWFtIG5hbWUgbGVuZ3RoIGluIGJ5dGVzLCBub3QgaW5jbHVkaW5nIGFueVxcbisgKlxcdFxcdFxcdHRlcm1pbmF0aW5nIE5VTCAod2hpY2ggbXVzdCBub3QgYmUgcHJlc2VudCkuIFdoZW5cXG4rICpcXHRcXHRcXHROVEZTX1NUUkVBTV9GTF9VVEYxNiBpcyBzZXQgdGhpcyBpcyBhIFVURi0xNkxFIGJ5dGVcXG4rICpcXHRcXHRcXHRjb3VudCBhbmQgbXVzdCBiZSBldmVuLlxcbisgKiBAZmxhZ3M6XFx0XFx0Qml0IG1hc2sgb2YgTlRGU19TVFJFQU1fRkxfKiBmbGFncy4gb3RoZXIgYml0cyBtdXN0IGJlXFxuKyAqXFx0XFx0XFx0emVyby5cXG4rICogQHJlc2VydmVkOlxcdFxcdE11c3QgYmUgemVyby5cXG4rICogQGJ1ZmZlcjpcXHRcXHRTdHJlYW0gbmFtZSBmb2xsb3dlZCBieSBzdHJlYW0gZGF0YS5cXG4rICpcXG4rICogVGhlIHN0cmVhbSBuYW1lIGlzIHRoZSBiYXJlIHN0cmVhbSBuYW1lLCB3aXRob3V0IHRoZSBsZWFkaW5nICc6JyBvciB0aGVcXG4rICogdHJhaWxpbmcgXFxcIjokREFUQVxcXCIgZGVjb3JhdGlvbiB1c2VkIGJ5IFdpbmRvd3MuIEJ5IGRlZmF1bHQgaXQgaXMgZW5jb2RlZCB3aXRoXFxuKyAqIHRoZSBtb3VudGVkIGZpbGVzeXN0ZW0gTkxTLiBJZiBOVEZTX1NUUkVBTV9GTF9VVEYxNiBpcyBzZXQgaW4gQGZsYWdzIGl0IGlzXFxuKyAqIHJhdyBVVEYtMTZMRSBpbnN0ZWFkLiBGb3IgcmVhZCBhbmQgd3JpdGUsIEBpb19sZW4gYnl0ZXMgb2YgZGF0YSBmb2xsb3cgdGhlXFxuKyAqIG5hbWUuIEZvciByZW1vdmUsIG9ubHkgdGhlIG5hbWUgaXMgcmVxdWlyZWQgYW5kIEBpb19sZW4gbXVzdCBiZSB6ZXJvLlxcbisgKi9cXG4rc3RydWN0IG50ZnNfc3RyZWFtIHtcXG4rXFx0X19hbGlnbmVkX3U2NCBzdHJlYW1fb2Zmc2V0O1xcbitcXHRfX2FsaWduZWRfdTY0IGlvX2xlbjtcXG4rXFx0X19hbGlnbmVkX3U2NCBieXRlc19yZXR1cm5lZDtcXG4rXFx0X191MzIgbmFtZV9sZW47XFxuK1xcdF9fdTMyIGZsYWdzO1xcbitcXHRfX2FsaWduZWRfdTY0IHJlc2VydmVkO1xcbitcXHRfX3U4IGJ1ZmZlcltdOyAvKiBuYW1lICsgZGF0YSAqL1xcbit9O1xcbitcXG4rLypcXG4rICogU2luZ2xlIHN0cmVhbSBlbnRyeSByZXR1cm5lZCBieSBOVEZTX0lPQ19MSVNUX1NUUkVBTVMuXFxuKyAqXFxuKyAqIEBuZXh0X2VudHJ5X29mZjpcXHRCeXRlIG9mZnNldCBmcm9tIHRoZSBzdGFydCBvZiB0aGlzIGVudHJ5IHRvIHRoZSBuZXh0XFxuKyAqXFx0XFx0XFx0ZW50cnksIG9yIHplcm8gZm9yIHRoZSBsYXN0IGVudHJ5LiBBbHdheXMgYSBtdWx0aXBsZVxcbisgKlxcdFxcdFxcdG9mIDguIENvbnN1bWVycyBtdXN0IHVzZSB0aGlzIHRvIGFkdmFuY2UgaW5zdGVhZCBvZlxcbisgKlxcdFxcdFxcdGNvbXB1dGluZyB0aGUgc3RyaWRlIHRoZW1zZWx2ZXMsIHNvIHRoZSBlbnRyeSBjYW4gZ3Jvd1xcbisgKlxcdFxcdFxcdG5ldyBmaWVsZHMgd2l0aG91dCBicmVha2luZyB0aGUgQUJJLlxcbisgKiBAc2l6ZTpcXHRcXHRTdHJlYW0gZGF0YSBzaXplIGluIGJ5dGVzLlxcbisgKiBAYWxsb2Nfc2l6ZTpcXHRcXHRCeXRlcyBhbGxvY2F0ZWQgZm9yIHRoZSBzdHJlYW0gKGNsdXN0ZXIgYWxpZ25lZCBmb3JcXG4rICpcXHRcXHRcXHRub24tcmVzaWRlbnQgc3RyZWFtcykuXFxuKyAqIEBuYW1lX2xlbjpcXHRcXHRTdHJlYW0gbmFtZSBsZW5ndGggaW4gYnl0ZXMsIG5vdCBpbmNsdWRpbmcgYSBOVUxcXG4rICpcXHRcXHRcXHR0ZXJtaW5hdG9yIChub25lIGlzIHN0b3JlZCkuIENvdW50cyBVVEYtMTZMRSBieXRlc1xcbisgKlxcdFxcdFxcdHdoZW4gTlRGU19TVFJFQU1fRkxfVVRGMTYgd2FzIHJlcXVlc3RlZC5cXG4rICogQHJlc2VydmVkOlxcdFxcdE11c3QgYmUgemVyby5cXG4rICogQG5hbWU6XFx0XFx0QmFyZSBzdHJlYW0gbmFtZTsgTkxTIGVuY29kZWQsIG9yIHJhdyBVVEYtMTZMRSB3aGVuXFxuKyAqXFx0XFx0XFx0TlRGU19TVFJFQU1fRkxfVVRGMTYgd2FzIHJlcXVlc3RlZCAoc2VlIHN0cnVjdFxcbisgKlxcdFxcdFxcdG50ZnNfc3RyZWFtKS5cXG4rICovXFxuK3N0cnVjdCBudGZzX3N0cmVhbV9lbnRyeSB7XFxuK1xcdF9fYWxpZ25lZF91NjQgbmV4dF9lbnRyeV9vZmY7XFxuK1xcdF9fYWxpZ25lZF91NjQgc2l6ZTtcXG4rXFx0X19hbGlnbmVkX3U2NCBhbGxvY19zaXplO1xcbitcXHRfX3UzMiBuYW1lX2xlbjtcXG4rXFx0X191MzIgcmVzZXJ2ZWQ7XFxuK1xcdF9fdTggbmFtZVtdO1xcbit9O1xcbitcXG4rLypcXG4rICogbnRmcyBsaXN0IHN0cmVhbXMgaW9jdGwgc3RydWN0dXJlLlxcbisgKlxcbisgKiBAYnVmZmVyX3NpemU6XFx0dXNlciBidWZmZXIgc2l6ZShpbikuXFxuKyAqIEBieXRlc19yZXR1cm5lZDpcXHRhY3R1YWwgYnl0ZXMgd3JpdHRlbiBvciByZXF1aXJlZChvdXQpLlxcbisgKiBAc3RyZWFtX2NvdW50OlxcdG51bWJlciBvZiBzdHJlYW1zKG91dCkuXFxuKyAqIEBmbGFnczpcXHRcXHRCaXQgbWFzayBvZiBOVEZTX1NUUkVBTV9GTF8qIGZsYWdzIGNvbnRyb2xsaW5nIHRoZVxcbisgKlxcdFxcdFxcdGVuY29kaW5nIG9mIHRoZSByZXR1cm5lZCBuYW1lczsgb3RoZXIgYml0cyBtdXN0IGJlIHplcm8uXFxuKyAqIEByZXNlcnZlZDpcXHRcXHRNdXN0IGJlIHplcm8uXFxuKyAqIEBidWZmZXI6XFx0XFx0bnRmc19zdHJlYW1fZW50cnkgYXJyYXkuXFxuKyAqXFxuKyAqIFRoZSB2YXJpYWJsZS1sZW5ndGggZW50cmllcyBmb2xsb3cgdGhlIGhlYWRlciBpbiBAYnVmZmVyLCBlYWNoIGFsaWduZWQgb25cXG4rICogYW4gOC1ieXRlIGJvdW5kYXJ5IGFuZCBjaGFpbmVkIHZpYSBudGZzX3N0cmVhbV9lbnRyeS5uZXh0X2VudHJ5X29mZi4gSWZcXG4rICogQGJ1ZmZlcl9zaXplIGlzIHRvbyBzbWFsbCwgbm8gZGF0YSBpcyBjb3BpZWQsIEBzdHJlYW1fY291bnQgYW5kXFxuKyAqIEBieXRlc19yZXR1cm5lZCByZXBvcnQgdGhlIHJlcXVpcmVkIHZhbHVlcyBhbmQgdGhlIGlvY3RsIGZhaWxzIHdpdGhcXG4rICogLUVOT1NQQy5cXG4rICovXFxuK3N0cnVjdCBudGZzX2xpc3Rfc3RyZWFtcyB7XFxuK1xcdF9fYWxpZ25lZF91NjQgYnVmZmVyX3NpemU7XFxuK1xcdF9fYWxpZ25lZF91NjQgYnl0ZXNfcmV0dXJuZWQ7XFxuK1xcdF9fYWxpZ25lZF91NjQgc3RyZWFtX2NvdW50O1xcbitcXHRfX3UzMiBmbGFncztcXG4rXFx0X191MzIgcmVzZXJ2ZWQ7XFxuK1xcdF9fdTggYnVmZmVyW107XFxuK307XFxuK1xcbisjZGVmaW5lIE5URlNfSU9DX1NUUkVBTV9SRUFEXFx0XFx0X0lPV1IoTlRGU19JT0NfTUFHSUMsIDEsIHN0cnVjdCBudGZzX3N0cmVhbSlcXG4rI2RlZmluZSBOVEZTX0lPQ19TVFJFQU1fV1JJVEVcXHRcXHRfSU9XUihOVEZTX0lPQ19NQUdJQywgMiwgc3RydWN0IG50ZnNfc3RyZWFtKVxcbisjZGVmaW5lIE5URlNfSU9DX1NUUkVBTV9SRU1PVkVcXHRcXHRfSU9XUihOVEZTX0lPQ19NQUdJQywgMywgc3RydWN0IG50ZnNfc3RyZWFtKVxcbisjZGVmaW5lIE5URlNfSU9DX0xJU1RfU1RSRUFNU1xcdFxcdF9JT1dSKE5URlNfSU9DX01BR0lDLCA0LCBzdHJ1Y3QgbnRmc19saXN0X3N0cmVhbXMpXFxuK1xcbisjZW5kaWYgLyogX1VBUElfTElOVVhfTlRGU19IICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE3OjExOjMzLjM3NjUwOTQyMVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjU4NzgzMDAyMDQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5URlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJudGZzX2lvY3RsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBuZXcgaW9jdGxzIHRvIHRoZSBOVEZTIGZpbGVzeXN0ZW0gdG8gcmVhZCwgd3JpdGUsIHJlbW92ZSwgYW5kIGxpc3QgbmFtZWQgc3RyZWFtcyAoQWx0ZXJuYXRlIERhdGEgU3RyZWFtcykuIFRoZSBpb2N0bHMgYXJlIHJlYWNoYWJsZSB2aWEgYG50ZnNfaW9jdGxgLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjMmQ1NTYzN2YzN2I2M2Y0YjcxMDgxYjc4MDRhZDljZTc5NGYyYWE5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMzAgMTc6MTE6MzIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VzZXJzcGFjZS1hcGkvaW9jdGwvaW9jdGwtbnVtYmVyLnJzdCBiL0RvY3VtZW50YXRpb24vdXNlcnNwYWNlLWFwaS9pb2N0bC9pb2N0bC1udW1iZXIucnN0XG5pbmRleCAzZjBlZjFlMjdlYjA3Li4yYjk4NjlhZWI4MTFiIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi91c2Vyc3BhY2UtYXBpL2lvY3RsL2lvY3RsLW51bWJlci5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vdXNlcnNwYWNlLWFwaS9pb2N0bC9pb2N0bC1udW1iZXIucnN0XG5AQCAtMzk5LDYgKzM5OSw3IEBAIENvZGUgIFNlcSMgICAgSW5jbHVkZSBGaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tbWVudHNcbiAweEU1ICAwMC0zRiAgbGludXgvZnVzZS5oXG4gMHhFQyAgMDAtMDEgIGRyaXZlcnMvcGxhdGZvcm0vY2hyb21lL2Nyb3NfZWNfZGV2LmggICAgICAgICAgICAgICAgICAgICBDaHJvbWVPUyBFQyBkcml2ZXJcbiAweEVFICAwMC0wOSAgdWFwaS9saW51eC9wZnJ1dC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsYXRmb3JtIEZpcm13YXJlIFJ1bnRpbWUgVXBkYXRlIGFuZCBUZWxlbWV0cnlcbisweEVGICAwMC0wRiAgdWFwaS9saW51eC9udGZzLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5URlNcbiAweEYzICAwMC0zRiAgZHJpdmVycy91c2IvbWlzYy9zaXN1c2J2Z2Evc2lzdXNiLmggICAgICAgICAgICAgICAgICAgICAgIHNpc2ZiIChpbiBkZXZlbG9wbWVudClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFx1MDAzY21haWx0bzp0aG9tYXNAd2luaXNjaGhvZmVyLm5ldFx1MDAzZVxuIDB4RjYgIGFsbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRUbmcgTGludXggVHJhY2UgVG9vbGtpdCBOZXh0IEdlbmVyYXRpb25cbmRpZmYgLS1naXQgYS9mcy9udGZzL2ZpbGUuYyBiL2ZzL250ZnMvZmlsZS5jXG5pbmRleCBkNDI4MjgyMmIzY2VmLi45NjFiOTRmNTQ1ZjJjIDEwMDY0NFxuLS0tIGEvZnMvbnRmcy9maWxlLmNcbisrKyBiL2ZzL250ZnMvZmlsZS5jXG5AQCAtMTUsNiArMTUsOCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3Bvc2l4X2FjbF94YXR0ci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY29tcGF0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9mYWxsb2MuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L292ZXJmbG93LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2N1YXBpL2xpbnV4L250ZnMuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwibGNuYWxsb2MuaFwiXG4gI2luY2x1ZGUgXCJudGZzLmhcIlxuQEAgLTIzLDYgKzI1LDcgQEBcbiAjaW5jbHVkZSBcImlvbWFwLmhcIlxuICNpbmNsdWRlIFwiYml0bWFwLmhcIlxuICNpbmNsdWRlIFwidm9sdW1lLmhcIlxuKyNpbmNsdWRlIFwibWZ0LmhcIlxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZpbGVsb2NrLmhcdTAwM2VcbiBcbkBAIC04MzksNiArODQyLDUwNCBAQCBzdGF0aWMgaW50IG50ZnNfaW9jdGxfZml0cmltKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sLCB1bnNpZ25lZCBsb25nIGFyZylcbiBcdHJldHVybiAwO1xuIH1cbiBcbisjZGVmaW5lIE5URlNfU1RSRUFNX01BWF9JT1x0KDE2ICogMTAyNCAqIDEwMjQpIC8qIDE2TUIgbGltaXQgKi9cbitcbisvKlxuKyAqIG50ZnNfcmVhZF9uYW1lZF9zdHJlYW0gLSBSZWFkIGRhdGEgZnJvbSBhIG5hbWVkICREQVRBIHN0cmVhbS5cbisgKlxuKyAqIEBuaTpcdFx0TlRGUyBpbm9kZVxuKyAqIEB1bmFtZTpcdFN0cmVhbSBuYW1lXG4rICogQHVuYW1lX2xlbjpcdExlbmd0aCBvZiBuYW1lIGluIFVuaWNvZGUgY2hhcmFjdGVyc1xuKyAqIEBvZmZzZXQ6XHRCeXRlIG9mZnNldCBpbiB0aGUgc3RyZWFtXG4rICogQGxlbjpcdE51bWJlciBvZiBieXRlcyB0byByZWFkXG4rICogQGRhdGFfYnVmOlx0QnVmZmVyIHRvIGNvcHkgZGF0YSB0b1xuKyAqXG4rICogUmV0dXJuOlx0MCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS5cbisgKlx0XHRJZiBvZmZzZXQgXHUwMDNlPSBzdHJlYW0gc2l6ZSwgcmV0dXJucyAwLlxuKyAqL1xuK3N0YXRpYyBpbnQgbnRmc19yZWFkX25hbWVkX3N0cmVhbShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIF9fbGUxNiAqdW5hbWUsXG4rXHRcdHUzMiB1bmFtZV9sZW4sIHU2NCBvZmZzZXQsIHU2NCBsZW4sIHZvaWQgKmRhdGFfYnVmLFxuK1x0XHR1NjQgKnJieXRlcylcbit7XG4rXHRzdHJ1Y3QgbnRmc19hdHRyX3NlYXJjaF9jdHggKmN0eDtcbitcdHN0cnVjdCBpbm9kZSAqYXR0cl92aTtcbitcdGludCBlcnIgPSAwO1xuK1x0dTY0IGRhdGFfc2l6ZTtcbitcdHM2NCBieXRlcztcbitcdGNoYXIgKnJidWYgPSBOVUxMO1xuK1xuK1x0aWYgKCFuaSB8fCAhdW5hbWUgfHwgdW5hbWVfbGVuID09IDApXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0aWYgKGxlbiA9PSAwIHx8IGxlbiBcdTAwM2UgTlRGU19TVFJFQU1fTUFYX0lPKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2bmktXHUwMDNlbXJlY19sb2NrKTtcbitcdGN0eCA9IG50ZnNfYXR0cl9nZXRfc2VhcmNoX2N0eChuaSwgTlVMTCk7XG4rXHRpZiAoIWN0eCkge1xuK1x0XHRtdXRleF91bmxvY2soXHUwMDI2bmktXHUwMDNlbXJlY19sb2NrKTtcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHR9XG4rXG4rXHRlcnIgPSBudGZzX2F0dHJfbG9va3VwKEFUX0RBVEEsIHVuYW1lLCB1bmFtZV9sZW4sIENBU0VfU0VOU0lUSVZFLCAwLFxuK1x0XHRcdE5VTEwsIDAsIGN0eCk7XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIG91dF9sb2NrO1xuK1xuK1x0aWYgKGN0eC1cdTAwM2VhdHRyLVx1MDAzZW5vbl9yZXNpZGVudClcbitcdFx0ZGF0YV9zaXplID0gbGU2NF90b19jcHUoY3R4LVx1MDAzZWF0dHItXHUwMDNlZGF0YS5ub25fcmVzaWRlbnQuZGF0YV9zaXplKTtcbitcdGVsc2VcbitcdFx0ZGF0YV9zaXplID0gbGUzMl90b19jcHUoY3R4LVx1MDAzZWF0dHItXHUwMDNlZGF0YS5yZXNpZGVudC52YWx1ZV9sZW5ndGgpO1xuK1xuK1x0aWYgKG9mZnNldCBcdTAwM2U9IGRhdGFfc2l6ZSkge1xuK1x0XHQqcmJ5dGVzID0gMDtcbitcdFx0LyogRU9GOiBub3RoaW5nIHRvIHJlYWQgKi9cbitcdFx0Z290byBvdXRfbG9jaztcbitcdH1cbitcbitcdC8qIEFkanVzdCBsZW5ndGggdG8gbm90IHJlYWQgYmV5b25kIEVPRiAqL1xuK1x0aWYgKGxlbiBcdTAwM2UgZGF0YV9zaXplIC0gb2Zmc2V0KVxuK1x0XHRsZW4gPSBkYXRhX3NpemUgLSBvZmZzZXQ7XG4rXG4rXHRhdHRyX3ZpID0gbnRmc19hdHRyX2lnZXQoVkZTX0kobmkpLCBBVF9EQVRBLCB1bmFtZSwgdW5hbWVfbGVuKTtcbitcdG50ZnNfYXR0cl9wdXRfc2VhcmNoX2N0eChjdHgpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNm5pLVx1MDAzZW1yZWNfbG9jayk7XG4rXG4rXHRpZiAoSVNfRVJSKGF0dHJfdmkpKSB7XG4rXHRcdGVyciA9IFBUUl9FUlIoYXR0cl92aSk7XG4rXHRcdGdvdG8gb3V0X2ZyZWU7XG4rXHR9XG4rXG4rXHRyYnVmID0ga3Z6YWxsb2MobGVuLCBHRlBfTk9GUyk7XG4rXHRpZiAoIXJidWYpIHtcbitcdFx0ZXJyID0gLUVOT01FTTtcbitcdFx0aXB1dChhdHRyX3ZpKTtcbitcdFx0Z290byBvdXRfZnJlZTtcbitcdH1cbitcbitcdGJ5dGVzID0gbnRmc19pbm9kZV9hdHRyX3ByZWFkKGF0dHJfdmksIG9mZnNldCwgbGVuLCByYnVmKTtcbitcdGlwdXQoYXR0cl92aSk7XG4rXHRpZiAoYnl0ZXMgXHUwMDNjIDApIHtcbitcdFx0ZXJyID0gYnl0ZXM7XG4rXHRcdGdvdG8gb3V0X2ZyZWU7XG4rXHR9XG4rXG4rXHQqcmJ5dGVzID0gYnl0ZXM7XG4rXHRtZW1jcHkoZGF0YV9idWYsIHJidWYsIGJ5dGVzKTtcbitcbitvdXRfZnJlZTpcbitcdGt2ZnJlZShyYnVmKTtcbitcdHJldHVybiBlcnI7XG4rXG4rb3V0X2xvY2s6XG4rXHRudGZzX2F0dHJfcHV0X3NlYXJjaF9jdHgoY3R4KTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZuaS1cdTAwM2VtcmVjX2xvY2spO1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4rLypcbisgKiBudGZzX3dyaXRlX25hbWVkX3N0cmVhbSAtIFdyaXRlIGRhdGEgZnJvbSBhIG5hbWVkICREQVRBIHN0cmVhbS5cbisgKlxuKyAqIEBuaTpcdFx0TlRGUyBpbm9kZVxuKyAqIEB1bmFtZTpcdFN0cmVhbSBuYW1lXG4rICogQHVuYW1lX2xlbjpcdExlbmd0aCBvZiBuYW1lIGluIFVuaWNvZGUgY2hhcmFjdGVyc1xuKyAqIEBvZmZzZXQ6XHRCeXRlIG9mZnNldCBpbiB0aGUgc3RyZWFtXG4rICogQGxlbjpcdE51bWJlciBvZiBieXRlcyB0byB3cml0ZVxuKyAqIEBkYXRhX3N0cmVhbTogRGF0YSB0byB3cml0ZVxuKyAqXG4rICogUmV0dXJuOlx0MCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS5cbisgKi9cbitzdGF0aWMgaW50IG50ZnNfd3JpdGVfbmFtZWRfc3RyZWFtKHN0cnVjdCBudGZzX2lub2RlICpuaSwgX19sZTE2ICp1bmFtZSxcbitcdFx0dTMyIHVuYW1lX2xlbiwgdTY0IG9mZnNldCwgdTY0IGxlbiwgdm9pZCAqZGF0YV9zdHJlYW0sXG4rXHRcdHU2NCAqd2J5dGVzKVxuK3tcbitcdHN0cnVjdCBudGZzX2F0dHJfc2VhcmNoX2N0eCAqY3R4O1xuK1x0c3RydWN0IGlub2RlICphdHRyX3ZpO1xuK1x0aW50IGVycjtcbitcdHM2NCBieXRlcztcbitcbitcdGlmICghbmkgfHwgIXVuYW1lIHx8IHVuYW1lX2xlbiA9PSAwIHx8ICFkYXRhX3N0cmVhbSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRpZiAobGVuID09IDAgfHwgbGVuIFx1MDAzZSBOVEZTX1NUUkVBTV9NQVhfSU8pXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZuaS1cdTAwM2VtcmVjX2xvY2spO1xuK1x0Y3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBOVUxMKTtcbitcdGlmICghY3R4KSB7XG4rXHRcdGVyciA9IC1FTk9NRU07XG4rXHRcdGdvdG8gb3V0X3VubG9jaztcbitcdH1cbitcbitcdGVyciA9IG50ZnNfYXR0cl9sb29rdXAoQVRfREFUQSwgdW5hbWUsIHVuYW1lX2xlbiwgQ0FTRV9TRU5TSVRJVkUsIDAsXG4rXHRcdFx0TlVMTCwgMCwgY3R4KTtcbitcdGlmIChlcnIpIHtcbitcdFx0aWYgKGVyciAhPSAtRU5PRU5UKVxuK1x0XHRcdGdvdG8gb3V0X3VubG9jaztcbitcdFx0ZXJyID0gbnRmc19hdHRyX2FkZChuaSwgQVRfREFUQSwgdW5hbWUsIHVuYW1lX2xlbiwgTlVMTCwgMCk7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0Z290byBvdXRfdW5sb2NrO1xuK1x0XHRtYXJrX21mdF9yZWNvcmRfZGlydHkobmkpO1xuK1x0fVxuK1xuK1x0YXR0cl92aSA9IG50ZnNfYXR0cl9pZ2V0KFZGU19JKG5pKSwgQVRfREFUQSwgdW5hbWUsIHVuYW1lX2xlbik7XG4rXHRudGZzX2F0dHJfcHV0X3NlYXJjaF9jdHgoY3R4KTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZuaS1cdTAwM2VtcmVjX2xvY2spO1xuK1xuK1x0aWYgKElTX0VSUihhdHRyX3ZpKSkge1xuK1x0XHRlcnIgPSBQVFJfRVJSKGF0dHJfdmkpO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdGJ5dGVzID0gbnRmc19pbm9kZV9hdHRyX3B3cml0ZShhdHRyX3ZpLCBvZmZzZXQsIGxlbiwgZGF0YV9zdHJlYW0sXG4rXHRcdFx0XHQgICAgICAgZmFsc2UpO1xuK1x0aWYgKGJ5dGVzIFx1MDAzYyAwKVxuK1x0XHRlcnIgPSBieXRlcztcbitcdGVsc2VcbitcdFx0KndieXRlcyA9IGJ5dGVzO1xuK1x0aXB1dChhdHRyX3ZpKTtcbitcbitvdXQ6XG4rXHRyZXR1cm4gZXJyO1xuK1xuK291dF91bmxvY2s6XG4rXHRpZiAoY3R4KVxuK1x0XHRudGZzX2F0dHJfcHV0X3NlYXJjaF9jdHgoY3R4KTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZuaS1cdTAwM2VtcmVjX2xvY2spO1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4rLypcbisgKiBudGZzX3JlbW92ZV9uYW1lZF9zdHJlYW0gLSBSZW1vdmUgYSBuYW1lZCAkREFUQSBzdHJlYW0uXG4rICpcbisgKiBAbmk6XHRcdE5URlMgaW5vZGVcbisgKiBAdW5hbWU6XHRTdHJlYW0gbmFtZVxuKyAqIEB1bmFtZV9sZW46XHROYW1lIGxlbmd0aCBpbiBVbmljb2RlIGNoYXJhY3RlcnNcbisgKlxuKyAqIFJldHVybjpcdDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3JcbisgKiAgICAgICAgICAgICAgLUVOT0VOVCBpZiBzdHJlYW0gbm90IGZvdW5kXG4rICovXG4rc3RhdGljIGludCBudGZzX3JlbW92ZV9uYW1lZF9zdHJlYW0oc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBfX2xlMTYgKnVuYW1lLFxuK1x0XHR1MzIgdW5hbWVfbGVuKVxuK3tcbitcdGlmICghbmkgfHwgIXVuYW1lIHx8IHVuYW1lX2xlbiA9PSAwKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdHJldHVybiBudGZzX2F0dHJfcmVtb3ZlKG5pLCBBVF9EQVRBLCB1bmFtZSwgdW5hbWVfbGVuKTtcbit9XG4rXG4rZW51bSBudGZzX3N0cmVhbV9vcCB7XG4rXHROVEZTX1NUUkVBTV9PUF9SRUFELFxuK1x0TlRGU19TVFJFQU1fT1BfV1JJVEUsXG4rXHROVEZTX1NUUkVBTV9PUF9SRU1PVkUsXG4rfTtcbitcbitzdGF0aWMgbG9uZyBudGZzX2lvY3RsX3N0cmVhbShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhcmcsXG4rXHRcdFx0ICAgICAgZW51bSBudGZzX3N0cmVhbV9vcCBvcClcbit7XG4rXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShmaWxwKTtcbitcdHN0cnVjdCBudGZzX2lub2RlICpuaSA9IE5URlNfSShpbm9kZSk7XG4rXHRzdHJ1Y3QgbnRmc19zdHJlYW0gX191c2VyICp1cmVxID1cbitcdFx0KHN0cnVjdCBudGZzX3N0cmVhbSBfX3VzZXIgKilhcmc7XG4rXHRzdHJ1Y3QgbnRmc19zdHJlYW0gKnJlcTtcbitcdHNpemVfdCBoZWFkZXJfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgbnRmc19zdHJlYW0pO1xuK1x0c2l6ZV90IGRhdGFfc2l6ZSwgdG90YWxfc2l6ZTtcbitcdGNoYXIgKmtuYW1lLCAqa2RhdGE7XG4rXHRfX2xlMTYgKnVuYW1lID0gTlVMTCwgKnNuYW1lO1xuK1x0aW50IGVyciA9IDAsIHNuYW1lX2xlbjtcbitcdGJvb2wgdXRmMTY7XG4rXHRzdHJ1Y3QgbnRmc19zdHJlYW0gaGRyO1xuK1xuK1x0LyogRmlyc3QgY29weSBmaXhlZCBoZWFkZXIgKi9cbitcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZoZHIsIHVyZXEsIGhlYWRlcl9zaXplKSlcbitcdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXG4rXHRpZiAoaGRyLmlvX2xlbiBcdTAwM2UgTlRGU19TVFJFQU1fTUFYX0lPIHx8XG4rXHQgICAgKGhkci5mbGFncyBcdTAwMjYgfk5URlNfU1RSRUFNX0ZMX1VURjE2KSB8fCBoZHIucmVzZXJ2ZWQpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0dXRmMTYgPSBoZHIuZmxhZ3MgXHUwMDI2IE5URlNfU1RSRUFNX0ZMX1VURjE2O1xuK1xuK1x0aWYgKGhkci5uYW1lX2xlbiA9PSAwKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdGlmICh1dGYxNikge1xuK1x0XHQvKiBVVEYtMTZMRSBieXRlIGNvdW50OiBtdXN0IGJlIGV2ZW4gYW5kIHdpdGhpbiB0aGUgbGltaXQuICovXG4rXHRcdGlmICgoaGRyLm5hbWVfbGVuIFx1MDAyNiAxKSB8fFxuK1x0XHQgICAgaGRyLm5hbWVfbGVuIFx1MDAzZSBOVEZTX01BWF9OQU1FX0xFTiAqIHNpemVvZihfX2xlMTYpKVxuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fSBlbHNlIGlmIChoZHIubmFtZV9sZW4gXHUwMDNlIE5URlNfTUFYX05BTUVfTEVOKSB7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0c3dpdGNoIChvcCkge1xuK1x0Y2FzZSBOVEZTX1NUUkVBTV9PUF9SRUFEOlxuK1x0XHRpZiAoIShmaWxwLVx1MDAzZWZfbW9kZSBcdTAwMjYgRk1PREVfUkVBRCkgfHwgaGRyLmlvX2xlbiA9PSAwKVxuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHRkYXRhX3NpemUgPSBoZHIuaW9fbGVuO1xuK1x0XHRicmVhaztcbitcdGNhc2UgTlRGU19TVFJFQU1fT1BfV1JJVEU6XG4rXHRcdGlmICghKGZpbHAtXHUwMDNlZl9tb2RlIFx1MDAyNiBGTU9ERV9XUklURSkgfHwgaGRyLmlvX2xlbiA9PSAwKVxuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHRkYXRhX3NpemUgPSBoZHIuaW9fbGVuO1xuK1x0XHRicmVhaztcbitcdGNhc2UgTlRGU19TVFJFQU1fT1BfUkVNT1ZFOlxuK1x0XHRpZiAoIShmaWxwLVx1MDAzZWZfbW9kZSBcdTAwMjYgRk1PREVfV1JJVEUpIHx8IGhkci5pb19sZW4gIT0gMClcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0ZGF0YV9zaXplID0gMDtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gLUVOT1RUWTtcbitcdH1cbitcbitcdGlmIChjaGVja19hZGRfb3ZlcmZsb3coaGVhZGVyX3NpemUsIChzaXplX3QpaGRyLm5hbWVfbGVuLCBcdTAwMjZ0b3RhbF9zaXplKSB8fFxuK1x0ICAgIGNoZWNrX2FkZF9vdmVyZmxvdyh0b3RhbF9zaXplLCBkYXRhX3NpemUsIFx1MDAyNnRvdGFsX3NpemUpKVxuK1x0XHRyZXR1cm4gLUVPVkVSRkxPVztcbitcbitcdHJlcSA9IG1lbWR1cF91c2VyKHVyZXEsIHRvdGFsX3NpemUpO1xuK1x0aWYgKElTX0VSUihyZXEpKVxuK1x0XHRyZXR1cm4gUFRSX0VSUihyZXEpO1xuK1xuK1x0cmVxLVx1MDAzZWJ5dGVzX3JldHVybmVkID0gMDtcbitcbitcdGtuYW1lID0gKGNoYXIgKilyZXEtXHUwMDNlYnVmZmVyO1xuK1x0a2RhdGEgPSAoY2hhciAqKXJlcS1cdTAwM2VidWZmZXIgKyByZXEtXHUwMDNlbmFtZV9sZW47XG4rXG4rXHRpZiAocmVxLVx1MDAzZW5hbWVfbGVuICE9IGhkci5uYW1lX2xlbiB8fCByZXEtXHUwMDNlaW9fbGVuICE9IGhkci5pb19sZW4gfHxcbitcdCAgICByZXEtXHUwMDNlZmxhZ3MgIT0gaGRyLmZsYWdzIHx8IHJlcS1cdTAwM2VyZXNlcnZlZCkge1xuK1x0XHRlcnIgPSAtRUlOVkFMO1xuK1x0XHRnb3RvIG91dF9mcmVlO1xuK1x0fVxuK1xuK1x0aWYgKHV0ZjE2KSB7XG4rXHRcdC8qIE5hbWUgaXMgYWxyZWFkeSBvbi1kaXNrIFVURi0xNkxFOyB1c2UgaXQgaW4gcGxhY2UuICovXG4rXHRcdHNuYW1lID0gKF9fbGUxNiAqKWtuYW1lO1xuK1x0XHRzbmFtZV9sZW4gPSByZXEtXHUwMDNlbmFtZV9sZW4gLyBzaXplb2YoX19sZTE2KTtcbitcdH0gZWxzZSB7XG4rXHRcdGlmIChtZW1jaHIoa25hbWUsICdcXDAnLCByZXEtXHUwMDNlbmFtZV9sZW4pKSB7XG4rXHRcdFx0ZXJyID0gLUVJTlZBTDtcbitcdFx0XHRnb3RvIG91dF9mcmVlO1xuK1x0XHR9XG4rXHRcdHNuYW1lX2xlbiA9IG50ZnNfbmxzdG91Y3MobmktXHUwMDNldm9sLCBrbmFtZSwgcmVxLVx1MDAzZW5hbWVfbGVuLFxuK1x0XHRcdFx0XHUwMDI2dW5hbWUsIE5URlNfTUFYX05BTUVfTEVOKTtcbitcdFx0aWYgKHNuYW1lX2xlbiBcdTAwM2MgMCkge1xuK1x0XHRcdGVyciA9IHNuYW1lX2xlbjtcbitcdFx0XHRnb3RvIG91dF9mcmVlO1xuK1x0XHR9XG4rXHRcdHNuYW1lID0gdW5hbWU7XG4rXHR9XG4rXG4rXHRzd2l0Y2ggKG9wKSB7XG4rXHRjYXNlIE5URlNfU1RSRUFNX09QX1JFQUQ6XG4rXHRcdGVyciA9IG50ZnNfcmVhZF9uYW1lZF9zdHJlYW0obmksIHNuYW1lLCBzbmFtZV9sZW4sXG4rXHRcdFx0XHRcdCAgICAgcmVxLVx1MDAzZXN0cmVhbV9vZmZzZXQsIHJlcS1cdTAwM2Vpb19sZW4sXG4rXHRcdFx0XHRcdCAgICAga2RhdGEsXG4rXHRcdFx0XHRcdCAgICAgXHUwMDI2cmVxLVx1MDAzZWJ5dGVzX3JldHVybmVkKTtcbitcdFx0aWYgKCFlcnIpIHtcbitcdFx0XHRpZiAoY29weV90b191c2VyKHVyZXEsIHJlcSxcbitcdFx0XHRcdFx0aGVhZGVyX3NpemUgKyByZXEtXHUwMDNlbmFtZV9sZW4gKyByZXEtXHUwMDNlYnl0ZXNfcmV0dXJuZWQpKVxuK1x0XHRcdFx0ZXJyID0gLUVGQVVMVDtcbitcdFx0fVxuK1x0XHRicmVhaztcbitcdGNhc2UgTlRGU19TVFJFQU1fT1BfV1JJVEU6XG4rXHRcdGVyciA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlscCk7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0YnJlYWs7XG4rXHRcdGVyciA9IG50ZnNfd3JpdGVfbmFtZWRfc3RyZWFtKG5pLCBzbmFtZSwgc25hbWVfbGVuLFxuK1x0XHRcdFx0XHQgICAgICByZXEtXHUwMDNlc3RyZWFtX29mZnNldCwgcmVxLVx1MDAzZWlvX2xlbixcbitcdFx0XHRcdFx0ICAgICAga2RhdGEsXG4rXHRcdFx0XHRcdCAgICAgIFx1MDAyNnJlcS1cdTAwM2VieXRlc19yZXR1cm5lZCk7XG4rXHRcdG1udF9kcm9wX3dyaXRlX2ZpbGUoZmlscCk7XG4rXHRcdGlmICghZXJyKSB7XG4rXHRcdFx0aWYgKGNvcHlfdG9fdXNlcihcdTAwMjZ1cmVxLVx1MDAzZWJ5dGVzX3JldHVybmVkLFxuK1x0XHRcdFx0XHQgXHUwMDI2cmVxLVx1MDAzZWJ5dGVzX3JldHVybmVkLFxuK1x0XHRcdFx0XHQgc2l6ZW9mKHJlcS1cdTAwM2VieXRlc19yZXR1cm5lZCkpKVxuK1x0XHRcdFx0ZXJyID0gLUVGQVVMVDtcbitcdFx0fVxuK1x0XHRicmVhaztcbitcdGNhc2UgTlRGU19TVFJFQU1fT1BfUkVNT1ZFOlxuK1x0XHRlcnIgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbHApO1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdGJyZWFrO1xuK1x0XHRlcnIgPSBudGZzX3JlbW92ZV9uYW1lZF9zdHJlYW0obmksIHNuYW1lLCBzbmFtZV9sZW4pO1xuK1x0XHRtbnRfZHJvcF93cml0ZV9maWxlKGZpbHApO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdGVyciA9IC1FTk9UVFk7XG4rXHR9XG4rXG4rb3V0X2ZyZWU6XG4rXHRpZiAodW5hbWUpXG4rXHRcdGttZW1fY2FjaGVfZnJlZShudGZzX25hbWVfY2FjaGUsIHVuYW1lKTtcbitcdGtmcmVlKHJlcSk7XG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbitzdGF0aWMgaW50IG50ZnNfaW9jdGxfbGlzdF9zdHJlYW1zKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFyZylcbit7XG4rXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShmaWxwKTtcbitcdHN0cnVjdCBudGZzX2lub2RlICpuaSA9IE5URlNfSShpbm9kZSk7XG4rXHRzdHJ1Y3QgbnRmc19saXN0X3N0cmVhbXMgaGRyO1xuK1x0c3RydWN0IG50ZnNfc3RyZWFtX2VudHJ5ICplbnRyeSwgKmxhc3RfZW50cnkgPSBOVUxMO1xuK1x0c2l6ZV90IHJlcXVpcmVkID0gMDtcbitcdHZvaWQgKmtidWYgPSBOVUxMO1xuK1x0dm9pZCBfX3VzZXIgKnVidWY7XG4rXHRzdHJ1Y3QgYXR0cl9yZWNvcmQgKmE7XG4rXHRzdHJ1Y3QgbnRmc19hdHRyX3NlYXJjaF9jdHggKmFjdHg7XG4rXHRpbnQgcmV0ID0gMCwgZXJyLCBjb3VudCA9IDA7XG4rXHRzaXplX3QgZW50cnlfc2l6ZSwgb2Zmc2V0ID0gMDtcbitcdHVuc2lnbmVkIGludCBuYW1lX2xlbjtcbitcdHVuc2lnbmVkIGNoYXIgKnNuO1xuK1x0Ym9vbCB1dGYxNjtcbitcbitcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZoZHIsICh2b2lkIF9fdXNlciAqKWFyZywgc2l6ZW9mKGhkcikpKVxuK1x0XHRyZXR1cm4gLUVGQVVMVDtcbitcbitcdGlmICgoaGRyLmZsYWdzIFx1MDAyNiB+TlRGU19TVFJFQU1fRkxfVVRGMTYpIHx8IGhkci5yZXNlcnZlZClcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHR1dGYxNiA9IGhkci5mbGFncyBcdTAwMjYgTlRGU19TVFJFQU1fRkxfVVRGMTY7XG4rXG4rXHR1YnVmID0gKHZvaWQgX191c2VyICopYXJnICsgc2l6ZW9mKGhkcik7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNm5pLVx1MDAzZW1yZWNfbG9jayk7XG4rXHRhY3R4ID0gbnRmc19hdHRyX2dldF9zZWFyY2hfY3R4KG5pLCBOVUxMKTtcbitcdGlmICghYWN0eCkge1xuK1x0XHRtdXRleF91bmxvY2soXHUwMDI2bmktXHUwMDNlbXJlY19sb2NrKTtcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHR9XG4rXG4rXHR3aGlsZSAoKGVyciA9IG50ZnNfYXR0cnNfd2FsayhhY3R4KSkgPT0gMCkge1xuK1x0XHRhID0gYWN0eC1cdTAwM2VhdHRyO1xuK1x0XHRpZiAoYS1cdTAwM2V0eXBlICE9IEFUX0RBVEEgfHwgIWEtXHUwMDNlbmFtZV9sZW5ndGgpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdGlmICh1dGYxNikge1xuK1x0XHRcdG5hbWVfbGVuID0gYS1cdTAwM2VuYW1lX2xlbmd0aCAqIHNpemVvZihfX2xlMTYpO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdHNuID0gbnRmc19hdHRyX25hbWVfZ2V0KG5pLVx1MDAzZXZvbCxcbitcdFx0XHRcdFx0KF9fbGUxNiAqKSgodTggKilhICsgbGUxNl90b19jcHUoYS1cdTAwM2VuYW1lX29mZnNldCkpLFxuK1x0XHRcdFx0XHRhLVx1MDAzZW5hbWVfbGVuZ3RoKTtcbitcdFx0XHRpZiAoIXNuKSB7XG4rXHRcdFx0XHRyZXQgPSAtRUlPO1xuK1x0XHRcdFx0Z290byBvdXQ7XG4rXHRcdFx0fVxuK1x0XHRcdG5hbWVfbGVuID0gc3RybGVuKHNuKTtcbitcdFx0XHRudGZzX2F0dHJfbmFtZV9mcmVlKFx1MDAyNnNuKTtcbitcdFx0fVxuK1xuK1x0XHRlbnRyeV9zaXplID0gc2l6ZW9mKCplbnRyeSkgKyBuYW1lX2xlbjtcbitcdFx0ZW50cnlfc2l6ZSA9IEFMSUdOKGVudHJ5X3NpemUsIDgpO1xuK1xuK1x0XHRpZiAocmVxdWlyZWQgXHUwMDNlIFNJWkVfTUFYIC0gZW50cnlfc2l6ZSkge1xuK1x0XHRcdHJldCA9IC1FT1ZFUkZMT1c7XG4rXHRcdFx0Z290byBvdXQ7XG4rXHRcdH1cbitcdFx0cmVxdWlyZWQgKz0gZW50cnlfc2l6ZTtcbitcdFx0Y291bnQrKztcbitcdH1cbitcdGlmIChlcnIgIT0gLUVOT0VOVCkge1xuK1x0XHRyZXQgPSBlcnI7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1xuK1x0aGRyLnN0cmVhbV9jb3VudCA9IGNvdW50O1xuK1x0aGRyLmJ5dGVzX3JldHVybmVkID0gcmVxdWlyZWQ7XG4rXG4rXHRpZiAoIWNvdW50KVxuK1x0XHRnb3RvIG91dDtcbitcbitcdGlmIChoZHIuYnVmZmVyX3NpemUgXHUwMDNjIHJlcXVpcmVkKSB7XG4rXHRcdHJldCA9IC1FTk9TUEM7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1xuK1x0a2J1ZiA9IGt2emFsbG9jKHJlcXVpcmVkLCBHRlBfTk9GUyk7XG4rXHRpZiAoIWtidWYpIHtcbitcdFx0cmV0ID0gLUVOT01FTTtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4rXHRudGZzX2F0dHJfcmVpbml0X3NlYXJjaF9jdHgoYWN0eCk7XG4rXHR3aGlsZSAoKGVyciA9IG50ZnNfYXR0cnNfd2FsayhhY3R4KSkgPT0gMCkge1xuK1x0XHRhID0gYWN0eC1cdTAwM2VhdHRyO1xuK1x0XHRpZiAoYS1cdTAwM2V0eXBlICE9IEFUX0RBVEEgfHwgIWEtXHUwMDNlbmFtZV9sZW5ndGgpXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdGlmICh1dGYxNikge1xuK1x0XHRcdHNuID0gTlVMTDtcbitcdFx0XHRuYW1lX2xlbiA9IGEtXHUwMDNlbmFtZV9sZW5ndGggKiBzaXplb2YoX19sZTE2KTtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRzbiA9IG50ZnNfYXR0cl9uYW1lX2dldChuaS1cdTAwM2V2b2wsXG4rXHRcdFx0XHRcdChfX2xlMTYgKikoKHU4ICopYSArIGxlMTZfdG9fY3B1KGEtXHUwMDNlbmFtZV9vZmZzZXQpKSxcbitcdFx0XHRcdFx0YS1cdTAwM2VuYW1lX2xlbmd0aCk7XG4rXHRcdFx0aWYgKCFzbikge1xuK1x0XHRcdFx0cmV0ID0gLUVJTztcbitcdFx0XHRcdGdvdG8gb3V0O1xuK1x0XHRcdH1cbitcdFx0XHRuYW1lX2xlbiA9IHN0cmxlbihzbik7XG4rXHRcdH1cbitcbitcdFx0ZW50cnlfc2l6ZSA9IHNpemVvZigqZW50cnkpICsgbmFtZV9sZW47XG4rXHRcdGVudHJ5X3NpemUgPSBBTElHTihlbnRyeV9zaXplLCA4KTtcbitcdFx0aWYgKG9mZnNldCBcdTAwM2UgcmVxdWlyZWQgLSBlbnRyeV9zaXplKSB7XG4rXHRcdFx0cmV0ID0gLUVPVkVSRkxPVztcbitcdFx0XHRudGZzX2F0dHJfbmFtZV9mcmVlKFx1MDAyNnNuKTtcbitcdFx0XHRnb3RvIG91dDtcbitcdFx0fVxuK1xuK1x0XHRlbnRyeSA9IChzdHJ1Y3QgbnRmc19zdHJlYW1fZW50cnkgKikoa2J1ZiArIG9mZnNldCk7XG4rXG4rXHRcdGlmIChhLVx1MDAzZW5vbl9yZXNpZGVudCkge1xuK1x0XHRcdGVudHJ5LVx1MDAzZXNpemUgPSBsZTY0X3RvX2NwdShhLVx1MDAzZWRhdGEubm9uX3Jlc2lkZW50LmRhdGFfc2l6ZSk7XG4rXHRcdFx0ZW50cnktXHUwMDNlYWxsb2Nfc2l6ZSA9XG4rXHRcdFx0XHRsZTY0X3RvX2NwdShhLVx1MDAzZWRhdGEubm9uX3Jlc2lkZW50LmFsbG9jYXRlZF9zaXplKTtcbitcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRlbnRyeS1cdTAwM2VzaXplID0gbGUzMl90b19jcHUoYS1cdTAwM2VkYXRhLnJlc2lkZW50LnZhbHVlX2xlbmd0aCk7XG4rXHRcdFx0ZW50cnktXHUwMDNlYWxsb2Nfc2l6ZSA9IGxlMzJfdG9fY3B1KGEtXHUwMDNlbGVuZ3RoKSAtXG4rXHRcdFx0XHRsZTE2X3RvX2NwdShhLVx1MDAzZWRhdGEucmVzaWRlbnQudmFsdWVfb2Zmc2V0KTtcbitcdFx0fVxuK1xuK1x0XHRlbnRyeS1cdTAwM2VuYW1lX2xlbiA9IG5hbWVfbGVuO1xuK1x0XHRpZiAodXRmMTYpXG4rXHRcdFx0bWVtY3B5KGVudHJ5LVx1MDAzZW5hbWUsXG4rXHRcdFx0ICAgICAgICh1OCAqKWEgKyBsZTE2X3RvX2NwdShhLVx1MDAzZW5hbWVfb2Zmc2V0KSwgbmFtZV9sZW4pO1xuK1x0XHRlbHNlXG4rXHRcdFx0bWVtY3B5KGVudHJ5LVx1MDAzZW5hbWUsIHNuLCBuYW1lX2xlbik7XG4rXHRcdG50ZnNfYXR0cl9uYW1lX2ZyZWUoXHUwMDI2c24pO1xuK1xuK1x0XHRlbnRyeS1cdTAwM2VuZXh0X2VudHJ5X29mZiA9IGVudHJ5X3NpemU7XG4rXHRcdGxhc3RfZW50cnkgPSBlbnRyeTtcbitcdFx0b2Zmc2V0ICs9IGVudHJ5X3NpemU7XG4rXHR9XG4rXHRpZiAoZXJyICE9IC1FTk9FTlQpIHtcbitcdFx0cmV0ID0gZXJyO1xuK1x0fSBlbHNlIHtcbitcdFx0LyogVGhlIGNoYWluIHRlcm1pbmF0ZXMgYXQgdGhlIGxhc3QgZW50cnkuICovXG4rXHRcdGlmIChsYXN0X2VudHJ5KVxuK1x0XHRcdGxhc3RfZW50cnktXHUwMDNlbmV4dF9lbnRyeV9vZmYgPSAwO1xuK1x0XHRoZHIuYnl0ZXNfcmV0dXJuZWQgPSBvZmZzZXQ7XG4rXHR9XG4rXG4rb3V0OlxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNm5pLVx1MDAzZW1yZWNfbG9jayk7XG4rXHRudGZzX2F0dHJfcHV0X3NlYXJjaF9jdHgoYWN0eCk7XG4rXG4rXHRpZiAocmV0IFx1MDAyNlx1MDAyNiByZXQgIT0gLUVOT1NQQylcbitcdFx0Z290byBvdXRfZnJlZTtcbitcbitcdGlmICghcmV0IFx1MDAyNlx1MDAyNiBrYnVmIFx1MDAyNlx1MDAyNiBjb3B5X3RvX3VzZXIodWJ1Ziwga2J1ZiwgaGRyLmJ5dGVzX3JldHVybmVkKSkge1xuK1x0XHRyZXQgPSAtRUZBVUxUO1xuK1x0XHRnb3RvIG91dF9mcmVlO1xuK1x0fVxuK1xuK1x0aWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKilhcmcsIFx1MDAyNmhkciwgc2l6ZW9mKGhkcikpKVxuK1x0XHRyZXQgPSAtRUZBVUxUO1xuK1xuK291dF9mcmVlOlxuK1x0a3ZmcmVlKGtidWYpO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4gbG9uZyBudGZzX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbiB7XG4gXHRzd2l0Y2ggKGNtZCkge1xuQEAgLTg1MCw2ICsxMzUxLDE0IEBAIGxvbmcgbnRmc19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4gXHRcdHJldHVybiBudGZzX2lvY3RsX3NldF92b2x1bWVfbGFiZWwoZmlscCwgYXJnKTtcbiBcdGNhc2UgRklUUklNOlxuIFx0XHRyZXR1cm4gbnRmc19pb2N0bF9maXRyaW0oTlRGU19TQihmaWxlX2lub2RlKGZpbHApLVx1MDAzZWlfc2IpLCBhcmcpO1xuK1x0Y2FzZSBOVEZTX0lPQ19TVFJFQU1fUkVBRDpcbitcdFx0cmV0dXJuIG50ZnNfaW9jdGxfc3RyZWFtKGZpbHAsIGFyZywgTlRGU19TVFJFQU1fT1BfUkVBRCk7XG4rXHRjYXNlIE5URlNfSU9DX1NUUkVBTV9XUklURTpcbitcdFx0cmV0dXJuIG50ZnNfaW9jdGxfc3RyZWFtKGZpbHAsIGFyZywgTlRGU19TVFJFQU1fT1BfV1JJVEUpO1xuK1x0Y2FzZSBOVEZTX0lPQ19TVFJFQU1fUkVNT1ZFOlxuK1x0XHRyZXR1cm4gbnRmc19pb2N0bF9zdHJlYW0oZmlscCwgYXJnLCBOVEZTX1NUUkVBTV9PUF9SRU1PVkUpO1xuK1x0Y2FzZSBOVEZTX0lPQ19MSVNUX1NUUkVBTVM6XG4rXHRcdHJldHVybiBudGZzX2lvY3RsX2xpc3Rfc3RyZWFtcyhmaWxwLCBhcmcpO1xuIFx0ZGVmYXVsdDpcbiBcdFx0cmV0dXJuIC1FTk9UVFk7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L250ZnMuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9udGZzLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5hNTc4M2RjM2I5MDU0XG4tLS0gL2Rldi9udWxsXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvbnRmcy5oXG5AQCAtMCwwICsxLDExNSBAQFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIFdJVEggTGludXgtc3lzY2FsbC1ub3RlICovXG4rLypcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjYgTEcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuXG4rICovXG4rXG4rI2lmbmRlZiBfVUFQSV9MSU5VWF9OVEZTX0hcbisjZGVmaW5lIF9VQVBJX0xJTlVYX05URlNfSFxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pb2N0bC5oXHUwMDNlXG4rXG4rI2RlZmluZSBOVEZTX0lPQ19NQUdJQ1x0MHhFRlxuK1xuKy8qXG4rICogRmxhZ3MgZm9yIG50ZnNfc3RyZWFtLmZsYWdzIGFuZCBudGZzX2xpc3Rfc3RyZWFtcy5mbGFncy5cbisgKlxuKyAqIFRoZSBzdHJlYW0gbmFtZSBpcyByYXcgVVRGLTE2TEUsIGV4YWN0bHkgYXMgc3RvcmVkIG9uIGRpc2ssIGluc3RlYWQgb2ZcbisgKiBiZWluZyBlbmNvZGVkIHdpdGggdGhlIG1vdW50ZWQgZmlsZXN5c3RlbSBOTFMuIFRoaXMgYWxsb3dzIGxvc3NsZXNzXG4rICogcm91bmQtdHJpcHBpbmcgb2Ygc3RyZWFtIG5hbWVzIHdob3NlIGNoYXJhY3RlcnMgYXJlIG5vdCByZXByZXNlbnRhYmxlXG4rICogaW4gdGhlIG1vdW50IE5MUyAoZS5nLiBmb3IgV2luZSwgd2hpY2ggd29ya3MgaW4gVVRGLTE2IG5hdGl2ZWx5KS5cbisgKiBXaGVuIHNldCwgdGhlIG5hbWUgbGVuZ3RoIGZpZWxkcyBjb3VudCBieXRlcyBvZiBVVEYtMTZMRSBhbmQgbXVzdFxuKyAqIHRoZXJlZm9yZSBiZSBldmVuLlxuKyAqL1xuKyNkZWZpbmUgTlRGU19TVFJFQU1fRkxfVVRGMTZcdDB4MVxuK1xuKy8qXG4rICogbnRmcyBuYW1lZCBzdHJlYW0gaW9jdGwgc3RydWN0dXJlLlxuKyAqXG4rICogQHN0cmVhbV9vZmZzZXQ6XHRPZmZzZXQgd2l0aGluIHRoZSBuYW1lZCBzdHJlYW0uXG4rICogQGlvX2xlbjpcdFx0TnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQvd3JpdGUuXG4rICogQGJ5dGVzX3JldHVybmVkOlx0QWN0dWFsIGJ5dGVzIHRyYW5zZmVycmVkIChvdXQpLlxuKyAqIEBuYW1lX2xlbjpcdFx0U3RyZWFtIG5hbWUgbGVuZ3RoIGluIGJ5dGVzLCBub3QgaW5jbHVkaW5nIGFueVxuKyAqXHRcdFx0dGVybWluYXRpbmcgTlVMICh3aGljaCBtdXN0IG5vdCBiZSBwcmVzZW50KS4gV2hlblxuKyAqXHRcdFx0TlRGU19TVFJFQU1fRkxfVVRGMTYgaXMgc2V0IHRoaXMgaXMgYSBVVEYtMTZMRSBieXRlXG4rICpcdFx0XHRjb3VudCBhbmQgbXVzdCBiZSBldmVuLlxuKyAqIEBmbGFnczpcdFx0Qml0IG1hc2sgb2YgTlRGU19TVFJFQU1fRkxfKiBmbGFncy4gb3RoZXIgYml0cyBtdXN0IGJlXG4rICpcdFx0XHR6ZXJvLlxuKyAqIEByZXNlcnZlZDpcdFx0TXVzdCBiZSB6ZXJvLlxuKyAqIEBidWZmZXI6XHRcdFN0cmVhbSBuYW1lIGZvbGxvd2VkIGJ5IHN0cmVhbSBkYXRhLlxuKyAqXG4rICogVGhlIHN0cmVhbSBuYW1lIGlzIHRoZSBiYXJlIHN0cmVhbSBuYW1lLCB3aXRob3V0IHRoZSBsZWFkaW5nICc6JyBvciB0aGVcbisgKiB0cmFpbGluZyBcIjokREFUQVwiIGRlY29yYXRpb24gdXNlZCBieSBXaW5kb3dzLiBCeSBkZWZhdWx0IGl0IGlzIGVuY29kZWQgd2l0aFxuKyAqIHRoZSBtb3VudGVkIGZpbGVzeXN0ZW0gTkxTLiBJZiBOVEZTX1NUUkVBTV9GTF9VVEYxNiBpcyBzZXQgaW4gQGZsYWdzIGl0IGlzXG4rICogcmF3IFVURi0xNkxFIGluc3RlYWQuIEZvciByZWFkIGFuZCB3cml0ZSwgQGlvX2xlbiBieXRlcyBvZiBkYXRhIGZvbGxvdyB0aGVcbisgKiBuYW1lLiBGb3IgcmVtb3ZlLCBvbmx5IHRoZSBuYW1lIGlzIHJlcXVpcmVkIGFuZCBAaW9fbGVuIG11c3QgYmUgemVyby5cbisgKi9cbitzdHJ1Y3QgbnRmc19zdHJlYW0ge1xuK1x0X19hbGlnbmVkX3U2NCBzdHJlYW1fb2Zmc2V0O1xuK1x0X19hbGlnbmVkX3U2NCBpb19sZW47XG4rXHRfX2FsaWduZWRfdTY0IGJ5dGVzX3JldHVybmVkO1xuK1x0X191MzIgbmFtZV9sZW47XG4rXHRfX3UzMiBmbGFncztcbitcdF9fYWxpZ25lZF91NjQgcmVzZXJ2ZWQ7XG4rXHRfX3U4IGJ1ZmZlcltdOyAvKiBuYW1lICsgZGF0YSAqL1xuK307XG4rXG4rLypcbisgKiBTaW5nbGUgc3RyZWFtIGVudHJ5IHJldHVybmVkIGJ5IE5URlNfSU9DX0xJU1RfU1RSRUFNUy5cbisgKlxuKyAqIEBuZXh0X2VudHJ5X29mZjpcdEJ5dGUgb2Zmc2V0IGZyb20gdGhlIHN0YXJ0IG9mIHRoaXMgZW50cnkgdG8gdGhlIG5leHRcbisgKlx0XHRcdGVudHJ5LCBvciB6ZXJvIGZvciB0aGUgbGFzdCBlbnRyeS4gQWx3YXlzIGEgbXVsdGlwbGVcbisgKlx0XHRcdG9mIDguIENvbnN1bWVycyBtdXN0IHVzZSB0aGlzIHRvIGFkdmFuY2UgaW5zdGVhZCBvZlxuKyAqXHRcdFx0Y29tcHV0aW5nIHRoZSBzdHJpZGUgdGhlbXNlbHZlcywgc28gdGhlIGVudHJ5IGNhbiBncm93XG4rICpcdFx0XHRuZXcgZmllbGRzIHdpdGhvdXQgYnJlYWtpbmcgdGhlIEFCSS5cbisgKiBAc2l6ZTpcdFx0U3RyZWFtIGRhdGEgc2l6ZSBpbiBieXRlcy5cbisgKiBAYWxsb2Nfc2l6ZTpcdFx0Qnl0ZXMgYWxsb2NhdGVkIGZvciB0aGUgc3RyZWFtIChjbHVzdGVyIGFsaWduZWQgZm9yXG4rICpcdFx0XHRub24tcmVzaWRlbnQgc3RyZWFtcykuXG4rICogQG5hbWVfbGVuOlx0XHRTdHJlYW0gbmFtZSBsZW5ndGggaW4gYnl0ZXMsIG5vdCBpbmNsdWRpbmcgYSBOVUxcbisgKlx0XHRcdHRlcm1pbmF0b3IgKG5vbmUgaXMgc3RvcmVkKS4gQ291bnRzIFVURi0xNkxFIGJ5dGVzXG4rICpcdFx0XHR3aGVuIE5URlNfU1RSRUFNX0ZMX1VURjE2IHdhcyByZXF1ZXN0ZWQuXG4rICogQHJlc2VydmVkOlx0XHRNdXN0IGJlIHplcm8uXG4rICogQG5hbWU6XHRcdEJhcmUgc3RyZWFtIG5hbWU7IE5MUyBlbmNvZGVkLCBvciByYXcgVVRGLTE2TEUgd2hlblxuKyAqXHRcdFx0TlRGU19TVFJFQU1fRkxfVVRGMTYgd2FzIHJlcXVlc3RlZCAoc2VlIHN0cnVjdFxuKyAqXHRcdFx0bnRmc19zdHJlYW0pLlxuKyAqL1xuK3N0cnVjdCBudGZzX3N0cmVhbV9lbnRyeSB7XG4rXHRfX2FsaWduZWRfdTY0IG5leHRfZW50cnlfb2ZmO1xuK1x0X19hbGlnbmVkX3U2NCBzaXplO1xuK1x0X19hbGlnbmVkX3U2NCBhbGxvY19zaXplO1xuK1x0X191MzIgbmFtZV9sZW47XG4rXHRfX3UzMiByZXNlcnZlZDtcbitcdF9fdTggbmFtZVtdO1xuK307XG4rXG4rLypcbisgKiBudGZzIGxpc3Qgc3RyZWFtcyBpb2N0bCBzdHJ1Y3R1cmUuXG4rICpcbisgKiBAYnVmZmVyX3NpemU6XHR1c2VyIGJ1ZmZlciBzaXplKGluKS5cbisgKiBAYnl0ZXNfcmV0dXJuZWQ6XHRhY3R1YWwgYnl0ZXMgd3JpdHRlbiBvciByZXF1aXJlZChvdXQpLlxuKyAqIEBzdHJlYW1fY291bnQ6XHRudW1iZXIgb2Ygc3RyZWFtcyhvdXQpLlxuKyAqIEBmbGFnczpcdFx0Qml0IG1hc2sgb2YgTlRGU19TVFJFQU1fRkxfKiBmbGFncyBjb250cm9sbGluZyB0aGVcbisgKlx0XHRcdGVuY29kaW5nIG9mIHRoZSByZXR1cm5lZCBuYW1lczsgb3RoZXIgYml0cyBtdXN0IGJlIHplcm8uXG4rICogQHJlc2VydmVkOlx0XHRNdXN0IGJlIHplcm8uXG4rICogQGJ1ZmZlcjpcdFx0bnRmc19zdHJlYW1fZW50cnkgYXJyYXkuXG4rICpcbisgKiBUaGUgdmFyaWFibGUtbGVuZ3RoIGVudHJpZXMgZm9sbG93IHRoZSBoZWFkZXIgaW4gQGJ1ZmZlciwgZWFjaCBhbGlnbmVkIG9uXG4rICogYW4gOC1ieXRlIGJvdW5kYXJ5IGFuZCBjaGFpbmVkIHZpYSBudGZzX3N0cmVhbV9lbnRyeS5uZXh0X2VudHJ5X29mZi4gSWZcbisgKiBAYnVmZmVyX3NpemUgaXMgdG9vIHNtYWxsLCBubyBkYXRhIGlzIGNvcGllZCwgQHN0cmVhbV9jb3VudCBhbmRcbisgKiBAYnl0ZXNfcmV0dXJuZWQgcmVwb3J0IHRoZSByZXF1aXJlZCB2YWx1ZXMgYW5kIHRoZSBpb2N0bCBmYWlscyB3aXRoXG4rICogLUVOT1NQQy5cbisgKi9cbitzdHJ1Y3QgbnRmc19saXN0X3N0cmVhbXMge1xuK1x0X19hbGlnbmVkX3U2NCBidWZmZXJfc2l6ZTtcbitcdF9fYWxpZ25lZF91NjQgYnl0ZXNfcmV0dXJuZWQ7XG4rXHRfX2FsaWduZWRfdTY0IHN0cmVhbV9jb3VudDtcbitcdF9fdTMyIGZsYWdzO1xuK1x0X191MzIgcmVzZXJ2ZWQ7XG4rXHRfX3U4IGJ1ZmZlcltdO1xuK307XG4rXG4rI2RlZmluZSBOVEZTX0lPQ19TVFJFQU1fUkVBRFx0XHRfSU9XUihOVEZTX0lPQ19NQUdJQywgMSwgc3RydWN0IG50ZnNfc3RyZWFtKVxuKyNkZWZpbmUgTlRGU19JT0NfU1RSRUFNX1dSSVRFXHRcdF9JT1dSKE5URlNfSU9DX01BR0lDLCAyLCBzdHJ1Y3QgbnRmc19zdHJlYW0pXG4rI2RlZmluZSBOVEZTX0lPQ19TVFJFQU1fUkVNT1ZFXHRcdF9JT1dSKE5URlNfSU9DX01BR0lDLCAzLCBzdHJ1Y3QgbnRmc19zdHJlYW0pXG4rI2RlZmluZSBOVEZTX0lPQ19MSVNUX1NUUkVBTVNcdFx0X0lPV1IoTlRGU19JT0NfTUFHSUMsIDQsIHN0cnVjdCBudGZzX2xpc3Rfc3RyZWFtcylcbitcbisjZW5kaWYgLyogX1VBUElfTElOVVhfTlRGU19IICovXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxNzoxMTozMy4zNzY1MTA5NDFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzMyNjYzNDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTlRGUyBOYW1lZCBTdHJlYW0gUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGludHJvZHVjaW5nIGlvY3RscyBmb3IgTlRGUywgc3BlY2lmaWNhbGx5IGhhbmRsaW5nIG5hbWVkIHN0cmVhbXMgb3IgQWx0ZXJuYXRlIERhdGEgU3RyZWFtcy4gSSBzZWUgd2UgaGF2ZSBgTlRGU19JT0NfU1RSRUFNX1JFQURgLCBgTlRGU19JT0NfU1RSRUFNX1dSSVRFYCwgYE5URlNfSU9DX1NUUkVBTV9SRU1PVkVgLCBhbmQgYE5URlNfSU9DX0xJU1RfU1RSRUFNU2AuIFRoYXQncyBzdGFuZGFyZCBmdW5jdGlvbmFsaXR5LCByZWFsbHk7IGl0IGNvdmVycyB0aGUgYmFzaWMgcmVhZCwgd3JpdGUsIHJlbW92ZSwgYW5kIGxpc3Rpbmcgb3BlcmF0aW9ucy4gR29vZC5cblxuVGhlIGltcG9ydGFudCBmaWxlcyBhcmUgYGZzL250ZnMvZmlsZS5jYCB3aGljaCwgYXMgYW4gZXhwZXJ0LCBJIHdvdWxkIGV4cGVjdCBoYW5kbGVzIGEgbG90IG9mIHRoZSBjb3JlIGZpbGUgb3BlcmF0aW9ucywgYW5kIGEgbmV3IGhlYWRlciwgYGluY2x1ZGUvdWFwaS9saW51eC9udGZzLmhgIHdoaWNoIHdpbGwgZGVmaW5lIHRoZSBuZXcgaW9jdGwgbnVtYmVycyBhbmQgc3RydWN0dXJlcy4gTWFrZXMgc2Vuc2UuXG5cbkJ1dCB3YWl0IGEgbWludXRl4oCmIFRoaXMgaXMgYGZzL250ZnMvZmlsZS5jYOKApiBJcyB0aGlzIHRoZSAqb2xkKiBOVEZTIGRyaXZlciBvciB0aGUgbmV3ZXIgYG50ZnMzYD8gSSBuZWVkIHRvIGNsYXJpZnkgdGhhdCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgaXMgZ29pbmcgaW50byBhIGxlZ2FjeSBjb2RlIHBhdGggb3Igc29tZXRoaW5nIG1vcmUgbW9kZXJuLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBpZiB0aGUgb2xkIGBmcy9udGZzYCBpcyBzdGlsbCBldmVuIGVuYWJsZWQsIGFuZCBob3cgaXTigJlzIGNvbmZpZ3VyZWQuIEknbGwgbmVlZCB0byB1c2UgYGdyZXBwZXJgIHRvIHNlYXJjaCB0aHJvdWdoIHRoZSBLY29uZmlnIGZpbGVzIGZvciBgTlRGU19GU2Agb3IgYSBzaW1pbGFyIGNvbmZpZ3VyYXRpb24gc3ltYm9sLiBUaGF0IHNob3VsZCBjbGVhciB0aGluZ3MgdXAgZmFzdC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQ3MSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE3OjExOjM4LjcwOTE3ODA2NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDIxNTE1NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5URlNfRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbnRmcy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL250ZnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL250ZnMvS2NvbmZpZzoyOmNvbmZpZyBOVEZTX0ZTXFxuZnMvbnRmcy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIk5URlMgZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCJcXG4tLVxcbmZzL250ZnMvS2NvbmZpZz0xMz1jb25maWcgTlRGU19ERUJVR1xcbi0tXFxuZnMvbnRmcy9LY29uZmlnLTM0LVxcbmZzL250ZnMvS2NvbmZpZzozNTpjb25maWcgTlRGU19GU19QT1NJWF9BQ0xcXG5mcy9udGZzL0tjb25maWctMzYtXFx0Ym9vbCBcXFwiTlRGUyBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTc6MTE6MzguODUxMzcyMjI0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAwMjIwODAwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5URlMgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB3b3JraW5nIHdpdGggdGhlICpvbGQqIE5URlMgZHJpdmVyLCBzcGVjaWZpY2FsbHkgYGZzL250ZnNgLiBJIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCB0aGlzIGxlZ2FjeSBkcml2ZXIgaXMgc3RpbGwgYXJvdW5kLiBJdCBsb29rcyBsaWtlIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgbGllcyBpbiBhZGRpbmcgbmV3IGlvY3RscyB0byBgZnMvbnRmcy9maWxlLmNgLiBMZXQncyBzZWUgd2hhdCB0aG9zZSBuZXcgaW9jdGxzIGFyZS4uLiByaWdodCwgdGhlIHBhdGNoIGFkZHM6XG5cbiogICBgbnRmc19yZWFkX25hbWVkX3N0cmVhbWBcbiogICBgbnRmc193cml0ZV9uYW1lZF9zdHJlYW1gXG4qICAgYG50ZnNfcmVtb3ZlX25hbWVkX3N0cmVhbWBcbiogICBgbnRmc19pb2N0bF9zdHJlYW1gXG4qICAgYG50ZnNfaW9jdGxfbGlzdF9zdHJlYW1zYFxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gaXM6IGFyZSB0aGVzZSBhY3R1YWxseSAqcmVhY2hhYmxlKj8gQWgsIHllcywgdGhleSBhcmUsIHZpYSBgbnRmc19pb2N0bGAuIFRoYXQgZnVuY3Rpb24gd291bGQgYmUgdGhlIGAudW5sb2NrZWRfaW9jdGxgIGVudHJ5IHBvaW50IGZvciBOVEZTIGZpbGVzLCB3aGljaCBtYWtlcyBzZW5zZS4gSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkgc2hvdWxkIHZlcmlmeSB0aGUgaW1wbGVtZW50YXRpb24gb2YgYG50ZnNfaW9jdGxgIGl0c2VsZiBpbiBgZnMvbnRmcy9maWxlLmNgLiBHb3R0YSBiZSB0aG9yb3VnaCB3aXRoIHRoZXNlIGRyaXZlciBjaGFuZ2VzLCBlc3BlY2lhbGx5IHdpdGggc29tZXRoaW5nIGFzIGZ1bmRhbWVudGFsIGFzIGZpbGUgc3lzdGVtIEkvTy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAxMjksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTc6MTE6NDIuODUzNTg0ODhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUzNzA1NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibnRmc19pb2N0bFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9udGZzL2ZpbGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9udGZzL2ZpbGUuYz03NDA9c3RhdGljIHNzaXplX3QgbnRmc19maWxlX3NwbGljZV9yZWFkKHN0cnVjdCBmaWxlICppbiwgbG9mZl90ICpwcG9zLFxcbi0tXFxuZnMvbnRmcy9maWxlLmMtNzQ4LVxcbmZzL250ZnMvZmlsZS5jOjc0OTpzdGF0aWMgaW50IG50ZnNfaW9jdGxfc2h1dGRvd24oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyBhcmcpXFxuZnMvbnRmcy9maWxlLmMtNzUwLXtcXG4tLVxcbmZzL250ZnMvZmlsZS5jLTc2MS1cXG5mcy9udGZzL2ZpbGUuYzo3NjI6c3RhdGljIGludCBudGZzX2lvY3RsX2dldF92b2x1bWVfbGFiZWwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbmZzL250ZnMvZmlsZS5jLTc2My17XFxuLS1cXG5mcy9udGZzL2ZpbGUuYy03ODQtXFxuZnMvbnRmcy9maWxlLmM6Nzg1OnN0YXRpYyBpbnQgbnRmc19pb2N0bF9zZXRfdm9sdW1lX2xhYmVsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFyZylcXG5mcy9udGZzL2ZpbGUuYy03ODYte1xcbi0tXFxuZnMvbnRmcy9maWxlLmMtODA4LVxcbmZzL250ZnMvZmlsZS5jOjgwOTpzdGF0aWMgaW50IG50ZnNfaW9jdGxfZml0cmltKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sLCB1bnNpZ25lZCBsb25nIGFyZylcXG5mcy9udGZzL2ZpbGUuYy04MTAte1xcbi0tXFxuZnMvbnRmcy9maWxlLmM9MTAzMT1lbnVtIG50ZnNfc3RyZWFtX29wIHtcXG4tLVxcbmZzL250ZnMvZmlsZS5jLTEwMzYtXFxuZnMvbnRmcy9maWxlLmM6MTAzNzpzdGF0aWMgbG9uZyBudGZzX2lvY3RsX3N0cmVhbShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhcmcsXFxuZnMvbnRmcy9maWxlLmMtMTAzOC1cXHRcXHRcXHQgICAgICBlbnVtIG50ZnNfc3RyZWFtX29wIG9wKVxcbi0tXFxuZnMvbnRmcy9maWxlLmMtMTE3Ni1cXG5mcy9udGZzL2ZpbGUuYzoxMTc3OnN0YXRpYyBpbnQgbnRmc19pb2N0bF9saXN0X3N0cmVhbXMoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbmZzL250ZnMvZmlsZS5jLTExNzgte1xcbi0tXFxuZnMvbnRmcy9maWxlLmMtMTM0Mi1cXG5mcy9udGZzL2ZpbGUuYzoxMzQzOmxvbmcgbnRmc19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuZnMvbnRmcy9maWxlLmMtMTM0NC17XFxuLS1cXG5mcy9udGZzL2ZpbGUuYy0xMzQ2LVxcdGNhc2UgRlNfSU9DX1NIVVRET1dOOlxcbmZzL250ZnMvZmlsZS5jOjEzNDc6XFx0XFx0cmV0dXJuIG50ZnNfaW9jdGxfc2h1dGRvd24oZmlsZV9pbm9kZShmaWxwKS1cXHUwMDNlaV9zYiwgYXJnKTtcXG5mcy9udGZzL2ZpbGUuYy0xMzQ4LVxcdGNhc2UgRlNfSU9DX0dFVEZTTEFCRUw6XFxuZnMvbnRmcy9maWxlLmM6MTM0OTpcXHRcXHRyZXR1cm4gbnRmc19pb2N0bF9nZXRfdm9sdW1lX2xhYmVsKGZpbHAsIGFyZyk7XFxuZnMvbnRmcy9maWxlLmMtMTM1MC1cXHRjYXNlIEZTX0lPQ19TRVRGU0xBQkVMOlxcbmZzL250ZnMvZmlsZS5jOjEzNTE6XFx0XFx0cmV0dXJuIG50ZnNfaW9jdGxfc2V0X3ZvbHVtZV9sYWJlbChmaWxwLCBhcmcpO1xcbmZzL250ZnMvZmlsZS5jLTEzNTItXFx0Y2FzZSBGSVRSSU06XFxuZnMvbnRmcy9maWxlLmM6MTM1MzpcXHRcXHRyZXR1cm4gbnRmc19pb2N0bF9maXRyaW0oTlRGU19TQihmaWxlX2lub2RlKGZpbHApLVxcdTAwM2VpX3NiKSwgYXJnKTtcXG5mcy9udGZzL2ZpbGUuYy0xMzU0LVxcdGNhc2UgTlRGU19JT0NfU1RSRUFNX1JFQUQ6XFxuZnMvbnRmcy9maWxlLmM6MTM1NTpcXHRcXHRyZXR1cm4gbnRmc19pb2N0bF9zdHJlYW0oZmlscCwgYXJnLCBOVEZTX1NUUkVBTV9PUF9SRUFEKTtcXG5mcy9udGZzL2ZpbGUuYy0xMzU2LVxcdGNhc2UgTlRGU19JT0NfU1RSRUFNX1dSSVRFOlxcbmZzL250ZnMvZmlsZS5jOjEzNTc6XFx0XFx0cmV0dXJuIG50ZnNfaW9jdGxfc3RyZWFtKGZpbHAsIGFyZywgTlRGU19TVFJFQU1fT1BfV1JJVEUpO1xcbmZzL250ZnMvZmlsZS5jLTEzNTgtXFx0Y2FzZSBOVEZTX0lPQ19TVFJFQU1fUkVNT1ZFOlxcbmZzL250ZnMvZmlsZS5jOjEzNTk6XFx0XFx0cmV0dXJuIG50ZnNfaW9jdGxfc3RyZWFtKGZpbHAsIGFyZywgTlRGU19TVFJFQU1fT1BfUkVNT1ZFKTtcXG5mcy9udGZzL2ZpbGUuYy0xMzYwLVxcdGNhc2UgTlRGU19JT0NfTElTVF9TVFJFQU1TOlxcbmZzL250ZnMvZmlsZS5jOjEzNjE6XFx0XFx0cmV0dXJuIG50ZnNfaW9jdGxfbGlzdF9zdHJlYW1zKGZpbHAsIGFyZyk7XFxuZnMvbnRmcy9maWxlLmMtMTM2Mi1cXHRkZWZhdWx0Olxcbi0tXFxuZnMvbnRmcy9maWxlLmM9MTM2OD1sb25nIG50ZnNfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLFxcbi0tXFxuZnMvbnRmcy9maWxlLmMtMTM3MC17XFxuZnMvbnRmcy9maWxlLmM6MTM3MTpcXHRyZXR1cm4gbnRmc19pb2N0bChmaWxwLCBjbWQsICh1bnNpZ25lZCBsb25nKWNvbXBhdF9wdHIoYXJnKSk7XFxuZnMvbnRmcy9maWxlLmMtMTM3Mi19XFxuLS1cXG5mcy9udGZzL2ZpbGUuYz0xNjg0PWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbnRmc19maWxlX29wcyA9IHtcXG4tLVxcbmZzL250ZnMvZmlsZS5jLTE2OTMtXFx0LnNwbGljZV93cml0ZVxcdD0gaXRlcl9maWxlX3NwbGljZV93cml0ZSxcXG5mcy9udGZzL2ZpbGUuYzoxNjk0OlxcdC51bmxvY2tlZF9pb2N0bFxcdD0gbnRmc19pb2N0bCxcXG5mcy9udGZzL2ZpbGUuYy0xNjk1LSNpZmRlZiBDT05GSUdfQ09NUEFUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE3OjExOjQyLjg5ODk2MDMwOVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY5NTMwNjk2ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE5URlMgSU9DVExzKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGVzZSBOVEZTIElPQ1RMcy4gRmlyc3QgdGhvdWdodCBpcywgeWVhaCwgdGhlIElPQ1RMIGVudHJ5IHBvaW50cyAqYXJlKiBkZWZpbml0ZWx5IGFjY2Vzc2libGUsIHNvIGxldCdzIHN0YXJ0IHRoZXJlLiBSaWdodCwgYG50ZnNfaW9jdGxgIGlzIHRoZSBpbml0aWFsIHBvaW50IG9mIGVudHJ5LiBcblxuTm93LCB3aGljaCBmdW5jdGlvbnMgYXJlIHRoZSBrZXkgcGxheWVycyBpbiB0aGlzIGFyZWE/IEkgdGhpbmsgaXQgYm9pbHMgZG93biB0bzogYG50ZnNfaW9jdGxfc3RyZWFtYCwgYG50ZnNfaW9jdGxfbGlzdF9zdHJlYW1zYCwgYG50ZnNfcmVhZF9uYW1lZF9zdHJlYW1gLCBgbnRmc193cml0ZV9uYW1lZF9zdHJlYW1gLCBhbmQgYG50ZnNfcmVtb3ZlX25hbWVkX3N0cmVhbWAuXG5cbldhaXQgYSBtaW51dGUuLi4gYm90aCBgbnRmc19pb2N0bF9zdHJlYW1gIGFuZCBgbnRmc19pb2N0bF9saXN0X3N0cmVhbXNgIGFyZSBzdGF0aWMgZnVuY3Rpb25zLCB3aGlsZSBgbnRmc19pb2N0bGAgaXRzZWxmIGlzbid0LiBJJ20gZ29pbmcgdG8gaGF2ZSB0byBzZWUgaWYgYG50ZnNfaW9jdGxgIGlzIGV4cG9ydGVkIGFzIGEgc3ltYm9sIG9yIGlmIGl0J3Mgb25seSBjYWxsZWQgd2l0aGluIGBudGZzX2ZpbGVfb3BzYC4gQWxyaWdodCwgaXQncyB1c2VkIHdpdGhpbiBgbnRmc19maWxlX29wc2AuIEkgc2hvdWxkIGJlIGFibGUgdG8gc3BlY2lmeSBgbnRmc19pb2N0bGAgYXMgYSBmb2N1cyBzeW1ib2wuXG5cbkNhbiBJIHNwZWNpZnkgYG50ZnNfaW9jdGxfc3RyZWFtYCBkaXJlY3RseT8gU2luY2UgaXQncyBzdGF0aWMsIGl0IG1pZ2h0IGJlIGlubGluZWQgZHVyaW5nIGNvbXBpbGF0aW9uLCBtZWFuaW5nIGl0IG1pZ2h0IG5vdCBoYXZlIGl0cyBvd24gc3ltYm9sLiBBY3R1YWxseSwgd2FpdCBhIG1pbnV0ZSwgYG50ZnNfaW9jdGxfc3RyZWFtYCBpcyBhIGZhaXJseSBzaXphYmxlIGZ1bmN0aW9uLiBJdCBtaWdodCBub3QgYmUgaW5saW5lZC4gQnV0IHRvIGJlIHNhZmUsIEknbSBnb2luZyB0byBpbmNsdWRlIGBudGZzX2lvY3RsYCBhbG9uZyB3aXRoIGl0LlxuXG5BaCwgYW5kIHRob3NlIG90aGVyIHN0cmVhbSBmdW5jdGlvbnMg4oCTIGBudGZzX3JlYWRfbmFtZWRfc3RyZWFtYCwgYG50ZnNfd3JpdGVfbmFtZWRfc3RyZWFtYCwgYW5kIGBudGZzX3JlbW92ZV9uYW1lZF9zdHJlYW1gIOKAkyB0aG9zZSBhcmUgYWxzbyBzdGF0aWMuIExldCBtZSBqdXN0IGNvbmZpcm0gdGhhdC4gWWVwLCB0aGV5IGFyZS4gU28gcmVhbGx5LCBteSBmb2N1cyBzaG91bGQgYmUgb24gYG50ZnNfaW9jdGxgIHRoZW4uIFRoYXQncyB0aGUga2V5IGVudHJ5IHBvaW50LlxuXG5Pa2F5LCBsZXQncyBzd2l0Y2ggZ2VhcnMgZm9yIGEgbW9tZW50IGFuZCBzZWUgd2hpY2ggY29uZmlnIG9wdGlvbiBlbmFibGVzIHRoZSBOVEZTIGRyaXZlci4gSXQncyB0aGUgYE5URlNfRlNgIGNvbmZpZy4gV2FpdCwgZG9lcyBgTlRGU19SV2AgZXhpc3Q/IEl0J3MgdGltZSB0byBjaGVjayB0aGUgYGZzL250ZnMvS2NvbmZpZ2AgZmlsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4NDEsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTc6MTE6NDkuODUyMDMyNjM5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NjIyMTg5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTlRGU19SV1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9udGZzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE3OjExOjQ5Ljg5NjY2Mjc3OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwOTg1OTMwNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgTlRGUyBXcml0ZSBTdXBwb3J0IENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBHaXZlbiB0aGUgdGFzayBhdCBoYW5kLCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIE5URlMgd2l0aGluIHRoZSBrZXJuZWwuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IHdyaXRlIHN1cHBvcnQuIFdoZXJlIHdvdWxkIHRoYXQgYmUgZGVmaW5lZD8gTXkgZ3V0IHRlbGxzIG1lIGBmcy9udGZzL0tjb25maWdgIGlzIHRoZSBsaWtlbHkgcGxhY2UuIEl0J3MgdGhlIHN0YW5kYXJkIGxvY2F0aW9uIGZvciBmaWxlc3lzdGVtLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24uIFRpbWUgdG8gY2hlY2sgaWYgdGhlIHJlcXVpc2l0ZSBvcHRpb25zIGZvciByZWFkL3dyaXRlIGZ1bmN0aW9uYWxpdHkgYXJlIGV4cG9zZWQsIGFsb25nIHdpdGggYW55IHJlbGV2YW50IGRlcGVuZGVuY2llcyBvciBwb3RlbnRpYWwgY2F2ZWF0cy4gSXQncyBsaWtlbHkgdGhhdCB3cml0ZSBzdXBwb3J0LCBpZiBwcmVzZW50LCBtaWdodCBiZSBjb250aW5nZW50IG9uIGNlcnRhaW4ga2VybmVsIGZlYXR1cmVzIG9yIGV4dGVybmFsIGxpYnJhcmllcy4gVGhpcyBpbml0aWFsIGV4cGxvcmF0aW9uIHdpbGwgZ3VpZGUgbXkgbmV4dCBzdGVwcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI3MTUsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxNzoxMTo1My45OTUyNTgwMTNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MTM2Mjk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBOVEZTX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9udGZzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbnRmcy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvbnRmcy9LY29uZmlnOjI6Y29uZmlnIE5URlNfRlNcXG5mcy9udGZzL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiTlRGUyBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvbnRmcy9LY29uZmlnLTEyLVxcbmZzL250ZnMvS2NvbmZpZzoxMzpjb25maWcgTlRGU19ERUJVR1xcbmZzL250ZnMvS2NvbmZpZy0xNC1cXHRib29sIFxcXCJOVEZTIGRlYnVnZ2luZyBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvbnRmcy9LY29uZmlnLTM0LVxcbmZzL250ZnMvS2NvbmZpZzozNTpjb25maWcgTlRGU19GU19QT1NJWF9BQ0xcXG5mcy9udGZzL0tjb25maWctMzYtXFx0Ym9vbCBcXFwiTlRGUyBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTc6MTE6NTQuMDM5NDAzMTkyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NDgwODE2NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkV4YW1pbmluZyBOVEZTIFdyaXRlIFN1cHBvcnQqKlxuXG5BbHJpZ2h0LCBoYW5nIG9uIGEgc2Vjb25kLi4uIGBOVEZTX1JXYCBpcyBwb2ludGluZyB0byB0aGUgKm5ldyogYGZzL250ZnMzYCBkcml2ZXIsIG5vdCB0aGUgbGVnYWN5IGBmcy9udGZzYD8gSW50ZXJlc3RpbmcuIEkgbmVlZCB0byBxdWlja2x5IGNvbmZpcm0gc29tZXRoaW5nIGFib3V0IHdyaXRlIGNhcGFiaWxpdGllcyBoZXJlLiBJcyB3cml0ZSBzdXBwb3J0IGZvciB0aGUgb2xkZXIgYGZzL250ZnNgIGRyaXZlciBlbmFibGVkIGJ5IGRlZmF1bHQsIG9yIGlzIGl0IGdhdGVkIGJlaGluZCBhIHNlcGFyYXRlIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBsaWtlIGBDT05GSUdfTlRGU19XUklURWA/IEkgbmVlZCB0byBjaGVjayB0aGUga2VybmVsIGNvbmZpZyBvcHRpb25zIHRvIGdldCBhIHByb3BlciBoYW5kbGUgb24gdGhlIGN1cnJlbnQgbGFuZHNjYXBlLiBUaGlzIGlzIGxpa2VseSBkdWUgdG8gdGhlIG5lZWQgZm9yIGEgc3RhYmxlIGFuZCBtb3JlIGZlYXR1cmUtcmljaCBzb2x1dGlvbiB3aXRoIG50ZnMzLiBLbm93aW5nIHRoZSB3cml0ZSBzdXBwb3J0IHN0YXR1cyBvZiBib3RoIGRyaXZlcnMgd2lsbCBpbmZvcm0gdGhlIGZ1dHVyZSBkaXJlY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMTA5LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTc6MTE6NTcuOTg3NDg4MDZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxMTgyMzUwLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTlRGU19SV1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9udGZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTc6MTE6NTguMDQ4Njc3ODM5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMTc5OTcxMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBOVEZTIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBpbnRvIHRoZSBOVEZTIGZpbGUgc3lzdGVtIGNvbmZpZ3VyYXRpb24gYW5kLCBiYXNlZCBvbiB3aGF0IEkgc2VlIGluIGBmcy9udGZzL0tjb25maWdgLCBpdCBzZWVtcyBwcmV0dHkgbGltaXRlZC4gSSdtIG9ubHkgc2VlaW5nIG9wdGlvbnMgZm9yIGBOVEZTX0ZTYCwgYE5URlNfREVCVUdgLCBhbmQgYE5URlNfRlNfUE9TSVhfQUNMYC4gVGhhdCBmZWVscyBzcGFyc2UsIHJpZ2h0PyBJIHdhcyBleHBlY3RpbmcgbW9yZSBncmFudWxhciBjb250cm9sIGhlcmUuXG5cbk5vdywgSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciByZWFkLXdyaXRlIGNhcGFiaWxpdGllcyBhcmUgZXhwbGljaXRseSBjb25maWd1cmVkLiBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBgZnMvbnRmcy9LY29uZmlnYCBmb3IgdGhlIGBOVEZTX1JXYCBvcHRpb24uIEkgY2FuJ3QgYmUgc3VyZSwgYnV0IEkgZmVlbCBsaWtlIEknbSBtaXNzaW5nIHNvbWV0aGluZyBpbXBvcnRhbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMzY2LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTc6MTI6MDEuMzY2Njc4MTY2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTMzNzI4OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiUldcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbnRmcy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxNzoxMjowMS40MDgwMjI2NzVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ4ODg5MjA4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipOYXZpZ2F0aW5nIHRoZSBOVEZTIExhbmRzY2FwZSoqXG5cblJpZ2h0LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoZSBOVEZTIGRyaXZlciBzaXR1YXRpb24sIHRyeWluZyB0byBmaWd1cmUgb3V0IHNvbWUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJIHJlbWVtYmVyIHNlZWluZyBzb21ldGhpbmcgYWJvdXQgcmVhZC13cml0ZSBjYXBhYmlsaXRpZXMuLi4gYW5kIGluaXRpYWxseSwgSSB3YXMgbG9va2luZyBhdCB0aGUgb2xkIGBmcy9udGZzL0tjb25maWdgLCBidXQgKnRoYXQncyogbm90IHF1aXRlIHJpZ2h0LiBIbW0sIG5vIGBOVEZTX1JXYCBkZWZpbmVkIHRoZXJlLiBEdWgsIG9mIGNvdXJzZSEgVGhhdCdzIGxlZ2FjeSBjb2RlLiBJIG5lZWQgdG8gYmUgaW4gdGhlIG5ldyBgbnRmczNgIGRyaXZlciBub3cuIExldCdzIHBpdm90IGFuZCBjaGVjayBgZnMvbnRmczMvS2NvbmZpZ2AgaW5zdGVhZC4gVGhhdCdzIHdoZXJlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgKnNob3VsZCogcmVzaWRlLCBhbmQgd2hlcmUgSSBzaG91bGQgZmluZCB0aGUgc2V0dGluZ3MgZm9yIHJlYWQtd3JpdGUgc3VwcG9ydCwgbm93IHRoYXQgdGhlIHJld3JpdGUgaXMgZnVsbHkgaW50ZWdyYXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM2MTQsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxNzoxMjowNC44OTY5MTY5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjI1Njc0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTlRGUzNfRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbnRmczMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9udGZzMy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvbnRmczMvS2NvbmZpZzoyOmNvbmZpZyBOVEZTM19GU1xcbmZzL250ZnMzL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiTlRGUyBSZWFkLVdyaXRlIGZpbGUgc3lzdGVtIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9udGZzMy9LY29uZmlnPTI4PWNvbmZpZyBOVEZTM19MWlhfWFBSRVNTXFxuLS1cXG5mcy9udGZzMy9LY29uZmlnLTM3LVxcbmZzL250ZnMzL0tjb25maWc6Mzg6Y29uZmlnIE5URlMzX0ZTX1BPU0lYX0FDTFxcbmZzL250ZnMzL0tjb25maWctMzktXFx0Ym9vbCBcXFwiTlRGUyBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTc6MTI6MDQuOTQzMTgwMjI5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NDYwODA3NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIE5URlMgUGF0Y2gqKlxuXG5BbHJpZ2h0LCB0aGUgcGF0Y2ggbGFuZGVkIGluIGBmcy9udGZzL2ZpbGUuY2AuIFRoYXQncyBhIGtleSBmaWxlLCBidXQgSSBuZWVkIGEgcXVpY2sgc2FuaXR5IGNoZWNrIGJlZm9yZSBkaXZpbmcgZGVlcC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNvbmZpcm0gd2hlcmUgd3JpdGUgc3VwcG9ydCBleGlzdHMsIGxldCdzIG1ha2Ugc3VyZSB0aGF0IHRoYXQgaXMgcHJlc2VudCB3aXRoaW4gYGZzL250ZnMvS2NvbmZpZ2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MDQ1LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTc6MTI6MDcuODg5MjYzMzgyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDk5Mzc4OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwid3JpdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbnRmcy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxNzoxMjowNy45MzQyNjgzMDFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEyNTM0MjQ1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKktjb25maWcgRmlsZSBFeGFtaW5hdGlvbioqXG5cbkhtbSwgc3RyYW5nZS4gSSB3YXMgZXhwZWN0aW5nIHRvIGZpbmQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gXCJ3cml0ZVwiIGZ1bmN0aW9uYWxpdHkgaW4gYGZzL250ZnMvS2NvbmZpZ2AsIGJ1dCBhIHF1aWNrIHNjYW4gc3VnZ2VzdHMgaXQncyBub3QgcHJlc2VudC4gT2theSwgSSBuZWVkIHRvIGJlIHRob3JvdWdoLiBJIGNhbid0IGp1c3QgYXNzdW1lIEknbSByaWdodCwgZXZlbiB3aXRoIG15IGV4cGVyaWVuY2UuIEknbGwgbmVlZCB0byBnbyBiYWNrIGFuZCBtZXRob2RpY2FsbHkgY2hlY2sgdGhlIGVudGlyZSBmaWxlIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIHRoZSBrZXl3b3JkIGlzbid0IHVzZWQuIEkgZG9uJ3Qgd2FudCB0byBtaXNzIGFueXRoaW5nIHN1YnRsZSBoaWRkZW4gd2l0aGluIGEgZGVwZW5kZW5jeSBzdGF0ZW1lbnQgb3IgYSBjb21tZW50LiBHb3R0YSBiZSBtZXRpY3Vsb3VzIGhlcmUuIFRoaXMgS2NvbmZpZyBmaWxlIGlzIGEgY3J1Y2lhbCBlbGVtZW50IG9mIGZpbGVzeXN0ZW0gY29uZmlndXJhdGlvbiwgYW5kIG1pc3NpbmcgYSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbiBjYW4gaW50cm9kdWNlIGlzc3VlcyBkb3duIHRoZSBsaW5lLCBzbyBjYXJlZnVsIGluc3BlY3Rpb24gaXMgcGFyYW1vdW50LiBJJ2xsIHRha2UgbXkgdGltZSBhbmQgbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MjE2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTc6MTI6MTEuMDU5NjEzMjgyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0NzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL250ZnMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBOVEZTX0ZTXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiTlRGUyBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcbiAgIDQ6XFx0XFx0c2VsZWN0IE5MU1xcbiAgIDU6XFx0XFx0c2VsZWN0IEZTX0lPTUFQXFxuICAgNjpcXHRcXHRoZWxwXFxuICAgNzpcXHRcXHQgIE5URlMgaXMgdGhlIGZpbGUgc3lzdGVtIG9mIE1pY3Jvc29mdCBXaW5kb3dzIE5ULCAyMDAwLCBYUCBhbmQgMjAwMy5cXG4gICA4OlxcdFxcdCAgVGhpcyBhbGxvd3MgeW91IHRvIG1vdW50IGRldmljZXMgZm9ybWF0dGVkIHdpdGggdGhlIG50ZnMgZmlsZSBzeXN0ZW0uXFxuICAgOTpcXHRcXG4gIDEwOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkXFxuICAxMTpcXHRcXHQgIG50ZnMuXFxuICAxMjpcXHRcXG4gIDEzOlxcdGNvbmZpZyBOVEZTX0RFQlVHXFxuICAxNDpcXHRcXHRib29sIFxcXCJOVEZTIGRlYnVnZ2luZyBzdXBwb3J0XFxcIlxcbiAgMTU6XFx0XFx0ZGVwZW5kcyBvbiBOVEZTX0ZTXFxuICAxNjpcXHRcXHRoZWxwXFxuICAxNzpcXHRcXHQgIElmIHlvdSBhcmUgZXhwZXJpZW5jaW5nIGFueSBwcm9ibGVtcyB3aXRoIHRoZSBOVEZTIGZpbGUgc3lzdGVtLCBzYXlcXG4gIDE4OlxcdFxcdCAgWSBoZXJlLiAgVGhpcyB3aWxsIHJlc3VsdCBpbiBhZGRpdGlvbmFsIGNvbnNpc3RlbmN5IGNoZWNrcyB0byBiZVxcbiAgMTk6XFx0XFx0ICBwZXJmb3JtZWQgYnkgdGhlIGRyaXZlciBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgZGVidWdnaW5nIG1lc3NhZ2VzIHRvXFxuICAyMDpcXHRcXHQgIGJlIHdyaXR0ZW4gdG8gdGhlIHN5c3RlbSBsb2cuICBOb3RlIHRoYXQgZGVidWdnaW5nIG1lc3NhZ2VzIGFyZVxcbiAgMjE6XFx0XFx0ICBkaXNhYmxlZCBieSBkZWZhdWx0LiAgVG8gZW5hYmxlIHRoZW0sIHN1cHBseSB0aGUgb3B0aW9uIGRlYnVnX21zZ3M9MVxcbiAgMjI6XFx0XFx0ICBhdCB0aGUga2VybmVsIGNvbW1hbmQgbGluZSB3aGVuIGJvb3RpbmcgdGhlIGtlcm5lbCBvciBhcyBhbiBvcHRpb25cXG4gIDIzOlxcdFxcdCAgdG8gaW5zbW9kIHdoZW4gbG9hZGluZyB0aGUgbnRmcyBtb2R1bGUuICBPbmNlIHRoZSBkcml2ZXIgaXMgYWN0aXZlLFxcbiAgMjQ6XFx0XFx0ICB5b3UgY2FuIGVuYWJsZSBkZWJ1Z2dpbmcgbWVzc2FnZXMgYnkgZG9pbmcgKGFzIHJvb3QpOlxcbiAgMjU6XFx0XFx0ICBlY2hvIDEgXFx1MDAzZSAvcHJvYy9zeXMvZnMvbnRmcy1kZWJ1Z1xcbiAgMjY6XFx0XFx0ICBSZXBsYWNpbmcgdGhlIFxcXCIxXFxcIiB3aXRoIFxcXCIwXFxcIiB3b3VsZCBkaXNhYmxlIGRlYnVnIG1lc3NhZ2VzLlxcbiAgMjc6XFx0XFxuICAyODpcXHRcXHQgIElmIHlvdSBsZWF2ZSBkZWJ1Z2dpbmcgbWVzc2FnZXMgZGlzYWJsZWQsIHRoaXMgcmVzdWx0cyBpbiBsaXR0bGVcXG4gIDI5OlxcdFxcdCAgb3ZlcmhlYWQsIGJ1dCBlbmFibGluZyBkZWJ1ZyBtZXNzYWdlcyByZXN1bHRzIGluIHZlcnkgc2lnbmlmaWNhbnRcXG4gIDMwOlxcdFxcdCAgc2xvd2Rvd24gb2YgdGhlIHN5c3RlbS5cXG4gIDMxOlxcdFxcbiAgMzI6XFx0XFx0ICBXaGVuIHJlcG9ydGluZyBidWdzLCBwbGVhc2UgdHJ5IHRvIGhhdmUgYXZhaWxhYmxlIGEgZnVsbCBkdW1wIG9mXFxuICAzMzpcXHRcXHQgIGRlYnVnZ2luZyBtZXNzYWdlcyB3aGlsZSB0aGUgbWlzYmVoYXZpb3VyIHdhcyBvY2N1cnJpbmcuXFxuICAzNDpcXHRcXG4gIDM1OlxcdGNvbmZpZyBOVEZTX0ZTX1BPU0lYX0FDTFxcbiAgMzY6XFx0XFx0Ym9vbCBcXFwiTlRGUyBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1xcXCJcXG4gIDM3OlxcdFxcdGRlcGVuZHMgb24gTlRGU19GU1xcbiAgMzg6XFx0XFx0c2VsZWN0IEZTX1BPU0lYX0FDTFxcbiAgMzk6XFx0XFx0aGVscFxcbiAgNDA6XFx0XFx0ICBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0cyAoQUNMcykgc3VwcG9ydCBhZGRpdGlvbmFsIGFjY2VzcyByaWdodHNcXG4gIDQxOlxcdFxcdCAgZm9yIHVzZXJzIGFuZCBncm91cHMgYmV5b25kIHRoZSBzdGFuZGFyZCBvd25lci9ncm91cC93b3JsZCBzY2hlbWUuXFxuICA0MjpcXHRcXG4gIDQzOlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBBQ0wgc3VwcG9ydCBmb3IgbnRmcywgcHJvdmlkaW5nIGZ1bmN0aW9uYWwgcGFyaXR5XFxuICA0NDpcXHRcXHQgIHdpdGggbnRmczMgZHJpdmllci5cXG4gIDQ1OlxcdFxcbiAgNDY6XFx0XFx0ICBOT1RFOiB0aGlzIGlzIGxpbnV4IG9ubHkgZmVhdHVyZS4gV2luZG93cyB3aWxsIGlnbm9yZSB0aGVzZSBBQ0xzLlxcbiAgNDc6XFx0XFxuICA0ODpcXHRcXHQgIElmIHlvdSBkb24ndCBrbm93IHdoYXQgQWNjZXNzIENvbnRyb2wgTGlzdHMgYXJlLCBzYXkgTi5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTc6MTI6MTEuMDU5Njg5MTkyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MDU3Njc5NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBOVEZTIExhbmRzY2FwZSoqXG5cbkhtbSwgaW50ZXJlc3RpbmcuIEl0IHNlZW1zIGxpa2UgYGZzL250ZnNgIGhhcyB3cml0ZSBzdXBwb3J0IGVuYWJsZWQgcmlnaHQgb3V0IG9mIHRoZSBib3ggbm93LiBUaGF0J3MgYSBkZXBhcnR1cmUgZnJvbSBob3cgdGhpbmdzIHVzZWQgdG8gYmUuIEkgc2VlbSB0byByZWNhbGwgdGhhdCBpbiBlYXJsaWVyIGtlcm5lbHMsIHRoZSBOVEZTIGZpbGVzeXN0ZW0gbW9kdWxlIGhhZCBhIGBOVEZTX1JXYCBmbGFnLi4ucmlnaHQ/IFdhcyBpdCBkcm9wcGVkLCBvciBwZXJoYXBzIG1lcmdlZCBpbnRvIHNvbWV0aGluZyBlbHNlPyBJdCdzIGJlZW4gYSB3aGlsZSBzaW5jZSBJIGhhZCB0byByZWFsbHkgZGlnIGludG8gdGhpcyBwYXJ0aWN1bGFyIGJpdCBvZiBrZXJuZWwgY29kZS4gQmVzdCB3YXkgdG8gZmlndXJlIG91dCB3aGF0J3MgY2hhbmdlZCBpcyB0byBnbyBkaXJlY3RseSB0byB0aGUgc291cmNlLiBMZXQgbWUgdGFrZSBhIGxvb2sgYXQgdGhlIGBmcy9udGZzL01ha2VmaWxlYCBhbmQgc2VlIGlmIHRoZSBjbHVlcyBhcmUgaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MTc1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxNzoxMjoxNC41NjU0NTk0NzZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE4OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvbnRmcy9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHRcXG4gICAzOlxcdG9iai0kKENPTkZJR19OVEZTX0ZTKSArPSBudGZzLm9cXG4gICA0OlxcdFxcbiAgIDU6XFx0bnRmcy15IDo9IGFvcHMubyBhdHRyaWIubyBjb2xsYXRlLm8gZGlyLm8gZmlsZS5vIGluZGV4Lm8gaW5vZGUubyBcXFxcXFxuICAgNjpcXHRcXHQgIG1mdC5vIG1zdC5vIG5hbWVpLm8gcnVubGlzdC5vIHN1cGVyLm8gdW5pc3RyLm8gYXR0cmxpc3QubyBlYS5vIFxcXFxcXG4gICA3OlxcdFxcdCAgdXBjYXNlLm8gYml0bWFwLm8gbGNuYWxsb2MubyBsb2dmaWxlLm8gcmVwYXJzZS5vIGNvbXByZXNzLm8gXFxcXFxcbiAgIDg6XFx0XFx0ICBpb21hcC5vIGRlYnVnLm8gc3lzY3RsLm8gb2JqZWN0X2lkLm8gYmRldi1pby5vXFxuICAgOTpcXHRcXG4gIDEwOlxcdGNjZmxhZ3MtJChDT05GSUdfTlRGU19ERUJVRykgKz0gLURERUJVR1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxNzoxMjoxNC41NjU1MjI2ODZaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA2MjQ2MTYzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIE5URlM6IEEgRm9jdXNlZCBBcHByb2FjaCoqXG5cbkFscmlnaHQsIGl0IGxvb2tzIGxpa2UgYE5URlNfRlNgIGlzIHRoZSBvbmx5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIEkgbmVlZCB0byBjb25zaWRlciBmb3IgdGhpcy4gU3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gQnV0IGhvbGQgb24sIHRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgaW9jdGxzIHdpdGhpbiBgZnMvbnRmcy9maWxlLmNgLiBMZXQncyBzZWUuLi4gd2UndmUgZ290IGBOVEZTX0lPQ19TVFJFQU1fUkVBRGAsIGBOVEZTX0lPQ19TVFJFQU1fV1JJVEVgLCBgTlRGU19JT0NfU1RSRUFNX1JFTU9WRWAsIGFuZCBgTlRGU19JT0NfTElTVF9TVFJFQU1TYC4gSW50ZXJlc3RpbmcuIFRoZXNlIGRlZmluaXRlbHkgd2FycmFudCBhIGNsb3NlciBsb29rIHdpdGggZnV6emluZy5cblxuTXkgcHJpbWFyeSBmb2N1cyBoZXJlIHdpbGwgYmUgYG50ZnNfaW9jdGxgLiBJdCBhcHBlYXJzIHRvIGJlIHRoZSBlbnRyeSBwb2ludCBmb3IgaGFuZGxpbmcgdGhlc2UgbmV3IGlvY3Rscy4gTGV0IG1lIGRvdWJsZS1jaGVjayB0aGUgY29kZSBkaWZmIHF1aWNrbHkgdG8gY29uZmlybSB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zLiBPa2F5LCBgbnRmc19yZWFkX25hbWVkX3N0cmVhbWAsIGBudGZzX3dyaXRlX25hbWVkX3N0cmVhbWAsIGBudGZzX3JlbW92ZV9uYW1lZF9zdHJlYW1gLCBgbnRmc19pb2N0bF9zdHJlYW1gLCBhbmQgYG50ZnNfaW9jdGxfbGlzdF9zdHJlYW1zYCBhcmUgYWxsIHN0YXRpYyBoZWxwZXJzLiBKdXN0IGBudGZzX2lvY3RsYCBpcyBub24tc3RhdGljLlxuXG5Ob3csIGxldCdzIGp1c3QgbWFrZSBzdXJlIGBudGZzX2lvY3RsYCBpcyBhY3R1YWxseSBleHBvcnRlZCBhbmQgdXNlZCBvdXRzaWRlIG9mIGBmcy9udGZzL2ZpbGUuY2AuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgZnV6emluZyBwb3RlbnRpYWwgbGllcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU2NDAsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxNzoxMjoxOS42Mjc5ODY5ODVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxMTI4Mjk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm50ZnNfaW9jdGxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbnRmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbnRmcy9kaXIuYz0xMTk1PWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbnRmc19kaXJfb3BzID0ge1xcbi0tXFxuZnMvbnRmcy9kaXIuYy0xMjAxLVxcdC5yZWxlYXNlXFx0PSBudGZzX2Rpcl9yZWxlYXNlLFxcbmZzL250ZnMvZGlyLmM6MTIwMjpcXHQudW5sb2NrZWRfaW9jdGxcXHQ9IG50ZnNfaW9jdGwsXFxuZnMvbnRmcy9kaXIuYy0xMjAzLSNpZmRlZiBDT05GSUdfQ09NUEFUXFxuLS1cXG5mcy9udGZzL2ZpbGUuYz03NDA9c3RhdGljIHNzaXplX3QgbnRmc19maWxlX3NwbGljZV9yZWFkKHN0cnVjdCBmaWxlICppbiwgbG9mZl90ICpwcG9zLFxcbi0tXFxuZnMvbnRmcy9maWxlLmMtNzQ4LVxcbmZzL250ZnMvZmlsZS5jOjc0OTpzdGF0aWMgaW50IG50ZnNfaW9jdGxfc2h1dGRvd24oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyBhcmcpXFxuZnMvbnRmcy9maWxlLmMtNzUwLXtcXG4tLVxcbmZzL250ZnMvZmlsZS5jLTc2MS1cXG5mcy9udGZzL2ZpbGUuYzo3NjI6c3RhdGljIGludCBudGZzX2lvY3RsX2dldF92b2x1bWVfbGFiZWwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbmZzL250ZnMvZmlsZS5jLTc2My17XFxuLS1cXG5mcy9udGZzL2ZpbGUuYy03ODQtXFxuZnMvbnRmcy9maWxlLmM6Nzg1OnN0YXRpYyBpbnQgbnRmc19pb2N0bF9zZXRfdm9sdW1lX2xhYmVsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFyZylcXG5mcy9udGZzL2ZpbGUuYy03ODYte1xcbi0tXFxuZnMvbnRmcy9maWxlLmMtODA4LVxcbmZzL250ZnMvZmlsZS5jOjgwOTpzdGF0aWMgaW50IG50ZnNfaW9jdGxfZml0cmltKHN0cnVjdCBudGZzX3ZvbHVtZSAqdm9sLCB1bnNpZ25lZCBsb25nIGFyZylcXG5mcy9udGZzL2ZpbGUuYy04MTAte1xcbi0tXFxuZnMvbnRmcy9maWxlLmM9MTAzMT1lbnVtIG50ZnNfc3RyZWFtX29wIHtcXG4tLVxcbmZzL250ZnMvZmlsZS5jLTEwMzYtXFxuZnMvbnRmcy9maWxlLmM6MTAzNzpzdGF0aWMgbG9uZyBudGZzX2lvY3RsX3N0cmVhbShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhcmcsXFxuZnMvbnRmcy9maWxlLmMtMTAzOC1cXHRcXHRcXHQgICAgICBlbnVtIG50ZnNfc3RyZWFtX29wIG9wKVxcbi0tXFxuZnMvbnRmcy9maWxlLmMtMTE3Ni1cXG5mcy9udGZzL2ZpbGUuYzoxMTc3OnN0YXRpYyBpbnQgbnRmc19pb2N0bF9saXN0X3N0cmVhbXMoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbmZzL250ZnMvZmlsZS5jLTExNzgte1xcbi0tXFxuZnMvbnRmcy9maWxlLmMtMTM0Mi1cXG5mcy9udGZzL2ZpbGUuYzoxMzQzOmxvbmcgbnRmc19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuZnMvbnRmcy9maWxlLmMtMTM0NC17XFxuLS1cXG5mcy9udGZzL2ZpbGUuYy0xMzQ2LVxcdGNhc2UgRlNfSU9DX1NIVVRET1dOOlxcbmZzL250ZnMvZmlsZS5jOjEzNDc6XFx0XFx0cmV0dXJuIG50ZnNfaW9jdGxfc2h1dGRvd24oZmlsZV9pbm9kZShmaWxwKS1cXHUwMDNlaV9zYiwgYXJnKTtcXG5mcy9udGZzL2ZpbGUuYy0xMzQ4LVxcdGNhc2UgRlNfSU9DX0dFVEZTTEFCRUw6XFxuZnMvbnRmcy9maWxlLmM6MTM0OTpcXHRcXHRyZXR1cm4gbnRmc19pb2N0bF9nZXRfdm9sdW1lX2xhYmVsKGZpbHAsIGFyZyk7XFxuZnMvbnRmcy9maWxlLmMtMTM1MC1cXHRjYXNlIEZTX0lPQ19TRVRGU0xBQkVMOlxcbmZzL250ZnMvZmlsZS5jOjEzNTE6XFx0XFx0cmV0dXJuIG50ZnNfaW9jdGxfc2V0X3ZvbHVtZV9sYWJlbChmaWxwLCBhcmcpO1xcbmZzL250ZnMvZmlsZS5jLTEzNTItXFx0Y2FzZSBGSVRSSU06XFxuZnMvbnRmcy9maWxlLmM6MTM1MzpcXHRcXHRyZXR1cm4gbnRmc19pb2N0bF9maXRyaW0oTlRGU19TQihmaWxlX2lub2RlKGZpbHApLVxcdTAwM2VpX3NiKSwgYXJnKTtcXG5mcy9udGZzL2ZpbGUuYy0xMzU0LVxcdGNhc2UgTlRGU19JT0NfU1RSRUFNX1JFQUQ6XFxuZnMvbnRmcy9maWxlLmM6MTM1NTpcXHRcXHRyZXR1cm4gbnRmc19pb2N0bF9zdHJlYW0oZmlscCwgYXJnLCBOVEZTX1NUUkVBTV9PUF9SRUFEKTtcXG5mcy9udGZzL2ZpbGUuYy0xMzU2LVxcdGNhc2UgTlRGU19JT0NfU1RSRUFNX1dSSVRFOlxcbmZzL250ZnMvZmlsZS5jOjEzNTc6XFx0XFx0cmV0dXJuIG50ZnNfaW9jdGxfc3RyZWFtKGZpbHAsIGFyZywgTlRGU19TVFJFQU1fT1BfV1JJVEUpO1xcbmZzL250ZnMvZmlsZS5jLTEzNTgtXFx0Y2FzZSBOVEZTX0lPQ19TVFJFQU1fUkVNT1ZFOlxcbmZzL250ZnMvZmlsZS5jOjEzNTk6XFx0XFx0cmV0dXJuIG50ZnNfaW9jdGxfc3RyZWFtKGZpbHAsIGFyZywgTlRGU19TVFJFQU1fT1BfUkVNT1ZFKTtcXG5mcy9udGZzL2ZpbGUuYy0xMzYwLVxcdGNhc2UgTlRGU19JT0NfTElTVF9TVFJFQU1TOlxcbmZzL250ZnMvZmlsZS5jOjEzNjE6XFx0XFx0cmV0dXJuIG50ZnNfaW9jdGxfbGlzdF9zdHJlYW1zKGZpbHAsIGFyZyk7XFxuZnMvbnRmcy9maWxlLmMtMTM2Mi1cXHRkZWZhdWx0Olxcbi0tXFxuZnMvbnRmcy9maWxlLmM9MTM2OD1sb25nIG50ZnNfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLFxcbi0tXFxuZnMvbnRmcy9maWxlLmMtMTM3MC17XFxuZnMvbnRmcy9maWxlLmM6MTM3MTpcXHRyZXR1cm4gbnRmc19pb2N0bChmaWxwLCBjbWQsICh1bnNpZ25lZCBsb25nKWNvbXBhdF9wdHIoYXJnKSk7XFxuZnMvbnRmcy9maWxlLmMtMTM3Mi19XFxuLS1cXG5mcy9udGZzL2ZpbGUuYz0xNjg0PWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbnRmc19maWxlX29wcyA9IHtcXG4tLVxcbmZzL250ZnMvZmlsZS5jLTE2OTMtXFx0LnNwbGljZV93cml0ZVxcdD0gaXRlcl9maWxlX3NwbGljZV93cml0ZSxcXG5mcy9udGZzL2ZpbGUuYzoxNjk0OlxcdC51bmxvY2tlZF9pb2N0bFxcdD0gbnRmc19pb2N0bCxcXG5mcy9udGZzL2ZpbGUuYy0xNjk1LSNpZmRlZiBDT05GSUdfQ09NUEFUXFxuLS1cXG5mcy9udGZzL250ZnMuaD0yNTM9aW50IG50ZnNfZm9yY2Vfc2h1dGRvd24oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIGZsYWdzKTtcXG5mcy9udGZzL250ZnMuaDoyNTQ6bG9uZyBudGZzX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7XFxuZnMvbnRmcy9udGZzLmgtMjU1LSNpZmRlZiBDT05GSUdfQ09NUEFUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE3OjEyOjE5LjY3OTEyMDUwNFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjM5ODMxNjk5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBOVEZTIElvY3RsIFBhdGNoIGZvciBGdXp6aW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIGZvciBmdXp6aW5nLiBgbnRmc19pb2N0bGAgaW1tZWRpYXRlbHkganVtcHMgb3V0IGFzIHRoZSBjZW50cmFsIHBvaW50IGhlcmUuIEl0J3Mgbm9uLXN0YXRpYyBhbmQgYWxyZWFkeSB1dGlsaXplZCB3aXRoaW4gYG50ZnNfZGlyX29wc2AgYW5kIGBudGZzX2ZpbGVfb3BzYCwgc28gaXQncyBjbGVhcmx5IHRoZSByaWdodCBzeW1ib2wgdG8gZm9jdXMgb24uXG5cbkZpcnN0LCBJIHF1aWNrbHkgY29uZmlybWVkIHRoYXQgYGZzL250ZnNgIGlzIHN0aWxsIHByZXNlbnQgaW4gdGhlIGtlcm5lbCwgYW5kIHRoZSBwYXRjaCwgd2hpY2ggaW50cm9kdWNlcyB0aGUgbmV3IGlvY3Rscywgd2FzIGluZGVlZCBhcHBsaWVkIHRvIGBmcy9udGZzL2ZpbGUuY2AuIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsaXR5IGZvciBuYW1lZCBzdHJlYW1zLCBhZGRpbmcgYE5URlNfSU9DX1NUUkVBTV9SRUFEYCwgYE5URlNfSU9DX1NUUkVBTV9XUklURWAsIGBOVEZTX0lPQ19TVFJFQU1fUkVNT1ZFYCwgYW5kIGBOVEZTX0lPQ19MSVNUX1NUUkVBTVNgLCBhcyB3ZWxsIGFzIGEgY29ycmVzcG9uZGluZyBgdWFwaS9saW51eC9udGZzLmhgIGhlYWRlci5cblxuSSBjaGVja2VkIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGFuZCBgTlRGU19GU2AgaXMgdGhlIG9ubHkgb25lIHJlcXVpcmVkLiBObyBkZXBlbmRlbmNlIG9uIGBOVEZTX0ZTX1BPU0lYX0FDTGAgb3IgYW55IG90aGVyIG9ic2N1cmUgc2V0dGluZ3MuIFRoaXMgc2ltcGxpZmllcyB0aGluZ3MuXG5cbkEgcXVpY2sgcmV2aWV3IG9mIHRoZSBuZXcgZnVuY3Rpb25zIGFkZGVkIHNob3dlZCB0aGF0IHRoZXkgYXJlIGFsbCBzdGF0aWMsIGV4Y2VwdCBmb3IgYG50ZnNfaW9jdGxgLCB3aGljaCBpcyBhIGtleSBtb2RpZmljYXRpb24gdG8gaGFuZGxlIHRoZSBuZXcgaW9jdGxzLlxuXG5MZXQgbWUgdGFrZSBhbm90aGVyIGxvb2sgYXQgdGhlIHBhdGNoIGl0c2VsZiB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmc6XG5gYGBjXG4rc3RhdGljIGludCBudGZzX3JlYWRfbmFtZWRfc3RyZWFtKHN0cnVjdCBudGZzX2lub2RlICpuaSwgX19sZTE2ICp1bmFtZSxcbitcdFx0dTMyIHVuYW1lX2xlbiwgdTY0IG9mZnNldCwgdTY0IGxlbiwgdm9pZCAqZGF0YV9idWYsXG4rXHRcdHU2NCAqcmJ5dGVzKVxuLi4uXG4rc3RhdGljIGludCBudGZzX3dyaXRlX25hbWVkX3N0cmVhbShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIF9fbGUxNiAqdW5hbWUsXG4rXHRcdHUzMiB1bmFtZV9sZW4sIHU2NCBvZmZzZXQsIHU2NCBsZW4sIHZvaWQgKmRhdGFfc3RyZWFtLFxuK1x0XHR1NjQgKndieXRlcylcbi4uLlxuK3N0YXRpYyBpbnQgbnRmc19yZW1vdmVfbmFtZWRfc3RyZWFtKHN0cnVjdCBudGZzX2lub2RlICpuaSwgX19sZTE2ICp1bmFtZSxcbitcdFx0dTMyIHVuYW1lX2xlbilcbi4uLlxuK3N0YXRpYyBsb25nIG50ZnNfaW9jdGxfc3RyZWFtKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFyZyxcbitcdFx0XHQgICAgICBlbnVtIG50ZnNfc3RyZWFtX29wIG9wKVxuLi4uXG4rc3RhdGljIGludCBudGZzX2lvY3RsX2xpc3Rfc3RyZWFtcyhzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhcmcpXG4uLi5cbiBsb25nIG50ZnNfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuIHtcbiBcdHN3aXRjaCAoY21kKSB7XG5AQCAtODUwLDYgKzEzNTEsMTQgQEAgbG9uZyBudGZzX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbiBcdFx0cmV0dXJuIG50ZnNfaW9jdGxfc2V0X3ZvbHVtZV9sYWJlbChmaWxwLCBhcmcpO1xuIFx0Y2FzZSBGSVRSSU06XG4gXHRcdHJldHVybiBudGZzX2lvY3RsX2ZpdHJpbShOVEZTX1NCKGZpbGVfaW5vZGUoZmlscCktXHUwMDNlaV9zYiksIGFyZyk7XG4rXHRjYXNlIE5URlNfSU9DX1NUUkVBTV9SRUFEOlxuK1x0XHRyZXR1cm4gbnRmc19pb2N0bF9zdHJlYW0oZmlscCwgYXJnLCBOVEZTX1NUUkVBTV9PUF9SRUFEKTtcbitcdGNhc2UgTlRGU19JT0NfU1RSRUFNX1dSSVRFOlxuK1x0XHRyZXR1cm4gbnRmc19pb2N0bF9zdHJlYW0oZmlscCwgYXJnLCBOVEZTX1NUUkVBTV9PUF9XUklURSk7XG4rXHRjYXNlIE5URlNfSU9DX1NUUkVBTV9SRU1PVkU6XG4rXHRcdHJldHVybiBudGZzX2lvY3RsX3N0cmVhbShmaWxwLCBhcmcsIE5URlNfU1RSRUFNX09QX1JFTU9WRSk7XG4rXHRjYXNlIE5URlNfSU9DX0xJU1RfU1RSRUFNUzpcbitcdFx0cmV0dXJuIG50ZnNfaW9jdGxfbGlzdF9zdHJlYW1zKGZpbHAsIGFyZyk7XG4gXHRkZWZhdWx0OlxuIFx0XHRyZXR1cm4gLUVOT1RUWTtcbiBcdH1cbmBgYFxuXG5JbmRlZWQsIHRoZSBwYXRjaCBpcyBmdW5jdGlvbmFsIGFuZCBhZGRzIGZ1bmN0aW9uYWxpdHkgcmVsYXRlZCB0byBuYW1lZCBzdHJlYW1zIChBbHRlcm5hdGUgRGF0YSBTdHJlYW1zKSB0byBOVEZTLCBhbGwgcmVhY2hhYmxlIHRocm91Z2ggYG50ZnNfaW9jdGxgLiBJdCdzIGNsZWFybHkgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuXG5cbk15IGNvbmNsdXNpb24gaXM6XG5cbkNvbmZpZ3M6IGBOVEZTX0ZTYFxuRm9jdXMgU3ltYm9sOiBgbnRmc19pb2N0bGBcblJlYXNvbmluZzogVGhlIHBhdGNoIGFkZHMgbmV3IGlvY3RscyB0byB0aGUgTlRGUyBmaWxlc3lzdGVtIHRvIHJlYWQsIHdyaXRlLCByZW1vdmUsIGFuZCBsaXN0IG5hbWVkIHN0cmVhbXMuIFRoZXNlIGlvY3RscyBhcmUgYWxsIGhhbmRsZWQgd2l0aGluIGBudGZzX2lvY3RsYC4gYE5URlNfRlNgIGlzIHRoZSBvbmx5IGNvbmZpZyBuZWVkZWQuXG5JJ2xsIG5vdyBwcm92aWRlIHRoZSByZWxldmFudCByZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzY4MSwiT3V0cHV0VG9rZW5zIjo4MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxNzoxMjozMi4wNzc0NDE3NjdaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjA2NTg5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTlRGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm50ZnNfaW9jdGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIG5ldyBpb2N0bHMgdG8gdGhlIE5URlMgZmlsZXN5c3RlbSB0byByZWFkLCB3cml0ZSwgcmVtb3ZlLCBhbmQgbGlzdCBuYW1lZCBzdHJlYW1zIChBbHRlcm5hdGUgRGF0YSBTdHJlYW1zKS4gVGhlIGlvY3RscyBhcmUgcmVhY2hhYmxlIHZpYSBgbnRmc19pb2N0bGAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTlRGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm50ZnNfaW9jdGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIG5ldyBpb2N0bHMgdG8gdGhlIE5URlMgZmlsZXN5c3RlbSB0byByZWFkLCB3cml0ZSwgcmVtb3ZlLCBhbmQgbGlzdCBuYW1lZCBzdHJlYW1zIChBbHRlcm5hdGUgRGF0YSBTdHJlYW1zKS4gVGhlIGlvY3RscyBhcmUgcmVhY2hhYmxlIHZpYSBgbnRmc19pb2N0bGAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow7djrl[1] Phase: Succeeded StartedAt: 2026-07-30 17:13:05 +0000 UTC FinishedAt: 2026-07-30 17:13:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7djrl[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-30 17:13:05 +0000 UTC FinishedAt: 2026-07-30 17:13:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7djrl[2] Phase: Succeeded StartedAt: 2026-07-30 17:13:05 +0000 UTC FinishedAt: 2026-07-30 18:44:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7djrl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6677ee30e197d1c6236d2ad363258bc918c7a3a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6677ee30e197d1c6236d2ad363258bc918c7a3a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"0eb9e701-56ca-4a44-9c51-3fd2fe279335","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-30 17:13:05 +0000 UTC FinishedAt: 2026-07-30 18:44:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"6677ee30e197d1c6236d2ad363258bc918c7a3a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_ioctl"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"6677ee30e197d1c6236d2ad363258bc918c7a3a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"0eb9e701-56ca-4a44-9c51-3fd2fe279335","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow7djrl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6677ee30e197d1c6236d2ad363258bc918c7a3a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6677ee30e197d1c6236d2ad363258bc918c7a3a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"0eb9e701-56ca-4a44-9c51-3fd2fe279335","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-30 17:13:05 +0000 UTC FinishedAt: 2026-07-30 17:13:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7djrl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6677ee30e197d1c6236d2ad363258bc918c7a3a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6677ee30e197d1c6236d2ad363258bc918c7a3a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"0eb9e701-56ca-4a44-9c51-3fd2fe279335","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-30 17:13:05 +0000 UTC FinishedAt: 2026-07-30 17:13:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"6677ee30e197d1c6236d2ad363258bc918c7a3a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow7djrl/series-workflow7djrl-convert-artifact-1903034802/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7djrl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6677ee30e197d1c6236d2ad363258bc918c7a3a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6677ee30e197d1c6236d2ad363258bc918c7a3a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"0eb9e701-56ca-4a44-9c51-3fd2fe279335","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-30 17:13:15 +0000 UTC FinishedAt: 2026-07-30 17:33:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7djrl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6677ee30e197d1c6236d2ad363258bc918c7a3a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6677ee30e197d1c6236d2ad363258bc918c7a3a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"0eb9e701-56ca-4a44-9c51-3fd2fe279335","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-30 17:13:15 +0000 UTC FinishedAt: 2026-07-30 17:33:27 +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:*5ff55810-4a13-4e19-8074-1bcd6f9e615f,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-workflow7djrl/series-workflow7djrl-convert-artifact-1903034802/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": "e3456438-5366-4ad0-820b-138ee04a910e", "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-workflow7djrl/series-workflow7djrl-build-action-82465584/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7djrl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6677ee30e197d1c6236d2ad363258bc918c7a3a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6677ee30e197d1c6236d2ad363258bc918c7a3a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"0eb9e701-56ca-4a44-9c51-3fd2fe279335","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-30 17:13:15 +0000 UTC FinishedAt: 2026-07-30 17:33:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*5ff55810-4a13-4e19-8074-1bcd6f9e615f,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-workflow7djrl/series-workflow7djrl-convert-artifact-1903034802/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": "e3456438-5366-4ad0-820b-138ee04a910e", "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-workflow7djrl/series-workflow7djrl-build-action-82465584/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7djrl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6677ee30e197d1c6236d2ad363258bc918c7a3a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6677ee30e197d1c6236d2ad363258bc918c7a3a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"0eb9e701-56ca-4a44-9c51-3fd2fe279335","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-30 17:33:27 +0000 UTC FinishedAt: 2026-07-30 17:33:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7djrl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6677ee30e197d1c6236d2ad363258bc918c7a3a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6677ee30e197d1c6236d2ad363258bc918c7a3a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"0eb9e701-56ca-4a44-9c51-3fd2fe279335","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-30 17:33:27 +0000 UTC FinishedAt: 2026-07-30 17:33:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7djrl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6677ee30e197d1c6236d2ad363258bc918c7a3a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6677ee30e197d1c6236d2ad363258bc918c7a3a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"0eb9e701-56ca-4a44-9c51-3fd2fe279335","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-30 17:33:27 +0000 UTC FinishedAt: 2026-07-30 17:33:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7djrl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6677ee30e197d1c6236d2ad363258bc918c7a3a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6677ee30e197d1c6236d2ad363258bc918c7a3a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"0eb9e701-56ca-4a44-9c51-3fd2fe279335","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-30 17:33:27 +0000 UTC FinishedAt: 2026-07-30 17:33:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"6677ee30e197d1c6236d2ad363258bc918c7a3a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"0eb9e701-56ca-4a44-9c51-3fd2fe279335","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow7djrl/series-workflow7djrl-convert-artifact-2513710797/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7djrl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6677ee30e197d1c6236d2ad363258bc918c7a3a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6677ee30e197d1c6236d2ad363258bc918c7a3a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"0eb9e701-56ca-4a44-9c51-3fd2fe279335","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-30 17:33:37 +0000 UTC FinishedAt: 2026-07-30 17:35:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7djrl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6677ee30e197d1c6236d2ad363258bc918c7a3a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6677ee30e197d1c6236d2ad363258bc918c7a3a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"0eb9e701-56ca-4a44-9c51-3fd2fe279335","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-30 17:33:37 +0000 UTC FinishedAt: 2026-07-30 17:35:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e3456438-5366-4ad0-820b-138ee04a910e,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-workflow7djrl/series-workflow7djrl-build-action-82465584/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-workflow7djrl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6677ee30e197d1c6236d2ad363258bc918c7a3a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6677ee30e197d1c6236d2ad363258bc918c7a3a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"0eb9e701-56ca-4a44-9c51-3fd2fe279335","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-30 17:35:25 +0000 UTC FinishedAt: 2026-07-30 17:35:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7djrl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6677ee30e197d1c6236d2ad363258bc918c7a3a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6677ee30e197d1c6236d2ad363258bc918c7a3a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"0eb9e701-56ca-4a44-9c51-3fd2fe279335","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-30 17:35:25 +0000 UTC FinishedAt: 2026-07-30 17:35:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7djrl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6677ee30e197d1c6236d2ad363258bc918c7a3a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6677ee30e197d1c6236d2ad363258bc918c7a3a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"0eb9e701-56ca-4a44-9c51-3fd2fe279335","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-30 17:35:25 +0000 UTC FinishedAt: 2026-07-30 17:51:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7djrl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6677ee30e197d1c6236d2ad363258bc918c7a3a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6677ee30e197d1c6236d2ad363258bc918c7a3a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"0eb9e701-56ca-4a44-9c51-3fd2fe279335","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-30 17:35:25 +0000 UTC FinishedAt: 2026-07-30 17:51:29 +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:*5ff55810-4a13-4e19-8074-1bcd6f9e615f,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-workflow7djrl/series-workflow7djrl-convert-artifact-2513710797/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": "a13181e4-f232-4d6b-a8ee-3cc5eba88307", "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-workflow7djrl/series-workflow7djrl-build-action-2666224809/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7djrl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6677ee30e197d1c6236d2ad363258bc918c7a3a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6677ee30e197d1c6236d2ad363258bc918c7a3a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"0eb9e701-56ca-4a44-9c51-3fd2fe279335","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-30 17:35:25 +0000 UTC FinishedAt: 2026-07-30 17:51:19 +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:*5ff55810-4a13-4e19-8074-1bcd6f9e615f,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-workflow7djrl/series-workflow7djrl-convert-artifact-2513710797/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": "a13181e4-f232-4d6b-a8ee-3cc5eba88307", "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-workflow7djrl/series-workflow7djrl-build-action-2666224809/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7djrl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6677ee30e197d1c6236d2ad363258bc918c7a3a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6677ee30e197d1c6236d2ad363258bc918c7a3a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"0eb9e701-56ca-4a44-9c51-3fd2fe279335","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-30 17:51:29 +0000 UTC FinishedAt: 2026-07-30 17:51:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7djrl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6677ee30e197d1c6236d2ad363258bc918c7a3a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6677ee30e197d1c6236d2ad363258bc918c7a3a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"0eb9e701-56ca-4a44-9c51-3fd2fe279335","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-30 17:51:29 +0000 UTC FinishedAt: 2026-07-30 17:51:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7djrl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6677ee30e197d1c6236d2ad363258bc918c7a3a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6677ee30e197d1c6236d2ad363258bc918c7a3a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"0eb9e701-56ca-4a44-9c51-3fd2fe279335","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-30 17:51:29 +0000 UTC FinishedAt: 2026-07-30 17:53:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7djrl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6677ee30e197d1c6236d2ad363258bc918c7a3a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6677ee30e197d1c6236d2ad363258bc918c7a3a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"0eb9e701-56ca-4a44-9c51-3fd2fe279335","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-30 17:51:29 +0000 UTC FinishedAt: 2026-07-30 17:53:06 +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:*a13181e4-f232-4d6b-a8ee-3cc5eba88307,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-workflow7djrl/series-workflow7djrl-build-action-2666224809/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-workflow7djrl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6677ee30e197d1c6236d2ad363258bc918c7a3a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6677ee30e197d1c6236d2ad363258bc918c7a3a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"0eb9e701-56ca-4a44-9c51-3fd2fe279335","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-30 17:53:16 +0000 UTC FinishedAt: 2026-07-30 18:44:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7djrl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6677ee30e197d1c6236d2ad363258bc918c7a3a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6677ee30e197d1c6236d2ad363258bc918c7a3a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"0eb9e701-56ca-4a44-9c51-3fd2fe279335","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-30 17:53:16 +0000 UTC FinishedAt: 2026-07-30 18:44:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_ioctl"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*e3456438-5366-4ad0-820b-138ee04a910e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a13181e4-f232-4d6b-a8ee-3cc5eba88307,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-workflow7djrl/series-workflow7djrl-build-action-82465584/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-workflow7djrl/series-workflow7djrl-build-action-2666224809/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow7djrl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6677ee30e197d1c6236d2ad363258bc918c7a3a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6677ee30e197d1c6236d2ad363258bc918c7a3a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"0eb9e701-56ca-4a44-9c51-3fd2fe279335","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-30 17:53:16 +0000 UTC FinishedAt: 2026-07-30 17:53:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7djrl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6677ee30e197d1c6236d2ad363258bc918c7a3a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6677ee30e197d1c6236d2ad363258bc918c7a3a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"0eb9e701-56ca-4a44-9c51-3fd2fe279335","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-30 17:53:16 +0000 UTC FinishedAt: 2026-07-30 17:53:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_ioctl"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow7djrl/series-workflow7djrl-convert-artifact-2579221938/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7djrl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6677ee30e197d1c6236d2ad363258bc918c7a3a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6677ee30e197d1c6236d2ad363258bc918c7a3a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"0eb9e701-56ca-4a44-9c51-3fd2fe279335","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-30 17:53:16 +0000 UTC FinishedAt: 2026-07-30 17:53:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7djrl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6677ee30e197d1c6236d2ad363258bc918c7a3a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6677ee30e197d1c6236d2ad363258bc918c7a3a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"0eb9e701-56ca-4a44-9c51-3fd2fe279335","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-30 17:53:16 +0000 UTC FinishedAt: 2026-07-30 17:53:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7djrl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6677ee30e197d1c6236d2ad363258bc918c7a3a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6677ee30e197d1c6236d2ad363258bc918c7a3a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"0eb9e701-56ca-4a44-9c51-3fd2fe279335","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-30 17:53:16 +0000 UTC FinishedAt: 2026-07-30 17:53:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7djrl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6677ee30e197d1c6236d2ad363258bc918c7a3a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6677ee30e197d1c6236d2ad363258bc918c7a3a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"0eb9e701-56ca-4a44-9c51-3fd2fe279335","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-30 17:53:26 +0000 UTC FinishedAt: 2026-07-30 18:44:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7djrl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6677ee30e197d1c6236d2ad363258bc918c7a3a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6677ee30e197d1c6236d2ad363258bc918c7a3a2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"0eb9e701-56ca-4a44-9c51-3fd2fe279335","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-30 17:53:26 +0000 UTC FinishedAt: 2026-07-30 18:44:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e3456438-5366-4ad0-820b-138ee04a910e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a13181e4-f232-4d6b-a8ee-3cc5eba88307,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-workflow7djrl/series-workflow7djrl-build-action-82465584/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-workflow7djrl/series-workflow7djrl-build-action-2666224809/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-workflow7djrl/series-workflow7djrl-convert-artifact-2579221938/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,}