Name: series-workflowlvdf7 Phase: Succeeded StartedAt: 2026-07-30 08:01:22 +0000 UTC FinishedAt: 2026-07-30 12:04:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlvdf7[0] Phase: Succeeded StartedAt: 2026-07-30 08:01:22 +0000 UTC FinishedAt: 2026-07-30 08:09:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlvdf7[0].run-triage Phase: Succeeded StartedAt: 2026-07-30 08:01:22 +0000 UTC FinishedAt: 2026-07-30 08:09:47 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OCFS2_FS", "CONFIGFS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OCFS2_FS", "CONFIGFS_FS" ], "series_id": "80fdec58-b7f6-413d-beea-7c8cefbc7625" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "ocfs2_init_security_and_acl", "ocfs2_init_acl", "ocfs2_acl_init_prepare", "ocfs2_calc_xattr_init", "ocfs2_xattr_set_handle" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDA4OjA3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09DRlMyX0ZTJiMzNDssCiAgICAmIzM0O0NPTkZJR0ZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7b2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsJiMzNDssCiAgICAmIzM0O29jZnMyX2luaXRfYWNsJiMzNDssCiAgICAmIzM0O29jZnMyX2FjbF9pbml0X3ByZXBhcmUmIzM0OywKICAgICYjMzQ7b2NmczJfY2FsY194YXR0cl9pbml0JiMzNDssCiAgICAmIzM0O29jZnMyX3hhdHRyX3NldF9oYW5kbGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIEFDTCBpbml0aWFsaXphdGlvbiBkdXJpbmcgaW5vZGUgY3JlYXRpb24gaW4gT0NGUzIgdG8gcHJldmVudCBkZWFkbG9ja3MuIEl0IG1vZGlmaWVzIGhvdyBBQ0xzIGFyZSBjYWxjdWxhdGVkIGFuZCBzZXQgZm9yIG5ldyBpbm9kZXMgKGUuZy4sIHZpYSBta25vZCwgbWtkaXIsIGNyZWF0ZSwgc3ltbGluaywgcmVmbGluaykuIFRoZSBjaGFuZ2VzIGFyZSBpbiBjb3JlIE9DRlMyIGxvZ2ljIGFuZCBhcmUgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBWRlMgc3lzY2FsbHMgd2hlbiBvcGVyYXRpbmcgb24gYW4gT0NGUzIgZmlsZXN5c3RlbS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwODowNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDcyODM0M2IzNTAzOWUwNjc1NDdkZWJjMDYxZTJjZGFiZTFlYjA2Y2NcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAzMCAwODowNzoyOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9hY2wuYyBiL2ZzL29jZnMyL2FjbC5jXG5pbmRleCBhZjFlMmNlZGIyMTdmLi4wOTBlYzYwZmI1NzZhIDEwMDY0NFxuLS0tIGEvZnMvb2NmczIvYWNsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL29jZnMyL2FjbC5jXG5AQCAtMTEwLDggJiM0MzsxMTAsNyBAQCBzdGF0aWMgdm9pZCAqb2NmczJfYWNsX3RvX3hhdHRyKGNvbnN0IHN0cnVjdCBwb3NpeF9hY2wgKmFjbCwgc2l6ZV90ICpzaXplKVxuIFx0cmV0dXJuIG9jZnMyX2FjbDtcbiB9XG4gXG4tc3RhdGljIHN0cnVjdCBwb3NpeF9hY2wgKm9jZnMyX2dldF9hY2xfbm9sb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tXHRcdFx0XHRcdCAgICAgIGludCB0eXBlLFxuJiM0MztzdGF0aWMgc3RydWN0IHBvc2l4X2FjbCAqb2NmczJfZ2V0X2FjbF9ub2xvY2soc3RydWN0IGlub2RlICppbm9kZSwgaW50IHR5cGUsXG4gXHRcdFx0XHRcdCAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgpXG4ge1xuIFx0aW50IG5hbWVfaW5kZXg7XG5AQCAtMzQ5LDYzICYjNDM7MzQ4LDEwNSBAQCBpbnQgb2NmczJfYWNsX2NobW9kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpXG4gICogSW5pdGlhbGl6ZSB0aGUgQUNMcyBvZiBhIG5ldyBpbm9kZS4gSWYgcGFyZW50IGRpcmVjdG9yeSBoYXMgZGVmYXVsdCBBQ0wsXG4gICogdGhlbiBjbG9uZSB0byBuZXcgaW5vZGUuIENhbGxlZCBmcm9tIG9jZnMyX21rbm9kLlxuICAqL1xuLWludCBvY2ZzMl9pbml0X2FjbChoYW5kbGVfdCAqaGFuZGxlLFxuLVx0XHQgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLVx0XHQgICBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0ICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCxcbi1cdFx0ICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJfYmgsXG4tXHRcdCAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjLFxuLVx0XHQgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqZGF0YV9hYylcbiYjNDM7dm9pZCBvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlKHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgKnN0YXRlKVxuJiM0Mzt7XG4mIzQzO1x0cG9zaXhfYWNsX3JlbGVhc2Uoc3RhdGUtXHUwMDNlZGVmYXVsdF9hY2wpO1xuJiM0MztcdHBvc2l4X2FjbF9yZWxlYXNlKHN0YXRlLVx1MDAzZWFjbCk7XG4mIzQzO1x0c3RhdGUtXHUwMDNlZGVmYXVsdF9hY2wgPSBOVUxMO1xuJiM0MztcdHN0YXRlLVx1MDAzZWFjbCA9IE5VTEw7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuJiM0MztcdFx0XHQgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpcl9iaCxcbiYjNDM7XHRcdFx0ICAgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqc3RhdGUpXG4ge1xuIFx0c3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihpbm9kZS1cdTAwM2VpX3NiKTtcbi1cdHN0cnVjdCBwb3NpeF9hY2wgKmFjbCA9IE5VTEw7XG4tXHRpbnQgcmV0ID0gMCwgcmV0Mjtcbi1cdHVtb2RlX3QgbW9kZTtcbi1cbi1cdGlmICghU19JU0xOSyhpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG4tXHRcdGlmIChvc2ItXHUwMDNlc19tb3VudF9vcHQgXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkge1xuLVx0XHRcdGRvd25fcmVhZChcdTAwMjZPQ0ZTMl9JKGRpciktXHUwMDNlaXBfeGF0dHJfc2VtKTtcbi1cdFx0XHRhY2wgPSBvY2ZzMl9nZXRfYWNsX25vbG9jayhkaXIsIEFDTF9UWVBFX0RFRkFVTFQsXG4tXHRcdFx0XHRcdFx0ICAgZGlyX2JoKTtcbi1cdFx0XHR1cF9yZWFkKFx1MDAyNk9DRlMyX0koZGlyKS1cdTAwM2VpcF94YXR0cl9zZW0pO1xuLVx0XHRcdGlmIChJU19FUlIoYWNsKSlcbi1cdFx0XHRcdHJldHVybiBQVFJfRVJSKGFjbCk7XG4mIzQzO1x0aW50IHJldCA9IDA7XG4mIzQzO1xuJiM0MztcdHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsID0gTlVMTDtcbiYjNDM7XHRzdGF0ZS1cdTAwM2VhY2wgPSBOVUxMO1xuJiM0MztcdHN0YXRlLVx1MDAzZW1vZGUgPSBpbm9kZS1cdTAwM2VpX21vZGU7XG4mIzQzO1xuJiM0MztcdGlmIChTX0lTTE5LKGlub2RlLVx1MDAzZWlfbW9kZSkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKG9zYi1cdTAwM2VzX21vdW50X29wdCBcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7XG4mIzQzO1x0XHRkb3duX3JlYWQoXHUwMDI2T0NGUzJfSShkaXIpLVx1MDAzZWlwX3hhdHRyX3NlbSk7XG4mIzQzO1x0XHRzdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCA9XG4mIzQzO1x0XHRcdG9jZnMyX2dldF9hY2xfbm9sb2NrKGRpciwgQUNMX1RZUEVfREVGQVVMVCwgZGlyX2JoKTtcbiYjNDM7XHRcdHVwX3JlYWQoXHUwMDI2T0NGUzJfSShkaXIpLVx1MDAzZWlwX3hhdHRyX3NlbSk7XG4mIzQzO1x0XHRpZiAoSVNfRVJSKHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsKSkge1xuJiM0MztcdFx0XHRyZXQgPSBQVFJfRVJSKHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsKTtcbiYjNDM7XHRcdFx0c3RhdGUtXHUwMDNlZGVmYXVsdF9hY2wgPSBOVUxMO1xuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuIFx0XHR9XG4tXHRcdGlmICghYWNsKSB7XG4tXHRcdFx0bW9kZSA9IGlub2RlLVx1MDAzZWlfbW9kZSBcdTAwMjYgfmN1cnJlbnRfdW1hc2soKTtcbi1cdFx0XHRyZXQgPSBvY2ZzMl9hY2xfc2V0X21vZGUoaW5vZGUsIGRpX2JoLCBoYW5kbGUsIG1vZGUpO1xuLVx0XHRcdGlmIChyZXQpIHtcbi1cdFx0XHRcdG1sb2dfZXJybm8ocmV0KTtcbiYjNDM7XHRcdGlmIChzdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCkge1xuJiM0MztcdFx0XHRzdGF0ZS1cdTAwM2VhY2wgPSBwb3NpeF9hY2xfZHVwKHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsKTtcbiYjNDM7XHRcdFx0aWYgKCFzdGF0ZS1cdTAwM2VhY2wpIHtcbiYjNDM7XHRcdFx0XHRyZXQgPSAtRU5PTUVNO1xuIFx0XHRcdFx0Z290byBjbGVhbnVwO1xuIFx0XHRcdH1cbiYjNDM7XHRcdFx0cmV0ID0gX19wb3NpeF9hY2xfY3JlYXRlKFx1MDAyNnN0YXRlLVx1MDAzZWFjbCwgR0ZQX05PRlMsXG4mIzQzO1x0XHRcdFx0XHRcdCBcdTAwMjZzdGF0ZS1cdTAwM2Vtb2RlKTtcbiYjNDM7XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1x0XHRcdGlmIChyZXQgPT0gMCkge1xuJiM0MztcdFx0XHRcdHBvc2l4X2FjbF9yZWxlYXNlKHN0YXRlLVx1MDAzZWFjbCk7XG4mIzQzO1x0XHRcdFx0c3RhdGUtXHUwMDNlYWNsID0gTlVMTDtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRpZiAoIVNfSVNESVIoaW5vZGUtXHUwMDNlaV9tb2RlKSkge1xuJiM0MztcdFx0XHRcdHBvc2l4X2FjbF9yZWxlYXNlKHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsKTtcbiYjNDM7XHRcdFx0XHRzdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCA9IE5VTEw7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdHN0YXRlLVx1MDAzZW1vZGUgXHUwMDI2PSB+Y3VycmVudF91bWFzaygpO1xuIFx0XHR9XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHN0YXRlLVx1MDAzZW1vZGUgXHUwMDI2PSB+Y3VycmVudF91bWFzaygpO1xuIFx0fVxuLVx0aWYgKChvc2ItXHUwMDNlc19tb3VudF9vcHQgXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkgXHUwMDI2XHUwMDI2IGFjbCkge1xuLVx0XHRpZiAoU19JU0RJUihpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztjbGVhbnVwOlxuJiM0MztcdG9jZnMyX2FjbF9pbml0X3JlbGVhc2Uoc3RhdGUpO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBvY2ZzMl9pbml0X2FjbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuJiM0MztcdFx0ICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCxcbiYjNDM7XHRcdCAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjLFxuJiM0MztcdFx0ICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmRhdGFfYWMsXG4mIzQzO1x0XHQgICBzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICpzdGF0ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoaW5vZGUtXHUwMDNlaV9zYik7XG4mIzQzO1x0aW50IHJldCA9IDA7XG4mIzQzO1xuJiM0MztcdGlmIChTX0lTTE5LKGlub2RlLVx1MDAzZWlfbW9kZSkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKG9zYi1cdTAwM2VzX21vdW50X29wdCBcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7XG4mIzQzO1x0XHRpZiAoU19JU0RJUihpbm9kZS1cdTAwM2VpX21vZGUpIFx1MDAyNlx1MDAyNiBzdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCkge1xuIFx0XHRcdHJldCA9IG9jZnMyX3NldF9hY2woaGFuZGxlLCBpbm9kZSwgZGlfYmgsXG4tXHRcdFx0XHRcdCAgICBBQ0xfVFlQRV9ERUZBVUxULCBhY2wsXG4tXHRcdFx0XHRcdCAgICBtZXRhX2FjLCBkYXRhX2FjKTtcbiYjNDM7XHRcdFx0XHRcdCAgICBBQ0xfVFlQRV9ERUZBVUxULFxuJiM0MztcdFx0XHRcdFx0ICAgIHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsLCBtZXRhX2FjLFxuJiM0MztcdFx0XHRcdFx0ICAgIGRhdGFfYWMpO1xuIFx0XHRcdGlmIChyZXQpXG4tXHRcdFx0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1x0XHRcdFx0cmV0dXJuIHJldDtcbiBcdFx0fVxuLVx0XHRtb2RlID0gaW5vZGUtXHUwMDNlaV9tb2RlO1xuLVx0XHRyZXQgPSBfX3Bvc2l4X2FjbF9jcmVhdGUoXHUwMDI2YWNsLCBHRlBfTk9GUywgXHUwMDI2bW9kZSk7XG4tXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4gXG4tXHRcdHJldDIgPSBvY2ZzMl9hY2xfc2V0X21vZGUoaW5vZGUsIGRpX2JoLCBoYW5kbGUsIG1vZGUpO1xuLVx0XHRpZiAocmV0Mikge1xuLVx0XHRcdG1sb2dfZXJybm8ocmV0Mik7XG4tXHRcdFx0cmV0ID0gcmV0Mjtcbi1cdFx0XHRnb3RvIGNsZWFudXA7XG4tXHRcdH1cbi1cdFx0aWYgKHJldCBcdTAwM2UgMCkge1xuLVx0XHRcdHJldCA9IG9jZnMyX3NldF9hY2woaGFuZGxlLCBpbm9kZSxcbi1cdFx0XHRcdFx0ICAgIGRpX2JoLCBBQ0xfVFlQRV9BQ0NFU1MsXG4tXHRcdFx0XHRcdCAgICBhY2wsIG1ldGFfYWMsIGRhdGFfYWMpO1xuJiM0MztcdHJldCA9IG9jZnMyX2FjbF9zZXRfbW9kZShpbm9kZSwgZGlfYmgsIGhhbmRsZSwgc3RhdGUtXHUwMDNlbW9kZSk7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0bWxvZ19lcnJubyhyZXQpO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChvc2ItXHUwMDNlc19tb3VudF9vcHQgXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkge1xuJiM0MztcdFx0aWYgKHN0YXRlLVx1MDAzZWFjbCkge1xuJiM0MztcdFx0XHRyZXQgPSBvY2ZzMl9zZXRfYWNsKGhhbmRsZSwgaW5vZGUsIGRpX2JoLFxuJiM0MztcdFx0XHRcdFx0ICAgIEFDTF9UWVBFX0FDQ0VTUywgc3RhdGUtXHUwMDNlYWNsLFxuJiM0MztcdFx0XHRcdFx0ICAgIG1ldGFfYWMsIGRhdGFfYWMpO1xuIFx0XHR9XG4gXHR9XG4tY2xlYW51cDpcbi1cdHBvc2l4X2FjbF9yZWxlYXNlKGFjbCk7XG4mIzQzO1xuIFx0cmV0dXJuIHJldDtcbiB9XG5kaWZmIC0tZ2l0IGEvZnMvb2NmczIvYWNsLmggYi9mcy9vY2ZzMi9hY2wuaFxuaW5kZXggNjY3YzZmMDNmYTYwNi4uYTkxZjljZTI3OGQ2ZCAxMDA2NDRcbi0tLSBhL2ZzL29jZnMyL2FjbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9vY2ZzMi9hY2wuaFxuQEAgLTIwLDkgJiM0MzsyMCwyMCBAQCBzdHJ1Y3QgcG9zaXhfYWNsICpvY2ZzMl9pb3BfZ2V0X2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSwgYm9vbCByY3UpO1xuIGludCBvY2ZzMl9pb3Bfc2V0X2FjbChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIFx0XHQgICAgICBzdHJ1Y3QgcG9zaXhfYWNsICphY2wsIGludCB0eXBlKTtcbiBleHRlcm4gaW50IG9jZnMyX2FjbF9jaG1vZChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGJ1ZmZlcl9oZWFkICopO1xuLWV4dGVybiBpbnQgb2NmczJfaW5pdF9hY2woaGFuZGxlX3QgKiwgc3RydWN0IGlub2RlICosIHN0cnVjdCBpbm9kZSAqLFxuLVx0XHRcdCAgc3RydWN0IGJ1ZmZlcl9oZWFkICosIHN0cnVjdCBidWZmZXJfaGVhZCAqLFxuLVx0XHRcdCAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKixcbi1cdFx0XHQgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICopO1xuJiM0MztzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlIHtcbiYjNDM7XHRzdHJ1Y3QgcG9zaXhfYWNsICpkZWZhdWx0X2FjbDtcbiYjNDM7XHRzdHJ1Y3QgcG9zaXhfYWNsICphY2w7XG4mIzQzO1x0dW1vZGVfdCBtb2RlO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7aW50IG9jZnMyX2FjbF9pbml0X3ByZXBhcmUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4mIzQzO1x0XHRcdCAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlyX2JoLFxuJiM0MztcdFx0XHQgICBzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICpzdGF0ZSk7XG4mIzQzO3ZvaWQgb2NmczJfYWNsX2luaXRfcmVsZWFzZShzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICpzdGF0ZSk7XG4mIzQzO2ludCBvY2ZzMl9pbml0X2FjbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuJiM0MztcdFx0ICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCxcbiYjNDM7XHRcdCAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjLFxuJiM0MztcdFx0ICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmRhdGFfYWMsXG4mIzQzO1x0XHQgICBzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICpzdGF0ZSk7XG4gXG4gI2VuZGlmIC8qIE9DRlMyX0FDTF9IICovXG5kaWZmIC0tZ2l0IGEvZnMvb2NmczIvbmFtZWkuYyBiL2ZzL29jZnMyL25hbWVpLmNcbmluZGV4IDEyNzc2NjZjNzdjZDIuLmVhMzdhNTA1ODA4OTAgMTAwNjQ0XG4tLS0gYS9mcy9vY2ZzMi9uYW1laS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9vY2ZzMi9uYW1laS5jXG5AQCAtMjU2LDYgJiM0MzsyNTYsNyBAQCBzdGF0aWMgaW50IG9jZnMyX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0c2lnc2V0X3Qgb2xkc2V0O1xuIFx0aW50IGRpZF9ibG9ja19zaWduYWxzID0gMDtcbiBcdHN0cnVjdCBvY2ZzMl9kZW50cnlfbG9jayAqZGwgPSBOVUxMO1xuJiM0MztcdHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgYWNsX3N0YXRlID0geyAwIH07XG4gXG4gXHR0cmFjZV9vY2ZzMl9ta25vZChkaXIsIGRlbnRyeSwgZGVudHJ5LVx1MDAzZWRfbmFtZS5sZW4sIGRlbnRyeS1cdTAwM2VkX25hbWUubmFtZSxcbiBcdFx0XHQgICh1bnNpZ25lZCBsb25nIGxvbmcpT0NGUzJfSShkaXIpLVx1MDAzZWlwX2Jsa25vLFxuQEAgLTMzMCwxMCAmIzQzOzMzMSwxNCBAQCBzdGF0aWMgaW50IG9jZnMyX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0XHR9XG4gXHR9XG4gXG4mIzQzO1x0c3RhdHVzID0gb2NmczJfYWNsX2luaXRfcHJlcGFyZShpbm9kZSwgZGlyLCBwYXJlbnRfZmVfYmgsIFx1MDAyNmFjbF9zdGF0ZSk7XG4mIzQzO1x0aWYgKHN0YXR1cyBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gbGVhdmU7XG4mIzQzO1xuIFx0LyogY2FsY3VsYXRlIG1ldGEgZGF0YS9jbHVzdGVycyBmb3Igc2V0dGluZyBzZWN1cml0eSBhbmQgYWNsIHhhdHRyICovXG4tXHRzdGF0dXMgPSBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoZGlyLCBwYXJlbnRfZmVfYmgsIG1vZGUsXG4tXHRcdFx0XHQgICAgICAgXHUwMDI2c2ksIFx1MDAyNndhbnRfY2x1c3RlcnMsXG4tXHRcdFx0XHQgICAgICAgXHUwMDI2eGF0dHJfY3JlZGl0cywgXHUwMDI2d2FudF9tZXRhKTtcbiYjNDM7XHRzdGF0dXMgPSBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoZGlyLCBtb2RlLCBcdTAwMjZzaSwgXHUwMDI2d2FudF9jbHVzdGVycyxcbiYjNDM7XHRcdFx0XHQgICAgICAgXHUwMDI2eGF0dHJfY3JlZGl0cywgXHUwMDI2d2FudF9tZXRhLFxuJiM0MztcdFx0XHRcdCAgICAgICBcdTAwMjZhY2xfc3RhdGUpO1xuIFx0aWYgKHN0YXR1cyBcdTAwM2MgMCkge1xuIFx0XHRtbG9nX2Vycm5vKHN0YXR1cyk7XG4gXHRcdGdvdG8gbGVhdmU7XG5AQCAtNDExLDggJiM0Mzs0MTYsOCBAQCBzdGF0aWMgaW50IG9jZnMyX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0XHRpbmNfbmxpbmsoZGlyKTtcbiBcdH1cbiBcbi1cdHN0YXR1cyA9IG9jZnMyX2luaXRfYWNsKGhhbmRsZSwgaW5vZGUsIGRpciwgbmV3X2ZlX2JoLCBwYXJlbnRfZmVfYmgsXG4tXHRcdFx0IG1ldGFfYWMsIGRhdGFfYWMpO1xuJiM0MztcdHN0YXR1cyA9IG9jZnMyX2luaXRfYWNsKGhhbmRsZSwgaW5vZGUsIG5ld19mZV9iaCwgbWV0YV9hYywgZGF0YV9hYyxcbiYjNDM7XHRcdFx0XHRcdTAwMjZhY2xfc3RhdGUpO1xuIFxuIFx0aWYgKHN0YXR1cyBcdTAwM2MgMCkge1xuIFx0XHRtbG9nX2Vycm5vKHN0YXR1cyk7XG5AQCAtNDc3LDYgJiM0Mzs0ODIsOCBAQCBzdGF0aWMgaW50IG9jZnMyX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0YnJlbHNlKHBhcmVudF9mZV9iaCk7XG4gXHRrZnJlZShzaS52YWx1ZSk7XG4gXG4mIzQzO1x0b2NmczJfYWNsX2luaXRfcmVsZWFzZShcdTAwMjZhY2xfc3RhdGUpO1xuJiM0MztcbiBcdG9jZnMyX2ZyZWVfZGlyX2xvb2t1cF9yZXN1bHQoXHUwMDI2bG9va3VwKTtcbiBcbiBcdGlmIChpbm9kZV9hYylcbmRpZmYgLS1naXQgYS9mcy9vY2ZzMi94YXR0ci5jIGIvZnMvb2NmczIveGF0dHIuY1xuaW5kZXggZmNkZGQzYzEzYWNkZC4uODZmMDI5MzY4MWZjYyAxMDA2NDRcbi0tLSBhL2ZzL29jZnMyL3hhdHRyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL29jZnMyL3hhdHRyLmNcbkBAIC02MTEsMTMgJiM0Mzs2MTEsMTAgQEAgaW50IG9jZnMyX2NhbGNfc2VjdXJpdHlfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLWludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0ICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpcl9iaCxcbi1cdFx0XHQgIHVtb2RlX3QgbW9kZSxcbiYjNDM7aW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpciwgdW1vZGVfdCBtb2RlLFxuIFx0XHRcdCAgc3RydWN0IG9jZnMyX3NlY3VyaXR5X3hhdHRyX2luZm8gKnNpLFxuLVx0XHRcdCAgaW50ICp3YW50X2NsdXN0ZXJzLFxuLVx0XHRcdCAgaW50ICp4YXR0cl9jcmVkaXRzLFxuLVx0XHRcdCAgaW50ICp3YW50X21ldGEpXG4mIzQzO1x0XHRcdCAgaW50ICp3YW50X2NsdXN0ZXJzLCBpbnQgKnhhdHRyX2NyZWRpdHMsXG4mIzQzO1x0XHRcdCAgaW50ICp3YW50X21ldGEsIHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgKmFjbF9zdGF0ZSlcbiB7XG4gXHRpbnQgcmV0ID0gMDtcbiBcdHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoZGlyLVx1MDAzZWlfc2IpO1xuQEAgLTYyOCwxOSAmIzQzOzYyNSwxNSBAQCBpbnQgb2NmczJfY2FsY194YXR0cl9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0XHRcdFx0XHRcdCAgICAgc2ktXHUwMDNldmFsdWVfbGVuKTtcbiBcbiBcdGlmIChvc2ItXHUwMDNlc19tb3VudF9vcHQgXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkge1xuLVx0XHRkb3duX3JlYWQoXHUwMDI2T0NGUzJfSShkaXIpLVx1MDAzZWlwX3hhdHRyX3NlbSk7XG4tXHRcdGFjbF9sZW4gPSBvY2ZzMl94YXR0cl9nZXRfbm9sb2NrKGRpciwgZGlyX2JoLFxuLVx0XHRcdFx0XHRPQ0ZTMl9YQVRUUl9JTkRFWF9QT1NJWF9BQ0xfREVGQVVMVCxcbi1cdFx0XHRcdFx0XCYjMzQ7XCYjMzQ7LCBOVUxMLCAwKTtcbi1cdFx0dXBfcmVhZChcdTAwMjZPQ0ZTMl9JKGRpciktXHUwMDNlaXBfeGF0dHJfc2VtKTtcbi1cdFx0aWYgKGFjbF9sZW4gXHUwMDNlIDApIHtcbi1cdFx0XHRhX3NpemUgPSBvY2ZzMl94YXR0cl9lbnRyeV9yZWFsX3NpemUoMCwgYWNsX2xlbik7XG4tXHRcdFx0aWYgKFNfSVNESVIobW9kZSkpXG4tXHRcdFx0XHRhX3NpemUgXHUwMDNjXHUwMDNjPSAxO1xuLVx0XHR9IGVsc2UgaWYgKGFjbF9sZW4gIT0gMCBcdTAwMjZcdTAwMjYgYWNsX2xlbiAhPSAtRU5PREFUQSkge1xuLVx0XHRcdHJldCA9IGFjbF9sZW47XG4tXHRcdFx0bWxvZ19lcnJubyhyZXQpO1xuLVx0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHRpZiAoYWNsX3N0YXRlLVx1MDAzZWRlZmF1bHRfYWNsIFx1MDAyNlx1MDAyNiBTX0lTRElSKG1vZGUpKSB7XG4mIzQzO1x0XHRcdGFjbF9sZW4gPSBhY2xfc3RhdGUtXHUwMDNlZGVmYXVsdF9hY2wtXHUwMDNlYV9jb3VudCAqXG4mIzQzO1x0XHRcdFx0ICBzaXplb2Yoc3RydWN0IG9jZnMyX2FjbF9lbnRyeSk7XG4mIzQzO1x0XHRcdGFfc2l6ZSAmIzQzOz0gb2NmczJfeGF0dHJfZW50cnlfcmVhbF9zaXplKDAsIGFjbF9sZW4pO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0aWYgKGFjbF9zdGF0ZS1cdTAwM2VhY2wpIHtcbiYjNDM7XHRcdFx0YWNsX2xlbiA9IGFjbF9zdGF0ZS1cdTAwM2VhY2wtXHUwMDNlYV9jb3VudCAqXG4mIzQzO1x0XHRcdFx0ICBzaXplb2Yoc3RydWN0IG9jZnMyX2FjbF9lbnRyeSk7XG4mIzQzO1x0XHRcdGFfc2l6ZSAmIzQzOz0gb2NmczJfeGF0dHJfZW50cnlfcmVhbF9zaXplKDAsIGFjbF9sZW4pO1xuIFx0XHR9XG4gXHR9XG4gXG5AQCAtNjgzLDE0ICYjNDM7Njc2LDMzIEBAIGludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICpkaXIsXG4gXHRcdFx0XHRcdFx0XHQgICBuZXdfY2x1c3RlcnMpO1xuIFx0XHQqd2FudF9jbHVzdGVycyAmIzQzOz0gbmV3X2NsdXN0ZXJzO1xuIFx0fVxuLVx0aWYgKG9zYi1cdTAwM2VzX21vdW50X29wdCBcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMIFx1MDAyNlx1MDAyNlxuLVx0ICAgIGFjbF9sZW4gXHUwMDNlIE9DRlMyX1hBVFRSX0lOTElORV9TSVpFKSB7XG4tXHRcdC8qIGZvciBkaXJlY3RvcnksIGl0IGhhcyBERUZBVUxUIGFuZCBBQ0NFU1MgdHdvIHR5cGVzIG9mIGFjbHMgKi9cbi1cdFx0bmV3X2NsdXN0ZXJzID0gKFNfSVNESVIobW9kZSkgPyAyIDogMSkgKlxuLVx0XHRcdFx0b2NmczJfY2x1c3RlcnNfZm9yX2J5dGVzKGRpci1cdTAwM2VpX3NiLCBhY2xfbGVuKTtcbi1cdFx0KnhhdHRyX2NyZWRpdHMgJiM0Mzs9IG9jZnMyX2NsdXN0ZXJzX3RvX2Jsb2NrcyhkaXItXHUwMDNlaV9zYixcbi1cdFx0XHRcdFx0XHRcdCAgIG5ld19jbHVzdGVycyk7XG4tXHRcdCp3YW50X2NsdXN0ZXJzICYjNDM7PSBuZXdfY2x1c3RlcnM7XG4mIzQzO1x0aWYgKG9zYi1cdTAwM2VzX21vdW50X29wdCBcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7XG4mIzQzO1x0XHRpZiAoYWNsX3N0YXRlLVx1MDAzZWRlZmF1bHRfYWNsIFx1MDAyNlx1MDAyNiBTX0lTRElSKG1vZGUpKSB7XG4mIzQzO1x0XHRcdGFjbF9sZW4gPSBhY2xfc3RhdGUtXHUwMDNlZGVmYXVsdF9hY2wtXHUwMDNlYV9jb3VudCAqXG4mIzQzO1x0XHRcdFx0ICBzaXplb2Yoc3RydWN0IG9jZnMyX2FjbF9lbnRyeSk7XG4mIzQzO1x0XHRcdGlmIChhY2xfbGVuIFx1MDAzZSBPQ0ZTMl9YQVRUUl9JTkxJTkVfU0laRSkge1xuJiM0MztcdFx0XHRcdG5ld19jbHVzdGVycyA9XG4mIzQzO1x0XHRcdFx0XHRvY2ZzMl9jbHVzdGVyc19mb3JfYnl0ZXMoZGlyLVx1MDAzZWlfc2IsXG4mIzQzO1x0XHRcdFx0XHRcdFx0XHQgYWNsX2xlbik7XG4mIzQzO1x0XHRcdFx0KnhhdHRyX2NyZWRpdHMgJiM0Mzs9XG4mIzQzO1x0XHRcdFx0XHRvY2ZzMl9jbHVzdGVyc190b19ibG9ja3MoZGlyLVx1MDAzZWlfc2IsXG4mIzQzO1x0XHRcdFx0XHRcdFx0XHQgbmV3X2NsdXN0ZXJzKTtcbiYjNDM7XHRcdFx0XHQqd2FudF9jbHVzdGVycyAmIzQzOz0gbmV3X2NsdXN0ZXJzO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRpZiAoYWNsX3N0YXRlLVx1MDAzZWFjbCkge1xuJiM0MztcdFx0XHRhY2xfbGVuID0gYWNsX3N0YXRlLVx1MDAzZWFjbC1cdTAwM2VhX2NvdW50ICpcbiYjNDM7XHRcdFx0XHQgIHNpemVvZihzdHJ1Y3Qgb2NmczJfYWNsX2VudHJ5KTtcbiYjNDM7XHRcdFx0aWYgKGFjbF9sZW4gXHUwMDNlIE9DRlMyX1hBVFRSX0lOTElORV9TSVpFKSB7XG4mIzQzO1x0XHRcdFx0bmV3X2NsdXN0ZXJzID1cbiYjNDM7XHRcdFx0XHRcdG9jZnMyX2NsdXN0ZXJzX2Zvcl9ieXRlcyhkaXItXHUwMDNlaV9zYixcbiYjNDM7XHRcdFx0XHRcdFx0XHRcdCBhY2xfbGVuKTtcbiYjNDM7XHRcdFx0XHQqeGF0dHJfY3JlZGl0cyAmIzQzOz1cbiYjNDM7XHRcdFx0XHRcdG9jZnMyX2NsdXN0ZXJzX3RvX2Jsb2NrcyhkaXItXHUwMDNlaV9zYixcbiYjNDM7XHRcdFx0XHRcdFx0XHRcdCBuZXdfY2x1c3RlcnMpO1xuJiM0MztcdFx0XHRcdCp3YW50X2NsdXN0ZXJzICYjNDM7PSBuZXdfY2x1c3RlcnM7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH1cbiBcdH1cbiBcbiBcdHJldHVybiByZXQ7XG5AQCAtMzQ4Myw5ICYjNDM7MzQ5NSwxMCBAQCBzdGF0aWMgaW50IF9fb2NmczJfeGF0dHJfc2V0X2hhbmRsZShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIH1cbiBcbiAvKlxuLSAqIFRoaXMgZnVuY3Rpb24gb25seSBjYWxsZWQgZHVpbmcgY3JlYXRpbmcgaW5vZGVcbi0gKiBmb3IgaW5pdCBzZWN1cml0eS9hY2wgeGF0dHJzIG9mIHRoZSBuZXcgaW5vZGUuXG4tICogQWxsIHRyYW5zYW5jdGlvbiBjcmVkaXRzIGhhdmUgYmVlbiByZXNlcnZlZCBpbiBta25vZC5cbiYjNDM7ICogVGhpcyBoZWxwZXIgaXMgb25seSBmb3Igc2V0dGluZyBpbml0aWFsIEFDTCBvciBzZWN1cml0eSB4YXR0cnMgb24gYW4gaW5vZGVcbiYjNDM7ICogdGhhdCBpcyBzdGlsbCB1bnB1Ymxpc2hlZCwgdW5oYXNoZWQsIGFuZCB1bmF0dGFjaGVkIHRvIGEgZGVudHJ5LlxuJiM0MzsgKiBPcmRpbmFyeSB4YXR0ciB1cGRhdGVzIG11c3QgdXNlIG9jZnMyX3hhdHRyX3NldCgpLlxuJiM0MzsgKiBBbGwgdHJhbnNhY3Rpb24gY3JlZGl0cyBoYXZlIGJlZW4gcmVzZXJ2ZWQgaW4gbWtub2Qgb3Igc3ltbGluayBjYWxsZXJzLlxuICAqL1xuIGludCBvY2ZzMl94YXR0cl9zZXRfaGFuZGxlKGhhbmRsZV90ICpoYW5kbGUsXG4gXHRcdFx0ICAgc3RydWN0IGlub2RlICppbm9kZSxcbkBAIC0zNTQyLDggJiM0MzszNTU1LDYgQEAgaW50IG9jZnMyX3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlX3QgKmhhbmRsZSxcbiBcdHhpcy5pbm9kZV9iaCA9IHhicy5pbm9kZV9iaCA9IGRpX2JoO1xuIFx0ZGkgPSAoc3RydWN0IG9jZnMyX2Rpbm9kZSAqKWRpX2JoLVx1MDAzZWJfZGF0YTtcbiBcbi1cdGRvd25fd3JpdGUoXHUwMDI2T0NGUzJfSShpbm9kZSktXHUwMDNlaXBfeGF0dHJfc2VtKTtcbi1cbiBcdHJldCA9IG9jZnMyX3hhdHRyX2lib2R5X2ZpbmQoaW5vZGUsIG5hbWVfaW5kZXgsIG5hbWUsIFx1MDAyNnhpcyk7XG4gXHRpZiAocmV0KVxuIFx0XHRnb3RvIGNsZWFudXA7XG5AQCAtMzU1Niw3ICYjNDM7MzU2Nyw2IEBAIGludCBvY2ZzMl94YXR0cl9zZXRfaGFuZGxlKGhhbmRsZV90ICpoYW5kbGUsXG4gXHRyZXQgPSBfX29jZnMyX3hhdHRyX3NldF9oYW5kbGUoaW5vZGUsIGRpLCBcdTAwMjZ4aSwgXHUwMDI2eGlzLCBcdTAwMjZ4YnMsIFx1MDAyNmN0eHQpO1xuIFxuIGNsZWFudXA6XG4tXHR1cF93cml0ZShcdTAwMjZPQ0ZTMl9JKGlub2RlKS1cdTAwM2VpcF94YXR0cl9zZW0pO1xuIFx0YnJlbHNlKHhicy54YXR0cl9iaCk7XG4gXHRvY2ZzMl94YXR0cl9idWNrZXRfZnJlZSh4YnMuYnVja2V0KTtcbiBcbkBAIC03MjU3LDYgJiM0Mzs3MjY3LDcgQEAgaW50IG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbChzdHJ1Y3QgaW5vZGUgKmRpcixcbiB7XG4gXHRpbnQgcmV0ID0gMDtcbiBcdHN0cnVjdCBidWZmZXJfaGVhZCAqZGlyX2JoID0gTlVMTDtcbiYjNDM7XHRzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlIGFjbF9zdGF0ZSA9IHsgMCB9O1xuIFxuIFx0cmV0ID0gb2NmczJfaW5pdF9zZWN1cml0eV9nZXQoaW5vZGUsIGRpciwgcXN0ciwgTlVMTCk7XG4gXHRpZiAocmV0KSB7XG5AQCAtNzI2OSwxMCAmIzQzOzcyODAsMTcgQEAgaW50IG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbChzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0bWxvZ19lcnJubyhyZXQpO1xuIFx0XHRnb3RvIGxlYXZlO1xuIFx0fVxuLVx0cmV0ID0gb2NmczJfaW5pdF9hY2woTlVMTCwgaW5vZGUsIGRpciwgTlVMTCwgZGlyX2JoLCBOVUxMLCBOVUxMKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gb2NmczJfYWNsX2luaXRfcHJlcGFyZShpbm9kZSwgZGlyLCBkaXJfYmgsIFx1MDAyNmFjbF9zdGF0ZSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBvY2ZzMl9pbml0X2FjbChOVUxMLCBpbm9kZSwgTlVMTCwgTlVMTCwgTlVMTCwgXHUwMDI2YWNsX3N0YXRlKTtcbiBcdGlmIChyZXQpXG4gXHRcdG1sb2dfZXJybm8ocmV0KTtcbiBcbiYjNDM7dW5sb2NrOlxuJiM0MztcdG9jZnMyX2FjbF9pbml0X3JlbGVhc2UoXHUwMDI2YWNsX3N0YXRlKTtcbiBcdG9jZnMyX2lub2RlX3VubG9jayhkaXIsIDApO1xuIFx0YnJlbHNlKGRpcl9iaCk7XG4gbGVhdmU6XG5kaWZmIC0tZ2l0IGEvZnMvb2NmczIveGF0dHIuaCBiL2ZzL29jZnMyL3hhdHRyLmhcbmluZGV4IDY1ZTlhYTc0MzkxOTkuLjVjZGQ2YzZiNDAwNjQgMTAwNjQ0XG4tLS0gYS9mcy9vY2ZzMi94YXR0ci5oXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9vY2ZzMi94YXR0ci5oXG5AQCAtNTUsOSAmIzQzOzU1LDEyIEBAIGludCBvY2ZzMl9pbml0X3NlY3VyaXR5X3NldChoYW5kbGVfdCAqLCBzdHJ1Y3QgaW5vZGUgKixcbiBpbnQgb2NmczJfY2FsY19zZWN1cml0eV9pbml0KHN0cnVjdCBpbm9kZSAqLFxuIFx0XHRcdCAgICAgc3RydWN0IG9jZnMyX3NlY3VyaXR5X3hhdHRyX2luZm8gKixcbiBcdFx0XHQgICAgIGludCAqLCBpbnQgKiwgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKiopO1xuLWludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICosIHN0cnVjdCBidWZmZXJfaGVhZCAqLFxuLVx0XHRcdCAgdW1vZGVfdCwgc3RydWN0IG9jZnMyX3NlY3VyaXR5X3hhdHRyX2luZm8gKixcbi1cdFx0XHQgIGludCAqLCBpbnQgKiwgaW50ICopO1xuJiM0MztcbiYjNDM7c3RydWN0IG9jZnMyX2FjbF9zdGF0ZTtcbiYjNDM7aW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpciwgdW1vZGVfdCBtb2RlLFxuJiM0MztcdFx0XHQgIHN0cnVjdCBvY2ZzMl9zZWN1cml0eV94YXR0cl9pbmZvICpzaSxcbiYjNDM7XHRcdFx0ICBpbnQgKndhbnRfY2x1c3RlcnMsIGludCAqeGF0dHJfY3JlZGl0cyxcbiYjNDM7XHRcdFx0ICBpbnQgKndhbnRfbWV0YSwgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqYWNsX3N0YXRlKTtcbiBcbiAvKlxuICAqIHhhdHRycyBjYW4gbGl2ZSBpbnNpZGUgYW4gaW5vZGUsIGFzIHBhcnQgb2YgYW4gZXh0ZXJuYWwgeGF0dHIgYmxvY2ssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDg6MDc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09DRlMyX0ZTJiMzNDssCiAgICAmIzM0O0NPTkZJR0ZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7b2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsJiMzNDssCiAgICAmIzM0O29jZnMyX2luaXRfYWNsJiMzNDssCiAgICAmIzM0O29jZnMyX2FjbF9pbml0X3ByZXBhcmUmIzM0OywKICAgICYjMzQ7b2NmczJfY2FsY194YXR0cl9pbml0JiMzNDssCiAgICAmIzM0O29jZnMyX3hhdHRyX3NldF9oYW5kbGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIEFDTCBpbml0aWFsaXphdGlvbiBkdXJpbmcgaW5vZGUgY3JlYXRpb24gaW4gT0NGUzIgdG8gcHJldmVudCBkZWFkbG9ja3MuIEl0IG1vZGlmaWVzIGhvdyBBQ0xzIGFyZSBjYWxjdWxhdGVkIGFuZCBzZXQgZm9yIG5ldyBpbm9kZXMgKGUuZy4sIHZpYSBta25vZCwgbWtkaXIsIGNyZWF0ZSwgc3ltbGluaywgcmVmbGluaykuIFRoZSBjaGFuZ2VzIGFyZSBpbiBjb3JlIE9DRlMyIGxvZ2ljIGFuZCBhcmUgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBWRlMgc3lzY2FsbHMgd2hlbiBvcGVyYXRpbmcgb24gYW4gT0NGUzIgZmlsZXN5c3RlbS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDcyODM0M2IzNTAzOWUwNjc1NDdkZWJjMDYxZTJjZGFiZTFlYjA2Y2MKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEp1bCAzMCAwODowNzoyOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2FjbC5jIGIvZnMvb2NmczIvYWNsLmMKaW5kZXggYWYxZTJjZWRiMjE3Zi4uMDkwZWM2MGZiNTc2YSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvYWNsLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvb2NmczIvYWNsLmMKQEAgLTExMCw4ICYjNDM7MTEwLDcgQEAgc3RhdGljIHZvaWQgKm9jZnMyX2FjbF90b194YXR0cihjb25zdCBzdHJ1Y3QgcG9zaXhfYWNsICphY2wsIHNpemVfdCAqc2l6ZSkKIAlyZXR1cm4gb2NmczJfYWNsOwogfQogCi1zdGF0aWMgc3RydWN0IHBvc2l4X2FjbCAqb2NmczJfZ2V0X2FjbF9ub2xvY2soc3RydWN0IGlub2RlICppbm9kZSwKLQkJCQkJICAgICAgaW50IHR5cGUsCiYjNDM7c3RhdGljIHN0cnVjdCBwb3NpeF9hY2wgKm9jZnMyX2dldF9hY2xfbm9sb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlLAogCQkJCQkgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoKQogewogCWludCBuYW1lX2luZGV4OwpAQCAtMzQ5LDYzICYjNDM7MzQ4LDEwNSBAQCBpbnQgb2NmczJfYWNsX2NobW9kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCiAgKiBJbml0aWFsaXplIHRoZSBBQ0xzIG9mIGEgbmV3IGlub2RlLiBJZiBwYXJlbnQgZGlyZWN0b3J5IGhhcyBkZWZhdWx0IEFDTCwKICAqIHRoZW4gY2xvbmUgdG8gbmV3IGlub2RlLiBDYWxsZWQgZnJvbSBvY2ZzMl9ta25vZC4KICAqLwotaW50IG9jZnMyX2luaXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsCi0JCSAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCSAgIHN0cnVjdCBpbm9kZSAqZGlyLAotCQkgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoLAotCQkgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpcl9iaCwKLQkJICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMsCi0JCSAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICpkYXRhX2FjKQomIzQzO3ZvaWQgb2NmczJfYWNsX2luaXRfcmVsZWFzZShzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICpzdGF0ZSkKJiM0Mzt7CiYjNDM7CXBvc2l4X2FjbF9yZWxlYXNlKHN0YXRlLSZndDtkZWZhdWx0X2FjbCk7CiYjNDM7CXBvc2l4X2FjbF9yZWxlYXNlKHN0YXRlLSZndDthY2wpOwomIzQzOwlzdGF0ZS0mZ3Q7ZGVmYXVsdF9hY2wgPSBOVUxMOwomIzQzOwlzdGF0ZS0mZ3Q7YWNsID0gTlVMTDsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IG9jZnMyX2FjbF9pbml0X3ByZXBhcmUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJfYmgsCiYjNDM7CQkJICAgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqc3RhdGUpCiB7CiAJc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihpbm9kZS0mZ3Q7aV9zYik7Ci0Jc3RydWN0IHBvc2l4X2FjbCAqYWNsID0gTlVMTDsKLQlpbnQgcmV0ID0gMCwgcmV0MjsKLQl1bW9kZV90IG1vZGU7Ci0KLQlpZiAoIVNfSVNMTksoaW5vZGUtJmd0O2lfbW9kZSkpIHsKLQkJaWYgKG9zYi0mZ3Q7c19tb3VudF9vcHQgJmFtcDsgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7Ci0JCQlkb3duX3JlYWQoJmFtcDtPQ0ZTMl9JKGRpciktJmd0O2lwX3hhdHRyX3NlbSk7Ci0JCQlhY2wgPSBvY2ZzMl9nZXRfYWNsX25vbG9jayhkaXIsIEFDTF9UWVBFX0RFRkFVTFQsCi0JCQkJCQkgICBkaXJfYmgpOwotCQkJdXBfcmVhZCgmYW1wO09DRlMyX0koZGlyKS0mZ3Q7aXBfeGF0dHJfc2VtKTsKLQkJCWlmIChJU19FUlIoYWNsKSkKLQkJCQlyZXR1cm4gUFRSX0VSUihhY2wpOwomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsKJiM0MzsJc3RhdGUtJmd0O2RlZmF1bHRfYWNsID0gTlVMTDsKJiM0MzsJc3RhdGUtJmd0O2FjbCA9IE5VTEw7CiYjNDM7CXN0YXRlLSZndDttb2RlID0gaW5vZGUtJmd0O2lfbW9kZTsKJiM0MzsKJiM0MzsJaWYgKFNfSVNMTksoaW5vZGUtJmd0O2lfbW9kZSkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKG9zYi0mZ3Q7c19tb3VudF9vcHQgJmFtcDsgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7CiYjNDM7CQlkb3duX3JlYWQoJmFtcDtPQ0ZTMl9JKGRpciktJmd0O2lwX3hhdHRyX3NlbSk7CiYjNDM7CQlzdGF0ZS0mZ3Q7ZGVmYXVsdF9hY2wgPQomIzQzOwkJCW9jZnMyX2dldF9hY2xfbm9sb2NrKGRpciwgQUNMX1RZUEVfREVGQVVMVCwgZGlyX2JoKTsKJiM0MzsJCXVwX3JlYWQoJmFtcDtPQ0ZTMl9JKGRpciktJmd0O2lwX3hhdHRyX3NlbSk7CiYjNDM7CQlpZiAoSVNfRVJSKHN0YXRlLSZndDtkZWZhdWx0X2FjbCkpIHsKJiM0MzsJCQlyZXQgPSBQVFJfRVJSKHN0YXRlLSZndDtkZWZhdWx0X2FjbCk7CiYjNDM7CQkJc3RhdGUtJmd0O2RlZmF1bHRfYWNsID0gTlVMTDsKJiM0MzsJCQlyZXR1cm4gcmV0OwogCQl9Ci0JCWlmICghYWNsKSB7Ci0JCQltb2RlID0gaW5vZGUtJmd0O2lfbW9kZSAmYW1wOyB+Y3VycmVudF91bWFzaygpOwotCQkJcmV0ID0gb2NmczJfYWNsX3NldF9tb2RlKGlub2RlLCBkaV9iaCwgaGFuZGxlLCBtb2RlKTsKLQkJCWlmIChyZXQpIHsKLQkJCQltbG9nX2Vycm5vKHJldCk7CiYjNDM7CQlpZiAoc3RhdGUtJmd0O2RlZmF1bHRfYWNsKSB7CiYjNDM7CQkJc3RhdGUtJmd0O2FjbCA9IHBvc2l4X2FjbF9kdXAoc3RhdGUtJmd0O2RlZmF1bHRfYWNsKTsKJiM0MzsJCQlpZiAoIXN0YXRlLSZndDthY2wpIHsKJiM0MzsJCQkJcmV0ID0gLUVOT01FTTsKIAkJCQlnb3RvIGNsZWFudXA7CiAJCQl9CiYjNDM7CQkJcmV0ID0gX19wb3NpeF9hY2xfY3JlYXRlKCZhbXA7c3RhdGUtJmd0O2FjbCwgR0ZQX05PRlMsCiYjNDM7CQkJCQkJICZhbXA7c3RhdGUtJmd0O21vZGUpOwomIzQzOwkJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCQlnb3RvIGNsZWFudXA7CiYjNDM7CQkJaWYgKHJldCA9PSAwKSB7CiYjNDM7CQkJCXBvc2l4X2FjbF9yZWxlYXNlKHN0YXRlLSZndDthY2wpOwomIzQzOwkJCQlzdGF0ZS0mZ3Q7YWNsID0gTlVMTDsKJiM0MzsJCQl9CiYjNDM7CQkJaWYgKCFTX0lTRElSKGlub2RlLSZndDtpX21vZGUpKSB7CiYjNDM7CQkJCXBvc2l4X2FjbF9yZWxlYXNlKHN0YXRlLSZndDtkZWZhdWx0X2FjbCk7CiYjNDM7CQkJCXN0YXRlLSZndDtkZWZhdWx0X2FjbCA9IE5VTEw7CiYjNDM7CQkJfQomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlzdGF0ZS0mZ3Q7bW9kZSAmYW1wOz0gfmN1cnJlbnRfdW1hc2soKTsKIAkJfQomIzQzOwl9IGVsc2UgewomIzQzOwkJc3RhdGUtJmd0O21vZGUgJmFtcDs9IH5jdXJyZW50X3VtYXNrKCk7CiAJfQotCWlmICgob3NiLSZndDtzX21vdW50X29wdCAmYW1wOyBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpICZhbXA7JmFtcDsgYWNsKSB7Ci0JCWlmIChTX0lTRElSKGlub2RlLSZndDtpX21vZGUpKSB7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO2NsZWFudXA6CiYjNDM7CW9jZnMyX2FjbF9pbml0X3JlbGVhc2Uoc3RhdGUpOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztpbnQgb2NmczJfaW5pdF9hY2woaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKJiM0MzsJCSAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgsCiYjNDM7CQkgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYywKJiM0MzsJCSAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICpkYXRhX2FjLAomIzQzOwkJICAgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqc3RhdGUpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGlub2RlLSZndDtpX3NiKTsKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CiYjNDM7CWlmIChTX0lTTE5LKGlub2RlLSZndDtpX21vZGUpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmIChvc2ItJmd0O3NfbW91bnRfb3B0ICZhbXA7IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkgewomIzQzOwkJaWYgKFNfSVNESVIoaW5vZGUtJmd0O2lfbW9kZSkgJmFtcDsmYW1wOyBzdGF0ZS0mZ3Q7ZGVmYXVsdF9hY2wpIHsKIAkJCXJldCA9IG9jZnMyX3NldF9hY2woaGFuZGxlLCBpbm9kZSwgZGlfYmgsCi0JCQkJCSAgICBBQ0xfVFlQRV9ERUZBVUxULCBhY2wsCi0JCQkJCSAgICBtZXRhX2FjLCBkYXRhX2FjKTsKJiM0MzsJCQkJCSAgICBBQ0xfVFlQRV9ERUZBVUxULAomIzQzOwkJCQkJICAgIHN0YXRlLSZndDtkZWZhdWx0X2FjbCwgbWV0YV9hYywKJiM0MzsJCQkJCSAgICBkYXRhX2FjKTsKIAkJCWlmIChyZXQpCi0JCQkJZ290byBjbGVhbnVwOwomIzQzOwkJCQlyZXR1cm4gcmV0OwogCQl9Ci0JCW1vZGUgPSBpbm9kZS0mZ3Q7aV9tb2RlOwotCQlyZXQgPSBfX3Bvc2l4X2FjbF9jcmVhdGUoJmFtcDthY2wsIEdGUF9OT0ZTLCAmYW1wO21vZGUpOwotCQlpZiAocmV0ICZsdDsgMCkKLQkJCXJldHVybiByZXQ7CiYjNDM7CX0KIAotCQlyZXQyID0gb2NmczJfYWNsX3NldF9tb2RlKGlub2RlLCBkaV9iaCwgaGFuZGxlLCBtb2RlKTsKLQkJaWYgKHJldDIpIHsKLQkJCW1sb2dfZXJybm8ocmV0Mik7Ci0JCQlyZXQgPSByZXQyOwotCQkJZ290byBjbGVhbnVwOwotCQl9Ci0JCWlmIChyZXQgJmd0OyAwKSB7Ci0JCQlyZXQgPSBvY2ZzMl9zZXRfYWNsKGhhbmRsZSwgaW5vZGUsCi0JCQkJCSAgICBkaV9iaCwgQUNMX1RZUEVfQUNDRVNTLAotCQkJCQkgICAgYWNsLCBtZXRhX2FjLCBkYXRhX2FjKTsKJiM0MzsJcmV0ID0gb2NmczJfYWNsX3NldF9tb2RlKGlub2RlLCBkaV9iaCwgaGFuZGxlLCBzdGF0ZS0mZ3Q7bW9kZSk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCW1sb2dfZXJybm8ocmV0KTsKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKG9zYi0mZ3Q7c19tb3VudF9vcHQgJmFtcDsgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7CiYjNDM7CQlpZiAoc3RhdGUtJmd0O2FjbCkgewomIzQzOwkJCXJldCA9IG9jZnMyX3NldF9hY2woaGFuZGxlLCBpbm9kZSwgZGlfYmgsCiYjNDM7CQkJCQkgICAgQUNMX1RZUEVfQUNDRVNTLCBzdGF0ZS0mZ3Q7YWNsLAomIzQzOwkJCQkJICAgIG1ldGFfYWMsIGRhdGFfYWMpOwogCQl9CiAJfQotY2xlYW51cDoKLQlwb3NpeF9hY2xfcmVsZWFzZShhY2wpOwomIzQzOwogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9hY2wuaCBiL2ZzL29jZnMyL2FjbC5oCmluZGV4IDY2N2M2ZjAzZmE2MDYuLmE5MWY5Y2UyNzhkNmQgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2FjbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL29jZnMyL2FjbC5oCkBAIC0yMCw5ICYjNDM7MjAsMjAgQEAgc3RydWN0IHBvc2l4X2FjbCAqb2NmczJfaW9wX2dldF9hY2woc3RydWN0IGlub2RlICppbm9kZSwgaW50IHR5cGUsIGJvb2wgcmN1KTsKIGludCBvY2ZzMl9pb3Bfc2V0X2FjbChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAogCQkgICAgICBzdHJ1Y3QgcG9zaXhfYWNsICphY2wsIGludCB0eXBlKTsKIGV4dGVybiBpbnQgb2NmczJfYWNsX2NobW9kKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKik7Ci1leHRlcm4gaW50IG9jZnMyX2luaXRfYWNsKGhhbmRsZV90ICosIHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgaW5vZGUgKiwKLQkJCSAgc3RydWN0IGJ1ZmZlcl9oZWFkICosIHN0cnVjdCBidWZmZXJfaGVhZCAqLAotCQkJICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqLAotCQkJICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqKTsKJiM0MztzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlIHsKJiM0MzsJc3RydWN0IHBvc2l4X2FjbCAqZGVmYXVsdF9hY2w7CiYjNDM7CXN0cnVjdCBwb3NpeF9hY2wgKmFjbDsKJiM0MzsJdW1vZGVfdCBtb2RlOwomIzQzO307CiYjNDM7CiYjNDM7aW50IG9jZnMyX2FjbF9pbml0X3ByZXBhcmUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJfYmgsCiYjNDM7CQkJICAgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqc3RhdGUpOwomIzQzO3ZvaWQgb2NmczJfYWNsX2luaXRfcmVsZWFzZShzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICpzdGF0ZSk7CiYjNDM7aW50IG9jZnMyX2luaXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiYjNDM7CQkgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoLAomIzQzOwkJICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMsCiYjNDM7CQkgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqZGF0YV9hYywKJiM0MzsJCSAgIHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgKnN0YXRlKTsKIAogI2VuZGlmIC8qIE9DRlMyX0FDTF9IICovCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9uYW1laS5jIGIvZnMvb2NmczIvbmFtZWkuYwppbmRleCAxMjc3NjY2Yzc3Y2QyLi5lYTM3YTUwNTgwODkwIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9uYW1laS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL29jZnMyL25hbWVpLmMKQEAgLTI1Niw2ICYjNDM7MjU2LDcgQEAgc3RhdGljIGludCBvY2ZzMl9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKIAlzaWdzZXRfdCBvbGRzZXQ7CiAJaW50IGRpZF9ibG9ja19zaWduYWxzID0gMDsKIAlzdHJ1Y3Qgb2NmczJfZGVudHJ5X2xvY2sgKmRsID0gTlVMTDsKJiM0MzsJc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSBhY2xfc3RhdGUgPSB7IDAgfTsKIAogCXRyYWNlX29jZnMyX21rbm9kKGRpciwgZGVudHJ5LCBkZW50cnktJmd0O2RfbmFtZS5sZW4sIGRlbnRyeS0mZ3Q7ZF9uYW1lLm5hbWUsCiAJCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpT0NGUzJfSShkaXIpLSZndDtpcF9ibGtubywKQEAgLTMzMCwxMCAmIzQzOzMzMSwxNCBAQCBzdGF0aWMgaW50IG9jZnMyX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAogCQl9CiAJfQogCiYjNDM7CXN0YXR1cyA9IG9jZnMyX2FjbF9pbml0X3ByZXBhcmUoaW5vZGUsIGRpciwgcGFyZW50X2ZlX2JoLCAmYW1wO2FjbF9zdGF0ZSk7CiYjNDM7CWlmIChzdGF0dXMgJmx0OyAwKQomIzQzOwkJZ290byBsZWF2ZTsKJiM0MzsKIAkvKiBjYWxjdWxhdGUgbWV0YSBkYXRhL2NsdXN0ZXJzIGZvciBzZXR0aW5nIHNlY3VyaXR5IGFuZCBhY2wgeGF0dHIgKi8KLQlzdGF0dXMgPSBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoZGlyLCBwYXJlbnRfZmVfYmgsIG1vZGUsCi0JCQkJICAgICAgICZhbXA7c2ksICZhbXA7d2FudF9jbHVzdGVycywKLQkJCQkgICAgICAgJmFtcDt4YXR0cl9jcmVkaXRzLCAmYW1wO3dhbnRfbWV0YSk7CiYjNDM7CXN0YXR1cyA9IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChkaXIsIG1vZGUsICZhbXA7c2ksICZhbXA7d2FudF9jbHVzdGVycywKJiM0MzsJCQkJICAgICAgICZhbXA7eGF0dHJfY3JlZGl0cywgJmFtcDt3YW50X21ldGEsCiYjNDM7CQkJCSAgICAgICAmYW1wO2FjbF9zdGF0ZSk7CiAJaWYgKHN0YXR1cyAmbHQ7IDApIHsKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwogCQlnb3RvIGxlYXZlOwpAQCAtNDExLDggJiM0Mzs0MTYsOCBAQCBzdGF0aWMgaW50IG9jZnMyX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAogCQlpbmNfbmxpbmsoZGlyKTsKIAl9CiAKLQlzdGF0dXMgPSBvY2ZzMl9pbml0X2FjbChoYW5kbGUsIGlub2RlLCBkaXIsIG5ld19mZV9iaCwgcGFyZW50X2ZlX2JoLAotCQkJIG1ldGFfYWMsIGRhdGFfYWMpOwomIzQzOwlzdGF0dXMgPSBvY2ZzMl9pbml0X2FjbChoYW5kbGUsIGlub2RlLCBuZXdfZmVfYmgsIG1ldGFfYWMsIGRhdGFfYWMsCiYjNDM7CQkJCSZhbXA7YWNsX3N0YXRlKTsKIAogCWlmIChzdGF0dXMgJmx0OyAwKSB7CiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKQEAgLTQ3Nyw2ICYjNDM7NDgyLDggQEAgc3RhdGljIGludCBvY2ZzMl9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKIAlicmVsc2UocGFyZW50X2ZlX2JoKTsKIAlrZnJlZShzaS52YWx1ZSk7CiAKJiM0MzsJb2NmczJfYWNsX2luaXRfcmVsZWFzZSgmYW1wO2FjbF9zdGF0ZSk7CiYjNDM7CiAJb2NmczJfZnJlZV9kaXJfbG9va3VwX3Jlc3VsdCgmYW1wO2xvb2t1cCk7CiAKIAlpZiAoaW5vZGVfYWMpCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi94YXR0ci5jIGIvZnMvb2NmczIveGF0dHIuYwppbmRleCBmY2RkZDNjMTNhY2RkLi44NmYwMjkzNjgxZmNjIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi94YXR0ci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL29jZnMyL3hhdHRyLmMKQEAgLTYxMSwxMyAmIzQzOzYxMSwxMCBAQCBpbnQgb2NmczJfY2FsY19zZWN1cml0eV9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLAogCXJldHVybiByZXQ7CiB9CiAKLWludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICpkaXIsCi0JCQkgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlyX2JoLAotCQkJICB1bW9kZV90IG1vZGUsCiYjNDM7aW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpciwgdW1vZGVfdCBtb2RlLAogCQkJICBzdHJ1Y3Qgb2NmczJfc2VjdXJpdHlfeGF0dHJfaW5mbyAqc2ksCi0JCQkgIGludCAqd2FudF9jbHVzdGVycywKLQkJCSAgaW50ICp4YXR0cl9jcmVkaXRzLAotCQkJICBpbnQgKndhbnRfbWV0YSkKJiM0MzsJCQkgIGludCAqd2FudF9jbHVzdGVycywgaW50ICp4YXR0cl9jcmVkaXRzLAomIzQzOwkJCSAgaW50ICp3YW50X21ldGEsIHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgKmFjbF9zdGF0ZSkKIHsKIAlpbnQgcmV0ID0gMDsKIAlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGRpci0mZ3Q7aV9zYik7CkBAIC02MjgsMTkgJiM0Mzs2MjUsMTUgQEAgaW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpciwKIAkJCQkJCSAgICAgc2ktJmd0O3ZhbHVlX2xlbik7CiAKIAlpZiAob3NiLSZndDtzX21vdW50X29wdCAmYW1wOyBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHsKLQkJZG93bl9yZWFkKCZhbXA7T0NGUzJfSShkaXIpLSZndDtpcF94YXR0cl9zZW0pOwotCQlhY2xfbGVuID0gb2NmczJfeGF0dHJfZ2V0X25vbG9jayhkaXIsIGRpcl9iaCwKLQkJCQkJT0NGUzJfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0RFRkFVTFQsCi0JCQkJCSYjMzQ7JiMzNDssIE5VTEwsIDApOwotCQl1cF9yZWFkKCZhbXA7T0NGUzJfSShkaXIpLSZndDtpcF94YXR0cl9zZW0pOwotCQlpZiAoYWNsX2xlbiAmZ3Q7IDApIHsKLQkJCWFfc2l6ZSA9IG9jZnMyX3hhdHRyX2VudHJ5X3JlYWxfc2l6ZSgwLCBhY2xfbGVuKTsKLQkJCWlmIChTX0lTRElSKG1vZGUpKQotCQkJCWFfc2l6ZSAmbHQ7Jmx0Oz0gMTsKLQkJfSBlbHNlIGlmIChhY2xfbGVuICE9IDAgJmFtcDsmYW1wOyBhY2xfbGVuICE9IC1FTk9EQVRBKSB7Ci0JCQlyZXQgPSBhY2xfbGVuOwotCQkJbWxvZ19lcnJubyhyZXQpOwotCQkJcmV0dXJuIHJldDsKJiM0MzsJCWlmIChhY2xfc3RhdGUtJmd0O2RlZmF1bHRfYWNsICZhbXA7JmFtcDsgU19JU0RJUihtb2RlKSkgewomIzQzOwkJCWFjbF9sZW4gPSBhY2xfc3RhdGUtJmd0O2RlZmF1bHRfYWNsLSZndDthX2NvdW50ICoKJiM0MzsJCQkJICBzaXplb2Yoc3RydWN0IG9jZnMyX2FjbF9lbnRyeSk7CiYjNDM7CQkJYV9zaXplICYjNDM7PSBvY2ZzMl94YXR0cl9lbnRyeV9yZWFsX3NpemUoMCwgYWNsX2xlbik7CiYjNDM7CQl9CiYjNDM7CQlpZiAoYWNsX3N0YXRlLSZndDthY2wpIHsKJiM0MzsJCQlhY2xfbGVuID0gYWNsX3N0YXRlLSZndDthY2wtJmd0O2FfY291bnQgKgomIzQzOwkJCQkgIHNpemVvZihzdHJ1Y3Qgb2NmczJfYWNsX2VudHJ5KTsKJiM0MzsJCQlhX3NpemUgJiM0Mzs9IG9jZnMyX3hhdHRyX2VudHJ5X3JlYWxfc2l6ZSgwLCBhY2xfbGVuKTsKIAkJfQogCX0KIApAQCAtNjgzLDE0ICYjNDM7Njc2LDMzIEBAIGludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICpkaXIsCiAJCQkJCQkJICAgbmV3X2NsdXN0ZXJzKTsKIAkJKndhbnRfY2x1c3RlcnMgJiM0Mzs9IG5ld19jbHVzdGVyczsKIAl9Ci0JaWYgKG9zYi0mZ3Q7c19tb3VudF9vcHQgJmFtcDsgT0NGUzJfTU9VTlRfUE9TSVhfQUNMICZhbXA7JmFtcDsKLQkgICAgYWNsX2xlbiAmZ3Q7IE9DRlMyX1hBVFRSX0lOTElORV9TSVpFKSB7Ci0JCS8qIGZvciBkaXJlY3RvcnksIGl0IGhhcyBERUZBVUxUIGFuZCBBQ0NFU1MgdHdvIHR5cGVzIG9mIGFjbHMgKi8KLQkJbmV3X2NsdXN0ZXJzID0gKFNfSVNESVIobW9kZSkgPyAyIDogMSkgKgotCQkJCW9jZnMyX2NsdXN0ZXJzX2Zvcl9ieXRlcyhkaXItJmd0O2lfc2IsIGFjbF9sZW4pOwotCQkqeGF0dHJfY3JlZGl0cyAmIzQzOz0gb2NmczJfY2x1c3RlcnNfdG9fYmxvY2tzKGRpci0mZ3Q7aV9zYiwKLQkJCQkJCQkgICBuZXdfY2x1c3RlcnMpOwotCQkqd2FudF9jbHVzdGVycyAmIzQzOz0gbmV3X2NsdXN0ZXJzOwomIzQzOwlpZiAob3NiLSZndDtzX21vdW50X29wdCAmYW1wOyBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHsKJiM0MzsJCWlmIChhY2xfc3RhdGUtJmd0O2RlZmF1bHRfYWNsICZhbXA7JmFtcDsgU19JU0RJUihtb2RlKSkgewomIzQzOwkJCWFjbF9sZW4gPSBhY2xfc3RhdGUtJmd0O2RlZmF1bHRfYWNsLSZndDthX2NvdW50ICoKJiM0MzsJCQkJICBzaXplb2Yoc3RydWN0IG9jZnMyX2FjbF9lbnRyeSk7CiYjNDM7CQkJaWYgKGFjbF9sZW4gJmd0OyBPQ0ZTMl9YQVRUUl9JTkxJTkVfU0laRSkgewomIzQzOwkJCQluZXdfY2x1c3RlcnMgPQomIzQzOwkJCQkJb2NmczJfY2x1c3RlcnNfZm9yX2J5dGVzKGRpci0mZ3Q7aV9zYiwKJiM0MzsJCQkJCQkJCSBhY2xfbGVuKTsKJiM0MzsJCQkJKnhhdHRyX2NyZWRpdHMgJiM0Mzs9CiYjNDM7CQkJCQlvY2ZzMl9jbHVzdGVyc190b19ibG9ja3MoZGlyLSZndDtpX3NiLAomIzQzOwkJCQkJCQkJIG5ld19jbHVzdGVycyk7CiYjNDM7CQkJCSp3YW50X2NsdXN0ZXJzICYjNDM7PSBuZXdfY2x1c3RlcnM7CiYjNDM7CQkJfQomIzQzOwkJfQomIzQzOwkJaWYgKGFjbF9zdGF0ZS0mZ3Q7YWNsKSB7CiYjNDM7CQkJYWNsX2xlbiA9IGFjbF9zdGF0ZS0mZ3Q7YWNsLSZndDthX2NvdW50ICoKJiM0MzsJCQkJICBzaXplb2Yoc3RydWN0IG9jZnMyX2FjbF9lbnRyeSk7CiYjNDM7CQkJaWYgKGFjbF9sZW4gJmd0OyBPQ0ZTMl9YQVRUUl9JTkxJTkVfU0laRSkgewomIzQzOwkJCQluZXdfY2x1c3RlcnMgPQomIzQzOwkJCQkJb2NmczJfY2x1c3RlcnNfZm9yX2J5dGVzKGRpci0mZ3Q7aV9zYiwKJiM0MzsJCQkJCQkJCSBhY2xfbGVuKTsKJiM0MzsJCQkJKnhhdHRyX2NyZWRpdHMgJiM0Mzs9CiYjNDM7CQkJCQlvY2ZzMl9jbHVzdGVyc190b19ibG9ja3MoZGlyLSZndDtpX3NiLAomIzQzOwkJCQkJCQkJIG5ld19jbHVzdGVycyk7CiYjNDM7CQkJCSp3YW50X2NsdXN0ZXJzICYjNDM7PSBuZXdfY2x1c3RlcnM7CiYjNDM7CQkJfQomIzQzOwkJfQogCX0KIAogCXJldHVybiByZXQ7CkBAIC0zNDgzLDkgJiM0MzszNDk1LDEwIEBAIHN0YXRpYyBpbnQgX19vY2ZzMl94YXR0cl9zZXRfaGFuZGxlKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiB9CiAKIC8qCi0gKiBUaGlzIGZ1bmN0aW9uIG9ubHkgY2FsbGVkIGR1aW5nIGNyZWF0aW5nIGlub2RlCi0gKiBmb3IgaW5pdCBzZWN1cml0eS9hY2wgeGF0dHJzIG9mIHRoZSBuZXcgaW5vZGUuCi0gKiBBbGwgdHJhbnNhbmN0aW9uIGNyZWRpdHMgaGF2ZSBiZWVuIHJlc2VydmVkIGluIG1rbm9kLgomIzQzOyAqIFRoaXMgaGVscGVyIGlzIG9ubHkgZm9yIHNldHRpbmcgaW5pdGlhbCBBQ0wgb3Igc2VjdXJpdHkgeGF0dHJzIG9uIGFuIGlub2RlCiYjNDM7ICogdGhhdCBpcyBzdGlsbCB1bnB1Ymxpc2hlZCwgdW5oYXNoZWQsIGFuZCB1bmF0dGFjaGVkIHRvIGEgZGVudHJ5LgomIzQzOyAqIE9yZGluYXJ5IHhhdHRyIHVwZGF0ZXMgbXVzdCB1c2Ugb2NmczJfeGF0dHJfc2V0KCkuCiYjNDM7ICogQWxsIHRyYW5zYWN0aW9uIGNyZWRpdHMgaGF2ZSBiZWVuIHJlc2VydmVkIGluIG1rbm9kIG9yIHN5bWxpbmsgY2FsbGVycy4KICAqLwogaW50IG9jZnMyX3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlX3QgKmhhbmRsZSwKIAkJCSAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsCkBAIC0zNTQyLDggJiM0MzszNTU1LDYgQEAgaW50IG9jZnMyX3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlX3QgKmhhbmRsZSwKIAl4aXMuaW5vZGVfYmggPSB4YnMuaW5vZGVfYmggPSBkaV9iaDsKIAlkaSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopZGlfYmgtJmd0O2JfZGF0YTsKIAotCWRvd25fd3JpdGUoJmFtcDtPQ0ZTMl9JKGlub2RlKS0mZ3Q7aXBfeGF0dHJfc2VtKTsKLQogCXJldCA9IG9jZnMyX3hhdHRyX2lib2R5X2ZpbmQoaW5vZGUsIG5hbWVfaW5kZXgsIG5hbWUsICZhbXA7eGlzKTsKIAlpZiAocmV0KQogCQlnb3RvIGNsZWFudXA7CkBAIC0zNTU2LDcgJiM0MzszNTY3LDYgQEAgaW50IG9jZnMyX3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlX3QgKmhhbmRsZSwKIAlyZXQgPSBfX29jZnMyX3hhdHRyX3NldF9oYW5kbGUoaW5vZGUsIGRpLCAmYW1wO3hpLCAmYW1wO3hpcywgJmFtcDt4YnMsICZhbXA7Y3R4dCk7CiAKIGNsZWFudXA6Ci0JdXBfd3JpdGUoJmFtcDtPQ0ZTMl9JKGlub2RlKS0mZ3Q7aXBfeGF0dHJfc2VtKTsKIAlicmVsc2UoeGJzLnhhdHRyX2JoKTsKIAlvY2ZzMl94YXR0cl9idWNrZXRfZnJlZSh4YnMuYnVja2V0KTsKIApAQCAtNzI1Nyw2ICYjNDM7NzI2Nyw3IEBAIGludCBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2woc3RydWN0IGlub2RlICpkaXIsCiB7CiAJaW50IHJldCA9IDA7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJfYmggPSBOVUxMOwomIzQzOwlzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlIGFjbF9zdGF0ZSA9IHsgMCB9OwogCiAJcmV0ID0gb2NmczJfaW5pdF9zZWN1cml0eV9nZXQoaW5vZGUsIGRpciwgcXN0ciwgTlVMTCk7CiAJaWYgKHJldCkgewpAQCAtNzI2OSwxMCAmIzQzOzcyODAsMTcgQEAgaW50IG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbChzdHJ1Y3QgaW5vZGUgKmRpciwKIAkJbWxvZ19lcnJubyhyZXQpOwogCQlnb3RvIGxlYXZlOwogCX0KLQlyZXQgPSBvY2ZzMl9pbml0X2FjbChOVUxMLCBpbm9kZSwgZGlyLCBOVUxMLCBkaXJfYmgsIE5VTEwsIE5VTEwpOwomIzQzOwomIzQzOwlyZXQgPSBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlKGlub2RlLCBkaXIsIGRpcl9iaCwgJmFtcDthY2xfc3RhdGUpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byB1bmxvY2s7CiYjNDM7CiYjNDM7CXJldCA9IG9jZnMyX2luaXRfYWNsKE5VTEwsIGlub2RlLCBOVUxMLCBOVUxMLCBOVUxMLCAmYW1wO2FjbF9zdGF0ZSk7CiAJaWYgKHJldCkKIAkJbWxvZ19lcnJubyhyZXQpOwogCiYjNDM7dW5sb2NrOgomIzQzOwlvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlKCZhbXA7YWNsX3N0YXRlKTsKIAlvY2ZzMl9pbm9kZV91bmxvY2soZGlyLCAwKTsKIAlicmVsc2UoZGlyX2JoKTsKIGxlYXZlOgpkaWZmIC0tZ2l0IGEvZnMvb2NmczIveGF0dHIuaCBiL2ZzL29jZnMyL3hhdHRyLmgKaW5kZXggNjVlOWFhNzQzOTE5OS4uNWNkZDZjNmI0MDA2NCAxMDA2NDQKLS0tIGEvZnMvb2NmczIveGF0dHIuaAomIzQzOyYjNDM7JiM0MzsgYi9mcy9vY2ZzMi94YXR0ci5oCkBAIC01NSw5ICYjNDM7NTUsMTIgQEAgaW50IG9jZnMyX2luaXRfc2VjdXJpdHlfc2V0KGhhbmRsZV90ICosIHN0cnVjdCBpbm9kZSAqLAogaW50IG9jZnMyX2NhbGNfc2VjdXJpdHlfaW5pdChzdHJ1Y3QgaW5vZGUgKiwKIAkJCSAgICAgc3RydWN0IG9jZnMyX3NlY3VyaXR5X3hhdHRyX2luZm8gKiwKIAkJCSAgICAgaW50ICosIGludCAqLCBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqKik7Ci1pbnQgb2NmczJfY2FsY194YXR0cl9pbml0KHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiwKLQkJCSAgdW1vZGVfdCwgc3RydWN0IG9jZnMyX3NlY3VyaXR5X3hhdHRyX2luZm8gKiwKLQkJCSAgaW50ICosIGludCAqLCBpbnQgKik7CiYjNDM7CiYjNDM7c3RydWN0IG9jZnMyX2FjbF9zdGF0ZTsKJiM0MztpbnQgb2NmczJfY2FsY194YXR0cl9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLCB1bW9kZV90IG1vZGUsCiYjNDM7CQkJICBzdHJ1Y3Qgb2NmczJfc2VjdXJpdHlfeGF0dHJfaW5mbyAqc2ksCiYjNDM7CQkJICBpbnQgKndhbnRfY2x1c3RlcnMsIGludCAqeGF0dHJfY3JlZGl0cywKJiM0MzsJCQkgIGludCAqd2FudF9tZXRhLCBzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICphY2xfc3RhdGUpOwogCiAvKgogICogeGF0dHJzIGNhbiBsaXZlIGluc2lkZSBhbiBpbm9kZSwgYXMgcGFydCBvZiBhbiBleHRlcm5hbCB4YXR0ciBibG9jaywKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDg6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzU2OQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI5OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWZhY3RvcmluZyBPQ0ZTMiBBQ0wgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCYjMzk7cyB0b3VjaGluZyBzb21lIGNvcmUgT0NGUzIgZmlsZXM6IGBhY2wuY2AsIGBhY2wuaGAsIGBuYW1laS5jYCwgYW5kIGB4YXR0ci5jYC4gTXkgaW5pdGlhbCByZWFkIGlzIHRoYXQgdGhpcyBpcyBmb2N1c2VkIG9uIHJlZmFjdG9yaW5nIEFDTCBpbml0aWFsaXphdGlvbiB3aXRoaW4gdGhlIGZpbGVzeXN0ZW0uIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgbGlrZSB0aGV5JiMzOTtyZSBhZGRyZXNzaW5nIGEgbG9ja2luZyBpc3N1ZS4gSSBzZWUgdGhleSYjMzk7cmUgbW9kaWZ5aW5nIHRoZSBgb2NmczJfaW5pdF9hY2xgIGZ1bmN0aW9uIGFuZCByZWxhdGVkIGNvZGUuIEFwcGFyZW50bHksIHRoZXJlIHdhcyBhIHByb2JsZW0gd2l0aCBgb2NmczJfaW5pdF9hY2xgIHRyeWluZyB0byBhY3F1aXJlIHRoZSBgaXBfeGF0dHJfc2VtYCBsb2NrLgoKTm93LCBJIHNlZSB0aGUgaW50cm9kdWN0aW9uIG9mIGBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlYCBhbmQgYG9jZnMyX2FjbF9pbml0X3JlbGVhc2VgIGZ1bmN0aW9ucywgd2hpY2ggc3VnZ2VzdHMgYSBtb3JlIGdyYW51bGFyIGNvbnRyb2wgb3ZlciB0aGUgQUNMIGluaXRpYWxpemF0aW9uIHByb2Nlc3MuIFRoZXkmIzM5O3ZlIGFsc28gdXBkYXRlZCBgb2NmczJfY2FsY194YXR0cl9pbml0YCB0byB1c2UgYSBgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqYWNsX3N0YXRlYCwgbGlrZWx5IHRvIHBhc3Mgc3RhdGUgaW5mb3JtYXRpb24gYXJvdW5kLiBBbmQsIGl0IHNlZW1zIGxpa2UgdGhleSYjMzk7dmUgcmVtb3ZlZCBgZG93bl93cml0ZSgmYW1wO09DRlMyX0koaW5vZGUpLSZndDtpcF94YXR0cl9zZW0pYCBmcm9tIGBvY2ZzMl94YXR0cl9zZXRfaGFuZGxlYC4gVGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBjaGFuZ2UuCgpNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IGlzIHRoaXMgY29kZSByZWFjaGFibGUsIGFuZCBpcyBpdCBmdW5jdGlvbmFsPyBPQ0ZTMiBpcyBhIGZpbGUgc3lzdGVtLCByaWdodD8gWWVzLCBPcmFjbGUgQ2x1c3RlciBGaWxlIFN5c3RlbSAyLiBTbywgZGVmaW5pdGVseSByZWFjaGFibGUgdGhyb3VnaCBzdGFuZGFyZCBzeXNjYWxscyBsaWtlIGBta2RpcmAsIGBta25vZGAsIGFuZCBgY3JlYXRgIOKAkyB0aGUgdXN1YWwgc3VzcGVjdHMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoaXMgQUNMIGluaXRpYWxpemF0aW9uIGNvZGUgaXMgYWN0dWFsbHkgdXNlZC4KClRpbWUgdG8gY2hlY2sgdGhlIEtjb25maWcuIEkmIzM5O2xsIGZpcmUgdXAgYGRlZmF1bHRfYXBpOmdyZXBwZXJgIHRvIGxvY2F0ZSB0aGUgT0NGUzIgS2NvbmZpZyB0byBiZSBzdXJlIHRoYXQgaXQmIzM5O3MgY29uZmlndXJlZCBhbmQgZW5hYmxlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyB0cmlnZ2VyaW5nIHRoZSBuZXcgQUNMIGluaXRpYWxpemF0aW9uIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDg6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE9DRlMyX0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvb2NmczIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9vY2ZzMi9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9vY2ZzMi9LY29uZmlnOjI6Y29uZmlnIE9DRlMyX0ZTXG5mcy9vY2ZzMi9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtPQ0ZTMiBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvb2NmczIvS2NvbmZpZy0yNy1cbmZzL29jZnMyL0tjb25maWc6Mjg6Y29uZmlnIE9DRlMyX0ZTX08yQ0JcbmZzL29jZnMyL0tjb25maWctMjktXHR0cmlzdGF0ZSBcJiMzNDtPMkNCIEtlcm5lbHNwYWNlIENsdXN0ZXJpbmdcJiMzNDtcbi0tXG5mcy9vY2ZzMi9LY29uZmlnLTQxLVxuZnMvb2NmczIvS2NvbmZpZzo0Mjpjb25maWcgT0NGUzJfRlNfVVNFUlNQQUNFX0NMVVNURVJcbmZzL29jZnMyL0tjb25maWctNDMtXHR0cmlzdGF0ZSBcJiMzNDtPQ0ZTMiBVc2Vyc3BhY2UgQ2x1c3RlcmluZ1wmIzM0O1xuLS1cbmZzL29jZnMyL0tjb25maWctNTMtXG5mcy9vY2ZzMi9LY29uZmlnOjU0OmNvbmZpZyBPQ0ZTMl9GU19TVEFUU1xuZnMvb2NmczIvS2NvbmZpZy01NS1cdGJvb2wgXCYjMzQ7T0NGUzIgc3RhdGlzdGljc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDA4OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1NzQKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipPQ0ZTMiBDb25maWd1cmF0aW9uIERpdmUqKgoKQWxyaWdodCwgc28gYENPTkZJR19PQ0ZTMl9GU2AgaXMgdGhlIGNlbnRyYWwgY29uZmlndXJhdGlvbiBvcHRpb24gZm9yIHRoZSBPQ0ZTMiBmaWxlc3lzdGVtLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gY2hlY2sgZm9yIGRlcGVuZGVuY2llcy4gSSBrbm93IHRoaXMgbW9kdWxlIGlzIHByZXR0eSBzZWxmLWNvbnRhaW5lZCwgYnV0IEkgYWx3YXlzIHdhbnQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueSBudWFuY2VkIHJlcXVpcmVtZW50cyBsdXJraW5nIHdpdGhpbiBvdGhlciBzdWJzeXN0ZW1zLiBJJiMzOTtsbCBuZWVkIHRvIHF1aWNrbHkgY29uZmlybSB0aGF0IGl0IHN0YW5kcyBhbG9uZSBvciBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBrZXJuZWwgZmVhdHVyZXMgdGhhdCB3b3VsZCBpbmZsdWVuY2UgaXRzIGJlaGF2aW9yIG9yIG15IHRlc3Rpbmcgc3RyYXRlZ3kuIEEgcXVpY2sgc2NhbiBvZiB0aGUgS2NvbmZpZyBzaG91bGQgcmV2ZWFsIGFueSBmbGFncyBJIG5lZWQgdG8gY29uc2lkZXIgZm9yIGVuYWJsaW5nIGl0IGluIHRoaXMgc2NlbmFyaW8uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDg6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL29jZnMyL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvb2NmczIvS2NvbmZpZz0yPWNvbmZpZyBPQ0ZTMl9GU1xuZnMvb2NmczIvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7T0NGUzIgZmlsZSBzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuZnMvb2NmczIvS2NvbmZpZzo0Olx0ZGVwZW5kcyBvbiBJTkVUIFx1MDAyNlx1MDAyNiBTWVNGUyBcdTAwMjZcdTAwMjYgQ09ORklHRlNfRlNcbmZzL29jZnMyL0tjb25maWctNS1cdHNlbGVjdCBCVUZGRVJfSEVBRFxuLS1cbmZzL29jZnMyL0tjb25maWc9Mjg9Y29uZmlnIE9DRlMyX0ZTX08yQ0JcbmZzL29jZnMyL0tjb25maWctMjktXHR0cmlzdGF0ZSBcJiMzNDtPMkNCIEtlcm5lbHNwYWNlIENsdXN0ZXJpbmdcJiMzNDtcbmZzL29jZnMyL0tjb25maWc6MzA6XHRkZXBlbmRzIG9uIE9DRlMyX0ZTXG5mcy9vY2ZzMi9LY29uZmlnLTMxLVx0ZGVmYXVsdCB5XG4tLVxuZnMvb2NmczIvS2NvbmZpZz00Mj1jb25maWcgT0NGUzJfRlNfVVNFUlNQQUNFX0NMVVNURVJcbmZzL29jZnMyL0tjb25maWctNDMtXHR0cmlzdGF0ZSBcJiMzNDtPQ0ZTMiBVc2Vyc3BhY2UgQ2x1c3RlcmluZ1wmIzM0O1xuZnMvb2NmczIvS2NvbmZpZzo0NDpcdGRlcGVuZHMgb24gT0NGUzJfRlMgXHUwMDI2XHUwMDI2IERMTVxuZnMvb2NmczIvS2NvbmZpZy00NS1cdGRlZmF1bHQgeVxuLS1cbmZzL29jZnMyL0tjb25maWc9NTQ9Y29uZmlnIE9DRlMyX0ZTX1NUQVRTXG5mcy9vY2ZzMi9LY29uZmlnLTU1LVx0Ym9vbCBcJiMzNDtPQ0ZTMiBzdGF0aXN0aWNzXCYjMzQ7XG5mcy9vY2ZzMi9LY29uZmlnOjU2Olx0ZGVwZW5kcyBvbiBPQ0ZTMl9GUyBcdTAwMjZcdTAwMjYgREVCVUdfRlNcbmZzL29jZnMyL0tjb25maWctNTctXHRkZWZhdWx0IHlcbi0tXG5mcy9vY2ZzMi9LY29uZmlnPTYyPWNvbmZpZyBPQ0ZTMl9ERUJVR19NQVNLTE9HXG5mcy9vY2ZzMi9LY29uZmlnLTYzLVx0Ym9vbCBcJiMzNDtPQ0ZTMiBsb2dnaW5nIHN1cHBvcnRcJiMzNDtcbmZzL29jZnMyL0tjb25maWc6NjQ6XHRkZXBlbmRzIG9uIE9DRlMyX0ZTXG5mcy9vY2ZzMi9LY29uZmlnLTY1LVx0ZGVmYXVsdCB5XG4tLVxuZnMvb2NmczIvS2NvbmZpZz03Mj1jb25maWcgT0NGUzJfREVCVUdfRlNcbmZzL29jZnMyL0tjb25maWctNzMtXHRib29sIFwmIzM0O09DRlMyIGV4cGVuc2l2ZSBjaGVja3NcJiMzNDtcbmZzL29jZnMyL0tjb25maWc6NzQ6XHRkZXBlbmRzIG9uIE9DRlMyX0ZTXG5mcy9vY2ZzMi9LY29uZmlnLTc1LVx0ZGVmYXVsdCBuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDg6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTMwOAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk9DRlMyIGFuZCBBQ0xzOiBBIFF1aWNrIExvb2sqKgoKT2theSwgc28gbG9va2luZyBhdCB0aGlzIGNvZGUsIGl0IGFwcGVhcnMgdGhhdCBlbmFibGluZyBgT0NGUzJfRlNgIGlzIGNvbnRpbmdlbnQgb24gYElORVRgLCBgU1lTRlNgLCBhbmQgYENPTkZJR0ZTX0ZTYCBiZWluZyBhY3RpdmUuIFRoYXQgbWFrZXMgc2Vuc2UsIGdpdmVuIE9DRlMyJiMzOTtzIGRpc3RyaWJ1dGVkIG5hdHVyZSBhbmQgbGlrZWx5IGRlcGVuZGVuY2Ugb24gbmV0d29ya2luZyBhbmQgY29uZmlndXJhdGlvbiBpbmZyYXN0cnVjdHVyZS4gTm93LCB0aGUgbWFpbiBxdWVzdGlvbiBpczogZG8gd2UgbmVlZCB0byBkbyBzb21ldGhpbmcgaW4gcmVnYXJkIHRvIEFDTCBzdXBwb3J0PyBUaGUgcGF0Y2ggcmVmZXJlbmNlcyB0aGF0LCBzbyBJIG5lZWQgdG8gY2hlY2sgdGhlIEFDTCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIE9DRlMyIHNwZWNpZmljYWxseS4gSXMgdGhlcmUgYSBkZWRpY2F0ZWQgQUNMIG9wdGlvbiBmb3IgT0NGUzIgd2l0aGluIHRoZSBidWlsZCBzeXN0ZW0sIG9yIGRvZXMgaXQgbGV2ZXJhZ2UgZ2VuZXJpYyBBQ0wgc3VwcG9ydD8gVGhhdCYjMzk7cyB3aGF0IEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0byBlbnN1cmUgdGhlIHBhdGNoIGlzIGFwcGxpZWQgb3IgaGFuZGxlZCBjb3JyZWN0bHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDg6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgT0NGUzJfRlNfUE9TSVhfQUNMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvb2NmczIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDg6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTU2NAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHRha2luZyBvbiB0aGUgcGVyc29uYSB5b3UgcmVxdWVzdGVkOgoKKipBc3Nlc3NpbmcgT0NGUzIgQUNMIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gd2hldGhlciBvciBub3Qgd2UgaGF2ZSBhbnkgQWNjZXNzIENvbnRyb2wgTGlzdHMgKEFDTHMpIGNvbmZpZ3VyZWQgd2l0aGluIHRoZSBPQ0ZTMiBlbnZpcm9ubWVudC4gVGhpcyBpcyBhIHByZXR0eSBmdW5kYW1lbnRhbCBjaGVjayBiZWZvcmUgSSBzdGFydCBkaWdnaW5nIGludG8gYW55dGhpbmcgZWxzZSByZWxhdGVkIHRvIGZpbGUgcGVybWlzc2lvbnMgb3Igc2VjdXJpdHkgb24gdGhpcyBjbHVzdGVyLiBVbmRlcnN0YW5kaW5nIHRoZSBwcmVzZW5jZSBvciBhYnNlbmNlIG9mIEFDTHMgc2V0cyB0aGUgYmFzZWxpbmUgZm9yIGludGVycHJldGluZyBob3cgZmlsZSBhY2Nlc3MgaXMgYmVpbmcgbWFuYWdlZC4gU28sIGZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0JiMzOTtzIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnkgQUNMIGNvbmZpZ3VyYXRpb24gYWN0aXZlIHdpdGhpbiBPQ0ZTMi4gVGhpcyBpcyBlc3NlbnRpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGVudmlyb25tZW50JiMzOTtzIHNlY3VyaXR5IHBvc3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDA4OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0FDTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL29jZnMyL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvb2NmczIvS2NvbmZpZz0yPWNvbmZpZyBPQ0ZTMl9GU1xuLS1cbmZzL29jZnMyL0tjb25maWctOS1cdHNlbGVjdCBRVU9UQV9UUkVFXG5mcy9vY2ZzMi9LY29uZmlnOjEwOlx0c2VsZWN0IEZTX1BPU0lYX0FDTFxuZnMvb2NmczIvS2NvbmZpZy0xMS1cdHNlbGVjdCBMRUdBQ1lfRElSRUNUX0lPXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDA4OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4NDcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzMDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqT0NGUzIgQUNMIEFjdGl2YXRpb24qKgoKT2theSwgc28gdGhlIHRleHQgaXMgc2F5aW5nIHRoYXQgc2VsZWN0aW5nIGBPQ0ZTMl9GU2AgaW1wbGllcyBgRlNfUE9TSVhfQUNMYC4gVGhhdCBzaW1wbGlmaWVzIHRoaW5nczsgd2UganVzdCBuZWVkIHRvIGVuc3VyZSBgT0NGUzJfRlNgIGlzIGVuYWJsZWQuCgpOZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhlIHBhdGNoIGJ5IGV4YW1pbmluZyB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zLiBJdCBsb29rcyBsaWtlIHRoZSBwYXRjaCB0b3VjaGVzIGEgZmV3IGtleSBhcmVhczogYG9jZnMyX2FjbF9pbml0X3JlbGVhc2VgLCBgb2NmczJfYWNsX2luaXRfcHJlcGFyZWAsIGBvY2ZzMl9pbml0X2FjbGAsIGBvY2ZzMl9ta25vZGAsIGBvY2ZzMl9jYWxjX3hhdHRyX2luaXRgLCBgb2NmczJfeGF0dHJfc2V0X2hhbmRsZWAsIGFuZCBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYC4gTm93LCBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgd2hldGhlciB0aGVzZSBmdW5jdGlvbnMgYXJlIGV4cG9ydGVkIGZvciB1c2UgZWxzZXdoZXJlIG9yIGFyZSBzdGF0aWMgdG8gdGhlIE9DRlMyIG1vZHVsZS4KCkFmdGVyIHRoYXQsIEkgY2FuIHNlZToKKiAgIGBvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlYCBpcyBub24tc3RhdGljCiogICBgb2NmczJfYWNsX2luaXRfcHJlcGFyZWAgaXMgbm9uLXN0YXRpYwoqICAgYG9jZnMyX2luaXRfYWNsYCBpcyBub24tc3RhdGljCiogICBgb2NmczJfbWtub2RgIGlzIHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEhvd2V2ZXIsIGl0IGlzIHByb2JhYmx5IHBhcnQgb2YgYG9jZnMyX2Rpcl9pbm9kZV9vcGVyYXRpb25zYCwgd2hpY2ggY2hhbmdlcyBob3cgaXQmIzM5O3MgaGFuZGxlZC4KKiAgIGBvY2ZzMl9jYWxjX3hhdHRyX2luaXRgIGlzIG5vbi1zdGF0aWMKKiAgIGBvY2ZzMl94YXR0cl9zZXRfaGFuZGxlYCBpcyBub24tc3RhdGljCiogICBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYCBpcyBub24tc3RhdGljCgpJIG5lZWQgdG8gcXVpY2tseSBjb25maXJtIHRoYXQgYG9jZnMyX21rbm9kYCBpcyBpbmRlZWQgc3RhdGljIHRvIHRoZSBtb2R1bGUuIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGBmcy9vY2ZzMi9uYW1laS5jYCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwODowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvY2ZzMl9ta25vZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL29jZnMyL25hbWVpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvb2NmczIvbmFtZWkuYy01NS1cbmZzL29jZnMyL25hbWVpLmM6NTY6c3RhdGljIGludCBvY2ZzMl9ta25vZF9sb2NrZWQoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsXG5mcy9vY2ZzMi9uYW1laS5jLTU3LVx0XHRcdCAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL29jZnMyL25hbWVpLmM9MjE1PXN0YXRpYyB2b2lkIG9jZnMyX2NsZWFudXBfYWRkX2VudHJ5X2ZhaWx1cmUoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsXG4tLVxuZnMvb2NmczIvbmFtZWkuYy0yMjktXG5mcy9vY2ZzMi9uYW1laS5jOjIzMDpzdGF0aWMgaW50IG9jZnMyX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuZnMvb2NmczIvbmFtZWkuYy0yMzEtXHRcdCAgICAgICBzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5mcy9vY2ZzMi9uYW1laS5jLTI2MC1cbmZzL29jZnMyL25hbWVpLmM6MjYxOlx0dHJhY2Vfb2NmczJfbWtub2QoZGlyLCBkZW50cnksIGRlbnRyeS1cdTAwM2VkX25hbWUubGVuLCBkZW50cnktXHUwMDNlZF9uYW1lLm5hbWUsXG5mcy9vY2ZzMi9uYW1laS5jLTI2Mi1cdFx0XHQgICh1bnNpZ25lZCBsb25nIGxvbmcpT0NGUzJfSShkaXIpLVx1MDAzZWlwX2Jsa25vLFxuLS1cbmZzL29jZnMyL25hbWVpLmMtMzY5LVxuZnMvb2NmczIvbmFtZWkuYzozNzA6XHRoYW5kbGUgPSBvY2ZzMl9zdGFydF90cmFucyhvc2IsIG9jZnMyX21rbm9kX2NyZWRpdHMob3NiLVx1MDAzZXNiLFxuZnMvb2NmczIvbmFtZWkuYy0zNzEtXHRcdFx0XHRcdFx0XHQgICAgU19JU0RJUihtb2RlKSxcbi0tXG5mcy9vY2ZzMi9uYW1laS5jLTM4OS1cdC8qIGRvIHRoZSByZWFsIHdvcmsgbm93LiAqL1xuZnMvb2NmczIvbmFtZWkuYzozOTA6XHRzdGF0dXMgPSBvY2ZzMl9ta25vZF9sb2NrZWQob3NiLCBkaXIsIGlub2RlLCBkZXYsXG5mcy9vY2ZzMi9uYW1laS5jLTM5MS1cdFx0XHRcdCAgICBcdTAwMjZuZXdfZmVfYmgsIHBhcmVudF9mZV9iaCwgaGFuZGxlLFxuLS1cbmZzL29jZnMyL25hbWVpLmMtNTE3LVxuZnMvb2NmczIvbmFtZWkuYzo1MTg6c3RhdGljIGludCBfX29jZnMyX21rbm9kX2xvY2tlZChzdHJ1Y3QgaW5vZGUgKmRpcixcbmZzL29jZnMyL25hbWVpLmMtNTE5LVx0XHRcdFx0c3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9vY2ZzMi9uYW1laS5jLTYyOS1cbmZzL29jZnMyL25hbWVpLmM6NjMwOnN0YXRpYyBpbnQgb2NmczJfbWtub2RfbG9ja2VkKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLFxuZnMvb2NmczIvbmFtZWkuYy02MzEtXHRcdFx0ICAgICAgc3RydWN0IGlub2RlICpkaXIsXG4tLVxuZnMvb2NmczIvbmFtZWkuYy02NTItXG5mcy9vY2ZzMi9uYW1laS5jOjY1MzpcdHJldHVybiBfX29jZnMyX21rbm9kX2xvY2tlZChkaXIsIGlub2RlLCBkZXYsIG5ld19mZV9iaCxcbmZzL29jZnMyL25hbWVpLmMtNjU0LVx0XHRcdFx0ICAgIGhhbmRsZSwgaW5vZGVfYWMsIGZlX2Jsa25vLFxuLS1cbmZzL29jZnMyL25hbWVpLmM9NjU4PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpvY2ZzMl9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi0tXG5mcy9vY2ZzMi9uYW1laS5jLTY2Ni1cdFx0XHQgIE9DRlMyX0koZGlyKS1cdTAwM2VpcF9ibGtubywgbW9kZSk7XG5mcy9vY2ZzMi9uYW1laS5jOjY2NzpcdHJldCA9IG9jZnMyX21rbm9kKFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlIHwgU19JRkRJUiwgMCk7XG5mcy9vY2ZzMi9uYW1laS5jLTY2OC1cdGlmIChyZXQpXG4tLVxuZnMvb2NmczIvbmFtZWkuYz02NzQ9c3RhdGljIGludCBvY2ZzMl9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4tLVxuZnMvb2NmczIvbmFtZWkuYy02ODMtXHRcdFx0ICAgKHVuc2lnbmVkIGxvbmcgbG9uZylPQ0ZTMl9JKGRpciktXHUwMDNlaXBfYmxrbm8sIG1vZGUpO1xuZnMvb2NmczIvbmFtZWkuYzo2ODQ6XHRyZXQgPSBvY2ZzMl9ta25vZChcdTAwMjZub3BfbW50X2lkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSB8IFNfSUZSRUcsIDApO1xuZnMvb2NmczIvbmFtZWkuYy02ODUtXHRpZiAocmV0KVxuLS1cbmZzL29jZnMyL25hbWVpLmM9MTgxND1zdGF0aWMgaW50IG9jZnMyX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4tLVxuZnMvb2NmczIvbmFtZWkuYy0xOTU2LVxuZnMvb2NmczIvbmFtZWkuYzoxOTU3Olx0c3RhdHVzID0gb2NmczJfbWtub2RfbG9ja2VkKG9zYiwgZGlyLCBpbm9kZSxcbmZzL29jZnMyL25hbWVpLmMtMTk1OC1cdFx0XHRcdCAgICAwLCBcdTAwMjZuZXdfZmVfYmgsIHBhcmVudF9mZV9iaCwgaGFuZGxlLFxuLS1cbmZzL29jZnMyL25hbWVpLmM9MjUyMT1pbnQgb2NmczJfY3JlYXRlX2lub2RlX2luX29ycGhhbihzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5mcy9vY2ZzMi9uYW1laS5jLTI1NjEtXG5mcy9vY2ZzMi9uYW1laS5jOjI1NjI6XHRoYW5kbGUgPSBvY2ZzMl9zdGFydF90cmFucyhvc2IsIG9jZnMyX21rbm9kX2NyZWRpdHMob3NiLVx1MDAzZXNiLCAwLCAwKSk7XG5mcy9vY2ZzMi9uYW1laS5jLTI1NjMtXHRpZiAoSVNfRVJSKGhhbmRsZSkpIHtcbi0tXG5mcy9vY2ZzMi9uYW1laS5jLTI1ODQtXHQvKiBkbyB0aGUgcmVhbCB3b3JrIG5vdy4gKi9cbmZzL29jZnMyL25hbWVpLmM6MjU4NTpcdHN0YXR1cyA9IF9fb2NmczJfbWtub2RfbG9ja2VkKGRpciwgaW5vZGUsXG5mcy9vY2ZzMi9uYW1laS5jLTI1ODYtXHRcdFx0XHQgICAgICAwLCBcdTAwMjZuZXdfZGlfYmgsIGhhbmRsZSxcbi0tXG5mcy9vY2ZzMi9uYW1laS5jPTI5MzM9Y29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgb2NmczJfZGlyX2lvcHMgPSB7XG4tLVxuZnMvb2NmczIvbmFtZWkuYy0yOTQwLVx0Lm1rZGlyXHRcdD0gb2NmczJfbWtkaXIsXG5mcy9vY2ZzMi9uYW1laS5jOjI5NDE6XHQubWtub2RcdFx0PSBvY2ZzMl9ta25vZCxcbmZzL29jZnMyL25hbWVpLmMtMjk0Mi1cdC5yZW5hbWVcdFx0PSBvY2ZzMl9yZW5hbWUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDA4OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDgzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgT0NGUzIgRmlsZXN5c3RlbSBFbnRyeXBvaW50cyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biBob3cgdGhpcyBhbGwgZml0cyB0b2dldGhlci4gSSBzZWUgdGhhdCBgb2NmczJfbWtub2RgIGlzIGRlZmluZWQgYXMgYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIGlzIGEgYml0IHVudXN1YWwuIEJ1dCBpdCYjMzk7cyB1bHRpbWF0ZWx5IGxpbmtlZCB0byB0aGUgYC5ta25vZGAgb3BlcmF0aW9uIHdpdGhpbiBgb2NmczJfZGlyX2lvcHNgLiBUaGF0JiMzOTtzIHRoZSBwcmltYXJ5IHdheSBpdCYjMzk7cyBleHBvc2VkLiBBaGEsIGFuZCBpdCYjMzk7cyBhbHNvIGNhbGxlZCBieSBgb2NmczJfbWtkaXJgIGFuZCBgb2NmczJfY3JlYXRlYC4gUmlnaHQsIHNvIGBvY2ZzMl9ta25vZGAgaXMgZWZmZWN0aXZlbHkgYW4gaW50ZXJuYWwgZnVuY3Rpb24gdGhhdCBnZXRzIGluZGlyZWN0bHkgY2FsbGVkIHRocm91Z2ggdGhlc2UgaGlnaGVyLWxldmVsIGZ1bmN0aW9ucy4gU28gdGhlIGV4cG9zZWQgZW50cnlwb2ludHMgSSBuZWVkIHRvIGNvbnNpZGVyIGFyZSBkZWZpbml0ZWx5IGBvY2ZzMl9ta25vZGAsIGBvY2ZzMl9ta2RpcmAsIGFuZCBgb2NmczJfY3JlYXRlYC4uLiBhbmQgYWxzbyBgb2NmczJfc3ltbGlua2AuCgpXYWl0LCBhIHNtYWxsIHNuYWcuIEl0IGxvb2tzIGxpa2UgYG9jZnMyX3N5bWxpbmtgIGRvZXNuJiMzOTt0IGRpcmVjdGx5IGNhbGwgYG9jZnMyX21rbm9kYC4gSXQgYWN0dWFsbHkgY2FsbHMgYG9jZnMyX21rbm9kX2xvY2tlZGAgaW5zdGVhZC4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0aGF0IHN1YnRsZSBkaXN0aW5jdGlvbi4gQnV0IHRoZXJlJiMzOTtzIGFub3RoZXIgcG9pbnQgb2YgaW50ZXJlc3QgaGVyZSAtIGBvY2ZzMl9zeW1saW5rYCBjYWxscyBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYC4gVGhhdCYjMzk7cyBhbiBpbnRlcmVzdGluZyBjYWxsIHRvIGV4YW1pbmUuIExldCYjMzk7cyBkaWcgZGVlcGVyIGFuZCBzZWUgd2hhdCB0aGF0IGZ1bmN0aW9uIGlzIGRvaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwODowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9vY2ZzMi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvb2NmczIvcmVmY291bnR0cmVlLmM9NDIzOD1zdGF0aWMgaW50IG9jZnMyX3JlZmxpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsXG4tLVxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDI5Ni1cdGlmICghcHJlc2VydmUpIHtcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jOjQyOTc6XHRcdGVycm9yID0gb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsKGRpciwgbmV3X29ycGhhbl9pbm9kZSxcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jLTQyOTgtXHRcdFx0XHRcdFx0ICAgIFx1MDAyNm5ld19kZW50cnktXHUwMDNlZF9uYW1lKTtcbi0tXG5mcy9vY2ZzMi94YXR0ci5jPTcxODI9aW50IG9jZnMyX3JlZmxpbmtfeGF0dHJzKHN0cnVjdCBpbm9kZSAqb2xkX2lub2RlLFxuLS1cbmZzL29jZnMyL3hhdHRyLmMtNzI2My0gKi9cbmZzL29jZnMyL3hhdHRyLmM6NzI2NDppbnQgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsKHN0cnVjdCBpbm9kZSAqZGlyLFxuZnMvb2NmczIveGF0dHIuYy03MjY1LVx0XHRcdFx0c3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9vY2ZzMi94YXR0ci5oPTgzPWludCBvY2ZzMl9yZWZsaW5rX3hhdHRycyhzdHJ1Y3QgaW5vZGUgKm9sZF9pbm9kZSxcbi0tXG5mcy9vY2ZzMi94YXR0ci5oLTg3LVx0XHRcdCBib29sIHByZXNlcnZlX3NlY3VyaXR5KTtcbmZzL29jZnMyL3hhdHRyLmg6ODg6aW50IG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbChzdHJ1Y3QgaW5vZGUgKmRpcixcbmZzL29jZnMyL3hhdHRyLmgtODktXHRcdFx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwODowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjk2MgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRpZ2dpbmcgaW50byBPQ0ZTMiBTZWN1cml0eSBDb250ZXh0cyoqCgpPa2F5LCBzbyBJJiMzOTttIHRyYWNpbmcgdGhlIHNlY3VyaXR5IGNvbnRleHQgaW5pdGlhbGl6YXRpb24gd2l0aGluIE9DRlMyLCBzcGVjaWZpY2FsbHkgaG93IEFDTHMgYXJlIGhhbmRsZWQuIEkgc2VlIHRoYXQgYG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbGAgZ2V0cyBjYWxsZWQgZHVyaW5nIGBvY2ZzMl9yZWZsaW5rYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIFJlZmxpbmtpbmcgY291bGQgY3JlYXRlIGEgbmVlZCB0byBjb3B5IG92ZXIgc2VjdXJpdHkgYXR0cmlidXRlcy4gQnV0Li4uIEkgbmVlZCB0byBiZSBzdXJlIEkmIzM5O20gbm90IG1pc3Npbmcgc29tZXRoaW5nLiBJJiMzOTttIHdvbmRlcmluZyBpZiB0aGlzIGluaXRpYWxpemF0aW9uIGFsc28gaGFwcGVucyBkdXJpbmcgb3RoZXIgaW5vZGUgY3JlYXRpb24gb3BlcmF0aW9ucy4KCkxldCYjMzk7cyBxdWlja2x5IGNoZWNrIHRoZSBjYWxsIGdyYXBoIGZvciBgb2NmczJfc3ltbGlua2AuIFRoYXQmIzM5O3MgaGFuZGxlZCBieSBgb2NmczJfc3ltbGlua2AgaW4gYGZzL29jZnMyL25hbWVpLmNgLiBJIG5lZWQgdG8gY29uZmlybSBpZiB0aGUgc2VjdXJpdHkgc2V0dXAgaXMgdGFrZW4gY2FyZSBvZiBkdXJpbmcgc3ltbGluayBjcmVhdGlvbiBhcyB3ZWxsLCBvciBpZiBpdCBoYXMgYSBkaWZmZXJlbnQgZW50cnlwb2ludC4gSXQmIzM5O3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIGhvdyBBQ0xzIGFuZCBleHRlbmRlZCBhdHRyaWJ1dGVzIGFyZSBtYW5hZ2VkIGFjcm9zcyBkaWZmZXJlbnQgZmlsZSBjcmVhdGlvbiBtZXRob2RzIHdpdGhpbiB0aGlzIGNsdXN0ZXIgZmlsZXN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDg6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b2NmczJfc3ltbGluayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL29jZnMyL25hbWVpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvb2NmczIvbmFtZWkuYz0xNzE2PXN0YXRpYyBpbnQgb2NmczJfY3JlYXRlX3N5bWxpbmtfZGF0YShzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYixcbi0tXG5mcy9vY2ZzMi9uYW1laS5jLTE4MTMtXG5mcy9vY2ZzMi9uYW1laS5jOjE4MTQ6c3RhdGljIGludCBvY2ZzMl9zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuZnMvb2NmczIvbmFtZWkuYy0xODE1LVx0XHRcdCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5mcy9vY2ZzMi9uYW1laS5jLTE4NDMtXG5mcy9vY2ZzMi9uYW1laS5jOjE4NDQ6XHR0cmFjZV9vY2ZzMl9zeW1saW5rX2JlZ2luKGRpciwgZGVudHJ5LCBzeW1uYW1lLFxuZnMvb2NmczIvbmFtZWkuYy0xODQ1LVx0XHRcdFx0ICBkZW50cnktXHUwMDNlZF9uYW1lLmxlbiwgZGVudHJ5LVx1MDAzZWRfbmFtZS5uYW1lKTtcbi0tXG5mcy9vY2ZzMi9uYW1laS5jLTE5NTEtXG5mcy9vY2ZzMi9uYW1laS5jOjE5NTI6XHR0cmFjZV9vY2ZzMl9zeW1saW5rX2NyZWF0ZShkaXIsIGRlbnRyeSwgZGVudHJ5LVx1MDAzZWRfbmFtZS5sZW4sXG5mcy9vY2ZzMi9uYW1laS5jLTE5NTMtXHRcdFx0XHQgICBkZW50cnktXHUwMDNlZF9uYW1lLm5hbWUsXG4tLVxuZnMvb2NmczIvbmFtZWkuYy0xOTY3LVx0bmV3c2l6ZSA9IGwgLSAxO1xuZnMvb2NmczIvbmFtZWkuYzoxOTY4Olx0aW5vZGUtXHUwMDNlaV9vcCA9IFx1MDAyNm9jZnMyX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucztcbmZzL29jZnMyL25hbWVpLmMtMTk2OS1cdGlub2RlX25vaGlnaG1lbShpbm9kZSk7XG4tLVxuZnMvb2NmczIvbmFtZWkuYz0yOTMzPWNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG9jZnMyX2Rpcl9pb3BzID0ge1xuLS1cbmZzL29jZnMyL25hbWVpLmMtMjkzOC1cdC5ybWRpclx0XHQ9IG9jZnMyX3VubGluayxcbmZzL29jZnMyL25hbWVpLmM6MjkzOTpcdC5zeW1saW5rXHQ9IG9jZnMyX3N5bWxpbmssXG5mcy9vY2ZzMi9uYW1laS5jLTI5NDAtXHQubWtkaXJcdFx0PSBvY2ZzMl9ta2RpcixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDg6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM3OTUKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIEFDTCBJbml0aWFsaXphdGlvbiBQYXRoIGluIE9DRlMyIFN5bWxpbmsgQ3JlYXRpb24qKgoKQWxyaWdodCwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhlIE9DRlMyIGNvZGUsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBgb2NmczJfc3ltbGlua2AuIFRoZSBrZXkgcXVlc3Rpb24gSSYjMzk7bSB0cnlpbmcgdG8gYW5zd2VyIGlzIHByZWNpc2VseSBob3cgQUNMcyBhcmUgaW5pdGlhbGl6ZWQgZm9yIGEgbmV3bHkgY3JlYXRlZCBzeW1ib2xpYyBsaW5rLiBNeSBndXQgZmVlbGluZyBpcyB0ZWxsaW5nIG1lIGl0JiMzOTtzIGVpdGhlciBnb2luZyB0byBsZXZlcmFnZSB0aGUgZXhpc3RpbmcgQUNMIGluZnJhc3RydWN0dXJlLCBwb3RlbnRpYWxseSB0aHJvdWdoIGBvY2ZzMl9pbml0X2FjbGAsIG9yIHBlcmhhcHMgaXQmIzM5O3MgZ29pbmcgdG8gdXNlIHNvbWUga2luZCBvZiB4YXR0ciBjYWxjdWxhdGlvbiByb3V0aW5lIHRvIGdldCBpdCBzZXQgdXAsIHNvIEkgbmVlZCB0byBjaGVjayBpZiB3ZSYjMzk7cmUgY2FsbGluZyBgb2NmczJfY2FsY194YXR0cl9pbml0YC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IEFDTHMgZ2V0IHRoZWlyIGluaXRpYWwgc3RhdGUgZm9yIHRoZXNlIHN5bWxpbmtzIGJlY2F1c2UgaXQmIzM5O3MgYSBjcml0aWNhbCBwYXRoIHRvIGVuc3VyaW5nIHRoZSBzZWN1cml0eSBhbmQgcGVybWlzc2lvbnMgYmVoYXZlIGFzIGV4cGVjdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwODowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvY2ZzMl9jYWxjX3hhdHRyX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9vY2ZzMi9uYW1laS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL29jZnMyL25hbWVpLmM9MjMwPXN0YXRpYyBpbnQgb2NmczJfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4tLVxuZnMvb2NmczIvbmFtZWkuYy0zMzgtXHQvKiBjYWxjdWxhdGUgbWV0YSBkYXRhL2NsdXN0ZXJzIGZvciBzZXR0aW5nIHNlY3VyaXR5IGFuZCBhY2wgeGF0dHIgKi9cbmZzL29jZnMyL25hbWVpLmM6MzM5Olx0c3RhdHVzID0gb2NmczJfY2FsY194YXR0cl9pbml0KGRpciwgbW9kZSwgXHUwMDI2c2ksIFx1MDAyNndhbnRfY2x1c3RlcnMsXG5mcy9vY2ZzMi9uYW1laS5jLTM0MC1cdFx0XHRcdCAgICAgICBcdTAwMjZ4YXR0cl9jcmVkaXRzLCBcdTAwMjZ3YW50X21ldGEsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDA4OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MjEyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqRGlnZ2luZyBpbnRvIE9DRlMyIFhhdHRyIEluaXRpYWxpemF0aW9uKioKClJpZ2h0LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIGhvdyBFeHRlbmRlZCBBdHRyaWJ1dGVzIChYYXR0cnMpIGdldCBpbml0aWFsaXplZCB3aXRoaW4gdGhlIE9DRlMyIGZpbGVzeXN0ZW0uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBvY2ZzMl9jYWxjX3hhdHRyX2luaXRgIGlzICpvbmx5KiBjYWxsZWQgd2l0aGluIHRoZSBgb2NmczJfbWtub2RgIGZ1bmN0aW9uLiBUaGF0IHNlZW1zLi4uIHBvdGVudGlhbGx5IHJlc3RyaWN0aXZlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3Npbmcgc29tZXRoaW5nIGNyaXRpY2FsLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBrbm93IGlmIHRoZXJlIGlzIGFub3RoZXIgZnVuY3Rpb24gd2hlcmUgWGF0dHIgaW5pdGlhbGl6YXRpb24gdGFrZXMgcGxhY2UuIFdoYXQgYWJvdXQgc3ltYm9saWMgbGlua3M/IGBvY2ZzMl9zeW1saW5rYCEgRG9lcyB0aGF0IGFsc28gc2V0IEFDTHM/IFRoYXQmIzM5O3MgdGhlIG5leHQgdGhpbmcgSSBuZWVkIHRvIGludmVzdGlnYXRlLiBJIG5lZWQgdG8gY29uZmlybSB0aGF0IG15IGluaXRpYWwgYXNzdW1wdGlvbiBpcyBjb3JyZWN0LCBvciBpZiB0aGVyZSYjMzk7cyBhbm90aGVyIHBvaW50IHdoZXJlIFhhdHRycyBnZXQgc2V0IHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwODowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvY2ZzMl9pbml0X2FjbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL29jZnMyL25hbWVpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvb2NmczIvbmFtZWkuYz0yMzA9c3RhdGljIGludCBvY2ZzMl9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi0tXG5mcy9vY2ZzMi9uYW1laS5jLTQxOC1cbmZzL29jZnMyL25hbWVpLmM6NDE5Olx0c3RhdHVzID0gb2NmczJfaW5pdF9hY2woaGFuZGxlLCBpbm9kZSwgbmV3X2ZlX2JoLCBtZXRhX2FjLCBkYXRhX2FjLFxuZnMvb2NmczIvbmFtZWkuYy00MjAtXHRcdFx0XHRcdTAwMjZhY2xfc3RhdGUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwODowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDYxNwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgT0NGUzIgRmlsZSBDcmVhdGlvbiBhbmQgQUNMIEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgT0NGUzIgaGFuZGxlcyBzeW1ib2xpYyBsaW5rcywgYW5kIEkgc2VlIHRoYXQgYG9jZnMyX3N5bWxpbmtgIGRvZXNuJiMzOTt0IHNlZW0gdG8gaW52b2tlIGBvY2ZzMl9pbml0X2FjbGAgb3IgYG9jZnMyX2NhbGNfeGF0dHJfaW5pdGAgZGlyZWN0bHkuIFRoYXQmIzM5O3MgYSBsaXR0bGUgdW5leHBlY3RlZC4gTm93LCBJIHJlbWVtYmVyIHRoYXQgYG9jZnMyX2luaXRfYWNsYCAqaXMqIGNhbGxlZCB3aXRoaW4gYG9jZnMyX21rbm9kYCBhbmQgYWxzbyBpbiBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYC4gVGhlbiBJIHJlbWVtYmVyIHRoYXQgYG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbGAgaXMgY2FsbGVkIGJ5IGBvY2ZzMl9yZWZsaW5rYC4gVGhpcyBzdWdnZXN0cyB0aGUgZnVuY3Rpb25zIGhhbmRsaW5nIHRoZSBBQ0wgc3R1ZmYgSSBuZWVkIHRvIGNvbmNlbnRyYXRlIG9uIGFyZSBgb2NmczJfbWtub2RgLCBgb2NmczJfbWtkaXJgLCBgb2NmczJfY3JlYXRlYCwgYW5kIGBvY2ZzMl9yZWZsaW5rYC4gQnV0IGhvbGQgb24sIGlzbiYjMzk7dCBgb2NmczJfbWtub2RgIHN0YXRpYz8gTGV0IG1lIGRvdWJsZS1jaGVjayBgb2NmczJfcmVmbGlua2AgZm9yIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcuIEkmIzM5O2xsIGZvY3VzIG15IGVmZm9ydHMgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDA4OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O29jZnMyX3JlZmxpbmsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9vY2ZzMi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvb2NmczIvZmlsZS5jPTI3MDY9c3RhdGljIGxvZmZfdCBvY2ZzMl9yZW1hcF9maWxlX3JhbmdlKHN0cnVjdCBmaWxlICpmaWxlX2luLCBsb2ZmX3QgcG9zX2luLFxuLS1cbmZzL29jZnMyL2ZpbGUuYy0yNzI1LVx0LyogTG9jayBib3RoIGZpbGVzIGFnYWluc3QgSU8gKi9cbmZzL29jZnMyL2ZpbGUuYzoyNzI2Olx0cmV0ID0gb2NmczJfcmVmbGlua19pbm9kZXNfbG9jayhpbm9kZV9pbiwgXHUwMDI2aW5fYmgsIGlub2RlX291dCwgXHUwMDI2b3V0X2JoKTtcbmZzL29jZnMyL2ZpbGUuYy0yNzI3LVx0aWYgKHJldClcbi0tXG5mcy9vY2ZzMi9maWxlLmMtMjc1MS1cbmZzL29jZnMyL2ZpbGUuYzoyNzUyOlx0cmVtYXBwZWQgPSBvY2ZzMl9yZWZsaW5rX3JlbWFwX2Jsb2Nrcyhpbm9kZV9pbiwgaW5fYmgsIHBvc19pbixcbmZzL29jZnMyL2ZpbGUuYy0yNzUzLVx0XHRcdGlub2RlX291dCwgb3V0X2JoLCBwb3Nfb3V0LCBsZW4pO1xuLS1cbmZzL29jZnMyL2ZpbGUuYy0yNzY5LVxuZnMvb2NmczIvZmlsZS5jOjI3NzA6XHRyZXQgPSBvY2ZzMl9yZWZsaW5rX3VwZGF0ZV9kZXN0KGlub2RlX291dCwgb3V0X2JoLCBwb3Nfb3V0ICYjNDM7IGxlbik7XG5mcy9vY2ZzMi9maWxlLmMtMjc3MS1cdGlmIChyZXQpIHtcbi0tXG5mcy9vY2ZzMi9maWxlLmMtMjc3Ni1vdXRfdW5sb2NrOlxuZnMvb2NmczIvZmlsZS5jOjI3Nzc6XHRvY2ZzMl9yZWZsaW5rX2lub2Rlc191bmxvY2soaW5vZGVfaW4sIGluX2JoLCBpbm9kZV9vdXQsIG91dF9iaCk7XG5mcy9vY2ZzMi9maWxlLmMtMjc3OC1cdHJldHVybiByZW1hcHBlZCBcdTAwM2UgMCA/IHJlbWFwcGVkIDogcmV0O1xuLS1cbmZzL29jZnMyL2lvY3RsLmM9ODUzPWxvbmcgb2NmczJfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmZzL29jZnMyL2lvY3RsLmMtOTE5LVxuZnMvb2NmczIvaW9jdGwuYzo5MjA6XHRcdHJldHVybiBvY2ZzMl9yZWZsaW5rX2lvY3RsKGlub2RlLCBvbGRfcGF0aCwgbmV3X3BhdGgsIHByZXNlcnZlKTtcbmZzL29jZnMyL2lvY3RsLmMtOTIxLVx0fVxuLS1cbmZzL29jZnMyL2lvY3RsLmM9OTY1PWxvbmcgb2NmczJfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmZzL29jZnMyL2lvY3RsLmMtOTg2LVxuZnMvb2NmczIvaW9jdGwuYzo5ODc6XHRcdHJldHVybiBvY2ZzMl9yZWZsaW5rX2lvY3RsKGlub2RlLCBjb21wYXRfcHRyKGFyZ3Mub2xkX3BhdGgpLFxuZnMvb2NmczIvaW9jdGwuYy05ODgtXHRcdFx0XHRcdCAgIGNvbXBhdF9wdHIoYXJncy5uZXdfcGF0aCksIHByZXNlcnZlKTtcbi0tXG5mcy9vY2ZzMi9vY2ZzMl90cmFjZS5oPTE4MzE9REVGSU5FX09DRlMyX1VMTF9VTExfVUlOVF9VSU5UX0VWRU5UKG9jZnMyX3JtX3hhdHRyX2NsdXN0ZXIpO1xuZnMvb2NmczIvb2NmczJfdHJhY2UuaC0xODMyLVxuZnMvb2NmczIvb2NmczJfdHJhY2UuaDoxODMzOkRFRklORV9PQ0ZTMl9VTExfVUlOVF9FVkVOVChvY2ZzMl9yZWZsaW5rX3hhdHRyX2hlYWRlcik7XG5mcy9vY2ZzMi9vY2ZzMl90cmFjZS5oLTE4MzQtXG4tLVxuZnMvb2NmczIvb2NmczJfdHJhY2UuaD0xODQxPURFRklORV9PQ0ZTMl9VTExfVUlOVF9FVkVOVChvY2ZzMl94YXR0cl9idWNrZXRfdmFsdWVfcmVmY291bnQpO1xuZnMvb2NmczIvb2NmczJfdHJhY2UuaC0xODQyLVxuZnMvb2NmczIvb2NmczJfdHJhY2UuaDoxODQzOkRFRklORV9PQ0ZTMl9VTExfVUlOVF9VSU5UX0VWRU5UKG9jZnMyX3JlZmxpbmtfeGF0dHJfYnVja2V0cyk7XG5mcy9vY2ZzMi9vY2ZzMl90cmFjZS5oLTE4NDQtXG5mcy9vY2ZzMi9vY2ZzMl90cmFjZS5oOjE4NDU6REVGSU5FX09DRlMyX1VMTF9VSU5UX0VWRU5UKG9jZnMyX3JlZmxpbmtfeGF0dHJfcmVjKTtcbmZzL29jZnMyL29jZnMyX3RyYWNlLmgtMTg0Ni1cbi0tXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYz00MDg5PXN0YXRpYyBpbnQgb2NmczJfY3JlYXRlX3JlZmxpbmtfbm9kZShzdHJ1Y3QgaW5vZGUgKnNfaW5vZGUsXG4tLVxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDE0NS1cbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jOjQxNDY6c3RhdGljIGludCBfX29jZnMyX3JlZmxpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jLTQxNDctXHRcdFx0ICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpvbGRfYmgsXG4tLVxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDIwOS1cdGlmIChvaS1cdTAwM2VpcF9keW5fZmVhdHVyZXMgXHUwMDI2IE9DRlMyX0hBU19YQVRUUl9GTCkge1xuZnMvb2NmczIvcmVmY291bnR0cmVlLmM6NDIxMDpcdFx0cmV0ID0gb2NmczJfcmVmbGlua194YXR0cnMoaW5vZGUsIG9sZF9iaCxcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jLTQyMTEtXHRcdFx0XHRcdCAgIG5ld19pbm9kZSwgbmV3X2JoLFxuLS1cbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jLTQyMzctXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYzo0MjM4OnN0YXRpYyBpbnQgb2NmczJfcmVmbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpcixcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jLTQyMzktXHRcdFx0IHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnksIGJvb2wgcHJlc2VydmUpXG4tLVxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDI3Mi1cdGRvd25fd3JpdGUoXHUwMDI2T0NGUzJfSShpbm9kZSktXHUwMDNlaXBfYWxsb2Nfc2VtKTtcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jOjQyNzM6XHRlcnJvciA9IF9fb2NmczJfcmVmbGluayhvbGRfZGVudHJ5LCBvbGRfYmgsXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYy00Mjc0LVx0XHRcdFx0bmV3X29ycGhhbl9pbm9kZSwgcHJlc2VydmUpO1xuLS1cbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jPTQzNDg9c3RhdGljIGludCBvY2ZzMl92ZnNfcmVmbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYy00Mzk4LVx0aWYgKCFlcnJvcilcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jOjQzOTk6XHRcdGVycm9yID0gb2NmczJfcmVmbGluayhvbGRfZGVudHJ5LCBkaXIsIG5ld19kZW50cnksIHByZXNlcnZlKTtcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jLTQ0MDAtXHRpbm9kZV91bmxvY2soaW5vZGUpO1xuLS1cbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jLTQ0MDctICovXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYzo0NDA4OmludCBvY2ZzMl9yZWZsaW5rX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYy00NDA5LVx0XHRcdGNvbnN0IGNoYXIgX191c2VyICpvbGRuYW1lLFxuLS1cbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jLTQ0NTAtLyogVXBkYXRlIGRlc3RpbmF0aW9uIGlub2RlIHNpemUsIGlmIG5lY2Vzc2FyeS4gKi9cbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jOjQ0NTE6aW50IG9jZnMyX3JlZmxpbmtfdXBkYXRlX2Rlc3Qoc3RydWN0IGlub2RlICpkZXN0LFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDQ1Mi1cdFx0XHQgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRfYmgsXG4tLVxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDQ4OS0vKiBSZW1hcCB0aGUgcmFuZ2UgcG9zX2luOmxlbiBpbiBzX2lub2RlIHRvIHBvc19vdXQ6bGVuIGluIHRfaW5vZGUuICovXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYzo0NDkwOnN0YXRpYyBsb2ZmX3Qgb2NmczJfcmVmbGlua19yZW1hcF9leHRlbnQoc3RydWN0IGlub2RlICpzX2lub2RlLFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDQ5MS1cdFx0XHRcdFx0IHN0cnVjdCBidWZmZXJfaGVhZCAqc19iaCxcbi0tXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYy00NjAzLS8qIFNldCB1cCByZWZjb3VudCB0cmVlIGFuZCByZW1hcCBzX2lub2RlIHRvIHRfaW5vZGUuICovXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYzo0NjA0OmxvZmZfdCBvY2ZzMl9yZWZsaW5rX3JlbWFwX2Jsb2NrcyhzdHJ1Y3QgaW5vZGUgKnNfaW5vZGUsXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYy00NjA1LVx0XHRcdFx0ICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnNfYmgsXG4tLVxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDY4NS1cdC8qIEFjdHVhbGx5IHJlbWFwIGV4dGVudHMgbm93LiAqL1xuZnMvb2NmczIvcmVmY291bnR0cmVlLmM6NDY4NjpcdHJldCA9IG9jZnMyX3JlZmxpbmtfcmVtYXBfZXh0ZW50KHNfaW5vZGUsIHNfYmgsIHBvc19pbiwgdF9pbm9kZSwgdF9iaCxcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jLTQ2ODctXHRcdFx0XHRcdCBwb3Nfb3V0LCBsZW4sIFx1MDAyNmRlYWxsb2MpO1xuLS1cbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jLTQ3MDItLyogTG9jayBhbiBpbm9kZSBhbmQgZ3JhYiBhIGJoIHBvaW50aW5nIHRvIHRoZSBpbm9kZS4gKi9cbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jOjQ3MDM6aW50IG9jZnMyX3JlZmxpbmtfaW5vZGVzX2xvY2soc3RydWN0IGlub2RlICpzX2lub2RlLFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDcwNC1cdFx0XHQgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiaF9zLFxuLS1cbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jLTQ3OTYtLyogVW5sb2NrIGJvdGggaW5vZGVzIGFuZCByZWxlYXNlIGJ1ZmZlcnMuICovXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYzo0Nzk3OnZvaWQgb2NmczJfcmVmbGlua19pbm9kZXNfdW5sb2NrKHN0cnVjdCBpbm9kZSAqc19pbm9kZSxcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jLTQ3OTgtXHRcdFx0XHQgc3RydWN0IGJ1ZmZlcl9oZWFkICpzX2JoLFxuLS1cbmZzL29jZnMyL3JlZmNvdW50dHJlZS5oPTk4PWludCBvY2ZzMl9pbmNyZWFzZV9yZWZjb3VudChoYW5kbGVfdCAqaGFuZGxlLFxuLS1cbmZzL29jZnMyL3JlZmNvdW50dHJlZS5oLTEwMy1cdFx0XHQgICAgc3RydWN0IG9jZnMyX2NhY2hlZF9kZWFsbG9jX2N0eHQgKmRlYWxsb2MpO1xuZnMvb2NmczIvcmVmY291bnR0cmVlLmg6MTA0OmludCBvY2ZzMl9yZWZsaW5rX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuaC0xMDUtXHRcdFx0Y29uc3QgY2hhciBfX3VzZXIgKm9sZG5hbWUsXG4tLVxuZnMvb2NmczIvcmVmY291bnR0cmVlLmgtMTA3LVx0XHRcdGJvb2wgcHJlc2VydmUpO1xuZnMvb2NmczIvcmVmY291bnR0cmVlLmg6MTA4OmxvZmZfdCBvY2ZzMl9yZWZsaW5rX3JlbWFwX2Jsb2NrcyhzdHJ1Y3QgaW5vZGUgKnNfaW5vZGUsXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuaC0xMDktXHRcdFx0XHQgIHN0cnVjdCBidWZmZXJfaGVhZCAqc19iaCxcbi0tXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuaC0xMTQtXHRcdFx0XHQgIGxvZmZfdCBsZW4pO1xuZnMvb2NmczIvcmVmY291bnR0cmVlLmg6MTE1OmludCBvY2ZzMl9yZWZsaW5rX2lub2Rlc19sb2NrKHN0cnVjdCBpbm9kZSAqc19pbm9kZSxcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5oLTExNi1cdFx0XHQgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiaDEsXG4tLVxuZnMvb2NmczIvcmVmY291bnR0cmVlLmgtMTE4LVx0XHRcdCAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqKmJoMik7XG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuaDoxMTk6dm9pZCBvY2ZzMl9yZWZsaW5rX2lub2Rlc191bmxvY2soc3RydWN0IGlub2RlICpzX2lub2RlLFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmgtMTIwLVx0XHRcdFx0IHN0cnVjdCBidWZmZXJfaGVhZCAqc19iaCxcbi0tXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuaC0xMjItXHRcdFx0XHQgc3RydWN0IGJ1ZmZlcl9oZWFkICp0X2JoKTtcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5oOjEyMzppbnQgb2NmczJfcmVmbGlua191cGRhdGVfZGVzdChzdHJ1Y3QgaW5vZGUgKmRlc3QsXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuaC0xMjQtXHRcdFx0ICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkX2JoLFxuLS1cbmZzL29jZnMyL3hhdHRyLmM9NjMwOD1zdGF0aWMgaW50IG9jZnMyX2dldF94YXR0cl92YWx1ZV9yb290KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxuZnMvb2NmczIveGF0dHIuYy02MzMxLSAqL1xuZnMvb2NmczIveGF0dHIuYzo2MzMyOnN0YXRpYyBpbnQgb2NmczJfcmVmbGlua19sb2NrX3hhdHRyX2FsbG9jYXRvcnMoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsXG5mcy9vY2ZzMi94YXR0ci5jLTYzMzMtXHRcdFx0XHRcdHN0cnVjdCBvY2ZzMl94YXR0cl9oZWFkZXIgKnhoLFxuLS1cbmZzL29jZnMyL3hhdHRyLmMtNjM4Ny0gKi9cbmZzL29jZnMyL3hhdHRyLmM6NjM4ODpzdGF0aWMgaW50IG9jZnMyX3JlZmxpbmtfeGF0dHJfaGVhZGVyKGhhbmRsZV90ICpoYW5kbGUsXG5mcy9vY2ZzMi94YXR0ci5jLTYzODktXHRcdFx0XHQgICAgICBzdHJ1Y3Qgb2NmczJfeGF0dHJfcmVmbGluayAqYXJncyxcbi0tXG5mcy9vY2ZzMi94YXR0ci5jLTY0MDctXG5mcy9vY2ZzMi94YXR0ci5jOjY0MDg6XHR0cmFjZV9vY2ZzMl9yZWZsaW5rX3hhdHRyX2hlYWRlcigodW5zaWduZWQgbG9uZyBsb25nKW9sZF9iaC1cdTAwM2ViX2Jsb2NrbnIsXG5mcy9vY2ZzMi94YXR0ci5jLTY0MDktXHRcdFx0XHRcdCBsZTE2X3RvX2NwdSh4aC1cdTAwM2V4aF9jb3VudCkpO1xuLS1cbmZzL29jZnMyL3hhdHRyLmMtNjUxNy1cbmZzL29jZnMyL3hhdHRyLmM6NjUxODpzdGF0aWMgaW50IG9jZnMyX3JlZmxpbmtfeGF0dHJfaW5saW5lKHN0cnVjdCBvY2ZzMl94YXR0cl9yZWZsaW5rICphcmdzKVxuZnMvb2NmczIveGF0dHIuYy02NTE5LXtcbi0tXG5mcy9vY2ZzMi94YXR0ci5jLTY1NDQtXG5mcy9vY2ZzMi94YXR0ci5jOjY1NDU6XHRyZXQgPSBvY2ZzMl9yZWZsaW5rX2xvY2tfeGF0dHJfYWxsb2NhdG9ycyhvc2IsIHhoLCBhcmdzLVx1MDAzZXJlZl9yb290X2JoLFxuZnMvb2NmczIveGF0dHIuYy02NTQ2LVx0XHRcdFx0XHRcdCAgXHUwMDI2Y3JlZGl0cywgXHUwMDI2bWV0YV9hYyk7XG4tLVxuZnMvb2NmczIveGF0dHIuYy02NTcxLVxuZnMvb2NmczIveGF0dHIuYzo2NTcyOlx0cmV0ID0gb2NmczJfcmVmbGlua194YXR0cl9oZWFkZXIoaGFuZGxlLCBhcmdzLCBhcmdzLVx1MDAzZW9sZF9iaCwgeGgsXG5mcy9vY2ZzMi94YXR0ci5jLTY1NzMtXHRcdFx0XHRcdCBhcmdzLVx1MDAzZW5ld19iaCwgbmV3X3hoLCBcdTAwMjZ2YiwgbWV0YV9hYyxcbi0tXG5mcy9vY2ZzMi94YXR0ci5jPTY1OTg9c3RhdGljIGludCBvY2ZzMl9jcmVhdGVfZW1wdHlfeGF0dHJfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9vY2ZzMi94YXR0ci5jLTY2MzMtXG5mcy9vY2ZzMi94YXR0ci5jOjY2MzQ6c3RhdGljIGludCBvY2ZzMl9yZWZsaW5rX3hhdHRyX2Jsb2NrKHN0cnVjdCBvY2ZzMl94YXR0cl9yZWZsaW5rICphcmdzLFxuZnMvb2NmczIveGF0dHIuYy02NjM1LVx0XHRcdFx0ICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJsa19iaCxcbi0tXG5mcy9vY2ZzMi94YXR0ci5jLTY2NTUtXG5mcy9vY2ZzMi94YXR0ci5jOjY2NTY6XHRyZXQgPSBvY2ZzMl9yZWZsaW5rX2xvY2tfeGF0dHJfYWxsb2NhdG9ycyhvc2IsIHhoLCBhcmdzLVx1MDAzZXJlZl9yb290X2JoLFxuZnMvb2NmczIveGF0dHIuYy02NjU3LVx0XHRcdFx0XHRcdCAgXHUwMDI2Y3JlZGl0cywgXHUwMDI2bWV0YV9hYyk7XG4tLVxuZnMvb2NmczIveGF0dHIuYy02NjkxLVxuZnMvb2NmczIveGF0dHIuYzo2NjkyOlx0cmV0ID0gb2NmczJfcmVmbGlua194YXR0cl9oZWFkZXIoaGFuZGxlLCBhcmdzLCBibGtfYmgsIHhoLFxuZnMvb2NmczIveGF0dHIuYy02NjkzLVx0XHRcdFx0XHQgbmV3X2Jsa19iaCwgbmV3X3hoLCBcdTAwMjZ2YiwgbWV0YV9hYyxcbi0tXG5mcy9vY2ZzMi94YXR0ci5jLTY3MTktXG5mcy9vY2ZzMi94YXR0ci5jOjY3MjA6c3RydWN0IG9jZnMyX3JlZmxpbmtfeGF0dHJfdHJlZV9hcmdzIHtcbmZzL29jZnMyL3hhdHRyLmMtNjcyMS1cdHN0cnVjdCBvY2ZzMl94YXR0cl9yZWZsaW5rICpyZWZsaW5rO1xuLS1cbmZzL29jZnMyL3hhdHRyLmM9NjczND1zdGF0aWMgaW50IG9jZnMyX2dldF9yZWZsaW5rX3hhdHRyX3ZhbHVlX3Jvb3Qoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5mcy9vY2ZzMi94YXR0ci5jLTY3NDEte1xuZnMvb2NmczIveGF0dHIuYzo2NzQyOlx0c3RydWN0IG9jZnMyX3JlZmxpbmtfeGF0dHJfdHJlZV9hcmdzICphcmdzID1cbmZzL29jZnMyL3hhdHRyLmM6Njc0MzpcdFx0XHQoc3RydWN0IG9jZnMyX3JlZmxpbmtfeGF0dHJfdHJlZV9hcmdzICopcGFyYTtcbmZzL29jZnMyL3hhdHRyLmMtNjc0NC1cdHN0cnVjdCBvY2ZzMl94YXR0cl9idWNrZXQgKmJ1Y2tldDtcbi0tXG5mcy9vY2ZzMi94YXR0ci5jPTY3OTk9c3RhdGljIGludCBvY2ZzMl9sb2NrX3JlZmxpbmtfeGF0dHJfcmVjX2FsbG9jYXRvcnMoXG5mcy9vY2ZzMi94YXR0ci5jOjY4MDA6XHRcdFx0XHRzdHJ1Y3Qgb2NmczJfcmVmbGlua194YXR0cl90cmVlX2FyZ3MgKmFyZ3MsXG5mcy9vY2ZzMi94YXR0ci5jLTY4MDEtXHRcdFx0XHRzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKnh0X2V0LFxuLS1cbmZzL29jZnMyL3hhdHRyLmMtNjg4NC1cbmZzL29jZnMyL3hhdHRyLmM6Njg4NTpzdGF0aWMgaW50IG9jZnMyX3JlZmxpbmtfeGF0dHJfYnVja2V0KGhhbmRsZV90ICpoYW5kbGUsXG5mcy9vY2ZzMi94YXR0ci5jLTY4ODYtXHRcdFx0XHR1NjQgYmxrbm8sIHU2NCBuZXdfYmxrbm8sIHUzMiBjbHVzdGVycyxcbi0tXG5mcy9vY2ZzMi94YXR0ci5jLTY4ODktXHRcdFx0XHRzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqZGF0YV9hYyxcbmZzL29jZnMyL3hhdHRyLmM6Njg5MDpcdFx0XHRcdHN0cnVjdCBvY2ZzMl9yZWZsaW5rX3hhdHRyX3RyZWVfYXJncyAqYXJncylcbmZzL29jZnMyL3hhdHRyLmMtNjg5MS17XG4tLVxuZnMvb2NmczIveGF0dHIuYy02OTM4LVxuZnMvb2NmczIveGF0dHIuYzo2OTM5Olx0XHRyZXQgPSBvY2ZzMl9yZWZsaW5rX3hhdHRyX2hlYWRlcihoYW5kbGUsIGFyZ3MtXHUwMDNlcmVmbGluayxcbmZzL29jZnMyL3hhdHRyLmMtNjk0MC1cdFx0XHRcdFx0YXJncy1cdTAwM2VvbGRfYnVja2V0LVx1MDAzZWJ1X2Joc1swXSxcbi0tXG5mcy9vY2ZzMi94YXR0ci5jLTY5NzUtXG5mcy9vY2ZzMi94YXR0ci5jOjY5NzY6c3RhdGljIGludCBvY2ZzMl9yZWZsaW5rX3hhdHRyX2J1Y2tldHMoaGFuZGxlX3QgKmhhbmRsZSxcbmZzL29jZnMyL3hhdHRyLmMtNjk3Ny1cdFx0XHRcdHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5mcy9vY2ZzMi94YXR0ci5jOjY5Nzg6XHRcdFx0XHRzdHJ1Y3Qgb2NmczJfcmVmbGlua194YXR0cl90cmVlX2FyZ3MgKmFyZ3MsXG5mcy9vY2ZzMi94YXR0ci5jLTY5NzktXHRcdFx0XHRzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LFxuLS1cbmZzL29jZnMyL3hhdHRyLmMtNzAwOS1cbmZzL29jZnMyL3hhdHRyLmM6NzAxMDpcdFx0cmV0ID0gb2NmczJfcmVmbGlua194YXR0cl9idWNrZXQoaGFuZGxlLCBibGtubyxcbmZzL29jZnMyL3hhdHRyLmMtNzAxMS1cdFx0XHRcdFx0XHQgbmV3X2Jsa25vLCBudW1fY2x1c3RlcnMsXG4tLVxuZnMvb2NmczIveGF0dHIuYy03MDMyLVxuZnMvb2NmczIveGF0dHIuYzo3MDMzOlx0XHR0cmFjZV9vY2ZzMl9yZWZsaW5rX3hhdHRyX2J1Y2tldHMoKHVuc2lnbmVkIGxvbmcgbG9uZyluZXdfYmxrbm8sXG5mcy9vY2ZzMi94YXR0ci5jLTcwMzQtXHRcdFx0XHRcdFx0ICBudW1fY2x1c3RlcnMsIHJlZmxpbmtfY3Bvcyk7XG4tLVxuZnMvb2NmczIveGF0dHIuYy03MDQ2LSAqL1xuZnMvb2NmczIveGF0dHIuYzo3MDQ3OnN0YXRpYyBpbnQgb2NmczJfcmVmbGlua194YXR0cl9yZWMoc3RydWN0IGlub2RlICppbm9kZSxcbmZzL29jZnMyL3hhdHRyLmMtNzA0OC1cdFx0XHRcdCAgIHN0cnVjdCBidWZmZXJfaGVhZCAqcm9vdF9iaCxcbi0tXG5mcy9vY2ZzMi94YXR0ci5jLTcwNTUtXHRoYW5kbGVfdCAqaGFuZGxlO1xuZnMvb2NmczIveGF0dHIuYzo3MDU2Olx0c3RydWN0IG9jZnMyX3JlZmxpbmtfeGF0dHJfdHJlZV9hcmdzICphcmdzID1cbmZzL29jZnMyL3hhdHRyLmM6NzA1NzpcdFx0XHQoc3RydWN0IG9jZnMyX3JlZmxpbmtfeGF0dHJfdHJlZV9hcmdzICopcGFyYTtcbmZzL29jZnMyL3hhdHRyLmMtNzA1OC1cdHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoaW5vZGUtXHUwMDNlaV9zYik7XG4tLVxuZnMvb2NmczIveGF0dHIuYy03MDYyLVxuZnMvb2NmczIveGF0dHIuYzo3MDYzOlx0dHJhY2Vfb2NmczJfcmVmbGlua194YXR0cl9yZWMoKHVuc2lnbmVkIGxvbmcgbG9uZylibGtubywgbGVuKTtcbmZzL29jZnMyL3hhdHRyLmMtNzA2NC1cbi0tXG5mcy9vY2ZzMi94YXR0ci5jLTcwODMtXG5mcy9vY2ZzMi94YXR0ci5jOjcwODQ6XHRyZXQgPSBvY2ZzMl9yZWZsaW5rX3hhdHRyX2J1Y2tldHMoaGFuZGxlLCBpbm9kZSwgYXJncywgXHUwMDI2ZXQsXG5mcy9vY2ZzMi94YXR0ci5jLTcwODUtXHRcdFx0XHRcdCAgbWV0YV9hYywgZGF0YV9hYyxcbi0tXG5mcy9vY2ZzMi94YXR0ci5jLTcxMDQtICovXG5mcy9vY2ZzMi94YXR0ci5jOjcxMDU6c3RhdGljIGludCBvY2ZzMl9yZWZsaW5rX3hhdHRyX3RyZWUoc3RydWN0IG9jZnMyX3hhdHRyX3JlZmxpbmsgKmFyZ3MsXG5mcy9vY2ZzMi94YXR0ci5jLTcxMDYtXHRcdFx0XHQgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpibGtfYmgsXG4tLVxuZnMvb2NmczIveGF0dHIuYy03MTA5LVx0aW50IHJldDtcbmZzL29jZnMyL3hhdHRyLmM6NzExMDpcdHN0cnVjdCBvY2ZzMl9yZWZsaW5rX3hhdHRyX3RyZWVfYXJncyBwYXJhO1xuZnMvb2NmczIveGF0dHIuYy03MTExLVxuLS1cbmZzL29jZnMyL3hhdHRyLmMtNzEzMC1cdHJldCA9IG9jZnMyX2l0ZXJhdGVfeGF0dHJfaW5kZXhfYmxvY2soYXJncy1cdTAwM2VvbGRfaW5vZGUsIGJsa19iaCxcbmZzL29jZnMyL3hhdHRyLmM6NzEzMTpcdFx0XHRcdFx0ICAgICAgb2NmczJfcmVmbGlua194YXR0cl9yZWMsXG5mcy9vY2ZzMi94YXR0ci5jLTcxMzItXHRcdFx0XHRcdCAgICAgIFx1MDAyNnBhcmEpO1xuLS1cbmZzL29jZnMyL3hhdHRyLmMtNzE0MS1cbmZzL29jZnMyL3hhdHRyLmM6NzE0MjpzdGF0aWMgaW50IG9jZnMyX3JlZmxpbmtfeGF0dHJfaW5fYmxvY2soc3RydWN0IG9jZnMyX3hhdHRyX3JlZmxpbmsgKmFyZ3MsXG5mcy9vY2ZzMi94YXR0ci5jLTcxNDMtXHRcdFx0XHRcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmxrX2JoKVxuLS1cbmZzL29jZnMyL3hhdHRyLmMtNzE2MS1cdGlmICghaW5kZXhlZClcbmZzL29jZnMyL3hhdHRyLmM6NzE2MjpcdFx0cmV0ID0gb2NmczJfcmVmbGlua194YXR0cl9ibG9jayhhcmdzLCBibGtfYmgsIG5ld19ibGtfYmgpO1xuZnMvb2NmczIveGF0dHIuYy03MTYzLVx0ZWxzZVxuZnMvb2NmczIveGF0dHIuYzo3MTY0Olx0XHRyZXQgPSBvY2ZzMl9yZWZsaW5rX3hhdHRyX3RyZWUoYXJncywgYmxrX2JoLCBuZXdfYmxrX2JoKTtcbmZzL29jZnMyL3hhdHRyLmMtNzE2NS1cdGlmIChyZXQpXG4tLVxuZnMvb2NmczIveGF0dHIuYy03MTcyLVxuZnMvb2NmczIveGF0dHIuYzo3MTczOnN0YXRpYyBpbnQgb2NmczJfcmVmbGlua194YXR0cl9ub19zZWN1cml0eShzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkgKnhlKVxuZnMvb2NmczIveGF0dHIuYy03MTc0LXtcbi0tXG5mcy9vY2ZzMi94YXR0ci5jLTcxODEtXG5mcy9vY2ZzMi94YXR0ci5jOjcxODI6aW50IG9jZnMyX3JlZmxpbmtfeGF0dHJzKHN0cnVjdCBpbm9kZSAqb2xkX2lub2RlLFxuZnMvb2NmczIveGF0dHIuYy03MTgzLVx0XHRcdCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKm9sZF9iaCxcbi0tXG5mcy9vY2ZzMi94YXR0ci5jLTcyMTYtXHRlbHNlXG5mcy9vY2ZzMi94YXR0ci5jOjcyMTc6XHRcdGFyZ3MueGF0dHJfcmVmbGlua2VkID0gb2NmczJfcmVmbGlua194YXR0cl9ub19zZWN1cml0eTtcbmZzL29jZnMyL3hhdHRyLmMtNzIxOC1cbmZzL29jZnMyL3hhdHRyLmMtNzIxOS1cdGlmIChvaS1cdTAwM2VpcF9keW5fZmVhdHVyZXMgXHUwMDI2IE9DRlMyX0lOTElORV9YQVRUUl9GTCkge1xuZnMvb2NmczIveGF0dHIuYzo3MjIwOlx0XHRyZXQgPSBvY2ZzMl9yZWZsaW5rX3hhdHRyX2lubGluZShcdTAwMjZhcmdzKTtcbmZzL29jZnMyL3hhdHRyLmMtNzIyMS1cdFx0aWYgKHJldCkge1xuLS1cbmZzL29jZnMyL3hhdHRyLmMtNzIzNi1cbmZzL29jZnMyL3hhdHRyLmM6NzIzNzpcdHJldCA9IG9jZnMyX3JlZmxpbmtfeGF0dHJfaW5fYmxvY2soXHUwMDI2YXJncywgYmxrX2JoKTtcbmZzL29jZnMyL3hhdHRyLmMtNzIzOC1cdGlmIChyZXQpXG4tLVxuZnMvb2NmczIveGF0dHIuaD03OD1pbnQgb2NmczJfeGF0dHJfYXR0YWNoX3JlZmNvdW50X3RyZWUoc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9vY2ZzMi94YXR0ci5oLTgyLVx0XHRcdFx0ICAgICBzdHJ1Y3Qgb2NmczJfY2FjaGVkX2RlYWxsb2NfY3R4dCAqZGVhbGxvYyk7XG5mcy9vY2ZzMi94YXR0ci5oOjgzOmludCBvY2ZzMl9yZWZsaW5rX3hhdHRycyhzdHJ1Y3QgaW5vZGUgKm9sZF9pbm9kZSxcbmZzL29jZnMyL3hhdHRyLmgtODQtXHRcdFx0IHN0cnVjdCBidWZmZXJfaGVhZCAqb2xkX2JoLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwODowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTEwOAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDMwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgT0NGUzIgRnVuY3Rpb24gQ2FsbHMgYW5kIFNjb3BlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgY2FsbCBmbG93IGhlcmUuIEl0IGFwcGVhcnMgYG9jZnMyX3JlZmxpbmtgIGlzIHVsdGltYXRlbHkgdHJpZ2dlcmVkIHRocm91Z2ggdGhlIGlvY3RsIHN5c3RlbSBjYWxscywgc3BlY2lmaWNhbGx5IGBvY2ZzMl9yZWZsaW5rX2lvY3RsYCwgd2hpY2ggaXRzZWxmIGlzIGludm9rZWQgYnkgYG9jZnMyX2lvY3RsYCBhbmQgYG9jZnMyX2NvbXBhdF9pb2N0bGAuIE15IG1haW4gZm9jdXMgaXMgb24gYSBmZXcga2V5IGZ1bmN0aW9ucyBpbiB0aGlzIGNvbnRleHQ6IGBvY2ZzMl9ta25vZGAsIGBvY2ZzMl9ta2RpcmAsIGBvY2ZzMl9jcmVhdGVgLCBgb2NmczJfc3ltbGlua2AsIG5hdHVyYWxseSBgb2NmczJfcmVmbGlua2AsIGFuZCB0aGVuIGFsc28gdGhlIEFDTC9zZWN1cml0eSBpbml0aWFsaXphdGlvbiByb3V0aW5lczogYG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbGAsIGBvY2ZzMl9pbml0X2FjbGAsIGBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlYCwgYW5kIGZpbmFsbHkgYG9jZnMyX2NhbGNfeGF0dHJfaW5pdGAuCgpXYWl0IGEgbWludXRlLCBJIG5lZWQgdG8gY2hlY2sgdGhlIHNjb3BlIG9uIHRob3NlIGZpcnN0IGZvdXIgSSBsaXN0ZWQuIEFyZSBgb2NmczJfbWtub2RgLCBgb2NmczJfbWtkaXJgLCBgb2NmczJfY3JlYXRlYCwgYW5kIGBvY2ZzMl9zeW1saW5rYCBhY3R1YWxseSBzdGF0aWM/IEhtbSwgeWVhaCwgdGhleSBhcmUuIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93LiBTbywgdGhhdCBsZWF2ZXMgbWUgd2l0aCB0aGUgaW5pdGlhbGl6YXRpb24gcm91dGluZXMgYW5kIGBvY2ZzMl94YXR0cl9zZXRfaGFuZGxlYCwgYW5kIHRoZSByZWZsaW5rIGZ1bmN0aW9uIGFzIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzLiBUaGF0JiMzOTtzIGhlbHBmdWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBrZXJuZWwgaW50ZXJhY3RzIHdpdGggdGhlc2UgcGFydHMgb2YgdGhlIGZpbGVzeXN0ZW0uIEkgc2hvdWxkIHRha2UgYSBsb29rIGF0IGBvY2ZzMl94YXR0cl9zZXRfaGFuZGxlYCBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDA4OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O29jZnMyX3hhdHRyX3NldF9oYW5kbGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9vY2ZzMi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvb2NmczIvYWNsLmM9MjE0PXN0YXRpYyBpbnQgb2NmczJfc2V0X2FjbChoYW5kbGVfdCAqaGFuZGxlLFxuLS1cbmZzL29jZnMyL2FjbC5jLTI0OS1cdGlmIChoYW5kbGUpXG5mcy9vY2ZzMi9hY2wuYzoyNTA6XHRcdHJldCA9IG9jZnMyX3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlLCBpbm9kZSwgZGlfYmgsIG5hbWVfaW5kZXgsXG5mcy9vY2ZzMi9hY2wuYy0yNTEtXHRcdFx0XHRcdCAgICAgXCYjMzQ7XCYjMzQ7LCB2YWx1ZSwgc2l6ZSwgMCxcbi0tXG5mcy9vY2ZzMi94YXR0ci5jPTMzMDU9c3RhdGljIGludCBvY2ZzMl9pbml0X3hhdHRyX3NldF9jdHh0KHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvb2NmczIveGF0dHIuYy0zMzYwLVxuZnMvb2NmczIveGF0dHIuYzozMzYxOnN0YXRpYyBpbnQgX19vY2ZzMl94YXR0cl9zZXRfaGFuZGxlKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5mcy9vY2ZzMi94YXR0ci5jLTMzNjItXHRcdFx0XHQgICAgc3RydWN0IG9jZnMyX2Rpbm9kZSAqZGksXG4tLVxuZnMvb2NmczIveGF0dHIuYy0zNTAyLSAqL1xuZnMvb2NmczIveGF0dHIuYzozNTAzOmludCBvY2ZzMl94YXR0cl9zZXRfaGFuZGxlKGhhbmRsZV90ICpoYW5kbGUsXG5mcy9vY2ZzMi94YXR0ci5jLTM1MDQtXHRcdFx0ICAgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9vY2ZzMi94YXR0ci5jLTM1NjYtXG5mcy9vY2ZzMi94YXR0ci5jOjM1Njc6XHRyZXQgPSBfX29jZnMyX3hhdHRyX3NldF9oYW5kbGUoaW5vZGUsIGRpLCBcdTAwMjZ4aSwgXHUwMDI2eGlzLCBcdTAwMjZ4YnMsIFx1MDAyNmN0eHQpO1xuZnMvb2NmczIveGF0dHIuYy0zNTY4LVxuLS1cbmZzL29jZnMyL3hhdHRyLmM9MzU4Mz1pbnQgb2NmczJfeGF0dHJfc2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvb2NmczIveGF0dHIuYy0zNzAzLVxuZnMvb2NmczIveGF0dHIuYzozNzA0Olx0cmV0ID0gX19vY2ZzMl94YXR0cl9zZXRfaGFuZGxlKGlub2RlLCBkaSwgXHUwMDI2eGksIFx1MDAyNnhpcywgXHUwMDI2eGJzLCBcdTAwMjZjdHh0KTtcbmZzL29jZnMyL3hhdHRyLmMtMzcwNS1cdG9jZnMyX3VwZGF0ZV9pbm9kZV9mc3luY190cmFucyhjdHh0LmhhbmRsZSwgaW5vZGUsIDApO1xuLS1cbmZzL29jZnMyL3hhdHRyLmM9NzM3Nj1pbnQgb2NmczJfaW5pdF9zZWN1cml0eV9zZXQoaGFuZGxlX3QgKmhhbmRsZSxcbi0tXG5mcy9vY2ZzMi94YXR0ci5jLTczODIte1xuZnMvb2NmczIveGF0dHIuYzo3MzgzOlx0cmV0dXJuIG9jZnMyX3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlLCBpbm9kZSwgZGlfYmgsXG5mcy9vY2ZzMi94YXR0ci5jLTczODQtXHRcdFx0XHQgICAgIE9DRlMyX1hBVFRSX0lOREVYX1NFQ1VSSVRZLFxuLS1cbmZzL29jZnMyL3hhdHRyLmg9Mzg9aW50IG9jZnMyX3hhdHRyX3NldChzdHJ1Y3QgaW5vZGUgKiwgaW50LCBjb25zdCBjaGFyICosIGNvbnN0IHZvaWQgKixcbmZzL29jZnMyL3hhdHRyLmgtMzktXHRcdCAgICBzaXplX3QsIGludCk7XG5mcy9vY2ZzMi94YXR0ci5oOjQwOmludCBvY2ZzMl94YXR0cl9zZXRfaGFuZGxlKGhhbmRsZV90ICosIHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKixcbmZzL29jZnMyL3hhdHRyLmgtNDEtXHRcdFx0ICAgaW50LCBjb25zdCBjaGFyICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBpbnQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDA4OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNTg3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlRyYWNpbmcgdGhlIEFDTCBhbmQgU2VjdXJpdHkgQXR0cmlidXRlIEluaXRpYWxpemF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIGhvdyB0aGlzIGFsbCBmaXRzIHRvZ2V0aGVyLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBBQ0wgYW5kIHNlY3VyaXR5IGF0dHJpYnV0ZSBpbml0aWFsaXphdGlvbiBwYXRod2F5cyB3aXRoaW4gdGhpcyBPQ0ZTMiBmaWxlc3lzdGVtLiBNeSB0aGlua2luZyBpcyB0aGF0IHRoZSBiZXN0IGFwcHJvYWNoIGhlcmUgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbGluZyByZWxhdGlvbnNoaXBzLgoKSXQgbG9va3MgbGlrZSBgb2NmczJfeGF0dHJfc2V0X2hhbmRsZWAgaXMgdGhlIHdvcmtob3JzZSBoZXJlLCBhbmQgaXQmIzM5O3MgY2FsbGVkIGZyb20gdHdvIGtleSBsb2NhdGlvbnM6IGBvY2ZzMl9zZXRfYWNsYCBhbmQgYG9jZnMyX2luaXRfc2VjdXJpdHlfc2V0YC4gQWxyaWdodCwgYG9jZnMyX3NldF9hY2xgIGl0c2VsZiBpcyBjYWxsZWQgYnkgYG9jZnMyX2luaXRfYWNsYCBhbmQgYG9jZnMyX2lvcF9zZXRfYWNsYC4gQW5kLCBzaW5jZSBgb2NmczJfaW9wX3NldF9hY2xgIGlzIHRoZSBgLnNldF9hY2xgIGlub2RlIG9wZXJhdGlvbiwgdGhhdCBjb25maXJtcyBpdHMgaW1wb3J0YW5jZS4KClRoZXJlZm9yZSwgbXkgbWFpbiBpbnRlcmVzdCBpcyBpbiB0aGVzZSBlbnRyeSBwb2ludHM6CgoqICAgYG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbGAgKGFzIGEgcG90ZW50aWFsIGluaXRpYWxpemF0aW9uIGVudHJ5IHBvaW50KQoqICAgYG9jZnMyX2luaXRfYWNsYCAoYW5vdGhlciBpbml0aWFsaXphdGlvbiBlbnRyeSBwb2ludCkKKiAgIGBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlYCAoYSBmdW5jdGlvbiB3aGljaCBhcHBlYXJzIHRvIGJlIGludm9sdmVkIGluIHRoZSBwcmVwYXJhdGlvbikKKiAgIGBvY2ZzMl9jYWxjX3hhdHRyX2luaXRgIChwZXJoYXBzIHVzZWQgZm9yIGluaXRpYWwgY2FsY3VsYXRpb25zIHJlbGF0ZWQgdG8gZXh0ZW5kZWQgYXR0cmlidXRlcykKKiAgIGBvY2ZzMl94YXR0cl9zZXRfaGFuZGxlYCAodGhlIGNvcmUgZnVuY3Rpb24gZm9yIHNldHRpbmcgdGhlIGF0dHJpYnV0ZXMpCiogICBgb2NmczJfaW9wX3NldF9hY2xgICh0aGUgYWN0dWFsIGlub2RlIG9wZXJhdGlvbiBjYWxsZWQgYnkgdXNlcnNwYWNlKQoKQnV0IEkgaGF2ZSB0byBiZSB0aG9yb3VnaC4uLiBJcyB0aGVyZSBhbnkgb3RoZXIgZW50cnkgcG9pbnQ/CgpIbW0sIEkgc2VlIGBvY2ZzMl9yZWZsaW5rX2lvY3RsYCBpcyBub24tc3RhdGljLCB3aGljaCBtZWFucyBpdCYjMzk7cyBleHBvcnRlZCBhbmQgY291bGQgYmUgaW52b2x2ZWQgaW4gc29tZSByZWxhdGVkIG9wZXJhdGlvbnMuIEFuZCwgb2YgY291cnNlLCB0aGUgZ2VuZXJhbCBgb2NmczJfaW9jdGxgIGFuZCBgb2NmczJfY29tcGF0X2lvY3RsYCBmdW5jdGlvbnMgYXJlIG5vbi1zdGF0aWMgYW5kIHdvcnRoIGEgbG9vaywgdG9vLgoKSSBzaG91bGQgcHJvYmFibHkgZm9jdXMgb24gYG9jZnMyX2lvcF9zZXRfYWNsYCBuZXh0IHRvIHN0YXJ0IG15IGludmVzdGlnYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDA4OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O29jZnMyX2lvcF9zZXRfYWNsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvb2NmczIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL29jZnMyL2FjbC5jPTIxND1zdGF0aWMgaW50IG9jZnMyX3NldF9hY2woaGFuZGxlX3QgKmhhbmRsZSxcbi0tXG5mcy9vY2ZzMi9hY2wuYy0yNjItXG5mcy9vY2ZzMi9hY2wuYzoyNjM6aW50IG9jZnMyX2lvcF9zZXRfYWNsKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG5mcy9vY2ZzMi9hY2wuYy0yNjQtXHRcdCAgICAgIHN0cnVjdCBwb3NpeF9hY2wgKmFjbCwgaW50IHR5cGUpXG4tLVxuZnMvb2NmczIvYWNsLmg9MTk9c3RydWN0IHBvc2l4X2FjbCAqb2NmczJfaW9wX2dldF9hY2woc3RydWN0IGlub2RlICppbm9kZSwgaW50IHR5cGUsIGJvb2wgcmN1KTtcbmZzL29jZnMyL2FjbC5oOjIwOmludCBvY2ZzMl9pb3Bfc2V0X2FjbChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuZnMvb2NmczIvYWNsLmgtMjEtXHRcdCAgICAgIHN0cnVjdCBwb3NpeF9hY2wgKmFjbCwgaW50IHR5cGUpO1xuLS1cbmZzL29jZnMyL2ZpbGUuYz0yNzg4PWNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG9jZnMyX2ZpbGVfaW9wcyA9IHtcbi0tXG5mcy9vY2ZzMi9maWxlLmMtMjc5NC1cdC5nZXRfaW5vZGVfYWNsXHQ9IG9jZnMyX2lvcF9nZXRfYWNsLFxuZnMvb2NmczIvZmlsZS5jOjI3OTU6XHQuc2V0X2FjbFx0PSBvY2ZzMl9pb3Bfc2V0X2FjbCxcbmZzL29jZnMyL2ZpbGUuYy0yNzk2LVx0LmZpbGVhdHRyX2dldFx0PSBvY2ZzMl9maWxlYXR0cl9nZXQsXG4tLVxuZnMvb2NmczIvZmlsZS5jPTI4MDA9Y29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgb2NmczJfc3BlY2lhbF9maWxlX2lvcHMgPSB7XG4tLVxuZnMvb2NmczIvZmlsZS5jLTI4MDUtXHQuZ2V0X2lub2RlX2FjbFx0PSBvY2ZzMl9pb3BfZ2V0X2FjbCxcbmZzL29jZnMyL2ZpbGUuYzoyODA2Olx0LnNldF9hY2xcdD0gb2NmczJfaW9wX3NldF9hY2wsXG5mcy9vY2ZzMi9maWxlLmMtMjgwNy19O1xuLS1cbmZzL29jZnMyL25hbWVpLmM9MjkzMz1jb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBvY2ZzMl9kaXJfaW9wcyA9IHtcbi0tXG5mcy9vY2ZzMi9uYW1laS5jLTI5NDgtXHQuZ2V0X2lub2RlX2FjbFx0PSBvY2ZzMl9pb3BfZ2V0X2FjbCxcbmZzL29jZnMyL25hbWVpLmM6Mjk0OTpcdC5zZXRfYWNsXHQ9IG9jZnMyX2lvcF9zZXRfYWNsLFxuZnMvb2NmczIvbmFtZWkuYy0yOTUwLVx0LmZpbGVhdHRyX2dldFx0PSBvY2ZzMl9maWxlYXR0cl9nZXQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDA4OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzOTUxCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgT0NGUzIgQUNMIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBvY2ZzMl9pb3Bfc2V0X2FjbGAgZnVuY3Rpb24g4oCTIHRoYXQmIzM5O3MgdGhlIGAuc2V0X2FjbGAgb3BlcmF0aW9uLCBnb3QgaXQuIEJ1dCB0aGUgcGF0Y2ggaXMgc3BlY2lmaWNhbGx5IHRvdWNoaW5nIGBvY2ZzMl9pbml0X2FjbGAgYW5kIGBvY2ZzMl9jYWxjX3hhdHRyX2luaXRgLiBUaG9zZSBhcmUgZ2V0dGluZyBjYWxsZWQgZHVyaW5nIGlub2RlIGNyZWF0aW9uLCB0aGluZ3MgbGlrZSBgbWtub2RgLCBgbWtkaXJgLCBgY3JlYXRlYCwgYHN5bWxpbmtgLCBhbmQgYHJlZmxpbmtgLiBTbywgdGhlIHJlYWxseSBrZXkgc3ltYm9scyB0byBmb2N1cyBvbiBhcmU6IGBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xgLCBgb2NmczJfaW5pdF9hY2xgLCBgb2NmczJfYWNsX2luaXRfcHJlcGFyZWAsIGBvY2ZzMl9jYWxjX3hhdHRyX2luaXRgLCBgb2NmczJfeGF0dHJfc2V0X2hhbmRsZWAsIGFuZCBgb2NmczJfcmVmbGlua19pb2N0bGAuCgpMZXQmIzM5O3MgbWFrZSBzdXJlIHRoZXNlIHRoaW5ncyBhcmUgYWN0dWFsbHkgcmVhY2hhYmxlLiAgYG9jZnMyX21rbm9kYCwgeWVwLCB0aGF0IGdvZXMgdGhyb3VnaCBgdmZzX21rbm9kYC4gYG9jZnMyX21rZGlyYCBpcyBoYW5kbGVkIHRocm91Z2ggYHZmc19ta2RpcmAuIEFuZCBgb2NmczJfY3JlYXRlYCB1c2VzIGB2ZnNfY3JlYXRlYCwgYG9jZnMyX3N5bWxpbmtgIGdvZXMgdGhyb3VnaCBgdmZzX3N5bWxpbmtgLCBhbmQgIGBvY2ZzMl9yZWZsaW5rYCBpcyBhY2Nlc3NlZCB2aWEgYGlvY3RsYC4gR29vZCwgdGhpcyBwYXRjaCBpcyBkZWZpbml0ZWx5IGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZS4KCkFscmlnaHQsIHRoZSBwYXRjaCBpcyByZW1vdmluZyBgZG93bl93cml0ZSgmYW1wO09DRlMyX0koaW5vZGUpLSZndDtpcF94YXR0cl9zZW0pYCBmcm9tIGBvY2ZzMl94YXR0cl9zZXRfaGFuZGxlYC4gQXBwYXJlbnRseSwgdGhhdCB3YXMgY2F1c2luZyBzb21lIGtpbmQgb2YgZGVhZGxvY2ssIGFuZCBpdCYjMzk7cyBvbmx5IGNhbGxlZCBkdXJpbmcgaW5vZGUgY3JlYXRpb24gd2hlbiB0aGUgaW5vZGUgaXNuJiMzOTt0IHlldCBwdWJsaXNoZWQuIEJ1dCwgd2FpdCBhIG1pbnV0ZSwgYG9jZnMyX3hhdHRyX3NldF9oYW5kbGVgIGlzIGFsc28gdXNlZCBieSBgb2NmczJfc2V0X2FjbGAgYW5kIGBvY2ZzMl9pbml0X3NlY3VyaXR5X3NldGAuICBIYW5nIG9uLCBpcyBgb2NmczJfc2V0X2FjbGAgKm9ubHkqIGNhbGxlZCBkdXJpbmcgaW5vZGUgY3JlYXRpb24/IEkgbmVlZCB0byBkb3VibGUtY2hlY2sgYG9jZnMyX3NldF9hY2xgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwODowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvY2ZzMl9zZXRfYWNsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvb2NmczIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL29jZnMyL2FjbC5jPTE1OD1zdGF0aWMgaW50IG9jZnMyX2FjbF9zZXRfbW9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoLFxuLS1cbmZzL29jZnMyL2FjbC5jLTIxMy0gKi9cbmZzL29jZnMyL2FjbC5jOjIxNDpzdGF0aWMgaW50IG9jZnMyX3NldF9hY2woaGFuZGxlX3QgKmhhbmRsZSxcbmZzL29jZnMyL2FjbC5jLTIxNS1cdFx0XHQgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9vY2ZzMi9hY2wuYz0yNjM9aW50IG9jZnMyX2lvcF9zZXRfYWNsKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tLVxuZnMvb2NmczIvYWNsLmMtMjg1LVx0fVxuZnMvb2NmczIvYWNsLmM6Mjg2Olx0c3RhdHVzID0gb2NmczJfc2V0X2FjbChOVUxMLCBpbm9kZSwgYmgsIHR5cGUsIGFjbCwgTlVMTCwgTlVMTCk7XG5mcy9vY2ZzMi9hY2wuYy0yODctdW5sb2NrOlxuLS1cbmZzL29jZnMyL2FjbC5jPTMyMT1pbnQgb2NmczJfYWNsX2NobW9kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpXG4tLVxuZnMvb2NmczIvYWNsLmMtMzQwLVx0XHRyZXR1cm4gcmV0O1xuZnMvb2NmczIvYWNsLmM6MzQxOlx0cmV0ID0gb2NmczJfc2V0X2FjbChOVUxMLCBpbm9kZSwgTlVMTCwgQUNMX1RZUEVfQUNDRVNTLFxuZnMvb2NmczIvYWNsLmMtMzQyLVx0XHRcdCAgICBhY2wsIE5VTEwsIE5VTEwpO1xuLS1cbmZzL29jZnMyL2FjbC5jPTQxND1pbnQgb2NmczJfaW5pdF9hY2woaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9vY2ZzMi9hY2wuYy00MjctXHRcdGlmIChTX0lTRElSKGlub2RlLVx1MDAzZWlfbW9kZSkgXHUwMDI2XHUwMDI2IHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsKSB7XG5mcy9vY2ZzMi9hY2wuYzo0Mjg6XHRcdFx0cmV0ID0gb2NmczJfc2V0X2FjbChoYW5kbGUsIGlub2RlLCBkaV9iaCxcbmZzL29jZnMyL2FjbC5jLTQyOS1cdFx0XHRcdFx0ICAgIEFDTF9UWVBFX0RFRkFVTFQsXG4tLVxuZnMvb2NmczIvYWNsLmMtNDQ0LVx0XHRpZiAoc3RhdGUtXHUwMDNlYWNsKSB7XG5mcy9vY2ZzMi9hY2wuYzo0NDU6XHRcdFx0cmV0ID0gb2NmczJfc2V0X2FjbChoYW5kbGUsIGlub2RlLCBkaV9iaCxcbmZzL29jZnMyL2FjbC5jLTQ0Ni1cdFx0XHRcdFx0ICAgIEFDTF9UWVBFX0FDQ0VTUywgc3RhdGUtXHUwMDNlYWNsLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwODowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTM4OQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgT0NGUzIgQUNMIFNldHRpbmcgTWVjaGFuaXNtKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgYG9jZnMyX3NldF9hY2xgIGZ1bmN0aW9uIGFuZCBpbW1lZGlhdGVseSBhIGtleSBwb2ludCBqdW1wcyBvdXQgYXQgbWUuIEkmIzM5O20gc2VlaW5nIHRoYXQgaXQmIzM5O3MgY2FsbGVkIGJ5IGJvdGggYG9jZnMyX2lvcF9zZXRfYWNsYCBhbmQgYG9jZnMyX2FjbF9jaG1vZGAuIFRoZSBpbnRlcmVzdGluZyB0aGluZyBpcyB0aGF0IHNvbWV0aW1lcywgd2l0aCB0aGVzZSBjYWxsZXJzLCB0aGUgKmhhbmRsZSogcGFyYW1ldGVyIGlzIE5VTEwuIFRoYXQgc2VlbXMgc2lnbmlmaWNhbnQuCgpOb3csIGEgYmVsbCBpcyByaW5naW5nIGluIG15IGhlYWQuIFdoZW4gdGhlICpoYW5kbGUqIGlzIE5VTEwsIGBvY2ZzMl9zZXRfYWNsYCBkb2VzbiYjMzk7dCB1c2UgdGhlIGhhbmRsZS1iYXNlZCB4YXR0ciBzZXR0aW5nIGZ1bmN0aW9uLCBgb2NmczJfeGF0dHJfc2V0X2hhbmRsZWAsIGJ1dCByYXRoZXIgdGhlIHN0YW5kYXJkIGBvY2ZzMl94YXR0cl9zZXRgLiBUaGF0IGRpZmZlcmVuY2UgY291bGQgYmUgY3J1Y2lhbCBmb3IgcGVyZm9ybWFuY2Ugb3IgaW4gdHJpZ2dlcmluZyBzcGVjaWZpYyBjb2RlIHBhdGhzLiBTbywgdGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uLiBJdOKAmXMgdGltZSB0byBnbyBpbnRvIGBvY2ZzMl9zZXRfYWNsYCBpdHNlbGYgYW5kIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyBpbnRlcm5hbGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwODowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvY2ZzMl94YXR0cl9zZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9vY2ZzMi9hY2wuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9vY2ZzMi9hY2wuYz0yMTQ9c3RhdGljIGludCBvY2ZzMl9zZXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsXG4tLVxuZnMvb2NmczIvYWNsLmMtMjQ5LVx0aWYgKGhhbmRsZSlcbmZzL29jZnMyL2FjbC5jOjI1MDpcdFx0cmV0ID0gb2NmczJfeGF0dHJfc2V0X2hhbmRsZShoYW5kbGUsIGlub2RlLCBkaV9iaCwgbmFtZV9pbmRleCxcbmZzL29jZnMyL2FjbC5jLTI1MS1cdFx0XHRcdFx0ICAgICBcJiMzNDtcJiMzNDssIHZhbHVlLCBzaXplLCAwLFxuLS1cbmZzL29jZnMyL2FjbC5jLTI1My1cdGVsc2VcbmZzL29jZnMyL2FjbC5jOjI1NDpcdFx0cmV0ID0gb2NmczJfeGF0dHJfc2V0KGlub2RlLCBuYW1lX2luZGV4LCBcJiMzNDtcJiMzNDssIHZhbHVlLCBzaXplLCAwKTtcbmZzL29jZnMyL2FjbC5jLTI1NS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDg6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU5NDMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSB4YXR0ciBNb2RpZmljYXRpb24gaW4gT0NGUzIqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSXQgc2VlbXMgdGhlIGtleSBoZXJlIGlzIGBvY2ZzMl94YXR0cl9zZXRfaGFuZGxlYCwgYW5kIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgb25seSBjYWxsZWQgd2hlbiBhIHRyYW5zYWN0aW9uIGhhbmRsZSBpcyBwcm92aWRlZCwgd2hpY2ggaXMgZHVyaW5nIGlub2RlIGNyZWF0aW9uLiBUaGVyZWZvcmUsIHRoZSBwYXRjaCYjMzk7cyByZW1vdmFsIG9mIHRoZSB3cml0ZSBsb2NrIGBkb3duX3dyaXRlKCZhbXA7T0NGUzJfSShpbm9kZSktJmd0O2lwX3hhdHRyX3NlbSlgIGZyb20gd2l0aGluIGBvY2ZzMl94YXR0cl9zZXRfaGFuZGxlYCBpcyB0aGUgY3J1Y2lhbCBjaGFuZ2UgdG8gZm9jdXMgb24uCgpTbywgdGhlIGNyaXRpY2FsIHN5bWJvbHMgdG8gdW5kZXJzdGFuZCBhcmU6IGBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xgLCBgb2NmczJfaW5pdF9hY2xgLCBgb2NmczJfYWNsX2luaXRfcHJlcGFyZWAsIGBvY2ZzMl9jYWxjX3hhdHRyX2luaXRgLCBhbmQsIG9mIGNvdXJzZSwgYG9jZnMyX3hhdHRyX3NldF9oYW5kbGVgLgoKTm93LCByZWdhcmRpbmcgY29uZmlndXJhdGlvbiwgaXQgbG9va3MgbGlrZSBgT0NGUzJfRlNgIGlzIHJlbGV2YW50LiBMZXQmIzM5O3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgZGVwZW5kZW5jaWVzIHRoYXQgYXJlbiYjMzk7dCBzdGFuZGFyZC4gSXQgZGVwZW5kcyBvbiBgSU5FVCAmYW1wOyZhbXA7IFNZU0ZTICZhbXA7JmFtcDsgQ09ORklHRlNfRlNgLiBUaGUgaW5zdHJ1Y3Rpb25zIGFyZSBjbGVhcjogaW5jbHVkZSAqbm9uLXN0YW5kYXJkKiBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MuIFNpbmNlIGBJTkVUYCBhbmQgYFNZU0ZTYCBhcmUgY29tbW9uLCBJJiMzOTtsbCBhZGQgYENPTkZJR0ZTX0ZTYCBhbmQgYE9DRlMyX0ZTYCB0byB0aGUgbGlzdC4gSnVzdCB0byBiZSBzdXJlLCBJIHdpbGwgZG91YmxlLWNoZWNrIGBDT05GSUdGU19GU2AuIFRoaXMgbG9va3MgZ29vZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDg6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENPTkZJR0ZTX0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvY29uZmlnZnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9jb25maWdmcy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9jb25maWdmcy9LY29uZmlnOjI6Y29uZmlnIENPTkZJR0ZTX0ZTXG5mcy9jb25maWdmcy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtVc2Vyc3BhY2UtZHJpdmVuIGNvbmZpZ3VyYXRpb24gZmlsZXN5c3RlbVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwODowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjcxOQoJCQkJCQkJb3V0cHV0OiAxODYKCQkJCQkJCXRob3VnaHRzOiA0NTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqT0NGUzIgQUNMIEluaXRpYWxpemF0aW9uIFJlZmFjdG9yaW5nIEFuYWx5c2lzKioKCk9rYXksIHNvIGBDT05GSUdGU19GU2AgaXMgY29uZmlybWVkIGFzIHRyaXN0YXRlLCB0aGF0JiMzOTtzIHN0cmFpZ2h0Zm9yd2FyZC4gTm93LCBsZXQmIzM5O3MgbG9vayBhdCB3aGF0IGBPQ0ZTMl9GU2AgcmVxdWlyZXMuIFRoZSBkZXBlbmRlbmNpZXMgYXJlIGBJTkVUICZhbXA7JmFtcDsgU1lTRlMgJmFtcDsmYW1wOyBDT05GSUdGU19GU2AsIGFuZCBpdCBzZWxlY3RzIGBCVUZGRVJfSEVBRGAsIGBKQkQyYCwgYENSQzMyYCwgYFFVT1RBYCwgYFFVT1RBX1RSRUVgLCBgRlNfUE9TSVhfQUNMYCwgYW5kIGBMRUdBQ1lfRElSRUNUX0lPYC4gU28sIGBPQ0ZTMl9GU2AgYW5kIGBDT05GSUdGU19GU2AgYXJlIHRoZSBrZXkgb25lcyB0byBrZWVwIGFuIGV5ZSBvbi4KCk5leHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpY3Mgb2YgdGhlIHBhdGNoLiBUaGUgZm9jdXMgc3ltYm9scyBhcmU6IGBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xgLCBgb2NmczJfaW5pdF9hY2xgLCBgb2NmczJfYWNsX2luaXRfcHJlcGFyZWAsIGBvY2ZzMl9jYWxjX3hhdHRyX2luaXRgLCBhbmQgYG9jZnMyX3hhdHRyX3NldF9oYW5kbGVgLiBUaG9zZSBhcmUgYWxsIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGFuZCBhcHBlYXIgdG8gYmUgZGlyZWN0bHkgaW52b2x2ZWQuCgpUaGUgcGF0Y2ggaXRzZWxmIGlzIGEgcmVmYWN0b3Jpbmcgb2YgQUNMIGluaXRpYWxpemF0aW9uIHdpdGhpbiBPQ0ZTMiBkdXJpbmcgaW5vZGUgY3JlYXRpb24uIEl0IGFpbXMgdG8gcHJldmVudCBhIGRlYWRsb2NrIGluIGBvY2ZzMl9pbml0X2FjbGAgYnkgcHJlLWNhbGN1bGF0aW5nIEFDTHMgYmVmb3JlIGxvY2tpbmcuIEZ1cnRoZXJtb3JlLCBpdCBhZGRyZXNzZXMgdGhlIHVzZSBvZiBgaXBfeGF0dHJfc2VtYCBsb2NrIHdpdGhpbiBgb2NmczJfeGF0dHJfc2V0X2hhbmRsZWAsIGFuZCBJIHNlZSB0aGUgcGF0Y2ggcmVtb3ZlcyBpdCwgYmVjYXVzZSBpdCBpcyBvbmx5IGNhbGxlZCBvbiBuZXcgaW5vZGVzLgoKRWZmZWN0aXZlbHksIHRoZSBwYXRjaCBtb2RpZmllcyBob3cgQUNMcyBhcmUgY2FsY3VsYXRlZCBhbmQgc2V0IHdoZW4gbmV3IGlub2RlcyBhcmUgY3JlYXRlZCDigJMgdGhpbmdzIGxpa2UgYG1rbm9kYCwgYG1rZGlyYCwgYGNyZWF0ZWAsIGBzeW1saW5rYCwgYW5kIGByZWZsaW5rYC4gVGhpcyBjbGVhcmx5IGFmZmVjdHMgdGhlIGNvcmUgT0NGUzIgbG9naWMgYW5kIGlzIHJlYWNoYWJsZSB0aHJvdWdoIHN0YW5kYXJkIFZGUyBzeXNjYWxscyB3aGVuIG9wZXJhdGluZyBvbiBhbiBPQ0ZTMiBmaWxlc3lzdGVtLiBUaGUgJiMzNDtXb3J0aEZ1enppbmcmIzM0OyBmbGFnIGNvbmZpcm1zIHRoaXMgaXMgYSBnb29kIGFyZWEgdG8gZm9jdXMgb24uCgpTbywgdGhlIGVuYWJsZSBjb25maWdzIGFyZSBgT0NGUzJfRlNgIGFuZCBgQ09ORklHRlNfRlNgLiBSaWdodCwgbGV0JiMzOTtzIHN1Ym1pdCB0aGVzZSByZXN1bHRzIHdpdGggYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDg6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09DRlMyX0ZTJiMzNDssCiAgICAmIzM0O0NPTkZJR0ZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7b2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsJiMzNDssCiAgICAmIzM0O29jZnMyX2luaXRfYWNsJiMzNDssCiAgICAmIzM0O29jZnMyX2FjbF9pbml0X3ByZXBhcmUmIzM0OywKICAgICYjMzQ7b2NmczJfY2FsY194YXR0cl9pbml0JiMzNDssCiAgICAmIzM0O29jZnMyX3hhdHRyX3NldF9oYW5kbGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIEFDTCBpbml0aWFsaXphdGlvbiBkdXJpbmcgaW5vZGUgY3JlYXRpb24gaW4gT0NGUzIgdG8gcHJldmVudCBkZWFkbG9ja3MuIEl0IG1vZGlmaWVzIGhvdyBBQ0xzIGFyZSBjYWxjdWxhdGVkIGFuZCBzZXQgZm9yIG5ldyBpbm9kZXMgKGUuZy4sIHZpYSBta25vZCwgbWtkaXIsIGNyZWF0ZSwgc3ltbGluaywgcmVmbGluaykuIFRoZSBjaGFuZ2VzIGFyZSBpbiBjb3JlIE9DRlMyIGxvZ2ljIGFuZCBhcmUgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBWRlMgc3lzY2FsbHMgd2hlbiBvcGVyYXRpbmcgb24gYW4gT0NGUzIgZmlsZXN5c3RlbS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7T0NGUzJfRlMmIzM0OywKICAgICYjMzQ7Q09ORklHRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2wmIzM0OywKICAgICYjMzQ7b2NmczJfaW5pdF9hY2wmIzM0OywKICAgICYjMzQ7b2NmczJfYWNsX2luaXRfcHJlcGFyZSYjMzQ7LAogICAgJiMzNDtvY2ZzMl9jYWxjX3hhdHRyX2luaXQmIzM0OywKICAgICYjMzQ7b2NmczJfeGF0dHJfc2V0X2hhbmRsZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgQUNMIGluaXRpYWxpemF0aW9uIGR1cmluZyBpbm9kZSBjcmVhdGlvbiBpbiBPQ0ZTMiB0byBwcmV2ZW50IGRlYWRsb2Nrcy4gSXQgbW9kaWZpZXMgaG93IEFDTHMgYXJlIGNhbGN1bGF0ZWQgYW5kIHNldCBmb3IgbmV3IGlub2RlcyAoZS5nLiwgdmlhIG1rbm9kLCBta2RpciwgY3JlYXRlLCBzeW1saW5rLCByZWZsaW5rKS4gVGhlIGNoYW5nZXMgYXJlIGluIGNvcmUgT0NGUzIgbG9naWMgYW5kIGFyZSByZWFjaGFibGUgdmlhIHN0YW5kYXJkIFZGUyBzeXNjYWxscyB3aGVuIG9wZXJhdGluZyBvbiBhbiBPQ0ZTMiBmaWxlc3lzdGVtLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMzBUMDg6MDc6MzAuNjc4OTMwODQyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI0ODM5NDgwMjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9DRlMyX0ZTXCIsXG4gICAgXCJDT05GSUdGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbFwiLFxuICAgIFwib2NmczJfaW5pdF9hY2xcIixcbiAgICBcIm9jZnMyX2FjbF9pbml0X3ByZXBhcmVcIixcbiAgICBcIm9jZnMyX2NhbGNfeGF0dHJfaW5pdFwiLFxuICAgIFwib2NmczJfeGF0dHJfc2V0X2hhbmRsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBBQ0wgaW5pdGlhbGl6YXRpb24gZHVyaW5nIGlub2RlIGNyZWF0aW9uIGluIE9DRlMyIHRvIHByZXZlbnQgZGVhZGxvY2tzLiBJdCBtb2RpZmllcyBob3cgQUNMcyBhcmUgY2FsY3VsYXRlZCBhbmQgc2V0IGZvciBuZXcgaW5vZGVzIChlLmcuLCB2aWEgbWtub2QsIG1rZGlyLCBjcmVhdGUsIHN5bWxpbmssIHJlZmxpbmspLiBUaGUgY2hhbmdlcyBhcmUgaW4gY29yZSBPQ0ZTMiBsb2dpYyBhbmQgYXJlIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgVkZTIHN5c2NhbGxzIHdoZW4gb3BlcmF0aW5nIG9uIGFuIE9DRlMyIGZpbGVzeXN0ZW0uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDA4OjA3OjMwLjY3ODkzODAyMloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTIxMzY1MzE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNzI4MzQzYjM1MDM5ZTA2NzU0N2RlYmMwNjFlMmNkYWJlMWViMDZjY1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEp1bCAzMCAwODowNzoyOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9hY2wuYyBiL2ZzL29jZnMyL2FjbC5jXFxuaW5kZXggYWYxZTJjZWRiMjE3Zi4uMDkwZWM2MGZiNTc2YSAxMDA2NDRcXG4tLS0gYS9mcy9vY2ZzMi9hY2wuY1xcbisrKyBiL2ZzL29jZnMyL2FjbC5jXFxuQEAgLTExMCw4ICsxMTAsNyBAQCBzdGF0aWMgdm9pZCAqb2NmczJfYWNsX3RvX3hhdHRyKGNvbnN0IHN0cnVjdCBwb3NpeF9hY2wgKmFjbCwgc2l6ZV90ICpzaXplKVxcbiBcXHRyZXR1cm4gb2NmczJfYWNsO1xcbiB9XFxuIFxcbi1zdGF0aWMgc3RydWN0IHBvc2l4X2FjbCAqb2NmczJfZ2V0X2FjbF9ub2xvY2soc3RydWN0IGlub2RlICppbm9kZSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICAgaW50IHR5cGUsXFxuK3N0YXRpYyBzdHJ1Y3QgcG9zaXhfYWNsICpvY2ZzMl9nZXRfYWNsX25vbG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaClcXG4ge1xcbiBcXHRpbnQgbmFtZV9pbmRleDtcXG5AQCAtMzQ5LDYzICszNDgsMTA1IEBAIGludCBvY2ZzMl9hY2xfY2htb2Qoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcXG4gICogSW5pdGlhbGl6ZSB0aGUgQUNMcyBvZiBhIG5ldyBpbm9kZS4gSWYgcGFyZW50IGRpcmVjdG9yeSBoYXMgZGVmYXVsdCBBQ0wsXFxuICAqIHRoZW4gY2xvbmUgdG8gbmV3IGlub2RlLiBDYWxsZWQgZnJvbSBvY2ZzMl9ta25vZC5cXG4gICovXFxuLWludCBvY2ZzMl9pbml0X2FjbChoYW5kbGVfdCAqaGFuZGxlLFxcbi1cXHRcXHQgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi1cXHRcXHQgICBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tXFx0XFx0ICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCxcXG4tXFx0XFx0ICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJfYmgsXFxuLVxcdFxcdCAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjLFxcbi1cXHRcXHQgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqZGF0YV9hYylcXG4rdm9pZCBvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlKHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgKnN0YXRlKVxcbit7XFxuK1xcdHBvc2l4X2FjbF9yZWxlYXNlKHN0YXRlLVxcdTAwM2VkZWZhdWx0X2FjbCk7XFxuK1xcdHBvc2l4X2FjbF9yZWxlYXNlKHN0YXRlLVxcdTAwM2VhY2wpO1xcbitcXHRzdGF0ZS1cXHUwMDNlZGVmYXVsdF9hY2wgPSBOVUxMO1xcbitcXHRzdGF0ZS1cXHUwMDNlYWNsID0gTlVMTDtcXG4rfVxcbitcXG4raW50IG9jZnMyX2FjbF9pbml0X3ByZXBhcmUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXFxuK1xcdFxcdFxcdCAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlyX2JoLFxcbitcXHRcXHRcXHQgICBzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICpzdGF0ZSlcXG4ge1xcbiBcXHRzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGlub2RlLVxcdTAwM2VpX3NiKTtcXG4tXFx0c3RydWN0IHBvc2l4X2FjbCAqYWNsID0gTlVMTDtcXG4tXFx0aW50IHJldCA9IDAsIHJldDI7XFxuLVxcdHVtb2RlX3QgbW9kZTtcXG4tXFxuLVxcdGlmICghU19JU0xOSyhpbm9kZS1cXHUwMDNlaV9tb2RlKSkge1xcbi1cXHRcXHRpZiAob3NiLVxcdTAwM2VzX21vdW50X29wdCBcXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkge1xcbi1cXHRcXHRcXHRkb3duX3JlYWQoXFx1MDAyNk9DRlMyX0koZGlyKS1cXHUwMDNlaXBfeGF0dHJfc2VtKTtcXG4tXFx0XFx0XFx0YWNsID0gb2NmczJfZ2V0X2FjbF9ub2xvY2soZGlyLCBBQ0xfVFlQRV9ERUZBVUxULFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICBkaXJfYmgpO1xcbi1cXHRcXHRcXHR1cF9yZWFkKFxcdTAwMjZPQ0ZTMl9JKGRpciktXFx1MDAzZWlwX3hhdHRyX3NlbSk7XFxuLVxcdFxcdFxcdGlmIChJU19FUlIoYWNsKSlcXG4tXFx0XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIoYWNsKTtcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcbitcXHRzdGF0ZS1cXHUwMDNlZGVmYXVsdF9hY2wgPSBOVUxMO1xcbitcXHRzdGF0ZS1cXHUwMDNlYWNsID0gTlVMTDtcXG4rXFx0c3RhdGUtXFx1MDAzZW1vZGUgPSBpbm9kZS1cXHUwMDNlaV9tb2RlO1xcbitcXG4rXFx0aWYgKFNfSVNMTksoaW5vZGUtXFx1MDAzZWlfbW9kZSkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aWYgKG9zYi1cXHUwMDNlc19tb3VudF9vcHQgXFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHtcXG4rXFx0XFx0ZG93bl9yZWFkKFxcdTAwMjZPQ0ZTMl9JKGRpciktXFx1MDAzZWlwX3hhdHRyX3NlbSk7XFxuK1xcdFxcdHN0YXRlLVxcdTAwM2VkZWZhdWx0X2FjbCA9XFxuK1xcdFxcdFxcdG9jZnMyX2dldF9hY2xfbm9sb2NrKGRpciwgQUNMX1RZUEVfREVGQVVMVCwgZGlyX2JoKTtcXG4rXFx0XFx0dXBfcmVhZChcXHUwMDI2T0NGUzJfSShkaXIpLVxcdTAwM2VpcF94YXR0cl9zZW0pO1xcbitcXHRcXHRpZiAoSVNfRVJSKHN0YXRlLVxcdTAwM2VkZWZhdWx0X2FjbCkpIHtcXG4rXFx0XFx0XFx0cmV0ID0gUFRSX0VSUihzdGF0ZS1cXHUwMDNlZGVmYXVsdF9hY2wpO1xcbitcXHRcXHRcXHRzdGF0ZS1cXHUwMDNlZGVmYXVsdF9hY2wgPSBOVUxMO1xcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXHRcXHR9XFxuLVxcdFxcdGlmICghYWNsKSB7XFxuLVxcdFxcdFxcdG1vZGUgPSBpbm9kZS1cXHUwMDNlaV9tb2RlIFxcdTAwMjYgfmN1cnJlbnRfdW1hc2soKTtcXG4tXFx0XFx0XFx0cmV0ID0gb2NmczJfYWNsX3NldF9tb2RlKGlub2RlLCBkaV9iaCwgaGFuZGxlLCBtb2RlKTtcXG4tXFx0XFx0XFx0aWYgKHJldCkge1xcbi1cXHRcXHRcXHRcXHRtbG9nX2Vycm5vKHJldCk7XFxuK1xcdFxcdGlmIChzdGF0ZS1cXHUwMDNlZGVmYXVsdF9hY2wpIHtcXG4rXFx0XFx0XFx0c3RhdGUtXFx1MDAzZWFjbCA9IHBvc2l4X2FjbF9kdXAoc3RhdGUtXFx1MDAzZWRlZmF1bHRfYWNsKTtcXG4rXFx0XFx0XFx0aWYgKCFzdGF0ZS1cXHUwMDNlYWNsKSB7XFxuK1xcdFxcdFxcdFxcdHJldCA9IC1FTk9NRU07XFxuIFxcdFxcdFxcdFxcdGdvdG8gY2xlYW51cDtcXG4gXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRyZXQgPSBfX3Bvc2l4X2FjbF9jcmVhdGUoXFx1MDAyNnN0YXRlLVxcdTAwM2VhY2wsIEdGUF9OT0ZTLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNnN0YXRlLVxcdTAwM2Vtb2RlKTtcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFx0XFx0XFx0aWYgKHJldCA9PSAwKSB7XFxuK1xcdFxcdFxcdFxcdHBvc2l4X2FjbF9yZWxlYXNlKHN0YXRlLVxcdTAwM2VhY2wpO1xcbitcXHRcXHRcXHRcXHRzdGF0ZS1cXHUwMDNlYWNsID0gTlVMTDtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRpZiAoIVNfSVNESVIoaW5vZGUtXFx1MDAzZWlfbW9kZSkpIHtcXG4rXFx0XFx0XFx0XFx0cG9zaXhfYWNsX3JlbGVhc2Uoc3RhdGUtXFx1MDAzZWRlZmF1bHRfYWNsKTtcXG4rXFx0XFx0XFx0XFx0c3RhdGUtXFx1MDAzZWRlZmF1bHRfYWNsID0gTlVMTDtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRzdGF0ZS1cXHUwMDNlbW9kZSBcXHUwMDI2PSB+Y3VycmVudF91bWFzaygpO1xcbiBcXHRcXHR9XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHN0YXRlLVxcdTAwM2Vtb2RlIFxcdTAwMjY9IH5jdXJyZW50X3VtYXNrKCk7XFxuIFxcdH1cXG4tXFx0aWYgKChvc2ItXFx1MDAzZXNfbW91bnRfb3B0IFxcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSBcXHUwMDI2XFx1MDAyNiBhY2wpIHtcXG4tXFx0XFx0aWYgKFNfSVNESVIoaW5vZGUtXFx1MDAzZWlfbW9kZSkpIHtcXG4rXFxuK1xcdHJldHVybiAwO1xcbitjbGVhbnVwOlxcbitcXHRvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlKHN0YXRlKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4raW50IG9jZnMyX2luaXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuK1xcdFxcdCAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgsXFxuK1xcdFxcdCAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjLFxcbitcXHRcXHQgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqZGF0YV9hYyxcXG4rXFx0XFx0ICAgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqc3RhdGUpXFxuK3tcXG4rXFx0c3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihpbm9kZS1cXHUwMDNlaV9zYik7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXG4rXFx0aWYgKFNfSVNMTksoaW5vZGUtXFx1MDAzZWlfbW9kZSkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aWYgKG9zYi1cXHUwMDNlc19tb3VudF9vcHQgXFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHtcXG4rXFx0XFx0aWYgKFNfSVNESVIoaW5vZGUtXFx1MDAzZWlfbW9kZSkgXFx1MDAyNlxcdTAwMjYgc3RhdGUtXFx1MDAzZWRlZmF1bHRfYWNsKSB7XFxuIFxcdFxcdFxcdHJldCA9IG9jZnMyX3NldF9hY2woaGFuZGxlLCBpbm9kZSwgZGlfYmgsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBBQ0xfVFlQRV9ERUZBVUxULCBhY2wsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBtZXRhX2FjLCBkYXRhX2FjKTtcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIEFDTF9UWVBFX0RFRkFVTFQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBzdGF0ZS1cXHUwMDNlZGVmYXVsdF9hY2wsIG1ldGFfYWMsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBkYXRhX2FjKTtcXG4gXFx0XFx0XFx0aWYgKHJldClcXG4tXFx0XFx0XFx0XFx0Z290byBjbGVhbnVwO1xcbitcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXHRcXHR9XFxuLVxcdFxcdG1vZGUgPSBpbm9kZS1cXHUwMDNlaV9tb2RlO1xcbi1cXHRcXHRyZXQgPSBfX3Bvc2l4X2FjbF9jcmVhdGUoXFx1MDAyNmFjbCwgR0ZQX05PRlMsIFxcdTAwMjZtb2RlKTtcXG4tXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLVxcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4gXFxuLVxcdFxcdHJldDIgPSBvY2ZzMl9hY2xfc2V0X21vZGUoaW5vZGUsIGRpX2JoLCBoYW5kbGUsIG1vZGUpO1xcbi1cXHRcXHRpZiAocmV0Mikge1xcbi1cXHRcXHRcXHRtbG9nX2Vycm5vKHJldDIpO1xcbi1cXHRcXHRcXHRyZXQgPSByZXQyO1xcbi1cXHRcXHRcXHRnb3RvIGNsZWFudXA7XFxuLVxcdFxcdH1cXG4tXFx0XFx0aWYgKHJldCBcXHUwMDNlIDApIHtcXG4tXFx0XFx0XFx0cmV0ID0gb2NmczJfc2V0X2FjbChoYW5kbGUsIGlub2RlLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgZGlfYmgsIEFDTF9UWVBFX0FDQ0VTUyxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIGFjbCwgbWV0YV9hYywgZGF0YV9hYyk7XFxuK1xcdHJldCA9IG9jZnMyX2FjbF9zZXRfbW9kZShpbm9kZSwgZGlfYmgsIGhhbmRsZSwgc3RhdGUtXFx1MDAzZW1vZGUpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdG1sb2dfZXJybm8ocmV0KTtcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKG9zYi1cXHUwMDNlc19tb3VudF9vcHQgXFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHtcXG4rXFx0XFx0aWYgKHN0YXRlLVxcdTAwM2VhY2wpIHtcXG4rXFx0XFx0XFx0cmV0ID0gb2NmczJfc2V0X2FjbChoYW5kbGUsIGlub2RlLCBkaV9iaCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIEFDTF9UWVBFX0FDQ0VTUywgc3RhdGUtXFx1MDAzZWFjbCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIG1ldGFfYWMsIGRhdGFfYWMpO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4tY2xlYW51cDpcXG4tXFx0cG9zaXhfYWNsX3JlbGVhc2UoYWNsKTtcXG4rXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvZnMvb2NmczIvYWNsLmggYi9mcy9vY2ZzMi9hY2wuaFxcbmluZGV4IDY2N2M2ZjAzZmE2MDYuLmE5MWY5Y2UyNzhkNmQgMTAwNjQ0XFxuLS0tIGEvZnMvb2NmczIvYWNsLmhcXG4rKysgYi9mcy9vY2ZzMi9hY2wuaFxcbkBAIC0yMCw5ICsyMCwyMCBAQCBzdHJ1Y3QgcG9zaXhfYWNsICpvY2ZzMl9pb3BfZ2V0X2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSwgYm9vbCByY3UpO1xcbiBpbnQgb2NmczJfaW9wX3NldF9hY2woc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4gXFx0XFx0ICAgICAgc3RydWN0IHBvc2l4X2FjbCAqYWNsLCBpbnQgdHlwZSk7XFxuIGV4dGVybiBpbnQgb2NmczJfYWNsX2NobW9kKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKik7XFxuLWV4dGVybiBpbnQgb2NmczJfaW5pdF9hY2woaGFuZGxlX3QgKiwgc3RydWN0IGlub2RlICosIHN0cnVjdCBpbm9kZSAqLFxcbi1cXHRcXHRcXHQgIHN0cnVjdCBidWZmZXJfaGVhZCAqLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKixcXG4tXFx0XFx0XFx0ICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqLFxcbi1cXHRcXHRcXHQgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICopO1xcbitzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlIHtcXG4rXFx0c3RydWN0IHBvc2l4X2FjbCAqZGVmYXVsdF9hY2w7XFxuK1xcdHN0cnVjdCBwb3NpeF9hY2wgKmFjbDtcXG4rXFx0dW1vZGVfdCBtb2RlO1xcbit9O1xcbitcXG4raW50IG9jZnMyX2FjbF9pbml0X3ByZXBhcmUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXFxuK1xcdFxcdFxcdCAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlyX2JoLFxcbitcXHRcXHRcXHQgICBzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICpzdGF0ZSk7XFxuK3ZvaWQgb2NmczJfYWNsX2luaXRfcmVsZWFzZShzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICpzdGF0ZSk7XFxuK2ludCBvY2ZzMl9pbml0X2FjbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbitcXHRcXHQgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoLFxcbitcXHRcXHQgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYyxcXG4rXFx0XFx0ICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmRhdGFfYWMsXFxuK1xcdFxcdCAgIHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgKnN0YXRlKTtcXG4gXFxuICNlbmRpZiAvKiBPQ0ZTMl9BQ0xfSCAqL1xcbmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9uYW1laS5jIGIvZnMvb2NmczIvbmFtZWkuY1xcbmluZGV4IDEyNzc2NjZjNzdjZDIuLmVhMzdhNTA1ODA4OTAgMTAwNjQ0XFxuLS0tIGEvZnMvb2NmczIvbmFtZWkuY1xcbisrKyBiL2ZzL29jZnMyL25hbWVpLmNcXG5AQCAtMjU2LDYgKzI1Niw3IEBAIHN0YXRpYyBpbnQgb2NmczJfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuIFxcdHNpZ3NldF90IG9sZHNldDtcXG4gXFx0aW50IGRpZF9ibG9ja19zaWduYWxzID0gMDtcXG4gXFx0c3RydWN0IG9jZnMyX2RlbnRyeV9sb2NrICpkbCA9IE5VTEw7XFxuK1xcdHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgYWNsX3N0YXRlID0geyAwIH07XFxuIFxcbiBcXHR0cmFjZV9vY2ZzMl9ta25vZChkaXIsIGRlbnRyeSwgZGVudHJ5LVxcdTAwM2VkX25hbWUubGVuLCBkZW50cnktXFx1MDAzZWRfbmFtZS5uYW1lLFxcbiBcXHRcXHRcXHQgICh1bnNpZ25lZCBsb25nIGxvbmcpT0NGUzJfSShkaXIpLVxcdTAwM2VpcF9ibGtubyxcXG5AQCAtMzMwLDEwICszMzEsMTQgQEAgc3RhdGljIGludCBvY2ZzMl9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbitcXHRzdGF0dXMgPSBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlKGlub2RlLCBkaXIsIHBhcmVudF9mZV9iaCwgXFx1MDAyNmFjbF9zdGF0ZSk7XFxuK1xcdGlmIChzdGF0dXMgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGxlYXZlO1xcbitcXG4gXFx0LyogY2FsY3VsYXRlIG1ldGEgZGF0YS9jbHVzdGVycyBmb3Igc2V0dGluZyBzZWN1cml0eSBhbmQgYWNsIHhhdHRyICovXFxuLVxcdHN0YXR1cyA9IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChkaXIsIHBhcmVudF9mZV9iaCwgbW9kZSxcXG4tXFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZzaSwgXFx1MDAyNndhbnRfY2x1c3RlcnMsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2eGF0dHJfY3JlZGl0cywgXFx1MDAyNndhbnRfbWV0YSk7XFxuK1xcdHN0YXR1cyA9IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChkaXIsIG1vZGUsIFxcdTAwMjZzaSwgXFx1MDAyNndhbnRfY2x1c3RlcnMsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2eGF0dHJfY3JlZGl0cywgXFx1MDAyNndhbnRfbWV0YSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZhY2xfc3RhdGUpO1xcbiBcXHRpZiAoc3RhdHVzIFxcdTAwM2MgMCkge1xcbiBcXHRcXHRtbG9nX2Vycm5vKHN0YXR1cyk7XFxuIFxcdFxcdGdvdG8gbGVhdmU7XFxuQEAgLTQxMSw4ICs0MTYsOCBAQCBzdGF0aWMgaW50IG9jZnMyX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbiBcXHRcXHRpbmNfbmxpbmsoZGlyKTtcXG4gXFx0fVxcbiBcXG4tXFx0c3RhdHVzID0gb2NmczJfaW5pdF9hY2woaGFuZGxlLCBpbm9kZSwgZGlyLCBuZXdfZmVfYmgsIHBhcmVudF9mZV9iaCxcXG4tXFx0XFx0XFx0IG1ldGFfYWMsIGRhdGFfYWMpO1xcbitcXHRzdGF0dXMgPSBvY2ZzMl9pbml0X2FjbChoYW5kbGUsIGlub2RlLCBuZXdfZmVfYmgsIG1ldGFfYWMsIGRhdGFfYWMsXFxuK1xcdFxcdFxcdFxcdFxcdTAwMjZhY2xfc3RhdGUpO1xcbiBcXG4gXFx0aWYgKHN0YXR1cyBcXHUwMDNjIDApIHtcXG4gXFx0XFx0bWxvZ19lcnJubyhzdGF0dXMpO1xcbkBAIC00NzcsNiArNDgyLDggQEAgc3RhdGljIGludCBvY2ZzMl9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4gXFx0YnJlbHNlKHBhcmVudF9mZV9iaCk7XFxuIFxcdGtmcmVlKHNpLnZhbHVlKTtcXG4gXFxuK1xcdG9jZnMyX2FjbF9pbml0X3JlbGVhc2UoXFx1MDAyNmFjbF9zdGF0ZSk7XFxuK1xcbiBcXHRvY2ZzMl9mcmVlX2Rpcl9sb29rdXBfcmVzdWx0KFxcdTAwMjZsb29rdXApO1xcbiBcXG4gXFx0aWYgKGlub2RlX2FjKVxcbmRpZmYgLS1naXQgYS9mcy9vY2ZzMi94YXR0ci5jIGIvZnMvb2NmczIveGF0dHIuY1xcbmluZGV4IGZjZGRkM2MxM2FjZGQuLjg2ZjAyOTM2ODFmY2MgMTAwNjQ0XFxuLS0tIGEvZnMvb2NmczIveGF0dHIuY1xcbisrKyBiL2ZzL29jZnMyL3hhdHRyLmNcXG5AQCAtNjExLDEzICs2MTEsMTAgQEAgaW50IG9jZnMyX2NhbGNfc2VjdXJpdHlfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpcixcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4taW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tXFx0XFx0XFx0ICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpcl9iaCxcXG4tXFx0XFx0XFx0ICB1bW9kZV90IG1vZGUsXFxuK2ludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICpkaXIsIHVtb2RlX3QgbW9kZSxcXG4gXFx0XFx0XFx0ICBzdHJ1Y3Qgb2NmczJfc2VjdXJpdHlfeGF0dHJfaW5mbyAqc2ksXFxuLVxcdFxcdFxcdCAgaW50ICp3YW50X2NsdXN0ZXJzLFxcbi1cXHRcXHRcXHQgIGludCAqeGF0dHJfY3JlZGl0cyxcXG4tXFx0XFx0XFx0ICBpbnQgKndhbnRfbWV0YSlcXG4rXFx0XFx0XFx0ICBpbnQgKndhbnRfY2x1c3RlcnMsIGludCAqeGF0dHJfY3JlZGl0cyxcXG4rXFx0XFx0XFx0ICBpbnQgKndhbnRfbWV0YSwgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqYWNsX3N0YXRlKVxcbiB7XFxuIFxcdGludCByZXQgPSAwO1xcbiBcXHRzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGRpci1cXHUwMDNlaV9zYik7XFxuQEAgLTYyOCwxOSArNjI1LDE1IEBAIGludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICpkaXIsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgc2ktXFx1MDAzZXZhbHVlX2xlbik7XFxuIFxcbiBcXHRpZiAob3NiLVxcdTAwM2VzX21vdW50X29wdCBcXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkge1xcbi1cXHRcXHRkb3duX3JlYWQoXFx1MDAyNk9DRlMyX0koZGlyKS1cXHUwMDNlaXBfeGF0dHJfc2VtKTtcXG4tXFx0XFx0YWNsX2xlbiA9IG9jZnMyX3hhdHRyX2dldF9ub2xvY2soZGlyLCBkaXJfYmgsXFxuLVxcdFxcdFxcdFxcdFxcdE9DRlMyX1hBVFRSX0lOREVYX1BPU0lYX0FDTF9ERUZBVUxULFxcbi1cXHRcXHRcXHRcXHRcXHRcXFwiXFxcIiwgTlVMTCwgMCk7XFxuLVxcdFxcdHVwX3JlYWQoXFx1MDAyNk9DRlMyX0koZGlyKS1cXHUwMDNlaXBfeGF0dHJfc2VtKTtcXG4tXFx0XFx0aWYgKGFjbF9sZW4gXFx1MDAzZSAwKSB7XFxuLVxcdFxcdFxcdGFfc2l6ZSA9IG9jZnMyX3hhdHRyX2VudHJ5X3JlYWxfc2l6ZSgwLCBhY2xfbGVuKTtcXG4tXFx0XFx0XFx0aWYgKFNfSVNESVIobW9kZSkpXFxuLVxcdFxcdFxcdFxcdGFfc2l6ZSBcXHUwMDNjXFx1MDAzYz0gMTtcXG4tXFx0XFx0fSBlbHNlIGlmIChhY2xfbGVuICE9IDAgXFx1MDAyNlxcdTAwMjYgYWNsX2xlbiAhPSAtRU5PREFUQSkge1xcbi1cXHRcXHRcXHRyZXQgPSBhY2xfbGVuO1xcbi1cXHRcXHRcXHRtbG9nX2Vycm5vKHJldCk7XFxuLVxcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdGlmIChhY2xfc3RhdGUtXFx1MDAzZWRlZmF1bHRfYWNsIFxcdTAwMjZcXHUwMDI2IFNfSVNESVIobW9kZSkpIHtcXG4rXFx0XFx0XFx0YWNsX2xlbiA9IGFjbF9zdGF0ZS1cXHUwMDNlZGVmYXVsdF9hY2wtXFx1MDAzZWFfY291bnQgKlxcbitcXHRcXHRcXHRcXHQgIHNpemVvZihzdHJ1Y3Qgb2NmczJfYWNsX2VudHJ5KTtcXG4rXFx0XFx0XFx0YV9zaXplICs9IG9jZnMyX3hhdHRyX2VudHJ5X3JlYWxfc2l6ZSgwLCBhY2xfbGVuKTtcXG4rXFx0XFx0fVxcbitcXHRcXHRpZiAoYWNsX3N0YXRlLVxcdTAwM2VhY2wpIHtcXG4rXFx0XFx0XFx0YWNsX2xlbiA9IGFjbF9zdGF0ZS1cXHUwMDNlYWNsLVxcdTAwM2VhX2NvdW50ICpcXG4rXFx0XFx0XFx0XFx0ICBzaXplb2Yoc3RydWN0IG9jZnMyX2FjbF9lbnRyeSk7XFxuK1xcdFxcdFxcdGFfc2l6ZSArPSBvY2ZzMl94YXR0cl9lbnRyeV9yZWFsX3NpemUoMCwgYWNsX2xlbik7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG5AQCAtNjgzLDE0ICs2NzYsMzMgQEAgaW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpcixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgbmV3X2NsdXN0ZXJzKTtcXG4gXFx0XFx0KndhbnRfY2x1c3RlcnMgKz0gbmV3X2NsdXN0ZXJzO1xcbiBcXHR9XFxuLVxcdGlmIChvc2ItXFx1MDAzZXNfbW91bnRfb3B0IFxcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICBhY2xfbGVuIFxcdTAwM2UgT0NGUzJfWEFUVFJfSU5MSU5FX1NJWkUpIHtcXG4tXFx0XFx0LyogZm9yIGRpcmVjdG9yeSwgaXQgaGFzIERFRkFVTFQgYW5kIEFDQ0VTUyB0d28gdHlwZXMgb2YgYWNscyAqL1xcbi1cXHRcXHRuZXdfY2x1c3RlcnMgPSAoU19JU0RJUihtb2RlKSA/IDIgOiAxKSAqXFxuLVxcdFxcdFxcdFxcdG9jZnMyX2NsdXN0ZXJzX2Zvcl9ieXRlcyhkaXItXFx1MDAzZWlfc2IsIGFjbF9sZW4pO1xcbi1cXHRcXHQqeGF0dHJfY3JlZGl0cyArPSBvY2ZzMl9jbHVzdGVyc190b19ibG9ja3MoZGlyLVxcdTAwM2VpX3NiLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBuZXdfY2x1c3RlcnMpO1xcbi1cXHRcXHQqd2FudF9jbHVzdGVycyArPSBuZXdfY2x1c3RlcnM7XFxuK1xcdGlmIChvc2ItXFx1MDAzZXNfbW91bnRfb3B0IFxcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7XFxuK1xcdFxcdGlmIChhY2xfc3RhdGUtXFx1MDAzZWRlZmF1bHRfYWNsIFxcdTAwMjZcXHUwMDI2IFNfSVNESVIobW9kZSkpIHtcXG4rXFx0XFx0XFx0YWNsX2xlbiA9IGFjbF9zdGF0ZS1cXHUwMDNlZGVmYXVsdF9hY2wtXFx1MDAzZWFfY291bnQgKlxcbitcXHRcXHRcXHRcXHQgIHNpemVvZihzdHJ1Y3Qgb2NmczJfYWNsX2VudHJ5KTtcXG4rXFx0XFx0XFx0aWYgKGFjbF9sZW4gXFx1MDAzZSBPQ0ZTMl9YQVRUUl9JTkxJTkVfU0laRSkge1xcbitcXHRcXHRcXHRcXHRuZXdfY2x1c3RlcnMgPVxcbitcXHRcXHRcXHRcXHRcXHRvY2ZzMl9jbHVzdGVyc19mb3JfYnl0ZXMoZGlyLVxcdTAwM2VpX3NiLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgYWNsX2xlbik7XFxuK1xcdFxcdFxcdFxcdCp4YXR0cl9jcmVkaXRzICs9XFxuK1xcdFxcdFxcdFxcdFxcdG9jZnMyX2NsdXN0ZXJzX3RvX2Jsb2NrcyhkaXItXFx1MDAzZWlfc2IsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCBuZXdfY2x1c3RlcnMpO1xcbitcXHRcXHRcXHRcXHQqd2FudF9jbHVzdGVycyArPSBuZXdfY2x1c3RlcnM7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0fVxcbitcXHRcXHRpZiAoYWNsX3N0YXRlLVxcdTAwM2VhY2wpIHtcXG4rXFx0XFx0XFx0YWNsX2xlbiA9IGFjbF9zdGF0ZS1cXHUwMDNlYWNsLVxcdTAwM2VhX2NvdW50ICpcXG4rXFx0XFx0XFx0XFx0ICBzaXplb2Yoc3RydWN0IG9jZnMyX2FjbF9lbnRyeSk7XFxuK1xcdFxcdFxcdGlmIChhY2xfbGVuIFxcdTAwM2UgT0NGUzJfWEFUVFJfSU5MSU5FX1NJWkUpIHtcXG4rXFx0XFx0XFx0XFx0bmV3X2NsdXN0ZXJzID1cXG4rXFx0XFx0XFx0XFx0XFx0b2NmczJfY2x1c3RlcnNfZm9yX2J5dGVzKGRpci1cXHUwMDNlaV9zYixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0IGFjbF9sZW4pO1xcbitcXHRcXHRcXHRcXHQqeGF0dHJfY3JlZGl0cyArPVxcbitcXHRcXHRcXHRcXHRcXHRvY2ZzMl9jbHVzdGVyc190b19ibG9ja3MoZGlyLVxcdTAwM2VpX3NiLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgbmV3X2NsdXN0ZXJzKTtcXG4rXFx0XFx0XFx0XFx0KndhbnRfY2x1c3RlcnMgKz0gbmV3X2NsdXN0ZXJzO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdH1cXG4gXFx0fVxcbiBcXG4gXFx0cmV0dXJuIHJldDtcXG5AQCAtMzQ4Myw5ICszNDk1LDEwIEBAIHN0YXRpYyBpbnQgX19vY2ZzMl94YXR0cl9zZXRfaGFuZGxlKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIH1cXG4gXFxuIC8qXFxuLSAqIFRoaXMgZnVuY3Rpb24gb25seSBjYWxsZWQgZHVpbmcgY3JlYXRpbmcgaW5vZGVcXG4tICogZm9yIGluaXQgc2VjdXJpdHkvYWNsIHhhdHRycyBvZiB0aGUgbmV3IGlub2RlLlxcbi0gKiBBbGwgdHJhbnNhbmN0aW9uIGNyZWRpdHMgaGF2ZSBiZWVuIHJlc2VydmVkIGluIG1rbm9kLlxcbisgKiBUaGlzIGhlbHBlciBpcyBvbmx5IGZvciBzZXR0aW5nIGluaXRpYWwgQUNMIG9yIHNlY3VyaXR5IHhhdHRycyBvbiBhbiBpbm9kZVxcbisgKiB0aGF0IGlzIHN0aWxsIHVucHVibGlzaGVkLCB1bmhhc2hlZCwgYW5kIHVuYXR0YWNoZWQgdG8gYSBkZW50cnkuXFxuKyAqIE9yZGluYXJ5IHhhdHRyIHVwZGF0ZXMgbXVzdCB1c2Ugb2NmczJfeGF0dHJfc2V0KCkuXFxuKyAqIEFsbCB0cmFuc2FjdGlvbiBjcmVkaXRzIGhhdmUgYmVlbiByZXNlcnZlZCBpbiBta25vZCBvciBzeW1saW5rIGNhbGxlcnMuXFxuICAqL1xcbiBpbnQgb2NmczJfeGF0dHJfc2V0X2hhbmRsZShoYW5kbGVfdCAqaGFuZGxlLFxcbiBcXHRcXHRcXHQgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbkBAIC0zNTQyLDggKzM1NTUsNiBAQCBpbnQgb2NmczJfeGF0dHJfc2V0X2hhbmRsZShoYW5kbGVfdCAqaGFuZGxlLFxcbiBcXHR4aXMuaW5vZGVfYmggPSB4YnMuaW5vZGVfYmggPSBkaV9iaDtcXG4gXFx0ZGkgPSAoc3RydWN0IG9jZnMyX2Rpbm9kZSAqKWRpX2JoLVxcdTAwM2ViX2RhdGE7XFxuIFxcbi1cXHRkb3duX3dyaXRlKFxcdTAwMjZPQ0ZTMl9JKGlub2RlKS1cXHUwMDNlaXBfeGF0dHJfc2VtKTtcXG4tXFxuIFxcdHJldCA9IG9jZnMyX3hhdHRyX2lib2R5X2ZpbmQoaW5vZGUsIG5hbWVfaW5kZXgsIG5hbWUsIFxcdTAwMjZ4aXMpO1xcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRnb3RvIGNsZWFudXA7XFxuQEAgLTM1NTYsNyArMzU2Nyw2IEBAIGludCBvY2ZzMl94YXR0cl9zZXRfaGFuZGxlKGhhbmRsZV90ICpoYW5kbGUsXFxuIFxcdHJldCA9IF9fb2NmczJfeGF0dHJfc2V0X2hhbmRsZShpbm9kZSwgZGksIFxcdTAwMjZ4aSwgXFx1MDAyNnhpcywgXFx1MDAyNnhicywgXFx1MDAyNmN0eHQpO1xcbiBcXG4gY2xlYW51cDpcXG4tXFx0dXBfd3JpdGUoXFx1MDAyNk9DRlMyX0koaW5vZGUpLVxcdTAwM2VpcF94YXR0cl9zZW0pO1xcbiBcXHRicmVsc2UoeGJzLnhhdHRyX2JoKTtcXG4gXFx0b2NmczJfeGF0dHJfYnVja2V0X2ZyZWUoeGJzLmJ1Y2tldCk7XFxuIFxcbkBAIC03MjU3LDYgKzcyNjcsNyBAQCBpbnQgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsKHN0cnVjdCBpbm9kZSAqZGlyLFxcbiB7XFxuIFxcdGludCByZXQgPSAwO1xcbiBcXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpcl9iaCA9IE5VTEw7XFxuK1xcdHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgYWNsX3N0YXRlID0geyAwIH07XFxuIFxcbiBcXHRyZXQgPSBvY2ZzMl9pbml0X3NlY3VyaXR5X2dldChpbm9kZSwgZGlyLCBxc3RyLCBOVUxMKTtcXG4gXFx0aWYgKHJldCkge1xcbkBAIC03MjY5LDEwICs3MjgwLDE3IEBAIGludCBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2woc3RydWN0IGlub2RlICpkaXIsXFxuIFxcdFxcdG1sb2dfZXJybm8ocmV0KTtcXG4gXFx0XFx0Z290byBsZWF2ZTtcXG4gXFx0fVxcbi1cXHRyZXQgPSBvY2ZzMl9pbml0X2FjbChOVUxMLCBpbm9kZSwgZGlyLCBOVUxMLCBkaXJfYmgsIE5VTEwsIE5VTEwpO1xcbitcXG4rXFx0cmV0ID0gb2NmczJfYWNsX2luaXRfcHJlcGFyZShpbm9kZSwgZGlyLCBkaXJfYmgsIFxcdTAwMjZhY2xfc3RhdGUpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIHVubG9jaztcXG4rXFxuK1xcdHJldCA9IG9jZnMyX2luaXRfYWNsKE5VTEwsIGlub2RlLCBOVUxMLCBOVUxMLCBOVUxMLCBcXHUwMDI2YWNsX3N0YXRlKTtcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0bWxvZ19lcnJubyhyZXQpO1xcbiBcXG4rdW5sb2NrOlxcbitcXHRvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlKFxcdTAwMjZhY2xfc3RhdGUpO1xcbiBcXHRvY2ZzMl9pbm9kZV91bmxvY2soZGlyLCAwKTtcXG4gXFx0YnJlbHNlKGRpcl9iaCk7XFxuIGxlYXZlOlxcbmRpZmYgLS1naXQgYS9mcy9vY2ZzMi94YXR0ci5oIGIvZnMvb2NmczIveGF0dHIuaFxcbmluZGV4IDY1ZTlhYTc0MzkxOTkuLjVjZGQ2YzZiNDAwNjQgMTAwNjQ0XFxuLS0tIGEvZnMvb2NmczIveGF0dHIuaFxcbisrKyBiL2ZzL29jZnMyL3hhdHRyLmhcXG5AQCAtNTUsOSArNTUsMTIgQEAgaW50IG9jZnMyX2luaXRfc2VjdXJpdHlfc2V0KGhhbmRsZV90ICosIHN0cnVjdCBpbm9kZSAqLFxcbiBpbnQgb2NmczJfY2FsY19zZWN1cml0eV9pbml0KHN0cnVjdCBpbm9kZSAqLFxcbiBcXHRcXHRcXHQgICAgIHN0cnVjdCBvY2ZzMl9zZWN1cml0eV94YXR0cl9pbmZvICosXFxuIFxcdFxcdFxcdCAgICAgaW50ICosIGludCAqLCBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqKik7XFxuLWludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICosIHN0cnVjdCBidWZmZXJfaGVhZCAqLFxcbi1cXHRcXHRcXHQgIHVtb2RlX3QsIHN0cnVjdCBvY2ZzMl9zZWN1cml0eV94YXR0cl9pbmZvICosXFxuLVxcdFxcdFxcdCAgaW50ICosIGludCAqLCBpbnQgKik7XFxuK1xcbitzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlO1xcbitpbnQgb2NmczJfY2FsY194YXR0cl9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLCB1bW9kZV90IG1vZGUsXFxuK1xcdFxcdFxcdCAgc3RydWN0IG9jZnMyX3NlY3VyaXR5X3hhdHRyX2luZm8gKnNpLFxcbitcXHRcXHRcXHQgIGludCAqd2FudF9jbHVzdGVycywgaW50ICp4YXR0cl9jcmVkaXRzLFxcbitcXHRcXHRcXHQgIGludCAqd2FudF9tZXRhLCBzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICphY2xfc3RhdGUpO1xcbiBcXG4gLypcXG4gICogeGF0dHJzIGNhbiBsaXZlIGluc2lkZSBhbiBpbm9kZSwgYXMgcGFydCBvZiBhbiBleHRlcm5hbCB4YXR0ciBibG9jayxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDg6MDc6MzEuMjAxMjQ3ODA5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTI0MzE3MTU1NTYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9DRlMyX0ZTXCIsXG4gICAgXCJDT05GSUdGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbFwiLFxuICAgIFwib2NmczJfaW5pdF9hY2xcIixcbiAgICBcIm9jZnMyX2FjbF9pbml0X3ByZXBhcmVcIixcbiAgICBcIm9jZnMyX2NhbGNfeGF0dHJfaW5pdFwiLFxuICAgIFwib2NmczJfeGF0dHJfc2V0X2hhbmRsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBBQ0wgaW5pdGlhbGl6YXRpb24gZHVyaW5nIGlub2RlIGNyZWF0aW9uIGluIE9DRlMyIHRvIHByZXZlbnQgZGVhZGxvY2tzLiBJdCBtb2RpZmllcyBob3cgQUNMcyBhcmUgY2FsY3VsYXRlZCBhbmQgc2V0IGZvciBuZXcgaW5vZGVzIChlLmcuLCB2aWEgbWtub2QsIG1rZGlyLCBjcmVhdGUsIHN5bWxpbmssIHJlZmxpbmspLiBUaGUgY2hhbmdlcyBhcmUgaW4gY29yZSBPQ0ZTMiBsb2dpYyBhbmQgYXJlIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgVkZTIHN5c2NhbGxzIHdoZW4gb3BlcmF0aW5nIG9uIGFuIE9DRlMyIGZpbGVzeXN0ZW0uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDcyODM0M2IzNTAzOWUwNjc1NDdkZWJjMDYxZTJjZGFiZTFlYjA2Y2NcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAzMCAwODowNzoyOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2FjbC5jIGIvZnMvb2NmczIvYWNsLmNcbmluZGV4IGFmMWUyY2VkYjIxN2YuLjA5MGVjNjBmYjU3NmEgMTAwNjQ0XG4tLS0gYS9mcy9vY2ZzMi9hY2wuY1xuKysrIGIvZnMvb2NmczIvYWNsLmNcbkBAIC0xMTAsOCArMTEwLDcgQEAgc3RhdGljIHZvaWQgKm9jZnMyX2FjbF90b194YXR0cihjb25zdCBzdHJ1Y3QgcG9zaXhfYWNsICphY2wsIHNpemVfdCAqc2l6ZSlcbiBcdHJldHVybiBvY2ZzMl9hY2w7XG4gfVxuIFxuLXN0YXRpYyBzdHJ1Y3QgcG9zaXhfYWNsICpvY2ZzMl9nZXRfYWNsX25vbG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLVx0XHRcdFx0XHQgICAgICBpbnQgdHlwZSxcbitzdGF0aWMgc3RydWN0IHBvc2l4X2FjbCAqb2NmczJfZ2V0X2FjbF9ub2xvY2soc3RydWN0IGlub2RlICppbm9kZSwgaW50IHR5cGUsXG4gXHRcdFx0XHRcdCAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgpXG4ge1xuIFx0aW50IG5hbWVfaW5kZXg7XG5AQCAtMzQ5LDYzICszNDgsMTA1IEBAIGludCBvY2ZzMl9hY2xfY2htb2Qoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcbiAgKiBJbml0aWFsaXplIHRoZSBBQ0xzIG9mIGEgbmV3IGlub2RlLiBJZiBwYXJlbnQgZGlyZWN0b3J5IGhhcyBkZWZhdWx0IEFDTCxcbiAgKiB0aGVuIGNsb25lIHRvIG5ldyBpbm9kZS4gQ2FsbGVkIGZyb20gb2NmczJfbWtub2QuXG4gICovXG4taW50IG9jZnMyX2luaXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsXG4tXHRcdCAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tXHRcdCAgIHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHQgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoLFxuLVx0XHQgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpcl9iaCxcbi1cdFx0ICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMsXG4tXHRcdCAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICpkYXRhX2FjKVxuK3ZvaWQgb2NmczJfYWNsX2luaXRfcmVsZWFzZShzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICpzdGF0ZSlcbit7XG4rXHRwb3NpeF9hY2xfcmVsZWFzZShzdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCk7XG4rXHRwb3NpeF9hY2xfcmVsZWFzZShzdGF0ZS1cdTAwM2VhY2wpO1xuK1x0c3RhdGUtXHUwMDNlZGVmYXVsdF9hY2wgPSBOVUxMO1xuK1x0c3RhdGUtXHUwMDNlYWNsID0gTlVMTDtcbit9XG4rXG4raW50IG9jZnMyX2FjbF9pbml0X3ByZXBhcmUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4rXHRcdFx0ICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJfYmgsXG4rXHRcdFx0ICAgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqc3RhdGUpXG4ge1xuIFx0c3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihpbm9kZS1cdTAwM2VpX3NiKTtcbi1cdHN0cnVjdCBwb3NpeF9hY2wgKmFjbCA9IE5VTEw7XG4tXHRpbnQgcmV0ID0gMCwgcmV0Mjtcbi1cdHVtb2RlX3QgbW9kZTtcbi1cbi1cdGlmICghU19JU0xOSyhpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG4tXHRcdGlmIChvc2ItXHUwMDNlc19tb3VudF9vcHQgXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkge1xuLVx0XHRcdGRvd25fcmVhZChcdTAwMjZPQ0ZTMl9JKGRpciktXHUwMDNlaXBfeGF0dHJfc2VtKTtcbi1cdFx0XHRhY2wgPSBvY2ZzMl9nZXRfYWNsX25vbG9jayhkaXIsIEFDTF9UWVBFX0RFRkFVTFQsXG4tXHRcdFx0XHRcdFx0ICAgZGlyX2JoKTtcbi1cdFx0XHR1cF9yZWFkKFx1MDAyNk9DRlMyX0koZGlyKS1cdTAwM2VpcF94YXR0cl9zZW0pO1xuLVx0XHRcdGlmIChJU19FUlIoYWNsKSlcbi1cdFx0XHRcdHJldHVybiBQVFJfRVJSKGFjbCk7XG4rXHRpbnQgcmV0ID0gMDtcbitcbitcdHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsID0gTlVMTDtcbitcdHN0YXRlLVx1MDAzZWFjbCA9IE5VTEw7XG4rXHRzdGF0ZS1cdTAwM2Vtb2RlID0gaW5vZGUtXHUwMDNlaV9tb2RlO1xuK1xuK1x0aWYgKFNfSVNMTksoaW5vZGUtXHUwMDNlaV9tb2RlKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAob3NiLVx1MDAzZXNfbW91bnRfb3B0IFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHtcbitcdFx0ZG93bl9yZWFkKFx1MDAyNk9DRlMyX0koZGlyKS1cdTAwM2VpcF94YXR0cl9zZW0pO1xuK1x0XHRzdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCA9XG4rXHRcdFx0b2NmczJfZ2V0X2FjbF9ub2xvY2soZGlyLCBBQ0xfVFlQRV9ERUZBVUxULCBkaXJfYmgpO1xuK1x0XHR1cF9yZWFkKFx1MDAyNk9DRlMyX0koZGlyKS1cdTAwM2VpcF94YXR0cl9zZW0pO1xuK1x0XHRpZiAoSVNfRVJSKHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsKSkge1xuK1x0XHRcdHJldCA9IFBUUl9FUlIoc3RhdGUtXHUwMDNlZGVmYXVsdF9hY2wpO1xuK1x0XHRcdHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsID0gTlVMTDtcbitcdFx0XHRyZXR1cm4gcmV0O1xuIFx0XHR9XG4tXHRcdGlmICghYWNsKSB7XG4tXHRcdFx0bW9kZSA9IGlub2RlLVx1MDAzZWlfbW9kZSBcdTAwMjYgfmN1cnJlbnRfdW1hc2soKTtcbi1cdFx0XHRyZXQgPSBvY2ZzMl9hY2xfc2V0X21vZGUoaW5vZGUsIGRpX2JoLCBoYW5kbGUsIG1vZGUpO1xuLVx0XHRcdGlmIChyZXQpIHtcbi1cdFx0XHRcdG1sb2dfZXJybm8ocmV0KTtcbitcdFx0aWYgKHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsKSB7XG4rXHRcdFx0c3RhdGUtXHUwMDNlYWNsID0gcG9zaXhfYWNsX2R1cChzdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCk7XG4rXHRcdFx0aWYgKCFzdGF0ZS1cdTAwM2VhY2wpIHtcbitcdFx0XHRcdHJldCA9IC1FTk9NRU07XG4gXHRcdFx0XHRnb3RvIGNsZWFudXA7XG4gXHRcdFx0fVxuK1x0XHRcdHJldCA9IF9fcG9zaXhfYWNsX2NyZWF0ZShcdTAwMjZzdGF0ZS1cdTAwM2VhY2wsIEdGUF9OT0ZTLFxuK1x0XHRcdFx0XHRcdCBcdTAwMjZzdGF0ZS1cdTAwM2Vtb2RlKTtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0Z290byBjbGVhbnVwO1xuK1x0XHRcdGlmIChyZXQgPT0gMCkge1xuK1x0XHRcdFx0cG9zaXhfYWNsX3JlbGVhc2Uoc3RhdGUtXHUwMDNlYWNsKTtcbitcdFx0XHRcdHN0YXRlLVx1MDAzZWFjbCA9IE5VTEw7XG4rXHRcdFx0fVxuK1x0XHRcdGlmICghU19JU0RJUihpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG4rXHRcdFx0XHRwb3NpeF9hY2xfcmVsZWFzZShzdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCk7XG4rXHRcdFx0XHRzdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCA9IE5VTEw7XG4rXHRcdFx0fVxuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdHN0YXRlLVx1MDAzZW1vZGUgXHUwMDI2PSB+Y3VycmVudF91bWFzaygpO1xuIFx0XHR9XG4rXHR9IGVsc2Uge1xuK1x0XHRzdGF0ZS1cdTAwM2Vtb2RlIFx1MDAyNj0gfmN1cnJlbnRfdW1hc2soKTtcbiBcdH1cbi1cdGlmICgob3NiLVx1MDAzZXNfbW91bnRfb3B0IFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIFx1MDAyNlx1MDAyNiBhY2wpIHtcbi1cdFx0aWYgKFNfSVNESVIoaW5vZGUtXHUwMDNlaV9tb2RlKSkge1xuK1xuK1x0cmV0dXJuIDA7XG4rY2xlYW51cDpcbitcdG9jZnMyX2FjbF9pbml0X3JlbGVhc2Uoc3RhdGUpO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4raW50IG9jZnMyX2luaXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4rXHRcdCAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgsXG4rXHRcdCAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjLFxuK1x0XHQgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqZGF0YV9hYyxcbitcdFx0ICAgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqc3RhdGUpXG4re1xuK1x0c3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihpbm9kZS1cdTAwM2VpX3NiKTtcbitcdGludCByZXQgPSAwO1xuK1xuK1x0aWYgKFNfSVNMTksoaW5vZGUtXHUwMDNlaV9tb2RlKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAob3NiLVx1MDAzZXNfbW91bnRfb3B0IFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHtcbitcdFx0aWYgKFNfSVNESVIoaW5vZGUtXHUwMDNlaV9tb2RlKSBcdTAwMjZcdTAwMjYgc3RhdGUtXHUwMDNlZGVmYXVsdF9hY2wpIHtcbiBcdFx0XHRyZXQgPSBvY2ZzMl9zZXRfYWNsKGhhbmRsZSwgaW5vZGUsIGRpX2JoLFxuLVx0XHRcdFx0XHQgICAgQUNMX1RZUEVfREVGQVVMVCwgYWNsLFxuLVx0XHRcdFx0XHQgICAgbWV0YV9hYywgZGF0YV9hYyk7XG4rXHRcdFx0XHRcdCAgICBBQ0xfVFlQRV9ERUZBVUxULFxuK1x0XHRcdFx0XHQgICAgc3RhdGUtXHUwMDNlZGVmYXVsdF9hY2wsIG1ldGFfYWMsXG4rXHRcdFx0XHRcdCAgICBkYXRhX2FjKTtcbiBcdFx0XHRpZiAocmV0KVxuLVx0XHRcdFx0Z290byBjbGVhbnVwO1xuK1x0XHRcdFx0cmV0dXJuIHJldDtcbiBcdFx0fVxuLVx0XHRtb2RlID0gaW5vZGUtXHUwMDNlaV9tb2RlO1xuLVx0XHRyZXQgPSBfX3Bvc2l4X2FjbF9jcmVhdGUoXHUwMDI2YWNsLCBHRlBfTk9GUywgXHUwMDI2bW9kZSk7XG4tXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0cmV0dXJuIHJldDtcbitcdH1cbiBcbi1cdFx0cmV0MiA9IG9jZnMyX2FjbF9zZXRfbW9kZShpbm9kZSwgZGlfYmgsIGhhbmRsZSwgbW9kZSk7XG4tXHRcdGlmIChyZXQyKSB7XG4tXHRcdFx0bWxvZ19lcnJubyhyZXQyKTtcbi1cdFx0XHRyZXQgPSByZXQyO1xuLVx0XHRcdGdvdG8gY2xlYW51cDtcbi1cdFx0fVxuLVx0XHRpZiAocmV0IFx1MDAzZSAwKSB7XG4tXHRcdFx0cmV0ID0gb2NmczJfc2V0X2FjbChoYW5kbGUsIGlub2RlLFxuLVx0XHRcdFx0XHQgICAgZGlfYmgsIEFDTF9UWVBFX0FDQ0VTUyxcbi1cdFx0XHRcdFx0ICAgIGFjbCwgbWV0YV9hYywgZGF0YV9hYyk7XG4rXHRyZXQgPSBvY2ZzMl9hY2xfc2V0X21vZGUoaW5vZGUsIGRpX2JoLCBoYW5kbGUsIHN0YXRlLVx1MDAzZW1vZGUpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRtbG9nX2Vycm5vKHJldCk7XG4rXHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHRpZiAob3NiLVx1MDAzZXNfbW91bnRfb3B0IFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHtcbitcdFx0aWYgKHN0YXRlLVx1MDAzZWFjbCkge1xuK1x0XHRcdHJldCA9IG9jZnMyX3NldF9hY2woaGFuZGxlLCBpbm9kZSwgZGlfYmgsXG4rXHRcdFx0XHRcdCAgICBBQ0xfVFlQRV9BQ0NFU1MsIHN0YXRlLVx1MDAzZWFjbCxcbitcdFx0XHRcdFx0ICAgIG1ldGFfYWMsIGRhdGFfYWMpO1xuIFx0XHR9XG4gXHR9XG4tY2xlYW51cDpcbi1cdHBvc2l4X2FjbF9yZWxlYXNlKGFjbCk7XG4rXG4gXHRyZXR1cm4gcmV0O1xuIH1cbmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9hY2wuaCBiL2ZzL29jZnMyL2FjbC5oXG5pbmRleCA2NjdjNmYwM2ZhNjA2Li5hOTFmOWNlMjc4ZDZkIDEwMDY0NFxuLS0tIGEvZnMvb2NmczIvYWNsLmhcbisrKyBiL2ZzL29jZnMyL2FjbC5oXG5AQCAtMjAsOSArMjAsMjAgQEAgc3RydWN0IHBvc2l4X2FjbCAqb2NmczJfaW9wX2dldF9hY2woc3RydWN0IGlub2RlICppbm9kZSwgaW50IHR5cGUsIGJvb2wgcmN1KTtcbiBpbnQgb2NmczJfaW9wX3NldF9hY2woc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiBcdFx0ICAgICAgc3RydWN0IHBvc2l4X2FjbCAqYWNsLCBpbnQgdHlwZSk7XG4gZXh0ZXJuIGludCBvY2ZzMl9hY2xfY2htb2Qoc3RydWN0IGlub2RlICosIHN0cnVjdCBidWZmZXJfaGVhZCAqKTtcbi1leHRlcm4gaW50IG9jZnMyX2luaXRfYWNsKGhhbmRsZV90ICosIHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgaW5vZGUgKixcbi1cdFx0XHQgIHN0cnVjdCBidWZmZXJfaGVhZCAqLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKixcbi1cdFx0XHQgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICosXG4tXHRcdFx0ICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqKTtcbitzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlIHtcbitcdHN0cnVjdCBwb3NpeF9hY2wgKmRlZmF1bHRfYWNsO1xuK1x0c3RydWN0IHBvc2l4X2FjbCAqYWNsO1xuK1x0dW1vZGVfdCBtb2RlO1xuK307XG4rXG4raW50IG9jZnMyX2FjbF9pbml0X3ByZXBhcmUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4rXHRcdFx0ICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJfYmgsXG4rXHRcdFx0ICAgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqc3RhdGUpO1xuK3ZvaWQgb2NmczJfYWNsX2luaXRfcmVsZWFzZShzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICpzdGF0ZSk7XG4raW50IG9jZnMyX2luaXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4rXHRcdCAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgsXG4rXHRcdCAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjLFxuK1x0XHQgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqZGF0YV9hYyxcbitcdFx0ICAgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqc3RhdGUpO1xuIFxuICNlbmRpZiAvKiBPQ0ZTMl9BQ0xfSCAqL1xuZGlmZiAtLWdpdCBhL2ZzL29jZnMyL25hbWVpLmMgYi9mcy9vY2ZzMi9uYW1laS5jXG5pbmRleCAxMjc3NjY2Yzc3Y2QyLi5lYTM3YTUwNTgwODkwIDEwMDY0NFxuLS0tIGEvZnMvb2NmczIvbmFtZWkuY1xuKysrIGIvZnMvb2NmczIvbmFtZWkuY1xuQEAgLTI1Niw2ICsyNTYsNyBAQCBzdGF0aWMgaW50IG9jZnMyX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0c2lnc2V0X3Qgb2xkc2V0O1xuIFx0aW50IGRpZF9ibG9ja19zaWduYWxzID0gMDtcbiBcdHN0cnVjdCBvY2ZzMl9kZW50cnlfbG9jayAqZGwgPSBOVUxMO1xuK1x0c3RydWN0IG9jZnMyX2FjbF9zdGF0ZSBhY2xfc3RhdGUgPSB7IDAgfTtcbiBcbiBcdHRyYWNlX29jZnMyX21rbm9kKGRpciwgZGVudHJ5LCBkZW50cnktXHUwMDNlZF9uYW1lLmxlbiwgZGVudHJ5LVx1MDAzZWRfbmFtZS5uYW1lLFxuIFx0XHRcdCAgKHVuc2lnbmVkIGxvbmcgbG9uZylPQ0ZTMl9JKGRpciktXHUwMDNlaXBfYmxrbm8sXG5AQCAtMzMwLDEwICszMzEsMTQgQEAgc3RhdGljIGludCBvY2ZzMl9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdFx0fVxuIFx0fVxuIFxuK1x0c3RhdHVzID0gb2NmczJfYWNsX2luaXRfcHJlcGFyZShpbm9kZSwgZGlyLCBwYXJlbnRfZmVfYmgsIFx1MDAyNmFjbF9zdGF0ZSk7XG4rXHRpZiAoc3RhdHVzIFx1MDAzYyAwKVxuK1x0XHRnb3RvIGxlYXZlO1xuK1xuIFx0LyogY2FsY3VsYXRlIG1ldGEgZGF0YS9jbHVzdGVycyBmb3Igc2V0dGluZyBzZWN1cml0eSBhbmQgYWNsIHhhdHRyICovXG4tXHRzdGF0dXMgPSBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoZGlyLCBwYXJlbnRfZmVfYmgsIG1vZGUsXG4tXHRcdFx0XHQgICAgICAgXHUwMDI2c2ksIFx1MDAyNndhbnRfY2x1c3RlcnMsXG4tXHRcdFx0XHQgICAgICAgXHUwMDI2eGF0dHJfY3JlZGl0cywgXHUwMDI2d2FudF9tZXRhKTtcbitcdHN0YXR1cyA9IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChkaXIsIG1vZGUsIFx1MDAyNnNpLCBcdTAwMjZ3YW50X2NsdXN0ZXJzLFxuK1x0XHRcdFx0ICAgICAgIFx1MDAyNnhhdHRyX2NyZWRpdHMsIFx1MDAyNndhbnRfbWV0YSxcbitcdFx0XHRcdCAgICAgICBcdTAwMjZhY2xfc3RhdGUpO1xuIFx0aWYgKHN0YXR1cyBcdTAwM2MgMCkge1xuIFx0XHRtbG9nX2Vycm5vKHN0YXR1cyk7XG4gXHRcdGdvdG8gbGVhdmU7XG5AQCAtNDExLDggKzQxNiw4IEBAIHN0YXRpYyBpbnQgb2NmczJfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRcdGluY19ubGluayhkaXIpO1xuIFx0fVxuIFxuLVx0c3RhdHVzID0gb2NmczJfaW5pdF9hY2woaGFuZGxlLCBpbm9kZSwgZGlyLCBuZXdfZmVfYmgsIHBhcmVudF9mZV9iaCxcbi1cdFx0XHQgbWV0YV9hYywgZGF0YV9hYyk7XG4rXHRzdGF0dXMgPSBvY2ZzMl9pbml0X2FjbChoYW5kbGUsIGlub2RlLCBuZXdfZmVfYmgsIG1ldGFfYWMsIGRhdGFfYWMsXG4rXHRcdFx0XHRcdTAwMjZhY2xfc3RhdGUpO1xuIFxuIFx0aWYgKHN0YXR1cyBcdTAwM2MgMCkge1xuIFx0XHRtbG9nX2Vycm5vKHN0YXR1cyk7XG5AQCAtNDc3LDYgKzQ4Miw4IEBAIHN0YXRpYyBpbnQgb2NmczJfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRicmVsc2UocGFyZW50X2ZlX2JoKTtcbiBcdGtmcmVlKHNpLnZhbHVlKTtcbiBcbitcdG9jZnMyX2FjbF9pbml0X3JlbGVhc2UoXHUwMDI2YWNsX3N0YXRlKTtcbitcbiBcdG9jZnMyX2ZyZWVfZGlyX2xvb2t1cF9yZXN1bHQoXHUwMDI2bG9va3VwKTtcbiBcbiBcdGlmIChpbm9kZV9hYylcbmRpZmYgLS1naXQgYS9mcy9vY2ZzMi94YXR0ci5jIGIvZnMvb2NmczIveGF0dHIuY1xuaW5kZXggZmNkZGQzYzEzYWNkZC4uODZmMDI5MzY4MWZjYyAxMDA2NDRcbi0tLSBhL2ZzL29jZnMyL3hhdHRyLmNcbisrKyBiL2ZzL29jZnMyL3hhdHRyLmNcbkBAIC02MTEsMTMgKzYxMSwxMCBAQCBpbnQgb2NmczJfY2FsY19zZWN1cml0eV9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4taW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0XHQgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlyX2JoLFxuLVx0XHRcdCAgdW1vZGVfdCBtb2RlLFxuK2ludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICpkaXIsIHVtb2RlX3QgbW9kZSxcbiBcdFx0XHQgIHN0cnVjdCBvY2ZzMl9zZWN1cml0eV94YXR0cl9pbmZvICpzaSxcbi1cdFx0XHQgIGludCAqd2FudF9jbHVzdGVycyxcbi1cdFx0XHQgIGludCAqeGF0dHJfY3JlZGl0cyxcbi1cdFx0XHQgIGludCAqd2FudF9tZXRhKVxuK1x0XHRcdCAgaW50ICp3YW50X2NsdXN0ZXJzLCBpbnQgKnhhdHRyX2NyZWRpdHMsXG4rXHRcdFx0ICBpbnQgKndhbnRfbWV0YSwgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqYWNsX3N0YXRlKVxuIHtcbiBcdGludCByZXQgPSAwO1xuIFx0c3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihkaXItXHUwMDNlaV9zYik7XG5AQCAtNjI4LDE5ICs2MjUsMTUgQEAgaW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0XHRcdFx0XHQgICAgIHNpLVx1MDAzZXZhbHVlX2xlbik7XG4gXG4gXHRpZiAob3NiLVx1MDAzZXNfbW91bnRfb3B0IFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHtcbi1cdFx0ZG93bl9yZWFkKFx1MDAyNk9DRlMyX0koZGlyKS1cdTAwM2VpcF94YXR0cl9zZW0pO1xuLVx0XHRhY2xfbGVuID0gb2NmczJfeGF0dHJfZ2V0X25vbG9jayhkaXIsIGRpcl9iaCxcbi1cdFx0XHRcdFx0T0NGUzJfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0RFRkFVTFQsXG4tXHRcdFx0XHRcdFwiXCIsIE5VTEwsIDApO1xuLVx0XHR1cF9yZWFkKFx1MDAyNk9DRlMyX0koZGlyKS1cdTAwM2VpcF94YXR0cl9zZW0pO1xuLVx0XHRpZiAoYWNsX2xlbiBcdTAwM2UgMCkge1xuLVx0XHRcdGFfc2l6ZSA9IG9jZnMyX3hhdHRyX2VudHJ5X3JlYWxfc2l6ZSgwLCBhY2xfbGVuKTtcbi1cdFx0XHRpZiAoU19JU0RJUihtb2RlKSlcbi1cdFx0XHRcdGFfc2l6ZSBcdTAwM2NcdTAwM2M9IDE7XG4tXHRcdH0gZWxzZSBpZiAoYWNsX2xlbiAhPSAwIFx1MDAyNlx1MDAyNiBhY2xfbGVuICE9IC1FTk9EQVRBKSB7XG4tXHRcdFx0cmV0ID0gYWNsX2xlbjtcbi1cdFx0XHRtbG9nX2Vycm5vKHJldCk7XG4tXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0aWYgKGFjbF9zdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCBcdTAwMjZcdTAwMjYgU19JU0RJUihtb2RlKSkge1xuK1x0XHRcdGFjbF9sZW4gPSBhY2xfc3RhdGUtXHUwMDNlZGVmYXVsdF9hY2wtXHUwMDNlYV9jb3VudCAqXG4rXHRcdFx0XHQgIHNpemVvZihzdHJ1Y3Qgb2NmczJfYWNsX2VudHJ5KTtcbitcdFx0XHRhX3NpemUgKz0gb2NmczJfeGF0dHJfZW50cnlfcmVhbF9zaXplKDAsIGFjbF9sZW4pO1xuK1x0XHR9XG4rXHRcdGlmIChhY2xfc3RhdGUtXHUwMDNlYWNsKSB7XG4rXHRcdFx0YWNsX2xlbiA9IGFjbF9zdGF0ZS1cdTAwM2VhY2wtXHUwMDNlYV9jb3VudCAqXG4rXHRcdFx0XHQgIHNpemVvZihzdHJ1Y3Qgb2NmczJfYWNsX2VudHJ5KTtcbitcdFx0XHRhX3NpemUgKz0gb2NmczJfeGF0dHJfZW50cnlfcmVhbF9zaXplKDAsIGFjbF9sZW4pO1xuIFx0XHR9XG4gXHR9XG4gXG5AQCAtNjgzLDE0ICs2NzYsMzMgQEAgaW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0XHRcdFx0XHRcdCAgIG5ld19jbHVzdGVycyk7XG4gXHRcdCp3YW50X2NsdXN0ZXJzICs9IG5ld19jbHVzdGVycztcbiBcdH1cbi1cdGlmIChvc2ItXHUwMDNlc19tb3VudF9vcHQgXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCBcdTAwMjZcdTAwMjZcbi1cdCAgICBhY2xfbGVuIFx1MDAzZSBPQ0ZTMl9YQVRUUl9JTkxJTkVfU0laRSkge1xuLVx0XHQvKiBmb3IgZGlyZWN0b3J5LCBpdCBoYXMgREVGQVVMVCBhbmQgQUNDRVNTIHR3byB0eXBlcyBvZiBhY2xzICovXG4tXHRcdG5ld19jbHVzdGVycyA9IChTX0lTRElSKG1vZGUpID8gMiA6IDEpICpcbi1cdFx0XHRcdG9jZnMyX2NsdXN0ZXJzX2Zvcl9ieXRlcyhkaXItXHUwMDNlaV9zYiwgYWNsX2xlbik7XG4tXHRcdCp4YXR0cl9jcmVkaXRzICs9IG9jZnMyX2NsdXN0ZXJzX3RvX2Jsb2NrcyhkaXItXHUwMDNlaV9zYixcbi1cdFx0XHRcdFx0XHRcdCAgIG5ld19jbHVzdGVycyk7XG4tXHRcdCp3YW50X2NsdXN0ZXJzICs9IG5ld19jbHVzdGVycztcbitcdGlmIChvc2ItXHUwMDNlc19tb3VudF9vcHQgXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkge1xuK1x0XHRpZiAoYWNsX3N0YXRlLVx1MDAzZWRlZmF1bHRfYWNsIFx1MDAyNlx1MDAyNiBTX0lTRElSKG1vZGUpKSB7XG4rXHRcdFx0YWNsX2xlbiA9IGFjbF9zdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbC1cdTAwM2VhX2NvdW50ICpcbitcdFx0XHRcdCAgc2l6ZW9mKHN0cnVjdCBvY2ZzMl9hY2xfZW50cnkpO1xuK1x0XHRcdGlmIChhY2xfbGVuIFx1MDAzZSBPQ0ZTMl9YQVRUUl9JTkxJTkVfU0laRSkge1xuK1x0XHRcdFx0bmV3X2NsdXN0ZXJzID1cbitcdFx0XHRcdFx0b2NmczJfY2x1c3RlcnNfZm9yX2J5dGVzKGRpci1cdTAwM2VpX3NiLFxuK1x0XHRcdFx0XHRcdFx0XHQgYWNsX2xlbik7XG4rXHRcdFx0XHQqeGF0dHJfY3JlZGl0cyArPVxuK1x0XHRcdFx0XHRvY2ZzMl9jbHVzdGVyc190b19ibG9ja3MoZGlyLVx1MDAzZWlfc2IsXG4rXHRcdFx0XHRcdFx0XHRcdCBuZXdfY2x1c3RlcnMpO1xuK1x0XHRcdFx0KndhbnRfY2x1c3RlcnMgKz0gbmV3X2NsdXN0ZXJzO1xuK1x0XHRcdH1cbitcdFx0fVxuK1x0XHRpZiAoYWNsX3N0YXRlLVx1MDAzZWFjbCkge1xuK1x0XHRcdGFjbF9sZW4gPSBhY2xfc3RhdGUtXHUwMDNlYWNsLVx1MDAzZWFfY291bnQgKlxuK1x0XHRcdFx0ICBzaXplb2Yoc3RydWN0IG9jZnMyX2FjbF9lbnRyeSk7XG4rXHRcdFx0aWYgKGFjbF9sZW4gXHUwMDNlIE9DRlMyX1hBVFRSX0lOTElORV9TSVpFKSB7XG4rXHRcdFx0XHRuZXdfY2x1c3RlcnMgPVxuK1x0XHRcdFx0XHRvY2ZzMl9jbHVzdGVyc19mb3JfYnl0ZXMoZGlyLVx1MDAzZWlfc2IsXG4rXHRcdFx0XHRcdFx0XHRcdCBhY2xfbGVuKTtcbitcdFx0XHRcdCp4YXR0cl9jcmVkaXRzICs9XG4rXHRcdFx0XHRcdG9jZnMyX2NsdXN0ZXJzX3RvX2Jsb2NrcyhkaXItXHUwMDNlaV9zYixcbitcdFx0XHRcdFx0XHRcdFx0IG5ld19jbHVzdGVycyk7XG4rXHRcdFx0XHQqd2FudF9jbHVzdGVycyArPSBuZXdfY2x1c3RlcnM7XG4rXHRcdFx0fVxuK1x0XHR9XG4gXHR9XG4gXG4gXHRyZXR1cm4gcmV0O1xuQEAgLTM0ODMsOSArMzQ5NSwxMCBAQCBzdGF0aWMgaW50IF9fb2NmczJfeGF0dHJfc2V0X2hhbmRsZShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIH1cbiBcbiAvKlxuLSAqIFRoaXMgZnVuY3Rpb24gb25seSBjYWxsZWQgZHVpbmcgY3JlYXRpbmcgaW5vZGVcbi0gKiBmb3IgaW5pdCBzZWN1cml0eS9hY2wgeGF0dHJzIG9mIHRoZSBuZXcgaW5vZGUuXG4tICogQWxsIHRyYW5zYW5jdGlvbiBjcmVkaXRzIGhhdmUgYmVlbiByZXNlcnZlZCBpbiBta25vZC5cbisgKiBUaGlzIGhlbHBlciBpcyBvbmx5IGZvciBzZXR0aW5nIGluaXRpYWwgQUNMIG9yIHNlY3VyaXR5IHhhdHRycyBvbiBhbiBpbm9kZVxuKyAqIHRoYXQgaXMgc3RpbGwgdW5wdWJsaXNoZWQsIHVuaGFzaGVkLCBhbmQgdW5hdHRhY2hlZCB0byBhIGRlbnRyeS5cbisgKiBPcmRpbmFyeSB4YXR0ciB1cGRhdGVzIG11c3QgdXNlIG9jZnMyX3hhdHRyX3NldCgpLlxuKyAqIEFsbCB0cmFuc2FjdGlvbiBjcmVkaXRzIGhhdmUgYmVlbiByZXNlcnZlZCBpbiBta25vZCBvciBzeW1saW5rIGNhbGxlcnMuXG4gICovXG4gaW50IG9jZnMyX3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlX3QgKmhhbmRsZSxcbiBcdFx0XHQgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuQEAgLTM1NDIsOCArMzU1NSw2IEBAIGludCBvY2ZzMl94YXR0cl9zZXRfaGFuZGxlKGhhbmRsZV90ICpoYW5kbGUsXG4gXHR4aXMuaW5vZGVfYmggPSB4YnMuaW5vZGVfYmggPSBkaV9iaDtcbiBcdGRpID0gKHN0cnVjdCBvY2ZzMl9kaW5vZGUgKilkaV9iaC1cdTAwM2ViX2RhdGE7XG4gXG4tXHRkb3duX3dyaXRlKFx1MDAyNk9DRlMyX0koaW5vZGUpLVx1MDAzZWlwX3hhdHRyX3NlbSk7XG4tXG4gXHRyZXQgPSBvY2ZzMl94YXR0cl9pYm9keV9maW5kKGlub2RlLCBuYW1lX2luZGV4LCBuYW1lLCBcdTAwMjZ4aXMpO1xuIFx0aWYgKHJldClcbiBcdFx0Z290byBjbGVhbnVwO1xuQEAgLTM1NTYsNyArMzU2Nyw2IEBAIGludCBvY2ZzMl94YXR0cl9zZXRfaGFuZGxlKGhhbmRsZV90ICpoYW5kbGUsXG4gXHRyZXQgPSBfX29jZnMyX3hhdHRyX3NldF9oYW5kbGUoaW5vZGUsIGRpLCBcdTAwMjZ4aSwgXHUwMDI2eGlzLCBcdTAwMjZ4YnMsIFx1MDAyNmN0eHQpO1xuIFxuIGNsZWFudXA6XG4tXHR1cF93cml0ZShcdTAwMjZPQ0ZTMl9JKGlub2RlKS1cdTAwM2VpcF94YXR0cl9zZW0pO1xuIFx0YnJlbHNlKHhicy54YXR0cl9iaCk7XG4gXHRvY2ZzMl94YXR0cl9idWNrZXRfZnJlZSh4YnMuYnVja2V0KTtcbiBcbkBAIC03MjU3LDYgKzcyNjcsNyBAQCBpbnQgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsKHN0cnVjdCBpbm9kZSAqZGlyLFxuIHtcbiBcdGludCByZXQgPSAwO1xuIFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJfYmggPSBOVUxMO1xuK1x0c3RydWN0IG9jZnMyX2FjbF9zdGF0ZSBhY2xfc3RhdGUgPSB7IDAgfTtcbiBcbiBcdHJldCA9IG9jZnMyX2luaXRfc2VjdXJpdHlfZ2V0KGlub2RlLCBkaXIsIHFzdHIsIE5VTEwpO1xuIFx0aWYgKHJldCkge1xuQEAgLTcyNjksMTAgKzcyODAsMTcgQEAgaW50IG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbChzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0bWxvZ19lcnJubyhyZXQpO1xuIFx0XHRnb3RvIGxlYXZlO1xuIFx0fVxuLVx0cmV0ID0gb2NmczJfaW5pdF9hY2woTlVMTCwgaW5vZGUsIGRpciwgTlVMTCwgZGlyX2JoLCBOVUxMLCBOVUxMKTtcbitcbitcdHJldCA9IG9jZnMyX2FjbF9pbml0X3ByZXBhcmUoaW5vZGUsIGRpciwgZGlyX2JoLCBcdTAwMjZhY2xfc3RhdGUpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byB1bmxvY2s7XG4rXG4rXHRyZXQgPSBvY2ZzMl9pbml0X2FjbChOVUxMLCBpbm9kZSwgTlVMTCwgTlVMTCwgTlVMTCwgXHUwMDI2YWNsX3N0YXRlKTtcbiBcdGlmIChyZXQpXG4gXHRcdG1sb2dfZXJybm8ocmV0KTtcbiBcbit1bmxvY2s6XG4rXHRvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlKFx1MDAyNmFjbF9zdGF0ZSk7XG4gXHRvY2ZzMl9pbm9kZV91bmxvY2soZGlyLCAwKTtcbiBcdGJyZWxzZShkaXJfYmgpO1xuIGxlYXZlOlxuZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3hhdHRyLmggYi9mcy9vY2ZzMi94YXR0ci5oXG5pbmRleCA2NWU5YWE3NDM5MTk5Li41Y2RkNmM2YjQwMDY0IDEwMDY0NFxuLS0tIGEvZnMvb2NmczIveGF0dHIuaFxuKysrIGIvZnMvb2NmczIveGF0dHIuaFxuQEAgLTU1LDkgKzU1LDEyIEBAIGludCBvY2ZzMl9pbml0X3NlY3VyaXR5X3NldChoYW5kbGVfdCAqLCBzdHJ1Y3QgaW5vZGUgKixcbiBpbnQgb2NmczJfY2FsY19zZWN1cml0eV9pbml0KHN0cnVjdCBpbm9kZSAqLFxuIFx0XHRcdCAgICAgc3RydWN0IG9jZnMyX3NlY3VyaXR5X3hhdHRyX2luZm8gKixcbiBcdFx0XHQgICAgIGludCAqLCBpbnQgKiwgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKiopO1xuLWludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICosIHN0cnVjdCBidWZmZXJfaGVhZCAqLFxuLVx0XHRcdCAgdW1vZGVfdCwgc3RydWN0IG9jZnMyX3NlY3VyaXR5X3hhdHRyX2luZm8gKixcbi1cdFx0XHQgIGludCAqLCBpbnQgKiwgaW50ICopO1xuK1xuK3N0cnVjdCBvY2ZzMl9hY2xfc3RhdGU7XG4raW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpciwgdW1vZGVfdCBtb2RlLFxuK1x0XHRcdCAgc3RydWN0IG9jZnMyX3NlY3VyaXR5X3hhdHRyX2luZm8gKnNpLFxuK1x0XHRcdCAgaW50ICp3YW50X2NsdXN0ZXJzLCBpbnQgKnhhdHRyX2NyZWRpdHMsXG4rXHRcdFx0ICBpbnQgKndhbnRfbWV0YSwgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqYWNsX3N0YXRlKTtcbiBcbiAvKlxuICAqIHhhdHRycyBjYW4gbGl2ZSBpbnNpZGUgYW4gaW5vZGUsIGFzIHBhcnQgb2YgYW4gZXh0ZXJuYWwgeGF0dHIgYmxvY2ssXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwODowNzozMS4yMDEyNDk2OTlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDA5Njg3MjgwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWZhY3RvcmluZyBPQ0ZTMiBBQ0wgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQncyB0b3VjaGluZyBzb21lIGNvcmUgT0NGUzIgZmlsZXM6IGBhY2wuY2AsIGBhY2wuaGAsIGBuYW1laS5jYCwgYW5kIGB4YXR0ci5jYC4gTXkgaW5pdGlhbCByZWFkIGlzIHRoYXQgdGhpcyBpcyBmb2N1c2VkIG9uIHJlZmFjdG9yaW5nIEFDTCBpbml0aWFsaXphdGlvbiB3aXRoaW4gdGhlIGZpbGVzeXN0ZW0uIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgbGlrZSB0aGV5J3JlIGFkZHJlc3NpbmcgYSBsb2NraW5nIGlzc3VlLiBJIHNlZSB0aGV5J3JlIG1vZGlmeWluZyB0aGUgYG9jZnMyX2luaXRfYWNsYCBmdW5jdGlvbiBhbmQgcmVsYXRlZCBjb2RlLiBBcHBhcmVudGx5LCB0aGVyZSB3YXMgYSBwcm9ibGVtIHdpdGggYG9jZnMyX2luaXRfYWNsYCB0cnlpbmcgdG8gYWNxdWlyZSB0aGUgYGlwX3hhdHRyX3NlbWAgbG9jay5cblxuTm93LCBJIHNlZSB0aGUgaW50cm9kdWN0aW9uIG9mIGBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlYCBhbmQgYG9jZnMyX2FjbF9pbml0X3JlbGVhc2VgIGZ1bmN0aW9ucywgd2hpY2ggc3VnZ2VzdHMgYSBtb3JlIGdyYW51bGFyIGNvbnRyb2wgb3ZlciB0aGUgQUNMIGluaXRpYWxpemF0aW9uIHByb2Nlc3MuIFRoZXkndmUgYWxzbyB1cGRhdGVkIGBvY2ZzMl9jYWxjX3hhdHRyX2luaXRgIHRvIHVzZSBhIGBzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICphY2xfc3RhdGVgLCBsaWtlbHkgdG8gcGFzcyBzdGF0ZSBpbmZvcm1hdGlvbiBhcm91bmQuIEFuZCwgaXQgc2VlbXMgbGlrZSB0aGV5J3ZlIHJlbW92ZWQgYGRvd25fd3JpdGUoXHUwMDI2T0NGUzJfSShpbm9kZSktXHUwMDNlaXBfeGF0dHJfc2VtKWAgZnJvbSBgb2NmczJfeGF0dHJfc2V0X2hhbmRsZWAuIFRoaXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgY2hhbmdlLlxuXG5NeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IGlzIHRoaXMgY29kZSByZWFjaGFibGUsIGFuZCBpcyBpdCBmdW5jdGlvbmFsPyBPQ0ZTMiBpcyBhIGZpbGUgc3lzdGVtLCByaWdodD8gWWVzLCBPcmFjbGUgQ2x1c3RlciBGaWxlIFN5c3RlbSAyLiBTbywgZGVmaW5pdGVseSByZWFjaGFibGUgdGhyb3VnaCBzdGFuZGFyZCBzeXNjYWxscyBsaWtlIGBta2RpcmAsIGBta25vZGAsIGFuZCBgY3JlYXRgIOKAkyB0aGUgdXN1YWwgc3VzcGVjdHMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoaXMgQUNMIGluaXRpYWxpemF0aW9uIGNvZGUgaXMgYWN0dWFsbHkgdXNlZC5cblxuVGltZSB0byBjaGVjayB0aGUgS2NvbmZpZy4gSSdsbCBmaXJlIHVwIGBkZWZhdWx0X2FwaTpncmVwcGVyYCB0byBsb2NhdGUgdGhlIE9DRlMyIEtjb25maWcgdG8gYmUgc3VyZSB0aGF0IGl0J3MgY29uZmlndXJlZCBhbmQgZW5hYmxlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIHRyaWdnZXJpbmcgdGhlIG5ldyBBQ0wgaW5pdGlhbGl6YXRpb24gZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzU2OSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDA4OjA4OjAxLjI5ODEyNjE0NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzQ3NDUxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgT0NGUzJfRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvb2NmczIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9vY2ZzMi9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvb2NmczIvS2NvbmZpZzoyOmNvbmZpZyBPQ0ZTMl9GU1xcbmZzL29jZnMyL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiT0NGUzIgZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCJcXG4tLVxcbmZzL29jZnMyL0tjb25maWctMjctXFxuZnMvb2NmczIvS2NvbmZpZzoyODpjb25maWcgT0NGUzJfRlNfTzJDQlxcbmZzL29jZnMyL0tjb25maWctMjktXFx0dHJpc3RhdGUgXFxcIk8yQ0IgS2VybmVsc3BhY2UgQ2x1c3RlcmluZ1xcXCJcXG4tLVxcbmZzL29jZnMyL0tjb25maWctNDEtXFxuZnMvb2NmczIvS2NvbmZpZzo0Mjpjb25maWcgT0NGUzJfRlNfVVNFUlNQQUNFX0NMVVNURVJcXG5mcy9vY2ZzMi9LY29uZmlnLTQzLVxcdHRyaXN0YXRlIFxcXCJPQ0ZTMiBVc2Vyc3BhY2UgQ2x1c3RlcmluZ1xcXCJcXG4tLVxcbmZzL29jZnMyL0tjb25maWctNTMtXFxuZnMvb2NmczIvS2NvbmZpZzo1NDpjb25maWcgT0NGUzJfRlNfU1RBVFNcXG5mcy9vY2ZzMi9LY29uZmlnLTU1LVxcdGJvb2wgXFxcIk9DRlMyIHN0YXRpc3RpY3NcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDA4OjA4OjAxLjM1NTYwNTgwM1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MDQzMjk4MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKk9DRlMyIENvbmZpZ3VyYXRpb24gRGl2ZSoqXG5cbkFscmlnaHQsIHNvIGBDT05GSUdfT0NGUzJfRlNgIGlzIHRoZSBjZW50cmFsIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGZvciB0aGUgT0NGUzIgZmlsZXN5c3RlbS4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGNoZWNrIGZvciBkZXBlbmRlbmNpZXMuIEkga25vdyB0aGlzIG1vZHVsZSBpcyBwcmV0dHkgc2VsZi1jb250YWluZWQsIGJ1dCBJIGFsd2F5cyB3YW50IHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueSBudWFuY2VkIHJlcXVpcmVtZW50cyBsdXJraW5nIHdpdGhpbiBvdGhlciBzdWJzeXN0ZW1zLiBJJ2xsIG5lZWQgdG8gcXVpY2tseSBjb25maXJtIHRoYXQgaXQgc3RhbmRzIGFsb25lIG9yIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIGtlcm5lbCBmZWF0dXJlcyB0aGF0IHdvdWxkIGluZmx1ZW5jZSBpdHMgYmVoYXZpb3Igb3IgbXkgdGVzdGluZyBzdHJhdGVneS4gQSBxdWljayBzY2FuIG9mIHRoZSBLY29uZmlnIHNob3VsZCByZXZlYWwgYW55IGZsYWdzIEkgbmVlZCB0byBjb25zaWRlciBmb3IgZW5hYmxpbmcgaXQgaW4gdGhpcyBzY2VuYXJpby5cblxuXG4iLCJJbnB1dFRva2VucyI6ODU3NCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDA4OjA4OjA1LjA1OTkzODE2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxNzczNTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlcGVuZHMgb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvb2NmczIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9vY2ZzMi9LY29uZmlnPTI9Y29uZmlnIE9DRlMyX0ZTXFxuZnMvb2NmczIvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJPQ0ZTMiBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcbmZzL29jZnMyL0tjb25maWc6NDpcXHRkZXBlbmRzIG9uIElORVQgXFx1MDAyNlxcdTAwMjYgU1lTRlMgXFx1MDAyNlxcdTAwMjYgQ09ORklHRlNfRlNcXG5mcy9vY2ZzMi9LY29uZmlnLTUtXFx0c2VsZWN0IEJVRkZFUl9IRUFEXFxuLS1cXG5mcy9vY2ZzMi9LY29uZmlnPTI4PWNvbmZpZyBPQ0ZTMl9GU19PMkNCXFxuZnMvb2NmczIvS2NvbmZpZy0yOS1cXHR0cmlzdGF0ZSBcXFwiTzJDQiBLZXJuZWxzcGFjZSBDbHVzdGVyaW5nXFxcIlxcbmZzL29jZnMyL0tjb25maWc6MzA6XFx0ZGVwZW5kcyBvbiBPQ0ZTMl9GU1xcbmZzL29jZnMyL0tjb25maWctMzEtXFx0ZGVmYXVsdCB5XFxuLS1cXG5mcy9vY2ZzMi9LY29uZmlnPTQyPWNvbmZpZyBPQ0ZTMl9GU19VU0VSU1BBQ0VfQ0xVU1RFUlxcbmZzL29jZnMyL0tjb25maWctNDMtXFx0dHJpc3RhdGUgXFxcIk9DRlMyIFVzZXJzcGFjZSBDbHVzdGVyaW5nXFxcIlxcbmZzL29jZnMyL0tjb25maWc6NDQ6XFx0ZGVwZW5kcyBvbiBPQ0ZTMl9GUyBcXHUwMDI2XFx1MDAyNiBETE1cXG5mcy9vY2ZzMi9LY29uZmlnLTQ1LVxcdGRlZmF1bHQgeVxcbi0tXFxuZnMvb2NmczIvS2NvbmZpZz01ND1jb25maWcgT0NGUzJfRlNfU1RBVFNcXG5mcy9vY2ZzMi9LY29uZmlnLTU1LVxcdGJvb2wgXFxcIk9DRlMyIHN0YXRpc3RpY3NcXFwiXFxuZnMvb2NmczIvS2NvbmZpZzo1NjpcXHRkZXBlbmRzIG9uIE9DRlMyX0ZTIFxcdTAwMjZcXHUwMDI2IERFQlVHX0ZTXFxuZnMvb2NmczIvS2NvbmZpZy01Ny1cXHRkZWZhdWx0IHlcXG4tLVxcbmZzL29jZnMyL0tjb25maWc9NjI9Y29uZmlnIE9DRlMyX0RFQlVHX01BU0tMT0dcXG5mcy9vY2ZzMi9LY29uZmlnLTYzLVxcdGJvb2wgXFxcIk9DRlMyIGxvZ2dpbmcgc3VwcG9ydFxcXCJcXG5mcy9vY2ZzMi9LY29uZmlnOjY0OlxcdGRlcGVuZHMgb24gT0NGUzJfRlNcXG5mcy9vY2ZzMi9LY29uZmlnLTY1LVxcdGRlZmF1bHQgeVxcbi0tXFxuZnMvb2NmczIvS2NvbmZpZz03Mj1jb25maWcgT0NGUzJfREVCVUdfRlNcXG5mcy9vY2ZzMi9LY29uZmlnLTczLVxcdGJvb2wgXFxcIk9DRlMyIGV4cGVuc2l2ZSBjaGVja3NcXFwiXFxuZnMvb2NmczIvS2NvbmZpZzo3NDpcXHRkZXBlbmRzIG9uIE9DRlMyX0ZTXFxuZnMvb2NmczIvS2NvbmZpZy03NS1cXHRkZWZhdWx0IG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDg6MDg6MDUuMTMxNzE3MDQ0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU3NTkwMTQwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipPQ0ZTMiBhbmQgQUNMczogQSBRdWljayBMb29rKipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGlzIGNvZGUsIGl0IGFwcGVhcnMgdGhhdCBlbmFibGluZyBgT0NGUzJfRlNgIGlzIGNvbnRpbmdlbnQgb24gYElORVRgLCBgU1lTRlNgLCBhbmQgYENPTkZJR0ZTX0ZTYCBiZWluZyBhY3RpdmUuIFRoYXQgbWFrZXMgc2Vuc2UsIGdpdmVuIE9DRlMyJ3MgZGlzdHJpYnV0ZWQgbmF0dXJlIGFuZCBsaWtlbHkgZGVwZW5kZW5jZSBvbiBuZXR3b3JraW5nIGFuZCBjb25maWd1cmF0aW9uIGluZnJhc3RydWN0dXJlLiBOb3csIHRoZSBtYWluIHF1ZXN0aW9uIGlzOiBkbyB3ZSBuZWVkIHRvIGRvIHNvbWV0aGluZyBpbiByZWdhcmQgdG8gQUNMIHN1cHBvcnQ/IFRoZSBwYXRjaCByZWZlcmVuY2VzIHRoYXQsIHNvIEkgbmVlZCB0byBjaGVjayB0aGUgQUNMIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgT0NGUzIgc3BlY2lmaWNhbGx5LiBJcyB0aGVyZSBhIGRlZGljYXRlZCBBQ0wgb3B0aW9uIGZvciBPQ0ZTMiB3aXRoaW4gdGhlIGJ1aWxkIHN5c3RlbSwgb3IgZG9lcyBpdCBsZXZlcmFnZSBnZW5lcmljIEFDTCBzdXBwb3J0PyBUaGF0J3Mgd2hhdCBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgdG8gZW5zdXJlIHRoZSBwYXRjaCBpcyBhcHBsaWVkIG9yIGhhbmRsZWQgY29ycmVjdGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MzA4LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDg6MDg6MDguNzA3NjIwNjI5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNjc2MzM1NywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE9DRlMyX0ZTX1BPU0lYX0FDTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9vY2ZzMi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwODowODowOC44MTQzOTA2ODZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjY4MTk1NzUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgdGFraW5nIG9uIHRoZSBwZXJzb25hIHlvdSByZXF1ZXN0ZWQ6XG5cbioqQXNzZXNzaW5nIE9DRlMyIEFDTCBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBxdWlja2x5IGFzY2VydGFpbiB3aGV0aGVyIG9yIG5vdCB3ZSBoYXZlIGFueSBBY2Nlc3MgQ29udHJvbCBMaXN0cyAoQUNMcykgY29uZmlndXJlZCB3aXRoaW4gdGhlIE9DRlMyIGVudmlyb25tZW50LiBUaGlzIGlzIGEgcHJldHR5IGZ1bmRhbWVudGFsIGNoZWNrIGJlZm9yZSBJIHN0YXJ0IGRpZ2dpbmcgaW50byBhbnl0aGluZyBlbHNlIHJlbGF0ZWQgdG8gZmlsZSBwZXJtaXNzaW9ucyBvciBzZWN1cml0eSBvbiB0aGlzIGNsdXN0ZXIuIFVuZGVyc3RhbmRpbmcgdGhlIHByZXNlbmNlIG9yIGFic2VuY2Ugb2YgQUNMcyBzZXRzIHRoZSBiYXNlbGluZSBmb3IgaW50ZXJwcmV0aW5nIGhvdyBmaWxlIGFjY2VzcyBpcyBiZWluZyBtYW5hZ2VkLiBTbywgZmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQncyBzZWUgaWYgdGhlcmUncyBhbnkgQUNMIGNvbmZpZ3VyYXRpb24gYWN0aXZlIHdpdGhpbiBPQ0ZTMi4gVGhpcyBpcyBlc3NlbnRpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGVudmlyb25tZW50J3Mgc2VjdXJpdHkgcG9zdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTU2NCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDA4OjA4OjEyLjA4MjU5NzUzN1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEyNzAwMDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkFDTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9vY2ZzMi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL29jZnMyL0tjb25maWc9Mj1jb25maWcgT0NGUzJfRlNcXG4tLVxcbmZzL29jZnMyL0tjb25maWctOS1cXHRzZWxlY3QgUVVPVEFfVFJFRVxcbmZzL29jZnMyL0tjb25maWc6MTA6XFx0c2VsZWN0IEZTX1BPU0lYX0FDTFxcbmZzL29jZnMyL0tjb25maWctMTEtXFx0c2VsZWN0IExFR0FDWV9ESVJFQ1RfSU9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDg6MDg6MTIuMTk1MzAzNjkzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY5NTg2MzM5MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqT0NGUzIgQUNMIEFjdGl2YXRpb24qKlxuXG5Pa2F5LCBzbyB0aGUgdGV4dCBpcyBzYXlpbmcgdGhhdCBzZWxlY3RpbmcgYE9DRlMyX0ZTYCBpbXBsaWVzIGBGU19QT1NJWF9BQ0xgLiBUaGF0IHNpbXBsaWZpZXMgdGhpbmdzOyB3ZSBqdXN0IG5lZWQgdG8gZW5zdXJlIGBPQ0ZTMl9GU2AgaXMgZW5hYmxlZC5cblxuTmV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZSBwYXRjaCBieSBleGFtaW5pbmcgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucy4gSXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggdG91Y2hlcyBhIGZldyBrZXkgYXJlYXM6IGBvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlYCwgYG9jZnMyX2FjbF9pbml0X3ByZXBhcmVgLCBgb2NmczJfaW5pdF9hY2xgLCBgb2NmczJfbWtub2RgLCBgb2NmczJfY2FsY194YXR0cl9pbml0YCwgYG9jZnMyX3hhdHRyX3NldF9oYW5kbGVgLCBhbmQgYG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbGAuIE5vdywgSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHdoZXRoZXIgdGhlc2UgZnVuY3Rpb25zIGFyZSBleHBvcnRlZCBmb3IgdXNlIGVsc2V3aGVyZSBvciBhcmUgc3RhdGljIHRvIHRoZSBPQ0ZTMiBtb2R1bGUuXG5cbkFmdGVyIHRoYXQsIEkgY2FuIHNlZTpcbiogICBgb2NmczJfYWNsX2luaXRfcmVsZWFzZWAgaXMgbm9uLXN0YXRpY1xuKiAgIGBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlYCBpcyBub24tc3RhdGljXG4qICAgYG9jZnMyX2luaXRfYWNsYCBpcyBub24tc3RhdGljXG4qICAgYG9jZnMyX21rbm9kYCBpcyBzdGF0aWMsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBIb3dldmVyLCBpdCBpcyBwcm9iYWJseSBwYXJ0IG9mIGBvY2ZzMl9kaXJfaW5vZGVfb3BlcmF0aW9uc2AsIHdoaWNoIGNoYW5nZXMgaG93IGl0J3MgaGFuZGxlZC5cbiogICBgb2NmczJfY2FsY194YXR0cl9pbml0YCBpcyBub24tc3RhdGljXG4qICAgYG9jZnMyX3hhdHRyX3NldF9oYW5kbGVgIGlzIG5vbi1zdGF0aWNcbiogICBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYCBpcyBub24tc3RhdGljXG5cbkkgbmVlZCB0byBxdWlja2x5IGNvbmZpcm0gdGhhdCBgb2NmczJfbWtub2RgIGlzIGluZGVlZCBzdGF0aWMgdG8gdGhlIG1vZHVsZS4gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgYGZzL29jZnMyL25hbWVpLmNgIHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4NDcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDg6MDg6MTkuMTUzOTQwNzE0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5Nzg4MTI1ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib2NmczJfbWtub2RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvb2NmczIvbmFtZWkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9vY2ZzMi9uYW1laS5jLTU1LVxcbmZzL29jZnMyL25hbWVpLmM6NTY6c3RhdGljIGludCBvY2ZzMl9ta25vZF9sb2NrZWQoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsXFxuZnMvb2NmczIvbmFtZWkuYy01Ny1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL29jZnMyL25hbWVpLmM9MjE1PXN0YXRpYyB2b2lkIG9jZnMyX2NsZWFudXBfYWRkX2VudHJ5X2ZhaWx1cmUoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsXFxuLS1cXG5mcy9vY2ZzMi9uYW1laS5jLTIyOS1cXG5mcy9vY2ZzMi9uYW1laS5jOjIzMDpzdGF0aWMgaW50IG9jZnMyX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbmZzL29jZnMyL25hbWVpLmMtMjMxLVxcdFxcdCAgICAgICBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL29jZnMyL25hbWVpLmMtMjYwLVxcbmZzL29jZnMyL25hbWVpLmM6MjYxOlxcdHRyYWNlX29jZnMyX21rbm9kKGRpciwgZGVudHJ5LCBkZW50cnktXFx1MDAzZWRfbmFtZS5sZW4sIGRlbnRyeS1cXHUwMDNlZF9uYW1lLm5hbWUsXFxuZnMvb2NmczIvbmFtZWkuYy0yNjItXFx0XFx0XFx0ICAodW5zaWduZWQgbG9uZyBsb25nKU9DRlMyX0koZGlyKS1cXHUwMDNlaXBfYmxrbm8sXFxuLS1cXG5mcy9vY2ZzMi9uYW1laS5jLTM2OS1cXG5mcy9vY2ZzMi9uYW1laS5jOjM3MDpcXHRoYW5kbGUgPSBvY2ZzMl9zdGFydF90cmFucyhvc2IsIG9jZnMyX21rbm9kX2NyZWRpdHMob3NiLVxcdTAwM2VzYixcXG5mcy9vY2ZzMi9uYW1laS5jLTM3MS1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgU19JU0RJUihtb2RlKSxcXG4tLVxcbmZzL29jZnMyL25hbWVpLmMtMzg5LVxcdC8qIGRvIHRoZSByZWFsIHdvcmsgbm93LiAqL1xcbmZzL29jZnMyL25hbWVpLmM6MzkwOlxcdHN0YXR1cyA9IG9jZnMyX21rbm9kX2xvY2tlZChvc2IsIGRpciwgaW5vZGUsIGRldixcXG5mcy9vY2ZzMi9uYW1laS5jLTM5MS1cXHRcXHRcXHRcXHQgICAgXFx1MDAyNm5ld19mZV9iaCwgcGFyZW50X2ZlX2JoLCBoYW5kbGUsXFxuLS1cXG5mcy9vY2ZzMi9uYW1laS5jLTUxNy1cXG5mcy9vY2ZzMi9uYW1laS5jOjUxODpzdGF0aWMgaW50IF9fb2NmczJfbWtub2RfbG9ja2VkKHN0cnVjdCBpbm9kZSAqZGlyLFxcbmZzL29jZnMyL25hbWVpLmMtNTE5LVxcdFxcdFxcdFxcdHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9vY2ZzMi9uYW1laS5jLTYyOS1cXG5mcy9vY2ZzMi9uYW1laS5jOjYzMDpzdGF0aWMgaW50IG9jZnMyX21rbm9kX2xvY2tlZChzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYixcXG5mcy9vY2ZzMi9uYW1laS5jLTYzMS1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL29jZnMyL25hbWVpLmMtNjUyLVxcbmZzL29jZnMyL25hbWVpLmM6NjUzOlxcdHJldHVybiBfX29jZnMyX21rbm9kX2xvY2tlZChkaXIsIGlub2RlLCBkZXYsIG5ld19mZV9iaCxcXG5mcy9vY2ZzMi9uYW1laS5jLTY1NC1cXHRcXHRcXHRcXHQgICAgaGFuZGxlLCBpbm9kZV9hYywgZmVfYmxrbm8sXFxuLS1cXG5mcy9vY2ZzMi9uYW1laS5jPTY1OD1zdGF0aWMgc3RydWN0IGRlbnRyeSAqb2NmczJfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuLS1cXG5mcy9vY2ZzMi9uYW1laS5jLTY2Ni1cXHRcXHRcXHQgIE9DRlMyX0koZGlyKS1cXHUwMDNlaXBfYmxrbm8sIG1vZGUpO1xcbmZzL29jZnMyL25hbWVpLmM6NjY3OlxcdHJldCA9IG9jZnMyX21rbm9kKFxcdTAwMjZub3BfbW50X2lkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSB8IFNfSUZESVIsIDApO1xcbmZzL29jZnMyL25hbWVpLmMtNjY4LVxcdGlmIChyZXQpXFxuLS1cXG5mcy9vY2ZzMi9uYW1laS5jPTY3ND1zdGF0aWMgaW50IG9jZnMyX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4tLVxcbmZzL29jZnMyL25hbWVpLmMtNjgzLVxcdFxcdFxcdCAgICh1bnNpZ25lZCBsb25nIGxvbmcpT0NGUzJfSShkaXIpLVxcdTAwM2VpcF9ibGtubywgbW9kZSk7XFxuZnMvb2NmczIvbmFtZWkuYzo2ODQ6XFx0cmV0ID0gb2NmczJfbWtub2QoXFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlIHwgU19JRlJFRywgMCk7XFxuZnMvb2NmczIvbmFtZWkuYy02ODUtXFx0aWYgKHJldClcXG4tLVxcbmZzL29jZnMyL25hbWVpLmM9MTgxND1zdGF0aWMgaW50IG9jZnMyX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuLS1cXG5mcy9vY2ZzMi9uYW1laS5jLTE5NTYtXFxuZnMvb2NmczIvbmFtZWkuYzoxOTU3OlxcdHN0YXR1cyA9IG9jZnMyX21rbm9kX2xvY2tlZChvc2IsIGRpciwgaW5vZGUsXFxuZnMvb2NmczIvbmFtZWkuYy0xOTU4LVxcdFxcdFxcdFxcdCAgICAwLCBcXHUwMDI2bmV3X2ZlX2JoLCBwYXJlbnRfZmVfYmgsIGhhbmRsZSxcXG4tLVxcbmZzL29jZnMyL25hbWVpLmM9MjUyMT1pbnQgb2NmczJfY3JlYXRlX2lub2RlX2luX29ycGhhbihzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL29jZnMyL25hbWVpLmMtMjU2MS1cXG5mcy9vY2ZzMi9uYW1laS5jOjI1NjI6XFx0aGFuZGxlID0gb2NmczJfc3RhcnRfdHJhbnMob3NiLCBvY2ZzMl9ta25vZF9jcmVkaXRzKG9zYi1cXHUwMDNlc2IsIDAsIDApKTtcXG5mcy9vY2ZzMi9uYW1laS5jLTI1NjMtXFx0aWYgKElTX0VSUihoYW5kbGUpKSB7XFxuLS1cXG5mcy9vY2ZzMi9uYW1laS5jLTI1ODQtXFx0LyogZG8gdGhlIHJlYWwgd29yayBub3cuICovXFxuZnMvb2NmczIvbmFtZWkuYzoyNTg1OlxcdHN0YXR1cyA9IF9fb2NmczJfbWtub2RfbG9ja2VkKGRpciwgaW5vZGUsXFxuZnMvb2NmczIvbmFtZWkuYy0yNTg2LVxcdFxcdFxcdFxcdCAgICAgIDAsIFxcdTAwMjZuZXdfZGlfYmgsIGhhbmRsZSxcXG4tLVxcbmZzL29jZnMyL25hbWVpLmM9MjkzMz1jb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBvY2ZzMl9kaXJfaW9wcyA9IHtcXG4tLVxcbmZzL29jZnMyL25hbWVpLmMtMjk0MC1cXHQubWtkaXJcXHRcXHQ9IG9jZnMyX21rZGlyLFxcbmZzL29jZnMyL25hbWVpLmM6Mjk0MTpcXHQubWtub2RcXHRcXHQ9IG9jZnMyX21rbm9kLFxcbmZzL29jZnMyL25hbWVpLmMtMjk0Mi1cXHQucmVuYW1lXFx0XFx0PSBvY2ZzMl9yZW5hbWUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDA4OjA4OjIwLjEzMjc1NzczMloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTkxNDU1MTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgT0NGUzIgRmlsZXN5c3RlbSBFbnRyeXBvaW50cyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gaG93IHRoaXMgYWxsIGZpdHMgdG9nZXRoZXIuIEkgc2VlIHRoYXQgYG9jZnMyX21rbm9kYCBpcyBkZWZpbmVkIGFzIGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBpcyBhIGJpdCB1bnVzdWFsLiBCdXQgaXQncyB1bHRpbWF0ZWx5IGxpbmtlZCB0byB0aGUgYC5ta25vZGAgb3BlcmF0aW9uIHdpdGhpbiBgb2NmczJfZGlyX2lvcHNgLiBUaGF0J3MgdGhlIHByaW1hcnkgd2F5IGl0J3MgZXhwb3NlZC4gQWhhLCBhbmQgaXQncyBhbHNvIGNhbGxlZCBieSBgb2NmczJfbWtkaXJgIGFuZCBgb2NmczJfY3JlYXRlYC4gUmlnaHQsIHNvIGBvY2ZzMl9ta25vZGAgaXMgZWZmZWN0aXZlbHkgYW4gaW50ZXJuYWwgZnVuY3Rpb24gdGhhdCBnZXRzIGluZGlyZWN0bHkgY2FsbGVkIHRocm91Z2ggdGhlc2UgaGlnaGVyLWxldmVsIGZ1bmN0aW9ucy4gU28gdGhlIGV4cG9zZWQgZW50cnlwb2ludHMgSSBuZWVkIHRvIGNvbnNpZGVyIGFyZSBkZWZpbml0ZWx5IGBvY2ZzMl9ta25vZGAsIGBvY2ZzMl9ta2RpcmAsIGFuZCBgb2NmczJfY3JlYXRlYC4uLiBhbmQgYWxzbyBgb2NmczJfc3ltbGlua2AuXG5cbldhaXQsIGEgc21hbGwgc25hZy4gSXQgbG9va3MgbGlrZSBgb2NmczJfc3ltbGlua2AgZG9lc24ndCBkaXJlY3RseSBjYWxsIGBvY2ZzMl9ta25vZGAuIEl0IGFjdHVhbGx5IGNhbGxzIGBvY2ZzMl9ta25vZF9sb2NrZWRgIGluc3RlYWQuIEknbGwgbmVlZCB0byByZW1lbWJlciB0aGF0IHN1YnRsZSBkaXN0aW5jdGlvbi4gQnV0IHRoZXJlJ3MgYW5vdGhlciBwb2ludCBvZiBpbnRlcmVzdCBoZXJlIC0gYG9jZnMyX3N5bWxpbmtgIGNhbGxzIGBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xgLiBUaGF0J3MgYW4gaW50ZXJlc3RpbmcgY2FsbCB0byBleGFtaW5lLiBMZXQncyBkaWcgZGVlcGVyIGFuZCBzZWUgd2hhdCB0aGF0IGZ1bmN0aW9uIGlzIGRvaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjA4MywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwODowODoyNC43MjQyMTUxMTdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3ODE2MDkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9vY2ZzMi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvb2NmczIvcmVmY291bnR0cmVlLmM9NDIzOD1zdGF0aWMgaW50IG9jZnMyX3JlZmxpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYy00Mjk2LVxcdGlmICghcHJlc2VydmUpIHtcXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYzo0Mjk3OlxcdFxcdGVycm9yID0gb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsKGRpciwgbmV3X29ycGhhbl9pbm9kZSxcXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYy00Mjk4LVxcdFxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2bmV3X2RlbnRyeS1cXHUwMDNlZF9uYW1lKTtcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmM9NzE4Mj1pbnQgb2NmczJfcmVmbGlua194YXR0cnMoc3RydWN0IGlub2RlICpvbGRfaW5vZGUsXFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jLTcyNjMtICovXFxuZnMvb2NmczIveGF0dHIuYzo3MjY0OmludCBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2woc3RydWN0IGlub2RlICpkaXIsXFxuZnMvb2NmczIveGF0dHIuYy03MjY1LVxcdFxcdFxcdFxcdHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5oPTgzPWludCBvY2ZzMl9yZWZsaW5rX3hhdHRycyhzdHJ1Y3QgaW5vZGUgKm9sZF9pbm9kZSxcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmgtODctXFx0XFx0XFx0IGJvb2wgcHJlc2VydmVfc2VjdXJpdHkpO1xcbmZzL29jZnMyL3hhdHRyLmg6ODg6aW50IG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbChzdHJ1Y3QgaW5vZGUgKmRpcixcXG5mcy9vY2ZzMi94YXR0ci5oLTg5LVxcdFxcdFxcdFxcdHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDA4OjA4OjI0LjgxMjAzODA0OFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MzI0NDI4MTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRpZ2dpbmcgaW50byBPQ0ZTMiBTZWN1cml0eSBDb250ZXh0cyoqXG5cbk9rYXksIHNvIEknbSB0cmFjaW5nIHRoZSBzZWN1cml0eSBjb250ZXh0IGluaXRpYWxpemF0aW9uIHdpdGhpbiBPQ0ZTMiwgc3BlY2lmaWNhbGx5IGhvdyBBQ0xzIGFyZSBoYW5kbGVkLiBJIHNlZSB0aGF0IGBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xgIGdldHMgY2FsbGVkIGR1cmluZyBgb2NmczJfcmVmbGlua2AsIHdoaWNoIG1ha2VzIHNlbnNlLiBSZWZsaW5raW5nIGNvdWxkIGNyZWF0ZSBhIG5lZWQgdG8gY29weSBvdmVyIHNlY3VyaXR5IGF0dHJpYnV0ZXMuIEJ1dC4uLiBJIG5lZWQgdG8gYmUgc3VyZSBJJ20gbm90IG1pc3Npbmcgc29tZXRoaW5nLiBJJ20gd29uZGVyaW5nIGlmIHRoaXMgaW5pdGlhbGl6YXRpb24gYWxzbyBoYXBwZW5zIGR1cmluZyBvdGhlciBpbm9kZSBjcmVhdGlvbiBvcGVyYXRpb25zLlxuXG5MZXQncyBxdWlja2x5IGNoZWNrIHRoZSBjYWxsIGdyYXBoIGZvciBgb2NmczJfc3ltbGlua2AuIFRoYXQncyBoYW5kbGVkIGJ5IGBvY2ZzMl9zeW1saW5rYCBpbiBgZnMvb2NmczIvbmFtZWkuY2AuIEkgbmVlZCB0byBjb25maXJtIGlmIHRoZSBzZWN1cml0eSBzZXR1cCBpcyB0YWtlbiBjYXJlIG9mIGR1cmluZyBzeW1saW5rIGNyZWF0aW9uIGFzIHdlbGwsIG9yIGlmIGl0IGhhcyBhIGRpZmZlcmVudCBlbnRyeXBvaW50LiBJdCdzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCBob3cgQUNMcyBhbmQgZXh0ZW5kZWQgYXR0cmlidXRlcyBhcmUgbWFuYWdlZCBhY3Jvc3MgZGlmZmVyZW50IGZpbGUgY3JlYXRpb24gbWV0aG9kcyB3aXRoaW4gdGhpcyBjbHVzdGVyIGZpbGVzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTYyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDg6MDg6MzIuMTM2NDY5NjJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkzNDk1MzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9jZnMyX3N5bWxpbmtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvb2NmczIvbmFtZWkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9vY2ZzMi9uYW1laS5jPTE3MTY9c3RhdGljIGludCBvY2ZzMl9jcmVhdGVfc3ltbGlua19kYXRhKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLFxcbi0tXFxuZnMvb2NmczIvbmFtZWkuYy0xODEzLVxcbmZzL29jZnMyL25hbWVpLmM6MTgxNDpzdGF0aWMgaW50IG9jZnMyX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuZnMvb2NmczIvbmFtZWkuYy0xODE1LVxcdFxcdFxcdCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL29jZnMyL25hbWVpLmMtMTg0My1cXG5mcy9vY2ZzMi9uYW1laS5jOjE4NDQ6XFx0dHJhY2Vfb2NmczJfc3ltbGlua19iZWdpbihkaXIsIGRlbnRyeSwgc3ltbmFtZSxcXG5mcy9vY2ZzMi9uYW1laS5jLTE4NDUtXFx0XFx0XFx0XFx0ICBkZW50cnktXFx1MDAzZWRfbmFtZS5sZW4sIGRlbnRyeS1cXHUwMDNlZF9uYW1lLm5hbWUpO1xcbi0tXFxuZnMvb2NmczIvbmFtZWkuYy0xOTUxLVxcbmZzL29jZnMyL25hbWVpLmM6MTk1MjpcXHR0cmFjZV9vY2ZzMl9zeW1saW5rX2NyZWF0ZShkaXIsIGRlbnRyeSwgZGVudHJ5LVxcdTAwM2VkX25hbWUubGVuLFxcbmZzL29jZnMyL25hbWVpLmMtMTk1My1cXHRcXHRcXHRcXHQgICBkZW50cnktXFx1MDAzZWRfbmFtZS5uYW1lLFxcbi0tXFxuZnMvb2NmczIvbmFtZWkuYy0xOTY3LVxcdG5ld3NpemUgPSBsIC0gMTtcXG5mcy9vY2ZzMi9uYW1laS5jOjE5Njg6XFx0aW5vZGUtXFx1MDAzZWlfb3AgPSBcXHUwMDI2b2NmczJfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zO1xcbmZzL29jZnMyL25hbWVpLmMtMTk2OS1cXHRpbm9kZV9ub2hpZ2htZW0oaW5vZGUpO1xcbi0tXFxuZnMvb2NmczIvbmFtZWkuYz0yOTMzPWNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG9jZnMyX2Rpcl9pb3BzID0ge1xcbi0tXFxuZnMvb2NmczIvbmFtZWkuYy0yOTM4LVxcdC5ybWRpclxcdFxcdD0gb2NmczJfdW5saW5rLFxcbmZzL29jZnMyL25hbWVpLmM6MjkzOTpcXHQuc3ltbGlua1xcdD0gb2NmczJfc3ltbGluayxcXG5mcy9vY2ZzMi9uYW1laS5jLTI5NDAtXFx0Lm1rZGlyXFx0XFx0PSBvY2ZzMl9ta2RpcixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDg6MDg6MzIuMjI5OTY5MDNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU2NjIyOTUyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBBQ0wgSW5pdGlhbGl6YXRpb24gUGF0aCBpbiBPQ0ZTMiBTeW1saW5rIENyZWF0aW9uKipcblxuQWxyaWdodCwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGUgT0NGUzIgY29kZSwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGBvY2ZzMl9zeW1saW5rYC4gVGhlIGtleSBxdWVzdGlvbiBJJ20gdHJ5aW5nIHRvIGFuc3dlciBpcyBwcmVjaXNlbHkgaG93IEFDTHMgYXJlIGluaXRpYWxpemVkIGZvciBhIG5ld2x5IGNyZWF0ZWQgc3ltYm9saWMgbGluay4gTXkgZ3V0IGZlZWxpbmcgaXMgdGVsbGluZyBtZSBpdCdzIGVpdGhlciBnb2luZyB0byBsZXZlcmFnZSB0aGUgZXhpc3RpbmcgQUNMIGluZnJhc3RydWN0dXJlLCBwb3RlbnRpYWxseSB0aHJvdWdoIGBvY2ZzMl9pbml0X2FjbGAsIG9yIHBlcmhhcHMgaXQncyBnb2luZyB0byB1c2Ugc29tZSBraW5kIG9mIHhhdHRyIGNhbGN1bGF0aW9uIHJvdXRpbmUgdG8gZ2V0IGl0IHNldCB1cCwgc28gSSBuZWVkIHRvIGNoZWNrIGlmIHdlJ3JlIGNhbGxpbmcgYG9jZnMyX2NhbGNfeGF0dHJfaW5pdGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBBQ0xzIGdldCB0aGVpciBpbml0aWFsIHN0YXRlIGZvciB0aGVzZSBzeW1saW5rcyBiZWNhdXNlIGl0J3MgYSBjcml0aWNhbCBwYXRoIHRvIGVuc3VyaW5nIHRoZSBzZWN1cml0eSBhbmQgcGVybWlzc2lvbnMgYmVoYXZlIGFzIGV4cGVjdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzc5NSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDA4OjA4OjM1Ljc5NjIwMjUwN1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzE1MzQzMzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib2NmczJfY2FsY194YXR0cl9pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL29jZnMyL25hbWVpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvb2NmczIvbmFtZWkuYz0yMzA9c3RhdGljIGludCBvY2ZzMl9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4tLVxcbmZzL29jZnMyL25hbWVpLmMtMzM4LVxcdC8qIGNhbGN1bGF0ZSBtZXRhIGRhdGEvY2x1c3RlcnMgZm9yIHNldHRpbmcgc2VjdXJpdHkgYW5kIGFjbCB4YXR0ciAqL1xcbmZzL29jZnMyL25hbWVpLmM6MzM5OlxcdHN0YXR1cyA9IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChkaXIsIG1vZGUsIFxcdTAwMjZzaSwgXFx1MDAyNndhbnRfY2x1c3RlcnMsXFxuZnMvb2NmczIvbmFtZWkuYy0zNDAtXFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZ4YXR0cl9jcmVkaXRzLCBcXHUwMDI2d2FudF9tZXRhLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwODowODozNS44Njc3NDUxMjFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTMwMzQ5NzY3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqRGlnZ2luZyBpbnRvIE9DRlMyIFhhdHRyIEluaXRpYWxpemF0aW9uKipcblxuUmlnaHQsIHNvIEknbSBmb2N1c2luZyBvbiBob3cgRXh0ZW5kZWQgQXR0cmlidXRlcyAoWGF0dHJzKSBnZXQgaW5pdGlhbGl6ZWQgd2l0aGluIHRoZSBPQ0ZTMiBmaWxlc3lzdGVtLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgb2NmczJfY2FsY194YXR0cl9pbml0YCBpcyAqb25seSogY2FsbGVkIHdpdGhpbiB0aGUgYG9jZnMyX21rbm9kYCBmdW5jdGlvbi4gVGhhdCBzZWVtcy4uLiBwb3RlbnRpYWxseSByZXN0cmljdGl2ZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3Npbmcgc29tZXRoaW5nIGNyaXRpY2FsLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBrbm93IGlmIHRoZXJlIGlzIGFub3RoZXIgZnVuY3Rpb24gd2hlcmUgWGF0dHIgaW5pdGlhbGl6YXRpb24gdGFrZXMgcGxhY2UuIFdoYXQgYWJvdXQgc3ltYm9saWMgbGlua3M/IGBvY2ZzMl9zeW1saW5rYCEgRG9lcyB0aGF0IGFsc28gc2V0IEFDTHM/IFRoYXQncyB0aGUgbmV4dCB0aGluZyBJIG5lZWQgdG8gaW52ZXN0aWdhdGUuIEkgbmVlZCB0byBjb25maXJtIHRoYXQgbXkgaW5pdGlhbCBhc3N1bXB0aW9uIGlzIGNvcnJlY3QsIG9yIGlmIHRoZXJlJ3MgYW5vdGhlciBwb2ludCB3aGVyZSBYYXR0cnMgZ2V0IHNldCB1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQyMTIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwODowODo0MS4xNzEyNDUzOTJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3ODU2ODk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9jZnMyX2luaXRfYWNsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL29jZnMyL25hbWVpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvb2NmczIvbmFtZWkuYz0yMzA9c3RhdGljIGludCBvY2ZzMl9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4tLVxcbmZzL29jZnMyL25hbWVpLmMtNDE4LVxcbmZzL29jZnMyL25hbWVpLmM6NDE5OlxcdHN0YXR1cyA9IG9jZnMyX2luaXRfYWNsKGhhbmRsZSwgaW5vZGUsIG5ld19mZV9iaCwgbWV0YV9hYywgZGF0YV9hYyxcXG5mcy9vY2ZzMi9uYW1laS5jLTQyMC1cXHRcXHRcXHRcXHRcXHUwMDI2YWNsX3N0YXRlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDg6MDg6NDEuMjI5MTA2NTc5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2ODI1NjA3MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE9DRlMyIEZpbGUgQ3JlYXRpb24gYW5kIEFDTCBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBPQ0ZTMiBoYW5kbGVzIHN5bWJvbGljIGxpbmtzLCBhbmQgSSBzZWUgdGhhdCBgb2NmczJfc3ltbGlua2AgZG9lc24ndCBzZWVtIHRvIGludm9rZSBgb2NmczJfaW5pdF9hY2xgIG9yIGBvY2ZzMl9jYWxjX3hhdHRyX2luaXRgIGRpcmVjdGx5LiBUaGF0J3MgYSBsaXR0bGUgdW5leHBlY3RlZC4gTm93LCBJIHJlbWVtYmVyIHRoYXQgYG9jZnMyX2luaXRfYWNsYCAqaXMqIGNhbGxlZCB3aXRoaW4gYG9jZnMyX21rbm9kYCBhbmQgYWxzbyBpbiBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYC4gVGhlbiBJIHJlbWVtYmVyIHRoYXQgYG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbGAgaXMgY2FsbGVkIGJ5IGBvY2ZzMl9yZWZsaW5rYC4gVGhpcyBzdWdnZXN0cyB0aGUgZnVuY3Rpb25zIGhhbmRsaW5nIHRoZSBBQ0wgc3R1ZmYgSSBuZWVkIHRvIGNvbmNlbnRyYXRlIG9uIGFyZSBgb2NmczJfbWtub2RgLCBgb2NmczJfbWtkaXJgLCBgb2NmczJfY3JlYXRlYCwgYW5kIGBvY2ZzMl9yZWZsaW5rYC4gQnV0IGhvbGQgb24sIGlzbid0IGBvY2ZzMl9ta25vZGAgc3RhdGljPyBMZXQgbWUgZG91YmxlLWNoZWNrIGBvY2ZzMl9yZWZsaW5rYCBmb3IgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZy4gSSdsbCBmb2N1cyBteSBlZmZvcnRzIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDYxNywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwODowODo0NS45MTE2NzA4NjRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTI1NzI4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvY2ZzMl9yZWZsaW5rXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL29jZnMyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9vY2ZzMi9maWxlLmM9MjcwNj1zdGF0aWMgbG9mZl90IG9jZnMyX3JlbWFwX2ZpbGVfcmFuZ2Uoc3RydWN0IGZpbGUgKmZpbGVfaW4sIGxvZmZfdCBwb3NfaW4sXFxuLS1cXG5mcy9vY2ZzMi9maWxlLmMtMjcyNS1cXHQvKiBMb2NrIGJvdGggZmlsZXMgYWdhaW5zdCBJTyAqL1xcbmZzL29jZnMyL2ZpbGUuYzoyNzI2OlxcdHJldCA9IG9jZnMyX3JlZmxpbmtfaW5vZGVzX2xvY2soaW5vZGVfaW4sIFxcdTAwMjZpbl9iaCwgaW5vZGVfb3V0LCBcXHUwMDI2b3V0X2JoKTtcXG5mcy9vY2ZzMi9maWxlLmMtMjcyNy1cXHRpZiAocmV0KVxcbi0tXFxuZnMvb2NmczIvZmlsZS5jLTI3NTEtXFxuZnMvb2NmczIvZmlsZS5jOjI3NTI6XFx0cmVtYXBwZWQgPSBvY2ZzMl9yZWZsaW5rX3JlbWFwX2Jsb2Nrcyhpbm9kZV9pbiwgaW5fYmgsIHBvc19pbixcXG5mcy9vY2ZzMi9maWxlLmMtMjc1My1cXHRcXHRcXHRpbm9kZV9vdXQsIG91dF9iaCwgcG9zX291dCwgbGVuKTtcXG4tLVxcbmZzL29jZnMyL2ZpbGUuYy0yNzY5LVxcbmZzL29jZnMyL2ZpbGUuYzoyNzcwOlxcdHJldCA9IG9jZnMyX3JlZmxpbmtfdXBkYXRlX2Rlc3QoaW5vZGVfb3V0LCBvdXRfYmgsIHBvc19vdXQgKyBsZW4pO1xcbmZzL29jZnMyL2ZpbGUuYy0yNzcxLVxcdGlmIChyZXQpIHtcXG4tLVxcbmZzL29jZnMyL2ZpbGUuYy0yNzc2LW91dF91bmxvY2s6XFxuZnMvb2NmczIvZmlsZS5jOjI3Nzc6XFx0b2NmczJfcmVmbGlua19pbm9kZXNfdW5sb2NrKGlub2RlX2luLCBpbl9iaCwgaW5vZGVfb3V0LCBvdXRfYmgpO1xcbmZzL29jZnMyL2ZpbGUuYy0yNzc4LVxcdHJldHVybiByZW1hcHBlZCBcXHUwMDNlIDAgPyByZW1hcHBlZCA6IHJldDtcXG4tLVxcbmZzL29jZnMyL2lvY3RsLmM9ODUzPWxvbmcgb2NmczJfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuZnMvb2NmczIvaW9jdGwuYy05MTktXFxuZnMvb2NmczIvaW9jdGwuYzo5MjA6XFx0XFx0cmV0dXJuIG9jZnMyX3JlZmxpbmtfaW9jdGwoaW5vZGUsIG9sZF9wYXRoLCBuZXdfcGF0aCwgcHJlc2VydmUpO1xcbmZzL29jZnMyL2lvY3RsLmMtOTIxLVxcdH1cXG4tLVxcbmZzL29jZnMyL2lvY3RsLmM9OTY1PWxvbmcgb2NmczJfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuZnMvb2NmczIvaW9jdGwuYy05ODYtXFxuZnMvb2NmczIvaW9jdGwuYzo5ODc6XFx0XFx0cmV0dXJuIG9jZnMyX3JlZmxpbmtfaW9jdGwoaW5vZGUsIGNvbXBhdF9wdHIoYXJncy5vbGRfcGF0aCksXFxuZnMvb2NmczIvaW9jdGwuYy05ODgtXFx0XFx0XFx0XFx0XFx0ICAgY29tcGF0X3B0cihhcmdzLm5ld19wYXRoKSwgcHJlc2VydmUpO1xcbi0tXFxuZnMvb2NmczIvb2NmczJfdHJhY2UuaD0xODMxPURFRklORV9PQ0ZTMl9VTExfVUxMX1VJTlRfVUlOVF9FVkVOVChvY2ZzMl9ybV94YXR0cl9jbHVzdGVyKTtcXG5mcy9vY2ZzMi9vY2ZzMl90cmFjZS5oLTE4MzItXFxuZnMvb2NmczIvb2NmczJfdHJhY2UuaDoxODMzOkRFRklORV9PQ0ZTMl9VTExfVUlOVF9FVkVOVChvY2ZzMl9yZWZsaW5rX3hhdHRyX2hlYWRlcik7XFxuZnMvb2NmczIvb2NmczJfdHJhY2UuaC0xODM0LVxcbi0tXFxuZnMvb2NmczIvb2NmczJfdHJhY2UuaD0xODQxPURFRklORV9PQ0ZTMl9VTExfVUlOVF9FVkVOVChvY2ZzMl94YXR0cl9idWNrZXRfdmFsdWVfcmVmY291bnQpO1xcbmZzL29jZnMyL29jZnMyX3RyYWNlLmgtMTg0Mi1cXG5mcy9vY2ZzMi9vY2ZzMl90cmFjZS5oOjE4NDM6REVGSU5FX09DRlMyX1VMTF9VSU5UX1VJTlRfRVZFTlQob2NmczJfcmVmbGlua194YXR0cl9idWNrZXRzKTtcXG5mcy9vY2ZzMi9vY2ZzMl90cmFjZS5oLTE4NDQtXFxuZnMvb2NmczIvb2NmczJfdHJhY2UuaDoxODQ1OkRFRklORV9PQ0ZTMl9VTExfVUlOVF9FVkVOVChvY2ZzMl9yZWZsaW5rX3hhdHRyX3JlYyk7XFxuZnMvb2NmczIvb2NmczJfdHJhY2UuaC0xODQ2LVxcbi0tXFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmM9NDA4OT1zdGF0aWMgaW50IG9jZnMyX2NyZWF0ZV9yZWZsaW5rX25vZGUoc3RydWN0IGlub2RlICpzX2lub2RlLFxcbi0tXFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDE0NS1cXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYzo0MTQ2OnN0YXRpYyBpbnQgX19vY2ZzMl9yZWZsaW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDE0Ny1cXHRcXHRcXHQgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKm9sZF9iaCxcXG4tLVxcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jLTQyMDktXFx0aWYgKG9pLVxcdTAwM2VpcF9keW5fZmVhdHVyZXMgXFx1MDAyNiBPQ0ZTMl9IQVNfWEFUVFJfRkwpIHtcXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYzo0MjEwOlxcdFxcdHJldCA9IG9jZnMyX3JlZmxpbmtfeGF0dHJzKGlub2RlLCBvbGRfYmgsXFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDIxMS1cXHRcXHRcXHRcXHRcXHQgICBuZXdfaW5vZGUsIG5ld19iaCxcXG4tLVxcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jLTQyMzctXFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmM6NDIzODpzdGF0aWMgaW50IG9jZnMyX3JlZmxpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsXFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDIzOS1cXHRcXHRcXHQgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSwgYm9vbCBwcmVzZXJ2ZSlcXG4tLVxcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jLTQyNzItXFx0ZG93bl93cml0ZShcXHUwMDI2T0NGUzJfSShpbm9kZSktXFx1MDAzZWlwX2FsbG9jX3NlbSk7XFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmM6NDI3MzpcXHRlcnJvciA9IF9fb2NmczJfcmVmbGluayhvbGRfZGVudHJ5LCBvbGRfYmgsXFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDI3NC1cXHRcXHRcXHRcXHRuZXdfb3JwaGFuX2lub2RlLCBwcmVzZXJ2ZSk7XFxuLS1cXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYz00MzQ4PXN0YXRpYyBpbnQgb2NmczJfdmZzX3JlZmxpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYy00Mzk4LVxcdGlmICghZXJyb3IpXFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmM6NDM5OTpcXHRcXHRlcnJvciA9IG9jZnMyX3JlZmxpbmsob2xkX2RlbnRyeSwgZGlyLCBuZXdfZGVudHJ5LCBwcmVzZXJ2ZSk7XFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDQwMC1cXHRpbm9kZV91bmxvY2soaW5vZGUpO1xcbi0tXFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDQwNy0gKi9cXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYzo0NDA4OmludCBvY2ZzMl9yZWZsaW5rX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDQwOS1cXHRcXHRcXHRjb25zdCBjaGFyIF9fdXNlciAqb2xkbmFtZSxcXG4tLVxcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jLTQ0NTAtLyogVXBkYXRlIGRlc3RpbmF0aW9uIGlub2RlIHNpemUsIGlmIG5lY2Vzc2FyeS4gKi9cXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYzo0NDUxOmludCBvY2ZzMl9yZWZsaW5rX3VwZGF0ZV9kZXN0KHN0cnVjdCBpbm9kZSAqZGVzdCxcXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYy00NDUyLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZF9iaCxcXG4tLVxcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jLTQ0ODktLyogUmVtYXAgdGhlIHJhbmdlIHBvc19pbjpsZW4gaW4gc19pbm9kZSB0byBwb3Nfb3V0OmxlbiBpbiB0X2lub2RlLiAqL1xcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jOjQ0OTA6c3RhdGljIGxvZmZfdCBvY2ZzMl9yZWZsaW5rX3JlbWFwX2V4dGVudChzdHJ1Y3QgaW5vZGUgKnNfaW5vZGUsXFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDQ5MS1cXHRcXHRcXHRcXHRcXHQgc3RydWN0IGJ1ZmZlcl9oZWFkICpzX2JoLFxcbi0tXFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDYwMy0vKiBTZXQgdXAgcmVmY291bnQgdHJlZSBhbmQgcmVtYXAgc19pbm9kZSB0byB0X2lub2RlLiAqL1xcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jOjQ2MDQ6bG9mZl90IG9jZnMyX3JlZmxpbmtfcmVtYXBfYmxvY2tzKHN0cnVjdCBpbm9kZSAqc19pbm9kZSxcXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYy00NjA1LVxcdFxcdFxcdFxcdCAgc3RydWN0IGJ1ZmZlcl9oZWFkICpzX2JoLFxcbi0tXFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDY4NS1cXHQvKiBBY3R1YWxseSByZW1hcCBleHRlbnRzIG5vdy4gKi9cXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYzo0Njg2OlxcdHJldCA9IG9jZnMyX3JlZmxpbmtfcmVtYXBfZXh0ZW50KHNfaW5vZGUsIHNfYmgsIHBvc19pbiwgdF9pbm9kZSwgdF9iaCxcXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYy00Njg3LVxcdFxcdFxcdFxcdFxcdCBwb3Nfb3V0LCBsZW4sIFxcdTAwMjZkZWFsbG9jKTtcXG4tLVxcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jLTQ3MDItLyogTG9jayBhbiBpbm9kZSBhbmQgZ3JhYiBhIGJoIHBvaW50aW5nIHRvIHRoZSBpbm9kZS4gKi9cXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYzo0NzAzOmludCBvY2ZzMl9yZWZsaW5rX2lub2Rlc19sb2NrKHN0cnVjdCBpbm9kZSAqc19pbm9kZSxcXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYy00NzA0LVxcdFxcdFxcdCAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqKmJoX3MsXFxuLS1cXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYy00Nzk2LS8qIFVubG9jayBib3RoIGlub2RlcyBhbmQgcmVsZWFzZSBidWZmZXJzLiAqL1xcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jOjQ3OTc6dm9pZCBvY2ZzMl9yZWZsaW5rX2lub2Rlc191bmxvY2soc3RydWN0IGlub2RlICpzX2lub2RlLFxcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jLTQ3OTgtXFx0XFx0XFx0XFx0IHN0cnVjdCBidWZmZXJfaGVhZCAqc19iaCxcXG4tLVxcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5oPTk4PWludCBvY2ZzMl9pbmNyZWFzZV9yZWZjb3VudChoYW5kbGVfdCAqaGFuZGxlLFxcbi0tXFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmgtMTAzLVxcdFxcdFxcdCAgICBzdHJ1Y3Qgb2NmczJfY2FjaGVkX2RlYWxsb2NfY3R4dCAqZGVhbGxvYyk7XFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmg6MTA0OmludCBvY2ZzMl9yZWZsaW5rX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmgtMTA1LVxcdFxcdFxcdGNvbnN0IGNoYXIgX191c2VyICpvbGRuYW1lLFxcbi0tXFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmgtMTA3LVxcdFxcdFxcdGJvb2wgcHJlc2VydmUpO1xcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5oOjEwODpsb2ZmX3Qgb2NmczJfcmVmbGlua19yZW1hcF9ibG9ja3Moc3RydWN0IGlub2RlICpzX2lub2RlLFxcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5oLTEwOS1cXHRcXHRcXHRcXHQgIHN0cnVjdCBidWZmZXJfaGVhZCAqc19iaCxcXG4tLVxcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5oLTExNC1cXHRcXHRcXHRcXHQgIGxvZmZfdCBsZW4pO1xcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5oOjExNTppbnQgb2NmczJfcmVmbGlua19pbm9kZXNfbG9jayhzdHJ1Y3QgaW5vZGUgKnNfaW5vZGUsXFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmgtMTE2LVxcdFxcdFxcdCAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqKmJoMSxcXG4tLVxcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5oLTExOC1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiaDIpO1xcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5oOjExOTp2b2lkIG9jZnMyX3JlZmxpbmtfaW5vZGVzX3VubG9jayhzdHJ1Y3QgaW5vZGUgKnNfaW5vZGUsXFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmgtMTIwLVxcdFxcdFxcdFxcdCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnNfYmgsXFxuLS1cXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuaC0xMjItXFx0XFx0XFx0XFx0IHN0cnVjdCBidWZmZXJfaGVhZCAqdF9iaCk7XFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmg6MTIzOmludCBvY2ZzMl9yZWZsaW5rX3VwZGF0ZV9kZXN0KHN0cnVjdCBpbm9kZSAqZGVzdCxcXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuaC0xMjQtXFx0XFx0XFx0ICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkX2JoLFxcbi0tXFxuZnMvb2NmczIveGF0dHIuYz02MzA4PXN0YXRpYyBpbnQgb2NmczJfZ2V0X3hhdHRyX3ZhbHVlX3Jvb3Qoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmMtNjMzMS0gKi9cXG5mcy9vY2ZzMi94YXR0ci5jOjYzMzI6c3RhdGljIGludCBvY2ZzMl9yZWZsaW5rX2xvY2tfeGF0dHJfYWxsb2NhdG9ycyhzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYixcXG5mcy9vY2ZzMi94YXR0ci5jLTYzMzMtXFx0XFx0XFx0XFx0XFx0c3RydWN0IG9jZnMyX3hhdHRyX2hlYWRlciAqeGgsXFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jLTYzODctICovXFxuZnMvb2NmczIveGF0dHIuYzo2Mzg4OnN0YXRpYyBpbnQgb2NmczJfcmVmbGlua194YXR0cl9oZWFkZXIoaGFuZGxlX3QgKmhhbmRsZSxcXG5mcy9vY2ZzMi94YXR0ci5jLTYzODktXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG9jZnMyX3hhdHRyX3JlZmxpbmsgKmFyZ3MsXFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jLTY0MDctXFxuZnMvb2NmczIveGF0dHIuYzo2NDA4OlxcdHRyYWNlX29jZnMyX3JlZmxpbmtfeGF0dHJfaGVhZGVyKCh1bnNpZ25lZCBsb25nIGxvbmcpb2xkX2JoLVxcdTAwM2ViX2Jsb2NrbnIsXFxuZnMvb2NmczIveGF0dHIuYy02NDA5LVxcdFxcdFxcdFxcdFxcdCBsZTE2X3RvX2NwdSh4aC1cXHUwMDNleGhfY291bnQpKTtcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmMtNjUxNy1cXG5mcy9vY2ZzMi94YXR0ci5jOjY1MTg6c3RhdGljIGludCBvY2ZzMl9yZWZsaW5rX3hhdHRyX2lubGluZShzdHJ1Y3Qgb2NmczJfeGF0dHJfcmVmbGluayAqYXJncylcXG5mcy9vY2ZzMi94YXR0ci5jLTY1MTkte1xcbi0tXFxuZnMvb2NmczIveGF0dHIuYy02NTQ0LVxcbmZzL29jZnMyL3hhdHRyLmM6NjU0NTpcXHRyZXQgPSBvY2ZzMl9yZWZsaW5rX2xvY2tfeGF0dHJfYWxsb2NhdG9ycyhvc2IsIHhoLCBhcmdzLVxcdTAwM2VyZWZfcm9vdF9iaCxcXG5mcy9vY2ZzMi94YXR0ci5jLTY1NDYtXFx0XFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2Y3JlZGl0cywgXFx1MDAyNm1ldGFfYWMpO1xcbi0tXFxuZnMvb2NmczIveGF0dHIuYy02NTcxLVxcbmZzL29jZnMyL3hhdHRyLmM6NjU3MjpcXHRyZXQgPSBvY2ZzMl9yZWZsaW5rX3hhdHRyX2hlYWRlcihoYW5kbGUsIGFyZ3MsIGFyZ3MtXFx1MDAzZW9sZF9iaCwgeGgsXFxuZnMvb2NmczIveGF0dHIuYy02NTczLVxcdFxcdFxcdFxcdFxcdCBhcmdzLVxcdTAwM2VuZXdfYmgsIG5ld194aCwgXFx1MDAyNnZiLCBtZXRhX2FjLFxcbi0tXFxuZnMvb2NmczIveGF0dHIuYz02NTk4PXN0YXRpYyBpbnQgb2NmczJfY3JlYXRlX2VtcHR5X3hhdHRyX2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jLTY2MzMtXFxuZnMvb2NmczIveGF0dHIuYzo2NjM0OnN0YXRpYyBpbnQgb2NmczJfcmVmbGlua194YXR0cl9ibG9jayhzdHJ1Y3Qgb2NmczJfeGF0dHJfcmVmbGluayAqYXJncyxcXG5mcy9vY2ZzMi94YXR0ci5jLTY2MzUtXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJsa19iaCxcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmMtNjY1NS1cXG5mcy9vY2ZzMi94YXR0ci5jOjY2NTY6XFx0cmV0ID0gb2NmczJfcmVmbGlua19sb2NrX3hhdHRyX2FsbG9jYXRvcnMob3NiLCB4aCwgYXJncy1cXHUwMDNlcmVmX3Jvb3RfYmgsXFxuZnMvb2NmczIveGF0dHIuYy02NjU3LVxcdFxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNmNyZWRpdHMsIFxcdTAwMjZtZXRhX2FjKTtcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmMtNjY5MS1cXG5mcy9vY2ZzMi94YXR0ci5jOjY2OTI6XFx0cmV0ID0gb2NmczJfcmVmbGlua194YXR0cl9oZWFkZXIoaGFuZGxlLCBhcmdzLCBibGtfYmgsIHhoLFxcbmZzL29jZnMyL3hhdHRyLmMtNjY5My1cXHRcXHRcXHRcXHRcXHQgbmV3X2Jsa19iaCwgbmV3X3hoLCBcXHUwMDI2dmIsIG1ldGFfYWMsXFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jLTY3MTktXFxuZnMvb2NmczIveGF0dHIuYzo2NzIwOnN0cnVjdCBvY2ZzMl9yZWZsaW5rX3hhdHRyX3RyZWVfYXJncyB7XFxuZnMvb2NmczIveGF0dHIuYy02NzIxLVxcdHN0cnVjdCBvY2ZzMl94YXR0cl9yZWZsaW5rICpyZWZsaW5rO1xcbi0tXFxuZnMvb2NmczIveGF0dHIuYz02NzM0PXN0YXRpYyBpbnQgb2NmczJfZ2V0X3JlZmxpbmtfeGF0dHJfdmFsdWVfcm9vdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbi0tXFxuZnMvb2NmczIveGF0dHIuYy02NzQxLXtcXG5mcy9vY2ZzMi94YXR0ci5jOjY3NDI6XFx0c3RydWN0IG9jZnMyX3JlZmxpbmtfeGF0dHJfdHJlZV9hcmdzICphcmdzID1cXG5mcy9vY2ZzMi94YXR0ci5jOjY3NDM6XFx0XFx0XFx0KHN0cnVjdCBvY2ZzMl9yZWZsaW5rX3hhdHRyX3RyZWVfYXJncyAqKXBhcmE7XFxuZnMvb2NmczIveGF0dHIuYy02NzQ0LVxcdHN0cnVjdCBvY2ZzMl94YXR0cl9idWNrZXQgKmJ1Y2tldDtcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmM9Njc5OT1zdGF0aWMgaW50IG9jZnMyX2xvY2tfcmVmbGlua194YXR0cl9yZWNfYWxsb2NhdG9ycyhcXG5mcy9vY2ZzMi94YXR0ci5jOjY4MDA6XFx0XFx0XFx0XFx0c3RydWN0IG9jZnMyX3JlZmxpbmtfeGF0dHJfdHJlZV9hcmdzICphcmdzLFxcbmZzL29jZnMyL3hhdHRyLmMtNjgwMS1cXHRcXHRcXHRcXHRzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKnh0X2V0LFxcbi0tXFxuZnMvb2NmczIveGF0dHIuYy02ODg0LVxcbmZzL29jZnMyL3hhdHRyLmM6Njg4NTpzdGF0aWMgaW50IG9jZnMyX3JlZmxpbmtfeGF0dHJfYnVja2V0KGhhbmRsZV90ICpoYW5kbGUsXFxuZnMvb2NmczIveGF0dHIuYy02ODg2LVxcdFxcdFxcdFxcdHU2NCBibGtubywgdTY0IG5ld19ibGtubywgdTMyIGNsdXN0ZXJzLFxcbi0tXFxuZnMvb2NmczIveGF0dHIuYy02ODg5LVxcdFxcdFxcdFxcdHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICpkYXRhX2FjLFxcbmZzL29jZnMyL3hhdHRyLmM6Njg5MDpcXHRcXHRcXHRcXHRzdHJ1Y3Qgb2NmczJfcmVmbGlua194YXR0cl90cmVlX2FyZ3MgKmFyZ3MpXFxuZnMvb2NmczIveGF0dHIuYy02ODkxLXtcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmMtNjkzOC1cXG5mcy9vY2ZzMi94YXR0ci5jOjY5Mzk6XFx0XFx0cmV0ID0gb2NmczJfcmVmbGlua194YXR0cl9oZWFkZXIoaGFuZGxlLCBhcmdzLVxcdTAwM2VyZWZsaW5rLFxcbmZzL29jZnMyL3hhdHRyLmMtNjk0MC1cXHRcXHRcXHRcXHRcXHRhcmdzLVxcdTAwM2VvbGRfYnVja2V0LVxcdTAwM2VidV9iaHNbMF0sXFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jLTY5NzUtXFxuZnMvb2NmczIveGF0dHIuYzo2OTc2OnN0YXRpYyBpbnQgb2NmczJfcmVmbGlua194YXR0cl9idWNrZXRzKGhhbmRsZV90ICpoYW5kbGUsXFxuZnMvb2NmczIveGF0dHIuYy02OTc3LVxcdFxcdFxcdFxcdHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuZnMvb2NmczIveGF0dHIuYzo2OTc4OlxcdFxcdFxcdFxcdHN0cnVjdCBvY2ZzMl9yZWZsaW5rX3hhdHRyX3RyZWVfYXJncyAqYXJncyxcXG5mcy9vY2ZzMi94YXR0ci5jLTY5NzktXFx0XFx0XFx0XFx0c3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCxcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmMtNzAwOS1cXG5mcy9vY2ZzMi94YXR0ci5jOjcwMTA6XFx0XFx0cmV0ID0gb2NmczJfcmVmbGlua194YXR0cl9idWNrZXQoaGFuZGxlLCBibGtubyxcXG5mcy9vY2ZzMi94YXR0ci5jLTcwMTEtXFx0XFx0XFx0XFx0XFx0XFx0IG5ld19ibGtubywgbnVtX2NsdXN0ZXJzLFxcbi0tXFxuZnMvb2NmczIveGF0dHIuYy03MDMyLVxcbmZzL29jZnMyL3hhdHRyLmM6NzAzMzpcXHRcXHR0cmFjZV9vY2ZzMl9yZWZsaW5rX3hhdHRyX2J1Y2tldHMoKHVuc2lnbmVkIGxvbmcgbG9uZyluZXdfYmxrbm8sXFxuZnMvb2NmczIveGF0dHIuYy03MDM0LVxcdFxcdFxcdFxcdFxcdFxcdCAgbnVtX2NsdXN0ZXJzLCByZWZsaW5rX2Nwb3MpO1xcbi0tXFxuZnMvb2NmczIveGF0dHIuYy03MDQ2LSAqL1xcbmZzL29jZnMyL3hhdHRyLmM6NzA0NzpzdGF0aWMgaW50IG9jZnMyX3JlZmxpbmtfeGF0dHJfcmVjKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuZnMvb2NmczIveGF0dHIuYy03MDQ4LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBidWZmZXJfaGVhZCAqcm9vdF9iaCxcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmMtNzA1NS1cXHRoYW5kbGVfdCAqaGFuZGxlO1xcbmZzL29jZnMyL3hhdHRyLmM6NzA1NjpcXHRzdHJ1Y3Qgb2NmczJfcmVmbGlua194YXR0cl90cmVlX2FyZ3MgKmFyZ3MgPVxcbmZzL29jZnMyL3hhdHRyLmM6NzA1NzpcXHRcXHRcXHQoc3RydWN0IG9jZnMyX3JlZmxpbmtfeGF0dHJfdHJlZV9hcmdzICopcGFyYTtcXG5mcy9vY2ZzMi94YXR0ci5jLTcwNTgtXFx0c3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihpbm9kZS1cXHUwMDNlaV9zYik7XFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jLTcwNjItXFxuZnMvb2NmczIveGF0dHIuYzo3MDYzOlxcdHRyYWNlX29jZnMyX3JlZmxpbmtfeGF0dHJfcmVjKCh1bnNpZ25lZCBsb25nIGxvbmcpYmxrbm8sIGxlbik7XFxuZnMvb2NmczIveGF0dHIuYy03MDY0LVxcbi0tXFxuZnMvb2NmczIveGF0dHIuYy03MDgzLVxcbmZzL29jZnMyL3hhdHRyLmM6NzA4NDpcXHRyZXQgPSBvY2ZzMl9yZWZsaW5rX3hhdHRyX2J1Y2tldHMoaGFuZGxlLCBpbm9kZSwgYXJncywgXFx1MDAyNmV0LFxcbmZzL29jZnMyL3hhdHRyLmMtNzA4NS1cXHRcXHRcXHRcXHRcXHQgIG1ldGFfYWMsIGRhdGFfYWMsXFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jLTcxMDQtICovXFxuZnMvb2NmczIveGF0dHIuYzo3MTA1OnN0YXRpYyBpbnQgb2NmczJfcmVmbGlua194YXR0cl90cmVlKHN0cnVjdCBvY2ZzMl94YXR0cl9yZWZsaW5rICphcmdzLFxcbmZzL29jZnMyL3hhdHRyLmMtNzEwNi1cXHRcXHRcXHRcXHQgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpibGtfYmgsXFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jLTcxMDktXFx0aW50IHJldDtcXG5mcy9vY2ZzMi94YXR0ci5jOjcxMTA6XFx0c3RydWN0IG9jZnMyX3JlZmxpbmtfeGF0dHJfdHJlZV9hcmdzIHBhcmE7XFxuZnMvb2NmczIveGF0dHIuYy03MTExLVxcbi0tXFxuZnMvb2NmczIveGF0dHIuYy03MTMwLVxcdHJldCA9IG9jZnMyX2l0ZXJhdGVfeGF0dHJfaW5kZXhfYmxvY2soYXJncy1cXHUwMDNlb2xkX2lub2RlLCBibGtfYmgsXFxuZnMvb2NmczIveGF0dHIuYzo3MTMxOlxcdFxcdFxcdFxcdFxcdCAgICAgIG9jZnMyX3JlZmxpbmtfeGF0dHJfcmVjLFxcbmZzL29jZnMyL3hhdHRyLmMtNzEzMi1cXHRcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2cGFyYSk7XFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jLTcxNDEtXFxuZnMvb2NmczIveGF0dHIuYzo3MTQyOnN0YXRpYyBpbnQgb2NmczJfcmVmbGlua194YXR0cl9pbl9ibG9jayhzdHJ1Y3Qgb2NmczJfeGF0dHJfcmVmbGluayAqYXJncyxcXG5mcy9vY2ZzMi94YXR0ci5jLTcxNDMtXFx0XFx0XFx0XFx0XFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpibGtfYmgpXFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jLTcxNjEtXFx0aWYgKCFpbmRleGVkKVxcbmZzL29jZnMyL3hhdHRyLmM6NzE2MjpcXHRcXHRyZXQgPSBvY2ZzMl9yZWZsaW5rX3hhdHRyX2Jsb2NrKGFyZ3MsIGJsa19iaCwgbmV3X2Jsa19iaCk7XFxuZnMvb2NmczIveGF0dHIuYy03MTYzLVxcdGVsc2VcXG5mcy9vY2ZzMi94YXR0ci5jOjcxNjQ6XFx0XFx0cmV0ID0gb2NmczJfcmVmbGlua194YXR0cl90cmVlKGFyZ3MsIGJsa19iaCwgbmV3X2Jsa19iaCk7XFxuZnMvb2NmczIveGF0dHIuYy03MTY1LVxcdGlmIChyZXQpXFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jLTcxNzItXFxuZnMvb2NmczIveGF0dHIuYzo3MTczOnN0YXRpYyBpbnQgb2NmczJfcmVmbGlua194YXR0cl9ub19zZWN1cml0eShzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkgKnhlKVxcbmZzL29jZnMyL3hhdHRyLmMtNzE3NC17XFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jLTcxODEtXFxuZnMvb2NmczIveGF0dHIuYzo3MTgyOmludCBvY2ZzMl9yZWZsaW5rX3hhdHRycyhzdHJ1Y3QgaW5vZGUgKm9sZF9pbm9kZSxcXG5mcy9vY2ZzMi94YXR0ci5jLTcxODMtXFx0XFx0XFx0IHN0cnVjdCBidWZmZXJfaGVhZCAqb2xkX2JoLFxcbi0tXFxuZnMvb2NmczIveGF0dHIuYy03MjE2LVxcdGVsc2VcXG5mcy9vY2ZzMi94YXR0ci5jOjcyMTc6XFx0XFx0YXJncy54YXR0cl9yZWZsaW5rZWQgPSBvY2ZzMl9yZWZsaW5rX3hhdHRyX25vX3NlY3VyaXR5O1xcbmZzL29jZnMyL3hhdHRyLmMtNzIxOC1cXG5mcy9vY2ZzMi94YXR0ci5jLTcyMTktXFx0aWYgKG9pLVxcdTAwM2VpcF9keW5fZmVhdHVyZXMgXFx1MDAyNiBPQ0ZTMl9JTkxJTkVfWEFUVFJfRkwpIHtcXG5mcy9vY2ZzMi94YXR0ci5jOjcyMjA6XFx0XFx0cmV0ID0gb2NmczJfcmVmbGlua194YXR0cl9pbmxpbmUoXFx1MDAyNmFyZ3MpO1xcbmZzL29jZnMyL3hhdHRyLmMtNzIyMS1cXHRcXHRpZiAocmV0KSB7XFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jLTcyMzYtXFxuZnMvb2NmczIveGF0dHIuYzo3MjM3OlxcdHJldCA9IG9jZnMyX3JlZmxpbmtfeGF0dHJfaW5fYmxvY2soXFx1MDAyNmFyZ3MsIGJsa19iaCk7XFxuZnMvb2NmczIveGF0dHIuYy03MjM4LVxcdGlmIChyZXQpXFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5oPTc4PWludCBvY2ZzMl94YXR0cl9hdHRhY2hfcmVmY291bnRfdHJlZShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvb2NmczIveGF0dHIuaC04Mi1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBvY2ZzMl9jYWNoZWRfZGVhbGxvY19jdHh0ICpkZWFsbG9jKTtcXG5mcy9vY2ZzMi94YXR0ci5oOjgzOmludCBvY2ZzMl9yZWZsaW5rX3hhdHRycyhzdHJ1Y3QgaW5vZGUgKm9sZF9pbm9kZSxcXG5mcy9vY2ZzMi94YXR0ci5oLTg0LVxcdFxcdFxcdCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKm9sZF9iaCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDg6MDg6NDYuMDIwOTMyNjgxWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4NDU0OTc3NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE9DRlMyIEZ1bmN0aW9uIENhbGxzIGFuZCBTY29wZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZSBjYWxsIGZsb3cgaGVyZS4gSXQgYXBwZWFycyBgb2NmczJfcmVmbGlua2AgaXMgdWx0aW1hdGVseSB0cmlnZ2VyZWQgdGhyb3VnaCB0aGUgaW9jdGwgc3lzdGVtIGNhbGxzLCBzcGVjaWZpY2FsbHkgYG9jZnMyX3JlZmxpbmtfaW9jdGxgLCB3aGljaCBpdHNlbGYgaXMgaW52b2tlZCBieSBgb2NmczJfaW9jdGxgIGFuZCBgb2NmczJfY29tcGF0X2lvY3RsYC4gTXkgbWFpbiBmb2N1cyBpcyBvbiBhIGZldyBrZXkgZnVuY3Rpb25zIGluIHRoaXMgY29udGV4dDogYG9jZnMyX21rbm9kYCwgYG9jZnMyX21rZGlyYCwgYG9jZnMyX2NyZWF0ZWAsIGBvY2ZzMl9zeW1saW5rYCwgbmF0dXJhbGx5IGBvY2ZzMl9yZWZsaW5rYCwgYW5kIHRoZW4gYWxzbyB0aGUgQUNML3NlY3VyaXR5IGluaXRpYWxpemF0aW9uIHJvdXRpbmVzOiBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYCwgYG9jZnMyX2luaXRfYWNsYCwgYG9jZnMyX2FjbF9pbml0X3ByZXBhcmVgLCBhbmQgZmluYWxseSBgb2NmczJfY2FsY194YXR0cl9pbml0YC5cblxuV2FpdCBhIG1pbnV0ZSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBzY29wZSBvbiB0aG9zZSBmaXJzdCBmb3VyIEkgbGlzdGVkLiBBcmUgYG9jZnMyX21rbm9kYCwgYG9jZnMyX21rZGlyYCwgYG9jZnMyX2NyZWF0ZWAsIGFuZCBgb2NmczJfc3ltbGlua2AgYWN0dWFsbHkgc3RhdGljPyBIbW0sIHllYWgsIHRoZXkgYXJlLiBUaGF0J3MgZ29vZCB0byBrbm93LiBTbywgdGhhdCBsZWF2ZXMgbWUgd2l0aCB0aGUgaW5pdGlhbGl6YXRpb24gcm91dGluZXMgYW5kIGBvY2ZzMl94YXR0cl9zZXRfaGFuZGxlYCwgYW5kIHRoZSByZWZsaW5rIGZ1bmN0aW9uIGFzIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzLiBUaGF0J3MgaGVscGZ1bCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIGtlcm5lbCBpbnRlcmFjdHMgd2l0aCB0aGVzZSBwYXJ0cyBvZiB0aGUgZmlsZXN5c3RlbS4gSSBzaG91bGQgdGFrZSBhIGxvb2sgYXQgYG9jZnMyX3hhdHRyX3NldF9oYW5kbGVgIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjExMDgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDg6MDg6NTIuODY2NDMzNjI2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDYyNDYzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvY2ZzMl94YXR0cl9zZXRfaGFuZGxlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL29jZnMyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9vY2ZzMi9hY2wuYz0yMTQ9c3RhdGljIGludCBvY2ZzMl9zZXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsXFxuLS1cXG5mcy9vY2ZzMi9hY2wuYy0yNDktXFx0aWYgKGhhbmRsZSlcXG5mcy9vY2ZzMi9hY2wuYzoyNTA6XFx0XFx0cmV0ID0gb2NmczJfeGF0dHJfc2V0X2hhbmRsZShoYW5kbGUsIGlub2RlLCBkaV9iaCwgbmFtZV9pbmRleCxcXG5mcy9vY2ZzMi9hY2wuYy0yNTEtXFx0XFx0XFx0XFx0XFx0ICAgICBcXFwiXFxcIiwgdmFsdWUsIHNpemUsIDAsXFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jPTMzMDU9c3RhdGljIGludCBvY2ZzMl9pbml0X3hhdHRyX3NldF9jdHh0KHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jLTMzNjAtXFxuZnMvb2NmczIveGF0dHIuYzozMzYxOnN0YXRpYyBpbnQgX19vY2ZzMl94YXR0cl9zZXRfaGFuZGxlKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuZnMvb2NmczIveGF0dHIuYy0zMzYyLVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgb2NmczJfZGlub2RlICpkaSxcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmMtMzUwMi0gKi9cXG5mcy9vY2ZzMi94YXR0ci5jOjM1MDM6aW50IG9jZnMyX3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlX3QgKmhhbmRsZSxcXG5mcy9vY2ZzMi94YXR0ci5jLTM1MDQtXFx0XFx0XFx0ICAgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmMtMzU2Ni1cXG5mcy9vY2ZzMi94YXR0ci5jOjM1Njc6XFx0cmV0ID0gX19vY2ZzMl94YXR0cl9zZXRfaGFuZGxlKGlub2RlLCBkaSwgXFx1MDAyNnhpLCBcXHUwMDI2eGlzLCBcXHUwMDI2eGJzLCBcXHUwMDI2Y3R4dCk7XFxuZnMvb2NmczIveGF0dHIuYy0zNTY4LVxcbi0tXFxuZnMvb2NmczIveGF0dHIuYz0zNTgzPWludCBvY2ZzMl94YXR0cl9zZXQoc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmMtMzcwMy1cXG5mcy9vY2ZzMi94YXR0ci5jOjM3MDQ6XFx0cmV0ID0gX19vY2ZzMl94YXR0cl9zZXRfaGFuZGxlKGlub2RlLCBkaSwgXFx1MDAyNnhpLCBcXHUwMDI2eGlzLCBcXHUwMDI2eGJzLCBcXHUwMDI2Y3R4dCk7XFxuZnMvb2NmczIveGF0dHIuYy0zNzA1LVxcdG9jZnMyX3VwZGF0ZV9pbm9kZV9mc3luY190cmFucyhjdHh0LmhhbmRsZSwgaW5vZGUsIDApO1xcbi0tXFxuZnMvb2NmczIveGF0dHIuYz03Mzc2PWludCBvY2ZzMl9pbml0X3NlY3VyaXR5X3NldChoYW5kbGVfdCAqaGFuZGxlLFxcbi0tXFxuZnMvb2NmczIveGF0dHIuYy03MzgyLXtcXG5mcy9vY2ZzMi94YXR0ci5jOjczODM6XFx0cmV0dXJuIG9jZnMyX3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlLCBpbm9kZSwgZGlfYmgsXFxuZnMvb2NmczIveGF0dHIuYy03Mzg0LVxcdFxcdFxcdFxcdCAgICAgT0NGUzJfWEFUVFJfSU5ERVhfU0VDVVJJVFksXFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5oPTM4PWludCBvY2ZzMl94YXR0cl9zZXQoc3RydWN0IGlub2RlICosIGludCwgY29uc3QgY2hhciAqLCBjb25zdCB2b2lkICosXFxuZnMvb2NmczIveGF0dHIuaC0zOS1cXHRcXHQgICAgc2l6ZV90LCBpbnQpO1xcbmZzL29jZnMyL3hhdHRyLmg6NDA6aW50IG9jZnMyX3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlX3QgKiwgc3RydWN0IGlub2RlICosIHN0cnVjdCBidWZmZXJfaGVhZCAqLFxcbmZzL29jZnMyL3hhdHRyLmgtNDEtXFx0XFx0XFx0ICAgaW50LCBjb25zdCBjaGFyICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBpbnQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDA4OjA4OjUyLjkyNzA2MjYwNFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzYzNzM2MzkwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipUcmFjaW5nIHRoZSBBQ0wgYW5kIFNlY3VyaXR5IEF0dHJpYnV0ZSBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gaG93IHRoaXMgYWxsIGZpdHMgdG9nZXRoZXIuIEknbSBmb2N1c2luZyBvbiB0aGUgQUNMIGFuZCBzZWN1cml0eSBhdHRyaWJ1dGUgaW5pdGlhbGl6YXRpb24gcGF0aHdheXMgd2l0aGluIHRoaXMgT0NGUzIgZmlsZXN5c3RlbS4gTXkgdGhpbmtpbmcgaXMgdGhhdCB0aGUgYmVzdCBhcHByb2FjaCBoZXJlIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGxpbmcgcmVsYXRpb25zaGlwcy5cblxuSXQgbG9va3MgbGlrZSBgb2NmczJfeGF0dHJfc2V0X2hhbmRsZWAgaXMgdGhlIHdvcmtob3JzZSBoZXJlLCBhbmQgaXQncyBjYWxsZWQgZnJvbSB0d28ga2V5IGxvY2F0aW9uczogYG9jZnMyX3NldF9hY2xgIGFuZCBgb2NmczJfaW5pdF9zZWN1cml0eV9zZXRgLiBBbHJpZ2h0LCBgb2NmczJfc2V0X2FjbGAgaXRzZWxmIGlzIGNhbGxlZCBieSBgb2NmczJfaW5pdF9hY2xgIGFuZCBgb2NmczJfaW9wX3NldF9hY2xgLiBBbmQsIHNpbmNlIGBvY2ZzMl9pb3Bfc2V0X2FjbGAgaXMgdGhlIGAuc2V0X2FjbGAgaW5vZGUgb3BlcmF0aW9uLCB0aGF0IGNvbmZpcm1zIGl0cyBpbXBvcnRhbmNlLlxuXG5UaGVyZWZvcmUsIG15IG1haW4gaW50ZXJlc3QgaXMgaW4gdGhlc2UgZW50cnkgcG9pbnRzOlxuXG4qICAgYG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbGAgKGFzIGEgcG90ZW50aWFsIGluaXRpYWxpemF0aW9uIGVudHJ5IHBvaW50KVxuKiAgIGBvY2ZzMl9pbml0X2FjbGAgKGFub3RoZXIgaW5pdGlhbGl6YXRpb24gZW50cnkgcG9pbnQpXG4qICAgYG9jZnMyX2FjbF9pbml0X3ByZXBhcmVgIChhIGZ1bmN0aW9uIHdoaWNoIGFwcGVhcnMgdG8gYmUgaW52b2x2ZWQgaW4gdGhlIHByZXBhcmF0aW9uKVxuKiAgIGBvY2ZzMl9jYWxjX3hhdHRyX2luaXRgIChwZXJoYXBzIHVzZWQgZm9yIGluaXRpYWwgY2FsY3VsYXRpb25zIHJlbGF0ZWQgdG8gZXh0ZW5kZWQgYXR0cmlidXRlcylcbiogICBgb2NmczJfeGF0dHJfc2V0X2hhbmRsZWAgKHRoZSBjb3JlIGZ1bmN0aW9uIGZvciBzZXR0aW5nIHRoZSBhdHRyaWJ1dGVzKVxuKiAgIGBvY2ZzMl9pb3Bfc2V0X2FjbGAgKHRoZSBhY3R1YWwgaW5vZGUgb3BlcmF0aW9uIGNhbGxlZCBieSB1c2Vyc3BhY2UpXG5cbkJ1dCBJIGhhdmUgdG8gYmUgdGhvcm91Z2guLi4gSXMgdGhlcmUgYW55IG90aGVyIGVudHJ5IHBvaW50P1xuXG5IbW0sIEkgc2VlIGBvY2ZzMl9yZWZsaW5rX2lvY3RsYCBpcyBub24tc3RhdGljLCB3aGljaCBtZWFucyBpdCdzIGV4cG9ydGVkIGFuZCBjb3VsZCBiZSBpbnZvbHZlZCBpbiBzb21lIHJlbGF0ZWQgb3BlcmF0aW9ucy4gQW5kLCBvZiBjb3Vyc2UsIHRoZSBnZW5lcmFsIGBvY2ZzMl9pb2N0bGAgYW5kIGBvY2ZzMl9jb21wYXRfaW9jdGxgIGZ1bmN0aW9ucyBhcmUgbm9uLXN0YXRpYyBhbmQgd29ydGggYSBsb29rLCB0b28uXG5cbkkgc2hvdWxkIHByb2JhYmx5IGZvY3VzIG9uIGBvY2ZzMl9pb3Bfc2V0X2FjbGAgbmV4dCB0byBzdGFydCBteSBpbnZlc3RpZ2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjU4NywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwODowOTowNi41NjQ0MjkyNjdaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxMzE2MTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9jZnMyX2lvcF9zZXRfYWNsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL29jZnMyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9vY2ZzMi9hY2wuYz0yMTQ9c3RhdGljIGludCBvY2ZzMl9zZXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsXFxuLS1cXG5mcy9vY2ZzMi9hY2wuYy0yNjItXFxuZnMvb2NmczIvYWNsLmM6MjYzOmludCBvY2ZzMl9pb3Bfc2V0X2FjbChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbmZzL29jZnMyL2FjbC5jLTI2NC1cXHRcXHQgICAgICBzdHJ1Y3QgcG9zaXhfYWNsICphY2wsIGludCB0eXBlKVxcbi0tXFxuZnMvb2NmczIvYWNsLmg9MTk9c3RydWN0IHBvc2l4X2FjbCAqb2NmczJfaW9wX2dldF9hY2woc3RydWN0IGlub2RlICppbm9kZSwgaW50IHR5cGUsIGJvb2wgcmN1KTtcXG5mcy9vY2ZzMi9hY2wuaDoyMDppbnQgb2NmczJfaW9wX3NldF9hY2woc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG5mcy9vY2ZzMi9hY2wuaC0yMS1cXHRcXHQgICAgICBzdHJ1Y3QgcG9zaXhfYWNsICphY2wsIGludCB0eXBlKTtcXG4tLVxcbmZzL29jZnMyL2ZpbGUuYz0yNzg4PWNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG9jZnMyX2ZpbGVfaW9wcyA9IHtcXG4tLVxcbmZzL29jZnMyL2ZpbGUuYy0yNzk0LVxcdC5nZXRfaW5vZGVfYWNsXFx0PSBvY2ZzMl9pb3BfZ2V0X2FjbCxcXG5mcy9vY2ZzMi9maWxlLmM6Mjc5NTpcXHQuc2V0X2FjbFxcdD0gb2NmczJfaW9wX3NldF9hY2wsXFxuZnMvb2NmczIvZmlsZS5jLTI3OTYtXFx0LmZpbGVhdHRyX2dldFxcdD0gb2NmczJfZmlsZWF0dHJfZ2V0LFxcbi0tXFxuZnMvb2NmczIvZmlsZS5jPTI4MDA9Y29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgb2NmczJfc3BlY2lhbF9maWxlX2lvcHMgPSB7XFxuLS1cXG5mcy9vY2ZzMi9maWxlLmMtMjgwNS1cXHQuZ2V0X2lub2RlX2FjbFxcdD0gb2NmczJfaW9wX2dldF9hY2wsXFxuZnMvb2NmczIvZmlsZS5jOjI4MDY6XFx0LnNldF9hY2xcXHQ9IG9jZnMyX2lvcF9zZXRfYWNsLFxcbmZzL29jZnMyL2ZpbGUuYy0yODA3LX07XFxuLS1cXG5mcy9vY2ZzMi9uYW1laS5jPTI5MzM9Y29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgb2NmczJfZGlyX2lvcHMgPSB7XFxuLS1cXG5mcy9vY2ZzMi9uYW1laS5jLTI5NDgtXFx0LmdldF9pbm9kZV9hY2xcXHQ9IG9jZnMyX2lvcF9nZXRfYWNsLFxcbmZzL29jZnMyL25hbWVpLmM6Mjk0OTpcXHQuc2V0X2FjbFxcdD0gb2NmczJfaW9wX3NldF9hY2wsXFxuZnMvb2NmczIvbmFtZWkuYy0yOTUwLVxcdC5maWxlYXR0cl9nZXRcXHQ9IG9jZnMyX2ZpbGVhdHRyX2dldCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDg6MDk6MDYuNjI1NzQ5Mjc0WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY1ODk4MDAxMDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBPQ0ZTMiBBQ0wgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBvY2ZzMl9pb3Bfc2V0X2FjbGAgZnVuY3Rpb24g4oCTIHRoYXQncyB0aGUgYC5zZXRfYWNsYCBvcGVyYXRpb24sIGdvdCBpdC4gQnV0IHRoZSBwYXRjaCBpcyBzcGVjaWZpY2FsbHkgdG91Y2hpbmcgYG9jZnMyX2luaXRfYWNsYCBhbmQgYG9jZnMyX2NhbGNfeGF0dHJfaW5pdGAuIFRob3NlIGFyZSBnZXR0aW5nIGNhbGxlZCBkdXJpbmcgaW5vZGUgY3JlYXRpb24sIHRoaW5ncyBsaWtlIGBta25vZGAsIGBta2RpcmAsIGBjcmVhdGVgLCBgc3ltbGlua2AsIGFuZCBgcmVmbGlua2AuIFNvLCB0aGUgcmVhbGx5IGtleSBzeW1ib2xzIHRvIGZvY3VzIG9uIGFyZTogYG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbGAsIGBvY2ZzMl9pbml0X2FjbGAsIGBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlYCwgYG9jZnMyX2NhbGNfeGF0dHJfaW5pdGAsIGBvY2ZzMl94YXR0cl9zZXRfaGFuZGxlYCwgYW5kIGBvY2ZzMl9yZWZsaW5rX2lvY3RsYC5cblxuTGV0J3MgbWFrZSBzdXJlIHRoZXNlIHRoaW5ncyBhcmUgYWN0dWFsbHkgcmVhY2hhYmxlLiAgYG9jZnMyX21rbm9kYCwgeWVwLCB0aGF0IGdvZXMgdGhyb3VnaCBgdmZzX21rbm9kYC4gYG9jZnMyX21rZGlyYCBpcyBoYW5kbGVkIHRocm91Z2ggYHZmc19ta2RpcmAuIEFuZCBgb2NmczJfY3JlYXRlYCB1c2VzIGB2ZnNfY3JlYXRlYCwgYG9jZnMyX3N5bWxpbmtgIGdvZXMgdGhyb3VnaCBgdmZzX3N5bWxpbmtgLCBhbmQgIGBvY2ZzMl9yZWZsaW5rYCBpcyBhY2Nlc3NlZCB2aWEgYGlvY3RsYC4gR29vZCwgdGhpcyBwYXRjaCBpcyBkZWZpbml0ZWx5IGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZS5cblxuQWxyaWdodCwgdGhlIHBhdGNoIGlzIHJlbW92aW5nIGBkb3duX3dyaXRlKFx1MDAyNk9DRlMyX0koaW5vZGUpLVx1MDAzZWlwX3hhdHRyX3NlbSlgIGZyb20gYG9jZnMyX3hhdHRyX3NldF9oYW5kbGVgLiBBcHBhcmVudGx5LCB0aGF0IHdhcyBjYXVzaW5nIHNvbWUga2luZCBvZiBkZWFkbG9jaywgYW5kIGl0J3Mgb25seSBjYWxsZWQgZHVyaW5nIGlub2RlIGNyZWF0aW9uIHdoZW4gdGhlIGlub2RlIGlzbid0IHlldCBwdWJsaXNoZWQuIEJ1dCwgd2FpdCBhIG1pbnV0ZSwgYG9jZnMyX3hhdHRyX3NldF9oYW5kbGVgIGlzIGFsc28gdXNlZCBieSBgb2NmczJfc2V0X2FjbGAgYW5kIGBvY2ZzMl9pbml0X3NlY3VyaXR5X3NldGAuICBIYW5nIG9uLCBpcyBgb2NmczJfc2V0X2FjbGAgKm9ubHkqIGNhbGxlZCBkdXJpbmcgaW5vZGUgY3JlYXRpb24/IEkgbmVlZCB0byBkb3VibGUtY2hlY2sgYG9jZnMyX3NldF9hY2xgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzk1MSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwODowOToxMy4yMTU1NTIyNjZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTM2MDgyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvY2ZzMl9zZXRfYWNsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL29jZnMyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9vY2ZzMi9hY2wuYz0xNTg9c3RhdGljIGludCBvY2ZzMl9hY2xfc2V0X21vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCxcXG4tLVxcbmZzL29jZnMyL2FjbC5jLTIxMy0gKi9cXG5mcy9vY2ZzMi9hY2wuYzoyMTQ6c3RhdGljIGludCBvY2ZzMl9zZXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsXFxuZnMvb2NmczIvYWNsLmMtMjE1LVxcdFxcdFxcdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvb2NmczIvYWNsLmM9MjYzPWludCBvY2ZzMl9pb3Bfc2V0X2FjbChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbi0tXFxuZnMvb2NmczIvYWNsLmMtMjg1LVxcdH1cXG5mcy9vY2ZzMi9hY2wuYzoyODY6XFx0c3RhdHVzID0gb2NmczJfc2V0X2FjbChOVUxMLCBpbm9kZSwgYmgsIHR5cGUsIGFjbCwgTlVMTCwgTlVMTCk7XFxuZnMvb2NmczIvYWNsLmMtMjg3LXVubG9jazpcXG4tLVxcbmZzL29jZnMyL2FjbC5jPTMyMT1pbnQgb2NmczJfYWNsX2NobW9kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpXFxuLS1cXG5mcy9vY2ZzMi9hY2wuYy0zNDAtXFx0XFx0cmV0dXJuIHJldDtcXG5mcy9vY2ZzMi9hY2wuYzozNDE6XFx0cmV0ID0gb2NmczJfc2V0X2FjbChOVUxMLCBpbm9kZSwgTlVMTCwgQUNMX1RZUEVfQUNDRVNTLFxcbmZzL29jZnMyL2FjbC5jLTM0Mi1cXHRcXHRcXHQgICAgYWNsLCBOVUxMLCBOVUxMKTtcXG4tLVxcbmZzL29jZnMyL2FjbC5jPTQxND1pbnQgb2NmczJfaW5pdF9hY2woaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL29jZnMyL2FjbC5jLTQyNy1cXHRcXHRpZiAoU19JU0RJUihpbm9kZS1cXHUwMDNlaV9tb2RlKSBcXHUwMDI2XFx1MDAyNiBzdGF0ZS1cXHUwMDNlZGVmYXVsdF9hY2wpIHtcXG5mcy9vY2ZzMi9hY2wuYzo0Mjg6XFx0XFx0XFx0cmV0ID0gb2NmczJfc2V0X2FjbChoYW5kbGUsIGlub2RlLCBkaV9iaCxcXG5mcy9vY2ZzMi9hY2wuYy00MjktXFx0XFx0XFx0XFx0XFx0ICAgIEFDTF9UWVBFX0RFRkFVTFQsXFxuLS1cXG5mcy9vY2ZzMi9hY2wuYy00NDQtXFx0XFx0aWYgKHN0YXRlLVxcdTAwM2VhY2wpIHtcXG5mcy9vY2ZzMi9hY2wuYzo0NDU6XFx0XFx0XFx0cmV0ID0gb2NmczJfc2V0X2FjbChoYW5kbGUsIGlub2RlLCBkaV9iaCxcXG5mcy9vY2ZzMi9hY2wuYy00NDYtXFx0XFx0XFx0XFx0XFx0ICAgIEFDTF9UWVBFX0FDQ0VTUywgc3RhdGUtXFx1MDAzZWFjbCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDg6MDk6MTMuMzI0OTE2MzEyWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NjEzMjMyNzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBPQ0ZTMiBBQ0wgU2V0dGluZyBNZWNoYW5pc20qKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYG9jZnMyX3NldF9hY2xgIGZ1bmN0aW9uIGFuZCBpbW1lZGlhdGVseSBhIGtleSBwb2ludCBqdW1wcyBvdXQgYXQgbWUuIEknbSBzZWVpbmcgdGhhdCBpdCdzIGNhbGxlZCBieSBib3RoIGBvY2ZzMl9pb3Bfc2V0X2FjbGAgYW5kIGBvY2ZzMl9hY2xfY2htb2RgLiBUaGUgaW50ZXJlc3RpbmcgdGhpbmcgaXMgdGhhdCBzb21ldGltZXMsIHdpdGggdGhlc2UgY2FsbGVycywgdGhlICpoYW5kbGUqIHBhcmFtZXRlciBpcyBOVUxMLiBUaGF0IHNlZW1zIHNpZ25pZmljYW50LlxuXG5Ob3csIGEgYmVsbCBpcyByaW5naW5nIGluIG15IGhlYWQuIFdoZW4gdGhlICpoYW5kbGUqIGlzIE5VTEwsIGBvY2ZzMl9zZXRfYWNsYCBkb2Vzbid0IHVzZSB0aGUgaGFuZGxlLWJhc2VkIHhhdHRyIHNldHRpbmcgZnVuY3Rpb24sIGBvY2ZzMl94YXR0cl9zZXRfaGFuZGxlYCwgYnV0IHJhdGhlciB0aGUgc3RhbmRhcmQgYG9jZnMyX3hhdHRyX3NldGAuIFRoYXQgZGlmZmVyZW5jZSBjb3VsZCBiZSBjcnVjaWFsIGZvciBwZXJmb3JtYW5jZSBvciBpbiB0cmlnZ2VyaW5nIHNwZWNpZmljIGNvZGUgcGF0aHMuIFNvLCB0aGF0J3Mgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbi4gSXTigJlzIHRpbWUgdG8gZ28gaW50byBgb2NmczJfc2V0X2FjbGAgaXRzZWxmIGFuZCBzZWUgd2hhdCdzIGhhcHBlbmluZyBpbnRlcm5hbGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTM4OSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDA4OjA5OjE2Ljk4NjI0NDEwOFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODk5NTM4MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib2NmczJfeGF0dHJfc2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL29jZnMyL2FjbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL29jZnMyL2FjbC5jPTIxND1zdGF0aWMgaW50IG9jZnMyX3NldF9hY2woaGFuZGxlX3QgKmhhbmRsZSxcXG4tLVxcbmZzL29jZnMyL2FjbC5jLTI0OS1cXHRpZiAoaGFuZGxlKVxcbmZzL29jZnMyL2FjbC5jOjI1MDpcXHRcXHRyZXQgPSBvY2ZzMl94YXR0cl9zZXRfaGFuZGxlKGhhbmRsZSwgaW5vZGUsIGRpX2JoLCBuYW1lX2luZGV4LFxcbmZzL29jZnMyL2FjbC5jLTI1MS1cXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJcXFwiLCB2YWx1ZSwgc2l6ZSwgMCxcXG4tLVxcbmZzL29jZnMyL2FjbC5jLTI1My1cXHRlbHNlXFxuZnMvb2NmczIvYWNsLmM6MjU0OlxcdFxcdHJldCA9IG9jZnMyX3hhdHRyX3NldChpbm9kZSwgbmFtZV9pbmRleCwgXFxcIlxcXCIsIHZhbHVlLCBzaXplLCAwKTtcXG5mcy9vY2ZzMi9hY2wuYy0yNTUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDA4OjA5OjE3LjA3NjIwNjEzOFoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3OTU2MTU4NDQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgeGF0dHIgTW9kaWZpY2F0aW9uIGluIE9DRlMyKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJdCBzZWVtcyB0aGUga2V5IGhlcmUgaXMgYG9jZnMyX3hhdHRyX3NldF9oYW5kbGVgLCBhbmQgSSd2ZSBjb25maXJtZWQgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkIHdoZW4gYSB0cmFuc2FjdGlvbiBoYW5kbGUgaXMgcHJvdmlkZWQsIHdoaWNoIGlzIGR1cmluZyBpbm9kZSBjcmVhdGlvbi4gVGhlcmVmb3JlLCB0aGUgcGF0Y2gncyByZW1vdmFsIG9mIHRoZSB3cml0ZSBsb2NrIGBkb3duX3dyaXRlKFx1MDAyNk9DRlMyX0koaW5vZGUpLVx1MDAzZWlwX3hhdHRyX3NlbSlgIGZyb20gd2l0aGluIGBvY2ZzMl94YXR0cl9zZXRfaGFuZGxlYCBpcyB0aGUgY3J1Y2lhbCBjaGFuZ2UgdG8gZm9jdXMgb24uXG5cblNvLCB0aGUgY3JpdGljYWwgc3ltYm9scyB0byB1bmRlcnN0YW5kIGFyZTogYG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbGAsIGBvY2ZzMl9pbml0X2FjbGAsIGBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlYCwgYG9jZnMyX2NhbGNfeGF0dHJfaW5pdGAsIGFuZCwgb2YgY291cnNlLCBgb2NmczJfeGF0dHJfc2V0X2hhbmRsZWAuXG5cbk5vdywgcmVnYXJkaW5nIGNvbmZpZ3VyYXRpb24sIGl0IGxvb2tzIGxpa2UgYE9DRlMyX0ZTYCBpcyByZWxldmFudC4gTGV0J3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgZGVwZW5kZW5jaWVzIHRoYXQgYXJlbid0IHN0YW5kYXJkLiBJdCBkZXBlbmRzIG9uIGBJTkVUIFx1MDAyNlx1MDAyNiBTWVNGUyBcdTAwMjZcdTAwMjYgQ09ORklHRlNfRlNgLiBUaGUgaW5zdHJ1Y3Rpb25zIGFyZSBjbGVhcjogaW5jbHVkZSAqbm9uLXN0YW5kYXJkKiBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MuIFNpbmNlIGBJTkVUYCBhbmQgYFNZU0ZTYCBhcmUgY29tbW9uLCBJJ2xsIGFkZCBgQ09ORklHRlNfRlNgIGFuZCBgT0NGUzJfRlNgIHRvIHRoZSBsaXN0LiBKdXN0IHRvIGJlIHN1cmUsIEkgd2lsbCBkb3VibGUtY2hlY2sgYENPTkZJR0ZTX0ZTYC4gVGhpcyBsb29rcyBnb29kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTk0MywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwODowOToyNS4wMzIzNjY0OTRaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1Nzc0NDIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDT05GSUdGU19GU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9jb25maWdmcy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2NvbmZpZ2ZzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9jb25maWdmcy9LY29uZmlnOjI6Y29uZmlnIENPTkZJR0ZTX0ZTXFxuZnMvY29uZmlnZnMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJVc2Vyc3BhY2UtZHJpdmVuIGNvbmZpZ3VyYXRpb24gZmlsZXN5c3RlbVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDg6MDk6MjUuMTE4MTQ0OTQ1WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMjM3MzUzNDkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk9DRlMyIEFDTCBJbml0aWFsaXphdGlvbiBSZWZhY3RvcmluZyBBbmFseXNpcyoqXG5cbk9rYXksIHNvIGBDT05GSUdGU19GU2AgaXMgY29uZmlybWVkIGFzIHRyaXN0YXRlLCB0aGF0J3Mgc3RyYWlnaHRmb3J3YXJkLiBOb3csIGxldCdzIGxvb2sgYXQgd2hhdCBgT0NGUzJfRlNgIHJlcXVpcmVzLiBUaGUgZGVwZW5kZW5jaWVzIGFyZSBgSU5FVCBcdTAwMjZcdTAwMjYgU1lTRlMgXHUwMDI2XHUwMDI2IENPTkZJR0ZTX0ZTYCwgYW5kIGl0IHNlbGVjdHMgYEJVRkZFUl9IRUFEYCwgYEpCRDJgLCBgQ1JDMzJgLCBgUVVPVEFgLCBgUVVPVEFfVFJFRWAsIGBGU19QT1NJWF9BQ0xgLCBhbmQgYExFR0FDWV9ESVJFQ1RfSU9gLiBTbywgYE9DRlMyX0ZTYCBhbmQgYENPTkZJR0ZTX0ZTYCBhcmUgdGhlIGtleSBvbmVzIHRvIGtlZXAgYW4gZXllIG9uLlxuXG5OZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWNzIG9mIHRoZSBwYXRjaC4gVGhlIGZvY3VzIHN5bWJvbHMgYXJlOiBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYCwgYG9jZnMyX2luaXRfYWNsYCwgYG9jZnMyX2FjbF9pbml0X3ByZXBhcmVgLCBgb2NmczJfY2FsY194YXR0cl9pbml0YCwgYW5kIGBvY2ZzMl94YXR0cl9zZXRfaGFuZGxlYC4gVGhvc2UgYXJlIGFsbCBub24tc3RhdGljIGZ1bmN0aW9ucyBhbmQgYXBwZWFyIHRvIGJlIGRpcmVjdGx5IGludm9sdmVkLlxuXG5UaGUgcGF0Y2ggaXRzZWxmIGlzIGEgcmVmYWN0b3Jpbmcgb2YgQUNMIGluaXRpYWxpemF0aW9uIHdpdGhpbiBPQ0ZTMiBkdXJpbmcgaW5vZGUgY3JlYXRpb24uIEl0IGFpbXMgdG8gcHJldmVudCBhIGRlYWRsb2NrIGluIGBvY2ZzMl9pbml0X2FjbGAgYnkgcHJlLWNhbGN1bGF0aW5nIEFDTHMgYmVmb3JlIGxvY2tpbmcuIEZ1cnRoZXJtb3JlLCBpdCBhZGRyZXNzZXMgdGhlIHVzZSBvZiBgaXBfeGF0dHJfc2VtYCBsb2NrIHdpdGhpbiBgb2NmczJfeGF0dHJfc2V0X2hhbmRsZWAsIGFuZCBJIHNlZSB0aGUgcGF0Y2ggcmVtb3ZlcyBpdCwgYmVjYXVzZSBpdCBpcyBvbmx5IGNhbGxlZCBvbiBuZXcgaW5vZGVzLlxuXG5FZmZlY3RpdmVseSwgdGhlIHBhdGNoIG1vZGlmaWVzIGhvdyBBQ0xzIGFyZSBjYWxjdWxhdGVkIGFuZCBzZXQgd2hlbiBuZXcgaW5vZGVzIGFyZSBjcmVhdGVkIOKAkyB0aGluZ3MgbGlrZSBgbWtub2RgLCBgbWtkaXJgLCBgY3JlYXRlYCwgYHN5bWxpbmtgLCBhbmQgYHJlZmxpbmtgLiBUaGlzIGNsZWFybHkgYWZmZWN0cyB0aGUgY29yZSBPQ0ZTMiBsb2dpYyBhbmQgaXMgcmVhY2hhYmxlIHRocm91Z2ggc3RhbmRhcmQgVkZTIHN5c2NhbGxzIHdoZW4gb3BlcmF0aW5nIG9uIGFuIE9DRlMyIGZpbGVzeXN0ZW0uIFRoZSBcIldvcnRoRnV6emluZ1wiIGZsYWcgY29uZmlybXMgdGhpcyBpcyBhIGdvb2QgYXJlYSB0byBmb2N1cyBvbi5cblxuU28sIHRoZSBlbmFibGUgY29uZmlncyBhcmUgYE9DRlMyX0ZTYCBhbmQgYENPTkZJR0ZTX0ZTYC4gUmlnaHQsIGxldCdzIHN1Ym1pdCB0aGVzZSByZXN1bHRzIHdpdGggYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY3MTksIk91dHB1dFRva2VucyI6MTg2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDA4OjA5OjM1LjM1NTUwMTQwNloiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2Mjg5Njg2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiT0NGUzJfRlNcIixcbiAgICBcIkNPTkZJR0ZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsXCIsXG4gICAgXCJvY2ZzMl9pbml0X2FjbFwiLFxuICAgIFwib2NmczJfYWNsX2luaXRfcHJlcGFyZVwiLFxuICAgIFwib2NmczJfY2FsY194YXR0cl9pbml0XCIsXG4gICAgXCJvY2ZzMl94YXR0cl9zZXRfaGFuZGxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIEFDTCBpbml0aWFsaXphdGlvbiBkdXJpbmcgaW5vZGUgY3JlYXRpb24gaW4gT0NGUzIgdG8gcHJldmVudCBkZWFkbG9ja3MuIEl0IG1vZGlmaWVzIGhvdyBBQ0xzIGFyZSBjYWxjdWxhdGVkIGFuZCBzZXQgZm9yIG5ldyBpbm9kZXMgKGUuZy4sIHZpYSBta25vZCwgbWtkaXIsIGNyZWF0ZSwgc3ltbGluaywgcmVmbGluaykuIFRoZSBjaGFuZ2VzIGFyZSBpbiBjb3JlIE9DRlMyIGxvZ2ljIGFuZCBhcmUgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBWRlMgc3lzY2FsbHMgd2hlbiBvcGVyYXRpbmcgb24gYW4gT0NGUzIgZmlsZXN5c3RlbS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJPQ0ZTMl9GU1wiLFxuICAgIFwiQ09ORklHRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xcIixcbiAgICBcIm9jZnMyX2luaXRfYWNsXCIsXG4gICAgXCJvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlXCIsXG4gICAgXCJvY2ZzMl9jYWxjX3hhdHRyX2luaXRcIixcbiAgICBcIm9jZnMyX3hhdHRyX3NldF9oYW5kbGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgQUNMIGluaXRpYWxpemF0aW9uIGR1cmluZyBpbm9kZSBjcmVhdGlvbiBpbiBPQ0ZTMiB0byBwcmV2ZW50IGRlYWRsb2Nrcy4gSXQgbW9kaWZpZXMgaG93IEFDTHMgYXJlIGNhbGN1bGF0ZWQgYW5kIHNldCBmb3IgbmV3IGlub2RlcyAoZS5nLiwgdmlhIG1rbm9kLCBta2RpciwgY3JlYXRlLCBzeW1saW5rLCByZWZsaW5rKS4gVGhlIGNoYW5nZXMgYXJlIGluIGNvcmUgT0NGUzIgbG9naWMgYW5kIGFyZSByZWFjaGFibGUgdmlhIHN0YW5kYXJkIFZGUyBzeXNjYWxscyB3aGVuIG9wZXJhdGluZyBvbiBhbiBPQ0ZTMiBmaWxlc3lzdGVtLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowlvdf7[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-30 08:01:22 +0000 UTC FinishedAt: 2026-07-30 08:09:37 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OCFS2_FS", "CONFIGFS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OCFS2_FS", "CONFIGFS_FS" ], "series_id": "80fdec58-b7f6-413d-beea-7c8cefbc7625" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "ocfs2_init_security_and_acl", "ocfs2_init_acl", "ocfs2_acl_init_prepare", "ocfs2_calc_xattr_init", "ocfs2_xattr_set_handle" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDA4OjA3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09DRlMyX0ZTJiMzNDssCiAgICAmIzM0O0NPTkZJR0ZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7b2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsJiMzNDssCiAgICAmIzM0O29jZnMyX2luaXRfYWNsJiMzNDssCiAgICAmIzM0O29jZnMyX2FjbF9pbml0X3ByZXBhcmUmIzM0OywKICAgICYjMzQ7b2NmczJfY2FsY194YXR0cl9pbml0JiMzNDssCiAgICAmIzM0O29jZnMyX3hhdHRyX3NldF9oYW5kbGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIEFDTCBpbml0aWFsaXphdGlvbiBkdXJpbmcgaW5vZGUgY3JlYXRpb24gaW4gT0NGUzIgdG8gcHJldmVudCBkZWFkbG9ja3MuIEl0IG1vZGlmaWVzIGhvdyBBQ0xzIGFyZSBjYWxjdWxhdGVkIGFuZCBzZXQgZm9yIG5ldyBpbm9kZXMgKGUuZy4sIHZpYSBta25vZCwgbWtkaXIsIGNyZWF0ZSwgc3ltbGluaywgcmVmbGluaykuIFRoZSBjaGFuZ2VzIGFyZSBpbiBjb3JlIE9DRlMyIGxvZ2ljIGFuZCBhcmUgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBWRlMgc3lzY2FsbHMgd2hlbiBvcGVyYXRpbmcgb24gYW4gT0NGUzIgZmlsZXN5c3RlbS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwODowNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDcyODM0M2IzNTAzOWUwNjc1NDdkZWJjMDYxZTJjZGFiZTFlYjA2Y2NcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAzMCAwODowNzoyOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9hY2wuYyBiL2ZzL29jZnMyL2FjbC5jXG5pbmRleCBhZjFlMmNlZGIyMTdmLi4wOTBlYzYwZmI1NzZhIDEwMDY0NFxuLS0tIGEvZnMvb2NmczIvYWNsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL29jZnMyL2FjbC5jXG5AQCAtMTEwLDggJiM0MzsxMTAsNyBAQCBzdGF0aWMgdm9pZCAqb2NmczJfYWNsX3RvX3hhdHRyKGNvbnN0IHN0cnVjdCBwb3NpeF9hY2wgKmFjbCwgc2l6ZV90ICpzaXplKVxuIFx0cmV0dXJuIG9jZnMyX2FjbDtcbiB9XG4gXG4tc3RhdGljIHN0cnVjdCBwb3NpeF9hY2wgKm9jZnMyX2dldF9hY2xfbm9sb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tXHRcdFx0XHRcdCAgICAgIGludCB0eXBlLFxuJiM0MztzdGF0aWMgc3RydWN0IHBvc2l4X2FjbCAqb2NmczJfZ2V0X2FjbF9ub2xvY2soc3RydWN0IGlub2RlICppbm9kZSwgaW50IHR5cGUsXG4gXHRcdFx0XHRcdCAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgpXG4ge1xuIFx0aW50IG5hbWVfaW5kZXg7XG5AQCAtMzQ5LDYzICYjNDM7MzQ4LDEwNSBAQCBpbnQgb2NmczJfYWNsX2NobW9kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpXG4gICogSW5pdGlhbGl6ZSB0aGUgQUNMcyBvZiBhIG5ldyBpbm9kZS4gSWYgcGFyZW50IGRpcmVjdG9yeSBoYXMgZGVmYXVsdCBBQ0wsXG4gICogdGhlbiBjbG9uZSB0byBuZXcgaW5vZGUuIENhbGxlZCBmcm9tIG9jZnMyX21rbm9kLlxuICAqL1xuLWludCBvY2ZzMl9pbml0X2FjbChoYW5kbGVfdCAqaGFuZGxlLFxuLVx0XHQgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLVx0XHQgICBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0ICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCxcbi1cdFx0ICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJfYmgsXG4tXHRcdCAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjLFxuLVx0XHQgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqZGF0YV9hYylcbiYjNDM7dm9pZCBvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlKHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgKnN0YXRlKVxuJiM0Mzt7XG4mIzQzO1x0cG9zaXhfYWNsX3JlbGVhc2Uoc3RhdGUtXHUwMDNlZGVmYXVsdF9hY2wpO1xuJiM0MztcdHBvc2l4X2FjbF9yZWxlYXNlKHN0YXRlLVx1MDAzZWFjbCk7XG4mIzQzO1x0c3RhdGUtXHUwMDNlZGVmYXVsdF9hY2wgPSBOVUxMO1xuJiM0MztcdHN0YXRlLVx1MDAzZWFjbCA9IE5VTEw7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuJiM0MztcdFx0XHQgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpcl9iaCxcbiYjNDM7XHRcdFx0ICAgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqc3RhdGUpXG4ge1xuIFx0c3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihpbm9kZS1cdTAwM2VpX3NiKTtcbi1cdHN0cnVjdCBwb3NpeF9hY2wgKmFjbCA9IE5VTEw7XG4tXHRpbnQgcmV0ID0gMCwgcmV0Mjtcbi1cdHVtb2RlX3QgbW9kZTtcbi1cbi1cdGlmICghU19JU0xOSyhpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG4tXHRcdGlmIChvc2ItXHUwMDNlc19tb3VudF9vcHQgXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkge1xuLVx0XHRcdGRvd25fcmVhZChcdTAwMjZPQ0ZTMl9JKGRpciktXHUwMDNlaXBfeGF0dHJfc2VtKTtcbi1cdFx0XHRhY2wgPSBvY2ZzMl9nZXRfYWNsX25vbG9jayhkaXIsIEFDTF9UWVBFX0RFRkFVTFQsXG4tXHRcdFx0XHRcdFx0ICAgZGlyX2JoKTtcbi1cdFx0XHR1cF9yZWFkKFx1MDAyNk9DRlMyX0koZGlyKS1cdTAwM2VpcF94YXR0cl9zZW0pO1xuLVx0XHRcdGlmIChJU19FUlIoYWNsKSlcbi1cdFx0XHRcdHJldHVybiBQVFJfRVJSKGFjbCk7XG4mIzQzO1x0aW50IHJldCA9IDA7XG4mIzQzO1xuJiM0MztcdHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsID0gTlVMTDtcbiYjNDM7XHRzdGF0ZS1cdTAwM2VhY2wgPSBOVUxMO1xuJiM0MztcdHN0YXRlLVx1MDAzZW1vZGUgPSBpbm9kZS1cdTAwM2VpX21vZGU7XG4mIzQzO1xuJiM0MztcdGlmIChTX0lTTE5LKGlub2RlLVx1MDAzZWlfbW9kZSkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKG9zYi1cdTAwM2VzX21vdW50X29wdCBcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7XG4mIzQzO1x0XHRkb3duX3JlYWQoXHUwMDI2T0NGUzJfSShkaXIpLVx1MDAzZWlwX3hhdHRyX3NlbSk7XG4mIzQzO1x0XHRzdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCA9XG4mIzQzO1x0XHRcdG9jZnMyX2dldF9hY2xfbm9sb2NrKGRpciwgQUNMX1RZUEVfREVGQVVMVCwgZGlyX2JoKTtcbiYjNDM7XHRcdHVwX3JlYWQoXHUwMDI2T0NGUzJfSShkaXIpLVx1MDAzZWlwX3hhdHRyX3NlbSk7XG4mIzQzO1x0XHRpZiAoSVNfRVJSKHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsKSkge1xuJiM0MztcdFx0XHRyZXQgPSBQVFJfRVJSKHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsKTtcbiYjNDM7XHRcdFx0c3RhdGUtXHUwMDNlZGVmYXVsdF9hY2wgPSBOVUxMO1xuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuIFx0XHR9XG4tXHRcdGlmICghYWNsKSB7XG4tXHRcdFx0bW9kZSA9IGlub2RlLVx1MDAzZWlfbW9kZSBcdTAwMjYgfmN1cnJlbnRfdW1hc2soKTtcbi1cdFx0XHRyZXQgPSBvY2ZzMl9hY2xfc2V0X21vZGUoaW5vZGUsIGRpX2JoLCBoYW5kbGUsIG1vZGUpO1xuLVx0XHRcdGlmIChyZXQpIHtcbi1cdFx0XHRcdG1sb2dfZXJybm8ocmV0KTtcbiYjNDM7XHRcdGlmIChzdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCkge1xuJiM0MztcdFx0XHRzdGF0ZS1cdTAwM2VhY2wgPSBwb3NpeF9hY2xfZHVwKHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsKTtcbiYjNDM7XHRcdFx0aWYgKCFzdGF0ZS1cdTAwM2VhY2wpIHtcbiYjNDM7XHRcdFx0XHRyZXQgPSAtRU5PTUVNO1xuIFx0XHRcdFx0Z290byBjbGVhbnVwO1xuIFx0XHRcdH1cbiYjNDM7XHRcdFx0cmV0ID0gX19wb3NpeF9hY2xfY3JlYXRlKFx1MDAyNnN0YXRlLVx1MDAzZWFjbCwgR0ZQX05PRlMsXG4mIzQzO1x0XHRcdFx0XHRcdCBcdTAwMjZzdGF0ZS1cdTAwM2Vtb2RlKTtcbiYjNDM7XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1x0XHRcdGlmIChyZXQgPT0gMCkge1xuJiM0MztcdFx0XHRcdHBvc2l4X2FjbF9yZWxlYXNlKHN0YXRlLVx1MDAzZWFjbCk7XG4mIzQzO1x0XHRcdFx0c3RhdGUtXHUwMDNlYWNsID0gTlVMTDtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRpZiAoIVNfSVNESVIoaW5vZGUtXHUwMDNlaV9tb2RlKSkge1xuJiM0MztcdFx0XHRcdHBvc2l4X2FjbF9yZWxlYXNlKHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsKTtcbiYjNDM7XHRcdFx0XHRzdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCA9IE5VTEw7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdHN0YXRlLVx1MDAzZW1vZGUgXHUwMDI2PSB+Y3VycmVudF91bWFzaygpO1xuIFx0XHR9XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHN0YXRlLVx1MDAzZW1vZGUgXHUwMDI2PSB+Y3VycmVudF91bWFzaygpO1xuIFx0fVxuLVx0aWYgKChvc2ItXHUwMDNlc19tb3VudF9vcHQgXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkgXHUwMDI2XHUwMDI2IGFjbCkge1xuLVx0XHRpZiAoU19JU0RJUihpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztjbGVhbnVwOlxuJiM0MztcdG9jZnMyX2FjbF9pbml0X3JlbGVhc2Uoc3RhdGUpO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBvY2ZzMl9pbml0X2FjbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuJiM0MztcdFx0ICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCxcbiYjNDM7XHRcdCAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjLFxuJiM0MztcdFx0ICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmRhdGFfYWMsXG4mIzQzO1x0XHQgICBzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICpzdGF0ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoaW5vZGUtXHUwMDNlaV9zYik7XG4mIzQzO1x0aW50IHJldCA9IDA7XG4mIzQzO1xuJiM0MztcdGlmIChTX0lTTE5LKGlub2RlLVx1MDAzZWlfbW9kZSkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKG9zYi1cdTAwM2VzX21vdW50X29wdCBcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7XG4mIzQzO1x0XHRpZiAoU19JU0RJUihpbm9kZS1cdTAwM2VpX21vZGUpIFx1MDAyNlx1MDAyNiBzdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCkge1xuIFx0XHRcdHJldCA9IG9jZnMyX3NldF9hY2woaGFuZGxlLCBpbm9kZSwgZGlfYmgsXG4tXHRcdFx0XHRcdCAgICBBQ0xfVFlQRV9ERUZBVUxULCBhY2wsXG4tXHRcdFx0XHRcdCAgICBtZXRhX2FjLCBkYXRhX2FjKTtcbiYjNDM7XHRcdFx0XHRcdCAgICBBQ0xfVFlQRV9ERUZBVUxULFxuJiM0MztcdFx0XHRcdFx0ICAgIHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsLCBtZXRhX2FjLFxuJiM0MztcdFx0XHRcdFx0ICAgIGRhdGFfYWMpO1xuIFx0XHRcdGlmIChyZXQpXG4tXHRcdFx0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1x0XHRcdFx0cmV0dXJuIHJldDtcbiBcdFx0fVxuLVx0XHRtb2RlID0gaW5vZGUtXHUwMDNlaV9tb2RlO1xuLVx0XHRyZXQgPSBfX3Bvc2l4X2FjbF9jcmVhdGUoXHUwMDI2YWNsLCBHRlBfTk9GUywgXHUwMDI2bW9kZSk7XG4tXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4gXG4tXHRcdHJldDIgPSBvY2ZzMl9hY2xfc2V0X21vZGUoaW5vZGUsIGRpX2JoLCBoYW5kbGUsIG1vZGUpO1xuLVx0XHRpZiAocmV0Mikge1xuLVx0XHRcdG1sb2dfZXJybm8ocmV0Mik7XG4tXHRcdFx0cmV0ID0gcmV0Mjtcbi1cdFx0XHRnb3RvIGNsZWFudXA7XG4tXHRcdH1cbi1cdFx0aWYgKHJldCBcdTAwM2UgMCkge1xuLVx0XHRcdHJldCA9IG9jZnMyX3NldF9hY2woaGFuZGxlLCBpbm9kZSxcbi1cdFx0XHRcdFx0ICAgIGRpX2JoLCBBQ0xfVFlQRV9BQ0NFU1MsXG4tXHRcdFx0XHRcdCAgICBhY2wsIG1ldGFfYWMsIGRhdGFfYWMpO1xuJiM0MztcdHJldCA9IG9jZnMyX2FjbF9zZXRfbW9kZShpbm9kZSwgZGlfYmgsIGhhbmRsZSwgc3RhdGUtXHUwMDNlbW9kZSk7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0bWxvZ19lcnJubyhyZXQpO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChvc2ItXHUwMDNlc19tb3VudF9vcHQgXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkge1xuJiM0MztcdFx0aWYgKHN0YXRlLVx1MDAzZWFjbCkge1xuJiM0MztcdFx0XHRyZXQgPSBvY2ZzMl9zZXRfYWNsKGhhbmRsZSwgaW5vZGUsIGRpX2JoLFxuJiM0MztcdFx0XHRcdFx0ICAgIEFDTF9UWVBFX0FDQ0VTUywgc3RhdGUtXHUwMDNlYWNsLFxuJiM0MztcdFx0XHRcdFx0ICAgIG1ldGFfYWMsIGRhdGFfYWMpO1xuIFx0XHR9XG4gXHR9XG4tY2xlYW51cDpcbi1cdHBvc2l4X2FjbF9yZWxlYXNlKGFjbCk7XG4mIzQzO1xuIFx0cmV0dXJuIHJldDtcbiB9XG5kaWZmIC0tZ2l0IGEvZnMvb2NmczIvYWNsLmggYi9mcy9vY2ZzMi9hY2wuaFxuaW5kZXggNjY3YzZmMDNmYTYwNi4uYTkxZjljZTI3OGQ2ZCAxMDA2NDRcbi0tLSBhL2ZzL29jZnMyL2FjbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9vY2ZzMi9hY2wuaFxuQEAgLTIwLDkgJiM0MzsyMCwyMCBAQCBzdHJ1Y3QgcG9zaXhfYWNsICpvY2ZzMl9pb3BfZ2V0X2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSwgYm9vbCByY3UpO1xuIGludCBvY2ZzMl9pb3Bfc2V0X2FjbChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIFx0XHQgICAgICBzdHJ1Y3QgcG9zaXhfYWNsICphY2wsIGludCB0eXBlKTtcbiBleHRlcm4gaW50IG9jZnMyX2FjbF9jaG1vZChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGJ1ZmZlcl9oZWFkICopO1xuLWV4dGVybiBpbnQgb2NmczJfaW5pdF9hY2woaGFuZGxlX3QgKiwgc3RydWN0IGlub2RlICosIHN0cnVjdCBpbm9kZSAqLFxuLVx0XHRcdCAgc3RydWN0IGJ1ZmZlcl9oZWFkICosIHN0cnVjdCBidWZmZXJfaGVhZCAqLFxuLVx0XHRcdCAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKixcbi1cdFx0XHQgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICopO1xuJiM0MztzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlIHtcbiYjNDM7XHRzdHJ1Y3QgcG9zaXhfYWNsICpkZWZhdWx0X2FjbDtcbiYjNDM7XHRzdHJ1Y3QgcG9zaXhfYWNsICphY2w7XG4mIzQzO1x0dW1vZGVfdCBtb2RlO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7aW50IG9jZnMyX2FjbF9pbml0X3ByZXBhcmUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4mIzQzO1x0XHRcdCAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlyX2JoLFxuJiM0MztcdFx0XHQgICBzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICpzdGF0ZSk7XG4mIzQzO3ZvaWQgb2NmczJfYWNsX2luaXRfcmVsZWFzZShzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICpzdGF0ZSk7XG4mIzQzO2ludCBvY2ZzMl9pbml0X2FjbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuJiM0MztcdFx0ICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCxcbiYjNDM7XHRcdCAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjLFxuJiM0MztcdFx0ICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmRhdGFfYWMsXG4mIzQzO1x0XHQgICBzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICpzdGF0ZSk7XG4gXG4gI2VuZGlmIC8qIE9DRlMyX0FDTF9IICovXG5kaWZmIC0tZ2l0IGEvZnMvb2NmczIvbmFtZWkuYyBiL2ZzL29jZnMyL25hbWVpLmNcbmluZGV4IDEyNzc2NjZjNzdjZDIuLmVhMzdhNTA1ODA4OTAgMTAwNjQ0XG4tLS0gYS9mcy9vY2ZzMi9uYW1laS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9vY2ZzMi9uYW1laS5jXG5AQCAtMjU2LDYgJiM0MzsyNTYsNyBAQCBzdGF0aWMgaW50IG9jZnMyX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0c2lnc2V0X3Qgb2xkc2V0O1xuIFx0aW50IGRpZF9ibG9ja19zaWduYWxzID0gMDtcbiBcdHN0cnVjdCBvY2ZzMl9kZW50cnlfbG9jayAqZGwgPSBOVUxMO1xuJiM0MztcdHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgYWNsX3N0YXRlID0geyAwIH07XG4gXG4gXHR0cmFjZV9vY2ZzMl9ta25vZChkaXIsIGRlbnRyeSwgZGVudHJ5LVx1MDAzZWRfbmFtZS5sZW4sIGRlbnRyeS1cdTAwM2VkX25hbWUubmFtZSxcbiBcdFx0XHQgICh1bnNpZ25lZCBsb25nIGxvbmcpT0NGUzJfSShkaXIpLVx1MDAzZWlwX2Jsa25vLFxuQEAgLTMzMCwxMCAmIzQzOzMzMSwxNCBAQCBzdGF0aWMgaW50IG9jZnMyX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0XHR9XG4gXHR9XG4gXG4mIzQzO1x0c3RhdHVzID0gb2NmczJfYWNsX2luaXRfcHJlcGFyZShpbm9kZSwgZGlyLCBwYXJlbnRfZmVfYmgsIFx1MDAyNmFjbF9zdGF0ZSk7XG4mIzQzO1x0aWYgKHN0YXR1cyBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gbGVhdmU7XG4mIzQzO1xuIFx0LyogY2FsY3VsYXRlIG1ldGEgZGF0YS9jbHVzdGVycyBmb3Igc2V0dGluZyBzZWN1cml0eSBhbmQgYWNsIHhhdHRyICovXG4tXHRzdGF0dXMgPSBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoZGlyLCBwYXJlbnRfZmVfYmgsIG1vZGUsXG4tXHRcdFx0XHQgICAgICAgXHUwMDI2c2ksIFx1MDAyNndhbnRfY2x1c3RlcnMsXG4tXHRcdFx0XHQgICAgICAgXHUwMDI2eGF0dHJfY3JlZGl0cywgXHUwMDI2d2FudF9tZXRhKTtcbiYjNDM7XHRzdGF0dXMgPSBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoZGlyLCBtb2RlLCBcdTAwMjZzaSwgXHUwMDI2d2FudF9jbHVzdGVycyxcbiYjNDM7XHRcdFx0XHQgICAgICAgXHUwMDI2eGF0dHJfY3JlZGl0cywgXHUwMDI2d2FudF9tZXRhLFxuJiM0MztcdFx0XHRcdCAgICAgICBcdTAwMjZhY2xfc3RhdGUpO1xuIFx0aWYgKHN0YXR1cyBcdTAwM2MgMCkge1xuIFx0XHRtbG9nX2Vycm5vKHN0YXR1cyk7XG4gXHRcdGdvdG8gbGVhdmU7XG5AQCAtNDExLDggJiM0Mzs0MTYsOCBAQCBzdGF0aWMgaW50IG9jZnMyX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0XHRpbmNfbmxpbmsoZGlyKTtcbiBcdH1cbiBcbi1cdHN0YXR1cyA9IG9jZnMyX2luaXRfYWNsKGhhbmRsZSwgaW5vZGUsIGRpciwgbmV3X2ZlX2JoLCBwYXJlbnRfZmVfYmgsXG4tXHRcdFx0IG1ldGFfYWMsIGRhdGFfYWMpO1xuJiM0MztcdHN0YXR1cyA9IG9jZnMyX2luaXRfYWNsKGhhbmRsZSwgaW5vZGUsIG5ld19mZV9iaCwgbWV0YV9hYywgZGF0YV9hYyxcbiYjNDM7XHRcdFx0XHRcdTAwMjZhY2xfc3RhdGUpO1xuIFxuIFx0aWYgKHN0YXR1cyBcdTAwM2MgMCkge1xuIFx0XHRtbG9nX2Vycm5vKHN0YXR1cyk7XG5AQCAtNDc3LDYgJiM0Mzs0ODIsOCBAQCBzdGF0aWMgaW50IG9jZnMyX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0YnJlbHNlKHBhcmVudF9mZV9iaCk7XG4gXHRrZnJlZShzaS52YWx1ZSk7XG4gXG4mIzQzO1x0b2NmczJfYWNsX2luaXRfcmVsZWFzZShcdTAwMjZhY2xfc3RhdGUpO1xuJiM0MztcbiBcdG9jZnMyX2ZyZWVfZGlyX2xvb2t1cF9yZXN1bHQoXHUwMDI2bG9va3VwKTtcbiBcbiBcdGlmIChpbm9kZV9hYylcbmRpZmYgLS1naXQgYS9mcy9vY2ZzMi94YXR0ci5jIGIvZnMvb2NmczIveGF0dHIuY1xuaW5kZXggZmNkZGQzYzEzYWNkZC4uODZmMDI5MzY4MWZjYyAxMDA2NDRcbi0tLSBhL2ZzL29jZnMyL3hhdHRyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL29jZnMyL3hhdHRyLmNcbkBAIC02MTEsMTMgJiM0Mzs2MTEsMTAgQEAgaW50IG9jZnMyX2NhbGNfc2VjdXJpdHlfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLWludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0ICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpcl9iaCxcbi1cdFx0XHQgIHVtb2RlX3QgbW9kZSxcbiYjNDM7aW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpciwgdW1vZGVfdCBtb2RlLFxuIFx0XHRcdCAgc3RydWN0IG9jZnMyX3NlY3VyaXR5X3hhdHRyX2luZm8gKnNpLFxuLVx0XHRcdCAgaW50ICp3YW50X2NsdXN0ZXJzLFxuLVx0XHRcdCAgaW50ICp4YXR0cl9jcmVkaXRzLFxuLVx0XHRcdCAgaW50ICp3YW50X21ldGEpXG4mIzQzO1x0XHRcdCAgaW50ICp3YW50X2NsdXN0ZXJzLCBpbnQgKnhhdHRyX2NyZWRpdHMsXG4mIzQzO1x0XHRcdCAgaW50ICp3YW50X21ldGEsIHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgKmFjbF9zdGF0ZSlcbiB7XG4gXHRpbnQgcmV0ID0gMDtcbiBcdHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoZGlyLVx1MDAzZWlfc2IpO1xuQEAgLTYyOCwxOSAmIzQzOzYyNSwxNSBAQCBpbnQgb2NmczJfY2FsY194YXR0cl9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0XHRcdFx0XHRcdCAgICAgc2ktXHUwMDNldmFsdWVfbGVuKTtcbiBcbiBcdGlmIChvc2ItXHUwMDNlc19tb3VudF9vcHQgXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkge1xuLVx0XHRkb3duX3JlYWQoXHUwMDI2T0NGUzJfSShkaXIpLVx1MDAzZWlwX3hhdHRyX3NlbSk7XG4tXHRcdGFjbF9sZW4gPSBvY2ZzMl94YXR0cl9nZXRfbm9sb2NrKGRpciwgZGlyX2JoLFxuLVx0XHRcdFx0XHRPQ0ZTMl9YQVRUUl9JTkRFWF9QT1NJWF9BQ0xfREVGQVVMVCxcbi1cdFx0XHRcdFx0XCYjMzQ7XCYjMzQ7LCBOVUxMLCAwKTtcbi1cdFx0dXBfcmVhZChcdTAwMjZPQ0ZTMl9JKGRpciktXHUwMDNlaXBfeGF0dHJfc2VtKTtcbi1cdFx0aWYgKGFjbF9sZW4gXHUwMDNlIDApIHtcbi1cdFx0XHRhX3NpemUgPSBvY2ZzMl94YXR0cl9lbnRyeV9yZWFsX3NpemUoMCwgYWNsX2xlbik7XG4tXHRcdFx0aWYgKFNfSVNESVIobW9kZSkpXG4tXHRcdFx0XHRhX3NpemUgXHUwMDNjXHUwMDNjPSAxO1xuLVx0XHR9IGVsc2UgaWYgKGFjbF9sZW4gIT0gMCBcdTAwMjZcdTAwMjYgYWNsX2xlbiAhPSAtRU5PREFUQSkge1xuLVx0XHRcdHJldCA9IGFjbF9sZW47XG4tXHRcdFx0bWxvZ19lcnJubyhyZXQpO1xuLVx0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHRpZiAoYWNsX3N0YXRlLVx1MDAzZWRlZmF1bHRfYWNsIFx1MDAyNlx1MDAyNiBTX0lTRElSKG1vZGUpKSB7XG4mIzQzO1x0XHRcdGFjbF9sZW4gPSBhY2xfc3RhdGUtXHUwMDNlZGVmYXVsdF9hY2wtXHUwMDNlYV9jb3VudCAqXG4mIzQzO1x0XHRcdFx0ICBzaXplb2Yoc3RydWN0IG9jZnMyX2FjbF9lbnRyeSk7XG4mIzQzO1x0XHRcdGFfc2l6ZSAmIzQzOz0gb2NmczJfeGF0dHJfZW50cnlfcmVhbF9zaXplKDAsIGFjbF9sZW4pO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0aWYgKGFjbF9zdGF0ZS1cdTAwM2VhY2wpIHtcbiYjNDM7XHRcdFx0YWNsX2xlbiA9IGFjbF9zdGF0ZS1cdTAwM2VhY2wtXHUwMDNlYV9jb3VudCAqXG4mIzQzO1x0XHRcdFx0ICBzaXplb2Yoc3RydWN0IG9jZnMyX2FjbF9lbnRyeSk7XG4mIzQzO1x0XHRcdGFfc2l6ZSAmIzQzOz0gb2NmczJfeGF0dHJfZW50cnlfcmVhbF9zaXplKDAsIGFjbF9sZW4pO1xuIFx0XHR9XG4gXHR9XG4gXG5AQCAtNjgzLDE0ICYjNDM7Njc2LDMzIEBAIGludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICpkaXIsXG4gXHRcdFx0XHRcdFx0XHQgICBuZXdfY2x1c3RlcnMpO1xuIFx0XHQqd2FudF9jbHVzdGVycyAmIzQzOz0gbmV3X2NsdXN0ZXJzO1xuIFx0fVxuLVx0aWYgKG9zYi1cdTAwM2VzX21vdW50X29wdCBcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMIFx1MDAyNlx1MDAyNlxuLVx0ICAgIGFjbF9sZW4gXHUwMDNlIE9DRlMyX1hBVFRSX0lOTElORV9TSVpFKSB7XG4tXHRcdC8qIGZvciBkaXJlY3RvcnksIGl0IGhhcyBERUZBVUxUIGFuZCBBQ0NFU1MgdHdvIHR5cGVzIG9mIGFjbHMgKi9cbi1cdFx0bmV3X2NsdXN0ZXJzID0gKFNfSVNESVIobW9kZSkgPyAyIDogMSkgKlxuLVx0XHRcdFx0b2NmczJfY2x1c3RlcnNfZm9yX2J5dGVzKGRpci1cdTAwM2VpX3NiLCBhY2xfbGVuKTtcbi1cdFx0KnhhdHRyX2NyZWRpdHMgJiM0Mzs9IG9jZnMyX2NsdXN0ZXJzX3RvX2Jsb2NrcyhkaXItXHUwMDNlaV9zYixcbi1cdFx0XHRcdFx0XHRcdCAgIG5ld19jbHVzdGVycyk7XG4tXHRcdCp3YW50X2NsdXN0ZXJzICYjNDM7PSBuZXdfY2x1c3RlcnM7XG4mIzQzO1x0aWYgKG9zYi1cdTAwM2VzX21vdW50X29wdCBcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7XG4mIzQzO1x0XHRpZiAoYWNsX3N0YXRlLVx1MDAzZWRlZmF1bHRfYWNsIFx1MDAyNlx1MDAyNiBTX0lTRElSKG1vZGUpKSB7XG4mIzQzO1x0XHRcdGFjbF9sZW4gPSBhY2xfc3RhdGUtXHUwMDNlZGVmYXVsdF9hY2wtXHUwMDNlYV9jb3VudCAqXG4mIzQzO1x0XHRcdFx0ICBzaXplb2Yoc3RydWN0IG9jZnMyX2FjbF9lbnRyeSk7XG4mIzQzO1x0XHRcdGlmIChhY2xfbGVuIFx1MDAzZSBPQ0ZTMl9YQVRUUl9JTkxJTkVfU0laRSkge1xuJiM0MztcdFx0XHRcdG5ld19jbHVzdGVycyA9XG4mIzQzO1x0XHRcdFx0XHRvY2ZzMl9jbHVzdGVyc19mb3JfYnl0ZXMoZGlyLVx1MDAzZWlfc2IsXG4mIzQzO1x0XHRcdFx0XHRcdFx0XHQgYWNsX2xlbik7XG4mIzQzO1x0XHRcdFx0KnhhdHRyX2NyZWRpdHMgJiM0Mzs9XG4mIzQzO1x0XHRcdFx0XHRvY2ZzMl9jbHVzdGVyc190b19ibG9ja3MoZGlyLVx1MDAzZWlfc2IsXG4mIzQzO1x0XHRcdFx0XHRcdFx0XHQgbmV3X2NsdXN0ZXJzKTtcbiYjNDM7XHRcdFx0XHQqd2FudF9jbHVzdGVycyAmIzQzOz0gbmV3X2NsdXN0ZXJzO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRpZiAoYWNsX3N0YXRlLVx1MDAzZWFjbCkge1xuJiM0MztcdFx0XHRhY2xfbGVuID0gYWNsX3N0YXRlLVx1MDAzZWFjbC1cdTAwM2VhX2NvdW50ICpcbiYjNDM7XHRcdFx0XHQgIHNpemVvZihzdHJ1Y3Qgb2NmczJfYWNsX2VudHJ5KTtcbiYjNDM7XHRcdFx0aWYgKGFjbF9sZW4gXHUwMDNlIE9DRlMyX1hBVFRSX0lOTElORV9TSVpFKSB7XG4mIzQzO1x0XHRcdFx0bmV3X2NsdXN0ZXJzID1cbiYjNDM7XHRcdFx0XHRcdG9jZnMyX2NsdXN0ZXJzX2Zvcl9ieXRlcyhkaXItXHUwMDNlaV9zYixcbiYjNDM7XHRcdFx0XHRcdFx0XHRcdCBhY2xfbGVuKTtcbiYjNDM7XHRcdFx0XHQqeGF0dHJfY3JlZGl0cyAmIzQzOz1cbiYjNDM7XHRcdFx0XHRcdG9jZnMyX2NsdXN0ZXJzX3RvX2Jsb2NrcyhkaXItXHUwMDNlaV9zYixcbiYjNDM7XHRcdFx0XHRcdFx0XHRcdCBuZXdfY2x1c3RlcnMpO1xuJiM0MztcdFx0XHRcdCp3YW50X2NsdXN0ZXJzICYjNDM7PSBuZXdfY2x1c3RlcnM7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH1cbiBcdH1cbiBcbiBcdHJldHVybiByZXQ7XG5AQCAtMzQ4Myw5ICYjNDM7MzQ5NSwxMCBAQCBzdGF0aWMgaW50IF9fb2NmczJfeGF0dHJfc2V0X2hhbmRsZShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIH1cbiBcbiAvKlxuLSAqIFRoaXMgZnVuY3Rpb24gb25seSBjYWxsZWQgZHVpbmcgY3JlYXRpbmcgaW5vZGVcbi0gKiBmb3IgaW5pdCBzZWN1cml0eS9hY2wgeGF0dHJzIG9mIHRoZSBuZXcgaW5vZGUuXG4tICogQWxsIHRyYW5zYW5jdGlvbiBjcmVkaXRzIGhhdmUgYmVlbiByZXNlcnZlZCBpbiBta25vZC5cbiYjNDM7ICogVGhpcyBoZWxwZXIgaXMgb25seSBmb3Igc2V0dGluZyBpbml0aWFsIEFDTCBvciBzZWN1cml0eSB4YXR0cnMgb24gYW4gaW5vZGVcbiYjNDM7ICogdGhhdCBpcyBzdGlsbCB1bnB1Ymxpc2hlZCwgdW5oYXNoZWQsIGFuZCB1bmF0dGFjaGVkIHRvIGEgZGVudHJ5LlxuJiM0MzsgKiBPcmRpbmFyeSB4YXR0ciB1cGRhdGVzIG11c3QgdXNlIG9jZnMyX3hhdHRyX3NldCgpLlxuJiM0MzsgKiBBbGwgdHJhbnNhY3Rpb24gY3JlZGl0cyBoYXZlIGJlZW4gcmVzZXJ2ZWQgaW4gbWtub2Qgb3Igc3ltbGluayBjYWxsZXJzLlxuICAqL1xuIGludCBvY2ZzMl94YXR0cl9zZXRfaGFuZGxlKGhhbmRsZV90ICpoYW5kbGUsXG4gXHRcdFx0ICAgc3RydWN0IGlub2RlICppbm9kZSxcbkBAIC0zNTQyLDggJiM0MzszNTU1LDYgQEAgaW50IG9jZnMyX3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlX3QgKmhhbmRsZSxcbiBcdHhpcy5pbm9kZV9iaCA9IHhicy5pbm9kZV9iaCA9IGRpX2JoO1xuIFx0ZGkgPSAoc3RydWN0IG9jZnMyX2Rpbm9kZSAqKWRpX2JoLVx1MDAzZWJfZGF0YTtcbiBcbi1cdGRvd25fd3JpdGUoXHUwMDI2T0NGUzJfSShpbm9kZSktXHUwMDNlaXBfeGF0dHJfc2VtKTtcbi1cbiBcdHJldCA9IG9jZnMyX3hhdHRyX2lib2R5X2ZpbmQoaW5vZGUsIG5hbWVfaW5kZXgsIG5hbWUsIFx1MDAyNnhpcyk7XG4gXHRpZiAocmV0KVxuIFx0XHRnb3RvIGNsZWFudXA7XG5AQCAtMzU1Niw3ICYjNDM7MzU2Nyw2IEBAIGludCBvY2ZzMl94YXR0cl9zZXRfaGFuZGxlKGhhbmRsZV90ICpoYW5kbGUsXG4gXHRyZXQgPSBfX29jZnMyX3hhdHRyX3NldF9oYW5kbGUoaW5vZGUsIGRpLCBcdTAwMjZ4aSwgXHUwMDI2eGlzLCBcdTAwMjZ4YnMsIFx1MDAyNmN0eHQpO1xuIFxuIGNsZWFudXA6XG4tXHR1cF93cml0ZShcdTAwMjZPQ0ZTMl9JKGlub2RlKS1cdTAwM2VpcF94YXR0cl9zZW0pO1xuIFx0YnJlbHNlKHhicy54YXR0cl9iaCk7XG4gXHRvY2ZzMl94YXR0cl9idWNrZXRfZnJlZSh4YnMuYnVja2V0KTtcbiBcbkBAIC03MjU3LDYgJiM0Mzs3MjY3LDcgQEAgaW50IG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbChzdHJ1Y3QgaW5vZGUgKmRpcixcbiB7XG4gXHRpbnQgcmV0ID0gMDtcbiBcdHN0cnVjdCBidWZmZXJfaGVhZCAqZGlyX2JoID0gTlVMTDtcbiYjNDM7XHRzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlIGFjbF9zdGF0ZSA9IHsgMCB9O1xuIFxuIFx0cmV0ID0gb2NmczJfaW5pdF9zZWN1cml0eV9nZXQoaW5vZGUsIGRpciwgcXN0ciwgTlVMTCk7XG4gXHRpZiAocmV0KSB7XG5AQCAtNzI2OSwxMCAmIzQzOzcyODAsMTcgQEAgaW50IG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbChzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0bWxvZ19lcnJubyhyZXQpO1xuIFx0XHRnb3RvIGxlYXZlO1xuIFx0fVxuLVx0cmV0ID0gb2NmczJfaW5pdF9hY2woTlVMTCwgaW5vZGUsIGRpciwgTlVMTCwgZGlyX2JoLCBOVUxMLCBOVUxMKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gb2NmczJfYWNsX2luaXRfcHJlcGFyZShpbm9kZSwgZGlyLCBkaXJfYmgsIFx1MDAyNmFjbF9zdGF0ZSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBvY2ZzMl9pbml0X2FjbChOVUxMLCBpbm9kZSwgTlVMTCwgTlVMTCwgTlVMTCwgXHUwMDI2YWNsX3N0YXRlKTtcbiBcdGlmIChyZXQpXG4gXHRcdG1sb2dfZXJybm8ocmV0KTtcbiBcbiYjNDM7dW5sb2NrOlxuJiM0MztcdG9jZnMyX2FjbF9pbml0X3JlbGVhc2UoXHUwMDI2YWNsX3N0YXRlKTtcbiBcdG9jZnMyX2lub2RlX3VubG9jayhkaXIsIDApO1xuIFx0YnJlbHNlKGRpcl9iaCk7XG4gbGVhdmU6XG5kaWZmIC0tZ2l0IGEvZnMvb2NmczIveGF0dHIuaCBiL2ZzL29jZnMyL3hhdHRyLmhcbmluZGV4IDY1ZTlhYTc0MzkxOTkuLjVjZGQ2YzZiNDAwNjQgMTAwNjQ0XG4tLS0gYS9mcy9vY2ZzMi94YXR0ci5oXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9vY2ZzMi94YXR0ci5oXG5AQCAtNTUsOSAmIzQzOzU1LDEyIEBAIGludCBvY2ZzMl9pbml0X3NlY3VyaXR5X3NldChoYW5kbGVfdCAqLCBzdHJ1Y3QgaW5vZGUgKixcbiBpbnQgb2NmczJfY2FsY19zZWN1cml0eV9pbml0KHN0cnVjdCBpbm9kZSAqLFxuIFx0XHRcdCAgICAgc3RydWN0IG9jZnMyX3NlY3VyaXR5X3hhdHRyX2luZm8gKixcbiBcdFx0XHQgICAgIGludCAqLCBpbnQgKiwgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKiopO1xuLWludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICosIHN0cnVjdCBidWZmZXJfaGVhZCAqLFxuLVx0XHRcdCAgdW1vZGVfdCwgc3RydWN0IG9jZnMyX3NlY3VyaXR5X3hhdHRyX2luZm8gKixcbi1cdFx0XHQgIGludCAqLCBpbnQgKiwgaW50ICopO1xuJiM0MztcbiYjNDM7c3RydWN0IG9jZnMyX2FjbF9zdGF0ZTtcbiYjNDM7aW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpciwgdW1vZGVfdCBtb2RlLFxuJiM0MztcdFx0XHQgIHN0cnVjdCBvY2ZzMl9zZWN1cml0eV94YXR0cl9pbmZvICpzaSxcbiYjNDM7XHRcdFx0ICBpbnQgKndhbnRfY2x1c3RlcnMsIGludCAqeGF0dHJfY3JlZGl0cyxcbiYjNDM7XHRcdFx0ICBpbnQgKndhbnRfbWV0YSwgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqYWNsX3N0YXRlKTtcbiBcbiAvKlxuICAqIHhhdHRycyBjYW4gbGl2ZSBpbnNpZGUgYW4gaW5vZGUsIGFzIHBhcnQgb2YgYW4gZXh0ZXJuYWwgeGF0dHIgYmxvY2ssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDg6MDc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09DRlMyX0ZTJiMzNDssCiAgICAmIzM0O0NPTkZJR0ZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7b2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsJiMzNDssCiAgICAmIzM0O29jZnMyX2luaXRfYWNsJiMzNDssCiAgICAmIzM0O29jZnMyX2FjbF9pbml0X3ByZXBhcmUmIzM0OywKICAgICYjMzQ7b2NmczJfY2FsY194YXR0cl9pbml0JiMzNDssCiAgICAmIzM0O29jZnMyX3hhdHRyX3NldF9oYW5kbGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIEFDTCBpbml0aWFsaXphdGlvbiBkdXJpbmcgaW5vZGUgY3JlYXRpb24gaW4gT0NGUzIgdG8gcHJldmVudCBkZWFkbG9ja3MuIEl0IG1vZGlmaWVzIGhvdyBBQ0xzIGFyZSBjYWxjdWxhdGVkIGFuZCBzZXQgZm9yIG5ldyBpbm9kZXMgKGUuZy4sIHZpYSBta25vZCwgbWtkaXIsIGNyZWF0ZSwgc3ltbGluaywgcmVmbGluaykuIFRoZSBjaGFuZ2VzIGFyZSBpbiBjb3JlIE9DRlMyIGxvZ2ljIGFuZCBhcmUgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBWRlMgc3lzY2FsbHMgd2hlbiBvcGVyYXRpbmcgb24gYW4gT0NGUzIgZmlsZXN5c3RlbS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDcyODM0M2IzNTAzOWUwNjc1NDdkZWJjMDYxZTJjZGFiZTFlYjA2Y2MKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEp1bCAzMCAwODowNzoyOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2FjbC5jIGIvZnMvb2NmczIvYWNsLmMKaW5kZXggYWYxZTJjZWRiMjE3Zi4uMDkwZWM2MGZiNTc2YSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvYWNsLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvb2NmczIvYWNsLmMKQEAgLTExMCw4ICYjNDM7MTEwLDcgQEAgc3RhdGljIHZvaWQgKm9jZnMyX2FjbF90b194YXR0cihjb25zdCBzdHJ1Y3QgcG9zaXhfYWNsICphY2wsIHNpemVfdCAqc2l6ZSkKIAlyZXR1cm4gb2NmczJfYWNsOwogfQogCi1zdGF0aWMgc3RydWN0IHBvc2l4X2FjbCAqb2NmczJfZ2V0X2FjbF9ub2xvY2soc3RydWN0IGlub2RlICppbm9kZSwKLQkJCQkJICAgICAgaW50IHR5cGUsCiYjNDM7c3RhdGljIHN0cnVjdCBwb3NpeF9hY2wgKm9jZnMyX2dldF9hY2xfbm9sb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlLAogCQkJCQkgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoKQogewogCWludCBuYW1lX2luZGV4OwpAQCAtMzQ5LDYzICYjNDM7MzQ4LDEwNSBAQCBpbnQgb2NmczJfYWNsX2NobW9kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCiAgKiBJbml0aWFsaXplIHRoZSBBQ0xzIG9mIGEgbmV3IGlub2RlLiBJZiBwYXJlbnQgZGlyZWN0b3J5IGhhcyBkZWZhdWx0IEFDTCwKICAqIHRoZW4gY2xvbmUgdG8gbmV3IGlub2RlLiBDYWxsZWQgZnJvbSBvY2ZzMl9ta25vZC4KICAqLwotaW50IG9jZnMyX2luaXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsCi0JCSAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCSAgIHN0cnVjdCBpbm9kZSAqZGlyLAotCQkgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoLAotCQkgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpcl9iaCwKLQkJICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMsCi0JCSAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICpkYXRhX2FjKQomIzQzO3ZvaWQgb2NmczJfYWNsX2luaXRfcmVsZWFzZShzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICpzdGF0ZSkKJiM0Mzt7CiYjNDM7CXBvc2l4X2FjbF9yZWxlYXNlKHN0YXRlLSZndDtkZWZhdWx0X2FjbCk7CiYjNDM7CXBvc2l4X2FjbF9yZWxlYXNlKHN0YXRlLSZndDthY2wpOwomIzQzOwlzdGF0ZS0mZ3Q7ZGVmYXVsdF9hY2wgPSBOVUxMOwomIzQzOwlzdGF0ZS0mZ3Q7YWNsID0gTlVMTDsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IG9jZnMyX2FjbF9pbml0X3ByZXBhcmUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJfYmgsCiYjNDM7CQkJICAgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqc3RhdGUpCiB7CiAJc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihpbm9kZS0mZ3Q7aV9zYik7Ci0Jc3RydWN0IHBvc2l4X2FjbCAqYWNsID0gTlVMTDsKLQlpbnQgcmV0ID0gMCwgcmV0MjsKLQl1bW9kZV90IG1vZGU7Ci0KLQlpZiAoIVNfSVNMTksoaW5vZGUtJmd0O2lfbW9kZSkpIHsKLQkJaWYgKG9zYi0mZ3Q7c19tb3VudF9vcHQgJmFtcDsgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7Ci0JCQlkb3duX3JlYWQoJmFtcDtPQ0ZTMl9JKGRpciktJmd0O2lwX3hhdHRyX3NlbSk7Ci0JCQlhY2wgPSBvY2ZzMl9nZXRfYWNsX25vbG9jayhkaXIsIEFDTF9UWVBFX0RFRkFVTFQsCi0JCQkJCQkgICBkaXJfYmgpOwotCQkJdXBfcmVhZCgmYW1wO09DRlMyX0koZGlyKS0mZ3Q7aXBfeGF0dHJfc2VtKTsKLQkJCWlmIChJU19FUlIoYWNsKSkKLQkJCQlyZXR1cm4gUFRSX0VSUihhY2wpOwomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsKJiM0MzsJc3RhdGUtJmd0O2RlZmF1bHRfYWNsID0gTlVMTDsKJiM0MzsJc3RhdGUtJmd0O2FjbCA9IE5VTEw7CiYjNDM7CXN0YXRlLSZndDttb2RlID0gaW5vZGUtJmd0O2lfbW9kZTsKJiM0MzsKJiM0MzsJaWYgKFNfSVNMTksoaW5vZGUtJmd0O2lfbW9kZSkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKG9zYi0mZ3Q7c19tb3VudF9vcHQgJmFtcDsgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7CiYjNDM7CQlkb3duX3JlYWQoJmFtcDtPQ0ZTMl9JKGRpciktJmd0O2lwX3hhdHRyX3NlbSk7CiYjNDM7CQlzdGF0ZS0mZ3Q7ZGVmYXVsdF9hY2wgPQomIzQzOwkJCW9jZnMyX2dldF9hY2xfbm9sb2NrKGRpciwgQUNMX1RZUEVfREVGQVVMVCwgZGlyX2JoKTsKJiM0MzsJCXVwX3JlYWQoJmFtcDtPQ0ZTMl9JKGRpciktJmd0O2lwX3hhdHRyX3NlbSk7CiYjNDM7CQlpZiAoSVNfRVJSKHN0YXRlLSZndDtkZWZhdWx0X2FjbCkpIHsKJiM0MzsJCQlyZXQgPSBQVFJfRVJSKHN0YXRlLSZndDtkZWZhdWx0X2FjbCk7CiYjNDM7CQkJc3RhdGUtJmd0O2RlZmF1bHRfYWNsID0gTlVMTDsKJiM0MzsJCQlyZXR1cm4gcmV0OwogCQl9Ci0JCWlmICghYWNsKSB7Ci0JCQltb2RlID0gaW5vZGUtJmd0O2lfbW9kZSAmYW1wOyB+Y3VycmVudF91bWFzaygpOwotCQkJcmV0ID0gb2NmczJfYWNsX3NldF9tb2RlKGlub2RlLCBkaV9iaCwgaGFuZGxlLCBtb2RlKTsKLQkJCWlmIChyZXQpIHsKLQkJCQltbG9nX2Vycm5vKHJldCk7CiYjNDM7CQlpZiAoc3RhdGUtJmd0O2RlZmF1bHRfYWNsKSB7CiYjNDM7CQkJc3RhdGUtJmd0O2FjbCA9IHBvc2l4X2FjbF9kdXAoc3RhdGUtJmd0O2RlZmF1bHRfYWNsKTsKJiM0MzsJCQlpZiAoIXN0YXRlLSZndDthY2wpIHsKJiM0MzsJCQkJcmV0ID0gLUVOT01FTTsKIAkJCQlnb3RvIGNsZWFudXA7CiAJCQl9CiYjNDM7CQkJcmV0ID0gX19wb3NpeF9hY2xfY3JlYXRlKCZhbXA7c3RhdGUtJmd0O2FjbCwgR0ZQX05PRlMsCiYjNDM7CQkJCQkJICZhbXA7c3RhdGUtJmd0O21vZGUpOwomIzQzOwkJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCQlnb3RvIGNsZWFudXA7CiYjNDM7CQkJaWYgKHJldCA9PSAwKSB7CiYjNDM7CQkJCXBvc2l4X2FjbF9yZWxlYXNlKHN0YXRlLSZndDthY2wpOwomIzQzOwkJCQlzdGF0ZS0mZ3Q7YWNsID0gTlVMTDsKJiM0MzsJCQl9CiYjNDM7CQkJaWYgKCFTX0lTRElSKGlub2RlLSZndDtpX21vZGUpKSB7CiYjNDM7CQkJCXBvc2l4X2FjbF9yZWxlYXNlKHN0YXRlLSZndDtkZWZhdWx0X2FjbCk7CiYjNDM7CQkJCXN0YXRlLSZndDtkZWZhdWx0X2FjbCA9IE5VTEw7CiYjNDM7CQkJfQomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlzdGF0ZS0mZ3Q7bW9kZSAmYW1wOz0gfmN1cnJlbnRfdW1hc2soKTsKIAkJfQomIzQzOwl9IGVsc2UgewomIzQzOwkJc3RhdGUtJmd0O21vZGUgJmFtcDs9IH5jdXJyZW50X3VtYXNrKCk7CiAJfQotCWlmICgob3NiLSZndDtzX21vdW50X29wdCAmYW1wOyBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpICZhbXA7JmFtcDsgYWNsKSB7Ci0JCWlmIChTX0lTRElSKGlub2RlLSZndDtpX21vZGUpKSB7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO2NsZWFudXA6CiYjNDM7CW9jZnMyX2FjbF9pbml0X3JlbGVhc2Uoc3RhdGUpOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztpbnQgb2NmczJfaW5pdF9hY2woaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKJiM0MzsJCSAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgsCiYjNDM7CQkgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYywKJiM0MzsJCSAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICpkYXRhX2FjLAomIzQzOwkJICAgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqc3RhdGUpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGlub2RlLSZndDtpX3NiKTsKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CiYjNDM7CWlmIChTX0lTTE5LKGlub2RlLSZndDtpX21vZGUpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmIChvc2ItJmd0O3NfbW91bnRfb3B0ICZhbXA7IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkgewomIzQzOwkJaWYgKFNfSVNESVIoaW5vZGUtJmd0O2lfbW9kZSkgJmFtcDsmYW1wOyBzdGF0ZS0mZ3Q7ZGVmYXVsdF9hY2wpIHsKIAkJCXJldCA9IG9jZnMyX3NldF9hY2woaGFuZGxlLCBpbm9kZSwgZGlfYmgsCi0JCQkJCSAgICBBQ0xfVFlQRV9ERUZBVUxULCBhY2wsCi0JCQkJCSAgICBtZXRhX2FjLCBkYXRhX2FjKTsKJiM0MzsJCQkJCSAgICBBQ0xfVFlQRV9ERUZBVUxULAomIzQzOwkJCQkJICAgIHN0YXRlLSZndDtkZWZhdWx0X2FjbCwgbWV0YV9hYywKJiM0MzsJCQkJCSAgICBkYXRhX2FjKTsKIAkJCWlmIChyZXQpCi0JCQkJZ290byBjbGVhbnVwOwomIzQzOwkJCQlyZXR1cm4gcmV0OwogCQl9Ci0JCW1vZGUgPSBpbm9kZS0mZ3Q7aV9tb2RlOwotCQlyZXQgPSBfX3Bvc2l4X2FjbF9jcmVhdGUoJmFtcDthY2wsIEdGUF9OT0ZTLCAmYW1wO21vZGUpOwotCQlpZiAocmV0ICZsdDsgMCkKLQkJCXJldHVybiByZXQ7CiYjNDM7CX0KIAotCQlyZXQyID0gb2NmczJfYWNsX3NldF9tb2RlKGlub2RlLCBkaV9iaCwgaGFuZGxlLCBtb2RlKTsKLQkJaWYgKHJldDIpIHsKLQkJCW1sb2dfZXJybm8ocmV0Mik7Ci0JCQlyZXQgPSByZXQyOwotCQkJZ290byBjbGVhbnVwOwotCQl9Ci0JCWlmIChyZXQgJmd0OyAwKSB7Ci0JCQlyZXQgPSBvY2ZzMl9zZXRfYWNsKGhhbmRsZSwgaW5vZGUsCi0JCQkJCSAgICBkaV9iaCwgQUNMX1RZUEVfQUNDRVNTLAotCQkJCQkgICAgYWNsLCBtZXRhX2FjLCBkYXRhX2FjKTsKJiM0MzsJcmV0ID0gb2NmczJfYWNsX3NldF9tb2RlKGlub2RlLCBkaV9iaCwgaGFuZGxlLCBzdGF0ZS0mZ3Q7bW9kZSk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCW1sb2dfZXJybm8ocmV0KTsKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKG9zYi0mZ3Q7c19tb3VudF9vcHQgJmFtcDsgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7CiYjNDM7CQlpZiAoc3RhdGUtJmd0O2FjbCkgewomIzQzOwkJCXJldCA9IG9jZnMyX3NldF9hY2woaGFuZGxlLCBpbm9kZSwgZGlfYmgsCiYjNDM7CQkJCQkgICAgQUNMX1RZUEVfQUNDRVNTLCBzdGF0ZS0mZ3Q7YWNsLAomIzQzOwkJCQkJICAgIG1ldGFfYWMsIGRhdGFfYWMpOwogCQl9CiAJfQotY2xlYW51cDoKLQlwb3NpeF9hY2xfcmVsZWFzZShhY2wpOwomIzQzOwogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9hY2wuaCBiL2ZzL29jZnMyL2FjbC5oCmluZGV4IDY2N2M2ZjAzZmE2MDYuLmE5MWY5Y2UyNzhkNmQgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2FjbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL29jZnMyL2FjbC5oCkBAIC0yMCw5ICYjNDM7MjAsMjAgQEAgc3RydWN0IHBvc2l4X2FjbCAqb2NmczJfaW9wX2dldF9hY2woc3RydWN0IGlub2RlICppbm9kZSwgaW50IHR5cGUsIGJvb2wgcmN1KTsKIGludCBvY2ZzMl9pb3Bfc2V0X2FjbChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAogCQkgICAgICBzdHJ1Y3QgcG9zaXhfYWNsICphY2wsIGludCB0eXBlKTsKIGV4dGVybiBpbnQgb2NmczJfYWNsX2NobW9kKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKik7Ci1leHRlcm4gaW50IG9jZnMyX2luaXRfYWNsKGhhbmRsZV90ICosIHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgaW5vZGUgKiwKLQkJCSAgc3RydWN0IGJ1ZmZlcl9oZWFkICosIHN0cnVjdCBidWZmZXJfaGVhZCAqLAotCQkJICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqLAotCQkJICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqKTsKJiM0MztzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlIHsKJiM0MzsJc3RydWN0IHBvc2l4X2FjbCAqZGVmYXVsdF9hY2w7CiYjNDM7CXN0cnVjdCBwb3NpeF9hY2wgKmFjbDsKJiM0MzsJdW1vZGVfdCBtb2RlOwomIzQzO307CiYjNDM7CiYjNDM7aW50IG9jZnMyX2FjbF9pbml0X3ByZXBhcmUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJfYmgsCiYjNDM7CQkJICAgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqc3RhdGUpOwomIzQzO3ZvaWQgb2NmczJfYWNsX2luaXRfcmVsZWFzZShzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICpzdGF0ZSk7CiYjNDM7aW50IG9jZnMyX2luaXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiYjNDM7CQkgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoLAomIzQzOwkJICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMsCiYjNDM7CQkgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqZGF0YV9hYywKJiM0MzsJCSAgIHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgKnN0YXRlKTsKIAogI2VuZGlmIC8qIE9DRlMyX0FDTF9IICovCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9uYW1laS5jIGIvZnMvb2NmczIvbmFtZWkuYwppbmRleCAxMjc3NjY2Yzc3Y2QyLi5lYTM3YTUwNTgwODkwIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9uYW1laS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL29jZnMyL25hbWVpLmMKQEAgLTI1Niw2ICYjNDM7MjU2LDcgQEAgc3RhdGljIGludCBvY2ZzMl9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKIAlzaWdzZXRfdCBvbGRzZXQ7CiAJaW50IGRpZF9ibG9ja19zaWduYWxzID0gMDsKIAlzdHJ1Y3Qgb2NmczJfZGVudHJ5X2xvY2sgKmRsID0gTlVMTDsKJiM0MzsJc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSBhY2xfc3RhdGUgPSB7IDAgfTsKIAogCXRyYWNlX29jZnMyX21rbm9kKGRpciwgZGVudHJ5LCBkZW50cnktJmd0O2RfbmFtZS5sZW4sIGRlbnRyeS0mZ3Q7ZF9uYW1lLm5hbWUsCiAJCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpT0NGUzJfSShkaXIpLSZndDtpcF9ibGtubywKQEAgLTMzMCwxMCAmIzQzOzMzMSwxNCBAQCBzdGF0aWMgaW50IG9jZnMyX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAogCQl9CiAJfQogCiYjNDM7CXN0YXR1cyA9IG9jZnMyX2FjbF9pbml0X3ByZXBhcmUoaW5vZGUsIGRpciwgcGFyZW50X2ZlX2JoLCAmYW1wO2FjbF9zdGF0ZSk7CiYjNDM7CWlmIChzdGF0dXMgJmx0OyAwKQomIzQzOwkJZ290byBsZWF2ZTsKJiM0MzsKIAkvKiBjYWxjdWxhdGUgbWV0YSBkYXRhL2NsdXN0ZXJzIGZvciBzZXR0aW5nIHNlY3VyaXR5IGFuZCBhY2wgeGF0dHIgKi8KLQlzdGF0dXMgPSBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoZGlyLCBwYXJlbnRfZmVfYmgsIG1vZGUsCi0JCQkJICAgICAgICZhbXA7c2ksICZhbXA7d2FudF9jbHVzdGVycywKLQkJCQkgICAgICAgJmFtcDt4YXR0cl9jcmVkaXRzLCAmYW1wO3dhbnRfbWV0YSk7CiYjNDM7CXN0YXR1cyA9IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChkaXIsIG1vZGUsICZhbXA7c2ksICZhbXA7d2FudF9jbHVzdGVycywKJiM0MzsJCQkJICAgICAgICZhbXA7eGF0dHJfY3JlZGl0cywgJmFtcDt3YW50X21ldGEsCiYjNDM7CQkJCSAgICAgICAmYW1wO2FjbF9zdGF0ZSk7CiAJaWYgKHN0YXR1cyAmbHQ7IDApIHsKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwogCQlnb3RvIGxlYXZlOwpAQCAtNDExLDggJiM0Mzs0MTYsOCBAQCBzdGF0aWMgaW50IG9jZnMyX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAogCQlpbmNfbmxpbmsoZGlyKTsKIAl9CiAKLQlzdGF0dXMgPSBvY2ZzMl9pbml0X2FjbChoYW5kbGUsIGlub2RlLCBkaXIsIG5ld19mZV9iaCwgcGFyZW50X2ZlX2JoLAotCQkJIG1ldGFfYWMsIGRhdGFfYWMpOwomIzQzOwlzdGF0dXMgPSBvY2ZzMl9pbml0X2FjbChoYW5kbGUsIGlub2RlLCBuZXdfZmVfYmgsIG1ldGFfYWMsIGRhdGFfYWMsCiYjNDM7CQkJCSZhbXA7YWNsX3N0YXRlKTsKIAogCWlmIChzdGF0dXMgJmx0OyAwKSB7CiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKQEAgLTQ3Nyw2ICYjNDM7NDgyLDggQEAgc3RhdGljIGludCBvY2ZzMl9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKIAlicmVsc2UocGFyZW50X2ZlX2JoKTsKIAlrZnJlZShzaS52YWx1ZSk7CiAKJiM0MzsJb2NmczJfYWNsX2luaXRfcmVsZWFzZSgmYW1wO2FjbF9zdGF0ZSk7CiYjNDM7CiAJb2NmczJfZnJlZV9kaXJfbG9va3VwX3Jlc3VsdCgmYW1wO2xvb2t1cCk7CiAKIAlpZiAoaW5vZGVfYWMpCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi94YXR0ci5jIGIvZnMvb2NmczIveGF0dHIuYwppbmRleCBmY2RkZDNjMTNhY2RkLi44NmYwMjkzNjgxZmNjIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi94YXR0ci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL29jZnMyL3hhdHRyLmMKQEAgLTYxMSwxMyAmIzQzOzYxMSwxMCBAQCBpbnQgb2NmczJfY2FsY19zZWN1cml0eV9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLAogCXJldHVybiByZXQ7CiB9CiAKLWludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICpkaXIsCi0JCQkgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlyX2JoLAotCQkJICB1bW9kZV90IG1vZGUsCiYjNDM7aW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpciwgdW1vZGVfdCBtb2RlLAogCQkJICBzdHJ1Y3Qgb2NmczJfc2VjdXJpdHlfeGF0dHJfaW5mbyAqc2ksCi0JCQkgIGludCAqd2FudF9jbHVzdGVycywKLQkJCSAgaW50ICp4YXR0cl9jcmVkaXRzLAotCQkJICBpbnQgKndhbnRfbWV0YSkKJiM0MzsJCQkgIGludCAqd2FudF9jbHVzdGVycywgaW50ICp4YXR0cl9jcmVkaXRzLAomIzQzOwkJCSAgaW50ICp3YW50X21ldGEsIHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgKmFjbF9zdGF0ZSkKIHsKIAlpbnQgcmV0ID0gMDsKIAlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGRpci0mZ3Q7aV9zYik7CkBAIC02MjgsMTkgJiM0Mzs2MjUsMTUgQEAgaW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpciwKIAkJCQkJCSAgICAgc2ktJmd0O3ZhbHVlX2xlbik7CiAKIAlpZiAob3NiLSZndDtzX21vdW50X29wdCAmYW1wOyBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHsKLQkJZG93bl9yZWFkKCZhbXA7T0NGUzJfSShkaXIpLSZndDtpcF94YXR0cl9zZW0pOwotCQlhY2xfbGVuID0gb2NmczJfeGF0dHJfZ2V0X25vbG9jayhkaXIsIGRpcl9iaCwKLQkJCQkJT0NGUzJfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0RFRkFVTFQsCi0JCQkJCSYjMzQ7JiMzNDssIE5VTEwsIDApOwotCQl1cF9yZWFkKCZhbXA7T0NGUzJfSShkaXIpLSZndDtpcF94YXR0cl9zZW0pOwotCQlpZiAoYWNsX2xlbiAmZ3Q7IDApIHsKLQkJCWFfc2l6ZSA9IG9jZnMyX3hhdHRyX2VudHJ5X3JlYWxfc2l6ZSgwLCBhY2xfbGVuKTsKLQkJCWlmIChTX0lTRElSKG1vZGUpKQotCQkJCWFfc2l6ZSAmbHQ7Jmx0Oz0gMTsKLQkJfSBlbHNlIGlmIChhY2xfbGVuICE9IDAgJmFtcDsmYW1wOyBhY2xfbGVuICE9IC1FTk9EQVRBKSB7Ci0JCQlyZXQgPSBhY2xfbGVuOwotCQkJbWxvZ19lcnJubyhyZXQpOwotCQkJcmV0dXJuIHJldDsKJiM0MzsJCWlmIChhY2xfc3RhdGUtJmd0O2RlZmF1bHRfYWNsICZhbXA7JmFtcDsgU19JU0RJUihtb2RlKSkgewomIzQzOwkJCWFjbF9sZW4gPSBhY2xfc3RhdGUtJmd0O2RlZmF1bHRfYWNsLSZndDthX2NvdW50ICoKJiM0MzsJCQkJICBzaXplb2Yoc3RydWN0IG9jZnMyX2FjbF9lbnRyeSk7CiYjNDM7CQkJYV9zaXplICYjNDM7PSBvY2ZzMl94YXR0cl9lbnRyeV9yZWFsX3NpemUoMCwgYWNsX2xlbik7CiYjNDM7CQl9CiYjNDM7CQlpZiAoYWNsX3N0YXRlLSZndDthY2wpIHsKJiM0MzsJCQlhY2xfbGVuID0gYWNsX3N0YXRlLSZndDthY2wtJmd0O2FfY291bnQgKgomIzQzOwkJCQkgIHNpemVvZihzdHJ1Y3Qgb2NmczJfYWNsX2VudHJ5KTsKJiM0MzsJCQlhX3NpemUgJiM0Mzs9IG9jZnMyX3hhdHRyX2VudHJ5X3JlYWxfc2l6ZSgwLCBhY2xfbGVuKTsKIAkJfQogCX0KIApAQCAtNjgzLDE0ICYjNDM7Njc2LDMzIEBAIGludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICpkaXIsCiAJCQkJCQkJICAgbmV3X2NsdXN0ZXJzKTsKIAkJKndhbnRfY2x1c3RlcnMgJiM0Mzs9IG5ld19jbHVzdGVyczsKIAl9Ci0JaWYgKG9zYi0mZ3Q7c19tb3VudF9vcHQgJmFtcDsgT0NGUzJfTU9VTlRfUE9TSVhfQUNMICZhbXA7JmFtcDsKLQkgICAgYWNsX2xlbiAmZ3Q7IE9DRlMyX1hBVFRSX0lOTElORV9TSVpFKSB7Ci0JCS8qIGZvciBkaXJlY3RvcnksIGl0IGhhcyBERUZBVUxUIGFuZCBBQ0NFU1MgdHdvIHR5cGVzIG9mIGFjbHMgKi8KLQkJbmV3X2NsdXN0ZXJzID0gKFNfSVNESVIobW9kZSkgPyAyIDogMSkgKgotCQkJCW9jZnMyX2NsdXN0ZXJzX2Zvcl9ieXRlcyhkaXItJmd0O2lfc2IsIGFjbF9sZW4pOwotCQkqeGF0dHJfY3JlZGl0cyAmIzQzOz0gb2NmczJfY2x1c3RlcnNfdG9fYmxvY2tzKGRpci0mZ3Q7aV9zYiwKLQkJCQkJCQkgICBuZXdfY2x1c3RlcnMpOwotCQkqd2FudF9jbHVzdGVycyAmIzQzOz0gbmV3X2NsdXN0ZXJzOwomIzQzOwlpZiAob3NiLSZndDtzX21vdW50X29wdCAmYW1wOyBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHsKJiM0MzsJCWlmIChhY2xfc3RhdGUtJmd0O2RlZmF1bHRfYWNsICZhbXA7JmFtcDsgU19JU0RJUihtb2RlKSkgewomIzQzOwkJCWFjbF9sZW4gPSBhY2xfc3RhdGUtJmd0O2RlZmF1bHRfYWNsLSZndDthX2NvdW50ICoKJiM0MzsJCQkJICBzaXplb2Yoc3RydWN0IG9jZnMyX2FjbF9lbnRyeSk7CiYjNDM7CQkJaWYgKGFjbF9sZW4gJmd0OyBPQ0ZTMl9YQVRUUl9JTkxJTkVfU0laRSkgewomIzQzOwkJCQluZXdfY2x1c3RlcnMgPQomIzQzOwkJCQkJb2NmczJfY2x1c3RlcnNfZm9yX2J5dGVzKGRpci0mZ3Q7aV9zYiwKJiM0MzsJCQkJCQkJCSBhY2xfbGVuKTsKJiM0MzsJCQkJKnhhdHRyX2NyZWRpdHMgJiM0Mzs9CiYjNDM7CQkJCQlvY2ZzMl9jbHVzdGVyc190b19ibG9ja3MoZGlyLSZndDtpX3NiLAomIzQzOwkJCQkJCQkJIG5ld19jbHVzdGVycyk7CiYjNDM7CQkJCSp3YW50X2NsdXN0ZXJzICYjNDM7PSBuZXdfY2x1c3RlcnM7CiYjNDM7CQkJfQomIzQzOwkJfQomIzQzOwkJaWYgKGFjbF9zdGF0ZS0mZ3Q7YWNsKSB7CiYjNDM7CQkJYWNsX2xlbiA9IGFjbF9zdGF0ZS0mZ3Q7YWNsLSZndDthX2NvdW50ICoKJiM0MzsJCQkJICBzaXplb2Yoc3RydWN0IG9jZnMyX2FjbF9lbnRyeSk7CiYjNDM7CQkJaWYgKGFjbF9sZW4gJmd0OyBPQ0ZTMl9YQVRUUl9JTkxJTkVfU0laRSkgewomIzQzOwkJCQluZXdfY2x1c3RlcnMgPQomIzQzOwkJCQkJb2NmczJfY2x1c3RlcnNfZm9yX2J5dGVzKGRpci0mZ3Q7aV9zYiwKJiM0MzsJCQkJCQkJCSBhY2xfbGVuKTsKJiM0MzsJCQkJKnhhdHRyX2NyZWRpdHMgJiM0Mzs9CiYjNDM7CQkJCQlvY2ZzMl9jbHVzdGVyc190b19ibG9ja3MoZGlyLSZndDtpX3NiLAomIzQzOwkJCQkJCQkJIG5ld19jbHVzdGVycyk7CiYjNDM7CQkJCSp3YW50X2NsdXN0ZXJzICYjNDM7PSBuZXdfY2x1c3RlcnM7CiYjNDM7CQkJfQomIzQzOwkJfQogCX0KIAogCXJldHVybiByZXQ7CkBAIC0zNDgzLDkgJiM0MzszNDk1LDEwIEBAIHN0YXRpYyBpbnQgX19vY2ZzMl94YXR0cl9zZXRfaGFuZGxlKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiB9CiAKIC8qCi0gKiBUaGlzIGZ1bmN0aW9uIG9ubHkgY2FsbGVkIGR1aW5nIGNyZWF0aW5nIGlub2RlCi0gKiBmb3IgaW5pdCBzZWN1cml0eS9hY2wgeGF0dHJzIG9mIHRoZSBuZXcgaW5vZGUuCi0gKiBBbGwgdHJhbnNhbmN0aW9uIGNyZWRpdHMgaGF2ZSBiZWVuIHJlc2VydmVkIGluIG1rbm9kLgomIzQzOyAqIFRoaXMgaGVscGVyIGlzIG9ubHkgZm9yIHNldHRpbmcgaW5pdGlhbCBBQ0wgb3Igc2VjdXJpdHkgeGF0dHJzIG9uIGFuIGlub2RlCiYjNDM7ICogdGhhdCBpcyBzdGlsbCB1bnB1Ymxpc2hlZCwgdW5oYXNoZWQsIGFuZCB1bmF0dGFjaGVkIHRvIGEgZGVudHJ5LgomIzQzOyAqIE9yZGluYXJ5IHhhdHRyIHVwZGF0ZXMgbXVzdCB1c2Ugb2NmczJfeGF0dHJfc2V0KCkuCiYjNDM7ICogQWxsIHRyYW5zYWN0aW9uIGNyZWRpdHMgaGF2ZSBiZWVuIHJlc2VydmVkIGluIG1rbm9kIG9yIHN5bWxpbmsgY2FsbGVycy4KICAqLwogaW50IG9jZnMyX3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlX3QgKmhhbmRsZSwKIAkJCSAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsCkBAIC0zNTQyLDggJiM0MzszNTU1LDYgQEAgaW50IG9jZnMyX3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlX3QgKmhhbmRsZSwKIAl4aXMuaW5vZGVfYmggPSB4YnMuaW5vZGVfYmggPSBkaV9iaDsKIAlkaSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopZGlfYmgtJmd0O2JfZGF0YTsKIAotCWRvd25fd3JpdGUoJmFtcDtPQ0ZTMl9JKGlub2RlKS0mZ3Q7aXBfeGF0dHJfc2VtKTsKLQogCXJldCA9IG9jZnMyX3hhdHRyX2lib2R5X2ZpbmQoaW5vZGUsIG5hbWVfaW5kZXgsIG5hbWUsICZhbXA7eGlzKTsKIAlpZiAocmV0KQogCQlnb3RvIGNsZWFudXA7CkBAIC0zNTU2LDcgJiM0MzszNTY3LDYgQEAgaW50IG9jZnMyX3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlX3QgKmhhbmRsZSwKIAlyZXQgPSBfX29jZnMyX3hhdHRyX3NldF9oYW5kbGUoaW5vZGUsIGRpLCAmYW1wO3hpLCAmYW1wO3hpcywgJmFtcDt4YnMsICZhbXA7Y3R4dCk7CiAKIGNsZWFudXA6Ci0JdXBfd3JpdGUoJmFtcDtPQ0ZTMl9JKGlub2RlKS0mZ3Q7aXBfeGF0dHJfc2VtKTsKIAlicmVsc2UoeGJzLnhhdHRyX2JoKTsKIAlvY2ZzMl94YXR0cl9idWNrZXRfZnJlZSh4YnMuYnVja2V0KTsKIApAQCAtNzI1Nyw2ICYjNDM7NzI2Nyw3IEBAIGludCBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2woc3RydWN0IGlub2RlICpkaXIsCiB7CiAJaW50IHJldCA9IDA7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJfYmggPSBOVUxMOwomIzQzOwlzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlIGFjbF9zdGF0ZSA9IHsgMCB9OwogCiAJcmV0ID0gb2NmczJfaW5pdF9zZWN1cml0eV9nZXQoaW5vZGUsIGRpciwgcXN0ciwgTlVMTCk7CiAJaWYgKHJldCkgewpAQCAtNzI2OSwxMCAmIzQzOzcyODAsMTcgQEAgaW50IG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbChzdHJ1Y3QgaW5vZGUgKmRpciwKIAkJbWxvZ19lcnJubyhyZXQpOwogCQlnb3RvIGxlYXZlOwogCX0KLQlyZXQgPSBvY2ZzMl9pbml0X2FjbChOVUxMLCBpbm9kZSwgZGlyLCBOVUxMLCBkaXJfYmgsIE5VTEwsIE5VTEwpOwomIzQzOwomIzQzOwlyZXQgPSBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlKGlub2RlLCBkaXIsIGRpcl9iaCwgJmFtcDthY2xfc3RhdGUpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byB1bmxvY2s7CiYjNDM7CiYjNDM7CXJldCA9IG9jZnMyX2luaXRfYWNsKE5VTEwsIGlub2RlLCBOVUxMLCBOVUxMLCBOVUxMLCAmYW1wO2FjbF9zdGF0ZSk7CiAJaWYgKHJldCkKIAkJbWxvZ19lcnJubyhyZXQpOwogCiYjNDM7dW5sb2NrOgomIzQzOwlvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlKCZhbXA7YWNsX3N0YXRlKTsKIAlvY2ZzMl9pbm9kZV91bmxvY2soZGlyLCAwKTsKIAlicmVsc2UoZGlyX2JoKTsKIGxlYXZlOgpkaWZmIC0tZ2l0IGEvZnMvb2NmczIveGF0dHIuaCBiL2ZzL29jZnMyL3hhdHRyLmgKaW5kZXggNjVlOWFhNzQzOTE5OS4uNWNkZDZjNmI0MDA2NCAxMDA2NDQKLS0tIGEvZnMvb2NmczIveGF0dHIuaAomIzQzOyYjNDM7JiM0MzsgYi9mcy9vY2ZzMi94YXR0ci5oCkBAIC01NSw5ICYjNDM7NTUsMTIgQEAgaW50IG9jZnMyX2luaXRfc2VjdXJpdHlfc2V0KGhhbmRsZV90ICosIHN0cnVjdCBpbm9kZSAqLAogaW50IG9jZnMyX2NhbGNfc2VjdXJpdHlfaW5pdChzdHJ1Y3QgaW5vZGUgKiwKIAkJCSAgICAgc3RydWN0IG9jZnMyX3NlY3VyaXR5X3hhdHRyX2luZm8gKiwKIAkJCSAgICAgaW50ICosIGludCAqLCBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqKik7Ci1pbnQgb2NmczJfY2FsY194YXR0cl9pbml0KHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiwKLQkJCSAgdW1vZGVfdCwgc3RydWN0IG9jZnMyX3NlY3VyaXR5X3hhdHRyX2luZm8gKiwKLQkJCSAgaW50ICosIGludCAqLCBpbnQgKik7CiYjNDM7CiYjNDM7c3RydWN0IG9jZnMyX2FjbF9zdGF0ZTsKJiM0MztpbnQgb2NmczJfY2FsY194YXR0cl9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLCB1bW9kZV90IG1vZGUsCiYjNDM7CQkJICBzdHJ1Y3Qgb2NmczJfc2VjdXJpdHlfeGF0dHJfaW5mbyAqc2ksCiYjNDM7CQkJICBpbnQgKndhbnRfY2x1c3RlcnMsIGludCAqeGF0dHJfY3JlZGl0cywKJiM0MzsJCQkgIGludCAqd2FudF9tZXRhLCBzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICphY2xfc3RhdGUpOwogCiAvKgogICogeGF0dHJzIGNhbiBsaXZlIGluc2lkZSBhbiBpbm9kZSwgYXMgcGFydCBvZiBhbiBleHRlcm5hbCB4YXR0ciBibG9jaywKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDg6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzU2OQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI5OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWZhY3RvcmluZyBPQ0ZTMiBBQ0wgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCYjMzk7cyB0b3VjaGluZyBzb21lIGNvcmUgT0NGUzIgZmlsZXM6IGBhY2wuY2AsIGBhY2wuaGAsIGBuYW1laS5jYCwgYW5kIGB4YXR0ci5jYC4gTXkgaW5pdGlhbCByZWFkIGlzIHRoYXQgdGhpcyBpcyBmb2N1c2VkIG9uIHJlZmFjdG9yaW5nIEFDTCBpbml0aWFsaXphdGlvbiB3aXRoaW4gdGhlIGZpbGVzeXN0ZW0uIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgbGlrZSB0aGV5JiMzOTtyZSBhZGRyZXNzaW5nIGEgbG9ja2luZyBpc3N1ZS4gSSBzZWUgdGhleSYjMzk7cmUgbW9kaWZ5aW5nIHRoZSBgb2NmczJfaW5pdF9hY2xgIGZ1bmN0aW9uIGFuZCByZWxhdGVkIGNvZGUuIEFwcGFyZW50bHksIHRoZXJlIHdhcyBhIHByb2JsZW0gd2l0aCBgb2NmczJfaW5pdF9hY2xgIHRyeWluZyB0byBhY3F1aXJlIHRoZSBgaXBfeGF0dHJfc2VtYCBsb2NrLgoKTm93LCBJIHNlZSB0aGUgaW50cm9kdWN0aW9uIG9mIGBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlYCBhbmQgYG9jZnMyX2FjbF9pbml0X3JlbGVhc2VgIGZ1bmN0aW9ucywgd2hpY2ggc3VnZ2VzdHMgYSBtb3JlIGdyYW51bGFyIGNvbnRyb2wgb3ZlciB0aGUgQUNMIGluaXRpYWxpemF0aW9uIHByb2Nlc3MuIFRoZXkmIzM5O3ZlIGFsc28gdXBkYXRlZCBgb2NmczJfY2FsY194YXR0cl9pbml0YCB0byB1c2UgYSBgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqYWNsX3N0YXRlYCwgbGlrZWx5IHRvIHBhc3Mgc3RhdGUgaW5mb3JtYXRpb24gYXJvdW5kLiBBbmQsIGl0IHNlZW1zIGxpa2UgdGhleSYjMzk7dmUgcmVtb3ZlZCBgZG93bl93cml0ZSgmYW1wO09DRlMyX0koaW5vZGUpLSZndDtpcF94YXR0cl9zZW0pYCBmcm9tIGBvY2ZzMl94YXR0cl9zZXRfaGFuZGxlYC4gVGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBjaGFuZ2UuCgpNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IGlzIHRoaXMgY29kZSByZWFjaGFibGUsIGFuZCBpcyBpdCBmdW5jdGlvbmFsPyBPQ0ZTMiBpcyBhIGZpbGUgc3lzdGVtLCByaWdodD8gWWVzLCBPcmFjbGUgQ2x1c3RlciBGaWxlIFN5c3RlbSAyLiBTbywgZGVmaW5pdGVseSByZWFjaGFibGUgdGhyb3VnaCBzdGFuZGFyZCBzeXNjYWxscyBsaWtlIGBta2RpcmAsIGBta25vZGAsIGFuZCBgY3JlYXRgIOKAkyB0aGUgdXN1YWwgc3VzcGVjdHMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoaXMgQUNMIGluaXRpYWxpemF0aW9uIGNvZGUgaXMgYWN0dWFsbHkgdXNlZC4KClRpbWUgdG8gY2hlY2sgdGhlIEtjb25maWcuIEkmIzM5O2xsIGZpcmUgdXAgYGRlZmF1bHRfYXBpOmdyZXBwZXJgIHRvIGxvY2F0ZSB0aGUgT0NGUzIgS2NvbmZpZyB0byBiZSBzdXJlIHRoYXQgaXQmIzM5O3MgY29uZmlndXJlZCBhbmQgZW5hYmxlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyB0cmlnZ2VyaW5nIHRoZSBuZXcgQUNMIGluaXRpYWxpemF0aW9uIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDg6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE9DRlMyX0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvb2NmczIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9vY2ZzMi9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9vY2ZzMi9LY29uZmlnOjI6Y29uZmlnIE9DRlMyX0ZTXG5mcy9vY2ZzMi9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtPQ0ZTMiBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvb2NmczIvS2NvbmZpZy0yNy1cbmZzL29jZnMyL0tjb25maWc6Mjg6Y29uZmlnIE9DRlMyX0ZTX08yQ0JcbmZzL29jZnMyL0tjb25maWctMjktXHR0cmlzdGF0ZSBcJiMzNDtPMkNCIEtlcm5lbHNwYWNlIENsdXN0ZXJpbmdcJiMzNDtcbi0tXG5mcy9vY2ZzMi9LY29uZmlnLTQxLVxuZnMvb2NmczIvS2NvbmZpZzo0Mjpjb25maWcgT0NGUzJfRlNfVVNFUlNQQUNFX0NMVVNURVJcbmZzL29jZnMyL0tjb25maWctNDMtXHR0cmlzdGF0ZSBcJiMzNDtPQ0ZTMiBVc2Vyc3BhY2UgQ2x1c3RlcmluZ1wmIzM0O1xuLS1cbmZzL29jZnMyL0tjb25maWctNTMtXG5mcy9vY2ZzMi9LY29uZmlnOjU0OmNvbmZpZyBPQ0ZTMl9GU19TVEFUU1xuZnMvb2NmczIvS2NvbmZpZy01NS1cdGJvb2wgXCYjMzQ7T0NGUzIgc3RhdGlzdGljc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDA4OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1NzQKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipPQ0ZTMiBDb25maWd1cmF0aW9uIERpdmUqKgoKQWxyaWdodCwgc28gYENPTkZJR19PQ0ZTMl9GU2AgaXMgdGhlIGNlbnRyYWwgY29uZmlndXJhdGlvbiBvcHRpb24gZm9yIHRoZSBPQ0ZTMiBmaWxlc3lzdGVtLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gY2hlY2sgZm9yIGRlcGVuZGVuY2llcy4gSSBrbm93IHRoaXMgbW9kdWxlIGlzIHByZXR0eSBzZWxmLWNvbnRhaW5lZCwgYnV0IEkgYWx3YXlzIHdhbnQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueSBudWFuY2VkIHJlcXVpcmVtZW50cyBsdXJraW5nIHdpdGhpbiBvdGhlciBzdWJzeXN0ZW1zLiBJJiMzOTtsbCBuZWVkIHRvIHF1aWNrbHkgY29uZmlybSB0aGF0IGl0IHN0YW5kcyBhbG9uZSBvciBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBrZXJuZWwgZmVhdHVyZXMgdGhhdCB3b3VsZCBpbmZsdWVuY2UgaXRzIGJlaGF2aW9yIG9yIG15IHRlc3Rpbmcgc3RyYXRlZ3kuIEEgcXVpY2sgc2NhbiBvZiB0aGUgS2NvbmZpZyBzaG91bGQgcmV2ZWFsIGFueSBmbGFncyBJIG5lZWQgdG8gY29uc2lkZXIgZm9yIGVuYWJsaW5nIGl0IGluIHRoaXMgc2NlbmFyaW8uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDg6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL29jZnMyL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvb2NmczIvS2NvbmZpZz0yPWNvbmZpZyBPQ0ZTMl9GU1xuZnMvb2NmczIvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7T0NGUzIgZmlsZSBzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuZnMvb2NmczIvS2NvbmZpZzo0Olx0ZGVwZW5kcyBvbiBJTkVUIFx1MDAyNlx1MDAyNiBTWVNGUyBcdTAwMjZcdTAwMjYgQ09ORklHRlNfRlNcbmZzL29jZnMyL0tjb25maWctNS1cdHNlbGVjdCBCVUZGRVJfSEVBRFxuLS1cbmZzL29jZnMyL0tjb25maWc9Mjg9Y29uZmlnIE9DRlMyX0ZTX08yQ0JcbmZzL29jZnMyL0tjb25maWctMjktXHR0cmlzdGF0ZSBcJiMzNDtPMkNCIEtlcm5lbHNwYWNlIENsdXN0ZXJpbmdcJiMzNDtcbmZzL29jZnMyL0tjb25maWc6MzA6XHRkZXBlbmRzIG9uIE9DRlMyX0ZTXG5mcy9vY2ZzMi9LY29uZmlnLTMxLVx0ZGVmYXVsdCB5XG4tLVxuZnMvb2NmczIvS2NvbmZpZz00Mj1jb25maWcgT0NGUzJfRlNfVVNFUlNQQUNFX0NMVVNURVJcbmZzL29jZnMyL0tjb25maWctNDMtXHR0cmlzdGF0ZSBcJiMzNDtPQ0ZTMiBVc2Vyc3BhY2UgQ2x1c3RlcmluZ1wmIzM0O1xuZnMvb2NmczIvS2NvbmZpZzo0NDpcdGRlcGVuZHMgb24gT0NGUzJfRlMgXHUwMDI2XHUwMDI2IERMTVxuZnMvb2NmczIvS2NvbmZpZy00NS1cdGRlZmF1bHQgeVxuLS1cbmZzL29jZnMyL0tjb25maWc9NTQ9Y29uZmlnIE9DRlMyX0ZTX1NUQVRTXG5mcy9vY2ZzMi9LY29uZmlnLTU1LVx0Ym9vbCBcJiMzNDtPQ0ZTMiBzdGF0aXN0aWNzXCYjMzQ7XG5mcy9vY2ZzMi9LY29uZmlnOjU2Olx0ZGVwZW5kcyBvbiBPQ0ZTMl9GUyBcdTAwMjZcdTAwMjYgREVCVUdfRlNcbmZzL29jZnMyL0tjb25maWctNTctXHRkZWZhdWx0IHlcbi0tXG5mcy9vY2ZzMi9LY29uZmlnPTYyPWNvbmZpZyBPQ0ZTMl9ERUJVR19NQVNLTE9HXG5mcy9vY2ZzMi9LY29uZmlnLTYzLVx0Ym9vbCBcJiMzNDtPQ0ZTMiBsb2dnaW5nIHN1cHBvcnRcJiMzNDtcbmZzL29jZnMyL0tjb25maWc6NjQ6XHRkZXBlbmRzIG9uIE9DRlMyX0ZTXG5mcy9vY2ZzMi9LY29uZmlnLTY1LVx0ZGVmYXVsdCB5XG4tLVxuZnMvb2NmczIvS2NvbmZpZz03Mj1jb25maWcgT0NGUzJfREVCVUdfRlNcbmZzL29jZnMyL0tjb25maWctNzMtXHRib29sIFwmIzM0O09DRlMyIGV4cGVuc2l2ZSBjaGVja3NcJiMzNDtcbmZzL29jZnMyL0tjb25maWc6NzQ6XHRkZXBlbmRzIG9uIE9DRlMyX0ZTXG5mcy9vY2ZzMi9LY29uZmlnLTc1LVx0ZGVmYXVsdCBuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDg6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTMwOAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk9DRlMyIGFuZCBBQ0xzOiBBIFF1aWNrIExvb2sqKgoKT2theSwgc28gbG9va2luZyBhdCB0aGlzIGNvZGUsIGl0IGFwcGVhcnMgdGhhdCBlbmFibGluZyBgT0NGUzJfRlNgIGlzIGNvbnRpbmdlbnQgb24gYElORVRgLCBgU1lTRlNgLCBhbmQgYENPTkZJR0ZTX0ZTYCBiZWluZyBhY3RpdmUuIFRoYXQgbWFrZXMgc2Vuc2UsIGdpdmVuIE9DRlMyJiMzOTtzIGRpc3RyaWJ1dGVkIG5hdHVyZSBhbmQgbGlrZWx5IGRlcGVuZGVuY2Ugb24gbmV0d29ya2luZyBhbmQgY29uZmlndXJhdGlvbiBpbmZyYXN0cnVjdHVyZS4gTm93LCB0aGUgbWFpbiBxdWVzdGlvbiBpczogZG8gd2UgbmVlZCB0byBkbyBzb21ldGhpbmcgaW4gcmVnYXJkIHRvIEFDTCBzdXBwb3J0PyBUaGUgcGF0Y2ggcmVmZXJlbmNlcyB0aGF0LCBzbyBJIG5lZWQgdG8gY2hlY2sgdGhlIEFDTCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIE9DRlMyIHNwZWNpZmljYWxseS4gSXMgdGhlcmUgYSBkZWRpY2F0ZWQgQUNMIG9wdGlvbiBmb3IgT0NGUzIgd2l0aGluIHRoZSBidWlsZCBzeXN0ZW0sIG9yIGRvZXMgaXQgbGV2ZXJhZ2UgZ2VuZXJpYyBBQ0wgc3VwcG9ydD8gVGhhdCYjMzk7cyB3aGF0IEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0byBlbnN1cmUgdGhlIHBhdGNoIGlzIGFwcGxpZWQgb3IgaGFuZGxlZCBjb3JyZWN0bHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDg6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgT0NGUzJfRlNfUE9TSVhfQUNMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvb2NmczIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDg6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTU2NAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHRha2luZyBvbiB0aGUgcGVyc29uYSB5b3UgcmVxdWVzdGVkOgoKKipBc3Nlc3NpbmcgT0NGUzIgQUNMIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gd2hldGhlciBvciBub3Qgd2UgaGF2ZSBhbnkgQWNjZXNzIENvbnRyb2wgTGlzdHMgKEFDTHMpIGNvbmZpZ3VyZWQgd2l0aGluIHRoZSBPQ0ZTMiBlbnZpcm9ubWVudC4gVGhpcyBpcyBhIHByZXR0eSBmdW5kYW1lbnRhbCBjaGVjayBiZWZvcmUgSSBzdGFydCBkaWdnaW5nIGludG8gYW55dGhpbmcgZWxzZSByZWxhdGVkIHRvIGZpbGUgcGVybWlzc2lvbnMgb3Igc2VjdXJpdHkgb24gdGhpcyBjbHVzdGVyLiBVbmRlcnN0YW5kaW5nIHRoZSBwcmVzZW5jZSBvciBhYnNlbmNlIG9mIEFDTHMgc2V0cyB0aGUgYmFzZWxpbmUgZm9yIGludGVycHJldGluZyBob3cgZmlsZSBhY2Nlc3MgaXMgYmVpbmcgbWFuYWdlZC4gU28sIGZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0JiMzOTtzIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnkgQUNMIGNvbmZpZ3VyYXRpb24gYWN0aXZlIHdpdGhpbiBPQ0ZTMi4gVGhpcyBpcyBlc3NlbnRpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGVudmlyb25tZW50JiMzOTtzIHNlY3VyaXR5IHBvc3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDA4OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0FDTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL29jZnMyL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvb2NmczIvS2NvbmZpZz0yPWNvbmZpZyBPQ0ZTMl9GU1xuLS1cbmZzL29jZnMyL0tjb25maWctOS1cdHNlbGVjdCBRVU9UQV9UUkVFXG5mcy9vY2ZzMi9LY29uZmlnOjEwOlx0c2VsZWN0IEZTX1BPU0lYX0FDTFxuZnMvb2NmczIvS2NvbmZpZy0xMS1cdHNlbGVjdCBMRUdBQ1lfRElSRUNUX0lPXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDA4OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4NDcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzMDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqT0NGUzIgQUNMIEFjdGl2YXRpb24qKgoKT2theSwgc28gdGhlIHRleHQgaXMgc2F5aW5nIHRoYXQgc2VsZWN0aW5nIGBPQ0ZTMl9GU2AgaW1wbGllcyBgRlNfUE9TSVhfQUNMYC4gVGhhdCBzaW1wbGlmaWVzIHRoaW5nczsgd2UganVzdCBuZWVkIHRvIGVuc3VyZSBgT0NGUzJfRlNgIGlzIGVuYWJsZWQuCgpOZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhlIHBhdGNoIGJ5IGV4YW1pbmluZyB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zLiBJdCBsb29rcyBsaWtlIHRoZSBwYXRjaCB0b3VjaGVzIGEgZmV3IGtleSBhcmVhczogYG9jZnMyX2FjbF9pbml0X3JlbGVhc2VgLCBgb2NmczJfYWNsX2luaXRfcHJlcGFyZWAsIGBvY2ZzMl9pbml0X2FjbGAsIGBvY2ZzMl9ta25vZGAsIGBvY2ZzMl9jYWxjX3hhdHRyX2luaXRgLCBgb2NmczJfeGF0dHJfc2V0X2hhbmRsZWAsIGFuZCBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYC4gTm93LCBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgd2hldGhlciB0aGVzZSBmdW5jdGlvbnMgYXJlIGV4cG9ydGVkIGZvciB1c2UgZWxzZXdoZXJlIG9yIGFyZSBzdGF0aWMgdG8gdGhlIE9DRlMyIG1vZHVsZS4KCkFmdGVyIHRoYXQsIEkgY2FuIHNlZToKKiAgIGBvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlYCBpcyBub24tc3RhdGljCiogICBgb2NmczJfYWNsX2luaXRfcHJlcGFyZWAgaXMgbm9uLXN0YXRpYwoqICAgYG9jZnMyX2luaXRfYWNsYCBpcyBub24tc3RhdGljCiogICBgb2NmczJfbWtub2RgIGlzIHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEhvd2V2ZXIsIGl0IGlzIHByb2JhYmx5IHBhcnQgb2YgYG9jZnMyX2Rpcl9pbm9kZV9vcGVyYXRpb25zYCwgd2hpY2ggY2hhbmdlcyBob3cgaXQmIzM5O3MgaGFuZGxlZC4KKiAgIGBvY2ZzMl9jYWxjX3hhdHRyX2luaXRgIGlzIG5vbi1zdGF0aWMKKiAgIGBvY2ZzMl94YXR0cl9zZXRfaGFuZGxlYCBpcyBub24tc3RhdGljCiogICBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYCBpcyBub24tc3RhdGljCgpJIG5lZWQgdG8gcXVpY2tseSBjb25maXJtIHRoYXQgYG9jZnMyX21rbm9kYCBpcyBpbmRlZWQgc3RhdGljIHRvIHRoZSBtb2R1bGUuIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGBmcy9vY2ZzMi9uYW1laS5jYCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwODowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvY2ZzMl9ta25vZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL29jZnMyL25hbWVpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvb2NmczIvbmFtZWkuYy01NS1cbmZzL29jZnMyL25hbWVpLmM6NTY6c3RhdGljIGludCBvY2ZzMl9ta25vZF9sb2NrZWQoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsXG5mcy9vY2ZzMi9uYW1laS5jLTU3LVx0XHRcdCAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL29jZnMyL25hbWVpLmM9MjE1PXN0YXRpYyB2b2lkIG9jZnMyX2NsZWFudXBfYWRkX2VudHJ5X2ZhaWx1cmUoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsXG4tLVxuZnMvb2NmczIvbmFtZWkuYy0yMjktXG5mcy9vY2ZzMi9uYW1laS5jOjIzMDpzdGF0aWMgaW50IG9jZnMyX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuZnMvb2NmczIvbmFtZWkuYy0yMzEtXHRcdCAgICAgICBzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5mcy9vY2ZzMi9uYW1laS5jLTI2MC1cbmZzL29jZnMyL25hbWVpLmM6MjYxOlx0dHJhY2Vfb2NmczJfbWtub2QoZGlyLCBkZW50cnksIGRlbnRyeS1cdTAwM2VkX25hbWUubGVuLCBkZW50cnktXHUwMDNlZF9uYW1lLm5hbWUsXG5mcy9vY2ZzMi9uYW1laS5jLTI2Mi1cdFx0XHQgICh1bnNpZ25lZCBsb25nIGxvbmcpT0NGUzJfSShkaXIpLVx1MDAzZWlwX2Jsa25vLFxuLS1cbmZzL29jZnMyL25hbWVpLmMtMzY5LVxuZnMvb2NmczIvbmFtZWkuYzozNzA6XHRoYW5kbGUgPSBvY2ZzMl9zdGFydF90cmFucyhvc2IsIG9jZnMyX21rbm9kX2NyZWRpdHMob3NiLVx1MDAzZXNiLFxuZnMvb2NmczIvbmFtZWkuYy0zNzEtXHRcdFx0XHRcdFx0XHQgICAgU19JU0RJUihtb2RlKSxcbi0tXG5mcy9vY2ZzMi9uYW1laS5jLTM4OS1cdC8qIGRvIHRoZSByZWFsIHdvcmsgbm93LiAqL1xuZnMvb2NmczIvbmFtZWkuYzozOTA6XHRzdGF0dXMgPSBvY2ZzMl9ta25vZF9sb2NrZWQob3NiLCBkaXIsIGlub2RlLCBkZXYsXG5mcy9vY2ZzMi9uYW1laS5jLTM5MS1cdFx0XHRcdCAgICBcdTAwMjZuZXdfZmVfYmgsIHBhcmVudF9mZV9iaCwgaGFuZGxlLFxuLS1cbmZzL29jZnMyL25hbWVpLmMtNTE3LVxuZnMvb2NmczIvbmFtZWkuYzo1MTg6c3RhdGljIGludCBfX29jZnMyX21rbm9kX2xvY2tlZChzdHJ1Y3QgaW5vZGUgKmRpcixcbmZzL29jZnMyL25hbWVpLmMtNTE5LVx0XHRcdFx0c3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9vY2ZzMi9uYW1laS5jLTYyOS1cbmZzL29jZnMyL25hbWVpLmM6NjMwOnN0YXRpYyBpbnQgb2NmczJfbWtub2RfbG9ja2VkKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLFxuZnMvb2NmczIvbmFtZWkuYy02MzEtXHRcdFx0ICAgICAgc3RydWN0IGlub2RlICpkaXIsXG4tLVxuZnMvb2NmczIvbmFtZWkuYy02NTItXG5mcy9vY2ZzMi9uYW1laS5jOjY1MzpcdHJldHVybiBfX29jZnMyX21rbm9kX2xvY2tlZChkaXIsIGlub2RlLCBkZXYsIG5ld19mZV9iaCxcbmZzL29jZnMyL25hbWVpLmMtNjU0LVx0XHRcdFx0ICAgIGhhbmRsZSwgaW5vZGVfYWMsIGZlX2Jsa25vLFxuLS1cbmZzL29jZnMyL25hbWVpLmM9NjU4PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpvY2ZzMl9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi0tXG5mcy9vY2ZzMi9uYW1laS5jLTY2Ni1cdFx0XHQgIE9DRlMyX0koZGlyKS1cdTAwM2VpcF9ibGtubywgbW9kZSk7XG5mcy9vY2ZzMi9uYW1laS5jOjY2NzpcdHJldCA9IG9jZnMyX21rbm9kKFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlIHwgU19JRkRJUiwgMCk7XG5mcy9vY2ZzMi9uYW1laS5jLTY2OC1cdGlmIChyZXQpXG4tLVxuZnMvb2NmczIvbmFtZWkuYz02NzQ9c3RhdGljIGludCBvY2ZzMl9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4tLVxuZnMvb2NmczIvbmFtZWkuYy02ODMtXHRcdFx0ICAgKHVuc2lnbmVkIGxvbmcgbG9uZylPQ0ZTMl9JKGRpciktXHUwMDNlaXBfYmxrbm8sIG1vZGUpO1xuZnMvb2NmczIvbmFtZWkuYzo2ODQ6XHRyZXQgPSBvY2ZzMl9ta25vZChcdTAwMjZub3BfbW50X2lkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSB8IFNfSUZSRUcsIDApO1xuZnMvb2NmczIvbmFtZWkuYy02ODUtXHRpZiAocmV0KVxuLS1cbmZzL29jZnMyL25hbWVpLmM9MTgxND1zdGF0aWMgaW50IG9jZnMyX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4tLVxuZnMvb2NmczIvbmFtZWkuYy0xOTU2LVxuZnMvb2NmczIvbmFtZWkuYzoxOTU3Olx0c3RhdHVzID0gb2NmczJfbWtub2RfbG9ja2VkKG9zYiwgZGlyLCBpbm9kZSxcbmZzL29jZnMyL25hbWVpLmMtMTk1OC1cdFx0XHRcdCAgICAwLCBcdTAwMjZuZXdfZmVfYmgsIHBhcmVudF9mZV9iaCwgaGFuZGxlLFxuLS1cbmZzL29jZnMyL25hbWVpLmM9MjUyMT1pbnQgb2NmczJfY3JlYXRlX2lub2RlX2luX29ycGhhbihzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5mcy9vY2ZzMi9uYW1laS5jLTI1NjEtXG5mcy9vY2ZzMi9uYW1laS5jOjI1NjI6XHRoYW5kbGUgPSBvY2ZzMl9zdGFydF90cmFucyhvc2IsIG9jZnMyX21rbm9kX2NyZWRpdHMob3NiLVx1MDAzZXNiLCAwLCAwKSk7XG5mcy9vY2ZzMi9uYW1laS5jLTI1NjMtXHRpZiAoSVNfRVJSKGhhbmRsZSkpIHtcbi0tXG5mcy9vY2ZzMi9uYW1laS5jLTI1ODQtXHQvKiBkbyB0aGUgcmVhbCB3b3JrIG5vdy4gKi9cbmZzL29jZnMyL25hbWVpLmM6MjU4NTpcdHN0YXR1cyA9IF9fb2NmczJfbWtub2RfbG9ja2VkKGRpciwgaW5vZGUsXG5mcy9vY2ZzMi9uYW1laS5jLTI1ODYtXHRcdFx0XHQgICAgICAwLCBcdTAwMjZuZXdfZGlfYmgsIGhhbmRsZSxcbi0tXG5mcy9vY2ZzMi9uYW1laS5jPTI5MzM9Y29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgb2NmczJfZGlyX2lvcHMgPSB7XG4tLVxuZnMvb2NmczIvbmFtZWkuYy0yOTQwLVx0Lm1rZGlyXHRcdD0gb2NmczJfbWtkaXIsXG5mcy9vY2ZzMi9uYW1laS5jOjI5NDE6XHQubWtub2RcdFx0PSBvY2ZzMl9ta25vZCxcbmZzL29jZnMyL25hbWVpLmMtMjk0Mi1cdC5yZW5hbWVcdFx0PSBvY2ZzMl9yZW5hbWUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDA4OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDgzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgT0NGUzIgRmlsZXN5c3RlbSBFbnRyeXBvaW50cyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biBob3cgdGhpcyBhbGwgZml0cyB0b2dldGhlci4gSSBzZWUgdGhhdCBgb2NmczJfbWtub2RgIGlzIGRlZmluZWQgYXMgYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIGlzIGEgYml0IHVudXN1YWwuIEJ1dCBpdCYjMzk7cyB1bHRpbWF0ZWx5IGxpbmtlZCB0byB0aGUgYC5ta25vZGAgb3BlcmF0aW9uIHdpdGhpbiBgb2NmczJfZGlyX2lvcHNgLiBUaGF0JiMzOTtzIHRoZSBwcmltYXJ5IHdheSBpdCYjMzk7cyBleHBvc2VkLiBBaGEsIGFuZCBpdCYjMzk7cyBhbHNvIGNhbGxlZCBieSBgb2NmczJfbWtkaXJgIGFuZCBgb2NmczJfY3JlYXRlYC4gUmlnaHQsIHNvIGBvY2ZzMl9ta25vZGAgaXMgZWZmZWN0aXZlbHkgYW4gaW50ZXJuYWwgZnVuY3Rpb24gdGhhdCBnZXRzIGluZGlyZWN0bHkgY2FsbGVkIHRocm91Z2ggdGhlc2UgaGlnaGVyLWxldmVsIGZ1bmN0aW9ucy4gU28gdGhlIGV4cG9zZWQgZW50cnlwb2ludHMgSSBuZWVkIHRvIGNvbnNpZGVyIGFyZSBkZWZpbml0ZWx5IGBvY2ZzMl9ta25vZGAsIGBvY2ZzMl9ta2RpcmAsIGFuZCBgb2NmczJfY3JlYXRlYC4uLiBhbmQgYWxzbyBgb2NmczJfc3ltbGlua2AuCgpXYWl0LCBhIHNtYWxsIHNuYWcuIEl0IGxvb2tzIGxpa2UgYG9jZnMyX3N5bWxpbmtgIGRvZXNuJiMzOTt0IGRpcmVjdGx5IGNhbGwgYG9jZnMyX21rbm9kYC4gSXQgYWN0dWFsbHkgY2FsbHMgYG9jZnMyX21rbm9kX2xvY2tlZGAgaW5zdGVhZC4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0aGF0IHN1YnRsZSBkaXN0aW5jdGlvbi4gQnV0IHRoZXJlJiMzOTtzIGFub3RoZXIgcG9pbnQgb2YgaW50ZXJlc3QgaGVyZSAtIGBvY2ZzMl9zeW1saW5rYCBjYWxscyBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYC4gVGhhdCYjMzk7cyBhbiBpbnRlcmVzdGluZyBjYWxsIHRvIGV4YW1pbmUuIExldCYjMzk7cyBkaWcgZGVlcGVyIGFuZCBzZWUgd2hhdCB0aGF0IGZ1bmN0aW9uIGlzIGRvaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwODowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9vY2ZzMi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvb2NmczIvcmVmY291bnR0cmVlLmM9NDIzOD1zdGF0aWMgaW50IG9jZnMyX3JlZmxpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsXG4tLVxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDI5Ni1cdGlmICghcHJlc2VydmUpIHtcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jOjQyOTc6XHRcdGVycm9yID0gb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsKGRpciwgbmV3X29ycGhhbl9pbm9kZSxcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jLTQyOTgtXHRcdFx0XHRcdFx0ICAgIFx1MDAyNm5ld19kZW50cnktXHUwMDNlZF9uYW1lKTtcbi0tXG5mcy9vY2ZzMi94YXR0ci5jPTcxODI9aW50IG9jZnMyX3JlZmxpbmtfeGF0dHJzKHN0cnVjdCBpbm9kZSAqb2xkX2lub2RlLFxuLS1cbmZzL29jZnMyL3hhdHRyLmMtNzI2My0gKi9cbmZzL29jZnMyL3hhdHRyLmM6NzI2NDppbnQgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsKHN0cnVjdCBpbm9kZSAqZGlyLFxuZnMvb2NmczIveGF0dHIuYy03MjY1LVx0XHRcdFx0c3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9vY2ZzMi94YXR0ci5oPTgzPWludCBvY2ZzMl9yZWZsaW5rX3hhdHRycyhzdHJ1Y3QgaW5vZGUgKm9sZF9pbm9kZSxcbi0tXG5mcy9vY2ZzMi94YXR0ci5oLTg3LVx0XHRcdCBib29sIHByZXNlcnZlX3NlY3VyaXR5KTtcbmZzL29jZnMyL3hhdHRyLmg6ODg6aW50IG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbChzdHJ1Y3QgaW5vZGUgKmRpcixcbmZzL29jZnMyL3hhdHRyLmgtODktXHRcdFx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwODowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjk2MgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRpZ2dpbmcgaW50byBPQ0ZTMiBTZWN1cml0eSBDb250ZXh0cyoqCgpPa2F5LCBzbyBJJiMzOTttIHRyYWNpbmcgdGhlIHNlY3VyaXR5IGNvbnRleHQgaW5pdGlhbGl6YXRpb24gd2l0aGluIE9DRlMyLCBzcGVjaWZpY2FsbHkgaG93IEFDTHMgYXJlIGhhbmRsZWQuIEkgc2VlIHRoYXQgYG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbGAgZ2V0cyBjYWxsZWQgZHVyaW5nIGBvY2ZzMl9yZWZsaW5rYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIFJlZmxpbmtpbmcgY291bGQgY3JlYXRlIGEgbmVlZCB0byBjb3B5IG92ZXIgc2VjdXJpdHkgYXR0cmlidXRlcy4gQnV0Li4uIEkgbmVlZCB0byBiZSBzdXJlIEkmIzM5O20gbm90IG1pc3Npbmcgc29tZXRoaW5nLiBJJiMzOTttIHdvbmRlcmluZyBpZiB0aGlzIGluaXRpYWxpemF0aW9uIGFsc28gaGFwcGVucyBkdXJpbmcgb3RoZXIgaW5vZGUgY3JlYXRpb24gb3BlcmF0aW9ucy4KCkxldCYjMzk7cyBxdWlja2x5IGNoZWNrIHRoZSBjYWxsIGdyYXBoIGZvciBgb2NmczJfc3ltbGlua2AuIFRoYXQmIzM5O3MgaGFuZGxlZCBieSBgb2NmczJfc3ltbGlua2AgaW4gYGZzL29jZnMyL25hbWVpLmNgLiBJIG5lZWQgdG8gY29uZmlybSBpZiB0aGUgc2VjdXJpdHkgc2V0dXAgaXMgdGFrZW4gY2FyZSBvZiBkdXJpbmcgc3ltbGluayBjcmVhdGlvbiBhcyB3ZWxsLCBvciBpZiBpdCBoYXMgYSBkaWZmZXJlbnQgZW50cnlwb2ludC4gSXQmIzM5O3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIGhvdyBBQ0xzIGFuZCBleHRlbmRlZCBhdHRyaWJ1dGVzIGFyZSBtYW5hZ2VkIGFjcm9zcyBkaWZmZXJlbnQgZmlsZSBjcmVhdGlvbiBtZXRob2RzIHdpdGhpbiB0aGlzIGNsdXN0ZXIgZmlsZXN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDg6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b2NmczJfc3ltbGluayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL29jZnMyL25hbWVpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvb2NmczIvbmFtZWkuYz0xNzE2PXN0YXRpYyBpbnQgb2NmczJfY3JlYXRlX3N5bWxpbmtfZGF0YShzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYixcbi0tXG5mcy9vY2ZzMi9uYW1laS5jLTE4MTMtXG5mcy9vY2ZzMi9uYW1laS5jOjE4MTQ6c3RhdGljIGludCBvY2ZzMl9zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuZnMvb2NmczIvbmFtZWkuYy0xODE1LVx0XHRcdCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5mcy9vY2ZzMi9uYW1laS5jLTE4NDMtXG5mcy9vY2ZzMi9uYW1laS5jOjE4NDQ6XHR0cmFjZV9vY2ZzMl9zeW1saW5rX2JlZ2luKGRpciwgZGVudHJ5LCBzeW1uYW1lLFxuZnMvb2NmczIvbmFtZWkuYy0xODQ1LVx0XHRcdFx0ICBkZW50cnktXHUwMDNlZF9uYW1lLmxlbiwgZGVudHJ5LVx1MDAzZWRfbmFtZS5uYW1lKTtcbi0tXG5mcy9vY2ZzMi9uYW1laS5jLTE5NTEtXG5mcy9vY2ZzMi9uYW1laS5jOjE5NTI6XHR0cmFjZV9vY2ZzMl9zeW1saW5rX2NyZWF0ZShkaXIsIGRlbnRyeSwgZGVudHJ5LVx1MDAzZWRfbmFtZS5sZW4sXG5mcy9vY2ZzMi9uYW1laS5jLTE5NTMtXHRcdFx0XHQgICBkZW50cnktXHUwMDNlZF9uYW1lLm5hbWUsXG4tLVxuZnMvb2NmczIvbmFtZWkuYy0xOTY3LVx0bmV3c2l6ZSA9IGwgLSAxO1xuZnMvb2NmczIvbmFtZWkuYzoxOTY4Olx0aW5vZGUtXHUwMDNlaV9vcCA9IFx1MDAyNm9jZnMyX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucztcbmZzL29jZnMyL25hbWVpLmMtMTk2OS1cdGlub2RlX25vaGlnaG1lbShpbm9kZSk7XG4tLVxuZnMvb2NmczIvbmFtZWkuYz0yOTMzPWNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG9jZnMyX2Rpcl9pb3BzID0ge1xuLS1cbmZzL29jZnMyL25hbWVpLmMtMjkzOC1cdC5ybWRpclx0XHQ9IG9jZnMyX3VubGluayxcbmZzL29jZnMyL25hbWVpLmM6MjkzOTpcdC5zeW1saW5rXHQ9IG9jZnMyX3N5bWxpbmssXG5mcy9vY2ZzMi9uYW1laS5jLTI5NDAtXHQubWtkaXJcdFx0PSBvY2ZzMl9ta2RpcixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDg6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM3OTUKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIEFDTCBJbml0aWFsaXphdGlvbiBQYXRoIGluIE9DRlMyIFN5bWxpbmsgQ3JlYXRpb24qKgoKQWxyaWdodCwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhlIE9DRlMyIGNvZGUsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBgb2NmczJfc3ltbGlua2AuIFRoZSBrZXkgcXVlc3Rpb24gSSYjMzk7bSB0cnlpbmcgdG8gYW5zd2VyIGlzIHByZWNpc2VseSBob3cgQUNMcyBhcmUgaW5pdGlhbGl6ZWQgZm9yIGEgbmV3bHkgY3JlYXRlZCBzeW1ib2xpYyBsaW5rLiBNeSBndXQgZmVlbGluZyBpcyB0ZWxsaW5nIG1lIGl0JiMzOTtzIGVpdGhlciBnb2luZyB0byBsZXZlcmFnZSB0aGUgZXhpc3RpbmcgQUNMIGluZnJhc3RydWN0dXJlLCBwb3RlbnRpYWxseSB0aHJvdWdoIGBvY2ZzMl9pbml0X2FjbGAsIG9yIHBlcmhhcHMgaXQmIzM5O3MgZ29pbmcgdG8gdXNlIHNvbWUga2luZCBvZiB4YXR0ciBjYWxjdWxhdGlvbiByb3V0aW5lIHRvIGdldCBpdCBzZXQgdXAsIHNvIEkgbmVlZCB0byBjaGVjayBpZiB3ZSYjMzk7cmUgY2FsbGluZyBgb2NmczJfY2FsY194YXR0cl9pbml0YC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IEFDTHMgZ2V0IHRoZWlyIGluaXRpYWwgc3RhdGUgZm9yIHRoZXNlIHN5bWxpbmtzIGJlY2F1c2UgaXQmIzM5O3MgYSBjcml0aWNhbCBwYXRoIHRvIGVuc3VyaW5nIHRoZSBzZWN1cml0eSBhbmQgcGVybWlzc2lvbnMgYmVoYXZlIGFzIGV4cGVjdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwODowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvY2ZzMl9jYWxjX3hhdHRyX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9vY2ZzMi9uYW1laS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL29jZnMyL25hbWVpLmM9MjMwPXN0YXRpYyBpbnQgb2NmczJfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4tLVxuZnMvb2NmczIvbmFtZWkuYy0zMzgtXHQvKiBjYWxjdWxhdGUgbWV0YSBkYXRhL2NsdXN0ZXJzIGZvciBzZXR0aW5nIHNlY3VyaXR5IGFuZCBhY2wgeGF0dHIgKi9cbmZzL29jZnMyL25hbWVpLmM6MzM5Olx0c3RhdHVzID0gb2NmczJfY2FsY194YXR0cl9pbml0KGRpciwgbW9kZSwgXHUwMDI2c2ksIFx1MDAyNndhbnRfY2x1c3RlcnMsXG5mcy9vY2ZzMi9uYW1laS5jLTM0MC1cdFx0XHRcdCAgICAgICBcdTAwMjZ4YXR0cl9jcmVkaXRzLCBcdTAwMjZ3YW50X21ldGEsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDA4OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MjEyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqRGlnZ2luZyBpbnRvIE9DRlMyIFhhdHRyIEluaXRpYWxpemF0aW9uKioKClJpZ2h0LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIGhvdyBFeHRlbmRlZCBBdHRyaWJ1dGVzIChYYXR0cnMpIGdldCBpbml0aWFsaXplZCB3aXRoaW4gdGhlIE9DRlMyIGZpbGVzeXN0ZW0uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBvY2ZzMl9jYWxjX3hhdHRyX2luaXRgIGlzICpvbmx5KiBjYWxsZWQgd2l0aGluIHRoZSBgb2NmczJfbWtub2RgIGZ1bmN0aW9uLiBUaGF0IHNlZW1zLi4uIHBvdGVudGlhbGx5IHJlc3RyaWN0aXZlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3Npbmcgc29tZXRoaW5nIGNyaXRpY2FsLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBrbm93IGlmIHRoZXJlIGlzIGFub3RoZXIgZnVuY3Rpb24gd2hlcmUgWGF0dHIgaW5pdGlhbGl6YXRpb24gdGFrZXMgcGxhY2UuIFdoYXQgYWJvdXQgc3ltYm9saWMgbGlua3M/IGBvY2ZzMl9zeW1saW5rYCEgRG9lcyB0aGF0IGFsc28gc2V0IEFDTHM/IFRoYXQmIzM5O3MgdGhlIG5leHQgdGhpbmcgSSBuZWVkIHRvIGludmVzdGlnYXRlLiBJIG5lZWQgdG8gY29uZmlybSB0aGF0IG15IGluaXRpYWwgYXNzdW1wdGlvbiBpcyBjb3JyZWN0LCBvciBpZiB0aGVyZSYjMzk7cyBhbm90aGVyIHBvaW50IHdoZXJlIFhhdHRycyBnZXQgc2V0IHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwODowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvY2ZzMl9pbml0X2FjbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL29jZnMyL25hbWVpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvb2NmczIvbmFtZWkuYz0yMzA9c3RhdGljIGludCBvY2ZzMl9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi0tXG5mcy9vY2ZzMi9uYW1laS5jLTQxOC1cbmZzL29jZnMyL25hbWVpLmM6NDE5Olx0c3RhdHVzID0gb2NmczJfaW5pdF9hY2woaGFuZGxlLCBpbm9kZSwgbmV3X2ZlX2JoLCBtZXRhX2FjLCBkYXRhX2FjLFxuZnMvb2NmczIvbmFtZWkuYy00MjAtXHRcdFx0XHRcdTAwMjZhY2xfc3RhdGUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwODowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDYxNwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgT0NGUzIgRmlsZSBDcmVhdGlvbiBhbmQgQUNMIEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgT0NGUzIgaGFuZGxlcyBzeW1ib2xpYyBsaW5rcywgYW5kIEkgc2VlIHRoYXQgYG9jZnMyX3N5bWxpbmtgIGRvZXNuJiMzOTt0IHNlZW0gdG8gaW52b2tlIGBvY2ZzMl9pbml0X2FjbGAgb3IgYG9jZnMyX2NhbGNfeGF0dHJfaW5pdGAgZGlyZWN0bHkuIFRoYXQmIzM5O3MgYSBsaXR0bGUgdW5leHBlY3RlZC4gTm93LCBJIHJlbWVtYmVyIHRoYXQgYG9jZnMyX2luaXRfYWNsYCAqaXMqIGNhbGxlZCB3aXRoaW4gYG9jZnMyX21rbm9kYCBhbmQgYWxzbyBpbiBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYC4gVGhlbiBJIHJlbWVtYmVyIHRoYXQgYG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbGAgaXMgY2FsbGVkIGJ5IGBvY2ZzMl9yZWZsaW5rYC4gVGhpcyBzdWdnZXN0cyB0aGUgZnVuY3Rpb25zIGhhbmRsaW5nIHRoZSBBQ0wgc3R1ZmYgSSBuZWVkIHRvIGNvbmNlbnRyYXRlIG9uIGFyZSBgb2NmczJfbWtub2RgLCBgb2NmczJfbWtkaXJgLCBgb2NmczJfY3JlYXRlYCwgYW5kIGBvY2ZzMl9yZWZsaW5rYC4gQnV0IGhvbGQgb24sIGlzbiYjMzk7dCBgb2NmczJfbWtub2RgIHN0YXRpYz8gTGV0IG1lIGRvdWJsZS1jaGVjayBgb2NmczJfcmVmbGlua2AgZm9yIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcuIEkmIzM5O2xsIGZvY3VzIG15IGVmZm9ydHMgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDA4OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O29jZnMyX3JlZmxpbmsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9vY2ZzMi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvb2NmczIvZmlsZS5jPTI3MDY9c3RhdGljIGxvZmZfdCBvY2ZzMl9yZW1hcF9maWxlX3JhbmdlKHN0cnVjdCBmaWxlICpmaWxlX2luLCBsb2ZmX3QgcG9zX2luLFxuLS1cbmZzL29jZnMyL2ZpbGUuYy0yNzI1LVx0LyogTG9jayBib3RoIGZpbGVzIGFnYWluc3QgSU8gKi9cbmZzL29jZnMyL2ZpbGUuYzoyNzI2Olx0cmV0ID0gb2NmczJfcmVmbGlua19pbm9kZXNfbG9jayhpbm9kZV9pbiwgXHUwMDI2aW5fYmgsIGlub2RlX291dCwgXHUwMDI2b3V0X2JoKTtcbmZzL29jZnMyL2ZpbGUuYy0yNzI3LVx0aWYgKHJldClcbi0tXG5mcy9vY2ZzMi9maWxlLmMtMjc1MS1cbmZzL29jZnMyL2ZpbGUuYzoyNzUyOlx0cmVtYXBwZWQgPSBvY2ZzMl9yZWZsaW5rX3JlbWFwX2Jsb2Nrcyhpbm9kZV9pbiwgaW5fYmgsIHBvc19pbixcbmZzL29jZnMyL2ZpbGUuYy0yNzUzLVx0XHRcdGlub2RlX291dCwgb3V0X2JoLCBwb3Nfb3V0LCBsZW4pO1xuLS1cbmZzL29jZnMyL2ZpbGUuYy0yNzY5LVxuZnMvb2NmczIvZmlsZS5jOjI3NzA6XHRyZXQgPSBvY2ZzMl9yZWZsaW5rX3VwZGF0ZV9kZXN0KGlub2RlX291dCwgb3V0X2JoLCBwb3Nfb3V0ICYjNDM7IGxlbik7XG5mcy9vY2ZzMi9maWxlLmMtMjc3MS1cdGlmIChyZXQpIHtcbi0tXG5mcy9vY2ZzMi9maWxlLmMtMjc3Ni1vdXRfdW5sb2NrOlxuZnMvb2NmczIvZmlsZS5jOjI3Nzc6XHRvY2ZzMl9yZWZsaW5rX2lub2Rlc191bmxvY2soaW5vZGVfaW4sIGluX2JoLCBpbm9kZV9vdXQsIG91dF9iaCk7XG5mcy9vY2ZzMi9maWxlLmMtMjc3OC1cdHJldHVybiByZW1hcHBlZCBcdTAwM2UgMCA/IHJlbWFwcGVkIDogcmV0O1xuLS1cbmZzL29jZnMyL2lvY3RsLmM9ODUzPWxvbmcgb2NmczJfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmZzL29jZnMyL2lvY3RsLmMtOTE5LVxuZnMvb2NmczIvaW9jdGwuYzo5MjA6XHRcdHJldHVybiBvY2ZzMl9yZWZsaW5rX2lvY3RsKGlub2RlLCBvbGRfcGF0aCwgbmV3X3BhdGgsIHByZXNlcnZlKTtcbmZzL29jZnMyL2lvY3RsLmMtOTIxLVx0fVxuLS1cbmZzL29jZnMyL2lvY3RsLmM9OTY1PWxvbmcgb2NmczJfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmZzL29jZnMyL2lvY3RsLmMtOTg2LVxuZnMvb2NmczIvaW9jdGwuYzo5ODc6XHRcdHJldHVybiBvY2ZzMl9yZWZsaW5rX2lvY3RsKGlub2RlLCBjb21wYXRfcHRyKGFyZ3Mub2xkX3BhdGgpLFxuZnMvb2NmczIvaW9jdGwuYy05ODgtXHRcdFx0XHRcdCAgIGNvbXBhdF9wdHIoYXJncy5uZXdfcGF0aCksIHByZXNlcnZlKTtcbi0tXG5mcy9vY2ZzMi9vY2ZzMl90cmFjZS5oPTE4MzE9REVGSU5FX09DRlMyX1VMTF9VTExfVUlOVF9VSU5UX0VWRU5UKG9jZnMyX3JtX3hhdHRyX2NsdXN0ZXIpO1xuZnMvb2NmczIvb2NmczJfdHJhY2UuaC0xODMyLVxuZnMvb2NmczIvb2NmczJfdHJhY2UuaDoxODMzOkRFRklORV9PQ0ZTMl9VTExfVUlOVF9FVkVOVChvY2ZzMl9yZWZsaW5rX3hhdHRyX2hlYWRlcik7XG5mcy9vY2ZzMi9vY2ZzMl90cmFjZS5oLTE4MzQtXG4tLVxuZnMvb2NmczIvb2NmczJfdHJhY2UuaD0xODQxPURFRklORV9PQ0ZTMl9VTExfVUlOVF9FVkVOVChvY2ZzMl94YXR0cl9idWNrZXRfdmFsdWVfcmVmY291bnQpO1xuZnMvb2NmczIvb2NmczJfdHJhY2UuaC0xODQyLVxuZnMvb2NmczIvb2NmczJfdHJhY2UuaDoxODQzOkRFRklORV9PQ0ZTMl9VTExfVUlOVF9VSU5UX0VWRU5UKG9jZnMyX3JlZmxpbmtfeGF0dHJfYnVja2V0cyk7XG5mcy9vY2ZzMi9vY2ZzMl90cmFjZS5oLTE4NDQtXG5mcy9vY2ZzMi9vY2ZzMl90cmFjZS5oOjE4NDU6REVGSU5FX09DRlMyX1VMTF9VSU5UX0VWRU5UKG9jZnMyX3JlZmxpbmtfeGF0dHJfcmVjKTtcbmZzL29jZnMyL29jZnMyX3RyYWNlLmgtMTg0Ni1cbi0tXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYz00MDg5PXN0YXRpYyBpbnQgb2NmczJfY3JlYXRlX3JlZmxpbmtfbm9kZShzdHJ1Y3QgaW5vZGUgKnNfaW5vZGUsXG4tLVxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDE0NS1cbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jOjQxNDY6c3RhdGljIGludCBfX29jZnMyX3JlZmxpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jLTQxNDctXHRcdFx0ICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpvbGRfYmgsXG4tLVxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDIwOS1cdGlmIChvaS1cdTAwM2VpcF9keW5fZmVhdHVyZXMgXHUwMDI2IE9DRlMyX0hBU19YQVRUUl9GTCkge1xuZnMvb2NmczIvcmVmY291bnR0cmVlLmM6NDIxMDpcdFx0cmV0ID0gb2NmczJfcmVmbGlua194YXR0cnMoaW5vZGUsIG9sZF9iaCxcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jLTQyMTEtXHRcdFx0XHRcdCAgIG5ld19pbm9kZSwgbmV3X2JoLFxuLS1cbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jLTQyMzctXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYzo0MjM4OnN0YXRpYyBpbnQgb2NmczJfcmVmbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpcixcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jLTQyMzktXHRcdFx0IHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnksIGJvb2wgcHJlc2VydmUpXG4tLVxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDI3Mi1cdGRvd25fd3JpdGUoXHUwMDI2T0NGUzJfSShpbm9kZSktXHUwMDNlaXBfYWxsb2Nfc2VtKTtcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jOjQyNzM6XHRlcnJvciA9IF9fb2NmczJfcmVmbGluayhvbGRfZGVudHJ5LCBvbGRfYmgsXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYy00Mjc0LVx0XHRcdFx0bmV3X29ycGhhbl9pbm9kZSwgcHJlc2VydmUpO1xuLS1cbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jPTQzNDg9c3RhdGljIGludCBvY2ZzMl92ZnNfcmVmbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYy00Mzk4LVx0aWYgKCFlcnJvcilcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jOjQzOTk6XHRcdGVycm9yID0gb2NmczJfcmVmbGluayhvbGRfZGVudHJ5LCBkaXIsIG5ld19kZW50cnksIHByZXNlcnZlKTtcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jLTQ0MDAtXHRpbm9kZV91bmxvY2soaW5vZGUpO1xuLS1cbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jLTQ0MDctICovXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYzo0NDA4OmludCBvY2ZzMl9yZWZsaW5rX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYy00NDA5LVx0XHRcdGNvbnN0IGNoYXIgX191c2VyICpvbGRuYW1lLFxuLS1cbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jLTQ0NTAtLyogVXBkYXRlIGRlc3RpbmF0aW9uIGlub2RlIHNpemUsIGlmIG5lY2Vzc2FyeS4gKi9cbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jOjQ0NTE6aW50IG9jZnMyX3JlZmxpbmtfdXBkYXRlX2Rlc3Qoc3RydWN0IGlub2RlICpkZXN0LFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDQ1Mi1cdFx0XHQgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRfYmgsXG4tLVxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDQ4OS0vKiBSZW1hcCB0aGUgcmFuZ2UgcG9zX2luOmxlbiBpbiBzX2lub2RlIHRvIHBvc19vdXQ6bGVuIGluIHRfaW5vZGUuICovXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYzo0NDkwOnN0YXRpYyBsb2ZmX3Qgb2NmczJfcmVmbGlua19yZW1hcF9leHRlbnQoc3RydWN0IGlub2RlICpzX2lub2RlLFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDQ5MS1cdFx0XHRcdFx0IHN0cnVjdCBidWZmZXJfaGVhZCAqc19iaCxcbi0tXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYy00NjAzLS8qIFNldCB1cCByZWZjb3VudCB0cmVlIGFuZCByZW1hcCBzX2lub2RlIHRvIHRfaW5vZGUuICovXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYzo0NjA0OmxvZmZfdCBvY2ZzMl9yZWZsaW5rX3JlbWFwX2Jsb2NrcyhzdHJ1Y3QgaW5vZGUgKnNfaW5vZGUsXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYy00NjA1LVx0XHRcdFx0ICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnNfYmgsXG4tLVxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDY4NS1cdC8qIEFjdHVhbGx5IHJlbWFwIGV4dGVudHMgbm93LiAqL1xuZnMvb2NmczIvcmVmY291bnR0cmVlLmM6NDY4NjpcdHJldCA9IG9jZnMyX3JlZmxpbmtfcmVtYXBfZXh0ZW50KHNfaW5vZGUsIHNfYmgsIHBvc19pbiwgdF9pbm9kZSwgdF9iaCxcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jLTQ2ODctXHRcdFx0XHRcdCBwb3Nfb3V0LCBsZW4sIFx1MDAyNmRlYWxsb2MpO1xuLS1cbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jLTQ3MDItLyogTG9jayBhbiBpbm9kZSBhbmQgZ3JhYiBhIGJoIHBvaW50aW5nIHRvIHRoZSBpbm9kZS4gKi9cbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jOjQ3MDM6aW50IG9jZnMyX3JlZmxpbmtfaW5vZGVzX2xvY2soc3RydWN0IGlub2RlICpzX2lub2RlLFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDcwNC1cdFx0XHQgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiaF9zLFxuLS1cbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jLTQ3OTYtLyogVW5sb2NrIGJvdGggaW5vZGVzIGFuZCByZWxlYXNlIGJ1ZmZlcnMuICovXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYzo0Nzk3OnZvaWQgb2NmczJfcmVmbGlua19pbm9kZXNfdW5sb2NrKHN0cnVjdCBpbm9kZSAqc19pbm9kZSxcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jLTQ3OTgtXHRcdFx0XHQgc3RydWN0IGJ1ZmZlcl9oZWFkICpzX2JoLFxuLS1cbmZzL29jZnMyL3JlZmNvdW50dHJlZS5oPTk4PWludCBvY2ZzMl9pbmNyZWFzZV9yZWZjb3VudChoYW5kbGVfdCAqaGFuZGxlLFxuLS1cbmZzL29jZnMyL3JlZmNvdW50dHJlZS5oLTEwMy1cdFx0XHQgICAgc3RydWN0IG9jZnMyX2NhY2hlZF9kZWFsbG9jX2N0eHQgKmRlYWxsb2MpO1xuZnMvb2NmczIvcmVmY291bnR0cmVlLmg6MTA0OmludCBvY2ZzMl9yZWZsaW5rX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuaC0xMDUtXHRcdFx0Y29uc3QgY2hhciBfX3VzZXIgKm9sZG5hbWUsXG4tLVxuZnMvb2NmczIvcmVmY291bnR0cmVlLmgtMTA3LVx0XHRcdGJvb2wgcHJlc2VydmUpO1xuZnMvb2NmczIvcmVmY291bnR0cmVlLmg6MTA4OmxvZmZfdCBvY2ZzMl9yZWZsaW5rX3JlbWFwX2Jsb2NrcyhzdHJ1Y3QgaW5vZGUgKnNfaW5vZGUsXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuaC0xMDktXHRcdFx0XHQgIHN0cnVjdCBidWZmZXJfaGVhZCAqc19iaCxcbi0tXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuaC0xMTQtXHRcdFx0XHQgIGxvZmZfdCBsZW4pO1xuZnMvb2NmczIvcmVmY291bnR0cmVlLmg6MTE1OmludCBvY2ZzMl9yZWZsaW5rX2lub2Rlc19sb2NrKHN0cnVjdCBpbm9kZSAqc19pbm9kZSxcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5oLTExNi1cdFx0XHQgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiaDEsXG4tLVxuZnMvb2NmczIvcmVmY291bnR0cmVlLmgtMTE4LVx0XHRcdCAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqKmJoMik7XG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuaDoxMTk6dm9pZCBvY2ZzMl9yZWZsaW5rX2lub2Rlc191bmxvY2soc3RydWN0IGlub2RlICpzX2lub2RlLFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmgtMTIwLVx0XHRcdFx0IHN0cnVjdCBidWZmZXJfaGVhZCAqc19iaCxcbi0tXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuaC0xMjItXHRcdFx0XHQgc3RydWN0IGJ1ZmZlcl9oZWFkICp0X2JoKTtcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5oOjEyMzppbnQgb2NmczJfcmVmbGlua191cGRhdGVfZGVzdChzdHJ1Y3QgaW5vZGUgKmRlc3QsXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuaC0xMjQtXHRcdFx0ICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkX2JoLFxuLS1cbmZzL29jZnMyL3hhdHRyLmM9NjMwOD1zdGF0aWMgaW50IG9jZnMyX2dldF94YXR0cl92YWx1ZV9yb290KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxuZnMvb2NmczIveGF0dHIuYy02MzMxLSAqL1xuZnMvb2NmczIveGF0dHIuYzo2MzMyOnN0YXRpYyBpbnQgb2NmczJfcmVmbGlua19sb2NrX3hhdHRyX2FsbG9jYXRvcnMoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsXG5mcy9vY2ZzMi94YXR0ci5jLTYzMzMtXHRcdFx0XHRcdHN0cnVjdCBvY2ZzMl94YXR0cl9oZWFkZXIgKnhoLFxuLS1cbmZzL29jZnMyL3hhdHRyLmMtNjM4Ny0gKi9cbmZzL29jZnMyL3hhdHRyLmM6NjM4ODpzdGF0aWMgaW50IG9jZnMyX3JlZmxpbmtfeGF0dHJfaGVhZGVyKGhhbmRsZV90ICpoYW5kbGUsXG5mcy9vY2ZzMi94YXR0ci5jLTYzODktXHRcdFx0XHQgICAgICBzdHJ1Y3Qgb2NmczJfeGF0dHJfcmVmbGluayAqYXJncyxcbi0tXG5mcy9vY2ZzMi94YXR0ci5jLTY0MDctXG5mcy9vY2ZzMi94YXR0ci5jOjY0MDg6XHR0cmFjZV9vY2ZzMl9yZWZsaW5rX3hhdHRyX2hlYWRlcigodW5zaWduZWQgbG9uZyBsb25nKW9sZF9iaC1cdTAwM2ViX2Jsb2NrbnIsXG5mcy9vY2ZzMi94YXR0ci5jLTY0MDktXHRcdFx0XHRcdCBsZTE2X3RvX2NwdSh4aC1cdTAwM2V4aF9jb3VudCkpO1xuLS1cbmZzL29jZnMyL3hhdHRyLmMtNjUxNy1cbmZzL29jZnMyL3hhdHRyLmM6NjUxODpzdGF0aWMgaW50IG9jZnMyX3JlZmxpbmtfeGF0dHJfaW5saW5lKHN0cnVjdCBvY2ZzMl94YXR0cl9yZWZsaW5rICphcmdzKVxuZnMvb2NmczIveGF0dHIuYy02NTE5LXtcbi0tXG5mcy9vY2ZzMi94YXR0ci5jLTY1NDQtXG5mcy9vY2ZzMi94YXR0ci5jOjY1NDU6XHRyZXQgPSBvY2ZzMl9yZWZsaW5rX2xvY2tfeGF0dHJfYWxsb2NhdG9ycyhvc2IsIHhoLCBhcmdzLVx1MDAzZXJlZl9yb290X2JoLFxuZnMvb2NmczIveGF0dHIuYy02NTQ2LVx0XHRcdFx0XHRcdCAgXHUwMDI2Y3JlZGl0cywgXHUwMDI2bWV0YV9hYyk7XG4tLVxuZnMvb2NmczIveGF0dHIuYy02NTcxLVxuZnMvb2NmczIveGF0dHIuYzo2NTcyOlx0cmV0ID0gb2NmczJfcmVmbGlua194YXR0cl9oZWFkZXIoaGFuZGxlLCBhcmdzLCBhcmdzLVx1MDAzZW9sZF9iaCwgeGgsXG5mcy9vY2ZzMi94YXR0ci5jLTY1NzMtXHRcdFx0XHRcdCBhcmdzLVx1MDAzZW5ld19iaCwgbmV3X3hoLCBcdTAwMjZ2YiwgbWV0YV9hYyxcbi0tXG5mcy9vY2ZzMi94YXR0ci5jPTY1OTg9c3RhdGljIGludCBvY2ZzMl9jcmVhdGVfZW1wdHlfeGF0dHJfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9vY2ZzMi94YXR0ci5jLTY2MzMtXG5mcy9vY2ZzMi94YXR0ci5jOjY2MzQ6c3RhdGljIGludCBvY2ZzMl9yZWZsaW5rX3hhdHRyX2Jsb2NrKHN0cnVjdCBvY2ZzMl94YXR0cl9yZWZsaW5rICphcmdzLFxuZnMvb2NmczIveGF0dHIuYy02NjM1LVx0XHRcdFx0ICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJsa19iaCxcbi0tXG5mcy9vY2ZzMi94YXR0ci5jLTY2NTUtXG5mcy9vY2ZzMi94YXR0ci5jOjY2NTY6XHRyZXQgPSBvY2ZzMl9yZWZsaW5rX2xvY2tfeGF0dHJfYWxsb2NhdG9ycyhvc2IsIHhoLCBhcmdzLVx1MDAzZXJlZl9yb290X2JoLFxuZnMvb2NmczIveGF0dHIuYy02NjU3LVx0XHRcdFx0XHRcdCAgXHUwMDI2Y3JlZGl0cywgXHUwMDI2bWV0YV9hYyk7XG4tLVxuZnMvb2NmczIveGF0dHIuYy02NjkxLVxuZnMvb2NmczIveGF0dHIuYzo2NjkyOlx0cmV0ID0gb2NmczJfcmVmbGlua194YXR0cl9oZWFkZXIoaGFuZGxlLCBhcmdzLCBibGtfYmgsIHhoLFxuZnMvb2NmczIveGF0dHIuYy02NjkzLVx0XHRcdFx0XHQgbmV3X2Jsa19iaCwgbmV3X3hoLCBcdTAwMjZ2YiwgbWV0YV9hYyxcbi0tXG5mcy9vY2ZzMi94YXR0ci5jLTY3MTktXG5mcy9vY2ZzMi94YXR0ci5jOjY3MjA6c3RydWN0IG9jZnMyX3JlZmxpbmtfeGF0dHJfdHJlZV9hcmdzIHtcbmZzL29jZnMyL3hhdHRyLmMtNjcyMS1cdHN0cnVjdCBvY2ZzMl94YXR0cl9yZWZsaW5rICpyZWZsaW5rO1xuLS1cbmZzL29jZnMyL3hhdHRyLmM9NjczND1zdGF0aWMgaW50IG9jZnMyX2dldF9yZWZsaW5rX3hhdHRyX3ZhbHVlX3Jvb3Qoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5mcy9vY2ZzMi94YXR0ci5jLTY3NDEte1xuZnMvb2NmczIveGF0dHIuYzo2NzQyOlx0c3RydWN0IG9jZnMyX3JlZmxpbmtfeGF0dHJfdHJlZV9hcmdzICphcmdzID1cbmZzL29jZnMyL3hhdHRyLmM6Njc0MzpcdFx0XHQoc3RydWN0IG9jZnMyX3JlZmxpbmtfeGF0dHJfdHJlZV9hcmdzICopcGFyYTtcbmZzL29jZnMyL3hhdHRyLmMtNjc0NC1cdHN0cnVjdCBvY2ZzMl94YXR0cl9idWNrZXQgKmJ1Y2tldDtcbi0tXG5mcy9vY2ZzMi94YXR0ci5jPTY3OTk9c3RhdGljIGludCBvY2ZzMl9sb2NrX3JlZmxpbmtfeGF0dHJfcmVjX2FsbG9jYXRvcnMoXG5mcy9vY2ZzMi94YXR0ci5jOjY4MDA6XHRcdFx0XHRzdHJ1Y3Qgb2NmczJfcmVmbGlua194YXR0cl90cmVlX2FyZ3MgKmFyZ3MsXG5mcy9vY2ZzMi94YXR0ci5jLTY4MDEtXHRcdFx0XHRzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKnh0X2V0LFxuLS1cbmZzL29jZnMyL3hhdHRyLmMtNjg4NC1cbmZzL29jZnMyL3hhdHRyLmM6Njg4NTpzdGF0aWMgaW50IG9jZnMyX3JlZmxpbmtfeGF0dHJfYnVja2V0KGhhbmRsZV90ICpoYW5kbGUsXG5mcy9vY2ZzMi94YXR0ci5jLTY4ODYtXHRcdFx0XHR1NjQgYmxrbm8sIHU2NCBuZXdfYmxrbm8sIHUzMiBjbHVzdGVycyxcbi0tXG5mcy9vY2ZzMi94YXR0ci5jLTY4ODktXHRcdFx0XHRzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqZGF0YV9hYyxcbmZzL29jZnMyL3hhdHRyLmM6Njg5MDpcdFx0XHRcdHN0cnVjdCBvY2ZzMl9yZWZsaW5rX3hhdHRyX3RyZWVfYXJncyAqYXJncylcbmZzL29jZnMyL3hhdHRyLmMtNjg5MS17XG4tLVxuZnMvb2NmczIveGF0dHIuYy02OTM4LVxuZnMvb2NmczIveGF0dHIuYzo2OTM5Olx0XHRyZXQgPSBvY2ZzMl9yZWZsaW5rX3hhdHRyX2hlYWRlcihoYW5kbGUsIGFyZ3MtXHUwMDNlcmVmbGluayxcbmZzL29jZnMyL3hhdHRyLmMtNjk0MC1cdFx0XHRcdFx0YXJncy1cdTAwM2VvbGRfYnVja2V0LVx1MDAzZWJ1X2Joc1swXSxcbi0tXG5mcy9vY2ZzMi94YXR0ci5jLTY5NzUtXG5mcy9vY2ZzMi94YXR0ci5jOjY5NzY6c3RhdGljIGludCBvY2ZzMl9yZWZsaW5rX3hhdHRyX2J1Y2tldHMoaGFuZGxlX3QgKmhhbmRsZSxcbmZzL29jZnMyL3hhdHRyLmMtNjk3Ny1cdFx0XHRcdHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5mcy9vY2ZzMi94YXR0ci5jOjY5Nzg6XHRcdFx0XHRzdHJ1Y3Qgb2NmczJfcmVmbGlua194YXR0cl90cmVlX2FyZ3MgKmFyZ3MsXG5mcy9vY2ZzMi94YXR0ci5jLTY5NzktXHRcdFx0XHRzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LFxuLS1cbmZzL29jZnMyL3hhdHRyLmMtNzAwOS1cbmZzL29jZnMyL3hhdHRyLmM6NzAxMDpcdFx0cmV0ID0gb2NmczJfcmVmbGlua194YXR0cl9idWNrZXQoaGFuZGxlLCBibGtubyxcbmZzL29jZnMyL3hhdHRyLmMtNzAxMS1cdFx0XHRcdFx0XHQgbmV3X2Jsa25vLCBudW1fY2x1c3RlcnMsXG4tLVxuZnMvb2NmczIveGF0dHIuYy03MDMyLVxuZnMvb2NmczIveGF0dHIuYzo3MDMzOlx0XHR0cmFjZV9vY2ZzMl9yZWZsaW5rX3hhdHRyX2J1Y2tldHMoKHVuc2lnbmVkIGxvbmcgbG9uZyluZXdfYmxrbm8sXG5mcy9vY2ZzMi94YXR0ci5jLTcwMzQtXHRcdFx0XHRcdFx0ICBudW1fY2x1c3RlcnMsIHJlZmxpbmtfY3Bvcyk7XG4tLVxuZnMvb2NmczIveGF0dHIuYy03MDQ2LSAqL1xuZnMvb2NmczIveGF0dHIuYzo3MDQ3OnN0YXRpYyBpbnQgb2NmczJfcmVmbGlua194YXR0cl9yZWMoc3RydWN0IGlub2RlICppbm9kZSxcbmZzL29jZnMyL3hhdHRyLmMtNzA0OC1cdFx0XHRcdCAgIHN0cnVjdCBidWZmZXJfaGVhZCAqcm9vdF9iaCxcbi0tXG5mcy9vY2ZzMi94YXR0ci5jLTcwNTUtXHRoYW5kbGVfdCAqaGFuZGxlO1xuZnMvb2NmczIveGF0dHIuYzo3MDU2Olx0c3RydWN0IG9jZnMyX3JlZmxpbmtfeGF0dHJfdHJlZV9hcmdzICphcmdzID1cbmZzL29jZnMyL3hhdHRyLmM6NzA1NzpcdFx0XHQoc3RydWN0IG9jZnMyX3JlZmxpbmtfeGF0dHJfdHJlZV9hcmdzICopcGFyYTtcbmZzL29jZnMyL3hhdHRyLmMtNzA1OC1cdHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoaW5vZGUtXHUwMDNlaV9zYik7XG4tLVxuZnMvb2NmczIveGF0dHIuYy03MDYyLVxuZnMvb2NmczIveGF0dHIuYzo3MDYzOlx0dHJhY2Vfb2NmczJfcmVmbGlua194YXR0cl9yZWMoKHVuc2lnbmVkIGxvbmcgbG9uZylibGtubywgbGVuKTtcbmZzL29jZnMyL3hhdHRyLmMtNzA2NC1cbi0tXG5mcy9vY2ZzMi94YXR0ci5jLTcwODMtXG5mcy9vY2ZzMi94YXR0ci5jOjcwODQ6XHRyZXQgPSBvY2ZzMl9yZWZsaW5rX3hhdHRyX2J1Y2tldHMoaGFuZGxlLCBpbm9kZSwgYXJncywgXHUwMDI2ZXQsXG5mcy9vY2ZzMi94YXR0ci5jLTcwODUtXHRcdFx0XHRcdCAgbWV0YV9hYywgZGF0YV9hYyxcbi0tXG5mcy9vY2ZzMi94YXR0ci5jLTcxMDQtICovXG5mcy9vY2ZzMi94YXR0ci5jOjcxMDU6c3RhdGljIGludCBvY2ZzMl9yZWZsaW5rX3hhdHRyX3RyZWUoc3RydWN0IG9jZnMyX3hhdHRyX3JlZmxpbmsgKmFyZ3MsXG5mcy9vY2ZzMi94YXR0ci5jLTcxMDYtXHRcdFx0XHQgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpibGtfYmgsXG4tLVxuZnMvb2NmczIveGF0dHIuYy03MTA5LVx0aW50IHJldDtcbmZzL29jZnMyL3hhdHRyLmM6NzExMDpcdHN0cnVjdCBvY2ZzMl9yZWZsaW5rX3hhdHRyX3RyZWVfYXJncyBwYXJhO1xuZnMvb2NmczIveGF0dHIuYy03MTExLVxuLS1cbmZzL29jZnMyL3hhdHRyLmMtNzEzMC1cdHJldCA9IG9jZnMyX2l0ZXJhdGVfeGF0dHJfaW5kZXhfYmxvY2soYXJncy1cdTAwM2VvbGRfaW5vZGUsIGJsa19iaCxcbmZzL29jZnMyL3hhdHRyLmM6NzEzMTpcdFx0XHRcdFx0ICAgICAgb2NmczJfcmVmbGlua194YXR0cl9yZWMsXG5mcy9vY2ZzMi94YXR0ci5jLTcxMzItXHRcdFx0XHRcdCAgICAgIFx1MDAyNnBhcmEpO1xuLS1cbmZzL29jZnMyL3hhdHRyLmMtNzE0MS1cbmZzL29jZnMyL3hhdHRyLmM6NzE0MjpzdGF0aWMgaW50IG9jZnMyX3JlZmxpbmtfeGF0dHJfaW5fYmxvY2soc3RydWN0IG9jZnMyX3hhdHRyX3JlZmxpbmsgKmFyZ3MsXG5mcy9vY2ZzMi94YXR0ci5jLTcxNDMtXHRcdFx0XHRcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmxrX2JoKVxuLS1cbmZzL29jZnMyL3hhdHRyLmMtNzE2MS1cdGlmICghaW5kZXhlZClcbmZzL29jZnMyL3hhdHRyLmM6NzE2MjpcdFx0cmV0ID0gb2NmczJfcmVmbGlua194YXR0cl9ibG9jayhhcmdzLCBibGtfYmgsIG5ld19ibGtfYmgpO1xuZnMvb2NmczIveGF0dHIuYy03MTYzLVx0ZWxzZVxuZnMvb2NmczIveGF0dHIuYzo3MTY0Olx0XHRyZXQgPSBvY2ZzMl9yZWZsaW5rX3hhdHRyX3RyZWUoYXJncywgYmxrX2JoLCBuZXdfYmxrX2JoKTtcbmZzL29jZnMyL3hhdHRyLmMtNzE2NS1cdGlmIChyZXQpXG4tLVxuZnMvb2NmczIveGF0dHIuYy03MTcyLVxuZnMvb2NmczIveGF0dHIuYzo3MTczOnN0YXRpYyBpbnQgb2NmczJfcmVmbGlua194YXR0cl9ub19zZWN1cml0eShzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkgKnhlKVxuZnMvb2NmczIveGF0dHIuYy03MTc0LXtcbi0tXG5mcy9vY2ZzMi94YXR0ci5jLTcxODEtXG5mcy9vY2ZzMi94YXR0ci5jOjcxODI6aW50IG9jZnMyX3JlZmxpbmtfeGF0dHJzKHN0cnVjdCBpbm9kZSAqb2xkX2lub2RlLFxuZnMvb2NmczIveGF0dHIuYy03MTgzLVx0XHRcdCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKm9sZF9iaCxcbi0tXG5mcy9vY2ZzMi94YXR0ci5jLTcyMTYtXHRlbHNlXG5mcy9vY2ZzMi94YXR0ci5jOjcyMTc6XHRcdGFyZ3MueGF0dHJfcmVmbGlua2VkID0gb2NmczJfcmVmbGlua194YXR0cl9ub19zZWN1cml0eTtcbmZzL29jZnMyL3hhdHRyLmMtNzIxOC1cbmZzL29jZnMyL3hhdHRyLmMtNzIxOS1cdGlmIChvaS1cdTAwM2VpcF9keW5fZmVhdHVyZXMgXHUwMDI2IE9DRlMyX0lOTElORV9YQVRUUl9GTCkge1xuZnMvb2NmczIveGF0dHIuYzo3MjIwOlx0XHRyZXQgPSBvY2ZzMl9yZWZsaW5rX3hhdHRyX2lubGluZShcdTAwMjZhcmdzKTtcbmZzL29jZnMyL3hhdHRyLmMtNzIyMS1cdFx0aWYgKHJldCkge1xuLS1cbmZzL29jZnMyL3hhdHRyLmMtNzIzNi1cbmZzL29jZnMyL3hhdHRyLmM6NzIzNzpcdHJldCA9IG9jZnMyX3JlZmxpbmtfeGF0dHJfaW5fYmxvY2soXHUwMDI2YXJncywgYmxrX2JoKTtcbmZzL29jZnMyL3hhdHRyLmMtNzIzOC1cdGlmIChyZXQpXG4tLVxuZnMvb2NmczIveGF0dHIuaD03OD1pbnQgb2NmczJfeGF0dHJfYXR0YWNoX3JlZmNvdW50X3RyZWUoc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9vY2ZzMi94YXR0ci5oLTgyLVx0XHRcdFx0ICAgICBzdHJ1Y3Qgb2NmczJfY2FjaGVkX2RlYWxsb2NfY3R4dCAqZGVhbGxvYyk7XG5mcy9vY2ZzMi94YXR0ci5oOjgzOmludCBvY2ZzMl9yZWZsaW5rX3hhdHRycyhzdHJ1Y3QgaW5vZGUgKm9sZF9pbm9kZSxcbmZzL29jZnMyL3hhdHRyLmgtODQtXHRcdFx0IHN0cnVjdCBidWZmZXJfaGVhZCAqb2xkX2JoLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwODowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTEwOAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDMwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgT0NGUzIgRnVuY3Rpb24gQ2FsbHMgYW5kIFNjb3BlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgY2FsbCBmbG93IGhlcmUuIEl0IGFwcGVhcnMgYG9jZnMyX3JlZmxpbmtgIGlzIHVsdGltYXRlbHkgdHJpZ2dlcmVkIHRocm91Z2ggdGhlIGlvY3RsIHN5c3RlbSBjYWxscywgc3BlY2lmaWNhbGx5IGBvY2ZzMl9yZWZsaW5rX2lvY3RsYCwgd2hpY2ggaXRzZWxmIGlzIGludm9rZWQgYnkgYG9jZnMyX2lvY3RsYCBhbmQgYG9jZnMyX2NvbXBhdF9pb2N0bGAuIE15IG1haW4gZm9jdXMgaXMgb24gYSBmZXcga2V5IGZ1bmN0aW9ucyBpbiB0aGlzIGNvbnRleHQ6IGBvY2ZzMl9ta25vZGAsIGBvY2ZzMl9ta2RpcmAsIGBvY2ZzMl9jcmVhdGVgLCBgb2NmczJfc3ltbGlua2AsIG5hdHVyYWxseSBgb2NmczJfcmVmbGlua2AsIGFuZCB0aGVuIGFsc28gdGhlIEFDTC9zZWN1cml0eSBpbml0aWFsaXphdGlvbiByb3V0aW5lczogYG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbGAsIGBvY2ZzMl9pbml0X2FjbGAsIGBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlYCwgYW5kIGZpbmFsbHkgYG9jZnMyX2NhbGNfeGF0dHJfaW5pdGAuCgpXYWl0IGEgbWludXRlLCBJIG5lZWQgdG8gY2hlY2sgdGhlIHNjb3BlIG9uIHRob3NlIGZpcnN0IGZvdXIgSSBsaXN0ZWQuIEFyZSBgb2NmczJfbWtub2RgLCBgb2NmczJfbWtkaXJgLCBgb2NmczJfY3JlYXRlYCwgYW5kIGBvY2ZzMl9zeW1saW5rYCBhY3R1YWxseSBzdGF0aWM/IEhtbSwgeWVhaCwgdGhleSBhcmUuIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93LiBTbywgdGhhdCBsZWF2ZXMgbWUgd2l0aCB0aGUgaW5pdGlhbGl6YXRpb24gcm91dGluZXMgYW5kIGBvY2ZzMl94YXR0cl9zZXRfaGFuZGxlYCwgYW5kIHRoZSByZWZsaW5rIGZ1bmN0aW9uIGFzIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzLiBUaGF0JiMzOTtzIGhlbHBmdWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBrZXJuZWwgaW50ZXJhY3RzIHdpdGggdGhlc2UgcGFydHMgb2YgdGhlIGZpbGVzeXN0ZW0uIEkgc2hvdWxkIHRha2UgYSBsb29rIGF0IGBvY2ZzMl94YXR0cl9zZXRfaGFuZGxlYCBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDA4OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O29jZnMyX3hhdHRyX3NldF9oYW5kbGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9vY2ZzMi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvb2NmczIvYWNsLmM9MjE0PXN0YXRpYyBpbnQgb2NmczJfc2V0X2FjbChoYW5kbGVfdCAqaGFuZGxlLFxuLS1cbmZzL29jZnMyL2FjbC5jLTI0OS1cdGlmIChoYW5kbGUpXG5mcy9vY2ZzMi9hY2wuYzoyNTA6XHRcdHJldCA9IG9jZnMyX3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlLCBpbm9kZSwgZGlfYmgsIG5hbWVfaW5kZXgsXG5mcy9vY2ZzMi9hY2wuYy0yNTEtXHRcdFx0XHRcdCAgICAgXCYjMzQ7XCYjMzQ7LCB2YWx1ZSwgc2l6ZSwgMCxcbi0tXG5mcy9vY2ZzMi94YXR0ci5jPTMzMDU9c3RhdGljIGludCBvY2ZzMl9pbml0X3hhdHRyX3NldF9jdHh0KHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvb2NmczIveGF0dHIuYy0zMzYwLVxuZnMvb2NmczIveGF0dHIuYzozMzYxOnN0YXRpYyBpbnQgX19vY2ZzMl94YXR0cl9zZXRfaGFuZGxlKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5mcy9vY2ZzMi94YXR0ci5jLTMzNjItXHRcdFx0XHQgICAgc3RydWN0IG9jZnMyX2Rpbm9kZSAqZGksXG4tLVxuZnMvb2NmczIveGF0dHIuYy0zNTAyLSAqL1xuZnMvb2NmczIveGF0dHIuYzozNTAzOmludCBvY2ZzMl94YXR0cl9zZXRfaGFuZGxlKGhhbmRsZV90ICpoYW5kbGUsXG5mcy9vY2ZzMi94YXR0ci5jLTM1MDQtXHRcdFx0ICAgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9vY2ZzMi94YXR0ci5jLTM1NjYtXG5mcy9vY2ZzMi94YXR0ci5jOjM1Njc6XHRyZXQgPSBfX29jZnMyX3hhdHRyX3NldF9oYW5kbGUoaW5vZGUsIGRpLCBcdTAwMjZ4aSwgXHUwMDI2eGlzLCBcdTAwMjZ4YnMsIFx1MDAyNmN0eHQpO1xuZnMvb2NmczIveGF0dHIuYy0zNTY4LVxuLS1cbmZzL29jZnMyL3hhdHRyLmM9MzU4Mz1pbnQgb2NmczJfeGF0dHJfc2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvb2NmczIveGF0dHIuYy0zNzAzLVxuZnMvb2NmczIveGF0dHIuYzozNzA0Olx0cmV0ID0gX19vY2ZzMl94YXR0cl9zZXRfaGFuZGxlKGlub2RlLCBkaSwgXHUwMDI2eGksIFx1MDAyNnhpcywgXHUwMDI2eGJzLCBcdTAwMjZjdHh0KTtcbmZzL29jZnMyL3hhdHRyLmMtMzcwNS1cdG9jZnMyX3VwZGF0ZV9pbm9kZV9mc3luY190cmFucyhjdHh0LmhhbmRsZSwgaW5vZGUsIDApO1xuLS1cbmZzL29jZnMyL3hhdHRyLmM9NzM3Nj1pbnQgb2NmczJfaW5pdF9zZWN1cml0eV9zZXQoaGFuZGxlX3QgKmhhbmRsZSxcbi0tXG5mcy9vY2ZzMi94YXR0ci5jLTczODIte1xuZnMvb2NmczIveGF0dHIuYzo3MzgzOlx0cmV0dXJuIG9jZnMyX3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlLCBpbm9kZSwgZGlfYmgsXG5mcy9vY2ZzMi94YXR0ci5jLTczODQtXHRcdFx0XHQgICAgIE9DRlMyX1hBVFRSX0lOREVYX1NFQ1VSSVRZLFxuLS1cbmZzL29jZnMyL3hhdHRyLmg9Mzg9aW50IG9jZnMyX3hhdHRyX3NldChzdHJ1Y3QgaW5vZGUgKiwgaW50LCBjb25zdCBjaGFyICosIGNvbnN0IHZvaWQgKixcbmZzL29jZnMyL3hhdHRyLmgtMzktXHRcdCAgICBzaXplX3QsIGludCk7XG5mcy9vY2ZzMi94YXR0ci5oOjQwOmludCBvY2ZzMl94YXR0cl9zZXRfaGFuZGxlKGhhbmRsZV90ICosIHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKixcbmZzL29jZnMyL3hhdHRyLmgtNDEtXHRcdFx0ICAgaW50LCBjb25zdCBjaGFyICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBpbnQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDA4OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNTg3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlRyYWNpbmcgdGhlIEFDTCBhbmQgU2VjdXJpdHkgQXR0cmlidXRlIEluaXRpYWxpemF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIGhvdyB0aGlzIGFsbCBmaXRzIHRvZ2V0aGVyLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBBQ0wgYW5kIHNlY3VyaXR5IGF0dHJpYnV0ZSBpbml0aWFsaXphdGlvbiBwYXRod2F5cyB3aXRoaW4gdGhpcyBPQ0ZTMiBmaWxlc3lzdGVtLiBNeSB0aGlua2luZyBpcyB0aGF0IHRoZSBiZXN0IGFwcHJvYWNoIGhlcmUgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbGluZyByZWxhdGlvbnNoaXBzLgoKSXQgbG9va3MgbGlrZSBgb2NmczJfeGF0dHJfc2V0X2hhbmRsZWAgaXMgdGhlIHdvcmtob3JzZSBoZXJlLCBhbmQgaXQmIzM5O3MgY2FsbGVkIGZyb20gdHdvIGtleSBsb2NhdGlvbnM6IGBvY2ZzMl9zZXRfYWNsYCBhbmQgYG9jZnMyX2luaXRfc2VjdXJpdHlfc2V0YC4gQWxyaWdodCwgYG9jZnMyX3NldF9hY2xgIGl0c2VsZiBpcyBjYWxsZWQgYnkgYG9jZnMyX2luaXRfYWNsYCBhbmQgYG9jZnMyX2lvcF9zZXRfYWNsYC4gQW5kLCBzaW5jZSBgb2NmczJfaW9wX3NldF9hY2xgIGlzIHRoZSBgLnNldF9hY2xgIGlub2RlIG9wZXJhdGlvbiwgdGhhdCBjb25maXJtcyBpdHMgaW1wb3J0YW5jZS4KClRoZXJlZm9yZSwgbXkgbWFpbiBpbnRlcmVzdCBpcyBpbiB0aGVzZSBlbnRyeSBwb2ludHM6CgoqICAgYG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbGAgKGFzIGEgcG90ZW50aWFsIGluaXRpYWxpemF0aW9uIGVudHJ5IHBvaW50KQoqICAgYG9jZnMyX2luaXRfYWNsYCAoYW5vdGhlciBpbml0aWFsaXphdGlvbiBlbnRyeSBwb2ludCkKKiAgIGBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlYCAoYSBmdW5jdGlvbiB3aGljaCBhcHBlYXJzIHRvIGJlIGludm9sdmVkIGluIHRoZSBwcmVwYXJhdGlvbikKKiAgIGBvY2ZzMl9jYWxjX3hhdHRyX2luaXRgIChwZXJoYXBzIHVzZWQgZm9yIGluaXRpYWwgY2FsY3VsYXRpb25zIHJlbGF0ZWQgdG8gZXh0ZW5kZWQgYXR0cmlidXRlcykKKiAgIGBvY2ZzMl94YXR0cl9zZXRfaGFuZGxlYCAodGhlIGNvcmUgZnVuY3Rpb24gZm9yIHNldHRpbmcgdGhlIGF0dHJpYnV0ZXMpCiogICBgb2NmczJfaW9wX3NldF9hY2xgICh0aGUgYWN0dWFsIGlub2RlIG9wZXJhdGlvbiBjYWxsZWQgYnkgdXNlcnNwYWNlKQoKQnV0IEkgaGF2ZSB0byBiZSB0aG9yb3VnaC4uLiBJcyB0aGVyZSBhbnkgb3RoZXIgZW50cnkgcG9pbnQ/CgpIbW0sIEkgc2VlIGBvY2ZzMl9yZWZsaW5rX2lvY3RsYCBpcyBub24tc3RhdGljLCB3aGljaCBtZWFucyBpdCYjMzk7cyBleHBvcnRlZCBhbmQgY291bGQgYmUgaW52b2x2ZWQgaW4gc29tZSByZWxhdGVkIG9wZXJhdGlvbnMuIEFuZCwgb2YgY291cnNlLCB0aGUgZ2VuZXJhbCBgb2NmczJfaW9jdGxgIGFuZCBgb2NmczJfY29tcGF0X2lvY3RsYCBmdW5jdGlvbnMgYXJlIG5vbi1zdGF0aWMgYW5kIHdvcnRoIGEgbG9vaywgdG9vLgoKSSBzaG91bGQgcHJvYmFibHkgZm9jdXMgb24gYG9jZnMyX2lvcF9zZXRfYWNsYCBuZXh0IHRvIHN0YXJ0IG15IGludmVzdGlnYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDA4OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O29jZnMyX2lvcF9zZXRfYWNsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvb2NmczIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL29jZnMyL2FjbC5jPTIxND1zdGF0aWMgaW50IG9jZnMyX3NldF9hY2woaGFuZGxlX3QgKmhhbmRsZSxcbi0tXG5mcy9vY2ZzMi9hY2wuYy0yNjItXG5mcy9vY2ZzMi9hY2wuYzoyNjM6aW50IG9jZnMyX2lvcF9zZXRfYWNsKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG5mcy9vY2ZzMi9hY2wuYy0yNjQtXHRcdCAgICAgIHN0cnVjdCBwb3NpeF9hY2wgKmFjbCwgaW50IHR5cGUpXG4tLVxuZnMvb2NmczIvYWNsLmg9MTk9c3RydWN0IHBvc2l4X2FjbCAqb2NmczJfaW9wX2dldF9hY2woc3RydWN0IGlub2RlICppbm9kZSwgaW50IHR5cGUsIGJvb2wgcmN1KTtcbmZzL29jZnMyL2FjbC5oOjIwOmludCBvY2ZzMl9pb3Bfc2V0X2FjbChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuZnMvb2NmczIvYWNsLmgtMjEtXHRcdCAgICAgIHN0cnVjdCBwb3NpeF9hY2wgKmFjbCwgaW50IHR5cGUpO1xuLS1cbmZzL29jZnMyL2ZpbGUuYz0yNzg4PWNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG9jZnMyX2ZpbGVfaW9wcyA9IHtcbi0tXG5mcy9vY2ZzMi9maWxlLmMtMjc5NC1cdC5nZXRfaW5vZGVfYWNsXHQ9IG9jZnMyX2lvcF9nZXRfYWNsLFxuZnMvb2NmczIvZmlsZS5jOjI3OTU6XHQuc2V0X2FjbFx0PSBvY2ZzMl9pb3Bfc2V0X2FjbCxcbmZzL29jZnMyL2ZpbGUuYy0yNzk2LVx0LmZpbGVhdHRyX2dldFx0PSBvY2ZzMl9maWxlYXR0cl9nZXQsXG4tLVxuZnMvb2NmczIvZmlsZS5jPTI4MDA9Y29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgb2NmczJfc3BlY2lhbF9maWxlX2lvcHMgPSB7XG4tLVxuZnMvb2NmczIvZmlsZS5jLTI4MDUtXHQuZ2V0X2lub2RlX2FjbFx0PSBvY2ZzMl9pb3BfZ2V0X2FjbCxcbmZzL29jZnMyL2ZpbGUuYzoyODA2Olx0LnNldF9hY2xcdD0gb2NmczJfaW9wX3NldF9hY2wsXG5mcy9vY2ZzMi9maWxlLmMtMjgwNy19O1xuLS1cbmZzL29jZnMyL25hbWVpLmM9MjkzMz1jb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBvY2ZzMl9kaXJfaW9wcyA9IHtcbi0tXG5mcy9vY2ZzMi9uYW1laS5jLTI5NDgtXHQuZ2V0X2lub2RlX2FjbFx0PSBvY2ZzMl9pb3BfZ2V0X2FjbCxcbmZzL29jZnMyL25hbWVpLmM6Mjk0OTpcdC5zZXRfYWNsXHQ9IG9jZnMyX2lvcF9zZXRfYWNsLFxuZnMvb2NmczIvbmFtZWkuYy0yOTUwLVx0LmZpbGVhdHRyX2dldFx0PSBvY2ZzMl9maWxlYXR0cl9nZXQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDA4OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzOTUxCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgT0NGUzIgQUNMIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBvY2ZzMl9pb3Bfc2V0X2FjbGAgZnVuY3Rpb24g4oCTIHRoYXQmIzM5O3MgdGhlIGAuc2V0X2FjbGAgb3BlcmF0aW9uLCBnb3QgaXQuIEJ1dCB0aGUgcGF0Y2ggaXMgc3BlY2lmaWNhbGx5IHRvdWNoaW5nIGBvY2ZzMl9pbml0X2FjbGAgYW5kIGBvY2ZzMl9jYWxjX3hhdHRyX2luaXRgLiBUaG9zZSBhcmUgZ2V0dGluZyBjYWxsZWQgZHVyaW5nIGlub2RlIGNyZWF0aW9uLCB0aGluZ3MgbGlrZSBgbWtub2RgLCBgbWtkaXJgLCBgY3JlYXRlYCwgYHN5bWxpbmtgLCBhbmQgYHJlZmxpbmtgLiBTbywgdGhlIHJlYWxseSBrZXkgc3ltYm9scyB0byBmb2N1cyBvbiBhcmU6IGBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xgLCBgb2NmczJfaW5pdF9hY2xgLCBgb2NmczJfYWNsX2luaXRfcHJlcGFyZWAsIGBvY2ZzMl9jYWxjX3hhdHRyX2luaXRgLCBgb2NmczJfeGF0dHJfc2V0X2hhbmRsZWAsIGFuZCBgb2NmczJfcmVmbGlua19pb2N0bGAuCgpMZXQmIzM5O3MgbWFrZSBzdXJlIHRoZXNlIHRoaW5ncyBhcmUgYWN0dWFsbHkgcmVhY2hhYmxlLiAgYG9jZnMyX21rbm9kYCwgeWVwLCB0aGF0IGdvZXMgdGhyb3VnaCBgdmZzX21rbm9kYC4gYG9jZnMyX21rZGlyYCBpcyBoYW5kbGVkIHRocm91Z2ggYHZmc19ta2RpcmAuIEFuZCBgb2NmczJfY3JlYXRlYCB1c2VzIGB2ZnNfY3JlYXRlYCwgYG9jZnMyX3N5bWxpbmtgIGdvZXMgdGhyb3VnaCBgdmZzX3N5bWxpbmtgLCBhbmQgIGBvY2ZzMl9yZWZsaW5rYCBpcyBhY2Nlc3NlZCB2aWEgYGlvY3RsYC4gR29vZCwgdGhpcyBwYXRjaCBpcyBkZWZpbml0ZWx5IGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZS4KCkFscmlnaHQsIHRoZSBwYXRjaCBpcyByZW1vdmluZyBgZG93bl93cml0ZSgmYW1wO09DRlMyX0koaW5vZGUpLSZndDtpcF94YXR0cl9zZW0pYCBmcm9tIGBvY2ZzMl94YXR0cl9zZXRfaGFuZGxlYC4gQXBwYXJlbnRseSwgdGhhdCB3YXMgY2F1c2luZyBzb21lIGtpbmQgb2YgZGVhZGxvY2ssIGFuZCBpdCYjMzk7cyBvbmx5IGNhbGxlZCBkdXJpbmcgaW5vZGUgY3JlYXRpb24gd2hlbiB0aGUgaW5vZGUgaXNuJiMzOTt0IHlldCBwdWJsaXNoZWQuIEJ1dCwgd2FpdCBhIG1pbnV0ZSwgYG9jZnMyX3hhdHRyX3NldF9oYW5kbGVgIGlzIGFsc28gdXNlZCBieSBgb2NmczJfc2V0X2FjbGAgYW5kIGBvY2ZzMl9pbml0X3NlY3VyaXR5X3NldGAuICBIYW5nIG9uLCBpcyBgb2NmczJfc2V0X2FjbGAgKm9ubHkqIGNhbGxlZCBkdXJpbmcgaW5vZGUgY3JlYXRpb24/IEkgbmVlZCB0byBkb3VibGUtY2hlY2sgYG9jZnMyX3NldF9hY2xgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwODowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvY2ZzMl9zZXRfYWNsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvb2NmczIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL29jZnMyL2FjbC5jPTE1OD1zdGF0aWMgaW50IG9jZnMyX2FjbF9zZXRfbW9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoLFxuLS1cbmZzL29jZnMyL2FjbC5jLTIxMy0gKi9cbmZzL29jZnMyL2FjbC5jOjIxNDpzdGF0aWMgaW50IG9jZnMyX3NldF9hY2woaGFuZGxlX3QgKmhhbmRsZSxcbmZzL29jZnMyL2FjbC5jLTIxNS1cdFx0XHQgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9vY2ZzMi9hY2wuYz0yNjM9aW50IG9jZnMyX2lvcF9zZXRfYWNsKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tLVxuZnMvb2NmczIvYWNsLmMtMjg1LVx0fVxuZnMvb2NmczIvYWNsLmM6Mjg2Olx0c3RhdHVzID0gb2NmczJfc2V0X2FjbChOVUxMLCBpbm9kZSwgYmgsIHR5cGUsIGFjbCwgTlVMTCwgTlVMTCk7XG5mcy9vY2ZzMi9hY2wuYy0yODctdW5sb2NrOlxuLS1cbmZzL29jZnMyL2FjbC5jPTMyMT1pbnQgb2NmczJfYWNsX2NobW9kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpXG4tLVxuZnMvb2NmczIvYWNsLmMtMzQwLVx0XHRyZXR1cm4gcmV0O1xuZnMvb2NmczIvYWNsLmM6MzQxOlx0cmV0ID0gb2NmczJfc2V0X2FjbChOVUxMLCBpbm9kZSwgTlVMTCwgQUNMX1RZUEVfQUNDRVNTLFxuZnMvb2NmczIvYWNsLmMtMzQyLVx0XHRcdCAgICBhY2wsIE5VTEwsIE5VTEwpO1xuLS1cbmZzL29jZnMyL2FjbC5jPTQxND1pbnQgb2NmczJfaW5pdF9hY2woaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9vY2ZzMi9hY2wuYy00MjctXHRcdGlmIChTX0lTRElSKGlub2RlLVx1MDAzZWlfbW9kZSkgXHUwMDI2XHUwMDI2IHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsKSB7XG5mcy9vY2ZzMi9hY2wuYzo0Mjg6XHRcdFx0cmV0ID0gb2NmczJfc2V0X2FjbChoYW5kbGUsIGlub2RlLCBkaV9iaCxcbmZzL29jZnMyL2FjbC5jLTQyOS1cdFx0XHRcdFx0ICAgIEFDTF9UWVBFX0RFRkFVTFQsXG4tLVxuZnMvb2NmczIvYWNsLmMtNDQ0LVx0XHRpZiAoc3RhdGUtXHUwMDNlYWNsKSB7XG5mcy9vY2ZzMi9hY2wuYzo0NDU6XHRcdFx0cmV0ID0gb2NmczJfc2V0X2FjbChoYW5kbGUsIGlub2RlLCBkaV9iaCxcbmZzL29jZnMyL2FjbC5jLTQ0Ni1cdFx0XHRcdFx0ICAgIEFDTF9UWVBFX0FDQ0VTUywgc3RhdGUtXHUwMDNlYWNsLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwODowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTM4OQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgT0NGUzIgQUNMIFNldHRpbmcgTWVjaGFuaXNtKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgYG9jZnMyX3NldF9hY2xgIGZ1bmN0aW9uIGFuZCBpbW1lZGlhdGVseSBhIGtleSBwb2ludCBqdW1wcyBvdXQgYXQgbWUuIEkmIzM5O20gc2VlaW5nIHRoYXQgaXQmIzM5O3MgY2FsbGVkIGJ5IGJvdGggYG9jZnMyX2lvcF9zZXRfYWNsYCBhbmQgYG9jZnMyX2FjbF9jaG1vZGAuIFRoZSBpbnRlcmVzdGluZyB0aGluZyBpcyB0aGF0IHNvbWV0aW1lcywgd2l0aCB0aGVzZSBjYWxsZXJzLCB0aGUgKmhhbmRsZSogcGFyYW1ldGVyIGlzIE5VTEwuIFRoYXQgc2VlbXMgc2lnbmlmaWNhbnQuCgpOb3csIGEgYmVsbCBpcyByaW5naW5nIGluIG15IGhlYWQuIFdoZW4gdGhlICpoYW5kbGUqIGlzIE5VTEwsIGBvY2ZzMl9zZXRfYWNsYCBkb2VzbiYjMzk7dCB1c2UgdGhlIGhhbmRsZS1iYXNlZCB4YXR0ciBzZXR0aW5nIGZ1bmN0aW9uLCBgb2NmczJfeGF0dHJfc2V0X2hhbmRsZWAsIGJ1dCByYXRoZXIgdGhlIHN0YW5kYXJkIGBvY2ZzMl94YXR0cl9zZXRgLiBUaGF0IGRpZmZlcmVuY2UgY291bGQgYmUgY3J1Y2lhbCBmb3IgcGVyZm9ybWFuY2Ugb3IgaW4gdHJpZ2dlcmluZyBzcGVjaWZpYyBjb2RlIHBhdGhzLiBTbywgdGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uLiBJdOKAmXMgdGltZSB0byBnbyBpbnRvIGBvY2ZzMl9zZXRfYWNsYCBpdHNlbGYgYW5kIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyBpbnRlcm5hbGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwODowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvY2ZzMl94YXR0cl9zZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9vY2ZzMi9hY2wuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9vY2ZzMi9hY2wuYz0yMTQ9c3RhdGljIGludCBvY2ZzMl9zZXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsXG4tLVxuZnMvb2NmczIvYWNsLmMtMjQ5LVx0aWYgKGhhbmRsZSlcbmZzL29jZnMyL2FjbC5jOjI1MDpcdFx0cmV0ID0gb2NmczJfeGF0dHJfc2V0X2hhbmRsZShoYW5kbGUsIGlub2RlLCBkaV9iaCwgbmFtZV9pbmRleCxcbmZzL29jZnMyL2FjbC5jLTI1MS1cdFx0XHRcdFx0ICAgICBcJiMzNDtcJiMzNDssIHZhbHVlLCBzaXplLCAwLFxuLS1cbmZzL29jZnMyL2FjbC5jLTI1My1cdGVsc2VcbmZzL29jZnMyL2FjbC5jOjI1NDpcdFx0cmV0ID0gb2NmczJfeGF0dHJfc2V0KGlub2RlLCBuYW1lX2luZGV4LCBcJiMzNDtcJiMzNDssIHZhbHVlLCBzaXplLCAwKTtcbmZzL29jZnMyL2FjbC5jLTI1NS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDg6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU5NDMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSB4YXR0ciBNb2RpZmljYXRpb24gaW4gT0NGUzIqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSXQgc2VlbXMgdGhlIGtleSBoZXJlIGlzIGBvY2ZzMl94YXR0cl9zZXRfaGFuZGxlYCwgYW5kIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgb25seSBjYWxsZWQgd2hlbiBhIHRyYW5zYWN0aW9uIGhhbmRsZSBpcyBwcm92aWRlZCwgd2hpY2ggaXMgZHVyaW5nIGlub2RlIGNyZWF0aW9uLiBUaGVyZWZvcmUsIHRoZSBwYXRjaCYjMzk7cyByZW1vdmFsIG9mIHRoZSB3cml0ZSBsb2NrIGBkb3duX3dyaXRlKCZhbXA7T0NGUzJfSShpbm9kZSktJmd0O2lwX3hhdHRyX3NlbSlgIGZyb20gd2l0aGluIGBvY2ZzMl94YXR0cl9zZXRfaGFuZGxlYCBpcyB0aGUgY3J1Y2lhbCBjaGFuZ2UgdG8gZm9jdXMgb24uCgpTbywgdGhlIGNyaXRpY2FsIHN5bWJvbHMgdG8gdW5kZXJzdGFuZCBhcmU6IGBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xgLCBgb2NmczJfaW5pdF9hY2xgLCBgb2NmczJfYWNsX2luaXRfcHJlcGFyZWAsIGBvY2ZzMl9jYWxjX3hhdHRyX2luaXRgLCBhbmQsIG9mIGNvdXJzZSwgYG9jZnMyX3hhdHRyX3NldF9oYW5kbGVgLgoKTm93LCByZWdhcmRpbmcgY29uZmlndXJhdGlvbiwgaXQgbG9va3MgbGlrZSBgT0NGUzJfRlNgIGlzIHJlbGV2YW50LiBMZXQmIzM5O3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgZGVwZW5kZW5jaWVzIHRoYXQgYXJlbiYjMzk7dCBzdGFuZGFyZC4gSXQgZGVwZW5kcyBvbiBgSU5FVCAmYW1wOyZhbXA7IFNZU0ZTICZhbXA7JmFtcDsgQ09ORklHRlNfRlNgLiBUaGUgaW5zdHJ1Y3Rpb25zIGFyZSBjbGVhcjogaW5jbHVkZSAqbm9uLXN0YW5kYXJkKiBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MuIFNpbmNlIGBJTkVUYCBhbmQgYFNZU0ZTYCBhcmUgY29tbW9uLCBJJiMzOTtsbCBhZGQgYENPTkZJR0ZTX0ZTYCBhbmQgYE9DRlMyX0ZTYCB0byB0aGUgbGlzdC4gSnVzdCB0byBiZSBzdXJlLCBJIHdpbGwgZG91YmxlLWNoZWNrIGBDT05GSUdGU19GU2AuIFRoaXMgbG9va3MgZ29vZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDg6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENPTkZJR0ZTX0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvY29uZmlnZnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9jb25maWdmcy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9jb25maWdmcy9LY29uZmlnOjI6Y29uZmlnIENPTkZJR0ZTX0ZTXG5mcy9jb25maWdmcy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtVc2Vyc3BhY2UtZHJpdmVuIGNvbmZpZ3VyYXRpb24gZmlsZXN5c3RlbVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwODowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjcxOQoJCQkJCQkJb3V0cHV0OiAxODYKCQkJCQkJCXRob3VnaHRzOiA0NTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqT0NGUzIgQUNMIEluaXRpYWxpemF0aW9uIFJlZmFjdG9yaW5nIEFuYWx5c2lzKioKCk9rYXksIHNvIGBDT05GSUdGU19GU2AgaXMgY29uZmlybWVkIGFzIHRyaXN0YXRlLCB0aGF0JiMzOTtzIHN0cmFpZ2h0Zm9yd2FyZC4gTm93LCBsZXQmIzM5O3MgbG9vayBhdCB3aGF0IGBPQ0ZTMl9GU2AgcmVxdWlyZXMuIFRoZSBkZXBlbmRlbmNpZXMgYXJlIGBJTkVUICZhbXA7JmFtcDsgU1lTRlMgJmFtcDsmYW1wOyBDT05GSUdGU19GU2AsIGFuZCBpdCBzZWxlY3RzIGBCVUZGRVJfSEVBRGAsIGBKQkQyYCwgYENSQzMyYCwgYFFVT1RBYCwgYFFVT1RBX1RSRUVgLCBgRlNfUE9TSVhfQUNMYCwgYW5kIGBMRUdBQ1lfRElSRUNUX0lPYC4gU28sIGBPQ0ZTMl9GU2AgYW5kIGBDT05GSUdGU19GU2AgYXJlIHRoZSBrZXkgb25lcyB0byBrZWVwIGFuIGV5ZSBvbi4KCk5leHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpY3Mgb2YgdGhlIHBhdGNoLiBUaGUgZm9jdXMgc3ltYm9scyBhcmU6IGBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xgLCBgb2NmczJfaW5pdF9hY2xgLCBgb2NmczJfYWNsX2luaXRfcHJlcGFyZWAsIGBvY2ZzMl9jYWxjX3hhdHRyX2luaXRgLCBhbmQgYG9jZnMyX3hhdHRyX3NldF9oYW5kbGVgLiBUaG9zZSBhcmUgYWxsIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGFuZCBhcHBlYXIgdG8gYmUgZGlyZWN0bHkgaW52b2x2ZWQuCgpUaGUgcGF0Y2ggaXRzZWxmIGlzIGEgcmVmYWN0b3Jpbmcgb2YgQUNMIGluaXRpYWxpemF0aW9uIHdpdGhpbiBPQ0ZTMiBkdXJpbmcgaW5vZGUgY3JlYXRpb24uIEl0IGFpbXMgdG8gcHJldmVudCBhIGRlYWRsb2NrIGluIGBvY2ZzMl9pbml0X2FjbGAgYnkgcHJlLWNhbGN1bGF0aW5nIEFDTHMgYmVmb3JlIGxvY2tpbmcuIEZ1cnRoZXJtb3JlLCBpdCBhZGRyZXNzZXMgdGhlIHVzZSBvZiBgaXBfeGF0dHJfc2VtYCBsb2NrIHdpdGhpbiBgb2NmczJfeGF0dHJfc2V0X2hhbmRsZWAsIGFuZCBJIHNlZSB0aGUgcGF0Y2ggcmVtb3ZlcyBpdCwgYmVjYXVzZSBpdCBpcyBvbmx5IGNhbGxlZCBvbiBuZXcgaW5vZGVzLgoKRWZmZWN0aXZlbHksIHRoZSBwYXRjaCBtb2RpZmllcyBob3cgQUNMcyBhcmUgY2FsY3VsYXRlZCBhbmQgc2V0IHdoZW4gbmV3IGlub2RlcyBhcmUgY3JlYXRlZCDigJMgdGhpbmdzIGxpa2UgYG1rbm9kYCwgYG1rZGlyYCwgYGNyZWF0ZWAsIGBzeW1saW5rYCwgYW5kIGByZWZsaW5rYC4gVGhpcyBjbGVhcmx5IGFmZmVjdHMgdGhlIGNvcmUgT0NGUzIgbG9naWMgYW5kIGlzIHJlYWNoYWJsZSB0aHJvdWdoIHN0YW5kYXJkIFZGUyBzeXNjYWxscyB3aGVuIG9wZXJhdGluZyBvbiBhbiBPQ0ZTMiBmaWxlc3lzdGVtLiBUaGUgJiMzNDtXb3J0aEZ1enppbmcmIzM0OyBmbGFnIGNvbmZpcm1zIHRoaXMgaXMgYSBnb29kIGFyZWEgdG8gZm9jdXMgb24uCgpTbywgdGhlIGVuYWJsZSBjb25maWdzIGFyZSBgT0NGUzJfRlNgIGFuZCBgQ09ORklHRlNfRlNgLiBSaWdodCwgbGV0JiMzOTtzIHN1Ym1pdCB0aGVzZSByZXN1bHRzIHdpdGggYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDg6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09DRlMyX0ZTJiMzNDssCiAgICAmIzM0O0NPTkZJR0ZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7b2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsJiMzNDssCiAgICAmIzM0O29jZnMyX2luaXRfYWNsJiMzNDssCiAgICAmIzM0O29jZnMyX2FjbF9pbml0X3ByZXBhcmUmIzM0OywKICAgICYjMzQ7b2NmczJfY2FsY194YXR0cl9pbml0JiMzNDssCiAgICAmIzM0O29jZnMyX3hhdHRyX3NldF9oYW5kbGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIEFDTCBpbml0aWFsaXphdGlvbiBkdXJpbmcgaW5vZGUgY3JlYXRpb24gaW4gT0NGUzIgdG8gcHJldmVudCBkZWFkbG9ja3MuIEl0IG1vZGlmaWVzIGhvdyBBQ0xzIGFyZSBjYWxjdWxhdGVkIGFuZCBzZXQgZm9yIG5ldyBpbm9kZXMgKGUuZy4sIHZpYSBta25vZCwgbWtkaXIsIGNyZWF0ZSwgc3ltbGluaywgcmVmbGluaykuIFRoZSBjaGFuZ2VzIGFyZSBpbiBjb3JlIE9DRlMyIGxvZ2ljIGFuZCBhcmUgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBWRlMgc3lzY2FsbHMgd2hlbiBvcGVyYXRpbmcgb24gYW4gT0NGUzIgZmlsZXN5c3RlbS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7T0NGUzJfRlMmIzM0OywKICAgICYjMzQ7Q09ORklHRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2wmIzM0OywKICAgICYjMzQ7b2NmczJfaW5pdF9hY2wmIzM0OywKICAgICYjMzQ7b2NmczJfYWNsX2luaXRfcHJlcGFyZSYjMzQ7LAogICAgJiMzNDtvY2ZzMl9jYWxjX3hhdHRyX2luaXQmIzM0OywKICAgICYjMzQ7b2NmczJfeGF0dHJfc2V0X2hhbmRsZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgQUNMIGluaXRpYWxpemF0aW9uIGR1cmluZyBpbm9kZSBjcmVhdGlvbiBpbiBPQ0ZTMiB0byBwcmV2ZW50IGRlYWRsb2Nrcy4gSXQgbW9kaWZpZXMgaG93IEFDTHMgYXJlIGNhbGN1bGF0ZWQgYW5kIHNldCBmb3IgbmV3IGlub2RlcyAoZS5nLiwgdmlhIG1rbm9kLCBta2RpciwgY3JlYXRlLCBzeW1saW5rLCByZWZsaW5rKS4gVGhlIGNoYW5nZXMgYXJlIGluIGNvcmUgT0NGUzIgbG9naWMgYW5kIGFyZSByZWFjaGFibGUgdmlhIHN0YW5kYXJkIFZGUyBzeXNjYWxscyB3aGVuIG9wZXJhdGluZyBvbiBhbiBPQ0ZTMiBmaWxlc3lzdGVtLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMzBUMDg6MDc6MzAuNjc4OTMwODQyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI0ODM5NDgwMjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9DRlMyX0ZTXCIsXG4gICAgXCJDT05GSUdGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbFwiLFxuICAgIFwib2NmczJfaW5pdF9hY2xcIixcbiAgICBcIm9jZnMyX2FjbF9pbml0X3ByZXBhcmVcIixcbiAgICBcIm9jZnMyX2NhbGNfeGF0dHJfaW5pdFwiLFxuICAgIFwib2NmczJfeGF0dHJfc2V0X2hhbmRsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBBQ0wgaW5pdGlhbGl6YXRpb24gZHVyaW5nIGlub2RlIGNyZWF0aW9uIGluIE9DRlMyIHRvIHByZXZlbnQgZGVhZGxvY2tzLiBJdCBtb2RpZmllcyBob3cgQUNMcyBhcmUgY2FsY3VsYXRlZCBhbmQgc2V0IGZvciBuZXcgaW5vZGVzIChlLmcuLCB2aWEgbWtub2QsIG1rZGlyLCBjcmVhdGUsIHN5bWxpbmssIHJlZmxpbmspLiBUaGUgY2hhbmdlcyBhcmUgaW4gY29yZSBPQ0ZTMiBsb2dpYyBhbmQgYXJlIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgVkZTIHN5c2NhbGxzIHdoZW4gb3BlcmF0aW5nIG9uIGFuIE9DRlMyIGZpbGVzeXN0ZW0uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDA4OjA3OjMwLjY3ODkzODAyMloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTIxMzY1MzE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNzI4MzQzYjM1MDM5ZTA2NzU0N2RlYmMwNjFlMmNkYWJlMWViMDZjY1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEp1bCAzMCAwODowNzoyOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9hY2wuYyBiL2ZzL29jZnMyL2FjbC5jXFxuaW5kZXggYWYxZTJjZWRiMjE3Zi4uMDkwZWM2MGZiNTc2YSAxMDA2NDRcXG4tLS0gYS9mcy9vY2ZzMi9hY2wuY1xcbisrKyBiL2ZzL29jZnMyL2FjbC5jXFxuQEAgLTExMCw4ICsxMTAsNyBAQCBzdGF0aWMgdm9pZCAqb2NmczJfYWNsX3RvX3hhdHRyKGNvbnN0IHN0cnVjdCBwb3NpeF9hY2wgKmFjbCwgc2l6ZV90ICpzaXplKVxcbiBcXHRyZXR1cm4gb2NmczJfYWNsO1xcbiB9XFxuIFxcbi1zdGF0aWMgc3RydWN0IHBvc2l4X2FjbCAqb2NmczJfZ2V0X2FjbF9ub2xvY2soc3RydWN0IGlub2RlICppbm9kZSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICAgaW50IHR5cGUsXFxuK3N0YXRpYyBzdHJ1Y3QgcG9zaXhfYWNsICpvY2ZzMl9nZXRfYWNsX25vbG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaClcXG4ge1xcbiBcXHRpbnQgbmFtZV9pbmRleDtcXG5AQCAtMzQ5LDYzICszNDgsMTA1IEBAIGludCBvY2ZzMl9hY2xfY2htb2Qoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcXG4gICogSW5pdGlhbGl6ZSB0aGUgQUNMcyBvZiBhIG5ldyBpbm9kZS4gSWYgcGFyZW50IGRpcmVjdG9yeSBoYXMgZGVmYXVsdCBBQ0wsXFxuICAqIHRoZW4gY2xvbmUgdG8gbmV3IGlub2RlLiBDYWxsZWQgZnJvbSBvY2ZzMl9ta25vZC5cXG4gICovXFxuLWludCBvY2ZzMl9pbml0X2FjbChoYW5kbGVfdCAqaGFuZGxlLFxcbi1cXHRcXHQgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi1cXHRcXHQgICBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tXFx0XFx0ICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCxcXG4tXFx0XFx0ICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJfYmgsXFxuLVxcdFxcdCAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjLFxcbi1cXHRcXHQgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqZGF0YV9hYylcXG4rdm9pZCBvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlKHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgKnN0YXRlKVxcbit7XFxuK1xcdHBvc2l4X2FjbF9yZWxlYXNlKHN0YXRlLVxcdTAwM2VkZWZhdWx0X2FjbCk7XFxuK1xcdHBvc2l4X2FjbF9yZWxlYXNlKHN0YXRlLVxcdTAwM2VhY2wpO1xcbitcXHRzdGF0ZS1cXHUwMDNlZGVmYXVsdF9hY2wgPSBOVUxMO1xcbitcXHRzdGF0ZS1cXHUwMDNlYWNsID0gTlVMTDtcXG4rfVxcbitcXG4raW50IG9jZnMyX2FjbF9pbml0X3ByZXBhcmUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXFxuK1xcdFxcdFxcdCAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlyX2JoLFxcbitcXHRcXHRcXHQgICBzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICpzdGF0ZSlcXG4ge1xcbiBcXHRzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGlub2RlLVxcdTAwM2VpX3NiKTtcXG4tXFx0c3RydWN0IHBvc2l4X2FjbCAqYWNsID0gTlVMTDtcXG4tXFx0aW50IHJldCA9IDAsIHJldDI7XFxuLVxcdHVtb2RlX3QgbW9kZTtcXG4tXFxuLVxcdGlmICghU19JU0xOSyhpbm9kZS1cXHUwMDNlaV9tb2RlKSkge1xcbi1cXHRcXHRpZiAob3NiLVxcdTAwM2VzX21vdW50X29wdCBcXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkge1xcbi1cXHRcXHRcXHRkb3duX3JlYWQoXFx1MDAyNk9DRlMyX0koZGlyKS1cXHUwMDNlaXBfeGF0dHJfc2VtKTtcXG4tXFx0XFx0XFx0YWNsID0gb2NmczJfZ2V0X2FjbF9ub2xvY2soZGlyLCBBQ0xfVFlQRV9ERUZBVUxULFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICBkaXJfYmgpO1xcbi1cXHRcXHRcXHR1cF9yZWFkKFxcdTAwMjZPQ0ZTMl9JKGRpciktXFx1MDAzZWlwX3hhdHRyX3NlbSk7XFxuLVxcdFxcdFxcdGlmIChJU19FUlIoYWNsKSlcXG4tXFx0XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIoYWNsKTtcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcbitcXHRzdGF0ZS1cXHUwMDNlZGVmYXVsdF9hY2wgPSBOVUxMO1xcbitcXHRzdGF0ZS1cXHUwMDNlYWNsID0gTlVMTDtcXG4rXFx0c3RhdGUtXFx1MDAzZW1vZGUgPSBpbm9kZS1cXHUwMDNlaV9tb2RlO1xcbitcXG4rXFx0aWYgKFNfSVNMTksoaW5vZGUtXFx1MDAzZWlfbW9kZSkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aWYgKG9zYi1cXHUwMDNlc19tb3VudF9vcHQgXFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHtcXG4rXFx0XFx0ZG93bl9yZWFkKFxcdTAwMjZPQ0ZTMl9JKGRpciktXFx1MDAzZWlwX3hhdHRyX3NlbSk7XFxuK1xcdFxcdHN0YXRlLVxcdTAwM2VkZWZhdWx0X2FjbCA9XFxuK1xcdFxcdFxcdG9jZnMyX2dldF9hY2xfbm9sb2NrKGRpciwgQUNMX1RZUEVfREVGQVVMVCwgZGlyX2JoKTtcXG4rXFx0XFx0dXBfcmVhZChcXHUwMDI2T0NGUzJfSShkaXIpLVxcdTAwM2VpcF94YXR0cl9zZW0pO1xcbitcXHRcXHRpZiAoSVNfRVJSKHN0YXRlLVxcdTAwM2VkZWZhdWx0X2FjbCkpIHtcXG4rXFx0XFx0XFx0cmV0ID0gUFRSX0VSUihzdGF0ZS1cXHUwMDNlZGVmYXVsdF9hY2wpO1xcbitcXHRcXHRcXHRzdGF0ZS1cXHUwMDNlZGVmYXVsdF9hY2wgPSBOVUxMO1xcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXHRcXHR9XFxuLVxcdFxcdGlmICghYWNsKSB7XFxuLVxcdFxcdFxcdG1vZGUgPSBpbm9kZS1cXHUwMDNlaV9tb2RlIFxcdTAwMjYgfmN1cnJlbnRfdW1hc2soKTtcXG4tXFx0XFx0XFx0cmV0ID0gb2NmczJfYWNsX3NldF9tb2RlKGlub2RlLCBkaV9iaCwgaGFuZGxlLCBtb2RlKTtcXG4tXFx0XFx0XFx0aWYgKHJldCkge1xcbi1cXHRcXHRcXHRcXHRtbG9nX2Vycm5vKHJldCk7XFxuK1xcdFxcdGlmIChzdGF0ZS1cXHUwMDNlZGVmYXVsdF9hY2wpIHtcXG4rXFx0XFx0XFx0c3RhdGUtXFx1MDAzZWFjbCA9IHBvc2l4X2FjbF9kdXAoc3RhdGUtXFx1MDAzZWRlZmF1bHRfYWNsKTtcXG4rXFx0XFx0XFx0aWYgKCFzdGF0ZS1cXHUwMDNlYWNsKSB7XFxuK1xcdFxcdFxcdFxcdHJldCA9IC1FTk9NRU07XFxuIFxcdFxcdFxcdFxcdGdvdG8gY2xlYW51cDtcXG4gXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRyZXQgPSBfX3Bvc2l4X2FjbF9jcmVhdGUoXFx1MDAyNnN0YXRlLVxcdTAwM2VhY2wsIEdGUF9OT0ZTLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNnN0YXRlLVxcdTAwM2Vtb2RlKTtcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFx0XFx0XFx0aWYgKHJldCA9PSAwKSB7XFxuK1xcdFxcdFxcdFxcdHBvc2l4X2FjbF9yZWxlYXNlKHN0YXRlLVxcdTAwM2VhY2wpO1xcbitcXHRcXHRcXHRcXHRzdGF0ZS1cXHUwMDNlYWNsID0gTlVMTDtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRpZiAoIVNfSVNESVIoaW5vZGUtXFx1MDAzZWlfbW9kZSkpIHtcXG4rXFx0XFx0XFx0XFx0cG9zaXhfYWNsX3JlbGVhc2Uoc3RhdGUtXFx1MDAzZWRlZmF1bHRfYWNsKTtcXG4rXFx0XFx0XFx0XFx0c3RhdGUtXFx1MDAzZWRlZmF1bHRfYWNsID0gTlVMTDtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRzdGF0ZS1cXHUwMDNlbW9kZSBcXHUwMDI2PSB+Y3VycmVudF91bWFzaygpO1xcbiBcXHRcXHR9XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHN0YXRlLVxcdTAwM2Vtb2RlIFxcdTAwMjY9IH5jdXJyZW50X3VtYXNrKCk7XFxuIFxcdH1cXG4tXFx0aWYgKChvc2ItXFx1MDAzZXNfbW91bnRfb3B0IFxcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSBcXHUwMDI2XFx1MDAyNiBhY2wpIHtcXG4tXFx0XFx0aWYgKFNfSVNESVIoaW5vZGUtXFx1MDAzZWlfbW9kZSkpIHtcXG4rXFxuK1xcdHJldHVybiAwO1xcbitjbGVhbnVwOlxcbitcXHRvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlKHN0YXRlKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4raW50IG9jZnMyX2luaXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuK1xcdFxcdCAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgsXFxuK1xcdFxcdCAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjLFxcbitcXHRcXHQgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqZGF0YV9hYyxcXG4rXFx0XFx0ICAgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqc3RhdGUpXFxuK3tcXG4rXFx0c3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihpbm9kZS1cXHUwMDNlaV9zYik7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXG4rXFx0aWYgKFNfSVNMTksoaW5vZGUtXFx1MDAzZWlfbW9kZSkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aWYgKG9zYi1cXHUwMDNlc19tb3VudF9vcHQgXFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHtcXG4rXFx0XFx0aWYgKFNfSVNESVIoaW5vZGUtXFx1MDAzZWlfbW9kZSkgXFx1MDAyNlxcdTAwMjYgc3RhdGUtXFx1MDAzZWRlZmF1bHRfYWNsKSB7XFxuIFxcdFxcdFxcdHJldCA9IG9jZnMyX3NldF9hY2woaGFuZGxlLCBpbm9kZSwgZGlfYmgsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBBQ0xfVFlQRV9ERUZBVUxULCBhY2wsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBtZXRhX2FjLCBkYXRhX2FjKTtcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIEFDTF9UWVBFX0RFRkFVTFQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBzdGF0ZS1cXHUwMDNlZGVmYXVsdF9hY2wsIG1ldGFfYWMsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBkYXRhX2FjKTtcXG4gXFx0XFx0XFx0aWYgKHJldClcXG4tXFx0XFx0XFx0XFx0Z290byBjbGVhbnVwO1xcbitcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXHRcXHR9XFxuLVxcdFxcdG1vZGUgPSBpbm9kZS1cXHUwMDNlaV9tb2RlO1xcbi1cXHRcXHRyZXQgPSBfX3Bvc2l4X2FjbF9jcmVhdGUoXFx1MDAyNmFjbCwgR0ZQX05PRlMsIFxcdTAwMjZtb2RlKTtcXG4tXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLVxcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4gXFxuLVxcdFxcdHJldDIgPSBvY2ZzMl9hY2xfc2V0X21vZGUoaW5vZGUsIGRpX2JoLCBoYW5kbGUsIG1vZGUpO1xcbi1cXHRcXHRpZiAocmV0Mikge1xcbi1cXHRcXHRcXHRtbG9nX2Vycm5vKHJldDIpO1xcbi1cXHRcXHRcXHRyZXQgPSByZXQyO1xcbi1cXHRcXHRcXHRnb3RvIGNsZWFudXA7XFxuLVxcdFxcdH1cXG4tXFx0XFx0aWYgKHJldCBcXHUwMDNlIDApIHtcXG4tXFx0XFx0XFx0cmV0ID0gb2NmczJfc2V0X2FjbChoYW5kbGUsIGlub2RlLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgZGlfYmgsIEFDTF9UWVBFX0FDQ0VTUyxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIGFjbCwgbWV0YV9hYywgZGF0YV9hYyk7XFxuK1xcdHJldCA9IG9jZnMyX2FjbF9zZXRfbW9kZShpbm9kZSwgZGlfYmgsIGhhbmRsZSwgc3RhdGUtXFx1MDAzZW1vZGUpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdG1sb2dfZXJybm8ocmV0KTtcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKG9zYi1cXHUwMDNlc19tb3VudF9vcHQgXFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHtcXG4rXFx0XFx0aWYgKHN0YXRlLVxcdTAwM2VhY2wpIHtcXG4rXFx0XFx0XFx0cmV0ID0gb2NmczJfc2V0X2FjbChoYW5kbGUsIGlub2RlLCBkaV9iaCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIEFDTF9UWVBFX0FDQ0VTUywgc3RhdGUtXFx1MDAzZWFjbCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIG1ldGFfYWMsIGRhdGFfYWMpO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4tY2xlYW51cDpcXG4tXFx0cG9zaXhfYWNsX3JlbGVhc2UoYWNsKTtcXG4rXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvZnMvb2NmczIvYWNsLmggYi9mcy9vY2ZzMi9hY2wuaFxcbmluZGV4IDY2N2M2ZjAzZmE2MDYuLmE5MWY5Y2UyNzhkNmQgMTAwNjQ0XFxuLS0tIGEvZnMvb2NmczIvYWNsLmhcXG4rKysgYi9mcy9vY2ZzMi9hY2wuaFxcbkBAIC0yMCw5ICsyMCwyMCBAQCBzdHJ1Y3QgcG9zaXhfYWNsICpvY2ZzMl9pb3BfZ2V0X2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSwgYm9vbCByY3UpO1xcbiBpbnQgb2NmczJfaW9wX3NldF9hY2woc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4gXFx0XFx0ICAgICAgc3RydWN0IHBvc2l4X2FjbCAqYWNsLCBpbnQgdHlwZSk7XFxuIGV4dGVybiBpbnQgb2NmczJfYWNsX2NobW9kKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKik7XFxuLWV4dGVybiBpbnQgb2NmczJfaW5pdF9hY2woaGFuZGxlX3QgKiwgc3RydWN0IGlub2RlICosIHN0cnVjdCBpbm9kZSAqLFxcbi1cXHRcXHRcXHQgIHN0cnVjdCBidWZmZXJfaGVhZCAqLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKixcXG4tXFx0XFx0XFx0ICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqLFxcbi1cXHRcXHRcXHQgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICopO1xcbitzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlIHtcXG4rXFx0c3RydWN0IHBvc2l4X2FjbCAqZGVmYXVsdF9hY2w7XFxuK1xcdHN0cnVjdCBwb3NpeF9hY2wgKmFjbDtcXG4rXFx0dW1vZGVfdCBtb2RlO1xcbit9O1xcbitcXG4raW50IG9jZnMyX2FjbF9pbml0X3ByZXBhcmUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXFxuK1xcdFxcdFxcdCAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlyX2JoLFxcbitcXHRcXHRcXHQgICBzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICpzdGF0ZSk7XFxuK3ZvaWQgb2NmczJfYWNsX2luaXRfcmVsZWFzZShzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICpzdGF0ZSk7XFxuK2ludCBvY2ZzMl9pbml0X2FjbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbitcXHRcXHQgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoLFxcbitcXHRcXHQgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYyxcXG4rXFx0XFx0ICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmRhdGFfYWMsXFxuK1xcdFxcdCAgIHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgKnN0YXRlKTtcXG4gXFxuICNlbmRpZiAvKiBPQ0ZTMl9BQ0xfSCAqL1xcbmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9uYW1laS5jIGIvZnMvb2NmczIvbmFtZWkuY1xcbmluZGV4IDEyNzc2NjZjNzdjZDIuLmVhMzdhNTA1ODA4OTAgMTAwNjQ0XFxuLS0tIGEvZnMvb2NmczIvbmFtZWkuY1xcbisrKyBiL2ZzL29jZnMyL25hbWVpLmNcXG5AQCAtMjU2LDYgKzI1Niw3IEBAIHN0YXRpYyBpbnQgb2NmczJfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuIFxcdHNpZ3NldF90IG9sZHNldDtcXG4gXFx0aW50IGRpZF9ibG9ja19zaWduYWxzID0gMDtcXG4gXFx0c3RydWN0IG9jZnMyX2RlbnRyeV9sb2NrICpkbCA9IE5VTEw7XFxuK1xcdHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgYWNsX3N0YXRlID0geyAwIH07XFxuIFxcbiBcXHR0cmFjZV9vY2ZzMl9ta25vZChkaXIsIGRlbnRyeSwgZGVudHJ5LVxcdTAwM2VkX25hbWUubGVuLCBkZW50cnktXFx1MDAzZWRfbmFtZS5uYW1lLFxcbiBcXHRcXHRcXHQgICh1bnNpZ25lZCBsb25nIGxvbmcpT0NGUzJfSShkaXIpLVxcdTAwM2VpcF9ibGtubyxcXG5AQCAtMzMwLDEwICszMzEsMTQgQEAgc3RhdGljIGludCBvY2ZzMl9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbitcXHRzdGF0dXMgPSBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlKGlub2RlLCBkaXIsIHBhcmVudF9mZV9iaCwgXFx1MDAyNmFjbF9zdGF0ZSk7XFxuK1xcdGlmIChzdGF0dXMgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGxlYXZlO1xcbitcXG4gXFx0LyogY2FsY3VsYXRlIG1ldGEgZGF0YS9jbHVzdGVycyBmb3Igc2V0dGluZyBzZWN1cml0eSBhbmQgYWNsIHhhdHRyICovXFxuLVxcdHN0YXR1cyA9IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChkaXIsIHBhcmVudF9mZV9iaCwgbW9kZSxcXG4tXFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZzaSwgXFx1MDAyNndhbnRfY2x1c3RlcnMsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2eGF0dHJfY3JlZGl0cywgXFx1MDAyNndhbnRfbWV0YSk7XFxuK1xcdHN0YXR1cyA9IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChkaXIsIG1vZGUsIFxcdTAwMjZzaSwgXFx1MDAyNndhbnRfY2x1c3RlcnMsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2eGF0dHJfY3JlZGl0cywgXFx1MDAyNndhbnRfbWV0YSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZhY2xfc3RhdGUpO1xcbiBcXHRpZiAoc3RhdHVzIFxcdTAwM2MgMCkge1xcbiBcXHRcXHRtbG9nX2Vycm5vKHN0YXR1cyk7XFxuIFxcdFxcdGdvdG8gbGVhdmU7XFxuQEAgLTQxMSw4ICs0MTYsOCBAQCBzdGF0aWMgaW50IG9jZnMyX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbiBcXHRcXHRpbmNfbmxpbmsoZGlyKTtcXG4gXFx0fVxcbiBcXG4tXFx0c3RhdHVzID0gb2NmczJfaW5pdF9hY2woaGFuZGxlLCBpbm9kZSwgZGlyLCBuZXdfZmVfYmgsIHBhcmVudF9mZV9iaCxcXG4tXFx0XFx0XFx0IG1ldGFfYWMsIGRhdGFfYWMpO1xcbitcXHRzdGF0dXMgPSBvY2ZzMl9pbml0X2FjbChoYW5kbGUsIGlub2RlLCBuZXdfZmVfYmgsIG1ldGFfYWMsIGRhdGFfYWMsXFxuK1xcdFxcdFxcdFxcdFxcdTAwMjZhY2xfc3RhdGUpO1xcbiBcXG4gXFx0aWYgKHN0YXR1cyBcXHUwMDNjIDApIHtcXG4gXFx0XFx0bWxvZ19lcnJubyhzdGF0dXMpO1xcbkBAIC00NzcsNiArNDgyLDggQEAgc3RhdGljIGludCBvY2ZzMl9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4gXFx0YnJlbHNlKHBhcmVudF9mZV9iaCk7XFxuIFxcdGtmcmVlKHNpLnZhbHVlKTtcXG4gXFxuK1xcdG9jZnMyX2FjbF9pbml0X3JlbGVhc2UoXFx1MDAyNmFjbF9zdGF0ZSk7XFxuK1xcbiBcXHRvY2ZzMl9mcmVlX2Rpcl9sb29rdXBfcmVzdWx0KFxcdTAwMjZsb29rdXApO1xcbiBcXG4gXFx0aWYgKGlub2RlX2FjKVxcbmRpZmYgLS1naXQgYS9mcy9vY2ZzMi94YXR0ci5jIGIvZnMvb2NmczIveGF0dHIuY1xcbmluZGV4IGZjZGRkM2MxM2FjZGQuLjg2ZjAyOTM2ODFmY2MgMTAwNjQ0XFxuLS0tIGEvZnMvb2NmczIveGF0dHIuY1xcbisrKyBiL2ZzL29jZnMyL3hhdHRyLmNcXG5AQCAtNjExLDEzICs2MTEsMTAgQEAgaW50IG9jZnMyX2NhbGNfc2VjdXJpdHlfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpcixcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4taW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tXFx0XFx0XFx0ICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpcl9iaCxcXG4tXFx0XFx0XFx0ICB1bW9kZV90IG1vZGUsXFxuK2ludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICpkaXIsIHVtb2RlX3QgbW9kZSxcXG4gXFx0XFx0XFx0ICBzdHJ1Y3Qgb2NmczJfc2VjdXJpdHlfeGF0dHJfaW5mbyAqc2ksXFxuLVxcdFxcdFxcdCAgaW50ICp3YW50X2NsdXN0ZXJzLFxcbi1cXHRcXHRcXHQgIGludCAqeGF0dHJfY3JlZGl0cyxcXG4tXFx0XFx0XFx0ICBpbnQgKndhbnRfbWV0YSlcXG4rXFx0XFx0XFx0ICBpbnQgKndhbnRfY2x1c3RlcnMsIGludCAqeGF0dHJfY3JlZGl0cyxcXG4rXFx0XFx0XFx0ICBpbnQgKndhbnRfbWV0YSwgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqYWNsX3N0YXRlKVxcbiB7XFxuIFxcdGludCByZXQgPSAwO1xcbiBcXHRzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGRpci1cXHUwMDNlaV9zYik7XFxuQEAgLTYyOCwxOSArNjI1LDE1IEBAIGludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICpkaXIsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgc2ktXFx1MDAzZXZhbHVlX2xlbik7XFxuIFxcbiBcXHRpZiAob3NiLVxcdTAwM2VzX21vdW50X29wdCBcXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkge1xcbi1cXHRcXHRkb3duX3JlYWQoXFx1MDAyNk9DRlMyX0koZGlyKS1cXHUwMDNlaXBfeGF0dHJfc2VtKTtcXG4tXFx0XFx0YWNsX2xlbiA9IG9jZnMyX3hhdHRyX2dldF9ub2xvY2soZGlyLCBkaXJfYmgsXFxuLVxcdFxcdFxcdFxcdFxcdE9DRlMyX1hBVFRSX0lOREVYX1BPU0lYX0FDTF9ERUZBVUxULFxcbi1cXHRcXHRcXHRcXHRcXHRcXFwiXFxcIiwgTlVMTCwgMCk7XFxuLVxcdFxcdHVwX3JlYWQoXFx1MDAyNk9DRlMyX0koZGlyKS1cXHUwMDNlaXBfeGF0dHJfc2VtKTtcXG4tXFx0XFx0aWYgKGFjbF9sZW4gXFx1MDAzZSAwKSB7XFxuLVxcdFxcdFxcdGFfc2l6ZSA9IG9jZnMyX3hhdHRyX2VudHJ5X3JlYWxfc2l6ZSgwLCBhY2xfbGVuKTtcXG4tXFx0XFx0XFx0aWYgKFNfSVNESVIobW9kZSkpXFxuLVxcdFxcdFxcdFxcdGFfc2l6ZSBcXHUwMDNjXFx1MDAzYz0gMTtcXG4tXFx0XFx0fSBlbHNlIGlmIChhY2xfbGVuICE9IDAgXFx1MDAyNlxcdTAwMjYgYWNsX2xlbiAhPSAtRU5PREFUQSkge1xcbi1cXHRcXHRcXHRyZXQgPSBhY2xfbGVuO1xcbi1cXHRcXHRcXHRtbG9nX2Vycm5vKHJldCk7XFxuLVxcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdGlmIChhY2xfc3RhdGUtXFx1MDAzZWRlZmF1bHRfYWNsIFxcdTAwMjZcXHUwMDI2IFNfSVNESVIobW9kZSkpIHtcXG4rXFx0XFx0XFx0YWNsX2xlbiA9IGFjbF9zdGF0ZS1cXHUwMDNlZGVmYXVsdF9hY2wtXFx1MDAzZWFfY291bnQgKlxcbitcXHRcXHRcXHRcXHQgIHNpemVvZihzdHJ1Y3Qgb2NmczJfYWNsX2VudHJ5KTtcXG4rXFx0XFx0XFx0YV9zaXplICs9IG9jZnMyX3hhdHRyX2VudHJ5X3JlYWxfc2l6ZSgwLCBhY2xfbGVuKTtcXG4rXFx0XFx0fVxcbitcXHRcXHRpZiAoYWNsX3N0YXRlLVxcdTAwM2VhY2wpIHtcXG4rXFx0XFx0XFx0YWNsX2xlbiA9IGFjbF9zdGF0ZS1cXHUwMDNlYWNsLVxcdTAwM2VhX2NvdW50ICpcXG4rXFx0XFx0XFx0XFx0ICBzaXplb2Yoc3RydWN0IG9jZnMyX2FjbF9lbnRyeSk7XFxuK1xcdFxcdFxcdGFfc2l6ZSArPSBvY2ZzMl94YXR0cl9lbnRyeV9yZWFsX3NpemUoMCwgYWNsX2xlbik7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG5AQCAtNjgzLDE0ICs2NzYsMzMgQEAgaW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpcixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgbmV3X2NsdXN0ZXJzKTtcXG4gXFx0XFx0KndhbnRfY2x1c3RlcnMgKz0gbmV3X2NsdXN0ZXJzO1xcbiBcXHR9XFxuLVxcdGlmIChvc2ItXFx1MDAzZXNfbW91bnRfb3B0IFxcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICBhY2xfbGVuIFxcdTAwM2UgT0NGUzJfWEFUVFJfSU5MSU5FX1NJWkUpIHtcXG4tXFx0XFx0LyogZm9yIGRpcmVjdG9yeSwgaXQgaGFzIERFRkFVTFQgYW5kIEFDQ0VTUyB0d28gdHlwZXMgb2YgYWNscyAqL1xcbi1cXHRcXHRuZXdfY2x1c3RlcnMgPSAoU19JU0RJUihtb2RlKSA/IDIgOiAxKSAqXFxuLVxcdFxcdFxcdFxcdG9jZnMyX2NsdXN0ZXJzX2Zvcl9ieXRlcyhkaXItXFx1MDAzZWlfc2IsIGFjbF9sZW4pO1xcbi1cXHRcXHQqeGF0dHJfY3JlZGl0cyArPSBvY2ZzMl9jbHVzdGVyc190b19ibG9ja3MoZGlyLVxcdTAwM2VpX3NiLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBuZXdfY2x1c3RlcnMpO1xcbi1cXHRcXHQqd2FudF9jbHVzdGVycyArPSBuZXdfY2x1c3RlcnM7XFxuK1xcdGlmIChvc2ItXFx1MDAzZXNfbW91bnRfb3B0IFxcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7XFxuK1xcdFxcdGlmIChhY2xfc3RhdGUtXFx1MDAzZWRlZmF1bHRfYWNsIFxcdTAwMjZcXHUwMDI2IFNfSVNESVIobW9kZSkpIHtcXG4rXFx0XFx0XFx0YWNsX2xlbiA9IGFjbF9zdGF0ZS1cXHUwMDNlZGVmYXVsdF9hY2wtXFx1MDAzZWFfY291bnQgKlxcbitcXHRcXHRcXHRcXHQgIHNpemVvZihzdHJ1Y3Qgb2NmczJfYWNsX2VudHJ5KTtcXG4rXFx0XFx0XFx0aWYgKGFjbF9sZW4gXFx1MDAzZSBPQ0ZTMl9YQVRUUl9JTkxJTkVfU0laRSkge1xcbitcXHRcXHRcXHRcXHRuZXdfY2x1c3RlcnMgPVxcbitcXHRcXHRcXHRcXHRcXHRvY2ZzMl9jbHVzdGVyc19mb3JfYnl0ZXMoZGlyLVxcdTAwM2VpX3NiLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgYWNsX2xlbik7XFxuK1xcdFxcdFxcdFxcdCp4YXR0cl9jcmVkaXRzICs9XFxuK1xcdFxcdFxcdFxcdFxcdG9jZnMyX2NsdXN0ZXJzX3RvX2Jsb2NrcyhkaXItXFx1MDAzZWlfc2IsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCBuZXdfY2x1c3RlcnMpO1xcbitcXHRcXHRcXHRcXHQqd2FudF9jbHVzdGVycyArPSBuZXdfY2x1c3RlcnM7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0fVxcbitcXHRcXHRpZiAoYWNsX3N0YXRlLVxcdTAwM2VhY2wpIHtcXG4rXFx0XFx0XFx0YWNsX2xlbiA9IGFjbF9zdGF0ZS1cXHUwMDNlYWNsLVxcdTAwM2VhX2NvdW50ICpcXG4rXFx0XFx0XFx0XFx0ICBzaXplb2Yoc3RydWN0IG9jZnMyX2FjbF9lbnRyeSk7XFxuK1xcdFxcdFxcdGlmIChhY2xfbGVuIFxcdTAwM2UgT0NGUzJfWEFUVFJfSU5MSU5FX1NJWkUpIHtcXG4rXFx0XFx0XFx0XFx0bmV3X2NsdXN0ZXJzID1cXG4rXFx0XFx0XFx0XFx0XFx0b2NmczJfY2x1c3RlcnNfZm9yX2J5dGVzKGRpci1cXHUwMDNlaV9zYixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0IGFjbF9sZW4pO1xcbitcXHRcXHRcXHRcXHQqeGF0dHJfY3JlZGl0cyArPVxcbitcXHRcXHRcXHRcXHRcXHRvY2ZzMl9jbHVzdGVyc190b19ibG9ja3MoZGlyLVxcdTAwM2VpX3NiLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgbmV3X2NsdXN0ZXJzKTtcXG4rXFx0XFx0XFx0XFx0KndhbnRfY2x1c3RlcnMgKz0gbmV3X2NsdXN0ZXJzO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdH1cXG4gXFx0fVxcbiBcXG4gXFx0cmV0dXJuIHJldDtcXG5AQCAtMzQ4Myw5ICszNDk1LDEwIEBAIHN0YXRpYyBpbnQgX19vY2ZzMl94YXR0cl9zZXRfaGFuZGxlKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIH1cXG4gXFxuIC8qXFxuLSAqIFRoaXMgZnVuY3Rpb24gb25seSBjYWxsZWQgZHVpbmcgY3JlYXRpbmcgaW5vZGVcXG4tICogZm9yIGluaXQgc2VjdXJpdHkvYWNsIHhhdHRycyBvZiB0aGUgbmV3IGlub2RlLlxcbi0gKiBBbGwgdHJhbnNhbmN0aW9uIGNyZWRpdHMgaGF2ZSBiZWVuIHJlc2VydmVkIGluIG1rbm9kLlxcbisgKiBUaGlzIGhlbHBlciBpcyBvbmx5IGZvciBzZXR0aW5nIGluaXRpYWwgQUNMIG9yIHNlY3VyaXR5IHhhdHRycyBvbiBhbiBpbm9kZVxcbisgKiB0aGF0IGlzIHN0aWxsIHVucHVibGlzaGVkLCB1bmhhc2hlZCwgYW5kIHVuYXR0YWNoZWQgdG8gYSBkZW50cnkuXFxuKyAqIE9yZGluYXJ5IHhhdHRyIHVwZGF0ZXMgbXVzdCB1c2Ugb2NmczJfeGF0dHJfc2V0KCkuXFxuKyAqIEFsbCB0cmFuc2FjdGlvbiBjcmVkaXRzIGhhdmUgYmVlbiByZXNlcnZlZCBpbiBta25vZCBvciBzeW1saW5rIGNhbGxlcnMuXFxuICAqL1xcbiBpbnQgb2NmczJfeGF0dHJfc2V0X2hhbmRsZShoYW5kbGVfdCAqaGFuZGxlLFxcbiBcXHRcXHRcXHQgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbkBAIC0zNTQyLDggKzM1NTUsNiBAQCBpbnQgb2NmczJfeGF0dHJfc2V0X2hhbmRsZShoYW5kbGVfdCAqaGFuZGxlLFxcbiBcXHR4aXMuaW5vZGVfYmggPSB4YnMuaW5vZGVfYmggPSBkaV9iaDtcXG4gXFx0ZGkgPSAoc3RydWN0IG9jZnMyX2Rpbm9kZSAqKWRpX2JoLVxcdTAwM2ViX2RhdGE7XFxuIFxcbi1cXHRkb3duX3dyaXRlKFxcdTAwMjZPQ0ZTMl9JKGlub2RlKS1cXHUwMDNlaXBfeGF0dHJfc2VtKTtcXG4tXFxuIFxcdHJldCA9IG9jZnMyX3hhdHRyX2lib2R5X2ZpbmQoaW5vZGUsIG5hbWVfaW5kZXgsIG5hbWUsIFxcdTAwMjZ4aXMpO1xcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRnb3RvIGNsZWFudXA7XFxuQEAgLTM1NTYsNyArMzU2Nyw2IEBAIGludCBvY2ZzMl94YXR0cl9zZXRfaGFuZGxlKGhhbmRsZV90ICpoYW5kbGUsXFxuIFxcdHJldCA9IF9fb2NmczJfeGF0dHJfc2V0X2hhbmRsZShpbm9kZSwgZGksIFxcdTAwMjZ4aSwgXFx1MDAyNnhpcywgXFx1MDAyNnhicywgXFx1MDAyNmN0eHQpO1xcbiBcXG4gY2xlYW51cDpcXG4tXFx0dXBfd3JpdGUoXFx1MDAyNk9DRlMyX0koaW5vZGUpLVxcdTAwM2VpcF94YXR0cl9zZW0pO1xcbiBcXHRicmVsc2UoeGJzLnhhdHRyX2JoKTtcXG4gXFx0b2NmczJfeGF0dHJfYnVja2V0X2ZyZWUoeGJzLmJ1Y2tldCk7XFxuIFxcbkBAIC03MjU3LDYgKzcyNjcsNyBAQCBpbnQgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsKHN0cnVjdCBpbm9kZSAqZGlyLFxcbiB7XFxuIFxcdGludCByZXQgPSAwO1xcbiBcXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpcl9iaCA9IE5VTEw7XFxuK1xcdHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgYWNsX3N0YXRlID0geyAwIH07XFxuIFxcbiBcXHRyZXQgPSBvY2ZzMl9pbml0X3NlY3VyaXR5X2dldChpbm9kZSwgZGlyLCBxc3RyLCBOVUxMKTtcXG4gXFx0aWYgKHJldCkge1xcbkBAIC03MjY5LDEwICs3MjgwLDE3IEBAIGludCBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2woc3RydWN0IGlub2RlICpkaXIsXFxuIFxcdFxcdG1sb2dfZXJybm8ocmV0KTtcXG4gXFx0XFx0Z290byBsZWF2ZTtcXG4gXFx0fVxcbi1cXHRyZXQgPSBvY2ZzMl9pbml0X2FjbChOVUxMLCBpbm9kZSwgZGlyLCBOVUxMLCBkaXJfYmgsIE5VTEwsIE5VTEwpO1xcbitcXG4rXFx0cmV0ID0gb2NmczJfYWNsX2luaXRfcHJlcGFyZShpbm9kZSwgZGlyLCBkaXJfYmgsIFxcdTAwMjZhY2xfc3RhdGUpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIHVubG9jaztcXG4rXFxuK1xcdHJldCA9IG9jZnMyX2luaXRfYWNsKE5VTEwsIGlub2RlLCBOVUxMLCBOVUxMLCBOVUxMLCBcXHUwMDI2YWNsX3N0YXRlKTtcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0bWxvZ19lcnJubyhyZXQpO1xcbiBcXG4rdW5sb2NrOlxcbitcXHRvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlKFxcdTAwMjZhY2xfc3RhdGUpO1xcbiBcXHRvY2ZzMl9pbm9kZV91bmxvY2soZGlyLCAwKTtcXG4gXFx0YnJlbHNlKGRpcl9iaCk7XFxuIGxlYXZlOlxcbmRpZmYgLS1naXQgYS9mcy9vY2ZzMi94YXR0ci5oIGIvZnMvb2NmczIveGF0dHIuaFxcbmluZGV4IDY1ZTlhYTc0MzkxOTkuLjVjZGQ2YzZiNDAwNjQgMTAwNjQ0XFxuLS0tIGEvZnMvb2NmczIveGF0dHIuaFxcbisrKyBiL2ZzL29jZnMyL3hhdHRyLmhcXG5AQCAtNTUsOSArNTUsMTIgQEAgaW50IG9jZnMyX2luaXRfc2VjdXJpdHlfc2V0KGhhbmRsZV90ICosIHN0cnVjdCBpbm9kZSAqLFxcbiBpbnQgb2NmczJfY2FsY19zZWN1cml0eV9pbml0KHN0cnVjdCBpbm9kZSAqLFxcbiBcXHRcXHRcXHQgICAgIHN0cnVjdCBvY2ZzMl9zZWN1cml0eV94YXR0cl9pbmZvICosXFxuIFxcdFxcdFxcdCAgICAgaW50ICosIGludCAqLCBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqKik7XFxuLWludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICosIHN0cnVjdCBidWZmZXJfaGVhZCAqLFxcbi1cXHRcXHRcXHQgIHVtb2RlX3QsIHN0cnVjdCBvY2ZzMl9zZWN1cml0eV94YXR0cl9pbmZvICosXFxuLVxcdFxcdFxcdCAgaW50ICosIGludCAqLCBpbnQgKik7XFxuK1xcbitzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlO1xcbitpbnQgb2NmczJfY2FsY194YXR0cl9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLCB1bW9kZV90IG1vZGUsXFxuK1xcdFxcdFxcdCAgc3RydWN0IG9jZnMyX3NlY3VyaXR5X3hhdHRyX2luZm8gKnNpLFxcbitcXHRcXHRcXHQgIGludCAqd2FudF9jbHVzdGVycywgaW50ICp4YXR0cl9jcmVkaXRzLFxcbitcXHRcXHRcXHQgIGludCAqd2FudF9tZXRhLCBzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICphY2xfc3RhdGUpO1xcbiBcXG4gLypcXG4gICogeGF0dHJzIGNhbiBsaXZlIGluc2lkZSBhbiBpbm9kZSwgYXMgcGFydCBvZiBhbiBleHRlcm5hbCB4YXR0ciBibG9jayxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDg6MDc6MzEuMjAxMjQ3ODA5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTI0MzE3MTU1NTYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9DRlMyX0ZTXCIsXG4gICAgXCJDT05GSUdGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbFwiLFxuICAgIFwib2NmczJfaW5pdF9hY2xcIixcbiAgICBcIm9jZnMyX2FjbF9pbml0X3ByZXBhcmVcIixcbiAgICBcIm9jZnMyX2NhbGNfeGF0dHJfaW5pdFwiLFxuICAgIFwib2NmczJfeGF0dHJfc2V0X2hhbmRsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBBQ0wgaW5pdGlhbGl6YXRpb24gZHVyaW5nIGlub2RlIGNyZWF0aW9uIGluIE9DRlMyIHRvIHByZXZlbnQgZGVhZGxvY2tzLiBJdCBtb2RpZmllcyBob3cgQUNMcyBhcmUgY2FsY3VsYXRlZCBhbmQgc2V0IGZvciBuZXcgaW5vZGVzIChlLmcuLCB2aWEgbWtub2QsIG1rZGlyLCBjcmVhdGUsIHN5bWxpbmssIHJlZmxpbmspLiBUaGUgY2hhbmdlcyBhcmUgaW4gY29yZSBPQ0ZTMiBsb2dpYyBhbmQgYXJlIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgVkZTIHN5c2NhbGxzIHdoZW4gb3BlcmF0aW5nIG9uIGFuIE9DRlMyIGZpbGVzeXN0ZW0uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDcyODM0M2IzNTAzOWUwNjc1NDdkZWJjMDYxZTJjZGFiZTFlYjA2Y2NcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAzMCAwODowNzoyOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2FjbC5jIGIvZnMvb2NmczIvYWNsLmNcbmluZGV4IGFmMWUyY2VkYjIxN2YuLjA5MGVjNjBmYjU3NmEgMTAwNjQ0XG4tLS0gYS9mcy9vY2ZzMi9hY2wuY1xuKysrIGIvZnMvb2NmczIvYWNsLmNcbkBAIC0xMTAsOCArMTEwLDcgQEAgc3RhdGljIHZvaWQgKm9jZnMyX2FjbF90b194YXR0cihjb25zdCBzdHJ1Y3QgcG9zaXhfYWNsICphY2wsIHNpemVfdCAqc2l6ZSlcbiBcdHJldHVybiBvY2ZzMl9hY2w7XG4gfVxuIFxuLXN0YXRpYyBzdHJ1Y3QgcG9zaXhfYWNsICpvY2ZzMl9nZXRfYWNsX25vbG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLVx0XHRcdFx0XHQgICAgICBpbnQgdHlwZSxcbitzdGF0aWMgc3RydWN0IHBvc2l4X2FjbCAqb2NmczJfZ2V0X2FjbF9ub2xvY2soc3RydWN0IGlub2RlICppbm9kZSwgaW50IHR5cGUsXG4gXHRcdFx0XHRcdCAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgpXG4ge1xuIFx0aW50IG5hbWVfaW5kZXg7XG5AQCAtMzQ5LDYzICszNDgsMTA1IEBAIGludCBvY2ZzMl9hY2xfY2htb2Qoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcbiAgKiBJbml0aWFsaXplIHRoZSBBQ0xzIG9mIGEgbmV3IGlub2RlLiBJZiBwYXJlbnQgZGlyZWN0b3J5IGhhcyBkZWZhdWx0IEFDTCxcbiAgKiB0aGVuIGNsb25lIHRvIG5ldyBpbm9kZS4gQ2FsbGVkIGZyb20gb2NmczJfbWtub2QuXG4gICovXG4taW50IG9jZnMyX2luaXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsXG4tXHRcdCAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tXHRcdCAgIHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHQgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoLFxuLVx0XHQgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpcl9iaCxcbi1cdFx0ICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMsXG4tXHRcdCAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICpkYXRhX2FjKVxuK3ZvaWQgb2NmczJfYWNsX2luaXRfcmVsZWFzZShzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICpzdGF0ZSlcbit7XG4rXHRwb3NpeF9hY2xfcmVsZWFzZShzdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCk7XG4rXHRwb3NpeF9hY2xfcmVsZWFzZShzdGF0ZS1cdTAwM2VhY2wpO1xuK1x0c3RhdGUtXHUwMDNlZGVmYXVsdF9hY2wgPSBOVUxMO1xuK1x0c3RhdGUtXHUwMDNlYWNsID0gTlVMTDtcbit9XG4rXG4raW50IG9jZnMyX2FjbF9pbml0X3ByZXBhcmUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4rXHRcdFx0ICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJfYmgsXG4rXHRcdFx0ICAgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqc3RhdGUpXG4ge1xuIFx0c3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihpbm9kZS1cdTAwM2VpX3NiKTtcbi1cdHN0cnVjdCBwb3NpeF9hY2wgKmFjbCA9IE5VTEw7XG4tXHRpbnQgcmV0ID0gMCwgcmV0Mjtcbi1cdHVtb2RlX3QgbW9kZTtcbi1cbi1cdGlmICghU19JU0xOSyhpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG4tXHRcdGlmIChvc2ItXHUwMDNlc19tb3VudF9vcHQgXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkge1xuLVx0XHRcdGRvd25fcmVhZChcdTAwMjZPQ0ZTMl9JKGRpciktXHUwMDNlaXBfeGF0dHJfc2VtKTtcbi1cdFx0XHRhY2wgPSBvY2ZzMl9nZXRfYWNsX25vbG9jayhkaXIsIEFDTF9UWVBFX0RFRkFVTFQsXG4tXHRcdFx0XHRcdFx0ICAgZGlyX2JoKTtcbi1cdFx0XHR1cF9yZWFkKFx1MDAyNk9DRlMyX0koZGlyKS1cdTAwM2VpcF94YXR0cl9zZW0pO1xuLVx0XHRcdGlmIChJU19FUlIoYWNsKSlcbi1cdFx0XHRcdHJldHVybiBQVFJfRVJSKGFjbCk7XG4rXHRpbnQgcmV0ID0gMDtcbitcbitcdHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsID0gTlVMTDtcbitcdHN0YXRlLVx1MDAzZWFjbCA9IE5VTEw7XG4rXHRzdGF0ZS1cdTAwM2Vtb2RlID0gaW5vZGUtXHUwMDNlaV9tb2RlO1xuK1xuK1x0aWYgKFNfSVNMTksoaW5vZGUtXHUwMDNlaV9tb2RlKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAob3NiLVx1MDAzZXNfbW91bnRfb3B0IFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHtcbitcdFx0ZG93bl9yZWFkKFx1MDAyNk9DRlMyX0koZGlyKS1cdTAwM2VpcF94YXR0cl9zZW0pO1xuK1x0XHRzdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCA9XG4rXHRcdFx0b2NmczJfZ2V0X2FjbF9ub2xvY2soZGlyLCBBQ0xfVFlQRV9ERUZBVUxULCBkaXJfYmgpO1xuK1x0XHR1cF9yZWFkKFx1MDAyNk9DRlMyX0koZGlyKS1cdTAwM2VpcF94YXR0cl9zZW0pO1xuK1x0XHRpZiAoSVNfRVJSKHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsKSkge1xuK1x0XHRcdHJldCA9IFBUUl9FUlIoc3RhdGUtXHUwMDNlZGVmYXVsdF9hY2wpO1xuK1x0XHRcdHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsID0gTlVMTDtcbitcdFx0XHRyZXR1cm4gcmV0O1xuIFx0XHR9XG4tXHRcdGlmICghYWNsKSB7XG4tXHRcdFx0bW9kZSA9IGlub2RlLVx1MDAzZWlfbW9kZSBcdTAwMjYgfmN1cnJlbnRfdW1hc2soKTtcbi1cdFx0XHRyZXQgPSBvY2ZzMl9hY2xfc2V0X21vZGUoaW5vZGUsIGRpX2JoLCBoYW5kbGUsIG1vZGUpO1xuLVx0XHRcdGlmIChyZXQpIHtcbi1cdFx0XHRcdG1sb2dfZXJybm8ocmV0KTtcbitcdFx0aWYgKHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsKSB7XG4rXHRcdFx0c3RhdGUtXHUwMDNlYWNsID0gcG9zaXhfYWNsX2R1cChzdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCk7XG4rXHRcdFx0aWYgKCFzdGF0ZS1cdTAwM2VhY2wpIHtcbitcdFx0XHRcdHJldCA9IC1FTk9NRU07XG4gXHRcdFx0XHRnb3RvIGNsZWFudXA7XG4gXHRcdFx0fVxuK1x0XHRcdHJldCA9IF9fcG9zaXhfYWNsX2NyZWF0ZShcdTAwMjZzdGF0ZS1cdTAwM2VhY2wsIEdGUF9OT0ZTLFxuK1x0XHRcdFx0XHRcdCBcdTAwMjZzdGF0ZS1cdTAwM2Vtb2RlKTtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0Z290byBjbGVhbnVwO1xuK1x0XHRcdGlmIChyZXQgPT0gMCkge1xuK1x0XHRcdFx0cG9zaXhfYWNsX3JlbGVhc2Uoc3RhdGUtXHUwMDNlYWNsKTtcbitcdFx0XHRcdHN0YXRlLVx1MDAzZWFjbCA9IE5VTEw7XG4rXHRcdFx0fVxuK1x0XHRcdGlmICghU19JU0RJUihpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG4rXHRcdFx0XHRwb3NpeF9hY2xfcmVsZWFzZShzdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCk7XG4rXHRcdFx0XHRzdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCA9IE5VTEw7XG4rXHRcdFx0fVxuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdHN0YXRlLVx1MDAzZW1vZGUgXHUwMDI2PSB+Y3VycmVudF91bWFzaygpO1xuIFx0XHR9XG4rXHR9IGVsc2Uge1xuK1x0XHRzdGF0ZS1cdTAwM2Vtb2RlIFx1MDAyNj0gfmN1cnJlbnRfdW1hc2soKTtcbiBcdH1cbi1cdGlmICgob3NiLVx1MDAzZXNfbW91bnRfb3B0IFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIFx1MDAyNlx1MDAyNiBhY2wpIHtcbi1cdFx0aWYgKFNfSVNESVIoaW5vZGUtXHUwMDNlaV9tb2RlKSkge1xuK1xuK1x0cmV0dXJuIDA7XG4rY2xlYW51cDpcbitcdG9jZnMyX2FjbF9pbml0X3JlbGVhc2Uoc3RhdGUpO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4raW50IG9jZnMyX2luaXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4rXHRcdCAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgsXG4rXHRcdCAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjLFxuK1x0XHQgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqZGF0YV9hYyxcbitcdFx0ICAgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqc3RhdGUpXG4re1xuK1x0c3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihpbm9kZS1cdTAwM2VpX3NiKTtcbitcdGludCByZXQgPSAwO1xuK1xuK1x0aWYgKFNfSVNMTksoaW5vZGUtXHUwMDNlaV9tb2RlKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAob3NiLVx1MDAzZXNfbW91bnRfb3B0IFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHtcbitcdFx0aWYgKFNfSVNESVIoaW5vZGUtXHUwMDNlaV9tb2RlKSBcdTAwMjZcdTAwMjYgc3RhdGUtXHUwMDNlZGVmYXVsdF9hY2wpIHtcbiBcdFx0XHRyZXQgPSBvY2ZzMl9zZXRfYWNsKGhhbmRsZSwgaW5vZGUsIGRpX2JoLFxuLVx0XHRcdFx0XHQgICAgQUNMX1RZUEVfREVGQVVMVCwgYWNsLFxuLVx0XHRcdFx0XHQgICAgbWV0YV9hYywgZGF0YV9hYyk7XG4rXHRcdFx0XHRcdCAgICBBQ0xfVFlQRV9ERUZBVUxULFxuK1x0XHRcdFx0XHQgICAgc3RhdGUtXHUwMDNlZGVmYXVsdF9hY2wsIG1ldGFfYWMsXG4rXHRcdFx0XHRcdCAgICBkYXRhX2FjKTtcbiBcdFx0XHRpZiAocmV0KVxuLVx0XHRcdFx0Z290byBjbGVhbnVwO1xuK1x0XHRcdFx0cmV0dXJuIHJldDtcbiBcdFx0fVxuLVx0XHRtb2RlID0gaW5vZGUtXHUwMDNlaV9tb2RlO1xuLVx0XHRyZXQgPSBfX3Bvc2l4X2FjbF9jcmVhdGUoXHUwMDI2YWNsLCBHRlBfTk9GUywgXHUwMDI2bW9kZSk7XG4tXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0cmV0dXJuIHJldDtcbitcdH1cbiBcbi1cdFx0cmV0MiA9IG9jZnMyX2FjbF9zZXRfbW9kZShpbm9kZSwgZGlfYmgsIGhhbmRsZSwgbW9kZSk7XG4tXHRcdGlmIChyZXQyKSB7XG4tXHRcdFx0bWxvZ19lcnJubyhyZXQyKTtcbi1cdFx0XHRyZXQgPSByZXQyO1xuLVx0XHRcdGdvdG8gY2xlYW51cDtcbi1cdFx0fVxuLVx0XHRpZiAocmV0IFx1MDAzZSAwKSB7XG4tXHRcdFx0cmV0ID0gb2NmczJfc2V0X2FjbChoYW5kbGUsIGlub2RlLFxuLVx0XHRcdFx0XHQgICAgZGlfYmgsIEFDTF9UWVBFX0FDQ0VTUyxcbi1cdFx0XHRcdFx0ICAgIGFjbCwgbWV0YV9hYywgZGF0YV9hYyk7XG4rXHRyZXQgPSBvY2ZzMl9hY2xfc2V0X21vZGUoaW5vZGUsIGRpX2JoLCBoYW5kbGUsIHN0YXRlLVx1MDAzZW1vZGUpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRtbG9nX2Vycm5vKHJldCk7XG4rXHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHRpZiAob3NiLVx1MDAzZXNfbW91bnRfb3B0IFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHtcbitcdFx0aWYgKHN0YXRlLVx1MDAzZWFjbCkge1xuK1x0XHRcdHJldCA9IG9jZnMyX3NldF9hY2woaGFuZGxlLCBpbm9kZSwgZGlfYmgsXG4rXHRcdFx0XHRcdCAgICBBQ0xfVFlQRV9BQ0NFU1MsIHN0YXRlLVx1MDAzZWFjbCxcbitcdFx0XHRcdFx0ICAgIG1ldGFfYWMsIGRhdGFfYWMpO1xuIFx0XHR9XG4gXHR9XG4tY2xlYW51cDpcbi1cdHBvc2l4X2FjbF9yZWxlYXNlKGFjbCk7XG4rXG4gXHRyZXR1cm4gcmV0O1xuIH1cbmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9hY2wuaCBiL2ZzL29jZnMyL2FjbC5oXG5pbmRleCA2NjdjNmYwM2ZhNjA2Li5hOTFmOWNlMjc4ZDZkIDEwMDY0NFxuLS0tIGEvZnMvb2NmczIvYWNsLmhcbisrKyBiL2ZzL29jZnMyL2FjbC5oXG5AQCAtMjAsOSArMjAsMjAgQEAgc3RydWN0IHBvc2l4X2FjbCAqb2NmczJfaW9wX2dldF9hY2woc3RydWN0IGlub2RlICppbm9kZSwgaW50IHR5cGUsIGJvb2wgcmN1KTtcbiBpbnQgb2NmczJfaW9wX3NldF9hY2woc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiBcdFx0ICAgICAgc3RydWN0IHBvc2l4X2FjbCAqYWNsLCBpbnQgdHlwZSk7XG4gZXh0ZXJuIGludCBvY2ZzMl9hY2xfY2htb2Qoc3RydWN0IGlub2RlICosIHN0cnVjdCBidWZmZXJfaGVhZCAqKTtcbi1leHRlcm4gaW50IG9jZnMyX2luaXRfYWNsKGhhbmRsZV90ICosIHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgaW5vZGUgKixcbi1cdFx0XHQgIHN0cnVjdCBidWZmZXJfaGVhZCAqLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKixcbi1cdFx0XHQgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICosXG4tXHRcdFx0ICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqKTtcbitzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlIHtcbitcdHN0cnVjdCBwb3NpeF9hY2wgKmRlZmF1bHRfYWNsO1xuK1x0c3RydWN0IHBvc2l4X2FjbCAqYWNsO1xuK1x0dW1vZGVfdCBtb2RlO1xuK307XG4rXG4raW50IG9jZnMyX2FjbF9pbml0X3ByZXBhcmUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4rXHRcdFx0ICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJfYmgsXG4rXHRcdFx0ICAgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqc3RhdGUpO1xuK3ZvaWQgb2NmczJfYWNsX2luaXRfcmVsZWFzZShzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICpzdGF0ZSk7XG4raW50IG9jZnMyX2luaXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4rXHRcdCAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgsXG4rXHRcdCAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjLFxuK1x0XHQgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqZGF0YV9hYyxcbitcdFx0ICAgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqc3RhdGUpO1xuIFxuICNlbmRpZiAvKiBPQ0ZTMl9BQ0xfSCAqL1xuZGlmZiAtLWdpdCBhL2ZzL29jZnMyL25hbWVpLmMgYi9mcy9vY2ZzMi9uYW1laS5jXG5pbmRleCAxMjc3NjY2Yzc3Y2QyLi5lYTM3YTUwNTgwODkwIDEwMDY0NFxuLS0tIGEvZnMvb2NmczIvbmFtZWkuY1xuKysrIGIvZnMvb2NmczIvbmFtZWkuY1xuQEAgLTI1Niw2ICsyNTYsNyBAQCBzdGF0aWMgaW50IG9jZnMyX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0c2lnc2V0X3Qgb2xkc2V0O1xuIFx0aW50IGRpZF9ibG9ja19zaWduYWxzID0gMDtcbiBcdHN0cnVjdCBvY2ZzMl9kZW50cnlfbG9jayAqZGwgPSBOVUxMO1xuK1x0c3RydWN0IG9jZnMyX2FjbF9zdGF0ZSBhY2xfc3RhdGUgPSB7IDAgfTtcbiBcbiBcdHRyYWNlX29jZnMyX21rbm9kKGRpciwgZGVudHJ5LCBkZW50cnktXHUwMDNlZF9uYW1lLmxlbiwgZGVudHJ5LVx1MDAzZWRfbmFtZS5uYW1lLFxuIFx0XHRcdCAgKHVuc2lnbmVkIGxvbmcgbG9uZylPQ0ZTMl9JKGRpciktXHUwMDNlaXBfYmxrbm8sXG5AQCAtMzMwLDEwICszMzEsMTQgQEAgc3RhdGljIGludCBvY2ZzMl9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdFx0fVxuIFx0fVxuIFxuK1x0c3RhdHVzID0gb2NmczJfYWNsX2luaXRfcHJlcGFyZShpbm9kZSwgZGlyLCBwYXJlbnRfZmVfYmgsIFx1MDAyNmFjbF9zdGF0ZSk7XG4rXHRpZiAoc3RhdHVzIFx1MDAzYyAwKVxuK1x0XHRnb3RvIGxlYXZlO1xuK1xuIFx0LyogY2FsY3VsYXRlIG1ldGEgZGF0YS9jbHVzdGVycyBmb3Igc2V0dGluZyBzZWN1cml0eSBhbmQgYWNsIHhhdHRyICovXG4tXHRzdGF0dXMgPSBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoZGlyLCBwYXJlbnRfZmVfYmgsIG1vZGUsXG4tXHRcdFx0XHQgICAgICAgXHUwMDI2c2ksIFx1MDAyNndhbnRfY2x1c3RlcnMsXG4tXHRcdFx0XHQgICAgICAgXHUwMDI2eGF0dHJfY3JlZGl0cywgXHUwMDI2d2FudF9tZXRhKTtcbitcdHN0YXR1cyA9IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChkaXIsIG1vZGUsIFx1MDAyNnNpLCBcdTAwMjZ3YW50X2NsdXN0ZXJzLFxuK1x0XHRcdFx0ICAgICAgIFx1MDAyNnhhdHRyX2NyZWRpdHMsIFx1MDAyNndhbnRfbWV0YSxcbitcdFx0XHRcdCAgICAgICBcdTAwMjZhY2xfc3RhdGUpO1xuIFx0aWYgKHN0YXR1cyBcdTAwM2MgMCkge1xuIFx0XHRtbG9nX2Vycm5vKHN0YXR1cyk7XG4gXHRcdGdvdG8gbGVhdmU7XG5AQCAtNDExLDggKzQxNiw4IEBAIHN0YXRpYyBpbnQgb2NmczJfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRcdGluY19ubGluayhkaXIpO1xuIFx0fVxuIFxuLVx0c3RhdHVzID0gb2NmczJfaW5pdF9hY2woaGFuZGxlLCBpbm9kZSwgZGlyLCBuZXdfZmVfYmgsIHBhcmVudF9mZV9iaCxcbi1cdFx0XHQgbWV0YV9hYywgZGF0YV9hYyk7XG4rXHRzdGF0dXMgPSBvY2ZzMl9pbml0X2FjbChoYW5kbGUsIGlub2RlLCBuZXdfZmVfYmgsIG1ldGFfYWMsIGRhdGFfYWMsXG4rXHRcdFx0XHRcdTAwMjZhY2xfc3RhdGUpO1xuIFxuIFx0aWYgKHN0YXR1cyBcdTAwM2MgMCkge1xuIFx0XHRtbG9nX2Vycm5vKHN0YXR1cyk7XG5AQCAtNDc3LDYgKzQ4Miw4IEBAIHN0YXRpYyBpbnQgb2NmczJfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRicmVsc2UocGFyZW50X2ZlX2JoKTtcbiBcdGtmcmVlKHNpLnZhbHVlKTtcbiBcbitcdG9jZnMyX2FjbF9pbml0X3JlbGVhc2UoXHUwMDI2YWNsX3N0YXRlKTtcbitcbiBcdG9jZnMyX2ZyZWVfZGlyX2xvb2t1cF9yZXN1bHQoXHUwMDI2bG9va3VwKTtcbiBcbiBcdGlmIChpbm9kZV9hYylcbmRpZmYgLS1naXQgYS9mcy9vY2ZzMi94YXR0ci5jIGIvZnMvb2NmczIveGF0dHIuY1xuaW5kZXggZmNkZGQzYzEzYWNkZC4uODZmMDI5MzY4MWZjYyAxMDA2NDRcbi0tLSBhL2ZzL29jZnMyL3hhdHRyLmNcbisrKyBiL2ZzL29jZnMyL3hhdHRyLmNcbkBAIC02MTEsMTMgKzYxMSwxMCBAQCBpbnQgb2NmczJfY2FsY19zZWN1cml0eV9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4taW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0XHQgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlyX2JoLFxuLVx0XHRcdCAgdW1vZGVfdCBtb2RlLFxuK2ludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICpkaXIsIHVtb2RlX3QgbW9kZSxcbiBcdFx0XHQgIHN0cnVjdCBvY2ZzMl9zZWN1cml0eV94YXR0cl9pbmZvICpzaSxcbi1cdFx0XHQgIGludCAqd2FudF9jbHVzdGVycyxcbi1cdFx0XHQgIGludCAqeGF0dHJfY3JlZGl0cyxcbi1cdFx0XHQgIGludCAqd2FudF9tZXRhKVxuK1x0XHRcdCAgaW50ICp3YW50X2NsdXN0ZXJzLCBpbnQgKnhhdHRyX2NyZWRpdHMsXG4rXHRcdFx0ICBpbnQgKndhbnRfbWV0YSwgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqYWNsX3N0YXRlKVxuIHtcbiBcdGludCByZXQgPSAwO1xuIFx0c3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihkaXItXHUwMDNlaV9zYik7XG5AQCAtNjI4LDE5ICs2MjUsMTUgQEAgaW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0XHRcdFx0XHQgICAgIHNpLVx1MDAzZXZhbHVlX2xlbik7XG4gXG4gXHRpZiAob3NiLVx1MDAzZXNfbW91bnRfb3B0IFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHtcbi1cdFx0ZG93bl9yZWFkKFx1MDAyNk9DRlMyX0koZGlyKS1cdTAwM2VpcF94YXR0cl9zZW0pO1xuLVx0XHRhY2xfbGVuID0gb2NmczJfeGF0dHJfZ2V0X25vbG9jayhkaXIsIGRpcl9iaCxcbi1cdFx0XHRcdFx0T0NGUzJfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0RFRkFVTFQsXG4tXHRcdFx0XHRcdFwiXCIsIE5VTEwsIDApO1xuLVx0XHR1cF9yZWFkKFx1MDAyNk9DRlMyX0koZGlyKS1cdTAwM2VpcF94YXR0cl9zZW0pO1xuLVx0XHRpZiAoYWNsX2xlbiBcdTAwM2UgMCkge1xuLVx0XHRcdGFfc2l6ZSA9IG9jZnMyX3hhdHRyX2VudHJ5X3JlYWxfc2l6ZSgwLCBhY2xfbGVuKTtcbi1cdFx0XHRpZiAoU19JU0RJUihtb2RlKSlcbi1cdFx0XHRcdGFfc2l6ZSBcdTAwM2NcdTAwM2M9IDE7XG4tXHRcdH0gZWxzZSBpZiAoYWNsX2xlbiAhPSAwIFx1MDAyNlx1MDAyNiBhY2xfbGVuICE9IC1FTk9EQVRBKSB7XG4tXHRcdFx0cmV0ID0gYWNsX2xlbjtcbi1cdFx0XHRtbG9nX2Vycm5vKHJldCk7XG4tXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0aWYgKGFjbF9zdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCBcdTAwMjZcdTAwMjYgU19JU0RJUihtb2RlKSkge1xuK1x0XHRcdGFjbF9sZW4gPSBhY2xfc3RhdGUtXHUwMDNlZGVmYXVsdF9hY2wtXHUwMDNlYV9jb3VudCAqXG4rXHRcdFx0XHQgIHNpemVvZihzdHJ1Y3Qgb2NmczJfYWNsX2VudHJ5KTtcbitcdFx0XHRhX3NpemUgKz0gb2NmczJfeGF0dHJfZW50cnlfcmVhbF9zaXplKDAsIGFjbF9sZW4pO1xuK1x0XHR9XG4rXHRcdGlmIChhY2xfc3RhdGUtXHUwMDNlYWNsKSB7XG4rXHRcdFx0YWNsX2xlbiA9IGFjbF9zdGF0ZS1cdTAwM2VhY2wtXHUwMDNlYV9jb3VudCAqXG4rXHRcdFx0XHQgIHNpemVvZihzdHJ1Y3Qgb2NmczJfYWNsX2VudHJ5KTtcbitcdFx0XHRhX3NpemUgKz0gb2NmczJfeGF0dHJfZW50cnlfcmVhbF9zaXplKDAsIGFjbF9sZW4pO1xuIFx0XHR9XG4gXHR9XG4gXG5AQCAtNjgzLDE0ICs2NzYsMzMgQEAgaW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0XHRcdFx0XHRcdCAgIG5ld19jbHVzdGVycyk7XG4gXHRcdCp3YW50X2NsdXN0ZXJzICs9IG5ld19jbHVzdGVycztcbiBcdH1cbi1cdGlmIChvc2ItXHUwMDNlc19tb3VudF9vcHQgXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCBcdTAwMjZcdTAwMjZcbi1cdCAgICBhY2xfbGVuIFx1MDAzZSBPQ0ZTMl9YQVRUUl9JTkxJTkVfU0laRSkge1xuLVx0XHQvKiBmb3IgZGlyZWN0b3J5LCBpdCBoYXMgREVGQVVMVCBhbmQgQUNDRVNTIHR3byB0eXBlcyBvZiBhY2xzICovXG4tXHRcdG5ld19jbHVzdGVycyA9IChTX0lTRElSKG1vZGUpID8gMiA6IDEpICpcbi1cdFx0XHRcdG9jZnMyX2NsdXN0ZXJzX2Zvcl9ieXRlcyhkaXItXHUwMDNlaV9zYiwgYWNsX2xlbik7XG4tXHRcdCp4YXR0cl9jcmVkaXRzICs9IG9jZnMyX2NsdXN0ZXJzX3RvX2Jsb2NrcyhkaXItXHUwMDNlaV9zYixcbi1cdFx0XHRcdFx0XHRcdCAgIG5ld19jbHVzdGVycyk7XG4tXHRcdCp3YW50X2NsdXN0ZXJzICs9IG5ld19jbHVzdGVycztcbitcdGlmIChvc2ItXHUwMDNlc19tb3VudF9vcHQgXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkge1xuK1x0XHRpZiAoYWNsX3N0YXRlLVx1MDAzZWRlZmF1bHRfYWNsIFx1MDAyNlx1MDAyNiBTX0lTRElSKG1vZGUpKSB7XG4rXHRcdFx0YWNsX2xlbiA9IGFjbF9zdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbC1cdTAwM2VhX2NvdW50ICpcbitcdFx0XHRcdCAgc2l6ZW9mKHN0cnVjdCBvY2ZzMl9hY2xfZW50cnkpO1xuK1x0XHRcdGlmIChhY2xfbGVuIFx1MDAzZSBPQ0ZTMl9YQVRUUl9JTkxJTkVfU0laRSkge1xuK1x0XHRcdFx0bmV3X2NsdXN0ZXJzID1cbitcdFx0XHRcdFx0b2NmczJfY2x1c3RlcnNfZm9yX2J5dGVzKGRpci1cdTAwM2VpX3NiLFxuK1x0XHRcdFx0XHRcdFx0XHQgYWNsX2xlbik7XG4rXHRcdFx0XHQqeGF0dHJfY3JlZGl0cyArPVxuK1x0XHRcdFx0XHRvY2ZzMl9jbHVzdGVyc190b19ibG9ja3MoZGlyLVx1MDAzZWlfc2IsXG4rXHRcdFx0XHRcdFx0XHRcdCBuZXdfY2x1c3RlcnMpO1xuK1x0XHRcdFx0KndhbnRfY2x1c3RlcnMgKz0gbmV3X2NsdXN0ZXJzO1xuK1x0XHRcdH1cbitcdFx0fVxuK1x0XHRpZiAoYWNsX3N0YXRlLVx1MDAzZWFjbCkge1xuK1x0XHRcdGFjbF9sZW4gPSBhY2xfc3RhdGUtXHUwMDNlYWNsLVx1MDAzZWFfY291bnQgKlxuK1x0XHRcdFx0ICBzaXplb2Yoc3RydWN0IG9jZnMyX2FjbF9lbnRyeSk7XG4rXHRcdFx0aWYgKGFjbF9sZW4gXHUwMDNlIE9DRlMyX1hBVFRSX0lOTElORV9TSVpFKSB7XG4rXHRcdFx0XHRuZXdfY2x1c3RlcnMgPVxuK1x0XHRcdFx0XHRvY2ZzMl9jbHVzdGVyc19mb3JfYnl0ZXMoZGlyLVx1MDAzZWlfc2IsXG4rXHRcdFx0XHRcdFx0XHRcdCBhY2xfbGVuKTtcbitcdFx0XHRcdCp4YXR0cl9jcmVkaXRzICs9XG4rXHRcdFx0XHRcdG9jZnMyX2NsdXN0ZXJzX3RvX2Jsb2NrcyhkaXItXHUwMDNlaV9zYixcbitcdFx0XHRcdFx0XHRcdFx0IG5ld19jbHVzdGVycyk7XG4rXHRcdFx0XHQqd2FudF9jbHVzdGVycyArPSBuZXdfY2x1c3RlcnM7XG4rXHRcdFx0fVxuK1x0XHR9XG4gXHR9XG4gXG4gXHRyZXR1cm4gcmV0O1xuQEAgLTM0ODMsOSArMzQ5NSwxMCBAQCBzdGF0aWMgaW50IF9fb2NmczJfeGF0dHJfc2V0X2hhbmRsZShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIH1cbiBcbiAvKlxuLSAqIFRoaXMgZnVuY3Rpb24gb25seSBjYWxsZWQgZHVpbmcgY3JlYXRpbmcgaW5vZGVcbi0gKiBmb3IgaW5pdCBzZWN1cml0eS9hY2wgeGF0dHJzIG9mIHRoZSBuZXcgaW5vZGUuXG4tICogQWxsIHRyYW5zYW5jdGlvbiBjcmVkaXRzIGhhdmUgYmVlbiByZXNlcnZlZCBpbiBta25vZC5cbisgKiBUaGlzIGhlbHBlciBpcyBvbmx5IGZvciBzZXR0aW5nIGluaXRpYWwgQUNMIG9yIHNlY3VyaXR5IHhhdHRycyBvbiBhbiBpbm9kZVxuKyAqIHRoYXQgaXMgc3RpbGwgdW5wdWJsaXNoZWQsIHVuaGFzaGVkLCBhbmQgdW5hdHRhY2hlZCB0byBhIGRlbnRyeS5cbisgKiBPcmRpbmFyeSB4YXR0ciB1cGRhdGVzIG11c3QgdXNlIG9jZnMyX3hhdHRyX3NldCgpLlxuKyAqIEFsbCB0cmFuc2FjdGlvbiBjcmVkaXRzIGhhdmUgYmVlbiByZXNlcnZlZCBpbiBta25vZCBvciBzeW1saW5rIGNhbGxlcnMuXG4gICovXG4gaW50IG9jZnMyX3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlX3QgKmhhbmRsZSxcbiBcdFx0XHQgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuQEAgLTM1NDIsOCArMzU1NSw2IEBAIGludCBvY2ZzMl94YXR0cl9zZXRfaGFuZGxlKGhhbmRsZV90ICpoYW5kbGUsXG4gXHR4aXMuaW5vZGVfYmggPSB4YnMuaW5vZGVfYmggPSBkaV9iaDtcbiBcdGRpID0gKHN0cnVjdCBvY2ZzMl9kaW5vZGUgKilkaV9iaC1cdTAwM2ViX2RhdGE7XG4gXG4tXHRkb3duX3dyaXRlKFx1MDAyNk9DRlMyX0koaW5vZGUpLVx1MDAzZWlwX3hhdHRyX3NlbSk7XG4tXG4gXHRyZXQgPSBvY2ZzMl94YXR0cl9pYm9keV9maW5kKGlub2RlLCBuYW1lX2luZGV4LCBuYW1lLCBcdTAwMjZ4aXMpO1xuIFx0aWYgKHJldClcbiBcdFx0Z290byBjbGVhbnVwO1xuQEAgLTM1NTYsNyArMzU2Nyw2IEBAIGludCBvY2ZzMl94YXR0cl9zZXRfaGFuZGxlKGhhbmRsZV90ICpoYW5kbGUsXG4gXHRyZXQgPSBfX29jZnMyX3hhdHRyX3NldF9oYW5kbGUoaW5vZGUsIGRpLCBcdTAwMjZ4aSwgXHUwMDI2eGlzLCBcdTAwMjZ4YnMsIFx1MDAyNmN0eHQpO1xuIFxuIGNsZWFudXA6XG4tXHR1cF93cml0ZShcdTAwMjZPQ0ZTMl9JKGlub2RlKS1cdTAwM2VpcF94YXR0cl9zZW0pO1xuIFx0YnJlbHNlKHhicy54YXR0cl9iaCk7XG4gXHRvY2ZzMl94YXR0cl9idWNrZXRfZnJlZSh4YnMuYnVja2V0KTtcbiBcbkBAIC03MjU3LDYgKzcyNjcsNyBAQCBpbnQgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsKHN0cnVjdCBpbm9kZSAqZGlyLFxuIHtcbiBcdGludCByZXQgPSAwO1xuIFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJfYmggPSBOVUxMO1xuK1x0c3RydWN0IG9jZnMyX2FjbF9zdGF0ZSBhY2xfc3RhdGUgPSB7IDAgfTtcbiBcbiBcdHJldCA9IG9jZnMyX2luaXRfc2VjdXJpdHlfZ2V0KGlub2RlLCBkaXIsIHFzdHIsIE5VTEwpO1xuIFx0aWYgKHJldCkge1xuQEAgLTcyNjksMTAgKzcyODAsMTcgQEAgaW50IG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbChzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0bWxvZ19lcnJubyhyZXQpO1xuIFx0XHRnb3RvIGxlYXZlO1xuIFx0fVxuLVx0cmV0ID0gb2NmczJfaW5pdF9hY2woTlVMTCwgaW5vZGUsIGRpciwgTlVMTCwgZGlyX2JoLCBOVUxMLCBOVUxMKTtcbitcbitcdHJldCA9IG9jZnMyX2FjbF9pbml0X3ByZXBhcmUoaW5vZGUsIGRpciwgZGlyX2JoLCBcdTAwMjZhY2xfc3RhdGUpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byB1bmxvY2s7XG4rXG4rXHRyZXQgPSBvY2ZzMl9pbml0X2FjbChOVUxMLCBpbm9kZSwgTlVMTCwgTlVMTCwgTlVMTCwgXHUwMDI2YWNsX3N0YXRlKTtcbiBcdGlmIChyZXQpXG4gXHRcdG1sb2dfZXJybm8ocmV0KTtcbiBcbit1bmxvY2s6XG4rXHRvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlKFx1MDAyNmFjbF9zdGF0ZSk7XG4gXHRvY2ZzMl9pbm9kZV91bmxvY2soZGlyLCAwKTtcbiBcdGJyZWxzZShkaXJfYmgpO1xuIGxlYXZlOlxuZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3hhdHRyLmggYi9mcy9vY2ZzMi94YXR0ci5oXG5pbmRleCA2NWU5YWE3NDM5MTk5Li41Y2RkNmM2YjQwMDY0IDEwMDY0NFxuLS0tIGEvZnMvb2NmczIveGF0dHIuaFxuKysrIGIvZnMvb2NmczIveGF0dHIuaFxuQEAgLTU1LDkgKzU1LDEyIEBAIGludCBvY2ZzMl9pbml0X3NlY3VyaXR5X3NldChoYW5kbGVfdCAqLCBzdHJ1Y3QgaW5vZGUgKixcbiBpbnQgb2NmczJfY2FsY19zZWN1cml0eV9pbml0KHN0cnVjdCBpbm9kZSAqLFxuIFx0XHRcdCAgICAgc3RydWN0IG9jZnMyX3NlY3VyaXR5X3hhdHRyX2luZm8gKixcbiBcdFx0XHQgICAgIGludCAqLCBpbnQgKiwgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKiopO1xuLWludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICosIHN0cnVjdCBidWZmZXJfaGVhZCAqLFxuLVx0XHRcdCAgdW1vZGVfdCwgc3RydWN0IG9jZnMyX3NlY3VyaXR5X3hhdHRyX2luZm8gKixcbi1cdFx0XHQgIGludCAqLCBpbnQgKiwgaW50ICopO1xuK1xuK3N0cnVjdCBvY2ZzMl9hY2xfc3RhdGU7XG4raW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpciwgdW1vZGVfdCBtb2RlLFxuK1x0XHRcdCAgc3RydWN0IG9jZnMyX3NlY3VyaXR5X3hhdHRyX2luZm8gKnNpLFxuK1x0XHRcdCAgaW50ICp3YW50X2NsdXN0ZXJzLCBpbnQgKnhhdHRyX2NyZWRpdHMsXG4rXHRcdFx0ICBpbnQgKndhbnRfbWV0YSwgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqYWNsX3N0YXRlKTtcbiBcbiAvKlxuICAqIHhhdHRycyBjYW4gbGl2ZSBpbnNpZGUgYW4gaW5vZGUsIGFzIHBhcnQgb2YgYW4gZXh0ZXJuYWwgeGF0dHIgYmxvY2ssXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwODowNzozMS4yMDEyNDk2OTlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDA5Njg3MjgwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWZhY3RvcmluZyBPQ0ZTMiBBQ0wgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQncyB0b3VjaGluZyBzb21lIGNvcmUgT0NGUzIgZmlsZXM6IGBhY2wuY2AsIGBhY2wuaGAsIGBuYW1laS5jYCwgYW5kIGB4YXR0ci5jYC4gTXkgaW5pdGlhbCByZWFkIGlzIHRoYXQgdGhpcyBpcyBmb2N1c2VkIG9uIHJlZmFjdG9yaW5nIEFDTCBpbml0aWFsaXphdGlvbiB3aXRoaW4gdGhlIGZpbGVzeXN0ZW0uIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgbGlrZSB0aGV5J3JlIGFkZHJlc3NpbmcgYSBsb2NraW5nIGlzc3VlLiBJIHNlZSB0aGV5J3JlIG1vZGlmeWluZyB0aGUgYG9jZnMyX2luaXRfYWNsYCBmdW5jdGlvbiBhbmQgcmVsYXRlZCBjb2RlLiBBcHBhcmVudGx5LCB0aGVyZSB3YXMgYSBwcm9ibGVtIHdpdGggYG9jZnMyX2luaXRfYWNsYCB0cnlpbmcgdG8gYWNxdWlyZSB0aGUgYGlwX3hhdHRyX3NlbWAgbG9jay5cblxuTm93LCBJIHNlZSB0aGUgaW50cm9kdWN0aW9uIG9mIGBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlYCBhbmQgYG9jZnMyX2FjbF9pbml0X3JlbGVhc2VgIGZ1bmN0aW9ucywgd2hpY2ggc3VnZ2VzdHMgYSBtb3JlIGdyYW51bGFyIGNvbnRyb2wgb3ZlciB0aGUgQUNMIGluaXRpYWxpemF0aW9uIHByb2Nlc3MuIFRoZXkndmUgYWxzbyB1cGRhdGVkIGBvY2ZzMl9jYWxjX3hhdHRyX2luaXRgIHRvIHVzZSBhIGBzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICphY2xfc3RhdGVgLCBsaWtlbHkgdG8gcGFzcyBzdGF0ZSBpbmZvcm1hdGlvbiBhcm91bmQuIEFuZCwgaXQgc2VlbXMgbGlrZSB0aGV5J3ZlIHJlbW92ZWQgYGRvd25fd3JpdGUoXHUwMDI2T0NGUzJfSShpbm9kZSktXHUwMDNlaXBfeGF0dHJfc2VtKWAgZnJvbSBgb2NmczJfeGF0dHJfc2V0X2hhbmRsZWAuIFRoaXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgY2hhbmdlLlxuXG5NeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IGlzIHRoaXMgY29kZSByZWFjaGFibGUsIGFuZCBpcyBpdCBmdW5jdGlvbmFsPyBPQ0ZTMiBpcyBhIGZpbGUgc3lzdGVtLCByaWdodD8gWWVzLCBPcmFjbGUgQ2x1c3RlciBGaWxlIFN5c3RlbSAyLiBTbywgZGVmaW5pdGVseSByZWFjaGFibGUgdGhyb3VnaCBzdGFuZGFyZCBzeXNjYWxscyBsaWtlIGBta2RpcmAsIGBta25vZGAsIGFuZCBgY3JlYXRgIOKAkyB0aGUgdXN1YWwgc3VzcGVjdHMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoaXMgQUNMIGluaXRpYWxpemF0aW9uIGNvZGUgaXMgYWN0dWFsbHkgdXNlZC5cblxuVGltZSB0byBjaGVjayB0aGUgS2NvbmZpZy4gSSdsbCBmaXJlIHVwIGBkZWZhdWx0X2FwaTpncmVwcGVyYCB0byBsb2NhdGUgdGhlIE9DRlMyIEtjb25maWcgdG8gYmUgc3VyZSB0aGF0IGl0J3MgY29uZmlndXJlZCBhbmQgZW5hYmxlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIHRyaWdnZXJpbmcgdGhlIG5ldyBBQ0wgaW5pdGlhbGl6YXRpb24gZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzU2OSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDA4OjA4OjAxLjI5ODEyNjE0NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzQ3NDUxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgT0NGUzJfRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvb2NmczIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9vY2ZzMi9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvb2NmczIvS2NvbmZpZzoyOmNvbmZpZyBPQ0ZTMl9GU1xcbmZzL29jZnMyL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiT0NGUzIgZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCJcXG4tLVxcbmZzL29jZnMyL0tjb25maWctMjctXFxuZnMvb2NmczIvS2NvbmZpZzoyODpjb25maWcgT0NGUzJfRlNfTzJDQlxcbmZzL29jZnMyL0tjb25maWctMjktXFx0dHJpc3RhdGUgXFxcIk8yQ0IgS2VybmVsc3BhY2UgQ2x1c3RlcmluZ1xcXCJcXG4tLVxcbmZzL29jZnMyL0tjb25maWctNDEtXFxuZnMvb2NmczIvS2NvbmZpZzo0Mjpjb25maWcgT0NGUzJfRlNfVVNFUlNQQUNFX0NMVVNURVJcXG5mcy9vY2ZzMi9LY29uZmlnLTQzLVxcdHRyaXN0YXRlIFxcXCJPQ0ZTMiBVc2Vyc3BhY2UgQ2x1c3RlcmluZ1xcXCJcXG4tLVxcbmZzL29jZnMyL0tjb25maWctNTMtXFxuZnMvb2NmczIvS2NvbmZpZzo1NDpjb25maWcgT0NGUzJfRlNfU1RBVFNcXG5mcy9vY2ZzMi9LY29uZmlnLTU1LVxcdGJvb2wgXFxcIk9DRlMyIHN0YXRpc3RpY3NcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDA4OjA4OjAxLjM1NTYwNTgwM1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MDQzMjk4MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKk9DRlMyIENvbmZpZ3VyYXRpb24gRGl2ZSoqXG5cbkFscmlnaHQsIHNvIGBDT05GSUdfT0NGUzJfRlNgIGlzIHRoZSBjZW50cmFsIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGZvciB0aGUgT0NGUzIgZmlsZXN5c3RlbS4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGNoZWNrIGZvciBkZXBlbmRlbmNpZXMuIEkga25vdyB0aGlzIG1vZHVsZSBpcyBwcmV0dHkgc2VsZi1jb250YWluZWQsIGJ1dCBJIGFsd2F5cyB3YW50IHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueSBudWFuY2VkIHJlcXVpcmVtZW50cyBsdXJraW5nIHdpdGhpbiBvdGhlciBzdWJzeXN0ZW1zLiBJJ2xsIG5lZWQgdG8gcXVpY2tseSBjb25maXJtIHRoYXQgaXQgc3RhbmRzIGFsb25lIG9yIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIGtlcm5lbCBmZWF0dXJlcyB0aGF0IHdvdWxkIGluZmx1ZW5jZSBpdHMgYmVoYXZpb3Igb3IgbXkgdGVzdGluZyBzdHJhdGVneS4gQSBxdWljayBzY2FuIG9mIHRoZSBLY29uZmlnIHNob3VsZCByZXZlYWwgYW55IGZsYWdzIEkgbmVlZCB0byBjb25zaWRlciBmb3IgZW5hYmxpbmcgaXQgaW4gdGhpcyBzY2VuYXJpby5cblxuXG4iLCJJbnB1dFRva2VucyI6ODU3NCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDA4OjA4OjA1LjA1OTkzODE2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxNzczNTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlcGVuZHMgb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvb2NmczIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9vY2ZzMi9LY29uZmlnPTI9Y29uZmlnIE9DRlMyX0ZTXFxuZnMvb2NmczIvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJPQ0ZTMiBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcbmZzL29jZnMyL0tjb25maWc6NDpcXHRkZXBlbmRzIG9uIElORVQgXFx1MDAyNlxcdTAwMjYgU1lTRlMgXFx1MDAyNlxcdTAwMjYgQ09ORklHRlNfRlNcXG5mcy9vY2ZzMi9LY29uZmlnLTUtXFx0c2VsZWN0IEJVRkZFUl9IRUFEXFxuLS1cXG5mcy9vY2ZzMi9LY29uZmlnPTI4PWNvbmZpZyBPQ0ZTMl9GU19PMkNCXFxuZnMvb2NmczIvS2NvbmZpZy0yOS1cXHR0cmlzdGF0ZSBcXFwiTzJDQiBLZXJuZWxzcGFjZSBDbHVzdGVyaW5nXFxcIlxcbmZzL29jZnMyL0tjb25maWc6MzA6XFx0ZGVwZW5kcyBvbiBPQ0ZTMl9GU1xcbmZzL29jZnMyL0tjb25maWctMzEtXFx0ZGVmYXVsdCB5XFxuLS1cXG5mcy9vY2ZzMi9LY29uZmlnPTQyPWNvbmZpZyBPQ0ZTMl9GU19VU0VSU1BBQ0VfQ0xVU1RFUlxcbmZzL29jZnMyL0tjb25maWctNDMtXFx0dHJpc3RhdGUgXFxcIk9DRlMyIFVzZXJzcGFjZSBDbHVzdGVyaW5nXFxcIlxcbmZzL29jZnMyL0tjb25maWc6NDQ6XFx0ZGVwZW5kcyBvbiBPQ0ZTMl9GUyBcXHUwMDI2XFx1MDAyNiBETE1cXG5mcy9vY2ZzMi9LY29uZmlnLTQ1LVxcdGRlZmF1bHQgeVxcbi0tXFxuZnMvb2NmczIvS2NvbmZpZz01ND1jb25maWcgT0NGUzJfRlNfU1RBVFNcXG5mcy9vY2ZzMi9LY29uZmlnLTU1LVxcdGJvb2wgXFxcIk9DRlMyIHN0YXRpc3RpY3NcXFwiXFxuZnMvb2NmczIvS2NvbmZpZzo1NjpcXHRkZXBlbmRzIG9uIE9DRlMyX0ZTIFxcdTAwMjZcXHUwMDI2IERFQlVHX0ZTXFxuZnMvb2NmczIvS2NvbmZpZy01Ny1cXHRkZWZhdWx0IHlcXG4tLVxcbmZzL29jZnMyL0tjb25maWc9NjI9Y29uZmlnIE9DRlMyX0RFQlVHX01BU0tMT0dcXG5mcy9vY2ZzMi9LY29uZmlnLTYzLVxcdGJvb2wgXFxcIk9DRlMyIGxvZ2dpbmcgc3VwcG9ydFxcXCJcXG5mcy9vY2ZzMi9LY29uZmlnOjY0OlxcdGRlcGVuZHMgb24gT0NGUzJfRlNcXG5mcy9vY2ZzMi9LY29uZmlnLTY1LVxcdGRlZmF1bHQgeVxcbi0tXFxuZnMvb2NmczIvS2NvbmZpZz03Mj1jb25maWcgT0NGUzJfREVCVUdfRlNcXG5mcy9vY2ZzMi9LY29uZmlnLTczLVxcdGJvb2wgXFxcIk9DRlMyIGV4cGVuc2l2ZSBjaGVja3NcXFwiXFxuZnMvb2NmczIvS2NvbmZpZzo3NDpcXHRkZXBlbmRzIG9uIE9DRlMyX0ZTXFxuZnMvb2NmczIvS2NvbmZpZy03NS1cXHRkZWZhdWx0IG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDg6MDg6MDUuMTMxNzE3MDQ0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU3NTkwMTQwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipPQ0ZTMiBhbmQgQUNMczogQSBRdWljayBMb29rKipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGlzIGNvZGUsIGl0IGFwcGVhcnMgdGhhdCBlbmFibGluZyBgT0NGUzJfRlNgIGlzIGNvbnRpbmdlbnQgb24gYElORVRgLCBgU1lTRlNgLCBhbmQgYENPTkZJR0ZTX0ZTYCBiZWluZyBhY3RpdmUuIFRoYXQgbWFrZXMgc2Vuc2UsIGdpdmVuIE9DRlMyJ3MgZGlzdHJpYnV0ZWQgbmF0dXJlIGFuZCBsaWtlbHkgZGVwZW5kZW5jZSBvbiBuZXR3b3JraW5nIGFuZCBjb25maWd1cmF0aW9uIGluZnJhc3RydWN0dXJlLiBOb3csIHRoZSBtYWluIHF1ZXN0aW9uIGlzOiBkbyB3ZSBuZWVkIHRvIGRvIHNvbWV0aGluZyBpbiByZWdhcmQgdG8gQUNMIHN1cHBvcnQ/IFRoZSBwYXRjaCByZWZlcmVuY2VzIHRoYXQsIHNvIEkgbmVlZCB0byBjaGVjayB0aGUgQUNMIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgT0NGUzIgc3BlY2lmaWNhbGx5LiBJcyB0aGVyZSBhIGRlZGljYXRlZCBBQ0wgb3B0aW9uIGZvciBPQ0ZTMiB3aXRoaW4gdGhlIGJ1aWxkIHN5c3RlbSwgb3IgZG9lcyBpdCBsZXZlcmFnZSBnZW5lcmljIEFDTCBzdXBwb3J0PyBUaGF0J3Mgd2hhdCBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgdG8gZW5zdXJlIHRoZSBwYXRjaCBpcyBhcHBsaWVkIG9yIGhhbmRsZWQgY29ycmVjdGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MzA4LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDg6MDg6MDguNzA3NjIwNjI5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNjc2MzM1NywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE9DRlMyX0ZTX1BPU0lYX0FDTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9vY2ZzMi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwODowODowOC44MTQzOTA2ODZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjY4MTk1NzUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgdGFraW5nIG9uIHRoZSBwZXJzb25hIHlvdSByZXF1ZXN0ZWQ6XG5cbioqQXNzZXNzaW5nIE9DRlMyIEFDTCBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBxdWlja2x5IGFzY2VydGFpbiB3aGV0aGVyIG9yIG5vdCB3ZSBoYXZlIGFueSBBY2Nlc3MgQ29udHJvbCBMaXN0cyAoQUNMcykgY29uZmlndXJlZCB3aXRoaW4gdGhlIE9DRlMyIGVudmlyb25tZW50LiBUaGlzIGlzIGEgcHJldHR5IGZ1bmRhbWVudGFsIGNoZWNrIGJlZm9yZSBJIHN0YXJ0IGRpZ2dpbmcgaW50byBhbnl0aGluZyBlbHNlIHJlbGF0ZWQgdG8gZmlsZSBwZXJtaXNzaW9ucyBvciBzZWN1cml0eSBvbiB0aGlzIGNsdXN0ZXIuIFVuZGVyc3RhbmRpbmcgdGhlIHByZXNlbmNlIG9yIGFic2VuY2Ugb2YgQUNMcyBzZXRzIHRoZSBiYXNlbGluZSBmb3IgaW50ZXJwcmV0aW5nIGhvdyBmaWxlIGFjY2VzcyBpcyBiZWluZyBtYW5hZ2VkLiBTbywgZmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQncyBzZWUgaWYgdGhlcmUncyBhbnkgQUNMIGNvbmZpZ3VyYXRpb24gYWN0aXZlIHdpdGhpbiBPQ0ZTMi4gVGhpcyBpcyBlc3NlbnRpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGVudmlyb25tZW50J3Mgc2VjdXJpdHkgcG9zdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTU2NCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDA4OjA4OjEyLjA4MjU5NzUzN1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEyNzAwMDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkFDTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9vY2ZzMi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL29jZnMyL0tjb25maWc9Mj1jb25maWcgT0NGUzJfRlNcXG4tLVxcbmZzL29jZnMyL0tjb25maWctOS1cXHRzZWxlY3QgUVVPVEFfVFJFRVxcbmZzL29jZnMyL0tjb25maWc6MTA6XFx0c2VsZWN0IEZTX1BPU0lYX0FDTFxcbmZzL29jZnMyL0tjb25maWctMTEtXFx0c2VsZWN0IExFR0FDWV9ESVJFQ1RfSU9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDg6MDg6MTIuMTk1MzAzNjkzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY5NTg2MzM5MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqT0NGUzIgQUNMIEFjdGl2YXRpb24qKlxuXG5Pa2F5LCBzbyB0aGUgdGV4dCBpcyBzYXlpbmcgdGhhdCBzZWxlY3RpbmcgYE9DRlMyX0ZTYCBpbXBsaWVzIGBGU19QT1NJWF9BQ0xgLiBUaGF0IHNpbXBsaWZpZXMgdGhpbmdzOyB3ZSBqdXN0IG5lZWQgdG8gZW5zdXJlIGBPQ0ZTMl9GU2AgaXMgZW5hYmxlZC5cblxuTmV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZSBwYXRjaCBieSBleGFtaW5pbmcgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucy4gSXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggdG91Y2hlcyBhIGZldyBrZXkgYXJlYXM6IGBvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlYCwgYG9jZnMyX2FjbF9pbml0X3ByZXBhcmVgLCBgb2NmczJfaW5pdF9hY2xgLCBgb2NmczJfbWtub2RgLCBgb2NmczJfY2FsY194YXR0cl9pbml0YCwgYG9jZnMyX3hhdHRyX3NldF9oYW5kbGVgLCBhbmQgYG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbGAuIE5vdywgSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHdoZXRoZXIgdGhlc2UgZnVuY3Rpb25zIGFyZSBleHBvcnRlZCBmb3IgdXNlIGVsc2V3aGVyZSBvciBhcmUgc3RhdGljIHRvIHRoZSBPQ0ZTMiBtb2R1bGUuXG5cbkFmdGVyIHRoYXQsIEkgY2FuIHNlZTpcbiogICBgb2NmczJfYWNsX2luaXRfcmVsZWFzZWAgaXMgbm9uLXN0YXRpY1xuKiAgIGBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlYCBpcyBub24tc3RhdGljXG4qICAgYG9jZnMyX2luaXRfYWNsYCBpcyBub24tc3RhdGljXG4qICAgYG9jZnMyX21rbm9kYCBpcyBzdGF0aWMsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBIb3dldmVyLCBpdCBpcyBwcm9iYWJseSBwYXJ0IG9mIGBvY2ZzMl9kaXJfaW5vZGVfb3BlcmF0aW9uc2AsIHdoaWNoIGNoYW5nZXMgaG93IGl0J3MgaGFuZGxlZC5cbiogICBgb2NmczJfY2FsY194YXR0cl9pbml0YCBpcyBub24tc3RhdGljXG4qICAgYG9jZnMyX3hhdHRyX3NldF9oYW5kbGVgIGlzIG5vbi1zdGF0aWNcbiogICBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYCBpcyBub24tc3RhdGljXG5cbkkgbmVlZCB0byBxdWlja2x5IGNvbmZpcm0gdGhhdCBgb2NmczJfbWtub2RgIGlzIGluZGVlZCBzdGF0aWMgdG8gdGhlIG1vZHVsZS4gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgYGZzL29jZnMyL25hbWVpLmNgIHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4NDcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDg6MDg6MTkuMTUzOTQwNzE0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5Nzg4MTI1ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib2NmczJfbWtub2RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvb2NmczIvbmFtZWkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9vY2ZzMi9uYW1laS5jLTU1LVxcbmZzL29jZnMyL25hbWVpLmM6NTY6c3RhdGljIGludCBvY2ZzMl9ta25vZF9sb2NrZWQoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsXFxuZnMvb2NmczIvbmFtZWkuYy01Ny1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL29jZnMyL25hbWVpLmM9MjE1PXN0YXRpYyB2b2lkIG9jZnMyX2NsZWFudXBfYWRkX2VudHJ5X2ZhaWx1cmUoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsXFxuLS1cXG5mcy9vY2ZzMi9uYW1laS5jLTIyOS1cXG5mcy9vY2ZzMi9uYW1laS5jOjIzMDpzdGF0aWMgaW50IG9jZnMyX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbmZzL29jZnMyL25hbWVpLmMtMjMxLVxcdFxcdCAgICAgICBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL29jZnMyL25hbWVpLmMtMjYwLVxcbmZzL29jZnMyL25hbWVpLmM6MjYxOlxcdHRyYWNlX29jZnMyX21rbm9kKGRpciwgZGVudHJ5LCBkZW50cnktXFx1MDAzZWRfbmFtZS5sZW4sIGRlbnRyeS1cXHUwMDNlZF9uYW1lLm5hbWUsXFxuZnMvb2NmczIvbmFtZWkuYy0yNjItXFx0XFx0XFx0ICAodW5zaWduZWQgbG9uZyBsb25nKU9DRlMyX0koZGlyKS1cXHUwMDNlaXBfYmxrbm8sXFxuLS1cXG5mcy9vY2ZzMi9uYW1laS5jLTM2OS1cXG5mcy9vY2ZzMi9uYW1laS5jOjM3MDpcXHRoYW5kbGUgPSBvY2ZzMl9zdGFydF90cmFucyhvc2IsIG9jZnMyX21rbm9kX2NyZWRpdHMob3NiLVxcdTAwM2VzYixcXG5mcy9vY2ZzMi9uYW1laS5jLTM3MS1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgU19JU0RJUihtb2RlKSxcXG4tLVxcbmZzL29jZnMyL25hbWVpLmMtMzg5LVxcdC8qIGRvIHRoZSByZWFsIHdvcmsgbm93LiAqL1xcbmZzL29jZnMyL25hbWVpLmM6MzkwOlxcdHN0YXR1cyA9IG9jZnMyX21rbm9kX2xvY2tlZChvc2IsIGRpciwgaW5vZGUsIGRldixcXG5mcy9vY2ZzMi9uYW1laS5jLTM5MS1cXHRcXHRcXHRcXHQgICAgXFx1MDAyNm5ld19mZV9iaCwgcGFyZW50X2ZlX2JoLCBoYW5kbGUsXFxuLS1cXG5mcy9vY2ZzMi9uYW1laS5jLTUxNy1cXG5mcy9vY2ZzMi9uYW1laS5jOjUxODpzdGF0aWMgaW50IF9fb2NmczJfbWtub2RfbG9ja2VkKHN0cnVjdCBpbm9kZSAqZGlyLFxcbmZzL29jZnMyL25hbWVpLmMtNTE5LVxcdFxcdFxcdFxcdHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9vY2ZzMi9uYW1laS5jLTYyOS1cXG5mcy9vY2ZzMi9uYW1laS5jOjYzMDpzdGF0aWMgaW50IG9jZnMyX21rbm9kX2xvY2tlZChzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYixcXG5mcy9vY2ZzMi9uYW1laS5jLTYzMS1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL29jZnMyL25hbWVpLmMtNjUyLVxcbmZzL29jZnMyL25hbWVpLmM6NjUzOlxcdHJldHVybiBfX29jZnMyX21rbm9kX2xvY2tlZChkaXIsIGlub2RlLCBkZXYsIG5ld19mZV9iaCxcXG5mcy9vY2ZzMi9uYW1laS5jLTY1NC1cXHRcXHRcXHRcXHQgICAgaGFuZGxlLCBpbm9kZV9hYywgZmVfYmxrbm8sXFxuLS1cXG5mcy9vY2ZzMi9uYW1laS5jPTY1OD1zdGF0aWMgc3RydWN0IGRlbnRyeSAqb2NmczJfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuLS1cXG5mcy9vY2ZzMi9uYW1laS5jLTY2Ni1cXHRcXHRcXHQgIE9DRlMyX0koZGlyKS1cXHUwMDNlaXBfYmxrbm8sIG1vZGUpO1xcbmZzL29jZnMyL25hbWVpLmM6NjY3OlxcdHJldCA9IG9jZnMyX21rbm9kKFxcdTAwMjZub3BfbW50X2lkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSB8IFNfSUZESVIsIDApO1xcbmZzL29jZnMyL25hbWVpLmMtNjY4LVxcdGlmIChyZXQpXFxuLS1cXG5mcy9vY2ZzMi9uYW1laS5jPTY3ND1zdGF0aWMgaW50IG9jZnMyX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4tLVxcbmZzL29jZnMyL25hbWVpLmMtNjgzLVxcdFxcdFxcdCAgICh1bnNpZ25lZCBsb25nIGxvbmcpT0NGUzJfSShkaXIpLVxcdTAwM2VpcF9ibGtubywgbW9kZSk7XFxuZnMvb2NmczIvbmFtZWkuYzo2ODQ6XFx0cmV0ID0gb2NmczJfbWtub2QoXFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlIHwgU19JRlJFRywgMCk7XFxuZnMvb2NmczIvbmFtZWkuYy02ODUtXFx0aWYgKHJldClcXG4tLVxcbmZzL29jZnMyL25hbWVpLmM9MTgxND1zdGF0aWMgaW50IG9jZnMyX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuLS1cXG5mcy9vY2ZzMi9uYW1laS5jLTE5NTYtXFxuZnMvb2NmczIvbmFtZWkuYzoxOTU3OlxcdHN0YXR1cyA9IG9jZnMyX21rbm9kX2xvY2tlZChvc2IsIGRpciwgaW5vZGUsXFxuZnMvb2NmczIvbmFtZWkuYy0xOTU4LVxcdFxcdFxcdFxcdCAgICAwLCBcXHUwMDI2bmV3X2ZlX2JoLCBwYXJlbnRfZmVfYmgsIGhhbmRsZSxcXG4tLVxcbmZzL29jZnMyL25hbWVpLmM9MjUyMT1pbnQgb2NmczJfY3JlYXRlX2lub2RlX2luX29ycGhhbihzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL29jZnMyL25hbWVpLmMtMjU2MS1cXG5mcy9vY2ZzMi9uYW1laS5jOjI1NjI6XFx0aGFuZGxlID0gb2NmczJfc3RhcnRfdHJhbnMob3NiLCBvY2ZzMl9ta25vZF9jcmVkaXRzKG9zYi1cXHUwMDNlc2IsIDAsIDApKTtcXG5mcy9vY2ZzMi9uYW1laS5jLTI1NjMtXFx0aWYgKElTX0VSUihoYW5kbGUpKSB7XFxuLS1cXG5mcy9vY2ZzMi9uYW1laS5jLTI1ODQtXFx0LyogZG8gdGhlIHJlYWwgd29yayBub3cuICovXFxuZnMvb2NmczIvbmFtZWkuYzoyNTg1OlxcdHN0YXR1cyA9IF9fb2NmczJfbWtub2RfbG9ja2VkKGRpciwgaW5vZGUsXFxuZnMvb2NmczIvbmFtZWkuYy0yNTg2LVxcdFxcdFxcdFxcdCAgICAgIDAsIFxcdTAwMjZuZXdfZGlfYmgsIGhhbmRsZSxcXG4tLVxcbmZzL29jZnMyL25hbWVpLmM9MjkzMz1jb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBvY2ZzMl9kaXJfaW9wcyA9IHtcXG4tLVxcbmZzL29jZnMyL25hbWVpLmMtMjk0MC1cXHQubWtkaXJcXHRcXHQ9IG9jZnMyX21rZGlyLFxcbmZzL29jZnMyL25hbWVpLmM6Mjk0MTpcXHQubWtub2RcXHRcXHQ9IG9jZnMyX21rbm9kLFxcbmZzL29jZnMyL25hbWVpLmMtMjk0Mi1cXHQucmVuYW1lXFx0XFx0PSBvY2ZzMl9yZW5hbWUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDA4OjA4OjIwLjEzMjc1NzczMloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTkxNDU1MTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgT0NGUzIgRmlsZXN5c3RlbSBFbnRyeXBvaW50cyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gaG93IHRoaXMgYWxsIGZpdHMgdG9nZXRoZXIuIEkgc2VlIHRoYXQgYG9jZnMyX21rbm9kYCBpcyBkZWZpbmVkIGFzIGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBpcyBhIGJpdCB1bnVzdWFsLiBCdXQgaXQncyB1bHRpbWF0ZWx5IGxpbmtlZCB0byB0aGUgYC5ta25vZGAgb3BlcmF0aW9uIHdpdGhpbiBgb2NmczJfZGlyX2lvcHNgLiBUaGF0J3MgdGhlIHByaW1hcnkgd2F5IGl0J3MgZXhwb3NlZC4gQWhhLCBhbmQgaXQncyBhbHNvIGNhbGxlZCBieSBgb2NmczJfbWtkaXJgIGFuZCBgb2NmczJfY3JlYXRlYC4gUmlnaHQsIHNvIGBvY2ZzMl9ta25vZGAgaXMgZWZmZWN0aXZlbHkgYW4gaW50ZXJuYWwgZnVuY3Rpb24gdGhhdCBnZXRzIGluZGlyZWN0bHkgY2FsbGVkIHRocm91Z2ggdGhlc2UgaGlnaGVyLWxldmVsIGZ1bmN0aW9ucy4gU28gdGhlIGV4cG9zZWQgZW50cnlwb2ludHMgSSBuZWVkIHRvIGNvbnNpZGVyIGFyZSBkZWZpbml0ZWx5IGBvY2ZzMl9ta25vZGAsIGBvY2ZzMl9ta2RpcmAsIGFuZCBgb2NmczJfY3JlYXRlYC4uLiBhbmQgYWxzbyBgb2NmczJfc3ltbGlua2AuXG5cbldhaXQsIGEgc21hbGwgc25hZy4gSXQgbG9va3MgbGlrZSBgb2NmczJfc3ltbGlua2AgZG9lc24ndCBkaXJlY3RseSBjYWxsIGBvY2ZzMl9ta25vZGAuIEl0IGFjdHVhbGx5IGNhbGxzIGBvY2ZzMl9ta25vZF9sb2NrZWRgIGluc3RlYWQuIEknbGwgbmVlZCB0byByZW1lbWJlciB0aGF0IHN1YnRsZSBkaXN0aW5jdGlvbi4gQnV0IHRoZXJlJ3MgYW5vdGhlciBwb2ludCBvZiBpbnRlcmVzdCBoZXJlIC0gYG9jZnMyX3N5bWxpbmtgIGNhbGxzIGBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xgLiBUaGF0J3MgYW4gaW50ZXJlc3RpbmcgY2FsbCB0byBleGFtaW5lLiBMZXQncyBkaWcgZGVlcGVyIGFuZCBzZWUgd2hhdCB0aGF0IGZ1bmN0aW9uIGlzIGRvaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjA4MywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwODowODoyNC43MjQyMTUxMTdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3ODE2MDkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9vY2ZzMi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvb2NmczIvcmVmY291bnR0cmVlLmM9NDIzOD1zdGF0aWMgaW50IG9jZnMyX3JlZmxpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYy00Mjk2LVxcdGlmICghcHJlc2VydmUpIHtcXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYzo0Mjk3OlxcdFxcdGVycm9yID0gb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsKGRpciwgbmV3X29ycGhhbl9pbm9kZSxcXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYy00Mjk4LVxcdFxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2bmV3X2RlbnRyeS1cXHUwMDNlZF9uYW1lKTtcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmM9NzE4Mj1pbnQgb2NmczJfcmVmbGlua194YXR0cnMoc3RydWN0IGlub2RlICpvbGRfaW5vZGUsXFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jLTcyNjMtICovXFxuZnMvb2NmczIveGF0dHIuYzo3MjY0OmludCBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2woc3RydWN0IGlub2RlICpkaXIsXFxuZnMvb2NmczIveGF0dHIuYy03MjY1LVxcdFxcdFxcdFxcdHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5oPTgzPWludCBvY2ZzMl9yZWZsaW5rX3hhdHRycyhzdHJ1Y3QgaW5vZGUgKm9sZF9pbm9kZSxcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmgtODctXFx0XFx0XFx0IGJvb2wgcHJlc2VydmVfc2VjdXJpdHkpO1xcbmZzL29jZnMyL3hhdHRyLmg6ODg6aW50IG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbChzdHJ1Y3QgaW5vZGUgKmRpcixcXG5mcy9vY2ZzMi94YXR0ci5oLTg5LVxcdFxcdFxcdFxcdHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDA4OjA4OjI0LjgxMjAzODA0OFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MzI0NDI4MTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRpZ2dpbmcgaW50byBPQ0ZTMiBTZWN1cml0eSBDb250ZXh0cyoqXG5cbk9rYXksIHNvIEknbSB0cmFjaW5nIHRoZSBzZWN1cml0eSBjb250ZXh0IGluaXRpYWxpemF0aW9uIHdpdGhpbiBPQ0ZTMiwgc3BlY2lmaWNhbGx5IGhvdyBBQ0xzIGFyZSBoYW5kbGVkLiBJIHNlZSB0aGF0IGBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xgIGdldHMgY2FsbGVkIGR1cmluZyBgb2NmczJfcmVmbGlua2AsIHdoaWNoIG1ha2VzIHNlbnNlLiBSZWZsaW5raW5nIGNvdWxkIGNyZWF0ZSBhIG5lZWQgdG8gY29weSBvdmVyIHNlY3VyaXR5IGF0dHJpYnV0ZXMuIEJ1dC4uLiBJIG5lZWQgdG8gYmUgc3VyZSBJJ20gbm90IG1pc3Npbmcgc29tZXRoaW5nLiBJJ20gd29uZGVyaW5nIGlmIHRoaXMgaW5pdGlhbGl6YXRpb24gYWxzbyBoYXBwZW5zIGR1cmluZyBvdGhlciBpbm9kZSBjcmVhdGlvbiBvcGVyYXRpb25zLlxuXG5MZXQncyBxdWlja2x5IGNoZWNrIHRoZSBjYWxsIGdyYXBoIGZvciBgb2NmczJfc3ltbGlua2AuIFRoYXQncyBoYW5kbGVkIGJ5IGBvY2ZzMl9zeW1saW5rYCBpbiBgZnMvb2NmczIvbmFtZWkuY2AuIEkgbmVlZCB0byBjb25maXJtIGlmIHRoZSBzZWN1cml0eSBzZXR1cCBpcyB0YWtlbiBjYXJlIG9mIGR1cmluZyBzeW1saW5rIGNyZWF0aW9uIGFzIHdlbGwsIG9yIGlmIGl0IGhhcyBhIGRpZmZlcmVudCBlbnRyeXBvaW50LiBJdCdzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCBob3cgQUNMcyBhbmQgZXh0ZW5kZWQgYXR0cmlidXRlcyBhcmUgbWFuYWdlZCBhY3Jvc3MgZGlmZmVyZW50IGZpbGUgY3JlYXRpb24gbWV0aG9kcyB3aXRoaW4gdGhpcyBjbHVzdGVyIGZpbGVzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTYyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDg6MDg6MzIuMTM2NDY5NjJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkzNDk1MzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9jZnMyX3N5bWxpbmtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvb2NmczIvbmFtZWkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9vY2ZzMi9uYW1laS5jPTE3MTY9c3RhdGljIGludCBvY2ZzMl9jcmVhdGVfc3ltbGlua19kYXRhKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLFxcbi0tXFxuZnMvb2NmczIvbmFtZWkuYy0xODEzLVxcbmZzL29jZnMyL25hbWVpLmM6MTgxNDpzdGF0aWMgaW50IG9jZnMyX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuZnMvb2NmczIvbmFtZWkuYy0xODE1LVxcdFxcdFxcdCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL29jZnMyL25hbWVpLmMtMTg0My1cXG5mcy9vY2ZzMi9uYW1laS5jOjE4NDQ6XFx0dHJhY2Vfb2NmczJfc3ltbGlua19iZWdpbihkaXIsIGRlbnRyeSwgc3ltbmFtZSxcXG5mcy9vY2ZzMi9uYW1laS5jLTE4NDUtXFx0XFx0XFx0XFx0ICBkZW50cnktXFx1MDAzZWRfbmFtZS5sZW4sIGRlbnRyeS1cXHUwMDNlZF9uYW1lLm5hbWUpO1xcbi0tXFxuZnMvb2NmczIvbmFtZWkuYy0xOTUxLVxcbmZzL29jZnMyL25hbWVpLmM6MTk1MjpcXHR0cmFjZV9vY2ZzMl9zeW1saW5rX2NyZWF0ZShkaXIsIGRlbnRyeSwgZGVudHJ5LVxcdTAwM2VkX25hbWUubGVuLFxcbmZzL29jZnMyL25hbWVpLmMtMTk1My1cXHRcXHRcXHRcXHQgICBkZW50cnktXFx1MDAzZWRfbmFtZS5uYW1lLFxcbi0tXFxuZnMvb2NmczIvbmFtZWkuYy0xOTY3LVxcdG5ld3NpemUgPSBsIC0gMTtcXG5mcy9vY2ZzMi9uYW1laS5jOjE5Njg6XFx0aW5vZGUtXFx1MDAzZWlfb3AgPSBcXHUwMDI2b2NmczJfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zO1xcbmZzL29jZnMyL25hbWVpLmMtMTk2OS1cXHRpbm9kZV9ub2hpZ2htZW0oaW5vZGUpO1xcbi0tXFxuZnMvb2NmczIvbmFtZWkuYz0yOTMzPWNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG9jZnMyX2Rpcl9pb3BzID0ge1xcbi0tXFxuZnMvb2NmczIvbmFtZWkuYy0yOTM4LVxcdC5ybWRpclxcdFxcdD0gb2NmczJfdW5saW5rLFxcbmZzL29jZnMyL25hbWVpLmM6MjkzOTpcXHQuc3ltbGlua1xcdD0gb2NmczJfc3ltbGluayxcXG5mcy9vY2ZzMi9uYW1laS5jLTI5NDAtXFx0Lm1rZGlyXFx0XFx0PSBvY2ZzMl9ta2RpcixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDg6MDg6MzIuMjI5OTY5MDNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU2NjIyOTUyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBBQ0wgSW5pdGlhbGl6YXRpb24gUGF0aCBpbiBPQ0ZTMiBTeW1saW5rIENyZWF0aW9uKipcblxuQWxyaWdodCwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGUgT0NGUzIgY29kZSwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGBvY2ZzMl9zeW1saW5rYC4gVGhlIGtleSBxdWVzdGlvbiBJJ20gdHJ5aW5nIHRvIGFuc3dlciBpcyBwcmVjaXNlbHkgaG93IEFDTHMgYXJlIGluaXRpYWxpemVkIGZvciBhIG5ld2x5IGNyZWF0ZWQgc3ltYm9saWMgbGluay4gTXkgZ3V0IGZlZWxpbmcgaXMgdGVsbGluZyBtZSBpdCdzIGVpdGhlciBnb2luZyB0byBsZXZlcmFnZSB0aGUgZXhpc3RpbmcgQUNMIGluZnJhc3RydWN0dXJlLCBwb3RlbnRpYWxseSB0aHJvdWdoIGBvY2ZzMl9pbml0X2FjbGAsIG9yIHBlcmhhcHMgaXQncyBnb2luZyB0byB1c2Ugc29tZSBraW5kIG9mIHhhdHRyIGNhbGN1bGF0aW9uIHJvdXRpbmUgdG8gZ2V0IGl0IHNldCB1cCwgc28gSSBuZWVkIHRvIGNoZWNrIGlmIHdlJ3JlIGNhbGxpbmcgYG9jZnMyX2NhbGNfeGF0dHJfaW5pdGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBBQ0xzIGdldCB0aGVpciBpbml0aWFsIHN0YXRlIGZvciB0aGVzZSBzeW1saW5rcyBiZWNhdXNlIGl0J3MgYSBjcml0aWNhbCBwYXRoIHRvIGVuc3VyaW5nIHRoZSBzZWN1cml0eSBhbmQgcGVybWlzc2lvbnMgYmVoYXZlIGFzIGV4cGVjdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzc5NSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDA4OjA4OjM1Ljc5NjIwMjUwN1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzE1MzQzMzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib2NmczJfY2FsY194YXR0cl9pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL29jZnMyL25hbWVpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvb2NmczIvbmFtZWkuYz0yMzA9c3RhdGljIGludCBvY2ZzMl9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4tLVxcbmZzL29jZnMyL25hbWVpLmMtMzM4LVxcdC8qIGNhbGN1bGF0ZSBtZXRhIGRhdGEvY2x1c3RlcnMgZm9yIHNldHRpbmcgc2VjdXJpdHkgYW5kIGFjbCB4YXR0ciAqL1xcbmZzL29jZnMyL25hbWVpLmM6MzM5OlxcdHN0YXR1cyA9IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChkaXIsIG1vZGUsIFxcdTAwMjZzaSwgXFx1MDAyNndhbnRfY2x1c3RlcnMsXFxuZnMvb2NmczIvbmFtZWkuYy0zNDAtXFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZ4YXR0cl9jcmVkaXRzLCBcXHUwMDI2d2FudF9tZXRhLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwODowODozNS44Njc3NDUxMjFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTMwMzQ5NzY3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqRGlnZ2luZyBpbnRvIE9DRlMyIFhhdHRyIEluaXRpYWxpemF0aW9uKipcblxuUmlnaHQsIHNvIEknbSBmb2N1c2luZyBvbiBob3cgRXh0ZW5kZWQgQXR0cmlidXRlcyAoWGF0dHJzKSBnZXQgaW5pdGlhbGl6ZWQgd2l0aGluIHRoZSBPQ0ZTMiBmaWxlc3lzdGVtLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgb2NmczJfY2FsY194YXR0cl9pbml0YCBpcyAqb25seSogY2FsbGVkIHdpdGhpbiB0aGUgYG9jZnMyX21rbm9kYCBmdW5jdGlvbi4gVGhhdCBzZWVtcy4uLiBwb3RlbnRpYWxseSByZXN0cmljdGl2ZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3Npbmcgc29tZXRoaW5nIGNyaXRpY2FsLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBrbm93IGlmIHRoZXJlIGlzIGFub3RoZXIgZnVuY3Rpb24gd2hlcmUgWGF0dHIgaW5pdGlhbGl6YXRpb24gdGFrZXMgcGxhY2UuIFdoYXQgYWJvdXQgc3ltYm9saWMgbGlua3M/IGBvY2ZzMl9zeW1saW5rYCEgRG9lcyB0aGF0IGFsc28gc2V0IEFDTHM/IFRoYXQncyB0aGUgbmV4dCB0aGluZyBJIG5lZWQgdG8gaW52ZXN0aWdhdGUuIEkgbmVlZCB0byBjb25maXJtIHRoYXQgbXkgaW5pdGlhbCBhc3N1bXB0aW9uIGlzIGNvcnJlY3QsIG9yIGlmIHRoZXJlJ3MgYW5vdGhlciBwb2ludCB3aGVyZSBYYXR0cnMgZ2V0IHNldCB1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQyMTIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwODowODo0MS4xNzEyNDUzOTJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3ODU2ODk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9jZnMyX2luaXRfYWNsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL29jZnMyL25hbWVpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvb2NmczIvbmFtZWkuYz0yMzA9c3RhdGljIGludCBvY2ZzMl9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4tLVxcbmZzL29jZnMyL25hbWVpLmMtNDE4LVxcbmZzL29jZnMyL25hbWVpLmM6NDE5OlxcdHN0YXR1cyA9IG9jZnMyX2luaXRfYWNsKGhhbmRsZSwgaW5vZGUsIG5ld19mZV9iaCwgbWV0YV9hYywgZGF0YV9hYyxcXG5mcy9vY2ZzMi9uYW1laS5jLTQyMC1cXHRcXHRcXHRcXHRcXHUwMDI2YWNsX3N0YXRlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDg6MDg6NDEuMjI5MTA2NTc5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2ODI1NjA3MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE9DRlMyIEZpbGUgQ3JlYXRpb24gYW5kIEFDTCBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBPQ0ZTMiBoYW5kbGVzIHN5bWJvbGljIGxpbmtzLCBhbmQgSSBzZWUgdGhhdCBgb2NmczJfc3ltbGlua2AgZG9lc24ndCBzZWVtIHRvIGludm9rZSBgb2NmczJfaW5pdF9hY2xgIG9yIGBvY2ZzMl9jYWxjX3hhdHRyX2luaXRgIGRpcmVjdGx5LiBUaGF0J3MgYSBsaXR0bGUgdW5leHBlY3RlZC4gTm93LCBJIHJlbWVtYmVyIHRoYXQgYG9jZnMyX2luaXRfYWNsYCAqaXMqIGNhbGxlZCB3aXRoaW4gYG9jZnMyX21rbm9kYCBhbmQgYWxzbyBpbiBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYC4gVGhlbiBJIHJlbWVtYmVyIHRoYXQgYG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbGAgaXMgY2FsbGVkIGJ5IGBvY2ZzMl9yZWZsaW5rYC4gVGhpcyBzdWdnZXN0cyB0aGUgZnVuY3Rpb25zIGhhbmRsaW5nIHRoZSBBQ0wgc3R1ZmYgSSBuZWVkIHRvIGNvbmNlbnRyYXRlIG9uIGFyZSBgb2NmczJfbWtub2RgLCBgb2NmczJfbWtkaXJgLCBgb2NmczJfY3JlYXRlYCwgYW5kIGBvY2ZzMl9yZWZsaW5rYC4gQnV0IGhvbGQgb24sIGlzbid0IGBvY2ZzMl9ta25vZGAgc3RhdGljPyBMZXQgbWUgZG91YmxlLWNoZWNrIGBvY2ZzMl9yZWZsaW5rYCBmb3IgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZy4gSSdsbCBmb2N1cyBteSBlZmZvcnRzIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDYxNywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwODowODo0NS45MTE2NzA4NjRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTI1NzI4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvY2ZzMl9yZWZsaW5rXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL29jZnMyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9vY2ZzMi9maWxlLmM9MjcwNj1zdGF0aWMgbG9mZl90IG9jZnMyX3JlbWFwX2ZpbGVfcmFuZ2Uoc3RydWN0IGZpbGUgKmZpbGVfaW4sIGxvZmZfdCBwb3NfaW4sXFxuLS1cXG5mcy9vY2ZzMi9maWxlLmMtMjcyNS1cXHQvKiBMb2NrIGJvdGggZmlsZXMgYWdhaW5zdCBJTyAqL1xcbmZzL29jZnMyL2ZpbGUuYzoyNzI2OlxcdHJldCA9IG9jZnMyX3JlZmxpbmtfaW5vZGVzX2xvY2soaW5vZGVfaW4sIFxcdTAwMjZpbl9iaCwgaW5vZGVfb3V0LCBcXHUwMDI2b3V0X2JoKTtcXG5mcy9vY2ZzMi9maWxlLmMtMjcyNy1cXHRpZiAocmV0KVxcbi0tXFxuZnMvb2NmczIvZmlsZS5jLTI3NTEtXFxuZnMvb2NmczIvZmlsZS5jOjI3NTI6XFx0cmVtYXBwZWQgPSBvY2ZzMl9yZWZsaW5rX3JlbWFwX2Jsb2Nrcyhpbm9kZV9pbiwgaW5fYmgsIHBvc19pbixcXG5mcy9vY2ZzMi9maWxlLmMtMjc1My1cXHRcXHRcXHRpbm9kZV9vdXQsIG91dF9iaCwgcG9zX291dCwgbGVuKTtcXG4tLVxcbmZzL29jZnMyL2ZpbGUuYy0yNzY5LVxcbmZzL29jZnMyL2ZpbGUuYzoyNzcwOlxcdHJldCA9IG9jZnMyX3JlZmxpbmtfdXBkYXRlX2Rlc3QoaW5vZGVfb3V0LCBvdXRfYmgsIHBvc19vdXQgKyBsZW4pO1xcbmZzL29jZnMyL2ZpbGUuYy0yNzcxLVxcdGlmIChyZXQpIHtcXG4tLVxcbmZzL29jZnMyL2ZpbGUuYy0yNzc2LW91dF91bmxvY2s6XFxuZnMvb2NmczIvZmlsZS5jOjI3Nzc6XFx0b2NmczJfcmVmbGlua19pbm9kZXNfdW5sb2NrKGlub2RlX2luLCBpbl9iaCwgaW5vZGVfb3V0LCBvdXRfYmgpO1xcbmZzL29jZnMyL2ZpbGUuYy0yNzc4LVxcdHJldHVybiByZW1hcHBlZCBcXHUwMDNlIDAgPyByZW1hcHBlZCA6IHJldDtcXG4tLVxcbmZzL29jZnMyL2lvY3RsLmM9ODUzPWxvbmcgb2NmczJfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuZnMvb2NmczIvaW9jdGwuYy05MTktXFxuZnMvb2NmczIvaW9jdGwuYzo5MjA6XFx0XFx0cmV0dXJuIG9jZnMyX3JlZmxpbmtfaW9jdGwoaW5vZGUsIG9sZF9wYXRoLCBuZXdfcGF0aCwgcHJlc2VydmUpO1xcbmZzL29jZnMyL2lvY3RsLmMtOTIxLVxcdH1cXG4tLVxcbmZzL29jZnMyL2lvY3RsLmM9OTY1PWxvbmcgb2NmczJfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuZnMvb2NmczIvaW9jdGwuYy05ODYtXFxuZnMvb2NmczIvaW9jdGwuYzo5ODc6XFx0XFx0cmV0dXJuIG9jZnMyX3JlZmxpbmtfaW9jdGwoaW5vZGUsIGNvbXBhdF9wdHIoYXJncy5vbGRfcGF0aCksXFxuZnMvb2NmczIvaW9jdGwuYy05ODgtXFx0XFx0XFx0XFx0XFx0ICAgY29tcGF0X3B0cihhcmdzLm5ld19wYXRoKSwgcHJlc2VydmUpO1xcbi0tXFxuZnMvb2NmczIvb2NmczJfdHJhY2UuaD0xODMxPURFRklORV9PQ0ZTMl9VTExfVUxMX1VJTlRfVUlOVF9FVkVOVChvY2ZzMl9ybV94YXR0cl9jbHVzdGVyKTtcXG5mcy9vY2ZzMi9vY2ZzMl90cmFjZS5oLTE4MzItXFxuZnMvb2NmczIvb2NmczJfdHJhY2UuaDoxODMzOkRFRklORV9PQ0ZTMl9VTExfVUlOVF9FVkVOVChvY2ZzMl9yZWZsaW5rX3hhdHRyX2hlYWRlcik7XFxuZnMvb2NmczIvb2NmczJfdHJhY2UuaC0xODM0LVxcbi0tXFxuZnMvb2NmczIvb2NmczJfdHJhY2UuaD0xODQxPURFRklORV9PQ0ZTMl9VTExfVUlOVF9FVkVOVChvY2ZzMl94YXR0cl9idWNrZXRfdmFsdWVfcmVmY291bnQpO1xcbmZzL29jZnMyL29jZnMyX3RyYWNlLmgtMTg0Mi1cXG5mcy9vY2ZzMi9vY2ZzMl90cmFjZS5oOjE4NDM6REVGSU5FX09DRlMyX1VMTF9VSU5UX1VJTlRfRVZFTlQob2NmczJfcmVmbGlua194YXR0cl9idWNrZXRzKTtcXG5mcy9vY2ZzMi9vY2ZzMl90cmFjZS5oLTE4NDQtXFxuZnMvb2NmczIvb2NmczJfdHJhY2UuaDoxODQ1OkRFRklORV9PQ0ZTMl9VTExfVUlOVF9FVkVOVChvY2ZzMl9yZWZsaW5rX3hhdHRyX3JlYyk7XFxuZnMvb2NmczIvb2NmczJfdHJhY2UuaC0xODQ2LVxcbi0tXFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmM9NDA4OT1zdGF0aWMgaW50IG9jZnMyX2NyZWF0ZV9yZWZsaW5rX25vZGUoc3RydWN0IGlub2RlICpzX2lub2RlLFxcbi0tXFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDE0NS1cXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYzo0MTQ2OnN0YXRpYyBpbnQgX19vY2ZzMl9yZWZsaW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDE0Ny1cXHRcXHRcXHQgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKm9sZF9iaCxcXG4tLVxcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jLTQyMDktXFx0aWYgKG9pLVxcdTAwM2VpcF9keW5fZmVhdHVyZXMgXFx1MDAyNiBPQ0ZTMl9IQVNfWEFUVFJfRkwpIHtcXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYzo0MjEwOlxcdFxcdHJldCA9IG9jZnMyX3JlZmxpbmtfeGF0dHJzKGlub2RlLCBvbGRfYmgsXFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDIxMS1cXHRcXHRcXHRcXHRcXHQgICBuZXdfaW5vZGUsIG5ld19iaCxcXG4tLVxcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jLTQyMzctXFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmM6NDIzODpzdGF0aWMgaW50IG9jZnMyX3JlZmxpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsXFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDIzOS1cXHRcXHRcXHQgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSwgYm9vbCBwcmVzZXJ2ZSlcXG4tLVxcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jLTQyNzItXFx0ZG93bl93cml0ZShcXHUwMDI2T0NGUzJfSShpbm9kZSktXFx1MDAzZWlwX2FsbG9jX3NlbSk7XFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmM6NDI3MzpcXHRlcnJvciA9IF9fb2NmczJfcmVmbGluayhvbGRfZGVudHJ5LCBvbGRfYmgsXFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDI3NC1cXHRcXHRcXHRcXHRuZXdfb3JwaGFuX2lub2RlLCBwcmVzZXJ2ZSk7XFxuLS1cXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYz00MzQ4PXN0YXRpYyBpbnQgb2NmczJfdmZzX3JlZmxpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYy00Mzk4LVxcdGlmICghZXJyb3IpXFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmM6NDM5OTpcXHRcXHRlcnJvciA9IG9jZnMyX3JlZmxpbmsob2xkX2RlbnRyeSwgZGlyLCBuZXdfZGVudHJ5LCBwcmVzZXJ2ZSk7XFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDQwMC1cXHRpbm9kZV91bmxvY2soaW5vZGUpO1xcbi0tXFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDQwNy0gKi9cXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYzo0NDA4OmludCBvY2ZzMl9yZWZsaW5rX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDQwOS1cXHRcXHRcXHRjb25zdCBjaGFyIF9fdXNlciAqb2xkbmFtZSxcXG4tLVxcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jLTQ0NTAtLyogVXBkYXRlIGRlc3RpbmF0aW9uIGlub2RlIHNpemUsIGlmIG5lY2Vzc2FyeS4gKi9cXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYzo0NDUxOmludCBvY2ZzMl9yZWZsaW5rX3VwZGF0ZV9kZXN0KHN0cnVjdCBpbm9kZSAqZGVzdCxcXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYy00NDUyLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZF9iaCxcXG4tLVxcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jLTQ0ODktLyogUmVtYXAgdGhlIHJhbmdlIHBvc19pbjpsZW4gaW4gc19pbm9kZSB0byBwb3Nfb3V0OmxlbiBpbiB0X2lub2RlLiAqL1xcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jOjQ0OTA6c3RhdGljIGxvZmZfdCBvY2ZzMl9yZWZsaW5rX3JlbWFwX2V4dGVudChzdHJ1Y3QgaW5vZGUgKnNfaW5vZGUsXFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDQ5MS1cXHRcXHRcXHRcXHRcXHQgc3RydWN0IGJ1ZmZlcl9oZWFkICpzX2JoLFxcbi0tXFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDYwMy0vKiBTZXQgdXAgcmVmY291bnQgdHJlZSBhbmQgcmVtYXAgc19pbm9kZSB0byB0X2lub2RlLiAqL1xcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jOjQ2MDQ6bG9mZl90IG9jZnMyX3JlZmxpbmtfcmVtYXBfYmxvY2tzKHN0cnVjdCBpbm9kZSAqc19pbm9kZSxcXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYy00NjA1LVxcdFxcdFxcdFxcdCAgc3RydWN0IGJ1ZmZlcl9oZWFkICpzX2JoLFxcbi0tXFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDY4NS1cXHQvKiBBY3R1YWxseSByZW1hcCBleHRlbnRzIG5vdy4gKi9cXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYzo0Njg2OlxcdHJldCA9IG9jZnMyX3JlZmxpbmtfcmVtYXBfZXh0ZW50KHNfaW5vZGUsIHNfYmgsIHBvc19pbiwgdF9pbm9kZSwgdF9iaCxcXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYy00Njg3LVxcdFxcdFxcdFxcdFxcdCBwb3Nfb3V0LCBsZW4sIFxcdTAwMjZkZWFsbG9jKTtcXG4tLVxcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jLTQ3MDItLyogTG9jayBhbiBpbm9kZSBhbmQgZ3JhYiBhIGJoIHBvaW50aW5nIHRvIHRoZSBpbm9kZS4gKi9cXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYzo0NzAzOmludCBvY2ZzMl9yZWZsaW5rX2lub2Rlc19sb2NrKHN0cnVjdCBpbm9kZSAqc19pbm9kZSxcXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYy00NzA0LVxcdFxcdFxcdCAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqKmJoX3MsXFxuLS1cXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYy00Nzk2LS8qIFVubG9jayBib3RoIGlub2RlcyBhbmQgcmVsZWFzZSBidWZmZXJzLiAqL1xcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jOjQ3OTc6dm9pZCBvY2ZzMl9yZWZsaW5rX2lub2Rlc191bmxvY2soc3RydWN0IGlub2RlICpzX2lub2RlLFxcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jLTQ3OTgtXFx0XFx0XFx0XFx0IHN0cnVjdCBidWZmZXJfaGVhZCAqc19iaCxcXG4tLVxcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5oPTk4PWludCBvY2ZzMl9pbmNyZWFzZV9yZWZjb3VudChoYW5kbGVfdCAqaGFuZGxlLFxcbi0tXFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmgtMTAzLVxcdFxcdFxcdCAgICBzdHJ1Y3Qgb2NmczJfY2FjaGVkX2RlYWxsb2NfY3R4dCAqZGVhbGxvYyk7XFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmg6MTA0OmludCBvY2ZzMl9yZWZsaW5rX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmgtMTA1LVxcdFxcdFxcdGNvbnN0IGNoYXIgX191c2VyICpvbGRuYW1lLFxcbi0tXFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmgtMTA3LVxcdFxcdFxcdGJvb2wgcHJlc2VydmUpO1xcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5oOjEwODpsb2ZmX3Qgb2NmczJfcmVmbGlua19yZW1hcF9ibG9ja3Moc3RydWN0IGlub2RlICpzX2lub2RlLFxcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5oLTEwOS1cXHRcXHRcXHRcXHQgIHN0cnVjdCBidWZmZXJfaGVhZCAqc19iaCxcXG4tLVxcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5oLTExNC1cXHRcXHRcXHRcXHQgIGxvZmZfdCBsZW4pO1xcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5oOjExNTppbnQgb2NmczJfcmVmbGlua19pbm9kZXNfbG9jayhzdHJ1Y3QgaW5vZGUgKnNfaW5vZGUsXFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmgtMTE2LVxcdFxcdFxcdCAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqKmJoMSxcXG4tLVxcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5oLTExOC1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiaDIpO1xcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5oOjExOTp2b2lkIG9jZnMyX3JlZmxpbmtfaW5vZGVzX3VubG9jayhzdHJ1Y3QgaW5vZGUgKnNfaW5vZGUsXFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmgtMTIwLVxcdFxcdFxcdFxcdCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnNfYmgsXFxuLS1cXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuaC0xMjItXFx0XFx0XFx0XFx0IHN0cnVjdCBidWZmZXJfaGVhZCAqdF9iaCk7XFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmg6MTIzOmludCBvY2ZzMl9yZWZsaW5rX3VwZGF0ZV9kZXN0KHN0cnVjdCBpbm9kZSAqZGVzdCxcXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuaC0xMjQtXFx0XFx0XFx0ICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkX2JoLFxcbi0tXFxuZnMvb2NmczIveGF0dHIuYz02MzA4PXN0YXRpYyBpbnQgb2NmczJfZ2V0X3hhdHRyX3ZhbHVlX3Jvb3Qoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmMtNjMzMS0gKi9cXG5mcy9vY2ZzMi94YXR0ci5jOjYzMzI6c3RhdGljIGludCBvY2ZzMl9yZWZsaW5rX2xvY2tfeGF0dHJfYWxsb2NhdG9ycyhzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYixcXG5mcy9vY2ZzMi94YXR0ci5jLTYzMzMtXFx0XFx0XFx0XFx0XFx0c3RydWN0IG9jZnMyX3hhdHRyX2hlYWRlciAqeGgsXFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jLTYzODctICovXFxuZnMvb2NmczIveGF0dHIuYzo2Mzg4OnN0YXRpYyBpbnQgb2NmczJfcmVmbGlua194YXR0cl9oZWFkZXIoaGFuZGxlX3QgKmhhbmRsZSxcXG5mcy9vY2ZzMi94YXR0ci5jLTYzODktXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG9jZnMyX3hhdHRyX3JlZmxpbmsgKmFyZ3MsXFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jLTY0MDctXFxuZnMvb2NmczIveGF0dHIuYzo2NDA4OlxcdHRyYWNlX29jZnMyX3JlZmxpbmtfeGF0dHJfaGVhZGVyKCh1bnNpZ25lZCBsb25nIGxvbmcpb2xkX2JoLVxcdTAwM2ViX2Jsb2NrbnIsXFxuZnMvb2NmczIveGF0dHIuYy02NDA5LVxcdFxcdFxcdFxcdFxcdCBsZTE2X3RvX2NwdSh4aC1cXHUwMDNleGhfY291bnQpKTtcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmMtNjUxNy1cXG5mcy9vY2ZzMi94YXR0ci5jOjY1MTg6c3RhdGljIGludCBvY2ZzMl9yZWZsaW5rX3hhdHRyX2lubGluZShzdHJ1Y3Qgb2NmczJfeGF0dHJfcmVmbGluayAqYXJncylcXG5mcy9vY2ZzMi94YXR0ci5jLTY1MTkte1xcbi0tXFxuZnMvb2NmczIveGF0dHIuYy02NTQ0LVxcbmZzL29jZnMyL3hhdHRyLmM6NjU0NTpcXHRyZXQgPSBvY2ZzMl9yZWZsaW5rX2xvY2tfeGF0dHJfYWxsb2NhdG9ycyhvc2IsIHhoLCBhcmdzLVxcdTAwM2VyZWZfcm9vdF9iaCxcXG5mcy9vY2ZzMi94YXR0ci5jLTY1NDYtXFx0XFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2Y3JlZGl0cywgXFx1MDAyNm1ldGFfYWMpO1xcbi0tXFxuZnMvb2NmczIveGF0dHIuYy02NTcxLVxcbmZzL29jZnMyL3hhdHRyLmM6NjU3MjpcXHRyZXQgPSBvY2ZzMl9yZWZsaW5rX3hhdHRyX2hlYWRlcihoYW5kbGUsIGFyZ3MsIGFyZ3MtXFx1MDAzZW9sZF9iaCwgeGgsXFxuZnMvb2NmczIveGF0dHIuYy02NTczLVxcdFxcdFxcdFxcdFxcdCBhcmdzLVxcdTAwM2VuZXdfYmgsIG5ld194aCwgXFx1MDAyNnZiLCBtZXRhX2FjLFxcbi0tXFxuZnMvb2NmczIveGF0dHIuYz02NTk4PXN0YXRpYyBpbnQgb2NmczJfY3JlYXRlX2VtcHR5X3hhdHRyX2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jLTY2MzMtXFxuZnMvb2NmczIveGF0dHIuYzo2NjM0OnN0YXRpYyBpbnQgb2NmczJfcmVmbGlua194YXR0cl9ibG9jayhzdHJ1Y3Qgb2NmczJfeGF0dHJfcmVmbGluayAqYXJncyxcXG5mcy9vY2ZzMi94YXR0ci5jLTY2MzUtXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJsa19iaCxcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmMtNjY1NS1cXG5mcy9vY2ZzMi94YXR0ci5jOjY2NTY6XFx0cmV0ID0gb2NmczJfcmVmbGlua19sb2NrX3hhdHRyX2FsbG9jYXRvcnMob3NiLCB4aCwgYXJncy1cXHUwMDNlcmVmX3Jvb3RfYmgsXFxuZnMvb2NmczIveGF0dHIuYy02NjU3LVxcdFxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNmNyZWRpdHMsIFxcdTAwMjZtZXRhX2FjKTtcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmMtNjY5MS1cXG5mcy9vY2ZzMi94YXR0ci5jOjY2OTI6XFx0cmV0ID0gb2NmczJfcmVmbGlua194YXR0cl9oZWFkZXIoaGFuZGxlLCBhcmdzLCBibGtfYmgsIHhoLFxcbmZzL29jZnMyL3hhdHRyLmMtNjY5My1cXHRcXHRcXHRcXHRcXHQgbmV3X2Jsa19iaCwgbmV3X3hoLCBcXHUwMDI2dmIsIG1ldGFfYWMsXFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jLTY3MTktXFxuZnMvb2NmczIveGF0dHIuYzo2NzIwOnN0cnVjdCBvY2ZzMl9yZWZsaW5rX3hhdHRyX3RyZWVfYXJncyB7XFxuZnMvb2NmczIveGF0dHIuYy02NzIxLVxcdHN0cnVjdCBvY2ZzMl94YXR0cl9yZWZsaW5rICpyZWZsaW5rO1xcbi0tXFxuZnMvb2NmczIveGF0dHIuYz02NzM0PXN0YXRpYyBpbnQgb2NmczJfZ2V0X3JlZmxpbmtfeGF0dHJfdmFsdWVfcm9vdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbi0tXFxuZnMvb2NmczIveGF0dHIuYy02NzQxLXtcXG5mcy9vY2ZzMi94YXR0ci5jOjY3NDI6XFx0c3RydWN0IG9jZnMyX3JlZmxpbmtfeGF0dHJfdHJlZV9hcmdzICphcmdzID1cXG5mcy9vY2ZzMi94YXR0ci5jOjY3NDM6XFx0XFx0XFx0KHN0cnVjdCBvY2ZzMl9yZWZsaW5rX3hhdHRyX3RyZWVfYXJncyAqKXBhcmE7XFxuZnMvb2NmczIveGF0dHIuYy02NzQ0LVxcdHN0cnVjdCBvY2ZzMl94YXR0cl9idWNrZXQgKmJ1Y2tldDtcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmM9Njc5OT1zdGF0aWMgaW50IG9jZnMyX2xvY2tfcmVmbGlua194YXR0cl9yZWNfYWxsb2NhdG9ycyhcXG5mcy9vY2ZzMi94YXR0ci5jOjY4MDA6XFx0XFx0XFx0XFx0c3RydWN0IG9jZnMyX3JlZmxpbmtfeGF0dHJfdHJlZV9hcmdzICphcmdzLFxcbmZzL29jZnMyL3hhdHRyLmMtNjgwMS1cXHRcXHRcXHRcXHRzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKnh0X2V0LFxcbi0tXFxuZnMvb2NmczIveGF0dHIuYy02ODg0LVxcbmZzL29jZnMyL3hhdHRyLmM6Njg4NTpzdGF0aWMgaW50IG9jZnMyX3JlZmxpbmtfeGF0dHJfYnVja2V0KGhhbmRsZV90ICpoYW5kbGUsXFxuZnMvb2NmczIveGF0dHIuYy02ODg2LVxcdFxcdFxcdFxcdHU2NCBibGtubywgdTY0IG5ld19ibGtubywgdTMyIGNsdXN0ZXJzLFxcbi0tXFxuZnMvb2NmczIveGF0dHIuYy02ODg5LVxcdFxcdFxcdFxcdHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICpkYXRhX2FjLFxcbmZzL29jZnMyL3hhdHRyLmM6Njg5MDpcXHRcXHRcXHRcXHRzdHJ1Y3Qgb2NmczJfcmVmbGlua194YXR0cl90cmVlX2FyZ3MgKmFyZ3MpXFxuZnMvb2NmczIveGF0dHIuYy02ODkxLXtcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmMtNjkzOC1cXG5mcy9vY2ZzMi94YXR0ci5jOjY5Mzk6XFx0XFx0cmV0ID0gb2NmczJfcmVmbGlua194YXR0cl9oZWFkZXIoaGFuZGxlLCBhcmdzLVxcdTAwM2VyZWZsaW5rLFxcbmZzL29jZnMyL3hhdHRyLmMtNjk0MC1cXHRcXHRcXHRcXHRcXHRhcmdzLVxcdTAwM2VvbGRfYnVja2V0LVxcdTAwM2VidV9iaHNbMF0sXFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jLTY5NzUtXFxuZnMvb2NmczIveGF0dHIuYzo2OTc2OnN0YXRpYyBpbnQgb2NmczJfcmVmbGlua194YXR0cl9idWNrZXRzKGhhbmRsZV90ICpoYW5kbGUsXFxuZnMvb2NmczIveGF0dHIuYy02OTc3LVxcdFxcdFxcdFxcdHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuZnMvb2NmczIveGF0dHIuYzo2OTc4OlxcdFxcdFxcdFxcdHN0cnVjdCBvY2ZzMl9yZWZsaW5rX3hhdHRyX3RyZWVfYXJncyAqYXJncyxcXG5mcy9vY2ZzMi94YXR0ci5jLTY5NzktXFx0XFx0XFx0XFx0c3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCxcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmMtNzAwOS1cXG5mcy9vY2ZzMi94YXR0ci5jOjcwMTA6XFx0XFx0cmV0ID0gb2NmczJfcmVmbGlua194YXR0cl9idWNrZXQoaGFuZGxlLCBibGtubyxcXG5mcy9vY2ZzMi94YXR0ci5jLTcwMTEtXFx0XFx0XFx0XFx0XFx0XFx0IG5ld19ibGtubywgbnVtX2NsdXN0ZXJzLFxcbi0tXFxuZnMvb2NmczIveGF0dHIuYy03MDMyLVxcbmZzL29jZnMyL3hhdHRyLmM6NzAzMzpcXHRcXHR0cmFjZV9vY2ZzMl9yZWZsaW5rX3hhdHRyX2J1Y2tldHMoKHVuc2lnbmVkIGxvbmcgbG9uZyluZXdfYmxrbm8sXFxuZnMvb2NmczIveGF0dHIuYy03MDM0LVxcdFxcdFxcdFxcdFxcdFxcdCAgbnVtX2NsdXN0ZXJzLCByZWZsaW5rX2Nwb3MpO1xcbi0tXFxuZnMvb2NmczIveGF0dHIuYy03MDQ2LSAqL1xcbmZzL29jZnMyL3hhdHRyLmM6NzA0NzpzdGF0aWMgaW50IG9jZnMyX3JlZmxpbmtfeGF0dHJfcmVjKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuZnMvb2NmczIveGF0dHIuYy03MDQ4LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBidWZmZXJfaGVhZCAqcm9vdF9iaCxcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmMtNzA1NS1cXHRoYW5kbGVfdCAqaGFuZGxlO1xcbmZzL29jZnMyL3hhdHRyLmM6NzA1NjpcXHRzdHJ1Y3Qgb2NmczJfcmVmbGlua194YXR0cl90cmVlX2FyZ3MgKmFyZ3MgPVxcbmZzL29jZnMyL3hhdHRyLmM6NzA1NzpcXHRcXHRcXHQoc3RydWN0IG9jZnMyX3JlZmxpbmtfeGF0dHJfdHJlZV9hcmdzICopcGFyYTtcXG5mcy9vY2ZzMi94YXR0ci5jLTcwNTgtXFx0c3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihpbm9kZS1cXHUwMDNlaV9zYik7XFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jLTcwNjItXFxuZnMvb2NmczIveGF0dHIuYzo3MDYzOlxcdHRyYWNlX29jZnMyX3JlZmxpbmtfeGF0dHJfcmVjKCh1bnNpZ25lZCBsb25nIGxvbmcpYmxrbm8sIGxlbik7XFxuZnMvb2NmczIveGF0dHIuYy03MDY0LVxcbi0tXFxuZnMvb2NmczIveGF0dHIuYy03MDgzLVxcbmZzL29jZnMyL3hhdHRyLmM6NzA4NDpcXHRyZXQgPSBvY2ZzMl9yZWZsaW5rX3hhdHRyX2J1Y2tldHMoaGFuZGxlLCBpbm9kZSwgYXJncywgXFx1MDAyNmV0LFxcbmZzL29jZnMyL3hhdHRyLmMtNzA4NS1cXHRcXHRcXHRcXHRcXHQgIG1ldGFfYWMsIGRhdGFfYWMsXFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jLTcxMDQtICovXFxuZnMvb2NmczIveGF0dHIuYzo3MTA1OnN0YXRpYyBpbnQgb2NmczJfcmVmbGlua194YXR0cl90cmVlKHN0cnVjdCBvY2ZzMl94YXR0cl9yZWZsaW5rICphcmdzLFxcbmZzL29jZnMyL3hhdHRyLmMtNzEwNi1cXHRcXHRcXHRcXHQgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpibGtfYmgsXFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jLTcxMDktXFx0aW50IHJldDtcXG5mcy9vY2ZzMi94YXR0ci5jOjcxMTA6XFx0c3RydWN0IG9jZnMyX3JlZmxpbmtfeGF0dHJfdHJlZV9hcmdzIHBhcmE7XFxuZnMvb2NmczIveGF0dHIuYy03MTExLVxcbi0tXFxuZnMvb2NmczIveGF0dHIuYy03MTMwLVxcdHJldCA9IG9jZnMyX2l0ZXJhdGVfeGF0dHJfaW5kZXhfYmxvY2soYXJncy1cXHUwMDNlb2xkX2lub2RlLCBibGtfYmgsXFxuZnMvb2NmczIveGF0dHIuYzo3MTMxOlxcdFxcdFxcdFxcdFxcdCAgICAgIG9jZnMyX3JlZmxpbmtfeGF0dHJfcmVjLFxcbmZzL29jZnMyL3hhdHRyLmMtNzEzMi1cXHRcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2cGFyYSk7XFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jLTcxNDEtXFxuZnMvb2NmczIveGF0dHIuYzo3MTQyOnN0YXRpYyBpbnQgb2NmczJfcmVmbGlua194YXR0cl9pbl9ibG9jayhzdHJ1Y3Qgb2NmczJfeGF0dHJfcmVmbGluayAqYXJncyxcXG5mcy9vY2ZzMi94YXR0ci5jLTcxNDMtXFx0XFx0XFx0XFx0XFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpibGtfYmgpXFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jLTcxNjEtXFx0aWYgKCFpbmRleGVkKVxcbmZzL29jZnMyL3hhdHRyLmM6NzE2MjpcXHRcXHRyZXQgPSBvY2ZzMl9yZWZsaW5rX3hhdHRyX2Jsb2NrKGFyZ3MsIGJsa19iaCwgbmV3X2Jsa19iaCk7XFxuZnMvb2NmczIveGF0dHIuYy03MTYzLVxcdGVsc2VcXG5mcy9vY2ZzMi94YXR0ci5jOjcxNjQ6XFx0XFx0cmV0ID0gb2NmczJfcmVmbGlua194YXR0cl90cmVlKGFyZ3MsIGJsa19iaCwgbmV3X2Jsa19iaCk7XFxuZnMvb2NmczIveGF0dHIuYy03MTY1LVxcdGlmIChyZXQpXFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jLTcxNzItXFxuZnMvb2NmczIveGF0dHIuYzo3MTczOnN0YXRpYyBpbnQgb2NmczJfcmVmbGlua194YXR0cl9ub19zZWN1cml0eShzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkgKnhlKVxcbmZzL29jZnMyL3hhdHRyLmMtNzE3NC17XFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jLTcxODEtXFxuZnMvb2NmczIveGF0dHIuYzo3MTgyOmludCBvY2ZzMl9yZWZsaW5rX3hhdHRycyhzdHJ1Y3QgaW5vZGUgKm9sZF9pbm9kZSxcXG5mcy9vY2ZzMi94YXR0ci5jLTcxODMtXFx0XFx0XFx0IHN0cnVjdCBidWZmZXJfaGVhZCAqb2xkX2JoLFxcbi0tXFxuZnMvb2NmczIveGF0dHIuYy03MjE2LVxcdGVsc2VcXG5mcy9vY2ZzMi94YXR0ci5jOjcyMTc6XFx0XFx0YXJncy54YXR0cl9yZWZsaW5rZWQgPSBvY2ZzMl9yZWZsaW5rX3hhdHRyX25vX3NlY3VyaXR5O1xcbmZzL29jZnMyL3hhdHRyLmMtNzIxOC1cXG5mcy9vY2ZzMi94YXR0ci5jLTcyMTktXFx0aWYgKG9pLVxcdTAwM2VpcF9keW5fZmVhdHVyZXMgXFx1MDAyNiBPQ0ZTMl9JTkxJTkVfWEFUVFJfRkwpIHtcXG5mcy9vY2ZzMi94YXR0ci5jOjcyMjA6XFx0XFx0cmV0ID0gb2NmczJfcmVmbGlua194YXR0cl9pbmxpbmUoXFx1MDAyNmFyZ3MpO1xcbmZzL29jZnMyL3hhdHRyLmMtNzIyMS1cXHRcXHRpZiAocmV0KSB7XFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jLTcyMzYtXFxuZnMvb2NmczIveGF0dHIuYzo3MjM3OlxcdHJldCA9IG9jZnMyX3JlZmxpbmtfeGF0dHJfaW5fYmxvY2soXFx1MDAyNmFyZ3MsIGJsa19iaCk7XFxuZnMvb2NmczIveGF0dHIuYy03MjM4LVxcdGlmIChyZXQpXFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5oPTc4PWludCBvY2ZzMl94YXR0cl9hdHRhY2hfcmVmY291bnRfdHJlZShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvb2NmczIveGF0dHIuaC04Mi1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBvY2ZzMl9jYWNoZWRfZGVhbGxvY19jdHh0ICpkZWFsbG9jKTtcXG5mcy9vY2ZzMi94YXR0ci5oOjgzOmludCBvY2ZzMl9yZWZsaW5rX3hhdHRycyhzdHJ1Y3QgaW5vZGUgKm9sZF9pbm9kZSxcXG5mcy9vY2ZzMi94YXR0ci5oLTg0LVxcdFxcdFxcdCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKm9sZF9iaCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDg6MDg6NDYuMDIwOTMyNjgxWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4NDU0OTc3NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE9DRlMyIEZ1bmN0aW9uIENhbGxzIGFuZCBTY29wZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZSBjYWxsIGZsb3cgaGVyZS4gSXQgYXBwZWFycyBgb2NmczJfcmVmbGlua2AgaXMgdWx0aW1hdGVseSB0cmlnZ2VyZWQgdGhyb3VnaCB0aGUgaW9jdGwgc3lzdGVtIGNhbGxzLCBzcGVjaWZpY2FsbHkgYG9jZnMyX3JlZmxpbmtfaW9jdGxgLCB3aGljaCBpdHNlbGYgaXMgaW52b2tlZCBieSBgb2NmczJfaW9jdGxgIGFuZCBgb2NmczJfY29tcGF0X2lvY3RsYC4gTXkgbWFpbiBmb2N1cyBpcyBvbiBhIGZldyBrZXkgZnVuY3Rpb25zIGluIHRoaXMgY29udGV4dDogYG9jZnMyX21rbm9kYCwgYG9jZnMyX21rZGlyYCwgYG9jZnMyX2NyZWF0ZWAsIGBvY2ZzMl9zeW1saW5rYCwgbmF0dXJhbGx5IGBvY2ZzMl9yZWZsaW5rYCwgYW5kIHRoZW4gYWxzbyB0aGUgQUNML3NlY3VyaXR5IGluaXRpYWxpemF0aW9uIHJvdXRpbmVzOiBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYCwgYG9jZnMyX2luaXRfYWNsYCwgYG9jZnMyX2FjbF9pbml0X3ByZXBhcmVgLCBhbmQgZmluYWxseSBgb2NmczJfY2FsY194YXR0cl9pbml0YC5cblxuV2FpdCBhIG1pbnV0ZSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBzY29wZSBvbiB0aG9zZSBmaXJzdCBmb3VyIEkgbGlzdGVkLiBBcmUgYG9jZnMyX21rbm9kYCwgYG9jZnMyX21rZGlyYCwgYG9jZnMyX2NyZWF0ZWAsIGFuZCBgb2NmczJfc3ltbGlua2AgYWN0dWFsbHkgc3RhdGljPyBIbW0sIHllYWgsIHRoZXkgYXJlLiBUaGF0J3MgZ29vZCB0byBrbm93LiBTbywgdGhhdCBsZWF2ZXMgbWUgd2l0aCB0aGUgaW5pdGlhbGl6YXRpb24gcm91dGluZXMgYW5kIGBvY2ZzMl94YXR0cl9zZXRfaGFuZGxlYCwgYW5kIHRoZSByZWZsaW5rIGZ1bmN0aW9uIGFzIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzLiBUaGF0J3MgaGVscGZ1bCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIGtlcm5lbCBpbnRlcmFjdHMgd2l0aCB0aGVzZSBwYXJ0cyBvZiB0aGUgZmlsZXN5c3RlbS4gSSBzaG91bGQgdGFrZSBhIGxvb2sgYXQgYG9jZnMyX3hhdHRyX3NldF9oYW5kbGVgIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjExMDgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDg6MDg6NTIuODY2NDMzNjI2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDYyNDYzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvY2ZzMl94YXR0cl9zZXRfaGFuZGxlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL29jZnMyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9vY2ZzMi9hY2wuYz0yMTQ9c3RhdGljIGludCBvY2ZzMl9zZXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsXFxuLS1cXG5mcy9vY2ZzMi9hY2wuYy0yNDktXFx0aWYgKGhhbmRsZSlcXG5mcy9vY2ZzMi9hY2wuYzoyNTA6XFx0XFx0cmV0ID0gb2NmczJfeGF0dHJfc2V0X2hhbmRsZShoYW5kbGUsIGlub2RlLCBkaV9iaCwgbmFtZV9pbmRleCxcXG5mcy9vY2ZzMi9hY2wuYy0yNTEtXFx0XFx0XFx0XFx0XFx0ICAgICBcXFwiXFxcIiwgdmFsdWUsIHNpemUsIDAsXFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jPTMzMDU9c3RhdGljIGludCBvY2ZzMl9pbml0X3hhdHRyX3NldF9jdHh0KHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jLTMzNjAtXFxuZnMvb2NmczIveGF0dHIuYzozMzYxOnN0YXRpYyBpbnQgX19vY2ZzMl94YXR0cl9zZXRfaGFuZGxlKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuZnMvb2NmczIveGF0dHIuYy0zMzYyLVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgb2NmczJfZGlub2RlICpkaSxcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmMtMzUwMi0gKi9cXG5mcy9vY2ZzMi94YXR0ci5jOjM1MDM6aW50IG9jZnMyX3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlX3QgKmhhbmRsZSxcXG5mcy9vY2ZzMi94YXR0ci5jLTM1MDQtXFx0XFx0XFx0ICAgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmMtMzU2Ni1cXG5mcy9vY2ZzMi94YXR0ci5jOjM1Njc6XFx0cmV0ID0gX19vY2ZzMl94YXR0cl9zZXRfaGFuZGxlKGlub2RlLCBkaSwgXFx1MDAyNnhpLCBcXHUwMDI2eGlzLCBcXHUwMDI2eGJzLCBcXHUwMDI2Y3R4dCk7XFxuZnMvb2NmczIveGF0dHIuYy0zNTY4LVxcbi0tXFxuZnMvb2NmczIveGF0dHIuYz0zNTgzPWludCBvY2ZzMl94YXR0cl9zZXQoc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmMtMzcwMy1cXG5mcy9vY2ZzMi94YXR0ci5jOjM3MDQ6XFx0cmV0ID0gX19vY2ZzMl94YXR0cl9zZXRfaGFuZGxlKGlub2RlLCBkaSwgXFx1MDAyNnhpLCBcXHUwMDI2eGlzLCBcXHUwMDI2eGJzLCBcXHUwMDI2Y3R4dCk7XFxuZnMvb2NmczIveGF0dHIuYy0zNzA1LVxcdG9jZnMyX3VwZGF0ZV9pbm9kZV9mc3luY190cmFucyhjdHh0LmhhbmRsZSwgaW5vZGUsIDApO1xcbi0tXFxuZnMvb2NmczIveGF0dHIuYz03Mzc2PWludCBvY2ZzMl9pbml0X3NlY3VyaXR5X3NldChoYW5kbGVfdCAqaGFuZGxlLFxcbi0tXFxuZnMvb2NmczIveGF0dHIuYy03MzgyLXtcXG5mcy9vY2ZzMi94YXR0ci5jOjczODM6XFx0cmV0dXJuIG9jZnMyX3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlLCBpbm9kZSwgZGlfYmgsXFxuZnMvb2NmczIveGF0dHIuYy03Mzg0LVxcdFxcdFxcdFxcdCAgICAgT0NGUzJfWEFUVFJfSU5ERVhfU0VDVVJJVFksXFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5oPTM4PWludCBvY2ZzMl94YXR0cl9zZXQoc3RydWN0IGlub2RlICosIGludCwgY29uc3QgY2hhciAqLCBjb25zdCB2b2lkICosXFxuZnMvb2NmczIveGF0dHIuaC0zOS1cXHRcXHQgICAgc2l6ZV90LCBpbnQpO1xcbmZzL29jZnMyL3hhdHRyLmg6NDA6aW50IG9jZnMyX3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlX3QgKiwgc3RydWN0IGlub2RlICosIHN0cnVjdCBidWZmZXJfaGVhZCAqLFxcbmZzL29jZnMyL3hhdHRyLmgtNDEtXFx0XFx0XFx0ICAgaW50LCBjb25zdCBjaGFyICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBpbnQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDA4OjA4OjUyLjkyNzA2MjYwNFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzYzNzM2MzkwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipUcmFjaW5nIHRoZSBBQ0wgYW5kIFNlY3VyaXR5IEF0dHJpYnV0ZSBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gaG93IHRoaXMgYWxsIGZpdHMgdG9nZXRoZXIuIEknbSBmb2N1c2luZyBvbiB0aGUgQUNMIGFuZCBzZWN1cml0eSBhdHRyaWJ1dGUgaW5pdGlhbGl6YXRpb24gcGF0aHdheXMgd2l0aGluIHRoaXMgT0NGUzIgZmlsZXN5c3RlbS4gTXkgdGhpbmtpbmcgaXMgdGhhdCB0aGUgYmVzdCBhcHByb2FjaCBoZXJlIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGxpbmcgcmVsYXRpb25zaGlwcy5cblxuSXQgbG9va3MgbGlrZSBgb2NmczJfeGF0dHJfc2V0X2hhbmRsZWAgaXMgdGhlIHdvcmtob3JzZSBoZXJlLCBhbmQgaXQncyBjYWxsZWQgZnJvbSB0d28ga2V5IGxvY2F0aW9uczogYG9jZnMyX3NldF9hY2xgIGFuZCBgb2NmczJfaW5pdF9zZWN1cml0eV9zZXRgLiBBbHJpZ2h0LCBgb2NmczJfc2V0X2FjbGAgaXRzZWxmIGlzIGNhbGxlZCBieSBgb2NmczJfaW5pdF9hY2xgIGFuZCBgb2NmczJfaW9wX3NldF9hY2xgLiBBbmQsIHNpbmNlIGBvY2ZzMl9pb3Bfc2V0X2FjbGAgaXMgdGhlIGAuc2V0X2FjbGAgaW5vZGUgb3BlcmF0aW9uLCB0aGF0IGNvbmZpcm1zIGl0cyBpbXBvcnRhbmNlLlxuXG5UaGVyZWZvcmUsIG15IG1haW4gaW50ZXJlc3QgaXMgaW4gdGhlc2UgZW50cnkgcG9pbnRzOlxuXG4qICAgYG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbGAgKGFzIGEgcG90ZW50aWFsIGluaXRpYWxpemF0aW9uIGVudHJ5IHBvaW50KVxuKiAgIGBvY2ZzMl9pbml0X2FjbGAgKGFub3RoZXIgaW5pdGlhbGl6YXRpb24gZW50cnkgcG9pbnQpXG4qICAgYG9jZnMyX2FjbF9pbml0X3ByZXBhcmVgIChhIGZ1bmN0aW9uIHdoaWNoIGFwcGVhcnMgdG8gYmUgaW52b2x2ZWQgaW4gdGhlIHByZXBhcmF0aW9uKVxuKiAgIGBvY2ZzMl9jYWxjX3hhdHRyX2luaXRgIChwZXJoYXBzIHVzZWQgZm9yIGluaXRpYWwgY2FsY3VsYXRpb25zIHJlbGF0ZWQgdG8gZXh0ZW5kZWQgYXR0cmlidXRlcylcbiogICBgb2NmczJfeGF0dHJfc2V0X2hhbmRsZWAgKHRoZSBjb3JlIGZ1bmN0aW9uIGZvciBzZXR0aW5nIHRoZSBhdHRyaWJ1dGVzKVxuKiAgIGBvY2ZzMl9pb3Bfc2V0X2FjbGAgKHRoZSBhY3R1YWwgaW5vZGUgb3BlcmF0aW9uIGNhbGxlZCBieSB1c2Vyc3BhY2UpXG5cbkJ1dCBJIGhhdmUgdG8gYmUgdGhvcm91Z2guLi4gSXMgdGhlcmUgYW55IG90aGVyIGVudHJ5IHBvaW50P1xuXG5IbW0sIEkgc2VlIGBvY2ZzMl9yZWZsaW5rX2lvY3RsYCBpcyBub24tc3RhdGljLCB3aGljaCBtZWFucyBpdCdzIGV4cG9ydGVkIGFuZCBjb3VsZCBiZSBpbnZvbHZlZCBpbiBzb21lIHJlbGF0ZWQgb3BlcmF0aW9ucy4gQW5kLCBvZiBjb3Vyc2UsIHRoZSBnZW5lcmFsIGBvY2ZzMl9pb2N0bGAgYW5kIGBvY2ZzMl9jb21wYXRfaW9jdGxgIGZ1bmN0aW9ucyBhcmUgbm9uLXN0YXRpYyBhbmQgd29ydGggYSBsb29rLCB0b28uXG5cbkkgc2hvdWxkIHByb2JhYmx5IGZvY3VzIG9uIGBvY2ZzMl9pb3Bfc2V0X2FjbGAgbmV4dCB0byBzdGFydCBteSBpbnZlc3RpZ2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjU4NywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwODowOTowNi41NjQ0MjkyNjdaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxMzE2MTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9jZnMyX2lvcF9zZXRfYWNsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL29jZnMyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9vY2ZzMi9hY2wuYz0yMTQ9c3RhdGljIGludCBvY2ZzMl9zZXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsXFxuLS1cXG5mcy9vY2ZzMi9hY2wuYy0yNjItXFxuZnMvb2NmczIvYWNsLmM6MjYzOmludCBvY2ZzMl9pb3Bfc2V0X2FjbChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbmZzL29jZnMyL2FjbC5jLTI2NC1cXHRcXHQgICAgICBzdHJ1Y3QgcG9zaXhfYWNsICphY2wsIGludCB0eXBlKVxcbi0tXFxuZnMvb2NmczIvYWNsLmg9MTk9c3RydWN0IHBvc2l4X2FjbCAqb2NmczJfaW9wX2dldF9hY2woc3RydWN0IGlub2RlICppbm9kZSwgaW50IHR5cGUsIGJvb2wgcmN1KTtcXG5mcy9vY2ZzMi9hY2wuaDoyMDppbnQgb2NmczJfaW9wX3NldF9hY2woc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG5mcy9vY2ZzMi9hY2wuaC0yMS1cXHRcXHQgICAgICBzdHJ1Y3QgcG9zaXhfYWNsICphY2wsIGludCB0eXBlKTtcXG4tLVxcbmZzL29jZnMyL2ZpbGUuYz0yNzg4PWNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG9jZnMyX2ZpbGVfaW9wcyA9IHtcXG4tLVxcbmZzL29jZnMyL2ZpbGUuYy0yNzk0LVxcdC5nZXRfaW5vZGVfYWNsXFx0PSBvY2ZzMl9pb3BfZ2V0X2FjbCxcXG5mcy9vY2ZzMi9maWxlLmM6Mjc5NTpcXHQuc2V0X2FjbFxcdD0gb2NmczJfaW9wX3NldF9hY2wsXFxuZnMvb2NmczIvZmlsZS5jLTI3OTYtXFx0LmZpbGVhdHRyX2dldFxcdD0gb2NmczJfZmlsZWF0dHJfZ2V0LFxcbi0tXFxuZnMvb2NmczIvZmlsZS5jPTI4MDA9Y29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgb2NmczJfc3BlY2lhbF9maWxlX2lvcHMgPSB7XFxuLS1cXG5mcy9vY2ZzMi9maWxlLmMtMjgwNS1cXHQuZ2V0X2lub2RlX2FjbFxcdD0gb2NmczJfaW9wX2dldF9hY2wsXFxuZnMvb2NmczIvZmlsZS5jOjI4MDY6XFx0LnNldF9hY2xcXHQ9IG9jZnMyX2lvcF9zZXRfYWNsLFxcbmZzL29jZnMyL2ZpbGUuYy0yODA3LX07XFxuLS1cXG5mcy9vY2ZzMi9uYW1laS5jPTI5MzM9Y29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgb2NmczJfZGlyX2lvcHMgPSB7XFxuLS1cXG5mcy9vY2ZzMi9uYW1laS5jLTI5NDgtXFx0LmdldF9pbm9kZV9hY2xcXHQ9IG9jZnMyX2lvcF9nZXRfYWNsLFxcbmZzL29jZnMyL25hbWVpLmM6Mjk0OTpcXHQuc2V0X2FjbFxcdD0gb2NmczJfaW9wX3NldF9hY2wsXFxuZnMvb2NmczIvbmFtZWkuYy0yOTUwLVxcdC5maWxlYXR0cl9nZXRcXHQ9IG9jZnMyX2ZpbGVhdHRyX2dldCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDg6MDk6MDYuNjI1NzQ5Mjc0WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY1ODk4MDAxMDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBPQ0ZTMiBBQ0wgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBvY2ZzMl9pb3Bfc2V0X2FjbGAgZnVuY3Rpb24g4oCTIHRoYXQncyB0aGUgYC5zZXRfYWNsYCBvcGVyYXRpb24sIGdvdCBpdC4gQnV0IHRoZSBwYXRjaCBpcyBzcGVjaWZpY2FsbHkgdG91Y2hpbmcgYG9jZnMyX2luaXRfYWNsYCBhbmQgYG9jZnMyX2NhbGNfeGF0dHJfaW5pdGAuIFRob3NlIGFyZSBnZXR0aW5nIGNhbGxlZCBkdXJpbmcgaW5vZGUgY3JlYXRpb24sIHRoaW5ncyBsaWtlIGBta25vZGAsIGBta2RpcmAsIGBjcmVhdGVgLCBgc3ltbGlua2AsIGFuZCBgcmVmbGlua2AuIFNvLCB0aGUgcmVhbGx5IGtleSBzeW1ib2xzIHRvIGZvY3VzIG9uIGFyZTogYG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbGAsIGBvY2ZzMl9pbml0X2FjbGAsIGBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlYCwgYG9jZnMyX2NhbGNfeGF0dHJfaW5pdGAsIGBvY2ZzMl94YXR0cl9zZXRfaGFuZGxlYCwgYW5kIGBvY2ZzMl9yZWZsaW5rX2lvY3RsYC5cblxuTGV0J3MgbWFrZSBzdXJlIHRoZXNlIHRoaW5ncyBhcmUgYWN0dWFsbHkgcmVhY2hhYmxlLiAgYG9jZnMyX21rbm9kYCwgeWVwLCB0aGF0IGdvZXMgdGhyb3VnaCBgdmZzX21rbm9kYC4gYG9jZnMyX21rZGlyYCBpcyBoYW5kbGVkIHRocm91Z2ggYHZmc19ta2RpcmAuIEFuZCBgb2NmczJfY3JlYXRlYCB1c2VzIGB2ZnNfY3JlYXRlYCwgYG9jZnMyX3N5bWxpbmtgIGdvZXMgdGhyb3VnaCBgdmZzX3N5bWxpbmtgLCBhbmQgIGBvY2ZzMl9yZWZsaW5rYCBpcyBhY2Nlc3NlZCB2aWEgYGlvY3RsYC4gR29vZCwgdGhpcyBwYXRjaCBpcyBkZWZpbml0ZWx5IGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZS5cblxuQWxyaWdodCwgdGhlIHBhdGNoIGlzIHJlbW92aW5nIGBkb3duX3dyaXRlKFx1MDAyNk9DRlMyX0koaW5vZGUpLVx1MDAzZWlwX3hhdHRyX3NlbSlgIGZyb20gYG9jZnMyX3hhdHRyX3NldF9oYW5kbGVgLiBBcHBhcmVudGx5LCB0aGF0IHdhcyBjYXVzaW5nIHNvbWUga2luZCBvZiBkZWFkbG9jaywgYW5kIGl0J3Mgb25seSBjYWxsZWQgZHVyaW5nIGlub2RlIGNyZWF0aW9uIHdoZW4gdGhlIGlub2RlIGlzbid0IHlldCBwdWJsaXNoZWQuIEJ1dCwgd2FpdCBhIG1pbnV0ZSwgYG9jZnMyX3hhdHRyX3NldF9oYW5kbGVgIGlzIGFsc28gdXNlZCBieSBgb2NmczJfc2V0X2FjbGAgYW5kIGBvY2ZzMl9pbml0X3NlY3VyaXR5X3NldGAuICBIYW5nIG9uLCBpcyBgb2NmczJfc2V0X2FjbGAgKm9ubHkqIGNhbGxlZCBkdXJpbmcgaW5vZGUgY3JlYXRpb24/IEkgbmVlZCB0byBkb3VibGUtY2hlY2sgYG9jZnMyX3NldF9hY2xgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzk1MSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwODowOToxMy4yMTU1NTIyNjZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTM2MDgyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvY2ZzMl9zZXRfYWNsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL29jZnMyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9vY2ZzMi9hY2wuYz0xNTg9c3RhdGljIGludCBvY2ZzMl9hY2xfc2V0X21vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCxcXG4tLVxcbmZzL29jZnMyL2FjbC5jLTIxMy0gKi9cXG5mcy9vY2ZzMi9hY2wuYzoyMTQ6c3RhdGljIGludCBvY2ZzMl9zZXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsXFxuZnMvb2NmczIvYWNsLmMtMjE1LVxcdFxcdFxcdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvb2NmczIvYWNsLmM9MjYzPWludCBvY2ZzMl9pb3Bfc2V0X2FjbChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbi0tXFxuZnMvb2NmczIvYWNsLmMtMjg1LVxcdH1cXG5mcy9vY2ZzMi9hY2wuYzoyODY6XFx0c3RhdHVzID0gb2NmczJfc2V0X2FjbChOVUxMLCBpbm9kZSwgYmgsIHR5cGUsIGFjbCwgTlVMTCwgTlVMTCk7XFxuZnMvb2NmczIvYWNsLmMtMjg3LXVubG9jazpcXG4tLVxcbmZzL29jZnMyL2FjbC5jPTMyMT1pbnQgb2NmczJfYWNsX2NobW9kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpXFxuLS1cXG5mcy9vY2ZzMi9hY2wuYy0zNDAtXFx0XFx0cmV0dXJuIHJldDtcXG5mcy9vY2ZzMi9hY2wuYzozNDE6XFx0cmV0ID0gb2NmczJfc2V0X2FjbChOVUxMLCBpbm9kZSwgTlVMTCwgQUNMX1RZUEVfQUNDRVNTLFxcbmZzL29jZnMyL2FjbC5jLTM0Mi1cXHRcXHRcXHQgICAgYWNsLCBOVUxMLCBOVUxMKTtcXG4tLVxcbmZzL29jZnMyL2FjbC5jPTQxND1pbnQgb2NmczJfaW5pdF9hY2woaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL29jZnMyL2FjbC5jLTQyNy1cXHRcXHRpZiAoU19JU0RJUihpbm9kZS1cXHUwMDNlaV9tb2RlKSBcXHUwMDI2XFx1MDAyNiBzdGF0ZS1cXHUwMDNlZGVmYXVsdF9hY2wpIHtcXG5mcy9vY2ZzMi9hY2wuYzo0Mjg6XFx0XFx0XFx0cmV0ID0gb2NmczJfc2V0X2FjbChoYW5kbGUsIGlub2RlLCBkaV9iaCxcXG5mcy9vY2ZzMi9hY2wuYy00MjktXFx0XFx0XFx0XFx0XFx0ICAgIEFDTF9UWVBFX0RFRkFVTFQsXFxuLS1cXG5mcy9vY2ZzMi9hY2wuYy00NDQtXFx0XFx0aWYgKHN0YXRlLVxcdTAwM2VhY2wpIHtcXG5mcy9vY2ZzMi9hY2wuYzo0NDU6XFx0XFx0XFx0cmV0ID0gb2NmczJfc2V0X2FjbChoYW5kbGUsIGlub2RlLCBkaV9iaCxcXG5mcy9vY2ZzMi9hY2wuYy00NDYtXFx0XFx0XFx0XFx0XFx0ICAgIEFDTF9UWVBFX0FDQ0VTUywgc3RhdGUtXFx1MDAzZWFjbCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDg6MDk6MTMuMzI0OTE2MzEyWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NjEzMjMyNzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBPQ0ZTMiBBQ0wgU2V0dGluZyBNZWNoYW5pc20qKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYG9jZnMyX3NldF9hY2xgIGZ1bmN0aW9uIGFuZCBpbW1lZGlhdGVseSBhIGtleSBwb2ludCBqdW1wcyBvdXQgYXQgbWUuIEknbSBzZWVpbmcgdGhhdCBpdCdzIGNhbGxlZCBieSBib3RoIGBvY2ZzMl9pb3Bfc2V0X2FjbGAgYW5kIGBvY2ZzMl9hY2xfY2htb2RgLiBUaGUgaW50ZXJlc3RpbmcgdGhpbmcgaXMgdGhhdCBzb21ldGltZXMsIHdpdGggdGhlc2UgY2FsbGVycywgdGhlICpoYW5kbGUqIHBhcmFtZXRlciBpcyBOVUxMLiBUaGF0IHNlZW1zIHNpZ25pZmljYW50LlxuXG5Ob3csIGEgYmVsbCBpcyByaW5naW5nIGluIG15IGhlYWQuIFdoZW4gdGhlICpoYW5kbGUqIGlzIE5VTEwsIGBvY2ZzMl9zZXRfYWNsYCBkb2Vzbid0IHVzZSB0aGUgaGFuZGxlLWJhc2VkIHhhdHRyIHNldHRpbmcgZnVuY3Rpb24sIGBvY2ZzMl94YXR0cl9zZXRfaGFuZGxlYCwgYnV0IHJhdGhlciB0aGUgc3RhbmRhcmQgYG9jZnMyX3hhdHRyX3NldGAuIFRoYXQgZGlmZmVyZW5jZSBjb3VsZCBiZSBjcnVjaWFsIGZvciBwZXJmb3JtYW5jZSBvciBpbiB0cmlnZ2VyaW5nIHNwZWNpZmljIGNvZGUgcGF0aHMuIFNvLCB0aGF0J3Mgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbi4gSXTigJlzIHRpbWUgdG8gZ28gaW50byBgb2NmczJfc2V0X2FjbGAgaXRzZWxmIGFuZCBzZWUgd2hhdCdzIGhhcHBlbmluZyBpbnRlcm5hbGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTM4OSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDA4OjA5OjE2Ljk4NjI0NDEwOFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODk5NTM4MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib2NmczJfeGF0dHJfc2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL29jZnMyL2FjbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL29jZnMyL2FjbC5jPTIxND1zdGF0aWMgaW50IG9jZnMyX3NldF9hY2woaGFuZGxlX3QgKmhhbmRsZSxcXG4tLVxcbmZzL29jZnMyL2FjbC5jLTI0OS1cXHRpZiAoaGFuZGxlKVxcbmZzL29jZnMyL2FjbC5jOjI1MDpcXHRcXHRyZXQgPSBvY2ZzMl94YXR0cl9zZXRfaGFuZGxlKGhhbmRsZSwgaW5vZGUsIGRpX2JoLCBuYW1lX2luZGV4LFxcbmZzL29jZnMyL2FjbC5jLTI1MS1cXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJcXFwiLCB2YWx1ZSwgc2l6ZSwgMCxcXG4tLVxcbmZzL29jZnMyL2FjbC5jLTI1My1cXHRlbHNlXFxuZnMvb2NmczIvYWNsLmM6MjU0OlxcdFxcdHJldCA9IG9jZnMyX3hhdHRyX3NldChpbm9kZSwgbmFtZV9pbmRleCwgXFxcIlxcXCIsIHZhbHVlLCBzaXplLCAwKTtcXG5mcy9vY2ZzMi9hY2wuYy0yNTUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDA4OjA5OjE3LjA3NjIwNjEzOFoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3OTU2MTU4NDQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgeGF0dHIgTW9kaWZpY2F0aW9uIGluIE9DRlMyKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJdCBzZWVtcyB0aGUga2V5IGhlcmUgaXMgYG9jZnMyX3hhdHRyX3NldF9oYW5kbGVgLCBhbmQgSSd2ZSBjb25maXJtZWQgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkIHdoZW4gYSB0cmFuc2FjdGlvbiBoYW5kbGUgaXMgcHJvdmlkZWQsIHdoaWNoIGlzIGR1cmluZyBpbm9kZSBjcmVhdGlvbi4gVGhlcmVmb3JlLCB0aGUgcGF0Y2gncyByZW1vdmFsIG9mIHRoZSB3cml0ZSBsb2NrIGBkb3duX3dyaXRlKFx1MDAyNk9DRlMyX0koaW5vZGUpLVx1MDAzZWlwX3hhdHRyX3NlbSlgIGZyb20gd2l0aGluIGBvY2ZzMl94YXR0cl9zZXRfaGFuZGxlYCBpcyB0aGUgY3J1Y2lhbCBjaGFuZ2UgdG8gZm9jdXMgb24uXG5cblNvLCB0aGUgY3JpdGljYWwgc3ltYm9scyB0byB1bmRlcnN0YW5kIGFyZTogYG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbGAsIGBvY2ZzMl9pbml0X2FjbGAsIGBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlYCwgYG9jZnMyX2NhbGNfeGF0dHJfaW5pdGAsIGFuZCwgb2YgY291cnNlLCBgb2NmczJfeGF0dHJfc2V0X2hhbmRsZWAuXG5cbk5vdywgcmVnYXJkaW5nIGNvbmZpZ3VyYXRpb24sIGl0IGxvb2tzIGxpa2UgYE9DRlMyX0ZTYCBpcyByZWxldmFudC4gTGV0J3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgZGVwZW5kZW5jaWVzIHRoYXQgYXJlbid0IHN0YW5kYXJkLiBJdCBkZXBlbmRzIG9uIGBJTkVUIFx1MDAyNlx1MDAyNiBTWVNGUyBcdTAwMjZcdTAwMjYgQ09ORklHRlNfRlNgLiBUaGUgaW5zdHJ1Y3Rpb25zIGFyZSBjbGVhcjogaW5jbHVkZSAqbm9uLXN0YW5kYXJkKiBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MuIFNpbmNlIGBJTkVUYCBhbmQgYFNZU0ZTYCBhcmUgY29tbW9uLCBJJ2xsIGFkZCBgQ09ORklHRlNfRlNgIGFuZCBgT0NGUzJfRlNgIHRvIHRoZSBsaXN0LiBKdXN0IHRvIGJlIHN1cmUsIEkgd2lsbCBkb3VibGUtY2hlY2sgYENPTkZJR0ZTX0ZTYC4gVGhpcyBsb29rcyBnb29kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTk0MywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwODowOToyNS4wMzIzNjY0OTRaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1Nzc0NDIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDT05GSUdGU19GU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9jb25maWdmcy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2NvbmZpZ2ZzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9jb25maWdmcy9LY29uZmlnOjI6Y29uZmlnIENPTkZJR0ZTX0ZTXFxuZnMvY29uZmlnZnMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJVc2Vyc3BhY2UtZHJpdmVuIGNvbmZpZ3VyYXRpb24gZmlsZXN5c3RlbVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDg6MDk6MjUuMTE4MTQ0OTQ1WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMjM3MzUzNDkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk9DRlMyIEFDTCBJbml0aWFsaXphdGlvbiBSZWZhY3RvcmluZyBBbmFseXNpcyoqXG5cbk9rYXksIHNvIGBDT05GSUdGU19GU2AgaXMgY29uZmlybWVkIGFzIHRyaXN0YXRlLCB0aGF0J3Mgc3RyYWlnaHRmb3J3YXJkLiBOb3csIGxldCdzIGxvb2sgYXQgd2hhdCBgT0NGUzJfRlNgIHJlcXVpcmVzLiBUaGUgZGVwZW5kZW5jaWVzIGFyZSBgSU5FVCBcdTAwMjZcdTAwMjYgU1lTRlMgXHUwMDI2XHUwMDI2IENPTkZJR0ZTX0ZTYCwgYW5kIGl0IHNlbGVjdHMgYEJVRkZFUl9IRUFEYCwgYEpCRDJgLCBgQ1JDMzJgLCBgUVVPVEFgLCBgUVVPVEFfVFJFRWAsIGBGU19QT1NJWF9BQ0xgLCBhbmQgYExFR0FDWV9ESVJFQ1RfSU9gLiBTbywgYE9DRlMyX0ZTYCBhbmQgYENPTkZJR0ZTX0ZTYCBhcmUgdGhlIGtleSBvbmVzIHRvIGtlZXAgYW4gZXllIG9uLlxuXG5OZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWNzIG9mIHRoZSBwYXRjaC4gVGhlIGZvY3VzIHN5bWJvbHMgYXJlOiBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYCwgYG9jZnMyX2luaXRfYWNsYCwgYG9jZnMyX2FjbF9pbml0X3ByZXBhcmVgLCBgb2NmczJfY2FsY194YXR0cl9pbml0YCwgYW5kIGBvY2ZzMl94YXR0cl9zZXRfaGFuZGxlYC4gVGhvc2UgYXJlIGFsbCBub24tc3RhdGljIGZ1bmN0aW9ucyBhbmQgYXBwZWFyIHRvIGJlIGRpcmVjdGx5IGludm9sdmVkLlxuXG5UaGUgcGF0Y2ggaXRzZWxmIGlzIGEgcmVmYWN0b3Jpbmcgb2YgQUNMIGluaXRpYWxpemF0aW9uIHdpdGhpbiBPQ0ZTMiBkdXJpbmcgaW5vZGUgY3JlYXRpb24uIEl0IGFpbXMgdG8gcHJldmVudCBhIGRlYWRsb2NrIGluIGBvY2ZzMl9pbml0X2FjbGAgYnkgcHJlLWNhbGN1bGF0aW5nIEFDTHMgYmVmb3JlIGxvY2tpbmcuIEZ1cnRoZXJtb3JlLCBpdCBhZGRyZXNzZXMgdGhlIHVzZSBvZiBgaXBfeGF0dHJfc2VtYCBsb2NrIHdpdGhpbiBgb2NmczJfeGF0dHJfc2V0X2hhbmRsZWAsIGFuZCBJIHNlZSB0aGUgcGF0Y2ggcmVtb3ZlcyBpdCwgYmVjYXVzZSBpdCBpcyBvbmx5IGNhbGxlZCBvbiBuZXcgaW5vZGVzLlxuXG5FZmZlY3RpdmVseSwgdGhlIHBhdGNoIG1vZGlmaWVzIGhvdyBBQ0xzIGFyZSBjYWxjdWxhdGVkIGFuZCBzZXQgd2hlbiBuZXcgaW5vZGVzIGFyZSBjcmVhdGVkIOKAkyB0aGluZ3MgbGlrZSBgbWtub2RgLCBgbWtkaXJgLCBgY3JlYXRlYCwgYHN5bWxpbmtgLCBhbmQgYHJlZmxpbmtgLiBUaGlzIGNsZWFybHkgYWZmZWN0cyB0aGUgY29yZSBPQ0ZTMiBsb2dpYyBhbmQgaXMgcmVhY2hhYmxlIHRocm91Z2ggc3RhbmRhcmQgVkZTIHN5c2NhbGxzIHdoZW4gb3BlcmF0aW5nIG9uIGFuIE9DRlMyIGZpbGVzeXN0ZW0uIFRoZSBcIldvcnRoRnV6emluZ1wiIGZsYWcgY29uZmlybXMgdGhpcyBpcyBhIGdvb2QgYXJlYSB0byBmb2N1cyBvbi5cblxuU28sIHRoZSBlbmFibGUgY29uZmlncyBhcmUgYE9DRlMyX0ZTYCBhbmQgYENPTkZJR0ZTX0ZTYC4gUmlnaHQsIGxldCdzIHN1Ym1pdCB0aGVzZSByZXN1bHRzIHdpdGggYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY3MTksIk91dHB1dFRva2VucyI6MTg2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDA4OjA5OjM1LjM1NTUwMTQwNloiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2Mjg5Njg2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiT0NGUzJfRlNcIixcbiAgICBcIkNPTkZJR0ZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsXCIsXG4gICAgXCJvY2ZzMl9pbml0X2FjbFwiLFxuICAgIFwib2NmczJfYWNsX2luaXRfcHJlcGFyZVwiLFxuICAgIFwib2NmczJfY2FsY194YXR0cl9pbml0XCIsXG4gICAgXCJvY2ZzMl94YXR0cl9zZXRfaGFuZGxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIEFDTCBpbml0aWFsaXphdGlvbiBkdXJpbmcgaW5vZGUgY3JlYXRpb24gaW4gT0NGUzIgdG8gcHJldmVudCBkZWFkbG9ja3MuIEl0IG1vZGlmaWVzIGhvdyBBQ0xzIGFyZSBjYWxjdWxhdGVkIGFuZCBzZXQgZm9yIG5ldyBpbm9kZXMgKGUuZy4sIHZpYSBta25vZCwgbWtkaXIsIGNyZWF0ZSwgc3ltbGluaywgcmVmbGluaykuIFRoZSBjaGFuZ2VzIGFyZSBpbiBjb3JlIE9DRlMyIGxvZ2ljIGFuZCBhcmUgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBWRlMgc3lzY2FsbHMgd2hlbiBvcGVyYXRpbmcgb24gYW4gT0NGUzIgZmlsZXN5c3RlbS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJPQ0ZTMl9GU1wiLFxuICAgIFwiQ09ORklHRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xcIixcbiAgICBcIm9jZnMyX2luaXRfYWNsXCIsXG4gICAgXCJvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlXCIsXG4gICAgXCJvY2ZzMl9jYWxjX3hhdHRyX2luaXRcIixcbiAgICBcIm9jZnMyX3hhdHRyX3NldF9oYW5kbGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgQUNMIGluaXRpYWxpemF0aW9uIGR1cmluZyBpbm9kZSBjcmVhdGlvbiBpbiBPQ0ZTMiB0byBwcmV2ZW50IGRlYWRsb2Nrcy4gSXQgbW9kaWZpZXMgaG93IEFDTHMgYXJlIGNhbGN1bGF0ZWQgYW5kIHNldCBmb3IgbmV3IGlub2RlcyAoZS5nLiwgdmlhIG1rbm9kLCBta2RpciwgY3JlYXRlLCBzeW1saW5rLCByZWZsaW5rKS4gVGhlIGNoYW5nZXMgYXJlIGluIGNvcmUgT0NGUzIgbG9naWMgYW5kIGFyZSByZWFjaGFibGUgdmlhIHN0YW5kYXJkIFZGUyBzeXNjYWxscyB3aGVuIG9wZXJhdGluZyBvbiBhbiBPQ0ZTMiBmaWxlc3lzdGVtLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowlvdf7[1] Phase: Succeeded StartedAt: 2026-07-30 08:09:47 +0000 UTC FinishedAt: 2026-07-30 08:09:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlvdf7[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-30 08:09:47 +0000 UTC FinishedAt: 2026-07-30 08:09:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlvdf7[2] Phase: Succeeded StartedAt: 2026-07-30 08:09:47 +0000 UTC FinishedAt: 2026-07-30 12:04:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlvdf7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_init_security_and_acl","ocfs2_init_acl","ocfs2_acl_init_prepare","ocfs2_calc_xattr_init","ocfs2_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"80fdec58-b7f6-413d-beea-7c8cefbc7625","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-30 08:09:47 +0000 UTC FinishedAt: 2026-07-30 12:04:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_init_security_and_acl","ocfs2_init_acl","ocfs2_acl_init_prepare","ocfs2_calc_xattr_init","ocfs2_xattr_set_handle"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"80fdec58-b7f6-413d-beea-7c8cefbc7625","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowlvdf7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_init_security_and_acl","ocfs2_init_acl","ocfs2_acl_init_prepare","ocfs2_calc_xattr_init","ocfs2_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"80fdec58-b7f6-413d-beea-7c8cefbc7625","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-30 08:09:47 +0000 UTC FinishedAt: 2026-07-30 08:10:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlvdf7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_init_security_and_acl","ocfs2_init_acl","ocfs2_acl_init_prepare","ocfs2_calc_xattr_init","ocfs2_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"80fdec58-b7f6-413d-beea-7c8cefbc7625","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-30 08:09:47 +0000 UTC FinishedAt: 2026-07-30 08:09:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflowlvdf7/series-workflowlvdf7-convert-artifact-1866741338/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlvdf7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_init_security_and_acl","ocfs2_init_acl","ocfs2_acl_init_prepare","ocfs2_calc_xattr_init","ocfs2_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"80fdec58-b7f6-413d-beea-7c8cefbc7625","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-30 08:10:08 +0000 UTC FinishedAt: 2026-07-30 08:31:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlvdf7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_init_security_and_acl","ocfs2_init_acl","ocfs2_acl_init_prepare","ocfs2_calc_xattr_init","ocfs2_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"80fdec58-b7f6-413d-beea-7c8cefbc7625","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-30 08:10:08 +0000 UTC FinishedAt: 2026-07-30 08:31:12 +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:*e4fbc401-b361-43aa-9323-638eaa66b4fb,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-workflowlvdf7/series-workflowlvdf7-convert-artifact-1866741338/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": "f88fd1ad-1087-486e-82b9-f7cdb82a0f8a", "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-workflowlvdf7/series-workflowlvdf7-build-action-208825096/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlvdf7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_init_security_and_acl","ocfs2_init_acl","ocfs2_acl_init_prepare","ocfs2_calc_xattr_init","ocfs2_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"80fdec58-b7f6-413d-beea-7c8cefbc7625","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-30 08:10:08 +0000 UTC FinishedAt: 2026-07-30 08:31:02 +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:*e4fbc401-b361-43aa-9323-638eaa66b4fb,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-workflowlvdf7/series-workflowlvdf7-convert-artifact-1866741338/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": "f88fd1ad-1087-486e-82b9-f7cdb82a0f8a", "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-workflowlvdf7/series-workflowlvdf7-build-action-208825096/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlvdf7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_init_security_and_acl","ocfs2_init_acl","ocfs2_acl_init_prepare","ocfs2_calc_xattr_init","ocfs2_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"80fdec58-b7f6-413d-beea-7c8cefbc7625","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-30 08:31:12 +0000 UTC FinishedAt: 2026-07-30 08:31:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlvdf7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_init_security_and_acl","ocfs2_init_acl","ocfs2_acl_init_prepare","ocfs2_calc_xattr_init","ocfs2_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"80fdec58-b7f6-413d-beea-7c8cefbc7625","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-30 08:31:12 +0000 UTC FinishedAt: 2026-07-30 08:31:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlvdf7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_init_security_and_acl","ocfs2_init_acl","ocfs2_acl_init_prepare","ocfs2_calc_xattr_init","ocfs2_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"80fdec58-b7f6-413d-beea-7c8cefbc7625","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-30 08:31:12 +0000 UTC FinishedAt: 2026-07-30 08:31:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlvdf7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_init_security_and_acl","ocfs2_init_acl","ocfs2_acl_init_prepare","ocfs2_calc_xattr_init","ocfs2_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"80fdec58-b7f6-413d-beea-7c8cefbc7625","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-30 08:31:12 +0000 UTC FinishedAt: 2026-07-30 08:31:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"80fdec58-b7f6-413d-beea-7c8cefbc7625","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflowlvdf7/series-workflowlvdf7-convert-artifact-4070763189/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlvdf7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_init_security_and_acl","ocfs2_init_acl","ocfs2_acl_init_prepare","ocfs2_calc_xattr_init","ocfs2_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"80fdec58-b7f6-413d-beea-7c8cefbc7625","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-30 08:31:22 +0000 UTC FinishedAt: 2026-07-30 08:33:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlvdf7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_init_security_and_acl","ocfs2_init_acl","ocfs2_acl_init_prepare","ocfs2_calc_xattr_init","ocfs2_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"80fdec58-b7f6-413d-beea-7c8cefbc7625","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-30 08:31:22 +0000 UTC FinishedAt: 2026-07-30 08:33:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f88fd1ad-1087-486e-82b9-f7cdb82a0f8a,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-workflowlvdf7/series-workflowlvdf7-build-action-208825096/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-workflowlvdf7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_init_security_and_acl","ocfs2_init_acl","ocfs2_acl_init_prepare","ocfs2_calc_xattr_init","ocfs2_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"80fdec58-b7f6-413d-beea-7c8cefbc7625","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-30 08:33:39 +0000 UTC FinishedAt: 2026-07-30 08:33:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlvdf7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_init_security_and_acl","ocfs2_init_acl","ocfs2_acl_init_prepare","ocfs2_calc_xattr_init","ocfs2_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"80fdec58-b7f6-413d-beea-7c8cefbc7625","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-30 08:33:39 +0000 UTC FinishedAt: 2026-07-30 08:33:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlvdf7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_init_security_and_acl","ocfs2_init_acl","ocfs2_acl_init_prepare","ocfs2_calc_xattr_init","ocfs2_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"80fdec58-b7f6-413d-beea-7c8cefbc7625","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-30 08:33:39 +0000 UTC FinishedAt: 2026-07-30 08:54:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlvdf7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_init_security_and_acl","ocfs2_init_acl","ocfs2_acl_init_prepare","ocfs2_calc_xattr_init","ocfs2_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"80fdec58-b7f6-413d-beea-7c8cefbc7625","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-30 08:33:39 +0000 UTC FinishedAt: 2026-07-30 08:54:37 +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:*e4fbc401-b361-43aa-9323-638eaa66b4fb,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-workflowlvdf7/series-workflowlvdf7-convert-artifact-4070763189/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": "53727cb5-5c66-4914-9492-4348f2981014", "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-workflowlvdf7/series-workflowlvdf7-build-action-2268011457/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlvdf7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_init_security_and_acl","ocfs2_init_acl","ocfs2_acl_init_prepare","ocfs2_calc_xattr_init","ocfs2_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"80fdec58-b7f6-413d-beea-7c8cefbc7625","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-30 08:33:39 +0000 UTC FinishedAt: 2026-07-30 08:54:27 +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:*e4fbc401-b361-43aa-9323-638eaa66b4fb,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-workflowlvdf7/series-workflowlvdf7-convert-artifact-4070763189/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": "53727cb5-5c66-4914-9492-4348f2981014", "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-workflowlvdf7/series-workflowlvdf7-build-action-2268011457/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlvdf7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_init_security_and_acl","ocfs2_init_acl","ocfs2_acl_init_prepare","ocfs2_calc_xattr_init","ocfs2_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"80fdec58-b7f6-413d-beea-7c8cefbc7625","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-30 08:54:37 +0000 UTC FinishedAt: 2026-07-30 08:54:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlvdf7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_init_security_and_acl","ocfs2_init_acl","ocfs2_acl_init_prepare","ocfs2_calc_xattr_init","ocfs2_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"80fdec58-b7f6-413d-beea-7c8cefbc7625","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-30 08:54:37 +0000 UTC FinishedAt: 2026-07-30 08:54:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlvdf7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_init_security_and_acl","ocfs2_init_acl","ocfs2_acl_init_prepare","ocfs2_calc_xattr_init","ocfs2_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"80fdec58-b7f6-413d-beea-7c8cefbc7625","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-30 08:54:37 +0000 UTC FinishedAt: 2026-07-30 08:56:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlvdf7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_init_security_and_acl","ocfs2_init_acl","ocfs2_acl_init_prepare","ocfs2_calc_xattr_init","ocfs2_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"80fdec58-b7f6-413d-beea-7c8cefbc7625","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-30 08:54:37 +0000 UTC FinishedAt: 2026-07-30 08:56:46 +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:*53727cb5-5c66-4914-9492-4348f2981014,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-workflowlvdf7/series-workflowlvdf7-build-action-2268011457/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-workflowlvdf7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_init_security_and_acl","ocfs2_init_acl","ocfs2_acl_init_prepare","ocfs2_calc_xattr_init","ocfs2_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"80fdec58-b7f6-413d-beea-7c8cefbc7625","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-30 08:56:55 +0000 UTC FinishedAt: 2026-07-30 12:04:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlvdf7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_init_security_and_acl","ocfs2_init_acl","ocfs2_acl_init_prepare","ocfs2_calc_xattr_init","ocfs2_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"80fdec58-b7f6-413d-beea-7c8cefbc7625","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-30 08:56:55 +0000 UTC FinishedAt: 2026-07-30 12:04:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_init_security_and_acl","ocfs2_init_acl","ocfs2_acl_init_prepare","ocfs2_calc_xattr_init","ocfs2_xattr_set_handle"],"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:*f88fd1ad-1087-486e-82b9-f7cdb82a0f8a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*53727cb5-5c66-4914-9492-4348f2981014,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-workflowlvdf7/series-workflowlvdf7-build-action-208825096/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-workflowlvdf7/series-workflowlvdf7-build-action-2268011457/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowlvdf7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_init_security_and_acl","ocfs2_init_acl","ocfs2_acl_init_prepare","ocfs2_calc_xattr_init","ocfs2_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"80fdec58-b7f6-413d-beea-7c8cefbc7625","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-30 08:56:55 +0000 UTC FinishedAt: 2026-07-30 08:57:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlvdf7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_init_security_and_acl","ocfs2_init_acl","ocfs2_acl_init_prepare","ocfs2_calc_xattr_init","ocfs2_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"80fdec58-b7f6-413d-beea-7c8cefbc7625","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-30 08:56:55 +0000 UTC FinishedAt: 2026-07-30 08:57:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_init_security_and_acl","ocfs2_init_acl","ocfs2_acl_init_prepare","ocfs2_calc_xattr_init","ocfs2_xattr_set_handle"],"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-workflowlvdf7/series-workflowlvdf7-convert-artifact-3855929498/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlvdf7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_init_security_and_acl","ocfs2_init_acl","ocfs2_acl_init_prepare","ocfs2_calc_xattr_init","ocfs2_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"80fdec58-b7f6-413d-beea-7c8cefbc7625","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-30 08:56:55 +0000 UTC FinishedAt: 2026-07-30 08:56:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlvdf7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_init_security_and_acl","ocfs2_init_acl","ocfs2_acl_init_prepare","ocfs2_calc_xattr_init","ocfs2_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"80fdec58-b7f6-413d-beea-7c8cefbc7625","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-30 08:56:55 +0000 UTC FinishedAt: 2026-07-30 08:56:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlvdf7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_init_security_and_acl","ocfs2_init_acl","ocfs2_acl_init_prepare","ocfs2_calc_xattr_init","ocfs2_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"80fdec58-b7f6-413d-beea-7c8cefbc7625","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-30 08:56:55 +0000 UTC FinishedAt: 2026-07-30 08:56:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlvdf7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_init_security_and_acl","ocfs2_init_acl","ocfs2_acl_init_prepare","ocfs2_calc_xattr_init","ocfs2_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"80fdec58-b7f6-413d-beea-7c8cefbc7625","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-30 08:57:32 +0000 UTC FinishedAt: 2026-07-30 12:04:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlvdf7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_init_security_and_acl","ocfs2_init_acl","ocfs2_acl_init_prepare","ocfs2_calc_xattr_init","ocfs2_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"80fdec58-b7f6-413d-beea-7c8cefbc7625","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-30 08:57:32 +0000 UTC FinishedAt: 2026-07-30 12:04:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f88fd1ad-1087-486e-82b9-f7cdb82a0f8a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*53727cb5-5c66-4914-9492-4348f2981014,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-workflowlvdf7/series-workflowlvdf7-build-action-208825096/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-workflowlvdf7/series-workflowlvdf7-build-action-2268011457/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-workflowlvdf7/series-workflowlvdf7-convert-artifact-3855929498/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,}