Name: series-workflowdbkr6 Phase: Succeeded StartedAt: 2026-08-29 21:40:23 +0000 UTC FinishedAt: 2026-08-29 23:45:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdbkr6[0] Phase: Succeeded StartedAt: 2026-08-29 21:40:23 +0000 UTC FinishedAt: 2026-08-29 22:25:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdbkr6[0].run-triage Phase: Succeeded StartedAt: 2026-08-29 21:40:23 +0000 UTC FinishedAt: 2026-08-29 22:25:28 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "f78e0cb3fd377cfe90fe07a0eeec20584c0f4907", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SECURITY", "SECURITY_SELINUX", "SECURITY_NETWORK", "AUDIT", "NET", "INET", "OVERLAY_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "f78e0cb3fd377cfe90fe07a0eeec20584c0f4907", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SECURITY", "SECURITY_SELINUX", "SECURITY_NETWORK", "AUDIT", "NET", "INET", "OVERLAY_FS" ], "series_id": "d7a822de-d326-49fc-94de-8b42cd5eee3e" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "selinux_backing_file_alloc", "selinux_backing_file_free", "selinux_file_mprotect", "security_backing_file_alloc", "security_backing_file_free", "security_file_mprotect" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI5IDIyOjIzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NFQ1VSSVRZJiMzNDssCiAgICAmIzM0O1NFQ1VSSVRZX1NFTElOVVgmIzM0OywKICAgICYjMzQ7U0VDVVJJVFlfTkVUV09SSyYjMzQ7LAogICAgJiMzNDtBVURJVCYjMzQ7LAogICAgJiMzNDtORVQmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtPVkVSTEFZX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2VsaW51eF9iYWNraW5nX2ZpbGVfYWxsb2MmIzM0OywKICAgICYjMzQ7c2VsaW51eF9iYWNraW5nX2ZpbGVfZnJlZSYjMzQ7LAogICAgJiMzNDtzZWxpbnV4X2ZpbGVfbXByb3RlY3QmIzM0OywKICAgICYjMzQ7c2VjdXJpdHlfYmFja2luZ19maWxlX2FsbG9jJiMzNDssCiAgICAmIzM0O3NlY3VyaXR5X2JhY2tpbmdfZmlsZV9mcmVlJiMzNDssCiAgICAmIzM0O3NlY3VyaXR5X2ZpbGVfbXByb3RlY3QmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBleHRlbmRzIFNFTGludXggYmFja2luZyBmaWxlIHRyYWNraW5nIHRvIGhhbmRsZSBtdWx0aXBsZSBsYXllcnMgaW4gc3RhY2tlZCBmaWxlc3lzdGVtcyAoc3VjaCBhcyBvdmVybGF5ZnMgYW5kIGVyb2ZzKSBieSBpbnRyb2R1Y2luZyBpbnRlcm1lZGlhdGUgYmFja2luZyBsYXllciBzdHJ1Y3R1cmVzLCByZWNvcmRpbmcgcGF0aHMgYW5kIFNJRHMsIGFuZCB2YWxpZGF0aW5nIG1vdW50ZXIgcGVybWlzc2lvbnMgZHVyaW5nIGZpbGUgbW1hcC9tcHJvdGVjdCBvcGVyYXRpb25zLlxuXG5BbGwgbmV3bHkgYWxsb2NhdGVkIGhlYXAgc3RydWN0dXJlcyAoYGJhY2tpbmdfZmlsZV9zZWN1cml0eV9sYXllcmAgYXJyYXlzKSBhcmUgZXhwbGljaXRseSBhbmQgZnVsbHkgaW5pdGlhbGl6ZWQgdXBvbiBhbGxvY2F0aW9uIGJlZm9yZSB1c2Ugb3IgY29weWluZy4gVGhlIGNvbnRhaW5pbmcgYGJhY2tpbmdfZmlsZV9zZWN1cml0eV9zdHJ1Y3RgIGJsb2IgaXMgYWxsb2NhdGVkIHZpYSBga21lbV9jYWNoZV96YWxsb2NgLiBUaGUgYXVkaXQgZGF0YSBzdGFjayBzdHJ1Y3R1cmUgYHN0cnVjdCBjb21tb25fYXVkaXRfZGF0YSBhZGAgaXMgcHJvcGVybHkgY29uZmlndXJlZCB3aXRoIGB0eXBlID0gTFNNX0FVRElUX0RBVEFfUEFUSGAgYW5kIHRoZSBwYXRoIHVuaW9uIG1lbWJlciBhc3NpZ25lZCBiZWZvcmUgcGFzc2luZyB0byB0aGUgYXVkaXQvQVZDIHN1YnN5c3RlbS4gTm8gZGF0YSBpcyBleHBvc2VkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgdGhlcmUgaXMgbm8gYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBQb3RlbnRpYWwgcmlza3MgaW4gdGhpcyBwYXRjaCAoc3VjaCBhcyBsaWZldGltZSBpc3N1ZXMsIHJlZmNvdW50aW5nLCBwYXRoIG1hbmFnZW1lbnQsIG9yIG91dC1vZi1ib3VuZHMgaW5kZXhpbmcpIGZhbGwgd2l0aGluIHRoZSBzY29wZSBvZiBLQVNBTiByYXRoZXIgdGhhbiBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0cmFja2luZyBhbmQgZW5mb3JjaW5nIFNFTGludXggcGVybWlzc2lvbnMgYWNyb3NzIG11bHRpLWxheWVyIGJhY2tpbmcgZmlsZXMgKHN1Y2ggYXMgdGhvc2UgdXNlZCBieSBvdmVybGF5ZnMgYW5kIGVyb2ZzKS4gSXQgaW1wbGVtZW50cyBkeW5hbWljIGFsbG9jYXRpb24gYW5kIHJlZmVyZW5jZSB0cmFja2luZyBvZiBpbnRlcm1lZGlhdGUgYmFja2luZyBmaWxlIGxheWVycyBpbiBzZWxpbnV4X2JhY2tpbmdfZmlsZV9hbGxvYywgY2xlYW51cCBpbiBzZWxpbnV4X2JhY2tpbmdfZmlsZV9mcmVlLCBhbmQgbXVsdGktbGF5ZXIgcGVybWlzc2lvbiBjaGVja3MgZHVyaW5nIG1wcm90ZWN0IGluIHNlbGludXhfZmlsZV9tcHJvdGVjdC4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgY29yZSBzZWN1cml0eSBhbmQgZmlsZXN5c3RlbSBpbnRlcmFjdGlvbnMgYW5kIGFyZSB3ZWxsIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMjI6MjM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBmYTdhMGI1NTA2MjJjNjQ1ZDYyY2Y5YTM2NDk4YTdjYWJkNzI2Y2I2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMjkgMjI6MjM6MjEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jXG5pbmRleCAwMzVhYWYxMTNkMWRhLi5iNjc1MGVkY2M0NzgzIDEwMDY0NFxuLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNcbkBAIC0xNjc0LDI2ICYjNDM7MTY3NCwzMiBAQCBzdGF0aWMgaW50IGNyZWRfaGFzX2NhcGFiaWxpdHkoY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQsXG4gXHRyZXR1cm4gcmM7XG4gfVxuIFxuLS8qIENoZWNrIHdoZXRoZXIgYSB0YXNrIGhhcyBhIHBhcnRpY3VsYXIgcGVybWlzc2lvbiB0byBhbiBpbm9kZS5cbi0gICBUaGUgJiMzOTthZHAmIzM5OyBwYXJhbWV0ZXIgaXMgb3B0aW9uYWwgYW5kIGFsbG93cyBvdGhlciBhdWRpdFxuLSAgIGRhdGEgdG8gYmUgcGFzc2VkIChlLmcuIHRoZSBkZW50cnkpLiAqL1xuLXN0YXRpYyBpbnQgaW5vZGVfaGFzX3Blcm0oY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQsXG4tXHRcdFx0ICBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLVx0XHRcdCAgdTMyIHBlcm1zLFxuLVx0XHRcdCAgc3RydWN0IGNvbW1vbl9hdWRpdF9kYXRhICphZHApXG4mIzQzOy8qXG4mIzQzOyAqIENoZWNrIHdoZXRoZXIgYSBTSUQgaGFzIGEgcGFydGljdWxhciBwZXJtaXNzaW9uIHRvIGFuIGlub2RlLiAgVGhlICYjMzk7YWRwJiMzOTtcbiYjNDM7ICogcGFyYW1ldGVyIGlzIG9wdGlvbmFsIGFuZCBhbGxvd3Mgb3RoZXIgYXVkaXQgZGF0YSB0byBiZSBwYXNzZWQgKGUuZy4gdGhlXG4mIzQzOyAqIGRlbnRyeSkuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IGlub2RlX3NpZF9oYXNfcGVybSh1MzIgc2lkLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgcGVybXMsXG4mIzQzO1x0XHRcdCAgICAgIHN0cnVjdCBjb21tb25fYXVkaXRfZGF0YSAqYWRwKVxuIHtcbiBcdHN0cnVjdCBpbm9kZV9zZWN1cml0eV9zdHJ1Y3QgKmlzZWM7XG4tXHR1MzIgc2lkO1xuIFxuIFx0aWYgKHVubGlrZWx5KElTX1BSSVZBVEUoaW5vZGUpKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRzaWQgPSBjcmVkX3NpZChjcmVkKTtcbiBcdGlzZWMgPSBzZWxpbnV4X2lub2RlKGlub2RlKTtcbiBcbiBcdHJldHVybiBhdmNfaGFzX3Blcm0oc2lkLCBpc2VjLVx1MDAzZXNpZCwgaXNlYy1cdTAwM2VzY2xhc3MsIHBlcm1zLCBhZHApO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBpbm9kZV9oYXNfcGVybShjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCxcbiYjNDM7XHRcdFx0ICBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuJiM0MztcdFx0XHQgIHUzMiBwZXJtcyxcbiYjNDM7XHRcdFx0ICBzdHJ1Y3QgY29tbW9uX2F1ZGl0X2RhdGEgKmFkcClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBpbm9kZV9zaWRfaGFzX3Blcm0oY3JlZF9zaWQoY3JlZCksIGlub2RlLCBwZXJtcywgYWRwKTtcbiYjNDM7fVxuJiM0MztcbiAvKiBTYW1lIGFzIGlub2RlX2hhc19wZXJtLCBidXQgcGFzcyBleHBsaWNpdCBhdWRpdCBkYXRhIGNvbnRhaW5pbmdcbiAgICB0aGUgZGVudHJ5IHRvIGhlbHAgdGhlIGF1ZGl0aW5nIGNvZGUgdG8gbW9yZSBlYXNpbHkgZ2VuZXJhdGUgdGhlXG4gICAgcGF0aG5hbWUgaWYgbmVlZGVkLiAqL1xuQEAgLTM4NDMsMTcgJiM0MzszODQ5LDc0IEBAIHN0YXRpYyBpbnQgc2VsaW51eF9maWxlX2FsbG9jX3NlY3VyaXR5KHN0cnVjdCBmaWxlICpmaWxlKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIHUzMiBzZWxpbnV4X2ZpbGVfdXNlcl9zaWQoY29uc3Qgc3RydWN0IGZpbGUgKmZpbGUpXG4mIzQzO3tcbiYjNDM7XHRpZiAodW5saWtlbHkoZmlsZS1cdTAwM2VmX21vZGUgXHUwMDI2IEZNT0RFX0JBQ0tJTkcpKVxuJiM0MztcdFx0cmV0dXJuIHNlbGludXhfYmFja2luZ19maWxlKGZpbGUpLVx1MDAzZXVmX3NpZDtcbiYjNDM7XHRyZXR1cm4gc2VsaW51eF9maWxlKGZpbGUpLVx1MDAzZXNpZDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IHNlbGludXhfYmFja2luZ19maWxlX2FsbG9jKHN0cnVjdCBmaWxlICpiYWNraW5nX2ZpbGUsXG4gXHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgZmlsZSAqdXNlcl9maWxlKVxuIHtcbiBcdHN0cnVjdCBiYWNraW5nX2ZpbGVfc2VjdXJpdHlfc3RydWN0ICpiZnNlYztcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgYmFja2luZ19maWxlX3NlY3VyaXR5X3N0cnVjdCAqdWJmc2VjO1xuJiM0MztcdHN0cnVjdCBiYWNraW5nX2ZpbGVfc2VjdXJpdHlfbGF5ZXIgKmxheWVyO1xuJiM0MztcdHUzMiBpO1xuIFxuIFx0YmZzZWMgPSBzZWxpbnV4X2JhY2tpbmdfZmlsZShiYWNraW5nX2ZpbGUpO1xuLVx0YmZzZWMtXHUwMDNldWZfc2lkID0gc2VsaW51eF9maWxlKHVzZXJfZmlsZSktXHUwMDNlc2lkO1xuJiM0MztcdGJmc2VjLVx1MDAzZXVmX3NpZCA9IHNlbGludXhfZmlsZV91c2VyX3NpZCh1c2VyX2ZpbGUpO1xuJiM0MztcdGlmICghKHVzZXJfZmlsZS1cdTAwM2VmX21vZGUgXHUwMDI2IEZNT0RFX0JBQ0tJTkcpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHViZnNlYyA9IHNlbGludXhfYmFja2luZ19maWxlKHVzZXJfZmlsZSk7XG4mIzQzO1x0LyogYSB3cmFwcGVkIGNvdW50IHdvdWxkIG1ha2Uga21hbGxvY19hcnJheSgpIHJldHVybiBaRVJPX1NJWkVfUFRSICovXG4mIzQzO1x0aWYgKHVubGlrZWx5KHViZnNlYy1cdTAwM2VsYXllcl9jb3VudCA9PSBVMzJfTUFYKSlcbiYjNDM7XHRcdHJldHVybiAtRU9WRVJGTE9XO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoZSBmaW5hbCBWTUEgb25seSByZXRhaW5zIHRoZSBsb3dlc3QgYmFja2luZyBmaWxlLCBzbyByZWNvcmQgdGhlXG4mIzQzO1x0ICogd2hvbGUgY2hhaW4gaGVyZSByYXRoZXIgdGhhbiBpbiB0aGUgbW1hcCBob29rLCB3aGVyZSBjb25jdXJyZW50XG4mIzQzO1x0ICogbWFwcGluZ3Mgd291bGQgaGF2ZSB0byBiZSBzZXJpYWxpemVkLiAgU2l6ZSBpdCBkeW5hbWljYWxseTogZXJvZnNcbiYjNDM7XHQgKiBpbm9kZSBzaGFyaW5nIGFkZHMgYSBiYWNraW5nIGZpbGUgd2l0aG91dCBidW1waW5nIHNfc3RhY2tfZGVwdGguXG4mIzQzO1x0ICovXG4mIzQzO1x0YmZzZWMtXHUwMDNlbGF5ZXJzID0ga21hbGxvY19hcnJheSh1YmZzZWMtXHUwMDNlbGF5ZXJfY291bnQgJiM0MzsgMSxcbiYjNDM7XHRcdFx0XHQgICAgICBzaXplb2YoKmJmc2VjLVx1MDAzZWxheWVycyksIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghYmZzZWMtXHUwMDNlbGF5ZXJzKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHViZnNlYy1cdTAwM2VsYXllcl9jb3VudDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGxheWVyID0gXHUwMDI2YmZzZWMtXHUwMDNlbGF5ZXJzW2ldO1xuJiM0MztcdFx0KmxheWVyID0gdWJmc2VjLVx1MDAzZWxheWVyc1tpXTtcbiYjNDM7XHRcdHBhdGhfZ2V0KFx1MDAyNmxheWVyLVx1MDAzZXBhdGgpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogZl9wYXRoLCBub3QgZmlsZV91c2VyX3BhdGgoKTogdGhpcyBsYXllciwgbm90IHRoZSB0b3AtbGV2ZWwgZmlsZSAqL1xuJiM0MztcdGxheWVyID0gXHUwMDI2YmZzZWMtXHUwMDNlbGF5ZXJzW2ldO1xuJiM0MztcdGxheWVyLVx1MDAzZXBhdGggPSB1c2VyX2ZpbGUtXHUwMDNlZl9wYXRoO1xuJiM0MztcdGxheWVyLVx1MDAzZW1vdW50ZXJfc2lkID0gY3JlZF9zaWQodXNlcl9maWxlLVx1MDAzZWZfY3JlZCk7XG4mIzQzO1x0bGF5ZXItXHUwMDNlZmRfc2lkID0gc2VsaW51eF9maWxlKHVzZXJfZmlsZSktXHUwMDNlc2lkO1xuJiM0MztcdHBhdGhfZ2V0KFx1MDAyNmxheWVyLVx1MDAzZXBhdGgpO1xuJiM0MztcdGJmc2VjLVx1MDAzZWxheWVyX2NvdW50ID0gdWJmc2VjLVx1MDAzZWxheWVyX2NvdW50ICYjNDM7IDE7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHNlbGludXhfYmFja2luZ19maWxlX2ZyZWUoc3RydWN0IGZpbGUgKmJhY2tpbmdfZmlsZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBiYWNraW5nX2ZpbGVfc2VjdXJpdHlfc3RydWN0ICpiZnNlYztcbiYjNDM7XG4mIzQzO1x0Lyogc2VjdXJpdHlfYmFja2luZ19maWxlX2ZyZWUoKSBtYXkgYmUgY2FsbGVkIHR3aWNlIGFmdGVyIGFuIGVycm9yICovXG4mIzQzO1x0aWYgKCFiYWNraW5nX2ZpbGVfc2VjdXJpdHkoYmFja2luZ19maWxlKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0YmZzZWMgPSBzZWxpbnV4X2JhY2tpbmdfZmlsZShiYWNraW5nX2ZpbGUpO1xuJiM0MztcdHdoaWxlIChiZnNlYy1cdTAwM2VsYXllcl9jb3VudClcbiYjNDM7XHRcdHBhdGhfcHV0KFx1MDAyNmJmc2VjLVx1MDAzZWxheWVyc1stLWJmc2VjLVx1MDAzZWxheWVyX2NvdW50XS5wYXRoKTtcbiYjNDM7XHRrZnJlZShiZnNlYy1cdTAwM2VsYXllcnMpO1xuJiM0MztcdGJmc2VjLVx1MDAzZWxheWVycyA9IE5VTEw7XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBDaGVjayB3aGV0aGVyIGEgdGFzayBoYXMgdGhlIGlvY3RsIHBlcm1pc3Npb24gYW5kIGNtZFxuICAqIG9wZXJhdGlvbiB0byBhbiBpbm9kZS5cbkBAIC0zOTcxLDYgJiM0Mzs0MDM0LDUzIEBAIHN0YXRpYyBpbnQgc2VsaW51eF9maWxlX2lvY3RsX2NvbXBhdChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCxcbiBcbiBzdGF0aWMgaW50IGRlZmF1bHRfbm9leGVjIF9fcm9fYWZ0ZXJfaW5pdDtcbiBcbiYjNDM7c3RhdGljIHUzMiBmaWxlX21hcF9wcm90X3RvX2F2KHVuc2lnbmVkIGxvbmcgcHJvdCwgYm9vbCBzaGFyZWQpXG4mIzQzO3tcbiYjNDM7XHR1MzIgYXYgPSBGSUxFX19SRUFEO1xuJiM0MztcbiYjNDM7XHRpZiAoc2hhcmVkIFx1MDAyNlx1MDAyNiAocHJvdCBcdTAwMjYgUFJPVF9XUklURSkpXG4mIzQzO1x0XHRhdiB8PSBGSUxFX19XUklURTtcbiYjNDM7XHRpZiAocHJvdCBcdTAwMjYgUFJPVF9FWEVDKVxuJiM0MztcdFx0YXYgfD0gRklMRV9fRVhFQ1VURTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGF2O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGJhY2tpbmdfbW91bnRlcnNfaGFzX3Blcm0oY29uc3Qgc3RydWN0IGZpbGUgKmZpbGUsIHUzMiBhdilcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBiYWNraW5nX2ZpbGVfc2VjdXJpdHlfc3RydWN0ICpiZnNlYztcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgYmFja2luZ19maWxlX3NlY3VyaXR5X2xheWVyICpsYXllcjtcbiYjNDM7XHRzdHJ1Y3QgY29tbW9uX2F1ZGl0X2RhdGEgYWQ7XG4mIzQzO1x0c3RydWN0IGlub2RlICppbm9kZTtcbiYjNDM7XHR1MzIgaTtcbiYjNDM7XHRpbnQgcmM7XG4mIzQzO1xuJiM0MztcdGlmIChXQVJOX09OX09OQ0UoIShmaWxlLVx1MDAzZWZfbW9kZSBcdTAwMjYgRk1PREVfQkFDS0lORykpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU87XG4mIzQzO1xuJiM0MztcdGJmc2VjID0gc2VsaW51eF9iYWNraW5nX2ZpbGUoZmlsZSk7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgYmZzZWMtXHUwMDNlbGF5ZXJfY291bnQ7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRsYXllciA9IFx1MDAyNmJmc2VjLVx1MDAzZWxheWVyc1tpXTtcbiYjNDM7XHRcdGlub2RlID0gZF9pbm9kZShsYXllci1cdTAwM2VwYXRoLmRlbnRyeSk7XG4mIzQzO1xuJiM0MztcdFx0YWQudHlwZSA9IExTTV9BVURJVF9EQVRBX1BBVEg7XG4mIzQzO1x0XHRhZC51LnBhdGggPSBsYXllci1cdTAwM2VwYXRoO1xuJiM0MztcbiYjNDM7XHRcdGlmIChsYXllci1cdTAwM2Vtb3VudGVyX3NpZCAhPSBsYXllci1cdTAwM2VmZF9zaWQpIHtcbiYjNDM7XHRcdFx0cmMgPSBhdmNfaGFzX3Blcm0obGF5ZXItXHUwMDNlbW91bnRlcl9zaWQsIGxheWVyLVx1MDAzZWZkX3NpZCxcbiYjNDM7XHRcdFx0XHRcdCAgU0VDQ0xBU1NfRkQsIEZEX19VU0UsIFx1MDAyNmFkKTtcbiYjNDM7XHRcdFx0aWYgKHJjKVxuJiM0MztcdFx0XHRcdHJldHVybiByYztcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRyYyA9IGlub2RlX3NpZF9oYXNfcGVybShsYXllci1cdTAwM2Vtb3VudGVyX3NpZCwgaW5vZGUsIGF2LCBcdTAwMjZhZCk7XG4mIzQzO1x0XHRpZiAocmMpXG4mIzQzO1x0XHRcdHJldHVybiByYztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgX19maWxlX21hcF9wcm90X2NoZWNrKGNvbnN0IHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIHByb3QsXG4gXHRcdFx0XHQgYm9vbCBzaGFyZWQsIGJvb2wgbW91bnRlcl9jaGVjayxcbiBcdFx0XHRcdCBib29sIGJmX3VzZXJfZmlsZSlcbkBAIC00MDA0LDE0ICYjNDM7NDExNCwxMCBAQCBzdGF0aWMgaW50IF9fZmlsZV9tYXBfcHJvdF9jaGVjayhjb25zdCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBwcm90LFxuIFx0aWYgKGZpbGUpIHtcbiBcdFx0Y29uc3Qgc3RydWN0IGNyZWQgKmNyZWQgPSBtb3VudGVyX2NoZWNrID9cbiBcdFx0XHRcdGZpbGUtXHUwMDNlZl9jcmVkIDogY3VycmVudF9jcmVkKCk7XG4tXHRcdC8qIFwmIzM0O3JlYWRcJiMzNDsgYWx3YXlzIHBvc3NpYmxlLCBcJiMzNDt3cml0ZVwmIzM0OyBvbmx5IGlmIHNoYXJlZCAqL1xuLVx0XHR1MzIgYXYgPSBGSUxFX19SRUFEO1xuLVx0XHRpZiAoc2hhcmVkIFx1MDAyNlx1MDAyNiBwcm90X3dyaXRlKVxuLVx0XHRcdGF2IHw9IEZJTEVfX1dSSVRFO1xuLVx0XHRpZiAocHJvdF9leGVjKVxuLVx0XHRcdGF2IHw9IEZJTEVfX0VYRUNVVEU7XG4gXG4tXHRcdHJldHVybiBfX2ZpbGVfaGFzX3Blcm0oY3JlZCwgZmlsZSwgYXYsIGJmX3VzZXJfZmlsZSk7XG4mIzQzO1x0XHRyZXR1cm4gX19maWxlX2hhc19wZXJtKGNyZWQsIGZpbGUsXG4mIzQzO1x0XHRcdFx0ICAgICAgIGZpbGVfbWFwX3Byb3RfdG9fYXYocHJvdCwgc2hhcmVkKSxcbiYjNDM7XHRcdFx0XHQgICAgICAgYmZfdXNlcl9maWxlKTtcbiBcdH1cbiBcbiBcdHJldHVybiAwO1xuQEAgLTQxMDYsNiAmIzQzOzQyMTIsNyBAQCBzdGF0aWMgaW50IHNlbGludXhfZmlsZV9tcHJvdGVjdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdGludCByYztcbiBcdGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkID0gY3VycmVudF9jcmVkKCk7XG4gXHR1MzIgc2lkID0gY3JlZF9zaWQoY3JlZCk7XG4mIzQzO1x0dTMyIGF2O1xuIFx0Y29uc3Qgc3RydWN0IGZpbGUgKmZpbGUgPSB2bWEtXHUwMDNldm1fZmlsZTtcbiBcdGJvb2wgYmFja2luZ19maWxlO1xuIFx0Ym9vbCBzaGFyZWQgPSB2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1NIQVJFRDtcbkBAIC00MTQ5LDYgJiM0Mzs0MjU2LDEwIEBAIHN0YXRpYyBpbnQgc2VsaW51eF9maWxlX21wcm90ZWN0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRcdGlmIChyYylcbiBcdFx0XHRcdHJldHVybiByYztcbiBcdFx0XHRpZiAoYmFja2luZ19maWxlKSB7XG4mIzQzO1x0XHRcdFx0cmMgPSBiYWNraW5nX21vdW50ZXJzX2hhc19wZXJtKGZpbGUsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgICAgIEZJTEVfX0VYRUNNT0QpO1xuJiM0MztcdFx0XHRcdGlmIChyYylcbiYjNDM7XHRcdFx0XHRcdHJldHVybiByYztcbiBcdFx0XHRcdHJjID0gZmlsZV9oYXNfcGVybShmaWxlLVx1MDAzZWZfY3JlZCwgZmlsZSxcbiBcdFx0XHRcdFx0XHQgICBGSUxFX19FWEVDTU9EKTtcbiBcdFx0XHRcdGlmIChyYylcbkBAIC00MTYxLDYgJiM0Mzs0MjcyLDEwIEBAIHN0YXRpYyBpbnQgc2VsaW51eF9maWxlX21wcm90ZWN0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0aWYgKHJjKVxuIFx0XHRyZXR1cm4gcmM7XG4gXHRpZiAoYmFja2luZ19maWxlKSB7XG4mIzQzO1x0XHRhdiA9IGZpbGVfbWFwX3Byb3RfdG9fYXYocHJvdCwgc2hhcmVkKTtcbiYjNDM7XHRcdHJjID0gYmFja2luZ19tb3VudGVyc19oYXNfcGVybShmaWxlLCBhdik7XG4mIzQzO1x0XHRpZiAocmMpXG4mIzQzO1x0XHRcdHJldHVybiByYztcbiBcdFx0cmMgPSBmaWxlX21hcF9wcm90X2NoZWNrKGZpbGUsIHByb3QsIHNoYXJlZCwgdHJ1ZSk7XG4gXHRcdGlmIChyYylcbiBcdFx0XHRyZXR1cm4gcmM7XG5AQCAtNzYzNSw2ICYjNDM7Nzc1MCw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2VjdXJpdHlfaG9va19saXN0IHNlbGludXhfaG9va3NbXSBfX3JvX2FmdGVyX2luaXQgPSB7XG4gXHRMU01fSE9PS19JTklUKGZpbGVfcGVybWlzc2lvbiwgc2VsaW51eF9maWxlX3Blcm1pc3Npb24pLFxuIFx0TFNNX0hPT0tfSU5JVChmaWxlX2FsbG9jX3NlY3VyaXR5LCBzZWxpbnV4X2ZpbGVfYWxsb2Nfc2VjdXJpdHkpLFxuIFx0TFNNX0hPT0tfSU5JVChiYWNraW5nX2ZpbGVfYWxsb2MsIHNlbGludXhfYmFja2luZ19maWxlX2FsbG9jKSxcbiYjNDM7XHRMU01fSE9PS19JTklUKGJhY2tpbmdfZmlsZV9mcmVlLCBzZWxpbnV4X2JhY2tpbmdfZmlsZV9mcmVlKSxcbiBcdExTTV9IT09LX0lOSVQoZmlsZV9pb2N0bCwgc2VsaW51eF9maWxlX2lvY3RsKSxcbiBcdExTTV9IT09LX0lOSVQoZmlsZV9pb2N0bF9jb21wYXQsIHNlbGludXhfZmlsZV9pb2N0bF9jb21wYXQpLFxuIFx0TFNNX0hPT0tfSU5JVChtbWFwX2ZpbGUsIHNlbGludXhfbW1hcF9maWxlKSxcbmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvb2Jqc2VjLmggYi9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvb2Jqc2VjLmhcbmluZGV4IDNjMGExNmVjOTc4YjAuLjJmMjE1NjgyNTFmZmUgMTAwNjQ0XG4tLS0gYS9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvb2Jqc2VjLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9vYmpzZWMuaFxuQEAgLTg2LDggJiM0Mzs4NiwxNiBAQCBzdHJ1Y3QgZmlsZV9zZWN1cml0eV9zdHJ1Y3Qge1xuIFx0dTMyIHBzZXFubzsgLyogUG9saWN5IHNlcW5vIGF0IHRoZSB0aW1lIG9mIGZpbGUgb3BlbiAqL1xuIH07XG4gXG4mIzQzO3N0cnVjdCBiYWNraW5nX2ZpbGVfc2VjdXJpdHlfbGF5ZXIge1xuJiM0MztcdHN0cnVjdCBwYXRoIHBhdGg7IC8qIHRoaXMgbGF5ZXImIzM5O3MgcmVhbCBwYXRoICovXG4mIzQzO1x0dTMyIG1vdW50ZXJfc2lkOyAvKiBTSUQgb2YgdGhlIG1vdW50ZXIgdGhhdCBvcGVuZWQgaXQgKi9cbiYjNDM7XHR1MzIgZmRfc2lkOyAvKiBTSUQgb2YgaXRzIG9wZW4gZmlsZSBkZXNjcmlwdGlvbiAqL1xuJiM0Mzt9O1xuJiM0MztcbiBzdHJ1Y3QgYmFja2luZ19maWxlX3NlY3VyaXR5X3N0cnVjdCB7XG4tXHR1MzIgdWZfc2lkOyAvKiBhc3NvY2lhdGVkIHVzZXIgZmlsZSBmc2VjLVx1MDAzZXNpZCAqL1xuJiM0MztcdHUzMiB1Zl9zaWQ7IC8qIHRvcC1sZXZlbCB1c2VyIGZpbGUgZnNlYy1cdTAwM2VzaWQgKi9cbiYjNDM7XHR1MzIgbGF5ZXJfY291bnQ7IC8qIG51bWJlciBvZiBpbnRlcm1lZGlhdGUgYmFja2luZyBmaWxlcyAqL1xuJiM0MztcdHN0cnVjdCBiYWNraW5nX2ZpbGVfc2VjdXJpdHlfbGF5ZXIgKmxheWVycztcbiB9O1xuIFxuIHN0cnVjdCBzdXBlcmJsb2NrX3NlY3VyaXR5X3N0cnVjdCB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMjI6MjM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U0VDVVJJVFkmIzM0OywKICAgICYjMzQ7U0VDVVJJVFlfU0VMSU5VWCYjMzQ7LAogICAgJiMzNDtTRUNVUklUWV9ORVRXT1JLJiMzNDssCiAgICAmIzM0O0FVRElUJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O09WRVJMQVlfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzZWxpbnV4X2JhY2tpbmdfZmlsZV9hbGxvYyYjMzQ7LAogICAgJiMzNDtzZWxpbnV4X2JhY2tpbmdfZmlsZV9mcmVlJiMzNDssCiAgICAmIzM0O3NlbGludXhfZmlsZV9tcHJvdGVjdCYjMzQ7LAogICAgJiMzNDtzZWN1cml0eV9iYWNraW5nX2ZpbGVfYWxsb2MmIzM0OywKICAgICYjMzQ7c2VjdXJpdHlfYmFja2luZ19maWxlX2ZyZWUmIzM0OywKICAgICYjMzQ7c2VjdXJpdHlfZmlsZV9tcHJvdGVjdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRyYWNraW5nIGFuZCBlbmZvcmNpbmcgU0VMaW51eCBwZXJtaXNzaW9ucyBhY3Jvc3MgbXVsdGktbGF5ZXIgYmFja2luZyBmaWxlcyAoc3VjaCBhcyB0aG9zZSB1c2VkIGJ5IG92ZXJsYXlmcyBhbmQgZXJvZnMpLiBJdCBpbXBsZW1lbnRzIGR5bmFtaWMgYWxsb2NhdGlvbiBhbmQgcmVmZXJlbmNlIHRyYWNraW5nIG9mIGludGVybWVkaWF0ZSBiYWNraW5nIGZpbGUgbGF5ZXJzIGluIHNlbGludXhfYmFja2luZ19maWxlX2FsbG9jLCBjbGVhbnVwIGluIHNlbGludXhfYmFja2luZ19maWxlX2ZyZWUsIGFuZCBtdWx0aS1sYXllciBwZXJtaXNzaW9uIGNoZWNrcyBkdXJpbmcgbXByb3RlY3QgaW4gc2VsaW51eF9maWxlX21wcm90ZWN0LiBUaGVzZSBjaGFuZ2VzIG1vZGlmeSBjb3JlIHNlY3VyaXR5IGFuZCBmaWxlc3lzdGVtIGludGVyYWN0aW9ucyBhbmQgYXJlIHdlbGwgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGZhN2EwYjU1MDYyMmM2NDVkNjJjZjlhMzY0OThhN2NhYmQ3MjZjYjYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEF1ZyAyOSAyMjoyMzoyMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYwppbmRleCAwMzVhYWYxMTNkMWRhLi5iNjc1MGVkY2M0NzgzIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKJiM0MzsmIzQzOyYjNDM7IGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCkBAIC0xNjc0LDI2ICYjNDM7MTY3NCwzMiBAQCBzdGF0aWMgaW50IGNyZWRfaGFzX2NhcGFiaWxpdHkoY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQsCiAJcmV0dXJuIHJjOwogfQogCi0vKiBDaGVjayB3aGV0aGVyIGEgdGFzayBoYXMgYSBwYXJ0aWN1bGFyIHBlcm1pc3Npb24gdG8gYW4gaW5vZGUuCi0gICBUaGUgJiMzOTthZHAmIzM5OyBwYXJhbWV0ZXIgaXMgb3B0aW9uYWwgYW5kIGFsbG93cyBvdGhlciBhdWRpdAotICAgZGF0YSB0byBiZSBwYXNzZWQgKGUuZy4gdGhlIGRlbnRyeSkuICovCi1zdGF0aWMgaW50IGlub2RlX2hhc19wZXJtKGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkLAotCQkJICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJICB1MzIgcGVybXMsCi0JCQkgIHN0cnVjdCBjb21tb25fYXVkaXRfZGF0YSAqYWRwKQomIzQzOy8qCiYjNDM7ICogQ2hlY2sgd2hldGhlciBhIFNJRCBoYXMgYSBwYXJ0aWN1bGFyIHBlcm1pc3Npb24gdG8gYW4gaW5vZGUuICBUaGUgJiMzOTthZHAmIzM5OwomIzQzOyAqIHBhcmFtZXRlciBpcyBvcHRpb25hbCBhbmQgYWxsb3dzIG90aGVyIGF1ZGl0IGRhdGEgdG8gYmUgcGFzc2VkIChlLmcuIHRoZQomIzQzOyAqIGRlbnRyeSkuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBpbm9kZV9zaWRfaGFzX3Blcm0odTMyIHNpZCwgc3RydWN0IGlub2RlICppbm9kZSwgdTMyIHBlcm1zLAomIzQzOwkJCSAgICAgIHN0cnVjdCBjb21tb25fYXVkaXRfZGF0YSAqYWRwKQogewogCXN0cnVjdCBpbm9kZV9zZWN1cml0eV9zdHJ1Y3QgKmlzZWM7Ci0JdTMyIHNpZDsKIAogCWlmICh1bmxpa2VseShJU19QUklWQVRFKGlub2RlKSkpCiAJCXJldHVybiAwOwogCi0Jc2lkID0gY3JlZF9zaWQoY3JlZCk7CiAJaXNlYyA9IHNlbGludXhfaW5vZGUoaW5vZGUpOwogCiAJcmV0dXJuIGF2Y19oYXNfcGVybShzaWQsIGlzZWMtJmd0O3NpZCwgaXNlYy0mZ3Q7c2NsYXNzLCBwZXJtcywgYWRwKTsKIH0KIAomIzQzO3N0YXRpYyBpbnQgaW5vZGVfaGFzX3Blcm0oY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQsCiYjNDM7CQkJICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAomIzQzOwkJCSAgdTMyIHBlcm1zLAomIzQzOwkJCSAgc3RydWN0IGNvbW1vbl9hdWRpdF9kYXRhICphZHApCiYjNDM7ewomIzQzOwlyZXR1cm4gaW5vZGVfc2lkX2hhc19wZXJtKGNyZWRfc2lkKGNyZWQpLCBpbm9kZSwgcGVybXMsIGFkcCk7CiYjNDM7fQomIzQzOwogLyogU2FtZSBhcyBpbm9kZV9oYXNfcGVybSwgYnV0IHBhc3MgZXhwbGljaXQgYXVkaXQgZGF0YSBjb250YWluaW5nCiAgICB0aGUgZGVudHJ5IHRvIGhlbHAgdGhlIGF1ZGl0aW5nIGNvZGUgdG8gbW9yZSBlYXNpbHkgZ2VuZXJhdGUgdGhlCiAgICBwYXRobmFtZSBpZiBuZWVkZWQuICovCkBAIC0zODQzLDE3ICYjNDM7Mzg0OSw3NCBAQCBzdGF0aWMgaW50IHNlbGludXhfZmlsZV9hbGxvY19zZWN1cml0eShzdHJ1Y3QgZmlsZSAqZmlsZSkKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgdTMyIHNlbGludXhfZmlsZV91c2VyX3NpZChjb25zdCBzdHJ1Y3QgZmlsZSAqZmlsZSkKJiM0Mzt7CiYjNDM7CWlmICh1bmxpa2VseShmaWxlLSZndDtmX21vZGUgJmFtcDsgRk1PREVfQkFDS0lORykpCiYjNDM7CQlyZXR1cm4gc2VsaW51eF9iYWNraW5nX2ZpbGUoZmlsZSktJmd0O3VmX3NpZDsKJiM0MzsJcmV0dXJuIHNlbGludXhfZmlsZShmaWxlKS0mZ3Q7c2lkOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgc2VsaW51eF9iYWNraW5nX2ZpbGVfYWxsb2Moc3RydWN0IGZpbGUgKmJhY2tpbmdfZmlsZSwKIAkJCQkgICAgICBjb25zdCBzdHJ1Y3QgZmlsZSAqdXNlcl9maWxlKQogewogCXN0cnVjdCBiYWNraW5nX2ZpbGVfc2VjdXJpdHlfc3RydWN0ICpiZnNlYzsKJiM0MzsJY29uc3Qgc3RydWN0IGJhY2tpbmdfZmlsZV9zZWN1cml0eV9zdHJ1Y3QgKnViZnNlYzsKJiM0MzsJc3RydWN0IGJhY2tpbmdfZmlsZV9zZWN1cml0eV9sYXllciAqbGF5ZXI7CiYjNDM7CXUzMiBpOwogCiAJYmZzZWMgPSBzZWxpbnV4X2JhY2tpbmdfZmlsZShiYWNraW5nX2ZpbGUpOwotCWJmc2VjLSZndDt1Zl9zaWQgPSBzZWxpbnV4X2ZpbGUodXNlcl9maWxlKS0mZ3Q7c2lkOwomIzQzOwliZnNlYy0mZ3Q7dWZfc2lkID0gc2VsaW51eF9maWxlX3VzZXJfc2lkKHVzZXJfZmlsZSk7CiYjNDM7CWlmICghKHVzZXJfZmlsZS0mZ3Q7Zl9tb2RlICZhbXA7IEZNT0RFX0JBQ0tJTkcpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXViZnNlYyA9IHNlbGludXhfYmFja2luZ19maWxlKHVzZXJfZmlsZSk7CiYjNDM7CS8qIGEgd3JhcHBlZCBjb3VudCB3b3VsZCBtYWtlIGttYWxsb2NfYXJyYXkoKSByZXR1cm4gWkVST19TSVpFX1BUUiAqLwomIzQzOwlpZiAodW5saWtlbHkodWJmc2VjLSZndDtsYXllcl9jb3VudCA9PSBVMzJfTUFYKSkKJiM0MzsJCXJldHVybiAtRU9WRVJGTE9XOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBUaGUgZmluYWwgVk1BIG9ubHkgcmV0YWlucyB0aGUgbG93ZXN0IGJhY2tpbmcgZmlsZSwgc28gcmVjb3JkIHRoZQomIzQzOwkgKiB3aG9sZSBjaGFpbiBoZXJlIHJhdGhlciB0aGFuIGluIHRoZSBtbWFwIGhvb2ssIHdoZXJlIGNvbmN1cnJlbnQKJiM0MzsJICogbWFwcGluZ3Mgd291bGQgaGF2ZSB0byBiZSBzZXJpYWxpemVkLiAgU2l6ZSBpdCBkeW5hbWljYWxseTogZXJvZnMKJiM0MzsJICogaW5vZGUgc2hhcmluZyBhZGRzIGEgYmFja2luZyBmaWxlIHdpdGhvdXQgYnVtcGluZyBzX3N0YWNrX2RlcHRoLgomIzQzOwkgKi8KJiM0MzsJYmZzZWMtJmd0O2xheWVycyA9IGttYWxsb2NfYXJyYXkodWJmc2VjLSZndDtsYXllcl9jb3VudCAmIzQzOyAxLAomIzQzOwkJCQkgICAgICBzaXplb2YoKmJmc2VjLSZndDtsYXllcnMpLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFiZnNlYy0mZ3Q7bGF5ZXJzKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyB1YmZzZWMtJmd0O2xheWVyX2NvdW50OyBpJiM0MzsmIzQzOykgewomIzQzOwkJbGF5ZXIgPSAmYW1wO2Jmc2VjLSZndDtsYXllcnNbaV07CiYjNDM7CQkqbGF5ZXIgPSB1YmZzZWMtJmd0O2xheWVyc1tpXTsKJiM0MzsJCXBhdGhfZ2V0KCZhbXA7bGF5ZXItJmd0O3BhdGgpOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIGZfcGF0aCwgbm90IGZpbGVfdXNlcl9wYXRoKCk6IHRoaXMgbGF5ZXIsIG5vdCB0aGUgdG9wLWxldmVsIGZpbGUgKi8KJiM0MzsJbGF5ZXIgPSAmYW1wO2Jmc2VjLSZndDtsYXllcnNbaV07CiYjNDM7CWxheWVyLSZndDtwYXRoID0gdXNlcl9maWxlLSZndDtmX3BhdGg7CiYjNDM7CWxheWVyLSZndDttb3VudGVyX3NpZCA9IGNyZWRfc2lkKHVzZXJfZmlsZS0mZ3Q7Zl9jcmVkKTsKJiM0MzsJbGF5ZXItJmd0O2ZkX3NpZCA9IHNlbGludXhfZmlsZSh1c2VyX2ZpbGUpLSZndDtzaWQ7CiYjNDM7CXBhdGhfZ2V0KCZhbXA7bGF5ZXItJmd0O3BhdGgpOwomIzQzOwliZnNlYy0mZ3Q7bGF5ZXJfY291bnQgPSB1YmZzZWMtJmd0O2xheWVyX2NvdW50ICYjNDM7IDE7CiAKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHNlbGludXhfYmFja2luZ19maWxlX2ZyZWUoc3RydWN0IGZpbGUgKmJhY2tpbmdfZmlsZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBiYWNraW5nX2ZpbGVfc2VjdXJpdHlfc3RydWN0ICpiZnNlYzsKJiM0MzsKJiM0MzsJLyogc2VjdXJpdHlfYmFja2luZ19maWxlX2ZyZWUoKSBtYXkgYmUgY2FsbGVkIHR3aWNlIGFmdGVyIGFuIGVycm9yICovCiYjNDM7CWlmICghYmFja2luZ19maWxlX3NlY3VyaXR5KGJhY2tpbmdfZmlsZSkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWJmc2VjID0gc2VsaW51eF9iYWNraW5nX2ZpbGUoYmFja2luZ19maWxlKTsKJiM0MzsJd2hpbGUgKGJmc2VjLSZndDtsYXllcl9jb3VudCkKJiM0MzsJCXBhdGhfcHV0KCZhbXA7YmZzZWMtJmd0O2xheWVyc1stLWJmc2VjLSZndDtsYXllcl9jb3VudF0ucGF0aCk7CiYjNDM7CWtmcmVlKGJmc2VjLSZndDtsYXllcnMpOwomIzQzOwliZnNlYy0mZ3Q7bGF5ZXJzID0gTlVMTDsKJiM0Mzt9CiYjNDM7CiAvKgogICogQ2hlY2sgd2hldGhlciBhIHRhc2sgaGFzIHRoZSBpb2N0bCBwZXJtaXNzaW9uIGFuZCBjbWQKICAqIG9wZXJhdGlvbiB0byBhbiBpbm9kZS4KQEAgLTM5NzEsNiAmIzQzOzQwMzQsNTMgQEAgc3RhdGljIGludCBzZWxpbnV4X2ZpbGVfaW9jdGxfY29tcGF0KHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLAogCiBzdGF0aWMgaW50IGRlZmF1bHRfbm9leGVjIF9fcm9fYWZ0ZXJfaW5pdDsKIAomIzQzO3N0YXRpYyB1MzIgZmlsZV9tYXBfcHJvdF90b19hdih1bnNpZ25lZCBsb25nIHByb3QsIGJvb2wgc2hhcmVkKQomIzQzO3sKJiM0MzsJdTMyIGF2ID0gRklMRV9fUkVBRDsKJiM0MzsKJiM0MzsJaWYgKHNoYXJlZCAmYW1wOyZhbXA7IChwcm90ICZhbXA7IFBST1RfV1JJVEUpKQomIzQzOwkJYXYgfD0gRklMRV9fV1JJVEU7CiYjNDM7CWlmIChwcm90ICZhbXA7IFBST1RfRVhFQykKJiM0MzsJCWF2IHw9IEZJTEVfX0VYRUNVVEU7CiYjNDM7CiYjNDM7CXJldHVybiBhdjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBiYWNraW5nX21vdW50ZXJzX2hhc19wZXJtKGNvbnN0IHN0cnVjdCBmaWxlICpmaWxlLCB1MzIgYXYpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgYmFja2luZ19maWxlX3NlY3VyaXR5X3N0cnVjdCAqYmZzZWM7CiYjNDM7CWNvbnN0IHN0cnVjdCBiYWNraW5nX2ZpbGVfc2VjdXJpdHlfbGF5ZXIgKmxheWVyOwomIzQzOwlzdHJ1Y3QgY29tbW9uX2F1ZGl0X2RhdGEgYWQ7CiYjNDM7CXN0cnVjdCBpbm9kZSAqaW5vZGU7CiYjNDM7CXUzMiBpOwomIzQzOwlpbnQgcmM7CiYjNDM7CiYjNDM7CWlmIChXQVJOX09OX09OQ0UoIShmaWxlLSZndDtmX21vZGUgJmFtcDsgRk1PREVfQkFDS0lORykpKQomIzQzOwkJcmV0dXJuIC1FSU87CiYjNDM7CiYjNDM7CWJmc2VjID0gc2VsaW51eF9iYWNraW5nX2ZpbGUoZmlsZSk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBiZnNlYy0mZ3Q7bGF5ZXJfY291bnQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlsYXllciA9ICZhbXA7YmZzZWMtJmd0O2xheWVyc1tpXTsKJiM0MzsJCWlub2RlID0gZF9pbm9kZShsYXllci0mZ3Q7cGF0aC5kZW50cnkpOwomIzQzOwomIzQzOwkJYWQudHlwZSA9IExTTV9BVURJVF9EQVRBX1BBVEg7CiYjNDM7CQlhZC51LnBhdGggPSBsYXllci0mZ3Q7cGF0aDsKJiM0MzsKJiM0MzsJCWlmIChsYXllci0mZ3Q7bW91bnRlcl9zaWQgIT0gbGF5ZXItJmd0O2ZkX3NpZCkgewomIzQzOwkJCXJjID0gYXZjX2hhc19wZXJtKGxheWVyLSZndDttb3VudGVyX3NpZCwgbGF5ZXItJmd0O2ZkX3NpZCwKJiM0MzsJCQkJCSAgU0VDQ0xBU1NfRkQsIEZEX19VU0UsICZhbXA7YWQpOwomIzQzOwkJCWlmIChyYykKJiM0MzsJCQkJcmV0dXJuIHJjOwomIzQzOwkJfQomIzQzOwomIzQzOwkJcmMgPSBpbm9kZV9zaWRfaGFzX3Blcm0obGF5ZXItJmd0O21vdW50ZXJfc2lkLCBpbm9kZSwgYXYsICZhbXA7YWQpOwomIzQzOwkJaWYgKHJjKQomIzQzOwkJCXJldHVybiByYzsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IF9fZmlsZV9tYXBfcHJvdF9jaGVjayhjb25zdCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBwcm90LAogCQkJCSBib29sIHNoYXJlZCwgYm9vbCBtb3VudGVyX2NoZWNrLAogCQkJCSBib29sIGJmX3VzZXJfZmlsZSkKQEAgLTQwMDQsMTQgJiM0Mzs0MTE0LDEwIEBAIHN0YXRpYyBpbnQgX19maWxlX21hcF9wcm90X2NoZWNrKGNvbnN0IHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIHByb3QsCiAJaWYgKGZpbGUpIHsKIAkJY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQgPSBtb3VudGVyX2NoZWNrID8KIAkJCQlmaWxlLSZndDtmX2NyZWQgOiBjdXJyZW50X2NyZWQoKTsKLQkJLyogJiMzNDtyZWFkJiMzNDsgYWx3YXlzIHBvc3NpYmxlLCAmIzM0O3dyaXRlJiMzNDsgb25seSBpZiBzaGFyZWQgKi8KLQkJdTMyIGF2ID0gRklMRV9fUkVBRDsKLQkJaWYgKHNoYXJlZCAmYW1wOyZhbXA7IHByb3Rfd3JpdGUpCi0JCQlhdiB8PSBGSUxFX19XUklURTsKLQkJaWYgKHByb3RfZXhlYykKLQkJCWF2IHw9IEZJTEVfX0VYRUNVVEU7CiAKLQkJcmV0dXJuIF9fZmlsZV9oYXNfcGVybShjcmVkLCBmaWxlLCBhdiwgYmZfdXNlcl9maWxlKTsKJiM0MzsJCXJldHVybiBfX2ZpbGVfaGFzX3Blcm0oY3JlZCwgZmlsZSwKJiM0MzsJCQkJICAgICAgIGZpbGVfbWFwX3Byb3RfdG9fYXYocHJvdCwgc2hhcmVkKSwKJiM0MzsJCQkJICAgICAgIGJmX3VzZXJfZmlsZSk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC00MTA2LDYgJiM0Mzs0MjEyLDcgQEAgc3RhdGljIGludCBzZWxpbnV4X2ZpbGVfbXByb3RlY3Qoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJaW50IHJjOwogCWNvbnN0IHN0cnVjdCBjcmVkICpjcmVkID0gY3VycmVudF9jcmVkKCk7CiAJdTMyIHNpZCA9IGNyZWRfc2lkKGNyZWQpOwomIzQzOwl1MzIgYXY7CiAJY29uc3Qgc3RydWN0IGZpbGUgKmZpbGUgPSB2bWEtJmd0O3ZtX2ZpbGU7CiAJYm9vbCBiYWNraW5nX2ZpbGU7CiAJYm9vbCBzaGFyZWQgPSB2bWEtJmd0O3ZtX2ZsYWdzICZhbXA7IFZNX1NIQVJFRDsKQEAgLTQxNDksNiAmIzQzOzQyNTYsMTAgQEAgc3RhdGljIGludCBzZWxpbnV4X2ZpbGVfbXByb3RlY3Qoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCQlpZiAocmMpCiAJCQkJcmV0dXJuIHJjOwogCQkJaWYgKGJhY2tpbmdfZmlsZSkgewomIzQzOwkJCQlyYyA9IGJhY2tpbmdfbW91bnRlcnNfaGFzX3Blcm0oZmlsZSwKJiM0MzsJCQkJCQkJICAgICAgIEZJTEVfX0VYRUNNT0QpOwomIzQzOwkJCQlpZiAocmMpCiYjNDM7CQkJCQlyZXR1cm4gcmM7CiAJCQkJcmMgPSBmaWxlX2hhc19wZXJtKGZpbGUtJmd0O2ZfY3JlZCwgZmlsZSwKIAkJCQkJCSAgIEZJTEVfX0VYRUNNT0QpOwogCQkJCWlmIChyYykKQEAgLTQxNjEsNiAmIzQzOzQyNzIsMTAgQEAgc3RhdGljIGludCBzZWxpbnV4X2ZpbGVfbXByb3RlY3Qoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAJaWYgKGJhY2tpbmdfZmlsZSkgewomIzQzOwkJYXYgPSBmaWxlX21hcF9wcm90X3RvX2F2KHByb3QsIHNoYXJlZCk7CiYjNDM7CQlyYyA9IGJhY2tpbmdfbW91bnRlcnNfaGFzX3Blcm0oZmlsZSwgYXYpOwomIzQzOwkJaWYgKHJjKQomIzQzOwkJCXJldHVybiByYzsKIAkJcmMgPSBmaWxlX21hcF9wcm90X2NoZWNrKGZpbGUsIHByb3QsIHNoYXJlZCwgdHJ1ZSk7CiAJCWlmIChyYykKIAkJCXJldHVybiByYzsKQEAgLTc2MzUsNiAmIzQzOzc3NTAsNyBAQCBzdGF0aWMgc3RydWN0IHNlY3VyaXR5X2hvb2tfbGlzdCBzZWxpbnV4X2hvb2tzW10gX19yb19hZnRlcl9pbml0ID0gewogCUxTTV9IT09LX0lOSVQoZmlsZV9wZXJtaXNzaW9uLCBzZWxpbnV4X2ZpbGVfcGVybWlzc2lvbiksCiAJTFNNX0hPT0tfSU5JVChmaWxlX2FsbG9jX3NlY3VyaXR5LCBzZWxpbnV4X2ZpbGVfYWxsb2Nfc2VjdXJpdHkpLAogCUxTTV9IT09LX0lOSVQoYmFja2luZ19maWxlX2FsbG9jLCBzZWxpbnV4X2JhY2tpbmdfZmlsZV9hbGxvYyksCiYjNDM7CUxTTV9IT09LX0lOSVQoYmFja2luZ19maWxlX2ZyZWUsIHNlbGludXhfYmFja2luZ19maWxlX2ZyZWUpLAogCUxTTV9IT09LX0lOSVQoZmlsZV9pb2N0bCwgc2VsaW51eF9maWxlX2lvY3RsKSwKIAlMU01fSE9PS19JTklUKGZpbGVfaW9jdGxfY29tcGF0LCBzZWxpbnV4X2ZpbGVfaW9jdGxfY29tcGF0KSwKIAlMU01fSE9PS19JTklUKG1tYXBfZmlsZSwgc2VsaW51eF9tbWFwX2ZpbGUpLApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL29ianNlYy5oIGIvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL29ianNlYy5oCmluZGV4IDNjMGExNmVjOTc4YjAuLjJmMjE1NjgyNTFmZmUgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9vYmpzZWMuaAomIzQzOyYjNDM7JiM0MzsgYi9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvb2Jqc2VjLmgKQEAgLTg2LDggJiM0Mzs4NiwxNiBAQCBzdHJ1Y3QgZmlsZV9zZWN1cml0eV9zdHJ1Y3QgewogCXUzMiBwc2Vxbm87IC8qIFBvbGljeSBzZXFubyBhdCB0aGUgdGltZSBvZiBmaWxlIG9wZW4gKi8KIH07CiAKJiM0MztzdHJ1Y3QgYmFja2luZ19maWxlX3NlY3VyaXR5X2xheWVyIHsKJiM0MzsJc3RydWN0IHBhdGggcGF0aDsgLyogdGhpcyBsYXllciYjMzk7cyByZWFsIHBhdGggKi8KJiM0MzsJdTMyIG1vdW50ZXJfc2lkOyAvKiBTSUQgb2YgdGhlIG1vdW50ZXIgdGhhdCBvcGVuZWQgaXQgKi8KJiM0MzsJdTMyIGZkX3NpZDsgLyogU0lEIG9mIGl0cyBvcGVuIGZpbGUgZGVzY3JpcHRpb24gKi8KJiM0Mzt9OwomIzQzOwogc3RydWN0IGJhY2tpbmdfZmlsZV9zZWN1cml0eV9zdHJ1Y3QgewotCXUzMiB1Zl9zaWQ7IC8qIGFzc29jaWF0ZWQgdXNlciBmaWxlIGZzZWMtJmd0O3NpZCAqLwomIzQzOwl1MzIgdWZfc2lkOyAvKiB0b3AtbGV2ZWwgdXNlciBmaWxlIGZzZWMtJmd0O3NpZCAqLwomIzQzOwl1MzIgbGF5ZXJfY291bnQ7IC8qIG51bWJlciBvZiBpbnRlcm1lZGlhdGUgYmFja2luZyBmaWxlcyAqLwomIzQzOwlzdHJ1Y3QgYmFja2luZ19maWxlX3NlY3VyaXR5X2xheWVyICpsYXllcnM7CiB9OwogCiBzdHJ1Y3Qgc3VwZXJibG9ja19zZWN1cml0eV9zdHJ1Y3Qgewo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAyMjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDMwCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBUaGlzIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpczogaXMgdGhpcyBwYXRjaCBmdXp6YWJsZT8gV2hhdCBjb25maWd1cmF0aW9ucyBhcmUgKmVzc2VudGlhbCogdG8gcmVwcm9kdWNlIHRoZSBidWc/IEFuZCB3aGF0IGtleSBmdW5jdGlvbnMgYW5kIGRhdGEgc3RydWN0dXJlcyBzaG91bGQgSSB0YXJnZXQgYXMgZm9jdXMgc3ltYm9scyBmb3IgcmVwb3J0aW5nPwoKQWxyaWdodCwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoZSBjb2RlIGNoYW5nZXMuIEFoLCBpdCYjMzk7cyB0b3VjaGluZyBgc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jYCBhbmQgYHNlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9vYmpzZWMuaGAuIEludGVyZXN0aW5nLiBJdCBzZWVtcyBsaWtlIHdlJiMzOTtyZSB1cGRhdGluZyBob3cgU0VMaW51eCBpbnRlcmFjdHMgd2l0aCBiYWNraW5nIGZpbGVzLCB0aGluZ3MgbGlrZSBvdmVybGF5ZnMsIHN0YWNrZWQgZmlsZXN5c3RlbXMsIGFuZCBlcm9mcy4KClNvLCBzcGVjaWZpY2FsbHksIHRoZSBjaGFuZ2VzIGFyZSBjZW50ZXJlZCBhcm91bmQgdGhlc2UgZnVuY3Rpb25zOiBgaW5vZGVfc2lkX2hhc19wZXJtYCwgYGlub2RlX2hhc19wZXJtYCwgYHNlbGludXhfZmlsZV91c2VyX3NpZGAsIGBzZWxpbnV4X2JhY2tpbmdfZmlsZV9hbGxvY2AsIGBzZWxpbnV4X2JhY2tpbmdfZmlsZV9mcmVlYCwgYGZpbGVfbWFwX3Byb3RfdG9fYXZgLCBgYmFja2luZ19tb3VudGVyc19oYXNfcGVybWAsIGBzZWxpbnV4X2ZpbGVfbXByb3RlY3RgIGFuZCBhbHNvIHRoZSBTRUxpbnV4IGhvb2tzIGFycmF5OiAgYSBuZXcgcmVnaXN0cmF0aW9uIG9mIGBiYWNraW5nX2ZpbGVfZnJlZWAuCgpOb3csIGJlZm9yZSBJIHN0YXJ0IGNvbnN0cnVjdGluZyBhIGZ1enplciBvciBldmVuIHRoaW5raW5nIGFib3V0IGNvbmZpZyBvcHRpb25zLCBJIG5lZWQgdG8gZ2V0IGEgcmVhbGx5IHNvbGlkIGdyYXNwIG9uIHRoZSBzdXJyb3VuZGluZyBjb2RlLiAgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGJhY2tpbmcgZmlsZSBmdW5jdGlvbnMsIHRoZSBTRUxpbnV4IGltcGxlbWVudGF0aW9uLCBhbmQgaG93IHRoZSBob29rcyBhcmUgdXNlZC4gIFRpbWUgdG8gZmlyZSB1cCBncmVwcGVyIG9yIGp1c3QgY2FyZWZ1bGx5IHJlYWQgdGhyb3VnaCB0aGUgZmlsZSB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBsb2dpYyBhbmQgaG93IHRoZXNlIHBpZWNlcyBmaXQgdG9nZXRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMjI6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7U0VDVVJJVFlfU0VMSU5VWCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3NlY3VyaXR5L3NlbGludXgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7c2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWc6Mjpjb25maWcgU0VDVVJJVFlfU0VMSU5VWFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTMtXHRib29sIFwmIzM0O1NFTGludXggU3VwcG9ydFwmIzM0O1xuLS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy0xMS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzoxMjpjb25maWcgU0VDVVJJVFlfU0VMSU5VWF9CT09UUEFSQU1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy0xMy1cdGJvb2wgXCYjMzQ7U0VMaW51eCBib290IHBhcmFtZXRlclwmIzM0O1xuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnOjE0Olx0ZGVwZW5kcyBvbiBTRUNVUklUWV9TRUxJTlVYXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctMTUtXHRkZWZhdWx0IG5cbi0tXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctMjUtXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWc6MjY6Y29uZmlnIFNFQ1VSSVRZX1NFTElOVVhfREVWRUxPUFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTI3LVx0Ym9vbCBcJiMzNDtTRUxpbnV4IERldmVsb3BtZW50IFN1cHBvcnRcJiMzNDtcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzoyODpcdGRlcGVuZHMgb24gU0VDVVJJVFlfU0VMSU5VWFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTI5LVx0ZGVmYXVsdCB5XG4tLVxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTM5LVxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnOjQwOmNvbmZpZyBTRUNVUklUWV9TRUxJTlVYX0FWQ19TVEFUU1xuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTQxLVx0Ym9vbCBcJiMzNDtTRUxpbnV4IEFWQyBTdGF0aXN0aWNzXCYjMzQ7XG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWc6NDI6XHRkZXBlbmRzIG9uIFNFQ1VSSVRZX1NFTElOVVhcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy00My1cdGRlZmF1bHQgeVxuLS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy00OC1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzo0OTpjb25maWcgU0VDVVJJVFlfU0VMSU5VWF9TSURUQUJfSEFTSF9CSVRTXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctNTAtXHRpbnQgXCYjMzQ7U0VMaW51eCBzaWR0YWIgaGFzaHRhYmxlIHNpemVcJiMzNDtcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzo1MTpcdGRlcGVuZHMgb24gU0VDVVJJVFlfU0VMSU5VWFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTUyLVx0cmFuZ2UgOCAxM1xuLS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy01NS1cdCAgVGhpcyBvcHRpb24gc2V0cyB0aGUgbnVtYmVyIG9mIGJ1Y2tldHMgdXNlZCBpbiB0aGUgc2lkdGFiIGhhc2h0YWJsZVxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnOjU2Olx0ICB0byAyXlNFQ1VSSVRZX1NFTElOVVhfU0lEVEFCX0hBU0hfQklUUyBidWNrZXRzLiBUaGUgbnVtYmVyIG9mIGhhc2hcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy01Ny1cdCAgY29sbGlzaW9ucyBtYXkgYmUgdmlld2VkIGF0IC9zeXMvZnMvc2VsaW51eC9zcy9zaWR0YWJfaGFzaF9zdGF0cy4gSWZcbi0tXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctNjAtXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWc6NjE6Y29uZmlnIFNFQ1VSSVRZX1NFTElOVVhfU0lEMlNUUl9DQUNIRV9TSVpFXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctNjItXHRpbnQgXCYjMzQ7U0VMaW51eCBTSUQgdG8gY29udGV4dCBzdHJpbmcgdHJhbnNsYXRpb24gY2FjaGUgc2l6ZVwmIzM0O1xuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnOjYzOlx0ZGVwZW5kcyBvbiBTRUNVUklUWV9TRUxJTlVYXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctNjQtXHRkZWZhdWx0IDI1NlxuLS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy03MS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzo3Mjpjb25maWcgU0VDVVJJVFlfU0VMSU5VWF9BVkNfSEFTSF9CSVRTXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctNzMtXHRpbnQgXCYjMzQ7U0VMaW51eCBhdmMgaGFzaHRhYmxlIHNpemVcJiMzNDtcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzo3NDpcdGRlcGVuZHMgb24gU0VDVVJJVFlfU0VMSU5VWFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTc1LVx0cmFuZ2UgOSAxNFxuLS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy03OC1cdCAgVGhpcyBvcHRpb24gc2V0cyB0aGUgbnVtYmVyIG9mIGJ1Y2tldHMgdXNlZCBpbiB0aGUgQVZDIGhhc2ggdGFibGVcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzo3OTpcdCAgdG8gMl5TRUNVUklUWV9TRUxJTlVYX0FWQ19IQVNIX0JJVFMuIEEgaGlnaGVyIHZhbHVlIGhlbHBzIG1haW50YWluXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctODAtXHQgIHNob3J0ZXIgY2hhaW4gbGVuZ3RocyBlc3BlY2lhbGx5IHdoZW4gZXhwYW5kaW5nIEFWQyBub2RlcyB2aWFcbi0tXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctODItXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWc6ODM6Y29uZmlnIFNFQ1VSSVRZX1NFTElOVVhfREVCVUdcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy04NC1cdGJvb2wgXCYjMzQ7U0VMaW51eCBrZXJuZWwgZGVidWdnaW5nIHN1cHBvcnRcJiMzNDtcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzo4NTpcdGRlcGVuZHMgb24gU0VDVVJJVFlfU0VMSU5VWFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTg2LVx0ZGVmYXVsdCBuXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9NYWtlZmlsZS0xMC1cbnNlY3VyaXR5L3NlbGludXgvTWFrZWZpbGU6MTE6b2JqLSQoQ09ORklHX1NFQ1VSSVRZX1NFTElOVVgpIDo9IHNlbGludXgub1xuc2VjdXJpdHkvc2VsaW51eC9NYWtlZmlsZS0xMi1cbnNlY3VyaXR5L3NlbGludXgvTWFrZWZpbGU9MTM9Y2NmbGFncy15IDo9IC1JJChzcmN0cmVlKS9zZWN1cml0eS9zZWxpbnV4IC1JJChzcmN0cmVlKS9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGVcbnNlY3VyaXR5L3NlbGludXgvTWFrZWZpbGUtMTQtXG5zZWN1cml0eS9zZWxpbnV4L01ha2VmaWxlOjE1OmNjZmxhZ3MtJChDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9ERUJVRykgJiM0Mzs9IC1EREVCVUdcbnNlY3VyaXR5L3NlbGludXgvTWFrZWZpbGUtMTYtXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9hdmMuYy0zNy1cbnNlY3VyaXR5L3NlbGludXgvYXZjLmM6Mzg6I2RlZmluZSBBVkNfQ0FDSEVfU0xPVFNcdFx0KDEgXHUwMDNjXHUwMDNjIENPTkZJR19TRUNVUklUWV9TRUxJTlVYX0FWQ19IQVNIX0JJVFMpXG5zZWN1cml0eS9zZWxpbnV4L2F2Yy5jLTM5LSNkZWZpbmUgQVZDX0RFRl9DQUNIRV9USFJFU0hPTERcdEFWQ19DQUNIRV9TTE9UU1xuLS1cbnNlY3VyaXR5L3NlbGludXgvYXZjLmMtNDEtXG5zZWN1cml0eS9zZWxpbnV4L2F2Yy5jOjQyOiNpZmRlZiBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9BVkNfU1RBVFNcbnNlY3VyaXR5L3NlbGludXgvYXZjLmMtNDMtI2RlZmluZSBhdmNfY2FjaGVfc3RhdHNfaW5jcihmaWVsZClcdHRoaXNfY3B1X2luYyhhdmNfY2FjaGVfc3RhdHMuZmllbGQpXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9hdmMuYz04MD1zdHJ1Y3QgYXZjX2NhbGxiYWNrX25vZGUge1xuLS1cbnNlY3VyaXR5L3NlbGludXgvYXZjLmMtODUtXG5zZWN1cml0eS9zZWxpbnV4L2F2Yy5jOjg2OiNpZmRlZiBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9BVkNfU1RBVFNcbnNlY3VyaXR5L3NlbGludXgvYXZjLmMtODctREVGSU5FX1BFUl9DUFUoc3RydWN0IGF2Y19jYWNoZV9zdGF0cywgYXZjX2NhY2hlX3N0YXRzKSA9IHsgMCB9O1xuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz0xMTc9c3RhdGljIGF0b21pY190IHNlbGludXhfc2VjbWFya19yZWZjb3VudCA9IEFUT01JQ19JTklUKDApO1xuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTExOC1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzoxMTk6I2lmZGVmIENPTkZJR19TRUNVUklUWV9TRUxJTlVYX0RFVkVMT1BcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0xMjAtc3RhdGljIGludCBzZWxpbnV4X2VuZm9yY2luZ19ib290IF9faW5pdGRhdGE7XG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTEzND1pbnQgc2VsaW51eF9lbmFibGVkX2Jvb3QgX19pbml0ZGF0YSA9IDE7XG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6MTM1OiNpZmRlZiBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9CT09UUEFSQU1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0xMzYtc3RhdGljIGludCBfX2luaXQgc2VsaW51eF9lbmFibGVkX3NldHVwKGNoYXIgKnN0cilcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZjLmg9MTY2PXZvaWQgYXZjX3NldF9jYWNoZV90aHJlc2hvbGQodW5zaWduZWQgaW50IGNhY2hlX3RocmVzaG9sZCk7XG5zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZjLmgtMTY3LVxuc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2Yy5oOjE2ODojaWZkZWYgQ09ORklHX1NFQ1VSSVRZX1NFTElOVVhfQVZDX1NUQVRTXG5zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZjLmgtMTY5LURFQ0xBUkVfUEVSX0NQVShzdHJ1Y3QgYXZjX2NhY2hlX3N0YXRzLCBhdmNfY2FjaGVfc3RhdHMpO1xuLS1cbnNlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9zZWN1cml0eS5oPTk0PXN0cnVjdCBzZWxpbnV4X3N0YXRlIHtcbnNlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9zZWN1cml0eS5oOjk1OiNpZmRlZiBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9ERVZFTE9QXG5zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvc2VjdXJpdHkuaC05Ni1cdGJvb2wgZW5mb3JjaW5nO1xuLS1cbnNlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9zZWN1cml0eS5oPTExOD1zdGF0aWMgaW5saW5lIHZvaWQgc2VsaW51eF9tYXJrX2luaXRpYWxpemVkKHZvaWQpXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL3NlY3VyaXR5LmgtMTIzLVxuc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL3NlY3VyaXR5Lmg6MTI0OiNpZmRlZiBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9ERVZFTE9QXG5zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvc2VjdXJpdHkuaC0xMjUtc3RhdGljIGlubGluZSBib29sIGVuZm9yY2luZ19lbmFibGVkKHZvaWQpXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9zZWxpbnV4ZnMuYz0xMjA9c3RhdGljIHNzaXplX3Qgc2VsX3JlYWRfZW5mb3JjZShzdHJ1Y3QgZmlsZSAqZmlscCwgY2hhciBfX3VzZXIgKmJ1Zixcbi0tXG5zZWN1cml0eS9zZWxpbnV4L3NlbGludXhmcy5jLTEzMC1cbnNlY3VyaXR5L3NlbGludXgvc2VsaW51eGZzLmM6MTMxOiNpZmRlZiBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9ERVZFTE9QXG5zZWN1cml0eS9zZWxpbnV4L3NlbGludXhmcy5jLTEzMi1zdGF0aWMgc3NpemVfdCBzZWxfd3JpdGVfZW5mb3JjZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1Zixcbi0tXG5zZWN1cml0eS9zZWxpbnV4L3NlbGludXhmcy5jPTEzOTI9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc2VsX2F2Y19oYXNoX3N0YXRzX29wcyA9IHtcbi0tXG5zZWN1cml0eS9zZWxpbnV4L3NlbGludXhmcy5jLTEzOTYtXG5zZWN1cml0eS9zZWxpbnV4L3NlbGludXhmcy5jOjEzOTc6I2lmZGVmIENPTkZJR19TRUNVUklUWV9TRUxJTlVYX0FWQ19TVEFUU1xuc2VjdXJpdHkvc2VsaW51eC9zZWxpbnV4ZnMuYy0xMzk4LXN0YXRpYyBzdHJ1Y3QgYXZjX2NhY2hlX3N0YXRzICpzZWxfYXZjX2dldF9zdGF0X2lkeChsb2ZmX3QgKmlkeClcbi0tXG5zZWN1cml0eS9zZWxpbnV4L3NlbGludXhmcy5jPTE0Njg9c3RhdGljIGludCBzZWxfbWFrZV9hdmNfZmlsZXMoc3RydWN0IGRlbnRyeSAqZGlyKVxuLS1cbnNlY3VyaXR5L3NlbGludXgvc2VsaW51eGZzLmMtMTQ3Ny1cdFx0eyBcJiMzNDtoYXNoX3N0YXRzXCYjMzQ7LCBcdTAwMjZzZWxfYXZjX2hhc2hfc3RhdHNfb3BzLCBTX0lSVUdPIH0sXG5zZWN1cml0eS9zZWxpbnV4L3NlbGludXhmcy5jOjE0Nzg6I2lmZGVmIENPTkZJR19TRUNVUklUWV9TRUxJTlVYX0FWQ19TVEFUU1xuc2VjdXJpdHkvc2VsaW51eC9zZWxpbnV4ZnMuYy0xNDc5LVx0XHR7IFwmIzM0O2NhY2hlX3N0YXRzXCYjMzQ7LCBcdTAwMjZzZWxfYXZjX2NhY2hlX3N0YXRzX29wcywgU19JUlVHTyB9LFxuLS1cbnNlY3VyaXR5L3NlbGludXgvc3MvYXZ0YWIuYz0yNTM9aW50IGF2dGFiX2FsbG9jX2R1cChzdHJ1Y3QgYXZ0YWIgKm5ldywgY29uc3Qgc3RydWN0IGF2dGFiICpvcmlnKVxuLS1cbnNlY3VyaXR5L3NlbGludXgvc3MvYXZ0YWIuYy0yNTctXG5zZWN1cml0eS9zZWxpbnV4L3NzL2F2dGFiLmM6MjU4OiNpZmRlZiBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9ERUJVR1xuc2VjdXJpdHkvc2VsaW51eC9zcy9hdnRhYi5jLTI1OS12b2lkIGF2dGFiX2hhc2hfZXZhbChzdHJ1Y3QgYXZ0YWIgKmgsIGNvbnN0IGNoYXIgKnRhZylcbi0tXG5zZWN1cml0eS9zZWxpbnV4L3NzL2F2dGFiLmMtMjg5LX1cbnNlY3VyaXR5L3NlbGludXgvc3MvYXZ0YWIuYzoyOTA6I2VuZGlmIC8qIENPTkZJR19TRUNVUklUWV9TRUxJTlVYX0RFQlVHICovXG5zZWN1cml0eS9zZWxpbnV4L3NzL2F2dGFiLmMtMjkxLVxuLS1cbnNlY3VyaXR5L3NlbGludXgvc3MvYXZ0YWIuaD0xMDc9dm9pZCBhdnRhYl9kZXN0cm95KHN0cnVjdCBhdnRhYiAqaCk7XG4tLVxuc2VjdXJpdHkvc2VsaW51eC9zcy9hdnRhYi5oLTExMS1cbnNlY3VyaXR5L3NlbGludXgvc3MvYXZ0YWIuaDoxMTI6I2lmZGVmIENPTkZJR19TRUNVUklUWV9TRUxJTlVYX0RFQlVHXG5zZWN1cml0eS9zZWxpbnV4L3NzL2F2dGFiLmgtMTEzLXZvaWQgYXZ0YWJfaGFzaF9ldmFsKHN0cnVjdCBhdnRhYiAqaCwgY29uc3QgY2hhciAqdGFnKTtcbi0tXG5zZWN1cml0eS9zZWxpbnV4L3NzL2hhc2h0YWIuYz04OD1pbnQgaGFzaHRhYl9tYXAoc3RydWN0IGhhc2h0YWIgKmgsIGludCAoKmFwcGx5KSh2b2lkICprLCB2b2lkICpkLCB2b2lkICphcmdzKSxcbi0tXG5zZWN1cml0eS9zZWxpbnV4L3NzL2hhc2h0YWIuYy0xMDYtXG5zZWN1cml0eS9zZWxpbnV4L3NzL2hhc2h0YWIuYzoxMDc6I2lmZGVmIENPTkZJR19TRUNVUklUWV9TRUxJTlVYX0RFQlVHXG5zZWN1cml0eS9zZWxpbnV4L3NzL2hhc2h0YWIuYy0xMDgtdm9pZCBoYXNodGFiX3N0YXQoc3RydWN0IGhhc2h0YWIgKmgsIHN0cnVjdCBoYXNodGFiX2luZm8gKmluZm8pXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9zcy9oYXNodGFiLmMtMTM3LX1cbnNlY3VyaXR5L3NlbGludXgvc3MvaGFzaHRhYi5jOjEzODojZW5kaWYgLyogQ09ORklHX1NFQ1VSSVRZX1NFTElOVVhfREVCVUcgKi9cbnNlY3VyaXR5L3NlbGludXgvc3MvaGFzaHRhYi5jLTEzOS1cbi0tXG5zZWN1cml0eS9zZWxpbnV4L3NzL2hhc2h0YWIuaD0xMzk9aW50IGhhc2h0YWJfZHVwbGljYXRlKHN0cnVjdCBoYXNodGFiICpuZXcsIGNvbnN0IHN0cnVjdCBoYXNodGFiICpvcmlnLFxuLS1cbnNlY3VyaXR5L3NlbGludXgvc3MvaGFzaHRhYi5oLTE0My1cbnNlY3VyaXR5L3NlbGludXgvc3MvaGFzaHRhYi5oOjE0NDojaWZkZWYgQ09ORklHX1NFQ1VSSVRZX1NFTElOVVhfREVCVUdcbnNlY3VyaXR5L3NlbGludXgvc3MvaGFzaHRhYi5oLTE0NS0vKiBGaWxsIGluZm8gd2l0aCBzb21lIGhhc2ggdGFibGUgc3RhdGlzdGljcyAqL1xuLS1cbnNlY3VyaXR5L3NlbGludXgvc3MvcG9saWN5ZGIuYy00MC1cbnNlY3VyaXR5L3NlbGludXgvc3MvcG9saWN5ZGIuYzo0MTojaWZkZWYgQ09ORklHX1NFQ1VSSVRZX1NFTElOVVhfREVCVUdcbnNlY3VyaXR5L3NlbGludXgvc3MvcG9saWN5ZGIuYy00Mi0vKiBjbGFuZy1mb3JtYXQgb2ZmICovXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9zcy9wb2xpY3lkYi5jPTY5MT1zdGF0aWMgaW50ICgqY29uc3QgaW5kZXhfZltTWU1fTlVNXSkodm9pZCAqa2V5LCB2b2lkICpkYXR1bSwgdm9pZCAqZGF0YXApID0ge1xuLS1cbnNlY3VyaXR5L3NlbGludXgvc3MvcG9saWN5ZGIuYy03MDItXG5zZWN1cml0eS9zZWxpbnV4L3NzL3BvbGljeWRiLmM6NzAzOiNpZmRlZiBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9ERUJVR1xuc2VjdXJpdHkvc2VsaW51eC9zcy9wb2xpY3lkYi5jLTcwNC1zdGF0aWMgdm9pZCBoYXNoX2V2YWwoc3RydWN0IGhhc2h0YWIgKmgsIGNvbnN0IGNoYXIgKmhhc2hfbmFtZSxcbi0tXG5zZWN1cml0eS9zZWxpbnV4L3NzL3BvbGljeWRiLmM9NzMwPXN0YXRpYyBpbmxpbmUgdm9pZCBzeW10YWJfaGFzaF9ldmFsKHN0cnVjdCBzeW10YWIgKnMpXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9zcy9wb2xpY3lkYi5jLTczMi19XG5zZWN1cml0eS9zZWxpbnV4L3NzL3BvbGljeWRiLmM6NzMzOiNlbmRpZiAvKiBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9ERUJVRyAqL1xuc2VjdXJpdHkvc2VsaW51eC9zcy9wb2xpY3lkYi5jLTczNC1cbi0tXG5zZWN1cml0eS9zZWxpbnV4L3NzL3NpZHRhYi5jPTM1PWludCBzaWR0YWJfaW5pdChzdHJ1Y3Qgc2lkdGFiICpzKVxuLS1cbnNlY3VyaXR5L3NlbGludXgvc3Mvc2lkdGFiLmMtNTAtXG5zZWN1cml0eS9zZWxpbnV4L3NzL3NpZHRhYi5jOjUxOiNpZiBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9TSUQyU1RSX0NBQ0hFX1NJWkUgXHUwMDNlIDBcbnNlY3VyaXR5L3NlbGludXgvc3Mvc2lkdGFiLmM6NTI6XHRzLVx1MDAzZWNhY2hlX2ZyZWVfc2xvdHMgPSBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9TSUQyU1RSX0NBQ0hFX1NJWkU7XG5zZWN1cml0eS9zZWxpbnV4L3NzL3NpZHRhYi5jLTUzLVx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2cy1cdTAwM2VjYWNoZV9scnVfbGlzdCk7XG4tLVxuc2VjdXJpdHkvc2VsaW51eC9zcy9zaWR0YWIuYz03OD1pbnQgc2lkdGFiX3NldF9pbml0aWFsKHN0cnVjdCBzaWR0YWIgKnMsIHUzMiBzaWQsIHN0cnVjdCBjb250ZXh0ICpjb250ZXh0KVxuLS1cbnNlY3VyaXR5L3NlbGludXgvc3Mvc2lkdGFiLmMtOTItXG5zZWN1cml0eS9zZWxpbnV4L3NzL3NpZHRhYi5jOjkzOiNpZiBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9TSUQyU1RSX0NBQ0hFX1NJWkUgXHUwMDNlIDBcbnNlY3VyaXR5L3NlbGludXgvc3Mvc2lkdGFiLmMtOTQtXHRpc2lkLVx1MDAzZWVudHJ5LmNhY2hlID0gTlVMTDtcbi0tXG5zZWN1cml0eS9zZWxpbnV4L3NzL3NpZHRhYi5jPTUwOD1zdGF0aWMgdm9pZCBzaWR0YWJfZGVzdHJveV9lbnRyeShzdHJ1Y3Qgc2lkdGFiX2VudHJ5ICplbnRyeSlcbi0tXG5zZWN1cml0eS9zZWxpbnV4L3NzL3NpZHRhYi5jLTUxMC1cdGNvbnRleHRfZGVzdHJveShcdTAwMjZlbnRyeS1cdTAwM2Vjb250ZXh0KTtcbnNlY3VyaXR5L3NlbGludXgvc3Mvc2lkdGFiLmM6NTExOiNpZiBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9TSUQyU1RSX0NBQ0hFX1NJWkUgXHUwMDNlIDBcbnNlY3VyaXR5L3NlbGludXgvc3Mvc2lkdGFiLmMtNTEyLVx0a2ZyZWUocmN1X2RlcmVmZXJlbmNlX3JhdyhlbnRyeS1cdTAwM2VjYWNoZSkpO1xuLS1cbnNlY3VyaXR5L3NlbGludXgvc3Mvc2lkdGFiLmM9NTQxPXZvaWQgc2lkdGFiX2Rlc3Ryb3koc3RydWN0IHNpZHRhYiAqcylcbi0tXG5zZWN1cml0eS9zZWxpbnV4L3NzL3NpZHRhYi5jLTU2MC1cbnNlY3VyaXR5L3NlbGludXgvc3Mvc2lkdGFiLmM6NTYxOiNpZiBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9TSUQyU1RSX0NBQ0hFX1NJWkUgXHUwMDNlIDBcbnNlY3VyaXR5L3NlbGludXgvc3Mvc2lkdGFiLmMtNTYyLVxuLS1cbnNlY3VyaXR5L3NlbGludXgvc3Mvc2lkdGFiLmM9NjA4PWludCBzaWR0YWJfc2lkMnN0cl9nZXQoc3RydWN0IHNpZHRhYiAqcywgc3RydWN0IHNpZHRhYl9lbnRyeSAqZW50cnksIGNoYXIgKipvdXQsXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9zcy9zaWR0YWIuYy02MzctXG5zZWN1cml0eS9zZWxpbnV4L3NzL3NpZHRhYi5jOjYzODojZW5kaWYgLyogQ09ORklHX1NFQ1VSSVRZX1NFTElOVVhfU0lEMlNUUl9DQUNIRV9TSVpFIFx1MDAzZSAwICovXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9zcy9zaWR0YWIuaD0yMT1zdHJ1Y3Qgc2lkdGFiX2VudHJ5IHtcbi0tXG5zZWN1cml0eS9zZWxpbnV4L3NzL3NpZHRhYi5oLTI0LVx0c3RydWN0IGNvbnRleHQgY29udGV4dDtcbnNlY3VyaXR5L3NlbGludXgvc3Mvc2lkdGFiLmg6MjU6I2lmIENPTkZJR19TRUNVUklUWV9TRUxJTlVYX1NJRDJTVFJfQ0FDSEVfU0laRSBcdTAwM2UgMFxuc2VjdXJpdHkvc2VsaW51eC9zcy9zaWR0YWIuaC0yNi1cdHN0cnVjdCBzaWR0YWJfc3RyX2NhY2hlIF9fcmN1ICpjYWNoZTtcbi0tXG5zZWN1cml0eS9zZWxpbnV4L3NzL3NpZHRhYi5oPTY5PXN0cnVjdCBzaWR0YWJfY29udmVydF9wYXJhbXMge1xuLS1cbnNlY3VyaXR5L3NlbGludXgvc3Mvc2lkdGFiLmgtNzMtXG5zZWN1cml0eS9zZWxpbnV4L3NzL3NpZHRhYi5oOjc0OiNkZWZpbmUgU0lEVEFCX0hBU0hfQklUUyAgICBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9TSURUQUJfSEFTSF9CSVRTXG5zZWN1cml0eS9zZWxpbnV4L3NzL3NpZHRhYi5oLTc1LSNkZWZpbmUgU0lEVEFCX0hBU0hfQlVDS0VUUyAoMSBcdTAwM2NcdTAwM2MgU0lEVEFCX0hBU0hfQklUUylcbi0tXG5zZWN1cml0eS9zZWxpbnV4L3NzL3NpZHRhYi5oPTc3PXN0cnVjdCBzaWR0YWIge1xuLS1cbnNlY3VyaXR5L3NlbGludXgvc3Mvc2lkdGFiLmgtOTItXG5zZWN1cml0eS9zZWxpbnV4L3NzL3NpZHRhYi5oOjkzOiNpZiBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9TSUQyU1RSX0NBQ0hFX1NJWkUgXHUwMDNlIDBcbnNlY3VyaXR5L3NlbGludXgvc3Mvc2lkdGFiLmgtOTQtXHQvKiBTSUQgLVx1MDAzZSBjb250ZXh0IHN0cmluZyBjYWNoZSAqL1xuLS1cbnNlY3VyaXR5L3NlbGludXgvc3Mvc2lkdGFiLmg9MTM5PWludCBzaWR0YWJfaGFzaF9zdGF0cyhzdHJ1Y3Qgc2lkdGFiICpzaWR0YWIsIGNoYXIgKnBhZ2UpO1xuc2VjdXJpdHkvc2VsaW51eC9zcy9zaWR0YWIuaC0xNDAtXG5zZWN1cml0eS9zZWxpbnV4L3NzL3NpZHRhYi5oOjE0MTojaWYgQ09ORklHX1NFQ1VSSVRZX1NFTElOVVhfU0lEMlNUUl9DQUNIRV9TSVpFIFx1MDAzZSAwXG5zZWN1cml0eS9zZWxpbnV4L3NzL3NpZHRhYi5oLTE0Mi12b2lkIHNpZHRhYl9zaWQyc3RyX3B1dChzdHJ1Y3Qgc2lkdGFiICpzLCBzdHJ1Y3Qgc2lkdGFiX2VudHJ5ICplbnRyeSxcbi0tXG5zZWN1cml0eS9zZWxpbnV4L3NzL3NpZHRhYi5oPTE1Mj1zdGF0aWMgaW5saW5lIGludCBzaWR0YWJfc2lkMnN0cl9nZXQoc3RydWN0IHNpZHRhYiAqcyxcbi0tXG5zZWN1cml0eS9zZWxpbnV4L3NzL3NpZHRhYi5oLTE1Ny19XG5zZWN1cml0eS9zZWxpbnV4L3NzL3NpZHRhYi5oOjE1ODojZW5kaWYgLyogQ09ORklHX1NFQ1VSSVRZX1NFTElOVVhfU0lEMlNUUl9DQUNIRV9TSVpFIFx1MDAzZSAwICovXG5zZWN1cml0eS9zZWxpbnV4L3NzL3NpZHRhYi5oLTE1OS1cbi0tXG5zZWN1cml0eS9zZWxpbnV4L3hmcm0uYy0yNC0gKlx0Q09ORklHX1NFQ1VSSVRZX05FVFdPUktfWEZSTT15XG5zZWN1cml0eS9zZWxpbnV4L3hmcm0uYzoyNTogKlx0Q09ORklHX1NFQ1VSSVRZX1NFTElOVVg9bS95XG5zZWN1cml0eS9zZWxpbnV4L3hmcm0uYy0yNi0gKiBJU1NVRVM6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMjI6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyMDkKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgU0VMaW51eCBpcyBjb25maWd1cmVkIHdpdGhpbiB0aGlzIGtlcm5lbCBidWlsZC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgS2NvbmZpZyBmaWxlcywgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBtZWNoYW5pc21zLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgc3RhcnQgd2l0aCB0aGUgZ2VuZXJhbCBgc2VjdXJpdHkvS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHRoZSB0b3AtbGV2ZWwgb3B0aW9ucyByZWxhdGVkIHRvIHNlY3VyaXR5IGZlYXR1cmVzLgoKKipTRUxpbnV4IENvbmZpZ3VyYXRpb24gSW52ZXN0aWdhdGlvbioqCgpBbHJpZ2h0LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkmIzM5O20gZ29pbmcgdG8gY2hlY2sgdGhvc2UgYEtjb25maWdgIGZpbGVzLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgaW4gYm90aCB0aGUgdG9wLWxldmVsIGBzZWN1cml0eS9LY29uZmlnYCBhbmQgdGhlbiBhbHNvIHRoZSBtb3JlIHNwZWNpZmljIGBzZWN1cml0eS9zZWxpbnV4L0tjb25maWdgIHRvIHNlZSBob3cgU0VMaW51eCBpcyBzZXQgdXAuIFRoZXkgbWlnaHQgYmUgc2VwYXJhdGUgZmlsZXMgZm9yIG1vcmUgY2xhcml0eSwgb3IgdGhleSBtaWdodCBiZSBvbmUgYW5kIHRoZSBzYW1lIGZpbGUuIEluIGFueSBjYXNlLCBJIGtub3cgSSYjMzk7bGwgZmluZCB0aGUgcmVsZXZhbnQgb3B0aW9ucyB0aGVyZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLiBJJiMzOTtsbCBzdGFydCB3aXRoIGBzZWN1cml0eS9LY29uZmlnYCwgdGhhdCYjMzk7cyB1c3VhbGx5IHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDIyOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7c2VjdXJpdHkvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBTZWN1cml0eSBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdG1lbnUgXCYjMzQ7U2VjdXJpdHkgb3B0aW9uc1wmIzM0O1xuICAgNzpcdFxuICAgODpcdHNvdXJjZSBcJiMzNDtzZWN1cml0eS9rZXlzL0tjb25maWdcJiMzNDtcbiAgIDk6XHRcbiAgMTA6XHRjb25maWcgU0VDVVJJVFlfRE1FU0dfUkVTVFJJQ1RcbiAgMTE6XHRcdGJvb2wgXCYjMzQ7UmVzdHJpY3QgdW5wcml2aWxlZ2VkIGFjY2VzcyB0byB0aGUga2VybmVsIHN5c2xvZ1wmIzM0O1xuICAxMjpcdFx0ZGVmYXVsdCBuXG4gIDEzOlx0XHRoZWxwXG4gIDE0Olx0XHQgIFRoaXMgZW5mb3JjZXMgcmVzdHJpY3Rpb25zIG9uIHVucHJpdmlsZWdlZCB1c2VycyByZWFkaW5nIHRoZSBrZXJuZWxcbiAgMTU6XHRcdCAgc3lzbG9nIHZpYSBkbWVzZyg4KS5cbiAgMTY6XHRcbiAgMTc6XHRcdCAgSWYgdGhpcyBvcHRpb24gaXMgbm90IHNlbGVjdGVkLCBubyByZXN0cmljdGlvbnMgd2lsbCBiZSBlbmZvcmNlZFxuICAxODpcdFx0ICB1bmxlc3MgdGhlIGRtZXNnX3Jlc3RyaWN0IHN5c2N0bCBpcyBleHBsaWNpdGx5IHNldCB0byAoMSkuXG4gIDE5Olx0XG4gIDIwOlx0XHQgIElmIHlvdSBhcmUgdW5zdXJlIGhvdyB0byBhbnN3ZXIgdGhpcyBxdWVzdGlvbiwgYW5zd2VyIE4uXG4gIDIxOlx0XG4gIDIyOlx0Y2hvaWNlXG4gIDIzOlx0XHRwcm9tcHQgXCYjMzQ7QWxsb3cgL3Byb2MvcGlkL21lbSBhY2Nlc3Mgb3ZlcnJpZGVcJiMzNDtcbiAgMjQ6XHRcdGRlZmF1bHQgUFJPQ19NRU1fRk9SQ0VfUFRSQUNFXG4gIDI1Olx0XHRoZWxwXG4gIDI2Olx0XHQgIFRyYWRpdGlvbmFsbHkgL3Byb2MvcGlkL21lbSBhbGxvd3MgdXNlcnMgdG8gb3ZlcnJpZGUgbWVtb3J5XG4gIDI3Olx0XHQgIHBlcm1pc3Npb25zIGZvciB1c2VycyBsaWtlIHB0cmFjZSwgYXNzdW1pbmcgdGhleSBoYXZlIHB0cmFjZVxuICAyODpcdFx0ICBjYXBhYmlsaXR5LlxuICAyOTpcdFxuICAzMDpcdFx0ICBUaGlzIGFsbG93cyBwZW9wbGUgdG8gbGltaXQgdGhhdCAtIGVpdGhlciBuZXZlciBvdmVycmlkZSwgb3JcbiAgMzE6XHRcdCAgcmVxdWlyZSBhY3R1YWwgYWN0aXZlIHB0cmFjZSBhdHRhY2htZW50IChkZWZhdWx0KS5cbiAgMzI6XHRcbiAgMzM6XHRjb25maWcgUFJPQ19NRU1fQUxXQVlTX0ZPUkNFXG4gIDM0Olx0XHRib29sIFwmIzM0O1RyYWRpdGlvbmFsIC9wcm9jL3BpZC9tZW0gYmVoYXZpb3JcJiMzNDtcbiAgMzU6XHRcdGhlbHBcbiAgMzY6XHRcdCAgVGhpcyBhbGxvd3MgL3Byb2MvcGlkL21lbSBhY2Nlc3NlcyB0byBvdmVycmlkZSBtZW1vcnkgbWFwcGluZ1xuICAzNzpcdFx0ICBwZXJtaXNzaW9ucyBpZiB5b3UgaGF2ZSBwdHJhY2UgYWNjZXNzIHJpZ2h0cy5cbiAgMzg6XHRcbiAgMzk6XHRjb25maWcgUFJPQ19NRU1fRk9SQ0VfUFRSQUNFXG4gIDQwOlx0XHRib29sIFwmIzM0O1JlcXVpcmUgYWN0aXZlIHB0cmFjZSgpIHVzZSBmb3IgYWNjZXNzIG92ZXJyaWRlXCYjMzQ7XG4gIDQxOlx0XHRoZWxwXG4gIDQyOlx0XHQgIFRoaXMgYWxsb3dzIC9wcm9jL3BpZC9tZW0gYWNjZXNzZXMgdG8gb3ZlcnJpZGUgbWVtb3J5IG1hcHBpbmdcbiAgNDM6XHRcdCAgcGVybWlzc2lvbnMgZm9yIGFjdGl2ZSBwdHJhY2VycyBsaWtlIGdkYi5cbiAgNDQ6XHRcbiAgNDU6XHRjb25maWcgUFJPQ19NRU1fTk9fRk9SQ0VcbiAgNDY6XHRcdGJvb2wgXCYjMzQ7TmV2ZXJcJiMzNDtcbiAgNDc6XHRcdGhlbHBcbiAgNDg6XHRcdCAgTmV2ZXIgb3ZlcnJpZGUgbWVtb3J5IG1hcHBpbmcgcGVybWlzc2lvbnNcbiAgNDk6XHRcbiAgNTA6XHRlbmRjaG9pY2VcbiAgNTE6XHRcbiAgNTI6XHRjb25maWcgTVNFQUxfU1lTVEVNX01BUFBJTkdTXG4gIDUzOlx0XHRib29sIFwmIzM0O21zZWFsIHN5c3RlbSBtYXBwaW5nc1wmIzM0O1xuICA1NDpcdFx0ZGVwZW5kcyBvbiA2NEJJVFxuICA1NTpcdFx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX01TRUFMX1NZU1RFTV9NQVBQSU5HU1xuICA1NjpcdFx0ZGVwZW5kcyBvbiAhQ0hFQ0tQT0lOVF9SRVNUT1JFXG4gIDU3Olx0XHRoZWxwXG4gIDU4Olx0XHQgIEFwcGx5IG1zZWFsIG9uIHN5c3RlbSBtYXBwaW5ncy5cbiAgNTk6XHRcdCAgVGhlIHN5c3RlbSBtYXBwaW5ncyBpbmNsdWRlcyB2ZHNvLCB2dmFyLCB2dmFyX3ZjbG9jayxcbiAgNjA6XHRcdCAgdmVjdG9ycyAoYXJtIGNvbXBhdC1tb2RlKSwgc2lncGFnZSAoYXJtIGNvbXBhdC1tb2RlKSwgdXByb2Jlcy5cbiAgNjE6XHRcbiAgNjI6XHRcdCAgQSA2NC1iaXQga2VybmVsIGlzIHJlcXVpcmVkIGZvciB0aGUgbWVtb3J5IHNlYWxpbmcgZmVhdHVyZS5cbiAgNjM6XHRcdCAgTm8gc3BlY2lmaWMgaGFyZHdhcmUgZmVhdHVyZXMgZnJvbSB0aGUgQ1BVIGFyZSBuZWVkZWQuXG4gIDY0Olx0XG4gIDY1Olx0XHQgIFdBUk5JTkc6IFRoaXMgZmVhdHVyZSBicmVha3MgcHJvZ3JhbXMgd2hpY2ggcmVseSBvbiByZWxvY2F0aW5nXG4gIDY2Olx0XHQgIG9yIHVubWFwcGluZyBzeXN0ZW0gbWFwcGluZ3MuIEtub3duIGJyb2tlbiBzb2Z0d2FyZSBhdCB0aGUgdGltZVxuICA2NzpcdFx0ICBvZiB3cml0aW5nIGluY2x1ZGVzIENIRUNLUE9JTlRfUkVTVE9SRSwgVU1MLCBnVmlzb3IsIHJyLiBUaGVyZWZvcmVcbiAgNjg6XHRcdCAgdGhpcyBjb25maWcgY2FuJiMzOTt0IGJlIGVuYWJsZWQgdW5pdmVyc2FsbHkuXG4gIDY5Olx0XG4gIDcwOlx0XHQgIEZvciBjb21wbGV0ZSBkZXNjcmlwdGlvbnMgb2YgbWVtb3J5IHNlYWxpbmcsIHBsZWFzZSBzZWVcbiAgNzE6XHRcdCAgRG9jdW1lbnRhdGlvbi91c2Vyc3BhY2UtYXBpL21zZWFsLnJzdFxuICA3MjpcdFxuICA3MzpcdGNvbmZpZyBTRUNVUklUWVxuICA3NDpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgZGlmZmVyZW50IHNlY3VyaXR5IG1vZGVsc1wmIzM0O1xuICA3NTpcdFx0ZGVwZW5kcyBvbiBTWVNGU1xuICA3NjpcdFx0ZGVwZW5kcyBvbiBNVUxUSVVTRVJcbiAgNzc6XHRcdGhlbHBcbiAgNzg6XHRcdCAgVGhpcyBhbGxvd3MgeW91IHRvIGNob29zZSBkaWZmZXJlbnQgc2VjdXJpdHkgbW9kdWxlcyB0byBiZVxuICA3OTpcdFx0ICBjb25maWd1cmVkIGludG8geW91ciBrZXJuZWwuXG4gIDgwOlx0XG4gIDgxOlx0XHQgIElmIHRoaXMgb3B0aW9uIGlzIG5vdCBzZWxlY3RlZCwgdGhlIGRlZmF1bHQgTGludXggc2VjdXJpdHlcbiAgODI6XHRcdCAgbW9kZWwgd2lsbCBiZSB1c2VkLlxuICA4MzpcdFxuICA4NDpcdFx0ICBJZiB5b3UgYXJlIHVuc3VyZSBob3cgdG8gYW5zd2VyIHRoaXMgcXVlc3Rpb24sIGFuc3dlciBOLlxuICA4NTpcdFxuICA4NjpcdGNvbmZpZyBIQVNfU0VDVVJJVFlfQVVESVRcbiAgODc6XHRcdGRlZl9ib29sIHlcbiAgODg6XHRcdGRlcGVuZHMgb24gQVVESVRcbiAgODk6XHRcdGRlcGVuZHMgb24gU0VDVVJJVFlcbiAgOTA6XHRcbiAgOTE6XHRjb25maWcgU0VDVVJJVFlGU1xuICA5MjpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgdGhlIHNlY3VyaXR5ZnMgZmlsZXN5c3RlbVwmIzM0O1xuICA5MzpcdFx0aGVscFxuICA5NDpcdFx0ICBUaGlzIHdpbGwgYnVpbGQgdGhlIHNlY3VyaXR5ZnMgZmlsZXN5c3RlbS4gIEl0IGlzIGN1cnJlbnRseSB1c2VkIGJ5XG4gIDk1Olx0XHQgIHZhcmlvdXMgc2VjdXJpdHkgbW9kdWxlcyAoQXBwQXJtb3IsIElNQSwgU2FmZVNldElELCBUT01PWU8sIFRQTSkuXG4gIDk2Olx0XG4gIDk3Olx0XHQgIElmIHlvdSBhcmUgdW5zdXJlIGhvdyB0byBhbnN3ZXIgdGhpcyBxdWVzdGlvbiwgYW5zd2VyIE4uXG4gIDk4Olx0XG4gIDk5Olx0Y29uZmlnIFNFQ1VSSVRZX05FVFdPUktcbiAxMDA6XHRcdGJvb2wgXCYjMzQ7U29ja2V0IGFuZCBOZXR3b3JraW5nIFNlY3VyaXR5IEhvb2tzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMjI6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE3NjUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBTRUxpbnV4IEtjb25maWcqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgYHNlY3VyaXR5L3NlbGludXgvS2NvbmZpZ2AgZmlsZS4gR2l2ZW4gbXkgZmFtaWxpYXJpdHkgd2l0aCB0aGUgU0VMaW51eCBlY29zeXN0ZW0gYW5kIGtlcm5lbCBjb25maWd1cmF0aW9uLCB0aGlzIHNob3VsZCBiZSBhIGZhaXJseSBzdHJhaWdodGZvcndhcmQgcHJvY2Vzcy4gSSBleHBlY3QgdG8gZmluZCB0aGUgY29yZSBvcHRpb25zIGZvciBlbmFibGluZywgZGlzYWJsaW5nLCBhbmQgY29uZmlndXJpbmcgU0VMaW51eCB3aXRoaW4gdGhlIGtlcm5lbCwgYWxvbmcgd2l0aCB0aGUgZGVwZW5kZW5jaWVzIGFuZCByZWxhdGlvbnNoaXBzIHRvIG90aGVyIHNlY3VyaXR5IG1vZHVsZXMuIEkmIzM5O2xsIGJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluOgoKKiAgICoqT3ZlcmFsbCBFbmFibGVtZW50OioqIFRoZSB0b3AtbGV2ZWwgYENPTkZJR19TRUNVUklUWV9TRUxJTlVYYCBvcHRpb24sIG5hdHVyYWxseS4gSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIGhvdyBpdCYjMzk7cyBkZWZpbmVkIGFuZCBpZiB0aGVyZSBhcmUgYW55IGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcy4KKiAgICoqUG9saWN5IENvbnRyb2w6KiogSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgY29udHJvbCBhc3BlY3RzIG9mIHRoZSBkZWZhdWx0IHBvbGljeSBhbmQgcG9saWN5IGxvYWRpbmcuIFRoaXMgbWlnaHQgaW5jbHVkZSBvcHRpb25zIGZvciBlbmZvcmNpbmcgb3IgcGVybWlzc2l2ZSBtb2RlcywgYW5kIHdoZXRoZXIgaXQgaGFzIGR5bmFtaWMgbG9hZGluZyBjYXBhYmlsaXRpZXMuCiogICAqKkFkdmFuY2VkIEZlYXR1cmVzOioqIERlcGVuZGluZyBvbiB0aGUga2VybmVsIHZlcnNpb24gYW5kIGNvbmZpZ3VyYXRpb24sIEkmIzM5O2xsIHNjYW4gZm9yIGFueSBhZHZhbmNlZCBmZWF0dXJlcyBkZWZpbmVkLCBzdWNoIGFzIE1MUy9NQ1Mgc3VwcG9ydCBvciBvdGhlciBzcGVjaWFsaXplZCBTRUxpbnV4IGNhcGFiaWxpdGllcyB0aGF0IG1heSBuZWVkIHRvIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQuCiogICAqKkludGVyYWN0aW9uczoqKiBJJiMzOTtsbCBhbHNvIGdsYW5jZSBhdCB0aGUgc3Vycm91bmRpbmcgY29uZmlndXJhdGlvbiBzcGFjZSB0byBlbnN1cmUgY29tcGF0aWJpbGl0eSwgZXNwZWNpYWxseSB3aXRoIG90aGVyIHNlY3VyaXR5IG1vZHVsZXMgKGUuZy4sIElNQSwgTFNNcykuIFRoZSByZWxhdGlvbnNoaXBzIGFyZSBhbHdheXMgaW50ZXJlc3RpbmcuCgpFc3NlbnRpYWxseSwgSSYjMzk7bSBzZXR0aW5nIHRoZSBzdGFnZS4gVGhpcyBpbml0aWFsIGV4YW1pbmF0aW9uIG9mIGBLY29uZmlnYCB3aWxsIHByb3ZpZGUgYSBmb3VuZGF0aW9uYWwgdW5kZXJzdGFuZGluZyBvZiBob3cgU0VMaW51eCBpcyBpbnRlZ3JhdGVkIGludG8gdGhpcyBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbi4gSXQmIzM5O2xsIGRpcmVjdCBteSBhdHRlbnRpb24gdG8gb3RoZXIgYXNwZWN0cyBJIG1pZ2h0IG5lZWQgdG8gY29uc2lkZXIsIG9yIHRvIG90aGVyIHJlbGF0ZWQgZmlsZXMgdGhhdCBuZWVkIGF0dGVudGlvbi4gT25jZSBJIGhhdmUgYSBnb29kIGdyYXNwIG9mIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIEkgY2FuIG1vdmUgb24gdG8gdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBhbmQgYXNzZXNzIGl0cyBpbXBhY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMjI6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtzZWN1cml0eS9zZWxpbnV4L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgU0VDVVJJVFlfU0VMSU5VWFxuICAgMzpcdFx0Ym9vbCBcJiMzNDtTRUxpbnV4IFN1cHBvcnRcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gU0VDVVJJVFlfTkVUV09SSyBcdTAwMjZcdTAwMjYgQVVESVQgXHUwMDI2XHUwMDI2IE5FVCBcdTAwMjZcdTAwMjYgSU5FVFxuICAgNTpcdFx0c2VsZWN0IE5FVFdPUktfU0VDTUFSS1xuICAgNjpcdFx0ZGVmYXVsdCBuXG4gICA3Olx0XHRoZWxwXG4gICA4Olx0XHQgIFRoaXMgc2VsZWN0cyBTZWN1cml0eS1FbmhhbmNlZCBMaW51eCAoU0VMaW51eCkuXG4gICA5Olx0XHQgIFlvdSB3aWxsIGFsc28gbmVlZCBhIHBvbGljeSBjb25maWd1cmF0aW9uIGFuZCBhIGxhYmVsZWQgZmlsZXN5c3RlbS5cbiAgMTA6XHRcdCAgSWYgeW91IGFyZSB1bnN1cmUgaG93IHRvIGFuc3dlciB0aGlzIHF1ZXN0aW9uLCBhbnN3ZXIgTi5cbiAgMTE6XHRcbiAgMTI6XHRjb25maWcgU0VDVVJJVFlfU0VMSU5VWF9CT09UUEFSQU1cbiAgMTM6XHRcdGJvb2wgXCYjMzQ7U0VMaW51eCBib290IHBhcmFtZXRlclwmIzM0O1xuICAxNDpcdFx0ZGVwZW5kcyBvbiBTRUNVUklUWV9TRUxJTlVYXG4gIDE1Olx0XHRkZWZhdWx0IG5cbiAgMTY6XHRcdGhlbHBcbiAgMTc6XHRcdCAgVGhpcyBvcHRpb24gYWRkcyBhIGtlcm5lbCBwYXJhbWV0ZXIgJiMzOTtzZWxpbnV4JiMzOTssIHdoaWNoIGFsbG93cyBTRUxpbnV4XG4gIDE4Olx0XHQgIHRvIGJlIGRpc2FibGVkIGF0IGJvb3QuICBJZiB0aGlzIG9wdGlvbiBpcyBzZWxlY3RlZCwgU0VMaW51eFxuICAxOTpcdFx0ICBmdW5jdGlvbmFsaXR5IGNhbiBiZSBkaXNhYmxlZCB3aXRoIHNlbGludXg9MCBvbiB0aGUga2VybmVsXG4gIDIwOlx0XHQgIGNvbW1hbmQgbGluZS4gIFRoZSBwdXJwb3NlIG9mIHRoaXMgb3B0aW9uIGlzIHRvIGFsbG93IGEgc2luZ2xlXG4gIDIxOlx0XHQgIGtlcm5lbCBpbWFnZSB0byBiZSBkaXN0cmlidXRlZCB3aXRoIFNFTGludXggYnVpbHQgaW4sIGJ1dCBub3RcbiAgMjI6XHRcdCAgbmVjZXNzYXJpbHkgZW5hYmxlZC5cbiAgMjM6XHRcbiAgMjQ6XHRcdCAgSWYgeW91IGFyZSB1bnN1cmUgaG93IHRvIGFuc3dlciB0aGlzIHF1ZXN0aW9uLCBhbnN3ZXIgTi5cbiAgMjU6XHRcbiAgMjY6XHRjb25maWcgU0VDVVJJVFlfU0VMSU5VWF9ERVZFTE9QXG4gIDI3Olx0XHRib29sIFwmIzM0O1NFTGludXggRGV2ZWxvcG1lbnQgU3VwcG9ydFwmIzM0O1xuICAyODpcdFx0ZGVwZW5kcyBvbiBTRUNVUklUWV9TRUxJTlVYXG4gIDI5Olx0XHRkZWZhdWx0IHlcbiAgMzA6XHRcdGhlbHBcbiAgMzE6XHRcdCAgVGhpcyBlbmFibGVzIHRoZSBkZXZlbG9wbWVudCBzdXBwb3J0IG9wdGlvbiBvZiBTRUxpbnV4LFxuICAzMjpcdFx0ICB3aGljaCBpcyB1c2VmdWwgZm9yIGV4cGVyaW1lbnRpbmcgd2l0aCBTRUxpbnV4IGFuZCBkZXZlbG9waW5nXG4gIDMzOlx0XHQgIHBvbGljaWVzLiAgSWYgdW5zdXJlLCBzYXkgWS4gIFdpdGggdGhpcyBvcHRpb24gZW5hYmxlZCwgdGhlXG4gIDM0Olx0XHQgIGtlcm5lbCB3aWxsIHN0YXJ0IGluIHBlcm1pc3NpdmUgbW9kZSAobG9nIGV2ZXJ5dGhpbmcsIGRlbnkgbm90aGluZylcbiAgMzU6XHRcdCAgdW5sZXNzIHlvdSBzcGVjaWZ5IGVuZm9yY2luZz0xIG9uIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lLiAgWW91XG4gIDM2Olx0XHQgIGNhbiBpbnRlcmFjdGl2ZWx5IHRvZ2dsZSB0aGUga2VybmVsIGJldHdlZW4gZW5mb3JjaW5nIG1vZGUgYW5kXG4gIDM3Olx0XHQgIHBlcm1pc3NpdmUgbW9kZSAoaWYgcGVybWl0dGVkIGJ5IHRoZSBwb2xpY3kpIHZpYVxuICAzODpcdFx0ICAvc3lzL2ZzL3NlbGludXgvZW5mb3JjZS5cbiAgMzk6XHRcbiAgNDA6XHRjb25maWcgU0VDVVJJVFlfU0VMSU5VWF9BVkNfU1RBVFNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAyMjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjc5MQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDI1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgU0VMaW51eCBGaWxlIFByb3RlY3Rpb24gSG9vayBNb2RpZmljYXRpb25zKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGNoYW5nZXMgbWFkZSB3aXRoaW4gYHNlY3VyaXR5L3NlbGludXgvaG9va3MuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgbW9kaWZpY2F0aW9ucywgc28gSSYjMzk7bGwgZ28gdGhyb3VnaCB0aGUgZGlmZiBjYXJlZnVsbHkuIEl0IGxvb2tzIGxpa2Ugd2UgaGF2ZSBhIHNldCBvZiBjb3JlIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiB0d2Vha2VkLgoKRmlyc3QsIEkgc2VlIHNldmVyYWwgaGVscGVyIGZ1bmN0aW9ucyBoYXZlIGJlZW4gbW9kaWZpZWQ6IGBpbm9kZV9zaWRfaGFzX3Blcm1gLCBgaW5vZGVfaGFzX3Blcm1gLCBgc2VsaW51eF9maWxlX3VzZXJfc2lkYCwgYGZpbGVfbWFwX3Byb3RfdG9fYXZgLCBgYmFja2luZ19tb3VudGVyc19oYXNfcGVybWAsIGFuZCBgX19maWxlX21hcF9wcm90X2NoZWNrYC4gVGhlc2UgYXJlIHRoZSBpbnRlcm5hbCBidWlsZGluZyBibG9ja3MgYW5kIGFueSBtb2RpZmljYXRpb24gaGVyZSBwb3RlbnRpYWxseSBoYXMgd2lkZSBpbXBhY3RzLgoKQ3J1Y2lhbGx5LCBJIGFsc28gc2VlIHR3byBMU00gaG9va3MgYmVpbmcgbW9kaWZpZWQ6IGBzZWxpbnV4X2JhY2tpbmdfZmlsZV9hbGxvY2AgYW5kIGBzZWxpbnV4X2JhY2tpbmdfZmlsZV9mcmVlYCwgYXMgd2VsbCBhcyBgc2VsaW51eF9maWxlX21wcm90ZWN0YC4gVGhpcyBpcyB3aGVyZSB0aGUgU0VMaW51eCBwb2xpY3kgZW5mb3JjZW1lbnQgaXMgaW50ZWdyYXRlZCBpbnRvIHRoZSBrZXJuZWwmIzM5O3MgZmlsZSBwcm90ZWN0aW9uIG1lY2hhbmlzbXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBob29rcyBhcmUgZGVmaW5lZCBhbmQgY2FsbGVkIHdpdGhpbiB0aGUgTFNNIGZyYW1ld29yayBpdHNlbGYgYW5kIGhvdyBTRUxpbnV4IGlzIHVzaW5nIHRoZW0uCgpUaGVyZWZvcmUsIG15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIGBzZWN1cml0eS9zZWN1cml0eS5jYC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgZGVmaW5pdGlvbnMgYW5kIHVzYWdlIG9mIHRoZSBgc2VjdXJpdHlfZmlsZV9tcHJvdGVjdGAsIGBzZWN1cml0eV9iYWNraW5nX2ZpbGVfYWxsb2NgLCBhbmQgYHNlY3VyaXR5X2JhY2tpbmdfZmlsZV9mcmVlYCBmdW5jdGlvbnMuIFRoaXMgd2lsbCBjbGFyaWZ5IGhvdyB0aGUgU0VMaW51eCBob29rcyBJIG9ic2VydmVkIGluIGBob29rcy5jYCBhcmUgYWN0dWFsbHkgd2lyZWQgaW50byB0aGUgYnJvYWRlciBzZWN1cml0eSBmcmFtZXdvcmsuIEl04oCZcyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBjb250ZXh0IG9mIHRoZXNlIG1vZGlmaWNhdGlvbnMsIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIHVuZGVybHlpbmcgTFNNIGltcGxlbWVudGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAyMjoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWN1cml0eV9iYWNraW5nX2ZpbGVfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7c2VjdXJpdHkvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3NlY3VyaXR5L3NlY3VyaXR5LmM9MjQzMz12b2lkIHNlY3VyaXR5X2ZpbGVfZnJlZShzdHJ1Y3QgZmlsZSAqZmlsZSlcbi0tXG5zZWN1cml0eS9zZWN1cml0eS5jLTI0NDYtLyoqXG5zZWN1cml0eS9zZWN1cml0eS5jOjI0NDc6ICogc2VjdXJpdHlfYmFja2luZ19maWxlX2FsbG9jKCkgLSBBbGxvY2F0ZSBhbmQgc2V0dXAgYSBiYWNraW5nIGZpbGUgYmxvYlxuc2VjdXJpdHkvc2VjdXJpdHkuYy0yNDQ4LSAqIEBiYWNraW5nX2ZpbGU6IHRoZSBiYWNraW5nIGZpbGVcbi0tXG5zZWN1cml0eS9zZWN1cml0eS5jLTI0NjItICovXG5zZWN1cml0eS9zZWN1cml0eS5jOjI0NjM6aW50IHNlY3VyaXR5X2JhY2tpbmdfZmlsZV9hbGxvYyhzdHJ1Y3QgZmlsZSAqYmFja2luZ19maWxlLFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0yNDY0LVx0XHRcdFx0Y29uc3Qgc3RydWN0IGZpbGUgKnVzZXJfZmlsZSlcbi0tXG5zZWN1cml0eS9zZWN1cml0eS5jLTI0NzItXHRpZiAodW5saWtlbHkocmMpKVxuc2VjdXJpdHkvc2VjdXJpdHkuYzoyNDczOlx0XHRzZWN1cml0eV9iYWNraW5nX2ZpbGVfZnJlZShiYWNraW5nX2ZpbGUpO1xuc2VjdXJpdHkvc2VjdXJpdHkuYy0yNDc0LVxuLS1cbnNlY3VyaXR5L3NlY3VyaXR5LmMtMjQ3OC0vKipcbnNlY3VyaXR5L3NlY3VyaXR5LmM6MjQ3OTogKiBzZWN1cml0eV9iYWNraW5nX2ZpbGVfZnJlZSgpIC0gRnJlZSBhIGJhY2tpbmcgZmlsZSBibG9iXG5zZWN1cml0eS9zZWN1cml0eS5jLTI0ODAtICogQGJhY2tpbmdfZmlsZTogdGhlIGJhY2tpbmcgZmlsZVxuLS1cbnNlY3VyaXR5L3NlY3VyaXR5LmMtMjQ4NC0gKi9cbnNlY3VyaXR5L3NlY3VyaXR5LmM6MjQ4NTp2b2lkIHNlY3VyaXR5X2JhY2tpbmdfZmlsZV9mcmVlKHN0cnVjdCBmaWxlICpiYWNraW5nX2ZpbGUpXG5zZWN1cml0eS9zZWN1cml0eS5jLTI0ODYte1xuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz0zOTA1PXN0YXRpYyB2b2lkIHNlbGludXhfYmFja2luZ19maWxlX2ZyZWUoc3RydWN0IGZpbGUgKmJhY2tpbmdfZmlsZSlcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzkwOC1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzozOTA5Olx0Lyogc2VjdXJpdHlfYmFja2luZ19maWxlX2ZyZWUoKSBtYXkgYmUgY2FsbGVkIHR3aWNlIGFmdGVyIGFuIGVycm9yICovXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzkxMC1cdGlmICghYmFja2luZ19maWxlX3NlY3VyaXR5KGJhY2tpbmdfZmlsZSkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDIyOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODg5CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhvc2UgZnVuY3Rpb24gbmFtZXMsIGV4cHJlc3NlZCBhcyB5b3VyIHJlcXVlc3Q6CgoqKkFuYWx5emluZyBTZWN1cml0eSBCYWNraW5nIEZpbGUgT3BlcmF0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb24gbmFtZXM6IGBzZWN1cml0eV9iYWNraW5nX2ZpbGVfYWxsb2NgLCBgc2VjdXJpdHlfYmFja2luZ19maWxlX2ZyZWVgLCBhbmQgYHNlY3VyaXR5X2ZpbGVfbXByb3RlY3RgLiBJbW1lZGlhdGVseSwgSSBzZWUgYSBjbGVhciByZWxhdGlvbnNoaXAuIFRoZXkgYWxsIGRlYWwgd2l0aCwgYXMgdGhlIG5hbWVzIHN1Z2dlc3QsIHNlY3VyaXR5LXJlbGF0ZWQgaW50ZXJhY3Rpb25zIHdpdGggYmFja2luZyBmaWxlcywgd2hpY2ggbGlrZWx5IHJlbGF0ZXMgdG8gZmlsZS1iYWNrZWQgbWVtb3J5IHJlZ2lvbnMgYW5kIHRoZWlyIHNlY3VyaXR5IGNvbnRleHRzLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJiMzOTttIGFzc3VtaW5nIHdlIGFyZSBkZWFsaW5nIHdpdGggc29tZSBmb3JtIG9mIG1lbW9yeSBwcm90ZWN0aW9uIHRpZWQgdG8gZmlsZSBtYXBwaW5nIG9yIHBvc3NpYmx5IHNhbmRib3hpbmcuCgpNeSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGdyYXBoLiBJJiMzOTttIGdvaW5nIHRvIGRldGVybWluZSB3aGljaCBmdW5jdGlvbnMgYXJlICpjYWxsaW5nKiBgc2VjdXJpdHlfYmFja2luZ19maWxlX2FsbG9jYCBhbmQgYHNlY3VyaXR5X2JhY2tpbmdfZmlsZV9mcmVlYC4gVHJhY2luZyB0aGVzZSBjYWxscyB3aWxsIGdpdmUgbWUgdmFsdWFibGUgY29udGV4dC4gVW5kZXJzdGFuZGluZyB0aGUgY29kZSBwYXRocyB0aGF0ICp1c2UqIHRoZSBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIGZ1bmN0aW9ucyB3aWxsIHJldmVhbCB0aGUgc3BlY2lmaWMgc2VjdXJpdHkgY29uY2VybnMgYW5kIHRoZSBvdmVyYWxsIG9wZXJhdGlvbmFsIHBhdHRlcm5zIHN1cnJvdW5kaW5nIHRoZSBiYWNraW5nIGZpbGUgc2VjdXJpdHkgbWVjaGFuaXNtLiBUaGlzIHdpbGwgbGlrZWx5IHNob3cgdGhlIGluaXRpYWxpemF0aW9uIGFuZCBkZXN0cnVjdGlvbiBwcm9jZXNzIGZvciBzZWN1cml0eSBjb250ZXh0cyBhc3NvY2lhdGVkIHdpdGggdGhlIGJhY2tpbmcgZmlsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMjI6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VjdXJpdHlfYmFja2luZ19maWxlXyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9maWxlX3RhYmxlLmM9ODg9c3RhdGljIGlubGluZSB2b2lkIGJhY2tpbmdfZmlsZV9mcmVlKHN0cnVjdCBiYWNraW5nX2ZpbGUgKmZmKVxuZnMvZmlsZV90YWJsZS5jLTg5LXtcbmZzL2ZpbGVfdGFibGUuYzo5MDpcdHNlY3VyaXR5X2JhY2tpbmdfZmlsZV9mcmVlKFx1MDAyNmZmLVx1MDAzZWZpbGUpO1xuZnMvZmlsZV90YWJsZS5jLTkxLVx0cGF0aF9wdXQoXHUwMDI2ZmYtXHUwMDNldXNlcl9wYXRoKTtcbi0tXG5mcy9maWxlX3RhYmxlLmM9MzExPXN0YXRpYyBpbnQgaW5pdF9iYWNraW5nX2ZpbGUoc3RydWN0IGJhY2tpbmdfZmlsZSAqZmYsXG4tLVxuZnMvZmlsZV90YWJsZS5jLTMxNS1cdGJhY2tpbmdfZmlsZV9zZXRfc2VjdXJpdHkoXHUwMDI2ZmYtXHUwMDNlZmlsZSwgTlVMTCk7XG5mcy9maWxlX3RhYmxlLmM6MzE2Olx0cmV0dXJuIHNlY3VyaXR5X2JhY2tpbmdfZmlsZV9hbGxvYyhcdTAwMjZmZi1cdTAwM2VmaWxlLCB1c2VyX2ZpbGUpO1xuZnMvZmlsZV90YWJsZS5jLTMxNy19XG4tLVxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oPTQ3ND12b2lkIHNlY3VyaXR5X2ZpbGVfZnJlZShzdHJ1Y3QgZmlsZSAqZmlsZSk7XG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5Lmg6NDc1OmludCBzZWN1cml0eV9iYWNraW5nX2ZpbGVfYWxsb2Moc3RydWN0IGZpbGUgKmJhY2tpbmdfZmlsZSxcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaC00NzYtXHRcdFx0XHRjb25zdCBzdHJ1Y3QgZmlsZSAqdXNlcl9maWxlKTtcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaDo0Nzc6dm9pZCBzZWN1cml0eV9iYWNraW5nX2ZpbGVfZnJlZShzdHJ1Y3QgZmlsZSAqYmFja2luZ19maWxlKTtcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaC00NzgtaW50IHNlY3VyaXR5X2ZpbGVfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5Lmg9MTE0OD1zdGF0aWMgaW5saW5lIHZvaWQgc2VjdXJpdHlfZmlsZV9mcmVlKHN0cnVjdCBmaWxlICpmaWxlKVxuLS1cbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaC0xMTUwLVxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oOjExNTE6c3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfYmFja2luZ19maWxlX2FsbG9jKHN0cnVjdCBmaWxlICpiYWNraW5nX2ZpbGUsXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgtMTE1Mi1cdFx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGZpbGUgKnVzZXJfZmlsZSlcbi0tXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgtMTE1Ni1cbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaDoxMTU3OnN0YXRpYyBpbmxpbmUgdm9pZCBzZWN1cml0eV9iYWNraW5nX2ZpbGVfZnJlZShzdHJ1Y3QgZmlsZSAqYmFja2luZ19maWxlKVxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTExNTgteyB9XG4tLVxuc2VjdXJpdHkvc2VjdXJpdHkuYz0yNDMzPXZvaWQgc2VjdXJpdHlfZmlsZV9mcmVlKHN0cnVjdCBmaWxlICpmaWxlKVxuLS1cbnNlY3VyaXR5L3NlY3VyaXR5LmMtMjQ0Ni0vKipcbnNlY3VyaXR5L3NlY3VyaXR5LmM6MjQ0NzogKiBzZWN1cml0eV9iYWNraW5nX2ZpbGVfYWxsb2MoKSAtIEFsbG9jYXRlIGFuZCBzZXR1cCBhIGJhY2tpbmcgZmlsZSBibG9iXG5zZWN1cml0eS9zZWN1cml0eS5jLTI0NDgtICogQGJhY2tpbmdfZmlsZTogdGhlIGJhY2tpbmcgZmlsZVxuLS1cbnNlY3VyaXR5L3NlY3VyaXR5LmMtMjQ2Mi0gKi9cbnNlY3VyaXR5L3NlY3VyaXR5LmM6MjQ2MzppbnQgc2VjdXJpdHlfYmFja2luZ19maWxlX2FsbG9jKHN0cnVjdCBmaWxlICpiYWNraW5nX2ZpbGUsXG5zZWN1cml0eS9zZWN1cml0eS5jLTI0NjQtXHRcdFx0XHRjb25zdCBzdHJ1Y3QgZmlsZSAqdXNlcl9maWxlKVxuLS1cbnNlY3VyaXR5L3NlY3VyaXR5LmMtMjQ3Mi1cdGlmICh1bmxpa2VseShyYykpXG5zZWN1cml0eS9zZWN1cml0eS5jOjI0NzM6XHRcdHNlY3VyaXR5X2JhY2tpbmdfZmlsZV9mcmVlKGJhY2tpbmdfZmlsZSk7XG5zZWN1cml0eS9zZWN1cml0eS5jLTI0NzQtXG4tLVxuc2VjdXJpdHkvc2VjdXJpdHkuYy0yNDc4LS8qKlxuc2VjdXJpdHkvc2VjdXJpdHkuYzoyNDc5OiAqIHNlY3VyaXR5X2JhY2tpbmdfZmlsZV9mcmVlKCkgLSBGcmVlIGEgYmFja2luZyBmaWxlIGJsb2JcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMjQ4MC0gKiBAYmFja2luZ19maWxlOiB0aGUgYmFja2luZyBmaWxlXG4tLVxuc2VjdXJpdHkvc2VjdXJpdHkuYy0yNDg0LSAqL1xuc2VjdXJpdHkvc2VjdXJpdHkuYzoyNDg1OnZvaWQgc2VjdXJpdHlfYmFja2luZ19maWxlX2ZyZWUoc3RydWN0IGZpbGUgKmJhY2tpbmdfZmlsZSlcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMjQ4Ni17XG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTM5MDU9c3RhdGljIHZvaWQgc2VsaW51eF9iYWNraW5nX2ZpbGVfZnJlZShzdHJ1Y3QgZmlsZSAqYmFja2luZ19maWxlKVxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zOTA4LVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjM5MDk6XHQvKiBzZWN1cml0eV9iYWNraW5nX2ZpbGVfZnJlZSgpIG1heSBiZSBjYWxsZWQgdHdpY2UgYWZ0ZXIgYW4gZXJyb3IgKi9cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zOTEwLVx0aWYgKCFiYWNraW5nX2ZpbGVfc2VjdXJpdHkoYmFja2luZ19maWxlKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMjI6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxNjEKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEJhY2tpbmcgRmlsZSBTZWN1cml0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBmb2N1cyByaWdodCBub3cgaXMgb24gdGhlIHNlY3VyaXR5IGltcGxpY2F0aW9ucyBvZiBiYWNraW5nIGZpbGVzLCBlc3BlY2lhbGx5IHdpdGhpbiBzb21ldGhpbmcgbGlrZSBvdmVybGF5ZnMuIEkgc2VlIHRoYXQgYGJhY2tpbmdfZmlsZV9hbGxvY2AgYW5kIGBiYWNraW5nX2ZpbGVfZnJlZWAgYXJlIHRoZSBrZXkgZW50cnkgcG9pbnRzOyB0aGV5JiMzOTtyZSB0aGUgaG9va3Mgd2hlbiBiYWNraW5nIGZpbGVzIGFyZSBvcGVuZWQgYW5kIHJlbGVhc2VkLCBoYW5kbGluZyB0aGUgbGlmZWN5Y2xlLCBwZXJoYXBzIHZpYSBgYmFja2luZ19maWxlX29wZW5fcHRyYCBvciBgYmFja2luZ190bXBmaWxlX29wZW5gLiBDcnVjaWFsbHksIHdoZW4gYG1wcm90ZWN0YCBpcyBjYWxsZWQgb24gYSBtZW1vcnkgbWFwcGluZyB0aGF0IGludm9sdmVzIGEgYmFja2luZyBmaWxlLCBgc2VsaW51eF9maWxlX21wcm90ZWN0YCBpcyB0cmlnZ2VyZWQuIFRoYXQgdGVsbHMgbWUgSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBjYWxsIHBhdGhzIG9mIGBzZWN1cml0eV9maWxlX21wcm90ZWN0YCBpdHNlbGYuIFdoZXJlIGVsc2UgaXMgdGhpcyBzZWN1cml0eSBjaGVjayBoYXBwZW5pbmc/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB3aWRlbHkgdGhlc2UgcHJvdGVjdGlvbnMgYXJlIGltcGxlbWVudGVkIHRvIHByb3Blcmx5IGFzc2VzcyB0aGUgb3ZlcmFsbCBzZWN1cml0eSBvZiB0aGUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAyMjoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWN1cml0eV9maWxlX21wcm90ZWN0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaD00ODY9aW50IHNlY3VyaXR5X21tYXBfYWRkcih1bnNpZ25lZCBsb25nIGFkZHIpO1xuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oOjQ4NzppbnQgc2VjdXJpdHlfZmlsZV9tcHJvdGVjdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyByZXFwcm90LFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTQ4OC1cdFx0XHQgICB1bnNpZ25lZCBsb25nIHByb3QpO1xuLS1cbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaD0xMTg2PXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X21tYXBfYWRkcih1bnNpZ25lZCBsb25nIGFkZHIpXG4tLVxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTExOTAtXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5Lmg6MTE5MTpzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9maWxlX21wcm90ZWN0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTExOTItXHRcdFx0XHRcdCB1bnNpZ25lZCBsb25nIHJlcXByb3QsXG4tLVxubW0vbXByb3RlY3QuYz04NzE9c3RhdGljIGludCBkb19tcHJvdGVjdF9wa2V5KHVuc2lnbmVkIGxvbmcgc3RhcnQsIHNpemVfdCBsZW4sXG4tLVxubW0vbXByb3RlY3QuYy05ODctXG5tbS9tcHJvdGVjdC5jOjk4ODpcdFx0ZXJyb3IgPSBzZWN1cml0eV9maWxlX21wcm90ZWN0KHZtYSwgcmVxcHJvdCwgcHJvdCk7XG5tbS9tcHJvdGVjdC5jLTk4OS1cdFx0aWYgKGVycm9yKVxuLS1cbnNlY3VyaXR5L3NlY3VyaXR5LmM9MjYxOT1pbnQgc2VjdXJpdHlfbW1hcF9hZGRyKHVuc2lnbmVkIGxvbmcgYWRkcilcbi0tXG5zZWN1cml0eS9zZWN1cml0eS5jLTI2MjQtLyoqXG5zZWN1cml0eS9zZWN1cml0eS5jOjI2MjU6ICogc2VjdXJpdHlfZmlsZV9tcHJvdGVjdCgpIC0gQ2hlY2sgaWYgY2hhbmdpbmcgbWVtb3J5IHByb3RlY3Rpb25zIGlzIGFsbG93ZWRcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMjYyNi0gKiBAdm1hOiBtZW1vcnkgcmVnaW9uXG4tLVxuc2VjdXJpdHkvc2VjdXJpdHkuYy0yNjMzLSAqL1xuc2VjdXJpdHkvc2VjdXJpdHkuYzoyNjM0OmludCBzZWN1cml0eV9maWxlX21wcm90ZWN0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHJlcXByb3QsXG5zZWN1cml0eS9zZWN1cml0eS5jLTI2MzUtXHRcdFx0ICAgdW5zaWduZWQgbG9uZyBwcm90KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAyMjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTkyMgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDkwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogU0VMaW51eCBCYWNraW5nIEZpbGUgSGFuZGxpbmcqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIG11bHRpLWxheWVyIGJhY2tpbmcgZmlsZXMgd2l0aGluIFNFTGludXggcGVybWlzc2lvbnMgY2hlY2tzLCBzcGVjaWZpY2FsbHkgZHVyaW5nIGBtcHJvdGVjdGAgb3BlcmF0aW9ucy4gSXQmIzM5O3MgaGFuZGxpbmcgdGhlIGFsbG9jYXRpb24sIGRlYWxsb2NhdGlvbiwgYW5kIHRyYWNraW5nIG9mIGBiYWNraW5nX2ZpbGVfc2VjdXJpdHlgIHN0cnVjdHVyZXMsIGluY2x1ZGluZyB0aG9zZSBwZXNreSBsYXllcnMuIExvb2tpbmcgYXQgdGhlIGNvZGUsIGl0JiMzOTtzIHRvdWNoaW5nIGR5bmFtaWMgbWVtb3J5IGFsbG9jYXRpb24gKGNydWNpYWwhKSwgcGF0aCByZWZlcmVuY2UgY291bnRpbmcsIGFuZCBwZXJtaXNzaW9uIGNoZWNrcyBvbiBiYWNraW5nIGZpbGVzLCB0aGUgdXN1YWwgc3VzcGVjdHMsIHJpZ2h0PyBPdmVybGF5RlMsIEVST0ZTIHN0YWNrcywgbmVzdGVkIE92ZXJsYXlGUyDigJMgdGhlIHdvcmtzLgoKVGhlIGtleSBmdW5jdGlvbnMgYXJlIGBzZWxpbnV4X2JhY2tpbmdfZmlsZV9hbGxvY2AsIGBzZWxpbnV4X2JhY2tpbmdfZmlsZV9mcmVlYCwgYW5kIGBzZWxpbnV4X2ZpbGVfbXByb3RlY3RgLiBUaGVzZSBhbGwgbG9vayBpbnRlcmVzdGluZyBmb3IgZnV6emluZzogYHNlbGludXhfYmFja2luZ19maWxlX2FsbG9jYCBhbGxvY2F0ZXMgYW4gYXJyYXksIGNvcGllcyBleGlzdGluZyBsYXllcnMsIGFuZCBhcHBlbmRzIHRoZSBjdXJyZW50IG9uZSwgZ2V0dGluZyBwYXRoIHJlZmVyZW5jZXMuIFRoZW4sIGBzZWxpbnV4X2JhY2tpbmdfZmlsZV9mcmVlYCBmcmVlcyB0aGUgcGF0aHMgYW5kIHRoZSBhcnJheSBpdHNlbGYuIEZpbmFsbHksIGBzZWxpbnV4X2ZpbGVfbXByb3RlY3RgIGNhbGxzIGBiYWNraW5nX21vdW50ZXJzX2hhc19wZXJtYCwgd2hpY2ggaXMgY3J1Y2lhbCBmb3IgZGV0ZXJtaW5pbmcgbW91bnRlciBwZXJtaXNzaW9ucy4KCklzIHRoaXMgcmVhY2hhYmxlIGFuZCB3b3J0aCB0aGUgZWZmb3J0PyBBYnNvbHV0ZWx5ISBUaGlzIGlzIGNvcmUgU0VMaW51eCBsb2dpYywgaGFuZGxpbmcgZmlsZSBhbmQgbXByb3RlY3QgcGVybWlzc2lvbiBjaGVja3MsIGFuZCByZWZlcmVuY2UgdHJhY2tpbmcgb24gYmFja2luZyBmaWxlcy4gSXQmIzM5O3MgZnVsbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUsIG1ha2luZyBpdCBhIHByaW1lIHRhcmdldC4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB0aGUgYEZvY3VzU3ltYm9sc2AuIEFjY29yZGluZyB0byB0aGUgaW5zdHJ1Y3Rpb25zLCB3ZSB3YW50IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMsIGlkZWFsbHkgbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMsIHRvIGF2b2lkIHNrZXdpbmcgdGhlIGZ1enogdGVzdCBkaXN0cmlidXRpb24uIEZvcmdldCBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucy4KClNvLCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBwYXRjaCYjMzk7cyBmdW5jdGlvbnMuIEkgc2VlIGBzZWxpbnV4X2JhY2tpbmdfZmlsZV9hbGxvY2AsIGBzZWxpbnV4X2JhY2tpbmdfZmlsZV9mcmVlYCwgYW5kIGBzZWxpbnV4X2ZpbGVfbXByb3RlY3RgIGluIGBzZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNgLCBidXQgdGhleSYjMzk7cmUgbWFya2VkIHN0YXRpYy4gSG93ZXZlciwgdGhleSYjMzk7cmUgcmVnaXN0ZXJlZCBpbiB0aGUgYHNlbGludXhfaG9va3NgIHRhYmxlIGFzIGBiYWNraW5nX2ZpbGVfYWxsb2NgLCBgYmFja2luZ19maWxlX2ZyZWVgLCBhbmQgYGZpbGVfbXByb3RlY3RgIHJlc3BlY3RpdmVseS4KClRoZXJlIGFyZSBhbHNvIGBzZWN1cml0eV9iYWNraW5nX2ZpbGVfYWxsb2NgLCBgc2VjdXJpdHlfYmFja2luZ19maWxlX2ZyZWVgLCBhbmQgYHNlY3VyaXR5X2ZpbGVfbXByb3RlY3RgIGluIGBzZWN1cml0eS9zZWN1cml0eS5jYCwgYnV0IEkgaGF2ZSBhIGZlZWxpbmcgdGhlIHN0YXRpYy1kZWNsYXJlZCBvbmVzIGFyZSB0aGUgb25lcyB3ZSB3YW50LiBTaW5jZSB0aGVpciBhZGRyZXNzZXMgYXJlIHRha2VuIGluIHRoZSBgc2VsaW51eF9ob29rc2AgdGFibGUsIHRoZSBjb21waWxlciBjYW4mIzM5O3QgY29tcGxldGVseSBpbmxpbmUgdGhlbS4gSSYjMzk7bSBwcmV0dHkgc3VyZSB0aGV5IHJldGFpbiB0aGVpciBzeW1ib2xzIGluIHZtbGludXguIFRoYXQmIzM5O3MgZ29vZC4gQW5kIHRoZSBgc2VjdXJpdHlfYmFja2luZ19maWxlX2FsbG9jYCwgYHNlY3VyaXR5X2JhY2tpbmdfZmlsZV9mcmVlYCwgYHNlY3VyaXR5X2ZpbGVfbXByb3RlY3RgIGluIGBzZWN1cml0eS9zZWN1cml0eS5jYCBhcmUgdGhlIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzLgoKU28sIGl0JiMzOTtzOgoqICAgYHNlbGludXhfYmFja2luZ19maWxlX2FsbG9jYCAocmVnaXN0ZXJlZCBhcyBgYmFja2luZ19maWxlX2FsbG9jYCkKKiAgIGBzZWxpbnV4X2JhY2tpbmdfZmlsZV9mcmVlYCAocmVnaXN0ZXJlZCBhcyBgYmFja2luZ19maWxlX2ZyZWVgKQoqICAgYHNlbGludXhfZmlsZV9tcHJvdGVjdGAgKHJlZ2lzdGVyZWQgYXMgYGZpbGVfbXByb3RlY3RgKQoqICAgYHNlY3VyaXR5X2JhY2tpbmdfZmlsZV9hbGxvY2AKKiAgIGBzZWN1cml0eV9iYWNraW5nX2ZpbGVfZnJlZWAKKiAgIGBzZWN1cml0eV9maWxlX21wcm90ZWN0YAoKV2UmIzM5O2xsIGFkZCBib3RoIHNldHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDIyOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7c2VjdXJpdHkvc2VjdXJpdHkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI0NDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjQ0NTpcdFxuMjQ0NjpcdC8qKlxuMjQ0NzpcdCAqIHNlY3VyaXR5X2JhY2tpbmdfZmlsZV9hbGxvYygpIC0gQWxsb2NhdGUgYW5kIHNldHVwIGEgYmFja2luZyBmaWxlIGJsb2JcbjI0NDg6XHQgKiBAYmFja2luZ19maWxlOiB0aGUgYmFja2luZyBmaWxlXG4yNDQ5Olx0ICogQHVzZXJfZmlsZTogdGhlIGFzc29jaWF0ZWQgdXNlciB2aXNpYmxlIGZpbGVcbjI0NTA6XHQgKlxuMjQ1MTpcdCAqIEFsbG9jYXRlIGEgYmFja2luZyBmaWxlIExTTSBibG9iIGFuZCBwZXJmb3JtIGFueSBuZWNlc3NhcnkgaW5pdGlhbGl6YXRpb24gb2ZcbjI0NTI6XHQgKiB0aGUgTFNNIGJsb2IuICBUaGVyZSB3aWxsIGJlIHNvbWUgb3BlcmF0aW9ucyB3aGVyZSB0aGUgTFNNIHdpbGwgbm90IGhhdmVcbjI0NTM6XHQgKiBhY2Nlc3MgdG8gQHVzZXJfZmlsZSBhZnRlciB0aGlzIHBvaW50LCBzbyBhbnkgaW1wb3J0YW50IHN0YXRlIGFzc29jaWF0ZWRcbjI0NTQ6XHQgKiB3aXRoIEB1c2VyX2ZpbGUgdGhhdCBpcyBpbXBvcnRhbnQgdG8gdGhlIExTTSBzaG91bGQgYmUgY2FwdHVyZWQgaW4gdGhlXG4yNDU1Olx0ICogYmFja2luZyBmaWxlJiMzOTtzIExTTSBibG9iLlxuMjQ1NjpcdCAqXG4yNDU3Olx0ICogTFNNJiMzOTtzIHNob3VsZCBhdm9pZCB0YWtpbmcgYSByZWZlcmVuY2UgdG8gQHVzZXJfZmlsZSBpbiB0aGlzIGhvb2sgYXMgaXQgd2lsbFxuMjQ1ODpcdCAqIHJlc3VsdCBpbiBwcm9ibGVtcyBsYXRlciB3aGVuIHRoZSBzeXN0ZW0gYXR0ZW1wdHMgdG8gZHJvcC9wdXQgdGhlIGZpbGVcbjI0NTk6XHQgKiByZWZlcmVuY2VzIGR1ZSB0byBhIGNpcmN1bGFyIGRlcGVuZGVuY3kuXG4yNDYwOlx0ICpcbjI0NjE6XHQgKiBSZXR1cm46IFJldHVybiAwIGlmIHRoZSBob29rIGlzIHN1Y2Nlc3NmdWwsIG5lZ2F0aXZlIHZhbHVlcyBvdGhlcndpc2UuXG4yNDYyOlx0ICovXG4yNDYzOlx0aW50IHNlY3VyaXR5X2JhY2tpbmdfZmlsZV9hbGxvYyhzdHJ1Y3QgZmlsZSAqYmFja2luZ19maWxlLFxuMjQ2NDpcdFx0XHRcdFx0Y29uc3Qgc3RydWN0IGZpbGUgKnVzZXJfZmlsZSlcbjI0NjU6XHR7XG4yNDY2Olx0XHRpbnQgcmM7XG4yNDY3Olx0XG4yNDY4Olx0XHRyYyA9IGxzbV9iYWNraW5nX2ZpbGVfYWxsb2MoYmFja2luZ19maWxlKTtcbjI0Njk6XHRcdGlmIChyYylcbjI0NzA6XHRcdFx0cmV0dXJuIHJjO1xuMjQ3MTpcdFx0cmMgPSBjYWxsX2ludF9ob29rKGJhY2tpbmdfZmlsZV9hbGxvYywgYmFja2luZ19maWxlLCB1c2VyX2ZpbGUpO1xuMjQ3MjpcdFx0aWYgKHVubGlrZWx5KHJjKSlcbjI0NzM6XHRcdFx0c2VjdXJpdHlfYmFja2luZ19maWxlX2ZyZWUoYmFja2luZ19maWxlKTtcbjI0NzQ6XHRcbjI0NzU6XHRcdHJldHVybiByYztcbjI0NzY6XHR9XG4yNDc3Olx0XG4yNDc4Olx0LyoqXG4yNDc5Olx0ICogc2VjdXJpdHlfYmFja2luZ19maWxlX2ZyZWUoKSAtIEZyZWUgYSBiYWNraW5nIGZpbGUgYmxvYlxuMjQ4MDpcdCAqIEBiYWNraW5nX2ZpbGU6IHRoZSBiYWNraW5nIGZpbGVcbjI0ODE6XHQgKlxuMjQ4MjpcdCAqIEZyZWUgYW55IExTTSBzdGF0ZSBhc3NvY2lhdGUgd2l0aCBhIGJhY2tpbmcgZmlsZSYjMzk7cyBMU00gYmxvYiwgaW5jbHVkaW5nIHRoZVxuMjQ4MzpcdCAqIGJsb2IgaXRzZWxmLlxuMjQ4NDpcdCAqL1xuMjQ4NTpcdHZvaWQgc2VjdXJpdHlfYmFja2luZ19maWxlX2ZyZWUoc3RydWN0IGZpbGUgKmJhY2tpbmdfZmlsZSlcbjI0ODY6XHR7XG4yNDg3Olx0XHR2b2lkICpibG9iID0gYmFja2luZ19maWxlX3NlY3VyaXR5KGJhY2tpbmdfZmlsZSk7XG4yNDg4Olx0XG4yNDg5Olx0XHRjYWxsX3ZvaWRfaG9vayhiYWNraW5nX2ZpbGVfZnJlZSwgYmFja2luZ19maWxlKTtcbjI0OTA6XHRcbjI0OTE6XHRcdGlmIChibG9iKSB7XG4yNDkyOlx0XHRcdGJhY2tpbmdfZmlsZV9zZXRfc2VjdXJpdHkoYmFja2luZ19maWxlLCBOVUxMKTtcbjI0OTM6XHRcdFx0a21lbV9jYWNoZV9mcmVlKGxzbV9iYWNraW5nX2ZpbGVfY2FjaGUsIGJsb2IpO1xuMjQ5NDpcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAyMjoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODM0OQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgYHNlY3VyaXR5X2ZpbGVfbXByb3RlY3RgIEZ1bmN0aW9uKioKCk9rYXksIHNvIHdlIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyBhcm91bmQgYHNlY3VyaXR5X2ZpbGVfbXByb3RlY3RgIGluIGBzZWN1cml0eS9zZWN1cml0eS5jYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgZmlsZSBwcm90ZWN0aW9uIG1hZ2ljIGhhcHBlbnMsIHNvIGl0JiMzOTtzIGEgY3JpdGljYWwgYXJlYSBmb3IgZXhhbWluaW5nIHBvdGVudGlhbCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgb3IgY29udHJvbCBmbG93LiBJJiMzOTttIGdvaW5nIHRvIHB1bGwgdXAgdGhlIGNvZGUgYW5kIHN0YXJ0IHRyYWNpbmcgdGhlIGNhbGxzLCBsb29raW5nIGZvciBhbnkgb2J2aW91cyBob2xlcyBvciBhcmVhcyB0aGF0IG1pZ2h0IGJlIGV4cGxvaXRhYmxlLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIGJlIGxvb2tpbmcgYXQgaG93IGZpbGUgYWNjZXNzIHBlcm1pc3Npb25zIGFyZSBoYW5kbGVkIGluIGNvbmp1bmN0aW9uIHdpdGggbWVtb3J5IHByb3RlY3Rpb24gY2hhbmdlcy4gQXJlIHRoZXJlIHJhY2UgY29uZGl0aW9ucz8gQXJlIHRoZXJlIGluc3VmZmljaWVudCBjaGVja3Mgb24gdXNlciBpbnB1dD8gQXJlIHRoZXJlIHdheXMgdG8gYnlwYXNzIHRoZSBpbnRlbmRlZCBzZWN1cml0eSByZXN0cmljdGlvbnMgdGhyb3VnaCBjbGV2ZXIgbWFuaXB1bGF0aW9uIG9mIHRoZSBzeXN0ZW0gY2FsbHM/IEkmIzM5O2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGNvbnRleHQgaW4gd2hpY2ggYHNlY3VyaXR5X2ZpbGVfbXByb3RlY3RgIGlzIGJlaW5nIGludm9rZWQsIGluY2x1ZGluZyB3aGF0IG90aGVyIHNlY3VyaXR5IG1vZHVsZXMgb3IgaG9va3MgYXJlIGFjdGl2ZSBhdCB0aGUgdGltZS4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IGFueSBpbnRlcmFjdGlvbiB3aXRoIExTTXMsIGJlY2F1c2UgdGhhdCYjMzk7cyBhbHdheXMgYW4gaW1wb3J0YW50IGRldGFpbC4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDIyOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7c2VjdXJpdHkvc2VjdXJpdHkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI2MjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjYyNTpcdCAqIHNlY3VyaXR5X2ZpbGVfbXByb3RlY3QoKSAtIENoZWNrIGlmIGNoYW5naW5nIG1lbW9yeSBwcm90ZWN0aW9ucyBpcyBhbGxvd2VkXG4yNjI2Olx0ICogQHZtYTogbWVtb3J5IHJlZ2lvblxuMjYyNzpcdCAqIEByZXFwcm90OiBhcHBsaWNhdGlvbiByZXF1ZXN0ZWQgcHJvdGVjdGlvblxuMjYyODpcdCAqIEBwcm90OiBwcm90ZWN0aW9uIGFwcGxpZWQgYnkgdGhlIGtlcm5lbFxuMjYyOTpcdCAqXG4yNjMwOlx0ICogQ2hlY2sgcGVybWlzc2lvbnMgYmVmb3JlIGNoYW5naW5nIG1lbW9yeSBhY2Nlc3MgcGVybWlzc2lvbnMuXG4yNjMxOlx0ICpcbjI2MzI6XHQgKiBSZXR1cm46IFJldHVybnMgMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuXG4yNjMzOlx0ICovXG4yNjM0Olx0aW50IHNlY3VyaXR5X2ZpbGVfbXByb3RlY3Qoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgcmVxcHJvdCxcbjI2MzU6XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIHByb3QpXG4yNjM2Olx0e1xuMjYzNzpcdFx0cmV0dXJuIGNhbGxfaW50X2hvb2soZmlsZV9tcHJvdGVjdCwgdm1hLCByZXFwcm90LCBwcm90KTtcbjI2Mzg6XHR9XG4yNjM5Olx0XG4yNjQwOlx0LyoqXG4yNjQxOlx0ICogc2VjdXJpdHlfZmlsZV9sb2NrKCkgLSBDaGVjayBpZiBhIGZpbGUgbG9jayBpcyBhbGxvd2VkXG4yNjQyOlx0ICogQGZpbGU6IGZpbGVcbjI2NDM6XHQgKiBAY21kOiBsb2NrIG9wZXJhdGlvbiAoZS5nLiBGX1JETENLLCBGX1dSTENLKVxuMjY0NDpcdCAqXG4yNjQ1Olx0ICogQ2hlY2sgcGVybWlzc2lvbiBiZWZvcmUgcGVyZm9ybWluZyBmaWxlIGxvY2tpbmcgb3BlcmF0aW9ucy4gIE5vdGUgdGhlIGhvb2tcbjI2NDY6XHQgKiBtZWRpYXRlcyBib3RoIGZsb2NrIGFuZCBmY250bCBzdHlsZSBsb2Nrcy5cbjI2NDc6XHQgKlxuMjY0ODpcdCAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC5cbjI2NDk6XHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMjI6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkwMjEKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAyOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgS2NvbmZpZyBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIGZyb20gYSBjb25maWd1cmF0aW9uIHBlcnNwZWN0aXZlLiBJIG5lZWQgdG8gbmFpbCBkb3duIHRoZSBTRUxpbnV4IHJlcXVpcmVtZW50cyBmaXJzdC4gSnVtcGluZyBpbnRvIGBzZWN1cml0eS9zZWxpbnV4L0tjb25maWdgLCBJIHNlZSBgU0VDVVJJVFlfU0VMSU5VWGAgaXMgdGhlIGtleS4gSXQmIzM5O3MgYSBib29sZWFuLCBkZXBlbmRlbnQgb24gYFNFQ1VSSVRZX05FVFdPUktgLCBgQVVESVRgLCBgTkVUYCwgYW5kIGBJTkVUYCwgYW5kIGl0IGBzZWxlY3RgcyBgTkVUV09SS19TRUNNQVJLYCwgd2l0aCBhIGRlZmF1bHQgb2YgJiMzOTtuJiMzOTsuIExvb2tzIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guCgpOb3csIGxldCYjMzk7cyBkb3VibGUtY2hlY2sgdGhlIGRlcGVuZGVuY2llcy4gYFNFQ1VSSVRZX05FVFdPUktgIHJlbGllcyBvbiBib3RoIGBTRUNVUklUWWAgYW5kIGBORVRgLCB3aGljaCBtYWtlcyBzZW5zZS4gSSBrbm93IGBBVURJVGAgbGl2ZXMgaW4gYGluaXQvS2NvbmZpZ2AsIGFuZCBgSU5FVGAgaXMganVzdCBgQ09ORklHX0lORVRgLiBFeGNlbGxlbnQsIEkmIzM5O3ZlIGdvdCB0aGUgY29yZSBTRUxpbnV4IGRlcGVuZGVuY2llcyBjbGVhcmx5IG1hcHBlZC4KCkJ1dCB0aGF0JiMzOTtzIHByb2JhYmx5IG5vdCB0aGUgd2hvbGUgc3RvcnkuIEkgc2hvdWxkIGV4cGxvcmUgb3RoZXIgcG90ZW50aWFsbHkgcmVsYXRlZCBjb25maWd1cmF0aW9ucywgbm90IGp1c3QgdGhlIG9idmlvdXMuIFRoZSBjb21taXQgbWVzc2FnZSBtZW50aW9ucyBgT1ZFUkxBWV9GU2AgYW5kIGBFUk9GU19GU2AsIHNvIGxldCYjMzk7cyBkaWcgaW50byB0aG9zZSBzcGVjaWZpY2FsbHkuIFRoZSBtZW50aW9uIG9mIGJhY2tpbmcgZmlsZXMsIGBzX3N0YWNrX2RlcHRoYCwgYW5kIGlub2RlIHNoYXJpbmcgaW5kaWNhdGVzIGEgcG90ZW50aWFsIGludGVyYWN0aW9uLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgT1ZFUkxBWV9GU2AgaW4gYGZzL292ZXJsYXlmcy9LY29uZmlnYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMjI6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE9WRVJMQVlfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvb3ZlcmxheWZzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL292ZXJsYXlmcy9LY29uZmlnOjI6Y29uZmlnIE9WRVJMQVlfRlNcbmZzL292ZXJsYXlmcy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtPdmVybGF5IGZpbGVzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuLS1cbmZzL292ZXJsYXlmcy9LY29uZmlnLTE0LVxuZnMvb3ZlcmxheWZzL0tjb25maWc6MTU6Y29uZmlnIE9WRVJMQVlfRlNfUkVESVJFQ1RfRElSXG5mcy9vdmVybGF5ZnMvS2NvbmZpZy0xNi1cdGJvb2wgXCYjMzQ7T3ZlcmxheWZzOiB0dXJuIG9uIHJlZGlyZWN0IGRpcmVjdG9yeSBmZWF0dXJlIGJ5IGRlZmF1bHRcJiMzNDtcbi0tXG5mcy9vdmVybGF5ZnMvS2NvbmZpZy0zMC1cbmZzL292ZXJsYXlmcy9LY29uZmlnOjMxOmNvbmZpZyBPVkVSTEFZX0ZTX1JFRElSRUNUX0FMV0FZU19GT0xMT1dcbmZzL292ZXJsYXlmcy9LY29uZmlnLTMyLVx0Ym9vbCBcJiMzNDtPdmVybGF5ZnM6IGZvbGxvdyByZWRpcmVjdHMgZXZlbiBpZiByZWRpcmVjdHMgYXJlIHR1cm5lZCBvZmZcJiMzNDtcbi0tXG5mcy9vdmVybGF5ZnMvS2NvbmZpZy00NS1cbmZzL292ZXJsYXlmcy9LY29uZmlnOjQ2OmNvbmZpZyBPVkVSTEFZX0ZTX0lOREVYXG5mcy9vdmVybGF5ZnMvS2NvbmZpZy00Ny1cdGJvb2wgXCYjMzQ7T3ZlcmxheWZzOiB0dXJuIG9uIGlub2RlcyBpbmRleCBmZWF0dXJlIGJ5IGRlZmF1bHRcJiMzNDtcbi0tXG5mcy9vdmVybGF5ZnMvS2NvbmZpZy02NC1cbmZzL292ZXJsYXlmcy9LY29uZmlnOjY1OmNvbmZpZyBPVkVSTEFZX0ZTX05GU19FWFBPUlRcbmZzL292ZXJsYXlmcy9LY29uZmlnLTY2LVx0Ym9vbCBcJiMzNDtPdmVybGF5ZnM6IHR1cm4gb24gTkZTIGV4cG9ydCBmZWF0dXJlIGJ5IGRlZmF1bHRcJiMzNDtcbi0tXG5mcy9vdmVybGF5ZnMvS2NvbmZpZy05Mi1cbmZzL292ZXJsYXlmcy9LY29uZmlnOjkzOmNvbmZpZyBPVkVSTEFZX0ZTX1hJTk9fQVVUT1xuZnMvb3ZlcmxheWZzL0tjb25maWctOTQtXHRib29sIFwmIzM0O092ZXJsYXlmczogYXV0byBlbmFibGUgaW5vZGUgbnVtYmVyIG1hcHBpbmdcJiMzNDtcbi0tXG5mcy9vdmVybGF5ZnMvS2NvbmZpZy0xMTAtXG5mcy9vdmVybGF5ZnMvS2NvbmZpZzoxMTE6Y29uZmlnIE9WRVJMQVlfRlNfTUVUQUNPUFlcbmZzL292ZXJsYXlmcy9LY29uZmlnLTExMi1cdGJvb2wgXCYjMzQ7T3ZlcmxheWZzOiB0dXJuIG9uIG1ldGFkYXRhIG9ubHkgY29weSB1cCBmZWF0dXJlIGJ5IGRlZmF1bHRcJiMzNDtcbi0tXG5mcy9vdmVybGF5ZnMvS2NvbmZpZy0xMjgtXG5mcy9vdmVybGF5ZnMvS2NvbmZpZzoxMjk6Y29uZmlnIE9WRVJMQVlfRlNfREVCVUdcbmZzL292ZXJsYXlmcy9LY29uZmlnLTEzMC1cdGJvb2wgXCYjMzQ7T3ZlcmxheWZzOiB0dXJuIG9uIGV4dHJhIGRlYnVnZ2luZyBjaGVja3NcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMjI6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAxMTkKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBleHBlcnQgcGVyc3BlY3RpdmU6CgoqKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIEJhY2tpbmcgRmlsZSBVc2FnZSBpbiBGaWxlc3lzdGVtcyoqCgpSaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBgT1ZFUkxBWV9GU2Agb3IgYW55IHJlbGF0ZWQgZmlsZXN5c3RlbXMgYXJlIGVtcGxveWluZyBiYWNraW5nIGZpbGVzIGluIHRoZWlyIGltcGxlbWVudGF0aW9uLiBUaGF0JiMzOTtzIGEgY3J1Y2lhbCBhc3BlY3QgZm9yIHVuZGVyc3RhbmRpbmcgdGhlaXIgYmVoYXZpb3IsIGVzcGVjaWFsbHkgd2hlbiBpdCBjb21lcyB0byBwZXJmb3JtYW5jZSwgZGF0YSBwZXJzaXN0ZW5jZSwgYW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhlIHVuZGVybHlpbmcgc3RvcmFnZS4gVG8gZG8gdGhhdCwgSSYjMzk7bGwgZ28gZGlyZWN0bHkgdG8gdGhlIHNvdXJjZSBjb2RlLiBNeSBwcmVmZXJyZWQgYXBwcm9hY2g/IEEgdGFyZ2V0ZWQgZ3JlcC4gSSYjMzk7bGwgc2VhcmNoIGZvciBzcGVjaWZpYyBmdW5jdGlvbiBuYW1lcyB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2VzIHRoYXQgYXJlIGhpZ2hseSBzdWdnZXN0aXZlIG9mIGJhY2tpbmcgZmlsZSBvcGVyYXRpb25zLiBJJiMzOTtsbCBmb2N1cyBvbiBgYmFja2luZ19maWxlX29wZW5gIGFuZCBgaW5pdF9iYWNraW5nX2ZpbGVgLiBUaG9zZSBhcmUgdGhlIHR3byBmdW5jdGlvbnMgdGhhdCB3b3VsZCB0eXBpY2FsbHkgYmUgaW52b2x2ZWQgd2hlbiBhIGZpbGVzeXN0ZW0gbmVlZHMgdG8gZGVhbCB3aXRoIGEgYmFja2luZyBmaWxlIHRvIHN1cHBvcnQgb3BlcmF0aW9ucywgc28gSSBrbm93IHRob3NlIHdvdWxkIGdpdmUgbWUgdXNlZnVsIHJlc3VsdHMuIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgd2lsbCBxdWlja2x5IGxlYWQgbWUgdG8gdGhlIGtleSBsb2NhdGlvbnMgaW4gdGhlIGNvZGUgdGhhdCBJIG5lZWQgdG8gZXhhbWluZSBtb3JlIGNsb3NlbHkgdG8gc2VlIHByZWNpc2VseSBob3cgYmFja2luZyBmaWxlcyBhcmUgdXNlZC4gT25jZSBJIGZpbmQgdGhvc2UgaW5zdGFuY2VzIEkgY2FuIGdldCB0byB0aGUgYm90dG9tIG9mIHRoZSBpc3N1ZSBtdWNoIHF1aWNrZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDIyOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JhY2tpbmdfZmlsZV9vcGVuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2JhY2tpbmctZmlsZS5jLTE5LS8qKlxuZnMvYmFja2luZy1maWxlLmM6MjA6ICogYmFja2luZ19maWxlX29wZW4gLSBvcGVuIGEgYmFja2luZyBmaWxlIGZvciBrZXJuZWwgaW50ZXJuYWwgdXNlXG5mcy9iYWNraW5nLWZpbGUuYy0yMS0gKiBAdXNlcl9maWxlOiAgZmlsZSB0aGUgdXNlciByZXF1ZXN0ZWQgdG8gb3BlblxuLS1cbmZzL2JhY2tpbmctZmlsZS5jLTMzLSAqL1xuZnMvYmFja2luZy1maWxlLmM6MzQ6c3RydWN0IGZpbGUgKmJhY2tpbmdfZmlsZV9vcGVuKGNvbnN0IHN0cnVjdCBmaWxlICp1c2VyX2ZpbGUsIGludCBmbGFncyxcbmZzL2JhY2tpbmctZmlsZS5jLTM1LVx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgcGF0aCAqcmVhbF9wYXRoLFxuLS1cbmZzL2JhY2tpbmctZmlsZS5jLTU1LX1cbmZzL2JhY2tpbmctZmlsZS5jOjU2OkVYUE9SVF9TWU1CT0xfR1BMKGJhY2tpbmdfZmlsZV9vcGVuKTtcbmZzL2JhY2tpbmctZmlsZS5jLTU3LVxuLS1cbmZzL2Vyb2ZzL2lzaGFyZS5jPTk2PXN0YXRpYyBpbnQgZXJvZnNfaXNoYXJlX2ZpbGVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbi0tXG5mcy9lcm9mcy9pc2hhcmUuYy0xMDYtXG5mcy9lcm9mcy9pc2hhcmUuYzoxMDc6XHRyZiA9IGJhY2tpbmdfZmlsZV9vcGVuKGZpbGUsIGZpbGUtXHUwMDNlZl9mbGFncyB8IE9fTk9BVElNRSxcbmZzL2Vyb2ZzL2lzaGFyZS5jLTEwOC1cdFx0XHQgICAgICAgXHUwMDI2c2hhcmVkcGF0aCwgY3VycmVudF9jcmVkKCkpO1xuLS1cbmZzL2Z1c2UvcGFzc3Rocm91Z2guYz0xNTI9c3RydWN0IGZ1c2VfYmFja2luZyAqZnVzZV9wYXNzdGhyb3VnaF9vcGVuKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgYmFja2luZ19pZClcbi0tXG5mcy9mdXNlL3Bhc3N0aHJvdWdoLmMtMTY5LVx0LyogQWxsb2NhdGUgYmFja2luZyBmaWxlIHBlciBmdXNlIGZpbGUgdG8gc3RvcmUgZnVzZSBwYXRoICovXG5mcy9mdXNlL3Bhc3N0aHJvdWdoLmM6MTcwOlx0YmFja2luZ19maWxlID0gYmFja2luZ19maWxlX29wZW4oZmlsZSwgZmlsZS1cdTAwM2VmX2ZsYWdzLFxuZnMvZnVzZS9wYXNzdGhyb3VnaC5jLTE3MS1cdFx0XHRcdFx0IFx1MDAyNmZiLVx1MDAzZWZpbGUtXHUwMDNlZl9wYXRoLCBmYi1cdTAwM2VjcmVkKTtcbi0tXG5mcy9vdmVybGF5ZnMvZmlsZS5jPTI4PXN0YXRpYyBzdHJ1Y3QgZmlsZSAqb3ZsX29wZW5fcmVhbGZpbGUoY29uc3Qgc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxuZnMvb3ZlcmxheWZzL2ZpbGUuYy01MC1cbmZzL292ZXJsYXlmcy9maWxlLmM6NTE6XHRcdFx0cmVhbGZpbGUgPSBiYWNraW5nX2ZpbGVfb3BlbihmaWxlLFxuZnMvb3ZlcmxheWZzL2ZpbGUuYy01Mi1cdFx0XHRcdFx0XHQgICAgIGZsYWdzLCByZWFscGF0aCwgY3VycmVudF9jcmVkKCkpO1xuLS1cbmluY2x1ZGUvbGludXgvYmFja2luZy1maWxlLmg9MTU9c3RydWN0IGJhY2tpbmdfZmlsZV9jdHgge1xuLS1cbmluY2x1ZGUvbGludXgvYmFja2luZy1maWxlLmgtMjAtXG5pbmNsdWRlL2xpbnV4L2JhY2tpbmctZmlsZS5oOjIxOnN0cnVjdCBmaWxlICpiYWNraW5nX2ZpbGVfb3Blbihjb25zdCBzdHJ1Y3QgZmlsZSAqdXNlcl9maWxlLCBpbnQgZmxhZ3MsXG5pbmNsdWRlL2xpbnV4L2JhY2tpbmctZmlsZS5oLTIyLVx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgcGF0aCAqcmVhbF9wYXRoLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAyMjoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTA2MAoJCQkJCQkJb3V0cHV0OiAyMzAKCQkJCQkJCXRob3VnaHRzOiA0ODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFNFTGludXggQmFja2luZyBGaWxlIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJiMzOTttIG5vdGluZyB0aGUgY2FsbGVycyBvZiBgYmFja2luZ19maWxlX29wZW5gOiBgb3ZlcmxheWZzYCwgYGVyb2ZzYCwgYW5kIGBmdXNlYC4gVGhhdCYjMzk7cyBpbXBvcnRhbnQgY29udGV4dC4gVGhpcyBwYXRjaCBhcHBlYXJzIHJlbGF0ZWQgdG8gaGFuZGxpbmcgc2VjdXJpdHkgaW1wbGljYXRpb25zIHdoZW4gdGhlc2UgZmlsZXN5c3RlbXMgdXNlIGJhY2tpbmcgZmlsZXMsIHBhcnRpY3VsYXJseSBpbiBhIG11bHRpLWxheWVyZWQgY29udGV4dC4gQW5kIGFzIGV4cGVjdGVkLCBlbmFibGluZyBTRUxpbnV4IHJlcXVpcmVzIGEgc3BlY2lmaWMgc2V0IG9mIGNvbmZpZ3M6IGBTRUNVUklUWV9TRUxJTlVYYCwgYFNFQ1VSSVRZYCwgYEFVRElUYCwgYE5FVGAsIGBJTkVUYCwgYW5kIGBTRUNVUklUWV9ORVRXT1JLYC4gVGhlIHByZXNlbmNlIG9mIGBDT05GSUdfT1ZFUkxBWV9GU2AgaXMgY3JpdGljYWwgdG8gcmVhbGx5ICpzZWUqIHRoZSBiZWhhdmlvciBiZWluZyBhZGRyZXNzZWQuCgpOb3csIGxldCYjMzk7cyBxdWlja2x5IHJldmlldyB0aG9zZSBTRUxpbnV4IHN5bWJvbHMgdGhhdCBhcmUgdGhlIGZvY3VzIGhlcmU6IGBzZWxpbnV4X2JhY2tpbmdfZmlsZV9hbGxvY2AsIGBzZWxpbnV4X2JhY2tpbmdfZmlsZV9mcmVlYCwgYHNlbGludXhfZmlsZV9tcHJvdGVjdGAsIGBzZWN1cml0eV9iYWNraW5nX2ZpbGVfYWxsb2NgLCBgc2VjdXJpdHlfYmFja2luZ19maWxlX2ZyZWVgLCBhbmQgYHNlY3VyaXR5X2ZpbGVfbXByb3RlY3RgLiBHb29kLCB0aGVzZSBhcmUgdGhlIGhvb2tzIGFuZCB3cmFwcGVycy4gVGhhdCBjb25maXJtcyB0aGF0IHdlIGFyZSBkZWFsaW5nIHdpdGggZW50cnlwb2ludHMgdGhhdCBoYXZlIGJlZW4gYWx0ZXJlZCBpbiB0aGUgY29kZS4gSSBkb24mIzM5O3Qgc2VlIGFueXRoaW5nIGdlbmVyaWMgaGVyZSwgdGhlc2UgYXJlIHNlY3VyaXR5LXNwZWNpZmljIGhvb2tzIG9yIHdyYXBwZXJzIHRoYXQgbWFrZSBzZW5zZSB3aXRoaW4gdGhlIFNFTGludXggc3Vic3lzdGVtLgoKU28sIHRoZSBjb25maWcgZGVwZW5kZW5jaWVzIGFyZSB0aGUgZXhwZWN0ZWQ6IGBTRUNVUklUWV9TRUxJTlVYYCwgYFNFQ1VSSVRZYCwgYFNFQ1VSSVRZX05FVFdPUktgLCBgQVVESVRgLCBgTkVUYCwgYElORVRgLCBhbmQgYE9WRVJMQVlfRlNgLiBObyBzdXJwcmlzZXMgdGhlcmUuCgpNeSByZWFzb25pbmcgaXMgc3RyYWlnaHRmb3J3YXJkOiB0aGlzIHBhdGNoIGlzIGFib3V0IGVuaGFuY2luZyBTRUxpbnV4IHRvIGNvcnJlY3RseSBoYW5kbGUgYW5kIHZhbGlkYXRlIHBlcm1pc3Npb25zIHdoZW4gZGVhbGluZyB3aXRoIG11bHRpLWxheWVyZWQgYmFja2luZyBmaWxlcy4gSXQmIzM5O3MgcmVhbGx5IHRhY2tsaW5nIHRoZSBpc3N1ZSBvZiBob3cgc3RhY2tlZCBmaWxlc3lzdGVtcyAobGlrZSBgb3ZlcmxheWZzYCBhbmQgYGVyb2ZzYCB3aGVuIHRoZXkgc2hhcmUgaW5vZGVzKSBpbnRlcmFjdCB3aXRoIFNFTGludXggcGVybWlzc2lvbnMgZHVyaW5nIGBtcHJvdGVjdGAgYW5kIGJhY2tpbmcgZmlsZSBhbGxvY2F0aW9uL2RlYWxsb2NhdGlvbi4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyBsaWtlIHRoZSBpbXBsZW1lbnRhdGlvbiBpbmNsdWRlcyBkeW5hbWljIGxheWVyIGFsbG9jYXRpb24sIHBhdGggcmVmZXJlbmNlIGNvdW50aW5nIGluIGBzZWxpbnV4X2JhY2tpbmdfZmlsZV9hbGxvY2AsIGNsZWFuaW5nIHVwIHByb3Blcmx5IGluIGBzZWxpbnV4X2JhY2tpbmdfZmlsZV9mcmVlYCwgYW5kIHZhbGlkYXRpbmcgcGVybWlzc2lvbnMgZm9yIGludGVybWVkaWF0ZSBtb3VudGVycyBpbiBgc2VsaW51eF9maWxlX21wcm90ZWN0YC4gVGhlc2UgY2hhbmdlcyBkaXJlY3RseSBpbmZsdWVuY2Ugc2VjdXJpdHkgcGVybWlzc2lvbiBjaGVja3MgYW5kIGJhY2tpbmcgZmlsZSBtZW1vcnkgbWFuYWdlbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMjI6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NFQ1VSSVRZJiMzNDssCiAgICAmIzM0O1NFQ1VSSVRZX1NFTElOVVgmIzM0OywKICAgICYjMzQ7U0VDVVJJVFlfTkVUV09SSyYjMzQ7LAogICAgJiMzNDtBVURJVCYjMzQ7LAogICAgJiMzNDtORVQmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtPVkVSTEFZX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2VsaW51eF9iYWNraW5nX2ZpbGVfYWxsb2MmIzM0OywKICAgICYjMzQ7c2VsaW51eF9iYWNraW5nX2ZpbGVfZnJlZSYjMzQ7LAogICAgJiMzNDtzZWxpbnV4X2ZpbGVfbXByb3RlY3QmIzM0OywKICAgICYjMzQ7c2VjdXJpdHlfYmFja2luZ19maWxlX2FsbG9jJiMzNDssCiAgICAmIzM0O3NlY3VyaXR5X2JhY2tpbmdfZmlsZV9mcmVlJiMzNDssCiAgICAmIzM0O3NlY3VyaXR5X2ZpbGVfbXByb3RlY3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0cmFja2luZyBhbmQgZW5mb3JjaW5nIFNFTGludXggcGVybWlzc2lvbnMgYWNyb3NzIG11bHRpLWxheWVyIGJhY2tpbmcgZmlsZXMgKHN1Y2ggYXMgdGhvc2UgdXNlZCBieSBvdmVybGF5ZnMgYW5kIGVyb2ZzKS4gSXQgaW1wbGVtZW50cyBkeW5hbWljIGFsbG9jYXRpb24gYW5kIHJlZmVyZW5jZSB0cmFja2luZyBvZiBpbnRlcm1lZGlhdGUgYmFja2luZyBmaWxlIGxheWVycyBpbiBzZWxpbnV4X2JhY2tpbmdfZmlsZV9hbGxvYywgY2xlYW51cCBpbiBzZWxpbnV4X2JhY2tpbmdfZmlsZV9mcmVlLCBhbmQgbXVsdGktbGF5ZXIgcGVybWlzc2lvbiBjaGVja3MgZHVyaW5nIG1wcm90ZWN0IGluIHNlbGludXhfZmlsZV9tcHJvdGVjdC4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgY29yZSBzZWN1cml0eSBhbmQgZmlsZXN5c3RlbSBpbnRlcmFjdGlvbnMgYW5kIGFyZSB3ZWxsIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NFQ1VSSVRZJiMzNDssCiAgICAmIzM0O1NFQ1VSSVRZX1NFTElOVVgmIzM0OywKICAgICYjMzQ7U0VDVVJJVFlfTkVUV09SSyYjMzQ7LAogICAgJiMzNDtBVURJVCYjMzQ7LAogICAgJiMzNDtORVQmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtPVkVSTEFZX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2VsaW51eF9iYWNraW5nX2ZpbGVfYWxsb2MmIzM0OywKICAgICYjMzQ7c2VsaW51eF9iYWNraW5nX2ZpbGVfZnJlZSYjMzQ7LAogICAgJiMzNDtzZWxpbnV4X2ZpbGVfbXByb3RlY3QmIzM0OywKICAgICYjMzQ7c2VjdXJpdHlfYmFja2luZ19maWxlX2FsbG9jJiMzNDssCiAgICAmIzM0O3NlY3VyaXR5X2JhY2tpbmdfZmlsZV9mcmVlJiMzNDssCiAgICAmIzM0O3NlY3VyaXR5X2ZpbGVfbXByb3RlY3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0cmFja2luZyBhbmQgZW5mb3JjaW5nIFNFTGludXggcGVybWlzc2lvbnMgYWNyb3NzIG11bHRpLWxheWVyIGJhY2tpbmcgZmlsZXMgKHN1Y2ggYXMgdGhvc2UgdXNlZCBieSBvdmVybGF5ZnMgYW5kIGVyb2ZzKS4gSXQgaW1wbGVtZW50cyBkeW5hbWljIGFsbG9jYXRpb24gYW5kIHJlZmVyZW5jZSB0cmFja2luZyBvZiBpbnRlcm1lZGlhdGUgYmFja2luZyBmaWxlIGxheWVycyBpbiBzZWxpbnV4X2JhY2tpbmdfZmlsZV9hbGxvYywgY2xlYW51cCBpbiBzZWxpbnV4X2JhY2tpbmdfZmlsZV9mcmVlLCBhbmQgbXVsdGktbGF5ZXIgcGVybWlzc2lvbiBjaGVja3MgZHVyaW5nIG1wcm90ZWN0IGluIHNlbGludXhfZmlsZV9tcHJvdGVjdC4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgY29yZSBzZWN1cml0eSBhbmQgZmlsZXN5c3RlbSBpbnRlcmFjdGlvbnMgYW5kIGFyZSB3ZWxsIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDIyOjI0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMjI6MjQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBleHRlbmRzIFNFTGludXggYmFja2luZyBmaWxlIHRyYWNraW5nIHRvIGhhbmRsZSBtdWx0aXBsZSBsYXllcnMgaW4gc3RhY2tlZCBmaWxlc3lzdGVtcyAoc3VjaCBhcyBvdmVybGF5ZnMgYW5kIGVyb2ZzKSBieSBpbnRyb2R1Y2luZyBpbnRlcm1lZGlhdGUgYmFja2luZyBsYXllciBzdHJ1Y3R1cmVzLCByZWNvcmRpbmcgcGF0aHMgYW5kIFNJRHMsIGFuZCB2YWxpZGF0aW5nIG1vdW50ZXIgcGVybWlzc2lvbnMgZHVyaW5nIGZpbGUgbW1hcC9tcHJvdGVjdCBvcGVyYXRpb25zLlxuXG5BbGwgbmV3bHkgYWxsb2NhdGVkIGhlYXAgc3RydWN0dXJlcyAoYGJhY2tpbmdfZmlsZV9zZWN1cml0eV9sYXllcmAgYXJyYXlzKSBhcmUgZXhwbGljaXRseSBhbmQgZnVsbHkgaW5pdGlhbGl6ZWQgdXBvbiBhbGxvY2F0aW9uIGJlZm9yZSB1c2Ugb3IgY29weWluZy4gVGhlIGNvbnRhaW5pbmcgYGJhY2tpbmdfZmlsZV9zZWN1cml0eV9zdHJ1Y3RgIGJsb2IgaXMgYWxsb2NhdGVkIHZpYSBga21lbV9jYWNoZV96YWxsb2NgLiBUaGUgYXVkaXQgZGF0YSBzdGFjayBzdHJ1Y3R1cmUgYHN0cnVjdCBjb21tb25fYXVkaXRfZGF0YSBhZGAgaXMgcHJvcGVybHkgY29uZmlndXJlZCB3aXRoIGB0eXBlID0gTFNNX0FVRElUX0RBVEFfUEFUSGAgYW5kIHRoZSBwYXRoIHVuaW9uIG1lbWJlciBhc3NpZ25lZCBiZWZvcmUgcGFzc2luZyB0byB0aGUgYXVkaXQvQVZDIHN1YnN5c3RlbS4gTm8gZGF0YSBpcyBleHBvc2VkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgdGhlcmUgaXMgbm8gYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBQb3RlbnRpYWwgcmlza3MgaW4gdGhpcyBwYXRjaCAoc3VjaCBhcyBsaWZldGltZSBpc3N1ZXMsIHJlZmNvdW50aW5nLCBwYXRoIG1hbmFnZW1lbnQsIG9yIG91dC1vZi1ib3VuZHMgaW5kZXhpbmcpIGZhbGwgd2l0aGluIHRoZSBzY29wZSBvZiBLQVNBTiByYXRoZXIgdGhhbiBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZmE3YTBiNTUwNjIyYzY0NWQ2MmNmOWEzNjQ5OGE3Y2FiZDcyNmNiNgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDI5IDIyOjIzOjIxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCmluZGV4IDAzNWFhZjExM2QxZGEuLmI2NzUwZWRjYzQ3ODMgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYwomIzQzOyYjNDM7JiM0MzsgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKQEAgLTE2NzQsMjYgJiM0MzsxNjc0LDMyIEBAIHN0YXRpYyBpbnQgY3JlZF9oYXNfY2FwYWJpbGl0eShjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCwKIAlyZXR1cm4gcmM7CiB9CiAKLS8qIENoZWNrIHdoZXRoZXIgYSB0YXNrIGhhcyBhIHBhcnRpY3VsYXIgcGVybWlzc2lvbiB0byBhbiBpbm9kZS4KLSAgIFRoZSAmIzM5O2FkcCYjMzk7IHBhcmFtZXRlciBpcyBvcHRpb25hbCBhbmQgYWxsb3dzIG90aGVyIGF1ZGl0Ci0gICBkYXRhIHRvIGJlIHBhc3NlZCAoZS5nLiB0aGUgZGVudHJ5KS4gKi8KLXN0YXRpYyBpbnQgaW5vZGVfaGFzX3Blcm0oY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQsCi0JCQkgIHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkgIHUzMiBwZXJtcywKLQkJCSAgc3RydWN0IGNvbW1vbl9hdWRpdF9kYXRhICphZHApCiYjNDM7LyoKJiM0MzsgKiBDaGVjayB3aGV0aGVyIGEgU0lEIGhhcyBhIHBhcnRpY3VsYXIgcGVybWlzc2lvbiB0byBhbiBpbm9kZS4gIFRoZSAmIzM5O2FkcCYjMzk7CiYjNDM7ICogcGFyYW1ldGVyIGlzIG9wdGlvbmFsIGFuZCBhbGxvd3Mgb3RoZXIgYXVkaXQgZGF0YSB0byBiZSBwYXNzZWQgKGUuZy4gdGhlCiYjNDM7ICogZGVudHJ5KS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IGlub2RlX3NpZF9oYXNfcGVybSh1MzIgc2lkLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgcGVybXMsCiYjNDM7CQkJICAgICAgc3RydWN0IGNvbW1vbl9hdWRpdF9kYXRhICphZHApCiB7CiAJc3RydWN0IGlub2RlX3NlY3VyaXR5X3N0cnVjdCAqaXNlYzsKLQl1MzIgc2lkOwogCiAJaWYgKHVubGlrZWx5KElTX1BSSVZBVEUoaW5vZGUpKSkKIAkJcmV0dXJuIDA7CiAKLQlzaWQgPSBjcmVkX3NpZChjcmVkKTsKIAlpc2VjID0gc2VsaW51eF9pbm9kZShpbm9kZSk7CiAKIAlyZXR1cm4gYXZjX2hhc19wZXJtKHNpZCwgaXNlYy0mZ3Q7c2lkLCBpc2VjLSZndDtzY2xhc3MsIHBlcm1zLCBhZHApOwogfQogCiYjNDM7c3RhdGljIGludCBpbm9kZV9oYXNfcGVybShjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCwKJiM0MzsJCQkgIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiYjNDM7CQkJICB1MzIgcGVybXMsCiYjNDM7CQkJICBzdHJ1Y3QgY29tbW9uX2F1ZGl0X2RhdGEgKmFkcCkKJiM0Mzt7CiYjNDM7CXJldHVybiBpbm9kZV9zaWRfaGFzX3Blcm0oY3JlZF9zaWQoY3JlZCksIGlub2RlLCBwZXJtcywgYWRwKTsKJiM0Mzt9CiYjNDM7CiAvKiBTYW1lIGFzIGlub2RlX2hhc19wZXJtLCBidXQgcGFzcyBleHBsaWNpdCBhdWRpdCBkYXRhIGNvbnRhaW5pbmcKICAgIHRoZSBkZW50cnkgdG8gaGVscCB0aGUgYXVkaXRpbmcgY29kZSB0byBtb3JlIGVhc2lseSBnZW5lcmF0ZSB0aGUKICAgIHBhdGhuYW1lIGlmIG5lZWRlZC4gKi8KQEAgLTM4NDMsMTcgJiM0MzszODQ5LDc0IEBAIHN0YXRpYyBpbnQgc2VsaW51eF9maWxlX2FsbG9jX3NlY3VyaXR5KHN0cnVjdCBmaWxlICpmaWxlKQogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIGlubGluZSB1MzIgc2VsaW51eF9maWxlX3VzZXJfc2lkKGNvbnN0IHN0cnVjdCBmaWxlICpmaWxlKQomIzQzO3sKJiM0MzsJaWYgKHVubGlrZWx5KGZpbGUtJmd0O2ZfbW9kZSAmYW1wOyBGTU9ERV9CQUNLSU5HKSkKJiM0MzsJCXJldHVybiBzZWxpbnV4X2JhY2tpbmdfZmlsZShmaWxlKS0mZ3Q7dWZfc2lkOwomIzQzOwlyZXR1cm4gc2VsaW51eF9maWxlKGZpbGUpLSZndDtzaWQ7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBzZWxpbnV4X2JhY2tpbmdfZmlsZV9hbGxvYyhzdHJ1Y3QgZmlsZSAqYmFja2luZ19maWxlLAogCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBmaWxlICp1c2VyX2ZpbGUpCiB7CiAJc3RydWN0IGJhY2tpbmdfZmlsZV9zZWN1cml0eV9zdHJ1Y3QgKmJmc2VjOwomIzQzOwljb25zdCBzdHJ1Y3QgYmFja2luZ19maWxlX3NlY3VyaXR5X3N0cnVjdCAqdWJmc2VjOwomIzQzOwlzdHJ1Y3QgYmFja2luZ19maWxlX3NlY3VyaXR5X2xheWVyICpsYXllcjsKJiM0MzsJdTMyIGk7CiAKIAliZnNlYyA9IHNlbGludXhfYmFja2luZ19maWxlKGJhY2tpbmdfZmlsZSk7Ci0JYmZzZWMtJmd0O3VmX3NpZCA9IHNlbGludXhfZmlsZSh1c2VyX2ZpbGUpLSZndDtzaWQ7CiYjNDM7CWJmc2VjLSZndDt1Zl9zaWQgPSBzZWxpbnV4X2ZpbGVfdXNlcl9zaWQodXNlcl9maWxlKTsKJiM0MzsJaWYgKCEodXNlcl9maWxlLSZndDtmX21vZGUgJmFtcDsgRk1PREVfQkFDS0lORykpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJdWJmc2VjID0gc2VsaW51eF9iYWNraW5nX2ZpbGUodXNlcl9maWxlKTsKJiM0MzsJLyogYSB3cmFwcGVkIGNvdW50IHdvdWxkIG1ha2Uga21hbGxvY19hcnJheSgpIHJldHVybiBaRVJPX1NJWkVfUFRSICovCiYjNDM7CWlmICh1bmxpa2VseSh1YmZzZWMtJmd0O2xheWVyX2NvdW50ID09IFUzMl9NQVgpKQomIzQzOwkJcmV0dXJuIC1FT1ZFUkZMT1c7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSBmaW5hbCBWTUEgb25seSByZXRhaW5zIHRoZSBsb3dlc3QgYmFja2luZyBmaWxlLCBzbyByZWNvcmQgdGhlCiYjNDM7CSAqIHdob2xlIGNoYWluIGhlcmUgcmF0aGVyIHRoYW4gaW4gdGhlIG1tYXAgaG9vaywgd2hlcmUgY29uY3VycmVudAomIzQzOwkgKiBtYXBwaW5ncyB3b3VsZCBoYXZlIHRvIGJlIHNlcmlhbGl6ZWQuICBTaXplIGl0IGR5bmFtaWNhbGx5OiBlcm9mcwomIzQzOwkgKiBpbm9kZSBzaGFyaW5nIGFkZHMgYSBiYWNraW5nIGZpbGUgd2l0aG91dCBidW1waW5nIHNfc3RhY2tfZGVwdGguCiYjNDM7CSAqLwomIzQzOwliZnNlYy0mZ3Q7bGF5ZXJzID0ga21hbGxvY19hcnJheSh1YmZzZWMtJmd0O2xheWVyX2NvdW50ICYjNDM7IDEsCiYjNDM7CQkJCSAgICAgIHNpemVvZigqYmZzZWMtJmd0O2xheWVycyksIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIWJmc2VjLSZndDtsYXllcnMpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHViZnNlYy0mZ3Q7bGF5ZXJfY291bnQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlsYXllciA9ICZhbXA7YmZzZWMtJmd0O2xheWVyc1tpXTsKJiM0MzsJCSpsYXllciA9IHViZnNlYy0mZ3Q7bGF5ZXJzW2ldOwomIzQzOwkJcGF0aF9nZXQoJmFtcDtsYXllci0mZ3Q7cGF0aCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogZl9wYXRoLCBub3QgZmlsZV91c2VyX3BhdGgoKTogdGhpcyBsYXllciwgbm90IHRoZSB0b3AtbGV2ZWwgZmlsZSAqLwomIzQzOwlsYXllciA9ICZhbXA7YmZzZWMtJmd0O2xheWVyc1tpXTsKJiM0MzsJbGF5ZXItJmd0O3BhdGggPSB1c2VyX2ZpbGUtJmd0O2ZfcGF0aDsKJiM0MzsJbGF5ZXItJmd0O21vdW50ZXJfc2lkID0gY3JlZF9zaWQodXNlcl9maWxlLSZndDtmX2NyZWQpOwomIzQzOwlsYXllci0mZ3Q7ZmRfc2lkID0gc2VsaW51eF9maWxlKHVzZXJfZmlsZSktJmd0O3NpZDsKJiM0MzsJcGF0aF9nZXQoJmFtcDtsYXllci0mZ3Q7cGF0aCk7CiYjNDM7CWJmc2VjLSZndDtsYXllcl9jb3VudCA9IHViZnNlYy0mZ3Q7bGF5ZXJfY291bnQgJiM0MzsgMTsKIAogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIHZvaWQgc2VsaW51eF9iYWNraW5nX2ZpbGVfZnJlZShzdHJ1Y3QgZmlsZSAqYmFja2luZ19maWxlKQomIzQzO3sKJiM0MzsJc3RydWN0IGJhY2tpbmdfZmlsZV9zZWN1cml0eV9zdHJ1Y3QgKmJmc2VjOwomIzQzOwomIzQzOwkvKiBzZWN1cml0eV9iYWNraW5nX2ZpbGVfZnJlZSgpIG1heSBiZSBjYWxsZWQgdHdpY2UgYWZ0ZXIgYW4gZXJyb3IgKi8KJiM0MzsJaWYgKCFiYWNraW5nX2ZpbGVfc2VjdXJpdHkoYmFja2luZ19maWxlKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJYmZzZWMgPSBzZWxpbnV4X2JhY2tpbmdfZmlsZShiYWNraW5nX2ZpbGUpOwomIzQzOwl3aGlsZSAoYmZzZWMtJmd0O2xheWVyX2NvdW50KQomIzQzOwkJcGF0aF9wdXQoJmFtcDtiZnNlYy0mZ3Q7bGF5ZXJzWy0tYmZzZWMtJmd0O2xheWVyX2NvdW50XS5wYXRoKTsKJiM0MzsJa2ZyZWUoYmZzZWMtJmd0O2xheWVycyk7CiYjNDM7CWJmc2VjLSZndDtsYXllcnMgPSBOVUxMOwomIzQzO30KJiM0MzsKIC8qCiAgKiBDaGVjayB3aGV0aGVyIGEgdGFzayBoYXMgdGhlIGlvY3RsIHBlcm1pc3Npb24gYW5kIGNtZAogICogb3BlcmF0aW9uIHRvIGFuIGlub2RlLgpAQCAtMzk3MSw2ICYjNDM7NDAzNCw1MyBAQCBzdGF0aWMgaW50IHNlbGludXhfZmlsZV9pb2N0bF9jb21wYXQoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsCiAKIHN0YXRpYyBpbnQgZGVmYXVsdF9ub2V4ZWMgX19yb19hZnRlcl9pbml0OwogCiYjNDM7c3RhdGljIHUzMiBmaWxlX21hcF9wcm90X3RvX2F2KHVuc2lnbmVkIGxvbmcgcHJvdCwgYm9vbCBzaGFyZWQpCiYjNDM7ewomIzQzOwl1MzIgYXYgPSBGSUxFX19SRUFEOwomIzQzOwomIzQzOwlpZiAoc2hhcmVkICZhbXA7JmFtcDsgKHByb3QgJmFtcDsgUFJPVF9XUklURSkpCiYjNDM7CQlhdiB8PSBGSUxFX19XUklURTsKJiM0MzsJaWYgKHByb3QgJmFtcDsgUFJPVF9FWEVDKQomIzQzOwkJYXYgfD0gRklMRV9fRVhFQ1VURTsKJiM0MzsKJiM0MzsJcmV0dXJuIGF2OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGJhY2tpbmdfbW91bnRlcnNfaGFzX3Blcm0oY29uc3Qgc3RydWN0IGZpbGUgKmZpbGUsIHUzMiBhdikKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBiYWNraW5nX2ZpbGVfc2VjdXJpdHlfc3RydWN0ICpiZnNlYzsKJiM0MzsJY29uc3Qgc3RydWN0IGJhY2tpbmdfZmlsZV9zZWN1cml0eV9sYXllciAqbGF5ZXI7CiYjNDM7CXN0cnVjdCBjb21tb25fYXVkaXRfZGF0YSBhZDsKJiM0MzsJc3RydWN0IGlub2RlICppbm9kZTsKJiM0MzsJdTMyIGk7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJaWYgKFdBUk5fT05fT05DRSghKGZpbGUtJmd0O2ZfbW9kZSAmYW1wOyBGTU9ERV9CQUNLSU5HKSkpCiYjNDM7CQlyZXR1cm4gLUVJTzsKJiM0MzsKJiM0MzsJYmZzZWMgPSBzZWxpbnV4X2JhY2tpbmdfZmlsZShmaWxlKTsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGJmc2VjLSZndDtsYXllcl9jb3VudDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWxheWVyID0gJmFtcDtiZnNlYy0mZ3Q7bGF5ZXJzW2ldOwomIzQzOwkJaW5vZGUgPSBkX2lub2RlKGxheWVyLSZndDtwYXRoLmRlbnRyeSk7CiYjNDM7CiYjNDM7CQlhZC50eXBlID0gTFNNX0FVRElUX0RBVEFfUEFUSDsKJiM0MzsJCWFkLnUucGF0aCA9IGxheWVyLSZndDtwYXRoOwomIzQzOwomIzQzOwkJaWYgKGxheWVyLSZndDttb3VudGVyX3NpZCAhPSBsYXllci0mZ3Q7ZmRfc2lkKSB7CiYjNDM7CQkJcmMgPSBhdmNfaGFzX3Blcm0obGF5ZXItJmd0O21vdW50ZXJfc2lkLCBsYXllci0mZ3Q7ZmRfc2lkLAomIzQzOwkJCQkJICBTRUNDTEFTU19GRCwgRkRfX1VTRSwgJmFtcDthZCk7CiYjNDM7CQkJaWYgKHJjKQomIzQzOwkJCQlyZXR1cm4gcmM7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlyYyA9IGlub2RlX3NpZF9oYXNfcGVybShsYXllci0mZ3Q7bW91bnRlcl9zaWQsIGlub2RlLCBhdiwgJmFtcDthZCk7CiYjNDM7CQlpZiAocmMpCiYjNDM7CQkJcmV0dXJuIHJjOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgX19maWxlX21hcF9wcm90X2NoZWNrKGNvbnN0IHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIHByb3QsCiAJCQkJIGJvb2wgc2hhcmVkLCBib29sIG1vdW50ZXJfY2hlY2ssCiAJCQkJIGJvb2wgYmZfdXNlcl9maWxlKQpAQCAtNDAwNCwxNCAmIzQzOzQxMTQsMTAgQEAgc3RhdGljIGludCBfX2ZpbGVfbWFwX3Byb3RfY2hlY2soY29uc3Qgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgcHJvdCwKIAlpZiAoZmlsZSkgewogCQljb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCA9IG1vdW50ZXJfY2hlY2sgPwogCQkJCWZpbGUtJmd0O2ZfY3JlZCA6IGN1cnJlbnRfY3JlZCgpOwotCQkvKiAmIzM0O3JlYWQmIzM0OyBhbHdheXMgcG9zc2libGUsICYjMzQ7d3JpdGUmIzM0OyBvbmx5IGlmIHNoYXJlZCAqLwotCQl1MzIgYXYgPSBGSUxFX19SRUFEOwotCQlpZiAoc2hhcmVkICZhbXA7JmFtcDsgcHJvdF93cml0ZSkKLQkJCWF2IHw9IEZJTEVfX1dSSVRFOwotCQlpZiAocHJvdF9leGVjKQotCQkJYXYgfD0gRklMRV9fRVhFQ1VURTsKIAotCQlyZXR1cm4gX19maWxlX2hhc19wZXJtKGNyZWQsIGZpbGUsIGF2LCBiZl91c2VyX2ZpbGUpOwomIzQzOwkJcmV0dXJuIF9fZmlsZV9oYXNfcGVybShjcmVkLCBmaWxlLAomIzQzOwkJCQkgICAgICAgZmlsZV9tYXBfcHJvdF90b19hdihwcm90LCBzaGFyZWQpLAomIzQzOwkJCQkgICAgICAgYmZfdXNlcl9maWxlKTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTQxMDYsNiAmIzQzOzQyMTIsNyBAQCBzdGF0aWMgaW50IHNlbGludXhfZmlsZV9tcHJvdGVjdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAlpbnQgcmM7CiAJY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQgPSBjdXJyZW50X2NyZWQoKTsKIAl1MzIgc2lkID0gY3JlZF9zaWQoY3JlZCk7CiYjNDM7CXUzMiBhdjsKIAljb25zdCBzdHJ1Y3QgZmlsZSAqZmlsZSA9IHZtYS0mZ3Q7dm1fZmlsZTsKIAlib29sIGJhY2tpbmdfZmlsZTsKIAlib29sIHNoYXJlZCA9IHZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgVk1fU0hBUkVEOwpAQCAtNDE0OSw2ICYjNDM7NDI1NiwxMCBAQCBzdGF0aWMgaW50IHNlbGludXhfZmlsZV9tcHJvdGVjdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJCWlmIChyYykKIAkJCQlyZXR1cm4gcmM7CiAJCQlpZiAoYmFja2luZ19maWxlKSB7CiYjNDM7CQkJCXJjID0gYmFja2luZ19tb3VudGVyc19oYXNfcGVybShmaWxlLAomIzQzOwkJCQkJCQkgICAgICAgRklMRV9fRVhFQ01PRCk7CiYjNDM7CQkJCWlmIChyYykKJiM0MzsJCQkJCXJldHVybiByYzsKIAkJCQlyYyA9IGZpbGVfaGFzX3Blcm0oZmlsZS0mZ3Q7Zl9jcmVkLCBmaWxlLAogCQkJCQkJICAgRklMRV9fRVhFQ01PRCk7CiAJCQkJaWYgKHJjKQpAQCAtNDE2MSw2ICYjNDM7NDI3MiwxMCBAQCBzdGF0aWMgaW50IHNlbGludXhfZmlsZV9tcHJvdGVjdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIAlpZiAoYmFja2luZ19maWxlKSB7CiYjNDM7CQlhdiA9IGZpbGVfbWFwX3Byb3RfdG9fYXYocHJvdCwgc2hhcmVkKTsKJiM0MzsJCXJjID0gYmFja2luZ19tb3VudGVyc19oYXNfcGVybShmaWxlLCBhdik7CiYjNDM7CQlpZiAocmMpCiYjNDM7CQkJcmV0dXJuIHJjOwogCQlyYyA9IGZpbGVfbWFwX3Byb3RfY2hlY2soZmlsZSwgcHJvdCwgc2hhcmVkLCB0cnVlKTsKIAkJaWYgKHJjKQogCQkJcmV0dXJuIHJjOwpAQCAtNzYzNSw2ICYjNDM7Nzc1MCw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2VjdXJpdHlfaG9va19saXN0IHNlbGludXhfaG9va3NbXSBfX3JvX2FmdGVyX2luaXQgPSB7CiAJTFNNX0hPT0tfSU5JVChmaWxlX3Blcm1pc3Npb24sIHNlbGludXhfZmlsZV9wZXJtaXNzaW9uKSwKIAlMU01fSE9PS19JTklUKGZpbGVfYWxsb2Nfc2VjdXJpdHksIHNlbGludXhfZmlsZV9hbGxvY19zZWN1cml0eSksCiAJTFNNX0hPT0tfSU5JVChiYWNraW5nX2ZpbGVfYWxsb2MsIHNlbGludXhfYmFja2luZ19maWxlX2FsbG9jKSwKJiM0MzsJTFNNX0hPT0tfSU5JVChiYWNraW5nX2ZpbGVfZnJlZSwgc2VsaW51eF9iYWNraW5nX2ZpbGVfZnJlZSksCiAJTFNNX0hPT0tfSU5JVChmaWxlX2lvY3RsLCBzZWxpbnV4X2ZpbGVfaW9jdGwpLAogCUxTTV9IT09LX0lOSVQoZmlsZV9pb2N0bF9jb21wYXQsIHNlbGludXhfZmlsZV9pb2N0bF9jb21wYXQpLAogCUxTTV9IT09LX0lOSVQobW1hcF9maWxlLCBzZWxpbnV4X21tYXBfZmlsZSksCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvb2Jqc2VjLmggYi9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvb2Jqc2VjLmgKaW5kZXggM2MwYTE2ZWM5NzhiMC4uMmYyMTU2ODI1MWZmZSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL29ianNlYy5oCiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9vYmpzZWMuaApAQCAtODYsOCAmIzQzOzg2LDE2IEBAIHN0cnVjdCBmaWxlX3NlY3VyaXR5X3N0cnVjdCB7CiAJdTMyIHBzZXFubzsgLyogUG9saWN5IHNlcW5vIGF0IHRoZSB0aW1lIG9mIGZpbGUgb3BlbiAqLwogfTsKIAomIzQzO3N0cnVjdCBiYWNraW5nX2ZpbGVfc2VjdXJpdHlfbGF5ZXIgewomIzQzOwlzdHJ1Y3QgcGF0aCBwYXRoOyAvKiB0aGlzIGxheWVyJiMzOTtzIHJlYWwgcGF0aCAqLwomIzQzOwl1MzIgbW91bnRlcl9zaWQ7IC8qIFNJRCBvZiB0aGUgbW91bnRlciB0aGF0IG9wZW5lZCBpdCAqLwomIzQzOwl1MzIgZmRfc2lkOyAvKiBTSUQgb2YgaXRzIG9wZW4gZmlsZSBkZXNjcmlwdGlvbiAqLwomIzQzO307CiYjNDM7CiBzdHJ1Y3QgYmFja2luZ19maWxlX3NlY3VyaXR5X3N0cnVjdCB7Ci0JdTMyIHVmX3NpZDsgLyogYXNzb2NpYXRlZCB1c2VyIGZpbGUgZnNlYy0mZ3Q7c2lkICovCiYjNDM7CXUzMiB1Zl9zaWQ7IC8qIHRvcC1sZXZlbCB1c2VyIGZpbGUgZnNlYy0mZ3Q7c2lkICovCiYjNDM7CXUzMiBsYXllcl9jb3VudDsgLyogbnVtYmVyIG9mIGludGVybWVkaWF0ZSBiYWNraW5nIGZpbGVzICovCiYjNDM7CXN0cnVjdCBiYWNraW5nX2ZpbGVfc2VjdXJpdHlfbGF5ZXIgKmxheWVyczsKIH07CiAKIHN0cnVjdCBzdXBlcmJsb2NrX3NlY3VyaXR5X3N0cnVjdCB7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAyMjoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDI3CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNzQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU0VMaW51eCBCYWNraW5nIEZpbGUgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBmaWd1cmUgb3V0IGlmIHdlIG5lZWQgdG8gZmlyZSB1cCBhIEtNU0FOIHNlc3Npb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjaGFuZ2VzIGZpcnN0LiBUaGlzIHBhdGNoIHRvdWNoZXMgYHNlY3VyaXR5L3NlbGludXgvaG9va3MuY2AgYW5kIGBzZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvb2Jqc2VjLmhgLCBzbyBpdCBzZWVtcyBjb3JlIHRvIGhvdyBTRUxpbnV4IGhhbmRsZXMgb2JqZWN0IHNlY3VyaXR5LiBUaGUga2V5IHNlZW1zIHRvIGJlIGFib3V0IHRyYWNraW5nIGludGVybWVkaWF0ZSBiYWNraW5nIGZpbGVzIGZvciBzdGFja2VkIGZpbGVzeXN0ZW1zIGxpa2Ugb3ZlcmxheWZzIG9yIGVyb2ZzLgoKVGhlIGNvZGUgYWRkcyBhIGBzdHJ1Y3QgYmFja2luZ19maWxlX3NlY3VyaXR5X2xheWVyYCwgd2l0aCBgc3RydWN0IHBhdGggcGF0aDsgdTMyIG1vdW50ZXJfc2lkOyB1MzIgZmRfc2lkO2AsIHdoaWNoIHNvdW5kcyBsaWtlIGl0JiMzOTtzIGRlc2lnbmVkIHRvIGtlZXAgdHJhY2sgb2Ygc2VjdXJpdHkgaW5mb3JtYXRpb24gYXQgZWFjaCBsYXllciBvZiB0aGUgZmlsZXN5c3RlbSBzdGFjay4gVGhlbiwgdGhlIGBzdHJ1Y3QgYmFja2luZ19maWxlX3NlY3VyaXR5X3N0cnVjdGAgaXMgZXh0ZW5kZWQgd2l0aCBhIGBsYXllcl9jb3VudGAgYW5kIGFuIGFycmF5IGBsYXllcnNgIG9mIHRoZXNlIGBiYWNraW5nX2ZpbGVfc2VjdXJpdHlfbGF5ZXJgIHN0cnVjdHMuCgpOb3csIHRoZSBhbGxvY2F0aW9uIGlzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIEkgc2VlIGEgYGttYWxsb2NfYXJyYXlgIGJlaW5nIHVzZWQgdG8gYWxsb2NhdGUgdGhlIGBsYXllcnNgIGFycmF5IHdpdGhpbiBgc2VsaW51eF9iYWNraW5nX2ZpbGVfYWxsb2NgLiBIb2xkIG9uLCBhIHNsaWdodCBmbGFnOiBga21hbGxvY19hcnJheWAgYW5kIG5vdCBga2NhbGxvY2Ag4oCTIHRoYXQmIzM5O3MgYSByZWQgZmxhZy4gTGV0IG1lIHNlZSBob3cgaXQmIzM5O3MgaW5pdGlhbGl6ZWQuIExvb2tpbmcgYXQgdGhlIGNvZGU6CmBgYGMKCWJmc2VjLSZndDtsYXllcnMgPSBrbWFsbG9jX2FycmF5KHViZnNlYy0mZ3Q7bGF5ZXJfY291bnQgJiM0MzsgMSwKCQkJCSAgICAgIHNpemVvZigqYmZzZWMtJmd0O2xheWVycyksIEdGUF9LRVJORUwpOwoJaWYgKCFiZnNlYy0mZ3Q7bGF5ZXJzKQoJCXJldHVybiAtRU5PTUVNOwoKCWZvciAoaSA9IDA7IGkgJmx0OyB1YmZzZWMtJmd0O2xheWVyX2NvdW50OyBpJiM0MzsmIzQzOykgewoJCWxheWVyID0gJmFtcDtiZnNlYy0mZ3Q7bGF5ZXJzW2ldOwoJCSpsYXllciA9IHViZnNlYy0mZ3Q7bGF5ZXJzW2ldOwoJCXBhdGhfZ2V0KCZhbXA7bGF5ZXItJmd0O3BhdGgpOwoJfQoKCS8qIGZfcGF0aCwgbm90IGZpbGVfdXNlcl9wYXRoKCk6IHRoaXMgbGF5ZXIsIG5vdCB0aGUgdG9wLWxldmVsIGZpbGUgKi8KCWxheWVyID0gJmFtcDtiZnNlYy0mZ3Q7bGF5ZXJzW2ldOwoJbGF5ZXItJmd0O3BhdGggPSB1c2VyX2ZpbGUtJmd0O2ZfcGF0aDsKCWxheWVyLSZndDttb3VudGVyX3NpZCA9IGNyZWRfc2lkKHVzZXJfZmlsZS0mZ3Q7Zl9jcmVkKTsKCWxheWVyLSZndDtmZF9zaWQgPSBzZWxpbnV4X2ZpbGUodXNlcl9maWxlKS0mZ3Q7c2lkOwoJcGF0aF9nZXQoJmFtcDtsYXllci0mZ3Q7cGF0aCk7CgliZnNlYy0mZ3Q7bGF5ZXJfY291bnQgPSB1YmZzZWMtJmd0O2xheWVyX2NvdW50ICYjNDM7IDE7CmBgYAoKT2theSwgSSBzZWUgbm93LiBgdWJmc2VjLSZndDtsYXllcl9jb3VudGAgZWxlbWVudHMgYXJlIGNvcGllZCBmcm9tIGB1YmZzZWMtJmd0O2xheWVyc2AgaW50byBgYmZzZWMtJmd0O2xheWVyc2AgKGluZGV4ZXMgMCB0byBgdWJmc2VjLSZndDtsYXllcl9jb3VudCAtIDFgKS4gVGhlbiwgdGhlIGNvZGUgKmV4cGxpY2l0bHkqIGluaXRpYWxpemVzIHRoZSBlbGVtZW50IGF0IGluZGV4IGB1YmZzZWMtJmd0O2xheWVyX2NvdW50YCAod2hpY2ggaXMgZXF1YWwgdG8gYGlgKSB3aXRoIHZhbHVlcyBmb3IgYHBhdGhgLCBgbW91bnRlcl9zaWRgLCBhbmQgYGZkX3NpZGAuIGBsYXllcl9jb3VudGAgaXMgdGhlbiBzZXQgdG8gYHViZnNlYy0mZ3Q7bGF5ZXJfY291bnQgJiM0MzsgMWAuIFNvLCBldmVyeSBlbGVtZW50IGZyb20gaW5kZXggYDBgIHVwIHRvIGBsYXllcl9jb3VudCAtIDFgIGdldHMgcHJvcGVybHkgaW5pdGlhbGl6ZWQsIGdpdmVuIHRoZSBsb29wLiBUaGF0JiMzOTtzIGdvb2QuCgpIb3dldmVyLCB0aGUgY29tbWVudCBgZl9wYXRoLCBub3QgZmlsZV91c2VyX3BhdGgoKTogdGhpcyBsYXllciwgbm90IHRoZSB0b3AtbGV2ZWwgZmlsZWAgbmVlZHMgZnVydGhlciBzY3J1dGlueSByZWdhcmRpbmcgd2hhdCB0aGlzIGltcGxpZXMgcmVnYXJkaW5nIG92ZXJhbGwgZmlsZSBoYW5kbGluZy4KCk9rYXksIGxldCYjMzk7cyBjb25zaWRlciB0aGUgY2FzZSB3aGVuIGAhKHVzZXJfZmlsZS0mZ3Q7Zl9tb2RlICZhbXA7IEZNT0RFX0JBQ0tJTkcpYC4gV2hhdCBoYXBwZW5zIHRoZW4/IFRoZSBjb2RlIHNpbXBseSBzZXRzIGBiZnNlYy0mZ3Q7dWZfc2lkYCB0byBgc2VsaW51eF9maWxlX3VzZXJfc2lkKHVzZXJfZmlsZSlgIGFuZCByZXR1cm5zLiBJbiB0aGlzIGNhc2UsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgYmZzZWNgIGl0c2VsZiBnZXRzIGFsbG9jYXRlZCBpbiB0aGF0IHNjZW5hcmlvLiBTbywgSSBuZWVkIHRvIHRyYWNrIHRoZSBhbGxvY2F0aW9uIG9mIGBiYWNraW5nX2ZpbGVfc2VjdXJpdHlgIG9yIGBzZWxpbnV4X2JhY2tpbmdfZmlsZWAgdG8gc2VlIHRoZSBmdWxsIHBpY3R1cmUuIEkgbmVlZCB0byB0cmFjZSB0aGlzIGFsbG9jYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDIyOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JhY2tpbmdfZmlsZS4qc2VjdXJpdHkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtzZWN1cml0eSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtzZWN1cml0eS9zZWN1cml0eS5jPTE4NT1zdGF0aWMgaW50IGxzbV9iYWNraW5nX2ZpbGVfYWxsb2Moc3RydWN0IGZpbGUgKmJhY2tpbmdfZmlsZSlcbi0tXG5zZWN1cml0eS9zZWN1cml0eS5jLTE4OS1cdGlmICghbHNtX2JhY2tpbmdfZmlsZV9jYWNoZSkge1xuc2VjdXJpdHkvc2VjdXJpdHkuYzoxOTA6XHRcdGJhY2tpbmdfZmlsZV9zZXRfc2VjdXJpdHkoYmFja2luZ19maWxlLCBOVUxMKTtcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTkxLVx0XHRyZXR1cm4gMDtcbi0tXG5zZWN1cml0eS9zZWN1cml0eS5jLTE5NC1cdGJsb2IgPSBrbWVtX2NhY2hlX3phbGxvYyhsc21fYmFja2luZ19maWxlX2NhY2hlLCBHRlBfS0VSTkVMKTtcbnNlY3VyaXR5L3NlY3VyaXR5LmM6MTk1Olx0YmFja2luZ19maWxlX3NldF9zZWN1cml0eShiYWNraW5nX2ZpbGUsIGJsb2IpO1xuc2VjdXJpdHkvc2VjdXJpdHkuYy0xOTYtXHRpZiAoIWJsb2IpXG4tLVxuc2VjdXJpdHkvc2VjdXJpdHkuYz0yNDg1PXZvaWQgc2VjdXJpdHlfYmFja2luZ19maWxlX2ZyZWUoc3RydWN0IGZpbGUgKmJhY2tpbmdfZmlsZSlcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMjQ4Ni17XG5zZWN1cml0eS9zZWN1cml0eS5jOjI0ODc6XHR2b2lkICpibG9iID0gYmFja2luZ19maWxlX3NlY3VyaXR5KGJhY2tpbmdfZmlsZSk7XG5zZWN1cml0eS9zZWN1cml0eS5jLTI0ODgtXG4tLVxuc2VjdXJpdHkvc2VjdXJpdHkuYy0yNDkxLVx0aWYgKGJsb2IpIHtcbnNlY3VyaXR5L3NlY3VyaXR5LmM6MjQ5MjpcdFx0YmFja2luZ19maWxlX3NldF9zZWN1cml0eShiYWNraW5nX2ZpbGUsIE5VTEwpO1xuc2VjdXJpdHkvc2VjdXJpdHkuYy0yNDkzLVx0XHRrbWVtX2NhY2hlX2ZyZWUobHNtX2JhY2tpbmdfZmlsZV9jYWNoZSwgYmxvYik7XG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTE3NTc9c3RhdGljIGludCBfX2ZpbGVfaGFzX3Blcm0oY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQsIGNvbnN0IHN0cnVjdCBmaWxlICpmaWxlLFxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0xNzY3LVx0aWYgKGJmX3VzZXJfZmlsZSkge1xuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjE3Njg6XHRcdHN0cnVjdCBiYWNraW5nX2ZpbGVfc2VjdXJpdHlfc3RydWN0ICpiZnNlYztcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0xNzY5LVx0XHRjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aDtcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9Mzg1OT1zdGF0aWMgaW50IHNlbGludXhfYmFja2luZ19maWxlX2FsbG9jKHN0cnVjdCBmaWxlICpiYWNraW5nX2ZpbGUsXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTM4NjEte1xuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjM4NjI6XHRzdHJ1Y3QgYmFja2luZ19maWxlX3NlY3VyaXR5X3N0cnVjdCAqYmZzZWM7XG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6Mzg2MzpcdGNvbnN0IHN0cnVjdCBiYWNraW5nX2ZpbGVfc2VjdXJpdHlfc3RydWN0ICp1YmZzZWM7XG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6Mzg2NDpcdHN0cnVjdCBiYWNraW5nX2ZpbGVfc2VjdXJpdHlfbGF5ZXIgKmxheWVyO1xuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTM4NjUtXHR1MzIgaTtcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9MzkwNT1zdGF0aWMgdm9pZCBzZWxpbnV4X2JhY2tpbmdfZmlsZV9mcmVlKHN0cnVjdCBmaWxlICpiYWNraW5nX2ZpbGUpXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzkwNi17XG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6MzkwNzpcdHN0cnVjdCBiYWNraW5nX2ZpbGVfc2VjdXJpdHlfc3RydWN0ICpiZnNlYztcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zOTA4LVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTM5MDktXHQvKiBzZWN1cml0eV9iYWNraW5nX2ZpbGVfZnJlZSgpIG1heSBiZSBjYWxsZWQgdHdpY2UgYWZ0ZXIgYW4gZXJyb3IgKi9cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzozOTEwOlx0aWYgKCFiYWNraW5nX2ZpbGVfc2VjdXJpdHkoYmFja2luZ19maWxlKSlcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zOTExLVx0XHRyZXR1cm47XG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTQwNDk9c3RhdGljIGludCBiYWNraW5nX21vdW50ZXJzX2hhc19wZXJtKGNvbnN0IHN0cnVjdCBmaWxlICpmaWxlLCB1MzIgYXYpXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNDA1MC17XG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6NDA1MTpcdGNvbnN0IHN0cnVjdCBiYWNraW5nX2ZpbGVfc2VjdXJpdHlfc3RydWN0ICpiZnNlYztcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo0MDUyOlx0Y29uc3Qgc3RydWN0IGJhY2tpbmdfZmlsZV9zZWN1cml0eV9sYXllciAqbGF5ZXI7XG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNDA1My1cdHN0cnVjdCBjb21tb25fYXVkaXRfZGF0YSBhZDtcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9NzY0Mj1zdHJ1Y3QgbHNtX2Jsb2Jfc2l6ZXMgc2VsaW51eF9ibG9iX3NpemVzIF9fcm9fYWZ0ZXJfaW5pdCA9IHtcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNzY0NS1cdC5sYnNfZmlsZSA9IHNpemVvZihzdHJ1Y3QgZmlsZV9zZWN1cml0eV9zdHJ1Y3QpLFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjc2NDY6XHQubGJzX2JhY2tpbmdfZmlsZSA9IHNpemVvZihzdHJ1Y3QgYmFja2luZ19maWxlX3NlY3VyaXR5X3N0cnVjdCksXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNzY0Ny1cdC5sYnNfaW5vZGUgPSBzaXplb2Yoc3RydWN0IGlub2RlX3NlY3VyaXR5X3N0cnVjdCksXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL29ianNlYy5oPTgyPXN0cnVjdCBmaWxlX3NlY3VyaXR5X3N0cnVjdCB7XG4tLVxuc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL29ianNlYy5oLTg4LVxuc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL29ianNlYy5oOjg5OnN0cnVjdCBiYWNraW5nX2ZpbGVfc2VjdXJpdHlfbGF5ZXIge1xuc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL29ianNlYy5oLTkwLVx0c3RydWN0IHBhdGggcGF0aDsgLyogdGhpcyBsYXllciYjMzk7cyByZWFsIHBhdGggKi9cbi0tXG5zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvb2Jqc2VjLmgtOTQtXG5zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvb2Jqc2VjLmg6OTU6c3RydWN0IGJhY2tpbmdfZmlsZV9zZWN1cml0eV9zdHJ1Y3Qge1xuc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL29ianNlYy5oLTk2LVx0dTMyIHVmX3NpZDsgLyogdG9wLWxldmVsIHVzZXIgZmlsZSBmc2VjLVx1MDAzZXNpZCAqL1xuc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL29ianNlYy5oLTk3LVx0dTMyIGxheWVyX2NvdW50OyAvKiBudW1iZXIgb2YgaW50ZXJtZWRpYXRlIGJhY2tpbmcgZmlsZXMgKi9cbnNlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9vYmpzZWMuaDo5ODpcdHN0cnVjdCBiYWNraW5nX2ZpbGVfc2VjdXJpdHlfbGF5ZXIgKmxheWVycztcbnNlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9vYmpzZWMuaC05OS19O1xuLS1cbnNlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9vYmpzZWMuaD0yMDM9c3RhdGljIGlubGluZSBzdHJ1Y3QgZmlsZV9zZWN1cml0eV9zdHJ1Y3QgKnNlbGludXhfZmlsZShjb25zdCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvb2Jqc2VjLmgtMjA3LVxuc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL29ianNlYy5oOjIwODpzdGF0aWMgaW5saW5lIHN0cnVjdCBiYWNraW5nX2ZpbGVfc2VjdXJpdHlfc3RydWN0ICpcbnNlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9vYmpzZWMuaC0yMDktc2VsaW51eF9iYWNraW5nX2ZpbGUoY29uc3Qgc3RydWN0IGZpbGUgKmJhY2tpbmdfZmlsZSlcbnNlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9vYmpzZWMuaC0yMTAte1xuc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL29ianNlYy5oOjIxMTpcdHZvaWQgKmJsb2IgPSBiYWNraW5nX2ZpbGVfc2VjdXJpdHkoYmFja2luZ19maWxlKTtcbnNlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9vYmpzZWMuaC0yMTItXHRyZXR1cm4gYmxvYiAmIzQzOyBzZWxpbnV4X2Jsb2Jfc2l6ZXMubGJzX2JhY2tpbmdfZmlsZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMjI6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODIwNgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDYxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgU2VjdXJpdHkgQ29udGV4dHMgaW4gYSBLZXJuZWwgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGNvZGUuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGBzZWN1cml0eS9zZWN1cml0eS5jYCBmaWxlLCBzcGVjaWZpY2FsbHkgdGhlIGBsc21fYmFja2luZ19maWxlX2FsbG9jYCBmdW5jdGlvbi4gVGhlIGtleSBoZXJlIGlzIHRoZSBhbGxvY2F0aW9uIG9mIGBibG9iYCB1c2luZyBga21lbV9jYWNoZV96YWxsb2NgLiBCZWNhdXNlIGl0JiMzOTtzIHplcm8tYWxsb2NhdGVkLCB0aGUgYGJmc2VjYCBzdHJ1Y3R1cmUgaXMgaW5pdGlhbGl6ZWQgd2l0aCBhbGwgemVyb3MuIFRoaXMgbWVhbnMgdGhhdCwgdXBvbiBhbGxvY2F0aW9uIGluIHRoaXMgY29udGV4dCwgYGxheWVyX2NvdW50YCB3aWxsIGJlIHplcm8gYW5kIGBsYXllcnNgIHdpbGwgYmUgYE5VTExgLiBUaGlzIGlzIHNpZ25pZmljYW50IGJlY2F1c2UsIGlmIHRoZSBgdXNlcl9maWxlYCBkb2VzIG5vdCBoYXZlIHRoZSBgRk1PREVfQkFDS0lOR2AgZmxhZyBzZXQsIHdlIHdpbGwgbWFpbnRhaW4gdGhhdCB6ZXJvIHN0YXRlLgoKTm93LCBsZXQmIzM5O3MgbW92ZSB0byB0aGUgc3RhY2sgdmFyaWFibGVzIGluIHRoZSBwYXRjaC4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhlIGBiYWNraW5nX21vdW50ZXJzX2hhc19wZXJtYCBmdW5jdGlvbi4gTG9va2luZyBhdCBpdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBgc3RydWN0IGNvbW1vbl9hdWRpdF9kYXRhIGFkYCBpcyBiZWluZyB1c2VkIHdpdGhpbiB0aGUgbG9vcC4gVGhlIGNvZGUgaXRlcmF0ZXMgdGhyb3VnaCBiYWNraW5nIGZpbGUgbGF5ZXJzIGFuZCBjaGVja3MgcGVybWlzc2lvbnMuIEl0IHV0aWxpemVzIGJvdGggYGF2Y19oYXNfcGVybWAgYW5kIGBpbm9kZV9zaWRfaGFzX3Blcm1gLCB3aGljaCBhcHBlYXIgdG8gdGFrZSBgYWRgIGFzIGEgcGFyYW1ldGVyLiBJdCBzZWVtcyB0aGUgY29kZSBpcyB1c2luZyB0aGUgcGF0aCBkYXRhIGluIGBhZGAsIGFuZCBpZiB0aG9zZSBwYXRocyBkb24mIzM5O3QgbWFrZSBzZW5zZSwgdGhlbiB0aGVyZSBjb3VsZCBiZSBwcm9ibGVtcy4KCk15IGNvbmNlcm4gaXMgaG93IGBhZGAgaXMgaW5pdGlhbGl6ZWQgYW5kIHVzZWQgd2l0aGluIHRob3NlIGBhdmNfaGFzX3Blcm1gIGFuZCBgaW5vZGVfc2lkX2hhc19wZXJtYCBjYWxscy4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBvZiB0aGUgdHlwaWNhbCBpbml0aWFsaXphdGlvbiBhbmQgdXNhZ2Ugb2YgYGNvbW1vbl9hdWRpdF9kYXRhYCB3aXRoaW4gdGhlIFNFTGludXggaG9va3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgYWRgIGlzIHBvcHVsYXRlZCBhbmQgaWYgdGhlcmUgYXJlIGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IgdGhhdCBjb3VsZCBhcmlzZSBmcm9tIHRoZSB3YXkgdGhlIHBhdGhzIGFyZSBiZWluZyBwYXNzZWQgaW4gaGVyZS4gSSYjMzk7bGwgbmVlZCB0byBnbyB0aHJvdWdoIHRoZSByZWxhdGVkIHNlbGludXggaG9vayBjYWxscyB0byBtYWtlIHN1cmUgdGhlc2UgYXJndW1lbnRzIGNhbiYjMzk7dCBiZSBtaXN1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAyMjoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthZFxcLnR5cGUgPSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3NlY3VyaXR5L3NlbGludXgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7c2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTE2NDM9c3RhdGljIGludCBjcmVkX2hhc19jYXBhYmlsaXR5KGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkLFxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0xNjUyLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjE2NTM6XHRhZC50eXBlID0gTFNNX0FVRElUX0RBVEFfQ0FQO1xuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTE2NTQtXHRhZC51LmNhcCA9IGNhcDtcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9MTcwNj1zdGF0aWMgaW5saW5lIGludCBkZW50cnlfaGFzX3Blcm0oY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQsXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTE3MTMtXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6MTcxNDpcdGFkLnR5cGUgPSBMU01fQVVESVRfREFUQV9ERU5UUlk7XG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMTcxNS1cdGFkLnUuZGVudHJ5ID0gZGVudHJ5O1xuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz0xNzI1PXN0YXRpYyBpbmxpbmUgaW50IHBhdGhfaGFzX3Blcm0oY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQsXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTE3MzItXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6MTczMzpcdGFkLnR5cGUgPSBMU01fQVVESVRfREFUQV9QQVRIO1xuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTE3MzQtXHRhZC51LnBhdGggPSAqcGF0aDtcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9MTc0Mj1zdGF0aWMgaW5saW5lIGludCBmaWxlX3BhdGhfaGFzX3Blcm0oY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQsXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTE3NDctXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6MTc0ODpcdGFkLnR5cGUgPSBMU01fQVVESVRfREFUQV9GSUxFO1xuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTE3NDktXHRhZC51LmZpbGUgPSBmaWxlO1xuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz0xNzU3PXN0YXRpYyBpbnQgX19maWxlX2hhc19wZXJtKGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkLCBjb25zdCBzdHJ1Y3QgZmlsZSAqZmlsZSxcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMTc3OC1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzoxNzc5Olx0XHRhZC50eXBlID0gTFNNX0FVRElUX0RBVEFfUEFUSDtcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0xNzgwLVx0XHRhZC51LnBhdGggPSAqcGF0aDtcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMTc4Ni1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzoxNzg3Olx0XHRhZC50eXBlID0gTFNNX0FVRElUX0RBVEFfRklMRTtcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0xNzg4LVx0XHRhZC51LmZpbGUgPSBmaWxlO1xuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz0xODU0PXN0YXRpYyBpbnQgbWF5X2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMTg2OS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzoxODcwOlx0YWQudHlwZSA9IExTTV9BVURJVF9EQVRBX0RFTlRSWTtcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0xODcxLVx0YWQudS5kZW50cnkgPSBkZW50cnk7XG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTE4OTg9c3RhdGljIGludCBtYXlfbGluayhzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMTkxMS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzoxOTEyOlx0YWQudHlwZSA9IExTTV9BVURJVF9EQVRBX0RFTlRSWTtcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0xOTEzLVx0YWQudS5kZW50cnkgPSBkZW50cnk7XG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTE5NDE9c3RhdGljIGlubGluZSBpbnQgbWF5X3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTE5NTctXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6MTk1ODpcdGFkLnR5cGUgPSBMU01fQVVESVRfREFUQV9ERU5UUlk7XG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMTk1OS1cbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9MjExMT1zdGF0aWMgaW50IHNlbGludXhfYmluZGVyX3RyYW5zZmVyX2ZpbGUoY29uc3Qgc3RydWN0IGNyZWQgKmZyb20sXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTIxMjEtXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6MjEyMjpcdGFkLnR5cGUgPSBMU01fQVVESVRfREFUQV9QQVRIO1xuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTIxMjMtXHRhZC51LnBhdGggPSBmaWxlLVx1MDAzZWZfcGF0aDtcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9MjM0ND1zdGF0aWMgaW50IHNlbGludXhfYnBybV9jcmVkc19mb3JfZXhlYyhzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0yNDExLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjI0MTI6XHRhZC50eXBlID0gTFNNX0FVRElUX0RBVEFfRklMRTtcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0yNDEzLVx0YWQudS5maWxlID0gYnBybS1cdTAwM2VmaWxlO1xuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz0yNzkzPXN0YXRpYyBpbnQgc2VsaW51eF9zYl9rZXJuX21vdW50KGNvbnN0IHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTI3OTctXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6Mjc5ODpcdGFkLnR5cGUgPSBMU01fQVVESVRfREFUQV9ERU5UUlk7XG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMjc5OS1cdGFkLnUuZGVudHJ5ID0gc2ItXHUwMDNlc19yb290O1xuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz0yODAzPXN0YXRpYyBpbnQgc2VsaW51eF9zYl9zdGF0ZnMoc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0yODA3LVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjI4MDg6XHRhZC50eXBlID0gTFNNX0FVRElUX0RBVEFfREVOVFJZO1xuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTI4MDktXHRhZC51LmRlbnRyeSA9IGRlbnRyeS1cdTAwM2VkX3NiLVx1MDAzZXNfcm9vdDtcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9MzAxNz1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTMwNzItXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6MzA3MzpcdGFkLnR5cGUgPSBMU01fQVVESVRfREFUQV9BTk9OSU5PREU7XG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzA3NC1cdGFkLnUuYW5vbmNsYXNzID0gbmFtZSA/IChjb25zdCBjaGFyICopbmFtZS1cdTAwM2VuYW1lIDogXCYjMzQ7P1wmIzM0Oztcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9MzEzMT1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfZm9sbG93X2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMTM3LVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjMxMzg6XHRhZC50eXBlID0gTFNNX0FVRElUX0RBVEFfREVOVFJZO1xuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTMxMzktXHRhZC51LmRlbnRyeSA9IGRlbnRyeTtcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9MzE0Nz1zdGF0aWMgbm9pbmxpbmUgaW50IGF1ZGl0X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzE1My1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzozMTU0Olx0YWQudHlwZSA9IExTTV9BVURJVF9EQVRBX0lOT0RFO1xuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTMxNTUtXHRhZC51Lmlub2RlID0gaW5vZGU7XG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTMzNzY9c3RhdGljIGludCBzZWxpbnV4X2lub2RlX3NldHhhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zNDAwLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjM0MDE6XHRhZC50eXBlID0gTFNNX0FVRElUX0RBVEFfREVOVFJZO1xuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTM0MDItXHRhZC51LmRlbnRyeSA9IGRlbnRyeTtcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9MzU2Mj1zdGF0aWMgaW50IHNlbGludXhfcGF0aF9ub3RpZnkoY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsIHU2NCBtYXNrLFxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zNTY5LVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjM1NzA6XHRhZC50eXBlID0gTFNNX0FVRElUX0RBVEFfUEFUSDtcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zNTcxLVx0YWQudS5wYXRoID0gKnBhdGg7XG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTM5MjQ9c3RhdGljIGludCBpb2N0bF9oYXNfcGVybShjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCwgc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTM5MzYtXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6MzkzNzpcdGFkLnR5cGUgPSBMU01fQVVESVRfREFUQV9JT0NUTF9PUDtcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zOTM4LVx0YWQudS5vcCA9IFx1MDAyNmlvY3RsO1xuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz00MDQ5PXN0YXRpYyBpbnQgYmFja2luZ19tb3VudGVyc19oYXNfcGVybShjb25zdCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdTMyIGF2KVxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy00MDY1LVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjQwNjY6XHRcdGFkLnR5cGUgPSBMU01fQVVESVRfREFUQV9QQVRIO1xuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTQwNjctXHRcdGFkLnUucGF0aCA9IGxheWVyLVx1MDAzZXBhdGg7XG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTQxNDY9c3RhdGljIGludCBzZWxpbnV4X21tYXBfZmlsZV9jb21tb24oc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgcHJvdCxcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNDE1NC1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo0MTU1Olx0XHRhZC50eXBlID0gTFNNX0FVRElUX0RBVEFfRklMRTtcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy00MTU2LVx0XHRhZC51LmZpbGUgPSBmaWxlO1xuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz00NDg5PXN0YXRpYyBpbnQgc2VsaW51eF9rZXJuZWxfbW9kdWxlX3JlcXVlc3QoY2hhciAqa21vZF9uYW1lKVxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy00NDkyLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjQ0OTM6XHRhZC50eXBlID0gTFNNX0FVRElUX0RBVEFfS01PRDtcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy00NDk0LVx0YWQudS5rbW9kX25hbWUgPSBrbW9kX25hbWU7XG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTQ1MDA9c3RhdGljIGludCBzZWxpbnV4X2tlcm5lbF9sb2FkX2Zyb21fZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgdTMyIHJlcXVlc3RlZClcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNDUxMC1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo0NTExOlx0YWQudHlwZSA9IExTTV9BVURJVF9EQVRBX0ZJTEU7XG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNDUxMi1cdGFkLnUuZmlsZSA9IGZpbGU7XG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTUxMjA9c3RhdGljIGludCBfX3NlbGludXhfc29ja2V0X2JpbmQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHJlc3MsIGludCBhZGRybGVuKVxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy01MTg1LVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjUxODY6XHRcdGFkLnR5cGUgPSBMU01fQVVESVRfREFUQV9ORVQ7XG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNTE4Ny1cdFx0YWQudS5uZXQgPSBcdTAwMjZuZXQ7XG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTUyNTk9c3RhdGljIGludCBzZWxpbnV4X3NvY2tldF9jb25uZWN0X2hlbHBlcihzdHJ1Y3Qgc29jayAqc2ssXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTUzMzAtXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6NTMzMTpcdFx0YWQudHlwZSA9IExTTV9BVURJVF9EQVRBX05FVDtcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy01MzMyLVx0XHRhZC51Lm5ldCA9IFx1MDAyNm5ldDtcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9NjM2MT1zdGF0aWMgaW50IG5sbXNnX3NvY2tfaGFzX2V4dGVuZGVkX3Blcm1zKHN0cnVjdCBzb2NrICpzaywgdTMyIHBlcm1zLCB1MTYgbmxtc2dfdHlwZSlcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNjM3MC1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo2MzcxOlx0YWQudHlwZSA9IExTTV9BVURJVF9EQVRBX05MTVNHVFlQRTtcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy02MzcyLVx0YWQudS5ubG1zZ190eXBlID0gbmxtc2dfdHlwZTtcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9NjQ1NT1zdGF0aWMgaW50IGlwY19oYXNfcGVybShzdHJ1Y3Qga2Vybl9pcGNfcGVybSAqaXBjX3Blcm1zLFxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy02NDYzLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjY0NjQ6XHRhZC50eXBlID0gTFNNX0FVRElUX0RBVEFfSVBDO1xuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTY0NjUtXHRhZC51LmlwY19pZCA9IGlwY19wZXJtcy1cdTAwM2VrZXk7XG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTY0ODE9c3RhdGljIGludCBzZWxpbnV4X21zZ19xdWV1ZV9hbGxvY19zZWN1cml0eShzdHJ1Y3Qga2Vybl9pcGNfcGVybSAqbXNxKVxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy02NDg5LVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjY0OTA6XHRhZC50eXBlID0gTFNNX0FVRElUX0RBVEFfSVBDO1xuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTY0OTEtXHRhZC51LmlwY19pZCA9IG1zcS1cdTAwM2VrZXk7XG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTY0OTc9c3RhdGljIGludCBzZWxpbnV4X21zZ19xdWV1ZV9hc3NvY2lhdGUoc3RydWN0IGtlcm5faXBjX3Blcm0gKm1zcSwgaW50IG1zcWZsZylcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNjUwNC1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo2NTA1Olx0YWQudHlwZSA9IExTTV9BVURJVF9EQVRBX0lQQztcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy02NTA2LVx0YWQudS5pcGNfaWQgPSBtc3EtXHUwMDNla2V5O1xuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz02NTQwPXN0YXRpYyBpbnQgc2VsaW51eF9tc2dfcXVldWVfbXNnc25kKHN0cnVjdCBrZXJuX2lwY19wZXJtICptc3EsIHN0cnVjdCBtc2dfbXNnICptc2csIGludCBtc3FmbGcpXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTY1NjQtXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6NjU2NTpcdGFkLnR5cGUgPSBMU01fQVVESVRfREFUQV9JUEM7XG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNjU2Ni1cdGFkLnUuaXBjX2lkID0gbXNxLVx1MDAzZWtleTtcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9NjU4Mz1zdGF0aWMgaW50IHNlbGludXhfbXNnX3F1ZXVlX21zZ3JjdihzdHJ1Y3Qga2Vybl9pcGNfcGVybSAqbXNxLCBzdHJ1Y3QgbXNnX21zZyAqbXNnLFxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy02NTk1LVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjY1OTY6XHRhZC50eXBlID0gTFNNX0FVRElUX0RBVEFfSVBDO1xuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTY1OTctXHRhZC51LmlwY19pZCA9IG1zcS1cdTAwM2VrZXk7XG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTY2MDg9c3RhdGljIGludCBzZWxpbnV4X3NobV9hbGxvY19zZWN1cml0eShzdHJ1Y3Qga2Vybl9pcGNfcGVybSAqc2hwKVxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy02NjE2LVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjY2MTc6XHRhZC50eXBlID0gTFNNX0FVRElUX0RBVEFfSVBDO1xuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTY2MTgtXHRhZC51LmlwY19pZCA9IHNocC1cdTAwM2VrZXk7XG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTY2MjQ9c3RhdGljIGludCBzZWxpbnV4X3NobV9hc3NvY2lhdGUoc3RydWN0IGtlcm5faXBjX3Blcm0gKnNocCwgaW50IHNobWZsZylcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNjYzMS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo2NjMyOlx0YWQudHlwZSA9IExTTV9BVURJVF9EQVRBX0lQQztcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy02NjMzLVx0YWQudS5pcGNfaWQgPSBzaHAtXHUwMDNla2V5O1xuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz02Njg2PXN0YXRpYyBpbnQgc2VsaW51eF9zZW1fYWxsb2Nfc2VjdXJpdHkoc3RydWN0IGtlcm5faXBjX3Blcm0gKnNtYSlcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNjY5NC1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo2Njk1Olx0YWQudHlwZSA9IExTTV9BVURJVF9EQVRBX0lQQztcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy02Njk2LVx0YWQudS5pcGNfaWQgPSBzbWEtXHUwMDNla2V5O1xuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz02NzAyPXN0YXRpYyBpbnQgc2VsaW51eF9zZW1fYXNzb2NpYXRlKHN0cnVjdCBrZXJuX2lwY19wZXJtICpzbWEsIGludCBzZW1mbGcpXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTY3MDktXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6NjcxMDpcdGFkLnR5cGUgPSBMU01fQVVESVRfREFUQV9JUEM7XG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNjcxMS1cdGFkLnUuaXBjX2lkID0gc21hLVx1MDAzZWtleTtcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9NzI0MD1zdGF0aWMgaW50IHNlbGludXhfaWJfcGtleV9hY2Nlc3Modm9pZCAqaWJfc2VjLCB1NjQgc3VibmV0X3ByZWZpeCwgdTE2IHBrZXlfdmFsKVxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy03MjUxLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjcyNTI6XHRhZC50eXBlID0gTFNNX0FVRElUX0RBVEFfSUJQS0VZO1xuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTcyNTMtXHRpYnBrZXkuc3VibmV0X3ByZWZpeCA9IHN1Ym5ldF9wcmVmaXg7XG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTcyNjE9c3RhdGljIGludCBzZWxpbnV4X2liX2VuZHBvcnRfbWFuYWdlX3N1Ym5ldCh2b2lkICppYl9zZWMsIGNvbnN0IGNoYXIgKmRldl9uYW1lLFxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy03Mjc1LVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjcyNzY6XHRhZC50eXBlID0gTFNNX0FVRElUX0RBVEFfSUJFTkRQT1JUO1xuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTcyNzctXHRpYmVuZHBvcnQuZGV2X25hbWUgPSBkZXZfbmFtZTtcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9NzYwOT1zdGF0aWMgaW50IHNlbGludXhfdXJpbmdfY21kKHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZClcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNzYxNS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo3NjE2Olx0YWQudHlwZSA9IExTTV9BVURJVF9EQVRBX0ZJTEU7XG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNzYxNy1cdGFkLnUuZmlsZSA9IGZpbGU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDIyOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNjI2CgkJCQkJCQlvdXRwdXQ6IDIzNQoJCQkJCQkJdGhvdWdodHM6IDEyNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogTm8gTmVlZCBIZXJlKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gY2FyZWZ1bGx5IHJldmlld2luZyB0aGlzIGRpZmYsIGZvY3VzaW5nIG9uIHBvdGVudGlhbCBLTVNBTiBuZWVkcy4gVGhlIGNydWNpYWwgcGllY2VzLCBgYWQudHlwZWAgYW5kIGBhZC51LnBhdGhgLCBhcmUgc2V0IGNvbnNpc3RlbnRseSwgbWF0Y2hpbmcgYWxsIHRoZSBvdGhlciBhdWRpdCBkYXRhIHVzYWdlcyB0aHJvdWdob3V0IHRoZSByZWxldmFudCBgc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jYCBmaWxlLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4KCk5vdywgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhlIGZ1bmN0aW9ucyBpbnZvbHZlZCBhbmQgYXNzZXNzIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3Iga2VybmVsLXRvLXVzZXIgc3BhY2UgZGF0YSBsZWFrcy4gYGlub2RlX3NpZF9oYXNfcGVybWAgbG9va3MgY2xlYW47IGl0IHRha2VzIHRoZSBuZWVkZWQgYXVkaXQgZGF0YSBidXQgc2VlbXMgdG8ganVzdCB3cmFwIGEgY2FsbCB0byBgYXZjX2hhc19wZXJtYCwgYSByZWZhY3RvciBzcGxpdHRpbmcgYGlub2RlX2hhc19wZXJtYC4gTm8gaXNzdWVzIHRoZXJlLiBgc2VsaW51eF9maWxlX3VzZXJfc2lkYCBhcHBlYXJzIHRvIGhhbmRsZSBmaWxlIG1ldGFkYXRhIGNvcnJlY3RseS4KClRoZSBtb3JlIGNvbXBsZXggYXJlYSBpcyBhcm91bmQgdGhlIGJhY2tpbmcgZmlsZSBzdHJ1Y3R1cmVzLCBlc3BlY2lhbGx5IGBzZWxpbnV4X2JhY2tpbmdfZmlsZV9hbGxvY2AsIGBzZWxpbnV4X2JhY2tpbmdfZmlsZV9mcmVlYCwgYW5kIGBzZWxpbnV4X2ZpbGVfbXByb3RlY3RgLiBBZnRlciBkaWdnaW5nIGluLCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IHRoZSBjcml0aWNhbCBkYXRhIGluIGBiZnNlYy0mZ3Q7bGF5ZXJzYCBhcmUgKmZ1bGx5KiBpbml0aWFsaXplZC4gYHNlbGludXhfYmFja2luZ19maWxlX2FsbG9jYCBhbGxvY2F0ZXMgdGhlIGxheWVycywgY29waWVzIGV4aXN0aW5nIG9uZXMsIGFuZCBwb3B1bGF0ZXMgdGhlIGRhdGEsIGluY2x1ZGluZyBhIHJlZmNvdW50IGJ1bXAgZm9yIHBhdGhzLCBtYWtpbmcgc3VyZSBub3RoaW5nIGlzIGxlZnQgZGFuZ2xpbmcuIGBzZWxpbnV4X2JhY2tpbmdfZmlsZV9mcmVlYCBjb3JyZWN0bHkgZnJlZXMgYW5kIHB1dHMgdGhlIHBhdGggZm9yIGVhY2ggbGF5ZXIuIFRoZSBwZXJtaXNzaW9uIGNoZWNrcyBpbiBgYmFja2luZ19tb3VudGVyc19oYXNfcGVybWAgYWxzbyBsb29rIG9rYXkuIEFuZCBmaW5hbGx5LCBgc2VsaW51eF9maWxlX21wcm90ZWN0YCBzaW1wbHkgYWRkcyBhIGNhbGwgdG8gYmFja2luZyBtb3VudGVycy4gTm8gb2J2aW91cyBpc3N1ZXMgdGhlcmUuIFRoZSBoZWxwZXIgZnVuY3Rpb24gYGZpbGVfbWFwX3Byb3RfdG9fYXZgIGp1c3QgbWFwcyBwcm90ZWN0aW9uIGJpdHMuCgpJJiMzOTt2ZSBzcGVjaWZpY2FsbHkgbG9va2VkIGZvciBkYXRhIGNvcGllcyB0byB1c2Vyc3BhY2Ug4oCTIG5vbmUuIEkmIzM5O3ZlIGFsc28gY2hlY2tlZCBjYXJlZnVsbHkgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLiBBbGwgYGJmc2VjLSZndDtsYXllcnNgIGVudHJpZXMgYXJlIGZ1bGx5IGluaXRpYWxpemVkLCBhbmQgYGJmc2VjYCBpdHNlbGYgaXMgemVyb2VkIGR1cmluZyBhbGxvY2F0aW9uLiBUaGUgY29tbW9uIGF1ZGl0IGRhdGEgKGBjb21tb25fYXVkaXRfZGF0YSBhZGApIGlzIGFsc28gcG9wdWxhdGVkIGNvcnJlY3RseSwgZm9sbG93aW5nIHRoZSBzdGFuZGFyZCBTRUxpbnV4IHBhdHRlcm4uCgpDcml0aWNhbGx5LCB0aGVyZSBhcmUgbm8ga2VybmVsLXRvLXVzZXIgY29waWVzIHRoYXQgSSBjYW4gc2VlIChgY29weV90b191c2VyYCwgYHB1dF91c2VyYCwgc29ja2V0IG9wdGlvbnMsIGV0Yy4pLiBUaGVyZSYjMzk7cyBubyBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbmQgYWxsIHN0cnVjdHVyZXMgYXJlIGVpdGhlciB6ZXJvZWQgb3IgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgoKRnJhbmtseSwgSSB0aGluayBhbnkgYnVncyBoZXJlIHdvdWxkIG1hbmlmZXN0IGFzIG1lbW9yeSBjb3JydXB0aW9uLCB1c2UtYWZ0ZXItZnJlZSwgb3IgcmVmY291bnRpbmcgaXNzdWVzLiBUaG9zZSBhcmUgYWxyZWFkeSB3ZWxsLWNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBjaGVja3MuIEJhc2VkIG9uIHRoZSBjcml0ZXJpYSwgdGhpcyBwYXRjaCByZWFsbHkgYm9pbHMgZG93biB0byB0aGUgdHlwZXMgb2YgYnVncyB0aGF0IEtBU0FOIGlzIGJ1aWx0IHRvIGZpbmQuCgpTbywgbGV0JiMzOTtzIGdvIGJhY2sgb3ZlciB0aGUgY3JpdGVyaWEgKmFnYWluKi4KCjEuICBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2Ugd2hlcmUgZmllbGRzIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuIE5vLgoyLiAgQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzLiBOby4KMy4gIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4gTm8gKGFsbCBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQpLgo0LiAgQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLiBOby4KClRoaXMgZmFsbHMgc3F1YXJlbHkgdW5kZXIgdGhlICYjMzQ7S0FTQU4gY292ZXJzIGl0JiMzNDsgY2F0ZWdvcnkuIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkIG9yIGluaXRpYWxpemVkLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBuZWVkZWQgaGVyZS4gS0FTQU4gaXMgc3VmZmljaWVudC4gSSYjMzk7bSByZWFkeSB0byBtYXJrIGBOZWVkc0tNU0FOPWZhbHNlYCBhbmQgc3VibWl0IHRoZSBmaW5hbCByZXNwb25zZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMjI6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZXh0ZW5kcyBTRUxpbnV4IGJhY2tpbmcgZmlsZSB0cmFja2luZyB0byBoYW5kbGUgbXVsdGlwbGUgbGF5ZXJzIGluIHN0YWNrZWQgZmlsZXN5c3RlbXMgKHN1Y2ggYXMgb3ZlcmxheWZzIGFuZCBlcm9mcykgYnkgaW50cm9kdWNpbmcgaW50ZXJtZWRpYXRlIGJhY2tpbmcgbGF5ZXIgc3RydWN0dXJlcywgcmVjb3JkaW5nIHBhdGhzIGFuZCBTSURzLCBhbmQgdmFsaWRhdGluZyBtb3VudGVyIHBlcm1pc3Npb25zIGR1cmluZyBmaWxlIG1tYXAvbXByb3RlY3Qgb3BlcmF0aW9ucy5cblxuQWxsIG5ld2x5IGFsbG9jYXRlZCBoZWFwIHN0cnVjdHVyZXMgKGBiYWNraW5nX2ZpbGVfc2VjdXJpdHlfbGF5ZXJgIGFycmF5cykgYXJlIGV4cGxpY2l0bHkgYW5kIGZ1bGx5IGluaXRpYWxpemVkIHVwb24gYWxsb2NhdGlvbiBiZWZvcmUgdXNlIG9yIGNvcHlpbmcuIFRoZSBjb250YWluaW5nIGBiYWNraW5nX2ZpbGVfc2VjdXJpdHlfc3RydWN0YCBibG9iIGlzIGFsbG9jYXRlZCB2aWEgYGttZW1fY2FjaGVfemFsbG9jYC4gVGhlIGF1ZGl0IGRhdGEgc3RhY2sgc3RydWN0dXJlIGBzdHJ1Y3QgY29tbW9uX2F1ZGl0X2RhdGEgYWRgIGlzIHByb3Blcmx5IGNvbmZpZ3VyZWQgd2l0aCBgdHlwZSA9IExTTV9BVURJVF9EQVRBX1BBVEhgIGFuZCB0aGUgcGF0aCB1bmlvbiBtZW1iZXIgYXNzaWduZWQgYmVmb3JlIHBhc3NpbmcgdG8gdGhlIGF1ZGl0L0FWQyBzdWJzeXN0ZW0uIE5vIGRhdGEgaXMgZXhwb3NlZCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIHRoZXJlIGlzIG5vIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gUG90ZW50aWFsIHJpc2tzIGluIHRoaXMgcGF0Y2ggKHN1Y2ggYXMgbGlmZXRpbWUgaXNzdWVzLCByZWZjb3VudGluZywgcGF0aCBtYW5hZ2VtZW50LCBvciBvdXQtb2YtYm91bmRzIGluZGV4aW5nKSBmYWxsIHdpdGhpbiB0aGUgc2NvcGUgb2YgS0FTQU4gcmF0aGVyIHRoYW4gS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBleHRlbmRzIFNFTGludXggYmFja2luZyBmaWxlIHRyYWNraW5nIHRvIGhhbmRsZSBtdWx0aXBsZSBsYXllcnMgaW4gc3RhY2tlZCBmaWxlc3lzdGVtcyAoc3VjaCBhcyBvdmVybGF5ZnMgYW5kIGVyb2ZzKSBieSBpbnRyb2R1Y2luZyBpbnRlcm1lZGlhdGUgYmFja2luZyBsYXllciBzdHJ1Y3R1cmVzLCByZWNvcmRpbmcgcGF0aHMgYW5kIFNJRHMsIGFuZCB2YWxpZGF0aW5nIG1vdW50ZXIgcGVybWlzc2lvbnMgZHVyaW5nIGZpbGUgbW1hcC9tcHJvdGVjdCBvcGVyYXRpb25zLlxuXG5BbGwgbmV3bHkgYWxsb2NhdGVkIGhlYXAgc3RydWN0dXJlcyAoYGJhY2tpbmdfZmlsZV9zZWN1cml0eV9sYXllcmAgYXJyYXlzKSBhcmUgZXhwbGljaXRseSBhbmQgZnVsbHkgaW5pdGlhbGl6ZWQgdXBvbiBhbGxvY2F0aW9uIGJlZm9yZSB1c2Ugb3IgY29weWluZy4gVGhlIGNvbnRhaW5pbmcgYGJhY2tpbmdfZmlsZV9zZWN1cml0eV9zdHJ1Y3RgIGJsb2IgaXMgYWxsb2NhdGVkIHZpYSBga21lbV9jYWNoZV96YWxsb2NgLiBUaGUgYXVkaXQgZGF0YSBzdGFjayBzdHJ1Y3R1cmUgYHN0cnVjdCBjb21tb25fYXVkaXRfZGF0YSBhZGAgaXMgcHJvcGVybHkgY29uZmlndXJlZCB3aXRoIGB0eXBlID0gTFNNX0FVRElUX0RBVEFfUEFUSGAgYW5kIHRoZSBwYXRoIHVuaW9uIG1lbWJlciBhc3NpZ25lZCBiZWZvcmUgcGFzc2luZyB0byB0aGUgYXVkaXQvQVZDIHN1YnN5c3RlbS4gTm8gZGF0YSBpcyBleHBvc2VkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgdGhlcmUgaXMgbm8gYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBQb3RlbnRpYWwgcmlza3MgaW4gdGhpcyBwYXRjaCAoc3VjaCBhcyBsaWZldGltZSBpc3N1ZXMsIHJlZmNvdW50aW5nLCBwYXRoIG1hbmFnZW1lbnQsIG9yIG91dC1vZi1ib3VuZHMgaW5kZXhpbmcpIGZhbGwgd2l0aGluIHRoZSBzY29wZSBvZiBLQVNBTiByYXRoZXIgdGhhbiBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjlUMjI6MjM6MjMuMTg1MjQ3OTE4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEzNjg1NTE3NDU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNFQ1VSSVRZXCIsXG4gICAgXCJTRUNVUklUWV9TRUxJTlVYXCIsXG4gICAgXCJTRUNVUklUWV9ORVRXT1JLXCIsXG4gICAgXCJBVURJVFwiLFxuICAgIFwiTkVUXCIsXG4gICAgXCJJTkVUXCIsXG4gICAgXCJPVkVSTEFZX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2VsaW51eF9iYWNraW5nX2ZpbGVfYWxsb2NcIixcbiAgICBcInNlbGludXhfYmFja2luZ19maWxlX2ZyZWVcIixcbiAgICBcInNlbGludXhfZmlsZV9tcHJvdGVjdFwiLFxuICAgIFwic2VjdXJpdHlfYmFja2luZ19maWxlX2FsbG9jXCIsXG4gICAgXCJzZWN1cml0eV9iYWNraW5nX2ZpbGVfZnJlZVwiLFxuICAgIFwic2VjdXJpdHlfZmlsZV9tcHJvdGVjdFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZXh0ZW5kcyBTRUxpbnV4IGJhY2tpbmcgZmlsZSB0cmFja2luZyB0byBoYW5kbGUgbXVsdGlwbGUgbGF5ZXJzIGluIHN0YWNrZWQgZmlsZXN5c3RlbXMgKHN1Y2ggYXMgb3ZlcmxheWZzIGFuZCBlcm9mcykgYnkgaW50cm9kdWNpbmcgaW50ZXJtZWRpYXRlIGJhY2tpbmcgbGF5ZXIgc3RydWN0dXJlcywgcmVjb3JkaW5nIHBhdGhzIGFuZCBTSURzLCBhbmQgdmFsaWRhdGluZyBtb3VudGVyIHBlcm1pc3Npb25zIGR1cmluZyBmaWxlIG1tYXAvbXByb3RlY3Qgb3BlcmF0aW9ucy5cXG5cXG5BbGwgbmV3bHkgYWxsb2NhdGVkIGhlYXAgc3RydWN0dXJlcyAoYGJhY2tpbmdfZmlsZV9zZWN1cml0eV9sYXllcmAgYXJyYXlzKSBhcmUgZXhwbGljaXRseSBhbmQgZnVsbHkgaW5pdGlhbGl6ZWQgdXBvbiBhbGxvY2F0aW9uIGJlZm9yZSB1c2Ugb3IgY29weWluZy4gVGhlIGNvbnRhaW5pbmcgYGJhY2tpbmdfZmlsZV9zZWN1cml0eV9zdHJ1Y3RgIGJsb2IgaXMgYWxsb2NhdGVkIHZpYSBga21lbV9jYWNoZV96YWxsb2NgLiBUaGUgYXVkaXQgZGF0YSBzdGFjayBzdHJ1Y3R1cmUgYHN0cnVjdCBjb21tb25fYXVkaXRfZGF0YSBhZGAgaXMgcHJvcGVybHkgY29uZmlndXJlZCB3aXRoIGB0eXBlID0gTFNNX0FVRElUX0RBVEFfUEFUSGAgYW5kIHRoZSBwYXRoIHVuaW9uIG1lbWJlciBhc3NpZ25lZCBiZWZvcmUgcGFzc2luZyB0byB0aGUgYXVkaXQvQVZDIHN1YnN5c3RlbS4gTm8gZGF0YSBpcyBleHBvc2VkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgdGhlcmUgaXMgbm8gYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBQb3RlbnRpYWwgcmlza3MgaW4gdGhpcyBwYXRjaCAoc3VjaCBhcyBsaWZldGltZSBpc3N1ZXMsIHJlZmNvdW50aW5nLCBwYXRoIG1hbmFnZW1lbnQsIG9yIG91dC1vZi1ib3VuZHMgaW5kZXhpbmcpIGZhbGwgd2l0aGluIHRoZSBzY29wZSBvZiBLQVNBTiByYXRoZXIgdGhhbiBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRyYWNraW5nIGFuZCBlbmZvcmNpbmcgU0VMaW51eCBwZXJtaXNzaW9ucyBhY3Jvc3MgbXVsdGktbGF5ZXIgYmFja2luZyBmaWxlcyAoc3VjaCBhcyB0aG9zZSB1c2VkIGJ5IG92ZXJsYXlmcyBhbmQgZXJvZnMpLiBJdCBpbXBsZW1lbnRzIGR5bmFtaWMgYWxsb2NhdGlvbiBhbmQgcmVmZXJlbmNlIHRyYWNraW5nIG9mIGludGVybWVkaWF0ZSBiYWNraW5nIGZpbGUgbGF5ZXJzIGluIHNlbGludXhfYmFja2luZ19maWxlX2FsbG9jLCBjbGVhbnVwIGluIHNlbGludXhfYmFja2luZ19maWxlX2ZyZWUsIGFuZCBtdWx0aS1sYXllciBwZXJtaXNzaW9uIGNoZWNrcyBkdXJpbmcgbXByb3RlY3QgaW4gc2VsaW51eF9maWxlX21wcm90ZWN0LiBUaGVzZSBjaGFuZ2VzIG1vZGlmeSBjb3JlIHNlY3VyaXR5IGFuZCBmaWxlc3lzdGVtIGludGVyYWN0aW9ucyBhbmQgYXJlIHdlbGwgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMjI6MjM6MjMuMTg1MjUyMTg4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDYzODI3Mzg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZmE3YTBiNTUwNjIyYzY0NWQ2MmNmOWEzNjQ5OGE3Y2FiZDcyNmNiNlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEF1ZyAyOSAyMjoyMzoyMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNcXG5pbmRleCAwMzVhYWYxMTNkMWRhLi5iNjc1MGVkY2M0NzgzIDEwMDY0NFxcbi0tLSBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuY1xcbisrKyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuY1xcbkBAIC0xNjc0LDI2ICsxNjc0LDMyIEBAIHN0YXRpYyBpbnQgY3JlZF9oYXNfY2FwYWJpbGl0eShjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCxcXG4gXFx0cmV0dXJuIHJjO1xcbiB9XFxuIFxcbi0vKiBDaGVjayB3aGV0aGVyIGEgdGFzayBoYXMgYSBwYXJ0aWN1bGFyIHBlcm1pc3Npb24gdG8gYW4gaW5vZGUuXFxuLSAgIFRoZSAnYWRwJyBwYXJhbWV0ZXIgaXMgb3B0aW9uYWwgYW5kIGFsbG93cyBvdGhlciBhdWRpdFxcbi0gICBkYXRhIHRvIGJlIHBhc3NlZCAoZS5nLiB0aGUgZGVudHJ5KS4gKi9cXG4tc3RhdGljIGludCBpbm9kZV9oYXNfcGVybShjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCxcXG4tXFx0XFx0XFx0ICBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi1cXHRcXHRcXHQgIHUzMiBwZXJtcyxcXG4tXFx0XFx0XFx0ICBzdHJ1Y3QgY29tbW9uX2F1ZGl0X2RhdGEgKmFkcClcXG4rLypcXG4rICogQ2hlY2sgd2hldGhlciBhIFNJRCBoYXMgYSBwYXJ0aWN1bGFyIHBlcm1pc3Npb24gdG8gYW4gaW5vZGUuICBUaGUgJ2FkcCdcXG4rICogcGFyYW1ldGVyIGlzIG9wdGlvbmFsIGFuZCBhbGxvd3Mgb3RoZXIgYXVkaXQgZGF0YSB0byBiZSBwYXNzZWQgKGUuZy4gdGhlXFxuKyAqIGRlbnRyeSkuXFxuKyAqL1xcbitzdGF0aWMgaW50IGlub2RlX3NpZF9oYXNfcGVybSh1MzIgc2lkLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgcGVybXMsXFxuK1xcdFxcdFxcdCAgICAgIHN0cnVjdCBjb21tb25fYXVkaXRfZGF0YSAqYWRwKVxcbiB7XFxuIFxcdHN0cnVjdCBpbm9kZV9zZWN1cml0eV9zdHJ1Y3QgKmlzZWM7XFxuLVxcdHUzMiBzaWQ7XFxuIFxcbiBcXHRpZiAodW5saWtlbHkoSVNfUFJJVkFURShpbm9kZSkpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdHNpZCA9IGNyZWRfc2lkKGNyZWQpO1xcbiBcXHRpc2VjID0gc2VsaW51eF9pbm9kZShpbm9kZSk7XFxuIFxcbiBcXHRyZXR1cm4gYXZjX2hhc19wZXJtKHNpZCwgaXNlYy1cXHUwMDNlc2lkLCBpc2VjLVxcdTAwM2VzY2xhc3MsIHBlcm1zLCBhZHApO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IGlub2RlX2hhc19wZXJtKGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkLFxcbitcXHRcXHRcXHQgIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuK1xcdFxcdFxcdCAgdTMyIHBlcm1zLFxcbitcXHRcXHRcXHQgIHN0cnVjdCBjb21tb25fYXVkaXRfZGF0YSAqYWRwKVxcbit7XFxuK1xcdHJldHVybiBpbm9kZV9zaWRfaGFzX3Blcm0oY3JlZF9zaWQoY3JlZCksIGlub2RlLCBwZXJtcywgYWRwKTtcXG4rfVxcbitcXG4gLyogU2FtZSBhcyBpbm9kZV9oYXNfcGVybSwgYnV0IHBhc3MgZXhwbGljaXQgYXVkaXQgZGF0YSBjb250YWluaW5nXFxuICAgIHRoZSBkZW50cnkgdG8gaGVscCB0aGUgYXVkaXRpbmcgY29kZSB0byBtb3JlIGVhc2lseSBnZW5lcmF0ZSB0aGVcXG4gICAgcGF0aG5hbWUgaWYgbmVlZGVkLiAqL1xcbkBAIC0zODQzLDE3ICszODQ5LDc0IEBAIHN0YXRpYyBpbnQgc2VsaW51eF9maWxlX2FsbG9jX3NlY3VyaXR5KHN0cnVjdCBmaWxlICpmaWxlKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSB1MzIgc2VsaW51eF9maWxlX3VzZXJfc2lkKGNvbnN0IHN0cnVjdCBmaWxlICpmaWxlKVxcbit7XFxuK1xcdGlmICh1bmxpa2VseShmaWxlLVxcdTAwM2VmX21vZGUgXFx1MDAyNiBGTU9ERV9CQUNLSU5HKSlcXG4rXFx0XFx0cmV0dXJuIHNlbGludXhfYmFja2luZ19maWxlKGZpbGUpLVxcdTAwM2V1Zl9zaWQ7XFxuK1xcdHJldHVybiBzZWxpbnV4X2ZpbGUoZmlsZSktXFx1MDAzZXNpZDtcXG4rfVxcbitcXG4gc3RhdGljIGludCBzZWxpbnV4X2JhY2tpbmdfZmlsZV9hbGxvYyhzdHJ1Y3QgZmlsZSAqYmFja2luZ19maWxlLFxcbiBcXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgZmlsZSAqdXNlcl9maWxlKVxcbiB7XFxuIFxcdHN0cnVjdCBiYWNraW5nX2ZpbGVfc2VjdXJpdHlfc3RydWN0ICpiZnNlYztcXG4rXFx0Y29uc3Qgc3RydWN0IGJhY2tpbmdfZmlsZV9zZWN1cml0eV9zdHJ1Y3QgKnViZnNlYztcXG4rXFx0c3RydWN0IGJhY2tpbmdfZmlsZV9zZWN1cml0eV9sYXllciAqbGF5ZXI7XFxuK1xcdHUzMiBpO1xcbiBcXG4gXFx0YmZzZWMgPSBzZWxpbnV4X2JhY2tpbmdfZmlsZShiYWNraW5nX2ZpbGUpO1xcbi1cXHRiZnNlYy1cXHUwMDNldWZfc2lkID0gc2VsaW51eF9maWxlKHVzZXJfZmlsZSktXFx1MDAzZXNpZDtcXG4rXFx0YmZzZWMtXFx1MDAzZXVmX3NpZCA9IHNlbGludXhfZmlsZV91c2VyX3NpZCh1c2VyX2ZpbGUpO1xcbitcXHRpZiAoISh1c2VyX2ZpbGUtXFx1MDAzZWZfbW9kZSBcXHUwMDI2IEZNT0RFX0JBQ0tJTkcpKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdHViZnNlYyA9IHNlbGludXhfYmFja2luZ19maWxlKHVzZXJfZmlsZSk7XFxuK1xcdC8qIGEgd3JhcHBlZCBjb3VudCB3b3VsZCBtYWtlIGttYWxsb2NfYXJyYXkoKSByZXR1cm4gWkVST19TSVpFX1BUUiAqL1xcbitcXHRpZiAodW5saWtlbHkodWJmc2VjLVxcdTAwM2VsYXllcl9jb3VudCA9PSBVMzJfTUFYKSlcXG4rXFx0XFx0cmV0dXJuIC1FT1ZFUkZMT1c7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBUaGUgZmluYWwgVk1BIG9ubHkgcmV0YWlucyB0aGUgbG93ZXN0IGJhY2tpbmcgZmlsZSwgc28gcmVjb3JkIHRoZVxcbitcXHQgKiB3aG9sZSBjaGFpbiBoZXJlIHJhdGhlciB0aGFuIGluIHRoZSBtbWFwIGhvb2ssIHdoZXJlIGNvbmN1cnJlbnRcXG4rXFx0ICogbWFwcGluZ3Mgd291bGQgaGF2ZSB0byBiZSBzZXJpYWxpemVkLiAgU2l6ZSBpdCBkeW5hbWljYWxseTogZXJvZnNcXG4rXFx0ICogaW5vZGUgc2hhcmluZyBhZGRzIGEgYmFja2luZyBmaWxlIHdpdGhvdXQgYnVtcGluZyBzX3N0YWNrX2RlcHRoLlxcbitcXHQgKi9cXG4rXFx0YmZzZWMtXFx1MDAzZWxheWVycyA9IGttYWxsb2NfYXJyYXkodWJmc2VjLVxcdTAwM2VsYXllcl9jb3VudCArIDEsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHNpemVvZigqYmZzZWMtXFx1MDAzZWxheWVycyksIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIWJmc2VjLVxcdTAwM2VsYXllcnMpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHViZnNlYy1cXHUwMDNlbGF5ZXJfY291bnQ7IGkrKykge1xcbitcXHRcXHRsYXllciA9IFxcdTAwMjZiZnNlYy1cXHUwMDNlbGF5ZXJzW2ldO1xcbitcXHRcXHQqbGF5ZXIgPSB1YmZzZWMtXFx1MDAzZWxheWVyc1tpXTtcXG4rXFx0XFx0cGF0aF9nZXQoXFx1MDAyNmxheWVyLVxcdTAwM2VwYXRoKTtcXG4rXFx0fVxcbitcXG4rXFx0LyogZl9wYXRoLCBub3QgZmlsZV91c2VyX3BhdGgoKTogdGhpcyBsYXllciwgbm90IHRoZSB0b3AtbGV2ZWwgZmlsZSAqL1xcbitcXHRsYXllciA9IFxcdTAwMjZiZnNlYy1cXHUwMDNlbGF5ZXJzW2ldO1xcbitcXHRsYXllci1cXHUwMDNlcGF0aCA9IHVzZXJfZmlsZS1cXHUwMDNlZl9wYXRoO1xcbitcXHRsYXllci1cXHUwMDNlbW91bnRlcl9zaWQgPSBjcmVkX3NpZCh1c2VyX2ZpbGUtXFx1MDAzZWZfY3JlZCk7XFxuK1xcdGxheWVyLVxcdTAwM2VmZF9zaWQgPSBzZWxpbnV4X2ZpbGUodXNlcl9maWxlKS1cXHUwMDNlc2lkO1xcbitcXHRwYXRoX2dldChcXHUwMDI2bGF5ZXItXFx1MDAzZXBhdGgpO1xcbitcXHRiZnNlYy1cXHUwMDNlbGF5ZXJfY291bnQgPSB1YmZzZWMtXFx1MDAzZWxheWVyX2NvdW50ICsgMTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBzZWxpbnV4X2JhY2tpbmdfZmlsZV9mcmVlKHN0cnVjdCBmaWxlICpiYWNraW5nX2ZpbGUpXFxuK3tcXG4rXFx0c3RydWN0IGJhY2tpbmdfZmlsZV9zZWN1cml0eV9zdHJ1Y3QgKmJmc2VjO1xcbitcXG4rXFx0Lyogc2VjdXJpdHlfYmFja2luZ19maWxlX2ZyZWUoKSBtYXkgYmUgY2FsbGVkIHR3aWNlIGFmdGVyIGFuIGVycm9yICovXFxuK1xcdGlmICghYmFja2luZ19maWxlX3NlY3VyaXR5KGJhY2tpbmdfZmlsZSkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGJmc2VjID0gc2VsaW51eF9iYWNraW5nX2ZpbGUoYmFja2luZ19maWxlKTtcXG4rXFx0d2hpbGUgKGJmc2VjLVxcdTAwM2VsYXllcl9jb3VudClcXG4rXFx0XFx0cGF0aF9wdXQoXFx1MDAyNmJmc2VjLVxcdTAwM2VsYXllcnNbLS1iZnNlYy1cXHUwMDNlbGF5ZXJfY291bnRdLnBhdGgpO1xcbitcXHRrZnJlZShiZnNlYy1cXHUwMDNlbGF5ZXJzKTtcXG4rXFx0YmZzZWMtXFx1MDAzZWxheWVycyA9IE5VTEw7XFxuK31cXG4rXFxuIC8qXFxuICAqIENoZWNrIHdoZXRoZXIgYSB0YXNrIGhhcyB0aGUgaW9jdGwgcGVybWlzc2lvbiBhbmQgY21kXFxuICAqIG9wZXJhdGlvbiB0byBhbiBpbm9kZS5cXG5AQCAtMzk3MSw2ICs0MDM0LDUzIEBAIHN0YXRpYyBpbnQgc2VsaW51eF9maWxlX2lvY3RsX2NvbXBhdChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCxcXG4gXFxuIHN0YXRpYyBpbnQgZGVmYXVsdF9ub2V4ZWMgX19yb19hZnRlcl9pbml0O1xcbiBcXG4rc3RhdGljIHUzMiBmaWxlX21hcF9wcm90X3RvX2F2KHVuc2lnbmVkIGxvbmcgcHJvdCwgYm9vbCBzaGFyZWQpXFxuK3tcXG4rXFx0dTMyIGF2ID0gRklMRV9fUkVBRDtcXG4rXFxuK1xcdGlmIChzaGFyZWQgXFx1MDAyNlxcdTAwMjYgKHByb3QgXFx1MDAyNiBQUk9UX1dSSVRFKSlcXG4rXFx0XFx0YXYgfD0gRklMRV9fV1JJVEU7XFxuK1xcdGlmIChwcm90IFxcdTAwMjYgUFJPVF9FWEVDKVxcbitcXHRcXHRhdiB8PSBGSUxFX19FWEVDVVRFO1xcbitcXG4rXFx0cmV0dXJuIGF2O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGJhY2tpbmdfbW91bnRlcnNfaGFzX3Blcm0oY29uc3Qgc3RydWN0IGZpbGUgKmZpbGUsIHUzMiBhdilcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgYmFja2luZ19maWxlX3NlY3VyaXR5X3N0cnVjdCAqYmZzZWM7XFxuK1xcdGNvbnN0IHN0cnVjdCBiYWNraW5nX2ZpbGVfc2VjdXJpdHlfbGF5ZXIgKmxheWVyO1xcbitcXHRzdHJ1Y3QgY29tbW9uX2F1ZGl0X2RhdGEgYWQ7XFxuK1xcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XFxuK1xcdHUzMiBpO1xcbitcXHRpbnQgcmM7XFxuK1xcbitcXHRpZiAoV0FSTl9PTl9PTkNFKCEoZmlsZS1cXHUwMDNlZl9tb2RlIFxcdTAwMjYgRk1PREVfQkFDS0lORykpKVxcbitcXHRcXHRyZXR1cm4gLUVJTztcXG4rXFxuK1xcdGJmc2VjID0gc2VsaW51eF9iYWNraW5nX2ZpbGUoZmlsZSk7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBiZnNlYy1cXHUwMDNlbGF5ZXJfY291bnQ7IGkrKykge1xcbitcXHRcXHRsYXllciA9IFxcdTAwMjZiZnNlYy1cXHUwMDNlbGF5ZXJzW2ldO1xcbitcXHRcXHRpbm9kZSA9IGRfaW5vZGUobGF5ZXItXFx1MDAzZXBhdGguZGVudHJ5KTtcXG4rXFxuK1xcdFxcdGFkLnR5cGUgPSBMU01fQVVESVRfREFUQV9QQVRIO1xcbitcXHRcXHRhZC51LnBhdGggPSBsYXllci1cXHUwMDNlcGF0aDtcXG4rXFxuK1xcdFxcdGlmIChsYXllci1cXHUwMDNlbW91bnRlcl9zaWQgIT0gbGF5ZXItXFx1MDAzZWZkX3NpZCkge1xcbitcXHRcXHRcXHRyYyA9IGF2Y19oYXNfcGVybShsYXllci1cXHUwMDNlbW91bnRlcl9zaWQsIGxheWVyLVxcdTAwM2VmZF9zaWQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgU0VDQ0xBU1NfRkQsIEZEX19VU0UsIFxcdTAwMjZhZCk7XFxuK1xcdFxcdFxcdGlmIChyYylcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIHJjO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRyYyA9IGlub2RlX3NpZF9oYXNfcGVybShsYXllci1cXHUwMDNlbW91bnRlcl9zaWQsIGlub2RlLCBhdiwgXFx1MDAyNmFkKTtcXG4rXFx0XFx0aWYgKHJjKVxcbitcXHRcXHRcXHRyZXR1cm4gcmM7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IF9fZmlsZV9tYXBfcHJvdF9jaGVjayhjb25zdCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBwcm90LFxcbiBcXHRcXHRcXHRcXHQgYm9vbCBzaGFyZWQsIGJvb2wgbW91bnRlcl9jaGVjayxcXG4gXFx0XFx0XFx0XFx0IGJvb2wgYmZfdXNlcl9maWxlKVxcbkBAIC00MDA0LDE0ICs0MTE0LDEwIEBAIHN0YXRpYyBpbnQgX19maWxlX21hcF9wcm90X2NoZWNrKGNvbnN0IHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIHByb3QsXFxuIFxcdGlmIChmaWxlKSB7XFxuIFxcdFxcdGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkID0gbW91bnRlcl9jaGVjayA/XFxuIFxcdFxcdFxcdFxcdGZpbGUtXFx1MDAzZWZfY3JlZCA6IGN1cnJlbnRfY3JlZCgpO1xcbi1cXHRcXHQvKiBcXFwicmVhZFxcXCIgYWx3YXlzIHBvc3NpYmxlLCBcXFwid3JpdGVcXFwiIG9ubHkgaWYgc2hhcmVkICovXFxuLVxcdFxcdHUzMiBhdiA9IEZJTEVfX1JFQUQ7XFxuLVxcdFxcdGlmIChzaGFyZWQgXFx1MDAyNlxcdTAwMjYgcHJvdF93cml0ZSlcXG4tXFx0XFx0XFx0YXYgfD0gRklMRV9fV1JJVEU7XFxuLVxcdFxcdGlmIChwcm90X2V4ZWMpXFxuLVxcdFxcdFxcdGF2IHw9IEZJTEVfX0VYRUNVVEU7XFxuIFxcbi1cXHRcXHRyZXR1cm4gX19maWxlX2hhc19wZXJtKGNyZWQsIGZpbGUsIGF2LCBiZl91c2VyX2ZpbGUpO1xcbitcXHRcXHRyZXR1cm4gX19maWxlX2hhc19wZXJtKGNyZWQsIGZpbGUsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBmaWxlX21hcF9wcm90X3RvX2F2KHByb3QsIHNoYXJlZCksXFxuK1xcdFxcdFxcdFxcdCAgICAgICBiZl91c2VyX2ZpbGUpO1xcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG5AQCAtNDEwNiw2ICs0MjEyLDcgQEAgc3RhdGljIGludCBzZWxpbnV4X2ZpbGVfbXByb3RlY3Qoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdGludCByYztcXG4gXFx0Y29uc3Qgc3RydWN0IGNyZWQgKmNyZWQgPSBjdXJyZW50X2NyZWQoKTtcXG4gXFx0dTMyIHNpZCA9IGNyZWRfc2lkKGNyZWQpO1xcbitcXHR1MzIgYXY7XFxuIFxcdGNvbnN0IHN0cnVjdCBmaWxlICpmaWxlID0gdm1hLVxcdTAwM2V2bV9maWxlO1xcbiBcXHRib29sIGJhY2tpbmdfZmlsZTtcXG4gXFx0Ym9vbCBzaGFyZWQgPSB2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fU0hBUkVEO1xcbkBAIC00MTQ5LDYgKzQyNTYsMTAgQEAgc3RhdGljIGludCBzZWxpbnV4X2ZpbGVfbXByb3RlY3Qoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdFxcdFxcdGlmIChyYylcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIHJjO1xcbiBcXHRcXHRcXHRpZiAoYmFja2luZ19maWxlKSB7XFxuK1xcdFxcdFxcdFxcdHJjID0gYmFja2luZ19tb3VudGVyc19oYXNfcGVybShmaWxlLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgRklMRV9fRVhFQ01PRCk7XFxuK1xcdFxcdFxcdFxcdGlmIChyYylcXG4rXFx0XFx0XFx0XFx0XFx0cmV0dXJuIHJjO1xcbiBcXHRcXHRcXHRcXHRyYyA9IGZpbGVfaGFzX3Blcm0oZmlsZS1cXHUwMDNlZl9jcmVkLCBmaWxlLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICBGSUxFX19FWEVDTU9EKTtcXG4gXFx0XFx0XFx0XFx0aWYgKHJjKVxcbkBAIC00MTYxLDYgKzQyNzIsMTAgQEAgc3RhdGljIGludCBzZWxpbnV4X2ZpbGVfbXByb3RlY3Qoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdGlmIChyYylcXG4gXFx0XFx0cmV0dXJuIHJjO1xcbiBcXHRpZiAoYmFja2luZ19maWxlKSB7XFxuK1xcdFxcdGF2ID0gZmlsZV9tYXBfcHJvdF90b19hdihwcm90LCBzaGFyZWQpO1xcbitcXHRcXHRyYyA9IGJhY2tpbmdfbW91bnRlcnNfaGFzX3Blcm0oZmlsZSwgYXYpO1xcbitcXHRcXHRpZiAocmMpXFxuK1xcdFxcdFxcdHJldHVybiByYztcXG4gXFx0XFx0cmMgPSBmaWxlX21hcF9wcm90X2NoZWNrKGZpbGUsIHByb3QsIHNoYXJlZCwgdHJ1ZSk7XFxuIFxcdFxcdGlmIChyYylcXG4gXFx0XFx0XFx0cmV0dXJuIHJjO1xcbkBAIC03NjM1LDYgKzc3NTAsNyBAQCBzdGF0aWMgc3RydWN0IHNlY3VyaXR5X2hvb2tfbGlzdCBzZWxpbnV4X2hvb2tzW10gX19yb19hZnRlcl9pbml0ID0ge1xcbiBcXHRMU01fSE9PS19JTklUKGZpbGVfcGVybWlzc2lvbiwgc2VsaW51eF9maWxlX3Blcm1pc3Npb24pLFxcbiBcXHRMU01fSE9PS19JTklUKGZpbGVfYWxsb2Nfc2VjdXJpdHksIHNlbGludXhfZmlsZV9hbGxvY19zZWN1cml0eSksXFxuIFxcdExTTV9IT09LX0lOSVQoYmFja2luZ19maWxlX2FsbG9jLCBzZWxpbnV4X2JhY2tpbmdfZmlsZV9hbGxvYyksXFxuK1xcdExTTV9IT09LX0lOSVQoYmFja2luZ19maWxlX2ZyZWUsIHNlbGludXhfYmFja2luZ19maWxlX2ZyZWUpLFxcbiBcXHRMU01fSE9PS19JTklUKGZpbGVfaW9jdGwsIHNlbGludXhfZmlsZV9pb2N0bCksXFxuIFxcdExTTV9IT09LX0lOSVQoZmlsZV9pb2N0bF9jb21wYXQsIHNlbGludXhfZmlsZV9pb2N0bF9jb21wYXQpLFxcbiBcXHRMU01fSE9PS19JTklUKG1tYXBfZmlsZSwgc2VsaW51eF9tbWFwX2ZpbGUpLFxcbmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvb2Jqc2VjLmggYi9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvb2Jqc2VjLmhcXG5pbmRleCAzYzBhMTZlYzk3OGIwLi4yZjIxNTY4MjUxZmZlIDEwMDY0NFxcbi0tLSBhL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9vYmpzZWMuaFxcbisrKyBiL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9vYmpzZWMuaFxcbkBAIC04Niw4ICs4NiwxNiBAQCBzdHJ1Y3QgZmlsZV9zZWN1cml0eV9zdHJ1Y3Qge1xcbiBcXHR1MzIgcHNlcW5vOyAvKiBQb2xpY3kgc2Vxbm8gYXQgdGhlIHRpbWUgb2YgZmlsZSBvcGVuICovXFxuIH07XFxuIFxcbitzdHJ1Y3QgYmFja2luZ19maWxlX3NlY3VyaXR5X2xheWVyIHtcXG4rXFx0c3RydWN0IHBhdGggcGF0aDsgLyogdGhpcyBsYXllcidzIHJlYWwgcGF0aCAqL1xcbitcXHR1MzIgbW91bnRlcl9zaWQ7IC8qIFNJRCBvZiB0aGUgbW91bnRlciB0aGF0IG9wZW5lZCBpdCAqL1xcbitcXHR1MzIgZmRfc2lkOyAvKiBTSUQgb2YgaXRzIG9wZW4gZmlsZSBkZXNjcmlwdGlvbiAqL1xcbit9O1xcbitcXG4gc3RydWN0IGJhY2tpbmdfZmlsZV9zZWN1cml0eV9zdHJ1Y3Qge1xcbi1cXHR1MzIgdWZfc2lkOyAvKiBhc3NvY2lhdGVkIHVzZXIgZmlsZSBmc2VjLVxcdTAwM2VzaWQgKi9cXG4rXFx0dTMyIHVmX3NpZDsgLyogdG9wLWxldmVsIHVzZXIgZmlsZSBmc2VjLVxcdTAwM2VzaWQgKi9cXG4rXFx0dTMyIGxheWVyX2NvdW50OyAvKiBudW1iZXIgb2YgaW50ZXJtZWRpYXRlIGJhY2tpbmcgZmlsZXMgKi9cXG4rXFx0c3RydWN0IGJhY2tpbmdfZmlsZV9zZWN1cml0eV9sYXllciAqbGF5ZXJzO1xcbiB9O1xcbiBcXG4gc3RydWN0IHN1cGVyYmxvY2tfc2VjdXJpdHlfc3RydWN0IHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMjI6MjM6MjQuNjUwMDY4MjM2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo3MTgxMDA5NjA3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTRUNVUklUWVwiLFxuICAgIFwiU0VDVVJJVFlfU0VMSU5VWFwiLFxuICAgIFwiU0VDVVJJVFlfTkVUV09SS1wiLFxuICAgIFwiQVVESVRcIixcbiAgICBcIk5FVFwiLFxuICAgIFwiSU5FVFwiLFxuICAgIFwiT1ZFUkxBWV9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNlbGludXhfYmFja2luZ19maWxlX2FsbG9jXCIsXG4gICAgXCJzZWxpbnV4X2JhY2tpbmdfZmlsZV9mcmVlXCIsXG4gICAgXCJzZWxpbnV4X2ZpbGVfbXByb3RlY3RcIixcbiAgICBcInNlY3VyaXR5X2JhY2tpbmdfZmlsZV9hbGxvY1wiLFxuICAgIFwic2VjdXJpdHlfYmFja2luZ19maWxlX2ZyZWVcIixcbiAgICBcInNlY3VyaXR5X2ZpbGVfbXByb3RlY3RcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRyYWNraW5nIGFuZCBlbmZvcmNpbmcgU0VMaW51eCBwZXJtaXNzaW9ucyBhY3Jvc3MgbXVsdGktbGF5ZXIgYmFja2luZyBmaWxlcyAoc3VjaCBhcyB0aG9zZSB1c2VkIGJ5IG92ZXJsYXlmcyBhbmQgZXJvZnMpLiBJdCBpbXBsZW1lbnRzIGR5bmFtaWMgYWxsb2NhdGlvbiBhbmQgcmVmZXJlbmNlIHRyYWNraW5nIG9mIGludGVybWVkaWF0ZSBiYWNraW5nIGZpbGUgbGF5ZXJzIGluIHNlbGludXhfYmFja2luZ19maWxlX2FsbG9jLCBjbGVhbnVwIGluIHNlbGludXhfYmFja2luZ19maWxlX2ZyZWUsIGFuZCBtdWx0aS1sYXllciBwZXJtaXNzaW9uIGNoZWNrcyBkdXJpbmcgbXByb3RlY3QgaW4gc2VsaW51eF9maWxlX21wcm90ZWN0LiBUaGVzZSBjaGFuZ2VzIG1vZGlmeSBjb3JlIHNlY3VyaXR5IGFuZCBmaWxlc3lzdGVtIGludGVyYWN0aW9ucyBhbmQgYXJlIHdlbGwgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZmE3YTBiNTUwNjIyYzY0NWQ2MmNmOWEzNjQ5OGE3Y2FiZDcyNmNiNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDI5IDIyOjIzOjIxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jXG5pbmRleCAwMzVhYWYxMTNkMWRhLi5iNjc1MGVkY2M0NzgzIDEwMDY0NFxuLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jXG4rKysgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNcbkBAIC0xNjc0LDI2ICsxNjc0LDMyIEBAIHN0YXRpYyBpbnQgY3JlZF9oYXNfY2FwYWJpbGl0eShjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCxcbiBcdHJldHVybiByYztcbiB9XG4gXG4tLyogQ2hlY2sgd2hldGhlciBhIHRhc2sgaGFzIGEgcGFydGljdWxhciBwZXJtaXNzaW9uIHRvIGFuIGlub2RlLlxuLSAgIFRoZSAnYWRwJyBwYXJhbWV0ZXIgaXMgb3B0aW9uYWwgYW5kIGFsbG93cyBvdGhlciBhdWRpdFxuLSAgIGRhdGEgdG8gYmUgcGFzc2VkIChlLmcuIHRoZSBkZW50cnkpLiAqL1xuLXN0YXRpYyBpbnQgaW5vZGVfaGFzX3Blcm0oY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQsXG4tXHRcdFx0ICBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLVx0XHRcdCAgdTMyIHBlcm1zLFxuLVx0XHRcdCAgc3RydWN0IGNvbW1vbl9hdWRpdF9kYXRhICphZHApXG4rLypcbisgKiBDaGVjayB3aGV0aGVyIGEgU0lEIGhhcyBhIHBhcnRpY3VsYXIgcGVybWlzc2lvbiB0byBhbiBpbm9kZS4gIFRoZSAnYWRwJ1xuKyAqIHBhcmFtZXRlciBpcyBvcHRpb25hbCBhbmQgYWxsb3dzIG90aGVyIGF1ZGl0IGRhdGEgdG8gYmUgcGFzc2VkIChlLmcuIHRoZVxuKyAqIGRlbnRyeSkuXG4rICovXG4rc3RhdGljIGludCBpbm9kZV9zaWRfaGFzX3Blcm0odTMyIHNpZCwgc3RydWN0IGlub2RlICppbm9kZSwgdTMyIHBlcm1zLFxuK1x0XHRcdCAgICAgIHN0cnVjdCBjb21tb25fYXVkaXRfZGF0YSAqYWRwKVxuIHtcbiBcdHN0cnVjdCBpbm9kZV9zZWN1cml0eV9zdHJ1Y3QgKmlzZWM7XG4tXHR1MzIgc2lkO1xuIFxuIFx0aWYgKHVubGlrZWx5KElTX1BSSVZBVEUoaW5vZGUpKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRzaWQgPSBjcmVkX3NpZChjcmVkKTtcbiBcdGlzZWMgPSBzZWxpbnV4X2lub2RlKGlub2RlKTtcbiBcbiBcdHJldHVybiBhdmNfaGFzX3Blcm0oc2lkLCBpc2VjLVx1MDAzZXNpZCwgaXNlYy1cdTAwM2VzY2xhc3MsIHBlcm1zLCBhZHApO1xuIH1cbiBcbitzdGF0aWMgaW50IGlub2RlX2hhc19wZXJtKGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkLFxuK1x0XHRcdCAgc3RydWN0IGlub2RlICppbm9kZSxcbitcdFx0XHQgIHUzMiBwZXJtcyxcbitcdFx0XHQgIHN0cnVjdCBjb21tb25fYXVkaXRfZGF0YSAqYWRwKVxuK3tcbitcdHJldHVybiBpbm9kZV9zaWRfaGFzX3Blcm0oY3JlZF9zaWQoY3JlZCksIGlub2RlLCBwZXJtcywgYWRwKTtcbit9XG4rXG4gLyogU2FtZSBhcyBpbm9kZV9oYXNfcGVybSwgYnV0IHBhc3MgZXhwbGljaXQgYXVkaXQgZGF0YSBjb250YWluaW5nXG4gICAgdGhlIGRlbnRyeSB0byBoZWxwIHRoZSBhdWRpdGluZyBjb2RlIHRvIG1vcmUgZWFzaWx5IGdlbmVyYXRlIHRoZVxuICAgIHBhdGhuYW1lIGlmIG5lZWRlZC4gKi9cbkBAIC0zODQzLDE3ICszODQ5LDc0IEBAIHN0YXRpYyBpbnQgc2VsaW51eF9maWxlX2FsbG9jX3NlY3VyaXR5KHN0cnVjdCBmaWxlICpmaWxlKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgdTMyIHNlbGludXhfZmlsZV91c2VyX3NpZChjb25zdCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbit7XG4rXHRpZiAodW5saWtlbHkoZmlsZS1cdTAwM2VmX21vZGUgXHUwMDI2IEZNT0RFX0JBQ0tJTkcpKVxuK1x0XHRyZXR1cm4gc2VsaW51eF9iYWNraW5nX2ZpbGUoZmlsZSktXHUwMDNldWZfc2lkO1xuK1x0cmV0dXJuIHNlbGludXhfZmlsZShmaWxlKS1cdTAwM2VzaWQ7XG4rfVxuK1xuIHN0YXRpYyBpbnQgc2VsaW51eF9iYWNraW5nX2ZpbGVfYWxsb2Moc3RydWN0IGZpbGUgKmJhY2tpbmdfZmlsZSxcbiBcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBmaWxlICp1c2VyX2ZpbGUpXG4ge1xuIFx0c3RydWN0IGJhY2tpbmdfZmlsZV9zZWN1cml0eV9zdHJ1Y3QgKmJmc2VjO1xuK1x0Y29uc3Qgc3RydWN0IGJhY2tpbmdfZmlsZV9zZWN1cml0eV9zdHJ1Y3QgKnViZnNlYztcbitcdHN0cnVjdCBiYWNraW5nX2ZpbGVfc2VjdXJpdHlfbGF5ZXIgKmxheWVyO1xuK1x0dTMyIGk7XG4gXG4gXHRiZnNlYyA9IHNlbGludXhfYmFja2luZ19maWxlKGJhY2tpbmdfZmlsZSk7XG4tXHRiZnNlYy1cdTAwM2V1Zl9zaWQgPSBzZWxpbnV4X2ZpbGUodXNlcl9maWxlKS1cdTAwM2VzaWQ7XG4rXHRiZnNlYy1cdTAwM2V1Zl9zaWQgPSBzZWxpbnV4X2ZpbGVfdXNlcl9zaWQodXNlcl9maWxlKTtcbitcdGlmICghKHVzZXJfZmlsZS1cdTAwM2VmX21vZGUgXHUwMDI2IEZNT0RFX0JBQ0tJTkcpKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHViZnNlYyA9IHNlbGludXhfYmFja2luZ19maWxlKHVzZXJfZmlsZSk7XG4rXHQvKiBhIHdyYXBwZWQgY291bnQgd291bGQgbWFrZSBrbWFsbG9jX2FycmF5KCkgcmV0dXJuIFpFUk9fU0laRV9QVFIgKi9cbitcdGlmICh1bmxpa2VseSh1YmZzZWMtXHUwMDNlbGF5ZXJfY291bnQgPT0gVTMyX01BWCkpXG4rXHRcdHJldHVybiAtRU9WRVJGTE9XO1xuK1xuK1x0LypcbitcdCAqIFRoZSBmaW5hbCBWTUEgb25seSByZXRhaW5zIHRoZSBsb3dlc3QgYmFja2luZyBmaWxlLCBzbyByZWNvcmQgdGhlXG4rXHQgKiB3aG9sZSBjaGFpbiBoZXJlIHJhdGhlciB0aGFuIGluIHRoZSBtbWFwIGhvb2ssIHdoZXJlIGNvbmN1cnJlbnRcbitcdCAqIG1hcHBpbmdzIHdvdWxkIGhhdmUgdG8gYmUgc2VyaWFsaXplZC4gIFNpemUgaXQgZHluYW1pY2FsbHk6IGVyb2ZzXG4rXHQgKiBpbm9kZSBzaGFyaW5nIGFkZHMgYSBiYWNraW5nIGZpbGUgd2l0aG91dCBidW1waW5nIHNfc3RhY2tfZGVwdGguXG4rXHQgKi9cbitcdGJmc2VjLVx1MDAzZWxheWVycyA9IGttYWxsb2NfYXJyYXkodWJmc2VjLVx1MDAzZWxheWVyX2NvdW50ICsgMSxcbitcdFx0XHRcdCAgICAgIHNpemVvZigqYmZzZWMtXHUwMDNlbGF5ZXJzKSwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIWJmc2VjLVx1MDAzZWxheWVycylcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB1YmZzZWMtXHUwMDNlbGF5ZXJfY291bnQ7IGkrKykge1xuK1x0XHRsYXllciA9IFx1MDAyNmJmc2VjLVx1MDAzZWxheWVyc1tpXTtcbitcdFx0KmxheWVyID0gdWJmc2VjLVx1MDAzZWxheWVyc1tpXTtcbitcdFx0cGF0aF9nZXQoXHUwMDI2bGF5ZXItXHUwMDNlcGF0aCk7XG4rXHR9XG4rXG4rXHQvKiBmX3BhdGgsIG5vdCBmaWxlX3VzZXJfcGF0aCgpOiB0aGlzIGxheWVyLCBub3QgdGhlIHRvcC1sZXZlbCBmaWxlICovXG4rXHRsYXllciA9IFx1MDAyNmJmc2VjLVx1MDAzZWxheWVyc1tpXTtcbitcdGxheWVyLVx1MDAzZXBhdGggPSB1c2VyX2ZpbGUtXHUwMDNlZl9wYXRoO1xuK1x0bGF5ZXItXHUwMDNlbW91bnRlcl9zaWQgPSBjcmVkX3NpZCh1c2VyX2ZpbGUtXHUwMDNlZl9jcmVkKTtcbitcdGxheWVyLVx1MDAzZWZkX3NpZCA9IHNlbGludXhfZmlsZSh1c2VyX2ZpbGUpLVx1MDAzZXNpZDtcbitcdHBhdGhfZ2V0KFx1MDAyNmxheWVyLVx1MDAzZXBhdGgpO1xuK1x0YmZzZWMtXHUwMDNlbGF5ZXJfY291bnQgPSB1YmZzZWMtXHUwMDNlbGF5ZXJfY291bnQgKyAxO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIHNlbGludXhfYmFja2luZ19maWxlX2ZyZWUoc3RydWN0IGZpbGUgKmJhY2tpbmdfZmlsZSlcbit7XG4rXHRzdHJ1Y3QgYmFja2luZ19maWxlX3NlY3VyaXR5X3N0cnVjdCAqYmZzZWM7XG4rXG4rXHQvKiBzZWN1cml0eV9iYWNraW5nX2ZpbGVfZnJlZSgpIG1heSBiZSBjYWxsZWQgdHdpY2UgYWZ0ZXIgYW4gZXJyb3IgKi9cbitcdGlmICghYmFja2luZ19maWxlX3NlY3VyaXR5KGJhY2tpbmdfZmlsZSkpXG4rXHRcdHJldHVybjtcbitcbitcdGJmc2VjID0gc2VsaW51eF9iYWNraW5nX2ZpbGUoYmFja2luZ19maWxlKTtcbitcdHdoaWxlIChiZnNlYy1cdTAwM2VsYXllcl9jb3VudClcbitcdFx0cGF0aF9wdXQoXHUwMDI2YmZzZWMtXHUwMDNlbGF5ZXJzWy0tYmZzZWMtXHUwMDNlbGF5ZXJfY291bnRdLnBhdGgpO1xuK1x0a2ZyZWUoYmZzZWMtXHUwMDNlbGF5ZXJzKTtcbitcdGJmc2VjLVx1MDAzZWxheWVycyA9IE5VTEw7XG4rfVxuK1xuIC8qXG4gICogQ2hlY2sgd2hldGhlciBhIHRhc2sgaGFzIHRoZSBpb2N0bCBwZXJtaXNzaW9uIGFuZCBjbWRcbiAgKiBvcGVyYXRpb24gdG8gYW4gaW5vZGUuXG5AQCAtMzk3MSw2ICs0MDM0LDUzIEBAIHN0YXRpYyBpbnQgc2VsaW51eF9maWxlX2lvY3RsX2NvbXBhdChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCxcbiBcbiBzdGF0aWMgaW50IGRlZmF1bHRfbm9leGVjIF9fcm9fYWZ0ZXJfaW5pdDtcbiBcbitzdGF0aWMgdTMyIGZpbGVfbWFwX3Byb3RfdG9fYXYodW5zaWduZWQgbG9uZyBwcm90LCBib29sIHNoYXJlZClcbit7XG4rXHR1MzIgYXYgPSBGSUxFX19SRUFEO1xuK1xuK1x0aWYgKHNoYXJlZCBcdTAwMjZcdTAwMjYgKHByb3QgXHUwMDI2IFBST1RfV1JJVEUpKVxuK1x0XHRhdiB8PSBGSUxFX19XUklURTtcbitcdGlmIChwcm90IFx1MDAyNiBQUk9UX0VYRUMpXG4rXHRcdGF2IHw9IEZJTEVfX0VYRUNVVEU7XG4rXG4rXHRyZXR1cm4gYXY7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYmFja2luZ19tb3VudGVyc19oYXNfcGVybShjb25zdCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdTMyIGF2KVxuK3tcbitcdGNvbnN0IHN0cnVjdCBiYWNraW5nX2ZpbGVfc2VjdXJpdHlfc3RydWN0ICpiZnNlYztcbitcdGNvbnN0IHN0cnVjdCBiYWNraW5nX2ZpbGVfc2VjdXJpdHlfbGF5ZXIgKmxheWVyO1xuK1x0c3RydWN0IGNvbW1vbl9hdWRpdF9kYXRhIGFkO1xuK1x0c3RydWN0IGlub2RlICppbm9kZTtcbitcdHUzMiBpO1xuK1x0aW50IHJjO1xuK1xuK1x0aWYgKFdBUk5fT05fT05DRSghKGZpbGUtXHUwMDNlZl9tb2RlIFx1MDAyNiBGTU9ERV9CQUNLSU5HKSkpXG4rXHRcdHJldHVybiAtRUlPO1xuK1xuK1x0YmZzZWMgPSBzZWxpbnV4X2JhY2tpbmdfZmlsZShmaWxlKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGJmc2VjLVx1MDAzZWxheWVyX2NvdW50OyBpKyspIHtcbitcdFx0bGF5ZXIgPSBcdTAwMjZiZnNlYy1cdTAwM2VsYXllcnNbaV07XG4rXHRcdGlub2RlID0gZF9pbm9kZShsYXllci1cdTAwM2VwYXRoLmRlbnRyeSk7XG4rXG4rXHRcdGFkLnR5cGUgPSBMU01fQVVESVRfREFUQV9QQVRIO1xuK1x0XHRhZC51LnBhdGggPSBsYXllci1cdTAwM2VwYXRoO1xuK1xuK1x0XHRpZiAobGF5ZXItXHUwMDNlbW91bnRlcl9zaWQgIT0gbGF5ZXItXHUwMDNlZmRfc2lkKSB7XG4rXHRcdFx0cmMgPSBhdmNfaGFzX3Blcm0obGF5ZXItXHUwMDNlbW91bnRlcl9zaWQsIGxheWVyLVx1MDAzZWZkX3NpZCxcbitcdFx0XHRcdFx0ICBTRUNDTEFTU19GRCwgRkRfX1VTRSwgXHUwMDI2YWQpO1xuK1x0XHRcdGlmIChyYylcbitcdFx0XHRcdHJldHVybiByYztcbitcdFx0fVxuK1xuK1x0XHRyYyA9IGlub2RlX3NpZF9oYXNfcGVybShsYXllci1cdTAwM2Vtb3VudGVyX3NpZCwgaW5vZGUsIGF2LCBcdTAwMjZhZCk7XG4rXHRcdGlmIChyYylcbitcdFx0XHRyZXR1cm4gcmM7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gc3RhdGljIGludCBfX2ZpbGVfbWFwX3Byb3RfY2hlY2soY29uc3Qgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgcHJvdCxcbiBcdFx0XHRcdCBib29sIHNoYXJlZCwgYm9vbCBtb3VudGVyX2NoZWNrLFxuIFx0XHRcdFx0IGJvb2wgYmZfdXNlcl9maWxlKVxuQEAgLTQwMDQsMTQgKzQxMTQsMTAgQEAgc3RhdGljIGludCBfX2ZpbGVfbWFwX3Byb3RfY2hlY2soY29uc3Qgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgcHJvdCxcbiBcdGlmIChmaWxlKSB7XG4gXHRcdGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkID0gbW91bnRlcl9jaGVjayA/XG4gXHRcdFx0XHRmaWxlLVx1MDAzZWZfY3JlZCA6IGN1cnJlbnRfY3JlZCgpO1xuLVx0XHQvKiBcInJlYWRcIiBhbHdheXMgcG9zc2libGUsIFwid3JpdGVcIiBvbmx5IGlmIHNoYXJlZCAqL1xuLVx0XHR1MzIgYXYgPSBGSUxFX19SRUFEO1xuLVx0XHRpZiAoc2hhcmVkIFx1MDAyNlx1MDAyNiBwcm90X3dyaXRlKVxuLVx0XHRcdGF2IHw9IEZJTEVfX1dSSVRFO1xuLVx0XHRpZiAocHJvdF9leGVjKVxuLVx0XHRcdGF2IHw9IEZJTEVfX0VYRUNVVEU7XG4gXG4tXHRcdHJldHVybiBfX2ZpbGVfaGFzX3Blcm0oY3JlZCwgZmlsZSwgYXYsIGJmX3VzZXJfZmlsZSk7XG4rXHRcdHJldHVybiBfX2ZpbGVfaGFzX3Blcm0oY3JlZCwgZmlsZSxcbitcdFx0XHRcdCAgICAgICBmaWxlX21hcF9wcm90X3RvX2F2KHByb3QsIHNoYXJlZCksXG4rXHRcdFx0XHQgICAgICAgYmZfdXNlcl9maWxlKTtcbiBcdH1cbiBcbiBcdHJldHVybiAwO1xuQEAgLTQxMDYsNiArNDIxMiw3IEBAIHN0YXRpYyBpbnQgc2VsaW51eF9maWxlX21wcm90ZWN0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0aW50IHJjO1xuIFx0Y29uc3Qgc3RydWN0IGNyZWQgKmNyZWQgPSBjdXJyZW50X2NyZWQoKTtcbiBcdHUzMiBzaWQgPSBjcmVkX3NpZChjcmVkKTtcbitcdHUzMiBhdjtcbiBcdGNvbnN0IHN0cnVjdCBmaWxlICpmaWxlID0gdm1hLVx1MDAzZXZtX2ZpbGU7XG4gXHRib29sIGJhY2tpbmdfZmlsZTtcbiBcdGJvb2wgc2hhcmVkID0gdm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9TSEFSRUQ7XG5AQCAtNDE0OSw2ICs0MjU2LDEwIEBAIHN0YXRpYyBpbnQgc2VsaW51eF9maWxlX21wcm90ZWN0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRcdGlmIChyYylcbiBcdFx0XHRcdHJldHVybiByYztcbiBcdFx0XHRpZiAoYmFja2luZ19maWxlKSB7XG4rXHRcdFx0XHRyYyA9IGJhY2tpbmdfbW91bnRlcnNfaGFzX3Blcm0oZmlsZSxcbitcdFx0XHRcdFx0XHRcdCAgICAgICBGSUxFX19FWEVDTU9EKTtcbitcdFx0XHRcdGlmIChyYylcbitcdFx0XHRcdFx0cmV0dXJuIHJjO1xuIFx0XHRcdFx0cmMgPSBmaWxlX2hhc19wZXJtKGZpbGUtXHUwMDNlZl9jcmVkLCBmaWxlLFxuIFx0XHRcdFx0XHRcdCAgIEZJTEVfX0VYRUNNT0QpO1xuIFx0XHRcdFx0aWYgKHJjKVxuQEAgLTQxNjEsNiArNDI3MiwxMCBAQCBzdGF0aWMgaW50IHNlbGludXhfZmlsZV9tcHJvdGVjdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdGlmIChyYylcbiBcdFx0cmV0dXJuIHJjO1xuIFx0aWYgKGJhY2tpbmdfZmlsZSkge1xuK1x0XHRhdiA9IGZpbGVfbWFwX3Byb3RfdG9fYXYocHJvdCwgc2hhcmVkKTtcbitcdFx0cmMgPSBiYWNraW5nX21vdW50ZXJzX2hhc19wZXJtKGZpbGUsIGF2KTtcbitcdFx0aWYgKHJjKVxuK1x0XHRcdHJldHVybiByYztcbiBcdFx0cmMgPSBmaWxlX21hcF9wcm90X2NoZWNrKGZpbGUsIHByb3QsIHNoYXJlZCwgdHJ1ZSk7XG4gXHRcdGlmIChyYylcbiBcdFx0XHRyZXR1cm4gcmM7XG5AQCAtNzYzNSw2ICs3NzUwLDcgQEAgc3RhdGljIHN0cnVjdCBzZWN1cml0eV9ob29rX2xpc3Qgc2VsaW51eF9ob29rc1tdIF9fcm9fYWZ0ZXJfaW5pdCA9IHtcbiBcdExTTV9IT09LX0lOSVQoZmlsZV9wZXJtaXNzaW9uLCBzZWxpbnV4X2ZpbGVfcGVybWlzc2lvbiksXG4gXHRMU01fSE9PS19JTklUKGZpbGVfYWxsb2Nfc2VjdXJpdHksIHNlbGludXhfZmlsZV9hbGxvY19zZWN1cml0eSksXG4gXHRMU01fSE9PS19JTklUKGJhY2tpbmdfZmlsZV9hbGxvYywgc2VsaW51eF9iYWNraW5nX2ZpbGVfYWxsb2MpLFxuK1x0TFNNX0hPT0tfSU5JVChiYWNraW5nX2ZpbGVfZnJlZSwgc2VsaW51eF9iYWNraW5nX2ZpbGVfZnJlZSksXG4gXHRMU01fSE9PS19JTklUKGZpbGVfaW9jdGwsIHNlbGludXhfZmlsZV9pb2N0bCksXG4gXHRMU01fSE9PS19JTklUKGZpbGVfaW9jdGxfY29tcGF0LCBzZWxpbnV4X2ZpbGVfaW9jdGxfY29tcGF0KSxcbiBcdExTTV9IT09LX0lOSVQobW1hcF9maWxlLCBzZWxpbnV4X21tYXBfZmlsZSksXG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL29ianNlYy5oIGIvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL29ianNlYy5oXG5pbmRleCAzYzBhMTZlYzk3OGIwLi4yZjIxNTY4MjUxZmZlIDEwMDY0NFxuLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL29ianNlYy5oXG4rKysgYi9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvb2Jqc2VjLmhcbkBAIC04Niw4ICs4NiwxNiBAQCBzdHJ1Y3QgZmlsZV9zZWN1cml0eV9zdHJ1Y3Qge1xuIFx0dTMyIHBzZXFubzsgLyogUG9saWN5IHNlcW5vIGF0IHRoZSB0aW1lIG9mIGZpbGUgb3BlbiAqL1xuIH07XG4gXG4rc3RydWN0IGJhY2tpbmdfZmlsZV9zZWN1cml0eV9sYXllciB7XG4rXHRzdHJ1Y3QgcGF0aCBwYXRoOyAvKiB0aGlzIGxheWVyJ3MgcmVhbCBwYXRoICovXG4rXHR1MzIgbW91bnRlcl9zaWQ7IC8qIFNJRCBvZiB0aGUgbW91bnRlciB0aGF0IG9wZW5lZCBpdCAqL1xuK1x0dTMyIGZkX3NpZDsgLyogU0lEIG9mIGl0cyBvcGVuIGZpbGUgZGVzY3JpcHRpb24gKi9cbit9O1xuK1xuIHN0cnVjdCBiYWNraW5nX2ZpbGVfc2VjdXJpdHlfc3RydWN0IHtcbi1cdHUzMiB1Zl9zaWQ7IC8qIGFzc29jaWF0ZWQgdXNlciBmaWxlIGZzZWMtXHUwMDNlc2lkICovXG4rXHR1MzIgdWZfc2lkOyAvKiB0b3AtbGV2ZWwgdXNlciBmaWxlIGZzZWMtXHUwMDNlc2lkICovXG4rXHR1MzIgbGF5ZXJfY291bnQ7IC8qIG51bWJlciBvZiBpbnRlcm1lZGlhdGUgYmFja2luZyBmaWxlcyAqL1xuK1x0c3RydWN0IGJhY2tpbmdfZmlsZV9zZWN1cml0eV9sYXllciAqbGF5ZXJzO1xuIH07XG4gXG4gc3RydWN0IHN1cGVyYmxvY2tfc2VjdXJpdHlfc3RydWN0IHtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDIyOjIzOjI0LjY1MDA3MDgxNloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM1MzgwNDY4MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFRoaXMgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpczogaXMgdGhpcyBwYXRjaCBmdXp6YWJsZT8gV2hhdCBjb25maWd1cmF0aW9ucyBhcmUgKmVzc2VudGlhbCogdG8gcmVwcm9kdWNlIHRoZSBidWc/IEFuZCB3aGF0IGtleSBmdW5jdGlvbnMgYW5kIGRhdGEgc3RydWN0dXJlcyBzaG91bGQgSSB0YXJnZXQgYXMgZm9jdXMgc3ltYm9scyBmb3IgcmVwb3J0aW5nP1xuXG5BbHJpZ2h0LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGUgY29kZSBjaGFuZ2VzLiBBaCwgaXQncyB0b3VjaGluZyBgc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jYCBhbmQgYHNlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9vYmpzZWMuaGAuIEludGVyZXN0aW5nLiBJdCBzZWVtcyBsaWtlIHdlJ3JlIHVwZGF0aW5nIGhvdyBTRUxpbnV4IGludGVyYWN0cyB3aXRoIGJhY2tpbmcgZmlsZXMsIHRoaW5ncyBsaWtlIG92ZXJsYXlmcywgc3RhY2tlZCBmaWxlc3lzdGVtcywgYW5kIGVyb2ZzLlxuXG5Tbywgc3BlY2lmaWNhbGx5LCB0aGUgY2hhbmdlcyBhcmUgY2VudGVyZWQgYXJvdW5kIHRoZXNlIGZ1bmN0aW9uczogYGlub2RlX3NpZF9oYXNfcGVybWAsIGBpbm9kZV9oYXNfcGVybWAsIGBzZWxpbnV4X2ZpbGVfdXNlcl9zaWRgLCBgc2VsaW51eF9iYWNraW5nX2ZpbGVfYWxsb2NgLCBgc2VsaW51eF9iYWNraW5nX2ZpbGVfZnJlZWAsIGBmaWxlX21hcF9wcm90X3RvX2F2YCwgYGJhY2tpbmdfbW91bnRlcnNfaGFzX3Blcm1gLCBgc2VsaW51eF9maWxlX21wcm90ZWN0YCBhbmQgYWxzbyB0aGUgU0VMaW51eCBob29rcyBhcnJheTogIGEgbmV3IHJlZ2lzdHJhdGlvbiBvZiBgYmFja2luZ19maWxlX2ZyZWVgLlxuXG5Ob3csIGJlZm9yZSBJIHN0YXJ0IGNvbnN0cnVjdGluZyBhIGZ1enplciBvciBldmVuIHRoaW5raW5nIGFib3V0IGNvbmZpZyBvcHRpb25zLCBJIG5lZWQgdG8gZ2V0IGEgcmVhbGx5IHNvbGlkIGdyYXNwIG9uIHRoZSBzdXJyb3VuZGluZyBjb2RlLiAgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGJhY2tpbmcgZmlsZSBmdW5jdGlvbnMsIHRoZSBTRUxpbnV4IGltcGxlbWVudGF0aW9uLCBhbmQgaG93IHRoZSBob29rcyBhcmUgdXNlZC4gIFRpbWUgdG8gZmlyZSB1cCBncmVwcGVyIG9yIGp1c3QgY2FyZWZ1bGx5IHJlYWQgdGhyb3VnaCB0aGUgZmlsZSB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBsb2dpYyBhbmQgaG93IHRoZXNlIHBpZWNlcyBmaXQgdG9nZXRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwMzAsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQyMjoyMzoyOC4xODgxMjM3OTJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA0OTA0MTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlNFQ1VSSVRZX1NFTElOVVhcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwic2VjdXJpdHkvc2VsaW51eFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJzZWN1cml0eS9zZWxpbnV4L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWc6Mjpjb25maWcgU0VDVVJJVFlfU0VMSU5VWFxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy0zLVxcdGJvb2wgXFxcIlNFTGludXggU3VwcG9ydFxcXCJcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy0xMS1cXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWc6MTI6Y29uZmlnIFNFQ1VSSVRZX1NFTElOVVhfQk9PVFBBUkFNXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTEzLVxcdGJvb2wgXFxcIlNFTGludXggYm9vdCBwYXJhbWV0ZXJcXFwiXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnOjE0OlxcdGRlcGVuZHMgb24gU0VDVVJJVFlfU0VMSU5VWFxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy0xNS1cXHRkZWZhdWx0IG5cXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy0yNS1cXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWc6MjY6Y29uZmlnIFNFQ1VSSVRZX1NFTElOVVhfREVWRUxPUFxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy0yNy1cXHRib29sIFxcXCJTRUxpbnV4IERldmVsb3BtZW50IFN1cHBvcnRcXFwiXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnOjI4OlxcdGRlcGVuZHMgb24gU0VDVVJJVFlfU0VMSU5VWFxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy0yOS1cXHRkZWZhdWx0IHlcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy0zOS1cXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWc6NDA6Y29uZmlnIFNFQ1VSSVRZX1NFTElOVVhfQVZDX1NUQVRTXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTQxLVxcdGJvb2wgXFxcIlNFTGludXggQVZDIFN0YXRpc3RpY3NcXFwiXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnOjQyOlxcdGRlcGVuZHMgb24gU0VDVVJJVFlfU0VMSU5VWFxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy00My1cXHRkZWZhdWx0IHlcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy00OC1cXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWc6NDk6Y29uZmlnIFNFQ1VSSVRZX1NFTElOVVhfU0lEVEFCX0hBU0hfQklUU1xcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy01MC1cXHRpbnQgXFxcIlNFTGludXggc2lkdGFiIGhhc2h0YWJsZSBzaXplXFxcIlxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzo1MTpcXHRkZXBlbmRzIG9uIFNFQ1VSSVRZX1NFTElOVVhcXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctNTItXFx0cmFuZ2UgOCAxM1xcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTU1LVxcdCAgVGhpcyBvcHRpb24gc2V0cyB0aGUgbnVtYmVyIG9mIGJ1Y2tldHMgdXNlZCBpbiB0aGUgc2lkdGFiIGhhc2h0YWJsZVxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzo1NjpcXHQgIHRvIDJeU0VDVVJJVFlfU0VMSU5VWF9TSURUQUJfSEFTSF9CSVRTIGJ1Y2tldHMuIFRoZSBudW1iZXIgb2YgaGFzaFxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy01Ny1cXHQgIGNvbGxpc2lvbnMgbWF5IGJlIHZpZXdlZCBhdCAvc3lzL2ZzL3NlbGludXgvc3Mvc2lkdGFiX2hhc2hfc3RhdHMuIElmXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctNjAtXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnOjYxOmNvbmZpZyBTRUNVUklUWV9TRUxJTlVYX1NJRDJTVFJfQ0FDSEVfU0laRVxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy02Mi1cXHRpbnQgXFxcIlNFTGludXggU0lEIHRvIGNvbnRleHQgc3RyaW5nIHRyYW5zbGF0aW9uIGNhY2hlIHNpemVcXFwiXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnOjYzOlxcdGRlcGVuZHMgb24gU0VDVVJJVFlfU0VMSU5VWFxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy02NC1cXHRkZWZhdWx0IDI1Nlxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTcxLVxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzo3Mjpjb25maWcgU0VDVVJJVFlfU0VMSU5VWF9BVkNfSEFTSF9CSVRTXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTczLVxcdGludCBcXFwiU0VMaW51eCBhdmMgaGFzaHRhYmxlIHNpemVcXFwiXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnOjc0OlxcdGRlcGVuZHMgb24gU0VDVVJJVFlfU0VMSU5VWFxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy03NS1cXHRyYW5nZSA5IDE0XFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctNzgtXFx0ICBUaGlzIG9wdGlvbiBzZXRzIHRoZSBudW1iZXIgb2YgYnVja2V0cyB1c2VkIGluIHRoZSBBVkMgaGFzaCB0YWJsZVxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzo3OTpcXHQgIHRvIDJeU0VDVVJJVFlfU0VMSU5VWF9BVkNfSEFTSF9CSVRTLiBBIGhpZ2hlciB2YWx1ZSBoZWxwcyBtYWludGFpblxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy04MC1cXHQgIHNob3J0ZXIgY2hhaW4gbGVuZ3RocyBlc3BlY2lhbGx5IHdoZW4gZXhwYW5kaW5nIEFWQyBub2RlcyB2aWFcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy04Mi1cXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWc6ODM6Y29uZmlnIFNFQ1VSSVRZX1NFTElOVVhfREVCVUdcXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctODQtXFx0Ym9vbCBcXFwiU0VMaW51eCBrZXJuZWwgZGVidWdnaW5nIHN1cHBvcnRcXFwiXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnOjg1OlxcdGRlcGVuZHMgb24gU0VDVVJJVFlfU0VMSU5VWFxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy04Ni1cXHRkZWZhdWx0IG5cXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvTWFrZWZpbGUtMTAtXFxuc2VjdXJpdHkvc2VsaW51eC9NYWtlZmlsZToxMTpvYmotJChDT05GSUdfU0VDVVJJVFlfU0VMSU5VWCkgOj0gc2VsaW51eC5vXFxuc2VjdXJpdHkvc2VsaW51eC9NYWtlZmlsZS0xMi1cXG5zZWN1cml0eS9zZWxpbnV4L01ha2VmaWxlPTEzPWNjZmxhZ3MteSA6PSAtSSQoc3JjdHJlZSkvc2VjdXJpdHkvc2VsaW51eCAtSSQoc3JjdHJlZSkvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlXFxuc2VjdXJpdHkvc2VsaW51eC9NYWtlZmlsZS0xNC1cXG5zZWN1cml0eS9zZWxpbnV4L01ha2VmaWxlOjE1OmNjZmxhZ3MtJChDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9ERUJVRykgKz0gLURERUJVR1xcbnNlY3VyaXR5L3NlbGludXgvTWFrZWZpbGUtMTYtXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2F2Yy5jLTM3LVxcbnNlY3VyaXR5L3NlbGludXgvYXZjLmM6Mzg6I2RlZmluZSBBVkNfQ0FDSEVfU0xPVFNcXHRcXHQoMSBcXHUwMDNjXFx1MDAzYyBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9BVkNfSEFTSF9CSVRTKVxcbnNlY3VyaXR5L3NlbGludXgvYXZjLmMtMzktI2RlZmluZSBBVkNfREVGX0NBQ0hFX1RIUkVTSE9MRFxcdEFWQ19DQUNIRV9TTE9UU1xcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9hdmMuYy00MS1cXG5zZWN1cml0eS9zZWxpbnV4L2F2Yy5jOjQyOiNpZmRlZiBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9BVkNfU1RBVFNcXG5zZWN1cml0eS9zZWxpbnV4L2F2Yy5jLTQzLSNkZWZpbmUgYXZjX2NhY2hlX3N0YXRzX2luY3IoZmllbGQpXFx0dGhpc19jcHVfaW5jKGF2Y19jYWNoZV9zdGF0cy5maWVsZClcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvYXZjLmM9ODA9c3RydWN0IGF2Y19jYWxsYmFja19ub2RlIHtcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvYXZjLmMtODUtXFxuc2VjdXJpdHkvc2VsaW51eC9hdmMuYzo4NjojaWZkZWYgQ09ORklHX1NFQ1VSSVRZX1NFTElOVVhfQVZDX1NUQVRTXFxuc2VjdXJpdHkvc2VsaW51eC9hdmMuYy04Ny1ERUZJTkVfUEVSX0NQVShzdHJ1Y3QgYXZjX2NhY2hlX3N0YXRzLCBhdmNfY2FjaGVfc3RhdHMpID0geyAwIH07XFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9MTE3PXN0YXRpYyBhdG9taWNfdCBzZWxpbnV4X3NlY21hcmtfcmVmY291bnQgPSBBVE9NSUNfSU5JVCgwKTtcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMTE4LVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzoxMTk6I2lmZGVmIENPTkZJR19TRUNVUklUWV9TRUxJTlVYX0RFVkVMT1BcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMTIwLXN0YXRpYyBpbnQgc2VsaW51eF9lbmZvcmNpbmdfYm9vdCBfX2luaXRkYXRhO1xcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTEzND1pbnQgc2VsaW51eF9lbmFibGVkX2Jvb3QgX19pbml0ZGF0YSA9IDE7XFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjEzNTojaWZkZWYgQ09ORklHX1NFQ1VSSVRZX1NFTElOVVhfQk9PVFBBUkFNXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTEzNi1zdGF0aWMgaW50IF9faW5pdCBzZWxpbnV4X2VuYWJsZWRfc2V0dXAoY2hhciAqc3RyKVxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2Yy5oPTE2Nj12b2lkIGF2Y19zZXRfY2FjaGVfdGhyZXNob2xkKHVuc2lnbmVkIGludCBjYWNoZV90aHJlc2hvbGQpO1xcbnNlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdmMuaC0xNjctXFxuc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2Yy5oOjE2ODojaWZkZWYgQ09ORklHX1NFQ1VSSVRZX1NFTElOVVhfQVZDX1NUQVRTXFxuc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2Yy5oLTE2OS1ERUNMQVJFX1BFUl9DUFUoc3RydWN0IGF2Y19jYWNoZV9zdGF0cywgYXZjX2NhY2hlX3N0YXRzKTtcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9zZWN1cml0eS5oPTk0PXN0cnVjdCBzZWxpbnV4X3N0YXRlIHtcXG5zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvc2VjdXJpdHkuaDo5NTojaWZkZWYgQ09ORklHX1NFQ1VSSVRZX1NFTElOVVhfREVWRUxPUFxcbnNlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9zZWN1cml0eS5oLTk2LVxcdGJvb2wgZW5mb3JjaW5nO1xcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL3NlY3VyaXR5Lmg9MTE4PXN0YXRpYyBpbmxpbmUgdm9pZCBzZWxpbnV4X21hcmtfaW5pdGlhbGl6ZWQodm9pZClcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9zZWN1cml0eS5oLTEyMy1cXG5zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvc2VjdXJpdHkuaDoxMjQ6I2lmZGVmIENPTkZJR19TRUNVUklUWV9TRUxJTlVYX0RFVkVMT1BcXG5zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvc2VjdXJpdHkuaC0xMjUtc3RhdGljIGlubGluZSBib29sIGVuZm9yY2luZ19lbmFibGVkKHZvaWQpXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L3NlbGludXhmcy5jPTEyMD1zdGF0aWMgc3NpemVfdCBzZWxfcmVhZF9lbmZvcmNlKHN0cnVjdCBmaWxlICpmaWxwLCBjaGFyIF9fdXNlciAqYnVmLFxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9zZWxpbnV4ZnMuYy0xMzAtXFxuc2VjdXJpdHkvc2VsaW51eC9zZWxpbnV4ZnMuYzoxMzE6I2lmZGVmIENPTkZJR19TRUNVUklUWV9TRUxJTlVYX0RFVkVMT1BcXG5zZWN1cml0eS9zZWxpbnV4L3NlbGludXhmcy5jLTEzMi1zdGF0aWMgc3NpemVfdCBzZWxfd3JpdGVfZW5mb3JjZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZixcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvc2VsaW51eGZzLmM9MTM5Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzZWxfYXZjX2hhc2hfc3RhdHNfb3BzID0ge1xcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9zZWxpbnV4ZnMuYy0xMzk2LVxcbnNlY3VyaXR5L3NlbGludXgvc2VsaW51eGZzLmM6MTM5NzojaWZkZWYgQ09ORklHX1NFQ1VSSVRZX1NFTElOVVhfQVZDX1NUQVRTXFxuc2VjdXJpdHkvc2VsaW51eC9zZWxpbnV4ZnMuYy0xMzk4LXN0YXRpYyBzdHJ1Y3QgYXZjX2NhY2hlX3N0YXRzICpzZWxfYXZjX2dldF9zdGF0X2lkeChsb2ZmX3QgKmlkeClcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvc2VsaW51eGZzLmM9MTQ2OD1zdGF0aWMgaW50IHNlbF9tYWtlX2F2Y19maWxlcyhzdHJ1Y3QgZGVudHJ5ICpkaXIpXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L3NlbGludXhmcy5jLTE0NzctXFx0XFx0eyBcXFwiaGFzaF9zdGF0c1xcXCIsIFxcdTAwMjZzZWxfYXZjX2hhc2hfc3RhdHNfb3BzLCBTX0lSVUdPIH0sXFxuc2VjdXJpdHkvc2VsaW51eC9zZWxpbnV4ZnMuYzoxNDc4OiNpZmRlZiBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9BVkNfU1RBVFNcXG5zZWN1cml0eS9zZWxpbnV4L3NlbGludXhmcy5jLTE0NzktXFx0XFx0eyBcXFwiY2FjaGVfc3RhdHNcXFwiLCBcXHUwMDI2c2VsX2F2Y19jYWNoZV9zdGF0c19vcHMsIFNfSVJVR08gfSxcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvc3MvYXZ0YWIuYz0yNTM9aW50IGF2dGFiX2FsbG9jX2R1cChzdHJ1Y3QgYXZ0YWIgKm5ldywgY29uc3Qgc3RydWN0IGF2dGFiICpvcmlnKVxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9zcy9hdnRhYi5jLTI1Ny1cXG5zZWN1cml0eS9zZWxpbnV4L3NzL2F2dGFiLmM6MjU4OiNpZmRlZiBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9ERUJVR1xcbnNlY3VyaXR5L3NlbGludXgvc3MvYXZ0YWIuYy0yNTktdm9pZCBhdnRhYl9oYXNoX2V2YWwoc3RydWN0IGF2dGFiICpoLCBjb25zdCBjaGFyICp0YWcpXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L3NzL2F2dGFiLmMtMjg5LX1cXG5zZWN1cml0eS9zZWxpbnV4L3NzL2F2dGFiLmM6MjkwOiNlbmRpZiAvKiBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9ERUJVRyAqL1xcbnNlY3VyaXR5L3NlbGludXgvc3MvYXZ0YWIuYy0yOTEtXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L3NzL2F2dGFiLmg9MTA3PXZvaWQgYXZ0YWJfZGVzdHJveShzdHJ1Y3QgYXZ0YWIgKmgpO1xcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9zcy9hdnRhYi5oLTExMS1cXG5zZWN1cml0eS9zZWxpbnV4L3NzL2F2dGFiLmg6MTEyOiNpZmRlZiBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9ERUJVR1xcbnNlY3VyaXR5L3NlbGludXgvc3MvYXZ0YWIuaC0xMTMtdm9pZCBhdnRhYl9oYXNoX2V2YWwoc3RydWN0IGF2dGFiICpoLCBjb25zdCBjaGFyICp0YWcpO1xcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9zcy9oYXNodGFiLmM9ODg9aW50IGhhc2h0YWJfbWFwKHN0cnVjdCBoYXNodGFiICpoLCBpbnQgKCphcHBseSkodm9pZCAqaywgdm9pZCAqZCwgdm9pZCAqYXJncyksXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L3NzL2hhc2h0YWIuYy0xMDYtXFxuc2VjdXJpdHkvc2VsaW51eC9zcy9oYXNodGFiLmM6MTA3OiNpZmRlZiBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9ERUJVR1xcbnNlY3VyaXR5L3NlbGludXgvc3MvaGFzaHRhYi5jLTEwOC12b2lkIGhhc2h0YWJfc3RhdChzdHJ1Y3QgaGFzaHRhYiAqaCwgc3RydWN0IGhhc2h0YWJfaW5mbyAqaW5mbylcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvc3MvaGFzaHRhYi5jLTEzNy19XFxuc2VjdXJpdHkvc2VsaW51eC9zcy9oYXNodGFiLmM6MTM4OiNlbmRpZiAvKiBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9ERUJVRyAqL1xcbnNlY3VyaXR5L3NlbGludXgvc3MvaGFzaHRhYi5jLTEzOS1cXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvc3MvaGFzaHRhYi5oPTEzOT1pbnQgaGFzaHRhYl9kdXBsaWNhdGUoc3RydWN0IGhhc2h0YWIgKm5ldywgY29uc3Qgc3RydWN0IGhhc2h0YWIgKm9yaWcsXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L3NzL2hhc2h0YWIuaC0xNDMtXFxuc2VjdXJpdHkvc2VsaW51eC9zcy9oYXNodGFiLmg6MTQ0OiNpZmRlZiBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9ERUJVR1xcbnNlY3VyaXR5L3NlbGludXgvc3MvaGFzaHRhYi5oLTE0NS0vKiBGaWxsIGluZm8gd2l0aCBzb21lIGhhc2ggdGFibGUgc3RhdGlzdGljcyAqL1xcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9zcy9wb2xpY3lkYi5jLTQwLVxcbnNlY3VyaXR5L3NlbGludXgvc3MvcG9saWN5ZGIuYzo0MTojaWZkZWYgQ09ORklHX1NFQ1VSSVRZX1NFTElOVVhfREVCVUdcXG5zZWN1cml0eS9zZWxpbnV4L3NzL3BvbGljeWRiLmMtNDItLyogY2xhbmctZm9ybWF0IG9mZiAqL1xcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9zcy9wb2xpY3lkYi5jPTY5MT1zdGF0aWMgaW50ICgqY29uc3QgaW5kZXhfZltTWU1fTlVNXSkodm9pZCAqa2V5LCB2b2lkICpkYXR1bSwgdm9pZCAqZGF0YXApID0ge1xcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9zcy9wb2xpY3lkYi5jLTcwMi1cXG5zZWN1cml0eS9zZWxpbnV4L3NzL3BvbGljeWRiLmM6NzAzOiNpZmRlZiBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9ERUJVR1xcbnNlY3VyaXR5L3NlbGludXgvc3MvcG9saWN5ZGIuYy03MDQtc3RhdGljIHZvaWQgaGFzaF9ldmFsKHN0cnVjdCBoYXNodGFiICpoLCBjb25zdCBjaGFyICpoYXNoX25hbWUsXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L3NzL3BvbGljeWRiLmM9NzMwPXN0YXRpYyBpbmxpbmUgdm9pZCBzeW10YWJfaGFzaF9ldmFsKHN0cnVjdCBzeW10YWIgKnMpXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L3NzL3BvbGljeWRiLmMtNzMyLX1cXG5zZWN1cml0eS9zZWxpbnV4L3NzL3BvbGljeWRiLmM6NzMzOiNlbmRpZiAvKiBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9ERUJVRyAqL1xcbnNlY3VyaXR5L3NlbGludXgvc3MvcG9saWN5ZGIuYy03MzQtXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L3NzL3NpZHRhYi5jPTM1PWludCBzaWR0YWJfaW5pdChzdHJ1Y3Qgc2lkdGFiICpzKVxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9zcy9zaWR0YWIuYy01MC1cXG5zZWN1cml0eS9zZWxpbnV4L3NzL3NpZHRhYi5jOjUxOiNpZiBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9TSUQyU1RSX0NBQ0hFX1NJWkUgXFx1MDAzZSAwXFxuc2VjdXJpdHkvc2VsaW51eC9zcy9zaWR0YWIuYzo1MjpcXHRzLVxcdTAwM2VjYWNoZV9mcmVlX3Nsb3RzID0gQ09ORklHX1NFQ1VSSVRZX1NFTElOVVhfU0lEMlNUUl9DQUNIRV9TSVpFO1xcbnNlY3VyaXR5L3NlbGludXgvc3Mvc2lkdGFiLmMtNTMtXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnMtXFx1MDAzZWNhY2hlX2xydV9saXN0KTtcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvc3Mvc2lkdGFiLmM9Nzg9aW50IHNpZHRhYl9zZXRfaW5pdGlhbChzdHJ1Y3Qgc2lkdGFiICpzLCB1MzIgc2lkLCBzdHJ1Y3QgY29udGV4dCAqY29udGV4dClcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvc3Mvc2lkdGFiLmMtOTItXFxuc2VjdXJpdHkvc2VsaW51eC9zcy9zaWR0YWIuYzo5MzojaWYgQ09ORklHX1NFQ1VSSVRZX1NFTElOVVhfU0lEMlNUUl9DQUNIRV9TSVpFIFxcdTAwM2UgMFxcbnNlY3VyaXR5L3NlbGludXgvc3Mvc2lkdGFiLmMtOTQtXFx0aXNpZC1cXHUwMDNlZW50cnkuY2FjaGUgPSBOVUxMO1xcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9zcy9zaWR0YWIuYz01MDg9c3RhdGljIHZvaWQgc2lkdGFiX2Rlc3Ryb3lfZW50cnkoc3RydWN0IHNpZHRhYl9lbnRyeSAqZW50cnkpXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L3NzL3NpZHRhYi5jLTUxMC1cXHRjb250ZXh0X2Rlc3Ryb3koXFx1MDAyNmVudHJ5LVxcdTAwM2Vjb250ZXh0KTtcXG5zZWN1cml0eS9zZWxpbnV4L3NzL3NpZHRhYi5jOjUxMTojaWYgQ09ORklHX1NFQ1VSSVRZX1NFTElOVVhfU0lEMlNUUl9DQUNIRV9TSVpFIFxcdTAwM2UgMFxcbnNlY3VyaXR5L3NlbGludXgvc3Mvc2lkdGFiLmMtNTEyLVxcdGtmcmVlKHJjdV9kZXJlZmVyZW5jZV9yYXcoZW50cnktXFx1MDAzZWNhY2hlKSk7XFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L3NzL3NpZHRhYi5jPTU0MT12b2lkIHNpZHRhYl9kZXN0cm95KHN0cnVjdCBzaWR0YWIgKnMpXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L3NzL3NpZHRhYi5jLTU2MC1cXG5zZWN1cml0eS9zZWxpbnV4L3NzL3NpZHRhYi5jOjU2MTojaWYgQ09ORklHX1NFQ1VSSVRZX1NFTElOVVhfU0lEMlNUUl9DQUNIRV9TSVpFIFxcdTAwM2UgMFxcbnNlY3VyaXR5L3NlbGludXgvc3Mvc2lkdGFiLmMtNTYyLVxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9zcy9zaWR0YWIuYz02MDg9aW50IHNpZHRhYl9zaWQyc3RyX2dldChzdHJ1Y3Qgc2lkdGFiICpzLCBzdHJ1Y3Qgc2lkdGFiX2VudHJ5ICplbnRyeSwgY2hhciAqKm91dCxcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvc3Mvc2lkdGFiLmMtNjM3LVxcbnNlY3VyaXR5L3NlbGludXgvc3Mvc2lkdGFiLmM6NjM4OiNlbmRpZiAvKiBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9TSUQyU1RSX0NBQ0hFX1NJWkUgXFx1MDAzZSAwICovXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L3NzL3NpZHRhYi5oPTIxPXN0cnVjdCBzaWR0YWJfZW50cnkge1xcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9zcy9zaWR0YWIuaC0yNC1cXHRzdHJ1Y3QgY29udGV4dCBjb250ZXh0O1xcbnNlY3VyaXR5L3NlbGludXgvc3Mvc2lkdGFiLmg6MjU6I2lmIENPTkZJR19TRUNVUklUWV9TRUxJTlVYX1NJRDJTVFJfQ0FDSEVfU0laRSBcXHUwMDNlIDBcXG5zZWN1cml0eS9zZWxpbnV4L3NzL3NpZHRhYi5oLTI2LVxcdHN0cnVjdCBzaWR0YWJfc3RyX2NhY2hlIF9fcmN1ICpjYWNoZTtcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvc3Mvc2lkdGFiLmg9Njk9c3RydWN0IHNpZHRhYl9jb252ZXJ0X3BhcmFtcyB7XFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L3NzL3NpZHRhYi5oLTczLVxcbnNlY3VyaXR5L3NlbGludXgvc3Mvc2lkdGFiLmg6NzQ6I2RlZmluZSBTSURUQUJfSEFTSF9CSVRTICAgIENPTkZJR19TRUNVUklUWV9TRUxJTlVYX1NJRFRBQl9IQVNIX0JJVFNcXG5zZWN1cml0eS9zZWxpbnV4L3NzL3NpZHRhYi5oLTc1LSNkZWZpbmUgU0lEVEFCX0hBU0hfQlVDS0VUUyAoMSBcXHUwMDNjXFx1MDAzYyBTSURUQUJfSEFTSF9CSVRTKVxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9zcy9zaWR0YWIuaD03Nz1zdHJ1Y3Qgc2lkdGFiIHtcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvc3Mvc2lkdGFiLmgtOTItXFxuc2VjdXJpdHkvc2VsaW51eC9zcy9zaWR0YWIuaDo5MzojaWYgQ09ORklHX1NFQ1VSSVRZX1NFTElOVVhfU0lEMlNUUl9DQUNIRV9TSVpFIFxcdTAwM2UgMFxcbnNlY3VyaXR5L3NlbGludXgvc3Mvc2lkdGFiLmgtOTQtXFx0LyogU0lEIC1cXHUwMDNlIGNvbnRleHQgc3RyaW5nIGNhY2hlICovXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L3NzL3NpZHRhYi5oPTEzOT1pbnQgc2lkdGFiX2hhc2hfc3RhdHMoc3RydWN0IHNpZHRhYiAqc2lkdGFiLCBjaGFyICpwYWdlKTtcXG5zZWN1cml0eS9zZWxpbnV4L3NzL3NpZHRhYi5oLTE0MC1cXG5zZWN1cml0eS9zZWxpbnV4L3NzL3NpZHRhYi5oOjE0MTojaWYgQ09ORklHX1NFQ1VSSVRZX1NFTElOVVhfU0lEMlNUUl9DQUNIRV9TSVpFIFxcdTAwM2UgMFxcbnNlY3VyaXR5L3NlbGludXgvc3Mvc2lkdGFiLmgtMTQyLXZvaWQgc2lkdGFiX3NpZDJzdHJfcHV0KHN0cnVjdCBzaWR0YWIgKnMsIHN0cnVjdCBzaWR0YWJfZW50cnkgKmVudHJ5LFxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9zcy9zaWR0YWIuaD0xNTI9c3RhdGljIGlubGluZSBpbnQgc2lkdGFiX3NpZDJzdHJfZ2V0KHN0cnVjdCBzaWR0YWIgKnMsXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L3NzL3NpZHRhYi5oLTE1Ny19XFxuc2VjdXJpdHkvc2VsaW51eC9zcy9zaWR0YWIuaDoxNTg6I2VuZGlmIC8qIENPTkZJR19TRUNVUklUWV9TRUxJTlVYX1NJRDJTVFJfQ0FDSEVfU0laRSBcXHUwMDNlIDAgKi9cXG5zZWN1cml0eS9zZWxpbnV4L3NzL3NpZHRhYi5oLTE1OS1cXG4tLVxcbnNlY3VyaXR5L3NlbGludXgveGZybS5jLTI0LSAqXFx0Q09ORklHX1NFQ1VSSVRZX05FVFdPUktfWEZSTT15XFxuc2VjdXJpdHkvc2VsaW51eC94ZnJtLmM6MjU6ICpcXHRDT05GSUdfU0VDVVJJVFlfU0VMSU5VWD1tL3lcXG5zZWN1cml0eS9zZWxpbnV4L3hmcm0uYy0yNi0gKiBJU1NVRVM6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDIyOjIzOjI4LjI5MzAzMjUxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzc2ODUwMzI5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBTRUxpbnV4IGlzIGNvbmZpZ3VyZWQgd2l0aGluIHRoaXMga2VybmVsIGJ1aWxkLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBLY29uZmlnIGZpbGVzLCB0aGUgY29yZSBjb25maWd1cmF0aW9uIG1lY2hhbmlzbXMuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIEknbGwgc3RhcnQgd2l0aCB0aGUgZ2VuZXJhbCBgc2VjdXJpdHkvS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHdoZXJlIEknZCBleHBlY3QgdG8gZmluZCB0aGUgdG9wLWxldmVsIG9wdGlvbnMgcmVsYXRlZCB0byBzZWN1cml0eSBmZWF0dXJlcy5cblxuKipTRUxpbnV4IENvbmZpZ3VyYXRpb24gSW52ZXN0aWdhdGlvbioqXG5cbkFscmlnaHQsIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSdtIGdvaW5nIHRvIGNoZWNrIHRob3NlIGBLY29uZmlnYCBmaWxlcy4gSSdsbCBuZWVkIHRvIGxvb2sgaW4gYm90aCB0aGUgdG9wLWxldmVsIGBzZWN1cml0eS9LY29uZmlnYCBhbmQgdGhlbiBhbHNvIHRoZSBtb3JlIHNwZWNpZmljIGBzZWN1cml0eS9zZWxpbnV4L0tjb25maWdgIHRvIHNlZSBob3cgU0VMaW51eCBpcyBzZXQgdXAuIFRoZXkgbWlnaHQgYmUgc2VwYXJhdGUgZmlsZXMgZm9yIG1vcmUgY2xhcml0eSwgb3IgdGhleSBtaWdodCBiZSBvbmUgYW5kIHRoZSBzYW1lIGZpbGUuIEluIGFueSBjYXNlLCBJIGtub3cgSSdsbCBmaW5kIHRoZSByZWxldmFudCBvcHRpb25zIHRoZXJlLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4gSSdsbCBzdGFydCB3aXRoIGBzZWN1cml0eS9LY29uZmlnYCwgdGhhdCdzIHVzdWFsbHkgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMjA5LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMjI6MjM6MzIuMDYxNTQ1MDMzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU3NzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcInNlY3VyaXR5L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIFNlY3VyaXR5IGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0bWVudSBcXFwiU2VjdXJpdHkgb3B0aW9uc1xcXCJcXG4gICA3OlxcdFxcbiAgIDg6XFx0c291cmNlIFxcXCJzZWN1cml0eS9rZXlzL0tjb25maWdcXFwiXFxuICAgOTpcXHRcXG4gIDEwOlxcdGNvbmZpZyBTRUNVUklUWV9ETUVTR19SRVNUUklDVFxcbiAgMTE6XFx0XFx0Ym9vbCBcXFwiUmVzdHJpY3QgdW5wcml2aWxlZ2VkIGFjY2VzcyB0byB0aGUga2VybmVsIHN5c2xvZ1xcXCJcXG4gIDEyOlxcdFxcdGRlZmF1bHQgblxcbiAgMTM6XFx0XFx0aGVscFxcbiAgMTQ6XFx0XFx0ICBUaGlzIGVuZm9yY2VzIHJlc3RyaWN0aW9ucyBvbiB1bnByaXZpbGVnZWQgdXNlcnMgcmVhZGluZyB0aGUga2VybmVsXFxuICAxNTpcXHRcXHQgIHN5c2xvZyB2aWEgZG1lc2coOCkuXFxuICAxNjpcXHRcXG4gIDE3OlxcdFxcdCAgSWYgdGhpcyBvcHRpb24gaXMgbm90IHNlbGVjdGVkLCBubyByZXN0cmljdGlvbnMgd2lsbCBiZSBlbmZvcmNlZFxcbiAgMTg6XFx0XFx0ICB1bmxlc3MgdGhlIGRtZXNnX3Jlc3RyaWN0IHN5c2N0bCBpcyBleHBsaWNpdGx5IHNldCB0byAoMSkuXFxuICAxOTpcXHRcXG4gIDIwOlxcdFxcdCAgSWYgeW91IGFyZSB1bnN1cmUgaG93IHRvIGFuc3dlciB0aGlzIHF1ZXN0aW9uLCBhbnN3ZXIgTi5cXG4gIDIxOlxcdFxcbiAgMjI6XFx0Y2hvaWNlXFxuICAyMzpcXHRcXHRwcm9tcHQgXFxcIkFsbG93IC9wcm9jL3BpZC9tZW0gYWNjZXNzIG92ZXJyaWRlXFxcIlxcbiAgMjQ6XFx0XFx0ZGVmYXVsdCBQUk9DX01FTV9GT1JDRV9QVFJBQ0VcXG4gIDI1OlxcdFxcdGhlbHBcXG4gIDI2OlxcdFxcdCAgVHJhZGl0aW9uYWxseSAvcHJvYy9waWQvbWVtIGFsbG93cyB1c2VycyB0byBvdmVycmlkZSBtZW1vcnlcXG4gIDI3OlxcdFxcdCAgcGVybWlzc2lvbnMgZm9yIHVzZXJzIGxpa2UgcHRyYWNlLCBhc3N1bWluZyB0aGV5IGhhdmUgcHRyYWNlXFxuICAyODpcXHRcXHQgIGNhcGFiaWxpdHkuXFxuICAyOTpcXHRcXG4gIDMwOlxcdFxcdCAgVGhpcyBhbGxvd3MgcGVvcGxlIHRvIGxpbWl0IHRoYXQgLSBlaXRoZXIgbmV2ZXIgb3ZlcnJpZGUsIG9yXFxuICAzMTpcXHRcXHQgIHJlcXVpcmUgYWN0dWFsIGFjdGl2ZSBwdHJhY2UgYXR0YWNobWVudCAoZGVmYXVsdCkuXFxuICAzMjpcXHRcXG4gIDMzOlxcdGNvbmZpZyBQUk9DX01FTV9BTFdBWVNfRk9SQ0VcXG4gIDM0OlxcdFxcdGJvb2wgXFxcIlRyYWRpdGlvbmFsIC9wcm9jL3BpZC9tZW0gYmVoYXZpb3JcXFwiXFxuICAzNTpcXHRcXHRoZWxwXFxuICAzNjpcXHRcXHQgIFRoaXMgYWxsb3dzIC9wcm9jL3BpZC9tZW0gYWNjZXNzZXMgdG8gb3ZlcnJpZGUgbWVtb3J5IG1hcHBpbmdcXG4gIDM3OlxcdFxcdCAgcGVybWlzc2lvbnMgaWYgeW91IGhhdmUgcHRyYWNlIGFjY2VzcyByaWdodHMuXFxuICAzODpcXHRcXG4gIDM5OlxcdGNvbmZpZyBQUk9DX01FTV9GT1JDRV9QVFJBQ0VcXG4gIDQwOlxcdFxcdGJvb2wgXFxcIlJlcXVpcmUgYWN0aXZlIHB0cmFjZSgpIHVzZSBmb3IgYWNjZXNzIG92ZXJyaWRlXFxcIlxcbiAgNDE6XFx0XFx0aGVscFxcbiAgNDI6XFx0XFx0ICBUaGlzIGFsbG93cyAvcHJvYy9waWQvbWVtIGFjY2Vzc2VzIHRvIG92ZXJyaWRlIG1lbW9yeSBtYXBwaW5nXFxuICA0MzpcXHRcXHQgIHBlcm1pc3Npb25zIGZvciBhY3RpdmUgcHRyYWNlcnMgbGlrZSBnZGIuXFxuICA0NDpcXHRcXG4gIDQ1OlxcdGNvbmZpZyBQUk9DX01FTV9OT19GT1JDRVxcbiAgNDY6XFx0XFx0Ym9vbCBcXFwiTmV2ZXJcXFwiXFxuICA0NzpcXHRcXHRoZWxwXFxuICA0ODpcXHRcXHQgIE5ldmVyIG92ZXJyaWRlIG1lbW9yeSBtYXBwaW5nIHBlcm1pc3Npb25zXFxuICA0OTpcXHRcXG4gIDUwOlxcdGVuZGNob2ljZVxcbiAgNTE6XFx0XFxuICA1MjpcXHRjb25maWcgTVNFQUxfU1lTVEVNX01BUFBJTkdTXFxuICA1MzpcXHRcXHRib29sIFxcXCJtc2VhbCBzeXN0ZW0gbWFwcGluZ3NcXFwiXFxuICA1NDpcXHRcXHRkZXBlbmRzIG9uIDY0QklUXFxuICA1NTpcXHRcXHRkZXBlbmRzIG9uIEFSQ0hfU1VQUE9SVFNfTVNFQUxfU1lTVEVNX01BUFBJTkdTXFxuICA1NjpcXHRcXHRkZXBlbmRzIG9uICFDSEVDS1BPSU5UX1JFU1RPUkVcXG4gIDU3OlxcdFxcdGhlbHBcXG4gIDU4OlxcdFxcdCAgQXBwbHkgbXNlYWwgb24gc3lzdGVtIG1hcHBpbmdzLlxcbiAgNTk6XFx0XFx0ICBUaGUgc3lzdGVtIG1hcHBpbmdzIGluY2x1ZGVzIHZkc28sIHZ2YXIsIHZ2YXJfdmNsb2NrLFxcbiAgNjA6XFx0XFx0ICB2ZWN0b3JzIChhcm0gY29tcGF0LW1vZGUpLCBzaWdwYWdlIChhcm0gY29tcGF0LW1vZGUpLCB1cHJvYmVzLlxcbiAgNjE6XFx0XFxuICA2MjpcXHRcXHQgIEEgNjQtYml0IGtlcm5lbCBpcyByZXF1aXJlZCBmb3IgdGhlIG1lbW9yeSBzZWFsaW5nIGZlYXR1cmUuXFxuICA2MzpcXHRcXHQgIE5vIHNwZWNpZmljIGhhcmR3YXJlIGZlYXR1cmVzIGZyb20gdGhlIENQVSBhcmUgbmVlZGVkLlxcbiAgNjQ6XFx0XFxuICA2NTpcXHRcXHQgIFdBUk5JTkc6IFRoaXMgZmVhdHVyZSBicmVha3MgcHJvZ3JhbXMgd2hpY2ggcmVseSBvbiByZWxvY2F0aW5nXFxuICA2NjpcXHRcXHQgIG9yIHVubWFwcGluZyBzeXN0ZW0gbWFwcGluZ3MuIEtub3duIGJyb2tlbiBzb2Z0d2FyZSBhdCB0aGUgdGltZVxcbiAgNjc6XFx0XFx0ICBvZiB3cml0aW5nIGluY2x1ZGVzIENIRUNLUE9JTlRfUkVTVE9SRSwgVU1MLCBnVmlzb3IsIHJyLiBUaGVyZWZvcmVcXG4gIDY4OlxcdFxcdCAgdGhpcyBjb25maWcgY2FuJ3QgYmUgZW5hYmxlZCB1bml2ZXJzYWxseS5cXG4gIDY5OlxcdFxcbiAgNzA6XFx0XFx0ICBGb3IgY29tcGxldGUgZGVzY3JpcHRpb25zIG9mIG1lbW9yeSBzZWFsaW5nLCBwbGVhc2Ugc2VlXFxuICA3MTpcXHRcXHQgIERvY3VtZW50YXRpb24vdXNlcnNwYWNlLWFwaS9tc2VhbC5yc3RcXG4gIDcyOlxcdFxcbiAgNzM6XFx0Y29uZmlnIFNFQ1VSSVRZXFxuICA3NDpcXHRcXHRib29sIFxcXCJFbmFibGUgZGlmZmVyZW50IHNlY3VyaXR5IG1vZGVsc1xcXCJcXG4gIDc1OlxcdFxcdGRlcGVuZHMgb24gU1lTRlNcXG4gIDc2OlxcdFxcdGRlcGVuZHMgb24gTVVMVElVU0VSXFxuICA3NzpcXHRcXHRoZWxwXFxuICA3ODpcXHRcXHQgIFRoaXMgYWxsb3dzIHlvdSB0byBjaG9vc2UgZGlmZmVyZW50IHNlY3VyaXR5IG1vZHVsZXMgdG8gYmVcXG4gIDc5OlxcdFxcdCAgY29uZmlndXJlZCBpbnRvIHlvdXIga2VybmVsLlxcbiAgODA6XFx0XFxuICA4MTpcXHRcXHQgIElmIHRoaXMgb3B0aW9uIGlzIG5vdCBzZWxlY3RlZCwgdGhlIGRlZmF1bHQgTGludXggc2VjdXJpdHlcXG4gIDgyOlxcdFxcdCAgbW9kZWwgd2lsbCBiZSB1c2VkLlxcbiAgODM6XFx0XFxuICA4NDpcXHRcXHQgIElmIHlvdSBhcmUgdW5zdXJlIGhvdyB0byBhbnN3ZXIgdGhpcyBxdWVzdGlvbiwgYW5zd2VyIE4uXFxuICA4NTpcXHRcXG4gIDg2OlxcdGNvbmZpZyBIQVNfU0VDVVJJVFlfQVVESVRcXG4gIDg3OlxcdFxcdGRlZl9ib29sIHlcXG4gIDg4OlxcdFxcdGRlcGVuZHMgb24gQVVESVRcXG4gIDg5OlxcdFxcdGRlcGVuZHMgb24gU0VDVVJJVFlcXG4gIDkwOlxcdFxcbiAgOTE6XFx0Y29uZmlnIFNFQ1VSSVRZRlNcXG4gIDkyOlxcdFxcdGJvb2wgXFxcIkVuYWJsZSB0aGUgc2VjdXJpdHlmcyBmaWxlc3lzdGVtXFxcIlxcbiAgOTM6XFx0XFx0aGVscFxcbiAgOTQ6XFx0XFx0ICBUaGlzIHdpbGwgYnVpbGQgdGhlIHNlY3VyaXR5ZnMgZmlsZXN5c3RlbS4gIEl0IGlzIGN1cnJlbnRseSB1c2VkIGJ5XFxuICA5NTpcXHRcXHQgIHZhcmlvdXMgc2VjdXJpdHkgbW9kdWxlcyAoQXBwQXJtb3IsIElNQSwgU2FmZVNldElELCBUT01PWU8sIFRQTSkuXFxuICA5NjpcXHRcXG4gIDk3OlxcdFxcdCAgSWYgeW91IGFyZSB1bnN1cmUgaG93IHRvIGFuc3dlciB0aGlzIHF1ZXN0aW9uLCBhbnN3ZXIgTi5cXG4gIDk4OlxcdFxcbiAgOTk6XFx0Y29uZmlnIFNFQ1VSSVRZX05FVFdPUktcXG4gMTAwOlxcdFxcdGJvb2wgXFxcIlNvY2tldCBhbmQgTmV0d29ya2luZyBTZWN1cml0eSBIb29rc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMjI6MjM6MzIuMDYxODA1ODUzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzQ3OTM4NTQ1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgU0VMaW51eCBLY29uZmlnKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgYHNlY3VyaXR5L3NlbGludXgvS2NvbmZpZ2AgZmlsZS4gR2l2ZW4gbXkgZmFtaWxpYXJpdHkgd2l0aCB0aGUgU0VMaW51eCBlY29zeXN0ZW0gYW5kIGtlcm5lbCBjb25maWd1cmF0aW9uLCB0aGlzIHNob3VsZCBiZSBhIGZhaXJseSBzdHJhaWdodGZvcndhcmQgcHJvY2Vzcy4gSSBleHBlY3QgdG8gZmluZCB0aGUgY29yZSBvcHRpb25zIGZvciBlbmFibGluZywgZGlzYWJsaW5nLCBhbmQgY29uZmlndXJpbmcgU0VMaW51eCB3aXRoaW4gdGhlIGtlcm5lbCwgYWxvbmcgd2l0aCB0aGUgZGVwZW5kZW5jaWVzIGFuZCByZWxhdGlvbnNoaXBzIHRvIG90aGVyIHNlY3VyaXR5IG1vZHVsZXMuIEknbGwgYmUgcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW46XG5cbiogICAqKk92ZXJhbGwgRW5hYmxlbWVudDoqKiBUaGUgdG9wLWxldmVsIGBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWGAgb3B0aW9uLCBuYXR1cmFsbHkuIEkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyBob3cgaXQncyBkZWZpbmVkIGFuZCBpZiB0aGVyZSBhcmUgYW55IGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcy5cbiogICAqKlBvbGljeSBDb250cm9sOioqIEknbGwgYmUgbG9va2luZyBmb3IgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgY29udHJvbCBhc3BlY3RzIG9mIHRoZSBkZWZhdWx0IHBvbGljeSBhbmQgcG9saWN5IGxvYWRpbmcuIFRoaXMgbWlnaHQgaW5jbHVkZSBvcHRpb25zIGZvciBlbmZvcmNpbmcgb3IgcGVybWlzc2l2ZSBtb2RlcywgYW5kIHdoZXRoZXIgaXQgaGFzIGR5bmFtaWMgbG9hZGluZyBjYXBhYmlsaXRpZXMuXG4qICAgKipBZHZhbmNlZCBGZWF0dXJlczoqKiBEZXBlbmRpbmcgb24gdGhlIGtlcm5lbCB2ZXJzaW9uIGFuZCBjb25maWd1cmF0aW9uLCBJJ2xsIHNjYW4gZm9yIGFueSBhZHZhbmNlZCBmZWF0dXJlcyBkZWZpbmVkLCBzdWNoIGFzIE1MUy9NQ1Mgc3VwcG9ydCBvciBvdGhlciBzcGVjaWFsaXplZCBTRUxpbnV4IGNhcGFiaWxpdGllcyB0aGF0IG1heSBuZWVkIHRvIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQuXG4qICAgKipJbnRlcmFjdGlvbnM6KiogSSdsbCBhbHNvIGdsYW5jZSBhdCB0aGUgc3Vycm91bmRpbmcgY29uZmlndXJhdGlvbiBzcGFjZSB0byBlbnN1cmUgY29tcGF0aWJpbGl0eSwgZXNwZWNpYWxseSB3aXRoIG90aGVyIHNlY3VyaXR5IG1vZHVsZXMgKGUuZy4sIElNQSwgTFNNcykuIFRoZSByZWxhdGlvbnNoaXBzIGFyZSBhbHdheXMgaW50ZXJlc3RpbmcuXG5cbkVzc2VudGlhbGx5LCBJJ20gc2V0dGluZyB0aGUgc3RhZ2UuIFRoaXMgaW5pdGlhbCBleGFtaW5hdGlvbiBvZiBgS2NvbmZpZ2Agd2lsbCBwcm92aWRlIGEgZm91bmRhdGlvbmFsIHVuZGVyc3RhbmRpbmcgb2YgaG93IFNFTGludXggaXMgaW50ZWdyYXRlZCBpbnRvIHRoaXMgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb24uIEl0J2xsIGRpcmVjdCBteSBhdHRlbnRpb24gdG8gb3RoZXIgYXNwZWN0cyBJIG1pZ2h0IG5lZWQgdG8gY29uc2lkZXIsIG9yIHRvIG90aGVyIHJlbGF0ZWQgZmlsZXMgdGhhdCBuZWVkIGF0dGVudGlvbi4gT25jZSBJIGhhdmUgYSBnb29kIGdyYXNwIG9mIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIEkgY2FuIG1vdmUgb24gdG8gdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBhbmQgYXNzZXNzIGl0cyBpbXBhY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzY1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQyMjoyMzozNS41NDExOTQ5NjlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDgzNTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwic2VjdXJpdHkvc2VsaW51eC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgU0VDVVJJVFlfU0VMSU5VWFxcbiAgIDM6XFx0XFx0Ym9vbCBcXFwiU0VMaW51eCBTdXBwb3J0XFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBTRUNVUklUWV9ORVRXT1JLIFxcdTAwMjZcXHUwMDI2IEFVRElUIFxcdTAwMjZcXHUwMDI2IE5FVCBcXHUwMDI2XFx1MDAyNiBJTkVUXFxuICAgNTpcXHRcXHRzZWxlY3QgTkVUV09SS19TRUNNQVJLXFxuICAgNjpcXHRcXHRkZWZhdWx0IG5cXG4gICA3OlxcdFxcdGhlbHBcXG4gICA4OlxcdFxcdCAgVGhpcyBzZWxlY3RzIFNlY3VyaXR5LUVuaGFuY2VkIExpbnV4IChTRUxpbnV4KS5cXG4gICA5OlxcdFxcdCAgWW91IHdpbGwgYWxzbyBuZWVkIGEgcG9saWN5IGNvbmZpZ3VyYXRpb24gYW5kIGEgbGFiZWxlZCBmaWxlc3lzdGVtLlxcbiAgMTA6XFx0XFx0ICBJZiB5b3UgYXJlIHVuc3VyZSBob3cgdG8gYW5zd2VyIHRoaXMgcXVlc3Rpb24sIGFuc3dlciBOLlxcbiAgMTE6XFx0XFxuICAxMjpcXHRjb25maWcgU0VDVVJJVFlfU0VMSU5VWF9CT09UUEFSQU1cXG4gIDEzOlxcdFxcdGJvb2wgXFxcIlNFTGludXggYm9vdCBwYXJhbWV0ZXJcXFwiXFxuICAxNDpcXHRcXHRkZXBlbmRzIG9uIFNFQ1VSSVRZX1NFTElOVVhcXG4gIDE1OlxcdFxcdGRlZmF1bHQgblxcbiAgMTY6XFx0XFx0aGVscFxcbiAgMTc6XFx0XFx0ICBUaGlzIG9wdGlvbiBhZGRzIGEga2VybmVsIHBhcmFtZXRlciAnc2VsaW51eCcsIHdoaWNoIGFsbG93cyBTRUxpbnV4XFxuICAxODpcXHRcXHQgIHRvIGJlIGRpc2FibGVkIGF0IGJvb3QuICBJZiB0aGlzIG9wdGlvbiBpcyBzZWxlY3RlZCwgU0VMaW51eFxcbiAgMTk6XFx0XFx0ICBmdW5jdGlvbmFsaXR5IGNhbiBiZSBkaXNhYmxlZCB3aXRoIHNlbGludXg9MCBvbiB0aGUga2VybmVsXFxuICAyMDpcXHRcXHQgIGNvbW1hbmQgbGluZS4gIFRoZSBwdXJwb3NlIG9mIHRoaXMgb3B0aW9uIGlzIHRvIGFsbG93IGEgc2luZ2xlXFxuICAyMTpcXHRcXHQgIGtlcm5lbCBpbWFnZSB0byBiZSBkaXN0cmlidXRlZCB3aXRoIFNFTGludXggYnVpbHQgaW4sIGJ1dCBub3RcXG4gIDIyOlxcdFxcdCAgbmVjZXNzYXJpbHkgZW5hYmxlZC5cXG4gIDIzOlxcdFxcbiAgMjQ6XFx0XFx0ICBJZiB5b3UgYXJlIHVuc3VyZSBob3cgdG8gYW5zd2VyIHRoaXMgcXVlc3Rpb24sIGFuc3dlciBOLlxcbiAgMjU6XFx0XFxuICAyNjpcXHRjb25maWcgU0VDVVJJVFlfU0VMSU5VWF9ERVZFTE9QXFxuICAyNzpcXHRcXHRib29sIFxcXCJTRUxpbnV4IERldmVsb3BtZW50IFN1cHBvcnRcXFwiXFxuICAyODpcXHRcXHRkZXBlbmRzIG9uIFNFQ1VSSVRZX1NFTElOVVhcXG4gIDI5OlxcdFxcdGRlZmF1bHQgeVxcbiAgMzA6XFx0XFx0aGVscFxcbiAgMzE6XFx0XFx0ICBUaGlzIGVuYWJsZXMgdGhlIGRldmVsb3BtZW50IHN1cHBvcnQgb3B0aW9uIG9mIFNFTGludXgsXFxuICAzMjpcXHRcXHQgIHdoaWNoIGlzIHVzZWZ1bCBmb3IgZXhwZXJpbWVudGluZyB3aXRoIFNFTGludXggYW5kIGRldmVsb3BpbmdcXG4gIDMzOlxcdFxcdCAgcG9saWNpZXMuICBJZiB1bnN1cmUsIHNheSBZLiAgV2l0aCB0aGlzIG9wdGlvbiBlbmFibGVkLCB0aGVcXG4gIDM0OlxcdFxcdCAga2VybmVsIHdpbGwgc3RhcnQgaW4gcGVybWlzc2l2ZSBtb2RlIChsb2cgZXZlcnl0aGluZywgZGVueSBub3RoaW5nKVxcbiAgMzU6XFx0XFx0ICB1bmxlc3MgeW91IHNwZWNpZnkgZW5mb3JjaW5nPTEgb24gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUuICBZb3VcXG4gIDM2OlxcdFxcdCAgY2FuIGludGVyYWN0aXZlbHkgdG9nZ2xlIHRoZSBrZXJuZWwgYmV0d2VlbiBlbmZvcmNpbmcgbW9kZSBhbmRcXG4gIDM3OlxcdFxcdCAgcGVybWlzc2l2ZSBtb2RlIChpZiBwZXJtaXR0ZWQgYnkgdGhlIHBvbGljeSkgdmlhXFxuICAzODpcXHRcXHQgIC9zeXMvZnMvc2VsaW51eC9lbmZvcmNlLlxcbiAgMzk6XFx0XFxuICA0MDpcXHRjb25maWcgU0VDVVJJVFlfU0VMSU5VWF9BVkNfU1RBVFNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMjI6MjM6MzUuNTQxMzA1MTJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMTk3OTgxMTA2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgU0VMaW51eCBGaWxlIFByb3RlY3Rpb24gSG9vayBNb2RpZmljYXRpb25zKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBjaGFuZ2VzIG1hZGUgd2l0aGluIGBzZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZXNlIG1vZGlmaWNhdGlvbnMsIHNvIEknbGwgZ28gdGhyb3VnaCB0aGUgZGlmZiBjYXJlZnVsbHkuIEl0IGxvb2tzIGxpa2Ugd2UgaGF2ZSBhIHNldCBvZiBjb3JlIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiB0d2Vha2VkLlxuXG5GaXJzdCwgSSBzZWUgc2V2ZXJhbCBoZWxwZXIgZnVuY3Rpb25zIGhhdmUgYmVlbiBtb2RpZmllZDogYGlub2RlX3NpZF9oYXNfcGVybWAsIGBpbm9kZV9oYXNfcGVybWAsIGBzZWxpbnV4X2ZpbGVfdXNlcl9zaWRgLCBgZmlsZV9tYXBfcHJvdF90b19hdmAsIGBiYWNraW5nX21vdW50ZXJzX2hhc19wZXJtYCwgYW5kIGBfX2ZpbGVfbWFwX3Byb3RfY2hlY2tgLiBUaGVzZSBhcmUgdGhlIGludGVybmFsIGJ1aWxkaW5nIGJsb2NrcyBhbmQgYW55IG1vZGlmaWNhdGlvbiBoZXJlIHBvdGVudGlhbGx5IGhhcyB3aWRlIGltcGFjdHMuXG5cbkNydWNpYWxseSwgSSBhbHNvIHNlZSB0d28gTFNNIGhvb2tzIGJlaW5nIG1vZGlmaWVkOiBgc2VsaW51eF9iYWNraW5nX2ZpbGVfYWxsb2NgIGFuZCBgc2VsaW51eF9iYWNraW5nX2ZpbGVfZnJlZWAsIGFzIHdlbGwgYXMgYHNlbGludXhfZmlsZV9tcHJvdGVjdGAuIFRoaXMgaXMgd2hlcmUgdGhlIFNFTGludXggcG9saWN5IGVuZm9yY2VtZW50IGlzIGludGVncmF0ZWQgaW50byB0aGUga2VybmVsJ3MgZmlsZSBwcm90ZWN0aW9uIG1lY2hhbmlzbXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBob29rcyBhcmUgZGVmaW5lZCBhbmQgY2FsbGVkIHdpdGhpbiB0aGUgTFNNIGZyYW1ld29yayBpdHNlbGYgYW5kIGhvdyBTRUxpbnV4IGlzIHVzaW5nIHRoZW0uXG5cblRoZXJlZm9yZSwgbXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgYHNlY3VyaXR5L3NlY3VyaXR5LmNgLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoZSBjb3JyZXNwb25kaW5nIGRlZmluaXRpb25zIGFuZCB1c2FnZSBvZiB0aGUgYHNlY3VyaXR5X2ZpbGVfbXByb3RlY3RgLCBgc2VjdXJpdHlfYmFja2luZ19maWxlX2FsbG9jYCwgYW5kIGBzZWN1cml0eV9iYWNraW5nX2ZpbGVfZnJlZWAgZnVuY3Rpb25zLiBUaGlzIHdpbGwgY2xhcmlmeSBob3cgdGhlIFNFTGludXggaG9va3MgSSBvYnNlcnZlZCBpbiBgaG9va3MuY2AgYXJlIGFjdHVhbGx5IHdpcmVkIGludG8gdGhlIGJyb2FkZXIgc2VjdXJpdHkgZnJhbWV3b3JrLiBJdOKAmXMgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgY29udGV4dCBvZiB0aGVzZSBtb2RpZmljYXRpb25zLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSB1bmRlcmx5aW5nIExTTSBpbXBsZW1lbnRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI3OTEsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQyMjoyMzo0Ny41MjExMjAxNjhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4NDI2MzYwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWN1cml0eV9iYWNraW5nX2ZpbGVfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInNlY3VyaXR5L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJzZWN1cml0eS9zZWN1cml0eS5jPTI0MzM9dm9pZCBzZWN1cml0eV9maWxlX2ZyZWUoc3RydWN0IGZpbGUgKmZpbGUpXFxuLS1cXG5zZWN1cml0eS9zZWN1cml0eS5jLTI0NDYtLyoqXFxuc2VjdXJpdHkvc2VjdXJpdHkuYzoyNDQ3OiAqIHNlY3VyaXR5X2JhY2tpbmdfZmlsZV9hbGxvYygpIC0gQWxsb2NhdGUgYW5kIHNldHVwIGEgYmFja2luZyBmaWxlIGJsb2JcXG5zZWN1cml0eS9zZWN1cml0eS5jLTI0NDgtICogQGJhY2tpbmdfZmlsZTogdGhlIGJhY2tpbmcgZmlsZVxcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0yNDYyLSAqL1xcbnNlY3VyaXR5L3NlY3VyaXR5LmM6MjQ2MzppbnQgc2VjdXJpdHlfYmFja2luZ19maWxlX2FsbG9jKHN0cnVjdCBmaWxlICpiYWNraW5nX2ZpbGUsXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0yNDY0LVxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBmaWxlICp1c2VyX2ZpbGUpXFxuLS1cXG5zZWN1cml0eS9zZWN1cml0eS5jLTI0NzItXFx0aWYgKHVubGlrZWx5KHJjKSlcXG5zZWN1cml0eS9zZWN1cml0eS5jOjI0NzM6XFx0XFx0c2VjdXJpdHlfYmFja2luZ19maWxlX2ZyZWUoYmFja2luZ19maWxlKTtcXG5zZWN1cml0eS9zZWN1cml0eS5jLTI0NzQtXFxuLS1cXG5zZWN1cml0eS9zZWN1cml0eS5jLTI0NzgtLyoqXFxuc2VjdXJpdHkvc2VjdXJpdHkuYzoyNDc5OiAqIHNlY3VyaXR5X2JhY2tpbmdfZmlsZV9mcmVlKCkgLSBGcmVlIGEgYmFja2luZyBmaWxlIGJsb2JcXG5zZWN1cml0eS9zZWN1cml0eS5jLTI0ODAtICogQGJhY2tpbmdfZmlsZTogdGhlIGJhY2tpbmcgZmlsZVxcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0yNDg0LSAqL1xcbnNlY3VyaXR5L3NlY3VyaXR5LmM6MjQ4NTp2b2lkIHNlY3VyaXR5X2JhY2tpbmdfZmlsZV9mcmVlKHN0cnVjdCBmaWxlICpiYWNraW5nX2ZpbGUpXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0yNDg2LXtcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz0zOTA1PXN0YXRpYyB2b2lkIHNlbGludXhfYmFja2luZ19maWxlX2ZyZWUoc3RydWN0IGZpbGUgKmJhY2tpbmdfZmlsZSlcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zOTA4LVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzozOTA5OlxcdC8qIHNlY3VyaXR5X2JhY2tpbmdfZmlsZV9mcmVlKCkgbWF5IGJlIGNhbGxlZCB0d2ljZSBhZnRlciBhbiBlcnJvciAqL1xcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zOTEwLVxcdGlmICghYmFja2luZ19maWxlX3NlY3VyaXR5KGJhY2tpbmdfZmlsZSkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDIyOjIzOjQ4LjMwNTM4ODI1NloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjI4ODgwODExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhvc2UgZnVuY3Rpb24gbmFtZXMsIGV4cHJlc3NlZCBhcyB5b3VyIHJlcXVlc3Q6XG5cbioqQW5hbHl6aW5nIFNlY3VyaXR5IEJhY2tpbmcgRmlsZSBPcGVyYXRpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb24gbmFtZXM6IGBzZWN1cml0eV9iYWNraW5nX2ZpbGVfYWxsb2NgLCBgc2VjdXJpdHlfYmFja2luZ19maWxlX2ZyZWVgLCBhbmQgYHNlY3VyaXR5X2ZpbGVfbXByb3RlY3RgLiBJbW1lZGlhdGVseSwgSSBzZWUgYSBjbGVhciByZWxhdGlvbnNoaXAuIFRoZXkgYWxsIGRlYWwgd2l0aCwgYXMgdGhlIG5hbWVzIHN1Z2dlc3QsIHNlY3VyaXR5LXJlbGF0ZWQgaW50ZXJhY3Rpb25zIHdpdGggYmFja2luZyBmaWxlcywgd2hpY2ggbGlrZWx5IHJlbGF0ZXMgdG8gZmlsZS1iYWNrZWQgbWVtb3J5IHJlZ2lvbnMgYW5kIHRoZWlyIHNlY3VyaXR5IGNvbnRleHRzLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJ20gYXNzdW1pbmcgd2UgYXJlIGRlYWxpbmcgd2l0aCBzb21lIGZvcm0gb2YgbWVtb3J5IHByb3RlY3Rpb24gdGllZCB0byBmaWxlIG1hcHBpbmcgb3IgcG9zc2libHkgc2FuZGJveGluZy5cblxuTXkgbmV4dCBzdGVwIGlzIGNsZWFyOiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBncmFwaC4gSSdtIGdvaW5nIHRvIGRldGVybWluZSB3aGljaCBmdW5jdGlvbnMgYXJlICpjYWxsaW5nKiBgc2VjdXJpdHlfYmFja2luZ19maWxlX2FsbG9jYCBhbmQgYHNlY3VyaXR5X2JhY2tpbmdfZmlsZV9mcmVlYC4gVHJhY2luZyB0aGVzZSBjYWxscyB3aWxsIGdpdmUgbWUgdmFsdWFibGUgY29udGV4dC4gVW5kZXJzdGFuZGluZyB0aGUgY29kZSBwYXRocyB0aGF0ICp1c2UqIHRoZSBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIGZ1bmN0aW9ucyB3aWxsIHJldmVhbCB0aGUgc3BlY2lmaWMgc2VjdXJpdHkgY29uY2VybnMgYW5kIHRoZSBvdmVyYWxsIG9wZXJhdGlvbmFsIHBhdHRlcm5zIHN1cnJvdW5kaW5nIHRoZSBiYWNraW5nIGZpbGUgc2VjdXJpdHkgbWVjaGFuaXNtLiBUaGlzIHdpbGwgbGlrZWx5IHNob3cgdGhlIGluaXRpYWxpemF0aW9uIGFuZCBkZXN0cnVjdGlvbiBwcm9jZXNzIGZvciBzZWN1cml0eSBjb250ZXh0cyBhc3NvY2lhdGVkIHdpdGggdGhlIGJhY2tpbmcgZmlsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4ODksIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQyMjoyMzo1MS41MzQyNzMxMjdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMDc5ODI2NzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VjdXJpdHlfYmFja2luZ19maWxlX1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9maWxlX3RhYmxlLmM9ODg9c3RhdGljIGlubGluZSB2b2lkIGJhY2tpbmdfZmlsZV9mcmVlKHN0cnVjdCBiYWNraW5nX2ZpbGUgKmZmKVxcbmZzL2ZpbGVfdGFibGUuYy04OS17XFxuZnMvZmlsZV90YWJsZS5jOjkwOlxcdHNlY3VyaXR5X2JhY2tpbmdfZmlsZV9mcmVlKFxcdTAwMjZmZi1cXHUwMDNlZmlsZSk7XFxuZnMvZmlsZV90YWJsZS5jLTkxLVxcdHBhdGhfcHV0KFxcdTAwMjZmZi1cXHUwMDNldXNlcl9wYXRoKTtcXG4tLVxcbmZzL2ZpbGVfdGFibGUuYz0zMTE9c3RhdGljIGludCBpbml0X2JhY2tpbmdfZmlsZShzdHJ1Y3QgYmFja2luZ19maWxlICpmZixcXG4tLVxcbmZzL2ZpbGVfdGFibGUuYy0zMTUtXFx0YmFja2luZ19maWxlX3NldF9zZWN1cml0eShcXHUwMDI2ZmYtXFx1MDAzZWZpbGUsIE5VTEwpO1xcbmZzL2ZpbGVfdGFibGUuYzozMTY6XFx0cmV0dXJuIHNlY3VyaXR5X2JhY2tpbmdfZmlsZV9hbGxvYyhcXHUwMDI2ZmYtXFx1MDAzZWZpbGUsIHVzZXJfZmlsZSk7XFxuZnMvZmlsZV90YWJsZS5jLTMxNy19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5Lmg9NDc0PXZvaWQgc2VjdXJpdHlfZmlsZV9mcmVlKHN0cnVjdCBmaWxlICpmaWxlKTtcXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5Lmg6NDc1OmludCBzZWN1cml0eV9iYWNraW5nX2ZpbGVfYWxsb2Moc3RydWN0IGZpbGUgKmJhY2tpbmdfZmlsZSxcXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgtNDc2LVxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBmaWxlICp1c2VyX2ZpbGUpO1xcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaDo0Nzc6dm9pZCBzZWN1cml0eV9iYWNraW5nX2ZpbGVfZnJlZShzdHJ1Y3QgZmlsZSAqYmFja2luZ19maWxlKTtcXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgtNDc4LWludCBzZWN1cml0eV9maWxlX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5Lmg9MTE0OD1zdGF0aWMgaW5saW5lIHZvaWQgc2VjdXJpdHlfZmlsZV9mcmVlKHN0cnVjdCBmaWxlICpmaWxlKVxcbi0tXFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTExNTAtXFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oOjExNTE6c3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfYmFja2luZ19maWxlX2FsbG9jKHN0cnVjdCBmaWxlICpiYWNraW5nX2ZpbGUsXFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTExNTItXFx0XFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGZpbGUgKnVzZXJfZmlsZSlcXG4tLVxcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaC0xMTU2LVxcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaDoxMTU3OnN0YXRpYyBpbmxpbmUgdm9pZCBzZWN1cml0eV9iYWNraW5nX2ZpbGVfZnJlZShzdHJ1Y3QgZmlsZSAqYmFja2luZ19maWxlKVxcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaC0xMTU4LXsgfVxcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYz0yNDMzPXZvaWQgc2VjdXJpdHlfZmlsZV9mcmVlKHN0cnVjdCBmaWxlICpmaWxlKVxcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0yNDQ2LS8qKlxcbnNlY3VyaXR5L3NlY3VyaXR5LmM6MjQ0NzogKiBzZWN1cml0eV9iYWNraW5nX2ZpbGVfYWxsb2MoKSAtIEFsbG9jYXRlIGFuZCBzZXR1cCBhIGJhY2tpbmcgZmlsZSBibG9iXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0yNDQ4LSAqIEBiYWNraW5nX2ZpbGU6IHRoZSBiYWNraW5nIGZpbGVcXG4tLVxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMjQ2Mi0gKi9cXG5zZWN1cml0eS9zZWN1cml0eS5jOjI0NjM6aW50IHNlY3VyaXR5X2JhY2tpbmdfZmlsZV9hbGxvYyhzdHJ1Y3QgZmlsZSAqYmFja2luZ19maWxlLFxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMjQ2NC1cXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgZmlsZSAqdXNlcl9maWxlKVxcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0yNDcyLVxcdGlmICh1bmxpa2VseShyYykpXFxuc2VjdXJpdHkvc2VjdXJpdHkuYzoyNDczOlxcdFxcdHNlY3VyaXR5X2JhY2tpbmdfZmlsZV9mcmVlKGJhY2tpbmdfZmlsZSk7XFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0yNDc0LVxcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0yNDc4LS8qKlxcbnNlY3VyaXR5L3NlY3VyaXR5LmM6MjQ3OTogKiBzZWN1cml0eV9iYWNraW5nX2ZpbGVfZnJlZSgpIC0gRnJlZSBhIGJhY2tpbmcgZmlsZSBibG9iXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0yNDgwLSAqIEBiYWNraW5nX2ZpbGU6IHRoZSBiYWNraW5nIGZpbGVcXG4tLVxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMjQ4NC0gKi9cXG5zZWN1cml0eS9zZWN1cml0eS5jOjI0ODU6dm9pZCBzZWN1cml0eV9iYWNraW5nX2ZpbGVfZnJlZShzdHJ1Y3QgZmlsZSAqYmFja2luZ19maWxlKVxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMjQ4Ni17XFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9MzkwNT1zdGF0aWMgdm9pZCBzZWxpbnV4X2JhY2tpbmdfZmlsZV9mcmVlKHN0cnVjdCBmaWxlICpiYWNraW5nX2ZpbGUpXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzkwOC1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6MzkwOTpcXHQvKiBzZWN1cml0eV9iYWNraW5nX2ZpbGVfZnJlZSgpIG1heSBiZSBjYWxsZWQgdHdpY2UgYWZ0ZXIgYW4gZXJyb3IgKi9cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzkxMC1cXHRpZiAoIWJhY2tpbmdfZmlsZV9zZWN1cml0eShiYWNraW5nX2ZpbGUpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQyMjoyMzo1My44NDIyNjI4NzJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzAzMDg0NjE2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQmFja2luZyBGaWxlIFNlY3VyaXR5KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBmb2N1cyByaWdodCBub3cgaXMgb24gdGhlIHNlY3VyaXR5IGltcGxpY2F0aW9ucyBvZiBiYWNraW5nIGZpbGVzLCBlc3BlY2lhbGx5IHdpdGhpbiBzb21ldGhpbmcgbGlrZSBvdmVybGF5ZnMuIEkgc2VlIHRoYXQgYGJhY2tpbmdfZmlsZV9hbGxvY2AgYW5kIGBiYWNraW5nX2ZpbGVfZnJlZWAgYXJlIHRoZSBrZXkgZW50cnkgcG9pbnRzOyB0aGV5J3JlIHRoZSBob29rcyB3aGVuIGJhY2tpbmcgZmlsZXMgYXJlIG9wZW5lZCBhbmQgcmVsZWFzZWQsIGhhbmRsaW5nIHRoZSBsaWZlY3ljbGUsIHBlcmhhcHMgdmlhIGBiYWNraW5nX2ZpbGVfb3Blbl9wdHJgIG9yIGBiYWNraW5nX3RtcGZpbGVfb3BlbmAuIENydWNpYWxseSwgd2hlbiBgbXByb3RlY3RgIGlzIGNhbGxlZCBvbiBhIG1lbW9yeSBtYXBwaW5nIHRoYXQgaW52b2x2ZXMgYSBiYWNraW5nIGZpbGUsIGBzZWxpbnV4X2ZpbGVfbXByb3RlY3RgIGlzIHRyaWdnZXJlZC4gVGhhdCB0ZWxscyBtZSBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGNhbGwgcGF0aHMgb2YgYHNlY3VyaXR5X2ZpbGVfbXByb3RlY3RgIGl0c2VsZi4gV2hlcmUgZWxzZSBpcyB0aGlzIHNlY3VyaXR5IGNoZWNrIGhhcHBlbmluZz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHdpZGVseSB0aGVzZSBwcm90ZWN0aW9ucyBhcmUgaW1wbGVtZW50ZWQgdG8gcHJvcGVybHkgYXNzZXNzIHRoZSBvdmVyYWxsIHNlY3VyaXR5IG9mIHRoZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MTYxLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDIyOjIzOjU2Ljg3MzExMjEzNloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI0MDA4ODY5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWN1cml0eV9maWxlX21wcm90ZWN0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvc2VjdXJpdHkuaD00ODY9aW50IHNlY3VyaXR5X21tYXBfYWRkcih1bnNpZ25lZCBsb25nIGFkZHIpO1xcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaDo0ODc6aW50IHNlY3VyaXR5X2ZpbGVfbXByb3RlY3Qoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgcmVxcHJvdCxcXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgtNDg4LVxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgcHJvdCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5Lmg9MTE4Nj1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9tbWFwX2FkZHIodW5zaWduZWQgbG9uZyBhZGRyKVxcbi0tXFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTExOTAtXFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oOjExOTE6c3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfZmlsZV9tcHJvdGVjdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgtMTE5Mi1cXHRcXHRcXHRcXHRcXHQgdW5zaWduZWQgbG9uZyByZXFwcm90LFxcbi0tXFxubW0vbXByb3RlY3QuYz04NzE9c3RhdGljIGludCBkb19tcHJvdGVjdF9wa2V5KHVuc2lnbmVkIGxvbmcgc3RhcnQsIHNpemVfdCBsZW4sXFxuLS1cXG5tbS9tcHJvdGVjdC5jLTk4Ny1cXG5tbS9tcHJvdGVjdC5jOjk4ODpcXHRcXHRlcnJvciA9IHNlY3VyaXR5X2ZpbGVfbXByb3RlY3Qodm1hLCByZXFwcm90LCBwcm90KTtcXG5tbS9tcHJvdGVjdC5jLTk4OS1cXHRcXHRpZiAoZXJyb3IpXFxuLS1cXG5zZWN1cml0eS9zZWN1cml0eS5jPTI2MTk9aW50IHNlY3VyaXR5X21tYXBfYWRkcih1bnNpZ25lZCBsb25nIGFkZHIpXFxuLS1cXG5zZWN1cml0eS9zZWN1cml0eS5jLTI2MjQtLyoqXFxuc2VjdXJpdHkvc2VjdXJpdHkuYzoyNjI1OiAqIHNlY3VyaXR5X2ZpbGVfbXByb3RlY3QoKSAtIENoZWNrIGlmIGNoYW5naW5nIG1lbW9yeSBwcm90ZWN0aW9ucyBpcyBhbGxvd2VkXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0yNjI2LSAqIEB2bWE6IG1lbW9yeSByZWdpb25cXG4tLVxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMjYzMy0gKi9cXG5zZWN1cml0eS9zZWN1cml0eS5jOjI2MzQ6aW50IHNlY3VyaXR5X2ZpbGVfbXByb3RlY3Qoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgcmVxcHJvdCxcXG5zZWN1cml0eS9zZWN1cml0eS5jLTI2MzUtXFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBwcm90KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQyMjoyMzo1OS4xMTMyMDY1MTJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTE2MjU5MTI2NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IFNFTGludXggQmFja2luZyBGaWxlIEhhbmRsaW5nKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIG11bHRpLWxheWVyIGJhY2tpbmcgZmlsZXMgd2l0aGluIFNFTGludXggcGVybWlzc2lvbnMgY2hlY2tzLCBzcGVjaWZpY2FsbHkgZHVyaW5nIGBtcHJvdGVjdGAgb3BlcmF0aW9ucy4gSXQncyBoYW5kbGluZyB0aGUgYWxsb2NhdGlvbiwgZGVhbGxvY2F0aW9uLCBhbmQgdHJhY2tpbmcgb2YgYGJhY2tpbmdfZmlsZV9zZWN1cml0eWAgc3RydWN0dXJlcywgaW5jbHVkaW5nIHRob3NlIHBlc2t5IGxheWVycy4gTG9va2luZyBhdCB0aGUgY29kZSwgaXQncyB0b3VjaGluZyBkeW5hbWljIG1lbW9yeSBhbGxvY2F0aW9uIChjcnVjaWFsISksIHBhdGggcmVmZXJlbmNlIGNvdW50aW5nLCBhbmQgcGVybWlzc2lvbiBjaGVja3Mgb24gYmFja2luZyBmaWxlcywgdGhlIHVzdWFsIHN1c3BlY3RzLCByaWdodD8gT3ZlcmxheUZTLCBFUk9GUyBzdGFja3MsIG5lc3RlZCBPdmVybGF5RlMg4oCTIHRoZSB3b3Jrcy5cblxuVGhlIGtleSBmdW5jdGlvbnMgYXJlIGBzZWxpbnV4X2JhY2tpbmdfZmlsZV9hbGxvY2AsIGBzZWxpbnV4X2JhY2tpbmdfZmlsZV9mcmVlYCwgYW5kIGBzZWxpbnV4X2ZpbGVfbXByb3RlY3RgLiBUaGVzZSBhbGwgbG9vayBpbnRlcmVzdGluZyBmb3IgZnV6emluZzogYHNlbGludXhfYmFja2luZ19maWxlX2FsbG9jYCBhbGxvY2F0ZXMgYW4gYXJyYXksIGNvcGllcyBleGlzdGluZyBsYXllcnMsIGFuZCBhcHBlbmRzIHRoZSBjdXJyZW50IG9uZSwgZ2V0dGluZyBwYXRoIHJlZmVyZW5jZXMuIFRoZW4sIGBzZWxpbnV4X2JhY2tpbmdfZmlsZV9mcmVlYCBmcmVlcyB0aGUgcGF0aHMgYW5kIHRoZSBhcnJheSBpdHNlbGYuIEZpbmFsbHksIGBzZWxpbnV4X2ZpbGVfbXByb3RlY3RgIGNhbGxzIGBiYWNraW5nX21vdW50ZXJzX2hhc19wZXJtYCwgd2hpY2ggaXMgY3J1Y2lhbCBmb3IgZGV0ZXJtaW5pbmcgbW91bnRlciBwZXJtaXNzaW9ucy5cblxuSXMgdGhpcyByZWFjaGFibGUgYW5kIHdvcnRoIHRoZSBlZmZvcnQ/IEFic29sdXRlbHkhIFRoaXMgaXMgY29yZSBTRUxpbnV4IGxvZ2ljLCBoYW5kbGluZyBmaWxlIGFuZCBtcHJvdGVjdCBwZXJtaXNzaW9uIGNoZWNrcywgYW5kIHJlZmVyZW5jZSB0cmFja2luZyBvbiBiYWNraW5nIGZpbGVzLiBJdCdzIGZ1bGx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLCBtYWtpbmcgaXQgYSBwcmltZSB0YXJnZXQuXG5cbk5vdywgbGV0J3MgbmFpbCBkb3duIHRoZSBgRm9jdXNTeW1ib2xzYC4gQWNjb3JkaW5nIHRvIHRoZSBpbnN0cnVjdGlvbnMsIHdlIHdhbnQgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucywgaWRlYWxseSBub24tc3RhdGljIGVudHJ5IHBvaW50cywgdG8gYXZvaWQgc2tld2luZyB0aGUgZnV6eiB0ZXN0IGRpc3RyaWJ1dGlvbi4gRm9yZ2V0IGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zLlxuXG5TbywgbGV0J3MgZGl2ZSBpbnRvIHRoZSBwYXRjaCdzIGZ1bmN0aW9ucy4gSSBzZWUgYHNlbGludXhfYmFja2luZ19maWxlX2FsbG9jYCwgYHNlbGludXhfYmFja2luZ19maWxlX2ZyZWVgLCBhbmQgYHNlbGludXhfZmlsZV9tcHJvdGVjdGAgaW4gYHNlY3VyaXR5L3NlbGludXgvaG9va3MuY2AsIGJ1dCB0aGV5J3JlIG1hcmtlZCBzdGF0aWMuIEhvd2V2ZXIsIHRoZXkncmUgcmVnaXN0ZXJlZCBpbiB0aGUgYHNlbGludXhfaG9va3NgIHRhYmxlIGFzIGBiYWNraW5nX2ZpbGVfYWxsb2NgLCBgYmFja2luZ19maWxlX2ZyZWVgLCBhbmQgYGZpbGVfbXByb3RlY3RgIHJlc3BlY3RpdmVseS5cblxuVGhlcmUgYXJlIGFsc28gYHNlY3VyaXR5X2JhY2tpbmdfZmlsZV9hbGxvY2AsIGBzZWN1cml0eV9iYWNraW5nX2ZpbGVfZnJlZWAsIGFuZCBgc2VjdXJpdHlfZmlsZV9tcHJvdGVjdGAgaW4gYHNlY3VyaXR5L3NlY3VyaXR5LmNgLCBidXQgSSBoYXZlIGEgZmVlbGluZyB0aGUgc3RhdGljLWRlY2xhcmVkIG9uZXMgYXJlIHRoZSBvbmVzIHdlIHdhbnQuIFNpbmNlIHRoZWlyIGFkZHJlc3NlcyBhcmUgdGFrZW4gaW4gdGhlIGBzZWxpbnV4X2hvb2tzYCB0YWJsZSwgdGhlIGNvbXBpbGVyIGNhbid0IGNvbXBsZXRlbHkgaW5saW5lIHRoZW0uIEknbSBwcmV0dHkgc3VyZSB0aGV5IHJldGFpbiB0aGVpciBzeW1ib2xzIGluIHZtbGludXguIFRoYXQncyBnb29kLiBBbmQgdGhlIGBzZWN1cml0eV9iYWNraW5nX2ZpbGVfYWxsb2NgLCBgc2VjdXJpdHlfYmFja2luZ19maWxlX2ZyZWVgLCBgc2VjdXJpdHlfZmlsZV9tcHJvdGVjdGAgaW4gYHNlY3VyaXR5L3NlY3VyaXR5LmNgIGFyZSB0aGUgbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMuXG5cblNvLCBpdCdzOlxuKiAgIGBzZWxpbnV4X2JhY2tpbmdfZmlsZV9hbGxvY2AgKHJlZ2lzdGVyZWQgYXMgYGJhY2tpbmdfZmlsZV9hbGxvY2ApXG4qICAgYHNlbGludXhfYmFja2luZ19maWxlX2ZyZWVgIChyZWdpc3RlcmVkIGFzIGBiYWNraW5nX2ZpbGVfZnJlZWApXG4qICAgYHNlbGludXhfZmlsZV9tcHJvdGVjdGAgKHJlZ2lzdGVyZWQgYXMgYGZpbGVfbXByb3RlY3RgKVxuKiAgIGBzZWN1cml0eV9iYWNraW5nX2ZpbGVfYWxsb2NgXG4qICAgYHNlY3VyaXR5X2JhY2tpbmdfZmlsZV9mcmVlYFxuKiAgIGBzZWN1cml0eV9maWxlX21wcm90ZWN0YFxuXG5XZSdsbCBhZGQgYm90aCBzZXRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTkyMiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkwOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQyMjoyNDoxMC43MzkxMjI2NDVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE4NTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcInNlY3VyaXR5L3NlY3VyaXR5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjQ0NSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjQ0NTpcXHRcXG4yNDQ2OlxcdC8qKlxcbjI0NDc6XFx0ICogc2VjdXJpdHlfYmFja2luZ19maWxlX2FsbG9jKCkgLSBBbGxvY2F0ZSBhbmQgc2V0dXAgYSBiYWNraW5nIGZpbGUgYmxvYlxcbjI0NDg6XFx0ICogQGJhY2tpbmdfZmlsZTogdGhlIGJhY2tpbmcgZmlsZVxcbjI0NDk6XFx0ICogQHVzZXJfZmlsZTogdGhlIGFzc29jaWF0ZWQgdXNlciB2aXNpYmxlIGZpbGVcXG4yNDUwOlxcdCAqXFxuMjQ1MTpcXHQgKiBBbGxvY2F0ZSBhIGJhY2tpbmcgZmlsZSBMU00gYmxvYiBhbmQgcGVyZm9ybSBhbnkgbmVjZXNzYXJ5IGluaXRpYWxpemF0aW9uIG9mXFxuMjQ1MjpcXHQgKiB0aGUgTFNNIGJsb2IuICBUaGVyZSB3aWxsIGJlIHNvbWUgb3BlcmF0aW9ucyB3aGVyZSB0aGUgTFNNIHdpbGwgbm90IGhhdmVcXG4yNDUzOlxcdCAqIGFjY2VzcyB0byBAdXNlcl9maWxlIGFmdGVyIHRoaXMgcG9pbnQsIHNvIGFueSBpbXBvcnRhbnQgc3RhdGUgYXNzb2NpYXRlZFxcbjI0NTQ6XFx0ICogd2l0aCBAdXNlcl9maWxlIHRoYXQgaXMgaW1wb3J0YW50IHRvIHRoZSBMU00gc2hvdWxkIGJlIGNhcHR1cmVkIGluIHRoZVxcbjI0NTU6XFx0ICogYmFja2luZyBmaWxlJ3MgTFNNIGJsb2IuXFxuMjQ1NjpcXHQgKlxcbjI0NTc6XFx0ICogTFNNJ3Mgc2hvdWxkIGF2b2lkIHRha2luZyBhIHJlZmVyZW5jZSB0byBAdXNlcl9maWxlIGluIHRoaXMgaG9vayBhcyBpdCB3aWxsXFxuMjQ1ODpcXHQgKiByZXN1bHQgaW4gcHJvYmxlbXMgbGF0ZXIgd2hlbiB0aGUgc3lzdGVtIGF0dGVtcHRzIHRvIGRyb3AvcHV0IHRoZSBmaWxlXFxuMjQ1OTpcXHQgKiByZWZlcmVuY2VzIGR1ZSB0byBhIGNpcmN1bGFyIGRlcGVuZGVuY3kuXFxuMjQ2MDpcXHQgKlxcbjI0NjE6XFx0ICogUmV0dXJuOiBSZXR1cm4gMCBpZiB0aGUgaG9vayBpcyBzdWNjZXNzZnVsLCBuZWdhdGl2ZSB2YWx1ZXMgb3RoZXJ3aXNlLlxcbjI0NjI6XFx0ICovXFxuMjQ2MzpcXHRpbnQgc2VjdXJpdHlfYmFja2luZ19maWxlX2FsbG9jKHN0cnVjdCBmaWxlICpiYWNraW5nX2ZpbGUsXFxuMjQ2NDpcXHRcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgZmlsZSAqdXNlcl9maWxlKVxcbjI0NjU6XFx0e1xcbjI0NjY6XFx0XFx0aW50IHJjO1xcbjI0Njc6XFx0XFxuMjQ2ODpcXHRcXHRyYyA9IGxzbV9iYWNraW5nX2ZpbGVfYWxsb2MoYmFja2luZ19maWxlKTtcXG4yNDY5OlxcdFxcdGlmIChyYylcXG4yNDcwOlxcdFxcdFxcdHJldHVybiByYztcXG4yNDcxOlxcdFxcdHJjID0gY2FsbF9pbnRfaG9vayhiYWNraW5nX2ZpbGVfYWxsb2MsIGJhY2tpbmdfZmlsZSwgdXNlcl9maWxlKTtcXG4yNDcyOlxcdFxcdGlmICh1bmxpa2VseShyYykpXFxuMjQ3MzpcXHRcXHRcXHRzZWN1cml0eV9iYWNraW5nX2ZpbGVfZnJlZShiYWNraW5nX2ZpbGUpO1xcbjI0NzQ6XFx0XFxuMjQ3NTpcXHRcXHRyZXR1cm4gcmM7XFxuMjQ3NjpcXHR9XFxuMjQ3NzpcXHRcXG4yNDc4OlxcdC8qKlxcbjI0Nzk6XFx0ICogc2VjdXJpdHlfYmFja2luZ19maWxlX2ZyZWUoKSAtIEZyZWUgYSBiYWNraW5nIGZpbGUgYmxvYlxcbjI0ODA6XFx0ICogQGJhY2tpbmdfZmlsZTogdGhlIGJhY2tpbmcgZmlsZVxcbjI0ODE6XFx0ICpcXG4yNDgyOlxcdCAqIEZyZWUgYW55IExTTSBzdGF0ZSBhc3NvY2lhdGUgd2l0aCBhIGJhY2tpbmcgZmlsZSdzIExTTSBibG9iLCBpbmNsdWRpbmcgdGhlXFxuMjQ4MzpcXHQgKiBibG9iIGl0c2VsZi5cXG4yNDg0OlxcdCAqL1xcbjI0ODU6XFx0dm9pZCBzZWN1cml0eV9iYWNraW5nX2ZpbGVfZnJlZShzdHJ1Y3QgZmlsZSAqYmFja2luZ19maWxlKVxcbjI0ODY6XFx0e1xcbjI0ODc6XFx0XFx0dm9pZCAqYmxvYiA9IGJhY2tpbmdfZmlsZV9zZWN1cml0eShiYWNraW5nX2ZpbGUpO1xcbjI0ODg6XFx0XFxuMjQ4OTpcXHRcXHRjYWxsX3ZvaWRfaG9vayhiYWNraW5nX2ZpbGVfZnJlZSwgYmFja2luZ19maWxlKTtcXG4yNDkwOlxcdFxcbjI0OTE6XFx0XFx0aWYgKGJsb2IpIHtcXG4yNDkyOlxcdFxcdFxcdGJhY2tpbmdfZmlsZV9zZXRfc2VjdXJpdHkoYmFja2luZ19maWxlLCBOVUxMKTtcXG4yNDkzOlxcdFxcdFxcdGttZW1fY2FjaGVfZnJlZShsc21fYmFja2luZ19maWxlX2NhY2hlLCBibG9iKTtcXG4yNDk0OlxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMjI6MjQ6MTAuNzM5NjQ1MzA1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1MzcxOTQ3NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgc2VjdXJpdHlfZmlsZV9tcHJvdGVjdGAgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyB3ZSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyBhcm91bmQgYHNlY3VyaXR5X2ZpbGVfbXByb3RlY3RgIGluIGBzZWN1cml0eS9zZWN1cml0eS5jYC4gVGhhdCdzIHdoZXJlIHRoZSBmaWxlIHByb3RlY3Rpb24gbWFnaWMgaGFwcGVucywgc28gaXQncyBhIGNyaXRpY2FsIGFyZWEgZm9yIGV4YW1pbmluZyBwb3RlbnRpYWwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzIG9yIGNvbnRyb2wgZmxvdy4gSSdtIGdvaW5nIHRvIHB1bGwgdXAgdGhlIGNvZGUgYW5kIHN0YXJ0IHRyYWNpbmcgdGhlIGNhbGxzLCBsb29raW5nIGZvciBhbnkgb2J2aW91cyBob2xlcyBvciBhcmVhcyB0aGF0IG1pZ2h0IGJlIGV4cGxvaXRhYmxlLiBTcGVjaWZpY2FsbHksIEknbGwgYmUgbG9va2luZyBhdCBob3cgZmlsZSBhY2Nlc3MgcGVybWlzc2lvbnMgYXJlIGhhbmRsZWQgaW4gY29uanVuY3Rpb24gd2l0aCBtZW1vcnkgcHJvdGVjdGlvbiBjaGFuZ2VzLiBBcmUgdGhlcmUgcmFjZSBjb25kaXRpb25zPyBBcmUgdGhlcmUgaW5zdWZmaWNpZW50IGNoZWNrcyBvbiB1c2VyIGlucHV0PyBBcmUgdGhlcmUgd2F5cyB0byBieXBhc3MgdGhlIGludGVuZGVkIHNlY3VyaXR5IHJlc3RyaWN0aW9ucyB0aHJvdWdoIGNsZXZlciBtYW5pcHVsYXRpb24gb2YgdGhlIHN5c3RlbSBjYWxscz8gSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBjb250ZXh0IGluIHdoaWNoIGBzZWN1cml0eV9maWxlX21wcm90ZWN0YCBpcyBiZWluZyBpbnZva2VkLCBpbmNsdWRpbmcgd2hhdCBvdGhlciBzZWN1cml0eSBtb2R1bGVzIG9yIGhvb2tzIGFyZSBhY3RpdmUgYXQgdGhlIHRpbWUuIEknbGwgbmVlZCB0byBsb29rIGF0IGFueSBpbnRlcmFjdGlvbiB3aXRoIExTTXMsIGJlY2F1c2UgdGhhdCdzIGFsd2F5cyBhbiBpbXBvcnRhbnQgZGV0YWlsLiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MzQ5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQyMjoyNDoxMy4yNzY4NDE3OTZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc2NDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcInNlY3VyaXR5L3NlY3VyaXR5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjYyNSxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjYyNTpcXHQgKiBzZWN1cml0eV9maWxlX21wcm90ZWN0KCkgLSBDaGVjayBpZiBjaGFuZ2luZyBtZW1vcnkgcHJvdGVjdGlvbnMgaXMgYWxsb3dlZFxcbjI2MjY6XFx0ICogQHZtYTogbWVtb3J5IHJlZ2lvblxcbjI2Mjc6XFx0ICogQHJlcXByb3Q6IGFwcGxpY2F0aW9uIHJlcXVlc3RlZCBwcm90ZWN0aW9uXFxuMjYyODpcXHQgKiBAcHJvdDogcHJvdGVjdGlvbiBhcHBsaWVkIGJ5IHRoZSBrZXJuZWxcXG4yNjI5OlxcdCAqXFxuMjYzMDpcXHQgKiBDaGVjayBwZXJtaXNzaW9ucyBiZWZvcmUgY2hhbmdpbmcgbWVtb3J5IGFjY2VzcyBwZXJtaXNzaW9ucy5cXG4yNjMxOlxcdCAqXFxuMjYzMjpcXHQgKiBSZXR1cm46IFJldHVybnMgMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuXFxuMjYzMzpcXHQgKi9cXG4yNjM0OlxcdGludCBzZWN1cml0eV9maWxlX21wcm90ZWN0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHJlcXByb3QsXFxuMjYzNTpcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIHByb3QpXFxuMjYzNjpcXHR7XFxuMjYzNzpcXHRcXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhmaWxlX21wcm90ZWN0LCB2bWEsIHJlcXByb3QsIHByb3QpO1xcbjI2Mzg6XFx0fVxcbjI2Mzk6XFx0XFxuMjY0MDpcXHQvKipcXG4yNjQxOlxcdCAqIHNlY3VyaXR5X2ZpbGVfbG9jaygpIC0gQ2hlY2sgaWYgYSBmaWxlIGxvY2sgaXMgYWxsb3dlZFxcbjI2NDI6XFx0ICogQGZpbGU6IGZpbGVcXG4yNjQzOlxcdCAqIEBjbWQ6IGxvY2sgb3BlcmF0aW9uIChlLmcuIEZfUkRMQ0ssIEZfV1JMQ0spXFxuMjY0NDpcXHQgKlxcbjI2NDU6XFx0ICogQ2hlY2sgcGVybWlzc2lvbiBiZWZvcmUgcGVyZm9ybWluZyBmaWxlIGxvY2tpbmcgb3BlcmF0aW9ucy4gIE5vdGUgdGhlIGhvb2tcXG4yNjQ2OlxcdCAqIG1lZGlhdGVzIGJvdGggZmxvY2sgYW5kIGZjbnRsIHN0eWxlIGxvY2tzLlxcbjI2NDc6XFx0ICpcXG4yNjQ4OlxcdCAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC5cXG4yNjQ5OlxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQyMjoyNDoxMy4yNzczMjY0MzZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTEzNjUxMjc1MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgS2NvbmZpZyBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBmcm9tIGEgY29uZmlndXJhdGlvbiBwZXJzcGVjdGl2ZS4gSSBuZWVkIHRvIG5haWwgZG93biB0aGUgU0VMaW51eCByZXF1aXJlbWVudHMgZmlyc3QuIEp1bXBpbmcgaW50byBgc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnYCwgSSBzZWUgYFNFQ1VSSVRZX1NFTElOVVhgIGlzIHRoZSBrZXkuIEl0J3MgYSBib29sZWFuLCBkZXBlbmRlbnQgb24gYFNFQ1VSSVRZX05FVFdPUktgLCBgQVVESVRgLCBgTkVUYCwgYW5kIGBJTkVUYCwgYW5kIGl0IGBzZWxlY3RgcyBgTkVUV09SS19TRUNNQVJLYCwgd2l0aCBhIGRlZmF1bHQgb2YgJ24nLiBMb29rcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLlxuXG5Ob3csIGxldCdzIGRvdWJsZS1jaGVjayB0aGUgZGVwZW5kZW5jaWVzLiBgU0VDVVJJVFlfTkVUV09SS2AgcmVsaWVzIG9uIGJvdGggYFNFQ1VSSVRZYCBhbmQgYE5FVGAsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIGtub3cgYEFVRElUYCBsaXZlcyBpbiBgaW5pdC9LY29uZmlnYCwgYW5kIGBJTkVUYCBpcyBqdXN0IGBDT05GSUdfSU5FVGAuIEV4Y2VsbGVudCwgSSd2ZSBnb3QgdGhlIGNvcmUgU0VMaW51eCBkZXBlbmRlbmNpZXMgY2xlYXJseSBtYXBwZWQuXG5cbkJ1dCB0aGF0J3MgcHJvYmFibHkgbm90IHRoZSB3aG9sZSBzdG9yeS4gSSBzaG91bGQgZXhwbG9yZSBvdGhlciBwb3RlbnRpYWxseSByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLCBub3QganVzdCB0aGUgb2J2aW91cy4gVGhlIGNvbW1pdCBtZXNzYWdlIG1lbnRpb25zIGBPVkVSTEFZX0ZTYCBhbmQgYEVST0ZTX0ZTYCwgc28gbGV0J3MgZGlnIGludG8gdGhvc2Ugc3BlY2lmaWNhbGx5LiBUaGUgbWVudGlvbiBvZiBiYWNraW5nIGZpbGVzLCBgc19zdGFja19kZXB0aGAsIGFuZCBpbm9kZSBzaGFyaW5nIGluZGljYXRlcyBhIHBvdGVudGlhbCBpbnRlcmFjdGlvbi4gTGV0J3Mgc3RhcnQgd2l0aCBgT1ZFUkxBWV9GU2AgaW4gYGZzL292ZXJsYXlmcy9LY29uZmlnYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkwMjEsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQyMjoyNDoyNC42NDI0NTg1MTRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4MTQyNDAwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgT1ZFUkxBWV9GU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvb3ZlcmxheWZzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9vdmVybGF5ZnMvS2NvbmZpZzoyOmNvbmZpZyBPVkVSTEFZX0ZTXFxuZnMvb3ZlcmxheWZzL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiT3ZlcmxheSBmaWxlc3lzdGVtIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9vdmVybGF5ZnMvS2NvbmZpZy0xNC1cXG5mcy9vdmVybGF5ZnMvS2NvbmZpZzoxNTpjb25maWcgT1ZFUkxBWV9GU19SRURJUkVDVF9ESVJcXG5mcy9vdmVybGF5ZnMvS2NvbmZpZy0xNi1cXHRib29sIFxcXCJPdmVybGF5ZnM6IHR1cm4gb24gcmVkaXJlY3QgZGlyZWN0b3J5IGZlYXR1cmUgYnkgZGVmYXVsdFxcXCJcXG4tLVxcbmZzL292ZXJsYXlmcy9LY29uZmlnLTMwLVxcbmZzL292ZXJsYXlmcy9LY29uZmlnOjMxOmNvbmZpZyBPVkVSTEFZX0ZTX1JFRElSRUNUX0FMV0FZU19GT0xMT1dcXG5mcy9vdmVybGF5ZnMvS2NvbmZpZy0zMi1cXHRib29sIFxcXCJPdmVybGF5ZnM6IGZvbGxvdyByZWRpcmVjdHMgZXZlbiBpZiByZWRpcmVjdHMgYXJlIHR1cm5lZCBvZmZcXFwiXFxuLS1cXG5mcy9vdmVybGF5ZnMvS2NvbmZpZy00NS1cXG5mcy9vdmVybGF5ZnMvS2NvbmZpZzo0Njpjb25maWcgT1ZFUkxBWV9GU19JTkRFWFxcbmZzL292ZXJsYXlmcy9LY29uZmlnLTQ3LVxcdGJvb2wgXFxcIk92ZXJsYXlmczogdHVybiBvbiBpbm9kZXMgaW5kZXggZmVhdHVyZSBieSBkZWZhdWx0XFxcIlxcbi0tXFxuZnMvb3ZlcmxheWZzL0tjb25maWctNjQtXFxuZnMvb3ZlcmxheWZzL0tjb25maWc6NjU6Y29uZmlnIE9WRVJMQVlfRlNfTkZTX0VYUE9SVFxcbmZzL292ZXJsYXlmcy9LY29uZmlnLTY2LVxcdGJvb2wgXFxcIk92ZXJsYXlmczogdHVybiBvbiBORlMgZXhwb3J0IGZlYXR1cmUgYnkgZGVmYXVsdFxcXCJcXG4tLVxcbmZzL292ZXJsYXlmcy9LY29uZmlnLTkyLVxcbmZzL292ZXJsYXlmcy9LY29uZmlnOjkzOmNvbmZpZyBPVkVSTEFZX0ZTX1hJTk9fQVVUT1xcbmZzL292ZXJsYXlmcy9LY29uZmlnLTk0LVxcdGJvb2wgXFxcIk92ZXJsYXlmczogYXV0byBlbmFibGUgaW5vZGUgbnVtYmVyIG1hcHBpbmdcXFwiXFxuLS1cXG5mcy9vdmVybGF5ZnMvS2NvbmZpZy0xMTAtXFxuZnMvb3ZlcmxheWZzL0tjb25maWc6MTExOmNvbmZpZyBPVkVSTEFZX0ZTX01FVEFDT1BZXFxuZnMvb3ZlcmxheWZzL0tjb25maWctMTEyLVxcdGJvb2wgXFxcIk92ZXJsYXlmczogdHVybiBvbiBtZXRhZGF0YSBvbmx5IGNvcHkgdXAgZmVhdHVyZSBieSBkZWZhdWx0XFxcIlxcbi0tXFxuZnMvb3ZlcmxheWZzL0tjb25maWctMTI4LVxcbmZzL292ZXJsYXlmcy9LY29uZmlnOjEyOTpjb25maWcgT1ZFUkxBWV9GU19ERUJVR1xcbmZzL292ZXJsYXlmcy9LY29uZmlnLTEzMC1cXHRib29sIFxcXCJPdmVybGF5ZnM6IHR1cm4gb24gZXh0cmEgZGVidWdnaW5nIGNoZWNrc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMjI6MjQ6MjUuMzIzODg4MzMzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMyMDA5NDk4NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBleHBlcnQgcGVyc3BlY3RpdmU6XG5cbioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgQmFja2luZyBGaWxlIFVzYWdlIGluIEZpbGVzeXN0ZW1zKipcblxuUmlnaHQsIGxldCdzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBgT1ZFUkxBWV9GU2Agb3IgYW55IHJlbGF0ZWQgZmlsZXN5c3RlbXMgYXJlIGVtcGxveWluZyBiYWNraW5nIGZpbGVzIGluIHRoZWlyIGltcGxlbWVudGF0aW9uLiBUaGF0J3MgYSBjcnVjaWFsIGFzcGVjdCBmb3IgdW5kZXJzdGFuZGluZyB0aGVpciBiZWhhdmlvciwgZXNwZWNpYWxseSB3aGVuIGl0IGNvbWVzIHRvIHBlcmZvcm1hbmNlLCBkYXRhIHBlcnNpc3RlbmNlLCBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGUgdW5kZXJseWluZyBzdG9yYWdlLiBUbyBkbyB0aGF0LCBJJ2xsIGdvIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2UgY29kZS4gTXkgcHJlZmVycmVkIGFwcHJvYWNoPyBBIHRhcmdldGVkIGdyZXAuIEknbGwgc2VhcmNoIGZvciBzcGVjaWZpYyBmdW5jdGlvbiBuYW1lcyB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2VzIHRoYXQgYXJlIGhpZ2hseSBzdWdnZXN0aXZlIG9mIGJhY2tpbmcgZmlsZSBvcGVyYXRpb25zLiBJJ2xsIGZvY3VzIG9uIGBiYWNraW5nX2ZpbGVfb3BlbmAgYW5kIGBpbml0X2JhY2tpbmdfZmlsZWAuIFRob3NlIGFyZSB0aGUgdHdvIGZ1bmN0aW9ucyB0aGF0IHdvdWxkIHR5cGljYWxseSBiZSBpbnZvbHZlZCB3aGVuIGEgZmlsZXN5c3RlbSBuZWVkcyB0byBkZWFsIHdpdGggYSBiYWNraW5nIGZpbGUgdG8gc3VwcG9ydCBvcGVyYXRpb25zLCBzbyBJIGtub3cgdGhvc2Ugd291bGQgZ2l2ZSBtZSB1c2VmdWwgcmVzdWx0cy4gSSdtIGV4cGVjdGluZyB0aGlzIHdpbGwgcXVpY2tseSBsZWFkIG1lIHRvIHRoZSBrZXkgbG9jYXRpb25zIGluIHRoZSBjb2RlIHRoYXQgSSBuZWVkIHRvIGV4YW1pbmUgbW9yZSBjbG9zZWx5IHRvIHNlZSBwcmVjaXNlbHkgaG93IGJhY2tpbmcgZmlsZXMgYXJlIHVzZWQuIE9uY2UgSSBmaW5kIHRob3NlIGluc3RhbmNlcyBJIGNhbiBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGUgaXNzdWUgbXVjaCBxdWlja2VyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDExOSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDIyOjI0OjI4LjUyNDg0MjQ5NVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA4Mzg4Mzk4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJiYWNraW5nX2ZpbGVfb3BlblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9iYWNraW5nLWZpbGUuYy0xOS0vKipcXG5mcy9iYWNraW5nLWZpbGUuYzoyMDogKiBiYWNraW5nX2ZpbGVfb3BlbiAtIG9wZW4gYSBiYWNraW5nIGZpbGUgZm9yIGtlcm5lbCBpbnRlcm5hbCB1c2VcXG5mcy9iYWNraW5nLWZpbGUuYy0yMS0gKiBAdXNlcl9maWxlOiAgZmlsZSB0aGUgdXNlciByZXF1ZXN0ZWQgdG8gb3Blblxcbi0tXFxuZnMvYmFja2luZy1maWxlLmMtMzMtICovXFxuZnMvYmFja2luZy1maWxlLmM6MzQ6c3RydWN0IGZpbGUgKmJhY2tpbmdfZmlsZV9vcGVuKGNvbnN0IHN0cnVjdCBmaWxlICp1c2VyX2ZpbGUsIGludCBmbGFncyxcXG5mcy9iYWNraW5nLWZpbGUuYy0zNS1cXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IHBhdGggKnJlYWxfcGF0aCxcXG4tLVxcbmZzL2JhY2tpbmctZmlsZS5jLTU1LX1cXG5mcy9iYWNraW5nLWZpbGUuYzo1NjpFWFBPUlRfU1lNQk9MX0dQTChiYWNraW5nX2ZpbGVfb3Blbik7XFxuZnMvYmFja2luZy1maWxlLmMtNTctXFxuLS1cXG5mcy9lcm9mcy9pc2hhcmUuYz05Nj1zdGF0aWMgaW50IGVyb2ZzX2lzaGFyZV9maWxlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuLS1cXG5mcy9lcm9mcy9pc2hhcmUuYy0xMDYtXFxuZnMvZXJvZnMvaXNoYXJlLmM6MTA3OlxcdHJmID0gYmFja2luZ19maWxlX29wZW4oZmlsZSwgZmlsZS1cXHUwMDNlZl9mbGFncyB8IE9fTk9BVElNRSxcXG5mcy9lcm9mcy9pc2hhcmUuYy0xMDgtXFx0XFx0XFx0ICAgICAgIFxcdTAwMjZzaGFyZWRwYXRoLCBjdXJyZW50X2NyZWQoKSk7XFxuLS1cXG5mcy9mdXNlL3Bhc3N0aHJvdWdoLmM9MTUyPXN0cnVjdCBmdXNlX2JhY2tpbmcgKmZ1c2VfcGFzc3Rocm91Z2hfb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IGJhY2tpbmdfaWQpXFxuLS1cXG5mcy9mdXNlL3Bhc3N0aHJvdWdoLmMtMTY5LVxcdC8qIEFsbG9jYXRlIGJhY2tpbmcgZmlsZSBwZXIgZnVzZSBmaWxlIHRvIHN0b3JlIGZ1c2UgcGF0aCAqL1xcbmZzL2Z1c2UvcGFzc3Rocm91Z2guYzoxNzA6XFx0YmFja2luZ19maWxlID0gYmFja2luZ19maWxlX29wZW4oZmlsZSwgZmlsZS1cXHUwMDNlZl9mbGFncyxcXG5mcy9mdXNlL3Bhc3N0aHJvdWdoLmMtMTcxLVxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2ZmItXFx1MDAzZWZpbGUtXFx1MDAzZWZfcGF0aCwgZmItXFx1MDAzZWNyZWQpO1xcbi0tXFxuZnMvb3ZlcmxheWZzL2ZpbGUuYz0yOD1zdGF0aWMgc3RydWN0IGZpbGUgKm92bF9vcGVuX3JlYWxmaWxlKGNvbnN0IHN0cnVjdCBmaWxlICpmaWxlLFxcbi0tXFxuZnMvb3ZlcmxheWZzL2ZpbGUuYy01MC1cXG5mcy9vdmVybGF5ZnMvZmlsZS5jOjUxOlxcdFxcdFxcdHJlYWxmaWxlID0gYmFja2luZ19maWxlX29wZW4oZmlsZSxcXG5mcy9vdmVybGF5ZnMvZmlsZS5jLTUyLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgZmxhZ3MsIHJlYWxwYXRoLCBjdXJyZW50X2NyZWQoKSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JhY2tpbmctZmlsZS5oPTE1PXN0cnVjdCBiYWNraW5nX2ZpbGVfY3R4IHtcXG4tLVxcbmluY2x1ZGUvbGludXgvYmFja2luZy1maWxlLmgtMjAtXFxuaW5jbHVkZS9saW51eC9iYWNraW5nLWZpbGUuaDoyMTpzdHJ1Y3QgZmlsZSAqYmFja2luZ19maWxlX29wZW4oY29uc3Qgc3RydWN0IGZpbGUgKnVzZXJfZmlsZSwgaW50IGZsYWdzLFxcbmluY2x1ZGUvbGludXgvYmFja2luZy1maWxlLmgtMjItXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBwYXRoICpyZWFsX3BhdGgsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDIyOjI0OjMwLjYwODczMzY1M1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NzIxNjY4OTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBTRUxpbnV4IEJhY2tpbmcgRmlsZSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEknbSBub3RpbmcgdGhlIGNhbGxlcnMgb2YgYGJhY2tpbmdfZmlsZV9vcGVuYDogYG92ZXJsYXlmc2AsIGBlcm9mc2AsIGFuZCBgZnVzZWAuIFRoYXQncyBpbXBvcnRhbnQgY29udGV4dC4gVGhpcyBwYXRjaCBhcHBlYXJzIHJlbGF0ZWQgdG8gaGFuZGxpbmcgc2VjdXJpdHkgaW1wbGljYXRpb25zIHdoZW4gdGhlc2UgZmlsZXN5c3RlbXMgdXNlIGJhY2tpbmcgZmlsZXMsIHBhcnRpY3VsYXJseSBpbiBhIG11bHRpLWxheWVyZWQgY29udGV4dC4gQW5kIGFzIGV4cGVjdGVkLCBlbmFibGluZyBTRUxpbnV4IHJlcXVpcmVzIGEgc3BlY2lmaWMgc2V0IG9mIGNvbmZpZ3M6IGBTRUNVUklUWV9TRUxJTlVYYCwgYFNFQ1VSSVRZYCwgYEFVRElUYCwgYE5FVGAsIGBJTkVUYCwgYW5kIGBTRUNVUklUWV9ORVRXT1JLYC4gVGhlIHByZXNlbmNlIG9mIGBDT05GSUdfT1ZFUkxBWV9GU2AgaXMgY3JpdGljYWwgdG8gcmVhbGx5ICpzZWUqIHRoZSBiZWhhdmlvciBiZWluZyBhZGRyZXNzZWQuXG5cbk5vdywgbGV0J3MgcXVpY2tseSByZXZpZXcgdGhvc2UgU0VMaW51eCBzeW1ib2xzIHRoYXQgYXJlIHRoZSBmb2N1cyBoZXJlOiBgc2VsaW51eF9iYWNraW5nX2ZpbGVfYWxsb2NgLCBgc2VsaW51eF9iYWNraW5nX2ZpbGVfZnJlZWAsIGBzZWxpbnV4X2ZpbGVfbXByb3RlY3RgLCBgc2VjdXJpdHlfYmFja2luZ19maWxlX2FsbG9jYCwgYHNlY3VyaXR5X2JhY2tpbmdfZmlsZV9mcmVlYCwgYW5kIGBzZWN1cml0eV9maWxlX21wcm90ZWN0YC4gR29vZCwgdGhlc2UgYXJlIHRoZSBob29rcyBhbmQgd3JhcHBlcnMuIFRoYXQgY29uZmlybXMgdGhhdCB3ZSBhcmUgZGVhbGluZyB3aXRoIGVudHJ5cG9pbnRzIHRoYXQgaGF2ZSBiZWVuIGFsdGVyZWQgaW4gdGhlIGNvZGUuIEkgZG9uJ3Qgc2VlIGFueXRoaW5nIGdlbmVyaWMgaGVyZSwgdGhlc2UgYXJlIHNlY3VyaXR5LXNwZWNpZmljIGhvb2tzIG9yIHdyYXBwZXJzIHRoYXQgbWFrZSBzZW5zZSB3aXRoaW4gdGhlIFNFTGludXggc3Vic3lzdGVtLlxuXG5TbywgdGhlIGNvbmZpZyBkZXBlbmRlbmNpZXMgYXJlIHRoZSBleHBlY3RlZDogYFNFQ1VSSVRZX1NFTElOVVhgLCBgU0VDVVJJVFlgLCBgU0VDVVJJVFlfTkVUV09SS2AsIGBBVURJVGAsIGBORVRgLCBgSU5FVGAsIGFuZCBgT1ZFUkxBWV9GU2AuIE5vIHN1cnByaXNlcyB0aGVyZS5cblxuTXkgcmVhc29uaW5nIGlzIHN0cmFpZ2h0Zm9yd2FyZDogdGhpcyBwYXRjaCBpcyBhYm91dCBlbmhhbmNpbmcgU0VMaW51eCB0byBjb3JyZWN0bHkgaGFuZGxlIGFuZCB2YWxpZGF0ZSBwZXJtaXNzaW9ucyB3aGVuIGRlYWxpbmcgd2l0aCBtdWx0aS1sYXllcmVkIGJhY2tpbmcgZmlsZXMuIEl0J3MgcmVhbGx5IHRhY2tsaW5nIHRoZSBpc3N1ZSBvZiBob3cgc3RhY2tlZCBmaWxlc3lzdGVtcyAobGlrZSBgb3ZlcmxheWZzYCBhbmQgYGVyb2ZzYCB3aGVuIHRoZXkgc2hhcmUgaW5vZGVzKSBpbnRlcmFjdCB3aXRoIFNFTGludXggcGVybWlzc2lvbnMgZHVyaW5nIGBtcHJvdGVjdGAgYW5kIGJhY2tpbmcgZmlsZSBhbGxvY2F0aW9uL2RlYWxsb2NhdGlvbi4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyBsaWtlIHRoZSBpbXBsZW1lbnRhdGlvbiBpbmNsdWRlcyBkeW5hbWljIGxheWVyIGFsbG9jYXRpb24sIHBhdGggcmVmZXJlbmNlIGNvdW50aW5nIGluIGBzZWxpbnV4X2JhY2tpbmdfZmlsZV9hbGxvY2AsIGNsZWFuaW5nIHVwIHByb3Blcmx5IGluIGBzZWxpbnV4X2JhY2tpbmdfZmlsZV9mcmVlYCwgYW5kIHZhbGlkYXRpbmcgcGVybWlzc2lvbnMgZm9yIGludGVybWVkaWF0ZSBtb3VudGVycyBpbiBgc2VsaW51eF9maWxlX21wcm90ZWN0YC4gVGhlc2UgY2hhbmdlcyBkaXJlY3RseSBpbmZsdWVuY2Ugc2VjdXJpdHkgcGVybWlzc2lvbiBjaGVja3MgYW5kIGJhY2tpbmcgZmlsZSBtZW1vcnkgbWFuYWdlbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEwNjAsIk91dHB1dFRva2VucyI6MjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDg0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDIyOjI0OjM2LjMzMDQwNjUwN1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyOTc1MzIwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU0VDVVJJVFlcIixcbiAgICBcIlNFQ1VSSVRZX1NFTElOVVhcIixcbiAgICBcIlNFQ1VSSVRZX05FVFdPUktcIixcbiAgICBcIkFVRElUXCIsXG4gICAgXCJORVRcIixcbiAgICBcIklORVRcIixcbiAgICBcIk9WRVJMQVlfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzZWxpbnV4X2JhY2tpbmdfZmlsZV9hbGxvY1wiLFxuICAgIFwic2VsaW51eF9iYWNraW5nX2ZpbGVfZnJlZVwiLFxuICAgIFwic2VsaW51eF9maWxlX21wcm90ZWN0XCIsXG4gICAgXCJzZWN1cml0eV9iYWNraW5nX2ZpbGVfYWxsb2NcIixcbiAgICBcInNlY3VyaXR5X2JhY2tpbmdfZmlsZV9mcmVlXCIsXG4gICAgXCJzZWN1cml0eV9maWxlX21wcm90ZWN0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0cmFja2luZyBhbmQgZW5mb3JjaW5nIFNFTGludXggcGVybWlzc2lvbnMgYWNyb3NzIG11bHRpLWxheWVyIGJhY2tpbmcgZmlsZXMgKHN1Y2ggYXMgdGhvc2UgdXNlZCBieSBvdmVybGF5ZnMgYW5kIGVyb2ZzKS4gSXQgaW1wbGVtZW50cyBkeW5hbWljIGFsbG9jYXRpb24gYW5kIHJlZmVyZW5jZSB0cmFja2luZyBvZiBpbnRlcm1lZGlhdGUgYmFja2luZyBmaWxlIGxheWVycyBpbiBzZWxpbnV4X2JhY2tpbmdfZmlsZV9hbGxvYywgY2xlYW51cCBpbiBzZWxpbnV4X2JhY2tpbmdfZmlsZV9mcmVlLCBhbmQgbXVsdGktbGF5ZXIgcGVybWlzc2lvbiBjaGVja3MgZHVyaW5nIG1wcm90ZWN0IGluIHNlbGludXhfZmlsZV9tcHJvdGVjdC4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgY29yZSBzZWN1cml0eSBhbmQgZmlsZXN5c3RlbSBpbnRlcmFjdGlvbnMgYW5kIGFyZSB3ZWxsIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU0VDVVJJVFlcIixcbiAgICBcIlNFQ1VSSVRZX1NFTElOVVhcIixcbiAgICBcIlNFQ1VSSVRZX05FVFdPUktcIixcbiAgICBcIkFVRElUXCIsXG4gICAgXCJORVRcIixcbiAgICBcIklORVRcIixcbiAgICBcIk9WRVJMQVlfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzZWxpbnV4X2JhY2tpbmdfZmlsZV9hbGxvY1wiLFxuICAgIFwic2VsaW51eF9iYWNraW5nX2ZpbGVfZnJlZVwiLFxuICAgIFwic2VsaW51eF9maWxlX21wcm90ZWN0XCIsXG4gICAgXCJzZWN1cml0eV9iYWNraW5nX2ZpbGVfYWxsb2NcIixcbiAgICBcInNlY3VyaXR5X2JhY2tpbmdfZmlsZV9mcmVlXCIsXG4gICAgXCJzZWN1cml0eV9maWxlX21wcm90ZWN0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0cmFja2luZyBhbmQgZW5mb3JjaW5nIFNFTGludXggcGVybWlzc2lvbnMgYWNyb3NzIG11bHRpLWxheWVyIGJhY2tpbmcgZmlsZXMgKHN1Y2ggYXMgdGhvc2UgdXNlZCBieSBvdmVybGF5ZnMgYW5kIGVyb2ZzKS4gSXQgaW1wbGVtZW50cyBkeW5hbWljIGFsbG9jYXRpb24gYW5kIHJlZmVyZW5jZSB0cmFja2luZyBvZiBpbnRlcm1lZGlhdGUgYmFja2luZyBmaWxlIGxheWVycyBpbiBzZWxpbnV4X2JhY2tpbmdfZmlsZV9hbGxvYywgY2xlYW51cCBpbiBzZWxpbnV4X2JhY2tpbmdfZmlsZV9mcmVlLCBhbmQgbXVsdGktbGF5ZXIgcGVybWlzc2lvbiBjaGVja3MgZHVyaW5nIG1wcm90ZWN0IGluIHNlbGludXhfZmlsZV9tcHJvdGVjdC4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgY29yZSBzZWN1cml0eSBhbmQgZmlsZXN5c3RlbSBpbnRlcmFjdGlvbnMgYW5kIGFyZSB3ZWxsIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDIyOjI0OjM2LjQ2MDE2OTE0NVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDA0MTA1ODMxMzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQyMjoyNDozNi40NjA5MTc4NDVaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0MDQwOTgyODc3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZXh0ZW5kcyBTRUxpbnV4IGJhY2tpbmcgZmlsZSB0cmFja2luZyB0byBoYW5kbGUgbXVsdGlwbGUgbGF5ZXJzIGluIHN0YWNrZWQgZmlsZXN5c3RlbXMgKHN1Y2ggYXMgb3ZlcmxheWZzIGFuZCBlcm9mcykgYnkgaW50cm9kdWNpbmcgaW50ZXJtZWRpYXRlIGJhY2tpbmcgbGF5ZXIgc3RydWN0dXJlcywgcmVjb3JkaW5nIHBhdGhzIGFuZCBTSURzLCBhbmQgdmFsaWRhdGluZyBtb3VudGVyIHBlcm1pc3Npb25zIGR1cmluZyBmaWxlIG1tYXAvbXByb3RlY3Qgb3BlcmF0aW9ucy5cXG5cXG5BbGwgbmV3bHkgYWxsb2NhdGVkIGhlYXAgc3RydWN0dXJlcyAoYGJhY2tpbmdfZmlsZV9zZWN1cml0eV9sYXllcmAgYXJyYXlzKSBhcmUgZXhwbGljaXRseSBhbmQgZnVsbHkgaW5pdGlhbGl6ZWQgdXBvbiBhbGxvY2F0aW9uIGJlZm9yZSB1c2Ugb3IgY29weWluZy4gVGhlIGNvbnRhaW5pbmcgYGJhY2tpbmdfZmlsZV9zZWN1cml0eV9zdHJ1Y3RgIGJsb2IgaXMgYWxsb2NhdGVkIHZpYSBga21lbV9jYWNoZV96YWxsb2NgLiBUaGUgYXVkaXQgZGF0YSBzdGFjayBzdHJ1Y3R1cmUgYHN0cnVjdCBjb21tb25fYXVkaXRfZGF0YSBhZGAgaXMgcHJvcGVybHkgY29uZmlndXJlZCB3aXRoIGB0eXBlID0gTFNNX0FVRElUX0RBVEFfUEFUSGAgYW5kIHRoZSBwYXRoIHVuaW9uIG1lbWJlciBhc3NpZ25lZCBiZWZvcmUgcGFzc2luZyB0byB0aGUgYXVkaXQvQVZDIHN1YnN5c3RlbS4gTm8gZGF0YSBpcyBleHBvc2VkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgdGhlcmUgaXMgbm8gYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBQb3RlbnRpYWwgcmlza3MgaW4gdGhpcyBwYXRjaCAoc3VjaCBhcyBsaWZldGltZSBpc3N1ZXMsIHJlZmNvdW50aW5nLCBwYXRoIG1hbmFnZW1lbnQsIG9yIG91dC1vZi1ib3VuZHMgaW5kZXhpbmcpIGZhbGwgd2l0aGluIHRoZSBzY29wZSBvZiBLQVNBTiByYXRoZXIgdGhhbiBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmYTdhMGI1NTA2MjJjNjQ1ZDYyY2Y5YTM2NDk4YTdjYWJkNzI2Y2I2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMjkgMjI6MjM6MjEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNcbmluZGV4IDAzNWFhZjExM2QxZGEuLmI2NzUwZWRjYzQ3ODMgMTAwNjQ0XG4tLS0gYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNcbisrKyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuY1xuQEAgLTE2NzQsMjYgKzE2NzQsMzIgQEAgc3RhdGljIGludCBjcmVkX2hhc19jYXBhYmlsaXR5KGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkLFxuIFx0cmV0dXJuIHJjO1xuIH1cbiBcbi0vKiBDaGVjayB3aGV0aGVyIGEgdGFzayBoYXMgYSBwYXJ0aWN1bGFyIHBlcm1pc3Npb24gdG8gYW4gaW5vZGUuXG4tICAgVGhlICdhZHAnIHBhcmFtZXRlciBpcyBvcHRpb25hbCBhbmQgYWxsb3dzIG90aGVyIGF1ZGl0XG4tICAgZGF0YSB0byBiZSBwYXNzZWQgKGUuZy4gdGhlIGRlbnRyeSkuICovXG4tc3RhdGljIGludCBpbm9kZV9oYXNfcGVybShjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCxcbi1cdFx0XHQgIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tXHRcdFx0ICB1MzIgcGVybXMsXG4tXHRcdFx0ICBzdHJ1Y3QgY29tbW9uX2F1ZGl0X2RhdGEgKmFkcClcbisvKlxuKyAqIENoZWNrIHdoZXRoZXIgYSBTSUQgaGFzIGEgcGFydGljdWxhciBwZXJtaXNzaW9uIHRvIGFuIGlub2RlLiAgVGhlICdhZHAnXG4rICogcGFyYW1ldGVyIGlzIG9wdGlvbmFsIGFuZCBhbGxvd3Mgb3RoZXIgYXVkaXQgZGF0YSB0byBiZSBwYXNzZWQgKGUuZy4gdGhlXG4rICogZGVudHJ5KS5cbisgKi9cbitzdGF0aWMgaW50IGlub2RlX3NpZF9oYXNfcGVybSh1MzIgc2lkLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgcGVybXMsXG4rXHRcdFx0ICAgICAgc3RydWN0IGNvbW1vbl9hdWRpdF9kYXRhICphZHApXG4ge1xuIFx0c3RydWN0IGlub2RlX3NlY3VyaXR5X3N0cnVjdCAqaXNlYztcbi1cdHUzMiBzaWQ7XG4gXG4gXHRpZiAodW5saWtlbHkoSVNfUFJJVkFURShpbm9kZSkpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdHNpZCA9IGNyZWRfc2lkKGNyZWQpO1xuIFx0aXNlYyA9IHNlbGludXhfaW5vZGUoaW5vZGUpO1xuIFxuIFx0cmV0dXJuIGF2Y19oYXNfcGVybShzaWQsIGlzZWMtXHUwMDNlc2lkLCBpc2VjLVx1MDAzZXNjbGFzcywgcGVybXMsIGFkcCk7XG4gfVxuIFxuK3N0YXRpYyBpbnQgaW5vZGVfaGFzX3Blcm0oY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQsXG4rXHRcdFx0ICBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuK1x0XHRcdCAgdTMyIHBlcm1zLFxuK1x0XHRcdCAgc3RydWN0IGNvbW1vbl9hdWRpdF9kYXRhICphZHApXG4re1xuK1x0cmV0dXJuIGlub2RlX3NpZF9oYXNfcGVybShjcmVkX3NpZChjcmVkKSwgaW5vZGUsIHBlcm1zLCBhZHApO1xuK31cbitcbiAvKiBTYW1lIGFzIGlub2RlX2hhc19wZXJtLCBidXQgcGFzcyBleHBsaWNpdCBhdWRpdCBkYXRhIGNvbnRhaW5pbmdcbiAgICB0aGUgZGVudHJ5IHRvIGhlbHAgdGhlIGF1ZGl0aW5nIGNvZGUgdG8gbW9yZSBlYXNpbHkgZ2VuZXJhdGUgdGhlXG4gICAgcGF0aG5hbWUgaWYgbmVlZGVkLiAqL1xuQEAgLTM4NDMsMTcgKzM4NDksNzQgQEAgc3RhdGljIGludCBzZWxpbnV4X2ZpbGVfYWxsb2Nfc2VjdXJpdHkoc3RydWN0IGZpbGUgKmZpbGUpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGlubGluZSB1MzIgc2VsaW51eF9maWxlX3VzZXJfc2lkKGNvbnN0IHN0cnVjdCBmaWxlICpmaWxlKVxuK3tcbitcdGlmICh1bmxpa2VseShmaWxlLVx1MDAzZWZfbW9kZSBcdTAwMjYgRk1PREVfQkFDS0lORykpXG4rXHRcdHJldHVybiBzZWxpbnV4X2JhY2tpbmdfZmlsZShmaWxlKS1cdTAwM2V1Zl9zaWQ7XG4rXHRyZXR1cm4gc2VsaW51eF9maWxlKGZpbGUpLVx1MDAzZXNpZDtcbit9XG4rXG4gc3RhdGljIGludCBzZWxpbnV4X2JhY2tpbmdfZmlsZV9hbGxvYyhzdHJ1Y3QgZmlsZSAqYmFja2luZ19maWxlLFxuIFx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGZpbGUgKnVzZXJfZmlsZSlcbiB7XG4gXHRzdHJ1Y3QgYmFja2luZ19maWxlX3NlY3VyaXR5X3N0cnVjdCAqYmZzZWM7XG4rXHRjb25zdCBzdHJ1Y3QgYmFja2luZ19maWxlX3NlY3VyaXR5X3N0cnVjdCAqdWJmc2VjO1xuK1x0c3RydWN0IGJhY2tpbmdfZmlsZV9zZWN1cml0eV9sYXllciAqbGF5ZXI7XG4rXHR1MzIgaTtcbiBcbiBcdGJmc2VjID0gc2VsaW51eF9iYWNraW5nX2ZpbGUoYmFja2luZ19maWxlKTtcbi1cdGJmc2VjLVx1MDAzZXVmX3NpZCA9IHNlbGludXhfZmlsZSh1c2VyX2ZpbGUpLVx1MDAzZXNpZDtcbitcdGJmc2VjLVx1MDAzZXVmX3NpZCA9IHNlbGludXhfZmlsZV91c2VyX3NpZCh1c2VyX2ZpbGUpO1xuK1x0aWYgKCEodXNlcl9maWxlLVx1MDAzZWZfbW9kZSBcdTAwMjYgRk1PREVfQkFDS0lORykpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0dWJmc2VjID0gc2VsaW51eF9iYWNraW5nX2ZpbGUodXNlcl9maWxlKTtcbitcdC8qIGEgd3JhcHBlZCBjb3VudCB3b3VsZCBtYWtlIGttYWxsb2NfYXJyYXkoKSByZXR1cm4gWkVST19TSVpFX1BUUiAqL1xuK1x0aWYgKHVubGlrZWx5KHViZnNlYy1cdTAwM2VsYXllcl9jb3VudCA9PSBVMzJfTUFYKSlcbitcdFx0cmV0dXJuIC1FT1ZFUkZMT1c7XG4rXG4rXHQvKlxuK1x0ICogVGhlIGZpbmFsIFZNQSBvbmx5IHJldGFpbnMgdGhlIGxvd2VzdCBiYWNraW5nIGZpbGUsIHNvIHJlY29yZCB0aGVcbitcdCAqIHdob2xlIGNoYWluIGhlcmUgcmF0aGVyIHRoYW4gaW4gdGhlIG1tYXAgaG9vaywgd2hlcmUgY29uY3VycmVudFxuK1x0ICogbWFwcGluZ3Mgd291bGQgaGF2ZSB0byBiZSBzZXJpYWxpemVkLiAgU2l6ZSBpdCBkeW5hbWljYWxseTogZXJvZnNcbitcdCAqIGlub2RlIHNoYXJpbmcgYWRkcyBhIGJhY2tpbmcgZmlsZSB3aXRob3V0IGJ1bXBpbmcgc19zdGFja19kZXB0aC5cbitcdCAqL1xuK1x0YmZzZWMtXHUwMDNlbGF5ZXJzID0ga21hbGxvY19hcnJheSh1YmZzZWMtXHUwMDNlbGF5ZXJfY291bnQgKyAxLFxuK1x0XHRcdFx0ICAgICAgc2l6ZW9mKCpiZnNlYy1cdTAwM2VsYXllcnMpLCBHRlBfS0VSTkVMKTtcbitcdGlmICghYmZzZWMtXHUwMDNlbGF5ZXJzKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHViZnNlYy1cdTAwM2VsYXllcl9jb3VudDsgaSsrKSB7XG4rXHRcdGxheWVyID0gXHUwMDI2YmZzZWMtXHUwMDNlbGF5ZXJzW2ldO1xuK1x0XHQqbGF5ZXIgPSB1YmZzZWMtXHUwMDNlbGF5ZXJzW2ldO1xuK1x0XHRwYXRoX2dldChcdTAwMjZsYXllci1cdTAwM2VwYXRoKTtcbitcdH1cbitcbitcdC8qIGZfcGF0aCwgbm90IGZpbGVfdXNlcl9wYXRoKCk6IHRoaXMgbGF5ZXIsIG5vdCB0aGUgdG9wLWxldmVsIGZpbGUgKi9cbitcdGxheWVyID0gXHUwMDI2YmZzZWMtXHUwMDNlbGF5ZXJzW2ldO1xuK1x0bGF5ZXItXHUwMDNlcGF0aCA9IHVzZXJfZmlsZS1cdTAwM2VmX3BhdGg7XG4rXHRsYXllci1cdTAwM2Vtb3VudGVyX3NpZCA9IGNyZWRfc2lkKHVzZXJfZmlsZS1cdTAwM2VmX2NyZWQpO1xuK1x0bGF5ZXItXHUwMDNlZmRfc2lkID0gc2VsaW51eF9maWxlKHVzZXJfZmlsZSktXHUwMDNlc2lkO1xuK1x0cGF0aF9nZXQoXHUwMDI2bGF5ZXItXHUwMDNlcGF0aCk7XG4rXHRiZnNlYy1cdTAwM2VsYXllcl9jb3VudCA9IHViZnNlYy1cdTAwM2VsYXllcl9jb3VudCArIDE7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIHZvaWQgc2VsaW51eF9iYWNraW5nX2ZpbGVfZnJlZShzdHJ1Y3QgZmlsZSAqYmFja2luZ19maWxlKVxuK3tcbitcdHN0cnVjdCBiYWNraW5nX2ZpbGVfc2VjdXJpdHlfc3RydWN0ICpiZnNlYztcbitcbitcdC8qIHNlY3VyaXR5X2JhY2tpbmdfZmlsZV9mcmVlKCkgbWF5IGJlIGNhbGxlZCB0d2ljZSBhZnRlciBhbiBlcnJvciAqL1xuK1x0aWYgKCFiYWNraW5nX2ZpbGVfc2VjdXJpdHkoYmFja2luZ19maWxlKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0YmZzZWMgPSBzZWxpbnV4X2JhY2tpbmdfZmlsZShiYWNraW5nX2ZpbGUpO1xuK1x0d2hpbGUgKGJmc2VjLVx1MDAzZWxheWVyX2NvdW50KVxuK1x0XHRwYXRoX3B1dChcdTAwMjZiZnNlYy1cdTAwM2VsYXllcnNbLS1iZnNlYy1cdTAwM2VsYXllcl9jb3VudF0ucGF0aCk7XG4rXHRrZnJlZShiZnNlYy1cdTAwM2VsYXllcnMpO1xuK1x0YmZzZWMtXHUwMDNlbGF5ZXJzID0gTlVMTDtcbit9XG4rXG4gLypcbiAgKiBDaGVjayB3aGV0aGVyIGEgdGFzayBoYXMgdGhlIGlvY3RsIHBlcm1pc3Npb24gYW5kIGNtZFxuICAqIG9wZXJhdGlvbiB0byBhbiBpbm9kZS5cbkBAIC0zOTcxLDYgKzQwMzQsNTMgQEAgc3RhdGljIGludCBzZWxpbnV4X2ZpbGVfaW9jdGxfY29tcGF0KHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLFxuIFxuIHN0YXRpYyBpbnQgZGVmYXVsdF9ub2V4ZWMgX19yb19hZnRlcl9pbml0O1xuIFxuK3N0YXRpYyB1MzIgZmlsZV9tYXBfcHJvdF90b19hdih1bnNpZ25lZCBsb25nIHByb3QsIGJvb2wgc2hhcmVkKVxuK3tcbitcdHUzMiBhdiA9IEZJTEVfX1JFQUQ7XG4rXG4rXHRpZiAoc2hhcmVkIFx1MDAyNlx1MDAyNiAocHJvdCBcdTAwMjYgUFJPVF9XUklURSkpXG4rXHRcdGF2IHw9IEZJTEVfX1dSSVRFO1xuK1x0aWYgKHByb3QgXHUwMDI2IFBST1RfRVhFQylcbitcdFx0YXYgfD0gRklMRV9fRVhFQ1VURTtcbitcbitcdHJldHVybiBhdjtcbit9XG4rXG4rc3RhdGljIGludCBiYWNraW5nX21vdW50ZXJzX2hhc19wZXJtKGNvbnN0IHN0cnVjdCBmaWxlICpmaWxlLCB1MzIgYXYpXG4re1xuK1x0Y29uc3Qgc3RydWN0IGJhY2tpbmdfZmlsZV9zZWN1cml0eV9zdHJ1Y3QgKmJmc2VjO1xuK1x0Y29uc3Qgc3RydWN0IGJhY2tpbmdfZmlsZV9zZWN1cml0eV9sYXllciAqbGF5ZXI7XG4rXHRzdHJ1Y3QgY29tbW9uX2F1ZGl0X2RhdGEgYWQ7XG4rXHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xuK1x0dTMyIGk7XG4rXHRpbnQgcmM7XG4rXG4rXHRpZiAoV0FSTl9PTl9PTkNFKCEoZmlsZS1cdTAwM2VmX21vZGUgXHUwMDI2IEZNT0RFX0JBQ0tJTkcpKSlcbitcdFx0cmV0dXJuIC1FSU87XG4rXG4rXHRiZnNlYyA9IHNlbGludXhfYmFja2luZ19maWxlKGZpbGUpO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgYmZzZWMtXHUwMDNlbGF5ZXJfY291bnQ7IGkrKykge1xuK1x0XHRsYXllciA9IFx1MDAyNmJmc2VjLVx1MDAzZWxheWVyc1tpXTtcbitcdFx0aW5vZGUgPSBkX2lub2RlKGxheWVyLVx1MDAzZXBhdGguZGVudHJ5KTtcbitcbitcdFx0YWQudHlwZSA9IExTTV9BVURJVF9EQVRBX1BBVEg7XG4rXHRcdGFkLnUucGF0aCA9IGxheWVyLVx1MDAzZXBhdGg7XG4rXG4rXHRcdGlmIChsYXllci1cdTAwM2Vtb3VudGVyX3NpZCAhPSBsYXllci1cdTAwM2VmZF9zaWQpIHtcbitcdFx0XHRyYyA9IGF2Y19oYXNfcGVybShsYXllci1cdTAwM2Vtb3VudGVyX3NpZCwgbGF5ZXItXHUwMDNlZmRfc2lkLFxuK1x0XHRcdFx0XHQgIFNFQ0NMQVNTX0ZELCBGRF9fVVNFLCBcdTAwMjZhZCk7XG4rXHRcdFx0aWYgKHJjKVxuK1x0XHRcdFx0cmV0dXJuIHJjO1xuK1x0XHR9XG4rXG4rXHRcdHJjID0gaW5vZGVfc2lkX2hhc19wZXJtKGxheWVyLVx1MDAzZW1vdW50ZXJfc2lkLCBpbm9kZSwgYXYsIFx1MDAyNmFkKTtcbitcdFx0aWYgKHJjKVxuK1x0XHRcdHJldHVybiByYztcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgaW50IF9fZmlsZV9tYXBfcHJvdF9jaGVjayhjb25zdCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBwcm90LFxuIFx0XHRcdFx0IGJvb2wgc2hhcmVkLCBib29sIG1vdW50ZXJfY2hlY2ssXG4gXHRcdFx0XHQgYm9vbCBiZl91c2VyX2ZpbGUpXG5AQCAtNDAwNCwxNCArNDExNCwxMCBAQCBzdGF0aWMgaW50IF9fZmlsZV9tYXBfcHJvdF9jaGVjayhjb25zdCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBwcm90LFxuIFx0aWYgKGZpbGUpIHtcbiBcdFx0Y29uc3Qgc3RydWN0IGNyZWQgKmNyZWQgPSBtb3VudGVyX2NoZWNrID9cbiBcdFx0XHRcdGZpbGUtXHUwMDNlZl9jcmVkIDogY3VycmVudF9jcmVkKCk7XG4tXHRcdC8qIFwicmVhZFwiIGFsd2F5cyBwb3NzaWJsZSwgXCJ3cml0ZVwiIG9ubHkgaWYgc2hhcmVkICovXG4tXHRcdHUzMiBhdiA9IEZJTEVfX1JFQUQ7XG4tXHRcdGlmIChzaGFyZWQgXHUwMDI2XHUwMDI2IHByb3Rfd3JpdGUpXG4tXHRcdFx0YXYgfD0gRklMRV9fV1JJVEU7XG4tXHRcdGlmIChwcm90X2V4ZWMpXG4tXHRcdFx0YXYgfD0gRklMRV9fRVhFQ1VURTtcbiBcbi1cdFx0cmV0dXJuIF9fZmlsZV9oYXNfcGVybShjcmVkLCBmaWxlLCBhdiwgYmZfdXNlcl9maWxlKTtcbitcdFx0cmV0dXJuIF9fZmlsZV9oYXNfcGVybShjcmVkLCBmaWxlLFxuK1x0XHRcdFx0ICAgICAgIGZpbGVfbWFwX3Byb3RfdG9fYXYocHJvdCwgc2hhcmVkKSxcbitcdFx0XHRcdCAgICAgICBiZl91c2VyX2ZpbGUpO1xuIFx0fVxuIFxuIFx0cmV0dXJuIDA7XG5AQCAtNDEwNiw2ICs0MjEyLDcgQEAgc3RhdGljIGludCBzZWxpbnV4X2ZpbGVfbXByb3RlY3Qoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRpbnQgcmM7XG4gXHRjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCA9IGN1cnJlbnRfY3JlZCgpO1xuIFx0dTMyIHNpZCA9IGNyZWRfc2lkKGNyZWQpO1xuK1x0dTMyIGF2O1xuIFx0Y29uc3Qgc3RydWN0IGZpbGUgKmZpbGUgPSB2bWEtXHUwMDNldm1fZmlsZTtcbiBcdGJvb2wgYmFja2luZ19maWxlO1xuIFx0Ym9vbCBzaGFyZWQgPSB2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1NIQVJFRDtcbkBAIC00MTQ5LDYgKzQyNTYsMTAgQEAgc3RhdGljIGludCBzZWxpbnV4X2ZpbGVfbXByb3RlY3Qoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdFx0aWYgKHJjKVxuIFx0XHRcdFx0cmV0dXJuIHJjO1xuIFx0XHRcdGlmIChiYWNraW5nX2ZpbGUpIHtcbitcdFx0XHRcdHJjID0gYmFja2luZ19tb3VudGVyc19oYXNfcGVybShmaWxlLFxuK1x0XHRcdFx0XHRcdFx0ICAgICAgIEZJTEVfX0VYRUNNT0QpO1xuK1x0XHRcdFx0aWYgKHJjKVxuK1x0XHRcdFx0XHRyZXR1cm4gcmM7XG4gXHRcdFx0XHRyYyA9IGZpbGVfaGFzX3Blcm0oZmlsZS1cdTAwM2VmX2NyZWQsIGZpbGUsXG4gXHRcdFx0XHRcdFx0ICAgRklMRV9fRVhFQ01PRCk7XG4gXHRcdFx0XHRpZiAocmMpXG5AQCAtNDE2MSw2ICs0MjcyLDEwIEBAIHN0YXRpYyBpbnQgc2VsaW51eF9maWxlX21wcm90ZWN0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0aWYgKHJjKVxuIFx0XHRyZXR1cm4gcmM7XG4gXHRpZiAoYmFja2luZ19maWxlKSB7XG4rXHRcdGF2ID0gZmlsZV9tYXBfcHJvdF90b19hdihwcm90LCBzaGFyZWQpO1xuK1x0XHRyYyA9IGJhY2tpbmdfbW91bnRlcnNfaGFzX3Blcm0oZmlsZSwgYXYpO1xuK1x0XHRpZiAocmMpXG4rXHRcdFx0cmV0dXJuIHJjO1xuIFx0XHRyYyA9IGZpbGVfbWFwX3Byb3RfY2hlY2soZmlsZSwgcHJvdCwgc2hhcmVkLCB0cnVlKTtcbiBcdFx0aWYgKHJjKVxuIFx0XHRcdHJldHVybiByYztcbkBAIC03NjM1LDYgKzc3NTAsNyBAQCBzdGF0aWMgc3RydWN0IHNlY3VyaXR5X2hvb2tfbGlzdCBzZWxpbnV4X2hvb2tzW10gX19yb19hZnRlcl9pbml0ID0ge1xuIFx0TFNNX0hPT0tfSU5JVChmaWxlX3Blcm1pc3Npb24sIHNlbGludXhfZmlsZV9wZXJtaXNzaW9uKSxcbiBcdExTTV9IT09LX0lOSVQoZmlsZV9hbGxvY19zZWN1cml0eSwgc2VsaW51eF9maWxlX2FsbG9jX3NlY3VyaXR5KSxcbiBcdExTTV9IT09LX0lOSVQoYmFja2luZ19maWxlX2FsbG9jLCBzZWxpbnV4X2JhY2tpbmdfZmlsZV9hbGxvYyksXG4rXHRMU01fSE9PS19JTklUKGJhY2tpbmdfZmlsZV9mcmVlLCBzZWxpbnV4X2JhY2tpbmdfZmlsZV9mcmVlKSxcbiBcdExTTV9IT09LX0lOSVQoZmlsZV9pb2N0bCwgc2VsaW51eF9maWxlX2lvY3RsKSxcbiBcdExTTV9IT09LX0lOSVQoZmlsZV9pb2N0bF9jb21wYXQsIHNlbGludXhfZmlsZV9pb2N0bF9jb21wYXQpLFxuIFx0TFNNX0hPT0tfSU5JVChtbWFwX2ZpbGUsIHNlbGludXhfbW1hcF9maWxlKSxcbmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvb2Jqc2VjLmggYi9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvb2Jqc2VjLmhcbmluZGV4IDNjMGExNmVjOTc4YjAuLjJmMjE1NjgyNTFmZmUgMTAwNjQ0XG4tLS0gYS9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvb2Jqc2VjLmhcbisrKyBiL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9vYmpzZWMuaFxuQEAgLTg2LDggKzg2LDE2IEBAIHN0cnVjdCBmaWxlX3NlY3VyaXR5X3N0cnVjdCB7XG4gXHR1MzIgcHNlcW5vOyAvKiBQb2xpY3kgc2Vxbm8gYXQgdGhlIHRpbWUgb2YgZmlsZSBvcGVuICovXG4gfTtcbiBcbitzdHJ1Y3QgYmFja2luZ19maWxlX3NlY3VyaXR5X2xheWVyIHtcbitcdHN0cnVjdCBwYXRoIHBhdGg7IC8qIHRoaXMgbGF5ZXIncyByZWFsIHBhdGggKi9cbitcdHUzMiBtb3VudGVyX3NpZDsgLyogU0lEIG9mIHRoZSBtb3VudGVyIHRoYXQgb3BlbmVkIGl0ICovXG4rXHR1MzIgZmRfc2lkOyAvKiBTSUQgb2YgaXRzIG9wZW4gZmlsZSBkZXNjcmlwdGlvbiAqL1xuK307XG4rXG4gc3RydWN0IGJhY2tpbmdfZmlsZV9zZWN1cml0eV9zdHJ1Y3Qge1xuLVx0dTMyIHVmX3NpZDsgLyogYXNzb2NpYXRlZCB1c2VyIGZpbGUgZnNlYy1cdTAwM2VzaWQgKi9cbitcdHUzMiB1Zl9zaWQ7IC8qIHRvcC1sZXZlbCB1c2VyIGZpbGUgZnNlYy1cdTAwM2VzaWQgKi9cbitcdHUzMiBsYXllcl9jb3VudDsgLyogbnVtYmVyIG9mIGludGVybWVkaWF0ZSBiYWNraW5nIGZpbGVzICovXG4rXHRzdHJ1Y3QgYmFja2luZ19maWxlX3NlY3VyaXR5X2xheWVyICpsYXllcnM7XG4gfTtcbiBcbiBzdHJ1Y3Qgc3VwZXJibG9ja19zZWN1cml0eV9zdHJ1Y3Qge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMjI6MjQ6MzYuNDYwOTE5NDg1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3MDc4Mzk0NzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU0VMaW51eCBCYWNraW5nIEZpbGUgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCBpZiB3ZSBuZWVkIHRvIGZpcmUgdXAgYSBLTVNBTiBzZXNzaW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY2hhbmdlcyBmaXJzdC4gVGhpcyBwYXRjaCB0b3VjaGVzIGBzZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNgIGFuZCBgc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL29ianNlYy5oYCwgc28gaXQgc2VlbXMgY29yZSB0byBob3cgU0VMaW51eCBoYW5kbGVzIG9iamVjdCBzZWN1cml0eS4gVGhlIGtleSBzZWVtcyB0byBiZSBhYm91dCB0cmFja2luZyBpbnRlcm1lZGlhdGUgYmFja2luZyBmaWxlcyBmb3Igc3RhY2tlZCBmaWxlc3lzdGVtcyBsaWtlIG92ZXJsYXlmcyBvciBlcm9mcy5cblxuVGhlIGNvZGUgYWRkcyBhIGBzdHJ1Y3QgYmFja2luZ19maWxlX3NlY3VyaXR5X2xheWVyYCwgd2l0aCBgc3RydWN0IHBhdGggcGF0aDsgdTMyIG1vdW50ZXJfc2lkOyB1MzIgZmRfc2lkO2AsIHdoaWNoIHNvdW5kcyBsaWtlIGl0J3MgZGVzaWduZWQgdG8ga2VlcCB0cmFjayBvZiBzZWN1cml0eSBpbmZvcm1hdGlvbiBhdCBlYWNoIGxheWVyIG9mIHRoZSBmaWxlc3lzdGVtIHN0YWNrLiBUaGVuLCB0aGUgYHN0cnVjdCBiYWNraW5nX2ZpbGVfc2VjdXJpdHlfc3RydWN0YCBpcyBleHRlbmRlZCB3aXRoIGEgYGxheWVyX2NvdW50YCBhbmQgYW4gYXJyYXkgYGxheWVyc2Agb2YgdGhlc2UgYGJhY2tpbmdfZmlsZV9zZWN1cml0eV9sYXllcmAgc3RydWN0cy5cblxuTm93LCB0aGUgYWxsb2NhdGlvbiBpcyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBJIHNlZSBhIGBrbWFsbG9jX2FycmF5YCBiZWluZyB1c2VkIHRvIGFsbG9jYXRlIHRoZSBgbGF5ZXJzYCBhcnJheSB3aXRoaW4gYHNlbGludXhfYmFja2luZ19maWxlX2FsbG9jYC4gSG9sZCBvbiwgYSBzbGlnaHQgZmxhZzogYGttYWxsb2NfYXJyYXlgIGFuZCBub3QgYGtjYWxsb2NgIOKAkyB0aGF0J3MgYSByZWQgZmxhZy4gTGV0IG1lIHNlZSBob3cgaXQncyBpbml0aWFsaXplZC4gTG9va2luZyBhdCB0aGUgY29kZTpcbmBgYGNcblx0YmZzZWMtXHUwMDNlbGF5ZXJzID0ga21hbGxvY19hcnJheSh1YmZzZWMtXHUwMDNlbGF5ZXJfY291bnQgKyAxLFxuXHRcdFx0XHQgICAgICBzaXplb2YoKmJmc2VjLVx1MDAzZWxheWVycyksIEdGUF9LRVJORUwpO1xuXHRpZiAoIWJmc2VjLVx1MDAzZWxheWVycylcblx0XHRyZXR1cm4gLUVOT01FTTtcblxuXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB1YmZzZWMtXHUwMDNlbGF5ZXJfY291bnQ7IGkrKykge1xuXHRcdGxheWVyID0gXHUwMDI2YmZzZWMtXHUwMDNlbGF5ZXJzW2ldO1xuXHRcdCpsYXllciA9IHViZnNlYy1cdTAwM2VsYXllcnNbaV07XG5cdFx0cGF0aF9nZXQoXHUwMDI2bGF5ZXItXHUwMDNlcGF0aCk7XG5cdH1cblxuXHQvKiBmX3BhdGgsIG5vdCBmaWxlX3VzZXJfcGF0aCgpOiB0aGlzIGxheWVyLCBub3QgdGhlIHRvcC1sZXZlbCBmaWxlICovXG5cdGxheWVyID0gXHUwMDI2YmZzZWMtXHUwMDNlbGF5ZXJzW2ldO1xuXHRsYXllci1cdTAwM2VwYXRoID0gdXNlcl9maWxlLVx1MDAzZWZfcGF0aDtcblx0bGF5ZXItXHUwMDNlbW91bnRlcl9zaWQgPSBjcmVkX3NpZCh1c2VyX2ZpbGUtXHUwMDNlZl9jcmVkKTtcblx0bGF5ZXItXHUwMDNlZmRfc2lkID0gc2VsaW51eF9maWxlKHVzZXJfZmlsZSktXHUwMDNlc2lkO1xuXHRwYXRoX2dldChcdTAwMjZsYXllci1cdTAwM2VwYXRoKTtcblx0YmZzZWMtXHUwMDNlbGF5ZXJfY291bnQgPSB1YmZzZWMtXHUwMDNlbGF5ZXJfY291bnQgKyAxO1xuYGBgXG5cbk9rYXksIEkgc2VlIG5vdy4gYHViZnNlYy1cdTAwM2VsYXllcl9jb3VudGAgZWxlbWVudHMgYXJlIGNvcGllZCBmcm9tIGB1YmZzZWMtXHUwMDNlbGF5ZXJzYCBpbnRvIGBiZnNlYy1cdTAwM2VsYXllcnNgIChpbmRleGVzIDAgdG8gYHViZnNlYy1cdTAwM2VsYXllcl9jb3VudCAtIDFgKS4gVGhlbiwgdGhlIGNvZGUgKmV4cGxpY2l0bHkqIGluaXRpYWxpemVzIHRoZSBlbGVtZW50IGF0IGluZGV4IGB1YmZzZWMtXHUwMDNlbGF5ZXJfY291bnRgICh3aGljaCBpcyBlcXVhbCB0byBgaWApIHdpdGggdmFsdWVzIGZvciBgcGF0aGAsIGBtb3VudGVyX3NpZGAsIGFuZCBgZmRfc2lkYC4gYGxheWVyX2NvdW50YCBpcyB0aGVuIHNldCB0byBgdWJmc2VjLVx1MDAzZWxheWVyX2NvdW50ICsgMWAuIFNvLCBldmVyeSBlbGVtZW50IGZyb20gaW5kZXggYDBgIHVwIHRvIGBsYXllcl9jb3VudCAtIDFgIGdldHMgcHJvcGVybHkgaW5pdGlhbGl6ZWQsIGdpdmVuIHRoZSBsb29wLiBUaGF0J3MgZ29vZC5cblxuSG93ZXZlciwgdGhlIGNvbW1lbnQgYGZfcGF0aCwgbm90IGZpbGVfdXNlcl9wYXRoKCk6IHRoaXMgbGF5ZXIsIG5vdCB0aGUgdG9wLWxldmVsIGZpbGVgIG5lZWRzIGZ1cnRoZXIgc2NydXRpbnkgcmVnYXJkaW5nIHdoYXQgdGhpcyBpbXBsaWVzIHJlZ2FyZGluZyBvdmVyYWxsIGZpbGUgaGFuZGxpbmcuXG5cbk9rYXksIGxldCdzIGNvbnNpZGVyIHRoZSBjYXNlIHdoZW4gYCEodXNlcl9maWxlLVx1MDAzZWZfbW9kZSBcdTAwMjYgRk1PREVfQkFDS0lORylgLiBXaGF0IGhhcHBlbnMgdGhlbj8gVGhlIGNvZGUgc2ltcGx5IHNldHMgYGJmc2VjLVx1MDAzZXVmX3NpZGAgdG8gYHNlbGludXhfZmlsZV91c2VyX3NpZCh1c2VyX2ZpbGUpYCBhbmQgcmV0dXJucy4gSW4gdGhpcyBjYXNlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYGJmc2VjYCBpdHNlbGYgZ2V0cyBhbGxvY2F0ZWQgaW4gdGhhdCBzY2VuYXJpby4gU28sIEkgbmVlZCB0byB0cmFjayB0aGUgYWxsb2NhdGlvbiBvZiBgYmFja2luZ19maWxlX3NlY3VyaXR5YCBvciBgc2VsaW51eF9iYWNraW5nX2ZpbGVgIHRvIHNlZSB0aGUgZnVsbCBwaWN0dXJlLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBhbGxvY2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDI3LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQ4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMjI6MjU6MDMuNTM5MzE3NjY0WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDQ0MzY1NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmFja2luZ19maWxlLipzZWN1cml0eVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJzZWN1cml0eVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJzZWN1cml0eS9zZWN1cml0eS5jPTE4NT1zdGF0aWMgaW50IGxzbV9iYWNraW5nX2ZpbGVfYWxsb2Moc3RydWN0IGZpbGUgKmJhY2tpbmdfZmlsZSlcXG4tLVxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTg5LVxcdGlmICghbHNtX2JhY2tpbmdfZmlsZV9jYWNoZSkge1xcbnNlY3VyaXR5L3NlY3VyaXR5LmM6MTkwOlxcdFxcdGJhY2tpbmdfZmlsZV9zZXRfc2VjdXJpdHkoYmFja2luZ19maWxlLCBOVUxMKTtcXG5zZWN1cml0eS9zZWN1cml0eS5jLTE5MS1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTk0LVxcdGJsb2IgPSBrbWVtX2NhY2hlX3phbGxvYyhsc21fYmFja2luZ19maWxlX2NhY2hlLCBHRlBfS0VSTkVMKTtcXG5zZWN1cml0eS9zZWN1cml0eS5jOjE5NTpcXHRiYWNraW5nX2ZpbGVfc2V0X3NlY3VyaXR5KGJhY2tpbmdfZmlsZSwgYmxvYik7XFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xOTYtXFx0aWYgKCFibG9iKVxcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYz0yNDg1PXZvaWQgc2VjdXJpdHlfYmFja2luZ19maWxlX2ZyZWUoc3RydWN0IGZpbGUgKmJhY2tpbmdfZmlsZSlcXG5zZWN1cml0eS9zZWN1cml0eS5jLTI0ODYte1xcbnNlY3VyaXR5L3NlY3VyaXR5LmM6MjQ4NzpcXHR2b2lkICpibG9iID0gYmFja2luZ19maWxlX3NlY3VyaXR5KGJhY2tpbmdfZmlsZSk7XFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0yNDg4LVxcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0yNDkxLVxcdGlmIChibG9iKSB7XFxuc2VjdXJpdHkvc2VjdXJpdHkuYzoyNDkyOlxcdFxcdGJhY2tpbmdfZmlsZV9zZXRfc2VjdXJpdHkoYmFja2luZ19maWxlLCBOVUxMKTtcXG5zZWN1cml0eS9zZWN1cml0eS5jLTI0OTMtXFx0XFx0a21lbV9jYWNoZV9mcmVlKGxzbV9iYWNraW5nX2ZpbGVfY2FjaGUsIGJsb2IpO1xcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTE3NTc9c3RhdGljIGludCBfX2ZpbGVfaGFzX3Blcm0oY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQsIGNvbnN0IHN0cnVjdCBmaWxlICpmaWxlLFxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTE3NjctXFx0aWYgKGJmX3VzZXJfZmlsZSkge1xcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzoxNzY4OlxcdFxcdHN0cnVjdCBiYWNraW5nX2ZpbGVfc2VjdXJpdHlfc3RydWN0ICpiZnNlYztcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMTc2OS1cXHRcXHRjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aDtcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz0zODU5PXN0YXRpYyBpbnQgc2VsaW51eF9iYWNraW5nX2ZpbGVfYWxsb2Moc3RydWN0IGZpbGUgKmJhY2tpbmdfZmlsZSxcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zODYxLXtcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6Mzg2MjpcXHRzdHJ1Y3QgYmFja2luZ19maWxlX3NlY3VyaXR5X3N0cnVjdCAqYmZzZWM7XFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjM4NjM6XFx0Y29uc3Qgc3RydWN0IGJhY2tpbmdfZmlsZV9zZWN1cml0eV9zdHJ1Y3QgKnViZnNlYztcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6Mzg2NDpcXHRzdHJ1Y3QgYmFja2luZ19maWxlX3NlY3VyaXR5X2xheWVyICpsYXllcjtcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzg2NS1cXHR1MzIgaTtcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz0zOTA1PXN0YXRpYyB2b2lkIHNlbGludXhfYmFja2luZ19maWxlX2ZyZWUoc3RydWN0IGZpbGUgKmJhY2tpbmdfZmlsZSlcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzkwNi17XFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjM5MDc6XFx0c3RydWN0IGJhY2tpbmdfZmlsZV9zZWN1cml0eV9zdHJ1Y3QgKmJmc2VjO1xcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zOTA4LVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zOTA5LVxcdC8qIHNlY3VyaXR5X2JhY2tpbmdfZmlsZV9mcmVlKCkgbWF5IGJlIGNhbGxlZCB0d2ljZSBhZnRlciBhbiBlcnJvciAqL1xcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzozOTEwOlxcdGlmICghYmFja2luZ19maWxlX3NlY3VyaXR5KGJhY2tpbmdfZmlsZSkpXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTM5MTEtXFx0XFx0cmV0dXJuO1xcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTQwNDk9c3RhdGljIGludCBiYWNraW5nX21vdW50ZXJzX2hhc19wZXJtKGNvbnN0IHN0cnVjdCBmaWxlICpmaWxlLCB1MzIgYXYpXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTQwNTAte1xcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo0MDUxOlxcdGNvbnN0IHN0cnVjdCBiYWNraW5nX2ZpbGVfc2VjdXJpdHlfc3RydWN0ICpiZnNlYztcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6NDA1MjpcXHRjb25zdCBzdHJ1Y3QgYmFja2luZ19maWxlX3NlY3VyaXR5X2xheWVyICpsYXllcjtcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNDA1My1cXHRzdHJ1Y3QgY29tbW9uX2F1ZGl0X2RhdGEgYWQ7XFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9NzY0Mj1zdHJ1Y3QgbHNtX2Jsb2Jfc2l6ZXMgc2VsaW51eF9ibG9iX3NpemVzIF9fcm9fYWZ0ZXJfaW5pdCA9IHtcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy03NjQ1LVxcdC5sYnNfZmlsZSA9IHNpemVvZihzdHJ1Y3QgZmlsZV9zZWN1cml0eV9zdHJ1Y3QpLFxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo3NjQ2OlxcdC5sYnNfYmFja2luZ19maWxlID0gc2l6ZW9mKHN0cnVjdCBiYWNraW5nX2ZpbGVfc2VjdXJpdHlfc3RydWN0KSxcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNzY0Ny1cXHQubGJzX2lub2RlID0gc2l6ZW9mKHN0cnVjdCBpbm9kZV9zZWN1cml0eV9zdHJ1Y3QpLFxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL29ianNlYy5oPTgyPXN0cnVjdCBmaWxlX3NlY3VyaXR5X3N0cnVjdCB7XFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvb2Jqc2VjLmgtODgtXFxuc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL29ianNlYy5oOjg5OnN0cnVjdCBiYWNraW5nX2ZpbGVfc2VjdXJpdHlfbGF5ZXIge1xcbnNlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9vYmpzZWMuaC05MC1cXHRzdHJ1Y3QgcGF0aCBwYXRoOyAvKiB0aGlzIGxheWVyJ3MgcmVhbCBwYXRoICovXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvb2Jqc2VjLmgtOTQtXFxuc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL29ianNlYy5oOjk1OnN0cnVjdCBiYWNraW5nX2ZpbGVfc2VjdXJpdHlfc3RydWN0IHtcXG5zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvb2Jqc2VjLmgtOTYtXFx0dTMyIHVmX3NpZDsgLyogdG9wLWxldmVsIHVzZXIgZmlsZSBmc2VjLVxcdTAwM2VzaWQgKi9cXG5zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvb2Jqc2VjLmgtOTctXFx0dTMyIGxheWVyX2NvdW50OyAvKiBudW1iZXIgb2YgaW50ZXJtZWRpYXRlIGJhY2tpbmcgZmlsZXMgKi9cXG5zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvb2Jqc2VjLmg6OTg6XFx0c3RydWN0IGJhY2tpbmdfZmlsZV9zZWN1cml0eV9sYXllciAqbGF5ZXJzO1xcbnNlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9vYmpzZWMuaC05OS19O1xcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL29ianNlYy5oPTIwMz1zdGF0aWMgaW5saW5lIHN0cnVjdCBmaWxlX3NlY3VyaXR5X3N0cnVjdCAqc2VsaW51eF9maWxlKGNvbnN0IHN0cnVjdCBmaWxlICpmaWxlKVxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL29ianNlYy5oLTIwNy1cXG5zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvb2Jqc2VjLmg6MjA4OnN0YXRpYyBpbmxpbmUgc3RydWN0IGJhY2tpbmdfZmlsZV9zZWN1cml0eV9zdHJ1Y3QgKlxcbnNlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9vYmpzZWMuaC0yMDktc2VsaW51eF9iYWNraW5nX2ZpbGUoY29uc3Qgc3RydWN0IGZpbGUgKmJhY2tpbmdfZmlsZSlcXG5zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvb2Jqc2VjLmgtMjEwLXtcXG5zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvb2Jqc2VjLmg6MjExOlxcdHZvaWQgKmJsb2IgPSBiYWNraW5nX2ZpbGVfc2VjdXJpdHkoYmFja2luZ19maWxlKTtcXG5zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvb2Jqc2VjLmgtMjEyLVxcdHJldHVybiBibG9iICsgc2VsaW51eF9ibG9iX3NpemVzLmxic19iYWNraW5nX2ZpbGU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDIyOjI1OjA0LjM4Mzc1OTYwMVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNzQyMzczNjAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBTZWN1cml0eSBDb250ZXh0cyBpbiBhIEtlcm5lbCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGNvZGUuIEknbSBmb2N1c2luZyBvbiB0aGUgYHNlY3VyaXR5L3NlY3VyaXR5LmNgIGZpbGUsIHNwZWNpZmljYWxseSB0aGUgYGxzbV9iYWNraW5nX2ZpbGVfYWxsb2NgIGZ1bmN0aW9uLiBUaGUga2V5IGhlcmUgaXMgdGhlIGFsbG9jYXRpb24gb2YgYGJsb2JgIHVzaW5nIGBrbWVtX2NhY2hlX3phbGxvY2AuIEJlY2F1c2UgaXQncyB6ZXJvLWFsbG9jYXRlZCwgdGhlIGBiZnNlY2Agc3RydWN0dXJlIGlzIGluaXRpYWxpemVkIHdpdGggYWxsIHplcm9zLiBUaGlzIG1lYW5zIHRoYXQsIHVwb24gYWxsb2NhdGlvbiBpbiB0aGlzIGNvbnRleHQsIGBsYXllcl9jb3VudGAgd2lsbCBiZSB6ZXJvIGFuZCBgbGF5ZXJzYCB3aWxsIGJlIGBOVUxMYC4gVGhpcyBpcyBzaWduaWZpY2FudCBiZWNhdXNlLCBpZiB0aGUgYHVzZXJfZmlsZWAgZG9lcyBub3QgaGF2ZSB0aGUgYEZNT0RFX0JBQ0tJTkdgIGZsYWcgc2V0LCB3ZSB3aWxsIG1haW50YWluIHRoYXQgemVybyBzdGF0ZS5cblxuTm93LCBsZXQncyBtb3ZlIHRvIHRoZSBzdGFjayB2YXJpYWJsZXMgaW4gdGhlIHBhdGNoLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoZSBgYmFja2luZ19tb3VudGVyc19oYXNfcGVybWAgZnVuY3Rpb24uIExvb2tpbmcgYXQgaXQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYHN0cnVjdCBjb21tb25fYXVkaXRfZGF0YSBhZGAgaXMgYmVpbmcgdXNlZCB3aXRoaW4gdGhlIGxvb3AuIFRoZSBjb2RlIGl0ZXJhdGVzIHRocm91Z2ggYmFja2luZyBmaWxlIGxheWVycyBhbmQgY2hlY2tzIHBlcm1pc3Npb25zLiBJdCB1dGlsaXplcyBib3RoIGBhdmNfaGFzX3Blcm1gIGFuZCBgaW5vZGVfc2lkX2hhc19wZXJtYCwgd2hpY2ggYXBwZWFyIHRvIHRha2UgYGFkYCBhcyBhIHBhcmFtZXRlci4gSXQgc2VlbXMgdGhlIGNvZGUgaXMgdXNpbmcgdGhlIHBhdGggZGF0YSBpbiBgYWRgLCBhbmQgaWYgdGhvc2UgcGF0aHMgZG9uJ3QgbWFrZSBzZW5zZSwgdGhlbiB0aGVyZSBjb3VsZCBiZSBwcm9ibGVtcy5cblxuTXkgY29uY2VybiBpcyBob3cgYGFkYCBpcyBpbml0aWFsaXplZCBhbmQgdXNlZCB3aXRoaW4gdGhvc2UgYGF2Y19oYXNfcGVybWAgYW5kIGBpbm9kZV9zaWRfaGFzX3Blcm1gIGNhbGxzLiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIG9mIHRoZSB0eXBpY2FsIGluaXRpYWxpemF0aW9uIGFuZCB1c2FnZSBvZiBgY29tbW9uX2F1ZGl0X2RhdGFgIHdpdGhpbiB0aGUgU0VMaW51eCBob29rcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBhZGAgaXMgcG9wdWxhdGVkIGFuZCBpZiB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgb3IgdW5leHBlY3RlZCBiZWhhdmlvciB0aGF0IGNvdWxkIGFyaXNlIGZyb20gdGhlIHdheSB0aGUgcGF0aHMgYXJlIGJlaW5nIHBhc3NlZCBpbiBoZXJlLiBJJ2xsIG5lZWQgdG8gZ28gdGhyb3VnaCB0aGUgcmVsYXRlZCBzZWxpbnV4IGhvb2sgY2FsbHMgdG8gbWFrZSBzdXJlIHRoZXNlIGFyZ3VtZW50cyBjYW4ndCBiZSBtaXN1c2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MjA2LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDIyOjI1OjA4LjEyNjEzNTc1NFoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjY4MDMyNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWRcXFxcLnR5cGUgPVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJzZWN1cml0eS9zZWxpbnV4XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInNlY3VyaXR5L3NlbGludXgvaG9va3MuYz0xNjQzPXN0YXRpYyBpbnQgY3JlZF9oYXNfY2FwYWJpbGl0eShjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCxcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0xNjUyLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzoxNjUzOlxcdGFkLnR5cGUgPSBMU01fQVVESVRfREFUQV9DQVA7XFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTE2NTQtXFx0YWQudS5jYXAgPSBjYXA7XFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9MTcwNj1zdGF0aWMgaW5saW5lIGludCBkZW50cnlfaGFzX3Blcm0oY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQsXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMTcxMy1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6MTcxNDpcXHRhZC50eXBlID0gTFNNX0FVRElUX0RBVEFfREVOVFJZO1xcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0xNzE1LVxcdGFkLnUuZGVudHJ5ID0gZGVudHJ5O1xcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTE3MjU9c3RhdGljIGlubGluZSBpbnQgcGF0aF9oYXNfcGVybShjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCxcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0xNzMyLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzoxNzMzOlxcdGFkLnR5cGUgPSBMU01fQVVESVRfREFUQV9QQVRIO1xcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0xNzM0LVxcdGFkLnUucGF0aCA9ICpwYXRoO1xcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTE3NDI9c3RhdGljIGlubGluZSBpbnQgZmlsZV9wYXRoX2hhc19wZXJtKGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkLFxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTE3NDctXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjE3NDg6XFx0YWQudHlwZSA9IExTTV9BVURJVF9EQVRBX0ZJTEU7XFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTE3NDktXFx0YWQudS5maWxlID0gZmlsZTtcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz0xNzU3PXN0YXRpYyBpbnQgX19maWxlX2hhc19wZXJtKGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkLCBjb25zdCBzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0xNzc4LVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzoxNzc5OlxcdFxcdGFkLnR5cGUgPSBMU01fQVVESVRfREFUQV9QQVRIO1xcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0xNzgwLVxcdFxcdGFkLnUucGF0aCA9ICpwYXRoO1xcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTE3ODYtXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjE3ODc6XFx0XFx0YWQudHlwZSA9IExTTV9BVURJVF9EQVRBX0ZJTEU7XFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTE3ODgtXFx0XFx0YWQudS5maWxlID0gZmlsZTtcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz0xODU0PXN0YXRpYyBpbnQgbWF5X2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0xODY5LVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzoxODcwOlxcdGFkLnR5cGUgPSBMU01fQVVESVRfREFUQV9ERU5UUlk7XFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTE4NzEtXFx0YWQudS5kZW50cnkgPSBkZW50cnk7XFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9MTg5OD1zdGF0aWMgaW50IG1heV9saW5rKHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTE5MTEtXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjE5MTI6XFx0YWQudHlwZSA9IExTTV9BVURJVF9EQVRBX0RFTlRSWTtcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMTkxMy1cXHRhZC51LmRlbnRyeSA9IGRlbnRyeTtcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz0xOTQxPXN0YXRpYyBpbmxpbmUgaW50IG1heV9yZW5hbWUoc3RydWN0IGlub2RlICpvbGRfZGlyLFxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTE5NTctXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjE5NTg6XFx0YWQudHlwZSA9IExTTV9BVURJVF9EQVRBX0RFTlRSWTtcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMTk1OS1cXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz0yMTExPXN0YXRpYyBpbnQgc2VsaW51eF9iaW5kZXJfdHJhbnNmZXJfZmlsZShjb25zdCBzdHJ1Y3QgY3JlZCAqZnJvbSxcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0yMTIxLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzoyMTIyOlxcdGFkLnR5cGUgPSBMU01fQVVESVRfREFUQV9QQVRIO1xcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0yMTIzLVxcdGFkLnUucGF0aCA9IGZpbGUtXFx1MDAzZWZfcGF0aDtcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz0yMzQ0PXN0YXRpYyBpbnQgc2VsaW51eF9icHJtX2NyZWRzX2Zvcl9leGVjKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMjQxMS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6MjQxMjpcXHRhZC50eXBlID0gTFNNX0FVRElUX0RBVEFfRklMRTtcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMjQxMy1cXHRhZC51LmZpbGUgPSBicHJtLVxcdTAwM2VmaWxlO1xcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTI3OTM9c3RhdGljIGludCBzZWxpbnV4X3NiX2tlcm5fbW91bnQoY29uc3Qgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0yNzk3LVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzoyNzk4OlxcdGFkLnR5cGUgPSBMU01fQVVESVRfREFUQV9ERU5UUlk7XFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTI3OTktXFx0YWQudS5kZW50cnkgPSBzYi1cXHUwMDNlc19yb290O1xcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTI4MDM9c3RhdGljIGludCBzZWxpbnV4X3NiX3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMjgwNy1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6MjgwODpcXHRhZC50eXBlID0gTFNNX0FVRElUX0RBVEFfREVOVFJZO1xcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0yODA5LVxcdGFkLnUuZGVudHJ5ID0gZGVudHJ5LVxcdTAwM2VkX3NiLVxcdTAwM2VzX3Jvb3Q7XFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9MzAxNz1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzA3Mi1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6MzA3MzpcXHRhZC50eXBlID0gTFNNX0FVRElUX0RBVEFfQU5PTklOT0RFO1xcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMDc0LVxcdGFkLnUuYW5vbmNsYXNzID0gbmFtZSA/IChjb25zdCBjaGFyICopbmFtZS1cXHUwMDNlbmFtZSA6IFxcXCI/XFxcIjtcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz0zMTMxPXN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9mb2xsb3dfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzEzNy1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6MzEzODpcXHRhZC50eXBlID0gTFNNX0FVRElUX0RBVEFfREVOVFJZO1xcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMTM5LVxcdGFkLnUuZGVudHJ5ID0gZGVudHJ5O1xcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTMxNDc9c3RhdGljIG5vaW5saW5lIGludCBhdWRpdF9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzE1My1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6MzE1NDpcXHRhZC50eXBlID0gTFNNX0FVRElUX0RBVEFfSU5PREU7XFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTMxNTUtXFx0YWQudS5pbm9kZSA9IGlub2RlO1xcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTMzNzY9c3RhdGljIGludCBzZWxpbnV4X2lub2RlX3NldHhhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTM0MDAtXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjM0MDE6XFx0YWQudHlwZSA9IExTTV9BVURJVF9EQVRBX0RFTlRSWTtcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzQwMi1cXHRhZC51LmRlbnRyeSA9IGRlbnRyeTtcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz0zNTYyPXN0YXRpYyBpbnQgc2VsaW51eF9wYXRoX25vdGlmeShjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwgdTY0IG1hc2ssXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzU2OS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6MzU3MDpcXHRhZC50eXBlID0gTFNNX0FVRElUX0RBVEFfUEFUSDtcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzU3MS1cXHRhZC51LnBhdGggPSAqcGF0aDtcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz0zOTI0PXN0YXRpYyBpbnQgaW9jdGxfaGFzX3Blcm0oY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQsIHN0cnVjdCBmaWxlICpmaWxlLFxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTM5MzYtXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjM5Mzc6XFx0YWQudHlwZSA9IExTTV9BVURJVF9EQVRBX0lPQ1RMX09QO1xcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zOTM4LVxcdGFkLnUub3AgPSBcXHUwMDI2aW9jdGw7XFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9NDA0OT1zdGF0aWMgaW50IGJhY2tpbmdfbW91bnRlcnNfaGFzX3Blcm0oY29uc3Qgc3RydWN0IGZpbGUgKmZpbGUsIHUzMiBhdilcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy00MDY1LVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo0MDY2OlxcdFxcdGFkLnR5cGUgPSBMU01fQVVESVRfREFUQV9QQVRIO1xcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy00MDY3LVxcdFxcdGFkLnUucGF0aCA9IGxheWVyLVxcdTAwM2VwYXRoO1xcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTQxNDY9c3RhdGljIGludCBzZWxpbnV4X21tYXBfZmlsZV9jb21tb24oc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgcHJvdCxcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy00MTU0LVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo0MTU1OlxcdFxcdGFkLnR5cGUgPSBMU01fQVVESVRfREFUQV9GSUxFO1xcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy00MTU2LVxcdFxcdGFkLnUuZmlsZSA9IGZpbGU7XFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9NDQ4OT1zdGF0aWMgaW50IHNlbGludXhfa2VybmVsX21vZHVsZV9yZXF1ZXN0KGNoYXIgKmttb2RfbmFtZSlcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy00NDkyLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo0NDkzOlxcdGFkLnR5cGUgPSBMU01fQVVESVRfREFUQV9LTU9EO1xcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy00NDk0LVxcdGFkLnUua21vZF9uYW1lID0ga21vZF9uYW1lO1xcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTQ1MDA9c3RhdGljIGludCBzZWxpbnV4X2tlcm5lbF9sb2FkX2Zyb21fZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgdTMyIHJlcXVlc3RlZClcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy00NTEwLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo0NTExOlxcdGFkLnR5cGUgPSBMU01fQVVESVRfREFUQV9GSUxFO1xcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy00NTEyLVxcdGFkLnUuZmlsZSA9IGZpbGU7XFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9NTEyMD1zdGF0aWMgaW50IF9fc2VsaW51eF9zb2NrZXRfYmluZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrYWRkciAqYWRkcmVzcywgaW50IGFkZHJsZW4pXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNTE4NS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6NTE4NjpcXHRcXHRhZC50eXBlID0gTFNNX0FVRElUX0RBVEFfTkVUO1xcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy01MTg3LVxcdFxcdGFkLnUubmV0ID0gXFx1MDAyNm5ldDtcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz01MjU5PXN0YXRpYyBpbnQgc2VsaW51eF9zb2NrZXRfY29ubmVjdF9oZWxwZXIoc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTUzMzAtXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjUzMzE6XFx0XFx0YWQudHlwZSA9IExTTV9BVURJVF9EQVRBX05FVDtcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNTMzMi1cXHRcXHRhZC51Lm5ldCA9IFxcdTAwMjZuZXQ7XFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9NjM2MT1zdGF0aWMgaW50IG5sbXNnX3NvY2tfaGFzX2V4dGVuZGVkX3Blcm1zKHN0cnVjdCBzb2NrICpzaywgdTMyIHBlcm1zLCB1MTYgbmxtc2dfdHlwZSlcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy02MzcwLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo2MzcxOlxcdGFkLnR5cGUgPSBMU01fQVVESVRfREFUQV9OTE1TR1RZUEU7XFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTYzNzItXFx0YWQudS5ubG1zZ190eXBlID0gbmxtc2dfdHlwZTtcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz02NDU1PXN0YXRpYyBpbnQgaXBjX2hhc19wZXJtKHN0cnVjdCBrZXJuX2lwY19wZXJtICppcGNfcGVybXMsXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNjQ2My1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6NjQ2NDpcXHRhZC50eXBlID0gTFNNX0FVRElUX0RBVEFfSVBDO1xcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy02NDY1LVxcdGFkLnUuaXBjX2lkID0gaXBjX3Blcm1zLVxcdTAwM2VrZXk7XFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9NjQ4MT1zdGF0aWMgaW50IHNlbGludXhfbXNnX3F1ZXVlX2FsbG9jX3NlY3VyaXR5KHN0cnVjdCBrZXJuX2lwY19wZXJtICptc3EpXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNjQ4OS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6NjQ5MDpcXHRhZC50eXBlID0gTFNNX0FVRElUX0RBVEFfSVBDO1xcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy02NDkxLVxcdGFkLnUuaXBjX2lkID0gbXNxLVxcdTAwM2VrZXk7XFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9NjQ5Nz1zdGF0aWMgaW50IHNlbGludXhfbXNnX3F1ZXVlX2Fzc29jaWF0ZShzdHJ1Y3Qga2Vybl9pcGNfcGVybSAqbXNxLCBpbnQgbXNxZmxnKVxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTY1MDQtXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjY1MDU6XFx0YWQudHlwZSA9IExTTV9BVURJVF9EQVRBX0lQQztcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNjUwNi1cXHRhZC51LmlwY19pZCA9IG1zcS1cXHUwMDNla2V5O1xcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTY1NDA9c3RhdGljIGludCBzZWxpbnV4X21zZ19xdWV1ZV9tc2dzbmQoc3RydWN0IGtlcm5faXBjX3Blcm0gKm1zcSwgc3RydWN0IG1zZ19tc2cgKm1zZywgaW50IG1zcWZsZylcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy02NTY0LVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo2NTY1OlxcdGFkLnR5cGUgPSBMU01fQVVESVRfREFUQV9JUEM7XFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTY1NjYtXFx0YWQudS5pcGNfaWQgPSBtc3EtXFx1MDAzZWtleTtcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz02NTgzPXN0YXRpYyBpbnQgc2VsaW51eF9tc2dfcXVldWVfbXNncmN2KHN0cnVjdCBrZXJuX2lwY19wZXJtICptc3EsIHN0cnVjdCBtc2dfbXNnICptc2csXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNjU5NS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6NjU5NjpcXHRhZC50eXBlID0gTFNNX0FVRElUX0RBVEFfSVBDO1xcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy02NTk3LVxcdGFkLnUuaXBjX2lkID0gbXNxLVxcdTAwM2VrZXk7XFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9NjYwOD1zdGF0aWMgaW50IHNlbGludXhfc2htX2FsbG9jX3NlY3VyaXR5KHN0cnVjdCBrZXJuX2lwY19wZXJtICpzaHApXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNjYxNi1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6NjYxNzpcXHRhZC50eXBlID0gTFNNX0FVRElUX0RBVEFfSVBDO1xcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy02NjE4LVxcdGFkLnUuaXBjX2lkID0gc2hwLVxcdTAwM2VrZXk7XFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9NjYyND1zdGF0aWMgaW50IHNlbGludXhfc2htX2Fzc29jaWF0ZShzdHJ1Y3Qga2Vybl9pcGNfcGVybSAqc2hwLCBpbnQgc2htZmxnKVxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTY2MzEtXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjY2MzI6XFx0YWQudHlwZSA9IExTTV9BVURJVF9EQVRBX0lQQztcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNjYzMy1cXHRhZC51LmlwY19pZCA9IHNocC1cXHUwMDNla2V5O1xcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTY2ODY9c3RhdGljIGludCBzZWxpbnV4X3NlbV9hbGxvY19zZWN1cml0eShzdHJ1Y3Qga2Vybl9pcGNfcGVybSAqc21hKVxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTY2OTQtXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjY2OTU6XFx0YWQudHlwZSA9IExTTV9BVURJVF9EQVRBX0lQQztcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNjY5Ni1cXHRhZC51LmlwY19pZCA9IHNtYS1cXHUwMDNla2V5O1xcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTY3MDI9c3RhdGljIGludCBzZWxpbnV4X3NlbV9hc3NvY2lhdGUoc3RydWN0IGtlcm5faXBjX3Blcm0gKnNtYSwgaW50IHNlbWZsZylcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy02NzA5LVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo2NzEwOlxcdGFkLnR5cGUgPSBMU01fQVVESVRfREFUQV9JUEM7XFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTY3MTEtXFx0YWQudS5pcGNfaWQgPSBzbWEtXFx1MDAzZWtleTtcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz03MjQwPXN0YXRpYyBpbnQgc2VsaW51eF9pYl9wa2V5X2FjY2Vzcyh2b2lkICppYl9zZWMsIHU2NCBzdWJuZXRfcHJlZml4LCB1MTYgcGtleV92YWwpXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNzI1MS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6NzI1MjpcXHRhZC50eXBlID0gTFNNX0FVRElUX0RBVEFfSUJQS0VZO1xcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy03MjUzLVxcdGlicGtleS5zdWJuZXRfcHJlZml4ID0gc3VibmV0X3ByZWZpeDtcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz03MjYxPXN0YXRpYyBpbnQgc2VsaW51eF9pYl9lbmRwb3J0X21hbmFnZV9zdWJuZXQodm9pZCAqaWJfc2VjLCBjb25zdCBjaGFyICpkZXZfbmFtZSxcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy03Mjc1LVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo3Mjc2OlxcdGFkLnR5cGUgPSBMU01fQVVESVRfREFUQV9JQkVORFBPUlQ7XFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTcyNzctXFx0aWJlbmRwb3J0LmRldl9uYW1lID0gZGV2X25hbWU7XFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9NzYwOT1zdGF0aWMgaW50IHNlbGludXhfdXJpbmdfY21kKHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZClcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy03NjE1LVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo3NjE2OlxcdGFkLnR5cGUgPSBMU01fQVVESVRfREFUQV9GSUxFO1xcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy03NjE3LVxcdGFkLnUuZmlsZSA9IGZpbGU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDIyOjI1OjA4LjE5Mjk0MzM2M1oiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4Njc3Nzc0NTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IE5vIE5lZWQgSGVyZSoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBjYXJlZnVsbHkgcmV2aWV3aW5nIHRoaXMgZGlmZiwgZm9jdXNpbmcgb24gcG90ZW50aWFsIEtNU0FOIG5lZWRzLiBUaGUgY3J1Y2lhbCBwaWVjZXMsIGBhZC50eXBlYCBhbmQgYGFkLnUucGF0aGAsIGFyZSBzZXQgY29uc2lzdGVudGx5LCBtYXRjaGluZyBhbGwgdGhlIG90aGVyIGF1ZGl0IGRhdGEgdXNhZ2VzIHRocm91Z2hvdXQgdGhlIHJlbGV2YW50IGBzZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNgIGZpbGUuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuXG5cbk5vdywgbGV0J3MgYnJlYWsgZG93biB0aGUgZnVuY3Rpb25zIGludm9sdmVkIGFuZCBhc3Nlc3MgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBvciBrZXJuZWwtdG8tdXNlciBzcGFjZSBkYXRhIGxlYWtzLiBgaW5vZGVfc2lkX2hhc19wZXJtYCBsb29rcyBjbGVhbjsgaXQgdGFrZXMgdGhlIG5lZWRlZCBhdWRpdCBkYXRhIGJ1dCBzZWVtcyB0byBqdXN0IHdyYXAgYSBjYWxsIHRvIGBhdmNfaGFzX3Blcm1gLCBhIHJlZmFjdG9yIHNwbGl0dGluZyBgaW5vZGVfaGFzX3Blcm1gLiBObyBpc3N1ZXMgdGhlcmUuIGBzZWxpbnV4X2ZpbGVfdXNlcl9zaWRgIGFwcGVhcnMgdG8gaGFuZGxlIGZpbGUgbWV0YWRhdGEgY29ycmVjdGx5LlxuXG5UaGUgbW9yZSBjb21wbGV4IGFyZWEgaXMgYXJvdW5kIHRoZSBiYWNraW5nIGZpbGUgc3RydWN0dXJlcywgZXNwZWNpYWxseSBgc2VsaW51eF9iYWNraW5nX2ZpbGVfYWxsb2NgLCBgc2VsaW51eF9iYWNraW5nX2ZpbGVfZnJlZWAsIGFuZCBgc2VsaW51eF9maWxlX21wcm90ZWN0YC4gQWZ0ZXIgZGlnZ2luZyBpbiwgSSdtIGNvbmZpZGVudCB0aGF0IHRoZSBjcml0aWNhbCBkYXRhIGluIGBiZnNlYy1cdTAwM2VsYXllcnNgIGFyZSAqZnVsbHkqIGluaXRpYWxpemVkLiBgc2VsaW51eF9iYWNraW5nX2ZpbGVfYWxsb2NgIGFsbG9jYXRlcyB0aGUgbGF5ZXJzLCBjb3BpZXMgZXhpc3Rpbmcgb25lcywgYW5kIHBvcHVsYXRlcyB0aGUgZGF0YSwgaW5jbHVkaW5nIGEgcmVmY291bnQgYnVtcCBmb3IgcGF0aHMsIG1ha2luZyBzdXJlIG5vdGhpbmcgaXMgbGVmdCBkYW5nbGluZy4gYHNlbGludXhfYmFja2luZ19maWxlX2ZyZWVgIGNvcnJlY3RseSBmcmVlcyBhbmQgcHV0cyB0aGUgcGF0aCBmb3IgZWFjaCBsYXllci4gVGhlIHBlcm1pc3Npb24gY2hlY2tzIGluIGBiYWNraW5nX21vdW50ZXJzX2hhc19wZXJtYCBhbHNvIGxvb2sgb2theS4gQW5kIGZpbmFsbHksIGBzZWxpbnV4X2ZpbGVfbXByb3RlY3RgIHNpbXBseSBhZGRzIGEgY2FsbCB0byBiYWNraW5nIG1vdW50ZXJzLiBObyBvYnZpb3VzIGlzc3VlcyB0aGVyZS4gVGhlIGhlbHBlciBmdW5jdGlvbiBgZmlsZV9tYXBfcHJvdF90b19hdmAganVzdCBtYXBzIHByb3RlY3Rpb24gYml0cy5cblxuSSd2ZSBzcGVjaWZpY2FsbHkgbG9va2VkIGZvciBkYXRhIGNvcGllcyB0byB1c2Vyc3BhY2Ug4oCTIG5vbmUuIEkndmUgYWxzbyBjaGVja2VkIGNhcmVmdWxseSBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UuIEFsbCBgYmZzZWMtXHUwMDNlbGF5ZXJzYCBlbnRyaWVzIGFyZSBmdWxseSBpbml0aWFsaXplZCwgYW5kIGBiZnNlY2AgaXRzZWxmIGlzIHplcm9lZCBkdXJpbmcgYWxsb2NhdGlvbi4gVGhlIGNvbW1vbiBhdWRpdCBkYXRhIChgY29tbW9uX2F1ZGl0X2RhdGEgYWRgKSBpcyBhbHNvIHBvcHVsYXRlZCBjb3JyZWN0bHksIGZvbGxvd2luZyB0aGUgc3RhbmRhcmQgU0VMaW51eCBwYXR0ZXJuLlxuXG5Dcml0aWNhbGx5LCB0aGVyZSBhcmUgbm8ga2VybmVsLXRvLXVzZXIgY29waWVzIHRoYXQgSSBjYW4gc2VlIChgY29weV90b191c2VyYCwgYHB1dF91c2VyYCwgc29ja2V0IG9wdGlvbnMsIGV0Yy4pLiBUaGVyZSdzIG5vIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFuZCBhbGwgc3RydWN0dXJlcyBhcmUgZWl0aGVyIHplcm9lZCBvciBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG5cbkZyYW5rbHksIEkgdGhpbmsgYW55IGJ1Z3MgaGVyZSB3b3VsZCBtYW5pZmVzdCBhcyBtZW1vcnkgY29ycnVwdGlvbiwgdXNlLWFmdGVyLWZyZWUsIG9yIHJlZmNvdW50aW5nIGlzc3Vlcy4gVGhvc2UgYXJlIGFscmVhZHkgd2VsbC1jb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgY2hlY2tzLiBCYXNlZCBvbiB0aGUgY3JpdGVyaWEsIHRoaXMgcGF0Y2ggcmVhbGx5IGJvaWxzIGRvd24gdG8gdGhlIHR5cGVzIG9mIGJ1Z3MgdGhhdCBLQVNBTiBpcyBidWlsdCB0byBmaW5kLlxuXG5TbywgbGV0J3MgZ28gYmFjayBvdmVyIHRoZSBjcml0ZXJpYSAqYWdhaW4qLlxuXG4xLiAgS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlIHdoZXJlIGZpZWxkcyBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLiBOby5cbjIuICBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMuIE5vLlxuMy4gIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4gTm8gKGFsbCBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQpLlxuNC4gIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4gTm8uXG5cblRoaXMgZmFsbHMgc3F1YXJlbHkgdW5kZXIgdGhlIFwiS0FTQU4gY292ZXJzIGl0XCIgY2F0ZWdvcnkuIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkIG9yIGluaXRpYWxpemVkLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblRoZXJlZm9yZSwgS01TQU4gaXMgbm90IG5lZWRlZCBoZXJlLiBLQVNBTiBpcyBzdWZmaWNpZW50LiBJJ20gcmVhZHkgdG8gbWFyayBgTmVlZHNLTVNBTj1mYWxzZWAgYW5kIHN1Ym1pdCB0aGUgZmluYWwgcmVzcG9uc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNjI2LCJPdXRwdXRUb2tlbnMiOjIzNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMjI6MjU6MTYuODcwNzIwMjkxWiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ1NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBleHRlbmRzIFNFTGludXggYmFja2luZyBmaWxlIHRyYWNraW5nIHRvIGhhbmRsZSBtdWx0aXBsZSBsYXllcnMgaW4gc3RhY2tlZCBmaWxlc3lzdGVtcyAoc3VjaCBhcyBvdmVybGF5ZnMgYW5kIGVyb2ZzKSBieSBpbnRyb2R1Y2luZyBpbnRlcm1lZGlhdGUgYmFja2luZyBsYXllciBzdHJ1Y3R1cmVzLCByZWNvcmRpbmcgcGF0aHMgYW5kIFNJRHMsIGFuZCB2YWxpZGF0aW5nIG1vdW50ZXIgcGVybWlzc2lvbnMgZHVyaW5nIGZpbGUgbW1hcC9tcHJvdGVjdCBvcGVyYXRpb25zLlxcblxcbkFsbCBuZXdseSBhbGxvY2F0ZWQgaGVhcCBzdHJ1Y3R1cmVzIChgYmFja2luZ19maWxlX3NlY3VyaXR5X2xheWVyYCBhcnJheXMpIGFyZSBleHBsaWNpdGx5IGFuZCBmdWxseSBpbml0aWFsaXplZCB1cG9uIGFsbG9jYXRpb24gYmVmb3JlIHVzZSBvciBjb3B5aW5nLiBUaGUgY29udGFpbmluZyBgYmFja2luZ19maWxlX3NlY3VyaXR5X3N0cnVjdGAgYmxvYiBpcyBhbGxvY2F0ZWQgdmlhIGBrbWVtX2NhY2hlX3phbGxvY2AuIFRoZSBhdWRpdCBkYXRhIHN0YWNrIHN0cnVjdHVyZSBgc3RydWN0IGNvbW1vbl9hdWRpdF9kYXRhIGFkYCBpcyBwcm9wZXJseSBjb25maWd1cmVkIHdpdGggYHR5cGUgPSBMU01fQVVESVRfREFUQV9QQVRIYCBhbmQgdGhlIHBhdGggdW5pb24gbWVtYmVyIGFzc2lnbmVkIGJlZm9yZSBwYXNzaW5nIHRvIHRoZSBhdWRpdC9BVkMgc3Vic3lzdGVtLiBObyBkYXRhIGlzIGV4cG9zZWQgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCB0aGVyZSBpcyBubyBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBtZW1vcnkuIFBvdGVudGlhbCByaXNrcyBpbiB0aGlzIHBhdGNoIChzdWNoIGFzIGxpZmV0aW1lIGlzc3VlcywgcmVmY291bnRpbmcsIHBhdGggbWFuYWdlbWVudCwgb3Igb3V0LW9mLWJvdW5kcyBpbmRleGluZykgZmFsbCB3aXRoaW4gdGhlIHNjb3BlIG9mIEtBU0FOIHJhdGhlciB0aGFuIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGV4dGVuZHMgU0VMaW51eCBiYWNraW5nIGZpbGUgdHJhY2tpbmcgdG8gaGFuZGxlIG11bHRpcGxlIGxheWVycyBpbiBzdGFja2VkIGZpbGVzeXN0ZW1zIChzdWNoIGFzIG92ZXJsYXlmcyBhbmQgZXJvZnMpIGJ5IGludHJvZHVjaW5nIGludGVybWVkaWF0ZSBiYWNraW5nIGxheWVyIHN0cnVjdHVyZXMsIHJlY29yZGluZyBwYXRocyBhbmQgU0lEcywgYW5kIHZhbGlkYXRpbmcgbW91bnRlciBwZXJtaXNzaW9ucyBkdXJpbmcgZmlsZSBtbWFwL21wcm90ZWN0IG9wZXJhdGlvbnMuXFxuXFxuQWxsIG5ld2x5IGFsbG9jYXRlZCBoZWFwIHN0cnVjdHVyZXMgKGBiYWNraW5nX2ZpbGVfc2VjdXJpdHlfbGF5ZXJgIGFycmF5cykgYXJlIGV4cGxpY2l0bHkgYW5kIGZ1bGx5IGluaXRpYWxpemVkIHVwb24gYWxsb2NhdGlvbiBiZWZvcmUgdXNlIG9yIGNvcHlpbmcuIFRoZSBjb250YWluaW5nIGBiYWNraW5nX2ZpbGVfc2VjdXJpdHlfc3RydWN0YCBibG9iIGlzIGFsbG9jYXRlZCB2aWEgYGttZW1fY2FjaGVfemFsbG9jYC4gVGhlIGF1ZGl0IGRhdGEgc3RhY2sgc3RydWN0dXJlIGBzdHJ1Y3QgY29tbW9uX2F1ZGl0X2RhdGEgYWRgIGlzIHByb3Blcmx5IGNvbmZpZ3VyZWQgd2l0aCBgdHlwZSA9IExTTV9BVURJVF9EQVRBX1BBVEhgIGFuZCB0aGUgcGF0aCB1bmlvbiBtZW1iZXIgYXNzaWduZWQgYmVmb3JlIHBhc3NpbmcgdG8gdGhlIGF1ZGl0L0FWQyBzdWJzeXN0ZW0uIE5vIGRhdGEgaXMgZXhwb3NlZCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIHRoZXJlIGlzIG5vIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gUG90ZW50aWFsIHJpc2tzIGluIHRoaXMgcGF0Y2ggKHN1Y2ggYXMgbGlmZXRpbWUgaXNzdWVzLCByZWZjb3VudGluZywgcGF0aCBtYW5hZ2VtZW50LCBvciBvdXQtb2YtYm91bmRzIGluZGV4aW5nKSBmYWxsIHdpdGhpbiB0aGUgc2NvcGUgb2YgS0FTQU4gcmF0aGVyIHRoYW4gS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowdbkr6[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-29 21:40:23 +0000 UTC FinishedAt: 2026-08-29 22:25:18 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "f78e0cb3fd377cfe90fe07a0eeec20584c0f4907", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SECURITY", "SECURITY_SELINUX", "SECURITY_NETWORK", "AUDIT", "NET", "INET", "OVERLAY_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "f78e0cb3fd377cfe90fe07a0eeec20584c0f4907", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SECURITY", "SECURITY_SELINUX", "SECURITY_NETWORK", "AUDIT", "NET", "INET", "OVERLAY_FS" ], "series_id": "d7a822de-d326-49fc-94de-8b42cd5eee3e" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "selinux_backing_file_alloc", "selinux_backing_file_free", "selinux_file_mprotect", "security_backing_file_alloc", "security_backing_file_free", "security_file_mprotect" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI5IDIyOjIzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NFQ1VSSVRZJiMzNDssCiAgICAmIzM0O1NFQ1VSSVRZX1NFTElOVVgmIzM0OywKICAgICYjMzQ7U0VDVVJJVFlfTkVUV09SSyYjMzQ7LAogICAgJiMzNDtBVURJVCYjMzQ7LAogICAgJiMzNDtORVQmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtPVkVSTEFZX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2VsaW51eF9iYWNraW5nX2ZpbGVfYWxsb2MmIzM0OywKICAgICYjMzQ7c2VsaW51eF9iYWNraW5nX2ZpbGVfZnJlZSYjMzQ7LAogICAgJiMzNDtzZWxpbnV4X2ZpbGVfbXByb3RlY3QmIzM0OywKICAgICYjMzQ7c2VjdXJpdHlfYmFja2luZ19maWxlX2FsbG9jJiMzNDssCiAgICAmIzM0O3NlY3VyaXR5X2JhY2tpbmdfZmlsZV9mcmVlJiMzNDssCiAgICAmIzM0O3NlY3VyaXR5X2ZpbGVfbXByb3RlY3QmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBleHRlbmRzIFNFTGludXggYmFja2luZyBmaWxlIHRyYWNraW5nIHRvIGhhbmRsZSBtdWx0aXBsZSBsYXllcnMgaW4gc3RhY2tlZCBmaWxlc3lzdGVtcyAoc3VjaCBhcyBvdmVybGF5ZnMgYW5kIGVyb2ZzKSBieSBpbnRyb2R1Y2luZyBpbnRlcm1lZGlhdGUgYmFja2luZyBsYXllciBzdHJ1Y3R1cmVzLCByZWNvcmRpbmcgcGF0aHMgYW5kIFNJRHMsIGFuZCB2YWxpZGF0aW5nIG1vdW50ZXIgcGVybWlzc2lvbnMgZHVyaW5nIGZpbGUgbW1hcC9tcHJvdGVjdCBvcGVyYXRpb25zLlxuXG5BbGwgbmV3bHkgYWxsb2NhdGVkIGhlYXAgc3RydWN0dXJlcyAoYGJhY2tpbmdfZmlsZV9zZWN1cml0eV9sYXllcmAgYXJyYXlzKSBhcmUgZXhwbGljaXRseSBhbmQgZnVsbHkgaW5pdGlhbGl6ZWQgdXBvbiBhbGxvY2F0aW9uIGJlZm9yZSB1c2Ugb3IgY29weWluZy4gVGhlIGNvbnRhaW5pbmcgYGJhY2tpbmdfZmlsZV9zZWN1cml0eV9zdHJ1Y3RgIGJsb2IgaXMgYWxsb2NhdGVkIHZpYSBga21lbV9jYWNoZV96YWxsb2NgLiBUaGUgYXVkaXQgZGF0YSBzdGFjayBzdHJ1Y3R1cmUgYHN0cnVjdCBjb21tb25fYXVkaXRfZGF0YSBhZGAgaXMgcHJvcGVybHkgY29uZmlndXJlZCB3aXRoIGB0eXBlID0gTFNNX0FVRElUX0RBVEFfUEFUSGAgYW5kIHRoZSBwYXRoIHVuaW9uIG1lbWJlciBhc3NpZ25lZCBiZWZvcmUgcGFzc2luZyB0byB0aGUgYXVkaXQvQVZDIHN1YnN5c3RlbS4gTm8gZGF0YSBpcyBleHBvc2VkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgdGhlcmUgaXMgbm8gYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBQb3RlbnRpYWwgcmlza3MgaW4gdGhpcyBwYXRjaCAoc3VjaCBhcyBsaWZldGltZSBpc3N1ZXMsIHJlZmNvdW50aW5nLCBwYXRoIG1hbmFnZW1lbnQsIG9yIG91dC1vZi1ib3VuZHMgaW5kZXhpbmcpIGZhbGwgd2l0aGluIHRoZSBzY29wZSBvZiBLQVNBTiByYXRoZXIgdGhhbiBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0cmFja2luZyBhbmQgZW5mb3JjaW5nIFNFTGludXggcGVybWlzc2lvbnMgYWNyb3NzIG11bHRpLWxheWVyIGJhY2tpbmcgZmlsZXMgKHN1Y2ggYXMgdGhvc2UgdXNlZCBieSBvdmVybGF5ZnMgYW5kIGVyb2ZzKS4gSXQgaW1wbGVtZW50cyBkeW5hbWljIGFsbG9jYXRpb24gYW5kIHJlZmVyZW5jZSB0cmFja2luZyBvZiBpbnRlcm1lZGlhdGUgYmFja2luZyBmaWxlIGxheWVycyBpbiBzZWxpbnV4X2JhY2tpbmdfZmlsZV9hbGxvYywgY2xlYW51cCBpbiBzZWxpbnV4X2JhY2tpbmdfZmlsZV9mcmVlLCBhbmQgbXVsdGktbGF5ZXIgcGVybWlzc2lvbiBjaGVja3MgZHVyaW5nIG1wcm90ZWN0IGluIHNlbGludXhfZmlsZV9tcHJvdGVjdC4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgY29yZSBzZWN1cml0eSBhbmQgZmlsZXN5c3RlbSBpbnRlcmFjdGlvbnMgYW5kIGFyZSB3ZWxsIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMjI6MjM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBmYTdhMGI1NTA2MjJjNjQ1ZDYyY2Y5YTM2NDk4YTdjYWJkNzI2Y2I2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMjkgMjI6MjM6MjEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jXG5pbmRleCAwMzVhYWYxMTNkMWRhLi5iNjc1MGVkY2M0NzgzIDEwMDY0NFxuLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNcbkBAIC0xNjc0LDI2ICYjNDM7MTY3NCwzMiBAQCBzdGF0aWMgaW50IGNyZWRfaGFzX2NhcGFiaWxpdHkoY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQsXG4gXHRyZXR1cm4gcmM7XG4gfVxuIFxuLS8qIENoZWNrIHdoZXRoZXIgYSB0YXNrIGhhcyBhIHBhcnRpY3VsYXIgcGVybWlzc2lvbiB0byBhbiBpbm9kZS5cbi0gICBUaGUgJiMzOTthZHAmIzM5OyBwYXJhbWV0ZXIgaXMgb3B0aW9uYWwgYW5kIGFsbG93cyBvdGhlciBhdWRpdFxuLSAgIGRhdGEgdG8gYmUgcGFzc2VkIChlLmcuIHRoZSBkZW50cnkpLiAqL1xuLXN0YXRpYyBpbnQgaW5vZGVfaGFzX3Blcm0oY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQsXG4tXHRcdFx0ICBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLVx0XHRcdCAgdTMyIHBlcm1zLFxuLVx0XHRcdCAgc3RydWN0IGNvbW1vbl9hdWRpdF9kYXRhICphZHApXG4mIzQzOy8qXG4mIzQzOyAqIENoZWNrIHdoZXRoZXIgYSBTSUQgaGFzIGEgcGFydGljdWxhciBwZXJtaXNzaW9uIHRvIGFuIGlub2RlLiAgVGhlICYjMzk7YWRwJiMzOTtcbiYjNDM7ICogcGFyYW1ldGVyIGlzIG9wdGlvbmFsIGFuZCBhbGxvd3Mgb3RoZXIgYXVkaXQgZGF0YSB0byBiZSBwYXNzZWQgKGUuZy4gdGhlXG4mIzQzOyAqIGRlbnRyeSkuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IGlub2RlX3NpZF9oYXNfcGVybSh1MzIgc2lkLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgcGVybXMsXG4mIzQzO1x0XHRcdCAgICAgIHN0cnVjdCBjb21tb25fYXVkaXRfZGF0YSAqYWRwKVxuIHtcbiBcdHN0cnVjdCBpbm9kZV9zZWN1cml0eV9zdHJ1Y3QgKmlzZWM7XG4tXHR1MzIgc2lkO1xuIFxuIFx0aWYgKHVubGlrZWx5KElTX1BSSVZBVEUoaW5vZGUpKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRzaWQgPSBjcmVkX3NpZChjcmVkKTtcbiBcdGlzZWMgPSBzZWxpbnV4X2lub2RlKGlub2RlKTtcbiBcbiBcdHJldHVybiBhdmNfaGFzX3Blcm0oc2lkLCBpc2VjLVx1MDAzZXNpZCwgaXNlYy1cdTAwM2VzY2xhc3MsIHBlcm1zLCBhZHApO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBpbm9kZV9oYXNfcGVybShjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCxcbiYjNDM7XHRcdFx0ICBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuJiM0MztcdFx0XHQgIHUzMiBwZXJtcyxcbiYjNDM7XHRcdFx0ICBzdHJ1Y3QgY29tbW9uX2F1ZGl0X2RhdGEgKmFkcClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBpbm9kZV9zaWRfaGFzX3Blcm0oY3JlZF9zaWQoY3JlZCksIGlub2RlLCBwZXJtcywgYWRwKTtcbiYjNDM7fVxuJiM0MztcbiAvKiBTYW1lIGFzIGlub2RlX2hhc19wZXJtLCBidXQgcGFzcyBleHBsaWNpdCBhdWRpdCBkYXRhIGNvbnRhaW5pbmdcbiAgICB0aGUgZGVudHJ5IHRvIGhlbHAgdGhlIGF1ZGl0aW5nIGNvZGUgdG8gbW9yZSBlYXNpbHkgZ2VuZXJhdGUgdGhlXG4gICAgcGF0aG5hbWUgaWYgbmVlZGVkLiAqL1xuQEAgLTM4NDMsMTcgJiM0MzszODQ5LDc0IEBAIHN0YXRpYyBpbnQgc2VsaW51eF9maWxlX2FsbG9jX3NlY3VyaXR5KHN0cnVjdCBmaWxlICpmaWxlKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIHUzMiBzZWxpbnV4X2ZpbGVfdXNlcl9zaWQoY29uc3Qgc3RydWN0IGZpbGUgKmZpbGUpXG4mIzQzO3tcbiYjNDM7XHRpZiAodW5saWtlbHkoZmlsZS1cdTAwM2VmX21vZGUgXHUwMDI2IEZNT0RFX0JBQ0tJTkcpKVxuJiM0MztcdFx0cmV0dXJuIHNlbGludXhfYmFja2luZ19maWxlKGZpbGUpLVx1MDAzZXVmX3NpZDtcbiYjNDM7XHRyZXR1cm4gc2VsaW51eF9maWxlKGZpbGUpLVx1MDAzZXNpZDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IHNlbGludXhfYmFja2luZ19maWxlX2FsbG9jKHN0cnVjdCBmaWxlICpiYWNraW5nX2ZpbGUsXG4gXHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgZmlsZSAqdXNlcl9maWxlKVxuIHtcbiBcdHN0cnVjdCBiYWNraW5nX2ZpbGVfc2VjdXJpdHlfc3RydWN0ICpiZnNlYztcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgYmFja2luZ19maWxlX3NlY3VyaXR5X3N0cnVjdCAqdWJmc2VjO1xuJiM0MztcdHN0cnVjdCBiYWNraW5nX2ZpbGVfc2VjdXJpdHlfbGF5ZXIgKmxheWVyO1xuJiM0MztcdHUzMiBpO1xuIFxuIFx0YmZzZWMgPSBzZWxpbnV4X2JhY2tpbmdfZmlsZShiYWNraW5nX2ZpbGUpO1xuLVx0YmZzZWMtXHUwMDNldWZfc2lkID0gc2VsaW51eF9maWxlKHVzZXJfZmlsZSktXHUwMDNlc2lkO1xuJiM0MztcdGJmc2VjLVx1MDAzZXVmX3NpZCA9IHNlbGludXhfZmlsZV91c2VyX3NpZCh1c2VyX2ZpbGUpO1xuJiM0MztcdGlmICghKHVzZXJfZmlsZS1cdTAwM2VmX21vZGUgXHUwMDI2IEZNT0RFX0JBQ0tJTkcpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHViZnNlYyA9IHNlbGludXhfYmFja2luZ19maWxlKHVzZXJfZmlsZSk7XG4mIzQzO1x0LyogYSB3cmFwcGVkIGNvdW50IHdvdWxkIG1ha2Uga21hbGxvY19hcnJheSgpIHJldHVybiBaRVJPX1NJWkVfUFRSICovXG4mIzQzO1x0aWYgKHVubGlrZWx5KHViZnNlYy1cdTAwM2VsYXllcl9jb3VudCA9PSBVMzJfTUFYKSlcbiYjNDM7XHRcdHJldHVybiAtRU9WRVJGTE9XO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoZSBmaW5hbCBWTUEgb25seSByZXRhaW5zIHRoZSBsb3dlc3QgYmFja2luZyBmaWxlLCBzbyByZWNvcmQgdGhlXG4mIzQzO1x0ICogd2hvbGUgY2hhaW4gaGVyZSByYXRoZXIgdGhhbiBpbiB0aGUgbW1hcCBob29rLCB3aGVyZSBjb25jdXJyZW50XG4mIzQzO1x0ICogbWFwcGluZ3Mgd291bGQgaGF2ZSB0byBiZSBzZXJpYWxpemVkLiAgU2l6ZSBpdCBkeW5hbWljYWxseTogZXJvZnNcbiYjNDM7XHQgKiBpbm9kZSBzaGFyaW5nIGFkZHMgYSBiYWNraW5nIGZpbGUgd2l0aG91dCBidW1waW5nIHNfc3RhY2tfZGVwdGguXG4mIzQzO1x0ICovXG4mIzQzO1x0YmZzZWMtXHUwMDNlbGF5ZXJzID0ga21hbGxvY19hcnJheSh1YmZzZWMtXHUwMDNlbGF5ZXJfY291bnQgJiM0MzsgMSxcbiYjNDM7XHRcdFx0XHQgICAgICBzaXplb2YoKmJmc2VjLVx1MDAzZWxheWVycyksIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghYmZzZWMtXHUwMDNlbGF5ZXJzKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHViZnNlYy1cdTAwM2VsYXllcl9jb3VudDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGxheWVyID0gXHUwMDI2YmZzZWMtXHUwMDNlbGF5ZXJzW2ldO1xuJiM0MztcdFx0KmxheWVyID0gdWJmc2VjLVx1MDAzZWxheWVyc1tpXTtcbiYjNDM7XHRcdHBhdGhfZ2V0KFx1MDAyNmxheWVyLVx1MDAzZXBhdGgpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogZl9wYXRoLCBub3QgZmlsZV91c2VyX3BhdGgoKTogdGhpcyBsYXllciwgbm90IHRoZSB0b3AtbGV2ZWwgZmlsZSAqL1xuJiM0MztcdGxheWVyID0gXHUwMDI2YmZzZWMtXHUwMDNlbGF5ZXJzW2ldO1xuJiM0MztcdGxheWVyLVx1MDAzZXBhdGggPSB1c2VyX2ZpbGUtXHUwMDNlZl9wYXRoO1xuJiM0MztcdGxheWVyLVx1MDAzZW1vdW50ZXJfc2lkID0gY3JlZF9zaWQodXNlcl9maWxlLVx1MDAzZWZfY3JlZCk7XG4mIzQzO1x0bGF5ZXItXHUwMDNlZmRfc2lkID0gc2VsaW51eF9maWxlKHVzZXJfZmlsZSktXHUwMDNlc2lkO1xuJiM0MztcdHBhdGhfZ2V0KFx1MDAyNmxheWVyLVx1MDAzZXBhdGgpO1xuJiM0MztcdGJmc2VjLVx1MDAzZWxheWVyX2NvdW50ID0gdWJmc2VjLVx1MDAzZWxheWVyX2NvdW50ICYjNDM7IDE7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHNlbGludXhfYmFja2luZ19maWxlX2ZyZWUoc3RydWN0IGZpbGUgKmJhY2tpbmdfZmlsZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBiYWNraW5nX2ZpbGVfc2VjdXJpdHlfc3RydWN0ICpiZnNlYztcbiYjNDM7XG4mIzQzO1x0Lyogc2VjdXJpdHlfYmFja2luZ19maWxlX2ZyZWUoKSBtYXkgYmUgY2FsbGVkIHR3aWNlIGFmdGVyIGFuIGVycm9yICovXG4mIzQzO1x0aWYgKCFiYWNraW5nX2ZpbGVfc2VjdXJpdHkoYmFja2luZ19maWxlKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0YmZzZWMgPSBzZWxpbnV4X2JhY2tpbmdfZmlsZShiYWNraW5nX2ZpbGUpO1xuJiM0MztcdHdoaWxlIChiZnNlYy1cdTAwM2VsYXllcl9jb3VudClcbiYjNDM7XHRcdHBhdGhfcHV0KFx1MDAyNmJmc2VjLVx1MDAzZWxheWVyc1stLWJmc2VjLVx1MDAzZWxheWVyX2NvdW50XS5wYXRoKTtcbiYjNDM7XHRrZnJlZShiZnNlYy1cdTAwM2VsYXllcnMpO1xuJiM0MztcdGJmc2VjLVx1MDAzZWxheWVycyA9IE5VTEw7XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBDaGVjayB3aGV0aGVyIGEgdGFzayBoYXMgdGhlIGlvY3RsIHBlcm1pc3Npb24gYW5kIGNtZFxuICAqIG9wZXJhdGlvbiB0byBhbiBpbm9kZS5cbkBAIC0zOTcxLDYgJiM0Mzs0MDM0LDUzIEBAIHN0YXRpYyBpbnQgc2VsaW51eF9maWxlX2lvY3RsX2NvbXBhdChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCxcbiBcbiBzdGF0aWMgaW50IGRlZmF1bHRfbm9leGVjIF9fcm9fYWZ0ZXJfaW5pdDtcbiBcbiYjNDM7c3RhdGljIHUzMiBmaWxlX21hcF9wcm90X3RvX2F2KHVuc2lnbmVkIGxvbmcgcHJvdCwgYm9vbCBzaGFyZWQpXG4mIzQzO3tcbiYjNDM7XHR1MzIgYXYgPSBGSUxFX19SRUFEO1xuJiM0MztcbiYjNDM7XHRpZiAoc2hhcmVkIFx1MDAyNlx1MDAyNiAocHJvdCBcdTAwMjYgUFJPVF9XUklURSkpXG4mIzQzO1x0XHRhdiB8PSBGSUxFX19XUklURTtcbiYjNDM7XHRpZiAocHJvdCBcdTAwMjYgUFJPVF9FWEVDKVxuJiM0MztcdFx0YXYgfD0gRklMRV9fRVhFQ1VURTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGF2O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGJhY2tpbmdfbW91bnRlcnNfaGFzX3Blcm0oY29uc3Qgc3RydWN0IGZpbGUgKmZpbGUsIHUzMiBhdilcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBiYWNraW5nX2ZpbGVfc2VjdXJpdHlfc3RydWN0ICpiZnNlYztcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgYmFja2luZ19maWxlX3NlY3VyaXR5X2xheWVyICpsYXllcjtcbiYjNDM7XHRzdHJ1Y3QgY29tbW9uX2F1ZGl0X2RhdGEgYWQ7XG4mIzQzO1x0c3RydWN0IGlub2RlICppbm9kZTtcbiYjNDM7XHR1MzIgaTtcbiYjNDM7XHRpbnQgcmM7XG4mIzQzO1xuJiM0MztcdGlmIChXQVJOX09OX09OQ0UoIShmaWxlLVx1MDAzZWZfbW9kZSBcdTAwMjYgRk1PREVfQkFDS0lORykpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU87XG4mIzQzO1xuJiM0MztcdGJmc2VjID0gc2VsaW51eF9iYWNraW5nX2ZpbGUoZmlsZSk7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgYmZzZWMtXHUwMDNlbGF5ZXJfY291bnQ7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRsYXllciA9IFx1MDAyNmJmc2VjLVx1MDAzZWxheWVyc1tpXTtcbiYjNDM7XHRcdGlub2RlID0gZF9pbm9kZShsYXllci1cdTAwM2VwYXRoLmRlbnRyeSk7XG4mIzQzO1xuJiM0MztcdFx0YWQudHlwZSA9IExTTV9BVURJVF9EQVRBX1BBVEg7XG4mIzQzO1x0XHRhZC51LnBhdGggPSBsYXllci1cdTAwM2VwYXRoO1xuJiM0MztcbiYjNDM7XHRcdGlmIChsYXllci1cdTAwM2Vtb3VudGVyX3NpZCAhPSBsYXllci1cdTAwM2VmZF9zaWQpIHtcbiYjNDM7XHRcdFx0cmMgPSBhdmNfaGFzX3Blcm0obGF5ZXItXHUwMDNlbW91bnRlcl9zaWQsIGxheWVyLVx1MDAzZWZkX3NpZCxcbiYjNDM7XHRcdFx0XHRcdCAgU0VDQ0xBU1NfRkQsIEZEX19VU0UsIFx1MDAyNmFkKTtcbiYjNDM7XHRcdFx0aWYgKHJjKVxuJiM0MztcdFx0XHRcdHJldHVybiByYztcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRyYyA9IGlub2RlX3NpZF9oYXNfcGVybShsYXllci1cdTAwM2Vtb3VudGVyX3NpZCwgaW5vZGUsIGF2LCBcdTAwMjZhZCk7XG4mIzQzO1x0XHRpZiAocmMpXG4mIzQzO1x0XHRcdHJldHVybiByYztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgX19maWxlX21hcF9wcm90X2NoZWNrKGNvbnN0IHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIHByb3QsXG4gXHRcdFx0XHQgYm9vbCBzaGFyZWQsIGJvb2wgbW91bnRlcl9jaGVjayxcbiBcdFx0XHRcdCBib29sIGJmX3VzZXJfZmlsZSlcbkBAIC00MDA0LDE0ICYjNDM7NDExNCwxMCBAQCBzdGF0aWMgaW50IF9fZmlsZV9tYXBfcHJvdF9jaGVjayhjb25zdCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBwcm90LFxuIFx0aWYgKGZpbGUpIHtcbiBcdFx0Y29uc3Qgc3RydWN0IGNyZWQgKmNyZWQgPSBtb3VudGVyX2NoZWNrID9cbiBcdFx0XHRcdGZpbGUtXHUwMDNlZl9jcmVkIDogY3VycmVudF9jcmVkKCk7XG4tXHRcdC8qIFwmIzM0O3JlYWRcJiMzNDsgYWx3YXlzIHBvc3NpYmxlLCBcJiMzNDt3cml0ZVwmIzM0OyBvbmx5IGlmIHNoYXJlZCAqL1xuLVx0XHR1MzIgYXYgPSBGSUxFX19SRUFEO1xuLVx0XHRpZiAoc2hhcmVkIFx1MDAyNlx1MDAyNiBwcm90X3dyaXRlKVxuLVx0XHRcdGF2IHw9IEZJTEVfX1dSSVRFO1xuLVx0XHRpZiAocHJvdF9leGVjKVxuLVx0XHRcdGF2IHw9IEZJTEVfX0VYRUNVVEU7XG4gXG4tXHRcdHJldHVybiBfX2ZpbGVfaGFzX3Blcm0oY3JlZCwgZmlsZSwgYXYsIGJmX3VzZXJfZmlsZSk7XG4mIzQzO1x0XHRyZXR1cm4gX19maWxlX2hhc19wZXJtKGNyZWQsIGZpbGUsXG4mIzQzO1x0XHRcdFx0ICAgICAgIGZpbGVfbWFwX3Byb3RfdG9fYXYocHJvdCwgc2hhcmVkKSxcbiYjNDM7XHRcdFx0XHQgICAgICAgYmZfdXNlcl9maWxlKTtcbiBcdH1cbiBcbiBcdHJldHVybiAwO1xuQEAgLTQxMDYsNiAmIzQzOzQyMTIsNyBAQCBzdGF0aWMgaW50IHNlbGludXhfZmlsZV9tcHJvdGVjdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdGludCByYztcbiBcdGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkID0gY3VycmVudF9jcmVkKCk7XG4gXHR1MzIgc2lkID0gY3JlZF9zaWQoY3JlZCk7XG4mIzQzO1x0dTMyIGF2O1xuIFx0Y29uc3Qgc3RydWN0IGZpbGUgKmZpbGUgPSB2bWEtXHUwMDNldm1fZmlsZTtcbiBcdGJvb2wgYmFja2luZ19maWxlO1xuIFx0Ym9vbCBzaGFyZWQgPSB2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1NIQVJFRDtcbkBAIC00MTQ5LDYgJiM0Mzs0MjU2LDEwIEBAIHN0YXRpYyBpbnQgc2VsaW51eF9maWxlX21wcm90ZWN0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRcdGlmIChyYylcbiBcdFx0XHRcdHJldHVybiByYztcbiBcdFx0XHRpZiAoYmFja2luZ19maWxlKSB7XG4mIzQzO1x0XHRcdFx0cmMgPSBiYWNraW5nX21vdW50ZXJzX2hhc19wZXJtKGZpbGUsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgICAgIEZJTEVfX0VYRUNNT0QpO1xuJiM0MztcdFx0XHRcdGlmIChyYylcbiYjNDM7XHRcdFx0XHRcdHJldHVybiByYztcbiBcdFx0XHRcdHJjID0gZmlsZV9oYXNfcGVybShmaWxlLVx1MDAzZWZfY3JlZCwgZmlsZSxcbiBcdFx0XHRcdFx0XHQgICBGSUxFX19FWEVDTU9EKTtcbiBcdFx0XHRcdGlmIChyYylcbkBAIC00MTYxLDYgJiM0Mzs0MjcyLDEwIEBAIHN0YXRpYyBpbnQgc2VsaW51eF9maWxlX21wcm90ZWN0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0aWYgKHJjKVxuIFx0XHRyZXR1cm4gcmM7XG4gXHRpZiAoYmFja2luZ19maWxlKSB7XG4mIzQzO1x0XHRhdiA9IGZpbGVfbWFwX3Byb3RfdG9fYXYocHJvdCwgc2hhcmVkKTtcbiYjNDM7XHRcdHJjID0gYmFja2luZ19tb3VudGVyc19oYXNfcGVybShmaWxlLCBhdik7XG4mIzQzO1x0XHRpZiAocmMpXG4mIzQzO1x0XHRcdHJldHVybiByYztcbiBcdFx0cmMgPSBmaWxlX21hcF9wcm90X2NoZWNrKGZpbGUsIHByb3QsIHNoYXJlZCwgdHJ1ZSk7XG4gXHRcdGlmIChyYylcbiBcdFx0XHRyZXR1cm4gcmM7XG5AQCAtNzYzNSw2ICYjNDM7Nzc1MCw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2VjdXJpdHlfaG9va19saXN0IHNlbGludXhfaG9va3NbXSBfX3JvX2FmdGVyX2luaXQgPSB7XG4gXHRMU01fSE9PS19JTklUKGZpbGVfcGVybWlzc2lvbiwgc2VsaW51eF9maWxlX3Blcm1pc3Npb24pLFxuIFx0TFNNX0hPT0tfSU5JVChmaWxlX2FsbG9jX3NlY3VyaXR5LCBzZWxpbnV4X2ZpbGVfYWxsb2Nfc2VjdXJpdHkpLFxuIFx0TFNNX0hPT0tfSU5JVChiYWNraW5nX2ZpbGVfYWxsb2MsIHNlbGludXhfYmFja2luZ19maWxlX2FsbG9jKSxcbiYjNDM7XHRMU01fSE9PS19JTklUKGJhY2tpbmdfZmlsZV9mcmVlLCBzZWxpbnV4X2JhY2tpbmdfZmlsZV9mcmVlKSxcbiBcdExTTV9IT09LX0lOSVQoZmlsZV9pb2N0bCwgc2VsaW51eF9maWxlX2lvY3RsKSxcbiBcdExTTV9IT09LX0lOSVQoZmlsZV9pb2N0bF9jb21wYXQsIHNlbGludXhfZmlsZV9pb2N0bF9jb21wYXQpLFxuIFx0TFNNX0hPT0tfSU5JVChtbWFwX2ZpbGUsIHNlbGludXhfbW1hcF9maWxlKSxcbmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvb2Jqc2VjLmggYi9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvb2Jqc2VjLmhcbmluZGV4IDNjMGExNmVjOTc4YjAuLjJmMjE1NjgyNTFmZmUgMTAwNjQ0XG4tLS0gYS9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvb2Jqc2VjLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9vYmpzZWMuaFxuQEAgLTg2LDggJiM0Mzs4NiwxNiBAQCBzdHJ1Y3QgZmlsZV9zZWN1cml0eV9zdHJ1Y3Qge1xuIFx0dTMyIHBzZXFubzsgLyogUG9saWN5IHNlcW5vIGF0IHRoZSB0aW1lIG9mIGZpbGUgb3BlbiAqL1xuIH07XG4gXG4mIzQzO3N0cnVjdCBiYWNraW5nX2ZpbGVfc2VjdXJpdHlfbGF5ZXIge1xuJiM0MztcdHN0cnVjdCBwYXRoIHBhdGg7IC8qIHRoaXMgbGF5ZXImIzM5O3MgcmVhbCBwYXRoICovXG4mIzQzO1x0dTMyIG1vdW50ZXJfc2lkOyAvKiBTSUQgb2YgdGhlIG1vdW50ZXIgdGhhdCBvcGVuZWQgaXQgKi9cbiYjNDM7XHR1MzIgZmRfc2lkOyAvKiBTSUQgb2YgaXRzIG9wZW4gZmlsZSBkZXNjcmlwdGlvbiAqL1xuJiM0Mzt9O1xuJiM0MztcbiBzdHJ1Y3QgYmFja2luZ19maWxlX3NlY3VyaXR5X3N0cnVjdCB7XG4tXHR1MzIgdWZfc2lkOyAvKiBhc3NvY2lhdGVkIHVzZXIgZmlsZSBmc2VjLVx1MDAzZXNpZCAqL1xuJiM0MztcdHUzMiB1Zl9zaWQ7IC8qIHRvcC1sZXZlbCB1c2VyIGZpbGUgZnNlYy1cdTAwM2VzaWQgKi9cbiYjNDM7XHR1MzIgbGF5ZXJfY291bnQ7IC8qIG51bWJlciBvZiBpbnRlcm1lZGlhdGUgYmFja2luZyBmaWxlcyAqL1xuJiM0MztcdHN0cnVjdCBiYWNraW5nX2ZpbGVfc2VjdXJpdHlfbGF5ZXIgKmxheWVycztcbiB9O1xuIFxuIHN0cnVjdCBzdXBlcmJsb2NrX3NlY3VyaXR5X3N0cnVjdCB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMjI6MjM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U0VDVVJJVFkmIzM0OywKICAgICYjMzQ7U0VDVVJJVFlfU0VMSU5VWCYjMzQ7LAogICAgJiMzNDtTRUNVUklUWV9ORVRXT1JLJiMzNDssCiAgICAmIzM0O0FVRElUJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O09WRVJMQVlfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzZWxpbnV4X2JhY2tpbmdfZmlsZV9hbGxvYyYjMzQ7LAogICAgJiMzNDtzZWxpbnV4X2JhY2tpbmdfZmlsZV9mcmVlJiMzNDssCiAgICAmIzM0O3NlbGludXhfZmlsZV9tcHJvdGVjdCYjMzQ7LAogICAgJiMzNDtzZWN1cml0eV9iYWNraW5nX2ZpbGVfYWxsb2MmIzM0OywKICAgICYjMzQ7c2VjdXJpdHlfYmFja2luZ19maWxlX2ZyZWUmIzM0OywKICAgICYjMzQ7c2VjdXJpdHlfZmlsZV9tcHJvdGVjdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRyYWNraW5nIGFuZCBlbmZvcmNpbmcgU0VMaW51eCBwZXJtaXNzaW9ucyBhY3Jvc3MgbXVsdGktbGF5ZXIgYmFja2luZyBmaWxlcyAoc3VjaCBhcyB0aG9zZSB1c2VkIGJ5IG92ZXJsYXlmcyBhbmQgZXJvZnMpLiBJdCBpbXBsZW1lbnRzIGR5bmFtaWMgYWxsb2NhdGlvbiBhbmQgcmVmZXJlbmNlIHRyYWNraW5nIG9mIGludGVybWVkaWF0ZSBiYWNraW5nIGZpbGUgbGF5ZXJzIGluIHNlbGludXhfYmFja2luZ19maWxlX2FsbG9jLCBjbGVhbnVwIGluIHNlbGludXhfYmFja2luZ19maWxlX2ZyZWUsIGFuZCBtdWx0aS1sYXllciBwZXJtaXNzaW9uIGNoZWNrcyBkdXJpbmcgbXByb3RlY3QgaW4gc2VsaW51eF9maWxlX21wcm90ZWN0LiBUaGVzZSBjaGFuZ2VzIG1vZGlmeSBjb3JlIHNlY3VyaXR5IGFuZCBmaWxlc3lzdGVtIGludGVyYWN0aW9ucyBhbmQgYXJlIHdlbGwgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGZhN2EwYjU1MDYyMmM2NDVkNjJjZjlhMzY0OThhN2NhYmQ3MjZjYjYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEF1ZyAyOSAyMjoyMzoyMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYwppbmRleCAwMzVhYWYxMTNkMWRhLi5iNjc1MGVkY2M0NzgzIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKJiM0MzsmIzQzOyYjNDM7IGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCkBAIC0xNjc0LDI2ICYjNDM7MTY3NCwzMiBAQCBzdGF0aWMgaW50IGNyZWRfaGFzX2NhcGFiaWxpdHkoY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQsCiAJcmV0dXJuIHJjOwogfQogCi0vKiBDaGVjayB3aGV0aGVyIGEgdGFzayBoYXMgYSBwYXJ0aWN1bGFyIHBlcm1pc3Npb24gdG8gYW4gaW5vZGUuCi0gICBUaGUgJiMzOTthZHAmIzM5OyBwYXJhbWV0ZXIgaXMgb3B0aW9uYWwgYW5kIGFsbG93cyBvdGhlciBhdWRpdAotICAgZGF0YSB0byBiZSBwYXNzZWQgKGUuZy4gdGhlIGRlbnRyeSkuICovCi1zdGF0aWMgaW50IGlub2RlX2hhc19wZXJtKGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkLAotCQkJICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJICB1MzIgcGVybXMsCi0JCQkgIHN0cnVjdCBjb21tb25fYXVkaXRfZGF0YSAqYWRwKQomIzQzOy8qCiYjNDM7ICogQ2hlY2sgd2hldGhlciBhIFNJRCBoYXMgYSBwYXJ0aWN1bGFyIHBlcm1pc3Npb24gdG8gYW4gaW5vZGUuICBUaGUgJiMzOTthZHAmIzM5OwomIzQzOyAqIHBhcmFtZXRlciBpcyBvcHRpb25hbCBhbmQgYWxsb3dzIG90aGVyIGF1ZGl0IGRhdGEgdG8gYmUgcGFzc2VkIChlLmcuIHRoZQomIzQzOyAqIGRlbnRyeSkuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBpbm9kZV9zaWRfaGFzX3Blcm0odTMyIHNpZCwgc3RydWN0IGlub2RlICppbm9kZSwgdTMyIHBlcm1zLAomIzQzOwkJCSAgICAgIHN0cnVjdCBjb21tb25fYXVkaXRfZGF0YSAqYWRwKQogewogCXN0cnVjdCBpbm9kZV9zZWN1cml0eV9zdHJ1Y3QgKmlzZWM7Ci0JdTMyIHNpZDsKIAogCWlmICh1bmxpa2VseShJU19QUklWQVRFKGlub2RlKSkpCiAJCXJldHVybiAwOwogCi0Jc2lkID0gY3JlZF9zaWQoY3JlZCk7CiAJaXNlYyA9IHNlbGludXhfaW5vZGUoaW5vZGUpOwogCiAJcmV0dXJuIGF2Y19oYXNfcGVybShzaWQsIGlzZWMtJmd0O3NpZCwgaXNlYy0mZ3Q7c2NsYXNzLCBwZXJtcywgYWRwKTsKIH0KIAomIzQzO3N0YXRpYyBpbnQgaW5vZGVfaGFzX3Blcm0oY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQsCiYjNDM7CQkJICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAomIzQzOwkJCSAgdTMyIHBlcm1zLAomIzQzOwkJCSAgc3RydWN0IGNvbW1vbl9hdWRpdF9kYXRhICphZHApCiYjNDM7ewomIzQzOwlyZXR1cm4gaW5vZGVfc2lkX2hhc19wZXJtKGNyZWRfc2lkKGNyZWQpLCBpbm9kZSwgcGVybXMsIGFkcCk7CiYjNDM7fQomIzQzOwogLyogU2FtZSBhcyBpbm9kZV9oYXNfcGVybSwgYnV0IHBhc3MgZXhwbGljaXQgYXVkaXQgZGF0YSBjb250YWluaW5nCiAgICB0aGUgZGVudHJ5IHRvIGhlbHAgdGhlIGF1ZGl0aW5nIGNvZGUgdG8gbW9yZSBlYXNpbHkgZ2VuZXJhdGUgdGhlCiAgICBwYXRobmFtZSBpZiBuZWVkZWQuICovCkBAIC0zODQzLDE3ICYjNDM7Mzg0OSw3NCBAQCBzdGF0aWMgaW50IHNlbGludXhfZmlsZV9hbGxvY19zZWN1cml0eShzdHJ1Y3QgZmlsZSAqZmlsZSkKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgdTMyIHNlbGludXhfZmlsZV91c2VyX3NpZChjb25zdCBzdHJ1Y3QgZmlsZSAqZmlsZSkKJiM0Mzt7CiYjNDM7CWlmICh1bmxpa2VseShmaWxlLSZndDtmX21vZGUgJmFtcDsgRk1PREVfQkFDS0lORykpCiYjNDM7CQlyZXR1cm4gc2VsaW51eF9iYWNraW5nX2ZpbGUoZmlsZSktJmd0O3VmX3NpZDsKJiM0MzsJcmV0dXJuIHNlbGludXhfZmlsZShmaWxlKS0mZ3Q7c2lkOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgc2VsaW51eF9iYWNraW5nX2ZpbGVfYWxsb2Moc3RydWN0IGZpbGUgKmJhY2tpbmdfZmlsZSwKIAkJCQkgICAgICBjb25zdCBzdHJ1Y3QgZmlsZSAqdXNlcl9maWxlKQogewogCXN0cnVjdCBiYWNraW5nX2ZpbGVfc2VjdXJpdHlfc3RydWN0ICpiZnNlYzsKJiM0MzsJY29uc3Qgc3RydWN0IGJhY2tpbmdfZmlsZV9zZWN1cml0eV9zdHJ1Y3QgKnViZnNlYzsKJiM0MzsJc3RydWN0IGJhY2tpbmdfZmlsZV9zZWN1cml0eV9sYXllciAqbGF5ZXI7CiYjNDM7CXUzMiBpOwogCiAJYmZzZWMgPSBzZWxpbnV4X2JhY2tpbmdfZmlsZShiYWNraW5nX2ZpbGUpOwotCWJmc2VjLSZndDt1Zl9zaWQgPSBzZWxpbnV4X2ZpbGUodXNlcl9maWxlKS0mZ3Q7c2lkOwomIzQzOwliZnNlYy0mZ3Q7dWZfc2lkID0gc2VsaW51eF9maWxlX3VzZXJfc2lkKHVzZXJfZmlsZSk7CiYjNDM7CWlmICghKHVzZXJfZmlsZS0mZ3Q7Zl9tb2RlICZhbXA7IEZNT0RFX0JBQ0tJTkcpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXViZnNlYyA9IHNlbGludXhfYmFja2luZ19maWxlKHVzZXJfZmlsZSk7CiYjNDM7CS8qIGEgd3JhcHBlZCBjb3VudCB3b3VsZCBtYWtlIGttYWxsb2NfYXJyYXkoKSByZXR1cm4gWkVST19TSVpFX1BUUiAqLwomIzQzOwlpZiAodW5saWtlbHkodWJmc2VjLSZndDtsYXllcl9jb3VudCA9PSBVMzJfTUFYKSkKJiM0MzsJCXJldHVybiAtRU9WRVJGTE9XOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBUaGUgZmluYWwgVk1BIG9ubHkgcmV0YWlucyB0aGUgbG93ZXN0IGJhY2tpbmcgZmlsZSwgc28gcmVjb3JkIHRoZQomIzQzOwkgKiB3aG9sZSBjaGFpbiBoZXJlIHJhdGhlciB0aGFuIGluIHRoZSBtbWFwIGhvb2ssIHdoZXJlIGNvbmN1cnJlbnQKJiM0MzsJICogbWFwcGluZ3Mgd291bGQgaGF2ZSB0byBiZSBzZXJpYWxpemVkLiAgU2l6ZSBpdCBkeW5hbWljYWxseTogZXJvZnMKJiM0MzsJICogaW5vZGUgc2hhcmluZyBhZGRzIGEgYmFja2luZyBmaWxlIHdpdGhvdXQgYnVtcGluZyBzX3N0YWNrX2RlcHRoLgomIzQzOwkgKi8KJiM0MzsJYmZzZWMtJmd0O2xheWVycyA9IGttYWxsb2NfYXJyYXkodWJmc2VjLSZndDtsYXllcl9jb3VudCAmIzQzOyAxLAomIzQzOwkJCQkgICAgICBzaXplb2YoKmJmc2VjLSZndDtsYXllcnMpLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFiZnNlYy0mZ3Q7bGF5ZXJzKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyB1YmZzZWMtJmd0O2xheWVyX2NvdW50OyBpJiM0MzsmIzQzOykgewomIzQzOwkJbGF5ZXIgPSAmYW1wO2Jmc2VjLSZndDtsYXllcnNbaV07CiYjNDM7CQkqbGF5ZXIgPSB1YmZzZWMtJmd0O2xheWVyc1tpXTsKJiM0MzsJCXBhdGhfZ2V0KCZhbXA7bGF5ZXItJmd0O3BhdGgpOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIGZfcGF0aCwgbm90IGZpbGVfdXNlcl9wYXRoKCk6IHRoaXMgbGF5ZXIsIG5vdCB0aGUgdG9wLWxldmVsIGZpbGUgKi8KJiM0MzsJbGF5ZXIgPSAmYW1wO2Jmc2VjLSZndDtsYXllcnNbaV07CiYjNDM7CWxheWVyLSZndDtwYXRoID0gdXNlcl9maWxlLSZndDtmX3BhdGg7CiYjNDM7CWxheWVyLSZndDttb3VudGVyX3NpZCA9IGNyZWRfc2lkKHVzZXJfZmlsZS0mZ3Q7Zl9jcmVkKTsKJiM0MzsJbGF5ZXItJmd0O2ZkX3NpZCA9IHNlbGludXhfZmlsZSh1c2VyX2ZpbGUpLSZndDtzaWQ7CiYjNDM7CXBhdGhfZ2V0KCZhbXA7bGF5ZXItJmd0O3BhdGgpOwomIzQzOwliZnNlYy0mZ3Q7bGF5ZXJfY291bnQgPSB1YmZzZWMtJmd0O2xheWVyX2NvdW50ICYjNDM7IDE7CiAKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHNlbGludXhfYmFja2luZ19maWxlX2ZyZWUoc3RydWN0IGZpbGUgKmJhY2tpbmdfZmlsZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBiYWNraW5nX2ZpbGVfc2VjdXJpdHlfc3RydWN0ICpiZnNlYzsKJiM0MzsKJiM0MzsJLyogc2VjdXJpdHlfYmFja2luZ19maWxlX2ZyZWUoKSBtYXkgYmUgY2FsbGVkIHR3aWNlIGFmdGVyIGFuIGVycm9yICovCiYjNDM7CWlmICghYmFja2luZ19maWxlX3NlY3VyaXR5KGJhY2tpbmdfZmlsZSkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWJmc2VjID0gc2VsaW51eF9iYWNraW5nX2ZpbGUoYmFja2luZ19maWxlKTsKJiM0MzsJd2hpbGUgKGJmc2VjLSZndDtsYXllcl9jb3VudCkKJiM0MzsJCXBhdGhfcHV0KCZhbXA7YmZzZWMtJmd0O2xheWVyc1stLWJmc2VjLSZndDtsYXllcl9jb3VudF0ucGF0aCk7CiYjNDM7CWtmcmVlKGJmc2VjLSZndDtsYXllcnMpOwomIzQzOwliZnNlYy0mZ3Q7bGF5ZXJzID0gTlVMTDsKJiM0Mzt9CiYjNDM7CiAvKgogICogQ2hlY2sgd2hldGhlciBhIHRhc2sgaGFzIHRoZSBpb2N0bCBwZXJtaXNzaW9uIGFuZCBjbWQKICAqIG9wZXJhdGlvbiB0byBhbiBpbm9kZS4KQEAgLTM5NzEsNiAmIzQzOzQwMzQsNTMgQEAgc3RhdGljIGludCBzZWxpbnV4X2ZpbGVfaW9jdGxfY29tcGF0KHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLAogCiBzdGF0aWMgaW50IGRlZmF1bHRfbm9leGVjIF9fcm9fYWZ0ZXJfaW5pdDsKIAomIzQzO3N0YXRpYyB1MzIgZmlsZV9tYXBfcHJvdF90b19hdih1bnNpZ25lZCBsb25nIHByb3QsIGJvb2wgc2hhcmVkKQomIzQzO3sKJiM0MzsJdTMyIGF2ID0gRklMRV9fUkVBRDsKJiM0MzsKJiM0MzsJaWYgKHNoYXJlZCAmYW1wOyZhbXA7IChwcm90ICZhbXA7IFBST1RfV1JJVEUpKQomIzQzOwkJYXYgfD0gRklMRV9fV1JJVEU7CiYjNDM7CWlmIChwcm90ICZhbXA7IFBST1RfRVhFQykKJiM0MzsJCWF2IHw9IEZJTEVfX0VYRUNVVEU7CiYjNDM7CiYjNDM7CXJldHVybiBhdjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBiYWNraW5nX21vdW50ZXJzX2hhc19wZXJtKGNvbnN0IHN0cnVjdCBmaWxlICpmaWxlLCB1MzIgYXYpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgYmFja2luZ19maWxlX3NlY3VyaXR5X3N0cnVjdCAqYmZzZWM7CiYjNDM7CWNvbnN0IHN0cnVjdCBiYWNraW5nX2ZpbGVfc2VjdXJpdHlfbGF5ZXIgKmxheWVyOwomIzQzOwlzdHJ1Y3QgY29tbW9uX2F1ZGl0X2RhdGEgYWQ7CiYjNDM7CXN0cnVjdCBpbm9kZSAqaW5vZGU7CiYjNDM7CXUzMiBpOwomIzQzOwlpbnQgcmM7CiYjNDM7CiYjNDM7CWlmIChXQVJOX09OX09OQ0UoIShmaWxlLSZndDtmX21vZGUgJmFtcDsgRk1PREVfQkFDS0lORykpKQomIzQzOwkJcmV0dXJuIC1FSU87CiYjNDM7CiYjNDM7CWJmc2VjID0gc2VsaW51eF9iYWNraW5nX2ZpbGUoZmlsZSk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBiZnNlYy0mZ3Q7bGF5ZXJfY291bnQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlsYXllciA9ICZhbXA7YmZzZWMtJmd0O2xheWVyc1tpXTsKJiM0MzsJCWlub2RlID0gZF9pbm9kZShsYXllci0mZ3Q7cGF0aC5kZW50cnkpOwomIzQzOwomIzQzOwkJYWQudHlwZSA9IExTTV9BVURJVF9EQVRBX1BBVEg7CiYjNDM7CQlhZC51LnBhdGggPSBsYXllci0mZ3Q7cGF0aDsKJiM0MzsKJiM0MzsJCWlmIChsYXllci0mZ3Q7bW91bnRlcl9zaWQgIT0gbGF5ZXItJmd0O2ZkX3NpZCkgewomIzQzOwkJCXJjID0gYXZjX2hhc19wZXJtKGxheWVyLSZndDttb3VudGVyX3NpZCwgbGF5ZXItJmd0O2ZkX3NpZCwKJiM0MzsJCQkJCSAgU0VDQ0xBU1NfRkQsIEZEX19VU0UsICZhbXA7YWQpOwomIzQzOwkJCWlmIChyYykKJiM0MzsJCQkJcmV0dXJuIHJjOwomIzQzOwkJfQomIzQzOwomIzQzOwkJcmMgPSBpbm9kZV9zaWRfaGFzX3Blcm0obGF5ZXItJmd0O21vdW50ZXJfc2lkLCBpbm9kZSwgYXYsICZhbXA7YWQpOwomIzQzOwkJaWYgKHJjKQomIzQzOwkJCXJldHVybiByYzsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IF9fZmlsZV9tYXBfcHJvdF9jaGVjayhjb25zdCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBwcm90LAogCQkJCSBib29sIHNoYXJlZCwgYm9vbCBtb3VudGVyX2NoZWNrLAogCQkJCSBib29sIGJmX3VzZXJfZmlsZSkKQEAgLTQwMDQsMTQgJiM0Mzs0MTE0LDEwIEBAIHN0YXRpYyBpbnQgX19maWxlX21hcF9wcm90X2NoZWNrKGNvbnN0IHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIHByb3QsCiAJaWYgKGZpbGUpIHsKIAkJY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQgPSBtb3VudGVyX2NoZWNrID8KIAkJCQlmaWxlLSZndDtmX2NyZWQgOiBjdXJyZW50X2NyZWQoKTsKLQkJLyogJiMzNDtyZWFkJiMzNDsgYWx3YXlzIHBvc3NpYmxlLCAmIzM0O3dyaXRlJiMzNDsgb25seSBpZiBzaGFyZWQgKi8KLQkJdTMyIGF2ID0gRklMRV9fUkVBRDsKLQkJaWYgKHNoYXJlZCAmYW1wOyZhbXA7IHByb3Rfd3JpdGUpCi0JCQlhdiB8PSBGSUxFX19XUklURTsKLQkJaWYgKHByb3RfZXhlYykKLQkJCWF2IHw9IEZJTEVfX0VYRUNVVEU7CiAKLQkJcmV0dXJuIF9fZmlsZV9oYXNfcGVybShjcmVkLCBmaWxlLCBhdiwgYmZfdXNlcl9maWxlKTsKJiM0MzsJCXJldHVybiBfX2ZpbGVfaGFzX3Blcm0oY3JlZCwgZmlsZSwKJiM0MzsJCQkJICAgICAgIGZpbGVfbWFwX3Byb3RfdG9fYXYocHJvdCwgc2hhcmVkKSwKJiM0MzsJCQkJICAgICAgIGJmX3VzZXJfZmlsZSk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC00MTA2LDYgJiM0Mzs0MjEyLDcgQEAgc3RhdGljIGludCBzZWxpbnV4X2ZpbGVfbXByb3RlY3Qoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJaW50IHJjOwogCWNvbnN0IHN0cnVjdCBjcmVkICpjcmVkID0gY3VycmVudF9jcmVkKCk7CiAJdTMyIHNpZCA9IGNyZWRfc2lkKGNyZWQpOwomIzQzOwl1MzIgYXY7CiAJY29uc3Qgc3RydWN0IGZpbGUgKmZpbGUgPSB2bWEtJmd0O3ZtX2ZpbGU7CiAJYm9vbCBiYWNraW5nX2ZpbGU7CiAJYm9vbCBzaGFyZWQgPSB2bWEtJmd0O3ZtX2ZsYWdzICZhbXA7IFZNX1NIQVJFRDsKQEAgLTQxNDksNiAmIzQzOzQyNTYsMTAgQEAgc3RhdGljIGludCBzZWxpbnV4X2ZpbGVfbXByb3RlY3Qoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCQlpZiAocmMpCiAJCQkJcmV0dXJuIHJjOwogCQkJaWYgKGJhY2tpbmdfZmlsZSkgewomIzQzOwkJCQlyYyA9IGJhY2tpbmdfbW91bnRlcnNfaGFzX3Blcm0oZmlsZSwKJiM0MzsJCQkJCQkJICAgICAgIEZJTEVfX0VYRUNNT0QpOwomIzQzOwkJCQlpZiAocmMpCiYjNDM7CQkJCQlyZXR1cm4gcmM7CiAJCQkJcmMgPSBmaWxlX2hhc19wZXJtKGZpbGUtJmd0O2ZfY3JlZCwgZmlsZSwKIAkJCQkJCSAgIEZJTEVfX0VYRUNNT0QpOwogCQkJCWlmIChyYykKQEAgLTQxNjEsNiAmIzQzOzQyNzIsMTAgQEAgc3RhdGljIGludCBzZWxpbnV4X2ZpbGVfbXByb3RlY3Qoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAJaWYgKGJhY2tpbmdfZmlsZSkgewomIzQzOwkJYXYgPSBmaWxlX21hcF9wcm90X3RvX2F2KHByb3QsIHNoYXJlZCk7CiYjNDM7CQlyYyA9IGJhY2tpbmdfbW91bnRlcnNfaGFzX3Blcm0oZmlsZSwgYXYpOwomIzQzOwkJaWYgKHJjKQomIzQzOwkJCXJldHVybiByYzsKIAkJcmMgPSBmaWxlX21hcF9wcm90X2NoZWNrKGZpbGUsIHByb3QsIHNoYXJlZCwgdHJ1ZSk7CiAJCWlmIChyYykKIAkJCXJldHVybiByYzsKQEAgLTc2MzUsNiAmIzQzOzc3NTAsNyBAQCBzdGF0aWMgc3RydWN0IHNlY3VyaXR5X2hvb2tfbGlzdCBzZWxpbnV4X2hvb2tzW10gX19yb19hZnRlcl9pbml0ID0gewogCUxTTV9IT09LX0lOSVQoZmlsZV9wZXJtaXNzaW9uLCBzZWxpbnV4X2ZpbGVfcGVybWlzc2lvbiksCiAJTFNNX0hPT0tfSU5JVChmaWxlX2FsbG9jX3NlY3VyaXR5LCBzZWxpbnV4X2ZpbGVfYWxsb2Nfc2VjdXJpdHkpLAogCUxTTV9IT09LX0lOSVQoYmFja2luZ19maWxlX2FsbG9jLCBzZWxpbnV4X2JhY2tpbmdfZmlsZV9hbGxvYyksCiYjNDM7CUxTTV9IT09LX0lOSVQoYmFja2luZ19maWxlX2ZyZWUsIHNlbGludXhfYmFja2luZ19maWxlX2ZyZWUpLAogCUxTTV9IT09LX0lOSVQoZmlsZV9pb2N0bCwgc2VsaW51eF9maWxlX2lvY3RsKSwKIAlMU01fSE9PS19JTklUKGZpbGVfaW9jdGxfY29tcGF0LCBzZWxpbnV4X2ZpbGVfaW9jdGxfY29tcGF0KSwKIAlMU01fSE9PS19JTklUKG1tYXBfZmlsZSwgc2VsaW51eF9tbWFwX2ZpbGUpLApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL29ianNlYy5oIGIvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL29ianNlYy5oCmluZGV4IDNjMGExNmVjOTc4YjAuLjJmMjE1NjgyNTFmZmUgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9vYmpzZWMuaAomIzQzOyYjNDM7JiM0MzsgYi9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvb2Jqc2VjLmgKQEAgLTg2LDggJiM0Mzs4NiwxNiBAQCBzdHJ1Y3QgZmlsZV9zZWN1cml0eV9zdHJ1Y3QgewogCXUzMiBwc2Vxbm87IC8qIFBvbGljeSBzZXFubyBhdCB0aGUgdGltZSBvZiBmaWxlIG9wZW4gKi8KIH07CiAKJiM0MztzdHJ1Y3QgYmFja2luZ19maWxlX3NlY3VyaXR5X2xheWVyIHsKJiM0MzsJc3RydWN0IHBhdGggcGF0aDsgLyogdGhpcyBsYXllciYjMzk7cyByZWFsIHBhdGggKi8KJiM0MzsJdTMyIG1vdW50ZXJfc2lkOyAvKiBTSUQgb2YgdGhlIG1vdW50ZXIgdGhhdCBvcGVuZWQgaXQgKi8KJiM0MzsJdTMyIGZkX3NpZDsgLyogU0lEIG9mIGl0cyBvcGVuIGZpbGUgZGVzY3JpcHRpb24gKi8KJiM0Mzt9OwomIzQzOwogc3RydWN0IGJhY2tpbmdfZmlsZV9zZWN1cml0eV9zdHJ1Y3QgewotCXUzMiB1Zl9zaWQ7IC8qIGFzc29jaWF0ZWQgdXNlciBmaWxlIGZzZWMtJmd0O3NpZCAqLwomIzQzOwl1MzIgdWZfc2lkOyAvKiB0b3AtbGV2ZWwgdXNlciBmaWxlIGZzZWMtJmd0O3NpZCAqLwomIzQzOwl1MzIgbGF5ZXJfY291bnQ7IC8qIG51bWJlciBvZiBpbnRlcm1lZGlhdGUgYmFja2luZyBmaWxlcyAqLwomIzQzOwlzdHJ1Y3QgYmFja2luZ19maWxlX3NlY3VyaXR5X2xheWVyICpsYXllcnM7CiB9OwogCiBzdHJ1Y3Qgc3VwZXJibG9ja19zZWN1cml0eV9zdHJ1Y3Qgewo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAyMjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDMwCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBUaGlzIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpczogaXMgdGhpcyBwYXRjaCBmdXp6YWJsZT8gV2hhdCBjb25maWd1cmF0aW9ucyBhcmUgKmVzc2VudGlhbCogdG8gcmVwcm9kdWNlIHRoZSBidWc/IEFuZCB3aGF0IGtleSBmdW5jdGlvbnMgYW5kIGRhdGEgc3RydWN0dXJlcyBzaG91bGQgSSB0YXJnZXQgYXMgZm9jdXMgc3ltYm9scyBmb3IgcmVwb3J0aW5nPwoKQWxyaWdodCwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoZSBjb2RlIGNoYW5nZXMuIEFoLCBpdCYjMzk7cyB0b3VjaGluZyBgc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jYCBhbmQgYHNlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9vYmpzZWMuaGAuIEludGVyZXN0aW5nLiBJdCBzZWVtcyBsaWtlIHdlJiMzOTtyZSB1cGRhdGluZyBob3cgU0VMaW51eCBpbnRlcmFjdHMgd2l0aCBiYWNraW5nIGZpbGVzLCB0aGluZ3MgbGlrZSBvdmVybGF5ZnMsIHN0YWNrZWQgZmlsZXN5c3RlbXMsIGFuZCBlcm9mcy4KClNvLCBzcGVjaWZpY2FsbHksIHRoZSBjaGFuZ2VzIGFyZSBjZW50ZXJlZCBhcm91bmQgdGhlc2UgZnVuY3Rpb25zOiBgaW5vZGVfc2lkX2hhc19wZXJtYCwgYGlub2RlX2hhc19wZXJtYCwgYHNlbGludXhfZmlsZV91c2VyX3NpZGAsIGBzZWxpbnV4X2JhY2tpbmdfZmlsZV9hbGxvY2AsIGBzZWxpbnV4X2JhY2tpbmdfZmlsZV9mcmVlYCwgYGZpbGVfbWFwX3Byb3RfdG9fYXZgLCBgYmFja2luZ19tb3VudGVyc19oYXNfcGVybWAsIGBzZWxpbnV4X2ZpbGVfbXByb3RlY3RgIGFuZCBhbHNvIHRoZSBTRUxpbnV4IGhvb2tzIGFycmF5OiAgYSBuZXcgcmVnaXN0cmF0aW9uIG9mIGBiYWNraW5nX2ZpbGVfZnJlZWAuCgpOb3csIGJlZm9yZSBJIHN0YXJ0IGNvbnN0cnVjdGluZyBhIGZ1enplciBvciBldmVuIHRoaW5raW5nIGFib3V0IGNvbmZpZyBvcHRpb25zLCBJIG5lZWQgdG8gZ2V0IGEgcmVhbGx5IHNvbGlkIGdyYXNwIG9uIHRoZSBzdXJyb3VuZGluZyBjb2RlLiAgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGJhY2tpbmcgZmlsZSBmdW5jdGlvbnMsIHRoZSBTRUxpbnV4IGltcGxlbWVudGF0aW9uLCBhbmQgaG93IHRoZSBob29rcyBhcmUgdXNlZC4gIFRpbWUgdG8gZmlyZSB1cCBncmVwcGVyIG9yIGp1c3QgY2FyZWZ1bGx5IHJlYWQgdGhyb3VnaCB0aGUgZmlsZSB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBsb2dpYyBhbmQgaG93IHRoZXNlIHBpZWNlcyBmaXQgdG9nZXRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMjI6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7U0VDVVJJVFlfU0VMSU5VWCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3NlY3VyaXR5L3NlbGludXgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7c2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWc6Mjpjb25maWcgU0VDVVJJVFlfU0VMSU5VWFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTMtXHRib29sIFwmIzM0O1NFTGludXggU3VwcG9ydFwmIzM0O1xuLS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy0xMS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzoxMjpjb25maWcgU0VDVVJJVFlfU0VMSU5VWF9CT09UUEFSQU1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy0xMy1cdGJvb2wgXCYjMzQ7U0VMaW51eCBib290IHBhcmFtZXRlclwmIzM0O1xuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnOjE0Olx0ZGVwZW5kcyBvbiBTRUNVUklUWV9TRUxJTlVYXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctMTUtXHRkZWZhdWx0IG5cbi0tXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctMjUtXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWc6MjY6Y29uZmlnIFNFQ1VSSVRZX1NFTElOVVhfREVWRUxPUFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTI3LVx0Ym9vbCBcJiMzNDtTRUxpbnV4IERldmVsb3BtZW50IFN1cHBvcnRcJiMzNDtcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzoyODpcdGRlcGVuZHMgb24gU0VDVVJJVFlfU0VMSU5VWFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTI5LVx0ZGVmYXVsdCB5XG4tLVxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTM5LVxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnOjQwOmNvbmZpZyBTRUNVUklUWV9TRUxJTlVYX0FWQ19TVEFUU1xuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTQxLVx0Ym9vbCBcJiMzNDtTRUxpbnV4IEFWQyBTdGF0aXN0aWNzXCYjMzQ7XG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWc6NDI6XHRkZXBlbmRzIG9uIFNFQ1VSSVRZX1NFTElOVVhcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy00My1cdGRlZmF1bHQgeVxuLS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy00OC1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzo0OTpjb25maWcgU0VDVVJJVFlfU0VMSU5VWF9TSURUQUJfSEFTSF9CSVRTXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctNTAtXHRpbnQgXCYjMzQ7U0VMaW51eCBzaWR0YWIgaGFzaHRhYmxlIHNpemVcJiMzNDtcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzo1MTpcdGRlcGVuZHMgb24gU0VDVVJJVFlfU0VMSU5VWFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTUyLVx0cmFuZ2UgOCAxM1xuLS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy01NS1cdCAgVGhpcyBvcHRpb24gc2V0cyB0aGUgbnVtYmVyIG9mIGJ1Y2tldHMgdXNlZCBpbiB0aGUgc2lkdGFiIGhhc2h0YWJsZVxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnOjU2Olx0ICB0byAyXlNFQ1VSSVRZX1NFTElOVVhfU0lEVEFCX0hBU0hfQklUUyBidWNrZXRzLiBUaGUgbnVtYmVyIG9mIGhhc2hcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy01Ny1cdCAgY29sbGlzaW9ucyBtYXkgYmUgdmlld2VkIGF0IC9zeXMvZnMvc2VsaW51eC9zcy9zaWR0YWJfaGFzaF9zdGF0cy4gSWZcbi0tXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctNjAtXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWc6NjE6Y29uZmlnIFNFQ1VSSVRZX1NFTElOVVhfU0lEMlNUUl9DQUNIRV9TSVpFXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctNjItXHRpbnQgXCYjMzQ7U0VMaW51eCBTSUQgdG8gY29udGV4dCBzdHJpbmcgdHJhbnNsYXRpb24gY2FjaGUgc2l6ZVwmIzM0O1xuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnOjYzOlx0ZGVwZW5kcyBvbiBTRUNVUklUWV9TRUxJTlVYXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctNjQtXHRkZWZhdWx0IDI1NlxuLS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy03MS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzo3Mjpjb25maWcgU0VDVVJJVFlfU0VMSU5VWF9BVkNfSEFTSF9CSVRTXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctNzMtXHRpbnQgXCYjMzQ7U0VMaW51eCBhdmMgaGFzaHRhYmxlIHNpemVcJiMzNDtcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzo3NDpcdGRlcGVuZHMgb24gU0VDVVJJVFlfU0VMSU5VWFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTc1LVx0cmFuZ2UgOSAxNFxuLS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy03OC1cdCAgVGhpcyBvcHRpb24gc2V0cyB0aGUgbnVtYmVyIG9mIGJ1Y2tldHMgdXNlZCBpbiB0aGUgQVZDIGhhc2ggdGFibGVcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzo3OTpcdCAgdG8gMl5TRUNVUklUWV9TRUxJTlVYX0FWQ19IQVNIX0JJVFMuIEEgaGlnaGVyIHZhbHVlIGhlbHBzIG1haW50YWluXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctODAtXHQgIHNob3J0ZXIgY2hhaW4gbGVuZ3RocyBlc3BlY2lhbGx5IHdoZW4gZXhwYW5kaW5nIEFWQyBub2RlcyB2aWFcbi0tXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctODItXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWc6ODM6Y29uZmlnIFNFQ1VSSVRZX1NFTElOVVhfREVCVUdcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy04NC1cdGJvb2wgXCYjMzQ7U0VMaW51eCBrZXJuZWwgZGVidWdnaW5nIHN1cHBvcnRcJiMzNDtcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzo4NTpcdGRlcGVuZHMgb24gU0VDVVJJVFlfU0VMSU5VWFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTg2LVx0ZGVmYXVsdCBuXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9NYWtlZmlsZS0xMC1cbnNlY3VyaXR5L3NlbGludXgvTWFrZWZpbGU6MTE6b2JqLSQoQ09ORklHX1NFQ1VSSVRZX1NFTElOVVgpIDo9IHNlbGludXgub1xuc2VjdXJpdHkvc2VsaW51eC9NYWtlZmlsZS0xMi1cbnNlY3VyaXR5L3NlbGludXgvTWFrZWZpbGU9MTM9Y2NmbGFncy15IDo9IC1JJChzcmN0cmVlKS9zZWN1cml0eS9zZWxpbnV4IC1JJChzcmN0cmVlKS9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGVcbnNlY3VyaXR5L3NlbGludXgvTWFrZWZpbGUtMTQtXG5zZWN1cml0eS9zZWxpbnV4L01ha2VmaWxlOjE1OmNjZmxhZ3MtJChDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9ERUJVRykgJiM0Mzs9IC1EREVCVUdcbnNlY3VyaXR5L3NlbGludXgvTWFrZWZpbGUtMTYtXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9hdmMuYy0zNy1cbnNlY3VyaXR5L3NlbGludXgvYXZjLmM6Mzg6I2RlZmluZSBBVkNfQ0FDSEVfU0xPVFNcdFx0KDEgXHUwMDNjXHUwMDNjIENPTkZJR19TRUNVUklUWV9TRUxJTlVYX0FWQ19IQVNIX0JJVFMpXG5zZWN1cml0eS9zZWxpbnV4L2F2Yy5jLTM5LSNkZWZpbmUgQVZDX0RFRl9DQUNIRV9USFJFU0hPTERcdEFWQ19DQUNIRV9TTE9UU1xuLS1cbnNlY3VyaXR5L3NlbGludXgvYXZjLmMtNDEtXG5zZWN1cml0eS9zZWxpbnV4L2F2Yy5jOjQyOiNpZmRlZiBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9BVkNfU1RBVFNcbnNlY3VyaXR5L3NlbGludXgvYXZjLmMtNDMtI2RlZmluZSBhdmNfY2FjaGVfc3RhdHNfaW5jcihmaWVsZClcdHRoaXNfY3B1X2luYyhhdmNfY2FjaGVfc3RhdHMuZmllbGQpXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9hdmMuYz04MD1zdHJ1Y3QgYXZjX2NhbGxiYWNrX25vZGUge1xuLS1cbnNlY3VyaXR5L3NlbGludXgvYXZjLmMtODUtXG5zZWN1cml0eS9zZWxpbnV4L2F2Yy5jOjg2OiNpZmRlZiBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9BVkNfU1RBVFNcbnNlY3VyaXR5L3NlbGludXgvYXZjLmMtODctREVGSU5FX1BFUl9DUFUoc3RydWN0IGF2Y19jYWNoZV9zdGF0cywgYXZjX2NhY2hlX3N0YXRzKSA9IHsgMCB9O1xuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz0xMTc9c3RhdGljIGF0b21pY190IHNlbGludXhfc2VjbWFya19yZWZjb3VudCA9IEFUT01JQ19JTklUKDApO1xuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTExOC1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzoxMTk6I2lmZGVmIENPTkZJR19TRUNVUklUWV9TRUxJTlVYX0RFVkVMT1BcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0xMjAtc3RhdGljIGludCBzZWxpbnV4X2VuZm9yY2luZ19ib290IF9faW5pdGRhdGE7XG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTEzND1pbnQgc2VsaW51eF9lbmFibGVkX2Jvb3QgX19pbml0ZGF0YSA9IDE7XG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6MTM1OiNpZmRlZiBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9CT09UUEFSQU1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0xMzYtc3RhdGljIGludCBfX2luaXQgc2VsaW51eF9lbmFibGVkX3NldHVwKGNoYXIgKnN0cilcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZjLmg9MTY2PXZvaWQgYXZjX3NldF9jYWNoZV90aHJlc2hvbGQodW5zaWduZWQgaW50IGNhY2hlX3RocmVzaG9sZCk7XG5zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZjLmgtMTY3LVxuc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2Yy5oOjE2ODojaWZkZWYgQ09ORklHX1NFQ1VSSVRZX1NFTElOVVhfQVZDX1NUQVRTXG5zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZjLmgtMTY5LURFQ0xBUkVfUEVSX0NQVShzdHJ1Y3QgYXZjX2NhY2hlX3N0YXRzLCBhdmNfY2FjaGVfc3RhdHMpO1xuLS1cbnNlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9zZWN1cml0eS5oPTk0PXN0cnVjdCBzZWxpbnV4X3N0YXRlIHtcbnNlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9zZWN1cml0eS5oOjk1OiNpZmRlZiBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9ERVZFTE9QXG5zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvc2VjdXJpdHkuaC05Ni1cdGJvb2wgZW5mb3JjaW5nO1xuLS1cbnNlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9zZWN1cml0eS5oPTExOD1zdGF0aWMgaW5saW5lIHZvaWQgc2VsaW51eF9tYXJrX2luaXRpYWxpemVkKHZvaWQpXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL3NlY3VyaXR5LmgtMTIzLVxuc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL3NlY3VyaXR5Lmg6MTI0OiNpZmRlZiBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9ERVZFTE9QXG5zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvc2VjdXJpdHkuaC0xMjUtc3RhdGljIGlubGluZSBib29sIGVuZm9yY2luZ19lbmFibGVkKHZvaWQpXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9zZWxpbnV4ZnMuYz0xMjA9c3RhdGljIHNzaXplX3Qgc2VsX3JlYWRfZW5mb3JjZShzdHJ1Y3QgZmlsZSAqZmlscCwgY2hhciBfX3VzZXIgKmJ1Zixcbi0tXG5zZWN1cml0eS9zZWxpbnV4L3NlbGludXhmcy5jLTEzMC1cbnNlY3VyaXR5L3NlbGludXgvc2VsaW51eGZzLmM6MTMxOiNpZmRlZiBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9ERVZFTE9QXG5zZWN1cml0eS9zZWxpbnV4L3NlbGludXhmcy5jLTEzMi1zdGF0aWMgc3NpemVfdCBzZWxfd3JpdGVfZW5mb3JjZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1Zixcbi0tXG5zZWN1cml0eS9zZWxpbnV4L3NlbGludXhmcy5jPTEzOTI9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc2VsX2F2Y19oYXNoX3N0YXRzX29wcyA9IHtcbi0tXG5zZWN1cml0eS9zZWxpbnV4L3NlbGludXhmcy5jLTEzOTYtXG5zZWN1cml0eS9zZWxpbnV4L3NlbGludXhmcy5jOjEzOTc6I2lmZGVmIENPTkZJR19TRUNVUklUWV9TRUxJTlVYX0FWQ19TVEFUU1xuc2VjdXJpdHkvc2VsaW51eC9zZWxpbnV4ZnMuYy0xMzk4LXN0YXRpYyBzdHJ1Y3QgYXZjX2NhY2hlX3N0YXRzICpzZWxfYXZjX2dldF9zdGF0X2lkeChsb2ZmX3QgKmlkeClcbi0tXG5zZWN1cml0eS9zZWxpbnV4L3NlbGludXhmcy5jPTE0Njg9c3RhdGljIGludCBzZWxfbWFrZV9hdmNfZmlsZXMoc3RydWN0IGRlbnRyeSAqZGlyKVxuLS1cbnNlY3VyaXR5L3NlbGludXgvc2VsaW51eGZzLmMtMTQ3Ny1cdFx0eyBcJiMzNDtoYXNoX3N0YXRzXCYjMzQ7LCBcdTAwMjZzZWxfYXZjX2hhc2hfc3RhdHNfb3BzLCBTX0lSVUdPIH0sXG5zZWN1cml0eS9zZWxpbnV4L3NlbGludXhmcy5jOjE0Nzg6I2lmZGVmIENPTkZJR19TRUNVUklUWV9TRUxJTlVYX0FWQ19TVEFUU1xuc2VjdXJpdHkvc2VsaW51eC9zZWxpbnV4ZnMuYy0xNDc5LVx0XHR7IFwmIzM0O2NhY2hlX3N0YXRzXCYjMzQ7LCBcdTAwMjZzZWxfYXZjX2NhY2hlX3N0YXRzX29wcywgU19JUlVHTyB9LFxuLS1cbnNlY3VyaXR5L3NlbGludXgvc3MvYXZ0YWIuYz0yNTM9aW50IGF2dGFiX2FsbG9jX2R1cChzdHJ1Y3QgYXZ0YWIgKm5ldywgY29uc3Qgc3RydWN0IGF2dGFiICpvcmlnKVxuLS1cbnNlY3VyaXR5L3NlbGludXgvc3MvYXZ0YWIuYy0yNTctXG5zZWN1cml0eS9zZWxpbnV4L3NzL2F2dGFiLmM6MjU4OiNpZmRlZiBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9ERUJVR1xuc2VjdXJpdHkvc2VsaW51eC9zcy9hdnRhYi5jLTI1OS12b2lkIGF2dGFiX2hhc2hfZXZhbChzdHJ1Y3QgYXZ0YWIgKmgsIGNvbnN0IGNoYXIgKnRhZylcbi0tXG5zZWN1cml0eS9zZWxpbnV4L3NzL2F2dGFiLmMtMjg5LX1cbnNlY3VyaXR5L3NlbGludXgvc3MvYXZ0YWIuYzoyOTA6I2VuZGlmIC8qIENPTkZJR19TRUNVUklUWV9TRUxJTlVYX0RFQlVHICovXG5zZWN1cml0eS9zZWxpbnV4L3NzL2F2dGFiLmMtMjkxLVxuLS1cbnNlY3VyaXR5L3NlbGludXgvc3MvYXZ0YWIuaD0xMDc9dm9pZCBhdnRhYl9kZXN0cm95KHN0cnVjdCBhdnRhYiAqaCk7XG4tLVxuc2VjdXJpdHkvc2VsaW51eC9zcy9hdnRhYi5oLTExMS1cbnNlY3VyaXR5L3NlbGludXgvc3MvYXZ0YWIuaDoxMTI6I2lmZGVmIENPTkZJR19TRUNVUklUWV9TRUxJTlVYX0RFQlVHXG5zZWN1cml0eS9zZWxpbnV4L3NzL2F2dGFiLmgtMTEzLXZvaWQgYXZ0YWJfaGFzaF9ldmFsKHN0cnVjdCBhdnRhYiAqaCwgY29uc3QgY2hhciAqdGFnKTtcbi0tXG5zZWN1cml0eS9zZWxpbnV4L3NzL2hhc2h0YWIuYz04OD1pbnQgaGFzaHRhYl9tYXAoc3RydWN0IGhhc2h0YWIgKmgsIGludCAoKmFwcGx5KSh2b2lkICprLCB2b2lkICpkLCB2b2lkICphcmdzKSxcbi0tXG5zZWN1cml0eS9zZWxpbnV4L3NzL2hhc2h0YWIuYy0xMDYtXG5zZWN1cml0eS9zZWxpbnV4L3NzL2hhc2h0YWIuYzoxMDc6I2lmZGVmIENPTkZJR19TRUNVUklUWV9TRUxJTlVYX0RFQlVHXG5zZWN1cml0eS9zZWxpbnV4L3NzL2hhc2h0YWIuYy0xMDgtdm9pZCBoYXNodGFiX3N0YXQoc3RydWN0IGhhc2h0YWIgKmgsIHN0cnVjdCBoYXNodGFiX2luZm8gKmluZm8pXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9zcy9oYXNodGFiLmMtMTM3LX1cbnNlY3VyaXR5L3NlbGludXgvc3MvaGFzaHRhYi5jOjEzODojZW5kaWYgLyogQ09ORklHX1NFQ1VSSVRZX1NFTElOVVhfREVCVUcgKi9cbnNlY3VyaXR5L3NlbGludXgvc3MvaGFzaHRhYi5jLTEzOS1cbi0tXG5zZWN1cml0eS9zZWxpbnV4L3NzL2hhc2h0YWIuaD0xMzk9aW50IGhhc2h0YWJfZHVwbGljYXRlKHN0cnVjdCBoYXNodGFiICpuZXcsIGNvbnN0IHN0cnVjdCBoYXNodGFiICpvcmlnLFxuLS1cbnNlY3VyaXR5L3NlbGludXgvc3MvaGFzaHRhYi5oLTE0My1cbnNlY3VyaXR5L3NlbGludXgvc3MvaGFzaHRhYi5oOjE0NDojaWZkZWYgQ09ORklHX1NFQ1VSSVRZX1NFTElOVVhfREVCVUdcbnNlY3VyaXR5L3NlbGludXgvc3MvaGFzaHRhYi5oLTE0NS0vKiBGaWxsIGluZm8gd2l0aCBzb21lIGhhc2ggdGFibGUgc3RhdGlzdGljcyAqL1xuLS1cbnNlY3VyaXR5L3NlbGludXgvc3MvcG9saWN5ZGIuYy00MC1cbnNlY3VyaXR5L3NlbGludXgvc3MvcG9saWN5ZGIuYzo0MTojaWZkZWYgQ09ORklHX1NFQ1VSSVRZX1NFTElOVVhfREVCVUdcbnNlY3VyaXR5L3NlbGludXgvc3MvcG9saWN5ZGIuYy00Mi0vKiBjbGFuZy1mb3JtYXQgb2ZmICovXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9zcy9wb2xpY3lkYi5jPTY5MT1zdGF0aWMgaW50ICgqY29uc3QgaW5kZXhfZltTWU1fTlVNXSkodm9pZCAqa2V5LCB2b2lkICpkYXR1bSwgdm9pZCAqZGF0YXApID0ge1xuLS1cbnNlY3VyaXR5L3NlbGludXgvc3MvcG9saWN5ZGIuYy03MDItXG5zZWN1cml0eS9zZWxpbnV4L3NzL3BvbGljeWRiLmM6NzAzOiNpZmRlZiBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9ERUJVR1xuc2VjdXJpdHkvc2VsaW51eC9zcy9wb2xpY3lkYi5jLTcwNC1zdGF0aWMgdm9pZCBoYXNoX2V2YWwoc3RydWN0IGhhc2h0YWIgKmgsIGNvbnN0IGNoYXIgKmhhc2hfbmFtZSxcbi0tXG5zZWN1cml0eS9zZWxpbnV4L3NzL3BvbGljeWRiLmM9NzMwPXN0YXRpYyBpbmxpbmUgdm9pZCBzeW10YWJfaGFzaF9ldmFsKHN0cnVjdCBzeW10YWIgKnMpXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9zcy9wb2xpY3lkYi5jLTczMi19XG5zZWN1cml0eS9zZWxpbnV4L3NzL3BvbGljeWRiLmM6NzMzOiNlbmRpZiAvKiBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9ERUJVRyAqL1xuc2VjdXJpdHkvc2VsaW51eC9zcy9wb2xpY3lkYi5jLTczNC1cbi0tXG5zZWN1cml0eS9zZWxpbnV4L3NzL3NpZHRhYi5jPTM1PWludCBzaWR0YWJfaW5pdChzdHJ1Y3Qgc2lkdGFiICpzKVxuLS1cbnNlY3VyaXR5L3NlbGludXgvc3Mvc2lkdGFiLmMtNTAtXG5zZWN1cml0eS9zZWxpbnV4L3NzL3NpZHRhYi5jOjUxOiNpZiBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9TSUQyU1RSX0NBQ0hFX1NJWkUgXHUwMDNlIDBcbnNlY3VyaXR5L3NlbGludXgvc3Mvc2lkdGFiLmM6NTI6XHRzLVx1MDAzZWNhY2hlX2ZyZWVfc2xvdHMgPSBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9TSUQyU1RSX0NBQ0hFX1NJWkU7XG5zZWN1cml0eS9zZWxpbnV4L3NzL3NpZHRhYi5jLTUzLVx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2cy1cdTAwM2VjYWNoZV9scnVfbGlzdCk7XG4tLVxuc2VjdXJpdHkvc2VsaW51eC9zcy9zaWR0YWIuYz03OD1pbnQgc2lkdGFiX3NldF9pbml0aWFsKHN0cnVjdCBzaWR0YWIgKnMsIHUzMiBzaWQsIHN0cnVjdCBjb250ZXh0ICpjb250ZXh0KVxuLS1cbnNlY3VyaXR5L3NlbGludXgvc3Mvc2lkdGFiLmMtOTItXG5zZWN1cml0eS9zZWxpbnV4L3NzL3NpZHRhYi5jOjkzOiNpZiBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9TSUQyU1RSX0NBQ0hFX1NJWkUgXHUwMDNlIDBcbnNlY3VyaXR5L3NlbGludXgvc3Mvc2lkdGFiLmMtOTQtXHRpc2lkLVx1MDAzZWVudHJ5LmNhY2hlID0gTlVMTDtcbi0tXG5zZWN1cml0eS9zZWxpbnV4L3NzL3NpZHRhYi5jPTUwOD1zdGF0aWMgdm9pZCBzaWR0YWJfZGVzdHJveV9lbnRyeShzdHJ1Y3Qgc2lkdGFiX2VudHJ5ICplbnRyeSlcbi0tXG5zZWN1cml0eS9zZWxpbnV4L3NzL3NpZHRhYi5jLTUxMC1cdGNvbnRleHRfZGVzdHJveShcdTAwMjZlbnRyeS1cdTAwM2Vjb250ZXh0KTtcbnNlY3VyaXR5L3NlbGludXgvc3Mvc2lkdGFiLmM6NTExOiNpZiBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9TSUQyU1RSX0NBQ0hFX1NJWkUgXHUwMDNlIDBcbnNlY3VyaXR5L3NlbGludXgvc3Mvc2lkdGFiLmMtNTEyLVx0a2ZyZWUocmN1X2RlcmVmZXJlbmNlX3JhdyhlbnRyeS1cdTAwM2VjYWNoZSkpO1xuLS1cbnNlY3VyaXR5L3NlbGludXgvc3Mvc2lkdGFiLmM9NTQxPXZvaWQgc2lkdGFiX2Rlc3Ryb3koc3RydWN0IHNpZHRhYiAqcylcbi0tXG5zZWN1cml0eS9zZWxpbnV4L3NzL3NpZHRhYi5jLTU2MC1cbnNlY3VyaXR5L3NlbGludXgvc3Mvc2lkdGFiLmM6NTYxOiNpZiBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9TSUQyU1RSX0NBQ0hFX1NJWkUgXHUwMDNlIDBcbnNlY3VyaXR5L3NlbGludXgvc3Mvc2lkdGFiLmMtNTYyLVxuLS1cbnNlY3VyaXR5L3NlbGludXgvc3Mvc2lkdGFiLmM9NjA4PWludCBzaWR0YWJfc2lkMnN0cl9nZXQoc3RydWN0IHNpZHRhYiAqcywgc3RydWN0IHNpZHRhYl9lbnRyeSAqZW50cnksIGNoYXIgKipvdXQsXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9zcy9zaWR0YWIuYy02MzctXG5zZWN1cml0eS9zZWxpbnV4L3NzL3NpZHRhYi5jOjYzODojZW5kaWYgLyogQ09ORklHX1NFQ1VSSVRZX1NFTElOVVhfU0lEMlNUUl9DQUNIRV9TSVpFIFx1MDAzZSAwICovXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9zcy9zaWR0YWIuaD0yMT1zdHJ1Y3Qgc2lkdGFiX2VudHJ5IHtcbi0tXG5zZWN1cml0eS9zZWxpbnV4L3NzL3NpZHRhYi5oLTI0LVx0c3RydWN0IGNvbnRleHQgY29udGV4dDtcbnNlY3VyaXR5L3NlbGludXgvc3Mvc2lkdGFiLmg6MjU6I2lmIENPTkZJR19TRUNVUklUWV9TRUxJTlVYX1NJRDJTVFJfQ0FDSEVfU0laRSBcdTAwM2UgMFxuc2VjdXJpdHkvc2VsaW51eC9zcy9zaWR0YWIuaC0yNi1cdHN0cnVjdCBzaWR0YWJfc3RyX2NhY2hlIF9fcmN1ICpjYWNoZTtcbi0tXG5zZWN1cml0eS9zZWxpbnV4L3NzL3NpZHRhYi5oPTY5PXN0cnVjdCBzaWR0YWJfY29udmVydF9wYXJhbXMge1xuLS1cbnNlY3VyaXR5L3NlbGludXgvc3Mvc2lkdGFiLmgtNzMtXG5zZWN1cml0eS9zZWxpbnV4L3NzL3NpZHRhYi5oOjc0OiNkZWZpbmUgU0lEVEFCX0hBU0hfQklUUyAgICBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9TSURUQUJfSEFTSF9CSVRTXG5zZWN1cml0eS9zZWxpbnV4L3NzL3NpZHRhYi5oLTc1LSNkZWZpbmUgU0lEVEFCX0hBU0hfQlVDS0VUUyAoMSBcdTAwM2NcdTAwM2MgU0lEVEFCX0hBU0hfQklUUylcbi0tXG5zZWN1cml0eS9zZWxpbnV4L3NzL3NpZHRhYi5oPTc3PXN0cnVjdCBzaWR0YWIge1xuLS1cbnNlY3VyaXR5L3NlbGludXgvc3Mvc2lkdGFiLmgtOTItXG5zZWN1cml0eS9zZWxpbnV4L3NzL3NpZHRhYi5oOjkzOiNpZiBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9TSUQyU1RSX0NBQ0hFX1NJWkUgXHUwMDNlIDBcbnNlY3VyaXR5L3NlbGludXgvc3Mvc2lkdGFiLmgtOTQtXHQvKiBTSUQgLVx1MDAzZSBjb250ZXh0IHN0cmluZyBjYWNoZSAqL1xuLS1cbnNlY3VyaXR5L3NlbGludXgvc3Mvc2lkdGFiLmg9MTM5PWludCBzaWR0YWJfaGFzaF9zdGF0cyhzdHJ1Y3Qgc2lkdGFiICpzaWR0YWIsIGNoYXIgKnBhZ2UpO1xuc2VjdXJpdHkvc2VsaW51eC9zcy9zaWR0YWIuaC0xNDAtXG5zZWN1cml0eS9zZWxpbnV4L3NzL3NpZHRhYi5oOjE0MTojaWYgQ09ORklHX1NFQ1VSSVRZX1NFTElOVVhfU0lEMlNUUl9DQUNIRV9TSVpFIFx1MDAzZSAwXG5zZWN1cml0eS9zZWxpbnV4L3NzL3NpZHRhYi5oLTE0Mi12b2lkIHNpZHRhYl9zaWQyc3RyX3B1dChzdHJ1Y3Qgc2lkdGFiICpzLCBzdHJ1Y3Qgc2lkdGFiX2VudHJ5ICplbnRyeSxcbi0tXG5zZWN1cml0eS9zZWxpbnV4L3NzL3NpZHRhYi5oPTE1Mj1zdGF0aWMgaW5saW5lIGludCBzaWR0YWJfc2lkMnN0cl9nZXQoc3RydWN0IHNpZHRhYiAqcyxcbi0tXG5zZWN1cml0eS9zZWxpbnV4L3NzL3NpZHRhYi5oLTE1Ny19XG5zZWN1cml0eS9zZWxpbnV4L3NzL3NpZHRhYi5oOjE1ODojZW5kaWYgLyogQ09ORklHX1NFQ1VSSVRZX1NFTElOVVhfU0lEMlNUUl9DQUNIRV9TSVpFIFx1MDAzZSAwICovXG5zZWN1cml0eS9zZWxpbnV4L3NzL3NpZHRhYi5oLTE1OS1cbi0tXG5zZWN1cml0eS9zZWxpbnV4L3hmcm0uYy0yNC0gKlx0Q09ORklHX1NFQ1VSSVRZX05FVFdPUktfWEZSTT15XG5zZWN1cml0eS9zZWxpbnV4L3hmcm0uYzoyNTogKlx0Q09ORklHX1NFQ1VSSVRZX1NFTElOVVg9bS95XG5zZWN1cml0eS9zZWxpbnV4L3hmcm0uYy0yNi0gKiBJU1NVRVM6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMjI6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyMDkKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgU0VMaW51eCBpcyBjb25maWd1cmVkIHdpdGhpbiB0aGlzIGtlcm5lbCBidWlsZC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgS2NvbmZpZyBmaWxlcywgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBtZWNoYW5pc21zLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgc3RhcnQgd2l0aCB0aGUgZ2VuZXJhbCBgc2VjdXJpdHkvS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHRoZSB0b3AtbGV2ZWwgb3B0aW9ucyByZWxhdGVkIHRvIHNlY3VyaXR5IGZlYXR1cmVzLgoKKipTRUxpbnV4IENvbmZpZ3VyYXRpb24gSW52ZXN0aWdhdGlvbioqCgpBbHJpZ2h0LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkmIzM5O20gZ29pbmcgdG8gY2hlY2sgdGhvc2UgYEtjb25maWdgIGZpbGVzLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgaW4gYm90aCB0aGUgdG9wLWxldmVsIGBzZWN1cml0eS9LY29uZmlnYCBhbmQgdGhlbiBhbHNvIHRoZSBtb3JlIHNwZWNpZmljIGBzZWN1cml0eS9zZWxpbnV4L0tjb25maWdgIHRvIHNlZSBob3cgU0VMaW51eCBpcyBzZXQgdXAuIFRoZXkgbWlnaHQgYmUgc2VwYXJhdGUgZmlsZXMgZm9yIG1vcmUgY2xhcml0eSwgb3IgdGhleSBtaWdodCBiZSBvbmUgYW5kIHRoZSBzYW1lIGZpbGUuIEluIGFueSBjYXNlLCBJIGtub3cgSSYjMzk7bGwgZmluZCB0aGUgcmVsZXZhbnQgb3B0aW9ucyB0aGVyZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLiBJJiMzOTtsbCBzdGFydCB3aXRoIGBzZWN1cml0eS9LY29uZmlnYCwgdGhhdCYjMzk7cyB1c3VhbGx5IHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDIyOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7c2VjdXJpdHkvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBTZWN1cml0eSBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdG1lbnUgXCYjMzQ7U2VjdXJpdHkgb3B0aW9uc1wmIzM0O1xuICAgNzpcdFxuICAgODpcdHNvdXJjZSBcJiMzNDtzZWN1cml0eS9rZXlzL0tjb25maWdcJiMzNDtcbiAgIDk6XHRcbiAgMTA6XHRjb25maWcgU0VDVVJJVFlfRE1FU0dfUkVTVFJJQ1RcbiAgMTE6XHRcdGJvb2wgXCYjMzQ7UmVzdHJpY3QgdW5wcml2aWxlZ2VkIGFjY2VzcyB0byB0aGUga2VybmVsIHN5c2xvZ1wmIzM0O1xuICAxMjpcdFx0ZGVmYXVsdCBuXG4gIDEzOlx0XHRoZWxwXG4gIDE0Olx0XHQgIFRoaXMgZW5mb3JjZXMgcmVzdHJpY3Rpb25zIG9uIHVucHJpdmlsZWdlZCB1c2VycyByZWFkaW5nIHRoZSBrZXJuZWxcbiAgMTU6XHRcdCAgc3lzbG9nIHZpYSBkbWVzZyg4KS5cbiAgMTY6XHRcbiAgMTc6XHRcdCAgSWYgdGhpcyBvcHRpb24gaXMgbm90IHNlbGVjdGVkLCBubyByZXN0cmljdGlvbnMgd2lsbCBiZSBlbmZvcmNlZFxuICAxODpcdFx0ICB1bmxlc3MgdGhlIGRtZXNnX3Jlc3RyaWN0IHN5c2N0bCBpcyBleHBsaWNpdGx5IHNldCB0byAoMSkuXG4gIDE5Olx0XG4gIDIwOlx0XHQgIElmIHlvdSBhcmUgdW5zdXJlIGhvdyB0byBhbnN3ZXIgdGhpcyBxdWVzdGlvbiwgYW5zd2VyIE4uXG4gIDIxOlx0XG4gIDIyOlx0Y2hvaWNlXG4gIDIzOlx0XHRwcm9tcHQgXCYjMzQ7QWxsb3cgL3Byb2MvcGlkL21lbSBhY2Nlc3Mgb3ZlcnJpZGVcJiMzNDtcbiAgMjQ6XHRcdGRlZmF1bHQgUFJPQ19NRU1fRk9SQ0VfUFRSQUNFXG4gIDI1Olx0XHRoZWxwXG4gIDI2Olx0XHQgIFRyYWRpdGlvbmFsbHkgL3Byb2MvcGlkL21lbSBhbGxvd3MgdXNlcnMgdG8gb3ZlcnJpZGUgbWVtb3J5XG4gIDI3Olx0XHQgIHBlcm1pc3Npb25zIGZvciB1c2VycyBsaWtlIHB0cmFjZSwgYXNzdW1pbmcgdGhleSBoYXZlIHB0cmFjZVxuICAyODpcdFx0ICBjYXBhYmlsaXR5LlxuICAyOTpcdFxuICAzMDpcdFx0ICBUaGlzIGFsbG93cyBwZW9wbGUgdG8gbGltaXQgdGhhdCAtIGVpdGhlciBuZXZlciBvdmVycmlkZSwgb3JcbiAgMzE6XHRcdCAgcmVxdWlyZSBhY3R1YWwgYWN0aXZlIHB0cmFjZSBhdHRhY2htZW50IChkZWZhdWx0KS5cbiAgMzI6XHRcbiAgMzM6XHRjb25maWcgUFJPQ19NRU1fQUxXQVlTX0ZPUkNFXG4gIDM0Olx0XHRib29sIFwmIzM0O1RyYWRpdGlvbmFsIC9wcm9jL3BpZC9tZW0gYmVoYXZpb3JcJiMzNDtcbiAgMzU6XHRcdGhlbHBcbiAgMzY6XHRcdCAgVGhpcyBhbGxvd3MgL3Byb2MvcGlkL21lbSBhY2Nlc3NlcyB0byBvdmVycmlkZSBtZW1vcnkgbWFwcGluZ1xuICAzNzpcdFx0ICBwZXJtaXNzaW9ucyBpZiB5b3UgaGF2ZSBwdHJhY2UgYWNjZXNzIHJpZ2h0cy5cbiAgMzg6XHRcbiAgMzk6XHRjb25maWcgUFJPQ19NRU1fRk9SQ0VfUFRSQUNFXG4gIDQwOlx0XHRib29sIFwmIzM0O1JlcXVpcmUgYWN0aXZlIHB0cmFjZSgpIHVzZSBmb3IgYWNjZXNzIG92ZXJyaWRlXCYjMzQ7XG4gIDQxOlx0XHRoZWxwXG4gIDQyOlx0XHQgIFRoaXMgYWxsb3dzIC9wcm9jL3BpZC9tZW0gYWNjZXNzZXMgdG8gb3ZlcnJpZGUgbWVtb3J5IG1hcHBpbmdcbiAgNDM6XHRcdCAgcGVybWlzc2lvbnMgZm9yIGFjdGl2ZSBwdHJhY2VycyBsaWtlIGdkYi5cbiAgNDQ6XHRcbiAgNDU6XHRjb25maWcgUFJPQ19NRU1fTk9fRk9SQ0VcbiAgNDY6XHRcdGJvb2wgXCYjMzQ7TmV2ZXJcJiMzNDtcbiAgNDc6XHRcdGhlbHBcbiAgNDg6XHRcdCAgTmV2ZXIgb3ZlcnJpZGUgbWVtb3J5IG1hcHBpbmcgcGVybWlzc2lvbnNcbiAgNDk6XHRcbiAgNTA6XHRlbmRjaG9pY2VcbiAgNTE6XHRcbiAgNTI6XHRjb25maWcgTVNFQUxfU1lTVEVNX01BUFBJTkdTXG4gIDUzOlx0XHRib29sIFwmIzM0O21zZWFsIHN5c3RlbSBtYXBwaW5nc1wmIzM0O1xuICA1NDpcdFx0ZGVwZW5kcyBvbiA2NEJJVFxuICA1NTpcdFx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX01TRUFMX1NZU1RFTV9NQVBQSU5HU1xuICA1NjpcdFx0ZGVwZW5kcyBvbiAhQ0hFQ0tQT0lOVF9SRVNUT1JFXG4gIDU3Olx0XHRoZWxwXG4gIDU4Olx0XHQgIEFwcGx5IG1zZWFsIG9uIHN5c3RlbSBtYXBwaW5ncy5cbiAgNTk6XHRcdCAgVGhlIHN5c3RlbSBtYXBwaW5ncyBpbmNsdWRlcyB2ZHNvLCB2dmFyLCB2dmFyX3ZjbG9jayxcbiAgNjA6XHRcdCAgdmVjdG9ycyAoYXJtIGNvbXBhdC1tb2RlKSwgc2lncGFnZSAoYXJtIGNvbXBhdC1tb2RlKSwgdXByb2Jlcy5cbiAgNjE6XHRcbiAgNjI6XHRcdCAgQSA2NC1iaXQga2VybmVsIGlzIHJlcXVpcmVkIGZvciB0aGUgbWVtb3J5IHNlYWxpbmcgZmVhdHVyZS5cbiAgNjM6XHRcdCAgTm8gc3BlY2lmaWMgaGFyZHdhcmUgZmVhdHVyZXMgZnJvbSB0aGUgQ1BVIGFyZSBuZWVkZWQuXG4gIDY0Olx0XG4gIDY1Olx0XHQgIFdBUk5JTkc6IFRoaXMgZmVhdHVyZSBicmVha3MgcHJvZ3JhbXMgd2hpY2ggcmVseSBvbiByZWxvY2F0aW5nXG4gIDY2Olx0XHQgIG9yIHVubWFwcGluZyBzeXN0ZW0gbWFwcGluZ3MuIEtub3duIGJyb2tlbiBzb2Z0d2FyZSBhdCB0aGUgdGltZVxuICA2NzpcdFx0ICBvZiB3cml0aW5nIGluY2x1ZGVzIENIRUNLUE9JTlRfUkVTVE9SRSwgVU1MLCBnVmlzb3IsIHJyLiBUaGVyZWZvcmVcbiAgNjg6XHRcdCAgdGhpcyBjb25maWcgY2FuJiMzOTt0IGJlIGVuYWJsZWQgdW5pdmVyc2FsbHkuXG4gIDY5Olx0XG4gIDcwOlx0XHQgIEZvciBjb21wbGV0ZSBkZXNjcmlwdGlvbnMgb2YgbWVtb3J5IHNlYWxpbmcsIHBsZWFzZSBzZWVcbiAgNzE6XHRcdCAgRG9jdW1lbnRhdGlvbi91c2Vyc3BhY2UtYXBpL21zZWFsLnJzdFxuICA3MjpcdFxuICA3MzpcdGNvbmZpZyBTRUNVUklUWVxuICA3NDpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgZGlmZmVyZW50IHNlY3VyaXR5IG1vZGVsc1wmIzM0O1xuICA3NTpcdFx0ZGVwZW5kcyBvbiBTWVNGU1xuICA3NjpcdFx0ZGVwZW5kcyBvbiBNVUxUSVVTRVJcbiAgNzc6XHRcdGhlbHBcbiAgNzg6XHRcdCAgVGhpcyBhbGxvd3MgeW91IHRvIGNob29zZSBkaWZmZXJlbnQgc2VjdXJpdHkgbW9kdWxlcyB0byBiZVxuICA3OTpcdFx0ICBjb25maWd1cmVkIGludG8geW91ciBrZXJuZWwuXG4gIDgwOlx0XG4gIDgxOlx0XHQgIElmIHRoaXMgb3B0aW9uIGlzIG5vdCBzZWxlY3RlZCwgdGhlIGRlZmF1bHQgTGludXggc2VjdXJpdHlcbiAgODI6XHRcdCAgbW9kZWwgd2lsbCBiZSB1c2VkLlxuICA4MzpcdFxuICA4NDpcdFx0ICBJZiB5b3UgYXJlIHVuc3VyZSBob3cgdG8gYW5zd2VyIHRoaXMgcXVlc3Rpb24sIGFuc3dlciBOLlxuICA4NTpcdFxuICA4NjpcdGNvbmZpZyBIQVNfU0VDVVJJVFlfQVVESVRcbiAgODc6XHRcdGRlZl9ib29sIHlcbiAgODg6XHRcdGRlcGVuZHMgb24gQVVESVRcbiAgODk6XHRcdGRlcGVuZHMgb24gU0VDVVJJVFlcbiAgOTA6XHRcbiAgOTE6XHRjb25maWcgU0VDVVJJVFlGU1xuICA5MjpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgdGhlIHNlY3VyaXR5ZnMgZmlsZXN5c3RlbVwmIzM0O1xuICA5MzpcdFx0aGVscFxuICA5NDpcdFx0ICBUaGlzIHdpbGwgYnVpbGQgdGhlIHNlY3VyaXR5ZnMgZmlsZXN5c3RlbS4gIEl0IGlzIGN1cnJlbnRseSB1c2VkIGJ5XG4gIDk1Olx0XHQgIHZhcmlvdXMgc2VjdXJpdHkgbW9kdWxlcyAoQXBwQXJtb3IsIElNQSwgU2FmZVNldElELCBUT01PWU8sIFRQTSkuXG4gIDk2Olx0XG4gIDk3Olx0XHQgIElmIHlvdSBhcmUgdW5zdXJlIGhvdyB0byBhbnN3ZXIgdGhpcyBxdWVzdGlvbiwgYW5zd2VyIE4uXG4gIDk4Olx0XG4gIDk5Olx0Y29uZmlnIFNFQ1VSSVRZX05FVFdPUktcbiAxMDA6XHRcdGJvb2wgXCYjMzQ7U29ja2V0IGFuZCBOZXR3b3JraW5nIFNlY3VyaXR5IEhvb2tzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMjI6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE3NjUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBTRUxpbnV4IEtjb25maWcqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgYHNlY3VyaXR5L3NlbGludXgvS2NvbmZpZ2AgZmlsZS4gR2l2ZW4gbXkgZmFtaWxpYXJpdHkgd2l0aCB0aGUgU0VMaW51eCBlY29zeXN0ZW0gYW5kIGtlcm5lbCBjb25maWd1cmF0aW9uLCB0aGlzIHNob3VsZCBiZSBhIGZhaXJseSBzdHJhaWdodGZvcndhcmQgcHJvY2Vzcy4gSSBleHBlY3QgdG8gZmluZCB0aGUgY29yZSBvcHRpb25zIGZvciBlbmFibGluZywgZGlzYWJsaW5nLCBhbmQgY29uZmlndXJpbmcgU0VMaW51eCB3aXRoaW4gdGhlIGtlcm5lbCwgYWxvbmcgd2l0aCB0aGUgZGVwZW5kZW5jaWVzIGFuZCByZWxhdGlvbnNoaXBzIHRvIG90aGVyIHNlY3VyaXR5IG1vZHVsZXMuIEkmIzM5O2xsIGJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluOgoKKiAgICoqT3ZlcmFsbCBFbmFibGVtZW50OioqIFRoZSB0b3AtbGV2ZWwgYENPTkZJR19TRUNVUklUWV9TRUxJTlVYYCBvcHRpb24sIG5hdHVyYWxseS4gSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIGhvdyBpdCYjMzk7cyBkZWZpbmVkIGFuZCBpZiB0aGVyZSBhcmUgYW55IGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcy4KKiAgICoqUG9saWN5IENvbnRyb2w6KiogSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgY29udHJvbCBhc3BlY3RzIG9mIHRoZSBkZWZhdWx0IHBvbGljeSBhbmQgcG9saWN5IGxvYWRpbmcuIFRoaXMgbWlnaHQgaW5jbHVkZSBvcHRpb25zIGZvciBlbmZvcmNpbmcgb3IgcGVybWlzc2l2ZSBtb2RlcywgYW5kIHdoZXRoZXIgaXQgaGFzIGR5bmFtaWMgbG9hZGluZyBjYXBhYmlsaXRpZXMuCiogICAqKkFkdmFuY2VkIEZlYXR1cmVzOioqIERlcGVuZGluZyBvbiB0aGUga2VybmVsIHZlcnNpb24gYW5kIGNvbmZpZ3VyYXRpb24sIEkmIzM5O2xsIHNjYW4gZm9yIGFueSBhZHZhbmNlZCBmZWF0dXJlcyBkZWZpbmVkLCBzdWNoIGFzIE1MUy9NQ1Mgc3VwcG9ydCBvciBvdGhlciBzcGVjaWFsaXplZCBTRUxpbnV4IGNhcGFiaWxpdGllcyB0aGF0IG1heSBuZWVkIHRvIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQuCiogICAqKkludGVyYWN0aW9uczoqKiBJJiMzOTtsbCBhbHNvIGdsYW5jZSBhdCB0aGUgc3Vycm91bmRpbmcgY29uZmlndXJhdGlvbiBzcGFjZSB0byBlbnN1cmUgY29tcGF0aWJpbGl0eSwgZXNwZWNpYWxseSB3aXRoIG90aGVyIHNlY3VyaXR5IG1vZHVsZXMgKGUuZy4sIElNQSwgTFNNcykuIFRoZSByZWxhdGlvbnNoaXBzIGFyZSBhbHdheXMgaW50ZXJlc3RpbmcuCgpFc3NlbnRpYWxseSwgSSYjMzk7bSBzZXR0aW5nIHRoZSBzdGFnZS4gVGhpcyBpbml0aWFsIGV4YW1pbmF0aW9uIG9mIGBLY29uZmlnYCB3aWxsIHByb3ZpZGUgYSBmb3VuZGF0aW9uYWwgdW5kZXJzdGFuZGluZyBvZiBob3cgU0VMaW51eCBpcyBpbnRlZ3JhdGVkIGludG8gdGhpcyBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbi4gSXQmIzM5O2xsIGRpcmVjdCBteSBhdHRlbnRpb24gdG8gb3RoZXIgYXNwZWN0cyBJIG1pZ2h0IG5lZWQgdG8gY29uc2lkZXIsIG9yIHRvIG90aGVyIHJlbGF0ZWQgZmlsZXMgdGhhdCBuZWVkIGF0dGVudGlvbi4gT25jZSBJIGhhdmUgYSBnb29kIGdyYXNwIG9mIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIEkgY2FuIG1vdmUgb24gdG8gdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBhbmQgYXNzZXNzIGl0cyBpbXBhY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMjI6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtzZWN1cml0eS9zZWxpbnV4L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgU0VDVVJJVFlfU0VMSU5VWFxuICAgMzpcdFx0Ym9vbCBcJiMzNDtTRUxpbnV4IFN1cHBvcnRcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gU0VDVVJJVFlfTkVUV09SSyBcdTAwMjZcdTAwMjYgQVVESVQgXHUwMDI2XHUwMDI2IE5FVCBcdTAwMjZcdTAwMjYgSU5FVFxuICAgNTpcdFx0c2VsZWN0IE5FVFdPUktfU0VDTUFSS1xuICAgNjpcdFx0ZGVmYXVsdCBuXG4gICA3Olx0XHRoZWxwXG4gICA4Olx0XHQgIFRoaXMgc2VsZWN0cyBTZWN1cml0eS1FbmhhbmNlZCBMaW51eCAoU0VMaW51eCkuXG4gICA5Olx0XHQgIFlvdSB3aWxsIGFsc28gbmVlZCBhIHBvbGljeSBjb25maWd1cmF0aW9uIGFuZCBhIGxhYmVsZWQgZmlsZXN5c3RlbS5cbiAgMTA6XHRcdCAgSWYgeW91IGFyZSB1bnN1cmUgaG93IHRvIGFuc3dlciB0aGlzIHF1ZXN0aW9uLCBhbnN3ZXIgTi5cbiAgMTE6XHRcbiAgMTI6XHRjb25maWcgU0VDVVJJVFlfU0VMSU5VWF9CT09UUEFSQU1cbiAgMTM6XHRcdGJvb2wgXCYjMzQ7U0VMaW51eCBib290IHBhcmFtZXRlclwmIzM0O1xuICAxNDpcdFx0ZGVwZW5kcyBvbiBTRUNVUklUWV9TRUxJTlVYXG4gIDE1Olx0XHRkZWZhdWx0IG5cbiAgMTY6XHRcdGhlbHBcbiAgMTc6XHRcdCAgVGhpcyBvcHRpb24gYWRkcyBhIGtlcm5lbCBwYXJhbWV0ZXIgJiMzOTtzZWxpbnV4JiMzOTssIHdoaWNoIGFsbG93cyBTRUxpbnV4XG4gIDE4Olx0XHQgIHRvIGJlIGRpc2FibGVkIGF0IGJvb3QuICBJZiB0aGlzIG9wdGlvbiBpcyBzZWxlY3RlZCwgU0VMaW51eFxuICAxOTpcdFx0ICBmdW5jdGlvbmFsaXR5IGNhbiBiZSBkaXNhYmxlZCB3aXRoIHNlbGludXg9MCBvbiB0aGUga2VybmVsXG4gIDIwOlx0XHQgIGNvbW1hbmQgbGluZS4gIFRoZSBwdXJwb3NlIG9mIHRoaXMgb3B0aW9uIGlzIHRvIGFsbG93IGEgc2luZ2xlXG4gIDIxOlx0XHQgIGtlcm5lbCBpbWFnZSB0byBiZSBkaXN0cmlidXRlZCB3aXRoIFNFTGludXggYnVpbHQgaW4sIGJ1dCBub3RcbiAgMjI6XHRcdCAgbmVjZXNzYXJpbHkgZW5hYmxlZC5cbiAgMjM6XHRcbiAgMjQ6XHRcdCAgSWYgeW91IGFyZSB1bnN1cmUgaG93IHRvIGFuc3dlciB0aGlzIHF1ZXN0aW9uLCBhbnN3ZXIgTi5cbiAgMjU6XHRcbiAgMjY6XHRjb25maWcgU0VDVVJJVFlfU0VMSU5VWF9ERVZFTE9QXG4gIDI3Olx0XHRib29sIFwmIzM0O1NFTGludXggRGV2ZWxvcG1lbnQgU3VwcG9ydFwmIzM0O1xuICAyODpcdFx0ZGVwZW5kcyBvbiBTRUNVUklUWV9TRUxJTlVYXG4gIDI5Olx0XHRkZWZhdWx0IHlcbiAgMzA6XHRcdGhlbHBcbiAgMzE6XHRcdCAgVGhpcyBlbmFibGVzIHRoZSBkZXZlbG9wbWVudCBzdXBwb3J0IG9wdGlvbiBvZiBTRUxpbnV4LFxuICAzMjpcdFx0ICB3aGljaCBpcyB1c2VmdWwgZm9yIGV4cGVyaW1lbnRpbmcgd2l0aCBTRUxpbnV4IGFuZCBkZXZlbG9waW5nXG4gIDMzOlx0XHQgIHBvbGljaWVzLiAgSWYgdW5zdXJlLCBzYXkgWS4gIFdpdGggdGhpcyBvcHRpb24gZW5hYmxlZCwgdGhlXG4gIDM0Olx0XHQgIGtlcm5lbCB3aWxsIHN0YXJ0IGluIHBlcm1pc3NpdmUgbW9kZSAobG9nIGV2ZXJ5dGhpbmcsIGRlbnkgbm90aGluZylcbiAgMzU6XHRcdCAgdW5sZXNzIHlvdSBzcGVjaWZ5IGVuZm9yY2luZz0xIG9uIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lLiAgWW91XG4gIDM2Olx0XHQgIGNhbiBpbnRlcmFjdGl2ZWx5IHRvZ2dsZSB0aGUga2VybmVsIGJldHdlZW4gZW5mb3JjaW5nIG1vZGUgYW5kXG4gIDM3Olx0XHQgIHBlcm1pc3NpdmUgbW9kZSAoaWYgcGVybWl0dGVkIGJ5IHRoZSBwb2xpY3kpIHZpYVxuICAzODpcdFx0ICAvc3lzL2ZzL3NlbGludXgvZW5mb3JjZS5cbiAgMzk6XHRcbiAgNDA6XHRjb25maWcgU0VDVVJJVFlfU0VMSU5VWF9BVkNfU1RBVFNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAyMjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjc5MQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDI1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgU0VMaW51eCBGaWxlIFByb3RlY3Rpb24gSG9vayBNb2RpZmljYXRpb25zKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGNoYW5nZXMgbWFkZSB3aXRoaW4gYHNlY3VyaXR5L3NlbGludXgvaG9va3MuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgbW9kaWZpY2F0aW9ucywgc28gSSYjMzk7bGwgZ28gdGhyb3VnaCB0aGUgZGlmZiBjYXJlZnVsbHkuIEl0IGxvb2tzIGxpa2Ugd2UgaGF2ZSBhIHNldCBvZiBjb3JlIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiB0d2Vha2VkLgoKRmlyc3QsIEkgc2VlIHNldmVyYWwgaGVscGVyIGZ1bmN0aW9ucyBoYXZlIGJlZW4gbW9kaWZpZWQ6IGBpbm9kZV9zaWRfaGFzX3Blcm1gLCBgaW5vZGVfaGFzX3Blcm1gLCBgc2VsaW51eF9maWxlX3VzZXJfc2lkYCwgYGZpbGVfbWFwX3Byb3RfdG9fYXZgLCBgYmFja2luZ19tb3VudGVyc19oYXNfcGVybWAsIGFuZCBgX19maWxlX21hcF9wcm90X2NoZWNrYC4gVGhlc2UgYXJlIHRoZSBpbnRlcm5hbCBidWlsZGluZyBibG9ja3MgYW5kIGFueSBtb2RpZmljYXRpb24gaGVyZSBwb3RlbnRpYWxseSBoYXMgd2lkZSBpbXBhY3RzLgoKQ3J1Y2lhbGx5LCBJIGFsc28gc2VlIHR3byBMU00gaG9va3MgYmVpbmcgbW9kaWZpZWQ6IGBzZWxpbnV4X2JhY2tpbmdfZmlsZV9hbGxvY2AgYW5kIGBzZWxpbnV4X2JhY2tpbmdfZmlsZV9mcmVlYCwgYXMgd2VsbCBhcyBgc2VsaW51eF9maWxlX21wcm90ZWN0YC4gVGhpcyBpcyB3aGVyZSB0aGUgU0VMaW51eCBwb2xpY3kgZW5mb3JjZW1lbnQgaXMgaW50ZWdyYXRlZCBpbnRvIHRoZSBrZXJuZWwmIzM5O3MgZmlsZSBwcm90ZWN0aW9uIG1lY2hhbmlzbXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBob29rcyBhcmUgZGVmaW5lZCBhbmQgY2FsbGVkIHdpdGhpbiB0aGUgTFNNIGZyYW1ld29yayBpdHNlbGYgYW5kIGhvdyBTRUxpbnV4IGlzIHVzaW5nIHRoZW0uCgpUaGVyZWZvcmUsIG15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIGBzZWN1cml0eS9zZWN1cml0eS5jYC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgZGVmaW5pdGlvbnMgYW5kIHVzYWdlIG9mIHRoZSBgc2VjdXJpdHlfZmlsZV9tcHJvdGVjdGAsIGBzZWN1cml0eV9iYWNraW5nX2ZpbGVfYWxsb2NgLCBhbmQgYHNlY3VyaXR5X2JhY2tpbmdfZmlsZV9mcmVlYCBmdW5jdGlvbnMuIFRoaXMgd2lsbCBjbGFyaWZ5IGhvdyB0aGUgU0VMaW51eCBob29rcyBJIG9ic2VydmVkIGluIGBob29rcy5jYCBhcmUgYWN0dWFsbHkgd2lyZWQgaW50byB0aGUgYnJvYWRlciBzZWN1cml0eSBmcmFtZXdvcmsuIEl04oCZcyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBjb250ZXh0IG9mIHRoZXNlIG1vZGlmaWNhdGlvbnMsIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIHVuZGVybHlpbmcgTFNNIGltcGxlbWVudGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAyMjoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWN1cml0eV9iYWNraW5nX2ZpbGVfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7c2VjdXJpdHkvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3NlY3VyaXR5L3NlY3VyaXR5LmM9MjQzMz12b2lkIHNlY3VyaXR5X2ZpbGVfZnJlZShzdHJ1Y3QgZmlsZSAqZmlsZSlcbi0tXG5zZWN1cml0eS9zZWN1cml0eS5jLTI0NDYtLyoqXG5zZWN1cml0eS9zZWN1cml0eS5jOjI0NDc6ICogc2VjdXJpdHlfYmFja2luZ19maWxlX2FsbG9jKCkgLSBBbGxvY2F0ZSBhbmQgc2V0dXAgYSBiYWNraW5nIGZpbGUgYmxvYlxuc2VjdXJpdHkvc2VjdXJpdHkuYy0yNDQ4LSAqIEBiYWNraW5nX2ZpbGU6IHRoZSBiYWNraW5nIGZpbGVcbi0tXG5zZWN1cml0eS9zZWN1cml0eS5jLTI0NjItICovXG5zZWN1cml0eS9zZWN1cml0eS5jOjI0NjM6aW50IHNlY3VyaXR5X2JhY2tpbmdfZmlsZV9hbGxvYyhzdHJ1Y3QgZmlsZSAqYmFja2luZ19maWxlLFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0yNDY0LVx0XHRcdFx0Y29uc3Qgc3RydWN0IGZpbGUgKnVzZXJfZmlsZSlcbi0tXG5zZWN1cml0eS9zZWN1cml0eS5jLTI0NzItXHRpZiAodW5saWtlbHkocmMpKVxuc2VjdXJpdHkvc2VjdXJpdHkuYzoyNDczOlx0XHRzZWN1cml0eV9iYWNraW5nX2ZpbGVfZnJlZShiYWNraW5nX2ZpbGUpO1xuc2VjdXJpdHkvc2VjdXJpdHkuYy0yNDc0LVxuLS1cbnNlY3VyaXR5L3NlY3VyaXR5LmMtMjQ3OC0vKipcbnNlY3VyaXR5L3NlY3VyaXR5LmM6MjQ3OTogKiBzZWN1cml0eV9iYWNraW5nX2ZpbGVfZnJlZSgpIC0gRnJlZSBhIGJhY2tpbmcgZmlsZSBibG9iXG5zZWN1cml0eS9zZWN1cml0eS5jLTI0ODAtICogQGJhY2tpbmdfZmlsZTogdGhlIGJhY2tpbmcgZmlsZVxuLS1cbnNlY3VyaXR5L3NlY3VyaXR5LmMtMjQ4NC0gKi9cbnNlY3VyaXR5L3NlY3VyaXR5LmM6MjQ4NTp2b2lkIHNlY3VyaXR5X2JhY2tpbmdfZmlsZV9mcmVlKHN0cnVjdCBmaWxlICpiYWNraW5nX2ZpbGUpXG5zZWN1cml0eS9zZWN1cml0eS5jLTI0ODYte1xuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz0zOTA1PXN0YXRpYyB2b2lkIHNlbGludXhfYmFja2luZ19maWxlX2ZyZWUoc3RydWN0IGZpbGUgKmJhY2tpbmdfZmlsZSlcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzkwOC1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzozOTA5Olx0Lyogc2VjdXJpdHlfYmFja2luZ19maWxlX2ZyZWUoKSBtYXkgYmUgY2FsbGVkIHR3aWNlIGFmdGVyIGFuIGVycm9yICovXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzkxMC1cdGlmICghYmFja2luZ19maWxlX3NlY3VyaXR5KGJhY2tpbmdfZmlsZSkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDIyOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODg5CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhvc2UgZnVuY3Rpb24gbmFtZXMsIGV4cHJlc3NlZCBhcyB5b3VyIHJlcXVlc3Q6CgoqKkFuYWx5emluZyBTZWN1cml0eSBCYWNraW5nIEZpbGUgT3BlcmF0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb24gbmFtZXM6IGBzZWN1cml0eV9iYWNraW5nX2ZpbGVfYWxsb2NgLCBgc2VjdXJpdHlfYmFja2luZ19maWxlX2ZyZWVgLCBhbmQgYHNlY3VyaXR5X2ZpbGVfbXByb3RlY3RgLiBJbW1lZGlhdGVseSwgSSBzZWUgYSBjbGVhciByZWxhdGlvbnNoaXAuIFRoZXkgYWxsIGRlYWwgd2l0aCwgYXMgdGhlIG5hbWVzIHN1Z2dlc3QsIHNlY3VyaXR5LXJlbGF0ZWQgaW50ZXJhY3Rpb25zIHdpdGggYmFja2luZyBmaWxlcywgd2hpY2ggbGlrZWx5IHJlbGF0ZXMgdG8gZmlsZS1iYWNrZWQgbWVtb3J5IHJlZ2lvbnMgYW5kIHRoZWlyIHNlY3VyaXR5IGNvbnRleHRzLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJiMzOTttIGFzc3VtaW5nIHdlIGFyZSBkZWFsaW5nIHdpdGggc29tZSBmb3JtIG9mIG1lbW9yeSBwcm90ZWN0aW9uIHRpZWQgdG8gZmlsZSBtYXBwaW5nIG9yIHBvc3NpYmx5IHNhbmRib3hpbmcuCgpNeSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGdyYXBoLiBJJiMzOTttIGdvaW5nIHRvIGRldGVybWluZSB3aGljaCBmdW5jdGlvbnMgYXJlICpjYWxsaW5nKiBgc2VjdXJpdHlfYmFja2luZ19maWxlX2FsbG9jYCBhbmQgYHNlY3VyaXR5X2JhY2tpbmdfZmlsZV9mcmVlYC4gVHJhY2luZyB0aGVzZSBjYWxscyB3aWxsIGdpdmUgbWUgdmFsdWFibGUgY29udGV4dC4gVW5kZXJzdGFuZGluZyB0aGUgY29kZSBwYXRocyB0aGF0ICp1c2UqIHRoZSBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIGZ1bmN0aW9ucyB3aWxsIHJldmVhbCB0aGUgc3BlY2lmaWMgc2VjdXJpdHkgY29uY2VybnMgYW5kIHRoZSBvdmVyYWxsIG9wZXJhdGlvbmFsIHBhdHRlcm5zIHN1cnJvdW5kaW5nIHRoZSBiYWNraW5nIGZpbGUgc2VjdXJpdHkgbWVjaGFuaXNtLiBUaGlzIHdpbGwgbGlrZWx5IHNob3cgdGhlIGluaXRpYWxpemF0aW9uIGFuZCBkZXN0cnVjdGlvbiBwcm9jZXNzIGZvciBzZWN1cml0eSBjb250ZXh0cyBhc3NvY2lhdGVkIHdpdGggdGhlIGJhY2tpbmcgZmlsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMjI6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VjdXJpdHlfYmFja2luZ19maWxlXyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9maWxlX3RhYmxlLmM9ODg9c3RhdGljIGlubGluZSB2b2lkIGJhY2tpbmdfZmlsZV9mcmVlKHN0cnVjdCBiYWNraW5nX2ZpbGUgKmZmKVxuZnMvZmlsZV90YWJsZS5jLTg5LXtcbmZzL2ZpbGVfdGFibGUuYzo5MDpcdHNlY3VyaXR5X2JhY2tpbmdfZmlsZV9mcmVlKFx1MDAyNmZmLVx1MDAzZWZpbGUpO1xuZnMvZmlsZV90YWJsZS5jLTkxLVx0cGF0aF9wdXQoXHUwMDI2ZmYtXHUwMDNldXNlcl9wYXRoKTtcbi0tXG5mcy9maWxlX3RhYmxlLmM9MzExPXN0YXRpYyBpbnQgaW5pdF9iYWNraW5nX2ZpbGUoc3RydWN0IGJhY2tpbmdfZmlsZSAqZmYsXG4tLVxuZnMvZmlsZV90YWJsZS5jLTMxNS1cdGJhY2tpbmdfZmlsZV9zZXRfc2VjdXJpdHkoXHUwMDI2ZmYtXHUwMDNlZmlsZSwgTlVMTCk7XG5mcy9maWxlX3RhYmxlLmM6MzE2Olx0cmV0dXJuIHNlY3VyaXR5X2JhY2tpbmdfZmlsZV9hbGxvYyhcdTAwMjZmZi1cdTAwM2VmaWxlLCB1c2VyX2ZpbGUpO1xuZnMvZmlsZV90YWJsZS5jLTMxNy19XG4tLVxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oPTQ3ND12b2lkIHNlY3VyaXR5X2ZpbGVfZnJlZShzdHJ1Y3QgZmlsZSAqZmlsZSk7XG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5Lmg6NDc1OmludCBzZWN1cml0eV9iYWNraW5nX2ZpbGVfYWxsb2Moc3RydWN0IGZpbGUgKmJhY2tpbmdfZmlsZSxcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaC00NzYtXHRcdFx0XHRjb25zdCBzdHJ1Y3QgZmlsZSAqdXNlcl9maWxlKTtcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaDo0Nzc6dm9pZCBzZWN1cml0eV9iYWNraW5nX2ZpbGVfZnJlZShzdHJ1Y3QgZmlsZSAqYmFja2luZ19maWxlKTtcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaC00NzgtaW50IHNlY3VyaXR5X2ZpbGVfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5Lmg9MTE0OD1zdGF0aWMgaW5saW5lIHZvaWQgc2VjdXJpdHlfZmlsZV9mcmVlKHN0cnVjdCBmaWxlICpmaWxlKVxuLS1cbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaC0xMTUwLVxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oOjExNTE6c3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfYmFja2luZ19maWxlX2FsbG9jKHN0cnVjdCBmaWxlICpiYWNraW5nX2ZpbGUsXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgtMTE1Mi1cdFx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGZpbGUgKnVzZXJfZmlsZSlcbi0tXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgtMTE1Ni1cbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaDoxMTU3OnN0YXRpYyBpbmxpbmUgdm9pZCBzZWN1cml0eV9iYWNraW5nX2ZpbGVfZnJlZShzdHJ1Y3QgZmlsZSAqYmFja2luZ19maWxlKVxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTExNTgteyB9XG4tLVxuc2VjdXJpdHkvc2VjdXJpdHkuYz0yNDMzPXZvaWQgc2VjdXJpdHlfZmlsZV9mcmVlKHN0cnVjdCBmaWxlICpmaWxlKVxuLS1cbnNlY3VyaXR5L3NlY3VyaXR5LmMtMjQ0Ni0vKipcbnNlY3VyaXR5L3NlY3VyaXR5LmM6MjQ0NzogKiBzZWN1cml0eV9iYWNraW5nX2ZpbGVfYWxsb2MoKSAtIEFsbG9jYXRlIGFuZCBzZXR1cCBhIGJhY2tpbmcgZmlsZSBibG9iXG5zZWN1cml0eS9zZWN1cml0eS5jLTI0NDgtICogQGJhY2tpbmdfZmlsZTogdGhlIGJhY2tpbmcgZmlsZVxuLS1cbnNlY3VyaXR5L3NlY3VyaXR5LmMtMjQ2Mi0gKi9cbnNlY3VyaXR5L3NlY3VyaXR5LmM6MjQ2MzppbnQgc2VjdXJpdHlfYmFja2luZ19maWxlX2FsbG9jKHN0cnVjdCBmaWxlICpiYWNraW5nX2ZpbGUsXG5zZWN1cml0eS9zZWN1cml0eS5jLTI0NjQtXHRcdFx0XHRjb25zdCBzdHJ1Y3QgZmlsZSAqdXNlcl9maWxlKVxuLS1cbnNlY3VyaXR5L3NlY3VyaXR5LmMtMjQ3Mi1cdGlmICh1bmxpa2VseShyYykpXG5zZWN1cml0eS9zZWN1cml0eS5jOjI0NzM6XHRcdHNlY3VyaXR5X2JhY2tpbmdfZmlsZV9mcmVlKGJhY2tpbmdfZmlsZSk7XG5zZWN1cml0eS9zZWN1cml0eS5jLTI0NzQtXG4tLVxuc2VjdXJpdHkvc2VjdXJpdHkuYy0yNDc4LS8qKlxuc2VjdXJpdHkvc2VjdXJpdHkuYzoyNDc5OiAqIHNlY3VyaXR5X2JhY2tpbmdfZmlsZV9mcmVlKCkgLSBGcmVlIGEgYmFja2luZyBmaWxlIGJsb2JcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMjQ4MC0gKiBAYmFja2luZ19maWxlOiB0aGUgYmFja2luZyBmaWxlXG4tLVxuc2VjdXJpdHkvc2VjdXJpdHkuYy0yNDg0LSAqL1xuc2VjdXJpdHkvc2VjdXJpdHkuYzoyNDg1OnZvaWQgc2VjdXJpdHlfYmFja2luZ19maWxlX2ZyZWUoc3RydWN0IGZpbGUgKmJhY2tpbmdfZmlsZSlcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMjQ4Ni17XG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTM5MDU9c3RhdGljIHZvaWQgc2VsaW51eF9iYWNraW5nX2ZpbGVfZnJlZShzdHJ1Y3QgZmlsZSAqYmFja2luZ19maWxlKVxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zOTA4LVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjM5MDk6XHQvKiBzZWN1cml0eV9iYWNraW5nX2ZpbGVfZnJlZSgpIG1heSBiZSBjYWxsZWQgdHdpY2UgYWZ0ZXIgYW4gZXJyb3IgKi9cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zOTEwLVx0aWYgKCFiYWNraW5nX2ZpbGVfc2VjdXJpdHkoYmFja2luZ19maWxlKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMjI6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxNjEKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEJhY2tpbmcgRmlsZSBTZWN1cml0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBmb2N1cyByaWdodCBub3cgaXMgb24gdGhlIHNlY3VyaXR5IGltcGxpY2F0aW9ucyBvZiBiYWNraW5nIGZpbGVzLCBlc3BlY2lhbGx5IHdpdGhpbiBzb21ldGhpbmcgbGlrZSBvdmVybGF5ZnMuIEkgc2VlIHRoYXQgYGJhY2tpbmdfZmlsZV9hbGxvY2AgYW5kIGBiYWNraW5nX2ZpbGVfZnJlZWAgYXJlIHRoZSBrZXkgZW50cnkgcG9pbnRzOyB0aGV5JiMzOTtyZSB0aGUgaG9va3Mgd2hlbiBiYWNraW5nIGZpbGVzIGFyZSBvcGVuZWQgYW5kIHJlbGVhc2VkLCBoYW5kbGluZyB0aGUgbGlmZWN5Y2xlLCBwZXJoYXBzIHZpYSBgYmFja2luZ19maWxlX29wZW5fcHRyYCBvciBgYmFja2luZ190bXBmaWxlX29wZW5gLiBDcnVjaWFsbHksIHdoZW4gYG1wcm90ZWN0YCBpcyBjYWxsZWQgb24gYSBtZW1vcnkgbWFwcGluZyB0aGF0IGludm9sdmVzIGEgYmFja2luZyBmaWxlLCBgc2VsaW51eF9maWxlX21wcm90ZWN0YCBpcyB0cmlnZ2VyZWQuIFRoYXQgdGVsbHMgbWUgSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBjYWxsIHBhdGhzIG9mIGBzZWN1cml0eV9maWxlX21wcm90ZWN0YCBpdHNlbGYuIFdoZXJlIGVsc2UgaXMgdGhpcyBzZWN1cml0eSBjaGVjayBoYXBwZW5pbmc/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB3aWRlbHkgdGhlc2UgcHJvdGVjdGlvbnMgYXJlIGltcGxlbWVudGVkIHRvIHByb3Blcmx5IGFzc2VzcyB0aGUgb3ZlcmFsbCBzZWN1cml0eSBvZiB0aGUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAyMjoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWN1cml0eV9maWxlX21wcm90ZWN0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaD00ODY9aW50IHNlY3VyaXR5X21tYXBfYWRkcih1bnNpZ25lZCBsb25nIGFkZHIpO1xuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oOjQ4NzppbnQgc2VjdXJpdHlfZmlsZV9tcHJvdGVjdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyByZXFwcm90LFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTQ4OC1cdFx0XHQgICB1bnNpZ25lZCBsb25nIHByb3QpO1xuLS1cbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaD0xMTg2PXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X21tYXBfYWRkcih1bnNpZ25lZCBsb25nIGFkZHIpXG4tLVxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTExOTAtXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5Lmg6MTE5MTpzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9maWxlX21wcm90ZWN0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTExOTItXHRcdFx0XHRcdCB1bnNpZ25lZCBsb25nIHJlcXByb3QsXG4tLVxubW0vbXByb3RlY3QuYz04NzE9c3RhdGljIGludCBkb19tcHJvdGVjdF9wa2V5KHVuc2lnbmVkIGxvbmcgc3RhcnQsIHNpemVfdCBsZW4sXG4tLVxubW0vbXByb3RlY3QuYy05ODctXG5tbS9tcHJvdGVjdC5jOjk4ODpcdFx0ZXJyb3IgPSBzZWN1cml0eV9maWxlX21wcm90ZWN0KHZtYSwgcmVxcHJvdCwgcHJvdCk7XG5tbS9tcHJvdGVjdC5jLTk4OS1cdFx0aWYgKGVycm9yKVxuLS1cbnNlY3VyaXR5L3NlY3VyaXR5LmM9MjYxOT1pbnQgc2VjdXJpdHlfbW1hcF9hZGRyKHVuc2lnbmVkIGxvbmcgYWRkcilcbi0tXG5zZWN1cml0eS9zZWN1cml0eS5jLTI2MjQtLyoqXG5zZWN1cml0eS9zZWN1cml0eS5jOjI2MjU6ICogc2VjdXJpdHlfZmlsZV9tcHJvdGVjdCgpIC0gQ2hlY2sgaWYgY2hhbmdpbmcgbWVtb3J5IHByb3RlY3Rpb25zIGlzIGFsbG93ZWRcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMjYyNi0gKiBAdm1hOiBtZW1vcnkgcmVnaW9uXG4tLVxuc2VjdXJpdHkvc2VjdXJpdHkuYy0yNjMzLSAqL1xuc2VjdXJpdHkvc2VjdXJpdHkuYzoyNjM0OmludCBzZWN1cml0eV9maWxlX21wcm90ZWN0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHJlcXByb3QsXG5zZWN1cml0eS9zZWN1cml0eS5jLTI2MzUtXHRcdFx0ICAgdW5zaWduZWQgbG9uZyBwcm90KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAyMjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTkyMgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDkwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogU0VMaW51eCBCYWNraW5nIEZpbGUgSGFuZGxpbmcqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIG11bHRpLWxheWVyIGJhY2tpbmcgZmlsZXMgd2l0aGluIFNFTGludXggcGVybWlzc2lvbnMgY2hlY2tzLCBzcGVjaWZpY2FsbHkgZHVyaW5nIGBtcHJvdGVjdGAgb3BlcmF0aW9ucy4gSXQmIzM5O3MgaGFuZGxpbmcgdGhlIGFsbG9jYXRpb24sIGRlYWxsb2NhdGlvbiwgYW5kIHRyYWNraW5nIG9mIGBiYWNraW5nX2ZpbGVfc2VjdXJpdHlgIHN0cnVjdHVyZXMsIGluY2x1ZGluZyB0aG9zZSBwZXNreSBsYXllcnMuIExvb2tpbmcgYXQgdGhlIGNvZGUsIGl0JiMzOTtzIHRvdWNoaW5nIGR5bmFtaWMgbWVtb3J5IGFsbG9jYXRpb24gKGNydWNpYWwhKSwgcGF0aCByZWZlcmVuY2UgY291bnRpbmcsIGFuZCBwZXJtaXNzaW9uIGNoZWNrcyBvbiBiYWNraW5nIGZpbGVzLCB0aGUgdXN1YWwgc3VzcGVjdHMsIHJpZ2h0PyBPdmVybGF5RlMsIEVST0ZTIHN0YWNrcywgbmVzdGVkIE92ZXJsYXlGUyDigJMgdGhlIHdvcmtzLgoKVGhlIGtleSBmdW5jdGlvbnMgYXJlIGBzZWxpbnV4X2JhY2tpbmdfZmlsZV9hbGxvY2AsIGBzZWxpbnV4X2JhY2tpbmdfZmlsZV9mcmVlYCwgYW5kIGBzZWxpbnV4X2ZpbGVfbXByb3RlY3RgLiBUaGVzZSBhbGwgbG9vayBpbnRlcmVzdGluZyBmb3IgZnV6emluZzogYHNlbGludXhfYmFja2luZ19maWxlX2FsbG9jYCBhbGxvY2F0ZXMgYW4gYXJyYXksIGNvcGllcyBleGlzdGluZyBsYXllcnMsIGFuZCBhcHBlbmRzIHRoZSBjdXJyZW50IG9uZSwgZ2V0dGluZyBwYXRoIHJlZmVyZW5jZXMuIFRoZW4sIGBzZWxpbnV4X2JhY2tpbmdfZmlsZV9mcmVlYCBmcmVlcyB0aGUgcGF0aHMgYW5kIHRoZSBhcnJheSBpdHNlbGYuIEZpbmFsbHksIGBzZWxpbnV4X2ZpbGVfbXByb3RlY3RgIGNhbGxzIGBiYWNraW5nX21vdW50ZXJzX2hhc19wZXJtYCwgd2hpY2ggaXMgY3J1Y2lhbCBmb3IgZGV0ZXJtaW5pbmcgbW91bnRlciBwZXJtaXNzaW9ucy4KCklzIHRoaXMgcmVhY2hhYmxlIGFuZCB3b3J0aCB0aGUgZWZmb3J0PyBBYnNvbHV0ZWx5ISBUaGlzIGlzIGNvcmUgU0VMaW51eCBsb2dpYywgaGFuZGxpbmcgZmlsZSBhbmQgbXByb3RlY3QgcGVybWlzc2lvbiBjaGVja3MsIGFuZCByZWZlcmVuY2UgdHJhY2tpbmcgb24gYmFja2luZyBmaWxlcy4gSXQmIzM5O3MgZnVsbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUsIG1ha2luZyBpdCBhIHByaW1lIHRhcmdldC4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB0aGUgYEZvY3VzU3ltYm9sc2AuIEFjY29yZGluZyB0byB0aGUgaW5zdHJ1Y3Rpb25zLCB3ZSB3YW50IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMsIGlkZWFsbHkgbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMsIHRvIGF2b2lkIHNrZXdpbmcgdGhlIGZ1enogdGVzdCBkaXN0cmlidXRpb24uIEZvcmdldCBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucy4KClNvLCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBwYXRjaCYjMzk7cyBmdW5jdGlvbnMuIEkgc2VlIGBzZWxpbnV4X2JhY2tpbmdfZmlsZV9hbGxvY2AsIGBzZWxpbnV4X2JhY2tpbmdfZmlsZV9mcmVlYCwgYW5kIGBzZWxpbnV4X2ZpbGVfbXByb3RlY3RgIGluIGBzZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNgLCBidXQgdGhleSYjMzk7cmUgbWFya2VkIHN0YXRpYy4gSG93ZXZlciwgdGhleSYjMzk7cmUgcmVnaXN0ZXJlZCBpbiB0aGUgYHNlbGludXhfaG9va3NgIHRhYmxlIGFzIGBiYWNraW5nX2ZpbGVfYWxsb2NgLCBgYmFja2luZ19maWxlX2ZyZWVgLCBhbmQgYGZpbGVfbXByb3RlY3RgIHJlc3BlY3RpdmVseS4KClRoZXJlIGFyZSBhbHNvIGBzZWN1cml0eV9iYWNraW5nX2ZpbGVfYWxsb2NgLCBgc2VjdXJpdHlfYmFja2luZ19maWxlX2ZyZWVgLCBhbmQgYHNlY3VyaXR5X2ZpbGVfbXByb3RlY3RgIGluIGBzZWN1cml0eS9zZWN1cml0eS5jYCwgYnV0IEkgaGF2ZSBhIGZlZWxpbmcgdGhlIHN0YXRpYy1kZWNsYXJlZCBvbmVzIGFyZSB0aGUgb25lcyB3ZSB3YW50LiBTaW5jZSB0aGVpciBhZGRyZXNzZXMgYXJlIHRha2VuIGluIHRoZSBgc2VsaW51eF9ob29rc2AgdGFibGUsIHRoZSBjb21waWxlciBjYW4mIzM5O3QgY29tcGxldGVseSBpbmxpbmUgdGhlbS4gSSYjMzk7bSBwcmV0dHkgc3VyZSB0aGV5IHJldGFpbiB0aGVpciBzeW1ib2xzIGluIHZtbGludXguIFRoYXQmIzM5O3MgZ29vZC4gQW5kIHRoZSBgc2VjdXJpdHlfYmFja2luZ19maWxlX2FsbG9jYCwgYHNlY3VyaXR5X2JhY2tpbmdfZmlsZV9mcmVlYCwgYHNlY3VyaXR5X2ZpbGVfbXByb3RlY3RgIGluIGBzZWN1cml0eS9zZWN1cml0eS5jYCBhcmUgdGhlIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzLgoKU28sIGl0JiMzOTtzOgoqICAgYHNlbGludXhfYmFja2luZ19maWxlX2FsbG9jYCAocmVnaXN0ZXJlZCBhcyBgYmFja2luZ19maWxlX2FsbG9jYCkKKiAgIGBzZWxpbnV4X2JhY2tpbmdfZmlsZV9mcmVlYCAocmVnaXN0ZXJlZCBhcyBgYmFja2luZ19maWxlX2ZyZWVgKQoqICAgYHNlbGludXhfZmlsZV9tcHJvdGVjdGAgKHJlZ2lzdGVyZWQgYXMgYGZpbGVfbXByb3RlY3RgKQoqICAgYHNlY3VyaXR5X2JhY2tpbmdfZmlsZV9hbGxvY2AKKiAgIGBzZWN1cml0eV9iYWNraW5nX2ZpbGVfZnJlZWAKKiAgIGBzZWN1cml0eV9maWxlX21wcm90ZWN0YAoKV2UmIzM5O2xsIGFkZCBib3RoIHNldHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDIyOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7c2VjdXJpdHkvc2VjdXJpdHkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI0NDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjQ0NTpcdFxuMjQ0NjpcdC8qKlxuMjQ0NzpcdCAqIHNlY3VyaXR5X2JhY2tpbmdfZmlsZV9hbGxvYygpIC0gQWxsb2NhdGUgYW5kIHNldHVwIGEgYmFja2luZyBmaWxlIGJsb2JcbjI0NDg6XHQgKiBAYmFja2luZ19maWxlOiB0aGUgYmFja2luZyBmaWxlXG4yNDQ5Olx0ICogQHVzZXJfZmlsZTogdGhlIGFzc29jaWF0ZWQgdXNlciB2aXNpYmxlIGZpbGVcbjI0NTA6XHQgKlxuMjQ1MTpcdCAqIEFsbG9jYXRlIGEgYmFja2luZyBmaWxlIExTTSBibG9iIGFuZCBwZXJmb3JtIGFueSBuZWNlc3NhcnkgaW5pdGlhbGl6YXRpb24gb2ZcbjI0NTI6XHQgKiB0aGUgTFNNIGJsb2IuICBUaGVyZSB3aWxsIGJlIHNvbWUgb3BlcmF0aW9ucyB3aGVyZSB0aGUgTFNNIHdpbGwgbm90IGhhdmVcbjI0NTM6XHQgKiBhY2Nlc3MgdG8gQHVzZXJfZmlsZSBhZnRlciB0aGlzIHBvaW50LCBzbyBhbnkgaW1wb3J0YW50IHN0YXRlIGFzc29jaWF0ZWRcbjI0NTQ6XHQgKiB3aXRoIEB1c2VyX2ZpbGUgdGhhdCBpcyBpbXBvcnRhbnQgdG8gdGhlIExTTSBzaG91bGQgYmUgY2FwdHVyZWQgaW4gdGhlXG4yNDU1Olx0ICogYmFja2luZyBmaWxlJiMzOTtzIExTTSBibG9iLlxuMjQ1NjpcdCAqXG4yNDU3Olx0ICogTFNNJiMzOTtzIHNob3VsZCBhdm9pZCB0YWtpbmcgYSByZWZlcmVuY2UgdG8gQHVzZXJfZmlsZSBpbiB0aGlzIGhvb2sgYXMgaXQgd2lsbFxuMjQ1ODpcdCAqIHJlc3VsdCBpbiBwcm9ibGVtcyBsYXRlciB3aGVuIHRoZSBzeXN0ZW0gYXR0ZW1wdHMgdG8gZHJvcC9wdXQgdGhlIGZpbGVcbjI0NTk6XHQgKiByZWZlcmVuY2VzIGR1ZSB0byBhIGNpcmN1bGFyIGRlcGVuZGVuY3kuXG4yNDYwOlx0ICpcbjI0NjE6XHQgKiBSZXR1cm46IFJldHVybiAwIGlmIHRoZSBob29rIGlzIHN1Y2Nlc3NmdWwsIG5lZ2F0aXZlIHZhbHVlcyBvdGhlcndpc2UuXG4yNDYyOlx0ICovXG4yNDYzOlx0aW50IHNlY3VyaXR5X2JhY2tpbmdfZmlsZV9hbGxvYyhzdHJ1Y3QgZmlsZSAqYmFja2luZ19maWxlLFxuMjQ2NDpcdFx0XHRcdFx0Y29uc3Qgc3RydWN0IGZpbGUgKnVzZXJfZmlsZSlcbjI0NjU6XHR7XG4yNDY2Olx0XHRpbnQgcmM7XG4yNDY3Olx0XG4yNDY4Olx0XHRyYyA9IGxzbV9iYWNraW5nX2ZpbGVfYWxsb2MoYmFja2luZ19maWxlKTtcbjI0Njk6XHRcdGlmIChyYylcbjI0NzA6XHRcdFx0cmV0dXJuIHJjO1xuMjQ3MTpcdFx0cmMgPSBjYWxsX2ludF9ob29rKGJhY2tpbmdfZmlsZV9hbGxvYywgYmFja2luZ19maWxlLCB1c2VyX2ZpbGUpO1xuMjQ3MjpcdFx0aWYgKHVubGlrZWx5KHJjKSlcbjI0NzM6XHRcdFx0c2VjdXJpdHlfYmFja2luZ19maWxlX2ZyZWUoYmFja2luZ19maWxlKTtcbjI0NzQ6XHRcbjI0NzU6XHRcdHJldHVybiByYztcbjI0NzY6XHR9XG4yNDc3Olx0XG4yNDc4Olx0LyoqXG4yNDc5Olx0ICogc2VjdXJpdHlfYmFja2luZ19maWxlX2ZyZWUoKSAtIEZyZWUgYSBiYWNraW5nIGZpbGUgYmxvYlxuMjQ4MDpcdCAqIEBiYWNraW5nX2ZpbGU6IHRoZSBiYWNraW5nIGZpbGVcbjI0ODE6XHQgKlxuMjQ4MjpcdCAqIEZyZWUgYW55IExTTSBzdGF0ZSBhc3NvY2lhdGUgd2l0aCBhIGJhY2tpbmcgZmlsZSYjMzk7cyBMU00gYmxvYiwgaW5jbHVkaW5nIHRoZVxuMjQ4MzpcdCAqIGJsb2IgaXRzZWxmLlxuMjQ4NDpcdCAqL1xuMjQ4NTpcdHZvaWQgc2VjdXJpdHlfYmFja2luZ19maWxlX2ZyZWUoc3RydWN0IGZpbGUgKmJhY2tpbmdfZmlsZSlcbjI0ODY6XHR7XG4yNDg3Olx0XHR2b2lkICpibG9iID0gYmFja2luZ19maWxlX3NlY3VyaXR5KGJhY2tpbmdfZmlsZSk7XG4yNDg4Olx0XG4yNDg5Olx0XHRjYWxsX3ZvaWRfaG9vayhiYWNraW5nX2ZpbGVfZnJlZSwgYmFja2luZ19maWxlKTtcbjI0OTA6XHRcbjI0OTE6XHRcdGlmIChibG9iKSB7XG4yNDkyOlx0XHRcdGJhY2tpbmdfZmlsZV9zZXRfc2VjdXJpdHkoYmFja2luZ19maWxlLCBOVUxMKTtcbjI0OTM6XHRcdFx0a21lbV9jYWNoZV9mcmVlKGxzbV9iYWNraW5nX2ZpbGVfY2FjaGUsIGJsb2IpO1xuMjQ5NDpcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAyMjoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODM0OQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgYHNlY3VyaXR5X2ZpbGVfbXByb3RlY3RgIEZ1bmN0aW9uKioKCk9rYXksIHNvIHdlIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyBhcm91bmQgYHNlY3VyaXR5X2ZpbGVfbXByb3RlY3RgIGluIGBzZWN1cml0eS9zZWN1cml0eS5jYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgZmlsZSBwcm90ZWN0aW9uIG1hZ2ljIGhhcHBlbnMsIHNvIGl0JiMzOTtzIGEgY3JpdGljYWwgYXJlYSBmb3IgZXhhbWluaW5nIHBvdGVudGlhbCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgb3IgY29udHJvbCBmbG93LiBJJiMzOTttIGdvaW5nIHRvIHB1bGwgdXAgdGhlIGNvZGUgYW5kIHN0YXJ0IHRyYWNpbmcgdGhlIGNhbGxzLCBsb29raW5nIGZvciBhbnkgb2J2aW91cyBob2xlcyBvciBhcmVhcyB0aGF0IG1pZ2h0IGJlIGV4cGxvaXRhYmxlLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIGJlIGxvb2tpbmcgYXQgaG93IGZpbGUgYWNjZXNzIHBlcm1pc3Npb25zIGFyZSBoYW5kbGVkIGluIGNvbmp1bmN0aW9uIHdpdGggbWVtb3J5IHByb3RlY3Rpb24gY2hhbmdlcy4gQXJlIHRoZXJlIHJhY2UgY29uZGl0aW9ucz8gQXJlIHRoZXJlIGluc3VmZmljaWVudCBjaGVja3Mgb24gdXNlciBpbnB1dD8gQXJlIHRoZXJlIHdheXMgdG8gYnlwYXNzIHRoZSBpbnRlbmRlZCBzZWN1cml0eSByZXN0cmljdGlvbnMgdGhyb3VnaCBjbGV2ZXIgbWFuaXB1bGF0aW9uIG9mIHRoZSBzeXN0ZW0gY2FsbHM/IEkmIzM5O2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGNvbnRleHQgaW4gd2hpY2ggYHNlY3VyaXR5X2ZpbGVfbXByb3RlY3RgIGlzIGJlaW5nIGludm9rZWQsIGluY2x1ZGluZyB3aGF0IG90aGVyIHNlY3VyaXR5IG1vZHVsZXMgb3IgaG9va3MgYXJlIGFjdGl2ZSBhdCB0aGUgdGltZS4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IGFueSBpbnRlcmFjdGlvbiB3aXRoIExTTXMsIGJlY2F1c2UgdGhhdCYjMzk7cyBhbHdheXMgYW4gaW1wb3J0YW50IGRldGFpbC4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDIyOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7c2VjdXJpdHkvc2VjdXJpdHkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI2MjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjYyNTpcdCAqIHNlY3VyaXR5X2ZpbGVfbXByb3RlY3QoKSAtIENoZWNrIGlmIGNoYW5naW5nIG1lbW9yeSBwcm90ZWN0aW9ucyBpcyBhbGxvd2VkXG4yNjI2Olx0ICogQHZtYTogbWVtb3J5IHJlZ2lvblxuMjYyNzpcdCAqIEByZXFwcm90OiBhcHBsaWNhdGlvbiByZXF1ZXN0ZWQgcHJvdGVjdGlvblxuMjYyODpcdCAqIEBwcm90OiBwcm90ZWN0aW9uIGFwcGxpZWQgYnkgdGhlIGtlcm5lbFxuMjYyOTpcdCAqXG4yNjMwOlx0ICogQ2hlY2sgcGVybWlzc2lvbnMgYmVmb3JlIGNoYW5naW5nIG1lbW9yeSBhY2Nlc3MgcGVybWlzc2lvbnMuXG4yNjMxOlx0ICpcbjI2MzI6XHQgKiBSZXR1cm46IFJldHVybnMgMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuXG4yNjMzOlx0ICovXG4yNjM0Olx0aW50IHNlY3VyaXR5X2ZpbGVfbXByb3RlY3Qoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgcmVxcHJvdCxcbjI2MzU6XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIHByb3QpXG4yNjM2Olx0e1xuMjYzNzpcdFx0cmV0dXJuIGNhbGxfaW50X2hvb2soZmlsZV9tcHJvdGVjdCwgdm1hLCByZXFwcm90LCBwcm90KTtcbjI2Mzg6XHR9XG4yNjM5Olx0XG4yNjQwOlx0LyoqXG4yNjQxOlx0ICogc2VjdXJpdHlfZmlsZV9sb2NrKCkgLSBDaGVjayBpZiBhIGZpbGUgbG9jayBpcyBhbGxvd2VkXG4yNjQyOlx0ICogQGZpbGU6IGZpbGVcbjI2NDM6XHQgKiBAY21kOiBsb2NrIG9wZXJhdGlvbiAoZS5nLiBGX1JETENLLCBGX1dSTENLKVxuMjY0NDpcdCAqXG4yNjQ1Olx0ICogQ2hlY2sgcGVybWlzc2lvbiBiZWZvcmUgcGVyZm9ybWluZyBmaWxlIGxvY2tpbmcgb3BlcmF0aW9ucy4gIE5vdGUgdGhlIGhvb2tcbjI2NDY6XHQgKiBtZWRpYXRlcyBib3RoIGZsb2NrIGFuZCBmY250bCBzdHlsZSBsb2Nrcy5cbjI2NDc6XHQgKlxuMjY0ODpcdCAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC5cbjI2NDk6XHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMjI6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkwMjEKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAyOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgS2NvbmZpZyBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIGZyb20gYSBjb25maWd1cmF0aW9uIHBlcnNwZWN0aXZlLiBJIG5lZWQgdG8gbmFpbCBkb3duIHRoZSBTRUxpbnV4IHJlcXVpcmVtZW50cyBmaXJzdC4gSnVtcGluZyBpbnRvIGBzZWN1cml0eS9zZWxpbnV4L0tjb25maWdgLCBJIHNlZSBgU0VDVVJJVFlfU0VMSU5VWGAgaXMgdGhlIGtleS4gSXQmIzM5O3MgYSBib29sZWFuLCBkZXBlbmRlbnQgb24gYFNFQ1VSSVRZX05FVFdPUktgLCBgQVVESVRgLCBgTkVUYCwgYW5kIGBJTkVUYCwgYW5kIGl0IGBzZWxlY3RgcyBgTkVUV09SS19TRUNNQVJLYCwgd2l0aCBhIGRlZmF1bHQgb2YgJiMzOTtuJiMzOTsuIExvb2tzIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guCgpOb3csIGxldCYjMzk7cyBkb3VibGUtY2hlY2sgdGhlIGRlcGVuZGVuY2llcy4gYFNFQ1VSSVRZX05FVFdPUktgIHJlbGllcyBvbiBib3RoIGBTRUNVUklUWWAgYW5kIGBORVRgLCB3aGljaCBtYWtlcyBzZW5zZS4gSSBrbm93IGBBVURJVGAgbGl2ZXMgaW4gYGluaXQvS2NvbmZpZ2AsIGFuZCBgSU5FVGAgaXMganVzdCBgQ09ORklHX0lORVRgLiBFeGNlbGxlbnQsIEkmIzM5O3ZlIGdvdCB0aGUgY29yZSBTRUxpbnV4IGRlcGVuZGVuY2llcyBjbGVhcmx5IG1hcHBlZC4KCkJ1dCB0aGF0JiMzOTtzIHByb2JhYmx5IG5vdCB0aGUgd2hvbGUgc3RvcnkuIEkgc2hvdWxkIGV4cGxvcmUgb3RoZXIgcG90ZW50aWFsbHkgcmVsYXRlZCBjb25maWd1cmF0aW9ucywgbm90IGp1c3QgdGhlIG9idmlvdXMuIFRoZSBjb21taXQgbWVzc2FnZSBtZW50aW9ucyBgT1ZFUkxBWV9GU2AgYW5kIGBFUk9GU19GU2AsIHNvIGxldCYjMzk7cyBkaWcgaW50byB0aG9zZSBzcGVjaWZpY2FsbHkuIFRoZSBtZW50aW9uIG9mIGJhY2tpbmcgZmlsZXMsIGBzX3N0YWNrX2RlcHRoYCwgYW5kIGlub2RlIHNoYXJpbmcgaW5kaWNhdGVzIGEgcG90ZW50aWFsIGludGVyYWN0aW9uLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgT1ZFUkxBWV9GU2AgaW4gYGZzL292ZXJsYXlmcy9LY29uZmlnYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMjI6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE9WRVJMQVlfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvb3ZlcmxheWZzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL292ZXJsYXlmcy9LY29uZmlnOjI6Y29uZmlnIE9WRVJMQVlfRlNcbmZzL292ZXJsYXlmcy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtPdmVybGF5IGZpbGVzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuLS1cbmZzL292ZXJsYXlmcy9LY29uZmlnLTE0LVxuZnMvb3ZlcmxheWZzL0tjb25maWc6MTU6Y29uZmlnIE9WRVJMQVlfRlNfUkVESVJFQ1RfRElSXG5mcy9vdmVybGF5ZnMvS2NvbmZpZy0xNi1cdGJvb2wgXCYjMzQ7T3ZlcmxheWZzOiB0dXJuIG9uIHJlZGlyZWN0IGRpcmVjdG9yeSBmZWF0dXJlIGJ5IGRlZmF1bHRcJiMzNDtcbi0tXG5mcy9vdmVybGF5ZnMvS2NvbmZpZy0zMC1cbmZzL292ZXJsYXlmcy9LY29uZmlnOjMxOmNvbmZpZyBPVkVSTEFZX0ZTX1JFRElSRUNUX0FMV0FZU19GT0xMT1dcbmZzL292ZXJsYXlmcy9LY29uZmlnLTMyLVx0Ym9vbCBcJiMzNDtPdmVybGF5ZnM6IGZvbGxvdyByZWRpcmVjdHMgZXZlbiBpZiByZWRpcmVjdHMgYXJlIHR1cm5lZCBvZmZcJiMzNDtcbi0tXG5mcy9vdmVybGF5ZnMvS2NvbmZpZy00NS1cbmZzL292ZXJsYXlmcy9LY29uZmlnOjQ2OmNvbmZpZyBPVkVSTEFZX0ZTX0lOREVYXG5mcy9vdmVybGF5ZnMvS2NvbmZpZy00Ny1cdGJvb2wgXCYjMzQ7T3ZlcmxheWZzOiB0dXJuIG9uIGlub2RlcyBpbmRleCBmZWF0dXJlIGJ5IGRlZmF1bHRcJiMzNDtcbi0tXG5mcy9vdmVybGF5ZnMvS2NvbmZpZy02NC1cbmZzL292ZXJsYXlmcy9LY29uZmlnOjY1OmNvbmZpZyBPVkVSTEFZX0ZTX05GU19FWFBPUlRcbmZzL292ZXJsYXlmcy9LY29uZmlnLTY2LVx0Ym9vbCBcJiMzNDtPdmVybGF5ZnM6IHR1cm4gb24gTkZTIGV4cG9ydCBmZWF0dXJlIGJ5IGRlZmF1bHRcJiMzNDtcbi0tXG5mcy9vdmVybGF5ZnMvS2NvbmZpZy05Mi1cbmZzL292ZXJsYXlmcy9LY29uZmlnOjkzOmNvbmZpZyBPVkVSTEFZX0ZTX1hJTk9fQVVUT1xuZnMvb3ZlcmxheWZzL0tjb25maWctOTQtXHRib29sIFwmIzM0O092ZXJsYXlmczogYXV0byBlbmFibGUgaW5vZGUgbnVtYmVyIG1hcHBpbmdcJiMzNDtcbi0tXG5mcy9vdmVybGF5ZnMvS2NvbmZpZy0xMTAtXG5mcy9vdmVybGF5ZnMvS2NvbmZpZzoxMTE6Y29uZmlnIE9WRVJMQVlfRlNfTUVUQUNPUFlcbmZzL292ZXJsYXlmcy9LY29uZmlnLTExMi1cdGJvb2wgXCYjMzQ7T3ZlcmxheWZzOiB0dXJuIG9uIG1ldGFkYXRhIG9ubHkgY29weSB1cCBmZWF0dXJlIGJ5IGRlZmF1bHRcJiMzNDtcbi0tXG5mcy9vdmVybGF5ZnMvS2NvbmZpZy0xMjgtXG5mcy9vdmVybGF5ZnMvS2NvbmZpZzoxMjk6Y29uZmlnIE9WRVJMQVlfRlNfREVCVUdcbmZzL292ZXJsYXlmcy9LY29uZmlnLTEzMC1cdGJvb2wgXCYjMzQ7T3ZlcmxheWZzOiB0dXJuIG9uIGV4dHJhIGRlYnVnZ2luZyBjaGVja3NcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMjI6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAxMTkKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBleHBlcnQgcGVyc3BlY3RpdmU6CgoqKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIEJhY2tpbmcgRmlsZSBVc2FnZSBpbiBGaWxlc3lzdGVtcyoqCgpSaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBgT1ZFUkxBWV9GU2Agb3IgYW55IHJlbGF0ZWQgZmlsZXN5c3RlbXMgYXJlIGVtcGxveWluZyBiYWNraW5nIGZpbGVzIGluIHRoZWlyIGltcGxlbWVudGF0aW9uLiBUaGF0JiMzOTtzIGEgY3J1Y2lhbCBhc3BlY3QgZm9yIHVuZGVyc3RhbmRpbmcgdGhlaXIgYmVoYXZpb3IsIGVzcGVjaWFsbHkgd2hlbiBpdCBjb21lcyB0byBwZXJmb3JtYW5jZSwgZGF0YSBwZXJzaXN0ZW5jZSwgYW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhlIHVuZGVybHlpbmcgc3RvcmFnZS4gVG8gZG8gdGhhdCwgSSYjMzk7bGwgZ28gZGlyZWN0bHkgdG8gdGhlIHNvdXJjZSBjb2RlLiBNeSBwcmVmZXJyZWQgYXBwcm9hY2g/IEEgdGFyZ2V0ZWQgZ3JlcC4gSSYjMzk7bGwgc2VhcmNoIGZvciBzcGVjaWZpYyBmdW5jdGlvbiBuYW1lcyB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2VzIHRoYXQgYXJlIGhpZ2hseSBzdWdnZXN0aXZlIG9mIGJhY2tpbmcgZmlsZSBvcGVyYXRpb25zLiBJJiMzOTtsbCBmb2N1cyBvbiBgYmFja2luZ19maWxlX29wZW5gIGFuZCBgaW5pdF9iYWNraW5nX2ZpbGVgLiBUaG9zZSBhcmUgdGhlIHR3byBmdW5jdGlvbnMgdGhhdCB3b3VsZCB0eXBpY2FsbHkgYmUgaW52b2x2ZWQgd2hlbiBhIGZpbGVzeXN0ZW0gbmVlZHMgdG8gZGVhbCB3aXRoIGEgYmFja2luZyBmaWxlIHRvIHN1cHBvcnQgb3BlcmF0aW9ucywgc28gSSBrbm93IHRob3NlIHdvdWxkIGdpdmUgbWUgdXNlZnVsIHJlc3VsdHMuIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgd2lsbCBxdWlja2x5IGxlYWQgbWUgdG8gdGhlIGtleSBsb2NhdGlvbnMgaW4gdGhlIGNvZGUgdGhhdCBJIG5lZWQgdG8gZXhhbWluZSBtb3JlIGNsb3NlbHkgdG8gc2VlIHByZWNpc2VseSBob3cgYmFja2luZyBmaWxlcyBhcmUgdXNlZC4gT25jZSBJIGZpbmQgdGhvc2UgaW5zdGFuY2VzIEkgY2FuIGdldCB0byB0aGUgYm90dG9tIG9mIHRoZSBpc3N1ZSBtdWNoIHF1aWNrZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDIyOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JhY2tpbmdfZmlsZV9vcGVuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2JhY2tpbmctZmlsZS5jLTE5LS8qKlxuZnMvYmFja2luZy1maWxlLmM6MjA6ICogYmFja2luZ19maWxlX29wZW4gLSBvcGVuIGEgYmFja2luZyBmaWxlIGZvciBrZXJuZWwgaW50ZXJuYWwgdXNlXG5mcy9iYWNraW5nLWZpbGUuYy0yMS0gKiBAdXNlcl9maWxlOiAgZmlsZSB0aGUgdXNlciByZXF1ZXN0ZWQgdG8gb3BlblxuLS1cbmZzL2JhY2tpbmctZmlsZS5jLTMzLSAqL1xuZnMvYmFja2luZy1maWxlLmM6MzQ6c3RydWN0IGZpbGUgKmJhY2tpbmdfZmlsZV9vcGVuKGNvbnN0IHN0cnVjdCBmaWxlICp1c2VyX2ZpbGUsIGludCBmbGFncyxcbmZzL2JhY2tpbmctZmlsZS5jLTM1LVx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgcGF0aCAqcmVhbF9wYXRoLFxuLS1cbmZzL2JhY2tpbmctZmlsZS5jLTU1LX1cbmZzL2JhY2tpbmctZmlsZS5jOjU2OkVYUE9SVF9TWU1CT0xfR1BMKGJhY2tpbmdfZmlsZV9vcGVuKTtcbmZzL2JhY2tpbmctZmlsZS5jLTU3LVxuLS1cbmZzL2Vyb2ZzL2lzaGFyZS5jPTk2PXN0YXRpYyBpbnQgZXJvZnNfaXNoYXJlX2ZpbGVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbi0tXG5mcy9lcm9mcy9pc2hhcmUuYy0xMDYtXG5mcy9lcm9mcy9pc2hhcmUuYzoxMDc6XHRyZiA9IGJhY2tpbmdfZmlsZV9vcGVuKGZpbGUsIGZpbGUtXHUwMDNlZl9mbGFncyB8IE9fTk9BVElNRSxcbmZzL2Vyb2ZzL2lzaGFyZS5jLTEwOC1cdFx0XHQgICAgICAgXHUwMDI2c2hhcmVkcGF0aCwgY3VycmVudF9jcmVkKCkpO1xuLS1cbmZzL2Z1c2UvcGFzc3Rocm91Z2guYz0xNTI9c3RydWN0IGZ1c2VfYmFja2luZyAqZnVzZV9wYXNzdGhyb3VnaF9vcGVuKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgYmFja2luZ19pZClcbi0tXG5mcy9mdXNlL3Bhc3N0aHJvdWdoLmMtMTY5LVx0LyogQWxsb2NhdGUgYmFja2luZyBmaWxlIHBlciBmdXNlIGZpbGUgdG8gc3RvcmUgZnVzZSBwYXRoICovXG5mcy9mdXNlL3Bhc3N0aHJvdWdoLmM6MTcwOlx0YmFja2luZ19maWxlID0gYmFja2luZ19maWxlX29wZW4oZmlsZSwgZmlsZS1cdTAwM2VmX2ZsYWdzLFxuZnMvZnVzZS9wYXNzdGhyb3VnaC5jLTE3MS1cdFx0XHRcdFx0IFx1MDAyNmZiLVx1MDAzZWZpbGUtXHUwMDNlZl9wYXRoLCBmYi1cdTAwM2VjcmVkKTtcbi0tXG5mcy9vdmVybGF5ZnMvZmlsZS5jPTI4PXN0YXRpYyBzdHJ1Y3QgZmlsZSAqb3ZsX29wZW5fcmVhbGZpbGUoY29uc3Qgc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxuZnMvb3ZlcmxheWZzL2ZpbGUuYy01MC1cbmZzL292ZXJsYXlmcy9maWxlLmM6NTE6XHRcdFx0cmVhbGZpbGUgPSBiYWNraW5nX2ZpbGVfb3BlbihmaWxlLFxuZnMvb3ZlcmxheWZzL2ZpbGUuYy01Mi1cdFx0XHRcdFx0XHQgICAgIGZsYWdzLCByZWFscGF0aCwgY3VycmVudF9jcmVkKCkpO1xuLS1cbmluY2x1ZGUvbGludXgvYmFja2luZy1maWxlLmg9MTU9c3RydWN0IGJhY2tpbmdfZmlsZV9jdHgge1xuLS1cbmluY2x1ZGUvbGludXgvYmFja2luZy1maWxlLmgtMjAtXG5pbmNsdWRlL2xpbnV4L2JhY2tpbmctZmlsZS5oOjIxOnN0cnVjdCBmaWxlICpiYWNraW5nX2ZpbGVfb3Blbihjb25zdCBzdHJ1Y3QgZmlsZSAqdXNlcl9maWxlLCBpbnQgZmxhZ3MsXG5pbmNsdWRlL2xpbnV4L2JhY2tpbmctZmlsZS5oLTIyLVx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgcGF0aCAqcmVhbF9wYXRoLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAyMjoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTA2MAoJCQkJCQkJb3V0cHV0OiAyMzAKCQkJCQkJCXRob3VnaHRzOiA0ODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFNFTGludXggQmFja2luZyBGaWxlIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJiMzOTttIG5vdGluZyB0aGUgY2FsbGVycyBvZiBgYmFja2luZ19maWxlX29wZW5gOiBgb3ZlcmxheWZzYCwgYGVyb2ZzYCwgYW5kIGBmdXNlYC4gVGhhdCYjMzk7cyBpbXBvcnRhbnQgY29udGV4dC4gVGhpcyBwYXRjaCBhcHBlYXJzIHJlbGF0ZWQgdG8gaGFuZGxpbmcgc2VjdXJpdHkgaW1wbGljYXRpb25zIHdoZW4gdGhlc2UgZmlsZXN5c3RlbXMgdXNlIGJhY2tpbmcgZmlsZXMsIHBhcnRpY3VsYXJseSBpbiBhIG11bHRpLWxheWVyZWQgY29udGV4dC4gQW5kIGFzIGV4cGVjdGVkLCBlbmFibGluZyBTRUxpbnV4IHJlcXVpcmVzIGEgc3BlY2lmaWMgc2V0IG9mIGNvbmZpZ3M6IGBTRUNVUklUWV9TRUxJTlVYYCwgYFNFQ1VSSVRZYCwgYEFVRElUYCwgYE5FVGAsIGBJTkVUYCwgYW5kIGBTRUNVUklUWV9ORVRXT1JLYC4gVGhlIHByZXNlbmNlIG9mIGBDT05GSUdfT1ZFUkxBWV9GU2AgaXMgY3JpdGljYWwgdG8gcmVhbGx5ICpzZWUqIHRoZSBiZWhhdmlvciBiZWluZyBhZGRyZXNzZWQuCgpOb3csIGxldCYjMzk7cyBxdWlja2x5IHJldmlldyB0aG9zZSBTRUxpbnV4IHN5bWJvbHMgdGhhdCBhcmUgdGhlIGZvY3VzIGhlcmU6IGBzZWxpbnV4X2JhY2tpbmdfZmlsZV9hbGxvY2AsIGBzZWxpbnV4X2JhY2tpbmdfZmlsZV9mcmVlYCwgYHNlbGludXhfZmlsZV9tcHJvdGVjdGAsIGBzZWN1cml0eV9iYWNraW5nX2ZpbGVfYWxsb2NgLCBgc2VjdXJpdHlfYmFja2luZ19maWxlX2ZyZWVgLCBhbmQgYHNlY3VyaXR5X2ZpbGVfbXByb3RlY3RgLiBHb29kLCB0aGVzZSBhcmUgdGhlIGhvb2tzIGFuZCB3cmFwcGVycy4gVGhhdCBjb25maXJtcyB0aGF0IHdlIGFyZSBkZWFsaW5nIHdpdGggZW50cnlwb2ludHMgdGhhdCBoYXZlIGJlZW4gYWx0ZXJlZCBpbiB0aGUgY29kZS4gSSBkb24mIzM5O3Qgc2VlIGFueXRoaW5nIGdlbmVyaWMgaGVyZSwgdGhlc2UgYXJlIHNlY3VyaXR5LXNwZWNpZmljIGhvb2tzIG9yIHdyYXBwZXJzIHRoYXQgbWFrZSBzZW5zZSB3aXRoaW4gdGhlIFNFTGludXggc3Vic3lzdGVtLgoKU28sIHRoZSBjb25maWcgZGVwZW5kZW5jaWVzIGFyZSB0aGUgZXhwZWN0ZWQ6IGBTRUNVUklUWV9TRUxJTlVYYCwgYFNFQ1VSSVRZYCwgYFNFQ1VSSVRZX05FVFdPUktgLCBgQVVESVRgLCBgTkVUYCwgYElORVRgLCBhbmQgYE9WRVJMQVlfRlNgLiBObyBzdXJwcmlzZXMgdGhlcmUuCgpNeSByZWFzb25pbmcgaXMgc3RyYWlnaHRmb3J3YXJkOiB0aGlzIHBhdGNoIGlzIGFib3V0IGVuaGFuY2luZyBTRUxpbnV4IHRvIGNvcnJlY3RseSBoYW5kbGUgYW5kIHZhbGlkYXRlIHBlcm1pc3Npb25zIHdoZW4gZGVhbGluZyB3aXRoIG11bHRpLWxheWVyZWQgYmFja2luZyBmaWxlcy4gSXQmIzM5O3MgcmVhbGx5IHRhY2tsaW5nIHRoZSBpc3N1ZSBvZiBob3cgc3RhY2tlZCBmaWxlc3lzdGVtcyAobGlrZSBgb3ZlcmxheWZzYCBhbmQgYGVyb2ZzYCB3aGVuIHRoZXkgc2hhcmUgaW5vZGVzKSBpbnRlcmFjdCB3aXRoIFNFTGludXggcGVybWlzc2lvbnMgZHVyaW5nIGBtcHJvdGVjdGAgYW5kIGJhY2tpbmcgZmlsZSBhbGxvY2F0aW9uL2RlYWxsb2NhdGlvbi4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyBsaWtlIHRoZSBpbXBsZW1lbnRhdGlvbiBpbmNsdWRlcyBkeW5hbWljIGxheWVyIGFsbG9jYXRpb24sIHBhdGggcmVmZXJlbmNlIGNvdW50aW5nIGluIGBzZWxpbnV4X2JhY2tpbmdfZmlsZV9hbGxvY2AsIGNsZWFuaW5nIHVwIHByb3Blcmx5IGluIGBzZWxpbnV4X2JhY2tpbmdfZmlsZV9mcmVlYCwgYW5kIHZhbGlkYXRpbmcgcGVybWlzc2lvbnMgZm9yIGludGVybWVkaWF0ZSBtb3VudGVycyBpbiBgc2VsaW51eF9maWxlX21wcm90ZWN0YC4gVGhlc2UgY2hhbmdlcyBkaXJlY3RseSBpbmZsdWVuY2Ugc2VjdXJpdHkgcGVybWlzc2lvbiBjaGVja3MgYW5kIGJhY2tpbmcgZmlsZSBtZW1vcnkgbWFuYWdlbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMjI6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NFQ1VSSVRZJiMzNDssCiAgICAmIzM0O1NFQ1VSSVRZX1NFTElOVVgmIzM0OywKICAgICYjMzQ7U0VDVVJJVFlfTkVUV09SSyYjMzQ7LAogICAgJiMzNDtBVURJVCYjMzQ7LAogICAgJiMzNDtORVQmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtPVkVSTEFZX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2VsaW51eF9iYWNraW5nX2ZpbGVfYWxsb2MmIzM0OywKICAgICYjMzQ7c2VsaW51eF9iYWNraW5nX2ZpbGVfZnJlZSYjMzQ7LAogICAgJiMzNDtzZWxpbnV4X2ZpbGVfbXByb3RlY3QmIzM0OywKICAgICYjMzQ7c2VjdXJpdHlfYmFja2luZ19maWxlX2FsbG9jJiMzNDssCiAgICAmIzM0O3NlY3VyaXR5X2JhY2tpbmdfZmlsZV9mcmVlJiMzNDssCiAgICAmIzM0O3NlY3VyaXR5X2ZpbGVfbXByb3RlY3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0cmFja2luZyBhbmQgZW5mb3JjaW5nIFNFTGludXggcGVybWlzc2lvbnMgYWNyb3NzIG11bHRpLWxheWVyIGJhY2tpbmcgZmlsZXMgKHN1Y2ggYXMgdGhvc2UgdXNlZCBieSBvdmVybGF5ZnMgYW5kIGVyb2ZzKS4gSXQgaW1wbGVtZW50cyBkeW5hbWljIGFsbG9jYXRpb24gYW5kIHJlZmVyZW5jZSB0cmFja2luZyBvZiBpbnRlcm1lZGlhdGUgYmFja2luZyBmaWxlIGxheWVycyBpbiBzZWxpbnV4X2JhY2tpbmdfZmlsZV9hbGxvYywgY2xlYW51cCBpbiBzZWxpbnV4X2JhY2tpbmdfZmlsZV9mcmVlLCBhbmQgbXVsdGktbGF5ZXIgcGVybWlzc2lvbiBjaGVja3MgZHVyaW5nIG1wcm90ZWN0IGluIHNlbGludXhfZmlsZV9tcHJvdGVjdC4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgY29yZSBzZWN1cml0eSBhbmQgZmlsZXN5c3RlbSBpbnRlcmFjdGlvbnMgYW5kIGFyZSB3ZWxsIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NFQ1VSSVRZJiMzNDssCiAgICAmIzM0O1NFQ1VSSVRZX1NFTElOVVgmIzM0OywKICAgICYjMzQ7U0VDVVJJVFlfTkVUV09SSyYjMzQ7LAogICAgJiMzNDtBVURJVCYjMzQ7LAogICAgJiMzNDtORVQmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtPVkVSTEFZX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2VsaW51eF9iYWNraW5nX2ZpbGVfYWxsb2MmIzM0OywKICAgICYjMzQ7c2VsaW51eF9iYWNraW5nX2ZpbGVfZnJlZSYjMzQ7LAogICAgJiMzNDtzZWxpbnV4X2ZpbGVfbXByb3RlY3QmIzM0OywKICAgICYjMzQ7c2VjdXJpdHlfYmFja2luZ19maWxlX2FsbG9jJiMzNDssCiAgICAmIzM0O3NlY3VyaXR5X2JhY2tpbmdfZmlsZV9mcmVlJiMzNDssCiAgICAmIzM0O3NlY3VyaXR5X2ZpbGVfbXByb3RlY3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0cmFja2luZyBhbmQgZW5mb3JjaW5nIFNFTGludXggcGVybWlzc2lvbnMgYWNyb3NzIG11bHRpLWxheWVyIGJhY2tpbmcgZmlsZXMgKHN1Y2ggYXMgdGhvc2UgdXNlZCBieSBvdmVybGF5ZnMgYW5kIGVyb2ZzKS4gSXQgaW1wbGVtZW50cyBkeW5hbWljIGFsbG9jYXRpb24gYW5kIHJlZmVyZW5jZSB0cmFja2luZyBvZiBpbnRlcm1lZGlhdGUgYmFja2luZyBmaWxlIGxheWVycyBpbiBzZWxpbnV4X2JhY2tpbmdfZmlsZV9hbGxvYywgY2xlYW51cCBpbiBzZWxpbnV4X2JhY2tpbmdfZmlsZV9mcmVlLCBhbmQgbXVsdGktbGF5ZXIgcGVybWlzc2lvbiBjaGVja3MgZHVyaW5nIG1wcm90ZWN0IGluIHNlbGludXhfZmlsZV9tcHJvdGVjdC4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgY29yZSBzZWN1cml0eSBhbmQgZmlsZXN5c3RlbSBpbnRlcmFjdGlvbnMgYW5kIGFyZSB3ZWxsIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDIyOjI0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMjI6MjQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBleHRlbmRzIFNFTGludXggYmFja2luZyBmaWxlIHRyYWNraW5nIHRvIGhhbmRsZSBtdWx0aXBsZSBsYXllcnMgaW4gc3RhY2tlZCBmaWxlc3lzdGVtcyAoc3VjaCBhcyBvdmVybGF5ZnMgYW5kIGVyb2ZzKSBieSBpbnRyb2R1Y2luZyBpbnRlcm1lZGlhdGUgYmFja2luZyBsYXllciBzdHJ1Y3R1cmVzLCByZWNvcmRpbmcgcGF0aHMgYW5kIFNJRHMsIGFuZCB2YWxpZGF0aW5nIG1vdW50ZXIgcGVybWlzc2lvbnMgZHVyaW5nIGZpbGUgbW1hcC9tcHJvdGVjdCBvcGVyYXRpb25zLlxuXG5BbGwgbmV3bHkgYWxsb2NhdGVkIGhlYXAgc3RydWN0dXJlcyAoYGJhY2tpbmdfZmlsZV9zZWN1cml0eV9sYXllcmAgYXJyYXlzKSBhcmUgZXhwbGljaXRseSBhbmQgZnVsbHkgaW5pdGlhbGl6ZWQgdXBvbiBhbGxvY2F0aW9uIGJlZm9yZSB1c2Ugb3IgY29weWluZy4gVGhlIGNvbnRhaW5pbmcgYGJhY2tpbmdfZmlsZV9zZWN1cml0eV9zdHJ1Y3RgIGJsb2IgaXMgYWxsb2NhdGVkIHZpYSBga21lbV9jYWNoZV96YWxsb2NgLiBUaGUgYXVkaXQgZGF0YSBzdGFjayBzdHJ1Y3R1cmUgYHN0cnVjdCBjb21tb25fYXVkaXRfZGF0YSBhZGAgaXMgcHJvcGVybHkgY29uZmlndXJlZCB3aXRoIGB0eXBlID0gTFNNX0FVRElUX0RBVEFfUEFUSGAgYW5kIHRoZSBwYXRoIHVuaW9uIG1lbWJlciBhc3NpZ25lZCBiZWZvcmUgcGFzc2luZyB0byB0aGUgYXVkaXQvQVZDIHN1YnN5c3RlbS4gTm8gZGF0YSBpcyBleHBvc2VkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgdGhlcmUgaXMgbm8gYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBQb3RlbnRpYWwgcmlza3MgaW4gdGhpcyBwYXRjaCAoc3VjaCBhcyBsaWZldGltZSBpc3N1ZXMsIHJlZmNvdW50aW5nLCBwYXRoIG1hbmFnZW1lbnQsIG9yIG91dC1vZi1ib3VuZHMgaW5kZXhpbmcpIGZhbGwgd2l0aGluIHRoZSBzY29wZSBvZiBLQVNBTiByYXRoZXIgdGhhbiBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZmE3YTBiNTUwNjIyYzY0NWQ2MmNmOWEzNjQ5OGE3Y2FiZDcyNmNiNgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDI5IDIyOjIzOjIxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCmluZGV4IDAzNWFhZjExM2QxZGEuLmI2NzUwZWRjYzQ3ODMgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYwomIzQzOyYjNDM7JiM0MzsgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKQEAgLTE2NzQsMjYgJiM0MzsxNjc0LDMyIEBAIHN0YXRpYyBpbnQgY3JlZF9oYXNfY2FwYWJpbGl0eShjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCwKIAlyZXR1cm4gcmM7CiB9CiAKLS8qIENoZWNrIHdoZXRoZXIgYSB0YXNrIGhhcyBhIHBhcnRpY3VsYXIgcGVybWlzc2lvbiB0byBhbiBpbm9kZS4KLSAgIFRoZSAmIzM5O2FkcCYjMzk7IHBhcmFtZXRlciBpcyBvcHRpb25hbCBhbmQgYWxsb3dzIG90aGVyIGF1ZGl0Ci0gICBkYXRhIHRvIGJlIHBhc3NlZCAoZS5nLiB0aGUgZGVudHJ5KS4gKi8KLXN0YXRpYyBpbnQgaW5vZGVfaGFzX3Blcm0oY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQsCi0JCQkgIHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkgIHUzMiBwZXJtcywKLQkJCSAgc3RydWN0IGNvbW1vbl9hdWRpdF9kYXRhICphZHApCiYjNDM7LyoKJiM0MzsgKiBDaGVjayB3aGV0aGVyIGEgU0lEIGhhcyBhIHBhcnRpY3VsYXIgcGVybWlzc2lvbiB0byBhbiBpbm9kZS4gIFRoZSAmIzM5O2FkcCYjMzk7CiYjNDM7ICogcGFyYW1ldGVyIGlzIG9wdGlvbmFsIGFuZCBhbGxvd3Mgb3RoZXIgYXVkaXQgZGF0YSB0byBiZSBwYXNzZWQgKGUuZy4gdGhlCiYjNDM7ICogZGVudHJ5KS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IGlub2RlX3NpZF9oYXNfcGVybSh1MzIgc2lkLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgcGVybXMsCiYjNDM7CQkJICAgICAgc3RydWN0IGNvbW1vbl9hdWRpdF9kYXRhICphZHApCiB7CiAJc3RydWN0IGlub2RlX3NlY3VyaXR5X3N0cnVjdCAqaXNlYzsKLQl1MzIgc2lkOwogCiAJaWYgKHVubGlrZWx5KElTX1BSSVZBVEUoaW5vZGUpKSkKIAkJcmV0dXJuIDA7CiAKLQlzaWQgPSBjcmVkX3NpZChjcmVkKTsKIAlpc2VjID0gc2VsaW51eF9pbm9kZShpbm9kZSk7CiAKIAlyZXR1cm4gYXZjX2hhc19wZXJtKHNpZCwgaXNlYy0mZ3Q7c2lkLCBpc2VjLSZndDtzY2xhc3MsIHBlcm1zLCBhZHApOwogfQogCiYjNDM7c3RhdGljIGludCBpbm9kZV9oYXNfcGVybShjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCwKJiM0MzsJCQkgIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiYjNDM7CQkJICB1MzIgcGVybXMsCiYjNDM7CQkJICBzdHJ1Y3QgY29tbW9uX2F1ZGl0X2RhdGEgKmFkcCkKJiM0Mzt7CiYjNDM7CXJldHVybiBpbm9kZV9zaWRfaGFzX3Blcm0oY3JlZF9zaWQoY3JlZCksIGlub2RlLCBwZXJtcywgYWRwKTsKJiM0Mzt9CiYjNDM7CiAvKiBTYW1lIGFzIGlub2RlX2hhc19wZXJtLCBidXQgcGFzcyBleHBsaWNpdCBhdWRpdCBkYXRhIGNvbnRhaW5pbmcKICAgIHRoZSBkZW50cnkgdG8gaGVscCB0aGUgYXVkaXRpbmcgY29kZSB0byBtb3JlIGVhc2lseSBnZW5lcmF0ZSB0aGUKICAgIHBhdGhuYW1lIGlmIG5lZWRlZC4gKi8KQEAgLTM4NDMsMTcgJiM0MzszODQ5LDc0IEBAIHN0YXRpYyBpbnQgc2VsaW51eF9maWxlX2FsbG9jX3NlY3VyaXR5KHN0cnVjdCBmaWxlICpmaWxlKQogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIGlubGluZSB1MzIgc2VsaW51eF9maWxlX3VzZXJfc2lkKGNvbnN0IHN0cnVjdCBmaWxlICpmaWxlKQomIzQzO3sKJiM0MzsJaWYgKHVubGlrZWx5KGZpbGUtJmd0O2ZfbW9kZSAmYW1wOyBGTU9ERV9CQUNLSU5HKSkKJiM0MzsJCXJldHVybiBzZWxpbnV4X2JhY2tpbmdfZmlsZShmaWxlKS0mZ3Q7dWZfc2lkOwomIzQzOwlyZXR1cm4gc2VsaW51eF9maWxlKGZpbGUpLSZndDtzaWQ7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBzZWxpbnV4X2JhY2tpbmdfZmlsZV9hbGxvYyhzdHJ1Y3QgZmlsZSAqYmFja2luZ19maWxlLAogCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBmaWxlICp1c2VyX2ZpbGUpCiB7CiAJc3RydWN0IGJhY2tpbmdfZmlsZV9zZWN1cml0eV9zdHJ1Y3QgKmJmc2VjOwomIzQzOwljb25zdCBzdHJ1Y3QgYmFja2luZ19maWxlX3NlY3VyaXR5X3N0cnVjdCAqdWJmc2VjOwomIzQzOwlzdHJ1Y3QgYmFja2luZ19maWxlX3NlY3VyaXR5X2xheWVyICpsYXllcjsKJiM0MzsJdTMyIGk7CiAKIAliZnNlYyA9IHNlbGludXhfYmFja2luZ19maWxlKGJhY2tpbmdfZmlsZSk7Ci0JYmZzZWMtJmd0O3VmX3NpZCA9IHNlbGludXhfZmlsZSh1c2VyX2ZpbGUpLSZndDtzaWQ7CiYjNDM7CWJmc2VjLSZndDt1Zl9zaWQgPSBzZWxpbnV4X2ZpbGVfdXNlcl9zaWQodXNlcl9maWxlKTsKJiM0MzsJaWYgKCEodXNlcl9maWxlLSZndDtmX21vZGUgJmFtcDsgRk1PREVfQkFDS0lORykpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJdWJmc2VjID0gc2VsaW51eF9iYWNraW5nX2ZpbGUodXNlcl9maWxlKTsKJiM0MzsJLyogYSB3cmFwcGVkIGNvdW50IHdvdWxkIG1ha2Uga21hbGxvY19hcnJheSgpIHJldHVybiBaRVJPX1NJWkVfUFRSICovCiYjNDM7CWlmICh1bmxpa2VseSh1YmZzZWMtJmd0O2xheWVyX2NvdW50ID09IFUzMl9NQVgpKQomIzQzOwkJcmV0dXJuIC1FT1ZFUkZMT1c7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSBmaW5hbCBWTUEgb25seSByZXRhaW5zIHRoZSBsb3dlc3QgYmFja2luZyBmaWxlLCBzbyByZWNvcmQgdGhlCiYjNDM7CSAqIHdob2xlIGNoYWluIGhlcmUgcmF0aGVyIHRoYW4gaW4gdGhlIG1tYXAgaG9vaywgd2hlcmUgY29uY3VycmVudAomIzQzOwkgKiBtYXBwaW5ncyB3b3VsZCBoYXZlIHRvIGJlIHNlcmlhbGl6ZWQuICBTaXplIGl0IGR5bmFtaWNhbGx5OiBlcm9mcwomIzQzOwkgKiBpbm9kZSBzaGFyaW5nIGFkZHMgYSBiYWNraW5nIGZpbGUgd2l0aG91dCBidW1waW5nIHNfc3RhY2tfZGVwdGguCiYjNDM7CSAqLwomIzQzOwliZnNlYy0mZ3Q7bGF5ZXJzID0ga21hbGxvY19hcnJheSh1YmZzZWMtJmd0O2xheWVyX2NvdW50ICYjNDM7IDEsCiYjNDM7CQkJCSAgICAgIHNpemVvZigqYmZzZWMtJmd0O2xheWVycyksIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIWJmc2VjLSZndDtsYXllcnMpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHViZnNlYy0mZ3Q7bGF5ZXJfY291bnQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlsYXllciA9ICZhbXA7YmZzZWMtJmd0O2xheWVyc1tpXTsKJiM0MzsJCSpsYXllciA9IHViZnNlYy0mZ3Q7bGF5ZXJzW2ldOwomIzQzOwkJcGF0aF9nZXQoJmFtcDtsYXllci0mZ3Q7cGF0aCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogZl9wYXRoLCBub3QgZmlsZV91c2VyX3BhdGgoKTogdGhpcyBsYXllciwgbm90IHRoZSB0b3AtbGV2ZWwgZmlsZSAqLwomIzQzOwlsYXllciA9ICZhbXA7YmZzZWMtJmd0O2xheWVyc1tpXTsKJiM0MzsJbGF5ZXItJmd0O3BhdGggPSB1c2VyX2ZpbGUtJmd0O2ZfcGF0aDsKJiM0MzsJbGF5ZXItJmd0O21vdW50ZXJfc2lkID0gY3JlZF9zaWQodXNlcl9maWxlLSZndDtmX2NyZWQpOwomIzQzOwlsYXllci0mZ3Q7ZmRfc2lkID0gc2VsaW51eF9maWxlKHVzZXJfZmlsZSktJmd0O3NpZDsKJiM0MzsJcGF0aF9nZXQoJmFtcDtsYXllci0mZ3Q7cGF0aCk7CiYjNDM7CWJmc2VjLSZndDtsYXllcl9jb3VudCA9IHViZnNlYy0mZ3Q7bGF5ZXJfY291bnQgJiM0MzsgMTsKIAogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIHZvaWQgc2VsaW51eF9iYWNraW5nX2ZpbGVfZnJlZShzdHJ1Y3QgZmlsZSAqYmFja2luZ19maWxlKQomIzQzO3sKJiM0MzsJc3RydWN0IGJhY2tpbmdfZmlsZV9zZWN1cml0eV9zdHJ1Y3QgKmJmc2VjOwomIzQzOwomIzQzOwkvKiBzZWN1cml0eV9iYWNraW5nX2ZpbGVfZnJlZSgpIG1heSBiZSBjYWxsZWQgdHdpY2UgYWZ0ZXIgYW4gZXJyb3IgKi8KJiM0MzsJaWYgKCFiYWNraW5nX2ZpbGVfc2VjdXJpdHkoYmFja2luZ19maWxlKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJYmZzZWMgPSBzZWxpbnV4X2JhY2tpbmdfZmlsZShiYWNraW5nX2ZpbGUpOwomIzQzOwl3aGlsZSAoYmZzZWMtJmd0O2xheWVyX2NvdW50KQomIzQzOwkJcGF0aF9wdXQoJmFtcDtiZnNlYy0mZ3Q7bGF5ZXJzWy0tYmZzZWMtJmd0O2xheWVyX2NvdW50XS5wYXRoKTsKJiM0MzsJa2ZyZWUoYmZzZWMtJmd0O2xheWVycyk7CiYjNDM7CWJmc2VjLSZndDtsYXllcnMgPSBOVUxMOwomIzQzO30KJiM0MzsKIC8qCiAgKiBDaGVjayB3aGV0aGVyIGEgdGFzayBoYXMgdGhlIGlvY3RsIHBlcm1pc3Npb24gYW5kIGNtZAogICogb3BlcmF0aW9uIHRvIGFuIGlub2RlLgpAQCAtMzk3MSw2ICYjNDM7NDAzNCw1MyBAQCBzdGF0aWMgaW50IHNlbGludXhfZmlsZV9pb2N0bF9jb21wYXQoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsCiAKIHN0YXRpYyBpbnQgZGVmYXVsdF9ub2V4ZWMgX19yb19hZnRlcl9pbml0OwogCiYjNDM7c3RhdGljIHUzMiBmaWxlX21hcF9wcm90X3RvX2F2KHVuc2lnbmVkIGxvbmcgcHJvdCwgYm9vbCBzaGFyZWQpCiYjNDM7ewomIzQzOwl1MzIgYXYgPSBGSUxFX19SRUFEOwomIzQzOwomIzQzOwlpZiAoc2hhcmVkICZhbXA7JmFtcDsgKHByb3QgJmFtcDsgUFJPVF9XUklURSkpCiYjNDM7CQlhdiB8PSBGSUxFX19XUklURTsKJiM0MzsJaWYgKHByb3QgJmFtcDsgUFJPVF9FWEVDKQomIzQzOwkJYXYgfD0gRklMRV9fRVhFQ1VURTsKJiM0MzsKJiM0MzsJcmV0dXJuIGF2OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGJhY2tpbmdfbW91bnRlcnNfaGFzX3Blcm0oY29uc3Qgc3RydWN0IGZpbGUgKmZpbGUsIHUzMiBhdikKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBiYWNraW5nX2ZpbGVfc2VjdXJpdHlfc3RydWN0ICpiZnNlYzsKJiM0MzsJY29uc3Qgc3RydWN0IGJhY2tpbmdfZmlsZV9zZWN1cml0eV9sYXllciAqbGF5ZXI7CiYjNDM7CXN0cnVjdCBjb21tb25fYXVkaXRfZGF0YSBhZDsKJiM0MzsJc3RydWN0IGlub2RlICppbm9kZTsKJiM0MzsJdTMyIGk7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJaWYgKFdBUk5fT05fT05DRSghKGZpbGUtJmd0O2ZfbW9kZSAmYW1wOyBGTU9ERV9CQUNLSU5HKSkpCiYjNDM7CQlyZXR1cm4gLUVJTzsKJiM0MzsKJiM0MzsJYmZzZWMgPSBzZWxpbnV4X2JhY2tpbmdfZmlsZShmaWxlKTsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGJmc2VjLSZndDtsYXllcl9jb3VudDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWxheWVyID0gJmFtcDtiZnNlYy0mZ3Q7bGF5ZXJzW2ldOwomIzQzOwkJaW5vZGUgPSBkX2lub2RlKGxheWVyLSZndDtwYXRoLmRlbnRyeSk7CiYjNDM7CiYjNDM7CQlhZC50eXBlID0gTFNNX0FVRElUX0RBVEFfUEFUSDsKJiM0MzsJCWFkLnUucGF0aCA9IGxheWVyLSZndDtwYXRoOwomIzQzOwomIzQzOwkJaWYgKGxheWVyLSZndDttb3VudGVyX3NpZCAhPSBsYXllci0mZ3Q7ZmRfc2lkKSB7CiYjNDM7CQkJcmMgPSBhdmNfaGFzX3Blcm0obGF5ZXItJmd0O21vdW50ZXJfc2lkLCBsYXllci0mZ3Q7ZmRfc2lkLAomIzQzOwkJCQkJICBTRUNDTEFTU19GRCwgRkRfX1VTRSwgJmFtcDthZCk7CiYjNDM7CQkJaWYgKHJjKQomIzQzOwkJCQlyZXR1cm4gcmM7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlyYyA9IGlub2RlX3NpZF9oYXNfcGVybShsYXllci0mZ3Q7bW91bnRlcl9zaWQsIGlub2RlLCBhdiwgJmFtcDthZCk7CiYjNDM7CQlpZiAocmMpCiYjNDM7CQkJcmV0dXJuIHJjOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgX19maWxlX21hcF9wcm90X2NoZWNrKGNvbnN0IHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIHByb3QsCiAJCQkJIGJvb2wgc2hhcmVkLCBib29sIG1vdW50ZXJfY2hlY2ssCiAJCQkJIGJvb2wgYmZfdXNlcl9maWxlKQpAQCAtNDAwNCwxNCAmIzQzOzQxMTQsMTAgQEAgc3RhdGljIGludCBfX2ZpbGVfbWFwX3Byb3RfY2hlY2soY29uc3Qgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgcHJvdCwKIAlpZiAoZmlsZSkgewogCQljb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCA9IG1vdW50ZXJfY2hlY2sgPwogCQkJCWZpbGUtJmd0O2ZfY3JlZCA6IGN1cnJlbnRfY3JlZCgpOwotCQkvKiAmIzM0O3JlYWQmIzM0OyBhbHdheXMgcG9zc2libGUsICYjMzQ7d3JpdGUmIzM0OyBvbmx5IGlmIHNoYXJlZCAqLwotCQl1MzIgYXYgPSBGSUxFX19SRUFEOwotCQlpZiAoc2hhcmVkICZhbXA7JmFtcDsgcHJvdF93cml0ZSkKLQkJCWF2IHw9IEZJTEVfX1dSSVRFOwotCQlpZiAocHJvdF9leGVjKQotCQkJYXYgfD0gRklMRV9fRVhFQ1VURTsKIAotCQlyZXR1cm4gX19maWxlX2hhc19wZXJtKGNyZWQsIGZpbGUsIGF2LCBiZl91c2VyX2ZpbGUpOwomIzQzOwkJcmV0dXJuIF9fZmlsZV9oYXNfcGVybShjcmVkLCBmaWxlLAomIzQzOwkJCQkgICAgICAgZmlsZV9tYXBfcHJvdF90b19hdihwcm90LCBzaGFyZWQpLAomIzQzOwkJCQkgICAgICAgYmZfdXNlcl9maWxlKTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTQxMDYsNiAmIzQzOzQyMTIsNyBAQCBzdGF0aWMgaW50IHNlbGludXhfZmlsZV9tcHJvdGVjdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAlpbnQgcmM7CiAJY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQgPSBjdXJyZW50X2NyZWQoKTsKIAl1MzIgc2lkID0gY3JlZF9zaWQoY3JlZCk7CiYjNDM7CXUzMiBhdjsKIAljb25zdCBzdHJ1Y3QgZmlsZSAqZmlsZSA9IHZtYS0mZ3Q7dm1fZmlsZTsKIAlib29sIGJhY2tpbmdfZmlsZTsKIAlib29sIHNoYXJlZCA9IHZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgVk1fU0hBUkVEOwpAQCAtNDE0OSw2ICYjNDM7NDI1NiwxMCBAQCBzdGF0aWMgaW50IHNlbGludXhfZmlsZV9tcHJvdGVjdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJCWlmIChyYykKIAkJCQlyZXR1cm4gcmM7CiAJCQlpZiAoYmFja2luZ19maWxlKSB7CiYjNDM7CQkJCXJjID0gYmFja2luZ19tb3VudGVyc19oYXNfcGVybShmaWxlLAomIzQzOwkJCQkJCQkgICAgICAgRklMRV9fRVhFQ01PRCk7CiYjNDM7CQkJCWlmIChyYykKJiM0MzsJCQkJCXJldHVybiByYzsKIAkJCQlyYyA9IGZpbGVfaGFzX3Blcm0oZmlsZS0mZ3Q7Zl9jcmVkLCBmaWxlLAogCQkJCQkJICAgRklMRV9fRVhFQ01PRCk7CiAJCQkJaWYgKHJjKQpAQCAtNDE2MSw2ICYjNDM7NDI3MiwxMCBAQCBzdGF0aWMgaW50IHNlbGludXhfZmlsZV9tcHJvdGVjdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIAlpZiAoYmFja2luZ19maWxlKSB7CiYjNDM7CQlhdiA9IGZpbGVfbWFwX3Byb3RfdG9fYXYocHJvdCwgc2hhcmVkKTsKJiM0MzsJCXJjID0gYmFja2luZ19tb3VudGVyc19oYXNfcGVybShmaWxlLCBhdik7CiYjNDM7CQlpZiAocmMpCiYjNDM7CQkJcmV0dXJuIHJjOwogCQlyYyA9IGZpbGVfbWFwX3Byb3RfY2hlY2soZmlsZSwgcHJvdCwgc2hhcmVkLCB0cnVlKTsKIAkJaWYgKHJjKQogCQkJcmV0dXJuIHJjOwpAQCAtNzYzNSw2ICYjNDM7Nzc1MCw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2VjdXJpdHlfaG9va19saXN0IHNlbGludXhfaG9va3NbXSBfX3JvX2FmdGVyX2luaXQgPSB7CiAJTFNNX0hPT0tfSU5JVChmaWxlX3Blcm1pc3Npb24sIHNlbGludXhfZmlsZV9wZXJtaXNzaW9uKSwKIAlMU01fSE9PS19JTklUKGZpbGVfYWxsb2Nfc2VjdXJpdHksIHNlbGludXhfZmlsZV9hbGxvY19zZWN1cml0eSksCiAJTFNNX0hPT0tfSU5JVChiYWNraW5nX2ZpbGVfYWxsb2MsIHNlbGludXhfYmFja2luZ19maWxlX2FsbG9jKSwKJiM0MzsJTFNNX0hPT0tfSU5JVChiYWNraW5nX2ZpbGVfZnJlZSwgc2VsaW51eF9iYWNraW5nX2ZpbGVfZnJlZSksCiAJTFNNX0hPT0tfSU5JVChmaWxlX2lvY3RsLCBzZWxpbnV4X2ZpbGVfaW9jdGwpLAogCUxTTV9IT09LX0lOSVQoZmlsZV9pb2N0bF9jb21wYXQsIHNlbGludXhfZmlsZV9pb2N0bF9jb21wYXQpLAogCUxTTV9IT09LX0lOSVQobW1hcF9maWxlLCBzZWxpbnV4X21tYXBfZmlsZSksCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvb2Jqc2VjLmggYi9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvb2Jqc2VjLmgKaW5kZXggM2MwYTE2ZWM5NzhiMC4uMmYyMTU2ODI1MWZmZSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL29ianNlYy5oCiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9vYmpzZWMuaApAQCAtODYsOCAmIzQzOzg2LDE2IEBAIHN0cnVjdCBmaWxlX3NlY3VyaXR5X3N0cnVjdCB7CiAJdTMyIHBzZXFubzsgLyogUG9saWN5IHNlcW5vIGF0IHRoZSB0aW1lIG9mIGZpbGUgb3BlbiAqLwogfTsKIAomIzQzO3N0cnVjdCBiYWNraW5nX2ZpbGVfc2VjdXJpdHlfbGF5ZXIgewomIzQzOwlzdHJ1Y3QgcGF0aCBwYXRoOyAvKiB0aGlzIGxheWVyJiMzOTtzIHJlYWwgcGF0aCAqLwomIzQzOwl1MzIgbW91bnRlcl9zaWQ7IC8qIFNJRCBvZiB0aGUgbW91bnRlciB0aGF0IG9wZW5lZCBpdCAqLwomIzQzOwl1MzIgZmRfc2lkOyAvKiBTSUQgb2YgaXRzIG9wZW4gZmlsZSBkZXNjcmlwdGlvbiAqLwomIzQzO307CiYjNDM7CiBzdHJ1Y3QgYmFja2luZ19maWxlX3NlY3VyaXR5X3N0cnVjdCB7Ci0JdTMyIHVmX3NpZDsgLyogYXNzb2NpYXRlZCB1c2VyIGZpbGUgZnNlYy0mZ3Q7c2lkICovCiYjNDM7CXUzMiB1Zl9zaWQ7IC8qIHRvcC1sZXZlbCB1c2VyIGZpbGUgZnNlYy0mZ3Q7c2lkICovCiYjNDM7CXUzMiBsYXllcl9jb3VudDsgLyogbnVtYmVyIG9mIGludGVybWVkaWF0ZSBiYWNraW5nIGZpbGVzICovCiYjNDM7CXN0cnVjdCBiYWNraW5nX2ZpbGVfc2VjdXJpdHlfbGF5ZXIgKmxheWVyczsKIH07CiAKIHN0cnVjdCBzdXBlcmJsb2NrX3NlY3VyaXR5X3N0cnVjdCB7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAyMjoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDI3CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNzQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU0VMaW51eCBCYWNraW5nIEZpbGUgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBmaWd1cmUgb3V0IGlmIHdlIG5lZWQgdG8gZmlyZSB1cCBhIEtNU0FOIHNlc3Npb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjaGFuZ2VzIGZpcnN0LiBUaGlzIHBhdGNoIHRvdWNoZXMgYHNlY3VyaXR5L3NlbGludXgvaG9va3MuY2AgYW5kIGBzZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvb2Jqc2VjLmhgLCBzbyBpdCBzZWVtcyBjb3JlIHRvIGhvdyBTRUxpbnV4IGhhbmRsZXMgb2JqZWN0IHNlY3VyaXR5LiBUaGUga2V5IHNlZW1zIHRvIGJlIGFib3V0IHRyYWNraW5nIGludGVybWVkaWF0ZSBiYWNraW5nIGZpbGVzIGZvciBzdGFja2VkIGZpbGVzeXN0ZW1zIGxpa2Ugb3ZlcmxheWZzIG9yIGVyb2ZzLgoKVGhlIGNvZGUgYWRkcyBhIGBzdHJ1Y3QgYmFja2luZ19maWxlX3NlY3VyaXR5X2xheWVyYCwgd2l0aCBgc3RydWN0IHBhdGggcGF0aDsgdTMyIG1vdW50ZXJfc2lkOyB1MzIgZmRfc2lkO2AsIHdoaWNoIHNvdW5kcyBsaWtlIGl0JiMzOTtzIGRlc2lnbmVkIHRvIGtlZXAgdHJhY2sgb2Ygc2VjdXJpdHkgaW5mb3JtYXRpb24gYXQgZWFjaCBsYXllciBvZiB0aGUgZmlsZXN5c3RlbSBzdGFjay4gVGhlbiwgdGhlIGBzdHJ1Y3QgYmFja2luZ19maWxlX3NlY3VyaXR5X3N0cnVjdGAgaXMgZXh0ZW5kZWQgd2l0aCBhIGBsYXllcl9jb3VudGAgYW5kIGFuIGFycmF5IGBsYXllcnNgIG9mIHRoZXNlIGBiYWNraW5nX2ZpbGVfc2VjdXJpdHlfbGF5ZXJgIHN0cnVjdHMuCgpOb3csIHRoZSBhbGxvY2F0aW9uIGlzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIEkgc2VlIGEgYGttYWxsb2NfYXJyYXlgIGJlaW5nIHVzZWQgdG8gYWxsb2NhdGUgdGhlIGBsYXllcnNgIGFycmF5IHdpdGhpbiBgc2VsaW51eF9iYWNraW5nX2ZpbGVfYWxsb2NgLiBIb2xkIG9uLCBhIHNsaWdodCBmbGFnOiBga21hbGxvY19hcnJheWAgYW5kIG5vdCBga2NhbGxvY2Ag4oCTIHRoYXQmIzM5O3MgYSByZWQgZmxhZy4gTGV0IG1lIHNlZSBob3cgaXQmIzM5O3MgaW5pdGlhbGl6ZWQuIExvb2tpbmcgYXQgdGhlIGNvZGU6CmBgYGMKCWJmc2VjLSZndDtsYXllcnMgPSBrbWFsbG9jX2FycmF5KHViZnNlYy0mZ3Q7bGF5ZXJfY291bnQgJiM0MzsgMSwKCQkJCSAgICAgIHNpemVvZigqYmZzZWMtJmd0O2xheWVycyksIEdGUF9LRVJORUwpOwoJaWYgKCFiZnNlYy0mZ3Q7bGF5ZXJzKQoJCXJldHVybiAtRU5PTUVNOwoKCWZvciAoaSA9IDA7IGkgJmx0OyB1YmZzZWMtJmd0O2xheWVyX2NvdW50OyBpJiM0MzsmIzQzOykgewoJCWxheWVyID0gJmFtcDtiZnNlYy0mZ3Q7bGF5ZXJzW2ldOwoJCSpsYXllciA9IHViZnNlYy0mZ3Q7bGF5ZXJzW2ldOwoJCXBhdGhfZ2V0KCZhbXA7bGF5ZXItJmd0O3BhdGgpOwoJfQoKCS8qIGZfcGF0aCwgbm90IGZpbGVfdXNlcl9wYXRoKCk6IHRoaXMgbGF5ZXIsIG5vdCB0aGUgdG9wLWxldmVsIGZpbGUgKi8KCWxheWVyID0gJmFtcDtiZnNlYy0mZ3Q7bGF5ZXJzW2ldOwoJbGF5ZXItJmd0O3BhdGggPSB1c2VyX2ZpbGUtJmd0O2ZfcGF0aDsKCWxheWVyLSZndDttb3VudGVyX3NpZCA9IGNyZWRfc2lkKHVzZXJfZmlsZS0mZ3Q7Zl9jcmVkKTsKCWxheWVyLSZndDtmZF9zaWQgPSBzZWxpbnV4X2ZpbGUodXNlcl9maWxlKS0mZ3Q7c2lkOwoJcGF0aF9nZXQoJmFtcDtsYXllci0mZ3Q7cGF0aCk7CgliZnNlYy0mZ3Q7bGF5ZXJfY291bnQgPSB1YmZzZWMtJmd0O2xheWVyX2NvdW50ICYjNDM7IDE7CmBgYAoKT2theSwgSSBzZWUgbm93LiBgdWJmc2VjLSZndDtsYXllcl9jb3VudGAgZWxlbWVudHMgYXJlIGNvcGllZCBmcm9tIGB1YmZzZWMtJmd0O2xheWVyc2AgaW50byBgYmZzZWMtJmd0O2xheWVyc2AgKGluZGV4ZXMgMCB0byBgdWJmc2VjLSZndDtsYXllcl9jb3VudCAtIDFgKS4gVGhlbiwgdGhlIGNvZGUgKmV4cGxpY2l0bHkqIGluaXRpYWxpemVzIHRoZSBlbGVtZW50IGF0IGluZGV4IGB1YmZzZWMtJmd0O2xheWVyX2NvdW50YCAod2hpY2ggaXMgZXF1YWwgdG8gYGlgKSB3aXRoIHZhbHVlcyBmb3IgYHBhdGhgLCBgbW91bnRlcl9zaWRgLCBhbmQgYGZkX3NpZGAuIGBsYXllcl9jb3VudGAgaXMgdGhlbiBzZXQgdG8gYHViZnNlYy0mZ3Q7bGF5ZXJfY291bnQgJiM0MzsgMWAuIFNvLCBldmVyeSBlbGVtZW50IGZyb20gaW5kZXggYDBgIHVwIHRvIGBsYXllcl9jb3VudCAtIDFgIGdldHMgcHJvcGVybHkgaW5pdGlhbGl6ZWQsIGdpdmVuIHRoZSBsb29wLiBUaGF0JiMzOTtzIGdvb2QuCgpIb3dldmVyLCB0aGUgY29tbWVudCBgZl9wYXRoLCBub3QgZmlsZV91c2VyX3BhdGgoKTogdGhpcyBsYXllciwgbm90IHRoZSB0b3AtbGV2ZWwgZmlsZWAgbmVlZHMgZnVydGhlciBzY3J1dGlueSByZWdhcmRpbmcgd2hhdCB0aGlzIGltcGxpZXMgcmVnYXJkaW5nIG92ZXJhbGwgZmlsZSBoYW5kbGluZy4KCk9rYXksIGxldCYjMzk7cyBjb25zaWRlciB0aGUgY2FzZSB3aGVuIGAhKHVzZXJfZmlsZS0mZ3Q7Zl9tb2RlICZhbXA7IEZNT0RFX0JBQ0tJTkcpYC4gV2hhdCBoYXBwZW5zIHRoZW4/IFRoZSBjb2RlIHNpbXBseSBzZXRzIGBiZnNlYy0mZ3Q7dWZfc2lkYCB0byBgc2VsaW51eF9maWxlX3VzZXJfc2lkKHVzZXJfZmlsZSlgIGFuZCByZXR1cm5zLiBJbiB0aGlzIGNhc2UsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgYmZzZWNgIGl0c2VsZiBnZXRzIGFsbG9jYXRlZCBpbiB0aGF0IHNjZW5hcmlvLiBTbywgSSBuZWVkIHRvIHRyYWNrIHRoZSBhbGxvY2F0aW9uIG9mIGBiYWNraW5nX2ZpbGVfc2VjdXJpdHlgIG9yIGBzZWxpbnV4X2JhY2tpbmdfZmlsZWAgdG8gc2VlIHRoZSBmdWxsIHBpY3R1cmUuIEkgbmVlZCB0byB0cmFjZSB0aGlzIGFsbG9jYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDIyOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JhY2tpbmdfZmlsZS4qc2VjdXJpdHkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtzZWN1cml0eSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtzZWN1cml0eS9zZWN1cml0eS5jPTE4NT1zdGF0aWMgaW50IGxzbV9iYWNraW5nX2ZpbGVfYWxsb2Moc3RydWN0IGZpbGUgKmJhY2tpbmdfZmlsZSlcbi0tXG5zZWN1cml0eS9zZWN1cml0eS5jLTE4OS1cdGlmICghbHNtX2JhY2tpbmdfZmlsZV9jYWNoZSkge1xuc2VjdXJpdHkvc2VjdXJpdHkuYzoxOTA6XHRcdGJhY2tpbmdfZmlsZV9zZXRfc2VjdXJpdHkoYmFja2luZ19maWxlLCBOVUxMKTtcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTkxLVx0XHRyZXR1cm4gMDtcbi0tXG5zZWN1cml0eS9zZWN1cml0eS5jLTE5NC1cdGJsb2IgPSBrbWVtX2NhY2hlX3phbGxvYyhsc21fYmFja2luZ19maWxlX2NhY2hlLCBHRlBfS0VSTkVMKTtcbnNlY3VyaXR5L3NlY3VyaXR5LmM6MTk1Olx0YmFja2luZ19maWxlX3NldF9zZWN1cml0eShiYWNraW5nX2ZpbGUsIGJsb2IpO1xuc2VjdXJpdHkvc2VjdXJpdHkuYy0xOTYtXHRpZiAoIWJsb2IpXG4tLVxuc2VjdXJpdHkvc2VjdXJpdHkuYz0yNDg1PXZvaWQgc2VjdXJpdHlfYmFja2luZ19maWxlX2ZyZWUoc3RydWN0IGZpbGUgKmJhY2tpbmdfZmlsZSlcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMjQ4Ni17XG5zZWN1cml0eS9zZWN1cml0eS5jOjI0ODc6XHR2b2lkICpibG9iID0gYmFja2luZ19maWxlX3NlY3VyaXR5KGJhY2tpbmdfZmlsZSk7XG5zZWN1cml0eS9zZWN1cml0eS5jLTI0ODgtXG4tLVxuc2VjdXJpdHkvc2VjdXJpdHkuYy0yNDkxLVx0aWYgKGJsb2IpIHtcbnNlY3VyaXR5L3NlY3VyaXR5LmM6MjQ5MjpcdFx0YmFja2luZ19maWxlX3NldF9zZWN1cml0eShiYWNraW5nX2ZpbGUsIE5VTEwpO1xuc2VjdXJpdHkvc2VjdXJpdHkuYy0yNDkzLVx0XHRrbWVtX2NhY2hlX2ZyZWUobHNtX2JhY2tpbmdfZmlsZV9jYWNoZSwgYmxvYik7XG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTE3NTc9c3RhdGljIGludCBfX2ZpbGVfaGFzX3Blcm0oY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQsIGNvbnN0IHN0cnVjdCBmaWxlICpmaWxlLFxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0xNzY3LVx0aWYgKGJmX3VzZXJfZmlsZSkge1xuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjE3Njg6XHRcdHN0cnVjdCBiYWNraW5nX2ZpbGVfc2VjdXJpdHlfc3RydWN0ICpiZnNlYztcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0xNzY5LVx0XHRjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aDtcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9Mzg1OT1zdGF0aWMgaW50IHNlbGludXhfYmFja2luZ19maWxlX2FsbG9jKHN0cnVjdCBmaWxlICpiYWNraW5nX2ZpbGUsXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTM4NjEte1xuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjM4NjI6XHRzdHJ1Y3QgYmFja2luZ19maWxlX3NlY3VyaXR5X3N0cnVjdCAqYmZzZWM7XG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6Mzg2MzpcdGNvbnN0IHN0cnVjdCBiYWNraW5nX2ZpbGVfc2VjdXJpdHlfc3RydWN0ICp1YmZzZWM7XG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6Mzg2NDpcdHN0cnVjdCBiYWNraW5nX2ZpbGVfc2VjdXJpdHlfbGF5ZXIgKmxheWVyO1xuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTM4NjUtXHR1MzIgaTtcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9MzkwNT1zdGF0aWMgdm9pZCBzZWxpbnV4X2JhY2tpbmdfZmlsZV9mcmVlKHN0cnVjdCBmaWxlICpiYWNraW5nX2ZpbGUpXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzkwNi17XG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6MzkwNzpcdHN0cnVjdCBiYWNraW5nX2ZpbGVfc2VjdXJpdHlfc3RydWN0ICpiZnNlYztcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zOTA4LVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTM5MDktXHQvKiBzZWN1cml0eV9iYWNraW5nX2ZpbGVfZnJlZSgpIG1heSBiZSBjYWxsZWQgdHdpY2UgYWZ0ZXIgYW4gZXJyb3IgKi9cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzozOTEwOlx0aWYgKCFiYWNraW5nX2ZpbGVfc2VjdXJpdHkoYmFja2luZ19maWxlKSlcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zOTExLVx0XHRyZXR1cm47XG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTQwNDk9c3RhdGljIGludCBiYWNraW5nX21vdW50ZXJzX2hhc19wZXJtKGNvbnN0IHN0cnVjdCBmaWxlICpmaWxlLCB1MzIgYXYpXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNDA1MC17XG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6NDA1MTpcdGNvbnN0IHN0cnVjdCBiYWNraW5nX2ZpbGVfc2VjdXJpdHlfc3RydWN0ICpiZnNlYztcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo0MDUyOlx0Y29uc3Qgc3RydWN0IGJhY2tpbmdfZmlsZV9zZWN1cml0eV9sYXllciAqbGF5ZXI7XG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNDA1My1cdHN0cnVjdCBjb21tb25fYXVkaXRfZGF0YSBhZDtcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9NzY0Mj1zdHJ1Y3QgbHNtX2Jsb2Jfc2l6ZXMgc2VsaW51eF9ibG9iX3NpemVzIF9fcm9fYWZ0ZXJfaW5pdCA9IHtcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNzY0NS1cdC5sYnNfZmlsZSA9IHNpemVvZihzdHJ1Y3QgZmlsZV9zZWN1cml0eV9zdHJ1Y3QpLFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjc2NDY6XHQubGJzX2JhY2tpbmdfZmlsZSA9IHNpemVvZihzdHJ1Y3QgYmFja2luZ19maWxlX3NlY3VyaXR5X3N0cnVjdCksXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNzY0Ny1cdC5sYnNfaW5vZGUgPSBzaXplb2Yoc3RydWN0IGlub2RlX3NlY3VyaXR5X3N0cnVjdCksXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL29ianNlYy5oPTgyPXN0cnVjdCBmaWxlX3NlY3VyaXR5X3N0cnVjdCB7XG4tLVxuc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL29ianNlYy5oLTg4LVxuc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL29ianNlYy5oOjg5OnN0cnVjdCBiYWNraW5nX2ZpbGVfc2VjdXJpdHlfbGF5ZXIge1xuc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL29ianNlYy5oLTkwLVx0c3RydWN0IHBhdGggcGF0aDsgLyogdGhpcyBsYXllciYjMzk7cyByZWFsIHBhdGggKi9cbi0tXG5zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvb2Jqc2VjLmgtOTQtXG5zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvb2Jqc2VjLmg6OTU6c3RydWN0IGJhY2tpbmdfZmlsZV9zZWN1cml0eV9zdHJ1Y3Qge1xuc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL29ianNlYy5oLTk2LVx0dTMyIHVmX3NpZDsgLyogdG9wLWxldmVsIHVzZXIgZmlsZSBmc2VjLVx1MDAzZXNpZCAqL1xuc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL29ianNlYy5oLTk3LVx0dTMyIGxheWVyX2NvdW50OyAvKiBudW1iZXIgb2YgaW50ZXJtZWRpYXRlIGJhY2tpbmcgZmlsZXMgKi9cbnNlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9vYmpzZWMuaDo5ODpcdHN0cnVjdCBiYWNraW5nX2ZpbGVfc2VjdXJpdHlfbGF5ZXIgKmxheWVycztcbnNlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9vYmpzZWMuaC05OS19O1xuLS1cbnNlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9vYmpzZWMuaD0yMDM9c3RhdGljIGlubGluZSBzdHJ1Y3QgZmlsZV9zZWN1cml0eV9zdHJ1Y3QgKnNlbGludXhfZmlsZShjb25zdCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvb2Jqc2VjLmgtMjA3LVxuc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL29ianNlYy5oOjIwODpzdGF0aWMgaW5saW5lIHN0cnVjdCBiYWNraW5nX2ZpbGVfc2VjdXJpdHlfc3RydWN0ICpcbnNlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9vYmpzZWMuaC0yMDktc2VsaW51eF9iYWNraW5nX2ZpbGUoY29uc3Qgc3RydWN0IGZpbGUgKmJhY2tpbmdfZmlsZSlcbnNlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9vYmpzZWMuaC0yMTAte1xuc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL29ianNlYy5oOjIxMTpcdHZvaWQgKmJsb2IgPSBiYWNraW5nX2ZpbGVfc2VjdXJpdHkoYmFja2luZ19maWxlKTtcbnNlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9vYmpzZWMuaC0yMTItXHRyZXR1cm4gYmxvYiAmIzQzOyBzZWxpbnV4X2Jsb2Jfc2l6ZXMubGJzX2JhY2tpbmdfZmlsZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMjI6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODIwNgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDYxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgU2VjdXJpdHkgQ29udGV4dHMgaW4gYSBLZXJuZWwgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGNvZGUuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGBzZWN1cml0eS9zZWN1cml0eS5jYCBmaWxlLCBzcGVjaWZpY2FsbHkgdGhlIGBsc21fYmFja2luZ19maWxlX2FsbG9jYCBmdW5jdGlvbi4gVGhlIGtleSBoZXJlIGlzIHRoZSBhbGxvY2F0aW9uIG9mIGBibG9iYCB1c2luZyBga21lbV9jYWNoZV96YWxsb2NgLiBCZWNhdXNlIGl0JiMzOTtzIHplcm8tYWxsb2NhdGVkLCB0aGUgYGJmc2VjYCBzdHJ1Y3R1cmUgaXMgaW5pdGlhbGl6ZWQgd2l0aCBhbGwgemVyb3MuIFRoaXMgbWVhbnMgdGhhdCwgdXBvbiBhbGxvY2F0aW9uIGluIHRoaXMgY29udGV4dCwgYGxheWVyX2NvdW50YCB3aWxsIGJlIHplcm8gYW5kIGBsYXllcnNgIHdpbGwgYmUgYE5VTExgLiBUaGlzIGlzIHNpZ25pZmljYW50IGJlY2F1c2UsIGlmIHRoZSBgdXNlcl9maWxlYCBkb2VzIG5vdCBoYXZlIHRoZSBgRk1PREVfQkFDS0lOR2AgZmxhZyBzZXQsIHdlIHdpbGwgbWFpbnRhaW4gdGhhdCB6ZXJvIHN0YXRlLgoKTm93LCBsZXQmIzM5O3MgbW92ZSB0byB0aGUgc3RhY2sgdmFyaWFibGVzIGluIHRoZSBwYXRjaC4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhlIGBiYWNraW5nX21vdW50ZXJzX2hhc19wZXJtYCBmdW5jdGlvbi4gTG9va2luZyBhdCBpdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBgc3RydWN0IGNvbW1vbl9hdWRpdF9kYXRhIGFkYCBpcyBiZWluZyB1c2VkIHdpdGhpbiB0aGUgbG9vcC4gVGhlIGNvZGUgaXRlcmF0ZXMgdGhyb3VnaCBiYWNraW5nIGZpbGUgbGF5ZXJzIGFuZCBjaGVja3MgcGVybWlzc2lvbnMuIEl0IHV0aWxpemVzIGJvdGggYGF2Y19oYXNfcGVybWAgYW5kIGBpbm9kZV9zaWRfaGFzX3Blcm1gLCB3aGljaCBhcHBlYXIgdG8gdGFrZSBgYWRgIGFzIGEgcGFyYW1ldGVyLiBJdCBzZWVtcyB0aGUgY29kZSBpcyB1c2luZyB0aGUgcGF0aCBkYXRhIGluIGBhZGAsIGFuZCBpZiB0aG9zZSBwYXRocyBkb24mIzM5O3QgbWFrZSBzZW5zZSwgdGhlbiB0aGVyZSBjb3VsZCBiZSBwcm9ibGVtcy4KCk15IGNvbmNlcm4gaXMgaG93IGBhZGAgaXMgaW5pdGlhbGl6ZWQgYW5kIHVzZWQgd2l0aGluIHRob3NlIGBhdmNfaGFzX3Blcm1gIGFuZCBgaW5vZGVfc2lkX2hhc19wZXJtYCBjYWxscy4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBvZiB0aGUgdHlwaWNhbCBpbml0aWFsaXphdGlvbiBhbmQgdXNhZ2Ugb2YgYGNvbW1vbl9hdWRpdF9kYXRhYCB3aXRoaW4gdGhlIFNFTGludXggaG9va3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgYWRgIGlzIHBvcHVsYXRlZCBhbmQgaWYgdGhlcmUgYXJlIGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IgdGhhdCBjb3VsZCBhcmlzZSBmcm9tIHRoZSB3YXkgdGhlIHBhdGhzIGFyZSBiZWluZyBwYXNzZWQgaW4gaGVyZS4gSSYjMzk7bGwgbmVlZCB0byBnbyB0aHJvdWdoIHRoZSByZWxhdGVkIHNlbGludXggaG9vayBjYWxscyB0byBtYWtlIHN1cmUgdGhlc2UgYXJndW1lbnRzIGNhbiYjMzk7dCBiZSBtaXN1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAyMjoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthZFxcLnR5cGUgPSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3NlY3VyaXR5L3NlbGludXgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7c2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTE2NDM9c3RhdGljIGludCBjcmVkX2hhc19jYXBhYmlsaXR5KGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkLFxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0xNjUyLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjE2NTM6XHRhZC50eXBlID0gTFNNX0FVRElUX0RBVEFfQ0FQO1xuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTE2NTQtXHRhZC51LmNhcCA9IGNhcDtcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9MTcwNj1zdGF0aWMgaW5saW5lIGludCBkZW50cnlfaGFzX3Blcm0oY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQsXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTE3MTMtXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6MTcxNDpcdGFkLnR5cGUgPSBMU01fQVVESVRfREFUQV9ERU5UUlk7XG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMTcxNS1cdGFkLnUuZGVudHJ5ID0gZGVudHJ5O1xuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz0xNzI1PXN0YXRpYyBpbmxpbmUgaW50IHBhdGhfaGFzX3Blcm0oY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQsXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTE3MzItXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6MTczMzpcdGFkLnR5cGUgPSBMU01fQVVESVRfREFUQV9QQVRIO1xuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTE3MzQtXHRhZC51LnBhdGggPSAqcGF0aDtcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9MTc0Mj1zdGF0aWMgaW5saW5lIGludCBmaWxlX3BhdGhfaGFzX3Blcm0oY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQsXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTE3NDctXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6MTc0ODpcdGFkLnR5cGUgPSBMU01fQVVESVRfREFUQV9GSUxFO1xuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTE3NDktXHRhZC51LmZpbGUgPSBmaWxlO1xuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz0xNzU3PXN0YXRpYyBpbnQgX19maWxlX2hhc19wZXJtKGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkLCBjb25zdCBzdHJ1Y3QgZmlsZSAqZmlsZSxcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMTc3OC1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzoxNzc5Olx0XHRhZC50eXBlID0gTFNNX0FVRElUX0RBVEFfUEFUSDtcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0xNzgwLVx0XHRhZC51LnBhdGggPSAqcGF0aDtcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMTc4Ni1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzoxNzg3Olx0XHRhZC50eXBlID0gTFNNX0FVRElUX0RBVEFfRklMRTtcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0xNzg4LVx0XHRhZC51LmZpbGUgPSBmaWxlO1xuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz0xODU0PXN0YXRpYyBpbnQgbWF5X2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMTg2OS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzoxODcwOlx0YWQudHlwZSA9IExTTV9BVURJVF9EQVRBX0RFTlRSWTtcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0xODcxLVx0YWQudS5kZW50cnkgPSBkZW50cnk7XG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTE4OTg9c3RhdGljIGludCBtYXlfbGluayhzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMTkxMS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzoxOTEyOlx0YWQudHlwZSA9IExTTV9BVURJVF9EQVRBX0RFTlRSWTtcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0xOTEzLVx0YWQudS5kZW50cnkgPSBkZW50cnk7XG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTE5NDE9c3RhdGljIGlubGluZSBpbnQgbWF5X3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTE5NTctXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6MTk1ODpcdGFkLnR5cGUgPSBMU01fQVVESVRfREFUQV9ERU5UUlk7XG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMTk1OS1cbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9MjExMT1zdGF0aWMgaW50IHNlbGludXhfYmluZGVyX3RyYW5zZmVyX2ZpbGUoY29uc3Qgc3RydWN0IGNyZWQgKmZyb20sXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTIxMjEtXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6MjEyMjpcdGFkLnR5cGUgPSBMU01fQVVESVRfREFUQV9QQVRIO1xuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTIxMjMtXHRhZC51LnBhdGggPSBmaWxlLVx1MDAzZWZfcGF0aDtcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9MjM0ND1zdGF0aWMgaW50IHNlbGludXhfYnBybV9jcmVkc19mb3JfZXhlYyhzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0yNDExLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjI0MTI6XHRhZC50eXBlID0gTFNNX0FVRElUX0RBVEFfRklMRTtcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0yNDEzLVx0YWQudS5maWxlID0gYnBybS1cdTAwM2VmaWxlO1xuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz0yNzkzPXN0YXRpYyBpbnQgc2VsaW51eF9zYl9rZXJuX21vdW50KGNvbnN0IHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTI3OTctXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6Mjc5ODpcdGFkLnR5cGUgPSBMU01fQVVESVRfREFUQV9ERU5UUlk7XG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMjc5OS1cdGFkLnUuZGVudHJ5ID0gc2ItXHUwMDNlc19yb290O1xuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz0yODAzPXN0YXRpYyBpbnQgc2VsaW51eF9zYl9zdGF0ZnMoc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0yODA3LVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjI4MDg6XHRhZC50eXBlID0gTFNNX0FVRElUX0RBVEFfREVOVFJZO1xuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTI4MDktXHRhZC51LmRlbnRyeSA9IGRlbnRyeS1cdTAwM2VkX3NiLVx1MDAzZXNfcm9vdDtcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9MzAxNz1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTMwNzItXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6MzA3MzpcdGFkLnR5cGUgPSBMU01fQVVESVRfREFUQV9BTk9OSU5PREU7XG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzA3NC1cdGFkLnUuYW5vbmNsYXNzID0gbmFtZSA/IChjb25zdCBjaGFyICopbmFtZS1cdTAwM2VuYW1lIDogXCYjMzQ7P1wmIzM0Oztcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9MzEzMT1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfZm9sbG93X2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMTM3LVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjMxMzg6XHRhZC50eXBlID0gTFNNX0FVRElUX0RBVEFfREVOVFJZO1xuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTMxMzktXHRhZC51LmRlbnRyeSA9IGRlbnRyeTtcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9MzE0Nz1zdGF0aWMgbm9pbmxpbmUgaW50IGF1ZGl0X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzE1My1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzozMTU0Olx0YWQudHlwZSA9IExTTV9BVURJVF9EQVRBX0lOT0RFO1xuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTMxNTUtXHRhZC51Lmlub2RlID0gaW5vZGU7XG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTMzNzY9c3RhdGljIGludCBzZWxpbnV4X2lub2RlX3NldHhhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zNDAwLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjM0MDE6XHRhZC50eXBlID0gTFNNX0FVRElUX0RBVEFfREVOVFJZO1xuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTM0MDItXHRhZC51LmRlbnRyeSA9IGRlbnRyeTtcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9MzU2Mj1zdGF0aWMgaW50IHNlbGludXhfcGF0aF9ub3RpZnkoY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsIHU2NCBtYXNrLFxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zNTY5LVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjM1NzA6XHRhZC50eXBlID0gTFNNX0FVRElUX0RBVEFfUEFUSDtcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zNTcxLVx0YWQudS5wYXRoID0gKnBhdGg7XG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTM5MjQ9c3RhdGljIGludCBpb2N0bF9oYXNfcGVybShjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCwgc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTM5MzYtXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6MzkzNzpcdGFkLnR5cGUgPSBMU01fQVVESVRfREFUQV9JT0NUTF9PUDtcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zOTM4LVx0YWQudS5vcCA9IFx1MDAyNmlvY3RsO1xuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz00MDQ5PXN0YXRpYyBpbnQgYmFja2luZ19tb3VudGVyc19oYXNfcGVybShjb25zdCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdTMyIGF2KVxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy00MDY1LVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjQwNjY6XHRcdGFkLnR5cGUgPSBMU01fQVVESVRfREFUQV9QQVRIO1xuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTQwNjctXHRcdGFkLnUucGF0aCA9IGxheWVyLVx1MDAzZXBhdGg7XG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTQxNDY9c3RhdGljIGludCBzZWxpbnV4X21tYXBfZmlsZV9jb21tb24oc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgcHJvdCxcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNDE1NC1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo0MTU1Olx0XHRhZC50eXBlID0gTFNNX0FVRElUX0RBVEFfRklMRTtcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy00MTU2LVx0XHRhZC51LmZpbGUgPSBmaWxlO1xuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz00NDg5PXN0YXRpYyBpbnQgc2VsaW51eF9rZXJuZWxfbW9kdWxlX3JlcXVlc3QoY2hhciAqa21vZF9uYW1lKVxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy00NDkyLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjQ0OTM6XHRhZC50eXBlID0gTFNNX0FVRElUX0RBVEFfS01PRDtcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy00NDk0LVx0YWQudS5rbW9kX25hbWUgPSBrbW9kX25hbWU7XG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTQ1MDA9c3RhdGljIGludCBzZWxpbnV4X2tlcm5lbF9sb2FkX2Zyb21fZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgdTMyIHJlcXVlc3RlZClcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNDUxMC1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo0NTExOlx0YWQudHlwZSA9IExTTV9BVURJVF9EQVRBX0ZJTEU7XG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNDUxMi1cdGFkLnUuZmlsZSA9IGZpbGU7XG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTUxMjA9c3RhdGljIGludCBfX3NlbGludXhfc29ja2V0X2JpbmQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHJlc3MsIGludCBhZGRybGVuKVxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy01MTg1LVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjUxODY6XHRcdGFkLnR5cGUgPSBMU01fQVVESVRfREFUQV9ORVQ7XG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNTE4Ny1cdFx0YWQudS5uZXQgPSBcdTAwMjZuZXQ7XG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTUyNTk9c3RhdGljIGludCBzZWxpbnV4X3NvY2tldF9jb25uZWN0X2hlbHBlcihzdHJ1Y3Qgc29jayAqc2ssXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTUzMzAtXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6NTMzMTpcdFx0YWQudHlwZSA9IExTTV9BVURJVF9EQVRBX05FVDtcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy01MzMyLVx0XHRhZC51Lm5ldCA9IFx1MDAyNm5ldDtcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9NjM2MT1zdGF0aWMgaW50IG5sbXNnX3NvY2tfaGFzX2V4dGVuZGVkX3Blcm1zKHN0cnVjdCBzb2NrICpzaywgdTMyIHBlcm1zLCB1MTYgbmxtc2dfdHlwZSlcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNjM3MC1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo2MzcxOlx0YWQudHlwZSA9IExTTV9BVURJVF9EQVRBX05MTVNHVFlQRTtcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy02MzcyLVx0YWQudS5ubG1zZ190eXBlID0gbmxtc2dfdHlwZTtcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9NjQ1NT1zdGF0aWMgaW50IGlwY19oYXNfcGVybShzdHJ1Y3Qga2Vybl9pcGNfcGVybSAqaXBjX3Blcm1zLFxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy02NDYzLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjY0NjQ6XHRhZC50eXBlID0gTFNNX0FVRElUX0RBVEFfSVBDO1xuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTY0NjUtXHRhZC51LmlwY19pZCA9IGlwY19wZXJtcy1cdTAwM2VrZXk7XG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTY0ODE9c3RhdGljIGludCBzZWxpbnV4X21zZ19xdWV1ZV9hbGxvY19zZWN1cml0eShzdHJ1Y3Qga2Vybl9pcGNfcGVybSAqbXNxKVxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy02NDg5LVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjY0OTA6XHRhZC50eXBlID0gTFNNX0FVRElUX0RBVEFfSVBDO1xuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTY0OTEtXHRhZC51LmlwY19pZCA9IG1zcS1cdTAwM2VrZXk7XG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTY0OTc9c3RhdGljIGludCBzZWxpbnV4X21zZ19xdWV1ZV9hc3NvY2lhdGUoc3RydWN0IGtlcm5faXBjX3Blcm0gKm1zcSwgaW50IG1zcWZsZylcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNjUwNC1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo2NTA1Olx0YWQudHlwZSA9IExTTV9BVURJVF9EQVRBX0lQQztcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy02NTA2LVx0YWQudS5pcGNfaWQgPSBtc3EtXHUwMDNla2V5O1xuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz02NTQwPXN0YXRpYyBpbnQgc2VsaW51eF9tc2dfcXVldWVfbXNnc25kKHN0cnVjdCBrZXJuX2lwY19wZXJtICptc3EsIHN0cnVjdCBtc2dfbXNnICptc2csIGludCBtc3FmbGcpXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTY1NjQtXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6NjU2NTpcdGFkLnR5cGUgPSBMU01fQVVESVRfREFUQV9JUEM7XG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNjU2Ni1cdGFkLnUuaXBjX2lkID0gbXNxLVx1MDAzZWtleTtcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9NjU4Mz1zdGF0aWMgaW50IHNlbGludXhfbXNnX3F1ZXVlX21zZ3JjdihzdHJ1Y3Qga2Vybl9pcGNfcGVybSAqbXNxLCBzdHJ1Y3QgbXNnX21zZyAqbXNnLFxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy02NTk1LVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjY1OTY6XHRhZC50eXBlID0gTFNNX0FVRElUX0RBVEFfSVBDO1xuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTY1OTctXHRhZC51LmlwY19pZCA9IG1zcS1cdTAwM2VrZXk7XG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTY2MDg9c3RhdGljIGludCBzZWxpbnV4X3NobV9hbGxvY19zZWN1cml0eShzdHJ1Y3Qga2Vybl9pcGNfcGVybSAqc2hwKVxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy02NjE2LVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjY2MTc6XHRhZC50eXBlID0gTFNNX0FVRElUX0RBVEFfSVBDO1xuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTY2MTgtXHRhZC51LmlwY19pZCA9IHNocC1cdTAwM2VrZXk7XG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTY2MjQ9c3RhdGljIGludCBzZWxpbnV4X3NobV9hc3NvY2lhdGUoc3RydWN0IGtlcm5faXBjX3Blcm0gKnNocCwgaW50IHNobWZsZylcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNjYzMS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo2NjMyOlx0YWQudHlwZSA9IExTTV9BVURJVF9EQVRBX0lQQztcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy02NjMzLVx0YWQudS5pcGNfaWQgPSBzaHAtXHUwMDNla2V5O1xuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz02Njg2PXN0YXRpYyBpbnQgc2VsaW51eF9zZW1fYWxsb2Nfc2VjdXJpdHkoc3RydWN0IGtlcm5faXBjX3Blcm0gKnNtYSlcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNjY5NC1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo2Njk1Olx0YWQudHlwZSA9IExTTV9BVURJVF9EQVRBX0lQQztcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy02Njk2LVx0YWQudS5pcGNfaWQgPSBzbWEtXHUwMDNla2V5O1xuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz02NzAyPXN0YXRpYyBpbnQgc2VsaW51eF9zZW1fYXNzb2NpYXRlKHN0cnVjdCBrZXJuX2lwY19wZXJtICpzbWEsIGludCBzZW1mbGcpXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTY3MDktXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6NjcxMDpcdGFkLnR5cGUgPSBMU01fQVVESVRfREFUQV9JUEM7XG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNjcxMS1cdGFkLnUuaXBjX2lkID0gc21hLVx1MDAzZWtleTtcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9NzI0MD1zdGF0aWMgaW50IHNlbGludXhfaWJfcGtleV9hY2Nlc3Modm9pZCAqaWJfc2VjLCB1NjQgc3VibmV0X3ByZWZpeCwgdTE2IHBrZXlfdmFsKVxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy03MjUxLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjcyNTI6XHRhZC50eXBlID0gTFNNX0FVRElUX0RBVEFfSUJQS0VZO1xuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTcyNTMtXHRpYnBrZXkuc3VibmV0X3ByZWZpeCA9IHN1Ym5ldF9wcmVmaXg7XG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTcyNjE9c3RhdGljIGludCBzZWxpbnV4X2liX2VuZHBvcnRfbWFuYWdlX3N1Ym5ldCh2b2lkICppYl9zZWMsIGNvbnN0IGNoYXIgKmRldl9uYW1lLFxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy03Mjc1LVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjcyNzY6XHRhZC50eXBlID0gTFNNX0FVRElUX0RBVEFfSUJFTkRQT1JUO1xuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTcyNzctXHRpYmVuZHBvcnQuZGV2X25hbWUgPSBkZXZfbmFtZTtcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9NzYwOT1zdGF0aWMgaW50IHNlbGludXhfdXJpbmdfY21kKHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZClcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNzYxNS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo3NjE2Olx0YWQudHlwZSA9IExTTV9BVURJVF9EQVRBX0ZJTEU7XG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNzYxNy1cdGFkLnUuZmlsZSA9IGZpbGU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDIyOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNjI2CgkJCQkJCQlvdXRwdXQ6IDIzNQoJCQkJCQkJdGhvdWdodHM6IDEyNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogTm8gTmVlZCBIZXJlKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gY2FyZWZ1bGx5IHJldmlld2luZyB0aGlzIGRpZmYsIGZvY3VzaW5nIG9uIHBvdGVudGlhbCBLTVNBTiBuZWVkcy4gVGhlIGNydWNpYWwgcGllY2VzLCBgYWQudHlwZWAgYW5kIGBhZC51LnBhdGhgLCBhcmUgc2V0IGNvbnNpc3RlbnRseSwgbWF0Y2hpbmcgYWxsIHRoZSBvdGhlciBhdWRpdCBkYXRhIHVzYWdlcyB0aHJvdWdob3V0IHRoZSByZWxldmFudCBgc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jYCBmaWxlLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4KCk5vdywgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhlIGZ1bmN0aW9ucyBpbnZvbHZlZCBhbmQgYXNzZXNzIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3Iga2VybmVsLXRvLXVzZXIgc3BhY2UgZGF0YSBsZWFrcy4gYGlub2RlX3NpZF9oYXNfcGVybWAgbG9va3MgY2xlYW47IGl0IHRha2VzIHRoZSBuZWVkZWQgYXVkaXQgZGF0YSBidXQgc2VlbXMgdG8ganVzdCB3cmFwIGEgY2FsbCB0byBgYXZjX2hhc19wZXJtYCwgYSByZWZhY3RvciBzcGxpdHRpbmcgYGlub2RlX2hhc19wZXJtYC4gTm8gaXNzdWVzIHRoZXJlLiBgc2VsaW51eF9maWxlX3VzZXJfc2lkYCBhcHBlYXJzIHRvIGhhbmRsZSBmaWxlIG1ldGFkYXRhIGNvcnJlY3RseS4KClRoZSBtb3JlIGNvbXBsZXggYXJlYSBpcyBhcm91bmQgdGhlIGJhY2tpbmcgZmlsZSBzdHJ1Y3R1cmVzLCBlc3BlY2lhbGx5IGBzZWxpbnV4X2JhY2tpbmdfZmlsZV9hbGxvY2AsIGBzZWxpbnV4X2JhY2tpbmdfZmlsZV9mcmVlYCwgYW5kIGBzZWxpbnV4X2ZpbGVfbXByb3RlY3RgLiBBZnRlciBkaWdnaW5nIGluLCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IHRoZSBjcml0aWNhbCBkYXRhIGluIGBiZnNlYy0mZ3Q7bGF5ZXJzYCBhcmUgKmZ1bGx5KiBpbml0aWFsaXplZC4gYHNlbGludXhfYmFja2luZ19maWxlX2FsbG9jYCBhbGxvY2F0ZXMgdGhlIGxheWVycywgY29waWVzIGV4aXN0aW5nIG9uZXMsIGFuZCBwb3B1bGF0ZXMgdGhlIGRhdGEsIGluY2x1ZGluZyBhIHJlZmNvdW50IGJ1bXAgZm9yIHBhdGhzLCBtYWtpbmcgc3VyZSBub3RoaW5nIGlzIGxlZnQgZGFuZ2xpbmcuIGBzZWxpbnV4X2JhY2tpbmdfZmlsZV9mcmVlYCBjb3JyZWN0bHkgZnJlZXMgYW5kIHB1dHMgdGhlIHBhdGggZm9yIGVhY2ggbGF5ZXIuIFRoZSBwZXJtaXNzaW9uIGNoZWNrcyBpbiBgYmFja2luZ19tb3VudGVyc19oYXNfcGVybWAgYWxzbyBsb29rIG9rYXkuIEFuZCBmaW5hbGx5LCBgc2VsaW51eF9maWxlX21wcm90ZWN0YCBzaW1wbHkgYWRkcyBhIGNhbGwgdG8gYmFja2luZyBtb3VudGVycy4gTm8gb2J2aW91cyBpc3N1ZXMgdGhlcmUuIFRoZSBoZWxwZXIgZnVuY3Rpb24gYGZpbGVfbWFwX3Byb3RfdG9fYXZgIGp1c3QgbWFwcyBwcm90ZWN0aW9uIGJpdHMuCgpJJiMzOTt2ZSBzcGVjaWZpY2FsbHkgbG9va2VkIGZvciBkYXRhIGNvcGllcyB0byB1c2Vyc3BhY2Ug4oCTIG5vbmUuIEkmIzM5O3ZlIGFsc28gY2hlY2tlZCBjYXJlZnVsbHkgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLiBBbGwgYGJmc2VjLSZndDtsYXllcnNgIGVudHJpZXMgYXJlIGZ1bGx5IGluaXRpYWxpemVkLCBhbmQgYGJmc2VjYCBpdHNlbGYgaXMgemVyb2VkIGR1cmluZyBhbGxvY2F0aW9uLiBUaGUgY29tbW9uIGF1ZGl0IGRhdGEgKGBjb21tb25fYXVkaXRfZGF0YSBhZGApIGlzIGFsc28gcG9wdWxhdGVkIGNvcnJlY3RseSwgZm9sbG93aW5nIHRoZSBzdGFuZGFyZCBTRUxpbnV4IHBhdHRlcm4uCgpDcml0aWNhbGx5LCB0aGVyZSBhcmUgbm8ga2VybmVsLXRvLXVzZXIgY29waWVzIHRoYXQgSSBjYW4gc2VlIChgY29weV90b191c2VyYCwgYHB1dF91c2VyYCwgc29ja2V0IG9wdGlvbnMsIGV0Yy4pLiBUaGVyZSYjMzk7cyBubyBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbmQgYWxsIHN0cnVjdHVyZXMgYXJlIGVpdGhlciB6ZXJvZWQgb3IgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgoKRnJhbmtseSwgSSB0aGluayBhbnkgYnVncyBoZXJlIHdvdWxkIG1hbmlmZXN0IGFzIG1lbW9yeSBjb3JydXB0aW9uLCB1c2UtYWZ0ZXItZnJlZSwgb3IgcmVmY291bnRpbmcgaXNzdWVzLiBUaG9zZSBhcmUgYWxyZWFkeSB3ZWxsLWNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBjaGVja3MuIEJhc2VkIG9uIHRoZSBjcml0ZXJpYSwgdGhpcyBwYXRjaCByZWFsbHkgYm9pbHMgZG93biB0byB0aGUgdHlwZXMgb2YgYnVncyB0aGF0IEtBU0FOIGlzIGJ1aWx0IHRvIGZpbmQuCgpTbywgbGV0JiMzOTtzIGdvIGJhY2sgb3ZlciB0aGUgY3JpdGVyaWEgKmFnYWluKi4KCjEuICBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2Ugd2hlcmUgZmllbGRzIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuIE5vLgoyLiAgQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzLiBOby4KMy4gIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4gTm8gKGFsbCBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQpLgo0LiAgQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLiBOby4KClRoaXMgZmFsbHMgc3F1YXJlbHkgdW5kZXIgdGhlICYjMzQ7S0FTQU4gY292ZXJzIGl0JiMzNDsgY2F0ZWdvcnkuIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkIG9yIGluaXRpYWxpemVkLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBuZWVkZWQgaGVyZS4gS0FTQU4gaXMgc3VmZmljaWVudC4gSSYjMzk7bSByZWFkeSB0byBtYXJrIGBOZWVkc0tNU0FOPWZhbHNlYCBhbmQgc3VibWl0IHRoZSBmaW5hbCByZXNwb25zZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMjI6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZXh0ZW5kcyBTRUxpbnV4IGJhY2tpbmcgZmlsZSB0cmFja2luZyB0byBoYW5kbGUgbXVsdGlwbGUgbGF5ZXJzIGluIHN0YWNrZWQgZmlsZXN5c3RlbXMgKHN1Y2ggYXMgb3ZlcmxheWZzIGFuZCBlcm9mcykgYnkgaW50cm9kdWNpbmcgaW50ZXJtZWRpYXRlIGJhY2tpbmcgbGF5ZXIgc3RydWN0dXJlcywgcmVjb3JkaW5nIHBhdGhzIGFuZCBTSURzLCBhbmQgdmFsaWRhdGluZyBtb3VudGVyIHBlcm1pc3Npb25zIGR1cmluZyBmaWxlIG1tYXAvbXByb3RlY3Qgb3BlcmF0aW9ucy5cblxuQWxsIG5ld2x5IGFsbG9jYXRlZCBoZWFwIHN0cnVjdHVyZXMgKGBiYWNraW5nX2ZpbGVfc2VjdXJpdHlfbGF5ZXJgIGFycmF5cykgYXJlIGV4cGxpY2l0bHkgYW5kIGZ1bGx5IGluaXRpYWxpemVkIHVwb24gYWxsb2NhdGlvbiBiZWZvcmUgdXNlIG9yIGNvcHlpbmcuIFRoZSBjb250YWluaW5nIGBiYWNraW5nX2ZpbGVfc2VjdXJpdHlfc3RydWN0YCBibG9iIGlzIGFsbG9jYXRlZCB2aWEgYGttZW1fY2FjaGVfemFsbG9jYC4gVGhlIGF1ZGl0IGRhdGEgc3RhY2sgc3RydWN0dXJlIGBzdHJ1Y3QgY29tbW9uX2F1ZGl0X2RhdGEgYWRgIGlzIHByb3Blcmx5IGNvbmZpZ3VyZWQgd2l0aCBgdHlwZSA9IExTTV9BVURJVF9EQVRBX1BBVEhgIGFuZCB0aGUgcGF0aCB1bmlvbiBtZW1iZXIgYXNzaWduZWQgYmVmb3JlIHBhc3NpbmcgdG8gdGhlIGF1ZGl0L0FWQyBzdWJzeXN0ZW0uIE5vIGRhdGEgaXMgZXhwb3NlZCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIHRoZXJlIGlzIG5vIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gUG90ZW50aWFsIHJpc2tzIGluIHRoaXMgcGF0Y2ggKHN1Y2ggYXMgbGlmZXRpbWUgaXNzdWVzLCByZWZjb3VudGluZywgcGF0aCBtYW5hZ2VtZW50LCBvciBvdXQtb2YtYm91bmRzIGluZGV4aW5nKSBmYWxsIHdpdGhpbiB0aGUgc2NvcGUgb2YgS0FTQU4gcmF0aGVyIHRoYW4gS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBleHRlbmRzIFNFTGludXggYmFja2luZyBmaWxlIHRyYWNraW5nIHRvIGhhbmRsZSBtdWx0aXBsZSBsYXllcnMgaW4gc3RhY2tlZCBmaWxlc3lzdGVtcyAoc3VjaCBhcyBvdmVybGF5ZnMgYW5kIGVyb2ZzKSBieSBpbnRyb2R1Y2luZyBpbnRlcm1lZGlhdGUgYmFja2luZyBsYXllciBzdHJ1Y3R1cmVzLCByZWNvcmRpbmcgcGF0aHMgYW5kIFNJRHMsIGFuZCB2YWxpZGF0aW5nIG1vdW50ZXIgcGVybWlzc2lvbnMgZHVyaW5nIGZpbGUgbW1hcC9tcHJvdGVjdCBvcGVyYXRpb25zLlxuXG5BbGwgbmV3bHkgYWxsb2NhdGVkIGhlYXAgc3RydWN0dXJlcyAoYGJhY2tpbmdfZmlsZV9zZWN1cml0eV9sYXllcmAgYXJyYXlzKSBhcmUgZXhwbGljaXRseSBhbmQgZnVsbHkgaW5pdGlhbGl6ZWQgdXBvbiBhbGxvY2F0aW9uIGJlZm9yZSB1c2Ugb3IgY29weWluZy4gVGhlIGNvbnRhaW5pbmcgYGJhY2tpbmdfZmlsZV9zZWN1cml0eV9zdHJ1Y3RgIGJsb2IgaXMgYWxsb2NhdGVkIHZpYSBga21lbV9jYWNoZV96YWxsb2NgLiBUaGUgYXVkaXQgZGF0YSBzdGFjayBzdHJ1Y3R1cmUgYHN0cnVjdCBjb21tb25fYXVkaXRfZGF0YSBhZGAgaXMgcHJvcGVybHkgY29uZmlndXJlZCB3aXRoIGB0eXBlID0gTFNNX0FVRElUX0RBVEFfUEFUSGAgYW5kIHRoZSBwYXRoIHVuaW9uIG1lbWJlciBhc3NpZ25lZCBiZWZvcmUgcGFzc2luZyB0byB0aGUgYXVkaXQvQVZDIHN1YnN5c3RlbS4gTm8gZGF0YSBpcyBleHBvc2VkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgdGhlcmUgaXMgbm8gYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBQb3RlbnRpYWwgcmlza3MgaW4gdGhpcyBwYXRjaCAoc3VjaCBhcyBsaWZldGltZSBpc3N1ZXMsIHJlZmNvdW50aW5nLCBwYXRoIG1hbmFnZW1lbnQsIG9yIG91dC1vZi1ib3VuZHMgaW5kZXhpbmcpIGZhbGwgd2l0aGluIHRoZSBzY29wZSBvZiBLQVNBTiByYXRoZXIgdGhhbiBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjlUMjI6MjM6MjMuMTg1MjQ3OTE4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEzNjg1NTE3NDU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNFQ1VSSVRZXCIsXG4gICAgXCJTRUNVUklUWV9TRUxJTlVYXCIsXG4gICAgXCJTRUNVUklUWV9ORVRXT1JLXCIsXG4gICAgXCJBVURJVFwiLFxuICAgIFwiTkVUXCIsXG4gICAgXCJJTkVUXCIsXG4gICAgXCJPVkVSTEFZX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2VsaW51eF9iYWNraW5nX2ZpbGVfYWxsb2NcIixcbiAgICBcInNlbGludXhfYmFja2luZ19maWxlX2ZyZWVcIixcbiAgICBcInNlbGludXhfZmlsZV9tcHJvdGVjdFwiLFxuICAgIFwic2VjdXJpdHlfYmFja2luZ19maWxlX2FsbG9jXCIsXG4gICAgXCJzZWN1cml0eV9iYWNraW5nX2ZpbGVfZnJlZVwiLFxuICAgIFwic2VjdXJpdHlfZmlsZV9tcHJvdGVjdFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZXh0ZW5kcyBTRUxpbnV4IGJhY2tpbmcgZmlsZSB0cmFja2luZyB0byBoYW5kbGUgbXVsdGlwbGUgbGF5ZXJzIGluIHN0YWNrZWQgZmlsZXN5c3RlbXMgKHN1Y2ggYXMgb3ZlcmxheWZzIGFuZCBlcm9mcykgYnkgaW50cm9kdWNpbmcgaW50ZXJtZWRpYXRlIGJhY2tpbmcgbGF5ZXIgc3RydWN0dXJlcywgcmVjb3JkaW5nIHBhdGhzIGFuZCBTSURzLCBhbmQgdmFsaWRhdGluZyBtb3VudGVyIHBlcm1pc3Npb25zIGR1cmluZyBmaWxlIG1tYXAvbXByb3RlY3Qgb3BlcmF0aW9ucy5cXG5cXG5BbGwgbmV3bHkgYWxsb2NhdGVkIGhlYXAgc3RydWN0dXJlcyAoYGJhY2tpbmdfZmlsZV9zZWN1cml0eV9sYXllcmAgYXJyYXlzKSBhcmUgZXhwbGljaXRseSBhbmQgZnVsbHkgaW5pdGlhbGl6ZWQgdXBvbiBhbGxvY2F0aW9uIGJlZm9yZSB1c2Ugb3IgY29weWluZy4gVGhlIGNvbnRhaW5pbmcgYGJhY2tpbmdfZmlsZV9zZWN1cml0eV9zdHJ1Y3RgIGJsb2IgaXMgYWxsb2NhdGVkIHZpYSBga21lbV9jYWNoZV96YWxsb2NgLiBUaGUgYXVkaXQgZGF0YSBzdGFjayBzdHJ1Y3R1cmUgYHN0cnVjdCBjb21tb25fYXVkaXRfZGF0YSBhZGAgaXMgcHJvcGVybHkgY29uZmlndXJlZCB3aXRoIGB0eXBlID0gTFNNX0FVRElUX0RBVEFfUEFUSGAgYW5kIHRoZSBwYXRoIHVuaW9uIG1lbWJlciBhc3NpZ25lZCBiZWZvcmUgcGFzc2luZyB0byB0aGUgYXVkaXQvQVZDIHN1YnN5c3RlbS4gTm8gZGF0YSBpcyBleHBvc2VkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgdGhlcmUgaXMgbm8gYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBQb3RlbnRpYWwgcmlza3MgaW4gdGhpcyBwYXRjaCAoc3VjaCBhcyBsaWZldGltZSBpc3N1ZXMsIHJlZmNvdW50aW5nLCBwYXRoIG1hbmFnZW1lbnQsIG9yIG91dC1vZi1ib3VuZHMgaW5kZXhpbmcpIGZhbGwgd2l0aGluIHRoZSBzY29wZSBvZiBLQVNBTiByYXRoZXIgdGhhbiBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRyYWNraW5nIGFuZCBlbmZvcmNpbmcgU0VMaW51eCBwZXJtaXNzaW9ucyBhY3Jvc3MgbXVsdGktbGF5ZXIgYmFja2luZyBmaWxlcyAoc3VjaCBhcyB0aG9zZSB1c2VkIGJ5IG92ZXJsYXlmcyBhbmQgZXJvZnMpLiBJdCBpbXBsZW1lbnRzIGR5bmFtaWMgYWxsb2NhdGlvbiBhbmQgcmVmZXJlbmNlIHRyYWNraW5nIG9mIGludGVybWVkaWF0ZSBiYWNraW5nIGZpbGUgbGF5ZXJzIGluIHNlbGludXhfYmFja2luZ19maWxlX2FsbG9jLCBjbGVhbnVwIGluIHNlbGludXhfYmFja2luZ19maWxlX2ZyZWUsIGFuZCBtdWx0aS1sYXllciBwZXJtaXNzaW9uIGNoZWNrcyBkdXJpbmcgbXByb3RlY3QgaW4gc2VsaW51eF9maWxlX21wcm90ZWN0LiBUaGVzZSBjaGFuZ2VzIG1vZGlmeSBjb3JlIHNlY3VyaXR5IGFuZCBmaWxlc3lzdGVtIGludGVyYWN0aW9ucyBhbmQgYXJlIHdlbGwgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMjI6MjM6MjMuMTg1MjUyMTg4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDYzODI3Mzg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZmE3YTBiNTUwNjIyYzY0NWQ2MmNmOWEzNjQ5OGE3Y2FiZDcyNmNiNlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEF1ZyAyOSAyMjoyMzoyMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNcXG5pbmRleCAwMzVhYWYxMTNkMWRhLi5iNjc1MGVkY2M0NzgzIDEwMDY0NFxcbi0tLSBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuY1xcbisrKyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuY1xcbkBAIC0xNjc0LDI2ICsxNjc0LDMyIEBAIHN0YXRpYyBpbnQgY3JlZF9oYXNfY2FwYWJpbGl0eShjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCxcXG4gXFx0cmV0dXJuIHJjO1xcbiB9XFxuIFxcbi0vKiBDaGVjayB3aGV0aGVyIGEgdGFzayBoYXMgYSBwYXJ0aWN1bGFyIHBlcm1pc3Npb24gdG8gYW4gaW5vZGUuXFxuLSAgIFRoZSAnYWRwJyBwYXJhbWV0ZXIgaXMgb3B0aW9uYWwgYW5kIGFsbG93cyBvdGhlciBhdWRpdFxcbi0gICBkYXRhIHRvIGJlIHBhc3NlZCAoZS5nLiB0aGUgZGVudHJ5KS4gKi9cXG4tc3RhdGljIGludCBpbm9kZV9oYXNfcGVybShjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCxcXG4tXFx0XFx0XFx0ICBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi1cXHRcXHRcXHQgIHUzMiBwZXJtcyxcXG4tXFx0XFx0XFx0ICBzdHJ1Y3QgY29tbW9uX2F1ZGl0X2RhdGEgKmFkcClcXG4rLypcXG4rICogQ2hlY2sgd2hldGhlciBhIFNJRCBoYXMgYSBwYXJ0aWN1bGFyIHBlcm1pc3Npb24gdG8gYW4gaW5vZGUuICBUaGUgJ2FkcCdcXG4rICogcGFyYW1ldGVyIGlzIG9wdGlvbmFsIGFuZCBhbGxvd3Mgb3RoZXIgYXVkaXQgZGF0YSB0byBiZSBwYXNzZWQgKGUuZy4gdGhlXFxuKyAqIGRlbnRyeSkuXFxuKyAqL1xcbitzdGF0aWMgaW50IGlub2RlX3NpZF9oYXNfcGVybSh1MzIgc2lkLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgcGVybXMsXFxuK1xcdFxcdFxcdCAgICAgIHN0cnVjdCBjb21tb25fYXVkaXRfZGF0YSAqYWRwKVxcbiB7XFxuIFxcdHN0cnVjdCBpbm9kZV9zZWN1cml0eV9zdHJ1Y3QgKmlzZWM7XFxuLVxcdHUzMiBzaWQ7XFxuIFxcbiBcXHRpZiAodW5saWtlbHkoSVNfUFJJVkFURShpbm9kZSkpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdHNpZCA9IGNyZWRfc2lkKGNyZWQpO1xcbiBcXHRpc2VjID0gc2VsaW51eF9pbm9kZShpbm9kZSk7XFxuIFxcbiBcXHRyZXR1cm4gYXZjX2hhc19wZXJtKHNpZCwgaXNlYy1cXHUwMDNlc2lkLCBpc2VjLVxcdTAwM2VzY2xhc3MsIHBlcm1zLCBhZHApO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IGlub2RlX2hhc19wZXJtKGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkLFxcbitcXHRcXHRcXHQgIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuK1xcdFxcdFxcdCAgdTMyIHBlcm1zLFxcbitcXHRcXHRcXHQgIHN0cnVjdCBjb21tb25fYXVkaXRfZGF0YSAqYWRwKVxcbit7XFxuK1xcdHJldHVybiBpbm9kZV9zaWRfaGFzX3Blcm0oY3JlZF9zaWQoY3JlZCksIGlub2RlLCBwZXJtcywgYWRwKTtcXG4rfVxcbitcXG4gLyogU2FtZSBhcyBpbm9kZV9oYXNfcGVybSwgYnV0IHBhc3MgZXhwbGljaXQgYXVkaXQgZGF0YSBjb250YWluaW5nXFxuICAgIHRoZSBkZW50cnkgdG8gaGVscCB0aGUgYXVkaXRpbmcgY29kZSB0byBtb3JlIGVhc2lseSBnZW5lcmF0ZSB0aGVcXG4gICAgcGF0aG5hbWUgaWYgbmVlZGVkLiAqL1xcbkBAIC0zODQzLDE3ICszODQ5LDc0IEBAIHN0YXRpYyBpbnQgc2VsaW51eF9maWxlX2FsbG9jX3NlY3VyaXR5KHN0cnVjdCBmaWxlICpmaWxlKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSB1MzIgc2VsaW51eF9maWxlX3VzZXJfc2lkKGNvbnN0IHN0cnVjdCBmaWxlICpmaWxlKVxcbit7XFxuK1xcdGlmICh1bmxpa2VseShmaWxlLVxcdTAwM2VmX21vZGUgXFx1MDAyNiBGTU9ERV9CQUNLSU5HKSlcXG4rXFx0XFx0cmV0dXJuIHNlbGludXhfYmFja2luZ19maWxlKGZpbGUpLVxcdTAwM2V1Zl9zaWQ7XFxuK1xcdHJldHVybiBzZWxpbnV4X2ZpbGUoZmlsZSktXFx1MDAzZXNpZDtcXG4rfVxcbitcXG4gc3RhdGljIGludCBzZWxpbnV4X2JhY2tpbmdfZmlsZV9hbGxvYyhzdHJ1Y3QgZmlsZSAqYmFja2luZ19maWxlLFxcbiBcXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgZmlsZSAqdXNlcl9maWxlKVxcbiB7XFxuIFxcdHN0cnVjdCBiYWNraW5nX2ZpbGVfc2VjdXJpdHlfc3RydWN0ICpiZnNlYztcXG4rXFx0Y29uc3Qgc3RydWN0IGJhY2tpbmdfZmlsZV9zZWN1cml0eV9zdHJ1Y3QgKnViZnNlYztcXG4rXFx0c3RydWN0IGJhY2tpbmdfZmlsZV9zZWN1cml0eV9sYXllciAqbGF5ZXI7XFxuK1xcdHUzMiBpO1xcbiBcXG4gXFx0YmZzZWMgPSBzZWxpbnV4X2JhY2tpbmdfZmlsZShiYWNraW5nX2ZpbGUpO1xcbi1cXHRiZnNlYy1cXHUwMDNldWZfc2lkID0gc2VsaW51eF9maWxlKHVzZXJfZmlsZSktXFx1MDAzZXNpZDtcXG4rXFx0YmZzZWMtXFx1MDAzZXVmX3NpZCA9IHNlbGludXhfZmlsZV91c2VyX3NpZCh1c2VyX2ZpbGUpO1xcbitcXHRpZiAoISh1c2VyX2ZpbGUtXFx1MDAzZWZfbW9kZSBcXHUwMDI2IEZNT0RFX0JBQ0tJTkcpKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdHViZnNlYyA9IHNlbGludXhfYmFja2luZ19maWxlKHVzZXJfZmlsZSk7XFxuK1xcdC8qIGEgd3JhcHBlZCBjb3VudCB3b3VsZCBtYWtlIGttYWxsb2NfYXJyYXkoKSByZXR1cm4gWkVST19TSVpFX1BUUiAqL1xcbitcXHRpZiAodW5saWtlbHkodWJmc2VjLVxcdTAwM2VsYXllcl9jb3VudCA9PSBVMzJfTUFYKSlcXG4rXFx0XFx0cmV0dXJuIC1FT1ZFUkZMT1c7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBUaGUgZmluYWwgVk1BIG9ubHkgcmV0YWlucyB0aGUgbG93ZXN0IGJhY2tpbmcgZmlsZSwgc28gcmVjb3JkIHRoZVxcbitcXHQgKiB3aG9sZSBjaGFpbiBoZXJlIHJhdGhlciB0aGFuIGluIHRoZSBtbWFwIGhvb2ssIHdoZXJlIGNvbmN1cnJlbnRcXG4rXFx0ICogbWFwcGluZ3Mgd291bGQgaGF2ZSB0byBiZSBzZXJpYWxpemVkLiAgU2l6ZSBpdCBkeW5hbWljYWxseTogZXJvZnNcXG4rXFx0ICogaW5vZGUgc2hhcmluZyBhZGRzIGEgYmFja2luZyBmaWxlIHdpdGhvdXQgYnVtcGluZyBzX3N0YWNrX2RlcHRoLlxcbitcXHQgKi9cXG4rXFx0YmZzZWMtXFx1MDAzZWxheWVycyA9IGttYWxsb2NfYXJyYXkodWJmc2VjLVxcdTAwM2VsYXllcl9jb3VudCArIDEsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHNpemVvZigqYmZzZWMtXFx1MDAzZWxheWVycyksIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIWJmc2VjLVxcdTAwM2VsYXllcnMpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHViZnNlYy1cXHUwMDNlbGF5ZXJfY291bnQ7IGkrKykge1xcbitcXHRcXHRsYXllciA9IFxcdTAwMjZiZnNlYy1cXHUwMDNlbGF5ZXJzW2ldO1xcbitcXHRcXHQqbGF5ZXIgPSB1YmZzZWMtXFx1MDAzZWxheWVyc1tpXTtcXG4rXFx0XFx0cGF0aF9nZXQoXFx1MDAyNmxheWVyLVxcdTAwM2VwYXRoKTtcXG4rXFx0fVxcbitcXG4rXFx0LyogZl9wYXRoLCBub3QgZmlsZV91c2VyX3BhdGgoKTogdGhpcyBsYXllciwgbm90IHRoZSB0b3AtbGV2ZWwgZmlsZSAqL1xcbitcXHRsYXllciA9IFxcdTAwMjZiZnNlYy1cXHUwMDNlbGF5ZXJzW2ldO1xcbitcXHRsYXllci1cXHUwMDNlcGF0aCA9IHVzZXJfZmlsZS1cXHUwMDNlZl9wYXRoO1xcbitcXHRsYXllci1cXHUwMDNlbW91bnRlcl9zaWQgPSBjcmVkX3NpZCh1c2VyX2ZpbGUtXFx1MDAzZWZfY3JlZCk7XFxuK1xcdGxheWVyLVxcdTAwM2VmZF9zaWQgPSBzZWxpbnV4X2ZpbGUodXNlcl9maWxlKS1cXHUwMDNlc2lkO1xcbitcXHRwYXRoX2dldChcXHUwMDI2bGF5ZXItXFx1MDAzZXBhdGgpO1xcbitcXHRiZnNlYy1cXHUwMDNlbGF5ZXJfY291bnQgPSB1YmZzZWMtXFx1MDAzZWxheWVyX2NvdW50ICsgMTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBzZWxpbnV4X2JhY2tpbmdfZmlsZV9mcmVlKHN0cnVjdCBmaWxlICpiYWNraW5nX2ZpbGUpXFxuK3tcXG4rXFx0c3RydWN0IGJhY2tpbmdfZmlsZV9zZWN1cml0eV9zdHJ1Y3QgKmJmc2VjO1xcbitcXG4rXFx0Lyogc2VjdXJpdHlfYmFja2luZ19maWxlX2ZyZWUoKSBtYXkgYmUgY2FsbGVkIHR3aWNlIGFmdGVyIGFuIGVycm9yICovXFxuK1xcdGlmICghYmFja2luZ19maWxlX3NlY3VyaXR5KGJhY2tpbmdfZmlsZSkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGJmc2VjID0gc2VsaW51eF9iYWNraW5nX2ZpbGUoYmFja2luZ19maWxlKTtcXG4rXFx0d2hpbGUgKGJmc2VjLVxcdTAwM2VsYXllcl9jb3VudClcXG4rXFx0XFx0cGF0aF9wdXQoXFx1MDAyNmJmc2VjLVxcdTAwM2VsYXllcnNbLS1iZnNlYy1cXHUwMDNlbGF5ZXJfY291bnRdLnBhdGgpO1xcbitcXHRrZnJlZShiZnNlYy1cXHUwMDNlbGF5ZXJzKTtcXG4rXFx0YmZzZWMtXFx1MDAzZWxheWVycyA9IE5VTEw7XFxuK31cXG4rXFxuIC8qXFxuICAqIENoZWNrIHdoZXRoZXIgYSB0YXNrIGhhcyB0aGUgaW9jdGwgcGVybWlzc2lvbiBhbmQgY21kXFxuICAqIG9wZXJhdGlvbiB0byBhbiBpbm9kZS5cXG5AQCAtMzk3MSw2ICs0MDM0LDUzIEBAIHN0YXRpYyBpbnQgc2VsaW51eF9maWxlX2lvY3RsX2NvbXBhdChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCxcXG4gXFxuIHN0YXRpYyBpbnQgZGVmYXVsdF9ub2V4ZWMgX19yb19hZnRlcl9pbml0O1xcbiBcXG4rc3RhdGljIHUzMiBmaWxlX21hcF9wcm90X3RvX2F2KHVuc2lnbmVkIGxvbmcgcHJvdCwgYm9vbCBzaGFyZWQpXFxuK3tcXG4rXFx0dTMyIGF2ID0gRklMRV9fUkVBRDtcXG4rXFxuK1xcdGlmIChzaGFyZWQgXFx1MDAyNlxcdTAwMjYgKHByb3QgXFx1MDAyNiBQUk9UX1dSSVRFKSlcXG4rXFx0XFx0YXYgfD0gRklMRV9fV1JJVEU7XFxuK1xcdGlmIChwcm90IFxcdTAwMjYgUFJPVF9FWEVDKVxcbitcXHRcXHRhdiB8PSBGSUxFX19FWEVDVVRFO1xcbitcXG4rXFx0cmV0dXJuIGF2O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGJhY2tpbmdfbW91bnRlcnNfaGFzX3Blcm0oY29uc3Qgc3RydWN0IGZpbGUgKmZpbGUsIHUzMiBhdilcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgYmFja2luZ19maWxlX3NlY3VyaXR5X3N0cnVjdCAqYmZzZWM7XFxuK1xcdGNvbnN0IHN0cnVjdCBiYWNraW5nX2ZpbGVfc2VjdXJpdHlfbGF5ZXIgKmxheWVyO1xcbitcXHRzdHJ1Y3QgY29tbW9uX2F1ZGl0X2RhdGEgYWQ7XFxuK1xcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XFxuK1xcdHUzMiBpO1xcbitcXHRpbnQgcmM7XFxuK1xcbitcXHRpZiAoV0FSTl9PTl9PTkNFKCEoZmlsZS1cXHUwMDNlZl9tb2RlIFxcdTAwMjYgRk1PREVfQkFDS0lORykpKVxcbitcXHRcXHRyZXR1cm4gLUVJTztcXG4rXFxuK1xcdGJmc2VjID0gc2VsaW51eF9iYWNraW5nX2ZpbGUoZmlsZSk7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBiZnNlYy1cXHUwMDNlbGF5ZXJfY291bnQ7IGkrKykge1xcbitcXHRcXHRsYXllciA9IFxcdTAwMjZiZnNlYy1cXHUwMDNlbGF5ZXJzW2ldO1xcbitcXHRcXHRpbm9kZSA9IGRfaW5vZGUobGF5ZXItXFx1MDAzZXBhdGguZGVudHJ5KTtcXG4rXFxuK1xcdFxcdGFkLnR5cGUgPSBMU01fQVVESVRfREFUQV9QQVRIO1xcbitcXHRcXHRhZC51LnBhdGggPSBsYXllci1cXHUwMDNlcGF0aDtcXG4rXFxuK1xcdFxcdGlmIChsYXllci1cXHUwMDNlbW91bnRlcl9zaWQgIT0gbGF5ZXItXFx1MDAzZWZkX3NpZCkge1xcbitcXHRcXHRcXHRyYyA9IGF2Y19oYXNfcGVybShsYXllci1cXHUwMDNlbW91bnRlcl9zaWQsIGxheWVyLVxcdTAwM2VmZF9zaWQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgU0VDQ0xBU1NfRkQsIEZEX19VU0UsIFxcdTAwMjZhZCk7XFxuK1xcdFxcdFxcdGlmIChyYylcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIHJjO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRyYyA9IGlub2RlX3NpZF9oYXNfcGVybShsYXllci1cXHUwMDNlbW91bnRlcl9zaWQsIGlub2RlLCBhdiwgXFx1MDAyNmFkKTtcXG4rXFx0XFx0aWYgKHJjKVxcbitcXHRcXHRcXHRyZXR1cm4gcmM7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IF9fZmlsZV9tYXBfcHJvdF9jaGVjayhjb25zdCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBwcm90LFxcbiBcXHRcXHRcXHRcXHQgYm9vbCBzaGFyZWQsIGJvb2wgbW91bnRlcl9jaGVjayxcXG4gXFx0XFx0XFx0XFx0IGJvb2wgYmZfdXNlcl9maWxlKVxcbkBAIC00MDA0LDE0ICs0MTE0LDEwIEBAIHN0YXRpYyBpbnQgX19maWxlX21hcF9wcm90X2NoZWNrKGNvbnN0IHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIHByb3QsXFxuIFxcdGlmIChmaWxlKSB7XFxuIFxcdFxcdGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkID0gbW91bnRlcl9jaGVjayA/XFxuIFxcdFxcdFxcdFxcdGZpbGUtXFx1MDAzZWZfY3JlZCA6IGN1cnJlbnRfY3JlZCgpO1xcbi1cXHRcXHQvKiBcXFwicmVhZFxcXCIgYWx3YXlzIHBvc3NpYmxlLCBcXFwid3JpdGVcXFwiIG9ubHkgaWYgc2hhcmVkICovXFxuLVxcdFxcdHUzMiBhdiA9IEZJTEVfX1JFQUQ7XFxuLVxcdFxcdGlmIChzaGFyZWQgXFx1MDAyNlxcdTAwMjYgcHJvdF93cml0ZSlcXG4tXFx0XFx0XFx0YXYgfD0gRklMRV9fV1JJVEU7XFxuLVxcdFxcdGlmIChwcm90X2V4ZWMpXFxuLVxcdFxcdFxcdGF2IHw9IEZJTEVfX0VYRUNVVEU7XFxuIFxcbi1cXHRcXHRyZXR1cm4gX19maWxlX2hhc19wZXJtKGNyZWQsIGZpbGUsIGF2LCBiZl91c2VyX2ZpbGUpO1xcbitcXHRcXHRyZXR1cm4gX19maWxlX2hhc19wZXJtKGNyZWQsIGZpbGUsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBmaWxlX21hcF9wcm90X3RvX2F2KHByb3QsIHNoYXJlZCksXFxuK1xcdFxcdFxcdFxcdCAgICAgICBiZl91c2VyX2ZpbGUpO1xcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG5AQCAtNDEwNiw2ICs0MjEyLDcgQEAgc3RhdGljIGludCBzZWxpbnV4X2ZpbGVfbXByb3RlY3Qoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdGludCByYztcXG4gXFx0Y29uc3Qgc3RydWN0IGNyZWQgKmNyZWQgPSBjdXJyZW50X2NyZWQoKTtcXG4gXFx0dTMyIHNpZCA9IGNyZWRfc2lkKGNyZWQpO1xcbitcXHR1MzIgYXY7XFxuIFxcdGNvbnN0IHN0cnVjdCBmaWxlICpmaWxlID0gdm1hLVxcdTAwM2V2bV9maWxlO1xcbiBcXHRib29sIGJhY2tpbmdfZmlsZTtcXG4gXFx0Ym9vbCBzaGFyZWQgPSB2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fU0hBUkVEO1xcbkBAIC00MTQ5LDYgKzQyNTYsMTAgQEAgc3RhdGljIGludCBzZWxpbnV4X2ZpbGVfbXByb3RlY3Qoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdFxcdFxcdGlmIChyYylcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIHJjO1xcbiBcXHRcXHRcXHRpZiAoYmFja2luZ19maWxlKSB7XFxuK1xcdFxcdFxcdFxcdHJjID0gYmFja2luZ19tb3VudGVyc19oYXNfcGVybShmaWxlLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgRklMRV9fRVhFQ01PRCk7XFxuK1xcdFxcdFxcdFxcdGlmIChyYylcXG4rXFx0XFx0XFx0XFx0XFx0cmV0dXJuIHJjO1xcbiBcXHRcXHRcXHRcXHRyYyA9IGZpbGVfaGFzX3Blcm0oZmlsZS1cXHUwMDNlZl9jcmVkLCBmaWxlLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICBGSUxFX19FWEVDTU9EKTtcXG4gXFx0XFx0XFx0XFx0aWYgKHJjKVxcbkBAIC00MTYxLDYgKzQyNzIsMTAgQEAgc3RhdGljIGludCBzZWxpbnV4X2ZpbGVfbXByb3RlY3Qoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdGlmIChyYylcXG4gXFx0XFx0cmV0dXJuIHJjO1xcbiBcXHRpZiAoYmFja2luZ19maWxlKSB7XFxuK1xcdFxcdGF2ID0gZmlsZV9tYXBfcHJvdF90b19hdihwcm90LCBzaGFyZWQpO1xcbitcXHRcXHRyYyA9IGJhY2tpbmdfbW91bnRlcnNfaGFzX3Blcm0oZmlsZSwgYXYpO1xcbitcXHRcXHRpZiAocmMpXFxuK1xcdFxcdFxcdHJldHVybiByYztcXG4gXFx0XFx0cmMgPSBmaWxlX21hcF9wcm90X2NoZWNrKGZpbGUsIHByb3QsIHNoYXJlZCwgdHJ1ZSk7XFxuIFxcdFxcdGlmIChyYylcXG4gXFx0XFx0XFx0cmV0dXJuIHJjO1xcbkBAIC03NjM1LDYgKzc3NTAsNyBAQCBzdGF0aWMgc3RydWN0IHNlY3VyaXR5X2hvb2tfbGlzdCBzZWxpbnV4X2hvb2tzW10gX19yb19hZnRlcl9pbml0ID0ge1xcbiBcXHRMU01fSE9PS19JTklUKGZpbGVfcGVybWlzc2lvbiwgc2VsaW51eF9maWxlX3Blcm1pc3Npb24pLFxcbiBcXHRMU01fSE9PS19JTklUKGZpbGVfYWxsb2Nfc2VjdXJpdHksIHNlbGludXhfZmlsZV9hbGxvY19zZWN1cml0eSksXFxuIFxcdExTTV9IT09LX0lOSVQoYmFja2luZ19maWxlX2FsbG9jLCBzZWxpbnV4X2JhY2tpbmdfZmlsZV9hbGxvYyksXFxuK1xcdExTTV9IT09LX0lOSVQoYmFja2luZ19maWxlX2ZyZWUsIHNlbGludXhfYmFja2luZ19maWxlX2ZyZWUpLFxcbiBcXHRMU01fSE9PS19JTklUKGZpbGVfaW9jdGwsIHNlbGludXhfZmlsZV9pb2N0bCksXFxuIFxcdExTTV9IT09LX0lOSVQoZmlsZV9pb2N0bF9jb21wYXQsIHNlbGludXhfZmlsZV9pb2N0bF9jb21wYXQpLFxcbiBcXHRMU01fSE9PS19JTklUKG1tYXBfZmlsZSwgc2VsaW51eF9tbWFwX2ZpbGUpLFxcbmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvb2Jqc2VjLmggYi9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvb2Jqc2VjLmhcXG5pbmRleCAzYzBhMTZlYzk3OGIwLi4yZjIxNTY4MjUxZmZlIDEwMDY0NFxcbi0tLSBhL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9vYmpzZWMuaFxcbisrKyBiL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9vYmpzZWMuaFxcbkBAIC04Niw4ICs4NiwxNiBAQCBzdHJ1Y3QgZmlsZV9zZWN1cml0eV9zdHJ1Y3Qge1xcbiBcXHR1MzIgcHNlcW5vOyAvKiBQb2xpY3kgc2Vxbm8gYXQgdGhlIHRpbWUgb2YgZmlsZSBvcGVuICovXFxuIH07XFxuIFxcbitzdHJ1Y3QgYmFja2luZ19maWxlX3NlY3VyaXR5X2xheWVyIHtcXG4rXFx0c3RydWN0IHBhdGggcGF0aDsgLyogdGhpcyBsYXllcidzIHJlYWwgcGF0aCAqL1xcbitcXHR1MzIgbW91bnRlcl9zaWQ7IC8qIFNJRCBvZiB0aGUgbW91bnRlciB0aGF0IG9wZW5lZCBpdCAqL1xcbitcXHR1MzIgZmRfc2lkOyAvKiBTSUQgb2YgaXRzIG9wZW4gZmlsZSBkZXNjcmlwdGlvbiAqL1xcbit9O1xcbitcXG4gc3RydWN0IGJhY2tpbmdfZmlsZV9zZWN1cml0eV9zdHJ1Y3Qge1xcbi1cXHR1MzIgdWZfc2lkOyAvKiBhc3NvY2lhdGVkIHVzZXIgZmlsZSBmc2VjLVxcdTAwM2VzaWQgKi9cXG4rXFx0dTMyIHVmX3NpZDsgLyogdG9wLWxldmVsIHVzZXIgZmlsZSBmc2VjLVxcdTAwM2VzaWQgKi9cXG4rXFx0dTMyIGxheWVyX2NvdW50OyAvKiBudW1iZXIgb2YgaW50ZXJtZWRpYXRlIGJhY2tpbmcgZmlsZXMgKi9cXG4rXFx0c3RydWN0IGJhY2tpbmdfZmlsZV9zZWN1cml0eV9sYXllciAqbGF5ZXJzO1xcbiB9O1xcbiBcXG4gc3RydWN0IHN1cGVyYmxvY2tfc2VjdXJpdHlfc3RydWN0IHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMjI6MjM6MjQuNjUwMDY4MjM2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo3MTgxMDA5NjA3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTRUNVUklUWVwiLFxuICAgIFwiU0VDVVJJVFlfU0VMSU5VWFwiLFxuICAgIFwiU0VDVVJJVFlfTkVUV09SS1wiLFxuICAgIFwiQVVESVRcIixcbiAgICBcIk5FVFwiLFxuICAgIFwiSU5FVFwiLFxuICAgIFwiT1ZFUkxBWV9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNlbGludXhfYmFja2luZ19maWxlX2FsbG9jXCIsXG4gICAgXCJzZWxpbnV4X2JhY2tpbmdfZmlsZV9mcmVlXCIsXG4gICAgXCJzZWxpbnV4X2ZpbGVfbXByb3RlY3RcIixcbiAgICBcInNlY3VyaXR5X2JhY2tpbmdfZmlsZV9hbGxvY1wiLFxuICAgIFwic2VjdXJpdHlfYmFja2luZ19maWxlX2ZyZWVcIixcbiAgICBcInNlY3VyaXR5X2ZpbGVfbXByb3RlY3RcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRyYWNraW5nIGFuZCBlbmZvcmNpbmcgU0VMaW51eCBwZXJtaXNzaW9ucyBhY3Jvc3MgbXVsdGktbGF5ZXIgYmFja2luZyBmaWxlcyAoc3VjaCBhcyB0aG9zZSB1c2VkIGJ5IG92ZXJsYXlmcyBhbmQgZXJvZnMpLiBJdCBpbXBsZW1lbnRzIGR5bmFtaWMgYWxsb2NhdGlvbiBhbmQgcmVmZXJlbmNlIHRyYWNraW5nIG9mIGludGVybWVkaWF0ZSBiYWNraW5nIGZpbGUgbGF5ZXJzIGluIHNlbGludXhfYmFja2luZ19maWxlX2FsbG9jLCBjbGVhbnVwIGluIHNlbGludXhfYmFja2luZ19maWxlX2ZyZWUsIGFuZCBtdWx0aS1sYXllciBwZXJtaXNzaW9uIGNoZWNrcyBkdXJpbmcgbXByb3RlY3QgaW4gc2VsaW51eF9maWxlX21wcm90ZWN0LiBUaGVzZSBjaGFuZ2VzIG1vZGlmeSBjb3JlIHNlY3VyaXR5IGFuZCBmaWxlc3lzdGVtIGludGVyYWN0aW9ucyBhbmQgYXJlIHdlbGwgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZmE3YTBiNTUwNjIyYzY0NWQ2MmNmOWEzNjQ5OGE3Y2FiZDcyNmNiNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDI5IDIyOjIzOjIxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jXG5pbmRleCAwMzVhYWYxMTNkMWRhLi5iNjc1MGVkY2M0NzgzIDEwMDY0NFxuLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jXG4rKysgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNcbkBAIC0xNjc0LDI2ICsxNjc0LDMyIEBAIHN0YXRpYyBpbnQgY3JlZF9oYXNfY2FwYWJpbGl0eShjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCxcbiBcdHJldHVybiByYztcbiB9XG4gXG4tLyogQ2hlY2sgd2hldGhlciBhIHRhc2sgaGFzIGEgcGFydGljdWxhciBwZXJtaXNzaW9uIHRvIGFuIGlub2RlLlxuLSAgIFRoZSAnYWRwJyBwYXJhbWV0ZXIgaXMgb3B0aW9uYWwgYW5kIGFsbG93cyBvdGhlciBhdWRpdFxuLSAgIGRhdGEgdG8gYmUgcGFzc2VkIChlLmcuIHRoZSBkZW50cnkpLiAqL1xuLXN0YXRpYyBpbnQgaW5vZGVfaGFzX3Blcm0oY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQsXG4tXHRcdFx0ICBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLVx0XHRcdCAgdTMyIHBlcm1zLFxuLVx0XHRcdCAgc3RydWN0IGNvbW1vbl9hdWRpdF9kYXRhICphZHApXG4rLypcbisgKiBDaGVjayB3aGV0aGVyIGEgU0lEIGhhcyBhIHBhcnRpY3VsYXIgcGVybWlzc2lvbiB0byBhbiBpbm9kZS4gIFRoZSAnYWRwJ1xuKyAqIHBhcmFtZXRlciBpcyBvcHRpb25hbCBhbmQgYWxsb3dzIG90aGVyIGF1ZGl0IGRhdGEgdG8gYmUgcGFzc2VkIChlLmcuIHRoZVxuKyAqIGRlbnRyeSkuXG4rICovXG4rc3RhdGljIGludCBpbm9kZV9zaWRfaGFzX3Blcm0odTMyIHNpZCwgc3RydWN0IGlub2RlICppbm9kZSwgdTMyIHBlcm1zLFxuK1x0XHRcdCAgICAgIHN0cnVjdCBjb21tb25fYXVkaXRfZGF0YSAqYWRwKVxuIHtcbiBcdHN0cnVjdCBpbm9kZV9zZWN1cml0eV9zdHJ1Y3QgKmlzZWM7XG4tXHR1MzIgc2lkO1xuIFxuIFx0aWYgKHVubGlrZWx5KElTX1BSSVZBVEUoaW5vZGUpKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRzaWQgPSBjcmVkX3NpZChjcmVkKTtcbiBcdGlzZWMgPSBzZWxpbnV4X2lub2RlKGlub2RlKTtcbiBcbiBcdHJldHVybiBhdmNfaGFzX3Blcm0oc2lkLCBpc2VjLVx1MDAzZXNpZCwgaXNlYy1cdTAwM2VzY2xhc3MsIHBlcm1zLCBhZHApO1xuIH1cbiBcbitzdGF0aWMgaW50IGlub2RlX2hhc19wZXJtKGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkLFxuK1x0XHRcdCAgc3RydWN0IGlub2RlICppbm9kZSxcbitcdFx0XHQgIHUzMiBwZXJtcyxcbitcdFx0XHQgIHN0cnVjdCBjb21tb25fYXVkaXRfZGF0YSAqYWRwKVxuK3tcbitcdHJldHVybiBpbm9kZV9zaWRfaGFzX3Blcm0oY3JlZF9zaWQoY3JlZCksIGlub2RlLCBwZXJtcywgYWRwKTtcbit9XG4rXG4gLyogU2FtZSBhcyBpbm9kZV9oYXNfcGVybSwgYnV0IHBhc3MgZXhwbGljaXQgYXVkaXQgZGF0YSBjb250YWluaW5nXG4gICAgdGhlIGRlbnRyeSB0byBoZWxwIHRoZSBhdWRpdGluZyBjb2RlIHRvIG1vcmUgZWFzaWx5IGdlbmVyYXRlIHRoZVxuICAgIHBhdGhuYW1lIGlmIG5lZWRlZC4gKi9cbkBAIC0zODQzLDE3ICszODQ5LDc0IEBAIHN0YXRpYyBpbnQgc2VsaW51eF9maWxlX2FsbG9jX3NlY3VyaXR5KHN0cnVjdCBmaWxlICpmaWxlKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgdTMyIHNlbGludXhfZmlsZV91c2VyX3NpZChjb25zdCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbit7XG4rXHRpZiAodW5saWtlbHkoZmlsZS1cdTAwM2VmX21vZGUgXHUwMDI2IEZNT0RFX0JBQ0tJTkcpKVxuK1x0XHRyZXR1cm4gc2VsaW51eF9iYWNraW5nX2ZpbGUoZmlsZSktXHUwMDNldWZfc2lkO1xuK1x0cmV0dXJuIHNlbGludXhfZmlsZShmaWxlKS1cdTAwM2VzaWQ7XG4rfVxuK1xuIHN0YXRpYyBpbnQgc2VsaW51eF9iYWNraW5nX2ZpbGVfYWxsb2Moc3RydWN0IGZpbGUgKmJhY2tpbmdfZmlsZSxcbiBcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBmaWxlICp1c2VyX2ZpbGUpXG4ge1xuIFx0c3RydWN0IGJhY2tpbmdfZmlsZV9zZWN1cml0eV9zdHJ1Y3QgKmJmc2VjO1xuK1x0Y29uc3Qgc3RydWN0IGJhY2tpbmdfZmlsZV9zZWN1cml0eV9zdHJ1Y3QgKnViZnNlYztcbitcdHN0cnVjdCBiYWNraW5nX2ZpbGVfc2VjdXJpdHlfbGF5ZXIgKmxheWVyO1xuK1x0dTMyIGk7XG4gXG4gXHRiZnNlYyA9IHNlbGludXhfYmFja2luZ19maWxlKGJhY2tpbmdfZmlsZSk7XG4tXHRiZnNlYy1cdTAwM2V1Zl9zaWQgPSBzZWxpbnV4X2ZpbGUodXNlcl9maWxlKS1cdTAwM2VzaWQ7XG4rXHRiZnNlYy1cdTAwM2V1Zl9zaWQgPSBzZWxpbnV4X2ZpbGVfdXNlcl9zaWQodXNlcl9maWxlKTtcbitcdGlmICghKHVzZXJfZmlsZS1cdTAwM2VmX21vZGUgXHUwMDI2IEZNT0RFX0JBQ0tJTkcpKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHViZnNlYyA9IHNlbGludXhfYmFja2luZ19maWxlKHVzZXJfZmlsZSk7XG4rXHQvKiBhIHdyYXBwZWQgY291bnQgd291bGQgbWFrZSBrbWFsbG9jX2FycmF5KCkgcmV0dXJuIFpFUk9fU0laRV9QVFIgKi9cbitcdGlmICh1bmxpa2VseSh1YmZzZWMtXHUwMDNlbGF5ZXJfY291bnQgPT0gVTMyX01BWCkpXG4rXHRcdHJldHVybiAtRU9WRVJGTE9XO1xuK1xuK1x0LypcbitcdCAqIFRoZSBmaW5hbCBWTUEgb25seSByZXRhaW5zIHRoZSBsb3dlc3QgYmFja2luZyBmaWxlLCBzbyByZWNvcmQgdGhlXG4rXHQgKiB3aG9sZSBjaGFpbiBoZXJlIHJhdGhlciB0aGFuIGluIHRoZSBtbWFwIGhvb2ssIHdoZXJlIGNvbmN1cnJlbnRcbitcdCAqIG1hcHBpbmdzIHdvdWxkIGhhdmUgdG8gYmUgc2VyaWFsaXplZC4gIFNpemUgaXQgZHluYW1pY2FsbHk6IGVyb2ZzXG4rXHQgKiBpbm9kZSBzaGFyaW5nIGFkZHMgYSBiYWNraW5nIGZpbGUgd2l0aG91dCBidW1waW5nIHNfc3RhY2tfZGVwdGguXG4rXHQgKi9cbitcdGJmc2VjLVx1MDAzZWxheWVycyA9IGttYWxsb2NfYXJyYXkodWJmc2VjLVx1MDAzZWxheWVyX2NvdW50ICsgMSxcbitcdFx0XHRcdCAgICAgIHNpemVvZigqYmZzZWMtXHUwMDNlbGF5ZXJzKSwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIWJmc2VjLVx1MDAzZWxheWVycylcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB1YmZzZWMtXHUwMDNlbGF5ZXJfY291bnQ7IGkrKykge1xuK1x0XHRsYXllciA9IFx1MDAyNmJmc2VjLVx1MDAzZWxheWVyc1tpXTtcbitcdFx0KmxheWVyID0gdWJmc2VjLVx1MDAzZWxheWVyc1tpXTtcbitcdFx0cGF0aF9nZXQoXHUwMDI2bGF5ZXItXHUwMDNlcGF0aCk7XG4rXHR9XG4rXG4rXHQvKiBmX3BhdGgsIG5vdCBmaWxlX3VzZXJfcGF0aCgpOiB0aGlzIGxheWVyLCBub3QgdGhlIHRvcC1sZXZlbCBmaWxlICovXG4rXHRsYXllciA9IFx1MDAyNmJmc2VjLVx1MDAzZWxheWVyc1tpXTtcbitcdGxheWVyLVx1MDAzZXBhdGggPSB1c2VyX2ZpbGUtXHUwMDNlZl9wYXRoO1xuK1x0bGF5ZXItXHUwMDNlbW91bnRlcl9zaWQgPSBjcmVkX3NpZCh1c2VyX2ZpbGUtXHUwMDNlZl9jcmVkKTtcbitcdGxheWVyLVx1MDAzZWZkX3NpZCA9IHNlbGludXhfZmlsZSh1c2VyX2ZpbGUpLVx1MDAzZXNpZDtcbitcdHBhdGhfZ2V0KFx1MDAyNmxheWVyLVx1MDAzZXBhdGgpO1xuK1x0YmZzZWMtXHUwMDNlbGF5ZXJfY291bnQgPSB1YmZzZWMtXHUwMDNlbGF5ZXJfY291bnQgKyAxO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIHNlbGludXhfYmFja2luZ19maWxlX2ZyZWUoc3RydWN0IGZpbGUgKmJhY2tpbmdfZmlsZSlcbit7XG4rXHRzdHJ1Y3QgYmFja2luZ19maWxlX3NlY3VyaXR5X3N0cnVjdCAqYmZzZWM7XG4rXG4rXHQvKiBzZWN1cml0eV9iYWNraW5nX2ZpbGVfZnJlZSgpIG1heSBiZSBjYWxsZWQgdHdpY2UgYWZ0ZXIgYW4gZXJyb3IgKi9cbitcdGlmICghYmFja2luZ19maWxlX3NlY3VyaXR5KGJhY2tpbmdfZmlsZSkpXG4rXHRcdHJldHVybjtcbitcbitcdGJmc2VjID0gc2VsaW51eF9iYWNraW5nX2ZpbGUoYmFja2luZ19maWxlKTtcbitcdHdoaWxlIChiZnNlYy1cdTAwM2VsYXllcl9jb3VudClcbitcdFx0cGF0aF9wdXQoXHUwMDI2YmZzZWMtXHUwMDNlbGF5ZXJzWy0tYmZzZWMtXHUwMDNlbGF5ZXJfY291bnRdLnBhdGgpO1xuK1x0a2ZyZWUoYmZzZWMtXHUwMDNlbGF5ZXJzKTtcbitcdGJmc2VjLVx1MDAzZWxheWVycyA9IE5VTEw7XG4rfVxuK1xuIC8qXG4gICogQ2hlY2sgd2hldGhlciBhIHRhc2sgaGFzIHRoZSBpb2N0bCBwZXJtaXNzaW9uIGFuZCBjbWRcbiAgKiBvcGVyYXRpb24gdG8gYW4gaW5vZGUuXG5AQCAtMzk3MSw2ICs0MDM0LDUzIEBAIHN0YXRpYyBpbnQgc2VsaW51eF9maWxlX2lvY3RsX2NvbXBhdChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCxcbiBcbiBzdGF0aWMgaW50IGRlZmF1bHRfbm9leGVjIF9fcm9fYWZ0ZXJfaW5pdDtcbiBcbitzdGF0aWMgdTMyIGZpbGVfbWFwX3Byb3RfdG9fYXYodW5zaWduZWQgbG9uZyBwcm90LCBib29sIHNoYXJlZClcbit7XG4rXHR1MzIgYXYgPSBGSUxFX19SRUFEO1xuK1xuK1x0aWYgKHNoYXJlZCBcdTAwMjZcdTAwMjYgKHByb3QgXHUwMDI2IFBST1RfV1JJVEUpKVxuK1x0XHRhdiB8PSBGSUxFX19XUklURTtcbitcdGlmIChwcm90IFx1MDAyNiBQUk9UX0VYRUMpXG4rXHRcdGF2IHw9IEZJTEVfX0VYRUNVVEU7XG4rXG4rXHRyZXR1cm4gYXY7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYmFja2luZ19tb3VudGVyc19oYXNfcGVybShjb25zdCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdTMyIGF2KVxuK3tcbitcdGNvbnN0IHN0cnVjdCBiYWNraW5nX2ZpbGVfc2VjdXJpdHlfc3RydWN0ICpiZnNlYztcbitcdGNvbnN0IHN0cnVjdCBiYWNraW5nX2ZpbGVfc2VjdXJpdHlfbGF5ZXIgKmxheWVyO1xuK1x0c3RydWN0IGNvbW1vbl9hdWRpdF9kYXRhIGFkO1xuK1x0c3RydWN0IGlub2RlICppbm9kZTtcbitcdHUzMiBpO1xuK1x0aW50IHJjO1xuK1xuK1x0aWYgKFdBUk5fT05fT05DRSghKGZpbGUtXHUwMDNlZl9tb2RlIFx1MDAyNiBGTU9ERV9CQUNLSU5HKSkpXG4rXHRcdHJldHVybiAtRUlPO1xuK1xuK1x0YmZzZWMgPSBzZWxpbnV4X2JhY2tpbmdfZmlsZShmaWxlKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGJmc2VjLVx1MDAzZWxheWVyX2NvdW50OyBpKyspIHtcbitcdFx0bGF5ZXIgPSBcdTAwMjZiZnNlYy1cdTAwM2VsYXllcnNbaV07XG4rXHRcdGlub2RlID0gZF9pbm9kZShsYXllci1cdTAwM2VwYXRoLmRlbnRyeSk7XG4rXG4rXHRcdGFkLnR5cGUgPSBMU01fQVVESVRfREFUQV9QQVRIO1xuK1x0XHRhZC51LnBhdGggPSBsYXllci1cdTAwM2VwYXRoO1xuK1xuK1x0XHRpZiAobGF5ZXItXHUwMDNlbW91bnRlcl9zaWQgIT0gbGF5ZXItXHUwMDNlZmRfc2lkKSB7XG4rXHRcdFx0cmMgPSBhdmNfaGFzX3Blcm0obGF5ZXItXHUwMDNlbW91bnRlcl9zaWQsIGxheWVyLVx1MDAzZWZkX3NpZCxcbitcdFx0XHRcdFx0ICBTRUNDTEFTU19GRCwgRkRfX1VTRSwgXHUwMDI2YWQpO1xuK1x0XHRcdGlmIChyYylcbitcdFx0XHRcdHJldHVybiByYztcbitcdFx0fVxuK1xuK1x0XHRyYyA9IGlub2RlX3NpZF9oYXNfcGVybShsYXllci1cdTAwM2Vtb3VudGVyX3NpZCwgaW5vZGUsIGF2LCBcdTAwMjZhZCk7XG4rXHRcdGlmIChyYylcbitcdFx0XHRyZXR1cm4gcmM7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gc3RhdGljIGludCBfX2ZpbGVfbWFwX3Byb3RfY2hlY2soY29uc3Qgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgcHJvdCxcbiBcdFx0XHRcdCBib29sIHNoYXJlZCwgYm9vbCBtb3VudGVyX2NoZWNrLFxuIFx0XHRcdFx0IGJvb2wgYmZfdXNlcl9maWxlKVxuQEAgLTQwMDQsMTQgKzQxMTQsMTAgQEAgc3RhdGljIGludCBfX2ZpbGVfbWFwX3Byb3RfY2hlY2soY29uc3Qgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgcHJvdCxcbiBcdGlmIChmaWxlKSB7XG4gXHRcdGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkID0gbW91bnRlcl9jaGVjayA/XG4gXHRcdFx0XHRmaWxlLVx1MDAzZWZfY3JlZCA6IGN1cnJlbnRfY3JlZCgpO1xuLVx0XHQvKiBcInJlYWRcIiBhbHdheXMgcG9zc2libGUsIFwid3JpdGVcIiBvbmx5IGlmIHNoYXJlZCAqL1xuLVx0XHR1MzIgYXYgPSBGSUxFX19SRUFEO1xuLVx0XHRpZiAoc2hhcmVkIFx1MDAyNlx1MDAyNiBwcm90X3dyaXRlKVxuLVx0XHRcdGF2IHw9IEZJTEVfX1dSSVRFO1xuLVx0XHRpZiAocHJvdF9leGVjKVxuLVx0XHRcdGF2IHw9IEZJTEVfX0VYRUNVVEU7XG4gXG4tXHRcdHJldHVybiBfX2ZpbGVfaGFzX3Blcm0oY3JlZCwgZmlsZSwgYXYsIGJmX3VzZXJfZmlsZSk7XG4rXHRcdHJldHVybiBfX2ZpbGVfaGFzX3Blcm0oY3JlZCwgZmlsZSxcbitcdFx0XHRcdCAgICAgICBmaWxlX21hcF9wcm90X3RvX2F2KHByb3QsIHNoYXJlZCksXG4rXHRcdFx0XHQgICAgICAgYmZfdXNlcl9maWxlKTtcbiBcdH1cbiBcbiBcdHJldHVybiAwO1xuQEAgLTQxMDYsNiArNDIxMiw3IEBAIHN0YXRpYyBpbnQgc2VsaW51eF9maWxlX21wcm90ZWN0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0aW50IHJjO1xuIFx0Y29uc3Qgc3RydWN0IGNyZWQgKmNyZWQgPSBjdXJyZW50X2NyZWQoKTtcbiBcdHUzMiBzaWQgPSBjcmVkX3NpZChjcmVkKTtcbitcdHUzMiBhdjtcbiBcdGNvbnN0IHN0cnVjdCBmaWxlICpmaWxlID0gdm1hLVx1MDAzZXZtX2ZpbGU7XG4gXHRib29sIGJhY2tpbmdfZmlsZTtcbiBcdGJvb2wgc2hhcmVkID0gdm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9TSEFSRUQ7XG5AQCAtNDE0OSw2ICs0MjU2LDEwIEBAIHN0YXRpYyBpbnQgc2VsaW51eF9maWxlX21wcm90ZWN0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRcdGlmIChyYylcbiBcdFx0XHRcdHJldHVybiByYztcbiBcdFx0XHRpZiAoYmFja2luZ19maWxlKSB7XG4rXHRcdFx0XHRyYyA9IGJhY2tpbmdfbW91bnRlcnNfaGFzX3Blcm0oZmlsZSxcbitcdFx0XHRcdFx0XHRcdCAgICAgICBGSUxFX19FWEVDTU9EKTtcbitcdFx0XHRcdGlmIChyYylcbitcdFx0XHRcdFx0cmV0dXJuIHJjO1xuIFx0XHRcdFx0cmMgPSBmaWxlX2hhc19wZXJtKGZpbGUtXHUwMDNlZl9jcmVkLCBmaWxlLFxuIFx0XHRcdFx0XHRcdCAgIEZJTEVfX0VYRUNNT0QpO1xuIFx0XHRcdFx0aWYgKHJjKVxuQEAgLTQxNjEsNiArNDI3MiwxMCBAQCBzdGF0aWMgaW50IHNlbGludXhfZmlsZV9tcHJvdGVjdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdGlmIChyYylcbiBcdFx0cmV0dXJuIHJjO1xuIFx0aWYgKGJhY2tpbmdfZmlsZSkge1xuK1x0XHRhdiA9IGZpbGVfbWFwX3Byb3RfdG9fYXYocHJvdCwgc2hhcmVkKTtcbitcdFx0cmMgPSBiYWNraW5nX21vdW50ZXJzX2hhc19wZXJtKGZpbGUsIGF2KTtcbitcdFx0aWYgKHJjKVxuK1x0XHRcdHJldHVybiByYztcbiBcdFx0cmMgPSBmaWxlX21hcF9wcm90X2NoZWNrKGZpbGUsIHByb3QsIHNoYXJlZCwgdHJ1ZSk7XG4gXHRcdGlmIChyYylcbiBcdFx0XHRyZXR1cm4gcmM7XG5AQCAtNzYzNSw2ICs3NzUwLDcgQEAgc3RhdGljIHN0cnVjdCBzZWN1cml0eV9ob29rX2xpc3Qgc2VsaW51eF9ob29rc1tdIF9fcm9fYWZ0ZXJfaW5pdCA9IHtcbiBcdExTTV9IT09LX0lOSVQoZmlsZV9wZXJtaXNzaW9uLCBzZWxpbnV4X2ZpbGVfcGVybWlzc2lvbiksXG4gXHRMU01fSE9PS19JTklUKGZpbGVfYWxsb2Nfc2VjdXJpdHksIHNlbGludXhfZmlsZV9hbGxvY19zZWN1cml0eSksXG4gXHRMU01fSE9PS19JTklUKGJhY2tpbmdfZmlsZV9hbGxvYywgc2VsaW51eF9iYWNraW5nX2ZpbGVfYWxsb2MpLFxuK1x0TFNNX0hPT0tfSU5JVChiYWNraW5nX2ZpbGVfZnJlZSwgc2VsaW51eF9iYWNraW5nX2ZpbGVfZnJlZSksXG4gXHRMU01fSE9PS19JTklUKGZpbGVfaW9jdGwsIHNlbGludXhfZmlsZV9pb2N0bCksXG4gXHRMU01fSE9PS19JTklUKGZpbGVfaW9jdGxfY29tcGF0LCBzZWxpbnV4X2ZpbGVfaW9jdGxfY29tcGF0KSxcbiBcdExTTV9IT09LX0lOSVQobW1hcF9maWxlLCBzZWxpbnV4X21tYXBfZmlsZSksXG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL29ianNlYy5oIGIvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL29ianNlYy5oXG5pbmRleCAzYzBhMTZlYzk3OGIwLi4yZjIxNTY4MjUxZmZlIDEwMDY0NFxuLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL29ianNlYy5oXG4rKysgYi9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvb2Jqc2VjLmhcbkBAIC04Niw4ICs4NiwxNiBAQCBzdHJ1Y3QgZmlsZV9zZWN1cml0eV9zdHJ1Y3Qge1xuIFx0dTMyIHBzZXFubzsgLyogUG9saWN5IHNlcW5vIGF0IHRoZSB0aW1lIG9mIGZpbGUgb3BlbiAqL1xuIH07XG4gXG4rc3RydWN0IGJhY2tpbmdfZmlsZV9zZWN1cml0eV9sYXllciB7XG4rXHRzdHJ1Y3QgcGF0aCBwYXRoOyAvKiB0aGlzIGxheWVyJ3MgcmVhbCBwYXRoICovXG4rXHR1MzIgbW91bnRlcl9zaWQ7IC8qIFNJRCBvZiB0aGUgbW91bnRlciB0aGF0IG9wZW5lZCBpdCAqL1xuK1x0dTMyIGZkX3NpZDsgLyogU0lEIG9mIGl0cyBvcGVuIGZpbGUgZGVzY3JpcHRpb24gKi9cbit9O1xuK1xuIHN0cnVjdCBiYWNraW5nX2ZpbGVfc2VjdXJpdHlfc3RydWN0IHtcbi1cdHUzMiB1Zl9zaWQ7IC8qIGFzc29jaWF0ZWQgdXNlciBmaWxlIGZzZWMtXHUwMDNlc2lkICovXG4rXHR1MzIgdWZfc2lkOyAvKiB0b3AtbGV2ZWwgdXNlciBmaWxlIGZzZWMtXHUwMDNlc2lkICovXG4rXHR1MzIgbGF5ZXJfY291bnQ7IC8qIG51bWJlciBvZiBpbnRlcm1lZGlhdGUgYmFja2luZyBmaWxlcyAqL1xuK1x0c3RydWN0IGJhY2tpbmdfZmlsZV9zZWN1cml0eV9sYXllciAqbGF5ZXJzO1xuIH07XG4gXG4gc3RydWN0IHN1cGVyYmxvY2tfc2VjdXJpdHlfc3RydWN0IHtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDIyOjIzOjI0LjY1MDA3MDgxNloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM1MzgwNDY4MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFRoaXMgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpczogaXMgdGhpcyBwYXRjaCBmdXp6YWJsZT8gV2hhdCBjb25maWd1cmF0aW9ucyBhcmUgKmVzc2VudGlhbCogdG8gcmVwcm9kdWNlIHRoZSBidWc/IEFuZCB3aGF0IGtleSBmdW5jdGlvbnMgYW5kIGRhdGEgc3RydWN0dXJlcyBzaG91bGQgSSB0YXJnZXQgYXMgZm9jdXMgc3ltYm9scyBmb3IgcmVwb3J0aW5nP1xuXG5BbHJpZ2h0LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGUgY29kZSBjaGFuZ2VzLiBBaCwgaXQncyB0b3VjaGluZyBgc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jYCBhbmQgYHNlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9vYmpzZWMuaGAuIEludGVyZXN0aW5nLiBJdCBzZWVtcyBsaWtlIHdlJ3JlIHVwZGF0aW5nIGhvdyBTRUxpbnV4IGludGVyYWN0cyB3aXRoIGJhY2tpbmcgZmlsZXMsIHRoaW5ncyBsaWtlIG92ZXJsYXlmcywgc3RhY2tlZCBmaWxlc3lzdGVtcywgYW5kIGVyb2ZzLlxuXG5Tbywgc3BlY2lmaWNhbGx5LCB0aGUgY2hhbmdlcyBhcmUgY2VudGVyZWQgYXJvdW5kIHRoZXNlIGZ1bmN0aW9uczogYGlub2RlX3NpZF9oYXNfcGVybWAsIGBpbm9kZV9oYXNfcGVybWAsIGBzZWxpbnV4X2ZpbGVfdXNlcl9zaWRgLCBgc2VsaW51eF9iYWNraW5nX2ZpbGVfYWxsb2NgLCBgc2VsaW51eF9iYWNraW5nX2ZpbGVfZnJlZWAsIGBmaWxlX21hcF9wcm90X3RvX2F2YCwgYGJhY2tpbmdfbW91bnRlcnNfaGFzX3Blcm1gLCBgc2VsaW51eF9maWxlX21wcm90ZWN0YCBhbmQgYWxzbyB0aGUgU0VMaW51eCBob29rcyBhcnJheTogIGEgbmV3IHJlZ2lzdHJhdGlvbiBvZiBgYmFja2luZ19maWxlX2ZyZWVgLlxuXG5Ob3csIGJlZm9yZSBJIHN0YXJ0IGNvbnN0cnVjdGluZyBhIGZ1enplciBvciBldmVuIHRoaW5raW5nIGFib3V0IGNvbmZpZyBvcHRpb25zLCBJIG5lZWQgdG8gZ2V0IGEgcmVhbGx5IHNvbGlkIGdyYXNwIG9uIHRoZSBzdXJyb3VuZGluZyBjb2RlLiAgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGJhY2tpbmcgZmlsZSBmdW5jdGlvbnMsIHRoZSBTRUxpbnV4IGltcGxlbWVudGF0aW9uLCBhbmQgaG93IHRoZSBob29rcyBhcmUgdXNlZC4gIFRpbWUgdG8gZmlyZSB1cCBncmVwcGVyIG9yIGp1c3QgY2FyZWZ1bGx5IHJlYWQgdGhyb3VnaCB0aGUgZmlsZSB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBsb2dpYyBhbmQgaG93IHRoZXNlIHBpZWNlcyBmaXQgdG9nZXRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwMzAsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQyMjoyMzoyOC4xODgxMjM3OTJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA0OTA0MTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlNFQ1VSSVRZX1NFTElOVVhcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwic2VjdXJpdHkvc2VsaW51eFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJzZWN1cml0eS9zZWxpbnV4L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWc6Mjpjb25maWcgU0VDVVJJVFlfU0VMSU5VWFxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy0zLVxcdGJvb2wgXFxcIlNFTGludXggU3VwcG9ydFxcXCJcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy0xMS1cXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWc6MTI6Y29uZmlnIFNFQ1VSSVRZX1NFTElOVVhfQk9PVFBBUkFNXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTEzLVxcdGJvb2wgXFxcIlNFTGludXggYm9vdCBwYXJhbWV0ZXJcXFwiXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnOjE0OlxcdGRlcGVuZHMgb24gU0VDVVJJVFlfU0VMSU5VWFxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy0xNS1cXHRkZWZhdWx0IG5cXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy0yNS1cXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWc6MjY6Y29uZmlnIFNFQ1VSSVRZX1NFTElOVVhfREVWRUxPUFxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy0yNy1cXHRib29sIFxcXCJTRUxpbnV4IERldmVsb3BtZW50IFN1cHBvcnRcXFwiXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnOjI4OlxcdGRlcGVuZHMgb24gU0VDVVJJVFlfU0VMSU5VWFxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy0yOS1cXHRkZWZhdWx0IHlcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy0zOS1cXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWc6NDA6Y29uZmlnIFNFQ1VSSVRZX1NFTElOVVhfQVZDX1NUQVRTXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTQxLVxcdGJvb2wgXFxcIlNFTGludXggQVZDIFN0YXRpc3RpY3NcXFwiXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnOjQyOlxcdGRlcGVuZHMgb24gU0VDVVJJVFlfU0VMSU5VWFxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy00My1cXHRkZWZhdWx0IHlcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy00OC1cXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWc6NDk6Y29uZmlnIFNFQ1VSSVRZX1NFTElOVVhfU0lEVEFCX0hBU0hfQklUU1xcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy01MC1cXHRpbnQgXFxcIlNFTGludXggc2lkdGFiIGhhc2h0YWJsZSBzaXplXFxcIlxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzo1MTpcXHRkZXBlbmRzIG9uIFNFQ1VSSVRZX1NFTElOVVhcXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctNTItXFx0cmFuZ2UgOCAxM1xcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTU1LVxcdCAgVGhpcyBvcHRpb24gc2V0cyB0aGUgbnVtYmVyIG9mIGJ1Y2tldHMgdXNlZCBpbiB0aGUgc2lkdGFiIGhhc2h0YWJsZVxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzo1NjpcXHQgIHRvIDJeU0VDVVJJVFlfU0VMSU5VWF9TSURUQUJfSEFTSF9CSVRTIGJ1Y2tldHMuIFRoZSBudW1iZXIgb2YgaGFzaFxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy01Ny1cXHQgIGNvbGxpc2lvbnMgbWF5IGJlIHZpZXdlZCBhdCAvc3lzL2ZzL3NlbGludXgvc3Mvc2lkdGFiX2hhc2hfc3RhdHMuIElmXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctNjAtXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnOjYxOmNvbmZpZyBTRUNVUklUWV9TRUxJTlVYX1NJRDJTVFJfQ0FDSEVfU0laRVxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy02Mi1cXHRpbnQgXFxcIlNFTGludXggU0lEIHRvIGNvbnRleHQgc3RyaW5nIHRyYW5zbGF0aW9uIGNhY2hlIHNpemVcXFwiXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnOjYzOlxcdGRlcGVuZHMgb24gU0VDVVJJVFlfU0VMSU5VWFxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy02NC1cXHRkZWZhdWx0IDI1Nlxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTcxLVxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzo3Mjpjb25maWcgU0VDVVJJVFlfU0VMSU5VWF9BVkNfSEFTSF9CSVRTXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTczLVxcdGludCBcXFwiU0VMaW51eCBhdmMgaGFzaHRhYmxlIHNpemVcXFwiXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnOjc0OlxcdGRlcGVuZHMgb24gU0VDVVJJVFlfU0VMSU5VWFxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy03NS1cXHRyYW5nZSA5IDE0XFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctNzgtXFx0ICBUaGlzIG9wdGlvbiBzZXRzIHRoZSBudW1iZXIgb2YgYnVja2V0cyB1c2VkIGluIHRoZSBBVkMgaGFzaCB0YWJsZVxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzo3OTpcXHQgIHRvIDJeU0VDVVJJVFlfU0VMSU5VWF9BVkNfSEFTSF9CSVRTLiBBIGhpZ2hlciB2YWx1ZSBoZWxwcyBtYWludGFpblxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy04MC1cXHQgIHNob3J0ZXIgY2hhaW4gbGVuZ3RocyBlc3BlY2lhbGx5IHdoZW4gZXhwYW5kaW5nIEFWQyBub2RlcyB2aWFcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy04Mi1cXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWc6ODM6Y29uZmlnIFNFQ1VSSVRZX1NFTElOVVhfREVCVUdcXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctODQtXFx0Ym9vbCBcXFwiU0VMaW51eCBrZXJuZWwgZGVidWdnaW5nIHN1cHBvcnRcXFwiXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnOjg1OlxcdGRlcGVuZHMgb24gU0VDVVJJVFlfU0VMSU5VWFxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy04Ni1cXHRkZWZhdWx0IG5cXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvTWFrZWZpbGUtMTAtXFxuc2VjdXJpdHkvc2VsaW51eC9NYWtlZmlsZToxMTpvYmotJChDT05GSUdfU0VDVVJJVFlfU0VMSU5VWCkgOj0gc2VsaW51eC5vXFxuc2VjdXJpdHkvc2VsaW51eC9NYWtlZmlsZS0xMi1cXG5zZWN1cml0eS9zZWxpbnV4L01ha2VmaWxlPTEzPWNjZmxhZ3MteSA6PSAtSSQoc3JjdHJlZSkvc2VjdXJpdHkvc2VsaW51eCAtSSQoc3JjdHJlZSkvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlXFxuc2VjdXJpdHkvc2VsaW51eC9NYWtlZmlsZS0xNC1cXG5zZWN1cml0eS9zZWxpbnV4L01ha2VmaWxlOjE1OmNjZmxhZ3MtJChDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9ERUJVRykgKz0gLURERUJVR1xcbnNlY3VyaXR5L3NlbGludXgvTWFrZWZpbGUtMTYtXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2F2Yy5jLTM3LVxcbnNlY3VyaXR5L3NlbGludXgvYXZjLmM6Mzg6I2RlZmluZSBBVkNfQ0FDSEVfU0xPVFNcXHRcXHQoMSBcXHUwMDNjXFx1MDAzYyBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9BVkNfSEFTSF9CSVRTKVxcbnNlY3VyaXR5L3NlbGludXgvYXZjLmMtMzktI2RlZmluZSBBVkNfREVGX0NBQ0hFX1RIUkVTSE9MRFxcdEFWQ19DQUNIRV9TTE9UU1xcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9hdmMuYy00MS1cXG5zZWN1cml0eS9zZWxpbnV4L2F2Yy5jOjQyOiNpZmRlZiBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9BVkNfU1RBVFNcXG5zZWN1cml0eS9zZWxpbnV4L2F2Yy5jLTQzLSNkZWZpbmUgYXZjX2NhY2hlX3N0YXRzX2luY3IoZmllbGQpXFx0dGhpc19jcHVfaW5jKGF2Y19jYWNoZV9zdGF0cy5maWVsZClcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvYXZjLmM9ODA9c3RydWN0IGF2Y19jYWxsYmFja19ub2RlIHtcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvYXZjLmMtODUtXFxuc2VjdXJpdHkvc2VsaW51eC9hdmMuYzo4NjojaWZkZWYgQ09ORklHX1NFQ1VSSVRZX1NFTElOVVhfQVZDX1NUQVRTXFxuc2VjdXJpdHkvc2VsaW51eC9hdmMuYy04Ny1ERUZJTkVfUEVSX0NQVShzdHJ1Y3QgYXZjX2NhY2hlX3N0YXRzLCBhdmNfY2FjaGVfc3RhdHMpID0geyAwIH07XFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9MTE3PXN0YXRpYyBhdG9taWNfdCBzZWxpbnV4X3NlY21hcmtfcmVmY291bnQgPSBBVE9NSUNfSU5JVCgwKTtcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMTE4LVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzoxMTk6I2lmZGVmIENPTkZJR19TRUNVUklUWV9TRUxJTlVYX0RFVkVMT1BcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMTIwLXN0YXRpYyBpbnQgc2VsaW51eF9lbmZvcmNpbmdfYm9vdCBfX2luaXRkYXRhO1xcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTEzND1pbnQgc2VsaW51eF9lbmFibGVkX2Jvb3QgX19pbml0ZGF0YSA9IDE7XFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjEzNTojaWZkZWYgQ09ORklHX1NFQ1VSSVRZX1NFTElOVVhfQk9PVFBBUkFNXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTEzNi1zdGF0aWMgaW50IF9faW5pdCBzZWxpbnV4X2VuYWJsZWRfc2V0dXAoY2hhciAqc3RyKVxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2Yy5oPTE2Nj12b2lkIGF2Y19zZXRfY2FjaGVfdGhyZXNob2xkKHVuc2lnbmVkIGludCBjYWNoZV90aHJlc2hvbGQpO1xcbnNlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdmMuaC0xNjctXFxuc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2Yy5oOjE2ODojaWZkZWYgQ09ORklHX1NFQ1VSSVRZX1NFTElOVVhfQVZDX1NUQVRTXFxuc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2Yy5oLTE2OS1ERUNMQVJFX1BFUl9DUFUoc3RydWN0IGF2Y19jYWNoZV9zdGF0cywgYXZjX2NhY2hlX3N0YXRzKTtcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9zZWN1cml0eS5oPTk0PXN0cnVjdCBzZWxpbnV4X3N0YXRlIHtcXG5zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvc2VjdXJpdHkuaDo5NTojaWZkZWYgQ09ORklHX1NFQ1VSSVRZX1NFTElOVVhfREVWRUxPUFxcbnNlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9zZWN1cml0eS5oLTk2LVxcdGJvb2wgZW5mb3JjaW5nO1xcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL3NlY3VyaXR5Lmg9MTE4PXN0YXRpYyBpbmxpbmUgdm9pZCBzZWxpbnV4X21hcmtfaW5pdGlhbGl6ZWQodm9pZClcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9zZWN1cml0eS5oLTEyMy1cXG5zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvc2VjdXJpdHkuaDoxMjQ6I2lmZGVmIENPTkZJR19TRUNVUklUWV9TRUxJTlVYX0RFVkVMT1BcXG5zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvc2VjdXJpdHkuaC0xMjUtc3RhdGljIGlubGluZSBib29sIGVuZm9yY2luZ19lbmFibGVkKHZvaWQpXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L3NlbGludXhmcy5jPTEyMD1zdGF0aWMgc3NpemVfdCBzZWxfcmVhZF9lbmZvcmNlKHN0cnVjdCBmaWxlICpmaWxwLCBjaGFyIF9fdXNlciAqYnVmLFxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9zZWxpbnV4ZnMuYy0xMzAtXFxuc2VjdXJpdHkvc2VsaW51eC9zZWxpbnV4ZnMuYzoxMzE6I2lmZGVmIENPTkZJR19TRUNVUklUWV9TRUxJTlVYX0RFVkVMT1BcXG5zZWN1cml0eS9zZWxpbnV4L3NlbGludXhmcy5jLTEzMi1zdGF0aWMgc3NpemVfdCBzZWxfd3JpdGVfZW5mb3JjZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZixcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvc2VsaW51eGZzLmM9MTM5Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzZWxfYXZjX2hhc2hfc3RhdHNfb3BzID0ge1xcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9zZWxpbnV4ZnMuYy0xMzk2LVxcbnNlY3VyaXR5L3NlbGludXgvc2VsaW51eGZzLmM6MTM5NzojaWZkZWYgQ09ORklHX1NFQ1VSSVRZX1NFTElOVVhfQVZDX1NUQVRTXFxuc2VjdXJpdHkvc2VsaW51eC9zZWxpbnV4ZnMuYy0xMzk4LXN0YXRpYyBzdHJ1Y3QgYXZjX2NhY2hlX3N0YXRzICpzZWxfYXZjX2dldF9zdGF0X2lkeChsb2ZmX3QgKmlkeClcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvc2VsaW51eGZzLmM9MTQ2OD1zdGF0aWMgaW50IHNlbF9tYWtlX2F2Y19maWxlcyhzdHJ1Y3QgZGVudHJ5ICpkaXIpXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L3NlbGludXhmcy5jLTE0NzctXFx0XFx0eyBcXFwiaGFzaF9zdGF0c1xcXCIsIFxcdTAwMjZzZWxfYXZjX2hhc2hfc3RhdHNfb3BzLCBTX0lSVUdPIH0sXFxuc2VjdXJpdHkvc2VsaW51eC9zZWxpbnV4ZnMuYzoxNDc4OiNpZmRlZiBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9BVkNfU1RBVFNcXG5zZWN1cml0eS9zZWxpbnV4L3NlbGludXhmcy5jLTE0NzktXFx0XFx0eyBcXFwiY2FjaGVfc3RhdHNcXFwiLCBcXHUwMDI2c2VsX2F2Y19jYWNoZV9zdGF0c19vcHMsIFNfSVJVR08gfSxcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvc3MvYXZ0YWIuYz0yNTM9aW50IGF2dGFiX2FsbG9jX2R1cChzdHJ1Y3QgYXZ0YWIgKm5ldywgY29uc3Qgc3RydWN0IGF2dGFiICpvcmlnKVxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9zcy9hdnRhYi5jLTI1Ny1cXG5zZWN1cml0eS9zZWxpbnV4L3NzL2F2dGFiLmM6MjU4OiNpZmRlZiBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9ERUJVR1xcbnNlY3VyaXR5L3NlbGludXgvc3MvYXZ0YWIuYy0yNTktdm9pZCBhdnRhYl9oYXNoX2V2YWwoc3RydWN0IGF2dGFiICpoLCBjb25zdCBjaGFyICp0YWcpXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L3NzL2F2dGFiLmMtMjg5LX1cXG5zZWN1cml0eS9zZWxpbnV4L3NzL2F2dGFiLmM6MjkwOiNlbmRpZiAvKiBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9ERUJVRyAqL1xcbnNlY3VyaXR5L3NlbGludXgvc3MvYXZ0YWIuYy0yOTEtXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L3NzL2F2dGFiLmg9MTA3PXZvaWQgYXZ0YWJfZGVzdHJveShzdHJ1Y3QgYXZ0YWIgKmgpO1xcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9zcy9hdnRhYi5oLTExMS1cXG5zZWN1cml0eS9zZWxpbnV4L3NzL2F2dGFiLmg6MTEyOiNpZmRlZiBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9ERUJVR1xcbnNlY3VyaXR5L3NlbGludXgvc3MvYXZ0YWIuaC0xMTMtdm9pZCBhdnRhYl9oYXNoX2V2YWwoc3RydWN0IGF2dGFiICpoLCBjb25zdCBjaGFyICp0YWcpO1xcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9zcy9oYXNodGFiLmM9ODg9aW50IGhhc2h0YWJfbWFwKHN0cnVjdCBoYXNodGFiICpoLCBpbnQgKCphcHBseSkodm9pZCAqaywgdm9pZCAqZCwgdm9pZCAqYXJncyksXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L3NzL2hhc2h0YWIuYy0xMDYtXFxuc2VjdXJpdHkvc2VsaW51eC9zcy9oYXNodGFiLmM6MTA3OiNpZmRlZiBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9ERUJVR1xcbnNlY3VyaXR5L3NlbGludXgvc3MvaGFzaHRhYi5jLTEwOC12b2lkIGhhc2h0YWJfc3RhdChzdHJ1Y3QgaGFzaHRhYiAqaCwgc3RydWN0IGhhc2h0YWJfaW5mbyAqaW5mbylcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvc3MvaGFzaHRhYi5jLTEzNy19XFxuc2VjdXJpdHkvc2VsaW51eC9zcy9oYXNodGFiLmM6MTM4OiNlbmRpZiAvKiBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9ERUJVRyAqL1xcbnNlY3VyaXR5L3NlbGludXgvc3MvaGFzaHRhYi5jLTEzOS1cXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvc3MvaGFzaHRhYi5oPTEzOT1pbnQgaGFzaHRhYl9kdXBsaWNhdGUoc3RydWN0IGhhc2h0YWIgKm5ldywgY29uc3Qgc3RydWN0IGhhc2h0YWIgKm9yaWcsXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L3NzL2hhc2h0YWIuaC0xNDMtXFxuc2VjdXJpdHkvc2VsaW51eC9zcy9oYXNodGFiLmg6MTQ0OiNpZmRlZiBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9ERUJVR1xcbnNlY3VyaXR5L3NlbGludXgvc3MvaGFzaHRhYi5oLTE0NS0vKiBGaWxsIGluZm8gd2l0aCBzb21lIGhhc2ggdGFibGUgc3RhdGlzdGljcyAqL1xcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9zcy9wb2xpY3lkYi5jLTQwLVxcbnNlY3VyaXR5L3NlbGludXgvc3MvcG9saWN5ZGIuYzo0MTojaWZkZWYgQ09ORklHX1NFQ1VSSVRZX1NFTElOVVhfREVCVUdcXG5zZWN1cml0eS9zZWxpbnV4L3NzL3BvbGljeWRiLmMtNDItLyogY2xhbmctZm9ybWF0IG9mZiAqL1xcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9zcy9wb2xpY3lkYi5jPTY5MT1zdGF0aWMgaW50ICgqY29uc3QgaW5kZXhfZltTWU1fTlVNXSkodm9pZCAqa2V5LCB2b2lkICpkYXR1bSwgdm9pZCAqZGF0YXApID0ge1xcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9zcy9wb2xpY3lkYi5jLTcwMi1cXG5zZWN1cml0eS9zZWxpbnV4L3NzL3BvbGljeWRiLmM6NzAzOiNpZmRlZiBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9ERUJVR1xcbnNlY3VyaXR5L3NlbGludXgvc3MvcG9saWN5ZGIuYy03MDQtc3RhdGljIHZvaWQgaGFzaF9ldmFsKHN0cnVjdCBoYXNodGFiICpoLCBjb25zdCBjaGFyICpoYXNoX25hbWUsXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L3NzL3BvbGljeWRiLmM9NzMwPXN0YXRpYyBpbmxpbmUgdm9pZCBzeW10YWJfaGFzaF9ldmFsKHN0cnVjdCBzeW10YWIgKnMpXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L3NzL3BvbGljeWRiLmMtNzMyLX1cXG5zZWN1cml0eS9zZWxpbnV4L3NzL3BvbGljeWRiLmM6NzMzOiNlbmRpZiAvKiBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9ERUJVRyAqL1xcbnNlY3VyaXR5L3NlbGludXgvc3MvcG9saWN5ZGIuYy03MzQtXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L3NzL3NpZHRhYi5jPTM1PWludCBzaWR0YWJfaW5pdChzdHJ1Y3Qgc2lkdGFiICpzKVxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9zcy9zaWR0YWIuYy01MC1cXG5zZWN1cml0eS9zZWxpbnV4L3NzL3NpZHRhYi5jOjUxOiNpZiBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9TSUQyU1RSX0NBQ0hFX1NJWkUgXFx1MDAzZSAwXFxuc2VjdXJpdHkvc2VsaW51eC9zcy9zaWR0YWIuYzo1MjpcXHRzLVxcdTAwM2VjYWNoZV9mcmVlX3Nsb3RzID0gQ09ORklHX1NFQ1VSSVRZX1NFTElOVVhfU0lEMlNUUl9DQUNIRV9TSVpFO1xcbnNlY3VyaXR5L3NlbGludXgvc3Mvc2lkdGFiLmMtNTMtXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnMtXFx1MDAzZWNhY2hlX2xydV9saXN0KTtcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvc3Mvc2lkdGFiLmM9Nzg9aW50IHNpZHRhYl9zZXRfaW5pdGlhbChzdHJ1Y3Qgc2lkdGFiICpzLCB1MzIgc2lkLCBzdHJ1Y3QgY29udGV4dCAqY29udGV4dClcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvc3Mvc2lkdGFiLmMtOTItXFxuc2VjdXJpdHkvc2VsaW51eC9zcy9zaWR0YWIuYzo5MzojaWYgQ09ORklHX1NFQ1VSSVRZX1NFTElOVVhfU0lEMlNUUl9DQUNIRV9TSVpFIFxcdTAwM2UgMFxcbnNlY3VyaXR5L3NlbGludXgvc3Mvc2lkdGFiLmMtOTQtXFx0aXNpZC1cXHUwMDNlZW50cnkuY2FjaGUgPSBOVUxMO1xcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9zcy9zaWR0YWIuYz01MDg9c3RhdGljIHZvaWQgc2lkdGFiX2Rlc3Ryb3lfZW50cnkoc3RydWN0IHNpZHRhYl9lbnRyeSAqZW50cnkpXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L3NzL3NpZHRhYi5jLTUxMC1cXHRjb250ZXh0X2Rlc3Ryb3koXFx1MDAyNmVudHJ5LVxcdTAwM2Vjb250ZXh0KTtcXG5zZWN1cml0eS9zZWxpbnV4L3NzL3NpZHRhYi5jOjUxMTojaWYgQ09ORklHX1NFQ1VSSVRZX1NFTElOVVhfU0lEMlNUUl9DQUNIRV9TSVpFIFxcdTAwM2UgMFxcbnNlY3VyaXR5L3NlbGludXgvc3Mvc2lkdGFiLmMtNTEyLVxcdGtmcmVlKHJjdV9kZXJlZmVyZW5jZV9yYXcoZW50cnktXFx1MDAzZWNhY2hlKSk7XFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L3NzL3NpZHRhYi5jPTU0MT12b2lkIHNpZHRhYl9kZXN0cm95KHN0cnVjdCBzaWR0YWIgKnMpXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L3NzL3NpZHRhYi5jLTU2MC1cXG5zZWN1cml0eS9zZWxpbnV4L3NzL3NpZHRhYi5jOjU2MTojaWYgQ09ORklHX1NFQ1VSSVRZX1NFTElOVVhfU0lEMlNUUl9DQUNIRV9TSVpFIFxcdTAwM2UgMFxcbnNlY3VyaXR5L3NlbGludXgvc3Mvc2lkdGFiLmMtNTYyLVxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9zcy9zaWR0YWIuYz02MDg9aW50IHNpZHRhYl9zaWQyc3RyX2dldChzdHJ1Y3Qgc2lkdGFiICpzLCBzdHJ1Y3Qgc2lkdGFiX2VudHJ5ICplbnRyeSwgY2hhciAqKm91dCxcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvc3Mvc2lkdGFiLmMtNjM3LVxcbnNlY3VyaXR5L3NlbGludXgvc3Mvc2lkdGFiLmM6NjM4OiNlbmRpZiAvKiBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9TSUQyU1RSX0NBQ0hFX1NJWkUgXFx1MDAzZSAwICovXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L3NzL3NpZHRhYi5oPTIxPXN0cnVjdCBzaWR0YWJfZW50cnkge1xcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9zcy9zaWR0YWIuaC0yNC1cXHRzdHJ1Y3QgY29udGV4dCBjb250ZXh0O1xcbnNlY3VyaXR5L3NlbGludXgvc3Mvc2lkdGFiLmg6MjU6I2lmIENPTkZJR19TRUNVUklUWV9TRUxJTlVYX1NJRDJTVFJfQ0FDSEVfU0laRSBcXHUwMDNlIDBcXG5zZWN1cml0eS9zZWxpbnV4L3NzL3NpZHRhYi5oLTI2LVxcdHN0cnVjdCBzaWR0YWJfc3RyX2NhY2hlIF9fcmN1ICpjYWNoZTtcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvc3Mvc2lkdGFiLmg9Njk9c3RydWN0IHNpZHRhYl9jb252ZXJ0X3BhcmFtcyB7XFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L3NzL3NpZHRhYi5oLTczLVxcbnNlY3VyaXR5L3NlbGludXgvc3Mvc2lkdGFiLmg6NzQ6I2RlZmluZSBTSURUQUJfSEFTSF9CSVRTICAgIENPTkZJR19TRUNVUklUWV9TRUxJTlVYX1NJRFRBQl9IQVNIX0JJVFNcXG5zZWN1cml0eS9zZWxpbnV4L3NzL3NpZHRhYi5oLTc1LSNkZWZpbmUgU0lEVEFCX0hBU0hfQlVDS0VUUyAoMSBcXHUwMDNjXFx1MDAzYyBTSURUQUJfSEFTSF9CSVRTKVxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9zcy9zaWR0YWIuaD03Nz1zdHJ1Y3Qgc2lkdGFiIHtcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvc3Mvc2lkdGFiLmgtOTItXFxuc2VjdXJpdHkvc2VsaW51eC9zcy9zaWR0YWIuaDo5MzojaWYgQ09ORklHX1NFQ1VSSVRZX1NFTElOVVhfU0lEMlNUUl9DQUNIRV9TSVpFIFxcdTAwM2UgMFxcbnNlY3VyaXR5L3NlbGludXgvc3Mvc2lkdGFiLmgtOTQtXFx0LyogU0lEIC1cXHUwMDNlIGNvbnRleHQgc3RyaW5nIGNhY2hlICovXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L3NzL3NpZHRhYi5oPTEzOT1pbnQgc2lkdGFiX2hhc2hfc3RhdHMoc3RydWN0IHNpZHRhYiAqc2lkdGFiLCBjaGFyICpwYWdlKTtcXG5zZWN1cml0eS9zZWxpbnV4L3NzL3NpZHRhYi5oLTE0MC1cXG5zZWN1cml0eS9zZWxpbnV4L3NzL3NpZHRhYi5oOjE0MTojaWYgQ09ORklHX1NFQ1VSSVRZX1NFTElOVVhfU0lEMlNUUl9DQUNIRV9TSVpFIFxcdTAwM2UgMFxcbnNlY3VyaXR5L3NlbGludXgvc3Mvc2lkdGFiLmgtMTQyLXZvaWQgc2lkdGFiX3NpZDJzdHJfcHV0KHN0cnVjdCBzaWR0YWIgKnMsIHN0cnVjdCBzaWR0YWJfZW50cnkgKmVudHJ5LFxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9zcy9zaWR0YWIuaD0xNTI9c3RhdGljIGlubGluZSBpbnQgc2lkdGFiX3NpZDJzdHJfZ2V0KHN0cnVjdCBzaWR0YWIgKnMsXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L3NzL3NpZHRhYi5oLTE1Ny19XFxuc2VjdXJpdHkvc2VsaW51eC9zcy9zaWR0YWIuaDoxNTg6I2VuZGlmIC8qIENPTkZJR19TRUNVUklUWV9TRUxJTlVYX1NJRDJTVFJfQ0FDSEVfU0laRSBcXHUwMDNlIDAgKi9cXG5zZWN1cml0eS9zZWxpbnV4L3NzL3NpZHRhYi5oLTE1OS1cXG4tLVxcbnNlY3VyaXR5L3NlbGludXgveGZybS5jLTI0LSAqXFx0Q09ORklHX1NFQ1VSSVRZX05FVFdPUktfWEZSTT15XFxuc2VjdXJpdHkvc2VsaW51eC94ZnJtLmM6MjU6ICpcXHRDT05GSUdfU0VDVVJJVFlfU0VMSU5VWD1tL3lcXG5zZWN1cml0eS9zZWxpbnV4L3hmcm0uYy0yNi0gKiBJU1NVRVM6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDIyOjIzOjI4LjI5MzAzMjUxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzc2ODUwMzI5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBTRUxpbnV4IGlzIGNvbmZpZ3VyZWQgd2l0aGluIHRoaXMga2VybmVsIGJ1aWxkLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBLY29uZmlnIGZpbGVzLCB0aGUgY29yZSBjb25maWd1cmF0aW9uIG1lY2hhbmlzbXMuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIEknbGwgc3RhcnQgd2l0aCB0aGUgZ2VuZXJhbCBgc2VjdXJpdHkvS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHdoZXJlIEknZCBleHBlY3QgdG8gZmluZCB0aGUgdG9wLWxldmVsIG9wdGlvbnMgcmVsYXRlZCB0byBzZWN1cml0eSBmZWF0dXJlcy5cblxuKipTRUxpbnV4IENvbmZpZ3VyYXRpb24gSW52ZXN0aWdhdGlvbioqXG5cbkFscmlnaHQsIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSdtIGdvaW5nIHRvIGNoZWNrIHRob3NlIGBLY29uZmlnYCBmaWxlcy4gSSdsbCBuZWVkIHRvIGxvb2sgaW4gYm90aCB0aGUgdG9wLWxldmVsIGBzZWN1cml0eS9LY29uZmlnYCBhbmQgdGhlbiBhbHNvIHRoZSBtb3JlIHNwZWNpZmljIGBzZWN1cml0eS9zZWxpbnV4L0tjb25maWdgIHRvIHNlZSBob3cgU0VMaW51eCBpcyBzZXQgdXAuIFRoZXkgbWlnaHQgYmUgc2VwYXJhdGUgZmlsZXMgZm9yIG1vcmUgY2xhcml0eSwgb3IgdGhleSBtaWdodCBiZSBvbmUgYW5kIHRoZSBzYW1lIGZpbGUuIEluIGFueSBjYXNlLCBJIGtub3cgSSdsbCBmaW5kIHRoZSByZWxldmFudCBvcHRpb25zIHRoZXJlLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4gSSdsbCBzdGFydCB3aXRoIGBzZWN1cml0eS9LY29uZmlnYCwgdGhhdCdzIHVzdWFsbHkgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMjA5LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMjI6MjM6MzIuMDYxNTQ1MDMzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU3NzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcInNlY3VyaXR5L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIFNlY3VyaXR5IGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0bWVudSBcXFwiU2VjdXJpdHkgb3B0aW9uc1xcXCJcXG4gICA3OlxcdFxcbiAgIDg6XFx0c291cmNlIFxcXCJzZWN1cml0eS9rZXlzL0tjb25maWdcXFwiXFxuICAgOTpcXHRcXG4gIDEwOlxcdGNvbmZpZyBTRUNVUklUWV9ETUVTR19SRVNUUklDVFxcbiAgMTE6XFx0XFx0Ym9vbCBcXFwiUmVzdHJpY3QgdW5wcml2aWxlZ2VkIGFjY2VzcyB0byB0aGUga2VybmVsIHN5c2xvZ1xcXCJcXG4gIDEyOlxcdFxcdGRlZmF1bHQgblxcbiAgMTM6XFx0XFx0aGVscFxcbiAgMTQ6XFx0XFx0ICBUaGlzIGVuZm9yY2VzIHJlc3RyaWN0aW9ucyBvbiB1bnByaXZpbGVnZWQgdXNlcnMgcmVhZGluZyB0aGUga2VybmVsXFxuICAxNTpcXHRcXHQgIHN5c2xvZyB2aWEgZG1lc2coOCkuXFxuICAxNjpcXHRcXG4gIDE3OlxcdFxcdCAgSWYgdGhpcyBvcHRpb24gaXMgbm90IHNlbGVjdGVkLCBubyByZXN0cmljdGlvbnMgd2lsbCBiZSBlbmZvcmNlZFxcbiAgMTg6XFx0XFx0ICB1bmxlc3MgdGhlIGRtZXNnX3Jlc3RyaWN0IHN5c2N0bCBpcyBleHBsaWNpdGx5IHNldCB0byAoMSkuXFxuICAxOTpcXHRcXG4gIDIwOlxcdFxcdCAgSWYgeW91IGFyZSB1bnN1cmUgaG93IHRvIGFuc3dlciB0aGlzIHF1ZXN0aW9uLCBhbnN3ZXIgTi5cXG4gIDIxOlxcdFxcbiAgMjI6XFx0Y2hvaWNlXFxuICAyMzpcXHRcXHRwcm9tcHQgXFxcIkFsbG93IC9wcm9jL3BpZC9tZW0gYWNjZXNzIG92ZXJyaWRlXFxcIlxcbiAgMjQ6XFx0XFx0ZGVmYXVsdCBQUk9DX01FTV9GT1JDRV9QVFJBQ0VcXG4gIDI1OlxcdFxcdGhlbHBcXG4gIDI2OlxcdFxcdCAgVHJhZGl0aW9uYWxseSAvcHJvYy9waWQvbWVtIGFsbG93cyB1c2VycyB0byBvdmVycmlkZSBtZW1vcnlcXG4gIDI3OlxcdFxcdCAgcGVybWlzc2lvbnMgZm9yIHVzZXJzIGxpa2UgcHRyYWNlLCBhc3N1bWluZyB0aGV5IGhhdmUgcHRyYWNlXFxuICAyODpcXHRcXHQgIGNhcGFiaWxpdHkuXFxuICAyOTpcXHRcXG4gIDMwOlxcdFxcdCAgVGhpcyBhbGxvd3MgcGVvcGxlIHRvIGxpbWl0IHRoYXQgLSBlaXRoZXIgbmV2ZXIgb3ZlcnJpZGUsIG9yXFxuICAzMTpcXHRcXHQgIHJlcXVpcmUgYWN0dWFsIGFjdGl2ZSBwdHJhY2UgYXR0YWNobWVudCAoZGVmYXVsdCkuXFxuICAzMjpcXHRcXG4gIDMzOlxcdGNvbmZpZyBQUk9DX01FTV9BTFdBWVNfRk9SQ0VcXG4gIDM0OlxcdFxcdGJvb2wgXFxcIlRyYWRpdGlvbmFsIC9wcm9jL3BpZC9tZW0gYmVoYXZpb3JcXFwiXFxuICAzNTpcXHRcXHRoZWxwXFxuICAzNjpcXHRcXHQgIFRoaXMgYWxsb3dzIC9wcm9jL3BpZC9tZW0gYWNjZXNzZXMgdG8gb3ZlcnJpZGUgbWVtb3J5IG1hcHBpbmdcXG4gIDM3OlxcdFxcdCAgcGVybWlzc2lvbnMgaWYgeW91IGhhdmUgcHRyYWNlIGFjY2VzcyByaWdodHMuXFxuICAzODpcXHRcXG4gIDM5OlxcdGNvbmZpZyBQUk9DX01FTV9GT1JDRV9QVFJBQ0VcXG4gIDQwOlxcdFxcdGJvb2wgXFxcIlJlcXVpcmUgYWN0aXZlIHB0cmFjZSgpIHVzZSBmb3IgYWNjZXNzIG92ZXJyaWRlXFxcIlxcbiAgNDE6XFx0XFx0aGVscFxcbiAgNDI6XFx0XFx0ICBUaGlzIGFsbG93cyAvcHJvYy9waWQvbWVtIGFjY2Vzc2VzIHRvIG92ZXJyaWRlIG1lbW9yeSBtYXBwaW5nXFxuICA0MzpcXHRcXHQgIHBlcm1pc3Npb25zIGZvciBhY3RpdmUgcHRyYWNlcnMgbGlrZSBnZGIuXFxuICA0NDpcXHRcXG4gIDQ1OlxcdGNvbmZpZyBQUk9DX01FTV9OT19GT1JDRVxcbiAgNDY6XFx0XFx0Ym9vbCBcXFwiTmV2ZXJcXFwiXFxuICA0NzpcXHRcXHRoZWxwXFxuICA0ODpcXHRcXHQgIE5ldmVyIG92ZXJyaWRlIG1lbW9yeSBtYXBwaW5nIHBlcm1pc3Npb25zXFxuICA0OTpcXHRcXG4gIDUwOlxcdGVuZGNob2ljZVxcbiAgNTE6XFx0XFxuICA1MjpcXHRjb25maWcgTVNFQUxfU1lTVEVNX01BUFBJTkdTXFxuICA1MzpcXHRcXHRib29sIFxcXCJtc2VhbCBzeXN0ZW0gbWFwcGluZ3NcXFwiXFxuICA1NDpcXHRcXHRkZXBlbmRzIG9uIDY0QklUXFxuICA1NTpcXHRcXHRkZXBlbmRzIG9uIEFSQ0hfU1VQUE9SVFNfTVNFQUxfU1lTVEVNX01BUFBJTkdTXFxuICA1NjpcXHRcXHRkZXBlbmRzIG9uICFDSEVDS1BPSU5UX1JFU1RPUkVcXG4gIDU3OlxcdFxcdGhlbHBcXG4gIDU4OlxcdFxcdCAgQXBwbHkgbXNlYWwgb24gc3lzdGVtIG1hcHBpbmdzLlxcbiAgNTk6XFx0XFx0ICBUaGUgc3lzdGVtIG1hcHBpbmdzIGluY2x1ZGVzIHZkc28sIHZ2YXIsIHZ2YXJfdmNsb2NrLFxcbiAgNjA6XFx0XFx0ICB2ZWN0b3JzIChhcm0gY29tcGF0LW1vZGUpLCBzaWdwYWdlIChhcm0gY29tcGF0LW1vZGUpLCB1cHJvYmVzLlxcbiAgNjE6XFx0XFxuICA2MjpcXHRcXHQgIEEgNjQtYml0IGtlcm5lbCBpcyByZXF1aXJlZCBmb3IgdGhlIG1lbW9yeSBzZWFsaW5nIGZlYXR1cmUuXFxuICA2MzpcXHRcXHQgIE5vIHNwZWNpZmljIGhhcmR3YXJlIGZlYXR1cmVzIGZyb20gdGhlIENQVSBhcmUgbmVlZGVkLlxcbiAgNjQ6XFx0XFxuICA2NTpcXHRcXHQgIFdBUk5JTkc6IFRoaXMgZmVhdHVyZSBicmVha3MgcHJvZ3JhbXMgd2hpY2ggcmVseSBvbiByZWxvY2F0aW5nXFxuICA2NjpcXHRcXHQgIG9yIHVubWFwcGluZyBzeXN0ZW0gbWFwcGluZ3MuIEtub3duIGJyb2tlbiBzb2Z0d2FyZSBhdCB0aGUgdGltZVxcbiAgNjc6XFx0XFx0ICBvZiB3cml0aW5nIGluY2x1ZGVzIENIRUNLUE9JTlRfUkVTVE9SRSwgVU1MLCBnVmlzb3IsIHJyLiBUaGVyZWZvcmVcXG4gIDY4OlxcdFxcdCAgdGhpcyBjb25maWcgY2FuJ3QgYmUgZW5hYmxlZCB1bml2ZXJzYWxseS5cXG4gIDY5OlxcdFxcbiAgNzA6XFx0XFx0ICBGb3IgY29tcGxldGUgZGVzY3JpcHRpb25zIG9mIG1lbW9yeSBzZWFsaW5nLCBwbGVhc2Ugc2VlXFxuICA3MTpcXHRcXHQgIERvY3VtZW50YXRpb24vdXNlcnNwYWNlLWFwaS9tc2VhbC5yc3RcXG4gIDcyOlxcdFxcbiAgNzM6XFx0Y29uZmlnIFNFQ1VSSVRZXFxuICA3NDpcXHRcXHRib29sIFxcXCJFbmFibGUgZGlmZmVyZW50IHNlY3VyaXR5IG1vZGVsc1xcXCJcXG4gIDc1OlxcdFxcdGRlcGVuZHMgb24gU1lTRlNcXG4gIDc2OlxcdFxcdGRlcGVuZHMgb24gTVVMVElVU0VSXFxuICA3NzpcXHRcXHRoZWxwXFxuICA3ODpcXHRcXHQgIFRoaXMgYWxsb3dzIHlvdSB0byBjaG9vc2UgZGlmZmVyZW50IHNlY3VyaXR5IG1vZHVsZXMgdG8gYmVcXG4gIDc5OlxcdFxcdCAgY29uZmlndXJlZCBpbnRvIHlvdXIga2VybmVsLlxcbiAgODA6XFx0XFxuICA4MTpcXHRcXHQgIElmIHRoaXMgb3B0aW9uIGlzIG5vdCBzZWxlY3RlZCwgdGhlIGRlZmF1bHQgTGludXggc2VjdXJpdHlcXG4gIDgyOlxcdFxcdCAgbW9kZWwgd2lsbCBiZSB1c2VkLlxcbiAgODM6XFx0XFxuICA4NDpcXHRcXHQgIElmIHlvdSBhcmUgdW5zdXJlIGhvdyB0byBhbnN3ZXIgdGhpcyBxdWVzdGlvbiwgYW5zd2VyIE4uXFxuICA4NTpcXHRcXG4gIDg2OlxcdGNvbmZpZyBIQVNfU0VDVVJJVFlfQVVESVRcXG4gIDg3OlxcdFxcdGRlZl9ib29sIHlcXG4gIDg4OlxcdFxcdGRlcGVuZHMgb24gQVVESVRcXG4gIDg5OlxcdFxcdGRlcGVuZHMgb24gU0VDVVJJVFlcXG4gIDkwOlxcdFxcbiAgOTE6XFx0Y29uZmlnIFNFQ1VSSVRZRlNcXG4gIDkyOlxcdFxcdGJvb2wgXFxcIkVuYWJsZSB0aGUgc2VjdXJpdHlmcyBmaWxlc3lzdGVtXFxcIlxcbiAgOTM6XFx0XFx0aGVscFxcbiAgOTQ6XFx0XFx0ICBUaGlzIHdpbGwgYnVpbGQgdGhlIHNlY3VyaXR5ZnMgZmlsZXN5c3RlbS4gIEl0IGlzIGN1cnJlbnRseSB1c2VkIGJ5XFxuICA5NTpcXHRcXHQgIHZhcmlvdXMgc2VjdXJpdHkgbW9kdWxlcyAoQXBwQXJtb3IsIElNQSwgU2FmZVNldElELCBUT01PWU8sIFRQTSkuXFxuICA5NjpcXHRcXG4gIDk3OlxcdFxcdCAgSWYgeW91IGFyZSB1bnN1cmUgaG93IHRvIGFuc3dlciB0aGlzIHF1ZXN0aW9uLCBhbnN3ZXIgTi5cXG4gIDk4OlxcdFxcbiAgOTk6XFx0Y29uZmlnIFNFQ1VSSVRZX05FVFdPUktcXG4gMTAwOlxcdFxcdGJvb2wgXFxcIlNvY2tldCBhbmQgTmV0d29ya2luZyBTZWN1cml0eSBIb29rc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMjI6MjM6MzIuMDYxODA1ODUzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzQ3OTM4NTQ1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgU0VMaW51eCBLY29uZmlnKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgYHNlY3VyaXR5L3NlbGludXgvS2NvbmZpZ2AgZmlsZS4gR2l2ZW4gbXkgZmFtaWxpYXJpdHkgd2l0aCB0aGUgU0VMaW51eCBlY29zeXN0ZW0gYW5kIGtlcm5lbCBjb25maWd1cmF0aW9uLCB0aGlzIHNob3VsZCBiZSBhIGZhaXJseSBzdHJhaWdodGZvcndhcmQgcHJvY2Vzcy4gSSBleHBlY3QgdG8gZmluZCB0aGUgY29yZSBvcHRpb25zIGZvciBlbmFibGluZywgZGlzYWJsaW5nLCBhbmQgY29uZmlndXJpbmcgU0VMaW51eCB3aXRoaW4gdGhlIGtlcm5lbCwgYWxvbmcgd2l0aCB0aGUgZGVwZW5kZW5jaWVzIGFuZCByZWxhdGlvbnNoaXBzIHRvIG90aGVyIHNlY3VyaXR5IG1vZHVsZXMuIEknbGwgYmUgcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW46XG5cbiogICAqKk92ZXJhbGwgRW5hYmxlbWVudDoqKiBUaGUgdG9wLWxldmVsIGBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWGAgb3B0aW9uLCBuYXR1cmFsbHkuIEkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyBob3cgaXQncyBkZWZpbmVkIGFuZCBpZiB0aGVyZSBhcmUgYW55IGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcy5cbiogICAqKlBvbGljeSBDb250cm9sOioqIEknbGwgYmUgbG9va2luZyBmb3IgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgY29udHJvbCBhc3BlY3RzIG9mIHRoZSBkZWZhdWx0IHBvbGljeSBhbmQgcG9saWN5IGxvYWRpbmcuIFRoaXMgbWlnaHQgaW5jbHVkZSBvcHRpb25zIGZvciBlbmZvcmNpbmcgb3IgcGVybWlzc2l2ZSBtb2RlcywgYW5kIHdoZXRoZXIgaXQgaGFzIGR5bmFtaWMgbG9hZGluZyBjYXBhYmlsaXRpZXMuXG4qICAgKipBZHZhbmNlZCBGZWF0dXJlczoqKiBEZXBlbmRpbmcgb24gdGhlIGtlcm5lbCB2ZXJzaW9uIGFuZCBjb25maWd1cmF0aW9uLCBJJ2xsIHNjYW4gZm9yIGFueSBhZHZhbmNlZCBmZWF0dXJlcyBkZWZpbmVkLCBzdWNoIGFzIE1MUy9NQ1Mgc3VwcG9ydCBvciBvdGhlciBzcGVjaWFsaXplZCBTRUxpbnV4IGNhcGFiaWxpdGllcyB0aGF0IG1heSBuZWVkIHRvIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQuXG4qICAgKipJbnRlcmFjdGlvbnM6KiogSSdsbCBhbHNvIGdsYW5jZSBhdCB0aGUgc3Vycm91bmRpbmcgY29uZmlndXJhdGlvbiBzcGFjZSB0byBlbnN1cmUgY29tcGF0aWJpbGl0eSwgZXNwZWNpYWxseSB3aXRoIG90aGVyIHNlY3VyaXR5IG1vZHVsZXMgKGUuZy4sIElNQSwgTFNNcykuIFRoZSByZWxhdGlvbnNoaXBzIGFyZSBhbHdheXMgaW50ZXJlc3RpbmcuXG5cbkVzc2VudGlhbGx5LCBJJ20gc2V0dGluZyB0aGUgc3RhZ2UuIFRoaXMgaW5pdGlhbCBleGFtaW5hdGlvbiBvZiBgS2NvbmZpZ2Agd2lsbCBwcm92aWRlIGEgZm91bmRhdGlvbmFsIHVuZGVyc3RhbmRpbmcgb2YgaG93IFNFTGludXggaXMgaW50ZWdyYXRlZCBpbnRvIHRoaXMgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb24uIEl0J2xsIGRpcmVjdCBteSBhdHRlbnRpb24gdG8gb3RoZXIgYXNwZWN0cyBJIG1pZ2h0IG5lZWQgdG8gY29uc2lkZXIsIG9yIHRvIG90aGVyIHJlbGF0ZWQgZmlsZXMgdGhhdCBuZWVkIGF0dGVudGlvbi4gT25jZSBJIGhhdmUgYSBnb29kIGdyYXNwIG9mIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIEkgY2FuIG1vdmUgb24gdG8gdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBhbmQgYXNzZXNzIGl0cyBpbXBhY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzY1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQyMjoyMzozNS41NDExOTQ5NjlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDgzNTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwic2VjdXJpdHkvc2VsaW51eC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgU0VDVVJJVFlfU0VMSU5VWFxcbiAgIDM6XFx0XFx0Ym9vbCBcXFwiU0VMaW51eCBTdXBwb3J0XFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBTRUNVUklUWV9ORVRXT1JLIFxcdTAwMjZcXHUwMDI2IEFVRElUIFxcdTAwMjZcXHUwMDI2IE5FVCBcXHUwMDI2XFx1MDAyNiBJTkVUXFxuICAgNTpcXHRcXHRzZWxlY3QgTkVUV09SS19TRUNNQVJLXFxuICAgNjpcXHRcXHRkZWZhdWx0IG5cXG4gICA3OlxcdFxcdGhlbHBcXG4gICA4OlxcdFxcdCAgVGhpcyBzZWxlY3RzIFNlY3VyaXR5LUVuaGFuY2VkIExpbnV4IChTRUxpbnV4KS5cXG4gICA5OlxcdFxcdCAgWW91IHdpbGwgYWxzbyBuZWVkIGEgcG9saWN5IGNvbmZpZ3VyYXRpb24gYW5kIGEgbGFiZWxlZCBmaWxlc3lzdGVtLlxcbiAgMTA6XFx0XFx0ICBJZiB5b3UgYXJlIHVuc3VyZSBob3cgdG8gYW5zd2VyIHRoaXMgcXVlc3Rpb24sIGFuc3dlciBOLlxcbiAgMTE6XFx0XFxuICAxMjpcXHRjb25maWcgU0VDVVJJVFlfU0VMSU5VWF9CT09UUEFSQU1cXG4gIDEzOlxcdFxcdGJvb2wgXFxcIlNFTGludXggYm9vdCBwYXJhbWV0ZXJcXFwiXFxuICAxNDpcXHRcXHRkZXBlbmRzIG9uIFNFQ1VSSVRZX1NFTElOVVhcXG4gIDE1OlxcdFxcdGRlZmF1bHQgblxcbiAgMTY6XFx0XFx0aGVscFxcbiAgMTc6XFx0XFx0ICBUaGlzIG9wdGlvbiBhZGRzIGEga2VybmVsIHBhcmFtZXRlciAnc2VsaW51eCcsIHdoaWNoIGFsbG93cyBTRUxpbnV4XFxuICAxODpcXHRcXHQgIHRvIGJlIGRpc2FibGVkIGF0IGJvb3QuICBJZiB0aGlzIG9wdGlvbiBpcyBzZWxlY3RlZCwgU0VMaW51eFxcbiAgMTk6XFx0XFx0ICBmdW5jdGlvbmFsaXR5IGNhbiBiZSBkaXNhYmxlZCB3aXRoIHNlbGludXg9MCBvbiB0aGUga2VybmVsXFxuICAyMDpcXHRcXHQgIGNvbW1hbmQgbGluZS4gIFRoZSBwdXJwb3NlIG9mIHRoaXMgb3B0aW9uIGlzIHRvIGFsbG93IGEgc2luZ2xlXFxuICAyMTpcXHRcXHQgIGtlcm5lbCBpbWFnZSB0byBiZSBkaXN0cmlidXRlZCB3aXRoIFNFTGludXggYnVpbHQgaW4sIGJ1dCBub3RcXG4gIDIyOlxcdFxcdCAgbmVjZXNzYXJpbHkgZW5hYmxlZC5cXG4gIDIzOlxcdFxcbiAgMjQ6XFx0XFx0ICBJZiB5b3UgYXJlIHVuc3VyZSBob3cgdG8gYW5zd2VyIHRoaXMgcXVlc3Rpb24sIGFuc3dlciBOLlxcbiAgMjU6XFx0XFxuICAyNjpcXHRjb25maWcgU0VDVVJJVFlfU0VMSU5VWF9ERVZFTE9QXFxuICAyNzpcXHRcXHRib29sIFxcXCJTRUxpbnV4IERldmVsb3BtZW50IFN1cHBvcnRcXFwiXFxuICAyODpcXHRcXHRkZXBlbmRzIG9uIFNFQ1VSSVRZX1NFTElOVVhcXG4gIDI5OlxcdFxcdGRlZmF1bHQgeVxcbiAgMzA6XFx0XFx0aGVscFxcbiAgMzE6XFx0XFx0ICBUaGlzIGVuYWJsZXMgdGhlIGRldmVsb3BtZW50IHN1cHBvcnQgb3B0aW9uIG9mIFNFTGludXgsXFxuICAzMjpcXHRcXHQgIHdoaWNoIGlzIHVzZWZ1bCBmb3IgZXhwZXJpbWVudGluZyB3aXRoIFNFTGludXggYW5kIGRldmVsb3BpbmdcXG4gIDMzOlxcdFxcdCAgcG9saWNpZXMuICBJZiB1bnN1cmUsIHNheSBZLiAgV2l0aCB0aGlzIG9wdGlvbiBlbmFibGVkLCB0aGVcXG4gIDM0OlxcdFxcdCAga2VybmVsIHdpbGwgc3RhcnQgaW4gcGVybWlzc2l2ZSBtb2RlIChsb2cgZXZlcnl0aGluZywgZGVueSBub3RoaW5nKVxcbiAgMzU6XFx0XFx0ICB1bmxlc3MgeW91IHNwZWNpZnkgZW5mb3JjaW5nPTEgb24gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUuICBZb3VcXG4gIDM2OlxcdFxcdCAgY2FuIGludGVyYWN0aXZlbHkgdG9nZ2xlIHRoZSBrZXJuZWwgYmV0d2VlbiBlbmZvcmNpbmcgbW9kZSBhbmRcXG4gIDM3OlxcdFxcdCAgcGVybWlzc2l2ZSBtb2RlIChpZiBwZXJtaXR0ZWQgYnkgdGhlIHBvbGljeSkgdmlhXFxuICAzODpcXHRcXHQgIC9zeXMvZnMvc2VsaW51eC9lbmZvcmNlLlxcbiAgMzk6XFx0XFxuICA0MDpcXHRjb25maWcgU0VDVVJJVFlfU0VMSU5VWF9BVkNfU1RBVFNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMjI6MjM6MzUuNTQxMzA1MTJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMTk3OTgxMTA2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgU0VMaW51eCBGaWxlIFByb3RlY3Rpb24gSG9vayBNb2RpZmljYXRpb25zKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBjaGFuZ2VzIG1hZGUgd2l0aGluIGBzZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZXNlIG1vZGlmaWNhdGlvbnMsIHNvIEknbGwgZ28gdGhyb3VnaCB0aGUgZGlmZiBjYXJlZnVsbHkuIEl0IGxvb2tzIGxpa2Ugd2UgaGF2ZSBhIHNldCBvZiBjb3JlIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiB0d2Vha2VkLlxuXG5GaXJzdCwgSSBzZWUgc2V2ZXJhbCBoZWxwZXIgZnVuY3Rpb25zIGhhdmUgYmVlbiBtb2RpZmllZDogYGlub2RlX3NpZF9oYXNfcGVybWAsIGBpbm9kZV9oYXNfcGVybWAsIGBzZWxpbnV4X2ZpbGVfdXNlcl9zaWRgLCBgZmlsZV9tYXBfcHJvdF90b19hdmAsIGBiYWNraW5nX21vdW50ZXJzX2hhc19wZXJtYCwgYW5kIGBfX2ZpbGVfbWFwX3Byb3RfY2hlY2tgLiBUaGVzZSBhcmUgdGhlIGludGVybmFsIGJ1aWxkaW5nIGJsb2NrcyBhbmQgYW55IG1vZGlmaWNhdGlvbiBoZXJlIHBvdGVudGlhbGx5IGhhcyB3aWRlIGltcGFjdHMuXG5cbkNydWNpYWxseSwgSSBhbHNvIHNlZSB0d28gTFNNIGhvb2tzIGJlaW5nIG1vZGlmaWVkOiBgc2VsaW51eF9iYWNraW5nX2ZpbGVfYWxsb2NgIGFuZCBgc2VsaW51eF9iYWNraW5nX2ZpbGVfZnJlZWAsIGFzIHdlbGwgYXMgYHNlbGludXhfZmlsZV9tcHJvdGVjdGAuIFRoaXMgaXMgd2hlcmUgdGhlIFNFTGludXggcG9saWN5IGVuZm9yY2VtZW50IGlzIGludGVncmF0ZWQgaW50byB0aGUga2VybmVsJ3MgZmlsZSBwcm90ZWN0aW9uIG1lY2hhbmlzbXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBob29rcyBhcmUgZGVmaW5lZCBhbmQgY2FsbGVkIHdpdGhpbiB0aGUgTFNNIGZyYW1ld29yayBpdHNlbGYgYW5kIGhvdyBTRUxpbnV4IGlzIHVzaW5nIHRoZW0uXG5cblRoZXJlZm9yZSwgbXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgYHNlY3VyaXR5L3NlY3VyaXR5LmNgLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoZSBjb3JyZXNwb25kaW5nIGRlZmluaXRpb25zIGFuZCB1c2FnZSBvZiB0aGUgYHNlY3VyaXR5X2ZpbGVfbXByb3RlY3RgLCBgc2VjdXJpdHlfYmFja2luZ19maWxlX2FsbG9jYCwgYW5kIGBzZWN1cml0eV9iYWNraW5nX2ZpbGVfZnJlZWAgZnVuY3Rpb25zLiBUaGlzIHdpbGwgY2xhcmlmeSBob3cgdGhlIFNFTGludXggaG9va3MgSSBvYnNlcnZlZCBpbiBgaG9va3MuY2AgYXJlIGFjdHVhbGx5IHdpcmVkIGludG8gdGhlIGJyb2FkZXIgc2VjdXJpdHkgZnJhbWV3b3JrLiBJdOKAmXMgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgY29udGV4dCBvZiB0aGVzZSBtb2RpZmljYXRpb25zLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSB1bmRlcmx5aW5nIExTTSBpbXBsZW1lbnRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI3OTEsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQyMjoyMzo0Ny41MjExMjAxNjhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4NDI2MzYwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWN1cml0eV9iYWNraW5nX2ZpbGVfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInNlY3VyaXR5L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJzZWN1cml0eS9zZWN1cml0eS5jPTI0MzM9dm9pZCBzZWN1cml0eV9maWxlX2ZyZWUoc3RydWN0IGZpbGUgKmZpbGUpXFxuLS1cXG5zZWN1cml0eS9zZWN1cml0eS5jLTI0NDYtLyoqXFxuc2VjdXJpdHkvc2VjdXJpdHkuYzoyNDQ3OiAqIHNlY3VyaXR5X2JhY2tpbmdfZmlsZV9hbGxvYygpIC0gQWxsb2NhdGUgYW5kIHNldHVwIGEgYmFja2luZyBmaWxlIGJsb2JcXG5zZWN1cml0eS9zZWN1cml0eS5jLTI0NDgtICogQGJhY2tpbmdfZmlsZTogdGhlIGJhY2tpbmcgZmlsZVxcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0yNDYyLSAqL1xcbnNlY3VyaXR5L3NlY3VyaXR5LmM6MjQ2MzppbnQgc2VjdXJpdHlfYmFja2luZ19maWxlX2FsbG9jKHN0cnVjdCBmaWxlICpiYWNraW5nX2ZpbGUsXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0yNDY0LVxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBmaWxlICp1c2VyX2ZpbGUpXFxuLS1cXG5zZWN1cml0eS9zZWN1cml0eS5jLTI0NzItXFx0aWYgKHVubGlrZWx5KHJjKSlcXG5zZWN1cml0eS9zZWN1cml0eS5jOjI0NzM6XFx0XFx0c2VjdXJpdHlfYmFja2luZ19maWxlX2ZyZWUoYmFja2luZ19maWxlKTtcXG5zZWN1cml0eS9zZWN1cml0eS5jLTI0NzQtXFxuLS1cXG5zZWN1cml0eS9zZWN1cml0eS5jLTI0NzgtLyoqXFxuc2VjdXJpdHkvc2VjdXJpdHkuYzoyNDc5OiAqIHNlY3VyaXR5X2JhY2tpbmdfZmlsZV9mcmVlKCkgLSBGcmVlIGEgYmFja2luZyBmaWxlIGJsb2JcXG5zZWN1cml0eS9zZWN1cml0eS5jLTI0ODAtICogQGJhY2tpbmdfZmlsZTogdGhlIGJhY2tpbmcgZmlsZVxcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0yNDg0LSAqL1xcbnNlY3VyaXR5L3NlY3VyaXR5LmM6MjQ4NTp2b2lkIHNlY3VyaXR5X2JhY2tpbmdfZmlsZV9mcmVlKHN0cnVjdCBmaWxlICpiYWNraW5nX2ZpbGUpXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0yNDg2LXtcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz0zOTA1PXN0YXRpYyB2b2lkIHNlbGludXhfYmFja2luZ19maWxlX2ZyZWUoc3RydWN0IGZpbGUgKmJhY2tpbmdfZmlsZSlcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zOTA4LVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzozOTA5OlxcdC8qIHNlY3VyaXR5X2JhY2tpbmdfZmlsZV9mcmVlKCkgbWF5IGJlIGNhbGxlZCB0d2ljZSBhZnRlciBhbiBlcnJvciAqL1xcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zOTEwLVxcdGlmICghYmFja2luZ19maWxlX3NlY3VyaXR5KGJhY2tpbmdfZmlsZSkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDIyOjIzOjQ4LjMwNTM4ODI1NloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjI4ODgwODExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhvc2UgZnVuY3Rpb24gbmFtZXMsIGV4cHJlc3NlZCBhcyB5b3VyIHJlcXVlc3Q6XG5cbioqQW5hbHl6aW5nIFNlY3VyaXR5IEJhY2tpbmcgRmlsZSBPcGVyYXRpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb24gbmFtZXM6IGBzZWN1cml0eV9iYWNraW5nX2ZpbGVfYWxsb2NgLCBgc2VjdXJpdHlfYmFja2luZ19maWxlX2ZyZWVgLCBhbmQgYHNlY3VyaXR5X2ZpbGVfbXByb3RlY3RgLiBJbW1lZGlhdGVseSwgSSBzZWUgYSBjbGVhciByZWxhdGlvbnNoaXAuIFRoZXkgYWxsIGRlYWwgd2l0aCwgYXMgdGhlIG5hbWVzIHN1Z2dlc3QsIHNlY3VyaXR5LXJlbGF0ZWQgaW50ZXJhY3Rpb25zIHdpdGggYmFja2luZyBmaWxlcywgd2hpY2ggbGlrZWx5IHJlbGF0ZXMgdG8gZmlsZS1iYWNrZWQgbWVtb3J5IHJlZ2lvbnMgYW5kIHRoZWlyIHNlY3VyaXR5IGNvbnRleHRzLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJ20gYXNzdW1pbmcgd2UgYXJlIGRlYWxpbmcgd2l0aCBzb21lIGZvcm0gb2YgbWVtb3J5IHByb3RlY3Rpb24gdGllZCB0byBmaWxlIG1hcHBpbmcgb3IgcG9zc2libHkgc2FuZGJveGluZy5cblxuTXkgbmV4dCBzdGVwIGlzIGNsZWFyOiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBncmFwaC4gSSdtIGdvaW5nIHRvIGRldGVybWluZSB3aGljaCBmdW5jdGlvbnMgYXJlICpjYWxsaW5nKiBgc2VjdXJpdHlfYmFja2luZ19maWxlX2FsbG9jYCBhbmQgYHNlY3VyaXR5X2JhY2tpbmdfZmlsZV9mcmVlYC4gVHJhY2luZyB0aGVzZSBjYWxscyB3aWxsIGdpdmUgbWUgdmFsdWFibGUgY29udGV4dC4gVW5kZXJzdGFuZGluZyB0aGUgY29kZSBwYXRocyB0aGF0ICp1c2UqIHRoZSBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIGZ1bmN0aW9ucyB3aWxsIHJldmVhbCB0aGUgc3BlY2lmaWMgc2VjdXJpdHkgY29uY2VybnMgYW5kIHRoZSBvdmVyYWxsIG9wZXJhdGlvbmFsIHBhdHRlcm5zIHN1cnJvdW5kaW5nIHRoZSBiYWNraW5nIGZpbGUgc2VjdXJpdHkgbWVjaGFuaXNtLiBUaGlzIHdpbGwgbGlrZWx5IHNob3cgdGhlIGluaXRpYWxpemF0aW9uIGFuZCBkZXN0cnVjdGlvbiBwcm9jZXNzIGZvciBzZWN1cml0eSBjb250ZXh0cyBhc3NvY2lhdGVkIHdpdGggdGhlIGJhY2tpbmcgZmlsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4ODksIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQyMjoyMzo1MS41MzQyNzMxMjdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMDc5ODI2NzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VjdXJpdHlfYmFja2luZ19maWxlX1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9maWxlX3RhYmxlLmM9ODg9c3RhdGljIGlubGluZSB2b2lkIGJhY2tpbmdfZmlsZV9mcmVlKHN0cnVjdCBiYWNraW5nX2ZpbGUgKmZmKVxcbmZzL2ZpbGVfdGFibGUuYy04OS17XFxuZnMvZmlsZV90YWJsZS5jOjkwOlxcdHNlY3VyaXR5X2JhY2tpbmdfZmlsZV9mcmVlKFxcdTAwMjZmZi1cXHUwMDNlZmlsZSk7XFxuZnMvZmlsZV90YWJsZS5jLTkxLVxcdHBhdGhfcHV0KFxcdTAwMjZmZi1cXHUwMDNldXNlcl9wYXRoKTtcXG4tLVxcbmZzL2ZpbGVfdGFibGUuYz0zMTE9c3RhdGljIGludCBpbml0X2JhY2tpbmdfZmlsZShzdHJ1Y3QgYmFja2luZ19maWxlICpmZixcXG4tLVxcbmZzL2ZpbGVfdGFibGUuYy0zMTUtXFx0YmFja2luZ19maWxlX3NldF9zZWN1cml0eShcXHUwMDI2ZmYtXFx1MDAzZWZpbGUsIE5VTEwpO1xcbmZzL2ZpbGVfdGFibGUuYzozMTY6XFx0cmV0dXJuIHNlY3VyaXR5X2JhY2tpbmdfZmlsZV9hbGxvYyhcXHUwMDI2ZmYtXFx1MDAzZWZpbGUsIHVzZXJfZmlsZSk7XFxuZnMvZmlsZV90YWJsZS5jLTMxNy19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5Lmg9NDc0PXZvaWQgc2VjdXJpdHlfZmlsZV9mcmVlKHN0cnVjdCBmaWxlICpmaWxlKTtcXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5Lmg6NDc1OmludCBzZWN1cml0eV9iYWNraW5nX2ZpbGVfYWxsb2Moc3RydWN0IGZpbGUgKmJhY2tpbmdfZmlsZSxcXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgtNDc2LVxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBmaWxlICp1c2VyX2ZpbGUpO1xcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaDo0Nzc6dm9pZCBzZWN1cml0eV9iYWNraW5nX2ZpbGVfZnJlZShzdHJ1Y3QgZmlsZSAqYmFja2luZ19maWxlKTtcXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgtNDc4LWludCBzZWN1cml0eV9maWxlX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5Lmg9MTE0OD1zdGF0aWMgaW5saW5lIHZvaWQgc2VjdXJpdHlfZmlsZV9mcmVlKHN0cnVjdCBmaWxlICpmaWxlKVxcbi0tXFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTExNTAtXFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oOjExNTE6c3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfYmFja2luZ19maWxlX2FsbG9jKHN0cnVjdCBmaWxlICpiYWNraW5nX2ZpbGUsXFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTExNTItXFx0XFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGZpbGUgKnVzZXJfZmlsZSlcXG4tLVxcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaC0xMTU2LVxcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaDoxMTU3OnN0YXRpYyBpbmxpbmUgdm9pZCBzZWN1cml0eV9iYWNraW5nX2ZpbGVfZnJlZShzdHJ1Y3QgZmlsZSAqYmFja2luZ19maWxlKVxcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaC0xMTU4LXsgfVxcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYz0yNDMzPXZvaWQgc2VjdXJpdHlfZmlsZV9mcmVlKHN0cnVjdCBmaWxlICpmaWxlKVxcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0yNDQ2LS8qKlxcbnNlY3VyaXR5L3NlY3VyaXR5LmM6MjQ0NzogKiBzZWN1cml0eV9iYWNraW5nX2ZpbGVfYWxsb2MoKSAtIEFsbG9jYXRlIGFuZCBzZXR1cCBhIGJhY2tpbmcgZmlsZSBibG9iXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0yNDQ4LSAqIEBiYWNraW5nX2ZpbGU6IHRoZSBiYWNraW5nIGZpbGVcXG4tLVxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMjQ2Mi0gKi9cXG5zZWN1cml0eS9zZWN1cml0eS5jOjI0NjM6aW50IHNlY3VyaXR5X2JhY2tpbmdfZmlsZV9hbGxvYyhzdHJ1Y3QgZmlsZSAqYmFja2luZ19maWxlLFxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMjQ2NC1cXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgZmlsZSAqdXNlcl9maWxlKVxcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0yNDcyLVxcdGlmICh1bmxpa2VseShyYykpXFxuc2VjdXJpdHkvc2VjdXJpdHkuYzoyNDczOlxcdFxcdHNlY3VyaXR5X2JhY2tpbmdfZmlsZV9mcmVlKGJhY2tpbmdfZmlsZSk7XFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0yNDc0LVxcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0yNDc4LS8qKlxcbnNlY3VyaXR5L3NlY3VyaXR5LmM6MjQ3OTogKiBzZWN1cml0eV9iYWNraW5nX2ZpbGVfZnJlZSgpIC0gRnJlZSBhIGJhY2tpbmcgZmlsZSBibG9iXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0yNDgwLSAqIEBiYWNraW5nX2ZpbGU6IHRoZSBiYWNraW5nIGZpbGVcXG4tLVxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMjQ4NC0gKi9cXG5zZWN1cml0eS9zZWN1cml0eS5jOjI0ODU6dm9pZCBzZWN1cml0eV9iYWNraW5nX2ZpbGVfZnJlZShzdHJ1Y3QgZmlsZSAqYmFja2luZ19maWxlKVxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMjQ4Ni17XFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9MzkwNT1zdGF0aWMgdm9pZCBzZWxpbnV4X2JhY2tpbmdfZmlsZV9mcmVlKHN0cnVjdCBmaWxlICpiYWNraW5nX2ZpbGUpXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzkwOC1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6MzkwOTpcXHQvKiBzZWN1cml0eV9iYWNraW5nX2ZpbGVfZnJlZSgpIG1heSBiZSBjYWxsZWQgdHdpY2UgYWZ0ZXIgYW4gZXJyb3IgKi9cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzkxMC1cXHRpZiAoIWJhY2tpbmdfZmlsZV9zZWN1cml0eShiYWNraW5nX2ZpbGUpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQyMjoyMzo1My44NDIyNjI4NzJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzAzMDg0NjE2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQmFja2luZyBGaWxlIFNlY3VyaXR5KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBmb2N1cyByaWdodCBub3cgaXMgb24gdGhlIHNlY3VyaXR5IGltcGxpY2F0aW9ucyBvZiBiYWNraW5nIGZpbGVzLCBlc3BlY2lhbGx5IHdpdGhpbiBzb21ldGhpbmcgbGlrZSBvdmVybGF5ZnMuIEkgc2VlIHRoYXQgYGJhY2tpbmdfZmlsZV9hbGxvY2AgYW5kIGBiYWNraW5nX2ZpbGVfZnJlZWAgYXJlIHRoZSBrZXkgZW50cnkgcG9pbnRzOyB0aGV5J3JlIHRoZSBob29rcyB3aGVuIGJhY2tpbmcgZmlsZXMgYXJlIG9wZW5lZCBhbmQgcmVsZWFzZWQsIGhhbmRsaW5nIHRoZSBsaWZlY3ljbGUsIHBlcmhhcHMgdmlhIGBiYWNraW5nX2ZpbGVfb3Blbl9wdHJgIG9yIGBiYWNraW5nX3RtcGZpbGVfb3BlbmAuIENydWNpYWxseSwgd2hlbiBgbXByb3RlY3RgIGlzIGNhbGxlZCBvbiBhIG1lbW9yeSBtYXBwaW5nIHRoYXQgaW52b2x2ZXMgYSBiYWNraW5nIGZpbGUsIGBzZWxpbnV4X2ZpbGVfbXByb3RlY3RgIGlzIHRyaWdnZXJlZC4gVGhhdCB0ZWxscyBtZSBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGNhbGwgcGF0aHMgb2YgYHNlY3VyaXR5X2ZpbGVfbXByb3RlY3RgIGl0c2VsZi4gV2hlcmUgZWxzZSBpcyB0aGlzIHNlY3VyaXR5IGNoZWNrIGhhcHBlbmluZz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHdpZGVseSB0aGVzZSBwcm90ZWN0aW9ucyBhcmUgaW1wbGVtZW50ZWQgdG8gcHJvcGVybHkgYXNzZXNzIHRoZSBvdmVyYWxsIHNlY3VyaXR5IG9mIHRoZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MTYxLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDIyOjIzOjU2Ljg3MzExMjEzNloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI0MDA4ODY5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWN1cml0eV9maWxlX21wcm90ZWN0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvc2VjdXJpdHkuaD00ODY9aW50IHNlY3VyaXR5X21tYXBfYWRkcih1bnNpZ25lZCBsb25nIGFkZHIpO1xcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaDo0ODc6aW50IHNlY3VyaXR5X2ZpbGVfbXByb3RlY3Qoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgcmVxcHJvdCxcXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgtNDg4LVxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgcHJvdCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5Lmg9MTE4Nj1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9tbWFwX2FkZHIodW5zaWduZWQgbG9uZyBhZGRyKVxcbi0tXFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTExOTAtXFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oOjExOTE6c3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfZmlsZV9tcHJvdGVjdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgtMTE5Mi1cXHRcXHRcXHRcXHRcXHQgdW5zaWduZWQgbG9uZyByZXFwcm90LFxcbi0tXFxubW0vbXByb3RlY3QuYz04NzE9c3RhdGljIGludCBkb19tcHJvdGVjdF9wa2V5KHVuc2lnbmVkIGxvbmcgc3RhcnQsIHNpemVfdCBsZW4sXFxuLS1cXG5tbS9tcHJvdGVjdC5jLTk4Ny1cXG5tbS9tcHJvdGVjdC5jOjk4ODpcXHRcXHRlcnJvciA9IHNlY3VyaXR5X2ZpbGVfbXByb3RlY3Qodm1hLCByZXFwcm90LCBwcm90KTtcXG5tbS9tcHJvdGVjdC5jLTk4OS1cXHRcXHRpZiAoZXJyb3IpXFxuLS1cXG5zZWN1cml0eS9zZWN1cml0eS5jPTI2MTk9aW50IHNlY3VyaXR5X21tYXBfYWRkcih1bnNpZ25lZCBsb25nIGFkZHIpXFxuLS1cXG5zZWN1cml0eS9zZWN1cml0eS5jLTI2MjQtLyoqXFxuc2VjdXJpdHkvc2VjdXJpdHkuYzoyNjI1OiAqIHNlY3VyaXR5X2ZpbGVfbXByb3RlY3QoKSAtIENoZWNrIGlmIGNoYW5naW5nIG1lbW9yeSBwcm90ZWN0aW9ucyBpcyBhbGxvd2VkXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0yNjI2LSAqIEB2bWE6IG1lbW9yeSByZWdpb25cXG4tLVxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMjYzMy0gKi9cXG5zZWN1cml0eS9zZWN1cml0eS5jOjI2MzQ6aW50IHNlY3VyaXR5X2ZpbGVfbXByb3RlY3Qoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgcmVxcHJvdCxcXG5zZWN1cml0eS9zZWN1cml0eS5jLTI2MzUtXFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBwcm90KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQyMjoyMzo1OS4xMTMyMDY1MTJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTE2MjU5MTI2NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IFNFTGludXggQmFja2luZyBGaWxlIEhhbmRsaW5nKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIG11bHRpLWxheWVyIGJhY2tpbmcgZmlsZXMgd2l0aGluIFNFTGludXggcGVybWlzc2lvbnMgY2hlY2tzLCBzcGVjaWZpY2FsbHkgZHVyaW5nIGBtcHJvdGVjdGAgb3BlcmF0aW9ucy4gSXQncyBoYW5kbGluZyB0aGUgYWxsb2NhdGlvbiwgZGVhbGxvY2F0aW9uLCBhbmQgdHJhY2tpbmcgb2YgYGJhY2tpbmdfZmlsZV9zZWN1cml0eWAgc3RydWN0dXJlcywgaW5jbHVkaW5nIHRob3NlIHBlc2t5IGxheWVycy4gTG9va2luZyBhdCB0aGUgY29kZSwgaXQncyB0b3VjaGluZyBkeW5hbWljIG1lbW9yeSBhbGxvY2F0aW9uIChjcnVjaWFsISksIHBhdGggcmVmZXJlbmNlIGNvdW50aW5nLCBhbmQgcGVybWlzc2lvbiBjaGVja3Mgb24gYmFja2luZyBmaWxlcywgdGhlIHVzdWFsIHN1c3BlY3RzLCByaWdodD8gT3ZlcmxheUZTLCBFUk9GUyBzdGFja3MsIG5lc3RlZCBPdmVybGF5RlMg4oCTIHRoZSB3b3Jrcy5cblxuVGhlIGtleSBmdW5jdGlvbnMgYXJlIGBzZWxpbnV4X2JhY2tpbmdfZmlsZV9hbGxvY2AsIGBzZWxpbnV4X2JhY2tpbmdfZmlsZV9mcmVlYCwgYW5kIGBzZWxpbnV4X2ZpbGVfbXByb3RlY3RgLiBUaGVzZSBhbGwgbG9vayBpbnRlcmVzdGluZyBmb3IgZnV6emluZzogYHNlbGludXhfYmFja2luZ19maWxlX2FsbG9jYCBhbGxvY2F0ZXMgYW4gYXJyYXksIGNvcGllcyBleGlzdGluZyBsYXllcnMsIGFuZCBhcHBlbmRzIHRoZSBjdXJyZW50IG9uZSwgZ2V0dGluZyBwYXRoIHJlZmVyZW5jZXMuIFRoZW4sIGBzZWxpbnV4X2JhY2tpbmdfZmlsZV9mcmVlYCBmcmVlcyB0aGUgcGF0aHMgYW5kIHRoZSBhcnJheSBpdHNlbGYuIEZpbmFsbHksIGBzZWxpbnV4X2ZpbGVfbXByb3RlY3RgIGNhbGxzIGBiYWNraW5nX21vdW50ZXJzX2hhc19wZXJtYCwgd2hpY2ggaXMgY3J1Y2lhbCBmb3IgZGV0ZXJtaW5pbmcgbW91bnRlciBwZXJtaXNzaW9ucy5cblxuSXMgdGhpcyByZWFjaGFibGUgYW5kIHdvcnRoIHRoZSBlZmZvcnQ/IEFic29sdXRlbHkhIFRoaXMgaXMgY29yZSBTRUxpbnV4IGxvZ2ljLCBoYW5kbGluZyBmaWxlIGFuZCBtcHJvdGVjdCBwZXJtaXNzaW9uIGNoZWNrcywgYW5kIHJlZmVyZW5jZSB0cmFja2luZyBvbiBiYWNraW5nIGZpbGVzLiBJdCdzIGZ1bGx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLCBtYWtpbmcgaXQgYSBwcmltZSB0YXJnZXQuXG5cbk5vdywgbGV0J3MgbmFpbCBkb3duIHRoZSBgRm9jdXNTeW1ib2xzYC4gQWNjb3JkaW5nIHRvIHRoZSBpbnN0cnVjdGlvbnMsIHdlIHdhbnQgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucywgaWRlYWxseSBub24tc3RhdGljIGVudHJ5IHBvaW50cywgdG8gYXZvaWQgc2tld2luZyB0aGUgZnV6eiB0ZXN0IGRpc3RyaWJ1dGlvbi4gRm9yZ2V0IGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zLlxuXG5TbywgbGV0J3MgZGl2ZSBpbnRvIHRoZSBwYXRjaCdzIGZ1bmN0aW9ucy4gSSBzZWUgYHNlbGludXhfYmFja2luZ19maWxlX2FsbG9jYCwgYHNlbGludXhfYmFja2luZ19maWxlX2ZyZWVgLCBhbmQgYHNlbGludXhfZmlsZV9tcHJvdGVjdGAgaW4gYHNlY3VyaXR5L3NlbGludXgvaG9va3MuY2AsIGJ1dCB0aGV5J3JlIG1hcmtlZCBzdGF0aWMuIEhvd2V2ZXIsIHRoZXkncmUgcmVnaXN0ZXJlZCBpbiB0aGUgYHNlbGludXhfaG9va3NgIHRhYmxlIGFzIGBiYWNraW5nX2ZpbGVfYWxsb2NgLCBgYmFja2luZ19maWxlX2ZyZWVgLCBhbmQgYGZpbGVfbXByb3RlY3RgIHJlc3BlY3RpdmVseS5cblxuVGhlcmUgYXJlIGFsc28gYHNlY3VyaXR5X2JhY2tpbmdfZmlsZV9hbGxvY2AsIGBzZWN1cml0eV9iYWNraW5nX2ZpbGVfZnJlZWAsIGFuZCBgc2VjdXJpdHlfZmlsZV9tcHJvdGVjdGAgaW4gYHNlY3VyaXR5L3NlY3VyaXR5LmNgLCBidXQgSSBoYXZlIGEgZmVlbGluZyB0aGUgc3RhdGljLWRlY2xhcmVkIG9uZXMgYXJlIHRoZSBvbmVzIHdlIHdhbnQuIFNpbmNlIHRoZWlyIGFkZHJlc3NlcyBhcmUgdGFrZW4gaW4gdGhlIGBzZWxpbnV4X2hvb2tzYCB0YWJsZSwgdGhlIGNvbXBpbGVyIGNhbid0IGNvbXBsZXRlbHkgaW5saW5lIHRoZW0uIEknbSBwcmV0dHkgc3VyZSB0aGV5IHJldGFpbiB0aGVpciBzeW1ib2xzIGluIHZtbGludXguIFRoYXQncyBnb29kLiBBbmQgdGhlIGBzZWN1cml0eV9iYWNraW5nX2ZpbGVfYWxsb2NgLCBgc2VjdXJpdHlfYmFja2luZ19maWxlX2ZyZWVgLCBgc2VjdXJpdHlfZmlsZV9tcHJvdGVjdGAgaW4gYHNlY3VyaXR5L3NlY3VyaXR5LmNgIGFyZSB0aGUgbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMuXG5cblNvLCBpdCdzOlxuKiAgIGBzZWxpbnV4X2JhY2tpbmdfZmlsZV9hbGxvY2AgKHJlZ2lzdGVyZWQgYXMgYGJhY2tpbmdfZmlsZV9hbGxvY2ApXG4qICAgYHNlbGludXhfYmFja2luZ19maWxlX2ZyZWVgIChyZWdpc3RlcmVkIGFzIGBiYWNraW5nX2ZpbGVfZnJlZWApXG4qICAgYHNlbGludXhfZmlsZV9tcHJvdGVjdGAgKHJlZ2lzdGVyZWQgYXMgYGZpbGVfbXByb3RlY3RgKVxuKiAgIGBzZWN1cml0eV9iYWNraW5nX2ZpbGVfYWxsb2NgXG4qICAgYHNlY3VyaXR5X2JhY2tpbmdfZmlsZV9mcmVlYFxuKiAgIGBzZWN1cml0eV9maWxlX21wcm90ZWN0YFxuXG5XZSdsbCBhZGQgYm90aCBzZXRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTkyMiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkwOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQyMjoyNDoxMC43MzkxMjI2NDVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE4NTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcInNlY3VyaXR5L3NlY3VyaXR5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjQ0NSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjQ0NTpcXHRcXG4yNDQ2OlxcdC8qKlxcbjI0NDc6XFx0ICogc2VjdXJpdHlfYmFja2luZ19maWxlX2FsbG9jKCkgLSBBbGxvY2F0ZSBhbmQgc2V0dXAgYSBiYWNraW5nIGZpbGUgYmxvYlxcbjI0NDg6XFx0ICogQGJhY2tpbmdfZmlsZTogdGhlIGJhY2tpbmcgZmlsZVxcbjI0NDk6XFx0ICogQHVzZXJfZmlsZTogdGhlIGFzc29jaWF0ZWQgdXNlciB2aXNpYmxlIGZpbGVcXG4yNDUwOlxcdCAqXFxuMjQ1MTpcXHQgKiBBbGxvY2F0ZSBhIGJhY2tpbmcgZmlsZSBMU00gYmxvYiBhbmQgcGVyZm9ybSBhbnkgbmVjZXNzYXJ5IGluaXRpYWxpemF0aW9uIG9mXFxuMjQ1MjpcXHQgKiB0aGUgTFNNIGJsb2IuICBUaGVyZSB3aWxsIGJlIHNvbWUgb3BlcmF0aW9ucyB3aGVyZSB0aGUgTFNNIHdpbGwgbm90IGhhdmVcXG4yNDUzOlxcdCAqIGFjY2VzcyB0byBAdXNlcl9maWxlIGFmdGVyIHRoaXMgcG9pbnQsIHNvIGFueSBpbXBvcnRhbnQgc3RhdGUgYXNzb2NpYXRlZFxcbjI0NTQ6XFx0ICogd2l0aCBAdXNlcl9maWxlIHRoYXQgaXMgaW1wb3J0YW50IHRvIHRoZSBMU00gc2hvdWxkIGJlIGNhcHR1cmVkIGluIHRoZVxcbjI0NTU6XFx0ICogYmFja2luZyBmaWxlJ3MgTFNNIGJsb2IuXFxuMjQ1NjpcXHQgKlxcbjI0NTc6XFx0ICogTFNNJ3Mgc2hvdWxkIGF2b2lkIHRha2luZyBhIHJlZmVyZW5jZSB0byBAdXNlcl9maWxlIGluIHRoaXMgaG9vayBhcyBpdCB3aWxsXFxuMjQ1ODpcXHQgKiByZXN1bHQgaW4gcHJvYmxlbXMgbGF0ZXIgd2hlbiB0aGUgc3lzdGVtIGF0dGVtcHRzIHRvIGRyb3AvcHV0IHRoZSBmaWxlXFxuMjQ1OTpcXHQgKiByZWZlcmVuY2VzIGR1ZSB0byBhIGNpcmN1bGFyIGRlcGVuZGVuY3kuXFxuMjQ2MDpcXHQgKlxcbjI0NjE6XFx0ICogUmV0dXJuOiBSZXR1cm4gMCBpZiB0aGUgaG9vayBpcyBzdWNjZXNzZnVsLCBuZWdhdGl2ZSB2YWx1ZXMgb3RoZXJ3aXNlLlxcbjI0NjI6XFx0ICovXFxuMjQ2MzpcXHRpbnQgc2VjdXJpdHlfYmFja2luZ19maWxlX2FsbG9jKHN0cnVjdCBmaWxlICpiYWNraW5nX2ZpbGUsXFxuMjQ2NDpcXHRcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgZmlsZSAqdXNlcl9maWxlKVxcbjI0NjU6XFx0e1xcbjI0NjY6XFx0XFx0aW50IHJjO1xcbjI0Njc6XFx0XFxuMjQ2ODpcXHRcXHRyYyA9IGxzbV9iYWNraW5nX2ZpbGVfYWxsb2MoYmFja2luZ19maWxlKTtcXG4yNDY5OlxcdFxcdGlmIChyYylcXG4yNDcwOlxcdFxcdFxcdHJldHVybiByYztcXG4yNDcxOlxcdFxcdHJjID0gY2FsbF9pbnRfaG9vayhiYWNraW5nX2ZpbGVfYWxsb2MsIGJhY2tpbmdfZmlsZSwgdXNlcl9maWxlKTtcXG4yNDcyOlxcdFxcdGlmICh1bmxpa2VseShyYykpXFxuMjQ3MzpcXHRcXHRcXHRzZWN1cml0eV9iYWNraW5nX2ZpbGVfZnJlZShiYWNraW5nX2ZpbGUpO1xcbjI0NzQ6XFx0XFxuMjQ3NTpcXHRcXHRyZXR1cm4gcmM7XFxuMjQ3NjpcXHR9XFxuMjQ3NzpcXHRcXG4yNDc4OlxcdC8qKlxcbjI0Nzk6XFx0ICogc2VjdXJpdHlfYmFja2luZ19maWxlX2ZyZWUoKSAtIEZyZWUgYSBiYWNraW5nIGZpbGUgYmxvYlxcbjI0ODA6XFx0ICogQGJhY2tpbmdfZmlsZTogdGhlIGJhY2tpbmcgZmlsZVxcbjI0ODE6XFx0ICpcXG4yNDgyOlxcdCAqIEZyZWUgYW55IExTTSBzdGF0ZSBhc3NvY2lhdGUgd2l0aCBhIGJhY2tpbmcgZmlsZSdzIExTTSBibG9iLCBpbmNsdWRpbmcgdGhlXFxuMjQ4MzpcXHQgKiBibG9iIGl0c2VsZi5cXG4yNDg0OlxcdCAqL1xcbjI0ODU6XFx0dm9pZCBzZWN1cml0eV9iYWNraW5nX2ZpbGVfZnJlZShzdHJ1Y3QgZmlsZSAqYmFja2luZ19maWxlKVxcbjI0ODY6XFx0e1xcbjI0ODc6XFx0XFx0dm9pZCAqYmxvYiA9IGJhY2tpbmdfZmlsZV9zZWN1cml0eShiYWNraW5nX2ZpbGUpO1xcbjI0ODg6XFx0XFxuMjQ4OTpcXHRcXHRjYWxsX3ZvaWRfaG9vayhiYWNraW5nX2ZpbGVfZnJlZSwgYmFja2luZ19maWxlKTtcXG4yNDkwOlxcdFxcbjI0OTE6XFx0XFx0aWYgKGJsb2IpIHtcXG4yNDkyOlxcdFxcdFxcdGJhY2tpbmdfZmlsZV9zZXRfc2VjdXJpdHkoYmFja2luZ19maWxlLCBOVUxMKTtcXG4yNDkzOlxcdFxcdFxcdGttZW1fY2FjaGVfZnJlZShsc21fYmFja2luZ19maWxlX2NhY2hlLCBibG9iKTtcXG4yNDk0OlxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMjI6MjQ6MTAuNzM5NjQ1MzA1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1MzcxOTQ3NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgc2VjdXJpdHlfZmlsZV9tcHJvdGVjdGAgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyB3ZSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyBhcm91bmQgYHNlY3VyaXR5X2ZpbGVfbXByb3RlY3RgIGluIGBzZWN1cml0eS9zZWN1cml0eS5jYC4gVGhhdCdzIHdoZXJlIHRoZSBmaWxlIHByb3RlY3Rpb24gbWFnaWMgaGFwcGVucywgc28gaXQncyBhIGNyaXRpY2FsIGFyZWEgZm9yIGV4YW1pbmluZyBwb3RlbnRpYWwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzIG9yIGNvbnRyb2wgZmxvdy4gSSdtIGdvaW5nIHRvIHB1bGwgdXAgdGhlIGNvZGUgYW5kIHN0YXJ0IHRyYWNpbmcgdGhlIGNhbGxzLCBsb29raW5nIGZvciBhbnkgb2J2aW91cyBob2xlcyBvciBhcmVhcyB0aGF0IG1pZ2h0IGJlIGV4cGxvaXRhYmxlLiBTcGVjaWZpY2FsbHksIEknbGwgYmUgbG9va2luZyBhdCBob3cgZmlsZSBhY2Nlc3MgcGVybWlzc2lvbnMgYXJlIGhhbmRsZWQgaW4gY29uanVuY3Rpb24gd2l0aCBtZW1vcnkgcHJvdGVjdGlvbiBjaGFuZ2VzLiBBcmUgdGhlcmUgcmFjZSBjb25kaXRpb25zPyBBcmUgdGhlcmUgaW5zdWZmaWNpZW50IGNoZWNrcyBvbiB1c2VyIGlucHV0PyBBcmUgdGhlcmUgd2F5cyB0byBieXBhc3MgdGhlIGludGVuZGVkIHNlY3VyaXR5IHJlc3RyaWN0aW9ucyB0aHJvdWdoIGNsZXZlciBtYW5pcHVsYXRpb24gb2YgdGhlIHN5c3RlbSBjYWxscz8gSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBjb250ZXh0IGluIHdoaWNoIGBzZWN1cml0eV9maWxlX21wcm90ZWN0YCBpcyBiZWluZyBpbnZva2VkLCBpbmNsdWRpbmcgd2hhdCBvdGhlciBzZWN1cml0eSBtb2R1bGVzIG9yIGhvb2tzIGFyZSBhY3RpdmUgYXQgdGhlIHRpbWUuIEknbGwgbmVlZCB0byBsb29rIGF0IGFueSBpbnRlcmFjdGlvbiB3aXRoIExTTXMsIGJlY2F1c2UgdGhhdCdzIGFsd2F5cyBhbiBpbXBvcnRhbnQgZGV0YWlsLiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MzQ5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQyMjoyNDoxMy4yNzY4NDE3OTZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc2NDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcInNlY3VyaXR5L3NlY3VyaXR5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjYyNSxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjYyNTpcXHQgKiBzZWN1cml0eV9maWxlX21wcm90ZWN0KCkgLSBDaGVjayBpZiBjaGFuZ2luZyBtZW1vcnkgcHJvdGVjdGlvbnMgaXMgYWxsb3dlZFxcbjI2MjY6XFx0ICogQHZtYTogbWVtb3J5IHJlZ2lvblxcbjI2Mjc6XFx0ICogQHJlcXByb3Q6IGFwcGxpY2F0aW9uIHJlcXVlc3RlZCBwcm90ZWN0aW9uXFxuMjYyODpcXHQgKiBAcHJvdDogcHJvdGVjdGlvbiBhcHBsaWVkIGJ5IHRoZSBrZXJuZWxcXG4yNjI5OlxcdCAqXFxuMjYzMDpcXHQgKiBDaGVjayBwZXJtaXNzaW9ucyBiZWZvcmUgY2hhbmdpbmcgbWVtb3J5IGFjY2VzcyBwZXJtaXNzaW9ucy5cXG4yNjMxOlxcdCAqXFxuMjYzMjpcXHQgKiBSZXR1cm46IFJldHVybnMgMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuXFxuMjYzMzpcXHQgKi9cXG4yNjM0OlxcdGludCBzZWN1cml0eV9maWxlX21wcm90ZWN0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHJlcXByb3QsXFxuMjYzNTpcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIHByb3QpXFxuMjYzNjpcXHR7XFxuMjYzNzpcXHRcXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhmaWxlX21wcm90ZWN0LCB2bWEsIHJlcXByb3QsIHByb3QpO1xcbjI2Mzg6XFx0fVxcbjI2Mzk6XFx0XFxuMjY0MDpcXHQvKipcXG4yNjQxOlxcdCAqIHNlY3VyaXR5X2ZpbGVfbG9jaygpIC0gQ2hlY2sgaWYgYSBmaWxlIGxvY2sgaXMgYWxsb3dlZFxcbjI2NDI6XFx0ICogQGZpbGU6IGZpbGVcXG4yNjQzOlxcdCAqIEBjbWQ6IGxvY2sgb3BlcmF0aW9uIChlLmcuIEZfUkRMQ0ssIEZfV1JMQ0spXFxuMjY0NDpcXHQgKlxcbjI2NDU6XFx0ICogQ2hlY2sgcGVybWlzc2lvbiBiZWZvcmUgcGVyZm9ybWluZyBmaWxlIGxvY2tpbmcgb3BlcmF0aW9ucy4gIE5vdGUgdGhlIGhvb2tcXG4yNjQ2OlxcdCAqIG1lZGlhdGVzIGJvdGggZmxvY2sgYW5kIGZjbnRsIHN0eWxlIGxvY2tzLlxcbjI2NDc6XFx0ICpcXG4yNjQ4OlxcdCAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC5cXG4yNjQ5OlxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQyMjoyNDoxMy4yNzczMjY0MzZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTEzNjUxMjc1MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgS2NvbmZpZyBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBmcm9tIGEgY29uZmlndXJhdGlvbiBwZXJzcGVjdGl2ZS4gSSBuZWVkIHRvIG5haWwgZG93biB0aGUgU0VMaW51eCByZXF1aXJlbWVudHMgZmlyc3QuIEp1bXBpbmcgaW50byBgc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnYCwgSSBzZWUgYFNFQ1VSSVRZX1NFTElOVVhgIGlzIHRoZSBrZXkuIEl0J3MgYSBib29sZWFuLCBkZXBlbmRlbnQgb24gYFNFQ1VSSVRZX05FVFdPUktgLCBgQVVESVRgLCBgTkVUYCwgYW5kIGBJTkVUYCwgYW5kIGl0IGBzZWxlY3RgcyBgTkVUV09SS19TRUNNQVJLYCwgd2l0aCBhIGRlZmF1bHQgb2YgJ24nLiBMb29rcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLlxuXG5Ob3csIGxldCdzIGRvdWJsZS1jaGVjayB0aGUgZGVwZW5kZW5jaWVzLiBgU0VDVVJJVFlfTkVUV09SS2AgcmVsaWVzIG9uIGJvdGggYFNFQ1VSSVRZYCBhbmQgYE5FVGAsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIGtub3cgYEFVRElUYCBsaXZlcyBpbiBgaW5pdC9LY29uZmlnYCwgYW5kIGBJTkVUYCBpcyBqdXN0IGBDT05GSUdfSU5FVGAuIEV4Y2VsbGVudCwgSSd2ZSBnb3QgdGhlIGNvcmUgU0VMaW51eCBkZXBlbmRlbmNpZXMgY2xlYXJseSBtYXBwZWQuXG5cbkJ1dCB0aGF0J3MgcHJvYmFibHkgbm90IHRoZSB3aG9sZSBzdG9yeS4gSSBzaG91bGQgZXhwbG9yZSBvdGhlciBwb3RlbnRpYWxseSByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLCBub3QganVzdCB0aGUgb2J2aW91cy4gVGhlIGNvbW1pdCBtZXNzYWdlIG1lbnRpb25zIGBPVkVSTEFZX0ZTYCBhbmQgYEVST0ZTX0ZTYCwgc28gbGV0J3MgZGlnIGludG8gdGhvc2Ugc3BlY2lmaWNhbGx5LiBUaGUgbWVudGlvbiBvZiBiYWNraW5nIGZpbGVzLCBgc19zdGFja19kZXB0aGAsIGFuZCBpbm9kZSBzaGFyaW5nIGluZGljYXRlcyBhIHBvdGVudGlhbCBpbnRlcmFjdGlvbi4gTGV0J3Mgc3RhcnQgd2l0aCBgT1ZFUkxBWV9GU2AgaW4gYGZzL292ZXJsYXlmcy9LY29uZmlnYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkwMjEsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQyMjoyNDoyNC42NDI0NTg1MTRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4MTQyNDAwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgT1ZFUkxBWV9GU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvb3ZlcmxheWZzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9vdmVybGF5ZnMvS2NvbmZpZzoyOmNvbmZpZyBPVkVSTEFZX0ZTXFxuZnMvb3ZlcmxheWZzL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiT3ZlcmxheSBmaWxlc3lzdGVtIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9vdmVybGF5ZnMvS2NvbmZpZy0xNC1cXG5mcy9vdmVybGF5ZnMvS2NvbmZpZzoxNTpjb25maWcgT1ZFUkxBWV9GU19SRURJUkVDVF9ESVJcXG5mcy9vdmVybGF5ZnMvS2NvbmZpZy0xNi1cXHRib29sIFxcXCJPdmVybGF5ZnM6IHR1cm4gb24gcmVkaXJlY3QgZGlyZWN0b3J5IGZlYXR1cmUgYnkgZGVmYXVsdFxcXCJcXG4tLVxcbmZzL292ZXJsYXlmcy9LY29uZmlnLTMwLVxcbmZzL292ZXJsYXlmcy9LY29uZmlnOjMxOmNvbmZpZyBPVkVSTEFZX0ZTX1JFRElSRUNUX0FMV0FZU19GT0xMT1dcXG5mcy9vdmVybGF5ZnMvS2NvbmZpZy0zMi1cXHRib29sIFxcXCJPdmVybGF5ZnM6IGZvbGxvdyByZWRpcmVjdHMgZXZlbiBpZiByZWRpcmVjdHMgYXJlIHR1cm5lZCBvZmZcXFwiXFxuLS1cXG5mcy9vdmVybGF5ZnMvS2NvbmZpZy00NS1cXG5mcy9vdmVybGF5ZnMvS2NvbmZpZzo0Njpjb25maWcgT1ZFUkxBWV9GU19JTkRFWFxcbmZzL292ZXJsYXlmcy9LY29uZmlnLTQ3LVxcdGJvb2wgXFxcIk92ZXJsYXlmczogdHVybiBvbiBpbm9kZXMgaW5kZXggZmVhdHVyZSBieSBkZWZhdWx0XFxcIlxcbi0tXFxuZnMvb3ZlcmxheWZzL0tjb25maWctNjQtXFxuZnMvb3ZlcmxheWZzL0tjb25maWc6NjU6Y29uZmlnIE9WRVJMQVlfRlNfTkZTX0VYUE9SVFxcbmZzL292ZXJsYXlmcy9LY29uZmlnLTY2LVxcdGJvb2wgXFxcIk92ZXJsYXlmczogdHVybiBvbiBORlMgZXhwb3J0IGZlYXR1cmUgYnkgZGVmYXVsdFxcXCJcXG4tLVxcbmZzL292ZXJsYXlmcy9LY29uZmlnLTkyLVxcbmZzL292ZXJsYXlmcy9LY29uZmlnOjkzOmNvbmZpZyBPVkVSTEFZX0ZTX1hJTk9fQVVUT1xcbmZzL292ZXJsYXlmcy9LY29uZmlnLTk0LVxcdGJvb2wgXFxcIk92ZXJsYXlmczogYXV0byBlbmFibGUgaW5vZGUgbnVtYmVyIG1hcHBpbmdcXFwiXFxuLS1cXG5mcy9vdmVybGF5ZnMvS2NvbmZpZy0xMTAtXFxuZnMvb3ZlcmxheWZzL0tjb25maWc6MTExOmNvbmZpZyBPVkVSTEFZX0ZTX01FVEFDT1BZXFxuZnMvb3ZlcmxheWZzL0tjb25maWctMTEyLVxcdGJvb2wgXFxcIk92ZXJsYXlmczogdHVybiBvbiBtZXRhZGF0YSBvbmx5IGNvcHkgdXAgZmVhdHVyZSBieSBkZWZhdWx0XFxcIlxcbi0tXFxuZnMvb3ZlcmxheWZzL0tjb25maWctMTI4LVxcbmZzL292ZXJsYXlmcy9LY29uZmlnOjEyOTpjb25maWcgT1ZFUkxBWV9GU19ERUJVR1xcbmZzL292ZXJsYXlmcy9LY29uZmlnLTEzMC1cXHRib29sIFxcXCJPdmVybGF5ZnM6IHR1cm4gb24gZXh0cmEgZGVidWdnaW5nIGNoZWNrc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMjI6MjQ6MjUuMzIzODg4MzMzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMyMDA5NDk4NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBleHBlcnQgcGVyc3BlY3RpdmU6XG5cbioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgQmFja2luZyBGaWxlIFVzYWdlIGluIEZpbGVzeXN0ZW1zKipcblxuUmlnaHQsIGxldCdzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBgT1ZFUkxBWV9GU2Agb3IgYW55IHJlbGF0ZWQgZmlsZXN5c3RlbXMgYXJlIGVtcGxveWluZyBiYWNraW5nIGZpbGVzIGluIHRoZWlyIGltcGxlbWVudGF0aW9uLiBUaGF0J3MgYSBjcnVjaWFsIGFzcGVjdCBmb3IgdW5kZXJzdGFuZGluZyB0aGVpciBiZWhhdmlvciwgZXNwZWNpYWxseSB3aGVuIGl0IGNvbWVzIHRvIHBlcmZvcm1hbmNlLCBkYXRhIHBlcnNpc3RlbmNlLCBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGUgdW5kZXJseWluZyBzdG9yYWdlLiBUbyBkbyB0aGF0LCBJJ2xsIGdvIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2UgY29kZS4gTXkgcHJlZmVycmVkIGFwcHJvYWNoPyBBIHRhcmdldGVkIGdyZXAuIEknbGwgc2VhcmNoIGZvciBzcGVjaWZpYyBmdW5jdGlvbiBuYW1lcyB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2VzIHRoYXQgYXJlIGhpZ2hseSBzdWdnZXN0aXZlIG9mIGJhY2tpbmcgZmlsZSBvcGVyYXRpb25zLiBJJ2xsIGZvY3VzIG9uIGBiYWNraW5nX2ZpbGVfb3BlbmAgYW5kIGBpbml0X2JhY2tpbmdfZmlsZWAuIFRob3NlIGFyZSB0aGUgdHdvIGZ1bmN0aW9ucyB0aGF0IHdvdWxkIHR5cGljYWxseSBiZSBpbnZvbHZlZCB3aGVuIGEgZmlsZXN5c3RlbSBuZWVkcyB0byBkZWFsIHdpdGggYSBiYWNraW5nIGZpbGUgdG8gc3VwcG9ydCBvcGVyYXRpb25zLCBzbyBJIGtub3cgdGhvc2Ugd291bGQgZ2l2ZSBtZSB1c2VmdWwgcmVzdWx0cy4gSSdtIGV4cGVjdGluZyB0aGlzIHdpbGwgcXVpY2tseSBsZWFkIG1lIHRvIHRoZSBrZXkgbG9jYXRpb25zIGluIHRoZSBjb2RlIHRoYXQgSSBuZWVkIHRvIGV4YW1pbmUgbW9yZSBjbG9zZWx5IHRvIHNlZSBwcmVjaXNlbHkgaG93IGJhY2tpbmcgZmlsZXMgYXJlIHVzZWQuIE9uY2UgSSBmaW5kIHRob3NlIGluc3RhbmNlcyBJIGNhbiBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGUgaXNzdWUgbXVjaCBxdWlja2VyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDExOSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDIyOjI0OjI4LjUyNDg0MjQ5NVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA4Mzg4Mzk4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJiYWNraW5nX2ZpbGVfb3BlblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9iYWNraW5nLWZpbGUuYy0xOS0vKipcXG5mcy9iYWNraW5nLWZpbGUuYzoyMDogKiBiYWNraW5nX2ZpbGVfb3BlbiAtIG9wZW4gYSBiYWNraW5nIGZpbGUgZm9yIGtlcm5lbCBpbnRlcm5hbCB1c2VcXG5mcy9iYWNraW5nLWZpbGUuYy0yMS0gKiBAdXNlcl9maWxlOiAgZmlsZSB0aGUgdXNlciByZXF1ZXN0ZWQgdG8gb3Blblxcbi0tXFxuZnMvYmFja2luZy1maWxlLmMtMzMtICovXFxuZnMvYmFja2luZy1maWxlLmM6MzQ6c3RydWN0IGZpbGUgKmJhY2tpbmdfZmlsZV9vcGVuKGNvbnN0IHN0cnVjdCBmaWxlICp1c2VyX2ZpbGUsIGludCBmbGFncyxcXG5mcy9iYWNraW5nLWZpbGUuYy0zNS1cXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IHBhdGggKnJlYWxfcGF0aCxcXG4tLVxcbmZzL2JhY2tpbmctZmlsZS5jLTU1LX1cXG5mcy9iYWNraW5nLWZpbGUuYzo1NjpFWFBPUlRfU1lNQk9MX0dQTChiYWNraW5nX2ZpbGVfb3Blbik7XFxuZnMvYmFja2luZy1maWxlLmMtNTctXFxuLS1cXG5mcy9lcm9mcy9pc2hhcmUuYz05Nj1zdGF0aWMgaW50IGVyb2ZzX2lzaGFyZV9maWxlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuLS1cXG5mcy9lcm9mcy9pc2hhcmUuYy0xMDYtXFxuZnMvZXJvZnMvaXNoYXJlLmM6MTA3OlxcdHJmID0gYmFja2luZ19maWxlX29wZW4oZmlsZSwgZmlsZS1cXHUwMDNlZl9mbGFncyB8IE9fTk9BVElNRSxcXG5mcy9lcm9mcy9pc2hhcmUuYy0xMDgtXFx0XFx0XFx0ICAgICAgIFxcdTAwMjZzaGFyZWRwYXRoLCBjdXJyZW50X2NyZWQoKSk7XFxuLS1cXG5mcy9mdXNlL3Bhc3N0aHJvdWdoLmM9MTUyPXN0cnVjdCBmdXNlX2JhY2tpbmcgKmZ1c2VfcGFzc3Rocm91Z2hfb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IGJhY2tpbmdfaWQpXFxuLS1cXG5mcy9mdXNlL3Bhc3N0aHJvdWdoLmMtMTY5LVxcdC8qIEFsbG9jYXRlIGJhY2tpbmcgZmlsZSBwZXIgZnVzZSBmaWxlIHRvIHN0b3JlIGZ1c2UgcGF0aCAqL1xcbmZzL2Z1c2UvcGFzc3Rocm91Z2guYzoxNzA6XFx0YmFja2luZ19maWxlID0gYmFja2luZ19maWxlX29wZW4oZmlsZSwgZmlsZS1cXHUwMDNlZl9mbGFncyxcXG5mcy9mdXNlL3Bhc3N0aHJvdWdoLmMtMTcxLVxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2ZmItXFx1MDAzZWZpbGUtXFx1MDAzZWZfcGF0aCwgZmItXFx1MDAzZWNyZWQpO1xcbi0tXFxuZnMvb3ZlcmxheWZzL2ZpbGUuYz0yOD1zdGF0aWMgc3RydWN0IGZpbGUgKm92bF9vcGVuX3JlYWxmaWxlKGNvbnN0IHN0cnVjdCBmaWxlICpmaWxlLFxcbi0tXFxuZnMvb3ZlcmxheWZzL2ZpbGUuYy01MC1cXG5mcy9vdmVybGF5ZnMvZmlsZS5jOjUxOlxcdFxcdFxcdHJlYWxmaWxlID0gYmFja2luZ19maWxlX29wZW4oZmlsZSxcXG5mcy9vdmVybGF5ZnMvZmlsZS5jLTUyLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgZmxhZ3MsIHJlYWxwYXRoLCBjdXJyZW50X2NyZWQoKSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JhY2tpbmctZmlsZS5oPTE1PXN0cnVjdCBiYWNraW5nX2ZpbGVfY3R4IHtcXG4tLVxcbmluY2x1ZGUvbGludXgvYmFja2luZy1maWxlLmgtMjAtXFxuaW5jbHVkZS9saW51eC9iYWNraW5nLWZpbGUuaDoyMTpzdHJ1Y3QgZmlsZSAqYmFja2luZ19maWxlX29wZW4oY29uc3Qgc3RydWN0IGZpbGUgKnVzZXJfZmlsZSwgaW50IGZsYWdzLFxcbmluY2x1ZGUvbGludXgvYmFja2luZy1maWxlLmgtMjItXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBwYXRoICpyZWFsX3BhdGgsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDIyOjI0OjMwLjYwODczMzY1M1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NzIxNjY4OTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBTRUxpbnV4IEJhY2tpbmcgRmlsZSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEknbSBub3RpbmcgdGhlIGNhbGxlcnMgb2YgYGJhY2tpbmdfZmlsZV9vcGVuYDogYG92ZXJsYXlmc2AsIGBlcm9mc2AsIGFuZCBgZnVzZWAuIFRoYXQncyBpbXBvcnRhbnQgY29udGV4dC4gVGhpcyBwYXRjaCBhcHBlYXJzIHJlbGF0ZWQgdG8gaGFuZGxpbmcgc2VjdXJpdHkgaW1wbGljYXRpb25zIHdoZW4gdGhlc2UgZmlsZXN5c3RlbXMgdXNlIGJhY2tpbmcgZmlsZXMsIHBhcnRpY3VsYXJseSBpbiBhIG11bHRpLWxheWVyZWQgY29udGV4dC4gQW5kIGFzIGV4cGVjdGVkLCBlbmFibGluZyBTRUxpbnV4IHJlcXVpcmVzIGEgc3BlY2lmaWMgc2V0IG9mIGNvbmZpZ3M6IGBTRUNVUklUWV9TRUxJTlVYYCwgYFNFQ1VSSVRZYCwgYEFVRElUYCwgYE5FVGAsIGBJTkVUYCwgYW5kIGBTRUNVUklUWV9ORVRXT1JLYC4gVGhlIHByZXNlbmNlIG9mIGBDT05GSUdfT1ZFUkxBWV9GU2AgaXMgY3JpdGljYWwgdG8gcmVhbGx5ICpzZWUqIHRoZSBiZWhhdmlvciBiZWluZyBhZGRyZXNzZWQuXG5cbk5vdywgbGV0J3MgcXVpY2tseSByZXZpZXcgdGhvc2UgU0VMaW51eCBzeW1ib2xzIHRoYXQgYXJlIHRoZSBmb2N1cyBoZXJlOiBgc2VsaW51eF9iYWNraW5nX2ZpbGVfYWxsb2NgLCBgc2VsaW51eF9iYWNraW5nX2ZpbGVfZnJlZWAsIGBzZWxpbnV4X2ZpbGVfbXByb3RlY3RgLCBgc2VjdXJpdHlfYmFja2luZ19maWxlX2FsbG9jYCwgYHNlY3VyaXR5X2JhY2tpbmdfZmlsZV9mcmVlYCwgYW5kIGBzZWN1cml0eV9maWxlX21wcm90ZWN0YC4gR29vZCwgdGhlc2UgYXJlIHRoZSBob29rcyBhbmQgd3JhcHBlcnMuIFRoYXQgY29uZmlybXMgdGhhdCB3ZSBhcmUgZGVhbGluZyB3aXRoIGVudHJ5cG9pbnRzIHRoYXQgaGF2ZSBiZWVuIGFsdGVyZWQgaW4gdGhlIGNvZGUuIEkgZG9uJ3Qgc2VlIGFueXRoaW5nIGdlbmVyaWMgaGVyZSwgdGhlc2UgYXJlIHNlY3VyaXR5LXNwZWNpZmljIGhvb2tzIG9yIHdyYXBwZXJzIHRoYXQgbWFrZSBzZW5zZSB3aXRoaW4gdGhlIFNFTGludXggc3Vic3lzdGVtLlxuXG5TbywgdGhlIGNvbmZpZyBkZXBlbmRlbmNpZXMgYXJlIHRoZSBleHBlY3RlZDogYFNFQ1VSSVRZX1NFTElOVVhgLCBgU0VDVVJJVFlgLCBgU0VDVVJJVFlfTkVUV09SS2AsIGBBVURJVGAsIGBORVRgLCBgSU5FVGAsIGFuZCBgT1ZFUkxBWV9GU2AuIE5vIHN1cnByaXNlcyB0aGVyZS5cblxuTXkgcmVhc29uaW5nIGlzIHN0cmFpZ2h0Zm9yd2FyZDogdGhpcyBwYXRjaCBpcyBhYm91dCBlbmhhbmNpbmcgU0VMaW51eCB0byBjb3JyZWN0bHkgaGFuZGxlIGFuZCB2YWxpZGF0ZSBwZXJtaXNzaW9ucyB3aGVuIGRlYWxpbmcgd2l0aCBtdWx0aS1sYXllcmVkIGJhY2tpbmcgZmlsZXMuIEl0J3MgcmVhbGx5IHRhY2tsaW5nIHRoZSBpc3N1ZSBvZiBob3cgc3RhY2tlZCBmaWxlc3lzdGVtcyAobGlrZSBgb3ZlcmxheWZzYCBhbmQgYGVyb2ZzYCB3aGVuIHRoZXkgc2hhcmUgaW5vZGVzKSBpbnRlcmFjdCB3aXRoIFNFTGludXggcGVybWlzc2lvbnMgZHVyaW5nIGBtcHJvdGVjdGAgYW5kIGJhY2tpbmcgZmlsZSBhbGxvY2F0aW9uL2RlYWxsb2NhdGlvbi4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyBsaWtlIHRoZSBpbXBsZW1lbnRhdGlvbiBpbmNsdWRlcyBkeW5hbWljIGxheWVyIGFsbG9jYXRpb24sIHBhdGggcmVmZXJlbmNlIGNvdW50aW5nIGluIGBzZWxpbnV4X2JhY2tpbmdfZmlsZV9hbGxvY2AsIGNsZWFuaW5nIHVwIHByb3Blcmx5IGluIGBzZWxpbnV4X2JhY2tpbmdfZmlsZV9mcmVlYCwgYW5kIHZhbGlkYXRpbmcgcGVybWlzc2lvbnMgZm9yIGludGVybWVkaWF0ZSBtb3VudGVycyBpbiBgc2VsaW51eF9maWxlX21wcm90ZWN0YC4gVGhlc2UgY2hhbmdlcyBkaXJlY3RseSBpbmZsdWVuY2Ugc2VjdXJpdHkgcGVybWlzc2lvbiBjaGVja3MgYW5kIGJhY2tpbmcgZmlsZSBtZW1vcnkgbWFuYWdlbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEwNjAsIk91dHB1dFRva2VucyI6MjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDg0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDIyOjI0OjM2LjMzMDQwNjUwN1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyOTc1MzIwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU0VDVVJJVFlcIixcbiAgICBcIlNFQ1VSSVRZX1NFTElOVVhcIixcbiAgICBcIlNFQ1VSSVRZX05FVFdPUktcIixcbiAgICBcIkFVRElUXCIsXG4gICAgXCJORVRcIixcbiAgICBcIklORVRcIixcbiAgICBcIk9WRVJMQVlfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzZWxpbnV4X2JhY2tpbmdfZmlsZV9hbGxvY1wiLFxuICAgIFwic2VsaW51eF9iYWNraW5nX2ZpbGVfZnJlZVwiLFxuICAgIFwic2VsaW51eF9maWxlX21wcm90ZWN0XCIsXG4gICAgXCJzZWN1cml0eV9iYWNraW5nX2ZpbGVfYWxsb2NcIixcbiAgICBcInNlY3VyaXR5X2JhY2tpbmdfZmlsZV9mcmVlXCIsXG4gICAgXCJzZWN1cml0eV9maWxlX21wcm90ZWN0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0cmFja2luZyBhbmQgZW5mb3JjaW5nIFNFTGludXggcGVybWlzc2lvbnMgYWNyb3NzIG11bHRpLWxheWVyIGJhY2tpbmcgZmlsZXMgKHN1Y2ggYXMgdGhvc2UgdXNlZCBieSBvdmVybGF5ZnMgYW5kIGVyb2ZzKS4gSXQgaW1wbGVtZW50cyBkeW5hbWljIGFsbG9jYXRpb24gYW5kIHJlZmVyZW5jZSB0cmFja2luZyBvZiBpbnRlcm1lZGlhdGUgYmFja2luZyBmaWxlIGxheWVycyBpbiBzZWxpbnV4X2JhY2tpbmdfZmlsZV9hbGxvYywgY2xlYW51cCBpbiBzZWxpbnV4X2JhY2tpbmdfZmlsZV9mcmVlLCBhbmQgbXVsdGktbGF5ZXIgcGVybWlzc2lvbiBjaGVja3MgZHVyaW5nIG1wcm90ZWN0IGluIHNlbGludXhfZmlsZV9tcHJvdGVjdC4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgY29yZSBzZWN1cml0eSBhbmQgZmlsZXN5c3RlbSBpbnRlcmFjdGlvbnMgYW5kIGFyZSB3ZWxsIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU0VDVVJJVFlcIixcbiAgICBcIlNFQ1VSSVRZX1NFTElOVVhcIixcbiAgICBcIlNFQ1VSSVRZX05FVFdPUktcIixcbiAgICBcIkFVRElUXCIsXG4gICAgXCJORVRcIixcbiAgICBcIklORVRcIixcbiAgICBcIk9WRVJMQVlfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzZWxpbnV4X2JhY2tpbmdfZmlsZV9hbGxvY1wiLFxuICAgIFwic2VsaW51eF9iYWNraW5nX2ZpbGVfZnJlZVwiLFxuICAgIFwic2VsaW51eF9maWxlX21wcm90ZWN0XCIsXG4gICAgXCJzZWN1cml0eV9iYWNraW5nX2ZpbGVfYWxsb2NcIixcbiAgICBcInNlY3VyaXR5X2JhY2tpbmdfZmlsZV9mcmVlXCIsXG4gICAgXCJzZWN1cml0eV9maWxlX21wcm90ZWN0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0cmFja2luZyBhbmQgZW5mb3JjaW5nIFNFTGludXggcGVybWlzc2lvbnMgYWNyb3NzIG11bHRpLWxheWVyIGJhY2tpbmcgZmlsZXMgKHN1Y2ggYXMgdGhvc2UgdXNlZCBieSBvdmVybGF5ZnMgYW5kIGVyb2ZzKS4gSXQgaW1wbGVtZW50cyBkeW5hbWljIGFsbG9jYXRpb24gYW5kIHJlZmVyZW5jZSB0cmFja2luZyBvZiBpbnRlcm1lZGlhdGUgYmFja2luZyBmaWxlIGxheWVycyBpbiBzZWxpbnV4X2JhY2tpbmdfZmlsZV9hbGxvYywgY2xlYW51cCBpbiBzZWxpbnV4X2JhY2tpbmdfZmlsZV9mcmVlLCBhbmQgbXVsdGktbGF5ZXIgcGVybWlzc2lvbiBjaGVja3MgZHVyaW5nIG1wcm90ZWN0IGluIHNlbGludXhfZmlsZV9tcHJvdGVjdC4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgY29yZSBzZWN1cml0eSBhbmQgZmlsZXN5c3RlbSBpbnRlcmFjdGlvbnMgYW5kIGFyZSB3ZWxsIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDIyOjI0OjM2LjQ2MDE2OTE0NVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDA0MTA1ODMxMzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQyMjoyNDozNi40NjA5MTc4NDVaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0MDQwOTgyODc3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZXh0ZW5kcyBTRUxpbnV4IGJhY2tpbmcgZmlsZSB0cmFja2luZyB0byBoYW5kbGUgbXVsdGlwbGUgbGF5ZXJzIGluIHN0YWNrZWQgZmlsZXN5c3RlbXMgKHN1Y2ggYXMgb3ZlcmxheWZzIGFuZCBlcm9mcykgYnkgaW50cm9kdWNpbmcgaW50ZXJtZWRpYXRlIGJhY2tpbmcgbGF5ZXIgc3RydWN0dXJlcywgcmVjb3JkaW5nIHBhdGhzIGFuZCBTSURzLCBhbmQgdmFsaWRhdGluZyBtb3VudGVyIHBlcm1pc3Npb25zIGR1cmluZyBmaWxlIG1tYXAvbXByb3RlY3Qgb3BlcmF0aW9ucy5cXG5cXG5BbGwgbmV3bHkgYWxsb2NhdGVkIGhlYXAgc3RydWN0dXJlcyAoYGJhY2tpbmdfZmlsZV9zZWN1cml0eV9sYXllcmAgYXJyYXlzKSBhcmUgZXhwbGljaXRseSBhbmQgZnVsbHkgaW5pdGlhbGl6ZWQgdXBvbiBhbGxvY2F0aW9uIGJlZm9yZSB1c2Ugb3IgY29weWluZy4gVGhlIGNvbnRhaW5pbmcgYGJhY2tpbmdfZmlsZV9zZWN1cml0eV9zdHJ1Y3RgIGJsb2IgaXMgYWxsb2NhdGVkIHZpYSBga21lbV9jYWNoZV96YWxsb2NgLiBUaGUgYXVkaXQgZGF0YSBzdGFjayBzdHJ1Y3R1cmUgYHN0cnVjdCBjb21tb25fYXVkaXRfZGF0YSBhZGAgaXMgcHJvcGVybHkgY29uZmlndXJlZCB3aXRoIGB0eXBlID0gTFNNX0FVRElUX0RBVEFfUEFUSGAgYW5kIHRoZSBwYXRoIHVuaW9uIG1lbWJlciBhc3NpZ25lZCBiZWZvcmUgcGFzc2luZyB0byB0aGUgYXVkaXQvQVZDIHN1YnN5c3RlbS4gTm8gZGF0YSBpcyBleHBvc2VkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgdGhlcmUgaXMgbm8gYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBQb3RlbnRpYWwgcmlza3MgaW4gdGhpcyBwYXRjaCAoc3VjaCBhcyBsaWZldGltZSBpc3N1ZXMsIHJlZmNvdW50aW5nLCBwYXRoIG1hbmFnZW1lbnQsIG9yIG91dC1vZi1ib3VuZHMgaW5kZXhpbmcpIGZhbGwgd2l0aGluIHRoZSBzY29wZSBvZiBLQVNBTiByYXRoZXIgdGhhbiBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmYTdhMGI1NTA2MjJjNjQ1ZDYyY2Y5YTM2NDk4YTdjYWJkNzI2Y2I2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMjkgMjI6MjM6MjEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNcbmluZGV4IDAzNWFhZjExM2QxZGEuLmI2NzUwZWRjYzQ3ODMgMTAwNjQ0XG4tLS0gYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNcbisrKyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuY1xuQEAgLTE2NzQsMjYgKzE2NzQsMzIgQEAgc3RhdGljIGludCBjcmVkX2hhc19jYXBhYmlsaXR5KGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkLFxuIFx0cmV0dXJuIHJjO1xuIH1cbiBcbi0vKiBDaGVjayB3aGV0aGVyIGEgdGFzayBoYXMgYSBwYXJ0aWN1bGFyIHBlcm1pc3Npb24gdG8gYW4gaW5vZGUuXG4tICAgVGhlICdhZHAnIHBhcmFtZXRlciBpcyBvcHRpb25hbCBhbmQgYWxsb3dzIG90aGVyIGF1ZGl0XG4tICAgZGF0YSB0byBiZSBwYXNzZWQgKGUuZy4gdGhlIGRlbnRyeSkuICovXG4tc3RhdGljIGludCBpbm9kZV9oYXNfcGVybShjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCxcbi1cdFx0XHQgIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tXHRcdFx0ICB1MzIgcGVybXMsXG4tXHRcdFx0ICBzdHJ1Y3QgY29tbW9uX2F1ZGl0X2RhdGEgKmFkcClcbisvKlxuKyAqIENoZWNrIHdoZXRoZXIgYSBTSUQgaGFzIGEgcGFydGljdWxhciBwZXJtaXNzaW9uIHRvIGFuIGlub2RlLiAgVGhlICdhZHAnXG4rICogcGFyYW1ldGVyIGlzIG9wdGlvbmFsIGFuZCBhbGxvd3Mgb3RoZXIgYXVkaXQgZGF0YSB0byBiZSBwYXNzZWQgKGUuZy4gdGhlXG4rICogZGVudHJ5KS5cbisgKi9cbitzdGF0aWMgaW50IGlub2RlX3NpZF9oYXNfcGVybSh1MzIgc2lkLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgcGVybXMsXG4rXHRcdFx0ICAgICAgc3RydWN0IGNvbW1vbl9hdWRpdF9kYXRhICphZHApXG4ge1xuIFx0c3RydWN0IGlub2RlX3NlY3VyaXR5X3N0cnVjdCAqaXNlYztcbi1cdHUzMiBzaWQ7XG4gXG4gXHRpZiAodW5saWtlbHkoSVNfUFJJVkFURShpbm9kZSkpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdHNpZCA9IGNyZWRfc2lkKGNyZWQpO1xuIFx0aXNlYyA9IHNlbGludXhfaW5vZGUoaW5vZGUpO1xuIFxuIFx0cmV0dXJuIGF2Y19oYXNfcGVybShzaWQsIGlzZWMtXHUwMDNlc2lkLCBpc2VjLVx1MDAzZXNjbGFzcywgcGVybXMsIGFkcCk7XG4gfVxuIFxuK3N0YXRpYyBpbnQgaW5vZGVfaGFzX3Blcm0oY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQsXG4rXHRcdFx0ICBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuK1x0XHRcdCAgdTMyIHBlcm1zLFxuK1x0XHRcdCAgc3RydWN0IGNvbW1vbl9hdWRpdF9kYXRhICphZHApXG4re1xuK1x0cmV0dXJuIGlub2RlX3NpZF9oYXNfcGVybShjcmVkX3NpZChjcmVkKSwgaW5vZGUsIHBlcm1zLCBhZHApO1xuK31cbitcbiAvKiBTYW1lIGFzIGlub2RlX2hhc19wZXJtLCBidXQgcGFzcyBleHBsaWNpdCBhdWRpdCBkYXRhIGNvbnRhaW5pbmdcbiAgICB0aGUgZGVudHJ5IHRvIGhlbHAgdGhlIGF1ZGl0aW5nIGNvZGUgdG8gbW9yZSBlYXNpbHkgZ2VuZXJhdGUgdGhlXG4gICAgcGF0aG5hbWUgaWYgbmVlZGVkLiAqL1xuQEAgLTM4NDMsMTcgKzM4NDksNzQgQEAgc3RhdGljIGludCBzZWxpbnV4X2ZpbGVfYWxsb2Nfc2VjdXJpdHkoc3RydWN0IGZpbGUgKmZpbGUpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGlubGluZSB1MzIgc2VsaW51eF9maWxlX3VzZXJfc2lkKGNvbnN0IHN0cnVjdCBmaWxlICpmaWxlKVxuK3tcbitcdGlmICh1bmxpa2VseShmaWxlLVx1MDAzZWZfbW9kZSBcdTAwMjYgRk1PREVfQkFDS0lORykpXG4rXHRcdHJldHVybiBzZWxpbnV4X2JhY2tpbmdfZmlsZShmaWxlKS1cdTAwM2V1Zl9zaWQ7XG4rXHRyZXR1cm4gc2VsaW51eF9maWxlKGZpbGUpLVx1MDAzZXNpZDtcbit9XG4rXG4gc3RhdGljIGludCBzZWxpbnV4X2JhY2tpbmdfZmlsZV9hbGxvYyhzdHJ1Y3QgZmlsZSAqYmFja2luZ19maWxlLFxuIFx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGZpbGUgKnVzZXJfZmlsZSlcbiB7XG4gXHRzdHJ1Y3QgYmFja2luZ19maWxlX3NlY3VyaXR5X3N0cnVjdCAqYmZzZWM7XG4rXHRjb25zdCBzdHJ1Y3QgYmFja2luZ19maWxlX3NlY3VyaXR5X3N0cnVjdCAqdWJmc2VjO1xuK1x0c3RydWN0IGJhY2tpbmdfZmlsZV9zZWN1cml0eV9sYXllciAqbGF5ZXI7XG4rXHR1MzIgaTtcbiBcbiBcdGJmc2VjID0gc2VsaW51eF9iYWNraW5nX2ZpbGUoYmFja2luZ19maWxlKTtcbi1cdGJmc2VjLVx1MDAzZXVmX3NpZCA9IHNlbGludXhfZmlsZSh1c2VyX2ZpbGUpLVx1MDAzZXNpZDtcbitcdGJmc2VjLVx1MDAzZXVmX3NpZCA9IHNlbGludXhfZmlsZV91c2VyX3NpZCh1c2VyX2ZpbGUpO1xuK1x0aWYgKCEodXNlcl9maWxlLVx1MDAzZWZfbW9kZSBcdTAwMjYgRk1PREVfQkFDS0lORykpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0dWJmc2VjID0gc2VsaW51eF9iYWNraW5nX2ZpbGUodXNlcl9maWxlKTtcbitcdC8qIGEgd3JhcHBlZCBjb3VudCB3b3VsZCBtYWtlIGttYWxsb2NfYXJyYXkoKSByZXR1cm4gWkVST19TSVpFX1BUUiAqL1xuK1x0aWYgKHVubGlrZWx5KHViZnNlYy1cdTAwM2VsYXllcl9jb3VudCA9PSBVMzJfTUFYKSlcbitcdFx0cmV0dXJuIC1FT1ZFUkZMT1c7XG4rXG4rXHQvKlxuK1x0ICogVGhlIGZpbmFsIFZNQSBvbmx5IHJldGFpbnMgdGhlIGxvd2VzdCBiYWNraW5nIGZpbGUsIHNvIHJlY29yZCB0aGVcbitcdCAqIHdob2xlIGNoYWluIGhlcmUgcmF0aGVyIHRoYW4gaW4gdGhlIG1tYXAgaG9vaywgd2hlcmUgY29uY3VycmVudFxuK1x0ICogbWFwcGluZ3Mgd291bGQgaGF2ZSB0byBiZSBzZXJpYWxpemVkLiAgU2l6ZSBpdCBkeW5hbWljYWxseTogZXJvZnNcbitcdCAqIGlub2RlIHNoYXJpbmcgYWRkcyBhIGJhY2tpbmcgZmlsZSB3aXRob3V0IGJ1bXBpbmcgc19zdGFja19kZXB0aC5cbitcdCAqL1xuK1x0YmZzZWMtXHUwMDNlbGF5ZXJzID0ga21hbGxvY19hcnJheSh1YmZzZWMtXHUwMDNlbGF5ZXJfY291bnQgKyAxLFxuK1x0XHRcdFx0ICAgICAgc2l6ZW9mKCpiZnNlYy1cdTAwM2VsYXllcnMpLCBHRlBfS0VSTkVMKTtcbitcdGlmICghYmZzZWMtXHUwMDNlbGF5ZXJzKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHViZnNlYy1cdTAwM2VsYXllcl9jb3VudDsgaSsrKSB7XG4rXHRcdGxheWVyID0gXHUwMDI2YmZzZWMtXHUwMDNlbGF5ZXJzW2ldO1xuK1x0XHQqbGF5ZXIgPSB1YmZzZWMtXHUwMDNlbGF5ZXJzW2ldO1xuK1x0XHRwYXRoX2dldChcdTAwMjZsYXllci1cdTAwM2VwYXRoKTtcbitcdH1cbitcbitcdC8qIGZfcGF0aCwgbm90IGZpbGVfdXNlcl9wYXRoKCk6IHRoaXMgbGF5ZXIsIG5vdCB0aGUgdG9wLWxldmVsIGZpbGUgKi9cbitcdGxheWVyID0gXHUwMDI2YmZzZWMtXHUwMDNlbGF5ZXJzW2ldO1xuK1x0bGF5ZXItXHUwMDNlcGF0aCA9IHVzZXJfZmlsZS1cdTAwM2VmX3BhdGg7XG4rXHRsYXllci1cdTAwM2Vtb3VudGVyX3NpZCA9IGNyZWRfc2lkKHVzZXJfZmlsZS1cdTAwM2VmX2NyZWQpO1xuK1x0bGF5ZXItXHUwMDNlZmRfc2lkID0gc2VsaW51eF9maWxlKHVzZXJfZmlsZSktXHUwMDNlc2lkO1xuK1x0cGF0aF9nZXQoXHUwMDI2bGF5ZXItXHUwMDNlcGF0aCk7XG4rXHRiZnNlYy1cdTAwM2VsYXllcl9jb3VudCA9IHViZnNlYy1cdTAwM2VsYXllcl9jb3VudCArIDE7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIHZvaWQgc2VsaW51eF9iYWNraW5nX2ZpbGVfZnJlZShzdHJ1Y3QgZmlsZSAqYmFja2luZ19maWxlKVxuK3tcbitcdHN0cnVjdCBiYWNraW5nX2ZpbGVfc2VjdXJpdHlfc3RydWN0ICpiZnNlYztcbitcbitcdC8qIHNlY3VyaXR5X2JhY2tpbmdfZmlsZV9mcmVlKCkgbWF5IGJlIGNhbGxlZCB0d2ljZSBhZnRlciBhbiBlcnJvciAqL1xuK1x0aWYgKCFiYWNraW5nX2ZpbGVfc2VjdXJpdHkoYmFja2luZ19maWxlKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0YmZzZWMgPSBzZWxpbnV4X2JhY2tpbmdfZmlsZShiYWNraW5nX2ZpbGUpO1xuK1x0d2hpbGUgKGJmc2VjLVx1MDAzZWxheWVyX2NvdW50KVxuK1x0XHRwYXRoX3B1dChcdTAwMjZiZnNlYy1cdTAwM2VsYXllcnNbLS1iZnNlYy1cdTAwM2VsYXllcl9jb3VudF0ucGF0aCk7XG4rXHRrZnJlZShiZnNlYy1cdTAwM2VsYXllcnMpO1xuK1x0YmZzZWMtXHUwMDNlbGF5ZXJzID0gTlVMTDtcbit9XG4rXG4gLypcbiAgKiBDaGVjayB3aGV0aGVyIGEgdGFzayBoYXMgdGhlIGlvY3RsIHBlcm1pc3Npb24gYW5kIGNtZFxuICAqIG9wZXJhdGlvbiB0byBhbiBpbm9kZS5cbkBAIC0zOTcxLDYgKzQwMzQsNTMgQEAgc3RhdGljIGludCBzZWxpbnV4X2ZpbGVfaW9jdGxfY29tcGF0KHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLFxuIFxuIHN0YXRpYyBpbnQgZGVmYXVsdF9ub2V4ZWMgX19yb19hZnRlcl9pbml0O1xuIFxuK3N0YXRpYyB1MzIgZmlsZV9tYXBfcHJvdF90b19hdih1bnNpZ25lZCBsb25nIHByb3QsIGJvb2wgc2hhcmVkKVxuK3tcbitcdHUzMiBhdiA9IEZJTEVfX1JFQUQ7XG4rXG4rXHRpZiAoc2hhcmVkIFx1MDAyNlx1MDAyNiAocHJvdCBcdTAwMjYgUFJPVF9XUklURSkpXG4rXHRcdGF2IHw9IEZJTEVfX1dSSVRFO1xuK1x0aWYgKHByb3QgXHUwMDI2IFBST1RfRVhFQylcbitcdFx0YXYgfD0gRklMRV9fRVhFQ1VURTtcbitcbitcdHJldHVybiBhdjtcbit9XG4rXG4rc3RhdGljIGludCBiYWNraW5nX21vdW50ZXJzX2hhc19wZXJtKGNvbnN0IHN0cnVjdCBmaWxlICpmaWxlLCB1MzIgYXYpXG4re1xuK1x0Y29uc3Qgc3RydWN0IGJhY2tpbmdfZmlsZV9zZWN1cml0eV9zdHJ1Y3QgKmJmc2VjO1xuK1x0Y29uc3Qgc3RydWN0IGJhY2tpbmdfZmlsZV9zZWN1cml0eV9sYXllciAqbGF5ZXI7XG4rXHRzdHJ1Y3QgY29tbW9uX2F1ZGl0X2RhdGEgYWQ7XG4rXHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xuK1x0dTMyIGk7XG4rXHRpbnQgcmM7XG4rXG4rXHRpZiAoV0FSTl9PTl9PTkNFKCEoZmlsZS1cdTAwM2VmX21vZGUgXHUwMDI2IEZNT0RFX0JBQ0tJTkcpKSlcbitcdFx0cmV0dXJuIC1FSU87XG4rXG4rXHRiZnNlYyA9IHNlbGludXhfYmFja2luZ19maWxlKGZpbGUpO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgYmZzZWMtXHUwMDNlbGF5ZXJfY291bnQ7IGkrKykge1xuK1x0XHRsYXllciA9IFx1MDAyNmJmc2VjLVx1MDAzZWxheWVyc1tpXTtcbitcdFx0aW5vZGUgPSBkX2lub2RlKGxheWVyLVx1MDAzZXBhdGguZGVudHJ5KTtcbitcbitcdFx0YWQudHlwZSA9IExTTV9BVURJVF9EQVRBX1BBVEg7XG4rXHRcdGFkLnUucGF0aCA9IGxheWVyLVx1MDAzZXBhdGg7XG4rXG4rXHRcdGlmIChsYXllci1cdTAwM2Vtb3VudGVyX3NpZCAhPSBsYXllci1cdTAwM2VmZF9zaWQpIHtcbitcdFx0XHRyYyA9IGF2Y19oYXNfcGVybShsYXllci1cdTAwM2Vtb3VudGVyX3NpZCwgbGF5ZXItXHUwMDNlZmRfc2lkLFxuK1x0XHRcdFx0XHQgIFNFQ0NMQVNTX0ZELCBGRF9fVVNFLCBcdTAwMjZhZCk7XG4rXHRcdFx0aWYgKHJjKVxuK1x0XHRcdFx0cmV0dXJuIHJjO1xuK1x0XHR9XG4rXG4rXHRcdHJjID0gaW5vZGVfc2lkX2hhc19wZXJtKGxheWVyLVx1MDAzZW1vdW50ZXJfc2lkLCBpbm9kZSwgYXYsIFx1MDAyNmFkKTtcbitcdFx0aWYgKHJjKVxuK1x0XHRcdHJldHVybiByYztcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgaW50IF9fZmlsZV9tYXBfcHJvdF9jaGVjayhjb25zdCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBwcm90LFxuIFx0XHRcdFx0IGJvb2wgc2hhcmVkLCBib29sIG1vdW50ZXJfY2hlY2ssXG4gXHRcdFx0XHQgYm9vbCBiZl91c2VyX2ZpbGUpXG5AQCAtNDAwNCwxNCArNDExNCwxMCBAQCBzdGF0aWMgaW50IF9fZmlsZV9tYXBfcHJvdF9jaGVjayhjb25zdCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBwcm90LFxuIFx0aWYgKGZpbGUpIHtcbiBcdFx0Y29uc3Qgc3RydWN0IGNyZWQgKmNyZWQgPSBtb3VudGVyX2NoZWNrID9cbiBcdFx0XHRcdGZpbGUtXHUwMDNlZl9jcmVkIDogY3VycmVudF9jcmVkKCk7XG4tXHRcdC8qIFwicmVhZFwiIGFsd2F5cyBwb3NzaWJsZSwgXCJ3cml0ZVwiIG9ubHkgaWYgc2hhcmVkICovXG4tXHRcdHUzMiBhdiA9IEZJTEVfX1JFQUQ7XG4tXHRcdGlmIChzaGFyZWQgXHUwMDI2XHUwMDI2IHByb3Rfd3JpdGUpXG4tXHRcdFx0YXYgfD0gRklMRV9fV1JJVEU7XG4tXHRcdGlmIChwcm90X2V4ZWMpXG4tXHRcdFx0YXYgfD0gRklMRV9fRVhFQ1VURTtcbiBcbi1cdFx0cmV0dXJuIF9fZmlsZV9oYXNfcGVybShjcmVkLCBmaWxlLCBhdiwgYmZfdXNlcl9maWxlKTtcbitcdFx0cmV0dXJuIF9fZmlsZV9oYXNfcGVybShjcmVkLCBmaWxlLFxuK1x0XHRcdFx0ICAgICAgIGZpbGVfbWFwX3Byb3RfdG9fYXYocHJvdCwgc2hhcmVkKSxcbitcdFx0XHRcdCAgICAgICBiZl91c2VyX2ZpbGUpO1xuIFx0fVxuIFxuIFx0cmV0dXJuIDA7XG5AQCAtNDEwNiw2ICs0MjEyLDcgQEAgc3RhdGljIGludCBzZWxpbnV4X2ZpbGVfbXByb3RlY3Qoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRpbnQgcmM7XG4gXHRjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCA9IGN1cnJlbnRfY3JlZCgpO1xuIFx0dTMyIHNpZCA9IGNyZWRfc2lkKGNyZWQpO1xuK1x0dTMyIGF2O1xuIFx0Y29uc3Qgc3RydWN0IGZpbGUgKmZpbGUgPSB2bWEtXHUwMDNldm1fZmlsZTtcbiBcdGJvb2wgYmFja2luZ19maWxlO1xuIFx0Ym9vbCBzaGFyZWQgPSB2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1NIQVJFRDtcbkBAIC00MTQ5LDYgKzQyNTYsMTAgQEAgc3RhdGljIGludCBzZWxpbnV4X2ZpbGVfbXByb3RlY3Qoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdFx0aWYgKHJjKVxuIFx0XHRcdFx0cmV0dXJuIHJjO1xuIFx0XHRcdGlmIChiYWNraW5nX2ZpbGUpIHtcbitcdFx0XHRcdHJjID0gYmFja2luZ19tb3VudGVyc19oYXNfcGVybShmaWxlLFxuK1x0XHRcdFx0XHRcdFx0ICAgICAgIEZJTEVfX0VYRUNNT0QpO1xuK1x0XHRcdFx0aWYgKHJjKVxuK1x0XHRcdFx0XHRyZXR1cm4gcmM7XG4gXHRcdFx0XHRyYyA9IGZpbGVfaGFzX3Blcm0oZmlsZS1cdTAwM2VmX2NyZWQsIGZpbGUsXG4gXHRcdFx0XHRcdFx0ICAgRklMRV9fRVhFQ01PRCk7XG4gXHRcdFx0XHRpZiAocmMpXG5AQCAtNDE2MSw2ICs0MjcyLDEwIEBAIHN0YXRpYyBpbnQgc2VsaW51eF9maWxlX21wcm90ZWN0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0aWYgKHJjKVxuIFx0XHRyZXR1cm4gcmM7XG4gXHRpZiAoYmFja2luZ19maWxlKSB7XG4rXHRcdGF2ID0gZmlsZV9tYXBfcHJvdF90b19hdihwcm90LCBzaGFyZWQpO1xuK1x0XHRyYyA9IGJhY2tpbmdfbW91bnRlcnNfaGFzX3Blcm0oZmlsZSwgYXYpO1xuK1x0XHRpZiAocmMpXG4rXHRcdFx0cmV0dXJuIHJjO1xuIFx0XHRyYyA9IGZpbGVfbWFwX3Byb3RfY2hlY2soZmlsZSwgcHJvdCwgc2hhcmVkLCB0cnVlKTtcbiBcdFx0aWYgKHJjKVxuIFx0XHRcdHJldHVybiByYztcbkBAIC03NjM1LDYgKzc3NTAsNyBAQCBzdGF0aWMgc3RydWN0IHNlY3VyaXR5X2hvb2tfbGlzdCBzZWxpbnV4X2hvb2tzW10gX19yb19hZnRlcl9pbml0ID0ge1xuIFx0TFNNX0hPT0tfSU5JVChmaWxlX3Blcm1pc3Npb24sIHNlbGludXhfZmlsZV9wZXJtaXNzaW9uKSxcbiBcdExTTV9IT09LX0lOSVQoZmlsZV9hbGxvY19zZWN1cml0eSwgc2VsaW51eF9maWxlX2FsbG9jX3NlY3VyaXR5KSxcbiBcdExTTV9IT09LX0lOSVQoYmFja2luZ19maWxlX2FsbG9jLCBzZWxpbnV4X2JhY2tpbmdfZmlsZV9hbGxvYyksXG4rXHRMU01fSE9PS19JTklUKGJhY2tpbmdfZmlsZV9mcmVlLCBzZWxpbnV4X2JhY2tpbmdfZmlsZV9mcmVlKSxcbiBcdExTTV9IT09LX0lOSVQoZmlsZV9pb2N0bCwgc2VsaW51eF9maWxlX2lvY3RsKSxcbiBcdExTTV9IT09LX0lOSVQoZmlsZV9pb2N0bF9jb21wYXQsIHNlbGludXhfZmlsZV9pb2N0bF9jb21wYXQpLFxuIFx0TFNNX0hPT0tfSU5JVChtbWFwX2ZpbGUsIHNlbGludXhfbW1hcF9maWxlKSxcbmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvb2Jqc2VjLmggYi9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvb2Jqc2VjLmhcbmluZGV4IDNjMGExNmVjOTc4YjAuLjJmMjE1NjgyNTFmZmUgMTAwNjQ0XG4tLS0gYS9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvb2Jqc2VjLmhcbisrKyBiL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9vYmpzZWMuaFxuQEAgLTg2LDggKzg2LDE2IEBAIHN0cnVjdCBmaWxlX3NlY3VyaXR5X3N0cnVjdCB7XG4gXHR1MzIgcHNlcW5vOyAvKiBQb2xpY3kgc2Vxbm8gYXQgdGhlIHRpbWUgb2YgZmlsZSBvcGVuICovXG4gfTtcbiBcbitzdHJ1Y3QgYmFja2luZ19maWxlX3NlY3VyaXR5X2xheWVyIHtcbitcdHN0cnVjdCBwYXRoIHBhdGg7IC8qIHRoaXMgbGF5ZXIncyByZWFsIHBhdGggKi9cbitcdHUzMiBtb3VudGVyX3NpZDsgLyogU0lEIG9mIHRoZSBtb3VudGVyIHRoYXQgb3BlbmVkIGl0ICovXG4rXHR1MzIgZmRfc2lkOyAvKiBTSUQgb2YgaXRzIG9wZW4gZmlsZSBkZXNjcmlwdGlvbiAqL1xuK307XG4rXG4gc3RydWN0IGJhY2tpbmdfZmlsZV9zZWN1cml0eV9zdHJ1Y3Qge1xuLVx0dTMyIHVmX3NpZDsgLyogYXNzb2NpYXRlZCB1c2VyIGZpbGUgZnNlYy1cdTAwM2VzaWQgKi9cbitcdHUzMiB1Zl9zaWQ7IC8qIHRvcC1sZXZlbCB1c2VyIGZpbGUgZnNlYy1cdTAwM2VzaWQgKi9cbitcdHUzMiBsYXllcl9jb3VudDsgLyogbnVtYmVyIG9mIGludGVybWVkaWF0ZSBiYWNraW5nIGZpbGVzICovXG4rXHRzdHJ1Y3QgYmFja2luZ19maWxlX3NlY3VyaXR5X2xheWVyICpsYXllcnM7XG4gfTtcbiBcbiBzdHJ1Y3Qgc3VwZXJibG9ja19zZWN1cml0eV9zdHJ1Y3Qge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMjI6MjQ6MzYuNDYwOTE5NDg1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3MDc4Mzk0NzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU0VMaW51eCBCYWNraW5nIEZpbGUgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCBpZiB3ZSBuZWVkIHRvIGZpcmUgdXAgYSBLTVNBTiBzZXNzaW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY2hhbmdlcyBmaXJzdC4gVGhpcyBwYXRjaCB0b3VjaGVzIGBzZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNgIGFuZCBgc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL29ianNlYy5oYCwgc28gaXQgc2VlbXMgY29yZSB0byBob3cgU0VMaW51eCBoYW5kbGVzIG9iamVjdCBzZWN1cml0eS4gVGhlIGtleSBzZWVtcyB0byBiZSBhYm91dCB0cmFja2luZyBpbnRlcm1lZGlhdGUgYmFja2luZyBmaWxlcyBmb3Igc3RhY2tlZCBmaWxlc3lzdGVtcyBsaWtlIG92ZXJsYXlmcyBvciBlcm9mcy5cblxuVGhlIGNvZGUgYWRkcyBhIGBzdHJ1Y3QgYmFja2luZ19maWxlX3NlY3VyaXR5X2xheWVyYCwgd2l0aCBgc3RydWN0IHBhdGggcGF0aDsgdTMyIG1vdW50ZXJfc2lkOyB1MzIgZmRfc2lkO2AsIHdoaWNoIHNvdW5kcyBsaWtlIGl0J3MgZGVzaWduZWQgdG8ga2VlcCB0cmFjayBvZiBzZWN1cml0eSBpbmZvcm1hdGlvbiBhdCBlYWNoIGxheWVyIG9mIHRoZSBmaWxlc3lzdGVtIHN0YWNrLiBUaGVuLCB0aGUgYHN0cnVjdCBiYWNraW5nX2ZpbGVfc2VjdXJpdHlfc3RydWN0YCBpcyBleHRlbmRlZCB3aXRoIGEgYGxheWVyX2NvdW50YCBhbmQgYW4gYXJyYXkgYGxheWVyc2Agb2YgdGhlc2UgYGJhY2tpbmdfZmlsZV9zZWN1cml0eV9sYXllcmAgc3RydWN0cy5cblxuTm93LCB0aGUgYWxsb2NhdGlvbiBpcyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBJIHNlZSBhIGBrbWFsbG9jX2FycmF5YCBiZWluZyB1c2VkIHRvIGFsbG9jYXRlIHRoZSBgbGF5ZXJzYCBhcnJheSB3aXRoaW4gYHNlbGludXhfYmFja2luZ19maWxlX2FsbG9jYC4gSG9sZCBvbiwgYSBzbGlnaHQgZmxhZzogYGttYWxsb2NfYXJyYXlgIGFuZCBub3QgYGtjYWxsb2NgIOKAkyB0aGF0J3MgYSByZWQgZmxhZy4gTGV0IG1lIHNlZSBob3cgaXQncyBpbml0aWFsaXplZC4gTG9va2luZyBhdCB0aGUgY29kZTpcbmBgYGNcblx0YmZzZWMtXHUwMDNlbGF5ZXJzID0ga21hbGxvY19hcnJheSh1YmZzZWMtXHUwMDNlbGF5ZXJfY291bnQgKyAxLFxuXHRcdFx0XHQgICAgICBzaXplb2YoKmJmc2VjLVx1MDAzZWxheWVycyksIEdGUF9LRVJORUwpO1xuXHRpZiAoIWJmc2VjLVx1MDAzZWxheWVycylcblx0XHRyZXR1cm4gLUVOT01FTTtcblxuXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB1YmZzZWMtXHUwMDNlbGF5ZXJfY291bnQ7IGkrKykge1xuXHRcdGxheWVyID0gXHUwMDI2YmZzZWMtXHUwMDNlbGF5ZXJzW2ldO1xuXHRcdCpsYXllciA9IHViZnNlYy1cdTAwM2VsYXllcnNbaV07XG5cdFx0cGF0aF9nZXQoXHUwMDI2bGF5ZXItXHUwMDNlcGF0aCk7XG5cdH1cblxuXHQvKiBmX3BhdGgsIG5vdCBmaWxlX3VzZXJfcGF0aCgpOiB0aGlzIGxheWVyLCBub3QgdGhlIHRvcC1sZXZlbCBmaWxlICovXG5cdGxheWVyID0gXHUwMDI2YmZzZWMtXHUwMDNlbGF5ZXJzW2ldO1xuXHRsYXllci1cdTAwM2VwYXRoID0gdXNlcl9maWxlLVx1MDAzZWZfcGF0aDtcblx0bGF5ZXItXHUwMDNlbW91bnRlcl9zaWQgPSBjcmVkX3NpZCh1c2VyX2ZpbGUtXHUwMDNlZl9jcmVkKTtcblx0bGF5ZXItXHUwMDNlZmRfc2lkID0gc2VsaW51eF9maWxlKHVzZXJfZmlsZSktXHUwMDNlc2lkO1xuXHRwYXRoX2dldChcdTAwMjZsYXllci1cdTAwM2VwYXRoKTtcblx0YmZzZWMtXHUwMDNlbGF5ZXJfY291bnQgPSB1YmZzZWMtXHUwMDNlbGF5ZXJfY291bnQgKyAxO1xuYGBgXG5cbk9rYXksIEkgc2VlIG5vdy4gYHViZnNlYy1cdTAwM2VsYXllcl9jb3VudGAgZWxlbWVudHMgYXJlIGNvcGllZCBmcm9tIGB1YmZzZWMtXHUwMDNlbGF5ZXJzYCBpbnRvIGBiZnNlYy1cdTAwM2VsYXllcnNgIChpbmRleGVzIDAgdG8gYHViZnNlYy1cdTAwM2VsYXllcl9jb3VudCAtIDFgKS4gVGhlbiwgdGhlIGNvZGUgKmV4cGxpY2l0bHkqIGluaXRpYWxpemVzIHRoZSBlbGVtZW50IGF0IGluZGV4IGB1YmZzZWMtXHUwMDNlbGF5ZXJfY291bnRgICh3aGljaCBpcyBlcXVhbCB0byBgaWApIHdpdGggdmFsdWVzIGZvciBgcGF0aGAsIGBtb3VudGVyX3NpZGAsIGFuZCBgZmRfc2lkYC4gYGxheWVyX2NvdW50YCBpcyB0aGVuIHNldCB0byBgdWJmc2VjLVx1MDAzZWxheWVyX2NvdW50ICsgMWAuIFNvLCBldmVyeSBlbGVtZW50IGZyb20gaW5kZXggYDBgIHVwIHRvIGBsYXllcl9jb3VudCAtIDFgIGdldHMgcHJvcGVybHkgaW5pdGlhbGl6ZWQsIGdpdmVuIHRoZSBsb29wLiBUaGF0J3MgZ29vZC5cblxuSG93ZXZlciwgdGhlIGNvbW1lbnQgYGZfcGF0aCwgbm90IGZpbGVfdXNlcl9wYXRoKCk6IHRoaXMgbGF5ZXIsIG5vdCB0aGUgdG9wLWxldmVsIGZpbGVgIG5lZWRzIGZ1cnRoZXIgc2NydXRpbnkgcmVnYXJkaW5nIHdoYXQgdGhpcyBpbXBsaWVzIHJlZ2FyZGluZyBvdmVyYWxsIGZpbGUgaGFuZGxpbmcuXG5cbk9rYXksIGxldCdzIGNvbnNpZGVyIHRoZSBjYXNlIHdoZW4gYCEodXNlcl9maWxlLVx1MDAzZWZfbW9kZSBcdTAwMjYgRk1PREVfQkFDS0lORylgLiBXaGF0IGhhcHBlbnMgdGhlbj8gVGhlIGNvZGUgc2ltcGx5IHNldHMgYGJmc2VjLVx1MDAzZXVmX3NpZGAgdG8gYHNlbGludXhfZmlsZV91c2VyX3NpZCh1c2VyX2ZpbGUpYCBhbmQgcmV0dXJucy4gSW4gdGhpcyBjYXNlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYGJmc2VjYCBpdHNlbGYgZ2V0cyBhbGxvY2F0ZWQgaW4gdGhhdCBzY2VuYXJpby4gU28sIEkgbmVlZCB0byB0cmFjayB0aGUgYWxsb2NhdGlvbiBvZiBgYmFja2luZ19maWxlX3NlY3VyaXR5YCBvciBgc2VsaW51eF9iYWNraW5nX2ZpbGVgIHRvIHNlZSB0aGUgZnVsbCBwaWN0dXJlLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBhbGxvY2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDI3LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQ4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMjI6MjU6MDMuNTM5MzE3NjY0WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDQ0MzY1NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmFja2luZ19maWxlLipzZWN1cml0eVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJzZWN1cml0eVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJzZWN1cml0eS9zZWN1cml0eS5jPTE4NT1zdGF0aWMgaW50IGxzbV9iYWNraW5nX2ZpbGVfYWxsb2Moc3RydWN0IGZpbGUgKmJhY2tpbmdfZmlsZSlcXG4tLVxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTg5LVxcdGlmICghbHNtX2JhY2tpbmdfZmlsZV9jYWNoZSkge1xcbnNlY3VyaXR5L3NlY3VyaXR5LmM6MTkwOlxcdFxcdGJhY2tpbmdfZmlsZV9zZXRfc2VjdXJpdHkoYmFja2luZ19maWxlLCBOVUxMKTtcXG5zZWN1cml0eS9zZWN1cml0eS5jLTE5MS1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTk0LVxcdGJsb2IgPSBrbWVtX2NhY2hlX3phbGxvYyhsc21fYmFja2luZ19maWxlX2NhY2hlLCBHRlBfS0VSTkVMKTtcXG5zZWN1cml0eS9zZWN1cml0eS5jOjE5NTpcXHRiYWNraW5nX2ZpbGVfc2V0X3NlY3VyaXR5KGJhY2tpbmdfZmlsZSwgYmxvYik7XFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xOTYtXFx0aWYgKCFibG9iKVxcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYz0yNDg1PXZvaWQgc2VjdXJpdHlfYmFja2luZ19maWxlX2ZyZWUoc3RydWN0IGZpbGUgKmJhY2tpbmdfZmlsZSlcXG5zZWN1cml0eS9zZWN1cml0eS5jLTI0ODYte1xcbnNlY3VyaXR5L3NlY3VyaXR5LmM6MjQ4NzpcXHR2b2lkICpibG9iID0gYmFja2luZ19maWxlX3NlY3VyaXR5KGJhY2tpbmdfZmlsZSk7XFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0yNDg4LVxcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0yNDkxLVxcdGlmIChibG9iKSB7XFxuc2VjdXJpdHkvc2VjdXJpdHkuYzoyNDkyOlxcdFxcdGJhY2tpbmdfZmlsZV9zZXRfc2VjdXJpdHkoYmFja2luZ19maWxlLCBOVUxMKTtcXG5zZWN1cml0eS9zZWN1cml0eS5jLTI0OTMtXFx0XFx0a21lbV9jYWNoZV9mcmVlKGxzbV9iYWNraW5nX2ZpbGVfY2FjaGUsIGJsb2IpO1xcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTE3NTc9c3RhdGljIGludCBfX2ZpbGVfaGFzX3Blcm0oY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQsIGNvbnN0IHN0cnVjdCBmaWxlICpmaWxlLFxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTE3NjctXFx0aWYgKGJmX3VzZXJfZmlsZSkge1xcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzoxNzY4OlxcdFxcdHN0cnVjdCBiYWNraW5nX2ZpbGVfc2VjdXJpdHlfc3RydWN0ICpiZnNlYztcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMTc2OS1cXHRcXHRjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aDtcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz0zODU5PXN0YXRpYyBpbnQgc2VsaW51eF9iYWNraW5nX2ZpbGVfYWxsb2Moc3RydWN0IGZpbGUgKmJhY2tpbmdfZmlsZSxcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zODYxLXtcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6Mzg2MjpcXHRzdHJ1Y3QgYmFja2luZ19maWxlX3NlY3VyaXR5X3N0cnVjdCAqYmZzZWM7XFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjM4NjM6XFx0Y29uc3Qgc3RydWN0IGJhY2tpbmdfZmlsZV9zZWN1cml0eV9zdHJ1Y3QgKnViZnNlYztcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6Mzg2NDpcXHRzdHJ1Y3QgYmFja2luZ19maWxlX3NlY3VyaXR5X2xheWVyICpsYXllcjtcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzg2NS1cXHR1MzIgaTtcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz0zOTA1PXN0YXRpYyB2b2lkIHNlbGludXhfYmFja2luZ19maWxlX2ZyZWUoc3RydWN0IGZpbGUgKmJhY2tpbmdfZmlsZSlcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzkwNi17XFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjM5MDc6XFx0c3RydWN0IGJhY2tpbmdfZmlsZV9zZWN1cml0eV9zdHJ1Y3QgKmJmc2VjO1xcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zOTA4LVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zOTA5LVxcdC8qIHNlY3VyaXR5X2JhY2tpbmdfZmlsZV9mcmVlKCkgbWF5IGJlIGNhbGxlZCB0d2ljZSBhZnRlciBhbiBlcnJvciAqL1xcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzozOTEwOlxcdGlmICghYmFja2luZ19maWxlX3NlY3VyaXR5KGJhY2tpbmdfZmlsZSkpXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTM5MTEtXFx0XFx0cmV0dXJuO1xcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTQwNDk9c3RhdGljIGludCBiYWNraW5nX21vdW50ZXJzX2hhc19wZXJtKGNvbnN0IHN0cnVjdCBmaWxlICpmaWxlLCB1MzIgYXYpXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTQwNTAte1xcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo0MDUxOlxcdGNvbnN0IHN0cnVjdCBiYWNraW5nX2ZpbGVfc2VjdXJpdHlfc3RydWN0ICpiZnNlYztcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6NDA1MjpcXHRjb25zdCBzdHJ1Y3QgYmFja2luZ19maWxlX3NlY3VyaXR5X2xheWVyICpsYXllcjtcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNDA1My1cXHRzdHJ1Y3QgY29tbW9uX2F1ZGl0X2RhdGEgYWQ7XFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9NzY0Mj1zdHJ1Y3QgbHNtX2Jsb2Jfc2l6ZXMgc2VsaW51eF9ibG9iX3NpemVzIF9fcm9fYWZ0ZXJfaW5pdCA9IHtcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy03NjQ1LVxcdC5sYnNfZmlsZSA9IHNpemVvZihzdHJ1Y3QgZmlsZV9zZWN1cml0eV9zdHJ1Y3QpLFxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo3NjQ2OlxcdC5sYnNfYmFja2luZ19maWxlID0gc2l6ZW9mKHN0cnVjdCBiYWNraW5nX2ZpbGVfc2VjdXJpdHlfc3RydWN0KSxcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNzY0Ny1cXHQubGJzX2lub2RlID0gc2l6ZW9mKHN0cnVjdCBpbm9kZV9zZWN1cml0eV9zdHJ1Y3QpLFxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL29ianNlYy5oPTgyPXN0cnVjdCBmaWxlX3NlY3VyaXR5X3N0cnVjdCB7XFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvb2Jqc2VjLmgtODgtXFxuc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL29ianNlYy5oOjg5OnN0cnVjdCBiYWNraW5nX2ZpbGVfc2VjdXJpdHlfbGF5ZXIge1xcbnNlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9vYmpzZWMuaC05MC1cXHRzdHJ1Y3QgcGF0aCBwYXRoOyAvKiB0aGlzIGxheWVyJ3MgcmVhbCBwYXRoICovXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvb2Jqc2VjLmgtOTQtXFxuc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL29ianNlYy5oOjk1OnN0cnVjdCBiYWNraW5nX2ZpbGVfc2VjdXJpdHlfc3RydWN0IHtcXG5zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvb2Jqc2VjLmgtOTYtXFx0dTMyIHVmX3NpZDsgLyogdG9wLWxldmVsIHVzZXIgZmlsZSBmc2VjLVxcdTAwM2VzaWQgKi9cXG5zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvb2Jqc2VjLmgtOTctXFx0dTMyIGxheWVyX2NvdW50OyAvKiBudW1iZXIgb2YgaW50ZXJtZWRpYXRlIGJhY2tpbmcgZmlsZXMgKi9cXG5zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvb2Jqc2VjLmg6OTg6XFx0c3RydWN0IGJhY2tpbmdfZmlsZV9zZWN1cml0eV9sYXllciAqbGF5ZXJzO1xcbnNlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9vYmpzZWMuaC05OS19O1xcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL29ianNlYy5oPTIwMz1zdGF0aWMgaW5saW5lIHN0cnVjdCBmaWxlX3NlY3VyaXR5X3N0cnVjdCAqc2VsaW51eF9maWxlKGNvbnN0IHN0cnVjdCBmaWxlICpmaWxlKVxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL29ianNlYy5oLTIwNy1cXG5zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvb2Jqc2VjLmg6MjA4OnN0YXRpYyBpbmxpbmUgc3RydWN0IGJhY2tpbmdfZmlsZV9zZWN1cml0eV9zdHJ1Y3QgKlxcbnNlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9vYmpzZWMuaC0yMDktc2VsaW51eF9iYWNraW5nX2ZpbGUoY29uc3Qgc3RydWN0IGZpbGUgKmJhY2tpbmdfZmlsZSlcXG5zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvb2Jqc2VjLmgtMjEwLXtcXG5zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvb2Jqc2VjLmg6MjExOlxcdHZvaWQgKmJsb2IgPSBiYWNraW5nX2ZpbGVfc2VjdXJpdHkoYmFja2luZ19maWxlKTtcXG5zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvb2Jqc2VjLmgtMjEyLVxcdHJldHVybiBibG9iICsgc2VsaW51eF9ibG9iX3NpemVzLmxic19iYWNraW5nX2ZpbGU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDIyOjI1OjA0LjM4Mzc1OTYwMVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNzQyMzczNjAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBTZWN1cml0eSBDb250ZXh0cyBpbiBhIEtlcm5lbCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGNvZGUuIEknbSBmb2N1c2luZyBvbiB0aGUgYHNlY3VyaXR5L3NlY3VyaXR5LmNgIGZpbGUsIHNwZWNpZmljYWxseSB0aGUgYGxzbV9iYWNraW5nX2ZpbGVfYWxsb2NgIGZ1bmN0aW9uLiBUaGUga2V5IGhlcmUgaXMgdGhlIGFsbG9jYXRpb24gb2YgYGJsb2JgIHVzaW5nIGBrbWVtX2NhY2hlX3phbGxvY2AuIEJlY2F1c2UgaXQncyB6ZXJvLWFsbG9jYXRlZCwgdGhlIGBiZnNlY2Agc3RydWN0dXJlIGlzIGluaXRpYWxpemVkIHdpdGggYWxsIHplcm9zLiBUaGlzIG1lYW5zIHRoYXQsIHVwb24gYWxsb2NhdGlvbiBpbiB0aGlzIGNvbnRleHQsIGBsYXllcl9jb3VudGAgd2lsbCBiZSB6ZXJvIGFuZCBgbGF5ZXJzYCB3aWxsIGJlIGBOVUxMYC4gVGhpcyBpcyBzaWduaWZpY2FudCBiZWNhdXNlLCBpZiB0aGUgYHVzZXJfZmlsZWAgZG9lcyBub3QgaGF2ZSB0aGUgYEZNT0RFX0JBQ0tJTkdgIGZsYWcgc2V0LCB3ZSB3aWxsIG1haW50YWluIHRoYXQgemVybyBzdGF0ZS5cblxuTm93LCBsZXQncyBtb3ZlIHRvIHRoZSBzdGFjayB2YXJpYWJsZXMgaW4gdGhlIHBhdGNoLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoZSBgYmFja2luZ19tb3VudGVyc19oYXNfcGVybWAgZnVuY3Rpb24uIExvb2tpbmcgYXQgaXQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYHN0cnVjdCBjb21tb25fYXVkaXRfZGF0YSBhZGAgaXMgYmVpbmcgdXNlZCB3aXRoaW4gdGhlIGxvb3AuIFRoZSBjb2RlIGl0ZXJhdGVzIHRocm91Z2ggYmFja2luZyBmaWxlIGxheWVycyBhbmQgY2hlY2tzIHBlcm1pc3Npb25zLiBJdCB1dGlsaXplcyBib3RoIGBhdmNfaGFzX3Blcm1gIGFuZCBgaW5vZGVfc2lkX2hhc19wZXJtYCwgd2hpY2ggYXBwZWFyIHRvIHRha2UgYGFkYCBhcyBhIHBhcmFtZXRlci4gSXQgc2VlbXMgdGhlIGNvZGUgaXMgdXNpbmcgdGhlIHBhdGggZGF0YSBpbiBgYWRgLCBhbmQgaWYgdGhvc2UgcGF0aHMgZG9uJ3QgbWFrZSBzZW5zZSwgdGhlbiB0aGVyZSBjb3VsZCBiZSBwcm9ibGVtcy5cblxuTXkgY29uY2VybiBpcyBob3cgYGFkYCBpcyBpbml0aWFsaXplZCBhbmQgdXNlZCB3aXRoaW4gdGhvc2UgYGF2Y19oYXNfcGVybWAgYW5kIGBpbm9kZV9zaWRfaGFzX3Blcm1gIGNhbGxzLiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIG9mIHRoZSB0eXBpY2FsIGluaXRpYWxpemF0aW9uIGFuZCB1c2FnZSBvZiBgY29tbW9uX2F1ZGl0X2RhdGFgIHdpdGhpbiB0aGUgU0VMaW51eCBob29rcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBhZGAgaXMgcG9wdWxhdGVkIGFuZCBpZiB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgb3IgdW5leHBlY3RlZCBiZWhhdmlvciB0aGF0IGNvdWxkIGFyaXNlIGZyb20gdGhlIHdheSB0aGUgcGF0aHMgYXJlIGJlaW5nIHBhc3NlZCBpbiBoZXJlLiBJJ2xsIG5lZWQgdG8gZ28gdGhyb3VnaCB0aGUgcmVsYXRlZCBzZWxpbnV4IGhvb2sgY2FsbHMgdG8gbWFrZSBzdXJlIHRoZXNlIGFyZ3VtZW50cyBjYW4ndCBiZSBtaXN1c2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MjA2LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDIyOjI1OjA4LjEyNjEzNTc1NFoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjY4MDMyNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWRcXFxcLnR5cGUgPVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJzZWN1cml0eS9zZWxpbnV4XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInNlY3VyaXR5L3NlbGludXgvaG9va3MuYz0xNjQzPXN0YXRpYyBpbnQgY3JlZF9oYXNfY2FwYWJpbGl0eShjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCxcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0xNjUyLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzoxNjUzOlxcdGFkLnR5cGUgPSBMU01fQVVESVRfREFUQV9DQVA7XFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTE2NTQtXFx0YWQudS5jYXAgPSBjYXA7XFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9MTcwNj1zdGF0aWMgaW5saW5lIGludCBkZW50cnlfaGFzX3Blcm0oY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQsXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMTcxMy1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6MTcxNDpcXHRhZC50eXBlID0gTFNNX0FVRElUX0RBVEFfREVOVFJZO1xcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0xNzE1LVxcdGFkLnUuZGVudHJ5ID0gZGVudHJ5O1xcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTE3MjU9c3RhdGljIGlubGluZSBpbnQgcGF0aF9oYXNfcGVybShjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCxcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0xNzMyLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzoxNzMzOlxcdGFkLnR5cGUgPSBMU01fQVVESVRfREFUQV9QQVRIO1xcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0xNzM0LVxcdGFkLnUucGF0aCA9ICpwYXRoO1xcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTE3NDI9c3RhdGljIGlubGluZSBpbnQgZmlsZV9wYXRoX2hhc19wZXJtKGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkLFxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTE3NDctXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjE3NDg6XFx0YWQudHlwZSA9IExTTV9BVURJVF9EQVRBX0ZJTEU7XFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTE3NDktXFx0YWQudS5maWxlID0gZmlsZTtcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz0xNzU3PXN0YXRpYyBpbnQgX19maWxlX2hhc19wZXJtKGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkLCBjb25zdCBzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0xNzc4LVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzoxNzc5OlxcdFxcdGFkLnR5cGUgPSBMU01fQVVESVRfREFUQV9QQVRIO1xcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0xNzgwLVxcdFxcdGFkLnUucGF0aCA9ICpwYXRoO1xcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTE3ODYtXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjE3ODc6XFx0XFx0YWQudHlwZSA9IExTTV9BVURJVF9EQVRBX0ZJTEU7XFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTE3ODgtXFx0XFx0YWQudS5maWxlID0gZmlsZTtcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz0xODU0PXN0YXRpYyBpbnQgbWF5X2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0xODY5LVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzoxODcwOlxcdGFkLnR5cGUgPSBMU01fQVVESVRfREFUQV9ERU5UUlk7XFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTE4NzEtXFx0YWQudS5kZW50cnkgPSBkZW50cnk7XFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9MTg5OD1zdGF0aWMgaW50IG1heV9saW5rKHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTE5MTEtXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjE5MTI6XFx0YWQudHlwZSA9IExTTV9BVURJVF9EQVRBX0RFTlRSWTtcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMTkxMy1cXHRhZC51LmRlbnRyeSA9IGRlbnRyeTtcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz0xOTQxPXN0YXRpYyBpbmxpbmUgaW50IG1heV9yZW5hbWUoc3RydWN0IGlub2RlICpvbGRfZGlyLFxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTE5NTctXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjE5NTg6XFx0YWQudHlwZSA9IExTTV9BVURJVF9EQVRBX0RFTlRSWTtcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMTk1OS1cXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz0yMTExPXN0YXRpYyBpbnQgc2VsaW51eF9iaW5kZXJfdHJhbnNmZXJfZmlsZShjb25zdCBzdHJ1Y3QgY3JlZCAqZnJvbSxcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0yMTIxLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzoyMTIyOlxcdGFkLnR5cGUgPSBMU01fQVVESVRfREFUQV9QQVRIO1xcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0yMTIzLVxcdGFkLnUucGF0aCA9IGZpbGUtXFx1MDAzZWZfcGF0aDtcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz0yMzQ0PXN0YXRpYyBpbnQgc2VsaW51eF9icHJtX2NyZWRzX2Zvcl9leGVjKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMjQxMS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6MjQxMjpcXHRhZC50eXBlID0gTFNNX0FVRElUX0RBVEFfRklMRTtcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMjQxMy1cXHRhZC51LmZpbGUgPSBicHJtLVxcdTAwM2VmaWxlO1xcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTI3OTM9c3RhdGljIGludCBzZWxpbnV4X3NiX2tlcm5fbW91bnQoY29uc3Qgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0yNzk3LVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzoyNzk4OlxcdGFkLnR5cGUgPSBMU01fQVVESVRfREFUQV9ERU5UUlk7XFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTI3OTktXFx0YWQudS5kZW50cnkgPSBzYi1cXHUwMDNlc19yb290O1xcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTI4MDM9c3RhdGljIGludCBzZWxpbnV4X3NiX3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMjgwNy1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6MjgwODpcXHRhZC50eXBlID0gTFNNX0FVRElUX0RBVEFfREVOVFJZO1xcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0yODA5LVxcdGFkLnUuZGVudHJ5ID0gZGVudHJ5LVxcdTAwM2VkX3NiLVxcdTAwM2VzX3Jvb3Q7XFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9MzAxNz1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzA3Mi1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6MzA3MzpcXHRhZC50eXBlID0gTFNNX0FVRElUX0RBVEFfQU5PTklOT0RFO1xcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMDc0LVxcdGFkLnUuYW5vbmNsYXNzID0gbmFtZSA/IChjb25zdCBjaGFyICopbmFtZS1cXHUwMDNlbmFtZSA6IFxcXCI/XFxcIjtcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz0zMTMxPXN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9mb2xsb3dfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzEzNy1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6MzEzODpcXHRhZC50eXBlID0gTFNNX0FVRElUX0RBVEFfREVOVFJZO1xcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMTM5LVxcdGFkLnUuZGVudHJ5ID0gZGVudHJ5O1xcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTMxNDc9c3RhdGljIG5vaW5saW5lIGludCBhdWRpdF9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzE1My1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6MzE1NDpcXHRhZC50eXBlID0gTFNNX0FVRElUX0RBVEFfSU5PREU7XFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTMxNTUtXFx0YWQudS5pbm9kZSA9IGlub2RlO1xcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTMzNzY9c3RhdGljIGludCBzZWxpbnV4X2lub2RlX3NldHhhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTM0MDAtXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjM0MDE6XFx0YWQudHlwZSA9IExTTV9BVURJVF9EQVRBX0RFTlRSWTtcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzQwMi1cXHRhZC51LmRlbnRyeSA9IGRlbnRyeTtcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz0zNTYyPXN0YXRpYyBpbnQgc2VsaW51eF9wYXRoX25vdGlmeShjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwgdTY0IG1hc2ssXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzU2OS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6MzU3MDpcXHRhZC50eXBlID0gTFNNX0FVRElUX0RBVEFfUEFUSDtcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzU3MS1cXHRhZC51LnBhdGggPSAqcGF0aDtcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz0zOTI0PXN0YXRpYyBpbnQgaW9jdGxfaGFzX3Blcm0oY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQsIHN0cnVjdCBmaWxlICpmaWxlLFxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTM5MzYtXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjM5Mzc6XFx0YWQudHlwZSA9IExTTV9BVURJVF9EQVRBX0lPQ1RMX09QO1xcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zOTM4LVxcdGFkLnUub3AgPSBcXHUwMDI2aW9jdGw7XFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9NDA0OT1zdGF0aWMgaW50IGJhY2tpbmdfbW91bnRlcnNfaGFzX3Blcm0oY29uc3Qgc3RydWN0IGZpbGUgKmZpbGUsIHUzMiBhdilcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy00MDY1LVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo0MDY2OlxcdFxcdGFkLnR5cGUgPSBMU01fQVVESVRfREFUQV9QQVRIO1xcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy00MDY3LVxcdFxcdGFkLnUucGF0aCA9IGxheWVyLVxcdTAwM2VwYXRoO1xcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTQxNDY9c3RhdGljIGludCBzZWxpbnV4X21tYXBfZmlsZV9jb21tb24oc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgcHJvdCxcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy00MTU0LVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo0MTU1OlxcdFxcdGFkLnR5cGUgPSBMU01fQVVESVRfREFUQV9GSUxFO1xcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy00MTU2LVxcdFxcdGFkLnUuZmlsZSA9IGZpbGU7XFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9NDQ4OT1zdGF0aWMgaW50IHNlbGludXhfa2VybmVsX21vZHVsZV9yZXF1ZXN0KGNoYXIgKmttb2RfbmFtZSlcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy00NDkyLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo0NDkzOlxcdGFkLnR5cGUgPSBMU01fQVVESVRfREFUQV9LTU9EO1xcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy00NDk0LVxcdGFkLnUua21vZF9uYW1lID0ga21vZF9uYW1lO1xcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTQ1MDA9c3RhdGljIGludCBzZWxpbnV4X2tlcm5lbF9sb2FkX2Zyb21fZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgdTMyIHJlcXVlc3RlZClcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy00NTEwLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo0NTExOlxcdGFkLnR5cGUgPSBMU01fQVVESVRfREFUQV9GSUxFO1xcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy00NTEyLVxcdGFkLnUuZmlsZSA9IGZpbGU7XFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9NTEyMD1zdGF0aWMgaW50IF9fc2VsaW51eF9zb2NrZXRfYmluZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrYWRkciAqYWRkcmVzcywgaW50IGFkZHJsZW4pXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNTE4NS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6NTE4NjpcXHRcXHRhZC50eXBlID0gTFNNX0FVRElUX0RBVEFfTkVUO1xcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy01MTg3LVxcdFxcdGFkLnUubmV0ID0gXFx1MDAyNm5ldDtcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz01MjU5PXN0YXRpYyBpbnQgc2VsaW51eF9zb2NrZXRfY29ubmVjdF9oZWxwZXIoc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTUzMzAtXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjUzMzE6XFx0XFx0YWQudHlwZSA9IExTTV9BVURJVF9EQVRBX05FVDtcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNTMzMi1cXHRcXHRhZC51Lm5ldCA9IFxcdTAwMjZuZXQ7XFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9NjM2MT1zdGF0aWMgaW50IG5sbXNnX3NvY2tfaGFzX2V4dGVuZGVkX3Blcm1zKHN0cnVjdCBzb2NrICpzaywgdTMyIHBlcm1zLCB1MTYgbmxtc2dfdHlwZSlcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy02MzcwLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo2MzcxOlxcdGFkLnR5cGUgPSBMU01fQVVESVRfREFUQV9OTE1TR1RZUEU7XFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTYzNzItXFx0YWQudS5ubG1zZ190eXBlID0gbmxtc2dfdHlwZTtcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz02NDU1PXN0YXRpYyBpbnQgaXBjX2hhc19wZXJtKHN0cnVjdCBrZXJuX2lwY19wZXJtICppcGNfcGVybXMsXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNjQ2My1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6NjQ2NDpcXHRhZC50eXBlID0gTFNNX0FVRElUX0RBVEFfSVBDO1xcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy02NDY1LVxcdGFkLnUuaXBjX2lkID0gaXBjX3Blcm1zLVxcdTAwM2VrZXk7XFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9NjQ4MT1zdGF0aWMgaW50IHNlbGludXhfbXNnX3F1ZXVlX2FsbG9jX3NlY3VyaXR5KHN0cnVjdCBrZXJuX2lwY19wZXJtICptc3EpXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNjQ4OS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6NjQ5MDpcXHRhZC50eXBlID0gTFNNX0FVRElUX0RBVEFfSVBDO1xcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy02NDkxLVxcdGFkLnUuaXBjX2lkID0gbXNxLVxcdTAwM2VrZXk7XFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9NjQ5Nz1zdGF0aWMgaW50IHNlbGludXhfbXNnX3F1ZXVlX2Fzc29jaWF0ZShzdHJ1Y3Qga2Vybl9pcGNfcGVybSAqbXNxLCBpbnQgbXNxZmxnKVxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTY1MDQtXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjY1MDU6XFx0YWQudHlwZSA9IExTTV9BVURJVF9EQVRBX0lQQztcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNjUwNi1cXHRhZC51LmlwY19pZCA9IG1zcS1cXHUwMDNla2V5O1xcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTY1NDA9c3RhdGljIGludCBzZWxpbnV4X21zZ19xdWV1ZV9tc2dzbmQoc3RydWN0IGtlcm5faXBjX3Blcm0gKm1zcSwgc3RydWN0IG1zZ19tc2cgKm1zZywgaW50IG1zcWZsZylcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy02NTY0LVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo2NTY1OlxcdGFkLnR5cGUgPSBMU01fQVVESVRfREFUQV9JUEM7XFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTY1NjYtXFx0YWQudS5pcGNfaWQgPSBtc3EtXFx1MDAzZWtleTtcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz02NTgzPXN0YXRpYyBpbnQgc2VsaW51eF9tc2dfcXVldWVfbXNncmN2KHN0cnVjdCBrZXJuX2lwY19wZXJtICptc3EsIHN0cnVjdCBtc2dfbXNnICptc2csXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNjU5NS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6NjU5NjpcXHRhZC50eXBlID0gTFNNX0FVRElUX0RBVEFfSVBDO1xcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy02NTk3LVxcdGFkLnUuaXBjX2lkID0gbXNxLVxcdTAwM2VrZXk7XFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9NjYwOD1zdGF0aWMgaW50IHNlbGludXhfc2htX2FsbG9jX3NlY3VyaXR5KHN0cnVjdCBrZXJuX2lwY19wZXJtICpzaHApXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNjYxNi1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6NjYxNzpcXHRhZC50eXBlID0gTFNNX0FVRElUX0RBVEFfSVBDO1xcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy02NjE4LVxcdGFkLnUuaXBjX2lkID0gc2hwLVxcdTAwM2VrZXk7XFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9NjYyND1zdGF0aWMgaW50IHNlbGludXhfc2htX2Fzc29jaWF0ZShzdHJ1Y3Qga2Vybl9pcGNfcGVybSAqc2hwLCBpbnQgc2htZmxnKVxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTY2MzEtXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjY2MzI6XFx0YWQudHlwZSA9IExTTV9BVURJVF9EQVRBX0lQQztcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNjYzMy1cXHRhZC51LmlwY19pZCA9IHNocC1cXHUwMDNla2V5O1xcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTY2ODY9c3RhdGljIGludCBzZWxpbnV4X3NlbV9hbGxvY19zZWN1cml0eShzdHJ1Y3Qga2Vybl9pcGNfcGVybSAqc21hKVxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTY2OTQtXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjY2OTU6XFx0YWQudHlwZSA9IExTTV9BVURJVF9EQVRBX0lQQztcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNjY5Ni1cXHRhZC51LmlwY19pZCA9IHNtYS1cXHUwMDNla2V5O1xcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTY3MDI9c3RhdGljIGludCBzZWxpbnV4X3NlbV9hc3NvY2lhdGUoc3RydWN0IGtlcm5faXBjX3Blcm0gKnNtYSwgaW50IHNlbWZsZylcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy02NzA5LVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo2NzEwOlxcdGFkLnR5cGUgPSBMU01fQVVESVRfREFUQV9JUEM7XFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTY3MTEtXFx0YWQudS5pcGNfaWQgPSBzbWEtXFx1MDAzZWtleTtcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz03MjQwPXN0YXRpYyBpbnQgc2VsaW51eF9pYl9wa2V5X2FjY2Vzcyh2b2lkICppYl9zZWMsIHU2NCBzdWJuZXRfcHJlZml4LCB1MTYgcGtleV92YWwpXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNzI1MS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6NzI1MjpcXHRhZC50eXBlID0gTFNNX0FVRElUX0RBVEFfSUJQS0VZO1xcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy03MjUzLVxcdGlicGtleS5zdWJuZXRfcHJlZml4ID0gc3VibmV0X3ByZWZpeDtcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz03MjYxPXN0YXRpYyBpbnQgc2VsaW51eF9pYl9lbmRwb3J0X21hbmFnZV9zdWJuZXQodm9pZCAqaWJfc2VjLCBjb25zdCBjaGFyICpkZXZfbmFtZSxcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy03Mjc1LVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo3Mjc2OlxcdGFkLnR5cGUgPSBMU01fQVVESVRfREFUQV9JQkVORFBPUlQ7XFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTcyNzctXFx0aWJlbmRwb3J0LmRldl9uYW1lID0gZGV2X25hbWU7XFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9NzYwOT1zdGF0aWMgaW50IHNlbGludXhfdXJpbmdfY21kKHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZClcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy03NjE1LVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo3NjE2OlxcdGFkLnR5cGUgPSBMU01fQVVESVRfREFUQV9GSUxFO1xcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy03NjE3LVxcdGFkLnUuZmlsZSA9IGZpbGU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDIyOjI1OjA4LjE5Mjk0MzM2M1oiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4Njc3Nzc0NTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IE5vIE5lZWQgSGVyZSoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBjYXJlZnVsbHkgcmV2aWV3aW5nIHRoaXMgZGlmZiwgZm9jdXNpbmcgb24gcG90ZW50aWFsIEtNU0FOIG5lZWRzLiBUaGUgY3J1Y2lhbCBwaWVjZXMsIGBhZC50eXBlYCBhbmQgYGFkLnUucGF0aGAsIGFyZSBzZXQgY29uc2lzdGVudGx5LCBtYXRjaGluZyBhbGwgdGhlIG90aGVyIGF1ZGl0IGRhdGEgdXNhZ2VzIHRocm91Z2hvdXQgdGhlIHJlbGV2YW50IGBzZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNgIGZpbGUuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuXG5cbk5vdywgbGV0J3MgYnJlYWsgZG93biB0aGUgZnVuY3Rpb25zIGludm9sdmVkIGFuZCBhc3Nlc3MgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBvciBrZXJuZWwtdG8tdXNlciBzcGFjZSBkYXRhIGxlYWtzLiBgaW5vZGVfc2lkX2hhc19wZXJtYCBsb29rcyBjbGVhbjsgaXQgdGFrZXMgdGhlIG5lZWRlZCBhdWRpdCBkYXRhIGJ1dCBzZWVtcyB0byBqdXN0IHdyYXAgYSBjYWxsIHRvIGBhdmNfaGFzX3Blcm1gLCBhIHJlZmFjdG9yIHNwbGl0dGluZyBgaW5vZGVfaGFzX3Blcm1gLiBObyBpc3N1ZXMgdGhlcmUuIGBzZWxpbnV4X2ZpbGVfdXNlcl9zaWRgIGFwcGVhcnMgdG8gaGFuZGxlIGZpbGUgbWV0YWRhdGEgY29ycmVjdGx5LlxuXG5UaGUgbW9yZSBjb21wbGV4IGFyZWEgaXMgYXJvdW5kIHRoZSBiYWNraW5nIGZpbGUgc3RydWN0dXJlcywgZXNwZWNpYWxseSBgc2VsaW51eF9iYWNraW5nX2ZpbGVfYWxsb2NgLCBgc2VsaW51eF9iYWNraW5nX2ZpbGVfZnJlZWAsIGFuZCBgc2VsaW51eF9maWxlX21wcm90ZWN0YC4gQWZ0ZXIgZGlnZ2luZyBpbiwgSSdtIGNvbmZpZGVudCB0aGF0IHRoZSBjcml0aWNhbCBkYXRhIGluIGBiZnNlYy1cdTAwM2VsYXllcnNgIGFyZSAqZnVsbHkqIGluaXRpYWxpemVkLiBgc2VsaW51eF9iYWNraW5nX2ZpbGVfYWxsb2NgIGFsbG9jYXRlcyB0aGUgbGF5ZXJzLCBjb3BpZXMgZXhpc3Rpbmcgb25lcywgYW5kIHBvcHVsYXRlcyB0aGUgZGF0YSwgaW5jbHVkaW5nIGEgcmVmY291bnQgYnVtcCBmb3IgcGF0aHMsIG1ha2luZyBzdXJlIG5vdGhpbmcgaXMgbGVmdCBkYW5nbGluZy4gYHNlbGludXhfYmFja2luZ19maWxlX2ZyZWVgIGNvcnJlY3RseSBmcmVlcyBhbmQgcHV0cyB0aGUgcGF0aCBmb3IgZWFjaCBsYXllci4gVGhlIHBlcm1pc3Npb24gY2hlY2tzIGluIGBiYWNraW5nX21vdW50ZXJzX2hhc19wZXJtYCBhbHNvIGxvb2sgb2theS4gQW5kIGZpbmFsbHksIGBzZWxpbnV4X2ZpbGVfbXByb3RlY3RgIHNpbXBseSBhZGRzIGEgY2FsbCB0byBiYWNraW5nIG1vdW50ZXJzLiBObyBvYnZpb3VzIGlzc3VlcyB0aGVyZS4gVGhlIGhlbHBlciBmdW5jdGlvbiBgZmlsZV9tYXBfcHJvdF90b19hdmAganVzdCBtYXBzIHByb3RlY3Rpb24gYml0cy5cblxuSSd2ZSBzcGVjaWZpY2FsbHkgbG9va2VkIGZvciBkYXRhIGNvcGllcyB0byB1c2Vyc3BhY2Ug4oCTIG5vbmUuIEkndmUgYWxzbyBjaGVja2VkIGNhcmVmdWxseSBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UuIEFsbCBgYmZzZWMtXHUwMDNlbGF5ZXJzYCBlbnRyaWVzIGFyZSBmdWxseSBpbml0aWFsaXplZCwgYW5kIGBiZnNlY2AgaXRzZWxmIGlzIHplcm9lZCBkdXJpbmcgYWxsb2NhdGlvbi4gVGhlIGNvbW1vbiBhdWRpdCBkYXRhIChgY29tbW9uX2F1ZGl0X2RhdGEgYWRgKSBpcyBhbHNvIHBvcHVsYXRlZCBjb3JyZWN0bHksIGZvbGxvd2luZyB0aGUgc3RhbmRhcmQgU0VMaW51eCBwYXR0ZXJuLlxuXG5Dcml0aWNhbGx5LCB0aGVyZSBhcmUgbm8ga2VybmVsLXRvLXVzZXIgY29waWVzIHRoYXQgSSBjYW4gc2VlIChgY29weV90b191c2VyYCwgYHB1dF91c2VyYCwgc29ja2V0IG9wdGlvbnMsIGV0Yy4pLiBUaGVyZSdzIG5vIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFuZCBhbGwgc3RydWN0dXJlcyBhcmUgZWl0aGVyIHplcm9lZCBvciBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG5cbkZyYW5rbHksIEkgdGhpbmsgYW55IGJ1Z3MgaGVyZSB3b3VsZCBtYW5pZmVzdCBhcyBtZW1vcnkgY29ycnVwdGlvbiwgdXNlLWFmdGVyLWZyZWUsIG9yIHJlZmNvdW50aW5nIGlzc3Vlcy4gVGhvc2UgYXJlIGFscmVhZHkgd2VsbC1jb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgY2hlY2tzLiBCYXNlZCBvbiB0aGUgY3JpdGVyaWEsIHRoaXMgcGF0Y2ggcmVhbGx5IGJvaWxzIGRvd24gdG8gdGhlIHR5cGVzIG9mIGJ1Z3MgdGhhdCBLQVNBTiBpcyBidWlsdCB0byBmaW5kLlxuXG5TbywgbGV0J3MgZ28gYmFjayBvdmVyIHRoZSBjcml0ZXJpYSAqYWdhaW4qLlxuXG4xLiAgS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlIHdoZXJlIGZpZWxkcyBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLiBOby5cbjIuICBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMuIE5vLlxuMy4gIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4gTm8gKGFsbCBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQpLlxuNC4gIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4gTm8uXG5cblRoaXMgZmFsbHMgc3F1YXJlbHkgdW5kZXIgdGhlIFwiS0FTQU4gY292ZXJzIGl0XCIgY2F0ZWdvcnkuIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkIG9yIGluaXRpYWxpemVkLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblRoZXJlZm9yZSwgS01TQU4gaXMgbm90IG5lZWRlZCBoZXJlLiBLQVNBTiBpcyBzdWZmaWNpZW50LiBJJ20gcmVhZHkgdG8gbWFyayBgTmVlZHNLTVNBTj1mYWxzZWAgYW5kIHN1Ym1pdCB0aGUgZmluYWwgcmVzcG9uc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNjI2LCJPdXRwdXRUb2tlbnMiOjIzNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMjI6MjU6MTYuODcwNzIwMjkxWiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ1NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBleHRlbmRzIFNFTGludXggYmFja2luZyBmaWxlIHRyYWNraW5nIHRvIGhhbmRsZSBtdWx0aXBsZSBsYXllcnMgaW4gc3RhY2tlZCBmaWxlc3lzdGVtcyAoc3VjaCBhcyBvdmVybGF5ZnMgYW5kIGVyb2ZzKSBieSBpbnRyb2R1Y2luZyBpbnRlcm1lZGlhdGUgYmFja2luZyBsYXllciBzdHJ1Y3R1cmVzLCByZWNvcmRpbmcgcGF0aHMgYW5kIFNJRHMsIGFuZCB2YWxpZGF0aW5nIG1vdW50ZXIgcGVybWlzc2lvbnMgZHVyaW5nIGZpbGUgbW1hcC9tcHJvdGVjdCBvcGVyYXRpb25zLlxcblxcbkFsbCBuZXdseSBhbGxvY2F0ZWQgaGVhcCBzdHJ1Y3R1cmVzIChgYmFja2luZ19maWxlX3NlY3VyaXR5X2xheWVyYCBhcnJheXMpIGFyZSBleHBsaWNpdGx5IGFuZCBmdWxseSBpbml0aWFsaXplZCB1cG9uIGFsbG9jYXRpb24gYmVmb3JlIHVzZSBvciBjb3B5aW5nLiBUaGUgY29udGFpbmluZyBgYmFja2luZ19maWxlX3NlY3VyaXR5X3N0cnVjdGAgYmxvYiBpcyBhbGxvY2F0ZWQgdmlhIGBrbWVtX2NhY2hlX3phbGxvY2AuIFRoZSBhdWRpdCBkYXRhIHN0YWNrIHN0cnVjdHVyZSBgc3RydWN0IGNvbW1vbl9hdWRpdF9kYXRhIGFkYCBpcyBwcm9wZXJseSBjb25maWd1cmVkIHdpdGggYHR5cGUgPSBMU01fQVVESVRfREFUQV9QQVRIYCBhbmQgdGhlIHBhdGggdW5pb24gbWVtYmVyIGFzc2lnbmVkIGJlZm9yZSBwYXNzaW5nIHRvIHRoZSBhdWRpdC9BVkMgc3Vic3lzdGVtLiBObyBkYXRhIGlzIGV4cG9zZWQgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCB0aGVyZSBpcyBubyBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBtZW1vcnkuIFBvdGVudGlhbCByaXNrcyBpbiB0aGlzIHBhdGNoIChzdWNoIGFzIGxpZmV0aW1lIGlzc3VlcywgcmVmY291bnRpbmcsIHBhdGggbWFuYWdlbWVudCwgb3Igb3V0LW9mLWJvdW5kcyBpbmRleGluZykgZmFsbCB3aXRoaW4gdGhlIHNjb3BlIG9mIEtBU0FOIHJhdGhlciB0aGFuIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGV4dGVuZHMgU0VMaW51eCBiYWNraW5nIGZpbGUgdHJhY2tpbmcgdG8gaGFuZGxlIG11bHRpcGxlIGxheWVycyBpbiBzdGFja2VkIGZpbGVzeXN0ZW1zIChzdWNoIGFzIG92ZXJsYXlmcyBhbmQgZXJvZnMpIGJ5IGludHJvZHVjaW5nIGludGVybWVkaWF0ZSBiYWNraW5nIGxheWVyIHN0cnVjdHVyZXMsIHJlY29yZGluZyBwYXRocyBhbmQgU0lEcywgYW5kIHZhbGlkYXRpbmcgbW91bnRlciBwZXJtaXNzaW9ucyBkdXJpbmcgZmlsZSBtbWFwL21wcm90ZWN0IG9wZXJhdGlvbnMuXFxuXFxuQWxsIG5ld2x5IGFsbG9jYXRlZCBoZWFwIHN0cnVjdHVyZXMgKGBiYWNraW5nX2ZpbGVfc2VjdXJpdHlfbGF5ZXJgIGFycmF5cykgYXJlIGV4cGxpY2l0bHkgYW5kIGZ1bGx5IGluaXRpYWxpemVkIHVwb24gYWxsb2NhdGlvbiBiZWZvcmUgdXNlIG9yIGNvcHlpbmcuIFRoZSBjb250YWluaW5nIGBiYWNraW5nX2ZpbGVfc2VjdXJpdHlfc3RydWN0YCBibG9iIGlzIGFsbG9jYXRlZCB2aWEgYGttZW1fY2FjaGVfemFsbG9jYC4gVGhlIGF1ZGl0IGRhdGEgc3RhY2sgc3RydWN0dXJlIGBzdHJ1Y3QgY29tbW9uX2F1ZGl0X2RhdGEgYWRgIGlzIHByb3Blcmx5IGNvbmZpZ3VyZWQgd2l0aCBgdHlwZSA9IExTTV9BVURJVF9EQVRBX1BBVEhgIGFuZCB0aGUgcGF0aCB1bmlvbiBtZW1iZXIgYXNzaWduZWQgYmVmb3JlIHBhc3NpbmcgdG8gdGhlIGF1ZGl0L0FWQyBzdWJzeXN0ZW0uIE5vIGRhdGEgaXMgZXhwb3NlZCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIHRoZXJlIGlzIG5vIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gUG90ZW50aWFsIHJpc2tzIGluIHRoaXMgcGF0Y2ggKHN1Y2ggYXMgbGlmZXRpbWUgaXNzdWVzLCByZWZjb3VudGluZywgcGF0aCBtYW5hZ2VtZW50LCBvciBvdXQtb2YtYm91bmRzIGluZGV4aW5nKSBmYWxsIHdpdGhpbiB0aGUgc2NvcGUgb2YgS0FTQU4gcmF0aGVyIHRoYW4gS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowdbkr6[1] Phase: Succeeded StartedAt: 2026-08-29 22:25:28 +0000 UTC FinishedAt: 2026-08-29 22:25:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdbkr6[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-29 22:25:28 +0000 UTC FinishedAt: 2026-08-29 22:25:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdbkr6[2] Phase: Succeeded StartedAt: 2026-08-29 22:25:28 +0000 UTC FinishedAt: 2026-08-29 23:45:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdbkr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_NETWORK","AUDIT","NET","INET","OVERLAY_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["selinux_backing_file_alloc","selinux_backing_file_free","selinux_file_mprotect","security_backing_file_alloc","security_backing_file_free","security_file_mprotect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_NETWORK","AUDIT","NET","INET","OVERLAY_FS"],"series_id":"d7a822de-d326-49fc-94de-8b42cd5eee3e","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-29 22:25:28 +0000 UTC FinishedAt: 2026-08-29 23:45:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_NETWORK","AUDIT","NET","INET","OVERLAY_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["selinux_backing_file_alloc","selinux_backing_file_free","selinux_file_mprotect","security_backing_file_alloc","security_backing_file_free","security_file_mprotect"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_NETWORK","AUDIT","NET","INET","OVERLAY_FS"],"series_id":"d7a822de-d326-49fc-94de-8b42cd5eee3e","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowdbkr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_NETWORK","AUDIT","NET","INET","OVERLAY_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["selinux_backing_file_alloc","selinux_backing_file_free","selinux_file_mprotect","security_backing_file_alloc","security_backing_file_free","security_file_mprotect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_NETWORK","AUDIT","NET","INET","OVERLAY_FS"],"series_id":"d7a822de-d326-49fc-94de-8b42cd5eee3e","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-29 22:25:28 +0000 UTC FinishedAt: 2026-08-29 22:25:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdbkr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_NETWORK","AUDIT","NET","INET","OVERLAY_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["selinux_backing_file_alloc","selinux_backing_file_free","selinux_file_mprotect","security_backing_file_alloc","security_backing_file_free","security_file_mprotect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_NETWORK","AUDIT","NET","INET","OVERLAY_FS"],"series_id":"d7a822de-d326-49fc-94de-8b42cd5eee3e","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-29 22:25:28 +0000 UTC FinishedAt: 2026-08-29 22:25:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_NETWORK","AUDIT","NET","INET","OVERLAY_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowdbkr6/series-workflowdbkr6-convert-artifact-2809382414/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdbkr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_NETWORK","AUDIT","NET","INET","OVERLAY_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["selinux_backing_file_alloc","selinux_backing_file_free","selinux_file_mprotect","security_backing_file_alloc","security_backing_file_free","security_file_mprotect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_NETWORK","AUDIT","NET","INET","OVERLAY_FS"],"series_id":"d7a822de-d326-49fc-94de-8b42cd5eee3e","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-29 22:25:38 +0000 UTC FinishedAt: 2026-08-29 22:41:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdbkr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_NETWORK","AUDIT","NET","INET","OVERLAY_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["selinux_backing_file_alloc","selinux_backing_file_free","selinux_file_mprotect","security_backing_file_alloc","security_backing_file_free","security_file_mprotect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_NETWORK","AUDIT","NET","INET","OVERLAY_FS"],"series_id":"d7a822de-d326-49fc-94de-8b42cd5eee3e","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-29 22:25:38 +0000 UTC FinishedAt: 2026-08-29 22:41:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*701fd2d6-0a3f-4510-be48-26dfd6e91e85,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-workflowdbkr6/series-workflowdbkr6-convert-artifact-2809382414/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": "eaaba657-234b-4298-88b6-bc7d9c029bf0", "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-workflowdbkr6/series-workflowdbkr6-build-action-1785530996/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdbkr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_NETWORK","AUDIT","NET","INET","OVERLAY_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["selinux_backing_file_alloc","selinux_backing_file_free","selinux_file_mprotect","security_backing_file_alloc","security_backing_file_free","security_file_mprotect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_NETWORK","AUDIT","NET","INET","OVERLAY_FS"],"series_id":"d7a822de-d326-49fc-94de-8b42cd5eee3e","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-29 22:25:38 +0000 UTC FinishedAt: 2026-08-29 22:41:26 +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:*701fd2d6-0a3f-4510-be48-26dfd6e91e85,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-workflowdbkr6/series-workflowdbkr6-convert-artifact-2809382414/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": "eaaba657-234b-4298-88b6-bc7d9c029bf0", "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-workflowdbkr6/series-workflowdbkr6-build-action-1785530996/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdbkr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_NETWORK","AUDIT","NET","INET","OVERLAY_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["selinux_backing_file_alloc","selinux_backing_file_free","selinux_file_mprotect","security_backing_file_alloc","security_backing_file_free","security_file_mprotect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_NETWORK","AUDIT","NET","INET","OVERLAY_FS"],"series_id":"d7a822de-d326-49fc-94de-8b42cd5eee3e","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-29 22:41:36 +0000 UTC FinishedAt: 2026-08-29 22:41:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdbkr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_NETWORK","AUDIT","NET","INET","OVERLAY_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["selinux_backing_file_alloc","selinux_backing_file_free","selinux_file_mprotect","security_backing_file_alloc","security_backing_file_free","security_file_mprotect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_NETWORK","AUDIT","NET","INET","OVERLAY_FS"],"series_id":"d7a822de-d326-49fc-94de-8b42cd5eee3e","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-29 22:41:36 +0000 UTC FinishedAt: 2026-08-29 22:41:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdbkr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_NETWORK","AUDIT","NET","INET","OVERLAY_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["selinux_backing_file_alloc","selinux_backing_file_free","selinux_file_mprotect","security_backing_file_alloc","security_backing_file_free","security_file_mprotect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_NETWORK","AUDIT","NET","INET","OVERLAY_FS"],"series_id":"d7a822de-d326-49fc-94de-8b42cd5eee3e","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-29 22:41:36 +0000 UTC FinishedAt: 2026-08-29 22:41:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdbkr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_NETWORK","AUDIT","NET","INET","OVERLAY_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["selinux_backing_file_alloc","selinux_backing_file_free","selinux_file_mprotect","security_backing_file_alloc","security_backing_file_free","security_file_mprotect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_NETWORK","AUDIT","NET","INET","OVERLAY_FS"],"series_id":"d7a822de-d326-49fc-94de-8b42cd5eee3e","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-29 22:41:36 +0000 UTC FinishedAt: 2026-08-29 22:41:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_NETWORK","AUDIT","NET","INET","OVERLAY_FS"],"series_id":"d7a822de-d326-49fc-94de-8b42cd5eee3e","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowdbkr6/series-workflowdbkr6-convert-artifact-1912288769/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdbkr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_NETWORK","AUDIT","NET","INET","OVERLAY_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["selinux_backing_file_alloc","selinux_backing_file_free","selinux_file_mprotect","security_backing_file_alloc","security_backing_file_free","security_file_mprotect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_NETWORK","AUDIT","NET","INET","OVERLAY_FS"],"series_id":"d7a822de-d326-49fc-94de-8b42cd5eee3e","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-29 22:41:46 +0000 UTC FinishedAt: 2026-08-29 22:43:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdbkr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_NETWORK","AUDIT","NET","INET","OVERLAY_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["selinux_backing_file_alloc","selinux_backing_file_free","selinux_file_mprotect","security_backing_file_alloc","security_backing_file_free","security_file_mprotect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_NETWORK","AUDIT","NET","INET","OVERLAY_FS"],"series_id":"d7a822de-d326-49fc-94de-8b42cd5eee3e","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-29 22:41:46 +0000 UTC FinishedAt: 2026-08-29 22:43:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*eaaba657-234b-4298-88b6-bc7d9c029bf0,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-workflowdbkr6/series-workflowdbkr6-build-action-1785530996/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-workflowdbkr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_NETWORK","AUDIT","NET","INET","OVERLAY_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["selinux_backing_file_alloc","selinux_backing_file_free","selinux_file_mprotect","security_backing_file_alloc","security_backing_file_free","security_file_mprotect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_NETWORK","AUDIT","NET","INET","OVERLAY_FS"],"series_id":"d7a822de-d326-49fc-94de-8b42cd5eee3e","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-29 22:43:46 +0000 UTC FinishedAt: 2026-08-29 22:43:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdbkr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_NETWORK","AUDIT","NET","INET","OVERLAY_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["selinux_backing_file_alloc","selinux_backing_file_free","selinux_file_mprotect","security_backing_file_alloc","security_backing_file_free","security_file_mprotect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_NETWORK","AUDIT","NET","INET","OVERLAY_FS"],"series_id":"d7a822de-d326-49fc-94de-8b42cd5eee3e","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-29 22:43:46 +0000 UTC FinishedAt: 2026-08-29 22:43:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdbkr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_NETWORK","AUDIT","NET","INET","OVERLAY_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["selinux_backing_file_alloc","selinux_backing_file_free","selinux_file_mprotect","security_backing_file_alloc","security_backing_file_free","security_file_mprotect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_NETWORK","AUDIT","NET","INET","OVERLAY_FS"],"series_id":"d7a822de-d326-49fc-94de-8b42cd5eee3e","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-29 22:43:46 +0000 UTC FinishedAt: 2026-08-29 23:00:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdbkr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_NETWORK","AUDIT","NET","INET","OVERLAY_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["selinux_backing_file_alloc","selinux_backing_file_free","selinux_file_mprotect","security_backing_file_alloc","security_backing_file_free","security_file_mprotect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_NETWORK","AUDIT","NET","INET","OVERLAY_FS"],"series_id":"d7a822de-d326-49fc-94de-8b42cd5eee3e","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-29 22:43:46 +0000 UTC FinishedAt: 2026-08-29 23:00:08 +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:*701fd2d6-0a3f-4510-be48-26dfd6e91e85,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-workflowdbkr6/series-workflowdbkr6-convert-artifact-1912288769/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": "c51221c9-fd97-4820-a008-f8392b4d767d", "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-workflowdbkr6/series-workflowdbkr6-build-action-1091307149/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdbkr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_NETWORK","AUDIT","NET","INET","OVERLAY_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["selinux_backing_file_alloc","selinux_backing_file_free","selinux_file_mprotect","security_backing_file_alloc","security_backing_file_free","security_file_mprotect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_NETWORK","AUDIT","NET","INET","OVERLAY_FS"],"series_id":"d7a822de-d326-49fc-94de-8b42cd5eee3e","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-29 22:43:46 +0000 UTC FinishedAt: 2026-08-29 22:59:58 +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:*701fd2d6-0a3f-4510-be48-26dfd6e91e85,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-workflowdbkr6/series-workflowdbkr6-convert-artifact-1912288769/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": "c51221c9-fd97-4820-a008-f8392b4d767d", "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-workflowdbkr6/series-workflowdbkr6-build-action-1091307149/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdbkr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_NETWORK","AUDIT","NET","INET","OVERLAY_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["selinux_backing_file_alloc","selinux_backing_file_free","selinux_file_mprotect","security_backing_file_alloc","security_backing_file_free","security_file_mprotect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_NETWORK","AUDIT","NET","INET","OVERLAY_FS"],"series_id":"d7a822de-d326-49fc-94de-8b42cd5eee3e","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-29 23:00:08 +0000 UTC FinishedAt: 2026-08-29 23:00:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdbkr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_NETWORK","AUDIT","NET","INET","OVERLAY_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["selinux_backing_file_alloc","selinux_backing_file_free","selinux_file_mprotect","security_backing_file_alloc","security_backing_file_free","security_file_mprotect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_NETWORK","AUDIT","NET","INET","OVERLAY_FS"],"series_id":"d7a822de-d326-49fc-94de-8b42cd5eee3e","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-29 23:00:08 +0000 UTC FinishedAt: 2026-08-29 23:00:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdbkr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_NETWORK","AUDIT","NET","INET","OVERLAY_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["selinux_backing_file_alloc","selinux_backing_file_free","selinux_file_mprotect","security_backing_file_alloc","security_backing_file_free","security_file_mprotect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_NETWORK","AUDIT","NET","INET","OVERLAY_FS"],"series_id":"d7a822de-d326-49fc-94de-8b42cd5eee3e","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-29 23:00:08 +0000 UTC FinishedAt: 2026-08-29 23:02:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdbkr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_NETWORK","AUDIT","NET","INET","OVERLAY_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["selinux_backing_file_alloc","selinux_backing_file_free","selinux_file_mprotect","security_backing_file_alloc","security_backing_file_free","security_file_mprotect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_NETWORK","AUDIT","NET","INET","OVERLAY_FS"],"series_id":"d7a822de-d326-49fc-94de-8b42cd5eee3e","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-29 23:00:08 +0000 UTC FinishedAt: 2026-08-29 23:01:58 +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:*c51221c9-fd97-4820-a008-f8392b4d767d,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-workflowdbkr6/series-workflowdbkr6-build-action-1091307149/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-workflowdbkr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_NETWORK","AUDIT","NET","INET","OVERLAY_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["selinux_backing_file_alloc","selinux_backing_file_free","selinux_file_mprotect","security_backing_file_alloc","security_backing_file_free","security_file_mprotect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_NETWORK","AUDIT","NET","INET","OVERLAY_FS"],"series_id":"d7a822de-d326-49fc-94de-8b42cd5eee3e","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-29 23:02:08 +0000 UTC FinishedAt: 2026-08-29 23:45:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdbkr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_NETWORK","AUDIT","NET","INET","OVERLAY_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["selinux_backing_file_alloc","selinux_backing_file_free","selinux_file_mprotect","security_backing_file_alloc","security_backing_file_free","security_file_mprotect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_NETWORK","AUDIT","NET","INET","OVERLAY_FS"],"series_id":"d7a822de-d326-49fc-94de-8b42cd5eee3e","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-29 23:02:08 +0000 UTC FinishedAt: 2026-08-29 23:45:37 +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":["selinux_backing_file_alloc","selinux_backing_file_free","selinux_file_mprotect","security_backing_file_alloc","security_backing_file_free","security_file_mprotect"],"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:*eaaba657-234b-4298-88b6-bc7d9c029bf0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c51221c9-fd97-4820-a008-f8392b4d767d,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-workflowdbkr6/series-workflowdbkr6-build-action-1785530996/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-workflowdbkr6/series-workflowdbkr6-build-action-1091307149/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowdbkr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_NETWORK","AUDIT","NET","INET","OVERLAY_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["selinux_backing_file_alloc","selinux_backing_file_free","selinux_file_mprotect","security_backing_file_alloc","security_backing_file_free","security_file_mprotect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_NETWORK","AUDIT","NET","INET","OVERLAY_FS"],"series_id":"d7a822de-d326-49fc-94de-8b42cd5eee3e","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-29 23:02:08 +0000 UTC FinishedAt: 2026-08-29 23:02:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdbkr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_NETWORK","AUDIT","NET","INET","OVERLAY_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["selinux_backing_file_alloc","selinux_backing_file_free","selinux_file_mprotect","security_backing_file_alloc","security_backing_file_free","security_file_mprotect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_NETWORK","AUDIT","NET","INET","OVERLAY_FS"],"series_id":"d7a822de-d326-49fc-94de-8b42cd5eee3e","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-29 23:02:08 +0000 UTC FinishedAt: 2026-08-29 23:02:13 +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":["selinux_backing_file_alloc","selinux_backing_file_free","selinux_file_mprotect","security_backing_file_alloc","security_backing_file_free","security_file_mprotect"],"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-workflowdbkr6/series-workflowdbkr6-convert-artifact-4010707862/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdbkr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_NETWORK","AUDIT","NET","INET","OVERLAY_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["selinux_backing_file_alloc","selinux_backing_file_free","selinux_file_mprotect","security_backing_file_alloc","security_backing_file_free","security_file_mprotect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_NETWORK","AUDIT","NET","INET","OVERLAY_FS"],"series_id":"d7a822de-d326-49fc-94de-8b42cd5eee3e","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-29 23:02:08 +0000 UTC FinishedAt: 2026-08-29 23:02:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdbkr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_NETWORK","AUDIT","NET","INET","OVERLAY_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["selinux_backing_file_alloc","selinux_backing_file_free","selinux_file_mprotect","security_backing_file_alloc","security_backing_file_free","security_file_mprotect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_NETWORK","AUDIT","NET","INET","OVERLAY_FS"],"series_id":"d7a822de-d326-49fc-94de-8b42cd5eee3e","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-29 23:02:08 +0000 UTC FinishedAt: 2026-08-29 23:02:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdbkr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_NETWORK","AUDIT","NET","INET","OVERLAY_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["selinux_backing_file_alloc","selinux_backing_file_free","selinux_file_mprotect","security_backing_file_alloc","security_backing_file_free","security_file_mprotect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_NETWORK","AUDIT","NET","INET","OVERLAY_FS"],"series_id":"d7a822de-d326-49fc-94de-8b42cd5eee3e","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-29 23:02:08 +0000 UTC FinishedAt: 2026-08-29 23:02:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdbkr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_NETWORK","AUDIT","NET","INET","OVERLAY_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["selinux_backing_file_alloc","selinux_backing_file_free","selinux_file_mprotect","security_backing_file_alloc","security_backing_file_free","security_file_mprotect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_NETWORK","AUDIT","NET","INET","OVERLAY_FS"],"series_id":"d7a822de-d326-49fc-94de-8b42cd5eee3e","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-29 23:02:18 +0000 UTC FinishedAt: 2026-08-29 23:45:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdbkr6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_NETWORK","AUDIT","NET","INET","OVERLAY_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["selinux_backing_file_alloc","selinux_backing_file_free","selinux_file_mprotect","security_backing_file_alloc","security_backing_file_free","security_file_mprotect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_NETWORK","AUDIT","NET","INET","OVERLAY_FS"],"series_id":"d7a822de-d326-49fc-94de-8b42cd5eee3e","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-29 23:02:18 +0000 UTC FinishedAt: 2026-08-29 23:45:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*eaaba657-234b-4298-88b6-bc7d9c029bf0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c51221c9-fd97-4820-a008-f8392b4d767d,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-workflowdbkr6/series-workflowdbkr6-build-action-1785530996/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-workflowdbkr6/series-workflowdbkr6-build-action-1091307149/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-workflowdbkr6/series-workflowdbkr6-convert-artifact-4010707862/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,}