Name: series-workflowsj9lx Phase: Succeeded StartedAt: 2026-09-10 04:48:07 +0000 UTC FinishedAt: 2026-09-10 08:33:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsj9lx[0] Phase: Succeeded StartedAt: 2026-09-10 04:48:07 +0000 UTC FinishedAt: 2026-09-10 04:50:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsj9lx[0].run-triage Phase: Succeeded StartedAt: 2026-09-10 04:48:07 +0000 UTC FinishedAt: 2026-09-10 04:50:47 +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": "15e2565f1c43771af0bc5324971cabaad79ac286", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "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": "15e2565f1c43771af0bc5324971cabaad79ac286", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "cb058e91-78c3-424c-bf2f-2cd51d885247" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "reparent_dynptr_slices_on_func_exit", "prepare_func_exit" ], "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+CgkJCTx0ZD4yMDI2LzA5LzEwIDA0OjQ5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXQmIzM0OywKICAgICYjMzQ7cHJlcGFyZV9mdW5jX2V4aXQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyJiMzOTtzIGBwcmVwYXJlX2Z1bmNfZXhpdCgpYCBsb2dpYyBieSBhZGRpbmcgYHJlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0KClgLiBUaGlzIGVuc3VyZXMgdGhhdCBkeW5wdHIgc2xpY2VzIGVzY2FwaW5nIGEgc3VicHJvZ3JhbSBjYWxsIGZyYW1lIGhhdmUgdGhlaXIgYHBhcmVudF9pZGAgdXBkYXRlZCB0byBwb2ludCB0byB0aGUgZHlucHRyJiMzOTtzIHBhcmVudCwgcHJvcGVybHkgaW52YWxpZGF0aW5nIHNsaWNlcyB3aGVuIHRoZSBwYXJlbnQgZHlucHRyL2J1ZmZlciBpcyBkZXN0cm95ZWQgaW4gdGhlIGNhbGxlci5cblxuVGhpcyBmaXggcHJldmVudHMgVXNlLUFmdGVyLUZyZWUgKFVBRikgLyBkYW5nbGluZyBwb2ludGVyIGRlcmVmZXJlbmNlcyBpbiBCUEYgcHJvZ3JhbXMuIFN1Y2ggcnVudGltZSBtZW1vcnkgc2FmZXR5IHZpb2xhdGlvbnMgYXJlIGNhdWdodCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcywgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHJlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0KCkgaW4ga2VybmVsL2JwZi92ZXJpZmllci5jLCBjYWxsZWQgZnJvbSBwcmVwYXJlX2Z1bmNfZXhpdCgpIHRvIHVwZGF0ZSBkeW5wdHIgbGluZWFnZSB0cmFja2luZyB3aGVuIGNhbGxlZSBmcmFtZXMgcmV0dXJuLiBUaGlzIG1vZGlmaWVzIGNvcmUgQlBGIHZlcmlmaWVyIGxvZ2ljIHJlYWNoYWJsZSB2aWEgQlBGIHByb2dyYW0gbG9hZGluZyBzeXNjYWxscy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwNDo0OTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDBiNGRjOWIyODc2YWI0Y2VhOTQxM2MyZDg0YWNlOTY3MTQwNjNiZDNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAxMCAwNDo0OToxOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbmluZGV4IDcyYTNmNTk5OGRkMjcuLmVlNDFiNzM4NmY3NTIgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuQEAgLTgwMCw2ICYjNDM7ODAwLDM5IEBAIHN0YXRpYyBpbnQgZHlucHRyX3JlZl9jbnQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHZfcGFyZW50X2lkKVxuIFx0cmV0dXJuIHJlZl9jbnQ7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCByZXBhcmVudF9keW5wdHJfc2xpY2VzX29uX2Z1bmNfZXhpdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuJiM0MztcdFx0XHRcdFx0XHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKmNhbGxlZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKnZzdGF0ZSA9IGVudi1cdTAwM2VjdXJfc3RhdGU7XG4mIzQzO1x0c3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZTtcbiYjNDM7XHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnO1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjYWxsZWUtXHUwMDNlYWxsb2NhdGVkX3N0YWNrIC8gQlBGX1JFR19TSVpFOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3RydWN0IGJwZl9zdGFja19zdGF0ZSAqc2xvdCA9IFx1MDAyNmNhbGxlZS1cdTAwM2VzdGFja1tpXTtcbiYjNDM7XHRcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpkeW5wdHIgPSBcdTAwMjZzbG90LVx1MDAzZXNwaWxsZWRfcHRyO1xuJiM0MztcbiYjNDM7XHRcdGlmIChzbG90LVx1MDAzZXNsb3RfdHlwZVswXSAhPSBTVEFDS19EWU5QVFIgfHxcbiYjNDM7XHRcdCAgICAhZHlucHRyLVx1MDAzZWR5bnB0ci5maXJzdF9zbG90IHx8XG4mIzQzO1x0XHQgICAgIWR5bnB0ci1cdTAwM2VwYXJlbnRfaWQpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBBIGNhbGxlZSBjYW4gc3BpbGwgYSBzbGljZSBkZXJpdmVkIGZyb20gaXRzIGxvY2FsIGR5bnB0ciBpbnRvXG4mIzQzO1x0XHQgKiB0aGUgY2FsbGVyJiMzOTtzIHN0YWNrLiBUaGUgc2xpY2UgdGhlbiBvdXRsaXZlcyB0aGUgZHlucHRyIGlkIHRoYXRcbiYjNDM7XHRcdCAqIGxpbmtzIGl0IHRvIHRoZSByZXN0IG9mIHRoZSBvYmplY3QgdHJlZS4gUHJlc2VydmUgdGhhdCBsaW5rIGJ5XG4mIzQzO1x0XHQgKiBtYWtpbmcgZXNjYXBlZCBzbGljZXMgY2hpbGRyZW4gb2YgdGhlIGR5bnB0ciYjMzk7cyBwYXJlbnQgYmVmb3JlXG4mIzQzO1x0XHQgKiB0aGUgY2FsbGVlIGZyYW1lIGlzIGZyZWVkLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRicGZfZm9yX2VhY2hfcmVnX2luX3ZzdGF0ZSh2c3RhdGUsIHN0YXRlLCByZWcsICh7XG4mIzQzO1x0XHRcdGlmIChzdGF0ZSA9PSBjYWxsZWUgfHwgcmVnLVx1MDAzZXBhcmVudF9pZCAhPSBkeW5wdHItXHUwMDNlaWQgfHxcbiYjNDM7XHRcdFx0ICAgIGJhc2VfdHlwZShyZWctXHUwMDNldHlwZSkgIT0gUFRSX1RPX01FTSlcbiYjNDM7XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdFx0cmVnLVx1MDAzZXBhcmVudF9pZCA9IGR5bnB0ci1cdTAwM2VwYXJlbnRfaWQ7XG4mIzQzO1x0XHR9KSk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgZGVzdHJveV9pZl9keW5wdHJfc3RhY2tfc2xvdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRcdFx0ICAgICAgICBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlLCBpbnQgc3BpKVxuIHtcbkBAIC0xMDM5OSw2ICYjNDM7MTA0MzIsNyBAQCBzdGF0aWMgaW50IHByZXBhcmVfZnVuY19leGl0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCAqaW5zbl9pZHgpXG4gXHRcdHByaW50X3ZlcmlmaWVyX3N0YXRlKGVudiwgc3RhdGUsIGNhbGxlci1cdTAwM2VmcmFtZW5vLCB0cnVlKTtcbiBcdH1cbiBcdGFjY291bnRfcHJvY2Vzc2VkX2luc25zKGVudiwgY2FsbGVlLCBjYWxsZXIpO1xuJiM0MztcdHJlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0KGVudiwgY2FsbGVlKTtcbiBcdC8qIGNsZWFyIGV2ZXJ5dGhpbmcgaW4gdGhlIGNhbGxlZS4gSW4gY2FzZSBvZiBleGNlcHRpb25hbCBleGl0cyB1c2luZ1xuIFx0ICogYnBmX3Rocm93LCB0aGlzIHdpbGwgYmUgZG9uZSBieSBjb3B5X3ZlcmlmaWVyX3N0YXRlIGZvciBleHRyYSBmcmFtZXMuICovXG4gXHRmcmVlX2Z1bmNfc3RhdGUoY2FsbGVlKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfcWRpc2MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9xZGlzYy5jXG5pbmRleCA2ZGJkMTQ4NzM0M2MwLi4xMjJlY2I3ZTk4ZTJhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX3FkaXNjLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9xZGlzYy5jXG5AQCAtMTEsNiAmIzQzOzExLDcgQEBcbiAjaW5jbHVkZSBcJiMzNDticGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHIuc2tlbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7YnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX3NsaWNlLnNrZWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2JwZl9xZGlzY19mYWlsX19pbnZhbGlkX2R5bnB0cl9jcm9zc19mcmFtZS5za2VsLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7YnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX3JldHVybmVkX3NsaWNlLnNrZWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2JwZl9xZGlzY19mYWlsX191bnRydXN0ZWRfd3JpdGUuc2tlbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7YnBmX3FkaXNjX2R5bnB0cl91c2VfYWZ0ZXJfaW52YWxpZGF0ZV9jbG9uZS5za2VsLmhcJiMzNDtcbiBcbkBAIC0yMzAsNiAmIzQzOzIzMSw3IEBAIHZvaWQgdGVzdF9uc19icGZfcWRpc2Modm9pZClcbiBcdFx0dGVzdF9pbmNvbXBsX29wcygpO1xuIFx0UlVOX1RFU1RTKGJwZl9xZGlzY19mYWlsX19pbnZhbGlkX2R5bnB0cik7XG4gXHRSVU5fVEVTVFMoYnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX2Nyb3NzX2ZyYW1lKTtcbiYjNDM7XHRSVU5fVEVTVFMoYnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX3JldHVybmVkX3NsaWNlKTtcbiBcdFJVTl9URVNUUyhicGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHJfc2xpY2UpO1xuIFx0UlVOX1RFU1RTKGJwZl9xZGlzY19mYWlsX191bnRydXN0ZWRfd3JpdGUpO1xuIFx0UlVOX1RFU1RTKGJwZl9xZGlzY19keW5wdHJfdXNlX2FmdGVyX2ludmFsaWRhdGVfY2xvbmUpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHJfcmV0dXJuZWRfc2xpY2UuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHJfcmV0dXJuZWRfc2xpY2UuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjk0MGFiYTdkOGFiZmVcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHJfcmV0dXJuZWRfc2xpY2UuY1xuQEAgLTAsMCAmIzQzOzEsNzYgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY3ZtbGludXguaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDticGZfZXhwZXJpbWVudGFsLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7YnBmX3FkaXNjX2NvbW1vbi5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2JwZl9taXNjLmhcJiMzNDtcbiYjNDM7XG4mIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtHUExcJiMzNDs7XG4mIzQzO1xuJiM0MztpbnQgcHJvdG87XG4mIzQzO1xuJiM0MztzdGF0aWMgX19ub2lubGluZSBzdHJ1Y3QgZXRoaGRyICpzbGljZV9pbl9zdWJwcm9nKHN0cnVjdCBza19idWZmICpza2IpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX2R5bnB0ciBwdHI7XG4mIzQzO1xuJiM0MztcdGJwZl9keW5wdHJfZnJvbV9za2IoKHN0cnVjdCBfX3NrX2J1ZmYgKilza2IsIDAsIFx1MDAyNnB0cik7XG4mIzQzO1x0cmV0dXJuIGJwZl9keW5wdHJfc2xpY2UoXHUwMDI2cHRyLCAwLCBOVUxMLCBzaXplb2Yoc3RydWN0IGV0aGhkcikpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7c3RydWN0X29wc1wmIzM0OylcbiYjNDM7X19mYWlsdXJlIF9fbXNnKFwmIzM0O2ludmFsaWQgbWVtIGFjY2VzcyAmIzM5O3NjYWxhciYjMzk7XCYjMzQ7KVxuJiM0MztpbnQgQlBGX1BST0coaW52YWxpZF9keW5wdHJfcmV0dXJuZWRfc2xpY2UsIHN0cnVjdCBza19idWZmICpza2IsXG4mIzQzO1x0ICAgICBzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IGJwZl9za19idWZmX3B0ciAqdG9fZnJlZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBldGhoZHIgKmhkcjtcbiYjNDM7XG4mIzQzO1x0aGRyID0gc2xpY2VfaW5fc3VicHJvZyhza2IpO1xuJiM0MztcdGlmICghaGRyKSB7XG4mIzQzO1x0XHRicGZfcWRpc2Nfc2tiX2Ryb3Aoc2tiLCB0b19mcmVlKTtcbiYjNDM7XHRcdHJldHVybiBORVRfWE1JVF9EUk9QO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0YnBmX3FkaXNjX3NrYl9kcm9wKHNrYiwgdG9fZnJlZSk7XG4mIzQzO1xuJiM0MztcdC8qIHRoaXMgc2hvdWxkIGZhaWwgKi9cbiYjNDM7XHRwcm90byA9IGhkci1cdTAwM2VoX3Byb3RvO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gTkVUX1hNSVRfRFJPUDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3N0cnVjdF9vcHNcJiMzNDspXG4mIzQzO19fYXV4aWxpYXJ5XG4mIzQzO3N0cnVjdCBza19idWZmICpCUEZfUFJPRyhicGZfcWRpc2NfdGVzdF9kZXF1ZXVlLCBzdHJ1Y3QgUWRpc2MgKnNjaClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7c3RydWN0X29wc1wmIzM0OylcbiYjNDM7X19hdXhpbGlhcnlcbiYjNDM7aW50IEJQRl9QUk9HKGJwZl9xZGlzY190ZXN0X2luaXQsIHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXG4mIzQzO1x0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3N0cnVjdF9vcHNcJiMzNDspXG4mIzQzO19fYXV4aWxpYXJ5XG4mIzQzO3ZvaWQgQlBGX1BST0coYnBmX3FkaXNjX3Rlc3RfcmVzZXQsIHN0cnVjdCBRZGlzYyAqc2NoKVxuJiM0Mzt7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtzdHJ1Y3Rfb3BzXCYjMzQ7KVxuJiM0MztfX2F1eGlsaWFyeVxuJiM0Mzt2b2lkIEJQRl9QUk9HKGJwZl9xZGlzY190ZXN0X2Rlc3Ryb3ksIHN0cnVjdCBRZGlzYyAqc2NoKVxuJiM0Mzt7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDsuc3RydWN0X29wc1wmIzM0OylcbiYjNDM7c3RydWN0IFFkaXNjX29wcyB0ZXN0ID0ge1xuJiM0MztcdC5lbnF1ZXVlICAgPSAodm9pZCAqKWludmFsaWRfZHlucHRyX3JldHVybmVkX3NsaWNlLFxuJiM0MztcdC5kZXF1ZXVlICAgPSAodm9pZCAqKWJwZl9xZGlzY190ZXN0X2RlcXVldWUsXG4mIzQzO1x0LmluaXQgICAgICA9ICh2b2lkICopYnBmX3FkaXNjX3Rlc3RfaW5pdCxcbiYjNDM7XHQucmVzZXQgICAgID0gKHZvaWQgKilicGZfcWRpc2NfdGVzdF9yZXNldCxcbiYjNDM7XHQuZGVzdHJveSAgID0gKHZvaWQgKilicGZfcWRpc2NfdGVzdF9kZXN0cm95LFxuJiM0MztcdC5pZCAgICAgICAgPSBcJiMzNDticGZfcWRpc2NfdGVzdFwmIzM0OyxcbiYjNDM7fTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jXG5pbmRleCAxY2Q2MWQ3MmMxNjZmLi45MmY5ZjllYTA1MzIxIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jXG5AQCAtMTg5Miw2ICYjNDM7MTg5Miw1NSBAQCBpbnQgY2xvbmVfaW52YWxpZGF0ZTQodm9pZCAqY3R4KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgX19ub2lubGluZSB2b2lkIGNsb25lX3NsaWNlX2luX3N1YnByb2coc3RydWN0IGJwZl9keW5wdHIgKnB0ciwgaW50ICoqZGF0YSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBicGZfZHlucHRyIGNsb25lO1xuJiM0MztcbiYjNDM7XHRicGZfZHlucHRyX2Nsb25lKHB0ciwgXHUwMDI2Y2xvbmUpO1xuJiM0MztcdCpkYXRhID0gYnBmX2R5bnB0cl9kYXRhKFx1MDAyNmNsb25lLCAwLCBzaXplb2YodmFsKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIEEgc2xpY2UgdGhhdCBlc2NhcGVzIHRoZSBjbG9uZSYjMzk7cyBjYWxsIGZyYW1lIHJlbWFpbnMgdmFsaWQgd2hpbGUgdGhlXG4mIzQzOyAqIHNoYXJlZCByaW5nYnVmIHJlc2VydmF0aW9uIGlzIGxpdmUuXG4mIzQzOyAqL1xuJiM0MztTRUMoXCYjMzQ7P3Jhd190cFwmIzM0OylcbiYjNDM7X19zdWNjZXNzXG4mIzQzO2ludCBjbG9uZV9zbGljZV9yZXR1cm5lZF9mcmFtZV92YWxpZCh2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX2R5bnB0ciBwdHI7XG4mIzQzO1x0aW50ICpkYXRhID0gTlVMTDtcbiYjNDM7XG4mIzQzO1x0YnBmX3JpbmdidWZfcmVzZXJ2ZV9keW5wdHIoXHUwMDI2cmluZ2J1ZiwgdmFsLCAwLCBcdTAwMjZwdHIpO1xuJiM0MztcdGNsb25lX3NsaWNlX2luX3N1YnByb2coXHUwMDI2cHRyLCBcdTAwMjZkYXRhKTtcbiYjNDM7XHRpZiAoZGF0YSlcbiYjNDM7XHRcdCpkYXRhID0gMTIzO1xuJiM0MztcdGJwZl9yaW5nYnVmX3N1Ym1pdF9keW5wdHIoXHUwMDI2cHRyLCAwKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFJlbGVhc2luZyB0aGUgc2hhcmVkIHJlc2VydmF0aW9uIG11c3QgaW52YWxpZGF0ZSBhIHNsaWNlIHRoYXQgZXNjYXBlZFxuJiM0MzsgKiBmcm9tIGEgY2xvbmUmIzM5O3MgY2FsbCBmcmFtZS5cbiYjNDM7ICovXG4mIzQzO1NFQyhcJiMzNDs/cmF3X3RwXCYjMzQ7KVxuJiM0MztfX2ZhaWx1cmUgX19tc2coXCYjMzQ7aW52YWxpZCBtZW0gYWNjZXNzICYjMzk7c2NhbGFyJiMzOTtcJiMzNDspXG4mIzQzO2ludCBjbG9uZV9zbGljZV9yZXR1cm5lZF9mcmFtZV9pbnZhbGlkKHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBicGZfZHlucHRyIHB0cjtcbiYjNDM7XHRpbnQgKmRhdGEgPSBOVUxMO1xuJiM0MztcbiYjNDM7XHRicGZfcmluZ2J1Zl9yZXNlcnZlX2R5bnB0cihcdTAwMjZyaW5nYnVmLCB2YWwsIDAsIFx1MDAyNnB0cik7XG4mIzQzO1x0Y2xvbmVfc2xpY2VfaW5fc3VicHJvZyhcdTAwMjZwdHIsIFx1MDAyNmRhdGEpO1xuJiM0MztcdGJwZl9yaW5nYnVmX3N1Ym1pdF9keW5wdHIoXHUwMDI2cHRyLCAwKTtcbiYjNDM7XHRpZiAoZGF0YSlcbiYjNDM7XHRcdC8qIHRoaXMgc2hvdWxkIGZhaWwgKi9cbiYjNDM7XHRcdCpkYXRhID0gMTIzO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiAvKiBJbnZhbGlkYXRpbmcgYSBkeW5wdHIgc2hvdWxkIGludmFsaWRhdGUgYW55IGRhdGEgc2xpY2VzXG4gICogb2YgaXRzIHBhcmVudFxuICAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA0OjQ5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXQmIzM0OywKICAgICYjMzQ7cHJlcGFyZV9mdW5jX2V4aXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyByZXBhcmVudF9keW5wdHJfc2xpY2VzX29uX2Z1bmNfZXhpdCgpIGluIGtlcm5lbC9icGYvdmVyaWZpZXIuYywgY2FsbGVkIGZyb20gcHJlcGFyZV9mdW5jX2V4aXQoKSB0byB1cGRhdGUgZHlucHRyIGxpbmVhZ2UgdHJhY2tpbmcgd2hlbiBjYWxsZWUgZnJhbWVzIHJldHVybi4gVGhpcyBtb2RpZmllcyBjb3JlIEJQRiB2ZXJpZmllciBsb2dpYyByZWFjaGFibGUgdmlhIEJQRiBwcm9ncmFtIGxvYWRpbmcgc3lzY2FsbHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwYjRkYzliMjg3NmFiNGNlYTk0MTNjMmQ4NGFjZTk2NzE0MDYzYmQzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMTAgMDQ6NDk6MTggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKaW5kZXggNzJhM2Y1OTk4ZGQyNy4uZWU0MWI3Mzg2Zjc1MiAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwpAQCAtODAwLDYgJiM0Mzs4MDAsMzkgQEAgc3RhdGljIGludCBkeW5wdHJfcmVmX2NudChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgdl9wYXJlbnRfaWQpCiAJcmV0dXJuIHJlZl9jbnQ7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCByZXBhcmVudF9keW5wdHJfc2xpY2VzX29uX2Z1bmNfZXhpdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAomIzQzOwkJCQkJCXN0cnVjdCBicGZfZnVuY19zdGF0ZSAqY2FsbGVlKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqdnN0YXRlID0gZW52LSZndDtjdXJfc3RhdGU7CiYjNDM7CXN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGU7CiYjNDM7CXN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWc7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgY2FsbGVlLSZndDthbGxvY2F0ZWRfc3RhY2sgLyBCUEZfUkVHX1NJWkU7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzdHJ1Y3QgYnBmX3N0YWNrX3N0YXRlICpzbG90ID0gJmFtcDtjYWxsZWUtJmd0O3N0YWNrW2ldOwomIzQzOwkJc3RydWN0IGJwZl9yZWdfc3RhdGUgKmR5bnB0ciA9ICZhbXA7c2xvdC0mZ3Q7c3BpbGxlZF9wdHI7CiYjNDM7CiYjNDM7CQlpZiAoc2xvdC0mZ3Q7c2xvdF90eXBlWzBdICE9IFNUQUNLX0RZTlBUUiB8fAomIzQzOwkJICAgICFkeW5wdHItJmd0O2R5bnB0ci5maXJzdF9zbG90IHx8CiYjNDM7CQkgICAgIWR5bnB0ci0mZ3Q7cGFyZW50X2lkKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIEEgY2FsbGVlIGNhbiBzcGlsbCBhIHNsaWNlIGRlcml2ZWQgZnJvbSBpdHMgbG9jYWwgZHlucHRyIGludG8KJiM0MzsJCSAqIHRoZSBjYWxsZXImIzM5O3Mgc3RhY2suIFRoZSBzbGljZSB0aGVuIG91dGxpdmVzIHRoZSBkeW5wdHIgaWQgdGhhdAomIzQzOwkJICogbGlua3MgaXQgdG8gdGhlIHJlc3Qgb2YgdGhlIG9iamVjdCB0cmVlLiBQcmVzZXJ2ZSB0aGF0IGxpbmsgYnkKJiM0MzsJCSAqIG1ha2luZyBlc2NhcGVkIHNsaWNlcyBjaGlsZHJlbiBvZiB0aGUgZHlucHRyJiMzOTtzIHBhcmVudCBiZWZvcmUKJiM0MzsJCSAqIHRoZSBjYWxsZWUgZnJhbWUgaXMgZnJlZWQuCiYjNDM7CQkgKi8KJiM0MzsJCWJwZl9mb3JfZWFjaF9yZWdfaW5fdnN0YXRlKHZzdGF0ZSwgc3RhdGUsIHJlZywgKHsKJiM0MzsJCQlpZiAoc3RhdGUgPT0gY2FsbGVlIHx8IHJlZy0mZ3Q7cGFyZW50X2lkICE9IGR5bnB0ci0mZ3Q7aWQgfHwKJiM0MzsJCQkgICAgYmFzZV90eXBlKHJlZy0mZ3Q7dHlwZSkgIT0gUFRSX1RPX01FTSkKJiM0MzsJCQkJY29udGludWU7CiYjNDM7CQkJcmVnLSZndDtwYXJlbnRfaWQgPSBkeW5wdHItJmd0O3BhcmVudF9pZDsKJiM0MzsJCX0pKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgZGVzdHJveV9pZl9keW5wdHJfc3RhY2tfc2xvdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAogCQkJCSAgICAgICAgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZSwgaW50IHNwaSkKIHsKQEAgLTEwMzk5LDYgJiM0MzsxMDQzMiw3IEBAIHN0YXRpYyBpbnQgcHJlcGFyZV9mdW5jX2V4aXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50ICppbnNuX2lkeCkKIAkJcHJpbnRfdmVyaWZpZXJfc3RhdGUoZW52LCBzdGF0ZSwgY2FsbGVyLSZndDtmcmFtZW5vLCB0cnVlKTsKIAl9CiAJYWNjb3VudF9wcm9jZXNzZWRfaW5zbnMoZW52LCBjYWxsZWUsIGNhbGxlcik7CiYjNDM7CXJlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0KGVudiwgY2FsbGVlKTsKIAkvKiBjbGVhciBldmVyeXRoaW5nIGluIHRoZSBjYWxsZWUuIEluIGNhc2Ugb2YgZXhjZXB0aW9uYWwgZXhpdHMgdXNpbmcKIAkgKiBicGZfdGhyb3csIHRoaXMgd2lsbCBiZSBkb25lIGJ5IGNvcHlfdmVyaWZpZXJfc3RhdGUgZm9yIGV4dHJhIGZyYW1lcy4gKi8KIAlmcmVlX2Z1bmNfc3RhdGUoY2FsbGVlKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9xZGlzYy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX3FkaXNjLmMKaW5kZXggNmRiZDE0ODczNDNjMC4uMTIyZWNiN2U5OGUyYSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX3FkaXNjLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX3FkaXNjLmMKQEAgLTExLDYgJiM0MzsxMSw3IEBACiAjaW5jbHVkZSAmIzM0O2JwZl9xZGlzY19mYWlsX19pbnZhbGlkX2R5bnB0ci5za2VsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDticGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHJfc2xpY2Uuc2tlbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7YnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX2Nyb3NzX2ZyYW1lLnNrZWwuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDticGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHJfcmV0dXJuZWRfc2xpY2Uuc2tlbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7YnBmX3FkaXNjX2ZhaWxfX3VudHJ1c3RlZF93cml0ZS5za2VsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDticGZfcWRpc2NfZHlucHRyX3VzZV9hZnRlcl9pbnZhbGlkYXRlX2Nsb25lLnNrZWwuaCYjMzQ7CiAKQEAgLTIzMCw2ICYjNDM7MjMxLDcgQEAgdm9pZCB0ZXN0X25zX2JwZl9xZGlzYyh2b2lkKQogCQl0ZXN0X2luY29tcGxfb3BzKCk7CiAJUlVOX1RFU1RTKGJwZl9xZGlzY19mYWlsX19pbnZhbGlkX2R5bnB0cik7CiAJUlVOX1RFU1RTKGJwZl9xZGlzY19mYWlsX19pbnZhbGlkX2R5bnB0cl9jcm9zc19mcmFtZSk7CiYjNDM7CVJVTl9URVNUUyhicGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHJfcmV0dXJuZWRfc2xpY2UpOwogCVJVTl9URVNUUyhicGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHJfc2xpY2UpOwogCVJVTl9URVNUUyhicGZfcWRpc2NfZmFpbF9fdW50cnVzdGVkX3dyaXRlKTsKIAlSVU5fVEVTVFMoYnBmX3FkaXNjX2R5bnB0cl91c2VfYWZ0ZXJfaW52YWxpZGF0ZV9jbG9uZSk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX3JldHVybmVkX3NsaWNlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX3JldHVybmVkX3NsaWNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uOTQwYWJhN2Q4YWJmZQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHJfcmV0dXJuZWRfc2xpY2UuYwpAQCAtMCwwICYjNDM7MSw3NiBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O3ZtbGludXguaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O2JwZl9leHBlcmltZW50YWwuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDticGZfcWRpc2NfY29tbW9uLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7YnBmX21pc2MuaCYjMzQ7CiYjNDM7CiYjNDM7Y2hhciBfbGljZW5zZVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7OwomIzQzOwomIzQzO2ludCBwcm90bzsKJiM0MzsKJiM0MztzdGF0aWMgX19ub2lubGluZSBzdHJ1Y3QgZXRoaGRyICpzbGljZV9pbl9zdWJwcm9nKHN0cnVjdCBza19idWZmICpza2IpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnBmX2R5bnB0ciBwdHI7CiYjNDM7CiYjNDM7CWJwZl9keW5wdHJfZnJvbV9za2IoKHN0cnVjdCBfX3NrX2J1ZmYgKilza2IsIDAsICZhbXA7cHRyKTsKJiM0MzsJcmV0dXJuIGJwZl9keW5wdHJfc2xpY2UoJmFtcDtwdHIsIDAsIE5VTEwsIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSk7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3N0cnVjdF9vcHMmIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtpbnZhbGlkIG1lbSBhY2Nlc3MgJiMzOTtzY2FsYXImIzM5OyYjMzQ7KQomIzQzO2ludCBCUEZfUFJPRyhpbnZhbGlkX2R5bnB0cl9yZXR1cm5lZF9zbGljZSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKJiM0MzsJICAgICBzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IGJwZl9za19idWZmX3B0ciAqdG9fZnJlZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBldGhoZHIgKmhkcjsKJiM0MzsKJiM0MzsJaGRyID0gc2xpY2VfaW5fc3VicHJvZyhza2IpOwomIzQzOwlpZiAoIWhkcikgewomIzQzOwkJYnBmX3FkaXNjX3NrYl9kcm9wKHNrYiwgdG9fZnJlZSk7CiYjNDM7CQlyZXR1cm4gTkVUX1hNSVRfRFJPUDsKJiM0MzsJfQomIzQzOwomIzQzOwlicGZfcWRpc2Nfc2tiX2Ryb3Aoc2tiLCB0b19mcmVlKTsKJiM0MzsKJiM0MzsJLyogdGhpcyBzaG91bGQgZmFpbCAqLwomIzQzOwlwcm90byA9IGhkci0mZ3Q7aF9wcm90bzsKJiM0MzsKJiM0MzsJcmV0dXJuIE5FVF9YTUlUX0RST1A7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3N0cnVjdF9vcHMmIzM0OykKJiM0MztfX2F1eGlsaWFyeQomIzQzO3N0cnVjdCBza19idWZmICpCUEZfUFJPRyhicGZfcWRpc2NfdGVzdF9kZXF1ZXVlLCBzdHJ1Y3QgUWRpc2MgKnNjaCkKJiM0Mzt7CiYjNDM7CXJldHVybiBOVUxMOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtzdHJ1Y3Rfb3BzJiMzNDspCiYjNDM7X19hdXhpbGlhcnkKJiM0MztpbnQgQlBGX1BST0coYnBmX3FkaXNjX3Rlc3RfaW5pdCwgc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBubGF0dHIgKm9wdCwKJiM0MzsJICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiYjNDM7ewomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7c3RydWN0X29wcyYjMzQ7KQomIzQzO19fYXV4aWxpYXJ5CiYjNDM7dm9pZCBCUEZfUFJPRyhicGZfcWRpc2NfdGVzdF9yZXNldCwgc3RydWN0IFFkaXNjICpzY2gpCiYjNDM7ewomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtzdHJ1Y3Rfb3BzJiMzNDspCiYjNDM7X19hdXhpbGlhcnkKJiM0Mzt2b2lkIEJQRl9QUk9HKGJwZl9xZGlzY190ZXN0X2Rlc3Ryb3ksIHN0cnVjdCBRZGlzYyAqc2NoKQomIzQzO3sKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7LnN0cnVjdF9vcHMmIzM0OykKJiM0MztzdHJ1Y3QgUWRpc2Nfb3BzIHRlc3QgPSB7CiYjNDM7CS5lbnF1ZXVlICAgPSAodm9pZCAqKWludmFsaWRfZHlucHRyX3JldHVybmVkX3NsaWNlLAomIzQzOwkuZGVxdWV1ZSAgID0gKHZvaWQgKilicGZfcWRpc2NfdGVzdF9kZXF1ZXVlLAomIzQzOwkuaW5pdCAgICAgID0gKHZvaWQgKilicGZfcWRpc2NfdGVzdF9pbml0LAomIzQzOwkucmVzZXQgICAgID0gKHZvaWQgKilicGZfcWRpc2NfdGVzdF9yZXNldCwKJiM0MzsJLmRlc3Ryb3kgICA9ICh2b2lkICopYnBmX3FkaXNjX3Rlc3RfZGVzdHJveSwKJiM0MzsJLmlkICAgICAgICA9ICYjMzQ7YnBmX3FkaXNjX3Rlc3QmIzM0OywKJiM0Mzt9OwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuYwppbmRleCAxY2Q2MWQ3MmMxNjZmLi45MmY5ZjllYTA1MzIxIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuYwpAQCAtMTg5Miw2ICYjNDM7MTg5Miw1NSBAQCBpbnQgY2xvbmVfaW52YWxpZGF0ZTQodm9pZCAqY3R4KQogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIF9fbm9pbmxpbmUgdm9pZCBjbG9uZV9zbGljZV9pbl9zdWJwcm9nKHN0cnVjdCBicGZfZHlucHRyICpwdHIsIGludCAqKmRhdGEpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnBmX2R5bnB0ciBjbG9uZTsKJiM0MzsKJiM0MzsJYnBmX2R5bnB0cl9jbG9uZShwdHIsICZhbXA7Y2xvbmUpOwomIzQzOwkqZGF0YSA9IGJwZl9keW5wdHJfZGF0YSgmYW1wO2Nsb25lLCAwLCBzaXplb2YodmFsKSk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogQSBzbGljZSB0aGF0IGVzY2FwZXMgdGhlIGNsb25lJiMzOTtzIGNhbGwgZnJhbWUgcmVtYWlucyB2YWxpZCB3aGlsZSB0aGUKJiM0MzsgKiBzaGFyZWQgcmluZ2J1ZiByZXNlcnZhdGlvbiBpcyBsaXZlLgomIzQzOyAqLwomIzQzO1NFQygmIzM0Oz9yYXdfdHAmIzM0OykKJiM0MztfX3N1Y2Nlc3MKJiM0MztpbnQgY2xvbmVfc2xpY2VfcmV0dXJuZWRfZnJhbWVfdmFsaWQodm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9keW5wdHIgcHRyOwomIzQzOwlpbnQgKmRhdGEgPSBOVUxMOwomIzQzOwomIzQzOwlicGZfcmluZ2J1Zl9yZXNlcnZlX2R5bnB0cigmYW1wO3JpbmdidWYsIHZhbCwgMCwgJmFtcDtwdHIpOwomIzQzOwljbG9uZV9zbGljZV9pbl9zdWJwcm9nKCZhbXA7cHRyLCAmYW1wO2RhdGEpOwomIzQzOwlpZiAoZGF0YSkKJiM0MzsJCSpkYXRhID0gMTIzOwomIzQzOwlicGZfcmluZ2J1Zl9zdWJtaXRfZHlucHRyKCZhbXA7cHRyLCAwKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogUmVsZWFzaW5nIHRoZSBzaGFyZWQgcmVzZXJ2YXRpb24gbXVzdCBpbnZhbGlkYXRlIGEgc2xpY2UgdGhhdCBlc2NhcGVkCiYjNDM7ICogZnJvbSBhIGNsb25lJiMzOTtzIGNhbGwgZnJhbWUuCiYjNDM7ICovCiYjNDM7U0VDKCYjMzQ7P3Jhd190cCYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O2ludmFsaWQgbWVtIGFjY2VzcyAmIzM5O3NjYWxhciYjMzk7JiMzNDspCiYjNDM7aW50IGNsb25lX3NsaWNlX3JldHVybmVkX2ZyYW1lX2ludmFsaWQodm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9keW5wdHIgcHRyOwomIzQzOwlpbnQgKmRhdGEgPSBOVUxMOwomIzQzOwomIzQzOwlicGZfcmluZ2J1Zl9yZXNlcnZlX2R5bnB0cigmYW1wO3JpbmdidWYsIHZhbCwgMCwgJmFtcDtwdHIpOwomIzQzOwljbG9uZV9zbGljZV9pbl9zdWJwcm9nKCZhbXA7cHRyLCAmYW1wO2RhdGEpOwomIzQzOwlicGZfcmluZ2J1Zl9zdWJtaXRfZHlucHRyKCZhbXA7cHRyLCAwKTsKJiM0MzsJaWYgKGRhdGEpCiYjNDM7CQkvKiB0aGlzIHNob3VsZCBmYWlsICovCiYjNDM7CQkqZGF0YSA9IDEyMzsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogLyogSW52YWxpZGF0aW5nIGEgZHlucHRyIHNob3VsZCBpbnZhbGlkYXRlIGFueSBkYXRhIHNsaWNlcwogICogb2YgaXRzIHBhcmVudAogICovCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA0OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0NDYKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTGludXggS2VybmVsIFBhdGNoIGZvciBTeXprYWxsZXIgRnV6emluZyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gYXNzZXNzIHRoaXMgTGludXgga2VybmVsIHBhdGNoIHNlcmllcyBmb3IgaXRzIGZ1enppbmcgcG90ZW50aWFsIHdpdGggc3l6a2FsbGVyLiBUaGUgdXNlciBpcyBhc2tpbmcgdGhlIHJpZ2h0IHF1ZXN0aW9ucyDigJMgaXMgdGhpcyB3b3J0aCBvdXIgdGltZSwgd2hhdCBjb25maWdzIGRvIHdlIG5lZWQgdG8gZm9jdXMgb24sIGFuZCB3aGF0IHN5bWJvbHMgYXJlIG1vc3QgcmVsZXZhbnQ/IEl0JiMzOTtzIGFsbCBhYm91dCB0cmlhZ2UgaGVyZSDigJMgc3RhbmRhcmQgTGludXgga2VybmVsIG1haW50ZW5hbmNlLCBRQSwgYW5kIHNlY3VyaXR5IGVuZ2luZWVyaW5nLiBUaGlzIGlzIGEgY29tcGxldGVseSBiZW5pZ24gYW5kIGRlZmVuc2l2ZSBvcGVyYXRpb24sIHNvIG5vIHdvcnJpZXMgdGhlcmUuCgpMZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBwYXRjaCBpdHNlbGYuIEl0IHNlZW1zIHRoZSBjb3JlIG1vZGlmaWNhdGlvbiBpcyB3aXRoaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgYW5kIGl0cyBhc3NvY2lhdGVkIHNlbGZ0ZXN0cyBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmLy4uLmAuIFNwZWNpZmljYWxseSwgdGhlcmUmIzM5O3MgYSBuZXcgZnVuY3Rpb24sIGByZXBhcmVudF9keW5wdHJfc2xpY2VzX29uX2Z1bmNfZXhpdGAsIGJlaW5nIGludHJvZHVjZWQgd2l0aGluIGB2ZXJpZmllci5jYCwgYW5kIGl0JiMzOTtzIGJlaW5nIGNhbGxlZCBmcm9tIGBwcmVwYXJlX2Z1bmNfZXhpdGAuIE9rYXksIGB2ZXJpZmllci5jYC4uLiB0aGF0JiMzOTtzIGludGVyZXN0aW5nLiBUaGUgQlBGIHZlcmlmaWVyIGlzIGFsd2F5cyBhIGdvb2QgdGFyZ2V0LgoKTm93LCBJJiMzOTtsbCB1c2UgYGdyZXBwZXJgIChvciwgaWYgSSBoYXZlIHRvLCBgcmVhZC1maWxlYCkgdG8gZ2V0IHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IG9mIGB2ZXJpZmllci5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBrZXJuZWwgY29uZmlndXJhdGlvbnMgYXJlIGNydWNpYWwgZm9yIGVuYWJsaW5nIHRoaXMgZnVuY3Rpb25hbGl0eS4gS25vd2luZyB0aGUgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zIHdpbGwgYmUga2V5IHRvIGdldHRpbmcgYSBmdWxsIHBpY3R1cmUuIEkgbmVlZCB0byBpZGVudGlmeSB3aGljaCBmdW5jdGlvbnMgYXJlICptb3N0KiBsaWtlbHkgdG8gYmUgdHJpZ2dlcmVkIGJ5IGZ1enppbmcuIEFyZSB0aGVyZSBhbnkgY3JpdGljYWwgZGF0YSBzdHJ1Y3R1cmVzIG9yIG9wZXJhdGlvbnMgcmVsYXRlZCB0byBgZHlucHRyYCAoZHluYW1pYyBwb2ludGVyKSB0aGF0IGFyZSBub3cgaW4gcGxheT8gTXkgZ29hbCBpcyB0byBxdWlja2x5IHBpbnBvaW50IHRoZSBtb3N0IGludGVyZXN0aW5nIHN5bWJvbHMgYW5kIHBvdGVudGlhbCBjcmFzaCBzdXJmYWNlcyBmb3Igc3l6a2FsbGVyLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDQ6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9Nzg0PXN0YXRpYyBpbnQgZHlucHRyX3JlZl9jbnQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHZfcGFyZW50X2lkKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04MDItXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6ODAzOnN0YXRpYyB2b2lkIHJlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtODA0LVx0XHRcdFx0XHRcdHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqY2FsbGVlKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMDM2Nz1zdGF0aWMgaW50IHByZXBhcmVfZnVuY19leGl0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCAqaW5zbl9pZHgpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwNDM0LVx0YWNjb3VudF9wcm9jZXNzZWRfaW5zbnMoZW52LCBjYWxsZWUsIGNhbGxlcik7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTA0MzU6XHRyZXBhcmVudF9keW5wdHJfc2xpY2VzX29uX2Z1bmNfZXhpdChlbnYsIGNhbGxlZSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTA0MzYtXHQvKiBjbGVhciBldmVyeXRoaW5nIGluIHRoZSBjYWxsZWUuIEluIGNhc2Ugb2YgZXhjZXB0aW9uYWwgZXhpdHMgdXNpbmdcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwNDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MzQ2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIEtlcm5lbCBCUEYgVmVyaWZpZXIgRnVuY3Rpb24gRXhpdCBIYW5kbGluZyoqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoZSBCUEYgdmVyaWZpZXIgaGFuZGxlcyBmdW5jdGlvbiBleGl0cywgcGFydGljdWxhcmx5IHdpdGggcmVzcGVjdCB0byBkeW5hbWljIHBvaW50ZXIgc2xpY2VzLiBMZXQmIzM5O3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgcHJlcGFyZV9mdW5jX2V4aXRgIGFuZCBgcmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXRgIGZ1bmN0aW9ucyB3aXRoaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIFRoZXNlIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyBoYW5kbGluZyB3aGF0IGhhcHBlbnMgd2hlbiBhIEJQRiBmdW5jdGlvbiBpcyBleGl0aW5nLCBhbmQgdGhleSYjMzk7cmUgbGlrZWx5IHdoZXJlIHRoZSBsb2dpYyBmb3IgcG9pbnRlciBtYW5hZ2VtZW50IHJlc2lkZXMuIEkmIzM5O2xsIGZvY3VzIG15IGF0dGVudGlvbiBhcm91bmQgbGluZSA4MDAgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgYW5kIHRha2UgYSBnb29kIGxvb2sgYXQgdGhlIGNvZGUgYmxvY2sgaW4gdGhhdCBhcmVhLCBhbmQgdGhlIHJlbGF0ZWQgY29kZSwgdG8gdW5kZXJzdGFuZCB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIGdyYXNwIGhvdyB0aGUgZHluYW1pYyBwb2ludGVycyBhbmQgc2xpY2VzIGFyZSBiZWluZyBtYW5hZ2VkLCBlc3BlY2lhbGx5IHRvIGZpZ3VyZSBvdXQgdGhlIGJ1ZyB0aGF0IGhhcyBiZWVuIHJlcG9ydGVkLiBIb3BlZnVsbHksIGJ5IHVuZGVyc3RhbmRpbmcgdGhlc2Uga2V5IHJvdXRpbmVzLCBJIGNhbiBpZGVudGlmeSB0aGUgcm9vdCBjYXVzZSBvZiB0aGUgaXNzdWUgYW5kIHBpbnBvaW50IGEgc29sdXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDQ6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDgwMDpcdFx0cmV0dXJuIHJlZl9jbnQ7XG4gODAxOlx0fVxuIDgwMjpcdFxuIDgwMzpcdHN0YXRpYyB2b2lkIHJlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gODA0Olx0XHRcdFx0XHRcdFx0c3RydWN0IGJwZl9mdW5jX3N0YXRlICpjYWxsZWUpXG4gODA1Olx0e1xuIDgwNjpcdFx0c3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqdnN0YXRlID0gZW52LVx1MDAzZWN1cl9zdGF0ZTtcbiA4MDc6XHRcdHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGU7XG4gODA4Olx0XHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnO1xuIDgwOTpcdFx0aW50IGk7XG4gODEwOlx0XG4gODExOlx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjYWxsZWUtXHUwMDNlYWxsb2NhdGVkX3N0YWNrIC8gQlBGX1JFR19TSVpFOyBpJiM0MzsmIzQzOykge1xuIDgxMjpcdFx0XHRzdHJ1Y3QgYnBmX3N0YWNrX3N0YXRlICpzbG90ID0gXHUwMDI2Y2FsbGVlLVx1MDAzZXN0YWNrW2ldO1xuIDgxMzpcdFx0XHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqZHlucHRyID0gXHUwMDI2c2xvdC1cdTAwM2VzcGlsbGVkX3B0cjtcbiA4MTQ6XHRcbiA4MTU6XHRcdFx0aWYgKHNsb3QtXHUwMDNlc2xvdF90eXBlWzBdICE9IFNUQUNLX0RZTlBUUiB8fFxuIDgxNjpcdFx0XHQgICAgIWR5bnB0ci1cdTAwM2VkeW5wdHIuZmlyc3Rfc2xvdCB8fFxuIDgxNzpcdFx0XHQgICAgIWR5bnB0ci1cdTAwM2VwYXJlbnRfaWQpXG4gODE4Olx0XHRcdFx0Y29udGludWU7XG4gODE5Olx0XG4gODIwOlx0XHRcdC8qXG4gODIxOlx0XHRcdCAqIEEgY2FsbGVlIGNhbiBzcGlsbCBhIHNsaWNlIGRlcml2ZWQgZnJvbSBpdHMgbG9jYWwgZHlucHRyIGludG9cbiA4MjI6XHRcdFx0ICogdGhlIGNhbGxlciYjMzk7cyBzdGFjay4gVGhlIHNsaWNlIHRoZW4gb3V0bGl2ZXMgdGhlIGR5bnB0ciBpZCB0aGF0XG4gODIzOlx0XHRcdCAqIGxpbmtzIGl0IHRvIHRoZSByZXN0IG9mIHRoZSBvYmplY3QgdHJlZS4gUHJlc2VydmUgdGhhdCBsaW5rIGJ5XG4gODI0Olx0XHRcdCAqIG1ha2luZyBlc2NhcGVkIHNsaWNlcyBjaGlsZHJlbiBvZiB0aGUgZHlucHRyJiMzOTtzIHBhcmVudCBiZWZvcmVcbiA4MjU6XHRcdFx0ICogdGhlIGNhbGxlZSBmcmFtZSBpcyBmcmVlZC5cbiA4MjY6XHRcdFx0ICovXG4gODI3Olx0XHRcdGJwZl9mb3JfZWFjaF9yZWdfaW5fdnN0YXRlKHZzdGF0ZSwgc3RhdGUsIHJlZywgKHtcbiA4Mjg6XHRcdFx0XHRpZiAoc3RhdGUgPT0gY2FsbGVlIHx8IHJlZy1cdTAwM2VwYXJlbnRfaWQgIT0gZHlucHRyLVx1MDAzZWlkIHx8XG4gODI5Olx0XHRcdFx0ICAgIGJhc2VfdHlwZShyZWctXHUwMDNldHlwZSkgIT0gUFRSX1RPX01FTSlcbiA4MzA6XHRcdFx0XHRcdGNvbnRpbnVlO1xuIDgzMTpcdFx0XHRcdHJlZy1cdTAwM2VwYXJlbnRfaWQgPSBkeW5wdHItXHUwMDNlcGFyZW50X2lkO1xuIDgzMjpcdFx0XHR9KSk7XG4gODMzOlx0XHR9XG4gODM0Olx0fVxuIDgzNTpcdFxuIDgzNjpcdHN0YXRpYyBpbnQgZGVzdHJveV9pZl9keW5wdHJfc3RhY2tfc2xvdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIDgzNzpcdFx0XHRcdFx0ICAgICAgICBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlLCBpbnQgc3BpKVxuIDgzODpcdHtcbiA4Mzk6XHRcdGludCBlcnIgPSAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA0OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczMjkKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgQ29tcGxleCBDb2RlOiBBIEZvY3VzZWQgSW52ZXN0aWdhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGNvZGViYXNlLCBhbmQgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBpc3N1ZS4gTXkgbWVudGFsIG1hcCBpcyBsZWFkaW5nIG1lIHRvIGBwcmVwYXJlX2Z1bmNfZXhpdGAuIExldCYjMzk7cyB6ZXJvIGluIG9uIHRoYXQgc2VjdGlvbiwgYXJvdW5kIGxpbmUgMTA0MDAuIFRoYXQmIzM5O3Mgd2hlcmUgSSBhbnRpY2lwYXRlIHRoZSByZWxldmFudCBsb2dpYyByZXNpZGVzLiBJJiMzOTttIGZvY3VzaW5nIG15IGF0dGVudGlvbiB0aGVyZSBiZWNhdXNlIEkgaGF2ZSBhIGh1bmNoIHJlbGF0ZWQgdG8gdGhlIGZhaWx1cmUgbW9kZSBhbmQgdGhhdCBwYXJ0aWN1bGFyIGZ1bmN0aW9uIGlzIGluIG15IHRhcmdldCB6b25lIGZvciB0aGUga2luZCBvZiBwcm9ibGVtIEkmIzM5O20gdHJ5aW5nIHRvIHNvbHZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA0OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTA0MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA0MjA6XHRcdCAqIGNvbnZlcmdlcyBpc19zdGF0ZV92aXNpdGVkKCkgd291bGQgcHJ1bmUgdGhhdCB2aXNpdCBldmVudHVhbGx5LlxuMTA0MjE6XHRcdCAqL1xuMTA0MjI6XHRcdGluX2NhbGxiYWNrX2ZuID0gY2FsbGVlLVx1MDAzZWluX2NhbGxiYWNrX2ZuO1xuMTA0MjM6XHRcdGlmIChpbl9jYWxsYmFja19mbilcbjEwNDI0Olx0XHRcdCppbnNuX2lkeCA9IGNhbGxlZS1cdTAwM2VjYWxsc2l0ZTtcbjEwNDI1Olx0XHRlbHNlXG4xMDQyNjpcdFx0XHQqaW5zbl9pZHggPSBjYWxsZWUtXHUwMDNlY2FsbHNpdGUgJiM0MzsgMTtcbjEwNDI3Olx0XG4xMDQyODpcdFx0aWYgKGVudi1cdTAwM2Vsb2cubGV2ZWwgXHUwMDI2IEJQRl9MT0dfTEVWRUwpIHtcbjEwNDI5Olx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDtyZXR1cm5pbmcgZnJvbSBjYWxsZWU6XFxuXCYjMzQ7KTtcbjEwNDMwOlx0XHRcdHByaW50X3ZlcmlmaWVyX3N0YXRlKGVudiwgc3RhdGUsIGNhbGxlZS1cdTAwM2VmcmFtZW5vLCB0cnVlKTtcbjEwNDMxOlx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDt0byBjYWxsZXIgYXQgJWQ6XFxuXCYjMzQ7LCAqaW5zbl9pZHgpO1xuMTA0MzI6XHRcdFx0cHJpbnRfdmVyaWZpZXJfc3RhdGUoZW52LCBzdGF0ZSwgY2FsbGVyLVx1MDAzZWZyYW1lbm8sIHRydWUpO1xuMTA0MzM6XHRcdH1cbjEwNDM0Olx0XHRhY2NvdW50X3Byb2Nlc3NlZF9pbnNucyhlbnYsIGNhbGxlZSwgY2FsbGVyKTtcbjEwNDM1Olx0XHRyZXBhcmVudF9keW5wdHJfc2xpY2VzX29uX2Z1bmNfZXhpdChlbnYsIGNhbGxlZSk7XG4xMDQzNjpcdFx0LyogY2xlYXIgZXZlcnl0aGluZyBpbiB0aGUgY2FsbGVlLiBJbiBjYXNlIG9mIGV4Y2VwdGlvbmFsIGV4aXRzIHVzaW5nXG4xMDQzNzpcdFx0ICogYnBmX3Rocm93LCB0aGlzIHdpbGwgYmUgZG9uZSBieSBjb3B5X3ZlcmlmaWVyX3N0YXRlIGZvciBleHRyYSBmcmFtZXMuICovXG4xMDQzODpcdFx0ZnJlZV9mdW5jX3N0YXRlKGNhbGxlZSk7XG4xMDQzOTpcdFx0c3RhdGUtXHUwMDNlZnJhbWVbc3RhdGUtXHUwMDNlY3VyZnJhbWUtLV0gPSBOVUxMO1xuMTA0NDA6XHRcdGludmFsaWRhdGVfb3V0Z29pbmdfc3RhY2tfYXJncyhlbnYsIGNhbGxlcik7XG4xMDQ0MTpcdFxuMTA0NDI6XHRcdC8qIGZvciBjYWxsYmFja3Mgd2lkZW4gaW1wcmVjaXNlIHNjYWxhcnMgdG8gbWFrZSBwcm9ncmFtcyBsaWtlIGJlbG93IHZlcmlmeTpcbjEwNDQzOlx0XHQgKlxuMTA0NDQ6XHRcdCAqICAgc3RydWN0IGN0eCB7IGludCBpOyB9XG4xMDQ0NTpcdFx0ICogICB2b2lkIGNiKGludCBpZHgsIHN0cnVjdCBjdHggKmN0eCkgeyBjdHgtXHUwMDNlaSYjNDM7JiM0Mzs7IC4uLiB9XG4xMDQ0NjpcdFx0ICogICAuLi5cbjEwNDQ3Olx0XHQgKiAgIHN0cnVjdCBjdHggPSB7IC5pID0gMDsgfVxuMTA0NDg6XHRcdCAqICAgYnBmX2xvb3AoMTAwLCBjYiwgXHUwMDI2Y3R4LCAwKTtcbjEwNDQ5Olx0XHQgKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA0OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwOTYKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA1OTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCUEYgVmVyaWZpZXIgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBpcyB0aGlzIGNvZGUgZXZlbiByZWFjaGFibGU/IFllcCwgaXQmIzM5O3MgcmlnaHQgdGhlcmUgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIFRoZSBCUEYgdmVyaWZpZXIgaXMgYSBjcml0aWNhbCBwYXJ0IG9mIHRoZSBMaW51eCBrZXJuZWwsIGFjY2Vzc2libGUgdGhyb3VnaCB0aGUgYGJwZigpYCBzeXNjYWxsIHdpdGggYEJQRl9QUk9HX0xPQURgLCB3aGljaCBtZWFucyB1c2Vyc3BhY2UgY2FuIHRyaWdnZXIgaXQuIEl0JiMzOTtzIGVhc2lseSBmdXp6ZWQsIHRvbywgdGhhbmtzIHRvIHRvb2xzIGxpa2Ugc3l6a2FsbGVyLiBHb29kIHN0YXJ0LgoKTm93LCB3aGF0JiMzOTtzIHRoaXMgcGF0Y2ggYWN0dWFsbHkgKmRvaW5nKj8gSXQmIzM5O3MgaGFuZGxpbmcgdGhlIHJlcGFyZW50aW5nIG9mIGR5bmFtaWMgcG9pbnRlciAoZHlucHRyKSBzbGljZXMgd2hlbiBhIEJQRiBmdW5jdGlvbiByZXR1cm5zLiBTcGVjaWZpY2FsbHksIGlmIGEgY2FsbGVkIGZ1bmN0aW9uIChzdWJwcm9ncmFtLCBjYWxsZWUpIHNwaWxscyBhIHNsaWNlIHRoYXQgY2FtZSBmcm9tIGEgbG9jYWwgZHlucHRyIGludG8gdGhlIGNhbGxlciYjMzk7cyBzdGFjayBvciByZWdpc3RlcnMsIHRoYXQgc2xpY2UmIzM5O3MgbGlmZXRpbWUgZXh0ZW5kcyBiZXlvbmQgdGhlIGR5bnB0ciBJRC4gVGhlIHBhdGNoIGlzIG1vZGlmeWluZyB0aGUgdmVyaWZpZXImIzM5O3Mgc3RhdGUgdHJhY2tpbmcgbG9naWMgaW4gYHByZXBhcmVfZnVuY19leGl0YCB0byBjb3JyZWN0bHkgcmVwYXJlbnQgdGhvc2Ugc2xpY2VzIHRvIHRoZSBjb3JyZWN0IGR5bnB0ciYjMzk7cyBwYXJlbnQuCgpJcyBpdCB3b3J0aCBmdXp6aW5nPyBBYnNvbHV0ZWx5LiBBbnkgY2hhbmdlIHRvIHRoZSBjb3JlIEJQRiB2ZXJpZmllciBsb2dpYyBpcyBoaWdoLXByaW9yaXR5IGZvciBmdXp6aW5nLiBUaGUgdmVyaWZpZXIgaXMgYSBrZXkgc3Vic3lzdGVtLCBzbyBtb2RpZmljYXRpb25zIGhlcmUgYXJlIHByaW1lIHRhcmdldHMuCgpPa2F5LCBub3cgZm9yIGBGb2N1c1N5bWJvbHNgLiBXaGF0IGFyZSB0aGUga2V5IGZ1bmN0aW9ucyB0byBmb2N1cyBvbj8gTGV0JiMzOTtzIHNlZS4uLiBJbml0aWFsbHksIEkgdGhvdWdodCBgYnBmX2NoZWNrYCBzaG91bGQgYmUgbGlzdGVkLCBhcyBpdCYjMzk7cyB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgdGhlIHZlcmlmaWVyLCBidXQgdGhhdCBpcyB0aGUgbWFpbiBlbnRyeXBvaW50LCB3aGlsZSBgcHJlcGFyZV9mdW5jX2V4aXRgIGFuZCBgcmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXRgIGFyZSBtb3JlIHNwZWNpZmljIHRvIHRoaXMgY2hhbmdlLgoKSSBuZWVkIHRvIGFwcGx5IHRoZSAmIzM0O0VYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzJiMzNDsgbWV0aG9kb2xvZ3kgSSBrZWVwIGF0IGhhbmQ6CgoqICAgQXZvaWQgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMuCiogICBUYXJnZXQgc3BlY2lmaWMgZmVhdHVyZSBsb2dpYyBhbmQgZW50cnlwb2ludHMuCgpgcmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXRgIGlzIHRoZSBuZXcgc3RhdGljIGZ1bmN0aW9uIGFkZGVkLiBgcHJlcGFyZV9mdW5jX2V4aXRgIGNhbGxzIHRoaXMgZnVuY3Rpb24uIGBwcmVwYXJlX2Z1bmNfZXhpdGAgaXMgY2FsbGVkIGJ5IHNldmVyYWwgZnVuY3Rpb25zLgoKSW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2A6CgoqICAgYHN0YXRpYyB2b2lkIHJlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqY2FsbGVlKWAKKiAgIGBzdGF0aWMgaW50IHByZXBhcmVfZnVuY19leGl0KC4uLilgCgpJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggZnVuY3Rpb25zIGNhbGwgYHByZXBhcmVfZnVuY19leGl0YC4gSSYjMzk7bSBjb25maWRlbnQgdGhhdCBJIHdpbGwga25vdyB3aGljaCBmdW5jdGlvbnMgdG8gZnV6eiwgZ2l2ZW4gdGhhdCB0aGUgQlBGIHZlcmlmaWVyIGlzIGEgbWFqb3Igc3Vic3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwNDo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcmVwYXJlX2Z1bmNfZXhpdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYz0xMDM1OT1zdGF0aWMgYm9vbCByZXR2YWxfcmFuZ2Vfd2l0aGluKHN0cnVjdCBicGZfcmV0dmFsX3JhbmdlIHJhbmdlLCBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDM2Ni1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMDM2NzpzdGF0aWMgaW50IHByZXBhcmVfZnVuY19leGl0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCAqaW5zbl9pZHgpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTAzNjgte1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMDg0Nz1zdGF0aWMgaW50IGNoZWNrX2hlbHBlcl9jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEzNDktXHRcdFx0ICogZnJhbWUuIEEgY2FsbGJhY2sgZnJhbWUgY2Fubm90IGJlIGxlZnQgdGhhdCB3YXkgYmVjYXVzZVxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMzUwOlx0XHRcdCAqIHByZXBhcmVfZnVuY19leGl0KCkgd291bGQgYXBwbHkgaXRzIHJldHVybiBjb250cmFjdCB0byB0aGVcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTM1MS1cdFx0XHQgKiB1bmtub3duIFIwIHN5bnRoZXNpemVkIGJlbG93LiBTdGFjay1kZXB0aCB2YWxpZGF0aW9uIHJlamVjdHNcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEzNjMtXHRcdFx0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIEJQRl9SRUdfMCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTEzNjQ6XHRcdFx0ZXJyID0gcHJlcGFyZV9mdW5jX2V4aXQoZW52LCBcdTAwMjZlbnYtXHUwMDNlaW5zbl9pZHgpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTExMzY1LVx0XHRcdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE3MzIyPXN0YXRpYyBpbnQgY2hlY2tfbGRfYWJzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc0MDItXHRcdG1hcmtfcmVnX2tub3duX3plcm8oZW52LCByZWdzLCBCUEZfUkVHXzApO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE3NDAzOlx0XHRlcnIgPSBwcmVwYXJlX2Z1bmNfZXhpdChlbnYsIFx1MDAyNmVudi1cdTAwM2VpbnNuX2lkeCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc0MDQtXHRcdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE4MTA5PXN0YXRpYyBpbnQgcHJvY2Vzc19icGZfZXhpdF9mdWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4MTE1LVx0LyogV2UgbXVzdCBkbyBjaGVja19yZWZlcmVuY2VfbGVhayBoZXJlIGJlZm9yZVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE4MTE2Olx0ICogcHJlcGFyZV9mdW5jX2V4aXQgdG8gaGFuZGxlIHRoZSBjYXNlIHdoZW5cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODExNy1cdCAqIHN0YXRlLVx1MDAzZWN1cmZyYW1lIFx1MDAzZSAwLCBpdCBtYXkgYmUgYSBjYWxsYmFjayBmdW5jdGlvbixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgxMjctXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTgxMjg6XHQvKiBUaGUgc2lkZSBlZmZlY3Qgb2YgdGhlIHByZXBhcmVfZnVuY19leGl0IHdoaWNoIGlzXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgxMjktXHQgKiBiZWluZyBza2lwcGVkIGlzIHRoYXQgaXQgZnJlZXMgYnBmX2Z1bmNfc3RhdGUuXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4MTQxLVx0XHQvKiBleGl0IGZyb20gbmVzdGVkIGZ1bmN0aW9uICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTgxNDI6XHRcdGVyciA9IHByZXBhcmVfZnVuY19leGl0KGVudiwgXHUwMDI2ZW52LVx1MDAzZWluc25faWR4KTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODE0My1cdFx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDQ6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwNjEKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgdGFzaywgd2Fsa2luZyB0aHJvdWdoIG15IHRob3VnaHQgcHJvY2VzczoKCioqVmVyaWZ5aW5nIEJQRiBWZXJpZmllciBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgaW50byB0aGUga2VybmVsJiMzOTtzIEJQRiB2ZXJpZmllciBzZXR1cC4gRmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGVzc2VudGlhbCBLY29uZmlnIG9wdGlvbnMgdGhhdCBnb3Zlcm4gdGhlIGNvbXBpbGF0aW9uIG9mIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBUaGlzIGlzIGZvdW5kYXRpb25hbCDigJMgZW5zdXJpbmcgdGhlIHZlcmlmaWVyIGl0c2VsZiBpcyAqZW5hYmxlZCogYW5kIGNvbmZpZ3VyZWQgY29ycmVjdGx5IGlzIHRoZSBiZWRyb2NrIG9mIGFueXRoaW5nIEJQRi1yZWxhdGVkLiBXaGVyZSBhcmUgdGhlc2Ugc2V0dGluZ3MgbGlrZWx5IHRvIGJlIGRlZmluZWQ/IFdlbGwsIEkmIzM5O2QgaW1tZWRpYXRlbHkgaGVhZCB0byB0aGUgb2J2aW91cyBwbGFjZXMuCgpJJiMzOTtkIG5lZWQgdG8gZXhhbWluZSBib3RoIHRoZSBga2VybmVsL2JwZi9NYWtlZmlsZWAgYW5kIGVpdGhlciBgaW5pdC9LY29uZmlnYCBvciBga2VybmVsL2JwZi9LY29uZmlnYC4gYE1ha2VmaWxlYCB0byBzZWUgdGhlIGNvbXBpbGF0aW9uIGRlcGVuZGVuY2llcywgYW5kIHRoZSBgS2NvbmZpZ2AgZmlsZXMgd291bGQgY29udGFpbiB0aGUgYWN0dWFsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gRnJvbSB0aG9zZSBJIGNhbiBkZXRlcm1pbmUgYW55IGRlcGVuZGVuY2llcywgd2hldGhlciB0aGUgYnVpbGQgcnVsZXMgYXJlIGFjdGl2ZSwgYW5kIHdoYXQgdGhlIGRlcGVuZGVuY2llcyBtaWdodCBiZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIGV4YW1pbmluZyB0aGUgcmVsZXZhbnQgb25lcyBhbmQgdGhhdCBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnkuIEkgaGF2ZSB0byBtYWtlIHN1cmUgdGhhdCB0aGUgdmVyaWZpZXIgaXMgZW5hYmxlZCBmb3IgdGhlIGJ1aWxkLCBvdGhlcndpc2UsIEkgd29uJiMzOTt0IGhhdmUgYW55dGhpbmcgdG8gd29yayB3aXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwNDo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2ZXJpZmllclxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlPTc9Q0ZMQUdTX2NvcmUubyAmIzQzOz0gLVduby1vdmVycmlkZS1pbml0ICQoY2ZsYWdzLW5vZ2NzZS15eSlcbmtlcm5lbC9icGYvTWFrZWZpbGUtOC1cbmtlcm5lbC9icGYvTWFrZWZpbGU6OTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBzeXNjYWxsLm8gdmVyaWZpZXIubyBpbm9kZS5vIGhlbHBlcnMubyB0bnVtLm8gY251bS5vIGxvZy5vIHRva2VuLm8gbGl2ZW5lc3MubyBjb25zdF9mb2xkLm8gZGlhZ25vc3RpY3Mub1xua2VybmVsL2JwZi9NYWtlZmlsZS0xMC1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBicGZfaXRlci5vIG1hcF9pdGVyLm8gdGFza19pdGVyLm8gcHJvZ19pdGVyLm8gbGlua19pdGVyLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDQ6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1NjIKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIEJQRiBTeXNjYWxsIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgSSBuZWVkIHRvIHBpbnBvaW50IHdoZXJlIHRoZSBgQlBGX1NZU0NBTExgIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGRlZmluZWQuIEdpdmVuIG15IGZhbWlsaWFyaXR5IHdpdGggdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0sIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2VzIHRvIHN0YXJ0IGxvb2tpbmcgYXJlIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gZmlsZXMuIEkmIzM5O2xsIGJlZ2luIGJ5IGNoZWNraW5nIGBpbml0L0tjb25maWdgIOKAkyBpdCBvZnRlbiBob2xkcyBmdW5kYW1lbnRhbCBzZXR0aW5ncyByZWxhdGVkIHRvIGtlcm5lbCBmZWF0dXJlcy4gSWYgaXQmIzM5O3Mgbm90IHRoZXJlLCB0aGUgbmV4dCBsb2dpY2FsIGxvY2F0aW9uIHdvdWxkIGJlIHRoZSBjb3JlIEJQRiBpbXBsZW1lbnRhdGlvbiBkaXJlY3RvcnkgaXRzZWxmLCBzcGVjaWZpY2FsbHkgYGtlcm5lbC9icGYvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgSSB3b3VsZCBleHBlY3QgYW55dGhpbmcgcmVsYXRlZCB0byBCUEYmIzM5O3Mgc3lzdGVtIGNhbGwgaW50ZXJmYWNlIHRvIHJlc2lkZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGl0IGlzIGltcGxlbWVudGVkLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgaW4gdGhvc2UgdHdvIHBsYWNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDQ6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX1NZU0NBTEwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA0OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODAwCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBgQlBGX1NZU0NBTExgIGlzIGRlZmluZWQgaW4gdGhlIEtjb25maWcgZmlsZXMuIFRoaXMgaXMgYSBjb21tb24gdGFzaywgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBCUEYtcmVsYXRlZCBjb25maWd1cmF0aW9ucywgYW5kIEkgbmVlZCB0byBiZSBlZmZpY2llbnQuIEnigJlsbCBzdGFydCBieSBkb2luZyBhIHF1aWNrIHNlYXJjaCB3aXRoaW4gdGhlIEtjb25maWcgZmlsZXMuIEkga25vdyBJIGNhbiB1c2UgbXkgdG9vbHMgdG8gc2VhcmNoIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZS4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSYjMzk7bSBnb2luZyB0byBzdGFydCB3aXRoIGEgZ3JlcC1saWtlIHNlYXJjaCB0aHJvdWdoIHRoZSBLY29uZmlnIGZpbGVzIHRvIHNlZSBpZiB0aGUgc3ltYm9sIGhhcyBiZWVuIGRlZmluZWQuIFRoZW4gSSB3aWxsIG5lZWQgdG8gbG9vayBhdCB0aGUgY29uZmlnIG9wdGlvbnMgdG8gc2VlIHdoYXQgdGhlIHN5bWJvbCBkb2VzLiBNeSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcywgaXRzIGltcGxpY2F0aW9ucywgYW5kIGhvdyBpdCByZWxhdGVzIHRvIHRoZSBvdmVyYWxsIEJQRiBmZWF0dXJlIHNldC4gVGhpcyBpbmZvcm1hdGlvbiBpcyBjcml0aWNhbCBmb3IgYW55IGZ1dHVyZSBtb2RpZmljYXRpb25zIG9yIHRyb3VibGVzaG9vdGluZyByZWxhdGVkIHRvIEJQRiBzeXNjYWxscy4gVGltZSB0byBkaWcgaW4hCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA0OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUEZfU1lTQ0FMTCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcJiMzNDtCUEYgc3Vic3lzdGVtXCYjMzQ7XG5rZXJuZWwvYnBmL0tjb25maWctMjYtXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXHRib29sIFwmIzM0O0VuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwNDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTExMwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgQlBGIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGZvciB0aGlzIEJQRiBmZWF0dXJlLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gdGhlIGBLY29uZmlnYCBmaWxlIHdpdGhpbiB0aGUgYGtlcm5lbC9icGYvYCBkaXJlY3RvcnkuIFRoYXQmIzM5O3MgdGhlIGdvLXRvIHBsYWNlIGZvciB1bmRlcnN0YW5kaW5nIGhvdyBhIGZlYXR1cmUgaXMgZW5hYmxlZCBhbmQgd2hhdCBlbHNlIGl0IGRlcGVuZHMgb24uIEkmIzM5O2xsIHplcm8gaW4gb24gbGluZSAyNyDigJMgdGhhdCBzZWVtcyBsaWtlIGEgcmVhc29uYWJsZSBzdGFydGluZyBwb2ludCwgb2Z0ZW4gdGhlIGluaXRpYWwgZW50cnkgZm9yIGEgZmVhdHVyZSBkZWZpbml0aW9uLiBIb3BlZnVsbHksIHRoYXQgd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiBhbnkgcHJlcmVxdWlzaXRlcyBvciBvdGhlciBjb25maWd1cmF0aW9ucyB0aGF0IG5lZWQgdG8gYmUgaW4gcGxhY2UgYmVmb3JlIHRoaXMgQlBGIGNvbXBvbmVudCBjYW4gYmUgYWN0aXZhdGVkLiBUaW1lIHRvIHNlZSB3aGF0IHRoZSBLY29uZmlnIGhhcyB0byBzYXkhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA0OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAyNTpcdG1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xuICAyNjpcdFxuICAyNzpcdGNvbmZpZyBCUEZfU1lTQ0FMTFxuICAyODpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiAgMjk6XHRcdHNlbGVjdCBCUEZcbiAgMzA6XHRcdHNlbGVjdCBJUlFfV09SS1xuICAzMTpcdFx0c2VsZWN0IE5FRURfVEFTS1NfUkNVXG4gIDMyOlx0XHRzZWxlY3QgVEFTS1NfVFJBQ0VfUkNVXG4gIDMzOlx0XHRzZWxlY3QgQklOQVJZX1BSSU5URlxuICAzNDpcdFx0c2VsZWN0IE5FVF9TT0NLX01TRyBpZiBORVRcbiAgMzU6XHRcdHNlbGVjdCBORVRfWEdSRVNTIGlmIE5FVFxuICAzNjpcdFx0c2VsZWN0IFBBR0VfUE9PTCBpZiBORVRcbiAgMzc6XHRcdGRlZmF1bHQgblxuICAzODpcdFx0aGVscFxuICAzOTpcdFx0ICBFbmFibGUgdGhlIGJwZigpIHN5c3RlbSBjYWxsIHRoYXQgYWxsb3dzIHRvIG1hbmlwdWxhdGUgQlBGIHByb2dyYW1zXG4gIDQwOlx0XHQgIGFuZCBtYXBzIHZpYSBmaWxlIGRlc2NyaXB0b3JzLlxuICA0MTpcdFxuICA0MjpcdGNvbmZpZyBCUEZfSklUXG4gIDQzOlx0XHRib29sIFwmIzM0O0VuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXCYjMzQ7XG4gIDQ0Olx0XHRkZXBlbmRzIG9uIEJQRlxuICA0NTpcdFx0ZGVwZW5kcyBvbiBIQVZFX0NCUEZfSklUIHx8IEhBVkVfRUJQRl9KSVRcbiAgNDY6XHRcdHNlbGVjdCBFWEVDTUVNXG4gIDQ3Olx0XHRoZWxwXG4gIDQ4Olx0XHQgIEJQRiBwcm9ncmFtcyBhcmUgbm9ybWFsbHkgaGFuZGxlZCBieSBhIEJQRiBpbnRlcnByZXRlci4gVGhpcyBvcHRpb25cbiAgNDk6XHRcdCAgYWxsb3dzIHRoZSBrZXJuZWwgdG8gZ2VuZXJhdGUgbmF0aXZlIGNvZGUgd2hlbiBhIHByb2dyYW0gaXMgbG9hZGVkXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA0OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjYxCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEJQRiBWZXJpZmljYXRpb24gVGhvdWdodHMqKgoKT2theSwgc28gYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgdGhlIGNydWNpYWwgY29uZmlndXJhdGlvbiBvcHRpb247IGl0JiMzOTtzIHRoZSBvbmUgdGhhdCB1bHRpbWF0ZWx5IGJyaW5ncyBpbiBga2VybmVsL2JwZi92ZXJpZmllci5vYC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnkgb3RoZXIgY29uZmlnIGRlcGVuZGVuY2llcywgYWx0aG91Z2ggSSBzdHJvbmdseSBzdXNwZWN0IGBCUEZfU1lTQ0FMTGAgaXMgdGhlIG9ubHkgcmVsZXZhbnQgcGllY2UgaGVyZS4gVGhlIG1lbnUgc3RydWN0dXJlIGluIHRoZSBrZXJuZWwgY29uZmlnICgmIzM0O0JQRiBzdWJzeXN0ZW0mIzM0OykgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgYW5kIGBCUEZfU1lTQ0FMTGAgc2VlbXMgdG8gYmUgc3RhbmRhbG9uZS4gTm8gZGVwZW5kZW5jaWVzLCBnb29kLgoKTm93LCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBmb3Jnb3R0ZW4gYW55dGhpbmcgZWxzZSBJIHdhbnQgdG8gZG91YmxlLWNoZWNrIG15IG1lbnRhbCBsaXN0IG9mIGtleSBzeW1ib2xzIGZvciBteSB3b3JrOiBgcmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXRgLCBgcHJlcGFyZV9mdW5jX2V4aXRgLCBhbmQgdGhlbiBlaXRoZXIgYHByb2Nlc3NfYnBmX2V4aXRfZnVsbGAgb3IgYGJwZl9jaGVja2AgLSBJIG5lZWQgdG8ga2VlcCB0aG9zZSBpbiBtaW5kIGFzIEkgZGl2ZSBpbi4KClJpZ2h0LCBsZXQmIzM5O3Mgbm93IGRyaWxsIGRvd24gaW50byBgYnBmX2NoZWNrYC4gSXQmIzM5O3MgdGltZSB0byBkaWcgaW50byBgdmVyaWZpZXIuY2AgYW5kIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA0OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCBicGZfY2hlY2tcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjEwNDk9c3RhdGljIGludCBicGZfcHJvZ192ZXJpZnlfc2lnbmF0dXJlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxMTY1LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjIxMTY2OmludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxMTY3LVx0ICAgICAgc3RydWN0IGJwZl9sb2dfYXR0ciAqYXR0cl9sb2cpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA0OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMjEyCgkJCQkJCQlvdXRwdXQ6IDEyNgoJCQkJCQkJdGhvdWdodHM6IDM1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgVmVyaWZpZXIgQ2hhbmdlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZSwgc28gSSYjMzk7bGwgc3RhcnQgYnkgY2hlY2tpbmcgYGJwZl9mb3JfZWFjaF9yZWdfaW5fdnN0YXRlYCBpbiBgdmVyaWZpZXIuY2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsYXRlZCBtb2RpZmljYXRpb25zIGluIHRoYXQgYXJlYS4gVGhlbiwgSSBzaG91bGQgYWxzbyBsb29rIGF0IHRoZSBgZHlucHRyYCBmdW5jdGlvbnMsIHBhcnRpY3VsYXJseSBgZHlucHRyX3JlZl9jbnRgLCBhbHNvIHdpdGhpbiBgdmVyaWZpZXIuY2AuIE15IHByaW1hcnkgY29uY2VybnMgcmlnaHQgbm93IGFyZSBgcmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXRgIGFuZCBgcHJlcGFyZV9mdW5jX2V4aXRgIGJlY2F1c2UgdGhleSBhcmUgZXhwbGljaXRseSBmbGFnZ2VkIGFzIGRpcmVjdGx5IGFmZmVjdGVkLgoKTm93LCBsZXQmIzM5O3MgcmV2aWV3IHRoZSBwYXJhbWV0ZXJzIGZvciBgc2V0LXJlc3VsdHNgLiBUaGUga2V5IHRoaW5nIGlzIHRoYXQgd2UmIzM5O3ZlIHNldCBgV29ydGhGdXp6aW5nYCB0byBgdHJ1ZWAsIHdoaWNoIGlzIGFwcHJvcHJpYXRlIGdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZS4gVGhlIGBSZWFzb25pbmdgIHNlY3Rpb24gZ2l2ZXMgYSBnb29kIG92ZXJ2aWV3OiB0aGlzIHBhdGNoIGFsdGVycyBCUEYgdmVyaWZpZXIgbG9naWMgd2l0aGluIHRoZSBrZXJuZWwsIHNwZWNpZmljYWxseSBieSBpbnRyb2R1Y2luZyBgcmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXRgIGR1cmluZyBgcHJlcGFyZV9mdW5jX2V4aXRgLiBUaGUgcG9pbnQgaXMsIHRoaXMgcmVwYXJlbnRzIGBkeW5wdHJgIHNsaWNlcyB1cG9uIGZ1bmN0aW9uIGV4aXQgdG8gbWFpbnRhaW4gbGluZWFnZSB0cmFja2luZyBhY3Jvc3MgY2FsbGVyIGZyYW1lcy4gVGhpcyB0b3VjaGVzIGNvcmUgdmVyaWZpZXIgY29kZSB1c2VkIGJ5IGBicGYoQlBGX1BST0dfTE9BRCwgLi4uKWAgd2hpY2ggaXMgYSBzdHJvbmcgaW5kaWNhdG9yIGZvciBmdXp6aW5nLgoKVGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBwcmVjaXNlOiBgcmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXRgIGFuZCBgcHJlcGFyZV9mdW5jX2V4aXRgLCB3aGljaCBpcyBwZXJmZWN0LiBUaGlzIGhlbHBzIHVzIGRpcmVjdCBvdXIgZnV6emluZyBlZmZvcnRzIHRvIHRoZSByZWxldmFudCBjb2RlLiBBbmQgd2UmIzM5O3JlIGVuYWJsaW5nIGBCUEZfU1lTQ0FMTGAgYXMgdGhlIGBFbmFibGVDb25maWdzYC4KCkZpbmFsbHksIGp1c3QgYSBzYW5pdHkgY2hlY2s6IGV2ZXJ5dGhpbmcgbG9va3MgaW4gb3JkZXIuIGBXb3J0aEZ1enppbmdgIGlzIHNldCBhcyBleHBlY3RlZCwgdGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBzcGVjaWZpYyB0byB0aGlzIHBhdGNoLCBhbmQgdGhlIGBFbmFibGVDb25maWdzYCBhcmUgc2Vuc2libGUuIFRoZSBgUmVhc29uaW5nYCBpcyBjb25jaXNlIGFuZCBvbiBwb2ludC4KCk9rYXksIGxldCYjMzk7cyBzdWJtaXQgdGhlIGBzZXQtcmVzdWx0c2AgY29tbWFuZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDQ6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXQmIzM0OywKICAgICYjMzQ7cHJlcGFyZV9mdW5jX2V4aXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyByZXBhcmVudF9keW5wdHJfc2xpY2VzX29uX2Z1bmNfZXhpdCgpIGluIGtlcm5lbC9icGYvdmVyaWZpZXIuYywgY2FsbGVkIGZyb20gcHJlcGFyZV9mdW5jX2V4aXQoKSB0byB1cGRhdGUgZHlucHRyIGxpbmVhZ2UgdHJhY2tpbmcgd2hlbiBjYWxsZWUgZnJhbWVzIHJldHVybi4gVGhpcyBtb2RpZmllcyBjb3JlIEJQRiB2ZXJpZmllciBsb2dpYyByZWFjaGFibGUgdmlhIEJQRiBwcm9ncmFtIGxvYWRpbmcgc3lzY2FsbHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXQmIzM0OywKICAgICYjMzQ7cHJlcGFyZV9mdW5jX2V4aXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyByZXBhcmVudF9keW5wdHJfc2xpY2VzX29uX2Z1bmNfZXhpdCgpIGluIGtlcm5lbC9icGYvdmVyaWZpZXIuYywgY2FsbGVkIGZyb20gcHJlcGFyZV9mdW5jX2V4aXQoKSB0byB1cGRhdGUgZHlucHRyIGxpbmVhZ2UgdHJhY2tpbmcgd2hlbiBjYWxsZWUgZnJhbWVzIHJldHVybi4gVGhpcyBtb2RpZmllcyBjb3JlIEJQRiB2ZXJpZmllciBsb2dpYyByZWFjaGFibGUgdmlhIEJQRiBwcm9ncmFtIGxvYWRpbmcgc3lzY2FsbHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA0OjUwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDQ6NTA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyJiMzOTtzIGBwcmVwYXJlX2Z1bmNfZXhpdCgpYCBsb2dpYyBieSBhZGRpbmcgYHJlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0KClgLiBUaGlzIGVuc3VyZXMgdGhhdCBkeW5wdHIgc2xpY2VzIGVzY2FwaW5nIGEgc3VicHJvZ3JhbSBjYWxsIGZyYW1lIGhhdmUgdGhlaXIgYHBhcmVudF9pZGAgdXBkYXRlZCB0byBwb2ludCB0byB0aGUgZHlucHRyJiMzOTtzIHBhcmVudCwgcHJvcGVybHkgaW52YWxpZGF0aW5nIHNsaWNlcyB3aGVuIHRoZSBwYXJlbnQgZHlucHRyL2J1ZmZlciBpcyBkZXN0cm95ZWQgaW4gdGhlIGNhbGxlci5cblxuVGhpcyBmaXggcHJldmVudHMgVXNlLUFmdGVyLUZyZWUgKFVBRikgLyBkYW5nbGluZyBwb2ludGVyIGRlcmVmZXJlbmNlcyBpbiBCUEYgcHJvZ3JhbXMuIFN1Y2ggcnVudGltZSBtZW1vcnkgc2FmZXR5IHZpb2xhdGlvbnMgYXJlIGNhdWdodCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcywgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMGI0ZGM5YjI4NzZhYjRjZWE5NDEzYzJkODRhY2U5NjcxNDA2M2JkMwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDEwIDA0OjQ5OjE4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jCmluZGV4IDcyYTNmNTk5OGRkMjcuLmVlNDFiNzM4NmY3NTIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKQEAgLTgwMCw2ICYjNDM7ODAwLDM5IEBAIHN0YXRpYyBpbnQgZHlucHRyX3JlZl9jbnQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHZfcGFyZW50X2lkKQogCXJldHVybiByZWZfY250OwogfQogCiYjNDM7c3RhdGljIHZvaWQgcmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKJiM0MzsJCQkJCQlzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKmNhbGxlZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKnZzdGF0ZSA9IGVudi0mZ3Q7Y3VyX3N0YXRlOwomIzQzOwlzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlOwomIzQzOwlzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnOwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGNhbGxlZS0mZ3Q7YWxsb2NhdGVkX3N0YWNrIC8gQlBGX1JFR19TSVpFOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IGJwZl9zdGFja19zdGF0ZSAqc2xvdCA9ICZhbXA7Y2FsbGVlLSZndDtzdGFja1tpXTsKJiM0MzsJCXN0cnVjdCBicGZfcmVnX3N0YXRlICpkeW5wdHIgPSAmYW1wO3Nsb3QtJmd0O3NwaWxsZWRfcHRyOwomIzQzOwomIzQzOwkJaWYgKHNsb3QtJmd0O3Nsb3RfdHlwZVswXSAhPSBTVEFDS19EWU5QVFIgfHwKJiM0MzsJCSAgICAhZHlucHRyLSZndDtkeW5wdHIuZmlyc3Rfc2xvdCB8fAomIzQzOwkJICAgICFkeW5wdHItJmd0O3BhcmVudF9pZCkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBBIGNhbGxlZSBjYW4gc3BpbGwgYSBzbGljZSBkZXJpdmVkIGZyb20gaXRzIGxvY2FsIGR5bnB0ciBpbnRvCiYjNDM7CQkgKiB0aGUgY2FsbGVyJiMzOTtzIHN0YWNrLiBUaGUgc2xpY2UgdGhlbiBvdXRsaXZlcyB0aGUgZHlucHRyIGlkIHRoYXQKJiM0MzsJCSAqIGxpbmtzIGl0IHRvIHRoZSByZXN0IG9mIHRoZSBvYmplY3QgdHJlZS4gUHJlc2VydmUgdGhhdCBsaW5rIGJ5CiYjNDM7CQkgKiBtYWtpbmcgZXNjYXBlZCBzbGljZXMgY2hpbGRyZW4gb2YgdGhlIGR5bnB0ciYjMzk7cyBwYXJlbnQgYmVmb3JlCiYjNDM7CQkgKiB0aGUgY2FsbGVlIGZyYW1lIGlzIGZyZWVkLgomIzQzOwkJICovCiYjNDM7CQlicGZfZm9yX2VhY2hfcmVnX2luX3ZzdGF0ZSh2c3RhdGUsIHN0YXRlLCByZWcsICh7CiYjNDM7CQkJaWYgKHN0YXRlID09IGNhbGxlZSB8fCByZWctJmd0O3BhcmVudF9pZCAhPSBkeW5wdHItJmd0O2lkIHx8CiYjNDM7CQkJICAgIGJhc2VfdHlwZShyZWctJmd0O3R5cGUpICE9IFBUUl9UT19NRU0pCiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwkJCXJlZy0mZ3Q7cGFyZW50X2lkID0gZHlucHRyLSZndDtwYXJlbnRfaWQ7CiYjNDM7CQl9KSk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3Qoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAkJCQkgICAgICAgIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGUsIGludCBzcGkpCiB7CkBAIC0xMDM5OSw2ICYjNDM7MTA0MzIsNyBAQCBzdGF0aWMgaW50IHByZXBhcmVfZnVuY19leGl0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCAqaW5zbl9pZHgpCiAJCXByaW50X3ZlcmlmaWVyX3N0YXRlKGVudiwgc3RhdGUsIGNhbGxlci0mZ3Q7ZnJhbWVubywgdHJ1ZSk7CiAJfQogCWFjY291bnRfcHJvY2Vzc2VkX2luc25zKGVudiwgY2FsbGVlLCBjYWxsZXIpOwomIzQzOwlyZXBhcmVudF9keW5wdHJfc2xpY2VzX29uX2Z1bmNfZXhpdChlbnYsIGNhbGxlZSk7CiAJLyogY2xlYXIgZXZlcnl0aGluZyBpbiB0aGUgY2FsbGVlLiBJbiBjYXNlIG9mIGV4Y2VwdGlvbmFsIGV4aXRzIHVzaW5nCiAJICogYnBmX3Rocm93LCB0aGlzIHdpbGwgYmUgZG9uZSBieSBjb3B5X3ZlcmlmaWVyX3N0YXRlIGZvciBleHRyYSBmcmFtZXMuICovCiAJZnJlZV9mdW5jX3N0YXRlKGNhbGxlZSk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfcWRpc2MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9xZGlzYy5jCmluZGV4IDZkYmQxNDg3MzQzYzAuLjEyMmVjYjdlOThlMmEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9xZGlzYy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9xZGlzYy5jCkBAIC0xMSw2ICYjNDM7MTEsNyBAQAogI2luY2x1ZGUgJiMzNDticGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHIuc2tlbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7YnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX3NsaWNlLnNrZWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2JwZl9xZGlzY19mYWlsX19pbnZhbGlkX2R5bnB0cl9jcm9zc19mcmFtZS5za2VsLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7YnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX3JldHVybmVkX3NsaWNlLnNrZWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2JwZl9xZGlzY19mYWlsX191bnRydXN0ZWRfd3JpdGUuc2tlbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7YnBmX3FkaXNjX2R5bnB0cl91c2VfYWZ0ZXJfaW52YWxpZGF0ZV9jbG9uZS5za2VsLmgmIzM0OwogCkBAIC0yMzAsNiAmIzQzOzIzMSw3IEBAIHZvaWQgdGVzdF9uc19icGZfcWRpc2Modm9pZCkKIAkJdGVzdF9pbmNvbXBsX29wcygpOwogCVJVTl9URVNUUyhicGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHIpOwogCVJVTl9URVNUUyhicGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHJfY3Jvc3NfZnJhbWUpOwomIzQzOwlSVU5fVEVTVFMoYnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX3JldHVybmVkX3NsaWNlKTsKIAlSVU5fVEVTVFMoYnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX3NsaWNlKTsKIAlSVU5fVEVTVFMoYnBmX3FkaXNjX2ZhaWxfX3VudHJ1c3RlZF93cml0ZSk7CiAJUlVOX1RFU1RTKGJwZl9xZGlzY19keW5wdHJfdXNlX2FmdGVyX2ludmFsaWRhdGVfY2xvbmUpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9xZGlzY19mYWlsX19pbnZhbGlkX2R5bnB0cl9yZXR1cm5lZF9zbGljZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9xZGlzY19mYWlsX19pbnZhbGlkX2R5bnB0cl9yZXR1cm5lZF9zbGljZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjk0MGFiYTdkOGFiZmUKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX3JldHVybmVkX3NsaWNlLmMKQEAgLTAsMCAmIzQzOzEsNzYgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOwomIzQzOyNpbmNsdWRlICZsdDt2bWxpbnV4LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJiMzNDticGZfZXhwZXJpbWVudGFsLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7YnBmX3FkaXNjX2NvbW1vbi5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2JwZl9taXNjLmgmIzM0OwomIzQzOwomIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKJiM0MzsKJiM0MztpbnQgcHJvdG87CiYjNDM7CiYjNDM7c3RhdGljIF9fbm9pbmxpbmUgc3RydWN0IGV0aGhkciAqc2xpY2VfaW5fc3VicHJvZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9keW5wdHIgcHRyOwomIzQzOwomIzQzOwlicGZfZHlucHRyX2Zyb21fc2tiKChzdHJ1Y3QgX19za19idWZmICopc2tiLCAwLCAmYW1wO3B0cik7CiYjNDM7CXJldHVybiBicGZfZHlucHRyX3NsaWNlKCZhbXA7cHRyLCAwLCBOVUxMLCBzaXplb2Yoc3RydWN0IGV0aGhkcikpOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtzdHJ1Y3Rfb3BzJiMzNDspCiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7aW52YWxpZCBtZW0gYWNjZXNzICYjMzk7c2NhbGFyJiMzOTsmIzM0OykKJiM0MztpbnQgQlBGX1BST0coaW52YWxpZF9keW5wdHJfcmV0dXJuZWRfc2xpY2UsIHN0cnVjdCBza19idWZmICpza2IsCiYjNDM7CSAgICAgc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBicGZfc2tfYnVmZl9wdHIgKnRvX2ZyZWUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZXRoaGRyICpoZHI7CiYjNDM7CiYjNDM7CWhkciA9IHNsaWNlX2luX3N1YnByb2coc2tiKTsKJiM0MzsJaWYgKCFoZHIpIHsKJiM0MzsJCWJwZl9xZGlzY19za2JfZHJvcChza2IsIHRvX2ZyZWUpOwomIzQzOwkJcmV0dXJuIE5FVF9YTUlUX0RST1A7CiYjNDM7CX0KJiM0MzsKJiM0MzsJYnBmX3FkaXNjX3NrYl9kcm9wKHNrYiwgdG9fZnJlZSk7CiYjNDM7CiYjNDM7CS8qIHRoaXMgc2hvdWxkIGZhaWwgKi8KJiM0MzsJcHJvdG8gPSBoZHItJmd0O2hfcHJvdG87CiYjNDM7CiYjNDM7CXJldHVybiBORVRfWE1JVF9EUk9QOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtzdHJ1Y3Rfb3BzJiMzNDspCiYjNDM7X19hdXhpbGlhcnkKJiM0MztzdHJ1Y3Qgc2tfYnVmZiAqQlBGX1BST0coYnBmX3FkaXNjX3Rlc3RfZGVxdWV1ZSwgc3RydWN0IFFkaXNjICpzY2gpCiYjNDM7ewomIzQzOwlyZXR1cm4gTlVMTDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7c3RydWN0X29wcyYjMzQ7KQomIzQzO19fYXV4aWxpYXJ5CiYjNDM7aW50IEJQRl9QUk9HKGJwZl9xZGlzY190ZXN0X2luaXQsIHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsCiYjNDM7CSAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQomIzQzO3sKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3N0cnVjdF9vcHMmIzM0OykKJiM0MztfX2F1eGlsaWFyeQomIzQzO3ZvaWQgQlBGX1BST0coYnBmX3FkaXNjX3Rlc3RfcmVzZXQsIHN0cnVjdCBRZGlzYyAqc2NoKQomIzQzO3sKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7c3RydWN0X29wcyYjMzQ7KQomIzQzO19fYXV4aWxpYXJ5CiYjNDM7dm9pZCBCUEZfUFJPRyhicGZfcWRpc2NfdGVzdF9kZXN0cm95LCBzdHJ1Y3QgUWRpc2MgKnNjaCkKJiM0Mzt7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0Oy5zdHJ1Y3Rfb3BzJiMzNDspCiYjNDM7c3RydWN0IFFkaXNjX29wcyB0ZXN0ID0gewomIzQzOwkuZW5xdWV1ZSAgID0gKHZvaWQgKilpbnZhbGlkX2R5bnB0cl9yZXR1cm5lZF9zbGljZSwKJiM0MzsJLmRlcXVldWUgICA9ICh2b2lkICopYnBmX3FkaXNjX3Rlc3RfZGVxdWV1ZSwKJiM0MzsJLmluaXQgICAgICA9ICh2b2lkICopYnBmX3FkaXNjX3Rlc3RfaW5pdCwKJiM0MzsJLnJlc2V0ICAgICA9ICh2b2lkICopYnBmX3FkaXNjX3Rlc3RfcmVzZXQsCiYjNDM7CS5kZXN0cm95ICAgPSAodm9pZCAqKWJwZl9xZGlzY190ZXN0X2Rlc3Ryb3ksCiYjNDM7CS5pZCAgICAgICAgPSAmIzM0O2JwZl9xZGlzY190ZXN0JiMzNDssCiYjNDM7fTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmMKaW5kZXggMWNkNjFkNzJjMTY2Zi4uOTJmOWY5ZWEwNTMyMSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmMKQEAgLTE4OTIsNiAmIzQzOzE4OTIsNTUgQEAgaW50IGNsb25lX2ludmFsaWRhdGU0KHZvaWQgKmN0eCkKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBfX25vaW5saW5lIHZvaWQgY2xvbmVfc2xpY2VfaW5fc3VicHJvZyhzdHJ1Y3QgYnBmX2R5bnB0ciAqcHRyLCBpbnQgKipkYXRhKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9keW5wdHIgY2xvbmU7CiYjNDM7CiYjNDM7CWJwZl9keW5wdHJfY2xvbmUocHRyLCAmYW1wO2Nsb25lKTsKJiM0MzsJKmRhdGEgPSBicGZfZHlucHRyX2RhdGEoJmFtcDtjbG9uZSwgMCwgc2l6ZW9mKHZhbCkpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIEEgc2xpY2UgdGhhdCBlc2NhcGVzIHRoZSBjbG9uZSYjMzk7cyBjYWxsIGZyYW1lIHJlbWFpbnMgdmFsaWQgd2hpbGUgdGhlCiYjNDM7ICogc2hhcmVkIHJpbmdidWYgcmVzZXJ2YXRpb24gaXMgbGl2ZS4KJiM0MzsgKi8KJiM0MztTRUMoJiMzNDs/cmF3X3RwJiMzNDspCiYjNDM7X19zdWNjZXNzCiYjNDM7aW50IGNsb25lX3NsaWNlX3JldHVybmVkX2ZyYW1lX3ZhbGlkKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBicGZfZHlucHRyIHB0cjsKJiM0MzsJaW50ICpkYXRhID0gTlVMTDsKJiM0MzsKJiM0MzsJYnBmX3JpbmdidWZfcmVzZXJ2ZV9keW5wdHIoJmFtcDtyaW5nYnVmLCB2YWwsIDAsICZhbXA7cHRyKTsKJiM0MzsJY2xvbmVfc2xpY2VfaW5fc3VicHJvZygmYW1wO3B0ciwgJmFtcDtkYXRhKTsKJiM0MzsJaWYgKGRhdGEpCiYjNDM7CQkqZGF0YSA9IDEyMzsKJiM0MzsJYnBmX3JpbmdidWZfc3VibWl0X2R5bnB0cigmYW1wO3B0ciwgMCk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFJlbGVhc2luZyB0aGUgc2hhcmVkIHJlc2VydmF0aW9uIG11c3QgaW52YWxpZGF0ZSBhIHNsaWNlIHRoYXQgZXNjYXBlZAomIzQzOyAqIGZyb20gYSBjbG9uZSYjMzk7cyBjYWxsIGZyYW1lLgomIzQzOyAqLwomIzQzO1NFQygmIzM0Oz9yYXdfdHAmIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtpbnZhbGlkIG1lbSBhY2Nlc3MgJiMzOTtzY2FsYXImIzM5OyYjMzQ7KQomIzQzO2ludCBjbG9uZV9zbGljZV9yZXR1cm5lZF9mcmFtZV9pbnZhbGlkKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBicGZfZHlucHRyIHB0cjsKJiM0MzsJaW50ICpkYXRhID0gTlVMTDsKJiM0MzsKJiM0MzsJYnBmX3JpbmdidWZfcmVzZXJ2ZV9keW5wdHIoJmFtcDtyaW5nYnVmLCB2YWwsIDAsICZhbXA7cHRyKTsKJiM0MzsJY2xvbmVfc2xpY2VfaW5fc3VicHJvZygmYW1wO3B0ciwgJmFtcDtkYXRhKTsKJiM0MzsJYnBmX3JpbmdidWZfc3VibWl0X2R5bnB0cigmYW1wO3B0ciwgMCk7CiYjNDM7CWlmIChkYXRhKQomIzQzOwkJLyogdGhpcyBzaG91bGQgZmFpbCAqLwomIzQzOwkJKmRhdGEgPSAxMjM7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIC8qIEludmFsaWRhdGluZyBhIGR5bnB0ciBzaG91bGQgaW52YWxpZGF0ZSBhbnkgZGF0YSBzbGljZXMKICAqIG9mIGl0cyBwYXJlbnQKICAqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDQ6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDY1OAoJCQkJCQkJb3V0cHV0OiAxODAKCQkJCQkJCXRob3VnaHRzOiAxNjc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFuYWx5c2lzOiBEeW5wdHIgU2xpY2UgUmVwYXJlbnRpbmcgaW4gQlBGIFZlcmlmaWVyKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBwb2ludHMgdG93YXJkcyAqbm90KiBuZWVkaW5nIGEgS01TQU4gc2Vzc2lvbi4gVGhlIHBhdGNoIGZvY3VzZXMgb24gdGhlIEJQRiB2ZXJpZmllciwgc3BlY2lmaWNhbGx5IGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgVXNlLUFmdGVyLUZyZWUgKFVBRikgdnVsbmVyYWJpbGl0eSB3aXRoIGR5bmFtaWMgcG9pbnRlciAoZHlucHRyKSBzbGljZXMgYWNyb3NzIGZ1bmN0aW9uIGNhbGxzLgoKVGhlIGNvcmUgb2YgdGhlIHBhdGNoIGlzIHRoZSBuZXcgYHJlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0YCBoZWxwZXIuIFdoYXQgaXQgZG9lcyBpcyBjcnVjaWFsOiB3aGVuIGEgZnVuY3Rpb24gKGNhbGxlZSkgY3JlYXRlcyBhIHNsaWNlIGZyb20gYSBsb2NhbCBkeW5wdHIgYW5kIHBhc3NlcyBpdCBiYWNrIHRvIHRoZSBjYWxsZXIsIGl0IGVuc3VyZXMgdGhhdCB0aGUgKnNsaWNlJiMzOTtzKiBgcGFyZW50X2lkYCBpcyB1cGRhdGVkIHRvIHBvaW50IHRvIHRoZSAqb3JpZ2luYWwqIGR5bnB0ciYjMzk7cyBgcGFyZW50X2lkYCBiZWZvcmUgdGhlIGNhbGxlZSBmcmFtZSBpcyBmcmVlZC4gVGhpcyByZXBhcmVudGluZyBpcyBlc3NlbnRpYWwgYmVjYXVzZSB0aGUgb3JpZ2luYWwgZHlucHRyIElEIHdvdWxkIG90aGVyd2lzZSBiZSBsb3N0IHdoZW4gdGhlIGNhbGxlZSBleGl0cy4gV2l0aG91dCB0aGlzLCB0aGUgdmVyaWZpZXIgbWlnaHQgZmFpbCB0byBjb3JyZWN0bHkgaWRlbnRpZnkgYW5kIGludmFsaWRhdGUgdGhlIHNsaWNlIHdoZW4gdGhlIHVuZGVybHlpbmcgYnVmZmVyIChlLmcuLCBhbiBTS0IpIGlzIHJlbGVhc2VkLCBsZWFkaW5nIHRvIGEgVUFGIG9yIG1lbW9yeSBzYWZldHkgaXNzdWUgZHVyaW5nIEJQRiBwcm9ncmFtIGV4ZWN1dGlvbi4KClNvLCB0aGUgaXNzdWUgaXMgcmVhbGx5IGFib3V0ICp2ZXJpZmllciBzdGF0ZSBjb25zaXN0ZW5jeSosIG5vdCB0aGUgaW50cm9kdWN0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgY29kZSBpcyBmaXhpbmcgdGhlIHRyYWNraW5nIG9mIGR5bnB0ciBzbGljZSBsaWZldGltZXMgd2l0aGluIHRoZSB2ZXJpZmllciYjMzk7cyBpbnRlcm5hbCBzdGF0ZS4gSXQmIzM5O3MgZXNzZW50aWFsbHkgcHJldmVudGluZyBhIHNjZW5hcmlvIHdoZXJlIGEgQlBGIHByb2dyYW0gY291bGQgYXR0ZW1wdCB0byBhY2Nlc3MgbWVtb3J5IGFmdGVyIGl0IGhhcyBiZWVuIGZyZWVkLiBUaGUgdmVyaWZpZXIgdHJhY2tzIHJlZ2lzdGVycyBhbmQgc3RhY2sgc2xvdHMsIGFuZCB0aGlzIHBhdGNoIGtlZXBzIHRoYXQgc3RhdGUgY29uc2lzdGVudCB3aXRoIHBvaW50ZXIgbGlmZXRpbWVzLgoKTm93LCBsZXQmIzM5O3MgYXBwbHkgdGhlIEtNU0FOIHJ1bGVzLiBEb2VzIHRoaXMgcGF0Y2g6CgoxLiAgKipFeHBvc2Uga2VybmVsIGRhdGEgdG8gdXNlciBzcGFjZT8qKiBOby4KMi4gICoqUmVseSBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8qKiBOby4KMy4gICoqQWxsb2NhdGUgY29tcGxleCBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHM/KiogTm8uCjQuICAqKkludHJvZHVjZSBib3VuZHMgY2hlY2sgdnVsbmVyYWJpbGl0aWVzIGFyb3VuZCBleGlzdGluZyBkYXRhPyoqIE5vLgoKSXQmIzM5O3MgYWxsIGludGVybmFsIHZlcmlmaWVyIHN0YXRlIG1hbmlwdWxhdGlvbi4gVGhlIHZlcmlmaWVyIHVzZXMgaW5pdGlhbGl6ZWQgZGF0YSBzdHJ1Y3R1cmVzIHRvIHRyYWNrIHRoZSB2YWxpZGl0eSBvZiBwb2ludGVycyBhbmQgbWVtb3J5IGFjY2Vzcy4gVGhlIGBicGZfZm9yX2VhY2hfcmVnX2luX3ZzdGF0ZWAgbG9vcCBhbmQgdGhlIHN0YWNrIHN0cnVjdHVyZXMgbGlrZSBgY2FsbGVlLSZndDtzdGFja1tpXWAgYXJlIGFsbCBwYXJ0IG9mIHRoYXQgaW50ZXJuYWwgdHJhY2tpbmcuIEl0IGRlYWxzIHdpdGggcmVnaXN0ZXIgc3RhdGVzIGFuZCB0aGUgdmVyaWZpZXImIzM5O3Mgc3RhY2ssIGFsbCBvZiB3aGljaCBhcmUgaW5pdGlhbGl6ZWQgd2l0aGluIHRoZSB2ZXJpZmllciYjMzk7cyBjb250ZXh0LgoKVGhlIGJ1ZyB0aGlzIHBhdGNoIGFkZHJlc3NlcyBpcyBhIGNsYXNzaWMgVUFGIG9yIGRhbmdsaW5nIHBvaW50ZXIgc2NlbmFyaW8uIFRoZXNlIGtpbmRzIG9mIGJ1Z3MgYXJlICpwcmVjaXNlbHkqIHdoYXQgS0FTQU4gaXMgZGVzaWduZWQgdG8gY2F0Y2ghIEtBU0FOIGlzIGJ1aWx0IHRvIGRldGVjdCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFuZCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLiBLTVNBTiwgb24gdGhlIG90aGVyIGhhbmQsIGV4Y2VscyBhdCBmaW5kaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLgoKVGhlIHBhdGNoJiMzOTtzIGNoYW5nZXMgZGlyZWN0bHkgYWltIHRvICpwcmV2ZW50KiBtZW1vcnkgc2FmZXR5IGlzc3VlcywgYW5kIEtBU0FOIHNob3VsZCBoYW5kbGUgdGhvc2UgcHJvYmxlbXMuIEtNU0FOIHdvdWxkIGJlIG92ZXJraWxsIGluIHRoaXMgY2FzZS4gTXkgY29uY2x1c2lvbj8gVGhpcyBpcyBhIGBOZWVkc0tNU0FOPWZhbHNlYCBzaXR1YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA0OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXImIzM5O3MgYHByZXBhcmVfZnVuY19leGl0KClgIGxvZ2ljIGJ5IGFkZGluZyBgcmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXQoKWAuIFRoaXMgZW5zdXJlcyB0aGF0IGR5bnB0ciBzbGljZXMgZXNjYXBpbmcgYSBzdWJwcm9ncmFtIGNhbGwgZnJhbWUgaGF2ZSB0aGVpciBgcGFyZW50X2lkYCB1cGRhdGVkIHRvIHBvaW50IHRvIHRoZSBkeW5wdHImIzM5O3MgcGFyZW50LCBwcm9wZXJseSBpbnZhbGlkYXRpbmcgc2xpY2VzIHdoZW4gdGhlIHBhcmVudCBkeW5wdHIvYnVmZmVyIGlzIGRlc3Ryb3llZCBpbiB0aGUgY2FsbGVyLlxuXG5UaGlzIGZpeCBwcmV2ZW50cyBVc2UtQWZ0ZXItRnJlZSAoVUFGKSAvIGRhbmdsaW5nIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGluIEJQRiBwcm9ncmFtcy4gU3VjaCBydW50aW1lIG1lbW9yeSBzYWZldHkgdmlvbGF0aW9ucyBhcmUgY2F1Z2h0IGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyJiMzOTtzIGBwcmVwYXJlX2Z1bmNfZXhpdCgpYCBsb2dpYyBieSBhZGRpbmcgYHJlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0KClgLiBUaGlzIGVuc3VyZXMgdGhhdCBkeW5wdHIgc2xpY2VzIGVzY2FwaW5nIGEgc3VicHJvZ3JhbSBjYWxsIGZyYW1lIGhhdmUgdGhlaXIgYHBhcmVudF9pZGAgdXBkYXRlZCB0byBwb2ludCB0byB0aGUgZHlucHRyJiMzOTtzIHBhcmVudCwgcHJvcGVybHkgaW52YWxpZGF0aW5nIHNsaWNlcyB3aGVuIHRoZSBwYXJlbnQgZHlucHRyL2J1ZmZlciBpcyBkZXN0cm95ZWQgaW4gdGhlIGNhbGxlci5cblxuVGhpcyBmaXggcHJldmVudHMgVXNlLUFmdGVyLUZyZWUgKFVBRikgLyBkYW5nbGluZyBwb2ludGVyIGRlcmVmZXJlbmNlcyBpbiBCUEYgcHJvZ3JhbXMuIFN1Y2ggcnVudGltZSBtZW1vcnkgc2FmZXR5IHZpb2xhdGlvbnMgYXJlIGNhdWdodCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcywgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwNDo0OToxOS40NzMyODU2NzJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzQwMTk0MzY1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0XCIsXG4gICAgXCJwcmVwYXJlX2Z1bmNfZXhpdFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllcidzIGBwcmVwYXJlX2Z1bmNfZXhpdCgpYCBsb2dpYyBieSBhZGRpbmcgYHJlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0KClgLiBUaGlzIGVuc3VyZXMgdGhhdCBkeW5wdHIgc2xpY2VzIGVzY2FwaW5nIGEgc3VicHJvZ3JhbSBjYWxsIGZyYW1lIGhhdmUgdGhlaXIgYHBhcmVudF9pZGAgdXBkYXRlZCB0byBwb2ludCB0byB0aGUgZHlucHRyJ3MgcGFyZW50LCBwcm9wZXJseSBpbnZhbGlkYXRpbmcgc2xpY2VzIHdoZW4gdGhlIHBhcmVudCBkeW5wdHIvYnVmZmVyIGlzIGRlc3Ryb3llZCBpbiB0aGUgY2FsbGVyLlxcblxcblRoaXMgZml4IHByZXZlbnRzIFVzZS1BZnRlci1GcmVlIChVQUYpIC8gZGFuZ2xpbmcgcG9pbnRlciBkZXJlZmVyZW5jZXMgaW4gQlBGIHByb2dyYW1zLiBTdWNoIHJ1bnRpbWUgbWVtb3J5IHNhZmV0eSB2aW9sYXRpb25zIGFyZSBjYXVnaHQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHJlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0KCkgaW4ga2VybmVsL2JwZi92ZXJpZmllci5jLCBjYWxsZWQgZnJvbSBwcmVwYXJlX2Z1bmNfZXhpdCgpIHRvIHVwZGF0ZSBkeW5wdHIgbGluZWFnZSB0cmFja2luZyB3aGVuIGNhbGxlZSBmcmFtZXMgcmV0dXJuLiBUaGlzIG1vZGlmaWVzIGNvcmUgQlBGIHZlcmlmaWVyIGxvZ2ljIHJlYWNoYWJsZSB2aWEgQlBGIHByb2dyYW0gbG9hZGluZyBzeXNjYWxscy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDQ6NDk6MTkuNDczMjkwNDAyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjY4NzYwNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAwYjRkYzliMjg3NmFiNGNlYTk0MTNjMmQ4NGFjZTk2NzE0MDYzYmQzXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgU2VwIDEwIDA0OjQ5OjE4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbmluZGV4IDcyYTNmNTk5OGRkMjcuLmVlNDFiNzM4NmY3NTIgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXFxuKysrIGIva2VybmVsL2JwZi92ZXJpZmllci5jXFxuQEAgLTgwMCw2ICs4MDAsMzkgQEAgc3RhdGljIGludCBkeW5wdHJfcmVmX2NudChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgdl9wYXJlbnRfaWQpXFxuIFxcdHJldHVybiByZWZfY250O1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCByZXBhcmVudF9keW5wdHJfc2xpY2VzX29uX2Z1bmNfZXhpdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKmNhbGxlZSlcXG4re1xcbitcXHRzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICp2c3RhdGUgPSBlbnYtXFx1MDAzZWN1cl9zdGF0ZTtcXG4rXFx0c3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZTtcXG4rXFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZztcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgY2FsbGVlLVxcdTAwM2VhbGxvY2F0ZWRfc3RhY2sgLyBCUEZfUkVHX1NJWkU7IGkrKykge1xcbitcXHRcXHRzdHJ1Y3QgYnBmX3N0YWNrX3N0YXRlICpzbG90ID0gXFx1MDAyNmNhbGxlZS1cXHUwMDNlc3RhY2tbaV07XFxuK1xcdFxcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpkeW5wdHIgPSBcXHUwMDI2c2xvdC1cXHUwMDNlc3BpbGxlZF9wdHI7XFxuK1xcbitcXHRcXHRpZiAoc2xvdC1cXHUwMDNlc2xvdF90eXBlWzBdICE9IFNUQUNLX0RZTlBUUiB8fFxcbitcXHRcXHQgICAgIWR5bnB0ci1cXHUwMDNlZHlucHRyLmZpcnN0X3Nsb3QgfHxcXG4rXFx0XFx0ICAgICFkeW5wdHItXFx1MDAzZXBhcmVudF9pZClcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBBIGNhbGxlZSBjYW4gc3BpbGwgYSBzbGljZSBkZXJpdmVkIGZyb20gaXRzIGxvY2FsIGR5bnB0ciBpbnRvXFxuK1xcdFxcdCAqIHRoZSBjYWxsZXIncyBzdGFjay4gVGhlIHNsaWNlIHRoZW4gb3V0bGl2ZXMgdGhlIGR5bnB0ciBpZCB0aGF0XFxuK1xcdFxcdCAqIGxpbmtzIGl0IHRvIHRoZSByZXN0IG9mIHRoZSBvYmplY3QgdHJlZS4gUHJlc2VydmUgdGhhdCBsaW5rIGJ5XFxuK1xcdFxcdCAqIG1ha2luZyBlc2NhcGVkIHNsaWNlcyBjaGlsZHJlbiBvZiB0aGUgZHlucHRyJ3MgcGFyZW50IGJlZm9yZVxcbitcXHRcXHQgKiB0aGUgY2FsbGVlIGZyYW1lIGlzIGZyZWVkLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0YnBmX2Zvcl9lYWNoX3JlZ19pbl92c3RhdGUodnN0YXRlLCBzdGF0ZSwgcmVnLCAoe1xcbitcXHRcXHRcXHRpZiAoc3RhdGUgPT0gY2FsbGVlIHx8IHJlZy1cXHUwMDNlcGFyZW50X2lkICE9IGR5bnB0ci1cXHUwMDNlaWQgfHxcXG4rXFx0XFx0XFx0ICAgIGJhc2VfdHlwZShyZWctXFx1MDAzZXR5cGUpICE9IFBUUl9UT19NRU0pXFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRcXHRyZWctXFx1MDAzZXBhcmVudF9pZCA9IGR5bnB0ci1cXHUwMDNlcGFyZW50X2lkO1xcbitcXHRcXHR9KSk7XFxuK1xcdH1cXG4rfVxcbitcXG4gc3RhdGljIGludCBkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuIFxcdFxcdFxcdFxcdCAgICAgICAgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZSwgaW50IHNwaSlcXG4ge1xcbkBAIC0xMDM5OSw2ICsxMDQzMiw3IEBAIHN0YXRpYyBpbnQgcHJlcGFyZV9mdW5jX2V4aXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50ICppbnNuX2lkeClcXG4gXFx0XFx0cHJpbnRfdmVyaWZpZXJfc3RhdGUoZW52LCBzdGF0ZSwgY2FsbGVyLVxcdTAwM2VmcmFtZW5vLCB0cnVlKTtcXG4gXFx0fVxcbiBcXHRhY2NvdW50X3Byb2Nlc3NlZF9pbnNucyhlbnYsIGNhbGxlZSwgY2FsbGVyKTtcXG4rXFx0cmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXQoZW52LCBjYWxsZWUpO1xcbiBcXHQvKiBjbGVhciBldmVyeXRoaW5nIGluIHRoZSBjYWxsZWUuIEluIGNhc2Ugb2YgZXhjZXB0aW9uYWwgZXhpdHMgdXNpbmdcXG4gXFx0ICogYnBmX3Rocm93LCB0aGlzIHdpbGwgYmUgZG9uZSBieSBjb3B5X3ZlcmlmaWVyX3N0YXRlIGZvciBleHRyYSBmcmFtZXMuICovXFxuIFxcdGZyZWVfZnVuY19zdGF0ZShjYWxsZWUpO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfcWRpc2MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9xZGlzYy5jXFxuaW5kZXggNmRiZDE0ODczNDNjMC4uMTIyZWNiN2U5OGUyYSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfcWRpc2MuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9xZGlzYy5jXFxuQEAgLTExLDYgKzExLDcgQEBcXG4gI2luY2x1ZGUgXFxcImJwZl9xZGlzY19mYWlsX19pbnZhbGlkX2R5bnB0ci5za2VsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJicGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHJfc2xpY2Uuc2tlbC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiYnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX2Nyb3NzX2ZyYW1lLnNrZWwuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImJwZl9xZGlzY19mYWlsX19pbnZhbGlkX2R5bnB0cl9yZXR1cm5lZF9zbGljZS5za2VsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJicGZfcWRpc2NfZmFpbF9fdW50cnVzdGVkX3dyaXRlLnNrZWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImJwZl9xZGlzY19keW5wdHJfdXNlX2FmdGVyX2ludmFsaWRhdGVfY2xvbmUuc2tlbC5oXFxcIlxcbiBcXG5AQCAtMjMwLDYgKzIzMSw3IEBAIHZvaWQgdGVzdF9uc19icGZfcWRpc2Modm9pZClcXG4gXFx0XFx0dGVzdF9pbmNvbXBsX29wcygpO1xcbiBcXHRSVU5fVEVTVFMoYnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyKTtcXG4gXFx0UlVOX1RFU1RTKGJwZl9xZGlzY19mYWlsX19pbnZhbGlkX2R5bnB0cl9jcm9zc19mcmFtZSk7XFxuK1xcdFJVTl9URVNUUyhicGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHJfcmV0dXJuZWRfc2xpY2UpO1xcbiBcXHRSVU5fVEVTVFMoYnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX3NsaWNlKTtcXG4gXFx0UlVOX1RFU1RTKGJwZl9xZGlzY19mYWlsX191bnRydXN0ZWRfd3JpdGUpO1xcbiBcXHRSVU5fVEVTVFMoYnBmX3FkaXNjX2R5bnB0cl91c2VfYWZ0ZXJfaW52YWxpZGF0ZV9jbG9uZSk7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHJfcmV0dXJuZWRfc2xpY2UuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHJfcmV0dXJuZWRfc2xpY2UuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uOTQwYWJhN2Q4YWJmZVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX3JldHVybmVkX3NsaWNlLmNcXG5AQCAtMCwwICsxLDc2IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjdm1saW51eC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwiYnBmX2V4cGVyaW1lbnRhbC5oXFxcIlxcbisjaW5jbHVkZSBcXFwiYnBmX3FkaXNjX2NvbW1vbi5oXFxcIlxcbisjaW5jbHVkZSBcXFwiYnBmX21pc2MuaFxcXCJcXG4rXFxuK2NoYXIgX2xpY2Vuc2VbXSBTRUMoXFxcImxpY2Vuc2VcXFwiKSA9IFxcXCJHUExcXFwiO1xcbitcXG4raW50IHByb3RvO1xcbitcXG4rc3RhdGljIF9fbm9pbmxpbmUgc3RydWN0IGV0aGhkciAqc2xpY2VfaW5fc3VicHJvZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbit7XFxuK1xcdHN0cnVjdCBicGZfZHlucHRyIHB0cjtcXG4rXFxuK1xcdGJwZl9keW5wdHJfZnJvbV9za2IoKHN0cnVjdCBfX3NrX2J1ZmYgKilza2IsIDAsIFxcdTAwMjZwdHIpO1xcbitcXHRyZXR1cm4gYnBmX2R5bnB0cl9zbGljZShcXHUwMDI2cHRyLCAwLCBOVUxMLCBzaXplb2Yoc3RydWN0IGV0aGhkcikpO1xcbit9XFxuK1xcbitTRUMoXFxcInN0cnVjdF9vcHNcXFwiKVxcbitfX2ZhaWx1cmUgX19tc2coXFxcImludmFsaWQgbWVtIGFjY2VzcyAnc2NhbGFyJ1xcXCIpXFxuK2ludCBCUEZfUFJPRyhpbnZhbGlkX2R5bnB0cl9yZXR1cm5lZF9zbGljZSwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4rXFx0ICAgICBzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IGJwZl9za19idWZmX3B0ciAqdG9fZnJlZSlcXG4re1xcbitcXHRzdHJ1Y3QgZXRoaGRyICpoZHI7XFxuK1xcbitcXHRoZHIgPSBzbGljZV9pbl9zdWJwcm9nKHNrYik7XFxuK1xcdGlmICghaGRyKSB7XFxuK1xcdFxcdGJwZl9xZGlzY19za2JfZHJvcChza2IsIHRvX2ZyZWUpO1xcbitcXHRcXHRyZXR1cm4gTkVUX1hNSVRfRFJPUDtcXG4rXFx0fVxcbitcXG4rXFx0YnBmX3FkaXNjX3NrYl9kcm9wKHNrYiwgdG9fZnJlZSk7XFxuK1xcbitcXHQvKiB0aGlzIHNob3VsZCBmYWlsICovXFxuK1xcdHByb3RvID0gaGRyLVxcdTAwM2VoX3Byb3RvO1xcbitcXG4rXFx0cmV0dXJuIE5FVF9YTUlUX0RST1A7XFxuK31cXG4rXFxuK1NFQyhcXFwic3RydWN0X29wc1xcXCIpXFxuK19fYXV4aWxpYXJ5XFxuK3N0cnVjdCBza19idWZmICpCUEZfUFJPRyhicGZfcWRpc2NfdGVzdF9kZXF1ZXVlLCBzdHJ1Y3QgUWRpc2MgKnNjaClcXG4re1xcbitcXHRyZXR1cm4gTlVMTDtcXG4rfVxcbitcXG4rU0VDKFxcXCJzdHJ1Y3Rfb3BzXFxcIilcXG4rX19hdXhpbGlhcnlcXG4raW50IEJQRl9QUk9HKGJwZl9xZGlzY190ZXN0X2luaXQsIHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXFxuK1xcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbit7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitTRUMoXFxcInN0cnVjdF9vcHNcXFwiKVxcbitfX2F1eGlsaWFyeVxcbit2b2lkIEJQRl9QUk9HKGJwZl9xZGlzY190ZXN0X3Jlc2V0LCBzdHJ1Y3QgUWRpc2MgKnNjaClcXG4re1xcbit9XFxuK1xcbitTRUMoXFxcInN0cnVjdF9vcHNcXFwiKVxcbitfX2F1eGlsaWFyeVxcbit2b2lkIEJQRl9QUk9HKGJwZl9xZGlzY190ZXN0X2Rlc3Ryb3ksIHN0cnVjdCBRZGlzYyAqc2NoKVxcbit7XFxuK31cXG4rXFxuK1NFQyhcXFwiLnN0cnVjdF9vcHNcXFwiKVxcbitzdHJ1Y3QgUWRpc2Nfb3BzIHRlc3QgPSB7XFxuK1xcdC5lbnF1ZXVlICAgPSAodm9pZCAqKWludmFsaWRfZHlucHRyX3JldHVybmVkX3NsaWNlLFxcbitcXHQuZGVxdWV1ZSAgID0gKHZvaWQgKilicGZfcWRpc2NfdGVzdF9kZXF1ZXVlLFxcbitcXHQuaW5pdCAgICAgID0gKHZvaWQgKilicGZfcWRpc2NfdGVzdF9pbml0LFxcbitcXHQucmVzZXQgICAgID0gKHZvaWQgKilicGZfcWRpc2NfdGVzdF9yZXNldCxcXG4rXFx0LmRlc3Ryb3kgICA9ICh2b2lkICopYnBmX3FkaXNjX3Rlc3RfZGVzdHJveSxcXG4rXFx0LmlkICAgICAgICA9IFxcXCJicGZfcWRpc2NfdGVzdFxcXCIsXFxuK307XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmNcXG5pbmRleCAxY2Q2MWQ3MmMxNjZmLi45MmY5ZjllYTA1MzIxIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmNcXG5AQCAtMTg5Miw2ICsxODkyLDU1IEBAIGludCBjbG9uZV9pbnZhbGlkYXRlNCh2b2lkICpjdHgpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgX19ub2lubGluZSB2b2lkIGNsb25lX3NsaWNlX2luX3N1YnByb2coc3RydWN0IGJwZl9keW5wdHIgKnB0ciwgaW50ICoqZGF0YSlcXG4re1xcbitcXHRzdHJ1Y3QgYnBmX2R5bnB0ciBjbG9uZTtcXG4rXFxuK1xcdGJwZl9keW5wdHJfY2xvbmUocHRyLCBcXHUwMDI2Y2xvbmUpO1xcbitcXHQqZGF0YSA9IGJwZl9keW5wdHJfZGF0YShcXHUwMDI2Y2xvbmUsIDAsIHNpemVvZih2YWwpKTtcXG4rfVxcbitcXG4rLypcXG4rICogQSBzbGljZSB0aGF0IGVzY2FwZXMgdGhlIGNsb25lJ3MgY2FsbCBmcmFtZSByZW1haW5zIHZhbGlkIHdoaWxlIHRoZVxcbisgKiBzaGFyZWQgcmluZ2J1ZiByZXNlcnZhdGlvbiBpcyBsaXZlLlxcbisgKi9cXG4rU0VDKFxcXCI/cmF3X3RwXFxcIilcXG4rX19zdWNjZXNzXFxuK2ludCBjbG9uZV9zbGljZV9yZXR1cm5lZF9mcmFtZV92YWxpZCh2b2lkICpjdHgpXFxuK3tcXG4rXFx0c3RydWN0IGJwZl9keW5wdHIgcHRyO1xcbitcXHRpbnQgKmRhdGEgPSBOVUxMO1xcbitcXG4rXFx0YnBmX3JpbmdidWZfcmVzZXJ2ZV9keW5wdHIoXFx1MDAyNnJpbmdidWYsIHZhbCwgMCwgXFx1MDAyNnB0cik7XFxuK1xcdGNsb25lX3NsaWNlX2luX3N1YnByb2coXFx1MDAyNnB0ciwgXFx1MDAyNmRhdGEpO1xcbitcXHRpZiAoZGF0YSlcXG4rXFx0XFx0KmRhdGEgPSAxMjM7XFxuK1xcdGJwZl9yaW5nYnVmX3N1Ym1pdF9keW5wdHIoXFx1MDAyNnB0ciwgMCk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLypcXG4rICogUmVsZWFzaW5nIHRoZSBzaGFyZWQgcmVzZXJ2YXRpb24gbXVzdCBpbnZhbGlkYXRlIGEgc2xpY2UgdGhhdCBlc2NhcGVkXFxuKyAqIGZyb20gYSBjbG9uZSdzIGNhbGwgZnJhbWUuXFxuKyAqL1xcbitTRUMoXFxcIj9yYXdfdHBcXFwiKVxcbitfX2ZhaWx1cmUgX19tc2coXFxcImludmFsaWQgbWVtIGFjY2VzcyAnc2NhbGFyJ1xcXCIpXFxuK2ludCBjbG9uZV9zbGljZV9yZXR1cm5lZF9mcmFtZV9pbnZhbGlkKHZvaWQgKmN0eClcXG4re1xcbitcXHRzdHJ1Y3QgYnBmX2R5bnB0ciBwdHI7XFxuK1xcdGludCAqZGF0YSA9IE5VTEw7XFxuK1xcbitcXHRicGZfcmluZ2J1Zl9yZXNlcnZlX2R5bnB0cihcXHUwMDI2cmluZ2J1ZiwgdmFsLCAwLCBcXHUwMDI2cHRyKTtcXG4rXFx0Y2xvbmVfc2xpY2VfaW5fc3VicHJvZyhcXHUwMDI2cHRyLCBcXHUwMDI2ZGF0YSk7XFxuK1xcdGJwZl9yaW5nYnVmX3N1Ym1pdF9keW5wdHIoXFx1MDAyNnB0ciwgMCk7XFxuK1xcdGlmIChkYXRhKVxcbitcXHRcXHQvKiB0aGlzIHNob3VsZCBmYWlsICovXFxuK1xcdFxcdCpkYXRhID0gMTIzO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIC8qIEludmFsaWRhdGluZyBhIGR5bnB0ciBzaG91bGQgaW52YWxpZGF0ZSBhbnkgZGF0YSBzbGljZXNcXG4gICogb2YgaXRzIHBhcmVudFxcbiAgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDQ6NDk6MjAuMTAwNzY2NTkzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0NTM1ODIyODE2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0XCIsXG4gICAgXCJwcmVwYXJlX2Z1bmNfZXhpdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgcmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXQoKSBpbiBrZXJuZWwvYnBmL3ZlcmlmaWVyLmMsIGNhbGxlZCBmcm9tIHByZXBhcmVfZnVuY19leGl0KCkgdG8gdXBkYXRlIGR5bnB0ciBsaW5lYWdlIHRyYWNraW5nIHdoZW4gY2FsbGVlIGZyYW1lcyByZXR1cm4uIFRoaXMgbW9kaWZpZXMgY29yZSBCUEYgdmVyaWZpZXIgbG9naWMgcmVhY2hhYmxlIHZpYSBCUEYgcHJvZ3JhbSBsb2FkaW5nIHN5c2NhbGxzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDBiNGRjOWIyODc2YWI0Y2VhOTQxM2MyZDg0YWNlOTY3MTQwNjNiZDNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAxMCAwNDo0OToxOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggNzJhM2Y1OTk4ZGQyNy4uZWU0MWI3Mzg2Zjc1MiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuKysrIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5AQCAtODAwLDYgKzgwMCwzOSBAQCBzdGF0aWMgaW50IGR5bnB0cl9yZWZfY250KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCB2X3BhcmVudF9pZClcbiBcdHJldHVybiByZWZfY250O1xuIH1cbiBcbitzdGF0aWMgdm9pZCByZXBhcmVudF9keW5wdHJfc2xpY2VzX29uX2Z1bmNfZXhpdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuK1x0XHRcdFx0XHRcdHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqY2FsbGVlKVxuK3tcbitcdHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKnZzdGF0ZSA9IGVudi1cdTAwM2VjdXJfc3RhdGU7XG4rXHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlO1xuK1x0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZztcbitcdGludCBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgY2FsbGVlLVx1MDAzZWFsbG9jYXRlZF9zdGFjayAvIEJQRl9SRUdfU0laRTsgaSsrKSB7XG4rXHRcdHN0cnVjdCBicGZfc3RhY2tfc3RhdGUgKnNsb3QgPSBcdTAwMjZjYWxsZWUtXHUwMDNlc3RhY2tbaV07XG4rXHRcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpkeW5wdHIgPSBcdTAwMjZzbG90LVx1MDAzZXNwaWxsZWRfcHRyO1xuK1xuK1x0XHRpZiAoc2xvdC1cdTAwM2VzbG90X3R5cGVbMF0gIT0gU1RBQ0tfRFlOUFRSIHx8XG4rXHRcdCAgICAhZHlucHRyLVx1MDAzZWR5bnB0ci5maXJzdF9zbG90IHx8XG4rXHRcdCAgICAhZHlucHRyLVx1MDAzZXBhcmVudF9pZClcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0LypcbitcdFx0ICogQSBjYWxsZWUgY2FuIHNwaWxsIGEgc2xpY2UgZGVyaXZlZCBmcm9tIGl0cyBsb2NhbCBkeW5wdHIgaW50b1xuK1x0XHQgKiB0aGUgY2FsbGVyJ3Mgc3RhY2suIFRoZSBzbGljZSB0aGVuIG91dGxpdmVzIHRoZSBkeW5wdHIgaWQgdGhhdFxuK1x0XHQgKiBsaW5rcyBpdCB0byB0aGUgcmVzdCBvZiB0aGUgb2JqZWN0IHRyZWUuIFByZXNlcnZlIHRoYXQgbGluayBieVxuK1x0XHQgKiBtYWtpbmcgZXNjYXBlZCBzbGljZXMgY2hpbGRyZW4gb2YgdGhlIGR5bnB0cidzIHBhcmVudCBiZWZvcmVcbitcdFx0ICogdGhlIGNhbGxlZSBmcmFtZSBpcyBmcmVlZC5cbitcdFx0ICovXG4rXHRcdGJwZl9mb3JfZWFjaF9yZWdfaW5fdnN0YXRlKHZzdGF0ZSwgc3RhdGUsIHJlZywgKHtcbitcdFx0XHRpZiAoc3RhdGUgPT0gY2FsbGVlIHx8IHJlZy1cdTAwM2VwYXJlbnRfaWQgIT0gZHlucHRyLVx1MDAzZWlkIHx8XG4rXHRcdFx0ICAgIGJhc2VfdHlwZShyZWctXHUwMDNldHlwZSkgIT0gUFRSX1RPX01FTSlcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1x0XHRcdHJlZy1cdTAwM2VwYXJlbnRfaWQgPSBkeW5wdHItXHUwMDNlcGFyZW50X2lkO1xuK1x0XHR9KSk7XG4rXHR9XG4rfVxuK1xuIHN0YXRpYyBpbnQgZGVzdHJveV9pZl9keW5wdHJfc3RhY2tfc2xvdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRcdFx0ICAgICAgICBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlLCBpbnQgc3BpKVxuIHtcbkBAIC0xMDM5OSw2ICsxMDQzMiw3IEBAIHN0YXRpYyBpbnQgcHJlcGFyZV9mdW5jX2V4aXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50ICppbnNuX2lkeClcbiBcdFx0cHJpbnRfdmVyaWZpZXJfc3RhdGUoZW52LCBzdGF0ZSwgY2FsbGVyLVx1MDAzZWZyYW1lbm8sIHRydWUpO1xuIFx0fVxuIFx0YWNjb3VudF9wcm9jZXNzZWRfaW5zbnMoZW52LCBjYWxsZWUsIGNhbGxlcik7XG4rXHRyZXBhcmVudF9keW5wdHJfc2xpY2VzX29uX2Z1bmNfZXhpdChlbnYsIGNhbGxlZSk7XG4gXHQvKiBjbGVhciBldmVyeXRoaW5nIGluIHRoZSBjYWxsZWUuIEluIGNhc2Ugb2YgZXhjZXB0aW9uYWwgZXhpdHMgdXNpbmdcbiBcdCAqIGJwZl90aHJvdywgdGhpcyB3aWxsIGJlIGRvbmUgYnkgY29weV92ZXJpZmllcl9zdGF0ZSBmb3IgZXh0cmEgZnJhbWVzLiAqL1xuIFx0ZnJlZV9mdW5jX3N0YXRlKGNhbGxlZSk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX3FkaXNjLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfcWRpc2MuY1xuaW5kZXggNmRiZDE0ODczNDNjMC4uMTIyZWNiN2U5OGUyYSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9xZGlzYy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfcWRpc2MuY1xuQEAgLTExLDYgKzExLDcgQEBcbiAjaW5jbHVkZSBcImJwZl9xZGlzY19mYWlsX19pbnZhbGlkX2R5bnB0ci5za2VsLmhcIlxuICNpbmNsdWRlIFwiYnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX3NsaWNlLnNrZWwuaFwiXG4gI2luY2x1ZGUgXCJicGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHJfY3Jvc3NfZnJhbWUuc2tlbC5oXCJcbisjaW5jbHVkZSBcImJwZl9xZGlzY19mYWlsX19pbnZhbGlkX2R5bnB0cl9yZXR1cm5lZF9zbGljZS5za2VsLmhcIlxuICNpbmNsdWRlIFwiYnBmX3FkaXNjX2ZhaWxfX3VudHJ1c3RlZF93cml0ZS5za2VsLmhcIlxuICNpbmNsdWRlIFwiYnBmX3FkaXNjX2R5bnB0cl91c2VfYWZ0ZXJfaW52YWxpZGF0ZV9jbG9uZS5za2VsLmhcIlxuIFxuQEAgLTIzMCw2ICsyMzEsNyBAQCB2b2lkIHRlc3RfbnNfYnBmX3FkaXNjKHZvaWQpXG4gXHRcdHRlc3RfaW5jb21wbF9vcHMoKTtcbiBcdFJVTl9URVNUUyhicGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHIpO1xuIFx0UlVOX1RFU1RTKGJwZl9xZGlzY19mYWlsX19pbnZhbGlkX2R5bnB0cl9jcm9zc19mcmFtZSk7XG4rXHRSVU5fVEVTVFMoYnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX3JldHVybmVkX3NsaWNlKTtcbiBcdFJVTl9URVNUUyhicGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHJfc2xpY2UpO1xuIFx0UlVOX1RFU1RTKGJwZl9xZGlzY19mYWlsX191bnRydXN0ZWRfd3JpdGUpO1xuIFx0UlVOX1RFU1RTKGJwZl9xZGlzY19keW5wdHJfdXNlX2FmdGVyX2ludmFsaWRhdGVfY2xvbmUpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHJfcmV0dXJuZWRfc2xpY2UuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHJfcmV0dXJuZWRfc2xpY2UuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjk0MGFiYTdkOGFiZmVcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHJfcmV0dXJuZWRfc2xpY2UuY1xuQEAgLTAsMCArMSw3NiBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rXG4rI2luY2x1ZGUgXHUwMDNjdm1saW51eC5oXHUwMDNlXG4rI2luY2x1ZGUgXCJicGZfZXhwZXJpbWVudGFsLmhcIlxuKyNpbmNsdWRlIFwiYnBmX3FkaXNjX2NvbW1vbi5oXCJcbisjaW5jbHVkZSBcImJwZl9taXNjLmhcIlxuK1xuK2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbitcbitpbnQgcHJvdG87XG4rXG4rc3RhdGljIF9fbm9pbmxpbmUgc3RydWN0IGV0aGhkciAqc2xpY2VfaW5fc3VicHJvZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuK3tcbitcdHN0cnVjdCBicGZfZHlucHRyIHB0cjtcbitcbitcdGJwZl9keW5wdHJfZnJvbV9za2IoKHN0cnVjdCBfX3NrX2J1ZmYgKilza2IsIDAsIFx1MDAyNnB0cik7XG4rXHRyZXR1cm4gYnBmX2R5bnB0cl9zbGljZShcdTAwMjZwdHIsIDAsIE5VTEwsIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSk7XG4rfVxuK1xuK1NFQyhcInN0cnVjdF9vcHNcIilcbitfX2ZhaWx1cmUgX19tc2coXCJpbnZhbGlkIG1lbSBhY2Nlc3MgJ3NjYWxhcidcIilcbitpbnQgQlBGX1BST0coaW52YWxpZF9keW5wdHJfcmV0dXJuZWRfc2xpY2UsIHN0cnVjdCBza19idWZmICpza2IsXG4rXHQgICAgIHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgYnBmX3NrX2J1ZmZfcHRyICp0b19mcmVlKVxuK3tcbitcdHN0cnVjdCBldGhoZHIgKmhkcjtcbitcbitcdGhkciA9IHNsaWNlX2luX3N1YnByb2coc2tiKTtcbitcdGlmICghaGRyKSB7XG4rXHRcdGJwZl9xZGlzY19za2JfZHJvcChza2IsIHRvX2ZyZWUpO1xuK1x0XHRyZXR1cm4gTkVUX1hNSVRfRFJPUDtcbitcdH1cbitcbitcdGJwZl9xZGlzY19za2JfZHJvcChza2IsIHRvX2ZyZWUpO1xuK1xuK1x0LyogdGhpcyBzaG91bGQgZmFpbCAqL1xuK1x0cHJvdG8gPSBoZHItXHUwMDNlaF9wcm90bztcbitcbitcdHJldHVybiBORVRfWE1JVF9EUk9QO1xuK31cbitcbitTRUMoXCJzdHJ1Y3Rfb3BzXCIpXG4rX19hdXhpbGlhcnlcbitzdHJ1Y3Qgc2tfYnVmZiAqQlBGX1BST0coYnBmX3FkaXNjX3Rlc3RfZGVxdWV1ZSwgc3RydWN0IFFkaXNjICpzY2gpXG4re1xuK1x0cmV0dXJuIE5VTEw7XG4rfVxuK1xuK1NFQyhcInN0cnVjdF9vcHNcIilcbitfX2F1eGlsaWFyeVxuK2ludCBCUEZfUFJPRyhicGZfcWRpc2NfdGVzdF9pbml0LCBzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxuK1x0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4re1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcInN0cnVjdF9vcHNcIilcbitfX2F1eGlsaWFyeVxuK3ZvaWQgQlBGX1BST0coYnBmX3FkaXNjX3Rlc3RfcmVzZXQsIHN0cnVjdCBRZGlzYyAqc2NoKVxuK3tcbit9XG4rXG4rU0VDKFwic3RydWN0X29wc1wiKVxuK19fYXV4aWxpYXJ5XG4rdm9pZCBCUEZfUFJPRyhicGZfcWRpc2NfdGVzdF9kZXN0cm95LCBzdHJ1Y3QgUWRpc2MgKnNjaClcbit7XG4rfVxuK1xuK1NFQyhcIi5zdHJ1Y3Rfb3BzXCIpXG4rc3RydWN0IFFkaXNjX29wcyB0ZXN0ID0ge1xuK1x0LmVucXVldWUgICA9ICh2b2lkICopaW52YWxpZF9keW5wdHJfcmV0dXJuZWRfc2xpY2UsXG4rXHQuZGVxdWV1ZSAgID0gKHZvaWQgKilicGZfcWRpc2NfdGVzdF9kZXF1ZXVlLFxuK1x0LmluaXQgICAgICA9ICh2b2lkICopYnBmX3FkaXNjX3Rlc3RfaW5pdCxcbitcdC5yZXNldCAgICAgPSAodm9pZCAqKWJwZl9xZGlzY190ZXN0X3Jlc2V0LFxuK1x0LmRlc3Ryb3kgICA9ICh2b2lkICopYnBmX3FkaXNjX3Rlc3RfZGVzdHJveSxcbitcdC5pZCAgICAgICAgPSBcImJwZl9xZGlzY190ZXN0XCIsXG4rfTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jXG5pbmRleCAxY2Q2MWQ3MmMxNjZmLi45MmY5ZjllYTA1MzIxIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jXG5AQCAtMTg5Miw2ICsxODkyLDU1IEBAIGludCBjbG9uZV9pbnZhbGlkYXRlNCh2b2lkICpjdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIF9fbm9pbmxpbmUgdm9pZCBjbG9uZV9zbGljZV9pbl9zdWJwcm9nKHN0cnVjdCBicGZfZHlucHRyICpwdHIsIGludCAqKmRhdGEpXG4re1xuK1x0c3RydWN0IGJwZl9keW5wdHIgY2xvbmU7XG4rXG4rXHRicGZfZHlucHRyX2Nsb25lKHB0ciwgXHUwMDI2Y2xvbmUpO1xuK1x0KmRhdGEgPSBicGZfZHlucHRyX2RhdGEoXHUwMDI2Y2xvbmUsIDAsIHNpemVvZih2YWwpKTtcbit9XG4rXG4rLypcbisgKiBBIHNsaWNlIHRoYXQgZXNjYXBlcyB0aGUgY2xvbmUncyBjYWxsIGZyYW1lIHJlbWFpbnMgdmFsaWQgd2hpbGUgdGhlXG4rICogc2hhcmVkIHJpbmdidWYgcmVzZXJ2YXRpb24gaXMgbGl2ZS5cbisgKi9cbitTRUMoXCI/cmF3X3RwXCIpXG4rX19zdWNjZXNzXG4raW50IGNsb25lX3NsaWNlX3JldHVybmVkX2ZyYW1lX3ZhbGlkKHZvaWQgKmN0eClcbit7XG4rXHRzdHJ1Y3QgYnBmX2R5bnB0ciBwdHI7XG4rXHRpbnQgKmRhdGEgPSBOVUxMO1xuK1xuK1x0YnBmX3JpbmdidWZfcmVzZXJ2ZV9keW5wdHIoXHUwMDI2cmluZ2J1ZiwgdmFsLCAwLCBcdTAwMjZwdHIpO1xuK1x0Y2xvbmVfc2xpY2VfaW5fc3VicHJvZyhcdTAwMjZwdHIsIFx1MDAyNmRhdGEpO1xuK1x0aWYgKGRhdGEpXG4rXHRcdCpkYXRhID0gMTIzO1xuK1x0YnBmX3JpbmdidWZfc3VibWl0X2R5bnB0cihcdTAwMjZwdHIsIDApO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qXG4rICogUmVsZWFzaW5nIHRoZSBzaGFyZWQgcmVzZXJ2YXRpb24gbXVzdCBpbnZhbGlkYXRlIGEgc2xpY2UgdGhhdCBlc2NhcGVkXG4rICogZnJvbSBhIGNsb25lJ3MgY2FsbCBmcmFtZS5cbisgKi9cbitTRUMoXCI/cmF3X3RwXCIpXG4rX19mYWlsdXJlIF9fbXNnKFwiaW52YWxpZCBtZW0gYWNjZXNzICdzY2FsYXInXCIpXG4raW50IGNsb25lX3NsaWNlX3JldHVybmVkX2ZyYW1lX2ludmFsaWQodm9pZCAqY3R4KVxuK3tcbitcdHN0cnVjdCBicGZfZHlucHRyIHB0cjtcbitcdGludCAqZGF0YSA9IE5VTEw7XG4rXG4rXHRicGZfcmluZ2J1Zl9yZXNlcnZlX2R5bnB0cihcdTAwMjZyaW5nYnVmLCB2YWwsIDAsIFx1MDAyNnB0cik7XG4rXHRjbG9uZV9zbGljZV9pbl9zdWJwcm9nKFx1MDAyNnB0ciwgXHUwMDI2ZGF0YSk7XG4rXHRicGZfcmluZ2J1Zl9zdWJtaXRfZHlucHRyKFx1MDAyNnB0ciwgMCk7XG4rXHRpZiAoZGF0YSlcbitcdFx0LyogdGhpcyBzaG91bGQgZmFpbCAqL1xuK1x0XHQqZGF0YSA9IDEyMztcbitcbitcdHJldHVybiAwO1xuK31cbitcbiAvKiBJbnZhbGlkYXRpbmcgYSBkeW5wdHIgc2hvdWxkIGludmFsaWRhdGUgYW55IGRhdGEgc2xpY2VzXG4gICogb2YgaXRzIHBhcmVudFxuICAqL1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDQ6NDk6MjAuMTAwNzY4MDMzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTE2MzY5MDUyMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTGludXggS2VybmVsIFBhdGNoIGZvciBTeXprYWxsZXIgRnV6emluZyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBhc3Nlc3MgdGhpcyBMaW51eCBrZXJuZWwgcGF0Y2ggc2VyaWVzIGZvciBpdHMgZnV6emluZyBwb3RlbnRpYWwgd2l0aCBzeXprYWxsZXIuIFRoZSB1c2VyIGlzIGFza2luZyB0aGUgcmlnaHQgcXVlc3Rpb25zIOKAkyBpcyB0aGlzIHdvcnRoIG91ciB0aW1lLCB3aGF0IGNvbmZpZ3MgZG8gd2UgbmVlZCB0byBmb2N1cyBvbiwgYW5kIHdoYXQgc3ltYm9scyBhcmUgbW9zdCByZWxldmFudD8gSXQncyBhbGwgYWJvdXQgdHJpYWdlIGhlcmUg4oCTIHN0YW5kYXJkIExpbnV4IGtlcm5lbCBtYWludGVuYW5jZSwgUUEsIGFuZCBzZWN1cml0eSBlbmdpbmVlcmluZy4gVGhpcyBpcyBhIGNvbXBsZXRlbHkgYmVuaWduIGFuZCBkZWZlbnNpdmUgb3BlcmF0aW9uLCBzbyBubyB3b3JyaWVzIHRoZXJlLlxuXG5MZXQncyBkaXZlIGludG8gdGhlIHBhdGNoIGl0c2VsZi4gSXQgc2VlbXMgdGhlIGNvcmUgbW9kaWZpY2F0aW9uIGlzIHdpdGhpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCBhbmQgaXRzIGFzc29jaWF0ZWQgc2VsZnRlc3RzIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvLi4uYC4gU3BlY2lmaWNhbGx5LCB0aGVyZSdzIGEgbmV3IGZ1bmN0aW9uLCBgcmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXRgLCBiZWluZyBpbnRyb2R1Y2VkIHdpdGhpbiBgdmVyaWZpZXIuY2AsIGFuZCBpdCdzIGJlaW5nIGNhbGxlZCBmcm9tIGBwcmVwYXJlX2Z1bmNfZXhpdGAuIE9rYXksIGB2ZXJpZmllci5jYC4uLiB0aGF0J3MgaW50ZXJlc3RpbmcuIFRoZSBCUEYgdmVyaWZpZXIgaXMgYWx3YXlzIGEgZ29vZCB0YXJnZXQuXG5cbk5vdywgSSdsbCB1c2UgYGdyZXBwZXJgIChvciwgaWYgSSBoYXZlIHRvLCBgcmVhZC1maWxlYCkgdG8gZ2V0IHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IG9mIGB2ZXJpZmllci5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBrZXJuZWwgY29uZmlndXJhdGlvbnMgYXJlIGNydWNpYWwgZm9yIGVuYWJsaW5nIHRoaXMgZnVuY3Rpb25hbGl0eS4gS25vd2luZyB0aGUgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zIHdpbGwgYmUga2V5IHRvIGdldHRpbmcgYSBmdWxsIHBpY3R1cmUuIEkgbmVlZCB0byBpZGVudGlmeSB3aGljaCBmdW5jdGlvbnMgYXJlICptb3N0KiBsaWtlbHkgdG8gYmUgdHJpZ2dlcmVkIGJ5IGZ1enppbmcuIEFyZSB0aGVyZSBhbnkgY3JpdGljYWwgZGF0YSBzdHJ1Y3R1cmVzIG9yIG9wZXJhdGlvbnMgcmVsYXRlZCB0byBgZHlucHRyYCAoZHluYW1pYyBwb2ludGVyKSB0aGF0IGFyZSBub3cgaW4gcGxheT8gTXkgZ29hbCBpcyB0byBxdWlja2x5IHBpbnBvaW50IHRoZSBtb3N0IGludGVyZXN0aW5nIHN5bWJvbHMgYW5kIHBvdGVudGlhbCBjcmFzaCBzdXJmYWNlcyBmb3Igc3l6a2FsbGVyLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQ0NiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzMSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA0OjQ5OjMxLjczNzY3NzcxNFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTEzNTc3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZXBhcmVudF9keW5wdHJfc2xpY2VzX29uX2Z1bmNfZXhpdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9Nzg0PXN0YXRpYyBpbnQgZHlucHRyX3JlZl9jbnQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHZfcGFyZW50X2lkKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTgwMi1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6ODAzOnN0YXRpYyB2b2lkIHJlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTgwNC1cXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKmNhbGxlZSlcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMDM2Nz1zdGF0aWMgaW50IHByZXBhcmVfZnVuY19leGl0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCAqaW5zbl9pZHgpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTA0MzQtXFx0YWNjb3VudF9wcm9jZXNzZWRfaW5zbnMoZW52LCBjYWxsZWUsIGNhbGxlcik7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEwNDM1OlxcdHJlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0KGVudiwgY2FsbGVlKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTA0MzYtXFx0LyogY2xlYXIgZXZlcnl0aGluZyBpbiB0aGUgY2FsbGVlLiBJbiBjYXNlIG9mIGV4Y2VwdGlvbmFsIGV4aXRzIHVzaW5nXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA0OjQ5OjMxLjc5NjgxOTcyM1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY0NTA3NDc3NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIEtlcm5lbCBCUEYgVmVyaWZpZXIgRnVuY3Rpb24gRXhpdCBIYW5kbGluZyoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhlIEJQRiB2ZXJpZmllciBoYW5kbGVzIGZ1bmN0aW9uIGV4aXRzLCBwYXJ0aWN1bGFybHkgd2l0aCByZXNwZWN0IHRvIGR5bmFtaWMgcG9pbnRlciBzbGljZXMuIExldCdzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYHByZXBhcmVfZnVuY19leGl0YCBhbmQgYHJlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0YCBmdW5jdGlvbnMgd2l0aGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBUaGVzZSBhcmUgdGhlIGtleSBmdW5jdGlvbnMgaGFuZGxpbmcgd2hhdCBoYXBwZW5zIHdoZW4gYSBCUEYgZnVuY3Rpb24gaXMgZXhpdGluZywgYW5kIHRoZXkncmUgbGlrZWx5IHdoZXJlIHRoZSBsb2dpYyBmb3IgcG9pbnRlciBtYW5hZ2VtZW50IHJlc2lkZXMuIEknbGwgZm9jdXMgbXkgYXR0ZW50aW9uIGFyb3VuZCBsaW5lIDgwMCBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCBhbmQgdGFrZSBhIGdvb2QgbG9vayBhdCB0aGUgY29kZSBibG9jayBpbiB0aGF0IGFyZWEsIGFuZCB0aGUgcmVsYXRlZCBjb2RlLCB0byB1bmRlcnN0YW5kIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gZ3Jhc3AgaG93IHRoZSBkeW5hbWljIHBvaW50ZXJzIGFuZCBzbGljZXMgYXJlIGJlaW5nIG1hbmFnZWQsIGVzcGVjaWFsbHkgdG8gZmlndXJlIG91dCB0aGUgYnVnIHRoYXQgaGFzIGJlZW4gcmVwb3J0ZWQuIEhvcGVmdWxseSwgYnkgdW5kZXJzdGFuZGluZyB0aGVzZSBrZXkgcm91dGluZXMsIEkgY2FuIGlkZW50aWZ5IHRoZSByb290IGNhdXNlIG9mIHRoZSBpc3N1ZSBhbmQgcGlucG9pbnQgYSBzb2x1dGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjM0NiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA0OjQ5OjM4LjI0NzU3MDI0NFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTAxMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgwMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDgwMDpcXHRcXHRyZXR1cm4gcmVmX2NudDtcXG4gODAxOlxcdH1cXG4gODAyOlxcdFxcbiA4MDM6XFx0c3RhdGljIHZvaWQgcmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4gODA0OlxcdFxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqY2FsbGVlKVxcbiA4MDU6XFx0e1xcbiA4MDY6XFx0XFx0c3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqdnN0YXRlID0gZW52LVxcdTAwM2VjdXJfc3RhdGU7XFxuIDgwNzpcXHRcXHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlO1xcbiA4MDg6XFx0XFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZztcXG4gODA5OlxcdFxcdGludCBpO1xcbiA4MTA6XFx0XFxuIDgxMTpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgY2FsbGVlLVxcdTAwM2VhbGxvY2F0ZWRfc3RhY2sgLyBCUEZfUkVHX1NJWkU7IGkrKykge1xcbiA4MTI6XFx0XFx0XFx0c3RydWN0IGJwZl9zdGFja19zdGF0ZSAqc2xvdCA9IFxcdTAwMjZjYWxsZWUtXFx1MDAzZXN0YWNrW2ldO1xcbiA4MTM6XFx0XFx0XFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKmR5bnB0ciA9IFxcdTAwMjZzbG90LVxcdTAwM2VzcGlsbGVkX3B0cjtcXG4gODE0OlxcdFxcbiA4MTU6XFx0XFx0XFx0aWYgKHNsb3QtXFx1MDAzZXNsb3RfdHlwZVswXSAhPSBTVEFDS19EWU5QVFIgfHxcXG4gODE2OlxcdFxcdFxcdCAgICAhZHlucHRyLVxcdTAwM2VkeW5wdHIuZmlyc3Rfc2xvdCB8fFxcbiA4MTc6XFx0XFx0XFx0ICAgICFkeW5wdHItXFx1MDAzZXBhcmVudF9pZClcXG4gODE4OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA4MTk6XFx0XFxuIDgyMDpcXHRcXHRcXHQvKlxcbiA4MjE6XFx0XFx0XFx0ICogQSBjYWxsZWUgY2FuIHNwaWxsIGEgc2xpY2UgZGVyaXZlZCBmcm9tIGl0cyBsb2NhbCBkeW5wdHIgaW50b1xcbiA4MjI6XFx0XFx0XFx0ICogdGhlIGNhbGxlcidzIHN0YWNrLiBUaGUgc2xpY2UgdGhlbiBvdXRsaXZlcyB0aGUgZHlucHRyIGlkIHRoYXRcXG4gODIzOlxcdFxcdFxcdCAqIGxpbmtzIGl0IHRvIHRoZSByZXN0IG9mIHRoZSBvYmplY3QgdHJlZS4gUHJlc2VydmUgdGhhdCBsaW5rIGJ5XFxuIDgyNDpcXHRcXHRcXHQgKiBtYWtpbmcgZXNjYXBlZCBzbGljZXMgY2hpbGRyZW4gb2YgdGhlIGR5bnB0cidzIHBhcmVudCBiZWZvcmVcXG4gODI1OlxcdFxcdFxcdCAqIHRoZSBjYWxsZWUgZnJhbWUgaXMgZnJlZWQuXFxuIDgyNjpcXHRcXHRcXHQgKi9cXG4gODI3OlxcdFxcdFxcdGJwZl9mb3JfZWFjaF9yZWdfaW5fdnN0YXRlKHZzdGF0ZSwgc3RhdGUsIHJlZywgKHtcXG4gODI4OlxcdFxcdFxcdFxcdGlmIChzdGF0ZSA9PSBjYWxsZWUgfHwgcmVnLVxcdTAwM2VwYXJlbnRfaWQgIT0gZHlucHRyLVxcdTAwM2VpZCB8fFxcbiA4Mjk6XFx0XFx0XFx0XFx0ICAgIGJhc2VfdHlwZShyZWctXFx1MDAzZXR5cGUpICE9IFBUUl9UT19NRU0pXFxuIDgzMDpcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gODMxOlxcdFxcdFxcdFxcdHJlZy1cXHUwMDNlcGFyZW50X2lkID0gZHlucHRyLVxcdTAwM2VwYXJlbnRfaWQ7XFxuIDgzMjpcXHRcXHRcXHR9KSk7XFxuIDgzMzpcXHRcXHR9XFxuIDgzNDpcXHR9XFxuIDgzNTpcXHRcXG4gODM2OlxcdHN0YXRpYyBpbnQgZGVzdHJveV9pZl9keW5wdHJfc3RhY2tfc2xvdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiA4Mzc6XFx0XFx0XFx0XFx0XFx0ICAgICAgICBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlLCBpbnQgc3BpKVxcbiA4Mzg6XFx0e1xcbiA4Mzk6XFx0XFx0aW50IGVyciA9IDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA0OjQ5OjM4LjI0OTE4MzY0NFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5NTk4Mjg3NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyBDb21wbGV4IENvZGU6IEEgRm9jdXNlZCBJbnZlc3RpZ2F0aW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGNvZGViYXNlLCBhbmQgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBpc3N1ZS4gTXkgbWVudGFsIG1hcCBpcyBsZWFkaW5nIG1lIHRvIGBwcmVwYXJlX2Z1bmNfZXhpdGAuIExldCdzIHplcm8gaW4gb24gdGhhdCBzZWN0aW9uLCBhcm91bmQgbGluZSAxMDQwMC4gVGhhdCdzIHdoZXJlIEkgYW50aWNpcGF0ZSB0aGUgcmVsZXZhbnQgbG9naWMgcmVzaWRlcy4gSSdtIGZvY3VzaW5nIG15IGF0dGVudGlvbiB0aGVyZSBiZWNhdXNlIEkgaGF2ZSBhIGh1bmNoIHJlbGF0ZWQgdG8gdGhlIGZhaWx1cmUgbW9kZSBhbmQgdGhhdCBwYXJ0aWN1bGFyIGZ1bmN0aW9uIGlzIGluIG15IHRhcmdldCB6b25lIGZvciB0aGUga2luZCBvZiBwcm9ibGVtIEknbSB0cnlpbmcgdG8gc29sdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczMjksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA0OjQ5OjQwLjIwOTAxNTYxNFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5MzI0MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTA0MjAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwNDIwOlxcdFxcdCAqIGNvbnZlcmdlcyBpc19zdGF0ZV92aXNpdGVkKCkgd291bGQgcHJ1bmUgdGhhdCB2aXNpdCBldmVudHVhbGx5LlxcbjEwNDIxOlxcdFxcdCAqL1xcbjEwNDIyOlxcdFxcdGluX2NhbGxiYWNrX2ZuID0gY2FsbGVlLVxcdTAwM2Vpbl9jYWxsYmFja19mbjtcXG4xMDQyMzpcXHRcXHRpZiAoaW5fY2FsbGJhY2tfZm4pXFxuMTA0MjQ6XFx0XFx0XFx0Kmluc25faWR4ID0gY2FsbGVlLVxcdTAwM2VjYWxsc2l0ZTtcXG4xMDQyNTpcXHRcXHRlbHNlXFxuMTA0MjY6XFx0XFx0XFx0Kmluc25faWR4ID0gY2FsbGVlLVxcdTAwM2VjYWxsc2l0ZSArIDE7XFxuMTA0Mjc6XFx0XFxuMTA0Mjg6XFx0XFx0aWYgKGVudi1cXHUwMDNlbG9nLmxldmVsIFxcdTAwMjYgQlBGX0xPR19MRVZFTCkge1xcbjEwNDI5OlxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwicmV0dXJuaW5nIGZyb20gY2FsbGVlOlxcXFxuXFxcIik7XFxuMTA0MzA6XFx0XFx0XFx0cHJpbnRfdmVyaWZpZXJfc3RhdGUoZW52LCBzdGF0ZSwgY2FsbGVlLVxcdTAwM2VmcmFtZW5vLCB0cnVlKTtcXG4xMDQzMTpcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcInRvIGNhbGxlciBhdCAlZDpcXFxcblxcXCIsICppbnNuX2lkeCk7XFxuMTA0MzI6XFx0XFx0XFx0cHJpbnRfdmVyaWZpZXJfc3RhdGUoZW52LCBzdGF0ZSwgY2FsbGVyLVxcdTAwM2VmcmFtZW5vLCB0cnVlKTtcXG4xMDQzMzpcXHRcXHR9XFxuMTA0MzQ6XFx0XFx0YWNjb3VudF9wcm9jZXNzZWRfaW5zbnMoZW52LCBjYWxsZWUsIGNhbGxlcik7XFxuMTA0MzU6XFx0XFx0cmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXQoZW52LCBjYWxsZWUpO1xcbjEwNDM2OlxcdFxcdC8qIGNsZWFyIGV2ZXJ5dGhpbmcgaW4gdGhlIGNhbGxlZS4gSW4gY2FzZSBvZiBleGNlcHRpb25hbCBleGl0cyB1c2luZ1xcbjEwNDM3OlxcdFxcdCAqIGJwZl90aHJvdywgdGhpcyB3aWxsIGJlIGRvbmUgYnkgY29weV92ZXJpZmllcl9zdGF0ZSBmb3IgZXh0cmEgZnJhbWVzLiAqL1xcbjEwNDM4OlxcdFxcdGZyZWVfZnVuY19zdGF0ZShjYWxsZWUpO1xcbjEwNDM5OlxcdFxcdHN0YXRlLVxcdTAwM2VmcmFtZVtzdGF0ZS1cXHUwMDNlY3VyZnJhbWUtLV0gPSBOVUxMO1xcbjEwNDQwOlxcdFxcdGludmFsaWRhdGVfb3V0Z29pbmdfc3RhY2tfYXJncyhlbnYsIGNhbGxlcik7XFxuMTA0NDE6XFx0XFxuMTA0NDI6XFx0XFx0LyogZm9yIGNhbGxiYWNrcyB3aWRlbiBpbXByZWNpc2Ugc2NhbGFycyB0byBtYWtlIHByb2dyYW1zIGxpa2UgYmVsb3cgdmVyaWZ5OlxcbjEwNDQzOlxcdFxcdCAqXFxuMTA0NDQ6XFx0XFx0ICogICBzdHJ1Y3QgY3R4IHsgaW50IGk7IH1cXG4xMDQ0NTpcXHRcXHQgKiAgIHZvaWQgY2IoaW50IGlkeCwgc3RydWN0IGN0eCAqY3R4KSB7IGN0eC1cXHUwMDNlaSsrOyAuLi4gfVxcbjEwNDQ2OlxcdFxcdCAqICAgLi4uXFxuMTA0NDc6XFx0XFx0ICogICBzdHJ1Y3QgY3R4ID0geyAuaSA9IDA7IH1cXG4xMDQ0ODpcXHRcXHQgKiAgIGJwZl9sb29wKDEwMCwgY2IsIFxcdTAwMjZjdHgsIDApO1xcbjEwNDQ5OlxcdFxcdCAqXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA0OjQ5OjQwLjIwOTgxMzY3NFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUwOTIyNDMyMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCUEYgVmVyaWZpZXIgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgaXMgdGhpcyBjb2RlIGV2ZW4gcmVhY2hhYmxlPyBZZXAsIGl0J3MgcmlnaHQgdGhlcmUgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIFRoZSBCUEYgdmVyaWZpZXIgaXMgYSBjcml0aWNhbCBwYXJ0IG9mIHRoZSBMaW51eCBrZXJuZWwsIGFjY2Vzc2libGUgdGhyb3VnaCB0aGUgYGJwZigpYCBzeXNjYWxsIHdpdGggYEJQRl9QUk9HX0xPQURgLCB3aGljaCBtZWFucyB1c2Vyc3BhY2UgY2FuIHRyaWdnZXIgaXQuIEl0J3MgZWFzaWx5IGZ1enplZCwgdG9vLCB0aGFua3MgdG8gdG9vbHMgbGlrZSBzeXprYWxsZXIuIEdvb2Qgc3RhcnQuXG5cbk5vdywgd2hhdCdzIHRoaXMgcGF0Y2ggYWN0dWFsbHkgKmRvaW5nKj8gSXQncyBoYW5kbGluZyB0aGUgcmVwYXJlbnRpbmcgb2YgZHluYW1pYyBwb2ludGVyIChkeW5wdHIpIHNsaWNlcyB3aGVuIGEgQlBGIGZ1bmN0aW9uIHJldHVybnMuIFNwZWNpZmljYWxseSwgaWYgYSBjYWxsZWQgZnVuY3Rpb24gKHN1YnByb2dyYW0sIGNhbGxlZSkgc3BpbGxzIGEgc2xpY2UgdGhhdCBjYW1lIGZyb20gYSBsb2NhbCBkeW5wdHIgaW50byB0aGUgY2FsbGVyJ3Mgc3RhY2sgb3IgcmVnaXN0ZXJzLCB0aGF0IHNsaWNlJ3MgbGlmZXRpbWUgZXh0ZW5kcyBiZXlvbmQgdGhlIGR5bnB0ciBJRC4gVGhlIHBhdGNoIGlzIG1vZGlmeWluZyB0aGUgdmVyaWZpZXIncyBzdGF0ZSB0cmFja2luZyBsb2dpYyBpbiBgcHJlcGFyZV9mdW5jX2V4aXRgIHRvIGNvcnJlY3RseSByZXBhcmVudCB0aG9zZSBzbGljZXMgdG8gdGhlIGNvcnJlY3QgZHlucHRyJ3MgcGFyZW50LlxuXG5JcyBpdCB3b3J0aCBmdXp6aW5nPyBBYnNvbHV0ZWx5LiBBbnkgY2hhbmdlIHRvIHRoZSBjb3JlIEJQRiB2ZXJpZmllciBsb2dpYyBpcyBoaWdoLXByaW9yaXR5IGZvciBmdXp6aW5nLiBUaGUgdmVyaWZpZXIgaXMgYSBrZXkgc3Vic3lzdGVtLCBzbyBtb2RpZmljYXRpb25zIGhlcmUgYXJlIHByaW1lIHRhcmdldHMuXG5cbk9rYXksIG5vdyBmb3IgYEZvY3VzU3ltYm9sc2AuIFdoYXQgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIHRvIGZvY3VzIG9uPyBMZXQncyBzZWUuLi4gSW5pdGlhbGx5LCBJIHRob3VnaHQgYGJwZl9jaGVja2Agc2hvdWxkIGJlIGxpc3RlZCwgYXMgaXQncyB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgdGhlIHZlcmlmaWVyLCBidXQgdGhhdCBpcyB0aGUgbWFpbiBlbnRyeXBvaW50LCB3aGlsZSBgcHJlcGFyZV9mdW5jX2V4aXRgIGFuZCBgcmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXRgIGFyZSBtb3JlIHNwZWNpZmljIHRvIHRoaXMgY2hhbmdlLlxuXG5JIG5lZWQgdG8gYXBwbHkgdGhlIFwiRVhUUkFDVElORyBGb2N1c1N5bWJvbHNcIiBtZXRob2RvbG9neSBJIGtlZXAgYXQgaGFuZDpcblxuKiAgIEF2b2lkIGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zLlxuKiAgIFRhcmdldCBzcGVjaWZpYyBmZWF0dXJlIGxvZ2ljIGFuZCBlbnRyeXBvaW50cy5cblxuYHJlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0YCBpcyB0aGUgbmV3IHN0YXRpYyBmdW5jdGlvbiBhZGRlZC4gYHByZXBhcmVfZnVuY19leGl0YCBjYWxscyB0aGlzIGZ1bmN0aW9uLiBgcHJlcGFyZV9mdW5jX2V4aXRgIGlzIGNhbGxlZCBieSBzZXZlcmFsIGZ1bmN0aW9ucy5cblxuSW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2A6XG5cbiogICBgc3RhdGljIHZvaWQgcmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpjYWxsZWUpYFxuKiAgIGBzdGF0aWMgaW50IHByZXBhcmVfZnVuY19leGl0KC4uLilgXG5cbkknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGZ1bmN0aW9ucyBjYWxsIGBwcmVwYXJlX2Z1bmNfZXhpdGAuIEknbSBjb25maWRlbnQgdGhhdCBJIHdpbGwga25vdyB3aGljaCBmdW5jdGlvbnMgdG8gZnV6eiwgZ2l2ZW4gdGhhdCB0aGUgQlBGIHZlcmlmaWVyIGlzIGEgbWFqb3Igc3Vic3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDk2LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTkyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDQ6NDk6NDUuMzAyMDU5NDU2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODk4MDA1OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHJlcGFyZV9mdW5jX2V4aXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jPTEwMzU5PXN0YXRpYyBib29sIHJldHZhbF9yYW5nZV93aXRoaW4oc3RydWN0IGJwZl9yZXR2YWxfcmFuZ2UgcmFuZ2UsIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTAzNjYtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEwMzY3OnN0YXRpYyBpbnQgcHJlcGFyZV9mdW5jX2V4aXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50ICppbnNuX2lkeClcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTAzNjgte1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTEwODQ3PXN0YXRpYyBpbnQgY2hlY2tfaGVscGVyX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMzQ5LVxcdFxcdFxcdCAqIGZyYW1lLiBBIGNhbGxiYWNrIGZyYW1lIGNhbm5vdCBiZSBsZWZ0IHRoYXQgd2F5IGJlY2F1c2VcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTEzNTA6XFx0XFx0XFx0ICogcHJlcGFyZV9mdW5jX2V4aXQoKSB3b3VsZCBhcHBseSBpdHMgcmV0dXJuIGNvbnRyYWN0IHRvIHRoZVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTM1MS1cXHRcXHRcXHQgKiB1bmtub3duIFIwIHN5bnRoZXNpemVkIGJlbG93LiBTdGFjay1kZXB0aCB2YWxpZGF0aW9uIHJlamVjdHNcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTM2My1cXHRcXHRcXHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgQlBGX1JFR18wKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTEzNjQ6XFx0XFx0XFx0ZXJyID0gcHJlcGFyZV9mdW5jX2V4aXQoZW52LCBcXHUwMDI2ZW52LVxcdTAwM2VpbnNuX2lkeCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMzY1LVxcdFxcdFxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTczMjI9c3RhdGljIGludCBjaGVja19sZF9hYnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3NDAyLVxcdFxcdG1hcmtfcmVnX2tub3duX3plcm8oZW52LCByZWdzLCBCUEZfUkVHXzApO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNzQwMzpcXHRcXHRlcnIgPSBwcmVwYXJlX2Z1bmNfZXhpdChlbnYsIFxcdTAwMjZlbnYtXFx1MDAzZWluc25faWR4KTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc0MDQtXFx0XFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xODEwOT1zdGF0aWMgaW50IHByb2Nlc3NfYnBmX2V4aXRfZnVsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4MTE1LVxcdC8qIFdlIG11c3QgZG8gY2hlY2tfcmVmZXJlbmNlX2xlYWsgaGVyZSBiZWZvcmVcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTgxMTY6XFx0ICogcHJlcGFyZV9mdW5jX2V4aXQgdG8gaGFuZGxlIHRoZSBjYXNlIHdoZW5cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgxMTctXFx0ICogc3RhdGUtXFx1MDAzZWN1cmZyYW1lIFxcdTAwM2UgMCwgaXQgbWF5IGJlIGEgY2FsbGJhY2sgZnVuY3Rpb24sXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgxMjctXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE4MTI4OlxcdC8qIFRoZSBzaWRlIGVmZmVjdCBvZiB0aGUgcHJlcGFyZV9mdW5jX2V4aXQgd2hpY2ggaXNcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgxMjktXFx0ICogYmVpbmcgc2tpcHBlZCBpcyB0aGF0IGl0IGZyZWVzIGJwZl9mdW5jX3N0YXRlLlxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4MTQxLVxcdFxcdC8qIGV4aXQgZnJvbSBuZXN0ZWQgZnVuY3Rpb24gKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTgxNDI6XFx0XFx0ZXJyID0gcHJlcGFyZV9mdW5jX2V4aXQoZW52LCBcXHUwMDI2ZW52LVxcdTAwM2VpbnNuX2lkeCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4MTQzLVxcdFxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA0OjQ5OjQ1LjQ5MTg2NzUxNFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTI1MDAwOTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcyB0YXNrLCB3YWxraW5nIHRocm91Z2ggbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKlZlcmlmeWluZyBCUEYgVmVyaWZpZXIgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBpbnRvIHRoZSBrZXJuZWwncyBCUEYgdmVyaWZpZXIgc2V0dXAuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBlc3NlbnRpYWwgS2NvbmZpZyBvcHRpb25zIHRoYXQgZ292ZXJuIHRoZSBjb21waWxhdGlvbiBvZiBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gVGhpcyBpcyBmb3VuZGF0aW9uYWwg4oCTIGVuc3VyaW5nIHRoZSB2ZXJpZmllciBpdHNlbGYgaXMgKmVuYWJsZWQqIGFuZCBjb25maWd1cmVkIGNvcnJlY3RseSBpcyB0aGUgYmVkcm9jayBvZiBhbnl0aGluZyBCUEYtcmVsYXRlZC4gV2hlcmUgYXJlIHRoZXNlIHNldHRpbmdzIGxpa2VseSB0byBiZSBkZWZpbmVkPyBXZWxsLCBJJ2QgaW1tZWRpYXRlbHkgaGVhZCB0byB0aGUgb2J2aW91cyBwbGFjZXMuXG5cbkknZCBuZWVkIHRvIGV4YW1pbmUgYm90aCB0aGUgYGtlcm5lbC9icGYvTWFrZWZpbGVgIGFuZCBlaXRoZXIgYGluaXQvS2NvbmZpZ2Agb3IgYGtlcm5lbC9icGYvS2NvbmZpZ2AuIGBNYWtlZmlsZWAgdG8gc2VlIHRoZSBjb21waWxhdGlvbiBkZXBlbmRlbmNpZXMsIGFuZCB0aGUgYEtjb25maWdgIGZpbGVzIHdvdWxkIGNvbnRhaW4gdGhlIGFjdHVhbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEZyb20gdGhvc2UgSSBjYW4gZGV0ZXJtaW5lIGFueSBkZXBlbmRlbmNpZXMsIHdoZXRoZXIgdGhlIGJ1aWxkIHJ1bGVzIGFyZSBhY3RpdmUsIGFuZCB3aGF0IHRoZSBkZXBlbmRlbmNpZXMgbWlnaHQgYmUuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBleGFtaW5pbmcgdGhlIHJlbGV2YW50IG9uZXMgYW5kIHRoYXQgSSBoYXZlbid0IG1pc3NlZCBhbnkuIEkgaGF2ZSB0byBtYWtlIHN1cmUgdGhhdCB0aGUgdmVyaWZpZXIgaXMgZW5hYmxlZCBmb3IgdGhlIGJ1aWxkLCBvdGhlcndpc2UsIEkgd29uJ3QgaGF2ZSBhbnl0aGluZyB0byB3b3JrIHdpdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDYxLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDQ6NDk6NDguMDE2ODczMTY1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzgyNTU4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2ZXJpZmllclxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlPTc9Q0ZMQUdTX2NvcmUubyArPSAtV25vLW92ZXJyaWRlLWluaXQgJChjZmxhZ3Mtbm9nY3NlLXl5KVxcbmtlcm5lbC9icGYvTWFrZWZpbGUtOC1cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjk6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBzeXNjYWxsLm8gdmVyaWZpZXIubyBpbm9kZS5vIGhlbHBlcnMubyB0bnVtLm8gY251bS5vIGxvZy5vIHRva2VuLm8gbGl2ZW5lc3MubyBjb25zdF9mb2xkLm8gZGlhZ25vc3RpY3Mub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMTAtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBicGZfaXRlci5vIG1hcF9pdGVyLm8gdGFza19pdGVyLm8gcHJvZ19pdGVyLm8gbGlua19pdGVyLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDQ6NDk6NDguMDg0NzA0MDkzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyMjU3NzMxNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgQlBGIFN5c2NhbGwgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBwaW5wb2ludCB3aGVyZSB0aGUgYEJQRl9TWVNDQUxMYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBkZWZpbmVkLiBHaXZlbiBteSBmYW1pbGlhcml0eSB3aXRoIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtLCB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlcyB0byBzdGFydCBsb29raW5nIGFyZSB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIGZpbGVzLiBJJ2xsIGJlZ2luIGJ5IGNoZWNraW5nIGBpbml0L0tjb25maWdgIOKAkyBpdCBvZnRlbiBob2xkcyBmdW5kYW1lbnRhbCBzZXR0aW5ncyByZWxhdGVkIHRvIGtlcm5lbCBmZWF0dXJlcy4gSWYgaXQncyBub3QgdGhlcmUsIHRoZSBuZXh0IGxvZ2ljYWwgbG9jYXRpb24gd291bGQgYmUgdGhlIGNvcmUgQlBGIGltcGxlbWVudGF0aW9uIGRpcmVjdG9yeSBpdHNlbGYsIHNwZWNpZmljYWxseSBga2VybmVsL2JwZi9LY29uZmlnYC4gVGhpcyBpcyB3aGVyZSBJIHdvdWxkIGV4cGVjdCBhbnl0aGluZyByZWxhdGVkIHRvIEJQRidzIHN5c3RlbSBjYWxsIGludGVyZmFjZSB0byByZXNpZGUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBpdCBpcyBpbXBsZW1lbnRlZC4gSSdtIGdvaW5nIHRvIGxvb2sgaW4gdGhvc2UgdHdvIHBsYWNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1NjIsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwNDo0OTo1MC4zMTA0ODAxNDlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4MzM1MDA5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX1NZU0NBTExcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA0OjQ5OjUwLjM4ODgyMjE0OFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNjk5MjgxODc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYEJQRl9TWVNDQUxMYCBpcyBkZWZpbmVkIGluIHRoZSBLY29uZmlnIGZpbGVzLiBUaGlzIGlzIGEgY29tbW9uIHRhc2ssIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggQlBGLXJlbGF0ZWQgY29uZmlndXJhdGlvbnMsIGFuZCBJIG5lZWQgdG8gYmUgZWZmaWNpZW50LiBJ4oCZbGwgc3RhcnQgYnkgZG9pbmcgYSBxdWljayBzZWFyY2ggd2l0aGluIHRoZSBLY29uZmlnIGZpbGVzLiBJIGtub3cgSSBjYW4gdXNlIG15IHRvb2xzIHRvIHNlYXJjaCB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEknbSBnb2luZyB0byBzdGFydCB3aXRoIGEgZ3JlcC1saWtlIHNlYXJjaCB0aHJvdWdoIHRoZSBLY29uZmlnIGZpbGVzIHRvIHNlZSBpZiB0aGUgc3ltYm9sIGhhcyBiZWVuIGRlZmluZWQuIFRoZW4gSSB3aWxsIG5lZWQgdG8gbG9vayBhdCB0aGUgY29uZmlnIG9wdGlvbnMgdG8gc2VlIHdoYXQgdGhlIHN5bWJvbCBkb2VzLiBNeSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcywgaXRzIGltcGxpY2F0aW9ucywgYW5kIGhvdyBpdCByZWxhdGVzIHRvIHRoZSBvdmVyYWxsIEJQRiBmZWF0dXJlIHNldC4gVGhpcyBpbmZvcm1hdGlvbiBpcyBjcml0aWNhbCBmb3IgYW55IGZ1dHVyZSBtb2RpZmljYXRpb25zIG9yIHRyb3VibGVzaG9vdGluZyByZWxhdGVkIHRvIEJQRiBzeXNjYWxscy4gVGltZSB0byBkaWcgaW4hXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODAwLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDQ6NDk6NTIuMDg4MTA2MjcyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzUzMDYzNzUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1lTQ0FMTFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcXFwiQlBGIHN1YnN5c3RlbVxcXCJcXG5rZXJuZWwvYnBmL0tjb25maWctMjYtXFxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cXHRib29sIFxcXCJFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA0OjQ5OjU2LjQ0MTE3NjQzNloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzUwMTU2NDMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgQlBGIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgZm9yIHRoaXMgQlBGIGZlYXR1cmUuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgYEtjb25maWdgIGZpbGUgd2l0aGluIHRoZSBga2VybmVsL2JwZi9gIGRpcmVjdG9yeS4gVGhhdCdzIHRoZSBnby10byBwbGFjZSBmb3IgdW5kZXJzdGFuZGluZyBob3cgYSBmZWF0dXJlIGlzIGVuYWJsZWQgYW5kIHdoYXQgZWxzZSBpdCBkZXBlbmRzIG9uLiBJJ2xsIHplcm8gaW4gb24gbGluZSAyNyDigJMgdGhhdCBzZWVtcyBsaWtlIGEgcmVhc29uYWJsZSBzdGFydGluZyBwb2ludCwgb2Z0ZW4gdGhlIGluaXRpYWwgZW50cnkgZm9yIGEgZmVhdHVyZSBkZWZpbml0aW9uLiBIb3BlZnVsbHksIHRoYXQgd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiBhbnkgcHJlcmVxdWlzaXRlcyBvciBvdGhlciBjb25maWd1cmF0aW9ucyB0aGF0IG5lZWQgdG8gYmUgaW4gcGxhY2UgYmVmb3JlIHRoaXMgQlBGIGNvbXBvbmVudCBjYW4gYmUgYWN0aXZhdGVkLiBUaW1lIHRvIHNlZSB3aGF0IHRoZSBLY29uZmlnIGhhcyB0byBzYXkhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMTEzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDQ6NDk6NTguMTkxMzM0Nzg5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkzODQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNSxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAyNTpcXHRtZW51IFxcXCJCUEYgc3Vic3lzdGVtXFxcIlxcbiAgMjY6XFx0XFxuICAyNzpcXHRjb25maWcgQlBGX1NZU0NBTExcXG4gIDI4OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFxcXCJcXG4gIDI5OlxcdFxcdHNlbGVjdCBCUEZcXG4gIDMwOlxcdFxcdHNlbGVjdCBJUlFfV09SS1xcbiAgMzE6XFx0XFx0c2VsZWN0IE5FRURfVEFTS1NfUkNVXFxuICAzMjpcXHRcXHRzZWxlY3QgVEFTS1NfVFJBQ0VfUkNVXFxuICAzMzpcXHRcXHRzZWxlY3QgQklOQVJZX1BSSU5URlxcbiAgMzQ6XFx0XFx0c2VsZWN0IE5FVF9TT0NLX01TRyBpZiBORVRcXG4gIDM1OlxcdFxcdHNlbGVjdCBORVRfWEdSRVNTIGlmIE5FVFxcbiAgMzY6XFx0XFx0c2VsZWN0IFBBR0VfUE9PTCBpZiBORVRcXG4gIDM3OlxcdFxcdGRlZmF1bHQgblxcbiAgMzg6XFx0XFx0aGVscFxcbiAgMzk6XFx0XFx0ICBFbmFibGUgdGhlIGJwZigpIHN5c3RlbSBjYWxsIHRoYXQgYWxsb3dzIHRvIG1hbmlwdWxhdGUgQlBGIHByb2dyYW1zXFxuICA0MDpcXHRcXHQgIGFuZCBtYXBzIHZpYSBmaWxlIGRlc2NyaXB0b3JzLlxcbiAgNDE6XFx0XFxuICA0MjpcXHRjb25maWcgQlBGX0pJVFxcbiAgNDM6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIEJQRiBKdXN0IEluIFRpbWUgY29tcGlsZXJcXFwiXFxuICA0NDpcXHRcXHRkZXBlbmRzIG9uIEJQRlxcbiAgNDU6XFx0XFx0ZGVwZW5kcyBvbiBIQVZFX0NCUEZfSklUIHx8IEhBVkVfRUJQRl9KSVRcXG4gIDQ2OlxcdFxcdHNlbGVjdCBFWEVDTUVNXFxuICA0NzpcXHRcXHRoZWxwXFxuICA0ODpcXHRcXHQgIEJQRiBwcm9ncmFtcyBhcmUgbm9ybWFsbHkgaGFuZGxlZCBieSBhIEJQRiBpbnRlcnByZXRlci4gVGhpcyBvcHRpb25cXG4gIDQ5OlxcdFxcdCAgYWxsb3dzIHRoZSBrZXJuZWwgdG8gZ2VuZXJhdGUgbmF0aXZlIGNvZGUgd2hlbiBhIHByb2dyYW0gaXMgbG9hZGVkXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA0OjQ5OjU4LjE5MTQzMDYzOVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTUyMjIzNjgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEJQRiBWZXJpZmljYXRpb24gVGhvdWdodHMqKlxuXG5Pa2F5LCBzbyBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyB0aGUgY3J1Y2lhbCBjb25maWd1cmF0aW9uIG9wdGlvbjsgaXQncyB0aGUgb25lIHRoYXQgdWx0aW1hdGVseSBicmluZ3MgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIub2AuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnkgb3RoZXIgY29uZmlnIGRlcGVuZGVuY2llcywgYWx0aG91Z2ggSSBzdHJvbmdseSBzdXNwZWN0IGBCUEZfU1lTQ0FMTGAgaXMgdGhlIG9ubHkgcmVsZXZhbnQgcGllY2UgaGVyZS4gVGhlIG1lbnUgc3RydWN0dXJlIGluIHRoZSBrZXJuZWwgY29uZmlnIChcIkJQRiBzdWJzeXN0ZW1cIikgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgYW5kIGBCUEZfU1lTQ0FMTGAgc2VlbXMgdG8gYmUgc3RhbmRhbG9uZS4gTm8gZGVwZW5kZW5jaWVzLCBnb29kLlxuXG5Ob3csIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgZm9yZ290dGVuIGFueXRoaW5nIGVsc2UgSSB3YW50IHRvIGRvdWJsZS1jaGVjayBteSBtZW50YWwgbGlzdCBvZiBrZXkgc3ltYm9scyBmb3IgbXkgd29yazogYHJlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0YCwgYHByZXBhcmVfZnVuY19leGl0YCwgYW5kIHRoZW4gZWl0aGVyIGBwcm9jZXNzX2JwZl9leGl0X2Z1bGxgIG9yIGBicGZfY2hlY2tgIC0gSSBuZWVkIHRvIGtlZXAgdGhvc2UgaW4gbWluZCBhcyBJIGRpdmUgaW4uXG5cblJpZ2h0LCBsZXQncyBub3cgZHJpbGwgZG93biBpbnRvIGBicGZfY2hlY2tgLiBJdCdzIHRpbWUgdG8gZGlnIGludG8gYHZlcmlmaWVyLmNgIGFuZCBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjYxLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDQ6NTA6MDAuNzQzNjU4MDdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxNDc3MTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImludCBicGZfY2hlY2tcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjEwNDk9c3RhdGljIGludCBicGZfcHJvZ192ZXJpZnlfc2lnbmF0dXJlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjExNjUtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIxMTY2OmludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTE2Ny1cXHQgICAgICBzdHJ1Y3QgYnBmX2xvZ19hdHRyICphdHRyX2xvZylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDQ6NTA6MDAuODE1MTQwMzI4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ0OTgxNDAyOTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQlBGIFZlcmlmaWVyIENoYW5nZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlLCBzbyBJJ2xsIHN0YXJ0IGJ5IGNoZWNraW5nIGBicGZfZm9yX2VhY2hfcmVnX2luX3ZzdGF0ZWAgaW4gYHZlcmlmaWVyLmNgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHJlbGF0ZWQgbW9kaWZpY2F0aW9ucyBpbiB0aGF0IGFyZWEuIFRoZW4sIEkgc2hvdWxkIGFsc28gbG9vayBhdCB0aGUgYGR5bnB0cmAgZnVuY3Rpb25zLCBwYXJ0aWN1bGFybHkgYGR5bnB0cl9yZWZfY250YCwgYWxzbyB3aXRoaW4gYHZlcmlmaWVyLmNgLiBNeSBwcmltYXJ5IGNvbmNlcm5zIHJpZ2h0IG5vdyBhcmUgYHJlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0YCBhbmQgYHByZXBhcmVfZnVuY19leGl0YCBiZWNhdXNlIHRoZXkgYXJlIGV4cGxpY2l0bHkgZmxhZ2dlZCBhcyBkaXJlY3RseSBhZmZlY3RlZC5cblxuTm93LCBsZXQncyByZXZpZXcgdGhlIHBhcmFtZXRlcnMgZm9yIGBzZXQtcmVzdWx0c2AuIFRoZSBrZXkgdGhpbmcgaXMgdGhhdCB3ZSd2ZSBzZXQgYFdvcnRoRnV6emluZ2AgdG8gYHRydWVgLCB3aGljaCBpcyBhcHByb3ByaWF0ZSBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBjaGFuZ2UuIFRoZSBgUmVhc29uaW5nYCBzZWN0aW9uIGdpdmVzIGEgZ29vZCBvdmVydmlldzogdGhpcyBwYXRjaCBhbHRlcnMgQlBGIHZlcmlmaWVyIGxvZ2ljIHdpdGhpbiB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHkgYnkgaW50cm9kdWNpbmcgYHJlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0YCBkdXJpbmcgYHByZXBhcmVfZnVuY19leGl0YC4gVGhlIHBvaW50IGlzLCB0aGlzIHJlcGFyZW50cyBgZHlucHRyYCBzbGljZXMgdXBvbiBmdW5jdGlvbiBleGl0IHRvIG1haW50YWluIGxpbmVhZ2UgdHJhY2tpbmcgYWNyb3NzIGNhbGxlciBmcmFtZXMuIFRoaXMgdG91Y2hlcyBjb3JlIHZlcmlmaWVyIGNvZGUgdXNlZCBieSBgYnBmKEJQRl9QUk9HX0xPQUQsIC4uLilgIHdoaWNoIGlzIGEgc3Ryb25nIGluZGljYXRvciBmb3IgZnV6emluZy5cblxuVGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBwcmVjaXNlOiBgcmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXRgIGFuZCBgcHJlcGFyZV9mdW5jX2V4aXRgLCB3aGljaCBpcyBwZXJmZWN0LiBUaGlzIGhlbHBzIHVzIGRpcmVjdCBvdXIgZnV6emluZyBlZmZvcnRzIHRvIHRoZSByZWxldmFudCBjb2RlLiBBbmQgd2UncmUgZW5hYmxpbmcgYEJQRl9TWVNDQUxMYCBhcyB0aGUgYEVuYWJsZUNvbmZpZ3NgLlxuXG5GaW5hbGx5LCBqdXN0IGEgc2FuaXR5IGNoZWNrOiBldmVyeXRoaW5nIGxvb2tzIGluIG9yZGVyLiBgV29ydGhGdXp6aW5nYCBpcyBzZXQgYXMgZXhwZWN0ZWQsIHRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgc3BlY2lmaWMgdG8gdGhpcyBwYXRjaCwgYW5kIHRoZSBgRW5hYmxlQ29uZmlnc2AgYXJlIHNlbnNpYmxlLiBUaGUgYFJlYXNvbmluZ2AgaXMgY29uY2lzZSBhbmQgb24gcG9pbnQuXG5cbk9rYXksIGxldCdzIHN1Ym1pdCB0aGUgYHNldC1yZXN1bHRzYCBjb21tYW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjIxMiwiT3V0cHV0VG9rZW5zIjoxMjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDQ6NTA6MDUuMzEzMjg0NDA5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1NzA2MjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0XCIsXG4gICAgXCJwcmVwYXJlX2Z1bmNfZXhpdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgcmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXQoKSBpbiBrZXJuZWwvYnBmL3ZlcmlmaWVyLmMsIGNhbGxlZCBmcm9tIHByZXBhcmVfZnVuY19leGl0KCkgdG8gdXBkYXRlIGR5bnB0ciBsaW5lYWdlIHRyYWNraW5nIHdoZW4gY2FsbGVlIGZyYW1lcyByZXR1cm4uIFRoaXMgbW9kaWZpZXMgY29yZSBCUEYgdmVyaWZpZXIgbG9naWMgcmVhY2hhYmxlIHZpYSBCUEYgcHJvZ3JhbSBsb2FkaW5nIHN5c2NhbGxzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXRcIixcbiAgICBcInByZXBhcmVfZnVuY19leGl0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyByZXBhcmVudF9keW5wdHJfc2xpY2VzX29uX2Z1bmNfZXhpdCgpIGluIGtlcm5lbC9icGYvdmVyaWZpZXIuYywgY2FsbGVkIGZyb20gcHJlcGFyZV9mdW5jX2V4aXQoKSB0byB1cGRhdGUgZHlucHRyIGxpbmVhZ2UgdHJhY2tpbmcgd2hlbiBjYWxsZWUgZnJhbWVzIHJldHVybi4gVGhpcyBtb2RpZmllcyBjb3JlIEJQRiB2ZXJpZmllciBsb2dpYyByZWFjaGFibGUgdmlhIEJQRiBwcm9ncmFtIGxvYWRpbmcgc3lzY2FsbHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA0OjUwOjA1LjQ1ODk5OTY5N1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE0MTYyMjExNzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwNDo1MDowNS40NTk3NzEyMDdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozMTQxNTQ0NjAyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllcidzIGBwcmVwYXJlX2Z1bmNfZXhpdCgpYCBsb2dpYyBieSBhZGRpbmcgYHJlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0KClgLiBUaGlzIGVuc3VyZXMgdGhhdCBkeW5wdHIgc2xpY2VzIGVzY2FwaW5nIGEgc3VicHJvZ3JhbSBjYWxsIGZyYW1lIGhhdmUgdGhlaXIgYHBhcmVudF9pZGAgdXBkYXRlZCB0byBwb2ludCB0byB0aGUgZHlucHRyJ3MgcGFyZW50LCBwcm9wZXJseSBpbnZhbGlkYXRpbmcgc2xpY2VzIHdoZW4gdGhlIHBhcmVudCBkeW5wdHIvYnVmZmVyIGlzIGRlc3Ryb3llZCBpbiB0aGUgY2FsbGVyLlxcblxcblRoaXMgZml4IHByZXZlbnRzIFVzZS1BZnRlci1GcmVlIChVQUYpIC8gZGFuZ2xpbmcgcG9pbnRlciBkZXJlZmVyZW5jZXMgaW4gQlBGIHByb2dyYW1zLiBTdWNoIHJ1bnRpbWUgbWVtb3J5IHNhZmV0eSB2aW9sYXRpb25zIGFyZSBjYXVnaHQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwYjRkYzliMjg3NmFiNGNlYTk0MTNjMmQ4NGFjZTk2NzE0MDYzYmQzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMTAgMDQ6NDk6MTggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbmluZGV4IDcyYTNmNTk5OGRkMjcuLmVlNDFiNzM4NmY3NTIgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbisrKyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuQEAgLTgwMCw2ICs4MDAsMzkgQEAgc3RhdGljIGludCBkeW5wdHJfcmVmX2NudChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgdl9wYXJlbnRfaWQpXG4gXHRyZXR1cm4gcmVmX2NudDtcbiB9XG4gXG4rc3RhdGljIHZvaWQgcmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbitcdFx0XHRcdFx0XHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKmNhbGxlZSlcbit7XG4rXHRzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICp2c3RhdGUgPSBlbnYtXHUwMDNlY3VyX3N0YXRlO1xuK1x0c3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZTtcbitcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWc7XG4rXHRpbnQgaTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNhbGxlZS1cdTAwM2VhbGxvY2F0ZWRfc3RhY2sgLyBCUEZfUkVHX1NJWkU7IGkrKykge1xuK1x0XHRzdHJ1Y3QgYnBmX3N0YWNrX3N0YXRlICpzbG90ID0gXHUwMDI2Y2FsbGVlLVx1MDAzZXN0YWNrW2ldO1xuK1x0XHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqZHlucHRyID0gXHUwMDI2c2xvdC1cdTAwM2VzcGlsbGVkX3B0cjtcbitcbitcdFx0aWYgKHNsb3QtXHUwMDNlc2xvdF90eXBlWzBdICE9IFNUQUNLX0RZTlBUUiB8fFxuK1x0XHQgICAgIWR5bnB0ci1cdTAwM2VkeW5wdHIuZmlyc3Rfc2xvdCB8fFxuK1x0XHQgICAgIWR5bnB0ci1cdTAwM2VwYXJlbnRfaWQpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdC8qXG4rXHRcdCAqIEEgY2FsbGVlIGNhbiBzcGlsbCBhIHNsaWNlIGRlcml2ZWQgZnJvbSBpdHMgbG9jYWwgZHlucHRyIGludG9cbitcdFx0ICogdGhlIGNhbGxlcidzIHN0YWNrLiBUaGUgc2xpY2UgdGhlbiBvdXRsaXZlcyB0aGUgZHlucHRyIGlkIHRoYXRcbitcdFx0ICogbGlua3MgaXQgdG8gdGhlIHJlc3Qgb2YgdGhlIG9iamVjdCB0cmVlLiBQcmVzZXJ2ZSB0aGF0IGxpbmsgYnlcbitcdFx0ICogbWFraW5nIGVzY2FwZWQgc2xpY2VzIGNoaWxkcmVuIG9mIHRoZSBkeW5wdHIncyBwYXJlbnQgYmVmb3JlXG4rXHRcdCAqIHRoZSBjYWxsZWUgZnJhbWUgaXMgZnJlZWQuXG4rXHRcdCAqL1xuK1x0XHRicGZfZm9yX2VhY2hfcmVnX2luX3ZzdGF0ZSh2c3RhdGUsIHN0YXRlLCByZWcsICh7XG4rXHRcdFx0aWYgKHN0YXRlID09IGNhbGxlZSB8fCByZWctXHUwMDNlcGFyZW50X2lkICE9IGR5bnB0ci1cdTAwM2VpZCB8fFxuK1x0XHRcdCAgICBiYXNlX3R5cGUocmVnLVx1MDAzZXR5cGUpICE9IFBUUl9UT19NRU0pXG4rXHRcdFx0XHRjb250aW51ZTtcbitcdFx0XHRyZWctXHUwMDNlcGFyZW50X2lkID0gZHlucHRyLVx1MDAzZXBhcmVudF9pZDtcbitcdFx0fSkpO1xuK1x0fVxuK31cbitcbiBzdGF0aWMgaW50IGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3Qoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdFx0XHRcdCAgICAgICAgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZSwgaW50IHNwaSlcbiB7XG5AQCAtMTAzOTksNiArMTA0MzIsNyBAQCBzdGF0aWMgaW50IHByZXBhcmVfZnVuY19leGl0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCAqaW5zbl9pZHgpXG4gXHRcdHByaW50X3ZlcmlmaWVyX3N0YXRlKGVudiwgc3RhdGUsIGNhbGxlci1cdTAwM2VmcmFtZW5vLCB0cnVlKTtcbiBcdH1cbiBcdGFjY291bnRfcHJvY2Vzc2VkX2luc25zKGVudiwgY2FsbGVlLCBjYWxsZXIpO1xuK1x0cmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXQoZW52LCBjYWxsZWUpO1xuIFx0LyogY2xlYXIgZXZlcnl0aGluZyBpbiB0aGUgY2FsbGVlLiBJbiBjYXNlIG9mIGV4Y2VwdGlvbmFsIGV4aXRzIHVzaW5nXG4gXHQgKiBicGZfdGhyb3csIHRoaXMgd2lsbCBiZSBkb25lIGJ5IGNvcHlfdmVyaWZpZXJfc3RhdGUgZm9yIGV4dHJhIGZyYW1lcy4gKi9cbiBcdGZyZWVfZnVuY19zdGF0ZShjYWxsZWUpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9xZGlzYy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX3FkaXNjLmNcbmluZGV4IDZkYmQxNDg3MzQzYzAuLjEyMmVjYjdlOThlMmEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfcWRpc2MuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX3FkaXNjLmNcbkBAIC0xMSw2ICsxMSw3IEBAXG4gI2luY2x1ZGUgXCJicGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHIuc2tlbC5oXCJcbiAjaW5jbHVkZSBcImJwZl9xZGlzY19mYWlsX19pbnZhbGlkX2R5bnB0cl9zbGljZS5za2VsLmhcIlxuICNpbmNsdWRlIFwiYnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX2Nyb3NzX2ZyYW1lLnNrZWwuaFwiXG4rI2luY2x1ZGUgXCJicGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHJfcmV0dXJuZWRfc2xpY2Uuc2tlbC5oXCJcbiAjaW5jbHVkZSBcImJwZl9xZGlzY19mYWlsX191bnRydXN0ZWRfd3JpdGUuc2tlbC5oXCJcbiAjaW5jbHVkZSBcImJwZl9xZGlzY19keW5wdHJfdXNlX2FmdGVyX2ludmFsaWRhdGVfY2xvbmUuc2tlbC5oXCJcbiBcbkBAIC0yMzAsNiArMjMxLDcgQEAgdm9pZCB0ZXN0X25zX2JwZl9xZGlzYyh2b2lkKVxuIFx0XHR0ZXN0X2luY29tcGxfb3BzKCk7XG4gXHRSVU5fVEVTVFMoYnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyKTtcbiBcdFJVTl9URVNUUyhicGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHJfY3Jvc3NfZnJhbWUpO1xuK1x0UlVOX1RFU1RTKGJwZl9xZGlzY19mYWlsX19pbnZhbGlkX2R5bnB0cl9yZXR1cm5lZF9zbGljZSk7XG4gXHRSVU5fVEVTVFMoYnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX3NsaWNlKTtcbiBcdFJVTl9URVNUUyhicGZfcWRpc2NfZmFpbF9fdW50cnVzdGVkX3dyaXRlKTtcbiBcdFJVTl9URVNUUyhicGZfcWRpc2NfZHlucHRyX3VzZV9hZnRlcl9pbnZhbGlkYXRlX2Nsb25lKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX3JldHVybmVkX3NsaWNlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX3JldHVybmVkX3NsaWNlLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi45NDBhYmE3ZDhhYmZlXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX3JldHVybmVkX3NsaWNlLmNcbkBAIC0wLDAgKzEsNzYgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuK1xuKyNpbmNsdWRlIFx1MDAzY3ZtbGludXguaFx1MDAzZVxuKyNpbmNsdWRlIFwiYnBmX2V4cGVyaW1lbnRhbC5oXCJcbisjaW5jbHVkZSBcImJwZl9xZGlzY19jb21tb24uaFwiXG4rI2luY2x1ZGUgXCJicGZfbWlzYy5oXCJcbitcbitjaGFyIF9saWNlbnNlW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG4rXG4raW50IHByb3RvO1xuK1xuK3N0YXRpYyBfX25vaW5saW5lIHN0cnVjdCBldGhoZHIgKnNsaWNlX2luX3N1YnByb2coc3RydWN0IHNrX2J1ZmYgKnNrYilcbit7XG4rXHRzdHJ1Y3QgYnBmX2R5bnB0ciBwdHI7XG4rXG4rXHRicGZfZHlucHRyX2Zyb21fc2tiKChzdHJ1Y3QgX19za19idWZmICopc2tiLCAwLCBcdTAwMjZwdHIpO1xuK1x0cmV0dXJuIGJwZl9keW5wdHJfc2xpY2UoXHUwMDI2cHRyLCAwLCBOVUxMLCBzaXplb2Yoc3RydWN0IGV0aGhkcikpO1xuK31cbitcbitTRUMoXCJzdHJ1Y3Rfb3BzXCIpXG4rX19mYWlsdXJlIF9fbXNnKFwiaW52YWxpZCBtZW0gYWNjZXNzICdzY2FsYXInXCIpXG4raW50IEJQRl9QUk9HKGludmFsaWRfZHlucHRyX3JldHVybmVkX3NsaWNlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuK1x0ICAgICBzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IGJwZl9za19idWZmX3B0ciAqdG9fZnJlZSlcbit7XG4rXHRzdHJ1Y3QgZXRoaGRyICpoZHI7XG4rXG4rXHRoZHIgPSBzbGljZV9pbl9zdWJwcm9nKHNrYik7XG4rXHRpZiAoIWhkcikge1xuK1x0XHRicGZfcWRpc2Nfc2tiX2Ryb3Aoc2tiLCB0b19mcmVlKTtcbitcdFx0cmV0dXJuIE5FVF9YTUlUX0RST1A7XG4rXHR9XG4rXG4rXHRicGZfcWRpc2Nfc2tiX2Ryb3Aoc2tiLCB0b19mcmVlKTtcbitcbitcdC8qIHRoaXMgc2hvdWxkIGZhaWwgKi9cbitcdHByb3RvID0gaGRyLVx1MDAzZWhfcHJvdG87XG4rXG4rXHRyZXR1cm4gTkVUX1hNSVRfRFJPUDtcbit9XG4rXG4rU0VDKFwic3RydWN0X29wc1wiKVxuK19fYXV4aWxpYXJ5XG4rc3RydWN0IHNrX2J1ZmYgKkJQRl9QUk9HKGJwZl9xZGlzY190ZXN0X2RlcXVldWUsIHN0cnVjdCBRZGlzYyAqc2NoKVxuK3tcbitcdHJldHVybiBOVUxMO1xuK31cbitcbitTRUMoXCJzdHJ1Y3Rfb3BzXCIpXG4rX19hdXhpbGlhcnlcbitpbnQgQlBGX1BST0coYnBmX3FkaXNjX3Rlc3RfaW5pdCwgc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBubGF0dHIgKm9wdCxcbitcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuK3tcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCJzdHJ1Y3Rfb3BzXCIpXG4rX19hdXhpbGlhcnlcbit2b2lkIEJQRl9QUk9HKGJwZl9xZGlzY190ZXN0X3Jlc2V0LCBzdHJ1Y3QgUWRpc2MgKnNjaClcbit7XG4rfVxuK1xuK1NFQyhcInN0cnVjdF9vcHNcIilcbitfX2F1eGlsaWFyeVxuK3ZvaWQgQlBGX1BST0coYnBmX3FkaXNjX3Rlc3RfZGVzdHJveSwgc3RydWN0IFFkaXNjICpzY2gpXG4re1xuK31cbitcbitTRUMoXCIuc3RydWN0X29wc1wiKVxuK3N0cnVjdCBRZGlzY19vcHMgdGVzdCA9IHtcbitcdC5lbnF1ZXVlICAgPSAodm9pZCAqKWludmFsaWRfZHlucHRyX3JldHVybmVkX3NsaWNlLFxuK1x0LmRlcXVldWUgICA9ICh2b2lkICopYnBmX3FkaXNjX3Rlc3RfZGVxdWV1ZSxcbitcdC5pbml0ICAgICAgPSAodm9pZCAqKWJwZl9xZGlzY190ZXN0X2luaXQsXG4rXHQucmVzZXQgICAgID0gKHZvaWQgKilicGZfcWRpc2NfdGVzdF9yZXNldCxcbitcdC5kZXN0cm95ICAgPSAodm9pZCAqKWJwZl9xZGlzY190ZXN0X2Rlc3Ryb3ksXG4rXHQuaWQgICAgICAgID0gXCJicGZfcWRpc2NfdGVzdFwiLFxuK307XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuY1xuaW5kZXggMWNkNjFkNzJjMTY2Zi4uOTJmOWY5ZWEwNTMyMSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuY1xuQEAgLTE4OTIsNiArMTg5Miw1NSBAQCBpbnQgY2xvbmVfaW52YWxpZGF0ZTQodm9pZCAqY3R4KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBfX25vaW5saW5lIHZvaWQgY2xvbmVfc2xpY2VfaW5fc3VicHJvZyhzdHJ1Y3QgYnBmX2R5bnB0ciAqcHRyLCBpbnQgKipkYXRhKVxuK3tcbitcdHN0cnVjdCBicGZfZHlucHRyIGNsb25lO1xuK1xuK1x0YnBmX2R5bnB0cl9jbG9uZShwdHIsIFx1MDAyNmNsb25lKTtcbitcdCpkYXRhID0gYnBmX2R5bnB0cl9kYXRhKFx1MDAyNmNsb25lLCAwLCBzaXplb2YodmFsKSk7XG4rfVxuK1xuKy8qXG4rICogQSBzbGljZSB0aGF0IGVzY2FwZXMgdGhlIGNsb25lJ3MgY2FsbCBmcmFtZSByZW1haW5zIHZhbGlkIHdoaWxlIHRoZVxuKyAqIHNoYXJlZCByaW5nYnVmIHJlc2VydmF0aW9uIGlzIGxpdmUuXG4rICovXG4rU0VDKFwiP3Jhd190cFwiKVxuK19fc3VjY2Vzc1xuK2ludCBjbG9uZV9zbGljZV9yZXR1cm5lZF9mcmFtZV92YWxpZCh2b2lkICpjdHgpXG4re1xuK1x0c3RydWN0IGJwZl9keW5wdHIgcHRyO1xuK1x0aW50ICpkYXRhID0gTlVMTDtcbitcbitcdGJwZl9yaW5nYnVmX3Jlc2VydmVfZHlucHRyKFx1MDAyNnJpbmdidWYsIHZhbCwgMCwgXHUwMDI2cHRyKTtcbitcdGNsb25lX3NsaWNlX2luX3N1YnByb2coXHUwMDI2cHRyLCBcdTAwMjZkYXRhKTtcbitcdGlmIChkYXRhKVxuK1x0XHQqZGF0YSA9IDEyMztcbitcdGJwZl9yaW5nYnVmX3N1Ym1pdF9keW5wdHIoXHUwMDI2cHRyLCAwKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKlxuKyAqIFJlbGVhc2luZyB0aGUgc2hhcmVkIHJlc2VydmF0aW9uIG11c3QgaW52YWxpZGF0ZSBhIHNsaWNlIHRoYXQgZXNjYXBlZFxuKyAqIGZyb20gYSBjbG9uZSdzIGNhbGwgZnJhbWUuXG4rICovXG4rU0VDKFwiP3Jhd190cFwiKVxuK19fZmFpbHVyZSBfX21zZyhcImludmFsaWQgbWVtIGFjY2VzcyAnc2NhbGFyJ1wiKVxuK2ludCBjbG9uZV9zbGljZV9yZXR1cm5lZF9mcmFtZV9pbnZhbGlkKHZvaWQgKmN0eClcbit7XG4rXHRzdHJ1Y3QgYnBmX2R5bnB0ciBwdHI7XG4rXHRpbnQgKmRhdGEgPSBOVUxMO1xuK1xuK1x0YnBmX3JpbmdidWZfcmVzZXJ2ZV9keW5wdHIoXHUwMDI2cmluZ2J1ZiwgdmFsLCAwLCBcdTAwMjZwdHIpO1xuK1x0Y2xvbmVfc2xpY2VfaW5fc3VicHJvZyhcdTAwMjZwdHIsIFx1MDAyNmRhdGEpO1xuK1x0YnBmX3JpbmdidWZfc3VibWl0X2R5bnB0cihcdTAwMjZwdHIsIDApO1xuK1x0aWYgKGRhdGEpXG4rXHRcdC8qIHRoaXMgc2hvdWxkIGZhaWwgKi9cbitcdFx0KmRhdGEgPSAxMjM7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gLyogSW52YWxpZGF0aW5nIGEgZHlucHRyIHNob3VsZCBpbnZhbGlkYXRlIGFueSBkYXRhIHNsaWNlc1xuICAqIG9mIGl0cyBwYXJlbnRcbiAgKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA0OjUwOjA1LjQ1OTc3NDU3N1oiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMTQxNTQyNTk5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBbmFseXNpczogRHlucHRyIFNsaWNlIFJlcGFyZW50aW5nIGluIEJQRiBWZXJpZmllcioqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IHBvaW50cyB0b3dhcmRzICpub3QqIG5lZWRpbmcgYSBLTVNBTiBzZXNzaW9uLiBUaGUgcGF0Y2ggZm9jdXNlcyBvbiB0aGUgQlBGIHZlcmlmaWVyLCBzcGVjaWZpY2FsbHkgYWRkcmVzc2luZyBhIHBvdGVudGlhbCBVc2UtQWZ0ZXItRnJlZSAoVUFGKSB2dWxuZXJhYmlsaXR5IHdpdGggZHluYW1pYyBwb2ludGVyIChkeW5wdHIpIHNsaWNlcyBhY3Jvc3MgZnVuY3Rpb24gY2FsbHMuXG5cblRoZSBjb3JlIG9mIHRoZSBwYXRjaCBpcyB0aGUgbmV3IGByZXBhcmVudF9keW5wdHJfc2xpY2VzX29uX2Z1bmNfZXhpdGAgaGVscGVyLiBXaGF0IGl0IGRvZXMgaXMgY3J1Y2lhbDogd2hlbiBhIGZ1bmN0aW9uIChjYWxsZWUpIGNyZWF0ZXMgYSBzbGljZSBmcm9tIGEgbG9jYWwgZHlucHRyIGFuZCBwYXNzZXMgaXQgYmFjayB0byB0aGUgY2FsbGVyLCBpdCBlbnN1cmVzIHRoYXQgdGhlICpzbGljZSdzKiBgcGFyZW50X2lkYCBpcyB1cGRhdGVkIHRvIHBvaW50IHRvIHRoZSAqb3JpZ2luYWwqIGR5bnB0cidzIGBwYXJlbnRfaWRgIGJlZm9yZSB0aGUgY2FsbGVlIGZyYW1lIGlzIGZyZWVkLiBUaGlzIHJlcGFyZW50aW5nIGlzIGVzc2VudGlhbCBiZWNhdXNlIHRoZSBvcmlnaW5hbCBkeW5wdHIgSUQgd291bGQgb3RoZXJ3aXNlIGJlIGxvc3Qgd2hlbiB0aGUgY2FsbGVlIGV4aXRzLiBXaXRob3V0IHRoaXMsIHRoZSB2ZXJpZmllciBtaWdodCBmYWlsIHRvIGNvcnJlY3RseSBpZGVudGlmeSBhbmQgaW52YWxpZGF0ZSB0aGUgc2xpY2Ugd2hlbiB0aGUgdW5kZXJseWluZyBidWZmZXIgKGUuZy4sIGFuIFNLQikgaXMgcmVsZWFzZWQsIGxlYWRpbmcgdG8gYSBVQUYgb3IgbWVtb3J5IHNhZmV0eSBpc3N1ZSBkdXJpbmcgQlBGIHByb2dyYW0gZXhlY3V0aW9uLlxuXG5TbywgdGhlIGlzc3VlIGlzIHJlYWxseSBhYm91dCAqdmVyaWZpZXIgc3RhdGUgY29uc2lzdGVuY3kqLCBub3QgdGhlIGludHJvZHVjdGlvbiBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIGNvZGUgaXMgZml4aW5nIHRoZSB0cmFja2luZyBvZiBkeW5wdHIgc2xpY2UgbGlmZXRpbWVzIHdpdGhpbiB0aGUgdmVyaWZpZXIncyBpbnRlcm5hbCBzdGF0ZS4gSXQncyBlc3NlbnRpYWxseSBwcmV2ZW50aW5nIGEgc2NlbmFyaW8gd2hlcmUgYSBCUEYgcHJvZ3JhbSBjb3VsZCBhdHRlbXB0IHRvIGFjY2VzcyBtZW1vcnkgYWZ0ZXIgaXQgaGFzIGJlZW4gZnJlZWQuIFRoZSB2ZXJpZmllciB0cmFja3MgcmVnaXN0ZXJzIGFuZCBzdGFjayBzbG90cywgYW5kIHRoaXMgcGF0Y2gga2VlcHMgdGhhdCBzdGF0ZSBjb25zaXN0ZW50IHdpdGggcG9pbnRlciBsaWZldGltZXMuXG5cbk5vdywgbGV0J3MgYXBwbHkgdGhlIEtNU0FOIHJ1bGVzLiBEb2VzIHRoaXMgcGF0Y2g6XG5cbjEuICAqKkV4cG9zZSBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlPyoqIE5vLlxuMi4gICoqUmVseSBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8qKiBOby5cbjMuICAqKkFsbG9jYXRlIGNvbXBsZXggc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzPyoqIE5vLlxuNC4gICoqSW50cm9kdWNlIGJvdW5kcyBjaGVjayB2dWxuZXJhYmlsaXRpZXMgYXJvdW5kIGV4aXN0aW5nIGRhdGE/KiogTm8uXG5cbkl0J3MgYWxsIGludGVybmFsIHZlcmlmaWVyIHN0YXRlIG1hbmlwdWxhdGlvbi4gVGhlIHZlcmlmaWVyIHVzZXMgaW5pdGlhbGl6ZWQgZGF0YSBzdHJ1Y3R1cmVzIHRvIHRyYWNrIHRoZSB2YWxpZGl0eSBvZiBwb2ludGVycyBhbmQgbWVtb3J5IGFjY2Vzcy4gVGhlIGBicGZfZm9yX2VhY2hfcmVnX2luX3ZzdGF0ZWAgbG9vcCBhbmQgdGhlIHN0YWNrIHN0cnVjdHVyZXMgbGlrZSBgY2FsbGVlLVx1MDAzZXN0YWNrW2ldYCBhcmUgYWxsIHBhcnQgb2YgdGhhdCBpbnRlcm5hbCB0cmFja2luZy4gSXQgZGVhbHMgd2l0aCByZWdpc3RlciBzdGF0ZXMgYW5kIHRoZSB2ZXJpZmllcidzIHN0YWNrLCBhbGwgb2Ygd2hpY2ggYXJlIGluaXRpYWxpemVkIHdpdGhpbiB0aGUgdmVyaWZpZXIncyBjb250ZXh0LlxuXG5UaGUgYnVnIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGlzIGEgY2xhc3NpYyBVQUYgb3IgZGFuZ2xpbmcgcG9pbnRlciBzY2VuYXJpby4gVGhlc2Uga2luZHMgb2YgYnVncyBhcmUgKnByZWNpc2VseSogd2hhdCBLQVNBTiBpcyBkZXNpZ25lZCB0byBjYXRjaCEgS0FTQU4gaXMgYnVpbHQgdG8gZGV0ZWN0IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYW5kIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMuIEtNU0FOLCBvbiB0aGUgb3RoZXIgaGFuZCwgZXhjZWxzIGF0IGZpbmRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuXG5cblRoZSBwYXRjaCdzIGNoYW5nZXMgZGlyZWN0bHkgYWltIHRvICpwcmV2ZW50KiBtZW1vcnkgc2FmZXR5IGlzc3VlcywgYW5kIEtBU0FOIHNob3VsZCBoYW5kbGUgdGhvc2UgcHJvYmxlbXMuIEtNU0FOIHdvdWxkIGJlIG92ZXJraWxsIGluIHRoaXMgY2FzZS4gTXkgY29uY2x1c2lvbj8gVGhpcyBpcyBhIGBOZWVkc0tNU0FOPWZhbHNlYCBzaXR1YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2NTgsIk91dHB1dFRva2VucyI6MTgwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY3NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA0OjUwOjM2Ljg3NTIwMjc3NloiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyOTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllcidzIGBwcmVwYXJlX2Z1bmNfZXhpdCgpYCBsb2dpYyBieSBhZGRpbmcgYHJlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0KClgLiBUaGlzIGVuc3VyZXMgdGhhdCBkeW5wdHIgc2xpY2VzIGVzY2FwaW5nIGEgc3VicHJvZ3JhbSBjYWxsIGZyYW1lIGhhdmUgdGhlaXIgYHBhcmVudF9pZGAgdXBkYXRlZCB0byBwb2ludCB0byB0aGUgZHlucHRyJ3MgcGFyZW50LCBwcm9wZXJseSBpbnZhbGlkYXRpbmcgc2xpY2VzIHdoZW4gdGhlIHBhcmVudCBkeW5wdHIvYnVmZmVyIGlzIGRlc3Ryb3llZCBpbiB0aGUgY2FsbGVyLlxcblxcblRoaXMgZml4IHByZXZlbnRzIFVzZS1BZnRlci1GcmVlIChVQUYpIC8gZGFuZ2xpbmcgcG9pbnRlciBkZXJlZmVyZW5jZXMgaW4gQlBGIHByb2dyYW1zLiBTdWNoIHJ1bnRpbWUgbWVtb3J5IHNhZmV0eSB2aW9sYXRpb25zIGFyZSBjYXVnaHQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyJ3MgYHByZXBhcmVfZnVuY19leGl0KClgIGxvZ2ljIGJ5IGFkZGluZyBgcmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXQoKWAuIFRoaXMgZW5zdXJlcyB0aGF0IGR5bnB0ciBzbGljZXMgZXNjYXBpbmcgYSBzdWJwcm9ncmFtIGNhbGwgZnJhbWUgaGF2ZSB0aGVpciBgcGFyZW50X2lkYCB1cGRhdGVkIHRvIHBvaW50IHRvIHRoZSBkeW5wdHIncyBwYXJlbnQsIHByb3Blcmx5IGludmFsaWRhdGluZyBzbGljZXMgd2hlbiB0aGUgcGFyZW50IGR5bnB0ci9idWZmZXIgaXMgZGVzdHJveWVkIGluIHRoZSBjYWxsZXIuXFxuXFxuVGhpcyBmaXggcHJldmVudHMgVXNlLUFmdGVyLUZyZWUgKFVBRikgLyBkYW5nbGluZyBwb2ludGVyIGRlcmVmZXJlbmNlcyBpbiBCUEYgcHJvZ3JhbXMuIFN1Y2ggcnVudGltZSBtZW1vcnkgc2FmZXR5IHZpb2xhdGlvbnMgYXJlIGNhdWdodCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcywgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowsj9lx[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-10 04:48:07 +0000 UTC FinishedAt: 2026-09-10 04:50:37 +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": "15e2565f1c43771af0bc5324971cabaad79ac286", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "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": "15e2565f1c43771af0bc5324971cabaad79ac286", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "cb058e91-78c3-424c-bf2f-2cd51d885247" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "reparent_dynptr_slices_on_func_exit", "prepare_func_exit" ], "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+CgkJCTx0ZD4yMDI2LzA5LzEwIDA0OjQ5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXQmIzM0OywKICAgICYjMzQ7cHJlcGFyZV9mdW5jX2V4aXQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyJiMzOTtzIGBwcmVwYXJlX2Z1bmNfZXhpdCgpYCBsb2dpYyBieSBhZGRpbmcgYHJlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0KClgLiBUaGlzIGVuc3VyZXMgdGhhdCBkeW5wdHIgc2xpY2VzIGVzY2FwaW5nIGEgc3VicHJvZ3JhbSBjYWxsIGZyYW1lIGhhdmUgdGhlaXIgYHBhcmVudF9pZGAgdXBkYXRlZCB0byBwb2ludCB0byB0aGUgZHlucHRyJiMzOTtzIHBhcmVudCwgcHJvcGVybHkgaW52YWxpZGF0aW5nIHNsaWNlcyB3aGVuIHRoZSBwYXJlbnQgZHlucHRyL2J1ZmZlciBpcyBkZXN0cm95ZWQgaW4gdGhlIGNhbGxlci5cblxuVGhpcyBmaXggcHJldmVudHMgVXNlLUFmdGVyLUZyZWUgKFVBRikgLyBkYW5nbGluZyBwb2ludGVyIGRlcmVmZXJlbmNlcyBpbiBCUEYgcHJvZ3JhbXMuIFN1Y2ggcnVudGltZSBtZW1vcnkgc2FmZXR5IHZpb2xhdGlvbnMgYXJlIGNhdWdodCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcywgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHJlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0KCkgaW4ga2VybmVsL2JwZi92ZXJpZmllci5jLCBjYWxsZWQgZnJvbSBwcmVwYXJlX2Z1bmNfZXhpdCgpIHRvIHVwZGF0ZSBkeW5wdHIgbGluZWFnZSB0cmFja2luZyB3aGVuIGNhbGxlZSBmcmFtZXMgcmV0dXJuLiBUaGlzIG1vZGlmaWVzIGNvcmUgQlBGIHZlcmlmaWVyIGxvZ2ljIHJlYWNoYWJsZSB2aWEgQlBGIHByb2dyYW0gbG9hZGluZyBzeXNjYWxscy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwNDo0OTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDBiNGRjOWIyODc2YWI0Y2VhOTQxM2MyZDg0YWNlOTY3MTQwNjNiZDNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAxMCAwNDo0OToxOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbmluZGV4IDcyYTNmNTk5OGRkMjcuLmVlNDFiNzM4NmY3NTIgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuQEAgLTgwMCw2ICYjNDM7ODAwLDM5IEBAIHN0YXRpYyBpbnQgZHlucHRyX3JlZl9jbnQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHZfcGFyZW50X2lkKVxuIFx0cmV0dXJuIHJlZl9jbnQ7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCByZXBhcmVudF9keW5wdHJfc2xpY2VzX29uX2Z1bmNfZXhpdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuJiM0MztcdFx0XHRcdFx0XHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKmNhbGxlZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKnZzdGF0ZSA9IGVudi1cdTAwM2VjdXJfc3RhdGU7XG4mIzQzO1x0c3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZTtcbiYjNDM7XHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnO1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjYWxsZWUtXHUwMDNlYWxsb2NhdGVkX3N0YWNrIC8gQlBGX1JFR19TSVpFOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3RydWN0IGJwZl9zdGFja19zdGF0ZSAqc2xvdCA9IFx1MDAyNmNhbGxlZS1cdTAwM2VzdGFja1tpXTtcbiYjNDM7XHRcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpkeW5wdHIgPSBcdTAwMjZzbG90LVx1MDAzZXNwaWxsZWRfcHRyO1xuJiM0MztcbiYjNDM7XHRcdGlmIChzbG90LVx1MDAzZXNsb3RfdHlwZVswXSAhPSBTVEFDS19EWU5QVFIgfHxcbiYjNDM7XHRcdCAgICAhZHlucHRyLVx1MDAzZWR5bnB0ci5maXJzdF9zbG90IHx8XG4mIzQzO1x0XHQgICAgIWR5bnB0ci1cdTAwM2VwYXJlbnRfaWQpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBBIGNhbGxlZSBjYW4gc3BpbGwgYSBzbGljZSBkZXJpdmVkIGZyb20gaXRzIGxvY2FsIGR5bnB0ciBpbnRvXG4mIzQzO1x0XHQgKiB0aGUgY2FsbGVyJiMzOTtzIHN0YWNrLiBUaGUgc2xpY2UgdGhlbiBvdXRsaXZlcyB0aGUgZHlucHRyIGlkIHRoYXRcbiYjNDM7XHRcdCAqIGxpbmtzIGl0IHRvIHRoZSByZXN0IG9mIHRoZSBvYmplY3QgdHJlZS4gUHJlc2VydmUgdGhhdCBsaW5rIGJ5XG4mIzQzO1x0XHQgKiBtYWtpbmcgZXNjYXBlZCBzbGljZXMgY2hpbGRyZW4gb2YgdGhlIGR5bnB0ciYjMzk7cyBwYXJlbnQgYmVmb3JlXG4mIzQzO1x0XHQgKiB0aGUgY2FsbGVlIGZyYW1lIGlzIGZyZWVkLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRicGZfZm9yX2VhY2hfcmVnX2luX3ZzdGF0ZSh2c3RhdGUsIHN0YXRlLCByZWcsICh7XG4mIzQzO1x0XHRcdGlmIChzdGF0ZSA9PSBjYWxsZWUgfHwgcmVnLVx1MDAzZXBhcmVudF9pZCAhPSBkeW5wdHItXHUwMDNlaWQgfHxcbiYjNDM7XHRcdFx0ICAgIGJhc2VfdHlwZShyZWctXHUwMDNldHlwZSkgIT0gUFRSX1RPX01FTSlcbiYjNDM7XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdFx0cmVnLVx1MDAzZXBhcmVudF9pZCA9IGR5bnB0ci1cdTAwM2VwYXJlbnRfaWQ7XG4mIzQzO1x0XHR9KSk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgZGVzdHJveV9pZl9keW5wdHJfc3RhY2tfc2xvdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRcdFx0ICAgICAgICBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlLCBpbnQgc3BpKVxuIHtcbkBAIC0xMDM5OSw2ICYjNDM7MTA0MzIsNyBAQCBzdGF0aWMgaW50IHByZXBhcmVfZnVuY19leGl0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCAqaW5zbl9pZHgpXG4gXHRcdHByaW50X3ZlcmlmaWVyX3N0YXRlKGVudiwgc3RhdGUsIGNhbGxlci1cdTAwM2VmcmFtZW5vLCB0cnVlKTtcbiBcdH1cbiBcdGFjY291bnRfcHJvY2Vzc2VkX2luc25zKGVudiwgY2FsbGVlLCBjYWxsZXIpO1xuJiM0MztcdHJlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0KGVudiwgY2FsbGVlKTtcbiBcdC8qIGNsZWFyIGV2ZXJ5dGhpbmcgaW4gdGhlIGNhbGxlZS4gSW4gY2FzZSBvZiBleGNlcHRpb25hbCBleGl0cyB1c2luZ1xuIFx0ICogYnBmX3Rocm93LCB0aGlzIHdpbGwgYmUgZG9uZSBieSBjb3B5X3ZlcmlmaWVyX3N0YXRlIGZvciBleHRyYSBmcmFtZXMuICovXG4gXHRmcmVlX2Z1bmNfc3RhdGUoY2FsbGVlKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfcWRpc2MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9xZGlzYy5jXG5pbmRleCA2ZGJkMTQ4NzM0M2MwLi4xMjJlY2I3ZTk4ZTJhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX3FkaXNjLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9xZGlzYy5jXG5AQCAtMTEsNiAmIzQzOzExLDcgQEBcbiAjaW5jbHVkZSBcJiMzNDticGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHIuc2tlbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7YnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX3NsaWNlLnNrZWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2JwZl9xZGlzY19mYWlsX19pbnZhbGlkX2R5bnB0cl9jcm9zc19mcmFtZS5za2VsLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7YnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX3JldHVybmVkX3NsaWNlLnNrZWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2JwZl9xZGlzY19mYWlsX191bnRydXN0ZWRfd3JpdGUuc2tlbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7YnBmX3FkaXNjX2R5bnB0cl91c2VfYWZ0ZXJfaW52YWxpZGF0ZV9jbG9uZS5za2VsLmhcJiMzNDtcbiBcbkBAIC0yMzAsNiAmIzQzOzIzMSw3IEBAIHZvaWQgdGVzdF9uc19icGZfcWRpc2Modm9pZClcbiBcdFx0dGVzdF9pbmNvbXBsX29wcygpO1xuIFx0UlVOX1RFU1RTKGJwZl9xZGlzY19mYWlsX19pbnZhbGlkX2R5bnB0cik7XG4gXHRSVU5fVEVTVFMoYnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX2Nyb3NzX2ZyYW1lKTtcbiYjNDM7XHRSVU5fVEVTVFMoYnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX3JldHVybmVkX3NsaWNlKTtcbiBcdFJVTl9URVNUUyhicGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHJfc2xpY2UpO1xuIFx0UlVOX1RFU1RTKGJwZl9xZGlzY19mYWlsX191bnRydXN0ZWRfd3JpdGUpO1xuIFx0UlVOX1RFU1RTKGJwZl9xZGlzY19keW5wdHJfdXNlX2FmdGVyX2ludmFsaWRhdGVfY2xvbmUpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHJfcmV0dXJuZWRfc2xpY2UuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHJfcmV0dXJuZWRfc2xpY2UuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjk0MGFiYTdkOGFiZmVcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHJfcmV0dXJuZWRfc2xpY2UuY1xuQEAgLTAsMCAmIzQzOzEsNzYgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY3ZtbGludXguaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDticGZfZXhwZXJpbWVudGFsLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7YnBmX3FkaXNjX2NvbW1vbi5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2JwZl9taXNjLmhcJiMzNDtcbiYjNDM7XG4mIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtHUExcJiMzNDs7XG4mIzQzO1xuJiM0MztpbnQgcHJvdG87XG4mIzQzO1xuJiM0MztzdGF0aWMgX19ub2lubGluZSBzdHJ1Y3QgZXRoaGRyICpzbGljZV9pbl9zdWJwcm9nKHN0cnVjdCBza19idWZmICpza2IpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX2R5bnB0ciBwdHI7XG4mIzQzO1xuJiM0MztcdGJwZl9keW5wdHJfZnJvbV9za2IoKHN0cnVjdCBfX3NrX2J1ZmYgKilza2IsIDAsIFx1MDAyNnB0cik7XG4mIzQzO1x0cmV0dXJuIGJwZl9keW5wdHJfc2xpY2UoXHUwMDI2cHRyLCAwLCBOVUxMLCBzaXplb2Yoc3RydWN0IGV0aGhkcikpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7c3RydWN0X29wc1wmIzM0OylcbiYjNDM7X19mYWlsdXJlIF9fbXNnKFwmIzM0O2ludmFsaWQgbWVtIGFjY2VzcyAmIzM5O3NjYWxhciYjMzk7XCYjMzQ7KVxuJiM0MztpbnQgQlBGX1BST0coaW52YWxpZF9keW5wdHJfcmV0dXJuZWRfc2xpY2UsIHN0cnVjdCBza19idWZmICpza2IsXG4mIzQzO1x0ICAgICBzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IGJwZl9za19idWZmX3B0ciAqdG9fZnJlZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBldGhoZHIgKmhkcjtcbiYjNDM7XG4mIzQzO1x0aGRyID0gc2xpY2VfaW5fc3VicHJvZyhza2IpO1xuJiM0MztcdGlmICghaGRyKSB7XG4mIzQzO1x0XHRicGZfcWRpc2Nfc2tiX2Ryb3Aoc2tiLCB0b19mcmVlKTtcbiYjNDM7XHRcdHJldHVybiBORVRfWE1JVF9EUk9QO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0YnBmX3FkaXNjX3NrYl9kcm9wKHNrYiwgdG9fZnJlZSk7XG4mIzQzO1xuJiM0MztcdC8qIHRoaXMgc2hvdWxkIGZhaWwgKi9cbiYjNDM7XHRwcm90byA9IGhkci1cdTAwM2VoX3Byb3RvO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gTkVUX1hNSVRfRFJPUDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3N0cnVjdF9vcHNcJiMzNDspXG4mIzQzO19fYXV4aWxpYXJ5XG4mIzQzO3N0cnVjdCBza19idWZmICpCUEZfUFJPRyhicGZfcWRpc2NfdGVzdF9kZXF1ZXVlLCBzdHJ1Y3QgUWRpc2MgKnNjaClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7c3RydWN0X29wc1wmIzM0OylcbiYjNDM7X19hdXhpbGlhcnlcbiYjNDM7aW50IEJQRl9QUk9HKGJwZl9xZGlzY190ZXN0X2luaXQsIHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXG4mIzQzO1x0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3N0cnVjdF9vcHNcJiMzNDspXG4mIzQzO19fYXV4aWxpYXJ5XG4mIzQzO3ZvaWQgQlBGX1BST0coYnBmX3FkaXNjX3Rlc3RfcmVzZXQsIHN0cnVjdCBRZGlzYyAqc2NoKVxuJiM0Mzt7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtzdHJ1Y3Rfb3BzXCYjMzQ7KVxuJiM0MztfX2F1eGlsaWFyeVxuJiM0Mzt2b2lkIEJQRl9QUk9HKGJwZl9xZGlzY190ZXN0X2Rlc3Ryb3ksIHN0cnVjdCBRZGlzYyAqc2NoKVxuJiM0Mzt7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDsuc3RydWN0X29wc1wmIzM0OylcbiYjNDM7c3RydWN0IFFkaXNjX29wcyB0ZXN0ID0ge1xuJiM0MztcdC5lbnF1ZXVlICAgPSAodm9pZCAqKWludmFsaWRfZHlucHRyX3JldHVybmVkX3NsaWNlLFxuJiM0MztcdC5kZXF1ZXVlICAgPSAodm9pZCAqKWJwZl9xZGlzY190ZXN0X2RlcXVldWUsXG4mIzQzO1x0LmluaXQgICAgICA9ICh2b2lkICopYnBmX3FkaXNjX3Rlc3RfaW5pdCxcbiYjNDM7XHQucmVzZXQgICAgID0gKHZvaWQgKilicGZfcWRpc2NfdGVzdF9yZXNldCxcbiYjNDM7XHQuZGVzdHJveSAgID0gKHZvaWQgKilicGZfcWRpc2NfdGVzdF9kZXN0cm95LFxuJiM0MztcdC5pZCAgICAgICAgPSBcJiMzNDticGZfcWRpc2NfdGVzdFwmIzM0OyxcbiYjNDM7fTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jXG5pbmRleCAxY2Q2MWQ3MmMxNjZmLi45MmY5ZjllYTA1MzIxIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jXG5AQCAtMTg5Miw2ICYjNDM7MTg5Miw1NSBAQCBpbnQgY2xvbmVfaW52YWxpZGF0ZTQodm9pZCAqY3R4KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgX19ub2lubGluZSB2b2lkIGNsb25lX3NsaWNlX2luX3N1YnByb2coc3RydWN0IGJwZl9keW5wdHIgKnB0ciwgaW50ICoqZGF0YSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBicGZfZHlucHRyIGNsb25lO1xuJiM0MztcbiYjNDM7XHRicGZfZHlucHRyX2Nsb25lKHB0ciwgXHUwMDI2Y2xvbmUpO1xuJiM0MztcdCpkYXRhID0gYnBmX2R5bnB0cl9kYXRhKFx1MDAyNmNsb25lLCAwLCBzaXplb2YodmFsKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIEEgc2xpY2UgdGhhdCBlc2NhcGVzIHRoZSBjbG9uZSYjMzk7cyBjYWxsIGZyYW1lIHJlbWFpbnMgdmFsaWQgd2hpbGUgdGhlXG4mIzQzOyAqIHNoYXJlZCByaW5nYnVmIHJlc2VydmF0aW9uIGlzIGxpdmUuXG4mIzQzOyAqL1xuJiM0MztTRUMoXCYjMzQ7P3Jhd190cFwmIzM0OylcbiYjNDM7X19zdWNjZXNzXG4mIzQzO2ludCBjbG9uZV9zbGljZV9yZXR1cm5lZF9mcmFtZV92YWxpZCh2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX2R5bnB0ciBwdHI7XG4mIzQzO1x0aW50ICpkYXRhID0gTlVMTDtcbiYjNDM7XG4mIzQzO1x0YnBmX3JpbmdidWZfcmVzZXJ2ZV9keW5wdHIoXHUwMDI2cmluZ2J1ZiwgdmFsLCAwLCBcdTAwMjZwdHIpO1xuJiM0MztcdGNsb25lX3NsaWNlX2luX3N1YnByb2coXHUwMDI2cHRyLCBcdTAwMjZkYXRhKTtcbiYjNDM7XHRpZiAoZGF0YSlcbiYjNDM7XHRcdCpkYXRhID0gMTIzO1xuJiM0MztcdGJwZl9yaW5nYnVmX3N1Ym1pdF9keW5wdHIoXHUwMDI2cHRyLCAwKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFJlbGVhc2luZyB0aGUgc2hhcmVkIHJlc2VydmF0aW9uIG11c3QgaW52YWxpZGF0ZSBhIHNsaWNlIHRoYXQgZXNjYXBlZFxuJiM0MzsgKiBmcm9tIGEgY2xvbmUmIzM5O3MgY2FsbCBmcmFtZS5cbiYjNDM7ICovXG4mIzQzO1NFQyhcJiMzNDs/cmF3X3RwXCYjMzQ7KVxuJiM0MztfX2ZhaWx1cmUgX19tc2coXCYjMzQ7aW52YWxpZCBtZW0gYWNjZXNzICYjMzk7c2NhbGFyJiMzOTtcJiMzNDspXG4mIzQzO2ludCBjbG9uZV9zbGljZV9yZXR1cm5lZF9mcmFtZV9pbnZhbGlkKHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBicGZfZHlucHRyIHB0cjtcbiYjNDM7XHRpbnQgKmRhdGEgPSBOVUxMO1xuJiM0MztcbiYjNDM7XHRicGZfcmluZ2J1Zl9yZXNlcnZlX2R5bnB0cihcdTAwMjZyaW5nYnVmLCB2YWwsIDAsIFx1MDAyNnB0cik7XG4mIzQzO1x0Y2xvbmVfc2xpY2VfaW5fc3VicHJvZyhcdTAwMjZwdHIsIFx1MDAyNmRhdGEpO1xuJiM0MztcdGJwZl9yaW5nYnVmX3N1Ym1pdF9keW5wdHIoXHUwMDI2cHRyLCAwKTtcbiYjNDM7XHRpZiAoZGF0YSlcbiYjNDM7XHRcdC8qIHRoaXMgc2hvdWxkIGZhaWwgKi9cbiYjNDM7XHRcdCpkYXRhID0gMTIzO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiAvKiBJbnZhbGlkYXRpbmcgYSBkeW5wdHIgc2hvdWxkIGludmFsaWRhdGUgYW55IGRhdGEgc2xpY2VzXG4gICogb2YgaXRzIHBhcmVudFxuICAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA0OjQ5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXQmIzM0OywKICAgICYjMzQ7cHJlcGFyZV9mdW5jX2V4aXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyByZXBhcmVudF9keW5wdHJfc2xpY2VzX29uX2Z1bmNfZXhpdCgpIGluIGtlcm5lbC9icGYvdmVyaWZpZXIuYywgY2FsbGVkIGZyb20gcHJlcGFyZV9mdW5jX2V4aXQoKSB0byB1cGRhdGUgZHlucHRyIGxpbmVhZ2UgdHJhY2tpbmcgd2hlbiBjYWxsZWUgZnJhbWVzIHJldHVybi4gVGhpcyBtb2RpZmllcyBjb3JlIEJQRiB2ZXJpZmllciBsb2dpYyByZWFjaGFibGUgdmlhIEJQRiBwcm9ncmFtIGxvYWRpbmcgc3lzY2FsbHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwYjRkYzliMjg3NmFiNGNlYTk0MTNjMmQ4NGFjZTk2NzE0MDYzYmQzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMTAgMDQ6NDk6MTggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKaW5kZXggNzJhM2Y1OTk4ZGQyNy4uZWU0MWI3Mzg2Zjc1MiAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwpAQCAtODAwLDYgJiM0Mzs4MDAsMzkgQEAgc3RhdGljIGludCBkeW5wdHJfcmVmX2NudChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgdl9wYXJlbnRfaWQpCiAJcmV0dXJuIHJlZl9jbnQ7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCByZXBhcmVudF9keW5wdHJfc2xpY2VzX29uX2Z1bmNfZXhpdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAomIzQzOwkJCQkJCXN0cnVjdCBicGZfZnVuY19zdGF0ZSAqY2FsbGVlKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqdnN0YXRlID0gZW52LSZndDtjdXJfc3RhdGU7CiYjNDM7CXN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGU7CiYjNDM7CXN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWc7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgY2FsbGVlLSZndDthbGxvY2F0ZWRfc3RhY2sgLyBCUEZfUkVHX1NJWkU7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzdHJ1Y3QgYnBmX3N0YWNrX3N0YXRlICpzbG90ID0gJmFtcDtjYWxsZWUtJmd0O3N0YWNrW2ldOwomIzQzOwkJc3RydWN0IGJwZl9yZWdfc3RhdGUgKmR5bnB0ciA9ICZhbXA7c2xvdC0mZ3Q7c3BpbGxlZF9wdHI7CiYjNDM7CiYjNDM7CQlpZiAoc2xvdC0mZ3Q7c2xvdF90eXBlWzBdICE9IFNUQUNLX0RZTlBUUiB8fAomIzQzOwkJICAgICFkeW5wdHItJmd0O2R5bnB0ci5maXJzdF9zbG90IHx8CiYjNDM7CQkgICAgIWR5bnB0ci0mZ3Q7cGFyZW50X2lkKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIEEgY2FsbGVlIGNhbiBzcGlsbCBhIHNsaWNlIGRlcml2ZWQgZnJvbSBpdHMgbG9jYWwgZHlucHRyIGludG8KJiM0MzsJCSAqIHRoZSBjYWxsZXImIzM5O3Mgc3RhY2suIFRoZSBzbGljZSB0aGVuIG91dGxpdmVzIHRoZSBkeW5wdHIgaWQgdGhhdAomIzQzOwkJICogbGlua3MgaXQgdG8gdGhlIHJlc3Qgb2YgdGhlIG9iamVjdCB0cmVlLiBQcmVzZXJ2ZSB0aGF0IGxpbmsgYnkKJiM0MzsJCSAqIG1ha2luZyBlc2NhcGVkIHNsaWNlcyBjaGlsZHJlbiBvZiB0aGUgZHlucHRyJiMzOTtzIHBhcmVudCBiZWZvcmUKJiM0MzsJCSAqIHRoZSBjYWxsZWUgZnJhbWUgaXMgZnJlZWQuCiYjNDM7CQkgKi8KJiM0MzsJCWJwZl9mb3JfZWFjaF9yZWdfaW5fdnN0YXRlKHZzdGF0ZSwgc3RhdGUsIHJlZywgKHsKJiM0MzsJCQlpZiAoc3RhdGUgPT0gY2FsbGVlIHx8IHJlZy0mZ3Q7cGFyZW50X2lkICE9IGR5bnB0ci0mZ3Q7aWQgfHwKJiM0MzsJCQkgICAgYmFzZV90eXBlKHJlZy0mZ3Q7dHlwZSkgIT0gUFRSX1RPX01FTSkKJiM0MzsJCQkJY29udGludWU7CiYjNDM7CQkJcmVnLSZndDtwYXJlbnRfaWQgPSBkeW5wdHItJmd0O3BhcmVudF9pZDsKJiM0MzsJCX0pKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgZGVzdHJveV9pZl9keW5wdHJfc3RhY2tfc2xvdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAogCQkJCSAgICAgICAgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZSwgaW50IHNwaSkKIHsKQEAgLTEwMzk5LDYgJiM0MzsxMDQzMiw3IEBAIHN0YXRpYyBpbnQgcHJlcGFyZV9mdW5jX2V4aXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50ICppbnNuX2lkeCkKIAkJcHJpbnRfdmVyaWZpZXJfc3RhdGUoZW52LCBzdGF0ZSwgY2FsbGVyLSZndDtmcmFtZW5vLCB0cnVlKTsKIAl9CiAJYWNjb3VudF9wcm9jZXNzZWRfaW5zbnMoZW52LCBjYWxsZWUsIGNhbGxlcik7CiYjNDM7CXJlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0KGVudiwgY2FsbGVlKTsKIAkvKiBjbGVhciBldmVyeXRoaW5nIGluIHRoZSBjYWxsZWUuIEluIGNhc2Ugb2YgZXhjZXB0aW9uYWwgZXhpdHMgdXNpbmcKIAkgKiBicGZfdGhyb3csIHRoaXMgd2lsbCBiZSBkb25lIGJ5IGNvcHlfdmVyaWZpZXJfc3RhdGUgZm9yIGV4dHJhIGZyYW1lcy4gKi8KIAlmcmVlX2Z1bmNfc3RhdGUoY2FsbGVlKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9xZGlzYy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX3FkaXNjLmMKaW5kZXggNmRiZDE0ODczNDNjMC4uMTIyZWNiN2U5OGUyYSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX3FkaXNjLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX3FkaXNjLmMKQEAgLTExLDYgJiM0MzsxMSw3IEBACiAjaW5jbHVkZSAmIzM0O2JwZl9xZGlzY19mYWlsX19pbnZhbGlkX2R5bnB0ci5za2VsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDticGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHJfc2xpY2Uuc2tlbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7YnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX2Nyb3NzX2ZyYW1lLnNrZWwuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDticGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHJfcmV0dXJuZWRfc2xpY2Uuc2tlbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7YnBmX3FkaXNjX2ZhaWxfX3VudHJ1c3RlZF93cml0ZS5za2VsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDticGZfcWRpc2NfZHlucHRyX3VzZV9hZnRlcl9pbnZhbGlkYXRlX2Nsb25lLnNrZWwuaCYjMzQ7CiAKQEAgLTIzMCw2ICYjNDM7MjMxLDcgQEAgdm9pZCB0ZXN0X25zX2JwZl9xZGlzYyh2b2lkKQogCQl0ZXN0X2luY29tcGxfb3BzKCk7CiAJUlVOX1RFU1RTKGJwZl9xZGlzY19mYWlsX19pbnZhbGlkX2R5bnB0cik7CiAJUlVOX1RFU1RTKGJwZl9xZGlzY19mYWlsX19pbnZhbGlkX2R5bnB0cl9jcm9zc19mcmFtZSk7CiYjNDM7CVJVTl9URVNUUyhicGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHJfcmV0dXJuZWRfc2xpY2UpOwogCVJVTl9URVNUUyhicGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHJfc2xpY2UpOwogCVJVTl9URVNUUyhicGZfcWRpc2NfZmFpbF9fdW50cnVzdGVkX3dyaXRlKTsKIAlSVU5fVEVTVFMoYnBmX3FkaXNjX2R5bnB0cl91c2VfYWZ0ZXJfaW52YWxpZGF0ZV9jbG9uZSk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX3JldHVybmVkX3NsaWNlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX3JldHVybmVkX3NsaWNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uOTQwYWJhN2Q4YWJmZQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHJfcmV0dXJuZWRfc2xpY2UuYwpAQCAtMCwwICYjNDM7MSw3NiBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O3ZtbGludXguaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O2JwZl9leHBlcmltZW50YWwuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDticGZfcWRpc2NfY29tbW9uLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7YnBmX21pc2MuaCYjMzQ7CiYjNDM7CiYjNDM7Y2hhciBfbGljZW5zZVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7OwomIzQzOwomIzQzO2ludCBwcm90bzsKJiM0MzsKJiM0MztzdGF0aWMgX19ub2lubGluZSBzdHJ1Y3QgZXRoaGRyICpzbGljZV9pbl9zdWJwcm9nKHN0cnVjdCBza19idWZmICpza2IpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnBmX2R5bnB0ciBwdHI7CiYjNDM7CiYjNDM7CWJwZl9keW5wdHJfZnJvbV9za2IoKHN0cnVjdCBfX3NrX2J1ZmYgKilza2IsIDAsICZhbXA7cHRyKTsKJiM0MzsJcmV0dXJuIGJwZl9keW5wdHJfc2xpY2UoJmFtcDtwdHIsIDAsIE5VTEwsIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSk7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3N0cnVjdF9vcHMmIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtpbnZhbGlkIG1lbSBhY2Nlc3MgJiMzOTtzY2FsYXImIzM5OyYjMzQ7KQomIzQzO2ludCBCUEZfUFJPRyhpbnZhbGlkX2R5bnB0cl9yZXR1cm5lZF9zbGljZSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKJiM0MzsJICAgICBzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IGJwZl9za19idWZmX3B0ciAqdG9fZnJlZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBldGhoZHIgKmhkcjsKJiM0MzsKJiM0MzsJaGRyID0gc2xpY2VfaW5fc3VicHJvZyhza2IpOwomIzQzOwlpZiAoIWhkcikgewomIzQzOwkJYnBmX3FkaXNjX3NrYl9kcm9wKHNrYiwgdG9fZnJlZSk7CiYjNDM7CQlyZXR1cm4gTkVUX1hNSVRfRFJPUDsKJiM0MzsJfQomIzQzOwomIzQzOwlicGZfcWRpc2Nfc2tiX2Ryb3Aoc2tiLCB0b19mcmVlKTsKJiM0MzsKJiM0MzsJLyogdGhpcyBzaG91bGQgZmFpbCAqLwomIzQzOwlwcm90byA9IGhkci0mZ3Q7aF9wcm90bzsKJiM0MzsKJiM0MzsJcmV0dXJuIE5FVF9YTUlUX0RST1A7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3N0cnVjdF9vcHMmIzM0OykKJiM0MztfX2F1eGlsaWFyeQomIzQzO3N0cnVjdCBza19idWZmICpCUEZfUFJPRyhicGZfcWRpc2NfdGVzdF9kZXF1ZXVlLCBzdHJ1Y3QgUWRpc2MgKnNjaCkKJiM0Mzt7CiYjNDM7CXJldHVybiBOVUxMOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtzdHJ1Y3Rfb3BzJiMzNDspCiYjNDM7X19hdXhpbGlhcnkKJiM0MztpbnQgQlBGX1BST0coYnBmX3FkaXNjX3Rlc3RfaW5pdCwgc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBubGF0dHIgKm9wdCwKJiM0MzsJICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiYjNDM7ewomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7c3RydWN0X29wcyYjMzQ7KQomIzQzO19fYXV4aWxpYXJ5CiYjNDM7dm9pZCBCUEZfUFJPRyhicGZfcWRpc2NfdGVzdF9yZXNldCwgc3RydWN0IFFkaXNjICpzY2gpCiYjNDM7ewomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtzdHJ1Y3Rfb3BzJiMzNDspCiYjNDM7X19hdXhpbGlhcnkKJiM0Mzt2b2lkIEJQRl9QUk9HKGJwZl9xZGlzY190ZXN0X2Rlc3Ryb3ksIHN0cnVjdCBRZGlzYyAqc2NoKQomIzQzO3sKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7LnN0cnVjdF9vcHMmIzM0OykKJiM0MztzdHJ1Y3QgUWRpc2Nfb3BzIHRlc3QgPSB7CiYjNDM7CS5lbnF1ZXVlICAgPSAodm9pZCAqKWludmFsaWRfZHlucHRyX3JldHVybmVkX3NsaWNlLAomIzQzOwkuZGVxdWV1ZSAgID0gKHZvaWQgKilicGZfcWRpc2NfdGVzdF9kZXF1ZXVlLAomIzQzOwkuaW5pdCAgICAgID0gKHZvaWQgKilicGZfcWRpc2NfdGVzdF9pbml0LAomIzQzOwkucmVzZXQgICAgID0gKHZvaWQgKilicGZfcWRpc2NfdGVzdF9yZXNldCwKJiM0MzsJLmRlc3Ryb3kgICA9ICh2b2lkICopYnBmX3FkaXNjX3Rlc3RfZGVzdHJveSwKJiM0MzsJLmlkICAgICAgICA9ICYjMzQ7YnBmX3FkaXNjX3Rlc3QmIzM0OywKJiM0Mzt9OwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuYwppbmRleCAxY2Q2MWQ3MmMxNjZmLi45MmY5ZjllYTA1MzIxIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuYwpAQCAtMTg5Miw2ICYjNDM7MTg5Miw1NSBAQCBpbnQgY2xvbmVfaW52YWxpZGF0ZTQodm9pZCAqY3R4KQogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIF9fbm9pbmxpbmUgdm9pZCBjbG9uZV9zbGljZV9pbl9zdWJwcm9nKHN0cnVjdCBicGZfZHlucHRyICpwdHIsIGludCAqKmRhdGEpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnBmX2R5bnB0ciBjbG9uZTsKJiM0MzsKJiM0MzsJYnBmX2R5bnB0cl9jbG9uZShwdHIsICZhbXA7Y2xvbmUpOwomIzQzOwkqZGF0YSA9IGJwZl9keW5wdHJfZGF0YSgmYW1wO2Nsb25lLCAwLCBzaXplb2YodmFsKSk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogQSBzbGljZSB0aGF0IGVzY2FwZXMgdGhlIGNsb25lJiMzOTtzIGNhbGwgZnJhbWUgcmVtYWlucyB2YWxpZCB3aGlsZSB0aGUKJiM0MzsgKiBzaGFyZWQgcmluZ2J1ZiByZXNlcnZhdGlvbiBpcyBsaXZlLgomIzQzOyAqLwomIzQzO1NFQygmIzM0Oz9yYXdfdHAmIzM0OykKJiM0MztfX3N1Y2Nlc3MKJiM0MztpbnQgY2xvbmVfc2xpY2VfcmV0dXJuZWRfZnJhbWVfdmFsaWQodm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9keW5wdHIgcHRyOwomIzQzOwlpbnQgKmRhdGEgPSBOVUxMOwomIzQzOwomIzQzOwlicGZfcmluZ2J1Zl9yZXNlcnZlX2R5bnB0cigmYW1wO3JpbmdidWYsIHZhbCwgMCwgJmFtcDtwdHIpOwomIzQzOwljbG9uZV9zbGljZV9pbl9zdWJwcm9nKCZhbXA7cHRyLCAmYW1wO2RhdGEpOwomIzQzOwlpZiAoZGF0YSkKJiM0MzsJCSpkYXRhID0gMTIzOwomIzQzOwlicGZfcmluZ2J1Zl9zdWJtaXRfZHlucHRyKCZhbXA7cHRyLCAwKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogUmVsZWFzaW5nIHRoZSBzaGFyZWQgcmVzZXJ2YXRpb24gbXVzdCBpbnZhbGlkYXRlIGEgc2xpY2UgdGhhdCBlc2NhcGVkCiYjNDM7ICogZnJvbSBhIGNsb25lJiMzOTtzIGNhbGwgZnJhbWUuCiYjNDM7ICovCiYjNDM7U0VDKCYjMzQ7P3Jhd190cCYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O2ludmFsaWQgbWVtIGFjY2VzcyAmIzM5O3NjYWxhciYjMzk7JiMzNDspCiYjNDM7aW50IGNsb25lX3NsaWNlX3JldHVybmVkX2ZyYW1lX2ludmFsaWQodm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9keW5wdHIgcHRyOwomIzQzOwlpbnQgKmRhdGEgPSBOVUxMOwomIzQzOwomIzQzOwlicGZfcmluZ2J1Zl9yZXNlcnZlX2R5bnB0cigmYW1wO3JpbmdidWYsIHZhbCwgMCwgJmFtcDtwdHIpOwomIzQzOwljbG9uZV9zbGljZV9pbl9zdWJwcm9nKCZhbXA7cHRyLCAmYW1wO2RhdGEpOwomIzQzOwlicGZfcmluZ2J1Zl9zdWJtaXRfZHlucHRyKCZhbXA7cHRyLCAwKTsKJiM0MzsJaWYgKGRhdGEpCiYjNDM7CQkvKiB0aGlzIHNob3VsZCBmYWlsICovCiYjNDM7CQkqZGF0YSA9IDEyMzsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogLyogSW52YWxpZGF0aW5nIGEgZHlucHRyIHNob3VsZCBpbnZhbGlkYXRlIGFueSBkYXRhIHNsaWNlcwogICogb2YgaXRzIHBhcmVudAogICovCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA0OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0NDYKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTGludXggS2VybmVsIFBhdGNoIGZvciBTeXprYWxsZXIgRnV6emluZyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gYXNzZXNzIHRoaXMgTGludXgga2VybmVsIHBhdGNoIHNlcmllcyBmb3IgaXRzIGZ1enppbmcgcG90ZW50aWFsIHdpdGggc3l6a2FsbGVyLiBUaGUgdXNlciBpcyBhc2tpbmcgdGhlIHJpZ2h0IHF1ZXN0aW9ucyDigJMgaXMgdGhpcyB3b3J0aCBvdXIgdGltZSwgd2hhdCBjb25maWdzIGRvIHdlIG5lZWQgdG8gZm9jdXMgb24sIGFuZCB3aGF0IHN5bWJvbHMgYXJlIG1vc3QgcmVsZXZhbnQ/IEl0JiMzOTtzIGFsbCBhYm91dCB0cmlhZ2UgaGVyZSDigJMgc3RhbmRhcmQgTGludXgga2VybmVsIG1haW50ZW5hbmNlLCBRQSwgYW5kIHNlY3VyaXR5IGVuZ2luZWVyaW5nLiBUaGlzIGlzIGEgY29tcGxldGVseSBiZW5pZ24gYW5kIGRlZmVuc2l2ZSBvcGVyYXRpb24sIHNvIG5vIHdvcnJpZXMgdGhlcmUuCgpMZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBwYXRjaCBpdHNlbGYuIEl0IHNlZW1zIHRoZSBjb3JlIG1vZGlmaWNhdGlvbiBpcyB3aXRoaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgYW5kIGl0cyBhc3NvY2lhdGVkIHNlbGZ0ZXN0cyBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmLy4uLmAuIFNwZWNpZmljYWxseSwgdGhlcmUmIzM5O3MgYSBuZXcgZnVuY3Rpb24sIGByZXBhcmVudF9keW5wdHJfc2xpY2VzX29uX2Z1bmNfZXhpdGAsIGJlaW5nIGludHJvZHVjZWQgd2l0aGluIGB2ZXJpZmllci5jYCwgYW5kIGl0JiMzOTtzIGJlaW5nIGNhbGxlZCBmcm9tIGBwcmVwYXJlX2Z1bmNfZXhpdGAuIE9rYXksIGB2ZXJpZmllci5jYC4uLiB0aGF0JiMzOTtzIGludGVyZXN0aW5nLiBUaGUgQlBGIHZlcmlmaWVyIGlzIGFsd2F5cyBhIGdvb2QgdGFyZ2V0LgoKTm93LCBJJiMzOTtsbCB1c2UgYGdyZXBwZXJgIChvciwgaWYgSSBoYXZlIHRvLCBgcmVhZC1maWxlYCkgdG8gZ2V0IHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IG9mIGB2ZXJpZmllci5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBrZXJuZWwgY29uZmlndXJhdGlvbnMgYXJlIGNydWNpYWwgZm9yIGVuYWJsaW5nIHRoaXMgZnVuY3Rpb25hbGl0eS4gS25vd2luZyB0aGUgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zIHdpbGwgYmUga2V5IHRvIGdldHRpbmcgYSBmdWxsIHBpY3R1cmUuIEkgbmVlZCB0byBpZGVudGlmeSB3aGljaCBmdW5jdGlvbnMgYXJlICptb3N0KiBsaWtlbHkgdG8gYmUgdHJpZ2dlcmVkIGJ5IGZ1enppbmcuIEFyZSB0aGVyZSBhbnkgY3JpdGljYWwgZGF0YSBzdHJ1Y3R1cmVzIG9yIG9wZXJhdGlvbnMgcmVsYXRlZCB0byBgZHlucHRyYCAoZHluYW1pYyBwb2ludGVyKSB0aGF0IGFyZSBub3cgaW4gcGxheT8gTXkgZ29hbCBpcyB0byBxdWlja2x5IHBpbnBvaW50IHRoZSBtb3N0IGludGVyZXN0aW5nIHN5bWJvbHMgYW5kIHBvdGVudGlhbCBjcmFzaCBzdXJmYWNlcyBmb3Igc3l6a2FsbGVyLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDQ6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9Nzg0PXN0YXRpYyBpbnQgZHlucHRyX3JlZl9jbnQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHZfcGFyZW50X2lkKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04MDItXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6ODAzOnN0YXRpYyB2b2lkIHJlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtODA0LVx0XHRcdFx0XHRcdHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqY2FsbGVlKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMDM2Nz1zdGF0aWMgaW50IHByZXBhcmVfZnVuY19leGl0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCAqaW5zbl9pZHgpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwNDM0LVx0YWNjb3VudF9wcm9jZXNzZWRfaW5zbnMoZW52LCBjYWxsZWUsIGNhbGxlcik7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTA0MzU6XHRyZXBhcmVudF9keW5wdHJfc2xpY2VzX29uX2Z1bmNfZXhpdChlbnYsIGNhbGxlZSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTA0MzYtXHQvKiBjbGVhciBldmVyeXRoaW5nIGluIHRoZSBjYWxsZWUuIEluIGNhc2Ugb2YgZXhjZXB0aW9uYWwgZXhpdHMgdXNpbmdcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwNDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MzQ2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIEtlcm5lbCBCUEYgVmVyaWZpZXIgRnVuY3Rpb24gRXhpdCBIYW5kbGluZyoqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoZSBCUEYgdmVyaWZpZXIgaGFuZGxlcyBmdW5jdGlvbiBleGl0cywgcGFydGljdWxhcmx5IHdpdGggcmVzcGVjdCB0byBkeW5hbWljIHBvaW50ZXIgc2xpY2VzLiBMZXQmIzM5O3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgcHJlcGFyZV9mdW5jX2V4aXRgIGFuZCBgcmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXRgIGZ1bmN0aW9ucyB3aXRoaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIFRoZXNlIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyBoYW5kbGluZyB3aGF0IGhhcHBlbnMgd2hlbiBhIEJQRiBmdW5jdGlvbiBpcyBleGl0aW5nLCBhbmQgdGhleSYjMzk7cmUgbGlrZWx5IHdoZXJlIHRoZSBsb2dpYyBmb3IgcG9pbnRlciBtYW5hZ2VtZW50IHJlc2lkZXMuIEkmIzM5O2xsIGZvY3VzIG15IGF0dGVudGlvbiBhcm91bmQgbGluZSA4MDAgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgYW5kIHRha2UgYSBnb29kIGxvb2sgYXQgdGhlIGNvZGUgYmxvY2sgaW4gdGhhdCBhcmVhLCBhbmQgdGhlIHJlbGF0ZWQgY29kZSwgdG8gdW5kZXJzdGFuZCB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIGdyYXNwIGhvdyB0aGUgZHluYW1pYyBwb2ludGVycyBhbmQgc2xpY2VzIGFyZSBiZWluZyBtYW5hZ2VkLCBlc3BlY2lhbGx5IHRvIGZpZ3VyZSBvdXQgdGhlIGJ1ZyB0aGF0IGhhcyBiZWVuIHJlcG9ydGVkLiBIb3BlZnVsbHksIGJ5IHVuZGVyc3RhbmRpbmcgdGhlc2Uga2V5IHJvdXRpbmVzLCBJIGNhbiBpZGVudGlmeSB0aGUgcm9vdCBjYXVzZSBvZiB0aGUgaXNzdWUgYW5kIHBpbnBvaW50IGEgc29sdXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDQ6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDgwMDpcdFx0cmV0dXJuIHJlZl9jbnQ7XG4gODAxOlx0fVxuIDgwMjpcdFxuIDgwMzpcdHN0YXRpYyB2b2lkIHJlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gODA0Olx0XHRcdFx0XHRcdFx0c3RydWN0IGJwZl9mdW5jX3N0YXRlICpjYWxsZWUpXG4gODA1Olx0e1xuIDgwNjpcdFx0c3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqdnN0YXRlID0gZW52LVx1MDAzZWN1cl9zdGF0ZTtcbiA4MDc6XHRcdHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGU7XG4gODA4Olx0XHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnO1xuIDgwOTpcdFx0aW50IGk7XG4gODEwOlx0XG4gODExOlx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjYWxsZWUtXHUwMDNlYWxsb2NhdGVkX3N0YWNrIC8gQlBGX1JFR19TSVpFOyBpJiM0MzsmIzQzOykge1xuIDgxMjpcdFx0XHRzdHJ1Y3QgYnBmX3N0YWNrX3N0YXRlICpzbG90ID0gXHUwMDI2Y2FsbGVlLVx1MDAzZXN0YWNrW2ldO1xuIDgxMzpcdFx0XHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqZHlucHRyID0gXHUwMDI2c2xvdC1cdTAwM2VzcGlsbGVkX3B0cjtcbiA4MTQ6XHRcbiA4MTU6XHRcdFx0aWYgKHNsb3QtXHUwMDNlc2xvdF90eXBlWzBdICE9IFNUQUNLX0RZTlBUUiB8fFxuIDgxNjpcdFx0XHQgICAgIWR5bnB0ci1cdTAwM2VkeW5wdHIuZmlyc3Rfc2xvdCB8fFxuIDgxNzpcdFx0XHQgICAgIWR5bnB0ci1cdTAwM2VwYXJlbnRfaWQpXG4gODE4Olx0XHRcdFx0Y29udGludWU7XG4gODE5Olx0XG4gODIwOlx0XHRcdC8qXG4gODIxOlx0XHRcdCAqIEEgY2FsbGVlIGNhbiBzcGlsbCBhIHNsaWNlIGRlcml2ZWQgZnJvbSBpdHMgbG9jYWwgZHlucHRyIGludG9cbiA4MjI6XHRcdFx0ICogdGhlIGNhbGxlciYjMzk7cyBzdGFjay4gVGhlIHNsaWNlIHRoZW4gb3V0bGl2ZXMgdGhlIGR5bnB0ciBpZCB0aGF0XG4gODIzOlx0XHRcdCAqIGxpbmtzIGl0IHRvIHRoZSByZXN0IG9mIHRoZSBvYmplY3QgdHJlZS4gUHJlc2VydmUgdGhhdCBsaW5rIGJ5XG4gODI0Olx0XHRcdCAqIG1ha2luZyBlc2NhcGVkIHNsaWNlcyBjaGlsZHJlbiBvZiB0aGUgZHlucHRyJiMzOTtzIHBhcmVudCBiZWZvcmVcbiA4MjU6XHRcdFx0ICogdGhlIGNhbGxlZSBmcmFtZSBpcyBmcmVlZC5cbiA4MjY6XHRcdFx0ICovXG4gODI3Olx0XHRcdGJwZl9mb3JfZWFjaF9yZWdfaW5fdnN0YXRlKHZzdGF0ZSwgc3RhdGUsIHJlZywgKHtcbiA4Mjg6XHRcdFx0XHRpZiAoc3RhdGUgPT0gY2FsbGVlIHx8IHJlZy1cdTAwM2VwYXJlbnRfaWQgIT0gZHlucHRyLVx1MDAzZWlkIHx8XG4gODI5Olx0XHRcdFx0ICAgIGJhc2VfdHlwZShyZWctXHUwMDNldHlwZSkgIT0gUFRSX1RPX01FTSlcbiA4MzA6XHRcdFx0XHRcdGNvbnRpbnVlO1xuIDgzMTpcdFx0XHRcdHJlZy1cdTAwM2VwYXJlbnRfaWQgPSBkeW5wdHItXHUwMDNlcGFyZW50X2lkO1xuIDgzMjpcdFx0XHR9KSk7XG4gODMzOlx0XHR9XG4gODM0Olx0fVxuIDgzNTpcdFxuIDgzNjpcdHN0YXRpYyBpbnQgZGVzdHJveV9pZl9keW5wdHJfc3RhY2tfc2xvdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIDgzNzpcdFx0XHRcdFx0ICAgICAgICBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlLCBpbnQgc3BpKVxuIDgzODpcdHtcbiA4Mzk6XHRcdGludCBlcnIgPSAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA0OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczMjkKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgQ29tcGxleCBDb2RlOiBBIEZvY3VzZWQgSW52ZXN0aWdhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGNvZGViYXNlLCBhbmQgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBpc3N1ZS4gTXkgbWVudGFsIG1hcCBpcyBsZWFkaW5nIG1lIHRvIGBwcmVwYXJlX2Z1bmNfZXhpdGAuIExldCYjMzk7cyB6ZXJvIGluIG9uIHRoYXQgc2VjdGlvbiwgYXJvdW5kIGxpbmUgMTA0MDAuIFRoYXQmIzM5O3Mgd2hlcmUgSSBhbnRpY2lwYXRlIHRoZSByZWxldmFudCBsb2dpYyByZXNpZGVzLiBJJiMzOTttIGZvY3VzaW5nIG15IGF0dGVudGlvbiB0aGVyZSBiZWNhdXNlIEkgaGF2ZSBhIGh1bmNoIHJlbGF0ZWQgdG8gdGhlIGZhaWx1cmUgbW9kZSBhbmQgdGhhdCBwYXJ0aWN1bGFyIGZ1bmN0aW9uIGlzIGluIG15IHRhcmdldCB6b25lIGZvciB0aGUga2luZCBvZiBwcm9ibGVtIEkmIzM5O20gdHJ5aW5nIHRvIHNvbHZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA0OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTA0MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA0MjA6XHRcdCAqIGNvbnZlcmdlcyBpc19zdGF0ZV92aXNpdGVkKCkgd291bGQgcHJ1bmUgdGhhdCB2aXNpdCBldmVudHVhbGx5LlxuMTA0MjE6XHRcdCAqL1xuMTA0MjI6XHRcdGluX2NhbGxiYWNrX2ZuID0gY2FsbGVlLVx1MDAzZWluX2NhbGxiYWNrX2ZuO1xuMTA0MjM6XHRcdGlmIChpbl9jYWxsYmFja19mbilcbjEwNDI0Olx0XHRcdCppbnNuX2lkeCA9IGNhbGxlZS1cdTAwM2VjYWxsc2l0ZTtcbjEwNDI1Olx0XHRlbHNlXG4xMDQyNjpcdFx0XHQqaW5zbl9pZHggPSBjYWxsZWUtXHUwMDNlY2FsbHNpdGUgJiM0MzsgMTtcbjEwNDI3Olx0XG4xMDQyODpcdFx0aWYgKGVudi1cdTAwM2Vsb2cubGV2ZWwgXHUwMDI2IEJQRl9MT0dfTEVWRUwpIHtcbjEwNDI5Olx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDtyZXR1cm5pbmcgZnJvbSBjYWxsZWU6XFxuXCYjMzQ7KTtcbjEwNDMwOlx0XHRcdHByaW50X3ZlcmlmaWVyX3N0YXRlKGVudiwgc3RhdGUsIGNhbGxlZS1cdTAwM2VmcmFtZW5vLCB0cnVlKTtcbjEwNDMxOlx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDt0byBjYWxsZXIgYXQgJWQ6XFxuXCYjMzQ7LCAqaW5zbl9pZHgpO1xuMTA0MzI6XHRcdFx0cHJpbnRfdmVyaWZpZXJfc3RhdGUoZW52LCBzdGF0ZSwgY2FsbGVyLVx1MDAzZWZyYW1lbm8sIHRydWUpO1xuMTA0MzM6XHRcdH1cbjEwNDM0Olx0XHRhY2NvdW50X3Byb2Nlc3NlZF9pbnNucyhlbnYsIGNhbGxlZSwgY2FsbGVyKTtcbjEwNDM1Olx0XHRyZXBhcmVudF9keW5wdHJfc2xpY2VzX29uX2Z1bmNfZXhpdChlbnYsIGNhbGxlZSk7XG4xMDQzNjpcdFx0LyogY2xlYXIgZXZlcnl0aGluZyBpbiB0aGUgY2FsbGVlLiBJbiBjYXNlIG9mIGV4Y2VwdGlvbmFsIGV4aXRzIHVzaW5nXG4xMDQzNzpcdFx0ICogYnBmX3Rocm93LCB0aGlzIHdpbGwgYmUgZG9uZSBieSBjb3B5X3ZlcmlmaWVyX3N0YXRlIGZvciBleHRyYSBmcmFtZXMuICovXG4xMDQzODpcdFx0ZnJlZV9mdW5jX3N0YXRlKGNhbGxlZSk7XG4xMDQzOTpcdFx0c3RhdGUtXHUwMDNlZnJhbWVbc3RhdGUtXHUwMDNlY3VyZnJhbWUtLV0gPSBOVUxMO1xuMTA0NDA6XHRcdGludmFsaWRhdGVfb3V0Z29pbmdfc3RhY2tfYXJncyhlbnYsIGNhbGxlcik7XG4xMDQ0MTpcdFxuMTA0NDI6XHRcdC8qIGZvciBjYWxsYmFja3Mgd2lkZW4gaW1wcmVjaXNlIHNjYWxhcnMgdG8gbWFrZSBwcm9ncmFtcyBsaWtlIGJlbG93IHZlcmlmeTpcbjEwNDQzOlx0XHQgKlxuMTA0NDQ6XHRcdCAqICAgc3RydWN0IGN0eCB7IGludCBpOyB9XG4xMDQ0NTpcdFx0ICogICB2b2lkIGNiKGludCBpZHgsIHN0cnVjdCBjdHggKmN0eCkgeyBjdHgtXHUwMDNlaSYjNDM7JiM0Mzs7IC4uLiB9XG4xMDQ0NjpcdFx0ICogICAuLi5cbjEwNDQ3Olx0XHQgKiAgIHN0cnVjdCBjdHggPSB7IC5pID0gMDsgfVxuMTA0NDg6XHRcdCAqICAgYnBmX2xvb3AoMTAwLCBjYiwgXHUwMDI2Y3R4LCAwKTtcbjEwNDQ5Olx0XHQgKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA0OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwOTYKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA1OTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCUEYgVmVyaWZpZXIgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBpcyB0aGlzIGNvZGUgZXZlbiByZWFjaGFibGU/IFllcCwgaXQmIzM5O3MgcmlnaHQgdGhlcmUgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIFRoZSBCUEYgdmVyaWZpZXIgaXMgYSBjcml0aWNhbCBwYXJ0IG9mIHRoZSBMaW51eCBrZXJuZWwsIGFjY2Vzc2libGUgdGhyb3VnaCB0aGUgYGJwZigpYCBzeXNjYWxsIHdpdGggYEJQRl9QUk9HX0xPQURgLCB3aGljaCBtZWFucyB1c2Vyc3BhY2UgY2FuIHRyaWdnZXIgaXQuIEl0JiMzOTtzIGVhc2lseSBmdXp6ZWQsIHRvbywgdGhhbmtzIHRvIHRvb2xzIGxpa2Ugc3l6a2FsbGVyLiBHb29kIHN0YXJ0LgoKTm93LCB3aGF0JiMzOTtzIHRoaXMgcGF0Y2ggYWN0dWFsbHkgKmRvaW5nKj8gSXQmIzM5O3MgaGFuZGxpbmcgdGhlIHJlcGFyZW50aW5nIG9mIGR5bmFtaWMgcG9pbnRlciAoZHlucHRyKSBzbGljZXMgd2hlbiBhIEJQRiBmdW5jdGlvbiByZXR1cm5zLiBTcGVjaWZpY2FsbHksIGlmIGEgY2FsbGVkIGZ1bmN0aW9uIChzdWJwcm9ncmFtLCBjYWxsZWUpIHNwaWxscyBhIHNsaWNlIHRoYXQgY2FtZSBmcm9tIGEgbG9jYWwgZHlucHRyIGludG8gdGhlIGNhbGxlciYjMzk7cyBzdGFjayBvciByZWdpc3RlcnMsIHRoYXQgc2xpY2UmIzM5O3MgbGlmZXRpbWUgZXh0ZW5kcyBiZXlvbmQgdGhlIGR5bnB0ciBJRC4gVGhlIHBhdGNoIGlzIG1vZGlmeWluZyB0aGUgdmVyaWZpZXImIzM5O3Mgc3RhdGUgdHJhY2tpbmcgbG9naWMgaW4gYHByZXBhcmVfZnVuY19leGl0YCB0byBjb3JyZWN0bHkgcmVwYXJlbnQgdGhvc2Ugc2xpY2VzIHRvIHRoZSBjb3JyZWN0IGR5bnB0ciYjMzk7cyBwYXJlbnQuCgpJcyBpdCB3b3J0aCBmdXp6aW5nPyBBYnNvbHV0ZWx5LiBBbnkgY2hhbmdlIHRvIHRoZSBjb3JlIEJQRiB2ZXJpZmllciBsb2dpYyBpcyBoaWdoLXByaW9yaXR5IGZvciBmdXp6aW5nLiBUaGUgdmVyaWZpZXIgaXMgYSBrZXkgc3Vic3lzdGVtLCBzbyBtb2RpZmljYXRpb25zIGhlcmUgYXJlIHByaW1lIHRhcmdldHMuCgpPa2F5LCBub3cgZm9yIGBGb2N1c1N5bWJvbHNgLiBXaGF0IGFyZSB0aGUga2V5IGZ1bmN0aW9ucyB0byBmb2N1cyBvbj8gTGV0JiMzOTtzIHNlZS4uLiBJbml0aWFsbHksIEkgdGhvdWdodCBgYnBmX2NoZWNrYCBzaG91bGQgYmUgbGlzdGVkLCBhcyBpdCYjMzk7cyB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgdGhlIHZlcmlmaWVyLCBidXQgdGhhdCBpcyB0aGUgbWFpbiBlbnRyeXBvaW50LCB3aGlsZSBgcHJlcGFyZV9mdW5jX2V4aXRgIGFuZCBgcmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXRgIGFyZSBtb3JlIHNwZWNpZmljIHRvIHRoaXMgY2hhbmdlLgoKSSBuZWVkIHRvIGFwcGx5IHRoZSAmIzM0O0VYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzJiMzNDsgbWV0aG9kb2xvZ3kgSSBrZWVwIGF0IGhhbmQ6CgoqICAgQXZvaWQgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMuCiogICBUYXJnZXQgc3BlY2lmaWMgZmVhdHVyZSBsb2dpYyBhbmQgZW50cnlwb2ludHMuCgpgcmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXRgIGlzIHRoZSBuZXcgc3RhdGljIGZ1bmN0aW9uIGFkZGVkLiBgcHJlcGFyZV9mdW5jX2V4aXRgIGNhbGxzIHRoaXMgZnVuY3Rpb24uIGBwcmVwYXJlX2Z1bmNfZXhpdGAgaXMgY2FsbGVkIGJ5IHNldmVyYWwgZnVuY3Rpb25zLgoKSW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2A6CgoqICAgYHN0YXRpYyB2b2lkIHJlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqY2FsbGVlKWAKKiAgIGBzdGF0aWMgaW50IHByZXBhcmVfZnVuY19leGl0KC4uLilgCgpJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggZnVuY3Rpb25zIGNhbGwgYHByZXBhcmVfZnVuY19leGl0YC4gSSYjMzk7bSBjb25maWRlbnQgdGhhdCBJIHdpbGwga25vdyB3aGljaCBmdW5jdGlvbnMgdG8gZnV6eiwgZ2l2ZW4gdGhhdCB0aGUgQlBGIHZlcmlmaWVyIGlzIGEgbWFqb3Igc3Vic3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwNDo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcmVwYXJlX2Z1bmNfZXhpdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYz0xMDM1OT1zdGF0aWMgYm9vbCByZXR2YWxfcmFuZ2Vfd2l0aGluKHN0cnVjdCBicGZfcmV0dmFsX3JhbmdlIHJhbmdlLCBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDM2Ni1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMDM2NzpzdGF0aWMgaW50IHByZXBhcmVfZnVuY19leGl0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCAqaW5zbl9pZHgpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTAzNjgte1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMDg0Nz1zdGF0aWMgaW50IGNoZWNrX2hlbHBlcl9jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEzNDktXHRcdFx0ICogZnJhbWUuIEEgY2FsbGJhY2sgZnJhbWUgY2Fubm90IGJlIGxlZnQgdGhhdCB3YXkgYmVjYXVzZVxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMzUwOlx0XHRcdCAqIHByZXBhcmVfZnVuY19leGl0KCkgd291bGQgYXBwbHkgaXRzIHJldHVybiBjb250cmFjdCB0byB0aGVcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTM1MS1cdFx0XHQgKiB1bmtub3duIFIwIHN5bnRoZXNpemVkIGJlbG93LiBTdGFjay1kZXB0aCB2YWxpZGF0aW9uIHJlamVjdHNcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEzNjMtXHRcdFx0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIEJQRl9SRUdfMCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTEzNjQ6XHRcdFx0ZXJyID0gcHJlcGFyZV9mdW5jX2V4aXQoZW52LCBcdTAwMjZlbnYtXHUwMDNlaW5zbl9pZHgpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTExMzY1LVx0XHRcdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE3MzIyPXN0YXRpYyBpbnQgY2hlY2tfbGRfYWJzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc0MDItXHRcdG1hcmtfcmVnX2tub3duX3plcm8oZW52LCByZWdzLCBCUEZfUkVHXzApO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE3NDAzOlx0XHRlcnIgPSBwcmVwYXJlX2Z1bmNfZXhpdChlbnYsIFx1MDAyNmVudi1cdTAwM2VpbnNuX2lkeCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc0MDQtXHRcdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE4MTA5PXN0YXRpYyBpbnQgcHJvY2Vzc19icGZfZXhpdF9mdWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4MTE1LVx0LyogV2UgbXVzdCBkbyBjaGVja19yZWZlcmVuY2VfbGVhayBoZXJlIGJlZm9yZVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE4MTE2Olx0ICogcHJlcGFyZV9mdW5jX2V4aXQgdG8gaGFuZGxlIHRoZSBjYXNlIHdoZW5cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODExNy1cdCAqIHN0YXRlLVx1MDAzZWN1cmZyYW1lIFx1MDAzZSAwLCBpdCBtYXkgYmUgYSBjYWxsYmFjayBmdW5jdGlvbixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgxMjctXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTgxMjg6XHQvKiBUaGUgc2lkZSBlZmZlY3Qgb2YgdGhlIHByZXBhcmVfZnVuY19leGl0IHdoaWNoIGlzXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgxMjktXHQgKiBiZWluZyBza2lwcGVkIGlzIHRoYXQgaXQgZnJlZXMgYnBmX2Z1bmNfc3RhdGUuXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4MTQxLVx0XHQvKiBleGl0IGZyb20gbmVzdGVkIGZ1bmN0aW9uICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTgxNDI6XHRcdGVyciA9IHByZXBhcmVfZnVuY19leGl0KGVudiwgXHUwMDI2ZW52LVx1MDAzZWluc25faWR4KTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODE0My1cdFx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDQ6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwNjEKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgdGFzaywgd2Fsa2luZyB0aHJvdWdoIG15IHRob3VnaHQgcHJvY2VzczoKCioqVmVyaWZ5aW5nIEJQRiBWZXJpZmllciBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgaW50byB0aGUga2VybmVsJiMzOTtzIEJQRiB2ZXJpZmllciBzZXR1cC4gRmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGVzc2VudGlhbCBLY29uZmlnIG9wdGlvbnMgdGhhdCBnb3Zlcm4gdGhlIGNvbXBpbGF0aW9uIG9mIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBUaGlzIGlzIGZvdW5kYXRpb25hbCDigJMgZW5zdXJpbmcgdGhlIHZlcmlmaWVyIGl0c2VsZiBpcyAqZW5hYmxlZCogYW5kIGNvbmZpZ3VyZWQgY29ycmVjdGx5IGlzIHRoZSBiZWRyb2NrIG9mIGFueXRoaW5nIEJQRi1yZWxhdGVkLiBXaGVyZSBhcmUgdGhlc2Ugc2V0dGluZ3MgbGlrZWx5IHRvIGJlIGRlZmluZWQ/IFdlbGwsIEkmIzM5O2QgaW1tZWRpYXRlbHkgaGVhZCB0byB0aGUgb2J2aW91cyBwbGFjZXMuCgpJJiMzOTtkIG5lZWQgdG8gZXhhbWluZSBib3RoIHRoZSBga2VybmVsL2JwZi9NYWtlZmlsZWAgYW5kIGVpdGhlciBgaW5pdC9LY29uZmlnYCBvciBga2VybmVsL2JwZi9LY29uZmlnYC4gYE1ha2VmaWxlYCB0byBzZWUgdGhlIGNvbXBpbGF0aW9uIGRlcGVuZGVuY2llcywgYW5kIHRoZSBgS2NvbmZpZ2AgZmlsZXMgd291bGQgY29udGFpbiB0aGUgYWN0dWFsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gRnJvbSB0aG9zZSBJIGNhbiBkZXRlcm1pbmUgYW55IGRlcGVuZGVuY2llcywgd2hldGhlciB0aGUgYnVpbGQgcnVsZXMgYXJlIGFjdGl2ZSwgYW5kIHdoYXQgdGhlIGRlcGVuZGVuY2llcyBtaWdodCBiZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIGV4YW1pbmluZyB0aGUgcmVsZXZhbnQgb25lcyBhbmQgdGhhdCBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnkuIEkgaGF2ZSB0byBtYWtlIHN1cmUgdGhhdCB0aGUgdmVyaWZpZXIgaXMgZW5hYmxlZCBmb3IgdGhlIGJ1aWxkLCBvdGhlcndpc2UsIEkgd29uJiMzOTt0IGhhdmUgYW55dGhpbmcgdG8gd29yayB3aXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwNDo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2ZXJpZmllclxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlPTc9Q0ZMQUdTX2NvcmUubyAmIzQzOz0gLVduby1vdmVycmlkZS1pbml0ICQoY2ZsYWdzLW5vZ2NzZS15eSlcbmtlcm5lbC9icGYvTWFrZWZpbGUtOC1cbmtlcm5lbC9icGYvTWFrZWZpbGU6OTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBzeXNjYWxsLm8gdmVyaWZpZXIubyBpbm9kZS5vIGhlbHBlcnMubyB0bnVtLm8gY251bS5vIGxvZy5vIHRva2VuLm8gbGl2ZW5lc3MubyBjb25zdF9mb2xkLm8gZGlhZ25vc3RpY3Mub1xua2VybmVsL2JwZi9NYWtlZmlsZS0xMC1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBicGZfaXRlci5vIG1hcF9pdGVyLm8gdGFza19pdGVyLm8gcHJvZ19pdGVyLm8gbGlua19pdGVyLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDQ6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1NjIKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIEJQRiBTeXNjYWxsIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgSSBuZWVkIHRvIHBpbnBvaW50IHdoZXJlIHRoZSBgQlBGX1NZU0NBTExgIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGRlZmluZWQuIEdpdmVuIG15IGZhbWlsaWFyaXR5IHdpdGggdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0sIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2VzIHRvIHN0YXJ0IGxvb2tpbmcgYXJlIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gZmlsZXMuIEkmIzM5O2xsIGJlZ2luIGJ5IGNoZWNraW5nIGBpbml0L0tjb25maWdgIOKAkyBpdCBvZnRlbiBob2xkcyBmdW5kYW1lbnRhbCBzZXR0aW5ncyByZWxhdGVkIHRvIGtlcm5lbCBmZWF0dXJlcy4gSWYgaXQmIzM5O3Mgbm90IHRoZXJlLCB0aGUgbmV4dCBsb2dpY2FsIGxvY2F0aW9uIHdvdWxkIGJlIHRoZSBjb3JlIEJQRiBpbXBsZW1lbnRhdGlvbiBkaXJlY3RvcnkgaXRzZWxmLCBzcGVjaWZpY2FsbHkgYGtlcm5lbC9icGYvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgSSB3b3VsZCBleHBlY3QgYW55dGhpbmcgcmVsYXRlZCB0byBCUEYmIzM5O3Mgc3lzdGVtIGNhbGwgaW50ZXJmYWNlIHRvIHJlc2lkZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGl0IGlzIGltcGxlbWVudGVkLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgaW4gdGhvc2UgdHdvIHBsYWNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDQ6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX1NZU0NBTEwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA0OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODAwCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBgQlBGX1NZU0NBTExgIGlzIGRlZmluZWQgaW4gdGhlIEtjb25maWcgZmlsZXMuIFRoaXMgaXMgYSBjb21tb24gdGFzaywgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBCUEYtcmVsYXRlZCBjb25maWd1cmF0aW9ucywgYW5kIEkgbmVlZCB0byBiZSBlZmZpY2llbnQuIEnigJlsbCBzdGFydCBieSBkb2luZyBhIHF1aWNrIHNlYXJjaCB3aXRoaW4gdGhlIEtjb25maWcgZmlsZXMuIEkga25vdyBJIGNhbiB1c2UgbXkgdG9vbHMgdG8gc2VhcmNoIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZS4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSYjMzk7bSBnb2luZyB0byBzdGFydCB3aXRoIGEgZ3JlcC1saWtlIHNlYXJjaCB0aHJvdWdoIHRoZSBLY29uZmlnIGZpbGVzIHRvIHNlZSBpZiB0aGUgc3ltYm9sIGhhcyBiZWVuIGRlZmluZWQuIFRoZW4gSSB3aWxsIG5lZWQgdG8gbG9vayBhdCB0aGUgY29uZmlnIG9wdGlvbnMgdG8gc2VlIHdoYXQgdGhlIHN5bWJvbCBkb2VzLiBNeSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcywgaXRzIGltcGxpY2F0aW9ucywgYW5kIGhvdyBpdCByZWxhdGVzIHRvIHRoZSBvdmVyYWxsIEJQRiBmZWF0dXJlIHNldC4gVGhpcyBpbmZvcm1hdGlvbiBpcyBjcml0aWNhbCBmb3IgYW55IGZ1dHVyZSBtb2RpZmljYXRpb25zIG9yIHRyb3VibGVzaG9vdGluZyByZWxhdGVkIHRvIEJQRiBzeXNjYWxscy4gVGltZSB0byBkaWcgaW4hCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA0OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUEZfU1lTQ0FMTCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcJiMzNDtCUEYgc3Vic3lzdGVtXCYjMzQ7XG5rZXJuZWwvYnBmL0tjb25maWctMjYtXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXHRib29sIFwmIzM0O0VuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwNDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTExMwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgQlBGIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGZvciB0aGlzIEJQRiBmZWF0dXJlLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gdGhlIGBLY29uZmlnYCBmaWxlIHdpdGhpbiB0aGUgYGtlcm5lbC9icGYvYCBkaXJlY3RvcnkuIFRoYXQmIzM5O3MgdGhlIGdvLXRvIHBsYWNlIGZvciB1bmRlcnN0YW5kaW5nIGhvdyBhIGZlYXR1cmUgaXMgZW5hYmxlZCBhbmQgd2hhdCBlbHNlIGl0IGRlcGVuZHMgb24uIEkmIzM5O2xsIHplcm8gaW4gb24gbGluZSAyNyDigJMgdGhhdCBzZWVtcyBsaWtlIGEgcmVhc29uYWJsZSBzdGFydGluZyBwb2ludCwgb2Z0ZW4gdGhlIGluaXRpYWwgZW50cnkgZm9yIGEgZmVhdHVyZSBkZWZpbml0aW9uLiBIb3BlZnVsbHksIHRoYXQgd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiBhbnkgcHJlcmVxdWlzaXRlcyBvciBvdGhlciBjb25maWd1cmF0aW9ucyB0aGF0IG5lZWQgdG8gYmUgaW4gcGxhY2UgYmVmb3JlIHRoaXMgQlBGIGNvbXBvbmVudCBjYW4gYmUgYWN0aXZhdGVkLiBUaW1lIHRvIHNlZSB3aGF0IHRoZSBLY29uZmlnIGhhcyB0byBzYXkhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA0OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAyNTpcdG1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xuICAyNjpcdFxuICAyNzpcdGNvbmZpZyBCUEZfU1lTQ0FMTFxuICAyODpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiAgMjk6XHRcdHNlbGVjdCBCUEZcbiAgMzA6XHRcdHNlbGVjdCBJUlFfV09SS1xuICAzMTpcdFx0c2VsZWN0IE5FRURfVEFTS1NfUkNVXG4gIDMyOlx0XHRzZWxlY3QgVEFTS1NfVFJBQ0VfUkNVXG4gIDMzOlx0XHRzZWxlY3QgQklOQVJZX1BSSU5URlxuICAzNDpcdFx0c2VsZWN0IE5FVF9TT0NLX01TRyBpZiBORVRcbiAgMzU6XHRcdHNlbGVjdCBORVRfWEdSRVNTIGlmIE5FVFxuICAzNjpcdFx0c2VsZWN0IFBBR0VfUE9PTCBpZiBORVRcbiAgMzc6XHRcdGRlZmF1bHQgblxuICAzODpcdFx0aGVscFxuICAzOTpcdFx0ICBFbmFibGUgdGhlIGJwZigpIHN5c3RlbSBjYWxsIHRoYXQgYWxsb3dzIHRvIG1hbmlwdWxhdGUgQlBGIHByb2dyYW1zXG4gIDQwOlx0XHQgIGFuZCBtYXBzIHZpYSBmaWxlIGRlc2NyaXB0b3JzLlxuICA0MTpcdFxuICA0MjpcdGNvbmZpZyBCUEZfSklUXG4gIDQzOlx0XHRib29sIFwmIzM0O0VuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXCYjMzQ7XG4gIDQ0Olx0XHRkZXBlbmRzIG9uIEJQRlxuICA0NTpcdFx0ZGVwZW5kcyBvbiBIQVZFX0NCUEZfSklUIHx8IEhBVkVfRUJQRl9KSVRcbiAgNDY6XHRcdHNlbGVjdCBFWEVDTUVNXG4gIDQ3Olx0XHRoZWxwXG4gIDQ4Olx0XHQgIEJQRiBwcm9ncmFtcyBhcmUgbm9ybWFsbHkgaGFuZGxlZCBieSBhIEJQRiBpbnRlcnByZXRlci4gVGhpcyBvcHRpb25cbiAgNDk6XHRcdCAgYWxsb3dzIHRoZSBrZXJuZWwgdG8gZ2VuZXJhdGUgbmF0aXZlIGNvZGUgd2hlbiBhIHByb2dyYW0gaXMgbG9hZGVkXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA0OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjYxCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEJQRiBWZXJpZmljYXRpb24gVGhvdWdodHMqKgoKT2theSwgc28gYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgdGhlIGNydWNpYWwgY29uZmlndXJhdGlvbiBvcHRpb247IGl0JiMzOTtzIHRoZSBvbmUgdGhhdCB1bHRpbWF0ZWx5IGJyaW5ncyBpbiBga2VybmVsL2JwZi92ZXJpZmllci5vYC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnkgb3RoZXIgY29uZmlnIGRlcGVuZGVuY2llcywgYWx0aG91Z2ggSSBzdHJvbmdseSBzdXNwZWN0IGBCUEZfU1lTQ0FMTGAgaXMgdGhlIG9ubHkgcmVsZXZhbnQgcGllY2UgaGVyZS4gVGhlIG1lbnUgc3RydWN0dXJlIGluIHRoZSBrZXJuZWwgY29uZmlnICgmIzM0O0JQRiBzdWJzeXN0ZW0mIzM0OykgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgYW5kIGBCUEZfU1lTQ0FMTGAgc2VlbXMgdG8gYmUgc3RhbmRhbG9uZS4gTm8gZGVwZW5kZW5jaWVzLCBnb29kLgoKTm93LCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBmb3Jnb3R0ZW4gYW55dGhpbmcgZWxzZSBJIHdhbnQgdG8gZG91YmxlLWNoZWNrIG15IG1lbnRhbCBsaXN0IG9mIGtleSBzeW1ib2xzIGZvciBteSB3b3JrOiBgcmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXRgLCBgcHJlcGFyZV9mdW5jX2V4aXRgLCBhbmQgdGhlbiBlaXRoZXIgYHByb2Nlc3NfYnBmX2V4aXRfZnVsbGAgb3IgYGJwZl9jaGVja2AgLSBJIG5lZWQgdG8ga2VlcCB0aG9zZSBpbiBtaW5kIGFzIEkgZGl2ZSBpbi4KClJpZ2h0LCBsZXQmIzM5O3Mgbm93IGRyaWxsIGRvd24gaW50byBgYnBmX2NoZWNrYC4gSXQmIzM5O3MgdGltZSB0byBkaWcgaW50byBgdmVyaWZpZXIuY2AgYW5kIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA0OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCBicGZfY2hlY2tcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjEwNDk9c3RhdGljIGludCBicGZfcHJvZ192ZXJpZnlfc2lnbmF0dXJlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxMTY1LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjIxMTY2OmludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxMTY3LVx0ICAgICAgc3RydWN0IGJwZl9sb2dfYXR0ciAqYXR0cl9sb2cpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA0OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMjEyCgkJCQkJCQlvdXRwdXQ6IDEyNgoJCQkJCQkJdGhvdWdodHM6IDM1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgVmVyaWZpZXIgQ2hhbmdlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZSwgc28gSSYjMzk7bGwgc3RhcnQgYnkgY2hlY2tpbmcgYGJwZl9mb3JfZWFjaF9yZWdfaW5fdnN0YXRlYCBpbiBgdmVyaWZpZXIuY2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsYXRlZCBtb2RpZmljYXRpb25zIGluIHRoYXQgYXJlYS4gVGhlbiwgSSBzaG91bGQgYWxzbyBsb29rIGF0IHRoZSBgZHlucHRyYCBmdW5jdGlvbnMsIHBhcnRpY3VsYXJseSBgZHlucHRyX3JlZl9jbnRgLCBhbHNvIHdpdGhpbiBgdmVyaWZpZXIuY2AuIE15IHByaW1hcnkgY29uY2VybnMgcmlnaHQgbm93IGFyZSBgcmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXRgIGFuZCBgcHJlcGFyZV9mdW5jX2V4aXRgIGJlY2F1c2UgdGhleSBhcmUgZXhwbGljaXRseSBmbGFnZ2VkIGFzIGRpcmVjdGx5IGFmZmVjdGVkLgoKTm93LCBsZXQmIzM5O3MgcmV2aWV3IHRoZSBwYXJhbWV0ZXJzIGZvciBgc2V0LXJlc3VsdHNgLiBUaGUga2V5IHRoaW5nIGlzIHRoYXQgd2UmIzM5O3ZlIHNldCBgV29ydGhGdXp6aW5nYCB0byBgdHJ1ZWAsIHdoaWNoIGlzIGFwcHJvcHJpYXRlIGdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZS4gVGhlIGBSZWFzb25pbmdgIHNlY3Rpb24gZ2l2ZXMgYSBnb29kIG92ZXJ2aWV3OiB0aGlzIHBhdGNoIGFsdGVycyBCUEYgdmVyaWZpZXIgbG9naWMgd2l0aGluIHRoZSBrZXJuZWwsIHNwZWNpZmljYWxseSBieSBpbnRyb2R1Y2luZyBgcmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXRgIGR1cmluZyBgcHJlcGFyZV9mdW5jX2V4aXRgLiBUaGUgcG9pbnQgaXMsIHRoaXMgcmVwYXJlbnRzIGBkeW5wdHJgIHNsaWNlcyB1cG9uIGZ1bmN0aW9uIGV4aXQgdG8gbWFpbnRhaW4gbGluZWFnZSB0cmFja2luZyBhY3Jvc3MgY2FsbGVyIGZyYW1lcy4gVGhpcyB0b3VjaGVzIGNvcmUgdmVyaWZpZXIgY29kZSB1c2VkIGJ5IGBicGYoQlBGX1BST0dfTE9BRCwgLi4uKWAgd2hpY2ggaXMgYSBzdHJvbmcgaW5kaWNhdG9yIGZvciBmdXp6aW5nLgoKVGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBwcmVjaXNlOiBgcmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXRgIGFuZCBgcHJlcGFyZV9mdW5jX2V4aXRgLCB3aGljaCBpcyBwZXJmZWN0LiBUaGlzIGhlbHBzIHVzIGRpcmVjdCBvdXIgZnV6emluZyBlZmZvcnRzIHRvIHRoZSByZWxldmFudCBjb2RlLiBBbmQgd2UmIzM5O3JlIGVuYWJsaW5nIGBCUEZfU1lTQ0FMTGAgYXMgdGhlIGBFbmFibGVDb25maWdzYC4KCkZpbmFsbHksIGp1c3QgYSBzYW5pdHkgY2hlY2s6IGV2ZXJ5dGhpbmcgbG9va3MgaW4gb3JkZXIuIGBXb3J0aEZ1enppbmdgIGlzIHNldCBhcyBleHBlY3RlZCwgdGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBzcGVjaWZpYyB0byB0aGlzIHBhdGNoLCBhbmQgdGhlIGBFbmFibGVDb25maWdzYCBhcmUgc2Vuc2libGUuIFRoZSBgUmVhc29uaW5nYCBpcyBjb25jaXNlIGFuZCBvbiBwb2ludC4KCk9rYXksIGxldCYjMzk7cyBzdWJtaXQgdGhlIGBzZXQtcmVzdWx0c2AgY29tbWFuZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDQ6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXQmIzM0OywKICAgICYjMzQ7cHJlcGFyZV9mdW5jX2V4aXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyByZXBhcmVudF9keW5wdHJfc2xpY2VzX29uX2Z1bmNfZXhpdCgpIGluIGtlcm5lbC9icGYvdmVyaWZpZXIuYywgY2FsbGVkIGZyb20gcHJlcGFyZV9mdW5jX2V4aXQoKSB0byB1cGRhdGUgZHlucHRyIGxpbmVhZ2UgdHJhY2tpbmcgd2hlbiBjYWxsZWUgZnJhbWVzIHJldHVybi4gVGhpcyBtb2RpZmllcyBjb3JlIEJQRiB2ZXJpZmllciBsb2dpYyByZWFjaGFibGUgdmlhIEJQRiBwcm9ncmFtIGxvYWRpbmcgc3lzY2FsbHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXQmIzM0OywKICAgICYjMzQ7cHJlcGFyZV9mdW5jX2V4aXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyByZXBhcmVudF9keW5wdHJfc2xpY2VzX29uX2Z1bmNfZXhpdCgpIGluIGtlcm5lbC9icGYvdmVyaWZpZXIuYywgY2FsbGVkIGZyb20gcHJlcGFyZV9mdW5jX2V4aXQoKSB0byB1cGRhdGUgZHlucHRyIGxpbmVhZ2UgdHJhY2tpbmcgd2hlbiBjYWxsZWUgZnJhbWVzIHJldHVybi4gVGhpcyBtb2RpZmllcyBjb3JlIEJQRiB2ZXJpZmllciBsb2dpYyByZWFjaGFibGUgdmlhIEJQRiBwcm9ncmFtIGxvYWRpbmcgc3lzY2FsbHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA0OjUwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDQ6NTA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyJiMzOTtzIGBwcmVwYXJlX2Z1bmNfZXhpdCgpYCBsb2dpYyBieSBhZGRpbmcgYHJlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0KClgLiBUaGlzIGVuc3VyZXMgdGhhdCBkeW5wdHIgc2xpY2VzIGVzY2FwaW5nIGEgc3VicHJvZ3JhbSBjYWxsIGZyYW1lIGhhdmUgdGhlaXIgYHBhcmVudF9pZGAgdXBkYXRlZCB0byBwb2ludCB0byB0aGUgZHlucHRyJiMzOTtzIHBhcmVudCwgcHJvcGVybHkgaW52YWxpZGF0aW5nIHNsaWNlcyB3aGVuIHRoZSBwYXJlbnQgZHlucHRyL2J1ZmZlciBpcyBkZXN0cm95ZWQgaW4gdGhlIGNhbGxlci5cblxuVGhpcyBmaXggcHJldmVudHMgVXNlLUFmdGVyLUZyZWUgKFVBRikgLyBkYW5nbGluZyBwb2ludGVyIGRlcmVmZXJlbmNlcyBpbiBCUEYgcHJvZ3JhbXMuIFN1Y2ggcnVudGltZSBtZW1vcnkgc2FmZXR5IHZpb2xhdGlvbnMgYXJlIGNhdWdodCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcywgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMGI0ZGM5YjI4NzZhYjRjZWE5NDEzYzJkODRhY2U5NjcxNDA2M2JkMwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDEwIDA0OjQ5OjE4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jCmluZGV4IDcyYTNmNTk5OGRkMjcuLmVlNDFiNzM4NmY3NTIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKQEAgLTgwMCw2ICYjNDM7ODAwLDM5IEBAIHN0YXRpYyBpbnQgZHlucHRyX3JlZl9jbnQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHZfcGFyZW50X2lkKQogCXJldHVybiByZWZfY250OwogfQogCiYjNDM7c3RhdGljIHZvaWQgcmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKJiM0MzsJCQkJCQlzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKmNhbGxlZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKnZzdGF0ZSA9IGVudi0mZ3Q7Y3VyX3N0YXRlOwomIzQzOwlzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlOwomIzQzOwlzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnOwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGNhbGxlZS0mZ3Q7YWxsb2NhdGVkX3N0YWNrIC8gQlBGX1JFR19TSVpFOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IGJwZl9zdGFja19zdGF0ZSAqc2xvdCA9ICZhbXA7Y2FsbGVlLSZndDtzdGFja1tpXTsKJiM0MzsJCXN0cnVjdCBicGZfcmVnX3N0YXRlICpkeW5wdHIgPSAmYW1wO3Nsb3QtJmd0O3NwaWxsZWRfcHRyOwomIzQzOwomIzQzOwkJaWYgKHNsb3QtJmd0O3Nsb3RfdHlwZVswXSAhPSBTVEFDS19EWU5QVFIgfHwKJiM0MzsJCSAgICAhZHlucHRyLSZndDtkeW5wdHIuZmlyc3Rfc2xvdCB8fAomIzQzOwkJICAgICFkeW5wdHItJmd0O3BhcmVudF9pZCkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBBIGNhbGxlZSBjYW4gc3BpbGwgYSBzbGljZSBkZXJpdmVkIGZyb20gaXRzIGxvY2FsIGR5bnB0ciBpbnRvCiYjNDM7CQkgKiB0aGUgY2FsbGVyJiMzOTtzIHN0YWNrLiBUaGUgc2xpY2UgdGhlbiBvdXRsaXZlcyB0aGUgZHlucHRyIGlkIHRoYXQKJiM0MzsJCSAqIGxpbmtzIGl0IHRvIHRoZSByZXN0IG9mIHRoZSBvYmplY3QgdHJlZS4gUHJlc2VydmUgdGhhdCBsaW5rIGJ5CiYjNDM7CQkgKiBtYWtpbmcgZXNjYXBlZCBzbGljZXMgY2hpbGRyZW4gb2YgdGhlIGR5bnB0ciYjMzk7cyBwYXJlbnQgYmVmb3JlCiYjNDM7CQkgKiB0aGUgY2FsbGVlIGZyYW1lIGlzIGZyZWVkLgomIzQzOwkJICovCiYjNDM7CQlicGZfZm9yX2VhY2hfcmVnX2luX3ZzdGF0ZSh2c3RhdGUsIHN0YXRlLCByZWcsICh7CiYjNDM7CQkJaWYgKHN0YXRlID09IGNhbGxlZSB8fCByZWctJmd0O3BhcmVudF9pZCAhPSBkeW5wdHItJmd0O2lkIHx8CiYjNDM7CQkJICAgIGJhc2VfdHlwZShyZWctJmd0O3R5cGUpICE9IFBUUl9UT19NRU0pCiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwkJCXJlZy0mZ3Q7cGFyZW50X2lkID0gZHlucHRyLSZndDtwYXJlbnRfaWQ7CiYjNDM7CQl9KSk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3Qoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAkJCQkgICAgICAgIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGUsIGludCBzcGkpCiB7CkBAIC0xMDM5OSw2ICYjNDM7MTA0MzIsNyBAQCBzdGF0aWMgaW50IHByZXBhcmVfZnVuY19leGl0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCAqaW5zbl9pZHgpCiAJCXByaW50X3ZlcmlmaWVyX3N0YXRlKGVudiwgc3RhdGUsIGNhbGxlci0mZ3Q7ZnJhbWVubywgdHJ1ZSk7CiAJfQogCWFjY291bnRfcHJvY2Vzc2VkX2luc25zKGVudiwgY2FsbGVlLCBjYWxsZXIpOwomIzQzOwlyZXBhcmVudF9keW5wdHJfc2xpY2VzX29uX2Z1bmNfZXhpdChlbnYsIGNhbGxlZSk7CiAJLyogY2xlYXIgZXZlcnl0aGluZyBpbiB0aGUgY2FsbGVlLiBJbiBjYXNlIG9mIGV4Y2VwdGlvbmFsIGV4aXRzIHVzaW5nCiAJICogYnBmX3Rocm93LCB0aGlzIHdpbGwgYmUgZG9uZSBieSBjb3B5X3ZlcmlmaWVyX3N0YXRlIGZvciBleHRyYSBmcmFtZXMuICovCiAJZnJlZV9mdW5jX3N0YXRlKGNhbGxlZSk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfcWRpc2MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9xZGlzYy5jCmluZGV4IDZkYmQxNDg3MzQzYzAuLjEyMmVjYjdlOThlMmEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9xZGlzYy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9xZGlzYy5jCkBAIC0xMSw2ICYjNDM7MTEsNyBAQAogI2luY2x1ZGUgJiMzNDticGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHIuc2tlbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7YnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX3NsaWNlLnNrZWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2JwZl9xZGlzY19mYWlsX19pbnZhbGlkX2R5bnB0cl9jcm9zc19mcmFtZS5za2VsLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7YnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX3JldHVybmVkX3NsaWNlLnNrZWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2JwZl9xZGlzY19mYWlsX191bnRydXN0ZWRfd3JpdGUuc2tlbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7YnBmX3FkaXNjX2R5bnB0cl91c2VfYWZ0ZXJfaW52YWxpZGF0ZV9jbG9uZS5za2VsLmgmIzM0OwogCkBAIC0yMzAsNiAmIzQzOzIzMSw3IEBAIHZvaWQgdGVzdF9uc19icGZfcWRpc2Modm9pZCkKIAkJdGVzdF9pbmNvbXBsX29wcygpOwogCVJVTl9URVNUUyhicGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHIpOwogCVJVTl9URVNUUyhicGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHJfY3Jvc3NfZnJhbWUpOwomIzQzOwlSVU5fVEVTVFMoYnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX3JldHVybmVkX3NsaWNlKTsKIAlSVU5fVEVTVFMoYnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX3NsaWNlKTsKIAlSVU5fVEVTVFMoYnBmX3FkaXNjX2ZhaWxfX3VudHJ1c3RlZF93cml0ZSk7CiAJUlVOX1RFU1RTKGJwZl9xZGlzY19keW5wdHJfdXNlX2FmdGVyX2ludmFsaWRhdGVfY2xvbmUpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9xZGlzY19mYWlsX19pbnZhbGlkX2R5bnB0cl9yZXR1cm5lZF9zbGljZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9xZGlzY19mYWlsX19pbnZhbGlkX2R5bnB0cl9yZXR1cm5lZF9zbGljZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjk0MGFiYTdkOGFiZmUKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX3JldHVybmVkX3NsaWNlLmMKQEAgLTAsMCAmIzQzOzEsNzYgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOwomIzQzOyNpbmNsdWRlICZsdDt2bWxpbnV4LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJiMzNDticGZfZXhwZXJpbWVudGFsLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7YnBmX3FkaXNjX2NvbW1vbi5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2JwZl9taXNjLmgmIzM0OwomIzQzOwomIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKJiM0MzsKJiM0MztpbnQgcHJvdG87CiYjNDM7CiYjNDM7c3RhdGljIF9fbm9pbmxpbmUgc3RydWN0IGV0aGhkciAqc2xpY2VfaW5fc3VicHJvZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9keW5wdHIgcHRyOwomIzQzOwomIzQzOwlicGZfZHlucHRyX2Zyb21fc2tiKChzdHJ1Y3QgX19za19idWZmICopc2tiLCAwLCAmYW1wO3B0cik7CiYjNDM7CXJldHVybiBicGZfZHlucHRyX3NsaWNlKCZhbXA7cHRyLCAwLCBOVUxMLCBzaXplb2Yoc3RydWN0IGV0aGhkcikpOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtzdHJ1Y3Rfb3BzJiMzNDspCiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7aW52YWxpZCBtZW0gYWNjZXNzICYjMzk7c2NhbGFyJiMzOTsmIzM0OykKJiM0MztpbnQgQlBGX1BST0coaW52YWxpZF9keW5wdHJfcmV0dXJuZWRfc2xpY2UsIHN0cnVjdCBza19idWZmICpza2IsCiYjNDM7CSAgICAgc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBicGZfc2tfYnVmZl9wdHIgKnRvX2ZyZWUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZXRoaGRyICpoZHI7CiYjNDM7CiYjNDM7CWhkciA9IHNsaWNlX2luX3N1YnByb2coc2tiKTsKJiM0MzsJaWYgKCFoZHIpIHsKJiM0MzsJCWJwZl9xZGlzY19za2JfZHJvcChza2IsIHRvX2ZyZWUpOwomIzQzOwkJcmV0dXJuIE5FVF9YTUlUX0RST1A7CiYjNDM7CX0KJiM0MzsKJiM0MzsJYnBmX3FkaXNjX3NrYl9kcm9wKHNrYiwgdG9fZnJlZSk7CiYjNDM7CiYjNDM7CS8qIHRoaXMgc2hvdWxkIGZhaWwgKi8KJiM0MzsJcHJvdG8gPSBoZHItJmd0O2hfcHJvdG87CiYjNDM7CiYjNDM7CXJldHVybiBORVRfWE1JVF9EUk9QOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtzdHJ1Y3Rfb3BzJiMzNDspCiYjNDM7X19hdXhpbGlhcnkKJiM0MztzdHJ1Y3Qgc2tfYnVmZiAqQlBGX1BST0coYnBmX3FkaXNjX3Rlc3RfZGVxdWV1ZSwgc3RydWN0IFFkaXNjICpzY2gpCiYjNDM7ewomIzQzOwlyZXR1cm4gTlVMTDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7c3RydWN0X29wcyYjMzQ7KQomIzQzO19fYXV4aWxpYXJ5CiYjNDM7aW50IEJQRl9QUk9HKGJwZl9xZGlzY190ZXN0X2luaXQsIHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsCiYjNDM7CSAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQomIzQzO3sKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3N0cnVjdF9vcHMmIzM0OykKJiM0MztfX2F1eGlsaWFyeQomIzQzO3ZvaWQgQlBGX1BST0coYnBmX3FkaXNjX3Rlc3RfcmVzZXQsIHN0cnVjdCBRZGlzYyAqc2NoKQomIzQzO3sKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7c3RydWN0X29wcyYjMzQ7KQomIzQzO19fYXV4aWxpYXJ5CiYjNDM7dm9pZCBCUEZfUFJPRyhicGZfcWRpc2NfdGVzdF9kZXN0cm95LCBzdHJ1Y3QgUWRpc2MgKnNjaCkKJiM0Mzt7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0Oy5zdHJ1Y3Rfb3BzJiMzNDspCiYjNDM7c3RydWN0IFFkaXNjX29wcyB0ZXN0ID0gewomIzQzOwkuZW5xdWV1ZSAgID0gKHZvaWQgKilpbnZhbGlkX2R5bnB0cl9yZXR1cm5lZF9zbGljZSwKJiM0MzsJLmRlcXVldWUgICA9ICh2b2lkICopYnBmX3FkaXNjX3Rlc3RfZGVxdWV1ZSwKJiM0MzsJLmluaXQgICAgICA9ICh2b2lkICopYnBmX3FkaXNjX3Rlc3RfaW5pdCwKJiM0MzsJLnJlc2V0ICAgICA9ICh2b2lkICopYnBmX3FkaXNjX3Rlc3RfcmVzZXQsCiYjNDM7CS5kZXN0cm95ICAgPSAodm9pZCAqKWJwZl9xZGlzY190ZXN0X2Rlc3Ryb3ksCiYjNDM7CS5pZCAgICAgICAgPSAmIzM0O2JwZl9xZGlzY190ZXN0JiMzNDssCiYjNDM7fTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmMKaW5kZXggMWNkNjFkNzJjMTY2Zi4uOTJmOWY5ZWEwNTMyMSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmMKQEAgLTE4OTIsNiAmIzQzOzE4OTIsNTUgQEAgaW50IGNsb25lX2ludmFsaWRhdGU0KHZvaWQgKmN0eCkKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBfX25vaW5saW5lIHZvaWQgY2xvbmVfc2xpY2VfaW5fc3VicHJvZyhzdHJ1Y3QgYnBmX2R5bnB0ciAqcHRyLCBpbnQgKipkYXRhKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9keW5wdHIgY2xvbmU7CiYjNDM7CiYjNDM7CWJwZl9keW5wdHJfY2xvbmUocHRyLCAmYW1wO2Nsb25lKTsKJiM0MzsJKmRhdGEgPSBicGZfZHlucHRyX2RhdGEoJmFtcDtjbG9uZSwgMCwgc2l6ZW9mKHZhbCkpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIEEgc2xpY2UgdGhhdCBlc2NhcGVzIHRoZSBjbG9uZSYjMzk7cyBjYWxsIGZyYW1lIHJlbWFpbnMgdmFsaWQgd2hpbGUgdGhlCiYjNDM7ICogc2hhcmVkIHJpbmdidWYgcmVzZXJ2YXRpb24gaXMgbGl2ZS4KJiM0MzsgKi8KJiM0MztTRUMoJiMzNDs/cmF3X3RwJiMzNDspCiYjNDM7X19zdWNjZXNzCiYjNDM7aW50IGNsb25lX3NsaWNlX3JldHVybmVkX2ZyYW1lX3ZhbGlkKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBicGZfZHlucHRyIHB0cjsKJiM0MzsJaW50ICpkYXRhID0gTlVMTDsKJiM0MzsKJiM0MzsJYnBmX3JpbmdidWZfcmVzZXJ2ZV9keW5wdHIoJmFtcDtyaW5nYnVmLCB2YWwsIDAsICZhbXA7cHRyKTsKJiM0MzsJY2xvbmVfc2xpY2VfaW5fc3VicHJvZygmYW1wO3B0ciwgJmFtcDtkYXRhKTsKJiM0MzsJaWYgKGRhdGEpCiYjNDM7CQkqZGF0YSA9IDEyMzsKJiM0MzsJYnBmX3JpbmdidWZfc3VibWl0X2R5bnB0cigmYW1wO3B0ciwgMCk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFJlbGVhc2luZyB0aGUgc2hhcmVkIHJlc2VydmF0aW9uIG11c3QgaW52YWxpZGF0ZSBhIHNsaWNlIHRoYXQgZXNjYXBlZAomIzQzOyAqIGZyb20gYSBjbG9uZSYjMzk7cyBjYWxsIGZyYW1lLgomIzQzOyAqLwomIzQzO1NFQygmIzM0Oz9yYXdfdHAmIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtpbnZhbGlkIG1lbSBhY2Nlc3MgJiMzOTtzY2FsYXImIzM5OyYjMzQ7KQomIzQzO2ludCBjbG9uZV9zbGljZV9yZXR1cm5lZF9mcmFtZV9pbnZhbGlkKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBicGZfZHlucHRyIHB0cjsKJiM0MzsJaW50ICpkYXRhID0gTlVMTDsKJiM0MzsKJiM0MzsJYnBmX3JpbmdidWZfcmVzZXJ2ZV9keW5wdHIoJmFtcDtyaW5nYnVmLCB2YWwsIDAsICZhbXA7cHRyKTsKJiM0MzsJY2xvbmVfc2xpY2VfaW5fc3VicHJvZygmYW1wO3B0ciwgJmFtcDtkYXRhKTsKJiM0MzsJYnBmX3JpbmdidWZfc3VibWl0X2R5bnB0cigmYW1wO3B0ciwgMCk7CiYjNDM7CWlmIChkYXRhKQomIzQzOwkJLyogdGhpcyBzaG91bGQgZmFpbCAqLwomIzQzOwkJKmRhdGEgPSAxMjM7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIC8qIEludmFsaWRhdGluZyBhIGR5bnB0ciBzaG91bGQgaW52YWxpZGF0ZSBhbnkgZGF0YSBzbGljZXMKICAqIG9mIGl0cyBwYXJlbnQKICAqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDQ6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDY1OAoJCQkJCQkJb3V0cHV0OiAxODAKCQkJCQkJCXRob3VnaHRzOiAxNjc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFuYWx5c2lzOiBEeW5wdHIgU2xpY2UgUmVwYXJlbnRpbmcgaW4gQlBGIFZlcmlmaWVyKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBwb2ludHMgdG93YXJkcyAqbm90KiBuZWVkaW5nIGEgS01TQU4gc2Vzc2lvbi4gVGhlIHBhdGNoIGZvY3VzZXMgb24gdGhlIEJQRiB2ZXJpZmllciwgc3BlY2lmaWNhbGx5IGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgVXNlLUFmdGVyLUZyZWUgKFVBRikgdnVsbmVyYWJpbGl0eSB3aXRoIGR5bmFtaWMgcG9pbnRlciAoZHlucHRyKSBzbGljZXMgYWNyb3NzIGZ1bmN0aW9uIGNhbGxzLgoKVGhlIGNvcmUgb2YgdGhlIHBhdGNoIGlzIHRoZSBuZXcgYHJlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0YCBoZWxwZXIuIFdoYXQgaXQgZG9lcyBpcyBjcnVjaWFsOiB3aGVuIGEgZnVuY3Rpb24gKGNhbGxlZSkgY3JlYXRlcyBhIHNsaWNlIGZyb20gYSBsb2NhbCBkeW5wdHIgYW5kIHBhc3NlcyBpdCBiYWNrIHRvIHRoZSBjYWxsZXIsIGl0IGVuc3VyZXMgdGhhdCB0aGUgKnNsaWNlJiMzOTtzKiBgcGFyZW50X2lkYCBpcyB1cGRhdGVkIHRvIHBvaW50IHRvIHRoZSAqb3JpZ2luYWwqIGR5bnB0ciYjMzk7cyBgcGFyZW50X2lkYCBiZWZvcmUgdGhlIGNhbGxlZSBmcmFtZSBpcyBmcmVlZC4gVGhpcyByZXBhcmVudGluZyBpcyBlc3NlbnRpYWwgYmVjYXVzZSB0aGUgb3JpZ2luYWwgZHlucHRyIElEIHdvdWxkIG90aGVyd2lzZSBiZSBsb3N0IHdoZW4gdGhlIGNhbGxlZSBleGl0cy4gV2l0aG91dCB0aGlzLCB0aGUgdmVyaWZpZXIgbWlnaHQgZmFpbCB0byBjb3JyZWN0bHkgaWRlbnRpZnkgYW5kIGludmFsaWRhdGUgdGhlIHNsaWNlIHdoZW4gdGhlIHVuZGVybHlpbmcgYnVmZmVyIChlLmcuLCBhbiBTS0IpIGlzIHJlbGVhc2VkLCBsZWFkaW5nIHRvIGEgVUFGIG9yIG1lbW9yeSBzYWZldHkgaXNzdWUgZHVyaW5nIEJQRiBwcm9ncmFtIGV4ZWN1dGlvbi4KClNvLCB0aGUgaXNzdWUgaXMgcmVhbGx5IGFib3V0ICp2ZXJpZmllciBzdGF0ZSBjb25zaXN0ZW5jeSosIG5vdCB0aGUgaW50cm9kdWN0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgY29kZSBpcyBmaXhpbmcgdGhlIHRyYWNraW5nIG9mIGR5bnB0ciBzbGljZSBsaWZldGltZXMgd2l0aGluIHRoZSB2ZXJpZmllciYjMzk7cyBpbnRlcm5hbCBzdGF0ZS4gSXQmIzM5O3MgZXNzZW50aWFsbHkgcHJldmVudGluZyBhIHNjZW5hcmlvIHdoZXJlIGEgQlBGIHByb2dyYW0gY291bGQgYXR0ZW1wdCB0byBhY2Nlc3MgbWVtb3J5IGFmdGVyIGl0IGhhcyBiZWVuIGZyZWVkLiBUaGUgdmVyaWZpZXIgdHJhY2tzIHJlZ2lzdGVycyBhbmQgc3RhY2sgc2xvdHMsIGFuZCB0aGlzIHBhdGNoIGtlZXBzIHRoYXQgc3RhdGUgY29uc2lzdGVudCB3aXRoIHBvaW50ZXIgbGlmZXRpbWVzLgoKTm93LCBsZXQmIzM5O3MgYXBwbHkgdGhlIEtNU0FOIHJ1bGVzLiBEb2VzIHRoaXMgcGF0Y2g6CgoxLiAgKipFeHBvc2Uga2VybmVsIGRhdGEgdG8gdXNlciBzcGFjZT8qKiBOby4KMi4gICoqUmVseSBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8qKiBOby4KMy4gICoqQWxsb2NhdGUgY29tcGxleCBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHM/KiogTm8uCjQuICAqKkludHJvZHVjZSBib3VuZHMgY2hlY2sgdnVsbmVyYWJpbGl0aWVzIGFyb3VuZCBleGlzdGluZyBkYXRhPyoqIE5vLgoKSXQmIzM5O3MgYWxsIGludGVybmFsIHZlcmlmaWVyIHN0YXRlIG1hbmlwdWxhdGlvbi4gVGhlIHZlcmlmaWVyIHVzZXMgaW5pdGlhbGl6ZWQgZGF0YSBzdHJ1Y3R1cmVzIHRvIHRyYWNrIHRoZSB2YWxpZGl0eSBvZiBwb2ludGVycyBhbmQgbWVtb3J5IGFjY2Vzcy4gVGhlIGBicGZfZm9yX2VhY2hfcmVnX2luX3ZzdGF0ZWAgbG9vcCBhbmQgdGhlIHN0YWNrIHN0cnVjdHVyZXMgbGlrZSBgY2FsbGVlLSZndDtzdGFja1tpXWAgYXJlIGFsbCBwYXJ0IG9mIHRoYXQgaW50ZXJuYWwgdHJhY2tpbmcuIEl0IGRlYWxzIHdpdGggcmVnaXN0ZXIgc3RhdGVzIGFuZCB0aGUgdmVyaWZpZXImIzM5O3Mgc3RhY2ssIGFsbCBvZiB3aGljaCBhcmUgaW5pdGlhbGl6ZWQgd2l0aGluIHRoZSB2ZXJpZmllciYjMzk7cyBjb250ZXh0LgoKVGhlIGJ1ZyB0aGlzIHBhdGNoIGFkZHJlc3NlcyBpcyBhIGNsYXNzaWMgVUFGIG9yIGRhbmdsaW5nIHBvaW50ZXIgc2NlbmFyaW8uIFRoZXNlIGtpbmRzIG9mIGJ1Z3MgYXJlICpwcmVjaXNlbHkqIHdoYXQgS0FTQU4gaXMgZGVzaWduZWQgdG8gY2F0Y2ghIEtBU0FOIGlzIGJ1aWx0IHRvIGRldGVjdCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFuZCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLiBLTVNBTiwgb24gdGhlIG90aGVyIGhhbmQsIGV4Y2VscyBhdCBmaW5kaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLgoKVGhlIHBhdGNoJiMzOTtzIGNoYW5nZXMgZGlyZWN0bHkgYWltIHRvICpwcmV2ZW50KiBtZW1vcnkgc2FmZXR5IGlzc3VlcywgYW5kIEtBU0FOIHNob3VsZCBoYW5kbGUgdGhvc2UgcHJvYmxlbXMuIEtNU0FOIHdvdWxkIGJlIG92ZXJraWxsIGluIHRoaXMgY2FzZS4gTXkgY29uY2x1c2lvbj8gVGhpcyBpcyBhIGBOZWVkc0tNU0FOPWZhbHNlYCBzaXR1YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA0OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXImIzM5O3MgYHByZXBhcmVfZnVuY19leGl0KClgIGxvZ2ljIGJ5IGFkZGluZyBgcmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXQoKWAuIFRoaXMgZW5zdXJlcyB0aGF0IGR5bnB0ciBzbGljZXMgZXNjYXBpbmcgYSBzdWJwcm9ncmFtIGNhbGwgZnJhbWUgaGF2ZSB0aGVpciBgcGFyZW50X2lkYCB1cGRhdGVkIHRvIHBvaW50IHRvIHRoZSBkeW5wdHImIzM5O3MgcGFyZW50LCBwcm9wZXJseSBpbnZhbGlkYXRpbmcgc2xpY2VzIHdoZW4gdGhlIHBhcmVudCBkeW5wdHIvYnVmZmVyIGlzIGRlc3Ryb3llZCBpbiB0aGUgY2FsbGVyLlxuXG5UaGlzIGZpeCBwcmV2ZW50cyBVc2UtQWZ0ZXItRnJlZSAoVUFGKSAvIGRhbmdsaW5nIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGluIEJQRiBwcm9ncmFtcy4gU3VjaCBydW50aW1lIG1lbW9yeSBzYWZldHkgdmlvbGF0aW9ucyBhcmUgY2F1Z2h0IGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyJiMzOTtzIGBwcmVwYXJlX2Z1bmNfZXhpdCgpYCBsb2dpYyBieSBhZGRpbmcgYHJlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0KClgLiBUaGlzIGVuc3VyZXMgdGhhdCBkeW5wdHIgc2xpY2VzIGVzY2FwaW5nIGEgc3VicHJvZ3JhbSBjYWxsIGZyYW1lIGhhdmUgdGhlaXIgYHBhcmVudF9pZGAgdXBkYXRlZCB0byBwb2ludCB0byB0aGUgZHlucHRyJiMzOTtzIHBhcmVudCwgcHJvcGVybHkgaW52YWxpZGF0aW5nIHNsaWNlcyB3aGVuIHRoZSBwYXJlbnQgZHlucHRyL2J1ZmZlciBpcyBkZXN0cm95ZWQgaW4gdGhlIGNhbGxlci5cblxuVGhpcyBmaXggcHJldmVudHMgVXNlLUFmdGVyLUZyZWUgKFVBRikgLyBkYW5nbGluZyBwb2ludGVyIGRlcmVmZXJlbmNlcyBpbiBCUEYgcHJvZ3JhbXMuIFN1Y2ggcnVudGltZSBtZW1vcnkgc2FmZXR5IHZpb2xhdGlvbnMgYXJlIGNhdWdodCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcywgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwNDo0OToxOS40NzMyODU2NzJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzQwMTk0MzY1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0XCIsXG4gICAgXCJwcmVwYXJlX2Z1bmNfZXhpdFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllcidzIGBwcmVwYXJlX2Z1bmNfZXhpdCgpYCBsb2dpYyBieSBhZGRpbmcgYHJlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0KClgLiBUaGlzIGVuc3VyZXMgdGhhdCBkeW5wdHIgc2xpY2VzIGVzY2FwaW5nIGEgc3VicHJvZ3JhbSBjYWxsIGZyYW1lIGhhdmUgdGhlaXIgYHBhcmVudF9pZGAgdXBkYXRlZCB0byBwb2ludCB0byB0aGUgZHlucHRyJ3MgcGFyZW50LCBwcm9wZXJseSBpbnZhbGlkYXRpbmcgc2xpY2VzIHdoZW4gdGhlIHBhcmVudCBkeW5wdHIvYnVmZmVyIGlzIGRlc3Ryb3llZCBpbiB0aGUgY2FsbGVyLlxcblxcblRoaXMgZml4IHByZXZlbnRzIFVzZS1BZnRlci1GcmVlIChVQUYpIC8gZGFuZ2xpbmcgcG9pbnRlciBkZXJlZmVyZW5jZXMgaW4gQlBGIHByb2dyYW1zLiBTdWNoIHJ1bnRpbWUgbWVtb3J5IHNhZmV0eSB2aW9sYXRpb25zIGFyZSBjYXVnaHQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHJlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0KCkgaW4ga2VybmVsL2JwZi92ZXJpZmllci5jLCBjYWxsZWQgZnJvbSBwcmVwYXJlX2Z1bmNfZXhpdCgpIHRvIHVwZGF0ZSBkeW5wdHIgbGluZWFnZSB0cmFja2luZyB3aGVuIGNhbGxlZSBmcmFtZXMgcmV0dXJuLiBUaGlzIG1vZGlmaWVzIGNvcmUgQlBGIHZlcmlmaWVyIGxvZ2ljIHJlYWNoYWJsZSB2aWEgQlBGIHByb2dyYW0gbG9hZGluZyBzeXNjYWxscy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDQ6NDk6MTkuNDczMjkwNDAyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjY4NzYwNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAwYjRkYzliMjg3NmFiNGNlYTk0MTNjMmQ4NGFjZTk2NzE0MDYzYmQzXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgU2VwIDEwIDA0OjQ5OjE4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbmluZGV4IDcyYTNmNTk5OGRkMjcuLmVlNDFiNzM4NmY3NTIgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXFxuKysrIGIva2VybmVsL2JwZi92ZXJpZmllci5jXFxuQEAgLTgwMCw2ICs4MDAsMzkgQEAgc3RhdGljIGludCBkeW5wdHJfcmVmX2NudChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgdl9wYXJlbnRfaWQpXFxuIFxcdHJldHVybiByZWZfY250O1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCByZXBhcmVudF9keW5wdHJfc2xpY2VzX29uX2Z1bmNfZXhpdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKmNhbGxlZSlcXG4re1xcbitcXHRzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICp2c3RhdGUgPSBlbnYtXFx1MDAzZWN1cl9zdGF0ZTtcXG4rXFx0c3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZTtcXG4rXFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZztcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgY2FsbGVlLVxcdTAwM2VhbGxvY2F0ZWRfc3RhY2sgLyBCUEZfUkVHX1NJWkU7IGkrKykge1xcbitcXHRcXHRzdHJ1Y3QgYnBmX3N0YWNrX3N0YXRlICpzbG90ID0gXFx1MDAyNmNhbGxlZS1cXHUwMDNlc3RhY2tbaV07XFxuK1xcdFxcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpkeW5wdHIgPSBcXHUwMDI2c2xvdC1cXHUwMDNlc3BpbGxlZF9wdHI7XFxuK1xcbitcXHRcXHRpZiAoc2xvdC1cXHUwMDNlc2xvdF90eXBlWzBdICE9IFNUQUNLX0RZTlBUUiB8fFxcbitcXHRcXHQgICAgIWR5bnB0ci1cXHUwMDNlZHlucHRyLmZpcnN0X3Nsb3QgfHxcXG4rXFx0XFx0ICAgICFkeW5wdHItXFx1MDAzZXBhcmVudF9pZClcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBBIGNhbGxlZSBjYW4gc3BpbGwgYSBzbGljZSBkZXJpdmVkIGZyb20gaXRzIGxvY2FsIGR5bnB0ciBpbnRvXFxuK1xcdFxcdCAqIHRoZSBjYWxsZXIncyBzdGFjay4gVGhlIHNsaWNlIHRoZW4gb3V0bGl2ZXMgdGhlIGR5bnB0ciBpZCB0aGF0XFxuK1xcdFxcdCAqIGxpbmtzIGl0IHRvIHRoZSByZXN0IG9mIHRoZSBvYmplY3QgdHJlZS4gUHJlc2VydmUgdGhhdCBsaW5rIGJ5XFxuK1xcdFxcdCAqIG1ha2luZyBlc2NhcGVkIHNsaWNlcyBjaGlsZHJlbiBvZiB0aGUgZHlucHRyJ3MgcGFyZW50IGJlZm9yZVxcbitcXHRcXHQgKiB0aGUgY2FsbGVlIGZyYW1lIGlzIGZyZWVkLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0YnBmX2Zvcl9lYWNoX3JlZ19pbl92c3RhdGUodnN0YXRlLCBzdGF0ZSwgcmVnLCAoe1xcbitcXHRcXHRcXHRpZiAoc3RhdGUgPT0gY2FsbGVlIHx8IHJlZy1cXHUwMDNlcGFyZW50X2lkICE9IGR5bnB0ci1cXHUwMDNlaWQgfHxcXG4rXFx0XFx0XFx0ICAgIGJhc2VfdHlwZShyZWctXFx1MDAzZXR5cGUpICE9IFBUUl9UT19NRU0pXFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRcXHRyZWctXFx1MDAzZXBhcmVudF9pZCA9IGR5bnB0ci1cXHUwMDNlcGFyZW50X2lkO1xcbitcXHRcXHR9KSk7XFxuK1xcdH1cXG4rfVxcbitcXG4gc3RhdGljIGludCBkZXN0cm95X2lmX2R5bnB0cl9zdGFja19zbG90KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuIFxcdFxcdFxcdFxcdCAgICAgICAgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZSwgaW50IHNwaSlcXG4ge1xcbkBAIC0xMDM5OSw2ICsxMDQzMiw3IEBAIHN0YXRpYyBpbnQgcHJlcGFyZV9mdW5jX2V4aXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50ICppbnNuX2lkeClcXG4gXFx0XFx0cHJpbnRfdmVyaWZpZXJfc3RhdGUoZW52LCBzdGF0ZSwgY2FsbGVyLVxcdTAwM2VmcmFtZW5vLCB0cnVlKTtcXG4gXFx0fVxcbiBcXHRhY2NvdW50X3Byb2Nlc3NlZF9pbnNucyhlbnYsIGNhbGxlZSwgY2FsbGVyKTtcXG4rXFx0cmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXQoZW52LCBjYWxsZWUpO1xcbiBcXHQvKiBjbGVhciBldmVyeXRoaW5nIGluIHRoZSBjYWxsZWUuIEluIGNhc2Ugb2YgZXhjZXB0aW9uYWwgZXhpdHMgdXNpbmdcXG4gXFx0ICogYnBmX3Rocm93LCB0aGlzIHdpbGwgYmUgZG9uZSBieSBjb3B5X3ZlcmlmaWVyX3N0YXRlIGZvciBleHRyYSBmcmFtZXMuICovXFxuIFxcdGZyZWVfZnVuY19zdGF0ZShjYWxsZWUpO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfcWRpc2MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9xZGlzYy5jXFxuaW5kZXggNmRiZDE0ODczNDNjMC4uMTIyZWNiN2U5OGUyYSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfcWRpc2MuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9xZGlzYy5jXFxuQEAgLTExLDYgKzExLDcgQEBcXG4gI2luY2x1ZGUgXFxcImJwZl9xZGlzY19mYWlsX19pbnZhbGlkX2R5bnB0ci5za2VsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJicGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHJfc2xpY2Uuc2tlbC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiYnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX2Nyb3NzX2ZyYW1lLnNrZWwuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImJwZl9xZGlzY19mYWlsX19pbnZhbGlkX2R5bnB0cl9yZXR1cm5lZF9zbGljZS5za2VsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJicGZfcWRpc2NfZmFpbF9fdW50cnVzdGVkX3dyaXRlLnNrZWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImJwZl9xZGlzY19keW5wdHJfdXNlX2FmdGVyX2ludmFsaWRhdGVfY2xvbmUuc2tlbC5oXFxcIlxcbiBcXG5AQCAtMjMwLDYgKzIzMSw3IEBAIHZvaWQgdGVzdF9uc19icGZfcWRpc2Modm9pZClcXG4gXFx0XFx0dGVzdF9pbmNvbXBsX29wcygpO1xcbiBcXHRSVU5fVEVTVFMoYnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyKTtcXG4gXFx0UlVOX1RFU1RTKGJwZl9xZGlzY19mYWlsX19pbnZhbGlkX2R5bnB0cl9jcm9zc19mcmFtZSk7XFxuK1xcdFJVTl9URVNUUyhicGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHJfcmV0dXJuZWRfc2xpY2UpO1xcbiBcXHRSVU5fVEVTVFMoYnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX3NsaWNlKTtcXG4gXFx0UlVOX1RFU1RTKGJwZl9xZGlzY19mYWlsX191bnRydXN0ZWRfd3JpdGUpO1xcbiBcXHRSVU5fVEVTVFMoYnBmX3FkaXNjX2R5bnB0cl91c2VfYWZ0ZXJfaW52YWxpZGF0ZV9jbG9uZSk7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHJfcmV0dXJuZWRfc2xpY2UuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHJfcmV0dXJuZWRfc2xpY2UuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uOTQwYWJhN2Q4YWJmZVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX3JldHVybmVkX3NsaWNlLmNcXG5AQCAtMCwwICsxLDc2IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjdm1saW51eC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwiYnBmX2V4cGVyaW1lbnRhbC5oXFxcIlxcbisjaW5jbHVkZSBcXFwiYnBmX3FkaXNjX2NvbW1vbi5oXFxcIlxcbisjaW5jbHVkZSBcXFwiYnBmX21pc2MuaFxcXCJcXG4rXFxuK2NoYXIgX2xpY2Vuc2VbXSBTRUMoXFxcImxpY2Vuc2VcXFwiKSA9IFxcXCJHUExcXFwiO1xcbitcXG4raW50IHByb3RvO1xcbitcXG4rc3RhdGljIF9fbm9pbmxpbmUgc3RydWN0IGV0aGhkciAqc2xpY2VfaW5fc3VicHJvZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbit7XFxuK1xcdHN0cnVjdCBicGZfZHlucHRyIHB0cjtcXG4rXFxuK1xcdGJwZl9keW5wdHJfZnJvbV9za2IoKHN0cnVjdCBfX3NrX2J1ZmYgKilza2IsIDAsIFxcdTAwMjZwdHIpO1xcbitcXHRyZXR1cm4gYnBmX2R5bnB0cl9zbGljZShcXHUwMDI2cHRyLCAwLCBOVUxMLCBzaXplb2Yoc3RydWN0IGV0aGhkcikpO1xcbit9XFxuK1xcbitTRUMoXFxcInN0cnVjdF9vcHNcXFwiKVxcbitfX2ZhaWx1cmUgX19tc2coXFxcImludmFsaWQgbWVtIGFjY2VzcyAnc2NhbGFyJ1xcXCIpXFxuK2ludCBCUEZfUFJPRyhpbnZhbGlkX2R5bnB0cl9yZXR1cm5lZF9zbGljZSwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4rXFx0ICAgICBzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IGJwZl9za19idWZmX3B0ciAqdG9fZnJlZSlcXG4re1xcbitcXHRzdHJ1Y3QgZXRoaGRyICpoZHI7XFxuK1xcbitcXHRoZHIgPSBzbGljZV9pbl9zdWJwcm9nKHNrYik7XFxuK1xcdGlmICghaGRyKSB7XFxuK1xcdFxcdGJwZl9xZGlzY19za2JfZHJvcChza2IsIHRvX2ZyZWUpO1xcbitcXHRcXHRyZXR1cm4gTkVUX1hNSVRfRFJPUDtcXG4rXFx0fVxcbitcXG4rXFx0YnBmX3FkaXNjX3NrYl9kcm9wKHNrYiwgdG9fZnJlZSk7XFxuK1xcbitcXHQvKiB0aGlzIHNob3VsZCBmYWlsICovXFxuK1xcdHByb3RvID0gaGRyLVxcdTAwM2VoX3Byb3RvO1xcbitcXG4rXFx0cmV0dXJuIE5FVF9YTUlUX0RST1A7XFxuK31cXG4rXFxuK1NFQyhcXFwic3RydWN0X29wc1xcXCIpXFxuK19fYXV4aWxpYXJ5XFxuK3N0cnVjdCBza19idWZmICpCUEZfUFJPRyhicGZfcWRpc2NfdGVzdF9kZXF1ZXVlLCBzdHJ1Y3QgUWRpc2MgKnNjaClcXG4re1xcbitcXHRyZXR1cm4gTlVMTDtcXG4rfVxcbitcXG4rU0VDKFxcXCJzdHJ1Y3Rfb3BzXFxcIilcXG4rX19hdXhpbGlhcnlcXG4raW50IEJQRl9QUk9HKGJwZl9xZGlzY190ZXN0X2luaXQsIHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXFxuK1xcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbit7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitTRUMoXFxcInN0cnVjdF9vcHNcXFwiKVxcbitfX2F1eGlsaWFyeVxcbit2b2lkIEJQRl9QUk9HKGJwZl9xZGlzY190ZXN0X3Jlc2V0LCBzdHJ1Y3QgUWRpc2MgKnNjaClcXG4re1xcbit9XFxuK1xcbitTRUMoXFxcInN0cnVjdF9vcHNcXFwiKVxcbitfX2F1eGlsaWFyeVxcbit2b2lkIEJQRl9QUk9HKGJwZl9xZGlzY190ZXN0X2Rlc3Ryb3ksIHN0cnVjdCBRZGlzYyAqc2NoKVxcbit7XFxuK31cXG4rXFxuK1NFQyhcXFwiLnN0cnVjdF9vcHNcXFwiKVxcbitzdHJ1Y3QgUWRpc2Nfb3BzIHRlc3QgPSB7XFxuK1xcdC5lbnF1ZXVlICAgPSAodm9pZCAqKWludmFsaWRfZHlucHRyX3JldHVybmVkX3NsaWNlLFxcbitcXHQuZGVxdWV1ZSAgID0gKHZvaWQgKilicGZfcWRpc2NfdGVzdF9kZXF1ZXVlLFxcbitcXHQuaW5pdCAgICAgID0gKHZvaWQgKilicGZfcWRpc2NfdGVzdF9pbml0LFxcbitcXHQucmVzZXQgICAgID0gKHZvaWQgKilicGZfcWRpc2NfdGVzdF9yZXNldCxcXG4rXFx0LmRlc3Ryb3kgICA9ICh2b2lkICopYnBmX3FkaXNjX3Rlc3RfZGVzdHJveSxcXG4rXFx0LmlkICAgICAgICA9IFxcXCJicGZfcWRpc2NfdGVzdFxcXCIsXFxuK307XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmNcXG5pbmRleCAxY2Q2MWQ3MmMxNjZmLi45MmY5ZjllYTA1MzIxIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmNcXG5AQCAtMTg5Miw2ICsxODkyLDU1IEBAIGludCBjbG9uZV9pbnZhbGlkYXRlNCh2b2lkICpjdHgpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgX19ub2lubGluZSB2b2lkIGNsb25lX3NsaWNlX2luX3N1YnByb2coc3RydWN0IGJwZl9keW5wdHIgKnB0ciwgaW50ICoqZGF0YSlcXG4re1xcbitcXHRzdHJ1Y3QgYnBmX2R5bnB0ciBjbG9uZTtcXG4rXFxuK1xcdGJwZl9keW5wdHJfY2xvbmUocHRyLCBcXHUwMDI2Y2xvbmUpO1xcbitcXHQqZGF0YSA9IGJwZl9keW5wdHJfZGF0YShcXHUwMDI2Y2xvbmUsIDAsIHNpemVvZih2YWwpKTtcXG4rfVxcbitcXG4rLypcXG4rICogQSBzbGljZSB0aGF0IGVzY2FwZXMgdGhlIGNsb25lJ3MgY2FsbCBmcmFtZSByZW1haW5zIHZhbGlkIHdoaWxlIHRoZVxcbisgKiBzaGFyZWQgcmluZ2J1ZiByZXNlcnZhdGlvbiBpcyBsaXZlLlxcbisgKi9cXG4rU0VDKFxcXCI/cmF3X3RwXFxcIilcXG4rX19zdWNjZXNzXFxuK2ludCBjbG9uZV9zbGljZV9yZXR1cm5lZF9mcmFtZV92YWxpZCh2b2lkICpjdHgpXFxuK3tcXG4rXFx0c3RydWN0IGJwZl9keW5wdHIgcHRyO1xcbitcXHRpbnQgKmRhdGEgPSBOVUxMO1xcbitcXG4rXFx0YnBmX3JpbmdidWZfcmVzZXJ2ZV9keW5wdHIoXFx1MDAyNnJpbmdidWYsIHZhbCwgMCwgXFx1MDAyNnB0cik7XFxuK1xcdGNsb25lX3NsaWNlX2luX3N1YnByb2coXFx1MDAyNnB0ciwgXFx1MDAyNmRhdGEpO1xcbitcXHRpZiAoZGF0YSlcXG4rXFx0XFx0KmRhdGEgPSAxMjM7XFxuK1xcdGJwZl9yaW5nYnVmX3N1Ym1pdF9keW5wdHIoXFx1MDAyNnB0ciwgMCk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLypcXG4rICogUmVsZWFzaW5nIHRoZSBzaGFyZWQgcmVzZXJ2YXRpb24gbXVzdCBpbnZhbGlkYXRlIGEgc2xpY2UgdGhhdCBlc2NhcGVkXFxuKyAqIGZyb20gYSBjbG9uZSdzIGNhbGwgZnJhbWUuXFxuKyAqL1xcbitTRUMoXFxcIj9yYXdfdHBcXFwiKVxcbitfX2ZhaWx1cmUgX19tc2coXFxcImludmFsaWQgbWVtIGFjY2VzcyAnc2NhbGFyJ1xcXCIpXFxuK2ludCBjbG9uZV9zbGljZV9yZXR1cm5lZF9mcmFtZV9pbnZhbGlkKHZvaWQgKmN0eClcXG4re1xcbitcXHRzdHJ1Y3QgYnBmX2R5bnB0ciBwdHI7XFxuK1xcdGludCAqZGF0YSA9IE5VTEw7XFxuK1xcbitcXHRicGZfcmluZ2J1Zl9yZXNlcnZlX2R5bnB0cihcXHUwMDI2cmluZ2J1ZiwgdmFsLCAwLCBcXHUwMDI2cHRyKTtcXG4rXFx0Y2xvbmVfc2xpY2VfaW5fc3VicHJvZyhcXHUwMDI2cHRyLCBcXHUwMDI2ZGF0YSk7XFxuK1xcdGJwZl9yaW5nYnVmX3N1Ym1pdF9keW5wdHIoXFx1MDAyNnB0ciwgMCk7XFxuK1xcdGlmIChkYXRhKVxcbitcXHRcXHQvKiB0aGlzIHNob3VsZCBmYWlsICovXFxuK1xcdFxcdCpkYXRhID0gMTIzO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIC8qIEludmFsaWRhdGluZyBhIGR5bnB0ciBzaG91bGQgaW52YWxpZGF0ZSBhbnkgZGF0YSBzbGljZXNcXG4gICogb2YgaXRzIHBhcmVudFxcbiAgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDQ6NDk6MjAuMTAwNzY2NTkzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0NTM1ODIyODE2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0XCIsXG4gICAgXCJwcmVwYXJlX2Z1bmNfZXhpdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgcmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXQoKSBpbiBrZXJuZWwvYnBmL3ZlcmlmaWVyLmMsIGNhbGxlZCBmcm9tIHByZXBhcmVfZnVuY19leGl0KCkgdG8gdXBkYXRlIGR5bnB0ciBsaW5lYWdlIHRyYWNraW5nIHdoZW4gY2FsbGVlIGZyYW1lcyByZXR1cm4uIFRoaXMgbW9kaWZpZXMgY29yZSBCUEYgdmVyaWZpZXIgbG9naWMgcmVhY2hhYmxlIHZpYSBCUEYgcHJvZ3JhbSBsb2FkaW5nIHN5c2NhbGxzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDBiNGRjOWIyODc2YWI0Y2VhOTQxM2MyZDg0YWNlOTY3MTQwNjNiZDNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAxMCAwNDo0OToxOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggNzJhM2Y1OTk4ZGQyNy4uZWU0MWI3Mzg2Zjc1MiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuKysrIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5AQCAtODAwLDYgKzgwMCwzOSBAQCBzdGF0aWMgaW50IGR5bnB0cl9yZWZfY250KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCB2X3BhcmVudF9pZClcbiBcdHJldHVybiByZWZfY250O1xuIH1cbiBcbitzdGF0aWMgdm9pZCByZXBhcmVudF9keW5wdHJfc2xpY2VzX29uX2Z1bmNfZXhpdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuK1x0XHRcdFx0XHRcdHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqY2FsbGVlKVxuK3tcbitcdHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKnZzdGF0ZSA9IGVudi1cdTAwM2VjdXJfc3RhdGU7XG4rXHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlO1xuK1x0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZztcbitcdGludCBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgY2FsbGVlLVx1MDAzZWFsbG9jYXRlZF9zdGFjayAvIEJQRl9SRUdfU0laRTsgaSsrKSB7XG4rXHRcdHN0cnVjdCBicGZfc3RhY2tfc3RhdGUgKnNsb3QgPSBcdTAwMjZjYWxsZWUtXHUwMDNlc3RhY2tbaV07XG4rXHRcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpkeW5wdHIgPSBcdTAwMjZzbG90LVx1MDAzZXNwaWxsZWRfcHRyO1xuK1xuK1x0XHRpZiAoc2xvdC1cdTAwM2VzbG90X3R5cGVbMF0gIT0gU1RBQ0tfRFlOUFRSIHx8XG4rXHRcdCAgICAhZHlucHRyLVx1MDAzZWR5bnB0ci5maXJzdF9zbG90IHx8XG4rXHRcdCAgICAhZHlucHRyLVx1MDAzZXBhcmVudF9pZClcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0LypcbitcdFx0ICogQSBjYWxsZWUgY2FuIHNwaWxsIGEgc2xpY2UgZGVyaXZlZCBmcm9tIGl0cyBsb2NhbCBkeW5wdHIgaW50b1xuK1x0XHQgKiB0aGUgY2FsbGVyJ3Mgc3RhY2suIFRoZSBzbGljZSB0aGVuIG91dGxpdmVzIHRoZSBkeW5wdHIgaWQgdGhhdFxuK1x0XHQgKiBsaW5rcyBpdCB0byB0aGUgcmVzdCBvZiB0aGUgb2JqZWN0IHRyZWUuIFByZXNlcnZlIHRoYXQgbGluayBieVxuK1x0XHQgKiBtYWtpbmcgZXNjYXBlZCBzbGljZXMgY2hpbGRyZW4gb2YgdGhlIGR5bnB0cidzIHBhcmVudCBiZWZvcmVcbitcdFx0ICogdGhlIGNhbGxlZSBmcmFtZSBpcyBmcmVlZC5cbitcdFx0ICovXG4rXHRcdGJwZl9mb3JfZWFjaF9yZWdfaW5fdnN0YXRlKHZzdGF0ZSwgc3RhdGUsIHJlZywgKHtcbitcdFx0XHRpZiAoc3RhdGUgPT0gY2FsbGVlIHx8IHJlZy1cdTAwM2VwYXJlbnRfaWQgIT0gZHlucHRyLVx1MDAzZWlkIHx8XG4rXHRcdFx0ICAgIGJhc2VfdHlwZShyZWctXHUwMDNldHlwZSkgIT0gUFRSX1RPX01FTSlcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1x0XHRcdHJlZy1cdTAwM2VwYXJlbnRfaWQgPSBkeW5wdHItXHUwMDNlcGFyZW50X2lkO1xuK1x0XHR9KSk7XG4rXHR9XG4rfVxuK1xuIHN0YXRpYyBpbnQgZGVzdHJveV9pZl9keW5wdHJfc3RhY2tfc2xvdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRcdFx0ICAgICAgICBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlLCBpbnQgc3BpKVxuIHtcbkBAIC0xMDM5OSw2ICsxMDQzMiw3IEBAIHN0YXRpYyBpbnQgcHJlcGFyZV9mdW5jX2V4aXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50ICppbnNuX2lkeClcbiBcdFx0cHJpbnRfdmVyaWZpZXJfc3RhdGUoZW52LCBzdGF0ZSwgY2FsbGVyLVx1MDAzZWZyYW1lbm8sIHRydWUpO1xuIFx0fVxuIFx0YWNjb3VudF9wcm9jZXNzZWRfaW5zbnMoZW52LCBjYWxsZWUsIGNhbGxlcik7XG4rXHRyZXBhcmVudF9keW5wdHJfc2xpY2VzX29uX2Z1bmNfZXhpdChlbnYsIGNhbGxlZSk7XG4gXHQvKiBjbGVhciBldmVyeXRoaW5nIGluIHRoZSBjYWxsZWUuIEluIGNhc2Ugb2YgZXhjZXB0aW9uYWwgZXhpdHMgdXNpbmdcbiBcdCAqIGJwZl90aHJvdywgdGhpcyB3aWxsIGJlIGRvbmUgYnkgY29weV92ZXJpZmllcl9zdGF0ZSBmb3IgZXh0cmEgZnJhbWVzLiAqL1xuIFx0ZnJlZV9mdW5jX3N0YXRlKGNhbGxlZSk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX3FkaXNjLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfcWRpc2MuY1xuaW5kZXggNmRiZDE0ODczNDNjMC4uMTIyZWNiN2U5OGUyYSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9xZGlzYy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfcWRpc2MuY1xuQEAgLTExLDYgKzExLDcgQEBcbiAjaW5jbHVkZSBcImJwZl9xZGlzY19mYWlsX19pbnZhbGlkX2R5bnB0ci5za2VsLmhcIlxuICNpbmNsdWRlIFwiYnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX3NsaWNlLnNrZWwuaFwiXG4gI2luY2x1ZGUgXCJicGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHJfY3Jvc3NfZnJhbWUuc2tlbC5oXCJcbisjaW5jbHVkZSBcImJwZl9xZGlzY19mYWlsX19pbnZhbGlkX2R5bnB0cl9yZXR1cm5lZF9zbGljZS5za2VsLmhcIlxuICNpbmNsdWRlIFwiYnBmX3FkaXNjX2ZhaWxfX3VudHJ1c3RlZF93cml0ZS5za2VsLmhcIlxuICNpbmNsdWRlIFwiYnBmX3FkaXNjX2R5bnB0cl91c2VfYWZ0ZXJfaW52YWxpZGF0ZV9jbG9uZS5za2VsLmhcIlxuIFxuQEAgLTIzMCw2ICsyMzEsNyBAQCB2b2lkIHRlc3RfbnNfYnBmX3FkaXNjKHZvaWQpXG4gXHRcdHRlc3RfaW5jb21wbF9vcHMoKTtcbiBcdFJVTl9URVNUUyhicGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHIpO1xuIFx0UlVOX1RFU1RTKGJwZl9xZGlzY19mYWlsX19pbnZhbGlkX2R5bnB0cl9jcm9zc19mcmFtZSk7XG4rXHRSVU5fVEVTVFMoYnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX3JldHVybmVkX3NsaWNlKTtcbiBcdFJVTl9URVNUUyhicGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHJfc2xpY2UpO1xuIFx0UlVOX1RFU1RTKGJwZl9xZGlzY19mYWlsX191bnRydXN0ZWRfd3JpdGUpO1xuIFx0UlVOX1RFU1RTKGJwZl9xZGlzY19keW5wdHJfdXNlX2FmdGVyX2ludmFsaWRhdGVfY2xvbmUpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHJfcmV0dXJuZWRfc2xpY2UuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHJfcmV0dXJuZWRfc2xpY2UuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjk0MGFiYTdkOGFiZmVcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHJfcmV0dXJuZWRfc2xpY2UuY1xuQEAgLTAsMCArMSw3NiBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rXG4rI2luY2x1ZGUgXHUwMDNjdm1saW51eC5oXHUwMDNlXG4rI2luY2x1ZGUgXCJicGZfZXhwZXJpbWVudGFsLmhcIlxuKyNpbmNsdWRlIFwiYnBmX3FkaXNjX2NvbW1vbi5oXCJcbisjaW5jbHVkZSBcImJwZl9taXNjLmhcIlxuK1xuK2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbitcbitpbnQgcHJvdG87XG4rXG4rc3RhdGljIF9fbm9pbmxpbmUgc3RydWN0IGV0aGhkciAqc2xpY2VfaW5fc3VicHJvZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuK3tcbitcdHN0cnVjdCBicGZfZHlucHRyIHB0cjtcbitcbitcdGJwZl9keW5wdHJfZnJvbV9za2IoKHN0cnVjdCBfX3NrX2J1ZmYgKilza2IsIDAsIFx1MDAyNnB0cik7XG4rXHRyZXR1cm4gYnBmX2R5bnB0cl9zbGljZShcdTAwMjZwdHIsIDAsIE5VTEwsIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSk7XG4rfVxuK1xuK1NFQyhcInN0cnVjdF9vcHNcIilcbitfX2ZhaWx1cmUgX19tc2coXCJpbnZhbGlkIG1lbSBhY2Nlc3MgJ3NjYWxhcidcIilcbitpbnQgQlBGX1BST0coaW52YWxpZF9keW5wdHJfcmV0dXJuZWRfc2xpY2UsIHN0cnVjdCBza19idWZmICpza2IsXG4rXHQgICAgIHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgYnBmX3NrX2J1ZmZfcHRyICp0b19mcmVlKVxuK3tcbitcdHN0cnVjdCBldGhoZHIgKmhkcjtcbitcbitcdGhkciA9IHNsaWNlX2luX3N1YnByb2coc2tiKTtcbitcdGlmICghaGRyKSB7XG4rXHRcdGJwZl9xZGlzY19za2JfZHJvcChza2IsIHRvX2ZyZWUpO1xuK1x0XHRyZXR1cm4gTkVUX1hNSVRfRFJPUDtcbitcdH1cbitcbitcdGJwZl9xZGlzY19za2JfZHJvcChza2IsIHRvX2ZyZWUpO1xuK1xuK1x0LyogdGhpcyBzaG91bGQgZmFpbCAqL1xuK1x0cHJvdG8gPSBoZHItXHUwMDNlaF9wcm90bztcbitcbitcdHJldHVybiBORVRfWE1JVF9EUk9QO1xuK31cbitcbitTRUMoXCJzdHJ1Y3Rfb3BzXCIpXG4rX19hdXhpbGlhcnlcbitzdHJ1Y3Qgc2tfYnVmZiAqQlBGX1BST0coYnBmX3FkaXNjX3Rlc3RfZGVxdWV1ZSwgc3RydWN0IFFkaXNjICpzY2gpXG4re1xuK1x0cmV0dXJuIE5VTEw7XG4rfVxuK1xuK1NFQyhcInN0cnVjdF9vcHNcIilcbitfX2F1eGlsaWFyeVxuK2ludCBCUEZfUFJPRyhicGZfcWRpc2NfdGVzdF9pbml0LCBzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxuK1x0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4re1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcInN0cnVjdF9vcHNcIilcbitfX2F1eGlsaWFyeVxuK3ZvaWQgQlBGX1BST0coYnBmX3FkaXNjX3Rlc3RfcmVzZXQsIHN0cnVjdCBRZGlzYyAqc2NoKVxuK3tcbit9XG4rXG4rU0VDKFwic3RydWN0X29wc1wiKVxuK19fYXV4aWxpYXJ5XG4rdm9pZCBCUEZfUFJPRyhicGZfcWRpc2NfdGVzdF9kZXN0cm95LCBzdHJ1Y3QgUWRpc2MgKnNjaClcbit7XG4rfVxuK1xuK1NFQyhcIi5zdHJ1Y3Rfb3BzXCIpXG4rc3RydWN0IFFkaXNjX29wcyB0ZXN0ID0ge1xuK1x0LmVucXVldWUgICA9ICh2b2lkICopaW52YWxpZF9keW5wdHJfcmV0dXJuZWRfc2xpY2UsXG4rXHQuZGVxdWV1ZSAgID0gKHZvaWQgKilicGZfcWRpc2NfdGVzdF9kZXF1ZXVlLFxuK1x0LmluaXQgICAgICA9ICh2b2lkICopYnBmX3FkaXNjX3Rlc3RfaW5pdCxcbitcdC5yZXNldCAgICAgPSAodm9pZCAqKWJwZl9xZGlzY190ZXN0X3Jlc2V0LFxuK1x0LmRlc3Ryb3kgICA9ICh2b2lkICopYnBmX3FkaXNjX3Rlc3RfZGVzdHJveSxcbitcdC5pZCAgICAgICAgPSBcImJwZl9xZGlzY190ZXN0XCIsXG4rfTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jXG5pbmRleCAxY2Q2MWQ3MmMxNjZmLi45MmY5ZjllYTA1MzIxIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jXG5AQCAtMTg5Miw2ICsxODkyLDU1IEBAIGludCBjbG9uZV9pbnZhbGlkYXRlNCh2b2lkICpjdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIF9fbm9pbmxpbmUgdm9pZCBjbG9uZV9zbGljZV9pbl9zdWJwcm9nKHN0cnVjdCBicGZfZHlucHRyICpwdHIsIGludCAqKmRhdGEpXG4re1xuK1x0c3RydWN0IGJwZl9keW5wdHIgY2xvbmU7XG4rXG4rXHRicGZfZHlucHRyX2Nsb25lKHB0ciwgXHUwMDI2Y2xvbmUpO1xuK1x0KmRhdGEgPSBicGZfZHlucHRyX2RhdGEoXHUwMDI2Y2xvbmUsIDAsIHNpemVvZih2YWwpKTtcbit9XG4rXG4rLypcbisgKiBBIHNsaWNlIHRoYXQgZXNjYXBlcyB0aGUgY2xvbmUncyBjYWxsIGZyYW1lIHJlbWFpbnMgdmFsaWQgd2hpbGUgdGhlXG4rICogc2hhcmVkIHJpbmdidWYgcmVzZXJ2YXRpb24gaXMgbGl2ZS5cbisgKi9cbitTRUMoXCI/cmF3X3RwXCIpXG4rX19zdWNjZXNzXG4raW50IGNsb25lX3NsaWNlX3JldHVybmVkX2ZyYW1lX3ZhbGlkKHZvaWQgKmN0eClcbit7XG4rXHRzdHJ1Y3QgYnBmX2R5bnB0ciBwdHI7XG4rXHRpbnQgKmRhdGEgPSBOVUxMO1xuK1xuK1x0YnBmX3JpbmdidWZfcmVzZXJ2ZV9keW5wdHIoXHUwMDI2cmluZ2J1ZiwgdmFsLCAwLCBcdTAwMjZwdHIpO1xuK1x0Y2xvbmVfc2xpY2VfaW5fc3VicHJvZyhcdTAwMjZwdHIsIFx1MDAyNmRhdGEpO1xuK1x0aWYgKGRhdGEpXG4rXHRcdCpkYXRhID0gMTIzO1xuK1x0YnBmX3JpbmdidWZfc3VibWl0X2R5bnB0cihcdTAwMjZwdHIsIDApO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qXG4rICogUmVsZWFzaW5nIHRoZSBzaGFyZWQgcmVzZXJ2YXRpb24gbXVzdCBpbnZhbGlkYXRlIGEgc2xpY2UgdGhhdCBlc2NhcGVkXG4rICogZnJvbSBhIGNsb25lJ3MgY2FsbCBmcmFtZS5cbisgKi9cbitTRUMoXCI/cmF3X3RwXCIpXG4rX19mYWlsdXJlIF9fbXNnKFwiaW52YWxpZCBtZW0gYWNjZXNzICdzY2FsYXInXCIpXG4raW50IGNsb25lX3NsaWNlX3JldHVybmVkX2ZyYW1lX2ludmFsaWQodm9pZCAqY3R4KVxuK3tcbitcdHN0cnVjdCBicGZfZHlucHRyIHB0cjtcbitcdGludCAqZGF0YSA9IE5VTEw7XG4rXG4rXHRicGZfcmluZ2J1Zl9yZXNlcnZlX2R5bnB0cihcdTAwMjZyaW5nYnVmLCB2YWwsIDAsIFx1MDAyNnB0cik7XG4rXHRjbG9uZV9zbGljZV9pbl9zdWJwcm9nKFx1MDAyNnB0ciwgXHUwMDI2ZGF0YSk7XG4rXHRicGZfcmluZ2J1Zl9zdWJtaXRfZHlucHRyKFx1MDAyNnB0ciwgMCk7XG4rXHRpZiAoZGF0YSlcbitcdFx0LyogdGhpcyBzaG91bGQgZmFpbCAqL1xuK1x0XHQqZGF0YSA9IDEyMztcbitcbitcdHJldHVybiAwO1xuK31cbitcbiAvKiBJbnZhbGlkYXRpbmcgYSBkeW5wdHIgc2hvdWxkIGludmFsaWRhdGUgYW55IGRhdGEgc2xpY2VzXG4gICogb2YgaXRzIHBhcmVudFxuICAqL1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDQ6NDk6MjAuMTAwNzY4MDMzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTE2MzY5MDUyMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTGludXggS2VybmVsIFBhdGNoIGZvciBTeXprYWxsZXIgRnV6emluZyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBhc3Nlc3MgdGhpcyBMaW51eCBrZXJuZWwgcGF0Y2ggc2VyaWVzIGZvciBpdHMgZnV6emluZyBwb3RlbnRpYWwgd2l0aCBzeXprYWxsZXIuIFRoZSB1c2VyIGlzIGFza2luZyB0aGUgcmlnaHQgcXVlc3Rpb25zIOKAkyBpcyB0aGlzIHdvcnRoIG91ciB0aW1lLCB3aGF0IGNvbmZpZ3MgZG8gd2UgbmVlZCB0byBmb2N1cyBvbiwgYW5kIHdoYXQgc3ltYm9scyBhcmUgbW9zdCByZWxldmFudD8gSXQncyBhbGwgYWJvdXQgdHJpYWdlIGhlcmUg4oCTIHN0YW5kYXJkIExpbnV4IGtlcm5lbCBtYWludGVuYW5jZSwgUUEsIGFuZCBzZWN1cml0eSBlbmdpbmVlcmluZy4gVGhpcyBpcyBhIGNvbXBsZXRlbHkgYmVuaWduIGFuZCBkZWZlbnNpdmUgb3BlcmF0aW9uLCBzbyBubyB3b3JyaWVzIHRoZXJlLlxuXG5MZXQncyBkaXZlIGludG8gdGhlIHBhdGNoIGl0c2VsZi4gSXQgc2VlbXMgdGhlIGNvcmUgbW9kaWZpY2F0aW9uIGlzIHdpdGhpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCBhbmQgaXRzIGFzc29jaWF0ZWQgc2VsZnRlc3RzIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvLi4uYC4gU3BlY2lmaWNhbGx5LCB0aGVyZSdzIGEgbmV3IGZ1bmN0aW9uLCBgcmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXRgLCBiZWluZyBpbnRyb2R1Y2VkIHdpdGhpbiBgdmVyaWZpZXIuY2AsIGFuZCBpdCdzIGJlaW5nIGNhbGxlZCBmcm9tIGBwcmVwYXJlX2Z1bmNfZXhpdGAuIE9rYXksIGB2ZXJpZmllci5jYC4uLiB0aGF0J3MgaW50ZXJlc3RpbmcuIFRoZSBCUEYgdmVyaWZpZXIgaXMgYWx3YXlzIGEgZ29vZCB0YXJnZXQuXG5cbk5vdywgSSdsbCB1c2UgYGdyZXBwZXJgIChvciwgaWYgSSBoYXZlIHRvLCBgcmVhZC1maWxlYCkgdG8gZ2V0IHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IG9mIGB2ZXJpZmllci5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBrZXJuZWwgY29uZmlndXJhdGlvbnMgYXJlIGNydWNpYWwgZm9yIGVuYWJsaW5nIHRoaXMgZnVuY3Rpb25hbGl0eS4gS25vd2luZyB0aGUgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zIHdpbGwgYmUga2V5IHRvIGdldHRpbmcgYSBmdWxsIHBpY3R1cmUuIEkgbmVlZCB0byBpZGVudGlmeSB3aGljaCBmdW5jdGlvbnMgYXJlICptb3N0KiBsaWtlbHkgdG8gYmUgdHJpZ2dlcmVkIGJ5IGZ1enppbmcuIEFyZSB0aGVyZSBhbnkgY3JpdGljYWwgZGF0YSBzdHJ1Y3R1cmVzIG9yIG9wZXJhdGlvbnMgcmVsYXRlZCB0byBgZHlucHRyYCAoZHluYW1pYyBwb2ludGVyKSB0aGF0IGFyZSBub3cgaW4gcGxheT8gTXkgZ29hbCBpcyB0byBxdWlja2x5IHBpbnBvaW50IHRoZSBtb3N0IGludGVyZXN0aW5nIHN5bWJvbHMgYW5kIHBvdGVudGlhbCBjcmFzaCBzdXJmYWNlcyBmb3Igc3l6a2FsbGVyLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQ0NiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzMSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA0OjQ5OjMxLjczNzY3NzcxNFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTEzNTc3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZXBhcmVudF9keW5wdHJfc2xpY2VzX29uX2Z1bmNfZXhpdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9Nzg0PXN0YXRpYyBpbnQgZHlucHRyX3JlZl9jbnQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHZfcGFyZW50X2lkKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTgwMi1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6ODAzOnN0YXRpYyB2b2lkIHJlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTgwNC1cXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKmNhbGxlZSlcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMDM2Nz1zdGF0aWMgaW50IHByZXBhcmVfZnVuY19leGl0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCAqaW5zbl9pZHgpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTA0MzQtXFx0YWNjb3VudF9wcm9jZXNzZWRfaW5zbnMoZW52LCBjYWxsZWUsIGNhbGxlcik7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEwNDM1OlxcdHJlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0KGVudiwgY2FsbGVlKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTA0MzYtXFx0LyogY2xlYXIgZXZlcnl0aGluZyBpbiB0aGUgY2FsbGVlLiBJbiBjYXNlIG9mIGV4Y2VwdGlvbmFsIGV4aXRzIHVzaW5nXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA0OjQ5OjMxLjc5NjgxOTcyM1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY0NTA3NDc3NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIEtlcm5lbCBCUEYgVmVyaWZpZXIgRnVuY3Rpb24gRXhpdCBIYW5kbGluZyoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhlIEJQRiB2ZXJpZmllciBoYW5kbGVzIGZ1bmN0aW9uIGV4aXRzLCBwYXJ0aWN1bGFybHkgd2l0aCByZXNwZWN0IHRvIGR5bmFtaWMgcG9pbnRlciBzbGljZXMuIExldCdzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYHByZXBhcmVfZnVuY19leGl0YCBhbmQgYHJlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0YCBmdW5jdGlvbnMgd2l0aGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBUaGVzZSBhcmUgdGhlIGtleSBmdW5jdGlvbnMgaGFuZGxpbmcgd2hhdCBoYXBwZW5zIHdoZW4gYSBCUEYgZnVuY3Rpb24gaXMgZXhpdGluZywgYW5kIHRoZXkncmUgbGlrZWx5IHdoZXJlIHRoZSBsb2dpYyBmb3IgcG9pbnRlciBtYW5hZ2VtZW50IHJlc2lkZXMuIEknbGwgZm9jdXMgbXkgYXR0ZW50aW9uIGFyb3VuZCBsaW5lIDgwMCBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCBhbmQgdGFrZSBhIGdvb2QgbG9vayBhdCB0aGUgY29kZSBibG9jayBpbiB0aGF0IGFyZWEsIGFuZCB0aGUgcmVsYXRlZCBjb2RlLCB0byB1bmRlcnN0YW5kIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gZ3Jhc3AgaG93IHRoZSBkeW5hbWljIHBvaW50ZXJzIGFuZCBzbGljZXMgYXJlIGJlaW5nIG1hbmFnZWQsIGVzcGVjaWFsbHkgdG8gZmlndXJlIG91dCB0aGUgYnVnIHRoYXQgaGFzIGJlZW4gcmVwb3J0ZWQuIEhvcGVmdWxseSwgYnkgdW5kZXJzdGFuZGluZyB0aGVzZSBrZXkgcm91dGluZXMsIEkgY2FuIGlkZW50aWZ5IHRoZSByb290IGNhdXNlIG9mIHRoZSBpc3N1ZSBhbmQgcGlucG9pbnQgYSBzb2x1dGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjM0NiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA0OjQ5OjM4LjI0NzU3MDI0NFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTAxMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgwMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDgwMDpcXHRcXHRyZXR1cm4gcmVmX2NudDtcXG4gODAxOlxcdH1cXG4gODAyOlxcdFxcbiA4MDM6XFx0c3RhdGljIHZvaWQgcmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4gODA0OlxcdFxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqY2FsbGVlKVxcbiA4MDU6XFx0e1xcbiA4MDY6XFx0XFx0c3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqdnN0YXRlID0gZW52LVxcdTAwM2VjdXJfc3RhdGU7XFxuIDgwNzpcXHRcXHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlO1xcbiA4MDg6XFx0XFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZztcXG4gODA5OlxcdFxcdGludCBpO1xcbiA4MTA6XFx0XFxuIDgxMTpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgY2FsbGVlLVxcdTAwM2VhbGxvY2F0ZWRfc3RhY2sgLyBCUEZfUkVHX1NJWkU7IGkrKykge1xcbiA4MTI6XFx0XFx0XFx0c3RydWN0IGJwZl9zdGFja19zdGF0ZSAqc2xvdCA9IFxcdTAwMjZjYWxsZWUtXFx1MDAzZXN0YWNrW2ldO1xcbiA4MTM6XFx0XFx0XFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKmR5bnB0ciA9IFxcdTAwMjZzbG90LVxcdTAwM2VzcGlsbGVkX3B0cjtcXG4gODE0OlxcdFxcbiA4MTU6XFx0XFx0XFx0aWYgKHNsb3QtXFx1MDAzZXNsb3RfdHlwZVswXSAhPSBTVEFDS19EWU5QVFIgfHxcXG4gODE2OlxcdFxcdFxcdCAgICAhZHlucHRyLVxcdTAwM2VkeW5wdHIuZmlyc3Rfc2xvdCB8fFxcbiA4MTc6XFx0XFx0XFx0ICAgICFkeW5wdHItXFx1MDAzZXBhcmVudF9pZClcXG4gODE4OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA4MTk6XFx0XFxuIDgyMDpcXHRcXHRcXHQvKlxcbiA4MjE6XFx0XFx0XFx0ICogQSBjYWxsZWUgY2FuIHNwaWxsIGEgc2xpY2UgZGVyaXZlZCBmcm9tIGl0cyBsb2NhbCBkeW5wdHIgaW50b1xcbiA4MjI6XFx0XFx0XFx0ICogdGhlIGNhbGxlcidzIHN0YWNrLiBUaGUgc2xpY2UgdGhlbiBvdXRsaXZlcyB0aGUgZHlucHRyIGlkIHRoYXRcXG4gODIzOlxcdFxcdFxcdCAqIGxpbmtzIGl0IHRvIHRoZSByZXN0IG9mIHRoZSBvYmplY3QgdHJlZS4gUHJlc2VydmUgdGhhdCBsaW5rIGJ5XFxuIDgyNDpcXHRcXHRcXHQgKiBtYWtpbmcgZXNjYXBlZCBzbGljZXMgY2hpbGRyZW4gb2YgdGhlIGR5bnB0cidzIHBhcmVudCBiZWZvcmVcXG4gODI1OlxcdFxcdFxcdCAqIHRoZSBjYWxsZWUgZnJhbWUgaXMgZnJlZWQuXFxuIDgyNjpcXHRcXHRcXHQgKi9cXG4gODI3OlxcdFxcdFxcdGJwZl9mb3JfZWFjaF9yZWdfaW5fdnN0YXRlKHZzdGF0ZSwgc3RhdGUsIHJlZywgKHtcXG4gODI4OlxcdFxcdFxcdFxcdGlmIChzdGF0ZSA9PSBjYWxsZWUgfHwgcmVnLVxcdTAwM2VwYXJlbnRfaWQgIT0gZHlucHRyLVxcdTAwM2VpZCB8fFxcbiA4Mjk6XFx0XFx0XFx0XFx0ICAgIGJhc2VfdHlwZShyZWctXFx1MDAzZXR5cGUpICE9IFBUUl9UT19NRU0pXFxuIDgzMDpcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gODMxOlxcdFxcdFxcdFxcdHJlZy1cXHUwMDNlcGFyZW50X2lkID0gZHlucHRyLVxcdTAwM2VwYXJlbnRfaWQ7XFxuIDgzMjpcXHRcXHRcXHR9KSk7XFxuIDgzMzpcXHRcXHR9XFxuIDgzNDpcXHR9XFxuIDgzNTpcXHRcXG4gODM2OlxcdHN0YXRpYyBpbnQgZGVzdHJveV9pZl9keW5wdHJfc3RhY2tfc2xvdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiA4Mzc6XFx0XFx0XFx0XFx0XFx0ICAgICAgICBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlLCBpbnQgc3BpKVxcbiA4Mzg6XFx0e1xcbiA4Mzk6XFx0XFx0aW50IGVyciA9IDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA0OjQ5OjM4LjI0OTE4MzY0NFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5NTk4Mjg3NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyBDb21wbGV4IENvZGU6IEEgRm9jdXNlZCBJbnZlc3RpZ2F0aW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGNvZGViYXNlLCBhbmQgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBpc3N1ZS4gTXkgbWVudGFsIG1hcCBpcyBsZWFkaW5nIG1lIHRvIGBwcmVwYXJlX2Z1bmNfZXhpdGAuIExldCdzIHplcm8gaW4gb24gdGhhdCBzZWN0aW9uLCBhcm91bmQgbGluZSAxMDQwMC4gVGhhdCdzIHdoZXJlIEkgYW50aWNpcGF0ZSB0aGUgcmVsZXZhbnQgbG9naWMgcmVzaWRlcy4gSSdtIGZvY3VzaW5nIG15IGF0dGVudGlvbiB0aGVyZSBiZWNhdXNlIEkgaGF2ZSBhIGh1bmNoIHJlbGF0ZWQgdG8gdGhlIGZhaWx1cmUgbW9kZSBhbmQgdGhhdCBwYXJ0aWN1bGFyIGZ1bmN0aW9uIGlzIGluIG15IHRhcmdldCB6b25lIGZvciB0aGUga2luZCBvZiBwcm9ibGVtIEknbSB0cnlpbmcgdG8gc29sdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczMjksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA0OjQ5OjQwLjIwOTAxNTYxNFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5MzI0MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTA0MjAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwNDIwOlxcdFxcdCAqIGNvbnZlcmdlcyBpc19zdGF0ZV92aXNpdGVkKCkgd291bGQgcHJ1bmUgdGhhdCB2aXNpdCBldmVudHVhbGx5LlxcbjEwNDIxOlxcdFxcdCAqL1xcbjEwNDIyOlxcdFxcdGluX2NhbGxiYWNrX2ZuID0gY2FsbGVlLVxcdTAwM2Vpbl9jYWxsYmFja19mbjtcXG4xMDQyMzpcXHRcXHRpZiAoaW5fY2FsbGJhY2tfZm4pXFxuMTA0MjQ6XFx0XFx0XFx0Kmluc25faWR4ID0gY2FsbGVlLVxcdTAwM2VjYWxsc2l0ZTtcXG4xMDQyNTpcXHRcXHRlbHNlXFxuMTA0MjY6XFx0XFx0XFx0Kmluc25faWR4ID0gY2FsbGVlLVxcdTAwM2VjYWxsc2l0ZSArIDE7XFxuMTA0Mjc6XFx0XFxuMTA0Mjg6XFx0XFx0aWYgKGVudi1cXHUwMDNlbG9nLmxldmVsIFxcdTAwMjYgQlBGX0xPR19MRVZFTCkge1xcbjEwNDI5OlxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwicmV0dXJuaW5nIGZyb20gY2FsbGVlOlxcXFxuXFxcIik7XFxuMTA0MzA6XFx0XFx0XFx0cHJpbnRfdmVyaWZpZXJfc3RhdGUoZW52LCBzdGF0ZSwgY2FsbGVlLVxcdTAwM2VmcmFtZW5vLCB0cnVlKTtcXG4xMDQzMTpcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcInRvIGNhbGxlciBhdCAlZDpcXFxcblxcXCIsICppbnNuX2lkeCk7XFxuMTA0MzI6XFx0XFx0XFx0cHJpbnRfdmVyaWZpZXJfc3RhdGUoZW52LCBzdGF0ZSwgY2FsbGVyLVxcdTAwM2VmcmFtZW5vLCB0cnVlKTtcXG4xMDQzMzpcXHRcXHR9XFxuMTA0MzQ6XFx0XFx0YWNjb3VudF9wcm9jZXNzZWRfaW5zbnMoZW52LCBjYWxsZWUsIGNhbGxlcik7XFxuMTA0MzU6XFx0XFx0cmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXQoZW52LCBjYWxsZWUpO1xcbjEwNDM2OlxcdFxcdC8qIGNsZWFyIGV2ZXJ5dGhpbmcgaW4gdGhlIGNhbGxlZS4gSW4gY2FzZSBvZiBleGNlcHRpb25hbCBleGl0cyB1c2luZ1xcbjEwNDM3OlxcdFxcdCAqIGJwZl90aHJvdywgdGhpcyB3aWxsIGJlIGRvbmUgYnkgY29weV92ZXJpZmllcl9zdGF0ZSBmb3IgZXh0cmEgZnJhbWVzLiAqL1xcbjEwNDM4OlxcdFxcdGZyZWVfZnVuY19zdGF0ZShjYWxsZWUpO1xcbjEwNDM5OlxcdFxcdHN0YXRlLVxcdTAwM2VmcmFtZVtzdGF0ZS1cXHUwMDNlY3VyZnJhbWUtLV0gPSBOVUxMO1xcbjEwNDQwOlxcdFxcdGludmFsaWRhdGVfb3V0Z29pbmdfc3RhY2tfYXJncyhlbnYsIGNhbGxlcik7XFxuMTA0NDE6XFx0XFxuMTA0NDI6XFx0XFx0LyogZm9yIGNhbGxiYWNrcyB3aWRlbiBpbXByZWNpc2Ugc2NhbGFycyB0byBtYWtlIHByb2dyYW1zIGxpa2UgYmVsb3cgdmVyaWZ5OlxcbjEwNDQzOlxcdFxcdCAqXFxuMTA0NDQ6XFx0XFx0ICogICBzdHJ1Y3QgY3R4IHsgaW50IGk7IH1cXG4xMDQ0NTpcXHRcXHQgKiAgIHZvaWQgY2IoaW50IGlkeCwgc3RydWN0IGN0eCAqY3R4KSB7IGN0eC1cXHUwMDNlaSsrOyAuLi4gfVxcbjEwNDQ2OlxcdFxcdCAqICAgLi4uXFxuMTA0NDc6XFx0XFx0ICogICBzdHJ1Y3QgY3R4ID0geyAuaSA9IDA7IH1cXG4xMDQ0ODpcXHRcXHQgKiAgIGJwZl9sb29wKDEwMCwgY2IsIFxcdTAwMjZjdHgsIDApO1xcbjEwNDQ5OlxcdFxcdCAqXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA0OjQ5OjQwLjIwOTgxMzY3NFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUwOTIyNDMyMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCUEYgVmVyaWZpZXIgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgaXMgdGhpcyBjb2RlIGV2ZW4gcmVhY2hhYmxlPyBZZXAsIGl0J3MgcmlnaHQgdGhlcmUgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIFRoZSBCUEYgdmVyaWZpZXIgaXMgYSBjcml0aWNhbCBwYXJ0IG9mIHRoZSBMaW51eCBrZXJuZWwsIGFjY2Vzc2libGUgdGhyb3VnaCB0aGUgYGJwZigpYCBzeXNjYWxsIHdpdGggYEJQRl9QUk9HX0xPQURgLCB3aGljaCBtZWFucyB1c2Vyc3BhY2UgY2FuIHRyaWdnZXIgaXQuIEl0J3MgZWFzaWx5IGZ1enplZCwgdG9vLCB0aGFua3MgdG8gdG9vbHMgbGlrZSBzeXprYWxsZXIuIEdvb2Qgc3RhcnQuXG5cbk5vdywgd2hhdCdzIHRoaXMgcGF0Y2ggYWN0dWFsbHkgKmRvaW5nKj8gSXQncyBoYW5kbGluZyB0aGUgcmVwYXJlbnRpbmcgb2YgZHluYW1pYyBwb2ludGVyIChkeW5wdHIpIHNsaWNlcyB3aGVuIGEgQlBGIGZ1bmN0aW9uIHJldHVybnMuIFNwZWNpZmljYWxseSwgaWYgYSBjYWxsZWQgZnVuY3Rpb24gKHN1YnByb2dyYW0sIGNhbGxlZSkgc3BpbGxzIGEgc2xpY2UgdGhhdCBjYW1lIGZyb20gYSBsb2NhbCBkeW5wdHIgaW50byB0aGUgY2FsbGVyJ3Mgc3RhY2sgb3IgcmVnaXN0ZXJzLCB0aGF0IHNsaWNlJ3MgbGlmZXRpbWUgZXh0ZW5kcyBiZXlvbmQgdGhlIGR5bnB0ciBJRC4gVGhlIHBhdGNoIGlzIG1vZGlmeWluZyB0aGUgdmVyaWZpZXIncyBzdGF0ZSB0cmFja2luZyBsb2dpYyBpbiBgcHJlcGFyZV9mdW5jX2V4aXRgIHRvIGNvcnJlY3RseSByZXBhcmVudCB0aG9zZSBzbGljZXMgdG8gdGhlIGNvcnJlY3QgZHlucHRyJ3MgcGFyZW50LlxuXG5JcyBpdCB3b3J0aCBmdXp6aW5nPyBBYnNvbHV0ZWx5LiBBbnkgY2hhbmdlIHRvIHRoZSBjb3JlIEJQRiB2ZXJpZmllciBsb2dpYyBpcyBoaWdoLXByaW9yaXR5IGZvciBmdXp6aW5nLiBUaGUgdmVyaWZpZXIgaXMgYSBrZXkgc3Vic3lzdGVtLCBzbyBtb2RpZmljYXRpb25zIGhlcmUgYXJlIHByaW1lIHRhcmdldHMuXG5cbk9rYXksIG5vdyBmb3IgYEZvY3VzU3ltYm9sc2AuIFdoYXQgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIHRvIGZvY3VzIG9uPyBMZXQncyBzZWUuLi4gSW5pdGlhbGx5LCBJIHRob3VnaHQgYGJwZl9jaGVja2Agc2hvdWxkIGJlIGxpc3RlZCwgYXMgaXQncyB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgdGhlIHZlcmlmaWVyLCBidXQgdGhhdCBpcyB0aGUgbWFpbiBlbnRyeXBvaW50LCB3aGlsZSBgcHJlcGFyZV9mdW5jX2V4aXRgIGFuZCBgcmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXRgIGFyZSBtb3JlIHNwZWNpZmljIHRvIHRoaXMgY2hhbmdlLlxuXG5JIG5lZWQgdG8gYXBwbHkgdGhlIFwiRVhUUkFDVElORyBGb2N1c1N5bWJvbHNcIiBtZXRob2RvbG9neSBJIGtlZXAgYXQgaGFuZDpcblxuKiAgIEF2b2lkIGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zLlxuKiAgIFRhcmdldCBzcGVjaWZpYyBmZWF0dXJlIGxvZ2ljIGFuZCBlbnRyeXBvaW50cy5cblxuYHJlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0YCBpcyB0aGUgbmV3IHN0YXRpYyBmdW5jdGlvbiBhZGRlZC4gYHByZXBhcmVfZnVuY19leGl0YCBjYWxscyB0aGlzIGZ1bmN0aW9uLiBgcHJlcGFyZV9mdW5jX2V4aXRgIGlzIGNhbGxlZCBieSBzZXZlcmFsIGZ1bmN0aW9ucy5cblxuSW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2A6XG5cbiogICBgc3RhdGljIHZvaWQgcmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpjYWxsZWUpYFxuKiAgIGBzdGF0aWMgaW50IHByZXBhcmVfZnVuY19leGl0KC4uLilgXG5cbkknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGZ1bmN0aW9ucyBjYWxsIGBwcmVwYXJlX2Z1bmNfZXhpdGAuIEknbSBjb25maWRlbnQgdGhhdCBJIHdpbGwga25vdyB3aGljaCBmdW5jdGlvbnMgdG8gZnV6eiwgZ2l2ZW4gdGhhdCB0aGUgQlBGIHZlcmlmaWVyIGlzIGEgbWFqb3Igc3Vic3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDk2LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTkyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDQ6NDk6NDUuMzAyMDU5NDU2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODk4MDA1OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHJlcGFyZV9mdW5jX2V4aXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jPTEwMzU5PXN0YXRpYyBib29sIHJldHZhbF9yYW5nZV93aXRoaW4oc3RydWN0IGJwZl9yZXR2YWxfcmFuZ2UgcmFuZ2UsIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTAzNjYtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEwMzY3OnN0YXRpYyBpbnQgcHJlcGFyZV9mdW5jX2V4aXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50ICppbnNuX2lkeClcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTAzNjgte1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTEwODQ3PXN0YXRpYyBpbnQgY2hlY2tfaGVscGVyX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMzQ5LVxcdFxcdFxcdCAqIGZyYW1lLiBBIGNhbGxiYWNrIGZyYW1lIGNhbm5vdCBiZSBsZWZ0IHRoYXQgd2F5IGJlY2F1c2VcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTEzNTA6XFx0XFx0XFx0ICogcHJlcGFyZV9mdW5jX2V4aXQoKSB3b3VsZCBhcHBseSBpdHMgcmV0dXJuIGNvbnRyYWN0IHRvIHRoZVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTM1MS1cXHRcXHRcXHQgKiB1bmtub3duIFIwIHN5bnRoZXNpemVkIGJlbG93LiBTdGFjay1kZXB0aCB2YWxpZGF0aW9uIHJlamVjdHNcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTM2My1cXHRcXHRcXHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgQlBGX1JFR18wKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTEzNjQ6XFx0XFx0XFx0ZXJyID0gcHJlcGFyZV9mdW5jX2V4aXQoZW52LCBcXHUwMDI2ZW52LVxcdTAwM2VpbnNuX2lkeCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMzY1LVxcdFxcdFxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTczMjI9c3RhdGljIGludCBjaGVja19sZF9hYnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3NDAyLVxcdFxcdG1hcmtfcmVnX2tub3duX3plcm8oZW52LCByZWdzLCBCUEZfUkVHXzApO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNzQwMzpcXHRcXHRlcnIgPSBwcmVwYXJlX2Z1bmNfZXhpdChlbnYsIFxcdTAwMjZlbnYtXFx1MDAzZWluc25faWR4KTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc0MDQtXFx0XFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xODEwOT1zdGF0aWMgaW50IHByb2Nlc3NfYnBmX2V4aXRfZnVsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4MTE1LVxcdC8qIFdlIG11c3QgZG8gY2hlY2tfcmVmZXJlbmNlX2xlYWsgaGVyZSBiZWZvcmVcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTgxMTY6XFx0ICogcHJlcGFyZV9mdW5jX2V4aXQgdG8gaGFuZGxlIHRoZSBjYXNlIHdoZW5cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgxMTctXFx0ICogc3RhdGUtXFx1MDAzZWN1cmZyYW1lIFxcdTAwM2UgMCwgaXQgbWF5IGJlIGEgY2FsbGJhY2sgZnVuY3Rpb24sXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgxMjctXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE4MTI4OlxcdC8qIFRoZSBzaWRlIGVmZmVjdCBvZiB0aGUgcHJlcGFyZV9mdW5jX2V4aXQgd2hpY2ggaXNcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgxMjktXFx0ICogYmVpbmcgc2tpcHBlZCBpcyB0aGF0IGl0IGZyZWVzIGJwZl9mdW5jX3N0YXRlLlxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4MTQxLVxcdFxcdC8qIGV4aXQgZnJvbSBuZXN0ZWQgZnVuY3Rpb24gKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTgxNDI6XFx0XFx0ZXJyID0gcHJlcGFyZV9mdW5jX2V4aXQoZW52LCBcXHUwMDI2ZW52LVxcdTAwM2VpbnNuX2lkeCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4MTQzLVxcdFxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA0OjQ5OjQ1LjQ5MTg2NzUxNFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTI1MDAwOTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcyB0YXNrLCB3YWxraW5nIHRocm91Z2ggbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKlZlcmlmeWluZyBCUEYgVmVyaWZpZXIgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBpbnRvIHRoZSBrZXJuZWwncyBCUEYgdmVyaWZpZXIgc2V0dXAuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBlc3NlbnRpYWwgS2NvbmZpZyBvcHRpb25zIHRoYXQgZ292ZXJuIHRoZSBjb21waWxhdGlvbiBvZiBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gVGhpcyBpcyBmb3VuZGF0aW9uYWwg4oCTIGVuc3VyaW5nIHRoZSB2ZXJpZmllciBpdHNlbGYgaXMgKmVuYWJsZWQqIGFuZCBjb25maWd1cmVkIGNvcnJlY3RseSBpcyB0aGUgYmVkcm9jayBvZiBhbnl0aGluZyBCUEYtcmVsYXRlZC4gV2hlcmUgYXJlIHRoZXNlIHNldHRpbmdzIGxpa2VseSB0byBiZSBkZWZpbmVkPyBXZWxsLCBJJ2QgaW1tZWRpYXRlbHkgaGVhZCB0byB0aGUgb2J2aW91cyBwbGFjZXMuXG5cbkknZCBuZWVkIHRvIGV4YW1pbmUgYm90aCB0aGUgYGtlcm5lbC9icGYvTWFrZWZpbGVgIGFuZCBlaXRoZXIgYGluaXQvS2NvbmZpZ2Agb3IgYGtlcm5lbC9icGYvS2NvbmZpZ2AuIGBNYWtlZmlsZWAgdG8gc2VlIHRoZSBjb21waWxhdGlvbiBkZXBlbmRlbmNpZXMsIGFuZCB0aGUgYEtjb25maWdgIGZpbGVzIHdvdWxkIGNvbnRhaW4gdGhlIGFjdHVhbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEZyb20gdGhvc2UgSSBjYW4gZGV0ZXJtaW5lIGFueSBkZXBlbmRlbmNpZXMsIHdoZXRoZXIgdGhlIGJ1aWxkIHJ1bGVzIGFyZSBhY3RpdmUsIGFuZCB3aGF0IHRoZSBkZXBlbmRlbmNpZXMgbWlnaHQgYmUuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBleGFtaW5pbmcgdGhlIHJlbGV2YW50IG9uZXMgYW5kIHRoYXQgSSBoYXZlbid0IG1pc3NlZCBhbnkuIEkgaGF2ZSB0byBtYWtlIHN1cmUgdGhhdCB0aGUgdmVyaWZpZXIgaXMgZW5hYmxlZCBmb3IgdGhlIGJ1aWxkLCBvdGhlcndpc2UsIEkgd29uJ3QgaGF2ZSBhbnl0aGluZyB0byB3b3JrIHdpdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDYxLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDQ6NDk6NDguMDE2ODczMTY1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzgyNTU4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2ZXJpZmllclxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlPTc9Q0ZMQUdTX2NvcmUubyArPSAtV25vLW92ZXJyaWRlLWluaXQgJChjZmxhZ3Mtbm9nY3NlLXl5KVxcbmtlcm5lbC9icGYvTWFrZWZpbGUtOC1cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjk6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBzeXNjYWxsLm8gdmVyaWZpZXIubyBpbm9kZS5vIGhlbHBlcnMubyB0bnVtLm8gY251bS5vIGxvZy5vIHRva2VuLm8gbGl2ZW5lc3MubyBjb25zdF9mb2xkLm8gZGlhZ25vc3RpY3Mub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMTAtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBicGZfaXRlci5vIG1hcF9pdGVyLm8gdGFza19pdGVyLm8gcHJvZ19pdGVyLm8gbGlua19pdGVyLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDQ6NDk6NDguMDg0NzA0MDkzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyMjU3NzMxNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgQlBGIFN5c2NhbGwgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBwaW5wb2ludCB3aGVyZSB0aGUgYEJQRl9TWVNDQUxMYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBkZWZpbmVkLiBHaXZlbiBteSBmYW1pbGlhcml0eSB3aXRoIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtLCB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlcyB0byBzdGFydCBsb29raW5nIGFyZSB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIGZpbGVzLiBJJ2xsIGJlZ2luIGJ5IGNoZWNraW5nIGBpbml0L0tjb25maWdgIOKAkyBpdCBvZnRlbiBob2xkcyBmdW5kYW1lbnRhbCBzZXR0aW5ncyByZWxhdGVkIHRvIGtlcm5lbCBmZWF0dXJlcy4gSWYgaXQncyBub3QgdGhlcmUsIHRoZSBuZXh0IGxvZ2ljYWwgbG9jYXRpb24gd291bGQgYmUgdGhlIGNvcmUgQlBGIGltcGxlbWVudGF0aW9uIGRpcmVjdG9yeSBpdHNlbGYsIHNwZWNpZmljYWxseSBga2VybmVsL2JwZi9LY29uZmlnYC4gVGhpcyBpcyB3aGVyZSBJIHdvdWxkIGV4cGVjdCBhbnl0aGluZyByZWxhdGVkIHRvIEJQRidzIHN5c3RlbSBjYWxsIGludGVyZmFjZSB0byByZXNpZGUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBpdCBpcyBpbXBsZW1lbnRlZC4gSSdtIGdvaW5nIHRvIGxvb2sgaW4gdGhvc2UgdHdvIHBsYWNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1NjIsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwNDo0OTo1MC4zMTA0ODAxNDlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4MzM1MDA5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX1NZU0NBTExcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA0OjQ5OjUwLjM4ODgyMjE0OFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNjk5MjgxODc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYEJQRl9TWVNDQUxMYCBpcyBkZWZpbmVkIGluIHRoZSBLY29uZmlnIGZpbGVzLiBUaGlzIGlzIGEgY29tbW9uIHRhc2ssIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggQlBGLXJlbGF0ZWQgY29uZmlndXJhdGlvbnMsIGFuZCBJIG5lZWQgdG8gYmUgZWZmaWNpZW50LiBJ4oCZbGwgc3RhcnQgYnkgZG9pbmcgYSBxdWljayBzZWFyY2ggd2l0aGluIHRoZSBLY29uZmlnIGZpbGVzLiBJIGtub3cgSSBjYW4gdXNlIG15IHRvb2xzIHRvIHNlYXJjaCB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEknbSBnb2luZyB0byBzdGFydCB3aXRoIGEgZ3JlcC1saWtlIHNlYXJjaCB0aHJvdWdoIHRoZSBLY29uZmlnIGZpbGVzIHRvIHNlZSBpZiB0aGUgc3ltYm9sIGhhcyBiZWVuIGRlZmluZWQuIFRoZW4gSSB3aWxsIG5lZWQgdG8gbG9vayBhdCB0aGUgY29uZmlnIG9wdGlvbnMgdG8gc2VlIHdoYXQgdGhlIHN5bWJvbCBkb2VzLiBNeSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcywgaXRzIGltcGxpY2F0aW9ucywgYW5kIGhvdyBpdCByZWxhdGVzIHRvIHRoZSBvdmVyYWxsIEJQRiBmZWF0dXJlIHNldC4gVGhpcyBpbmZvcm1hdGlvbiBpcyBjcml0aWNhbCBmb3IgYW55IGZ1dHVyZSBtb2RpZmljYXRpb25zIG9yIHRyb3VibGVzaG9vdGluZyByZWxhdGVkIHRvIEJQRiBzeXNjYWxscy4gVGltZSB0byBkaWcgaW4hXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODAwLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDQ6NDk6NTIuMDg4MTA2MjcyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzUzMDYzNzUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1lTQ0FMTFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcXFwiQlBGIHN1YnN5c3RlbVxcXCJcXG5rZXJuZWwvYnBmL0tjb25maWctMjYtXFxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cXHRib29sIFxcXCJFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA0OjQ5OjU2LjQ0MTE3NjQzNloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzUwMTU2NDMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgQlBGIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgZm9yIHRoaXMgQlBGIGZlYXR1cmUuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgYEtjb25maWdgIGZpbGUgd2l0aGluIHRoZSBga2VybmVsL2JwZi9gIGRpcmVjdG9yeS4gVGhhdCdzIHRoZSBnby10byBwbGFjZSBmb3IgdW5kZXJzdGFuZGluZyBob3cgYSBmZWF0dXJlIGlzIGVuYWJsZWQgYW5kIHdoYXQgZWxzZSBpdCBkZXBlbmRzIG9uLiBJJ2xsIHplcm8gaW4gb24gbGluZSAyNyDigJMgdGhhdCBzZWVtcyBsaWtlIGEgcmVhc29uYWJsZSBzdGFydGluZyBwb2ludCwgb2Z0ZW4gdGhlIGluaXRpYWwgZW50cnkgZm9yIGEgZmVhdHVyZSBkZWZpbml0aW9uLiBIb3BlZnVsbHksIHRoYXQgd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiBhbnkgcHJlcmVxdWlzaXRlcyBvciBvdGhlciBjb25maWd1cmF0aW9ucyB0aGF0IG5lZWQgdG8gYmUgaW4gcGxhY2UgYmVmb3JlIHRoaXMgQlBGIGNvbXBvbmVudCBjYW4gYmUgYWN0aXZhdGVkLiBUaW1lIHRvIHNlZSB3aGF0IHRoZSBLY29uZmlnIGhhcyB0byBzYXkhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMTEzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDQ6NDk6NTguMTkxMzM0Nzg5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkzODQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNSxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAyNTpcXHRtZW51IFxcXCJCUEYgc3Vic3lzdGVtXFxcIlxcbiAgMjY6XFx0XFxuICAyNzpcXHRjb25maWcgQlBGX1NZU0NBTExcXG4gIDI4OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFxcXCJcXG4gIDI5OlxcdFxcdHNlbGVjdCBCUEZcXG4gIDMwOlxcdFxcdHNlbGVjdCBJUlFfV09SS1xcbiAgMzE6XFx0XFx0c2VsZWN0IE5FRURfVEFTS1NfUkNVXFxuICAzMjpcXHRcXHRzZWxlY3QgVEFTS1NfVFJBQ0VfUkNVXFxuICAzMzpcXHRcXHRzZWxlY3QgQklOQVJZX1BSSU5URlxcbiAgMzQ6XFx0XFx0c2VsZWN0IE5FVF9TT0NLX01TRyBpZiBORVRcXG4gIDM1OlxcdFxcdHNlbGVjdCBORVRfWEdSRVNTIGlmIE5FVFxcbiAgMzY6XFx0XFx0c2VsZWN0IFBBR0VfUE9PTCBpZiBORVRcXG4gIDM3OlxcdFxcdGRlZmF1bHQgblxcbiAgMzg6XFx0XFx0aGVscFxcbiAgMzk6XFx0XFx0ICBFbmFibGUgdGhlIGJwZigpIHN5c3RlbSBjYWxsIHRoYXQgYWxsb3dzIHRvIG1hbmlwdWxhdGUgQlBGIHByb2dyYW1zXFxuICA0MDpcXHRcXHQgIGFuZCBtYXBzIHZpYSBmaWxlIGRlc2NyaXB0b3JzLlxcbiAgNDE6XFx0XFxuICA0MjpcXHRjb25maWcgQlBGX0pJVFxcbiAgNDM6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIEJQRiBKdXN0IEluIFRpbWUgY29tcGlsZXJcXFwiXFxuICA0NDpcXHRcXHRkZXBlbmRzIG9uIEJQRlxcbiAgNDU6XFx0XFx0ZGVwZW5kcyBvbiBIQVZFX0NCUEZfSklUIHx8IEhBVkVfRUJQRl9KSVRcXG4gIDQ2OlxcdFxcdHNlbGVjdCBFWEVDTUVNXFxuICA0NzpcXHRcXHRoZWxwXFxuICA0ODpcXHRcXHQgIEJQRiBwcm9ncmFtcyBhcmUgbm9ybWFsbHkgaGFuZGxlZCBieSBhIEJQRiBpbnRlcnByZXRlci4gVGhpcyBvcHRpb25cXG4gIDQ5OlxcdFxcdCAgYWxsb3dzIHRoZSBrZXJuZWwgdG8gZ2VuZXJhdGUgbmF0aXZlIGNvZGUgd2hlbiBhIHByb2dyYW0gaXMgbG9hZGVkXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA0OjQ5OjU4LjE5MTQzMDYzOVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTUyMjIzNjgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEJQRiBWZXJpZmljYXRpb24gVGhvdWdodHMqKlxuXG5Pa2F5LCBzbyBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyB0aGUgY3J1Y2lhbCBjb25maWd1cmF0aW9uIG9wdGlvbjsgaXQncyB0aGUgb25lIHRoYXQgdWx0aW1hdGVseSBicmluZ3MgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIub2AuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnkgb3RoZXIgY29uZmlnIGRlcGVuZGVuY2llcywgYWx0aG91Z2ggSSBzdHJvbmdseSBzdXNwZWN0IGBCUEZfU1lTQ0FMTGAgaXMgdGhlIG9ubHkgcmVsZXZhbnQgcGllY2UgaGVyZS4gVGhlIG1lbnUgc3RydWN0dXJlIGluIHRoZSBrZXJuZWwgY29uZmlnIChcIkJQRiBzdWJzeXN0ZW1cIikgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgYW5kIGBCUEZfU1lTQ0FMTGAgc2VlbXMgdG8gYmUgc3RhbmRhbG9uZS4gTm8gZGVwZW5kZW5jaWVzLCBnb29kLlxuXG5Ob3csIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgZm9yZ290dGVuIGFueXRoaW5nIGVsc2UgSSB3YW50IHRvIGRvdWJsZS1jaGVjayBteSBtZW50YWwgbGlzdCBvZiBrZXkgc3ltYm9scyBmb3IgbXkgd29yazogYHJlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0YCwgYHByZXBhcmVfZnVuY19leGl0YCwgYW5kIHRoZW4gZWl0aGVyIGBwcm9jZXNzX2JwZl9leGl0X2Z1bGxgIG9yIGBicGZfY2hlY2tgIC0gSSBuZWVkIHRvIGtlZXAgdGhvc2UgaW4gbWluZCBhcyBJIGRpdmUgaW4uXG5cblJpZ2h0LCBsZXQncyBub3cgZHJpbGwgZG93biBpbnRvIGBicGZfY2hlY2tgLiBJdCdzIHRpbWUgdG8gZGlnIGludG8gYHZlcmlmaWVyLmNgIGFuZCBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjYxLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDQ6NTA6MDAuNzQzNjU4MDdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxNDc3MTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImludCBicGZfY2hlY2tcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjEwNDk9c3RhdGljIGludCBicGZfcHJvZ192ZXJpZnlfc2lnbmF0dXJlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjExNjUtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIxMTY2OmludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTE2Ny1cXHQgICAgICBzdHJ1Y3QgYnBmX2xvZ19hdHRyICphdHRyX2xvZylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDQ6NTA6MDAuODE1MTQwMzI4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ0OTgxNDAyOTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQlBGIFZlcmlmaWVyIENoYW5nZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlLCBzbyBJJ2xsIHN0YXJ0IGJ5IGNoZWNraW5nIGBicGZfZm9yX2VhY2hfcmVnX2luX3ZzdGF0ZWAgaW4gYHZlcmlmaWVyLmNgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHJlbGF0ZWQgbW9kaWZpY2F0aW9ucyBpbiB0aGF0IGFyZWEuIFRoZW4sIEkgc2hvdWxkIGFsc28gbG9vayBhdCB0aGUgYGR5bnB0cmAgZnVuY3Rpb25zLCBwYXJ0aWN1bGFybHkgYGR5bnB0cl9yZWZfY250YCwgYWxzbyB3aXRoaW4gYHZlcmlmaWVyLmNgLiBNeSBwcmltYXJ5IGNvbmNlcm5zIHJpZ2h0IG5vdyBhcmUgYHJlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0YCBhbmQgYHByZXBhcmVfZnVuY19leGl0YCBiZWNhdXNlIHRoZXkgYXJlIGV4cGxpY2l0bHkgZmxhZ2dlZCBhcyBkaXJlY3RseSBhZmZlY3RlZC5cblxuTm93LCBsZXQncyByZXZpZXcgdGhlIHBhcmFtZXRlcnMgZm9yIGBzZXQtcmVzdWx0c2AuIFRoZSBrZXkgdGhpbmcgaXMgdGhhdCB3ZSd2ZSBzZXQgYFdvcnRoRnV6emluZ2AgdG8gYHRydWVgLCB3aGljaCBpcyBhcHByb3ByaWF0ZSBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBjaGFuZ2UuIFRoZSBgUmVhc29uaW5nYCBzZWN0aW9uIGdpdmVzIGEgZ29vZCBvdmVydmlldzogdGhpcyBwYXRjaCBhbHRlcnMgQlBGIHZlcmlmaWVyIGxvZ2ljIHdpdGhpbiB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHkgYnkgaW50cm9kdWNpbmcgYHJlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0YCBkdXJpbmcgYHByZXBhcmVfZnVuY19leGl0YC4gVGhlIHBvaW50IGlzLCB0aGlzIHJlcGFyZW50cyBgZHlucHRyYCBzbGljZXMgdXBvbiBmdW5jdGlvbiBleGl0IHRvIG1haW50YWluIGxpbmVhZ2UgdHJhY2tpbmcgYWNyb3NzIGNhbGxlciBmcmFtZXMuIFRoaXMgdG91Y2hlcyBjb3JlIHZlcmlmaWVyIGNvZGUgdXNlZCBieSBgYnBmKEJQRl9QUk9HX0xPQUQsIC4uLilgIHdoaWNoIGlzIGEgc3Ryb25nIGluZGljYXRvciBmb3IgZnV6emluZy5cblxuVGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBwcmVjaXNlOiBgcmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXRgIGFuZCBgcHJlcGFyZV9mdW5jX2V4aXRgLCB3aGljaCBpcyBwZXJmZWN0LiBUaGlzIGhlbHBzIHVzIGRpcmVjdCBvdXIgZnV6emluZyBlZmZvcnRzIHRvIHRoZSByZWxldmFudCBjb2RlLiBBbmQgd2UncmUgZW5hYmxpbmcgYEJQRl9TWVNDQUxMYCBhcyB0aGUgYEVuYWJsZUNvbmZpZ3NgLlxuXG5GaW5hbGx5LCBqdXN0IGEgc2FuaXR5IGNoZWNrOiBldmVyeXRoaW5nIGxvb2tzIGluIG9yZGVyLiBgV29ydGhGdXp6aW5nYCBpcyBzZXQgYXMgZXhwZWN0ZWQsIHRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgc3BlY2lmaWMgdG8gdGhpcyBwYXRjaCwgYW5kIHRoZSBgRW5hYmxlQ29uZmlnc2AgYXJlIHNlbnNpYmxlLiBUaGUgYFJlYXNvbmluZ2AgaXMgY29uY2lzZSBhbmQgb24gcG9pbnQuXG5cbk9rYXksIGxldCdzIHN1Ym1pdCB0aGUgYHNldC1yZXN1bHRzYCBjb21tYW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjIxMiwiT3V0cHV0VG9rZW5zIjoxMjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDQ6NTA6MDUuMzEzMjg0NDA5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1NzA2MjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0XCIsXG4gICAgXCJwcmVwYXJlX2Z1bmNfZXhpdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgcmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXQoKSBpbiBrZXJuZWwvYnBmL3ZlcmlmaWVyLmMsIGNhbGxlZCBmcm9tIHByZXBhcmVfZnVuY19leGl0KCkgdG8gdXBkYXRlIGR5bnB0ciBsaW5lYWdlIHRyYWNraW5nIHdoZW4gY2FsbGVlIGZyYW1lcyByZXR1cm4uIFRoaXMgbW9kaWZpZXMgY29yZSBCUEYgdmVyaWZpZXIgbG9naWMgcmVhY2hhYmxlIHZpYSBCUEYgcHJvZ3JhbSBsb2FkaW5nIHN5c2NhbGxzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXRcIixcbiAgICBcInByZXBhcmVfZnVuY19leGl0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyByZXBhcmVudF9keW5wdHJfc2xpY2VzX29uX2Z1bmNfZXhpdCgpIGluIGtlcm5lbC9icGYvdmVyaWZpZXIuYywgY2FsbGVkIGZyb20gcHJlcGFyZV9mdW5jX2V4aXQoKSB0byB1cGRhdGUgZHlucHRyIGxpbmVhZ2UgdHJhY2tpbmcgd2hlbiBjYWxsZWUgZnJhbWVzIHJldHVybi4gVGhpcyBtb2RpZmllcyBjb3JlIEJQRiB2ZXJpZmllciBsb2dpYyByZWFjaGFibGUgdmlhIEJQRiBwcm9ncmFtIGxvYWRpbmcgc3lzY2FsbHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA0OjUwOjA1LjQ1ODk5OTY5N1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE0MTYyMjExNzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwNDo1MDowNS40NTk3NzEyMDdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozMTQxNTQ0NjAyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllcidzIGBwcmVwYXJlX2Z1bmNfZXhpdCgpYCBsb2dpYyBieSBhZGRpbmcgYHJlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0KClgLiBUaGlzIGVuc3VyZXMgdGhhdCBkeW5wdHIgc2xpY2VzIGVzY2FwaW5nIGEgc3VicHJvZ3JhbSBjYWxsIGZyYW1lIGhhdmUgdGhlaXIgYHBhcmVudF9pZGAgdXBkYXRlZCB0byBwb2ludCB0byB0aGUgZHlucHRyJ3MgcGFyZW50LCBwcm9wZXJseSBpbnZhbGlkYXRpbmcgc2xpY2VzIHdoZW4gdGhlIHBhcmVudCBkeW5wdHIvYnVmZmVyIGlzIGRlc3Ryb3llZCBpbiB0aGUgY2FsbGVyLlxcblxcblRoaXMgZml4IHByZXZlbnRzIFVzZS1BZnRlci1GcmVlIChVQUYpIC8gZGFuZ2xpbmcgcG9pbnRlciBkZXJlZmVyZW5jZXMgaW4gQlBGIHByb2dyYW1zLiBTdWNoIHJ1bnRpbWUgbWVtb3J5IHNhZmV0eSB2aW9sYXRpb25zIGFyZSBjYXVnaHQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwYjRkYzliMjg3NmFiNGNlYTk0MTNjMmQ4NGFjZTk2NzE0MDYzYmQzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMTAgMDQ6NDk6MTggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbmluZGV4IDcyYTNmNTk5OGRkMjcuLmVlNDFiNzM4NmY3NTIgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbisrKyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuQEAgLTgwMCw2ICs4MDAsMzkgQEAgc3RhdGljIGludCBkeW5wdHJfcmVmX2NudChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgdl9wYXJlbnRfaWQpXG4gXHRyZXR1cm4gcmVmX2NudDtcbiB9XG4gXG4rc3RhdGljIHZvaWQgcmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbitcdFx0XHRcdFx0XHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKmNhbGxlZSlcbit7XG4rXHRzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICp2c3RhdGUgPSBlbnYtXHUwMDNlY3VyX3N0YXRlO1xuK1x0c3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZTtcbitcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWc7XG4rXHRpbnQgaTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNhbGxlZS1cdTAwM2VhbGxvY2F0ZWRfc3RhY2sgLyBCUEZfUkVHX1NJWkU7IGkrKykge1xuK1x0XHRzdHJ1Y3QgYnBmX3N0YWNrX3N0YXRlICpzbG90ID0gXHUwMDI2Y2FsbGVlLVx1MDAzZXN0YWNrW2ldO1xuK1x0XHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqZHlucHRyID0gXHUwMDI2c2xvdC1cdTAwM2VzcGlsbGVkX3B0cjtcbitcbitcdFx0aWYgKHNsb3QtXHUwMDNlc2xvdF90eXBlWzBdICE9IFNUQUNLX0RZTlBUUiB8fFxuK1x0XHQgICAgIWR5bnB0ci1cdTAwM2VkeW5wdHIuZmlyc3Rfc2xvdCB8fFxuK1x0XHQgICAgIWR5bnB0ci1cdTAwM2VwYXJlbnRfaWQpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdC8qXG4rXHRcdCAqIEEgY2FsbGVlIGNhbiBzcGlsbCBhIHNsaWNlIGRlcml2ZWQgZnJvbSBpdHMgbG9jYWwgZHlucHRyIGludG9cbitcdFx0ICogdGhlIGNhbGxlcidzIHN0YWNrLiBUaGUgc2xpY2UgdGhlbiBvdXRsaXZlcyB0aGUgZHlucHRyIGlkIHRoYXRcbitcdFx0ICogbGlua3MgaXQgdG8gdGhlIHJlc3Qgb2YgdGhlIG9iamVjdCB0cmVlLiBQcmVzZXJ2ZSB0aGF0IGxpbmsgYnlcbitcdFx0ICogbWFraW5nIGVzY2FwZWQgc2xpY2VzIGNoaWxkcmVuIG9mIHRoZSBkeW5wdHIncyBwYXJlbnQgYmVmb3JlXG4rXHRcdCAqIHRoZSBjYWxsZWUgZnJhbWUgaXMgZnJlZWQuXG4rXHRcdCAqL1xuK1x0XHRicGZfZm9yX2VhY2hfcmVnX2luX3ZzdGF0ZSh2c3RhdGUsIHN0YXRlLCByZWcsICh7XG4rXHRcdFx0aWYgKHN0YXRlID09IGNhbGxlZSB8fCByZWctXHUwMDNlcGFyZW50X2lkICE9IGR5bnB0ci1cdTAwM2VpZCB8fFxuK1x0XHRcdCAgICBiYXNlX3R5cGUocmVnLVx1MDAzZXR5cGUpICE9IFBUUl9UT19NRU0pXG4rXHRcdFx0XHRjb250aW51ZTtcbitcdFx0XHRyZWctXHUwMDNlcGFyZW50X2lkID0gZHlucHRyLVx1MDAzZXBhcmVudF9pZDtcbitcdFx0fSkpO1xuK1x0fVxuK31cbitcbiBzdGF0aWMgaW50IGRlc3Ryb3lfaWZfZHlucHRyX3N0YWNrX3Nsb3Qoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdFx0XHRcdCAgICAgICAgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZSwgaW50IHNwaSlcbiB7XG5AQCAtMTAzOTksNiArMTA0MzIsNyBAQCBzdGF0aWMgaW50IHByZXBhcmVfZnVuY19leGl0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCAqaW5zbl9pZHgpXG4gXHRcdHByaW50X3ZlcmlmaWVyX3N0YXRlKGVudiwgc3RhdGUsIGNhbGxlci1cdTAwM2VmcmFtZW5vLCB0cnVlKTtcbiBcdH1cbiBcdGFjY291bnRfcHJvY2Vzc2VkX2luc25zKGVudiwgY2FsbGVlLCBjYWxsZXIpO1xuK1x0cmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXQoZW52LCBjYWxsZWUpO1xuIFx0LyogY2xlYXIgZXZlcnl0aGluZyBpbiB0aGUgY2FsbGVlLiBJbiBjYXNlIG9mIGV4Y2VwdGlvbmFsIGV4aXRzIHVzaW5nXG4gXHQgKiBicGZfdGhyb3csIHRoaXMgd2lsbCBiZSBkb25lIGJ5IGNvcHlfdmVyaWZpZXJfc3RhdGUgZm9yIGV4dHJhIGZyYW1lcy4gKi9cbiBcdGZyZWVfZnVuY19zdGF0ZShjYWxsZWUpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9xZGlzYy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX3FkaXNjLmNcbmluZGV4IDZkYmQxNDg3MzQzYzAuLjEyMmVjYjdlOThlMmEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfcWRpc2MuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX3FkaXNjLmNcbkBAIC0xMSw2ICsxMSw3IEBAXG4gI2luY2x1ZGUgXCJicGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHIuc2tlbC5oXCJcbiAjaW5jbHVkZSBcImJwZl9xZGlzY19mYWlsX19pbnZhbGlkX2R5bnB0cl9zbGljZS5za2VsLmhcIlxuICNpbmNsdWRlIFwiYnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX2Nyb3NzX2ZyYW1lLnNrZWwuaFwiXG4rI2luY2x1ZGUgXCJicGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHJfcmV0dXJuZWRfc2xpY2Uuc2tlbC5oXCJcbiAjaW5jbHVkZSBcImJwZl9xZGlzY19mYWlsX191bnRydXN0ZWRfd3JpdGUuc2tlbC5oXCJcbiAjaW5jbHVkZSBcImJwZl9xZGlzY19keW5wdHJfdXNlX2FmdGVyX2ludmFsaWRhdGVfY2xvbmUuc2tlbC5oXCJcbiBcbkBAIC0yMzAsNiArMjMxLDcgQEAgdm9pZCB0ZXN0X25zX2JwZl9xZGlzYyh2b2lkKVxuIFx0XHR0ZXN0X2luY29tcGxfb3BzKCk7XG4gXHRSVU5fVEVTVFMoYnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyKTtcbiBcdFJVTl9URVNUUyhicGZfcWRpc2NfZmFpbF9faW52YWxpZF9keW5wdHJfY3Jvc3NfZnJhbWUpO1xuK1x0UlVOX1RFU1RTKGJwZl9xZGlzY19mYWlsX19pbnZhbGlkX2R5bnB0cl9yZXR1cm5lZF9zbGljZSk7XG4gXHRSVU5fVEVTVFMoYnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX3NsaWNlKTtcbiBcdFJVTl9URVNUUyhicGZfcWRpc2NfZmFpbF9fdW50cnVzdGVkX3dyaXRlKTtcbiBcdFJVTl9URVNUUyhicGZfcWRpc2NfZHlucHRyX3VzZV9hZnRlcl9pbnZhbGlkYXRlX2Nsb25lKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX3JldHVybmVkX3NsaWNlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX3JldHVybmVkX3NsaWNlLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi45NDBhYmE3ZDhhYmZlXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX3FkaXNjX2ZhaWxfX2ludmFsaWRfZHlucHRyX3JldHVybmVkX3NsaWNlLmNcbkBAIC0wLDAgKzEsNzYgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuK1xuKyNpbmNsdWRlIFx1MDAzY3ZtbGludXguaFx1MDAzZVxuKyNpbmNsdWRlIFwiYnBmX2V4cGVyaW1lbnRhbC5oXCJcbisjaW5jbHVkZSBcImJwZl9xZGlzY19jb21tb24uaFwiXG4rI2luY2x1ZGUgXCJicGZfbWlzYy5oXCJcbitcbitjaGFyIF9saWNlbnNlW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG4rXG4raW50IHByb3RvO1xuK1xuK3N0YXRpYyBfX25vaW5saW5lIHN0cnVjdCBldGhoZHIgKnNsaWNlX2luX3N1YnByb2coc3RydWN0IHNrX2J1ZmYgKnNrYilcbit7XG4rXHRzdHJ1Y3QgYnBmX2R5bnB0ciBwdHI7XG4rXG4rXHRicGZfZHlucHRyX2Zyb21fc2tiKChzdHJ1Y3QgX19za19idWZmICopc2tiLCAwLCBcdTAwMjZwdHIpO1xuK1x0cmV0dXJuIGJwZl9keW5wdHJfc2xpY2UoXHUwMDI2cHRyLCAwLCBOVUxMLCBzaXplb2Yoc3RydWN0IGV0aGhkcikpO1xuK31cbitcbitTRUMoXCJzdHJ1Y3Rfb3BzXCIpXG4rX19mYWlsdXJlIF9fbXNnKFwiaW52YWxpZCBtZW0gYWNjZXNzICdzY2FsYXInXCIpXG4raW50IEJQRl9QUk9HKGludmFsaWRfZHlucHRyX3JldHVybmVkX3NsaWNlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuK1x0ICAgICBzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IGJwZl9za19idWZmX3B0ciAqdG9fZnJlZSlcbit7XG4rXHRzdHJ1Y3QgZXRoaGRyICpoZHI7XG4rXG4rXHRoZHIgPSBzbGljZV9pbl9zdWJwcm9nKHNrYik7XG4rXHRpZiAoIWhkcikge1xuK1x0XHRicGZfcWRpc2Nfc2tiX2Ryb3Aoc2tiLCB0b19mcmVlKTtcbitcdFx0cmV0dXJuIE5FVF9YTUlUX0RST1A7XG4rXHR9XG4rXG4rXHRicGZfcWRpc2Nfc2tiX2Ryb3Aoc2tiLCB0b19mcmVlKTtcbitcbitcdC8qIHRoaXMgc2hvdWxkIGZhaWwgKi9cbitcdHByb3RvID0gaGRyLVx1MDAzZWhfcHJvdG87XG4rXG4rXHRyZXR1cm4gTkVUX1hNSVRfRFJPUDtcbit9XG4rXG4rU0VDKFwic3RydWN0X29wc1wiKVxuK19fYXV4aWxpYXJ5XG4rc3RydWN0IHNrX2J1ZmYgKkJQRl9QUk9HKGJwZl9xZGlzY190ZXN0X2RlcXVldWUsIHN0cnVjdCBRZGlzYyAqc2NoKVxuK3tcbitcdHJldHVybiBOVUxMO1xuK31cbitcbitTRUMoXCJzdHJ1Y3Rfb3BzXCIpXG4rX19hdXhpbGlhcnlcbitpbnQgQlBGX1BST0coYnBmX3FkaXNjX3Rlc3RfaW5pdCwgc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBubGF0dHIgKm9wdCxcbitcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuK3tcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCJzdHJ1Y3Rfb3BzXCIpXG4rX19hdXhpbGlhcnlcbit2b2lkIEJQRl9QUk9HKGJwZl9xZGlzY190ZXN0X3Jlc2V0LCBzdHJ1Y3QgUWRpc2MgKnNjaClcbit7XG4rfVxuK1xuK1NFQyhcInN0cnVjdF9vcHNcIilcbitfX2F1eGlsaWFyeVxuK3ZvaWQgQlBGX1BST0coYnBmX3FkaXNjX3Rlc3RfZGVzdHJveSwgc3RydWN0IFFkaXNjICpzY2gpXG4re1xuK31cbitcbitTRUMoXCIuc3RydWN0X29wc1wiKVxuK3N0cnVjdCBRZGlzY19vcHMgdGVzdCA9IHtcbitcdC5lbnF1ZXVlICAgPSAodm9pZCAqKWludmFsaWRfZHlucHRyX3JldHVybmVkX3NsaWNlLFxuK1x0LmRlcXVldWUgICA9ICh2b2lkICopYnBmX3FkaXNjX3Rlc3RfZGVxdWV1ZSxcbitcdC5pbml0ICAgICAgPSAodm9pZCAqKWJwZl9xZGlzY190ZXN0X2luaXQsXG4rXHQucmVzZXQgICAgID0gKHZvaWQgKilicGZfcWRpc2NfdGVzdF9yZXNldCxcbitcdC5kZXN0cm95ICAgPSAodm9pZCAqKWJwZl9xZGlzY190ZXN0X2Rlc3Ryb3ksXG4rXHQuaWQgICAgICAgID0gXCJicGZfcWRpc2NfdGVzdFwiLFxuK307XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuY1xuaW5kZXggMWNkNjFkNzJjMTY2Zi4uOTJmOWY5ZWEwNTMyMSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuY1xuQEAgLTE4OTIsNiArMTg5Miw1NSBAQCBpbnQgY2xvbmVfaW52YWxpZGF0ZTQodm9pZCAqY3R4KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBfX25vaW5saW5lIHZvaWQgY2xvbmVfc2xpY2VfaW5fc3VicHJvZyhzdHJ1Y3QgYnBmX2R5bnB0ciAqcHRyLCBpbnQgKipkYXRhKVxuK3tcbitcdHN0cnVjdCBicGZfZHlucHRyIGNsb25lO1xuK1xuK1x0YnBmX2R5bnB0cl9jbG9uZShwdHIsIFx1MDAyNmNsb25lKTtcbitcdCpkYXRhID0gYnBmX2R5bnB0cl9kYXRhKFx1MDAyNmNsb25lLCAwLCBzaXplb2YodmFsKSk7XG4rfVxuK1xuKy8qXG4rICogQSBzbGljZSB0aGF0IGVzY2FwZXMgdGhlIGNsb25lJ3MgY2FsbCBmcmFtZSByZW1haW5zIHZhbGlkIHdoaWxlIHRoZVxuKyAqIHNoYXJlZCByaW5nYnVmIHJlc2VydmF0aW9uIGlzIGxpdmUuXG4rICovXG4rU0VDKFwiP3Jhd190cFwiKVxuK19fc3VjY2Vzc1xuK2ludCBjbG9uZV9zbGljZV9yZXR1cm5lZF9mcmFtZV92YWxpZCh2b2lkICpjdHgpXG4re1xuK1x0c3RydWN0IGJwZl9keW5wdHIgcHRyO1xuK1x0aW50ICpkYXRhID0gTlVMTDtcbitcbitcdGJwZl9yaW5nYnVmX3Jlc2VydmVfZHlucHRyKFx1MDAyNnJpbmdidWYsIHZhbCwgMCwgXHUwMDI2cHRyKTtcbitcdGNsb25lX3NsaWNlX2luX3N1YnByb2coXHUwMDI2cHRyLCBcdTAwMjZkYXRhKTtcbitcdGlmIChkYXRhKVxuK1x0XHQqZGF0YSA9IDEyMztcbitcdGJwZl9yaW5nYnVmX3N1Ym1pdF9keW5wdHIoXHUwMDI2cHRyLCAwKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKlxuKyAqIFJlbGVhc2luZyB0aGUgc2hhcmVkIHJlc2VydmF0aW9uIG11c3QgaW52YWxpZGF0ZSBhIHNsaWNlIHRoYXQgZXNjYXBlZFxuKyAqIGZyb20gYSBjbG9uZSdzIGNhbGwgZnJhbWUuXG4rICovXG4rU0VDKFwiP3Jhd190cFwiKVxuK19fZmFpbHVyZSBfX21zZyhcImludmFsaWQgbWVtIGFjY2VzcyAnc2NhbGFyJ1wiKVxuK2ludCBjbG9uZV9zbGljZV9yZXR1cm5lZF9mcmFtZV9pbnZhbGlkKHZvaWQgKmN0eClcbit7XG4rXHRzdHJ1Y3QgYnBmX2R5bnB0ciBwdHI7XG4rXHRpbnQgKmRhdGEgPSBOVUxMO1xuK1xuK1x0YnBmX3JpbmdidWZfcmVzZXJ2ZV9keW5wdHIoXHUwMDI2cmluZ2J1ZiwgdmFsLCAwLCBcdTAwMjZwdHIpO1xuK1x0Y2xvbmVfc2xpY2VfaW5fc3VicHJvZyhcdTAwMjZwdHIsIFx1MDAyNmRhdGEpO1xuK1x0YnBmX3JpbmdidWZfc3VibWl0X2R5bnB0cihcdTAwMjZwdHIsIDApO1xuK1x0aWYgKGRhdGEpXG4rXHRcdC8qIHRoaXMgc2hvdWxkIGZhaWwgKi9cbitcdFx0KmRhdGEgPSAxMjM7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gLyogSW52YWxpZGF0aW5nIGEgZHlucHRyIHNob3VsZCBpbnZhbGlkYXRlIGFueSBkYXRhIHNsaWNlc1xuICAqIG9mIGl0cyBwYXJlbnRcbiAgKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA0OjUwOjA1LjQ1OTc3NDU3N1oiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMTQxNTQyNTk5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBbmFseXNpczogRHlucHRyIFNsaWNlIFJlcGFyZW50aW5nIGluIEJQRiBWZXJpZmllcioqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IHBvaW50cyB0b3dhcmRzICpub3QqIG5lZWRpbmcgYSBLTVNBTiBzZXNzaW9uLiBUaGUgcGF0Y2ggZm9jdXNlcyBvbiB0aGUgQlBGIHZlcmlmaWVyLCBzcGVjaWZpY2FsbHkgYWRkcmVzc2luZyBhIHBvdGVudGlhbCBVc2UtQWZ0ZXItRnJlZSAoVUFGKSB2dWxuZXJhYmlsaXR5IHdpdGggZHluYW1pYyBwb2ludGVyIChkeW5wdHIpIHNsaWNlcyBhY3Jvc3MgZnVuY3Rpb24gY2FsbHMuXG5cblRoZSBjb3JlIG9mIHRoZSBwYXRjaCBpcyB0aGUgbmV3IGByZXBhcmVudF9keW5wdHJfc2xpY2VzX29uX2Z1bmNfZXhpdGAgaGVscGVyLiBXaGF0IGl0IGRvZXMgaXMgY3J1Y2lhbDogd2hlbiBhIGZ1bmN0aW9uIChjYWxsZWUpIGNyZWF0ZXMgYSBzbGljZSBmcm9tIGEgbG9jYWwgZHlucHRyIGFuZCBwYXNzZXMgaXQgYmFjayB0byB0aGUgY2FsbGVyLCBpdCBlbnN1cmVzIHRoYXQgdGhlICpzbGljZSdzKiBgcGFyZW50X2lkYCBpcyB1cGRhdGVkIHRvIHBvaW50IHRvIHRoZSAqb3JpZ2luYWwqIGR5bnB0cidzIGBwYXJlbnRfaWRgIGJlZm9yZSB0aGUgY2FsbGVlIGZyYW1lIGlzIGZyZWVkLiBUaGlzIHJlcGFyZW50aW5nIGlzIGVzc2VudGlhbCBiZWNhdXNlIHRoZSBvcmlnaW5hbCBkeW5wdHIgSUQgd291bGQgb3RoZXJ3aXNlIGJlIGxvc3Qgd2hlbiB0aGUgY2FsbGVlIGV4aXRzLiBXaXRob3V0IHRoaXMsIHRoZSB2ZXJpZmllciBtaWdodCBmYWlsIHRvIGNvcnJlY3RseSBpZGVudGlmeSBhbmQgaW52YWxpZGF0ZSB0aGUgc2xpY2Ugd2hlbiB0aGUgdW5kZXJseWluZyBidWZmZXIgKGUuZy4sIGFuIFNLQikgaXMgcmVsZWFzZWQsIGxlYWRpbmcgdG8gYSBVQUYgb3IgbWVtb3J5IHNhZmV0eSBpc3N1ZSBkdXJpbmcgQlBGIHByb2dyYW0gZXhlY3V0aW9uLlxuXG5TbywgdGhlIGlzc3VlIGlzIHJlYWxseSBhYm91dCAqdmVyaWZpZXIgc3RhdGUgY29uc2lzdGVuY3kqLCBub3QgdGhlIGludHJvZHVjdGlvbiBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIGNvZGUgaXMgZml4aW5nIHRoZSB0cmFja2luZyBvZiBkeW5wdHIgc2xpY2UgbGlmZXRpbWVzIHdpdGhpbiB0aGUgdmVyaWZpZXIncyBpbnRlcm5hbCBzdGF0ZS4gSXQncyBlc3NlbnRpYWxseSBwcmV2ZW50aW5nIGEgc2NlbmFyaW8gd2hlcmUgYSBCUEYgcHJvZ3JhbSBjb3VsZCBhdHRlbXB0IHRvIGFjY2VzcyBtZW1vcnkgYWZ0ZXIgaXQgaGFzIGJlZW4gZnJlZWQuIFRoZSB2ZXJpZmllciB0cmFja3MgcmVnaXN0ZXJzIGFuZCBzdGFjayBzbG90cywgYW5kIHRoaXMgcGF0Y2gga2VlcHMgdGhhdCBzdGF0ZSBjb25zaXN0ZW50IHdpdGggcG9pbnRlciBsaWZldGltZXMuXG5cbk5vdywgbGV0J3MgYXBwbHkgdGhlIEtNU0FOIHJ1bGVzLiBEb2VzIHRoaXMgcGF0Y2g6XG5cbjEuICAqKkV4cG9zZSBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlPyoqIE5vLlxuMi4gICoqUmVseSBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8qKiBOby5cbjMuICAqKkFsbG9jYXRlIGNvbXBsZXggc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzPyoqIE5vLlxuNC4gICoqSW50cm9kdWNlIGJvdW5kcyBjaGVjayB2dWxuZXJhYmlsaXRpZXMgYXJvdW5kIGV4aXN0aW5nIGRhdGE/KiogTm8uXG5cbkl0J3MgYWxsIGludGVybmFsIHZlcmlmaWVyIHN0YXRlIG1hbmlwdWxhdGlvbi4gVGhlIHZlcmlmaWVyIHVzZXMgaW5pdGlhbGl6ZWQgZGF0YSBzdHJ1Y3R1cmVzIHRvIHRyYWNrIHRoZSB2YWxpZGl0eSBvZiBwb2ludGVycyBhbmQgbWVtb3J5IGFjY2Vzcy4gVGhlIGBicGZfZm9yX2VhY2hfcmVnX2luX3ZzdGF0ZWAgbG9vcCBhbmQgdGhlIHN0YWNrIHN0cnVjdHVyZXMgbGlrZSBgY2FsbGVlLVx1MDAzZXN0YWNrW2ldYCBhcmUgYWxsIHBhcnQgb2YgdGhhdCBpbnRlcm5hbCB0cmFja2luZy4gSXQgZGVhbHMgd2l0aCByZWdpc3RlciBzdGF0ZXMgYW5kIHRoZSB2ZXJpZmllcidzIHN0YWNrLCBhbGwgb2Ygd2hpY2ggYXJlIGluaXRpYWxpemVkIHdpdGhpbiB0aGUgdmVyaWZpZXIncyBjb250ZXh0LlxuXG5UaGUgYnVnIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGlzIGEgY2xhc3NpYyBVQUYgb3IgZGFuZ2xpbmcgcG9pbnRlciBzY2VuYXJpby4gVGhlc2Uga2luZHMgb2YgYnVncyBhcmUgKnByZWNpc2VseSogd2hhdCBLQVNBTiBpcyBkZXNpZ25lZCB0byBjYXRjaCEgS0FTQU4gaXMgYnVpbHQgdG8gZGV0ZWN0IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYW5kIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMuIEtNU0FOLCBvbiB0aGUgb3RoZXIgaGFuZCwgZXhjZWxzIGF0IGZpbmRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuXG5cblRoZSBwYXRjaCdzIGNoYW5nZXMgZGlyZWN0bHkgYWltIHRvICpwcmV2ZW50KiBtZW1vcnkgc2FmZXR5IGlzc3VlcywgYW5kIEtBU0FOIHNob3VsZCBoYW5kbGUgdGhvc2UgcHJvYmxlbXMuIEtNU0FOIHdvdWxkIGJlIG92ZXJraWxsIGluIHRoaXMgY2FzZS4gTXkgY29uY2x1c2lvbj8gVGhpcyBpcyBhIGBOZWVkc0tNU0FOPWZhbHNlYCBzaXR1YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2NTgsIk91dHB1dFRva2VucyI6MTgwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY3NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA0OjUwOjM2Ljg3NTIwMjc3NloiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyOTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllcidzIGBwcmVwYXJlX2Z1bmNfZXhpdCgpYCBsb2dpYyBieSBhZGRpbmcgYHJlcGFyZW50X2R5bnB0cl9zbGljZXNfb25fZnVuY19leGl0KClgLiBUaGlzIGVuc3VyZXMgdGhhdCBkeW5wdHIgc2xpY2VzIGVzY2FwaW5nIGEgc3VicHJvZ3JhbSBjYWxsIGZyYW1lIGhhdmUgdGhlaXIgYHBhcmVudF9pZGAgdXBkYXRlZCB0byBwb2ludCB0byB0aGUgZHlucHRyJ3MgcGFyZW50LCBwcm9wZXJseSBpbnZhbGlkYXRpbmcgc2xpY2VzIHdoZW4gdGhlIHBhcmVudCBkeW5wdHIvYnVmZmVyIGlzIGRlc3Ryb3llZCBpbiB0aGUgY2FsbGVyLlxcblxcblRoaXMgZml4IHByZXZlbnRzIFVzZS1BZnRlci1GcmVlIChVQUYpIC8gZGFuZ2xpbmcgcG9pbnRlciBkZXJlZmVyZW5jZXMgaW4gQlBGIHByb2dyYW1zLiBTdWNoIHJ1bnRpbWUgbWVtb3J5IHNhZmV0eSB2aW9sYXRpb25zIGFyZSBjYXVnaHQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyJ3MgYHByZXBhcmVfZnVuY19leGl0KClgIGxvZ2ljIGJ5IGFkZGluZyBgcmVwYXJlbnRfZHlucHRyX3NsaWNlc19vbl9mdW5jX2V4aXQoKWAuIFRoaXMgZW5zdXJlcyB0aGF0IGR5bnB0ciBzbGljZXMgZXNjYXBpbmcgYSBzdWJwcm9ncmFtIGNhbGwgZnJhbWUgaGF2ZSB0aGVpciBgcGFyZW50X2lkYCB1cGRhdGVkIHRvIHBvaW50IHRvIHRoZSBkeW5wdHIncyBwYXJlbnQsIHByb3Blcmx5IGludmFsaWRhdGluZyBzbGljZXMgd2hlbiB0aGUgcGFyZW50IGR5bnB0ci9idWZmZXIgaXMgZGVzdHJveWVkIGluIHRoZSBjYWxsZXIuXFxuXFxuVGhpcyBmaXggcHJldmVudHMgVXNlLUFmdGVyLUZyZWUgKFVBRikgLyBkYW5nbGluZyBwb2ludGVyIGRlcmVmZXJlbmNlcyBpbiBCUEYgcHJvZ3JhbXMuIFN1Y2ggcnVudGltZSBtZW1vcnkgc2FmZXR5IHZpb2xhdGlvbnMgYXJlIGNhdWdodCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcywgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowsj9lx[1] Phase: Succeeded StartedAt: 2026-09-10 04:50:47 +0000 UTC FinishedAt: 2026-09-10 04:50:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsj9lx[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-10 04:50:47 +0000 UTC FinishedAt: 2026-09-10 04:50:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsj9lx[2] Phase: Succeeded StartedAt: 2026-09-10 04:50:47 +0000 UTC FinishedAt: 2026-09-10 08:33:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsj9lx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["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":["reparent_dynptr_slices_on_func_exit","prepare_func_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"cb058e91-78c3-424c-bf2f-2cd51d885247","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-09-10 04:50:47 +0000 UTC FinishedAt: 2026-09-10 08:33:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["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":["reparent_dynptr_slices_on_func_exit","prepare_func_exit"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"cb058e91-78c3-424c-bf2f-2cd51d885247","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-workflowsj9lx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["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":["reparent_dynptr_slices_on_func_exit","prepare_func_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"cb058e91-78c3-424c-bf2f-2cd51d885247","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-09-10 04:50:47 +0000 UTC FinishedAt: 2026-09-10 04:50:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsj9lx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["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":["reparent_dynptr_slices_on_func_exit","prepare_func_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"cb058e91-78c3-424c-bf2f-2cd51d885247","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-09-10 04:50:47 +0000 UTC FinishedAt: 2026-09-10 04:50:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["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-workflowsj9lx/series-workflowsj9lx-convert-artifact-3465607629/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsj9lx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["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":["reparent_dynptr_slices_on_func_exit","prepare_func_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"cb058e91-78c3-424c-bf2f-2cd51d885247","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-09-10 04:50:57 +0000 UTC FinishedAt: 2026-09-10 05:07:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsj9lx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["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":["reparent_dynptr_slices_on_func_exit","prepare_func_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"cb058e91-78c3-424c-bf2f-2cd51d885247","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-09-10 04:50:58 +0000 UTC FinishedAt: 2026-09-10 05:07:06 +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:*48e399ea-302f-4afd-aace-e2272df6dd40,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-workflowsj9lx/series-workflowsj9lx-convert-artifact-3465607629/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": "557c0aeb-5460-4dea-a272-26ff354a3e02", "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-workflowsj9lx/series-workflowsj9lx-build-action-1350908483/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsj9lx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["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":["reparent_dynptr_slices_on_func_exit","prepare_func_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"cb058e91-78c3-424c-bf2f-2cd51d885247","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-09-10 04:50:58 +0000 UTC FinishedAt: 2026-09-10 05:06:56 +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:*48e399ea-302f-4afd-aace-e2272df6dd40,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-workflowsj9lx/series-workflowsj9lx-convert-artifact-3465607629/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": "557c0aeb-5460-4dea-a272-26ff354a3e02", "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-workflowsj9lx/series-workflowsj9lx-build-action-1350908483/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsj9lx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["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":["reparent_dynptr_slices_on_func_exit","prepare_func_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"cb058e91-78c3-424c-bf2f-2cd51d885247","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-09-10 05:07:06 +0000 UTC FinishedAt: 2026-09-10 05:07:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsj9lx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["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":["reparent_dynptr_slices_on_func_exit","prepare_func_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"cb058e91-78c3-424c-bf2f-2cd51d885247","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-09-10 05:07:06 +0000 UTC FinishedAt: 2026-09-10 05:07:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsj9lx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["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":["reparent_dynptr_slices_on_func_exit","prepare_func_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"cb058e91-78c3-424c-bf2f-2cd51d885247","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-09-10 05:07:06 +0000 UTC FinishedAt: 2026-09-10 05:07:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsj9lx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["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":["reparent_dynptr_slices_on_func_exit","prepare_func_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"cb058e91-78c3-424c-bf2f-2cd51d885247","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-09-10 05:07:06 +0000 UTC FinishedAt: 2026-09-10 05:07:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"cb058e91-78c3-424c-bf2f-2cd51d885247","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-workflowsj9lx/series-workflowsj9lx-convert-artifact-869791272/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsj9lx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["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":["reparent_dynptr_slices_on_func_exit","prepare_func_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"cb058e91-78c3-424c-bf2f-2cd51d885247","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-09-10 05:07:16 +0000 UTC FinishedAt: 2026-09-10 05:09:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsj9lx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["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":["reparent_dynptr_slices_on_func_exit","prepare_func_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"cb058e91-78c3-424c-bf2f-2cd51d885247","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-09-10 05:07:16 +0000 UTC FinishedAt: 2026-09-10 05:08:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*557c0aeb-5460-4dea-a272-26ff354a3e02,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-workflowsj9lx/series-workflowsj9lx-build-action-1350908483/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-workflowsj9lx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["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":["reparent_dynptr_slices_on_func_exit","prepare_func_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"cb058e91-78c3-424c-bf2f-2cd51d885247","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-09-10 05:09:09 +0000 UTC FinishedAt: 2026-09-10 05:09:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsj9lx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["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":["reparent_dynptr_slices_on_func_exit","prepare_func_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"cb058e91-78c3-424c-bf2f-2cd51d885247","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-09-10 05:09:09 +0000 UTC FinishedAt: 2026-09-10 05:09:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsj9lx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["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":["reparent_dynptr_slices_on_func_exit","prepare_func_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"cb058e91-78c3-424c-bf2f-2cd51d885247","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-09-10 05:09:09 +0000 UTC FinishedAt: 2026-09-10 05:29:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsj9lx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["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":["reparent_dynptr_slices_on_func_exit","prepare_func_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"cb058e91-78c3-424c-bf2f-2cd51d885247","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-09-10 05:09:09 +0000 UTC FinishedAt: 2026-09-10 05:29:23 +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:*48e399ea-302f-4afd-aace-e2272df6dd40,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-workflowsj9lx/series-workflowsj9lx-convert-artifact-869791272/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": "e532e8d0-1497-4c94-a3c2-f036e2c15023", "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-workflowsj9lx/series-workflowsj9lx-build-action-3810587604/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsj9lx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["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":["reparent_dynptr_slices_on_func_exit","prepare_func_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"cb058e91-78c3-424c-bf2f-2cd51d885247","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-09-10 05:09:09 +0000 UTC FinishedAt: 2026-09-10 05:29:13 +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:*48e399ea-302f-4afd-aace-e2272df6dd40,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-workflowsj9lx/series-workflowsj9lx-convert-artifact-869791272/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": "e532e8d0-1497-4c94-a3c2-f036e2c15023", "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-workflowsj9lx/series-workflowsj9lx-build-action-3810587604/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsj9lx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["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":["reparent_dynptr_slices_on_func_exit","prepare_func_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"cb058e91-78c3-424c-bf2f-2cd51d885247","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-09-10 05:29:23 +0000 UTC FinishedAt: 2026-09-10 05:29:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsj9lx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["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":["reparent_dynptr_slices_on_func_exit","prepare_func_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"cb058e91-78c3-424c-bf2f-2cd51d885247","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-09-10 05:29:23 +0000 UTC FinishedAt: 2026-09-10 05:29:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsj9lx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["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":["reparent_dynptr_slices_on_func_exit","prepare_func_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"cb058e91-78c3-424c-bf2f-2cd51d885247","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-09-10 05:29:23 +0000 UTC FinishedAt: 2026-09-10 05:31:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsj9lx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["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":["reparent_dynptr_slices_on_func_exit","prepare_func_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"cb058e91-78c3-424c-bf2f-2cd51d885247","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-09-10 05:29:23 +0000 UTC FinishedAt: 2026-09-10 05:31:09 +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:*e532e8d0-1497-4c94-a3c2-f036e2c15023,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-workflowsj9lx/series-workflowsj9lx-build-action-3810587604/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-workflowsj9lx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["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":["reparent_dynptr_slices_on_func_exit","prepare_func_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"cb058e91-78c3-424c-bf2f-2cd51d885247","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-09-10 05:31:19 +0000 UTC FinishedAt: 2026-09-10 08:33:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsj9lx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["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":["reparent_dynptr_slices_on_func_exit","prepare_func_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"cb058e91-78c3-424c-bf2f-2cd51d885247","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-09-10 05:31:19 +0000 UTC FinishedAt: 2026-09-10 08:33:47 +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":["reparent_dynptr_slices_on_func_exit","prepare_func_exit"],"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:*557c0aeb-5460-4dea-a272-26ff354a3e02,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e532e8d0-1497-4c94-a3c2-f036e2c15023,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-workflowsj9lx/series-workflowsj9lx-build-action-1350908483/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-workflowsj9lx/series-workflowsj9lx-build-action-3810587604/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowsj9lx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["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":["reparent_dynptr_slices_on_func_exit","prepare_func_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"cb058e91-78c3-424c-bf2f-2cd51d885247","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-09-10 05:31:19 +0000 UTC FinishedAt: 2026-09-10 05:31:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsj9lx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["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":["reparent_dynptr_slices_on_func_exit","prepare_func_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"cb058e91-78c3-424c-bf2f-2cd51d885247","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-09-10 05:31:19 +0000 UTC FinishedAt: 2026-09-10 05:31:24 +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":["reparent_dynptr_slices_on_func_exit","prepare_func_exit"],"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-workflowsj9lx/series-workflowsj9lx-convert-artifact-3705402465/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsj9lx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["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":["reparent_dynptr_slices_on_func_exit","prepare_func_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"cb058e91-78c3-424c-bf2f-2cd51d885247","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-09-10 05:31:19 +0000 UTC FinishedAt: 2026-09-10 05:31:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsj9lx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["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":["reparent_dynptr_slices_on_func_exit","prepare_func_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"cb058e91-78c3-424c-bf2f-2cd51d885247","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-09-10 05:31:19 +0000 UTC FinishedAt: 2026-09-10 05:31:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsj9lx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["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":["reparent_dynptr_slices_on_func_exit","prepare_func_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"cb058e91-78c3-424c-bf2f-2cd51d885247","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-09-10 05:31:19 +0000 UTC FinishedAt: 2026-09-10 05:31:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsj9lx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["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":["reparent_dynptr_slices_on_func_exit","prepare_func_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"cb058e91-78c3-424c-bf2f-2cd51d885247","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-09-10 05:31:29 +0000 UTC FinishedAt: 2026-09-10 08:33:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsj9lx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["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":["reparent_dynptr_slices_on_func_exit","prepare_func_exit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"15e2565f1c43771af0bc5324971cabaad79ac286","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"cb058e91-78c3-424c-bf2f-2cd51d885247","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-09-10 05:31:29 +0000 UTC FinishedAt: 2026-09-10 08:33:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*557c0aeb-5460-4dea-a272-26ff354a3e02,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e532e8d0-1497-4c94-a3c2-f036e2c15023,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-workflowsj9lx/series-workflowsj9lx-build-action-1350908483/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-workflowsj9lx/series-workflowsj9lx-build-action-3810587604/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-workflowsj9lx/series-workflowsj9lx-convert-artifact-3705402465/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,}