Name: series-workflow69jfv Phase: Succeeded StartedAt: 2026-08-07 13:07:59 +0000 UTC FinishedAt: 2026-08-07 16:57:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow69jfv[0] Phase: Succeeded StartedAt: 2026-08-07 13:07:59 +0000 UTC FinishedAt: 2026-08-07 13:11:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow69jfv[0].run-triage Phase: Succeeded StartedAt: 2026-08-07 13:07:59 +0000 UTC FinishedAt: 2026-08-07 13:11:40 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "31a420a822ff92e2090bd5d65efe8e34e2d6d9b8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CGROUP_BPF", "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "31a420a822ff92e2090bd5d65efe8e34e2d6d9b8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CGROUP_BPF", "BPF_SYSCALL" ], "series_id": "e2ba44e7-5fe9-4800-a79a-f3dcd5bd5402" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "cgroup_bpf_replace" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEzOjEwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NHUk9VUF9CUEYmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjZ3JvdXBfYnBmX3JlcGxhY2UmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgc2ltcGxlIGNvbXBhdGliaWxpdHkgY2hlY2sgZm9yIEJQRiBjZ3JvdXAgc3RvcmFnZSBkdXJpbmcgcHJvZ3JhbSByZXBsYWNlbWVudC4gSXQgY29tcGFyZXMgZXhpc3RpbmcgZmllbGRzIGluIHRoZSBgYnBmX3Byb2ctXHUwMDNlYXV4YCBzdHJ1Y3R1cmUuIEl0IGRvZXMgbm90IGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMsIGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLCBvciB1c2UgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gY29udHJvbCBmbG93LiBBbnkgbWVtb3J5IGVycm9ycyByZWxhdGVkIHRvIHRoaXMgY2hhbmdlLCBzdWNoIGFzIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgb3IgdXNlLWFmdGVyLWZyZWUsIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNvbXBhdGliaWxpdHkgY2hlY2sgZm9yIGNncm91cCBzdG9yYWdlcyB3aGVuIHJlcGxhY2luZyBhIEJQRiBwcm9ncmFtIGluIGEgY2dyb3VwIGxpbmsuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgQlBGIGNncm91cCBsaW5rIHJlcGxhY2VtZW50IGxvZ2ljLCByZWFjaGFibGUgdmlhIHRoZSBCUEZfTElOS19VUERBVEUgc3lzY2FsbCBjb21tYW5kLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEzOjEwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNmM0ZDkyZjcwYmNkN2VjYjYyYWExYmMwNDhhNDU2MDYxMjdmMDA5MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDcgMTM6MTA6MDkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9jZ3JvdXAuYyBiL2tlcm5lbC9icGYvY2dyb3VwLmNcbmluZGV4IDQzNTVjY2I3OGE5YzYuLjVjYzliMmQ5MmZkNTggMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2Nncm91cC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2Nncm91cC5jXG5AQCAtMTAxOCw2ICYjNDM7MTAxOCwyMCBAQCBzdGF0aWMgdm9pZCByZXBsYWNlX2VmZmVjdGl2ZV9wcm9nKHN0cnVjdCBjZ3JvdXAgKmNncnAsXG4gXHR9XG4gfVxuIFxuJiM0MztzdGF0aWMgYm9vbCBjZ3JvdXBfYnBmX3N0b3JhZ2VzX2NvbXBhdGlibGUoc3RydWN0IGJwZl9wcm9nICpvbGRfcHJvZyxcbiYjNDM7XHRcdFx0XHRcdCAgIHN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2cpXG4mIzQzO3tcbiYjNDM7XHRlbnVtIGJwZl9jZ3JvdXBfc3RvcmFnZV90eXBlIHN0eXBlO1xuJiM0MztcbiYjNDM7XHRmb3JfZWFjaF9jZ3JvdXBfc3RvcmFnZV90eXBlKHN0eXBlKSB7XG4mIzQzO1x0XHRpZiAob2xkX3Byb2ctXHUwMDNlYXV4LVx1MDAzZWNncm91cF9zdG9yYWdlW3N0eXBlXSAhPVxuJiM0MztcdFx0ICAgIG5ld19wcm9nLVx1MDAzZWF1eC1cdTAwM2VjZ3JvdXBfc3RvcmFnZVtzdHlwZV0pXG4mIzQzO1x0XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIF9fY2dyb3VwX2JwZl9yZXBsYWNlKCkgLSBSZXBsYWNlIGxpbmsmIzM5O3MgcHJvZ3JhbSBhbmQgcHJvcGFnYXRlIHRoZSBjaGFuZ2VcbiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gZGVzY2VuZGFudHNcbkBAIC0xMDU2LDYgJiM0MzsxMDcwLDkgQEAgc3RhdGljIGludCBfX2Nncm91cF9icGZfcmVwbGFjZShzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxuIFx0aWYgKCFmb3VuZClcbiBcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gXG4mIzQzO1x0aWYgKCFjZ3JvdXBfYnBmX3N0b3JhZ2VzX2NvbXBhdGlibGUobGluay1cdTAwM2VsaW5rLnByb2csIG5ld19wcm9nKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiBcdGNncnAtXHUwMDNlYnBmLnJldmlzaW9uc1thdHlwZV0gJiM0Mzs9IDE7XG4gXHRvbGRfcHJvZyA9IHhjaGcoXHUwMDI2bGluay1cdTAwM2VsaW5rLnByb2csIG5ld19wcm9nKTtcbiBcdHJlcGxhY2VfZWZmZWN0aXZlX3Byb2coY2dycCwgYXR5cGUsIHBsKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMzoxMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0dST1VQX0JQRiYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Nncm91cF9icGZfcmVwbGFjZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgY29tcGF0aWJpbGl0eSBjaGVjayBmb3IgY2dyb3VwIHN0b3JhZ2VzIHdoZW4gcmVwbGFjaW5nIGEgQlBGIHByb2dyYW0gaW4gYSBjZ3JvdXAgbGluay4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBCUEYgY2dyb3VwIGxpbmsgcmVwbGFjZW1lbnQgbG9naWMsIHJlYWNoYWJsZSB2aWEgdGhlIEJQRl9MSU5LX1VQREFURSBzeXNjYWxsIGNvbW1hbmQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2YzRkOTJmNzBiY2Q3ZWNiNjJhYTFiYzA0OGE0NTYwNjEyN2YwMDkwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgNyAxMzoxMDowOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvY2dyb3VwLmMgYi9rZXJuZWwvYnBmL2Nncm91cC5jCmluZGV4IDQzNTVjY2I3OGE5YzYuLjVjYzliMmQ5MmZkNTggMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvY2dyb3VwLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9jZ3JvdXAuYwpAQCAtMTAxOCw2ICYjNDM7MTAxOCwyMCBAQCBzdGF0aWMgdm9pZCByZXBsYWNlX2VmZmVjdGl2ZV9wcm9nKHN0cnVjdCBjZ3JvdXAgKmNncnAsCiAJfQogfQogCiYjNDM7c3RhdGljIGJvb2wgY2dyb3VwX2JwZl9zdG9yYWdlc19jb21wYXRpYmxlKHN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2csCiYjNDM7CQkJCQkgICBzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nKQomIzQzO3sKJiM0MzsJZW51bSBicGZfY2dyb3VwX3N0b3JhZ2VfdHlwZSBzdHlwZTsKJiM0MzsKJiM0MzsJZm9yX2VhY2hfY2dyb3VwX3N0b3JhZ2VfdHlwZShzdHlwZSkgewomIzQzOwkJaWYgKG9sZF9wcm9nLSZndDthdXgtJmd0O2Nncm91cF9zdG9yYWdlW3N0eXBlXSAhPQomIzQzOwkJICAgIG5ld19wcm9nLSZndDthdXgtJmd0O2Nncm91cF9zdG9yYWdlW3N0eXBlXSkKJiM0MzsJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBfX2Nncm91cF9icGZfcmVwbGFjZSgpIC0gUmVwbGFjZSBsaW5rJiMzOTtzIHByb2dyYW0gYW5kIHByb3BhZ2F0ZSB0aGUgY2hhbmdlCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gZGVzY2VuZGFudHMKQEAgLTEwNTYsNiAmIzQzOzEwNzAsOSBAQCBzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9yZXBsYWNlKHN0cnVjdCBjZ3JvdXAgKmNncnAsCiAJaWYgKCFmb3VuZCkKIAkJcmV0dXJuIC1FTk9FTlQ7CiAKJiM0MzsJaWYgKCFjZ3JvdXBfYnBmX3N0b3JhZ2VzX2NvbXBhdGlibGUobGluay0mZ3Q7bGluay5wcm9nLCBuZXdfcHJvZykpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKIAljZ3JwLSZndDticGYucmV2aXNpb25zW2F0eXBlXSAmIzQzOz0gMTsKIAlvbGRfcHJvZyA9IHhjaGcoJmFtcDtsaW5rLSZndDtsaW5rLnByb2csIG5ld19wcm9nKTsKIAlyZXBsYWNlX2VmZmVjdGl2ZV9wcm9nKGNncnAsIGF0eXBlLCBwbCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEzOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMTYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEJQRiBDZ3JvdXAgTGluayBSZXBsYWNlbWVudCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXQmIzM5O3MgcG9raW5nIGFyb3VuZCBpbiBga2VybmVsL2JwZi9jZ3JvdXAuY2AuIExvb2tzIGxpa2UgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyBmb2N1c2VkIG9uIG1vZGlmeWluZyB0aGUgQlBGIGNncm91cCBsaW5rIHJlcGxhY2VtZW50IGxvZ2ljLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBfX2Nncm91cF9icGZfcmVwbGFjZWAuIFRoZSBrZXkgYWRkaXRpb24gaXMgdGhpcyBuZXcgZnVuY3Rpb24sIGBjZ3JvdXBfYnBmX3N0b3JhZ2VzX2NvbXBhdGlibGVgLCB3aGljaCBpcyBiZWluZyBjYWxsZWQgcmlnaHQgYmVmb3JlIHRoZSBwcm9ncmFtIHJlcGxhY2VtZW50LiBJdCBzZWVtcyB0aGUgaW50ZW50aW9uIGlzIHRvIGVuZm9yY2Ugc29tZSBzb3J0IG9mIHN0b3JhZ2UgY29tcGF0aWJpbGl0eSBjaGVjayBiZXR3ZWVuIHRoZSBleGlzdGluZyBhbmQgdGhlIG5ldyBCUEYgcHJvZ3JhbXMuCgpUaGUgbG9naWMgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogaWYgdGhlIG5ldyBwcm9ncmFtJiMzOTtzIGNncm91cCBzdG9yYWdlcyBhcmVuJiMzOTt0IGNvbXBhdGlibGUgd2l0aCB0aGUgb2xkIHByb2dyYW0mIzM5O3Mg4oCTIG1lYW5pbmcgdGhleSBoYXZlIGRpZmZlcmVudCBvciBpbmNvbXBhdGlibGUgc3RvcmFnZSByZXF1aXJlbWVudHMg4oCTIHRoZW4gd2UmIzM5O3JlIGJhaWxpbmcgb3V0IHdpdGggYW4gYC1FSU5WQUxgIGVycm9yLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGRlZmluaXRlbHkgaW1wYWN0aW5nIGhvdyBCUEYgcHJvZ3JhbXMgY2FuIGJlIHN3YXBwZWQgb3V0IHdpdGhpbiBjZ3JvdXAgbGlua3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgY29uc3RpdHV0ZXMgJiMzNDtjb21wYXRpYmxlJiMzNDsgaW4gdGhpcyBjb250ZXh0LgoKTm93LCBsZXQmIzM5O3Mgc2VlIHdoZXJlIGBfX2Nncm91cF9icGZfcmVwbGFjZWAgaXMgYmVpbmcgdXNlZC4gQSBxdWljayBjaGVjayByZXZlYWxzIGl0JiMzOTtzIGJlaW5nIGNhbGxlZCBmcm9tIGBjZ3JvdXBfYnBmX3JlcGxhY2VgLiBUaGF04oCZcyB0aGUgdHlwaWNhbCBmbG93LCBJIGV4cGVjdGVkIHRoYXQuIEkgd2lsbCBuZWVkIHRvIGNvbnNpZGVyIHRoZSBjb250ZXh0IG9mIHRoZXNlIGZ1bmN0aW9ucywgSSB0aGluayBpdCBtaWdodCBiZSB1c2VmdWwgdG8gdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGlzIGNoZWNrIHdpbGwgdHJpZ2dlci4gVGhpcyBsb29rcyBsaWtlIGEgcG90ZW50aWFsbHkgdXNlZnVsIG1lY2hhbmlzbSB0byBwcmV2ZW50IHVuZXhwZWN0ZWQgYmVoYXZpb3VyLCBvciBtYXliZSBldmVuIHN1YnRsZSBidWdzLCBjYXVzZWQgYnkgaW5jb21wYXRpYmxlIHByb2dyYW0gcmVwbGFjZW1lbnRzLCBzdWNoIGFzIHJlc291cmNlIGxlYWtzIG9yIGRhdGEgY29ycnVwdGlvbi4gVWx0aW1hdGVseSwgaXQgbG9va3MgbGlrZSBhIGdvb2QgY2hhbmdlIHRvIGhhdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTM6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19jZ3JvdXBfYnBmX3JlcGxhY2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2Nncm91cC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvY2dyb3VwLmM9MTAyMT1zdGF0aWMgYm9vbCBjZ3JvdXBfYnBmX3N0b3JhZ2VzX2NvbXBhdGlibGUoc3RydWN0IGJwZl9wcm9nICpvbGRfcHJvZyxcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTEwMzUtLyoqXG5rZXJuZWwvYnBmL2Nncm91cC5jOjEwMzY6ICogX19jZ3JvdXBfYnBmX3JlcGxhY2UoKSAtIFJlcGxhY2UgbGluayYjMzk7cyBwcm9ncmFtIGFuZCBwcm9wYWdhdGUgdGhlIGNoYW5nZVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMDM3LSAqICAgICAgICAgICAgICAgICAgICAgICAgICB0byBkZXNjZW5kYW50c1xuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtMTA0NC0gKi9cbmtlcm5lbC9icGYvY2dyb3VwLmM6MTA0NTpzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9yZXBsYWNlKHN0cnVjdCBjZ3JvdXAgKmNncnAsXG5rZXJuZWwvYnBmL2Nncm91cC5jLTEwNDYtXHRcdFx0XHRzdHJ1Y3QgYnBmX2Nncm91cF9saW5rICpsaW5rLFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9MTA4Mz1zdGF0aWMgaW50IGNncm91cF9icGZfcmVwbGFjZShzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssIHN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2csXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMTAwLVx0fVxua2VybmVsL2JwZi9jZ3JvdXAuYzoxMTAxOlx0cmV0ID0gX19jZ3JvdXBfYnBmX3JlcGxhY2UoY2dfbGluay1cdTAwM2VjZ3JvdXAsIGNnX2xpbmssIG5ld19wcm9nKTtcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTEwMi1vdXRfdW5sb2NrOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEzOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwODEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGggYGNncm91cF9icGZfcmVwbGFjZWAsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5IG9mIHRoZSB1bmRlcmx5aW5nIHRob3VnaHRzLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGlzIGFyZWE6CgoqKkRlZXAgRGl2ZSBpbnRvIGBjZ3JvdXBfYnBmX3JlcGxhY2VgKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIHVuZGVyc3RhbmQsIGBjZ3JvdXBfYnBmX3JlcGxhY2VgIGlzICp0aGUqIGZ1bmN0aW9uLCB0aGUgYC51cGRhdGVfcHJvZ2AgY2FsbGJhY2ssIHRoYXQmIzM5O3MgY2VudHJhbCB0byBtYW5hZ2luZyBCUEYgcHJvZ3JhbXMgbGlua2VkIHRvIGNncm91cHMgd2l0aGluIHRoZSBgYnBmX2Nncm91cF9saW5rX2xvcHNgIGZyYW1ld29yay4gV2hlbiBhIEJQRiBwcm9ncmFtIG5lZWRzIHRvIGJlIHVwZGF0ZWQgb3IgcmVwbGFjZWQgb24gYSBjZ3JvdXAsIHRoaXMgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQuIFRoaXMgbWVhbnMgaXQmIzM5O3MgcmVzcG9uc2libGUgZm9yIHRoZSBjb3JlIGxvZ2ljIG9mIHNhZmVseSBzd2FwcGluZyBvdXQgdGhlIG9sZCBCUEYgcHJvZ3JhbSB3aXRoIHRoZSBuZXcgb25lLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGUgc3lzdGVtIGhhbmRsZXMgdGhlIHJlcGxhY2VtZW50IGNvcnJlY3RseS4KClRoaXMgY2FsbGJhY2sgZnVuY3Rpb24gbXVzdCBoYW5kbGUgYWxsIG9mIHRoZSBkZXRhaWxzLiBJdCBwcm9iYWJseSBkZWFscyB3aXRoIGxvY2tpbmcgYW5kIHN5bmNocm9uaXphdGlvbi4gSSYjMzk7ZCBpbWFnaW5lIGl0IGhhcyB0byBjYXJlZnVsbHkgbWFuYWdlIHRoZSBwcm9ncmFtJiMzOTtzIGxpZmVjeWNsZSDigJMgbWFraW5nIHN1cmUgdGhlIG9sZCBwcm9ncmFtIGlzIHVuaG9va2VkIHByb3Blcmx5LCB0aGUgbmV3IG9uZSBpcyBhdHRhY2hlZCwgYW5kIGFueSByZWxldmFudCBzdGF0ZSBpcyBjbGVhbmVkIHVwIG9yIHRyYW5zZmVycmVkIHNlY3VyZWx5LiBUaGUgY3J1Y2lhbCBhc3BlY3QgaXMgdGhhdCBpdCBtdXN0IG1haW50YWluIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIGNncm91cCYjMzk7cyBiZWhhdmlvci4gV2UgY2Fubm90IGxvc2Ugb3IgY29ycnVwdCBhbnkgZGF0YS4KCkkmIzM5O2QgZXhwZWN0IHRoZSBjb3JlIGNvbXBsZXhpdHkgbGllcyBpbiBkZWFsaW5nIHdpdGggcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBhbmQgZW5zdXJpbmcgYXRvbWljaXR5LiBDb25jdXJyZW50IG9wZXJhdGlvbnMgb24gdGhlIGNncm91cCBoaWVyYXJjaHksIHBhcnRpY3VsYXJseSB3aGVuIHByb2dyYW1zIGFyZSBiZWluZyByZXBsYWNlZCwgbmVlZCB0byBiZSBjYXJlZnVsbHkgb3JjaGVzdHJhdGVkIHRvIGF2b2lkIGNvcnJ1cHRpb24gb3IgdW5pbnRlbmRlZCBiZWhhdmlvci4gVGhlIGZ1bmN0aW9uIHdvdWxkIGhhdmUgdG8gaW5jbHVkZSBhIGxvdCBvZiBjbGV2ZXIgbG9naWMuIEkgd291bGQgYmUgc3VyZSBpdCBoYXMgZ29vZCBlcnJvciBoYW5kbGluZy4KCkZ1cnRoZXJtb3JlLCB0aGlzIG1lYW5zIHRoYXQgYW55IHJlc3RyaWN0aW9ucyBhbmQgc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMgb2YgdGhlIEJQRiBzdWJzeXN0ZW0sIHdoaWNoIEkga25vdyBpbnNpZGUgYW5kIG91dCwgd2lsbCBuZWVkIHRvIGJlIHN0cmljdGx5IGVuZm9yY2VkLiBUaGUgZnVuY3Rpb24gbXVzdCB2ZXQgdGhlIHJlcGxhY2VtZW50IHByb2dyYW0gdGhvcm91Z2hseSwgZW5zdXJpbmcgaXQgbWVldHMgYWxsIHBvbGljeSByZXF1aXJlbWVudHMgYW5kIGRvZXNu4oCZdCBpbnRyb2R1Y2UgYW55IHZ1bG5lcmFiaWxpdGllcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMzoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjZ3JvdXBfYnBmX3JlcGxhY2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2Nncm91cC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvY2dyb3VwLmM9MTAyMT1zdGF0aWMgYm9vbCBjZ3JvdXBfYnBmX3N0b3JhZ2VzX2NvbXBhdGlibGUoc3RydWN0IGJwZl9wcm9nICpvbGRfcHJvZyxcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTEwMzUtLyoqXG5rZXJuZWwvYnBmL2Nncm91cC5jOjEwMzY6ICogX19jZ3JvdXBfYnBmX3JlcGxhY2UoKSAtIFJlcGxhY2UgbGluayYjMzk7cyBwcm9ncmFtIGFuZCBwcm9wYWdhdGUgdGhlIGNoYW5nZVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMDM3LSAqICAgICAgICAgICAgICAgICAgICAgICAgICB0byBkZXNjZW5kYW50c1xuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtMTA0NC0gKi9cbmtlcm5lbC9icGYvY2dyb3VwLmM6MTA0NTpzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9yZXBsYWNlKHN0cnVjdCBjZ3JvdXAgKmNncnAsXG5rZXJuZWwvYnBmL2Nncm91cC5jLTEwNDYtXHRcdFx0XHRzdHJ1Y3QgYnBmX2Nncm91cF9saW5rICpsaW5rLFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtMTA4Mi1cbmtlcm5lbC9icGYvY2dyb3VwLmM6MTA4MzpzdGF0aWMgaW50IGNncm91cF9icGZfcmVwbGFjZShzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssIHN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2csXG5rZXJuZWwvYnBmL2Nncm91cC5jLTEwODQtXHRcdFx0ICAgICAgc3RydWN0IGJwZl9wcm9nICpvbGRfcHJvZylcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTExMDAtXHR9XG5rZXJuZWwvYnBmL2Nncm91cC5jOjExMDE6XHRyZXQgPSBfX2Nncm91cF9icGZfcmVwbGFjZShjZ19saW5rLVx1MDAzZWNncm91cCwgY2dfbGluaywgbmV3X3Byb2cpO1xua2VybmVsL2JwZi9jZ3JvdXAuYy0xMTAyLW91dF91bmxvY2s6XG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYz0xNTE2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2xpbmtfb3BzIGJwZl9jZ3JvdXBfbGlua19sb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtMTUxOS1cdC5kZXRhY2ggPSBicGZfY2dyb3VwX2xpbmtfZGV0YWNoLFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxNTIwOlx0LnVwZGF0ZV9wcm9nID0gY2dyb3VwX2JwZl9yZXBsYWNlLFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xNTIxLVx0LnNob3dfZmRpbmZvID0gYnBmX2Nncm91cF9saW5rX3Nob3dfZmRpbmZvLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEzOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwNjMKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIHRoZSBCUEYgTGluayBVcGRhdGUgTWVjaGFuaXNtKioKClJpZ2h0LCBzbyBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IHdoZXJlIHRoaXMgYC51cGRhdGVfcHJvZ2AgY2FsbGJhY2sgaXMgb3JpZ2luYXRpbmcgZnJvbS4gSSBpbW1lZGlhdGVseSBqdW1wIHRvIHRoZSBsaWtlbHkgc3VzcGVjdDogdGhlIGBicGZfbGlua191cGRhdGVgIGZ1bmN0aW9uLiBJdCBtYWtlcyBzZW5zZSwgZ2l2ZW4gdGhlIG5hbWUsIHRoYXQgdGhpcyBpcyB0aGUgZW50cnkgcG9pbnQuIE5vdywgSSBuZWVkIHRvIGNvbmZpcm0gd2hlcmUgYGJwZl9saW5rX3VwZGF0ZWAgaXMgZGVmaW5lZCDigJMgSSYjMzk7bGwgYmUgbG9va2luZyBpbiB0aGUga2VybmVsJiMzOTtzIEJQRiBzdWJzeXN0ZW0sIHByb2JhYmx5IGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2Agb3Igc29tZXRoaW5nIHNpbWlsYXIsIGZvciB0aGUgQyBzb3VyY2UuIE15IG5leHQgc3RlcCB3aWxsIGJlIHRvIGV4YW1pbmUgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoYXQgZnVuY3Rpb24uIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGludmVzdGlnYXRpb24gYmVnaW5zIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEzOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2xpbmtfdXBkYXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEzOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzMTcKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqRm9jdXNpbmcgSW46IFRoZSBgbGlua191cGRhdGVgIE15c3RlcnkqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZS4uLiAqY2xpY2sgY2xpY2sqLi4uIFJpZ2h0LCBJIG5lZWQgdG8gZ2V0IHRvIHRoZSBjb3JlIG9mIHRoaXMuIEkmIzM5O3ZlIGJlZW4gc2NyYXRjaGluZyBteSBoZWFkIGFib3V0IHRoaXMgYmVoYXZpb3IsIGFuZCBJIHRoaW5rIEkmIzM5O3ZlIGp1c3QgcGlubmVkIGRvd24gd2hlcmUgdGhlIHJlbGV2YW50IGNvZGUgbGl2ZXMuIEl0JiMzOTtzIHRoZSBgbGlua191cGRhdGVgIGZ1bmN0aW9uLiBBbmQgbm90IGp1c3QgdGhhdCwgaXQmIzM5O3Mgc3BlY2lmaWNhbGx5IHdpdGhpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgLiBBaCwgeWVzLCB0aGUgc3lzdGVtIGNhbGwgaW50ZXJmYWNlIGZvciBCUEYgb3BlcmF0aW9ucy4gVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlIGdpdmVuIHRoZSBjb250ZXh0IG9mIHdoYXQgSSB3YXMgbG9va2luZyBhdC4gTm93IHRoZSBpbnZlc3RpZ2F0aW9uIGNhbiByZWFsbHkgYmVnaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEzOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VwZGF0ZV9wcm9nJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zeXNjYWxsLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zeXNjYWxsLmM9NTk4MT1zdGF0aWMgaW50IGxpbmtfdXBkYXRlKHVuaW9uIGJwZl9hdHRyICphdHRyKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYwMjEtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MDIyOlx0aWYgKGxpbmstXHUwMDNlb3BzLVx1MDAzZXVwZGF0ZV9wcm9nKVxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjAyMzpcdFx0cmV0ID0gbGluay1cdTAwM2VvcHMtXHUwMDNldXBkYXRlX3Byb2cobGluaywgbmV3X3Byb2csIG9sZF9wcm9nKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYwMjQtXHRlbHNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEzOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2NTcKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzMDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRoaW5raW5nIGFib3V0IGhvdyB0byBhcHByb2FjaCBmdXp6aW5nIGl0LiBUaGUga2V5IGhlcmUgc2VlbXMgdG8gYmUgYEJQRl9MSU5LX1VQREFURWAg4oCTIHRoYXQmIzM5O3MgaG93IHdlJiMzOTtyZSByZWFjaGluZyB0aGlzIGNvZGUuIFRoZSBwYXRjaCBzcGVjaWZpY2FsbHkgYWRkcyBhIGNoZWNrIHdpdGhpbiBgX19jZ3JvdXBfYnBmX3JlcGxhY2VgLCB3aGljaCBpcyBjYWxsZWQgYnkgYGNncm91cF9icGZfcmVwbGFjZWAuIFRoaXMgZmVlbHMgbGlrZSBwcmltZSBmdXp6aW5nIHRlcnJpdG9yeS4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmb2N1cyBvbiBgY2dyb3VwX2JwZl9yZXBsYWNlYCBvciBgX19jZ3JvdXBfYnBmX3JlcGxhY2VgLiBCdXQgd2FpdCwgYF9fY2dyb3VwX2JwZl9yZXBsYWNlYCBpcyBzdGF0aWMsIHdoaWNoIGNhbiBtYWtlIHRoaW5ncyB0cmlja3kuIEFuZCBgY2dyb3VwX2JwZl9yZXBsYWNlYCBpcyBhbHNvIHN0YXRpYywgYnV0IGl0JiMzOTtzIHVzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyLiBJbnRlcmVzdGluZy4uLiBMZXQgbWUganVzdCBjb25maXJtIGlmIGBjZ3JvdXBfYnBmX3JlcGxhY2VgIGlzIGluZGVlZCBzdGF0aWMuIFllcCwgaXQgaXMuIEFoLCBidXQgaG9sZCBvbiwgZXZlbiB0aG91Z2ggYGNncm91cF9icGZfcmVwbGFjZWAgaXMgc3RhdGljLCBpdCYjMzk7cyBhbiBBUEkgZW50cnlwb2ludCBmb3IgYGJwZl9saW5rX29wc2AuIE9rYXksIHRoYXQmIzM5O3MgaW1wb3J0YW50IHRvIHJlbWVtYmVyLgoKTGV0IG1lIHNlZSBpZiB0aGVyZSBhcmUgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhpcy4uLiBgYnBmX2Nncm91cF9saW5rX2xvcHNgIGlzIHN0YXRpYywgdG9vLiBBbHJpZ2h0LCBiYWNrIHRvIGBjZ3JvdXBfYnBmX3JlcGxhY2VgLiBJdCYjMzk7cyBzdGF0aWMsIHNvIGlzIGl0IGlubGluZWQ/IFByb2JhYmx5IG5vdCwgZ2l2ZW4gaXRzIGFkZHJlc3MgaXMgYmVpbmcgdGFrZW4uIE5vdywgd2hhdCBhYm91dCB0aGUgdXBkYXRlIHByb2Nlc3MgaXRzZWxmPyBMZXQgbWUgbG9vayBpbnRvIGBicGZfbGlua191cGRhdGVgIG9yIGp1c3QgYGxpbmtfdXBkYXRlYC4gQWgsIGBsaW5rX3VwZGF0ZWAgaXMgc3RhdGljIGFzIHdlbGwuIE9rYXksIHRoZSByZWxldmFudCBzeXNjYWxsIGVudHJ5IGlzIGBzeXNfYnBmYC4gU28gYGNncm91cF9icGZfcmVwbGFjZWAgaXMgc3RpbGwgYSBzb2xpZCBmb2N1cyBzeW1ib2wuCgpUbyBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZywgSSYjMzk7bSBnb2luZyB0byBzY2FuIGBrZXJuZWwvYnBmL2Nncm91cC5jYCBmb3IgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZSBjYWxsIGdyYXBoIGFuZCBwb3RlbnRpYWwgYXR0YWNrIHN1cmZhY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEzOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XmludCBjZ3JvdXBfYnBmX3JlcGxhY2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2Nncm91cC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTM6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTQ0MQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgdGhlIGNncm91cF9icGZfcmVwbGFjZSBTaWduYXR1cmUqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgY2dyb3VwX2JwZl9yZXBsYWNlYCBmdW5jdGlvbi4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgaXRzIHNpZ25hdHVyZS4gSSB3YW50IHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIGlucHV0IGFyZ3VtZW50cyBhbmQgdGhlIHJldHVybiB2YWx1ZS4gV2hhdCBraW5kIG9mIGRhdGEgc3RydWN0dXJlcyBkb2VzIGl0IGV4cGVjdD8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIHBvdGVudGlhbCBwaXRmYWxscyBvciBhcmVhcyB3aGVyZSBlcnJvcnMgY291bGQgb2NjdXIgYmFzZWQgb24gdGhlIHR5cGUgZGVmaW5pdGlvbnMgYWxvbmU/IFRoaW5raW5nIGFib3V0IHBvc3NpYmxlIHJhY2UgY29uZGl0aW9ucyBpcyBhbHdheXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGFzIHdlbGwuIEkmIzM5O20gbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgdGhlIHNjb3BlIG9mIHRoZSBvcGVyYXRpb24g4oCTIGlzIHRoaXMgYSBnbG9iYWwgcmVwbGFjZW1lbnQsIG9yIGRvZXMgaXQgb3BlcmF0ZSBhdCBhIHNwZWNpZmljIGNncm91cCBsZXZlbD8gSXMgaXQgZ29pbmcgdG8gYmUgYSBzaW1wbGUgcmVwbGFjZW1lbnQsIG9yIG1vcmUgY29tcGxleD8gQXJlIHRoZXJlIGFueSB1bnVzdWFsIHR5cGVzIG9yIHN0cnVjdHVyZXMgdGhhdCByZXF1aXJlIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbj8gSSBuZWVkIHRvIGJ1aWxkIGEgbWVudGFsIG1vZGVsIG9mIGhvdyB0aGlzIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBCUEYgc3Vic3lzdGVtIHdpdGhpbiB0aGUgY29udGV4dCBvZiBjZ3JvdXBzLiBLbm93aW5nIHRoYXQgd2lsbCB0ZWxsIG1lIGhvdyB0byBzdGFydCBkaWdnaW5nIGRlZXBlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTM6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2dyb3VwX2JwZl9yZXBsYWNlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9jZ3JvdXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2Nncm91cC5jPTEwMjE9c3RhdGljIGJvb2wgY2dyb3VwX2JwZl9zdG9yYWdlc19jb21wYXRpYmxlKHN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2csXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMDM1LS8qKlxua2VybmVsL2JwZi9jZ3JvdXAuYzoxMDM2OiAqIF9fY2dyb3VwX2JwZl9yZXBsYWNlKCkgLSBSZXBsYWNlIGxpbmsmIzM5O3MgcHJvZ3JhbSBhbmQgcHJvcGFnYXRlIHRoZSBjaGFuZ2Vcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTAzNy0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gZGVzY2VuZGFudHNcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTEwNDQtICovXG5rZXJuZWwvYnBmL2Nncm91cC5jOjEwNDU6c3RhdGljIGludCBfX2Nncm91cF9icGZfcmVwbGFjZShzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMDQ2LVx0XHRcdFx0c3RydWN0IGJwZl9jZ3JvdXBfbGluayAqbGluayxcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTEwODItXG5rZXJuZWwvYnBmL2Nncm91cC5jOjEwODM6c3RhdGljIGludCBjZ3JvdXBfYnBmX3JlcGxhY2Uoc3RydWN0IGJwZl9saW5rICpsaW5rLCBzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nLFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMDg0LVx0XHRcdCAgICAgIHN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2cpXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMTAwLVx0fVxua2VybmVsL2JwZi9jZ3JvdXAuYzoxMTAxOlx0cmV0ID0gX19jZ3JvdXBfYnBmX3JlcGxhY2UoY2dfbGluay1cdTAwM2VjZ3JvdXAsIGNnX2xpbmssIG5ld19wcm9nKTtcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTEwMi1vdXRfdW5sb2NrOlxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9MTUxNj1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9saW5rX29wcyBicGZfY2dyb3VwX2xpbmtfbG9wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE1MTktXHQuZGV0YWNoID0gYnBmX2Nncm91cF9saW5rX2RldGFjaCxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTUyMDpcdC51cGRhdGVfcHJvZyA9IGNncm91cF9icGZfcmVwbGFjZSxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTUyMS1cdC5zaG93X2ZkaW5mbyA9IGJwZl9jZ3JvdXBfbGlua19zaG93X2ZkaW5mbyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTM6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjIyMgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDEwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIEZvY3VzIFN5bWJvbHMgaW4gdGhlIEJQRiBTdWJzeXN0ZW0qKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgdG8gcmVmaW5lIG91ciBzeW1ib2wgaWRlbnRpZmljYXRpb24gc3RyYXRlZ3kgd2l0aGluIHRoZSBCUEYgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgZm9yIGFuYWx5c2lzIGFuZCBwb3RlbnRpYWxseSBkZWJ1Z2dpbmcuIEl0JiMzOTtzIGJlY29taW5nIGNsZWFyIHRoYXQgcmVseWluZyBvbiBpbmxpbmluZyBmb3IgaWRlbnRpZnlpbmcga2V5IGZ1bmN0aW9ucyBtaWdodCBiZSBwcm9ibGVtYXRpYy4gTGV0IG1lIGFydGljdWxhdGUgd2hhdCBJJiMzOTttIHRoaW5raW5nLi4uCgpHaXZlbiB0aGF0IGBjZ3JvdXBfYnBmX3JlcGxhY2VgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLCBidXQgd2UmIzM5O3JlIHRha2luZyBpdHMgYWRkcmVzcywgaXQmIzM5O3MgdmlydHVhbGx5IGd1YXJhbnRlZWQgdGhhdCB0aGUgY29tcGlsZXIgd29uJiMzOTt0IGlubGluZSBpdC4gVGhhdCBtYWtlcyBpdCBhIHNvbGlkIGNhbmRpZGF0ZSB0byBhY3QgYXMgYSAqZm9jdXMgc3ltYm9sKiDigJMgc29tZXRoaW5nIHdlIGNhbiBlYXNpbHkgbG9jYXRlIGFuZCByZWFzb24gYWJvdXQuIEl0JiMzOTtzIGEgdXNlZnVsIG1hcmtlciB3aXRoaW4gdGhlIGNvbXBpbGVkIGNvZGUuCgpUaGVuIEkgYW0gY29uc2lkZXJpbmcgYGNncm91cF9icGZfc3RvcmFnZXNfY29tcGF0aWJsZWAuIFNpbmNlIHRoYXQgaXMgYWxzbyBzdGF0aWMsIEkmIzM5O20gYSBiaXQgbGVzcyBjZXJ0YWluLiBUaGVyZSBpcyBhIGNoYW5jZSBpdCAqY291bGQqIGJlIGlubGluZWQuIEkgbmVlZCB0byBiZSBjYXJlZnVsIHdpdGggdGhhdCBvbmUuCgpJIG5lZWQgdG8gY29uZmlybSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGZ1bmN0aW9ucyB0aGF0IHdpbGwgc2VydmUgd2VsbC4gVGltZSB0byBpbnZlc3RpZ2F0ZSBmb3Igb3RoZXIgcG90ZW50aWFsbHkgbm9uLWlubGluZWQgZnVuY3Rpb25zLiBJIHNlZSBgYnBmX2Nncm91cF9saW5rX2xvcHNgIGlzIGFsc28gc3RhdGljLCBzbyBJIGNhbiBzdHJpa2UgdGhhdCBvbmUgb2ZmIHRoZSBsaXN0LgoKVGhlIHF1ZXN0aW9uIHRoZW4gaXMsIHdoYXQgYWJvdXQgYGNncm91cF9icGZfcHJvZ19hdHRhY2hgPyBJIG5lZWQgdG8gbG9vayBpbnRvIHRoaXMgb25lIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTM6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2dyb3VwX2JwZl9wcm9nX2F0dGFjaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvY2dyb3VwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9jZ3JvdXAuYz0xMzY5PXN0YXRpYyBpbnQgY2dyb3VwX2JwZl9xdWVyeShzdHJ1Y3QgY2dyb3VwICpjZ3JwLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTEzNzktXG5rZXJuZWwvYnBmL2Nncm91cC5jOjEzODA6aW50IGNncm91cF9icGZfcHJvZ19hdHRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG5rZXJuZWwvYnBmL2Nncm91cC5jLTEzODEtXHRcdFx0ICAgZW51bSBicGZfcHJvZ190eXBlIHB0eXBlLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEzOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3ODgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nIGFzIGFuIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbCBjZ3JvdXAgQlBGIEludGVyYWN0aW9uKioKCkFscmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoYCBmdW5jdGlvbiDigJMgYW5kIGltbWVkaWF0ZWx5IEkgbm90aWNlIGl0JiMzOTtzICpub3QqIHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEl0IGltcGxpZXMgaXQgbWlnaHQgYmUgY2FsbGVkIGZyb20gc29tZXdoZXJlIG91dHNpZGUgdGhlIGltbWVkaWF0ZSBzY29wZSBvZiB3aGF0IEkmIzM5O20gY3VycmVudGx5IGxvb2tpbmcgYXQuIEhvd2V2ZXIsIHRoZSBwYXRjaCBpbiBxdWVzdGlvbiBzZWVtcyB0byBiZSBmb2N1c2luZyBvbiBjaGFuZ2VzIHdpdGhpbiBgX19jZ3JvdXBfYnBmX3JlcGxhY2VgLiBOb3csIHRoaXMgYF9fY2dyb3VwX2JwZl9yZXBsYWNlYCBmdW5jdGlvbiBpcywgYXMgZmFyIGFzIEkgY2FuIHNlZSwgZGlyZWN0bHkgY2FsbGVkIGJ5IGBjZ3JvdXBfYnBmX3JlcGxhY2VgLCB0aGF0JiMzOTtzIHRoZSBvYnZpb3VzIGxpbmsuCgpCdXQgdGhlIHF1ZXN0aW9uIGlzLCAqd2hlcmUgZWxzZSogbWlnaHQgYF9fY2dyb3VwX2JwZl9yZXBsYWNlYCBiZSBjYWxsZWQ/IElmIHRoaXMgZnVuY3Rpb24gaXMgdXNlZCBlbHNld2hlcmUsIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBwYXRjaCBiZWNvbWUgc2lnbmlmaWNhbnRseSB3aWRlci4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHRoZSBjYWxsIGdyYXBoLiBBIHF1aWNrIGdyZXAgZm9yIGNhbGxzIHRvIGBfX2Nncm91cF9icGZfcmVwbGFjZWAgc2hvdWxkIGRvIHRoZSB0cmljaywgb3IgYmV0dGVyIHlldCwgSSBjYW4gY2hlY2sgdGhlIHN5bWJvbCB0YWJsZSBkaXJlY3RseS4gVGhhdCB3b3VsZCBiZSB0aGUgZmlyc3Qgc3RlcCBpbiBkZXRlcm1pbmluZyB0aGUgaW1wYWN0IG9mIHRoaXMgY2hhbmdlLiBJcyB0aGlzIGEgbG9jYWxpemVkIGZpeCwgb3IgZG9lcyBpdCBoYXZlIHRoZSBwb3RlbnRpYWwgdG8gcmlwcGxlIG91dHdhcmQ/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEzOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fY2dyb3VwX2JwZl9yZXBsYWNlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9jZ3JvdXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2Nncm91cC5jPTEwMjE9c3RhdGljIGJvb2wgY2dyb3VwX2JwZl9zdG9yYWdlc19jb21wYXRpYmxlKHN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2csXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMDM1LS8qKlxua2VybmVsL2JwZi9jZ3JvdXAuYzoxMDM2OiAqIF9fY2dyb3VwX2JwZl9yZXBsYWNlKCkgLSBSZXBsYWNlIGxpbmsmIzM5O3MgcHJvZ3JhbSBhbmQgcHJvcGFnYXRlIHRoZSBjaGFuZ2Vcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTAzNy0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gZGVzY2VuZGFudHNcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTEwNDQtICovXG5rZXJuZWwvYnBmL2Nncm91cC5jOjEwNDU6c3RhdGljIGludCBfX2Nncm91cF9icGZfcmVwbGFjZShzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMDQ2LVx0XHRcdFx0c3RydWN0IGJwZl9jZ3JvdXBfbGluayAqbGluayxcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTEwODM9c3RhdGljIGludCBjZ3JvdXBfYnBmX3JlcGxhY2Uoc3RydWN0IGJwZl9saW5rICpsaW5rLCBzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nLFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtMTEwMC1cdH1cbmtlcm5lbC9icGYvY2dyb3VwLmM6MTEwMTpcdHJldCA9IF9fY2dyb3VwX2JwZl9yZXBsYWNlKGNnX2xpbmstXHUwMDNlY2dyb3VwLCBjZ19saW5rLCBuZXdfcHJvZyk7XG5rZXJuZWwvYnBmL2Nncm91cC5jLTExMDItb3V0X3VubG9jazpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTM6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzQ5MgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IG93biBleHBlcnQgcGVyc3BlY3RpdmU6CgoqKkZvY3VzaW5nIG9uIGBjZ3JvdXBfYnBmX3JlcGxhY2VgKioKCkFscmlnaHQsIGl0JiMzOTtzIGNsZWFyIHRoZSBwcm9ibGVtIHNwYWNlIGNlbnRlcnMgYXJvdW5kIGBjZ3JvdXBfYnBmX3JlcGxhY2VgLiBUaGF04oCZcyB0aGUga2V5IHN5bWJvbCB3ZSBuZWVkIHRvIGhvbmUgaW4gb24uIEl0JiMzOTtzIHRoZSByaWdodCBlbnRyeSBwb2ludCBmb3IgdGhpcyBpbnZlc3RpZ2F0aW9uLgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBlc3NlbnRpYWwgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB3aGF0IGJ1aWxkIGZsYWdzIGFyZSByZWxldmFudCBoZXJlLiBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgYGtlcm5lbC9icGYvY2dyb3VwLmNgIGlzIHRoZSBsaWtlbHkgc291cmNlIGZpbGUgZm9yIHRoaXMgZnVuY3Rpb25hbGl0eS4gQW5kIHRoYXQgbW9kdWxlIGlzLCBvZiBjb3Vyc2UsIG9ubHkgaW5jbHVkZWQgaW4gdGhlIGtlcm5lbCBidWlsZCBpZiBgQ09ORklHX0NHUk9VUF9CUEZgIGlzIGVuYWJsZWQuIFRpbWUgdG8gY29uZmlybSB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEzOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Nncm91cFxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGU9MzU9ZW5kaWZcbmtlcm5lbC9icGYvTWFrZWZpbGU6MzY6b2JqLSQoQ09ORklHX0NHUk9VUF9CUEYpICYjNDM7PSBjZ3JvdXAub1xua2VybmVsL2JwZi9NYWtlZmlsZS0zNy1pZmVxICgkKENPTkZJR19JTkVUKSx5KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMzoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODI0CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkNoZWNraW5nIHRoZSBDR1JPVVBfQlBGIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgc28gYENHUk9VUF9CUEZgIGlzIHRoZSBmbGFnIHdlIG5lZWQgZW5hYmxlZC4gQmVmb3JlIEkgZGl2ZSBpbnRvIGFueXRoaW5nLCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB2ZXJpZnkgaXRzIGRlcGVuZGVuY2llcy4gSXQmIzM5O3MgY3J1Y2lhbCwgaW4gYW55IGtlcm5lbCBjb25maWd1cmF0aW9uLCB0byB1bmRlcnN0YW5kIHdoYXQgb3RoZXIgY29tcG9uZW50cyBhcmUgcmVxdWlyZWQgb3IgdHJpZ2dlcmVkIGJ5IHRoaXMgb25lLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG92ZXJsb29raW5nIGFueSB1bmRlcmx5aW5nIGRlcGVuZGVuY2llcyB0aGF0IGNvdWxkIHRyaXAgbWUgdXAgbGF0ZXIuIEEgcXVpY2sgY2hlY2sgb2YgZGVwZW5kZW5jaWVzIGlzIGVzc2VudGlhbCBmb3IgYXZvaWRpbmcgdW5leHBlY3RlZCBpc3N1ZXMgZG93biB0aGUgbGluZS4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBzdGVwIGZvciBzdGFiaWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEzOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDR1JPVVBfQlBGJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xMzQxPWNvbmZpZyBDR1JPVVBfUEVSRlxuLS1cbmluaXQvS2NvbmZpZy0xMzUxLVxuaW5pdC9LY29uZmlnOjEzNTI6Y29uZmlnIENHUk9VUF9CUEZcbmluaXQvS2NvbmZpZy0xMzUzLVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBlQlBGIHByb2dyYW1zIGF0dGFjaGVkIHRvIGNncm91cHNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTM6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODEwNwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBDR1JPVVBfQlBGIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGBDR1JPVVBfQlBGYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7V2hhdCBvdGhlciBrZXJuZWwgZmVhdHVyZXMsIHN1YnN5c3RlbXMsIG9yIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyAqcmVseSogb24gdGhpcz8mIzM0OyBJIHdhbnQgdG8gdHJhY2UgdGhlIGRlcGVuZGVuY2llcy4gVGhpcyBpc24mIzM5O3QganVzdCBhYm91dCBrbm93aW5nIGlmIGEgbW9kdWxlIG5lZWRzIGl0LCBidXQgYWJvdXQgdW5kZXJzdGFuZGluZyB0aGUgKmFyY2hpdGVjdHVyYWwgY2hvaWNlcyogdGhhdCBoYXZlIGJlZW4gbWFkZSBhbmQgd2hhdCYjMzk7cyBlbmFibGVkIGlmIGBDR1JPVVBfQlBGYCBpcyBhY3RpdmF0ZWQuCgpTcGVjaWZpY2FsbHksIEkgd2FudCB0byBjb25zaWRlcjoKCiogICAqKlNlY3VyaXR5IENvbnRleHRzOioqIEhvdyBkb2VzIGBDR1JPVVBfQlBGYCBpbnRlcmFjdCB3aXRoIGNhcGFiaWxpdGllcywgTFNNcyAobGlrZSBTRUxpbnV4L0FwcEFybW9yKSwgYW5kIHNlY2NvbXA/IEFyZSB0aGVyZSBhbnkgc3VidGxlIGNoYW5nZXMgdG8gdGhlIHNlY3VyaXR5IG1vZGVsIHdoZW4gaXQmIzM5O3MgZW5hYmxlZD8gRG9lcyBpdCBwcm92aWRlIGFueSBtaXRpZ2F0aW9uIGZvciBvdGhlciB2dWxuZXJhYmlsaXRpZXMgaW4gdGhlIGtlcm5lbD8KKiAgICoqUGVyZm9ybWFuY2UgaW1wbGljYXRpb25zOioqIEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgcGVyZm9ybWFuY2UgaGl0cyBmcm9tIGVuYWJsaW5nIG9yIGRpc2FibGluZyB0aGlzPyBXaGF0IGhhcHBlbnMgdG8gdGhlIG90aGVyIGZlYXR1cmVzPwoqICAgKipSZXNvdXJjZSBNYW5hZ2VtZW50OioqIEFyZSB0aGVyZSBhbnkgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGNncm91cCBjb250cm9sbGVycyAoY3B1LCBtZW1vcnksIG5ldHdvcmssIGV0Yy4pPyBBbnkgb3ZlcmxhcHMgaW4gZnVuY3Rpb24/CiogICAqKlRvb2xpbmc6KiogV2hhdCB0b29saW5nIGlzIHJlcXVpcmVkIHRvIGVmZmVjdGl2ZWx5ICp1c2UqIGBDR1JPVVBfQlBGYD8gQXJlIHRoZXJlIHVzZXJzcGFjZSBsaWJyYXJpZXMsIGNvbW1hbmQtbGluZSB1dGlsaXRpZXMsIG9yIG1vbml0b3JpbmcgZnJhbWV3b3JrcyB0aGF0IGFyZSBlaXRoZXIgbWFuZGF0b3J5IG9yIGhpZ2hseSByZWNvbW1lbmRlZD8gSG93IGRvZXMgdGhpcyBhZmZlY3QgbXkgcHJlZmVycmVkIGRlYnVnZ2luZyB0b29scz8KCkJhc2ljYWxseSwgSSYjMzk7bSBkaWdnaW5nIGZvciB0aGUgJiMzNDt3aHkmIzM0OyBhbmQgJiMzNDtob3cmIzM0OyBiZWhpbmQgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbi4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgcmlwcGxlIGVmZmVjdHMg4oCTIHRoZSB0aGluZ3MgdGhhdCBjaGFuZ2UsIHRoZSB0cmFkZS1vZmZzIHRoYXQgaGF2ZSBiZWVuIG1hZGUsIGFuZCB0aGUgb3ZlcmFsbCBkZXNpZ24gcGhpbG9zb3BoeSB0aGF0JiMzOTtzIGRyaXZpbmcgaXRzIGluY2x1c2lvbi4gVGltZSB0byBkZWx2ZSBpbnRvIHRoZSBjb2RlIGFuZCBkb2NzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMzoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzNTIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTM1MjpcdGNvbmZpZyBDR1JPVVBfQlBGXG4xMzUzOlx0XHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIGVCUEYgcHJvZ3JhbXMgYXR0YWNoZWQgdG8gY2dyb3Vwc1wmIzM0O1xuMTM1NDpcdFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxuMTM1NTpcdFx0c2VsZWN0IFNPQ0tfQ0dST1VQX0RBVEFcbjEzNTY6XHRcdGhlbHBcbjEzNTc6XHRcdCAgQWxsb3cgYXR0YWNoaW5nIGVCUEYgcHJvZ3JhbXMgdG8gYSBjZ3JvdXAgdXNpbmcgdGhlIGJwZigyKVxuMTM1ODpcdFx0ICBzeXNjYWxsIGNvbW1hbmQgQlBGX1BST0dfQVRUQUNILlxuMTM1OTpcdFxuMTM2MDpcdFx0ICBJbiB3aGljaCBjb250ZXh0IHRoZXNlIHByb2dyYW1zIGFyZSBhY2Nlc3NlZCBkZXBlbmRzIG9uIHRoZSB0eXBlXG4xMzYxOlx0XHQgIG9mIGF0dGFjaG1lbnQuIEZvciBpbnN0YW5jZSwgcHJvZ3JhbXMgdGhhdCBhcmUgYXR0YWNoZWQgdXNpbmdcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTM6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODcwMQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQlBGIGFuZCBjZ3JvdXAgRnVuY3Rpb25hbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYENHUk9VUF9CUEZgIGFuZCByZWFsaXplIGl0JiMzOTtzIGludHJpbnNpY2FsbHkgbGlua2VkIHRvIGBCUEZfU1lTQ0FMTGAuICBUaG9zZSBhcmUgdGhlIGtleSBjb25maWd1cmF0aW9ucyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLiBMZXQmIzM5O3MgZGVsdmUgZGVlcGVyIGludG8gdGhpcy4gSSB3YW50IHRvIGNvbmZpcm0gdGhhdCB0aGUgYGNncm91cF9icGZfcmVwbGFjZWAgZnVuY3Rpb24gaXMgbm90IGlubGluZWQuIEl0JiMzOTtzIHVzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyIHdpdGhpbiBgYnBmX2Nncm91cF9saW5rX2xvcHNgLCBzbyBpbmxpbmluZyBpc24mIzM5O3QgcG9zc2libGUsIHdoaWNoIGlzIGdvb2QuICBIb2xkIG9uLCB0aG91Z2gg4oCTIGl0JiMzOTtzICpzdGF0aWMqISAgQnV0IHdlJiMzOTtyZSB0YWtpbmcgaXRzIGFkZHJlc3MuICBUaGF0IG1ha2VzIGl0IGEgZ3JlYXQgc3ltYm9sIHRvIGZvY3VzIG9uLiAKCk5vdywgSSYjMzk7bSBnb2luZyB0byBzY2FuIHRoZSBga2VybmVsL2JwZi9jZ3JvdXAuY2AgZmlsZSBmb3Igb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGlzIHByb2Nlc3MuIExldCBtZSBjaGVjay4uLiBIbW0sIHdoYXQgYWJvdXQgYGJwZl9jZ3JvdXBfbGlua191cGRhdGVgPyBOb3BlLiBJdCBsb29rcyBsaWtlIGBjZ3JvdXBfYnBmX3JlcGxhY2VgIGlzIHRoZSBjb3JlIGZ1bmN0aW9uIGhlcmUuIExldCYjMzk7cyB3aWRlbiB0aGUgc2NvcGUuIFdoYXQgb3RoZXIgZnVuY3Rpb25zIGV4aXN0IG91dHNpZGUgb2YgdGhlIGBjZ3JvdXAuY2AgZmlsZT8gSSBzZWUgYGJwZl9saW5rX3VwZGF0ZWAgaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYC4gT2theSwgdGhhdCYjMzk7cyBzb21ldGhpbmcgdG8gaW52ZXN0aWdhdGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEzOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2xpbmtfdXBkYXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zeXNjYWxsLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMzoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MjMzCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOgoKKipJbnRlcm5hbCBNb25vbG9ndWU6IFJldmlzaXRpbmcgS2VybmVsIEJQRiBDb2RlKioKCkFscmlnaHQsIGhvbGQgb24gYSBzZWNvbmQuIERpZG4mIzM5O3QgSSAqanVzdCogZ28gdGhyb3VnaCBgbGlua191cGRhdGVgPyBJJiMzOTttIHByZXR0eSBzdXJlIEkgYWxyZWFkeSBwb2tlZCBhcm91bmQgaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYCwgc28gSSBzaG91bGQgYmUgYWJsZSB0byByZWNhbGwgdGhvc2UgcGFydHMuIEkgZmVlbCBsaWtlIEkmIzM5O3ZlIGp1c3Qgd2FzdGVkIG15IHRpbWUuIExldCBtZSBjaGVjayB0aGUgbm90ZXMgSSBtYWRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMzoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsaW5rX3VwZGF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3lzY2FsbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3lzY2FsbC5jPTU4NDQ9c3RhdGljIGludCBsaW5rX2NyZWF0ZSh1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTk0OS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU5NTA6c3RhdGljIGludCBsaW5rX3VwZGF0ZV9tYXAoc3RydWN0IGJwZl9saW5rICpsaW5rLCB1bmlvbiBicGZfYXR0ciAqYXR0cilcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5NTEte1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5NTQtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1OTU1Olx0bmV3X21hcCA9IGJwZl9tYXBfZ2V0KGF0dHItXHUwMDNlbGlua191cGRhdGUubmV3X21hcF9mZCk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01OTU2LVx0aWYgKElTX0VSUihuZXdfbWFwKSlcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01OTU4LVxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTk1OTpcdGlmIChhdHRyLVx1MDAzZWxpbmtfdXBkYXRlLmZsYWdzIFx1MDAyNiBCUEZfRl9SRVBMQUNFKSB7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1OTYwOlx0XHRvbGRfbWFwID0gYnBmX21hcF9nZXQoYXR0ci1cdTAwM2VsaW5rX3VwZGF0ZS5vbGRfbWFwX2ZkKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5NjEtXHRcdGlmIChJU19FUlIob2xkX21hcCkpIHtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01OTY0LVx0XHR9XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1OTY1Olx0fSBlbHNlIGlmIChhdHRyLVx1MDAzZWxpbmtfdXBkYXRlLm9sZF9tYXBfZmQpIHtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5NjYtXHRcdHJldCA9IC1FSU5WQUw7XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTk3OC1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU5Nzk6I2RlZmluZSBCUEZfTElOS19VUERBVEVfTEFTVF9GSUVMRCBsaW5rX3VwZGF0ZS5vbGRfcHJvZ19mZFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTk4MC1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU5ODE6c3RhdGljIGludCBsaW5rX3VwZGF0ZSh1bmlvbiBicGZfYXR0ciAqYXR0cilcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5ODIte1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5OTAtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1OTkxOlx0ZmxhZ3MgPSBhdHRyLVx1MDAzZWxpbmtfdXBkYXRlLmZsYWdzO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNTk5Mi1cdGlmIChmbGFncyBcdTAwMjYgfkJQRl9GX1JFUExBQ0UpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTk5NC1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU5OTU6XHRsaW5rID0gYnBmX2xpbmtfZ2V0X2Zyb21fZmQoYXR0ci1cdTAwM2VsaW5rX3VwZGF0ZS5saW5rX2ZkKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5OTYtXHRpZiAoSVNfRVJSKGxpbmspKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5OTktXHRpZiAobGluay1cdTAwM2VvcHMtXHUwMDNldXBkYXRlX21hcCkge1xua2VybmVsL2JwZi9zeXNjYWxsLmM6NjAwMDpcdFx0cmV0ID0gbGlua191cGRhdGVfbWFwKGxpbmssIGF0dHIpO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNjAwMS1cdFx0Z290byBvdXRfcHV0X2xpbms7XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjAwMy1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYwMDQ6XHRuZXdfcHJvZyA9IGJwZl9wcm9nX2dldChhdHRyLVx1MDAzZWxpbmtfdXBkYXRlLm5ld19wcm9nX2ZkKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYwMDUtXHRpZiAoSVNfRVJSKG5ld19wcm9nKSkge1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYwMTAtXHRpZiAoZmxhZ3MgXHUwMDI2IEJQRl9GX1JFUExBQ0UpIHtcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYwMTE6XHRcdG9sZF9wcm9nID0gYnBmX3Byb2dfZ2V0KGF0dHItXHUwMDNlbGlua191cGRhdGUub2xkX3Byb2dfZmQpO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNjAxMi1cdFx0aWYgKElTX0VSUihvbGRfcHJvZykpIHtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MDE2LVx0XHR9XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MDE3Olx0fSBlbHNlIGlmIChhdHRyLVx1MDAzZWxpbmtfdXBkYXRlLm9sZF9wcm9nX2ZkKSB7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MDE4LVx0XHRyZXQgPSAtRUlOVkFMO1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTYzNTQ9c3RhdGljIGludCBfX3N5c19icGYoZW51bSBicGZfY21kIGNtZCwgYnBmcHRyX3QgdWF0dHIsIHVuc2lnbmVkIGludCBzaXplLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTY0OTUtXHRjYXNlIEJQRl9MSU5LX1VQREFURTpcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjY0OTY6XHRcdGVyciA9IGxpbmtfdXBkYXRlKFx1MDAyNmF0dHIpO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNjQ5Ny1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEzOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDg0CgkJCQkJCQlvdXRwdXQ6IDEwNwoJCQkJCQkJdGhvdWdodHM6IDg4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBCUEYgQ2dyb3VwIExpbmsgVXBkYXRlIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBoZXJlJiMzOTtzIG15IGJyZWFrZG93bi4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBsaWVzIHdpdGhpbiB0aGUgYEJQRl9MSU5LX1VQREFURWAgc3lzY2FsbCBoYW5kbGVyLCBzcGVjaWZpY2FsbHkgdGhlIGNncm91cC1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbjogYGNncm91cF9icGZfcmVwbGFjZWAuIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IGBjZ3JvdXBfYnBmX3JlcGxhY2VgIGlzIHN0YXRpYy4gSW5pdGlhbGx5LCB0aGF0IGdhdmUgbWUgcGF1c2UgYmVjYXVzZSBJIHdvbmRlcmVkIGlmIGl0IGNvdWxkIGJlIGEgdmFsaWQgZm9jdXMgc3ltYm9sLCBidXQgdGhlbiBJIHJlbWVtYmVyZWQgc3l6a2FsbGVyIGhhbmRsZXMgc3RhdGljIGZ1bmN0aW9ucyBmaW5lIGlmIHRoZXkgYXJlIG5vdCBpbmxpbmVkLiBJbiB0aGlzIGNhc2UgaXQgaXMgYSBmdW5jdGlvbiBwb2ludGVyLgoKSSYjMzk7dmUgYWxzbyBkb3VibGUtY2hlY2tlZCB0aGF0IGBfX2Nncm91cF9icGZfcmVwbGFjZWAgaXMgYWxzbyBzdGF0aWMsIGFuZCBpdCBpcy4gRnVydGhlcm1vcmUsIGBjZ3JvdXBfYnBmX3JlcGxhY2VgIGlzIHRoZSBvbmx5IGNhbGxlciBvZiBgX19jZ3JvdXBfYnBmX3JlcGxhY2VgLgoKVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgY29tcGF0aWJpbGl0eSBjaGVjayBiZXR3ZWVuIHRoZSBjZ3JvdXAgc3RvcmFnZXMgb2YgdGhlIG9sZCBhbmQgbmV3IEJQRiBwcm9ncmFtcyBkdXJpbmcgYSBsaW5rIHJlcGxhY2VtZW50IHZpYSBgY2dyb3VwX2JwZl9zdG9yYWdlc19jb21wYXRpYmxlYCwgd2hpY2ggaXMgYSBjbGVhciBmdW5jdGlvbmFsIGNoYW5nZS4gSXQmIzM5O3MgZXNzZW50aWFsbHkgcHJldmVudGluZyBpbmNvbXBhdGlibGUgcHJvZ3JhbSBzd2Fwcy4gSXQgaXMgY2FsbGVkIGluIGBfX2Nncm91cF9icGZfcmVwbGFjZWAgZnJvbSBgY2dyb3VwX2JwZl9yZXBsYWNlYC4KClNvLCB0aGUgZm9jdXMgc3ltYm9sIHNob3VsZCBiZSBgY2dyb3VwX2JwZl9yZXBsYWNlYCwgYW5kIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgYXJlIGBDR1JPVVBfQlBGYCBhbmQgYEJQRl9TWVNDQUxMYCB0byByZWFjaCB0aGUgcmVsYXRlZCBjb2RlLgoKVGhlcmVmb3JlLCBteSBzdW1tYXJ5IGlzOgoqICAgKipXb3J0aEZ1enppbmc6KiogVHJ1ZQoqICAgKipSZWFzb25pbmc6KiogVGhlIHBhdGNoIGFkZHMgYSBjaGVjayB0byBwcmV2ZW50IHJlcGxhY2luZyBhIEJQRiBwcm9ncmFtIGluIGEgY2dyb3VwIGxpbmsgaWYgdGhlIG5ldyBwcm9ncmFtIGhhcyBkaWZmZXJlbnQgY2dyb3VwIHN0b3JhZ2VzIHRoYW4gdGhlIG9sZCBwcm9ncmFtLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIEJQRiBjZ3JvdXAgbGluayByZXBsYWNlbWVudCBsb2dpYywgcmVhY2hhYmxlIHZpYSB0aGUgQlBGX0xJTktfVVBEQVRFIHN5c2NhbGwuCiogICAqKkZvY3VzU3ltYm9sczoqKiBgY2dyb3VwX2JwZl9yZXBsYWNlYAoqICAgKipFbmFibGVDb25maWdzOioqIGBDR1JPVVBfQlBGYCwgYEJQRl9TWVNDQUxMYAoKTm93LCBJJiMzOTtsbCB1c2UgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBhbmQgbW92ZSBvbiB0byB0aGUgbmV4dCBwYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTM6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NHUk9VUF9CUEYmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjZ3JvdXBfYnBmX3JlcGxhY2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNvbXBhdGliaWxpdHkgY2hlY2sgZm9yIGNncm91cCBzdG9yYWdlcyB3aGVuIHJlcGxhY2luZyBhIEJQRiBwcm9ncmFtIGluIGEgY2dyb3VwIGxpbmsuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgQlBGIGNncm91cCBsaW5rIHJlcGxhY2VtZW50IGxvZ2ljLCByZWFjaGFibGUgdmlhIHRoZSBCUEZfTElOS19VUERBVEUgc3lzY2FsbCBjb21tYW5kLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDR1JPVVBfQlBGJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y2dyb3VwX2JwZl9yZXBsYWNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBjb21wYXRpYmlsaXR5IGNoZWNrIGZvciBjZ3JvdXAgc3RvcmFnZXMgd2hlbiByZXBsYWNpbmcgYSBCUEYgcHJvZ3JhbSBpbiBhIGNncm91cCBsaW5rLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIEJQRiBjZ3JvdXAgbGluayByZXBsYWNlbWVudCBsb2dpYywgcmVhY2hhYmxlIHZpYSB0aGUgQlBGX0xJTktfVVBEQVRFIHN5c2NhbGwgY29tbWFuZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTM6MTE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMzoxMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgc2ltcGxlIGNvbXBhdGliaWxpdHkgY2hlY2sgZm9yIEJQRiBjZ3JvdXAgc3RvcmFnZSBkdXJpbmcgcHJvZ3JhbSByZXBsYWNlbWVudC4gSXQgY29tcGFyZXMgZXhpc3RpbmcgZmllbGRzIGluIHRoZSBgYnBmX3Byb2ctXHUwMDNlYXV4YCBzdHJ1Y3R1cmUuIEl0IGRvZXMgbm90IGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMsIGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLCBvciB1c2UgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gY29udHJvbCBmbG93LiBBbnkgbWVtb3J5IGVycm9ycyByZWxhdGVkIHRvIHRoaXMgY2hhbmdlLCBzdWNoIGFzIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgb3IgdXNlLWFmdGVyLWZyZWUsIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNmM0ZDkyZjcwYmNkN2VjYjYyYWExYmMwNDhhNDU2MDYxMjdmMDA5MApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDcgMTM6MTA6MDkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2Nncm91cC5jIGIva2VybmVsL2JwZi9jZ3JvdXAuYwppbmRleCA0MzU1Y2NiNzhhOWM2Li41Y2M5YjJkOTJmZDU4IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2Nncm91cC5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvY2dyb3VwLmMKQEAgLTEwMTgsNiAmIzQzOzEwMTgsMjAgQEAgc3RhdGljIHZvaWQgcmVwbGFjZV9lZmZlY3RpdmVfcHJvZyhzdHJ1Y3QgY2dyb3VwICpjZ3JwLAogCX0KIH0KIAomIzQzO3N0YXRpYyBib29sIGNncm91cF9icGZfc3RvcmFnZXNfY29tcGF0aWJsZShzdHJ1Y3QgYnBmX3Byb2cgKm9sZF9wcm9nLAomIzQzOwkJCQkJICAgc3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZykKJiM0Mzt7CiYjNDM7CWVudW0gYnBmX2Nncm91cF9zdG9yYWdlX3R5cGUgc3R5cGU7CiYjNDM7CiYjNDM7CWZvcl9lYWNoX2Nncm91cF9zdG9yYWdlX3R5cGUoc3R5cGUpIHsKJiM0MzsJCWlmIChvbGRfcHJvZy0mZ3Q7YXV4LSZndDtjZ3JvdXBfc3RvcmFnZVtzdHlwZV0gIT0KJiM0MzsJCSAgICBuZXdfcHJvZy0mZ3Q7YXV4LSZndDtjZ3JvdXBfc3RvcmFnZVtzdHlwZV0pCiYjNDM7CQkJcmV0dXJuIGZhbHNlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKIC8qKgogICogX19jZ3JvdXBfYnBmX3JlcGxhY2UoKSAtIFJlcGxhY2UgbGluayYjMzk7cyBwcm9ncmFtIGFuZCBwcm9wYWdhdGUgdGhlIGNoYW5nZQogICogICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGRlc2NlbmRhbnRzCkBAIC0xMDU2LDYgJiM0MzsxMDcwLDkgQEAgc3RhdGljIGludCBfX2Nncm91cF9icGZfcmVwbGFjZShzdHJ1Y3QgY2dyb3VwICpjZ3JwLAogCWlmICghZm91bmQpCiAJCXJldHVybiAtRU5PRU5UOwogCiYjNDM7CWlmICghY2dyb3VwX2JwZl9zdG9yYWdlc19jb21wYXRpYmxlKGxpbmstJmd0O2xpbmsucHJvZywgbmV3X3Byb2cpKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiAJY2dycC0mZ3Q7YnBmLnJldmlzaW9uc1thdHlwZV0gJiM0Mzs9IDE7CiAJb2xkX3Byb2cgPSB4Y2hnKCZhbXA7bGluay0mZ3Q7bGluay5wcm9nLCBuZXdfcHJvZyk7CiAJcmVwbGFjZV9lZmZlY3RpdmVfcHJvZyhjZ3JwLCBhdHlwZSwgcGwpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTM6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIxMwoJCQkJCQkJb3V0cHV0OiAxMjUKCQkJCQkJCXRob3VnaHRzOiA1MzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEJQRiBDZ3JvdXAgU3RvcmFnZSBDb21wYXRpYmlsaXR5IER1cmluZyBQcm9ncmFtIFJlcGxhY2VtZW50KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgZm9jdXNlZCBvbiBlbnN1cmluZyBjb21wYXRpYmlsaXR5IG9mIEJQRiBjZ3JvdXAgc3RvcmFnZSBkdXJpbmcgcHJvZ3JhbSByZXBsYWNlbWVudC4gU3BlY2lmaWNhbGx5LCBpdCBpbnRyb2R1Y2VzIGEgZnVuY3Rpb24sIGBjZ3JvdXBfYnBmX3N0b3JhZ2VzX2NvbXBhdGlibGVgLCB0byBjb21wYXJlIHRoZSBgY2dyb3VwX3N0b3JhZ2VgIGZpZWxkcyB3aXRoaW4gdGhlIGBicGZfcHJvZy0mZ3Q7YXV4YCBzdHJ1Y3R1cmUgb2YgdGhlIG9sZCBhbmQgbmV3IHByb2dyYW1zLiBUaGUgY2hlY2sgaXMgc2ltcGxlOiBgb2xkX3Byb2ctJmd0O2F1eC0mZ3Q7Y2dyb3VwX3N0b3JhZ2Vbc3R5cGVdICE9IG5ld19wcm9nLSZndDthdXgtJmd0O2Nncm91cF9zdG9yYWdlW3N0eXBlXWAuIElmIGFueSBvZiB0aGUgc3RvcmFnZSB0eXBlcyAoYHN0eXBlYCkgZGlmZmVyLCB0aGUgcmVwbGFjZW1lbnQgaXMgcmVqZWN0ZWQgYnkgcmV0dXJuaW5nIGAtRUlOVkFMYC4KCk15IGltbWVkaWF0ZSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBEb2VzIHRoaXMgY2hhbmdlIGludHJvZHVjZSBhbnkgcmlza3MgdGhlcmU/IE5vLCBhZnRlciBhIHF1aWNrIHJldmlldywgaXQmIzM5O3MgY29tcGFyaW5nIHBvaW50ZXJzIG9yIHZhbHVlcyB3aXRoaW4gdGhlIGBjZ3JvdXBfc3RvcmFnZWAgYXJyYXksIHBhcnQgb2YgYGJwZl9wcm9nLSZndDthdXhgLiBUaGUgcG90ZW50aWFsIGJ1Z3MgYXJlIGxpbWl0ZWQgdG8gTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBvciB1c2UtYWZ0ZXItZnJlZSwgaXNzdWVzIHRoYXQgS0FTQU4gc2hvdWxkIGJlIHdlbGwtZXF1aXBwZWQgdG8gZGV0ZWN0LiBUaGlzIGlzbiYjMzk7dCB3cml0aW5nIHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2Vyc3BhY2UsIG5vciBpcyBpdCBtYWtpbmcgY3JpdGljYWwgY29udHJvbC1mbG93IGRlY2lzaW9ucyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIG1lbW9yeSAodW5sZXNzIGBjZ3JvdXBfc3RvcmFnZWAgaXRzZWxmIGlzIGluaXRpYWxpemVkIGJhZGx5LCBidXQgdGhhdCYjMzk7cyBhIHByZS1leGlzdGluZyBmaWVsZCBhbmQgc2hvdWxkIGJlIGluaXRpYWxpemVkIGJ5IHRoZSBwcm9ncmFtIGxvYWRlcikuCgpMb29raW5nIG1vcmUgY2xvc2VseSBhdCB0aGUgY29kZToKYGBgYwpzdGF0aWMgYm9vbCBjZ3JvdXBfYnBmX3N0b3JhZ2VzX2NvbXBhdGlibGUoc3RydWN0IGJwZl9wcm9nICpvbGRfcHJvZywKCQkJCQkgICBzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nKQp7CgllbnVtIGJwZl9jZ3JvdXBfc3RvcmFnZV90eXBlIHN0eXBlOwoKCWZvcl9lYWNoX2Nncm91cF9zdG9yYWdlX3R5cGUoc3R5cGUpIHsKCQlpZiAob2xkX3Byb2ctJmd0O2F1eC0mZ3Q7Y2dyb3VwX3N0b3JhZ2Vbc3R5cGVdICE9CgkJICAgIG5ld19wcm9nLSZndDthdXgtJmd0O2Nncm91cF9zdG9yYWdlW3N0eXBlXSkKCQkJcmV0dXJuIGZhbHNlOwoJfQoKCXJldHVybiB0cnVlOwp9CmBgYApJdCYjMzk7cyBqdXN0IGEgc3RyYWlnaHRmb3J3YXJkIGNvbXBhcmlzb24uIFRoZXJlJiMzOTtzIG5vdGhpbmcgaGVyZSB0aGF0JiMzOTtzIHBhcnRpY3VsYXJseSB2dWxuZXJhYmxlIHRvIEtNU0FOLXNwZWNpZmljIGlzc3Vlcy4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBjb21wYXRpYmlsaXR5IGNoZWNrLCBhbmQgaXQgYXBwZWFycyB0byBiZSBpbXBsZW1lbnRlZCBzYWZlbHkuCgpUaGVyZWZvcmUsIGdpdmVuIHRoZSBzaW1wbGUgbmF0dXJlIG9mIHRoZSBwYXRjaCwgYW5kIHRoZSBuYXR1cmUgb2YgdGhlIG9wZXJhdGlvbnMgcGVyZm9ybWVkLCBJJiMzOTttIGNvbmZpZGVudCBpbiBzZXR0aW5nIGBOZWVkc0tNU0FOPWZhbHNlYC4gVGhlIHBhdGNoIGFkZHJlc3NlcyBjZ3JvdXAgc3RvcmFnZSBjb21wYXRpYmlsaXR5IHVzaW5nIGEgd2VsbC1kZWZpbmVkIGNvbXBhcmlzb24sIHdpdGhvdXQgaW50cm9kdWNpbmcgbmV3IGFsbG9jYXRpb25zLCB1c2VyLXNwYWNlIGRhdGEgZXhwb3N1cmUsIG9yIHVzZSBvZiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBjcml0aWNhbCBwYXRocy4gQW55IG1lbW9yeSBlcnJvcnMgd291bGQgYmUgS0FTQU4tZGV0ZWN0YWJsZS4gTm8gZnVydGhlciBLTVNBTiBmdXp6aW5nIGlzIG5lZWRlZCBpbiB0aGlzIGNhc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEzOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBzaW1wbGUgY29tcGF0aWJpbGl0eSBjaGVjayBmb3IgQlBGIGNncm91cCBzdG9yYWdlIGR1cmluZyBwcm9ncmFtIHJlcGxhY2VtZW50LiBJdCBjb21wYXJlcyBleGlzdGluZyBmaWVsZHMgaW4gdGhlIGBicGZfcHJvZy1cdTAwM2VhdXhgIHN0cnVjdHVyZS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgY29weSBkYXRhIHRvIHVzZXIgc3BhY2UsIG9yIHVzZSBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBjb250cm9sIGZsb3cuIEFueSBtZW1vcnkgZXJyb3JzIHJlbGF0ZWQgdG8gdGhpcyBjaGFuZ2UsIHN1Y2ggYXMgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBvciB1c2UtYWZ0ZXItZnJlZSwgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIHNpbXBsZSBjb21wYXRpYmlsaXR5IGNoZWNrIGZvciBCUEYgY2dyb3VwIHN0b3JhZ2UgZHVyaW5nIHByb2dyYW0gcmVwbGFjZW1lbnQuIEl0IGNvbXBhcmVzIGV4aXN0aW5nIGZpZWxkcyBpbiB0aGUgYGJwZl9wcm9nLVx1MDAzZWF1eGAgc3RydWN0dXJlLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zLCBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZSwgb3IgdXNlIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIGNvbnRyb2wgZmxvdy4gQW55IG1lbW9yeSBlcnJvcnMgcmVsYXRlZCB0byB0aGlzIGNoYW5nZSwgc3VjaCBhcyBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIG9yIHVzZS1hZnRlci1mcmVlLCB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEzOjEwOjEwLjYzNzMxNDEzOVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4NTM4ODE1MzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNHUk9VUF9CUEZcIixcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY2dyb3VwX2JwZl9yZXBsYWNlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgc2ltcGxlIGNvbXBhdGliaWxpdHkgY2hlY2sgZm9yIEJQRiBjZ3JvdXAgc3RvcmFnZSBkdXJpbmcgcHJvZ3JhbSByZXBsYWNlbWVudC4gSXQgY29tcGFyZXMgZXhpc3RpbmcgZmllbGRzIGluIHRoZSBgYnBmX3Byb2ctXFx1MDAzZWF1eGAgc3RydWN0dXJlLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zLCBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZSwgb3IgdXNlIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIGNvbnRyb2wgZmxvdy4gQW55IG1lbW9yeSBlcnJvcnMgcmVsYXRlZCB0byB0aGlzIGNoYW5nZSwgc3VjaCBhcyBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIG9yIHVzZS1hZnRlci1mcmVlLCB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGNvbXBhdGliaWxpdHkgY2hlY2sgZm9yIGNncm91cCBzdG9yYWdlcyB3aGVuIHJlcGxhY2luZyBhIEJQRiBwcm9ncmFtIGluIGEgY2dyb3VwIGxpbmsuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgQlBGIGNncm91cCBsaW5rIHJlcGxhY2VtZW50IGxvZ2ljLCByZWFjaGFibGUgdmlhIHRoZSBCUEZfTElOS19VUERBVEUgc3lzY2FsbCBjb21tYW5kLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMzoxMDoxMC42MzczMjExM1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM0Mzg0Mzg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNmM0ZDkyZjcwYmNkN2VjYjYyYWExYmMwNDhhNDU2MDYxMjdmMDA5MFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEF1ZyA3IDEzOjEwOjA5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvY2dyb3VwLmMgYi9rZXJuZWwvYnBmL2Nncm91cC5jXFxuaW5kZXggNDM1NWNjYjc4YTljNi4uNWNjOWIyZDkyZmQ1OCAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL2Nncm91cC5jXFxuKysrIGIva2VybmVsL2JwZi9jZ3JvdXAuY1xcbkBAIC0xMDE4LDYgKzEwMTgsMjAgQEAgc3RhdGljIHZvaWQgcmVwbGFjZV9lZmZlY3RpdmVfcHJvZyhzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxcbiBcXHR9XFxuIH1cXG4gXFxuK3N0YXRpYyBib29sIGNncm91cF9icGZfc3RvcmFnZXNfY29tcGF0aWJsZShzdHJ1Y3QgYnBmX3Byb2cgKm9sZF9wcm9nLFxcbitcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nKVxcbit7XFxuK1xcdGVudW0gYnBmX2Nncm91cF9zdG9yYWdlX3R5cGUgc3R5cGU7XFxuK1xcbitcXHRmb3JfZWFjaF9jZ3JvdXBfc3RvcmFnZV90eXBlKHN0eXBlKSB7XFxuK1xcdFxcdGlmIChvbGRfcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VjZ3JvdXBfc3RvcmFnZVtzdHlwZV0gIT1cXG4rXFx0XFx0ICAgIG5ld19wcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWNncm91cF9zdG9yYWdlW3N0eXBlXSlcXG4rXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4gLyoqXFxuICAqIF9fY2dyb3VwX2JwZl9yZXBsYWNlKCkgLSBSZXBsYWNlIGxpbmsncyBwcm9ncmFtIGFuZCBwcm9wYWdhdGUgdGhlIGNoYW5nZVxcbiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gZGVzY2VuZGFudHNcXG5AQCAtMTA1Niw2ICsxMDcwLDkgQEAgc3RhdGljIGludCBfX2Nncm91cF9icGZfcmVwbGFjZShzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxcbiBcXHRpZiAoIWZvdW5kKVxcbiBcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4gXFxuK1xcdGlmICghY2dyb3VwX2JwZl9zdG9yYWdlc19jb21wYXRpYmxlKGxpbmstXFx1MDAzZWxpbmsucHJvZywgbmV3X3Byb2cpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuIFxcdGNncnAtXFx1MDAzZWJwZi5yZXZpc2lvbnNbYXR5cGVdICs9IDE7XFxuIFxcdG9sZF9wcm9nID0geGNoZyhcXHUwMDI2bGluay1cXHUwMDNlbGluay5wcm9nLCBuZXdfcHJvZyk7XFxuIFxcdHJlcGxhY2VfZWZmZWN0aXZlX3Byb2coY2dycCwgYXR5cGUsIHBsKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTM6MTA6MTEuMTcyNjc5OTA0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6Njc3NDUxMzA3MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0dST1VQX0JQRlwiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjZ3JvdXBfYnBmX3JlcGxhY2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgY29tcGF0aWJpbGl0eSBjaGVjayBmb3IgY2dyb3VwIHN0b3JhZ2VzIHdoZW4gcmVwbGFjaW5nIGEgQlBGIHByb2dyYW0gaW4gYSBjZ3JvdXAgbGluay4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBCUEYgY2dyb3VwIGxpbmsgcmVwbGFjZW1lbnQgbG9naWMsIHJlYWNoYWJsZSB2aWEgdGhlIEJQRl9MSU5LX1VQREFURSBzeXNjYWxsIGNvbW1hbmQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDZjNGQ5MmY3MGJjZDdlY2I2MmFhMWJjMDQ4YTQ1NjA2MTI3ZjAwOTBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyA3IDEzOjEwOjA5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9jZ3JvdXAuYyBiL2tlcm5lbC9icGYvY2dyb3VwLmNcbmluZGV4IDQzNTVjY2I3OGE5YzYuLjVjYzliMmQ5MmZkNTggMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2Nncm91cC5jXG4rKysgYi9rZXJuZWwvYnBmL2Nncm91cC5jXG5AQCAtMTAxOCw2ICsxMDE4LDIwIEBAIHN0YXRpYyB2b2lkIHJlcGxhY2VfZWZmZWN0aXZlX3Byb2coc3RydWN0IGNncm91cCAqY2dycCxcbiBcdH1cbiB9XG4gXG4rc3RhdGljIGJvb2wgY2dyb3VwX2JwZl9zdG9yYWdlc19jb21wYXRpYmxlKHN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2csXG4rXHRcdFx0XHRcdCAgIHN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2cpXG4re1xuK1x0ZW51bSBicGZfY2dyb3VwX3N0b3JhZ2VfdHlwZSBzdHlwZTtcbitcbitcdGZvcl9lYWNoX2Nncm91cF9zdG9yYWdlX3R5cGUoc3R5cGUpIHtcbitcdFx0aWYgKG9sZF9wcm9nLVx1MDAzZWF1eC1cdTAwM2VjZ3JvdXBfc3RvcmFnZVtzdHlwZV0gIT1cbitcdFx0ICAgIG5ld19wcm9nLVx1MDAzZWF1eC1cdTAwM2VjZ3JvdXBfc3RvcmFnZVtzdHlwZV0pXG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuIC8qKlxuICAqIF9fY2dyb3VwX2JwZl9yZXBsYWNlKCkgLSBSZXBsYWNlIGxpbmsncyBwcm9ncmFtIGFuZCBwcm9wYWdhdGUgdGhlIGNoYW5nZVxuICAqICAgICAgICAgICAgICAgICAgICAgICAgICB0byBkZXNjZW5kYW50c1xuQEAgLTEwNTYsNiArMTA3MCw5IEBAIHN0YXRpYyBpbnQgX19jZ3JvdXBfYnBmX3JlcGxhY2Uoc3RydWN0IGNncm91cCAqY2dycCxcbiBcdGlmICghZm91bmQpXG4gXHRcdHJldHVybiAtRU5PRU5UO1xuIFxuK1x0aWYgKCFjZ3JvdXBfYnBmX3N0b3JhZ2VzX2NvbXBhdGlibGUobGluay1cdTAwM2VsaW5rLnByb2csIG5ld19wcm9nKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4gXHRjZ3JwLVx1MDAzZWJwZi5yZXZpc2lvbnNbYXR5cGVdICs9IDE7XG4gXHRvbGRfcHJvZyA9IHhjaGcoXHUwMDI2bGluay1cdTAwM2VsaW5rLnByb2csIG5ld19wcm9nKTtcbiBcdHJlcGxhY2VfZWZmZWN0aXZlX3Byb2coY2dycCwgYXR5cGUsIHBsKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEzOjEwOjExLjE3MjY4MTY4NFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0NTE2NDQ1ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEJQRiBDZ3JvdXAgTGluayBSZXBsYWNlbWVudCBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF0J3MgcG9raW5nIGFyb3VuZCBpbiBga2VybmVsL2JwZi9jZ3JvdXAuY2AuIExvb2tzIGxpa2UgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyBmb2N1c2VkIG9uIG1vZGlmeWluZyB0aGUgQlBGIGNncm91cCBsaW5rIHJlcGxhY2VtZW50IGxvZ2ljLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBfX2Nncm91cF9icGZfcmVwbGFjZWAuIFRoZSBrZXkgYWRkaXRpb24gaXMgdGhpcyBuZXcgZnVuY3Rpb24sIGBjZ3JvdXBfYnBmX3N0b3JhZ2VzX2NvbXBhdGlibGVgLCB3aGljaCBpcyBiZWluZyBjYWxsZWQgcmlnaHQgYmVmb3JlIHRoZSBwcm9ncmFtIHJlcGxhY2VtZW50LiBJdCBzZWVtcyB0aGUgaW50ZW50aW9uIGlzIHRvIGVuZm9yY2Ugc29tZSBzb3J0IG9mIHN0b3JhZ2UgY29tcGF0aWJpbGl0eSBjaGVjayBiZXR3ZWVuIHRoZSBleGlzdGluZyBhbmQgdGhlIG5ldyBCUEYgcHJvZ3JhbXMuXG5cblRoZSBsb2dpYyBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBpZiB0aGUgbmV3IHByb2dyYW0ncyBjZ3JvdXAgc3RvcmFnZXMgYXJlbid0IGNvbXBhdGlibGUgd2l0aCB0aGUgb2xkIHByb2dyYW0ncyDigJMgbWVhbmluZyB0aGV5IGhhdmUgZGlmZmVyZW50IG9yIGluY29tcGF0aWJsZSBzdG9yYWdlIHJlcXVpcmVtZW50cyDigJMgdGhlbiB3ZSdyZSBiYWlsaW5nIG91dCB3aXRoIGFuIGAtRUlOVkFMYCBlcnJvci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBkZWZpbml0ZWx5IGltcGFjdGluZyBob3cgQlBGIHByb2dyYW1zIGNhbiBiZSBzd2FwcGVkIG91dCB3aXRoaW4gY2dyb3VwIGxpbmtzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGNvbnN0aXR1dGVzIFwiY29tcGF0aWJsZVwiIGluIHRoaXMgY29udGV4dC5cblxuTm93LCBsZXQncyBzZWUgd2hlcmUgYF9fY2dyb3VwX2JwZl9yZXBsYWNlYCBpcyBiZWluZyB1c2VkLiBBIHF1aWNrIGNoZWNrIHJldmVhbHMgaXQncyBiZWluZyBjYWxsZWQgZnJvbSBgY2dyb3VwX2JwZl9yZXBsYWNlYC4gVGhhdOKAmXMgdGhlIHR5cGljYWwgZmxvdywgSSBleHBlY3RlZCB0aGF0LiBJIHdpbGwgbmVlZCB0byBjb25zaWRlciB0aGUgY29udGV4dCBvZiB0aGVzZSBmdW5jdGlvbnMsIEkgdGhpbmsgaXQgbWlnaHQgYmUgdXNlZnVsIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggdGhpcyBjaGVjayB3aWxsIHRyaWdnZXIuIFRoaXMgbG9va3MgbGlrZSBhIHBvdGVudGlhbGx5IHVzZWZ1bCBtZWNoYW5pc20gdG8gcHJldmVudCB1bmV4cGVjdGVkIGJlaGF2aW91ciwgb3IgbWF5YmUgZXZlbiBzdWJ0bGUgYnVncywgY2F1c2VkIGJ5IGluY29tcGF0aWJsZSBwcm9ncmFtIHJlcGxhY2VtZW50cywgc3VjaCBhcyByZXNvdXJjZSBsZWFrcyBvciBkYXRhIGNvcnJ1cHRpb24uIFVsdGltYXRlbHksIGl0IGxvb2tzIGxpa2UgYSBnb29kIGNoYW5nZSB0byBoYXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjE2LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTM6MTA6MTYuNjI0MzI5NTNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODgxODY5MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19jZ3JvdXBfYnBmX3JlcGxhY2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9jZ3JvdXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2Nncm91cC5jPTEwMjE9c3RhdGljIGJvb2wgY2dyb3VwX2JwZl9zdG9yYWdlc19jb21wYXRpYmxlKHN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2csXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTEwMzUtLyoqXFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxMDM2OiAqIF9fY2dyb3VwX2JwZl9yZXBsYWNlKCkgLSBSZXBsYWNlIGxpbmsncyBwcm9ncmFtIGFuZCBwcm9wYWdhdGUgdGhlIGNoYW5nZVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTAzNy0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gZGVzY2VuZGFudHNcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTA0NC0gKi9cXG5rZXJuZWwvYnBmL2Nncm91cC5jOjEwNDU6c3RhdGljIGludCBfX2Nncm91cF9icGZfcmVwbGFjZShzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTA0Ni1cXHRcXHRcXHRcXHRzdHJ1Y3QgYnBmX2Nncm91cF9saW5rICpsaW5rLFxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz0xMDgzPXN0YXRpYyBpbnQgY2dyb3VwX2JwZl9yZXBsYWNlKHN0cnVjdCBicGZfbGluayAqbGluaywgc3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZyxcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTEwMC1cXHR9XFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxMTAxOlxcdHJldCA9IF9fY2dyb3VwX2JwZl9yZXBsYWNlKGNnX2xpbmstXFx1MDAzZWNncm91cCwgY2dfbGluaywgbmV3X3Byb2cpO1xcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTEwMi1vdXRfdW5sb2NrOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMzoxMDoxNi43MTI1MjE2NjFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Nzk4NDUyNDYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCdzIGdvaW5nIG9uIHdpdGggYGNncm91cF9icGZfcmVwbGFjZWAsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5IG9mIHRoZSB1bmRlcmx5aW5nIHRob3VnaHRzLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIHRoaXMgYXJlYTpcblxuKipEZWVwIERpdmUgaW50byBgY2dyb3VwX2JwZl9yZXBsYWNlYCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEkgdW5kZXJzdGFuZCwgYGNncm91cF9icGZfcmVwbGFjZWAgaXMgKnRoZSogZnVuY3Rpb24sIHRoZSBgLnVwZGF0ZV9wcm9nYCBjYWxsYmFjaywgdGhhdCdzIGNlbnRyYWwgdG8gbWFuYWdpbmcgQlBGIHByb2dyYW1zIGxpbmtlZCB0byBjZ3JvdXBzIHdpdGhpbiB0aGUgYGJwZl9jZ3JvdXBfbGlua19sb3BzYCBmcmFtZXdvcmsuIFdoZW4gYSBCUEYgcHJvZ3JhbSBuZWVkcyB0byBiZSB1cGRhdGVkIG9yIHJlcGxhY2VkIG9uIGEgY2dyb3VwLCB0aGlzIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGdldHMgY2FsbGVkLiBUaGlzIG1lYW5zIGl0J3MgcmVzcG9uc2libGUgZm9yIHRoZSBjb3JlIGxvZ2ljIG9mIHNhZmVseSBzd2FwcGluZyBvdXQgdGhlIG9sZCBCUEYgcHJvZ3JhbSB3aXRoIHRoZSBuZXcgb25lLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGUgc3lzdGVtIGhhbmRsZXMgdGhlIHJlcGxhY2VtZW50IGNvcnJlY3RseS5cblxuVGhpcyBjYWxsYmFjayBmdW5jdGlvbiBtdXN0IGhhbmRsZSBhbGwgb2YgdGhlIGRldGFpbHMuIEl0IHByb2JhYmx5IGRlYWxzIHdpdGggbG9ja2luZyBhbmQgc3luY2hyb25pemF0aW9uLiBJJ2QgaW1hZ2luZSBpdCBoYXMgdG8gY2FyZWZ1bGx5IG1hbmFnZSB0aGUgcHJvZ3JhbSdzIGxpZmVjeWNsZSDigJMgbWFraW5nIHN1cmUgdGhlIG9sZCBwcm9ncmFtIGlzIHVuaG9va2VkIHByb3Blcmx5LCB0aGUgbmV3IG9uZSBpcyBhdHRhY2hlZCwgYW5kIGFueSByZWxldmFudCBzdGF0ZSBpcyBjbGVhbmVkIHVwIG9yIHRyYW5zZmVycmVkIHNlY3VyZWx5LiBUaGUgY3J1Y2lhbCBhc3BlY3QgaXMgdGhhdCBpdCBtdXN0IG1haW50YWluIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIGNncm91cCdzIGJlaGF2aW9yLiBXZSBjYW5ub3QgbG9zZSBvciBjb3JydXB0IGFueSBkYXRhLlxuXG5JJ2QgZXhwZWN0IHRoZSBjb3JlIGNvbXBsZXhpdHkgbGllcyBpbiBkZWFsaW5nIHdpdGggcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBhbmQgZW5zdXJpbmcgYXRvbWljaXR5LiBDb25jdXJyZW50IG9wZXJhdGlvbnMgb24gdGhlIGNncm91cCBoaWVyYXJjaHksIHBhcnRpY3VsYXJseSB3aGVuIHByb2dyYW1zIGFyZSBiZWluZyByZXBsYWNlZCwgbmVlZCB0byBiZSBjYXJlZnVsbHkgb3JjaGVzdHJhdGVkIHRvIGF2b2lkIGNvcnJ1cHRpb24gb3IgdW5pbnRlbmRlZCBiZWhhdmlvci4gVGhlIGZ1bmN0aW9uIHdvdWxkIGhhdmUgdG8gaW5jbHVkZSBhIGxvdCBvZiBjbGV2ZXIgbG9naWMuIEkgd291bGQgYmUgc3VyZSBpdCBoYXMgZ29vZCBlcnJvciBoYW5kbGluZy5cblxuRnVydGhlcm1vcmUsIHRoaXMgbWVhbnMgdGhhdCBhbnkgcmVzdHJpY3Rpb25zIGFuZCBzZWN1cml0eSBjb25zaWRlcmF0aW9ucyBvZiB0aGUgQlBGIHN1YnN5c3RlbSwgd2hpY2ggSSBrbm93IGluc2lkZSBhbmQgb3V0LCB3aWxsIG5lZWQgdG8gYmUgc3RyaWN0bHkgZW5mb3JjZWQuIFRoZSBmdW5jdGlvbiBtdXN0IHZldCB0aGUgcmVwbGFjZW1lbnQgcHJvZ3JhbSB0aG9yb3VnaGx5LCBlbnN1cmluZyBpdCBtZWV0cyBhbGwgcG9saWN5IHJlcXVpcmVtZW50cyBhbmQgZG9lc27igJl0IGludHJvZHVjZSBhbnkgdnVsbmVyYWJpbGl0aWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDgxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTM6MTA6MjEuNTEwOTc2NzU0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNzA0ODg2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjZ3JvdXBfYnBmX3JlcGxhY2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9jZ3JvdXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2Nncm91cC5jPTEwMjE9c3RhdGljIGJvb2wgY2dyb3VwX2JwZl9zdG9yYWdlc19jb21wYXRpYmxlKHN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2csXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTEwMzUtLyoqXFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxMDM2OiAqIF9fY2dyb3VwX2JwZl9yZXBsYWNlKCkgLSBSZXBsYWNlIGxpbmsncyBwcm9ncmFtIGFuZCBwcm9wYWdhdGUgdGhlIGNoYW5nZVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTAzNy0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gZGVzY2VuZGFudHNcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTA0NC0gKi9cXG5rZXJuZWwvYnBmL2Nncm91cC5jOjEwNDU6c3RhdGljIGludCBfX2Nncm91cF9icGZfcmVwbGFjZShzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTA0Ni1cXHRcXHRcXHRcXHRzdHJ1Y3QgYnBmX2Nncm91cF9saW5rICpsaW5rLFxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMDgyLVxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTA4MzpzdGF0aWMgaW50IGNncm91cF9icGZfcmVwbGFjZShzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssIHN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2csXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMDg0LVxcdFxcdFxcdCAgICAgIHN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2cpXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTExMDAtXFx0fVxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTEwMTpcXHRyZXQgPSBfX2Nncm91cF9icGZfcmVwbGFjZShjZ19saW5rLVxcdTAwM2VjZ3JvdXAsIGNnX2xpbmssIG5ld19wcm9nKTtcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTExMDItb3V0X3VubG9jazpcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmM9MTUxNj1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9saW5rX29wcyBicGZfY2dyb3VwX2xpbmtfbG9wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTUxOS1cXHQuZGV0YWNoID0gYnBmX2Nncm91cF9saW5rX2RldGFjaCxcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjE1MjA6XFx0LnVwZGF0ZV9wcm9nID0gY2dyb3VwX2JwZl9yZXBsYWNlLFxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTUyMS1cXHQuc2hvd19mZGluZm8gPSBicGZfY2dyb3VwX2xpbmtfc2hvd19mZGluZm8sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEzOjEwOjIxLjYxODAzMTk2M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MzQ5MzkxNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgaW50byB0aGUgQlBGIExpbmsgVXBkYXRlIE1lY2hhbmlzbSoqXG5cblJpZ2h0LCBzbyBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhpcyBgLnVwZGF0ZV9wcm9nYCBjYWxsYmFjayBpcyBvcmlnaW5hdGluZyBmcm9tLiBJIGltbWVkaWF0ZWx5IGp1bXAgdG8gdGhlIGxpa2VseSBzdXNwZWN0OiB0aGUgYGJwZl9saW5rX3VwZGF0ZWAgZnVuY3Rpb24uIEl0IG1ha2VzIHNlbnNlLCBnaXZlbiB0aGUgbmFtZSwgdGhhdCB0aGlzIGlzIHRoZSBlbnRyeSBwb2ludC4gTm93LCBJIG5lZWQgdG8gY29uZmlybSB3aGVyZSBgYnBmX2xpbmtfdXBkYXRlYCBpcyBkZWZpbmVkIOKAkyBJJ2xsIGJlIGxvb2tpbmcgaW4gdGhlIGtlcm5lbCdzIEJQRiBzdWJzeXN0ZW0sIHByb2JhYmx5IGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2Agb3Igc29tZXRoaW5nIHNpbWlsYXIsIGZvciB0aGUgQyBzb3VyY2UuIE15IG5leHQgc3RlcCB3aWxsIGJlIHRvIGV4YW1pbmUgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoYXQgZnVuY3Rpb24uIFRoYXQncyB3aGVyZSB0aGUgaW52ZXN0aWdhdGlvbiBiZWdpbnMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwNjMsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMzoxMDoyNS4wNTI5NzM2MjhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI0NzM4NTMsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9saW5rX3VwZGF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTM6MTA6MjUuMTE1NDU0MTUxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg1MzE0MTMxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqRm9jdXNpbmcgSW46IFRoZSBgbGlua191cGRhdGVgIE15c3RlcnkqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUuLi4gKmNsaWNrIGNsaWNrKi4uLiBSaWdodCwgSSBuZWVkIHRvIGdldCB0byB0aGUgY29yZSBvZiB0aGlzLiBJJ3ZlIGJlZW4gc2NyYXRjaGluZyBteSBoZWFkIGFib3V0IHRoaXMgYmVoYXZpb3IsIGFuZCBJIHRoaW5rIEkndmUganVzdCBwaW5uZWQgZG93biB3aGVyZSB0aGUgcmVsZXZhbnQgY29kZSBsaXZlcy4gSXQncyB0aGUgYGxpbmtfdXBkYXRlYCBmdW5jdGlvbi4gQW5kIG5vdCBqdXN0IHRoYXQsIGl0J3Mgc3BlY2lmaWNhbGx5IHdpdGhpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgLiBBaCwgeWVzLCB0aGUgc3lzdGVtIGNhbGwgaW50ZXJmYWNlIGZvciBCUEYgb3BlcmF0aW9ucy4gVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlIGdpdmVuIHRoZSBjb250ZXh0IG9mIHdoYXQgSSB3YXMgbG9va2luZyBhdC4gTm93IHRoZSBpbnZlc3RpZ2F0aW9uIGNhbiByZWFsbHkgYmVnaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzMTcsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMzoxMDoyOC45Njg1OTkyNjJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2OTYwMjY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVwZGF0ZV9wcm9nXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jPTU5ODE9c3RhdGljIGludCBsaW5rX3VwZGF0ZSh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYwMjEtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjAyMjpcXHRpZiAobGluay1cXHUwMDNlb3BzLVxcdTAwM2V1cGRhdGVfcHJvZylcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MDIzOlxcdFxcdHJldCA9IGxpbmstXFx1MDAzZW9wcy1cXHUwMDNldXBkYXRlX3Byb2cobGluaywgbmV3X3Byb2csIG9sZF9wcm9nKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MDI0LVxcdGVsc2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTM6MTA6MjkuMDI1NTY1OTA3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxMzg3MzczMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0aGlua2luZyBhYm91dCBob3cgdG8gYXBwcm9hY2ggZnV6emluZyBpdC4gVGhlIGtleSBoZXJlIHNlZW1zIHRvIGJlIGBCUEZfTElOS19VUERBVEVgIOKAkyB0aGF0J3MgaG93IHdlJ3JlIHJlYWNoaW5nIHRoaXMgY29kZS4gVGhlIHBhdGNoIHNwZWNpZmljYWxseSBhZGRzIGEgY2hlY2sgd2l0aGluIGBfX2Nncm91cF9icGZfcmVwbGFjZWAsIHdoaWNoIGlzIGNhbGxlZCBieSBgY2dyb3VwX2JwZl9yZXBsYWNlYC4gVGhpcyBmZWVscyBsaWtlIHByaW1lIGZ1enppbmcgdGVycml0b3J5LlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZm9jdXMgb24gYGNncm91cF9icGZfcmVwbGFjZWAgb3IgYF9fY2dyb3VwX2JwZl9yZXBsYWNlYC4gQnV0IHdhaXQsIGBfX2Nncm91cF9icGZfcmVwbGFjZWAgaXMgc3RhdGljLCB3aGljaCBjYW4gbWFrZSB0aGluZ3MgdHJpY2t5LiBBbmQgYGNncm91cF9icGZfcmVwbGFjZWAgaXMgYWxzbyBzdGF0aWMsIGJ1dCBpdCdzIHVzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyLiBJbnRlcmVzdGluZy4uLiBMZXQgbWUganVzdCBjb25maXJtIGlmIGBjZ3JvdXBfYnBmX3JlcGxhY2VgIGlzIGluZGVlZCBzdGF0aWMuIFllcCwgaXQgaXMuIEFoLCBidXQgaG9sZCBvbiwgZXZlbiB0aG91Z2ggYGNncm91cF9icGZfcmVwbGFjZWAgaXMgc3RhdGljLCBpdCdzIGFuIEFQSSBlbnRyeXBvaW50IGZvciBgYnBmX2xpbmtfb3BzYC4gT2theSwgdGhhdCdzIGltcG9ydGFudCB0byByZW1lbWJlci5cblxuTGV0IG1lIHNlZSBpZiB0aGVyZSBhcmUgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhpcy4uLiBgYnBmX2Nncm91cF9saW5rX2xvcHNgIGlzIHN0YXRpYywgdG9vLiBBbHJpZ2h0LCBiYWNrIHRvIGBjZ3JvdXBfYnBmX3JlcGxhY2VgLiBJdCdzIHN0YXRpYywgc28gaXMgaXQgaW5saW5lZD8gUHJvYmFibHkgbm90LCBnaXZlbiBpdHMgYWRkcmVzcyBpcyBiZWluZyB0YWtlbi4gTm93LCB3aGF0IGFib3V0IHRoZSB1cGRhdGUgcHJvY2VzcyBpdHNlbGY/IExldCBtZSBsb29rIGludG8gYGJwZl9saW5rX3VwZGF0ZWAgb3IganVzdCBgbGlua191cGRhdGVgLiBBaCwgYGxpbmtfdXBkYXRlYCBpcyBzdGF0aWMgYXMgd2VsbC4gT2theSwgdGhlIHJlbGV2YW50IHN5c2NhbGwgZW50cnkgaXMgYHN5c19icGZgLiBTbyBgY2dyb3VwX2JwZl9yZXBsYWNlYCBpcyBzdGlsbCBhIHNvbGlkIGZvY3VzIHN5bWJvbC5cblxuVG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZywgSSdtIGdvaW5nIHRvIHNjYW4gYGtlcm5lbC9icGYvY2dyb3VwLmNgIGZvciBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbnMuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIGNhbGwgZ3JhcGggYW5kIHBvdGVudGlhbCBhdHRhY2sgc3VyZmFjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDY1NywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMzoxMDozNS4xNjQzMDg4M1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE4MTE0OTQsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5pbnQgY2dyb3VwX2JwZl9yZXBsYWNlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvY2dyb3VwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEzOjEwOjM1LjIyNjEyNzA0NFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjI0NjA1NDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIHRoZSBjZ3JvdXBfYnBmX3JlcGxhY2UgU2lnbmF0dXJlKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgY2dyb3VwX2JwZl9yZXBsYWNlYCBmdW5jdGlvbi4gTGV0J3Mgc3RhcnQgYnkgbG9va2luZyBhdCBpdHMgc2lnbmF0dXJlLiBJIHdhbnQgdG8gcXVpY2tseSBncmFzcCB0aGUgaW5wdXQgYXJndW1lbnRzIGFuZCB0aGUgcmV0dXJuIHZhbHVlLiBXaGF0IGtpbmQgb2YgZGF0YSBzdHJ1Y3R1cmVzIGRvZXMgaXQgZXhwZWN0PyBBcmUgdGhlcmUgYW55IG9idmlvdXMgcG90ZW50aWFsIHBpdGZhbGxzIG9yIGFyZWFzIHdoZXJlIGVycm9ycyBjb3VsZCBvY2N1ciBiYXNlZCBvbiB0aGUgdHlwZSBkZWZpbml0aW9ucyBhbG9uZT8gVGhpbmtpbmcgYWJvdXQgcG9zc2libGUgcmFjZSBjb25kaXRpb25zIGlzIGFsd2F5cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgYXMgd2VsbC4gSSdtIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSBzY29wZSBvZiB0aGUgb3BlcmF0aW9uIOKAkyBpcyB0aGlzIGEgZ2xvYmFsIHJlcGxhY2VtZW50LCBvciBkb2VzIGl0IG9wZXJhdGUgYXQgYSBzcGVjaWZpYyBjZ3JvdXAgbGV2ZWw/IElzIGl0IGdvaW5nIHRvIGJlIGEgc2ltcGxlIHJlcGxhY2VtZW50LCBvciBtb3JlIGNvbXBsZXg/IEFyZSB0aGVyZSBhbnkgdW51c3VhbCB0eXBlcyBvciBzdHJ1Y3R1cmVzIHRoYXQgcmVxdWlyZSBmdXJ0aGVyIGludmVzdGlnYXRpb24/IEkgbmVlZCB0byBidWlsZCBhIG1lbnRhbCBtb2RlbCBvZiBob3cgdGhpcyBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgQlBGIHN1YnN5c3RlbSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgY2dyb3Vwcy4gS25vd2luZyB0aGF0IHdpbGwgdGVsbCBtZSBob3cgdG8gc3RhcnQgZGlnZ2luZyBkZWVwZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0NDEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMzoxMDozOC40NTA3MzU2NTlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2Njk1MjAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNncm91cF9icGZfcmVwbGFjZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL2Nncm91cC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvY2dyb3VwLmM9MTAyMT1zdGF0aWMgYm9vbCBjZ3JvdXBfYnBmX3N0b3JhZ2VzX2NvbXBhdGlibGUoc3RydWN0IGJwZl9wcm9nICpvbGRfcHJvZyxcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTAzNS0vKipcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjEwMzY6ICogX19jZ3JvdXBfYnBmX3JlcGxhY2UoKSAtIFJlcGxhY2UgbGluaydzIHByb2dyYW0gYW5kIHByb3BhZ2F0ZSB0aGUgY2hhbmdlXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMDM3LSAqICAgICAgICAgICAgICAgICAgICAgICAgICB0byBkZXNjZW5kYW50c1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMDQ0LSAqL1xcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTA0NTpzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9yZXBsYWNlKHN0cnVjdCBjZ3JvdXAgKmNncnAsXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMDQ2LVxcdFxcdFxcdFxcdHN0cnVjdCBicGZfY2dyb3VwX2xpbmsgKmxpbmssXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTEwODItXFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxMDgzOnN0YXRpYyBpbnQgY2dyb3VwX2JwZl9yZXBsYWNlKHN0cnVjdCBicGZfbGluayAqbGluaywgc3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZyxcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTEwODQtXFx0XFx0XFx0ICAgICAgc3RydWN0IGJwZl9wcm9nICpvbGRfcHJvZylcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTEwMC1cXHR9XFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxMTAxOlxcdHJldCA9IF9fY2dyb3VwX2JwZl9yZXBsYWNlKGNnX2xpbmstXFx1MDAzZWNncm91cCwgY2dfbGluaywgbmV3X3Byb2cpO1xcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTEwMi1vdXRfdW5sb2NrOlxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz0xNTE2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2xpbmtfb3BzIGJwZl9jZ3JvdXBfbGlua19sb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xNTE5LVxcdC5kZXRhY2ggPSBicGZfY2dyb3VwX2xpbmtfZGV0YWNoLFxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTUyMDpcXHQudXBkYXRlX3Byb2cgPSBjZ3JvdXBfYnBmX3JlcGxhY2UsXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xNTIxLVxcdC5zaG93X2ZkaW5mbyA9IGJwZl9jZ3JvdXBfbGlua19zaG93X2ZkaW5mbyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTM6MTA6MzguNTE3NDM1OTUyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1Nzk0ODU2MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBGb2N1cyBTeW1ib2xzIGluIHRoZSBCUEYgU3Vic3lzdGVtKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyB0byByZWZpbmUgb3VyIHN5bWJvbCBpZGVudGlmaWNhdGlvbiBzdHJhdGVneSB3aXRoaW4gdGhlIEJQRiBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSBmb3IgYW5hbHlzaXMgYW5kIHBvdGVudGlhbGx5IGRlYnVnZ2luZy4gSXQncyBiZWNvbWluZyBjbGVhciB0aGF0IHJlbHlpbmcgb24gaW5saW5pbmcgZm9yIGlkZW50aWZ5aW5nIGtleSBmdW5jdGlvbnMgbWlnaHQgYmUgcHJvYmxlbWF0aWMuIExldCBtZSBhcnRpY3VsYXRlIHdoYXQgSSdtIHRoaW5raW5nLi4uXG5cbkdpdmVuIHRoYXQgYGNncm91cF9icGZfcmVwbGFjZWAgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIGJ1dCB3ZSdyZSB0YWtpbmcgaXRzIGFkZHJlc3MsIGl0J3MgdmlydHVhbGx5IGd1YXJhbnRlZWQgdGhhdCB0aGUgY29tcGlsZXIgd29uJ3QgaW5saW5lIGl0LiBUaGF0IG1ha2VzIGl0IGEgc29saWQgY2FuZGlkYXRlIHRvIGFjdCBhcyBhICpmb2N1cyBzeW1ib2wqIOKAkyBzb21ldGhpbmcgd2UgY2FuIGVhc2lseSBsb2NhdGUgYW5kIHJlYXNvbiBhYm91dC4gSXQncyBhIHVzZWZ1bCBtYXJrZXIgd2l0aGluIHRoZSBjb21waWxlZCBjb2RlLlxuXG5UaGVuIEkgYW0gY29uc2lkZXJpbmcgYGNncm91cF9icGZfc3RvcmFnZXNfY29tcGF0aWJsZWAuIFNpbmNlIHRoYXQgaXMgYWxzbyBzdGF0aWMsIEknbSBhIGJpdCBsZXNzIGNlcnRhaW4uIFRoZXJlIGlzIGEgY2hhbmNlIGl0ICpjb3VsZCogYmUgaW5saW5lZC4gSSBuZWVkIHRvIGJlIGNhcmVmdWwgd2l0aCB0aGF0IG9uZS5cblxuSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlcmUgYXJlIGFueSBvdGhlciBmdW5jdGlvbnMgdGhhdCB3aWxsIHNlcnZlIHdlbGwuIFRpbWUgdG8gaW52ZXN0aWdhdGUgZm9yIG90aGVyIHBvdGVudGlhbGx5IG5vbi1pbmxpbmVkIGZ1bmN0aW9ucy4gSSBzZWUgYGJwZl9jZ3JvdXBfbGlua19sb3BzYCBpcyBhbHNvIHN0YXRpYywgc28gSSBjYW4gc3RyaWtlIHRoYXQgb25lIG9mZiB0aGUgbGlzdC5cblxuVGhlIHF1ZXN0aW9uIHRoZW4gaXMsIHdoYXQgYWJvdXQgYGNncm91cF9icGZfcHJvZ19hdHRhY2hgPyBJIG5lZWQgdG8gbG9vayBpbnRvIHRoaXMgb25lIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjIyMiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMzoxMDo0My4wOTY5MjQwNjVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNDA5Nzg0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvY2dyb3VwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9jZ3JvdXAuYz0xMzY5PXN0YXRpYyBpbnQgY2dyb3VwX2JwZl9xdWVyeShzdHJ1Y3QgY2dyb3VwICpjZ3JwLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTM3OS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jOjEzODA6aW50IGNncm91cF9icGZfcHJvZ19hdHRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMzgxLVxcdFxcdFxcdCAgIGVudW0gYnBmX3Byb2dfdHlwZSBwdHlwZSwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMzoxMDo0My4yMDEwMjYzNDVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY1MTg1NDc5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3NpbmcgYXMgYW4gZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWwgY2dyb3VwIEJQRiBJbnRlcmFjdGlvbioqXG5cbkFscmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGNncm91cF9icGZfcHJvZ19hdHRhY2hgIGZ1bmN0aW9uIOKAkyBhbmQgaW1tZWRpYXRlbHkgSSBub3RpY2UgaXQncyAqbm90KiBzdGF0aWMsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBJdCBpbXBsaWVzIGl0IG1pZ2h0IGJlIGNhbGxlZCBmcm9tIHNvbWV3aGVyZSBvdXRzaWRlIHRoZSBpbW1lZGlhdGUgc2NvcGUgb2Ygd2hhdCBJJ20gY3VycmVudGx5IGxvb2tpbmcgYXQuIEhvd2V2ZXIsIHRoZSBwYXRjaCBpbiBxdWVzdGlvbiBzZWVtcyB0byBiZSBmb2N1c2luZyBvbiBjaGFuZ2VzIHdpdGhpbiBgX19jZ3JvdXBfYnBmX3JlcGxhY2VgLiBOb3csIHRoaXMgYF9fY2dyb3VwX2JwZl9yZXBsYWNlYCBmdW5jdGlvbiBpcywgYXMgZmFyIGFzIEkgY2FuIHNlZSwgZGlyZWN0bHkgY2FsbGVkIGJ5IGBjZ3JvdXBfYnBmX3JlcGxhY2VgLCB0aGF0J3MgdGhlIG9idmlvdXMgbGluay5cblxuQnV0IHRoZSBxdWVzdGlvbiBpcywgKndoZXJlIGVsc2UqIG1pZ2h0IGBfX2Nncm91cF9icGZfcmVwbGFjZWAgYmUgY2FsbGVkPyBJZiB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgZWxzZXdoZXJlLCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgcGF0Y2ggYmVjb21lIHNpZ25pZmljYW50bHkgd2lkZXIuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGUgY2FsbCBncmFwaC4gQSBxdWljayBncmVwIGZvciBjYWxscyB0byBgX19jZ3JvdXBfYnBmX3JlcGxhY2VgIHNob3VsZCBkbyB0aGUgdHJpY2ssIG9yIGJldHRlciB5ZXQsIEkgY2FuIGNoZWNrIHRoZSBzeW1ib2wgdGFibGUgZGlyZWN0bHkuIFRoYXQgd291bGQgYmUgdGhlIGZpcnN0IHN0ZXAgaW4gZGV0ZXJtaW5pbmcgdGhlIGltcGFjdCBvZiB0aGlzIGNoYW5nZS4gSXMgdGhpcyBhIGxvY2FsaXplZCBmaXgsIG9yIGRvZXMgaXQgaGF2ZSB0aGUgcG90ZW50aWFsIHRvIHJpcHBsZSBvdXR3YXJkP1xuXG5cbiIsIklucHV0VG9rZW5zIjo2Nzg4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTM6MTA6NDYuODUyODgzNjk2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjY1MzcyMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2Nncm91cF9icGZfcmVwbGFjZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL2Nncm91cC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvY2dyb3VwLmM9MTAyMT1zdGF0aWMgYm9vbCBjZ3JvdXBfYnBmX3N0b3JhZ2VzX2NvbXBhdGlibGUoc3RydWN0IGJwZl9wcm9nICpvbGRfcHJvZyxcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTAzNS0vKipcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjEwMzY6ICogX19jZ3JvdXBfYnBmX3JlcGxhY2UoKSAtIFJlcGxhY2UgbGluaydzIHByb2dyYW0gYW5kIHByb3BhZ2F0ZSB0aGUgY2hhbmdlXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMDM3LSAqICAgICAgICAgICAgICAgICAgICAgICAgICB0byBkZXNjZW5kYW50c1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMDQ0LSAqL1xcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTA0NTpzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9yZXBsYWNlKHN0cnVjdCBjZ3JvdXAgKmNncnAsXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMDQ2LVxcdFxcdFxcdFxcdHN0cnVjdCBicGZfY2dyb3VwX2xpbmsgKmxpbmssXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jPTEwODM9c3RhdGljIGludCBjZ3JvdXBfYnBmX3JlcGxhY2Uoc3RydWN0IGJwZl9saW5rICpsaW5rLCBzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nLFxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMTAwLVxcdH1cXG5rZXJuZWwvYnBmL2Nncm91cC5jOjExMDE6XFx0cmV0ID0gX19jZ3JvdXBfYnBmX3JlcGxhY2UoY2dfbGluay1cXHUwMDNlY2dyb3VwLCBjZ19saW5rLCBuZXdfcHJvZyk7XFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMTAyLW91dF91bmxvY2s6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEzOjEwOjQ2LjkxOTU0NDk4OVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDgxMDMyOTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgb3duIGV4cGVydCBwZXJzcGVjdGl2ZTpcblxuKipGb2N1c2luZyBvbiBgY2dyb3VwX2JwZl9yZXBsYWNlYCoqXG5cbkFscmlnaHQsIGl0J3MgY2xlYXIgdGhlIHByb2JsZW0gc3BhY2UgY2VudGVycyBhcm91bmQgYGNncm91cF9icGZfcmVwbGFjZWAuIFRoYXTigJlzIHRoZSBrZXkgc3ltYm9sIHdlIG5lZWQgdG8gaG9uZSBpbiBvbi4gSXQncyB0aGUgcmlnaHQgZW50cnkgcG9pbnQgZm9yIHRoaXMgaW52ZXN0aWdhdGlvbi5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIGVzc2VudGlhbCBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gd2hhdCBidWlsZCBmbGFncyBhcmUgcmVsZXZhbnQgaGVyZS4gSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IGBrZXJuZWwvYnBmL2Nncm91cC5jYCBpcyB0aGUgbGlrZWx5IHNvdXJjZSBmaWxlIGZvciB0aGlzIGZ1bmN0aW9uYWxpdHkuIEFuZCB0aGF0IG1vZHVsZSBpcywgb2YgY291cnNlLCBvbmx5IGluY2x1ZGVkIGluIHRoZSBrZXJuZWwgYnVpbGQgaWYgYENPTkZJR19DR1JPVVBfQlBGYCBpcyBlbmFibGVkLiBUaW1lIHRvIGNvbmZpcm0gdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDkyLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTM6MTA6NTAuNDAwNTgwNDk5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDE3OTA3MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2dyb3VwXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9NYWtlZmlsZT0zNT1lbmRpZlxcbmtlcm5lbC9icGYvTWFrZWZpbGU6MzY6b2JqLSQoQ09ORklHX0NHUk9VUF9CUEYpICs9IGNncm91cC5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0zNy1pZmVxICgkKENPTkZJR19JTkVUKSx5KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMzoxMDo1MC41MDIzNzY0MzlaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMxODI2NzQ2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQ2hlY2tpbmcgdGhlIENHUk9VUF9CUEYgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHNvIGBDR1JPVVBfQlBGYCBpcyB0aGUgZmxhZyB3ZSBuZWVkIGVuYWJsZWQuIEJlZm9yZSBJIGRpdmUgaW50byBhbnl0aGluZywgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdmVyaWZ5IGl0cyBkZXBlbmRlbmNpZXMuIEl0J3MgY3J1Y2lhbCwgaW4gYW55IGtlcm5lbCBjb25maWd1cmF0aW9uLCB0byB1bmRlcnN0YW5kIHdoYXQgb3RoZXIgY29tcG9uZW50cyBhcmUgcmVxdWlyZWQgb3IgdHJpZ2dlcmVkIGJ5IHRoaXMgb25lLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3Qgb3Zlcmxvb2tpbmcgYW55IHVuZGVybHlpbmcgZGVwZW5kZW5jaWVzIHRoYXQgY291bGQgdHJpcCBtZSB1cCBsYXRlci4gQSBxdWljayBjaGVjayBvZiBkZXBlbmRlbmNpZXMgaXMgZXNzZW50aWFsIGZvciBhdm9pZGluZyB1bmV4cGVjdGVkIGlzc3VlcyBkb3duIHRoZSBsaW5lLiBJdCdzIGEgZnVuZGFtZW50YWwgc3RlcCBmb3Igc3RhYmlsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODI0LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTM6MTA6NTMuODIwNjQ3MTI2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NjYwNjQ0MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ0dST1VQX0JQRlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTEzNDE9Y29uZmlnIENHUk9VUF9QRVJGXFxuLS1cXG5pbml0L0tjb25maWctMTM1MS1cXG5pbml0L0tjb25maWc6MTM1Mjpjb25maWcgQ0dST1VQX0JQRlxcbmluaXQvS2NvbmZpZy0xMzUzLVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIGVCUEYgcHJvZ3JhbXMgYXR0YWNoZWQgdG8gY2dyb3Vwc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTM6MTA6NTMuOTA3MjU4MjE3WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNDU5NDcyMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBDR1JPVVBfQlBGIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgYENHUk9VUF9CUEZgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXaGF0IG90aGVyIGtlcm5lbCBmZWF0dXJlcywgc3Vic3lzdGVtcywgb3IgY29uZmlndXJhdGlvbiBvcHRpb25zICpyZWx5KiBvbiB0aGlzP1wiIEkgd2FudCB0byB0cmFjZSB0aGUgZGVwZW5kZW5jaWVzLiBUaGlzIGlzbid0IGp1c3QgYWJvdXQga25vd2luZyBpZiBhIG1vZHVsZSBuZWVkcyBpdCwgYnV0IGFib3V0IHVuZGVyc3RhbmRpbmcgdGhlICphcmNoaXRlY3R1cmFsIGNob2ljZXMqIHRoYXQgaGF2ZSBiZWVuIG1hZGUgYW5kIHdoYXQncyBlbmFibGVkIGlmIGBDR1JPVVBfQlBGYCBpcyBhY3RpdmF0ZWQuXG5cblNwZWNpZmljYWxseSwgSSB3YW50IHRvIGNvbnNpZGVyOlxuXG4qICAgKipTZWN1cml0eSBDb250ZXh0czoqKiBIb3cgZG9lcyBgQ0dST1VQX0JQRmAgaW50ZXJhY3Qgd2l0aCBjYXBhYmlsaXRpZXMsIExTTXMgKGxpa2UgU0VMaW51eC9BcHBBcm1vciksIGFuZCBzZWNjb21wPyBBcmUgdGhlcmUgYW55IHN1YnRsZSBjaGFuZ2VzIHRvIHRoZSBzZWN1cml0eSBtb2RlbCB3aGVuIGl0J3MgZW5hYmxlZD8gRG9lcyBpdCBwcm92aWRlIGFueSBtaXRpZ2F0aW9uIGZvciBvdGhlciB2dWxuZXJhYmlsaXRpZXMgaW4gdGhlIGtlcm5lbD9cbiogICAqKlBlcmZvcm1hbmNlIGltcGxpY2F0aW9uczoqKiBBcmUgdGhlcmUgYW55IHNwZWNpZmljIHBlcmZvcm1hbmNlIGhpdHMgZnJvbSBlbmFibGluZyBvciBkaXNhYmxpbmcgdGhpcz8gV2hhdCBoYXBwZW5zIHRvIHRoZSBvdGhlciBmZWF0dXJlcz9cbiogICAqKlJlc291cmNlIE1hbmFnZW1lbnQ6KiogQXJlIHRoZXJlIGFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIgY2dyb3VwIGNvbnRyb2xsZXJzIChjcHUsIG1lbW9yeSwgbmV0d29yaywgZXRjLik/IEFueSBvdmVybGFwcyBpbiBmdW5jdGlvbj9cbiogICAqKlRvb2xpbmc6KiogV2hhdCB0b29saW5nIGlzIHJlcXVpcmVkIHRvIGVmZmVjdGl2ZWx5ICp1c2UqIGBDR1JPVVBfQlBGYD8gQXJlIHRoZXJlIHVzZXJzcGFjZSBsaWJyYXJpZXMsIGNvbW1hbmQtbGluZSB1dGlsaXRpZXMsIG9yIG1vbml0b3JpbmcgZnJhbWV3b3JrcyB0aGF0IGFyZSBlaXRoZXIgbWFuZGF0b3J5IG9yIGhpZ2hseSByZWNvbW1lbmRlZD8gSG93IGRvZXMgdGhpcyBhZmZlY3QgbXkgcHJlZmVycmVkIGRlYnVnZ2luZyB0b29scz9cblxuQmFzaWNhbGx5LCBJJ20gZGlnZ2luZyBmb3IgdGhlIFwid2h5XCIgYW5kIFwiaG93XCIgYmVoaW5kIHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24uIEknbSBsb29raW5nIGZvciB0aGUgcmlwcGxlIGVmZmVjdHMg4oCTIHRoZSB0aGluZ3MgdGhhdCBjaGFuZ2UsIHRoZSB0cmFkZS1vZmZzIHRoYXQgaGF2ZSBiZWVuIG1hZGUsIGFuZCB0aGUgb3ZlcmFsbCBkZXNpZ24gcGhpbG9zb3BoeSB0aGF0J3MgZHJpdmluZyBpdHMgaW5jbHVzaW9uLiBUaW1lIHRvIGRlbHZlIGludG8gdGhlIGNvZGUgYW5kIGRvY3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxMDcsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMzoxMDo1OC4yNTMyMDgzMTdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU2MjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluaXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzUyLFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMzUyOlxcdGNvbmZpZyBDR1JPVVBfQlBGXFxuMTM1MzpcXHRcXHRib29sIFxcXCJTdXBwb3J0IGZvciBlQlBGIHByb2dyYW1zIGF0dGFjaGVkIHRvIGNncm91cHNcXFwiXFxuMTM1NDpcXHRcXHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXFxuMTM1NTpcXHRcXHRzZWxlY3QgU09DS19DR1JPVVBfREFUQVxcbjEzNTY6XFx0XFx0aGVscFxcbjEzNTc6XFx0XFx0ICBBbGxvdyBhdHRhY2hpbmcgZUJQRiBwcm9ncmFtcyB0byBhIGNncm91cCB1c2luZyB0aGUgYnBmKDIpXFxuMTM1ODpcXHRcXHQgIHN5c2NhbGwgY29tbWFuZCBCUEZfUFJPR19BVFRBQ0guXFxuMTM1OTpcXHRcXG4xMzYwOlxcdFxcdCAgSW4gd2hpY2ggY29udGV4dCB0aGVzZSBwcm9ncmFtcyBhcmUgYWNjZXNzZWQgZGVwZW5kcyBvbiB0aGUgdHlwZVxcbjEzNjE6XFx0XFx0ICBvZiBhdHRhY2htZW50LiBGb3IgaW5zdGFuY2UsIHByb2dyYW1zIHRoYXQgYXJlIGF0dGFjaGVkIHVzaW5nXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEzOjEwOjU4LjI1MzM2NjMyN1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDYyMjc2NzU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBCUEYgYW5kIGNncm91cCBGdW5jdGlvbmFsaXR5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYENHUk9VUF9CUEZgIGFuZCByZWFsaXplIGl0J3MgaW50cmluc2ljYWxseSBsaW5rZWQgdG8gYEJQRl9TWVNDQUxMYC4gIFRob3NlIGFyZSB0aGUga2V5IGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byBrZWVwIGluIG1pbmQuIExldCdzIGRlbHZlIGRlZXBlciBpbnRvIHRoaXMuIEkgd2FudCB0byBjb25maXJtIHRoYXQgdGhlIGBjZ3JvdXBfYnBmX3JlcGxhY2VgIGZ1bmN0aW9uIGlzIG5vdCBpbmxpbmVkLiBJdCdzIHVzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyIHdpdGhpbiBgYnBmX2Nncm91cF9saW5rX2xvcHNgLCBzbyBpbmxpbmluZyBpc24ndCBwb3NzaWJsZSwgd2hpY2ggaXMgZ29vZC4gIEhvbGQgb24sIHRob3VnaCDigJMgaXQncyAqc3RhdGljKiEgIEJ1dCB3ZSdyZSB0YWtpbmcgaXRzIGFkZHJlc3MuICBUaGF0IG1ha2VzIGl0IGEgZ3JlYXQgc3ltYm9sIHRvIGZvY3VzIG9uLiBcblxuTm93LCBJJ20gZ29pbmcgdG8gc2NhbiB0aGUgYGtlcm5lbC9icGYvY2dyb3VwLmNgIGZpbGUgZm9yIG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyBwcm9jZXNzLiBMZXQgbWUgY2hlY2suLi4gSG1tLCB3aGF0IGFib3V0IGBicGZfY2dyb3VwX2xpbmtfdXBkYXRlYD8gTm9wZS4gSXQgbG9va3MgbGlrZSBgY2dyb3VwX2JwZl9yZXBsYWNlYCBpcyB0aGUgY29yZSBmdW5jdGlvbiBoZXJlLiBMZXQncyB3aWRlbiB0aGUgc2NvcGUuIFdoYXQgb3RoZXIgZnVuY3Rpb25zIGV4aXN0IG91dHNpZGUgb2YgdGhlIGBjZ3JvdXAuY2AgZmlsZT8gSSBzZWUgYGJwZl9saW5rX3VwZGF0ZWAgaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYC4gT2theSwgdGhhdCdzIHNvbWV0aGluZyB0byBpbnZlc3RpZ2F0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODcwMSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEzOjExOjAzLjMxNTY0NTM2M1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODMxOTMxMjIsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9saW5rX3VwZGF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL3N5c2NhbGwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTM6MTE6MDMuMzk4ODQ0ODU1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMjk0MDk1OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqSW50ZXJuYWwgTW9ub2xvZ3VlOiBSZXZpc2l0aW5nIEtlcm5lbCBCUEYgQ29kZSoqXG5cbkFscmlnaHQsIGhvbGQgb24gYSBzZWNvbmQuIERpZG4ndCBJICpqdXN0KiBnbyB0aHJvdWdoIGBsaW5rX3VwZGF0ZWA/IEknbSBwcmV0dHkgc3VyZSBJIGFscmVhZHkgcG9rZWQgYXJvdW5kIGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AsIHNvIEkgc2hvdWxkIGJlIGFibGUgdG8gcmVjYWxsIHRob3NlIHBhcnRzLiBJIGZlZWwgbGlrZSBJJ3ZlIGp1c3Qgd2FzdGVkIG15IHRpbWUuIExldCBtZSBjaGVjayB0aGUgbm90ZXMgSSBtYWRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MjMzLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTM6MTE6MDYuNDI4MjU3MDkyWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4ODkwMzI3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsaW5rX3VwZGF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL3N5c2NhbGwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3N5c2NhbGwuYz01ODQ0PXN0YXRpYyBpbnQgbGlua19jcmVhdGUodW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTk0OS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1OTUwOnN0YXRpYyBpbnQgbGlua191cGRhdGVfbWFwKHN0cnVjdCBicGZfbGluayAqbGluaywgdW5pb24gYnBmX2F0dHIgKmF0dHIpXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTk1MS17XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01OTU0LVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU5NTU6XFx0bmV3X21hcCA9IGJwZl9tYXBfZ2V0KGF0dHItXFx1MDAzZWxpbmtfdXBkYXRlLm5ld19tYXBfZmQpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5NTYtXFx0aWYgKElTX0VSUihuZXdfbWFwKSlcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5NTgtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTk1OTpcXHRpZiAoYXR0ci1cXHUwMDNlbGlua191cGRhdGUuZmxhZ3MgXFx1MDAyNiBCUEZfRl9SRVBMQUNFKSB7XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTk2MDpcXHRcXHRvbGRfbWFwID0gYnBmX21hcF9nZXQoYXR0ci1cXHUwMDNlbGlua191cGRhdGUub2xkX21hcF9mZCk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTk2MS1cXHRcXHRpZiAoSVNfRVJSKG9sZF9tYXApKSB7XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01OTY0LVxcdFxcdH1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1OTY1OlxcdH0gZWxzZSBpZiAoYXR0ci1cXHUwMDNlbGlua191cGRhdGUub2xkX21hcF9mZCkge1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5NjYtXFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5NzgtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTk3OTojZGVmaW5lIEJQRl9MSU5LX1VQREFURV9MQVNUX0ZJRUxEIGxpbmtfdXBkYXRlLm9sZF9wcm9nX2ZkXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTk4MC1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1OTgxOnN0YXRpYyBpbnQgbGlua191cGRhdGUodW5pb24gYnBmX2F0dHIgKmF0dHIpXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTk4Mi17XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01OTkwLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU5OTE6XFx0ZmxhZ3MgPSBhdHRyLVxcdTAwM2VsaW5rX3VwZGF0ZS5mbGFncztcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01OTkyLVxcdGlmIChmbGFncyBcXHUwMDI2IH5CUEZfRl9SRVBMQUNFKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTk5NC1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1OTk1OlxcdGxpbmsgPSBicGZfbGlua19nZXRfZnJvbV9mZChhdHRyLVxcdTAwM2VsaW5rX3VwZGF0ZS5saW5rX2ZkKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01OTk2LVxcdGlmIChJU19FUlIobGluaykpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01OTk5LVxcdGlmIChsaW5rLVxcdTAwM2VvcHMtXFx1MDAzZXVwZGF0ZV9tYXApIHtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MDAwOlxcdFxcdHJldCA9IGxpbmtfdXBkYXRlX21hcChsaW5rLCBhdHRyKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MDAxLVxcdFxcdGdvdG8gb3V0X3B1dF9saW5rO1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjAwMy1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MDA0OlxcdG5ld19wcm9nID0gYnBmX3Byb2dfZ2V0KGF0dHItXFx1MDAzZWxpbmtfdXBkYXRlLm5ld19wcm9nX2ZkKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MDA1LVxcdGlmIChJU19FUlIobmV3X3Byb2cpKSB7XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MDEwLVxcdGlmIChmbGFncyBcXHUwMDI2IEJQRl9GX1JFUExBQ0UpIHtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MDExOlxcdFxcdG9sZF9wcm9nID0gYnBmX3Byb2dfZ2V0KGF0dHItXFx1MDAzZWxpbmtfdXBkYXRlLm9sZF9wcm9nX2ZkKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MDEyLVxcdFxcdGlmIChJU19FUlIob2xkX3Byb2cpKSB7XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MDE2LVxcdFxcdH1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MDE3OlxcdH0gZWxzZSBpZiAoYXR0ci1cXHUwMDNlbGlua191cGRhdGUub2xkX3Byb2dfZmQpIHtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MDE4LVxcdFxcdHJldCA9IC1FSU5WQUw7XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz02MzU0PXN0YXRpYyBpbnQgX19zeXNfYnBmKGVudW0gYnBmX2NtZCBjbWQsIGJwZnB0cl90IHVhdHRyLCB1bnNpZ25lZCBpbnQgc2l6ZSxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTY0OTUtXFx0Y2FzZSBCUEZfTElOS19VUERBVEU6XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjQ5NjpcXHRcXHRlcnIgPSBsaW5rX3VwZGF0ZShcXHUwMDI2YXR0cik7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjQ5Ny1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTM6MTE6MDYuNTE3MTY2MjMyWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyMjQxNzE5NDM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIEJQRiBDZ3JvdXAgTGluayBVcGRhdGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBoZXJlJ3MgbXkgYnJlYWtkb3duLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGxpZXMgd2l0aGluIHRoZSBgQlBGX0xJTktfVVBEQVRFYCBzeXNjYWxsIGhhbmRsZXIsIHNwZWNpZmljYWxseSB0aGUgY2dyb3VwLXNwZWNpZmljIGltcGxlbWVudGF0aW9uOiBgY2dyb3VwX2JwZl9yZXBsYWNlYC4gSSd2ZSBjb25maXJtZWQgdGhhdCBgY2dyb3VwX2JwZl9yZXBsYWNlYCBpcyBzdGF0aWMuIEluaXRpYWxseSwgdGhhdCBnYXZlIG1lIHBhdXNlIGJlY2F1c2UgSSB3b25kZXJlZCBpZiBpdCBjb3VsZCBiZSBhIHZhbGlkIGZvY3VzIHN5bWJvbCwgYnV0IHRoZW4gSSByZW1lbWJlcmVkIHN5emthbGxlciBoYW5kbGVzIHN0YXRpYyBmdW5jdGlvbnMgZmluZSBpZiB0aGV5IGFyZSBub3QgaW5saW5lZC4gSW4gdGhpcyBjYXNlIGl0IGlzIGEgZnVuY3Rpb24gcG9pbnRlci5cblxuSSd2ZSBhbHNvIGRvdWJsZS1jaGVja2VkIHRoYXQgYF9fY2dyb3VwX2JwZl9yZXBsYWNlYCBpcyBhbHNvIHN0YXRpYywgYW5kIGl0IGlzLiBGdXJ0aGVybW9yZSwgYGNncm91cF9icGZfcmVwbGFjZWAgaXMgdGhlIG9ubHkgY2FsbGVyIG9mIGBfX2Nncm91cF9icGZfcmVwbGFjZWAuXG5cblRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIGNvbXBhdGliaWxpdHkgY2hlY2sgYmV0d2VlbiB0aGUgY2dyb3VwIHN0b3JhZ2VzIG9mIHRoZSBvbGQgYW5kIG5ldyBCUEYgcHJvZ3JhbXMgZHVyaW5nIGEgbGluayByZXBsYWNlbWVudCB2aWEgYGNncm91cF9icGZfc3RvcmFnZXNfY29tcGF0aWJsZWAsIHdoaWNoIGlzIGEgY2xlYXIgZnVuY3Rpb25hbCBjaGFuZ2UuIEl0J3MgZXNzZW50aWFsbHkgcHJldmVudGluZyBpbmNvbXBhdGlibGUgcHJvZ3JhbSBzd2Fwcy4gSXQgaXMgY2FsbGVkIGluIGBfX2Nncm91cF9icGZfcmVwbGFjZWAgZnJvbSBgY2dyb3VwX2JwZl9yZXBsYWNlYC5cblxuU28sIHRoZSBmb2N1cyBzeW1ib2wgc2hvdWxkIGJlIGBjZ3JvdXBfYnBmX3JlcGxhY2VgLCBhbmQgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucyBhcmUgYENHUk9VUF9CUEZgIGFuZCBgQlBGX1NZU0NBTExgIHRvIHJlYWNoIHRoZSByZWxhdGVkIGNvZGUuXG5cblRoZXJlZm9yZSwgbXkgc3VtbWFyeSBpczpcbiogICAqKldvcnRoRnV6emluZzoqKiBUcnVlXG4qICAgKipSZWFzb25pbmc6KiogVGhlIHBhdGNoIGFkZHMgYSBjaGVjayB0byBwcmV2ZW50IHJlcGxhY2luZyBhIEJQRiBwcm9ncmFtIGluIGEgY2dyb3VwIGxpbmsgaWYgdGhlIG5ldyBwcm9ncmFtIGhhcyBkaWZmZXJlbnQgY2dyb3VwIHN0b3JhZ2VzIHRoYW4gdGhlIG9sZCBwcm9ncmFtLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIEJQRiBjZ3JvdXAgbGluayByZXBsYWNlbWVudCBsb2dpYywgcmVhY2hhYmxlIHZpYSB0aGUgQlBGX0xJTktfVVBEQVRFIHN5c2NhbGwuXG4qICAgKipGb2N1c1N5bWJvbHM6KiogYGNncm91cF9icGZfcmVwbGFjZWBcbiogICAqKkVuYWJsZUNvbmZpZ3M6KiogYENHUk9VUF9CUEZgLCBgQlBGX1NZU0NBTExgXG5cbk5vdywgSSdsbCB1c2UgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBhbmQgbW92ZSBvbiB0byB0aGUgbmV4dCBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA0ODQsIk91dHB1dFRva2VucyI6MTA3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODg5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEzOjExOjE4Ljc1ODg4OTA5NloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODkxNzM1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0dST1VQX0JQRlwiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjZ3JvdXBfYnBmX3JlcGxhY2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgY29tcGF0aWJpbGl0eSBjaGVjayBmb3IgY2dyb3VwIHN0b3JhZ2VzIHdoZW4gcmVwbGFjaW5nIGEgQlBGIHByb2dyYW0gaW4gYSBjZ3JvdXAgbGluay4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBCUEYgY2dyb3VwIGxpbmsgcmVwbGFjZW1lbnQgbG9naWMsIHJlYWNoYWJsZSB2aWEgdGhlIEJQRl9MSU5LX1VQREFURSBzeXNjYWxsIGNvbW1hbmQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0dST1VQX0JQRlwiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjZ3JvdXBfYnBmX3JlcGxhY2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgY29tcGF0aWJpbGl0eSBjaGVjayBmb3IgY2dyb3VwIHN0b3JhZ2VzIHdoZW4gcmVwbGFjaW5nIGEgQlBGIHByb2dyYW0gaW4gYSBjZ3JvdXAgbGluay4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBCUEYgY2dyb3VwIGxpbmsgcmVwbGFjZW1lbnQgbG9naWMsIHJlYWNoYWJsZSB2aWEgdGhlIEJQRl9MSU5LX1VQREFURSBzeXNjYWxsIGNvbW1hbmQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEzOjExOjE4LjkxNzgxNDUxWiIsIlNlcSI6MzEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDI1ODMwMTM0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEzOjExOjE4LjkxODQ5NzgwOVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMDI1NzYxMjQyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIHNpbXBsZSBjb21wYXRpYmlsaXR5IGNoZWNrIGZvciBCUEYgY2dyb3VwIHN0b3JhZ2UgZHVyaW5nIHByb2dyYW0gcmVwbGFjZW1lbnQuIEl0IGNvbXBhcmVzIGV4aXN0aW5nIGZpZWxkcyBpbiB0aGUgYGJwZl9wcm9nLVxcdTAwM2VhdXhgIHN0cnVjdHVyZS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgY29weSBkYXRhIHRvIHVzZXIgc3BhY2UsIG9yIHVzZSBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBjb250cm9sIGZsb3cuIEFueSBtZW1vcnkgZXJyb3JzIHJlbGF0ZWQgdG8gdGhpcyBjaGFuZ2UsIHN1Y2ggYXMgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBvciB1c2UtYWZ0ZXItZnJlZSwgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDZjNGQ5MmY3MGJjZDdlY2I2MmFhMWJjMDQ4YTQ1NjA2MTI3ZjAwOTBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyA3IDEzOjEwOjA5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9jZ3JvdXAuYyBiL2tlcm5lbC9icGYvY2dyb3VwLmNcbmluZGV4IDQzNTVjY2I3OGE5YzYuLjVjYzliMmQ5MmZkNTggMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2Nncm91cC5jXG4rKysgYi9rZXJuZWwvYnBmL2Nncm91cC5jXG5AQCAtMTAxOCw2ICsxMDE4LDIwIEBAIHN0YXRpYyB2b2lkIHJlcGxhY2VfZWZmZWN0aXZlX3Byb2coc3RydWN0IGNncm91cCAqY2dycCxcbiBcdH1cbiB9XG4gXG4rc3RhdGljIGJvb2wgY2dyb3VwX2JwZl9zdG9yYWdlc19jb21wYXRpYmxlKHN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2csXG4rXHRcdFx0XHRcdCAgIHN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2cpXG4re1xuK1x0ZW51bSBicGZfY2dyb3VwX3N0b3JhZ2VfdHlwZSBzdHlwZTtcbitcbitcdGZvcl9lYWNoX2Nncm91cF9zdG9yYWdlX3R5cGUoc3R5cGUpIHtcbitcdFx0aWYgKG9sZF9wcm9nLVx1MDAzZWF1eC1cdTAwM2VjZ3JvdXBfc3RvcmFnZVtzdHlwZV0gIT1cbitcdFx0ICAgIG5ld19wcm9nLVx1MDAzZWF1eC1cdTAwM2VjZ3JvdXBfc3RvcmFnZVtzdHlwZV0pXG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuIC8qKlxuICAqIF9fY2dyb3VwX2JwZl9yZXBsYWNlKCkgLSBSZXBsYWNlIGxpbmsncyBwcm9ncmFtIGFuZCBwcm9wYWdhdGUgdGhlIGNoYW5nZVxuICAqICAgICAgICAgICAgICAgICAgICAgICAgICB0byBkZXNjZW5kYW50c1xuQEAgLTEwNTYsNiArMTA3MCw5IEBAIHN0YXRpYyBpbnQgX19jZ3JvdXBfYnBmX3JlcGxhY2Uoc3RydWN0IGNncm91cCAqY2dycCxcbiBcdGlmICghZm91bmQpXG4gXHRcdHJldHVybiAtRU5PRU5UO1xuIFxuK1x0aWYgKCFjZ3JvdXBfYnBmX3N0b3JhZ2VzX2NvbXBhdGlibGUobGluay1cdTAwM2VsaW5rLnByb2csIG5ld19wcm9nKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4gXHRjZ3JwLVx1MDAzZWJwZi5yZXZpc2lvbnNbYXR5cGVdICs9IDE7XG4gXHRvbGRfcHJvZyA9IHhjaGcoXHUwMDI2bGluay1cdTAwM2VsaW5rLnByb2csIG5ld19wcm9nKTtcbiBcdHJlcGxhY2VfZWZmZWN0aXZlX3Byb2coY2dycCwgYXR5cGUsIHBsKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEzOjExOjE4LjkxODQ5OTc2WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMjU3NTc1MjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBCUEYgQ2dyb3VwIFN0b3JhZ2UgQ29tcGF0aWJpbGl0eSBEdXJpbmcgUHJvZ3JhbSBSZXBsYWNlbWVudCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBpcyBmb2N1c2VkIG9uIGVuc3VyaW5nIGNvbXBhdGliaWxpdHkgb2YgQlBGIGNncm91cCBzdG9yYWdlIGR1cmluZyBwcm9ncmFtIHJlcGxhY2VtZW50LiBTcGVjaWZpY2FsbHksIGl0IGludHJvZHVjZXMgYSBmdW5jdGlvbiwgYGNncm91cF9icGZfc3RvcmFnZXNfY29tcGF0aWJsZWAsIHRvIGNvbXBhcmUgdGhlIGBjZ3JvdXBfc3RvcmFnZWAgZmllbGRzIHdpdGhpbiB0aGUgYGJwZl9wcm9nLVx1MDAzZWF1eGAgc3RydWN0dXJlIG9mIHRoZSBvbGQgYW5kIG5ldyBwcm9ncmFtcy4gVGhlIGNoZWNrIGlzIHNpbXBsZTogYG9sZF9wcm9nLVx1MDAzZWF1eC1cdTAwM2VjZ3JvdXBfc3RvcmFnZVtzdHlwZV0gIT0gbmV3X3Byb2ctXHUwMDNlYXV4LVx1MDAzZWNncm91cF9zdG9yYWdlW3N0eXBlXWAuIElmIGFueSBvZiB0aGUgc3RvcmFnZSB0eXBlcyAoYHN0eXBlYCkgZGlmZmVyLCB0aGUgcmVwbGFjZW1lbnQgaXMgcmVqZWN0ZWQgYnkgcmV0dXJuaW5nIGAtRUlOVkFMYC5cblxuTXkgaW1tZWRpYXRlIGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgdW5pbml0aWFsaXplZCBtZW1vcnkuIERvZXMgdGhpcyBjaGFuZ2UgaW50cm9kdWNlIGFueSByaXNrcyB0aGVyZT8gTm8sIGFmdGVyIGEgcXVpY2sgcmV2aWV3LCBpdCdzIGNvbXBhcmluZyBwb2ludGVycyBvciB2YWx1ZXMgd2l0aGluIHRoZSBgY2dyb3VwX3N0b3JhZ2VgIGFycmF5LCBwYXJ0IG9mIGBicGZfcHJvZy1cdTAwM2VhdXhgLiBUaGUgcG90ZW50aWFsIGJ1Z3MgYXJlIGxpbWl0ZWQgdG8gTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBvciB1c2UtYWZ0ZXItZnJlZSwgaXNzdWVzIHRoYXQgS0FTQU4gc2hvdWxkIGJlIHdlbGwtZXF1aXBwZWQgdG8gZGV0ZWN0LiBUaGlzIGlzbid0IHdyaXRpbmcgdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXJzcGFjZSwgbm9yIGlzIGl0IG1ha2luZyBjcml0aWNhbCBjb250cm9sLWZsb3cgZGVjaXNpb25zIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5ICh1bmxlc3MgYGNncm91cF9zdG9yYWdlYCBpdHNlbGYgaXMgaW5pdGlhbGl6ZWQgYmFkbHksIGJ1dCB0aGF0J3MgYSBwcmUtZXhpc3RpbmcgZmllbGQgYW5kIHNob3VsZCBiZSBpbml0aWFsaXplZCBieSB0aGUgcHJvZ3JhbSBsb2FkZXIpLlxuXG5Mb29raW5nIG1vcmUgY2xvc2VseSBhdCB0aGUgY29kZTpcbmBgYGNcbnN0YXRpYyBib29sIGNncm91cF9icGZfc3RvcmFnZXNfY29tcGF0aWJsZShzdHJ1Y3QgYnBmX3Byb2cgKm9sZF9wcm9nLFxuXHRcdFx0XHRcdCAgIHN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2cpXG57XG5cdGVudW0gYnBmX2Nncm91cF9zdG9yYWdlX3R5cGUgc3R5cGU7XG5cblx0Zm9yX2VhY2hfY2dyb3VwX3N0b3JhZ2VfdHlwZShzdHlwZSkge1xuXHRcdGlmIChvbGRfcHJvZy1cdTAwM2VhdXgtXHUwMDNlY2dyb3VwX3N0b3JhZ2Vbc3R5cGVdICE9XG5cdFx0ICAgIG5ld19wcm9nLVx1MDAzZWF1eC1cdTAwM2VjZ3JvdXBfc3RvcmFnZVtzdHlwZV0pXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRyZXR1cm4gdHJ1ZTtcbn1cbmBgYFxuSXQncyBqdXN0IGEgc3RyYWlnaHRmb3J3YXJkIGNvbXBhcmlzb24uIFRoZXJlJ3Mgbm90aGluZyBoZXJlIHRoYXQncyBwYXJ0aWN1bGFybHkgdnVsbmVyYWJsZSB0byBLTVNBTi1zcGVjaWZpYyBpc3N1ZXMuIEl0J3MgYSBmdW5kYW1lbnRhbCBjb21wYXRpYmlsaXR5IGNoZWNrLCBhbmQgaXQgYXBwZWFycyB0byBiZSBpbXBsZW1lbnRlZCBzYWZlbHkuXG5cblRoZXJlZm9yZSwgZ2l2ZW4gdGhlIHNpbXBsZSBuYXR1cmUgb2YgdGhlIHBhdGNoLCBhbmQgdGhlIG5hdHVyZSBvZiB0aGUgb3BlcmF0aW9ucyBwZXJmb3JtZWQsIEknbSBjb25maWRlbnQgaW4gc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAuIFRoZSBwYXRjaCBhZGRyZXNzZXMgY2dyb3VwIHN0b3JhZ2UgY29tcGF0aWJpbGl0eSB1c2luZyBhIHdlbGwtZGVmaW5lZCBjb21wYXJpc29uLCB3aXRob3V0IGludHJvZHVjaW5nIG5ldyBhbGxvY2F0aW9ucywgdXNlci1zcGFjZSBkYXRhIGV4cG9zdXJlLCBvciB1c2Ugb2YgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gY3JpdGljYWwgcGF0aHMuIEFueSBtZW1vcnkgZXJyb3JzIHdvdWxkIGJlIEtBU0FOLWRldGVjdGFibGUuIE5vIGZ1cnRoZXIgS01TQU4gZnV6emluZyBpcyBuZWVkZWQgaW4gdGhpcyBjYXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjEzLCJPdXRwdXRUb2tlbnMiOjEyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEzOjExOjI5LjE3NjA3OTY3OVoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4NDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIHNpbXBsZSBjb21wYXRpYmlsaXR5IGNoZWNrIGZvciBCUEYgY2dyb3VwIHN0b3JhZ2UgZHVyaW5nIHByb2dyYW0gcmVwbGFjZW1lbnQuIEl0IGNvbXBhcmVzIGV4aXN0aW5nIGZpZWxkcyBpbiB0aGUgYGJwZl9wcm9nLVxcdTAwM2VhdXhgIHN0cnVjdHVyZS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgY29weSBkYXRhIHRvIHVzZXIgc3BhY2UsIG9yIHVzZSBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBjb250cm9sIGZsb3cuIEFueSBtZW1vcnkgZXJyb3JzIHJlbGF0ZWQgdG8gdGhpcyBjaGFuZ2UsIHN1Y2ggYXMgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBvciB1c2UtYWZ0ZXItZnJlZSwgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBzaW1wbGUgY29tcGF0aWJpbGl0eSBjaGVjayBmb3IgQlBGIGNncm91cCBzdG9yYWdlIGR1cmluZyBwcm9ncmFtIHJlcGxhY2VtZW50LiBJdCBjb21wYXJlcyBleGlzdGluZyBmaWVsZHMgaW4gdGhlIGBicGZfcHJvZy1cXHUwMDNlYXV4YCBzdHJ1Y3R1cmUuIEl0IGRvZXMgbm90IGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMsIGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLCBvciB1c2UgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gY29udHJvbCBmbG93LiBBbnkgbWVtb3J5IGVycm9ycyByZWxhdGVkIHRvIHRoaXMgY2hhbmdlLCBzdWNoIGFzIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgb3IgdXNlLWFmdGVyLWZyZWUsIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow69jfv[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-07 13:07:59 +0000 UTC FinishedAt: 2026-08-07 13:11:30 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "31a420a822ff92e2090bd5d65efe8e34e2d6d9b8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CGROUP_BPF", "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "31a420a822ff92e2090bd5d65efe8e34e2d6d9b8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CGROUP_BPF", "BPF_SYSCALL" ], "series_id": "e2ba44e7-5fe9-4800-a79a-f3dcd5bd5402" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "cgroup_bpf_replace" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEzOjEwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NHUk9VUF9CUEYmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjZ3JvdXBfYnBmX3JlcGxhY2UmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgc2ltcGxlIGNvbXBhdGliaWxpdHkgY2hlY2sgZm9yIEJQRiBjZ3JvdXAgc3RvcmFnZSBkdXJpbmcgcHJvZ3JhbSByZXBsYWNlbWVudC4gSXQgY29tcGFyZXMgZXhpc3RpbmcgZmllbGRzIGluIHRoZSBgYnBmX3Byb2ctXHUwMDNlYXV4YCBzdHJ1Y3R1cmUuIEl0IGRvZXMgbm90IGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMsIGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLCBvciB1c2UgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gY29udHJvbCBmbG93LiBBbnkgbWVtb3J5IGVycm9ycyByZWxhdGVkIHRvIHRoaXMgY2hhbmdlLCBzdWNoIGFzIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgb3IgdXNlLWFmdGVyLWZyZWUsIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNvbXBhdGliaWxpdHkgY2hlY2sgZm9yIGNncm91cCBzdG9yYWdlcyB3aGVuIHJlcGxhY2luZyBhIEJQRiBwcm9ncmFtIGluIGEgY2dyb3VwIGxpbmsuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgQlBGIGNncm91cCBsaW5rIHJlcGxhY2VtZW50IGxvZ2ljLCByZWFjaGFibGUgdmlhIHRoZSBCUEZfTElOS19VUERBVEUgc3lzY2FsbCBjb21tYW5kLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEzOjEwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNmM0ZDkyZjcwYmNkN2VjYjYyYWExYmMwNDhhNDU2MDYxMjdmMDA5MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDcgMTM6MTA6MDkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9jZ3JvdXAuYyBiL2tlcm5lbC9icGYvY2dyb3VwLmNcbmluZGV4IDQzNTVjY2I3OGE5YzYuLjVjYzliMmQ5MmZkNTggMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2Nncm91cC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2Nncm91cC5jXG5AQCAtMTAxOCw2ICYjNDM7MTAxOCwyMCBAQCBzdGF0aWMgdm9pZCByZXBsYWNlX2VmZmVjdGl2ZV9wcm9nKHN0cnVjdCBjZ3JvdXAgKmNncnAsXG4gXHR9XG4gfVxuIFxuJiM0MztzdGF0aWMgYm9vbCBjZ3JvdXBfYnBmX3N0b3JhZ2VzX2NvbXBhdGlibGUoc3RydWN0IGJwZl9wcm9nICpvbGRfcHJvZyxcbiYjNDM7XHRcdFx0XHRcdCAgIHN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2cpXG4mIzQzO3tcbiYjNDM7XHRlbnVtIGJwZl9jZ3JvdXBfc3RvcmFnZV90eXBlIHN0eXBlO1xuJiM0MztcbiYjNDM7XHRmb3JfZWFjaF9jZ3JvdXBfc3RvcmFnZV90eXBlKHN0eXBlKSB7XG4mIzQzO1x0XHRpZiAob2xkX3Byb2ctXHUwMDNlYXV4LVx1MDAzZWNncm91cF9zdG9yYWdlW3N0eXBlXSAhPVxuJiM0MztcdFx0ICAgIG5ld19wcm9nLVx1MDAzZWF1eC1cdTAwM2VjZ3JvdXBfc3RvcmFnZVtzdHlwZV0pXG4mIzQzO1x0XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIF9fY2dyb3VwX2JwZl9yZXBsYWNlKCkgLSBSZXBsYWNlIGxpbmsmIzM5O3MgcHJvZ3JhbSBhbmQgcHJvcGFnYXRlIHRoZSBjaGFuZ2VcbiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gZGVzY2VuZGFudHNcbkBAIC0xMDU2LDYgJiM0MzsxMDcwLDkgQEAgc3RhdGljIGludCBfX2Nncm91cF9icGZfcmVwbGFjZShzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxuIFx0aWYgKCFmb3VuZClcbiBcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gXG4mIzQzO1x0aWYgKCFjZ3JvdXBfYnBmX3N0b3JhZ2VzX2NvbXBhdGlibGUobGluay1cdTAwM2VsaW5rLnByb2csIG5ld19wcm9nKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiBcdGNncnAtXHUwMDNlYnBmLnJldmlzaW9uc1thdHlwZV0gJiM0Mzs9IDE7XG4gXHRvbGRfcHJvZyA9IHhjaGcoXHUwMDI2bGluay1cdTAwM2VsaW5rLnByb2csIG5ld19wcm9nKTtcbiBcdHJlcGxhY2VfZWZmZWN0aXZlX3Byb2coY2dycCwgYXR5cGUsIHBsKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMzoxMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0dST1VQX0JQRiYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Nncm91cF9icGZfcmVwbGFjZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgY29tcGF0aWJpbGl0eSBjaGVjayBmb3IgY2dyb3VwIHN0b3JhZ2VzIHdoZW4gcmVwbGFjaW5nIGEgQlBGIHByb2dyYW0gaW4gYSBjZ3JvdXAgbGluay4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBCUEYgY2dyb3VwIGxpbmsgcmVwbGFjZW1lbnQgbG9naWMsIHJlYWNoYWJsZSB2aWEgdGhlIEJQRl9MSU5LX1VQREFURSBzeXNjYWxsIGNvbW1hbmQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2YzRkOTJmNzBiY2Q3ZWNiNjJhYTFiYzA0OGE0NTYwNjEyN2YwMDkwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgNyAxMzoxMDowOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvY2dyb3VwLmMgYi9rZXJuZWwvYnBmL2Nncm91cC5jCmluZGV4IDQzNTVjY2I3OGE5YzYuLjVjYzliMmQ5MmZkNTggMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvY2dyb3VwLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9jZ3JvdXAuYwpAQCAtMTAxOCw2ICYjNDM7MTAxOCwyMCBAQCBzdGF0aWMgdm9pZCByZXBsYWNlX2VmZmVjdGl2ZV9wcm9nKHN0cnVjdCBjZ3JvdXAgKmNncnAsCiAJfQogfQogCiYjNDM7c3RhdGljIGJvb2wgY2dyb3VwX2JwZl9zdG9yYWdlc19jb21wYXRpYmxlKHN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2csCiYjNDM7CQkJCQkgICBzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nKQomIzQzO3sKJiM0MzsJZW51bSBicGZfY2dyb3VwX3N0b3JhZ2VfdHlwZSBzdHlwZTsKJiM0MzsKJiM0MzsJZm9yX2VhY2hfY2dyb3VwX3N0b3JhZ2VfdHlwZShzdHlwZSkgewomIzQzOwkJaWYgKG9sZF9wcm9nLSZndDthdXgtJmd0O2Nncm91cF9zdG9yYWdlW3N0eXBlXSAhPQomIzQzOwkJICAgIG5ld19wcm9nLSZndDthdXgtJmd0O2Nncm91cF9zdG9yYWdlW3N0eXBlXSkKJiM0MzsJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBfX2Nncm91cF9icGZfcmVwbGFjZSgpIC0gUmVwbGFjZSBsaW5rJiMzOTtzIHByb2dyYW0gYW5kIHByb3BhZ2F0ZSB0aGUgY2hhbmdlCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gZGVzY2VuZGFudHMKQEAgLTEwNTYsNiAmIzQzOzEwNzAsOSBAQCBzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9yZXBsYWNlKHN0cnVjdCBjZ3JvdXAgKmNncnAsCiAJaWYgKCFmb3VuZCkKIAkJcmV0dXJuIC1FTk9FTlQ7CiAKJiM0MzsJaWYgKCFjZ3JvdXBfYnBmX3N0b3JhZ2VzX2NvbXBhdGlibGUobGluay0mZ3Q7bGluay5wcm9nLCBuZXdfcHJvZykpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKIAljZ3JwLSZndDticGYucmV2aXNpb25zW2F0eXBlXSAmIzQzOz0gMTsKIAlvbGRfcHJvZyA9IHhjaGcoJmFtcDtsaW5rLSZndDtsaW5rLnByb2csIG5ld19wcm9nKTsKIAlyZXBsYWNlX2VmZmVjdGl2ZV9wcm9nKGNncnAsIGF0eXBlLCBwbCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEzOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMTYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEJQRiBDZ3JvdXAgTGluayBSZXBsYWNlbWVudCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXQmIzM5O3MgcG9raW5nIGFyb3VuZCBpbiBga2VybmVsL2JwZi9jZ3JvdXAuY2AuIExvb2tzIGxpa2UgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyBmb2N1c2VkIG9uIG1vZGlmeWluZyB0aGUgQlBGIGNncm91cCBsaW5rIHJlcGxhY2VtZW50IGxvZ2ljLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBfX2Nncm91cF9icGZfcmVwbGFjZWAuIFRoZSBrZXkgYWRkaXRpb24gaXMgdGhpcyBuZXcgZnVuY3Rpb24sIGBjZ3JvdXBfYnBmX3N0b3JhZ2VzX2NvbXBhdGlibGVgLCB3aGljaCBpcyBiZWluZyBjYWxsZWQgcmlnaHQgYmVmb3JlIHRoZSBwcm9ncmFtIHJlcGxhY2VtZW50LiBJdCBzZWVtcyB0aGUgaW50ZW50aW9uIGlzIHRvIGVuZm9yY2Ugc29tZSBzb3J0IG9mIHN0b3JhZ2UgY29tcGF0aWJpbGl0eSBjaGVjayBiZXR3ZWVuIHRoZSBleGlzdGluZyBhbmQgdGhlIG5ldyBCUEYgcHJvZ3JhbXMuCgpUaGUgbG9naWMgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogaWYgdGhlIG5ldyBwcm9ncmFtJiMzOTtzIGNncm91cCBzdG9yYWdlcyBhcmVuJiMzOTt0IGNvbXBhdGlibGUgd2l0aCB0aGUgb2xkIHByb2dyYW0mIzM5O3Mg4oCTIG1lYW5pbmcgdGhleSBoYXZlIGRpZmZlcmVudCBvciBpbmNvbXBhdGlibGUgc3RvcmFnZSByZXF1aXJlbWVudHMg4oCTIHRoZW4gd2UmIzM5O3JlIGJhaWxpbmcgb3V0IHdpdGggYW4gYC1FSU5WQUxgIGVycm9yLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGRlZmluaXRlbHkgaW1wYWN0aW5nIGhvdyBCUEYgcHJvZ3JhbXMgY2FuIGJlIHN3YXBwZWQgb3V0IHdpdGhpbiBjZ3JvdXAgbGlua3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgY29uc3RpdHV0ZXMgJiMzNDtjb21wYXRpYmxlJiMzNDsgaW4gdGhpcyBjb250ZXh0LgoKTm93LCBsZXQmIzM5O3Mgc2VlIHdoZXJlIGBfX2Nncm91cF9icGZfcmVwbGFjZWAgaXMgYmVpbmcgdXNlZC4gQSBxdWljayBjaGVjayByZXZlYWxzIGl0JiMzOTtzIGJlaW5nIGNhbGxlZCBmcm9tIGBjZ3JvdXBfYnBmX3JlcGxhY2VgLiBUaGF04oCZcyB0aGUgdHlwaWNhbCBmbG93LCBJIGV4cGVjdGVkIHRoYXQuIEkgd2lsbCBuZWVkIHRvIGNvbnNpZGVyIHRoZSBjb250ZXh0IG9mIHRoZXNlIGZ1bmN0aW9ucywgSSB0aGluayBpdCBtaWdodCBiZSB1c2VmdWwgdG8gdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGlzIGNoZWNrIHdpbGwgdHJpZ2dlci4gVGhpcyBsb29rcyBsaWtlIGEgcG90ZW50aWFsbHkgdXNlZnVsIG1lY2hhbmlzbSB0byBwcmV2ZW50IHVuZXhwZWN0ZWQgYmVoYXZpb3VyLCBvciBtYXliZSBldmVuIHN1YnRsZSBidWdzLCBjYXVzZWQgYnkgaW5jb21wYXRpYmxlIHByb2dyYW0gcmVwbGFjZW1lbnRzLCBzdWNoIGFzIHJlc291cmNlIGxlYWtzIG9yIGRhdGEgY29ycnVwdGlvbi4gVWx0aW1hdGVseSwgaXQgbG9va3MgbGlrZSBhIGdvb2QgY2hhbmdlIHRvIGhhdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTM6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19jZ3JvdXBfYnBmX3JlcGxhY2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2Nncm91cC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvY2dyb3VwLmM9MTAyMT1zdGF0aWMgYm9vbCBjZ3JvdXBfYnBmX3N0b3JhZ2VzX2NvbXBhdGlibGUoc3RydWN0IGJwZl9wcm9nICpvbGRfcHJvZyxcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTEwMzUtLyoqXG5rZXJuZWwvYnBmL2Nncm91cC5jOjEwMzY6ICogX19jZ3JvdXBfYnBmX3JlcGxhY2UoKSAtIFJlcGxhY2UgbGluayYjMzk7cyBwcm9ncmFtIGFuZCBwcm9wYWdhdGUgdGhlIGNoYW5nZVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMDM3LSAqICAgICAgICAgICAgICAgICAgICAgICAgICB0byBkZXNjZW5kYW50c1xuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtMTA0NC0gKi9cbmtlcm5lbC9icGYvY2dyb3VwLmM6MTA0NTpzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9yZXBsYWNlKHN0cnVjdCBjZ3JvdXAgKmNncnAsXG5rZXJuZWwvYnBmL2Nncm91cC5jLTEwNDYtXHRcdFx0XHRzdHJ1Y3QgYnBmX2Nncm91cF9saW5rICpsaW5rLFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9MTA4Mz1zdGF0aWMgaW50IGNncm91cF9icGZfcmVwbGFjZShzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssIHN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2csXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMTAwLVx0fVxua2VybmVsL2JwZi9jZ3JvdXAuYzoxMTAxOlx0cmV0ID0gX19jZ3JvdXBfYnBmX3JlcGxhY2UoY2dfbGluay1cdTAwM2VjZ3JvdXAsIGNnX2xpbmssIG5ld19wcm9nKTtcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTEwMi1vdXRfdW5sb2NrOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEzOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwODEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGggYGNncm91cF9icGZfcmVwbGFjZWAsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5IG9mIHRoZSB1bmRlcmx5aW5nIHRob3VnaHRzLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGlzIGFyZWE6CgoqKkRlZXAgRGl2ZSBpbnRvIGBjZ3JvdXBfYnBmX3JlcGxhY2VgKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIHVuZGVyc3RhbmQsIGBjZ3JvdXBfYnBmX3JlcGxhY2VgIGlzICp0aGUqIGZ1bmN0aW9uLCB0aGUgYC51cGRhdGVfcHJvZ2AgY2FsbGJhY2ssIHRoYXQmIzM5O3MgY2VudHJhbCB0byBtYW5hZ2luZyBCUEYgcHJvZ3JhbXMgbGlua2VkIHRvIGNncm91cHMgd2l0aGluIHRoZSBgYnBmX2Nncm91cF9saW5rX2xvcHNgIGZyYW1ld29yay4gV2hlbiBhIEJQRiBwcm9ncmFtIG5lZWRzIHRvIGJlIHVwZGF0ZWQgb3IgcmVwbGFjZWQgb24gYSBjZ3JvdXAsIHRoaXMgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQuIFRoaXMgbWVhbnMgaXQmIzM5O3MgcmVzcG9uc2libGUgZm9yIHRoZSBjb3JlIGxvZ2ljIG9mIHNhZmVseSBzd2FwcGluZyBvdXQgdGhlIG9sZCBCUEYgcHJvZ3JhbSB3aXRoIHRoZSBuZXcgb25lLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGUgc3lzdGVtIGhhbmRsZXMgdGhlIHJlcGxhY2VtZW50IGNvcnJlY3RseS4KClRoaXMgY2FsbGJhY2sgZnVuY3Rpb24gbXVzdCBoYW5kbGUgYWxsIG9mIHRoZSBkZXRhaWxzLiBJdCBwcm9iYWJseSBkZWFscyB3aXRoIGxvY2tpbmcgYW5kIHN5bmNocm9uaXphdGlvbi4gSSYjMzk7ZCBpbWFnaW5lIGl0IGhhcyB0byBjYXJlZnVsbHkgbWFuYWdlIHRoZSBwcm9ncmFtJiMzOTtzIGxpZmVjeWNsZSDigJMgbWFraW5nIHN1cmUgdGhlIG9sZCBwcm9ncmFtIGlzIHVuaG9va2VkIHByb3Blcmx5LCB0aGUgbmV3IG9uZSBpcyBhdHRhY2hlZCwgYW5kIGFueSByZWxldmFudCBzdGF0ZSBpcyBjbGVhbmVkIHVwIG9yIHRyYW5zZmVycmVkIHNlY3VyZWx5LiBUaGUgY3J1Y2lhbCBhc3BlY3QgaXMgdGhhdCBpdCBtdXN0IG1haW50YWluIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIGNncm91cCYjMzk7cyBiZWhhdmlvci4gV2UgY2Fubm90IGxvc2Ugb3IgY29ycnVwdCBhbnkgZGF0YS4KCkkmIzM5O2QgZXhwZWN0IHRoZSBjb3JlIGNvbXBsZXhpdHkgbGllcyBpbiBkZWFsaW5nIHdpdGggcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBhbmQgZW5zdXJpbmcgYXRvbWljaXR5LiBDb25jdXJyZW50IG9wZXJhdGlvbnMgb24gdGhlIGNncm91cCBoaWVyYXJjaHksIHBhcnRpY3VsYXJseSB3aGVuIHByb2dyYW1zIGFyZSBiZWluZyByZXBsYWNlZCwgbmVlZCB0byBiZSBjYXJlZnVsbHkgb3JjaGVzdHJhdGVkIHRvIGF2b2lkIGNvcnJ1cHRpb24gb3IgdW5pbnRlbmRlZCBiZWhhdmlvci4gVGhlIGZ1bmN0aW9uIHdvdWxkIGhhdmUgdG8gaW5jbHVkZSBhIGxvdCBvZiBjbGV2ZXIgbG9naWMuIEkgd291bGQgYmUgc3VyZSBpdCBoYXMgZ29vZCBlcnJvciBoYW5kbGluZy4KCkZ1cnRoZXJtb3JlLCB0aGlzIG1lYW5zIHRoYXQgYW55IHJlc3RyaWN0aW9ucyBhbmQgc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMgb2YgdGhlIEJQRiBzdWJzeXN0ZW0sIHdoaWNoIEkga25vdyBpbnNpZGUgYW5kIG91dCwgd2lsbCBuZWVkIHRvIGJlIHN0cmljdGx5IGVuZm9yY2VkLiBUaGUgZnVuY3Rpb24gbXVzdCB2ZXQgdGhlIHJlcGxhY2VtZW50IHByb2dyYW0gdGhvcm91Z2hseSwgZW5zdXJpbmcgaXQgbWVldHMgYWxsIHBvbGljeSByZXF1aXJlbWVudHMgYW5kIGRvZXNu4oCZdCBpbnRyb2R1Y2UgYW55IHZ1bG5lcmFiaWxpdGllcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMzoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjZ3JvdXBfYnBmX3JlcGxhY2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2Nncm91cC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvY2dyb3VwLmM9MTAyMT1zdGF0aWMgYm9vbCBjZ3JvdXBfYnBmX3N0b3JhZ2VzX2NvbXBhdGlibGUoc3RydWN0IGJwZl9wcm9nICpvbGRfcHJvZyxcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTEwMzUtLyoqXG5rZXJuZWwvYnBmL2Nncm91cC5jOjEwMzY6ICogX19jZ3JvdXBfYnBmX3JlcGxhY2UoKSAtIFJlcGxhY2UgbGluayYjMzk7cyBwcm9ncmFtIGFuZCBwcm9wYWdhdGUgdGhlIGNoYW5nZVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMDM3LSAqICAgICAgICAgICAgICAgICAgICAgICAgICB0byBkZXNjZW5kYW50c1xuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtMTA0NC0gKi9cbmtlcm5lbC9icGYvY2dyb3VwLmM6MTA0NTpzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9yZXBsYWNlKHN0cnVjdCBjZ3JvdXAgKmNncnAsXG5rZXJuZWwvYnBmL2Nncm91cC5jLTEwNDYtXHRcdFx0XHRzdHJ1Y3QgYnBmX2Nncm91cF9saW5rICpsaW5rLFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtMTA4Mi1cbmtlcm5lbC9icGYvY2dyb3VwLmM6MTA4MzpzdGF0aWMgaW50IGNncm91cF9icGZfcmVwbGFjZShzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssIHN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2csXG5rZXJuZWwvYnBmL2Nncm91cC5jLTEwODQtXHRcdFx0ICAgICAgc3RydWN0IGJwZl9wcm9nICpvbGRfcHJvZylcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTExMDAtXHR9XG5rZXJuZWwvYnBmL2Nncm91cC5jOjExMDE6XHRyZXQgPSBfX2Nncm91cF9icGZfcmVwbGFjZShjZ19saW5rLVx1MDAzZWNncm91cCwgY2dfbGluaywgbmV3X3Byb2cpO1xua2VybmVsL2JwZi9jZ3JvdXAuYy0xMTAyLW91dF91bmxvY2s6XG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYz0xNTE2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2xpbmtfb3BzIGJwZl9jZ3JvdXBfbGlua19sb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtMTUxOS1cdC5kZXRhY2ggPSBicGZfY2dyb3VwX2xpbmtfZGV0YWNoLFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxNTIwOlx0LnVwZGF0ZV9wcm9nID0gY2dyb3VwX2JwZl9yZXBsYWNlLFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xNTIxLVx0LnNob3dfZmRpbmZvID0gYnBmX2Nncm91cF9saW5rX3Nob3dfZmRpbmZvLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEzOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwNjMKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIHRoZSBCUEYgTGluayBVcGRhdGUgTWVjaGFuaXNtKioKClJpZ2h0LCBzbyBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IHdoZXJlIHRoaXMgYC51cGRhdGVfcHJvZ2AgY2FsbGJhY2sgaXMgb3JpZ2luYXRpbmcgZnJvbS4gSSBpbW1lZGlhdGVseSBqdW1wIHRvIHRoZSBsaWtlbHkgc3VzcGVjdDogdGhlIGBicGZfbGlua191cGRhdGVgIGZ1bmN0aW9uLiBJdCBtYWtlcyBzZW5zZSwgZ2l2ZW4gdGhlIG5hbWUsIHRoYXQgdGhpcyBpcyB0aGUgZW50cnkgcG9pbnQuIE5vdywgSSBuZWVkIHRvIGNvbmZpcm0gd2hlcmUgYGJwZl9saW5rX3VwZGF0ZWAgaXMgZGVmaW5lZCDigJMgSSYjMzk7bGwgYmUgbG9va2luZyBpbiB0aGUga2VybmVsJiMzOTtzIEJQRiBzdWJzeXN0ZW0sIHByb2JhYmx5IGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2Agb3Igc29tZXRoaW5nIHNpbWlsYXIsIGZvciB0aGUgQyBzb3VyY2UuIE15IG5leHQgc3RlcCB3aWxsIGJlIHRvIGV4YW1pbmUgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoYXQgZnVuY3Rpb24uIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGludmVzdGlnYXRpb24gYmVnaW5zIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEzOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2xpbmtfdXBkYXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEzOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzMTcKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqRm9jdXNpbmcgSW46IFRoZSBgbGlua191cGRhdGVgIE15c3RlcnkqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZS4uLiAqY2xpY2sgY2xpY2sqLi4uIFJpZ2h0LCBJIG5lZWQgdG8gZ2V0IHRvIHRoZSBjb3JlIG9mIHRoaXMuIEkmIzM5O3ZlIGJlZW4gc2NyYXRjaGluZyBteSBoZWFkIGFib3V0IHRoaXMgYmVoYXZpb3IsIGFuZCBJIHRoaW5rIEkmIzM5O3ZlIGp1c3QgcGlubmVkIGRvd24gd2hlcmUgdGhlIHJlbGV2YW50IGNvZGUgbGl2ZXMuIEl0JiMzOTtzIHRoZSBgbGlua191cGRhdGVgIGZ1bmN0aW9uLiBBbmQgbm90IGp1c3QgdGhhdCwgaXQmIzM5O3Mgc3BlY2lmaWNhbGx5IHdpdGhpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgLiBBaCwgeWVzLCB0aGUgc3lzdGVtIGNhbGwgaW50ZXJmYWNlIGZvciBCUEYgb3BlcmF0aW9ucy4gVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlIGdpdmVuIHRoZSBjb250ZXh0IG9mIHdoYXQgSSB3YXMgbG9va2luZyBhdC4gTm93IHRoZSBpbnZlc3RpZ2F0aW9uIGNhbiByZWFsbHkgYmVnaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEzOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VwZGF0ZV9wcm9nJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zeXNjYWxsLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zeXNjYWxsLmM9NTk4MT1zdGF0aWMgaW50IGxpbmtfdXBkYXRlKHVuaW9uIGJwZl9hdHRyICphdHRyKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYwMjEtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MDIyOlx0aWYgKGxpbmstXHUwMDNlb3BzLVx1MDAzZXVwZGF0ZV9wcm9nKVxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjAyMzpcdFx0cmV0ID0gbGluay1cdTAwM2VvcHMtXHUwMDNldXBkYXRlX3Byb2cobGluaywgbmV3X3Byb2csIG9sZF9wcm9nKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYwMjQtXHRlbHNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEzOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2NTcKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzMDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRoaW5raW5nIGFib3V0IGhvdyB0byBhcHByb2FjaCBmdXp6aW5nIGl0LiBUaGUga2V5IGhlcmUgc2VlbXMgdG8gYmUgYEJQRl9MSU5LX1VQREFURWAg4oCTIHRoYXQmIzM5O3MgaG93IHdlJiMzOTtyZSByZWFjaGluZyB0aGlzIGNvZGUuIFRoZSBwYXRjaCBzcGVjaWZpY2FsbHkgYWRkcyBhIGNoZWNrIHdpdGhpbiBgX19jZ3JvdXBfYnBmX3JlcGxhY2VgLCB3aGljaCBpcyBjYWxsZWQgYnkgYGNncm91cF9icGZfcmVwbGFjZWAuIFRoaXMgZmVlbHMgbGlrZSBwcmltZSBmdXp6aW5nIHRlcnJpdG9yeS4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmb2N1cyBvbiBgY2dyb3VwX2JwZl9yZXBsYWNlYCBvciBgX19jZ3JvdXBfYnBmX3JlcGxhY2VgLiBCdXQgd2FpdCwgYF9fY2dyb3VwX2JwZl9yZXBsYWNlYCBpcyBzdGF0aWMsIHdoaWNoIGNhbiBtYWtlIHRoaW5ncyB0cmlja3kuIEFuZCBgY2dyb3VwX2JwZl9yZXBsYWNlYCBpcyBhbHNvIHN0YXRpYywgYnV0IGl0JiMzOTtzIHVzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyLiBJbnRlcmVzdGluZy4uLiBMZXQgbWUganVzdCBjb25maXJtIGlmIGBjZ3JvdXBfYnBmX3JlcGxhY2VgIGlzIGluZGVlZCBzdGF0aWMuIFllcCwgaXQgaXMuIEFoLCBidXQgaG9sZCBvbiwgZXZlbiB0aG91Z2ggYGNncm91cF9icGZfcmVwbGFjZWAgaXMgc3RhdGljLCBpdCYjMzk7cyBhbiBBUEkgZW50cnlwb2ludCBmb3IgYGJwZl9saW5rX29wc2AuIE9rYXksIHRoYXQmIzM5O3MgaW1wb3J0YW50IHRvIHJlbWVtYmVyLgoKTGV0IG1lIHNlZSBpZiB0aGVyZSBhcmUgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhpcy4uLiBgYnBmX2Nncm91cF9saW5rX2xvcHNgIGlzIHN0YXRpYywgdG9vLiBBbHJpZ2h0LCBiYWNrIHRvIGBjZ3JvdXBfYnBmX3JlcGxhY2VgLiBJdCYjMzk7cyBzdGF0aWMsIHNvIGlzIGl0IGlubGluZWQ/IFByb2JhYmx5IG5vdCwgZ2l2ZW4gaXRzIGFkZHJlc3MgaXMgYmVpbmcgdGFrZW4uIE5vdywgd2hhdCBhYm91dCB0aGUgdXBkYXRlIHByb2Nlc3MgaXRzZWxmPyBMZXQgbWUgbG9vayBpbnRvIGBicGZfbGlua191cGRhdGVgIG9yIGp1c3QgYGxpbmtfdXBkYXRlYC4gQWgsIGBsaW5rX3VwZGF0ZWAgaXMgc3RhdGljIGFzIHdlbGwuIE9rYXksIHRoZSByZWxldmFudCBzeXNjYWxsIGVudHJ5IGlzIGBzeXNfYnBmYC4gU28gYGNncm91cF9icGZfcmVwbGFjZWAgaXMgc3RpbGwgYSBzb2xpZCBmb2N1cyBzeW1ib2wuCgpUbyBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZywgSSYjMzk7bSBnb2luZyB0byBzY2FuIGBrZXJuZWwvYnBmL2Nncm91cC5jYCBmb3IgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZSBjYWxsIGdyYXBoIGFuZCBwb3RlbnRpYWwgYXR0YWNrIHN1cmZhY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEzOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XmludCBjZ3JvdXBfYnBmX3JlcGxhY2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2Nncm91cC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTM6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTQ0MQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgdGhlIGNncm91cF9icGZfcmVwbGFjZSBTaWduYXR1cmUqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgY2dyb3VwX2JwZl9yZXBsYWNlYCBmdW5jdGlvbi4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgaXRzIHNpZ25hdHVyZS4gSSB3YW50IHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIGlucHV0IGFyZ3VtZW50cyBhbmQgdGhlIHJldHVybiB2YWx1ZS4gV2hhdCBraW5kIG9mIGRhdGEgc3RydWN0dXJlcyBkb2VzIGl0IGV4cGVjdD8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIHBvdGVudGlhbCBwaXRmYWxscyBvciBhcmVhcyB3aGVyZSBlcnJvcnMgY291bGQgb2NjdXIgYmFzZWQgb24gdGhlIHR5cGUgZGVmaW5pdGlvbnMgYWxvbmU/IFRoaW5raW5nIGFib3V0IHBvc3NpYmxlIHJhY2UgY29uZGl0aW9ucyBpcyBhbHdheXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGFzIHdlbGwuIEkmIzM5O20gbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgdGhlIHNjb3BlIG9mIHRoZSBvcGVyYXRpb24g4oCTIGlzIHRoaXMgYSBnbG9iYWwgcmVwbGFjZW1lbnQsIG9yIGRvZXMgaXQgb3BlcmF0ZSBhdCBhIHNwZWNpZmljIGNncm91cCBsZXZlbD8gSXMgaXQgZ29pbmcgdG8gYmUgYSBzaW1wbGUgcmVwbGFjZW1lbnQsIG9yIG1vcmUgY29tcGxleD8gQXJlIHRoZXJlIGFueSB1bnVzdWFsIHR5cGVzIG9yIHN0cnVjdHVyZXMgdGhhdCByZXF1aXJlIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbj8gSSBuZWVkIHRvIGJ1aWxkIGEgbWVudGFsIG1vZGVsIG9mIGhvdyB0aGlzIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBCUEYgc3Vic3lzdGVtIHdpdGhpbiB0aGUgY29udGV4dCBvZiBjZ3JvdXBzLiBLbm93aW5nIHRoYXQgd2lsbCB0ZWxsIG1lIGhvdyB0byBzdGFydCBkaWdnaW5nIGRlZXBlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTM6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2dyb3VwX2JwZl9yZXBsYWNlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9jZ3JvdXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2Nncm91cC5jPTEwMjE9c3RhdGljIGJvb2wgY2dyb3VwX2JwZl9zdG9yYWdlc19jb21wYXRpYmxlKHN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2csXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMDM1LS8qKlxua2VybmVsL2JwZi9jZ3JvdXAuYzoxMDM2OiAqIF9fY2dyb3VwX2JwZl9yZXBsYWNlKCkgLSBSZXBsYWNlIGxpbmsmIzM5O3MgcHJvZ3JhbSBhbmQgcHJvcGFnYXRlIHRoZSBjaGFuZ2Vcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTAzNy0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gZGVzY2VuZGFudHNcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTEwNDQtICovXG5rZXJuZWwvYnBmL2Nncm91cC5jOjEwNDU6c3RhdGljIGludCBfX2Nncm91cF9icGZfcmVwbGFjZShzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMDQ2LVx0XHRcdFx0c3RydWN0IGJwZl9jZ3JvdXBfbGluayAqbGluayxcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTEwODItXG5rZXJuZWwvYnBmL2Nncm91cC5jOjEwODM6c3RhdGljIGludCBjZ3JvdXBfYnBmX3JlcGxhY2Uoc3RydWN0IGJwZl9saW5rICpsaW5rLCBzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nLFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMDg0LVx0XHRcdCAgICAgIHN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2cpXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMTAwLVx0fVxua2VybmVsL2JwZi9jZ3JvdXAuYzoxMTAxOlx0cmV0ID0gX19jZ3JvdXBfYnBmX3JlcGxhY2UoY2dfbGluay1cdTAwM2VjZ3JvdXAsIGNnX2xpbmssIG5ld19wcm9nKTtcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTEwMi1vdXRfdW5sb2NrOlxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9MTUxNj1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9saW5rX29wcyBicGZfY2dyb3VwX2xpbmtfbG9wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE1MTktXHQuZGV0YWNoID0gYnBmX2Nncm91cF9saW5rX2RldGFjaCxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTUyMDpcdC51cGRhdGVfcHJvZyA9IGNncm91cF9icGZfcmVwbGFjZSxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTUyMS1cdC5zaG93X2ZkaW5mbyA9IGJwZl9jZ3JvdXBfbGlua19zaG93X2ZkaW5mbyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTM6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjIyMgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDEwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIEZvY3VzIFN5bWJvbHMgaW4gdGhlIEJQRiBTdWJzeXN0ZW0qKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgdG8gcmVmaW5lIG91ciBzeW1ib2wgaWRlbnRpZmljYXRpb24gc3RyYXRlZ3kgd2l0aGluIHRoZSBCUEYgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgZm9yIGFuYWx5c2lzIGFuZCBwb3RlbnRpYWxseSBkZWJ1Z2dpbmcuIEl0JiMzOTtzIGJlY29taW5nIGNsZWFyIHRoYXQgcmVseWluZyBvbiBpbmxpbmluZyBmb3IgaWRlbnRpZnlpbmcga2V5IGZ1bmN0aW9ucyBtaWdodCBiZSBwcm9ibGVtYXRpYy4gTGV0IG1lIGFydGljdWxhdGUgd2hhdCBJJiMzOTttIHRoaW5raW5nLi4uCgpHaXZlbiB0aGF0IGBjZ3JvdXBfYnBmX3JlcGxhY2VgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLCBidXQgd2UmIzM5O3JlIHRha2luZyBpdHMgYWRkcmVzcywgaXQmIzM5O3MgdmlydHVhbGx5IGd1YXJhbnRlZWQgdGhhdCB0aGUgY29tcGlsZXIgd29uJiMzOTt0IGlubGluZSBpdC4gVGhhdCBtYWtlcyBpdCBhIHNvbGlkIGNhbmRpZGF0ZSB0byBhY3QgYXMgYSAqZm9jdXMgc3ltYm9sKiDigJMgc29tZXRoaW5nIHdlIGNhbiBlYXNpbHkgbG9jYXRlIGFuZCByZWFzb24gYWJvdXQuIEl0JiMzOTtzIGEgdXNlZnVsIG1hcmtlciB3aXRoaW4gdGhlIGNvbXBpbGVkIGNvZGUuCgpUaGVuIEkgYW0gY29uc2lkZXJpbmcgYGNncm91cF9icGZfc3RvcmFnZXNfY29tcGF0aWJsZWAuIFNpbmNlIHRoYXQgaXMgYWxzbyBzdGF0aWMsIEkmIzM5O20gYSBiaXQgbGVzcyBjZXJ0YWluLiBUaGVyZSBpcyBhIGNoYW5jZSBpdCAqY291bGQqIGJlIGlubGluZWQuIEkgbmVlZCB0byBiZSBjYXJlZnVsIHdpdGggdGhhdCBvbmUuCgpJIG5lZWQgdG8gY29uZmlybSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGZ1bmN0aW9ucyB0aGF0IHdpbGwgc2VydmUgd2VsbC4gVGltZSB0byBpbnZlc3RpZ2F0ZSBmb3Igb3RoZXIgcG90ZW50aWFsbHkgbm9uLWlubGluZWQgZnVuY3Rpb25zLiBJIHNlZSBgYnBmX2Nncm91cF9saW5rX2xvcHNgIGlzIGFsc28gc3RhdGljLCBzbyBJIGNhbiBzdHJpa2UgdGhhdCBvbmUgb2ZmIHRoZSBsaXN0LgoKVGhlIHF1ZXN0aW9uIHRoZW4gaXMsIHdoYXQgYWJvdXQgYGNncm91cF9icGZfcHJvZ19hdHRhY2hgPyBJIG5lZWQgdG8gbG9vayBpbnRvIHRoaXMgb25lIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTM6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2dyb3VwX2JwZl9wcm9nX2F0dGFjaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvY2dyb3VwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9jZ3JvdXAuYz0xMzY5PXN0YXRpYyBpbnQgY2dyb3VwX2JwZl9xdWVyeShzdHJ1Y3QgY2dyb3VwICpjZ3JwLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTEzNzktXG5rZXJuZWwvYnBmL2Nncm91cC5jOjEzODA6aW50IGNncm91cF9icGZfcHJvZ19hdHRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG5rZXJuZWwvYnBmL2Nncm91cC5jLTEzODEtXHRcdFx0ICAgZW51bSBicGZfcHJvZ190eXBlIHB0eXBlLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEzOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3ODgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nIGFzIGFuIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbCBjZ3JvdXAgQlBGIEludGVyYWN0aW9uKioKCkFscmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoYCBmdW5jdGlvbiDigJMgYW5kIGltbWVkaWF0ZWx5IEkgbm90aWNlIGl0JiMzOTtzICpub3QqIHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEl0IGltcGxpZXMgaXQgbWlnaHQgYmUgY2FsbGVkIGZyb20gc29tZXdoZXJlIG91dHNpZGUgdGhlIGltbWVkaWF0ZSBzY29wZSBvZiB3aGF0IEkmIzM5O20gY3VycmVudGx5IGxvb2tpbmcgYXQuIEhvd2V2ZXIsIHRoZSBwYXRjaCBpbiBxdWVzdGlvbiBzZWVtcyB0byBiZSBmb2N1c2luZyBvbiBjaGFuZ2VzIHdpdGhpbiBgX19jZ3JvdXBfYnBmX3JlcGxhY2VgLiBOb3csIHRoaXMgYF9fY2dyb3VwX2JwZl9yZXBsYWNlYCBmdW5jdGlvbiBpcywgYXMgZmFyIGFzIEkgY2FuIHNlZSwgZGlyZWN0bHkgY2FsbGVkIGJ5IGBjZ3JvdXBfYnBmX3JlcGxhY2VgLCB0aGF0JiMzOTtzIHRoZSBvYnZpb3VzIGxpbmsuCgpCdXQgdGhlIHF1ZXN0aW9uIGlzLCAqd2hlcmUgZWxzZSogbWlnaHQgYF9fY2dyb3VwX2JwZl9yZXBsYWNlYCBiZSBjYWxsZWQ/IElmIHRoaXMgZnVuY3Rpb24gaXMgdXNlZCBlbHNld2hlcmUsIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBwYXRjaCBiZWNvbWUgc2lnbmlmaWNhbnRseSB3aWRlci4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHRoZSBjYWxsIGdyYXBoLiBBIHF1aWNrIGdyZXAgZm9yIGNhbGxzIHRvIGBfX2Nncm91cF9icGZfcmVwbGFjZWAgc2hvdWxkIGRvIHRoZSB0cmljaywgb3IgYmV0dGVyIHlldCwgSSBjYW4gY2hlY2sgdGhlIHN5bWJvbCB0YWJsZSBkaXJlY3RseS4gVGhhdCB3b3VsZCBiZSB0aGUgZmlyc3Qgc3RlcCBpbiBkZXRlcm1pbmluZyB0aGUgaW1wYWN0IG9mIHRoaXMgY2hhbmdlLiBJcyB0aGlzIGEgbG9jYWxpemVkIGZpeCwgb3IgZG9lcyBpdCBoYXZlIHRoZSBwb3RlbnRpYWwgdG8gcmlwcGxlIG91dHdhcmQ/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEzOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fY2dyb3VwX2JwZl9yZXBsYWNlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9jZ3JvdXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2Nncm91cC5jPTEwMjE9c3RhdGljIGJvb2wgY2dyb3VwX2JwZl9zdG9yYWdlc19jb21wYXRpYmxlKHN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2csXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMDM1LS8qKlxua2VybmVsL2JwZi9jZ3JvdXAuYzoxMDM2OiAqIF9fY2dyb3VwX2JwZl9yZXBsYWNlKCkgLSBSZXBsYWNlIGxpbmsmIzM5O3MgcHJvZ3JhbSBhbmQgcHJvcGFnYXRlIHRoZSBjaGFuZ2Vcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTAzNy0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gZGVzY2VuZGFudHNcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTEwNDQtICovXG5rZXJuZWwvYnBmL2Nncm91cC5jOjEwNDU6c3RhdGljIGludCBfX2Nncm91cF9icGZfcmVwbGFjZShzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMDQ2LVx0XHRcdFx0c3RydWN0IGJwZl9jZ3JvdXBfbGluayAqbGluayxcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTEwODM9c3RhdGljIGludCBjZ3JvdXBfYnBmX3JlcGxhY2Uoc3RydWN0IGJwZl9saW5rICpsaW5rLCBzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nLFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtMTEwMC1cdH1cbmtlcm5lbC9icGYvY2dyb3VwLmM6MTEwMTpcdHJldCA9IF9fY2dyb3VwX2JwZl9yZXBsYWNlKGNnX2xpbmstXHUwMDNlY2dyb3VwLCBjZ19saW5rLCBuZXdfcHJvZyk7XG5rZXJuZWwvYnBmL2Nncm91cC5jLTExMDItb3V0X3VubG9jazpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTM6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzQ5MgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IG93biBleHBlcnQgcGVyc3BlY3RpdmU6CgoqKkZvY3VzaW5nIG9uIGBjZ3JvdXBfYnBmX3JlcGxhY2VgKioKCkFscmlnaHQsIGl0JiMzOTtzIGNsZWFyIHRoZSBwcm9ibGVtIHNwYWNlIGNlbnRlcnMgYXJvdW5kIGBjZ3JvdXBfYnBmX3JlcGxhY2VgLiBUaGF04oCZcyB0aGUga2V5IHN5bWJvbCB3ZSBuZWVkIHRvIGhvbmUgaW4gb24uIEl0JiMzOTtzIHRoZSByaWdodCBlbnRyeSBwb2ludCBmb3IgdGhpcyBpbnZlc3RpZ2F0aW9uLgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBlc3NlbnRpYWwgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB3aGF0IGJ1aWxkIGZsYWdzIGFyZSByZWxldmFudCBoZXJlLiBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgYGtlcm5lbC9icGYvY2dyb3VwLmNgIGlzIHRoZSBsaWtlbHkgc291cmNlIGZpbGUgZm9yIHRoaXMgZnVuY3Rpb25hbGl0eS4gQW5kIHRoYXQgbW9kdWxlIGlzLCBvZiBjb3Vyc2UsIG9ubHkgaW5jbHVkZWQgaW4gdGhlIGtlcm5lbCBidWlsZCBpZiBgQ09ORklHX0NHUk9VUF9CUEZgIGlzIGVuYWJsZWQuIFRpbWUgdG8gY29uZmlybSB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEzOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Nncm91cFxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGU9MzU9ZW5kaWZcbmtlcm5lbC9icGYvTWFrZWZpbGU6MzY6b2JqLSQoQ09ORklHX0NHUk9VUF9CUEYpICYjNDM7PSBjZ3JvdXAub1xua2VybmVsL2JwZi9NYWtlZmlsZS0zNy1pZmVxICgkKENPTkZJR19JTkVUKSx5KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMzoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODI0CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkNoZWNraW5nIHRoZSBDR1JPVVBfQlBGIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgc28gYENHUk9VUF9CUEZgIGlzIHRoZSBmbGFnIHdlIG5lZWQgZW5hYmxlZC4gQmVmb3JlIEkgZGl2ZSBpbnRvIGFueXRoaW5nLCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB2ZXJpZnkgaXRzIGRlcGVuZGVuY2llcy4gSXQmIzM5O3MgY3J1Y2lhbCwgaW4gYW55IGtlcm5lbCBjb25maWd1cmF0aW9uLCB0byB1bmRlcnN0YW5kIHdoYXQgb3RoZXIgY29tcG9uZW50cyBhcmUgcmVxdWlyZWQgb3IgdHJpZ2dlcmVkIGJ5IHRoaXMgb25lLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG92ZXJsb29raW5nIGFueSB1bmRlcmx5aW5nIGRlcGVuZGVuY2llcyB0aGF0IGNvdWxkIHRyaXAgbWUgdXAgbGF0ZXIuIEEgcXVpY2sgY2hlY2sgb2YgZGVwZW5kZW5jaWVzIGlzIGVzc2VudGlhbCBmb3IgYXZvaWRpbmcgdW5leHBlY3RlZCBpc3N1ZXMgZG93biB0aGUgbGluZS4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBzdGVwIGZvciBzdGFiaWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEzOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDR1JPVVBfQlBGJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xMzQxPWNvbmZpZyBDR1JPVVBfUEVSRlxuLS1cbmluaXQvS2NvbmZpZy0xMzUxLVxuaW5pdC9LY29uZmlnOjEzNTI6Y29uZmlnIENHUk9VUF9CUEZcbmluaXQvS2NvbmZpZy0xMzUzLVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBlQlBGIHByb2dyYW1zIGF0dGFjaGVkIHRvIGNncm91cHNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTM6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODEwNwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBDR1JPVVBfQlBGIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGBDR1JPVVBfQlBGYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7V2hhdCBvdGhlciBrZXJuZWwgZmVhdHVyZXMsIHN1YnN5c3RlbXMsIG9yIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyAqcmVseSogb24gdGhpcz8mIzM0OyBJIHdhbnQgdG8gdHJhY2UgdGhlIGRlcGVuZGVuY2llcy4gVGhpcyBpc24mIzM5O3QganVzdCBhYm91dCBrbm93aW5nIGlmIGEgbW9kdWxlIG5lZWRzIGl0LCBidXQgYWJvdXQgdW5kZXJzdGFuZGluZyB0aGUgKmFyY2hpdGVjdHVyYWwgY2hvaWNlcyogdGhhdCBoYXZlIGJlZW4gbWFkZSBhbmQgd2hhdCYjMzk7cyBlbmFibGVkIGlmIGBDR1JPVVBfQlBGYCBpcyBhY3RpdmF0ZWQuCgpTcGVjaWZpY2FsbHksIEkgd2FudCB0byBjb25zaWRlcjoKCiogICAqKlNlY3VyaXR5IENvbnRleHRzOioqIEhvdyBkb2VzIGBDR1JPVVBfQlBGYCBpbnRlcmFjdCB3aXRoIGNhcGFiaWxpdGllcywgTFNNcyAobGlrZSBTRUxpbnV4L0FwcEFybW9yKSwgYW5kIHNlY2NvbXA/IEFyZSB0aGVyZSBhbnkgc3VidGxlIGNoYW5nZXMgdG8gdGhlIHNlY3VyaXR5IG1vZGVsIHdoZW4gaXQmIzM5O3MgZW5hYmxlZD8gRG9lcyBpdCBwcm92aWRlIGFueSBtaXRpZ2F0aW9uIGZvciBvdGhlciB2dWxuZXJhYmlsaXRpZXMgaW4gdGhlIGtlcm5lbD8KKiAgICoqUGVyZm9ybWFuY2UgaW1wbGljYXRpb25zOioqIEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgcGVyZm9ybWFuY2UgaGl0cyBmcm9tIGVuYWJsaW5nIG9yIGRpc2FibGluZyB0aGlzPyBXaGF0IGhhcHBlbnMgdG8gdGhlIG90aGVyIGZlYXR1cmVzPwoqICAgKipSZXNvdXJjZSBNYW5hZ2VtZW50OioqIEFyZSB0aGVyZSBhbnkgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGNncm91cCBjb250cm9sbGVycyAoY3B1LCBtZW1vcnksIG5ldHdvcmssIGV0Yy4pPyBBbnkgb3ZlcmxhcHMgaW4gZnVuY3Rpb24/CiogICAqKlRvb2xpbmc6KiogV2hhdCB0b29saW5nIGlzIHJlcXVpcmVkIHRvIGVmZmVjdGl2ZWx5ICp1c2UqIGBDR1JPVVBfQlBGYD8gQXJlIHRoZXJlIHVzZXJzcGFjZSBsaWJyYXJpZXMsIGNvbW1hbmQtbGluZSB1dGlsaXRpZXMsIG9yIG1vbml0b3JpbmcgZnJhbWV3b3JrcyB0aGF0IGFyZSBlaXRoZXIgbWFuZGF0b3J5IG9yIGhpZ2hseSByZWNvbW1lbmRlZD8gSG93IGRvZXMgdGhpcyBhZmZlY3QgbXkgcHJlZmVycmVkIGRlYnVnZ2luZyB0b29scz8KCkJhc2ljYWxseSwgSSYjMzk7bSBkaWdnaW5nIGZvciB0aGUgJiMzNDt3aHkmIzM0OyBhbmQgJiMzNDtob3cmIzM0OyBiZWhpbmQgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbi4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgcmlwcGxlIGVmZmVjdHMg4oCTIHRoZSB0aGluZ3MgdGhhdCBjaGFuZ2UsIHRoZSB0cmFkZS1vZmZzIHRoYXQgaGF2ZSBiZWVuIG1hZGUsIGFuZCB0aGUgb3ZlcmFsbCBkZXNpZ24gcGhpbG9zb3BoeSB0aGF0JiMzOTtzIGRyaXZpbmcgaXRzIGluY2x1c2lvbi4gVGltZSB0byBkZWx2ZSBpbnRvIHRoZSBjb2RlIGFuZCBkb2NzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMzoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzNTIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTM1MjpcdGNvbmZpZyBDR1JPVVBfQlBGXG4xMzUzOlx0XHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIGVCUEYgcHJvZ3JhbXMgYXR0YWNoZWQgdG8gY2dyb3Vwc1wmIzM0O1xuMTM1NDpcdFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxuMTM1NTpcdFx0c2VsZWN0IFNPQ0tfQ0dST1VQX0RBVEFcbjEzNTY6XHRcdGhlbHBcbjEzNTc6XHRcdCAgQWxsb3cgYXR0YWNoaW5nIGVCUEYgcHJvZ3JhbXMgdG8gYSBjZ3JvdXAgdXNpbmcgdGhlIGJwZigyKVxuMTM1ODpcdFx0ICBzeXNjYWxsIGNvbW1hbmQgQlBGX1BST0dfQVRUQUNILlxuMTM1OTpcdFxuMTM2MDpcdFx0ICBJbiB3aGljaCBjb250ZXh0IHRoZXNlIHByb2dyYW1zIGFyZSBhY2Nlc3NlZCBkZXBlbmRzIG9uIHRoZSB0eXBlXG4xMzYxOlx0XHQgIG9mIGF0dGFjaG1lbnQuIEZvciBpbnN0YW5jZSwgcHJvZ3JhbXMgdGhhdCBhcmUgYXR0YWNoZWQgdXNpbmdcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTM6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODcwMQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQlBGIGFuZCBjZ3JvdXAgRnVuY3Rpb25hbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYENHUk9VUF9CUEZgIGFuZCByZWFsaXplIGl0JiMzOTtzIGludHJpbnNpY2FsbHkgbGlua2VkIHRvIGBCUEZfU1lTQ0FMTGAuICBUaG9zZSBhcmUgdGhlIGtleSBjb25maWd1cmF0aW9ucyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLiBMZXQmIzM5O3MgZGVsdmUgZGVlcGVyIGludG8gdGhpcy4gSSB3YW50IHRvIGNvbmZpcm0gdGhhdCB0aGUgYGNncm91cF9icGZfcmVwbGFjZWAgZnVuY3Rpb24gaXMgbm90IGlubGluZWQuIEl0JiMzOTtzIHVzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyIHdpdGhpbiBgYnBmX2Nncm91cF9saW5rX2xvcHNgLCBzbyBpbmxpbmluZyBpc24mIzM5O3QgcG9zc2libGUsIHdoaWNoIGlzIGdvb2QuICBIb2xkIG9uLCB0aG91Z2gg4oCTIGl0JiMzOTtzICpzdGF0aWMqISAgQnV0IHdlJiMzOTtyZSB0YWtpbmcgaXRzIGFkZHJlc3MuICBUaGF0IG1ha2VzIGl0IGEgZ3JlYXQgc3ltYm9sIHRvIGZvY3VzIG9uLiAKCk5vdywgSSYjMzk7bSBnb2luZyB0byBzY2FuIHRoZSBga2VybmVsL2JwZi9jZ3JvdXAuY2AgZmlsZSBmb3Igb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGlzIHByb2Nlc3MuIExldCBtZSBjaGVjay4uLiBIbW0sIHdoYXQgYWJvdXQgYGJwZl9jZ3JvdXBfbGlua191cGRhdGVgPyBOb3BlLiBJdCBsb29rcyBsaWtlIGBjZ3JvdXBfYnBmX3JlcGxhY2VgIGlzIHRoZSBjb3JlIGZ1bmN0aW9uIGhlcmUuIExldCYjMzk7cyB3aWRlbiB0aGUgc2NvcGUuIFdoYXQgb3RoZXIgZnVuY3Rpb25zIGV4aXN0IG91dHNpZGUgb2YgdGhlIGBjZ3JvdXAuY2AgZmlsZT8gSSBzZWUgYGJwZl9saW5rX3VwZGF0ZWAgaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYC4gT2theSwgdGhhdCYjMzk7cyBzb21ldGhpbmcgdG8gaW52ZXN0aWdhdGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEzOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2xpbmtfdXBkYXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zeXNjYWxsLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMzoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MjMzCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOgoKKipJbnRlcm5hbCBNb25vbG9ndWU6IFJldmlzaXRpbmcgS2VybmVsIEJQRiBDb2RlKioKCkFscmlnaHQsIGhvbGQgb24gYSBzZWNvbmQuIERpZG4mIzM5O3QgSSAqanVzdCogZ28gdGhyb3VnaCBgbGlua191cGRhdGVgPyBJJiMzOTttIHByZXR0eSBzdXJlIEkgYWxyZWFkeSBwb2tlZCBhcm91bmQgaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYCwgc28gSSBzaG91bGQgYmUgYWJsZSB0byByZWNhbGwgdGhvc2UgcGFydHMuIEkgZmVlbCBsaWtlIEkmIzM5O3ZlIGp1c3Qgd2FzdGVkIG15IHRpbWUuIExldCBtZSBjaGVjayB0aGUgbm90ZXMgSSBtYWRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMzoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsaW5rX3VwZGF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3lzY2FsbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3lzY2FsbC5jPTU4NDQ9c3RhdGljIGludCBsaW5rX2NyZWF0ZSh1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTk0OS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU5NTA6c3RhdGljIGludCBsaW5rX3VwZGF0ZV9tYXAoc3RydWN0IGJwZl9saW5rICpsaW5rLCB1bmlvbiBicGZfYXR0ciAqYXR0cilcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5NTEte1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5NTQtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1OTU1Olx0bmV3X21hcCA9IGJwZl9tYXBfZ2V0KGF0dHItXHUwMDNlbGlua191cGRhdGUubmV3X21hcF9mZCk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01OTU2LVx0aWYgKElTX0VSUihuZXdfbWFwKSlcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01OTU4LVxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTk1OTpcdGlmIChhdHRyLVx1MDAzZWxpbmtfdXBkYXRlLmZsYWdzIFx1MDAyNiBCUEZfRl9SRVBMQUNFKSB7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1OTYwOlx0XHRvbGRfbWFwID0gYnBmX21hcF9nZXQoYXR0ci1cdTAwM2VsaW5rX3VwZGF0ZS5vbGRfbWFwX2ZkKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5NjEtXHRcdGlmIChJU19FUlIob2xkX21hcCkpIHtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01OTY0LVx0XHR9XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1OTY1Olx0fSBlbHNlIGlmIChhdHRyLVx1MDAzZWxpbmtfdXBkYXRlLm9sZF9tYXBfZmQpIHtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5NjYtXHRcdHJldCA9IC1FSU5WQUw7XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTk3OC1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU5Nzk6I2RlZmluZSBCUEZfTElOS19VUERBVEVfTEFTVF9GSUVMRCBsaW5rX3VwZGF0ZS5vbGRfcHJvZ19mZFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTk4MC1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU5ODE6c3RhdGljIGludCBsaW5rX3VwZGF0ZSh1bmlvbiBicGZfYXR0ciAqYXR0cilcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5ODIte1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5OTAtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1OTkxOlx0ZmxhZ3MgPSBhdHRyLVx1MDAzZWxpbmtfdXBkYXRlLmZsYWdzO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNTk5Mi1cdGlmIChmbGFncyBcdTAwMjYgfkJQRl9GX1JFUExBQ0UpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTk5NC1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU5OTU6XHRsaW5rID0gYnBmX2xpbmtfZ2V0X2Zyb21fZmQoYXR0ci1cdTAwM2VsaW5rX3VwZGF0ZS5saW5rX2ZkKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5OTYtXHRpZiAoSVNfRVJSKGxpbmspKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5OTktXHRpZiAobGluay1cdTAwM2VvcHMtXHUwMDNldXBkYXRlX21hcCkge1xua2VybmVsL2JwZi9zeXNjYWxsLmM6NjAwMDpcdFx0cmV0ID0gbGlua191cGRhdGVfbWFwKGxpbmssIGF0dHIpO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNjAwMS1cdFx0Z290byBvdXRfcHV0X2xpbms7XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjAwMy1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYwMDQ6XHRuZXdfcHJvZyA9IGJwZl9wcm9nX2dldChhdHRyLVx1MDAzZWxpbmtfdXBkYXRlLm5ld19wcm9nX2ZkKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYwMDUtXHRpZiAoSVNfRVJSKG5ld19wcm9nKSkge1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYwMTAtXHRpZiAoZmxhZ3MgXHUwMDI2IEJQRl9GX1JFUExBQ0UpIHtcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYwMTE6XHRcdG9sZF9wcm9nID0gYnBmX3Byb2dfZ2V0KGF0dHItXHUwMDNlbGlua191cGRhdGUub2xkX3Byb2dfZmQpO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNjAxMi1cdFx0aWYgKElTX0VSUihvbGRfcHJvZykpIHtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MDE2LVx0XHR9XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MDE3Olx0fSBlbHNlIGlmIChhdHRyLVx1MDAzZWxpbmtfdXBkYXRlLm9sZF9wcm9nX2ZkKSB7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MDE4LVx0XHRyZXQgPSAtRUlOVkFMO1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTYzNTQ9c3RhdGljIGludCBfX3N5c19icGYoZW51bSBicGZfY21kIGNtZCwgYnBmcHRyX3QgdWF0dHIsIHVuc2lnbmVkIGludCBzaXplLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTY0OTUtXHRjYXNlIEJQRl9MSU5LX1VQREFURTpcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjY0OTY6XHRcdGVyciA9IGxpbmtfdXBkYXRlKFx1MDAyNmF0dHIpO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNjQ5Ny1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEzOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDg0CgkJCQkJCQlvdXRwdXQ6IDEwNwoJCQkJCQkJdGhvdWdodHM6IDg4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBCUEYgQ2dyb3VwIExpbmsgVXBkYXRlIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBoZXJlJiMzOTtzIG15IGJyZWFrZG93bi4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBsaWVzIHdpdGhpbiB0aGUgYEJQRl9MSU5LX1VQREFURWAgc3lzY2FsbCBoYW5kbGVyLCBzcGVjaWZpY2FsbHkgdGhlIGNncm91cC1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbjogYGNncm91cF9icGZfcmVwbGFjZWAuIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IGBjZ3JvdXBfYnBmX3JlcGxhY2VgIGlzIHN0YXRpYy4gSW5pdGlhbGx5LCB0aGF0IGdhdmUgbWUgcGF1c2UgYmVjYXVzZSBJIHdvbmRlcmVkIGlmIGl0IGNvdWxkIGJlIGEgdmFsaWQgZm9jdXMgc3ltYm9sLCBidXQgdGhlbiBJIHJlbWVtYmVyZWQgc3l6a2FsbGVyIGhhbmRsZXMgc3RhdGljIGZ1bmN0aW9ucyBmaW5lIGlmIHRoZXkgYXJlIG5vdCBpbmxpbmVkLiBJbiB0aGlzIGNhc2UgaXQgaXMgYSBmdW5jdGlvbiBwb2ludGVyLgoKSSYjMzk7dmUgYWxzbyBkb3VibGUtY2hlY2tlZCB0aGF0IGBfX2Nncm91cF9icGZfcmVwbGFjZWAgaXMgYWxzbyBzdGF0aWMsIGFuZCBpdCBpcy4gRnVydGhlcm1vcmUsIGBjZ3JvdXBfYnBmX3JlcGxhY2VgIGlzIHRoZSBvbmx5IGNhbGxlciBvZiBgX19jZ3JvdXBfYnBmX3JlcGxhY2VgLgoKVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgY29tcGF0aWJpbGl0eSBjaGVjayBiZXR3ZWVuIHRoZSBjZ3JvdXAgc3RvcmFnZXMgb2YgdGhlIG9sZCBhbmQgbmV3IEJQRiBwcm9ncmFtcyBkdXJpbmcgYSBsaW5rIHJlcGxhY2VtZW50IHZpYSBgY2dyb3VwX2JwZl9zdG9yYWdlc19jb21wYXRpYmxlYCwgd2hpY2ggaXMgYSBjbGVhciBmdW5jdGlvbmFsIGNoYW5nZS4gSXQmIzM5O3MgZXNzZW50aWFsbHkgcHJldmVudGluZyBpbmNvbXBhdGlibGUgcHJvZ3JhbSBzd2Fwcy4gSXQgaXMgY2FsbGVkIGluIGBfX2Nncm91cF9icGZfcmVwbGFjZWAgZnJvbSBgY2dyb3VwX2JwZl9yZXBsYWNlYC4KClNvLCB0aGUgZm9jdXMgc3ltYm9sIHNob3VsZCBiZSBgY2dyb3VwX2JwZl9yZXBsYWNlYCwgYW5kIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgYXJlIGBDR1JPVVBfQlBGYCBhbmQgYEJQRl9TWVNDQUxMYCB0byByZWFjaCB0aGUgcmVsYXRlZCBjb2RlLgoKVGhlcmVmb3JlLCBteSBzdW1tYXJ5IGlzOgoqICAgKipXb3J0aEZ1enppbmc6KiogVHJ1ZQoqICAgKipSZWFzb25pbmc6KiogVGhlIHBhdGNoIGFkZHMgYSBjaGVjayB0byBwcmV2ZW50IHJlcGxhY2luZyBhIEJQRiBwcm9ncmFtIGluIGEgY2dyb3VwIGxpbmsgaWYgdGhlIG5ldyBwcm9ncmFtIGhhcyBkaWZmZXJlbnQgY2dyb3VwIHN0b3JhZ2VzIHRoYW4gdGhlIG9sZCBwcm9ncmFtLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIEJQRiBjZ3JvdXAgbGluayByZXBsYWNlbWVudCBsb2dpYywgcmVhY2hhYmxlIHZpYSB0aGUgQlBGX0xJTktfVVBEQVRFIHN5c2NhbGwuCiogICAqKkZvY3VzU3ltYm9sczoqKiBgY2dyb3VwX2JwZl9yZXBsYWNlYAoqICAgKipFbmFibGVDb25maWdzOioqIGBDR1JPVVBfQlBGYCwgYEJQRl9TWVNDQUxMYAoKTm93LCBJJiMzOTtsbCB1c2UgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBhbmQgbW92ZSBvbiB0byB0aGUgbmV4dCBwYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTM6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NHUk9VUF9CUEYmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjZ3JvdXBfYnBmX3JlcGxhY2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNvbXBhdGliaWxpdHkgY2hlY2sgZm9yIGNncm91cCBzdG9yYWdlcyB3aGVuIHJlcGxhY2luZyBhIEJQRiBwcm9ncmFtIGluIGEgY2dyb3VwIGxpbmsuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgQlBGIGNncm91cCBsaW5rIHJlcGxhY2VtZW50IGxvZ2ljLCByZWFjaGFibGUgdmlhIHRoZSBCUEZfTElOS19VUERBVEUgc3lzY2FsbCBjb21tYW5kLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDR1JPVVBfQlBGJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y2dyb3VwX2JwZl9yZXBsYWNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBjb21wYXRpYmlsaXR5IGNoZWNrIGZvciBjZ3JvdXAgc3RvcmFnZXMgd2hlbiByZXBsYWNpbmcgYSBCUEYgcHJvZ3JhbSBpbiBhIGNncm91cCBsaW5rLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIEJQRiBjZ3JvdXAgbGluayByZXBsYWNlbWVudCBsb2dpYywgcmVhY2hhYmxlIHZpYSB0aGUgQlBGX0xJTktfVVBEQVRFIHN5c2NhbGwgY29tbWFuZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTM6MTE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMzoxMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgc2ltcGxlIGNvbXBhdGliaWxpdHkgY2hlY2sgZm9yIEJQRiBjZ3JvdXAgc3RvcmFnZSBkdXJpbmcgcHJvZ3JhbSByZXBsYWNlbWVudC4gSXQgY29tcGFyZXMgZXhpc3RpbmcgZmllbGRzIGluIHRoZSBgYnBmX3Byb2ctXHUwMDNlYXV4YCBzdHJ1Y3R1cmUuIEl0IGRvZXMgbm90IGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMsIGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLCBvciB1c2UgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gY29udHJvbCBmbG93LiBBbnkgbWVtb3J5IGVycm9ycyByZWxhdGVkIHRvIHRoaXMgY2hhbmdlLCBzdWNoIGFzIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgb3IgdXNlLWFmdGVyLWZyZWUsIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNmM0ZDkyZjcwYmNkN2VjYjYyYWExYmMwNDhhNDU2MDYxMjdmMDA5MApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDcgMTM6MTA6MDkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2Nncm91cC5jIGIva2VybmVsL2JwZi9jZ3JvdXAuYwppbmRleCA0MzU1Y2NiNzhhOWM2Li41Y2M5YjJkOTJmZDU4IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2Nncm91cC5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvY2dyb3VwLmMKQEAgLTEwMTgsNiAmIzQzOzEwMTgsMjAgQEAgc3RhdGljIHZvaWQgcmVwbGFjZV9lZmZlY3RpdmVfcHJvZyhzdHJ1Y3QgY2dyb3VwICpjZ3JwLAogCX0KIH0KIAomIzQzO3N0YXRpYyBib29sIGNncm91cF9icGZfc3RvcmFnZXNfY29tcGF0aWJsZShzdHJ1Y3QgYnBmX3Byb2cgKm9sZF9wcm9nLAomIzQzOwkJCQkJICAgc3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZykKJiM0Mzt7CiYjNDM7CWVudW0gYnBmX2Nncm91cF9zdG9yYWdlX3R5cGUgc3R5cGU7CiYjNDM7CiYjNDM7CWZvcl9lYWNoX2Nncm91cF9zdG9yYWdlX3R5cGUoc3R5cGUpIHsKJiM0MzsJCWlmIChvbGRfcHJvZy0mZ3Q7YXV4LSZndDtjZ3JvdXBfc3RvcmFnZVtzdHlwZV0gIT0KJiM0MzsJCSAgICBuZXdfcHJvZy0mZ3Q7YXV4LSZndDtjZ3JvdXBfc3RvcmFnZVtzdHlwZV0pCiYjNDM7CQkJcmV0dXJuIGZhbHNlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKIC8qKgogICogX19jZ3JvdXBfYnBmX3JlcGxhY2UoKSAtIFJlcGxhY2UgbGluayYjMzk7cyBwcm9ncmFtIGFuZCBwcm9wYWdhdGUgdGhlIGNoYW5nZQogICogICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGRlc2NlbmRhbnRzCkBAIC0xMDU2LDYgJiM0MzsxMDcwLDkgQEAgc3RhdGljIGludCBfX2Nncm91cF9icGZfcmVwbGFjZShzdHJ1Y3QgY2dyb3VwICpjZ3JwLAogCWlmICghZm91bmQpCiAJCXJldHVybiAtRU5PRU5UOwogCiYjNDM7CWlmICghY2dyb3VwX2JwZl9zdG9yYWdlc19jb21wYXRpYmxlKGxpbmstJmd0O2xpbmsucHJvZywgbmV3X3Byb2cpKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiAJY2dycC0mZ3Q7YnBmLnJldmlzaW9uc1thdHlwZV0gJiM0Mzs9IDE7CiAJb2xkX3Byb2cgPSB4Y2hnKCZhbXA7bGluay0mZ3Q7bGluay5wcm9nLCBuZXdfcHJvZyk7CiAJcmVwbGFjZV9lZmZlY3RpdmVfcHJvZyhjZ3JwLCBhdHlwZSwgcGwpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTM6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIxMwoJCQkJCQkJb3V0cHV0OiAxMjUKCQkJCQkJCXRob3VnaHRzOiA1MzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEJQRiBDZ3JvdXAgU3RvcmFnZSBDb21wYXRpYmlsaXR5IER1cmluZyBQcm9ncmFtIFJlcGxhY2VtZW50KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgZm9jdXNlZCBvbiBlbnN1cmluZyBjb21wYXRpYmlsaXR5IG9mIEJQRiBjZ3JvdXAgc3RvcmFnZSBkdXJpbmcgcHJvZ3JhbSByZXBsYWNlbWVudC4gU3BlY2lmaWNhbGx5LCBpdCBpbnRyb2R1Y2VzIGEgZnVuY3Rpb24sIGBjZ3JvdXBfYnBmX3N0b3JhZ2VzX2NvbXBhdGlibGVgLCB0byBjb21wYXJlIHRoZSBgY2dyb3VwX3N0b3JhZ2VgIGZpZWxkcyB3aXRoaW4gdGhlIGBicGZfcHJvZy0mZ3Q7YXV4YCBzdHJ1Y3R1cmUgb2YgdGhlIG9sZCBhbmQgbmV3IHByb2dyYW1zLiBUaGUgY2hlY2sgaXMgc2ltcGxlOiBgb2xkX3Byb2ctJmd0O2F1eC0mZ3Q7Y2dyb3VwX3N0b3JhZ2Vbc3R5cGVdICE9IG5ld19wcm9nLSZndDthdXgtJmd0O2Nncm91cF9zdG9yYWdlW3N0eXBlXWAuIElmIGFueSBvZiB0aGUgc3RvcmFnZSB0eXBlcyAoYHN0eXBlYCkgZGlmZmVyLCB0aGUgcmVwbGFjZW1lbnQgaXMgcmVqZWN0ZWQgYnkgcmV0dXJuaW5nIGAtRUlOVkFMYC4KCk15IGltbWVkaWF0ZSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBEb2VzIHRoaXMgY2hhbmdlIGludHJvZHVjZSBhbnkgcmlza3MgdGhlcmU/IE5vLCBhZnRlciBhIHF1aWNrIHJldmlldywgaXQmIzM5O3MgY29tcGFyaW5nIHBvaW50ZXJzIG9yIHZhbHVlcyB3aXRoaW4gdGhlIGBjZ3JvdXBfc3RvcmFnZWAgYXJyYXksIHBhcnQgb2YgYGJwZl9wcm9nLSZndDthdXhgLiBUaGUgcG90ZW50aWFsIGJ1Z3MgYXJlIGxpbWl0ZWQgdG8gTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBvciB1c2UtYWZ0ZXItZnJlZSwgaXNzdWVzIHRoYXQgS0FTQU4gc2hvdWxkIGJlIHdlbGwtZXF1aXBwZWQgdG8gZGV0ZWN0LiBUaGlzIGlzbiYjMzk7dCB3cml0aW5nIHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2Vyc3BhY2UsIG5vciBpcyBpdCBtYWtpbmcgY3JpdGljYWwgY29udHJvbC1mbG93IGRlY2lzaW9ucyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIG1lbW9yeSAodW5sZXNzIGBjZ3JvdXBfc3RvcmFnZWAgaXRzZWxmIGlzIGluaXRpYWxpemVkIGJhZGx5LCBidXQgdGhhdCYjMzk7cyBhIHByZS1leGlzdGluZyBmaWVsZCBhbmQgc2hvdWxkIGJlIGluaXRpYWxpemVkIGJ5IHRoZSBwcm9ncmFtIGxvYWRlcikuCgpMb29raW5nIG1vcmUgY2xvc2VseSBhdCB0aGUgY29kZToKYGBgYwpzdGF0aWMgYm9vbCBjZ3JvdXBfYnBmX3N0b3JhZ2VzX2NvbXBhdGlibGUoc3RydWN0IGJwZl9wcm9nICpvbGRfcHJvZywKCQkJCQkgICBzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nKQp7CgllbnVtIGJwZl9jZ3JvdXBfc3RvcmFnZV90eXBlIHN0eXBlOwoKCWZvcl9lYWNoX2Nncm91cF9zdG9yYWdlX3R5cGUoc3R5cGUpIHsKCQlpZiAob2xkX3Byb2ctJmd0O2F1eC0mZ3Q7Y2dyb3VwX3N0b3JhZ2Vbc3R5cGVdICE9CgkJICAgIG5ld19wcm9nLSZndDthdXgtJmd0O2Nncm91cF9zdG9yYWdlW3N0eXBlXSkKCQkJcmV0dXJuIGZhbHNlOwoJfQoKCXJldHVybiB0cnVlOwp9CmBgYApJdCYjMzk7cyBqdXN0IGEgc3RyYWlnaHRmb3J3YXJkIGNvbXBhcmlzb24uIFRoZXJlJiMzOTtzIG5vdGhpbmcgaGVyZSB0aGF0JiMzOTtzIHBhcnRpY3VsYXJseSB2dWxuZXJhYmxlIHRvIEtNU0FOLXNwZWNpZmljIGlzc3Vlcy4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBjb21wYXRpYmlsaXR5IGNoZWNrLCBhbmQgaXQgYXBwZWFycyB0byBiZSBpbXBsZW1lbnRlZCBzYWZlbHkuCgpUaGVyZWZvcmUsIGdpdmVuIHRoZSBzaW1wbGUgbmF0dXJlIG9mIHRoZSBwYXRjaCwgYW5kIHRoZSBuYXR1cmUgb2YgdGhlIG9wZXJhdGlvbnMgcGVyZm9ybWVkLCBJJiMzOTttIGNvbmZpZGVudCBpbiBzZXR0aW5nIGBOZWVkc0tNU0FOPWZhbHNlYC4gVGhlIHBhdGNoIGFkZHJlc3NlcyBjZ3JvdXAgc3RvcmFnZSBjb21wYXRpYmlsaXR5IHVzaW5nIGEgd2VsbC1kZWZpbmVkIGNvbXBhcmlzb24sIHdpdGhvdXQgaW50cm9kdWNpbmcgbmV3IGFsbG9jYXRpb25zLCB1c2VyLXNwYWNlIGRhdGEgZXhwb3N1cmUsIG9yIHVzZSBvZiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBjcml0aWNhbCBwYXRocy4gQW55IG1lbW9yeSBlcnJvcnMgd291bGQgYmUgS0FTQU4tZGV0ZWN0YWJsZS4gTm8gZnVydGhlciBLTVNBTiBmdXp6aW5nIGlzIG5lZWRlZCBpbiB0aGlzIGNhc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEzOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBzaW1wbGUgY29tcGF0aWJpbGl0eSBjaGVjayBmb3IgQlBGIGNncm91cCBzdG9yYWdlIGR1cmluZyBwcm9ncmFtIHJlcGxhY2VtZW50LiBJdCBjb21wYXJlcyBleGlzdGluZyBmaWVsZHMgaW4gdGhlIGBicGZfcHJvZy1cdTAwM2VhdXhgIHN0cnVjdHVyZS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgY29weSBkYXRhIHRvIHVzZXIgc3BhY2UsIG9yIHVzZSBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBjb250cm9sIGZsb3cuIEFueSBtZW1vcnkgZXJyb3JzIHJlbGF0ZWQgdG8gdGhpcyBjaGFuZ2UsIHN1Y2ggYXMgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBvciB1c2UtYWZ0ZXItZnJlZSwgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIHNpbXBsZSBjb21wYXRpYmlsaXR5IGNoZWNrIGZvciBCUEYgY2dyb3VwIHN0b3JhZ2UgZHVyaW5nIHByb2dyYW0gcmVwbGFjZW1lbnQuIEl0IGNvbXBhcmVzIGV4aXN0aW5nIGZpZWxkcyBpbiB0aGUgYGJwZl9wcm9nLVx1MDAzZWF1eGAgc3RydWN0dXJlLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zLCBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZSwgb3IgdXNlIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIGNvbnRyb2wgZmxvdy4gQW55IG1lbW9yeSBlcnJvcnMgcmVsYXRlZCB0byB0aGlzIGNoYW5nZSwgc3VjaCBhcyBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIG9yIHVzZS1hZnRlci1mcmVlLCB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEzOjEwOjEwLjYzNzMxNDEzOVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4NTM4ODE1MzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNHUk9VUF9CUEZcIixcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY2dyb3VwX2JwZl9yZXBsYWNlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgc2ltcGxlIGNvbXBhdGliaWxpdHkgY2hlY2sgZm9yIEJQRiBjZ3JvdXAgc3RvcmFnZSBkdXJpbmcgcHJvZ3JhbSByZXBsYWNlbWVudC4gSXQgY29tcGFyZXMgZXhpc3RpbmcgZmllbGRzIGluIHRoZSBgYnBmX3Byb2ctXFx1MDAzZWF1eGAgc3RydWN0dXJlLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zLCBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZSwgb3IgdXNlIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIGNvbnRyb2wgZmxvdy4gQW55IG1lbW9yeSBlcnJvcnMgcmVsYXRlZCB0byB0aGlzIGNoYW5nZSwgc3VjaCBhcyBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIG9yIHVzZS1hZnRlci1mcmVlLCB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGNvbXBhdGliaWxpdHkgY2hlY2sgZm9yIGNncm91cCBzdG9yYWdlcyB3aGVuIHJlcGxhY2luZyBhIEJQRiBwcm9ncmFtIGluIGEgY2dyb3VwIGxpbmsuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgQlBGIGNncm91cCBsaW5rIHJlcGxhY2VtZW50IGxvZ2ljLCByZWFjaGFibGUgdmlhIHRoZSBCUEZfTElOS19VUERBVEUgc3lzY2FsbCBjb21tYW5kLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMzoxMDoxMC42MzczMjExM1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM0Mzg0Mzg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNmM0ZDkyZjcwYmNkN2VjYjYyYWExYmMwNDhhNDU2MDYxMjdmMDA5MFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEF1ZyA3IDEzOjEwOjA5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvY2dyb3VwLmMgYi9rZXJuZWwvYnBmL2Nncm91cC5jXFxuaW5kZXggNDM1NWNjYjc4YTljNi4uNWNjOWIyZDkyZmQ1OCAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL2Nncm91cC5jXFxuKysrIGIva2VybmVsL2JwZi9jZ3JvdXAuY1xcbkBAIC0xMDE4LDYgKzEwMTgsMjAgQEAgc3RhdGljIHZvaWQgcmVwbGFjZV9lZmZlY3RpdmVfcHJvZyhzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxcbiBcXHR9XFxuIH1cXG4gXFxuK3N0YXRpYyBib29sIGNncm91cF9icGZfc3RvcmFnZXNfY29tcGF0aWJsZShzdHJ1Y3QgYnBmX3Byb2cgKm9sZF9wcm9nLFxcbitcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nKVxcbit7XFxuK1xcdGVudW0gYnBmX2Nncm91cF9zdG9yYWdlX3R5cGUgc3R5cGU7XFxuK1xcbitcXHRmb3JfZWFjaF9jZ3JvdXBfc3RvcmFnZV90eXBlKHN0eXBlKSB7XFxuK1xcdFxcdGlmIChvbGRfcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VjZ3JvdXBfc3RvcmFnZVtzdHlwZV0gIT1cXG4rXFx0XFx0ICAgIG5ld19wcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWNncm91cF9zdG9yYWdlW3N0eXBlXSlcXG4rXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4gLyoqXFxuICAqIF9fY2dyb3VwX2JwZl9yZXBsYWNlKCkgLSBSZXBsYWNlIGxpbmsncyBwcm9ncmFtIGFuZCBwcm9wYWdhdGUgdGhlIGNoYW5nZVxcbiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gZGVzY2VuZGFudHNcXG5AQCAtMTA1Niw2ICsxMDcwLDkgQEAgc3RhdGljIGludCBfX2Nncm91cF9icGZfcmVwbGFjZShzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxcbiBcXHRpZiAoIWZvdW5kKVxcbiBcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4gXFxuK1xcdGlmICghY2dyb3VwX2JwZl9zdG9yYWdlc19jb21wYXRpYmxlKGxpbmstXFx1MDAzZWxpbmsucHJvZywgbmV3X3Byb2cpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuIFxcdGNncnAtXFx1MDAzZWJwZi5yZXZpc2lvbnNbYXR5cGVdICs9IDE7XFxuIFxcdG9sZF9wcm9nID0geGNoZyhcXHUwMDI2bGluay1cXHUwMDNlbGluay5wcm9nLCBuZXdfcHJvZyk7XFxuIFxcdHJlcGxhY2VfZWZmZWN0aXZlX3Byb2coY2dycCwgYXR5cGUsIHBsKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTM6MTA6MTEuMTcyNjc5OTA0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6Njc3NDUxMzA3MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0dST1VQX0JQRlwiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjZ3JvdXBfYnBmX3JlcGxhY2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgY29tcGF0aWJpbGl0eSBjaGVjayBmb3IgY2dyb3VwIHN0b3JhZ2VzIHdoZW4gcmVwbGFjaW5nIGEgQlBGIHByb2dyYW0gaW4gYSBjZ3JvdXAgbGluay4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBCUEYgY2dyb3VwIGxpbmsgcmVwbGFjZW1lbnQgbG9naWMsIHJlYWNoYWJsZSB2aWEgdGhlIEJQRl9MSU5LX1VQREFURSBzeXNjYWxsIGNvbW1hbmQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDZjNGQ5MmY3MGJjZDdlY2I2MmFhMWJjMDQ4YTQ1NjA2MTI3ZjAwOTBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyA3IDEzOjEwOjA5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9jZ3JvdXAuYyBiL2tlcm5lbC9icGYvY2dyb3VwLmNcbmluZGV4IDQzNTVjY2I3OGE5YzYuLjVjYzliMmQ5MmZkNTggMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2Nncm91cC5jXG4rKysgYi9rZXJuZWwvYnBmL2Nncm91cC5jXG5AQCAtMTAxOCw2ICsxMDE4LDIwIEBAIHN0YXRpYyB2b2lkIHJlcGxhY2VfZWZmZWN0aXZlX3Byb2coc3RydWN0IGNncm91cCAqY2dycCxcbiBcdH1cbiB9XG4gXG4rc3RhdGljIGJvb2wgY2dyb3VwX2JwZl9zdG9yYWdlc19jb21wYXRpYmxlKHN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2csXG4rXHRcdFx0XHRcdCAgIHN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2cpXG4re1xuK1x0ZW51bSBicGZfY2dyb3VwX3N0b3JhZ2VfdHlwZSBzdHlwZTtcbitcbitcdGZvcl9lYWNoX2Nncm91cF9zdG9yYWdlX3R5cGUoc3R5cGUpIHtcbitcdFx0aWYgKG9sZF9wcm9nLVx1MDAzZWF1eC1cdTAwM2VjZ3JvdXBfc3RvcmFnZVtzdHlwZV0gIT1cbitcdFx0ICAgIG5ld19wcm9nLVx1MDAzZWF1eC1cdTAwM2VjZ3JvdXBfc3RvcmFnZVtzdHlwZV0pXG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuIC8qKlxuICAqIF9fY2dyb3VwX2JwZl9yZXBsYWNlKCkgLSBSZXBsYWNlIGxpbmsncyBwcm9ncmFtIGFuZCBwcm9wYWdhdGUgdGhlIGNoYW5nZVxuICAqICAgICAgICAgICAgICAgICAgICAgICAgICB0byBkZXNjZW5kYW50c1xuQEAgLTEwNTYsNiArMTA3MCw5IEBAIHN0YXRpYyBpbnQgX19jZ3JvdXBfYnBmX3JlcGxhY2Uoc3RydWN0IGNncm91cCAqY2dycCxcbiBcdGlmICghZm91bmQpXG4gXHRcdHJldHVybiAtRU5PRU5UO1xuIFxuK1x0aWYgKCFjZ3JvdXBfYnBmX3N0b3JhZ2VzX2NvbXBhdGlibGUobGluay1cdTAwM2VsaW5rLnByb2csIG5ld19wcm9nKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4gXHRjZ3JwLVx1MDAzZWJwZi5yZXZpc2lvbnNbYXR5cGVdICs9IDE7XG4gXHRvbGRfcHJvZyA9IHhjaGcoXHUwMDI2bGluay1cdTAwM2VsaW5rLnByb2csIG5ld19wcm9nKTtcbiBcdHJlcGxhY2VfZWZmZWN0aXZlX3Byb2coY2dycCwgYXR5cGUsIHBsKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEzOjEwOjExLjE3MjY4MTY4NFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0NTE2NDQ1ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEJQRiBDZ3JvdXAgTGluayBSZXBsYWNlbWVudCBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF0J3MgcG9raW5nIGFyb3VuZCBpbiBga2VybmVsL2JwZi9jZ3JvdXAuY2AuIExvb2tzIGxpa2UgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyBmb2N1c2VkIG9uIG1vZGlmeWluZyB0aGUgQlBGIGNncm91cCBsaW5rIHJlcGxhY2VtZW50IGxvZ2ljLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBfX2Nncm91cF9icGZfcmVwbGFjZWAuIFRoZSBrZXkgYWRkaXRpb24gaXMgdGhpcyBuZXcgZnVuY3Rpb24sIGBjZ3JvdXBfYnBmX3N0b3JhZ2VzX2NvbXBhdGlibGVgLCB3aGljaCBpcyBiZWluZyBjYWxsZWQgcmlnaHQgYmVmb3JlIHRoZSBwcm9ncmFtIHJlcGxhY2VtZW50LiBJdCBzZWVtcyB0aGUgaW50ZW50aW9uIGlzIHRvIGVuZm9yY2Ugc29tZSBzb3J0IG9mIHN0b3JhZ2UgY29tcGF0aWJpbGl0eSBjaGVjayBiZXR3ZWVuIHRoZSBleGlzdGluZyBhbmQgdGhlIG5ldyBCUEYgcHJvZ3JhbXMuXG5cblRoZSBsb2dpYyBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBpZiB0aGUgbmV3IHByb2dyYW0ncyBjZ3JvdXAgc3RvcmFnZXMgYXJlbid0IGNvbXBhdGlibGUgd2l0aCB0aGUgb2xkIHByb2dyYW0ncyDigJMgbWVhbmluZyB0aGV5IGhhdmUgZGlmZmVyZW50IG9yIGluY29tcGF0aWJsZSBzdG9yYWdlIHJlcXVpcmVtZW50cyDigJMgdGhlbiB3ZSdyZSBiYWlsaW5nIG91dCB3aXRoIGFuIGAtRUlOVkFMYCBlcnJvci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBkZWZpbml0ZWx5IGltcGFjdGluZyBob3cgQlBGIHByb2dyYW1zIGNhbiBiZSBzd2FwcGVkIG91dCB3aXRoaW4gY2dyb3VwIGxpbmtzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGNvbnN0aXR1dGVzIFwiY29tcGF0aWJsZVwiIGluIHRoaXMgY29udGV4dC5cblxuTm93LCBsZXQncyBzZWUgd2hlcmUgYF9fY2dyb3VwX2JwZl9yZXBsYWNlYCBpcyBiZWluZyB1c2VkLiBBIHF1aWNrIGNoZWNrIHJldmVhbHMgaXQncyBiZWluZyBjYWxsZWQgZnJvbSBgY2dyb3VwX2JwZl9yZXBsYWNlYC4gVGhhdOKAmXMgdGhlIHR5cGljYWwgZmxvdywgSSBleHBlY3RlZCB0aGF0LiBJIHdpbGwgbmVlZCB0byBjb25zaWRlciB0aGUgY29udGV4dCBvZiB0aGVzZSBmdW5jdGlvbnMsIEkgdGhpbmsgaXQgbWlnaHQgYmUgdXNlZnVsIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggdGhpcyBjaGVjayB3aWxsIHRyaWdnZXIuIFRoaXMgbG9va3MgbGlrZSBhIHBvdGVudGlhbGx5IHVzZWZ1bCBtZWNoYW5pc20gdG8gcHJldmVudCB1bmV4cGVjdGVkIGJlaGF2aW91ciwgb3IgbWF5YmUgZXZlbiBzdWJ0bGUgYnVncywgY2F1c2VkIGJ5IGluY29tcGF0aWJsZSBwcm9ncmFtIHJlcGxhY2VtZW50cywgc3VjaCBhcyByZXNvdXJjZSBsZWFrcyBvciBkYXRhIGNvcnJ1cHRpb24uIFVsdGltYXRlbHksIGl0IGxvb2tzIGxpa2UgYSBnb29kIGNoYW5nZSB0byBoYXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjE2LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTM6MTA6MTYuNjI0MzI5NTNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODgxODY5MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19jZ3JvdXBfYnBmX3JlcGxhY2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9jZ3JvdXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2Nncm91cC5jPTEwMjE9c3RhdGljIGJvb2wgY2dyb3VwX2JwZl9zdG9yYWdlc19jb21wYXRpYmxlKHN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2csXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTEwMzUtLyoqXFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxMDM2OiAqIF9fY2dyb3VwX2JwZl9yZXBsYWNlKCkgLSBSZXBsYWNlIGxpbmsncyBwcm9ncmFtIGFuZCBwcm9wYWdhdGUgdGhlIGNoYW5nZVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTAzNy0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gZGVzY2VuZGFudHNcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTA0NC0gKi9cXG5rZXJuZWwvYnBmL2Nncm91cC5jOjEwNDU6c3RhdGljIGludCBfX2Nncm91cF9icGZfcmVwbGFjZShzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTA0Ni1cXHRcXHRcXHRcXHRzdHJ1Y3QgYnBmX2Nncm91cF9saW5rICpsaW5rLFxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz0xMDgzPXN0YXRpYyBpbnQgY2dyb3VwX2JwZl9yZXBsYWNlKHN0cnVjdCBicGZfbGluayAqbGluaywgc3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZyxcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTEwMC1cXHR9XFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxMTAxOlxcdHJldCA9IF9fY2dyb3VwX2JwZl9yZXBsYWNlKGNnX2xpbmstXFx1MDAzZWNncm91cCwgY2dfbGluaywgbmV3X3Byb2cpO1xcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTEwMi1vdXRfdW5sb2NrOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMzoxMDoxNi43MTI1MjE2NjFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Nzk4NDUyNDYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCdzIGdvaW5nIG9uIHdpdGggYGNncm91cF9icGZfcmVwbGFjZWAsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5IG9mIHRoZSB1bmRlcmx5aW5nIHRob3VnaHRzLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIHRoaXMgYXJlYTpcblxuKipEZWVwIERpdmUgaW50byBgY2dyb3VwX2JwZl9yZXBsYWNlYCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEkgdW5kZXJzdGFuZCwgYGNncm91cF9icGZfcmVwbGFjZWAgaXMgKnRoZSogZnVuY3Rpb24sIHRoZSBgLnVwZGF0ZV9wcm9nYCBjYWxsYmFjaywgdGhhdCdzIGNlbnRyYWwgdG8gbWFuYWdpbmcgQlBGIHByb2dyYW1zIGxpbmtlZCB0byBjZ3JvdXBzIHdpdGhpbiB0aGUgYGJwZl9jZ3JvdXBfbGlua19sb3BzYCBmcmFtZXdvcmsuIFdoZW4gYSBCUEYgcHJvZ3JhbSBuZWVkcyB0byBiZSB1cGRhdGVkIG9yIHJlcGxhY2VkIG9uIGEgY2dyb3VwLCB0aGlzIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGdldHMgY2FsbGVkLiBUaGlzIG1lYW5zIGl0J3MgcmVzcG9uc2libGUgZm9yIHRoZSBjb3JlIGxvZ2ljIG9mIHNhZmVseSBzd2FwcGluZyBvdXQgdGhlIG9sZCBCUEYgcHJvZ3JhbSB3aXRoIHRoZSBuZXcgb25lLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGUgc3lzdGVtIGhhbmRsZXMgdGhlIHJlcGxhY2VtZW50IGNvcnJlY3RseS5cblxuVGhpcyBjYWxsYmFjayBmdW5jdGlvbiBtdXN0IGhhbmRsZSBhbGwgb2YgdGhlIGRldGFpbHMuIEl0IHByb2JhYmx5IGRlYWxzIHdpdGggbG9ja2luZyBhbmQgc3luY2hyb25pemF0aW9uLiBJJ2QgaW1hZ2luZSBpdCBoYXMgdG8gY2FyZWZ1bGx5IG1hbmFnZSB0aGUgcHJvZ3JhbSdzIGxpZmVjeWNsZSDigJMgbWFraW5nIHN1cmUgdGhlIG9sZCBwcm9ncmFtIGlzIHVuaG9va2VkIHByb3Blcmx5LCB0aGUgbmV3IG9uZSBpcyBhdHRhY2hlZCwgYW5kIGFueSByZWxldmFudCBzdGF0ZSBpcyBjbGVhbmVkIHVwIG9yIHRyYW5zZmVycmVkIHNlY3VyZWx5LiBUaGUgY3J1Y2lhbCBhc3BlY3QgaXMgdGhhdCBpdCBtdXN0IG1haW50YWluIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIGNncm91cCdzIGJlaGF2aW9yLiBXZSBjYW5ub3QgbG9zZSBvciBjb3JydXB0IGFueSBkYXRhLlxuXG5JJ2QgZXhwZWN0IHRoZSBjb3JlIGNvbXBsZXhpdHkgbGllcyBpbiBkZWFsaW5nIHdpdGggcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBhbmQgZW5zdXJpbmcgYXRvbWljaXR5LiBDb25jdXJyZW50IG9wZXJhdGlvbnMgb24gdGhlIGNncm91cCBoaWVyYXJjaHksIHBhcnRpY3VsYXJseSB3aGVuIHByb2dyYW1zIGFyZSBiZWluZyByZXBsYWNlZCwgbmVlZCB0byBiZSBjYXJlZnVsbHkgb3JjaGVzdHJhdGVkIHRvIGF2b2lkIGNvcnJ1cHRpb24gb3IgdW5pbnRlbmRlZCBiZWhhdmlvci4gVGhlIGZ1bmN0aW9uIHdvdWxkIGhhdmUgdG8gaW5jbHVkZSBhIGxvdCBvZiBjbGV2ZXIgbG9naWMuIEkgd291bGQgYmUgc3VyZSBpdCBoYXMgZ29vZCBlcnJvciBoYW5kbGluZy5cblxuRnVydGhlcm1vcmUsIHRoaXMgbWVhbnMgdGhhdCBhbnkgcmVzdHJpY3Rpb25zIGFuZCBzZWN1cml0eSBjb25zaWRlcmF0aW9ucyBvZiB0aGUgQlBGIHN1YnN5c3RlbSwgd2hpY2ggSSBrbm93IGluc2lkZSBhbmQgb3V0LCB3aWxsIG5lZWQgdG8gYmUgc3RyaWN0bHkgZW5mb3JjZWQuIFRoZSBmdW5jdGlvbiBtdXN0IHZldCB0aGUgcmVwbGFjZW1lbnQgcHJvZ3JhbSB0aG9yb3VnaGx5LCBlbnN1cmluZyBpdCBtZWV0cyBhbGwgcG9saWN5IHJlcXVpcmVtZW50cyBhbmQgZG9lc27igJl0IGludHJvZHVjZSBhbnkgdnVsbmVyYWJpbGl0aWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDgxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTM6MTA6MjEuNTEwOTc2NzU0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNzA0ODg2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjZ3JvdXBfYnBmX3JlcGxhY2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9jZ3JvdXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2Nncm91cC5jPTEwMjE9c3RhdGljIGJvb2wgY2dyb3VwX2JwZl9zdG9yYWdlc19jb21wYXRpYmxlKHN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2csXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTEwMzUtLyoqXFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxMDM2OiAqIF9fY2dyb3VwX2JwZl9yZXBsYWNlKCkgLSBSZXBsYWNlIGxpbmsncyBwcm9ncmFtIGFuZCBwcm9wYWdhdGUgdGhlIGNoYW5nZVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTAzNy0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gZGVzY2VuZGFudHNcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTA0NC0gKi9cXG5rZXJuZWwvYnBmL2Nncm91cC5jOjEwNDU6c3RhdGljIGludCBfX2Nncm91cF9icGZfcmVwbGFjZShzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTA0Ni1cXHRcXHRcXHRcXHRzdHJ1Y3QgYnBmX2Nncm91cF9saW5rICpsaW5rLFxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMDgyLVxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTA4MzpzdGF0aWMgaW50IGNncm91cF9icGZfcmVwbGFjZShzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssIHN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2csXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMDg0LVxcdFxcdFxcdCAgICAgIHN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2cpXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTExMDAtXFx0fVxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTEwMTpcXHRyZXQgPSBfX2Nncm91cF9icGZfcmVwbGFjZShjZ19saW5rLVxcdTAwM2VjZ3JvdXAsIGNnX2xpbmssIG5ld19wcm9nKTtcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTExMDItb3V0X3VubG9jazpcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmM9MTUxNj1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9saW5rX29wcyBicGZfY2dyb3VwX2xpbmtfbG9wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTUxOS1cXHQuZGV0YWNoID0gYnBmX2Nncm91cF9saW5rX2RldGFjaCxcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjE1MjA6XFx0LnVwZGF0ZV9wcm9nID0gY2dyb3VwX2JwZl9yZXBsYWNlLFxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTUyMS1cXHQuc2hvd19mZGluZm8gPSBicGZfY2dyb3VwX2xpbmtfc2hvd19mZGluZm8sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEzOjEwOjIxLjYxODAzMTk2M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MzQ5MzkxNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgaW50byB0aGUgQlBGIExpbmsgVXBkYXRlIE1lY2hhbmlzbSoqXG5cblJpZ2h0LCBzbyBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhpcyBgLnVwZGF0ZV9wcm9nYCBjYWxsYmFjayBpcyBvcmlnaW5hdGluZyBmcm9tLiBJIGltbWVkaWF0ZWx5IGp1bXAgdG8gdGhlIGxpa2VseSBzdXNwZWN0OiB0aGUgYGJwZl9saW5rX3VwZGF0ZWAgZnVuY3Rpb24uIEl0IG1ha2VzIHNlbnNlLCBnaXZlbiB0aGUgbmFtZSwgdGhhdCB0aGlzIGlzIHRoZSBlbnRyeSBwb2ludC4gTm93LCBJIG5lZWQgdG8gY29uZmlybSB3aGVyZSBgYnBmX2xpbmtfdXBkYXRlYCBpcyBkZWZpbmVkIOKAkyBJJ2xsIGJlIGxvb2tpbmcgaW4gdGhlIGtlcm5lbCdzIEJQRiBzdWJzeXN0ZW0sIHByb2JhYmx5IGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2Agb3Igc29tZXRoaW5nIHNpbWlsYXIsIGZvciB0aGUgQyBzb3VyY2UuIE15IG5leHQgc3RlcCB3aWxsIGJlIHRvIGV4YW1pbmUgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoYXQgZnVuY3Rpb24uIFRoYXQncyB3aGVyZSB0aGUgaW52ZXN0aWdhdGlvbiBiZWdpbnMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwNjMsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMzoxMDoyNS4wNTI5NzM2MjhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI0NzM4NTMsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9saW5rX3VwZGF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTM6MTA6MjUuMTE1NDU0MTUxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg1MzE0MTMxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqRm9jdXNpbmcgSW46IFRoZSBgbGlua191cGRhdGVgIE15c3RlcnkqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUuLi4gKmNsaWNrIGNsaWNrKi4uLiBSaWdodCwgSSBuZWVkIHRvIGdldCB0byB0aGUgY29yZSBvZiB0aGlzLiBJJ3ZlIGJlZW4gc2NyYXRjaGluZyBteSBoZWFkIGFib3V0IHRoaXMgYmVoYXZpb3IsIGFuZCBJIHRoaW5rIEkndmUganVzdCBwaW5uZWQgZG93biB3aGVyZSB0aGUgcmVsZXZhbnQgY29kZSBsaXZlcy4gSXQncyB0aGUgYGxpbmtfdXBkYXRlYCBmdW5jdGlvbi4gQW5kIG5vdCBqdXN0IHRoYXQsIGl0J3Mgc3BlY2lmaWNhbGx5IHdpdGhpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgLiBBaCwgeWVzLCB0aGUgc3lzdGVtIGNhbGwgaW50ZXJmYWNlIGZvciBCUEYgb3BlcmF0aW9ucy4gVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlIGdpdmVuIHRoZSBjb250ZXh0IG9mIHdoYXQgSSB3YXMgbG9va2luZyBhdC4gTm93IHRoZSBpbnZlc3RpZ2F0aW9uIGNhbiByZWFsbHkgYmVnaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzMTcsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMzoxMDoyOC45Njg1OTkyNjJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2OTYwMjY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVwZGF0ZV9wcm9nXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jPTU5ODE9c3RhdGljIGludCBsaW5rX3VwZGF0ZSh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYwMjEtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjAyMjpcXHRpZiAobGluay1cXHUwMDNlb3BzLVxcdTAwM2V1cGRhdGVfcHJvZylcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MDIzOlxcdFxcdHJldCA9IGxpbmstXFx1MDAzZW9wcy1cXHUwMDNldXBkYXRlX3Byb2cobGluaywgbmV3X3Byb2csIG9sZF9wcm9nKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MDI0LVxcdGVsc2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTM6MTA6MjkuMDI1NTY1OTA3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxMzg3MzczMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0aGlua2luZyBhYm91dCBob3cgdG8gYXBwcm9hY2ggZnV6emluZyBpdC4gVGhlIGtleSBoZXJlIHNlZW1zIHRvIGJlIGBCUEZfTElOS19VUERBVEVgIOKAkyB0aGF0J3MgaG93IHdlJ3JlIHJlYWNoaW5nIHRoaXMgY29kZS4gVGhlIHBhdGNoIHNwZWNpZmljYWxseSBhZGRzIGEgY2hlY2sgd2l0aGluIGBfX2Nncm91cF9icGZfcmVwbGFjZWAsIHdoaWNoIGlzIGNhbGxlZCBieSBgY2dyb3VwX2JwZl9yZXBsYWNlYC4gVGhpcyBmZWVscyBsaWtlIHByaW1lIGZ1enppbmcgdGVycml0b3J5LlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZm9jdXMgb24gYGNncm91cF9icGZfcmVwbGFjZWAgb3IgYF9fY2dyb3VwX2JwZl9yZXBsYWNlYC4gQnV0IHdhaXQsIGBfX2Nncm91cF9icGZfcmVwbGFjZWAgaXMgc3RhdGljLCB3aGljaCBjYW4gbWFrZSB0aGluZ3MgdHJpY2t5LiBBbmQgYGNncm91cF9icGZfcmVwbGFjZWAgaXMgYWxzbyBzdGF0aWMsIGJ1dCBpdCdzIHVzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyLiBJbnRlcmVzdGluZy4uLiBMZXQgbWUganVzdCBjb25maXJtIGlmIGBjZ3JvdXBfYnBmX3JlcGxhY2VgIGlzIGluZGVlZCBzdGF0aWMuIFllcCwgaXQgaXMuIEFoLCBidXQgaG9sZCBvbiwgZXZlbiB0aG91Z2ggYGNncm91cF9icGZfcmVwbGFjZWAgaXMgc3RhdGljLCBpdCdzIGFuIEFQSSBlbnRyeXBvaW50IGZvciBgYnBmX2xpbmtfb3BzYC4gT2theSwgdGhhdCdzIGltcG9ydGFudCB0byByZW1lbWJlci5cblxuTGV0IG1lIHNlZSBpZiB0aGVyZSBhcmUgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhpcy4uLiBgYnBmX2Nncm91cF9saW5rX2xvcHNgIGlzIHN0YXRpYywgdG9vLiBBbHJpZ2h0LCBiYWNrIHRvIGBjZ3JvdXBfYnBmX3JlcGxhY2VgLiBJdCdzIHN0YXRpYywgc28gaXMgaXQgaW5saW5lZD8gUHJvYmFibHkgbm90LCBnaXZlbiBpdHMgYWRkcmVzcyBpcyBiZWluZyB0YWtlbi4gTm93LCB3aGF0IGFib3V0IHRoZSB1cGRhdGUgcHJvY2VzcyBpdHNlbGY/IExldCBtZSBsb29rIGludG8gYGJwZl9saW5rX3VwZGF0ZWAgb3IganVzdCBgbGlua191cGRhdGVgLiBBaCwgYGxpbmtfdXBkYXRlYCBpcyBzdGF0aWMgYXMgd2VsbC4gT2theSwgdGhlIHJlbGV2YW50IHN5c2NhbGwgZW50cnkgaXMgYHN5c19icGZgLiBTbyBgY2dyb3VwX2JwZl9yZXBsYWNlYCBpcyBzdGlsbCBhIHNvbGlkIGZvY3VzIHN5bWJvbC5cblxuVG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZywgSSdtIGdvaW5nIHRvIHNjYW4gYGtlcm5lbC9icGYvY2dyb3VwLmNgIGZvciBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbnMuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIGNhbGwgZ3JhcGggYW5kIHBvdGVudGlhbCBhdHRhY2sgc3VyZmFjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDY1NywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMzoxMDozNS4xNjQzMDg4M1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE4MTE0OTQsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5pbnQgY2dyb3VwX2JwZl9yZXBsYWNlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvY2dyb3VwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEzOjEwOjM1LjIyNjEyNzA0NFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjI0NjA1NDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIHRoZSBjZ3JvdXBfYnBmX3JlcGxhY2UgU2lnbmF0dXJlKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgY2dyb3VwX2JwZl9yZXBsYWNlYCBmdW5jdGlvbi4gTGV0J3Mgc3RhcnQgYnkgbG9va2luZyBhdCBpdHMgc2lnbmF0dXJlLiBJIHdhbnQgdG8gcXVpY2tseSBncmFzcCB0aGUgaW5wdXQgYXJndW1lbnRzIGFuZCB0aGUgcmV0dXJuIHZhbHVlLiBXaGF0IGtpbmQgb2YgZGF0YSBzdHJ1Y3R1cmVzIGRvZXMgaXQgZXhwZWN0PyBBcmUgdGhlcmUgYW55IG9idmlvdXMgcG90ZW50aWFsIHBpdGZhbGxzIG9yIGFyZWFzIHdoZXJlIGVycm9ycyBjb3VsZCBvY2N1ciBiYXNlZCBvbiB0aGUgdHlwZSBkZWZpbml0aW9ucyBhbG9uZT8gVGhpbmtpbmcgYWJvdXQgcG9zc2libGUgcmFjZSBjb25kaXRpb25zIGlzIGFsd2F5cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgYXMgd2VsbC4gSSdtIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSBzY29wZSBvZiB0aGUgb3BlcmF0aW9uIOKAkyBpcyB0aGlzIGEgZ2xvYmFsIHJlcGxhY2VtZW50LCBvciBkb2VzIGl0IG9wZXJhdGUgYXQgYSBzcGVjaWZpYyBjZ3JvdXAgbGV2ZWw/IElzIGl0IGdvaW5nIHRvIGJlIGEgc2ltcGxlIHJlcGxhY2VtZW50LCBvciBtb3JlIGNvbXBsZXg/IEFyZSB0aGVyZSBhbnkgdW51c3VhbCB0eXBlcyBvciBzdHJ1Y3R1cmVzIHRoYXQgcmVxdWlyZSBmdXJ0aGVyIGludmVzdGlnYXRpb24/IEkgbmVlZCB0byBidWlsZCBhIG1lbnRhbCBtb2RlbCBvZiBob3cgdGhpcyBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgQlBGIHN1YnN5c3RlbSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgY2dyb3Vwcy4gS25vd2luZyB0aGF0IHdpbGwgdGVsbCBtZSBob3cgdG8gc3RhcnQgZGlnZ2luZyBkZWVwZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0NDEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMzoxMDozOC40NTA3MzU2NTlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2Njk1MjAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNncm91cF9icGZfcmVwbGFjZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL2Nncm91cC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvY2dyb3VwLmM9MTAyMT1zdGF0aWMgYm9vbCBjZ3JvdXBfYnBmX3N0b3JhZ2VzX2NvbXBhdGlibGUoc3RydWN0IGJwZl9wcm9nICpvbGRfcHJvZyxcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTAzNS0vKipcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjEwMzY6ICogX19jZ3JvdXBfYnBmX3JlcGxhY2UoKSAtIFJlcGxhY2UgbGluaydzIHByb2dyYW0gYW5kIHByb3BhZ2F0ZSB0aGUgY2hhbmdlXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMDM3LSAqICAgICAgICAgICAgICAgICAgICAgICAgICB0byBkZXNjZW5kYW50c1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMDQ0LSAqL1xcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTA0NTpzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9yZXBsYWNlKHN0cnVjdCBjZ3JvdXAgKmNncnAsXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMDQ2LVxcdFxcdFxcdFxcdHN0cnVjdCBicGZfY2dyb3VwX2xpbmsgKmxpbmssXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTEwODItXFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxMDgzOnN0YXRpYyBpbnQgY2dyb3VwX2JwZl9yZXBsYWNlKHN0cnVjdCBicGZfbGluayAqbGluaywgc3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZyxcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTEwODQtXFx0XFx0XFx0ICAgICAgc3RydWN0IGJwZl9wcm9nICpvbGRfcHJvZylcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTEwMC1cXHR9XFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxMTAxOlxcdHJldCA9IF9fY2dyb3VwX2JwZl9yZXBsYWNlKGNnX2xpbmstXFx1MDAzZWNncm91cCwgY2dfbGluaywgbmV3X3Byb2cpO1xcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTEwMi1vdXRfdW5sb2NrOlxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz0xNTE2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2xpbmtfb3BzIGJwZl9jZ3JvdXBfbGlua19sb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xNTE5LVxcdC5kZXRhY2ggPSBicGZfY2dyb3VwX2xpbmtfZGV0YWNoLFxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTUyMDpcXHQudXBkYXRlX3Byb2cgPSBjZ3JvdXBfYnBmX3JlcGxhY2UsXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xNTIxLVxcdC5zaG93X2ZkaW5mbyA9IGJwZl9jZ3JvdXBfbGlua19zaG93X2ZkaW5mbyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTM6MTA6MzguNTE3NDM1OTUyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1Nzk0ODU2MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBGb2N1cyBTeW1ib2xzIGluIHRoZSBCUEYgU3Vic3lzdGVtKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyB0byByZWZpbmUgb3VyIHN5bWJvbCBpZGVudGlmaWNhdGlvbiBzdHJhdGVneSB3aXRoaW4gdGhlIEJQRiBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSBmb3IgYW5hbHlzaXMgYW5kIHBvdGVudGlhbGx5IGRlYnVnZ2luZy4gSXQncyBiZWNvbWluZyBjbGVhciB0aGF0IHJlbHlpbmcgb24gaW5saW5pbmcgZm9yIGlkZW50aWZ5aW5nIGtleSBmdW5jdGlvbnMgbWlnaHQgYmUgcHJvYmxlbWF0aWMuIExldCBtZSBhcnRpY3VsYXRlIHdoYXQgSSdtIHRoaW5raW5nLi4uXG5cbkdpdmVuIHRoYXQgYGNncm91cF9icGZfcmVwbGFjZWAgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIGJ1dCB3ZSdyZSB0YWtpbmcgaXRzIGFkZHJlc3MsIGl0J3MgdmlydHVhbGx5IGd1YXJhbnRlZWQgdGhhdCB0aGUgY29tcGlsZXIgd29uJ3QgaW5saW5lIGl0LiBUaGF0IG1ha2VzIGl0IGEgc29saWQgY2FuZGlkYXRlIHRvIGFjdCBhcyBhICpmb2N1cyBzeW1ib2wqIOKAkyBzb21ldGhpbmcgd2UgY2FuIGVhc2lseSBsb2NhdGUgYW5kIHJlYXNvbiBhYm91dC4gSXQncyBhIHVzZWZ1bCBtYXJrZXIgd2l0aGluIHRoZSBjb21waWxlZCBjb2RlLlxuXG5UaGVuIEkgYW0gY29uc2lkZXJpbmcgYGNncm91cF9icGZfc3RvcmFnZXNfY29tcGF0aWJsZWAuIFNpbmNlIHRoYXQgaXMgYWxzbyBzdGF0aWMsIEknbSBhIGJpdCBsZXNzIGNlcnRhaW4uIFRoZXJlIGlzIGEgY2hhbmNlIGl0ICpjb3VsZCogYmUgaW5saW5lZC4gSSBuZWVkIHRvIGJlIGNhcmVmdWwgd2l0aCB0aGF0IG9uZS5cblxuSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlcmUgYXJlIGFueSBvdGhlciBmdW5jdGlvbnMgdGhhdCB3aWxsIHNlcnZlIHdlbGwuIFRpbWUgdG8gaW52ZXN0aWdhdGUgZm9yIG90aGVyIHBvdGVudGlhbGx5IG5vbi1pbmxpbmVkIGZ1bmN0aW9ucy4gSSBzZWUgYGJwZl9jZ3JvdXBfbGlua19sb3BzYCBpcyBhbHNvIHN0YXRpYywgc28gSSBjYW4gc3RyaWtlIHRoYXQgb25lIG9mZiB0aGUgbGlzdC5cblxuVGhlIHF1ZXN0aW9uIHRoZW4gaXMsIHdoYXQgYWJvdXQgYGNncm91cF9icGZfcHJvZ19hdHRhY2hgPyBJIG5lZWQgdG8gbG9vayBpbnRvIHRoaXMgb25lIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjIyMiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMzoxMDo0My4wOTY5MjQwNjVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNDA5Nzg0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjZ3JvdXBfYnBmX3Byb2dfYXR0YWNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvY2dyb3VwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9jZ3JvdXAuYz0xMzY5PXN0YXRpYyBpbnQgY2dyb3VwX2JwZl9xdWVyeShzdHJ1Y3QgY2dyb3VwICpjZ3JwLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTM3OS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jOjEzODA6aW50IGNncm91cF9icGZfcHJvZ19hdHRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMzgxLVxcdFxcdFxcdCAgIGVudW0gYnBmX3Byb2dfdHlwZSBwdHlwZSwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMzoxMDo0My4yMDEwMjYzNDVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY1MTg1NDc5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3NpbmcgYXMgYW4gZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWwgY2dyb3VwIEJQRiBJbnRlcmFjdGlvbioqXG5cbkFscmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGNncm91cF9icGZfcHJvZ19hdHRhY2hgIGZ1bmN0aW9uIOKAkyBhbmQgaW1tZWRpYXRlbHkgSSBub3RpY2UgaXQncyAqbm90KiBzdGF0aWMsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBJdCBpbXBsaWVzIGl0IG1pZ2h0IGJlIGNhbGxlZCBmcm9tIHNvbWV3aGVyZSBvdXRzaWRlIHRoZSBpbW1lZGlhdGUgc2NvcGUgb2Ygd2hhdCBJJ20gY3VycmVudGx5IGxvb2tpbmcgYXQuIEhvd2V2ZXIsIHRoZSBwYXRjaCBpbiBxdWVzdGlvbiBzZWVtcyB0byBiZSBmb2N1c2luZyBvbiBjaGFuZ2VzIHdpdGhpbiBgX19jZ3JvdXBfYnBmX3JlcGxhY2VgLiBOb3csIHRoaXMgYF9fY2dyb3VwX2JwZl9yZXBsYWNlYCBmdW5jdGlvbiBpcywgYXMgZmFyIGFzIEkgY2FuIHNlZSwgZGlyZWN0bHkgY2FsbGVkIGJ5IGBjZ3JvdXBfYnBmX3JlcGxhY2VgLCB0aGF0J3MgdGhlIG9idmlvdXMgbGluay5cblxuQnV0IHRoZSBxdWVzdGlvbiBpcywgKndoZXJlIGVsc2UqIG1pZ2h0IGBfX2Nncm91cF9icGZfcmVwbGFjZWAgYmUgY2FsbGVkPyBJZiB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgZWxzZXdoZXJlLCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgcGF0Y2ggYmVjb21lIHNpZ25pZmljYW50bHkgd2lkZXIuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGUgY2FsbCBncmFwaC4gQSBxdWljayBncmVwIGZvciBjYWxscyB0byBgX19jZ3JvdXBfYnBmX3JlcGxhY2VgIHNob3VsZCBkbyB0aGUgdHJpY2ssIG9yIGJldHRlciB5ZXQsIEkgY2FuIGNoZWNrIHRoZSBzeW1ib2wgdGFibGUgZGlyZWN0bHkuIFRoYXQgd291bGQgYmUgdGhlIGZpcnN0IHN0ZXAgaW4gZGV0ZXJtaW5pbmcgdGhlIGltcGFjdCBvZiB0aGlzIGNoYW5nZS4gSXMgdGhpcyBhIGxvY2FsaXplZCBmaXgsIG9yIGRvZXMgaXQgaGF2ZSB0aGUgcG90ZW50aWFsIHRvIHJpcHBsZSBvdXR3YXJkP1xuXG5cbiIsIklucHV0VG9rZW5zIjo2Nzg4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTM6MTA6NDYuODUyODgzNjk2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjY1MzcyMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2Nncm91cF9icGZfcmVwbGFjZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL2Nncm91cC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvY2dyb3VwLmM9MTAyMT1zdGF0aWMgYm9vbCBjZ3JvdXBfYnBmX3N0b3JhZ2VzX2NvbXBhdGlibGUoc3RydWN0IGJwZl9wcm9nICpvbGRfcHJvZyxcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTAzNS0vKipcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjEwMzY6ICogX19jZ3JvdXBfYnBmX3JlcGxhY2UoKSAtIFJlcGxhY2UgbGluaydzIHByb2dyYW0gYW5kIHByb3BhZ2F0ZSB0aGUgY2hhbmdlXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMDM3LSAqICAgICAgICAgICAgICAgICAgICAgICAgICB0byBkZXNjZW5kYW50c1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMDQ0LSAqL1xcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTA0NTpzdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9yZXBsYWNlKHN0cnVjdCBjZ3JvdXAgKmNncnAsXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMDQ2LVxcdFxcdFxcdFxcdHN0cnVjdCBicGZfY2dyb3VwX2xpbmsgKmxpbmssXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jPTEwODM9c3RhdGljIGludCBjZ3JvdXBfYnBmX3JlcGxhY2Uoc3RydWN0IGJwZl9saW5rICpsaW5rLCBzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nLFxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMTAwLVxcdH1cXG5rZXJuZWwvYnBmL2Nncm91cC5jOjExMDE6XFx0cmV0ID0gX19jZ3JvdXBfYnBmX3JlcGxhY2UoY2dfbGluay1cXHUwMDNlY2dyb3VwLCBjZ19saW5rLCBuZXdfcHJvZyk7XFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xMTAyLW91dF91bmxvY2s6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEzOjEwOjQ2LjkxOTU0NDk4OVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDgxMDMyOTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgb3duIGV4cGVydCBwZXJzcGVjdGl2ZTpcblxuKipGb2N1c2luZyBvbiBgY2dyb3VwX2JwZl9yZXBsYWNlYCoqXG5cbkFscmlnaHQsIGl0J3MgY2xlYXIgdGhlIHByb2JsZW0gc3BhY2UgY2VudGVycyBhcm91bmQgYGNncm91cF9icGZfcmVwbGFjZWAuIFRoYXTigJlzIHRoZSBrZXkgc3ltYm9sIHdlIG5lZWQgdG8gaG9uZSBpbiBvbi4gSXQncyB0aGUgcmlnaHQgZW50cnkgcG9pbnQgZm9yIHRoaXMgaW52ZXN0aWdhdGlvbi5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIGVzc2VudGlhbCBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gd2hhdCBidWlsZCBmbGFncyBhcmUgcmVsZXZhbnQgaGVyZS4gSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IGBrZXJuZWwvYnBmL2Nncm91cC5jYCBpcyB0aGUgbGlrZWx5IHNvdXJjZSBmaWxlIGZvciB0aGlzIGZ1bmN0aW9uYWxpdHkuIEFuZCB0aGF0IG1vZHVsZSBpcywgb2YgY291cnNlLCBvbmx5IGluY2x1ZGVkIGluIHRoZSBrZXJuZWwgYnVpbGQgaWYgYENPTkZJR19DR1JPVVBfQlBGYCBpcyBlbmFibGVkLiBUaW1lIHRvIGNvbmZpcm0gdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDkyLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTM6MTA6NTAuNDAwNTgwNDk5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDE3OTA3MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2dyb3VwXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9NYWtlZmlsZT0zNT1lbmRpZlxcbmtlcm5lbC9icGYvTWFrZWZpbGU6MzY6b2JqLSQoQ09ORklHX0NHUk9VUF9CUEYpICs9IGNncm91cC5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0zNy1pZmVxICgkKENPTkZJR19JTkVUKSx5KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMzoxMDo1MC41MDIzNzY0MzlaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMxODI2NzQ2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQ2hlY2tpbmcgdGhlIENHUk9VUF9CUEYgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHNvIGBDR1JPVVBfQlBGYCBpcyB0aGUgZmxhZyB3ZSBuZWVkIGVuYWJsZWQuIEJlZm9yZSBJIGRpdmUgaW50byBhbnl0aGluZywgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdmVyaWZ5IGl0cyBkZXBlbmRlbmNpZXMuIEl0J3MgY3J1Y2lhbCwgaW4gYW55IGtlcm5lbCBjb25maWd1cmF0aW9uLCB0byB1bmRlcnN0YW5kIHdoYXQgb3RoZXIgY29tcG9uZW50cyBhcmUgcmVxdWlyZWQgb3IgdHJpZ2dlcmVkIGJ5IHRoaXMgb25lLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3Qgb3Zlcmxvb2tpbmcgYW55IHVuZGVybHlpbmcgZGVwZW5kZW5jaWVzIHRoYXQgY291bGQgdHJpcCBtZSB1cCBsYXRlci4gQSBxdWljayBjaGVjayBvZiBkZXBlbmRlbmNpZXMgaXMgZXNzZW50aWFsIGZvciBhdm9pZGluZyB1bmV4cGVjdGVkIGlzc3VlcyBkb3duIHRoZSBsaW5lLiBJdCdzIGEgZnVuZGFtZW50YWwgc3RlcCBmb3Igc3RhYmlsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODI0LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTM6MTA6NTMuODIwNjQ3MTI2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NjYwNjQ0MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ0dST1VQX0JQRlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTEzNDE9Y29uZmlnIENHUk9VUF9QRVJGXFxuLS1cXG5pbml0L0tjb25maWctMTM1MS1cXG5pbml0L0tjb25maWc6MTM1Mjpjb25maWcgQ0dST1VQX0JQRlxcbmluaXQvS2NvbmZpZy0xMzUzLVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIGVCUEYgcHJvZ3JhbXMgYXR0YWNoZWQgdG8gY2dyb3Vwc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTM6MTA6NTMuOTA3MjU4MjE3WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNDU5NDcyMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBDR1JPVVBfQlBGIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgYENHUk9VUF9CUEZgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXaGF0IG90aGVyIGtlcm5lbCBmZWF0dXJlcywgc3Vic3lzdGVtcywgb3IgY29uZmlndXJhdGlvbiBvcHRpb25zICpyZWx5KiBvbiB0aGlzP1wiIEkgd2FudCB0byB0cmFjZSB0aGUgZGVwZW5kZW5jaWVzLiBUaGlzIGlzbid0IGp1c3QgYWJvdXQga25vd2luZyBpZiBhIG1vZHVsZSBuZWVkcyBpdCwgYnV0IGFib3V0IHVuZGVyc3RhbmRpbmcgdGhlICphcmNoaXRlY3R1cmFsIGNob2ljZXMqIHRoYXQgaGF2ZSBiZWVuIG1hZGUgYW5kIHdoYXQncyBlbmFibGVkIGlmIGBDR1JPVVBfQlBGYCBpcyBhY3RpdmF0ZWQuXG5cblNwZWNpZmljYWxseSwgSSB3YW50IHRvIGNvbnNpZGVyOlxuXG4qICAgKipTZWN1cml0eSBDb250ZXh0czoqKiBIb3cgZG9lcyBgQ0dST1VQX0JQRmAgaW50ZXJhY3Qgd2l0aCBjYXBhYmlsaXRpZXMsIExTTXMgKGxpa2UgU0VMaW51eC9BcHBBcm1vciksIGFuZCBzZWNjb21wPyBBcmUgdGhlcmUgYW55IHN1YnRsZSBjaGFuZ2VzIHRvIHRoZSBzZWN1cml0eSBtb2RlbCB3aGVuIGl0J3MgZW5hYmxlZD8gRG9lcyBpdCBwcm92aWRlIGFueSBtaXRpZ2F0aW9uIGZvciBvdGhlciB2dWxuZXJhYmlsaXRpZXMgaW4gdGhlIGtlcm5lbD9cbiogICAqKlBlcmZvcm1hbmNlIGltcGxpY2F0aW9uczoqKiBBcmUgdGhlcmUgYW55IHNwZWNpZmljIHBlcmZvcm1hbmNlIGhpdHMgZnJvbSBlbmFibGluZyBvciBkaXNhYmxpbmcgdGhpcz8gV2hhdCBoYXBwZW5zIHRvIHRoZSBvdGhlciBmZWF0dXJlcz9cbiogICAqKlJlc291cmNlIE1hbmFnZW1lbnQ6KiogQXJlIHRoZXJlIGFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIgY2dyb3VwIGNvbnRyb2xsZXJzIChjcHUsIG1lbW9yeSwgbmV0d29yaywgZXRjLik/IEFueSBvdmVybGFwcyBpbiBmdW5jdGlvbj9cbiogICAqKlRvb2xpbmc6KiogV2hhdCB0b29saW5nIGlzIHJlcXVpcmVkIHRvIGVmZmVjdGl2ZWx5ICp1c2UqIGBDR1JPVVBfQlBGYD8gQXJlIHRoZXJlIHVzZXJzcGFjZSBsaWJyYXJpZXMsIGNvbW1hbmQtbGluZSB1dGlsaXRpZXMsIG9yIG1vbml0b3JpbmcgZnJhbWV3b3JrcyB0aGF0IGFyZSBlaXRoZXIgbWFuZGF0b3J5IG9yIGhpZ2hseSByZWNvbW1lbmRlZD8gSG93IGRvZXMgdGhpcyBhZmZlY3QgbXkgcHJlZmVycmVkIGRlYnVnZ2luZyB0b29scz9cblxuQmFzaWNhbGx5LCBJJ20gZGlnZ2luZyBmb3IgdGhlIFwid2h5XCIgYW5kIFwiaG93XCIgYmVoaW5kIHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24uIEknbSBsb29raW5nIGZvciB0aGUgcmlwcGxlIGVmZmVjdHMg4oCTIHRoZSB0aGluZ3MgdGhhdCBjaGFuZ2UsIHRoZSB0cmFkZS1vZmZzIHRoYXQgaGF2ZSBiZWVuIG1hZGUsIGFuZCB0aGUgb3ZlcmFsbCBkZXNpZ24gcGhpbG9zb3BoeSB0aGF0J3MgZHJpdmluZyBpdHMgaW5jbHVzaW9uLiBUaW1lIHRvIGRlbHZlIGludG8gdGhlIGNvZGUgYW5kIGRvY3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxMDcsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMzoxMDo1OC4yNTMyMDgzMTdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU2MjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluaXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzUyLFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMzUyOlxcdGNvbmZpZyBDR1JPVVBfQlBGXFxuMTM1MzpcXHRcXHRib29sIFxcXCJTdXBwb3J0IGZvciBlQlBGIHByb2dyYW1zIGF0dGFjaGVkIHRvIGNncm91cHNcXFwiXFxuMTM1NDpcXHRcXHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXFxuMTM1NTpcXHRcXHRzZWxlY3QgU09DS19DR1JPVVBfREFUQVxcbjEzNTY6XFx0XFx0aGVscFxcbjEzNTc6XFx0XFx0ICBBbGxvdyBhdHRhY2hpbmcgZUJQRiBwcm9ncmFtcyB0byBhIGNncm91cCB1c2luZyB0aGUgYnBmKDIpXFxuMTM1ODpcXHRcXHQgIHN5c2NhbGwgY29tbWFuZCBCUEZfUFJPR19BVFRBQ0guXFxuMTM1OTpcXHRcXG4xMzYwOlxcdFxcdCAgSW4gd2hpY2ggY29udGV4dCB0aGVzZSBwcm9ncmFtcyBhcmUgYWNjZXNzZWQgZGVwZW5kcyBvbiB0aGUgdHlwZVxcbjEzNjE6XFx0XFx0ICBvZiBhdHRhY2htZW50LiBGb3IgaW5zdGFuY2UsIHByb2dyYW1zIHRoYXQgYXJlIGF0dGFjaGVkIHVzaW5nXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEzOjEwOjU4LjI1MzM2NjMyN1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDYyMjc2NzU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBCUEYgYW5kIGNncm91cCBGdW5jdGlvbmFsaXR5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYENHUk9VUF9CUEZgIGFuZCByZWFsaXplIGl0J3MgaW50cmluc2ljYWxseSBsaW5rZWQgdG8gYEJQRl9TWVNDQUxMYC4gIFRob3NlIGFyZSB0aGUga2V5IGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byBrZWVwIGluIG1pbmQuIExldCdzIGRlbHZlIGRlZXBlciBpbnRvIHRoaXMuIEkgd2FudCB0byBjb25maXJtIHRoYXQgdGhlIGBjZ3JvdXBfYnBmX3JlcGxhY2VgIGZ1bmN0aW9uIGlzIG5vdCBpbmxpbmVkLiBJdCdzIHVzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyIHdpdGhpbiBgYnBmX2Nncm91cF9saW5rX2xvcHNgLCBzbyBpbmxpbmluZyBpc24ndCBwb3NzaWJsZSwgd2hpY2ggaXMgZ29vZC4gIEhvbGQgb24sIHRob3VnaCDigJMgaXQncyAqc3RhdGljKiEgIEJ1dCB3ZSdyZSB0YWtpbmcgaXRzIGFkZHJlc3MuICBUaGF0IG1ha2VzIGl0IGEgZ3JlYXQgc3ltYm9sIHRvIGZvY3VzIG9uLiBcblxuTm93LCBJJ20gZ29pbmcgdG8gc2NhbiB0aGUgYGtlcm5lbC9icGYvY2dyb3VwLmNgIGZpbGUgZm9yIG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyBwcm9jZXNzLiBMZXQgbWUgY2hlY2suLi4gSG1tLCB3aGF0IGFib3V0IGBicGZfY2dyb3VwX2xpbmtfdXBkYXRlYD8gTm9wZS4gSXQgbG9va3MgbGlrZSBgY2dyb3VwX2JwZl9yZXBsYWNlYCBpcyB0aGUgY29yZSBmdW5jdGlvbiBoZXJlLiBMZXQncyB3aWRlbiB0aGUgc2NvcGUuIFdoYXQgb3RoZXIgZnVuY3Rpb25zIGV4aXN0IG91dHNpZGUgb2YgdGhlIGBjZ3JvdXAuY2AgZmlsZT8gSSBzZWUgYGJwZl9saW5rX3VwZGF0ZWAgaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYC4gT2theSwgdGhhdCdzIHNvbWV0aGluZyB0byBpbnZlc3RpZ2F0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODcwMSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEzOjExOjAzLjMxNTY0NTM2M1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODMxOTMxMjIsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9saW5rX3VwZGF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL3N5c2NhbGwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTM6MTE6MDMuMzk4ODQ0ODU1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMjk0MDk1OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqSW50ZXJuYWwgTW9ub2xvZ3VlOiBSZXZpc2l0aW5nIEtlcm5lbCBCUEYgQ29kZSoqXG5cbkFscmlnaHQsIGhvbGQgb24gYSBzZWNvbmQuIERpZG4ndCBJICpqdXN0KiBnbyB0aHJvdWdoIGBsaW5rX3VwZGF0ZWA/IEknbSBwcmV0dHkgc3VyZSBJIGFscmVhZHkgcG9rZWQgYXJvdW5kIGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AsIHNvIEkgc2hvdWxkIGJlIGFibGUgdG8gcmVjYWxsIHRob3NlIHBhcnRzLiBJIGZlZWwgbGlrZSBJJ3ZlIGp1c3Qgd2FzdGVkIG15IHRpbWUuIExldCBtZSBjaGVjayB0aGUgbm90ZXMgSSBtYWRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MjMzLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTM6MTE6MDYuNDI4MjU3MDkyWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4ODkwMzI3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsaW5rX3VwZGF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL3N5c2NhbGwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3N5c2NhbGwuYz01ODQ0PXN0YXRpYyBpbnQgbGlua19jcmVhdGUodW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTk0OS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1OTUwOnN0YXRpYyBpbnQgbGlua191cGRhdGVfbWFwKHN0cnVjdCBicGZfbGluayAqbGluaywgdW5pb24gYnBmX2F0dHIgKmF0dHIpXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTk1MS17XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01OTU0LVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU5NTU6XFx0bmV3X21hcCA9IGJwZl9tYXBfZ2V0KGF0dHItXFx1MDAzZWxpbmtfdXBkYXRlLm5ld19tYXBfZmQpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5NTYtXFx0aWYgKElTX0VSUihuZXdfbWFwKSlcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5NTgtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTk1OTpcXHRpZiAoYXR0ci1cXHUwMDNlbGlua191cGRhdGUuZmxhZ3MgXFx1MDAyNiBCUEZfRl9SRVBMQUNFKSB7XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTk2MDpcXHRcXHRvbGRfbWFwID0gYnBmX21hcF9nZXQoYXR0ci1cXHUwMDNlbGlua191cGRhdGUub2xkX21hcF9mZCk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTk2MS1cXHRcXHRpZiAoSVNfRVJSKG9sZF9tYXApKSB7XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01OTY0LVxcdFxcdH1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1OTY1OlxcdH0gZWxzZSBpZiAoYXR0ci1cXHUwMDNlbGlua191cGRhdGUub2xkX21hcF9mZCkge1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5NjYtXFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5NzgtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTk3OTojZGVmaW5lIEJQRl9MSU5LX1VQREFURV9MQVNUX0ZJRUxEIGxpbmtfdXBkYXRlLm9sZF9wcm9nX2ZkXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTk4MC1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1OTgxOnN0YXRpYyBpbnQgbGlua191cGRhdGUodW5pb24gYnBmX2F0dHIgKmF0dHIpXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTk4Mi17XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01OTkwLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU5OTE6XFx0ZmxhZ3MgPSBhdHRyLVxcdTAwM2VsaW5rX3VwZGF0ZS5mbGFncztcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01OTkyLVxcdGlmIChmbGFncyBcXHUwMDI2IH5CUEZfRl9SRVBMQUNFKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTk5NC1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1OTk1OlxcdGxpbmsgPSBicGZfbGlua19nZXRfZnJvbV9mZChhdHRyLVxcdTAwM2VsaW5rX3VwZGF0ZS5saW5rX2ZkKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01OTk2LVxcdGlmIChJU19FUlIobGluaykpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01OTk5LVxcdGlmIChsaW5rLVxcdTAwM2VvcHMtXFx1MDAzZXVwZGF0ZV9tYXApIHtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MDAwOlxcdFxcdHJldCA9IGxpbmtfdXBkYXRlX21hcChsaW5rLCBhdHRyKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MDAxLVxcdFxcdGdvdG8gb3V0X3B1dF9saW5rO1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjAwMy1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MDA0OlxcdG5ld19wcm9nID0gYnBmX3Byb2dfZ2V0KGF0dHItXFx1MDAzZWxpbmtfdXBkYXRlLm5ld19wcm9nX2ZkKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MDA1LVxcdGlmIChJU19FUlIobmV3X3Byb2cpKSB7XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MDEwLVxcdGlmIChmbGFncyBcXHUwMDI2IEJQRl9GX1JFUExBQ0UpIHtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MDExOlxcdFxcdG9sZF9wcm9nID0gYnBmX3Byb2dfZ2V0KGF0dHItXFx1MDAzZWxpbmtfdXBkYXRlLm9sZF9wcm9nX2ZkKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MDEyLVxcdFxcdGlmIChJU19FUlIob2xkX3Byb2cpKSB7XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MDE2LVxcdFxcdH1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MDE3OlxcdH0gZWxzZSBpZiAoYXR0ci1cXHUwMDNlbGlua191cGRhdGUub2xkX3Byb2dfZmQpIHtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MDE4LVxcdFxcdHJldCA9IC1FSU5WQUw7XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz02MzU0PXN0YXRpYyBpbnQgX19zeXNfYnBmKGVudW0gYnBmX2NtZCBjbWQsIGJwZnB0cl90IHVhdHRyLCB1bnNpZ25lZCBpbnQgc2l6ZSxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTY0OTUtXFx0Y2FzZSBCUEZfTElOS19VUERBVEU6XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjQ5NjpcXHRcXHRlcnIgPSBsaW5rX3VwZGF0ZShcXHUwMDI2YXR0cik7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjQ5Ny1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTM6MTE6MDYuNTE3MTY2MjMyWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyMjQxNzE5NDM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIEJQRiBDZ3JvdXAgTGluayBVcGRhdGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBoZXJlJ3MgbXkgYnJlYWtkb3duLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGxpZXMgd2l0aGluIHRoZSBgQlBGX0xJTktfVVBEQVRFYCBzeXNjYWxsIGhhbmRsZXIsIHNwZWNpZmljYWxseSB0aGUgY2dyb3VwLXNwZWNpZmljIGltcGxlbWVudGF0aW9uOiBgY2dyb3VwX2JwZl9yZXBsYWNlYC4gSSd2ZSBjb25maXJtZWQgdGhhdCBgY2dyb3VwX2JwZl9yZXBsYWNlYCBpcyBzdGF0aWMuIEluaXRpYWxseSwgdGhhdCBnYXZlIG1lIHBhdXNlIGJlY2F1c2UgSSB3b25kZXJlZCBpZiBpdCBjb3VsZCBiZSBhIHZhbGlkIGZvY3VzIHN5bWJvbCwgYnV0IHRoZW4gSSByZW1lbWJlcmVkIHN5emthbGxlciBoYW5kbGVzIHN0YXRpYyBmdW5jdGlvbnMgZmluZSBpZiB0aGV5IGFyZSBub3QgaW5saW5lZC4gSW4gdGhpcyBjYXNlIGl0IGlzIGEgZnVuY3Rpb24gcG9pbnRlci5cblxuSSd2ZSBhbHNvIGRvdWJsZS1jaGVja2VkIHRoYXQgYF9fY2dyb3VwX2JwZl9yZXBsYWNlYCBpcyBhbHNvIHN0YXRpYywgYW5kIGl0IGlzLiBGdXJ0aGVybW9yZSwgYGNncm91cF9icGZfcmVwbGFjZWAgaXMgdGhlIG9ubHkgY2FsbGVyIG9mIGBfX2Nncm91cF9icGZfcmVwbGFjZWAuXG5cblRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIGNvbXBhdGliaWxpdHkgY2hlY2sgYmV0d2VlbiB0aGUgY2dyb3VwIHN0b3JhZ2VzIG9mIHRoZSBvbGQgYW5kIG5ldyBCUEYgcHJvZ3JhbXMgZHVyaW5nIGEgbGluayByZXBsYWNlbWVudCB2aWEgYGNncm91cF9icGZfc3RvcmFnZXNfY29tcGF0aWJsZWAsIHdoaWNoIGlzIGEgY2xlYXIgZnVuY3Rpb25hbCBjaGFuZ2UuIEl0J3MgZXNzZW50aWFsbHkgcHJldmVudGluZyBpbmNvbXBhdGlibGUgcHJvZ3JhbSBzd2Fwcy4gSXQgaXMgY2FsbGVkIGluIGBfX2Nncm91cF9icGZfcmVwbGFjZWAgZnJvbSBgY2dyb3VwX2JwZl9yZXBsYWNlYC5cblxuU28sIHRoZSBmb2N1cyBzeW1ib2wgc2hvdWxkIGJlIGBjZ3JvdXBfYnBmX3JlcGxhY2VgLCBhbmQgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucyBhcmUgYENHUk9VUF9CUEZgIGFuZCBgQlBGX1NZU0NBTExgIHRvIHJlYWNoIHRoZSByZWxhdGVkIGNvZGUuXG5cblRoZXJlZm9yZSwgbXkgc3VtbWFyeSBpczpcbiogICAqKldvcnRoRnV6emluZzoqKiBUcnVlXG4qICAgKipSZWFzb25pbmc6KiogVGhlIHBhdGNoIGFkZHMgYSBjaGVjayB0byBwcmV2ZW50IHJlcGxhY2luZyBhIEJQRiBwcm9ncmFtIGluIGEgY2dyb3VwIGxpbmsgaWYgdGhlIG5ldyBwcm9ncmFtIGhhcyBkaWZmZXJlbnQgY2dyb3VwIHN0b3JhZ2VzIHRoYW4gdGhlIG9sZCBwcm9ncmFtLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIEJQRiBjZ3JvdXAgbGluayByZXBsYWNlbWVudCBsb2dpYywgcmVhY2hhYmxlIHZpYSB0aGUgQlBGX0xJTktfVVBEQVRFIHN5c2NhbGwuXG4qICAgKipGb2N1c1N5bWJvbHM6KiogYGNncm91cF9icGZfcmVwbGFjZWBcbiogICAqKkVuYWJsZUNvbmZpZ3M6KiogYENHUk9VUF9CUEZgLCBgQlBGX1NZU0NBTExgXG5cbk5vdywgSSdsbCB1c2UgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBhbmQgbW92ZSBvbiB0byB0aGUgbmV4dCBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA0ODQsIk91dHB1dFRva2VucyI6MTA3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODg5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEzOjExOjE4Ljc1ODg4OTA5NloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODkxNzM1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0dST1VQX0JQRlwiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjZ3JvdXBfYnBmX3JlcGxhY2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgY29tcGF0aWJpbGl0eSBjaGVjayBmb3IgY2dyb3VwIHN0b3JhZ2VzIHdoZW4gcmVwbGFjaW5nIGEgQlBGIHByb2dyYW0gaW4gYSBjZ3JvdXAgbGluay4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBCUEYgY2dyb3VwIGxpbmsgcmVwbGFjZW1lbnQgbG9naWMsIHJlYWNoYWJsZSB2aWEgdGhlIEJQRl9MSU5LX1VQREFURSBzeXNjYWxsIGNvbW1hbmQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0dST1VQX0JQRlwiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjZ3JvdXBfYnBmX3JlcGxhY2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgY29tcGF0aWJpbGl0eSBjaGVjayBmb3IgY2dyb3VwIHN0b3JhZ2VzIHdoZW4gcmVwbGFjaW5nIGEgQlBGIHByb2dyYW0gaW4gYSBjZ3JvdXAgbGluay4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBCUEYgY2dyb3VwIGxpbmsgcmVwbGFjZW1lbnQgbG9naWMsIHJlYWNoYWJsZSB2aWEgdGhlIEJQRl9MSU5LX1VQREFURSBzeXNjYWxsIGNvbW1hbmQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEzOjExOjE4LjkxNzgxNDUxWiIsIlNlcSI6MzEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDI1ODMwMTM0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEzOjExOjE4LjkxODQ5NzgwOVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMDI1NzYxMjQyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIHNpbXBsZSBjb21wYXRpYmlsaXR5IGNoZWNrIGZvciBCUEYgY2dyb3VwIHN0b3JhZ2UgZHVyaW5nIHByb2dyYW0gcmVwbGFjZW1lbnQuIEl0IGNvbXBhcmVzIGV4aXN0aW5nIGZpZWxkcyBpbiB0aGUgYGJwZl9wcm9nLVxcdTAwM2VhdXhgIHN0cnVjdHVyZS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgY29weSBkYXRhIHRvIHVzZXIgc3BhY2UsIG9yIHVzZSBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBjb250cm9sIGZsb3cuIEFueSBtZW1vcnkgZXJyb3JzIHJlbGF0ZWQgdG8gdGhpcyBjaGFuZ2UsIHN1Y2ggYXMgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBvciB1c2UtYWZ0ZXItZnJlZSwgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDZjNGQ5MmY3MGJjZDdlY2I2MmFhMWJjMDQ4YTQ1NjA2MTI3ZjAwOTBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyA3IDEzOjEwOjA5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9jZ3JvdXAuYyBiL2tlcm5lbC9icGYvY2dyb3VwLmNcbmluZGV4IDQzNTVjY2I3OGE5YzYuLjVjYzliMmQ5MmZkNTggMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2Nncm91cC5jXG4rKysgYi9rZXJuZWwvYnBmL2Nncm91cC5jXG5AQCAtMTAxOCw2ICsxMDE4LDIwIEBAIHN0YXRpYyB2b2lkIHJlcGxhY2VfZWZmZWN0aXZlX3Byb2coc3RydWN0IGNncm91cCAqY2dycCxcbiBcdH1cbiB9XG4gXG4rc3RhdGljIGJvb2wgY2dyb3VwX2JwZl9zdG9yYWdlc19jb21wYXRpYmxlKHN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2csXG4rXHRcdFx0XHRcdCAgIHN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2cpXG4re1xuK1x0ZW51bSBicGZfY2dyb3VwX3N0b3JhZ2VfdHlwZSBzdHlwZTtcbitcbitcdGZvcl9lYWNoX2Nncm91cF9zdG9yYWdlX3R5cGUoc3R5cGUpIHtcbitcdFx0aWYgKG9sZF9wcm9nLVx1MDAzZWF1eC1cdTAwM2VjZ3JvdXBfc3RvcmFnZVtzdHlwZV0gIT1cbitcdFx0ICAgIG5ld19wcm9nLVx1MDAzZWF1eC1cdTAwM2VjZ3JvdXBfc3RvcmFnZVtzdHlwZV0pXG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuIC8qKlxuICAqIF9fY2dyb3VwX2JwZl9yZXBsYWNlKCkgLSBSZXBsYWNlIGxpbmsncyBwcm9ncmFtIGFuZCBwcm9wYWdhdGUgdGhlIGNoYW5nZVxuICAqICAgICAgICAgICAgICAgICAgICAgICAgICB0byBkZXNjZW5kYW50c1xuQEAgLTEwNTYsNiArMTA3MCw5IEBAIHN0YXRpYyBpbnQgX19jZ3JvdXBfYnBmX3JlcGxhY2Uoc3RydWN0IGNncm91cCAqY2dycCxcbiBcdGlmICghZm91bmQpXG4gXHRcdHJldHVybiAtRU5PRU5UO1xuIFxuK1x0aWYgKCFjZ3JvdXBfYnBmX3N0b3JhZ2VzX2NvbXBhdGlibGUobGluay1cdTAwM2VsaW5rLnByb2csIG5ld19wcm9nKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4gXHRjZ3JwLVx1MDAzZWJwZi5yZXZpc2lvbnNbYXR5cGVdICs9IDE7XG4gXHRvbGRfcHJvZyA9IHhjaGcoXHUwMDI2bGluay1cdTAwM2VsaW5rLnByb2csIG5ld19wcm9nKTtcbiBcdHJlcGxhY2VfZWZmZWN0aXZlX3Byb2coY2dycCwgYXR5cGUsIHBsKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEzOjExOjE4LjkxODQ5OTc2WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMjU3NTc1MjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBCUEYgQ2dyb3VwIFN0b3JhZ2UgQ29tcGF0aWJpbGl0eSBEdXJpbmcgUHJvZ3JhbSBSZXBsYWNlbWVudCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBpcyBmb2N1c2VkIG9uIGVuc3VyaW5nIGNvbXBhdGliaWxpdHkgb2YgQlBGIGNncm91cCBzdG9yYWdlIGR1cmluZyBwcm9ncmFtIHJlcGxhY2VtZW50LiBTcGVjaWZpY2FsbHksIGl0IGludHJvZHVjZXMgYSBmdW5jdGlvbiwgYGNncm91cF9icGZfc3RvcmFnZXNfY29tcGF0aWJsZWAsIHRvIGNvbXBhcmUgdGhlIGBjZ3JvdXBfc3RvcmFnZWAgZmllbGRzIHdpdGhpbiB0aGUgYGJwZl9wcm9nLVx1MDAzZWF1eGAgc3RydWN0dXJlIG9mIHRoZSBvbGQgYW5kIG5ldyBwcm9ncmFtcy4gVGhlIGNoZWNrIGlzIHNpbXBsZTogYG9sZF9wcm9nLVx1MDAzZWF1eC1cdTAwM2VjZ3JvdXBfc3RvcmFnZVtzdHlwZV0gIT0gbmV3X3Byb2ctXHUwMDNlYXV4LVx1MDAzZWNncm91cF9zdG9yYWdlW3N0eXBlXWAuIElmIGFueSBvZiB0aGUgc3RvcmFnZSB0eXBlcyAoYHN0eXBlYCkgZGlmZmVyLCB0aGUgcmVwbGFjZW1lbnQgaXMgcmVqZWN0ZWQgYnkgcmV0dXJuaW5nIGAtRUlOVkFMYC5cblxuTXkgaW1tZWRpYXRlIGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgdW5pbml0aWFsaXplZCBtZW1vcnkuIERvZXMgdGhpcyBjaGFuZ2UgaW50cm9kdWNlIGFueSByaXNrcyB0aGVyZT8gTm8sIGFmdGVyIGEgcXVpY2sgcmV2aWV3LCBpdCdzIGNvbXBhcmluZyBwb2ludGVycyBvciB2YWx1ZXMgd2l0aGluIHRoZSBgY2dyb3VwX3N0b3JhZ2VgIGFycmF5LCBwYXJ0IG9mIGBicGZfcHJvZy1cdTAwM2VhdXhgLiBUaGUgcG90ZW50aWFsIGJ1Z3MgYXJlIGxpbWl0ZWQgdG8gTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBvciB1c2UtYWZ0ZXItZnJlZSwgaXNzdWVzIHRoYXQgS0FTQU4gc2hvdWxkIGJlIHdlbGwtZXF1aXBwZWQgdG8gZGV0ZWN0LiBUaGlzIGlzbid0IHdyaXRpbmcgdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXJzcGFjZSwgbm9yIGlzIGl0IG1ha2luZyBjcml0aWNhbCBjb250cm9sLWZsb3cgZGVjaXNpb25zIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5ICh1bmxlc3MgYGNncm91cF9zdG9yYWdlYCBpdHNlbGYgaXMgaW5pdGlhbGl6ZWQgYmFkbHksIGJ1dCB0aGF0J3MgYSBwcmUtZXhpc3RpbmcgZmllbGQgYW5kIHNob3VsZCBiZSBpbml0aWFsaXplZCBieSB0aGUgcHJvZ3JhbSBsb2FkZXIpLlxuXG5Mb29raW5nIG1vcmUgY2xvc2VseSBhdCB0aGUgY29kZTpcbmBgYGNcbnN0YXRpYyBib29sIGNncm91cF9icGZfc3RvcmFnZXNfY29tcGF0aWJsZShzdHJ1Y3QgYnBmX3Byb2cgKm9sZF9wcm9nLFxuXHRcdFx0XHRcdCAgIHN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2cpXG57XG5cdGVudW0gYnBmX2Nncm91cF9zdG9yYWdlX3R5cGUgc3R5cGU7XG5cblx0Zm9yX2VhY2hfY2dyb3VwX3N0b3JhZ2VfdHlwZShzdHlwZSkge1xuXHRcdGlmIChvbGRfcHJvZy1cdTAwM2VhdXgtXHUwMDNlY2dyb3VwX3N0b3JhZ2Vbc3R5cGVdICE9XG5cdFx0ICAgIG5ld19wcm9nLVx1MDAzZWF1eC1cdTAwM2VjZ3JvdXBfc3RvcmFnZVtzdHlwZV0pXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRyZXR1cm4gdHJ1ZTtcbn1cbmBgYFxuSXQncyBqdXN0IGEgc3RyYWlnaHRmb3J3YXJkIGNvbXBhcmlzb24uIFRoZXJlJ3Mgbm90aGluZyBoZXJlIHRoYXQncyBwYXJ0aWN1bGFybHkgdnVsbmVyYWJsZSB0byBLTVNBTi1zcGVjaWZpYyBpc3N1ZXMuIEl0J3MgYSBmdW5kYW1lbnRhbCBjb21wYXRpYmlsaXR5IGNoZWNrLCBhbmQgaXQgYXBwZWFycyB0byBiZSBpbXBsZW1lbnRlZCBzYWZlbHkuXG5cblRoZXJlZm9yZSwgZ2l2ZW4gdGhlIHNpbXBsZSBuYXR1cmUgb2YgdGhlIHBhdGNoLCBhbmQgdGhlIG5hdHVyZSBvZiB0aGUgb3BlcmF0aW9ucyBwZXJmb3JtZWQsIEknbSBjb25maWRlbnQgaW4gc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAuIFRoZSBwYXRjaCBhZGRyZXNzZXMgY2dyb3VwIHN0b3JhZ2UgY29tcGF0aWJpbGl0eSB1c2luZyBhIHdlbGwtZGVmaW5lZCBjb21wYXJpc29uLCB3aXRob3V0IGludHJvZHVjaW5nIG5ldyBhbGxvY2F0aW9ucywgdXNlci1zcGFjZSBkYXRhIGV4cG9zdXJlLCBvciB1c2Ugb2YgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gY3JpdGljYWwgcGF0aHMuIEFueSBtZW1vcnkgZXJyb3JzIHdvdWxkIGJlIEtBU0FOLWRldGVjdGFibGUuIE5vIGZ1cnRoZXIgS01TQU4gZnV6emluZyBpcyBuZWVkZWQgaW4gdGhpcyBjYXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjEzLCJPdXRwdXRUb2tlbnMiOjEyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEzOjExOjI5LjE3NjA3OTY3OVoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4NDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIHNpbXBsZSBjb21wYXRpYmlsaXR5IGNoZWNrIGZvciBCUEYgY2dyb3VwIHN0b3JhZ2UgZHVyaW5nIHByb2dyYW0gcmVwbGFjZW1lbnQuIEl0IGNvbXBhcmVzIGV4aXN0aW5nIGZpZWxkcyBpbiB0aGUgYGJwZl9wcm9nLVxcdTAwM2VhdXhgIHN0cnVjdHVyZS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgY29weSBkYXRhIHRvIHVzZXIgc3BhY2UsIG9yIHVzZSBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBjb250cm9sIGZsb3cuIEFueSBtZW1vcnkgZXJyb3JzIHJlbGF0ZWQgdG8gdGhpcyBjaGFuZ2UsIHN1Y2ggYXMgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBvciB1c2UtYWZ0ZXItZnJlZSwgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBzaW1wbGUgY29tcGF0aWJpbGl0eSBjaGVjayBmb3IgQlBGIGNncm91cCBzdG9yYWdlIGR1cmluZyBwcm9ncmFtIHJlcGxhY2VtZW50LiBJdCBjb21wYXJlcyBleGlzdGluZyBmaWVsZHMgaW4gdGhlIGBicGZfcHJvZy1cXHUwMDNlYXV4YCBzdHJ1Y3R1cmUuIEl0IGRvZXMgbm90IGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMsIGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLCBvciB1c2UgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gY29udHJvbCBmbG93LiBBbnkgbWVtb3J5IGVycm9ycyByZWxhdGVkIHRvIHRoaXMgY2hhbmdlLCBzdWNoIGFzIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgb3IgdXNlLWFmdGVyLWZyZWUsIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow69jfv[1] Phase: Succeeded StartedAt: 2026-08-07 13:11:40 +0000 UTC FinishedAt: 2026-08-07 13:11:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow69jfv[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-07 13:11:40 +0000 UTC FinishedAt: 2026-08-07 13:11:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow69jfv[2] Phase: Succeeded StartedAt: 2026-08-07 13:11:40 +0000 UTC FinishedAt: 2026-08-07 16:57:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow69jfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31a420a822ff92e2090bd5d65efe8e34e2d6d9b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_replace"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31a420a822ff92e2090bd5d65efe8e34e2d6d9b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"e2ba44e7-5fe9-4800-a79a-f3dcd5bd5402","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-07 13:11:40 +0000 UTC FinishedAt: 2026-08-07 16:57:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"31a420a822ff92e2090bd5d65efe8e34e2d6d9b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_replace"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"31a420a822ff92e2090bd5d65efe8e34e2d6d9b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"e2ba44e7-5fe9-4800-a79a-f3dcd5bd5402","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow69jfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31a420a822ff92e2090bd5d65efe8e34e2d6d9b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_replace"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31a420a822ff92e2090bd5d65efe8e34e2d6d9b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"e2ba44e7-5fe9-4800-a79a-f3dcd5bd5402","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-07 13:11:40 +0000 UTC FinishedAt: 2026-08-07 13:11:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow69jfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31a420a822ff92e2090bd5d65efe8e34e2d6d9b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_replace"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31a420a822ff92e2090bd5d65efe8e34e2d6d9b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"e2ba44e7-5fe9-4800-a79a-f3dcd5bd5402","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-07 13:11:40 +0000 UTC FinishedAt: 2026-08-07 13:11:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"31a420a822ff92e2090bd5d65efe8e34e2d6d9b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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-workflow69jfv/series-workflow69jfv-convert-artifact-2552763231/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow69jfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31a420a822ff92e2090bd5d65efe8e34e2d6d9b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_replace"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31a420a822ff92e2090bd5d65efe8e34e2d6d9b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"e2ba44e7-5fe9-4800-a79a-f3dcd5bd5402","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-07 13:11:50 +0000 UTC FinishedAt: 2026-08-07 13:29:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow69jfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31a420a822ff92e2090bd5d65efe8e34e2d6d9b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_replace"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31a420a822ff92e2090bd5d65efe8e34e2d6d9b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"e2ba44e7-5fe9-4800-a79a-f3dcd5bd5402","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-07 13:11:50 +0000 UTC FinishedAt: 2026-08-07 13:29:52 +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:*4a328f25-76a5-4aa4-88ae-8d09296b2387,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-workflow69jfv/series-workflow69jfv-convert-artifact-2552763231/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": "60fa3549-1cdf-434c-a66b-9a076baf1c4e", "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-workflow69jfv/series-workflow69jfv-build-action-624621669/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow69jfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31a420a822ff92e2090bd5d65efe8e34e2d6d9b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_replace"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31a420a822ff92e2090bd5d65efe8e34e2d6d9b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"e2ba44e7-5fe9-4800-a79a-f3dcd5bd5402","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-07 13:11:50 +0000 UTC FinishedAt: 2026-08-07 13:29:42 +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:*4a328f25-76a5-4aa4-88ae-8d09296b2387,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-workflow69jfv/series-workflow69jfv-convert-artifact-2552763231/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": "60fa3549-1cdf-434c-a66b-9a076baf1c4e", "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-workflow69jfv/series-workflow69jfv-build-action-624621669/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow69jfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31a420a822ff92e2090bd5d65efe8e34e2d6d9b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_replace"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31a420a822ff92e2090bd5d65efe8e34e2d6d9b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"e2ba44e7-5fe9-4800-a79a-f3dcd5bd5402","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-07 13:29:52 +0000 UTC FinishedAt: 2026-08-07 13:29:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow69jfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31a420a822ff92e2090bd5d65efe8e34e2d6d9b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_replace"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31a420a822ff92e2090bd5d65efe8e34e2d6d9b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"e2ba44e7-5fe9-4800-a79a-f3dcd5bd5402","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-07 13:29:52 +0000 UTC FinishedAt: 2026-08-07 13:29:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow69jfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31a420a822ff92e2090bd5d65efe8e34e2d6d9b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_replace"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31a420a822ff92e2090bd5d65efe8e34e2d6d9b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"e2ba44e7-5fe9-4800-a79a-f3dcd5bd5402","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-07 13:29:52 +0000 UTC FinishedAt: 2026-08-07 13:30:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow69jfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31a420a822ff92e2090bd5d65efe8e34e2d6d9b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_replace"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31a420a822ff92e2090bd5d65efe8e34e2d6d9b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"e2ba44e7-5fe9-4800-a79a-f3dcd5bd5402","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-07 13:29:52 +0000 UTC FinishedAt: 2026-08-07 13:29:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"31a420a822ff92e2090bd5d65efe8e34e2d6d9b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"e2ba44e7-5fe9-4800-a79a-f3dcd5bd5402","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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-workflow69jfv/series-workflow69jfv-convert-artifact-3303393774/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow69jfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31a420a822ff92e2090bd5d65efe8e34e2d6d9b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_replace"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31a420a822ff92e2090bd5d65efe8e34e2d6d9b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"e2ba44e7-5fe9-4800-a79a-f3dcd5bd5402","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-07 13:30:02 +0000 UTC FinishedAt: 2026-08-07 13:32:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow69jfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31a420a822ff92e2090bd5d65efe8e34e2d6d9b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_replace"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31a420a822ff92e2090bd5d65efe8e34e2d6d9b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"e2ba44e7-5fe9-4800-a79a-f3dcd5bd5402","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-07 13:30:02 +0000 UTC FinishedAt: 2026-08-07 13:31:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*60fa3549-1cdf-434c-a66b-9a076baf1c4e,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-workflow69jfv/series-workflow69jfv-build-action-624621669/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-workflow69jfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31a420a822ff92e2090bd5d65efe8e34e2d6d9b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_replace"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31a420a822ff92e2090bd5d65efe8e34e2d6d9b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"e2ba44e7-5fe9-4800-a79a-f3dcd5bd5402","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-07 13:32:03 +0000 UTC FinishedAt: 2026-08-07 13:32:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow69jfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31a420a822ff92e2090bd5d65efe8e34e2d6d9b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_replace"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31a420a822ff92e2090bd5d65efe8e34e2d6d9b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"e2ba44e7-5fe9-4800-a79a-f3dcd5bd5402","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-07 13:32:03 +0000 UTC FinishedAt: 2026-08-07 13:32:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow69jfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31a420a822ff92e2090bd5d65efe8e34e2d6d9b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_replace"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31a420a822ff92e2090bd5d65efe8e34e2d6d9b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"e2ba44e7-5fe9-4800-a79a-f3dcd5bd5402","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-07 13:32:03 +0000 UTC FinishedAt: 2026-08-07 13:52:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow69jfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31a420a822ff92e2090bd5d65efe8e34e2d6d9b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_replace"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31a420a822ff92e2090bd5d65efe8e34e2d6d9b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"e2ba44e7-5fe9-4800-a79a-f3dcd5bd5402","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-07 13:32:03 +0000 UTC FinishedAt: 2026-08-07 13:52:38 +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:*4a328f25-76a5-4aa4-88ae-8d09296b2387,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-workflow69jfv/series-workflow69jfv-convert-artifact-3303393774/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": "0afd8d7b-0cfd-4c82-b2f4-8a4ee2251bb3", "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-workflow69jfv/series-workflow69jfv-build-action-3138362114/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow69jfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31a420a822ff92e2090bd5d65efe8e34e2d6d9b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_replace"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31a420a822ff92e2090bd5d65efe8e34e2d6d9b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"e2ba44e7-5fe9-4800-a79a-f3dcd5bd5402","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-07 13:32:03 +0000 UTC FinishedAt: 2026-08-07 13:52:28 +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:*4a328f25-76a5-4aa4-88ae-8d09296b2387,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-workflow69jfv/series-workflow69jfv-convert-artifact-3303393774/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": "0afd8d7b-0cfd-4c82-b2f4-8a4ee2251bb3", "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-workflow69jfv/series-workflow69jfv-build-action-3138362114/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow69jfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31a420a822ff92e2090bd5d65efe8e34e2d6d9b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_replace"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31a420a822ff92e2090bd5d65efe8e34e2d6d9b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"e2ba44e7-5fe9-4800-a79a-f3dcd5bd5402","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-07 13:52:38 +0000 UTC FinishedAt: 2026-08-07 13:52:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow69jfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31a420a822ff92e2090bd5d65efe8e34e2d6d9b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_replace"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31a420a822ff92e2090bd5d65efe8e34e2d6d9b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"e2ba44e7-5fe9-4800-a79a-f3dcd5bd5402","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-07 13:52:38 +0000 UTC FinishedAt: 2026-08-07 13:52:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow69jfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31a420a822ff92e2090bd5d65efe8e34e2d6d9b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_replace"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31a420a822ff92e2090bd5d65efe8e34e2d6d9b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"e2ba44e7-5fe9-4800-a79a-f3dcd5bd5402","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-07 13:52:38 +0000 UTC FinishedAt: 2026-08-07 13:54:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow69jfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31a420a822ff92e2090bd5d65efe8e34e2d6d9b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_replace"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31a420a822ff92e2090bd5d65efe8e34e2d6d9b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"e2ba44e7-5fe9-4800-a79a-f3dcd5bd5402","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-07 13:52:38 +0000 UTC FinishedAt: 2026-08-07 13:54:17 +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:*0afd8d7b-0cfd-4c82-b2f4-8a4ee2251bb3,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-workflow69jfv/series-workflow69jfv-build-action-3138362114/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-workflow69jfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31a420a822ff92e2090bd5d65efe8e34e2d6d9b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_replace"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31a420a822ff92e2090bd5d65efe8e34e2d6d9b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"e2ba44e7-5fe9-4800-a79a-f3dcd5bd5402","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-07 13:54:27 +0000 UTC FinishedAt: 2026-08-07 16:57:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow69jfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31a420a822ff92e2090bd5d65efe8e34e2d6d9b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_replace"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31a420a822ff92e2090bd5d65efe8e34e2d6d9b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"e2ba44e7-5fe9-4800-a79a-f3dcd5bd5402","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-07 13:54:27 +0000 UTC FinishedAt: 2026-08-07 16:57:05 +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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_replace"],"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:*60fa3549-1cdf-434c-a66b-9a076baf1c4e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0afd8d7b-0cfd-4c82-b2f4-8a4ee2251bb3,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-workflow69jfv/series-workflow69jfv-build-action-624621669/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-workflow69jfv/series-workflow69jfv-build-action-3138362114/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow69jfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31a420a822ff92e2090bd5d65efe8e34e2d6d9b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_replace"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31a420a822ff92e2090bd5d65efe8e34e2d6d9b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"e2ba44e7-5fe9-4800-a79a-f3dcd5bd5402","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-07 13:54:27 +0000 UTC FinishedAt: 2026-08-07 13:54:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow69jfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31a420a822ff92e2090bd5d65efe8e34e2d6d9b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_replace"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31a420a822ff92e2090bd5d65efe8e34e2d6d9b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"e2ba44e7-5fe9-4800-a79a-f3dcd5bd5402","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-07 13:54:27 +0000 UTC FinishedAt: 2026-08-07 13:54:32 +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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_replace"],"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-workflow69jfv/series-workflow69jfv-convert-artifact-2624021651/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow69jfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31a420a822ff92e2090bd5d65efe8e34e2d6d9b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_replace"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31a420a822ff92e2090bd5d65efe8e34e2d6d9b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"e2ba44e7-5fe9-4800-a79a-f3dcd5bd5402","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-07 13:54:27 +0000 UTC FinishedAt: 2026-08-07 13:54:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow69jfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31a420a822ff92e2090bd5d65efe8e34e2d6d9b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_replace"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31a420a822ff92e2090bd5d65efe8e34e2d6d9b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"e2ba44e7-5fe9-4800-a79a-f3dcd5bd5402","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-07 13:54:27 +0000 UTC FinishedAt: 2026-08-07 13:54:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow69jfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31a420a822ff92e2090bd5d65efe8e34e2d6d9b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_replace"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31a420a822ff92e2090bd5d65efe8e34e2d6d9b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"e2ba44e7-5fe9-4800-a79a-f3dcd5bd5402","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-07 13:54:27 +0000 UTC FinishedAt: 2026-08-07 13:54:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow69jfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31a420a822ff92e2090bd5d65efe8e34e2d6d9b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_replace"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31a420a822ff92e2090bd5d65efe8e34e2d6d9b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"e2ba44e7-5fe9-4800-a79a-f3dcd5bd5402","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-07 13:54:37 +0000 UTC FinishedAt: 2026-08-07 16:57:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow69jfv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31a420a822ff92e2090bd5d65efe8e34e2d6d9b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["cgroup_bpf_replace"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31a420a822ff92e2090bd5d65efe8e34e2d6d9b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUP_BPF","BPF_SYSCALL"],"series_id":"e2ba44e7-5fe9-4800-a79a-f3dcd5bd5402","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-07 13:54:37 +0000 UTC FinishedAt: 2026-08-07 16:56:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*60fa3549-1cdf-434c-a66b-9a076baf1c4e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0afd8d7b-0cfd-4c82-b2f4-8a4ee2251bb3,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-workflow69jfv/series-workflow69jfv-build-action-624621669/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-workflow69jfv/series-workflow69jfv-build-action-3138362114/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-workflow69jfv/series-workflow69jfv-convert-artifact-2624021651/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,}