Name: series-workflown5btw Phase: Succeeded StartedAt: 2026-06-26 08:52:58 +0000 UTC FinishedAt: 2026-06-26 13:23:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflown5btw[0] Phase: Succeeded StartedAt: 2026-06-26 08:52:58 +0000 UTC FinishedAt: 2026-06-26 09:10:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflown5btw[0].run-triage Phase: Succeeded StartedAt: 2026-06-26 08:52:58 +0000 UTC FinishedAt: 2026-06-26 09:10:01 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "fe9f4ee6c61a1410afd73bf011de5ae618004796", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS", "FS_DAX" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "fe9f4ee6c61a1410afd73bf011de5ae618004796", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS", "FS_DAX" ], "series_id": "9e232472-4a4b-47f3-8bca-8e34bb2a4b4d" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ext4_dio_needs_zeroing", "ext4_dio_write_checks", "ext4_buffered_write_iter", "ext4_dax_write_iter", "ext4_iomap_begin", "ext4_iomap_alloc" ], "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+CgkJCTx0ZD4yMDI2LzA2LzI2IDA5OjA4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OywKICAgICYjMzQ7RlNfREFYJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXh0NF9kaW9fbmVlZHNfemVyb2luZyYjMzQ7LAogICAgJiMzNDtleHQ0X2Rpb193cml0ZV9jaGVja3MmIzM0OywKICAgICYjMzQ7ZXh0NF9idWZmZXJlZF93cml0ZV9pdGVyJiMzNDssCiAgICAmIzM0O2V4dDRfZGF4X3dyaXRlX2l0ZXImIzM0OywKICAgICYjMzQ7ZXh0NF9pb21hcF9iZWdpbiYjMzQ7LAogICAgJiMzNDtleHQ0X2lvbWFwX2FsbG9jJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGV4dDQgRGlyZWN0IEkvTyBhbmQgREFYIHdyaXRlIHBhdGhzLCBzcGVjaWZpY2FsbHkgZml4aW5nIGxvY2tpbmcgYW5kIHBhcnRpYWwgYmxvY2sgemVyb2luZyBmb3IgdW5hbGlnbmVkIERJTyB3cml0ZXMuIEl0IGludHJvZHVjZXMgYGV4dDRfZGlvX25lZWRzX3plcm9pbmdgIGFuZCBtb2RpZmllcyBgZXh0NF9kaW9fd3JpdGVfY2hlY2tzYCwgYGV4dDRfYnVmZmVyZWRfd3JpdGVfaXRlcmAsIGBleHQ0X2RheF93cml0ZV9pdGVyYCwgYW5kIGBleHQ0X2lvbWFwX2JlZ2luYC4gVGhlc2UgYXJlIGNvcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGV4dDQmIzM5O3MgSS9PIGhhbmRsaW5nIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwOTowODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGMxMTg5ZTc3NmQ5MTYzOTYyODA4NzVmMTdiNGE5MzljNDQ5ZDZkMDdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1biAyNiAwOTowODoxMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9leHQ0L2ZpbGUuYyBiL2ZzL2V4dDQvZmlsZS5jXG5pbmRleCBlYjFhMzIzOTYyYjEwMS4uNjEwZTEwOWZjZDM2MjUgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L2ZpbGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9maWxlLmNcbkBAIC0yMTMsMzEgJiM0MzsyMTMsNjUgQEAgZXh0NF9leHRlbmRpbmdfaW8oc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCwgc2l6ZV90IGxlbilcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4tLyogSXMgSU8gb3ZlcndyaXRpbmcgYWxsb2NhdGVkIG9yIGluaXRpYWxpemVkIGJsb2Nrcz8gKi9cbi1zdGF0aWMgYm9vbCBleHQ0X292ZXJ3cml0ZV9pbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLVx0XHRcdCAgICAgIGxvZmZfdCBwb3MsIGxvZmZfdCBsZW4sIGJvb2wgKnVud3JpdHRlbilcbiYjNDM7LypcbiYjNDM7ICogRG9lcyBhbiB1bmFsaWduZWQgRElPIHdyaXRlIHJlcXVpcmUgcGFydGlhbCBibG9jayB6ZXJvaW5nP1xuJiM0MzsgKlxuJiM0MzsgKiBQYXJ0aWFsIGJsb2NrIHplcm9pbmcgaXMgcGVyZm9ybWVkIG9ubHkgZm9yIHRoZSBoZWFkIGFuZCB0YWlsIGJsb2Nrc1xuJiM0MzsgKiB3aGVuIHRoZXkgYXJlIHBhcnRpYWxseSBjb3ZlcmVkIGJ5IHRoZSB3cml0ZSBhbmQgdGhlIHVuZGVybHlpbmcgZXh0ZW50XG4mIzQzOyAqIGlzIGEgaG9sZSBvciB1bndyaXR0ZW4uIE1pZGRsZSBibG9ja3MgKGZ1bGx5IGNvdmVyZWQgYnkgdGhlIHdyaXRlKVxuJiM0MzsgKiBhcmUgd3JpdHRlbiBhcyB3aG9sZSBibG9ja3Mgd2l0aG91dCB6ZXJvaW5nLlxuJiM0MzsgKlxuJiM0MzsgKiBXaGVuIHplcm9pbmcgaXMgcmVxdWlyZWQsIHR3byBjb25jdXJyZW50IHVuYWxpZ25lZCBESU8gd3JpdGVzIHRvIHRoZVxuJiM0MzsgKiBzYW1lIHBhcnRpYWwgYmxvY2sgY2FuIHJhY2UgYW5kIGNvcnJ1cHQgZWFjaCBvdGhlciYjMzk7cyBkYXRhLCBzbyB0aGVcbiYjNDM7ICogY2FsbGVyIG11c3QgdGFrZSB0aGUgZXhjbHVzaXZlIGlfcndzZW0gYW5kIGRyYWluIGluLWZsaWdodCBESU8uIFdoZW5cbiYjNDM7ICogemVyb2luZyBpcyBub3QgcmVxdWlyZWQsIHNoYXJlZCBsb2NrIGlzIHNhZmUgLS0gYmxvY2sgYWxsb2NhdGlvbiBhbmRcbiYjNDM7ICogdW53cml0dGVuIGNvbnZlcnNpb24gZm9yIG1pZGRsZSBibG9ja3MgYXJlIHByb3RlY3RlZCBieSBpX2RhdGFfc2VtXG4mIzQzOyAqIGFuZCBpbm9kZV9kaW9fYmVnaW4oKS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBib29sIGV4dDRfZGlvX25lZWRzX3plcm9pbmcoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHBvcywgbG9mZl90IGxlbixcbiYjNDM7XHRcdFx0XHQgICBib29sIG5vd2FpdClcbiB7XG4gXHRzdHJ1Y3QgZXh0NF9tYXBfYmxvY2tzIG1hcDtcbiBcdHVuc2lnbmVkIGludCBibGtiaXRzID0gaW5vZGUtXHUwMDNlaV9ibGtiaXRzO1xuLVx0aW50IGVyciwgYmxrbGVuO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgYmxvY2ttYXNrID0gaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2Jsb2Nrc2l6ZSAtIDE7XG4mIzQzO1x0Ym9vbCBoZWFkX3BhcnRpYWwsIHRhaWxfcGFydGlhbDtcbiYjNDM7XHRleHQ0X2xibGtfdCBoZWFkX2xibGssIHRhaWxfbGJsaztcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcdGludCBtYXBfZmxhZ3MgPSAwO1xuIFxuIFx0aWYgKHBvcyAmIzQzOyBsZW4gXHUwMDNlIGlfc2l6ZV9yZWFkKGlub2RlKSlcbi1cdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4gXG4tXHRtYXAubV9sYmxrID0gcG9zIFx1MDAzZVx1MDAzZSBibGtiaXRzO1xuLVx0bWFwLm1fbGVuID0gRVhUNF9NQVhfQkxPQ0tTKGxlbiwgcG9zLCBibGtiaXRzKTtcbi1cdGJsa2xlbiA9IG1hcC5tX2xlbjtcbiYjNDM7XHRpZiAobm93YWl0KVxuJiM0MztcdFx0bWFwX2ZsYWdzID0gRVhUNF9HRVRfQkxPQ0tTX0NBQ0hFRF9OT1dBSVQ7XG4mIzQzO1xuJiM0MztcdGhlYWRfcGFydGlhbCA9IChwb3MgXHUwMDI2IGJsb2NrbWFzaykgIT0gMDtcbiYjNDM7XHR0YWlsX3BhcnRpYWwgPSAoKHBvcyAmIzQzOyBsZW4pIFx1MDAyNiBibG9ja21hc2spICE9IDA7XG4mIzQzO1x0aGVhZF9sYmxrID0gcG9zIFx1MDAzZVx1MDAzZSBibGtiaXRzO1xuJiM0MztcdHRhaWxfbGJsayA9IChwb3MgJiM0MzsgbGVuIC0gMSkgXHUwMDNlXHUwMDNlIGJsa2JpdHM7XG4mIzQzO1xuJiM0MztcdC8qIENoZWNrIHRoZSBoZWFkIHBhcnRpYWwgYmxvY2suICovXG4mIzQzO1x0aWYgKGhlYWRfcGFydGlhbCkge1xuJiM0MztcdFx0bWFwLm1fbGJsayA9IGhlYWRfbGJsaztcbiYjNDM7XHRcdG1hcC5tX2xlbiA9IHRhaWxfbGJsayAtIGhlYWRfbGJsayAmIzQzOyAxO1xuJiM0MztcdFx0ZXJyID0gZXh0NF9tYXBfYmxvY2tzKE5VTEwsIGlub2RlLCBcdTAwMjZtYXAsIG1hcF9mbGFncyk7XG4mIzQzO1x0XHRpZiAoZXJyIFx1MDAzYz0gMCB8fCAhKG1hcC5tX2ZsYWdzIFx1MDAyNiBFWFQ0X01BUF9NQVBQRUQpKVxuJiM0MztcdFx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRcdC8qIElmIHRoaXMgbWFwcGluZyBhbHJlYWR5IGNvdmVycyB0aGUgdGFpbCBibG9jaywgd2UmIzM5O3JlIGRvbmUuICovXG4mIzQzO1x0XHRpZiAoIXRhaWxfcGFydGlhbCB8fCBtYXAubV9sYmxrICYjNDM7IGVyciBcdTAwM2UgdGFpbF9sYmxrKVxuJiM0MztcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0fVxuIFxuLVx0ZXJyID0gZXh0NF9tYXBfYmxvY2tzKE5VTEwsIGlub2RlLCBcdTAwMjZtYXAsIDApO1xuLVx0aWYgKGVyciAhPSBibGtsZW4pXG4tXHRcdHJldHVybiBmYWxzZTtcbi1cdC8qXG4tXHQgKiAmIzM5O2Vycj09bGVuJiMzOTsgbWVhbnMgdGhhdCBhbGwgb2YgdGhlIGJsb2NrcyBoYXZlIGJlZW4gcHJlYWxsb2NhdGVkLFxuLVx0ICogcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZXkgaGF2ZSBiZWVuIGluaXRpYWxpemVkIG9yIG5vdC4gV2UgbmVlZCB0b1xuLVx0ICogY2hlY2sgbV9mbGFncyB0byBkaXN0aW5ndWlzaCB0aGUgdW53cml0dGVuIGV4dGVudHMuXG4tXHQgKi9cbi1cdCp1bndyaXR0ZW4gPSAhKG1hcC5tX2ZsYWdzIFx1MDAyNiBFWFQ0X01BUF9NQVBQRUQpO1xuLVx0cmV0dXJuIHRydWU7XG4mIzQzO1x0LyogQ2hlY2sgdGhlIHRhaWwgcGFydGlhbCBibG9jay4gKi9cbiYjNDM7XHRpZiAodGFpbF9wYXJ0aWFsKSB7XG4mIzQzO1x0XHRtYXAubV9sYmxrID0gdGFpbF9sYmxrO1xuJiM0MztcdFx0bWFwLm1fbGVuID0gMTtcbiYjNDM7XHRcdGVyciA9IGV4dDRfbWFwX2Jsb2NrcyhOVUxMLCBpbm9kZSwgXHUwMDI2bWFwLCBtYXBfZmxhZ3MpO1xuJiM0MztcdFx0aWYgKGVyciBcdTAwM2M9IDAgfHwgIShtYXAubV9mbGFncyBcdTAwMjYgRVhUNF9NQVBfTUFQUEVEKSlcbiYjNDM7XHRcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuIHN0YXRpYyBzc2l6ZV90IGV4dDRfZ2VuZXJpY193cml0ZV9jaGVja3Moc3RydWN0IGtpb2NiICppb2NiLFxuQEAgLTI3OCw3ICYjNDM7MzEyLDcgQEAgc3RhdGljIHNzaXplX3QgZXh0NF93cml0ZV9jaGVja3Moc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG4gXHRpZiAoY291bnQgXHUwMDNjPSAwKVxuIFx0XHRyZXR1cm4gY291bnQ7XG4gXG4tXHRyZXQgPSBmaWxlX21vZGlmaWVkKGlvY2ItXHUwMDNla2lfZmlscCk7XG4mIzQzO1x0cmV0ID0ga2lvY2JfbW9kaWZpZWQoaW9jYik7XG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuQEAgLTMwOSw2ICYjNDM7MzQzLDEzIEBAIHN0YXRpYyBzc2l6ZV90IGV4dDRfYnVmZmVyZWRfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcbiBcdGlub2RlX2xvY2soaW5vZGUpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFByZXZlbnQgY29uY3VycmVudCBkaXJlY3QgSS9PIGFuZCBidWZmZXJlZCBJL08gdG8gdGhlIHNhbWUgZmlsZVxuJiM0MztcdCAqIHJhbmdlLiBXYWl0IGZvciBpbi1mbGlnaHQgRElPIHRvIGZpbmlzaCBiZWZvcmUgZGlydHlpbmcgcGFnZXMuXG4mIzQzO1x0ICovXG4mIzQzO1x0aW5vZGVfZGlvX3dhaXQoaW5vZGUpO1xuJiM0MztcbiBcdHJldCA9IGV4dDRfd3JpdGVfY2hlY2tzKGlvY2IsIGZyb20pO1xuIFx0aWYgKHJldCBcdTAwM2M9IDApXG4gXHRcdGdvdG8gb3V0O1xuQEAgLTQyOCwxNiAmIzQzOzQ2OSwyOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGlvbWFwX2Rpb19vcHMgZXh0NF9kaW9fd3JpdGVfb3BzID0ge1xuICAqIGNvbmRpdGlvbiByZXF1aXJlcyBhbiBleGNsdXNpdmUgaW5vZGUgbG9jay4gSWYgeWVzLCB0aGVuIHdlIHJlc3RhcnQgdGhlXG4gICogd2hvbGUgb3BlcmF0aW9uIGJ5IHJlbGVhc2luZyB0aGUgc2hhcmVkIGxvY2sgYW5kIGFjcXVpcmluZyBleGNsdXNpdmUgbG9jay5cbiAgKlxuLSAqIC0gRm9yIHVuYWxpZ25lZF9pbyB3ZSBuZXZlciB0YWtlIHNoYXJlZCBsb2NrIGFzIGl0IG1heSBjYXVzZSBkYXRhIGNvcnJ1cHRpb25cbi0gKiAgIHdoZW4gdHdvIHVuYWxpZ25lZCBJTyB0cmllcyB0byBtb2RpZnkgdGhlIHNhbWUgYmxvY2sgZS5nLiB3aGlsZSB6ZXJvaW5nLlxuJiM0MzsgKiBUaGUgZGVjaXNpb24gaXMgbGF5ZXJlZCwgZXZhbHVhdGVkIGluIHRoaXMgb3JkZXI6XG4gICpcbi0gKiAtIEZvciBleHRlbmRpbmcgd3JpdGVzIGNhc2Ugd2UgZG9uJiMzOTt0IHRha2UgdGhlIHNoYXJlZCBsb2NrLCBzaW5jZSBpdCByZXF1aXJlc1xuLSAqICAgdXBkYXRpbmcgaW5vZGUgaV9kaXNrc2l6ZSBhbmQvb3Igb3JwaGFuIGhhbmRsaW5nIHdpdGggZXhjbHVzaXZlIGxvY2suXG4mIzQzOyAqIDEuIElmIGtpb2NiX21vZGlmaWVkKCkgbmVlZHMgdG8gdXBkYXRlIHNlY3VyaXR5IGluZm8gKCFJU19OT1NFQyksIHVwZ3JhZGVcbiYjNDM7ICogICAgdG8gdGhlIGV4Y2x1c2l2ZSBsb2NrIC0tIHRoZSBzZWN1cml0eSB1cGRhdGUgaXRzZWxmIHJlcXVpcmVzIGl0LFxuJiM0MzsgKiAgICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIHdyaXRlIGV4dGVuZHMgdGhlIGZpbGUgb3IgaXMgYWxpZ25lZC5cbiAgKlxuLSAqIC0gc2hhcmVkIGxvY2tpbmcgd2lsbCBvbmx5IGJlIHRydWUgbW9zdGx5IHdpdGggb3ZlcndyaXRlcywgaW5jbHVkaW5nXG4tICogICBpbml0aWFsaXplZCBibG9ja3MgYW5kIHVud3JpdHRlbiBibG9ja3MuXG4mIzQzOyAqIDIuIElmIHRoZSB3cml0ZSBleHRlbmRzIGlfc2l6ZSBvciBpX2Rpc2tzaXplLCB1cGdyYWRlIHRvIHRoZSBleGNsdXNpdmVcbiYjNDM7ICogICAgbG9jayB0byBzYWZlbHkgdXBkYXRlIGlfZGlza3NpemUgYW5kIHRoZSBvcnBoYW4gbGlzdCwgcmVnYXJkbGVzcyBvZlxuJiM0MzsgKiAgICBhbGlnbm1lbnQuXG4gICpcbi0gKiAtIE90aGVyd2lzZSB3ZSB3aWxsIHN3aXRjaCB0byBleGNsdXNpdmUgaV9yd3NlbSBsb2NrLlxuJiM0MzsgKiAzLiBPdGhlcndpc2UsIGZvciBhbGlnbmVkIG5vbi1leHRlbmRpbmcgd3JpdGVzLCBzaGFyZWQgbG9jayBpcyBhbHdheXNcbiYjNDM7ICogICAgc3VmZmljaWVudCByZWdhcmRsZXNzIG9mIGV4dGVudCBzdGF0ZSAod3JpdHRlbiwgdW53cml0dGVuLCBvciBob2xlKS5cbiYjNDM7ICogICAgdHJ1bmNhdGUvcHVuY2hfaG9sZSBjYW5ub3QgcnVuIHdoaWxlIHdlIGhvbGQgdGhlIHNoYXJlZCBpX3J3c2VtXG4mIzQzOyAqICAgICh0aGV5IG5lZWQgaXQgZXhjbHVzaXZlbHkpOyBhZnRlciB3ZSByZWxlYXNlIGl0LCBpbm9kZV9kaW9fYmVnaW4oKVxuJiM0MzsgKiAgICBrZWVwcyB0aGVpciBpbm9kZV9kaW9fd2FpdCgpIGJsb2NrZWQgdW50aWwgaW4tZmxpZ2h0IGJpb3MgY29tcGxldGUuXG4mIzQzOyAqICAgIGlfZGF0YV9zZW0gc2VyaWFsaXplcyBjb25jdXJyZW50IGV4dGVudCB0cmVlIG1vZGlmaWNhdGlvbnMuXG4mIzQzOyAqXG4mIzQzOyAqIDQuIE90aGVyd2lzZSwgdGhlIHdyaXRlIGlzIHVuYWxpZ25lZCBhbmQgbm9uLWV4dGVuZGluZy4gU2hhcmVkIGxvY2sgaXNcbiYjNDM7ICogICAgc2FmZSB1bmxlc3MgdGhlIERJTyBsYXllciBuZWVkcyB0byBwZXJmb3JtIHBhcnRpYWwgYmxvY2sgemVyb2luZyAtLVxuJiM0MzsgKiAgICBpLmUuIHRoZSBoZWFkIG9yIHRhaWwgcGFydGlhbCBibG9jayBzaXRzIG9uIGEgaG9sZSBvciB1bndyaXR0ZW5cbiYjNDM7ICogICAgZXh0ZW50LiBJbiB0aGF0IGNhc2UgdXBncmFkZSB0byB0aGUgZXhjbHVzaXZlIGxvY2sgYW5kIGRyYWluXG4mIzQzOyAqICAgIGluLWZsaWdodCBESU8gdG8gYXZvaWQgcmFjZXMgd2l0aCBjb25jdXJyZW50IHBhcnRpYWwgYmxvY2sgemVyb2luZy5cbiAgKi9cbiBzdGF0aWMgc3NpemVfdCBleHQ0X2Rpb193cml0ZV9jaGVja3Moc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXG4gXHRcdFx0XHQgICAgIGJvb2wgKmlsb2NrX3NoYXJlZCwgYm9vbCAqZXh0ZW5kLFxuQEAgLTQ0OCw3ICYjNDM7NTAxLDcgQEAgc3RhdGljIHNzaXplX3QgZXh0NF9kaW9fd3JpdGVfY2hlY2tzKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tLFxuIFx0bG9mZl90IG9mZnNldDtcbiBcdHNpemVfdCBjb3VudDtcbiBcdHNzaXplX3QgcmV0O1xuLVx0Ym9vbCBvdmVyd3JpdGUsIHVuYWxpZ25lZF9pbywgdW53cml0dGVuO1xuJiM0MztcdGJvb2wgbmVlZHNfemVyb2luZyA9IGZhbHNlO1xuIFxuIHJlc3RhcnQ6XG4gXHRyZXQgPSBleHQ0X2dlbmVyaWNfd3JpdGVfY2hlY2tzKGlvY2IsIGZyb20pO1xuQEAgLTQ1OCwyNCAmIzQzOzUxMSwyMyBAQCBzdGF0aWMgc3NpemVfdCBleHQ0X2Rpb193cml0ZV9jaGVja3Moc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXG4gXHRvZmZzZXQgPSBpb2NiLVx1MDAzZWtpX3BvcztcbiBcdGNvdW50ID0gcmV0O1xuIFxuLVx0dW5hbGlnbmVkX2lvID0gZXh0NF91bmFsaWduZWRfaW8oaW5vZGUsIGZyb20sIG9mZnNldCk7XG4gXHQqZXh0ZW5kID0gZXh0NF9leHRlbmRpbmdfaW8oaW5vZGUsIG9mZnNldCwgY291bnQpO1xuLVx0b3ZlcndyaXRlID0gZXh0NF9vdmVyd3JpdGVfaW8oaW5vZGUsIG9mZnNldCwgY291bnQsIFx1MDAyNnVud3JpdHRlbik7XG4gXG4gXHQvKlxuLVx0ICogRGV0ZXJtaW5lIHdoZXRoZXIgd2UgbmVlZCB0byB1cGdyYWRlIHRvIGFuIGV4Y2x1c2l2ZSBsb2NrLiBUaGlzIGlzXG4tXHQgKiByZXF1aXJlZCB0byBjaGFuZ2Ugc2VjdXJpdHkgaW5mbyBpbiBmaWxlX21vZGlmaWVkKCksIGZvciBleHRlbmRpbmdcbi1cdCAqIEkvTywgYW55IGZvcm0gb2Ygbm9uLW92ZXJ3cml0ZSBJL08sIGFuZCB1bmFsaWduZWQgSS9PIHRvIHVud3JpdHRlblxuLVx0ICogZXh0ZW50cyAoYXMgcGFydGlhbCBibG9jayB6ZXJvaW5nIG1heSBiZSByZXF1aXJlZCkuXG4mIzQzO1x0ICogRm9yIHVuYWxpZ25lZCB3cml0ZXMsIGNoZWNrIHdoZXRoZXIgcGFydGlhbCBibG9jayB6ZXJvaW5nIHdpbGwgYmVcbiYjNDM7XHQgKiBuZWVkZWQuIElmIHNvLCBleGNsdXNpdmUgbG9jayBpcyByZXF1aXJlZCB0byBzZXJpYWxpemUgYWdhaW5zdFxuJiM0MztcdCAqIGNvbmN1cnJlbnQgRElPIHRoYXQgY291bGQgcmFjZSB3aXRoIHRoZSB6ZXJvaW5nLlxuIFx0ICpcbi1cdCAqIE5vdGUgdGhhdCB1bmFsaWduZWQgd3JpdGVzIGFyZSBhbGxvd2VkIHVuZGVyIHNoYXJlZCBsb2NrIHNvIGxvbmcgYXNcbi1cdCAqIHRoZXkgYXJlIHB1cmUgb3ZlcndyaXRlcy4gT3RoZXJ3aXNlLCBjb25jdXJyZW50IHVuYWxpZ25lZCB3cml0ZXMgcmlza1xuLVx0ICogZGF0YSBjb3JydXB0aW9uIGR1ZSB0byBwYXJ0aWFsIGJsb2NrIHplcm9pbmcgaW4gdGhlIGRpbyBsYXllciwgYW5kIHNvXG4tXHQgKiB0aGUgSS9PIG11c3Qgb2NjdXIgZXhjbHVzaXZlbHkuXG4mIzQzO1x0ICogRm9yIGFsaWduZWQgd3JpdGVzIHdlIHNraXAgdGhpcyBjaGVjayBlbnRpcmVseSBzaW5jZSBhbGxvY2F0aW9uXG4mIzQzO1x0ICogdW5kZXIgc2hhcmVkIGxvY2sgaXMgc2FmZS5cbiBcdCAqL1xuJiM0MztcdGlmIChleHQ0X3VuYWxpZ25lZF9pbyhpbm9kZSwgZnJvbSwgb2Zmc2V0KSlcbiYjNDM7XHRcdG5lZWRzX3plcm9pbmcgPSBleHQ0X2Rpb19uZWVkc196ZXJvaW5nKGlub2RlLCBvZmZzZXQsIGNvdW50LFxuJiM0MztcdFx0XHRcdFx0XHRpb2NiLVx1MDAzZWtpX2ZsYWdzIFx1MDAyNiBJT0NCX05PV0FJVCk7XG4mIzQzO1xuJiM0MztcdC8qIERldGVybWluZSB3aGV0aGVyIHdlIG5lZWQgdG8gdXBncmFkZSB0byBhbiBleGNsdXNpdmUgbG9jay4gKi9cbiBcdGlmICgqaWxvY2tfc2hhcmVkIFx1MDAyNlx1MDAyNlxuLVx0ICAgICgoIUlTX05PU0VDKGlub2RlKSB8fCAqZXh0ZW5kIHx8ICFvdmVyd3JpdGUgfHxcbi1cdCAgICAgKHVuYWxpZ25lZF9pbyBcdTAwMjZcdTAwMjYgdW53cml0dGVuKSkpKSB7XG4mIzQzO1x0ICAgICghSVNfTk9TRUMoaW5vZGUpIHx8ICpleHRlbmQgfHwgbmVlZHNfemVyb2luZykpIHtcbiBcdFx0aWYgKGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2IElPQ0JfTk9XQUlUKSB7XG4gXHRcdFx0cmV0ID0gLUVBR0FJTjtcbiBcdFx0XHRnb3RvIG91dDtcbkBAIC00ODksMjEgJiM0Mzs1NDEsMjggQEAgc3RhdGljIHNzaXplX3QgZXh0NF9kaW9fd3JpdGVfY2hlY2tzKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tLFxuIFx0LypcbiBcdCAqIE5vdyB0aGF0IGxvY2tpbmcgaXMgc2V0dGxlZCwgZGV0ZXJtaW5lIGRpbyBmbGFncyBhbmQgZXhjbHVzaXZpdHlcbiBcdCAqIHJlcXVpcmVtZW50cy4gV2UgZG9uJiMzOTt0IHVzZSBESU9fT1ZFUldSSVRFX09OTFkgYmVjYXVzZSB3ZSBlbmZvcmNlXG4tXHQgKiBiZWhhdmlvciBhbHJlYWR5LiBUaGUgaW5vZGUgbG9jayBpcyBhbHJlYWR5IGhlbGQgZXhjbHVzaXZlIGlmIHRoZVxuLVx0ICogd3JpdGUgaXMgbm9uLW92ZXJ3cml0ZSBvciBleHRlbmRpbmcsIHNvIGRyYWluIGFsbCBvdXRzdGFuZGluZyBkaW8gYW5kXG4tXHQgKiBzZXQgdGhlIGZvcmNlIHdhaXQgZGlvIGZsYWcuXG4mIzQzO1x0ICogYmVoYXZpb3IgYWxyZWFkeS4gV2hlbiBob2xkaW5nIHRoZSBleGNsdXNpdmUgbG9jayBmb3IgYSB3cml0ZSB0aGF0XG4mIzQzO1x0ICogbmVlZHMgcGFydGlhbCBibG9jayB6ZXJvaW5nIG9yIGlzIGV4dGVuZGluZyB0aGUgZmlsZSwgd2UgbXVzdCB3YWl0XG4mIzQzO1x0ICogZm9yIHRoZSBJL08gdG8gY29tcGxldGUgc3luY2hyb25vdXNseTpcbiYjNDM7XHQgKlxuJiM0MztcdCAqICAtIG5lZWRzX3plcm9pbmc6IGRyYWluIGluLWZsaWdodCBESU8gd2hvc2UgZW5kX2lvIGNvdWxkIHJhY2Ugd2l0aFxuJiM0MztcdCAqICAgIG91ciBwYXJ0aWFsIGJsb2NrIHplcm9pbmcsIGFuZCBmb3JjZSBzeW5jaHJvbm91cyBjb21wbGV0aW9uIHNvIHdlXG4mIzQzO1x0ICogICAgZG9uJiMzOTt0IGxlYXZlIGluLWZsaWdodCB6ZXJvaW5nIGJpb3MgZm9yIHRoZSBuZXh0IHdyaXRlciB0byBkcmFpbi5cbiYjNDM7XHQgKlxuJiM0MztcdCAqICAtIGV4dGVuZDogdGhlIGNhbGxlciBtdXN0IHVwZGF0ZSBpX2Rpc2tzaXplIGFmdGVyIEkvTyBjb21wbGV0aW9uLFxuJiM0MztcdCAqICAgIHdoaWNoIHJlcXVpcmVzIHRoZSBkYXRhIHRvIGJlIG9uIGRpc2sgZmlyc3QuXG4gXHQgKi9cbi1cdGlmICghKmlsb2NrX3NoYXJlZCBcdTAwMjZcdTAwMjYgKHVuYWxpZ25lZF9pbyB8fCAqZXh0ZW5kKSkge1xuJiM0MztcdGlmICghKmlsb2NrX3NoYXJlZCBcdTAwMjZcdTAwMjYgKG5lZWRzX3plcm9pbmcgfHwgKmV4dGVuZCkpIHtcbiBcdFx0aWYgKGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2IElPQ0JfTk9XQUlUKSB7XG4gXHRcdFx0cmV0ID0gLUVBR0FJTjtcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0fVxuLVx0XHRpZiAodW5hbGlnbmVkX2lvIFx1MDAyNlx1MDAyNiAoIW92ZXJ3cml0ZSB8fCB1bndyaXR0ZW4pKVxuJiM0MztcdFx0aWYgKG5lZWRzX3plcm9pbmcpXG4gXHRcdFx0aW5vZGVfZGlvX3dhaXQoaW5vZGUpO1xuIFx0XHQqZGlvX2ZsYWdzID0gSU9NQVBfRElPX0ZPUkNFX1dBSVQ7XG4gXHR9XG4gXG4tXHRyZXQgPSBmaWxlX21vZGlmaWVkKGZpbGUpO1xuJiM0MztcdHJldCA9IGtpb2NiX21vZGlmaWVkKGlvY2IpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0Z290byBvdXQ7XG4gXG5AQCAtNjcyLDYgJiM0Mzs3MzEsMTEgQEAgZXh0NF9kYXhfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbiBcdGNvdW50ID0gaW92X2l0ZXJfY291bnQoZnJvbSk7XG4gXG4gXHRpZiAob2Zmc2V0ICYjNDM7IGNvdW50IFx1MDAzZSBFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZGlza3NpemUpIHtcbiYjNDM7XHRcdGlmIChpb2NiLVx1MDAzZWtpX2ZsYWdzIFx1MDAyNiBJT0NCX05PV0FJVCkge1xuJiM0MztcdFx0XHRyZXQgPSAtRUFHQUlOO1xuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4gXHRcdGhhbmRsZSA9IGV4dDRfam91cm5hbF9zdGFydChpbm9kZSwgRVhUNF9IVF9JTk9ERSwgMik7XG4gXHRcdGlmIChJU19FUlIoaGFuZGxlKSkge1xuIFx0XHRcdHJldCA9IFBUUl9FUlIoaGFuZGxlKTtcbmRpZmYgLS1naXQgYS9mcy9leHQ0L2lub2RlLmMgYi9mcy9leHQ0L2lub2RlLmNcbmluZGV4IGMyYzJkNmFjN2YzZDEzLi4zYzA1MDk0NDc1ZGIxYyAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvaW5vZGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9pbm9kZS5jXG5AQCAtNzU5LDggJiM0Mzs3NTksOSBAQCBpbnQgZXh0NF9tYXBfYmxvY2tzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0QlVHKCk7XG4gXHRcdH1cbiBcbiYjNDM7XHRcdC8qIFNraXAgYmxvY2tpbmcgb3BlcmF0aW9ucyBhbmQganVtcCB0byBleHRlbnQgdmFsaWRhdGlvbi4gKi9cbiBcdFx0aWYgKGZsYWdzIFx1MDAyNiBFWFQ0X0dFVF9CTE9DS1NfQ0FDSEVEX05PV0FJVClcbi1cdFx0XHRyZXR1cm4gcmV0dmFsO1xuJiM0MztcdFx0XHRnb3RvIGZvdW5kO1xuICNpZmRlZiBFU19BR0dSRVNTSVZFX1RFU1RcbiBcdFx0ZXh0NF9tYXBfYmxvY2tzX2VzX3JlY2hlY2soaGFuZGxlLCBpbm9kZSwgbWFwLFxuIFx0XHRcdFx0XHQgICBcdTAwMjZvcmlnX21hcCwgZmxhZ3MpO1xuQEAgLTc3Niw3ICYjNDM7Nzc3LDcgQEAgaW50IGV4dDRfbWFwX2Jsb2NrcyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0ICogY2Fubm90IGZpbmQgZXh0ZW50IGluIHRoZSBjYWNoZS5cbiBcdCAqL1xuIFx0aWYgKGZsYWdzIFx1MDAyNiBFWFQ0X0dFVF9CTE9DS1NfQ0FDSEVEX05PV0FJVClcbi1cdFx0cmV0dXJuIDA7XG4mIzQzO1x0XHRyZXR1cm4gLUVBR0FJTjtcbiBcbiBcdC8qXG4gXHQgKiBUcnkgdG8gc2VlIGlmIHdlIGNhbiBnZXQgdGhlIGJsb2NrIHdpdGhvdXQgcmVxdWVzdGluZyBhIG5ld1xuQEAgLTc5Nyw2ICYjNDM7Nzk4LDkgQEAgaW50IGV4dDRfbWFwX2Jsb2NrcyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0aWYgKChmbGFncyBcdTAwMjYgRVhUNF9HRVRfQkxPQ0tTX0NSRUFURSkgPT0gMClcbiBcdFx0cmV0dXJuIHJldHZhbDtcbiBcbiYjNDM7XHQvKiBFWFQ0X0dFVF9CTE9DS1NfQ1JFQVRFIGNhbm5vdCBvcGVyYXRlIGluIE5PV0FJVCBtb2RlICovXG4mIzQzO1x0V0FSTl9PTl9PTkNFKGZsYWdzIFx1MDAyNiBFWFQ0X0dFVF9CTE9DS1NfQ0FDSEVEX05PV0FJVCk7XG4mIzQzO1xuIFx0LypcbiBcdCAqIFJldHVybnMgaWYgdGhlIGJsb2NrcyBoYXZlIGFscmVhZHkgYWxsb2NhdGVkXG4gXHQgKlxuQEAgLTM2NzIsNiAmIzQzOzM2NzYsOSBAQCBzdGF0aWMgaW50IGV4dDRfaW9tYXBfYWxsb2Moc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dDRfbWFwX2Jsb2NrcyAqbWFwLFxuIFx0aW50IHJldCwgZGlvX2NyZWRpdHMsIG1fZmxhZ3MgPSAwLCByZXRyaWVzID0gMDtcbiBcdGJvb2wgZm9yY2VfY29tbWl0ID0gZmFsc2U7XG4gXG4mIzQzO1x0aWYgKGZsYWdzIFx1MDAyNiBJT01BUF9OT1dBSVQpXG4mIzQzO1x0XHRyZXR1cm4gLUVBR0FJTjtcbiYjNDM7XG4gXHQvKlxuIFx0ICogVHJpbSB0aGUgbWFwcGluZyByZXF1ZXN0IHRvIHRoZSBtYXhpbXVtIHZhbHVlIHRoYXQgd2UgY2FuIG1hcCBhdFxuIFx0ICogb25jZSBmb3IgZGlyZWN0IEkvTy5cbkBAIC0zNzc3LDYgJiM0MzszNzg0LDcgQEAgc3RhdGljIGludCBleHQ0X2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW5ndGgsXG4gXHRzdHJ1Y3QgZXh0NF9tYXBfYmxvY2tzIG1hcDtcbiBcdHU4IGJsa2JpdHMgPSBpbm9kZS1cdTAwM2VpX2Jsa2JpdHM7XG4gXHR1bnNpZ25lZCBpbnQgb3JpZ19tbGVuO1xuJiM0MztcdGludCBtYXBfZmxhZ3MgPSAwO1xuIFxuIFx0aWYgKChvZmZzZXQgXHUwMDNlXHUwMDNlIGJsa2JpdHMpIFx1MDAzZSBFWFQ0X01BWF9MT0dJQ0FMX0JMT0NLKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbkBAIC0zNzkxLDYgJiM0MzszNzk5LDEyIEBAIHN0YXRpYyBpbnQgZXh0NF9pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuZ3RoLFxuIFx0bWFwLm1fbGVuID0gbWluX3QobG9mZl90LCAob2Zmc2V0ICYjNDM7IGxlbmd0aCAtIDEpIFx1MDAzZVx1MDAzZSBibGtiaXRzLFxuIFx0XHRcdCAgRVhUNF9NQVhfTE9HSUNBTF9CTE9DSykgLSBtYXAubV9sYmxrICYjNDM7IDE7XG4gXHRvcmlnX21sZW4gPSBtYXAubV9sZW47XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBJbiBOT1dBSVQgY29udGV4dCwgb25seSB1c2UgY2FjaGVkIGV4dGVudCBpbmZvLiBJZiBlcyBjYWNoZSBtaXNzZXMsXG4mIzQzO1x0ICogcmV0dXJuIC1FQUdBSU4gdG8gYXZvaWQgc2xlZXBpbmcgb24gZG93bl9yZWFkKGlfZGF0YV9zZW0pLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChmbGFncyBcdTAwMjYgSU9NQVBfTk9XQUlUKVxuJiM0MztcdFx0bWFwX2ZsYWdzID0gRVhUNF9HRVRfQkxPQ0tTX0NBQ0hFRF9OT1dBSVQ7XG4gXG4gXHRpZiAoZmxhZ3MgXHUwMDI2IElPTUFQX1dSSVRFKSB7XG4gXHRcdC8qXG5AQCAtMzgwMCw3ICYjNDM7MzgxNCw3IEBAIHN0YXRpYyBpbnQgZXh0NF9pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuZ3RoLFxuIFx0XHQgKiBlc3BlY2lhbGx5IGluIG11bHRpLXRocmVhZGVkIG92ZXJ3cml0ZSByZXF1ZXN0cy5cbiBcdFx0ICovXG4gXHRcdGlmIChvZmZzZXQgJiM0MzsgbGVuZ3RoIFx1MDAzYz0gaV9zaXplX3JlYWQoaW5vZGUpKSB7XG4tXHRcdFx0cmV0ID0gZXh0NF9tYXBfYmxvY2tzKE5VTEwsIGlub2RlLCBcdTAwMjZtYXAsIDApO1xuJiM0MztcdFx0XHRyZXQgPSBleHQ0X21hcF9ibG9ja3MoTlVMTCwgaW5vZGUsIFx1MDAyNm1hcCwgbWFwX2ZsYWdzKTtcbiBcdFx0XHQvKlxuIFx0XHRcdCAqIEZvciBEQVggd2UgY29udmVydCBleHRlbnRzIHRvIGluaXRpYWxpemVkIG9uZXMgYmVmb3JlXG4gXHRcdFx0ICogY29weWluZyB0aGUgZGF0YSwgb3RoZXJ3aXNlIHdlIGRvIGl0IGFmdGVyIEkvTyBzb1xuQEAgLTM4MjEsNyAmIzQzOzM4MzUsNyBAQCBzdGF0aWMgaW50IGV4dDRfaW9tYXBfYmVnaW4oc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbmd0aCxcbiBcdFx0fVxuIFx0XHRyZXQgPSBleHQ0X2lvbWFwX2FsbG9jKGlub2RlLCBcdTAwMjZtYXAsIGZsYWdzKTtcbiBcdH0gZWxzZSB7XG4tXHRcdHJldCA9IGV4dDRfbWFwX2Jsb2NrcyhOVUxMLCBpbm9kZSwgXHUwMDI2bWFwLCAwKTtcbiYjNDM7XHRcdHJldCA9IGV4dDRfbWFwX2Jsb2NrcyhOVUxMLCBpbm9kZSwgXHUwMDI2bWFwLCBtYXBfZmxhZ3MpO1xuIFx0fVxuIFxuIFx0aWYgKHJldCBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwOTowODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFWFQ0X0ZTJiMzNDssCiAgICAmIzM0O0ZTX0RBWCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V4dDRfZGlvX25lZWRzX3plcm9pbmcmIzM0OywKICAgICYjMzQ7ZXh0NF9kaW9fd3JpdGVfY2hlY2tzJiMzNDssCiAgICAmIzM0O2V4dDRfYnVmZmVyZWRfd3JpdGVfaXRlciYjMzQ7LAogICAgJiMzNDtleHQ0X2RheF93cml0ZV9pdGVyJiMzNDssCiAgICAmIzM0O2V4dDRfaW9tYXBfYmVnaW4mIzM0OywKICAgICYjMzQ7ZXh0NF9pb21hcF9hbGxvYyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBleHQ0IERpcmVjdCBJL08gYW5kIERBWCB3cml0ZSBwYXRocywgc3BlY2lmaWNhbGx5IGZpeGluZyBsb2NraW5nIGFuZCBwYXJ0aWFsIGJsb2NrIHplcm9pbmcgZm9yIHVuYWxpZ25lZCBESU8gd3JpdGVzLiBJdCBpbnRyb2R1Y2VzIGBleHQ0X2Rpb19uZWVkc196ZXJvaW5nYCBhbmQgbW9kaWZpZXMgYGV4dDRfZGlvX3dyaXRlX2NoZWNrc2AsIGBleHQ0X2J1ZmZlcmVkX3dyaXRlX2l0ZXJgLCBgZXh0NF9kYXhfd3JpdGVfaXRlcmAsIGFuZCBgZXh0NF9pb21hcF9iZWdpbmAuIFRoZXNlIGFyZSBjb3JlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBleHQ0JiMzOTtzIEkvTyBoYW5kbGluZyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGMxMTg5ZTc3NmQ5MTYzOTYyODA4NzVmMTdiNGE5MzljNDQ5ZDZkMDcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEp1biAyNiAwOTowODoxMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZmlsZS5jIGIvZnMvZXh0NC9maWxlLmMKaW5kZXggZWIxYTMyMzk2MmIxMDEuLjYxMGUxMDlmY2QzNjI1IDEwMDY0NAotLS0gYS9mcy9leHQ0L2ZpbGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2ZpbGUuYwpAQCAtMjEzLDMxICYjNDM7MjEzLDY1IEBAIGV4dDRfZXh0ZW5kaW5nX2lvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIHNpemVfdCBsZW4pCiAJcmV0dXJuIGZhbHNlOwogfQogCi0vKiBJcyBJTyBvdmVyd3JpdGluZyBhbGxvY2F0ZWQgb3IgaW5pdGlhbGl6ZWQgYmxvY2tzPyAqLwotc3RhdGljIGJvb2wgZXh0NF9vdmVyd3JpdGVfaW8oc3RydWN0IGlub2RlICppbm9kZSwKLQkJCSAgICAgIGxvZmZfdCBwb3MsIGxvZmZfdCBsZW4sIGJvb2wgKnVud3JpdHRlbikKJiM0MzsvKgomIzQzOyAqIERvZXMgYW4gdW5hbGlnbmVkIERJTyB3cml0ZSByZXF1aXJlIHBhcnRpYWwgYmxvY2sgemVyb2luZz8KJiM0MzsgKgomIzQzOyAqIFBhcnRpYWwgYmxvY2sgemVyb2luZyBpcyBwZXJmb3JtZWQgb25seSBmb3IgdGhlIGhlYWQgYW5kIHRhaWwgYmxvY2tzCiYjNDM7ICogd2hlbiB0aGV5IGFyZSBwYXJ0aWFsbHkgY292ZXJlZCBieSB0aGUgd3JpdGUgYW5kIHRoZSB1bmRlcmx5aW5nIGV4dGVudAomIzQzOyAqIGlzIGEgaG9sZSBvciB1bndyaXR0ZW4uIE1pZGRsZSBibG9ja3MgKGZ1bGx5IGNvdmVyZWQgYnkgdGhlIHdyaXRlKQomIzQzOyAqIGFyZSB3cml0dGVuIGFzIHdob2xlIGJsb2NrcyB3aXRob3V0IHplcm9pbmcuCiYjNDM7ICoKJiM0MzsgKiBXaGVuIHplcm9pbmcgaXMgcmVxdWlyZWQsIHR3byBjb25jdXJyZW50IHVuYWxpZ25lZCBESU8gd3JpdGVzIHRvIHRoZQomIzQzOyAqIHNhbWUgcGFydGlhbCBibG9jayBjYW4gcmFjZSBhbmQgY29ycnVwdCBlYWNoIG90aGVyJiMzOTtzIGRhdGEsIHNvIHRoZQomIzQzOyAqIGNhbGxlciBtdXN0IHRha2UgdGhlIGV4Y2x1c2l2ZSBpX3J3c2VtIGFuZCBkcmFpbiBpbi1mbGlnaHQgRElPLiBXaGVuCiYjNDM7ICogemVyb2luZyBpcyBub3QgcmVxdWlyZWQsIHNoYXJlZCBsb2NrIGlzIHNhZmUgLS0gYmxvY2sgYWxsb2NhdGlvbiBhbmQKJiM0MzsgKiB1bndyaXR0ZW4gY29udmVyc2lvbiBmb3IgbWlkZGxlIGJsb2NrcyBhcmUgcHJvdGVjdGVkIGJ5IGlfZGF0YV9zZW0KJiM0MzsgKiBhbmQgaW5vZGVfZGlvX2JlZ2luKCkuCiYjNDM7ICovCiYjNDM7c3RhdGljIGJvb2wgZXh0NF9kaW9fbmVlZHNfemVyb2luZyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgcG9zLCBsb2ZmX3QgbGVuLAomIzQzOwkJCQkgICBib29sIG5vd2FpdCkKIHsKIAlzdHJ1Y3QgZXh0NF9tYXBfYmxvY2tzIG1hcDsKIAl1bnNpZ25lZCBpbnQgYmxrYml0cyA9IGlub2RlLSZndDtpX2Jsa2JpdHM7Ci0JaW50IGVyciwgYmxrbGVuOwomIzQzOwl1bnNpZ25lZCBsb25nIGJsb2NrbWFzayA9IGlub2RlLSZndDtpX3NiLSZndDtzX2Jsb2Nrc2l6ZSAtIDE7CiYjNDM7CWJvb2wgaGVhZF9wYXJ0aWFsLCB0YWlsX3BhcnRpYWw7CiYjNDM7CWV4dDRfbGJsa190IGhlYWRfbGJsaywgdGFpbF9sYmxrOwomIzQzOwlpbnQgZXJyOwomIzQzOwlpbnQgbWFwX2ZsYWdzID0gMDsKIAogCWlmIChwb3MgJiM0MzsgbGVuICZndDsgaV9zaXplX3JlYWQoaW5vZGUpKQotCQlyZXR1cm4gZmFsc2U7CiYjNDM7CQlyZXR1cm4gdHJ1ZTsKIAotCW1hcC5tX2xibGsgPSBwb3MgJmd0OyZndDsgYmxrYml0czsKLQltYXAubV9sZW4gPSBFWFQ0X01BWF9CTE9DS1MobGVuLCBwb3MsIGJsa2JpdHMpOwotCWJsa2xlbiA9IG1hcC5tX2xlbjsKJiM0MzsJaWYgKG5vd2FpdCkKJiM0MzsJCW1hcF9mbGFncyA9IEVYVDRfR0VUX0JMT0NLU19DQUNIRURfTk9XQUlUOwomIzQzOwomIzQzOwloZWFkX3BhcnRpYWwgPSAocG9zICZhbXA7IGJsb2NrbWFzaykgIT0gMDsKJiM0MzsJdGFpbF9wYXJ0aWFsID0gKChwb3MgJiM0MzsgbGVuKSAmYW1wOyBibG9ja21hc2spICE9IDA7CiYjNDM7CWhlYWRfbGJsayA9IHBvcyAmZ3Q7Jmd0OyBibGtiaXRzOwomIzQzOwl0YWlsX2xibGsgPSAocG9zICYjNDM7IGxlbiAtIDEpICZndDsmZ3Q7IGJsa2JpdHM7CiYjNDM7CiYjNDM7CS8qIENoZWNrIHRoZSBoZWFkIHBhcnRpYWwgYmxvY2suICovCiYjNDM7CWlmIChoZWFkX3BhcnRpYWwpIHsKJiM0MzsJCW1hcC5tX2xibGsgPSBoZWFkX2xibGs7CiYjNDM7CQltYXAubV9sZW4gPSB0YWlsX2xibGsgLSBoZWFkX2xibGsgJiM0MzsgMTsKJiM0MzsJCWVyciA9IGV4dDRfbWFwX2Jsb2NrcyhOVUxMLCBpbm9kZSwgJmFtcDttYXAsIG1hcF9mbGFncyk7CiYjNDM7CQlpZiAoZXJyICZsdDs9IDAgfHwgIShtYXAubV9mbGFncyAmYW1wOyBFWFQ0X01BUF9NQVBQRUQpKQomIzQzOwkJCXJldHVybiB0cnVlOwomIzQzOwkJLyogSWYgdGhpcyBtYXBwaW5nIGFscmVhZHkgY292ZXJzIHRoZSB0YWlsIGJsb2NrLCB3ZSYjMzk7cmUgZG9uZS4gKi8KJiM0MzsJCWlmICghdGFpbF9wYXJ0aWFsIHx8IG1hcC5tX2xibGsgJiM0MzsgZXJyICZndDsgdGFpbF9sYmxrKQomIzQzOwkJCXJldHVybiBmYWxzZTsKJiM0MzsJfQogCi0JZXJyID0gZXh0NF9tYXBfYmxvY2tzKE5VTEwsIGlub2RlLCAmYW1wO21hcCwgMCk7Ci0JaWYgKGVyciAhPSBibGtsZW4pCi0JCXJldHVybiBmYWxzZTsKLQkvKgotCSAqICYjMzk7ZXJyPT1sZW4mIzM5OyBtZWFucyB0aGF0IGFsbCBvZiB0aGUgYmxvY2tzIGhhdmUgYmVlbiBwcmVhbGxvY2F0ZWQsCi0JICogcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZXkgaGF2ZSBiZWVuIGluaXRpYWxpemVkIG9yIG5vdC4gV2UgbmVlZCB0bwotCSAqIGNoZWNrIG1fZmxhZ3MgdG8gZGlzdGluZ3Vpc2ggdGhlIHVud3JpdHRlbiBleHRlbnRzLgotCSAqLwotCSp1bndyaXR0ZW4gPSAhKG1hcC5tX2ZsYWdzICZhbXA7IEVYVDRfTUFQX01BUFBFRCk7Ci0JcmV0dXJuIHRydWU7CiYjNDM7CS8qIENoZWNrIHRoZSB0YWlsIHBhcnRpYWwgYmxvY2suICovCiYjNDM7CWlmICh0YWlsX3BhcnRpYWwpIHsKJiM0MzsJCW1hcC5tX2xibGsgPSB0YWlsX2xibGs7CiYjNDM7CQltYXAubV9sZW4gPSAxOwomIzQzOwkJZXJyID0gZXh0NF9tYXBfYmxvY2tzKE5VTEwsIGlub2RlLCAmYW1wO21hcCwgbWFwX2ZsYWdzKTsKJiM0MzsJCWlmIChlcnIgJmx0Oz0gMCB8fCAhKG1hcC5tX2ZsYWdzICZhbXA7IEVYVDRfTUFQX01BUFBFRCkpCiYjNDM7CQkJcmV0dXJuIHRydWU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGZhbHNlOwogfQogCiBzdGF0aWMgc3NpemVfdCBleHQ0X2dlbmVyaWNfd3JpdGVfY2hlY2tzKHN0cnVjdCBraW9jYiAqaW9jYiwKQEAgLTI3OCw3ICYjNDM7MzEyLDcgQEAgc3RhdGljIHNzaXplX3QgZXh0NF93cml0ZV9jaGVja3Moc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pCiAJaWYgKGNvdW50ICZsdDs9IDApCiAJCXJldHVybiBjb3VudDsKIAotCXJldCA9IGZpbGVfbW9kaWZpZWQoaW9jYi0mZ3Q7a2lfZmlscCk7CiYjNDM7CXJldCA9IGtpb2NiX21vZGlmaWVkKGlvY2IpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKQEAgLTMwOSw2ICYjNDM7MzQzLDEzIEBAIHN0YXRpYyBzc2l6ZV90IGV4dDRfYnVmZmVyZWRfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAogCWlub2RlX2xvY2soaW5vZGUpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBQcmV2ZW50IGNvbmN1cnJlbnQgZGlyZWN0IEkvTyBhbmQgYnVmZmVyZWQgSS9PIHRvIHRoZSBzYW1lIGZpbGUKJiM0MzsJICogcmFuZ2UuIFdhaXQgZm9yIGluLWZsaWdodCBESU8gdG8gZmluaXNoIGJlZm9yZSBkaXJ0eWluZyBwYWdlcy4KJiM0MzsJICovCiYjNDM7CWlub2RlX2Rpb193YWl0KGlub2RlKTsKJiM0MzsKIAlyZXQgPSBleHQ0X3dyaXRlX2NoZWNrcyhpb2NiLCBmcm9tKTsKIAlpZiAocmV0ICZsdDs9IDApCiAJCWdvdG8gb3V0OwpAQCAtNDI4LDE2ICYjNDM7NDY5LDI4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW9tYXBfZGlvX29wcyBleHQ0X2Rpb193cml0ZV9vcHMgPSB7CiAgKiBjb25kaXRpb24gcmVxdWlyZXMgYW4gZXhjbHVzaXZlIGlub2RlIGxvY2suIElmIHllcywgdGhlbiB3ZSByZXN0YXJ0IHRoZQogICogd2hvbGUgb3BlcmF0aW9uIGJ5IHJlbGVhc2luZyB0aGUgc2hhcmVkIGxvY2sgYW5kIGFjcXVpcmluZyBleGNsdXNpdmUgbG9jay4KICAqCi0gKiAtIEZvciB1bmFsaWduZWRfaW8gd2UgbmV2ZXIgdGFrZSBzaGFyZWQgbG9jayBhcyBpdCBtYXkgY2F1c2UgZGF0YSBjb3JydXB0aW9uCi0gKiAgIHdoZW4gdHdvIHVuYWxpZ25lZCBJTyB0cmllcyB0byBtb2RpZnkgdGhlIHNhbWUgYmxvY2sgZS5nLiB3aGlsZSB6ZXJvaW5nLgomIzQzOyAqIFRoZSBkZWNpc2lvbiBpcyBsYXllcmVkLCBldmFsdWF0ZWQgaW4gdGhpcyBvcmRlcjoKICAqCi0gKiAtIEZvciBleHRlbmRpbmcgd3JpdGVzIGNhc2Ugd2UgZG9uJiMzOTt0IHRha2UgdGhlIHNoYXJlZCBsb2NrLCBzaW5jZSBpdCByZXF1aXJlcwotICogICB1cGRhdGluZyBpbm9kZSBpX2Rpc2tzaXplIGFuZC9vciBvcnBoYW4gaGFuZGxpbmcgd2l0aCBleGNsdXNpdmUgbG9jay4KJiM0MzsgKiAxLiBJZiBraW9jYl9tb2RpZmllZCgpIG5lZWRzIHRvIHVwZGF0ZSBzZWN1cml0eSBpbmZvICghSVNfTk9TRUMpLCB1cGdyYWRlCiYjNDM7ICogICAgdG8gdGhlIGV4Y2x1c2l2ZSBsb2NrIC0tIHRoZSBzZWN1cml0eSB1cGRhdGUgaXRzZWxmIHJlcXVpcmVzIGl0LAomIzQzOyAqICAgIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgd3JpdGUgZXh0ZW5kcyB0aGUgZmlsZSBvciBpcyBhbGlnbmVkLgogICoKLSAqIC0gc2hhcmVkIGxvY2tpbmcgd2lsbCBvbmx5IGJlIHRydWUgbW9zdGx5IHdpdGggb3ZlcndyaXRlcywgaW5jbHVkaW5nCi0gKiAgIGluaXRpYWxpemVkIGJsb2NrcyBhbmQgdW53cml0dGVuIGJsb2Nrcy4KJiM0MzsgKiAyLiBJZiB0aGUgd3JpdGUgZXh0ZW5kcyBpX3NpemUgb3IgaV9kaXNrc2l6ZSwgdXBncmFkZSB0byB0aGUgZXhjbHVzaXZlCiYjNDM7ICogICAgbG9jayB0byBzYWZlbHkgdXBkYXRlIGlfZGlza3NpemUgYW5kIHRoZSBvcnBoYW4gbGlzdCwgcmVnYXJkbGVzcyBvZgomIzQzOyAqICAgIGFsaWdubWVudC4KICAqCi0gKiAtIE90aGVyd2lzZSB3ZSB3aWxsIHN3aXRjaCB0byBleGNsdXNpdmUgaV9yd3NlbSBsb2NrLgomIzQzOyAqIDMuIE90aGVyd2lzZSwgZm9yIGFsaWduZWQgbm9uLWV4dGVuZGluZyB3cml0ZXMsIHNoYXJlZCBsb2NrIGlzIGFsd2F5cwomIzQzOyAqICAgIHN1ZmZpY2llbnQgcmVnYXJkbGVzcyBvZiBleHRlbnQgc3RhdGUgKHdyaXR0ZW4sIHVud3JpdHRlbiwgb3IgaG9sZSkuCiYjNDM7ICogICAgdHJ1bmNhdGUvcHVuY2hfaG9sZSBjYW5ub3QgcnVuIHdoaWxlIHdlIGhvbGQgdGhlIHNoYXJlZCBpX3J3c2VtCiYjNDM7ICogICAgKHRoZXkgbmVlZCBpdCBleGNsdXNpdmVseSk7IGFmdGVyIHdlIHJlbGVhc2UgaXQsIGlub2RlX2Rpb19iZWdpbigpCiYjNDM7ICogICAga2VlcHMgdGhlaXIgaW5vZGVfZGlvX3dhaXQoKSBibG9ja2VkIHVudGlsIGluLWZsaWdodCBiaW9zIGNvbXBsZXRlLgomIzQzOyAqICAgIGlfZGF0YV9zZW0gc2VyaWFsaXplcyBjb25jdXJyZW50IGV4dGVudCB0cmVlIG1vZGlmaWNhdGlvbnMuCiYjNDM7ICoKJiM0MzsgKiA0LiBPdGhlcndpc2UsIHRoZSB3cml0ZSBpcyB1bmFsaWduZWQgYW5kIG5vbi1leHRlbmRpbmcuIFNoYXJlZCBsb2NrIGlzCiYjNDM7ICogICAgc2FmZSB1bmxlc3MgdGhlIERJTyBsYXllciBuZWVkcyB0byBwZXJmb3JtIHBhcnRpYWwgYmxvY2sgemVyb2luZyAtLQomIzQzOyAqICAgIGkuZS4gdGhlIGhlYWQgb3IgdGFpbCBwYXJ0aWFsIGJsb2NrIHNpdHMgb24gYSBob2xlIG9yIHVud3JpdHRlbgomIzQzOyAqICAgIGV4dGVudC4gSW4gdGhhdCBjYXNlIHVwZ3JhZGUgdG8gdGhlIGV4Y2x1c2l2ZSBsb2NrIGFuZCBkcmFpbgomIzQzOyAqICAgIGluLWZsaWdodCBESU8gdG8gYXZvaWQgcmFjZXMgd2l0aCBjb25jdXJyZW50IHBhcnRpYWwgYmxvY2sgemVyb2luZy4KICAqLwogc3RhdGljIHNzaXplX3QgZXh0NF9kaW9fd3JpdGVfY2hlY2tzKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tLAogCQkJCSAgICAgYm9vbCAqaWxvY2tfc2hhcmVkLCBib29sICpleHRlbmQsCkBAIC00NDgsNyAmIzQzOzUwMSw3IEBAIHN0YXRpYyBzc2l6ZV90IGV4dDRfZGlvX3dyaXRlX2NoZWNrcyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSwKIAlsb2ZmX3Qgb2Zmc2V0OwogCXNpemVfdCBjb3VudDsKIAlzc2l6ZV90IHJldDsKLQlib29sIG92ZXJ3cml0ZSwgdW5hbGlnbmVkX2lvLCB1bndyaXR0ZW47CiYjNDM7CWJvb2wgbmVlZHNfemVyb2luZyA9IGZhbHNlOwogCiByZXN0YXJ0OgogCXJldCA9IGV4dDRfZ2VuZXJpY193cml0ZV9jaGVja3MoaW9jYiwgZnJvbSk7CkBAIC00NTgsMjQgJiM0Mzs1MTEsMjMgQEAgc3RhdGljIHNzaXplX3QgZXh0NF9kaW9fd3JpdGVfY2hlY2tzKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tLAogCW9mZnNldCA9IGlvY2ItJmd0O2tpX3BvczsKIAljb3VudCA9IHJldDsKIAotCXVuYWxpZ25lZF9pbyA9IGV4dDRfdW5hbGlnbmVkX2lvKGlub2RlLCBmcm9tLCBvZmZzZXQpOwogCSpleHRlbmQgPSBleHQ0X2V4dGVuZGluZ19pbyhpbm9kZSwgb2Zmc2V0LCBjb3VudCk7Ci0Jb3ZlcndyaXRlID0gZXh0NF9vdmVyd3JpdGVfaW8oaW5vZGUsIG9mZnNldCwgY291bnQsICZhbXA7dW53cml0dGVuKTsKIAogCS8qCi0JICogRGV0ZXJtaW5lIHdoZXRoZXIgd2UgbmVlZCB0byB1cGdyYWRlIHRvIGFuIGV4Y2x1c2l2ZSBsb2NrLiBUaGlzIGlzCi0JICogcmVxdWlyZWQgdG8gY2hhbmdlIHNlY3VyaXR5IGluZm8gaW4gZmlsZV9tb2RpZmllZCgpLCBmb3IgZXh0ZW5kaW5nCi0JICogSS9PLCBhbnkgZm9ybSBvZiBub24tb3ZlcndyaXRlIEkvTywgYW5kIHVuYWxpZ25lZCBJL08gdG8gdW53cml0dGVuCi0JICogZXh0ZW50cyAoYXMgcGFydGlhbCBibG9jayB6ZXJvaW5nIG1heSBiZSByZXF1aXJlZCkuCiYjNDM7CSAqIEZvciB1bmFsaWduZWQgd3JpdGVzLCBjaGVjayB3aGV0aGVyIHBhcnRpYWwgYmxvY2sgemVyb2luZyB3aWxsIGJlCiYjNDM7CSAqIG5lZWRlZC4gSWYgc28sIGV4Y2x1c2l2ZSBsb2NrIGlzIHJlcXVpcmVkIHRvIHNlcmlhbGl6ZSBhZ2FpbnN0CiYjNDM7CSAqIGNvbmN1cnJlbnQgRElPIHRoYXQgY291bGQgcmFjZSB3aXRoIHRoZSB6ZXJvaW5nLgogCSAqCi0JICogTm90ZSB0aGF0IHVuYWxpZ25lZCB3cml0ZXMgYXJlIGFsbG93ZWQgdW5kZXIgc2hhcmVkIGxvY2sgc28gbG9uZyBhcwotCSAqIHRoZXkgYXJlIHB1cmUgb3ZlcndyaXRlcy4gT3RoZXJ3aXNlLCBjb25jdXJyZW50IHVuYWxpZ25lZCB3cml0ZXMgcmlzawotCSAqIGRhdGEgY29ycnVwdGlvbiBkdWUgdG8gcGFydGlhbCBibG9jayB6ZXJvaW5nIGluIHRoZSBkaW8gbGF5ZXIsIGFuZCBzbwotCSAqIHRoZSBJL08gbXVzdCBvY2N1ciBleGNsdXNpdmVseS4KJiM0MzsJICogRm9yIGFsaWduZWQgd3JpdGVzIHdlIHNraXAgdGhpcyBjaGVjayBlbnRpcmVseSBzaW5jZSBhbGxvY2F0aW9uCiYjNDM7CSAqIHVuZGVyIHNoYXJlZCBsb2NrIGlzIHNhZmUuCiAJICovCiYjNDM7CWlmIChleHQ0X3VuYWxpZ25lZF9pbyhpbm9kZSwgZnJvbSwgb2Zmc2V0KSkKJiM0MzsJCW5lZWRzX3plcm9pbmcgPSBleHQ0X2Rpb19uZWVkc196ZXJvaW5nKGlub2RlLCBvZmZzZXQsIGNvdW50LAomIzQzOwkJCQkJCWlvY2ItJmd0O2tpX2ZsYWdzICZhbXA7IElPQ0JfTk9XQUlUKTsKJiM0MzsKJiM0MzsJLyogRGV0ZXJtaW5lIHdoZXRoZXIgd2UgbmVlZCB0byB1cGdyYWRlIHRvIGFuIGV4Y2x1c2l2ZSBsb2NrLiAqLwogCWlmICgqaWxvY2tfc2hhcmVkICZhbXA7JmFtcDsKLQkgICAgKCghSVNfTk9TRUMoaW5vZGUpIHx8ICpleHRlbmQgfHwgIW92ZXJ3cml0ZSB8fAotCSAgICAgKHVuYWxpZ25lZF9pbyAmYW1wOyZhbXA7IHVud3JpdHRlbikpKSkgewomIzQzOwkgICAgKCFJU19OT1NFQyhpbm9kZSkgfHwgKmV4dGVuZCB8fCBuZWVkc196ZXJvaW5nKSkgewogCQlpZiAoaW9jYi0mZ3Q7a2lfZmxhZ3MgJmFtcDsgSU9DQl9OT1dBSVQpIHsKIAkJCXJldCA9IC1FQUdBSU47CiAJCQlnb3RvIG91dDsKQEAgLTQ4OSwyMSAmIzQzOzU0MSwyOCBAQCBzdGF0aWMgc3NpemVfdCBleHQ0X2Rpb193cml0ZV9jaGVja3Moc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sCiAJLyoKIAkgKiBOb3cgdGhhdCBsb2NraW5nIGlzIHNldHRsZWQsIGRldGVybWluZSBkaW8gZmxhZ3MgYW5kIGV4Y2x1c2l2aXR5CiAJICogcmVxdWlyZW1lbnRzLiBXZSBkb24mIzM5O3QgdXNlIERJT19PVkVSV1JJVEVfT05MWSBiZWNhdXNlIHdlIGVuZm9yY2UKLQkgKiBiZWhhdmlvciBhbHJlYWR5LiBUaGUgaW5vZGUgbG9jayBpcyBhbHJlYWR5IGhlbGQgZXhjbHVzaXZlIGlmIHRoZQotCSAqIHdyaXRlIGlzIG5vbi1vdmVyd3JpdGUgb3IgZXh0ZW5kaW5nLCBzbyBkcmFpbiBhbGwgb3V0c3RhbmRpbmcgZGlvIGFuZAotCSAqIHNldCB0aGUgZm9yY2Ugd2FpdCBkaW8gZmxhZy4KJiM0MzsJICogYmVoYXZpb3IgYWxyZWFkeS4gV2hlbiBob2xkaW5nIHRoZSBleGNsdXNpdmUgbG9jayBmb3IgYSB3cml0ZSB0aGF0CiYjNDM7CSAqIG5lZWRzIHBhcnRpYWwgYmxvY2sgemVyb2luZyBvciBpcyBleHRlbmRpbmcgdGhlIGZpbGUsIHdlIG11c3Qgd2FpdAomIzQzOwkgKiBmb3IgdGhlIEkvTyB0byBjb21wbGV0ZSBzeW5jaHJvbm91c2x5OgomIzQzOwkgKgomIzQzOwkgKiAgLSBuZWVkc196ZXJvaW5nOiBkcmFpbiBpbi1mbGlnaHQgRElPIHdob3NlIGVuZF9pbyBjb3VsZCByYWNlIHdpdGgKJiM0MzsJICogICAgb3VyIHBhcnRpYWwgYmxvY2sgemVyb2luZywgYW5kIGZvcmNlIHN5bmNocm9ub3VzIGNvbXBsZXRpb24gc28gd2UKJiM0MzsJICogICAgZG9uJiMzOTt0IGxlYXZlIGluLWZsaWdodCB6ZXJvaW5nIGJpb3MgZm9yIHRoZSBuZXh0IHdyaXRlciB0byBkcmFpbi4KJiM0MzsJICoKJiM0MzsJICogIC0gZXh0ZW5kOiB0aGUgY2FsbGVyIG11c3QgdXBkYXRlIGlfZGlza3NpemUgYWZ0ZXIgSS9PIGNvbXBsZXRpb24sCiYjNDM7CSAqICAgIHdoaWNoIHJlcXVpcmVzIHRoZSBkYXRhIHRvIGJlIG9uIGRpc2sgZmlyc3QuCiAJICovCi0JaWYgKCEqaWxvY2tfc2hhcmVkICZhbXA7JmFtcDsgKHVuYWxpZ25lZF9pbyB8fCAqZXh0ZW5kKSkgewomIzQzOwlpZiAoISppbG9ja19zaGFyZWQgJmFtcDsmYW1wOyAobmVlZHNfemVyb2luZyB8fCAqZXh0ZW5kKSkgewogCQlpZiAoaW9jYi0mZ3Q7a2lfZmxhZ3MgJmFtcDsgSU9DQl9OT1dBSVQpIHsKIAkJCXJldCA9IC1FQUdBSU47CiAJCQlnb3RvIG91dDsKIAkJfQotCQlpZiAodW5hbGlnbmVkX2lvICZhbXA7JmFtcDsgKCFvdmVyd3JpdGUgfHwgdW53cml0dGVuKSkKJiM0MzsJCWlmIChuZWVkc196ZXJvaW5nKQogCQkJaW5vZGVfZGlvX3dhaXQoaW5vZGUpOwogCQkqZGlvX2ZsYWdzID0gSU9NQVBfRElPX0ZPUkNFX1dBSVQ7CiAJfQogCi0JcmV0ID0gZmlsZV9tb2RpZmllZChmaWxlKTsKJiM0MzsJcmV0ID0ga2lvY2JfbW9kaWZpZWQoaW9jYik7CiAJaWYgKHJldCAmbHQ7IDApCiAJCWdvdG8gb3V0OwogCkBAIC02NzIsNiAmIzQzOzczMSwxMSBAQCBleHQ0X2RheF93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKQogCWNvdW50ID0gaW92X2l0ZXJfY291bnQoZnJvbSk7CiAKIAlpZiAob2Zmc2V0ICYjNDM7IGNvdW50ICZndDsgRVhUNF9JKGlub2RlKS0mZ3Q7aV9kaXNrc2l6ZSkgewomIzQzOwkJaWYgKGlvY2ItJmd0O2tpX2ZsYWdzICZhbXA7IElPQ0JfTk9XQUlUKSB7CiYjNDM7CQkJcmV0ID0gLUVBR0FJTjsKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsJCX0KJiM0MzsKIAkJaGFuZGxlID0gZXh0NF9qb3VybmFsX3N0YXJ0KGlub2RlLCBFWFQ0X0hUX0lOT0RFLCAyKTsKIAkJaWYgKElTX0VSUihoYW5kbGUpKSB7CiAJCQlyZXQgPSBQVFJfRVJSKGhhbmRsZSk7CmRpZmYgLS1naXQgYS9mcy9leHQ0L2lub2RlLmMgYi9mcy9leHQ0L2lub2RlLmMKaW5kZXggYzJjMmQ2YWM3ZjNkMTMuLjNjMDUwOTQ0NzVkYjFjIDEwMDY0NAotLS0gYS9mcy9leHQ0L2lub2RlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9pbm9kZS5jCkBAIC03NTksOCAmIzQzOzc1OSw5IEBAIGludCBleHQ0X21hcF9ibG9ja3MoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCUJVRygpOwogCQl9CiAKJiM0MzsJCS8qIFNraXAgYmxvY2tpbmcgb3BlcmF0aW9ucyBhbmQganVtcCB0byBleHRlbnQgdmFsaWRhdGlvbi4gKi8KIAkJaWYgKGZsYWdzICZhbXA7IEVYVDRfR0VUX0JMT0NLU19DQUNIRURfTk9XQUlUKQotCQkJcmV0dXJuIHJldHZhbDsKJiM0MzsJCQlnb3RvIGZvdW5kOwogI2lmZGVmIEVTX0FHR1JFU1NJVkVfVEVTVAogCQlleHQ0X21hcF9ibG9ja3NfZXNfcmVjaGVjayhoYW5kbGUsIGlub2RlLCBtYXAsCiAJCQkJCSAgICZhbXA7b3JpZ19tYXAsIGZsYWdzKTsKQEAgLTc3Niw3ICYjNDM7Nzc3LDcgQEAgaW50IGV4dDRfbWFwX2Jsb2NrcyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCSAqIGNhbm5vdCBmaW5kIGV4dGVudCBpbiB0aGUgY2FjaGUuCiAJICovCiAJaWYgKGZsYWdzICZhbXA7IEVYVDRfR0VUX0JMT0NLU19DQUNIRURfTk9XQUlUKQotCQlyZXR1cm4gMDsKJiM0MzsJCXJldHVybiAtRUFHQUlOOwogCiAJLyoKIAkgKiBUcnkgdG8gc2VlIGlmIHdlIGNhbiBnZXQgdGhlIGJsb2NrIHdpdGhvdXQgcmVxdWVzdGluZyBhIG5ldwpAQCAtNzk3LDYgJiM0Mzs3OTgsOSBAQCBpbnQgZXh0NF9tYXBfYmxvY2tzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJaWYgKChmbGFncyAmYW1wOyBFWFQ0X0dFVF9CTE9DS1NfQ1JFQVRFKSA9PSAwKQogCQlyZXR1cm4gcmV0dmFsOwogCiYjNDM7CS8qIEVYVDRfR0VUX0JMT0NLU19DUkVBVEUgY2Fubm90IG9wZXJhdGUgaW4gTk9XQUlUIG1vZGUgKi8KJiM0MzsJV0FSTl9PTl9PTkNFKGZsYWdzICZhbXA7IEVYVDRfR0VUX0JMT0NLU19DQUNIRURfTk9XQUlUKTsKJiM0MzsKIAkvKgogCSAqIFJldHVybnMgaWYgdGhlIGJsb2NrcyBoYXZlIGFscmVhZHkgYWxsb2NhdGVkCiAJICoKQEAgLTM2NzIsNiAmIzQzOzM2NzYsOSBAQCBzdGF0aWMgaW50IGV4dDRfaW9tYXBfYWxsb2Moc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dDRfbWFwX2Jsb2NrcyAqbWFwLAogCWludCByZXQsIGRpb19jcmVkaXRzLCBtX2ZsYWdzID0gMCwgcmV0cmllcyA9IDA7CiAJYm9vbCBmb3JjZV9jb21taXQgPSBmYWxzZTsKIAomIzQzOwlpZiAoZmxhZ3MgJmFtcDsgSU9NQVBfTk9XQUlUKQomIzQzOwkJcmV0dXJuIC1FQUdBSU47CiYjNDM7CiAJLyoKIAkgKiBUcmltIHRoZSBtYXBwaW5nIHJlcXVlc3QgdG8gdGhlIG1heGltdW0gdmFsdWUgdGhhdCB3ZSBjYW4gbWFwIGF0CiAJICogb25jZSBmb3IgZGlyZWN0IEkvTy4KQEAgLTM3NzcsNiAmIzQzOzM3ODQsNyBAQCBzdGF0aWMgaW50IGV4dDRfaW9tYXBfYmVnaW4oc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbmd0aCwKIAlzdHJ1Y3QgZXh0NF9tYXBfYmxvY2tzIG1hcDsKIAl1OCBibGtiaXRzID0gaW5vZGUtJmd0O2lfYmxrYml0czsKIAl1bnNpZ25lZCBpbnQgb3JpZ19tbGVuOwomIzQzOwlpbnQgbWFwX2ZsYWdzID0gMDsKIAogCWlmICgob2Zmc2V0ICZndDsmZ3Q7IGJsa2JpdHMpICZndDsgRVhUNF9NQVhfTE9HSUNBTF9CTE9DSykKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0zNzkxLDYgJiM0MzszNzk5LDEyIEBAIHN0YXRpYyBpbnQgZXh0NF9pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuZ3RoLAogCW1hcC5tX2xlbiA9IG1pbl90KGxvZmZfdCwgKG9mZnNldCAmIzQzOyBsZW5ndGggLSAxKSAmZ3Q7Jmd0OyBibGtiaXRzLAogCQkJICBFWFQ0X01BWF9MT0dJQ0FMX0JMT0NLKSAtIG1hcC5tX2xibGsgJiM0MzsgMTsKIAlvcmlnX21sZW4gPSBtYXAubV9sZW47CiYjNDM7CS8qCiYjNDM7CSAqIEluIE5PV0FJVCBjb250ZXh0LCBvbmx5IHVzZSBjYWNoZWQgZXh0ZW50IGluZm8uIElmIGVzIGNhY2hlIG1pc3NlcywKJiM0MzsJICogcmV0dXJuIC1FQUdBSU4gdG8gYXZvaWQgc2xlZXBpbmcgb24gZG93bl9yZWFkKGlfZGF0YV9zZW0pLgomIzQzOwkgKi8KJiM0MzsJaWYgKGZsYWdzICZhbXA7IElPTUFQX05PV0FJVCkKJiM0MzsJCW1hcF9mbGFncyA9IEVYVDRfR0VUX0JMT0NLU19DQUNIRURfTk9XQUlUOwogCiAJaWYgKGZsYWdzICZhbXA7IElPTUFQX1dSSVRFKSB7CiAJCS8qCkBAIC0zODAwLDcgJiM0MzszODE0LDcgQEAgc3RhdGljIGludCBleHQ0X2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW5ndGgsCiAJCSAqIGVzcGVjaWFsbHkgaW4gbXVsdGktdGhyZWFkZWQgb3ZlcndyaXRlIHJlcXVlc3RzLgogCQkgKi8KIAkJaWYgKG9mZnNldCAmIzQzOyBsZW5ndGggJmx0Oz0gaV9zaXplX3JlYWQoaW5vZGUpKSB7Ci0JCQlyZXQgPSBleHQ0X21hcF9ibG9ja3MoTlVMTCwgaW5vZGUsICZhbXA7bWFwLCAwKTsKJiM0MzsJCQlyZXQgPSBleHQ0X21hcF9ibG9ja3MoTlVMTCwgaW5vZGUsICZhbXA7bWFwLCBtYXBfZmxhZ3MpOwogCQkJLyoKIAkJCSAqIEZvciBEQVggd2UgY29udmVydCBleHRlbnRzIHRvIGluaXRpYWxpemVkIG9uZXMgYmVmb3JlCiAJCQkgKiBjb3B5aW5nIHRoZSBkYXRhLCBvdGhlcndpc2Ugd2UgZG8gaXQgYWZ0ZXIgSS9PIHNvCkBAIC0zODIxLDcgJiM0MzszODM1LDcgQEAgc3RhdGljIGludCBleHQ0X2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW5ndGgsCiAJCX0KIAkJcmV0ID0gZXh0NF9pb21hcF9hbGxvYyhpbm9kZSwgJmFtcDttYXAsIGZsYWdzKTsKIAl9IGVsc2UgewotCQlyZXQgPSBleHQ0X21hcF9ibG9ja3MoTlVMTCwgaW5vZGUsICZhbXA7bWFwLCAwKTsKJiM0MzsJCXJldCA9IGV4dDRfbWFwX2Jsb2NrcyhOVUxMLCBpbm9kZSwgJmFtcDttYXAsIG1hcF9mbGFncyk7CiAJfQogCiAJaWYgKHJldCAmbHQ7IDApCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA5OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxNjcKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA1MzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEaXJlY3QgSS9PIChESU8pIENoYW5nZXMgaW4gZXh0NCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBhZmZlY3RpbmcgYGZzL2V4dDQvZmlsZS5jYCBhbmQgYGZzL2V4dDQvaW5vZGUuY2AuIEl0JiMzOTtzIGFsbCBhYm91dCBESU8sIHBhcnRpY3VsYXJseSBkZWFsaW5nIHdpdGggdW5hbGlnbmVkIHdyaXRlcyBhbmQgdGhlIGFzc29jaWF0ZWQgbG9ja2luZyBtZWNoYW5pc21zIHdpdGhpbiBleHQ0LiBJbnRlcmVzdGluZy4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBhcHBlYXJzIHRvIGJlIGNlbnRlcmVkIGFyb3VuZCBgZXh0NF9kaW9fbmVlZHNfemVyb2luZ2AsIHdoaWNoIHNlZW1zIHRvIGJlIHJlcGxhY2luZyBgZXh0NF9vdmVyd3JpdGVfaW9gLiBJdCBhbHNvIGltcGFjdHMgYGV4dDRfZGlvX3dyaXRlX2NoZWNrc2AgYW5kIGludHJvZHVjZXMgY2hhbmdlcyB0byBsb2NraW5nLiBSZXBsYWNpbmcgYGZpbGVfbW9kaWZpZWRgIHdpdGggYGtpb2NiX21vZGlmaWVkYCBpcyBhIGdvb2QgcmVmaW5lbWVudC4gQW5kIHRoZXJlJiMzOTtzIHRoaXMgYGlub2RlX2Rpb193YWl0KGlub2RlKWAgYWRkaXRpb24gaW4gYGV4dDRfYnVmZmVyZWRfd3JpdGVfaXRlcmAsIHJpZ2h0LiBJIGFtIHNlZWluZyBtb2RpZmljYXRpb25zIHRvIGBleHQ0X2RheF93cml0ZV9pdGVyYCBmb3IgYElPQ0JfTk9XQUlUYCwgd2hpY2ggaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCBtZXJpdHMgZXhhbWluYXRpb24sIGFsb25nIHdpdGggdXBkYXRlcyB0byBgZXh0NF9tYXBfYmxvY2tzYCB0byBiZXR0ZXIgaGFuZGxlIGBFWFQ0X0dFVF9CTE9DS1NfQ0FDSEVEX05PV0FJVGAuIEZpbmFsbHksIGBleHQ0X2lvbWFwX2FsbG9jYCBhbmQgYGV4dDRfaW9tYXBfYmVnaW5gIGFyZSB1cGRhdGVkIGZvciBgSU9NQVBfTk9XQUlUYC4KClRoaXMgaXMgYWxsIGZ1bmN0aW9uYWwgbG9naWMsIHZlcnkgY29yZSB0byBleHQ0LiBXZSBkZWZpbml0ZWx5IG5lZWQgdG8gZnV6eiB0aGlzIGFyZWEuIFRoZXNlIHNvcnRzIG9mIGNoYW5nZXMgYXJlIGdvbGQgbWluZXMgZm9yIHVuY292ZXJpbmcgdHJpY2t5IGNvbmN1cnJlbmN5IGJ1Z3Mgb3Igc3VidGxlIEkvTyBlcnJvcnMuCgpOb3csIGxldCYjMzk7cyB6ZXJvIGluIG9uIHRoZSBrZXkgZnVuY3Rpb25zIG1vZGlmaWVkLiBJdCBsb29rcyBsaWtlIGl0IGlzOgoKKiAgIGBleHQ0X2Rpb19uZWVkc196ZXJvaW5nYCAobmV3KQoqICAgYGV4dDRfZGlvX3dyaXRlX2NoZWNrc2AKKiAgIGBleHQ0X2J1ZmZlcmVkX3dyaXRlX2l0ZXJgCiogICBgZXh0NF9kYXhfd3JpdGVfaXRlcmAKKiAgIGBleHQ0X21hcF9ibG9ja3NgCiogICBgZXh0NF9pb21hcF9hbGxvY2AKKiAgIGBleHQ0X2lvbWFwX2JlZ2luYAoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZSwgaXQgbG9va3MgbGlrZSBgZXh0NF9kaW9fbmVlZHNfemVyb2luZ2AsIGBleHQ0X2Rpb193cml0ZV9jaGVja3NgLCBgZXh0NF9idWZmZXJlZF93cml0ZV9pdGVyYCwgYGV4dDRfZGF4X3dyaXRlX2l0ZXJgLCBgZXh0NF9pb21hcF9hbGxvY2AsIGFuZCBgZXh0NF9pb21hcF9iZWdpbmAgYXJlIHN0YXRpYyBhbmQgaW50ZXJuYWwgdG8gZXh0NC4gSG93ZXZlciwgYGV4dDRfbWFwX2Jsb2Nrc2AgaXMgZXhwb3J0ZWQsIG1lYW5pbmcgaXQmIzM5O3MgYWNjZXNzaWJsZSBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuIEdvb2QgdG8ga25vdyBhcyBpdCYjMzk7cyBvZnRlbiBhbiBlbnRyeSBwb2ludC4KCk9rYXksIHdhaXQgYSBzZWNvbmQuIGBleHQ0X2ZpbGVfd3JpdGVfaXRlcmAgY2FsbHMgZWl0aGVyIGBleHQ0X2Rpb193cml0ZV9pdGVyYCwgYGV4dDRfYnVmZmVyZWRfd3JpdGVfaXRlcmAsIG9yIGBleHQ0X2RheF93cml0ZV9pdGVyYC4gSSBuZWVkIHRvIGNoZWNrIGBmcy9leHQ0L2ZpbGUuY2AgdG8gcGlucG9pbnQgdGhlIGFjdHVhbCBlbnRyeSBwb2ludHMsIGFuZCB2ZXJpZnkgaG93IHRob3NlIERJTyBpbXBsZW1lbnRhdGlvbnMgYXJlIHV0aWxpemVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA5OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V4dDRfZGlvX3dyaXRlX2NoZWNrcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L2ZpbGUuYz00NjM9c3RhdGljIGNvbnN0IHN0cnVjdCBpb21hcF9kaW9fb3BzIGV4dDRfZGlvX3dyaXRlX29wcyA9IHtcbi0tXG5mcy9leHQ0L2ZpbGUuYy00OTQtICovXG5mcy9leHQ0L2ZpbGUuYzo0OTU6c3RhdGljIHNzaXplX3QgZXh0NF9kaW9fd3JpdGVfY2hlY2tzKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tLFxuZnMvZXh0NC9maWxlLmMtNDk2LVx0XHRcdFx0ICAgICBib29sICppbG9ja19zaGFyZWQsIGJvb2wgKmV4dGVuZCxcbi0tXG5mcy9leHQ0L2ZpbGUuYz01Nzg9c3RhdGljIHNzaXplX3QgZXh0NF9kaW9fd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbi0tXG5mcy9leHQ0L2ZpbGUuYy01OTAtXHQgKiBRdWljayBjaGVjayBoZXJlIHdpdGhvdXQgYW55IGlfcndzZW0gbG9jayB0byBzZWUgaWYgaXQgaXMgZXh0ZW5kaW5nXG5mcy9leHQ0L2ZpbGUuYzo1OTE6XHQgKiBJTy4gQSBtb3JlIHJlbGlhYmxlIGNoZWNrIGlzIGRvbmUgaW4gZXh0NF9kaW9fd3JpdGVfY2hlY2tzKCkgd2l0aFxuZnMvZXh0NC9maWxlLmMtNTkyLVx0ICogcHJvcGVyIGxvY2tpbmcgaW4gcGxhY2UuXG4tLVxuZnMvZXh0NC9maWxlLmMtNjI5LVxuZnMvZXh0NC9maWxlLmM6NjMwOlx0cmV0ID0gZXh0NF9kaW9fd3JpdGVfY2hlY2tzKGlvY2IsIGZyb20sIFx1MDAyNmlsb2NrX3NoYXJlZCwgXHUwMDI2ZXh0ZW5kLFxuZnMvZXh0NC9maWxlLmMtNjMxLVx0XHRcdFx0ICAgIFx1MDAyNmRpb19mbGFncyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDk6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzY5NgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYGV4dDRfZmlsZV93cml0ZV9pdGVyYCoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIGBleHQ0X2ZpbGVfd3JpdGVfaXRlcmAuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgY29yZSB3cml0ZSBwYXRoIGZvciBleHQ0LiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBkYXRhIGZsb3cg4oCTIHdoZXJlIGl0IHN0YXJ0cywgaG93IGl0IGhhbmRsZXMgdGhlIElPIHZlY3RvciwgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIGJsb2NrIGFsbG9jYXRvciwgdGhlIGpvdXJuYWwsIGFuZCB0aGUgZGlydHlpbmcgb2YgaW5vZGVzIGFuZCBibG9jayBncm91cHMuIEkmIzM5O20gYWxzbyBjdXJpb3VzIGFib3V0IHRoZSBsb2NraW5nIHNjaGVtZTsgSSBhc3N1bWUgdGhlcmUmIzM5O3MgYSBnb29kIGFtb3VudCBvZiBjb25jdXJyZW5jeSBjb250cm9sIGludm9sdmVkLCBnaXZlbiB0aGUgcG90ZW50aWFsIGZvciBtdWx0aXBsZSB3cml0ZXJzLiBJIG5lZWQgdG8ga2VlcCB0aGUgc3BlY2lmaWNzIG9mIHRoZSBqb3VybmFsaW5nIGltcGxlbWVudGF0aW9uIGluIG1pbmQgLSB0aGUgbnVhbmNlcyBvZiBtZXRhZGF0YSB1cGRhdGVzIHZlcnN1cyBkYXRhIHdyaXRlcy4gSSB3aWxsIGZvY3VzIG9uIHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBJL08gdmVjdG9ycywgYW5kIHRoZSB1bmRlcmx5aW5nIGJsb2NrcyB0aGF0IGFyZSBiZWluZyB3cml0dGVuIHRvIGRpc2sgLSBob3cgdGhleSB3aWxsIGJlIGRlYWx0IHdpdGggaW4gdGhlIGV4dGVudCB0cmVlLiBJIGFsc28gbmVlZCB0byBiZSBhd2FyZSBvZiBob3cgZGlyZWN0IEkvTyBhbmQgYnVmZmVyZWQgSS9PIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGlzIGZ1bmN0aW9uOyBJJiMzOTtsbCBleHBlY3QgdG8gc2VlIGJyYW5jaGluZyBiYXNlZCBvbiB0aGUgZmxhZ3MuIEFuZCwgb2YgY291cnNlLCBJJiMzOTtsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBlcnJvciBoYW5kbGluZyAtIHdoYXQmIzM5O3MgdGhlIGV4cGVjdGVkIGJlaGF2aW9yIHVuZGVyIHZhcmlvdXMgZmFpbHVyZSBzY2VuYXJpb3MsIGFuZCBob3cgYXJlIGVycm9ycyBwcm9wYWdhdGVkIGJhY2sgdXAgdGhlIHN0YWNrLiBJdOKAmXMgYWxzbyB3b3J0aCBjb25zaWRlcmluZyBob3cgd3JpdGViYWNrIGFuZCBwYWdlIGZhdWx0IGhhbmRsaW5nIGlzIGludGVncmF0ZWQsIGFzIHRoYXQgaGFzIGltcGxpY2F0aW9ucyBmb3IgdGhlIG92ZXJhbGwgcGVyZm9ybWFuY2UgcHJvZmlsZS4gSXQmIzM5O3MgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDk6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXh0NF9maWxlX3dyaXRlX2l0ZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9maWxlLmM9NzY5PXN0YXRpYyBzc2l6ZV90XG5mcy9leHQ0L2ZpbGUuYzo3NzA6ZXh0NF9maWxlX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG5mcy9leHQ0L2ZpbGUuYy03NzEte1xuLS1cbmZzL2V4dDQvZmlsZS5jPTEwMzg9Y29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBleHQ0X2ZpbGVfb3BlcmF0aW9ucyA9IHtcbi0tXG5mcy9leHQ0L2ZpbGUuYy0xMDQwLVx0LnJlYWRfaXRlclx0PSBleHQ0X2ZpbGVfcmVhZF9pdGVyLFxuZnMvZXh0NC9maWxlLmM6MTA0MTpcdC53cml0ZV9pdGVyXHQ9IGV4dDRfZmlsZV93cml0ZV9pdGVyLFxuZnMvZXh0NC9maWxlLmMtMTA0Mi1cdC5pb3BvbGxcdFx0PSBpb2NiX2Jpb19pb3BvbGwsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDk6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODI0MAoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDM2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFByb3Bvc2VkIEV4dDQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBteSBtaW5kIGhvbmVzIGluIG9uIGBleHQ0X2ZpbGVfd3JpdGVfaXRlcmAuIFRoYXQmIzM5O3MgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQsIHRoZSBmaXJzdCBwbGFjZSBJJiMzOTtkIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LiBCdXQgd2FpdCwgaXQmIzM5O3Mgbm90IGp1c3QgdGhhdC4gVGhlIHBhdGNoIHRvdWNoZXMgc2V2ZXJhbCBvdGhlciBrZXkgYXJlYXMuIEl0JiMzOTtzIG1vZGlmeWluZyBgZXh0NF9kaW9fd3JpdGVfaXRlcmAsIGBleHQ0X2J1ZmZlcmVkX3dyaXRlX2l0ZXJgLCBhbmQgYGV4dDRfZGF4X3dyaXRlX2l0ZXJgIOKAkyB0aG9zZSBhcmUgYWxsIGNydWNpYWwgZm9yIGRpcmVjdCBJL08sIGJ1ZmZlcmVkIEkvTywgYW5kIERBWCB3cml0ZXMsIHJlc3BlY3RpdmVseS4KCkhvbGQgb24sIEkgc2VlIGl0JiMzOTtzIGFsc28gY2hhbmdpbmcgYGV4dDRfZGlvX3dyaXRlX2NoZWNrc2AsIHdoaWNoIGlzICpjYWxsZWQqIGJ5IGBleHQ0X2Rpb193cml0ZV9pdGVyYC4gSW50ZXJlc3RpbmcuIFRoYXTigJlzIHByb2JhYmx5IHRoZSBpbXBvcnRhbnQgYml0IG9mIGRpcmVjdCBJL08uCgpPa2F5LCBsZXQmIzM5O3MgbWFrZSBhIG1lbnRhbCBsaXN0IGhlcmUgb2YgdGhlIGtleSBmdW5jdGlvbnMgdGhpcyBwYXRjaCBpcyBwbGF5aW5nIHdpdGgsIHRvIGhlbHAgbWUgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoZSBwYXRjaC4KCiogICBgZXh0NF9maWxlX3dyaXRlX2l0ZXJgICh0aGUgYmlnIGthaHVuYSkKKiAgIGBleHQ0X2Rpb193cml0ZV9pdGVyYCAoRGlyZWN0IEkvTykKKiAgIGBleHQ0X2J1ZmZlcmVkX3dyaXRlX2l0ZXJgIChCdWZmZXJlZCBJL08pCiogICBgZXh0NF9kYXhfd3JpdGVfaXRlcmAgKERBWC1zcGVjaWZpYyB3cml0ZXMpCiogICBgZXh0NF9tYXBfYmxvY2tzYCAoQmxvY2sgbWFwcGluZywgdmVyeSBpbXBvcnRhbnQsIGFuZCBwb3RlbnRpYWxseSBwcm9ibGVtYXRpYykKKiAgIGBleHQ0X2lvbWFwX2JlZ2luYCAoSS9PIG1hcCAtIGJlZ2lubmluZykuCgpIbW0sIG5vdyB3aGljaCBvZiB0aGVzZSBpcyB0aGUgKmJlc3QqIHRvIGZvY3VzIG9uPyBJIHRoaW5rIGBleHQ0X2ZpbGVfd3JpdGVfaXRlcmAgYW5kIGBleHQ0X2Rpb193cml0ZV9pdGVyYCBzZWVtIGxpa2UgZ29vZCBvcHRpb25zIHRvIHN0YXJ0IHdpdGguIExldCYjMzk7cyBzZWUgaWYgYGV4dDRfZGlvX3dyaXRlX2l0ZXJgIGlzIHN0YXRpYy4gSXQgaXMsIHNvIHRoYXQgaXMgYSBnb29kIHNpZ24uIFdlIGNhbiBkZWZpbml0ZWx5IHVzZSBzdGF0aWMgZnVuY3Rpb25zIGluIHN5emthbGxlci4gQnV0IG1heWJlIGBleHQ0X2ZpbGVfd3JpdGVfaXRlcmAgaXMgdGhlIGJldHRlciBjaG9pY2UuIEkmIzM5O2xsIG5lZWQgdG8gdGhpbmsgYWJvdXQgd2hpY2ggaXMgYmV0dGVyLgoKSSYjMzk7bSBhIGxpdHRsZSB3YXJ5IG9mIGBleHQ0X21hcF9ibG9ja3NgLiBJdCYjMzk7cyBpbmNyZWRpYmx5IGNvbW1vbiwgYW5kIHRoaXMgcGF0Y2ggbWlnaHQgYmUgYWZmZWN0aW5nIGl0cyBjb3JlIGZ1bmN0aW9uYWxpdHkuIEl0IGNvdWxkIGJlIHRvbyAmIzM0O2hvdCYjMzQ7IHRvIGJlIGEgZ29vZCBmb2N1cywgb3IgaXQgY291bGQgYmUgKnRoZSogY3J1Y2lhbCBwYXJ0IG9mIHRoaXMgcGF0Y2guIEJldHRlciB0byBpbnZlc3RpZ2F0ZSB0aGF0IGNhcmVmdWxseS4KCkkgc2hvdWxkIGFsc28gY2hlY2sgb3V0IGBleHQ0X2lvbWFwX2JlZ2luYCB0byB1bmRlcnN0YW5kIHRoZSBiaWdnZXIgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwOTowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleHQ0X2lvbWFwX2JlZ2luJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvaW5vZGUuYz0zNjcyPXN0YXRpYyBpbnQgZXh0NF9pb21hcF9hbGxvYyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZXh0NF9tYXBfYmxvY2tzICptYXAsXG4tLVxuZnMvZXh0NC9pbm9kZS5jLTM3NzktXG5mcy9leHQ0L2lub2RlLmM6Mzc4MDpzdGF0aWMgaW50IGV4dDRfaW9tYXBfYmVnaW4oc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbmd0aCxcbmZzL2V4dDQvaW5vZGUuYy0zNzgxLVx0XHR1bnNpZ25lZCBmbGFncywgc3RydWN0IGlvbWFwICppb21hcCwgc3RydWN0IGlvbWFwICpzcmNtYXApXG4tLVxuZnMvZXh0NC9pbm9kZS5jPTM4NjY9Y29uc3Qgc3RydWN0IGlvbWFwX29wcyBleHQ0X2lvbWFwX29wcyA9IHtcbmZzL2V4dDQvaW5vZGUuYzozODY3Olx0LmlvbWFwX2JlZ2luXHRcdD0gZXh0NF9pb21hcF9iZWdpbixcbmZzL2V4dDQvaW5vZGUuYy0zODY4LX07XG5mcy9leHQ0L2lub2RlLmMtMzg2OS1cbmZzL2V4dDQvaW5vZGUuYzozODcwOnN0YXRpYyBpbnQgZXh0NF9pb21hcF9iZWdpbl9yZXBvcnQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCxcbmZzL2V4dDQvaW5vZGUuYy0zODcxLVx0XHRcdFx0ICAgbG9mZl90IGxlbmd0aCwgdW5zaWduZWQgaW50IGZsYWdzLFxuLS1cbmZzL2V4dDQvaW5vZGUuYz0zOTIxPWNvbnN0IHN0cnVjdCBpb21hcF9vcHMgZXh0NF9pb21hcF9yZXBvcnRfb3BzID0ge1xuZnMvZXh0NC9pbm9kZS5jOjM5MjI6XHQuaW9tYXBfYmVnaW4gPSBleHQ0X2lvbWFwX2JlZ2luX3JlcG9ydCxcbmZzL2V4dDQvaW5vZGUuYy0zOTIzLX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDk6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTU2MwoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZXh0NCBzaXR1YXRpb24gaGVyZS4gKipDaGVja2luZyBFWFQ0IENvbmZpZ3VyYXRpb24qKgoKRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIGlmIEVYVDQgaXMgZXZlbiBlbmFibGVkIGJ5IGRlZmF1bHQuIEFoLCB5ZXMsIGl0JiMzOTtzIGEgY29yZSBmaWxlc3lzdGVtLiBObyBzdXJwcmlzZSB0aGVyZS4gTm93LCBpcyB0aGVyZSBhbnl0aGluZyBzcGVjaWZpYyBJIG5lZWQgdG8gd2F0Y2ggb3V0IGZvciBpbiB0aGUgY29uZmlndXJhdGlvbj8gTGV0JiMzOTtzIHNlZS4uLiBgQ09ORklHX0VYVDRfRlNgLCB0aGF0JiMzOTtzIHRoZSBwcmltYXJ5IGZsYWcsIEkga25ldyB0aGF0LgoKT2theSwgd2hhdCBhYm91dCBEaXJlY3QgQWNjZXNzIChEQVgpIHN1cHBvcnQ/IEkgcmVtZW1iZXIgc29tZSBjb21wbGV4aXRpZXMgd2l0aCB0aGF0LiBMZXQgbWUgcXVpY2tseSBzZWUgaWYgdGhlcmUgYXJlIGFueSBEQVggc3BlY2lmaWMgZmlsZXMuIEFscmlnaHQsIEkgY2FuIHNlZSB0aGF0IGBleHQ0X2RheF93cml0ZV9pdGVyYCBoYXMgYmVlbiBtb2RpZmllZCwgd2hpY2ggbWVhbnMgaXQgaXMgbGlrZWx5IHN1cHBvcnRlZC4gT2theSwgc28gREFYIHdpbGwgcmVxdWlyZSBgQ09ORklHX0ZTX0RBWGAgdG8gYWxzbyBiZSBlbmFibGVkLiBHb3QgaXQsIG1vdmluZyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDk6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXh0NF9kYXhfd3JpdGVfaXRlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L2ZpbGUuYz03MDk9c3RhdGljIHNzaXplX3RcbmZzL2V4dDQvZmlsZS5jOjcxMDpleHQ0X2RheF93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxuZnMvZXh0NC9maWxlLmMtNzExLXtcbi0tXG5mcy9leHQ0L2ZpbGUuYz03NzA9ZXh0NF9maWxlX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG4tLVxuZnMvZXh0NC9maWxlLmMtNzgwLVx0aWYgKElTX0RBWChpbm9kZSkpXG5mcy9leHQ0L2ZpbGUuYzo3ODE6XHRcdHJldHVybiBleHQ0X2RheF93cml0ZV9pdGVyKGlvY2IsIGZyb20pO1xuZnMvZXh0NC9maWxlLmMtNzgyLSNlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwOTowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDA0MAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgZGlzdGlsbGVkOgoKKipDaGVja2luZyBgQ09ORklHX0ZTX0RBWGAgRGVwZW5kZW5jeSoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIHRvdWNoZXMgYGV4dDRfZGF4X3dyaXRlX2l0ZXJgLiBJbW1lZGlhdGVseSwgdGhlIGFsYXJtIGJlbGxzIGFyZSByaW5naW5nIGFib3V0IGBDT05GSUdfRlNfREFYYC4gSXQmIzM5O3MgcHJldHR5IGxpa2VseSB0aGlzIGZ1bmN0aW9uIGlzIGd1YXJkZWQgYnkgdGhhdCBkZWZpbmUuIEkgbmVlZCB0byBjb25maXJtIHRoaXMgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIuIEJlc3QgYmV0IGlzIHRvIGp1bXAgb3ZlciB0byBgZnMvZXh0NC9maWxlLmNgIGFuZCB0YWtlIGEgbG9vayBhcm91bmQgbGluZSA3ODAuIFNlZSBpZiB0aGF0JiMzOTtzIHdoZXJlIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBoYXBwZW5zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwOTowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2V4dDQvZmlsZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3NzA6XHRleHQ0X2ZpbGVfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbiA3NzE6XHR7XG4gNzcyOlx0XHRpbnQgcmV0O1xuIDc3MzpcdFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoaW9jYi1cdTAwM2VraV9maWxwKTtcbiA3NzQ6XHRcbiA3NzU6XHRcdHJldCA9IGV4dDRfZW1lcmdlbmN5X3N0YXRlKGlub2RlLVx1MDAzZWlfc2IpO1xuIDc3NjpcdFx0aWYgKHVubGlrZWx5KHJldCkpXG4gNzc3Olx0XHRcdHJldHVybiByZXQ7XG4gNzc4Olx0XG4gNzc5Olx0I2lmZGVmIENPTkZJR19GU19EQVhcbiA3ODA6XHRcdGlmIChJU19EQVgoaW5vZGUpKVxuIDc4MTpcdFx0XHRyZXR1cm4gZXh0NF9kYXhfd3JpdGVfaXRlcihpb2NiLCBmcm9tKTtcbiA3ODI6XHQjZW5kaWZcbiA3ODM6XHRcbiA3ODQ6XHRcdGlmIChpb2NiLVx1MDAzZWtpX2ZsYWdzIFx1MDAyNiBJT0NCX0FUT01JQykge1xuIDc4NTpcdFx0XHRzaXplX3QgbGVuID0gaW92X2l0ZXJfY291bnQoZnJvbSk7XG4gNzg2Olx0XG4gNzg3Olx0XHRcdGlmIChsZW4gXHUwMDNjIEVYVDRfU0IoaW5vZGUtXHUwMDNlaV9zYiktXHUwMDNlc19hd3VfbWluIHx8XG4gNzg4Olx0XHRcdCAgICBsZW4gXHUwMDNlIEVYVDRfU0IoaW5vZGUtXHUwMDNlaV9zYiktXHUwMDNlc19hd3VfbWF4KVxuIDc4OTpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwOTowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDU5OAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDU3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBFeHQ0IFdyaXRlIFBhdGggVGVzdGluZyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmlnaHQgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0ZXN0aW5nIHRoZXNlIGV4dDQgd3JpdGUgcGF0aHMuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCBgQ09ORklHX0ZTX0RBWGAgd291bGQgYmUgdGhlIGtleSwgc2luY2UgdGhlIHByaW1hcnkgZm9jdXMgaXMgb24gYGV4dDRfZGF4X3dyaXRlX2l0ZXJgLiBCdXQgaG9sZCBvbi4uLiB0aGlzIHBhdGNoIGFsc28gdG91Y2hlcyBgZXh0NF9kaW9fd3JpdGVfY2hlY2tzYCBhbmQgYGV4dDRfYnVmZmVyZWRfd3JpdGVfaXRlcmAsIHdoaWNoIGFyZW4mIzM5O3QgbmVjZXNzYXJpbHkgREFYLXNwZWNpZmljLiBUaGF0IG1lYW5zIGBDT05GSUdfRVhUNF9GU2AgaXMgdGhlIHJlYWwgYmFzZWxpbmUgcmVxdWlyZW1lbnQsIGJ1dCBgRlNfREFYYCBpcyBhbHNvIHVzZWZ1bCBhbmQgZ29vZCB0byBoYXZlIGVuYWJsZWQgdG8gdGVzdCB0aGUgREFYIGNvbXBvbmVudC4KCkkgc2hvdWxkIHByb2JhYmx5IHJldmlldyBob3cgdGhvc2UgYXJlIHVzZWQuIFNvIGxldCBtZSBjaGVjayBgZXh0NF9kaW9fbmVlZHNfemVyb2luZ2AgYW5kIGBleHQ0X2Rpb193cml0ZV9jaGVja3NgLiBSaWdodCwgdGhvc2UgYXJlIHJlbGF0ZWQgdG8gRGlyZWN0IEkvTy4KCkxldCYjMzk7cyBtYWtlIGEgbGlzdCBvZiBzeW1ib2xzIEkgc2hvdWxkIGZvY3VzIG9uIGZvciB0aGlzOgoqICAgYGV4dDRfZGlvX3dyaXRlX2l0ZXJgCiogICBgZXh0NF9idWZmZXJlZF93cml0ZV9pdGVyYAoqICAgYGV4dDRfZGF4X3dyaXRlX2l0ZXJgCiogICBgZXh0NF9maWxlX3dyaXRlX2l0ZXJgCiogICBgZXh0NF9pb21hcF9iZWdpbmAKCk5vdywgbGV0JiMzOTtzIHZlcmlmeSBpZiBlYWNoIG9mIHRoZXNlIHN5bWJvbHMgaXMgc3RhdGljIG9yIGdsb2JhbC4gIE9rYXksIEkgc2VlIHRoYXQuLi4KKiAgIGBleHQ0X2Rpb193cml0ZV9pdGVyYCBpcyBzdGF0aWMuCiogICBgZXh0NF9idWZmZXJlZF93cml0ZV9pdGVyYCBpcyBzdGF0aWMuCiogICBgZXh0NF9kYXhfd3JpdGVfaXRlcmAgaXMgc3RhdGljLgoqICAgYGV4dDRfZmlsZV93cml0ZV9pdGVyYCBpcyBzdGF0aWMuCiogICBgZXh0NF9pb21hcF9iZWdpbmAgaXMgc3RhdGljLgoqICAgSG93ZXZlciwgYGV4dDRfbWFwX2Jsb2Nrc2AgaXMgZ2xvYmFsLgoKTm93IHRvIG1ha2UgYSBmaW5hbCBkZWNpc2lvbiwgSSYjMzk7bGwgZ28gd2l0aCB0aGUgbGlzdCBvZiB0aGVzZSBzeW1ib2xzOgoqICAgYGV4dDRfZGlvX3dyaXRlX2l0ZXJgCiogICBgZXh0NF9idWZmZXJlZF93cml0ZV9pdGVyYAoqICAgYGV4dDRfZGF4X3dyaXRlX2l0ZXJgCiogICBgZXh0NF9maWxlX3dyaXRlX2l0ZXJgCiogICBgZXh0NF9pb21hcF9iZWdpbmAKKiAgIGBleHQ0X21hcF9ibG9ja3NgCgpIb2xkIG9uLi4uIGFyZSB0aGVzZSBhbGwgdG9vIGNvbW1vbj8gYGV4dDRfbWFwX2Jsb2Nrc2AgaXMgcHJvYmFibHkgKnZlcnkqIGhvdCwgYW5kIHNvIGlzIGBleHQ0X2ZpbGVfd3JpdGVfaXRlcmAuIFVzaW5nIHRob3NlIG1heSBza2V3IHRoZSByZXN1bHRzIGlmIEkmIzM5O20gbm90IGNhcmVmdWwuICBgZXh0NF9kaW9fd3JpdGVfaXRlcmAgYW5kIGBleHQ0X2RheF93cml0ZV9pdGVyYCBzZWVtIGJldHRlciwgc2luY2UgdGhleSBhcmUgZGlyZWN0bHkgcmVsYXRlZCB0byBESU8gYW5kIERBWCByZXNwZWN0aXZlbHkuICBgZXh0NF9idWZmZXJlZF93cml0ZV9pdGVyYCBpcyBhbHNvIGltcG9ydGFudCBmb3IgYnVmZmVyZWQgSU8uIFNvLCBmb2N1c2luZyBvbiB0aG9zZSBtYWtlcyBtb3JlIHNlbnNlLgoKU28gSSB3aWxsIGluY2x1ZGUgdGhlIGZvbGxvd2luZzoKKiAgIGBleHQ0X2Rpb193cml0ZV9pdGVyYAoqICAgYGV4dDRfYnVmZmVyZWRfd3JpdGVfaXRlcmAKKiAgIGBleHQ0X2RheF93cml0ZV9pdGVyYAoqICAgYGV4dDRfaW9tYXBfYmVnaW5gCgpGaW5hbGx5LCB0byB2ZXJpZnkgdGhlIGNvbmZpZ3VyYXRpb25zLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQ6CiogICBgRVhUNF9GU2AgaXMgZW5hYmxlZAoqICAgYEZTX0RBWGAgaXMgZW5hYmxlZApJJiMzOTtsbCBkb3VibGUtY2hlY2sgdG8gbWFrZSBzdXJlIGBGU19EQVhgIGlzIGEgdmFsaWQgY29uZmlnLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwOTowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRlNfREFYJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL0tjb25maWc9NTY9ZW5kaWYgIyBCTE9DS1xuZnMvS2NvbmZpZy01Ny1cbmZzL0tjb25maWc6NTg6Y29uZmlnIEZTX0RBWFxuZnMvS2NvbmZpZy01OS1cdGJvb2wgXCYjMzQ7RmlsZSBzeXN0ZW0gYmFzZWQgRGlyZWN0IEFjY2VzcyAoREFYKSBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvS2NvbmZpZy04OS1cbmZzL0tjb25maWc6OTA6Y29uZmlnIEZTX0RBWF9QTURcbmZzL0tjb25maWctOTEtXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA5OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDI5CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoaXMgZXh0NCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCB0aGlzIGBGU19EQVhgIGNoYW5nZSBpcyB2YWxpZC4gSXQmIzM5O3MgZm9jdXNlZCBvbiBpbXByb3ZpbmcgaG93IGV4dDQgaGFuZGxlcyBEaXJlY3QgSS9PIGFuZCBEQVggd3JpdGVzLCBzcGVjaWZpY2FsbHkgYWRkcmVzc2luZyBsb2NraW5nIGlzc3VlcyBhbmQgaW5jb21wbGV0ZSBibG9jayB6ZXJvaW5nIHdoZW4gZGVhbGluZyB3aXRoIHVuYWxpZ25lZCBEaXJlY3QgSS9PIHdyaXRlcy4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBiZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gZXh0NCYjMzk7cyBJL08gaGFuZGxpbmcuIFRoYXQmIzM5O3MgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcgYW5kIGEgZ29vZCBpbmRpY2F0b3IgZm9yIGZ1enppbmcgdGFyZ2V0cy4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6b29tIGluIG9uIHRoZXNlIGZ1bmN0aW9ucywgYmVjYXVzZSB0aGV5IHJlcHJlc2VudCB0aGUgY29yZSBmdW5jdGlvbmFsIGNoYW5nZXM6IGBleHQ0X2Rpb193cml0ZV9pdGVyYCwgYGV4dDRfYnVmZmVyZWRfd3JpdGVfaXRlcmAsIGBleHQ0X2RheF93cml0ZV9pdGVyYCwgYGV4dDRfZGlvX3dyaXRlX2NoZWNrc2AsIGBleHQ0X2Rpb19uZWVkc196ZXJvaW5nYCwgYW5kIGBleHQ0X2lvbWFwX2JlZ2luYC4KCkFoYSwgYGV4dDRfZGlvX25lZWRzX3plcm9pbmdgIGxvb2tzIHBhcnRpY3VsYXJseSBwcm9taXNpbmcgc2luY2UgaXQmIzM5O3MgYSAqbmV3KiBmdW5jdGlvbi4gTmV3IGZ1bmN0aW9ucyBhcmUgb2Z0ZW4gZ29vZCBjYW5kaWRhdGVzIGZvciBmb2N1c2VkIHRlc3RpbmcuIGBleHQ0X2Rpb193cml0ZV9jaGVja3NgIGFsc28gc2VlbXMgbGlrZSBpdCYjMzk7bGwgYmUgYSBrZXkgcGFydCBvZiB0aGUgbG9naWMgdGhhdCB3aWxsIG5lZWQgdGhvcm91Z2ggZnV6emluZy4KCkxldCYjMzk7cyBxdWlja2x5IGNvbmZpcm0gdGhhdCBgZXh0NF9kaW9fbmVlZHNfemVyb2luZ2AgaXMgaW5kZWVkIHBhcnQgb2YgdGhlIHBhdGNoLiBZZXMsIGl0JiMzOTtzIHRoZXJlLiBUaGF0JiMzOTtzIGdyZWF0IQoKQWxyaWdodCwgSSYjMzk7dmUgZ290IG15IGxpc3QuIEkmIzM5O20gZ29pbmcgdG8gY29uY2VudHJhdGUgb24gZnV6emluZyB0aGVzZSBzeW1ib2xzOiBgZXh0NF9kaW9fbmVlZHNfemVyb2luZ2AsIGBleHQ0X2Rpb193cml0ZV9jaGVja3NgLCBgZXh0NF9kaW9fd3JpdGVfaXRlcmAsIGBleHQ0X2J1ZmZlcmVkX3dyaXRlX2l0ZXJgLCBgZXh0NF9kYXhfd3JpdGVfaXRlcmAsIGFuZCBgZXh0NF9pb21hcF9iZWdpbmAuCgpBbmQsIGFzIGZhciBhcyBjb25maWdzIGdvLCBgRVhUNF9GU2AgYW5kIGBGU19EQVhgIGFyZSB0aGUga2V5cyBoZXJlLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGBFWFQ0X0ZTYCBpcyB0aGUgY29ycmVjdCBuYW1lIGZvciB0aGUgZXh0NCBmaWxlc3lzdGVtIGNvbmZpZywgYnV0IEkmIzM5O20gcHJldHR5IHN1cmUgaXQgaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA5OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBFWFQ0X0ZTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvZXh0NC9LY29uZmlnOjI6Y29uZmlnIEVYVDRfRlNcbmZzL2V4dDQvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7VGhlIEV4dGVuZGVkIDQgKGV4dDQpIGZpbGVzeXN0ZW1cJiMzNDtcbi0tXG5mcy9leHQ0L0tjb25maWc9MzU9Y29uZmlnIEVYVDRfVVNFX0ZPUl9FWFQyXG4tLVxuZnMvZXh0NC9LY29uZmlnLTQ1LVxuZnMvZXh0NC9LY29uZmlnOjQ2OmNvbmZpZyBFWFQ0X0ZTX1BPU0lYX0FDTFxuZnMvZXh0NC9LY29uZmlnLTQ3LVx0Ym9vbCBcJiMzNDtFeHQ0IFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXCYjMzQ7XG4tLVxuZnMvZXh0NC9LY29uZmlnLTU1LVxuZnMvZXh0NC9LY29uZmlnOjU2OmNvbmZpZyBFWFQ0X0ZTX1NFQ1VSSVRZXG5mcy9leHQ0L0tjb25maWctNTctXHRib29sIFwmIzM0O0V4dDQgU2VjdXJpdHkgTGFiZWxzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA5OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMTMyCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqVmVyaWZ5aW5nIEVYVDQgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCB0aGUgY29yZSBmaWxlc3lzdGVtIGhlcmUgaXMgZGVmaW5pdGVseSBgRVhUNF9GU2AsIHRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50LCBubyBxdWVzdGlvbi4gTm93LCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIGlmIHRoZXJlJiMzOTtzIGFueSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9uIGJleW9uZCB0aGUgYmFzZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHdvbmRlcmluZyBhYm91dCBEaXJlY3QgQWNjZXNzLCBzbyBgRVhUNF9GU19EQVhgIGNvbWVzIHRvIG1pbmQuIEJ1dCB3YWl0LCB0aGF0IHJpbmdzIGEgYmVsbC4uLiBpc24mIzM5O3QgREFYIGluIGV4dDQgdHlwaWNhbGx5IHRpZWQgdG8gdGhlIGJyb2FkZXIgYEZTX0RBWGAgb3B0aW9uPyBZZXMsIGl0JiMzOTtzIGhpZ2hseSBsaWtlbHkgdGhhdCBgRVhUNF9GU19EQVhgIGlzIGltcGxpY2l0bHkgZW5hYmxlZCBpZiBgRlNfREFYYCBpcyBzZXQuIFRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSBzaG91bGQgcmVhbGx5IGNvbnN1bHQgdGhlIHNvdXJjZS4gVGltZSB0byBkaWcgaW50byBlaXRoZXIgYGZzL2V4dDQvS2NvbmZpZ2Agb3IgcG9zc2libHkgdGhlIGBmcy9leHQ0L01ha2VmaWxlYCB0byBjb25maXJtIHRoZSBkZXBlbmRlbmNpZXMgYW5kIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBHb3R0YSBiZSB0aG9yb3VnaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDk6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX0ZTX0RBWCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3Bvd2VycGMvY29uZmlncy9nNV9kZWZjb25maWc9MjA1PUNPTkZJR19YRlNfUE9TSVhfQUNMPXlcbmFyY2gvcG93ZXJwYy9jb25maWdzL2c1X2RlZmNvbmZpZzoyMDY6Q09ORklHX0ZTX0RBWD15XG5hcmNoL3Bvd2VycGMvY29uZmlncy9nNV9kZWZjb25maWctMjA3LUNPTkZJR19JU085NjYwX0ZTPXlcbi0tXG5hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM1MTJ4X2RlZmNvbmZpZz0xMDU9Q09ORklHX0VYVDRfRlM9eVxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjNTEyeF9kZWZjb25maWc6MTA2OkNPTkZJR19GU19EQVg9eVxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjNTEyeF9kZWZjb25maWctMTA3LSMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldFxuLS1cbmFyY2gvcG93ZXJwYy9jb25maWdzL3BwYzY0X2RlZmNvbmZpZz0zMjI9Q09ORklHX05JTEZTMl9GUz1tXG5hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2NF9kZWZjb25maWc6MzIzOkNPTkZJR19GU19EQVg9eVxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNjRfZGVmY29uZmlnLTMyNC1DT05GSUdfQVVUT0ZTX0ZTPW1cbi0tXG5hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2NGVfZGVmY29uZmlnPTE3OT1DT05GSUdfWEZTX1BPU0lYX0FDTD15XG5hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2NGVfZGVmY29uZmlnOjE4MDpDT05GSUdfRlNfREFYPXlcbmFyY2gvcG93ZXJwYy9jb25maWdzL3BwYzY0ZV9kZWZjb25maWctMTgxLUNPTkZJR19BVVRPRlNfRlM9bVxuLS1cbmFyY2gvcG93ZXJwYy9jb25maWdzL3BwYzZ4eF9kZWZjb25maWc9OTMyPUNPTkZJR19HRlMyX0ZTPW1cbmFyY2gvcG93ZXJwYy9jb25maWdzL3BwYzZ4eF9kZWZjb25maWc6OTMzOkNPTkZJR19GU19EQVg9eVxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNnh4X2RlZmNvbmZpZy05MzQtQ09ORklHX1FVT1RBX05FVExJTktfSU5URVJGQUNFPXlcbi0tXG5kcml2ZXJzL2RheC9zdXBlci5jPTU2PUVYUE9SVF9TWU1CT0xfR1BMKGRheF9yZWFkX3VubG9jayk7XG5kcml2ZXJzL2RheC9zdXBlci5jLTU3LVxuZHJpdmVycy9kYXgvc3VwZXIuYzo1ODojaWYgZGVmaW5lZChDT05GSUdfQkxPQ0spIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19GU19EQVgpXG5kcml2ZXJzL2RheC9zdXBlci5jLTU5LSNpbmNsdWRlIFx1MDAzY2xpbnV4L2Jsa2Rldi5oXHUwMDNlXG4tLVxuZHJpdmVycy9kYXgvc3VwZXIuYz0xMTM9RVhQT1JUX1NZTUJPTF9HUEwoZnNfZGF4X2dldF9ieV9iZGV2KTtcbmRyaXZlcnMvZGF4L3N1cGVyLmMtMTE0LVxuZHJpdmVycy9kYXgvc3VwZXIuYzoxMTU6I2VuZGlmIC8qIENPTkZJR19CTE9DSyBcdTAwMjZcdTAwMjYgQ09ORklHX0ZTX0RBWCAqL1xuZHJpdmVycy9kYXgvc3VwZXIuYy0xMTYtXG5kcml2ZXJzL2RheC9zdXBlci5jOjExNzojaWYgSVNfRU5BQkxFRChDT05GSUdfRlNfREFYKVxuZHJpdmVycy9kYXgvc3VwZXIuYy0xMTgtXG4tLVxuZHJpdmVycy9kYXgvc3VwZXIuYz0xODU9RVhQT1JUX1NZTUJPTF9HUEwoZnNfZGF4X2dldCk7XG5kcml2ZXJzL2RheC9zdXBlci5jOjE4NjojZW5kaWYgLyogQ09ORklHX0ZTX0RBWCAqL1xuZHJpdmVycy9kYXgvc3VwZXIuYy0xODctXG4tLVxuZHJpdmVycy9tZC9kbS1saW5lYXIuYz0xNTM9c3RhdGljIGludCBsaW5lYXJfaXRlcmF0ZV9kZXZpY2VzKHN0cnVjdCBkbV90YXJnZXQgKnRpLFxuLS1cbmRyaXZlcnMvbWQvZG0tbGluZWFyLmMtMTYwLVxuZHJpdmVycy9tZC9kbS1saW5lYXIuYzoxNjE6I2lmIElTX0VOQUJMRUQoQ09ORklHX0ZTX0RBWClcbmRyaXZlcnMvbWQvZG0tbGluZWFyLmMtMTYyLXN0YXRpYyBzdHJ1Y3QgZGF4X2RldmljZSAqbGluZWFyX2RheF9wZ29mZihzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSwgcGdvZmZfdCAqcGdvZmYpXG4tLVxuZHJpdmVycy9tZC9kbS1sb2ctd3JpdGVzLmM9ODcwPXN0YXRpYyB2b2lkIGxvZ193cml0ZXNfaW9faGludHMoc3RydWN0IGRtX3RhcmdldCAqdGksIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbWl0cylcbi0tXG5kcml2ZXJzL21kL2RtLWxvZy13cml0ZXMuYy04ODQtXG5kcml2ZXJzL21kL2RtLWxvZy13cml0ZXMuYzo4ODU6I2lmIElTX0VOQUJMRUQoQ09ORklHX0ZTX0RBWClcbmRyaXZlcnMvbWQvZG0tbG9nLXdyaXRlcy5jLTg4Ni1zdGF0aWMgc3RydWN0IGRheF9kZXZpY2UgKmxvZ193cml0ZXNfZGF4X3Bnb2ZmKHN0cnVjdCBkbV90YXJnZXQgKnRpLFxuLS1cbmRyaXZlcnMvbWQvZG0tc3RyaXBlLmM9MjcyPWludCBzdHJpcGVfbWFwKHN0cnVjdCBkbV90YXJnZXQgKnRpLCBzdHJ1Y3QgYmlvICpiaW8pXG4tLVxuZHJpdmVycy9tZC9kbS1zdHJpcGUuYy0zMDAtXG5kcml2ZXJzL21kL2RtLXN0cmlwZS5jOjMwMTojaWYgSVNfRU5BQkxFRChDT05GSUdfRlNfREFYKVxuZHJpdmVycy9tZC9kbS1zdHJpcGUuYy0zMDItc3RhdGljIHN0cnVjdCBkYXhfZGV2aWNlICpzdHJpcGVfZGF4X3Bnb2ZmKHN0cnVjdCBkbV90YXJnZXQgKnRpLCBwZ29mZl90ICpwZ29mZilcbi0tXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYy0zOS1cbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jOjQwOiNpZiBJU19FTkFCTEVEKENPTkZJR19BUkNIX0hBU19QTUVNX0FQSSkgXHUwMDI2XHUwMDI2IElTX0VOQUJMRUQoQ09ORklHX0ZTX0RBWClcbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jLTQxLSNkZWZpbmUgRE1fV1JJVEVDQUNIRV9IQVNfUE1FTVxuLS1cbmZzL01ha2VmaWxlPTMxPW9iai0kKENPTkZJR19BSU8pICAgICAgICAgICAgICAgJiM0Mzs9IGFpby5vXG5mcy9NYWtlZmlsZTozMjpvYmotJChDT05GSUdfRlNfREFYKVx0XHQmIzQzOz0gZGF4Lm9cbmZzL01ha2VmaWxlLTMzLW9iai0kKENPTkZJR19GU19FTkNSWVBUSU9OKVx0JiM0Mzs9IGNyeXB0by9cbi0tXG5mcy9kYXguYz0xMzk1PXN0YXRpYyB2bV9mYXVsdF90IGRheF9sb2FkX2hvbGUoc3RydWN0IHhhX3N0YXRlICp4YXMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuLS1cbmZzL2RheC5jLTE0MDktXG5mcy9kYXguYzoxNDEwOiNpZmRlZiBDT05GSUdfRlNfREFYX1BNRFxuZnMvZGF4LmMtMTQxMS1zdGF0aWMgdm1fZmF1bHRfdCBkYXhfcG1kX2xvYWRfaG9sZShzdHJ1Y3QgeGFfc3RhdGUgKnhhcywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4tLVxuZnMvZGF4LmM9MTQzNT1zdGF0aWMgdm1fZmF1bHRfdCBkYXhfcG1kX2xvYWRfaG9sZShzdHJ1Y3QgeGFfc3RhdGUgKnhhcywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4tLVxuZnMvZGF4LmMtMTQzOS19XG5mcy9kYXguYzoxNDQwOiNlbmRpZiAvKiBDT05GSUdfRlNfREFYX1BNRCAqL1xuZnMvZGF4LmMtMTQ0MS1cbi0tXG5mcy9kYXguYz0xODk5PXN0YXRpYyB2bV9mYXVsdF90IGRheF9pb21hcF9wdGVfZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYsIHVuc2lnbmVkIGxvbmcgKnBmbnAsXG4tLVxuZnMvZGF4LmMtMTk3NC1cbmZzL2RheC5jOjE5NzU6I2lmZGVmIENPTkZJR19GU19EQVhfUE1EXG5mcy9kYXguYy0xOTc2LXN0YXRpYyBib29sIGRheF9mYXVsdF9jaGVja19mYWxsYmFjayhzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgc3RydWN0IHhhX3N0YXRlICp4YXMsXG4tLVxuZnMvZGF4LmM9MjA4OD1zdGF0aWMgdm1fZmF1bHRfdCBkYXhfaW9tYXBfcG1kX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mLCB1bnNpZ25lZCBsb25nICpwZm5wLFxuLS1cbmZzL2RheC5jLTIwOTItfVxuZnMvZGF4LmM6MjA5MzojZW5kaWYgLyogQ09ORklHX0ZTX0RBWF9QTUQgKi9cbmZzL2RheC5jLTIwOTQtXG4tLVxuZnMvZGF4LmM9MjEzMD1zdGF0aWMgdm1fZmF1bHRfdCBkYXhfaW5zZXJ0X3Bmbl9ta3dyaXRlKHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuLS1cbmZzL2RheC5jLTIxNTYtXHRcdHJldCA9IHZtZl9pbnNlcnRfcGFnZV9ta3dyaXRlKHZtZiwgXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSwgdHJ1ZSk7XG5mcy9kYXguYzoyMTU3OiNpZmRlZiBDT05GSUdfRlNfREFYX1BNRFxuZnMvZGF4LmMtMjE1OC1cdGVsc2UgaWYgKG9yZGVyID09IFBNRF9PUkRFUilcbi0tXG5mcy9lcm9mcy9kYXRhLmM9NDM2PXN0YXRpYyBzc2l6ZV90IGVyb2ZzX2ZpbGVfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcbi0tXG5mcy9lcm9mcy9kYXRhLmMtNDQzLVxuZnMvZXJvZnMvZGF0YS5jOjQ0NDpcdGlmIChJU19FTkFCTEVEKENPTkZJR19GU19EQVgpIFx1MDAyNlx1MDAyNiBJU19EQVgoaW5vZGUpKVxuZnMvZXJvZnMvZGF0YS5jLTQ0NS1cdFx0cmV0dXJuIGRheF9pb21hcF9ydyhpb2NiLCB0bywgXHUwMDI2ZXJvZnNfaW9tYXBfb3BzKTtcbi0tXG5mcy9lcm9mcy9kYXRhLmM9NDU5PWNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgZXJvZnNfYW9wcyA9IHtcbi0tXG5mcy9lcm9mcy9kYXRhLmMtNDY3LVxuZnMvZXJvZnMvZGF0YS5jOjQ2ODojaWZkZWYgQ09ORklHX0ZTX0RBWFxuZnMvZXJvZnMvZGF0YS5jLTQ2OS1zdGF0aWMgdm1fZmF1bHRfdCBlcm9mc19kYXhfaHVnZV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbi0tXG5mcy9lcm9mcy9zdXBlci5jPTQyOT1zdGF0aWMgYm9vbCBlcm9mc19mY19zZXRfZGF4X21vZGUoc3RydWN0IGZzX2NvbnRleHQgKmZjLCB1bnNpZ25lZCBpbnQgbW9kZSlcbmZzL2Vyb2ZzL3N1cGVyLmMtNDMwLXtcbmZzL2Vyb2ZzL3N1cGVyLmM6NDMxOlx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0ZTX0RBWCkpIHtcbmZzL2Vyb2ZzL3N1cGVyLmMtNDMyLVx0XHRzdHJ1Y3QgZXJvZnNfc2JfaW5mbyAqc2JpID0gZmMtXHUwMDNlc19mc19pbmZvO1xuLS1cbmZzL2V4dDQvZXh0NC5oPTEwMzA9c3RydWN0IGV4dDRfaW5vZGVfaW5mbyB7XG4tLVxuZnMvZXh0NC9leHQ0LmgtMTIyNC0jZGVmaW5lIEVYVDRfTU9VTlRfTk9MT0FEXHRcdDB4MDAxMDBcdC8qIERvbiYjMzk7dCB1c2UgZXhpc3Rpbmcgam91cm5hbCovXG5mcy9leHQ0L2V4dDQuaDoxMjI1OiNpZmRlZiBDT05GSUdfRlNfREFYXG5mcy9leHQ0L2V4dDQuaC0xMjI2LSNkZWZpbmUgRVhUNF9NT1VOVF9EQVhfQUxXQVlTXHRcdDB4MDAyMDBcdC8qIERpcmVjdCBBY2Nlc3MgKi9cbi0tXG5mcy9leHQ0L2ZpbGUuYz02OT1zdGF0aWMgc3NpemVfdCBleHQ0X2Rpb19yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKnRvKVxuLS1cbmZzL2V4dDQvZmlsZS5jLTEwMC1cbmZzL2V4dDQvZmlsZS5jOjEwMTojaWZkZWYgQ09ORklHX0ZTX0RBWFxuZnMvZXh0NC9maWxlLmMtMTAyLXN0YXRpYyBzc2l6ZV90IGV4dDRfZGF4X3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXG4tLVxuZnMvZXh0NC9maWxlLmM9MTMwPXN0YXRpYyBzc2l6ZV90IGV4dDRfZmlsZV9yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKnRvKVxuLS1cbmZzL2V4dDQvZmlsZS5jLTEzOS1cbmZzL2V4dDQvZmlsZS5jOjE0MDojaWZkZWYgQ09ORklHX0ZTX0RBWFxuZnMvZXh0NC9maWxlLmMtMTQxLVx0aWYgKElTX0RBWChpbm9kZSkpXG4tLVxuZnMvZXh0NC9maWxlLmM9NTc4PXN0YXRpYyBzc2l6ZV90IGV4dDRfZGlvX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG4tLVxuZnMvZXh0NC9maWxlLmMtNzA3LVxuZnMvZXh0NC9maWxlLmM6NzA4OiNpZmRlZiBDT05GSUdfRlNfREFYXG5mcy9leHQ0L2ZpbGUuYy03MDktc3RhdGljIHNzaXplX3Rcbi0tXG5mcy9leHQ0L2ZpbGUuYz03NzA9ZXh0NF9maWxlX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG4tLVxuZnMvZXh0NC9maWxlLmMtNzc4LVxuZnMvZXh0NC9maWxlLmM6Nzc5OiNpZmRlZiBDT05GSUdfRlNfREFYXG5mcy9leHQ0L2ZpbGUuYy03ODAtXHRpZiAoSVNfREFYKGlub2RlKSlcbi0tXG5mcy9leHQ0L2ZpbGUuYy04MDEtXG5mcy9leHQ0L2ZpbGUuYzo4MDI6I2lmZGVmIENPTkZJR19GU19EQVhcbmZzL2V4dDQvZmlsZS5jLTgwMy1zdGF0aWMgdm1fZmF1bHRfdCBleHQ0X2RheF9odWdlX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4tLVxuZnMvZXh0NC9zdXBlci5jPTIxNjg9c3RhdGljIGludCBleHQ0X3BhcnNlX3BhcmFtKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IGZzX3BhcmFtZXRlciAqcGFyYW0pXG4tLVxuZnMvZXh0NC9zdXBlci5jLTIzNjktXHRjYXNlIE9wdF9kYXhfdHlwZTpcbmZzL2V4dDQvc3VwZXIuYzoyMzcwOiNpZmRlZiBDT05GSUdfRlNfREFYXG5mcy9leHQ0L3N1cGVyLmMtMjM3MS1cdHtcbi0tXG5mcy94ZnMvTWFrZWZpbGU9MTU0PWlmZXEgKCQoQ09ORklHX01FTU9SWV9GQUlMVVJFKSx5KVxuZnMveGZzL01ha2VmaWxlOjE1NTp4ZnMtJChDT05GSUdfRlNfREFYKVx0XHQmIzQzOz0geGZzX25vdGlmeV9mYWlsdXJlLm9cbmZzL3hmcy9NYWtlZmlsZS0xNTYtZW5kaWZcbi0tXG5mcy94ZnMveGZzX2J1Zi5jPTE3Mjk9eGZzX2FsbG9jX2J1ZnRhcmcoXG4tLVxuZnMveGZzL3hmc19idWYuYy0xNzM3LVxuZnMveGZzL3hmc19idWYuYzoxNzM4OiNpZiBkZWZpbmVkKENPTkZJR19GU19EQVgpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19NRU1PUllfRkFJTFVSRSlcbmZzL3hmcy94ZnNfYnVmLmMtMTczOS1cdG9wcyA9IFx1MDAyNnhmc19kYXhfaG9sZGVyX29wZXJhdGlvbnM7XG4tLVxuZnMveGZzL3hmc19maWxlLmM9MTg3Mj14ZnNfZGF4X2ZhdWx0X2xvY2tlZChcbi0tXG5mcy94ZnMveGZzX2ZpbGUuYy0xODc5LVxuZnMveGZzL3hmc19maWxlLmM6MTg4MDpcdGlmICghSVNfRU5BQkxFRChDT05GSUdfRlNfREFYKSkge1xuZnMveGZzL3hmc19maWxlLmMtMTg4MS1cdFx0QVNTRVJUKDApO1xuLS1cbmZzL3hmcy94ZnNfaW9wcy5jPTEzNjQ9eGZzX2lub2RlX3Nob3VsZF9lbmFibGVfZGF4KFxuLS1cbmZzL3hmcy94ZnNfaW9wcy5jLTEzNjYte1xuZnMveGZzL3hmc19pb3BzLmM6MTM2NzpcdGlmICghSVNfRU5BQkxFRChDT05GSUdfRlNfREFYKSlcbmZzL3hmcy94ZnNfaW9wcy5jLTEzNjgtXHRcdHJldHVybiBmYWxzZTtcbi0tXG5mcy94ZnMveGZzX3N1cGVyLmM9MTQwND14ZnNfZnNfcGFyc2VfcGFyYW0oXG4tLVxuZnMveGZzL3hmc19zdXBlci5jLTE1MzQtXHRcdHJldHVybiAwO1xuZnMveGZzL3hmc19zdXBlci5jOjE1MzU6I2lmZGVmIENPTkZJR19GU19EQVhcbmZzL3hmcy94ZnNfc3VwZXIuYy0xNTM2LVx0Y2FzZSBPcHRfZGF4OlxuLS1cbmluY2x1ZGUvbGludXgvZGF4Lmg9MTI4PXN0cnVjdCB3cml0ZWJhY2tfY29udHJvbDtcbmluY2x1ZGUvbGludXgvZGF4Lmg6MTI5OiNpZiBkZWZpbmVkKENPTkZJR19CTE9DSykgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0ZTX0RBWClcbmluY2x1ZGUvbGludXgvZGF4LmgtMTMwLWludCBkYXhfYWRkX2hvc3Qoc3RydWN0IGRheF9kZXZpY2UgKmRheF9kZXYsIHN0cnVjdCBnZW5kaXNrICpkaXNrKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2RheC5oPTE0Mj1zdGF0aWMgaW5saW5lIHN0cnVjdCBkYXhfZGV2aWNlICpmc19kYXhfZ2V0X2J5X2JkZXYoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldixcbi0tXG5pbmNsdWRlL2xpbnV4L2RheC5oLTE0Ny19XG5pbmNsdWRlL2xpbnV4L2RheC5oOjE0ODojZW5kaWYgLyogQ09ORklHX0JMT0NLIFx1MDAyNlx1MDAyNiBDT05GSUdfRlNfREFYICovXG5pbmNsdWRlL2xpbnV4L2RheC5oLTE0OS1cbmluY2x1ZGUvbGludXgvZGF4Lmg6MTUwOiNpZiBJU19FTkFCTEVEKENPTkZJR19GU19EQVgpXG5pbmNsdWRlL2xpbnV4L2RheC5oLTE1MS12b2lkIGZzX3B1dF9kYXgoc3RydWN0IGRheF9kZXZpY2UgKmRheF9kZXYsIHZvaWQgKmhvbGRlcik7XG4tLVxuaW5jbHVkZS9saW51eC9kYXguaD0yMzY9c3RhdGljIGlubGluZSB2b2lkIGRheF9yZWFkX3VubG9jayhpbnQgaWQpXG4tLVxuaW5jbHVkZS9saW51eC9kYXguaC0yNDAtXG5pbmNsdWRlL2xpbnV4L2RheC5oOjI0MTojaWYgIUlTX0VOQUJMRUQoQ09ORklHX0ZTX0RBWClcbmluY2x1ZGUvbGludXgvZGF4LmgtMjQyLXN0YXRpYyBpbmxpbmUgaW50IF9fbXVzdF9jaGVjayBkYXhfYnJlYWtfbGF5b3V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuaW5jbHVkZS9saW51eC9mcy5oPTIwOTY9ZXh0ZXJuIGxvZmZfdCB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Vfb25lKHN0cnVjdCBmaWxlICpzcmNfZmlsZSwgbG9mZl90IHNyY19wb3MsXG4tLVxuaW5jbHVkZS9saW51eC9mcy5oLTIxMTUtI2RlZmluZSBTX05PU0VDXHRcdCgxIFx1MDAzY1x1MDAzYyAxMikgLyogbm8gc3VpZCBvciB4YXR0ciBzZWN1cml0eSBhdHRyaWJ1dGVzICovXG5pbmNsdWRlL2xpbnV4L2ZzLmg6MjExNjojaWZkZWYgQ09ORklHX0ZTX0RBWFxuaW5jbHVkZS9saW51eC9mcy5oLTIxMTctI2RlZmluZSBTX0RBWFx0XHQoMSBcdTAwM2NcdTAwM2MgMTMpIC8qIERpcmVjdCBBY2Nlc3MsIGF2b2lkaW5nIHRoZSBwYWdlIGNhY2hlICovXG4tLVxuaW5jbHVkZS9saW51eC9mcy5oPTMzOTk9c3RhdGljIGlubGluZSBib29sIHZtYV9pc19mc2RheChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMzQwMi1cbmluY2x1ZGUvbGludXgvZnMuaDozNDAzOlx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19GU19EQVgpIHx8ICF2bWEtXHUwMDNldm1fZmlsZSlcbmluY2x1ZGUvbGludXgvZnMuaC0zNDA0LVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxuaW5jbHVkZS9saW51eC9pb21hcC5oPTE2Mj1zdHJ1Y3QgaW9tYXBfd3JpdGVfb3BzIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2lvbWFwLmgtMjA2LSNkZWZpbmUgSU9NQVBfVU5TSEFSRVx0XHQoMSBcdTAwM2NcdTAwM2MgNykgLyogdW5zaGFyZV9maWxlX3JhbmdlICovXG5pbmNsdWRlL2xpbnV4L2lvbWFwLmg6MjA3OiNpZmRlZiBDT05GSUdfRlNfREFYXG5pbmNsdWRlL2xpbnV4L2lvbWFwLmgtMjA4LSNkZWZpbmUgSU9NQVBfREFYXHRcdCgxIFx1MDAzY1x1MDAzYyA4KSAvKiBEQVggbWFwcGluZyAqL1xuLS1cbmluY2x1ZGUvbGludXgvaW9tYXAuaC0yMTAtI2RlZmluZSBJT01BUF9EQVhcdFx0MFxuaW5jbHVkZS9saW51eC9pb21hcC5oOjIxMTojZW5kaWYgLyogQ09ORklHX0ZTX0RBWCAqL1xuaW5jbHVkZS9saW51eC9pb21hcC5oLTIxMi0jZGVmaW5lIElPTUFQX0FUT01JQ1x0XHQoMSBcdTAwM2NcdTAwM2MgOSkgLyogdG9ybi13cml0ZSBwcm90ZWN0aW9uICovXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz01ODM9c3RhdGljIHZvaWQgY29sbGVjdF9wcm9jc19maWxlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy02MTktXG5tbS9tZW1vcnktZmFpbHVyZS5jOjYyMDojaWZkZWYgQ09ORklHX0ZTX0RBWFxubW0vbWVtb3J5LWZhaWx1cmUuYy02MjEtc3RhdGljIHZvaWQgYWRkX3RvX2tpbGxfZnNkYXgoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIGNvbnN0IHN0cnVjdCBwYWdlICpwLFxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmM9NjMyPXN0YXRpYyB2b2lkIGNvbGxlY3RfcHJvY3NfZnNkYXgoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UsXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy02NjAtfVxubW0vbWVtb3J5LWZhaWx1cmUuYzo2NjE6I2VuZGlmIC8qIENPTkZJR19GU19EQVggKi9cbm1tL21lbW9yeS1mYWlsdXJlLmMtNjYyLVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmM9MTcxOD1zdGF0aWMgaW50IG1mX2dlbmVyaWNfa2lsbF9wcm9jcyh1bnNpZ25lZCBsb25nIGxvbmcgcGZuLCBpbnQgZmxhZ3MsXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0xNzc1LVxubW0vbWVtb3J5LWZhaWx1cmUuYzoxNzc2OiNpZmRlZiBDT05GSUdfRlNfREFYXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE3NzctLyoqXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0xODE4PUVYUE9SVF9TWU1CT0xfR1BMKG1mX2RheF9raWxsX3Byb2NzKTtcbm1tL21lbW9yeS1mYWlsdXJlLmM6MTgxOTojZW5kaWYgLyogQ09ORklHX0ZTX0RBWCAqL1xubW0vbWVtb3J5LWZhaWx1cmUuYy0xODIwLVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Zzb2NrL2NvbmZpZz0xMDc9Q09ORklHX0RBWF9EUklWRVI9eVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdnNvY2svY29uZmlnOjEwODpDT05GSUdfRlNfREFYPXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Zzb2NrL2NvbmZpZy0xMDktQ09ORklHX01FTU9SWV9IT1RQTFVHPXlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDk6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgxNTMKCQkJCQkJCW91dHB1dDogMjE4CgkJCQkJCQl0aG91Z2h0czogMTYxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBTZWxlY3Rpb246IGV4dDQgRGlyZWN0IEkvTyBhbmQgREFYIFdyaXRlIFBhdGhzKioKCkFscmlnaHQsIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGZ1enppbmcgdGFyZ2V0cyBmb3IgdGhpcyBleHQ0IHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgYENPTkZJR19GU19EQVhgIGlzIHJlbGV2YW50LCBhbmQgeWVzLCBpdCBzZWVtcyBzby4gRGl2aW5nIGRlZXBlciwgSSBzZWUgYSBzbGV3IG9mIHN0YXRpYyBmdW5jdGlvbnMgYmVpbmcgbW9kaWZpZWQgb3IgY2VudHJhbCB0byB0aGUgRGlyZWN0IEkvTyBhbmQgREFYIHdyaXRlIHBhdGhzLiBUaGVzZSBhcmUgd2hlcmUgdGhlIGludGVyZXN0aW5nIGNoYW5nZXMgYXJlLgoKRmlyc3QsIEkgY29uZmlybSBgZXh0NF9kaW9fbmVlZHNfemVyb2luZ2AgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCBnaXZlbiB0aGUgcGF0Y2gmIzM5O3MgZm9jdXMgb24gcGFydGlhbCBibG9jayB6ZXJvaW5nLiBOZXh0LCBgZXh0NF9kaW9fd3JpdGVfY2hlY2tzYCBzZWVtcyBjcnVjaWFsLCBhbmQgd2hpbGUgSSBpbml0aWFsbHkgdGhvdWdodCBpdHMgc2lnbmF0dXJlIG1pZ2h0IGNoYW5nZSwgdGhlIGRpZmYgY29uZmlybXMgaXQgcmVtYWlucyB0aGUgc2FtZSwgYnV0IHRoZSBpbnRlcm5hbCBsb2dpYyBpcyBtb2RpZmllZC4gIGBleHQ0X2J1ZmZlcmVkX3dyaXRlX2l0ZXJgIGlzIGxpa2VseSBhbHNvIHRvdWNoZWQgYnkgdGhpcy4gQW5kIHRoZSBzYW1lIHRoaW5nIGZvciBgZXh0NF9kYXhfd3JpdGVfaXRlcmAuIEkgYWxzbyBuZWVkIHRvIG1ha2Ugc3VyZSBgZXh0NF9pb21hcF9iZWdpbmAgYW5kIGBleHQ0X2lvbWFwX2FsbG9jYCBhcmUgaW5jbHVkZWQuIGBleHQ0X21hcF9ibG9ja3NgIGlzIGludm9sdmVkLCBidXQgaXQmIzM5O3MgdXNlZCAqc28qIGJyb2FkbHkgaW4gZXh0NCB0aGF0IEkmIzM5O20gZ29pbmcgdG8gb21pdCBpdCB0byBhdm9pZCBza2V3aW5nIHRoZSBmdXp6aW5nIGRpc3RyaWJ1dGlvbi4KClRoZXJlZm9yZSwgdGhlIGZ1bmN0aW9ucyBJJiMzOTttIGdvaW5nIHRvIGluY2x1ZGUgYXJlOgoKKiAgIGBleHQ0X2Rpb19uZWVkc196ZXJvaW5nYAoqICAgYGV4dDRfZGlvX3dyaXRlX2NoZWNrc2AKKiAgIGBleHQ0X2J1ZmZlcmVkX3dyaXRlX2l0ZXJgCiogICBgZXh0NF9kYXhfd3JpdGVfaXRlcmAKKiAgIGBleHQ0X2lvbWFwX2JlZ2luYAoqICAgYGV4dDRfaW9tYXBfYWxsb2NgCgpUaGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgd2lsbCBiZTogYEVYVDRfRlNgIGFuZCBgRlNfREFYYC4KClRoZSBjb3JlIHJhdGlvbmFsZSBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBEaXJlY3QgSS9PIGFuZCBEQVggd3JpdGUgcGF0aHMgaW4gZXh0NC4gSXQgaW5jbHVkZXMgcGFydGlhbCBibG9jayB6ZXJvaW5nIGFuZCBsb2NraW5nIGNoYW5nZXMgZm9yIHVuYWxpZ25lZCBESU8gd3JpdGVzLiBUaGVzZSBjaG9zZW4gZnVuY3Rpb25zIHJlcHJlc2VudCB0aGUgY29yZSBsb2dpYyBjaGFuZ2VzIGFuZCBhcmUgbGlrZWx5IGNhbmRpZGF0ZXMgZm9yIGludHJvZHVjaW5nIGJ1Z3MgaW4gdGhlIG5ld2x5IG1vZGlmaWVkIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA5OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFWFQ0X0ZTJiMzNDssCiAgICAmIzM0O0ZTX0RBWCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V4dDRfZGlvX25lZWRzX3plcm9pbmcmIzM0OywKICAgICYjMzQ7ZXh0NF9kaW9fd3JpdGVfY2hlY2tzJiMzNDssCiAgICAmIzM0O2V4dDRfYnVmZmVyZWRfd3JpdGVfaXRlciYjMzQ7LAogICAgJiMzNDtleHQ0X2RheF93cml0ZV9pdGVyJiMzNDssCiAgICAmIzM0O2V4dDRfaW9tYXBfYmVnaW4mIzM0OywKICAgICYjMzQ7ZXh0NF9pb21hcF9hbGxvYyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBleHQ0IERpcmVjdCBJL08gYW5kIERBWCB3cml0ZSBwYXRocywgc3BlY2lmaWNhbGx5IGZpeGluZyBsb2NraW5nIGFuZCBwYXJ0aWFsIGJsb2NrIHplcm9pbmcgZm9yIHVuYWxpZ25lZCBESU8gd3JpdGVzLiBJdCBpbnRyb2R1Y2VzIGBleHQ0X2Rpb19uZWVkc196ZXJvaW5nYCBhbmQgbW9kaWZpZXMgYGV4dDRfZGlvX3dyaXRlX2NoZWNrc2AsIGBleHQ0X2J1ZmZlcmVkX3dyaXRlX2l0ZXJgLCBgZXh0NF9kYXhfd3JpdGVfaXRlcmAsIGFuZCBgZXh0NF9pb21hcF9iZWdpbmAuIFRoZXNlIGFyZSBjb3JlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBleHQ0JiMzOTtzIEkvTyBoYW5kbGluZyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OywKICAgICYjMzQ7RlNfREFYJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXh0NF9kaW9fbmVlZHNfemVyb2luZyYjMzQ7LAogICAgJiMzNDtleHQ0X2Rpb193cml0ZV9jaGVja3MmIzM0OywKICAgICYjMzQ7ZXh0NF9idWZmZXJlZF93cml0ZV9pdGVyJiMzNDssCiAgICAmIzM0O2V4dDRfZGF4X3dyaXRlX2l0ZXImIzM0OywKICAgICYjMzQ7ZXh0NF9pb21hcF9iZWdpbiYjMzQ7LAogICAgJiMzNDtleHQ0X2lvbWFwX2FsbG9jJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGV4dDQgRGlyZWN0IEkvTyBhbmQgREFYIHdyaXRlIHBhdGhzLCBzcGVjaWZpY2FsbHkgZml4aW5nIGxvY2tpbmcgYW5kIHBhcnRpYWwgYmxvY2sgemVyb2luZyBmb3IgdW5hbGlnbmVkIERJTyB3cml0ZXMuIEl0IGludHJvZHVjZXMgYGV4dDRfZGlvX25lZWRzX3plcm9pbmdgIGFuZCBtb2RpZmllcyBgZXh0NF9kaW9fd3JpdGVfY2hlY2tzYCwgYGV4dDRfYnVmZmVyZWRfd3JpdGVfaXRlcmAsIGBleHQ0X2RheF93cml0ZV9pdGVyYCwgYW5kIGBleHQ0X2lvbWFwX2JlZ2luYC4gVGhlc2UgYXJlIGNvcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGV4dDQmIzM5O3MgSS9PIGhhbmRsaW5nIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA5OjA4OjE0Ljc3NzIzMjYyN1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkyMjc3NDI0MjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIixcbiAgICBcIkZTX0RBWFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV4dDRfZGlvX25lZWRzX3plcm9pbmdcIixcbiAgICBcImV4dDRfZGlvX3dyaXRlX2NoZWNrc1wiLFxuICAgIFwiZXh0NF9idWZmZXJlZF93cml0ZV9pdGVyXCIsXG4gICAgXCJleHQ0X2RheF93cml0ZV9pdGVyXCIsXG4gICAgXCJleHQ0X2lvbWFwX2JlZ2luXCIsXG4gICAgXCJleHQ0X2lvbWFwX2FsbG9jXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZXh0NCBEaXJlY3QgSS9PIGFuZCBEQVggd3JpdGUgcGF0aHMsIHNwZWNpZmljYWxseSBmaXhpbmcgbG9ja2luZyBhbmQgcGFydGlhbCBibG9jayB6ZXJvaW5nIGZvciB1bmFsaWduZWQgRElPIHdyaXRlcy4gSXQgaW50cm9kdWNlcyBgZXh0NF9kaW9fbmVlZHNfemVyb2luZ2AgYW5kIG1vZGlmaWVzIGBleHQ0X2Rpb193cml0ZV9jaGVja3NgLCBgZXh0NF9idWZmZXJlZF93cml0ZV9pdGVyYCwgYGV4dDRfZGF4X3dyaXRlX2l0ZXJgLCBhbmQgYGV4dDRfaW9tYXBfYmVnaW5gLiBUaGVzZSBhcmUgY29yZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gZXh0NCdzIEkvTyBoYW5kbGluZyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA5OjA4OjE0Ljc3NzIzNzczN1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njc3MjYzNDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYzExODllNzc2ZDkxNjM5NjI4MDg3NWYxN2I0YTkzOWM0NDlkNmQwN1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEp1biAyNiAwOTowODoxMyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9leHQ0L2ZpbGUuYyBiL2ZzL2V4dDQvZmlsZS5jXFxuaW5kZXggZWIxYTMyMzk2MmIxMDEuLjYxMGUxMDlmY2QzNjI1IDEwMDY0NFxcbi0tLSBhL2ZzL2V4dDQvZmlsZS5jXFxuKysrIGIvZnMvZXh0NC9maWxlLmNcXG5AQCAtMjEzLDMxICsyMTMsNjUgQEAgZXh0NF9leHRlbmRpbmdfaW8oc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCwgc2l6ZV90IGxlbilcXG4gXFx0cmV0dXJuIGZhbHNlO1xcbiB9XFxuIFxcbi0vKiBJcyBJTyBvdmVyd3JpdGluZyBhbGxvY2F0ZWQgb3IgaW5pdGlhbGl6ZWQgYmxvY2tzPyAqL1xcbi1zdGF0aWMgYm9vbCBleHQ0X292ZXJ3cml0ZV9pbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi1cXHRcXHRcXHQgICAgICBsb2ZmX3QgcG9zLCBsb2ZmX3QgbGVuLCBib29sICp1bndyaXR0ZW4pXFxuKy8qXFxuKyAqIERvZXMgYW4gdW5hbGlnbmVkIERJTyB3cml0ZSByZXF1aXJlIHBhcnRpYWwgYmxvY2sgemVyb2luZz9cXG4rICpcXG4rICogUGFydGlhbCBibG9jayB6ZXJvaW5nIGlzIHBlcmZvcm1lZCBvbmx5IGZvciB0aGUgaGVhZCBhbmQgdGFpbCBibG9ja3NcXG4rICogd2hlbiB0aGV5IGFyZSBwYXJ0aWFsbHkgY292ZXJlZCBieSB0aGUgd3JpdGUgYW5kIHRoZSB1bmRlcmx5aW5nIGV4dGVudFxcbisgKiBpcyBhIGhvbGUgb3IgdW53cml0dGVuLiBNaWRkbGUgYmxvY2tzIChmdWxseSBjb3ZlcmVkIGJ5IHRoZSB3cml0ZSlcXG4rICogYXJlIHdyaXR0ZW4gYXMgd2hvbGUgYmxvY2tzIHdpdGhvdXQgemVyb2luZy5cXG4rICpcXG4rICogV2hlbiB6ZXJvaW5nIGlzIHJlcXVpcmVkLCB0d28gY29uY3VycmVudCB1bmFsaWduZWQgRElPIHdyaXRlcyB0byB0aGVcXG4rICogc2FtZSBwYXJ0aWFsIGJsb2NrIGNhbiByYWNlIGFuZCBjb3JydXB0IGVhY2ggb3RoZXIncyBkYXRhLCBzbyB0aGVcXG4rICogY2FsbGVyIG11c3QgdGFrZSB0aGUgZXhjbHVzaXZlIGlfcndzZW0gYW5kIGRyYWluIGluLWZsaWdodCBESU8uIFdoZW5cXG4rICogemVyb2luZyBpcyBub3QgcmVxdWlyZWQsIHNoYXJlZCBsb2NrIGlzIHNhZmUgLS0gYmxvY2sgYWxsb2NhdGlvbiBhbmRcXG4rICogdW53cml0dGVuIGNvbnZlcnNpb24gZm9yIG1pZGRsZSBibG9ja3MgYXJlIHByb3RlY3RlZCBieSBpX2RhdGFfc2VtXFxuKyAqIGFuZCBpbm9kZV9kaW9fYmVnaW4oKS5cXG4rICovXFxuK3N0YXRpYyBib29sIGV4dDRfZGlvX25lZWRzX3plcm9pbmcoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHBvcywgbG9mZl90IGxlbixcXG4rXFx0XFx0XFx0XFx0ICAgYm9vbCBub3dhaXQpXFxuIHtcXG4gXFx0c3RydWN0IGV4dDRfbWFwX2Jsb2NrcyBtYXA7XFxuIFxcdHVuc2lnbmVkIGludCBibGtiaXRzID0gaW5vZGUtXFx1MDAzZWlfYmxrYml0cztcXG4tXFx0aW50IGVyciwgYmxrbGVuO1xcbitcXHR1bnNpZ25lZCBsb25nIGJsb2NrbWFzayA9IGlub2RlLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2Jsb2Nrc2l6ZSAtIDE7XFxuK1xcdGJvb2wgaGVhZF9wYXJ0aWFsLCB0YWlsX3BhcnRpYWw7XFxuK1xcdGV4dDRfbGJsa190IGhlYWRfbGJsaywgdGFpbF9sYmxrO1xcbitcXHRpbnQgZXJyO1xcbitcXHRpbnQgbWFwX2ZsYWdzID0gMDtcXG4gXFxuIFxcdGlmIChwb3MgKyBsZW4gXFx1MDAzZSBpX3NpemVfcmVhZChpbm9kZSkpXFxuLVxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcbi1cXHRtYXAubV9sYmxrID0gcG9zIFxcdTAwM2VcXHUwMDNlIGJsa2JpdHM7XFxuLVxcdG1hcC5tX2xlbiA9IEVYVDRfTUFYX0JMT0NLUyhsZW4sIHBvcywgYmxrYml0cyk7XFxuLVxcdGJsa2xlbiA9IG1hcC5tX2xlbjtcXG4rXFx0aWYgKG5vd2FpdClcXG4rXFx0XFx0bWFwX2ZsYWdzID0gRVhUNF9HRVRfQkxPQ0tTX0NBQ0hFRF9OT1dBSVQ7XFxuK1xcbitcXHRoZWFkX3BhcnRpYWwgPSAocG9zIFxcdTAwMjYgYmxvY2ttYXNrKSAhPSAwO1xcbitcXHR0YWlsX3BhcnRpYWwgPSAoKHBvcyArIGxlbikgXFx1MDAyNiBibG9ja21hc2spICE9IDA7XFxuK1xcdGhlYWRfbGJsayA9IHBvcyBcXHUwMDNlXFx1MDAzZSBibGtiaXRzO1xcbitcXHR0YWlsX2xibGsgPSAocG9zICsgbGVuIC0gMSkgXFx1MDAzZVxcdTAwM2UgYmxrYml0cztcXG4rXFxuK1xcdC8qIENoZWNrIHRoZSBoZWFkIHBhcnRpYWwgYmxvY2suICovXFxuK1xcdGlmIChoZWFkX3BhcnRpYWwpIHtcXG4rXFx0XFx0bWFwLm1fbGJsayA9IGhlYWRfbGJsaztcXG4rXFx0XFx0bWFwLm1fbGVuID0gdGFpbF9sYmxrIC0gaGVhZF9sYmxrICsgMTtcXG4rXFx0XFx0ZXJyID0gZXh0NF9tYXBfYmxvY2tzKE5VTEwsIGlub2RlLCBcXHUwMDI2bWFwLCBtYXBfZmxhZ3MpO1xcbitcXHRcXHRpZiAoZXJyIFxcdTAwM2M9IDAgfHwgIShtYXAubV9mbGFncyBcXHUwMDI2IEVYVDRfTUFQX01BUFBFRCkpXFxuK1xcdFxcdFxcdHJldHVybiB0cnVlO1xcbitcXHRcXHQvKiBJZiB0aGlzIG1hcHBpbmcgYWxyZWFkeSBjb3ZlcnMgdGhlIHRhaWwgYmxvY2ssIHdlJ3JlIGRvbmUuICovXFxuK1xcdFxcdGlmICghdGFpbF9wYXJ0aWFsIHx8IG1hcC5tX2xibGsgKyBlcnIgXFx1MDAzZSB0YWlsX2xibGspXFxuK1xcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0fVxcbiBcXG4tXFx0ZXJyID0gZXh0NF9tYXBfYmxvY2tzKE5VTEwsIGlub2RlLCBcXHUwMDI2bWFwLCAwKTtcXG4tXFx0aWYgKGVyciAhPSBibGtsZW4pXFxuLVxcdFxcdHJldHVybiBmYWxzZTtcXG4tXFx0LypcXG4tXFx0ICogJ2Vycj09bGVuJyBtZWFucyB0aGF0IGFsbCBvZiB0aGUgYmxvY2tzIGhhdmUgYmVlbiBwcmVhbGxvY2F0ZWQsXFxuLVxcdCAqIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGV5IGhhdmUgYmVlbiBpbml0aWFsaXplZCBvciBub3QuIFdlIG5lZWQgdG9cXG4tXFx0ICogY2hlY2sgbV9mbGFncyB0byBkaXN0aW5ndWlzaCB0aGUgdW53cml0dGVuIGV4dGVudHMuXFxuLVxcdCAqL1xcbi1cXHQqdW53cml0dGVuID0gIShtYXAubV9mbGFncyBcXHUwMDI2IEVYVDRfTUFQX01BUFBFRCk7XFxuLVxcdHJldHVybiB0cnVlO1xcbitcXHQvKiBDaGVjayB0aGUgdGFpbCBwYXJ0aWFsIGJsb2NrLiAqL1xcbitcXHRpZiAodGFpbF9wYXJ0aWFsKSB7XFxuK1xcdFxcdG1hcC5tX2xibGsgPSB0YWlsX2xibGs7XFxuK1xcdFxcdG1hcC5tX2xlbiA9IDE7XFxuK1xcdFxcdGVyciA9IGV4dDRfbWFwX2Jsb2NrcyhOVUxMLCBpbm9kZSwgXFx1MDAyNm1hcCwgbWFwX2ZsYWdzKTtcXG4rXFx0XFx0aWYgKGVyciBcXHUwMDNjPSAwIHx8ICEobWFwLm1fZmxhZ3MgXFx1MDAyNiBFWFQ0X01BUF9NQVBQRUQpKVxcbitcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbiB9XFxuIFxcbiBzdGF0aWMgc3NpemVfdCBleHQ0X2dlbmVyaWNfd3JpdGVfY2hlY2tzKHN0cnVjdCBraW9jYiAqaW9jYixcXG5AQCAtMjc4LDcgKzMxMiw3IEBAIHN0YXRpYyBzc2l6ZV90IGV4dDRfd3JpdGVfY2hlY2tzKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxcbiBcXHRpZiAoY291bnQgXFx1MDAzYz0gMClcXG4gXFx0XFx0cmV0dXJuIGNvdW50O1xcbiBcXG4tXFx0cmV0ID0gZmlsZV9tb2RpZmllZChpb2NiLVxcdTAwM2VraV9maWxwKTtcXG4rXFx0cmV0ID0ga2lvY2JfbW9kaWZpZWQoaW9jYik7XFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbkBAIC0zMDksNiArMzQzLDEzIEBAIHN0YXRpYyBzc2l6ZV90IGV4dDRfYnVmZmVyZWRfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsXFxuIFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gXFxuIFxcdGlub2RlX2xvY2soaW5vZGUpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogUHJldmVudCBjb25jdXJyZW50IGRpcmVjdCBJL08gYW5kIGJ1ZmZlcmVkIEkvTyB0byB0aGUgc2FtZSBmaWxlXFxuK1xcdCAqIHJhbmdlLiBXYWl0IGZvciBpbi1mbGlnaHQgRElPIHRvIGZpbmlzaCBiZWZvcmUgZGlydHlpbmcgcGFnZXMuXFxuK1xcdCAqL1xcbitcXHRpbm9kZV9kaW9fd2FpdChpbm9kZSk7XFxuK1xcbiBcXHRyZXQgPSBleHQ0X3dyaXRlX2NoZWNrcyhpb2NiLCBmcm9tKTtcXG4gXFx0aWYgKHJldCBcXHUwMDNjPSAwKVxcbiBcXHRcXHRnb3RvIG91dDtcXG5AQCAtNDI4LDE2ICs0NjksMjggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBpb21hcF9kaW9fb3BzIGV4dDRfZGlvX3dyaXRlX29wcyA9IHtcXG4gICogY29uZGl0aW9uIHJlcXVpcmVzIGFuIGV4Y2x1c2l2ZSBpbm9kZSBsb2NrLiBJZiB5ZXMsIHRoZW4gd2UgcmVzdGFydCB0aGVcXG4gICogd2hvbGUgb3BlcmF0aW9uIGJ5IHJlbGVhc2luZyB0aGUgc2hhcmVkIGxvY2sgYW5kIGFjcXVpcmluZyBleGNsdXNpdmUgbG9jay5cXG4gICpcXG4tICogLSBGb3IgdW5hbGlnbmVkX2lvIHdlIG5ldmVyIHRha2Ugc2hhcmVkIGxvY2sgYXMgaXQgbWF5IGNhdXNlIGRhdGEgY29ycnVwdGlvblxcbi0gKiAgIHdoZW4gdHdvIHVuYWxpZ25lZCBJTyB0cmllcyB0byBtb2RpZnkgdGhlIHNhbWUgYmxvY2sgZS5nLiB3aGlsZSB6ZXJvaW5nLlxcbisgKiBUaGUgZGVjaXNpb24gaXMgbGF5ZXJlZCwgZXZhbHVhdGVkIGluIHRoaXMgb3JkZXI6XFxuICAqXFxuLSAqIC0gRm9yIGV4dGVuZGluZyB3cml0ZXMgY2FzZSB3ZSBkb24ndCB0YWtlIHRoZSBzaGFyZWQgbG9jaywgc2luY2UgaXQgcmVxdWlyZXNcXG4tICogICB1cGRhdGluZyBpbm9kZSBpX2Rpc2tzaXplIGFuZC9vciBvcnBoYW4gaGFuZGxpbmcgd2l0aCBleGNsdXNpdmUgbG9jay5cXG4rICogMS4gSWYga2lvY2JfbW9kaWZpZWQoKSBuZWVkcyB0byB1cGRhdGUgc2VjdXJpdHkgaW5mbyAoIUlTX05PU0VDKSwgdXBncmFkZVxcbisgKiAgICB0byB0aGUgZXhjbHVzaXZlIGxvY2sgLS0gdGhlIHNlY3VyaXR5IHVwZGF0ZSBpdHNlbGYgcmVxdWlyZXMgaXQsXFxuKyAqICAgIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgd3JpdGUgZXh0ZW5kcyB0aGUgZmlsZSBvciBpcyBhbGlnbmVkLlxcbiAgKlxcbi0gKiAtIHNoYXJlZCBsb2NraW5nIHdpbGwgb25seSBiZSB0cnVlIG1vc3RseSB3aXRoIG92ZXJ3cml0ZXMsIGluY2x1ZGluZ1xcbi0gKiAgIGluaXRpYWxpemVkIGJsb2NrcyBhbmQgdW53cml0dGVuIGJsb2Nrcy5cXG4rICogMi4gSWYgdGhlIHdyaXRlIGV4dGVuZHMgaV9zaXplIG9yIGlfZGlza3NpemUsIHVwZ3JhZGUgdG8gdGhlIGV4Y2x1c2l2ZVxcbisgKiAgICBsb2NrIHRvIHNhZmVseSB1cGRhdGUgaV9kaXNrc2l6ZSBhbmQgdGhlIG9ycGhhbiBsaXN0LCByZWdhcmRsZXNzIG9mXFxuKyAqICAgIGFsaWdubWVudC5cXG4gICpcXG4tICogLSBPdGhlcndpc2Ugd2Ugd2lsbCBzd2l0Y2ggdG8gZXhjbHVzaXZlIGlfcndzZW0gbG9jay5cXG4rICogMy4gT3RoZXJ3aXNlLCBmb3IgYWxpZ25lZCBub24tZXh0ZW5kaW5nIHdyaXRlcywgc2hhcmVkIGxvY2sgaXMgYWx3YXlzXFxuKyAqICAgIHN1ZmZpY2llbnQgcmVnYXJkbGVzcyBvZiBleHRlbnQgc3RhdGUgKHdyaXR0ZW4sIHVud3JpdHRlbiwgb3IgaG9sZSkuXFxuKyAqICAgIHRydW5jYXRlL3B1bmNoX2hvbGUgY2Fubm90IHJ1biB3aGlsZSB3ZSBob2xkIHRoZSBzaGFyZWQgaV9yd3NlbVxcbisgKiAgICAodGhleSBuZWVkIGl0IGV4Y2x1c2l2ZWx5KTsgYWZ0ZXIgd2UgcmVsZWFzZSBpdCwgaW5vZGVfZGlvX2JlZ2luKClcXG4rICogICAga2VlcHMgdGhlaXIgaW5vZGVfZGlvX3dhaXQoKSBibG9ja2VkIHVudGlsIGluLWZsaWdodCBiaW9zIGNvbXBsZXRlLlxcbisgKiAgICBpX2RhdGFfc2VtIHNlcmlhbGl6ZXMgY29uY3VycmVudCBleHRlbnQgdHJlZSBtb2RpZmljYXRpb25zLlxcbisgKlxcbisgKiA0LiBPdGhlcndpc2UsIHRoZSB3cml0ZSBpcyB1bmFsaWduZWQgYW5kIG5vbi1leHRlbmRpbmcuIFNoYXJlZCBsb2NrIGlzXFxuKyAqICAgIHNhZmUgdW5sZXNzIHRoZSBESU8gbGF5ZXIgbmVlZHMgdG8gcGVyZm9ybSBwYXJ0aWFsIGJsb2NrIHplcm9pbmcgLS1cXG4rICogICAgaS5lLiB0aGUgaGVhZCBvciB0YWlsIHBhcnRpYWwgYmxvY2sgc2l0cyBvbiBhIGhvbGUgb3IgdW53cml0dGVuXFxuKyAqICAgIGV4dGVudC4gSW4gdGhhdCBjYXNlIHVwZ3JhZGUgdG8gdGhlIGV4Y2x1c2l2ZSBsb2NrIGFuZCBkcmFpblxcbisgKiAgICBpbi1mbGlnaHQgRElPIHRvIGF2b2lkIHJhY2VzIHdpdGggY29uY3VycmVudCBwYXJ0aWFsIGJsb2NrIHplcm9pbmcuXFxuICAqL1xcbiBzdGF0aWMgc3NpemVfdCBleHQ0X2Rpb193cml0ZV9jaGVja3Moc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXFxuIFxcdFxcdFxcdFxcdCAgICAgYm9vbCAqaWxvY2tfc2hhcmVkLCBib29sICpleHRlbmQsXFxuQEAgLTQ0OCw3ICs1MDEsNyBAQCBzdGF0aWMgc3NpemVfdCBleHQ0X2Rpb193cml0ZV9jaGVja3Moc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXFxuIFxcdGxvZmZfdCBvZmZzZXQ7XFxuIFxcdHNpemVfdCBjb3VudDtcXG4gXFx0c3NpemVfdCByZXQ7XFxuLVxcdGJvb2wgb3ZlcndyaXRlLCB1bmFsaWduZWRfaW8sIHVud3JpdHRlbjtcXG4rXFx0Ym9vbCBuZWVkc196ZXJvaW5nID0gZmFsc2U7XFxuIFxcbiByZXN0YXJ0OlxcbiBcXHRyZXQgPSBleHQ0X2dlbmVyaWNfd3JpdGVfY2hlY2tzKGlvY2IsIGZyb20pO1xcbkBAIC00NTgsMjQgKzUxMSwyMyBAQCBzdGF0aWMgc3NpemVfdCBleHQ0X2Rpb193cml0ZV9jaGVja3Moc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXFxuIFxcdG9mZnNldCA9IGlvY2ItXFx1MDAzZWtpX3BvcztcXG4gXFx0Y291bnQgPSByZXQ7XFxuIFxcbi1cXHR1bmFsaWduZWRfaW8gPSBleHQ0X3VuYWxpZ25lZF9pbyhpbm9kZSwgZnJvbSwgb2Zmc2V0KTtcXG4gXFx0KmV4dGVuZCA9IGV4dDRfZXh0ZW5kaW5nX2lvKGlub2RlLCBvZmZzZXQsIGNvdW50KTtcXG4tXFx0b3ZlcndyaXRlID0gZXh0NF9vdmVyd3JpdGVfaW8oaW5vZGUsIG9mZnNldCwgY291bnQsIFxcdTAwMjZ1bndyaXR0ZW4pO1xcbiBcXG4gXFx0LypcXG4tXFx0ICogRGV0ZXJtaW5lIHdoZXRoZXIgd2UgbmVlZCB0byB1cGdyYWRlIHRvIGFuIGV4Y2x1c2l2ZSBsb2NrLiBUaGlzIGlzXFxuLVxcdCAqIHJlcXVpcmVkIHRvIGNoYW5nZSBzZWN1cml0eSBpbmZvIGluIGZpbGVfbW9kaWZpZWQoKSwgZm9yIGV4dGVuZGluZ1xcbi1cXHQgKiBJL08sIGFueSBmb3JtIG9mIG5vbi1vdmVyd3JpdGUgSS9PLCBhbmQgdW5hbGlnbmVkIEkvTyB0byB1bndyaXR0ZW5cXG4tXFx0ICogZXh0ZW50cyAoYXMgcGFydGlhbCBibG9jayB6ZXJvaW5nIG1heSBiZSByZXF1aXJlZCkuXFxuK1xcdCAqIEZvciB1bmFsaWduZWQgd3JpdGVzLCBjaGVjayB3aGV0aGVyIHBhcnRpYWwgYmxvY2sgemVyb2luZyB3aWxsIGJlXFxuK1xcdCAqIG5lZWRlZC4gSWYgc28sIGV4Y2x1c2l2ZSBsb2NrIGlzIHJlcXVpcmVkIHRvIHNlcmlhbGl6ZSBhZ2FpbnN0XFxuK1xcdCAqIGNvbmN1cnJlbnQgRElPIHRoYXQgY291bGQgcmFjZSB3aXRoIHRoZSB6ZXJvaW5nLlxcbiBcXHQgKlxcbi1cXHQgKiBOb3RlIHRoYXQgdW5hbGlnbmVkIHdyaXRlcyBhcmUgYWxsb3dlZCB1bmRlciBzaGFyZWQgbG9jayBzbyBsb25nIGFzXFxuLVxcdCAqIHRoZXkgYXJlIHB1cmUgb3ZlcndyaXRlcy4gT3RoZXJ3aXNlLCBjb25jdXJyZW50IHVuYWxpZ25lZCB3cml0ZXMgcmlza1xcbi1cXHQgKiBkYXRhIGNvcnJ1cHRpb24gZHVlIHRvIHBhcnRpYWwgYmxvY2sgemVyb2luZyBpbiB0aGUgZGlvIGxheWVyLCBhbmQgc29cXG4tXFx0ICogdGhlIEkvTyBtdXN0IG9jY3VyIGV4Y2x1c2l2ZWx5LlxcbitcXHQgKiBGb3IgYWxpZ25lZCB3cml0ZXMgd2Ugc2tpcCB0aGlzIGNoZWNrIGVudGlyZWx5IHNpbmNlIGFsbG9jYXRpb25cXG4rXFx0ICogdW5kZXIgc2hhcmVkIGxvY2sgaXMgc2FmZS5cXG4gXFx0ICovXFxuK1xcdGlmIChleHQ0X3VuYWxpZ25lZF9pbyhpbm9kZSwgZnJvbSwgb2Zmc2V0KSlcXG4rXFx0XFx0bmVlZHNfemVyb2luZyA9IGV4dDRfZGlvX25lZWRzX3plcm9pbmcoaW5vZGUsIG9mZnNldCwgY291bnQsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdGlvY2ItXFx1MDAzZWtpX2ZsYWdzIFxcdTAwMjYgSU9DQl9OT1dBSVQpO1xcbitcXG4rXFx0LyogRGV0ZXJtaW5lIHdoZXRoZXIgd2UgbmVlZCB0byB1cGdyYWRlIHRvIGFuIGV4Y2x1c2l2ZSBsb2NrLiAqL1xcbiBcXHRpZiAoKmlsb2NrX3NoYXJlZCBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgKCghSVNfTk9TRUMoaW5vZGUpIHx8ICpleHRlbmQgfHwgIW92ZXJ3cml0ZSB8fFxcbi1cXHQgICAgICh1bmFsaWduZWRfaW8gXFx1MDAyNlxcdTAwMjYgdW53cml0dGVuKSkpKSB7XFxuK1xcdCAgICAoIUlTX05PU0VDKGlub2RlKSB8fCAqZXh0ZW5kIHx8IG5lZWRzX3plcm9pbmcpKSB7XFxuIFxcdFxcdGlmIChpb2NiLVxcdTAwM2VraV9mbGFncyBcXHUwMDI2IElPQ0JfTk9XQUlUKSB7XFxuIFxcdFxcdFxcdHJldCA9IC1FQUdBSU47XFxuIFxcdFxcdFxcdGdvdG8gb3V0O1xcbkBAIC00ODksMjEgKzU0MSwyOCBAQCBzdGF0aWMgc3NpemVfdCBleHQ0X2Rpb193cml0ZV9jaGVja3Moc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXFxuIFxcdC8qXFxuIFxcdCAqIE5vdyB0aGF0IGxvY2tpbmcgaXMgc2V0dGxlZCwgZGV0ZXJtaW5lIGRpbyBmbGFncyBhbmQgZXhjbHVzaXZpdHlcXG4gXFx0ICogcmVxdWlyZW1lbnRzLiBXZSBkb24ndCB1c2UgRElPX09WRVJXUklURV9PTkxZIGJlY2F1c2Ugd2UgZW5mb3JjZVxcbi1cXHQgKiBiZWhhdmlvciBhbHJlYWR5LiBUaGUgaW5vZGUgbG9jayBpcyBhbHJlYWR5IGhlbGQgZXhjbHVzaXZlIGlmIHRoZVxcbi1cXHQgKiB3cml0ZSBpcyBub24tb3ZlcndyaXRlIG9yIGV4dGVuZGluZywgc28gZHJhaW4gYWxsIG91dHN0YW5kaW5nIGRpbyBhbmRcXG4tXFx0ICogc2V0IHRoZSBmb3JjZSB3YWl0IGRpbyBmbGFnLlxcbitcXHQgKiBiZWhhdmlvciBhbHJlYWR5LiBXaGVuIGhvbGRpbmcgdGhlIGV4Y2x1c2l2ZSBsb2NrIGZvciBhIHdyaXRlIHRoYXRcXG4rXFx0ICogbmVlZHMgcGFydGlhbCBibG9jayB6ZXJvaW5nIG9yIGlzIGV4dGVuZGluZyB0aGUgZmlsZSwgd2UgbXVzdCB3YWl0XFxuK1xcdCAqIGZvciB0aGUgSS9PIHRvIGNvbXBsZXRlIHN5bmNocm9ub3VzbHk6XFxuK1xcdCAqXFxuK1xcdCAqICAtIG5lZWRzX3plcm9pbmc6IGRyYWluIGluLWZsaWdodCBESU8gd2hvc2UgZW5kX2lvIGNvdWxkIHJhY2Ugd2l0aFxcbitcXHQgKiAgICBvdXIgcGFydGlhbCBibG9jayB6ZXJvaW5nLCBhbmQgZm9yY2Ugc3luY2hyb25vdXMgY29tcGxldGlvbiBzbyB3ZVxcbitcXHQgKiAgICBkb24ndCBsZWF2ZSBpbi1mbGlnaHQgemVyb2luZyBiaW9zIGZvciB0aGUgbmV4dCB3cml0ZXIgdG8gZHJhaW4uXFxuK1xcdCAqXFxuK1xcdCAqICAtIGV4dGVuZDogdGhlIGNhbGxlciBtdXN0IHVwZGF0ZSBpX2Rpc2tzaXplIGFmdGVyIEkvTyBjb21wbGV0aW9uLFxcbitcXHQgKiAgICB3aGljaCByZXF1aXJlcyB0aGUgZGF0YSB0byBiZSBvbiBkaXNrIGZpcnN0LlxcbiBcXHQgKi9cXG4tXFx0aWYgKCEqaWxvY2tfc2hhcmVkIFxcdTAwMjZcXHUwMDI2ICh1bmFsaWduZWRfaW8gfHwgKmV4dGVuZCkpIHtcXG4rXFx0aWYgKCEqaWxvY2tfc2hhcmVkIFxcdTAwMjZcXHUwMDI2IChuZWVkc196ZXJvaW5nIHx8ICpleHRlbmQpKSB7XFxuIFxcdFxcdGlmIChpb2NiLVxcdTAwM2VraV9mbGFncyBcXHUwMDI2IElPQ0JfTk9XQUlUKSB7XFxuIFxcdFxcdFxcdHJldCA9IC1FQUdBSU47XFxuIFxcdFxcdFxcdGdvdG8gb3V0O1xcbiBcXHRcXHR9XFxuLVxcdFxcdGlmICh1bmFsaWduZWRfaW8gXFx1MDAyNlxcdTAwMjYgKCFvdmVyd3JpdGUgfHwgdW53cml0dGVuKSlcXG4rXFx0XFx0aWYgKG5lZWRzX3plcm9pbmcpXFxuIFxcdFxcdFxcdGlub2RlX2Rpb193YWl0KGlub2RlKTtcXG4gXFx0XFx0KmRpb19mbGFncyA9IElPTUFQX0RJT19GT1JDRV9XQUlUO1xcbiBcXHR9XFxuIFxcbi1cXHRyZXQgPSBmaWxlX21vZGlmaWVkKGZpbGUpO1xcbitcXHRyZXQgPSBraW9jYl9tb2RpZmllZChpb2NiKTtcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG5AQCAtNjcyLDYgKzczMSwxMSBAQCBleHQ0X2RheF93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxcbiBcXHRjb3VudCA9IGlvdl9pdGVyX2NvdW50KGZyb20pO1xcbiBcXG4gXFx0aWYgKG9mZnNldCArIGNvdW50IFxcdTAwM2UgRVhUNF9JKGlub2RlKS1cXHUwMDNlaV9kaXNrc2l6ZSkge1xcbitcXHRcXHRpZiAoaW9jYi1cXHUwMDNla2lfZmxhZ3MgXFx1MDAyNiBJT0NCX05PV0FJVCkge1xcbitcXHRcXHRcXHRyZXQgPSAtRUFHQUlOO1xcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0fVxcbitcXG4gXFx0XFx0aGFuZGxlID0gZXh0NF9qb3VybmFsX3N0YXJ0KGlub2RlLCBFWFQ0X0hUX0lOT0RFLCAyKTtcXG4gXFx0XFx0aWYgKElTX0VSUihoYW5kbGUpKSB7XFxuIFxcdFxcdFxcdHJldCA9IFBUUl9FUlIoaGFuZGxlKTtcXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9pbm9kZS5jIGIvZnMvZXh0NC9pbm9kZS5jXFxuaW5kZXggYzJjMmQ2YWM3ZjNkMTMuLjNjMDUwOTQ0NzVkYjFjIDEwMDY0NFxcbi0tLSBhL2ZzL2V4dDQvaW5vZGUuY1xcbisrKyBiL2ZzL2V4dDQvaW5vZGUuY1xcbkBAIC03NTksOCArNzU5LDkgQEAgaW50IGV4dDRfbWFwX2Jsb2NrcyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXHRcXHRcXHRCVUcoKTtcXG4gXFx0XFx0fVxcbiBcXG4rXFx0XFx0LyogU2tpcCBibG9ja2luZyBvcGVyYXRpb25zIGFuZCBqdW1wIHRvIGV4dGVudCB2YWxpZGF0aW9uLiAqL1xcbiBcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBFWFQ0X0dFVF9CTE9DS1NfQ0FDSEVEX05PV0FJVClcXG4tXFx0XFx0XFx0cmV0dXJuIHJldHZhbDtcXG4rXFx0XFx0XFx0Z290byBmb3VuZDtcXG4gI2lmZGVmIEVTX0FHR1JFU1NJVkVfVEVTVFxcbiBcXHRcXHRleHQ0X21hcF9ibG9ja3NfZXNfcmVjaGVjayhoYW5kbGUsIGlub2RlLCBtYXAsXFxuIFxcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZvcmlnX21hcCwgZmxhZ3MpO1xcbkBAIC03NzYsNyArNzc3LDcgQEAgaW50IGV4dDRfbWFwX2Jsb2NrcyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXHQgKiBjYW5ub3QgZmluZCBleHRlbnQgaW4gdGhlIGNhY2hlLlxcbiBcXHQgKi9cXG4gXFx0aWYgKGZsYWdzIFxcdTAwMjYgRVhUNF9HRVRfQkxPQ0tTX0NBQ0hFRF9OT1dBSVQpXFxuLVxcdFxcdHJldHVybiAwO1xcbitcXHRcXHRyZXR1cm4gLUVBR0FJTjtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIFRyeSB0byBzZWUgaWYgd2UgY2FuIGdldCB0aGUgYmxvY2sgd2l0aG91dCByZXF1ZXN0aW5nIGEgbmV3XFxuQEAgLTc5Nyw2ICs3OTgsOSBAQCBpbnQgZXh0NF9tYXBfYmxvY2tzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdGlmICgoZmxhZ3MgXFx1MDAyNiBFWFQ0X0dFVF9CTE9DS1NfQ1JFQVRFKSA9PSAwKVxcbiBcXHRcXHRyZXR1cm4gcmV0dmFsO1xcbiBcXG4rXFx0LyogRVhUNF9HRVRfQkxPQ0tTX0NSRUFURSBjYW5ub3Qgb3BlcmF0ZSBpbiBOT1dBSVQgbW9kZSAqL1xcbitcXHRXQVJOX09OX09OQ0UoZmxhZ3MgXFx1MDAyNiBFWFQ0X0dFVF9CTE9DS1NfQ0FDSEVEX05PV0FJVCk7XFxuK1xcbiBcXHQvKlxcbiBcXHQgKiBSZXR1cm5zIGlmIHRoZSBibG9ja3MgaGF2ZSBhbHJlYWR5IGFsbG9jYXRlZFxcbiBcXHQgKlxcbkBAIC0zNjcyLDYgKzM2NzYsOSBAQCBzdGF0aWMgaW50IGV4dDRfaW9tYXBfYWxsb2Moc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dDRfbWFwX2Jsb2NrcyAqbWFwLFxcbiBcXHRpbnQgcmV0LCBkaW9fY3JlZGl0cywgbV9mbGFncyA9IDAsIHJldHJpZXMgPSAwO1xcbiBcXHRib29sIGZvcmNlX2NvbW1pdCA9IGZhbHNlO1xcbiBcXG4rXFx0aWYgKGZsYWdzIFxcdTAwMjYgSU9NQVBfTk9XQUlUKVxcbitcXHRcXHRyZXR1cm4gLUVBR0FJTjtcXG4rXFxuIFxcdC8qXFxuIFxcdCAqIFRyaW0gdGhlIG1hcHBpbmcgcmVxdWVzdCB0byB0aGUgbWF4aW11bSB2YWx1ZSB0aGF0IHdlIGNhbiBtYXAgYXRcXG4gXFx0ICogb25jZSBmb3IgZGlyZWN0IEkvTy5cXG5AQCAtMzc3Nyw2ICszNzg0LDcgQEAgc3RhdGljIGludCBleHQ0X2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW5ndGgsXFxuIFxcdHN0cnVjdCBleHQ0X21hcF9ibG9ja3MgbWFwO1xcbiBcXHR1OCBibGtiaXRzID0gaW5vZGUtXFx1MDAzZWlfYmxrYml0cztcXG4gXFx0dW5zaWduZWQgaW50IG9yaWdfbWxlbjtcXG4rXFx0aW50IG1hcF9mbGFncyA9IDA7XFxuIFxcbiBcXHRpZiAoKG9mZnNldCBcXHUwMDNlXFx1MDAzZSBibGtiaXRzKSBcXHUwMDNlIEVYVDRfTUFYX0xPR0lDQUxfQkxPQ0spXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbkBAIC0zNzkxLDYgKzM3OTksMTIgQEAgc3RhdGljIGludCBleHQ0X2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW5ndGgsXFxuIFxcdG1hcC5tX2xlbiA9IG1pbl90KGxvZmZfdCwgKG9mZnNldCArIGxlbmd0aCAtIDEpIFxcdTAwM2VcXHUwMDNlIGJsa2JpdHMsXFxuIFxcdFxcdFxcdCAgRVhUNF9NQVhfTE9HSUNBTF9CTE9DSykgLSBtYXAubV9sYmxrICsgMTtcXG4gXFx0b3JpZ19tbGVuID0gbWFwLm1fbGVuO1xcbitcXHQvKlxcbitcXHQgKiBJbiBOT1dBSVQgY29udGV4dCwgb25seSB1c2UgY2FjaGVkIGV4dGVudCBpbmZvLiBJZiBlcyBjYWNoZSBtaXNzZXMsXFxuK1xcdCAqIHJldHVybiAtRUFHQUlOIHRvIGF2b2lkIHNsZWVwaW5nIG9uIGRvd25fcmVhZChpX2RhdGFfc2VtKS5cXG4rXFx0ICovXFxuK1xcdGlmIChmbGFncyBcXHUwMDI2IElPTUFQX05PV0FJVClcXG4rXFx0XFx0bWFwX2ZsYWdzID0gRVhUNF9HRVRfQkxPQ0tTX0NBQ0hFRF9OT1dBSVQ7XFxuIFxcbiBcXHRpZiAoZmxhZ3MgXFx1MDAyNiBJT01BUF9XUklURSkge1xcbiBcXHRcXHQvKlxcbkBAIC0zODAwLDcgKzM4MTQsNyBAQCBzdGF0aWMgaW50IGV4dDRfaW9tYXBfYmVnaW4oc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbmd0aCxcXG4gXFx0XFx0ICogZXNwZWNpYWxseSBpbiBtdWx0aS10aHJlYWRlZCBvdmVyd3JpdGUgcmVxdWVzdHMuXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRpZiAob2Zmc2V0ICsgbGVuZ3RoIFxcdTAwM2M9IGlfc2l6ZV9yZWFkKGlub2RlKSkge1xcbi1cXHRcXHRcXHRyZXQgPSBleHQ0X21hcF9ibG9ja3MoTlVMTCwgaW5vZGUsIFxcdTAwMjZtYXAsIDApO1xcbitcXHRcXHRcXHRyZXQgPSBleHQ0X21hcF9ibG9ja3MoTlVMTCwgaW5vZGUsIFxcdTAwMjZtYXAsIG1hcF9mbGFncyk7XFxuIFxcdFxcdFxcdC8qXFxuIFxcdFxcdFxcdCAqIEZvciBEQVggd2UgY29udmVydCBleHRlbnRzIHRvIGluaXRpYWxpemVkIG9uZXMgYmVmb3JlXFxuIFxcdFxcdFxcdCAqIGNvcHlpbmcgdGhlIGRhdGEsIG90aGVyd2lzZSB3ZSBkbyBpdCBhZnRlciBJL08gc29cXG5AQCAtMzgyMSw3ICszODM1LDcgQEAgc3RhdGljIGludCBleHQ0X2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW5ndGgsXFxuIFxcdFxcdH1cXG4gXFx0XFx0cmV0ID0gZXh0NF9pb21hcF9hbGxvYyhpbm9kZSwgXFx1MDAyNm1hcCwgZmxhZ3MpO1xcbiBcXHR9IGVsc2Uge1xcbi1cXHRcXHRyZXQgPSBleHQ0X21hcF9ibG9ja3MoTlVMTCwgaW5vZGUsIFxcdTAwMjZtYXAsIDApO1xcbitcXHRcXHRyZXQgPSBleHQ0X21hcF9ibG9ja3MoTlVMTCwgaW5vZGUsIFxcdTAwMjZtYXAsIG1hcF9mbGFncyk7XFxuIFxcdH1cXG4gXFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwOTowODoxNS40NTU1NDkwMzNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkxNTk5MDk0MDgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIixcbiAgICBcIkZTX0RBWFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV4dDRfZGlvX25lZWRzX3plcm9pbmdcIixcbiAgICBcImV4dDRfZGlvX3dyaXRlX2NoZWNrc1wiLFxuICAgIFwiZXh0NF9idWZmZXJlZF93cml0ZV9pdGVyXCIsXG4gICAgXCJleHQ0X2RheF93cml0ZV9pdGVyXCIsXG4gICAgXCJleHQ0X2lvbWFwX2JlZ2luXCIsXG4gICAgXCJleHQ0X2lvbWFwX2FsbG9jXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZXh0NCBEaXJlY3QgSS9PIGFuZCBEQVggd3JpdGUgcGF0aHMsIHNwZWNpZmljYWxseSBmaXhpbmcgbG9ja2luZyBhbmQgcGFydGlhbCBibG9jayB6ZXJvaW5nIGZvciB1bmFsaWduZWQgRElPIHdyaXRlcy4gSXQgaW50cm9kdWNlcyBgZXh0NF9kaW9fbmVlZHNfemVyb2luZ2AgYW5kIG1vZGlmaWVzIGBleHQ0X2Rpb193cml0ZV9jaGVja3NgLCBgZXh0NF9idWZmZXJlZF93cml0ZV9pdGVyYCwgYGV4dDRfZGF4X3dyaXRlX2l0ZXJgLCBhbmQgYGV4dDRfaW9tYXBfYmVnaW5gLiBUaGVzZSBhcmUgY29yZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gZXh0NCdzIEkvTyBoYW5kbGluZyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYzExODllNzc2ZDkxNjM5NjI4MDg3NWYxN2I0YTkzOWM0NDlkNmQwN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVuIDI2IDA5OjA4OjEzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9maWxlLmMgYi9mcy9leHQ0L2ZpbGUuY1xuaW5kZXggZWIxYTMyMzk2MmIxMDEuLjYxMGUxMDlmY2QzNjI1IDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9maWxlLmNcbisrKyBiL2ZzL2V4dDQvZmlsZS5jXG5AQCAtMjEzLDMxICsyMTMsNjUgQEAgZXh0NF9leHRlbmRpbmdfaW8oc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCwgc2l6ZV90IGxlbilcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4tLyogSXMgSU8gb3ZlcndyaXRpbmcgYWxsb2NhdGVkIG9yIGluaXRpYWxpemVkIGJsb2Nrcz8gKi9cbi1zdGF0aWMgYm9vbCBleHQ0X292ZXJ3cml0ZV9pbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLVx0XHRcdCAgICAgIGxvZmZfdCBwb3MsIGxvZmZfdCBsZW4sIGJvb2wgKnVud3JpdHRlbilcbisvKlxuKyAqIERvZXMgYW4gdW5hbGlnbmVkIERJTyB3cml0ZSByZXF1aXJlIHBhcnRpYWwgYmxvY2sgemVyb2luZz9cbisgKlxuKyAqIFBhcnRpYWwgYmxvY2sgemVyb2luZyBpcyBwZXJmb3JtZWQgb25seSBmb3IgdGhlIGhlYWQgYW5kIHRhaWwgYmxvY2tzXG4rICogd2hlbiB0aGV5IGFyZSBwYXJ0aWFsbHkgY292ZXJlZCBieSB0aGUgd3JpdGUgYW5kIHRoZSB1bmRlcmx5aW5nIGV4dGVudFxuKyAqIGlzIGEgaG9sZSBvciB1bndyaXR0ZW4uIE1pZGRsZSBibG9ja3MgKGZ1bGx5IGNvdmVyZWQgYnkgdGhlIHdyaXRlKVxuKyAqIGFyZSB3cml0dGVuIGFzIHdob2xlIGJsb2NrcyB3aXRob3V0IHplcm9pbmcuXG4rICpcbisgKiBXaGVuIHplcm9pbmcgaXMgcmVxdWlyZWQsIHR3byBjb25jdXJyZW50IHVuYWxpZ25lZCBESU8gd3JpdGVzIHRvIHRoZVxuKyAqIHNhbWUgcGFydGlhbCBibG9jayBjYW4gcmFjZSBhbmQgY29ycnVwdCBlYWNoIG90aGVyJ3MgZGF0YSwgc28gdGhlXG4rICogY2FsbGVyIG11c3QgdGFrZSB0aGUgZXhjbHVzaXZlIGlfcndzZW0gYW5kIGRyYWluIGluLWZsaWdodCBESU8uIFdoZW5cbisgKiB6ZXJvaW5nIGlzIG5vdCByZXF1aXJlZCwgc2hhcmVkIGxvY2sgaXMgc2FmZSAtLSBibG9jayBhbGxvY2F0aW9uIGFuZFxuKyAqIHVud3JpdHRlbiBjb252ZXJzaW9uIGZvciBtaWRkbGUgYmxvY2tzIGFyZSBwcm90ZWN0ZWQgYnkgaV9kYXRhX3NlbVxuKyAqIGFuZCBpbm9kZV9kaW9fYmVnaW4oKS5cbisgKi9cbitzdGF0aWMgYm9vbCBleHQ0X2Rpb19uZWVkc196ZXJvaW5nKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBwb3MsIGxvZmZfdCBsZW4sXG4rXHRcdFx0XHQgICBib29sIG5vd2FpdClcbiB7XG4gXHRzdHJ1Y3QgZXh0NF9tYXBfYmxvY2tzIG1hcDtcbiBcdHVuc2lnbmVkIGludCBibGtiaXRzID0gaW5vZGUtXHUwMDNlaV9ibGtiaXRzO1xuLVx0aW50IGVyciwgYmxrbGVuO1xuK1x0dW5zaWduZWQgbG9uZyBibG9ja21hc2sgPSBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplIC0gMTtcbitcdGJvb2wgaGVhZF9wYXJ0aWFsLCB0YWlsX3BhcnRpYWw7XG4rXHRleHQ0X2xibGtfdCBoZWFkX2xibGssIHRhaWxfbGJsaztcbitcdGludCBlcnI7XG4rXHRpbnQgbWFwX2ZsYWdzID0gMDtcbiBcbiBcdGlmIChwb3MgKyBsZW4gXHUwMDNlIGlfc2l6ZV9yZWFkKGlub2RlKSlcbi1cdFx0cmV0dXJuIGZhbHNlO1xuK1x0XHRyZXR1cm4gdHJ1ZTtcbiBcbi1cdG1hcC5tX2xibGsgPSBwb3MgXHUwMDNlXHUwMDNlIGJsa2JpdHM7XG4tXHRtYXAubV9sZW4gPSBFWFQ0X01BWF9CTE9DS1MobGVuLCBwb3MsIGJsa2JpdHMpO1xuLVx0YmxrbGVuID0gbWFwLm1fbGVuO1xuK1x0aWYgKG5vd2FpdClcbitcdFx0bWFwX2ZsYWdzID0gRVhUNF9HRVRfQkxPQ0tTX0NBQ0hFRF9OT1dBSVQ7XG4rXG4rXHRoZWFkX3BhcnRpYWwgPSAocG9zIFx1MDAyNiBibG9ja21hc2spICE9IDA7XG4rXHR0YWlsX3BhcnRpYWwgPSAoKHBvcyArIGxlbikgXHUwMDI2IGJsb2NrbWFzaykgIT0gMDtcbitcdGhlYWRfbGJsayA9IHBvcyBcdTAwM2VcdTAwM2UgYmxrYml0cztcbitcdHRhaWxfbGJsayA9IChwb3MgKyBsZW4gLSAxKSBcdTAwM2VcdTAwM2UgYmxrYml0cztcbitcbitcdC8qIENoZWNrIHRoZSBoZWFkIHBhcnRpYWwgYmxvY2suICovXG4rXHRpZiAoaGVhZF9wYXJ0aWFsKSB7XG4rXHRcdG1hcC5tX2xibGsgPSBoZWFkX2xibGs7XG4rXHRcdG1hcC5tX2xlbiA9IHRhaWxfbGJsayAtIGhlYWRfbGJsayArIDE7XG4rXHRcdGVyciA9IGV4dDRfbWFwX2Jsb2NrcyhOVUxMLCBpbm9kZSwgXHUwMDI2bWFwLCBtYXBfZmxhZ3MpO1xuK1x0XHRpZiAoZXJyIFx1MDAzYz0gMCB8fCAhKG1hcC5tX2ZsYWdzIFx1MDAyNiBFWFQ0X01BUF9NQVBQRUQpKVxuK1x0XHRcdHJldHVybiB0cnVlO1xuK1x0XHQvKiBJZiB0aGlzIG1hcHBpbmcgYWxyZWFkeSBjb3ZlcnMgdGhlIHRhaWwgYmxvY2ssIHdlJ3JlIGRvbmUuICovXG4rXHRcdGlmICghdGFpbF9wYXJ0aWFsIHx8IG1hcC5tX2xibGsgKyBlcnIgXHUwMDNlIHRhaWxfbGJsaylcbitcdFx0XHRyZXR1cm4gZmFsc2U7XG4rXHR9XG4gXG4tXHRlcnIgPSBleHQ0X21hcF9ibG9ja3MoTlVMTCwgaW5vZGUsIFx1MDAyNm1hcCwgMCk7XG4tXHRpZiAoZXJyICE9IGJsa2xlbilcbi1cdFx0cmV0dXJuIGZhbHNlO1xuLVx0Lypcbi1cdCAqICdlcnI9PWxlbicgbWVhbnMgdGhhdCBhbGwgb2YgdGhlIGJsb2NrcyBoYXZlIGJlZW4gcHJlYWxsb2NhdGVkLFxuLVx0ICogcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZXkgaGF2ZSBiZWVuIGluaXRpYWxpemVkIG9yIG5vdC4gV2UgbmVlZCB0b1xuLVx0ICogY2hlY2sgbV9mbGFncyB0byBkaXN0aW5ndWlzaCB0aGUgdW53cml0dGVuIGV4dGVudHMuXG4tXHQgKi9cbi1cdCp1bndyaXR0ZW4gPSAhKG1hcC5tX2ZsYWdzIFx1MDAyNiBFWFQ0X01BUF9NQVBQRUQpO1xuLVx0cmV0dXJuIHRydWU7XG4rXHQvKiBDaGVjayB0aGUgdGFpbCBwYXJ0aWFsIGJsb2NrLiAqL1xuK1x0aWYgKHRhaWxfcGFydGlhbCkge1xuK1x0XHRtYXAubV9sYmxrID0gdGFpbF9sYmxrO1xuK1x0XHRtYXAubV9sZW4gPSAxO1xuK1x0XHRlcnIgPSBleHQ0X21hcF9ibG9ja3MoTlVMTCwgaW5vZGUsIFx1MDAyNm1hcCwgbWFwX2ZsYWdzKTtcbitcdFx0aWYgKGVyciBcdTAwM2M9IDAgfHwgIShtYXAubV9mbGFncyBcdTAwMjYgRVhUNF9NQVBfTUFQUEVEKSlcbitcdFx0XHRyZXR1cm4gdHJ1ZTtcbitcdH1cbitcbitcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4gc3RhdGljIHNzaXplX3QgZXh0NF9nZW5lcmljX3dyaXRlX2NoZWNrcyhzdHJ1Y3Qga2lvY2IgKmlvY2IsXG5AQCAtMjc4LDcgKzMxMiw3IEBAIHN0YXRpYyBzc2l6ZV90IGV4dDRfd3JpdGVfY2hlY2tzKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxuIFx0aWYgKGNvdW50IFx1MDAzYz0gMClcbiBcdFx0cmV0dXJuIGNvdW50O1xuIFxuLVx0cmV0ID0gZmlsZV9tb2RpZmllZChpb2NiLVx1MDAzZWtpX2ZpbHApO1xuK1x0cmV0ID0ga2lvY2JfbW9kaWZpZWQoaW9jYik7XG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuQEAgLTMwOSw2ICszNDMsMTMgQEAgc3RhdGljIHNzaXplX3QgZXh0NF9idWZmZXJlZF93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYixcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFxuIFx0aW5vZGVfbG9jayhpbm9kZSk7XG4rXG4rXHQvKlxuK1x0ICogUHJldmVudCBjb25jdXJyZW50IGRpcmVjdCBJL08gYW5kIGJ1ZmZlcmVkIEkvTyB0byB0aGUgc2FtZSBmaWxlXG4rXHQgKiByYW5nZS4gV2FpdCBmb3IgaW4tZmxpZ2h0IERJTyB0byBmaW5pc2ggYmVmb3JlIGRpcnR5aW5nIHBhZ2VzLlxuK1x0ICovXG4rXHRpbm9kZV9kaW9fd2FpdChpbm9kZSk7XG4rXG4gXHRyZXQgPSBleHQ0X3dyaXRlX2NoZWNrcyhpb2NiLCBmcm9tKTtcbiBcdGlmIChyZXQgXHUwMDNjPSAwKVxuIFx0XHRnb3RvIG91dDtcbkBAIC00MjgsMTYgKzQ2OSwyOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGlvbWFwX2Rpb19vcHMgZXh0NF9kaW9fd3JpdGVfb3BzID0ge1xuICAqIGNvbmRpdGlvbiByZXF1aXJlcyBhbiBleGNsdXNpdmUgaW5vZGUgbG9jay4gSWYgeWVzLCB0aGVuIHdlIHJlc3RhcnQgdGhlXG4gICogd2hvbGUgb3BlcmF0aW9uIGJ5IHJlbGVhc2luZyB0aGUgc2hhcmVkIGxvY2sgYW5kIGFjcXVpcmluZyBleGNsdXNpdmUgbG9jay5cbiAgKlxuLSAqIC0gRm9yIHVuYWxpZ25lZF9pbyB3ZSBuZXZlciB0YWtlIHNoYXJlZCBsb2NrIGFzIGl0IG1heSBjYXVzZSBkYXRhIGNvcnJ1cHRpb25cbi0gKiAgIHdoZW4gdHdvIHVuYWxpZ25lZCBJTyB0cmllcyB0byBtb2RpZnkgdGhlIHNhbWUgYmxvY2sgZS5nLiB3aGlsZSB6ZXJvaW5nLlxuKyAqIFRoZSBkZWNpc2lvbiBpcyBsYXllcmVkLCBldmFsdWF0ZWQgaW4gdGhpcyBvcmRlcjpcbiAgKlxuLSAqIC0gRm9yIGV4dGVuZGluZyB3cml0ZXMgY2FzZSB3ZSBkb24ndCB0YWtlIHRoZSBzaGFyZWQgbG9jaywgc2luY2UgaXQgcmVxdWlyZXNcbi0gKiAgIHVwZGF0aW5nIGlub2RlIGlfZGlza3NpemUgYW5kL29yIG9ycGhhbiBoYW5kbGluZyB3aXRoIGV4Y2x1c2l2ZSBsb2NrLlxuKyAqIDEuIElmIGtpb2NiX21vZGlmaWVkKCkgbmVlZHMgdG8gdXBkYXRlIHNlY3VyaXR5IGluZm8gKCFJU19OT1NFQyksIHVwZ3JhZGVcbisgKiAgICB0byB0aGUgZXhjbHVzaXZlIGxvY2sgLS0gdGhlIHNlY3VyaXR5IHVwZGF0ZSBpdHNlbGYgcmVxdWlyZXMgaXQsXG4rICogICAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSB3cml0ZSBleHRlbmRzIHRoZSBmaWxlIG9yIGlzIGFsaWduZWQuXG4gICpcbi0gKiAtIHNoYXJlZCBsb2NraW5nIHdpbGwgb25seSBiZSB0cnVlIG1vc3RseSB3aXRoIG92ZXJ3cml0ZXMsIGluY2x1ZGluZ1xuLSAqICAgaW5pdGlhbGl6ZWQgYmxvY2tzIGFuZCB1bndyaXR0ZW4gYmxvY2tzLlxuKyAqIDIuIElmIHRoZSB3cml0ZSBleHRlbmRzIGlfc2l6ZSBvciBpX2Rpc2tzaXplLCB1cGdyYWRlIHRvIHRoZSBleGNsdXNpdmVcbisgKiAgICBsb2NrIHRvIHNhZmVseSB1cGRhdGUgaV9kaXNrc2l6ZSBhbmQgdGhlIG9ycGhhbiBsaXN0LCByZWdhcmRsZXNzIG9mXG4rICogICAgYWxpZ25tZW50LlxuICAqXG4tICogLSBPdGhlcndpc2Ugd2Ugd2lsbCBzd2l0Y2ggdG8gZXhjbHVzaXZlIGlfcndzZW0gbG9jay5cbisgKiAzLiBPdGhlcndpc2UsIGZvciBhbGlnbmVkIG5vbi1leHRlbmRpbmcgd3JpdGVzLCBzaGFyZWQgbG9jayBpcyBhbHdheXNcbisgKiAgICBzdWZmaWNpZW50IHJlZ2FyZGxlc3Mgb2YgZXh0ZW50IHN0YXRlICh3cml0dGVuLCB1bndyaXR0ZW4sIG9yIGhvbGUpLlxuKyAqICAgIHRydW5jYXRlL3B1bmNoX2hvbGUgY2Fubm90IHJ1biB3aGlsZSB3ZSBob2xkIHRoZSBzaGFyZWQgaV9yd3NlbVxuKyAqICAgICh0aGV5IG5lZWQgaXQgZXhjbHVzaXZlbHkpOyBhZnRlciB3ZSByZWxlYXNlIGl0LCBpbm9kZV9kaW9fYmVnaW4oKVxuKyAqICAgIGtlZXBzIHRoZWlyIGlub2RlX2Rpb193YWl0KCkgYmxvY2tlZCB1bnRpbCBpbi1mbGlnaHQgYmlvcyBjb21wbGV0ZS5cbisgKiAgICBpX2RhdGFfc2VtIHNlcmlhbGl6ZXMgY29uY3VycmVudCBleHRlbnQgdHJlZSBtb2RpZmljYXRpb25zLlxuKyAqXG4rICogNC4gT3RoZXJ3aXNlLCB0aGUgd3JpdGUgaXMgdW5hbGlnbmVkIGFuZCBub24tZXh0ZW5kaW5nLiBTaGFyZWQgbG9jayBpc1xuKyAqICAgIHNhZmUgdW5sZXNzIHRoZSBESU8gbGF5ZXIgbmVlZHMgdG8gcGVyZm9ybSBwYXJ0aWFsIGJsb2NrIHplcm9pbmcgLS1cbisgKiAgICBpLmUuIHRoZSBoZWFkIG9yIHRhaWwgcGFydGlhbCBibG9jayBzaXRzIG9uIGEgaG9sZSBvciB1bndyaXR0ZW5cbisgKiAgICBleHRlbnQuIEluIHRoYXQgY2FzZSB1cGdyYWRlIHRvIHRoZSBleGNsdXNpdmUgbG9jayBhbmQgZHJhaW5cbisgKiAgICBpbi1mbGlnaHQgRElPIHRvIGF2b2lkIHJhY2VzIHdpdGggY29uY3VycmVudCBwYXJ0aWFsIGJsb2NrIHplcm9pbmcuXG4gICovXG4gc3RhdGljIHNzaXplX3QgZXh0NF9kaW9fd3JpdGVfY2hlY2tzKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tLFxuIFx0XHRcdFx0ICAgICBib29sICppbG9ja19zaGFyZWQsIGJvb2wgKmV4dGVuZCxcbkBAIC00NDgsNyArNTAxLDcgQEAgc3RhdGljIHNzaXplX3QgZXh0NF9kaW9fd3JpdGVfY2hlY2tzKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tLFxuIFx0bG9mZl90IG9mZnNldDtcbiBcdHNpemVfdCBjb3VudDtcbiBcdHNzaXplX3QgcmV0O1xuLVx0Ym9vbCBvdmVyd3JpdGUsIHVuYWxpZ25lZF9pbywgdW53cml0dGVuO1xuK1x0Ym9vbCBuZWVkc196ZXJvaW5nID0gZmFsc2U7XG4gXG4gcmVzdGFydDpcbiBcdHJldCA9IGV4dDRfZ2VuZXJpY193cml0ZV9jaGVja3MoaW9jYiwgZnJvbSk7XG5AQCAtNDU4LDI0ICs1MTEsMjMgQEAgc3RhdGljIHNzaXplX3QgZXh0NF9kaW9fd3JpdGVfY2hlY2tzKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tLFxuIFx0b2Zmc2V0ID0gaW9jYi1cdTAwM2VraV9wb3M7XG4gXHRjb3VudCA9IHJldDtcbiBcbi1cdHVuYWxpZ25lZF9pbyA9IGV4dDRfdW5hbGlnbmVkX2lvKGlub2RlLCBmcm9tLCBvZmZzZXQpO1xuIFx0KmV4dGVuZCA9IGV4dDRfZXh0ZW5kaW5nX2lvKGlub2RlLCBvZmZzZXQsIGNvdW50KTtcbi1cdG92ZXJ3cml0ZSA9IGV4dDRfb3ZlcndyaXRlX2lvKGlub2RlLCBvZmZzZXQsIGNvdW50LCBcdTAwMjZ1bndyaXR0ZW4pO1xuIFxuIFx0Lypcbi1cdCAqIERldGVybWluZSB3aGV0aGVyIHdlIG5lZWQgdG8gdXBncmFkZSB0byBhbiBleGNsdXNpdmUgbG9jay4gVGhpcyBpc1xuLVx0ICogcmVxdWlyZWQgdG8gY2hhbmdlIHNlY3VyaXR5IGluZm8gaW4gZmlsZV9tb2RpZmllZCgpLCBmb3IgZXh0ZW5kaW5nXG4tXHQgKiBJL08sIGFueSBmb3JtIG9mIG5vbi1vdmVyd3JpdGUgSS9PLCBhbmQgdW5hbGlnbmVkIEkvTyB0byB1bndyaXR0ZW5cbi1cdCAqIGV4dGVudHMgKGFzIHBhcnRpYWwgYmxvY2sgemVyb2luZyBtYXkgYmUgcmVxdWlyZWQpLlxuK1x0ICogRm9yIHVuYWxpZ25lZCB3cml0ZXMsIGNoZWNrIHdoZXRoZXIgcGFydGlhbCBibG9jayB6ZXJvaW5nIHdpbGwgYmVcbitcdCAqIG5lZWRlZC4gSWYgc28sIGV4Y2x1c2l2ZSBsb2NrIGlzIHJlcXVpcmVkIHRvIHNlcmlhbGl6ZSBhZ2FpbnN0XG4rXHQgKiBjb25jdXJyZW50IERJTyB0aGF0IGNvdWxkIHJhY2Ugd2l0aCB0aGUgemVyb2luZy5cbiBcdCAqXG4tXHQgKiBOb3RlIHRoYXQgdW5hbGlnbmVkIHdyaXRlcyBhcmUgYWxsb3dlZCB1bmRlciBzaGFyZWQgbG9jayBzbyBsb25nIGFzXG4tXHQgKiB0aGV5IGFyZSBwdXJlIG92ZXJ3cml0ZXMuIE90aGVyd2lzZSwgY29uY3VycmVudCB1bmFsaWduZWQgd3JpdGVzIHJpc2tcbi1cdCAqIGRhdGEgY29ycnVwdGlvbiBkdWUgdG8gcGFydGlhbCBibG9jayB6ZXJvaW5nIGluIHRoZSBkaW8gbGF5ZXIsIGFuZCBzb1xuLVx0ICogdGhlIEkvTyBtdXN0IG9jY3VyIGV4Y2x1c2l2ZWx5LlxuK1x0ICogRm9yIGFsaWduZWQgd3JpdGVzIHdlIHNraXAgdGhpcyBjaGVjayBlbnRpcmVseSBzaW5jZSBhbGxvY2F0aW9uXG4rXHQgKiB1bmRlciBzaGFyZWQgbG9jayBpcyBzYWZlLlxuIFx0ICovXG4rXHRpZiAoZXh0NF91bmFsaWduZWRfaW8oaW5vZGUsIGZyb20sIG9mZnNldCkpXG4rXHRcdG5lZWRzX3plcm9pbmcgPSBleHQ0X2Rpb19uZWVkc196ZXJvaW5nKGlub2RlLCBvZmZzZXQsIGNvdW50LFxuK1x0XHRcdFx0XHRcdGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2IElPQ0JfTk9XQUlUKTtcbitcbitcdC8qIERldGVybWluZSB3aGV0aGVyIHdlIG5lZWQgdG8gdXBncmFkZSB0byBhbiBleGNsdXNpdmUgbG9jay4gKi9cbiBcdGlmICgqaWxvY2tfc2hhcmVkIFx1MDAyNlx1MDAyNlxuLVx0ICAgICgoIUlTX05PU0VDKGlub2RlKSB8fCAqZXh0ZW5kIHx8ICFvdmVyd3JpdGUgfHxcbi1cdCAgICAgKHVuYWxpZ25lZF9pbyBcdTAwMjZcdTAwMjYgdW53cml0dGVuKSkpKSB7XG4rXHQgICAgKCFJU19OT1NFQyhpbm9kZSkgfHwgKmV4dGVuZCB8fCBuZWVkc196ZXJvaW5nKSkge1xuIFx0XHRpZiAoaW9jYi1cdTAwM2VraV9mbGFncyBcdTAwMjYgSU9DQl9OT1dBSVQpIHtcbiBcdFx0XHRyZXQgPSAtRUFHQUlOO1xuIFx0XHRcdGdvdG8gb3V0O1xuQEAgLTQ4OSwyMSArNTQxLDI4IEBAIHN0YXRpYyBzc2l6ZV90IGV4dDRfZGlvX3dyaXRlX2NoZWNrcyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSxcbiBcdC8qXG4gXHQgKiBOb3cgdGhhdCBsb2NraW5nIGlzIHNldHRsZWQsIGRldGVybWluZSBkaW8gZmxhZ3MgYW5kIGV4Y2x1c2l2aXR5XG4gXHQgKiByZXF1aXJlbWVudHMuIFdlIGRvbid0IHVzZSBESU9fT1ZFUldSSVRFX09OTFkgYmVjYXVzZSB3ZSBlbmZvcmNlXG4tXHQgKiBiZWhhdmlvciBhbHJlYWR5LiBUaGUgaW5vZGUgbG9jayBpcyBhbHJlYWR5IGhlbGQgZXhjbHVzaXZlIGlmIHRoZVxuLVx0ICogd3JpdGUgaXMgbm9uLW92ZXJ3cml0ZSBvciBleHRlbmRpbmcsIHNvIGRyYWluIGFsbCBvdXRzdGFuZGluZyBkaW8gYW5kXG4tXHQgKiBzZXQgdGhlIGZvcmNlIHdhaXQgZGlvIGZsYWcuXG4rXHQgKiBiZWhhdmlvciBhbHJlYWR5LiBXaGVuIGhvbGRpbmcgdGhlIGV4Y2x1c2l2ZSBsb2NrIGZvciBhIHdyaXRlIHRoYXRcbitcdCAqIG5lZWRzIHBhcnRpYWwgYmxvY2sgemVyb2luZyBvciBpcyBleHRlbmRpbmcgdGhlIGZpbGUsIHdlIG11c3Qgd2FpdFxuK1x0ICogZm9yIHRoZSBJL08gdG8gY29tcGxldGUgc3luY2hyb25vdXNseTpcbitcdCAqXG4rXHQgKiAgLSBuZWVkc196ZXJvaW5nOiBkcmFpbiBpbi1mbGlnaHQgRElPIHdob3NlIGVuZF9pbyBjb3VsZCByYWNlIHdpdGhcbitcdCAqICAgIG91ciBwYXJ0aWFsIGJsb2NrIHplcm9pbmcsIGFuZCBmb3JjZSBzeW5jaHJvbm91cyBjb21wbGV0aW9uIHNvIHdlXG4rXHQgKiAgICBkb24ndCBsZWF2ZSBpbi1mbGlnaHQgemVyb2luZyBiaW9zIGZvciB0aGUgbmV4dCB3cml0ZXIgdG8gZHJhaW4uXG4rXHQgKlxuK1x0ICogIC0gZXh0ZW5kOiB0aGUgY2FsbGVyIG11c3QgdXBkYXRlIGlfZGlza3NpemUgYWZ0ZXIgSS9PIGNvbXBsZXRpb24sXG4rXHQgKiAgICB3aGljaCByZXF1aXJlcyB0aGUgZGF0YSB0byBiZSBvbiBkaXNrIGZpcnN0LlxuIFx0ICovXG4tXHRpZiAoISppbG9ja19zaGFyZWQgXHUwMDI2XHUwMDI2ICh1bmFsaWduZWRfaW8gfHwgKmV4dGVuZCkpIHtcbitcdGlmICghKmlsb2NrX3NoYXJlZCBcdTAwMjZcdTAwMjYgKG5lZWRzX3plcm9pbmcgfHwgKmV4dGVuZCkpIHtcbiBcdFx0aWYgKGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2IElPQ0JfTk9XQUlUKSB7XG4gXHRcdFx0cmV0ID0gLUVBR0FJTjtcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0fVxuLVx0XHRpZiAodW5hbGlnbmVkX2lvIFx1MDAyNlx1MDAyNiAoIW92ZXJ3cml0ZSB8fCB1bndyaXR0ZW4pKVxuK1x0XHRpZiAobmVlZHNfemVyb2luZylcbiBcdFx0XHRpbm9kZV9kaW9fd2FpdChpbm9kZSk7XG4gXHRcdCpkaW9fZmxhZ3MgPSBJT01BUF9ESU9fRk9SQ0VfV0FJVDtcbiBcdH1cbiBcbi1cdHJldCA9IGZpbGVfbW9kaWZpZWQoZmlsZSk7XG4rXHRyZXQgPSBraW9jYl9tb2RpZmllZChpb2NiKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdGdvdG8gb3V0O1xuIFxuQEAgLTY3Miw2ICs3MzEsMTEgQEAgZXh0NF9kYXhfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbiBcdGNvdW50ID0gaW92X2l0ZXJfY291bnQoZnJvbSk7XG4gXG4gXHRpZiAob2Zmc2V0ICsgY291bnQgXHUwMDNlIEVYVDRfSShpbm9kZSktXHUwMDNlaV9kaXNrc2l6ZSkge1xuK1x0XHRpZiAoaW9jYi1cdTAwM2VraV9mbGFncyBcdTAwMjYgSU9DQl9OT1dBSVQpIHtcbitcdFx0XHRyZXQgPSAtRUFHQUlOO1xuK1x0XHRcdGdvdG8gb3V0O1xuK1x0XHR9XG4rXG4gXHRcdGhhbmRsZSA9IGV4dDRfam91cm5hbF9zdGFydChpbm9kZSwgRVhUNF9IVF9JTk9ERSwgMik7XG4gXHRcdGlmIChJU19FUlIoaGFuZGxlKSkge1xuIFx0XHRcdHJldCA9IFBUUl9FUlIoaGFuZGxlKTtcbmRpZmYgLS1naXQgYS9mcy9leHQ0L2lub2RlLmMgYi9mcy9leHQ0L2lub2RlLmNcbmluZGV4IGMyYzJkNmFjN2YzZDEzLi4zYzA1MDk0NDc1ZGIxYyAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvaW5vZGUuY1xuKysrIGIvZnMvZXh0NC9pbm9kZS5jXG5AQCAtNzU5LDggKzc1OSw5IEBAIGludCBleHQ0X21hcF9ibG9ja3MoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHRCVUcoKTtcbiBcdFx0fVxuIFxuK1x0XHQvKiBTa2lwIGJsb2NraW5nIG9wZXJhdGlvbnMgYW5kIGp1bXAgdG8gZXh0ZW50IHZhbGlkYXRpb24uICovXG4gXHRcdGlmIChmbGFncyBcdTAwMjYgRVhUNF9HRVRfQkxPQ0tTX0NBQ0hFRF9OT1dBSVQpXG4tXHRcdFx0cmV0dXJuIHJldHZhbDtcbitcdFx0XHRnb3RvIGZvdW5kO1xuICNpZmRlZiBFU19BR0dSRVNTSVZFX1RFU1RcbiBcdFx0ZXh0NF9tYXBfYmxvY2tzX2VzX3JlY2hlY2soaGFuZGxlLCBpbm9kZSwgbWFwLFxuIFx0XHRcdFx0XHQgICBcdTAwMjZvcmlnX21hcCwgZmxhZ3MpO1xuQEAgLTc3Niw3ICs3NzcsNyBAQCBpbnQgZXh0NF9tYXBfYmxvY2tzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHQgKiBjYW5ub3QgZmluZCBleHRlbnQgaW4gdGhlIGNhY2hlLlxuIFx0ICovXG4gXHRpZiAoZmxhZ3MgXHUwMDI2IEVYVDRfR0VUX0JMT0NLU19DQUNIRURfTk9XQUlUKVxuLVx0XHRyZXR1cm4gMDtcbitcdFx0cmV0dXJuIC1FQUdBSU47XG4gXG4gXHQvKlxuIFx0ICogVHJ5IHRvIHNlZSBpZiB3ZSBjYW4gZ2V0IHRoZSBibG9jayB3aXRob3V0IHJlcXVlc3RpbmcgYSBuZXdcbkBAIC03OTcsNiArNzk4LDkgQEAgaW50IGV4dDRfbWFwX2Jsb2NrcyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0aWYgKChmbGFncyBcdTAwMjYgRVhUNF9HRVRfQkxPQ0tTX0NSRUFURSkgPT0gMClcbiBcdFx0cmV0dXJuIHJldHZhbDtcbiBcbitcdC8qIEVYVDRfR0VUX0JMT0NLU19DUkVBVEUgY2Fubm90IG9wZXJhdGUgaW4gTk9XQUlUIG1vZGUgKi9cbitcdFdBUk5fT05fT05DRShmbGFncyBcdTAwMjYgRVhUNF9HRVRfQkxPQ0tTX0NBQ0hFRF9OT1dBSVQpO1xuK1xuIFx0LypcbiBcdCAqIFJldHVybnMgaWYgdGhlIGJsb2NrcyBoYXZlIGFscmVhZHkgYWxsb2NhdGVkXG4gXHQgKlxuQEAgLTM2NzIsNiArMzY3Niw5IEBAIHN0YXRpYyBpbnQgZXh0NF9pb21hcF9hbGxvYyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZXh0NF9tYXBfYmxvY2tzICptYXAsXG4gXHRpbnQgcmV0LCBkaW9fY3JlZGl0cywgbV9mbGFncyA9IDAsIHJldHJpZXMgPSAwO1xuIFx0Ym9vbCBmb3JjZV9jb21taXQgPSBmYWxzZTtcbiBcbitcdGlmIChmbGFncyBcdTAwMjYgSU9NQVBfTk9XQUlUKVxuK1x0XHRyZXR1cm4gLUVBR0FJTjtcbitcbiBcdC8qXG4gXHQgKiBUcmltIHRoZSBtYXBwaW5nIHJlcXVlc3QgdG8gdGhlIG1heGltdW0gdmFsdWUgdGhhdCB3ZSBjYW4gbWFwIGF0XG4gXHQgKiBvbmNlIGZvciBkaXJlY3QgSS9PLlxuQEAgLTM3NzcsNiArMzc4NCw3IEBAIHN0YXRpYyBpbnQgZXh0NF9pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuZ3RoLFxuIFx0c3RydWN0IGV4dDRfbWFwX2Jsb2NrcyBtYXA7XG4gXHR1OCBibGtiaXRzID0gaW5vZGUtXHUwMDNlaV9ibGtiaXRzO1xuIFx0dW5zaWduZWQgaW50IG9yaWdfbWxlbjtcbitcdGludCBtYXBfZmxhZ3MgPSAwO1xuIFxuIFx0aWYgKChvZmZzZXQgXHUwMDNlXHUwMDNlIGJsa2JpdHMpIFx1MDAzZSBFWFQ0X01BWF9MT0dJQ0FMX0JMT0NLKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbkBAIC0zNzkxLDYgKzM3OTksMTIgQEAgc3RhdGljIGludCBleHQ0X2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW5ndGgsXG4gXHRtYXAubV9sZW4gPSBtaW5fdChsb2ZmX3QsIChvZmZzZXQgKyBsZW5ndGggLSAxKSBcdTAwM2VcdTAwM2UgYmxrYml0cyxcbiBcdFx0XHQgIEVYVDRfTUFYX0xPR0lDQUxfQkxPQ0spIC0gbWFwLm1fbGJsayArIDE7XG4gXHRvcmlnX21sZW4gPSBtYXAubV9sZW47XG4rXHQvKlxuK1x0ICogSW4gTk9XQUlUIGNvbnRleHQsIG9ubHkgdXNlIGNhY2hlZCBleHRlbnQgaW5mby4gSWYgZXMgY2FjaGUgbWlzc2VzLFxuK1x0ICogcmV0dXJuIC1FQUdBSU4gdG8gYXZvaWQgc2xlZXBpbmcgb24gZG93bl9yZWFkKGlfZGF0YV9zZW0pLlxuK1x0ICovXG4rXHRpZiAoZmxhZ3MgXHUwMDI2IElPTUFQX05PV0FJVClcbitcdFx0bWFwX2ZsYWdzID0gRVhUNF9HRVRfQkxPQ0tTX0NBQ0hFRF9OT1dBSVQ7XG4gXG4gXHRpZiAoZmxhZ3MgXHUwMDI2IElPTUFQX1dSSVRFKSB7XG4gXHRcdC8qXG5AQCAtMzgwMCw3ICszODE0LDcgQEAgc3RhdGljIGludCBleHQ0X2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW5ndGgsXG4gXHRcdCAqIGVzcGVjaWFsbHkgaW4gbXVsdGktdGhyZWFkZWQgb3ZlcndyaXRlIHJlcXVlc3RzLlxuIFx0XHQgKi9cbiBcdFx0aWYgKG9mZnNldCArIGxlbmd0aCBcdTAwM2M9IGlfc2l6ZV9yZWFkKGlub2RlKSkge1xuLVx0XHRcdHJldCA9IGV4dDRfbWFwX2Jsb2NrcyhOVUxMLCBpbm9kZSwgXHUwMDI2bWFwLCAwKTtcbitcdFx0XHRyZXQgPSBleHQ0X21hcF9ibG9ja3MoTlVMTCwgaW5vZGUsIFx1MDAyNm1hcCwgbWFwX2ZsYWdzKTtcbiBcdFx0XHQvKlxuIFx0XHRcdCAqIEZvciBEQVggd2UgY29udmVydCBleHRlbnRzIHRvIGluaXRpYWxpemVkIG9uZXMgYmVmb3JlXG4gXHRcdFx0ICogY29weWluZyB0aGUgZGF0YSwgb3RoZXJ3aXNlIHdlIGRvIGl0IGFmdGVyIEkvTyBzb1xuQEAgLTM4MjEsNyArMzgzNSw3IEBAIHN0YXRpYyBpbnQgZXh0NF9pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuZ3RoLFxuIFx0XHR9XG4gXHRcdHJldCA9IGV4dDRfaW9tYXBfYWxsb2MoaW5vZGUsIFx1MDAyNm1hcCwgZmxhZ3MpO1xuIFx0fSBlbHNlIHtcbi1cdFx0cmV0ID0gZXh0NF9tYXBfYmxvY2tzKE5VTEwsIGlub2RlLCBcdTAwMjZtYXAsIDApO1xuK1x0XHRyZXQgPSBleHQ0X21hcF9ibG9ja3MoTlVMTCwgaW5vZGUsIFx1MDAyNm1hcCwgbWFwX2ZsYWdzKTtcbiBcdH1cbiBcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwOTowODoxNS40NTU1NTExMjNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3OTk0OTU2NDA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRGlyZWN0IEkvTyAoRElPKSBDaGFuZ2VzIGluIGV4dDQqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGFmZmVjdGluZyBgZnMvZXh0NC9maWxlLmNgIGFuZCBgZnMvZXh0NC9pbm9kZS5jYC4gSXQncyBhbGwgYWJvdXQgRElPLCBwYXJ0aWN1bGFybHkgZGVhbGluZyB3aXRoIHVuYWxpZ25lZCB3cml0ZXMgYW5kIHRoZSBhc3NvY2lhdGVkIGxvY2tpbmcgbWVjaGFuaXNtcyB3aXRoaW4gZXh0NC4gSW50ZXJlc3RpbmcuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgYXBwZWFycyB0byBiZSBjZW50ZXJlZCBhcm91bmQgYGV4dDRfZGlvX25lZWRzX3plcm9pbmdgLCB3aGljaCBzZWVtcyB0byBiZSByZXBsYWNpbmcgYGV4dDRfb3ZlcndyaXRlX2lvYC4gSXQgYWxzbyBpbXBhY3RzIGBleHQ0X2Rpb193cml0ZV9jaGVja3NgIGFuZCBpbnRyb2R1Y2VzIGNoYW5nZXMgdG8gbG9ja2luZy4gUmVwbGFjaW5nIGBmaWxlX21vZGlmaWVkYCB3aXRoIGBraW9jYl9tb2RpZmllZGAgaXMgYSBnb29kIHJlZmluZW1lbnQuIEFuZCB0aGVyZSdzIHRoaXMgYGlub2RlX2Rpb193YWl0KGlub2RlKWAgYWRkaXRpb24gaW4gYGV4dDRfYnVmZmVyZWRfd3JpdGVfaXRlcmAsIHJpZ2h0LiBJIGFtIHNlZWluZyBtb2RpZmljYXRpb25zIHRvIGBleHQ0X2RheF93cml0ZV9pdGVyYCBmb3IgYElPQ0JfTk9XQUlUYCwgd2hpY2ggaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCBtZXJpdHMgZXhhbWluYXRpb24sIGFsb25nIHdpdGggdXBkYXRlcyB0byBgZXh0NF9tYXBfYmxvY2tzYCB0byBiZXR0ZXIgaGFuZGxlIGBFWFQ0X0dFVF9CTE9DS1NfQ0FDSEVEX05PV0FJVGAuIEZpbmFsbHksIGBleHQ0X2lvbWFwX2FsbG9jYCBhbmQgYGV4dDRfaW9tYXBfYmVnaW5gIGFyZSB1cGRhdGVkIGZvciBgSU9NQVBfTk9XQUlUYC5cblxuVGhpcyBpcyBhbGwgZnVuY3Rpb25hbCBsb2dpYywgdmVyeSBjb3JlIHRvIGV4dDQuIFdlIGRlZmluaXRlbHkgbmVlZCB0byBmdXp6IHRoaXMgYXJlYS4gVGhlc2Ugc29ydHMgb2YgY2hhbmdlcyBhcmUgZ29sZCBtaW5lcyBmb3IgdW5jb3ZlcmluZyB0cmlja3kgY29uY3VycmVuY3kgYnVncyBvciBzdWJ0bGUgSS9PIGVycm9ycy5cblxuTm93LCBsZXQncyB6ZXJvIGluIG9uIHRoZSBrZXkgZnVuY3Rpb25zIG1vZGlmaWVkLiBJdCBsb29rcyBsaWtlIGl0IGlzOlxuXG4qICAgYGV4dDRfZGlvX25lZWRzX3plcm9pbmdgIChuZXcpXG4qICAgYGV4dDRfZGlvX3dyaXRlX2NoZWNrc2BcbiogICBgZXh0NF9idWZmZXJlZF93cml0ZV9pdGVyYFxuKiAgIGBleHQ0X2RheF93cml0ZV9pdGVyYFxuKiAgIGBleHQ0X21hcF9ibG9ja3NgXG4qICAgYGV4dDRfaW9tYXBfYWxsb2NgXG4qICAgYGV4dDRfaW9tYXBfYmVnaW5gXG5cbkFscmlnaHQsIGxldCdzIHNlZSwgaXQgbG9va3MgbGlrZSBgZXh0NF9kaW9fbmVlZHNfemVyb2luZ2AsIGBleHQ0X2Rpb193cml0ZV9jaGVja3NgLCBgZXh0NF9idWZmZXJlZF93cml0ZV9pdGVyYCwgYGV4dDRfZGF4X3dyaXRlX2l0ZXJgLCBgZXh0NF9pb21hcF9hbGxvY2AsIGFuZCBgZXh0NF9pb21hcF9iZWdpbmAgYXJlIHN0YXRpYyBhbmQgaW50ZXJuYWwgdG8gZXh0NC4gSG93ZXZlciwgYGV4dDRfbWFwX2Jsb2Nrc2AgaXMgZXhwb3J0ZWQsIG1lYW5pbmcgaXQncyBhY2Nlc3NpYmxlIGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbC4gR29vZCB0byBrbm93IGFzIGl0J3Mgb2Z0ZW4gYW4gZW50cnkgcG9pbnQuXG5cbk9rYXksIHdhaXQgYSBzZWNvbmQuIGBleHQ0X2ZpbGVfd3JpdGVfaXRlcmAgY2FsbHMgZWl0aGVyIGBleHQ0X2Rpb193cml0ZV9pdGVyYCwgYGV4dDRfYnVmZmVyZWRfd3JpdGVfaXRlcmAsIG9yIGBleHQ0X2RheF93cml0ZV9pdGVyYC4gSSBuZWVkIHRvIGNoZWNrIGBmcy9leHQ0L2ZpbGUuY2AgdG8gcGlucG9pbnQgdGhlIGFjdHVhbCBlbnRyeSBwb2ludHMsIGFuZCB2ZXJpZnkgaG93IHRob3NlIERJTyBpbXBsZW1lbnRhdGlvbnMgYXJlIHV0aWxpemVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTY3LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTM2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDk6MDg6MjMuNDUwNTA5OTI4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNDAzMzkxOTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXh0NF9kaW9fd3JpdGVfY2hlY2tzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvZmlsZS5jPTQ2Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGlvbWFwX2Rpb19vcHMgZXh0NF9kaW9fd3JpdGVfb3BzID0ge1xcbi0tXFxuZnMvZXh0NC9maWxlLmMtNDk0LSAqL1xcbmZzL2V4dDQvZmlsZS5jOjQ5NTpzdGF0aWMgc3NpemVfdCBleHQ0X2Rpb193cml0ZV9jaGVja3Moc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXFxuZnMvZXh0NC9maWxlLmMtNDk2LVxcdFxcdFxcdFxcdCAgICAgYm9vbCAqaWxvY2tfc2hhcmVkLCBib29sICpleHRlbmQsXFxuLS1cXG5mcy9leHQ0L2ZpbGUuYz01Nzg9c3RhdGljIHNzaXplX3QgZXh0NF9kaW9fd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcXG4tLVxcbmZzL2V4dDQvZmlsZS5jLTU5MC1cXHQgKiBRdWljayBjaGVjayBoZXJlIHdpdGhvdXQgYW55IGlfcndzZW0gbG9jayB0byBzZWUgaWYgaXQgaXMgZXh0ZW5kaW5nXFxuZnMvZXh0NC9maWxlLmM6NTkxOlxcdCAqIElPLiBBIG1vcmUgcmVsaWFibGUgY2hlY2sgaXMgZG9uZSBpbiBleHQ0X2Rpb193cml0ZV9jaGVja3MoKSB3aXRoXFxuZnMvZXh0NC9maWxlLmMtNTkyLVxcdCAqIHByb3BlciBsb2NraW5nIGluIHBsYWNlLlxcbi0tXFxuZnMvZXh0NC9maWxlLmMtNjI5LVxcbmZzL2V4dDQvZmlsZS5jOjYzMDpcXHRyZXQgPSBleHQ0X2Rpb193cml0ZV9jaGVja3MoaW9jYiwgZnJvbSwgXFx1MDAyNmlsb2NrX3NoYXJlZCwgXFx1MDAyNmV4dGVuZCxcXG5mcy9leHQ0L2ZpbGUuYy02MzEtXFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZkaW9fZmxhZ3MpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwOTowODoyNy43OTA4NTk4MTlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTY0MjcwMjQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBleHQ0X2ZpbGVfd3JpdGVfaXRlcmAqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIGBleHQ0X2ZpbGVfd3JpdGVfaXRlcmAuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgY29yZSB3cml0ZSBwYXRoIGZvciBleHQ0LiBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGRhdGEgZmxvdyDigJMgd2hlcmUgaXQgc3RhcnRzLCBob3cgaXQgaGFuZGxlcyB0aGUgSU8gdmVjdG9yLCB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgYmxvY2sgYWxsb2NhdG9yLCB0aGUgam91cm5hbCwgYW5kIHRoZSBkaXJ0eWluZyBvZiBpbm9kZXMgYW5kIGJsb2NrIGdyb3Vwcy4gSSdtIGFsc28gY3VyaW91cyBhYm91dCB0aGUgbG9ja2luZyBzY2hlbWU7IEkgYXNzdW1lIHRoZXJlJ3MgYSBnb29kIGFtb3VudCBvZiBjb25jdXJyZW5jeSBjb250cm9sIGludm9sdmVkLCBnaXZlbiB0aGUgcG90ZW50aWFsIGZvciBtdWx0aXBsZSB3cml0ZXJzLiBJIG5lZWQgdG8ga2VlcCB0aGUgc3BlY2lmaWNzIG9mIHRoZSBqb3VybmFsaW5nIGltcGxlbWVudGF0aW9uIGluIG1pbmQgLSB0aGUgbnVhbmNlcyBvZiBtZXRhZGF0YSB1cGRhdGVzIHZlcnN1cyBkYXRhIHdyaXRlcy4gSSB3aWxsIGZvY3VzIG9uIHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBJL08gdmVjdG9ycywgYW5kIHRoZSB1bmRlcmx5aW5nIGJsb2NrcyB0aGF0IGFyZSBiZWluZyB3cml0dGVuIHRvIGRpc2sgLSBob3cgdGhleSB3aWxsIGJlIGRlYWx0IHdpdGggaW4gdGhlIGV4dGVudCB0cmVlLiBJIGFsc28gbmVlZCB0byBiZSBhd2FyZSBvZiBob3cgZGlyZWN0IEkvTyBhbmQgYnVmZmVyZWQgSS9PIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGlzIGZ1bmN0aW9uOyBJJ2xsIGV4cGVjdCB0byBzZWUgYnJhbmNoaW5nIGJhc2VkIG9uIHRoZSBmbGFncy4gQW5kLCBvZiBjb3Vyc2UsIEknbGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZXJyb3IgaGFuZGxpbmcgLSB3aGF0J3MgdGhlIGV4cGVjdGVkIGJlaGF2aW9yIHVuZGVyIHZhcmlvdXMgZmFpbHVyZSBzY2VuYXJpb3MsIGFuZCBob3cgYXJlIGVycm9ycyBwcm9wYWdhdGVkIGJhY2sgdXAgdGhlIHN0YWNrLiBJdOKAmXMgYWxzbyB3b3J0aCBjb25zaWRlcmluZyBob3cgd3JpdGViYWNrIGFuZCBwYWdlIGZhdWx0IGhhbmRsaW5nIGlzIGludGVncmF0ZWQsIGFzIHRoYXQgaGFzIGltcGxpY2F0aW9ucyBmb3IgdGhlIG92ZXJhbGwgcGVyZm9ybWFuY2UgcHJvZmlsZS4gSXQncyB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzY5NiwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA5OjA4OjMxLjM1NTEzMjQ0NVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTE3OTkyODM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV4dDRfZmlsZV93cml0ZV9pdGVyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvZmlsZS5jPTc2OT1zdGF0aWMgc3NpemVfdFxcbmZzL2V4dDQvZmlsZS5jOjc3MDpleHQ0X2ZpbGVfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcXG5mcy9leHQ0L2ZpbGUuYy03NzEte1xcbi0tXFxuZnMvZXh0NC9maWxlLmM9MTAzOD1jb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGV4dDRfZmlsZV9vcGVyYXRpb25zID0ge1xcbi0tXFxuZnMvZXh0NC9maWxlLmMtMTA0MC1cXHQucmVhZF9pdGVyXFx0PSBleHQ0X2ZpbGVfcmVhZF9pdGVyLFxcbmZzL2V4dDQvZmlsZS5jOjEwNDE6XFx0LndyaXRlX2l0ZXJcXHQ9IGV4dDRfZmlsZV93cml0ZV9pdGVyLFxcbmZzL2V4dDQvZmlsZS5jLTEwNDItXFx0LmlvcG9sbFxcdFxcdD0gaW9jYl9iaW9faW9wb2xsLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwOTowODozNS44NzMxMjk1MTJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDQ0OTc1MDU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUHJvcG9zZWQgRXh0NCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBteSBtaW5kIGhvbmVzIGluIG9uIGBleHQ0X2ZpbGVfd3JpdGVfaXRlcmAuIFRoYXQncyB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCwgdGhlIGZpcnN0IHBsYWNlIEknZCB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdy4gQnV0IHdhaXQsIGl0J3Mgbm90IGp1c3QgdGhhdC4gVGhlIHBhdGNoIHRvdWNoZXMgc2V2ZXJhbCBvdGhlciBrZXkgYXJlYXMuIEl0J3MgbW9kaWZ5aW5nIGBleHQ0X2Rpb193cml0ZV9pdGVyYCwgYGV4dDRfYnVmZmVyZWRfd3JpdGVfaXRlcmAsIGFuZCBgZXh0NF9kYXhfd3JpdGVfaXRlcmAg4oCTIHRob3NlIGFyZSBhbGwgY3J1Y2lhbCBmb3IgZGlyZWN0IEkvTywgYnVmZmVyZWQgSS9PLCBhbmQgREFYIHdyaXRlcywgcmVzcGVjdGl2ZWx5LlxuXG5Ib2xkIG9uLCBJIHNlZSBpdCdzIGFsc28gY2hhbmdpbmcgYGV4dDRfZGlvX3dyaXRlX2NoZWNrc2AsIHdoaWNoIGlzICpjYWxsZWQqIGJ5IGBleHQ0X2Rpb193cml0ZV9pdGVyYC4gSW50ZXJlc3RpbmcuIFRoYXTigJlzIHByb2JhYmx5IHRoZSBpbXBvcnRhbnQgYml0IG9mIGRpcmVjdCBJL08uXG5cbk9rYXksIGxldCdzIG1ha2UgYSBtZW50YWwgbGlzdCBoZXJlIG9mIHRoZSBrZXkgZnVuY3Rpb25zIHRoaXMgcGF0Y2ggaXMgcGxheWluZyB3aXRoLCB0byBoZWxwIG1lIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiB0aGUgcGF0Y2guXG5cbiogICBgZXh0NF9maWxlX3dyaXRlX2l0ZXJgICh0aGUgYmlnIGthaHVuYSlcbiogICBgZXh0NF9kaW9fd3JpdGVfaXRlcmAgKERpcmVjdCBJL08pXG4qICAgYGV4dDRfYnVmZmVyZWRfd3JpdGVfaXRlcmAgKEJ1ZmZlcmVkIEkvTylcbiogICBgZXh0NF9kYXhfd3JpdGVfaXRlcmAgKERBWC1zcGVjaWZpYyB3cml0ZXMpXG4qICAgYGV4dDRfbWFwX2Jsb2Nrc2AgKEJsb2NrIG1hcHBpbmcsIHZlcnkgaW1wb3J0YW50LCBhbmQgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMpXG4qICAgYGV4dDRfaW9tYXBfYmVnaW5gIChJL08gbWFwIC0gYmVnaW5uaW5nKS5cblxuSG1tLCBub3cgd2hpY2ggb2YgdGhlc2UgaXMgdGhlICpiZXN0KiB0byBmb2N1cyBvbj8gSSB0aGluayBgZXh0NF9maWxlX3dyaXRlX2l0ZXJgIGFuZCBgZXh0NF9kaW9fd3JpdGVfaXRlcmAgc2VlbSBsaWtlIGdvb2Qgb3B0aW9ucyB0byBzdGFydCB3aXRoLiBMZXQncyBzZWUgaWYgYGV4dDRfZGlvX3dyaXRlX2l0ZXJgIGlzIHN0YXRpYy4gSXQgaXMsIHNvIHRoYXQgaXMgYSBnb29kIHNpZ24uIFdlIGNhbiBkZWZpbml0ZWx5IHVzZSBzdGF0aWMgZnVuY3Rpb25zIGluIHN5emthbGxlci4gQnV0IG1heWJlIGBleHQ0X2ZpbGVfd3JpdGVfaXRlcmAgaXMgdGhlIGJldHRlciBjaG9pY2UuIEknbGwgbmVlZCB0byB0aGluayBhYm91dCB3aGljaCBpcyBiZXR0ZXIuXG5cbkknbSBhIGxpdHRsZSB3YXJ5IG9mIGBleHQ0X21hcF9ibG9ja3NgLiBJdCdzIGluY3JlZGlibHkgY29tbW9uLCBhbmQgdGhpcyBwYXRjaCBtaWdodCBiZSBhZmZlY3RpbmcgaXRzIGNvcmUgZnVuY3Rpb25hbGl0eS4gSXQgY291bGQgYmUgdG9vIFwiaG90XCIgdG8gYmUgYSBnb29kIGZvY3VzLCBvciBpdCBjb3VsZCBiZSAqdGhlKiBjcnVjaWFsIHBhcnQgb2YgdGhpcyBwYXRjaC4gQmV0dGVyIHRvIGludmVzdGlnYXRlIHRoYXQgY2FyZWZ1bGx5LlxuXG5JIHNob3VsZCBhbHNvIGNoZWNrIG91dCBgZXh0NF9pb21hcF9iZWdpbmAgdG8gdW5kZXJzdGFuZCB0aGUgYmlnZ2VyIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyNDAsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDk6MDg6NDIuOTE4MTA2ODk3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3NTkxNTE0MTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXh0NF9pb21hcF9iZWdpblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L2lub2RlLmM9MzY3Mj1zdGF0aWMgaW50IGV4dDRfaW9tYXBfYWxsb2Moc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dDRfbWFwX2Jsb2NrcyAqbWFwLFxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTM3NzktXFxuZnMvZXh0NC9pbm9kZS5jOjM3ODA6c3RhdGljIGludCBleHQ0X2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW5ndGgsXFxuZnMvZXh0NC9pbm9kZS5jLTM3ODEtXFx0XFx0dW5zaWduZWQgZmxhZ3MsIHN0cnVjdCBpb21hcCAqaW9tYXAsIHN0cnVjdCBpb21hcCAqc3JjbWFwKVxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jPTM4NjY9Y29uc3Qgc3RydWN0IGlvbWFwX29wcyBleHQ0X2lvbWFwX29wcyA9IHtcXG5mcy9leHQ0L2lub2RlLmM6Mzg2NzpcXHQuaW9tYXBfYmVnaW5cXHRcXHQ9IGV4dDRfaW9tYXBfYmVnaW4sXFxuZnMvZXh0NC9pbm9kZS5jLTM4NjgtfTtcXG5mcy9leHQ0L2lub2RlLmMtMzg2OS1cXG5mcy9leHQ0L2lub2RlLmM6Mzg3MDpzdGF0aWMgaW50IGV4dDRfaW9tYXBfYmVnaW5fcmVwb3J0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsXFxuZnMvZXh0NC9pbm9kZS5jLTM4NzEtXFx0XFx0XFx0XFx0ICAgbG9mZl90IGxlbmd0aCwgdW5zaWduZWQgaW50IGZsYWdzLFxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jPTM5MjE9Y29uc3Qgc3RydWN0IGlvbWFwX29wcyBleHQ0X2lvbWFwX3JlcG9ydF9vcHMgPSB7XFxuZnMvZXh0NC9pbm9kZS5jOjM5MjI6XFx0LmlvbWFwX2JlZ2luID0gZXh0NF9pb21hcF9iZWdpbl9yZXBvcnQsXFxuZnMvZXh0NC9pbm9kZS5jLTM5MjMtfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDk6MDg6NDYuNjc3MjY0OTdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDE2ODEyMjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBleHQ0IHNpdHVhdGlvbiBoZXJlLiAqKkNoZWNraW5nIEVYVDQgQ29uZmlndXJhdGlvbioqXG5cbkZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSBpZiBFWFQ0IGlzIGV2ZW4gZW5hYmxlZCBieSBkZWZhdWx0LiBBaCwgeWVzLCBpdCdzIGEgY29yZSBmaWxlc3lzdGVtLiBObyBzdXJwcmlzZSB0aGVyZS4gTm93LCBpcyB0aGVyZSBhbnl0aGluZyBzcGVjaWZpYyBJIG5lZWQgdG8gd2F0Y2ggb3V0IGZvciBpbiB0aGUgY29uZmlndXJhdGlvbj8gTGV0J3Mgc2VlLi4uIGBDT05GSUdfRVhUNF9GU2AsIHRoYXQncyB0aGUgcHJpbWFyeSBmbGFnLCBJIGtuZXcgdGhhdC5cblxuT2theSwgd2hhdCBhYm91dCBEaXJlY3QgQWNjZXNzIChEQVgpIHN1cHBvcnQ/IEkgcmVtZW1iZXIgc29tZSBjb21wbGV4aXRpZXMgd2l0aCB0aGF0LiBMZXQgbWUgcXVpY2tseSBzZWUgaWYgdGhlcmUgYXJlIGFueSBEQVggc3BlY2lmaWMgZmlsZXMuIEFscmlnaHQsIEkgY2FuIHNlZSB0aGF0IGBleHQ0X2RheF93cml0ZV9pdGVyYCBoYXMgYmVlbiBtb2RpZmllZCwgd2hpY2ggbWVhbnMgaXQgaXMgbGlrZWx5IHN1cHBvcnRlZC4gT2theSwgc28gREFYIHdpbGwgcmVxdWlyZSBgQ09ORklHX0ZTX0RBWGAgdG8gYWxzbyBiZSBlbmFibGVkLiBHb3QgaXQsIG1vdmluZyBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTU2MywiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA5OjA4OjUxLjA5NDA4MjQ0OFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI5MDI1NTYwMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJleHQ0X2RheF93cml0ZV9pdGVyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvZmlsZS5jPTcwOT1zdGF0aWMgc3NpemVfdFxcbmZzL2V4dDQvZmlsZS5jOjcxMDpleHQ0X2RheF93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxcbmZzL2V4dDQvZmlsZS5jLTcxMS17XFxuLS1cXG5mcy9leHQ0L2ZpbGUuYz03NzA9ZXh0NF9maWxlX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXFxuLS1cXG5mcy9leHQ0L2ZpbGUuYy03ODAtXFx0aWYgKElTX0RBWChpbm9kZSkpXFxuZnMvZXh0NC9maWxlLmM6NzgxOlxcdFxcdHJldHVybiBleHQ0X2RheF93cml0ZV9pdGVyKGlvY2IsIGZyb20pO1xcbmZzL2V4dDQvZmlsZS5jLTc4Mi0jZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDk6MDg6NTUuMzg0MzQ2ODZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE1MDM5Mjk3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgZGlzdGlsbGVkOlxuXG4qKkNoZWNraW5nIGBDT05GSUdfRlNfREFYYCBEZXBlbmRlbmN5KipcblxuT2theSwgc28gdGhpcyBwYXRjaCB0b3VjaGVzIGBleHQ0X2RheF93cml0ZV9pdGVyYC4gSW1tZWRpYXRlbHksIHRoZSBhbGFybSBiZWxscyBhcmUgcmluZ2luZyBhYm91dCBgQ09ORklHX0ZTX0RBWGAuIEl0J3MgcHJldHR5IGxpa2VseSB0aGlzIGZ1bmN0aW9uIGlzIGd1YXJkZWQgYnkgdGhhdCBkZWZpbmUuIEkgbmVlZCB0byBjb25maXJtIHRoaXMgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIuIEJlc3QgYmV0IGlzIHRvIGp1bXAgb3ZlciB0byBgZnMvZXh0NC9maWxlLmNgIGFuZCB0YWtlIGEgbG9vayBhcm91bmQgbGluZSA3ODAuIFNlZSBpZiB0aGF0J3Mgd2hlcmUgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGhhcHBlbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDQwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDk6MDg6NTguNTM0NzQyNzk1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NjczMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9leHQ0L2ZpbGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3NzAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3NzA6XFx0ZXh0NF9maWxlX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXFxuIDc3MTpcXHR7XFxuIDc3MjpcXHRcXHRpbnQgcmV0O1xcbiA3NzM6XFx0XFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoaW9jYi1cXHUwMDNla2lfZmlscCk7XFxuIDc3NDpcXHRcXG4gNzc1OlxcdFxcdHJldCA9IGV4dDRfZW1lcmdlbmN5X3N0YXRlKGlub2RlLVxcdTAwM2VpX3NiKTtcXG4gNzc2OlxcdFxcdGlmICh1bmxpa2VseShyZXQpKVxcbiA3Nzc6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gNzc4OlxcdFxcbiA3Nzk6XFx0I2lmZGVmIENPTkZJR19GU19EQVhcXG4gNzgwOlxcdFxcdGlmIChJU19EQVgoaW5vZGUpKVxcbiA3ODE6XFx0XFx0XFx0cmV0dXJuIGV4dDRfZGF4X3dyaXRlX2l0ZXIoaW9jYiwgZnJvbSk7XFxuIDc4MjpcXHQjZW5kaWZcXG4gNzgzOlxcdFxcbiA3ODQ6XFx0XFx0aWYgKGlvY2ItXFx1MDAzZWtpX2ZsYWdzIFxcdTAwMjYgSU9DQl9BVE9NSUMpIHtcXG4gNzg1OlxcdFxcdFxcdHNpemVfdCBsZW4gPSBpb3ZfaXRlcl9jb3VudChmcm9tKTtcXG4gNzg2OlxcdFxcbiA3ODc6XFx0XFx0XFx0aWYgKGxlbiBcXHUwMDNjIEVYVDRfU0IoaW5vZGUtXFx1MDAzZWlfc2IpLVxcdTAwM2VzX2F3dV9taW4gfHxcXG4gNzg4OlxcdFxcdFxcdCAgICBsZW4gXFx1MDAzZSBFWFQ0X1NCKGlub2RlLVxcdTAwM2VpX3NiKS1cXHUwMDNlc19hd3VfbWF4KVxcbiA3ODk6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA5OjA4OjU4LjUzNDk5MjM5NVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4ODY4NDI3NzI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIEV4dDQgV3JpdGUgUGF0aCBUZXN0aW5nKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGVzdGluZyB0aGVzZSBleHQ0IHdyaXRlIHBhdGhzLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgYENPTkZJR19GU19EQVhgIHdvdWxkIGJlIHRoZSBrZXksIHNpbmNlIHRoZSBwcmltYXJ5IGZvY3VzIGlzIG9uIGBleHQ0X2RheF93cml0ZV9pdGVyYC4gQnV0IGhvbGQgb24uLi4gdGhpcyBwYXRjaCBhbHNvIHRvdWNoZXMgYGV4dDRfZGlvX3dyaXRlX2NoZWNrc2AgYW5kIGBleHQ0X2J1ZmZlcmVkX3dyaXRlX2l0ZXJgLCB3aGljaCBhcmVuJ3QgbmVjZXNzYXJpbHkgREFYLXNwZWNpZmljLiBUaGF0IG1lYW5zIGBDT05GSUdfRVhUNF9GU2AgaXMgdGhlIHJlYWwgYmFzZWxpbmUgcmVxdWlyZW1lbnQsIGJ1dCBgRlNfREFYYCBpcyBhbHNvIHVzZWZ1bCBhbmQgZ29vZCB0byBoYXZlIGVuYWJsZWQgdG8gdGVzdCB0aGUgREFYIGNvbXBvbmVudC5cblxuSSBzaG91bGQgcHJvYmFibHkgcmV2aWV3IGhvdyB0aG9zZSBhcmUgdXNlZC4gU28gbGV0IG1lIGNoZWNrIGBleHQ0X2Rpb19uZWVkc196ZXJvaW5nYCBhbmQgYGV4dDRfZGlvX3dyaXRlX2NoZWNrc2AuIFJpZ2h0LCB0aG9zZSBhcmUgcmVsYXRlZCB0byBEaXJlY3QgSS9PLlxuXG5MZXQncyBtYWtlIGEgbGlzdCBvZiBzeW1ib2xzIEkgc2hvdWxkIGZvY3VzIG9uIGZvciB0aGlzOlxuKiAgIGBleHQ0X2Rpb193cml0ZV9pdGVyYFxuKiAgIGBleHQ0X2J1ZmZlcmVkX3dyaXRlX2l0ZXJgXG4qICAgYGV4dDRfZGF4X3dyaXRlX2l0ZXJgXG4qICAgYGV4dDRfZmlsZV93cml0ZV9pdGVyYFxuKiAgIGBleHQ0X2lvbWFwX2JlZ2luYFxuXG5Ob3csIGxldCdzIHZlcmlmeSBpZiBlYWNoIG9mIHRoZXNlIHN5bWJvbHMgaXMgc3RhdGljIG9yIGdsb2JhbC4gIE9rYXksIEkgc2VlIHRoYXQuLi5cbiogICBgZXh0NF9kaW9fd3JpdGVfaXRlcmAgaXMgc3RhdGljLlxuKiAgIGBleHQ0X2J1ZmZlcmVkX3dyaXRlX2l0ZXJgIGlzIHN0YXRpYy5cbiogICBgZXh0NF9kYXhfd3JpdGVfaXRlcmAgaXMgc3RhdGljLlxuKiAgIGBleHQ0X2ZpbGVfd3JpdGVfaXRlcmAgaXMgc3RhdGljLlxuKiAgIGBleHQ0X2lvbWFwX2JlZ2luYCBpcyBzdGF0aWMuXG4qICAgSG93ZXZlciwgYGV4dDRfbWFwX2Jsb2Nrc2AgaXMgZ2xvYmFsLlxuXG5Ob3cgdG8gbWFrZSBhIGZpbmFsIGRlY2lzaW9uLCBJJ2xsIGdvIHdpdGggdGhlIGxpc3Qgb2YgdGhlc2Ugc3ltYm9sczpcbiogICBgZXh0NF9kaW9fd3JpdGVfaXRlcmBcbiogICBgZXh0NF9idWZmZXJlZF93cml0ZV9pdGVyYFxuKiAgIGBleHQ0X2RheF93cml0ZV9pdGVyYFxuKiAgIGBleHQ0X2ZpbGVfd3JpdGVfaXRlcmBcbiogICBgZXh0NF9pb21hcF9iZWdpbmBcbiogICBgZXh0NF9tYXBfYmxvY2tzYFxuXG5Ib2xkIG9uLi4uIGFyZSB0aGVzZSBhbGwgdG9vIGNvbW1vbj8gYGV4dDRfbWFwX2Jsb2Nrc2AgaXMgcHJvYmFibHkgKnZlcnkqIGhvdCwgYW5kIHNvIGlzIGBleHQ0X2ZpbGVfd3JpdGVfaXRlcmAuIFVzaW5nIHRob3NlIG1heSBza2V3IHRoZSByZXN1bHRzIGlmIEknbSBub3QgY2FyZWZ1bC4gIGBleHQ0X2Rpb193cml0ZV9pdGVyYCBhbmQgYGV4dDRfZGF4X3dyaXRlX2l0ZXJgIHNlZW0gYmV0dGVyLCBzaW5jZSB0aGV5IGFyZSBkaXJlY3RseSByZWxhdGVkIHRvIERJTyBhbmQgREFYIHJlc3BlY3RpdmVseS4gIGBleHQ0X2J1ZmZlcmVkX3dyaXRlX2l0ZXJgIGlzIGFsc28gaW1wb3J0YW50IGZvciBidWZmZXJlZCBJTy4gU28sIGZvY3VzaW5nIG9uIHRob3NlIG1ha2VzIG1vcmUgc2Vuc2UuXG5cblNvIEkgd2lsbCBpbmNsdWRlIHRoZSBmb2xsb3dpbmc6XG4qICAgYGV4dDRfZGlvX3dyaXRlX2l0ZXJgXG4qICAgYGV4dDRfYnVmZmVyZWRfd3JpdGVfaXRlcmBcbiogICBgZXh0NF9kYXhfd3JpdGVfaXRlcmBcbiogICBgZXh0NF9pb21hcF9iZWdpbmBcblxuRmluYWxseSwgdG8gdmVyaWZ5IHRoZSBjb25maWd1cmF0aW9ucywgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0OlxuKiAgIGBFWFQ0X0ZTYCBpcyBlbmFibGVkXG4qICAgYEZTX0RBWGAgaXMgZW5hYmxlZFxuSSdsbCBkb3VibGUtY2hlY2sgdG8gbWFrZSBzdXJlIGBGU19EQVhgIGlzIGEgdmFsaWQgY29uZmlnLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDU5OCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA5OjA5OjA3LjQwMzQyMjY3MloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcxMjczMjkwMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRlNfREFYXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL0tjb25maWc9NTY9ZW5kaWYgIyBCTE9DS1xcbmZzL0tjb25maWctNTctXFxuZnMvS2NvbmZpZzo1ODpjb25maWcgRlNfREFYXFxuZnMvS2NvbmZpZy01OS1cXHRib29sIFxcXCJGaWxlIHN5c3RlbSBiYXNlZCBEaXJlY3QgQWNjZXNzIChEQVgpIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9LY29uZmlnLTg5LVxcbmZzL0tjb25maWc6OTA6Y29uZmlnIEZTX0RBWF9QTURcXG5mcy9LY29uZmlnLTkxLVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDk6MDk6MTIuMTE2MTYxNjg1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY2NTQ3MjY0ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhpcyBleHQ0IFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBjb25maXJtZWQgdGhhdCB0aGlzIGBGU19EQVhgIGNoYW5nZSBpcyB2YWxpZC4gSXQncyBmb2N1c2VkIG9uIGltcHJvdmluZyBob3cgZXh0NCBoYW5kbGVzIERpcmVjdCBJL08gYW5kIERBWCB3cml0ZXMsIHNwZWNpZmljYWxseSBhZGRyZXNzaW5nIGxvY2tpbmcgaXNzdWVzIGFuZCBpbmNvbXBsZXRlIGJsb2NrIHplcm9pbmcgd2hlbiBkZWFsaW5nIHdpdGggdW5hbGlnbmVkIERpcmVjdCBJL08gd3JpdGVzLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBleHQ0J3MgSS9PIGhhbmRsaW5nLiBUaGF0J3MgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcgYW5kIGEgZ29vZCBpbmRpY2F0b3IgZm9yIGZ1enppbmcgdGFyZ2V0cy5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHpvb20gaW4gb24gdGhlc2UgZnVuY3Rpb25zLCBiZWNhdXNlIHRoZXkgcmVwcmVzZW50IHRoZSBjb3JlIGZ1bmN0aW9uYWwgY2hhbmdlczogYGV4dDRfZGlvX3dyaXRlX2l0ZXJgLCBgZXh0NF9idWZmZXJlZF93cml0ZV9pdGVyYCwgYGV4dDRfZGF4X3dyaXRlX2l0ZXJgLCBgZXh0NF9kaW9fd3JpdGVfY2hlY2tzYCwgYGV4dDRfZGlvX25lZWRzX3plcm9pbmdgLCBhbmQgYGV4dDRfaW9tYXBfYmVnaW5gLlxuXG5BaGEsIGBleHQ0X2Rpb19uZWVkc196ZXJvaW5nYCBsb29rcyBwYXJ0aWN1bGFybHkgcHJvbWlzaW5nIHNpbmNlIGl0J3MgYSAqbmV3KiBmdW5jdGlvbi4gTmV3IGZ1bmN0aW9ucyBhcmUgb2Z0ZW4gZ29vZCBjYW5kaWRhdGVzIGZvciBmb2N1c2VkIHRlc3RpbmcuIGBleHQ0X2Rpb193cml0ZV9jaGVja3NgIGFsc28gc2VlbXMgbGlrZSBpdCdsbCBiZSBhIGtleSBwYXJ0IG9mIHRoZSBsb2dpYyB0aGF0IHdpbGwgbmVlZCB0aG9yb3VnaCBmdXp6aW5nLlxuXG5MZXQncyBxdWlja2x5IGNvbmZpcm0gdGhhdCBgZXh0NF9kaW9fbmVlZHNfemVyb2luZ2AgaXMgaW5kZWVkIHBhcnQgb2YgdGhlIHBhdGNoLiBZZXMsIGl0J3MgdGhlcmUuIFRoYXQncyBncmVhdCFcblxuQWxyaWdodCwgSSd2ZSBnb3QgbXkgbGlzdC4gSSdtIGdvaW5nIHRvIGNvbmNlbnRyYXRlIG9uIGZ1enppbmcgdGhlc2Ugc3ltYm9sczogYGV4dDRfZGlvX25lZWRzX3plcm9pbmdgLCBgZXh0NF9kaW9fd3JpdGVfY2hlY2tzYCwgYGV4dDRfZGlvX3dyaXRlX2l0ZXJgLCBgZXh0NF9idWZmZXJlZF93cml0ZV9pdGVyYCwgYGV4dDRfZGF4X3dyaXRlX2l0ZXJgLCBhbmQgYGV4dDRfaW9tYXBfYmVnaW5gLlxuXG5BbmQsIGFzIGZhciBhcyBjb25maWdzIGdvLCBgRVhUNF9GU2AgYW5kIGBGU19EQVhgIGFyZSB0aGUga2V5cyBoZXJlLiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYEVYVDRfRlNgIGlzIHRoZSBjb3JyZWN0IG5hbWUgZm9yIHRoZSBleHQ0IGZpbGVzeXN0ZW0gY29uZmlnLCBidXQgSSdtIHByZXR0eSBzdXJlIGl0IGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjAyOSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwOTowOToxOC43NzA4OTAzMzhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzODM2MDU4NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEVYVDRfRlNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvZXh0NC9LY29uZmlnOjI6Y29uZmlnIEVYVDRfRlNcXG5mcy9leHQ0L0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiVGhlIEV4dGVuZGVkIDQgKGV4dDQpIGZpbGVzeXN0ZW1cXFwiXFxuLS1cXG5mcy9leHQ0L0tjb25maWc9MzU9Y29uZmlnIEVYVDRfVVNFX0ZPUl9FWFQyXFxuLS1cXG5mcy9leHQ0L0tjb25maWctNDUtXFxuZnMvZXh0NC9LY29uZmlnOjQ2OmNvbmZpZyBFWFQ0X0ZTX1BPU0lYX0FDTFxcbmZzL2V4dDQvS2NvbmZpZy00Ny1cXHRib29sIFxcXCJFeHQ0IFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXFxcIlxcbi0tXFxuZnMvZXh0NC9LY29uZmlnLTU1LVxcbmZzL2V4dDQvS2NvbmZpZzo1Njpjb25maWcgRVhUNF9GU19TRUNVUklUWVxcbmZzL2V4dDQvS2NvbmZpZy01Ny1cXHRib29sIFxcXCJFeHQ0IFNlY3VyaXR5IExhYmVsc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDk6MDk6MjMuMTU0NTAxODg4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2ODgwNTcxODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKlZlcmlmeWluZyBFWFQ0IENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCB0aGUgY29yZSBmaWxlc3lzdGVtIGhlcmUgaXMgZGVmaW5pdGVseSBgRVhUNF9GU2AsIHRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQsIG5vIHF1ZXN0aW9uLiBOb3csIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgaWYgdGhlcmUncyBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBiZXlvbmQgdGhlIGJhc2UuIFNwZWNpZmljYWxseSwgSSdtIHdvbmRlcmluZyBhYm91dCBEaXJlY3QgQWNjZXNzLCBzbyBgRVhUNF9GU19EQVhgIGNvbWVzIHRvIG1pbmQuIEJ1dCB3YWl0LCB0aGF0IHJpbmdzIGEgYmVsbC4uLiBpc24ndCBEQVggaW4gZXh0NCB0eXBpY2FsbHkgdGllZCB0byB0aGUgYnJvYWRlciBgRlNfREFYYCBvcHRpb24/IFllcywgaXQncyBoaWdobHkgbGlrZWx5IHRoYXQgYEVYVDRfRlNfREFYYCBpcyBpbXBsaWNpdGx5IGVuYWJsZWQgaWYgYEZTX0RBWGAgaXMgc2V0LiBUbyBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkgc2hvdWxkIHJlYWxseSBjb25zdWx0IHRoZSBzb3VyY2UuIFRpbWUgdG8gZGlnIGludG8gZWl0aGVyIGBmcy9leHQ0L0tjb25maWdgIG9yIHBvc3NpYmx5IHRoZSBgZnMvZXh0NC9NYWtlZmlsZWAgdG8gY29uZmlybSB0aGUgZGVwZW5kZW5jaWVzIGFuZCBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBHb3R0YSBiZSB0aG9yb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMxMzIsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwOTowOToyNi44NDI1NjE4NzJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NTg4ODk4MjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0ZTX0RBWFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Bvd2VycGMvY29uZmlncy9nNV9kZWZjb25maWc9MjA1PUNPTkZJR19YRlNfUE9TSVhfQUNMPXlcXG5hcmNoL3Bvd2VycGMvY29uZmlncy9nNV9kZWZjb25maWc6MjA2OkNPTkZJR19GU19EQVg9eVxcbmFyY2gvcG93ZXJwYy9jb25maWdzL2c1X2RlZmNvbmZpZy0yMDctQ09ORklHX0lTTzk2NjBfRlM9eVxcbi0tXFxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjNTEyeF9kZWZjb25maWc9MTA1PUNPTkZJR19FWFQ0X0ZTPXlcXG5hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM1MTJ4X2RlZmNvbmZpZzoxMDY6Q09ORklHX0ZTX0RBWD15XFxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjNTEyeF9kZWZjb25maWctMTA3LSMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldFxcbi0tXFxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNjRfZGVmY29uZmlnPTMyMj1DT05GSUdfTklMRlMyX0ZTPW1cXG5hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2NF9kZWZjb25maWc6MzIzOkNPTkZJR19GU19EQVg9eVxcbmFyY2gvcG93ZXJwYy9jb25maWdzL3BwYzY0X2RlZmNvbmZpZy0zMjQtQ09ORklHX0FVVE9GU19GUz1tXFxuLS1cXG5hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2NGVfZGVmY29uZmlnPTE3OT1DT05GSUdfWEZTX1BPU0lYX0FDTD15XFxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNjRlX2RlZmNvbmZpZzoxODA6Q09ORklHX0ZTX0RBWD15XFxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNjRlX2RlZmNvbmZpZy0xODEtQ09ORklHX0FVVE9GU19GUz1tXFxuLS1cXG5hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2eHhfZGVmY29uZmlnPTkzMj1DT05GSUdfR0ZTMl9GUz1tXFxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNnh4X2RlZmNvbmZpZzo5MzM6Q09ORklHX0ZTX0RBWD15XFxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNnh4X2RlZmNvbmZpZy05MzQtQ09ORklHX1FVT1RBX05FVExJTktfSU5URVJGQUNFPXlcXG4tLVxcbmRyaXZlcnMvZGF4L3N1cGVyLmM9NTY9RVhQT1JUX1NZTUJPTF9HUEwoZGF4X3JlYWRfdW5sb2NrKTtcXG5kcml2ZXJzL2RheC9zdXBlci5jLTU3LVxcbmRyaXZlcnMvZGF4L3N1cGVyLmM6NTg6I2lmIGRlZmluZWQoQ09ORklHX0JMT0NLKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19GU19EQVgpXFxuZHJpdmVycy9kYXgvc3VwZXIuYy01OS0jaW5jbHVkZSBcXHUwMDNjbGludXgvYmxrZGV2LmhcXHUwMDNlXFxuLS1cXG5kcml2ZXJzL2RheC9zdXBlci5jPTExMz1FWFBPUlRfU1lNQk9MX0dQTChmc19kYXhfZ2V0X2J5X2JkZXYpO1xcbmRyaXZlcnMvZGF4L3N1cGVyLmMtMTE0LVxcbmRyaXZlcnMvZGF4L3N1cGVyLmM6MTE1OiNlbmRpZiAvKiBDT05GSUdfQkxPQ0sgXFx1MDAyNlxcdTAwMjYgQ09ORklHX0ZTX0RBWCAqL1xcbmRyaXZlcnMvZGF4L3N1cGVyLmMtMTE2LVxcbmRyaXZlcnMvZGF4L3N1cGVyLmM6MTE3OiNpZiBJU19FTkFCTEVEKENPTkZJR19GU19EQVgpXFxuZHJpdmVycy9kYXgvc3VwZXIuYy0xMTgtXFxuLS1cXG5kcml2ZXJzL2RheC9zdXBlci5jPTE4NT1FWFBPUlRfU1lNQk9MX0dQTChmc19kYXhfZ2V0KTtcXG5kcml2ZXJzL2RheC9zdXBlci5jOjE4NjojZW5kaWYgLyogQ09ORklHX0ZTX0RBWCAqL1xcbmRyaXZlcnMvZGF4L3N1cGVyLmMtMTg3LVxcbi0tXFxuZHJpdmVycy9tZC9kbS1saW5lYXIuYz0xNTM9c3RhdGljIGludCBsaW5lYXJfaXRlcmF0ZV9kZXZpY2VzKHN0cnVjdCBkbV90YXJnZXQgKnRpLFxcbi0tXFxuZHJpdmVycy9tZC9kbS1saW5lYXIuYy0xNjAtXFxuZHJpdmVycy9tZC9kbS1saW5lYXIuYzoxNjE6I2lmIElTX0VOQUJMRUQoQ09ORklHX0ZTX0RBWClcXG5kcml2ZXJzL21kL2RtLWxpbmVhci5jLTE2Mi1zdGF0aWMgc3RydWN0IGRheF9kZXZpY2UgKmxpbmVhcl9kYXhfcGdvZmYoc3RydWN0IGRtX3RhcmdldCAqdGksIHBnb2ZmX3QgKnBnb2ZmKVxcbi0tXFxuZHJpdmVycy9tZC9kbS1sb2ctd3JpdGVzLmM9ODcwPXN0YXRpYyB2b2lkIGxvZ193cml0ZXNfaW9faGludHMoc3RydWN0IGRtX3RhcmdldCAqdGksIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbWl0cylcXG4tLVxcbmRyaXZlcnMvbWQvZG0tbG9nLXdyaXRlcy5jLTg4NC1cXG5kcml2ZXJzL21kL2RtLWxvZy13cml0ZXMuYzo4ODU6I2lmIElTX0VOQUJMRUQoQ09ORklHX0ZTX0RBWClcXG5kcml2ZXJzL21kL2RtLWxvZy13cml0ZXMuYy04ODYtc3RhdGljIHN0cnVjdCBkYXhfZGV2aWNlICpsb2dfd3JpdGVzX2RheF9wZ29mZihzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSxcXG4tLVxcbmRyaXZlcnMvbWQvZG0tc3RyaXBlLmM9MjcyPWludCBzdHJpcGVfbWFwKHN0cnVjdCBkbV90YXJnZXQgKnRpLCBzdHJ1Y3QgYmlvICpiaW8pXFxuLS1cXG5kcml2ZXJzL21kL2RtLXN0cmlwZS5jLTMwMC1cXG5kcml2ZXJzL21kL2RtLXN0cmlwZS5jOjMwMTojaWYgSVNfRU5BQkxFRChDT05GSUdfRlNfREFYKVxcbmRyaXZlcnMvbWQvZG0tc3RyaXBlLmMtMzAyLXN0YXRpYyBzdHJ1Y3QgZGF4X2RldmljZSAqc3RyaXBlX2RheF9wZ29mZihzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSwgcGdvZmZfdCAqcGdvZmYpXFxuLS1cXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYy0zOS1cXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYzo0MDojaWYgSVNfRU5BQkxFRChDT05GSUdfQVJDSF9IQVNfUE1FTV9BUEkpIFxcdTAwMjZcXHUwMDI2IElTX0VOQUJMRUQoQ09ORklHX0ZTX0RBWClcXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYy00MS0jZGVmaW5lIERNX1dSSVRFQ0FDSEVfSEFTX1BNRU1cXG4tLVxcbmZzL01ha2VmaWxlPTMxPW9iai0kKENPTkZJR19BSU8pICAgICAgICAgICAgICAgKz0gYWlvLm9cXG5mcy9NYWtlZmlsZTozMjpvYmotJChDT05GSUdfRlNfREFYKVxcdFxcdCs9IGRheC5vXFxuZnMvTWFrZWZpbGUtMzMtb2JqLSQoQ09ORklHX0ZTX0VOQ1JZUFRJT04pXFx0Kz0gY3J5cHRvL1xcbi0tXFxuZnMvZGF4LmM9MTM5NT1zdGF0aWMgdm1fZmF1bHRfdCBkYXhfbG9hZF9ob2xlKHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcXG4tLVxcbmZzL2RheC5jLTE0MDktXFxuZnMvZGF4LmM6MTQxMDojaWZkZWYgQ09ORklHX0ZTX0RBWF9QTURcXG5mcy9kYXguYy0xNDExLXN0YXRpYyB2bV9mYXVsdF90IGRheF9wbWRfbG9hZF9ob2xlKHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcXG4tLVxcbmZzL2RheC5jPTE0MzU9c3RhdGljIHZtX2ZhdWx0X3QgZGF4X3BtZF9sb2FkX2hvbGUoc3RydWN0IHhhX3N0YXRlICp4YXMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxcbi0tXFxuZnMvZGF4LmMtMTQzOS19XFxuZnMvZGF4LmM6MTQ0MDojZW5kaWYgLyogQ09ORklHX0ZTX0RBWF9QTUQgKi9cXG5mcy9kYXguYy0xNDQxLVxcbi0tXFxuZnMvZGF4LmM9MTg5OT1zdGF0aWMgdm1fZmF1bHRfdCBkYXhfaW9tYXBfcHRlX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mLCB1bnNpZ25lZCBsb25nICpwZm5wLFxcbi0tXFxuZnMvZGF4LmMtMTk3NC1cXG5mcy9kYXguYzoxOTc1OiNpZmRlZiBDT05GSUdfRlNfREFYX1BNRFxcbmZzL2RheC5jLTE5NzYtc3RhdGljIGJvb2wgZGF4X2ZhdWx0X2NoZWNrX2ZhbGxiYWNrKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3QgeGFfc3RhdGUgKnhhcyxcXG4tLVxcbmZzL2RheC5jPTIwODg9c3RhdGljIHZtX2ZhdWx0X3QgZGF4X2lvbWFwX3BtZF9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgdW5zaWduZWQgbG9uZyAqcGZucCxcXG4tLVxcbmZzL2RheC5jLTIwOTItfVxcbmZzL2RheC5jOjIwOTM6I2VuZGlmIC8qIENPTkZJR19GU19EQVhfUE1EICovXFxuZnMvZGF4LmMtMjA5NC1cXG4tLVxcbmZzL2RheC5jPTIxMzA9c3RhdGljIHZtX2ZhdWx0X3QgZGF4X2luc2VydF9wZm5fbWt3cml0ZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcXG4tLVxcbmZzL2RheC5jLTIxNTYtXFx0XFx0cmV0ID0gdm1mX2luc2VydF9wYWdlX21rd3JpdGUodm1mLCBcXHUwMDI2Zm9saW8tXFx1MDAzZXBhZ2UsIHRydWUpO1xcbmZzL2RheC5jOjIxNTc6I2lmZGVmIENPTkZJR19GU19EQVhfUE1EXFxuZnMvZGF4LmMtMjE1OC1cXHRlbHNlIGlmIChvcmRlciA9PSBQTURfT1JERVIpXFxuLS1cXG5mcy9lcm9mcy9kYXRhLmM9NDM2PXN0YXRpYyBzc2l6ZV90IGVyb2ZzX2ZpbGVfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcXG4tLVxcbmZzL2Vyb2ZzL2RhdGEuYy00NDMtXFxuZnMvZXJvZnMvZGF0YS5jOjQ0NDpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfRlNfREFYKSBcXHUwMDI2XFx1MDAyNiBJU19EQVgoaW5vZGUpKVxcbmZzL2Vyb2ZzL2RhdGEuYy00NDUtXFx0XFx0cmV0dXJuIGRheF9pb21hcF9ydyhpb2NiLCB0bywgXFx1MDAyNmVyb2ZzX2lvbWFwX29wcyk7XFxuLS1cXG5mcy9lcm9mcy9kYXRhLmM9NDU5PWNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgZXJvZnNfYW9wcyA9IHtcXG4tLVxcbmZzL2Vyb2ZzL2RhdGEuYy00NjctXFxuZnMvZXJvZnMvZGF0YS5jOjQ2ODojaWZkZWYgQ09ORklHX0ZTX0RBWFxcbmZzL2Vyb2ZzL2RhdGEuYy00Njktc3RhdGljIHZtX2ZhdWx0X3QgZXJvZnNfZGF4X2h1Z2VfZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYsXFxuLS1cXG5mcy9lcm9mcy9zdXBlci5jPTQyOT1zdGF0aWMgYm9vbCBlcm9mc19mY19zZXRfZGF4X21vZGUoc3RydWN0IGZzX2NvbnRleHQgKmZjLCB1bnNpZ25lZCBpbnQgbW9kZSlcXG5mcy9lcm9mcy9zdXBlci5jLTQzMC17XFxuZnMvZXJvZnMvc3VwZXIuYzo0MzE6XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0ZTX0RBWCkpIHtcXG5mcy9lcm9mcy9zdXBlci5jLTQzMi1cXHRcXHRzdHJ1Y3QgZXJvZnNfc2JfaW5mbyAqc2JpID0gZmMtXFx1MDAzZXNfZnNfaW5mbztcXG4tLVxcbmZzL2V4dDQvZXh0NC5oPTEwMzA9c3RydWN0IGV4dDRfaW5vZGVfaW5mbyB7XFxuLS1cXG5mcy9leHQ0L2V4dDQuaC0xMjI0LSNkZWZpbmUgRVhUNF9NT1VOVF9OT0xPQURcXHRcXHQweDAwMTAwXFx0LyogRG9uJ3QgdXNlIGV4aXN0aW5nIGpvdXJuYWwqL1xcbmZzL2V4dDQvZXh0NC5oOjEyMjU6I2lmZGVmIENPTkZJR19GU19EQVhcXG5mcy9leHQ0L2V4dDQuaC0xMjI2LSNkZWZpbmUgRVhUNF9NT1VOVF9EQVhfQUxXQVlTXFx0XFx0MHgwMDIwMFxcdC8qIERpcmVjdCBBY2Nlc3MgKi9cXG4tLVxcbmZzL2V4dDQvZmlsZS5jPTY5PXN0YXRpYyBzc2l6ZV90IGV4dDRfZGlvX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXFxuLS1cXG5mcy9leHQ0L2ZpbGUuYy0xMDAtXFxuZnMvZXh0NC9maWxlLmM6MTAxOiNpZmRlZiBDT05GSUdfRlNfREFYXFxuZnMvZXh0NC9maWxlLmMtMTAyLXN0YXRpYyBzc2l6ZV90IGV4dDRfZGF4X3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXFxuLS1cXG5mcy9leHQ0L2ZpbGUuYz0xMzA9c3RhdGljIHNzaXplX3QgZXh0NF9maWxlX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXFxuLS1cXG5mcy9leHQ0L2ZpbGUuYy0xMzktXFxuZnMvZXh0NC9maWxlLmM6MTQwOiNpZmRlZiBDT05GSUdfRlNfREFYXFxuZnMvZXh0NC9maWxlLmMtMTQxLVxcdGlmIChJU19EQVgoaW5vZGUpKVxcbi0tXFxuZnMvZXh0NC9maWxlLmM9NTc4PXN0YXRpYyBzc2l6ZV90IGV4dDRfZGlvX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXFxuLS1cXG5mcy9leHQ0L2ZpbGUuYy03MDctXFxuZnMvZXh0NC9maWxlLmM6NzA4OiNpZmRlZiBDT05GSUdfRlNfREFYXFxuZnMvZXh0NC9maWxlLmMtNzA5LXN0YXRpYyBzc2l6ZV90XFxuLS1cXG5mcy9leHQ0L2ZpbGUuYz03NzA9ZXh0NF9maWxlX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXFxuLS1cXG5mcy9leHQ0L2ZpbGUuYy03NzgtXFxuZnMvZXh0NC9maWxlLmM6Nzc5OiNpZmRlZiBDT05GSUdfRlNfREFYXFxuZnMvZXh0NC9maWxlLmMtNzgwLVxcdGlmIChJU19EQVgoaW5vZGUpKVxcbi0tXFxuZnMvZXh0NC9maWxlLmMtODAxLVxcbmZzL2V4dDQvZmlsZS5jOjgwMjojaWZkZWYgQ09ORklHX0ZTX0RBWFxcbmZzL2V4dDQvZmlsZS5jLTgwMy1zdGF0aWMgdm1fZmF1bHRfdCBleHQ0X2RheF9odWdlX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mLCB1bnNpZ25lZCBpbnQgb3JkZXIpXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9MjE2OD1zdGF0aWMgaW50IGV4dDRfcGFyc2VfcGFyYW0oc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3QgZnNfcGFyYW1ldGVyICpwYXJhbSlcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0yMzY5LVxcdGNhc2UgT3B0X2RheF90eXBlOlxcbmZzL2V4dDQvc3VwZXIuYzoyMzcwOiNpZmRlZiBDT05GSUdfRlNfREFYXFxuZnMvZXh0NC9zdXBlci5jLTIzNzEtXFx0e1xcbi0tXFxuZnMveGZzL01ha2VmaWxlPTE1ND1pZmVxICgkKENPTkZJR19NRU1PUllfRkFJTFVSRSkseSlcXG5mcy94ZnMvTWFrZWZpbGU6MTU1Onhmcy0kKENPTkZJR19GU19EQVgpXFx0XFx0Kz0geGZzX25vdGlmeV9mYWlsdXJlLm9cXG5mcy94ZnMvTWFrZWZpbGUtMTU2LWVuZGlmXFxuLS1cXG5mcy94ZnMveGZzX2J1Zi5jPTE3Mjk9eGZzX2FsbG9jX2J1ZnRhcmcoXFxuLS1cXG5mcy94ZnMveGZzX2J1Zi5jLTE3MzctXFxuZnMveGZzL3hmc19idWYuYzoxNzM4OiNpZiBkZWZpbmVkKENPTkZJR19GU19EQVgpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX01FTU9SWV9GQUlMVVJFKVxcbmZzL3hmcy94ZnNfYnVmLmMtMTczOS1cXHRvcHMgPSBcXHUwMDI2eGZzX2RheF9ob2xkZXJfb3BlcmF0aW9ucztcXG4tLVxcbmZzL3hmcy94ZnNfZmlsZS5jPTE4NzI9eGZzX2RheF9mYXVsdF9sb2NrZWQoXFxuLS1cXG5mcy94ZnMveGZzX2ZpbGUuYy0xODc5LVxcbmZzL3hmcy94ZnNfZmlsZS5jOjE4ODA6XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19GU19EQVgpKSB7XFxuZnMveGZzL3hmc19maWxlLmMtMTg4MS1cXHRcXHRBU1NFUlQoMCk7XFxuLS1cXG5mcy94ZnMveGZzX2lvcHMuYz0xMzY0PXhmc19pbm9kZV9zaG91bGRfZW5hYmxlX2RheChcXG4tLVxcbmZzL3hmcy94ZnNfaW9wcy5jLTEzNjYte1xcbmZzL3hmcy94ZnNfaW9wcy5jOjEzNjc6XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19GU19EQVgpKVxcbmZzL3hmcy94ZnNfaW9wcy5jLTEzNjgtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxuZnMveGZzL3hmc19zdXBlci5jPTE0MDQ9eGZzX2ZzX3BhcnNlX3BhcmFtKFxcbi0tXFxuZnMveGZzL3hmc19zdXBlci5jLTE1MzQtXFx0XFx0cmV0dXJuIDA7XFxuZnMveGZzL3hmc19zdXBlci5jOjE1MzU6I2lmZGVmIENPTkZJR19GU19EQVhcXG5mcy94ZnMveGZzX3N1cGVyLmMtMTUzNi1cXHRjYXNlIE9wdF9kYXg6XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RheC5oPTEyOD1zdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2w7XFxuaW5jbHVkZS9saW51eC9kYXguaDoxMjk6I2lmIGRlZmluZWQoQ09ORklHX0JMT0NLKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19GU19EQVgpXFxuaW5jbHVkZS9saW51eC9kYXguaC0xMzAtaW50IGRheF9hZGRfaG9zdChzdHJ1Y3QgZGF4X2RldmljZSAqZGF4X2Rldiwgc3RydWN0IGdlbmRpc2sgKmRpc2spO1xcbi0tXFxuaW5jbHVkZS9saW51eC9kYXguaD0xNDI9c3RhdGljIGlubGluZSBzdHJ1Y3QgZGF4X2RldmljZSAqZnNfZGF4X2dldF9ieV9iZGV2KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RheC5oLTE0Ny19XFxuaW5jbHVkZS9saW51eC9kYXguaDoxNDg6I2VuZGlmIC8qIENPTkZJR19CTE9DSyBcXHUwMDI2XFx1MDAyNiBDT05GSUdfRlNfREFYICovXFxuaW5jbHVkZS9saW51eC9kYXguaC0xNDktXFxuaW5jbHVkZS9saW51eC9kYXguaDoxNTA6I2lmIElTX0VOQUJMRUQoQ09ORklHX0ZTX0RBWClcXG5pbmNsdWRlL2xpbnV4L2RheC5oLTE1MS12b2lkIGZzX3B1dF9kYXgoc3RydWN0IGRheF9kZXZpY2UgKmRheF9kZXYsIHZvaWQgKmhvbGRlcik7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RheC5oPTIzNj1zdGF0aWMgaW5saW5lIHZvaWQgZGF4X3JlYWRfdW5sb2NrKGludCBpZClcXG4tLVxcbmluY2x1ZGUvbGludXgvZGF4LmgtMjQwLVxcbmluY2x1ZGUvbGludXgvZGF4Lmg6MjQxOiNpZiAhSVNfRU5BQkxFRChDT05GSUdfRlNfREFYKVxcbmluY2x1ZGUvbGludXgvZGF4LmgtMjQyLXN0YXRpYyBpbmxpbmUgaW50IF9fbXVzdF9jaGVjayBkYXhfYnJlYWtfbGF5b3V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZzLmg9MjA5Nj1leHRlcm4gbG9mZl90IHZmc19kZWR1cGVfZmlsZV9yYW5nZV9vbmUoc3RydWN0IGZpbGUgKnNyY19maWxlLCBsb2ZmX3Qgc3JjX3BvcyxcXG4tLVxcbmluY2x1ZGUvbGludXgvZnMuaC0yMTE1LSNkZWZpbmUgU19OT1NFQ1xcdFxcdCgxIFxcdTAwM2NcXHUwMDNjIDEyKSAvKiBubyBzdWlkIG9yIHhhdHRyIHNlY3VyaXR5IGF0dHJpYnV0ZXMgKi9cXG5pbmNsdWRlL2xpbnV4L2ZzLmg6MjExNjojaWZkZWYgQ09ORklHX0ZTX0RBWFxcbmluY2x1ZGUvbGludXgvZnMuaC0yMTE3LSNkZWZpbmUgU19EQVhcXHRcXHQoMSBcXHUwMDNjXFx1MDAzYyAxMykgLyogRGlyZWN0IEFjY2VzcywgYXZvaWRpbmcgdGhlIHBhZ2UgY2FjaGUgKi9cXG4tLVxcbmluY2x1ZGUvbGludXgvZnMuaD0zMzk5PXN0YXRpYyBpbmxpbmUgYm9vbCB2bWFfaXNfZnNkYXgoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMzQwMi1cXG5pbmNsdWRlL2xpbnV4L2ZzLmg6MzQwMzpcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0ZTX0RBWCkgfHwgIXZtYS1cXHUwMDNldm1fZmlsZSlcXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMzQwNC1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lvbWFwLmg9MTYyPXN0cnVjdCBpb21hcF93cml0ZV9vcHMge1xcbi0tXFxuaW5jbHVkZS9saW51eC9pb21hcC5oLTIwNi0jZGVmaW5lIElPTUFQX1VOU0hBUkVcXHRcXHQoMSBcXHUwMDNjXFx1MDAzYyA3KSAvKiB1bnNoYXJlX2ZpbGVfcmFuZ2UgKi9cXG5pbmNsdWRlL2xpbnV4L2lvbWFwLmg6MjA3OiNpZmRlZiBDT05GSUdfRlNfREFYXFxuaW5jbHVkZS9saW51eC9pb21hcC5oLTIwOC0jZGVmaW5lIElPTUFQX0RBWFxcdFxcdCgxIFxcdTAwM2NcXHUwMDNjIDgpIC8qIERBWCBtYXBwaW5nICovXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lvbWFwLmgtMjEwLSNkZWZpbmUgSU9NQVBfREFYXFx0XFx0MFxcbmluY2x1ZGUvbGludXgvaW9tYXAuaDoyMTE6I2VuZGlmIC8qIENPTkZJR19GU19EQVggKi9cXG5pbmNsdWRlL2xpbnV4L2lvbWFwLmgtMjEyLSNkZWZpbmUgSU9NQVBfQVRPTUlDXFx0XFx0KDEgXFx1MDAzY1xcdTAwM2MgOSkgLyogdG9ybi13cml0ZSBwcm90ZWN0aW9uICovXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jPTU4Mz1zdGF0aWMgdm9pZCBjb2xsZWN0X3Byb2NzX2ZpbGUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtNjE5LVxcbm1tL21lbW9yeS1mYWlsdXJlLmM6NjIwOiNpZmRlZiBDT05GSUdfRlNfREFYXFxubW0vbWVtb3J5LWZhaWx1cmUuYy02MjEtc3RhdGljIHZvaWQgYWRkX3RvX2tpbGxfZnNkYXgoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIGNvbnN0IHN0cnVjdCBwYWdlICpwLFxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz02MzI9c3RhdGljIHZvaWQgY29sbGVjdF9wcm9jc19mc2RheChjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtNjYwLX1cXG5tbS9tZW1vcnktZmFpbHVyZS5jOjY2MTojZW5kaWYgLyogQ09ORklHX0ZTX0RBWCAqL1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtNjYyLVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0xNzE4PXN0YXRpYyBpbnQgbWZfZ2VuZXJpY19raWxsX3Byb2NzKHVuc2lnbmVkIGxvbmcgbG9uZyBwZm4sIGludCBmbGFncyxcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTc3NS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jOjE3NzY6I2lmZGVmIENPTkZJR19GU19EQVhcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE3NzctLyoqXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jPTE4MTg9RVhQT1JUX1NZTUJPTF9HUEwobWZfZGF4X2tpbGxfcHJvY3MpO1xcbm1tL21lbW9yeS1mYWlsdXJlLmM6MTgxOTojZW5kaWYgLyogQ09ORklHX0ZTX0RBWCAqL1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTgyMC1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Zzb2NrL2NvbmZpZz0xMDc9Q09ORklHX0RBWF9EUklWRVI9eVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Zzb2NrL2NvbmZpZzoxMDg6Q09ORklHX0ZTX0RBWD15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdnNvY2svY29uZmlnLTEwOS1DT05GSUdfTUVNT1JZX0hPVFBMVUc9eVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwOTowOTozMS42MDE0NjMwMzRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTUyMjUwODI4NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgU2VsZWN0aW9uOiBleHQ0IERpcmVjdCBJL08gYW5kIERBWCBXcml0ZSBQYXRocyoqXG5cbkFscmlnaHQsIGxldCdzIG5haWwgZG93biB0aGUgZnV6emluZyB0YXJnZXRzIGZvciB0aGlzIGV4dDQgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCBgQ09ORklHX0ZTX0RBWGAgaXMgcmVsZXZhbnQsIGFuZCB5ZXMsIGl0IHNlZW1zIHNvLiBEaXZpbmcgZGVlcGVyLCBJIHNlZSBhIHNsZXcgb2Ygc3RhdGljIGZ1bmN0aW9ucyBiZWluZyBtb2RpZmllZCBvciBjZW50cmFsIHRvIHRoZSBEaXJlY3QgSS9PIGFuZCBEQVggd3JpdGUgcGF0aHMuIFRoZXNlIGFyZSB3aGVyZSB0aGUgaW50ZXJlc3RpbmcgY2hhbmdlcyBhcmUuXG5cbkZpcnN0LCBJIGNvbmZpcm0gYGV4dDRfZGlvX25lZWRzX3plcm9pbmdgIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCwgZ2l2ZW4gdGhlIHBhdGNoJ3MgZm9jdXMgb24gcGFydGlhbCBibG9jayB6ZXJvaW5nLiBOZXh0LCBgZXh0NF9kaW9fd3JpdGVfY2hlY2tzYCBzZWVtcyBjcnVjaWFsLCBhbmQgd2hpbGUgSSBpbml0aWFsbHkgdGhvdWdodCBpdHMgc2lnbmF0dXJlIG1pZ2h0IGNoYW5nZSwgdGhlIGRpZmYgY29uZmlybXMgaXQgcmVtYWlucyB0aGUgc2FtZSwgYnV0IHRoZSBpbnRlcm5hbCBsb2dpYyBpcyBtb2RpZmllZC4gIGBleHQ0X2J1ZmZlcmVkX3dyaXRlX2l0ZXJgIGlzIGxpa2VseSBhbHNvIHRvdWNoZWQgYnkgdGhpcy4gQW5kIHRoZSBzYW1lIHRoaW5nIGZvciBgZXh0NF9kYXhfd3JpdGVfaXRlcmAuIEkgYWxzbyBuZWVkIHRvIG1ha2Ugc3VyZSBgZXh0NF9pb21hcF9iZWdpbmAgYW5kIGBleHQ0X2lvbWFwX2FsbG9jYCBhcmUgaW5jbHVkZWQuIGBleHQ0X21hcF9ibG9ja3NgIGlzIGludm9sdmVkLCBidXQgaXQncyB1c2VkICpzbyogYnJvYWRseSBpbiBleHQ0IHRoYXQgSSdtIGdvaW5nIHRvIG9taXQgaXQgdG8gYXZvaWQgc2tld2luZyB0aGUgZnV6emluZyBkaXN0cmlidXRpb24uXG5cblRoZXJlZm9yZSwgdGhlIGZ1bmN0aW9ucyBJJ20gZ29pbmcgdG8gaW5jbHVkZSBhcmU6XG5cbiogICBgZXh0NF9kaW9fbmVlZHNfemVyb2luZ2BcbiogICBgZXh0NF9kaW9fd3JpdGVfY2hlY2tzYFxuKiAgIGBleHQ0X2J1ZmZlcmVkX3dyaXRlX2l0ZXJgXG4qICAgYGV4dDRfZGF4X3dyaXRlX2l0ZXJgXG4qICAgYGV4dDRfaW9tYXBfYmVnaW5gXG4qICAgYGV4dDRfaW9tYXBfYWxsb2NgXG5cblRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyB3aWxsIGJlOiBgRVhUNF9GU2AgYW5kIGBGU19EQVhgLlxuXG5UaGUgY29yZSByYXRpb25hbGUgaXMgdGhhdCB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgRGlyZWN0IEkvTyBhbmQgREFYIHdyaXRlIHBhdGhzIGluIGV4dDQuIEl0IGluY2x1ZGVzIHBhcnRpYWwgYmxvY2sgemVyb2luZyBhbmQgbG9ja2luZyBjaGFuZ2VzIGZvciB1bmFsaWduZWQgRElPIHdyaXRlcy4gVGhlc2UgY2hvc2VuIGZ1bmN0aW9ucyByZXByZXNlbnQgdGhlIGNvcmUgbG9naWMgY2hhbmdlcyBhbmQgYXJlIGxpa2VseSBjYW5kaWRhdGVzIGZvciBpbnRyb2R1Y2luZyBidWdzIGluIHRoZSBuZXdseSBtb2RpZmllZCBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODE1MywiT3V0cHV0VG9rZW5zIjoyMTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA5OjA5OjQ2LjgyNjU0OTU2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI4MDg1NTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCIsXG4gICAgXCJGU19EQVhcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJleHQ0X2Rpb19uZWVkc196ZXJvaW5nXCIsXG4gICAgXCJleHQ0X2Rpb193cml0ZV9jaGVja3NcIixcbiAgICBcImV4dDRfYnVmZmVyZWRfd3JpdGVfaXRlclwiLFxuICAgIFwiZXh0NF9kYXhfd3JpdGVfaXRlclwiLFxuICAgIFwiZXh0NF9pb21hcF9iZWdpblwiLFxuICAgIFwiZXh0NF9pb21hcF9hbGxvY1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGV4dDQgRGlyZWN0IEkvTyBhbmQgREFYIHdyaXRlIHBhdGhzLCBzcGVjaWZpY2FsbHkgZml4aW5nIGxvY2tpbmcgYW5kIHBhcnRpYWwgYmxvY2sgemVyb2luZyBmb3IgdW5hbGlnbmVkIERJTyB3cml0ZXMuIEl0IGludHJvZHVjZXMgYGV4dDRfZGlvX25lZWRzX3plcm9pbmdgIGFuZCBtb2RpZmllcyBgZXh0NF9kaW9fd3JpdGVfY2hlY2tzYCwgYGV4dDRfYnVmZmVyZWRfd3JpdGVfaXRlcmAsIGBleHQ0X2RheF93cml0ZV9pdGVyYCwgYW5kIGBleHQ0X2lvbWFwX2JlZ2luYC4gVGhlc2UgYXJlIGNvcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGV4dDQncyBJL08gaGFuZGxpbmcgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIixcbiAgICBcIkZTX0RBWFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV4dDRfZGlvX25lZWRzX3plcm9pbmdcIixcbiAgICBcImV4dDRfZGlvX3dyaXRlX2NoZWNrc1wiLFxuICAgIFwiZXh0NF9idWZmZXJlZF93cml0ZV9pdGVyXCIsXG4gICAgXCJleHQ0X2RheF93cml0ZV9pdGVyXCIsXG4gICAgXCJleHQ0X2lvbWFwX2JlZ2luXCIsXG4gICAgXCJleHQ0X2lvbWFwX2FsbG9jXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZXh0NCBEaXJlY3QgSS9PIGFuZCBEQVggd3JpdGUgcGF0aHMsIHNwZWNpZmljYWxseSBmaXhpbmcgbG9ja2luZyBhbmQgcGFydGlhbCBibG9jayB6ZXJvaW5nIGZvciB1bmFsaWduZWQgRElPIHdyaXRlcy4gSXQgaW50cm9kdWNlcyBgZXh0NF9kaW9fbmVlZHNfemVyb2luZ2AgYW5kIG1vZGlmaWVzIGBleHQ0X2Rpb193cml0ZV9jaGVja3NgLCBgZXh0NF9idWZmZXJlZF93cml0ZV9pdGVyYCwgYGV4dDRfZGF4X3dyaXRlX2l0ZXJgLCBhbmQgYGV4dDRfaW9tYXBfYmVnaW5gLiBUaGVzZSBhcmUgY29yZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gZXh0NCdzIEkvTyBoYW5kbGluZyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflown5btw[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-26 08:52:58 +0000 UTC FinishedAt: 2026-06-26 09:09:49 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "fe9f4ee6c61a1410afd73bf011de5ae618004796", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS", "FS_DAX" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "fe9f4ee6c61a1410afd73bf011de5ae618004796", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS", "FS_DAX" ], "series_id": "9e232472-4a4b-47f3-8bca-8e34bb2a4b4d" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ext4_dio_needs_zeroing", "ext4_dio_write_checks", "ext4_buffered_write_iter", "ext4_dax_write_iter", "ext4_iomap_begin", "ext4_iomap_alloc" ], "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+CgkJCTx0ZD4yMDI2LzA2LzI2IDA5OjA4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OywKICAgICYjMzQ7RlNfREFYJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXh0NF9kaW9fbmVlZHNfemVyb2luZyYjMzQ7LAogICAgJiMzNDtleHQ0X2Rpb193cml0ZV9jaGVja3MmIzM0OywKICAgICYjMzQ7ZXh0NF9idWZmZXJlZF93cml0ZV9pdGVyJiMzNDssCiAgICAmIzM0O2V4dDRfZGF4X3dyaXRlX2l0ZXImIzM0OywKICAgICYjMzQ7ZXh0NF9pb21hcF9iZWdpbiYjMzQ7LAogICAgJiMzNDtleHQ0X2lvbWFwX2FsbG9jJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGV4dDQgRGlyZWN0IEkvTyBhbmQgREFYIHdyaXRlIHBhdGhzLCBzcGVjaWZpY2FsbHkgZml4aW5nIGxvY2tpbmcgYW5kIHBhcnRpYWwgYmxvY2sgemVyb2luZyBmb3IgdW5hbGlnbmVkIERJTyB3cml0ZXMuIEl0IGludHJvZHVjZXMgYGV4dDRfZGlvX25lZWRzX3plcm9pbmdgIGFuZCBtb2RpZmllcyBgZXh0NF9kaW9fd3JpdGVfY2hlY2tzYCwgYGV4dDRfYnVmZmVyZWRfd3JpdGVfaXRlcmAsIGBleHQ0X2RheF93cml0ZV9pdGVyYCwgYW5kIGBleHQ0X2lvbWFwX2JlZ2luYC4gVGhlc2UgYXJlIGNvcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGV4dDQmIzM5O3MgSS9PIGhhbmRsaW5nIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwOTowODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGMxMTg5ZTc3NmQ5MTYzOTYyODA4NzVmMTdiNGE5MzljNDQ5ZDZkMDdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1biAyNiAwOTowODoxMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9leHQ0L2ZpbGUuYyBiL2ZzL2V4dDQvZmlsZS5jXG5pbmRleCBlYjFhMzIzOTYyYjEwMS4uNjEwZTEwOWZjZDM2MjUgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L2ZpbGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9maWxlLmNcbkBAIC0yMTMsMzEgJiM0MzsyMTMsNjUgQEAgZXh0NF9leHRlbmRpbmdfaW8oc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCwgc2l6ZV90IGxlbilcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4tLyogSXMgSU8gb3ZlcndyaXRpbmcgYWxsb2NhdGVkIG9yIGluaXRpYWxpemVkIGJsb2Nrcz8gKi9cbi1zdGF0aWMgYm9vbCBleHQ0X292ZXJ3cml0ZV9pbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLVx0XHRcdCAgICAgIGxvZmZfdCBwb3MsIGxvZmZfdCBsZW4sIGJvb2wgKnVud3JpdHRlbilcbiYjNDM7LypcbiYjNDM7ICogRG9lcyBhbiB1bmFsaWduZWQgRElPIHdyaXRlIHJlcXVpcmUgcGFydGlhbCBibG9jayB6ZXJvaW5nP1xuJiM0MzsgKlxuJiM0MzsgKiBQYXJ0aWFsIGJsb2NrIHplcm9pbmcgaXMgcGVyZm9ybWVkIG9ubHkgZm9yIHRoZSBoZWFkIGFuZCB0YWlsIGJsb2Nrc1xuJiM0MzsgKiB3aGVuIHRoZXkgYXJlIHBhcnRpYWxseSBjb3ZlcmVkIGJ5IHRoZSB3cml0ZSBhbmQgdGhlIHVuZGVybHlpbmcgZXh0ZW50XG4mIzQzOyAqIGlzIGEgaG9sZSBvciB1bndyaXR0ZW4uIE1pZGRsZSBibG9ja3MgKGZ1bGx5IGNvdmVyZWQgYnkgdGhlIHdyaXRlKVxuJiM0MzsgKiBhcmUgd3JpdHRlbiBhcyB3aG9sZSBibG9ja3Mgd2l0aG91dCB6ZXJvaW5nLlxuJiM0MzsgKlxuJiM0MzsgKiBXaGVuIHplcm9pbmcgaXMgcmVxdWlyZWQsIHR3byBjb25jdXJyZW50IHVuYWxpZ25lZCBESU8gd3JpdGVzIHRvIHRoZVxuJiM0MzsgKiBzYW1lIHBhcnRpYWwgYmxvY2sgY2FuIHJhY2UgYW5kIGNvcnJ1cHQgZWFjaCBvdGhlciYjMzk7cyBkYXRhLCBzbyB0aGVcbiYjNDM7ICogY2FsbGVyIG11c3QgdGFrZSB0aGUgZXhjbHVzaXZlIGlfcndzZW0gYW5kIGRyYWluIGluLWZsaWdodCBESU8uIFdoZW5cbiYjNDM7ICogemVyb2luZyBpcyBub3QgcmVxdWlyZWQsIHNoYXJlZCBsb2NrIGlzIHNhZmUgLS0gYmxvY2sgYWxsb2NhdGlvbiBhbmRcbiYjNDM7ICogdW53cml0dGVuIGNvbnZlcnNpb24gZm9yIG1pZGRsZSBibG9ja3MgYXJlIHByb3RlY3RlZCBieSBpX2RhdGFfc2VtXG4mIzQzOyAqIGFuZCBpbm9kZV9kaW9fYmVnaW4oKS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBib29sIGV4dDRfZGlvX25lZWRzX3plcm9pbmcoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHBvcywgbG9mZl90IGxlbixcbiYjNDM7XHRcdFx0XHQgICBib29sIG5vd2FpdClcbiB7XG4gXHRzdHJ1Y3QgZXh0NF9tYXBfYmxvY2tzIG1hcDtcbiBcdHVuc2lnbmVkIGludCBibGtiaXRzID0gaW5vZGUtXHUwMDNlaV9ibGtiaXRzO1xuLVx0aW50IGVyciwgYmxrbGVuO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgYmxvY2ttYXNrID0gaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2Jsb2Nrc2l6ZSAtIDE7XG4mIzQzO1x0Ym9vbCBoZWFkX3BhcnRpYWwsIHRhaWxfcGFydGlhbDtcbiYjNDM7XHRleHQ0X2xibGtfdCBoZWFkX2xibGssIHRhaWxfbGJsaztcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcdGludCBtYXBfZmxhZ3MgPSAwO1xuIFxuIFx0aWYgKHBvcyAmIzQzOyBsZW4gXHUwMDNlIGlfc2l6ZV9yZWFkKGlub2RlKSlcbi1cdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4gXG4tXHRtYXAubV9sYmxrID0gcG9zIFx1MDAzZVx1MDAzZSBibGtiaXRzO1xuLVx0bWFwLm1fbGVuID0gRVhUNF9NQVhfQkxPQ0tTKGxlbiwgcG9zLCBibGtiaXRzKTtcbi1cdGJsa2xlbiA9IG1hcC5tX2xlbjtcbiYjNDM7XHRpZiAobm93YWl0KVxuJiM0MztcdFx0bWFwX2ZsYWdzID0gRVhUNF9HRVRfQkxPQ0tTX0NBQ0hFRF9OT1dBSVQ7XG4mIzQzO1xuJiM0MztcdGhlYWRfcGFydGlhbCA9IChwb3MgXHUwMDI2IGJsb2NrbWFzaykgIT0gMDtcbiYjNDM7XHR0YWlsX3BhcnRpYWwgPSAoKHBvcyAmIzQzOyBsZW4pIFx1MDAyNiBibG9ja21hc2spICE9IDA7XG4mIzQzO1x0aGVhZF9sYmxrID0gcG9zIFx1MDAzZVx1MDAzZSBibGtiaXRzO1xuJiM0MztcdHRhaWxfbGJsayA9IChwb3MgJiM0MzsgbGVuIC0gMSkgXHUwMDNlXHUwMDNlIGJsa2JpdHM7XG4mIzQzO1xuJiM0MztcdC8qIENoZWNrIHRoZSBoZWFkIHBhcnRpYWwgYmxvY2suICovXG4mIzQzO1x0aWYgKGhlYWRfcGFydGlhbCkge1xuJiM0MztcdFx0bWFwLm1fbGJsayA9IGhlYWRfbGJsaztcbiYjNDM7XHRcdG1hcC5tX2xlbiA9IHRhaWxfbGJsayAtIGhlYWRfbGJsayAmIzQzOyAxO1xuJiM0MztcdFx0ZXJyID0gZXh0NF9tYXBfYmxvY2tzKE5VTEwsIGlub2RlLCBcdTAwMjZtYXAsIG1hcF9mbGFncyk7XG4mIzQzO1x0XHRpZiAoZXJyIFx1MDAzYz0gMCB8fCAhKG1hcC5tX2ZsYWdzIFx1MDAyNiBFWFQ0X01BUF9NQVBQRUQpKVxuJiM0MztcdFx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRcdC8qIElmIHRoaXMgbWFwcGluZyBhbHJlYWR5IGNvdmVycyB0aGUgdGFpbCBibG9jaywgd2UmIzM5O3JlIGRvbmUuICovXG4mIzQzO1x0XHRpZiAoIXRhaWxfcGFydGlhbCB8fCBtYXAubV9sYmxrICYjNDM7IGVyciBcdTAwM2UgdGFpbF9sYmxrKVxuJiM0MztcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0fVxuIFxuLVx0ZXJyID0gZXh0NF9tYXBfYmxvY2tzKE5VTEwsIGlub2RlLCBcdTAwMjZtYXAsIDApO1xuLVx0aWYgKGVyciAhPSBibGtsZW4pXG4tXHRcdHJldHVybiBmYWxzZTtcbi1cdC8qXG4tXHQgKiAmIzM5O2Vycj09bGVuJiMzOTsgbWVhbnMgdGhhdCBhbGwgb2YgdGhlIGJsb2NrcyBoYXZlIGJlZW4gcHJlYWxsb2NhdGVkLFxuLVx0ICogcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZXkgaGF2ZSBiZWVuIGluaXRpYWxpemVkIG9yIG5vdC4gV2UgbmVlZCB0b1xuLVx0ICogY2hlY2sgbV9mbGFncyB0byBkaXN0aW5ndWlzaCB0aGUgdW53cml0dGVuIGV4dGVudHMuXG4tXHQgKi9cbi1cdCp1bndyaXR0ZW4gPSAhKG1hcC5tX2ZsYWdzIFx1MDAyNiBFWFQ0X01BUF9NQVBQRUQpO1xuLVx0cmV0dXJuIHRydWU7XG4mIzQzO1x0LyogQ2hlY2sgdGhlIHRhaWwgcGFydGlhbCBibG9jay4gKi9cbiYjNDM7XHRpZiAodGFpbF9wYXJ0aWFsKSB7XG4mIzQzO1x0XHRtYXAubV9sYmxrID0gdGFpbF9sYmxrO1xuJiM0MztcdFx0bWFwLm1fbGVuID0gMTtcbiYjNDM7XHRcdGVyciA9IGV4dDRfbWFwX2Jsb2NrcyhOVUxMLCBpbm9kZSwgXHUwMDI2bWFwLCBtYXBfZmxhZ3MpO1xuJiM0MztcdFx0aWYgKGVyciBcdTAwM2M9IDAgfHwgIShtYXAubV9mbGFncyBcdTAwMjYgRVhUNF9NQVBfTUFQUEVEKSlcbiYjNDM7XHRcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuIHN0YXRpYyBzc2l6ZV90IGV4dDRfZ2VuZXJpY193cml0ZV9jaGVja3Moc3RydWN0IGtpb2NiICppb2NiLFxuQEAgLTI3OCw3ICYjNDM7MzEyLDcgQEAgc3RhdGljIHNzaXplX3QgZXh0NF93cml0ZV9jaGVja3Moc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG4gXHRpZiAoY291bnQgXHUwMDNjPSAwKVxuIFx0XHRyZXR1cm4gY291bnQ7XG4gXG4tXHRyZXQgPSBmaWxlX21vZGlmaWVkKGlvY2ItXHUwMDNla2lfZmlscCk7XG4mIzQzO1x0cmV0ID0ga2lvY2JfbW9kaWZpZWQoaW9jYik7XG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuQEAgLTMwOSw2ICYjNDM7MzQzLDEzIEBAIHN0YXRpYyBzc2l6ZV90IGV4dDRfYnVmZmVyZWRfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcbiBcdGlub2RlX2xvY2soaW5vZGUpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFByZXZlbnQgY29uY3VycmVudCBkaXJlY3QgSS9PIGFuZCBidWZmZXJlZCBJL08gdG8gdGhlIHNhbWUgZmlsZVxuJiM0MztcdCAqIHJhbmdlLiBXYWl0IGZvciBpbi1mbGlnaHQgRElPIHRvIGZpbmlzaCBiZWZvcmUgZGlydHlpbmcgcGFnZXMuXG4mIzQzO1x0ICovXG4mIzQzO1x0aW5vZGVfZGlvX3dhaXQoaW5vZGUpO1xuJiM0MztcbiBcdHJldCA9IGV4dDRfd3JpdGVfY2hlY2tzKGlvY2IsIGZyb20pO1xuIFx0aWYgKHJldCBcdTAwM2M9IDApXG4gXHRcdGdvdG8gb3V0O1xuQEAgLTQyOCwxNiAmIzQzOzQ2OSwyOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGlvbWFwX2Rpb19vcHMgZXh0NF9kaW9fd3JpdGVfb3BzID0ge1xuICAqIGNvbmRpdGlvbiByZXF1aXJlcyBhbiBleGNsdXNpdmUgaW5vZGUgbG9jay4gSWYgeWVzLCB0aGVuIHdlIHJlc3RhcnQgdGhlXG4gICogd2hvbGUgb3BlcmF0aW9uIGJ5IHJlbGVhc2luZyB0aGUgc2hhcmVkIGxvY2sgYW5kIGFjcXVpcmluZyBleGNsdXNpdmUgbG9jay5cbiAgKlxuLSAqIC0gRm9yIHVuYWxpZ25lZF9pbyB3ZSBuZXZlciB0YWtlIHNoYXJlZCBsb2NrIGFzIGl0IG1heSBjYXVzZSBkYXRhIGNvcnJ1cHRpb25cbi0gKiAgIHdoZW4gdHdvIHVuYWxpZ25lZCBJTyB0cmllcyB0byBtb2RpZnkgdGhlIHNhbWUgYmxvY2sgZS5nLiB3aGlsZSB6ZXJvaW5nLlxuJiM0MzsgKiBUaGUgZGVjaXNpb24gaXMgbGF5ZXJlZCwgZXZhbHVhdGVkIGluIHRoaXMgb3JkZXI6XG4gICpcbi0gKiAtIEZvciBleHRlbmRpbmcgd3JpdGVzIGNhc2Ugd2UgZG9uJiMzOTt0IHRha2UgdGhlIHNoYXJlZCBsb2NrLCBzaW5jZSBpdCByZXF1aXJlc1xuLSAqICAgdXBkYXRpbmcgaW5vZGUgaV9kaXNrc2l6ZSBhbmQvb3Igb3JwaGFuIGhhbmRsaW5nIHdpdGggZXhjbHVzaXZlIGxvY2suXG4mIzQzOyAqIDEuIElmIGtpb2NiX21vZGlmaWVkKCkgbmVlZHMgdG8gdXBkYXRlIHNlY3VyaXR5IGluZm8gKCFJU19OT1NFQyksIHVwZ3JhZGVcbiYjNDM7ICogICAgdG8gdGhlIGV4Y2x1c2l2ZSBsb2NrIC0tIHRoZSBzZWN1cml0eSB1cGRhdGUgaXRzZWxmIHJlcXVpcmVzIGl0LFxuJiM0MzsgKiAgICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIHdyaXRlIGV4dGVuZHMgdGhlIGZpbGUgb3IgaXMgYWxpZ25lZC5cbiAgKlxuLSAqIC0gc2hhcmVkIGxvY2tpbmcgd2lsbCBvbmx5IGJlIHRydWUgbW9zdGx5IHdpdGggb3ZlcndyaXRlcywgaW5jbHVkaW5nXG4tICogICBpbml0aWFsaXplZCBibG9ja3MgYW5kIHVud3JpdHRlbiBibG9ja3MuXG4mIzQzOyAqIDIuIElmIHRoZSB3cml0ZSBleHRlbmRzIGlfc2l6ZSBvciBpX2Rpc2tzaXplLCB1cGdyYWRlIHRvIHRoZSBleGNsdXNpdmVcbiYjNDM7ICogICAgbG9jayB0byBzYWZlbHkgdXBkYXRlIGlfZGlza3NpemUgYW5kIHRoZSBvcnBoYW4gbGlzdCwgcmVnYXJkbGVzcyBvZlxuJiM0MzsgKiAgICBhbGlnbm1lbnQuXG4gICpcbi0gKiAtIE90aGVyd2lzZSB3ZSB3aWxsIHN3aXRjaCB0byBleGNsdXNpdmUgaV9yd3NlbSBsb2NrLlxuJiM0MzsgKiAzLiBPdGhlcndpc2UsIGZvciBhbGlnbmVkIG5vbi1leHRlbmRpbmcgd3JpdGVzLCBzaGFyZWQgbG9jayBpcyBhbHdheXNcbiYjNDM7ICogICAgc3VmZmljaWVudCByZWdhcmRsZXNzIG9mIGV4dGVudCBzdGF0ZSAod3JpdHRlbiwgdW53cml0dGVuLCBvciBob2xlKS5cbiYjNDM7ICogICAgdHJ1bmNhdGUvcHVuY2hfaG9sZSBjYW5ub3QgcnVuIHdoaWxlIHdlIGhvbGQgdGhlIHNoYXJlZCBpX3J3c2VtXG4mIzQzOyAqICAgICh0aGV5IG5lZWQgaXQgZXhjbHVzaXZlbHkpOyBhZnRlciB3ZSByZWxlYXNlIGl0LCBpbm9kZV9kaW9fYmVnaW4oKVxuJiM0MzsgKiAgICBrZWVwcyB0aGVpciBpbm9kZV9kaW9fd2FpdCgpIGJsb2NrZWQgdW50aWwgaW4tZmxpZ2h0IGJpb3MgY29tcGxldGUuXG4mIzQzOyAqICAgIGlfZGF0YV9zZW0gc2VyaWFsaXplcyBjb25jdXJyZW50IGV4dGVudCB0cmVlIG1vZGlmaWNhdGlvbnMuXG4mIzQzOyAqXG4mIzQzOyAqIDQuIE90aGVyd2lzZSwgdGhlIHdyaXRlIGlzIHVuYWxpZ25lZCBhbmQgbm9uLWV4dGVuZGluZy4gU2hhcmVkIGxvY2sgaXNcbiYjNDM7ICogICAgc2FmZSB1bmxlc3MgdGhlIERJTyBsYXllciBuZWVkcyB0byBwZXJmb3JtIHBhcnRpYWwgYmxvY2sgemVyb2luZyAtLVxuJiM0MzsgKiAgICBpLmUuIHRoZSBoZWFkIG9yIHRhaWwgcGFydGlhbCBibG9jayBzaXRzIG9uIGEgaG9sZSBvciB1bndyaXR0ZW5cbiYjNDM7ICogICAgZXh0ZW50LiBJbiB0aGF0IGNhc2UgdXBncmFkZSB0byB0aGUgZXhjbHVzaXZlIGxvY2sgYW5kIGRyYWluXG4mIzQzOyAqICAgIGluLWZsaWdodCBESU8gdG8gYXZvaWQgcmFjZXMgd2l0aCBjb25jdXJyZW50IHBhcnRpYWwgYmxvY2sgemVyb2luZy5cbiAgKi9cbiBzdGF0aWMgc3NpemVfdCBleHQ0X2Rpb193cml0ZV9jaGVja3Moc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXG4gXHRcdFx0XHQgICAgIGJvb2wgKmlsb2NrX3NoYXJlZCwgYm9vbCAqZXh0ZW5kLFxuQEAgLTQ0OCw3ICYjNDM7NTAxLDcgQEAgc3RhdGljIHNzaXplX3QgZXh0NF9kaW9fd3JpdGVfY2hlY2tzKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tLFxuIFx0bG9mZl90IG9mZnNldDtcbiBcdHNpemVfdCBjb3VudDtcbiBcdHNzaXplX3QgcmV0O1xuLVx0Ym9vbCBvdmVyd3JpdGUsIHVuYWxpZ25lZF9pbywgdW53cml0dGVuO1xuJiM0MztcdGJvb2wgbmVlZHNfemVyb2luZyA9IGZhbHNlO1xuIFxuIHJlc3RhcnQ6XG4gXHRyZXQgPSBleHQ0X2dlbmVyaWNfd3JpdGVfY2hlY2tzKGlvY2IsIGZyb20pO1xuQEAgLTQ1OCwyNCAmIzQzOzUxMSwyMyBAQCBzdGF0aWMgc3NpemVfdCBleHQ0X2Rpb193cml0ZV9jaGVja3Moc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXG4gXHRvZmZzZXQgPSBpb2NiLVx1MDAzZWtpX3BvcztcbiBcdGNvdW50ID0gcmV0O1xuIFxuLVx0dW5hbGlnbmVkX2lvID0gZXh0NF91bmFsaWduZWRfaW8oaW5vZGUsIGZyb20sIG9mZnNldCk7XG4gXHQqZXh0ZW5kID0gZXh0NF9leHRlbmRpbmdfaW8oaW5vZGUsIG9mZnNldCwgY291bnQpO1xuLVx0b3ZlcndyaXRlID0gZXh0NF9vdmVyd3JpdGVfaW8oaW5vZGUsIG9mZnNldCwgY291bnQsIFx1MDAyNnVud3JpdHRlbik7XG4gXG4gXHQvKlxuLVx0ICogRGV0ZXJtaW5lIHdoZXRoZXIgd2UgbmVlZCB0byB1cGdyYWRlIHRvIGFuIGV4Y2x1c2l2ZSBsb2NrLiBUaGlzIGlzXG4tXHQgKiByZXF1aXJlZCB0byBjaGFuZ2Ugc2VjdXJpdHkgaW5mbyBpbiBmaWxlX21vZGlmaWVkKCksIGZvciBleHRlbmRpbmdcbi1cdCAqIEkvTywgYW55IGZvcm0gb2Ygbm9uLW92ZXJ3cml0ZSBJL08sIGFuZCB1bmFsaWduZWQgSS9PIHRvIHVud3JpdHRlblxuLVx0ICogZXh0ZW50cyAoYXMgcGFydGlhbCBibG9jayB6ZXJvaW5nIG1heSBiZSByZXF1aXJlZCkuXG4mIzQzO1x0ICogRm9yIHVuYWxpZ25lZCB3cml0ZXMsIGNoZWNrIHdoZXRoZXIgcGFydGlhbCBibG9jayB6ZXJvaW5nIHdpbGwgYmVcbiYjNDM7XHQgKiBuZWVkZWQuIElmIHNvLCBleGNsdXNpdmUgbG9jayBpcyByZXF1aXJlZCB0byBzZXJpYWxpemUgYWdhaW5zdFxuJiM0MztcdCAqIGNvbmN1cnJlbnQgRElPIHRoYXQgY291bGQgcmFjZSB3aXRoIHRoZSB6ZXJvaW5nLlxuIFx0ICpcbi1cdCAqIE5vdGUgdGhhdCB1bmFsaWduZWQgd3JpdGVzIGFyZSBhbGxvd2VkIHVuZGVyIHNoYXJlZCBsb2NrIHNvIGxvbmcgYXNcbi1cdCAqIHRoZXkgYXJlIHB1cmUgb3ZlcndyaXRlcy4gT3RoZXJ3aXNlLCBjb25jdXJyZW50IHVuYWxpZ25lZCB3cml0ZXMgcmlza1xuLVx0ICogZGF0YSBjb3JydXB0aW9uIGR1ZSB0byBwYXJ0aWFsIGJsb2NrIHplcm9pbmcgaW4gdGhlIGRpbyBsYXllciwgYW5kIHNvXG4tXHQgKiB0aGUgSS9PIG11c3Qgb2NjdXIgZXhjbHVzaXZlbHkuXG4mIzQzO1x0ICogRm9yIGFsaWduZWQgd3JpdGVzIHdlIHNraXAgdGhpcyBjaGVjayBlbnRpcmVseSBzaW5jZSBhbGxvY2F0aW9uXG4mIzQzO1x0ICogdW5kZXIgc2hhcmVkIGxvY2sgaXMgc2FmZS5cbiBcdCAqL1xuJiM0MztcdGlmIChleHQ0X3VuYWxpZ25lZF9pbyhpbm9kZSwgZnJvbSwgb2Zmc2V0KSlcbiYjNDM7XHRcdG5lZWRzX3plcm9pbmcgPSBleHQ0X2Rpb19uZWVkc196ZXJvaW5nKGlub2RlLCBvZmZzZXQsIGNvdW50LFxuJiM0MztcdFx0XHRcdFx0XHRpb2NiLVx1MDAzZWtpX2ZsYWdzIFx1MDAyNiBJT0NCX05PV0FJVCk7XG4mIzQzO1xuJiM0MztcdC8qIERldGVybWluZSB3aGV0aGVyIHdlIG5lZWQgdG8gdXBncmFkZSB0byBhbiBleGNsdXNpdmUgbG9jay4gKi9cbiBcdGlmICgqaWxvY2tfc2hhcmVkIFx1MDAyNlx1MDAyNlxuLVx0ICAgICgoIUlTX05PU0VDKGlub2RlKSB8fCAqZXh0ZW5kIHx8ICFvdmVyd3JpdGUgfHxcbi1cdCAgICAgKHVuYWxpZ25lZF9pbyBcdTAwMjZcdTAwMjYgdW53cml0dGVuKSkpKSB7XG4mIzQzO1x0ICAgICghSVNfTk9TRUMoaW5vZGUpIHx8ICpleHRlbmQgfHwgbmVlZHNfemVyb2luZykpIHtcbiBcdFx0aWYgKGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2IElPQ0JfTk9XQUlUKSB7XG4gXHRcdFx0cmV0ID0gLUVBR0FJTjtcbiBcdFx0XHRnb3RvIG91dDtcbkBAIC00ODksMjEgJiM0Mzs1NDEsMjggQEAgc3RhdGljIHNzaXplX3QgZXh0NF9kaW9fd3JpdGVfY2hlY2tzKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tLFxuIFx0LypcbiBcdCAqIE5vdyB0aGF0IGxvY2tpbmcgaXMgc2V0dGxlZCwgZGV0ZXJtaW5lIGRpbyBmbGFncyBhbmQgZXhjbHVzaXZpdHlcbiBcdCAqIHJlcXVpcmVtZW50cy4gV2UgZG9uJiMzOTt0IHVzZSBESU9fT1ZFUldSSVRFX09OTFkgYmVjYXVzZSB3ZSBlbmZvcmNlXG4tXHQgKiBiZWhhdmlvciBhbHJlYWR5LiBUaGUgaW5vZGUgbG9jayBpcyBhbHJlYWR5IGhlbGQgZXhjbHVzaXZlIGlmIHRoZVxuLVx0ICogd3JpdGUgaXMgbm9uLW92ZXJ3cml0ZSBvciBleHRlbmRpbmcsIHNvIGRyYWluIGFsbCBvdXRzdGFuZGluZyBkaW8gYW5kXG4tXHQgKiBzZXQgdGhlIGZvcmNlIHdhaXQgZGlvIGZsYWcuXG4mIzQzO1x0ICogYmVoYXZpb3IgYWxyZWFkeS4gV2hlbiBob2xkaW5nIHRoZSBleGNsdXNpdmUgbG9jayBmb3IgYSB3cml0ZSB0aGF0XG4mIzQzO1x0ICogbmVlZHMgcGFydGlhbCBibG9jayB6ZXJvaW5nIG9yIGlzIGV4dGVuZGluZyB0aGUgZmlsZSwgd2UgbXVzdCB3YWl0XG4mIzQzO1x0ICogZm9yIHRoZSBJL08gdG8gY29tcGxldGUgc3luY2hyb25vdXNseTpcbiYjNDM7XHQgKlxuJiM0MztcdCAqICAtIG5lZWRzX3plcm9pbmc6IGRyYWluIGluLWZsaWdodCBESU8gd2hvc2UgZW5kX2lvIGNvdWxkIHJhY2Ugd2l0aFxuJiM0MztcdCAqICAgIG91ciBwYXJ0aWFsIGJsb2NrIHplcm9pbmcsIGFuZCBmb3JjZSBzeW5jaHJvbm91cyBjb21wbGV0aW9uIHNvIHdlXG4mIzQzO1x0ICogICAgZG9uJiMzOTt0IGxlYXZlIGluLWZsaWdodCB6ZXJvaW5nIGJpb3MgZm9yIHRoZSBuZXh0IHdyaXRlciB0byBkcmFpbi5cbiYjNDM7XHQgKlxuJiM0MztcdCAqICAtIGV4dGVuZDogdGhlIGNhbGxlciBtdXN0IHVwZGF0ZSBpX2Rpc2tzaXplIGFmdGVyIEkvTyBjb21wbGV0aW9uLFxuJiM0MztcdCAqICAgIHdoaWNoIHJlcXVpcmVzIHRoZSBkYXRhIHRvIGJlIG9uIGRpc2sgZmlyc3QuXG4gXHQgKi9cbi1cdGlmICghKmlsb2NrX3NoYXJlZCBcdTAwMjZcdTAwMjYgKHVuYWxpZ25lZF9pbyB8fCAqZXh0ZW5kKSkge1xuJiM0MztcdGlmICghKmlsb2NrX3NoYXJlZCBcdTAwMjZcdTAwMjYgKG5lZWRzX3plcm9pbmcgfHwgKmV4dGVuZCkpIHtcbiBcdFx0aWYgKGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2IElPQ0JfTk9XQUlUKSB7XG4gXHRcdFx0cmV0ID0gLUVBR0FJTjtcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0fVxuLVx0XHRpZiAodW5hbGlnbmVkX2lvIFx1MDAyNlx1MDAyNiAoIW92ZXJ3cml0ZSB8fCB1bndyaXR0ZW4pKVxuJiM0MztcdFx0aWYgKG5lZWRzX3plcm9pbmcpXG4gXHRcdFx0aW5vZGVfZGlvX3dhaXQoaW5vZGUpO1xuIFx0XHQqZGlvX2ZsYWdzID0gSU9NQVBfRElPX0ZPUkNFX1dBSVQ7XG4gXHR9XG4gXG4tXHRyZXQgPSBmaWxlX21vZGlmaWVkKGZpbGUpO1xuJiM0MztcdHJldCA9IGtpb2NiX21vZGlmaWVkKGlvY2IpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0Z290byBvdXQ7XG4gXG5AQCAtNjcyLDYgJiM0Mzs3MzEsMTEgQEAgZXh0NF9kYXhfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbiBcdGNvdW50ID0gaW92X2l0ZXJfY291bnQoZnJvbSk7XG4gXG4gXHRpZiAob2Zmc2V0ICYjNDM7IGNvdW50IFx1MDAzZSBFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZGlza3NpemUpIHtcbiYjNDM7XHRcdGlmIChpb2NiLVx1MDAzZWtpX2ZsYWdzIFx1MDAyNiBJT0NCX05PV0FJVCkge1xuJiM0MztcdFx0XHRyZXQgPSAtRUFHQUlOO1xuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4gXHRcdGhhbmRsZSA9IGV4dDRfam91cm5hbF9zdGFydChpbm9kZSwgRVhUNF9IVF9JTk9ERSwgMik7XG4gXHRcdGlmIChJU19FUlIoaGFuZGxlKSkge1xuIFx0XHRcdHJldCA9IFBUUl9FUlIoaGFuZGxlKTtcbmRpZmYgLS1naXQgYS9mcy9leHQ0L2lub2RlLmMgYi9mcy9leHQ0L2lub2RlLmNcbmluZGV4IGMyYzJkNmFjN2YzZDEzLi4zYzA1MDk0NDc1ZGIxYyAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvaW5vZGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9pbm9kZS5jXG5AQCAtNzU5LDggJiM0Mzs3NTksOSBAQCBpbnQgZXh0NF9tYXBfYmxvY2tzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0QlVHKCk7XG4gXHRcdH1cbiBcbiYjNDM7XHRcdC8qIFNraXAgYmxvY2tpbmcgb3BlcmF0aW9ucyBhbmQganVtcCB0byBleHRlbnQgdmFsaWRhdGlvbi4gKi9cbiBcdFx0aWYgKGZsYWdzIFx1MDAyNiBFWFQ0X0dFVF9CTE9DS1NfQ0FDSEVEX05PV0FJVClcbi1cdFx0XHRyZXR1cm4gcmV0dmFsO1xuJiM0MztcdFx0XHRnb3RvIGZvdW5kO1xuICNpZmRlZiBFU19BR0dSRVNTSVZFX1RFU1RcbiBcdFx0ZXh0NF9tYXBfYmxvY2tzX2VzX3JlY2hlY2soaGFuZGxlLCBpbm9kZSwgbWFwLFxuIFx0XHRcdFx0XHQgICBcdTAwMjZvcmlnX21hcCwgZmxhZ3MpO1xuQEAgLTc3Niw3ICYjNDM7Nzc3LDcgQEAgaW50IGV4dDRfbWFwX2Jsb2NrcyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0ICogY2Fubm90IGZpbmQgZXh0ZW50IGluIHRoZSBjYWNoZS5cbiBcdCAqL1xuIFx0aWYgKGZsYWdzIFx1MDAyNiBFWFQ0X0dFVF9CTE9DS1NfQ0FDSEVEX05PV0FJVClcbi1cdFx0cmV0dXJuIDA7XG4mIzQzO1x0XHRyZXR1cm4gLUVBR0FJTjtcbiBcbiBcdC8qXG4gXHQgKiBUcnkgdG8gc2VlIGlmIHdlIGNhbiBnZXQgdGhlIGJsb2NrIHdpdGhvdXQgcmVxdWVzdGluZyBhIG5ld1xuQEAgLTc5Nyw2ICYjNDM7Nzk4LDkgQEAgaW50IGV4dDRfbWFwX2Jsb2NrcyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0aWYgKChmbGFncyBcdTAwMjYgRVhUNF9HRVRfQkxPQ0tTX0NSRUFURSkgPT0gMClcbiBcdFx0cmV0dXJuIHJldHZhbDtcbiBcbiYjNDM7XHQvKiBFWFQ0X0dFVF9CTE9DS1NfQ1JFQVRFIGNhbm5vdCBvcGVyYXRlIGluIE5PV0FJVCBtb2RlICovXG4mIzQzO1x0V0FSTl9PTl9PTkNFKGZsYWdzIFx1MDAyNiBFWFQ0X0dFVF9CTE9DS1NfQ0FDSEVEX05PV0FJVCk7XG4mIzQzO1xuIFx0LypcbiBcdCAqIFJldHVybnMgaWYgdGhlIGJsb2NrcyBoYXZlIGFscmVhZHkgYWxsb2NhdGVkXG4gXHQgKlxuQEAgLTM2NzIsNiAmIzQzOzM2NzYsOSBAQCBzdGF0aWMgaW50IGV4dDRfaW9tYXBfYWxsb2Moc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dDRfbWFwX2Jsb2NrcyAqbWFwLFxuIFx0aW50IHJldCwgZGlvX2NyZWRpdHMsIG1fZmxhZ3MgPSAwLCByZXRyaWVzID0gMDtcbiBcdGJvb2wgZm9yY2VfY29tbWl0ID0gZmFsc2U7XG4gXG4mIzQzO1x0aWYgKGZsYWdzIFx1MDAyNiBJT01BUF9OT1dBSVQpXG4mIzQzO1x0XHRyZXR1cm4gLUVBR0FJTjtcbiYjNDM7XG4gXHQvKlxuIFx0ICogVHJpbSB0aGUgbWFwcGluZyByZXF1ZXN0IHRvIHRoZSBtYXhpbXVtIHZhbHVlIHRoYXQgd2UgY2FuIG1hcCBhdFxuIFx0ICogb25jZSBmb3IgZGlyZWN0IEkvTy5cbkBAIC0zNzc3LDYgJiM0MzszNzg0LDcgQEAgc3RhdGljIGludCBleHQ0X2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW5ndGgsXG4gXHRzdHJ1Y3QgZXh0NF9tYXBfYmxvY2tzIG1hcDtcbiBcdHU4IGJsa2JpdHMgPSBpbm9kZS1cdTAwM2VpX2Jsa2JpdHM7XG4gXHR1bnNpZ25lZCBpbnQgb3JpZ19tbGVuO1xuJiM0MztcdGludCBtYXBfZmxhZ3MgPSAwO1xuIFxuIFx0aWYgKChvZmZzZXQgXHUwMDNlXHUwMDNlIGJsa2JpdHMpIFx1MDAzZSBFWFQ0X01BWF9MT0dJQ0FMX0JMT0NLKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbkBAIC0zNzkxLDYgJiM0MzszNzk5LDEyIEBAIHN0YXRpYyBpbnQgZXh0NF9pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuZ3RoLFxuIFx0bWFwLm1fbGVuID0gbWluX3QobG9mZl90LCAob2Zmc2V0ICYjNDM7IGxlbmd0aCAtIDEpIFx1MDAzZVx1MDAzZSBibGtiaXRzLFxuIFx0XHRcdCAgRVhUNF9NQVhfTE9HSUNBTF9CTE9DSykgLSBtYXAubV9sYmxrICYjNDM7IDE7XG4gXHRvcmlnX21sZW4gPSBtYXAubV9sZW47XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBJbiBOT1dBSVQgY29udGV4dCwgb25seSB1c2UgY2FjaGVkIGV4dGVudCBpbmZvLiBJZiBlcyBjYWNoZSBtaXNzZXMsXG4mIzQzO1x0ICogcmV0dXJuIC1FQUdBSU4gdG8gYXZvaWQgc2xlZXBpbmcgb24gZG93bl9yZWFkKGlfZGF0YV9zZW0pLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChmbGFncyBcdTAwMjYgSU9NQVBfTk9XQUlUKVxuJiM0MztcdFx0bWFwX2ZsYWdzID0gRVhUNF9HRVRfQkxPQ0tTX0NBQ0hFRF9OT1dBSVQ7XG4gXG4gXHRpZiAoZmxhZ3MgXHUwMDI2IElPTUFQX1dSSVRFKSB7XG4gXHRcdC8qXG5AQCAtMzgwMCw3ICYjNDM7MzgxNCw3IEBAIHN0YXRpYyBpbnQgZXh0NF9pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuZ3RoLFxuIFx0XHQgKiBlc3BlY2lhbGx5IGluIG11bHRpLXRocmVhZGVkIG92ZXJ3cml0ZSByZXF1ZXN0cy5cbiBcdFx0ICovXG4gXHRcdGlmIChvZmZzZXQgJiM0MzsgbGVuZ3RoIFx1MDAzYz0gaV9zaXplX3JlYWQoaW5vZGUpKSB7XG4tXHRcdFx0cmV0ID0gZXh0NF9tYXBfYmxvY2tzKE5VTEwsIGlub2RlLCBcdTAwMjZtYXAsIDApO1xuJiM0MztcdFx0XHRyZXQgPSBleHQ0X21hcF9ibG9ja3MoTlVMTCwgaW5vZGUsIFx1MDAyNm1hcCwgbWFwX2ZsYWdzKTtcbiBcdFx0XHQvKlxuIFx0XHRcdCAqIEZvciBEQVggd2UgY29udmVydCBleHRlbnRzIHRvIGluaXRpYWxpemVkIG9uZXMgYmVmb3JlXG4gXHRcdFx0ICogY29weWluZyB0aGUgZGF0YSwgb3RoZXJ3aXNlIHdlIGRvIGl0IGFmdGVyIEkvTyBzb1xuQEAgLTM4MjEsNyAmIzQzOzM4MzUsNyBAQCBzdGF0aWMgaW50IGV4dDRfaW9tYXBfYmVnaW4oc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbmd0aCxcbiBcdFx0fVxuIFx0XHRyZXQgPSBleHQ0X2lvbWFwX2FsbG9jKGlub2RlLCBcdTAwMjZtYXAsIGZsYWdzKTtcbiBcdH0gZWxzZSB7XG4tXHRcdHJldCA9IGV4dDRfbWFwX2Jsb2NrcyhOVUxMLCBpbm9kZSwgXHUwMDI2bWFwLCAwKTtcbiYjNDM7XHRcdHJldCA9IGV4dDRfbWFwX2Jsb2NrcyhOVUxMLCBpbm9kZSwgXHUwMDI2bWFwLCBtYXBfZmxhZ3MpO1xuIFx0fVxuIFxuIFx0aWYgKHJldCBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwOTowODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFWFQ0X0ZTJiMzNDssCiAgICAmIzM0O0ZTX0RBWCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V4dDRfZGlvX25lZWRzX3plcm9pbmcmIzM0OywKICAgICYjMzQ7ZXh0NF9kaW9fd3JpdGVfY2hlY2tzJiMzNDssCiAgICAmIzM0O2V4dDRfYnVmZmVyZWRfd3JpdGVfaXRlciYjMzQ7LAogICAgJiMzNDtleHQ0X2RheF93cml0ZV9pdGVyJiMzNDssCiAgICAmIzM0O2V4dDRfaW9tYXBfYmVnaW4mIzM0OywKICAgICYjMzQ7ZXh0NF9pb21hcF9hbGxvYyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBleHQ0IERpcmVjdCBJL08gYW5kIERBWCB3cml0ZSBwYXRocywgc3BlY2lmaWNhbGx5IGZpeGluZyBsb2NraW5nIGFuZCBwYXJ0aWFsIGJsb2NrIHplcm9pbmcgZm9yIHVuYWxpZ25lZCBESU8gd3JpdGVzLiBJdCBpbnRyb2R1Y2VzIGBleHQ0X2Rpb19uZWVkc196ZXJvaW5nYCBhbmQgbW9kaWZpZXMgYGV4dDRfZGlvX3dyaXRlX2NoZWNrc2AsIGBleHQ0X2J1ZmZlcmVkX3dyaXRlX2l0ZXJgLCBgZXh0NF9kYXhfd3JpdGVfaXRlcmAsIGFuZCBgZXh0NF9pb21hcF9iZWdpbmAuIFRoZXNlIGFyZSBjb3JlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBleHQ0JiMzOTtzIEkvTyBoYW5kbGluZyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGMxMTg5ZTc3NmQ5MTYzOTYyODA4NzVmMTdiNGE5MzljNDQ5ZDZkMDcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEp1biAyNiAwOTowODoxMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZmlsZS5jIGIvZnMvZXh0NC9maWxlLmMKaW5kZXggZWIxYTMyMzk2MmIxMDEuLjYxMGUxMDlmY2QzNjI1IDEwMDY0NAotLS0gYS9mcy9leHQ0L2ZpbGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2ZpbGUuYwpAQCAtMjEzLDMxICYjNDM7MjEzLDY1IEBAIGV4dDRfZXh0ZW5kaW5nX2lvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIHNpemVfdCBsZW4pCiAJcmV0dXJuIGZhbHNlOwogfQogCi0vKiBJcyBJTyBvdmVyd3JpdGluZyBhbGxvY2F0ZWQgb3IgaW5pdGlhbGl6ZWQgYmxvY2tzPyAqLwotc3RhdGljIGJvb2wgZXh0NF9vdmVyd3JpdGVfaW8oc3RydWN0IGlub2RlICppbm9kZSwKLQkJCSAgICAgIGxvZmZfdCBwb3MsIGxvZmZfdCBsZW4sIGJvb2wgKnVud3JpdHRlbikKJiM0MzsvKgomIzQzOyAqIERvZXMgYW4gdW5hbGlnbmVkIERJTyB3cml0ZSByZXF1aXJlIHBhcnRpYWwgYmxvY2sgemVyb2luZz8KJiM0MzsgKgomIzQzOyAqIFBhcnRpYWwgYmxvY2sgemVyb2luZyBpcyBwZXJmb3JtZWQgb25seSBmb3IgdGhlIGhlYWQgYW5kIHRhaWwgYmxvY2tzCiYjNDM7ICogd2hlbiB0aGV5IGFyZSBwYXJ0aWFsbHkgY292ZXJlZCBieSB0aGUgd3JpdGUgYW5kIHRoZSB1bmRlcmx5aW5nIGV4dGVudAomIzQzOyAqIGlzIGEgaG9sZSBvciB1bndyaXR0ZW4uIE1pZGRsZSBibG9ja3MgKGZ1bGx5IGNvdmVyZWQgYnkgdGhlIHdyaXRlKQomIzQzOyAqIGFyZSB3cml0dGVuIGFzIHdob2xlIGJsb2NrcyB3aXRob3V0IHplcm9pbmcuCiYjNDM7ICoKJiM0MzsgKiBXaGVuIHplcm9pbmcgaXMgcmVxdWlyZWQsIHR3byBjb25jdXJyZW50IHVuYWxpZ25lZCBESU8gd3JpdGVzIHRvIHRoZQomIzQzOyAqIHNhbWUgcGFydGlhbCBibG9jayBjYW4gcmFjZSBhbmQgY29ycnVwdCBlYWNoIG90aGVyJiMzOTtzIGRhdGEsIHNvIHRoZQomIzQzOyAqIGNhbGxlciBtdXN0IHRha2UgdGhlIGV4Y2x1c2l2ZSBpX3J3c2VtIGFuZCBkcmFpbiBpbi1mbGlnaHQgRElPLiBXaGVuCiYjNDM7ICogemVyb2luZyBpcyBub3QgcmVxdWlyZWQsIHNoYXJlZCBsb2NrIGlzIHNhZmUgLS0gYmxvY2sgYWxsb2NhdGlvbiBhbmQKJiM0MzsgKiB1bndyaXR0ZW4gY29udmVyc2lvbiBmb3IgbWlkZGxlIGJsb2NrcyBhcmUgcHJvdGVjdGVkIGJ5IGlfZGF0YV9zZW0KJiM0MzsgKiBhbmQgaW5vZGVfZGlvX2JlZ2luKCkuCiYjNDM7ICovCiYjNDM7c3RhdGljIGJvb2wgZXh0NF9kaW9fbmVlZHNfemVyb2luZyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgcG9zLCBsb2ZmX3QgbGVuLAomIzQzOwkJCQkgICBib29sIG5vd2FpdCkKIHsKIAlzdHJ1Y3QgZXh0NF9tYXBfYmxvY2tzIG1hcDsKIAl1bnNpZ25lZCBpbnQgYmxrYml0cyA9IGlub2RlLSZndDtpX2Jsa2JpdHM7Ci0JaW50IGVyciwgYmxrbGVuOwomIzQzOwl1bnNpZ25lZCBsb25nIGJsb2NrbWFzayA9IGlub2RlLSZndDtpX3NiLSZndDtzX2Jsb2Nrc2l6ZSAtIDE7CiYjNDM7CWJvb2wgaGVhZF9wYXJ0aWFsLCB0YWlsX3BhcnRpYWw7CiYjNDM7CWV4dDRfbGJsa190IGhlYWRfbGJsaywgdGFpbF9sYmxrOwomIzQzOwlpbnQgZXJyOwomIzQzOwlpbnQgbWFwX2ZsYWdzID0gMDsKIAogCWlmIChwb3MgJiM0MzsgbGVuICZndDsgaV9zaXplX3JlYWQoaW5vZGUpKQotCQlyZXR1cm4gZmFsc2U7CiYjNDM7CQlyZXR1cm4gdHJ1ZTsKIAotCW1hcC5tX2xibGsgPSBwb3MgJmd0OyZndDsgYmxrYml0czsKLQltYXAubV9sZW4gPSBFWFQ0X01BWF9CTE9DS1MobGVuLCBwb3MsIGJsa2JpdHMpOwotCWJsa2xlbiA9IG1hcC5tX2xlbjsKJiM0MzsJaWYgKG5vd2FpdCkKJiM0MzsJCW1hcF9mbGFncyA9IEVYVDRfR0VUX0JMT0NLU19DQUNIRURfTk9XQUlUOwomIzQzOwomIzQzOwloZWFkX3BhcnRpYWwgPSAocG9zICZhbXA7IGJsb2NrbWFzaykgIT0gMDsKJiM0MzsJdGFpbF9wYXJ0aWFsID0gKChwb3MgJiM0MzsgbGVuKSAmYW1wOyBibG9ja21hc2spICE9IDA7CiYjNDM7CWhlYWRfbGJsayA9IHBvcyAmZ3Q7Jmd0OyBibGtiaXRzOwomIzQzOwl0YWlsX2xibGsgPSAocG9zICYjNDM7IGxlbiAtIDEpICZndDsmZ3Q7IGJsa2JpdHM7CiYjNDM7CiYjNDM7CS8qIENoZWNrIHRoZSBoZWFkIHBhcnRpYWwgYmxvY2suICovCiYjNDM7CWlmIChoZWFkX3BhcnRpYWwpIHsKJiM0MzsJCW1hcC5tX2xibGsgPSBoZWFkX2xibGs7CiYjNDM7CQltYXAubV9sZW4gPSB0YWlsX2xibGsgLSBoZWFkX2xibGsgJiM0MzsgMTsKJiM0MzsJCWVyciA9IGV4dDRfbWFwX2Jsb2NrcyhOVUxMLCBpbm9kZSwgJmFtcDttYXAsIG1hcF9mbGFncyk7CiYjNDM7CQlpZiAoZXJyICZsdDs9IDAgfHwgIShtYXAubV9mbGFncyAmYW1wOyBFWFQ0X01BUF9NQVBQRUQpKQomIzQzOwkJCXJldHVybiB0cnVlOwomIzQzOwkJLyogSWYgdGhpcyBtYXBwaW5nIGFscmVhZHkgY292ZXJzIHRoZSB0YWlsIGJsb2NrLCB3ZSYjMzk7cmUgZG9uZS4gKi8KJiM0MzsJCWlmICghdGFpbF9wYXJ0aWFsIHx8IG1hcC5tX2xibGsgJiM0MzsgZXJyICZndDsgdGFpbF9sYmxrKQomIzQzOwkJCXJldHVybiBmYWxzZTsKJiM0MzsJfQogCi0JZXJyID0gZXh0NF9tYXBfYmxvY2tzKE5VTEwsIGlub2RlLCAmYW1wO21hcCwgMCk7Ci0JaWYgKGVyciAhPSBibGtsZW4pCi0JCXJldHVybiBmYWxzZTsKLQkvKgotCSAqICYjMzk7ZXJyPT1sZW4mIzM5OyBtZWFucyB0aGF0IGFsbCBvZiB0aGUgYmxvY2tzIGhhdmUgYmVlbiBwcmVhbGxvY2F0ZWQsCi0JICogcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZXkgaGF2ZSBiZWVuIGluaXRpYWxpemVkIG9yIG5vdC4gV2UgbmVlZCB0bwotCSAqIGNoZWNrIG1fZmxhZ3MgdG8gZGlzdGluZ3Vpc2ggdGhlIHVud3JpdHRlbiBleHRlbnRzLgotCSAqLwotCSp1bndyaXR0ZW4gPSAhKG1hcC5tX2ZsYWdzICZhbXA7IEVYVDRfTUFQX01BUFBFRCk7Ci0JcmV0dXJuIHRydWU7CiYjNDM7CS8qIENoZWNrIHRoZSB0YWlsIHBhcnRpYWwgYmxvY2suICovCiYjNDM7CWlmICh0YWlsX3BhcnRpYWwpIHsKJiM0MzsJCW1hcC5tX2xibGsgPSB0YWlsX2xibGs7CiYjNDM7CQltYXAubV9sZW4gPSAxOwomIzQzOwkJZXJyID0gZXh0NF9tYXBfYmxvY2tzKE5VTEwsIGlub2RlLCAmYW1wO21hcCwgbWFwX2ZsYWdzKTsKJiM0MzsJCWlmIChlcnIgJmx0Oz0gMCB8fCAhKG1hcC5tX2ZsYWdzICZhbXA7IEVYVDRfTUFQX01BUFBFRCkpCiYjNDM7CQkJcmV0dXJuIHRydWU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGZhbHNlOwogfQogCiBzdGF0aWMgc3NpemVfdCBleHQ0X2dlbmVyaWNfd3JpdGVfY2hlY2tzKHN0cnVjdCBraW9jYiAqaW9jYiwKQEAgLTI3OCw3ICYjNDM7MzEyLDcgQEAgc3RhdGljIHNzaXplX3QgZXh0NF93cml0ZV9jaGVja3Moc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pCiAJaWYgKGNvdW50ICZsdDs9IDApCiAJCXJldHVybiBjb3VudDsKIAotCXJldCA9IGZpbGVfbW9kaWZpZWQoaW9jYi0mZ3Q7a2lfZmlscCk7CiYjNDM7CXJldCA9IGtpb2NiX21vZGlmaWVkKGlvY2IpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKQEAgLTMwOSw2ICYjNDM7MzQzLDEzIEBAIHN0YXRpYyBzc2l6ZV90IGV4dDRfYnVmZmVyZWRfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAogCWlub2RlX2xvY2soaW5vZGUpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBQcmV2ZW50IGNvbmN1cnJlbnQgZGlyZWN0IEkvTyBhbmQgYnVmZmVyZWQgSS9PIHRvIHRoZSBzYW1lIGZpbGUKJiM0MzsJICogcmFuZ2UuIFdhaXQgZm9yIGluLWZsaWdodCBESU8gdG8gZmluaXNoIGJlZm9yZSBkaXJ0eWluZyBwYWdlcy4KJiM0MzsJICovCiYjNDM7CWlub2RlX2Rpb193YWl0KGlub2RlKTsKJiM0MzsKIAlyZXQgPSBleHQ0X3dyaXRlX2NoZWNrcyhpb2NiLCBmcm9tKTsKIAlpZiAocmV0ICZsdDs9IDApCiAJCWdvdG8gb3V0OwpAQCAtNDI4LDE2ICYjNDM7NDY5LDI4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW9tYXBfZGlvX29wcyBleHQ0X2Rpb193cml0ZV9vcHMgPSB7CiAgKiBjb25kaXRpb24gcmVxdWlyZXMgYW4gZXhjbHVzaXZlIGlub2RlIGxvY2suIElmIHllcywgdGhlbiB3ZSByZXN0YXJ0IHRoZQogICogd2hvbGUgb3BlcmF0aW9uIGJ5IHJlbGVhc2luZyB0aGUgc2hhcmVkIGxvY2sgYW5kIGFjcXVpcmluZyBleGNsdXNpdmUgbG9jay4KICAqCi0gKiAtIEZvciB1bmFsaWduZWRfaW8gd2UgbmV2ZXIgdGFrZSBzaGFyZWQgbG9jayBhcyBpdCBtYXkgY2F1c2UgZGF0YSBjb3JydXB0aW9uCi0gKiAgIHdoZW4gdHdvIHVuYWxpZ25lZCBJTyB0cmllcyB0byBtb2RpZnkgdGhlIHNhbWUgYmxvY2sgZS5nLiB3aGlsZSB6ZXJvaW5nLgomIzQzOyAqIFRoZSBkZWNpc2lvbiBpcyBsYXllcmVkLCBldmFsdWF0ZWQgaW4gdGhpcyBvcmRlcjoKICAqCi0gKiAtIEZvciBleHRlbmRpbmcgd3JpdGVzIGNhc2Ugd2UgZG9uJiMzOTt0IHRha2UgdGhlIHNoYXJlZCBsb2NrLCBzaW5jZSBpdCByZXF1aXJlcwotICogICB1cGRhdGluZyBpbm9kZSBpX2Rpc2tzaXplIGFuZC9vciBvcnBoYW4gaGFuZGxpbmcgd2l0aCBleGNsdXNpdmUgbG9jay4KJiM0MzsgKiAxLiBJZiBraW9jYl9tb2RpZmllZCgpIG5lZWRzIHRvIHVwZGF0ZSBzZWN1cml0eSBpbmZvICghSVNfTk9TRUMpLCB1cGdyYWRlCiYjNDM7ICogICAgdG8gdGhlIGV4Y2x1c2l2ZSBsb2NrIC0tIHRoZSBzZWN1cml0eSB1cGRhdGUgaXRzZWxmIHJlcXVpcmVzIGl0LAomIzQzOyAqICAgIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgd3JpdGUgZXh0ZW5kcyB0aGUgZmlsZSBvciBpcyBhbGlnbmVkLgogICoKLSAqIC0gc2hhcmVkIGxvY2tpbmcgd2lsbCBvbmx5IGJlIHRydWUgbW9zdGx5IHdpdGggb3ZlcndyaXRlcywgaW5jbHVkaW5nCi0gKiAgIGluaXRpYWxpemVkIGJsb2NrcyBhbmQgdW53cml0dGVuIGJsb2Nrcy4KJiM0MzsgKiAyLiBJZiB0aGUgd3JpdGUgZXh0ZW5kcyBpX3NpemUgb3IgaV9kaXNrc2l6ZSwgdXBncmFkZSB0byB0aGUgZXhjbHVzaXZlCiYjNDM7ICogICAgbG9jayB0byBzYWZlbHkgdXBkYXRlIGlfZGlza3NpemUgYW5kIHRoZSBvcnBoYW4gbGlzdCwgcmVnYXJkbGVzcyBvZgomIzQzOyAqICAgIGFsaWdubWVudC4KICAqCi0gKiAtIE90aGVyd2lzZSB3ZSB3aWxsIHN3aXRjaCB0byBleGNsdXNpdmUgaV9yd3NlbSBsb2NrLgomIzQzOyAqIDMuIE90aGVyd2lzZSwgZm9yIGFsaWduZWQgbm9uLWV4dGVuZGluZyB3cml0ZXMsIHNoYXJlZCBsb2NrIGlzIGFsd2F5cwomIzQzOyAqICAgIHN1ZmZpY2llbnQgcmVnYXJkbGVzcyBvZiBleHRlbnQgc3RhdGUgKHdyaXR0ZW4sIHVud3JpdHRlbiwgb3IgaG9sZSkuCiYjNDM7ICogICAgdHJ1bmNhdGUvcHVuY2hfaG9sZSBjYW5ub3QgcnVuIHdoaWxlIHdlIGhvbGQgdGhlIHNoYXJlZCBpX3J3c2VtCiYjNDM7ICogICAgKHRoZXkgbmVlZCBpdCBleGNsdXNpdmVseSk7IGFmdGVyIHdlIHJlbGVhc2UgaXQsIGlub2RlX2Rpb19iZWdpbigpCiYjNDM7ICogICAga2VlcHMgdGhlaXIgaW5vZGVfZGlvX3dhaXQoKSBibG9ja2VkIHVudGlsIGluLWZsaWdodCBiaW9zIGNvbXBsZXRlLgomIzQzOyAqICAgIGlfZGF0YV9zZW0gc2VyaWFsaXplcyBjb25jdXJyZW50IGV4dGVudCB0cmVlIG1vZGlmaWNhdGlvbnMuCiYjNDM7ICoKJiM0MzsgKiA0LiBPdGhlcndpc2UsIHRoZSB3cml0ZSBpcyB1bmFsaWduZWQgYW5kIG5vbi1leHRlbmRpbmcuIFNoYXJlZCBsb2NrIGlzCiYjNDM7ICogICAgc2FmZSB1bmxlc3MgdGhlIERJTyBsYXllciBuZWVkcyB0byBwZXJmb3JtIHBhcnRpYWwgYmxvY2sgemVyb2luZyAtLQomIzQzOyAqICAgIGkuZS4gdGhlIGhlYWQgb3IgdGFpbCBwYXJ0aWFsIGJsb2NrIHNpdHMgb24gYSBob2xlIG9yIHVud3JpdHRlbgomIzQzOyAqICAgIGV4dGVudC4gSW4gdGhhdCBjYXNlIHVwZ3JhZGUgdG8gdGhlIGV4Y2x1c2l2ZSBsb2NrIGFuZCBkcmFpbgomIzQzOyAqICAgIGluLWZsaWdodCBESU8gdG8gYXZvaWQgcmFjZXMgd2l0aCBjb25jdXJyZW50IHBhcnRpYWwgYmxvY2sgemVyb2luZy4KICAqLwogc3RhdGljIHNzaXplX3QgZXh0NF9kaW9fd3JpdGVfY2hlY2tzKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tLAogCQkJCSAgICAgYm9vbCAqaWxvY2tfc2hhcmVkLCBib29sICpleHRlbmQsCkBAIC00NDgsNyAmIzQzOzUwMSw3IEBAIHN0YXRpYyBzc2l6ZV90IGV4dDRfZGlvX3dyaXRlX2NoZWNrcyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSwKIAlsb2ZmX3Qgb2Zmc2V0OwogCXNpemVfdCBjb3VudDsKIAlzc2l6ZV90IHJldDsKLQlib29sIG92ZXJ3cml0ZSwgdW5hbGlnbmVkX2lvLCB1bndyaXR0ZW47CiYjNDM7CWJvb2wgbmVlZHNfemVyb2luZyA9IGZhbHNlOwogCiByZXN0YXJ0OgogCXJldCA9IGV4dDRfZ2VuZXJpY193cml0ZV9jaGVja3MoaW9jYiwgZnJvbSk7CkBAIC00NTgsMjQgJiM0Mzs1MTEsMjMgQEAgc3RhdGljIHNzaXplX3QgZXh0NF9kaW9fd3JpdGVfY2hlY2tzKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tLAogCW9mZnNldCA9IGlvY2ItJmd0O2tpX3BvczsKIAljb3VudCA9IHJldDsKIAotCXVuYWxpZ25lZF9pbyA9IGV4dDRfdW5hbGlnbmVkX2lvKGlub2RlLCBmcm9tLCBvZmZzZXQpOwogCSpleHRlbmQgPSBleHQ0X2V4dGVuZGluZ19pbyhpbm9kZSwgb2Zmc2V0LCBjb3VudCk7Ci0Jb3ZlcndyaXRlID0gZXh0NF9vdmVyd3JpdGVfaW8oaW5vZGUsIG9mZnNldCwgY291bnQsICZhbXA7dW53cml0dGVuKTsKIAogCS8qCi0JICogRGV0ZXJtaW5lIHdoZXRoZXIgd2UgbmVlZCB0byB1cGdyYWRlIHRvIGFuIGV4Y2x1c2l2ZSBsb2NrLiBUaGlzIGlzCi0JICogcmVxdWlyZWQgdG8gY2hhbmdlIHNlY3VyaXR5IGluZm8gaW4gZmlsZV9tb2RpZmllZCgpLCBmb3IgZXh0ZW5kaW5nCi0JICogSS9PLCBhbnkgZm9ybSBvZiBub24tb3ZlcndyaXRlIEkvTywgYW5kIHVuYWxpZ25lZCBJL08gdG8gdW53cml0dGVuCi0JICogZXh0ZW50cyAoYXMgcGFydGlhbCBibG9jayB6ZXJvaW5nIG1heSBiZSByZXF1aXJlZCkuCiYjNDM7CSAqIEZvciB1bmFsaWduZWQgd3JpdGVzLCBjaGVjayB3aGV0aGVyIHBhcnRpYWwgYmxvY2sgemVyb2luZyB3aWxsIGJlCiYjNDM7CSAqIG5lZWRlZC4gSWYgc28sIGV4Y2x1c2l2ZSBsb2NrIGlzIHJlcXVpcmVkIHRvIHNlcmlhbGl6ZSBhZ2FpbnN0CiYjNDM7CSAqIGNvbmN1cnJlbnQgRElPIHRoYXQgY291bGQgcmFjZSB3aXRoIHRoZSB6ZXJvaW5nLgogCSAqCi0JICogTm90ZSB0aGF0IHVuYWxpZ25lZCB3cml0ZXMgYXJlIGFsbG93ZWQgdW5kZXIgc2hhcmVkIGxvY2sgc28gbG9uZyBhcwotCSAqIHRoZXkgYXJlIHB1cmUgb3ZlcndyaXRlcy4gT3RoZXJ3aXNlLCBjb25jdXJyZW50IHVuYWxpZ25lZCB3cml0ZXMgcmlzawotCSAqIGRhdGEgY29ycnVwdGlvbiBkdWUgdG8gcGFydGlhbCBibG9jayB6ZXJvaW5nIGluIHRoZSBkaW8gbGF5ZXIsIGFuZCBzbwotCSAqIHRoZSBJL08gbXVzdCBvY2N1ciBleGNsdXNpdmVseS4KJiM0MzsJICogRm9yIGFsaWduZWQgd3JpdGVzIHdlIHNraXAgdGhpcyBjaGVjayBlbnRpcmVseSBzaW5jZSBhbGxvY2F0aW9uCiYjNDM7CSAqIHVuZGVyIHNoYXJlZCBsb2NrIGlzIHNhZmUuCiAJICovCiYjNDM7CWlmIChleHQ0X3VuYWxpZ25lZF9pbyhpbm9kZSwgZnJvbSwgb2Zmc2V0KSkKJiM0MzsJCW5lZWRzX3plcm9pbmcgPSBleHQ0X2Rpb19uZWVkc196ZXJvaW5nKGlub2RlLCBvZmZzZXQsIGNvdW50LAomIzQzOwkJCQkJCWlvY2ItJmd0O2tpX2ZsYWdzICZhbXA7IElPQ0JfTk9XQUlUKTsKJiM0MzsKJiM0MzsJLyogRGV0ZXJtaW5lIHdoZXRoZXIgd2UgbmVlZCB0byB1cGdyYWRlIHRvIGFuIGV4Y2x1c2l2ZSBsb2NrLiAqLwogCWlmICgqaWxvY2tfc2hhcmVkICZhbXA7JmFtcDsKLQkgICAgKCghSVNfTk9TRUMoaW5vZGUpIHx8ICpleHRlbmQgfHwgIW92ZXJ3cml0ZSB8fAotCSAgICAgKHVuYWxpZ25lZF9pbyAmYW1wOyZhbXA7IHVud3JpdHRlbikpKSkgewomIzQzOwkgICAgKCFJU19OT1NFQyhpbm9kZSkgfHwgKmV4dGVuZCB8fCBuZWVkc196ZXJvaW5nKSkgewogCQlpZiAoaW9jYi0mZ3Q7a2lfZmxhZ3MgJmFtcDsgSU9DQl9OT1dBSVQpIHsKIAkJCXJldCA9IC1FQUdBSU47CiAJCQlnb3RvIG91dDsKQEAgLTQ4OSwyMSAmIzQzOzU0MSwyOCBAQCBzdGF0aWMgc3NpemVfdCBleHQ0X2Rpb193cml0ZV9jaGVja3Moc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sCiAJLyoKIAkgKiBOb3cgdGhhdCBsb2NraW5nIGlzIHNldHRsZWQsIGRldGVybWluZSBkaW8gZmxhZ3MgYW5kIGV4Y2x1c2l2aXR5CiAJICogcmVxdWlyZW1lbnRzLiBXZSBkb24mIzM5O3QgdXNlIERJT19PVkVSV1JJVEVfT05MWSBiZWNhdXNlIHdlIGVuZm9yY2UKLQkgKiBiZWhhdmlvciBhbHJlYWR5LiBUaGUgaW5vZGUgbG9jayBpcyBhbHJlYWR5IGhlbGQgZXhjbHVzaXZlIGlmIHRoZQotCSAqIHdyaXRlIGlzIG5vbi1vdmVyd3JpdGUgb3IgZXh0ZW5kaW5nLCBzbyBkcmFpbiBhbGwgb3V0c3RhbmRpbmcgZGlvIGFuZAotCSAqIHNldCB0aGUgZm9yY2Ugd2FpdCBkaW8gZmxhZy4KJiM0MzsJICogYmVoYXZpb3IgYWxyZWFkeS4gV2hlbiBob2xkaW5nIHRoZSBleGNsdXNpdmUgbG9jayBmb3IgYSB3cml0ZSB0aGF0CiYjNDM7CSAqIG5lZWRzIHBhcnRpYWwgYmxvY2sgemVyb2luZyBvciBpcyBleHRlbmRpbmcgdGhlIGZpbGUsIHdlIG11c3Qgd2FpdAomIzQzOwkgKiBmb3IgdGhlIEkvTyB0byBjb21wbGV0ZSBzeW5jaHJvbm91c2x5OgomIzQzOwkgKgomIzQzOwkgKiAgLSBuZWVkc196ZXJvaW5nOiBkcmFpbiBpbi1mbGlnaHQgRElPIHdob3NlIGVuZF9pbyBjb3VsZCByYWNlIHdpdGgKJiM0MzsJICogICAgb3VyIHBhcnRpYWwgYmxvY2sgemVyb2luZywgYW5kIGZvcmNlIHN5bmNocm9ub3VzIGNvbXBsZXRpb24gc28gd2UKJiM0MzsJICogICAgZG9uJiMzOTt0IGxlYXZlIGluLWZsaWdodCB6ZXJvaW5nIGJpb3MgZm9yIHRoZSBuZXh0IHdyaXRlciB0byBkcmFpbi4KJiM0MzsJICoKJiM0MzsJICogIC0gZXh0ZW5kOiB0aGUgY2FsbGVyIG11c3QgdXBkYXRlIGlfZGlza3NpemUgYWZ0ZXIgSS9PIGNvbXBsZXRpb24sCiYjNDM7CSAqICAgIHdoaWNoIHJlcXVpcmVzIHRoZSBkYXRhIHRvIGJlIG9uIGRpc2sgZmlyc3QuCiAJICovCi0JaWYgKCEqaWxvY2tfc2hhcmVkICZhbXA7JmFtcDsgKHVuYWxpZ25lZF9pbyB8fCAqZXh0ZW5kKSkgewomIzQzOwlpZiAoISppbG9ja19zaGFyZWQgJmFtcDsmYW1wOyAobmVlZHNfemVyb2luZyB8fCAqZXh0ZW5kKSkgewogCQlpZiAoaW9jYi0mZ3Q7a2lfZmxhZ3MgJmFtcDsgSU9DQl9OT1dBSVQpIHsKIAkJCXJldCA9IC1FQUdBSU47CiAJCQlnb3RvIG91dDsKIAkJfQotCQlpZiAodW5hbGlnbmVkX2lvICZhbXA7JmFtcDsgKCFvdmVyd3JpdGUgfHwgdW53cml0dGVuKSkKJiM0MzsJCWlmIChuZWVkc196ZXJvaW5nKQogCQkJaW5vZGVfZGlvX3dhaXQoaW5vZGUpOwogCQkqZGlvX2ZsYWdzID0gSU9NQVBfRElPX0ZPUkNFX1dBSVQ7CiAJfQogCi0JcmV0ID0gZmlsZV9tb2RpZmllZChmaWxlKTsKJiM0MzsJcmV0ID0ga2lvY2JfbW9kaWZpZWQoaW9jYik7CiAJaWYgKHJldCAmbHQ7IDApCiAJCWdvdG8gb3V0OwogCkBAIC02NzIsNiAmIzQzOzczMSwxMSBAQCBleHQ0X2RheF93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKQogCWNvdW50ID0gaW92X2l0ZXJfY291bnQoZnJvbSk7CiAKIAlpZiAob2Zmc2V0ICYjNDM7IGNvdW50ICZndDsgRVhUNF9JKGlub2RlKS0mZ3Q7aV9kaXNrc2l6ZSkgewomIzQzOwkJaWYgKGlvY2ItJmd0O2tpX2ZsYWdzICZhbXA7IElPQ0JfTk9XQUlUKSB7CiYjNDM7CQkJcmV0ID0gLUVBR0FJTjsKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsJCX0KJiM0MzsKIAkJaGFuZGxlID0gZXh0NF9qb3VybmFsX3N0YXJ0KGlub2RlLCBFWFQ0X0hUX0lOT0RFLCAyKTsKIAkJaWYgKElTX0VSUihoYW5kbGUpKSB7CiAJCQlyZXQgPSBQVFJfRVJSKGhhbmRsZSk7CmRpZmYgLS1naXQgYS9mcy9leHQ0L2lub2RlLmMgYi9mcy9leHQ0L2lub2RlLmMKaW5kZXggYzJjMmQ2YWM3ZjNkMTMuLjNjMDUwOTQ0NzVkYjFjIDEwMDY0NAotLS0gYS9mcy9leHQ0L2lub2RlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9pbm9kZS5jCkBAIC03NTksOCAmIzQzOzc1OSw5IEBAIGludCBleHQ0X21hcF9ibG9ja3MoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCUJVRygpOwogCQl9CiAKJiM0MzsJCS8qIFNraXAgYmxvY2tpbmcgb3BlcmF0aW9ucyBhbmQganVtcCB0byBleHRlbnQgdmFsaWRhdGlvbi4gKi8KIAkJaWYgKGZsYWdzICZhbXA7IEVYVDRfR0VUX0JMT0NLU19DQUNIRURfTk9XQUlUKQotCQkJcmV0dXJuIHJldHZhbDsKJiM0MzsJCQlnb3RvIGZvdW5kOwogI2lmZGVmIEVTX0FHR1JFU1NJVkVfVEVTVAogCQlleHQ0X21hcF9ibG9ja3NfZXNfcmVjaGVjayhoYW5kbGUsIGlub2RlLCBtYXAsCiAJCQkJCSAgICZhbXA7b3JpZ19tYXAsIGZsYWdzKTsKQEAgLTc3Niw3ICYjNDM7Nzc3LDcgQEAgaW50IGV4dDRfbWFwX2Jsb2NrcyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCSAqIGNhbm5vdCBmaW5kIGV4dGVudCBpbiB0aGUgY2FjaGUuCiAJICovCiAJaWYgKGZsYWdzICZhbXA7IEVYVDRfR0VUX0JMT0NLU19DQUNIRURfTk9XQUlUKQotCQlyZXR1cm4gMDsKJiM0MzsJCXJldHVybiAtRUFHQUlOOwogCiAJLyoKIAkgKiBUcnkgdG8gc2VlIGlmIHdlIGNhbiBnZXQgdGhlIGJsb2NrIHdpdGhvdXQgcmVxdWVzdGluZyBhIG5ldwpAQCAtNzk3LDYgJiM0Mzs3OTgsOSBAQCBpbnQgZXh0NF9tYXBfYmxvY2tzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJaWYgKChmbGFncyAmYW1wOyBFWFQ0X0dFVF9CTE9DS1NfQ1JFQVRFKSA9PSAwKQogCQlyZXR1cm4gcmV0dmFsOwogCiYjNDM7CS8qIEVYVDRfR0VUX0JMT0NLU19DUkVBVEUgY2Fubm90IG9wZXJhdGUgaW4gTk9XQUlUIG1vZGUgKi8KJiM0MzsJV0FSTl9PTl9PTkNFKGZsYWdzICZhbXA7IEVYVDRfR0VUX0JMT0NLU19DQUNIRURfTk9XQUlUKTsKJiM0MzsKIAkvKgogCSAqIFJldHVybnMgaWYgdGhlIGJsb2NrcyBoYXZlIGFscmVhZHkgYWxsb2NhdGVkCiAJICoKQEAgLTM2NzIsNiAmIzQzOzM2NzYsOSBAQCBzdGF0aWMgaW50IGV4dDRfaW9tYXBfYWxsb2Moc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dDRfbWFwX2Jsb2NrcyAqbWFwLAogCWludCByZXQsIGRpb19jcmVkaXRzLCBtX2ZsYWdzID0gMCwgcmV0cmllcyA9IDA7CiAJYm9vbCBmb3JjZV9jb21taXQgPSBmYWxzZTsKIAomIzQzOwlpZiAoZmxhZ3MgJmFtcDsgSU9NQVBfTk9XQUlUKQomIzQzOwkJcmV0dXJuIC1FQUdBSU47CiYjNDM7CiAJLyoKIAkgKiBUcmltIHRoZSBtYXBwaW5nIHJlcXVlc3QgdG8gdGhlIG1heGltdW0gdmFsdWUgdGhhdCB3ZSBjYW4gbWFwIGF0CiAJICogb25jZSBmb3IgZGlyZWN0IEkvTy4KQEAgLTM3NzcsNiAmIzQzOzM3ODQsNyBAQCBzdGF0aWMgaW50IGV4dDRfaW9tYXBfYmVnaW4oc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbmd0aCwKIAlzdHJ1Y3QgZXh0NF9tYXBfYmxvY2tzIG1hcDsKIAl1OCBibGtiaXRzID0gaW5vZGUtJmd0O2lfYmxrYml0czsKIAl1bnNpZ25lZCBpbnQgb3JpZ19tbGVuOwomIzQzOwlpbnQgbWFwX2ZsYWdzID0gMDsKIAogCWlmICgob2Zmc2V0ICZndDsmZ3Q7IGJsa2JpdHMpICZndDsgRVhUNF9NQVhfTE9HSUNBTF9CTE9DSykKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0zNzkxLDYgJiM0MzszNzk5LDEyIEBAIHN0YXRpYyBpbnQgZXh0NF9pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuZ3RoLAogCW1hcC5tX2xlbiA9IG1pbl90KGxvZmZfdCwgKG9mZnNldCAmIzQzOyBsZW5ndGggLSAxKSAmZ3Q7Jmd0OyBibGtiaXRzLAogCQkJICBFWFQ0X01BWF9MT0dJQ0FMX0JMT0NLKSAtIG1hcC5tX2xibGsgJiM0MzsgMTsKIAlvcmlnX21sZW4gPSBtYXAubV9sZW47CiYjNDM7CS8qCiYjNDM7CSAqIEluIE5PV0FJVCBjb250ZXh0LCBvbmx5IHVzZSBjYWNoZWQgZXh0ZW50IGluZm8uIElmIGVzIGNhY2hlIG1pc3NlcywKJiM0MzsJICogcmV0dXJuIC1FQUdBSU4gdG8gYXZvaWQgc2xlZXBpbmcgb24gZG93bl9yZWFkKGlfZGF0YV9zZW0pLgomIzQzOwkgKi8KJiM0MzsJaWYgKGZsYWdzICZhbXA7IElPTUFQX05PV0FJVCkKJiM0MzsJCW1hcF9mbGFncyA9IEVYVDRfR0VUX0JMT0NLU19DQUNIRURfTk9XQUlUOwogCiAJaWYgKGZsYWdzICZhbXA7IElPTUFQX1dSSVRFKSB7CiAJCS8qCkBAIC0zODAwLDcgJiM0MzszODE0LDcgQEAgc3RhdGljIGludCBleHQ0X2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW5ndGgsCiAJCSAqIGVzcGVjaWFsbHkgaW4gbXVsdGktdGhyZWFkZWQgb3ZlcndyaXRlIHJlcXVlc3RzLgogCQkgKi8KIAkJaWYgKG9mZnNldCAmIzQzOyBsZW5ndGggJmx0Oz0gaV9zaXplX3JlYWQoaW5vZGUpKSB7Ci0JCQlyZXQgPSBleHQ0X21hcF9ibG9ja3MoTlVMTCwgaW5vZGUsICZhbXA7bWFwLCAwKTsKJiM0MzsJCQlyZXQgPSBleHQ0X21hcF9ibG9ja3MoTlVMTCwgaW5vZGUsICZhbXA7bWFwLCBtYXBfZmxhZ3MpOwogCQkJLyoKIAkJCSAqIEZvciBEQVggd2UgY29udmVydCBleHRlbnRzIHRvIGluaXRpYWxpemVkIG9uZXMgYmVmb3JlCiAJCQkgKiBjb3B5aW5nIHRoZSBkYXRhLCBvdGhlcndpc2Ugd2UgZG8gaXQgYWZ0ZXIgSS9PIHNvCkBAIC0zODIxLDcgJiM0MzszODM1LDcgQEAgc3RhdGljIGludCBleHQ0X2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW5ndGgsCiAJCX0KIAkJcmV0ID0gZXh0NF9pb21hcF9hbGxvYyhpbm9kZSwgJmFtcDttYXAsIGZsYWdzKTsKIAl9IGVsc2UgewotCQlyZXQgPSBleHQ0X21hcF9ibG9ja3MoTlVMTCwgaW5vZGUsICZhbXA7bWFwLCAwKTsKJiM0MzsJCXJldCA9IGV4dDRfbWFwX2Jsb2NrcyhOVUxMLCBpbm9kZSwgJmFtcDttYXAsIG1hcF9mbGFncyk7CiAJfQogCiAJaWYgKHJldCAmbHQ7IDApCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA5OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxNjcKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA1MzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEaXJlY3QgSS9PIChESU8pIENoYW5nZXMgaW4gZXh0NCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBhZmZlY3RpbmcgYGZzL2V4dDQvZmlsZS5jYCBhbmQgYGZzL2V4dDQvaW5vZGUuY2AuIEl0JiMzOTtzIGFsbCBhYm91dCBESU8sIHBhcnRpY3VsYXJseSBkZWFsaW5nIHdpdGggdW5hbGlnbmVkIHdyaXRlcyBhbmQgdGhlIGFzc29jaWF0ZWQgbG9ja2luZyBtZWNoYW5pc21zIHdpdGhpbiBleHQ0LiBJbnRlcmVzdGluZy4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBhcHBlYXJzIHRvIGJlIGNlbnRlcmVkIGFyb3VuZCBgZXh0NF9kaW9fbmVlZHNfemVyb2luZ2AsIHdoaWNoIHNlZW1zIHRvIGJlIHJlcGxhY2luZyBgZXh0NF9vdmVyd3JpdGVfaW9gLiBJdCBhbHNvIGltcGFjdHMgYGV4dDRfZGlvX3dyaXRlX2NoZWNrc2AgYW5kIGludHJvZHVjZXMgY2hhbmdlcyB0byBsb2NraW5nLiBSZXBsYWNpbmcgYGZpbGVfbW9kaWZpZWRgIHdpdGggYGtpb2NiX21vZGlmaWVkYCBpcyBhIGdvb2QgcmVmaW5lbWVudC4gQW5kIHRoZXJlJiMzOTtzIHRoaXMgYGlub2RlX2Rpb193YWl0KGlub2RlKWAgYWRkaXRpb24gaW4gYGV4dDRfYnVmZmVyZWRfd3JpdGVfaXRlcmAsIHJpZ2h0LiBJIGFtIHNlZWluZyBtb2RpZmljYXRpb25zIHRvIGBleHQ0X2RheF93cml0ZV9pdGVyYCBmb3IgYElPQ0JfTk9XQUlUYCwgd2hpY2ggaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCBtZXJpdHMgZXhhbWluYXRpb24sIGFsb25nIHdpdGggdXBkYXRlcyB0byBgZXh0NF9tYXBfYmxvY2tzYCB0byBiZXR0ZXIgaGFuZGxlIGBFWFQ0X0dFVF9CTE9DS1NfQ0FDSEVEX05PV0FJVGAuIEZpbmFsbHksIGBleHQ0X2lvbWFwX2FsbG9jYCBhbmQgYGV4dDRfaW9tYXBfYmVnaW5gIGFyZSB1cGRhdGVkIGZvciBgSU9NQVBfTk9XQUlUYC4KClRoaXMgaXMgYWxsIGZ1bmN0aW9uYWwgbG9naWMsIHZlcnkgY29yZSB0byBleHQ0LiBXZSBkZWZpbml0ZWx5IG5lZWQgdG8gZnV6eiB0aGlzIGFyZWEuIFRoZXNlIHNvcnRzIG9mIGNoYW5nZXMgYXJlIGdvbGQgbWluZXMgZm9yIHVuY292ZXJpbmcgdHJpY2t5IGNvbmN1cnJlbmN5IGJ1Z3Mgb3Igc3VidGxlIEkvTyBlcnJvcnMuCgpOb3csIGxldCYjMzk7cyB6ZXJvIGluIG9uIHRoZSBrZXkgZnVuY3Rpb25zIG1vZGlmaWVkLiBJdCBsb29rcyBsaWtlIGl0IGlzOgoKKiAgIGBleHQ0X2Rpb19uZWVkc196ZXJvaW5nYCAobmV3KQoqICAgYGV4dDRfZGlvX3dyaXRlX2NoZWNrc2AKKiAgIGBleHQ0X2J1ZmZlcmVkX3dyaXRlX2l0ZXJgCiogICBgZXh0NF9kYXhfd3JpdGVfaXRlcmAKKiAgIGBleHQ0X21hcF9ibG9ja3NgCiogICBgZXh0NF9pb21hcF9hbGxvY2AKKiAgIGBleHQ0X2lvbWFwX2JlZ2luYAoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZSwgaXQgbG9va3MgbGlrZSBgZXh0NF9kaW9fbmVlZHNfemVyb2luZ2AsIGBleHQ0X2Rpb193cml0ZV9jaGVja3NgLCBgZXh0NF9idWZmZXJlZF93cml0ZV9pdGVyYCwgYGV4dDRfZGF4X3dyaXRlX2l0ZXJgLCBgZXh0NF9pb21hcF9hbGxvY2AsIGFuZCBgZXh0NF9pb21hcF9iZWdpbmAgYXJlIHN0YXRpYyBhbmQgaW50ZXJuYWwgdG8gZXh0NC4gSG93ZXZlciwgYGV4dDRfbWFwX2Jsb2Nrc2AgaXMgZXhwb3J0ZWQsIG1lYW5pbmcgaXQmIzM5O3MgYWNjZXNzaWJsZSBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuIEdvb2QgdG8ga25vdyBhcyBpdCYjMzk7cyBvZnRlbiBhbiBlbnRyeSBwb2ludC4KCk9rYXksIHdhaXQgYSBzZWNvbmQuIGBleHQ0X2ZpbGVfd3JpdGVfaXRlcmAgY2FsbHMgZWl0aGVyIGBleHQ0X2Rpb193cml0ZV9pdGVyYCwgYGV4dDRfYnVmZmVyZWRfd3JpdGVfaXRlcmAsIG9yIGBleHQ0X2RheF93cml0ZV9pdGVyYC4gSSBuZWVkIHRvIGNoZWNrIGBmcy9leHQ0L2ZpbGUuY2AgdG8gcGlucG9pbnQgdGhlIGFjdHVhbCBlbnRyeSBwb2ludHMsIGFuZCB2ZXJpZnkgaG93IHRob3NlIERJTyBpbXBsZW1lbnRhdGlvbnMgYXJlIHV0aWxpemVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA5OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V4dDRfZGlvX3dyaXRlX2NoZWNrcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L2ZpbGUuYz00NjM9c3RhdGljIGNvbnN0IHN0cnVjdCBpb21hcF9kaW9fb3BzIGV4dDRfZGlvX3dyaXRlX29wcyA9IHtcbi0tXG5mcy9leHQ0L2ZpbGUuYy00OTQtICovXG5mcy9leHQ0L2ZpbGUuYzo0OTU6c3RhdGljIHNzaXplX3QgZXh0NF9kaW9fd3JpdGVfY2hlY2tzKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tLFxuZnMvZXh0NC9maWxlLmMtNDk2LVx0XHRcdFx0ICAgICBib29sICppbG9ja19zaGFyZWQsIGJvb2wgKmV4dGVuZCxcbi0tXG5mcy9leHQ0L2ZpbGUuYz01Nzg9c3RhdGljIHNzaXplX3QgZXh0NF9kaW9fd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbi0tXG5mcy9leHQ0L2ZpbGUuYy01OTAtXHQgKiBRdWljayBjaGVjayBoZXJlIHdpdGhvdXQgYW55IGlfcndzZW0gbG9jayB0byBzZWUgaWYgaXQgaXMgZXh0ZW5kaW5nXG5mcy9leHQ0L2ZpbGUuYzo1OTE6XHQgKiBJTy4gQSBtb3JlIHJlbGlhYmxlIGNoZWNrIGlzIGRvbmUgaW4gZXh0NF9kaW9fd3JpdGVfY2hlY2tzKCkgd2l0aFxuZnMvZXh0NC9maWxlLmMtNTkyLVx0ICogcHJvcGVyIGxvY2tpbmcgaW4gcGxhY2UuXG4tLVxuZnMvZXh0NC9maWxlLmMtNjI5LVxuZnMvZXh0NC9maWxlLmM6NjMwOlx0cmV0ID0gZXh0NF9kaW9fd3JpdGVfY2hlY2tzKGlvY2IsIGZyb20sIFx1MDAyNmlsb2NrX3NoYXJlZCwgXHUwMDI2ZXh0ZW5kLFxuZnMvZXh0NC9maWxlLmMtNjMxLVx0XHRcdFx0ICAgIFx1MDAyNmRpb19mbGFncyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDk6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzY5NgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYGV4dDRfZmlsZV93cml0ZV9pdGVyYCoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIGBleHQ0X2ZpbGVfd3JpdGVfaXRlcmAuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgY29yZSB3cml0ZSBwYXRoIGZvciBleHQ0LiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBkYXRhIGZsb3cg4oCTIHdoZXJlIGl0IHN0YXJ0cywgaG93IGl0IGhhbmRsZXMgdGhlIElPIHZlY3RvciwgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIGJsb2NrIGFsbG9jYXRvciwgdGhlIGpvdXJuYWwsIGFuZCB0aGUgZGlydHlpbmcgb2YgaW5vZGVzIGFuZCBibG9jayBncm91cHMuIEkmIzM5O20gYWxzbyBjdXJpb3VzIGFib3V0IHRoZSBsb2NraW5nIHNjaGVtZTsgSSBhc3N1bWUgdGhlcmUmIzM5O3MgYSBnb29kIGFtb3VudCBvZiBjb25jdXJyZW5jeSBjb250cm9sIGludm9sdmVkLCBnaXZlbiB0aGUgcG90ZW50aWFsIGZvciBtdWx0aXBsZSB3cml0ZXJzLiBJIG5lZWQgdG8ga2VlcCB0aGUgc3BlY2lmaWNzIG9mIHRoZSBqb3VybmFsaW5nIGltcGxlbWVudGF0aW9uIGluIG1pbmQgLSB0aGUgbnVhbmNlcyBvZiBtZXRhZGF0YSB1cGRhdGVzIHZlcnN1cyBkYXRhIHdyaXRlcy4gSSB3aWxsIGZvY3VzIG9uIHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBJL08gdmVjdG9ycywgYW5kIHRoZSB1bmRlcmx5aW5nIGJsb2NrcyB0aGF0IGFyZSBiZWluZyB3cml0dGVuIHRvIGRpc2sgLSBob3cgdGhleSB3aWxsIGJlIGRlYWx0IHdpdGggaW4gdGhlIGV4dGVudCB0cmVlLiBJIGFsc28gbmVlZCB0byBiZSBhd2FyZSBvZiBob3cgZGlyZWN0IEkvTyBhbmQgYnVmZmVyZWQgSS9PIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGlzIGZ1bmN0aW9uOyBJJiMzOTtsbCBleHBlY3QgdG8gc2VlIGJyYW5jaGluZyBiYXNlZCBvbiB0aGUgZmxhZ3MuIEFuZCwgb2YgY291cnNlLCBJJiMzOTtsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBlcnJvciBoYW5kbGluZyAtIHdoYXQmIzM5O3MgdGhlIGV4cGVjdGVkIGJlaGF2aW9yIHVuZGVyIHZhcmlvdXMgZmFpbHVyZSBzY2VuYXJpb3MsIGFuZCBob3cgYXJlIGVycm9ycyBwcm9wYWdhdGVkIGJhY2sgdXAgdGhlIHN0YWNrLiBJdOKAmXMgYWxzbyB3b3J0aCBjb25zaWRlcmluZyBob3cgd3JpdGViYWNrIGFuZCBwYWdlIGZhdWx0IGhhbmRsaW5nIGlzIGludGVncmF0ZWQsIGFzIHRoYXQgaGFzIGltcGxpY2F0aW9ucyBmb3IgdGhlIG92ZXJhbGwgcGVyZm9ybWFuY2UgcHJvZmlsZS4gSXQmIzM5O3MgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDk6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXh0NF9maWxlX3dyaXRlX2l0ZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9maWxlLmM9NzY5PXN0YXRpYyBzc2l6ZV90XG5mcy9leHQ0L2ZpbGUuYzo3NzA6ZXh0NF9maWxlX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG5mcy9leHQ0L2ZpbGUuYy03NzEte1xuLS1cbmZzL2V4dDQvZmlsZS5jPTEwMzg9Y29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBleHQ0X2ZpbGVfb3BlcmF0aW9ucyA9IHtcbi0tXG5mcy9leHQ0L2ZpbGUuYy0xMDQwLVx0LnJlYWRfaXRlclx0PSBleHQ0X2ZpbGVfcmVhZF9pdGVyLFxuZnMvZXh0NC9maWxlLmM6MTA0MTpcdC53cml0ZV9pdGVyXHQ9IGV4dDRfZmlsZV93cml0ZV9pdGVyLFxuZnMvZXh0NC9maWxlLmMtMTA0Mi1cdC5pb3BvbGxcdFx0PSBpb2NiX2Jpb19pb3BvbGwsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDk6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODI0MAoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDM2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFByb3Bvc2VkIEV4dDQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBteSBtaW5kIGhvbmVzIGluIG9uIGBleHQ0X2ZpbGVfd3JpdGVfaXRlcmAuIFRoYXQmIzM5O3MgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQsIHRoZSBmaXJzdCBwbGFjZSBJJiMzOTtkIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LiBCdXQgd2FpdCwgaXQmIzM5O3Mgbm90IGp1c3QgdGhhdC4gVGhlIHBhdGNoIHRvdWNoZXMgc2V2ZXJhbCBvdGhlciBrZXkgYXJlYXMuIEl0JiMzOTtzIG1vZGlmeWluZyBgZXh0NF9kaW9fd3JpdGVfaXRlcmAsIGBleHQ0X2J1ZmZlcmVkX3dyaXRlX2l0ZXJgLCBhbmQgYGV4dDRfZGF4X3dyaXRlX2l0ZXJgIOKAkyB0aG9zZSBhcmUgYWxsIGNydWNpYWwgZm9yIGRpcmVjdCBJL08sIGJ1ZmZlcmVkIEkvTywgYW5kIERBWCB3cml0ZXMsIHJlc3BlY3RpdmVseS4KCkhvbGQgb24sIEkgc2VlIGl0JiMzOTtzIGFsc28gY2hhbmdpbmcgYGV4dDRfZGlvX3dyaXRlX2NoZWNrc2AsIHdoaWNoIGlzICpjYWxsZWQqIGJ5IGBleHQ0X2Rpb193cml0ZV9pdGVyYC4gSW50ZXJlc3RpbmcuIFRoYXTigJlzIHByb2JhYmx5IHRoZSBpbXBvcnRhbnQgYml0IG9mIGRpcmVjdCBJL08uCgpPa2F5LCBsZXQmIzM5O3MgbWFrZSBhIG1lbnRhbCBsaXN0IGhlcmUgb2YgdGhlIGtleSBmdW5jdGlvbnMgdGhpcyBwYXRjaCBpcyBwbGF5aW5nIHdpdGgsIHRvIGhlbHAgbWUgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoZSBwYXRjaC4KCiogICBgZXh0NF9maWxlX3dyaXRlX2l0ZXJgICh0aGUgYmlnIGthaHVuYSkKKiAgIGBleHQ0X2Rpb193cml0ZV9pdGVyYCAoRGlyZWN0IEkvTykKKiAgIGBleHQ0X2J1ZmZlcmVkX3dyaXRlX2l0ZXJgIChCdWZmZXJlZCBJL08pCiogICBgZXh0NF9kYXhfd3JpdGVfaXRlcmAgKERBWC1zcGVjaWZpYyB3cml0ZXMpCiogICBgZXh0NF9tYXBfYmxvY2tzYCAoQmxvY2sgbWFwcGluZywgdmVyeSBpbXBvcnRhbnQsIGFuZCBwb3RlbnRpYWxseSBwcm9ibGVtYXRpYykKKiAgIGBleHQ0X2lvbWFwX2JlZ2luYCAoSS9PIG1hcCAtIGJlZ2lubmluZykuCgpIbW0sIG5vdyB3aGljaCBvZiB0aGVzZSBpcyB0aGUgKmJlc3QqIHRvIGZvY3VzIG9uPyBJIHRoaW5rIGBleHQ0X2ZpbGVfd3JpdGVfaXRlcmAgYW5kIGBleHQ0X2Rpb193cml0ZV9pdGVyYCBzZWVtIGxpa2UgZ29vZCBvcHRpb25zIHRvIHN0YXJ0IHdpdGguIExldCYjMzk7cyBzZWUgaWYgYGV4dDRfZGlvX3dyaXRlX2l0ZXJgIGlzIHN0YXRpYy4gSXQgaXMsIHNvIHRoYXQgaXMgYSBnb29kIHNpZ24uIFdlIGNhbiBkZWZpbml0ZWx5IHVzZSBzdGF0aWMgZnVuY3Rpb25zIGluIHN5emthbGxlci4gQnV0IG1heWJlIGBleHQ0X2ZpbGVfd3JpdGVfaXRlcmAgaXMgdGhlIGJldHRlciBjaG9pY2UuIEkmIzM5O2xsIG5lZWQgdG8gdGhpbmsgYWJvdXQgd2hpY2ggaXMgYmV0dGVyLgoKSSYjMzk7bSBhIGxpdHRsZSB3YXJ5IG9mIGBleHQ0X21hcF9ibG9ja3NgLiBJdCYjMzk7cyBpbmNyZWRpYmx5IGNvbW1vbiwgYW5kIHRoaXMgcGF0Y2ggbWlnaHQgYmUgYWZmZWN0aW5nIGl0cyBjb3JlIGZ1bmN0aW9uYWxpdHkuIEl0IGNvdWxkIGJlIHRvbyAmIzM0O2hvdCYjMzQ7IHRvIGJlIGEgZ29vZCBmb2N1cywgb3IgaXQgY291bGQgYmUgKnRoZSogY3J1Y2lhbCBwYXJ0IG9mIHRoaXMgcGF0Y2guIEJldHRlciB0byBpbnZlc3RpZ2F0ZSB0aGF0IGNhcmVmdWxseS4KCkkgc2hvdWxkIGFsc28gY2hlY2sgb3V0IGBleHQ0X2lvbWFwX2JlZ2luYCB0byB1bmRlcnN0YW5kIHRoZSBiaWdnZXIgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwOTowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleHQ0X2lvbWFwX2JlZ2luJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvaW5vZGUuYz0zNjcyPXN0YXRpYyBpbnQgZXh0NF9pb21hcF9hbGxvYyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZXh0NF9tYXBfYmxvY2tzICptYXAsXG4tLVxuZnMvZXh0NC9pbm9kZS5jLTM3NzktXG5mcy9leHQ0L2lub2RlLmM6Mzc4MDpzdGF0aWMgaW50IGV4dDRfaW9tYXBfYmVnaW4oc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbmd0aCxcbmZzL2V4dDQvaW5vZGUuYy0zNzgxLVx0XHR1bnNpZ25lZCBmbGFncywgc3RydWN0IGlvbWFwICppb21hcCwgc3RydWN0IGlvbWFwICpzcmNtYXApXG4tLVxuZnMvZXh0NC9pbm9kZS5jPTM4NjY9Y29uc3Qgc3RydWN0IGlvbWFwX29wcyBleHQ0X2lvbWFwX29wcyA9IHtcbmZzL2V4dDQvaW5vZGUuYzozODY3Olx0LmlvbWFwX2JlZ2luXHRcdD0gZXh0NF9pb21hcF9iZWdpbixcbmZzL2V4dDQvaW5vZGUuYy0zODY4LX07XG5mcy9leHQ0L2lub2RlLmMtMzg2OS1cbmZzL2V4dDQvaW5vZGUuYzozODcwOnN0YXRpYyBpbnQgZXh0NF9pb21hcF9iZWdpbl9yZXBvcnQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCxcbmZzL2V4dDQvaW5vZGUuYy0zODcxLVx0XHRcdFx0ICAgbG9mZl90IGxlbmd0aCwgdW5zaWduZWQgaW50IGZsYWdzLFxuLS1cbmZzL2V4dDQvaW5vZGUuYz0zOTIxPWNvbnN0IHN0cnVjdCBpb21hcF9vcHMgZXh0NF9pb21hcF9yZXBvcnRfb3BzID0ge1xuZnMvZXh0NC9pbm9kZS5jOjM5MjI6XHQuaW9tYXBfYmVnaW4gPSBleHQ0X2lvbWFwX2JlZ2luX3JlcG9ydCxcbmZzL2V4dDQvaW5vZGUuYy0zOTIzLX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDk6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTU2MwoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZXh0NCBzaXR1YXRpb24gaGVyZS4gKipDaGVja2luZyBFWFQ0IENvbmZpZ3VyYXRpb24qKgoKRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIGlmIEVYVDQgaXMgZXZlbiBlbmFibGVkIGJ5IGRlZmF1bHQuIEFoLCB5ZXMsIGl0JiMzOTtzIGEgY29yZSBmaWxlc3lzdGVtLiBObyBzdXJwcmlzZSB0aGVyZS4gTm93LCBpcyB0aGVyZSBhbnl0aGluZyBzcGVjaWZpYyBJIG5lZWQgdG8gd2F0Y2ggb3V0IGZvciBpbiB0aGUgY29uZmlndXJhdGlvbj8gTGV0JiMzOTtzIHNlZS4uLiBgQ09ORklHX0VYVDRfRlNgLCB0aGF0JiMzOTtzIHRoZSBwcmltYXJ5IGZsYWcsIEkga25ldyB0aGF0LgoKT2theSwgd2hhdCBhYm91dCBEaXJlY3QgQWNjZXNzIChEQVgpIHN1cHBvcnQ/IEkgcmVtZW1iZXIgc29tZSBjb21wbGV4aXRpZXMgd2l0aCB0aGF0LiBMZXQgbWUgcXVpY2tseSBzZWUgaWYgdGhlcmUgYXJlIGFueSBEQVggc3BlY2lmaWMgZmlsZXMuIEFscmlnaHQsIEkgY2FuIHNlZSB0aGF0IGBleHQ0X2RheF93cml0ZV9pdGVyYCBoYXMgYmVlbiBtb2RpZmllZCwgd2hpY2ggbWVhbnMgaXQgaXMgbGlrZWx5IHN1cHBvcnRlZC4gT2theSwgc28gREFYIHdpbGwgcmVxdWlyZSBgQ09ORklHX0ZTX0RBWGAgdG8gYWxzbyBiZSBlbmFibGVkLiBHb3QgaXQsIG1vdmluZyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDk6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXh0NF9kYXhfd3JpdGVfaXRlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L2ZpbGUuYz03MDk9c3RhdGljIHNzaXplX3RcbmZzL2V4dDQvZmlsZS5jOjcxMDpleHQ0X2RheF93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxuZnMvZXh0NC9maWxlLmMtNzExLXtcbi0tXG5mcy9leHQ0L2ZpbGUuYz03NzA9ZXh0NF9maWxlX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG4tLVxuZnMvZXh0NC9maWxlLmMtNzgwLVx0aWYgKElTX0RBWChpbm9kZSkpXG5mcy9leHQ0L2ZpbGUuYzo3ODE6XHRcdHJldHVybiBleHQ0X2RheF93cml0ZV9pdGVyKGlvY2IsIGZyb20pO1xuZnMvZXh0NC9maWxlLmMtNzgyLSNlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwOTowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDA0MAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgZGlzdGlsbGVkOgoKKipDaGVja2luZyBgQ09ORklHX0ZTX0RBWGAgRGVwZW5kZW5jeSoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIHRvdWNoZXMgYGV4dDRfZGF4X3dyaXRlX2l0ZXJgLiBJbW1lZGlhdGVseSwgdGhlIGFsYXJtIGJlbGxzIGFyZSByaW5naW5nIGFib3V0IGBDT05GSUdfRlNfREFYYC4gSXQmIzM5O3MgcHJldHR5IGxpa2VseSB0aGlzIGZ1bmN0aW9uIGlzIGd1YXJkZWQgYnkgdGhhdCBkZWZpbmUuIEkgbmVlZCB0byBjb25maXJtIHRoaXMgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIuIEJlc3QgYmV0IGlzIHRvIGp1bXAgb3ZlciB0byBgZnMvZXh0NC9maWxlLmNgIGFuZCB0YWtlIGEgbG9vayBhcm91bmQgbGluZSA3ODAuIFNlZSBpZiB0aGF0JiMzOTtzIHdoZXJlIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBoYXBwZW5zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwOTowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2V4dDQvZmlsZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3NzA6XHRleHQ0X2ZpbGVfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbiA3NzE6XHR7XG4gNzcyOlx0XHRpbnQgcmV0O1xuIDc3MzpcdFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoaW9jYi1cdTAwM2VraV9maWxwKTtcbiA3NzQ6XHRcbiA3NzU6XHRcdHJldCA9IGV4dDRfZW1lcmdlbmN5X3N0YXRlKGlub2RlLVx1MDAzZWlfc2IpO1xuIDc3NjpcdFx0aWYgKHVubGlrZWx5KHJldCkpXG4gNzc3Olx0XHRcdHJldHVybiByZXQ7XG4gNzc4Olx0XG4gNzc5Olx0I2lmZGVmIENPTkZJR19GU19EQVhcbiA3ODA6XHRcdGlmIChJU19EQVgoaW5vZGUpKVxuIDc4MTpcdFx0XHRyZXR1cm4gZXh0NF9kYXhfd3JpdGVfaXRlcihpb2NiLCBmcm9tKTtcbiA3ODI6XHQjZW5kaWZcbiA3ODM6XHRcbiA3ODQ6XHRcdGlmIChpb2NiLVx1MDAzZWtpX2ZsYWdzIFx1MDAyNiBJT0NCX0FUT01JQykge1xuIDc4NTpcdFx0XHRzaXplX3QgbGVuID0gaW92X2l0ZXJfY291bnQoZnJvbSk7XG4gNzg2Olx0XG4gNzg3Olx0XHRcdGlmIChsZW4gXHUwMDNjIEVYVDRfU0IoaW5vZGUtXHUwMDNlaV9zYiktXHUwMDNlc19hd3VfbWluIHx8XG4gNzg4Olx0XHRcdCAgICBsZW4gXHUwMDNlIEVYVDRfU0IoaW5vZGUtXHUwMDNlaV9zYiktXHUwMDNlc19hd3VfbWF4KVxuIDc4OTpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwOTowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDU5OAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDU3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBFeHQ0IFdyaXRlIFBhdGggVGVzdGluZyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmlnaHQgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0ZXN0aW5nIHRoZXNlIGV4dDQgd3JpdGUgcGF0aHMuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCBgQ09ORklHX0ZTX0RBWGAgd291bGQgYmUgdGhlIGtleSwgc2luY2UgdGhlIHByaW1hcnkgZm9jdXMgaXMgb24gYGV4dDRfZGF4X3dyaXRlX2l0ZXJgLiBCdXQgaG9sZCBvbi4uLiB0aGlzIHBhdGNoIGFsc28gdG91Y2hlcyBgZXh0NF9kaW9fd3JpdGVfY2hlY2tzYCBhbmQgYGV4dDRfYnVmZmVyZWRfd3JpdGVfaXRlcmAsIHdoaWNoIGFyZW4mIzM5O3QgbmVjZXNzYXJpbHkgREFYLXNwZWNpZmljLiBUaGF0IG1lYW5zIGBDT05GSUdfRVhUNF9GU2AgaXMgdGhlIHJlYWwgYmFzZWxpbmUgcmVxdWlyZW1lbnQsIGJ1dCBgRlNfREFYYCBpcyBhbHNvIHVzZWZ1bCBhbmQgZ29vZCB0byBoYXZlIGVuYWJsZWQgdG8gdGVzdCB0aGUgREFYIGNvbXBvbmVudC4KCkkgc2hvdWxkIHByb2JhYmx5IHJldmlldyBob3cgdGhvc2UgYXJlIHVzZWQuIFNvIGxldCBtZSBjaGVjayBgZXh0NF9kaW9fbmVlZHNfemVyb2luZ2AgYW5kIGBleHQ0X2Rpb193cml0ZV9jaGVja3NgLiBSaWdodCwgdGhvc2UgYXJlIHJlbGF0ZWQgdG8gRGlyZWN0IEkvTy4KCkxldCYjMzk7cyBtYWtlIGEgbGlzdCBvZiBzeW1ib2xzIEkgc2hvdWxkIGZvY3VzIG9uIGZvciB0aGlzOgoqICAgYGV4dDRfZGlvX3dyaXRlX2l0ZXJgCiogICBgZXh0NF9idWZmZXJlZF93cml0ZV9pdGVyYAoqICAgYGV4dDRfZGF4X3dyaXRlX2l0ZXJgCiogICBgZXh0NF9maWxlX3dyaXRlX2l0ZXJgCiogICBgZXh0NF9pb21hcF9iZWdpbmAKCk5vdywgbGV0JiMzOTtzIHZlcmlmeSBpZiBlYWNoIG9mIHRoZXNlIHN5bWJvbHMgaXMgc3RhdGljIG9yIGdsb2JhbC4gIE9rYXksIEkgc2VlIHRoYXQuLi4KKiAgIGBleHQ0X2Rpb193cml0ZV9pdGVyYCBpcyBzdGF0aWMuCiogICBgZXh0NF9idWZmZXJlZF93cml0ZV9pdGVyYCBpcyBzdGF0aWMuCiogICBgZXh0NF9kYXhfd3JpdGVfaXRlcmAgaXMgc3RhdGljLgoqICAgYGV4dDRfZmlsZV93cml0ZV9pdGVyYCBpcyBzdGF0aWMuCiogICBgZXh0NF9pb21hcF9iZWdpbmAgaXMgc3RhdGljLgoqICAgSG93ZXZlciwgYGV4dDRfbWFwX2Jsb2Nrc2AgaXMgZ2xvYmFsLgoKTm93IHRvIG1ha2UgYSBmaW5hbCBkZWNpc2lvbiwgSSYjMzk7bGwgZ28gd2l0aCB0aGUgbGlzdCBvZiB0aGVzZSBzeW1ib2xzOgoqICAgYGV4dDRfZGlvX3dyaXRlX2l0ZXJgCiogICBgZXh0NF9idWZmZXJlZF93cml0ZV9pdGVyYAoqICAgYGV4dDRfZGF4X3dyaXRlX2l0ZXJgCiogICBgZXh0NF9maWxlX3dyaXRlX2l0ZXJgCiogICBgZXh0NF9pb21hcF9iZWdpbmAKKiAgIGBleHQ0X21hcF9ibG9ja3NgCgpIb2xkIG9uLi4uIGFyZSB0aGVzZSBhbGwgdG9vIGNvbW1vbj8gYGV4dDRfbWFwX2Jsb2Nrc2AgaXMgcHJvYmFibHkgKnZlcnkqIGhvdCwgYW5kIHNvIGlzIGBleHQ0X2ZpbGVfd3JpdGVfaXRlcmAuIFVzaW5nIHRob3NlIG1heSBza2V3IHRoZSByZXN1bHRzIGlmIEkmIzM5O20gbm90IGNhcmVmdWwuICBgZXh0NF9kaW9fd3JpdGVfaXRlcmAgYW5kIGBleHQ0X2RheF93cml0ZV9pdGVyYCBzZWVtIGJldHRlciwgc2luY2UgdGhleSBhcmUgZGlyZWN0bHkgcmVsYXRlZCB0byBESU8gYW5kIERBWCByZXNwZWN0aXZlbHkuICBgZXh0NF9idWZmZXJlZF93cml0ZV9pdGVyYCBpcyBhbHNvIGltcG9ydGFudCBmb3IgYnVmZmVyZWQgSU8uIFNvLCBmb2N1c2luZyBvbiB0aG9zZSBtYWtlcyBtb3JlIHNlbnNlLgoKU28gSSB3aWxsIGluY2x1ZGUgdGhlIGZvbGxvd2luZzoKKiAgIGBleHQ0X2Rpb193cml0ZV9pdGVyYAoqICAgYGV4dDRfYnVmZmVyZWRfd3JpdGVfaXRlcmAKKiAgIGBleHQ0X2RheF93cml0ZV9pdGVyYAoqICAgYGV4dDRfaW9tYXBfYmVnaW5gCgpGaW5hbGx5LCB0byB2ZXJpZnkgdGhlIGNvbmZpZ3VyYXRpb25zLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQ6CiogICBgRVhUNF9GU2AgaXMgZW5hYmxlZAoqICAgYEZTX0RBWGAgaXMgZW5hYmxlZApJJiMzOTtsbCBkb3VibGUtY2hlY2sgdG8gbWFrZSBzdXJlIGBGU19EQVhgIGlzIGEgdmFsaWQgY29uZmlnLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwOTowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRlNfREFYJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL0tjb25maWc9NTY9ZW5kaWYgIyBCTE9DS1xuZnMvS2NvbmZpZy01Ny1cbmZzL0tjb25maWc6NTg6Y29uZmlnIEZTX0RBWFxuZnMvS2NvbmZpZy01OS1cdGJvb2wgXCYjMzQ7RmlsZSBzeXN0ZW0gYmFzZWQgRGlyZWN0IEFjY2VzcyAoREFYKSBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvS2NvbmZpZy04OS1cbmZzL0tjb25maWc6OTA6Y29uZmlnIEZTX0RBWF9QTURcbmZzL0tjb25maWctOTEtXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA5OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDI5CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoaXMgZXh0NCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCB0aGlzIGBGU19EQVhgIGNoYW5nZSBpcyB2YWxpZC4gSXQmIzM5O3MgZm9jdXNlZCBvbiBpbXByb3ZpbmcgaG93IGV4dDQgaGFuZGxlcyBEaXJlY3QgSS9PIGFuZCBEQVggd3JpdGVzLCBzcGVjaWZpY2FsbHkgYWRkcmVzc2luZyBsb2NraW5nIGlzc3VlcyBhbmQgaW5jb21wbGV0ZSBibG9jayB6ZXJvaW5nIHdoZW4gZGVhbGluZyB3aXRoIHVuYWxpZ25lZCBEaXJlY3QgSS9PIHdyaXRlcy4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBiZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gZXh0NCYjMzk7cyBJL08gaGFuZGxpbmcuIFRoYXQmIzM5O3MgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcgYW5kIGEgZ29vZCBpbmRpY2F0b3IgZm9yIGZ1enppbmcgdGFyZ2V0cy4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6b29tIGluIG9uIHRoZXNlIGZ1bmN0aW9ucywgYmVjYXVzZSB0aGV5IHJlcHJlc2VudCB0aGUgY29yZSBmdW5jdGlvbmFsIGNoYW5nZXM6IGBleHQ0X2Rpb193cml0ZV9pdGVyYCwgYGV4dDRfYnVmZmVyZWRfd3JpdGVfaXRlcmAsIGBleHQ0X2RheF93cml0ZV9pdGVyYCwgYGV4dDRfZGlvX3dyaXRlX2NoZWNrc2AsIGBleHQ0X2Rpb19uZWVkc196ZXJvaW5nYCwgYW5kIGBleHQ0X2lvbWFwX2JlZ2luYC4KCkFoYSwgYGV4dDRfZGlvX25lZWRzX3plcm9pbmdgIGxvb2tzIHBhcnRpY3VsYXJseSBwcm9taXNpbmcgc2luY2UgaXQmIzM5O3MgYSAqbmV3KiBmdW5jdGlvbi4gTmV3IGZ1bmN0aW9ucyBhcmUgb2Z0ZW4gZ29vZCBjYW5kaWRhdGVzIGZvciBmb2N1c2VkIHRlc3RpbmcuIGBleHQ0X2Rpb193cml0ZV9jaGVja3NgIGFsc28gc2VlbXMgbGlrZSBpdCYjMzk7bGwgYmUgYSBrZXkgcGFydCBvZiB0aGUgbG9naWMgdGhhdCB3aWxsIG5lZWQgdGhvcm91Z2ggZnV6emluZy4KCkxldCYjMzk7cyBxdWlja2x5IGNvbmZpcm0gdGhhdCBgZXh0NF9kaW9fbmVlZHNfemVyb2luZ2AgaXMgaW5kZWVkIHBhcnQgb2YgdGhlIHBhdGNoLiBZZXMsIGl0JiMzOTtzIHRoZXJlLiBUaGF0JiMzOTtzIGdyZWF0IQoKQWxyaWdodCwgSSYjMzk7dmUgZ290IG15IGxpc3QuIEkmIzM5O20gZ29pbmcgdG8gY29uY2VudHJhdGUgb24gZnV6emluZyB0aGVzZSBzeW1ib2xzOiBgZXh0NF9kaW9fbmVlZHNfemVyb2luZ2AsIGBleHQ0X2Rpb193cml0ZV9jaGVja3NgLCBgZXh0NF9kaW9fd3JpdGVfaXRlcmAsIGBleHQ0X2J1ZmZlcmVkX3dyaXRlX2l0ZXJgLCBgZXh0NF9kYXhfd3JpdGVfaXRlcmAsIGFuZCBgZXh0NF9pb21hcF9iZWdpbmAuCgpBbmQsIGFzIGZhciBhcyBjb25maWdzIGdvLCBgRVhUNF9GU2AgYW5kIGBGU19EQVhgIGFyZSB0aGUga2V5cyBoZXJlLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGBFWFQ0X0ZTYCBpcyB0aGUgY29ycmVjdCBuYW1lIGZvciB0aGUgZXh0NCBmaWxlc3lzdGVtIGNvbmZpZywgYnV0IEkmIzM5O20gcHJldHR5IHN1cmUgaXQgaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA5OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBFWFQ0X0ZTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvZXh0NC9LY29uZmlnOjI6Y29uZmlnIEVYVDRfRlNcbmZzL2V4dDQvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7VGhlIEV4dGVuZGVkIDQgKGV4dDQpIGZpbGVzeXN0ZW1cJiMzNDtcbi0tXG5mcy9leHQ0L0tjb25maWc9MzU9Y29uZmlnIEVYVDRfVVNFX0ZPUl9FWFQyXG4tLVxuZnMvZXh0NC9LY29uZmlnLTQ1LVxuZnMvZXh0NC9LY29uZmlnOjQ2OmNvbmZpZyBFWFQ0X0ZTX1BPU0lYX0FDTFxuZnMvZXh0NC9LY29uZmlnLTQ3LVx0Ym9vbCBcJiMzNDtFeHQ0IFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXCYjMzQ7XG4tLVxuZnMvZXh0NC9LY29uZmlnLTU1LVxuZnMvZXh0NC9LY29uZmlnOjU2OmNvbmZpZyBFWFQ0X0ZTX1NFQ1VSSVRZXG5mcy9leHQ0L0tjb25maWctNTctXHRib29sIFwmIzM0O0V4dDQgU2VjdXJpdHkgTGFiZWxzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA5OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMTMyCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqVmVyaWZ5aW5nIEVYVDQgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCB0aGUgY29yZSBmaWxlc3lzdGVtIGhlcmUgaXMgZGVmaW5pdGVseSBgRVhUNF9GU2AsIHRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50LCBubyBxdWVzdGlvbi4gTm93LCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIGlmIHRoZXJlJiMzOTtzIGFueSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9uIGJleW9uZCB0aGUgYmFzZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHdvbmRlcmluZyBhYm91dCBEaXJlY3QgQWNjZXNzLCBzbyBgRVhUNF9GU19EQVhgIGNvbWVzIHRvIG1pbmQuIEJ1dCB3YWl0LCB0aGF0IHJpbmdzIGEgYmVsbC4uLiBpc24mIzM5O3QgREFYIGluIGV4dDQgdHlwaWNhbGx5IHRpZWQgdG8gdGhlIGJyb2FkZXIgYEZTX0RBWGAgb3B0aW9uPyBZZXMsIGl0JiMzOTtzIGhpZ2hseSBsaWtlbHkgdGhhdCBgRVhUNF9GU19EQVhgIGlzIGltcGxpY2l0bHkgZW5hYmxlZCBpZiBgRlNfREFYYCBpcyBzZXQuIFRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSBzaG91bGQgcmVhbGx5IGNvbnN1bHQgdGhlIHNvdXJjZS4gVGltZSB0byBkaWcgaW50byBlaXRoZXIgYGZzL2V4dDQvS2NvbmZpZ2Agb3IgcG9zc2libHkgdGhlIGBmcy9leHQ0L01ha2VmaWxlYCB0byBjb25maXJtIHRoZSBkZXBlbmRlbmNpZXMgYW5kIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBHb3R0YSBiZSB0aG9yb3VnaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDk6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX0ZTX0RBWCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3Bvd2VycGMvY29uZmlncy9nNV9kZWZjb25maWc9MjA1PUNPTkZJR19YRlNfUE9TSVhfQUNMPXlcbmFyY2gvcG93ZXJwYy9jb25maWdzL2c1X2RlZmNvbmZpZzoyMDY6Q09ORklHX0ZTX0RBWD15XG5hcmNoL3Bvd2VycGMvY29uZmlncy9nNV9kZWZjb25maWctMjA3LUNPTkZJR19JU085NjYwX0ZTPXlcbi0tXG5hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM1MTJ4X2RlZmNvbmZpZz0xMDU9Q09ORklHX0VYVDRfRlM9eVxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjNTEyeF9kZWZjb25maWc6MTA2OkNPTkZJR19GU19EQVg9eVxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjNTEyeF9kZWZjb25maWctMTA3LSMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldFxuLS1cbmFyY2gvcG93ZXJwYy9jb25maWdzL3BwYzY0X2RlZmNvbmZpZz0zMjI9Q09ORklHX05JTEZTMl9GUz1tXG5hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2NF9kZWZjb25maWc6MzIzOkNPTkZJR19GU19EQVg9eVxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNjRfZGVmY29uZmlnLTMyNC1DT05GSUdfQVVUT0ZTX0ZTPW1cbi0tXG5hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2NGVfZGVmY29uZmlnPTE3OT1DT05GSUdfWEZTX1BPU0lYX0FDTD15XG5hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2NGVfZGVmY29uZmlnOjE4MDpDT05GSUdfRlNfREFYPXlcbmFyY2gvcG93ZXJwYy9jb25maWdzL3BwYzY0ZV9kZWZjb25maWctMTgxLUNPTkZJR19BVVRPRlNfRlM9bVxuLS1cbmFyY2gvcG93ZXJwYy9jb25maWdzL3BwYzZ4eF9kZWZjb25maWc9OTMyPUNPTkZJR19HRlMyX0ZTPW1cbmFyY2gvcG93ZXJwYy9jb25maWdzL3BwYzZ4eF9kZWZjb25maWc6OTMzOkNPTkZJR19GU19EQVg9eVxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNnh4X2RlZmNvbmZpZy05MzQtQ09ORklHX1FVT1RBX05FVExJTktfSU5URVJGQUNFPXlcbi0tXG5kcml2ZXJzL2RheC9zdXBlci5jPTU2PUVYUE9SVF9TWU1CT0xfR1BMKGRheF9yZWFkX3VubG9jayk7XG5kcml2ZXJzL2RheC9zdXBlci5jLTU3LVxuZHJpdmVycy9kYXgvc3VwZXIuYzo1ODojaWYgZGVmaW5lZChDT05GSUdfQkxPQ0spIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19GU19EQVgpXG5kcml2ZXJzL2RheC9zdXBlci5jLTU5LSNpbmNsdWRlIFx1MDAzY2xpbnV4L2Jsa2Rldi5oXHUwMDNlXG4tLVxuZHJpdmVycy9kYXgvc3VwZXIuYz0xMTM9RVhQT1JUX1NZTUJPTF9HUEwoZnNfZGF4X2dldF9ieV9iZGV2KTtcbmRyaXZlcnMvZGF4L3N1cGVyLmMtMTE0LVxuZHJpdmVycy9kYXgvc3VwZXIuYzoxMTU6I2VuZGlmIC8qIENPTkZJR19CTE9DSyBcdTAwMjZcdTAwMjYgQ09ORklHX0ZTX0RBWCAqL1xuZHJpdmVycy9kYXgvc3VwZXIuYy0xMTYtXG5kcml2ZXJzL2RheC9zdXBlci5jOjExNzojaWYgSVNfRU5BQkxFRChDT05GSUdfRlNfREFYKVxuZHJpdmVycy9kYXgvc3VwZXIuYy0xMTgtXG4tLVxuZHJpdmVycy9kYXgvc3VwZXIuYz0xODU9RVhQT1JUX1NZTUJPTF9HUEwoZnNfZGF4X2dldCk7XG5kcml2ZXJzL2RheC9zdXBlci5jOjE4NjojZW5kaWYgLyogQ09ORklHX0ZTX0RBWCAqL1xuZHJpdmVycy9kYXgvc3VwZXIuYy0xODctXG4tLVxuZHJpdmVycy9tZC9kbS1saW5lYXIuYz0xNTM9c3RhdGljIGludCBsaW5lYXJfaXRlcmF0ZV9kZXZpY2VzKHN0cnVjdCBkbV90YXJnZXQgKnRpLFxuLS1cbmRyaXZlcnMvbWQvZG0tbGluZWFyLmMtMTYwLVxuZHJpdmVycy9tZC9kbS1saW5lYXIuYzoxNjE6I2lmIElTX0VOQUJMRUQoQ09ORklHX0ZTX0RBWClcbmRyaXZlcnMvbWQvZG0tbGluZWFyLmMtMTYyLXN0YXRpYyBzdHJ1Y3QgZGF4X2RldmljZSAqbGluZWFyX2RheF9wZ29mZihzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSwgcGdvZmZfdCAqcGdvZmYpXG4tLVxuZHJpdmVycy9tZC9kbS1sb2ctd3JpdGVzLmM9ODcwPXN0YXRpYyB2b2lkIGxvZ193cml0ZXNfaW9faGludHMoc3RydWN0IGRtX3RhcmdldCAqdGksIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbWl0cylcbi0tXG5kcml2ZXJzL21kL2RtLWxvZy13cml0ZXMuYy04ODQtXG5kcml2ZXJzL21kL2RtLWxvZy13cml0ZXMuYzo4ODU6I2lmIElTX0VOQUJMRUQoQ09ORklHX0ZTX0RBWClcbmRyaXZlcnMvbWQvZG0tbG9nLXdyaXRlcy5jLTg4Ni1zdGF0aWMgc3RydWN0IGRheF9kZXZpY2UgKmxvZ193cml0ZXNfZGF4X3Bnb2ZmKHN0cnVjdCBkbV90YXJnZXQgKnRpLFxuLS1cbmRyaXZlcnMvbWQvZG0tc3RyaXBlLmM9MjcyPWludCBzdHJpcGVfbWFwKHN0cnVjdCBkbV90YXJnZXQgKnRpLCBzdHJ1Y3QgYmlvICpiaW8pXG4tLVxuZHJpdmVycy9tZC9kbS1zdHJpcGUuYy0zMDAtXG5kcml2ZXJzL21kL2RtLXN0cmlwZS5jOjMwMTojaWYgSVNfRU5BQkxFRChDT05GSUdfRlNfREFYKVxuZHJpdmVycy9tZC9kbS1zdHJpcGUuYy0zMDItc3RhdGljIHN0cnVjdCBkYXhfZGV2aWNlICpzdHJpcGVfZGF4X3Bnb2ZmKHN0cnVjdCBkbV90YXJnZXQgKnRpLCBwZ29mZl90ICpwZ29mZilcbi0tXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYy0zOS1cbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jOjQwOiNpZiBJU19FTkFCTEVEKENPTkZJR19BUkNIX0hBU19QTUVNX0FQSSkgXHUwMDI2XHUwMDI2IElTX0VOQUJMRUQoQ09ORklHX0ZTX0RBWClcbmRyaXZlcnMvbWQvZG0td3JpdGVjYWNoZS5jLTQxLSNkZWZpbmUgRE1fV1JJVEVDQUNIRV9IQVNfUE1FTVxuLS1cbmZzL01ha2VmaWxlPTMxPW9iai0kKENPTkZJR19BSU8pICAgICAgICAgICAgICAgJiM0Mzs9IGFpby5vXG5mcy9NYWtlZmlsZTozMjpvYmotJChDT05GSUdfRlNfREFYKVx0XHQmIzQzOz0gZGF4Lm9cbmZzL01ha2VmaWxlLTMzLW9iai0kKENPTkZJR19GU19FTkNSWVBUSU9OKVx0JiM0Mzs9IGNyeXB0by9cbi0tXG5mcy9kYXguYz0xMzk1PXN0YXRpYyB2bV9mYXVsdF90IGRheF9sb2FkX2hvbGUoc3RydWN0IHhhX3N0YXRlICp4YXMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuLS1cbmZzL2RheC5jLTE0MDktXG5mcy9kYXguYzoxNDEwOiNpZmRlZiBDT05GSUdfRlNfREFYX1BNRFxuZnMvZGF4LmMtMTQxMS1zdGF0aWMgdm1fZmF1bHRfdCBkYXhfcG1kX2xvYWRfaG9sZShzdHJ1Y3QgeGFfc3RhdGUgKnhhcywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4tLVxuZnMvZGF4LmM9MTQzNT1zdGF0aWMgdm1fZmF1bHRfdCBkYXhfcG1kX2xvYWRfaG9sZShzdHJ1Y3QgeGFfc3RhdGUgKnhhcywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4tLVxuZnMvZGF4LmMtMTQzOS19XG5mcy9kYXguYzoxNDQwOiNlbmRpZiAvKiBDT05GSUdfRlNfREFYX1BNRCAqL1xuZnMvZGF4LmMtMTQ0MS1cbi0tXG5mcy9kYXguYz0xODk5PXN0YXRpYyB2bV9mYXVsdF90IGRheF9pb21hcF9wdGVfZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYsIHVuc2lnbmVkIGxvbmcgKnBmbnAsXG4tLVxuZnMvZGF4LmMtMTk3NC1cbmZzL2RheC5jOjE5NzU6I2lmZGVmIENPTkZJR19GU19EQVhfUE1EXG5mcy9kYXguYy0xOTc2LXN0YXRpYyBib29sIGRheF9mYXVsdF9jaGVja19mYWxsYmFjayhzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgc3RydWN0IHhhX3N0YXRlICp4YXMsXG4tLVxuZnMvZGF4LmM9MjA4OD1zdGF0aWMgdm1fZmF1bHRfdCBkYXhfaW9tYXBfcG1kX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mLCB1bnNpZ25lZCBsb25nICpwZm5wLFxuLS1cbmZzL2RheC5jLTIwOTItfVxuZnMvZGF4LmM6MjA5MzojZW5kaWYgLyogQ09ORklHX0ZTX0RBWF9QTUQgKi9cbmZzL2RheC5jLTIwOTQtXG4tLVxuZnMvZGF4LmM9MjEzMD1zdGF0aWMgdm1fZmF1bHRfdCBkYXhfaW5zZXJ0X3Bmbl9ta3dyaXRlKHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuLS1cbmZzL2RheC5jLTIxNTYtXHRcdHJldCA9IHZtZl9pbnNlcnRfcGFnZV9ta3dyaXRlKHZtZiwgXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSwgdHJ1ZSk7XG5mcy9kYXguYzoyMTU3OiNpZmRlZiBDT05GSUdfRlNfREFYX1BNRFxuZnMvZGF4LmMtMjE1OC1cdGVsc2UgaWYgKG9yZGVyID09IFBNRF9PUkRFUilcbi0tXG5mcy9lcm9mcy9kYXRhLmM9NDM2PXN0YXRpYyBzc2l6ZV90IGVyb2ZzX2ZpbGVfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcbi0tXG5mcy9lcm9mcy9kYXRhLmMtNDQzLVxuZnMvZXJvZnMvZGF0YS5jOjQ0NDpcdGlmIChJU19FTkFCTEVEKENPTkZJR19GU19EQVgpIFx1MDAyNlx1MDAyNiBJU19EQVgoaW5vZGUpKVxuZnMvZXJvZnMvZGF0YS5jLTQ0NS1cdFx0cmV0dXJuIGRheF9pb21hcF9ydyhpb2NiLCB0bywgXHUwMDI2ZXJvZnNfaW9tYXBfb3BzKTtcbi0tXG5mcy9lcm9mcy9kYXRhLmM9NDU5PWNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgZXJvZnNfYW9wcyA9IHtcbi0tXG5mcy9lcm9mcy9kYXRhLmMtNDY3LVxuZnMvZXJvZnMvZGF0YS5jOjQ2ODojaWZkZWYgQ09ORklHX0ZTX0RBWFxuZnMvZXJvZnMvZGF0YS5jLTQ2OS1zdGF0aWMgdm1fZmF1bHRfdCBlcm9mc19kYXhfaHVnZV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbi0tXG5mcy9lcm9mcy9zdXBlci5jPTQyOT1zdGF0aWMgYm9vbCBlcm9mc19mY19zZXRfZGF4X21vZGUoc3RydWN0IGZzX2NvbnRleHQgKmZjLCB1bnNpZ25lZCBpbnQgbW9kZSlcbmZzL2Vyb2ZzL3N1cGVyLmMtNDMwLXtcbmZzL2Vyb2ZzL3N1cGVyLmM6NDMxOlx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0ZTX0RBWCkpIHtcbmZzL2Vyb2ZzL3N1cGVyLmMtNDMyLVx0XHRzdHJ1Y3QgZXJvZnNfc2JfaW5mbyAqc2JpID0gZmMtXHUwMDNlc19mc19pbmZvO1xuLS1cbmZzL2V4dDQvZXh0NC5oPTEwMzA9c3RydWN0IGV4dDRfaW5vZGVfaW5mbyB7XG4tLVxuZnMvZXh0NC9leHQ0LmgtMTIyNC0jZGVmaW5lIEVYVDRfTU9VTlRfTk9MT0FEXHRcdDB4MDAxMDBcdC8qIERvbiYjMzk7dCB1c2UgZXhpc3Rpbmcgam91cm5hbCovXG5mcy9leHQ0L2V4dDQuaDoxMjI1OiNpZmRlZiBDT05GSUdfRlNfREFYXG5mcy9leHQ0L2V4dDQuaC0xMjI2LSNkZWZpbmUgRVhUNF9NT1VOVF9EQVhfQUxXQVlTXHRcdDB4MDAyMDBcdC8qIERpcmVjdCBBY2Nlc3MgKi9cbi0tXG5mcy9leHQ0L2ZpbGUuYz02OT1zdGF0aWMgc3NpemVfdCBleHQ0X2Rpb19yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKnRvKVxuLS1cbmZzL2V4dDQvZmlsZS5jLTEwMC1cbmZzL2V4dDQvZmlsZS5jOjEwMTojaWZkZWYgQ09ORklHX0ZTX0RBWFxuZnMvZXh0NC9maWxlLmMtMTAyLXN0YXRpYyBzc2l6ZV90IGV4dDRfZGF4X3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXG4tLVxuZnMvZXh0NC9maWxlLmM9MTMwPXN0YXRpYyBzc2l6ZV90IGV4dDRfZmlsZV9yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKnRvKVxuLS1cbmZzL2V4dDQvZmlsZS5jLTEzOS1cbmZzL2V4dDQvZmlsZS5jOjE0MDojaWZkZWYgQ09ORklHX0ZTX0RBWFxuZnMvZXh0NC9maWxlLmMtMTQxLVx0aWYgKElTX0RBWChpbm9kZSkpXG4tLVxuZnMvZXh0NC9maWxlLmM9NTc4PXN0YXRpYyBzc2l6ZV90IGV4dDRfZGlvX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG4tLVxuZnMvZXh0NC9maWxlLmMtNzA3LVxuZnMvZXh0NC9maWxlLmM6NzA4OiNpZmRlZiBDT05GSUdfRlNfREFYXG5mcy9leHQ0L2ZpbGUuYy03MDktc3RhdGljIHNzaXplX3Rcbi0tXG5mcy9leHQ0L2ZpbGUuYz03NzA9ZXh0NF9maWxlX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG4tLVxuZnMvZXh0NC9maWxlLmMtNzc4LVxuZnMvZXh0NC9maWxlLmM6Nzc5OiNpZmRlZiBDT05GSUdfRlNfREFYXG5mcy9leHQ0L2ZpbGUuYy03ODAtXHRpZiAoSVNfREFYKGlub2RlKSlcbi0tXG5mcy9leHQ0L2ZpbGUuYy04MDEtXG5mcy9leHQ0L2ZpbGUuYzo4MDI6I2lmZGVmIENPTkZJR19GU19EQVhcbmZzL2V4dDQvZmlsZS5jLTgwMy1zdGF0aWMgdm1fZmF1bHRfdCBleHQ0X2RheF9odWdlX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4tLVxuZnMvZXh0NC9zdXBlci5jPTIxNjg9c3RhdGljIGludCBleHQ0X3BhcnNlX3BhcmFtKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IGZzX3BhcmFtZXRlciAqcGFyYW0pXG4tLVxuZnMvZXh0NC9zdXBlci5jLTIzNjktXHRjYXNlIE9wdF9kYXhfdHlwZTpcbmZzL2V4dDQvc3VwZXIuYzoyMzcwOiNpZmRlZiBDT05GSUdfRlNfREFYXG5mcy9leHQ0L3N1cGVyLmMtMjM3MS1cdHtcbi0tXG5mcy94ZnMvTWFrZWZpbGU9MTU0PWlmZXEgKCQoQ09ORklHX01FTU9SWV9GQUlMVVJFKSx5KVxuZnMveGZzL01ha2VmaWxlOjE1NTp4ZnMtJChDT05GSUdfRlNfREFYKVx0XHQmIzQzOz0geGZzX25vdGlmeV9mYWlsdXJlLm9cbmZzL3hmcy9NYWtlZmlsZS0xNTYtZW5kaWZcbi0tXG5mcy94ZnMveGZzX2J1Zi5jPTE3Mjk9eGZzX2FsbG9jX2J1ZnRhcmcoXG4tLVxuZnMveGZzL3hmc19idWYuYy0xNzM3LVxuZnMveGZzL3hmc19idWYuYzoxNzM4OiNpZiBkZWZpbmVkKENPTkZJR19GU19EQVgpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19NRU1PUllfRkFJTFVSRSlcbmZzL3hmcy94ZnNfYnVmLmMtMTczOS1cdG9wcyA9IFx1MDAyNnhmc19kYXhfaG9sZGVyX29wZXJhdGlvbnM7XG4tLVxuZnMveGZzL3hmc19maWxlLmM9MTg3Mj14ZnNfZGF4X2ZhdWx0X2xvY2tlZChcbi0tXG5mcy94ZnMveGZzX2ZpbGUuYy0xODc5LVxuZnMveGZzL3hmc19maWxlLmM6MTg4MDpcdGlmICghSVNfRU5BQkxFRChDT05GSUdfRlNfREFYKSkge1xuZnMveGZzL3hmc19maWxlLmMtMTg4MS1cdFx0QVNTRVJUKDApO1xuLS1cbmZzL3hmcy94ZnNfaW9wcy5jPTEzNjQ9eGZzX2lub2RlX3Nob3VsZF9lbmFibGVfZGF4KFxuLS1cbmZzL3hmcy94ZnNfaW9wcy5jLTEzNjYte1xuZnMveGZzL3hmc19pb3BzLmM6MTM2NzpcdGlmICghSVNfRU5BQkxFRChDT05GSUdfRlNfREFYKSlcbmZzL3hmcy94ZnNfaW9wcy5jLTEzNjgtXHRcdHJldHVybiBmYWxzZTtcbi0tXG5mcy94ZnMveGZzX3N1cGVyLmM9MTQwND14ZnNfZnNfcGFyc2VfcGFyYW0oXG4tLVxuZnMveGZzL3hmc19zdXBlci5jLTE1MzQtXHRcdHJldHVybiAwO1xuZnMveGZzL3hmc19zdXBlci5jOjE1MzU6I2lmZGVmIENPTkZJR19GU19EQVhcbmZzL3hmcy94ZnNfc3VwZXIuYy0xNTM2LVx0Y2FzZSBPcHRfZGF4OlxuLS1cbmluY2x1ZGUvbGludXgvZGF4Lmg9MTI4PXN0cnVjdCB3cml0ZWJhY2tfY29udHJvbDtcbmluY2x1ZGUvbGludXgvZGF4Lmg6MTI5OiNpZiBkZWZpbmVkKENPTkZJR19CTE9DSykgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0ZTX0RBWClcbmluY2x1ZGUvbGludXgvZGF4LmgtMTMwLWludCBkYXhfYWRkX2hvc3Qoc3RydWN0IGRheF9kZXZpY2UgKmRheF9kZXYsIHN0cnVjdCBnZW5kaXNrICpkaXNrKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2RheC5oPTE0Mj1zdGF0aWMgaW5saW5lIHN0cnVjdCBkYXhfZGV2aWNlICpmc19kYXhfZ2V0X2J5X2JkZXYoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldixcbi0tXG5pbmNsdWRlL2xpbnV4L2RheC5oLTE0Ny19XG5pbmNsdWRlL2xpbnV4L2RheC5oOjE0ODojZW5kaWYgLyogQ09ORklHX0JMT0NLIFx1MDAyNlx1MDAyNiBDT05GSUdfRlNfREFYICovXG5pbmNsdWRlL2xpbnV4L2RheC5oLTE0OS1cbmluY2x1ZGUvbGludXgvZGF4Lmg6MTUwOiNpZiBJU19FTkFCTEVEKENPTkZJR19GU19EQVgpXG5pbmNsdWRlL2xpbnV4L2RheC5oLTE1MS12b2lkIGZzX3B1dF9kYXgoc3RydWN0IGRheF9kZXZpY2UgKmRheF9kZXYsIHZvaWQgKmhvbGRlcik7XG4tLVxuaW5jbHVkZS9saW51eC9kYXguaD0yMzY9c3RhdGljIGlubGluZSB2b2lkIGRheF9yZWFkX3VubG9jayhpbnQgaWQpXG4tLVxuaW5jbHVkZS9saW51eC9kYXguaC0yNDAtXG5pbmNsdWRlL2xpbnV4L2RheC5oOjI0MTojaWYgIUlTX0VOQUJMRUQoQ09ORklHX0ZTX0RBWClcbmluY2x1ZGUvbGludXgvZGF4LmgtMjQyLXN0YXRpYyBpbmxpbmUgaW50IF9fbXVzdF9jaGVjayBkYXhfYnJlYWtfbGF5b3V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuaW5jbHVkZS9saW51eC9mcy5oPTIwOTY9ZXh0ZXJuIGxvZmZfdCB2ZnNfZGVkdXBlX2ZpbGVfcmFuZ2Vfb25lKHN0cnVjdCBmaWxlICpzcmNfZmlsZSwgbG9mZl90IHNyY19wb3MsXG4tLVxuaW5jbHVkZS9saW51eC9mcy5oLTIxMTUtI2RlZmluZSBTX05PU0VDXHRcdCgxIFx1MDAzY1x1MDAzYyAxMikgLyogbm8gc3VpZCBvciB4YXR0ciBzZWN1cml0eSBhdHRyaWJ1dGVzICovXG5pbmNsdWRlL2xpbnV4L2ZzLmg6MjExNjojaWZkZWYgQ09ORklHX0ZTX0RBWFxuaW5jbHVkZS9saW51eC9mcy5oLTIxMTctI2RlZmluZSBTX0RBWFx0XHQoMSBcdTAwM2NcdTAwM2MgMTMpIC8qIERpcmVjdCBBY2Nlc3MsIGF2b2lkaW5nIHRoZSBwYWdlIGNhY2hlICovXG4tLVxuaW5jbHVkZS9saW51eC9mcy5oPTMzOTk9c3RhdGljIGlubGluZSBib29sIHZtYV9pc19mc2RheChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMzQwMi1cbmluY2x1ZGUvbGludXgvZnMuaDozNDAzOlx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19GU19EQVgpIHx8ICF2bWEtXHUwMDNldm1fZmlsZSlcbmluY2x1ZGUvbGludXgvZnMuaC0zNDA0LVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxuaW5jbHVkZS9saW51eC9pb21hcC5oPTE2Mj1zdHJ1Y3QgaW9tYXBfd3JpdGVfb3BzIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2lvbWFwLmgtMjA2LSNkZWZpbmUgSU9NQVBfVU5TSEFSRVx0XHQoMSBcdTAwM2NcdTAwM2MgNykgLyogdW5zaGFyZV9maWxlX3JhbmdlICovXG5pbmNsdWRlL2xpbnV4L2lvbWFwLmg6MjA3OiNpZmRlZiBDT05GSUdfRlNfREFYXG5pbmNsdWRlL2xpbnV4L2lvbWFwLmgtMjA4LSNkZWZpbmUgSU9NQVBfREFYXHRcdCgxIFx1MDAzY1x1MDAzYyA4KSAvKiBEQVggbWFwcGluZyAqL1xuLS1cbmluY2x1ZGUvbGludXgvaW9tYXAuaC0yMTAtI2RlZmluZSBJT01BUF9EQVhcdFx0MFxuaW5jbHVkZS9saW51eC9pb21hcC5oOjIxMTojZW5kaWYgLyogQ09ORklHX0ZTX0RBWCAqL1xuaW5jbHVkZS9saW51eC9pb21hcC5oLTIxMi0jZGVmaW5lIElPTUFQX0FUT01JQ1x0XHQoMSBcdTAwM2NcdTAwM2MgOSkgLyogdG9ybi13cml0ZSBwcm90ZWN0aW9uICovXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz01ODM9c3RhdGljIHZvaWQgY29sbGVjdF9wcm9jc19maWxlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy02MTktXG5tbS9tZW1vcnktZmFpbHVyZS5jOjYyMDojaWZkZWYgQ09ORklHX0ZTX0RBWFxubW0vbWVtb3J5LWZhaWx1cmUuYy02MjEtc3RhdGljIHZvaWQgYWRkX3RvX2tpbGxfZnNkYXgoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIGNvbnN0IHN0cnVjdCBwYWdlICpwLFxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmM9NjMyPXN0YXRpYyB2b2lkIGNvbGxlY3RfcHJvY3NfZnNkYXgoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UsXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy02NjAtfVxubW0vbWVtb3J5LWZhaWx1cmUuYzo2NjE6I2VuZGlmIC8qIENPTkZJR19GU19EQVggKi9cbm1tL21lbW9yeS1mYWlsdXJlLmMtNjYyLVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmM9MTcxOD1zdGF0aWMgaW50IG1mX2dlbmVyaWNfa2lsbF9wcm9jcyh1bnNpZ25lZCBsb25nIGxvbmcgcGZuLCBpbnQgZmxhZ3MsXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0xNzc1LVxubW0vbWVtb3J5LWZhaWx1cmUuYzoxNzc2OiNpZmRlZiBDT05GSUdfRlNfREFYXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE3NzctLyoqXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0xODE4PUVYUE9SVF9TWU1CT0xfR1BMKG1mX2RheF9raWxsX3Byb2NzKTtcbm1tL21lbW9yeS1mYWlsdXJlLmM6MTgxOTojZW5kaWYgLyogQ09ORklHX0ZTX0RBWCAqL1xubW0vbWVtb3J5LWZhaWx1cmUuYy0xODIwLVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Zzb2NrL2NvbmZpZz0xMDc9Q09ORklHX0RBWF9EUklWRVI9eVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdnNvY2svY29uZmlnOjEwODpDT05GSUdfRlNfREFYPXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Zzb2NrL2NvbmZpZy0xMDktQ09ORklHX01FTU9SWV9IT1RQTFVHPXlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDk6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgxNTMKCQkJCQkJCW91dHB1dDogMjE4CgkJCQkJCQl0aG91Z2h0czogMTYxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBTZWxlY3Rpb246IGV4dDQgRGlyZWN0IEkvTyBhbmQgREFYIFdyaXRlIFBhdGhzKioKCkFscmlnaHQsIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGZ1enppbmcgdGFyZ2V0cyBmb3IgdGhpcyBleHQ0IHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgYENPTkZJR19GU19EQVhgIGlzIHJlbGV2YW50LCBhbmQgeWVzLCBpdCBzZWVtcyBzby4gRGl2aW5nIGRlZXBlciwgSSBzZWUgYSBzbGV3IG9mIHN0YXRpYyBmdW5jdGlvbnMgYmVpbmcgbW9kaWZpZWQgb3IgY2VudHJhbCB0byB0aGUgRGlyZWN0IEkvTyBhbmQgREFYIHdyaXRlIHBhdGhzLiBUaGVzZSBhcmUgd2hlcmUgdGhlIGludGVyZXN0aW5nIGNoYW5nZXMgYXJlLgoKRmlyc3QsIEkgY29uZmlybSBgZXh0NF9kaW9fbmVlZHNfemVyb2luZ2AgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCBnaXZlbiB0aGUgcGF0Y2gmIzM5O3MgZm9jdXMgb24gcGFydGlhbCBibG9jayB6ZXJvaW5nLiBOZXh0LCBgZXh0NF9kaW9fd3JpdGVfY2hlY2tzYCBzZWVtcyBjcnVjaWFsLCBhbmQgd2hpbGUgSSBpbml0aWFsbHkgdGhvdWdodCBpdHMgc2lnbmF0dXJlIG1pZ2h0IGNoYW5nZSwgdGhlIGRpZmYgY29uZmlybXMgaXQgcmVtYWlucyB0aGUgc2FtZSwgYnV0IHRoZSBpbnRlcm5hbCBsb2dpYyBpcyBtb2RpZmllZC4gIGBleHQ0X2J1ZmZlcmVkX3dyaXRlX2l0ZXJgIGlzIGxpa2VseSBhbHNvIHRvdWNoZWQgYnkgdGhpcy4gQW5kIHRoZSBzYW1lIHRoaW5nIGZvciBgZXh0NF9kYXhfd3JpdGVfaXRlcmAuIEkgYWxzbyBuZWVkIHRvIG1ha2Ugc3VyZSBgZXh0NF9pb21hcF9iZWdpbmAgYW5kIGBleHQ0X2lvbWFwX2FsbG9jYCBhcmUgaW5jbHVkZWQuIGBleHQ0X21hcF9ibG9ja3NgIGlzIGludm9sdmVkLCBidXQgaXQmIzM5O3MgdXNlZCAqc28qIGJyb2FkbHkgaW4gZXh0NCB0aGF0IEkmIzM5O20gZ29pbmcgdG8gb21pdCBpdCB0byBhdm9pZCBza2V3aW5nIHRoZSBmdXp6aW5nIGRpc3RyaWJ1dGlvbi4KClRoZXJlZm9yZSwgdGhlIGZ1bmN0aW9ucyBJJiMzOTttIGdvaW5nIHRvIGluY2x1ZGUgYXJlOgoKKiAgIGBleHQ0X2Rpb19uZWVkc196ZXJvaW5nYAoqICAgYGV4dDRfZGlvX3dyaXRlX2NoZWNrc2AKKiAgIGBleHQ0X2J1ZmZlcmVkX3dyaXRlX2l0ZXJgCiogICBgZXh0NF9kYXhfd3JpdGVfaXRlcmAKKiAgIGBleHQ0X2lvbWFwX2JlZ2luYAoqICAgYGV4dDRfaW9tYXBfYWxsb2NgCgpUaGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgd2lsbCBiZTogYEVYVDRfRlNgIGFuZCBgRlNfREFYYC4KClRoZSBjb3JlIHJhdGlvbmFsZSBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBEaXJlY3QgSS9PIGFuZCBEQVggd3JpdGUgcGF0aHMgaW4gZXh0NC4gSXQgaW5jbHVkZXMgcGFydGlhbCBibG9jayB6ZXJvaW5nIGFuZCBsb2NraW5nIGNoYW5nZXMgZm9yIHVuYWxpZ25lZCBESU8gd3JpdGVzLiBUaGVzZSBjaG9zZW4gZnVuY3Rpb25zIHJlcHJlc2VudCB0aGUgY29yZSBsb2dpYyBjaGFuZ2VzIGFuZCBhcmUgbGlrZWx5IGNhbmRpZGF0ZXMgZm9yIGludHJvZHVjaW5nIGJ1Z3MgaW4gdGhlIG5ld2x5IG1vZGlmaWVkIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA5OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFWFQ0X0ZTJiMzNDssCiAgICAmIzM0O0ZTX0RBWCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V4dDRfZGlvX25lZWRzX3plcm9pbmcmIzM0OywKICAgICYjMzQ7ZXh0NF9kaW9fd3JpdGVfY2hlY2tzJiMzNDssCiAgICAmIzM0O2V4dDRfYnVmZmVyZWRfd3JpdGVfaXRlciYjMzQ7LAogICAgJiMzNDtleHQ0X2RheF93cml0ZV9pdGVyJiMzNDssCiAgICAmIzM0O2V4dDRfaW9tYXBfYmVnaW4mIzM0OywKICAgICYjMzQ7ZXh0NF9pb21hcF9hbGxvYyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBleHQ0IERpcmVjdCBJL08gYW5kIERBWCB3cml0ZSBwYXRocywgc3BlY2lmaWNhbGx5IGZpeGluZyBsb2NraW5nIGFuZCBwYXJ0aWFsIGJsb2NrIHplcm9pbmcgZm9yIHVuYWxpZ25lZCBESU8gd3JpdGVzLiBJdCBpbnRyb2R1Y2VzIGBleHQ0X2Rpb19uZWVkc196ZXJvaW5nYCBhbmQgbW9kaWZpZXMgYGV4dDRfZGlvX3dyaXRlX2NoZWNrc2AsIGBleHQ0X2J1ZmZlcmVkX3dyaXRlX2l0ZXJgLCBgZXh0NF9kYXhfd3JpdGVfaXRlcmAsIGFuZCBgZXh0NF9pb21hcF9iZWdpbmAuIFRoZXNlIGFyZSBjb3JlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBleHQ0JiMzOTtzIEkvTyBoYW5kbGluZyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OywKICAgICYjMzQ7RlNfREFYJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXh0NF9kaW9fbmVlZHNfemVyb2luZyYjMzQ7LAogICAgJiMzNDtleHQ0X2Rpb193cml0ZV9jaGVja3MmIzM0OywKICAgICYjMzQ7ZXh0NF9idWZmZXJlZF93cml0ZV9pdGVyJiMzNDssCiAgICAmIzM0O2V4dDRfZGF4X3dyaXRlX2l0ZXImIzM0OywKICAgICYjMzQ7ZXh0NF9pb21hcF9iZWdpbiYjMzQ7LAogICAgJiMzNDtleHQ0X2lvbWFwX2FsbG9jJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGV4dDQgRGlyZWN0IEkvTyBhbmQgREFYIHdyaXRlIHBhdGhzLCBzcGVjaWZpY2FsbHkgZml4aW5nIGxvY2tpbmcgYW5kIHBhcnRpYWwgYmxvY2sgemVyb2luZyBmb3IgdW5hbGlnbmVkIERJTyB3cml0ZXMuIEl0IGludHJvZHVjZXMgYGV4dDRfZGlvX25lZWRzX3plcm9pbmdgIGFuZCBtb2RpZmllcyBgZXh0NF9kaW9fd3JpdGVfY2hlY2tzYCwgYGV4dDRfYnVmZmVyZWRfd3JpdGVfaXRlcmAsIGBleHQ0X2RheF93cml0ZV9pdGVyYCwgYW5kIGBleHQ0X2lvbWFwX2JlZ2luYC4gVGhlc2UgYXJlIGNvcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGV4dDQmIzM5O3MgSS9PIGhhbmRsaW5nIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA5OjA4OjE0Ljc3NzIzMjYyN1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkyMjc3NDI0MjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIixcbiAgICBcIkZTX0RBWFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV4dDRfZGlvX25lZWRzX3plcm9pbmdcIixcbiAgICBcImV4dDRfZGlvX3dyaXRlX2NoZWNrc1wiLFxuICAgIFwiZXh0NF9idWZmZXJlZF93cml0ZV9pdGVyXCIsXG4gICAgXCJleHQ0X2RheF93cml0ZV9pdGVyXCIsXG4gICAgXCJleHQ0X2lvbWFwX2JlZ2luXCIsXG4gICAgXCJleHQ0X2lvbWFwX2FsbG9jXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZXh0NCBEaXJlY3QgSS9PIGFuZCBEQVggd3JpdGUgcGF0aHMsIHNwZWNpZmljYWxseSBmaXhpbmcgbG9ja2luZyBhbmQgcGFydGlhbCBibG9jayB6ZXJvaW5nIGZvciB1bmFsaWduZWQgRElPIHdyaXRlcy4gSXQgaW50cm9kdWNlcyBgZXh0NF9kaW9fbmVlZHNfemVyb2luZ2AgYW5kIG1vZGlmaWVzIGBleHQ0X2Rpb193cml0ZV9jaGVja3NgLCBgZXh0NF9idWZmZXJlZF93cml0ZV9pdGVyYCwgYGV4dDRfZGF4X3dyaXRlX2l0ZXJgLCBhbmQgYGV4dDRfaW9tYXBfYmVnaW5gLiBUaGVzZSBhcmUgY29yZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gZXh0NCdzIEkvTyBoYW5kbGluZyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA5OjA4OjE0Ljc3NzIzNzczN1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njc3MjYzNDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYzExODllNzc2ZDkxNjM5NjI4MDg3NWYxN2I0YTkzOWM0NDlkNmQwN1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEp1biAyNiAwOTowODoxMyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9leHQ0L2ZpbGUuYyBiL2ZzL2V4dDQvZmlsZS5jXFxuaW5kZXggZWIxYTMyMzk2MmIxMDEuLjYxMGUxMDlmY2QzNjI1IDEwMDY0NFxcbi0tLSBhL2ZzL2V4dDQvZmlsZS5jXFxuKysrIGIvZnMvZXh0NC9maWxlLmNcXG5AQCAtMjEzLDMxICsyMTMsNjUgQEAgZXh0NF9leHRlbmRpbmdfaW8oc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCwgc2l6ZV90IGxlbilcXG4gXFx0cmV0dXJuIGZhbHNlO1xcbiB9XFxuIFxcbi0vKiBJcyBJTyBvdmVyd3JpdGluZyBhbGxvY2F0ZWQgb3IgaW5pdGlhbGl6ZWQgYmxvY2tzPyAqL1xcbi1zdGF0aWMgYm9vbCBleHQ0X292ZXJ3cml0ZV9pbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi1cXHRcXHRcXHQgICAgICBsb2ZmX3QgcG9zLCBsb2ZmX3QgbGVuLCBib29sICp1bndyaXR0ZW4pXFxuKy8qXFxuKyAqIERvZXMgYW4gdW5hbGlnbmVkIERJTyB3cml0ZSByZXF1aXJlIHBhcnRpYWwgYmxvY2sgemVyb2luZz9cXG4rICpcXG4rICogUGFydGlhbCBibG9jayB6ZXJvaW5nIGlzIHBlcmZvcm1lZCBvbmx5IGZvciB0aGUgaGVhZCBhbmQgdGFpbCBibG9ja3NcXG4rICogd2hlbiB0aGV5IGFyZSBwYXJ0aWFsbHkgY292ZXJlZCBieSB0aGUgd3JpdGUgYW5kIHRoZSB1bmRlcmx5aW5nIGV4dGVudFxcbisgKiBpcyBhIGhvbGUgb3IgdW53cml0dGVuLiBNaWRkbGUgYmxvY2tzIChmdWxseSBjb3ZlcmVkIGJ5IHRoZSB3cml0ZSlcXG4rICogYXJlIHdyaXR0ZW4gYXMgd2hvbGUgYmxvY2tzIHdpdGhvdXQgemVyb2luZy5cXG4rICpcXG4rICogV2hlbiB6ZXJvaW5nIGlzIHJlcXVpcmVkLCB0d28gY29uY3VycmVudCB1bmFsaWduZWQgRElPIHdyaXRlcyB0byB0aGVcXG4rICogc2FtZSBwYXJ0aWFsIGJsb2NrIGNhbiByYWNlIGFuZCBjb3JydXB0IGVhY2ggb3RoZXIncyBkYXRhLCBzbyB0aGVcXG4rICogY2FsbGVyIG11c3QgdGFrZSB0aGUgZXhjbHVzaXZlIGlfcndzZW0gYW5kIGRyYWluIGluLWZsaWdodCBESU8uIFdoZW5cXG4rICogemVyb2luZyBpcyBub3QgcmVxdWlyZWQsIHNoYXJlZCBsb2NrIGlzIHNhZmUgLS0gYmxvY2sgYWxsb2NhdGlvbiBhbmRcXG4rICogdW53cml0dGVuIGNvbnZlcnNpb24gZm9yIG1pZGRsZSBibG9ja3MgYXJlIHByb3RlY3RlZCBieSBpX2RhdGFfc2VtXFxuKyAqIGFuZCBpbm9kZV9kaW9fYmVnaW4oKS5cXG4rICovXFxuK3N0YXRpYyBib29sIGV4dDRfZGlvX25lZWRzX3plcm9pbmcoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHBvcywgbG9mZl90IGxlbixcXG4rXFx0XFx0XFx0XFx0ICAgYm9vbCBub3dhaXQpXFxuIHtcXG4gXFx0c3RydWN0IGV4dDRfbWFwX2Jsb2NrcyBtYXA7XFxuIFxcdHVuc2lnbmVkIGludCBibGtiaXRzID0gaW5vZGUtXFx1MDAzZWlfYmxrYml0cztcXG4tXFx0aW50IGVyciwgYmxrbGVuO1xcbitcXHR1bnNpZ25lZCBsb25nIGJsb2NrbWFzayA9IGlub2RlLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2Jsb2Nrc2l6ZSAtIDE7XFxuK1xcdGJvb2wgaGVhZF9wYXJ0aWFsLCB0YWlsX3BhcnRpYWw7XFxuK1xcdGV4dDRfbGJsa190IGhlYWRfbGJsaywgdGFpbF9sYmxrO1xcbitcXHRpbnQgZXJyO1xcbitcXHRpbnQgbWFwX2ZsYWdzID0gMDtcXG4gXFxuIFxcdGlmIChwb3MgKyBsZW4gXFx1MDAzZSBpX3NpemVfcmVhZChpbm9kZSkpXFxuLVxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcbi1cXHRtYXAubV9sYmxrID0gcG9zIFxcdTAwM2VcXHUwMDNlIGJsa2JpdHM7XFxuLVxcdG1hcC5tX2xlbiA9IEVYVDRfTUFYX0JMT0NLUyhsZW4sIHBvcywgYmxrYml0cyk7XFxuLVxcdGJsa2xlbiA9IG1hcC5tX2xlbjtcXG4rXFx0aWYgKG5vd2FpdClcXG4rXFx0XFx0bWFwX2ZsYWdzID0gRVhUNF9HRVRfQkxPQ0tTX0NBQ0hFRF9OT1dBSVQ7XFxuK1xcbitcXHRoZWFkX3BhcnRpYWwgPSAocG9zIFxcdTAwMjYgYmxvY2ttYXNrKSAhPSAwO1xcbitcXHR0YWlsX3BhcnRpYWwgPSAoKHBvcyArIGxlbikgXFx1MDAyNiBibG9ja21hc2spICE9IDA7XFxuK1xcdGhlYWRfbGJsayA9IHBvcyBcXHUwMDNlXFx1MDAzZSBibGtiaXRzO1xcbitcXHR0YWlsX2xibGsgPSAocG9zICsgbGVuIC0gMSkgXFx1MDAzZVxcdTAwM2UgYmxrYml0cztcXG4rXFxuK1xcdC8qIENoZWNrIHRoZSBoZWFkIHBhcnRpYWwgYmxvY2suICovXFxuK1xcdGlmIChoZWFkX3BhcnRpYWwpIHtcXG4rXFx0XFx0bWFwLm1fbGJsayA9IGhlYWRfbGJsaztcXG4rXFx0XFx0bWFwLm1fbGVuID0gdGFpbF9sYmxrIC0gaGVhZF9sYmxrICsgMTtcXG4rXFx0XFx0ZXJyID0gZXh0NF9tYXBfYmxvY2tzKE5VTEwsIGlub2RlLCBcXHUwMDI2bWFwLCBtYXBfZmxhZ3MpO1xcbitcXHRcXHRpZiAoZXJyIFxcdTAwM2M9IDAgfHwgIShtYXAubV9mbGFncyBcXHUwMDI2IEVYVDRfTUFQX01BUFBFRCkpXFxuK1xcdFxcdFxcdHJldHVybiB0cnVlO1xcbitcXHRcXHQvKiBJZiB0aGlzIG1hcHBpbmcgYWxyZWFkeSBjb3ZlcnMgdGhlIHRhaWwgYmxvY2ssIHdlJ3JlIGRvbmUuICovXFxuK1xcdFxcdGlmICghdGFpbF9wYXJ0aWFsIHx8IG1hcC5tX2xibGsgKyBlcnIgXFx1MDAzZSB0YWlsX2xibGspXFxuK1xcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0fVxcbiBcXG4tXFx0ZXJyID0gZXh0NF9tYXBfYmxvY2tzKE5VTEwsIGlub2RlLCBcXHUwMDI2bWFwLCAwKTtcXG4tXFx0aWYgKGVyciAhPSBibGtsZW4pXFxuLVxcdFxcdHJldHVybiBmYWxzZTtcXG4tXFx0LypcXG4tXFx0ICogJ2Vycj09bGVuJyBtZWFucyB0aGF0IGFsbCBvZiB0aGUgYmxvY2tzIGhhdmUgYmVlbiBwcmVhbGxvY2F0ZWQsXFxuLVxcdCAqIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGV5IGhhdmUgYmVlbiBpbml0aWFsaXplZCBvciBub3QuIFdlIG5lZWQgdG9cXG4tXFx0ICogY2hlY2sgbV9mbGFncyB0byBkaXN0aW5ndWlzaCB0aGUgdW53cml0dGVuIGV4dGVudHMuXFxuLVxcdCAqL1xcbi1cXHQqdW53cml0dGVuID0gIShtYXAubV9mbGFncyBcXHUwMDI2IEVYVDRfTUFQX01BUFBFRCk7XFxuLVxcdHJldHVybiB0cnVlO1xcbitcXHQvKiBDaGVjayB0aGUgdGFpbCBwYXJ0aWFsIGJsb2NrLiAqL1xcbitcXHRpZiAodGFpbF9wYXJ0aWFsKSB7XFxuK1xcdFxcdG1hcC5tX2xibGsgPSB0YWlsX2xibGs7XFxuK1xcdFxcdG1hcC5tX2xlbiA9IDE7XFxuK1xcdFxcdGVyciA9IGV4dDRfbWFwX2Jsb2NrcyhOVUxMLCBpbm9kZSwgXFx1MDAyNm1hcCwgbWFwX2ZsYWdzKTtcXG4rXFx0XFx0aWYgKGVyciBcXHUwMDNjPSAwIHx8ICEobWFwLm1fZmxhZ3MgXFx1MDAyNiBFWFQ0X01BUF9NQVBQRUQpKVxcbitcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbiB9XFxuIFxcbiBzdGF0aWMgc3NpemVfdCBleHQ0X2dlbmVyaWNfd3JpdGVfY2hlY2tzKHN0cnVjdCBraW9jYiAqaW9jYixcXG5AQCAtMjc4LDcgKzMxMiw3IEBAIHN0YXRpYyBzc2l6ZV90IGV4dDRfd3JpdGVfY2hlY2tzKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxcbiBcXHRpZiAoY291bnQgXFx1MDAzYz0gMClcXG4gXFx0XFx0cmV0dXJuIGNvdW50O1xcbiBcXG4tXFx0cmV0ID0gZmlsZV9tb2RpZmllZChpb2NiLVxcdTAwM2VraV9maWxwKTtcXG4rXFx0cmV0ID0ga2lvY2JfbW9kaWZpZWQoaW9jYik7XFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbkBAIC0zMDksNiArMzQzLDEzIEBAIHN0YXRpYyBzc2l6ZV90IGV4dDRfYnVmZmVyZWRfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsXFxuIFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gXFxuIFxcdGlub2RlX2xvY2soaW5vZGUpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogUHJldmVudCBjb25jdXJyZW50IGRpcmVjdCBJL08gYW5kIGJ1ZmZlcmVkIEkvTyB0byB0aGUgc2FtZSBmaWxlXFxuK1xcdCAqIHJhbmdlLiBXYWl0IGZvciBpbi1mbGlnaHQgRElPIHRvIGZpbmlzaCBiZWZvcmUgZGlydHlpbmcgcGFnZXMuXFxuK1xcdCAqL1xcbitcXHRpbm9kZV9kaW9fd2FpdChpbm9kZSk7XFxuK1xcbiBcXHRyZXQgPSBleHQ0X3dyaXRlX2NoZWNrcyhpb2NiLCBmcm9tKTtcXG4gXFx0aWYgKHJldCBcXHUwMDNjPSAwKVxcbiBcXHRcXHRnb3RvIG91dDtcXG5AQCAtNDI4LDE2ICs0NjksMjggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBpb21hcF9kaW9fb3BzIGV4dDRfZGlvX3dyaXRlX29wcyA9IHtcXG4gICogY29uZGl0aW9uIHJlcXVpcmVzIGFuIGV4Y2x1c2l2ZSBpbm9kZSBsb2NrLiBJZiB5ZXMsIHRoZW4gd2UgcmVzdGFydCB0aGVcXG4gICogd2hvbGUgb3BlcmF0aW9uIGJ5IHJlbGVhc2luZyB0aGUgc2hhcmVkIGxvY2sgYW5kIGFjcXVpcmluZyBleGNsdXNpdmUgbG9jay5cXG4gICpcXG4tICogLSBGb3IgdW5hbGlnbmVkX2lvIHdlIG5ldmVyIHRha2Ugc2hhcmVkIGxvY2sgYXMgaXQgbWF5IGNhdXNlIGRhdGEgY29ycnVwdGlvblxcbi0gKiAgIHdoZW4gdHdvIHVuYWxpZ25lZCBJTyB0cmllcyB0byBtb2RpZnkgdGhlIHNhbWUgYmxvY2sgZS5nLiB3aGlsZSB6ZXJvaW5nLlxcbisgKiBUaGUgZGVjaXNpb24gaXMgbGF5ZXJlZCwgZXZhbHVhdGVkIGluIHRoaXMgb3JkZXI6XFxuICAqXFxuLSAqIC0gRm9yIGV4dGVuZGluZyB3cml0ZXMgY2FzZSB3ZSBkb24ndCB0YWtlIHRoZSBzaGFyZWQgbG9jaywgc2luY2UgaXQgcmVxdWlyZXNcXG4tICogICB1cGRhdGluZyBpbm9kZSBpX2Rpc2tzaXplIGFuZC9vciBvcnBoYW4gaGFuZGxpbmcgd2l0aCBleGNsdXNpdmUgbG9jay5cXG4rICogMS4gSWYga2lvY2JfbW9kaWZpZWQoKSBuZWVkcyB0byB1cGRhdGUgc2VjdXJpdHkgaW5mbyAoIUlTX05PU0VDKSwgdXBncmFkZVxcbisgKiAgICB0byB0aGUgZXhjbHVzaXZlIGxvY2sgLS0gdGhlIHNlY3VyaXR5IHVwZGF0ZSBpdHNlbGYgcmVxdWlyZXMgaXQsXFxuKyAqICAgIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgd3JpdGUgZXh0ZW5kcyB0aGUgZmlsZSBvciBpcyBhbGlnbmVkLlxcbiAgKlxcbi0gKiAtIHNoYXJlZCBsb2NraW5nIHdpbGwgb25seSBiZSB0cnVlIG1vc3RseSB3aXRoIG92ZXJ3cml0ZXMsIGluY2x1ZGluZ1xcbi0gKiAgIGluaXRpYWxpemVkIGJsb2NrcyBhbmQgdW53cml0dGVuIGJsb2Nrcy5cXG4rICogMi4gSWYgdGhlIHdyaXRlIGV4dGVuZHMgaV9zaXplIG9yIGlfZGlza3NpemUsIHVwZ3JhZGUgdG8gdGhlIGV4Y2x1c2l2ZVxcbisgKiAgICBsb2NrIHRvIHNhZmVseSB1cGRhdGUgaV9kaXNrc2l6ZSBhbmQgdGhlIG9ycGhhbiBsaXN0LCByZWdhcmRsZXNzIG9mXFxuKyAqICAgIGFsaWdubWVudC5cXG4gICpcXG4tICogLSBPdGhlcndpc2Ugd2Ugd2lsbCBzd2l0Y2ggdG8gZXhjbHVzaXZlIGlfcndzZW0gbG9jay5cXG4rICogMy4gT3RoZXJ3aXNlLCBmb3IgYWxpZ25lZCBub24tZXh0ZW5kaW5nIHdyaXRlcywgc2hhcmVkIGxvY2sgaXMgYWx3YXlzXFxuKyAqICAgIHN1ZmZpY2llbnQgcmVnYXJkbGVzcyBvZiBleHRlbnQgc3RhdGUgKHdyaXR0ZW4sIHVud3JpdHRlbiwgb3IgaG9sZSkuXFxuKyAqICAgIHRydW5jYXRlL3B1bmNoX2hvbGUgY2Fubm90IHJ1biB3aGlsZSB3ZSBob2xkIHRoZSBzaGFyZWQgaV9yd3NlbVxcbisgKiAgICAodGhleSBuZWVkIGl0IGV4Y2x1c2l2ZWx5KTsgYWZ0ZXIgd2UgcmVsZWFzZSBpdCwgaW5vZGVfZGlvX2JlZ2luKClcXG4rICogICAga2VlcHMgdGhlaXIgaW5vZGVfZGlvX3dhaXQoKSBibG9ja2VkIHVudGlsIGluLWZsaWdodCBiaW9zIGNvbXBsZXRlLlxcbisgKiAgICBpX2RhdGFfc2VtIHNlcmlhbGl6ZXMgY29uY3VycmVudCBleHRlbnQgdHJlZSBtb2RpZmljYXRpb25zLlxcbisgKlxcbisgKiA0LiBPdGhlcndpc2UsIHRoZSB3cml0ZSBpcyB1bmFsaWduZWQgYW5kIG5vbi1leHRlbmRpbmcuIFNoYXJlZCBsb2NrIGlzXFxuKyAqICAgIHNhZmUgdW5sZXNzIHRoZSBESU8gbGF5ZXIgbmVlZHMgdG8gcGVyZm9ybSBwYXJ0aWFsIGJsb2NrIHplcm9pbmcgLS1cXG4rICogICAgaS5lLiB0aGUgaGVhZCBvciB0YWlsIHBhcnRpYWwgYmxvY2sgc2l0cyBvbiBhIGhvbGUgb3IgdW53cml0dGVuXFxuKyAqICAgIGV4dGVudC4gSW4gdGhhdCBjYXNlIHVwZ3JhZGUgdG8gdGhlIGV4Y2x1c2l2ZSBsb2NrIGFuZCBkcmFpblxcbisgKiAgICBpbi1mbGlnaHQgRElPIHRvIGF2b2lkIHJhY2VzIHdpdGggY29uY3VycmVudCBwYXJ0aWFsIGJsb2NrIHplcm9pbmcuXFxuICAqL1xcbiBzdGF0aWMgc3NpemVfdCBleHQ0X2Rpb193cml0ZV9jaGVja3Moc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXFxuIFxcdFxcdFxcdFxcdCAgICAgYm9vbCAqaWxvY2tfc2hhcmVkLCBib29sICpleHRlbmQsXFxuQEAgLTQ0OCw3ICs1MDEsNyBAQCBzdGF0aWMgc3NpemVfdCBleHQ0X2Rpb193cml0ZV9jaGVja3Moc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXFxuIFxcdGxvZmZfdCBvZmZzZXQ7XFxuIFxcdHNpemVfdCBjb3VudDtcXG4gXFx0c3NpemVfdCByZXQ7XFxuLVxcdGJvb2wgb3ZlcndyaXRlLCB1bmFsaWduZWRfaW8sIHVud3JpdHRlbjtcXG4rXFx0Ym9vbCBuZWVkc196ZXJvaW5nID0gZmFsc2U7XFxuIFxcbiByZXN0YXJ0OlxcbiBcXHRyZXQgPSBleHQ0X2dlbmVyaWNfd3JpdGVfY2hlY2tzKGlvY2IsIGZyb20pO1xcbkBAIC00NTgsMjQgKzUxMSwyMyBAQCBzdGF0aWMgc3NpemVfdCBleHQ0X2Rpb193cml0ZV9jaGVja3Moc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXFxuIFxcdG9mZnNldCA9IGlvY2ItXFx1MDAzZWtpX3BvcztcXG4gXFx0Y291bnQgPSByZXQ7XFxuIFxcbi1cXHR1bmFsaWduZWRfaW8gPSBleHQ0X3VuYWxpZ25lZF9pbyhpbm9kZSwgZnJvbSwgb2Zmc2V0KTtcXG4gXFx0KmV4dGVuZCA9IGV4dDRfZXh0ZW5kaW5nX2lvKGlub2RlLCBvZmZzZXQsIGNvdW50KTtcXG4tXFx0b3ZlcndyaXRlID0gZXh0NF9vdmVyd3JpdGVfaW8oaW5vZGUsIG9mZnNldCwgY291bnQsIFxcdTAwMjZ1bndyaXR0ZW4pO1xcbiBcXG4gXFx0LypcXG4tXFx0ICogRGV0ZXJtaW5lIHdoZXRoZXIgd2UgbmVlZCB0byB1cGdyYWRlIHRvIGFuIGV4Y2x1c2l2ZSBsb2NrLiBUaGlzIGlzXFxuLVxcdCAqIHJlcXVpcmVkIHRvIGNoYW5nZSBzZWN1cml0eSBpbmZvIGluIGZpbGVfbW9kaWZpZWQoKSwgZm9yIGV4dGVuZGluZ1xcbi1cXHQgKiBJL08sIGFueSBmb3JtIG9mIG5vbi1vdmVyd3JpdGUgSS9PLCBhbmQgdW5hbGlnbmVkIEkvTyB0byB1bndyaXR0ZW5cXG4tXFx0ICogZXh0ZW50cyAoYXMgcGFydGlhbCBibG9jayB6ZXJvaW5nIG1heSBiZSByZXF1aXJlZCkuXFxuK1xcdCAqIEZvciB1bmFsaWduZWQgd3JpdGVzLCBjaGVjayB3aGV0aGVyIHBhcnRpYWwgYmxvY2sgemVyb2luZyB3aWxsIGJlXFxuK1xcdCAqIG5lZWRlZC4gSWYgc28sIGV4Y2x1c2l2ZSBsb2NrIGlzIHJlcXVpcmVkIHRvIHNlcmlhbGl6ZSBhZ2FpbnN0XFxuK1xcdCAqIGNvbmN1cnJlbnQgRElPIHRoYXQgY291bGQgcmFjZSB3aXRoIHRoZSB6ZXJvaW5nLlxcbiBcXHQgKlxcbi1cXHQgKiBOb3RlIHRoYXQgdW5hbGlnbmVkIHdyaXRlcyBhcmUgYWxsb3dlZCB1bmRlciBzaGFyZWQgbG9jayBzbyBsb25nIGFzXFxuLVxcdCAqIHRoZXkgYXJlIHB1cmUgb3ZlcndyaXRlcy4gT3RoZXJ3aXNlLCBjb25jdXJyZW50IHVuYWxpZ25lZCB3cml0ZXMgcmlza1xcbi1cXHQgKiBkYXRhIGNvcnJ1cHRpb24gZHVlIHRvIHBhcnRpYWwgYmxvY2sgemVyb2luZyBpbiB0aGUgZGlvIGxheWVyLCBhbmQgc29cXG4tXFx0ICogdGhlIEkvTyBtdXN0IG9jY3VyIGV4Y2x1c2l2ZWx5LlxcbitcXHQgKiBGb3IgYWxpZ25lZCB3cml0ZXMgd2Ugc2tpcCB0aGlzIGNoZWNrIGVudGlyZWx5IHNpbmNlIGFsbG9jYXRpb25cXG4rXFx0ICogdW5kZXIgc2hhcmVkIGxvY2sgaXMgc2FmZS5cXG4gXFx0ICovXFxuK1xcdGlmIChleHQ0X3VuYWxpZ25lZF9pbyhpbm9kZSwgZnJvbSwgb2Zmc2V0KSlcXG4rXFx0XFx0bmVlZHNfemVyb2luZyA9IGV4dDRfZGlvX25lZWRzX3plcm9pbmcoaW5vZGUsIG9mZnNldCwgY291bnQsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdGlvY2ItXFx1MDAzZWtpX2ZsYWdzIFxcdTAwMjYgSU9DQl9OT1dBSVQpO1xcbitcXG4rXFx0LyogRGV0ZXJtaW5lIHdoZXRoZXIgd2UgbmVlZCB0byB1cGdyYWRlIHRvIGFuIGV4Y2x1c2l2ZSBsb2NrLiAqL1xcbiBcXHRpZiAoKmlsb2NrX3NoYXJlZCBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgKCghSVNfTk9TRUMoaW5vZGUpIHx8ICpleHRlbmQgfHwgIW92ZXJ3cml0ZSB8fFxcbi1cXHQgICAgICh1bmFsaWduZWRfaW8gXFx1MDAyNlxcdTAwMjYgdW53cml0dGVuKSkpKSB7XFxuK1xcdCAgICAoIUlTX05PU0VDKGlub2RlKSB8fCAqZXh0ZW5kIHx8IG5lZWRzX3plcm9pbmcpKSB7XFxuIFxcdFxcdGlmIChpb2NiLVxcdTAwM2VraV9mbGFncyBcXHUwMDI2IElPQ0JfTk9XQUlUKSB7XFxuIFxcdFxcdFxcdHJldCA9IC1FQUdBSU47XFxuIFxcdFxcdFxcdGdvdG8gb3V0O1xcbkBAIC00ODksMjEgKzU0MSwyOCBAQCBzdGF0aWMgc3NpemVfdCBleHQ0X2Rpb193cml0ZV9jaGVja3Moc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXFxuIFxcdC8qXFxuIFxcdCAqIE5vdyB0aGF0IGxvY2tpbmcgaXMgc2V0dGxlZCwgZGV0ZXJtaW5lIGRpbyBmbGFncyBhbmQgZXhjbHVzaXZpdHlcXG4gXFx0ICogcmVxdWlyZW1lbnRzLiBXZSBkb24ndCB1c2UgRElPX09WRVJXUklURV9PTkxZIGJlY2F1c2Ugd2UgZW5mb3JjZVxcbi1cXHQgKiBiZWhhdmlvciBhbHJlYWR5LiBUaGUgaW5vZGUgbG9jayBpcyBhbHJlYWR5IGhlbGQgZXhjbHVzaXZlIGlmIHRoZVxcbi1cXHQgKiB3cml0ZSBpcyBub24tb3ZlcndyaXRlIG9yIGV4dGVuZGluZywgc28gZHJhaW4gYWxsIG91dHN0YW5kaW5nIGRpbyBhbmRcXG4tXFx0ICogc2V0IHRoZSBmb3JjZSB3YWl0IGRpbyBmbGFnLlxcbitcXHQgKiBiZWhhdmlvciBhbHJlYWR5LiBXaGVuIGhvbGRpbmcgdGhlIGV4Y2x1c2l2ZSBsb2NrIGZvciBhIHdyaXRlIHRoYXRcXG4rXFx0ICogbmVlZHMgcGFydGlhbCBibG9jayB6ZXJvaW5nIG9yIGlzIGV4dGVuZGluZyB0aGUgZmlsZSwgd2UgbXVzdCB3YWl0XFxuK1xcdCAqIGZvciB0aGUgSS9PIHRvIGNvbXBsZXRlIHN5bmNocm9ub3VzbHk6XFxuK1xcdCAqXFxuK1xcdCAqICAtIG5lZWRzX3plcm9pbmc6IGRyYWluIGluLWZsaWdodCBESU8gd2hvc2UgZW5kX2lvIGNvdWxkIHJhY2Ugd2l0aFxcbitcXHQgKiAgICBvdXIgcGFydGlhbCBibG9jayB6ZXJvaW5nLCBhbmQgZm9yY2Ugc3luY2hyb25vdXMgY29tcGxldGlvbiBzbyB3ZVxcbitcXHQgKiAgICBkb24ndCBsZWF2ZSBpbi1mbGlnaHQgemVyb2luZyBiaW9zIGZvciB0aGUgbmV4dCB3cml0ZXIgdG8gZHJhaW4uXFxuK1xcdCAqXFxuK1xcdCAqICAtIGV4dGVuZDogdGhlIGNhbGxlciBtdXN0IHVwZGF0ZSBpX2Rpc2tzaXplIGFmdGVyIEkvTyBjb21wbGV0aW9uLFxcbitcXHQgKiAgICB3aGljaCByZXF1aXJlcyB0aGUgZGF0YSB0byBiZSBvbiBkaXNrIGZpcnN0LlxcbiBcXHQgKi9cXG4tXFx0aWYgKCEqaWxvY2tfc2hhcmVkIFxcdTAwMjZcXHUwMDI2ICh1bmFsaWduZWRfaW8gfHwgKmV4dGVuZCkpIHtcXG4rXFx0aWYgKCEqaWxvY2tfc2hhcmVkIFxcdTAwMjZcXHUwMDI2IChuZWVkc196ZXJvaW5nIHx8ICpleHRlbmQpKSB7XFxuIFxcdFxcdGlmIChpb2NiLVxcdTAwM2VraV9mbGFncyBcXHUwMDI2IElPQ0JfTk9XQUlUKSB7XFxuIFxcdFxcdFxcdHJldCA9IC1FQUdBSU47XFxuIFxcdFxcdFxcdGdvdG8gb3V0O1xcbiBcXHRcXHR9XFxuLVxcdFxcdGlmICh1bmFsaWduZWRfaW8gXFx1MDAyNlxcdTAwMjYgKCFvdmVyd3JpdGUgfHwgdW53cml0dGVuKSlcXG4rXFx0XFx0aWYgKG5lZWRzX3plcm9pbmcpXFxuIFxcdFxcdFxcdGlub2RlX2Rpb193YWl0KGlub2RlKTtcXG4gXFx0XFx0KmRpb19mbGFncyA9IElPTUFQX0RJT19GT1JDRV9XQUlUO1xcbiBcXHR9XFxuIFxcbi1cXHRyZXQgPSBmaWxlX21vZGlmaWVkKGZpbGUpO1xcbitcXHRyZXQgPSBraW9jYl9tb2RpZmllZChpb2NiKTtcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG5AQCAtNjcyLDYgKzczMSwxMSBAQCBleHQ0X2RheF93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxcbiBcXHRjb3VudCA9IGlvdl9pdGVyX2NvdW50KGZyb20pO1xcbiBcXG4gXFx0aWYgKG9mZnNldCArIGNvdW50IFxcdTAwM2UgRVhUNF9JKGlub2RlKS1cXHUwMDNlaV9kaXNrc2l6ZSkge1xcbitcXHRcXHRpZiAoaW9jYi1cXHUwMDNla2lfZmxhZ3MgXFx1MDAyNiBJT0NCX05PV0FJVCkge1xcbitcXHRcXHRcXHRyZXQgPSAtRUFHQUlOO1xcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0fVxcbitcXG4gXFx0XFx0aGFuZGxlID0gZXh0NF9qb3VybmFsX3N0YXJ0KGlub2RlLCBFWFQ0X0hUX0lOT0RFLCAyKTtcXG4gXFx0XFx0aWYgKElTX0VSUihoYW5kbGUpKSB7XFxuIFxcdFxcdFxcdHJldCA9IFBUUl9FUlIoaGFuZGxlKTtcXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9pbm9kZS5jIGIvZnMvZXh0NC9pbm9kZS5jXFxuaW5kZXggYzJjMmQ2YWM3ZjNkMTMuLjNjMDUwOTQ0NzVkYjFjIDEwMDY0NFxcbi0tLSBhL2ZzL2V4dDQvaW5vZGUuY1xcbisrKyBiL2ZzL2V4dDQvaW5vZGUuY1xcbkBAIC03NTksOCArNzU5LDkgQEAgaW50IGV4dDRfbWFwX2Jsb2NrcyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXHRcXHRcXHRCVUcoKTtcXG4gXFx0XFx0fVxcbiBcXG4rXFx0XFx0LyogU2tpcCBibG9ja2luZyBvcGVyYXRpb25zIGFuZCBqdW1wIHRvIGV4dGVudCB2YWxpZGF0aW9uLiAqL1xcbiBcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBFWFQ0X0dFVF9CTE9DS1NfQ0FDSEVEX05PV0FJVClcXG4tXFx0XFx0XFx0cmV0dXJuIHJldHZhbDtcXG4rXFx0XFx0XFx0Z290byBmb3VuZDtcXG4gI2lmZGVmIEVTX0FHR1JFU1NJVkVfVEVTVFxcbiBcXHRcXHRleHQ0X21hcF9ibG9ja3NfZXNfcmVjaGVjayhoYW5kbGUsIGlub2RlLCBtYXAsXFxuIFxcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZvcmlnX21hcCwgZmxhZ3MpO1xcbkBAIC03NzYsNyArNzc3LDcgQEAgaW50IGV4dDRfbWFwX2Jsb2NrcyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXHQgKiBjYW5ub3QgZmluZCBleHRlbnQgaW4gdGhlIGNhY2hlLlxcbiBcXHQgKi9cXG4gXFx0aWYgKGZsYWdzIFxcdTAwMjYgRVhUNF9HRVRfQkxPQ0tTX0NBQ0hFRF9OT1dBSVQpXFxuLVxcdFxcdHJldHVybiAwO1xcbitcXHRcXHRyZXR1cm4gLUVBR0FJTjtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIFRyeSB0byBzZWUgaWYgd2UgY2FuIGdldCB0aGUgYmxvY2sgd2l0aG91dCByZXF1ZXN0aW5nIGEgbmV3XFxuQEAgLTc5Nyw2ICs3OTgsOSBAQCBpbnQgZXh0NF9tYXBfYmxvY2tzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdGlmICgoZmxhZ3MgXFx1MDAyNiBFWFQ0X0dFVF9CTE9DS1NfQ1JFQVRFKSA9PSAwKVxcbiBcXHRcXHRyZXR1cm4gcmV0dmFsO1xcbiBcXG4rXFx0LyogRVhUNF9HRVRfQkxPQ0tTX0NSRUFURSBjYW5ub3Qgb3BlcmF0ZSBpbiBOT1dBSVQgbW9kZSAqL1xcbitcXHRXQVJOX09OX09OQ0UoZmxhZ3MgXFx1MDAyNiBFWFQ0X0dFVF9CTE9DS1NfQ0FDSEVEX05PV0FJVCk7XFxuK1xcbiBcXHQvKlxcbiBcXHQgKiBSZXR1cm5zIGlmIHRoZSBibG9ja3MgaGF2ZSBhbHJlYWR5IGFsbG9jYXRlZFxcbiBcXHQgKlxcbkBAIC0zNjcyLDYgKzM2NzYsOSBAQCBzdGF0aWMgaW50IGV4dDRfaW9tYXBfYWxsb2Moc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dDRfbWFwX2Jsb2NrcyAqbWFwLFxcbiBcXHRpbnQgcmV0LCBkaW9fY3JlZGl0cywgbV9mbGFncyA9IDAsIHJldHJpZXMgPSAwO1xcbiBcXHRib29sIGZvcmNlX2NvbW1pdCA9IGZhbHNlO1xcbiBcXG4rXFx0aWYgKGZsYWdzIFxcdTAwMjYgSU9NQVBfTk9XQUlUKVxcbitcXHRcXHRyZXR1cm4gLUVBR0FJTjtcXG4rXFxuIFxcdC8qXFxuIFxcdCAqIFRyaW0gdGhlIG1hcHBpbmcgcmVxdWVzdCB0byB0aGUgbWF4aW11bSB2YWx1ZSB0aGF0IHdlIGNhbiBtYXAgYXRcXG4gXFx0ICogb25jZSBmb3IgZGlyZWN0IEkvTy5cXG5AQCAtMzc3Nyw2ICszNzg0LDcgQEAgc3RhdGljIGludCBleHQ0X2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW5ndGgsXFxuIFxcdHN0cnVjdCBleHQ0X21hcF9ibG9ja3MgbWFwO1xcbiBcXHR1OCBibGtiaXRzID0gaW5vZGUtXFx1MDAzZWlfYmxrYml0cztcXG4gXFx0dW5zaWduZWQgaW50IG9yaWdfbWxlbjtcXG4rXFx0aW50IG1hcF9mbGFncyA9IDA7XFxuIFxcbiBcXHRpZiAoKG9mZnNldCBcXHUwMDNlXFx1MDAzZSBibGtiaXRzKSBcXHUwMDNlIEVYVDRfTUFYX0xPR0lDQUxfQkxPQ0spXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbkBAIC0zNzkxLDYgKzM3OTksMTIgQEAgc3RhdGljIGludCBleHQ0X2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW5ndGgsXFxuIFxcdG1hcC5tX2xlbiA9IG1pbl90KGxvZmZfdCwgKG9mZnNldCArIGxlbmd0aCAtIDEpIFxcdTAwM2VcXHUwMDNlIGJsa2JpdHMsXFxuIFxcdFxcdFxcdCAgRVhUNF9NQVhfTE9HSUNBTF9CTE9DSykgLSBtYXAubV9sYmxrICsgMTtcXG4gXFx0b3JpZ19tbGVuID0gbWFwLm1fbGVuO1xcbitcXHQvKlxcbitcXHQgKiBJbiBOT1dBSVQgY29udGV4dCwgb25seSB1c2UgY2FjaGVkIGV4dGVudCBpbmZvLiBJZiBlcyBjYWNoZSBtaXNzZXMsXFxuK1xcdCAqIHJldHVybiAtRUFHQUlOIHRvIGF2b2lkIHNsZWVwaW5nIG9uIGRvd25fcmVhZChpX2RhdGFfc2VtKS5cXG4rXFx0ICovXFxuK1xcdGlmIChmbGFncyBcXHUwMDI2IElPTUFQX05PV0FJVClcXG4rXFx0XFx0bWFwX2ZsYWdzID0gRVhUNF9HRVRfQkxPQ0tTX0NBQ0hFRF9OT1dBSVQ7XFxuIFxcbiBcXHRpZiAoZmxhZ3MgXFx1MDAyNiBJT01BUF9XUklURSkge1xcbiBcXHRcXHQvKlxcbkBAIC0zODAwLDcgKzM4MTQsNyBAQCBzdGF0aWMgaW50IGV4dDRfaW9tYXBfYmVnaW4oc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbmd0aCxcXG4gXFx0XFx0ICogZXNwZWNpYWxseSBpbiBtdWx0aS10aHJlYWRlZCBvdmVyd3JpdGUgcmVxdWVzdHMuXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRpZiAob2Zmc2V0ICsgbGVuZ3RoIFxcdTAwM2M9IGlfc2l6ZV9yZWFkKGlub2RlKSkge1xcbi1cXHRcXHRcXHRyZXQgPSBleHQ0X21hcF9ibG9ja3MoTlVMTCwgaW5vZGUsIFxcdTAwMjZtYXAsIDApO1xcbitcXHRcXHRcXHRyZXQgPSBleHQ0X21hcF9ibG9ja3MoTlVMTCwgaW5vZGUsIFxcdTAwMjZtYXAsIG1hcF9mbGFncyk7XFxuIFxcdFxcdFxcdC8qXFxuIFxcdFxcdFxcdCAqIEZvciBEQVggd2UgY29udmVydCBleHRlbnRzIHRvIGluaXRpYWxpemVkIG9uZXMgYmVmb3JlXFxuIFxcdFxcdFxcdCAqIGNvcHlpbmcgdGhlIGRhdGEsIG90aGVyd2lzZSB3ZSBkbyBpdCBhZnRlciBJL08gc29cXG5AQCAtMzgyMSw3ICszODM1LDcgQEAgc3RhdGljIGludCBleHQ0X2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW5ndGgsXFxuIFxcdFxcdH1cXG4gXFx0XFx0cmV0ID0gZXh0NF9pb21hcF9hbGxvYyhpbm9kZSwgXFx1MDAyNm1hcCwgZmxhZ3MpO1xcbiBcXHR9IGVsc2Uge1xcbi1cXHRcXHRyZXQgPSBleHQ0X21hcF9ibG9ja3MoTlVMTCwgaW5vZGUsIFxcdTAwMjZtYXAsIDApO1xcbitcXHRcXHRyZXQgPSBleHQ0X21hcF9ibG9ja3MoTlVMTCwgaW5vZGUsIFxcdTAwMjZtYXAsIG1hcF9mbGFncyk7XFxuIFxcdH1cXG4gXFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwOTowODoxNS40NTU1NDkwMzNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkxNTk5MDk0MDgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIixcbiAgICBcIkZTX0RBWFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV4dDRfZGlvX25lZWRzX3plcm9pbmdcIixcbiAgICBcImV4dDRfZGlvX3dyaXRlX2NoZWNrc1wiLFxuICAgIFwiZXh0NF9idWZmZXJlZF93cml0ZV9pdGVyXCIsXG4gICAgXCJleHQ0X2RheF93cml0ZV9pdGVyXCIsXG4gICAgXCJleHQ0X2lvbWFwX2JlZ2luXCIsXG4gICAgXCJleHQ0X2lvbWFwX2FsbG9jXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZXh0NCBEaXJlY3QgSS9PIGFuZCBEQVggd3JpdGUgcGF0aHMsIHNwZWNpZmljYWxseSBmaXhpbmcgbG9ja2luZyBhbmQgcGFydGlhbCBibG9jayB6ZXJvaW5nIGZvciB1bmFsaWduZWQgRElPIHdyaXRlcy4gSXQgaW50cm9kdWNlcyBgZXh0NF9kaW9fbmVlZHNfemVyb2luZ2AgYW5kIG1vZGlmaWVzIGBleHQ0X2Rpb193cml0ZV9jaGVja3NgLCBgZXh0NF9idWZmZXJlZF93cml0ZV9pdGVyYCwgYGV4dDRfZGF4X3dyaXRlX2l0ZXJgLCBhbmQgYGV4dDRfaW9tYXBfYmVnaW5gLiBUaGVzZSBhcmUgY29yZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gZXh0NCdzIEkvTyBoYW5kbGluZyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYzExODllNzc2ZDkxNjM5NjI4MDg3NWYxN2I0YTkzOWM0NDlkNmQwN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVuIDI2IDA5OjA4OjEzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9maWxlLmMgYi9mcy9leHQ0L2ZpbGUuY1xuaW5kZXggZWIxYTMyMzk2MmIxMDEuLjYxMGUxMDlmY2QzNjI1IDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9maWxlLmNcbisrKyBiL2ZzL2V4dDQvZmlsZS5jXG5AQCAtMjEzLDMxICsyMTMsNjUgQEAgZXh0NF9leHRlbmRpbmdfaW8oc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCwgc2l6ZV90IGxlbilcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4tLyogSXMgSU8gb3ZlcndyaXRpbmcgYWxsb2NhdGVkIG9yIGluaXRpYWxpemVkIGJsb2Nrcz8gKi9cbi1zdGF0aWMgYm9vbCBleHQ0X292ZXJ3cml0ZV9pbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLVx0XHRcdCAgICAgIGxvZmZfdCBwb3MsIGxvZmZfdCBsZW4sIGJvb2wgKnVud3JpdHRlbilcbisvKlxuKyAqIERvZXMgYW4gdW5hbGlnbmVkIERJTyB3cml0ZSByZXF1aXJlIHBhcnRpYWwgYmxvY2sgemVyb2luZz9cbisgKlxuKyAqIFBhcnRpYWwgYmxvY2sgemVyb2luZyBpcyBwZXJmb3JtZWQgb25seSBmb3IgdGhlIGhlYWQgYW5kIHRhaWwgYmxvY2tzXG4rICogd2hlbiB0aGV5IGFyZSBwYXJ0aWFsbHkgY292ZXJlZCBieSB0aGUgd3JpdGUgYW5kIHRoZSB1bmRlcmx5aW5nIGV4dGVudFxuKyAqIGlzIGEgaG9sZSBvciB1bndyaXR0ZW4uIE1pZGRsZSBibG9ja3MgKGZ1bGx5IGNvdmVyZWQgYnkgdGhlIHdyaXRlKVxuKyAqIGFyZSB3cml0dGVuIGFzIHdob2xlIGJsb2NrcyB3aXRob3V0IHplcm9pbmcuXG4rICpcbisgKiBXaGVuIHplcm9pbmcgaXMgcmVxdWlyZWQsIHR3byBjb25jdXJyZW50IHVuYWxpZ25lZCBESU8gd3JpdGVzIHRvIHRoZVxuKyAqIHNhbWUgcGFydGlhbCBibG9jayBjYW4gcmFjZSBhbmQgY29ycnVwdCBlYWNoIG90aGVyJ3MgZGF0YSwgc28gdGhlXG4rICogY2FsbGVyIG11c3QgdGFrZSB0aGUgZXhjbHVzaXZlIGlfcndzZW0gYW5kIGRyYWluIGluLWZsaWdodCBESU8uIFdoZW5cbisgKiB6ZXJvaW5nIGlzIG5vdCByZXF1aXJlZCwgc2hhcmVkIGxvY2sgaXMgc2FmZSAtLSBibG9jayBhbGxvY2F0aW9uIGFuZFxuKyAqIHVud3JpdHRlbiBjb252ZXJzaW9uIGZvciBtaWRkbGUgYmxvY2tzIGFyZSBwcm90ZWN0ZWQgYnkgaV9kYXRhX3NlbVxuKyAqIGFuZCBpbm9kZV9kaW9fYmVnaW4oKS5cbisgKi9cbitzdGF0aWMgYm9vbCBleHQ0X2Rpb19uZWVkc196ZXJvaW5nKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBwb3MsIGxvZmZfdCBsZW4sXG4rXHRcdFx0XHQgICBib29sIG5vd2FpdClcbiB7XG4gXHRzdHJ1Y3QgZXh0NF9tYXBfYmxvY2tzIG1hcDtcbiBcdHVuc2lnbmVkIGludCBibGtiaXRzID0gaW5vZGUtXHUwMDNlaV9ibGtiaXRzO1xuLVx0aW50IGVyciwgYmxrbGVuO1xuK1x0dW5zaWduZWQgbG9uZyBibG9ja21hc2sgPSBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplIC0gMTtcbitcdGJvb2wgaGVhZF9wYXJ0aWFsLCB0YWlsX3BhcnRpYWw7XG4rXHRleHQ0X2xibGtfdCBoZWFkX2xibGssIHRhaWxfbGJsaztcbitcdGludCBlcnI7XG4rXHRpbnQgbWFwX2ZsYWdzID0gMDtcbiBcbiBcdGlmIChwb3MgKyBsZW4gXHUwMDNlIGlfc2l6ZV9yZWFkKGlub2RlKSlcbi1cdFx0cmV0dXJuIGZhbHNlO1xuK1x0XHRyZXR1cm4gdHJ1ZTtcbiBcbi1cdG1hcC5tX2xibGsgPSBwb3MgXHUwMDNlXHUwMDNlIGJsa2JpdHM7XG4tXHRtYXAubV9sZW4gPSBFWFQ0X01BWF9CTE9DS1MobGVuLCBwb3MsIGJsa2JpdHMpO1xuLVx0YmxrbGVuID0gbWFwLm1fbGVuO1xuK1x0aWYgKG5vd2FpdClcbitcdFx0bWFwX2ZsYWdzID0gRVhUNF9HRVRfQkxPQ0tTX0NBQ0hFRF9OT1dBSVQ7XG4rXG4rXHRoZWFkX3BhcnRpYWwgPSAocG9zIFx1MDAyNiBibG9ja21hc2spICE9IDA7XG4rXHR0YWlsX3BhcnRpYWwgPSAoKHBvcyArIGxlbikgXHUwMDI2IGJsb2NrbWFzaykgIT0gMDtcbitcdGhlYWRfbGJsayA9IHBvcyBcdTAwM2VcdTAwM2UgYmxrYml0cztcbitcdHRhaWxfbGJsayA9IChwb3MgKyBsZW4gLSAxKSBcdTAwM2VcdTAwM2UgYmxrYml0cztcbitcbitcdC8qIENoZWNrIHRoZSBoZWFkIHBhcnRpYWwgYmxvY2suICovXG4rXHRpZiAoaGVhZF9wYXJ0aWFsKSB7XG4rXHRcdG1hcC5tX2xibGsgPSBoZWFkX2xibGs7XG4rXHRcdG1hcC5tX2xlbiA9IHRhaWxfbGJsayAtIGhlYWRfbGJsayArIDE7XG4rXHRcdGVyciA9IGV4dDRfbWFwX2Jsb2NrcyhOVUxMLCBpbm9kZSwgXHUwMDI2bWFwLCBtYXBfZmxhZ3MpO1xuK1x0XHRpZiAoZXJyIFx1MDAzYz0gMCB8fCAhKG1hcC5tX2ZsYWdzIFx1MDAyNiBFWFQ0X01BUF9NQVBQRUQpKVxuK1x0XHRcdHJldHVybiB0cnVlO1xuK1x0XHQvKiBJZiB0aGlzIG1hcHBpbmcgYWxyZWFkeSBjb3ZlcnMgdGhlIHRhaWwgYmxvY2ssIHdlJ3JlIGRvbmUuICovXG4rXHRcdGlmICghdGFpbF9wYXJ0aWFsIHx8IG1hcC5tX2xibGsgKyBlcnIgXHUwMDNlIHRhaWxfbGJsaylcbitcdFx0XHRyZXR1cm4gZmFsc2U7XG4rXHR9XG4gXG4tXHRlcnIgPSBleHQ0X21hcF9ibG9ja3MoTlVMTCwgaW5vZGUsIFx1MDAyNm1hcCwgMCk7XG4tXHRpZiAoZXJyICE9IGJsa2xlbilcbi1cdFx0cmV0dXJuIGZhbHNlO1xuLVx0Lypcbi1cdCAqICdlcnI9PWxlbicgbWVhbnMgdGhhdCBhbGwgb2YgdGhlIGJsb2NrcyBoYXZlIGJlZW4gcHJlYWxsb2NhdGVkLFxuLVx0ICogcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZXkgaGF2ZSBiZWVuIGluaXRpYWxpemVkIG9yIG5vdC4gV2UgbmVlZCB0b1xuLVx0ICogY2hlY2sgbV9mbGFncyB0byBkaXN0aW5ndWlzaCB0aGUgdW53cml0dGVuIGV4dGVudHMuXG4tXHQgKi9cbi1cdCp1bndyaXR0ZW4gPSAhKG1hcC5tX2ZsYWdzIFx1MDAyNiBFWFQ0X01BUF9NQVBQRUQpO1xuLVx0cmV0dXJuIHRydWU7XG4rXHQvKiBDaGVjayB0aGUgdGFpbCBwYXJ0aWFsIGJsb2NrLiAqL1xuK1x0aWYgKHRhaWxfcGFydGlhbCkge1xuK1x0XHRtYXAubV9sYmxrID0gdGFpbF9sYmxrO1xuK1x0XHRtYXAubV9sZW4gPSAxO1xuK1x0XHRlcnIgPSBleHQ0X21hcF9ibG9ja3MoTlVMTCwgaW5vZGUsIFx1MDAyNm1hcCwgbWFwX2ZsYWdzKTtcbitcdFx0aWYgKGVyciBcdTAwM2M9IDAgfHwgIShtYXAubV9mbGFncyBcdTAwMjYgRVhUNF9NQVBfTUFQUEVEKSlcbitcdFx0XHRyZXR1cm4gdHJ1ZTtcbitcdH1cbitcbitcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4gc3RhdGljIHNzaXplX3QgZXh0NF9nZW5lcmljX3dyaXRlX2NoZWNrcyhzdHJ1Y3Qga2lvY2IgKmlvY2IsXG5AQCAtMjc4LDcgKzMxMiw3IEBAIHN0YXRpYyBzc2l6ZV90IGV4dDRfd3JpdGVfY2hlY2tzKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxuIFx0aWYgKGNvdW50IFx1MDAzYz0gMClcbiBcdFx0cmV0dXJuIGNvdW50O1xuIFxuLVx0cmV0ID0gZmlsZV9tb2RpZmllZChpb2NiLVx1MDAzZWtpX2ZpbHApO1xuK1x0cmV0ID0ga2lvY2JfbW9kaWZpZWQoaW9jYik7XG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuQEAgLTMwOSw2ICszNDMsMTMgQEAgc3RhdGljIHNzaXplX3QgZXh0NF9idWZmZXJlZF93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYixcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFxuIFx0aW5vZGVfbG9jayhpbm9kZSk7XG4rXG4rXHQvKlxuK1x0ICogUHJldmVudCBjb25jdXJyZW50IGRpcmVjdCBJL08gYW5kIGJ1ZmZlcmVkIEkvTyB0byB0aGUgc2FtZSBmaWxlXG4rXHQgKiByYW5nZS4gV2FpdCBmb3IgaW4tZmxpZ2h0IERJTyB0byBmaW5pc2ggYmVmb3JlIGRpcnR5aW5nIHBhZ2VzLlxuK1x0ICovXG4rXHRpbm9kZV9kaW9fd2FpdChpbm9kZSk7XG4rXG4gXHRyZXQgPSBleHQ0X3dyaXRlX2NoZWNrcyhpb2NiLCBmcm9tKTtcbiBcdGlmIChyZXQgXHUwMDNjPSAwKVxuIFx0XHRnb3RvIG91dDtcbkBAIC00MjgsMTYgKzQ2OSwyOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGlvbWFwX2Rpb19vcHMgZXh0NF9kaW9fd3JpdGVfb3BzID0ge1xuICAqIGNvbmRpdGlvbiByZXF1aXJlcyBhbiBleGNsdXNpdmUgaW5vZGUgbG9jay4gSWYgeWVzLCB0aGVuIHdlIHJlc3RhcnQgdGhlXG4gICogd2hvbGUgb3BlcmF0aW9uIGJ5IHJlbGVhc2luZyB0aGUgc2hhcmVkIGxvY2sgYW5kIGFjcXVpcmluZyBleGNsdXNpdmUgbG9jay5cbiAgKlxuLSAqIC0gRm9yIHVuYWxpZ25lZF9pbyB3ZSBuZXZlciB0YWtlIHNoYXJlZCBsb2NrIGFzIGl0IG1heSBjYXVzZSBkYXRhIGNvcnJ1cHRpb25cbi0gKiAgIHdoZW4gdHdvIHVuYWxpZ25lZCBJTyB0cmllcyB0byBtb2RpZnkgdGhlIHNhbWUgYmxvY2sgZS5nLiB3aGlsZSB6ZXJvaW5nLlxuKyAqIFRoZSBkZWNpc2lvbiBpcyBsYXllcmVkLCBldmFsdWF0ZWQgaW4gdGhpcyBvcmRlcjpcbiAgKlxuLSAqIC0gRm9yIGV4dGVuZGluZyB3cml0ZXMgY2FzZSB3ZSBkb24ndCB0YWtlIHRoZSBzaGFyZWQgbG9jaywgc2luY2UgaXQgcmVxdWlyZXNcbi0gKiAgIHVwZGF0aW5nIGlub2RlIGlfZGlza3NpemUgYW5kL29yIG9ycGhhbiBoYW5kbGluZyB3aXRoIGV4Y2x1c2l2ZSBsb2NrLlxuKyAqIDEuIElmIGtpb2NiX21vZGlmaWVkKCkgbmVlZHMgdG8gdXBkYXRlIHNlY3VyaXR5IGluZm8gKCFJU19OT1NFQyksIHVwZ3JhZGVcbisgKiAgICB0byB0aGUgZXhjbHVzaXZlIGxvY2sgLS0gdGhlIHNlY3VyaXR5IHVwZGF0ZSBpdHNlbGYgcmVxdWlyZXMgaXQsXG4rICogICAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSB3cml0ZSBleHRlbmRzIHRoZSBmaWxlIG9yIGlzIGFsaWduZWQuXG4gICpcbi0gKiAtIHNoYXJlZCBsb2NraW5nIHdpbGwgb25seSBiZSB0cnVlIG1vc3RseSB3aXRoIG92ZXJ3cml0ZXMsIGluY2x1ZGluZ1xuLSAqICAgaW5pdGlhbGl6ZWQgYmxvY2tzIGFuZCB1bndyaXR0ZW4gYmxvY2tzLlxuKyAqIDIuIElmIHRoZSB3cml0ZSBleHRlbmRzIGlfc2l6ZSBvciBpX2Rpc2tzaXplLCB1cGdyYWRlIHRvIHRoZSBleGNsdXNpdmVcbisgKiAgICBsb2NrIHRvIHNhZmVseSB1cGRhdGUgaV9kaXNrc2l6ZSBhbmQgdGhlIG9ycGhhbiBsaXN0LCByZWdhcmRsZXNzIG9mXG4rICogICAgYWxpZ25tZW50LlxuICAqXG4tICogLSBPdGhlcndpc2Ugd2Ugd2lsbCBzd2l0Y2ggdG8gZXhjbHVzaXZlIGlfcndzZW0gbG9jay5cbisgKiAzLiBPdGhlcndpc2UsIGZvciBhbGlnbmVkIG5vbi1leHRlbmRpbmcgd3JpdGVzLCBzaGFyZWQgbG9jayBpcyBhbHdheXNcbisgKiAgICBzdWZmaWNpZW50IHJlZ2FyZGxlc3Mgb2YgZXh0ZW50IHN0YXRlICh3cml0dGVuLCB1bndyaXR0ZW4sIG9yIGhvbGUpLlxuKyAqICAgIHRydW5jYXRlL3B1bmNoX2hvbGUgY2Fubm90IHJ1biB3aGlsZSB3ZSBob2xkIHRoZSBzaGFyZWQgaV9yd3NlbVxuKyAqICAgICh0aGV5IG5lZWQgaXQgZXhjbHVzaXZlbHkpOyBhZnRlciB3ZSByZWxlYXNlIGl0LCBpbm9kZV9kaW9fYmVnaW4oKVxuKyAqICAgIGtlZXBzIHRoZWlyIGlub2RlX2Rpb193YWl0KCkgYmxvY2tlZCB1bnRpbCBpbi1mbGlnaHQgYmlvcyBjb21wbGV0ZS5cbisgKiAgICBpX2RhdGFfc2VtIHNlcmlhbGl6ZXMgY29uY3VycmVudCBleHRlbnQgdHJlZSBtb2RpZmljYXRpb25zLlxuKyAqXG4rICogNC4gT3RoZXJ3aXNlLCB0aGUgd3JpdGUgaXMgdW5hbGlnbmVkIGFuZCBub24tZXh0ZW5kaW5nLiBTaGFyZWQgbG9jayBpc1xuKyAqICAgIHNhZmUgdW5sZXNzIHRoZSBESU8gbGF5ZXIgbmVlZHMgdG8gcGVyZm9ybSBwYXJ0aWFsIGJsb2NrIHplcm9pbmcgLS1cbisgKiAgICBpLmUuIHRoZSBoZWFkIG9yIHRhaWwgcGFydGlhbCBibG9jayBzaXRzIG9uIGEgaG9sZSBvciB1bndyaXR0ZW5cbisgKiAgICBleHRlbnQuIEluIHRoYXQgY2FzZSB1cGdyYWRlIHRvIHRoZSBleGNsdXNpdmUgbG9jayBhbmQgZHJhaW5cbisgKiAgICBpbi1mbGlnaHQgRElPIHRvIGF2b2lkIHJhY2VzIHdpdGggY29uY3VycmVudCBwYXJ0aWFsIGJsb2NrIHplcm9pbmcuXG4gICovXG4gc3RhdGljIHNzaXplX3QgZXh0NF9kaW9fd3JpdGVfY2hlY2tzKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tLFxuIFx0XHRcdFx0ICAgICBib29sICppbG9ja19zaGFyZWQsIGJvb2wgKmV4dGVuZCxcbkBAIC00NDgsNyArNTAxLDcgQEAgc3RhdGljIHNzaXplX3QgZXh0NF9kaW9fd3JpdGVfY2hlY2tzKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tLFxuIFx0bG9mZl90IG9mZnNldDtcbiBcdHNpemVfdCBjb3VudDtcbiBcdHNzaXplX3QgcmV0O1xuLVx0Ym9vbCBvdmVyd3JpdGUsIHVuYWxpZ25lZF9pbywgdW53cml0dGVuO1xuK1x0Ym9vbCBuZWVkc196ZXJvaW5nID0gZmFsc2U7XG4gXG4gcmVzdGFydDpcbiBcdHJldCA9IGV4dDRfZ2VuZXJpY193cml0ZV9jaGVja3MoaW9jYiwgZnJvbSk7XG5AQCAtNDU4LDI0ICs1MTEsMjMgQEAgc3RhdGljIHNzaXplX3QgZXh0NF9kaW9fd3JpdGVfY2hlY2tzKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tLFxuIFx0b2Zmc2V0ID0gaW9jYi1cdTAwM2VraV9wb3M7XG4gXHRjb3VudCA9IHJldDtcbiBcbi1cdHVuYWxpZ25lZF9pbyA9IGV4dDRfdW5hbGlnbmVkX2lvKGlub2RlLCBmcm9tLCBvZmZzZXQpO1xuIFx0KmV4dGVuZCA9IGV4dDRfZXh0ZW5kaW5nX2lvKGlub2RlLCBvZmZzZXQsIGNvdW50KTtcbi1cdG92ZXJ3cml0ZSA9IGV4dDRfb3ZlcndyaXRlX2lvKGlub2RlLCBvZmZzZXQsIGNvdW50LCBcdTAwMjZ1bndyaXR0ZW4pO1xuIFxuIFx0Lypcbi1cdCAqIERldGVybWluZSB3aGV0aGVyIHdlIG5lZWQgdG8gdXBncmFkZSB0byBhbiBleGNsdXNpdmUgbG9jay4gVGhpcyBpc1xuLVx0ICogcmVxdWlyZWQgdG8gY2hhbmdlIHNlY3VyaXR5IGluZm8gaW4gZmlsZV9tb2RpZmllZCgpLCBmb3IgZXh0ZW5kaW5nXG4tXHQgKiBJL08sIGFueSBmb3JtIG9mIG5vbi1vdmVyd3JpdGUgSS9PLCBhbmQgdW5hbGlnbmVkIEkvTyB0byB1bndyaXR0ZW5cbi1cdCAqIGV4dGVudHMgKGFzIHBhcnRpYWwgYmxvY2sgemVyb2luZyBtYXkgYmUgcmVxdWlyZWQpLlxuK1x0ICogRm9yIHVuYWxpZ25lZCB3cml0ZXMsIGNoZWNrIHdoZXRoZXIgcGFydGlhbCBibG9jayB6ZXJvaW5nIHdpbGwgYmVcbitcdCAqIG5lZWRlZC4gSWYgc28sIGV4Y2x1c2l2ZSBsb2NrIGlzIHJlcXVpcmVkIHRvIHNlcmlhbGl6ZSBhZ2FpbnN0XG4rXHQgKiBjb25jdXJyZW50IERJTyB0aGF0IGNvdWxkIHJhY2Ugd2l0aCB0aGUgemVyb2luZy5cbiBcdCAqXG4tXHQgKiBOb3RlIHRoYXQgdW5hbGlnbmVkIHdyaXRlcyBhcmUgYWxsb3dlZCB1bmRlciBzaGFyZWQgbG9jayBzbyBsb25nIGFzXG4tXHQgKiB0aGV5IGFyZSBwdXJlIG92ZXJ3cml0ZXMuIE90aGVyd2lzZSwgY29uY3VycmVudCB1bmFsaWduZWQgd3JpdGVzIHJpc2tcbi1cdCAqIGRhdGEgY29ycnVwdGlvbiBkdWUgdG8gcGFydGlhbCBibG9jayB6ZXJvaW5nIGluIHRoZSBkaW8gbGF5ZXIsIGFuZCBzb1xuLVx0ICogdGhlIEkvTyBtdXN0IG9jY3VyIGV4Y2x1c2l2ZWx5LlxuK1x0ICogRm9yIGFsaWduZWQgd3JpdGVzIHdlIHNraXAgdGhpcyBjaGVjayBlbnRpcmVseSBzaW5jZSBhbGxvY2F0aW9uXG4rXHQgKiB1bmRlciBzaGFyZWQgbG9jayBpcyBzYWZlLlxuIFx0ICovXG4rXHRpZiAoZXh0NF91bmFsaWduZWRfaW8oaW5vZGUsIGZyb20sIG9mZnNldCkpXG4rXHRcdG5lZWRzX3plcm9pbmcgPSBleHQ0X2Rpb19uZWVkc196ZXJvaW5nKGlub2RlLCBvZmZzZXQsIGNvdW50LFxuK1x0XHRcdFx0XHRcdGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2IElPQ0JfTk9XQUlUKTtcbitcbitcdC8qIERldGVybWluZSB3aGV0aGVyIHdlIG5lZWQgdG8gdXBncmFkZSB0byBhbiBleGNsdXNpdmUgbG9jay4gKi9cbiBcdGlmICgqaWxvY2tfc2hhcmVkIFx1MDAyNlx1MDAyNlxuLVx0ICAgICgoIUlTX05PU0VDKGlub2RlKSB8fCAqZXh0ZW5kIHx8ICFvdmVyd3JpdGUgfHxcbi1cdCAgICAgKHVuYWxpZ25lZF9pbyBcdTAwMjZcdTAwMjYgdW53cml0dGVuKSkpKSB7XG4rXHQgICAgKCFJU19OT1NFQyhpbm9kZSkgfHwgKmV4dGVuZCB8fCBuZWVkc196ZXJvaW5nKSkge1xuIFx0XHRpZiAoaW9jYi1cdTAwM2VraV9mbGFncyBcdTAwMjYgSU9DQl9OT1dBSVQpIHtcbiBcdFx0XHRyZXQgPSAtRUFHQUlOO1xuIFx0XHRcdGdvdG8gb3V0O1xuQEAgLTQ4OSwyMSArNTQxLDI4IEBAIHN0YXRpYyBzc2l6ZV90IGV4dDRfZGlvX3dyaXRlX2NoZWNrcyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSxcbiBcdC8qXG4gXHQgKiBOb3cgdGhhdCBsb2NraW5nIGlzIHNldHRsZWQsIGRldGVybWluZSBkaW8gZmxhZ3MgYW5kIGV4Y2x1c2l2aXR5XG4gXHQgKiByZXF1aXJlbWVudHMuIFdlIGRvbid0IHVzZSBESU9fT1ZFUldSSVRFX09OTFkgYmVjYXVzZSB3ZSBlbmZvcmNlXG4tXHQgKiBiZWhhdmlvciBhbHJlYWR5LiBUaGUgaW5vZGUgbG9jayBpcyBhbHJlYWR5IGhlbGQgZXhjbHVzaXZlIGlmIHRoZVxuLVx0ICogd3JpdGUgaXMgbm9uLW92ZXJ3cml0ZSBvciBleHRlbmRpbmcsIHNvIGRyYWluIGFsbCBvdXRzdGFuZGluZyBkaW8gYW5kXG4tXHQgKiBzZXQgdGhlIGZvcmNlIHdhaXQgZGlvIGZsYWcuXG4rXHQgKiBiZWhhdmlvciBhbHJlYWR5LiBXaGVuIGhvbGRpbmcgdGhlIGV4Y2x1c2l2ZSBsb2NrIGZvciBhIHdyaXRlIHRoYXRcbitcdCAqIG5lZWRzIHBhcnRpYWwgYmxvY2sgemVyb2luZyBvciBpcyBleHRlbmRpbmcgdGhlIGZpbGUsIHdlIG11c3Qgd2FpdFxuK1x0ICogZm9yIHRoZSBJL08gdG8gY29tcGxldGUgc3luY2hyb25vdXNseTpcbitcdCAqXG4rXHQgKiAgLSBuZWVkc196ZXJvaW5nOiBkcmFpbiBpbi1mbGlnaHQgRElPIHdob3NlIGVuZF9pbyBjb3VsZCByYWNlIHdpdGhcbitcdCAqICAgIG91ciBwYXJ0aWFsIGJsb2NrIHplcm9pbmcsIGFuZCBmb3JjZSBzeW5jaHJvbm91cyBjb21wbGV0aW9uIHNvIHdlXG4rXHQgKiAgICBkb24ndCBsZWF2ZSBpbi1mbGlnaHQgemVyb2luZyBiaW9zIGZvciB0aGUgbmV4dCB3cml0ZXIgdG8gZHJhaW4uXG4rXHQgKlxuK1x0ICogIC0gZXh0ZW5kOiB0aGUgY2FsbGVyIG11c3QgdXBkYXRlIGlfZGlza3NpemUgYWZ0ZXIgSS9PIGNvbXBsZXRpb24sXG4rXHQgKiAgICB3aGljaCByZXF1aXJlcyB0aGUgZGF0YSB0byBiZSBvbiBkaXNrIGZpcnN0LlxuIFx0ICovXG4tXHRpZiAoISppbG9ja19zaGFyZWQgXHUwMDI2XHUwMDI2ICh1bmFsaWduZWRfaW8gfHwgKmV4dGVuZCkpIHtcbitcdGlmICghKmlsb2NrX3NoYXJlZCBcdTAwMjZcdTAwMjYgKG5lZWRzX3plcm9pbmcgfHwgKmV4dGVuZCkpIHtcbiBcdFx0aWYgKGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2IElPQ0JfTk9XQUlUKSB7XG4gXHRcdFx0cmV0ID0gLUVBR0FJTjtcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0fVxuLVx0XHRpZiAodW5hbGlnbmVkX2lvIFx1MDAyNlx1MDAyNiAoIW92ZXJ3cml0ZSB8fCB1bndyaXR0ZW4pKVxuK1x0XHRpZiAobmVlZHNfemVyb2luZylcbiBcdFx0XHRpbm9kZV9kaW9fd2FpdChpbm9kZSk7XG4gXHRcdCpkaW9fZmxhZ3MgPSBJT01BUF9ESU9fRk9SQ0VfV0FJVDtcbiBcdH1cbiBcbi1cdHJldCA9IGZpbGVfbW9kaWZpZWQoZmlsZSk7XG4rXHRyZXQgPSBraW9jYl9tb2RpZmllZChpb2NiKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdGdvdG8gb3V0O1xuIFxuQEAgLTY3Miw2ICs3MzEsMTEgQEAgZXh0NF9kYXhfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbiBcdGNvdW50ID0gaW92X2l0ZXJfY291bnQoZnJvbSk7XG4gXG4gXHRpZiAob2Zmc2V0ICsgY291bnQgXHUwMDNlIEVYVDRfSShpbm9kZSktXHUwMDNlaV9kaXNrc2l6ZSkge1xuK1x0XHRpZiAoaW9jYi1cdTAwM2VraV9mbGFncyBcdTAwMjYgSU9DQl9OT1dBSVQpIHtcbitcdFx0XHRyZXQgPSAtRUFHQUlOO1xuK1x0XHRcdGdvdG8gb3V0O1xuK1x0XHR9XG4rXG4gXHRcdGhhbmRsZSA9IGV4dDRfam91cm5hbF9zdGFydChpbm9kZSwgRVhUNF9IVF9JTk9ERSwgMik7XG4gXHRcdGlmIChJU19FUlIoaGFuZGxlKSkge1xuIFx0XHRcdHJldCA9IFBUUl9FUlIoaGFuZGxlKTtcbmRpZmYgLS1naXQgYS9mcy9leHQ0L2lub2RlLmMgYi9mcy9leHQ0L2lub2RlLmNcbmluZGV4IGMyYzJkNmFjN2YzZDEzLi4zYzA1MDk0NDc1ZGIxYyAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvaW5vZGUuY1xuKysrIGIvZnMvZXh0NC9pbm9kZS5jXG5AQCAtNzU5LDggKzc1OSw5IEBAIGludCBleHQ0X21hcF9ibG9ja3MoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHRCVUcoKTtcbiBcdFx0fVxuIFxuK1x0XHQvKiBTa2lwIGJsb2NraW5nIG9wZXJhdGlvbnMgYW5kIGp1bXAgdG8gZXh0ZW50IHZhbGlkYXRpb24uICovXG4gXHRcdGlmIChmbGFncyBcdTAwMjYgRVhUNF9HRVRfQkxPQ0tTX0NBQ0hFRF9OT1dBSVQpXG4tXHRcdFx0cmV0dXJuIHJldHZhbDtcbitcdFx0XHRnb3RvIGZvdW5kO1xuICNpZmRlZiBFU19BR0dSRVNTSVZFX1RFU1RcbiBcdFx0ZXh0NF9tYXBfYmxvY2tzX2VzX3JlY2hlY2soaGFuZGxlLCBpbm9kZSwgbWFwLFxuIFx0XHRcdFx0XHQgICBcdTAwMjZvcmlnX21hcCwgZmxhZ3MpO1xuQEAgLTc3Niw3ICs3NzcsNyBAQCBpbnQgZXh0NF9tYXBfYmxvY2tzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHQgKiBjYW5ub3QgZmluZCBleHRlbnQgaW4gdGhlIGNhY2hlLlxuIFx0ICovXG4gXHRpZiAoZmxhZ3MgXHUwMDI2IEVYVDRfR0VUX0JMT0NLU19DQUNIRURfTk9XQUlUKVxuLVx0XHRyZXR1cm4gMDtcbitcdFx0cmV0dXJuIC1FQUdBSU47XG4gXG4gXHQvKlxuIFx0ICogVHJ5IHRvIHNlZSBpZiB3ZSBjYW4gZ2V0IHRoZSBibG9jayB3aXRob3V0IHJlcXVlc3RpbmcgYSBuZXdcbkBAIC03OTcsNiArNzk4LDkgQEAgaW50IGV4dDRfbWFwX2Jsb2NrcyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0aWYgKChmbGFncyBcdTAwMjYgRVhUNF9HRVRfQkxPQ0tTX0NSRUFURSkgPT0gMClcbiBcdFx0cmV0dXJuIHJldHZhbDtcbiBcbitcdC8qIEVYVDRfR0VUX0JMT0NLU19DUkVBVEUgY2Fubm90IG9wZXJhdGUgaW4gTk9XQUlUIG1vZGUgKi9cbitcdFdBUk5fT05fT05DRShmbGFncyBcdTAwMjYgRVhUNF9HRVRfQkxPQ0tTX0NBQ0hFRF9OT1dBSVQpO1xuK1xuIFx0LypcbiBcdCAqIFJldHVybnMgaWYgdGhlIGJsb2NrcyBoYXZlIGFscmVhZHkgYWxsb2NhdGVkXG4gXHQgKlxuQEAgLTM2NzIsNiArMzY3Niw5IEBAIHN0YXRpYyBpbnQgZXh0NF9pb21hcF9hbGxvYyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZXh0NF9tYXBfYmxvY2tzICptYXAsXG4gXHRpbnQgcmV0LCBkaW9fY3JlZGl0cywgbV9mbGFncyA9IDAsIHJldHJpZXMgPSAwO1xuIFx0Ym9vbCBmb3JjZV9jb21taXQgPSBmYWxzZTtcbiBcbitcdGlmIChmbGFncyBcdTAwMjYgSU9NQVBfTk9XQUlUKVxuK1x0XHRyZXR1cm4gLUVBR0FJTjtcbitcbiBcdC8qXG4gXHQgKiBUcmltIHRoZSBtYXBwaW5nIHJlcXVlc3QgdG8gdGhlIG1heGltdW0gdmFsdWUgdGhhdCB3ZSBjYW4gbWFwIGF0XG4gXHQgKiBvbmNlIGZvciBkaXJlY3QgSS9PLlxuQEAgLTM3NzcsNiArMzc4NCw3IEBAIHN0YXRpYyBpbnQgZXh0NF9pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuZ3RoLFxuIFx0c3RydWN0IGV4dDRfbWFwX2Jsb2NrcyBtYXA7XG4gXHR1OCBibGtiaXRzID0gaW5vZGUtXHUwMDNlaV9ibGtiaXRzO1xuIFx0dW5zaWduZWQgaW50IG9yaWdfbWxlbjtcbitcdGludCBtYXBfZmxhZ3MgPSAwO1xuIFxuIFx0aWYgKChvZmZzZXQgXHUwMDNlXHUwMDNlIGJsa2JpdHMpIFx1MDAzZSBFWFQ0X01BWF9MT0dJQ0FMX0JMT0NLKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbkBAIC0zNzkxLDYgKzM3OTksMTIgQEAgc3RhdGljIGludCBleHQ0X2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW5ndGgsXG4gXHRtYXAubV9sZW4gPSBtaW5fdChsb2ZmX3QsIChvZmZzZXQgKyBsZW5ndGggLSAxKSBcdTAwM2VcdTAwM2UgYmxrYml0cyxcbiBcdFx0XHQgIEVYVDRfTUFYX0xPR0lDQUxfQkxPQ0spIC0gbWFwLm1fbGJsayArIDE7XG4gXHRvcmlnX21sZW4gPSBtYXAubV9sZW47XG4rXHQvKlxuK1x0ICogSW4gTk9XQUlUIGNvbnRleHQsIG9ubHkgdXNlIGNhY2hlZCBleHRlbnQgaW5mby4gSWYgZXMgY2FjaGUgbWlzc2VzLFxuK1x0ICogcmV0dXJuIC1FQUdBSU4gdG8gYXZvaWQgc2xlZXBpbmcgb24gZG93bl9yZWFkKGlfZGF0YV9zZW0pLlxuK1x0ICovXG4rXHRpZiAoZmxhZ3MgXHUwMDI2IElPTUFQX05PV0FJVClcbitcdFx0bWFwX2ZsYWdzID0gRVhUNF9HRVRfQkxPQ0tTX0NBQ0hFRF9OT1dBSVQ7XG4gXG4gXHRpZiAoZmxhZ3MgXHUwMDI2IElPTUFQX1dSSVRFKSB7XG4gXHRcdC8qXG5AQCAtMzgwMCw3ICszODE0LDcgQEAgc3RhdGljIGludCBleHQ0X2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW5ndGgsXG4gXHRcdCAqIGVzcGVjaWFsbHkgaW4gbXVsdGktdGhyZWFkZWQgb3ZlcndyaXRlIHJlcXVlc3RzLlxuIFx0XHQgKi9cbiBcdFx0aWYgKG9mZnNldCArIGxlbmd0aCBcdTAwM2M9IGlfc2l6ZV9yZWFkKGlub2RlKSkge1xuLVx0XHRcdHJldCA9IGV4dDRfbWFwX2Jsb2NrcyhOVUxMLCBpbm9kZSwgXHUwMDI2bWFwLCAwKTtcbitcdFx0XHRyZXQgPSBleHQ0X21hcF9ibG9ja3MoTlVMTCwgaW5vZGUsIFx1MDAyNm1hcCwgbWFwX2ZsYWdzKTtcbiBcdFx0XHQvKlxuIFx0XHRcdCAqIEZvciBEQVggd2UgY29udmVydCBleHRlbnRzIHRvIGluaXRpYWxpemVkIG9uZXMgYmVmb3JlXG4gXHRcdFx0ICogY29weWluZyB0aGUgZGF0YSwgb3RoZXJ3aXNlIHdlIGRvIGl0IGFmdGVyIEkvTyBzb1xuQEAgLTM4MjEsNyArMzgzNSw3IEBAIHN0YXRpYyBpbnQgZXh0NF9pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuZ3RoLFxuIFx0XHR9XG4gXHRcdHJldCA9IGV4dDRfaW9tYXBfYWxsb2MoaW5vZGUsIFx1MDAyNm1hcCwgZmxhZ3MpO1xuIFx0fSBlbHNlIHtcbi1cdFx0cmV0ID0gZXh0NF9tYXBfYmxvY2tzKE5VTEwsIGlub2RlLCBcdTAwMjZtYXAsIDApO1xuK1x0XHRyZXQgPSBleHQ0X21hcF9ibG9ja3MoTlVMTCwgaW5vZGUsIFx1MDAyNm1hcCwgbWFwX2ZsYWdzKTtcbiBcdH1cbiBcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwOTowODoxNS40NTU1NTExMjNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3OTk0OTU2NDA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRGlyZWN0IEkvTyAoRElPKSBDaGFuZ2VzIGluIGV4dDQqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGFmZmVjdGluZyBgZnMvZXh0NC9maWxlLmNgIGFuZCBgZnMvZXh0NC9pbm9kZS5jYC4gSXQncyBhbGwgYWJvdXQgRElPLCBwYXJ0aWN1bGFybHkgZGVhbGluZyB3aXRoIHVuYWxpZ25lZCB3cml0ZXMgYW5kIHRoZSBhc3NvY2lhdGVkIGxvY2tpbmcgbWVjaGFuaXNtcyB3aXRoaW4gZXh0NC4gSW50ZXJlc3RpbmcuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgYXBwZWFycyB0byBiZSBjZW50ZXJlZCBhcm91bmQgYGV4dDRfZGlvX25lZWRzX3plcm9pbmdgLCB3aGljaCBzZWVtcyB0byBiZSByZXBsYWNpbmcgYGV4dDRfb3ZlcndyaXRlX2lvYC4gSXQgYWxzbyBpbXBhY3RzIGBleHQ0X2Rpb193cml0ZV9jaGVja3NgIGFuZCBpbnRyb2R1Y2VzIGNoYW5nZXMgdG8gbG9ja2luZy4gUmVwbGFjaW5nIGBmaWxlX21vZGlmaWVkYCB3aXRoIGBraW9jYl9tb2RpZmllZGAgaXMgYSBnb29kIHJlZmluZW1lbnQuIEFuZCB0aGVyZSdzIHRoaXMgYGlub2RlX2Rpb193YWl0KGlub2RlKWAgYWRkaXRpb24gaW4gYGV4dDRfYnVmZmVyZWRfd3JpdGVfaXRlcmAsIHJpZ2h0LiBJIGFtIHNlZWluZyBtb2RpZmljYXRpb25zIHRvIGBleHQ0X2RheF93cml0ZV9pdGVyYCBmb3IgYElPQ0JfTk9XQUlUYCwgd2hpY2ggaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCBtZXJpdHMgZXhhbWluYXRpb24sIGFsb25nIHdpdGggdXBkYXRlcyB0byBgZXh0NF9tYXBfYmxvY2tzYCB0byBiZXR0ZXIgaGFuZGxlIGBFWFQ0X0dFVF9CTE9DS1NfQ0FDSEVEX05PV0FJVGAuIEZpbmFsbHksIGBleHQ0X2lvbWFwX2FsbG9jYCBhbmQgYGV4dDRfaW9tYXBfYmVnaW5gIGFyZSB1cGRhdGVkIGZvciBgSU9NQVBfTk9XQUlUYC5cblxuVGhpcyBpcyBhbGwgZnVuY3Rpb25hbCBsb2dpYywgdmVyeSBjb3JlIHRvIGV4dDQuIFdlIGRlZmluaXRlbHkgbmVlZCB0byBmdXp6IHRoaXMgYXJlYS4gVGhlc2Ugc29ydHMgb2YgY2hhbmdlcyBhcmUgZ29sZCBtaW5lcyBmb3IgdW5jb3ZlcmluZyB0cmlja3kgY29uY3VycmVuY3kgYnVncyBvciBzdWJ0bGUgSS9PIGVycm9ycy5cblxuTm93LCBsZXQncyB6ZXJvIGluIG9uIHRoZSBrZXkgZnVuY3Rpb25zIG1vZGlmaWVkLiBJdCBsb29rcyBsaWtlIGl0IGlzOlxuXG4qICAgYGV4dDRfZGlvX25lZWRzX3plcm9pbmdgIChuZXcpXG4qICAgYGV4dDRfZGlvX3dyaXRlX2NoZWNrc2BcbiogICBgZXh0NF9idWZmZXJlZF93cml0ZV9pdGVyYFxuKiAgIGBleHQ0X2RheF93cml0ZV9pdGVyYFxuKiAgIGBleHQ0X21hcF9ibG9ja3NgXG4qICAgYGV4dDRfaW9tYXBfYWxsb2NgXG4qICAgYGV4dDRfaW9tYXBfYmVnaW5gXG5cbkFscmlnaHQsIGxldCdzIHNlZSwgaXQgbG9va3MgbGlrZSBgZXh0NF9kaW9fbmVlZHNfemVyb2luZ2AsIGBleHQ0X2Rpb193cml0ZV9jaGVja3NgLCBgZXh0NF9idWZmZXJlZF93cml0ZV9pdGVyYCwgYGV4dDRfZGF4X3dyaXRlX2l0ZXJgLCBgZXh0NF9pb21hcF9hbGxvY2AsIGFuZCBgZXh0NF9pb21hcF9iZWdpbmAgYXJlIHN0YXRpYyBhbmQgaW50ZXJuYWwgdG8gZXh0NC4gSG93ZXZlciwgYGV4dDRfbWFwX2Jsb2Nrc2AgaXMgZXhwb3J0ZWQsIG1lYW5pbmcgaXQncyBhY2Nlc3NpYmxlIGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbC4gR29vZCB0byBrbm93IGFzIGl0J3Mgb2Z0ZW4gYW4gZW50cnkgcG9pbnQuXG5cbk9rYXksIHdhaXQgYSBzZWNvbmQuIGBleHQ0X2ZpbGVfd3JpdGVfaXRlcmAgY2FsbHMgZWl0aGVyIGBleHQ0X2Rpb193cml0ZV9pdGVyYCwgYGV4dDRfYnVmZmVyZWRfd3JpdGVfaXRlcmAsIG9yIGBleHQ0X2RheF93cml0ZV9pdGVyYC4gSSBuZWVkIHRvIGNoZWNrIGBmcy9leHQ0L2ZpbGUuY2AgdG8gcGlucG9pbnQgdGhlIGFjdHVhbCBlbnRyeSBwb2ludHMsIGFuZCB2ZXJpZnkgaG93IHRob3NlIERJTyBpbXBsZW1lbnRhdGlvbnMgYXJlIHV0aWxpemVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTY3LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTM2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDk6MDg6MjMuNDUwNTA5OTI4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNDAzMzkxOTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXh0NF9kaW9fd3JpdGVfY2hlY2tzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvZmlsZS5jPTQ2Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGlvbWFwX2Rpb19vcHMgZXh0NF9kaW9fd3JpdGVfb3BzID0ge1xcbi0tXFxuZnMvZXh0NC9maWxlLmMtNDk0LSAqL1xcbmZzL2V4dDQvZmlsZS5jOjQ5NTpzdGF0aWMgc3NpemVfdCBleHQ0X2Rpb193cml0ZV9jaGVja3Moc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXFxuZnMvZXh0NC9maWxlLmMtNDk2LVxcdFxcdFxcdFxcdCAgICAgYm9vbCAqaWxvY2tfc2hhcmVkLCBib29sICpleHRlbmQsXFxuLS1cXG5mcy9leHQ0L2ZpbGUuYz01Nzg9c3RhdGljIHNzaXplX3QgZXh0NF9kaW9fd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcXG4tLVxcbmZzL2V4dDQvZmlsZS5jLTU5MC1cXHQgKiBRdWljayBjaGVjayBoZXJlIHdpdGhvdXQgYW55IGlfcndzZW0gbG9jayB0byBzZWUgaWYgaXQgaXMgZXh0ZW5kaW5nXFxuZnMvZXh0NC9maWxlLmM6NTkxOlxcdCAqIElPLiBBIG1vcmUgcmVsaWFibGUgY2hlY2sgaXMgZG9uZSBpbiBleHQ0X2Rpb193cml0ZV9jaGVja3MoKSB3aXRoXFxuZnMvZXh0NC9maWxlLmMtNTkyLVxcdCAqIHByb3BlciBsb2NraW5nIGluIHBsYWNlLlxcbi0tXFxuZnMvZXh0NC9maWxlLmMtNjI5LVxcbmZzL2V4dDQvZmlsZS5jOjYzMDpcXHRyZXQgPSBleHQ0X2Rpb193cml0ZV9jaGVja3MoaW9jYiwgZnJvbSwgXFx1MDAyNmlsb2NrX3NoYXJlZCwgXFx1MDAyNmV4dGVuZCxcXG5mcy9leHQ0L2ZpbGUuYy02MzEtXFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZkaW9fZmxhZ3MpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwOTowODoyNy43OTA4NTk4MTlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTY0MjcwMjQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBleHQ0X2ZpbGVfd3JpdGVfaXRlcmAqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIGBleHQ0X2ZpbGVfd3JpdGVfaXRlcmAuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgY29yZSB3cml0ZSBwYXRoIGZvciBleHQ0LiBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGRhdGEgZmxvdyDigJMgd2hlcmUgaXQgc3RhcnRzLCBob3cgaXQgaGFuZGxlcyB0aGUgSU8gdmVjdG9yLCB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgYmxvY2sgYWxsb2NhdG9yLCB0aGUgam91cm5hbCwgYW5kIHRoZSBkaXJ0eWluZyBvZiBpbm9kZXMgYW5kIGJsb2NrIGdyb3Vwcy4gSSdtIGFsc28gY3VyaW91cyBhYm91dCB0aGUgbG9ja2luZyBzY2hlbWU7IEkgYXNzdW1lIHRoZXJlJ3MgYSBnb29kIGFtb3VudCBvZiBjb25jdXJyZW5jeSBjb250cm9sIGludm9sdmVkLCBnaXZlbiB0aGUgcG90ZW50aWFsIGZvciBtdWx0aXBsZSB3cml0ZXJzLiBJIG5lZWQgdG8ga2VlcCB0aGUgc3BlY2lmaWNzIG9mIHRoZSBqb3VybmFsaW5nIGltcGxlbWVudGF0aW9uIGluIG1pbmQgLSB0aGUgbnVhbmNlcyBvZiBtZXRhZGF0YSB1cGRhdGVzIHZlcnN1cyBkYXRhIHdyaXRlcy4gSSB3aWxsIGZvY3VzIG9uIHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBJL08gdmVjdG9ycywgYW5kIHRoZSB1bmRlcmx5aW5nIGJsb2NrcyB0aGF0IGFyZSBiZWluZyB3cml0dGVuIHRvIGRpc2sgLSBob3cgdGhleSB3aWxsIGJlIGRlYWx0IHdpdGggaW4gdGhlIGV4dGVudCB0cmVlLiBJIGFsc28gbmVlZCB0byBiZSBhd2FyZSBvZiBob3cgZGlyZWN0IEkvTyBhbmQgYnVmZmVyZWQgSS9PIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGlzIGZ1bmN0aW9uOyBJJ2xsIGV4cGVjdCB0byBzZWUgYnJhbmNoaW5nIGJhc2VkIG9uIHRoZSBmbGFncy4gQW5kLCBvZiBjb3Vyc2UsIEknbGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZXJyb3IgaGFuZGxpbmcgLSB3aGF0J3MgdGhlIGV4cGVjdGVkIGJlaGF2aW9yIHVuZGVyIHZhcmlvdXMgZmFpbHVyZSBzY2VuYXJpb3MsIGFuZCBob3cgYXJlIGVycm9ycyBwcm9wYWdhdGVkIGJhY2sgdXAgdGhlIHN0YWNrLiBJdOKAmXMgYWxzbyB3b3J0aCBjb25zaWRlcmluZyBob3cgd3JpdGViYWNrIGFuZCBwYWdlIGZhdWx0IGhhbmRsaW5nIGlzIGludGVncmF0ZWQsIGFzIHRoYXQgaGFzIGltcGxpY2F0aW9ucyBmb3IgdGhlIG92ZXJhbGwgcGVyZm9ybWFuY2UgcHJvZmlsZS4gSXQncyB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzY5NiwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA5OjA4OjMxLjM1NTEzMjQ0NVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTE3OTkyODM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV4dDRfZmlsZV93cml0ZV9pdGVyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvZmlsZS5jPTc2OT1zdGF0aWMgc3NpemVfdFxcbmZzL2V4dDQvZmlsZS5jOjc3MDpleHQ0X2ZpbGVfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcXG5mcy9leHQ0L2ZpbGUuYy03NzEte1xcbi0tXFxuZnMvZXh0NC9maWxlLmM9MTAzOD1jb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGV4dDRfZmlsZV9vcGVyYXRpb25zID0ge1xcbi0tXFxuZnMvZXh0NC9maWxlLmMtMTA0MC1cXHQucmVhZF9pdGVyXFx0PSBleHQ0X2ZpbGVfcmVhZF9pdGVyLFxcbmZzL2V4dDQvZmlsZS5jOjEwNDE6XFx0LndyaXRlX2l0ZXJcXHQ9IGV4dDRfZmlsZV93cml0ZV9pdGVyLFxcbmZzL2V4dDQvZmlsZS5jLTEwNDItXFx0LmlvcG9sbFxcdFxcdD0gaW9jYl9iaW9faW9wb2xsLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwOTowODozNS44NzMxMjk1MTJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDQ0OTc1MDU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUHJvcG9zZWQgRXh0NCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBteSBtaW5kIGhvbmVzIGluIG9uIGBleHQ0X2ZpbGVfd3JpdGVfaXRlcmAuIFRoYXQncyB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCwgdGhlIGZpcnN0IHBsYWNlIEknZCB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdy4gQnV0IHdhaXQsIGl0J3Mgbm90IGp1c3QgdGhhdC4gVGhlIHBhdGNoIHRvdWNoZXMgc2V2ZXJhbCBvdGhlciBrZXkgYXJlYXMuIEl0J3MgbW9kaWZ5aW5nIGBleHQ0X2Rpb193cml0ZV9pdGVyYCwgYGV4dDRfYnVmZmVyZWRfd3JpdGVfaXRlcmAsIGFuZCBgZXh0NF9kYXhfd3JpdGVfaXRlcmAg4oCTIHRob3NlIGFyZSBhbGwgY3J1Y2lhbCBmb3IgZGlyZWN0IEkvTywgYnVmZmVyZWQgSS9PLCBhbmQgREFYIHdyaXRlcywgcmVzcGVjdGl2ZWx5LlxuXG5Ib2xkIG9uLCBJIHNlZSBpdCdzIGFsc28gY2hhbmdpbmcgYGV4dDRfZGlvX3dyaXRlX2NoZWNrc2AsIHdoaWNoIGlzICpjYWxsZWQqIGJ5IGBleHQ0X2Rpb193cml0ZV9pdGVyYC4gSW50ZXJlc3RpbmcuIFRoYXTigJlzIHByb2JhYmx5IHRoZSBpbXBvcnRhbnQgYml0IG9mIGRpcmVjdCBJL08uXG5cbk9rYXksIGxldCdzIG1ha2UgYSBtZW50YWwgbGlzdCBoZXJlIG9mIHRoZSBrZXkgZnVuY3Rpb25zIHRoaXMgcGF0Y2ggaXMgcGxheWluZyB3aXRoLCB0byBoZWxwIG1lIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiB0aGUgcGF0Y2guXG5cbiogICBgZXh0NF9maWxlX3dyaXRlX2l0ZXJgICh0aGUgYmlnIGthaHVuYSlcbiogICBgZXh0NF9kaW9fd3JpdGVfaXRlcmAgKERpcmVjdCBJL08pXG4qICAgYGV4dDRfYnVmZmVyZWRfd3JpdGVfaXRlcmAgKEJ1ZmZlcmVkIEkvTylcbiogICBgZXh0NF9kYXhfd3JpdGVfaXRlcmAgKERBWC1zcGVjaWZpYyB3cml0ZXMpXG4qICAgYGV4dDRfbWFwX2Jsb2Nrc2AgKEJsb2NrIG1hcHBpbmcsIHZlcnkgaW1wb3J0YW50LCBhbmQgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMpXG4qICAgYGV4dDRfaW9tYXBfYmVnaW5gIChJL08gbWFwIC0gYmVnaW5uaW5nKS5cblxuSG1tLCBub3cgd2hpY2ggb2YgdGhlc2UgaXMgdGhlICpiZXN0KiB0byBmb2N1cyBvbj8gSSB0aGluayBgZXh0NF9maWxlX3dyaXRlX2l0ZXJgIGFuZCBgZXh0NF9kaW9fd3JpdGVfaXRlcmAgc2VlbSBsaWtlIGdvb2Qgb3B0aW9ucyB0byBzdGFydCB3aXRoLiBMZXQncyBzZWUgaWYgYGV4dDRfZGlvX3dyaXRlX2l0ZXJgIGlzIHN0YXRpYy4gSXQgaXMsIHNvIHRoYXQgaXMgYSBnb29kIHNpZ24uIFdlIGNhbiBkZWZpbml0ZWx5IHVzZSBzdGF0aWMgZnVuY3Rpb25zIGluIHN5emthbGxlci4gQnV0IG1heWJlIGBleHQ0X2ZpbGVfd3JpdGVfaXRlcmAgaXMgdGhlIGJldHRlciBjaG9pY2UuIEknbGwgbmVlZCB0byB0aGluayBhYm91dCB3aGljaCBpcyBiZXR0ZXIuXG5cbkknbSBhIGxpdHRsZSB3YXJ5IG9mIGBleHQ0X21hcF9ibG9ja3NgLiBJdCdzIGluY3JlZGlibHkgY29tbW9uLCBhbmQgdGhpcyBwYXRjaCBtaWdodCBiZSBhZmZlY3RpbmcgaXRzIGNvcmUgZnVuY3Rpb25hbGl0eS4gSXQgY291bGQgYmUgdG9vIFwiaG90XCIgdG8gYmUgYSBnb29kIGZvY3VzLCBvciBpdCBjb3VsZCBiZSAqdGhlKiBjcnVjaWFsIHBhcnQgb2YgdGhpcyBwYXRjaC4gQmV0dGVyIHRvIGludmVzdGlnYXRlIHRoYXQgY2FyZWZ1bGx5LlxuXG5JIHNob3VsZCBhbHNvIGNoZWNrIG91dCBgZXh0NF9pb21hcF9iZWdpbmAgdG8gdW5kZXJzdGFuZCB0aGUgYmlnZ2VyIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyNDAsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDk6MDg6NDIuOTE4MTA2ODk3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3NTkxNTE0MTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXh0NF9pb21hcF9iZWdpblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L2lub2RlLmM9MzY3Mj1zdGF0aWMgaW50IGV4dDRfaW9tYXBfYWxsb2Moc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dDRfbWFwX2Jsb2NrcyAqbWFwLFxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTM3NzktXFxuZnMvZXh0NC9pbm9kZS5jOjM3ODA6c3RhdGljIGludCBleHQ0X2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW5ndGgsXFxuZnMvZXh0NC9pbm9kZS5jLTM3ODEtXFx0XFx0dW5zaWduZWQgZmxhZ3MsIHN0cnVjdCBpb21hcCAqaW9tYXAsIHN0cnVjdCBpb21hcCAqc3JjbWFwKVxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jPTM4NjY9Y29uc3Qgc3RydWN0IGlvbWFwX29wcyBleHQ0X2lvbWFwX29wcyA9IHtcXG5mcy9leHQ0L2lub2RlLmM6Mzg2NzpcXHQuaW9tYXBfYmVnaW5cXHRcXHQ9IGV4dDRfaW9tYXBfYmVnaW4sXFxuZnMvZXh0NC9pbm9kZS5jLTM4NjgtfTtcXG5mcy9leHQ0L2lub2RlLmMtMzg2OS1cXG5mcy9leHQ0L2lub2RlLmM6Mzg3MDpzdGF0aWMgaW50IGV4dDRfaW9tYXBfYmVnaW5fcmVwb3J0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsXFxuZnMvZXh0NC9pbm9kZS5jLTM4NzEtXFx0XFx0XFx0XFx0ICAgbG9mZl90IGxlbmd0aCwgdW5zaWduZWQgaW50IGZsYWdzLFxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jPTM5MjE9Y29uc3Qgc3RydWN0IGlvbWFwX29wcyBleHQ0X2lvbWFwX3JlcG9ydF9vcHMgPSB7XFxuZnMvZXh0NC9pbm9kZS5jOjM5MjI6XFx0LmlvbWFwX2JlZ2luID0gZXh0NF9pb21hcF9iZWdpbl9yZXBvcnQsXFxuZnMvZXh0NC9pbm9kZS5jLTM5MjMtfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDk6MDg6NDYuNjc3MjY0OTdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDE2ODEyMjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBleHQ0IHNpdHVhdGlvbiBoZXJlLiAqKkNoZWNraW5nIEVYVDQgQ29uZmlndXJhdGlvbioqXG5cbkZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSBpZiBFWFQ0IGlzIGV2ZW4gZW5hYmxlZCBieSBkZWZhdWx0LiBBaCwgeWVzLCBpdCdzIGEgY29yZSBmaWxlc3lzdGVtLiBObyBzdXJwcmlzZSB0aGVyZS4gTm93LCBpcyB0aGVyZSBhbnl0aGluZyBzcGVjaWZpYyBJIG5lZWQgdG8gd2F0Y2ggb3V0IGZvciBpbiB0aGUgY29uZmlndXJhdGlvbj8gTGV0J3Mgc2VlLi4uIGBDT05GSUdfRVhUNF9GU2AsIHRoYXQncyB0aGUgcHJpbWFyeSBmbGFnLCBJIGtuZXcgdGhhdC5cblxuT2theSwgd2hhdCBhYm91dCBEaXJlY3QgQWNjZXNzIChEQVgpIHN1cHBvcnQ/IEkgcmVtZW1iZXIgc29tZSBjb21wbGV4aXRpZXMgd2l0aCB0aGF0LiBMZXQgbWUgcXVpY2tseSBzZWUgaWYgdGhlcmUgYXJlIGFueSBEQVggc3BlY2lmaWMgZmlsZXMuIEFscmlnaHQsIEkgY2FuIHNlZSB0aGF0IGBleHQ0X2RheF93cml0ZV9pdGVyYCBoYXMgYmVlbiBtb2RpZmllZCwgd2hpY2ggbWVhbnMgaXQgaXMgbGlrZWx5IHN1cHBvcnRlZC4gT2theSwgc28gREFYIHdpbGwgcmVxdWlyZSBgQ09ORklHX0ZTX0RBWGAgdG8gYWxzbyBiZSBlbmFibGVkLiBHb3QgaXQsIG1vdmluZyBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTU2MywiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA5OjA4OjUxLjA5NDA4MjQ0OFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI5MDI1NTYwMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJleHQ0X2RheF93cml0ZV9pdGVyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvZmlsZS5jPTcwOT1zdGF0aWMgc3NpemVfdFxcbmZzL2V4dDQvZmlsZS5jOjcxMDpleHQ0X2RheF93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxcbmZzL2V4dDQvZmlsZS5jLTcxMS17XFxuLS1cXG5mcy9leHQ0L2ZpbGUuYz03NzA9ZXh0NF9maWxlX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXFxuLS1cXG5mcy9leHQ0L2ZpbGUuYy03ODAtXFx0aWYgKElTX0RBWChpbm9kZSkpXFxuZnMvZXh0NC9maWxlLmM6NzgxOlxcdFxcdHJldHVybiBleHQ0X2RheF93cml0ZV9pdGVyKGlvY2IsIGZyb20pO1xcbmZzL2V4dDQvZmlsZS5jLTc4Mi0jZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDk6MDg6NTUuMzg0MzQ2ODZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE1MDM5Mjk3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgZGlzdGlsbGVkOlxuXG4qKkNoZWNraW5nIGBDT05GSUdfRlNfREFYYCBEZXBlbmRlbmN5KipcblxuT2theSwgc28gdGhpcyBwYXRjaCB0b3VjaGVzIGBleHQ0X2RheF93cml0ZV9pdGVyYC4gSW1tZWRpYXRlbHksIHRoZSBhbGFybSBiZWxscyBhcmUgcmluZ2luZyBhYm91dCBgQ09ORklHX0ZTX0RBWGAuIEl0J3MgcHJldHR5IGxpa2VseSB0aGlzIGZ1bmN0aW9uIGlzIGd1YXJkZWQgYnkgdGhhdCBkZWZpbmUuIEkgbmVlZCB0byBjb25maXJtIHRoaXMgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIuIEJlc3QgYmV0IGlzIHRvIGp1bXAgb3ZlciB0byBgZnMvZXh0NC9maWxlLmNgIGFuZCB0YWtlIGEgbG9vayBhcm91bmQgbGluZSA3ODAuIFNlZSBpZiB0aGF0J3Mgd2hlcmUgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGhhcHBlbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDQwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDk6MDg6NTguNTM0NzQyNzk1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NjczMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9leHQ0L2ZpbGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3NzAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3NzA6XFx0ZXh0NF9maWxlX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXFxuIDc3MTpcXHR7XFxuIDc3MjpcXHRcXHRpbnQgcmV0O1xcbiA3NzM6XFx0XFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoaW9jYi1cXHUwMDNla2lfZmlscCk7XFxuIDc3NDpcXHRcXG4gNzc1OlxcdFxcdHJldCA9IGV4dDRfZW1lcmdlbmN5X3N0YXRlKGlub2RlLVxcdTAwM2VpX3NiKTtcXG4gNzc2OlxcdFxcdGlmICh1bmxpa2VseShyZXQpKVxcbiA3Nzc6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gNzc4OlxcdFxcbiA3Nzk6XFx0I2lmZGVmIENPTkZJR19GU19EQVhcXG4gNzgwOlxcdFxcdGlmIChJU19EQVgoaW5vZGUpKVxcbiA3ODE6XFx0XFx0XFx0cmV0dXJuIGV4dDRfZGF4X3dyaXRlX2l0ZXIoaW9jYiwgZnJvbSk7XFxuIDc4MjpcXHQjZW5kaWZcXG4gNzgzOlxcdFxcbiA3ODQ6XFx0XFx0aWYgKGlvY2ItXFx1MDAzZWtpX2ZsYWdzIFxcdTAwMjYgSU9DQl9BVE9NSUMpIHtcXG4gNzg1OlxcdFxcdFxcdHNpemVfdCBsZW4gPSBpb3ZfaXRlcl9jb3VudChmcm9tKTtcXG4gNzg2OlxcdFxcbiA3ODc6XFx0XFx0XFx0aWYgKGxlbiBcXHUwMDNjIEVYVDRfU0IoaW5vZGUtXFx1MDAzZWlfc2IpLVxcdTAwM2VzX2F3dV9taW4gfHxcXG4gNzg4OlxcdFxcdFxcdCAgICBsZW4gXFx1MDAzZSBFWFQ0X1NCKGlub2RlLVxcdTAwM2VpX3NiKS1cXHUwMDNlc19hd3VfbWF4KVxcbiA3ODk6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA5OjA4OjU4LjUzNDk5MjM5NVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4ODY4NDI3NzI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIEV4dDQgV3JpdGUgUGF0aCBUZXN0aW5nKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGVzdGluZyB0aGVzZSBleHQ0IHdyaXRlIHBhdGhzLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgYENPTkZJR19GU19EQVhgIHdvdWxkIGJlIHRoZSBrZXksIHNpbmNlIHRoZSBwcmltYXJ5IGZvY3VzIGlzIG9uIGBleHQ0X2RheF93cml0ZV9pdGVyYC4gQnV0IGhvbGQgb24uLi4gdGhpcyBwYXRjaCBhbHNvIHRvdWNoZXMgYGV4dDRfZGlvX3dyaXRlX2NoZWNrc2AgYW5kIGBleHQ0X2J1ZmZlcmVkX3dyaXRlX2l0ZXJgLCB3aGljaCBhcmVuJ3QgbmVjZXNzYXJpbHkgREFYLXNwZWNpZmljLiBUaGF0IG1lYW5zIGBDT05GSUdfRVhUNF9GU2AgaXMgdGhlIHJlYWwgYmFzZWxpbmUgcmVxdWlyZW1lbnQsIGJ1dCBgRlNfREFYYCBpcyBhbHNvIHVzZWZ1bCBhbmQgZ29vZCB0byBoYXZlIGVuYWJsZWQgdG8gdGVzdCB0aGUgREFYIGNvbXBvbmVudC5cblxuSSBzaG91bGQgcHJvYmFibHkgcmV2aWV3IGhvdyB0aG9zZSBhcmUgdXNlZC4gU28gbGV0IG1lIGNoZWNrIGBleHQ0X2Rpb19uZWVkc196ZXJvaW5nYCBhbmQgYGV4dDRfZGlvX3dyaXRlX2NoZWNrc2AuIFJpZ2h0LCB0aG9zZSBhcmUgcmVsYXRlZCB0byBEaXJlY3QgSS9PLlxuXG5MZXQncyBtYWtlIGEgbGlzdCBvZiBzeW1ib2xzIEkgc2hvdWxkIGZvY3VzIG9uIGZvciB0aGlzOlxuKiAgIGBleHQ0X2Rpb193cml0ZV9pdGVyYFxuKiAgIGBleHQ0X2J1ZmZlcmVkX3dyaXRlX2l0ZXJgXG4qICAgYGV4dDRfZGF4X3dyaXRlX2l0ZXJgXG4qICAgYGV4dDRfZmlsZV93cml0ZV9pdGVyYFxuKiAgIGBleHQ0X2lvbWFwX2JlZ2luYFxuXG5Ob3csIGxldCdzIHZlcmlmeSBpZiBlYWNoIG9mIHRoZXNlIHN5bWJvbHMgaXMgc3RhdGljIG9yIGdsb2JhbC4gIE9rYXksIEkgc2VlIHRoYXQuLi5cbiogICBgZXh0NF9kaW9fd3JpdGVfaXRlcmAgaXMgc3RhdGljLlxuKiAgIGBleHQ0X2J1ZmZlcmVkX3dyaXRlX2l0ZXJgIGlzIHN0YXRpYy5cbiogICBgZXh0NF9kYXhfd3JpdGVfaXRlcmAgaXMgc3RhdGljLlxuKiAgIGBleHQ0X2ZpbGVfd3JpdGVfaXRlcmAgaXMgc3RhdGljLlxuKiAgIGBleHQ0X2lvbWFwX2JlZ2luYCBpcyBzdGF0aWMuXG4qICAgSG93ZXZlciwgYGV4dDRfbWFwX2Jsb2Nrc2AgaXMgZ2xvYmFsLlxuXG5Ob3cgdG8gbWFrZSBhIGZpbmFsIGRlY2lzaW9uLCBJJ2xsIGdvIHdpdGggdGhlIGxpc3Qgb2YgdGhlc2Ugc3ltYm9sczpcbiogICBgZXh0NF9kaW9fd3JpdGVfaXRlcmBcbiogICBgZXh0NF9idWZmZXJlZF93cml0ZV9pdGVyYFxuKiAgIGBleHQ0X2RheF93cml0ZV9pdGVyYFxuKiAgIGBleHQ0X2ZpbGVfd3JpdGVfaXRlcmBcbiogICBgZXh0NF9pb21hcF9iZWdpbmBcbiogICBgZXh0NF9tYXBfYmxvY2tzYFxuXG5Ib2xkIG9uLi4uIGFyZSB0aGVzZSBhbGwgdG9vIGNvbW1vbj8gYGV4dDRfbWFwX2Jsb2Nrc2AgaXMgcHJvYmFibHkgKnZlcnkqIGhvdCwgYW5kIHNvIGlzIGBleHQ0X2ZpbGVfd3JpdGVfaXRlcmAuIFVzaW5nIHRob3NlIG1heSBza2V3IHRoZSByZXN1bHRzIGlmIEknbSBub3QgY2FyZWZ1bC4gIGBleHQ0X2Rpb193cml0ZV9pdGVyYCBhbmQgYGV4dDRfZGF4X3dyaXRlX2l0ZXJgIHNlZW0gYmV0dGVyLCBzaW5jZSB0aGV5IGFyZSBkaXJlY3RseSByZWxhdGVkIHRvIERJTyBhbmQgREFYIHJlc3BlY3RpdmVseS4gIGBleHQ0X2J1ZmZlcmVkX3dyaXRlX2l0ZXJgIGlzIGFsc28gaW1wb3J0YW50IGZvciBidWZmZXJlZCBJTy4gU28sIGZvY3VzaW5nIG9uIHRob3NlIG1ha2VzIG1vcmUgc2Vuc2UuXG5cblNvIEkgd2lsbCBpbmNsdWRlIHRoZSBmb2xsb3dpbmc6XG4qICAgYGV4dDRfZGlvX3dyaXRlX2l0ZXJgXG4qICAgYGV4dDRfYnVmZmVyZWRfd3JpdGVfaXRlcmBcbiogICBgZXh0NF9kYXhfd3JpdGVfaXRlcmBcbiogICBgZXh0NF9pb21hcF9iZWdpbmBcblxuRmluYWxseSwgdG8gdmVyaWZ5IHRoZSBjb25maWd1cmF0aW9ucywgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0OlxuKiAgIGBFWFQ0X0ZTYCBpcyBlbmFibGVkXG4qICAgYEZTX0RBWGAgaXMgZW5hYmxlZFxuSSdsbCBkb3VibGUtY2hlY2sgdG8gbWFrZSBzdXJlIGBGU19EQVhgIGlzIGEgdmFsaWQgY29uZmlnLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDU5OCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA5OjA5OjA3LjQwMzQyMjY3MloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcxMjczMjkwMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRlNfREFYXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL0tjb25maWc9NTY9ZW5kaWYgIyBCTE9DS1xcbmZzL0tjb25maWctNTctXFxuZnMvS2NvbmZpZzo1ODpjb25maWcgRlNfREFYXFxuZnMvS2NvbmZpZy01OS1cXHRib29sIFxcXCJGaWxlIHN5c3RlbSBiYXNlZCBEaXJlY3QgQWNjZXNzIChEQVgpIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9LY29uZmlnLTg5LVxcbmZzL0tjb25maWc6OTA6Y29uZmlnIEZTX0RBWF9QTURcXG5mcy9LY29uZmlnLTkxLVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDk6MDk6MTIuMTE2MTYxNjg1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY2NTQ3MjY0ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhpcyBleHQ0IFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBjb25maXJtZWQgdGhhdCB0aGlzIGBGU19EQVhgIGNoYW5nZSBpcyB2YWxpZC4gSXQncyBmb2N1c2VkIG9uIGltcHJvdmluZyBob3cgZXh0NCBoYW5kbGVzIERpcmVjdCBJL08gYW5kIERBWCB3cml0ZXMsIHNwZWNpZmljYWxseSBhZGRyZXNzaW5nIGxvY2tpbmcgaXNzdWVzIGFuZCBpbmNvbXBsZXRlIGJsb2NrIHplcm9pbmcgd2hlbiBkZWFsaW5nIHdpdGggdW5hbGlnbmVkIERpcmVjdCBJL08gd3JpdGVzLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBleHQ0J3MgSS9PIGhhbmRsaW5nLiBUaGF0J3MgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcgYW5kIGEgZ29vZCBpbmRpY2F0b3IgZm9yIGZ1enppbmcgdGFyZ2V0cy5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHpvb20gaW4gb24gdGhlc2UgZnVuY3Rpb25zLCBiZWNhdXNlIHRoZXkgcmVwcmVzZW50IHRoZSBjb3JlIGZ1bmN0aW9uYWwgY2hhbmdlczogYGV4dDRfZGlvX3dyaXRlX2l0ZXJgLCBgZXh0NF9idWZmZXJlZF93cml0ZV9pdGVyYCwgYGV4dDRfZGF4X3dyaXRlX2l0ZXJgLCBgZXh0NF9kaW9fd3JpdGVfY2hlY2tzYCwgYGV4dDRfZGlvX25lZWRzX3plcm9pbmdgLCBhbmQgYGV4dDRfaW9tYXBfYmVnaW5gLlxuXG5BaGEsIGBleHQ0X2Rpb19uZWVkc196ZXJvaW5nYCBsb29rcyBwYXJ0aWN1bGFybHkgcHJvbWlzaW5nIHNpbmNlIGl0J3MgYSAqbmV3KiBmdW5jdGlvbi4gTmV3IGZ1bmN0aW9ucyBhcmUgb2Z0ZW4gZ29vZCBjYW5kaWRhdGVzIGZvciBmb2N1c2VkIHRlc3RpbmcuIGBleHQ0X2Rpb193cml0ZV9jaGVja3NgIGFsc28gc2VlbXMgbGlrZSBpdCdsbCBiZSBhIGtleSBwYXJ0IG9mIHRoZSBsb2dpYyB0aGF0IHdpbGwgbmVlZCB0aG9yb3VnaCBmdXp6aW5nLlxuXG5MZXQncyBxdWlja2x5IGNvbmZpcm0gdGhhdCBgZXh0NF9kaW9fbmVlZHNfemVyb2luZ2AgaXMgaW5kZWVkIHBhcnQgb2YgdGhlIHBhdGNoLiBZZXMsIGl0J3MgdGhlcmUuIFRoYXQncyBncmVhdCFcblxuQWxyaWdodCwgSSd2ZSBnb3QgbXkgbGlzdC4gSSdtIGdvaW5nIHRvIGNvbmNlbnRyYXRlIG9uIGZ1enppbmcgdGhlc2Ugc3ltYm9sczogYGV4dDRfZGlvX25lZWRzX3plcm9pbmdgLCBgZXh0NF9kaW9fd3JpdGVfY2hlY2tzYCwgYGV4dDRfZGlvX3dyaXRlX2l0ZXJgLCBgZXh0NF9idWZmZXJlZF93cml0ZV9pdGVyYCwgYGV4dDRfZGF4X3dyaXRlX2l0ZXJgLCBhbmQgYGV4dDRfaW9tYXBfYmVnaW5gLlxuXG5BbmQsIGFzIGZhciBhcyBjb25maWdzIGdvLCBgRVhUNF9GU2AgYW5kIGBGU19EQVhgIGFyZSB0aGUga2V5cyBoZXJlLiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYEVYVDRfRlNgIGlzIHRoZSBjb3JyZWN0IG5hbWUgZm9yIHRoZSBleHQ0IGZpbGVzeXN0ZW0gY29uZmlnLCBidXQgSSdtIHByZXR0eSBzdXJlIGl0IGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjAyOSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwOTowOToxOC43NzA4OTAzMzhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzODM2MDU4NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEVYVDRfRlNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvZXh0NC9LY29uZmlnOjI6Y29uZmlnIEVYVDRfRlNcXG5mcy9leHQ0L0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiVGhlIEV4dGVuZGVkIDQgKGV4dDQpIGZpbGVzeXN0ZW1cXFwiXFxuLS1cXG5mcy9leHQ0L0tjb25maWc9MzU9Y29uZmlnIEVYVDRfVVNFX0ZPUl9FWFQyXFxuLS1cXG5mcy9leHQ0L0tjb25maWctNDUtXFxuZnMvZXh0NC9LY29uZmlnOjQ2OmNvbmZpZyBFWFQ0X0ZTX1BPU0lYX0FDTFxcbmZzL2V4dDQvS2NvbmZpZy00Ny1cXHRib29sIFxcXCJFeHQ0IFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXFxcIlxcbi0tXFxuZnMvZXh0NC9LY29uZmlnLTU1LVxcbmZzL2V4dDQvS2NvbmZpZzo1Njpjb25maWcgRVhUNF9GU19TRUNVUklUWVxcbmZzL2V4dDQvS2NvbmZpZy01Ny1cXHRib29sIFxcXCJFeHQ0IFNlY3VyaXR5IExhYmVsc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDk6MDk6MjMuMTU0NTAxODg4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2ODgwNTcxODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKlZlcmlmeWluZyBFWFQ0IENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCB0aGUgY29yZSBmaWxlc3lzdGVtIGhlcmUgaXMgZGVmaW5pdGVseSBgRVhUNF9GU2AsIHRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQsIG5vIHF1ZXN0aW9uLiBOb3csIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgaWYgdGhlcmUncyBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBiZXlvbmQgdGhlIGJhc2UuIFNwZWNpZmljYWxseSwgSSdtIHdvbmRlcmluZyBhYm91dCBEaXJlY3QgQWNjZXNzLCBzbyBgRVhUNF9GU19EQVhgIGNvbWVzIHRvIG1pbmQuIEJ1dCB3YWl0LCB0aGF0IHJpbmdzIGEgYmVsbC4uLiBpc24ndCBEQVggaW4gZXh0NCB0eXBpY2FsbHkgdGllZCB0byB0aGUgYnJvYWRlciBgRlNfREFYYCBvcHRpb24/IFllcywgaXQncyBoaWdobHkgbGlrZWx5IHRoYXQgYEVYVDRfRlNfREFYYCBpcyBpbXBsaWNpdGx5IGVuYWJsZWQgaWYgYEZTX0RBWGAgaXMgc2V0LiBUbyBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkgc2hvdWxkIHJlYWxseSBjb25zdWx0IHRoZSBzb3VyY2UuIFRpbWUgdG8gZGlnIGludG8gZWl0aGVyIGBmcy9leHQ0L0tjb25maWdgIG9yIHBvc3NpYmx5IHRoZSBgZnMvZXh0NC9NYWtlZmlsZWAgdG8gY29uZmlybSB0aGUgZGVwZW5kZW5jaWVzIGFuZCBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBHb3R0YSBiZSB0aG9yb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMxMzIsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwOTowOToyNi44NDI1NjE4NzJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NTg4ODk4MjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0ZTX0RBWFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Bvd2VycGMvY29uZmlncy9nNV9kZWZjb25maWc9MjA1PUNPTkZJR19YRlNfUE9TSVhfQUNMPXlcXG5hcmNoL3Bvd2VycGMvY29uZmlncy9nNV9kZWZjb25maWc6MjA2OkNPTkZJR19GU19EQVg9eVxcbmFyY2gvcG93ZXJwYy9jb25maWdzL2c1X2RlZmNvbmZpZy0yMDctQ09ORklHX0lTTzk2NjBfRlM9eVxcbi0tXFxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjNTEyeF9kZWZjb25maWc9MTA1PUNPTkZJR19FWFQ0X0ZTPXlcXG5hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM1MTJ4X2RlZmNvbmZpZzoxMDY6Q09ORklHX0ZTX0RBWD15XFxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjNTEyeF9kZWZjb25maWctMTA3LSMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldFxcbi0tXFxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNjRfZGVmY29uZmlnPTMyMj1DT05GSUdfTklMRlMyX0ZTPW1cXG5hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2NF9kZWZjb25maWc6MzIzOkNPTkZJR19GU19EQVg9eVxcbmFyY2gvcG93ZXJwYy9jb25maWdzL3BwYzY0X2RlZmNvbmZpZy0zMjQtQ09ORklHX0FVVE9GU19GUz1tXFxuLS1cXG5hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2NGVfZGVmY29uZmlnPTE3OT1DT05GSUdfWEZTX1BPU0lYX0FDTD15XFxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNjRlX2RlZmNvbmZpZzoxODA6Q09ORklHX0ZTX0RBWD15XFxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNjRlX2RlZmNvbmZpZy0xODEtQ09ORklHX0FVVE9GU19GUz1tXFxuLS1cXG5hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2eHhfZGVmY29uZmlnPTkzMj1DT05GSUdfR0ZTMl9GUz1tXFxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNnh4X2RlZmNvbmZpZzo5MzM6Q09ORklHX0ZTX0RBWD15XFxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNnh4X2RlZmNvbmZpZy05MzQtQ09ORklHX1FVT1RBX05FVExJTktfSU5URVJGQUNFPXlcXG4tLVxcbmRyaXZlcnMvZGF4L3N1cGVyLmM9NTY9RVhQT1JUX1NZTUJPTF9HUEwoZGF4X3JlYWRfdW5sb2NrKTtcXG5kcml2ZXJzL2RheC9zdXBlci5jLTU3LVxcbmRyaXZlcnMvZGF4L3N1cGVyLmM6NTg6I2lmIGRlZmluZWQoQ09ORklHX0JMT0NLKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19GU19EQVgpXFxuZHJpdmVycy9kYXgvc3VwZXIuYy01OS0jaW5jbHVkZSBcXHUwMDNjbGludXgvYmxrZGV2LmhcXHUwMDNlXFxuLS1cXG5kcml2ZXJzL2RheC9zdXBlci5jPTExMz1FWFBPUlRfU1lNQk9MX0dQTChmc19kYXhfZ2V0X2J5X2JkZXYpO1xcbmRyaXZlcnMvZGF4L3N1cGVyLmMtMTE0LVxcbmRyaXZlcnMvZGF4L3N1cGVyLmM6MTE1OiNlbmRpZiAvKiBDT05GSUdfQkxPQ0sgXFx1MDAyNlxcdTAwMjYgQ09ORklHX0ZTX0RBWCAqL1xcbmRyaXZlcnMvZGF4L3N1cGVyLmMtMTE2LVxcbmRyaXZlcnMvZGF4L3N1cGVyLmM6MTE3OiNpZiBJU19FTkFCTEVEKENPTkZJR19GU19EQVgpXFxuZHJpdmVycy9kYXgvc3VwZXIuYy0xMTgtXFxuLS1cXG5kcml2ZXJzL2RheC9zdXBlci5jPTE4NT1FWFBPUlRfU1lNQk9MX0dQTChmc19kYXhfZ2V0KTtcXG5kcml2ZXJzL2RheC9zdXBlci5jOjE4NjojZW5kaWYgLyogQ09ORklHX0ZTX0RBWCAqL1xcbmRyaXZlcnMvZGF4L3N1cGVyLmMtMTg3LVxcbi0tXFxuZHJpdmVycy9tZC9kbS1saW5lYXIuYz0xNTM9c3RhdGljIGludCBsaW5lYXJfaXRlcmF0ZV9kZXZpY2VzKHN0cnVjdCBkbV90YXJnZXQgKnRpLFxcbi0tXFxuZHJpdmVycy9tZC9kbS1saW5lYXIuYy0xNjAtXFxuZHJpdmVycy9tZC9kbS1saW5lYXIuYzoxNjE6I2lmIElTX0VOQUJMRUQoQ09ORklHX0ZTX0RBWClcXG5kcml2ZXJzL21kL2RtLWxpbmVhci5jLTE2Mi1zdGF0aWMgc3RydWN0IGRheF9kZXZpY2UgKmxpbmVhcl9kYXhfcGdvZmYoc3RydWN0IGRtX3RhcmdldCAqdGksIHBnb2ZmX3QgKnBnb2ZmKVxcbi0tXFxuZHJpdmVycy9tZC9kbS1sb2ctd3JpdGVzLmM9ODcwPXN0YXRpYyB2b2lkIGxvZ193cml0ZXNfaW9faGludHMoc3RydWN0IGRtX3RhcmdldCAqdGksIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbWl0cylcXG4tLVxcbmRyaXZlcnMvbWQvZG0tbG9nLXdyaXRlcy5jLTg4NC1cXG5kcml2ZXJzL21kL2RtLWxvZy13cml0ZXMuYzo4ODU6I2lmIElTX0VOQUJMRUQoQ09ORklHX0ZTX0RBWClcXG5kcml2ZXJzL21kL2RtLWxvZy13cml0ZXMuYy04ODYtc3RhdGljIHN0cnVjdCBkYXhfZGV2aWNlICpsb2dfd3JpdGVzX2RheF9wZ29mZihzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSxcXG4tLVxcbmRyaXZlcnMvbWQvZG0tc3RyaXBlLmM9MjcyPWludCBzdHJpcGVfbWFwKHN0cnVjdCBkbV90YXJnZXQgKnRpLCBzdHJ1Y3QgYmlvICpiaW8pXFxuLS1cXG5kcml2ZXJzL21kL2RtLXN0cmlwZS5jLTMwMC1cXG5kcml2ZXJzL21kL2RtLXN0cmlwZS5jOjMwMTojaWYgSVNfRU5BQkxFRChDT05GSUdfRlNfREFYKVxcbmRyaXZlcnMvbWQvZG0tc3RyaXBlLmMtMzAyLXN0YXRpYyBzdHJ1Y3QgZGF4X2RldmljZSAqc3RyaXBlX2RheF9wZ29mZihzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSwgcGdvZmZfdCAqcGdvZmYpXFxuLS1cXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYy0zOS1cXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYzo0MDojaWYgSVNfRU5BQkxFRChDT05GSUdfQVJDSF9IQVNfUE1FTV9BUEkpIFxcdTAwMjZcXHUwMDI2IElTX0VOQUJMRUQoQ09ORklHX0ZTX0RBWClcXG5kcml2ZXJzL21kL2RtLXdyaXRlY2FjaGUuYy00MS0jZGVmaW5lIERNX1dSSVRFQ0FDSEVfSEFTX1BNRU1cXG4tLVxcbmZzL01ha2VmaWxlPTMxPW9iai0kKENPTkZJR19BSU8pICAgICAgICAgICAgICAgKz0gYWlvLm9cXG5mcy9NYWtlZmlsZTozMjpvYmotJChDT05GSUdfRlNfREFYKVxcdFxcdCs9IGRheC5vXFxuZnMvTWFrZWZpbGUtMzMtb2JqLSQoQ09ORklHX0ZTX0VOQ1JZUFRJT04pXFx0Kz0gY3J5cHRvL1xcbi0tXFxuZnMvZGF4LmM9MTM5NT1zdGF0aWMgdm1fZmF1bHRfdCBkYXhfbG9hZF9ob2xlKHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcXG4tLVxcbmZzL2RheC5jLTE0MDktXFxuZnMvZGF4LmM6MTQxMDojaWZkZWYgQ09ORklHX0ZTX0RBWF9QTURcXG5mcy9kYXguYy0xNDExLXN0YXRpYyB2bV9mYXVsdF90IGRheF9wbWRfbG9hZF9ob2xlKHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcXG4tLVxcbmZzL2RheC5jPTE0MzU9c3RhdGljIHZtX2ZhdWx0X3QgZGF4X3BtZF9sb2FkX2hvbGUoc3RydWN0IHhhX3N0YXRlICp4YXMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxcbi0tXFxuZnMvZGF4LmMtMTQzOS19XFxuZnMvZGF4LmM6MTQ0MDojZW5kaWYgLyogQ09ORklHX0ZTX0RBWF9QTUQgKi9cXG5mcy9kYXguYy0xNDQxLVxcbi0tXFxuZnMvZGF4LmM9MTg5OT1zdGF0aWMgdm1fZmF1bHRfdCBkYXhfaW9tYXBfcHRlX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mLCB1bnNpZ25lZCBsb25nICpwZm5wLFxcbi0tXFxuZnMvZGF4LmMtMTk3NC1cXG5mcy9kYXguYzoxOTc1OiNpZmRlZiBDT05GSUdfRlNfREFYX1BNRFxcbmZzL2RheC5jLTE5NzYtc3RhdGljIGJvb2wgZGF4X2ZhdWx0X2NoZWNrX2ZhbGxiYWNrKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3QgeGFfc3RhdGUgKnhhcyxcXG4tLVxcbmZzL2RheC5jPTIwODg9c3RhdGljIHZtX2ZhdWx0X3QgZGF4X2lvbWFwX3BtZF9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgdW5zaWduZWQgbG9uZyAqcGZucCxcXG4tLVxcbmZzL2RheC5jLTIwOTItfVxcbmZzL2RheC5jOjIwOTM6I2VuZGlmIC8qIENPTkZJR19GU19EQVhfUE1EICovXFxuZnMvZGF4LmMtMjA5NC1cXG4tLVxcbmZzL2RheC5jPTIxMzA9c3RhdGljIHZtX2ZhdWx0X3QgZGF4X2luc2VydF9wZm5fbWt3cml0ZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcXG4tLVxcbmZzL2RheC5jLTIxNTYtXFx0XFx0cmV0ID0gdm1mX2luc2VydF9wYWdlX21rd3JpdGUodm1mLCBcXHUwMDI2Zm9saW8tXFx1MDAzZXBhZ2UsIHRydWUpO1xcbmZzL2RheC5jOjIxNTc6I2lmZGVmIENPTkZJR19GU19EQVhfUE1EXFxuZnMvZGF4LmMtMjE1OC1cXHRlbHNlIGlmIChvcmRlciA9PSBQTURfT1JERVIpXFxuLS1cXG5mcy9lcm9mcy9kYXRhLmM9NDM2PXN0YXRpYyBzc2l6ZV90IGVyb2ZzX2ZpbGVfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcXG4tLVxcbmZzL2Vyb2ZzL2RhdGEuYy00NDMtXFxuZnMvZXJvZnMvZGF0YS5jOjQ0NDpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfRlNfREFYKSBcXHUwMDI2XFx1MDAyNiBJU19EQVgoaW5vZGUpKVxcbmZzL2Vyb2ZzL2RhdGEuYy00NDUtXFx0XFx0cmV0dXJuIGRheF9pb21hcF9ydyhpb2NiLCB0bywgXFx1MDAyNmVyb2ZzX2lvbWFwX29wcyk7XFxuLS1cXG5mcy9lcm9mcy9kYXRhLmM9NDU5PWNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgZXJvZnNfYW9wcyA9IHtcXG4tLVxcbmZzL2Vyb2ZzL2RhdGEuYy00NjctXFxuZnMvZXJvZnMvZGF0YS5jOjQ2ODojaWZkZWYgQ09ORklHX0ZTX0RBWFxcbmZzL2Vyb2ZzL2RhdGEuYy00Njktc3RhdGljIHZtX2ZhdWx0X3QgZXJvZnNfZGF4X2h1Z2VfZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYsXFxuLS1cXG5mcy9lcm9mcy9zdXBlci5jPTQyOT1zdGF0aWMgYm9vbCBlcm9mc19mY19zZXRfZGF4X21vZGUoc3RydWN0IGZzX2NvbnRleHQgKmZjLCB1bnNpZ25lZCBpbnQgbW9kZSlcXG5mcy9lcm9mcy9zdXBlci5jLTQzMC17XFxuZnMvZXJvZnMvc3VwZXIuYzo0MzE6XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0ZTX0RBWCkpIHtcXG5mcy9lcm9mcy9zdXBlci5jLTQzMi1cXHRcXHRzdHJ1Y3QgZXJvZnNfc2JfaW5mbyAqc2JpID0gZmMtXFx1MDAzZXNfZnNfaW5mbztcXG4tLVxcbmZzL2V4dDQvZXh0NC5oPTEwMzA9c3RydWN0IGV4dDRfaW5vZGVfaW5mbyB7XFxuLS1cXG5mcy9leHQ0L2V4dDQuaC0xMjI0LSNkZWZpbmUgRVhUNF9NT1VOVF9OT0xPQURcXHRcXHQweDAwMTAwXFx0LyogRG9uJ3QgdXNlIGV4aXN0aW5nIGpvdXJuYWwqL1xcbmZzL2V4dDQvZXh0NC5oOjEyMjU6I2lmZGVmIENPTkZJR19GU19EQVhcXG5mcy9leHQ0L2V4dDQuaC0xMjI2LSNkZWZpbmUgRVhUNF9NT1VOVF9EQVhfQUxXQVlTXFx0XFx0MHgwMDIwMFxcdC8qIERpcmVjdCBBY2Nlc3MgKi9cXG4tLVxcbmZzL2V4dDQvZmlsZS5jPTY5PXN0YXRpYyBzc2l6ZV90IGV4dDRfZGlvX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXFxuLS1cXG5mcy9leHQ0L2ZpbGUuYy0xMDAtXFxuZnMvZXh0NC9maWxlLmM6MTAxOiNpZmRlZiBDT05GSUdfRlNfREFYXFxuZnMvZXh0NC9maWxlLmMtMTAyLXN0YXRpYyBzc2l6ZV90IGV4dDRfZGF4X3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXFxuLS1cXG5mcy9leHQ0L2ZpbGUuYz0xMzA9c3RhdGljIHNzaXplX3QgZXh0NF9maWxlX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXFxuLS1cXG5mcy9leHQ0L2ZpbGUuYy0xMzktXFxuZnMvZXh0NC9maWxlLmM6MTQwOiNpZmRlZiBDT05GSUdfRlNfREFYXFxuZnMvZXh0NC9maWxlLmMtMTQxLVxcdGlmIChJU19EQVgoaW5vZGUpKVxcbi0tXFxuZnMvZXh0NC9maWxlLmM9NTc4PXN0YXRpYyBzc2l6ZV90IGV4dDRfZGlvX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXFxuLS1cXG5mcy9leHQ0L2ZpbGUuYy03MDctXFxuZnMvZXh0NC9maWxlLmM6NzA4OiNpZmRlZiBDT05GSUdfRlNfREFYXFxuZnMvZXh0NC9maWxlLmMtNzA5LXN0YXRpYyBzc2l6ZV90XFxuLS1cXG5mcy9leHQ0L2ZpbGUuYz03NzA9ZXh0NF9maWxlX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXFxuLS1cXG5mcy9leHQ0L2ZpbGUuYy03NzgtXFxuZnMvZXh0NC9maWxlLmM6Nzc5OiNpZmRlZiBDT05GSUdfRlNfREFYXFxuZnMvZXh0NC9maWxlLmMtNzgwLVxcdGlmIChJU19EQVgoaW5vZGUpKVxcbi0tXFxuZnMvZXh0NC9maWxlLmMtODAxLVxcbmZzL2V4dDQvZmlsZS5jOjgwMjojaWZkZWYgQ09ORklHX0ZTX0RBWFxcbmZzL2V4dDQvZmlsZS5jLTgwMy1zdGF0aWMgdm1fZmF1bHRfdCBleHQ0X2RheF9odWdlX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mLCB1bnNpZ25lZCBpbnQgb3JkZXIpXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9MjE2OD1zdGF0aWMgaW50IGV4dDRfcGFyc2VfcGFyYW0oc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3QgZnNfcGFyYW1ldGVyICpwYXJhbSlcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0yMzY5LVxcdGNhc2UgT3B0X2RheF90eXBlOlxcbmZzL2V4dDQvc3VwZXIuYzoyMzcwOiNpZmRlZiBDT05GSUdfRlNfREFYXFxuZnMvZXh0NC9zdXBlci5jLTIzNzEtXFx0e1xcbi0tXFxuZnMveGZzL01ha2VmaWxlPTE1ND1pZmVxICgkKENPTkZJR19NRU1PUllfRkFJTFVSRSkseSlcXG5mcy94ZnMvTWFrZWZpbGU6MTU1Onhmcy0kKENPTkZJR19GU19EQVgpXFx0XFx0Kz0geGZzX25vdGlmeV9mYWlsdXJlLm9cXG5mcy94ZnMvTWFrZWZpbGUtMTU2LWVuZGlmXFxuLS1cXG5mcy94ZnMveGZzX2J1Zi5jPTE3Mjk9eGZzX2FsbG9jX2J1ZnRhcmcoXFxuLS1cXG5mcy94ZnMveGZzX2J1Zi5jLTE3MzctXFxuZnMveGZzL3hmc19idWYuYzoxNzM4OiNpZiBkZWZpbmVkKENPTkZJR19GU19EQVgpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX01FTU9SWV9GQUlMVVJFKVxcbmZzL3hmcy94ZnNfYnVmLmMtMTczOS1cXHRvcHMgPSBcXHUwMDI2eGZzX2RheF9ob2xkZXJfb3BlcmF0aW9ucztcXG4tLVxcbmZzL3hmcy94ZnNfZmlsZS5jPTE4NzI9eGZzX2RheF9mYXVsdF9sb2NrZWQoXFxuLS1cXG5mcy94ZnMveGZzX2ZpbGUuYy0xODc5LVxcbmZzL3hmcy94ZnNfZmlsZS5jOjE4ODA6XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19GU19EQVgpKSB7XFxuZnMveGZzL3hmc19maWxlLmMtMTg4MS1cXHRcXHRBU1NFUlQoMCk7XFxuLS1cXG5mcy94ZnMveGZzX2lvcHMuYz0xMzY0PXhmc19pbm9kZV9zaG91bGRfZW5hYmxlX2RheChcXG4tLVxcbmZzL3hmcy94ZnNfaW9wcy5jLTEzNjYte1xcbmZzL3hmcy94ZnNfaW9wcy5jOjEzNjc6XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19GU19EQVgpKVxcbmZzL3hmcy94ZnNfaW9wcy5jLTEzNjgtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxuZnMveGZzL3hmc19zdXBlci5jPTE0MDQ9eGZzX2ZzX3BhcnNlX3BhcmFtKFxcbi0tXFxuZnMveGZzL3hmc19zdXBlci5jLTE1MzQtXFx0XFx0cmV0dXJuIDA7XFxuZnMveGZzL3hmc19zdXBlci5jOjE1MzU6I2lmZGVmIENPTkZJR19GU19EQVhcXG5mcy94ZnMveGZzX3N1cGVyLmMtMTUzNi1cXHRjYXNlIE9wdF9kYXg6XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RheC5oPTEyOD1zdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2w7XFxuaW5jbHVkZS9saW51eC9kYXguaDoxMjk6I2lmIGRlZmluZWQoQ09ORklHX0JMT0NLKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19GU19EQVgpXFxuaW5jbHVkZS9saW51eC9kYXguaC0xMzAtaW50IGRheF9hZGRfaG9zdChzdHJ1Y3QgZGF4X2RldmljZSAqZGF4X2Rldiwgc3RydWN0IGdlbmRpc2sgKmRpc2spO1xcbi0tXFxuaW5jbHVkZS9saW51eC9kYXguaD0xNDI9c3RhdGljIGlubGluZSBzdHJ1Y3QgZGF4X2RldmljZSAqZnNfZGF4X2dldF9ieV9iZGV2KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RheC5oLTE0Ny19XFxuaW5jbHVkZS9saW51eC9kYXguaDoxNDg6I2VuZGlmIC8qIENPTkZJR19CTE9DSyBcXHUwMDI2XFx1MDAyNiBDT05GSUdfRlNfREFYICovXFxuaW5jbHVkZS9saW51eC9kYXguaC0xNDktXFxuaW5jbHVkZS9saW51eC9kYXguaDoxNTA6I2lmIElTX0VOQUJMRUQoQ09ORklHX0ZTX0RBWClcXG5pbmNsdWRlL2xpbnV4L2RheC5oLTE1MS12b2lkIGZzX3B1dF9kYXgoc3RydWN0IGRheF9kZXZpY2UgKmRheF9kZXYsIHZvaWQgKmhvbGRlcik7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RheC5oPTIzNj1zdGF0aWMgaW5saW5lIHZvaWQgZGF4X3JlYWRfdW5sb2NrKGludCBpZClcXG4tLVxcbmluY2x1ZGUvbGludXgvZGF4LmgtMjQwLVxcbmluY2x1ZGUvbGludXgvZGF4Lmg6MjQxOiNpZiAhSVNfRU5BQkxFRChDT05GSUdfRlNfREFYKVxcbmluY2x1ZGUvbGludXgvZGF4LmgtMjQyLXN0YXRpYyBpbmxpbmUgaW50IF9fbXVzdF9jaGVjayBkYXhfYnJlYWtfbGF5b3V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZzLmg9MjA5Nj1leHRlcm4gbG9mZl90IHZmc19kZWR1cGVfZmlsZV9yYW5nZV9vbmUoc3RydWN0IGZpbGUgKnNyY19maWxlLCBsb2ZmX3Qgc3JjX3BvcyxcXG4tLVxcbmluY2x1ZGUvbGludXgvZnMuaC0yMTE1LSNkZWZpbmUgU19OT1NFQ1xcdFxcdCgxIFxcdTAwM2NcXHUwMDNjIDEyKSAvKiBubyBzdWlkIG9yIHhhdHRyIHNlY3VyaXR5IGF0dHJpYnV0ZXMgKi9cXG5pbmNsdWRlL2xpbnV4L2ZzLmg6MjExNjojaWZkZWYgQ09ORklHX0ZTX0RBWFxcbmluY2x1ZGUvbGludXgvZnMuaC0yMTE3LSNkZWZpbmUgU19EQVhcXHRcXHQoMSBcXHUwMDNjXFx1MDAzYyAxMykgLyogRGlyZWN0IEFjY2VzcywgYXZvaWRpbmcgdGhlIHBhZ2UgY2FjaGUgKi9cXG4tLVxcbmluY2x1ZGUvbGludXgvZnMuaD0zMzk5PXN0YXRpYyBpbmxpbmUgYm9vbCB2bWFfaXNfZnNkYXgoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMzQwMi1cXG5pbmNsdWRlL2xpbnV4L2ZzLmg6MzQwMzpcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0ZTX0RBWCkgfHwgIXZtYS1cXHUwMDNldm1fZmlsZSlcXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMzQwNC1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lvbWFwLmg9MTYyPXN0cnVjdCBpb21hcF93cml0ZV9vcHMge1xcbi0tXFxuaW5jbHVkZS9saW51eC9pb21hcC5oLTIwNi0jZGVmaW5lIElPTUFQX1VOU0hBUkVcXHRcXHQoMSBcXHUwMDNjXFx1MDAzYyA3KSAvKiB1bnNoYXJlX2ZpbGVfcmFuZ2UgKi9cXG5pbmNsdWRlL2xpbnV4L2lvbWFwLmg6MjA3OiNpZmRlZiBDT05GSUdfRlNfREFYXFxuaW5jbHVkZS9saW51eC9pb21hcC5oLTIwOC0jZGVmaW5lIElPTUFQX0RBWFxcdFxcdCgxIFxcdTAwM2NcXHUwMDNjIDgpIC8qIERBWCBtYXBwaW5nICovXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lvbWFwLmgtMjEwLSNkZWZpbmUgSU9NQVBfREFYXFx0XFx0MFxcbmluY2x1ZGUvbGludXgvaW9tYXAuaDoyMTE6I2VuZGlmIC8qIENPTkZJR19GU19EQVggKi9cXG5pbmNsdWRlL2xpbnV4L2lvbWFwLmgtMjEyLSNkZWZpbmUgSU9NQVBfQVRPTUlDXFx0XFx0KDEgXFx1MDAzY1xcdTAwM2MgOSkgLyogdG9ybi13cml0ZSBwcm90ZWN0aW9uICovXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jPTU4Mz1zdGF0aWMgdm9pZCBjb2xsZWN0X3Byb2NzX2ZpbGUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtNjE5LVxcbm1tL21lbW9yeS1mYWlsdXJlLmM6NjIwOiNpZmRlZiBDT05GSUdfRlNfREFYXFxubW0vbWVtb3J5LWZhaWx1cmUuYy02MjEtc3RhdGljIHZvaWQgYWRkX3RvX2tpbGxfZnNkYXgoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIGNvbnN0IHN0cnVjdCBwYWdlICpwLFxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz02MzI9c3RhdGljIHZvaWQgY29sbGVjdF9wcm9jc19mc2RheChjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtNjYwLX1cXG5tbS9tZW1vcnktZmFpbHVyZS5jOjY2MTojZW5kaWYgLyogQ09ORklHX0ZTX0RBWCAqL1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtNjYyLVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0xNzE4PXN0YXRpYyBpbnQgbWZfZ2VuZXJpY19raWxsX3Byb2NzKHVuc2lnbmVkIGxvbmcgbG9uZyBwZm4sIGludCBmbGFncyxcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTc3NS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jOjE3NzY6I2lmZGVmIENPTkZJR19GU19EQVhcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE3NzctLyoqXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jPTE4MTg9RVhQT1JUX1NZTUJPTF9HUEwobWZfZGF4X2tpbGxfcHJvY3MpO1xcbm1tL21lbW9yeS1mYWlsdXJlLmM6MTgxOTojZW5kaWYgLyogQ09ORklHX0ZTX0RBWCAqL1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTgyMC1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Zzb2NrL2NvbmZpZz0xMDc9Q09ORklHX0RBWF9EUklWRVI9eVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Zzb2NrL2NvbmZpZzoxMDg6Q09ORklHX0ZTX0RBWD15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdnNvY2svY29uZmlnLTEwOS1DT05GSUdfTUVNT1JZX0hPVFBMVUc9eVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwOTowOTozMS42MDE0NjMwMzRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTUyMjUwODI4NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgU2VsZWN0aW9uOiBleHQ0IERpcmVjdCBJL08gYW5kIERBWCBXcml0ZSBQYXRocyoqXG5cbkFscmlnaHQsIGxldCdzIG5haWwgZG93biB0aGUgZnV6emluZyB0YXJnZXRzIGZvciB0aGlzIGV4dDQgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCBgQ09ORklHX0ZTX0RBWGAgaXMgcmVsZXZhbnQsIGFuZCB5ZXMsIGl0IHNlZW1zIHNvLiBEaXZpbmcgZGVlcGVyLCBJIHNlZSBhIHNsZXcgb2Ygc3RhdGljIGZ1bmN0aW9ucyBiZWluZyBtb2RpZmllZCBvciBjZW50cmFsIHRvIHRoZSBEaXJlY3QgSS9PIGFuZCBEQVggd3JpdGUgcGF0aHMuIFRoZXNlIGFyZSB3aGVyZSB0aGUgaW50ZXJlc3RpbmcgY2hhbmdlcyBhcmUuXG5cbkZpcnN0LCBJIGNvbmZpcm0gYGV4dDRfZGlvX25lZWRzX3plcm9pbmdgIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCwgZ2l2ZW4gdGhlIHBhdGNoJ3MgZm9jdXMgb24gcGFydGlhbCBibG9jayB6ZXJvaW5nLiBOZXh0LCBgZXh0NF9kaW9fd3JpdGVfY2hlY2tzYCBzZWVtcyBjcnVjaWFsLCBhbmQgd2hpbGUgSSBpbml0aWFsbHkgdGhvdWdodCBpdHMgc2lnbmF0dXJlIG1pZ2h0IGNoYW5nZSwgdGhlIGRpZmYgY29uZmlybXMgaXQgcmVtYWlucyB0aGUgc2FtZSwgYnV0IHRoZSBpbnRlcm5hbCBsb2dpYyBpcyBtb2RpZmllZC4gIGBleHQ0X2J1ZmZlcmVkX3dyaXRlX2l0ZXJgIGlzIGxpa2VseSBhbHNvIHRvdWNoZWQgYnkgdGhpcy4gQW5kIHRoZSBzYW1lIHRoaW5nIGZvciBgZXh0NF9kYXhfd3JpdGVfaXRlcmAuIEkgYWxzbyBuZWVkIHRvIG1ha2Ugc3VyZSBgZXh0NF9pb21hcF9iZWdpbmAgYW5kIGBleHQ0X2lvbWFwX2FsbG9jYCBhcmUgaW5jbHVkZWQuIGBleHQ0X21hcF9ibG9ja3NgIGlzIGludm9sdmVkLCBidXQgaXQncyB1c2VkICpzbyogYnJvYWRseSBpbiBleHQ0IHRoYXQgSSdtIGdvaW5nIHRvIG9taXQgaXQgdG8gYXZvaWQgc2tld2luZyB0aGUgZnV6emluZyBkaXN0cmlidXRpb24uXG5cblRoZXJlZm9yZSwgdGhlIGZ1bmN0aW9ucyBJJ20gZ29pbmcgdG8gaW5jbHVkZSBhcmU6XG5cbiogICBgZXh0NF9kaW9fbmVlZHNfemVyb2luZ2BcbiogICBgZXh0NF9kaW9fd3JpdGVfY2hlY2tzYFxuKiAgIGBleHQ0X2J1ZmZlcmVkX3dyaXRlX2l0ZXJgXG4qICAgYGV4dDRfZGF4X3dyaXRlX2l0ZXJgXG4qICAgYGV4dDRfaW9tYXBfYmVnaW5gXG4qICAgYGV4dDRfaW9tYXBfYWxsb2NgXG5cblRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyB3aWxsIGJlOiBgRVhUNF9GU2AgYW5kIGBGU19EQVhgLlxuXG5UaGUgY29yZSByYXRpb25hbGUgaXMgdGhhdCB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgRGlyZWN0IEkvTyBhbmQgREFYIHdyaXRlIHBhdGhzIGluIGV4dDQuIEl0IGluY2x1ZGVzIHBhcnRpYWwgYmxvY2sgemVyb2luZyBhbmQgbG9ja2luZyBjaGFuZ2VzIGZvciB1bmFsaWduZWQgRElPIHdyaXRlcy4gVGhlc2UgY2hvc2VuIGZ1bmN0aW9ucyByZXByZXNlbnQgdGhlIGNvcmUgbG9naWMgY2hhbmdlcyBhbmQgYXJlIGxpa2VseSBjYW5kaWRhdGVzIGZvciBpbnRyb2R1Y2luZyBidWdzIGluIHRoZSBuZXdseSBtb2RpZmllZCBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODE1MywiT3V0cHV0VG9rZW5zIjoyMTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA5OjA5OjQ2LjgyNjU0OTU2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI4MDg1NTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCIsXG4gICAgXCJGU19EQVhcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJleHQ0X2Rpb19uZWVkc196ZXJvaW5nXCIsXG4gICAgXCJleHQ0X2Rpb193cml0ZV9jaGVja3NcIixcbiAgICBcImV4dDRfYnVmZmVyZWRfd3JpdGVfaXRlclwiLFxuICAgIFwiZXh0NF9kYXhfd3JpdGVfaXRlclwiLFxuICAgIFwiZXh0NF9pb21hcF9iZWdpblwiLFxuICAgIFwiZXh0NF9pb21hcF9hbGxvY1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGV4dDQgRGlyZWN0IEkvTyBhbmQgREFYIHdyaXRlIHBhdGhzLCBzcGVjaWZpY2FsbHkgZml4aW5nIGxvY2tpbmcgYW5kIHBhcnRpYWwgYmxvY2sgemVyb2luZyBmb3IgdW5hbGlnbmVkIERJTyB3cml0ZXMuIEl0IGludHJvZHVjZXMgYGV4dDRfZGlvX25lZWRzX3plcm9pbmdgIGFuZCBtb2RpZmllcyBgZXh0NF9kaW9fd3JpdGVfY2hlY2tzYCwgYGV4dDRfYnVmZmVyZWRfd3JpdGVfaXRlcmAsIGBleHQ0X2RheF93cml0ZV9pdGVyYCwgYW5kIGBleHQ0X2lvbWFwX2JlZ2luYC4gVGhlc2UgYXJlIGNvcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGV4dDQncyBJL08gaGFuZGxpbmcgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIixcbiAgICBcIkZTX0RBWFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV4dDRfZGlvX25lZWRzX3plcm9pbmdcIixcbiAgICBcImV4dDRfZGlvX3dyaXRlX2NoZWNrc1wiLFxuICAgIFwiZXh0NF9idWZmZXJlZF93cml0ZV9pdGVyXCIsXG4gICAgXCJleHQ0X2RheF93cml0ZV9pdGVyXCIsXG4gICAgXCJleHQ0X2lvbWFwX2JlZ2luXCIsXG4gICAgXCJleHQ0X2lvbWFwX2FsbG9jXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZXh0NCBEaXJlY3QgSS9PIGFuZCBEQVggd3JpdGUgcGF0aHMsIHNwZWNpZmljYWxseSBmaXhpbmcgbG9ja2luZyBhbmQgcGFydGlhbCBibG9jayB6ZXJvaW5nIGZvciB1bmFsaWduZWQgRElPIHdyaXRlcy4gSXQgaW50cm9kdWNlcyBgZXh0NF9kaW9fbmVlZHNfemVyb2luZ2AgYW5kIG1vZGlmaWVzIGBleHQ0X2Rpb193cml0ZV9jaGVja3NgLCBgZXh0NF9idWZmZXJlZF93cml0ZV9pdGVyYCwgYGV4dDRfZGF4X3dyaXRlX2l0ZXJgLCBhbmQgYGV4dDRfaW9tYXBfYmVnaW5gLiBUaGVzZSBhcmUgY29yZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gZXh0NCdzIEkvTyBoYW5kbGluZyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflown5btw[1] Phase: Succeeded StartedAt: 2026-06-26 09:10:01 +0000 UTC FinishedAt: 2026-06-26 09:10:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflown5btw[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-26 09:10:01 +0000 UTC FinishedAt: 2026-06-26 09:10:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflown5btw[2] Phase: Succeeded StartedAt: 2026-06-26 09:10:01 +0000 UTC FinishedAt: 2026-06-26 13:23:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflown5btw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_DAX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_dio_needs_zeroing","ext4_dio_write_checks","ext4_buffered_write_iter","ext4_dax_write_iter","ext4_iomap_begin","ext4_iomap_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_DAX"],"series_id":"9e232472-4a4b-47f3-8bca-8e34bb2a4b4d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-06-26 09:10:01 +0000 UTC FinishedAt: 2026-06-26 13:23:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_DAX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_dio_needs_zeroing","ext4_dio_write_checks","ext4_buffered_write_iter","ext4_dax_write_iter","ext4_iomap_begin","ext4_iomap_alloc"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_DAX"],"series_id":"9e232472-4a4b-47f3-8bca-8e34bb2a4b4d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflown5btw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_DAX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_dio_needs_zeroing","ext4_dio_write_checks","ext4_buffered_write_iter","ext4_dax_write_iter","ext4_iomap_begin","ext4_iomap_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_DAX"],"series_id":"9e232472-4a4b-47f3-8bca-8e34bb2a4b4d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-06-26 09:10:01 +0000 UTC FinishedAt: 2026-06-26 09:10:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflown5btw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_DAX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_dio_needs_zeroing","ext4_dio_write_checks","ext4_buffered_write_iter","ext4_dax_write_iter","ext4_iomap_begin","ext4_iomap_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_DAX"],"series_id":"9e232472-4a4b-47f3-8bca-8e34bb2a4b4d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-06-26 09:10:01 +0000 UTC FinishedAt: 2026-06-26 09:10:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_DAX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflown5btw/series-workflown5btw-convert-artifact-3785237413/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown5btw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_DAX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_dio_needs_zeroing","ext4_dio_write_checks","ext4_buffered_write_iter","ext4_dax_write_iter","ext4_iomap_begin","ext4_iomap_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_DAX"],"series_id":"9e232472-4a4b-47f3-8bca-8e34bb2a4b4d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-06-26 09:10:29 +0000 UTC FinishedAt: 2026-06-26 09:44:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflown5btw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_DAX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_dio_needs_zeroing","ext4_dio_write_checks","ext4_buffered_write_iter","ext4_dax_write_iter","ext4_iomap_begin","ext4_iomap_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_DAX"],"series_id":"9e232472-4a4b-47f3-8bca-8e34bb2a4b4d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-06-26 09:10:29 +0000 UTC FinishedAt: 2026-06-26 09:44:07 +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:*5449790f-256a-4256-8477-7b0581047fa2,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-workflown5btw/series-workflown5btw-convert-artifact-3785237413/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": "0bf6c653-5a77-45da-8196-49889798146a", "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-workflown5btw/series-workflown5btw-build-action-3518103499/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown5btw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_DAX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_dio_needs_zeroing","ext4_dio_write_checks","ext4_buffered_write_iter","ext4_dax_write_iter","ext4_iomap_begin","ext4_iomap_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_DAX"],"series_id":"9e232472-4a4b-47f3-8bca-8e34bb2a4b4d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-06-26 09:10:29 +0000 UTC FinishedAt: 2026-06-26 09:43:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*5449790f-256a-4256-8477-7b0581047fa2,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-workflown5btw/series-workflown5btw-convert-artifact-3785237413/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": "0bf6c653-5a77-45da-8196-49889798146a", "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-workflown5btw/series-workflown5btw-build-action-3518103499/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown5btw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_DAX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_dio_needs_zeroing","ext4_dio_write_checks","ext4_buffered_write_iter","ext4_dax_write_iter","ext4_iomap_begin","ext4_iomap_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_DAX"],"series_id":"9e232472-4a4b-47f3-8bca-8e34bb2a4b4d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-06-26 09:44:07 +0000 UTC FinishedAt: 2026-06-26 09:44:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflown5btw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_DAX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_dio_needs_zeroing","ext4_dio_write_checks","ext4_buffered_write_iter","ext4_dax_write_iter","ext4_iomap_begin","ext4_iomap_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_DAX"],"series_id":"9e232472-4a4b-47f3-8bca-8e34bb2a4b4d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-06-26 09:44:07 +0000 UTC FinishedAt: 2026-06-26 09:44:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflown5btw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_DAX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_dio_needs_zeroing","ext4_dio_write_checks","ext4_buffered_write_iter","ext4_dax_write_iter","ext4_iomap_begin","ext4_iomap_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_DAX"],"series_id":"9e232472-4a4b-47f3-8bca-8e34bb2a4b4d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-06-26 09:44:07 +0000 UTC FinishedAt: 2026-06-26 09:44:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflown5btw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_DAX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_dio_needs_zeroing","ext4_dio_write_checks","ext4_buffered_write_iter","ext4_dax_write_iter","ext4_iomap_begin","ext4_iomap_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_DAX"],"series_id":"9e232472-4a4b-47f3-8bca-8e34bb2a4b4d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-06-26 09:44:07 +0000 UTC FinishedAt: 2026-06-26 09:44:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_DAX"],"series_id":"9e232472-4a4b-47f3-8bca-8e34bb2a4b4d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflown5btw/series-workflown5btw-convert-artifact-3140937600/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown5btw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_DAX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_dio_needs_zeroing","ext4_dio_write_checks","ext4_buffered_write_iter","ext4_dax_write_iter","ext4_iomap_begin","ext4_iomap_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_DAX"],"series_id":"9e232472-4a4b-47f3-8bca-8e34bb2a4b4d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-06-26 09:44:36 +0000 UTC FinishedAt: 2026-06-26 09:46:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflown5btw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_DAX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_dio_needs_zeroing","ext4_dio_write_checks","ext4_buffered_write_iter","ext4_dax_write_iter","ext4_iomap_begin","ext4_iomap_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_DAX"],"series_id":"9e232472-4a4b-47f3-8bca-8e34bb2a4b4d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-06-26 09:44:36 +0000 UTC FinishedAt: 2026-06-26 09:46:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*0bf6c653-5a77-45da-8196-49889798146a,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-workflown5btw/series-workflown5btw-build-action-3518103499/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-workflown5btw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_DAX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_dio_needs_zeroing","ext4_dio_write_checks","ext4_buffered_write_iter","ext4_dax_write_iter","ext4_iomap_begin","ext4_iomap_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_DAX"],"series_id":"9e232472-4a4b-47f3-8bca-8e34bb2a4b4d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-06-26 09:46:56 +0000 UTC FinishedAt: 2026-06-26 09:46:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflown5btw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_DAX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_dio_needs_zeroing","ext4_dio_write_checks","ext4_buffered_write_iter","ext4_dax_write_iter","ext4_iomap_begin","ext4_iomap_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_DAX"],"series_id":"9e232472-4a4b-47f3-8bca-8e34bb2a4b4d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-06-26 09:46:56 +0000 UTC FinishedAt: 2026-06-26 09:46:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflown5btw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_DAX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_dio_needs_zeroing","ext4_dio_write_checks","ext4_buffered_write_iter","ext4_dax_write_iter","ext4_iomap_begin","ext4_iomap_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_DAX"],"series_id":"9e232472-4a4b-47f3-8bca-8e34bb2a4b4d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-06-26 09:46:56 +0000 UTC FinishedAt: 2026-06-26 10:19:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflown5btw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_DAX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_dio_needs_zeroing","ext4_dio_write_checks","ext4_buffered_write_iter","ext4_dax_write_iter","ext4_iomap_begin","ext4_iomap_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_DAX"],"series_id":"9e232472-4a4b-47f3-8bca-8e34bb2a4b4d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-06-26 09:46:56 +0000 UTC FinishedAt: 2026-06-26 10:19:09 +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:*5449790f-256a-4256-8477-7b0581047fa2,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-workflown5btw/series-workflown5btw-convert-artifact-3140937600/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": "c760ddfa-2bea-45db-8d5a-99d0d5ac0a93", "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-workflown5btw/series-workflown5btw-build-action-891606332/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown5btw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_DAX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_dio_needs_zeroing","ext4_dio_write_checks","ext4_buffered_write_iter","ext4_dax_write_iter","ext4_iomap_begin","ext4_iomap_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_DAX"],"series_id":"9e232472-4a4b-47f3-8bca-8e34bb2a4b4d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-06-26 09:46:56 +0000 UTC FinishedAt: 2026-06-26 10:18:48 +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:*5449790f-256a-4256-8477-7b0581047fa2,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-workflown5btw/series-workflown5btw-convert-artifact-3140937600/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": "c760ddfa-2bea-45db-8d5a-99d0d5ac0a93", "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-workflown5btw/series-workflown5btw-build-action-891606332/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown5btw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_DAX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_dio_needs_zeroing","ext4_dio_write_checks","ext4_buffered_write_iter","ext4_dax_write_iter","ext4_iomap_begin","ext4_iomap_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_DAX"],"series_id":"9e232472-4a4b-47f3-8bca-8e34bb2a4b4d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-06-26 10:19:09 +0000 UTC FinishedAt: 2026-06-26 10:19:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflown5btw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_DAX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_dio_needs_zeroing","ext4_dio_write_checks","ext4_buffered_write_iter","ext4_dax_write_iter","ext4_iomap_begin","ext4_iomap_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_DAX"],"series_id":"9e232472-4a4b-47f3-8bca-8e34bb2a4b4d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-06-26 10:19:09 +0000 UTC FinishedAt: 2026-06-26 10:19:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflown5btw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_DAX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_dio_needs_zeroing","ext4_dio_write_checks","ext4_buffered_write_iter","ext4_dax_write_iter","ext4_iomap_begin","ext4_iomap_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_DAX"],"series_id":"9e232472-4a4b-47f3-8bca-8e34bb2a4b4d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-06-26 10:19:09 +0000 UTC FinishedAt: 2026-06-26 10:20:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflown5btw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_DAX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_dio_needs_zeroing","ext4_dio_write_checks","ext4_buffered_write_iter","ext4_dax_write_iter","ext4_iomap_begin","ext4_iomap_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_DAX"],"series_id":"9e232472-4a4b-47f3-8bca-8e34bb2a4b4d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-06-26 10:19:09 +0000 UTC FinishedAt: 2026-06-26 10:20:47 +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:*c760ddfa-2bea-45db-8d5a-99d0d5ac0a93,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-workflown5btw/series-workflown5btw-build-action-891606332/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-workflown5btw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_DAX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_dio_needs_zeroing","ext4_dio_write_checks","ext4_buffered_write_iter","ext4_dax_write_iter","ext4_iomap_begin","ext4_iomap_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_DAX"],"series_id":"9e232472-4a4b-47f3-8bca-8e34bb2a4b4d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-06-26 10:20:57 +0000 UTC FinishedAt: 2026-06-26 13:23:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflown5btw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_DAX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_dio_needs_zeroing","ext4_dio_write_checks","ext4_buffered_write_iter","ext4_dax_write_iter","ext4_iomap_begin","ext4_iomap_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_DAX"],"series_id":"9e232472-4a4b-47f3-8bca-8e34bb2a4b4d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-06-26 10:20:57 +0000 UTC FinishedAt: 2026-06-26 13:23:10 +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":["ext4_dio_needs_zeroing","ext4_dio_write_checks","ext4_buffered_write_iter","ext4_dax_write_iter","ext4_iomap_begin","ext4_iomap_alloc"],"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:*0bf6c653-5a77-45da-8196-49889798146a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c760ddfa-2bea-45db-8d5a-99d0d5ac0a93,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-workflown5btw/series-workflown5btw-build-action-3518103499/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-workflown5btw/series-workflown5btw-build-action-891606332/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflown5btw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_DAX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_dio_needs_zeroing","ext4_dio_write_checks","ext4_buffered_write_iter","ext4_dax_write_iter","ext4_iomap_begin","ext4_iomap_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_DAX"],"series_id":"9e232472-4a4b-47f3-8bca-8e34bb2a4b4d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-06-26 10:20:57 +0000 UTC FinishedAt: 2026-06-26 10:21:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflown5btw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_DAX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_dio_needs_zeroing","ext4_dio_write_checks","ext4_buffered_write_iter","ext4_dax_write_iter","ext4_iomap_begin","ext4_iomap_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_DAX"],"series_id":"9e232472-4a4b-47f3-8bca-8e34bb2a4b4d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-06-26 10:20:57 +0000 UTC FinishedAt: 2026-06-26 10:21:14 +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":["ext4_dio_needs_zeroing","ext4_dio_write_checks","ext4_buffered_write_iter","ext4_dax_write_iter","ext4_iomap_begin","ext4_iomap_alloc"],"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-workflown5btw/series-workflown5btw-convert-artifact-4258156505/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown5btw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_DAX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_dio_needs_zeroing","ext4_dio_write_checks","ext4_buffered_write_iter","ext4_dax_write_iter","ext4_iomap_begin","ext4_iomap_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_DAX"],"series_id":"9e232472-4a4b-47f3-8bca-8e34bb2a4b4d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-06-26 10:20:57 +0000 UTC FinishedAt: 2026-06-26 10:20:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflown5btw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_DAX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_dio_needs_zeroing","ext4_dio_write_checks","ext4_buffered_write_iter","ext4_dax_write_iter","ext4_iomap_begin","ext4_iomap_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_DAX"],"series_id":"9e232472-4a4b-47f3-8bca-8e34bb2a4b4d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-06-26 10:20:57 +0000 UTC FinishedAt: 2026-06-26 10:20:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflown5btw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_DAX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_dio_needs_zeroing","ext4_dio_write_checks","ext4_buffered_write_iter","ext4_dax_write_iter","ext4_iomap_begin","ext4_iomap_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_DAX"],"series_id":"9e232472-4a4b-47f3-8bca-8e34bb2a4b4d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-06-26 10:20:57 +0000 UTC FinishedAt: 2026-06-26 10:20:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflown5btw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_DAX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_dio_needs_zeroing","ext4_dio_write_checks","ext4_buffered_write_iter","ext4_dax_write_iter","ext4_iomap_begin","ext4_iomap_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_DAX"],"series_id":"9e232472-4a4b-47f3-8bca-8e34bb2a4b4d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-06-26 10:21:31 +0000 UTC FinishedAt: 2026-06-26 13:23:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflown5btw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_DAX"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_dio_needs_zeroing","ext4_dio_write_checks","ext4_buffered_write_iter","ext4_dax_write_iter","ext4_iomap_begin","ext4_iomap_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe9f4ee6c61a1410afd73bf011de5ae618004796","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_DAX"],"series_id":"9e232472-4a4b-47f3-8bca-8e34bb2a4b4d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-06-26 10:21:31 +0000 UTC FinishedAt: 2026-06-26 13:23:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*0bf6c653-5a77-45da-8196-49889798146a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c760ddfa-2bea-45db-8d5a-99d0d5ac0a93,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-workflown5btw/series-workflown5btw-build-action-3518103499/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-workflown5btw/series-workflown5btw-build-action-891606332/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-workflown5btw/series-workflown5btw-convert-artifact-4258156505/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,}