Name: series-workflow2mzb8 Phase: Succeeded StartedAt: 2026-08-13 20:30:08 +0000 UTC FinishedAt: 2026-08-13 21:37:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2mzb8[0] Phase: Succeeded StartedAt: 2026-08-13 20:30:08 +0000 UTC FinishedAt: 2026-08-13 20:52:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2mzb8[0].run-triage Phase: Succeeded StartedAt: 2026-08-13 20:30:08 +0000 UTC FinishedAt: 2026-08-13 20:52:04 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "6f033615ef8fb2374daa7e50a8ff68616bc850d2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_JIT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "6f033615ef8fb2374daa7e50a8ff68616bc850d2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_JIT" ], "series_id": "3871e210-1a45-42e7-9439-b7ae2abdd34c" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "aarch64_insn_gen_add_sub_extended_reg", "bpf_jit_supports_arena_args", "arch_prepare_bpf_trampoline" ], "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+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjUwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnJiMzNDssCiAgICAmIzM0O2JwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncyYjMzQ7LAogICAgJiMzNDthcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBleHRlbmRzIHRoZSBhcm02NCBCUEYgSklUIGNvbXBpbGVyIHRvIHN1cHBvcnQgQlBGIGFyZW5hIGFyZ3VtZW50cy4gSXQgaW50cm9kdWNlcyBuZXcgaW5zdHJ1Y3Rpb24gZW5jb2RpbmcgZnVuY3Rpb25zIGZvciBhcm02NCAoZS5nLiwgYGFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9leHRlbmRlZF9yZWdgKSBhbmQgbW9kaWZpZXMgdGhlIEpJVCBjb21waWxlciAoYGFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jYCkgdG8gZW1pdCBpbnN0cnVjdGlvbnMgdGhhdCByZWJhc2UgYXJlbmEgcG9pbnRlcnMuIFRoZSBjaGFuZ2VzIGFyZSBzdHJpY3RseSByZWxhdGVkIHRvIEpJVCBjb21waWxhdGlvbiBsb2dpYyBhbmQgaW5zdHJ1Y3Rpb24gZW1pc3Npb24uIFRoZXkgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGtlcm5lbCBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBhbGxvY2F0ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB0aGF0IGNvdWxkIGJlIGxlZnQgdW5pbml0aWFsaXplZC4gQW55IGJ1Z3MgaW4gdGhlIEpJVCBjb21waWxlciB3b3VsZCBsaWtlbHkgcmVzdWx0IGluIGludmFsaWQgaW5zdHJ1Y3Rpb24gZ2VuZXJhdGlvbiwgY3Jhc2hlcywgb3Igb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgaW4gdGhlIEpJVGVkIGNvZGUsIHdoaWNoIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW1wbGVtZW50cyBCUEYgYXJlbmEgYXJndW1lbnRzIHN1cHBvcnQgZm9yIHRoZSBhcm02NCBKSVQgY29tcGlsZXIuIEl0IGFkZHMgbmV3IGluc3RydWN0aW9uIGdlbmVyYXRpb24gbG9naWMgZm9yIGV4dGVuZGVkIHJlZ2lzdGVyIGFkZC9zdWIgaW5zdHJ1Y3Rpb25zIChgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZ2ApIGFuZCBtb2RpZmllcyB0aGUgYXJtNjQgQlBGIEpJVCAoYGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAsIGBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NgKSB0byBoYW5kbGUgYXJlbmEgcG9pbnRlcnMgaW4ga2Z1bmMgY2FsbHMgYW5kIHN0cnVjdF9vcHMgY2FsbGJhY2tzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIGtlcm5lbCAoQlBGIEpJVCkgdGhhdCBhcmUgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjUwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOWZkMzgyMjVjMjNlOGE5NWVhZjM4OGYyNzNkYzMzODcxYjIyNGViZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDEzIDIwOjUwOjExIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3QgYi9Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0XG5pbmRleCAxMGU3MjVjYmU2NGNkLi44NWY3M2UwYmJkMGZmIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdFxuQEAgLTMwMSw5ICYjNDM7MzAxLDkgQEAgQW4gZXhhbXBsZSBpcyBnaXZlbiBiZWxvdzo6XG4gICAgICAgICB9XG4gXG4gQ2FsbGluZyBzdWNoIGEga2Z1bmMgcmVxdWlyZXMgdGhlIHByb2dyYW0gdG8gdXNlIGFuIGFyZW5hIG1hcCBhbmQgYSBKSVQgd2l0aFxuLWFyZW5hIGFyZ3VtZW50IHN1cHBvcnQgKGN1cnJlbnRseSB4ODYtNjQpOyB2ZXJpZmljYXRpb24gZmFpbHMgb3RoZXJ3aXNlLiBUaGVcbi1wcm9ncmFtIGNhbiBwYXNzIGFueSB2YWx1ZSB3aXRob3V0IGNvbXByb21pc2luZyB0aGUga2VybmVsLiBBIHZhbHVlIHRoYXQgZG9lc1xuLW5vdCBwb2ludCBpbnRvIHRoZSBhcmVuYSBpcyBhIHByb2dyYW0gYnVnLlxuJiM0MzthcmVuYSBhcmd1bWVudCBzdXBwb3J0IChjdXJyZW50bHkgeDg2LTY0IGFuZCBhcm02NCk7IHZlcmlmaWNhdGlvbiBmYWlsc1xuJiM0MztvdGhlcndpc2UuIFRoZSBwcm9ncmFtIGNhbiBwYXNzIGFueSB2YWx1ZSB3aXRob3V0IGNvbXByb21pc2luZyB0aGUga2VybmVsLiBBXG4mIzQzO3ZhbHVlIHRoYXQgZG9lcyBub3QgcG9pbnQgaW50byB0aGUgYXJlbmEgaXMgYSBwcm9ncmFtIGJ1Zy5cbiBcbiBUaGUgc3VmZml4ZXMgaGF2ZSB0aGUgc2FtZSBtZWFuaW5nIG9uIHRoZSBhcmd1bWVudHMgb2Ygc3RydWN0X29wcyBzdHViXG4gZnVuY3Rpb25zLCB3aXRoIHRoZSBjb252ZXJzaW9uIHJ1bm5pbmcgaW4gdGhlIG9wcG9zaXRlIGRpcmVjdGlvbi4gVGhlXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9pbnNuLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2luc24uaFxuaW5kZXggY2MwNzAyZmE2NGE3OS4uMWNlNzVhNDQyNjM4NyAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vaW5zbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2luc24uaFxuQEAgLTIwNSw2ICYjNDM7MjA1LDE4IEBAIGVudW0gYWFyY2g2NF9pbnNuX2Fkc2JfdHlwZSB7XG4gXHRBQVJDSDY0X0lOU05fQURTQl9TVUJfU0VURkxBR1NcbiB9O1xuIFxuJiM0MzsvKiBvcHRpb24gZmllbGQgb2YgYWRkL3N1YiAoZXh0ZW5kZWQgcmVnaXN0ZXIpICovXG4mIzQzO2VudW0gYWFyY2g2NF9pbnNuX2V4dGVuZF90eXBlIHtcbiYjNDM7XHRBQVJDSDY0X0lOU05fRVhURU5EX1VYVEIsXG4mIzQzO1x0QUFSQ0g2NF9JTlNOX0VYVEVORF9VWFRILFxuJiM0MztcdEFBUkNINjRfSU5TTl9FWFRFTkRfVVhUVyxcbiYjNDM7XHRBQVJDSDY0X0lOU05fRVhURU5EX1VYVFgsXG4mIzQzO1x0QUFSQ0g2NF9JTlNOX0VYVEVORF9TWFRCLFxuJiM0MztcdEFBUkNINjRfSU5TTl9FWFRFTkRfU1hUSCxcbiYjNDM7XHRBQVJDSDY0X0lOU05fRVhURU5EX1NYVFcsXG4mIzQzO1x0QUFSQ0g2NF9JTlNOX0VYVEVORF9TWFRYLFxuJiM0Mzt9O1xuJiM0MztcbiBlbnVtIGFhcmNoNjRfaW5zbl9tb3Zld2lkZV90eXBlIHtcbiBcdEFBUkNINjRfSU5TTl9NT1ZFV0lERV9aRVJPLFxuIFx0QUFSQ0g2NF9JTlNOX01PVkVXSURFX0tFRVAsXG5AQCAtMzc4LDYgJiM0MzszOTAsMTAgQEAgX19BQVJDSDY0X0lOU05fRlVOQ1MoYWRkLFx0MHg3RjIwMDAwMCwgMHgwQjAwMDAwMClcbiBfX0FBUkNINjRfSU5TTl9GVU5DUyhhZGRzLFx0MHg3RjIwMDAwMCwgMHgyQjAwMDAwMClcbiBfX0FBUkNINjRfSU5TTl9GVU5DUyhzdWIsXHQweDdGMjAwMDAwLCAweDRCMDAwMDAwKVxuIF9fQUFSQ0g2NF9JTlNOX0ZVTkNTKHN1YnMsXHQweDdGMjAwMDAwLCAweDZCMDAwMDAwKVxuJiM0MztfX0FBUkNINjRfSU5TTl9GVU5DUyhhZGRfZXh0LFx0MHg3RkUwMDAwMCwgMHgwQjIwMDAwMClcbiYjNDM7X19BQVJDSDY0X0lOU05fRlVOQ1MoYWRkc19leHQsXHQweDdGRTAwMDAwLCAweDJCMjAwMDAwKVxuJiM0MztfX0FBUkNINjRfSU5TTl9GVU5DUyhzdWJfZXh0LFx0MHg3RkUwMDAwMCwgMHg0QjIwMDAwMClcbiYjNDM7X19BQVJDSDY0X0lOU05fRlVOQ1Moc3Vic19leHQsXHQweDdGRTAwMDAwLCAweDZCMjAwMDAwKVxuIF9fQUFSQ0g2NF9JTlNOX0ZVTkNTKG1hZGQsXHQweDdGRTA4MDAwLCAweDFCMDAwMDAwKVxuIF9fQUFSQ0g2NF9JTlNOX0ZVTkNTKG1zdWIsXHQweDdGRTA4MDAwLCAweDFCMDA4MDAwKVxuIF9fQUFSQ0g2NF9JTlNOX0ZVTkNTKHVkaXYsXHQweDdGRTBGQzAwLCAweDFBQzAwODAwKVxuQEAgLTYzNyw2ICYjNDM7NjUzLDEzIEBAIHUzMiBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfc2hpZnRlZF9yZWcoZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgZHN0LFxuIFx0XHRcdFx0XHQgaW50IHNoaWZ0LFxuIFx0XHRcdFx0XHQgZW51bSBhYXJjaDY0X2luc25fdmFyaWFudCB2YXJpYW50LFxuIFx0XHRcdFx0XHQgZW51bSBhYXJjaDY0X2luc25fYWRzYl90eXBlIHR5cGUpO1xuJiM0Mzt1MzIgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZyhlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBkc3QsXG4mIzQzO1x0XHRcdFx0XHQgIGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIHNyYyxcbiYjNDM7XHRcdFx0XHRcdCAgZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgcmVnLFxuJiM0MztcdFx0XHRcdFx0ICBlbnVtIGFhcmNoNjRfaW5zbl9leHRlbmRfdHlwZSBleHRlbmQsXG4mIzQzO1x0XHRcdFx0XHQgIGludCBzaGlmdCxcbiYjNDM7XHRcdFx0XHRcdCAgZW51bSBhYXJjaDY0X2luc25fdmFyaWFudCB2YXJpYW50LFxuJiM0MztcdFx0XHRcdFx0ICBlbnVtIGFhcmNoNjRfaW5zbl9hZHNiX3R5cGUgdHlwZSk7XG4gdTMyIGFhcmNoNjRfaW5zbl9nZW5fZGF0YTEoZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgZHN0LFxuIFx0XHRcdCAgIGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIHNyYyxcbiBcdFx0XHQgICBlbnVtIGFhcmNoNjRfaW5zbl92YXJpYW50IHZhcmlhbnQsXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9saWIvaW5zbi5jIGIvYXJjaC9hcm02NC9saWIvaW5zbi5jXG5pbmRleCAzN2NlNzVmN2YxZjA4Li5lNzBhYzAyMzg1MTUzIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9saWIvaW5zbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2xpYi9pbnNuLmNcbkBAIC05ODYsNiAmIzQzOzk4Niw2NiBAQCB1MzIgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX3NoaWZ0ZWRfcmVnKGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIGRzdCxcbiBcdHJldHVybiBhYXJjaDY0X2luc25fZW5jb2RlX2ltbWVkaWF0ZShBQVJDSDY0X0lOU05fSU1NXzYsIGluc24sIHNoaWZ0KTtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIFVubGlrZSB0aGUgc2hpZnRlZC1yZWdpc3RlciBmb3JtLCByZWdpc3RlciAzMSBpcyBub3QgWFpSIGV2ZXJ5d2hlcmUgaGVyZTpcbiYjNDM7ICogaXQgZW5jb2RlcyBTUCBmb3IgQHNyYywgYW5kIGZvciBAZHN0IHRvbyB1bmxlc3MgQHR5cGUgc2V0cyB0aGUgZmxhZ3MuIE9ubHlcbiYjNDM7ICogQHJlZyBrZWVwcyB0aGUgWFpSIG1lYW5pbmcuXG4mIzQzOyAqL1xuJiM0Mzt1MzIgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZyhlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBkc3QsXG4mIzQzO1x0XHRcdFx0XHQgIGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIHNyYyxcbiYjNDM7XHRcdFx0XHRcdCAgZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgcmVnLFxuJiM0MztcdFx0XHRcdFx0ICBlbnVtIGFhcmNoNjRfaW5zbl9leHRlbmRfdHlwZSBleHRlbmQsXG4mIzQzO1x0XHRcdFx0XHQgIGludCBzaGlmdCxcbiYjNDM7XHRcdFx0XHRcdCAgZW51bSBhYXJjaDY0X2luc25fdmFyaWFudCB2YXJpYW50LFxuJiM0MztcdFx0XHRcdFx0ICBlbnVtIGFhcmNoNjRfaW5zbl9hZHNiX3R5cGUgdHlwZSlcbiYjNDM7e1xuJiM0MztcdHUzMiBpbnNuO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKHR5cGUpIHtcbiYjNDM7XHRjYXNlIEFBUkNINjRfSU5TTl9BRFNCX0FERDpcbiYjNDM7XHRcdGluc24gPSBhYXJjaDY0X2luc25fZ2V0X2FkZF9leHRfdmFsdWUoKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgQUFSQ0g2NF9JTlNOX0FEU0JfU1VCOlxuJiM0MztcdFx0aW5zbiA9IGFhcmNoNjRfaW5zbl9nZXRfc3ViX2V4dF92YWx1ZSgpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBBQVJDSDY0X0lOU05fQURTQl9BRERfU0VURkxBR1M6XG4mIzQzO1x0XHRpbnNuID0gYWFyY2g2NF9pbnNuX2dldF9hZGRzX2V4dF92YWx1ZSgpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBBQVJDSDY0X0lOU05fQURTQl9TVUJfU0VURkxBR1M6XG4mIzQzO1x0XHRpbnNuID0gYWFyY2g2NF9pbnNuX2dldF9zdWJzX2V4dF92YWx1ZSgpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHByX2VycihcJiMzNDslczogdW5rbm93biBhZGQvc3ViIGVuY29kaW5nICVkXFxuXCYjMzQ7LCBfX2Z1bmNfXywgdHlwZSk7XG4mIzQzO1x0XHRyZXR1cm4gQUFSQ0g2NF9CUkVBS19GQVVMVDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAodmFyaWFudCkge1xuJiM0MztcdGNhc2UgQUFSQ0g2NF9JTlNOX1ZBUklBTlRfMzJCSVQ6XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEFBUkNINjRfSU5TTl9WQVJJQU5UXzY0QklUOlxuJiM0MztcdFx0aW5zbiB8PSBBQVJDSDY0X0lOU05fU0ZfQklUO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHByX2VycihcJiMzNDslczogdW5rbm93biB2YXJpYW50IGVuY29kaW5nICVkXFxuXCYjMzQ7LCBfX2Z1bmNfXywgdmFyaWFudCk7XG4mIzQzO1x0XHRyZXR1cm4gQUFSQ0g2NF9CUkVBS19GQVVMVDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChzaGlmdCBcdTAwM2MgMCB8fCBzaGlmdCBcdTAwM2UgNCkge1xuJiM0MztcdFx0cHJfZXJyKFwmIzM0OyVzOiBpbnZhbGlkIHNoaWZ0IGVuY29kaW5nICVkXFxuXCYjMzQ7LCBfX2Z1bmNfXywgc2hpZnQpO1xuJiM0MztcdFx0cmV0dXJuIEFBUkNINjRfQlJFQUtfRkFVTFQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpbnNuID0gYWFyY2g2NF9pbnNuX2VuY29kZV9yZWdpc3RlcihBQVJDSDY0X0lOU05fUkVHVFlQRV9SRCwgaW5zbiwgZHN0KTtcbiYjNDM7XG4mIzQzO1x0aW5zbiA9IGFhcmNoNjRfaW5zbl9lbmNvZGVfcmVnaXN0ZXIoQUFSQ0g2NF9JTlNOX1JFR1RZUEVfUk4sIGluc24sIHNyYyk7XG4mIzQzO1xuJiM0MztcdGluc24gPSBhYXJjaDY0X2luc25fZW5jb2RlX3JlZ2lzdGVyKEFBUkNINjRfSU5TTl9SRUdUWVBFX1JNLCBpbnNuLCByZWcpO1xuJiM0MztcbiYjNDM7XHQvKiBvcHRpb24gaW4gYml0cyBbMTU6MTNdIGFuZCBpbW0zIGluIFsxMjoxMF0gdG9nZXRoZXIgZmlsbCBJTU1fNiAqL1xuJiM0MztcdHJldHVybiBhYXJjaDY0X2luc25fZW5jb2RlX2ltbWVkaWF0ZShBQVJDSDY0X0lOU05fSU1NXzYsIGluc24sXG4mIzQzO1x0XHRcdFx0XHQgICAgIChleHRlbmQgXHUwMDNjXHUwMDNjIDMpIHwgc2hpZnQpO1xuJiM0Mzt9XG4mIzQzO1xuIHUzMiBhYXJjaDY0X2luc25fZ2VuX2RhdGExKGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIGRzdCxcbiBcdFx0XHQgICBlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBzcmMsXG4gXHRcdFx0ICAgZW51bSBhYXJjaDY0X2luc25fdmFyaWFudCB2YXJpYW50LFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXQuaCBiL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXQuaFxuaW5kZXggZDEzZGU0MjIyY2ZiNy4uYjJmZTZlNmRjZjQ0NyAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9uZXQvYnBmX2ppdC5oXG5AQCAtMjQzLDYgJiM0MzsyNDMsMTcgQEBcbiAvKiBSbiAtIFJtOyBzZXQgY29uZGl0aW9uIGZsYWdzICovXG4gI2RlZmluZSBBNjRfQ01QKHNmLCBSbiwgUm0pIEE2NF9TVUJTKHNmLCBBNjRfWlIsIFJuLCBSbSlcbiBcbiYjNDM7LyogQWRkL3N1YnRyYWN0IChleHRlbmRlZCByZWdpc3RlcikgKi9cbiYjNDM7I2RlZmluZSBBNjRfQUREU1VCX0VSRUcoc2YsIFJkLCBSbiwgUm0sIGV4dCwgc2hpZnQsIHR5cGUpIFxcXG4mIzQzO1x0YWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZyhSZCwgUm4sIFJtLCBcXFxuJiM0MztcdFx0QUFSQ0g2NF9JTlNOX0VYVEVORF8jI2V4dCwgc2hpZnQsIEE2NF9WQVJJQU5UKHNmKSwgXFxcbiYjNDM7XHRcdEFBUkNINjRfSU5TTl9BRFNCXyMjdHlwZSlcbiYjNDM7LyogUmQgPSBSbiAmIzQzOyAoRVhUKFJtKSBcdTAwM2NcdTAwM2Mgc2hpZnQpICovXG4mIzQzOyNkZWZpbmUgQTY0X0FERF9FWFQoc2YsIFJkLCBSbiwgUm0sIGV4dCwgc2hpZnQpIFxcXG4mIzQzO1x0QTY0X0FERFNVQl9FUkVHKHNmLCBSZCwgUm4sIFJtLCBleHQsIHNoaWZ0LCBBREQpXG4mIzQzOy8qIFJkID0gUm4gJiM0MzsgKHUzMilSbSAqL1xuJiM0MzsjZGVmaW5lIEE2NF9BRERfVVhUVyhSZCwgUm4sIFJtKSBBNjRfQUREX0VYVCgxLCBSZCwgUm4sIFJtLCBVWFRXLCAwKVxuJiM0MztcbiAvKiBEYXRhLXByb2Nlc3NpbmcgKDEgc291cmNlKSAqL1xuICNkZWZpbmUgQTY0X0RBVEExKHNmLCBSZCwgUm4sIHR5cGUpIGFhcmNoNjRfaW5zbl9nZW5fZGF0YTEoUmQsIFJuLCBcXFxuIFx0QTY0X1ZBUklBTlQoc2YpLCBBQVJDSDY0X0lOU05fREFUQTFfIyN0eXBlKVxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jIGIvYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmNcbmluZGV4IDc0YjQwODM3OTFkYTMuLmMxOGUwMDVhNDFkYmUgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmNcbkBAIC0xMjU2LDYgJiM0MzsxMjU2LDQzIEBAIHN0YXRpYyB2b2lkIGVtaXRfc3RhY2tfYXJnX3N0b3JlX2ltbShzMzIgaW1tLCBzMTYgYnBmX29mZiwgY29uc3QgdTggdG1wLCBzdHJ1Y3RcbiBcdH1cbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIFJlYmFzZSB0aGUgX19hcmVuYSBhcmdzIG9mIGEga2Z1bmMgY2FsbCB0byBhcmVuYSBrZXJuZWwgYWRkcmVzc2VzLFxuJiM0MzsgKiB4TiA9IGtlcm5fdm1fc3RhcnQgJiM0MzsgKHUzMil4Tiwgd2l0aCB0aGUgYXJlbmEgYmFzZSByZWdpc3RlciBob2xkaW5nXG4mIzQzOyAqIGtlcm5fdm1fc3RhcnQuIEEgbnVsbGFibGUgYXJnIHByZXNlcnZlcyBOVUxMIGJ5IHNraXBwaW5nIHRoZSBhZGQsIHRlc3RlZFxuJiM0MzsgKiBvbiB0aGUgdHJ1bmNhdGVkIHZhbHVlIGFzIGFyZW5hIE5VTEwgaXMgb2Zmc2V0IDAuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IGVtaXRfa2Z1bmNfYXJlbmFfYXJncyhzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4mIzQzO3tcbiYjNDM7XHRjb25zdCB1OCBhcmVuYV92bV9iYXNlID0gYnBmMmE2NFtBUkVOQV9WTV9TVEFSVF07XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICpmbTtcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0Zm0gPSBicGZfaml0X2ZpbmRfa2Z1bmNfbW9kZWwoY3R4LVx1MDAzZXByb2csIGluc24pO1xuJiM0MztcdGlmICghZm0pXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbWluX3QoaW50LCBmbS1cdTAwM2Vucl9hcmdzLCBNQVhfQlBGX0ZVTkNfUkVHX0FSR1MpOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0Y29uc3QgdTggcmVnID0gYnBmMmE2NFtCUEZfUkVHXzEgJiM0MzsgaV07XG4mIzQzO1x0XHR1OCBmbGFncyA9IGZtLVx1MDAzZWFyZ19mbGFnc1tpXTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIShmbGFncyBcdTAwMjYgQlRGX0ZNT0RFTF9BUkVOQV9BUkcpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdGlmIChXQVJOX09OX09OQ0UoIWN0eC1cdTAwM2VhcmVuYV92bV9zdGFydCkpXG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRcdGlmIChmbGFncyBcdTAwMjYgQlRGX0ZNT0RFTF9OVUxMQUJMRV9BUkcpIHtcbiYjNDM7XHRcdFx0LyogMzItYml0IG1vdiBjbGVhcnMgdGhlIHVwcGVyIDMyIGJpdHMgKi9cbiYjNDM7XHRcdFx0ZW1pdChBNjRfTU9WKDAsIHJlZywgcmVnKSwgY3R4KTtcbiYjNDM7XHRcdFx0Lyogc2tpcCB0aGUgYWRkIHNvIHRoYXQgTlVMTCBzdGF5cyBOVUxMICovXG4mIzQzO1x0XHRcdGVtaXQoQTY0X0NCWigwLCByZWcsIDIpLCBjdHgpO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0ZW1pdChBNjRfQUREX1VYVFcocmVnLCBhcmVuYV92bV9iYXNlLCByZWcpLCBjdHgpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gLyogSklUcyBhbiBlQlBGIGluc3RydWN0aW9uLlxuICAqIFJldHVybnM6XG4gICogMCAgLSBzdWNjZXNzZnVsbHkgSklUZWQgYW4gOC1ieXRlIGVCUEYgaW5zdHJ1Y3Rpb24uXG5AQCAtMTY3OCw2ICYjNDM7MTcxNSwxMSBAQCBzdGF0aWMgaW50IGJ1aWxkX2luc24oY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9pbnNuXG4gXHRcdFx0XHRcdCAgICBcdTAwMjZmdW5jX2FkZHIsIFx1MDAyNmZ1bmNfYWRkcl9maXhlZCk7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdGlmIChpbnNuLVx1MDAzZXNyY19yZWcgPT0gQlBGX1BTRVVET19LRlVOQ19DQUxMKSB7XG4mIzQzO1x0XHRcdHJldCA9IGVtaXRfa2Z1bmNfYXJlbmFfYXJncyhjdHgsIGluc24pO1xuJiM0MztcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHR9XG4gXHRcdGVtaXRfY2FsbChmdW5jX2FkZHIsIGN0eCk7XG4gXHRcdC8qXG4gXHRcdCAqIENhbGwgdG8gYXJjaF9icGZfdGltZWRfbWF5X2dvdG8oKSBpcyBlbWl0dGVkIGJ5IHRoZVxuQEAgLTIzNTEsNiAmIzQzOzIzOTMsMTEgQEAgYm9vbCBicGZfaml0X3N1cHBvcnRzX3N0YWNrX2FyZ3Modm9pZClcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbiYjNDM7Ym9vbCBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3Modm9pZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4mIzQzO1xuIHZvaWQgKmJwZl9hcmNoX3RleHRfY29weSh2b2lkICpkc3QsIHZvaWQgKnNyYywgc2l6ZV90IGxlbilcbiB7XG4gXHRpZiAoIWFhcmNoNjRfaW5zbl9jb3B5KGRzdCwgc3JjLCBsZW4pKVxuQEAgLTI1MjQsMzQgJiM0MzsyNTcxLDc2IEBAIHN0YXRpYyB2b2lkIGNsZWFyX2dhcmJhZ2Uoc3RydWN0IGppdF9jdHggKmN0eCwgaW50IHJlZywgaW50IGVmZmVjdGl2ZV9ieXRlcylcbiBcdH1cbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIENvbnZlcnQgYW4gYXJlbmEga2VybmVsIGFkZHJlc3MgaW50byB0aGUgYXJlbmEgcG9pbnRlciBmb3JtIG9uIGl0cyB3YXkgaW50b1xuJiM0MzsgKiB0aGUgQlBGIGN0eCwgZHN0ID0gKHUzMikoc3JjIC0ga2Vybl92bV9zdGFydCksIHdpdGggQGJhc2VfbG8gaG9sZGluZyB0aGUgbG93XG4mIzQzOyAqIDMyIGJpdHMgb2Yga2Vybl92bV9zdGFydC4gQSBudWxsYWJsZSBhcmcgcHJlc2VydmVzIE5VTEwsIHRlc3RlZCBvbiB0aGUgZnVsbFxuJiM0MzsgKiA2NC1iaXQga2VybmVsIHBvaW50ZXIuIFRoZSAzMi1iaXQgc3VidHJhY3Rpb24gYm90aCB0cnVuY2F0ZXMgYW5kIGNsZWFycyB0aGVcbiYjNDM7ICogdXBwZXIgaGFsZiwgc28gdGhlIHN0b3JlZCB2YWx1ZSBzYXRpc2ZpZXMgdGhlIEpJVCBpbnZhcmlhbnQgZm9yIGFyZW5hXG4mIzQzOyAqIHBvaW50ZXIgcmVnaXN0ZXJzLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgZW1pdF9hcmVuYV9hcmdfY29udihzdHJ1Y3Qgaml0X2N0eCAqY3R4LCB1OCBkc3QsIHU4IHNyYywgYm9vbCBudWxsYWJsZSwgdTggYmFzZV9sbylcbiYjNDM7e1xuJiM0MztcdGlmIChudWxsYWJsZSkge1xuJiM0MztcdFx0aWYgKGRzdCAhPSBzcmMpXG4mIzQzO1x0XHRcdGVtaXQoQTY0X01PVigxLCBkc3QsIHNyYyksIGN0eCk7XG4mIzQzO1x0XHQvKiBza2lwIHRoZSBzdWJ0cmFjdGlvbiBzbyB0aGF0IE5VTEwgc3RheXMgTlVMTCAqL1xuJiM0MztcdFx0ZW1pdChBNjRfQ0JaKDEsIGRzdCwgMiksIGN0eCk7XG4mIzQzO1x0XHRzcmMgPSBkc3Q7XG4mIzQzO1x0fVxuJiM0MztcdGVtaXQoQTY0X1NVQigwLCBkc3QsIHNyYywgYmFzZV9sbyksIGN0eCk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgc2F2ZV9hcmdzKHN0cnVjdCBqaXRfY3R4ICpjdHgsIGludCBiYXJnc19vZmYsIGludCBvYXJnc19vZmYsXG4tXHRcdCAgICAgIGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSxcbi1cdFx0ICAgICAgY29uc3Qgc3RydWN0IGFyZ19hdXggKmEsXG4tXHRcdCAgICAgIGJvb2wgZm9yX2NhbGxfb3JpZ2luKVxuJiM0MztcdFx0ICAgICAgY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCBjb25zdCBzdHJ1Y3QgYXJnX2F1eCAqYSxcbiYjNDM7XHRcdCAgICAgIGJvb2wgZm9yX2NhbGxfb3JpZ2luLCBib29sIGlzX3N0cnVjdF9vcHMsIHU2NCBhcmVuYV9iYXNlKVxuIHtcbi1cdGludCBpO1xuLVx0aW50IHJlZztcbi1cdGludCBkb2ZmO1xuLVx0aW50IHNvZmY7XG4tXHRpbnQgc2xvdHM7XG4gXHR1OCB0bXAgPSBicGYyYTY0W1RNUF9SRUdfMV07XG4mIzQzO1x0dTggYmFzZV9sbyA9IGJwZjJhNjRbVE1QX1JFR18yXTtcbiYjNDM7XHRpbnQgaSwgcmVnLCBkb2ZmLCBzb2ZmLCBzbG90cztcbiYjNDM7XG4mIzQzO1x0Lyogb25seSB0aGUgbG93IDMyIGJpdHMgb2YgdGhlIGJhc2UgdGFrZSBwYXJ0IGluIHRoZSBzdWJ0cmFjdGlvbiAqL1xuJiM0MztcdGlmIChhcmVuYV9iYXNlKVxuJiM0MztcdFx0ZW1pdF9hNjRfbW92X2koMCwgYmFzZV9sbywgKHMzMikodTMyKWFyZW5hX2Jhc2UsIGN0eCk7XG4gXG4gXHQvKiBzdG9yZSBhcmd1bWVudHMgdG8gdGhlIHN0YWNrIGZvciB0aGUgYnBmIHByb2dyYW0sIG9yIHJlc3RvcmVcbiBcdCAqIGFyZ3VtZW50cyBmcm9tIHN0YWNrIGZvciB0aGUgb3JpZ2luYWwgZnVuY3Rpb25cbiBcdCAqL1xuLVx0Zm9yIChyZWcgPSAwOyByZWcgXHUwMDNjIGEtXHUwMDNlcmVnc19mb3JfYXJnczsgcmVnJiM0MzsmIzQzOykge1xuLVx0XHRlbWl0KGZvcl9jYWxsX29yaWdpbiA/XG4tXHRcdCAgICAgQTY0X0xEUjY0SShyZWcsIEE2NF9TUCwgYmFyZ3Nfb2ZmKSA6XG4tXHRcdCAgICAgQTY0X1NUUjY0SShyZWcsIEE2NF9TUCwgYmFyZ3Nfb2ZmKSxcbi1cdFx0ICAgICBjdHgpO1xuLVx0XHRiYXJnc19vZmYgJiM0Mzs9IDg7XG4mIzQzO1x0Zm9yIChpID0gMCwgcmVnID0gMDsgaSBcdTAwM2MgYS1cdTAwM2VhcmdzX2luX3JlZ3M7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRib29sIGFyZW5hX2FyZyA9IGFyZW5hX2Jhc2UgXHUwMDI2XHUwMDI2IChtLVx1MDAzZWFyZ19mbGFnc1tpXSBcdTAwMjYgQlRGX0ZNT0RFTF9BUkVOQV9BUkcpO1xuJiM0MztcdFx0Ym9vbCBudWxsYWJsZSA9IG0tXHUwMDNlYXJnX2ZsYWdzW2ldIFx1MDAyNiBCVEZfRk1PREVMX05VTExBQkxFX0FSRztcbiYjNDM7XG4mIzQzO1x0XHRzbG90cyA9IChtLVx1MDAzZWFyZ19zaXplW2ldICYjNDM7IDcpIC8gODtcbiYjNDM7XHRcdHdoaWxlIChzbG90cy0tIFx1MDAzZSAwKSB7XG4mIzQzO1x0XHRcdGlmIChmb3JfY2FsbF9vcmlnaW4pIHtcbiYjNDM7XHRcdFx0XHRlbWl0KEE2NF9MRFI2NEkocmVnLCBBNjRfU1AsIGJhcmdzX29mZiksIGN0eCk7XG4mIzQzO1x0XHRcdH0gZWxzZSBpZiAoYXJlbmFfYXJnKSB7XG4mIzQzO1x0XHRcdFx0ZW1pdF9hcmVuYV9hcmdfY29udihjdHgsIHRtcCwgcmVnLCBudWxsYWJsZSwgYmFzZV9sbyk7XG4mIzQzO1x0XHRcdFx0ZW1pdChBNjRfU1RSNjRJKHRtcCwgQTY0X1NQLCBiYXJnc19vZmYpLCBjdHgpO1xuJiM0MztcdFx0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRcdGVtaXQoQTY0X1NUUjY0SShyZWcsIEE2NF9TUCwgYmFyZ3Nfb2ZmKSwgY3R4KTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRyZWcmIzQzOyYjNDM7O1xuJiM0MztcdFx0XHRiYXJnc19vZmYgJiM0Mzs9IDg7XG4mIzQzO1x0XHR9XG4gXHR9XG4gXG4tXHRzb2ZmID0gMzI7IC8qIG9uIHN0YWNrIGFyZ3VtZW50cyBzdGFydCBmcm9tIEZQICYjNDM7IDMyICovXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBPbi1zdGFjayBhcmd1bWVudHMgc3RhcnQgYWJvdmUgdGhlIGZyYW1lKHMpIHB1c2hlZCBieSB0aGUgdHJhbXBvbGluZVxuJiM0MztcdCAqIHByb2xvZ3VlLiBFbnRlcmVkIHRocm91Z2ggdGhlIGZlbnRyeSBjYWxsIGZyb20gYSB0cmFjZWQgZnVuY3Rpb24sIHRoZVxuJiM0MztcdCAqIHByb2xvZ3VlIHNhdmVzIGJvdGggdGhlIHBhcmVudCAoRlAveDkpIGFuZCB0aGUgdHJhY2VkIGZ1bmN0aW9uXG4mIzQzO1x0ICogKEZQL0xSKSBmcmFtZXMsIHNvIHRoZSBhcmd1bWVudHMgc3RhcnQgYXQgRlAgJiM0MzsgMzIuIEEgc3RydWN0X29wc1xuJiM0MztcdCAqIGNhbGxiYWNrIGlzIGNhbGxlZCBpbmRpcmVjdGx5IGFuZCBvbmx5IHRoZSBGUC9MUiBmcmFtZSBpcyBzYXZlZCwgc29cbiYjNDM7XHQgKiB0aGV5IHN0YXJ0IGF0IEZQICYjNDM7IDE2LlxuJiM0MztcdCAqL1xuJiM0MztcdHNvZmYgPSBpc19zdHJ1Y3Rfb3BzID8gMTYgOiAzMjtcbiBcdGRvZmYgPSAoZm9yX2NhbGxfb3JpZ2luID8gb2FyZ3Nfb2ZmIDogYmFyZ3Nfb2ZmKTtcbiBcbiBcdC8qIHNhdmUgb24gc3RhY2sgYXJndW1lbnRzICovXG4gXHRmb3IgKGkgPSBhLVx1MDAzZWFyZ3NfaW5fcmVnczsgaSBcdTAwM2MgbS1cdTAwM2Vucl9hcmdzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0Ym9vbCBhcmVuYV9hcmcgPSBhcmVuYV9iYXNlIFx1MDAyNlx1MDAyNiAobS1cdTAwM2VhcmdfZmxhZ3NbaV0gXHUwMDI2IEJURl9GTU9ERUxfQVJFTkFfQVJHKTtcbiYjNDM7XHRcdGJvb2wgbnVsbGFibGUgPSBtLVx1MDAzZWFyZ19mbGFnc1tpXSBcdTAwMjYgQlRGX0ZNT0RFTF9OVUxMQUJMRV9BUkc7XG4mIzQzO1xuIFx0XHRzbG90cyA9IChtLVx1MDAzZWFyZ19zaXplW2ldICYjNDM7IDcpIC8gODtcbiBcdFx0LyogdmVyaWZpZXIgZW5zdXJlcyBhcmdfc2l6ZSBcdTAwM2M9IDE2LCBzbyBzbG90cyBlcXVhbHMgMSBvciAyICovXG4gXHRcdHdoaWxlIChzbG90cy0tIFx1MDAzZSAwKSB7XG5AQCAtMjU2MSw2ICYjNDM7MjY1MCwxNSBAQCBzdGF0aWMgdm9pZCBzYXZlX2FyZ3Moc3RydWN0IGppdF9jdHggKmN0eCwgaW50IGJhcmdzX29mZiwgaW50IG9hcmdzX29mZixcbiBcdFx0XHQgKi9cbiBcdFx0XHRpZiAoc2xvdHMgPT0gMCBcdTAwMjZcdTAwMjYgIWZvcl9jYWxsX29yaWdpbilcbiBcdFx0XHRcdGNsZWFyX2dhcmJhZ2UoY3R4LCB0bXAsIG0tXHUwMDNlYXJnX3NpemVbaV0gJSA4KTtcbiYjNDM7XHRcdFx0LypcbiYjNDM7XHRcdFx0ICogTm8gZ3VhcmQgb24gZm9yX2NhbGxfb3JpZ2luIGhlcmU6IG9ubHkgdGhlIGluZGlyZWN0XG4mIzQzO1x0XHRcdCAqIHRyYW1wb2xpbmUgaXMgZ2l2ZW4gYSBiYXNlLCBhbmQgaXQgbmV2ZXIgY2FsbHMgdGhlXG4mIzQzO1x0XHRcdCAqIG9yaWdpbmFsIGZ1bmN0aW9uLCBzbyBhcmd1bWVudHMgYXJlIG5ldmVyIGNvbnZlcnRlZFxuJiM0MztcdFx0XHQgKiBvbiB0aGVpciB3YXkgYmFjayBvdXQgdG8gaXQuIFNlZSB0aGUgV0FSTl9PTl9PTkNFKClcbiYjNDM7XHRcdFx0ICogaW4gcHJlcGFyZV90cmFtcG9saW5lKCkuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRpZiAoYXJlbmFfYXJnKVxuJiM0MztcdFx0XHRcdGVtaXRfYXJlbmFfYXJnX2NvbnYoY3R4LCB0bXAsIHRtcCwgbnVsbGFibGUsIGJhc2VfbG8pO1xuIFx0XHRcdGVtaXQoQTY0X1NUUjY0SSh0bXAsIEE2NF9TUCwgZG9mZiksIGN0eCk7XG4gXHRcdFx0c29mZiAmIzQzOz0gODtcbiBcdFx0XHRkb2ZmICYjNDM7PSA4O1xuQEAgLTI2MjAsOCAmIzQzOzI3MTgsMjEgQEAgc3RhdGljIGludCBwcmVwYXJlX3RyYW1wb2xpbmUoc3RydWN0IGppdF9jdHggKmN0eCwgc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sXG4gXHRib29sIGlzX3N0cnVjdF9vcHMgPSBpc19zdHJ1Y3Rfb3BzX3RyYW1wKGZlbnRyeSk7XG4gXHRpbnQgY29va2llX29mZiwgY29va2llX2NudCwgY29va2llX2JhcmdzX29mZjtcbiBcdGludCBmc2Vzc2lvbl9jbnQgPSBicGZfZnNlc3Npb25fY250KHRub2Rlcyk7XG4mIzQzO1x0dTY0IGFyZW5hX2Jhc2U7XG4gXHR1NjQgZnVuY19tZXRhO1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogRl9JTkRJUkVDVCBpcyBvbmx5IGNvbXBhdGlibGUgd2l0aCBGX1JFVF9GRU5UUllfUkVULCBpdCBpcyBleHBsaWNpdGx5XG4mIzQzO1x0ICogaW5jb21wYXRpYmxlIHdpdGggRl9DQUxMX09SSUcgfCBGX1NLSVBfRlJBTUUgfCBGX0lQX0FSRyBiZWNhdXNlXG4mIzQzO1x0ICogQGZ1bmNfYWRkci4gQXJlbmEgY29udmVyc2lvbiByZWxpZXMgb24gdGhpczogYnBmX3RyYW1wX2FyZW5hX2Jhc2UoKVxuJiM0MztcdCAqIG9ubHkgcmV0dXJucyBhIGJhc2UgZm9yIHRoZSBpbmRpcmVjdCB0cmFtcG9saW5lLCB3aGljaCB0aGVyZWZvcmVcbiYjNDM7XHQgKiBuZXZlciBjYWxscyB0aGUgb3JpZ2luYWwgZnVuY3Rpb24gd2l0aCBjb252ZXJ0ZWQgYXJndW1lbnRzLlxuJiM0MztcdCAqL1xuJiM0MztcdFdBUk5fT05fT05DRSgoZmxhZ3MgXHUwMDI2IEJQRl9UUkFNUF9GX0lORElSRUNUKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAgKGZsYWdzIFx1MDAyNiB+KEJQRl9UUkFNUF9GX0lORElSRUNUIHwgQlBGX1RSQU1QX0ZfUkVUX0ZFTlRSWV9SRVQpKSk7XG4mIzQzO1xuJiM0MztcdGFyZW5hX2Jhc2UgPSBicGZfdHJhbXBfYXJlbmFfYmFzZShtLCB0bm9kZXMsIGZsYWdzKTtcbiYjNDM7XG4gXHQvKiB0cmFtcG9saW5lIHN0YWNrIGxheW91dDpcbiBcdCAqICAgICAgICAgICAgICAgICAgICBbIHBhcmVudCBpcCAgICAgICAgIF1cbiBcdCAqICAgICAgICAgICAgICAgICAgICBbIEZQICAgICAgICAgICAgICAgIF1cbkBAIC0yNzM3LDcgJiM0MzsyODQ4LDcgQEAgc3RhdGljIGludCBwcmVwYXJlX3RyYW1wb2xpbmUoc3RydWN0IGppdF9jdHggKmN0eCwgc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sXG4gXHRzdG9yZV9mdW5jX21ldGEoY3R4LCBmdW5jX21ldGEsIGZ1bmNfbWV0YV9vZmYpO1xuIFxuIFx0Lyogc2F2ZSBhcmdzIGZvciBicGYgKi9cbi1cdHNhdmVfYXJncyhjdHgsIGJhcmdzX29mZiwgb2FyZ3Nfb2ZmLCBtLCBhLCBmYWxzZSk7XG4mIzQzO1x0c2F2ZV9hcmdzKGN0eCwgYmFyZ3Nfb2ZmLCBvYXJnc19vZmYsIG0sIGEsIGZhbHNlLCBpc19zdHJ1Y3Rfb3BzLCBhcmVuYV9iYXNlKTtcbiBcbiBcdC8qIHNhdmUgY2FsbGVlIHNhdmVkIHJlZ2lzdGVycyAqL1xuIFx0ZW1pdChBNjRfU1RSNjRJKEE2NF9SKDE5KSwgQTY0X1NQLCByZWdzX29mZiksIGN0eCk7XG5AQCAtMjc4NSw4ICYjNDM7Mjg5Niw4IEBAIHN0YXRpYyBpbnQgcHJlcGFyZV90cmFtcG9saW5lKHN0cnVjdCBqaXRfY3R4ICpjdHgsIHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLFxuIFx0fVxuIFxuIFx0aWYgKGZsYWdzIFx1MDAyNiBCUEZfVFJBTVBfRl9DQUxMX09SSUcpIHtcbi1cdFx0Lyogc2F2ZSBhcmdzIGZvciBvcmlnaW5hbCBmdW5jICovXG4tXHRcdHNhdmVfYXJncyhjdHgsIGJhcmdzX29mZiwgb2FyZ3Nfb2ZmLCBtLCBhLCB0cnVlKTtcbiYjNDM7XHRcdC8qIHRoZSBvcmlnaW5hbCBmdW5jIHRha2VzIGtlcm5lbCBhZGRyZXNzZXMsIG5ldmVyIGNvbnZlcnRlZCBvbmVzICovXG4mIzQzO1x0XHRzYXZlX2FyZ3MoY3R4LCBiYXJnc19vZmYsIG9hcmdzX29mZiwgbSwgYSwgdHJ1ZSwgaXNfc3RydWN0X29wcywgMCk7XG4gXHRcdC8qIGNhbGwgb3JpZ2luYWwgZnVuYyAqL1xuIFx0XHRlbWl0KEE2NF9MRFI2NEkoQTY0X1IoMTApLCBBNjRfU1AsIHJldGFkZHJfb2ZmKSwgY3R4KTtcbiBcdFx0ZW1pdChBNjRfQURSKEE2NF9MUiwgQUFSQ0g2NF9JTlNOX1NJWkUgKiAyKSwgY3R4KTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3N0cnVjdF9vcHNfYXJlbmEuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3Rfc3RydWN0X29wc19hcmVuYS5jXG5pbmRleCA5NDBlYzJjZGEwZDUyLi43ZjlmNTRiYTNmYmU1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9zdHJ1Y3Rfb3BzX2FyZW5hLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3Rfc3RydWN0X29wc19hcmVuYS5jXG5AQCAtNiw3ICYjNDM7Niw3IEBAXG4gI2luY2x1ZGUgXCYjMzQ7c3RydWN0X29wc19hcmVuYV9hdHRhY2guc2tlbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7c3RydWN0X29wc19hcmVuYV9mYWlsLnNrZWwuaFwmIzM0O1xuIFxuLSNpZiBkZWZpbmVkKF9feDg2XzY0X18pXG4mIzQzOyNpZiBkZWZpbmVkKF9feDg2XzY0X18pIHx8IGRlZmluZWQoX19hYXJjaDY0X18pXG4gLypcbiAgKiBBdHRhY2ggY2FsbGJhY2tzIHdpdGggX19hcmVuYSBhbmQgX19hcmVuYV9fbnVsbGFibGUgYXJndW1lbnRzIGFuZCBkcml2ZVxuICAqIHRoZW0gdGhyb3VnaCB0aGUgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmEqKCkga2Z1bmNzLlxuQEAgLTExMSwxMSAmIzQzOzExMSwxMSBAQCBzdGF0aWMgdm9pZCBhcmVuYV9hcmdfYXR0YWNoKHZvaWQpXG4gdm9pZCBzZXJpYWxfdGVzdF9zdHJ1Y3Rfb3BzX2FyZW5hKHZvaWQpXG4ge1xuIFx0Lypcbi1cdCAqIEFyZW5hIHN0cnVjdF9vcHMgYXJndW1lbnRzIG5lZWQgSklUIHN1cHBvcnQsIGN1cnJlbnRseSB4ODYtNjQgb25seS5cbi1cdCAqIEVsc2V3aGVyZSB2ZXJpZmljYXRpb24gZmFpbHMgd2l0aCBcJiMzNDtKSVQgZG9lcyBub3Qgc3VwcG9ydCBhcmVuYVxuLVx0ICogYXJndW1lbnRzXCYjMzQ7LCBzbyB0aGUgcHJvZ3JhbXMgY2Fubm90IGV2ZW4gbG9hZC5cbiYjNDM7XHQgKiBBcmVuYSBzdHJ1Y3Rfb3BzIGFyZ3VtZW50cyBuZWVkIEpJVCBzdXBwb3J0LCBjdXJyZW50bHkgeDg2LTY0IGFuZFxuJiM0MztcdCAqIGFybTY0IG9ubHkuIEVsc2V3aGVyZSB2ZXJpZmljYXRpb24gZmFpbHMgd2l0aCBcJiMzNDtKSVQgZG9lcyBub3Qgc3VwcG9ydFxuJiM0MztcdCAqIGFyZW5hIGFyZ3VtZW50c1wmIzM0Oywgc28gdGhlIHByb2dyYW1zIGNhbm5vdCBldmVuIGxvYWQuXG4gXHQgKi9cbi0jaWYgZGVmaW5lZChfX3g4Nl82NF9fKVxuJiM0MzsjaWYgZGVmaW5lZChfX3g4Nl82NF9fKSB8fCBkZWZpbmVkKF9fYWFyY2g2NF9fKVxuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7YXJlbmFfYXJnXCYjMzQ7KSlcbiBcdFx0YXJlbmFfYXJnKCk7XG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDthcmVuYV9hcmdfZmFpbFwmIzM0OykpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmMuY1xuaW5kZXggY2RjZWE4ODlkYTU4Ni4uYmYwZDMwNGUwZTU5YyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmMuY1xuQEAgLTI3LDYgJiM0MzsyNyw3IEBAIHZvbGF0aWxlIHU2NCBzdGFzaDtcbiBcbiBTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OylcbiBfX2FyY2hfeDg2XzY0XG4mIzQzO19fYXJjaF9hcm02NFxuIF9fc3VjY2VzcyBfX3JldHZhbCgwKVxuIGludCBhcmVuYV9hcmdfZm9ybXModm9pZCAqY3R4KVxuIHtcbkBAIC03MCw2ICYjNDM7NzEsNyBAQCBpbnQgYXJlbmFfYXJnX2Zvcm1zKHZvaWQgKmN0eClcbiAgKi9cbiBTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OylcbiBfX2FyY2hfeDg2XzY0XG4mIzQzO19fYXJjaF9hcm02NFxuIF9fc3VjY2VzcyBfX3JldHZhbCgwKVxuIGludCBhcmVuYV9hcmdfcmViYXNlKHZvaWQgKmN0eClcbiB7XG5AQCAtMTExLDYgJiM0MzsxMTMsNyBAQCBpbnQgYXJlbmFfYXJnX3JlYmFzZSh2b2lkICpjdHgpXG4gXG4gU0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspXG4gX19hcmNoX3g4Nl82NFxuJiM0MztfX2FyY2hfYXJtNjRcbiBfX3N1Y2Nlc3MgX19yZXR2YWwoMClcbiBpbnQgYXJlbmFfYXJnczUodm9pZCAqY3R4KVxuIHtcbkBAIC0xNDIsNiAmIzQzOzE0NSw3IEBAIGludCBhcmVuYV9hcmdzNSh2b2lkICpjdHgpXG4gXG4gU0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspXG4gX19hcmNoX3g4Nl82NFxuJiM0MztfX2FyY2hfYXJtNjRcbiBfX3N1Y2Nlc3MgX19yZXR2YWwoMClcbiBpbnQgYXJlbmFfYXJnX21peGVkKHZvaWQgKmN0eClcbiB7XG5AQCAtMTY5LDYgJiM0MzsxNzMsNyBAQCBpbnQgYXJlbmFfYXJnX21peGVkKHZvaWQgKmN0eClcbiAvKiBrZXJuZWwtc2lkZSBmYXVsdHMgb24gdW5wb3B1bGF0ZWQgcGFnZXMgcmVjb3ZlciB2aWEgdGhlIHNjcmF0Y2ggcGFnZSAqL1xuIFNFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KVxuIF9fYXJjaF94ODZfNjRcbiYjNDM7X19hcmNoX2FybTY0XG4gX19zdWNjZXNzIF9fcmV0dmFsKDApXG4gaW50IGFyZW5hX2FyZ191bnBvcHVsYXRlZCh2b2lkICpjdHgpXG4ge1xuQEAgLTE4OSw2ICYjNDM7MTk0LDcgQEAgaW50IGFyZW5hX2FyZ191bnBvcHVsYXRlZCh2b2lkICpjdHgpXG4gXG4gU0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspXG4gX19hcmNoX3g4Nl82NFxuJiM0MztfX2FyY2hfYXJtNjRcbiBfX2ZhaWx1cmUgX19tc2coXCYjMzQ7YXJlbmEgcG9pbnRlciByZXF1aXJlcyBhIHByb2dyYW0gd2l0aCBhbiBhc3NvY2lhdGVkIGFyZW5hXCYjMzQ7KVxuIGludCBhcmVuYV9hcmdfbm9fYXJlbmEodm9pZCAqY3R4KVxuIHtcbkBAIC0xOTgsNiAmIzQzOzIwNCw3IEBAIGludCBhcmVuYV9hcmdfbm9fYXJlbmEodm9pZCAqY3R4KVxuIFxuIFNFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KVxuIF9fYXJjaF94ODZfNjRcbiYjNDM7X19hcmNoX2FybTY0XG4gX19mYWlsdXJlIF9fbXNnKFwmIzM0O2lzIG5vdCBhIHBvaW50ZXIgdG8gYXJlbmEgb3Igc2NhbGFyXCYjMzQ7KVxuIGludCBhcmVuYV9hcmdfYmFkX3JlZyh2b2lkICpjdHgpXG4ge1xuQEAgLTIxMyw2ICYjNDM7MjIwLDcgQEAgaW50IGFyZW5hX2FyZ19iYWRfcmVnKHZvaWQgKmN0eClcbiBcdGRlZmluZWQoX19CUEZfRkVBVFVSRV9TVEFDS19BUkdVTUVOVClcbiBTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OylcbiBfX2FyY2hfeDg2XzY0XG4mIzQzO19fYXJjaF9hcm02NFxuIF9fZmFpbHVyZSBfX21zZyhcJiMzNDthcmVuYSBwb2ludGVyIGNhbm5vdCBiZSBhIHN0YWNrIGFyZ3VtZW50XCYjMzQ7KVxuIGludCBhcmVuYV9hcmdfc3RhY2sodm9pZCAqY3R4KVxuIHtcbkBAIC0yMjMsNiAmIzQzOzIzMSw3IEBAIGludCBhcmVuYV9hcmdfc3RhY2sodm9pZCAqY3R4KVxuICNlbHNlXG4gU0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspXG4gX19hcmNoX3g4Nl82NFxuJiM0MztfX2FyY2hfYXJtNjRcbiBfX2Rlc2NyaXB0aW9uKFwmIzM0O2FyZW5hX2FyZ19zdGFjazogbm90IHN1cHBvcnRlZCwgZHVtbXkgdGVzdFwmIzM0OylcbiBfX3N1Y2Nlc3NcbiBpbnQgYXJlbmFfYXJnX3N0YWNrKHZvaWQgKmN0eClcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmNfaml0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmNfaml0LmNcbmluZGV4IGM5YjkxODY2MjYxNjIuLmI1YTAxY2JjMzNhNzMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmNfaml0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuY19qaXQuY1xuQEAgLTMyLDYgJiM0MzszMiwxMCBAQCBfX2ppdGVkKFwmIzM0O1x0bW92bFx0JWVkaSwgJWVkaVwmIzM0OylcbiBfX2ppdGVkKFwmIzM0O1x0YWRkcVx0JXIxMiwgJXJkaVwmIzM0OylcbiBfX2ppdGVkKFwmIzM0Oy4uLlwmIzM0OylcbiBfX2ppdGVkKFwmIzM0O1x0Y2FsbHFcdHt7Lip9fVwmIzM0OylcbiYjNDM7X19hcmNoX2FybTY0XG4mIzQzO19faml0ZWQoXCYjMzQ7Li4uXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0YWRkXHR4MCwgeDI4LCB3MCwgdXh0d1wmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdHt7KGJsfG1vdilcdC4qfX1cJiMzNDspXG4gX19zdWNjZXNzXG4gaW50IGFyZW5hX2FyZ19qaXRfcmViYXNlKHZvaWQgKmN0eClcbiB7XG5AQCAtNDgsNiAmIzQzOzUyLDEyIEBAIF9faml0ZWQoXCYjMzQ7XHR0ZXN0bFx0JWVkaSwgJWVkaVwmIzM0OylcbiBfX2ppdGVkKFwmIzM0O1x0amVcdEwwXCYjMzQ7KVxuIF9faml0ZWQoXCYjMzQ7XHRhZGRxXHQlcjEyLCAlcmRpXCYjMzQ7KVxuIF9faml0ZWQoXCYjMzQ7TDA6XHRjYWxscVx0e3suKn19XCYjMzQ7KVxuJiM0MztfX2FyY2hfYXJtNjRcbiYjNDM7X19qaXRlZChcJiMzNDsuLi5cJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRtb3ZcdHcwLCB3MFwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdGNielx0dzAsIEwwXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0YWRkXHR4MCwgeDI4LCB3MCwgdXh0d1wmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtMMDpcdHt7Lip9fVwmIzM0OylcbiBfX3N1Y2Nlc3NcbiBpbnQgYXJlbmFfYXJnX2ppdF9udWxsYWJsZSh2b2lkICpjdHgpXG4ge1xuQEAgLTcyLDYgJiM0Mzs4MiwxNiBAQCBfX2ppdGVkKFwmIzM0O1x0dGVzdGxcdCVyOGQsICVyOGRcJiMzNDspXG4gX19qaXRlZChcJiMzNDtcdGplXHRMMFwmIzM0OylcbiBfX2ppdGVkKFwmIzM0O1x0YWRkcVx0JXIxMiwgJXI4XCYjMzQ7KVxuIF9faml0ZWQoXCYjMzQ7TDA6XHRjYWxscVx0e3suKn19XCYjMzQ7KVxuJiM0MztfX2FyY2hfYXJtNjRcbiYjNDM7X19qaXRlZChcJiMzNDsuLi5cJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRhZGRcdHgwLCB4MjgsIHcwLCB1eHR3XCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0YWRkXHR4MSwgeDI4LCB3MSwgdXh0d1wmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdGFkZFx0eDIsIHgyOCwgdzIsIHV4dHdcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRhZGRcdHgzLCB4MjgsIHczLCB1eHR3XCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0bW92XHR3NCwgdzRcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRjYnpcdHc0LCBMMFwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdGFkZFx0eDQsIHgyOCwgdzQsIHV4dHdcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7TDA6XHR7ey4qfX1cJiMzNDspXG4gX19zdWNjZXNzXG4gaW50IGFyZW5hX2FyZ19qaXRfYXJnczUodm9pZCAqY3R4KVxuIHtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RydWN0X29wc19hcmVuYS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfYXJlbmEuY1xuaW5kZXggYmEwNGM3M2Q4ZDk2Ny4uOGFhODYzOWRmOTFmMCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJ1Y3Rfb3BzX2FyZW5hLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJ1Y3Rfb3BzX2FyZW5hLmNcbkBAIC01OSwxMSAmIzQzOzU5LDI4IEBAIGludCB0ZXN0X2FyZW5hX3N0YWNrX2NiKHVuc2lnbmVkIGxvbmcgbG9uZyAqY3R4KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztTRUMoXCYjMzQ7c3RydWN0X29wcy90ZXN0X2FyZW5hX211bHRpc2xvdFwmIzM0OylcbiYjNDM7aW50IHRlc3RfYXJlbmFfbXVsdGlzbG90X2NiKHVuc2lnbmVkIGxvbmcgbG9uZyAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0dTY0IF9fYXJlbmEgKnB0ciA9ICh1NjQgX19hcmVuYSAqKWN0eFsyXTtcbiYjNDM7XG4mIzQzO1x0YXJlbmFfdG91Y2gmIzQzOyYjNDM7O1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVGhlIDE2LWJ5dGUgc3RydWN0IG9jY3VwaWVzIGN0eFswXSBhbmQgY3R4WzFdLCBzbyBAcHRyIGlzIGFyZ3VtZW50XG4mIzQzO1x0ICogb25lIGJ1dCBzbG90IHR3by4gR2V0dGluZyB0aGF0IHdyb25nIGhhbmRzIHRoZSBjYWxsYmFjayBhIHNjYWxhci5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoY3R4WzBdICE9IDExIHx8IGN0eFsxXSAhPSAyMilcbiYjNDM7XHRcdHJldHVybiAweGJhZDtcbiYjNDM7XHQqcHRyICYjNDM7PSAxO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIFNFQyhcJiMzNDsuc3RydWN0X29wcy5saW5rXCYjMzQ7KVxuIHN0cnVjdCBicGZfdGVzdG1vZF9vcHMzIHRlc3Rtb2RfYXJlbmEgPSB7XG4gXHQudGVzdF9hcmVuYSA9ICh2b2lkICopdGVzdF9hcmVuYV9jYixcbiBcdC50ZXN0X2FyZW5hX251bGxhYmxlID0gKHZvaWQgKil0ZXN0X2FyZW5hX251bGxhYmxlX2NiLFxuIFx0LnRlc3RfYXJlbmFfc3RhY2sgPSAodm9pZCAqKXRlc3RfYXJlbmFfc3RhY2tfY2IsXG4mIzQzO1x0LnRlc3RfYXJlbmFfbXVsdGlzbG90ID0gKHZvaWQgKil0ZXN0X2FyZW5hX211bHRpc2xvdF9jYixcbiB9O1xuIFxuIFNFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KVxuQEAgLTEwOSw2ICYjNDM7MTI2LDEzIEBAIGludCB0cmlnZ2VyKHZvaWQgKmN0eClcbiBcdGlmICgqdmFsICE9IDQ0KVxuIFx0XHRyZXR1cm4gOTtcbiBcbiYjNDM7XHQvKiBhIG11bHRpLXNsb3QgYXJnIHByZWNlZGVzIHRoZSBhcmVuYSBwb2ludGVyIGhlcmUgKi9cbiYjNDM7XHRyZXQgPSBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9tdWx0aXNsb3QoKHU2NCAqKXZhbCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiAxMDtcbiYjNDM7XHRpZiAoKnZhbCAhPSA0NSlcbiYjNDM7XHRcdHJldHVybiAxMTtcbiYjNDM7XG4gXHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKXZhbCwgMSk7XG4gI2VuZGlmXG4gXHRyZXR1cm4gMDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuY1xuaW5kZXggYTYxMzNmNzUyMWYzNC4uOTM2NmEzYzU3OGYxMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmNcbkBAIC00MDIsMTIgJiM0Mzs0MDIsMTkgQEAgc3RhdGljIGludCBicGZfdGVzdG1vZF9vcHMzX190ZXN0X2FyZW5hX3N0YWNrKHU2NCBhLCB1NjQgYiwgdTY0IGMsIHU2NCBkLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmFfbXVsdGlzbG90KHN0cnVjdCBicGZfdGVzdG1vZF9hcmVuYV9wYWlyIHAsXG4mIzQzO1x0XHRcdFx0XHRcdCAgdTY0ICpwdHJfX2FyZW5hKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHN0cnVjdCBicGZfdGVzdG1vZF9vcHMzIF9fYnBmX3Rlc3Rtb2Rfb3BzMyA9IHtcbiBcdC50ZXN0XzEgPSBicGZfdGVzdG1vZF90ZXN0XzMsXG4gXHQudGVzdF8yID0gYnBmX3Rlc3Rtb2RfdGVzdF80LFxuIFx0LnRlc3RfYXJlbmEgPSBicGZfdGVzdG1vZF9vcHMzX190ZXN0X2FyZW5hLFxuIFx0LnRlc3RfYXJlbmFfbnVsbGFibGUgPSBicGZfdGVzdG1vZF9vcHMzX190ZXN0X2FyZW5hX251bGxhYmxlLFxuIFx0LnRlc3RfYXJlbmFfc3RhY2sgPSBicGZfdGVzdG1vZF9vcHMzX190ZXN0X2FyZW5hX3N0YWNrLFxuJiM0MztcdC50ZXN0X2FyZW5hX211bHRpc2xvdCA9IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmFfbXVsdGlzbG90LFxuIH07XG4gXG4gc3RhdGljIHZvaWQgYnBmX3Rlc3Rtb2RfdGVzdF9zdHJ1Y3Rfb3BzMyh2b2lkKVxuQEAgLTQ0MSw2ICYjNDM7NDQ4LDEzIEBAIF9fYnBmX2tmdW5jIGludCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9zdGFjayh1NjQgKnB0cl9fYXJlbmEpXG4gXHRyZXR1cm4gc3Rfb3BzMy1cdTAwM2V0ZXN0X2FyZW5hX3N0YWNrKDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIHB0cl9fYXJlbmEpO1xuIH1cbiBcbiYjNDM7X19icGZfa2Z1bmMgaW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX211bHRpc2xvdCh1NjQgKnB0cl9fYXJlbmEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX3Rlc3Rtb2RfYXJlbmFfcGFpciBwID0geyAuYSA9IDExLCAuYiA9IDIyIH07XG4mIzQzO1xuJiM0MztcdHJldHVybiBzdF9vcHMzLVx1MDAzZXRlc3RfYXJlbmFfbXVsdGlzbG90KHAsIHB0cl9fYXJlbmEpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0cnVjdCBicGZfdGVzdG1vZF9idGZfdHlwZV90YWdfMSB7XG4gXHRpbnQgYTtcbiB9O1xuQEAgLTg1Miw2ICYjNDM7ODY2LDcgQEAgQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0XzIpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9udWxsYWJsZSlcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfc3RhY2spXG4mIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9tdWx0aXNsb3QpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19nZXRfZGVmYXVsdF90cnVzdGVkX3B0cl90ZXN0KTtcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX3B1dF9kZWZhdWx0X3RydXN0ZWRfcHRyX3Rlc3QpO1xuIEJURl9LRlVOQ1NfRU5EKGJwZl90ZXN0bW9kX2NvbW1vbl9rZnVuY19pZHMpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmhcbmluZGV4IDMzZjJhZjViNzA4NTcuLjIxMGI5MTkyOTBjYzIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5oXG5AQCAtMTAzLDYgJiM0MzsxMDMsMTIgQEAgc3RydWN0IGJwZl90ZXN0bW9kX29wczIge1xuIFx0aW50ICgqdGVzdF8xKSh2b2lkKTtcbiB9O1xuIFxuJiM0MzsvKiAxNiBieXRlcywgc28gaXQgdGFrZXMgdHdvIGFyZ3VtZW50IHNsb3RzIHdoZW4gcGFzc2VkIGJ5IHZhbHVlICovXG4mIzQzO3N0cnVjdCBicGZfdGVzdG1vZF9hcmVuYV9wYWlyIHtcbiYjNDM7XHR1NjQgYTtcbiYjNDM7XHR1NjQgYjtcbiYjNDM7fTtcbiYjNDM7XG4gc3RydWN0IGJwZl90ZXN0bW9kX29wczMge1xuIFx0aW50ICgqdGVzdF8xKSh2b2lkKTtcbiBcdGludCAoKnRlc3RfMikodm9pZCk7XG5AQCAtMTEyLDYgJiM0MzsxMTgsOCBAQCBzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzMyB7XG4gXHQvKiBlbm91Z2ggbGVhZGluZyBhcmdzIHRvIGZvcmNlIEBwdHIgb250byB0aGUgc3RhY2sgb24geDg2IGFuZCBhcm02NCAqL1xuIFx0aW50ICgqdGVzdF9hcmVuYV9zdGFjaykodTY0IGEsIHU2NCBiLCB1NjQgYywgdTY0IGQsIHU2NCBlLCB1NjQgZixcbiBcdFx0XHRcdHU2NCBnLCB1NjQgaCwgdTY0ICpwdHIpO1xuJiM0MztcdC8qIGEgbXVsdGktc2xvdCBsZWFkaW5nIGFyZywgc28gQHB0ciBpcyBub3QgYXQgdGhlIHNsb3QgaXRzIGFyZyBpbmRleCBzdWdnZXN0cyAqL1xuJiM0MztcdGludCAoKnRlc3RfYXJlbmFfbXVsdGlzbG90KShzdHJ1Y3QgYnBmX3Rlc3Rtb2RfYXJlbmFfcGFpciBwLCB1NjQgKnB0cik7XG4gfTtcbiBcbiBzdHJ1Y3Qgc3Rfb3BzX2FyZ3Mge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kX2tmdW5jLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oXG5pbmRleCBjNDM4M2FjYjUzYzExLi43ZDgxMDcwZWVmZTdmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaFxuQEAgLTEyMyw2ICYjNDM7MTIzLDcgQEAgdm9pZCBicGZfdGVzdG1vZF90ZXN0X21vZF9rZnVuYyhpbnQgaSkgX19rc3ltO1xuIGludCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYShfX3U2NCAqcHRyX19hcmVuYSkgX19rc3ltO1xuIGludCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9udWxsYWJsZShfX3U2NCAqcHRyX19hcmVuYV9fbnVsbGFibGUpIF9fa3N5bTtcbiBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfc3RhY2soX191NjQgKnB0cl9fYXJlbmEpIF9fa3N5bTtcbiYjNDM7aW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX211bHRpc2xvdChfX3U2NCAqcHRyX19hcmVuYSkgX19rc3ltO1xuIFxuIF9fdTY0IGJwZl9rZnVuY19jYWxsX3Rlc3QxKHN0cnVjdCBzb2NrICpzaywgX191MzIgYSwgX191NjQgYixcbiBcdFx0XHRcdF9fdTMyIGMsIF9fdTY0IGQpIF9fa3N5bTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDo1MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7QlBGX0pJVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9leHRlbmRlZF9yZWcmIzM0OywKICAgICYjMzQ7YnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzJiMzNDssCiAgICAmIzM0O2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbXBsZW1lbnRzIEJQRiBhcmVuYSBhcmd1bWVudHMgc3VwcG9ydCBmb3IgdGhlIGFybTY0IEpJVCBjb21waWxlci4gSXQgYWRkcyBuZXcgaW5zdHJ1Y3Rpb24gZ2VuZXJhdGlvbiBsb2dpYyBmb3IgZXh0ZW5kZWQgcmVnaXN0ZXIgYWRkL3N1YiBpbnN0cnVjdGlvbnMgKGBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnYCkgYW5kIG1vZGlmaWVzIHRoZSBhcm02NCBCUEYgSklUIChgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYCwgYGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJnc2ApIHRvIGhhbmRsZSBhcmVuYSBwb2ludGVycyBpbiBrZnVuYyBjYWxscyBhbmQgc3RydWN0X29wcyBjYWxsYmFja3MuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUga2VybmVsIChCUEYgSklUKSB0aGF0IGFyZSByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5ZmQzODIyNWMyM2U4YTk1ZWFmMzg4ZjI3M2RjMzM4NzFiMjI0ZWJmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMTMgMjA6NTA6MTEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0IGIvRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdAppbmRleCAxMGU3MjVjYmU2NGNkLi44NWY3M2UwYmJkMGZmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3QKQEAgLTMwMSw5ICYjNDM7MzAxLDkgQEAgQW4gZXhhbXBsZSBpcyBnaXZlbiBiZWxvdzo6CiAgICAgICAgIH0KIAogQ2FsbGluZyBzdWNoIGEga2Z1bmMgcmVxdWlyZXMgdGhlIHByb2dyYW0gdG8gdXNlIGFuIGFyZW5hIG1hcCBhbmQgYSBKSVQgd2l0aAotYXJlbmEgYXJndW1lbnQgc3VwcG9ydCAoY3VycmVudGx5IHg4Ni02NCk7IHZlcmlmaWNhdGlvbiBmYWlscyBvdGhlcndpc2UuIFRoZQotcHJvZ3JhbSBjYW4gcGFzcyBhbnkgdmFsdWUgd2l0aG91dCBjb21wcm9taXNpbmcgdGhlIGtlcm5lbC4gQSB2YWx1ZSB0aGF0IGRvZXMKLW5vdCBwb2ludCBpbnRvIHRoZSBhcmVuYSBpcyBhIHByb2dyYW0gYnVnLgomIzQzO2FyZW5hIGFyZ3VtZW50IHN1cHBvcnQgKGN1cnJlbnRseSB4ODYtNjQgYW5kIGFybTY0KTsgdmVyaWZpY2F0aW9uIGZhaWxzCiYjNDM7b3RoZXJ3aXNlLiBUaGUgcHJvZ3JhbSBjYW4gcGFzcyBhbnkgdmFsdWUgd2l0aG91dCBjb21wcm9taXNpbmcgdGhlIGtlcm5lbC4gQQomIzQzO3ZhbHVlIHRoYXQgZG9lcyBub3QgcG9pbnQgaW50byB0aGUgYXJlbmEgaXMgYSBwcm9ncmFtIGJ1Zy4KIAogVGhlIHN1ZmZpeGVzIGhhdmUgdGhlIHNhbWUgbWVhbmluZyBvbiB0aGUgYXJndW1lbnRzIG9mIHN0cnVjdF9vcHMgc3R1YgogZnVuY3Rpb25zLCB3aXRoIHRoZSBjb252ZXJzaW9uIHJ1bm5pbmcgaW4gdGhlIG9wcG9zaXRlIGRpcmVjdGlvbi4gVGhlCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2luc24uaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vaW5zbi5oCmluZGV4IGNjMDcwMmZhNjRhNzkuLjFjZTc1YTQ0MjYzODcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vaW5zbi5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vaW5zbi5oCkBAIC0yMDUsNiAmIzQzOzIwNSwxOCBAQCBlbnVtIGFhcmNoNjRfaW5zbl9hZHNiX3R5cGUgewogCUFBUkNINjRfSU5TTl9BRFNCX1NVQl9TRVRGTEFHUwogfTsKIAomIzQzOy8qIG9wdGlvbiBmaWVsZCBvZiBhZGQvc3ViIChleHRlbmRlZCByZWdpc3RlcikgKi8KJiM0MztlbnVtIGFhcmNoNjRfaW5zbl9leHRlbmRfdHlwZSB7CiYjNDM7CUFBUkNINjRfSU5TTl9FWFRFTkRfVVhUQiwKJiM0MzsJQUFSQ0g2NF9JTlNOX0VYVEVORF9VWFRILAomIzQzOwlBQVJDSDY0X0lOU05fRVhURU5EX1VYVFcsCiYjNDM7CUFBUkNINjRfSU5TTl9FWFRFTkRfVVhUWCwKJiM0MzsJQUFSQ0g2NF9JTlNOX0VYVEVORF9TWFRCLAomIzQzOwlBQVJDSDY0X0lOU05fRVhURU5EX1NYVEgsCiYjNDM7CUFBUkNINjRfSU5TTl9FWFRFTkRfU1hUVywKJiM0MzsJQUFSQ0g2NF9JTlNOX0VYVEVORF9TWFRYLAomIzQzO307CiYjNDM7CiBlbnVtIGFhcmNoNjRfaW5zbl9tb3Zld2lkZV90eXBlIHsKIAlBQVJDSDY0X0lOU05fTU9WRVdJREVfWkVSTywKIAlBQVJDSDY0X0lOU05fTU9WRVdJREVfS0VFUCwKQEAgLTM3OCw2ICYjNDM7MzkwLDEwIEBAIF9fQUFSQ0g2NF9JTlNOX0ZVTkNTKGFkZCwJMHg3RjIwMDAwMCwgMHgwQjAwMDAwMCkKIF9fQUFSQ0g2NF9JTlNOX0ZVTkNTKGFkZHMsCTB4N0YyMDAwMDAsIDB4MkIwMDAwMDApCiBfX0FBUkNINjRfSU5TTl9GVU5DUyhzdWIsCTB4N0YyMDAwMDAsIDB4NEIwMDAwMDApCiBfX0FBUkNINjRfSU5TTl9GVU5DUyhzdWJzLAkweDdGMjAwMDAwLCAweDZCMDAwMDAwKQomIzQzO19fQUFSQ0g2NF9JTlNOX0ZVTkNTKGFkZF9leHQsCTB4N0ZFMDAwMDAsIDB4MEIyMDAwMDApCiYjNDM7X19BQVJDSDY0X0lOU05fRlVOQ1MoYWRkc19leHQsCTB4N0ZFMDAwMDAsIDB4MkIyMDAwMDApCiYjNDM7X19BQVJDSDY0X0lOU05fRlVOQ1Moc3ViX2V4dCwJMHg3RkUwMDAwMCwgMHg0QjIwMDAwMCkKJiM0MztfX0FBUkNINjRfSU5TTl9GVU5DUyhzdWJzX2V4dCwJMHg3RkUwMDAwMCwgMHg2QjIwMDAwMCkKIF9fQUFSQ0g2NF9JTlNOX0ZVTkNTKG1hZGQsCTB4N0ZFMDgwMDAsIDB4MUIwMDAwMDApCiBfX0FBUkNINjRfSU5TTl9GVU5DUyhtc3ViLAkweDdGRTA4MDAwLCAweDFCMDA4MDAwKQogX19BQVJDSDY0X0lOU05fRlVOQ1ModWRpdiwJMHg3RkUwRkMwMCwgMHgxQUMwMDgwMCkKQEAgLTYzNyw2ICYjNDM7NjUzLDEzIEBAIHUzMiBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfc2hpZnRlZF9yZWcoZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgZHN0LAogCQkJCQkgaW50IHNoaWZ0LAogCQkJCQkgZW51bSBhYXJjaDY0X2luc25fdmFyaWFudCB2YXJpYW50LAogCQkJCQkgZW51bSBhYXJjaDY0X2luc25fYWRzYl90eXBlIHR5cGUpOwomIzQzO3UzMiBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnKGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIGRzdCwKJiM0MzsJCQkJCSAgZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgc3JjLAomIzQzOwkJCQkJICBlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciByZWcsCiYjNDM7CQkJCQkgIGVudW0gYWFyY2g2NF9pbnNuX2V4dGVuZF90eXBlIGV4dGVuZCwKJiM0MzsJCQkJCSAgaW50IHNoaWZ0LAomIzQzOwkJCQkJICBlbnVtIGFhcmNoNjRfaW5zbl92YXJpYW50IHZhcmlhbnQsCiYjNDM7CQkJCQkgIGVudW0gYWFyY2g2NF9pbnNuX2Fkc2JfdHlwZSB0eXBlKTsKIHUzMiBhYXJjaDY0X2luc25fZ2VuX2RhdGExKGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIGRzdCwKIAkJCSAgIGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIHNyYywKIAkJCSAgIGVudW0gYWFyY2g2NF9pbnNuX3ZhcmlhbnQgdmFyaWFudCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbGliL2luc24uYyBiL2FyY2gvYXJtNjQvbGliL2luc24uYwppbmRleCAzN2NlNzVmN2YxZjA4Li5lNzBhYzAyMzg1MTUzIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2xpYi9pbnNuLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9saWIvaW5zbi5jCkBAIC05ODYsNiAmIzQzOzk4Niw2NiBAQCB1MzIgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX3NoaWZ0ZWRfcmVnKGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIGRzdCwKIAlyZXR1cm4gYWFyY2g2NF9pbnNuX2VuY29kZV9pbW1lZGlhdGUoQUFSQ0g2NF9JTlNOX0lNTV82LCBpbnNuLCBzaGlmdCk7CiB9CiAKJiM0MzsvKgomIzQzOyAqIFVubGlrZSB0aGUgc2hpZnRlZC1yZWdpc3RlciBmb3JtLCByZWdpc3RlciAzMSBpcyBub3QgWFpSIGV2ZXJ5d2hlcmUgaGVyZToKJiM0MzsgKiBpdCBlbmNvZGVzIFNQIGZvciBAc3JjLCBhbmQgZm9yIEBkc3QgdG9vIHVubGVzcyBAdHlwZSBzZXRzIHRoZSBmbGFncy4gT25seQomIzQzOyAqIEByZWcga2VlcHMgdGhlIFhaUiBtZWFuaW5nLgomIzQzOyAqLwomIzQzO3UzMiBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnKGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIGRzdCwKJiM0MzsJCQkJCSAgZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgc3JjLAomIzQzOwkJCQkJICBlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciByZWcsCiYjNDM7CQkJCQkgIGVudW0gYWFyY2g2NF9pbnNuX2V4dGVuZF90eXBlIGV4dGVuZCwKJiM0MzsJCQkJCSAgaW50IHNoaWZ0LAomIzQzOwkJCQkJICBlbnVtIGFhcmNoNjRfaW5zbl92YXJpYW50IHZhcmlhbnQsCiYjNDM7CQkJCQkgIGVudW0gYWFyY2g2NF9pbnNuX2Fkc2JfdHlwZSB0eXBlKQomIzQzO3sKJiM0MzsJdTMyIGluc247CiYjNDM7CiYjNDM7CXN3aXRjaCAodHlwZSkgewomIzQzOwljYXNlIEFBUkNINjRfSU5TTl9BRFNCX0FERDoKJiM0MzsJCWluc24gPSBhYXJjaDY0X2luc25fZ2V0X2FkZF9leHRfdmFsdWUoKTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEFBUkNINjRfSU5TTl9BRFNCX1NVQjoKJiM0MzsJCWluc24gPSBhYXJjaDY0X2luc25fZ2V0X3N1Yl9leHRfdmFsdWUoKTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEFBUkNINjRfSU5TTl9BRFNCX0FERF9TRVRGTEFHUzoKJiM0MzsJCWluc24gPSBhYXJjaDY0X2luc25fZ2V0X2FkZHNfZXh0X3ZhbHVlKCk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBBQVJDSDY0X0lOU05fQURTQl9TVUJfU0VURkxBR1M6CiYjNDM7CQlpbnNuID0gYWFyY2g2NF9pbnNuX2dldF9zdWJzX2V4dF92YWx1ZSgpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlwcl9lcnIoJiMzNDslczogdW5rbm93biBhZGQvc3ViIGVuY29kaW5nICVkXG4mIzM0OywgX19mdW5jX18sIHR5cGUpOwomIzQzOwkJcmV0dXJuIEFBUkNINjRfQlJFQUtfRkFVTFQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc3dpdGNoICh2YXJpYW50KSB7CiYjNDM7CWNhc2UgQUFSQ0g2NF9JTlNOX1ZBUklBTlRfMzJCSVQ6CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBBQVJDSDY0X0lOU05fVkFSSUFOVF82NEJJVDoKJiM0MzsJCWluc24gfD0gQUFSQ0g2NF9JTlNOX1NGX0JJVDsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcHJfZXJyKCYjMzQ7JXM6IHVua25vd24gdmFyaWFudCBlbmNvZGluZyAlZFxuJiMzNDssIF9fZnVuY19fLCB2YXJpYW50KTsKJiM0MzsJCXJldHVybiBBQVJDSDY0X0JSRUFLX0ZBVUxUOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChzaGlmdCAmbHQ7IDAgfHwgc2hpZnQgJmd0OyA0KSB7CiYjNDM7CQlwcl9lcnIoJiMzNDslczogaW52YWxpZCBzaGlmdCBlbmNvZGluZyAlZFxuJiMzNDssIF9fZnVuY19fLCBzaGlmdCk7CiYjNDM7CQlyZXR1cm4gQUFSQ0g2NF9CUkVBS19GQVVMVDsKJiM0MzsJfQomIzQzOwomIzQzOwlpbnNuID0gYWFyY2g2NF9pbnNuX2VuY29kZV9yZWdpc3RlcihBQVJDSDY0X0lOU05fUkVHVFlQRV9SRCwgaW5zbiwgZHN0KTsKJiM0MzsKJiM0MzsJaW5zbiA9IGFhcmNoNjRfaW5zbl9lbmNvZGVfcmVnaXN0ZXIoQUFSQ0g2NF9JTlNOX1JFR1RZUEVfUk4sIGluc24sIHNyYyk7CiYjNDM7CiYjNDM7CWluc24gPSBhYXJjaDY0X2luc25fZW5jb2RlX3JlZ2lzdGVyKEFBUkNINjRfSU5TTl9SRUdUWVBFX1JNLCBpbnNuLCByZWcpOwomIzQzOwomIzQzOwkvKiBvcHRpb24gaW4gYml0cyBbMTU6MTNdIGFuZCBpbW0zIGluIFsxMjoxMF0gdG9nZXRoZXIgZmlsbCBJTU1fNiAqLwomIzQzOwlyZXR1cm4gYWFyY2g2NF9pbnNuX2VuY29kZV9pbW1lZGlhdGUoQUFSQ0g2NF9JTlNOX0lNTV82LCBpbnNuLAomIzQzOwkJCQkJICAgICAoZXh0ZW5kICZsdDsmbHQ7IDMpIHwgc2hpZnQpOwomIzQzO30KJiM0MzsKIHUzMiBhYXJjaDY0X2luc25fZ2VuX2RhdGExKGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIGRzdCwKIAkJCSAgIGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIHNyYywKIAkJCSAgIGVudW0gYWFyY2g2NF9pbnNuX3ZhcmlhbnQgdmFyaWFudCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXQuaCBiL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXQuaAppbmRleCBkMTNkZTQyMjJjZmI3Li5iMmZlNmU2ZGNmNDQ3IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L25ldC9icGZfaml0LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9uZXQvYnBmX2ppdC5oCkBAIC0yNDMsNiAmIzQzOzI0MywxNyBAQAogLyogUm4gLSBSbTsgc2V0IGNvbmRpdGlvbiBmbGFncyAqLwogI2RlZmluZSBBNjRfQ01QKHNmLCBSbiwgUm0pIEE2NF9TVUJTKHNmLCBBNjRfWlIsIFJuLCBSbSkKIAomIzQzOy8qIEFkZC9zdWJ0cmFjdCAoZXh0ZW5kZWQgcmVnaXN0ZXIpICovCiYjNDM7I2RlZmluZSBBNjRfQUREU1VCX0VSRUcoc2YsIFJkLCBSbiwgUm0sIGV4dCwgc2hpZnQsIHR5cGUpIFwKJiM0MzsJYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZyhSZCwgUm4sIFJtLCBcCiYjNDM7CQlBQVJDSDY0X0lOU05fRVhURU5EXyMjZXh0LCBzaGlmdCwgQTY0X1ZBUklBTlQoc2YpLCBcCiYjNDM7CQlBQVJDSDY0X0lOU05fQURTQl8jI3R5cGUpCiYjNDM7LyogUmQgPSBSbiAmIzQzOyAoRVhUKFJtKSAmbHQ7Jmx0OyBzaGlmdCkgKi8KJiM0MzsjZGVmaW5lIEE2NF9BRERfRVhUKHNmLCBSZCwgUm4sIFJtLCBleHQsIHNoaWZ0KSBcCiYjNDM7CUE2NF9BRERTVUJfRVJFRyhzZiwgUmQsIFJuLCBSbSwgZXh0LCBzaGlmdCwgQUREKQomIzQzOy8qIFJkID0gUm4gJiM0MzsgKHUzMilSbSAqLwomIzQzOyNkZWZpbmUgQTY0X0FERF9VWFRXKFJkLCBSbiwgUm0pIEE2NF9BRERfRVhUKDEsIFJkLCBSbiwgUm0sIFVYVFcsIDApCiYjNDM7CiAvKiBEYXRhLXByb2Nlc3NpbmcgKDEgc291cmNlKSAqLwogI2RlZmluZSBBNjRfREFUQTEoc2YsIFJkLCBSbiwgdHlwZSkgYWFyY2g2NF9pbnNuX2dlbl9kYXRhMShSZCwgUm4sIFwKIAlBNjRfVkFSSUFOVChzZiksIEFBUkNINjRfSU5TTl9EQVRBMV8jI3R5cGUpCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jCmluZGV4IDc0YjQwODM3OTFkYTMuLmMxOGUwMDVhNDFkYmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jCkBAIC0xMjU2LDYgJiM0MzsxMjU2LDQzIEBAIHN0YXRpYyB2b2lkIGVtaXRfc3RhY2tfYXJnX3N0b3JlX2ltbShzMzIgaW1tLCBzMTYgYnBmX29mZiwgY29uc3QgdTggdG1wLCBzdHJ1Y3QKIAl9CiB9CiAKJiM0MzsvKgomIzQzOyAqIFJlYmFzZSB0aGUgX19hcmVuYSBhcmdzIG9mIGEga2Z1bmMgY2FsbCB0byBhcmVuYSBrZXJuZWwgYWRkcmVzc2VzLAomIzQzOyAqIHhOID0ga2Vybl92bV9zdGFydCAmIzQzOyAodTMyKXhOLCB3aXRoIHRoZSBhcmVuYSBiYXNlIHJlZ2lzdGVyIGhvbGRpbmcKJiM0MzsgKiBrZXJuX3ZtX3N0YXJ0LiBBIG51bGxhYmxlIGFyZyBwcmVzZXJ2ZXMgTlVMTCBieSBza2lwcGluZyB0aGUgYWRkLCB0ZXN0ZWQKJiM0MzsgKiBvbiB0aGUgdHJ1bmNhdGVkIHZhbHVlIGFzIGFyZW5hIE5VTEwgaXMgb2Zmc2V0IDAuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBlbWl0X2tmdW5jX2FyZW5hX2FyZ3Moc3RydWN0IGppdF9jdHggKmN0eCwgY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKQomIzQzO3sKJiM0MzsJY29uc3QgdTggYXJlbmFfdm1fYmFzZSA9IGJwZjJhNjRbQVJFTkFfVk1fU1RBUlRdOwomIzQzOwljb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKmZtOwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJZm0gPSBicGZfaml0X2ZpbmRfa2Z1bmNfbW9kZWwoY3R4LSZndDtwcm9nLCBpbnNuKTsKJiM0MzsJaWYgKCFmbSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbWluX3QoaW50LCBmbS0mZ3Q7bnJfYXJncywgTUFYX0JQRl9GVU5DX1JFR19BUkdTKTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWNvbnN0IHU4IHJlZyA9IGJwZjJhNjRbQlBGX1JFR18xICYjNDM7IGldOwomIzQzOwkJdTggZmxhZ3MgPSBmbS0mZ3Q7YXJnX2ZsYWdzW2ldOwomIzQzOwomIzQzOwkJaWYgKCEoZmxhZ3MgJmFtcDsgQlRGX0ZNT0RFTF9BUkVOQV9BUkcpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJaWYgKFdBUk5fT05fT05DRSghY3R4LSZndDthcmVuYV92bV9zdGFydCkpCiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CQlpZiAoZmxhZ3MgJmFtcDsgQlRGX0ZNT0RFTF9OVUxMQUJMRV9BUkcpIHsKJiM0MzsJCQkvKiAzMi1iaXQgbW92IGNsZWFycyB0aGUgdXBwZXIgMzIgYml0cyAqLwomIzQzOwkJCWVtaXQoQTY0X01PVigwLCByZWcsIHJlZyksIGN0eCk7CiYjNDM7CQkJLyogc2tpcCB0aGUgYWRkIHNvIHRoYXQgTlVMTCBzdGF5cyBOVUxMICovCiYjNDM7CQkJZW1pdChBNjRfQ0JaKDAsIHJlZywgMiksIGN0eCk7CiYjNDM7CQl9CiYjNDM7CQllbWl0KEE2NF9BRERfVVhUVyhyZWcsIGFyZW5hX3ZtX2Jhc2UsIHJlZyksIGN0eCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogLyogSklUcyBhbiBlQlBGIGluc3RydWN0aW9uLgogICogUmV0dXJuczoKICAqIDAgIC0gc3VjY2Vzc2Z1bGx5IEpJVGVkIGFuIDgtYnl0ZSBlQlBGIGluc3RydWN0aW9uLgpAQCAtMTY3OCw2ICYjNDM7MTcxNSwxMSBAQCBzdGF0aWMgaW50IGJ1aWxkX2luc24oY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9pbnNuCiAJCQkJCSAgICAmYW1wO2Z1bmNfYWRkciwgJmFtcDtmdW5jX2FkZHJfZml4ZWQpOwogCQlpZiAocmV0ICZsdDsgMCkKIAkJCXJldHVybiByZXQ7CiYjNDM7CQlpZiAoaW5zbi0mZ3Q7c3JjX3JlZyA9PSBCUEZfUFNFVURPX0tGVU5DX0NBTEwpIHsKJiM0MzsJCQlyZXQgPSBlbWl0X2tmdW5jX2FyZW5hX2FyZ3MoY3R4LCBpbnNuKTsKJiM0MzsJCQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQkJcmV0dXJuIHJldDsKJiM0MzsJCX0KIAkJZW1pdF9jYWxsKGZ1bmNfYWRkciwgY3R4KTsKIAkJLyoKIAkJICogQ2FsbCB0byBhcmNoX2JwZl90aW1lZF9tYXlfZ290bygpIGlzIGVtaXR0ZWQgYnkgdGhlCkBAIC0yMzUxLDYgJiM0MzsyMzkzLDExIEBAIGJvb2wgYnBmX2ppdF9zdXBwb3J0c19zdGFja19hcmdzKHZvaWQpCiAJcmV0dXJuIHRydWU7CiB9CiAKJiM0Mztib29sIGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncyh2b2lkKQomIzQzO3sKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwogdm9pZCAqYnBmX2FyY2hfdGV4dF9jb3B5KHZvaWQgKmRzdCwgdm9pZCAqc3JjLCBzaXplX3QgbGVuKQogewogCWlmICghYWFyY2g2NF9pbnNuX2NvcHkoZHN0LCBzcmMsIGxlbikpCkBAIC0yNTI0LDM0ICYjNDM7MjU3MSw3NiBAQCBzdGF0aWMgdm9pZCBjbGVhcl9nYXJiYWdlKHN0cnVjdCBqaXRfY3R4ICpjdHgsIGludCByZWcsIGludCBlZmZlY3RpdmVfYnl0ZXMpCiAJfQogfQogCiYjNDM7LyoKJiM0MzsgKiBDb252ZXJ0IGFuIGFyZW5hIGtlcm5lbCBhZGRyZXNzIGludG8gdGhlIGFyZW5hIHBvaW50ZXIgZm9ybSBvbiBpdHMgd2F5IGludG8KJiM0MzsgKiB0aGUgQlBGIGN0eCwgZHN0ID0gKHUzMikoc3JjIC0ga2Vybl92bV9zdGFydCksIHdpdGggQGJhc2VfbG8gaG9sZGluZyB0aGUgbG93CiYjNDM7ICogMzIgYml0cyBvZiBrZXJuX3ZtX3N0YXJ0LiBBIG51bGxhYmxlIGFyZyBwcmVzZXJ2ZXMgTlVMTCwgdGVzdGVkIG9uIHRoZSBmdWxsCiYjNDM7ICogNjQtYml0IGtlcm5lbCBwb2ludGVyLiBUaGUgMzItYml0IHN1YnRyYWN0aW9uIGJvdGggdHJ1bmNhdGVzIGFuZCBjbGVhcnMgdGhlCiYjNDM7ICogdXBwZXIgaGFsZiwgc28gdGhlIHN0b3JlZCB2YWx1ZSBzYXRpc2ZpZXMgdGhlIEpJVCBpbnZhcmlhbnQgZm9yIGFyZW5hCiYjNDM7ICogcG9pbnRlciByZWdpc3RlcnMuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgZW1pdF9hcmVuYV9hcmdfY29udihzdHJ1Y3Qgaml0X2N0eCAqY3R4LCB1OCBkc3QsIHU4IHNyYywgYm9vbCBudWxsYWJsZSwgdTggYmFzZV9sbykKJiM0Mzt7CiYjNDM7CWlmIChudWxsYWJsZSkgewomIzQzOwkJaWYgKGRzdCAhPSBzcmMpCiYjNDM7CQkJZW1pdChBNjRfTU9WKDEsIGRzdCwgc3JjKSwgY3R4KTsKJiM0MzsJCS8qIHNraXAgdGhlIHN1YnRyYWN0aW9uIHNvIHRoYXQgTlVMTCBzdGF5cyBOVUxMICovCiYjNDM7CQllbWl0KEE2NF9DQlooMSwgZHN0LCAyKSwgY3R4KTsKJiM0MzsJCXNyYyA9IGRzdDsKJiM0MzsJfQomIzQzOwllbWl0KEE2NF9TVUIoMCwgZHN0LCBzcmMsIGJhc2VfbG8pLCBjdHgpOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHNhdmVfYXJncyhzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBpbnQgYmFyZ3Nfb2ZmLCBpbnQgb2FyZ3Nfb2ZmLAotCQkgICAgICBjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sCi0JCSAgICAgIGNvbnN0IHN0cnVjdCBhcmdfYXV4ICphLAotCQkgICAgICBib29sIGZvcl9jYWxsX29yaWdpbikKJiM0MzsJCSAgICAgIGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgY29uc3Qgc3RydWN0IGFyZ19hdXggKmEsCiYjNDM7CQkgICAgICBib29sIGZvcl9jYWxsX29yaWdpbiwgYm9vbCBpc19zdHJ1Y3Rfb3BzLCB1NjQgYXJlbmFfYmFzZSkKIHsKLQlpbnQgaTsKLQlpbnQgcmVnOwotCWludCBkb2ZmOwotCWludCBzb2ZmOwotCWludCBzbG90czsKIAl1OCB0bXAgPSBicGYyYTY0W1RNUF9SRUdfMV07CiYjNDM7CXU4IGJhc2VfbG8gPSBicGYyYTY0W1RNUF9SRUdfMl07CiYjNDM7CWludCBpLCByZWcsIGRvZmYsIHNvZmYsIHNsb3RzOwomIzQzOwomIzQzOwkvKiBvbmx5IHRoZSBsb3cgMzIgYml0cyBvZiB0aGUgYmFzZSB0YWtlIHBhcnQgaW4gdGhlIHN1YnRyYWN0aW9uICovCiYjNDM7CWlmIChhcmVuYV9iYXNlKQomIzQzOwkJZW1pdF9hNjRfbW92X2koMCwgYmFzZV9sbywgKHMzMikodTMyKWFyZW5hX2Jhc2UsIGN0eCk7CiAKIAkvKiBzdG9yZSBhcmd1bWVudHMgdG8gdGhlIHN0YWNrIGZvciB0aGUgYnBmIHByb2dyYW0sIG9yIHJlc3RvcmUKIAkgKiBhcmd1bWVudHMgZnJvbSBzdGFjayBmb3IgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uCiAJICovCi0JZm9yIChyZWcgPSAwOyByZWcgJmx0OyBhLSZndDtyZWdzX2Zvcl9hcmdzOyByZWcmIzQzOyYjNDM7KSB7Ci0JCWVtaXQoZm9yX2NhbGxfb3JpZ2luID8KLQkJICAgICBBNjRfTERSNjRJKHJlZywgQTY0X1NQLCBiYXJnc19vZmYpIDoKLQkJICAgICBBNjRfU1RSNjRJKHJlZywgQTY0X1NQLCBiYXJnc19vZmYpLAotCQkgICAgIGN0eCk7Ci0JCWJhcmdzX29mZiAmIzQzOz0gODsKJiM0MzsJZm9yIChpID0gMCwgcmVnID0gMDsgaSAmbHQ7IGEtJmd0O2FyZ3NfaW5fcmVnczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWJvb2wgYXJlbmFfYXJnID0gYXJlbmFfYmFzZSAmYW1wOyZhbXA7IChtLSZndDthcmdfZmxhZ3NbaV0gJmFtcDsgQlRGX0ZNT0RFTF9BUkVOQV9BUkcpOwomIzQzOwkJYm9vbCBudWxsYWJsZSA9IG0tJmd0O2FyZ19mbGFnc1tpXSAmYW1wOyBCVEZfRk1PREVMX05VTExBQkxFX0FSRzsKJiM0MzsKJiM0MzsJCXNsb3RzID0gKG0tJmd0O2FyZ19zaXplW2ldICYjNDM7IDcpIC8gODsKJiM0MzsJCXdoaWxlIChzbG90cy0tICZndDsgMCkgewomIzQzOwkJCWlmIChmb3JfY2FsbF9vcmlnaW4pIHsKJiM0MzsJCQkJZW1pdChBNjRfTERSNjRJKHJlZywgQTY0X1NQLCBiYXJnc19vZmYpLCBjdHgpOwomIzQzOwkJCX0gZWxzZSBpZiAoYXJlbmFfYXJnKSB7CiYjNDM7CQkJCWVtaXRfYXJlbmFfYXJnX2NvbnYoY3R4LCB0bXAsIHJlZywgbnVsbGFibGUsIGJhc2VfbG8pOwomIzQzOwkJCQllbWl0KEE2NF9TVFI2NEkodG1wLCBBNjRfU1AsIGJhcmdzX29mZiksIGN0eCk7CiYjNDM7CQkJfSBlbHNlIHsKJiM0MzsJCQkJZW1pdChBNjRfU1RSNjRJKHJlZywgQTY0X1NQLCBiYXJnc19vZmYpLCBjdHgpOwomIzQzOwkJCX0KJiM0MzsJCQlyZWcmIzQzOyYjNDM7OwomIzQzOwkJCWJhcmdzX29mZiAmIzQzOz0gODsKJiM0MzsJCX0KIAl9CiAKLQlzb2ZmID0gMzI7IC8qIG9uIHN0YWNrIGFyZ3VtZW50cyBzdGFydCBmcm9tIEZQICYjNDM7IDMyICovCiYjNDM7CS8qCiYjNDM7CSAqIE9uLXN0YWNrIGFyZ3VtZW50cyBzdGFydCBhYm92ZSB0aGUgZnJhbWUocykgcHVzaGVkIGJ5IHRoZSB0cmFtcG9saW5lCiYjNDM7CSAqIHByb2xvZ3VlLiBFbnRlcmVkIHRocm91Z2ggdGhlIGZlbnRyeSBjYWxsIGZyb20gYSB0cmFjZWQgZnVuY3Rpb24sIHRoZQomIzQzOwkgKiBwcm9sb2d1ZSBzYXZlcyBib3RoIHRoZSBwYXJlbnQgKEZQL3g5KSBhbmQgdGhlIHRyYWNlZCBmdW5jdGlvbgomIzQzOwkgKiAoRlAvTFIpIGZyYW1lcywgc28gdGhlIGFyZ3VtZW50cyBzdGFydCBhdCBGUCAmIzQzOyAzMi4gQSBzdHJ1Y3Rfb3BzCiYjNDM7CSAqIGNhbGxiYWNrIGlzIGNhbGxlZCBpbmRpcmVjdGx5IGFuZCBvbmx5IHRoZSBGUC9MUiBmcmFtZSBpcyBzYXZlZCwgc28KJiM0MzsJICogdGhleSBzdGFydCBhdCBGUCAmIzQzOyAxNi4KJiM0MzsJICovCiYjNDM7CXNvZmYgPSBpc19zdHJ1Y3Rfb3BzID8gMTYgOiAzMjsKIAlkb2ZmID0gKGZvcl9jYWxsX29yaWdpbiA/IG9hcmdzX29mZiA6IGJhcmdzX29mZik7CiAKIAkvKiBzYXZlIG9uIHN0YWNrIGFyZ3VtZW50cyAqLwogCWZvciAoaSA9IGEtJmd0O2FyZ3NfaW5fcmVnczsgaSAmbHQ7IG0tJmd0O25yX2FyZ3M7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlib29sIGFyZW5hX2FyZyA9IGFyZW5hX2Jhc2UgJmFtcDsmYW1wOyAobS0mZ3Q7YXJnX2ZsYWdzW2ldICZhbXA7IEJURl9GTU9ERUxfQVJFTkFfQVJHKTsKJiM0MzsJCWJvb2wgbnVsbGFibGUgPSBtLSZndDthcmdfZmxhZ3NbaV0gJmFtcDsgQlRGX0ZNT0RFTF9OVUxMQUJMRV9BUkc7CiYjNDM7CiAJCXNsb3RzID0gKG0tJmd0O2FyZ19zaXplW2ldICYjNDM7IDcpIC8gODsKIAkJLyogdmVyaWZpZXIgZW5zdXJlcyBhcmdfc2l6ZSAmbHQ7PSAxNiwgc28gc2xvdHMgZXF1YWxzIDEgb3IgMiAqLwogCQl3aGlsZSAoc2xvdHMtLSAmZ3Q7IDApIHsKQEAgLTI1NjEsNiAmIzQzOzI2NTAsMTUgQEAgc3RhdGljIHZvaWQgc2F2ZV9hcmdzKHN0cnVjdCBqaXRfY3R4ICpjdHgsIGludCBiYXJnc19vZmYsIGludCBvYXJnc19vZmYsCiAJCQkgKi8KIAkJCWlmIChzbG90cyA9PSAwICZhbXA7JmFtcDsgIWZvcl9jYWxsX29yaWdpbikKIAkJCQljbGVhcl9nYXJiYWdlKGN0eCwgdG1wLCBtLSZndDthcmdfc2l6ZVtpXSAlIDgpOwomIzQzOwkJCS8qCiYjNDM7CQkJICogTm8gZ3VhcmQgb24gZm9yX2NhbGxfb3JpZ2luIGhlcmU6IG9ubHkgdGhlIGluZGlyZWN0CiYjNDM7CQkJICogdHJhbXBvbGluZSBpcyBnaXZlbiBhIGJhc2UsIGFuZCBpdCBuZXZlciBjYWxscyB0aGUKJiM0MzsJCQkgKiBvcmlnaW5hbCBmdW5jdGlvbiwgc28gYXJndW1lbnRzIGFyZSBuZXZlciBjb252ZXJ0ZWQKJiM0MzsJCQkgKiBvbiB0aGVpciB3YXkgYmFjayBvdXQgdG8gaXQuIFNlZSB0aGUgV0FSTl9PTl9PTkNFKCkKJiM0MzsJCQkgKiBpbiBwcmVwYXJlX3RyYW1wb2xpbmUoKS4KJiM0MzsJCQkgKi8KJiM0MzsJCQlpZiAoYXJlbmFfYXJnKQomIzQzOwkJCQllbWl0X2FyZW5hX2FyZ19jb252KGN0eCwgdG1wLCB0bXAsIG51bGxhYmxlLCBiYXNlX2xvKTsKIAkJCWVtaXQoQTY0X1NUUjY0SSh0bXAsIEE2NF9TUCwgZG9mZiksIGN0eCk7CiAJCQlzb2ZmICYjNDM7PSA4OwogCQkJZG9mZiAmIzQzOz0gODsKQEAgLTI2MjAsOCAmIzQzOzI3MTgsMjEgQEAgc3RhdGljIGludCBwcmVwYXJlX3RyYW1wb2xpbmUoc3RydWN0IGppdF9jdHggKmN0eCwgc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sCiAJYm9vbCBpc19zdHJ1Y3Rfb3BzID0gaXNfc3RydWN0X29wc190cmFtcChmZW50cnkpOwogCWludCBjb29raWVfb2ZmLCBjb29raWVfY250LCBjb29raWVfYmFyZ3Nfb2ZmOwogCWludCBmc2Vzc2lvbl9jbnQgPSBicGZfZnNlc3Npb25fY250KHRub2Rlcyk7CiYjNDM7CXU2NCBhcmVuYV9iYXNlOwogCXU2NCBmdW5jX21ldGE7CiAKJiM0MzsJLyoKJiM0MzsJICogRl9JTkRJUkVDVCBpcyBvbmx5IGNvbXBhdGlibGUgd2l0aCBGX1JFVF9GRU5UUllfUkVULCBpdCBpcyBleHBsaWNpdGx5CiYjNDM7CSAqIGluY29tcGF0aWJsZSB3aXRoIEZfQ0FMTF9PUklHIHwgRl9TS0lQX0ZSQU1FIHwgRl9JUF9BUkcgYmVjYXVzZQomIzQzOwkgKiBAZnVuY19hZGRyLiBBcmVuYSBjb252ZXJzaW9uIHJlbGllcyBvbiB0aGlzOiBicGZfdHJhbXBfYXJlbmFfYmFzZSgpCiYjNDM7CSAqIG9ubHkgcmV0dXJucyBhIGJhc2UgZm9yIHRoZSBpbmRpcmVjdCB0cmFtcG9saW5lLCB3aGljaCB0aGVyZWZvcmUKJiM0MzsJICogbmV2ZXIgY2FsbHMgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uIHdpdGggY29udmVydGVkIGFyZ3VtZW50cy4KJiM0MzsJICovCiYjNDM7CVdBUk5fT05fT05DRSgoZmxhZ3MgJmFtcDsgQlBGX1RSQU1QX0ZfSU5ESVJFQ1QpICZhbXA7JmFtcDsKJiM0MzsJCSAgICAgKGZsYWdzICZhbXA7IH4oQlBGX1RSQU1QX0ZfSU5ESVJFQ1QgfCBCUEZfVFJBTVBfRl9SRVRfRkVOVFJZX1JFVCkpKTsKJiM0MzsKJiM0MzsJYXJlbmFfYmFzZSA9IGJwZl90cmFtcF9hcmVuYV9iYXNlKG0sIHRub2RlcywgZmxhZ3MpOwomIzQzOwogCS8qIHRyYW1wb2xpbmUgc3RhY2sgbGF5b3V0OgogCSAqICAgICAgICAgICAgICAgICAgICBbIHBhcmVudCBpcCAgICAgICAgIF0KIAkgKiAgICAgICAgICAgICAgICAgICAgWyBGUCAgICAgICAgICAgICAgICBdCkBAIC0yNzM3LDcgJiM0MzsyODQ4LDcgQEAgc3RhdGljIGludCBwcmVwYXJlX3RyYW1wb2xpbmUoc3RydWN0IGppdF9jdHggKmN0eCwgc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sCiAJc3RvcmVfZnVuY19tZXRhKGN0eCwgZnVuY19tZXRhLCBmdW5jX21ldGFfb2ZmKTsKIAogCS8qIHNhdmUgYXJncyBmb3IgYnBmICovCi0Jc2F2ZV9hcmdzKGN0eCwgYmFyZ3Nfb2ZmLCBvYXJnc19vZmYsIG0sIGEsIGZhbHNlKTsKJiM0MzsJc2F2ZV9hcmdzKGN0eCwgYmFyZ3Nfb2ZmLCBvYXJnc19vZmYsIG0sIGEsIGZhbHNlLCBpc19zdHJ1Y3Rfb3BzLCBhcmVuYV9iYXNlKTsKIAogCS8qIHNhdmUgY2FsbGVlIHNhdmVkIHJlZ2lzdGVycyAqLwogCWVtaXQoQTY0X1NUUjY0SShBNjRfUigxOSksIEE2NF9TUCwgcmVnc19vZmYpLCBjdHgpOwpAQCAtMjc4NSw4ICYjNDM7Mjg5Niw4IEBAIHN0YXRpYyBpbnQgcHJlcGFyZV90cmFtcG9saW5lKHN0cnVjdCBqaXRfY3R4ICpjdHgsIHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLAogCX0KIAogCWlmIChmbGFncyAmYW1wOyBCUEZfVFJBTVBfRl9DQUxMX09SSUcpIHsKLQkJLyogc2F2ZSBhcmdzIGZvciBvcmlnaW5hbCBmdW5jICovCi0JCXNhdmVfYXJncyhjdHgsIGJhcmdzX29mZiwgb2FyZ3Nfb2ZmLCBtLCBhLCB0cnVlKTsKJiM0MzsJCS8qIHRoZSBvcmlnaW5hbCBmdW5jIHRha2VzIGtlcm5lbCBhZGRyZXNzZXMsIG5ldmVyIGNvbnZlcnRlZCBvbmVzICovCiYjNDM7CQlzYXZlX2FyZ3MoY3R4LCBiYXJnc19vZmYsIG9hcmdzX29mZiwgbSwgYSwgdHJ1ZSwgaXNfc3RydWN0X29wcywgMCk7CiAJCS8qIGNhbGwgb3JpZ2luYWwgZnVuYyAqLwogCQllbWl0KEE2NF9MRFI2NEkoQTY0X1IoMTApLCBBNjRfU1AsIHJldGFkZHJfb2ZmKSwgY3R4KTsKIAkJZW1pdChBNjRfQURSKEE2NF9MUiwgQUFSQ0g2NF9JTlNOX1NJWkUgKiAyKSwgY3R4KTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3Rfc3RydWN0X29wc19hcmVuYS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9zdHJ1Y3Rfb3BzX2FyZW5hLmMKaW5kZXggOTQwZWMyY2RhMGQ1Mi4uN2Y5ZjU0YmEzZmJlNSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9zdHJ1Y3Rfb3BzX2FyZW5hLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9zdHJ1Y3Rfb3BzX2FyZW5hLmMKQEAgLTYsNyAmIzQzOzYsNyBAQAogI2luY2x1ZGUgJiMzNDtzdHJ1Y3Rfb3BzX2FyZW5hX2F0dGFjaC5za2VsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtzdHJ1Y3Rfb3BzX2FyZW5hX2ZhaWwuc2tlbC5oJiMzNDsKIAotI2lmIGRlZmluZWQoX194ODZfNjRfXykKJiM0MzsjaWYgZGVmaW5lZChfX3g4Nl82NF9fKSB8fCBkZWZpbmVkKF9fYWFyY2g2NF9fKQogLyoKICAqIEF0dGFjaCBjYWxsYmFja3Mgd2l0aCBfX2FyZW5hIGFuZCBfX2FyZW5hX19udWxsYWJsZSBhcmd1bWVudHMgYW5kIGRyaXZlCiAgKiB0aGVtIHRocm91Z2ggdGhlIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hKigpIGtmdW5jcy4KQEAgLTExMSwxMSAmIzQzOzExMSwxMSBAQCBzdGF0aWMgdm9pZCBhcmVuYV9hcmdfYXR0YWNoKHZvaWQpCiB2b2lkIHNlcmlhbF90ZXN0X3N0cnVjdF9vcHNfYXJlbmEodm9pZCkKIHsKIAkvKgotCSAqIEFyZW5hIHN0cnVjdF9vcHMgYXJndW1lbnRzIG5lZWQgSklUIHN1cHBvcnQsIGN1cnJlbnRseSB4ODYtNjQgb25seS4KLQkgKiBFbHNld2hlcmUgdmVyaWZpY2F0aW9uIGZhaWxzIHdpdGggJiMzNDtKSVQgZG9lcyBub3Qgc3VwcG9ydCBhcmVuYQotCSAqIGFyZ3VtZW50cyYjMzQ7LCBzbyB0aGUgcHJvZ3JhbXMgY2Fubm90IGV2ZW4gbG9hZC4KJiM0MzsJICogQXJlbmEgc3RydWN0X29wcyBhcmd1bWVudHMgbmVlZCBKSVQgc3VwcG9ydCwgY3VycmVudGx5IHg4Ni02NCBhbmQKJiM0MzsJICogYXJtNjQgb25seS4gRWxzZXdoZXJlIHZlcmlmaWNhdGlvbiBmYWlscyB3aXRoICYjMzQ7SklUIGRvZXMgbm90IHN1cHBvcnQKJiM0MzsJICogYXJlbmEgYXJndW1lbnRzJiMzNDssIHNvIHRoZSBwcm9ncmFtcyBjYW5ub3QgZXZlbiBsb2FkLgogCSAqLwotI2lmIGRlZmluZWQoX194ODZfNjRfXykKJiM0MzsjaWYgZGVmaW5lZChfX3g4Nl82NF9fKSB8fCBkZWZpbmVkKF9fYWFyY2g2NF9fKQogCWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7YXJlbmFfYXJnJiMzNDspKQogCQlhcmVuYV9hcmcoKTsKIAlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O2FyZW5hX2FyZ19mYWlsJiMzNDspKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmMuYwppbmRleCBjZGNlYTg4OWRhNTg2Li5iZjBkMzA0ZTBlNTljIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmMuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmMuYwpAQCAtMjcsNiAmIzQzOzI3LDcgQEAgdm9sYXRpbGUgdTY0IHN0YXNoOwogCiBTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiBfX2FyY2hfeDg2XzY0CiYjNDM7X19hcmNoX2FybTY0CiBfX3N1Y2Nlc3MgX19yZXR2YWwoMCkKIGludCBhcmVuYV9hcmdfZm9ybXModm9pZCAqY3R4KQogewpAQCAtNzAsNiAmIzQzOzcxLDcgQEAgaW50IGFyZW5hX2FyZ19mb3Jtcyh2b2lkICpjdHgpCiAgKi8KIFNFQygmIzM0O3N5c2NhbGwmIzM0OykKIF9fYXJjaF94ODZfNjQKJiM0MztfX2FyY2hfYXJtNjQKIF9fc3VjY2VzcyBfX3JldHZhbCgwKQogaW50IGFyZW5hX2FyZ19yZWJhc2Uodm9pZCAqY3R4KQogewpAQCAtMTExLDYgJiM0MzsxMTMsNyBAQCBpbnQgYXJlbmFfYXJnX3JlYmFzZSh2b2lkICpjdHgpCiAKIFNFQygmIzM0O3N5c2NhbGwmIzM0OykKIF9fYXJjaF94ODZfNjQKJiM0MztfX2FyY2hfYXJtNjQKIF9fc3VjY2VzcyBfX3JldHZhbCgwKQogaW50IGFyZW5hX2FyZ3M1KHZvaWQgKmN0eCkKIHsKQEAgLTE0Miw2ICYjNDM7MTQ1LDcgQEAgaW50IGFyZW5hX2FyZ3M1KHZvaWQgKmN0eCkKIAogU0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQogX19hcmNoX3g4Nl82NAomIzQzO19fYXJjaF9hcm02NAogX19zdWNjZXNzIF9fcmV0dmFsKDApCiBpbnQgYXJlbmFfYXJnX21peGVkKHZvaWQgKmN0eCkKIHsKQEAgLTE2OSw2ICYjNDM7MTczLDcgQEAgaW50IGFyZW5hX2FyZ19taXhlZCh2b2lkICpjdHgpCiAvKiBrZXJuZWwtc2lkZSBmYXVsdHMgb24gdW5wb3B1bGF0ZWQgcGFnZXMgcmVjb3ZlciB2aWEgdGhlIHNjcmF0Y2ggcGFnZSAqLwogU0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQogX19hcmNoX3g4Nl82NAomIzQzO19fYXJjaF9hcm02NAogX19zdWNjZXNzIF9fcmV0dmFsKDApCiBpbnQgYXJlbmFfYXJnX3VucG9wdWxhdGVkKHZvaWQgKmN0eCkKIHsKQEAgLTE4OSw2ICYjNDM7MTk0LDcgQEAgaW50IGFyZW5hX2FyZ191bnBvcHVsYXRlZCh2b2lkICpjdHgpCiAKIFNFQygmIzM0O3N5c2NhbGwmIzM0OykKIF9fYXJjaF94ODZfNjQKJiM0MztfX2FyY2hfYXJtNjQKIF9fZmFpbHVyZSBfX21zZygmIzM0O2FyZW5hIHBvaW50ZXIgcmVxdWlyZXMgYSBwcm9ncmFtIHdpdGggYW4gYXNzb2NpYXRlZCBhcmVuYSYjMzQ7KQogaW50IGFyZW5hX2FyZ19ub19hcmVuYSh2b2lkICpjdHgpCiB7CkBAIC0xOTgsNiAmIzQzOzIwNCw3IEBAIGludCBhcmVuYV9hcmdfbm9fYXJlbmEodm9pZCAqY3R4KQogCiBTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiBfX2FyY2hfeDg2XzY0CiYjNDM7X19hcmNoX2FybTY0CiBfX2ZhaWx1cmUgX19tc2coJiMzNDtpcyBub3QgYSBwb2ludGVyIHRvIGFyZW5hIG9yIHNjYWxhciYjMzQ7KQogaW50IGFyZW5hX2FyZ19iYWRfcmVnKHZvaWQgKmN0eCkKIHsKQEAgLTIxMyw2ICYjNDM7MjIwLDcgQEAgaW50IGFyZW5hX2FyZ19iYWRfcmVnKHZvaWQgKmN0eCkKIAlkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfU1RBQ0tfQVJHVU1FTlQpCiBTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiBfX2FyY2hfeDg2XzY0CiYjNDM7X19hcmNoX2FybTY0CiBfX2ZhaWx1cmUgX19tc2coJiMzNDthcmVuYSBwb2ludGVyIGNhbm5vdCBiZSBhIHN0YWNrIGFyZ3VtZW50JiMzNDspCiBpbnQgYXJlbmFfYXJnX3N0YWNrKHZvaWQgKmN0eCkKIHsKQEAgLTIyMyw2ICYjNDM7MjMxLDcgQEAgaW50IGFyZW5hX2FyZ19zdGFjayh2b2lkICpjdHgpCiAjZWxzZQogU0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQogX19hcmNoX3g4Nl82NAomIzQzO19fYXJjaF9hcm02NAogX19kZXNjcmlwdGlvbigmIzM0O2FyZW5hX2FyZ19zdGFjazogbm90IHN1cHBvcnRlZCwgZHVtbXkgdGVzdCYjMzQ7KQogX19zdWNjZXNzCiBpbnQgYXJlbmFfYXJnX3N0YWNrKHZvaWQgKmN0eCkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuY19qaXQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuY19qaXQuYwppbmRleCBjOWI5MTg2NjI2MTYyLi5iNWEwMWNiYzMzYTczIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmNfaml0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jX2ppdC5jCkBAIC0zMiw2ICYjNDM7MzIsMTAgQEAgX19qaXRlZCgmIzM0Owltb3ZsCSVlZGksICVlZGkmIzM0OykKIF9faml0ZWQoJiMzNDsJYWRkcQklcjEyLCAlcmRpJiMzNDspCiBfX2ppdGVkKCYjMzQ7Li4uJiMzNDspCiBfX2ppdGVkKCYjMzQ7CWNhbGxxCXt7Lip9fSYjMzQ7KQomIzQzO19fYXJjaF9hcm02NAomIzQzO19faml0ZWQoJiMzNDsuLi4mIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWFkZAl4MCwgeDI4LCB3MCwgdXh0dyYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJe3soYmx8bW92KQkuKn19JiMzNDspCiBfX3N1Y2Nlc3MKIGludCBhcmVuYV9hcmdfaml0X3JlYmFzZSh2b2lkICpjdHgpCiB7CkBAIC00OCw2ICYjNDM7NTIsMTIgQEAgX19qaXRlZCgmIzM0Owl0ZXN0bAklZWRpLCAlZWRpJiMzNDspCiBfX2ppdGVkKCYjMzQ7CWplCUwwJiMzNDspCiBfX2ppdGVkKCYjMzQ7CWFkZHEJJXIxMiwgJXJkaSYjMzQ7KQogX19qaXRlZCgmIzM0O0wwOgljYWxscQl7ey4qfX0mIzM0OykKJiM0MztfX2FyY2hfYXJtNjQKJiM0MztfX2ppdGVkKCYjMzQ7Li4uJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0Owltb3YJdzAsIHcwJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwljYnoJdzAsIEwwJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlhZGQJeDAsIHgyOCwgdzAsIHV4dHcmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7TDA6CXt7Lip9fSYjMzQ7KQogX19zdWNjZXNzCiBpbnQgYXJlbmFfYXJnX2ppdF9udWxsYWJsZSh2b2lkICpjdHgpCiB7CkBAIC03Miw2ICYjNDM7ODIsMTYgQEAgX19qaXRlZCgmIzM0Owl0ZXN0bAklcjhkLCAlcjhkJiMzNDspCiBfX2ppdGVkKCYjMzQ7CWplCUwwJiMzNDspCiBfX2ppdGVkKCYjMzQ7CWFkZHEJJXIxMiwgJXI4JiMzNDspCiBfX2ppdGVkKCYjMzQ7TDA6CWNhbGxxCXt7Lip9fSYjMzQ7KQomIzQzO19fYXJjaF9hcm02NAomIzQzO19faml0ZWQoJiMzNDsuLi4mIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWFkZAl4MCwgeDI4LCB3MCwgdXh0dyYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJYWRkCXgxLCB4MjgsIHcxLCB1eHR3JiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlhZGQJeDIsIHgyOCwgdzIsIHV4dHcmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWFkZAl4MywgeDI4LCB3MywgdXh0dyYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJbW92CXc0LCB3NCYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJY2J6CXc0LCBMMCYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJYWRkCXg0LCB4MjgsIHc0LCB1eHR3JiMzNDspCiYjNDM7X19qaXRlZCgmIzM0O0wwOgl7ey4qfX0mIzM0OykKIF9fc3VjY2VzcwogaW50IGFyZW5hX2FyZ19qaXRfYXJnczUodm9pZCAqY3R4KQogewpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfYXJlbmEuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJ1Y3Rfb3BzX2FyZW5hLmMKaW5kZXggYmEwNGM3M2Q4ZDk2Ny4uOGFhODYzOWRmOTFmMCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfYXJlbmEuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RydWN0X29wc19hcmVuYS5jCkBAIC01OSwxMSAmIzQzOzU5LDI4IEBAIGludCB0ZXN0X2FyZW5hX3N0YWNrX2NiKHVuc2lnbmVkIGxvbmcgbG9uZyAqY3R4KQogCXJldHVybiAwOwogfQogCiYjNDM7U0VDKCYjMzQ7c3RydWN0X29wcy90ZXN0X2FyZW5hX211bHRpc2xvdCYjMzQ7KQomIzQzO2ludCB0ZXN0X2FyZW5hX211bHRpc2xvdF9jYih1bnNpZ25lZCBsb25nIGxvbmcgKmN0eCkKJiM0Mzt7CiYjNDM7CXU2NCBfX2FyZW5hICpwdHIgPSAodTY0IF9fYXJlbmEgKiljdHhbMl07CiYjNDM7CiYjNDM7CWFyZW5hX3RvdWNoJiM0MzsmIzQzOzsKJiM0MzsJLyoKJiM0MzsJICogVGhlIDE2LWJ5dGUgc3RydWN0IG9jY3VwaWVzIGN0eFswXSBhbmQgY3R4WzFdLCBzbyBAcHRyIGlzIGFyZ3VtZW50CiYjNDM7CSAqIG9uZSBidXQgc2xvdCB0d28uIEdldHRpbmcgdGhhdCB3cm9uZyBoYW5kcyB0aGUgY2FsbGJhY2sgYSBzY2FsYXIuCiYjNDM7CSAqLwomIzQzOwlpZiAoY3R4WzBdICE9IDExIHx8IGN0eFsxXSAhPSAyMikKJiM0MzsJCXJldHVybiAweGJhZDsKJiM0MzsJKnB0ciAmIzQzOz0gMTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogU0VDKCYjMzQ7LnN0cnVjdF9vcHMubGluayYjMzQ7KQogc3RydWN0IGJwZl90ZXN0bW9kX29wczMgdGVzdG1vZF9hcmVuYSA9IHsKIAkudGVzdF9hcmVuYSA9ICh2b2lkICopdGVzdF9hcmVuYV9jYiwKIAkudGVzdF9hcmVuYV9udWxsYWJsZSA9ICh2b2lkICopdGVzdF9hcmVuYV9udWxsYWJsZV9jYiwKIAkudGVzdF9hcmVuYV9zdGFjayA9ICh2b2lkICopdGVzdF9hcmVuYV9zdGFja19jYiwKJiM0MzsJLnRlc3RfYXJlbmFfbXVsdGlzbG90ID0gKHZvaWQgKil0ZXN0X2FyZW5hX211bHRpc2xvdF9jYiwKIH07CiAKIFNFQygmIzM0O3N5c2NhbGwmIzM0OykKQEAgLTEwOSw2ICYjNDM7MTI2LDEzIEBAIGludCB0cmlnZ2VyKHZvaWQgKmN0eCkKIAlpZiAoKnZhbCAhPSA0NCkKIAkJcmV0dXJuIDk7CiAKJiM0MzsJLyogYSBtdWx0aS1zbG90IGFyZyBwcmVjZWRlcyB0aGUgYXJlbmEgcG9pbnRlciBoZXJlICovCiYjNDM7CXJldCA9IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX211bHRpc2xvdCgodTY0ICopdmFsKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiAxMDsKJiM0MzsJaWYgKCp2YWwgIT0gNDUpCiYjNDM7CQlyZXR1cm4gMTE7CiYjNDM7CiAJYnBmX2FyZW5hX2ZyZWVfcGFnZXMoJmFtcDthcmVuYSwgKHZvaWQgX19hcmVuYSAqKXZhbCwgMSk7CiAjZW5kaWYKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jCmluZGV4IGE2MTMzZjc1MjFmMzQuLjkzNjZhM2M1NzhmMTMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYwpAQCAtNDAyLDEyICYjNDM7NDAyLDE5IEBAIHN0YXRpYyBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19fdGVzdF9hcmVuYV9zdGFjayh1NjQgYSwgdTY0IGIsIHU2NCBjLCB1NjQgZCwKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19fdGVzdF9hcmVuYV9tdWx0aXNsb3Qoc3RydWN0IGJwZl90ZXN0bW9kX2FyZW5hX3BhaXIgcCwKJiM0MzsJCQkJCQkgIHU2NCAqcHRyX19hcmVuYSkKJiM0Mzt7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzMyBfX2JwZl90ZXN0bW9kX29wczMgPSB7CiAJLnRlc3RfMSA9IGJwZl90ZXN0bW9kX3Rlc3RfMywKIAkudGVzdF8yID0gYnBmX3Rlc3Rtb2RfdGVzdF80LAogCS50ZXN0X2FyZW5hID0gYnBmX3Rlc3Rtb2Rfb3BzM19fdGVzdF9hcmVuYSwKIAkudGVzdF9hcmVuYV9udWxsYWJsZSA9IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmFfbnVsbGFibGUsCiAJLnRlc3RfYXJlbmFfc3RhY2sgPSBicGZfdGVzdG1vZF9vcHMzX190ZXN0X2FyZW5hX3N0YWNrLAomIzQzOwkudGVzdF9hcmVuYV9tdWx0aXNsb3QgPSBicGZfdGVzdG1vZF9vcHMzX190ZXN0X2FyZW5hX211bHRpc2xvdCwKIH07CiAKIHN0YXRpYyB2b2lkIGJwZl90ZXN0bW9kX3Rlc3Rfc3RydWN0X29wczModm9pZCkKQEAgLTQ0MSw2ICYjNDM7NDQ4LDEzIEBAIF9fYnBmX2tmdW5jIGludCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9zdGFjayh1NjQgKnB0cl9fYXJlbmEpCiAJcmV0dXJuIHN0X29wczMtJmd0O3Rlc3RfYXJlbmFfc3RhY2soMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgcHRyX19hcmVuYSk7CiB9CiAKJiM0MztfX2JwZl9rZnVuYyBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfbXVsdGlzbG90KHU2NCAqcHRyX19hcmVuYSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBicGZfdGVzdG1vZF9hcmVuYV9wYWlyIHAgPSB7IC5hID0gMTEsIC5iID0gMjIgfTsKJiM0MzsKJiM0MzsJcmV0dXJuIHN0X29wczMtJmd0O3Rlc3RfYXJlbmFfbXVsdGlzbG90KHAsIHB0cl9fYXJlbmEpOwomIzQzO30KJiM0MzsKIHN0cnVjdCBicGZfdGVzdG1vZF9idGZfdHlwZV90YWdfMSB7CiAJaW50IGE7CiB9OwpAQCAtODUyLDYgJiM0Mzs4NjYsNyBAQCBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfMikKIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYSkKIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9udWxsYWJsZSkKIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9zdGFjaykKJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfbXVsdGlzbG90KQogQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19nZXRfZGVmYXVsdF90cnVzdGVkX3B0cl90ZXN0KTsKIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfcHV0X2RlZmF1bHRfdHJ1c3RlZF9wdHJfdGVzdCk7CiBCVEZfS0ZVTkNTX0VORChicGZfdGVzdG1vZF9jb21tb25fa2Z1bmNfaWRzKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmgKaW5kZXggMzNmMmFmNWI3MDg1Ny4uMjEwYjkxOTI5MGNjMiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5oCkBAIC0xMDMsNiAmIzQzOzEwMywxMiBAQCBzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzMiB7CiAJaW50ICgqdGVzdF8xKSh2b2lkKTsKIH07CiAKJiM0MzsvKiAxNiBieXRlcywgc28gaXQgdGFrZXMgdHdvIGFyZ3VtZW50IHNsb3RzIHdoZW4gcGFzc2VkIGJ5IHZhbHVlICovCiYjNDM7c3RydWN0IGJwZl90ZXN0bW9kX2FyZW5hX3BhaXIgewomIzQzOwl1NjQgYTsKJiM0MzsJdTY0IGI7CiYjNDM7fTsKJiM0MzsKIHN0cnVjdCBicGZfdGVzdG1vZF9vcHMzIHsKIAlpbnQgKCp0ZXN0XzEpKHZvaWQpOwogCWludCAoKnRlc3RfMikodm9pZCk7CkBAIC0xMTIsNiAmIzQzOzExOCw4IEBAIHN0cnVjdCBicGZfdGVzdG1vZF9vcHMzIHsKIAkvKiBlbm91Z2ggbGVhZGluZyBhcmdzIHRvIGZvcmNlIEBwdHIgb250byB0aGUgc3RhY2sgb24geDg2IGFuZCBhcm02NCAqLwogCWludCAoKnRlc3RfYXJlbmFfc3RhY2spKHU2NCBhLCB1NjQgYiwgdTY0IGMsIHU2NCBkLCB1NjQgZSwgdTY0IGYsCiAJCQkJdTY0IGcsIHU2NCBoLCB1NjQgKnB0cik7CiYjNDM7CS8qIGEgbXVsdGktc2xvdCBsZWFkaW5nIGFyZywgc28gQHB0ciBpcyBub3QgYXQgdGhlIHNsb3QgaXRzIGFyZyBpbmRleCBzdWdnZXN0cyAqLwomIzQzOwlpbnQgKCp0ZXN0X2FyZW5hX211bHRpc2xvdCkoc3RydWN0IGJwZl90ZXN0bW9kX2FyZW5hX3BhaXIgcCwgdTY0ICpwdHIpOwogfTsKIAogc3RydWN0IHN0X29wc19hcmdzIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kX2tmdW5jLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oCmluZGV4IGM0MzgzYWNiNTNjMTEuLjdkODEwNzBlZWZlN2YgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kX2tmdW5jLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaApAQCAtMTIzLDYgJiM0MzsxMjMsNyBAQCB2b2lkIGJwZl90ZXN0bW9kX3Rlc3RfbW9kX2tmdW5jKGludCBpKSBfX2tzeW07CiBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmEoX191NjQgKnB0cl9fYXJlbmEpIF9fa3N5bTsKIGludCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9udWxsYWJsZShfX3U2NCAqcHRyX19hcmVuYV9fbnVsbGFibGUpIF9fa3N5bTsKIGludCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9zdGFjayhfX3U2NCAqcHRyX19hcmVuYSkgX19rc3ltOwomIzQzO2ludCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9tdWx0aXNsb3QoX191NjQgKnB0cl9fYXJlbmEpIF9fa3N5bTsKIAogX191NjQgYnBmX2tmdW5jX2NhbGxfdGVzdDEoc3RydWN0IHNvY2sgKnNrLCBfX3UzMiBhLCBfX3U2NCBiLAogCQkJCV9fdTMyIGMsIF9fdTY0IGQpIF9fa3N5bTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjA6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI0MDcKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiA1ODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBhcm02NCBCUEYgSklUIEFyZW5hIEFyZ3VtZW50IFN1cHBvcnQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggaW50cm9kdWNpbmcgQlBGIGFyZW5hIGFyZ3VtZW50IHN1cHBvcnQgZm9yIHRoZSBhcm02NCBKSVQgY29tcGlsZXIuIFRoZSBjaGFuZ2VzIGFyZSBmb2N1c2VkIGluIGBhcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY2AgYW5kIGBhcmNoL2FybTY0L2xpYi9pbnNuLmNgLCB3aXRoIHNvbWUgdGVzdCB1cGRhdGVzIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhpcyBpcyBhIGNvcmUgZnVuY3Rpb25hbCBjaGFuZ2UsIGRlZmluaXRlbHkgcmVxdWlyaW5nIHRob3JvdWdoIGZ1enppbmcgYW5kIHRlc3RpbmcuCgpGaXJzdCwgbGV0JiMzOTtzIHplcm8gaW4gb24gYGFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jYC4gVGhlIGludHJvZHVjdGlvbiBvZiBgZW1pdF9rZnVuY19hcmVuYV9hcmdzYCwgYGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJnc2AsIGFuZCBgZW1pdF9hcmVuYV9hcmdfY29udmAgYWxvbmcgd2l0aCBtb2RpZmljYXRpb25zIHRvIGBzYXZlX2FyZ3NgIGFuZCBgcHJlcGFyZV90cmFtcG9saW5lYCBwb2ludCBkaXJlY3RseSB0byB0aGUgbmV3IGFyZW5hIGFyZ3VtZW50IGhhbmRsaW5nLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIGxpdmVzLgoKTm93LCBsZXQmIzM5O3MgaWRlbnRpZnkgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBwcmVjaXNlbHkuIFdlIGhhdmUgYGFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9leHRlbmRlZF9yZWdgIGluIGBhcmNoL2FybTY0L2xpYi9pbnNuLmNgIGludm9sdmVkLCB3aGljaCBpcyByZWxldmFudCBzaW5jZSBpdCBoYW5kbGVzIGluc3RydWN0aW9uIGdlbmVyYXRpb24sIGFuZCBpbiBgYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmNgLCB3ZSBoYXZlIGBlbWl0X2tmdW5jX2FyZW5hX2FyZ3NgLCBgYnVpbGRfaW5zbmAsIGBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NgLCBgZW1pdF9hcmVuYV9hcmdfY29udmAsIGBzYXZlX2FyZ3NgLCBhbmQgYHByZXBhcmVfdHJhbXBvbGluZWAuCgpXYWl0LCBsZXQgbWUgbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcuIGBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NgIGlzIGV4cG9ydGVkLCBtZWFuaW5nIGl0JiMzOTtzIHBvdGVudGlhbGx5IHVzZWQgZWxzZXdoZXJlLiBTaW1pbGFybHksIGBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnYCBpcyBub24tc3RhdGljIHNvIGl0JiMzOTtzIGxpa2VseSB1c2VkIGJ5IG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwgYXMgd2VsbC4gV2hpbGUgdGhlIG1haW4gZW50cnkgcG9pbnQgYGJwZl9pbnRfaml0X2NvbXBpbGVgIGlzbiYjMzk7dCBkaXJlY3RseSBtb2RpZmllZCwgSSBzZWUgdGhhdCBgYnVpbGRfaW5zbmAsIHdoaWNoIGlzIGNhbGxlZCB3aXRoaW4gYGJwZl9pbnRfaml0X2NvbXBpbGVgLCBpcyBtb2RpZmllZC4gSSBzaG91bGQgcHJvYmFibHkgcGF5IGF0dGVudGlvbiB0byB0aGUgY2FsbCBzdGFjayB0aGVyZS4gQWxzbywgc2luY2UgYHByZXBhcmVfdHJhbXBvbGluZWAgaXMgcGFydCBvZiB0aGUgY2hhbmdlLCBhbmQgSSBzZWUgYGJwZl90cmFtcG9saW5lX3VwZGF0ZWAgb3Igc2ltaWxhciBjYWxscyB0aGlzIHRocm91Z2ggYGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAsIEkgc2hvdWxkIGNoZWNrIGBhcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY2AgZm9yIGBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgLiBUaGF0IGZ1bmN0aW9uIGlzIHByb2JhYmx5IGltcG9ydGFudCwgYXMgdGhlIHRyYW1wb2xpbmUgaXMgaG93IHdlIGFjdHVhbGx5ICp1c2UqIHRoZSBjb21waWxlZCBCUEYuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjA6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM9MjY3OT1zdGF0aWMgdm9pZCBzdG9yZV9mdW5jX21ldGEoc3RydWN0IGppdF9jdHggKmN0eCwgdTY0IGZ1bmNfbWV0YSwgaW50IGZ1bmNfbWV0YV9vZmYpXG4tLVxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMjY4NC1cbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jOjI2ODU6LyogQmFzZWQgb24gdGhlIHg4NiYjMzk7cyBpbXBsZW1lbnRhdGlvbiBvZiBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoKS5cbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTI2ODYtICpcbi0tXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYz0zMDIwPWludCBhcmNoX3Byb3RlY3RfYnBmX3RyYW1wb2xpbmUodm9pZCAqaW1hZ2UsIHVuc2lnbmVkIGludCBzaXplKVxuLS1cbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTMwMjQtXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYzozMDI1OmludCBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sIHZvaWQgKnJvX2ltYWdlLFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMzAyNi1cdFx0XHRcdHZvaWQgKnJvX2ltYWdlX2VuZCwgY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzOTQyCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEJQRiBDb21waWxhdGlvbiBFbnRyeSBQb2ludHMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIEJQRiB0cmFtcG9saW5lIGFuZCBKSVQgY29tcGlsYXRpb24gc2V0dXAuIEZyb20gd2hhdCBJJiMzOTttIHNlZWluZywgYGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAgaXMgdGhlIGtleSBlbnRyeSBwb2ludCBmb3IgaGFuZGxpbmcgdHJhbXBvbGluZXMsIHdoaWNoIG1ha2VzIHNlbnNlLiBUaGVuLCBmb3IgdGhlIGFjdHVhbCBKSVQgY29tcGlsYXRpb24gcHJvY2VzcywgYGJwZl9pbnRfaml0X2NvbXBpbGVgIHNlZW1zIHRvIGJlIHRoZSBtYWluIHN0YXJ0aW5nIHBvaW50LiBOb3csIEkgd2FudCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYW5kIG1ha2Ugc3VyZSB0aGF0IGBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnYCBpcyBhY3R1YWxseSBleHBvcnRlZCBhbmQgYWNjZXNzaWJsZS4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGl0JiMzOTtzIGNvcnJlY3RseSBleHBvc2VkIHdpdGhpbiB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGluc3RydWN0aW9uIGdlbmVyYXRpb24gY29tcG9uZW50cy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBidWlsZGluZyBibG9ja3MgYXJlIGFsbCBhdmFpbGFibGUgdG8gdGhlIG1haW4gcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9pbmNsdWRlL2FzbS9pbnNuLmg9NjUwPXUzMiBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfc2hpZnRlZF9yZWcoZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgZHN0LFxuLS1cbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vaW5zbi5oLTY1NS1cdFx0XHRcdFx0IGVudW0gYWFyY2g2NF9pbnNuX2Fkc2JfdHlwZSB0eXBlKTtcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vaW5zbi5oOjY1Njp1MzIgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZyhlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBkc3QsXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2luc24uaC02NTctXHRcdFx0XHRcdCAgZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgc3JjLFxuLS1cbmFyY2gvYXJtNjQvbGliL2luc24uYz05MzE9dTMyIGFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9zaGlmdGVkX3JlZyhlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBkc3QsXG4tLVxuYXJjaC9hcm02NC9saWIvaW5zbi5jLTk5My0gKi9cbmFyY2gvYXJtNjQvbGliL2luc24uYzo5OTQ6dTMyIGFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9leHRlbmRlZF9yZWcoZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgZHN0LFxuYXJjaC9hcm02NC9saWIvaW5zbi5jLTk5NS1cdFx0XHRcdFx0ICBlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBzcmMsXG4tLVxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdC5oLTI0Ny0jZGVmaW5lIEE2NF9BRERTVUJfRVJFRyhzZiwgUmQsIFJuLCBSbSwgZXh0LCBzaGlmdCwgdHlwZSkgXFxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXQuaDoyNDg6XHRhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnKFJkLCBSbiwgUm0sIFxcXG5hcmNoL2FybTY0L25ldC9icGZfaml0LmgtMjQ5LVx0XHRBQVJDSDY0X0lOU05fRVhURU5EXyMjZXh0LCBzaGlmdCwgQTY0X1ZBUklBTlQoc2YpLCBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NzAyCgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cyBmcm9tIGEgZmlyc3QtcGVyc29uLCBleHBlcnQgcGVyc3BlY3RpdmUsIHN0YXJ0aW5nIHdpdGggYSAqKmJvbGRlZCBoZWFkZXIqKjoKCioqQ2hlY2tpbmcgU3ltYm9sIEV4cG9ydCBpbiBBQXJjaDY0IEluc3RydWN0aW9uIEdlbmVyYXRpb24qKgoKQWxyaWdodCwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4gSSYjMzk7bSB0YWtpbmcgYSBsb29rIGF0IHRoaXMgYGFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9leHRlbmRlZF9yZWdgIGZ1bmN0aW9uLiBOb3csIEkgbmVlZCB0byBrbm93IGlmIGl0JiMzOTtzIGFjdHVhbGx5IHVzYWJsZSBieSBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtLCBvciBpZiBpdCYjMzk7cyBhbiBpbnRlcm5hbCBoZWxwZXIuIFRoZSBrZXkgcXVlc3Rpb24gaW4gbXkgbWluZCByaWdodCBub3cgaXMgd2hldGhlciBvciBub3QgaXQmIzM5O3MgYmVlbiBleHBsaWNpdGx5ICoqZXhwb3J0ZWQgdXNpbmcgYEVYUE9SVF9TWU1CT0xgKiouIFRoYXQmIzM5O3MgdGhlIGNydWNpYWwgZGV0YWlsLiBXaXRob3V0IHRoYXQsIGl04oCZcyBnb2luZyB0byBiZSBjb25maW5lZCB0byBpdHMgY3VycmVudCBjb21waWxhdGlvbiB1bml0LCB3aGljaCBtaWdodCBjYXVzZSBtZSBwcm9ibGVtcyBpZiBJIHRyeSB0byB1c2UgaXQgZWxzZXdoZXJlLiBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gdGhpcyB0byB1bmRlcnN0YW5kIGhvdyB3aWRlbHkgYXZhaWxhYmxlIHRoaXMgZnVuY3Rpb24gaXMgd2l0aGluIHRoZSBsYXJnZXIgYXJjaGl0ZWN0dXJlLiBUaGUgYW5zd2VyIHdpbGwgc2lnbmlmaWNhbnRseSBpbXBhY3QgdGhlIG5leHQgc3RlcHMgSSB0YWtlIGluIHdoYXRldmVyIEkgYW0gdHJ5aW5nIHRvIGFjaGlldmUuIElzIGl0IGludGVybmFsLCBvciBicm9hZGx5IGFjY2Vzc2libGU/IEdvdHRhIGtub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjA6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLiphYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MDA4CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipOYXZpZ2F0aW5nIHRoZSBBcmVuYSBBcmd1bWVudCBMYW5kc2NhcGUqKgoKSG1tLCBubywgdGhpcyBpc24mIzM5O3QgYXMgc3RyYWlnaHRmb3J3YXJkIGFzIGEgc2ltcGxlICYjMzQ7eWVzJiMzNDsgb3IgJiMzNDtubyYjMzQ7IHN0YXRpYyBmbGFnIHdvdWxkIGltcGx5LiBUaGUgc2l0dWF0aW9uJiMzOTtzIG1vcmUgbnVhbmNlZCB0aGFuIHRoYXQuIFRoZSBiZWhhdmlvciBzZWVtcyBkeW5hbWljLCB3aGljaCBtZWFucyBJIG5lZWQgdG8gZGlnIGRlZXBlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hldGhlciB0aGlzIHBsYXRmb3JtIHN1cHBvcnRzIGFyZW5hIGFyZ3VtZW50cywgYnV0IGl0JiMzOTtzIG5vdCBhIGdpdmVuLiBUaGUgY3J1Y2lhbCBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgYGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJnc2AgZnVuY3Rpb24uIFRoYXQgZnVuY3Rpb24gd2lsbCBsaWtlbHkgc2hlZCBsaWdodCBvbiB0aGUgcnVudGltZSBjYXBhYmlsaXRpZXMgYW5kIGRlY2lkZSB3aGVyZSB0byBnbyBmcm9tIGhlcmUuIEl0JiMzOTtzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBpZiBteSBleHBlY3RhdGlvbnMgYXJlIGdvaW5nIHRvIGJlIG1ldCwgb3IgaWYgSSBuZWVkIHRvIHRha2UgYSBkaWZmZXJlbnQgYXBwcm9hY2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYz0yMzkxPWJvb2wgYnBmX2ppdF9zdXBwb3J0c19zdGFja19hcmdzKHZvaWQpXG4tLVxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMjM5NS1cbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jOjIzOTY6Ym9vbCBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3Modm9pZClcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTIzOTcte1xuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz00MTU5PWJvb2wgYnBmX2ppdF9zdXBwb3J0c19zdGFja19hcmdzKHZvaWQpXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTQxNjMtXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6NDE2NDpib29sIGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncyh2b2lkKVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTQxNjUte1xuLS1cbmluY2x1ZGUvbGludXgvZmlsdGVyLmg9MTI0MD1ib29sIGJwZl9qaXRfc3VwcG9ydHNfc3RhY2tfYXJncyh2b2lkKTtcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6MTI0MTpib29sIGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncyh2b2lkKTtcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtMTI0Mi1ib29sIGJwZl9qaXRfc3VwcG9ydHNfZmFyX2tmdW5jX2NhbGwodm9pZCk7XG4tLVxua2VybmVsL2JwZi9jb3JlLmM9MzI5MD1ib29sIF9fd2VhayBicGZfaml0X3N1cHBvcnRzX3N0YWNrX2FyZ3Modm9pZClcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0zMjk0LVxua2VybmVsL2JwZi9jb3JlLmM6MzI5NTpib29sIF9fd2VhayBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3Modm9pZClcbmtlcm5lbC9icGYvY29yZS5jLTMyOTYte1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTMwNj1nZXRfa2Z1bmNfYXJnX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTM4My1cdGVsc2UgaWYgKGlzX2tmdW5jX2FyZ19hcmVuYShtZXRhLVx1MDAzZWJ0ZiwgXHUwMDI2YXJnc1thcmddKSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jOjExMzg0Olx0XHRpZiAoIWJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncygpKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEzODUtXHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O0pJVCBkb2VzIG5vdCBzdXBwb3J0IGtmdW5jICVzKCkgd2l0aCBhcmVuYSBwb2ludGVyIGFyZ3VtZW50c1xcblwmIzM0Oyxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTg3MjE9c3RhdGljIGludCBjaGVja19zdHJ1Y3Rfb3BzX2J0Zl9pZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODgxMC1cdFx0aWYgKGJhc2VfdHlwZShpbmZvLVx1MDAzZXJlZ190eXBlKSA9PSBQVFJfVE9fQVJFTkEpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODgxMTpcdFx0XHRpZiAoIWJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncygpKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg4MTItXHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7SklUIGRvZXMgbm90IHN1cHBvcnQgYXJlbmEgYXJndW1lbnRzXFxuXCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjA6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU5NzgKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAyMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgSklUIFBhdGNoIGZvciBhcm02NCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIGZvY3VzZWQgb24gZW5hYmxpbmcgb3IgaW1wcm92aW5nIEJQRiBKSVQgY29tcGlsYXRpb24gb24gYXJtNjQuIE15IGltbWVkaWF0ZSBvYnNlcnZhdGlvbnMgYXJlIHRoYXQgdGhlIHBhdGNoIGFkZHMgYSBmdW5jdGlvbiwgYGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJnc2AsIHRvIHRoZSBhcm02NCBhcmNoaXRlY3R1cmUsIGFuZCBpdCByZXR1cm5zIHRydWUuIFRoYXQmIzM5O3MgZ29vZCwgaW5kaWNhdGluZyB0aGlzIGFybTY0IGltcGxlbWVudGF0aW9uIGlzIGFjdGl2ZWx5IHN1cHBvcnRpbmcgYXJlbmEtYmFzZWQgYXJndW1lbnQgcGFzc2luZywgd2hpY2ggaXMgbGlrZWx5IGEga2V5IG9wdGltaXphdGlvbi4KCkRpZ2dpbmcgZGVlcGVyLCBJIHNlZSBhIGNoYWluIG9mIG1vZGlmaWNhdGlvbnMuIFRoZSBwYXRjaCBpbmRpcmVjdGx5IHRvdWNoZXMgYGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAgYnkgY2hhbmdpbmcgYHByZXBhcmVfdHJhbXBvbGluZWAsIHdoaWNoIGlzIGNhbGxlZCBieSB0aGUgZm9ybWVyLiBJdCBhbHNvIGNoYW5nZXMgYGJ1aWxkX2luc25gLCB3aGljaCBpcyBjYWxsZWQgYnkgYGJ1aWxkX2JvZHlgIHdoaWNoIGlzIGNhbGxlZCBieSBgYnBmX2ludF9qaXRfY29tcGlsZWAuICBTbywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhvc2UgaW5kaXJlY3QgY2hhbmdlcyBhbmQgaG93IHRoZXkgYXJlIGhhbmRsZWQuCgpUaGUga2V5IGZ1bmN0aW9ucyB0byBzY3J1dGluaXplLCB0aGVuLCBhcmU6IGBicGZfaW50X2ppdF9jb21waWxlYCDigJMgdGhlIGNvcmUgSklUIGNvbXBpbGF0aW9uIGZ1bmN0aW9uLCBgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYCDigJMgcHJvYmFibHkgcmVsYXRlZCB0byB0aGUgaW5zdHJ1Y3Rpb24gc2VxdWVuY2UgbmVlZGVkIGZvciBjYWxsaW5nIGludG8gSklUJiMzOTtkIGNvZGUsIGBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnYCDigJMgYSBzcGVjaWZpYyBpbnN0cnVjdGlvbiBnZW5lcmF0b3IgdGhhdCBtaWdodCBoYXZlIHNwZWNpZmljIEFSTTY0IGZlYXR1cmVzIGJlaW5nIGV4cGxvaXRlZCBhbmQgZmluYWxseSBgYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzYCDigJMgdGhlIGZsYWcgc2lnbmFsaW5nIHRoZSBmZWF0dXJlJiMzOTtzIGF2YWlsYWJpbGl0eS4KCkJlZm9yZSBkaXZpbmcgaW50byB0aGUgY29kZSBpdHNlbGYsIEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgZm9yIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbi4gVGhlIGZpbGUgbG9jYXRpb24gKGBhcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY2ApIHRlbGxzIG1lIHdoZXJlIHRvIGxvb2sgYW5kIEkga25vdyB0aGlzIGhpbmdlcyBvbiBgQ09ORklHX0JQRl9KSVRgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhpcyBpcyBlbmFibGVkIGFuZCB0aGVuIGRpZyBpbiBmdXJ0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX0pJVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWc9Mjc9Y29uZmlnIEJQRl9TWVNDQUxMXG4tLVxua2VybmVsL2JwZi9LY29uZmlnLTQxLVxua2VybmVsL2JwZi9LY29uZmlnOjQyOmNvbmZpZyBCUEZfSklUXG5rZXJuZWwvYnBmL0tjb25maWctNDMtXHRib29sIFwmIzM0O0VuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXCYjMzQ7XG4tLVxua2VybmVsL2JwZi9LY29uZmlnLTU3LVxua2VybmVsL2JwZi9LY29uZmlnOjU4OmNvbmZpZyBCUEZfSklUX0FMV0FZU19PTlxua2VybmVsL2JwZi9LY29uZmlnLTU5LVx0Ym9vbCBcJiMzNDtQZXJtYW5lbnRseSBlbmFibGUgQlBGIEpJVCBhbmQgcmVtb3ZlIEJQRiBpbnRlcnByZXRlclwmIzM0O1xuLS1cbmtlcm5lbC9icGYvS2NvbmZpZy02OC1cbmtlcm5lbC9icGYvS2NvbmZpZzo2OTpjb25maWcgQlBGX0pJVF9ERUZBVUxUX09OXG5rZXJuZWwvYnBmL0tjb25maWctNzAtXHRkZWZfYm9vbCBBUkNIX1dBTlRfREVGQVVMVF9CUEZfSklUIHx8IEJQRl9KSVRfQUxXQVlTX09OXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2ODI4CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgdGFraW5nIG9uIHRoZSBwZXJzb25hIHlvdSByZXF1ZXN0ZWQ6CgoqKkFzc2Vzc2luZyB0aGUgQlBGIEZlYXR1cmUgUmVxdWlyZW1lbnRzKioKCkFscmlnaHQsIHNvIHRoZSBpbml0aWFsIHRob3VnaHQgaXMgY3J5c3RhbCBjbGVhcjogd2UgKm5lZWQqIEJQRl9KSVQgZW5hYmxlZC4gTm8gaWZzLCBhbmRzLCBvciBidXRzIGFib3V0IGl0LiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZS4gTm93LCB0aGUgbWVhdCBvZiB0aGlzIHNlZW1zIHRvIHJldm9sdmUgYXJvdW5kIHRoaXMgQlBGIGFyZW5hIGNvbmNlcHQuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpczogaXMgdGhlcmUgYSBjb3JyZXNwb25kaW5nIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbiB0byBjb250cm9sIHRoaXM/IFNwZWNpZmljYWxseSwgaXMgdGhlcmUgYSBgQ09ORklHX0JQRl9BUkVOQWAgc2V0dGluZz8gTXkgbmV4dCBzdGVwIGlzIGNsZWFybHkgZ29pbmcgdG8gYmUgdG8gdmVyaWZ5IHRoYXQgY29uZmlndXJhdGlvbiBvcHRpb24gZXhpc3RzIGFuZCwgaWYgc28sIHVuZGVyc3RhbmQgaXRzIGN1cnJlbnQgc3RhdGUuIEkgbmVlZCB0byBrbm93IGlmIHRoaXMgZmVhdHVyZSBpcyBldmVuICphdmFpbGFibGUqIGluIHRoZSBjdXJyZW50IGJ1aWxkIGVudmlyb25tZW50IGJlZm9yZSBJIGNhbiBtb3ZlIGZvcndhcmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9BUkVOQSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MDY1CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQlBGIENvbmZpZ3VyYXRpb24gQ29uY2VybnMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIEJQRiBjb25maWd1cmF0aW9uLCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoZSBhYnNlbmNlIG9mIGBDT05GSUdfQlBGX0FSRU5BYC4gSG1tLCBpbnRlcmVzdGluZy4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0aGF0LiBXYWl0LCB3YWl0LiBJIGtub3cgdGhhdCBCUEZfU1lTQ0FMTCBpcyBhYnNvbHV0ZWx5IGNydWNpYWwsIHNvIHRoYXQmIzM5O3MgYSBnaXZlbi4gTmV4dCB1cCwgYENPTkZJR19CUEZfSklUYC4gWWVzLCBvZiBjb3Vyc2UuIEkgY2FuJiMzOTt0IGltYWdpbmUgdGhpcyB3b3JraW5nIHdpdGhvdXQgdGhlIEpJVCBjb21waWxlciBlbmFibGVkLiBMZXQgbWUganVzdCBjb25maXJtIHRoaW5ncyB3aXRoIHRoZSBgYXJjaC9hcm02NC9uZXQvTWFrZWZpbGVgIHRvIG1ha2Ugc3VyZSBub3RoaW5nIGlzIGJlaW5nIG92ZXJsb29rZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9qaXRfY29tcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQvbmV0L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQvbmV0L01ha2VmaWxlLTQtI1xuYXJjaC9hcm02NC9uZXQvTWFrZWZpbGU6NTpvYmotJChDT05GSUdfQlBGX0pJVCkgJiM0Mzs9IGJwZl9qaXRfY29tcC5vIGJwZl90aW1lZF9tYXlfZ290by5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MzU2CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMjA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBCUEYgSklUIEZ1bmN0aW9uYWxpdHkqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBDT05GSUdfQlBGX0pJVGAuIFRoYXQmIzM5O3MgdGhlIGtleSBlbmFibGluZyBjb25maWcsIG9idmlvdXNseS4gTm93LCBJIHdhbnQgdG8gZ2V0IGEgbGF5IG9mIHRoZSBsYW5kLCBzZWUgd2hhdCBvdGhlciByZWxhdGVkIGZ1bmN0aW9ucyBhcmUgaW4gcGxheSBoZXJlLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O3ZlIGdvdCBgYnBmX2ludF9qaXRfY29tcGlsZWAsIGBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgLCBgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZ2AsIGFuZCBgYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzYC4KCkhtbSwgYGJwZl9pbnRfaml0X2NvbXBpbGVgIGxvb2tzIGxpa2UgYSByZWFsbHkgY29yZSwgaG90LXBhdGggZnVuY3Rpb24gZm9yIHRoZSBCUEYgSklULCB2ZXJ5IGdlbmVyaWMgaW4gaXRzIHB1cnBvc2UuIGBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgIGlzIGFsc28gc29tZXdoYXQgZ2VuZXJpYywgYnV0IHNsaWdodGx5IG1vcmUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljLCBwcm9iYWJseSBmb3Igc2V0dGluZyB1cCB0aGUgZXhlY3V0aW9uIGNvbnRleHQuIGBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnYCwgaG93ZXZlciwgdGhhdCYjMzk7cyBkZWZpbml0ZWx5IGEgc3BlY2lmaWMgaW5zdHJ1Y3Rpb24gZ2VuZXJhdG9yOyBpdCYjMzk7cyBnZXR0aW5nIGRvd24gaW50byB0aGUgd2VlZHMgb2YgaG93IGFuIGFkZCBvciBzdWJ0cmFjdCBpcyBoYW5kbGVkIG9uIEFBcmNoNjQuIEFuZCBmaW5hbGx5LCBgYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzYCBzb3VuZHMgdmVyeSBzcGVjaWZpYywgbGlrZWx5IHJlbGF0ZWQgdG8gaG93IHRoZSBKSVQgaGFuZGxlcyBhcmd1bWVudHMgYW5kIG1lbW9yeSBhcmVuYXMuCgpHaXZlbiB0aGF0IGBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnYCBpcyBzbyBmb2N1c2VkLCBJJiMzOTttIGdvaW5nIHRvIGRpZyBhIGJpdCBkZWVwZXIgaW50byBpdHMgY2FsbGVycyB0byBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBpdHMgcm9sZSBpbiB0aGUgYmlnZ2VyIHBpY3R1cmUuIEl0IGNvdWxkIGJlIGFuIGludGVyZXN0aW5nIHBvaW50IHRvIGV4YW1pbmUgb3B0aW1pemF0aW9uIHBvc3NpYmlsaXRpZXMsIGRlcGVuZGluZyBvbiBob3cgd2lkZWx5IGl0JiMzOTtzIHVzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9leHRlbmRlZF9yZWcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL2FybTY0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L2luY2x1ZGUvYXNtL2luc24uaD02NTA9dTMyIGFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9zaGlmdGVkX3JlZyhlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBkc3QsXG4tLVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9pbnNuLmgtNjU1LVx0XHRcdFx0XHQgZW51bSBhYXJjaDY0X2luc25fYWRzYl90eXBlIHR5cGUpO1xuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9pbnNuLmg6NjU2OnUzMiBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnKGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIGRzdCxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vaW5zbi5oLTY1Ny1cdFx0XHRcdFx0ICBlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBzcmMsXG4tLVxuYXJjaC9hcm02NC9saWIvaW5zbi5jPTkzMT11MzIgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX3NoaWZ0ZWRfcmVnKGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIGRzdCxcbi0tXG5hcmNoL2FybTY0L2xpYi9pbnNuLmMtOTkzLSAqL1xuYXJjaC9hcm02NC9saWIvaW5zbi5jOjk5NDp1MzIgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZyhlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBkc3QsXG5hcmNoL2FybTY0L2xpYi9pbnNuLmMtOTk1LVx0XHRcdFx0XHQgIGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIHNyYyxcbi0tXG5hcmNoL2FybTY0L25ldC9icGZfaml0LmgtMjQ3LSNkZWZpbmUgQTY0X0FERFNVQl9FUkVHKHNmLCBSZCwgUm4sIFJtLCBleHQsIHNoaWZ0LCB0eXBlKSBcXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdC5oOjI0ODpcdGFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9leHRlbmRlZF9yZWcoUmQsIFJuLCBSbSwgXFxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXQuaC0yNDktXHRcdEFBUkNINjRfSU5TTl9FWFRFTkRfIyNleHQsIHNoaWZ0LCBBNjRfVkFSSUFOVChzZiksIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NDM1CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlRyYWNpbmcgdGhlIENhbGwgUGF0aCB0byBhIENyaXRpY2FsIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgYGFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9leHRlbmRlZF9yZWdgIGZ1bmN0aW9uLCBhbmQgaXQgbG9va3MgbGlrZSB0aGUgY2FsbCBwYXRoIGlzIGZhaXJseSBjb250YWluZWQuIFRoZSBpbml0aWFsIGhvb2sgaXMgd2l0aGluIHRoZSBgQTY0X0FERFNVQl9FUkVHYCBtYWNybywgYW5kIHRoZSB0cmFjZSBmcm9tIHRoZXJlIGlzIHByZXR0eSBkaXJlY3Q6IGBBNjRfQUREU1VCX0VSRUdgIGdldHMgdXNlZCBpbiBgQTY0X0FERF9FWFRgLCB3aGljaCBmZWVkcyBpbnRvIGBBNjRfQUREX1VYVFdgLiBOb3csIGBBNjRfQUREX1VYVFdgIGlzIGNydWNpYWwsIGFzIGl0IGVuZHMgdXAgaW4gYm90aCBgZW1pdF9rZnVuY19hcmVuYV9hcmdzYCBhbmQgYGVtaXRfYXJlbmFfYXJnX2NvbnZgLiBUaGlzIG1ha2VzIGl0IHRoZSBwaXZvdGFsIHN5bWJvbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgYnJvYWRlciB1c2FnZS4gTm93IEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZSBjaGVjayB0aGUgYGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jPTI2Nzk9c3RhdGljIHZvaWQgc3RvcmVfZnVuY19tZXRhKHN0cnVjdCBqaXRfY3R4ICpjdHgsIHU2NCBmdW5jX21ldGEsIGludCBmdW5jX21ldGFfb2ZmKVxuLS1cbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTI2ODQtXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYzoyNjg1Oi8qIEJhc2VkIG9uIHRoZSB4ODYmIzM5O3MgaW1wbGVtZW50YXRpb24gb2YgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKCkuXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0yNjg2LSAqXG4tLVxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM9MzAyMD1pbnQgYXJjaF9wcm90ZWN0X2JwZl90cmFtcG9saW5lKHZvaWQgKmltYWdlLCB1bnNpZ25lZCBpbnQgc2l6ZSlcbi0tXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0zMDI0LVxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM6MzAyNTppbnQgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICpyb19pbWFnZSxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTMwMjYtXHRcdFx0XHR2b2lkICpyb19pbWFnZV9lbmQsIGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjA6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkxMzUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA0MjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ3VycmVudCBMaW5lIG9mIFRob3VnaHQqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gbmFpbCBkb3duIHNvbWUgZ29vZCAmIzM0O2ZvY3VzIHN5bWJvbHMmIzM0OyDigJMga2V5IGZ1bmN0aW9ucyB0aGF0IHJlcHJlc2VudCB0aGUgYXJlYSBJJiMzOTttIGxvb2tpbmcgYXQuIGBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgIGlzIGEgc3Ryb25nIGNhbmRpZGF0ZSwgZGVmaW5pdGVseSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEJ1dCB3aGF0IGFib3V0IGBicGZfaW50X2ppdF9jb21waWxlYD8gSXQgKmlzKiB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgdGhlIEpJVCBjb21waWxlciwgd2hpY2ggaXMgdmVyeSByZWxldmFudCwgYnV0IGl0JiMzOTtzIGFsc28gcHJldHR5IGdlbmVyaWMuIE1heWJlIHRvbyBicm9hZC4gT24gdGhlIG90aGVyIGhhbmQsIGBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NgIGlzIHJlYWxseSBzcGVjaWZpYyBhbmQgcHJvYmFibHkgcmVwcmVzZW50cyBhIGNsZWFyIGFyZWEgdG8gZXhhbWluZS4gVGhhdCYjMzk7cyBhIHN0cm9uZyBjb250ZW5kZXIuCgpJIG5lZWQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgc3BlY2lmaWMgZnVuY3Rpb25zIHRoYXQgd291bGQgYmUgaGVscGZ1bCBhcyBmb2N1cyBzeW1ib2xzLiBJIGZvdW5kIGBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9tdWx0aXNsb3RgIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jYC4gSG1tLCBidXQgaXMgYGJwZl90ZXN0bW9kYCBhY3R1YWxseSBjb21waWxlZCAqaW50byogdGhlIGtlcm5lbD8gT2ggcmlnaHQsIG5vLCBpdCYjMzk7cyBhIHRlc3QgbW9kdWxlISBXZSBzaG91bGRuJiMzOTt0IGluY2x1ZGUgaXQgaW4gRm9jdXNTeW1ib2xzIHVubGVzcyBpdCYjMzk7cyBwYXJ0IG9mIHRoZSBjb3JlIGtlcm5lbC4gTm9wZSwgaXQmIzM5O3MganVzdCBhIGtlcm5lbCBtb2R1bGUgdXNlZCBmb3IgdGVzdGluZy4gR29vZCB0byByZW1lbWJlci4gU28gc2NyYXRjaCB0aGF0LgoKTGV0JiMzOTtzIHJldmlldyB0aGUgY3VycmVudCBsaXN0OgoKKiAgIGBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnYAoqICAgYGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJnc2AKKiAgIGBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgCiogICBgYnBmX2ludF9qaXRfY29tcGlsZWAgKG1heWJlIEkmIzM5O2xsIG9taXQgdGhpcywgaXQgZmVlbHMgYSBiaXQgdG9vIGJyb2FkKQoKTm93LCB3aGVyZSBhcmUgdGhlc2UgZnVuY3Rpb25zIGRlZmluZWQ/IE9rYXksIGBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NgIGlzIGluIGBhcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY2AsIGFuZCBgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZ2AgaXMgaW4gYGFyY2gvYXJtNjQvbGliL2luc24uY2AuIGBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgIGlzIGFsc28gaW4gYGFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jYC4KCk9rYXksIG5leHQgSSYjMzk7bGwgY2hlY2sgYW5kIGVuc3VyZSB0aGF0IGBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NgIGlzIGFjdHVhbGx5IGNhbGxlZCB0byB2YWxpZGF0ZSB0aGF0IGl0IGlzIHNvbWV0aGluZyB0byBsb29rIGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2NvcmUuYz0zMjkwPWJvb2wgX193ZWFrIGJwZl9qaXRfc3VwcG9ydHNfc3RhY2tfYXJncyh2b2lkKVxuLS1cbmtlcm5lbC9icGYvY29yZS5jLTMyOTQtXG5rZXJuZWwvYnBmL2NvcmUuYzozMjk1OmJvb2wgX193ZWFrIGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncyh2b2lkKVxua2VybmVsL2JwZi9jb3JlLmMtMzI5Ni17XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExMzA2PWdldF9rZnVuY19hcmdfdHlwZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMzgzLVx0ZWxzZSBpZiAoaXNfa2Z1bmNfYXJnX2FyZW5hKG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2FyZ10pKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTEzODQ6XHRcdGlmICghYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzKCkpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTM4NS1cdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7SklUIGRvZXMgbm90IHN1cHBvcnQga2Z1bmMgJXMoKSB3aXRoIGFyZW5hIHBvaW50ZXIgYXJndW1lbnRzXFxuXCYjMzQ7LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xODcyMT1zdGF0aWMgaW50IGNoZWNrX3N0cnVjdF9vcHNfYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4ODEwLVx0XHRpZiAoYmFzZV90eXBlKGluZm8tXHUwMDNlcmVnX3R5cGUpID09IFBUUl9UT19BUkVOQSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE4ODExOlx0XHRcdGlmICghYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzKCkpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODgxMi1cdFx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDtKSVQgZG9lcyBub3Qgc3VwcG9ydCBhcmVuYSBhcmd1bWVudHNcXG5cJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDUxOQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDEyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBKSVQgQ29tcGlsZXIgZm9yIEFybTY0KioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoZSBBcm02NCBCUEYgSklUIGNvbXBpbGVyIGFuZCB0cmFjaW5nIGl0cyBleGVjdXRpb24uIFJpZ2h0LCB0aGUgc3RhcnRpbmcgcG9pbnQgaXMgY2xlYXJseSBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gRXhjZWxsZW50LiBUaGF0IG5hcnJvd3MgbXkgZm9jdXMgY29uc2lkZXJhYmx5LgoKTm93LCB3aGljaCBmdW5jdGlvbnMgYXJlIHRoZSBrZXkgcGxheWVycyBpbiB0aGUgSklUIHByb2Nlc3M/IExldCYjMzk7cyBzZWUuLi4gSSBuZWVkIHRvIGNvbmNlbnRyYXRlIG9uIGBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnYCwgdGhhdCBvbmUmIzM5O3MgbGlrZWx5IGRvaW5nIGhlYXZ5IGxpZnRpbmcsIGFuZCBgYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzYCwgd2hpY2ggcHJvYmFibHkgcmVsYXRlcyB0byBhcmd1bWVudCBoYW5kbGluZy4gT2YgY291cnNlLCBgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYCBpcyBjcnVjaWFsIGZvciB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgc2V0dXAuIEdvdCBpdC4KCkJ1dCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhlIGNvZGUgaXRzZWxmLCBJIHNob3VsZCBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIGBDT05GSUdfQlBGX0pJVGAgaXMgZGVmaW5pdGVseSBhIHByZXJlcXVpc2l0ZSDigJMgbm8gc3VycHJpc2UgdGhlcmUuIEFyZSB0aGVyZSBhbnkgKm90aGVyKiBjb25maWd1cmF0aW9uIG9wdGlvbnMgaW4gcGxheSB0aGF0IG1pZ2h0IGFmZmVjdCB0aGUgQXJtNjQgSklUPyBUaW1lIHRvIGNoZWNrIGBhcmNoL2FybTY0L0tjb25maWdgIGFuZCB2ZXJpZnkuIEdvdHRhIGJlIHRob3JvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUEYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL2FybTY0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDkyOAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6CgoqKkludmVzdGlnYXRpbmcgZUJQRiBKSVQgU3VwcG9ydCBvbiBBUk02NCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBlQlBGIEpJVCBpcyBzdXBwb3J0ZWQgb24gdGhlIEFSTTY0IGFyY2hpdGVjdHVyZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGlzIGtlcm5lbC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMuIEdpdmVuIHRoZSBhcmNoaXRlY3R1cmUsIHRoZSBsaWtlbHkgcGxhY2UgdG8gZmluZCB0aGlzIGluZm9ybWF0aW9uIGlzIGluIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgS2NvbmZpZyBmaWxlLCBzbyBJJiMzOTttIGdvaW5nIHRvIG5hdmlnYXRlIG92ZXIgdG8gYGFyY2gvYXJtNjQvS2NvbmZpZ2AuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGEgY29uZmlnIG9wdGlvbiwgc29tZXRoaW5nIGxpa2UgYEhBVkVfRUJQRl9KSVRgLiBUaGF0IHNob3VsZCB0ZWxsIG1lIGlmIHRoZSBuZWNlc3NhcnkgZmVhdHVyZXMgb3IgaGFyZHdhcmUgc3VwcG9ydCBhcmUgZW5hYmxlZCBhdCBjb21waWxlIHRpbWUuIFRoaXMgaXMgYSBzdGFuZGFyZCBhcHByb2FjaCAtIEtjb25maWcgZmlsZXMgYXJlIHRoZSBjZW50cmFsIHJlcG9zaXRvcnkgZm9yIGZlYXR1cmUgZmxhZ3MgYW5kIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBzZXR0aW5ncy4gS25vd2luZyB0aGlzLCBhbmQgaGF2aW5nIGV4cGVyaWVuY2UgaW4gdGhpcyBhcmVhLCBteSB0aG91Z2h0IHByb2Nlc3MgaXMgdG8gcXVpY2tseSwgYW5kIGVmZmljaWVudGx5IGZpbmQgdGhpcy4gVGhpcyB3aWxsIGJlIG15IHN0YXJ0aW5nIHBvaW50IGluIGNvbmZpcm1pbmcgaWYgdGhlIG5lY2Vzc2FyeSBjb21wb25lbnRzIGZvciBlQlBGIEpJVCBhcmUgcHJlc2VudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjA6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SEFWRV9FQlBGX0pJVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L0tjb25maWc9Mj1jb25maWcgQVJNNjRcbi0tXG5hcmNoL2FybTY0L0tjb25maWctMTc3LVx0c2VsZWN0IEhBVkVfQVNNX01PRFZFUlNJT05TXG5hcmNoL2FybTY0L0tjb25maWc6MTc4Olx0c2VsZWN0IEhBVkVfRUJQRl9KSVRcbmFyY2gvYXJtNjQvS2NvbmZpZy0xNzktXHRzZWxlY3QgSEFWRV9DX1JFQ09SRE1DT1VOVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTMwNwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDEwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLZXJuZWwgQ29uZmlndXJhdGlvbiBmb3IgQlBGKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBjb25maWd1cmluZyB0aGUga2VybmVsIGZvciBCUEYgZnVuY3Rpb25hbGl0eS4gVGhlIHByaW1hcnkgZmxhZyBJIG5lZWQgdG8gZW5hYmxlIGlzIGRlZmluaXRlbHkgYENPTkZJR19CUEZfSklUYC4gVGhhdCYjMzk7cyB0aGUgY29yZS4gSG9sZCBvbiwgdGhvdWdoLCBJIGFsc28gbmVlZCBgQ09ORklHX0JQRl9TWVNDQUxMYCDigJMgaXQmIzM5O3MgY3J1Y2lhbCBmb3IgdGhlIEJQRiBzeXN0ZW0gY2FsbHMgdG8gd29yay4gUmlnaHQsIEkmIzM5O2xsIGJlIHN1cmUgdG8gaW5jbHVkZSAqYm90aCogYEJQRl9KSVRgIGFuZCBgQlBGX1NZU0NBTExgIGluIHRoZSBidWlsZCBjb25maWd1cmF0aW9uLiBJJiMzOTt2ZSBiZWVuIGRvd24gdGhpcyByb2FkIGJlZm9yZSwgbm8gc2Vuc2UgbWFraW5nIGEgc2lsbHkgbWlzdGFrZS4KCk5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSB2ZXJpZnkgdGhhdCBgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZ2AgaXMgYWNjZXNzaWJsZS4gSSBrbm93IGl0JiMzOTtzIGluIGBhcmNoL2FybTY0L2xpYi9pbnNuLmNgLCB3aGljaCBpcyBjb21waWxlZCBkaXJlY3RseSBpbnRvIHRoZSBrZXJuZWwgaW1hZ2UuIE5vIHN1cnByaXNlcyB0aGVyZS4gR29vZC4gVGhpcyBpcyBhbGwgbG9va2luZyBjb3JyZWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnNuXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQvbGliL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQvbGliL01ha2VmaWxlPTI9bGliLXlcdFx0Oj0gY2xlYXJfdXNlci5vIGRlbGF5Lm8gY29weV9mcm9tX3VzZXIub1x0XHRcXFxuYXJjaC9hcm02NC9saWIvTWFrZWZpbGUtMy1cdFx0ICAgY29weV90b191c2VyLm8gY29weV9wYWdlLm9cdFx0XHRcdFxcXG5hcmNoL2FybTY0L2xpYi9NYWtlZmlsZTo0Olx0XHQgICBjbGVhcl9wYWdlLm8gY3N1bS5vIGluc24ubyBtZW1jaHIubyBtZW1jcHkub1x0XHRcXFxuYXJjaC9hcm02NC9saWIvTWFrZWZpbGUtNS1cdFx0ICAgbWVtc2V0Lm8gbWVtY21wLm8gc3RyY21wLm8gc3RybmNtcC5vIHN0cmxlbi5vXHRcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTc5OAoJCQkJCQkJb3V0cHV0OiAyMTEKCQkJCQkJCXRob3VnaHRzOiAzOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBBcm02NCBCUEYgQXJlbmEgQXJndW1lbnRzIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IHRoZSBjb2RlIGlzIGNvbXBpbGVkIGluLiBOb3cgSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIHRoZSBzY29wZSBvZiB0aGUgbW9kaWZpY2F0aW9ucyB0byBlbnN1cmUgYSB0aG9yb3VnaCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjaGFuZ2VzLiBJJiMzOTt2ZSBnb25lIHRocm91Z2ggZWFjaCBmdW5jdGlvbiwgY2hlY2tpbmcgaWYgaXQmIzM5O3MgYmVlbiBtb2RpZmllZCwgYW5kIGlmIHNvLCBob3cuCgpJdCBsb29rcyBsaWtlIHRoZSBgYnBmX2FyY2hfdGV4dF9jb3B5YCwgYGNsZWFyX2dhcmJhZ2VgLCBgc2F2ZV9hcmdzYCwgYHByZXBhcmVfdHJhbXBvbGluZWAsIGBlbWl0X2tmdW5jX2FyZW5hX2FyZ3NgLCBhbmQgYGVtaXRfYXJlbmFfYXJnX2NvbnZgIGZ1bmN0aW9ucyBhcmUgZWl0aGVyIHVubW9kaWZpZWQgb3Igb25seSB1c2VkIGluIHRoZSBjb250ZXh0LiBIb3dldmVyLCBJIGRpZCBmaW5kIHRoYXQgdGhlIGZvbGxvd2luZyBub24tc3RhdGljIGZ1bmN0aW9ucyBoYXZlIGJlZW4gYWx0ZXJlZDoKLSBgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZ2AKLSBgYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzYAotIGBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgCgpCYXNlZCBvbiB3aGF0IEkgc2VlLCB0aGlzIHNlZW1zIGxpa2UgYSBzb2xpZCBpbXBsZW1lbnRhdGlvbiBvZiBCUEYgYXJlbmEgYXJndW1lbnQgc3VwcG9ydCBmb3IgdGhlIGFybTY0IEpJVCBjb21waWxlci4gVGhlIGNvcmUgY2hhbmdlcyBhcmUgY2VudGVyZWQgYXJvdW5kIGdlbmVyYXRpbmcgbmV3IGluc3RydWN0aW9uIGxvZ2ljLCBzcGVjaWZpY2FsbHkgZm9yIGV4dGVuZGVkIHJlZ2lzdGVyIGFkZC9zdWIgaW5zdHJ1Y3Rpb25zLiBGdXJ0aGVybW9yZSwgdGhlIGFybTY0IEJQRiBKSVQgaGFzIGJlZW4gdXBkYXRlZCB0byBhY2NvbW1vZGF0ZSBhcmVuYSBwb2ludGVycyBpbiBib3RoIGtmdW5jIGNhbGxzIGFuZCBzdHJ1Y3Rfb3BzIGNhbGxiYWNrcy4gVGhlc2UgYXJlIGNydWNpYWwsIGZ1bmN0aW9uYWwgY2hhbmdlcyB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBCUEYgSklULiBUaGlzIGltcGxlbWVudGF0aW9uIGFkZHMgc29tZSBuZXcgc3VyZmFjZSBhcmVhIGluIHRoZSBjb3JlIGtlcm5lbC4KClRoZXJlZm9yZSwgdGhlIG9idmlvdXMgYXJlYXMgdGhhdCBuZWVkIGZ1enppbmcgYXJlOgotIGBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnYAotIGBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NgCi0gYGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAKClRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBzZWVtIHRvIGJlIGBCUEZfU1lTQ0FMTGAgYW5kIGBCUEZfSklUYC4KCkkmIzM5O20gcmVhZHkgdG8gY2FsbCB0aGUgcmVzdWx0cyAmIzM0O3NldC1yZXN1bHRzJiMzNDsgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7QlBGX0pJVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9leHRlbmRlZF9yZWcmIzM0OywKICAgICYjMzQ7YnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzJiMzNDssCiAgICAmIzM0O2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbXBsZW1lbnRzIEJQRiBhcmVuYSBhcmd1bWVudHMgc3VwcG9ydCBmb3IgdGhlIGFybTY0IEpJVCBjb21waWxlci4gSXQgYWRkcyBuZXcgaW5zdHJ1Y3Rpb24gZ2VuZXJhdGlvbiBsb2dpYyBmb3IgZXh0ZW5kZWQgcmVnaXN0ZXIgYWRkL3N1YiBpbnN0cnVjdGlvbnMgKGBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnYCkgYW5kIG1vZGlmaWVzIHRoZSBhcm02NCBCUEYgSklUIChgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYCwgYGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJnc2ApIHRvIGhhbmRsZSBhcmVuYSBwb2ludGVycyBpbiBrZnVuYyBjYWxscyBhbmQgc3RydWN0X29wcyBjYWxsYmFja3MuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUga2VybmVsIChCUEYgSklUKSB0aGF0IGFyZSByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnJiMzNDssCiAgICAmIzM0O2JwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncyYjMzQ7LAogICAgJiMzNDthcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW1wbGVtZW50cyBCUEYgYXJlbmEgYXJndW1lbnRzIHN1cHBvcnQgZm9yIHRoZSBhcm02NCBKSVQgY29tcGlsZXIuIEl0IGFkZHMgbmV3IGluc3RydWN0aW9uIGdlbmVyYXRpb24gbG9naWMgZm9yIGV4dGVuZGVkIHJlZ2lzdGVyIGFkZC9zdWIgaW5zdHJ1Y3Rpb25zIChgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZ2ApIGFuZCBtb2RpZmllcyB0aGUgYXJtNjQgQlBGIEpJVCAoYGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAsIGBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NgKSB0byBoYW5kbGUgYXJlbmEgcG9pbnRlcnMgaW4ga2Z1bmMgY2FsbHMgYW5kIHN0cnVjdF9vcHMgY2FsbGJhY2tzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIGtlcm5lbCAoQlBGIEpJVCkgdGhhdCBhcmUgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDo1MTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjUxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGV4dGVuZHMgdGhlIGFybTY0IEJQRiBKSVQgY29tcGlsZXIgdG8gc3VwcG9ydCBCUEYgYXJlbmEgYXJndW1lbnRzLiBJdCBpbnRyb2R1Y2VzIG5ldyBpbnN0cnVjdGlvbiBlbmNvZGluZyBmdW5jdGlvbnMgZm9yIGFybTY0IChlLmcuLCBgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZ2ApIGFuZCBtb2RpZmllcyB0aGUgSklUIGNvbXBpbGVyIChgYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmNgKSB0byBlbWl0IGluc3RydWN0aW9ucyB0aGF0IHJlYmFzZSBhcmVuYSBwb2ludGVycy4gVGhlIGNoYW5nZXMgYXJlIHN0cmljdGx5IHJlbGF0ZWQgdG8gSklUIGNvbXBpbGF0aW9uIGxvZ2ljIGFuZCBpbnN0cnVjdGlvbiBlbWlzc2lvbi4gVGhleSBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcga2VybmVsIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IGFsbG9jYXRlIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgY291bGQgYmUgbGVmdCB1bmluaXRpYWxpemVkLiBBbnkgYnVncyBpbiB0aGUgSklUIGNvbXBpbGVyIHdvdWxkIGxpa2VseSByZXN1bHQgaW4gaW52YWxpZCBpbnN0cnVjdGlvbiBnZW5lcmF0aW9uLCBjcmFzaGVzLCBvciBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyBpbiB0aGUgSklUZWQgY29kZSwgd2hpY2ggYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIHRlc3RpbmcuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5ZmQzODIyNWMyM2U4YTk1ZWFmMzg4ZjI3M2RjMzM4NzFiMjI0ZWJmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMTMgMjA6NTA6MTEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0IGIvRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdAppbmRleCAxMGU3MjVjYmU2NGNkLi44NWY3M2UwYmJkMGZmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3QKQEAgLTMwMSw5ICYjNDM7MzAxLDkgQEAgQW4gZXhhbXBsZSBpcyBnaXZlbiBiZWxvdzo6CiAgICAgICAgIH0KIAogQ2FsbGluZyBzdWNoIGEga2Z1bmMgcmVxdWlyZXMgdGhlIHByb2dyYW0gdG8gdXNlIGFuIGFyZW5hIG1hcCBhbmQgYSBKSVQgd2l0aAotYXJlbmEgYXJndW1lbnQgc3VwcG9ydCAoY3VycmVudGx5IHg4Ni02NCk7IHZlcmlmaWNhdGlvbiBmYWlscyBvdGhlcndpc2UuIFRoZQotcHJvZ3JhbSBjYW4gcGFzcyBhbnkgdmFsdWUgd2l0aG91dCBjb21wcm9taXNpbmcgdGhlIGtlcm5lbC4gQSB2YWx1ZSB0aGF0IGRvZXMKLW5vdCBwb2ludCBpbnRvIHRoZSBhcmVuYSBpcyBhIHByb2dyYW0gYnVnLgomIzQzO2FyZW5hIGFyZ3VtZW50IHN1cHBvcnQgKGN1cnJlbnRseSB4ODYtNjQgYW5kIGFybTY0KTsgdmVyaWZpY2F0aW9uIGZhaWxzCiYjNDM7b3RoZXJ3aXNlLiBUaGUgcHJvZ3JhbSBjYW4gcGFzcyBhbnkgdmFsdWUgd2l0aG91dCBjb21wcm9taXNpbmcgdGhlIGtlcm5lbC4gQQomIzQzO3ZhbHVlIHRoYXQgZG9lcyBub3QgcG9pbnQgaW50byB0aGUgYXJlbmEgaXMgYSBwcm9ncmFtIGJ1Zy4KIAogVGhlIHN1ZmZpeGVzIGhhdmUgdGhlIHNhbWUgbWVhbmluZyBvbiB0aGUgYXJndW1lbnRzIG9mIHN0cnVjdF9vcHMgc3R1YgogZnVuY3Rpb25zLCB3aXRoIHRoZSBjb252ZXJzaW9uIHJ1bm5pbmcgaW4gdGhlIG9wcG9zaXRlIGRpcmVjdGlvbi4gVGhlCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2luc24uaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vaW5zbi5oCmluZGV4IGNjMDcwMmZhNjRhNzkuLjFjZTc1YTQ0MjYzODcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vaW5zbi5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vaW5zbi5oCkBAIC0yMDUsNiAmIzQzOzIwNSwxOCBAQCBlbnVtIGFhcmNoNjRfaW5zbl9hZHNiX3R5cGUgewogCUFBUkNINjRfSU5TTl9BRFNCX1NVQl9TRVRGTEFHUwogfTsKIAomIzQzOy8qIG9wdGlvbiBmaWVsZCBvZiBhZGQvc3ViIChleHRlbmRlZCByZWdpc3RlcikgKi8KJiM0MztlbnVtIGFhcmNoNjRfaW5zbl9leHRlbmRfdHlwZSB7CiYjNDM7CUFBUkNINjRfSU5TTl9FWFRFTkRfVVhUQiwKJiM0MzsJQUFSQ0g2NF9JTlNOX0VYVEVORF9VWFRILAomIzQzOwlBQVJDSDY0X0lOU05fRVhURU5EX1VYVFcsCiYjNDM7CUFBUkNINjRfSU5TTl9FWFRFTkRfVVhUWCwKJiM0MzsJQUFSQ0g2NF9JTlNOX0VYVEVORF9TWFRCLAomIzQzOwlBQVJDSDY0X0lOU05fRVhURU5EX1NYVEgsCiYjNDM7CUFBUkNINjRfSU5TTl9FWFRFTkRfU1hUVywKJiM0MzsJQUFSQ0g2NF9JTlNOX0VYVEVORF9TWFRYLAomIzQzO307CiYjNDM7CiBlbnVtIGFhcmNoNjRfaW5zbl9tb3Zld2lkZV90eXBlIHsKIAlBQVJDSDY0X0lOU05fTU9WRVdJREVfWkVSTywKIAlBQVJDSDY0X0lOU05fTU9WRVdJREVfS0VFUCwKQEAgLTM3OCw2ICYjNDM7MzkwLDEwIEBAIF9fQUFSQ0g2NF9JTlNOX0ZVTkNTKGFkZCwJMHg3RjIwMDAwMCwgMHgwQjAwMDAwMCkKIF9fQUFSQ0g2NF9JTlNOX0ZVTkNTKGFkZHMsCTB4N0YyMDAwMDAsIDB4MkIwMDAwMDApCiBfX0FBUkNINjRfSU5TTl9GVU5DUyhzdWIsCTB4N0YyMDAwMDAsIDB4NEIwMDAwMDApCiBfX0FBUkNINjRfSU5TTl9GVU5DUyhzdWJzLAkweDdGMjAwMDAwLCAweDZCMDAwMDAwKQomIzQzO19fQUFSQ0g2NF9JTlNOX0ZVTkNTKGFkZF9leHQsCTB4N0ZFMDAwMDAsIDB4MEIyMDAwMDApCiYjNDM7X19BQVJDSDY0X0lOU05fRlVOQ1MoYWRkc19leHQsCTB4N0ZFMDAwMDAsIDB4MkIyMDAwMDApCiYjNDM7X19BQVJDSDY0X0lOU05fRlVOQ1Moc3ViX2V4dCwJMHg3RkUwMDAwMCwgMHg0QjIwMDAwMCkKJiM0MztfX0FBUkNINjRfSU5TTl9GVU5DUyhzdWJzX2V4dCwJMHg3RkUwMDAwMCwgMHg2QjIwMDAwMCkKIF9fQUFSQ0g2NF9JTlNOX0ZVTkNTKG1hZGQsCTB4N0ZFMDgwMDAsIDB4MUIwMDAwMDApCiBfX0FBUkNINjRfSU5TTl9GVU5DUyhtc3ViLAkweDdGRTA4MDAwLCAweDFCMDA4MDAwKQogX19BQVJDSDY0X0lOU05fRlVOQ1ModWRpdiwJMHg3RkUwRkMwMCwgMHgxQUMwMDgwMCkKQEAgLTYzNyw2ICYjNDM7NjUzLDEzIEBAIHUzMiBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfc2hpZnRlZF9yZWcoZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgZHN0LAogCQkJCQkgaW50IHNoaWZ0LAogCQkJCQkgZW51bSBhYXJjaDY0X2luc25fdmFyaWFudCB2YXJpYW50LAogCQkJCQkgZW51bSBhYXJjaDY0X2luc25fYWRzYl90eXBlIHR5cGUpOwomIzQzO3UzMiBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnKGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIGRzdCwKJiM0MzsJCQkJCSAgZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgc3JjLAomIzQzOwkJCQkJICBlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciByZWcsCiYjNDM7CQkJCQkgIGVudW0gYWFyY2g2NF9pbnNuX2V4dGVuZF90eXBlIGV4dGVuZCwKJiM0MzsJCQkJCSAgaW50IHNoaWZ0LAomIzQzOwkJCQkJICBlbnVtIGFhcmNoNjRfaW5zbl92YXJpYW50IHZhcmlhbnQsCiYjNDM7CQkJCQkgIGVudW0gYWFyY2g2NF9pbnNuX2Fkc2JfdHlwZSB0eXBlKTsKIHUzMiBhYXJjaDY0X2luc25fZ2VuX2RhdGExKGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIGRzdCwKIAkJCSAgIGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIHNyYywKIAkJCSAgIGVudW0gYWFyY2g2NF9pbnNuX3ZhcmlhbnQgdmFyaWFudCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbGliL2luc24uYyBiL2FyY2gvYXJtNjQvbGliL2luc24uYwppbmRleCAzN2NlNzVmN2YxZjA4Li5lNzBhYzAyMzg1MTUzIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2xpYi9pbnNuLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9saWIvaW5zbi5jCkBAIC05ODYsNiAmIzQzOzk4Niw2NiBAQCB1MzIgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX3NoaWZ0ZWRfcmVnKGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIGRzdCwKIAlyZXR1cm4gYWFyY2g2NF9pbnNuX2VuY29kZV9pbW1lZGlhdGUoQUFSQ0g2NF9JTlNOX0lNTV82LCBpbnNuLCBzaGlmdCk7CiB9CiAKJiM0MzsvKgomIzQzOyAqIFVubGlrZSB0aGUgc2hpZnRlZC1yZWdpc3RlciBmb3JtLCByZWdpc3RlciAzMSBpcyBub3QgWFpSIGV2ZXJ5d2hlcmUgaGVyZToKJiM0MzsgKiBpdCBlbmNvZGVzIFNQIGZvciBAc3JjLCBhbmQgZm9yIEBkc3QgdG9vIHVubGVzcyBAdHlwZSBzZXRzIHRoZSBmbGFncy4gT25seQomIzQzOyAqIEByZWcga2VlcHMgdGhlIFhaUiBtZWFuaW5nLgomIzQzOyAqLwomIzQzO3UzMiBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnKGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIGRzdCwKJiM0MzsJCQkJCSAgZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgc3JjLAomIzQzOwkJCQkJICBlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciByZWcsCiYjNDM7CQkJCQkgIGVudW0gYWFyY2g2NF9pbnNuX2V4dGVuZF90eXBlIGV4dGVuZCwKJiM0MzsJCQkJCSAgaW50IHNoaWZ0LAomIzQzOwkJCQkJICBlbnVtIGFhcmNoNjRfaW5zbl92YXJpYW50IHZhcmlhbnQsCiYjNDM7CQkJCQkgIGVudW0gYWFyY2g2NF9pbnNuX2Fkc2JfdHlwZSB0eXBlKQomIzQzO3sKJiM0MzsJdTMyIGluc247CiYjNDM7CiYjNDM7CXN3aXRjaCAodHlwZSkgewomIzQzOwljYXNlIEFBUkNINjRfSU5TTl9BRFNCX0FERDoKJiM0MzsJCWluc24gPSBhYXJjaDY0X2luc25fZ2V0X2FkZF9leHRfdmFsdWUoKTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEFBUkNINjRfSU5TTl9BRFNCX1NVQjoKJiM0MzsJCWluc24gPSBhYXJjaDY0X2luc25fZ2V0X3N1Yl9leHRfdmFsdWUoKTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEFBUkNINjRfSU5TTl9BRFNCX0FERF9TRVRGTEFHUzoKJiM0MzsJCWluc24gPSBhYXJjaDY0X2luc25fZ2V0X2FkZHNfZXh0X3ZhbHVlKCk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBBQVJDSDY0X0lOU05fQURTQl9TVUJfU0VURkxBR1M6CiYjNDM7CQlpbnNuID0gYWFyY2g2NF9pbnNuX2dldF9zdWJzX2V4dF92YWx1ZSgpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlwcl9lcnIoJiMzNDslczogdW5rbm93biBhZGQvc3ViIGVuY29kaW5nICVkXG4mIzM0OywgX19mdW5jX18sIHR5cGUpOwomIzQzOwkJcmV0dXJuIEFBUkNINjRfQlJFQUtfRkFVTFQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc3dpdGNoICh2YXJpYW50KSB7CiYjNDM7CWNhc2UgQUFSQ0g2NF9JTlNOX1ZBUklBTlRfMzJCSVQ6CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBBQVJDSDY0X0lOU05fVkFSSUFOVF82NEJJVDoKJiM0MzsJCWluc24gfD0gQUFSQ0g2NF9JTlNOX1NGX0JJVDsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcHJfZXJyKCYjMzQ7JXM6IHVua25vd24gdmFyaWFudCBlbmNvZGluZyAlZFxuJiMzNDssIF9fZnVuY19fLCB2YXJpYW50KTsKJiM0MzsJCXJldHVybiBBQVJDSDY0X0JSRUFLX0ZBVUxUOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChzaGlmdCAmbHQ7IDAgfHwgc2hpZnQgJmd0OyA0KSB7CiYjNDM7CQlwcl9lcnIoJiMzNDslczogaW52YWxpZCBzaGlmdCBlbmNvZGluZyAlZFxuJiMzNDssIF9fZnVuY19fLCBzaGlmdCk7CiYjNDM7CQlyZXR1cm4gQUFSQ0g2NF9CUkVBS19GQVVMVDsKJiM0MzsJfQomIzQzOwomIzQzOwlpbnNuID0gYWFyY2g2NF9pbnNuX2VuY29kZV9yZWdpc3RlcihBQVJDSDY0X0lOU05fUkVHVFlQRV9SRCwgaW5zbiwgZHN0KTsKJiM0MzsKJiM0MzsJaW5zbiA9IGFhcmNoNjRfaW5zbl9lbmNvZGVfcmVnaXN0ZXIoQUFSQ0g2NF9JTlNOX1JFR1RZUEVfUk4sIGluc24sIHNyYyk7CiYjNDM7CiYjNDM7CWluc24gPSBhYXJjaDY0X2luc25fZW5jb2RlX3JlZ2lzdGVyKEFBUkNINjRfSU5TTl9SRUdUWVBFX1JNLCBpbnNuLCByZWcpOwomIzQzOwomIzQzOwkvKiBvcHRpb24gaW4gYml0cyBbMTU6MTNdIGFuZCBpbW0zIGluIFsxMjoxMF0gdG9nZXRoZXIgZmlsbCBJTU1fNiAqLwomIzQzOwlyZXR1cm4gYWFyY2g2NF9pbnNuX2VuY29kZV9pbW1lZGlhdGUoQUFSQ0g2NF9JTlNOX0lNTV82LCBpbnNuLAomIzQzOwkJCQkJICAgICAoZXh0ZW5kICZsdDsmbHQ7IDMpIHwgc2hpZnQpOwomIzQzO30KJiM0MzsKIHUzMiBhYXJjaDY0X2luc25fZ2VuX2RhdGExKGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIGRzdCwKIAkJCSAgIGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIHNyYywKIAkJCSAgIGVudW0gYWFyY2g2NF9pbnNuX3ZhcmlhbnQgdmFyaWFudCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXQuaCBiL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXQuaAppbmRleCBkMTNkZTQyMjJjZmI3Li5iMmZlNmU2ZGNmNDQ3IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L25ldC9icGZfaml0LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9uZXQvYnBmX2ppdC5oCkBAIC0yNDMsNiAmIzQzOzI0MywxNyBAQAogLyogUm4gLSBSbTsgc2V0IGNvbmRpdGlvbiBmbGFncyAqLwogI2RlZmluZSBBNjRfQ01QKHNmLCBSbiwgUm0pIEE2NF9TVUJTKHNmLCBBNjRfWlIsIFJuLCBSbSkKIAomIzQzOy8qIEFkZC9zdWJ0cmFjdCAoZXh0ZW5kZWQgcmVnaXN0ZXIpICovCiYjNDM7I2RlZmluZSBBNjRfQUREU1VCX0VSRUcoc2YsIFJkLCBSbiwgUm0sIGV4dCwgc2hpZnQsIHR5cGUpIFwKJiM0MzsJYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZyhSZCwgUm4sIFJtLCBcCiYjNDM7CQlBQVJDSDY0X0lOU05fRVhURU5EXyMjZXh0LCBzaGlmdCwgQTY0X1ZBUklBTlQoc2YpLCBcCiYjNDM7CQlBQVJDSDY0X0lOU05fQURTQl8jI3R5cGUpCiYjNDM7LyogUmQgPSBSbiAmIzQzOyAoRVhUKFJtKSAmbHQ7Jmx0OyBzaGlmdCkgKi8KJiM0MzsjZGVmaW5lIEE2NF9BRERfRVhUKHNmLCBSZCwgUm4sIFJtLCBleHQsIHNoaWZ0KSBcCiYjNDM7CUE2NF9BRERTVUJfRVJFRyhzZiwgUmQsIFJuLCBSbSwgZXh0LCBzaGlmdCwgQUREKQomIzQzOy8qIFJkID0gUm4gJiM0MzsgKHUzMilSbSAqLwomIzQzOyNkZWZpbmUgQTY0X0FERF9VWFRXKFJkLCBSbiwgUm0pIEE2NF9BRERfRVhUKDEsIFJkLCBSbiwgUm0sIFVYVFcsIDApCiYjNDM7CiAvKiBEYXRhLXByb2Nlc3NpbmcgKDEgc291cmNlKSAqLwogI2RlZmluZSBBNjRfREFUQTEoc2YsIFJkLCBSbiwgdHlwZSkgYWFyY2g2NF9pbnNuX2dlbl9kYXRhMShSZCwgUm4sIFwKIAlBNjRfVkFSSUFOVChzZiksIEFBUkNINjRfSU5TTl9EQVRBMV8jI3R5cGUpCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jCmluZGV4IDc0YjQwODM3OTFkYTMuLmMxOGUwMDVhNDFkYmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jCkBAIC0xMjU2LDYgJiM0MzsxMjU2LDQzIEBAIHN0YXRpYyB2b2lkIGVtaXRfc3RhY2tfYXJnX3N0b3JlX2ltbShzMzIgaW1tLCBzMTYgYnBmX29mZiwgY29uc3QgdTggdG1wLCBzdHJ1Y3QKIAl9CiB9CiAKJiM0MzsvKgomIzQzOyAqIFJlYmFzZSB0aGUgX19hcmVuYSBhcmdzIG9mIGEga2Z1bmMgY2FsbCB0byBhcmVuYSBrZXJuZWwgYWRkcmVzc2VzLAomIzQzOyAqIHhOID0ga2Vybl92bV9zdGFydCAmIzQzOyAodTMyKXhOLCB3aXRoIHRoZSBhcmVuYSBiYXNlIHJlZ2lzdGVyIGhvbGRpbmcKJiM0MzsgKiBrZXJuX3ZtX3N0YXJ0LiBBIG51bGxhYmxlIGFyZyBwcmVzZXJ2ZXMgTlVMTCBieSBza2lwcGluZyB0aGUgYWRkLCB0ZXN0ZWQKJiM0MzsgKiBvbiB0aGUgdHJ1bmNhdGVkIHZhbHVlIGFzIGFyZW5hIE5VTEwgaXMgb2Zmc2V0IDAuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBlbWl0X2tmdW5jX2FyZW5hX2FyZ3Moc3RydWN0IGppdF9jdHggKmN0eCwgY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKQomIzQzO3sKJiM0MzsJY29uc3QgdTggYXJlbmFfdm1fYmFzZSA9IGJwZjJhNjRbQVJFTkFfVk1fU1RBUlRdOwomIzQzOwljb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKmZtOwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJZm0gPSBicGZfaml0X2ZpbmRfa2Z1bmNfbW9kZWwoY3R4LSZndDtwcm9nLCBpbnNuKTsKJiM0MzsJaWYgKCFmbSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbWluX3QoaW50LCBmbS0mZ3Q7bnJfYXJncywgTUFYX0JQRl9GVU5DX1JFR19BUkdTKTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWNvbnN0IHU4IHJlZyA9IGJwZjJhNjRbQlBGX1JFR18xICYjNDM7IGldOwomIzQzOwkJdTggZmxhZ3MgPSBmbS0mZ3Q7YXJnX2ZsYWdzW2ldOwomIzQzOwomIzQzOwkJaWYgKCEoZmxhZ3MgJmFtcDsgQlRGX0ZNT0RFTF9BUkVOQV9BUkcpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJaWYgKFdBUk5fT05fT05DRSghY3R4LSZndDthcmVuYV92bV9zdGFydCkpCiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CQlpZiAoZmxhZ3MgJmFtcDsgQlRGX0ZNT0RFTF9OVUxMQUJMRV9BUkcpIHsKJiM0MzsJCQkvKiAzMi1iaXQgbW92IGNsZWFycyB0aGUgdXBwZXIgMzIgYml0cyAqLwomIzQzOwkJCWVtaXQoQTY0X01PVigwLCByZWcsIHJlZyksIGN0eCk7CiYjNDM7CQkJLyogc2tpcCB0aGUgYWRkIHNvIHRoYXQgTlVMTCBzdGF5cyBOVUxMICovCiYjNDM7CQkJZW1pdChBNjRfQ0JaKDAsIHJlZywgMiksIGN0eCk7CiYjNDM7CQl9CiYjNDM7CQllbWl0KEE2NF9BRERfVVhUVyhyZWcsIGFyZW5hX3ZtX2Jhc2UsIHJlZyksIGN0eCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogLyogSklUcyBhbiBlQlBGIGluc3RydWN0aW9uLgogICogUmV0dXJuczoKICAqIDAgIC0gc3VjY2Vzc2Z1bGx5IEpJVGVkIGFuIDgtYnl0ZSBlQlBGIGluc3RydWN0aW9uLgpAQCAtMTY3OCw2ICYjNDM7MTcxNSwxMSBAQCBzdGF0aWMgaW50IGJ1aWxkX2luc24oY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9pbnNuCiAJCQkJCSAgICAmYW1wO2Z1bmNfYWRkciwgJmFtcDtmdW5jX2FkZHJfZml4ZWQpOwogCQlpZiAocmV0ICZsdDsgMCkKIAkJCXJldHVybiByZXQ7CiYjNDM7CQlpZiAoaW5zbi0mZ3Q7c3JjX3JlZyA9PSBCUEZfUFNFVURPX0tGVU5DX0NBTEwpIHsKJiM0MzsJCQlyZXQgPSBlbWl0X2tmdW5jX2FyZW5hX2FyZ3MoY3R4LCBpbnNuKTsKJiM0MzsJCQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQkJcmV0dXJuIHJldDsKJiM0MzsJCX0KIAkJZW1pdF9jYWxsKGZ1bmNfYWRkciwgY3R4KTsKIAkJLyoKIAkJICogQ2FsbCB0byBhcmNoX2JwZl90aW1lZF9tYXlfZ290bygpIGlzIGVtaXR0ZWQgYnkgdGhlCkBAIC0yMzUxLDYgJiM0MzsyMzkzLDExIEBAIGJvb2wgYnBmX2ppdF9zdXBwb3J0c19zdGFja19hcmdzKHZvaWQpCiAJcmV0dXJuIHRydWU7CiB9CiAKJiM0Mztib29sIGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncyh2b2lkKQomIzQzO3sKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwogdm9pZCAqYnBmX2FyY2hfdGV4dF9jb3B5KHZvaWQgKmRzdCwgdm9pZCAqc3JjLCBzaXplX3QgbGVuKQogewogCWlmICghYWFyY2g2NF9pbnNuX2NvcHkoZHN0LCBzcmMsIGxlbikpCkBAIC0yNTI0LDM0ICYjNDM7MjU3MSw3NiBAQCBzdGF0aWMgdm9pZCBjbGVhcl9nYXJiYWdlKHN0cnVjdCBqaXRfY3R4ICpjdHgsIGludCByZWcsIGludCBlZmZlY3RpdmVfYnl0ZXMpCiAJfQogfQogCiYjNDM7LyoKJiM0MzsgKiBDb252ZXJ0IGFuIGFyZW5hIGtlcm5lbCBhZGRyZXNzIGludG8gdGhlIGFyZW5hIHBvaW50ZXIgZm9ybSBvbiBpdHMgd2F5IGludG8KJiM0MzsgKiB0aGUgQlBGIGN0eCwgZHN0ID0gKHUzMikoc3JjIC0ga2Vybl92bV9zdGFydCksIHdpdGggQGJhc2VfbG8gaG9sZGluZyB0aGUgbG93CiYjNDM7ICogMzIgYml0cyBvZiBrZXJuX3ZtX3N0YXJ0LiBBIG51bGxhYmxlIGFyZyBwcmVzZXJ2ZXMgTlVMTCwgdGVzdGVkIG9uIHRoZSBmdWxsCiYjNDM7ICogNjQtYml0IGtlcm5lbCBwb2ludGVyLiBUaGUgMzItYml0IHN1YnRyYWN0aW9uIGJvdGggdHJ1bmNhdGVzIGFuZCBjbGVhcnMgdGhlCiYjNDM7ICogdXBwZXIgaGFsZiwgc28gdGhlIHN0b3JlZCB2YWx1ZSBzYXRpc2ZpZXMgdGhlIEpJVCBpbnZhcmlhbnQgZm9yIGFyZW5hCiYjNDM7ICogcG9pbnRlciByZWdpc3RlcnMuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgZW1pdF9hcmVuYV9hcmdfY29udihzdHJ1Y3Qgaml0X2N0eCAqY3R4LCB1OCBkc3QsIHU4IHNyYywgYm9vbCBudWxsYWJsZSwgdTggYmFzZV9sbykKJiM0Mzt7CiYjNDM7CWlmIChudWxsYWJsZSkgewomIzQzOwkJaWYgKGRzdCAhPSBzcmMpCiYjNDM7CQkJZW1pdChBNjRfTU9WKDEsIGRzdCwgc3JjKSwgY3R4KTsKJiM0MzsJCS8qIHNraXAgdGhlIHN1YnRyYWN0aW9uIHNvIHRoYXQgTlVMTCBzdGF5cyBOVUxMICovCiYjNDM7CQllbWl0KEE2NF9DQlooMSwgZHN0LCAyKSwgY3R4KTsKJiM0MzsJCXNyYyA9IGRzdDsKJiM0MzsJfQomIzQzOwllbWl0KEE2NF9TVUIoMCwgZHN0LCBzcmMsIGJhc2VfbG8pLCBjdHgpOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHNhdmVfYXJncyhzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBpbnQgYmFyZ3Nfb2ZmLCBpbnQgb2FyZ3Nfb2ZmLAotCQkgICAgICBjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sCi0JCSAgICAgIGNvbnN0IHN0cnVjdCBhcmdfYXV4ICphLAotCQkgICAgICBib29sIGZvcl9jYWxsX29yaWdpbikKJiM0MzsJCSAgICAgIGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgY29uc3Qgc3RydWN0IGFyZ19hdXggKmEsCiYjNDM7CQkgICAgICBib29sIGZvcl9jYWxsX29yaWdpbiwgYm9vbCBpc19zdHJ1Y3Rfb3BzLCB1NjQgYXJlbmFfYmFzZSkKIHsKLQlpbnQgaTsKLQlpbnQgcmVnOwotCWludCBkb2ZmOwotCWludCBzb2ZmOwotCWludCBzbG90czsKIAl1OCB0bXAgPSBicGYyYTY0W1RNUF9SRUdfMV07CiYjNDM7CXU4IGJhc2VfbG8gPSBicGYyYTY0W1RNUF9SRUdfMl07CiYjNDM7CWludCBpLCByZWcsIGRvZmYsIHNvZmYsIHNsb3RzOwomIzQzOwomIzQzOwkvKiBvbmx5IHRoZSBsb3cgMzIgYml0cyBvZiB0aGUgYmFzZSB0YWtlIHBhcnQgaW4gdGhlIHN1YnRyYWN0aW9uICovCiYjNDM7CWlmIChhcmVuYV9iYXNlKQomIzQzOwkJZW1pdF9hNjRfbW92X2koMCwgYmFzZV9sbywgKHMzMikodTMyKWFyZW5hX2Jhc2UsIGN0eCk7CiAKIAkvKiBzdG9yZSBhcmd1bWVudHMgdG8gdGhlIHN0YWNrIGZvciB0aGUgYnBmIHByb2dyYW0sIG9yIHJlc3RvcmUKIAkgKiBhcmd1bWVudHMgZnJvbSBzdGFjayBmb3IgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uCiAJICovCi0JZm9yIChyZWcgPSAwOyByZWcgJmx0OyBhLSZndDtyZWdzX2Zvcl9hcmdzOyByZWcmIzQzOyYjNDM7KSB7Ci0JCWVtaXQoZm9yX2NhbGxfb3JpZ2luID8KLQkJICAgICBBNjRfTERSNjRJKHJlZywgQTY0X1NQLCBiYXJnc19vZmYpIDoKLQkJICAgICBBNjRfU1RSNjRJKHJlZywgQTY0X1NQLCBiYXJnc19vZmYpLAotCQkgICAgIGN0eCk7Ci0JCWJhcmdzX29mZiAmIzQzOz0gODsKJiM0MzsJZm9yIChpID0gMCwgcmVnID0gMDsgaSAmbHQ7IGEtJmd0O2FyZ3NfaW5fcmVnczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWJvb2wgYXJlbmFfYXJnID0gYXJlbmFfYmFzZSAmYW1wOyZhbXA7IChtLSZndDthcmdfZmxhZ3NbaV0gJmFtcDsgQlRGX0ZNT0RFTF9BUkVOQV9BUkcpOwomIzQzOwkJYm9vbCBudWxsYWJsZSA9IG0tJmd0O2FyZ19mbGFnc1tpXSAmYW1wOyBCVEZfRk1PREVMX05VTExBQkxFX0FSRzsKJiM0MzsKJiM0MzsJCXNsb3RzID0gKG0tJmd0O2FyZ19zaXplW2ldICYjNDM7IDcpIC8gODsKJiM0MzsJCXdoaWxlIChzbG90cy0tICZndDsgMCkgewomIzQzOwkJCWlmIChmb3JfY2FsbF9vcmlnaW4pIHsKJiM0MzsJCQkJZW1pdChBNjRfTERSNjRJKHJlZywgQTY0X1NQLCBiYXJnc19vZmYpLCBjdHgpOwomIzQzOwkJCX0gZWxzZSBpZiAoYXJlbmFfYXJnKSB7CiYjNDM7CQkJCWVtaXRfYXJlbmFfYXJnX2NvbnYoY3R4LCB0bXAsIHJlZywgbnVsbGFibGUsIGJhc2VfbG8pOwomIzQzOwkJCQllbWl0KEE2NF9TVFI2NEkodG1wLCBBNjRfU1AsIGJhcmdzX29mZiksIGN0eCk7CiYjNDM7CQkJfSBlbHNlIHsKJiM0MzsJCQkJZW1pdChBNjRfU1RSNjRJKHJlZywgQTY0X1NQLCBiYXJnc19vZmYpLCBjdHgpOwomIzQzOwkJCX0KJiM0MzsJCQlyZWcmIzQzOyYjNDM7OwomIzQzOwkJCWJhcmdzX29mZiAmIzQzOz0gODsKJiM0MzsJCX0KIAl9CiAKLQlzb2ZmID0gMzI7IC8qIG9uIHN0YWNrIGFyZ3VtZW50cyBzdGFydCBmcm9tIEZQICYjNDM7IDMyICovCiYjNDM7CS8qCiYjNDM7CSAqIE9uLXN0YWNrIGFyZ3VtZW50cyBzdGFydCBhYm92ZSB0aGUgZnJhbWUocykgcHVzaGVkIGJ5IHRoZSB0cmFtcG9saW5lCiYjNDM7CSAqIHByb2xvZ3VlLiBFbnRlcmVkIHRocm91Z2ggdGhlIGZlbnRyeSBjYWxsIGZyb20gYSB0cmFjZWQgZnVuY3Rpb24sIHRoZQomIzQzOwkgKiBwcm9sb2d1ZSBzYXZlcyBib3RoIHRoZSBwYXJlbnQgKEZQL3g5KSBhbmQgdGhlIHRyYWNlZCBmdW5jdGlvbgomIzQzOwkgKiAoRlAvTFIpIGZyYW1lcywgc28gdGhlIGFyZ3VtZW50cyBzdGFydCBhdCBGUCAmIzQzOyAzMi4gQSBzdHJ1Y3Rfb3BzCiYjNDM7CSAqIGNhbGxiYWNrIGlzIGNhbGxlZCBpbmRpcmVjdGx5IGFuZCBvbmx5IHRoZSBGUC9MUiBmcmFtZSBpcyBzYXZlZCwgc28KJiM0MzsJICogdGhleSBzdGFydCBhdCBGUCAmIzQzOyAxNi4KJiM0MzsJICovCiYjNDM7CXNvZmYgPSBpc19zdHJ1Y3Rfb3BzID8gMTYgOiAzMjsKIAlkb2ZmID0gKGZvcl9jYWxsX29yaWdpbiA/IG9hcmdzX29mZiA6IGJhcmdzX29mZik7CiAKIAkvKiBzYXZlIG9uIHN0YWNrIGFyZ3VtZW50cyAqLwogCWZvciAoaSA9IGEtJmd0O2FyZ3NfaW5fcmVnczsgaSAmbHQ7IG0tJmd0O25yX2FyZ3M7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlib29sIGFyZW5hX2FyZyA9IGFyZW5hX2Jhc2UgJmFtcDsmYW1wOyAobS0mZ3Q7YXJnX2ZsYWdzW2ldICZhbXA7IEJURl9GTU9ERUxfQVJFTkFfQVJHKTsKJiM0MzsJCWJvb2wgbnVsbGFibGUgPSBtLSZndDthcmdfZmxhZ3NbaV0gJmFtcDsgQlRGX0ZNT0RFTF9OVUxMQUJMRV9BUkc7CiYjNDM7CiAJCXNsb3RzID0gKG0tJmd0O2FyZ19zaXplW2ldICYjNDM7IDcpIC8gODsKIAkJLyogdmVyaWZpZXIgZW5zdXJlcyBhcmdfc2l6ZSAmbHQ7PSAxNiwgc28gc2xvdHMgZXF1YWxzIDEgb3IgMiAqLwogCQl3aGlsZSAoc2xvdHMtLSAmZ3Q7IDApIHsKQEAgLTI1NjEsNiAmIzQzOzI2NTAsMTUgQEAgc3RhdGljIHZvaWQgc2F2ZV9hcmdzKHN0cnVjdCBqaXRfY3R4ICpjdHgsIGludCBiYXJnc19vZmYsIGludCBvYXJnc19vZmYsCiAJCQkgKi8KIAkJCWlmIChzbG90cyA9PSAwICZhbXA7JmFtcDsgIWZvcl9jYWxsX29yaWdpbikKIAkJCQljbGVhcl9nYXJiYWdlKGN0eCwgdG1wLCBtLSZndDthcmdfc2l6ZVtpXSAlIDgpOwomIzQzOwkJCS8qCiYjNDM7CQkJICogTm8gZ3VhcmQgb24gZm9yX2NhbGxfb3JpZ2luIGhlcmU6IG9ubHkgdGhlIGluZGlyZWN0CiYjNDM7CQkJICogdHJhbXBvbGluZSBpcyBnaXZlbiBhIGJhc2UsIGFuZCBpdCBuZXZlciBjYWxscyB0aGUKJiM0MzsJCQkgKiBvcmlnaW5hbCBmdW5jdGlvbiwgc28gYXJndW1lbnRzIGFyZSBuZXZlciBjb252ZXJ0ZWQKJiM0MzsJCQkgKiBvbiB0aGVpciB3YXkgYmFjayBvdXQgdG8gaXQuIFNlZSB0aGUgV0FSTl9PTl9PTkNFKCkKJiM0MzsJCQkgKiBpbiBwcmVwYXJlX3RyYW1wb2xpbmUoKS4KJiM0MzsJCQkgKi8KJiM0MzsJCQlpZiAoYXJlbmFfYXJnKQomIzQzOwkJCQllbWl0X2FyZW5hX2FyZ19jb252KGN0eCwgdG1wLCB0bXAsIG51bGxhYmxlLCBiYXNlX2xvKTsKIAkJCWVtaXQoQTY0X1NUUjY0SSh0bXAsIEE2NF9TUCwgZG9mZiksIGN0eCk7CiAJCQlzb2ZmICYjNDM7PSA4OwogCQkJZG9mZiAmIzQzOz0gODsKQEAgLTI2MjAsOCAmIzQzOzI3MTgsMjEgQEAgc3RhdGljIGludCBwcmVwYXJlX3RyYW1wb2xpbmUoc3RydWN0IGppdF9jdHggKmN0eCwgc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sCiAJYm9vbCBpc19zdHJ1Y3Rfb3BzID0gaXNfc3RydWN0X29wc190cmFtcChmZW50cnkpOwogCWludCBjb29raWVfb2ZmLCBjb29raWVfY250LCBjb29raWVfYmFyZ3Nfb2ZmOwogCWludCBmc2Vzc2lvbl9jbnQgPSBicGZfZnNlc3Npb25fY250KHRub2Rlcyk7CiYjNDM7CXU2NCBhcmVuYV9iYXNlOwogCXU2NCBmdW5jX21ldGE7CiAKJiM0MzsJLyoKJiM0MzsJICogRl9JTkRJUkVDVCBpcyBvbmx5IGNvbXBhdGlibGUgd2l0aCBGX1JFVF9GRU5UUllfUkVULCBpdCBpcyBleHBsaWNpdGx5CiYjNDM7CSAqIGluY29tcGF0aWJsZSB3aXRoIEZfQ0FMTF9PUklHIHwgRl9TS0lQX0ZSQU1FIHwgRl9JUF9BUkcgYmVjYXVzZQomIzQzOwkgKiBAZnVuY19hZGRyLiBBcmVuYSBjb252ZXJzaW9uIHJlbGllcyBvbiB0aGlzOiBicGZfdHJhbXBfYXJlbmFfYmFzZSgpCiYjNDM7CSAqIG9ubHkgcmV0dXJucyBhIGJhc2UgZm9yIHRoZSBpbmRpcmVjdCB0cmFtcG9saW5lLCB3aGljaCB0aGVyZWZvcmUKJiM0MzsJICogbmV2ZXIgY2FsbHMgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uIHdpdGggY29udmVydGVkIGFyZ3VtZW50cy4KJiM0MzsJICovCiYjNDM7CVdBUk5fT05fT05DRSgoZmxhZ3MgJmFtcDsgQlBGX1RSQU1QX0ZfSU5ESVJFQ1QpICZhbXA7JmFtcDsKJiM0MzsJCSAgICAgKGZsYWdzICZhbXA7IH4oQlBGX1RSQU1QX0ZfSU5ESVJFQ1QgfCBCUEZfVFJBTVBfRl9SRVRfRkVOVFJZX1JFVCkpKTsKJiM0MzsKJiM0MzsJYXJlbmFfYmFzZSA9IGJwZl90cmFtcF9hcmVuYV9iYXNlKG0sIHRub2RlcywgZmxhZ3MpOwomIzQzOwogCS8qIHRyYW1wb2xpbmUgc3RhY2sgbGF5b3V0OgogCSAqICAgICAgICAgICAgICAgICAgICBbIHBhcmVudCBpcCAgICAgICAgIF0KIAkgKiAgICAgICAgICAgICAgICAgICAgWyBGUCAgICAgICAgICAgICAgICBdCkBAIC0yNzM3LDcgJiM0MzsyODQ4LDcgQEAgc3RhdGljIGludCBwcmVwYXJlX3RyYW1wb2xpbmUoc3RydWN0IGppdF9jdHggKmN0eCwgc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sCiAJc3RvcmVfZnVuY19tZXRhKGN0eCwgZnVuY19tZXRhLCBmdW5jX21ldGFfb2ZmKTsKIAogCS8qIHNhdmUgYXJncyBmb3IgYnBmICovCi0Jc2F2ZV9hcmdzKGN0eCwgYmFyZ3Nfb2ZmLCBvYXJnc19vZmYsIG0sIGEsIGZhbHNlKTsKJiM0MzsJc2F2ZV9hcmdzKGN0eCwgYmFyZ3Nfb2ZmLCBvYXJnc19vZmYsIG0sIGEsIGZhbHNlLCBpc19zdHJ1Y3Rfb3BzLCBhcmVuYV9iYXNlKTsKIAogCS8qIHNhdmUgY2FsbGVlIHNhdmVkIHJlZ2lzdGVycyAqLwogCWVtaXQoQTY0X1NUUjY0SShBNjRfUigxOSksIEE2NF9TUCwgcmVnc19vZmYpLCBjdHgpOwpAQCAtMjc4NSw4ICYjNDM7Mjg5Niw4IEBAIHN0YXRpYyBpbnQgcHJlcGFyZV90cmFtcG9saW5lKHN0cnVjdCBqaXRfY3R4ICpjdHgsIHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLAogCX0KIAogCWlmIChmbGFncyAmYW1wOyBCUEZfVFJBTVBfRl9DQUxMX09SSUcpIHsKLQkJLyogc2F2ZSBhcmdzIGZvciBvcmlnaW5hbCBmdW5jICovCi0JCXNhdmVfYXJncyhjdHgsIGJhcmdzX29mZiwgb2FyZ3Nfb2ZmLCBtLCBhLCB0cnVlKTsKJiM0MzsJCS8qIHRoZSBvcmlnaW5hbCBmdW5jIHRha2VzIGtlcm5lbCBhZGRyZXNzZXMsIG5ldmVyIGNvbnZlcnRlZCBvbmVzICovCiYjNDM7CQlzYXZlX2FyZ3MoY3R4LCBiYXJnc19vZmYsIG9hcmdzX29mZiwgbSwgYSwgdHJ1ZSwgaXNfc3RydWN0X29wcywgMCk7CiAJCS8qIGNhbGwgb3JpZ2luYWwgZnVuYyAqLwogCQllbWl0KEE2NF9MRFI2NEkoQTY0X1IoMTApLCBBNjRfU1AsIHJldGFkZHJfb2ZmKSwgY3R4KTsKIAkJZW1pdChBNjRfQURSKEE2NF9MUiwgQUFSQ0g2NF9JTlNOX1NJWkUgKiAyKSwgY3R4KTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3Rfc3RydWN0X29wc19hcmVuYS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9zdHJ1Y3Rfb3BzX2FyZW5hLmMKaW5kZXggOTQwZWMyY2RhMGQ1Mi4uN2Y5ZjU0YmEzZmJlNSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9zdHJ1Y3Rfb3BzX2FyZW5hLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9zdHJ1Y3Rfb3BzX2FyZW5hLmMKQEAgLTYsNyAmIzQzOzYsNyBAQAogI2luY2x1ZGUgJiMzNDtzdHJ1Y3Rfb3BzX2FyZW5hX2F0dGFjaC5za2VsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtzdHJ1Y3Rfb3BzX2FyZW5hX2ZhaWwuc2tlbC5oJiMzNDsKIAotI2lmIGRlZmluZWQoX194ODZfNjRfXykKJiM0MzsjaWYgZGVmaW5lZChfX3g4Nl82NF9fKSB8fCBkZWZpbmVkKF9fYWFyY2g2NF9fKQogLyoKICAqIEF0dGFjaCBjYWxsYmFja3Mgd2l0aCBfX2FyZW5hIGFuZCBfX2FyZW5hX19udWxsYWJsZSBhcmd1bWVudHMgYW5kIGRyaXZlCiAgKiB0aGVtIHRocm91Z2ggdGhlIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hKigpIGtmdW5jcy4KQEAgLTExMSwxMSAmIzQzOzExMSwxMSBAQCBzdGF0aWMgdm9pZCBhcmVuYV9hcmdfYXR0YWNoKHZvaWQpCiB2b2lkIHNlcmlhbF90ZXN0X3N0cnVjdF9vcHNfYXJlbmEodm9pZCkKIHsKIAkvKgotCSAqIEFyZW5hIHN0cnVjdF9vcHMgYXJndW1lbnRzIG5lZWQgSklUIHN1cHBvcnQsIGN1cnJlbnRseSB4ODYtNjQgb25seS4KLQkgKiBFbHNld2hlcmUgdmVyaWZpY2F0aW9uIGZhaWxzIHdpdGggJiMzNDtKSVQgZG9lcyBub3Qgc3VwcG9ydCBhcmVuYQotCSAqIGFyZ3VtZW50cyYjMzQ7LCBzbyB0aGUgcHJvZ3JhbXMgY2Fubm90IGV2ZW4gbG9hZC4KJiM0MzsJICogQXJlbmEgc3RydWN0X29wcyBhcmd1bWVudHMgbmVlZCBKSVQgc3VwcG9ydCwgY3VycmVudGx5IHg4Ni02NCBhbmQKJiM0MzsJICogYXJtNjQgb25seS4gRWxzZXdoZXJlIHZlcmlmaWNhdGlvbiBmYWlscyB3aXRoICYjMzQ7SklUIGRvZXMgbm90IHN1cHBvcnQKJiM0MzsJICogYXJlbmEgYXJndW1lbnRzJiMzNDssIHNvIHRoZSBwcm9ncmFtcyBjYW5ub3QgZXZlbiBsb2FkLgogCSAqLwotI2lmIGRlZmluZWQoX194ODZfNjRfXykKJiM0MzsjaWYgZGVmaW5lZChfX3g4Nl82NF9fKSB8fCBkZWZpbmVkKF9fYWFyY2g2NF9fKQogCWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7YXJlbmFfYXJnJiMzNDspKQogCQlhcmVuYV9hcmcoKTsKIAlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O2FyZW5hX2FyZ19mYWlsJiMzNDspKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmMuYwppbmRleCBjZGNlYTg4OWRhNTg2Li5iZjBkMzA0ZTBlNTljIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmMuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmMuYwpAQCAtMjcsNiAmIzQzOzI3LDcgQEAgdm9sYXRpbGUgdTY0IHN0YXNoOwogCiBTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiBfX2FyY2hfeDg2XzY0CiYjNDM7X19hcmNoX2FybTY0CiBfX3N1Y2Nlc3MgX19yZXR2YWwoMCkKIGludCBhcmVuYV9hcmdfZm9ybXModm9pZCAqY3R4KQogewpAQCAtNzAsNiAmIzQzOzcxLDcgQEAgaW50IGFyZW5hX2FyZ19mb3Jtcyh2b2lkICpjdHgpCiAgKi8KIFNFQygmIzM0O3N5c2NhbGwmIzM0OykKIF9fYXJjaF94ODZfNjQKJiM0MztfX2FyY2hfYXJtNjQKIF9fc3VjY2VzcyBfX3JldHZhbCgwKQogaW50IGFyZW5hX2FyZ19yZWJhc2Uodm9pZCAqY3R4KQogewpAQCAtMTExLDYgJiM0MzsxMTMsNyBAQCBpbnQgYXJlbmFfYXJnX3JlYmFzZSh2b2lkICpjdHgpCiAKIFNFQygmIzM0O3N5c2NhbGwmIzM0OykKIF9fYXJjaF94ODZfNjQKJiM0MztfX2FyY2hfYXJtNjQKIF9fc3VjY2VzcyBfX3JldHZhbCgwKQogaW50IGFyZW5hX2FyZ3M1KHZvaWQgKmN0eCkKIHsKQEAgLTE0Miw2ICYjNDM7MTQ1LDcgQEAgaW50IGFyZW5hX2FyZ3M1KHZvaWQgKmN0eCkKIAogU0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQogX19hcmNoX3g4Nl82NAomIzQzO19fYXJjaF9hcm02NAogX19zdWNjZXNzIF9fcmV0dmFsKDApCiBpbnQgYXJlbmFfYXJnX21peGVkKHZvaWQgKmN0eCkKIHsKQEAgLTE2OSw2ICYjNDM7MTczLDcgQEAgaW50IGFyZW5hX2FyZ19taXhlZCh2b2lkICpjdHgpCiAvKiBrZXJuZWwtc2lkZSBmYXVsdHMgb24gdW5wb3B1bGF0ZWQgcGFnZXMgcmVjb3ZlciB2aWEgdGhlIHNjcmF0Y2ggcGFnZSAqLwogU0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQogX19hcmNoX3g4Nl82NAomIzQzO19fYXJjaF9hcm02NAogX19zdWNjZXNzIF9fcmV0dmFsKDApCiBpbnQgYXJlbmFfYXJnX3VucG9wdWxhdGVkKHZvaWQgKmN0eCkKIHsKQEAgLTE4OSw2ICYjNDM7MTk0LDcgQEAgaW50IGFyZW5hX2FyZ191bnBvcHVsYXRlZCh2b2lkICpjdHgpCiAKIFNFQygmIzM0O3N5c2NhbGwmIzM0OykKIF9fYXJjaF94ODZfNjQKJiM0MztfX2FyY2hfYXJtNjQKIF9fZmFpbHVyZSBfX21zZygmIzM0O2FyZW5hIHBvaW50ZXIgcmVxdWlyZXMgYSBwcm9ncmFtIHdpdGggYW4gYXNzb2NpYXRlZCBhcmVuYSYjMzQ7KQogaW50IGFyZW5hX2FyZ19ub19hcmVuYSh2b2lkICpjdHgpCiB7CkBAIC0xOTgsNiAmIzQzOzIwNCw3IEBAIGludCBhcmVuYV9hcmdfbm9fYXJlbmEodm9pZCAqY3R4KQogCiBTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiBfX2FyY2hfeDg2XzY0CiYjNDM7X19hcmNoX2FybTY0CiBfX2ZhaWx1cmUgX19tc2coJiMzNDtpcyBub3QgYSBwb2ludGVyIHRvIGFyZW5hIG9yIHNjYWxhciYjMzQ7KQogaW50IGFyZW5hX2FyZ19iYWRfcmVnKHZvaWQgKmN0eCkKIHsKQEAgLTIxMyw2ICYjNDM7MjIwLDcgQEAgaW50IGFyZW5hX2FyZ19iYWRfcmVnKHZvaWQgKmN0eCkKIAlkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfU1RBQ0tfQVJHVU1FTlQpCiBTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiBfX2FyY2hfeDg2XzY0CiYjNDM7X19hcmNoX2FybTY0CiBfX2ZhaWx1cmUgX19tc2coJiMzNDthcmVuYSBwb2ludGVyIGNhbm5vdCBiZSBhIHN0YWNrIGFyZ3VtZW50JiMzNDspCiBpbnQgYXJlbmFfYXJnX3N0YWNrKHZvaWQgKmN0eCkKIHsKQEAgLTIyMyw2ICYjNDM7MjMxLDcgQEAgaW50IGFyZW5hX2FyZ19zdGFjayh2b2lkICpjdHgpCiAjZWxzZQogU0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQogX19hcmNoX3g4Nl82NAomIzQzO19fYXJjaF9hcm02NAogX19kZXNjcmlwdGlvbigmIzM0O2FyZW5hX2FyZ19zdGFjazogbm90IHN1cHBvcnRlZCwgZHVtbXkgdGVzdCYjMzQ7KQogX19zdWNjZXNzCiBpbnQgYXJlbmFfYXJnX3N0YWNrKHZvaWQgKmN0eCkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuY19qaXQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuY19qaXQuYwppbmRleCBjOWI5MTg2NjI2MTYyLi5iNWEwMWNiYzMzYTczIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmNfaml0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jX2ppdC5jCkBAIC0zMiw2ICYjNDM7MzIsMTAgQEAgX19qaXRlZCgmIzM0Owltb3ZsCSVlZGksICVlZGkmIzM0OykKIF9faml0ZWQoJiMzNDsJYWRkcQklcjEyLCAlcmRpJiMzNDspCiBfX2ppdGVkKCYjMzQ7Li4uJiMzNDspCiBfX2ppdGVkKCYjMzQ7CWNhbGxxCXt7Lip9fSYjMzQ7KQomIzQzO19fYXJjaF9hcm02NAomIzQzO19faml0ZWQoJiMzNDsuLi4mIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWFkZAl4MCwgeDI4LCB3MCwgdXh0dyYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJe3soYmx8bW92KQkuKn19JiMzNDspCiBfX3N1Y2Nlc3MKIGludCBhcmVuYV9hcmdfaml0X3JlYmFzZSh2b2lkICpjdHgpCiB7CkBAIC00OCw2ICYjNDM7NTIsMTIgQEAgX19qaXRlZCgmIzM0Owl0ZXN0bAklZWRpLCAlZWRpJiMzNDspCiBfX2ppdGVkKCYjMzQ7CWplCUwwJiMzNDspCiBfX2ppdGVkKCYjMzQ7CWFkZHEJJXIxMiwgJXJkaSYjMzQ7KQogX19qaXRlZCgmIzM0O0wwOgljYWxscQl7ey4qfX0mIzM0OykKJiM0MztfX2FyY2hfYXJtNjQKJiM0MztfX2ppdGVkKCYjMzQ7Li4uJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0Owltb3YJdzAsIHcwJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwljYnoJdzAsIEwwJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlhZGQJeDAsIHgyOCwgdzAsIHV4dHcmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7TDA6CXt7Lip9fSYjMzQ7KQogX19zdWNjZXNzCiBpbnQgYXJlbmFfYXJnX2ppdF9udWxsYWJsZSh2b2lkICpjdHgpCiB7CkBAIC03Miw2ICYjNDM7ODIsMTYgQEAgX19qaXRlZCgmIzM0Owl0ZXN0bAklcjhkLCAlcjhkJiMzNDspCiBfX2ppdGVkKCYjMzQ7CWplCUwwJiMzNDspCiBfX2ppdGVkKCYjMzQ7CWFkZHEJJXIxMiwgJXI4JiMzNDspCiBfX2ppdGVkKCYjMzQ7TDA6CWNhbGxxCXt7Lip9fSYjMzQ7KQomIzQzO19fYXJjaF9hcm02NAomIzQzO19faml0ZWQoJiMzNDsuLi4mIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWFkZAl4MCwgeDI4LCB3MCwgdXh0dyYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJYWRkCXgxLCB4MjgsIHcxLCB1eHR3JiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlhZGQJeDIsIHgyOCwgdzIsIHV4dHcmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWFkZAl4MywgeDI4LCB3MywgdXh0dyYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJbW92CXc0LCB3NCYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJY2J6CXc0LCBMMCYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJYWRkCXg0LCB4MjgsIHc0LCB1eHR3JiMzNDspCiYjNDM7X19qaXRlZCgmIzM0O0wwOgl7ey4qfX0mIzM0OykKIF9fc3VjY2VzcwogaW50IGFyZW5hX2FyZ19qaXRfYXJnczUodm9pZCAqY3R4KQogewpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfYXJlbmEuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJ1Y3Rfb3BzX2FyZW5hLmMKaW5kZXggYmEwNGM3M2Q4ZDk2Ny4uOGFhODYzOWRmOTFmMCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfYXJlbmEuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RydWN0X29wc19hcmVuYS5jCkBAIC01OSwxMSAmIzQzOzU5LDI4IEBAIGludCB0ZXN0X2FyZW5hX3N0YWNrX2NiKHVuc2lnbmVkIGxvbmcgbG9uZyAqY3R4KQogCXJldHVybiAwOwogfQogCiYjNDM7U0VDKCYjMzQ7c3RydWN0X29wcy90ZXN0X2FyZW5hX211bHRpc2xvdCYjMzQ7KQomIzQzO2ludCB0ZXN0X2FyZW5hX211bHRpc2xvdF9jYih1bnNpZ25lZCBsb25nIGxvbmcgKmN0eCkKJiM0Mzt7CiYjNDM7CXU2NCBfX2FyZW5hICpwdHIgPSAodTY0IF9fYXJlbmEgKiljdHhbMl07CiYjNDM7CiYjNDM7CWFyZW5hX3RvdWNoJiM0MzsmIzQzOzsKJiM0MzsJLyoKJiM0MzsJICogVGhlIDE2LWJ5dGUgc3RydWN0IG9jY3VwaWVzIGN0eFswXSBhbmQgY3R4WzFdLCBzbyBAcHRyIGlzIGFyZ3VtZW50CiYjNDM7CSAqIG9uZSBidXQgc2xvdCB0d28uIEdldHRpbmcgdGhhdCB3cm9uZyBoYW5kcyB0aGUgY2FsbGJhY2sgYSBzY2FsYXIuCiYjNDM7CSAqLwomIzQzOwlpZiAoY3R4WzBdICE9IDExIHx8IGN0eFsxXSAhPSAyMikKJiM0MzsJCXJldHVybiAweGJhZDsKJiM0MzsJKnB0ciAmIzQzOz0gMTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogU0VDKCYjMzQ7LnN0cnVjdF9vcHMubGluayYjMzQ7KQogc3RydWN0IGJwZl90ZXN0bW9kX29wczMgdGVzdG1vZF9hcmVuYSA9IHsKIAkudGVzdF9hcmVuYSA9ICh2b2lkICopdGVzdF9hcmVuYV9jYiwKIAkudGVzdF9hcmVuYV9udWxsYWJsZSA9ICh2b2lkICopdGVzdF9hcmVuYV9udWxsYWJsZV9jYiwKIAkudGVzdF9hcmVuYV9zdGFjayA9ICh2b2lkICopdGVzdF9hcmVuYV9zdGFja19jYiwKJiM0MzsJLnRlc3RfYXJlbmFfbXVsdGlzbG90ID0gKHZvaWQgKil0ZXN0X2FyZW5hX211bHRpc2xvdF9jYiwKIH07CiAKIFNFQygmIzM0O3N5c2NhbGwmIzM0OykKQEAgLTEwOSw2ICYjNDM7MTI2LDEzIEBAIGludCB0cmlnZ2VyKHZvaWQgKmN0eCkKIAlpZiAoKnZhbCAhPSA0NCkKIAkJcmV0dXJuIDk7CiAKJiM0MzsJLyogYSBtdWx0aS1zbG90IGFyZyBwcmVjZWRlcyB0aGUgYXJlbmEgcG9pbnRlciBoZXJlICovCiYjNDM7CXJldCA9IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX211bHRpc2xvdCgodTY0ICopdmFsKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiAxMDsKJiM0MzsJaWYgKCp2YWwgIT0gNDUpCiYjNDM7CQlyZXR1cm4gMTE7CiYjNDM7CiAJYnBmX2FyZW5hX2ZyZWVfcGFnZXMoJmFtcDthcmVuYSwgKHZvaWQgX19hcmVuYSAqKXZhbCwgMSk7CiAjZW5kaWYKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jCmluZGV4IGE2MTMzZjc1MjFmMzQuLjkzNjZhM2M1NzhmMTMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYwpAQCAtNDAyLDEyICYjNDM7NDAyLDE5IEBAIHN0YXRpYyBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19fdGVzdF9hcmVuYV9zdGFjayh1NjQgYSwgdTY0IGIsIHU2NCBjLCB1NjQgZCwKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19fdGVzdF9hcmVuYV9tdWx0aXNsb3Qoc3RydWN0IGJwZl90ZXN0bW9kX2FyZW5hX3BhaXIgcCwKJiM0MzsJCQkJCQkgIHU2NCAqcHRyX19hcmVuYSkKJiM0Mzt7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzMyBfX2JwZl90ZXN0bW9kX29wczMgPSB7CiAJLnRlc3RfMSA9IGJwZl90ZXN0bW9kX3Rlc3RfMywKIAkudGVzdF8yID0gYnBmX3Rlc3Rtb2RfdGVzdF80LAogCS50ZXN0X2FyZW5hID0gYnBmX3Rlc3Rtb2Rfb3BzM19fdGVzdF9hcmVuYSwKIAkudGVzdF9hcmVuYV9udWxsYWJsZSA9IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmFfbnVsbGFibGUsCiAJLnRlc3RfYXJlbmFfc3RhY2sgPSBicGZfdGVzdG1vZF9vcHMzX190ZXN0X2FyZW5hX3N0YWNrLAomIzQzOwkudGVzdF9hcmVuYV9tdWx0aXNsb3QgPSBicGZfdGVzdG1vZF9vcHMzX190ZXN0X2FyZW5hX211bHRpc2xvdCwKIH07CiAKIHN0YXRpYyB2b2lkIGJwZl90ZXN0bW9kX3Rlc3Rfc3RydWN0X29wczModm9pZCkKQEAgLTQ0MSw2ICYjNDM7NDQ4LDEzIEBAIF9fYnBmX2tmdW5jIGludCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9zdGFjayh1NjQgKnB0cl9fYXJlbmEpCiAJcmV0dXJuIHN0X29wczMtJmd0O3Rlc3RfYXJlbmFfc3RhY2soMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgcHRyX19hcmVuYSk7CiB9CiAKJiM0MztfX2JwZl9rZnVuYyBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfbXVsdGlzbG90KHU2NCAqcHRyX19hcmVuYSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBicGZfdGVzdG1vZF9hcmVuYV9wYWlyIHAgPSB7IC5hID0gMTEsIC5iID0gMjIgfTsKJiM0MzsKJiM0MzsJcmV0dXJuIHN0X29wczMtJmd0O3Rlc3RfYXJlbmFfbXVsdGlzbG90KHAsIHB0cl9fYXJlbmEpOwomIzQzO30KJiM0MzsKIHN0cnVjdCBicGZfdGVzdG1vZF9idGZfdHlwZV90YWdfMSB7CiAJaW50IGE7CiB9OwpAQCAtODUyLDYgJiM0Mzs4NjYsNyBAQCBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfMikKIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYSkKIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9udWxsYWJsZSkKIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9zdGFjaykKJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfbXVsdGlzbG90KQogQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19nZXRfZGVmYXVsdF90cnVzdGVkX3B0cl90ZXN0KTsKIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfcHV0X2RlZmF1bHRfdHJ1c3RlZF9wdHJfdGVzdCk7CiBCVEZfS0ZVTkNTX0VORChicGZfdGVzdG1vZF9jb21tb25fa2Z1bmNfaWRzKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmgKaW5kZXggMzNmMmFmNWI3MDg1Ny4uMjEwYjkxOTI5MGNjMiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5oCkBAIC0xMDMsNiAmIzQzOzEwMywxMiBAQCBzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzMiB7CiAJaW50ICgqdGVzdF8xKSh2b2lkKTsKIH07CiAKJiM0MzsvKiAxNiBieXRlcywgc28gaXQgdGFrZXMgdHdvIGFyZ3VtZW50IHNsb3RzIHdoZW4gcGFzc2VkIGJ5IHZhbHVlICovCiYjNDM7c3RydWN0IGJwZl90ZXN0bW9kX2FyZW5hX3BhaXIgewomIzQzOwl1NjQgYTsKJiM0MzsJdTY0IGI7CiYjNDM7fTsKJiM0MzsKIHN0cnVjdCBicGZfdGVzdG1vZF9vcHMzIHsKIAlpbnQgKCp0ZXN0XzEpKHZvaWQpOwogCWludCAoKnRlc3RfMikodm9pZCk7CkBAIC0xMTIsNiAmIzQzOzExOCw4IEBAIHN0cnVjdCBicGZfdGVzdG1vZF9vcHMzIHsKIAkvKiBlbm91Z2ggbGVhZGluZyBhcmdzIHRvIGZvcmNlIEBwdHIgb250byB0aGUgc3RhY2sgb24geDg2IGFuZCBhcm02NCAqLwogCWludCAoKnRlc3RfYXJlbmFfc3RhY2spKHU2NCBhLCB1NjQgYiwgdTY0IGMsIHU2NCBkLCB1NjQgZSwgdTY0IGYsCiAJCQkJdTY0IGcsIHU2NCBoLCB1NjQgKnB0cik7CiYjNDM7CS8qIGEgbXVsdGktc2xvdCBsZWFkaW5nIGFyZywgc28gQHB0ciBpcyBub3QgYXQgdGhlIHNsb3QgaXRzIGFyZyBpbmRleCBzdWdnZXN0cyAqLwomIzQzOwlpbnQgKCp0ZXN0X2FyZW5hX211bHRpc2xvdCkoc3RydWN0IGJwZl90ZXN0bW9kX2FyZW5hX3BhaXIgcCwgdTY0ICpwdHIpOwogfTsKIAogc3RydWN0IHN0X29wc19hcmdzIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kX2tmdW5jLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oCmluZGV4IGM0MzgzYWNiNTNjMTEuLjdkODEwNzBlZWZlN2YgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kX2tmdW5jLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaApAQCAtMTIzLDYgJiM0MzsxMjMsNyBAQCB2b2lkIGJwZl90ZXN0bW9kX3Rlc3RfbW9kX2tmdW5jKGludCBpKSBfX2tzeW07CiBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmEoX191NjQgKnB0cl9fYXJlbmEpIF9fa3N5bTsKIGludCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9udWxsYWJsZShfX3U2NCAqcHRyX19hcmVuYV9fbnVsbGFibGUpIF9fa3N5bTsKIGludCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9zdGFjayhfX3U2NCAqcHRyX19hcmVuYSkgX19rc3ltOwomIzQzO2ludCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9tdWx0aXNsb3QoX191NjQgKnB0cl9fYXJlbmEpIF9fa3N5bTsKIAogX191NjQgYnBmX2tmdW5jX2NhbGxfdGVzdDEoc3RydWN0IHNvY2sgKnNrLCBfX3UzMiBhLCBfX3U2NCBiLAogCQkJCV9fdTMyIGMsIF9fdTY0IGQpIF9fa3N5bTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNDA0CgkJCQkJCQlvdXRwdXQ6IDIxMwoJCQkJCQkJdGhvdWdodHM6IDg0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBBcm02NCBCUEYgSklUIEFyZW5hIEFyZ3VtZW50IFN1cHBvcnQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBhZGRpbmcgQlBGIGFyZW5hIGFyZ3VtZW50IHN1cHBvcnQgdG8gdGhlIGFybTY0IEpJVCBjb21waWxlci4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O09rYXksIHRoYXQmIzM5O3MgaW5zdHJ1Y3Rpb24gZW1pc3Npb24sIG5vdCBkYXRhIHN0cnVjdHVyZXMsIHNvIEtNU0FOIGlzIHByb2JhYmx5IG5vdCByZWxldmFudCwgYnV0IGxldCYjMzk7cyBiZSBzdXJlLiYjMzQ7CgpUaGUgcGF0Y2ggbW9kaWZpZXMgc2V2ZXJhbCBmaWxlcywgbW9zdGx5IGZvY3VzaW5nIG9uIGluc3RydWN0aW9uIGVuY29kaW5nIGFuZCB0aGUgSklUIGNvbXBpbGVyIGl0c2VsZi4gSXQgbG9va3MgbGlrZSB0aGUgY29yZSB3b3JrIGlzIGluIGVtaXR0aW5nIHRoZSBjb3JyZWN0IGFybTY0IGluc3RydWN0aW9ucyB0byBoYW5kbGUgQlBGIGFyZW5hIHBvaW50ZXJzIOKAkyBhZGRpbmcgb3Igc3VidHJhY3RpbmcgdGhlIGFyZW5hIGJhc2UgYWRkcmVzcyBkdXJpbmcgSklUIGNvbXBpbGF0aW9uLiBJdCYjMzk7cyBlc3NlbnRpYWxseSBhYm91dCBnZW5lcmF0aW5nIHRoZSAqcmlnaHQqIG1hY2hpbmUgY29kZSwgcmF0aGVyIHRoYW4gaGFuZGxpbmcgcmF3IGRhdGEgZGlyZWN0bHkuCgpNeSBjb25jZXJuIGlzIGFsd2F5cyBhcm91bmQgdW5pbml0aWFsaXplZCBtZW1vcnksIGJ1dCBJJiMzOTttIG5vdCBzZWVpbmcgYW55IHJlZCBmbGFncy4gVGhlIGNoYW5nZXMgYXJlIGlzb2xhdGVkIHdpdGhpbiB0aGUgQlBGIEpJVCBjb21waWxlciBhbmQgdGhlIHNlbGZ0ZXN0cy4gTm8gbmV3IGtlcm5lbCBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBwYXNzZWQgdG8gdXNlciBzcGFjZS4gVGhlcmUgYXJlbiYjMzk7dCBhbnkgY29tcGxleCBhbGxvY2F0aW9ucyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBUaGVyZSYjMzk7cyBub3RoaW5nIG5ldyBiZWluZyBkaXJlY3RseSBleHBvc2VkIHRvIHVzZXJzcGFjZSB0aGF0IHNjcmVhbXMgJiMzNDt1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXR5LiYjMzQ7CgpOb3csIHRoZSBKSVQgY29tcGlsZXIgZ2VuZXJhdGVzIGluc3RydWN0aW9ucywgc28gdGhlcmUgaXMgdGhlIHBvdGVudGlhbCBmb3IgbG9naWMgZXJyb3JzIGluIHRoZSBpbnN0cnVjdGlvbiBnZW5lcmF0aW9uLiBJZiB0aGVyZSYjMzk7cyBhIGJ1ZywgaXQgY291bGQgbGVhZCB0byBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGFjY2VzcyAqd2l0aGluKiB0aGUgSklUZWQgQlBGIGNvZGUuIEhvd2V2ZXIsIEtBU0FOIHNob3VsZCBjYXRjaCB0aGF0LiBUaGlzIGlzbiYjMzk7dCBLTVNBTiYjMzk7cyBkb21haW4uIEluIGZhY3QsIEtNU0FOIGRvZXNuJiMzOTt0IGV2ZW4gaW5zdHJ1bWVudCBKSVQmIzM5O2QgY29kZS4gCgpMZXQgbWUgZG91YmxlLWNoZWNrIGBhcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY2AuIFNwZWNpZmljYWxseSwgZnVuY3Rpb25zIGxpa2UgYGVtaXRfa2Z1bmNfYXJlbmFfYXJnc2AsIGBlbWl0X2FyZW5hX2FyZ19jb252YCwgYHNhdmVfYXJnc2AsIGFuZCBgcHJlcGFyZV90cmFtcG9saW5lYCDigJMgdGhlc2UgYXJlIHdoZXJlIHRoZSBtYWNoaW5lIGNvZGUgaXMgYmVpbmcgZ2VuZXJhdGVkLiBJZiBhIGJ1ZyB3ZXJlIHRvIGV4aXN0IGhlcmUsIHdvdWxkIGl0IGxlYWQgdG8gcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeT8gTm8uIEtNU0FOIGlzbiYjMzk7dCB0aGUgc29sdXRpb24uIFRoZSBKSVQgY29tcGlsZXIgaXMganVzdCBnZW5lcmF0aW5nIHRoZSBtYWNoaW5lIGNvZGUuIElmIHRoZSBjb2RlIGlzIGJ1Z2d5LCBpdCBpcyBLQVNBTiB0aGF0IGNhbiBkZXRlY3QgaXQsIG5vdCBLTVNBTi4KCkxldCBtZSBsb29rIGNsb3NlbHkgYXQgYHNhdmVfYXJnc2AuLi4gc3BlY2lmaWNhbGx5IHRoZSBzbmlwcGV0IGJlbG93OgoKYGBgYwpzdGF0aWMgdm9pZCBzYXZlX2FyZ3Moc3RydWN0IGppdF9jdHggKmN0eCwgaW50IGJhcmdzX29mZiwgaW50IG9hcmdzX29mZiwKCQkgICAgICBjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIGNvbnN0IHN0cnVjdCBhcmdfYXV4ICphLAoJCSAgICAgIGJvb2wgZm9yX2NhbGxfb3JpZ2luLCBib29sIGlzX3N0cnVjdF9vcHMsIHU2NCBhcmVuYV9iYXNlKQp7Cgl1OCB0bXAgPSBicGYyYTY0W1RNUF9SRUdfMV07Cgl1OCBiYXNlX2xvID0gYnBmMmE2NFtUTVBfUkVHXzJdOwoJaW50IGksIHJlZywgZG9mZiwgc29mZiwgc2xvdHM7CgoJLyogb25seSB0aGUgbG93IDMyIGJpdHMgb2YgdGhlIGJhc2UgdGFrZSBwYXJ0IGluIHRoZSBzdWJ0cmFjdGlvbiAqLwoJaWYgKGFyZW5hX2Jhc2UpCgkJZW1pdF9hNjRfbW92X2koMCwgYmFzZV9sbywgKHMzMikodTMyKWFyZW5hX2Jhc2UsIGN0eCk7Ci4uLgpgYGAKCkFoLCBldmVyeXRoaW5nIGhlcmUgKnNlZW1zKiBwcm9wZXJseSBpbml0aWFsaXplZC4gVGhlIGBhcmVuYV9iYXNlYCB2YXJpYWJsZSBpcyBiZWluZyBhc3NpZ25lZCwgYW5kIHRoZSBnZW5lcmF0ZWQgbWFjaGluZSBjb2RlIChhbmQgcmVnaXN0ZXJzKSBzZWVtIHRvIGJlIGNvcnJlY3RseSBtYW5hZ2VkLgoKR2l2ZW4gYWxsIG9mIHRoaXMsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgS01TQU4gaXNuJiMzOTt0IG5lZWRlZCBoZXJlLiBUaGUgcmlzayBpcyBsaW1pdGVkIHRvIEpJVCBjb21waWxhdGlvbiBsb2dpYyBlcnJvcnMsIHdoaWNoIEtBU0FOIGFuZCBzdGFuZGFyZCB0ZXN0aW5nIHNob3VsZCBlZmZlY3RpdmVseSBhZGRyZXNzLgoKKipUaGVyZWZvcmUsIE5lZWRzS01TQU4gPSBmYWxzZS4qKgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBleHRlbmRzIHRoZSBhcm02NCBCUEYgSklUIGNvbXBpbGVyIHRvIHN1cHBvcnQgQlBGIGFyZW5hIGFyZ3VtZW50cy4gSXQgaW50cm9kdWNlcyBuZXcgaW5zdHJ1Y3Rpb24gZW5jb2RpbmcgZnVuY3Rpb25zIGZvciBhcm02NCAoZS5nLiwgYGFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9leHRlbmRlZF9yZWdgKSBhbmQgbW9kaWZpZXMgdGhlIEpJVCBjb21waWxlciAoYGFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jYCkgdG8gZW1pdCBpbnN0cnVjdGlvbnMgdGhhdCByZWJhc2UgYXJlbmEgcG9pbnRlcnMuIFRoZSBjaGFuZ2VzIGFyZSBzdHJpY3RseSByZWxhdGVkIHRvIEpJVCBjb21waWxhdGlvbiBsb2dpYyBhbmQgaW5zdHJ1Y3Rpb24gZW1pc3Npb24uIFRoZXkgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGtlcm5lbCBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBhbGxvY2F0ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB0aGF0IGNvdWxkIGJlIGxlZnQgdW5pbml0aWFsaXplZC4gQW55IGJ1Z3MgaW4gdGhlIEpJVCBjb21waWxlciB3b3VsZCBsaWtlbHkgcmVzdWx0IGluIGludmFsaWQgaW5zdHJ1Y3Rpb24gZ2VuZXJhdGlvbiwgY3Jhc2hlcywgb3Igb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgaW4gdGhlIEpJVGVkIGNvZGUsIHdoaWNoIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGV4dGVuZHMgdGhlIGFybTY0IEJQRiBKSVQgY29tcGlsZXIgdG8gc3VwcG9ydCBCUEYgYXJlbmEgYXJndW1lbnRzLiBJdCBpbnRyb2R1Y2VzIG5ldyBpbnN0cnVjdGlvbiBlbmNvZGluZyBmdW5jdGlvbnMgZm9yIGFybTY0IChlLmcuLCBgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZ2ApIGFuZCBtb2RpZmllcyB0aGUgSklUIGNvbXBpbGVyIChgYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmNgKSB0byBlbWl0IGluc3RydWN0aW9ucyB0aGF0IHJlYmFzZSBhcmVuYSBwb2ludGVycy4gVGhlIGNoYW5nZXMgYXJlIHN0cmljdGx5IHJlbGF0ZWQgdG8gSklUIGNvbXBpbGF0aW9uIGxvZ2ljIGFuZCBpbnN0cnVjdGlvbiBlbWlzc2lvbi4gVGhleSBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcga2VybmVsIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IGFsbG9jYXRlIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgY291bGQgYmUgbGVmdCB1bmluaXRpYWxpemVkLiBBbnkgYnVncyBpbiB0aGUgSklUIGNvbXBpbGVyIHdvdWxkIGxpa2VseSByZXN1bHQgaW4gaW52YWxpZCBpbnN0cnVjdGlvbiBnZW5lcmF0aW9uLCBjcmFzaGVzLCBvciBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyBpbiB0aGUgSklUZWQgY29kZSwgd2hpY2ggYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIHRlc3RpbmcuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDo1MDoxMy4wMzEyNzE1MTZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDAxMTMzMDI5NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9KSVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnXCIsXG4gICAgXCJicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NcIixcbiAgICBcImFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZXh0ZW5kcyB0aGUgYXJtNjQgQlBGIEpJVCBjb21waWxlciB0byBzdXBwb3J0IEJQRiBhcmVuYSBhcmd1bWVudHMuIEl0IGludHJvZHVjZXMgbmV3IGluc3RydWN0aW9uIGVuY29kaW5nIGZ1bmN0aW9ucyBmb3IgYXJtNjQgKGUuZy4sIGBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnYCkgYW5kIG1vZGlmaWVzIHRoZSBKSVQgY29tcGlsZXIgKGBhcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY2ApIHRvIGVtaXQgaW5zdHJ1Y3Rpb25zIHRoYXQgcmViYXNlIGFyZW5hIHBvaW50ZXJzLiBUaGUgY2hhbmdlcyBhcmUgc3RyaWN0bHkgcmVsYXRlZCB0byBKSVQgY29tcGlsYXRpb24gbG9naWMgYW5kIGluc3RydWN0aW9uIGVtaXNzaW9uLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBrZXJuZWwgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvIHRoZXkgYWxsb2NhdGUgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgdGhhdCBjb3VsZCBiZSBsZWZ0IHVuaW5pdGlhbGl6ZWQuIEFueSBidWdzIGluIHRoZSBKSVQgY29tcGlsZXIgd291bGQgbGlrZWx5IHJlc3VsdCBpbiBpbnZhbGlkIGluc3RydWN0aW9uIGdlbmVyYXRpb24sIGNyYXNoZXMsIG9yIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIGluIHRoZSBKSVRlZCBjb2RlLCB3aGljaCBhcmUgYWRlcXVhdGVseSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgdGVzdGluZy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZSB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW1wbGVtZW50cyBCUEYgYXJlbmEgYXJndW1lbnRzIHN1cHBvcnQgZm9yIHRoZSBhcm02NCBKSVQgY29tcGlsZXIuIEl0IGFkZHMgbmV3IGluc3RydWN0aW9uIGdlbmVyYXRpb24gbG9naWMgZm9yIGV4dGVuZGVkIHJlZ2lzdGVyIGFkZC9zdWIgaW5zdHJ1Y3Rpb25zIChgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZ2ApIGFuZCBtb2RpZmllcyB0aGUgYXJtNjQgQlBGIEpJVCAoYGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAsIGBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NgKSB0byBoYW5kbGUgYXJlbmEgcG9pbnRlcnMgaW4ga2Z1bmMgY2FsbHMgYW5kIHN0cnVjdF9vcHMgY2FsbGJhY2tzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIGtlcm5lbCAoQlBGIEpJVCkgdGhhdCBhcmUgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDo1MDoxMy4wMzEyNzg0OTZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1MDU1NTg0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDlmZDM4MjI1YzIzZThhOTVlYWYzODhmMjczZGMzMzg3MWIyMjRlYmZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgMTMgMjA6NTA6MTEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdCBiL0RvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3RcXG5pbmRleCAxMGU3MjVjYmU2NGNkLi44NWY3M2UwYmJkMGZmIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0XFxuQEAgLTMwMSw5ICszMDEsOSBAQCBBbiBleGFtcGxlIGlzIGdpdmVuIGJlbG93OjpcXG4gICAgICAgICB9XFxuIFxcbiBDYWxsaW5nIHN1Y2ggYSBrZnVuYyByZXF1aXJlcyB0aGUgcHJvZ3JhbSB0byB1c2UgYW4gYXJlbmEgbWFwIGFuZCBhIEpJVCB3aXRoXFxuLWFyZW5hIGFyZ3VtZW50IHN1cHBvcnQgKGN1cnJlbnRseSB4ODYtNjQpOyB2ZXJpZmljYXRpb24gZmFpbHMgb3RoZXJ3aXNlLiBUaGVcXG4tcHJvZ3JhbSBjYW4gcGFzcyBhbnkgdmFsdWUgd2l0aG91dCBjb21wcm9taXNpbmcgdGhlIGtlcm5lbC4gQSB2YWx1ZSB0aGF0IGRvZXNcXG4tbm90IHBvaW50IGludG8gdGhlIGFyZW5hIGlzIGEgcHJvZ3JhbSBidWcuXFxuK2FyZW5hIGFyZ3VtZW50IHN1cHBvcnQgKGN1cnJlbnRseSB4ODYtNjQgYW5kIGFybTY0KTsgdmVyaWZpY2F0aW9uIGZhaWxzXFxuK290aGVyd2lzZS4gVGhlIHByb2dyYW0gY2FuIHBhc3MgYW55IHZhbHVlIHdpdGhvdXQgY29tcHJvbWlzaW5nIHRoZSBrZXJuZWwuIEFcXG4rdmFsdWUgdGhhdCBkb2VzIG5vdCBwb2ludCBpbnRvIHRoZSBhcmVuYSBpcyBhIHByb2dyYW0gYnVnLlxcbiBcXG4gVGhlIHN1ZmZpeGVzIGhhdmUgdGhlIHNhbWUgbWVhbmluZyBvbiB0aGUgYXJndW1lbnRzIG9mIHN0cnVjdF9vcHMgc3R1YlxcbiBmdW5jdGlvbnMsIHdpdGggdGhlIGNvbnZlcnNpb24gcnVubmluZyBpbiB0aGUgb3Bwb3NpdGUgZGlyZWN0aW9uLiBUaGVcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9pbnNuLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2luc24uaFxcbmluZGV4IGNjMDcwMmZhNjRhNzkuLjFjZTc1YTQ0MjYzODcgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9pbnNuLmhcXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2luc24uaFxcbkBAIC0yMDUsNiArMjA1LDE4IEBAIGVudW0gYWFyY2g2NF9pbnNuX2Fkc2JfdHlwZSB7XFxuIFxcdEFBUkNINjRfSU5TTl9BRFNCX1NVQl9TRVRGTEFHU1xcbiB9O1xcbiBcXG4rLyogb3B0aW9uIGZpZWxkIG9mIGFkZC9zdWIgKGV4dGVuZGVkIHJlZ2lzdGVyKSAqL1xcbitlbnVtIGFhcmNoNjRfaW5zbl9leHRlbmRfdHlwZSB7XFxuK1xcdEFBUkNINjRfSU5TTl9FWFRFTkRfVVhUQixcXG4rXFx0QUFSQ0g2NF9JTlNOX0VYVEVORF9VWFRILFxcbitcXHRBQVJDSDY0X0lOU05fRVhURU5EX1VYVFcsXFxuK1xcdEFBUkNINjRfSU5TTl9FWFRFTkRfVVhUWCxcXG4rXFx0QUFSQ0g2NF9JTlNOX0VYVEVORF9TWFRCLFxcbitcXHRBQVJDSDY0X0lOU05fRVhURU5EX1NYVEgsXFxuK1xcdEFBUkNINjRfSU5TTl9FWFRFTkRfU1hUVyxcXG4rXFx0QUFSQ0g2NF9JTlNOX0VYVEVORF9TWFRYLFxcbit9O1xcbitcXG4gZW51bSBhYXJjaDY0X2luc25fbW92ZXdpZGVfdHlwZSB7XFxuIFxcdEFBUkNINjRfSU5TTl9NT1ZFV0lERV9aRVJPLFxcbiBcXHRBQVJDSDY0X0lOU05fTU9WRVdJREVfS0VFUCxcXG5AQCAtMzc4LDYgKzM5MCwxMCBAQCBfX0FBUkNINjRfSU5TTl9GVU5DUyhhZGQsXFx0MHg3RjIwMDAwMCwgMHgwQjAwMDAwMClcXG4gX19BQVJDSDY0X0lOU05fRlVOQ1MoYWRkcyxcXHQweDdGMjAwMDAwLCAweDJCMDAwMDAwKVxcbiBfX0FBUkNINjRfSU5TTl9GVU5DUyhzdWIsXFx0MHg3RjIwMDAwMCwgMHg0QjAwMDAwMClcXG4gX19BQVJDSDY0X0lOU05fRlVOQ1Moc3VicyxcXHQweDdGMjAwMDAwLCAweDZCMDAwMDAwKVxcbitfX0FBUkNINjRfSU5TTl9GVU5DUyhhZGRfZXh0LFxcdDB4N0ZFMDAwMDAsIDB4MEIyMDAwMDApXFxuK19fQUFSQ0g2NF9JTlNOX0ZVTkNTKGFkZHNfZXh0LFxcdDB4N0ZFMDAwMDAsIDB4MkIyMDAwMDApXFxuK19fQUFSQ0g2NF9JTlNOX0ZVTkNTKHN1Yl9leHQsXFx0MHg3RkUwMDAwMCwgMHg0QjIwMDAwMClcXG4rX19BQVJDSDY0X0lOU05fRlVOQ1Moc3Vic19leHQsXFx0MHg3RkUwMDAwMCwgMHg2QjIwMDAwMClcXG4gX19BQVJDSDY0X0lOU05fRlVOQ1MobWFkZCxcXHQweDdGRTA4MDAwLCAweDFCMDAwMDAwKVxcbiBfX0FBUkNINjRfSU5TTl9GVU5DUyhtc3ViLFxcdDB4N0ZFMDgwMDAsIDB4MUIwMDgwMDApXFxuIF9fQUFSQ0g2NF9JTlNOX0ZVTkNTKHVkaXYsXFx0MHg3RkUwRkMwMCwgMHgxQUMwMDgwMClcXG5AQCAtNjM3LDYgKzY1MywxMyBAQCB1MzIgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX3NoaWZ0ZWRfcmVnKGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIGRzdCxcXG4gXFx0XFx0XFx0XFx0XFx0IGludCBzaGlmdCxcXG4gXFx0XFx0XFx0XFx0XFx0IGVudW0gYWFyY2g2NF9pbnNuX3ZhcmlhbnQgdmFyaWFudCxcXG4gXFx0XFx0XFx0XFx0XFx0IGVudW0gYWFyY2g2NF9pbnNuX2Fkc2JfdHlwZSB0eXBlKTtcXG4rdTMyIGFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9leHRlbmRlZF9yZWcoZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgZHN0LFxcbitcXHRcXHRcXHRcXHRcXHQgIGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIHNyYyxcXG4rXFx0XFx0XFx0XFx0XFx0ICBlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciByZWcsXFxuK1xcdFxcdFxcdFxcdFxcdCAgZW51bSBhYXJjaDY0X2luc25fZXh0ZW5kX3R5cGUgZXh0ZW5kLFxcbitcXHRcXHRcXHRcXHRcXHQgIGludCBzaGlmdCxcXG4rXFx0XFx0XFx0XFx0XFx0ICBlbnVtIGFhcmNoNjRfaW5zbl92YXJpYW50IHZhcmlhbnQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgZW51bSBhYXJjaDY0X2luc25fYWRzYl90eXBlIHR5cGUpO1xcbiB1MzIgYWFyY2g2NF9pbnNuX2dlbl9kYXRhMShlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBkc3QsXFxuIFxcdFxcdFxcdCAgIGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIHNyYyxcXG4gXFx0XFx0XFx0ICAgZW51bSBhYXJjaDY0X2luc25fdmFyaWFudCB2YXJpYW50LFxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2xpYi9pbnNuLmMgYi9hcmNoL2FybTY0L2xpYi9pbnNuLmNcXG5pbmRleCAzN2NlNzVmN2YxZjA4Li5lNzBhYzAyMzg1MTUzIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQvbGliL2luc24uY1xcbisrKyBiL2FyY2gvYXJtNjQvbGliL2luc24uY1xcbkBAIC05ODYsNiArOTg2LDY2IEBAIHUzMiBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfc2hpZnRlZF9yZWcoZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgZHN0LFxcbiBcXHRyZXR1cm4gYWFyY2g2NF9pbnNuX2VuY29kZV9pbW1lZGlhdGUoQUFSQ0g2NF9JTlNOX0lNTV82LCBpbnNuLCBzaGlmdCk7XFxuIH1cXG4gXFxuKy8qXFxuKyAqIFVubGlrZSB0aGUgc2hpZnRlZC1yZWdpc3RlciBmb3JtLCByZWdpc3RlciAzMSBpcyBub3QgWFpSIGV2ZXJ5d2hlcmUgaGVyZTpcXG4rICogaXQgZW5jb2RlcyBTUCBmb3IgQHNyYywgYW5kIGZvciBAZHN0IHRvbyB1bmxlc3MgQHR5cGUgc2V0cyB0aGUgZmxhZ3MuIE9ubHlcXG4rICogQHJlZyBrZWVwcyB0aGUgWFpSIG1lYW5pbmcuXFxuKyAqL1xcbit1MzIgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZyhlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBkc3QsXFxuK1xcdFxcdFxcdFxcdFxcdCAgZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgc3JjLFxcbitcXHRcXHRcXHRcXHRcXHQgIGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIHJlZyxcXG4rXFx0XFx0XFx0XFx0XFx0ICBlbnVtIGFhcmNoNjRfaW5zbl9leHRlbmRfdHlwZSBleHRlbmQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgaW50IHNoaWZ0LFxcbitcXHRcXHRcXHRcXHRcXHQgIGVudW0gYWFyY2g2NF9pbnNuX3ZhcmlhbnQgdmFyaWFudCxcXG4rXFx0XFx0XFx0XFx0XFx0ICBlbnVtIGFhcmNoNjRfaW5zbl9hZHNiX3R5cGUgdHlwZSlcXG4re1xcbitcXHR1MzIgaW5zbjtcXG4rXFxuK1xcdHN3aXRjaCAodHlwZSkge1xcbitcXHRjYXNlIEFBUkNINjRfSU5TTl9BRFNCX0FERDpcXG4rXFx0XFx0aW5zbiA9IGFhcmNoNjRfaW5zbl9nZXRfYWRkX2V4dF92YWx1ZSgpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBBQVJDSDY0X0lOU05fQURTQl9TVUI6XFxuK1xcdFxcdGluc24gPSBhYXJjaDY0X2luc25fZ2V0X3N1Yl9leHRfdmFsdWUoKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgQUFSQ0g2NF9JTlNOX0FEU0JfQUREX1NFVEZMQUdTOlxcbitcXHRcXHRpbnNuID0gYWFyY2g2NF9pbnNuX2dldF9hZGRzX2V4dF92YWx1ZSgpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBBQVJDSDY0X0lOU05fQURTQl9TVUJfU0VURkxBR1M6XFxuK1xcdFxcdGluc24gPSBhYXJjaDY0X2luc25fZ2V0X3N1YnNfZXh0X3ZhbHVlKCk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRwcl9lcnIoXFxcIiVzOiB1bmtub3duIGFkZC9zdWIgZW5jb2RpbmcgJWRcXFxcblxcXCIsIF9fZnVuY19fLCB0eXBlKTtcXG4rXFx0XFx0cmV0dXJuIEFBUkNINjRfQlJFQUtfRkFVTFQ7XFxuK1xcdH1cXG4rXFxuK1xcdHN3aXRjaCAodmFyaWFudCkge1xcbitcXHRjYXNlIEFBUkNINjRfSU5TTl9WQVJJQU5UXzMyQklUOlxcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBBQVJDSDY0X0lOU05fVkFSSUFOVF82NEJJVDpcXG4rXFx0XFx0aW5zbiB8PSBBQVJDSDY0X0lOU05fU0ZfQklUO1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cHJfZXJyKFxcXCIlczogdW5rbm93biB2YXJpYW50IGVuY29kaW5nICVkXFxcXG5cXFwiLCBfX2Z1bmNfXywgdmFyaWFudCk7XFxuK1xcdFxcdHJldHVybiBBQVJDSDY0X0JSRUFLX0ZBVUxUO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoc2hpZnQgXFx1MDAzYyAwIHx8IHNoaWZ0IFxcdTAwM2UgNCkge1xcbitcXHRcXHRwcl9lcnIoXFxcIiVzOiBpbnZhbGlkIHNoaWZ0IGVuY29kaW5nICVkXFxcXG5cXFwiLCBfX2Z1bmNfXywgc2hpZnQpO1xcbitcXHRcXHRyZXR1cm4gQUFSQ0g2NF9CUkVBS19GQVVMVDtcXG4rXFx0fVxcbitcXG4rXFx0aW5zbiA9IGFhcmNoNjRfaW5zbl9lbmNvZGVfcmVnaXN0ZXIoQUFSQ0g2NF9JTlNOX1JFR1RZUEVfUkQsIGluc24sIGRzdCk7XFxuK1xcbitcXHRpbnNuID0gYWFyY2g2NF9pbnNuX2VuY29kZV9yZWdpc3RlcihBQVJDSDY0X0lOU05fUkVHVFlQRV9STiwgaW5zbiwgc3JjKTtcXG4rXFxuK1xcdGluc24gPSBhYXJjaDY0X2luc25fZW5jb2RlX3JlZ2lzdGVyKEFBUkNINjRfSU5TTl9SRUdUWVBFX1JNLCBpbnNuLCByZWcpO1xcbitcXG4rXFx0Lyogb3B0aW9uIGluIGJpdHMgWzE1OjEzXSBhbmQgaW1tMyBpbiBbMTI6MTBdIHRvZ2V0aGVyIGZpbGwgSU1NXzYgKi9cXG4rXFx0cmV0dXJuIGFhcmNoNjRfaW5zbl9lbmNvZGVfaW1tZWRpYXRlKEFBUkNINjRfSU5TTl9JTU1fNiwgaW5zbixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAoZXh0ZW5kIFxcdTAwM2NcXHUwMDNjIDMpIHwgc2hpZnQpO1xcbit9XFxuK1xcbiB1MzIgYWFyY2g2NF9pbnNuX2dlbl9kYXRhMShlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBkc3QsXFxuIFxcdFxcdFxcdCAgIGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIHNyYyxcXG4gXFx0XFx0XFx0ICAgZW51bSBhYXJjaDY0X2luc25fdmFyaWFudCB2YXJpYW50LFxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L25ldC9icGZfaml0LmggYi9hcmNoL2FybTY0L25ldC9icGZfaml0LmhcXG5pbmRleCBkMTNkZTQyMjJjZmI3Li5iMmZlNmU2ZGNmNDQ3IDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXQuaFxcbisrKyBiL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXQuaFxcbkBAIC0yNDMsNiArMjQzLDE3IEBAXFxuIC8qIFJuIC0gUm07IHNldCBjb25kaXRpb24gZmxhZ3MgKi9cXG4gI2RlZmluZSBBNjRfQ01QKHNmLCBSbiwgUm0pIEE2NF9TVUJTKHNmLCBBNjRfWlIsIFJuLCBSbSlcXG4gXFxuKy8qIEFkZC9zdWJ0cmFjdCAoZXh0ZW5kZWQgcmVnaXN0ZXIpICovXFxuKyNkZWZpbmUgQTY0X0FERFNVQl9FUkVHKHNmLCBSZCwgUm4sIFJtLCBleHQsIHNoaWZ0LCB0eXBlKSBcXFxcXFxuK1xcdGFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9leHRlbmRlZF9yZWcoUmQsIFJuLCBSbSwgXFxcXFxcbitcXHRcXHRBQVJDSDY0X0lOU05fRVhURU5EXyMjZXh0LCBzaGlmdCwgQTY0X1ZBUklBTlQoc2YpLCBcXFxcXFxuK1xcdFxcdEFBUkNINjRfSU5TTl9BRFNCXyMjdHlwZSlcXG4rLyogUmQgPSBSbiArIChFWFQoUm0pIFxcdTAwM2NcXHUwMDNjIHNoaWZ0KSAqL1xcbisjZGVmaW5lIEE2NF9BRERfRVhUKHNmLCBSZCwgUm4sIFJtLCBleHQsIHNoaWZ0KSBcXFxcXFxuK1xcdEE2NF9BRERTVUJfRVJFRyhzZiwgUmQsIFJuLCBSbSwgZXh0LCBzaGlmdCwgQUREKVxcbisvKiBSZCA9IFJuICsgKHUzMilSbSAqL1xcbisjZGVmaW5lIEE2NF9BRERfVVhUVyhSZCwgUm4sIFJtKSBBNjRfQUREX0VYVCgxLCBSZCwgUm4sIFJtLCBVWFRXLCAwKVxcbitcXG4gLyogRGF0YS1wcm9jZXNzaW5nICgxIHNvdXJjZSkgKi9cXG4gI2RlZmluZSBBNjRfREFUQTEoc2YsIFJkLCBSbiwgdHlwZSkgYWFyY2g2NF9pbnNuX2dlbl9kYXRhMShSZCwgUm4sIFxcXFxcXG4gXFx0QTY0X1ZBUklBTlQoc2YpLCBBQVJDSDY0X0lOU05fREFUQTFfIyN0eXBlKVxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jXFxuaW5kZXggNzRiNDA4Mzc5MWRhMy4uYzE4ZTAwNWE0MWRiZSAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY1xcbisrKyBiL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jXFxuQEAgLTEyNTYsNiArMTI1Niw0MyBAQCBzdGF0aWMgdm9pZCBlbWl0X3N0YWNrX2FyZ19zdG9yZV9pbW0oczMyIGltbSwgczE2IGJwZl9vZmYsIGNvbnN0IHU4IHRtcCwgc3RydWN0XFxuIFxcdH1cXG4gfVxcbiBcXG4rLypcXG4rICogUmViYXNlIHRoZSBfX2FyZW5hIGFyZ3Mgb2YgYSBrZnVuYyBjYWxsIHRvIGFyZW5hIGtlcm5lbCBhZGRyZXNzZXMsXFxuKyAqIHhOID0ga2Vybl92bV9zdGFydCArICh1MzIpeE4sIHdpdGggdGhlIGFyZW5hIGJhc2UgcmVnaXN0ZXIgaG9sZGluZ1xcbisgKiBrZXJuX3ZtX3N0YXJ0LiBBIG51bGxhYmxlIGFyZyBwcmVzZXJ2ZXMgTlVMTCBieSBza2lwcGluZyB0aGUgYWRkLCB0ZXN0ZWRcXG4rICogb24gdGhlIHRydW5jYXRlZCB2YWx1ZSBhcyBhcmVuYSBOVUxMIGlzIG9mZnNldCAwLlxcbisgKi9cXG4rc3RhdGljIGludCBlbWl0X2tmdW5jX2FyZW5hX2FyZ3Moc3RydWN0IGppdF9jdHggKmN0eCwgY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbit7XFxuK1xcdGNvbnN0IHU4IGFyZW5hX3ZtX2Jhc2UgPSBicGYyYTY0W0FSRU5BX1ZNX1NUQVJUXTtcXG4rXFx0Y29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICpmbTtcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRmbSA9IGJwZl9qaXRfZmluZF9rZnVuY19tb2RlbChjdHgtXFx1MDAzZXByb2csIGluc24pO1xcbitcXHRpZiAoIWZtKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBtaW5fdChpbnQsIGZtLVxcdTAwM2Vucl9hcmdzLCBNQVhfQlBGX0ZVTkNfUkVHX0FSR1MpOyBpKyspIHtcXG4rXFx0XFx0Y29uc3QgdTggcmVnID0gYnBmMmE2NFtCUEZfUkVHXzEgKyBpXTtcXG4rXFx0XFx0dTggZmxhZ3MgPSBmbS1cXHUwMDNlYXJnX2ZsYWdzW2ldO1xcbitcXG4rXFx0XFx0aWYgKCEoZmxhZ3MgXFx1MDAyNiBCVEZfRk1PREVMX0FSRU5BX0FSRykpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRpZiAoV0FSTl9PTl9PTkNFKCFjdHgtXFx1MDAzZWFyZW5hX3ZtX3N0YXJ0KSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBCVEZfRk1PREVMX05VTExBQkxFX0FSRykge1xcbitcXHRcXHRcXHQvKiAzMi1iaXQgbW92IGNsZWFycyB0aGUgdXBwZXIgMzIgYml0cyAqL1xcbitcXHRcXHRcXHRlbWl0KEE2NF9NT1YoMCwgcmVnLCByZWcpLCBjdHgpO1xcbitcXHRcXHRcXHQvKiBza2lwIHRoZSBhZGQgc28gdGhhdCBOVUxMIHN0YXlzIE5VTEwgKi9cXG4rXFx0XFx0XFx0ZW1pdChBNjRfQ0JaKDAsIHJlZywgMiksIGN0eCk7XFxuK1xcdFxcdH1cXG4rXFx0XFx0ZW1pdChBNjRfQUREX1VYVFcocmVnLCBhcmVuYV92bV9iYXNlLCByZWcpLCBjdHgpO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gLyogSklUcyBhbiBlQlBGIGluc3RydWN0aW9uLlxcbiAgKiBSZXR1cm5zOlxcbiAgKiAwICAtIHN1Y2Nlc3NmdWxseSBKSVRlZCBhbiA4LWJ5dGUgZUJQRiBpbnN0cnVjdGlvbi5cXG5AQCAtMTY3OCw2ICsxNzE1LDExIEBAIHN0YXRpYyBpbnQgYnVpbGRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX2luc25cXG4gXFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZmdW5jX2FkZHIsIFxcdTAwMjZmdW5jX2FkZHJfZml4ZWQpO1xcbiBcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0aWYgKGluc24tXFx1MDAzZXNyY19yZWcgPT0gQlBGX1BTRVVET19LRlVOQ19DQUxMKSB7XFxuK1xcdFxcdFxcdHJldCA9IGVtaXRfa2Z1bmNfYXJlbmFfYXJncyhjdHgsIGluc24pO1xcbitcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0fVxcbiBcXHRcXHRlbWl0X2NhbGwoZnVuY19hZGRyLCBjdHgpO1xcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBDYWxsIHRvIGFyY2hfYnBmX3RpbWVkX21heV9nb3RvKCkgaXMgZW1pdHRlZCBieSB0aGVcXG5AQCAtMjM1MSw2ICsyMzkzLDExIEBAIGJvb2wgYnBmX2ppdF9zdXBwb3J0c19zdGFja19hcmdzKHZvaWQpXFxuIFxcdHJldHVybiB0cnVlO1xcbiB9XFxuIFxcbitib29sIGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncyh2b2lkKVxcbit7XFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuK1xcbiB2b2lkICpicGZfYXJjaF90ZXh0X2NvcHkodm9pZCAqZHN0LCB2b2lkICpzcmMsIHNpemVfdCBsZW4pXFxuIHtcXG4gXFx0aWYgKCFhYXJjaDY0X2luc25fY29weShkc3QsIHNyYywgbGVuKSlcXG5AQCAtMjUyNCwzNCArMjU3MSw3NiBAQCBzdGF0aWMgdm9pZCBjbGVhcl9nYXJiYWdlKHN0cnVjdCBqaXRfY3R4ICpjdHgsIGludCByZWcsIGludCBlZmZlY3RpdmVfYnl0ZXMpXFxuIFxcdH1cXG4gfVxcbiBcXG4rLypcXG4rICogQ29udmVydCBhbiBhcmVuYSBrZXJuZWwgYWRkcmVzcyBpbnRvIHRoZSBhcmVuYSBwb2ludGVyIGZvcm0gb24gaXRzIHdheSBpbnRvXFxuKyAqIHRoZSBCUEYgY3R4LCBkc3QgPSAodTMyKShzcmMgLSBrZXJuX3ZtX3N0YXJ0KSwgd2l0aCBAYmFzZV9sbyBob2xkaW5nIHRoZSBsb3dcXG4rICogMzIgYml0cyBvZiBrZXJuX3ZtX3N0YXJ0LiBBIG51bGxhYmxlIGFyZyBwcmVzZXJ2ZXMgTlVMTCwgdGVzdGVkIG9uIHRoZSBmdWxsXFxuKyAqIDY0LWJpdCBrZXJuZWwgcG9pbnRlci4gVGhlIDMyLWJpdCBzdWJ0cmFjdGlvbiBib3RoIHRydW5jYXRlcyBhbmQgY2xlYXJzIHRoZVxcbisgKiB1cHBlciBoYWxmLCBzbyB0aGUgc3RvcmVkIHZhbHVlIHNhdGlzZmllcyB0aGUgSklUIGludmFyaWFudCBmb3IgYXJlbmFcXG4rICogcG9pbnRlciByZWdpc3RlcnMuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBlbWl0X2FyZW5hX2FyZ19jb252KHN0cnVjdCBqaXRfY3R4ICpjdHgsIHU4IGRzdCwgdTggc3JjLCBib29sIG51bGxhYmxlLCB1OCBiYXNlX2xvKVxcbit7XFxuK1xcdGlmIChudWxsYWJsZSkge1xcbitcXHRcXHRpZiAoZHN0ICE9IHNyYylcXG4rXFx0XFx0XFx0ZW1pdChBNjRfTU9WKDEsIGRzdCwgc3JjKSwgY3R4KTtcXG4rXFx0XFx0Lyogc2tpcCB0aGUgc3VidHJhY3Rpb24gc28gdGhhdCBOVUxMIHN0YXlzIE5VTEwgKi9cXG4rXFx0XFx0ZW1pdChBNjRfQ0JaKDEsIGRzdCwgMiksIGN0eCk7XFxuK1xcdFxcdHNyYyA9IGRzdDtcXG4rXFx0fVxcbitcXHRlbWl0KEE2NF9TVUIoMCwgZHN0LCBzcmMsIGJhc2VfbG8pLCBjdHgpO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBzYXZlX2FyZ3Moc3RydWN0IGppdF9jdHggKmN0eCwgaW50IGJhcmdzX29mZiwgaW50IG9hcmdzX29mZixcXG4tXFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLFxcbi1cXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgYXJnX2F1eCAqYSxcXG4tXFx0XFx0ICAgICAgYm9vbCBmb3JfY2FsbF9vcmlnaW4pXFxuK1xcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgY29uc3Qgc3RydWN0IGFyZ19hdXggKmEsXFxuK1xcdFxcdCAgICAgIGJvb2wgZm9yX2NhbGxfb3JpZ2luLCBib29sIGlzX3N0cnVjdF9vcHMsIHU2NCBhcmVuYV9iYXNlKVxcbiB7XFxuLVxcdGludCBpO1xcbi1cXHRpbnQgcmVnO1xcbi1cXHRpbnQgZG9mZjtcXG4tXFx0aW50IHNvZmY7XFxuLVxcdGludCBzbG90cztcXG4gXFx0dTggdG1wID0gYnBmMmE2NFtUTVBfUkVHXzFdO1xcbitcXHR1OCBiYXNlX2xvID0gYnBmMmE2NFtUTVBfUkVHXzJdO1xcbitcXHRpbnQgaSwgcmVnLCBkb2ZmLCBzb2ZmLCBzbG90cztcXG4rXFxuK1xcdC8qIG9ubHkgdGhlIGxvdyAzMiBiaXRzIG9mIHRoZSBiYXNlIHRha2UgcGFydCBpbiB0aGUgc3VidHJhY3Rpb24gKi9cXG4rXFx0aWYgKGFyZW5hX2Jhc2UpXFxuK1xcdFxcdGVtaXRfYTY0X21vdl9pKDAsIGJhc2VfbG8sIChzMzIpKHUzMilhcmVuYV9iYXNlLCBjdHgpO1xcbiBcXG4gXFx0Lyogc3RvcmUgYXJndW1lbnRzIHRvIHRoZSBzdGFjayBmb3IgdGhlIGJwZiBwcm9ncmFtLCBvciByZXN0b3JlXFxuIFxcdCAqIGFyZ3VtZW50cyBmcm9tIHN0YWNrIGZvciB0aGUgb3JpZ2luYWwgZnVuY3Rpb25cXG4gXFx0ICovXFxuLVxcdGZvciAocmVnID0gMDsgcmVnIFxcdTAwM2MgYS1cXHUwMDNlcmVnc19mb3JfYXJnczsgcmVnKyspIHtcXG4tXFx0XFx0ZW1pdChmb3JfY2FsbF9vcmlnaW4gP1xcbi1cXHRcXHQgICAgIEE2NF9MRFI2NEkocmVnLCBBNjRfU1AsIGJhcmdzX29mZikgOlxcbi1cXHRcXHQgICAgIEE2NF9TVFI2NEkocmVnLCBBNjRfU1AsIGJhcmdzX29mZiksXFxuLVxcdFxcdCAgICAgY3R4KTtcXG4tXFx0XFx0YmFyZ3Nfb2ZmICs9IDg7XFxuK1xcdGZvciAoaSA9IDAsIHJlZyA9IDA7IGkgXFx1MDAzYyBhLVxcdTAwM2VhcmdzX2luX3JlZ3M7IGkrKykge1xcbitcXHRcXHRib29sIGFyZW5hX2FyZyA9IGFyZW5hX2Jhc2UgXFx1MDAyNlxcdTAwMjYgKG0tXFx1MDAzZWFyZ19mbGFnc1tpXSBcXHUwMDI2IEJURl9GTU9ERUxfQVJFTkFfQVJHKTtcXG4rXFx0XFx0Ym9vbCBudWxsYWJsZSA9IG0tXFx1MDAzZWFyZ19mbGFnc1tpXSBcXHUwMDI2IEJURl9GTU9ERUxfTlVMTEFCTEVfQVJHO1xcbitcXG4rXFx0XFx0c2xvdHMgPSAobS1cXHUwMDNlYXJnX3NpemVbaV0gKyA3KSAvIDg7XFxuK1xcdFxcdHdoaWxlIChzbG90cy0tIFxcdTAwM2UgMCkge1xcbitcXHRcXHRcXHRpZiAoZm9yX2NhbGxfb3JpZ2luKSB7XFxuK1xcdFxcdFxcdFxcdGVtaXQoQTY0X0xEUjY0SShyZWcsIEE2NF9TUCwgYmFyZ3Nfb2ZmKSwgY3R4KTtcXG4rXFx0XFx0XFx0fSBlbHNlIGlmIChhcmVuYV9hcmcpIHtcXG4rXFx0XFx0XFx0XFx0ZW1pdF9hcmVuYV9hcmdfY29udihjdHgsIHRtcCwgcmVnLCBudWxsYWJsZSwgYmFzZV9sbyk7XFxuK1xcdFxcdFxcdFxcdGVtaXQoQTY0X1NUUjY0SSh0bXAsIEE2NF9TUCwgYmFyZ3Nfb2ZmKSwgY3R4KTtcXG4rXFx0XFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0XFx0ZW1pdChBNjRfU1RSNjRJKHJlZywgQTY0X1NQLCBiYXJnc19vZmYpLCBjdHgpO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdHJlZysrO1xcbitcXHRcXHRcXHRiYXJnc19vZmYgKz0gODtcXG4rXFx0XFx0fVxcbiBcXHR9XFxuIFxcbi1cXHRzb2ZmID0gMzI7IC8qIG9uIHN0YWNrIGFyZ3VtZW50cyBzdGFydCBmcm9tIEZQICsgMzIgKi9cXG4rXFx0LypcXG4rXFx0ICogT24tc3RhY2sgYXJndW1lbnRzIHN0YXJ0IGFib3ZlIHRoZSBmcmFtZShzKSBwdXNoZWQgYnkgdGhlIHRyYW1wb2xpbmVcXG4rXFx0ICogcHJvbG9ndWUuIEVudGVyZWQgdGhyb3VnaCB0aGUgZmVudHJ5IGNhbGwgZnJvbSBhIHRyYWNlZCBmdW5jdGlvbiwgdGhlXFxuK1xcdCAqIHByb2xvZ3VlIHNhdmVzIGJvdGggdGhlIHBhcmVudCAoRlAveDkpIGFuZCB0aGUgdHJhY2VkIGZ1bmN0aW9uXFxuK1xcdCAqIChGUC9MUikgZnJhbWVzLCBzbyB0aGUgYXJndW1lbnRzIHN0YXJ0IGF0IEZQICsgMzIuIEEgc3RydWN0X29wc1xcbitcXHQgKiBjYWxsYmFjayBpcyBjYWxsZWQgaW5kaXJlY3RseSBhbmQgb25seSB0aGUgRlAvTFIgZnJhbWUgaXMgc2F2ZWQsIHNvXFxuK1xcdCAqIHRoZXkgc3RhcnQgYXQgRlAgKyAxNi5cXG4rXFx0ICovXFxuK1xcdHNvZmYgPSBpc19zdHJ1Y3Rfb3BzID8gMTYgOiAzMjtcXG4gXFx0ZG9mZiA9IChmb3JfY2FsbF9vcmlnaW4gPyBvYXJnc19vZmYgOiBiYXJnc19vZmYpO1xcbiBcXG4gXFx0Lyogc2F2ZSBvbiBzdGFjayBhcmd1bWVudHMgKi9cXG4gXFx0Zm9yIChpID0gYS1cXHUwMDNlYXJnc19pbl9yZWdzOyBpIFxcdTAwM2MgbS1cXHUwMDNlbnJfYXJnczsgaSsrKSB7XFxuK1xcdFxcdGJvb2wgYXJlbmFfYXJnID0gYXJlbmFfYmFzZSBcXHUwMDI2XFx1MDAyNiAobS1cXHUwMDNlYXJnX2ZsYWdzW2ldIFxcdTAwMjYgQlRGX0ZNT0RFTF9BUkVOQV9BUkcpO1xcbitcXHRcXHRib29sIG51bGxhYmxlID0gbS1cXHUwMDNlYXJnX2ZsYWdzW2ldIFxcdTAwMjYgQlRGX0ZNT0RFTF9OVUxMQUJMRV9BUkc7XFxuK1xcbiBcXHRcXHRzbG90cyA9IChtLVxcdTAwM2Vhcmdfc2l6ZVtpXSArIDcpIC8gODtcXG4gXFx0XFx0LyogdmVyaWZpZXIgZW5zdXJlcyBhcmdfc2l6ZSBcXHUwMDNjPSAxNiwgc28gc2xvdHMgZXF1YWxzIDEgb3IgMiAqL1xcbiBcXHRcXHR3aGlsZSAoc2xvdHMtLSBcXHUwMDNlIDApIHtcXG5AQCAtMjU2MSw2ICsyNjUwLDE1IEBAIHN0YXRpYyB2b2lkIHNhdmVfYXJncyhzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBpbnQgYmFyZ3Nfb2ZmLCBpbnQgb2FyZ3Nfb2ZmLFxcbiBcXHRcXHRcXHQgKi9cXG4gXFx0XFx0XFx0aWYgKHNsb3RzID09IDAgXFx1MDAyNlxcdTAwMjYgIWZvcl9jYWxsX29yaWdpbilcXG4gXFx0XFx0XFx0XFx0Y2xlYXJfZ2FyYmFnZShjdHgsIHRtcCwgbS1cXHUwMDNlYXJnX3NpemVbaV0gJSA4KTtcXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogTm8gZ3VhcmQgb24gZm9yX2NhbGxfb3JpZ2luIGhlcmU6IG9ubHkgdGhlIGluZGlyZWN0XFxuK1xcdFxcdFxcdCAqIHRyYW1wb2xpbmUgaXMgZ2l2ZW4gYSBiYXNlLCBhbmQgaXQgbmV2ZXIgY2FsbHMgdGhlXFxuK1xcdFxcdFxcdCAqIG9yaWdpbmFsIGZ1bmN0aW9uLCBzbyBhcmd1bWVudHMgYXJlIG5ldmVyIGNvbnZlcnRlZFxcbitcXHRcXHRcXHQgKiBvbiB0aGVpciB3YXkgYmFjayBvdXQgdG8gaXQuIFNlZSB0aGUgV0FSTl9PTl9PTkNFKClcXG4rXFx0XFx0XFx0ICogaW4gcHJlcGFyZV90cmFtcG9saW5lKCkuXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRpZiAoYXJlbmFfYXJnKVxcbitcXHRcXHRcXHRcXHRlbWl0X2FyZW5hX2FyZ19jb252KGN0eCwgdG1wLCB0bXAsIG51bGxhYmxlLCBiYXNlX2xvKTtcXG4gXFx0XFx0XFx0ZW1pdChBNjRfU1RSNjRJKHRtcCwgQTY0X1NQLCBkb2ZmKSwgY3R4KTtcXG4gXFx0XFx0XFx0c29mZiArPSA4O1xcbiBcXHRcXHRcXHRkb2ZmICs9IDg7XFxuQEAgLTI2MjAsOCArMjcxOCwyMSBAQCBzdGF0aWMgaW50IHByZXBhcmVfdHJhbXBvbGluZShzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSxcXG4gXFx0Ym9vbCBpc19zdHJ1Y3Rfb3BzID0gaXNfc3RydWN0X29wc190cmFtcChmZW50cnkpO1xcbiBcXHRpbnQgY29va2llX29mZiwgY29va2llX2NudCwgY29va2llX2JhcmdzX29mZjtcXG4gXFx0aW50IGZzZXNzaW9uX2NudCA9IGJwZl9mc2Vzc2lvbl9jbnQodG5vZGVzKTtcXG4rXFx0dTY0IGFyZW5hX2Jhc2U7XFxuIFxcdHU2NCBmdW5jX21ldGE7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBGX0lORElSRUNUIGlzIG9ubHkgY29tcGF0aWJsZSB3aXRoIEZfUkVUX0ZFTlRSWV9SRVQsIGl0IGlzIGV4cGxpY2l0bHlcXG4rXFx0ICogaW5jb21wYXRpYmxlIHdpdGggRl9DQUxMX09SSUcgfCBGX1NLSVBfRlJBTUUgfCBGX0lQX0FSRyBiZWNhdXNlXFxuK1xcdCAqIEBmdW5jX2FkZHIuIEFyZW5hIGNvbnZlcnNpb24gcmVsaWVzIG9uIHRoaXM6IGJwZl90cmFtcF9hcmVuYV9iYXNlKClcXG4rXFx0ICogb25seSByZXR1cm5zIGEgYmFzZSBmb3IgdGhlIGluZGlyZWN0IHRyYW1wb2xpbmUsIHdoaWNoIHRoZXJlZm9yZVxcbitcXHQgKiBuZXZlciBjYWxscyB0aGUgb3JpZ2luYWwgZnVuY3Rpb24gd2l0aCBjb252ZXJ0ZWQgYXJndW1lbnRzLlxcbitcXHQgKi9cXG4rXFx0V0FSTl9PTl9PTkNFKChmbGFncyBcXHUwMDI2IEJQRl9UUkFNUF9GX0lORElSRUNUKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgIChmbGFncyBcXHUwMDI2IH4oQlBGX1RSQU1QX0ZfSU5ESVJFQ1QgfCBCUEZfVFJBTVBfRl9SRVRfRkVOVFJZX1JFVCkpKTtcXG4rXFxuK1xcdGFyZW5hX2Jhc2UgPSBicGZfdHJhbXBfYXJlbmFfYmFzZShtLCB0bm9kZXMsIGZsYWdzKTtcXG4rXFxuIFxcdC8qIHRyYW1wb2xpbmUgc3RhY2sgbGF5b3V0OlxcbiBcXHQgKiAgICAgICAgICAgICAgICAgICAgWyBwYXJlbnQgaXAgICAgICAgICBdXFxuIFxcdCAqICAgICAgICAgICAgICAgICAgICBbIEZQICAgICAgICAgICAgICAgIF1cXG5AQCAtMjczNyw3ICsyODQ4LDcgQEAgc3RhdGljIGludCBwcmVwYXJlX3RyYW1wb2xpbmUoc3RydWN0IGppdF9jdHggKmN0eCwgc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sXFxuIFxcdHN0b3JlX2Z1bmNfbWV0YShjdHgsIGZ1bmNfbWV0YSwgZnVuY19tZXRhX29mZik7XFxuIFxcbiBcXHQvKiBzYXZlIGFyZ3MgZm9yIGJwZiAqL1xcbi1cXHRzYXZlX2FyZ3MoY3R4LCBiYXJnc19vZmYsIG9hcmdzX29mZiwgbSwgYSwgZmFsc2UpO1xcbitcXHRzYXZlX2FyZ3MoY3R4LCBiYXJnc19vZmYsIG9hcmdzX29mZiwgbSwgYSwgZmFsc2UsIGlzX3N0cnVjdF9vcHMsIGFyZW5hX2Jhc2UpO1xcbiBcXG4gXFx0Lyogc2F2ZSBjYWxsZWUgc2F2ZWQgcmVnaXN0ZXJzICovXFxuIFxcdGVtaXQoQTY0X1NUUjY0SShBNjRfUigxOSksIEE2NF9TUCwgcmVnc19vZmYpLCBjdHgpO1xcbkBAIC0yNzg1LDggKzI4OTYsOCBAQCBzdGF0aWMgaW50IHByZXBhcmVfdHJhbXBvbGluZShzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSxcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKGZsYWdzIFxcdTAwMjYgQlBGX1RSQU1QX0ZfQ0FMTF9PUklHKSB7XFxuLVxcdFxcdC8qIHNhdmUgYXJncyBmb3Igb3JpZ2luYWwgZnVuYyAqL1xcbi1cXHRcXHRzYXZlX2FyZ3MoY3R4LCBiYXJnc19vZmYsIG9hcmdzX29mZiwgbSwgYSwgdHJ1ZSk7XFxuK1xcdFxcdC8qIHRoZSBvcmlnaW5hbCBmdW5jIHRha2VzIGtlcm5lbCBhZGRyZXNzZXMsIG5ldmVyIGNvbnZlcnRlZCBvbmVzICovXFxuK1xcdFxcdHNhdmVfYXJncyhjdHgsIGJhcmdzX29mZiwgb2FyZ3Nfb2ZmLCBtLCBhLCB0cnVlLCBpc19zdHJ1Y3Rfb3BzLCAwKTtcXG4gXFx0XFx0LyogY2FsbCBvcmlnaW5hbCBmdW5jICovXFxuIFxcdFxcdGVtaXQoQTY0X0xEUjY0SShBNjRfUigxMCksIEE2NF9TUCwgcmV0YWRkcl9vZmYpLCBjdHgpO1xcbiBcXHRcXHRlbWl0KEE2NF9BRFIoQTY0X0xSLCBBQVJDSDY0X0lOU05fU0laRSAqIDIpLCBjdHgpO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3N0cnVjdF9vcHNfYXJlbmEuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3Rfc3RydWN0X29wc19hcmVuYS5jXFxuaW5kZXggOTQwZWMyY2RhMGQ1Mi4uN2Y5ZjU0YmEzZmJlNSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3N0cnVjdF9vcHNfYXJlbmEuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3Rfc3RydWN0X29wc19hcmVuYS5jXFxuQEAgLTYsNyArNiw3IEBAXFxuICNpbmNsdWRlIFxcXCJzdHJ1Y3Rfb3BzX2FyZW5hX2F0dGFjaC5za2VsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJzdHJ1Y3Rfb3BzX2FyZW5hX2ZhaWwuc2tlbC5oXFxcIlxcbiBcXG4tI2lmIGRlZmluZWQoX194ODZfNjRfXylcXG4rI2lmIGRlZmluZWQoX194ODZfNjRfXykgfHwgZGVmaW5lZChfX2FhcmNoNjRfXylcXG4gLypcXG4gICogQXR0YWNoIGNhbGxiYWNrcyB3aXRoIF9fYXJlbmEgYW5kIF9fYXJlbmFfX251bGxhYmxlIGFyZ3VtZW50cyBhbmQgZHJpdmVcXG4gICogdGhlbSB0aHJvdWdoIHRoZSBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYSooKSBrZnVuY3MuXFxuQEAgLTExMSwxMSArMTExLDExIEBAIHN0YXRpYyB2b2lkIGFyZW5hX2FyZ19hdHRhY2godm9pZClcXG4gdm9pZCBzZXJpYWxfdGVzdF9zdHJ1Y3Rfb3BzX2FyZW5hKHZvaWQpXFxuIHtcXG4gXFx0LypcXG4tXFx0ICogQXJlbmEgc3RydWN0X29wcyBhcmd1bWVudHMgbmVlZCBKSVQgc3VwcG9ydCwgY3VycmVudGx5IHg4Ni02NCBvbmx5Llxcbi1cXHQgKiBFbHNld2hlcmUgdmVyaWZpY2F0aW9uIGZhaWxzIHdpdGggXFxcIkpJVCBkb2VzIG5vdCBzdXBwb3J0IGFyZW5hXFxuLVxcdCAqIGFyZ3VtZW50c1xcXCIsIHNvIHRoZSBwcm9ncmFtcyBjYW5ub3QgZXZlbiBsb2FkLlxcbitcXHQgKiBBcmVuYSBzdHJ1Y3Rfb3BzIGFyZ3VtZW50cyBuZWVkIEpJVCBzdXBwb3J0LCBjdXJyZW50bHkgeDg2LTY0IGFuZFxcbitcXHQgKiBhcm02NCBvbmx5LiBFbHNld2hlcmUgdmVyaWZpY2F0aW9uIGZhaWxzIHdpdGggXFxcIkpJVCBkb2VzIG5vdCBzdXBwb3J0XFxuK1xcdCAqIGFyZW5hIGFyZ3VtZW50c1xcXCIsIHNvIHRoZSBwcm9ncmFtcyBjYW5ub3QgZXZlbiBsb2FkLlxcbiBcXHQgKi9cXG4tI2lmIGRlZmluZWQoX194ODZfNjRfXylcXG4rI2lmIGRlZmluZWQoX194ODZfNjRfXykgfHwgZGVmaW5lZChfX2FhcmNoNjRfXylcXG4gXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcImFyZW5hX2FyZ1xcXCIpKVxcbiBcXHRcXHRhcmVuYV9hcmcoKTtcXG4gXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcImFyZW5hX2FyZ19mYWlsXFxcIikpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuYy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jLmNcXG5pbmRleCBjZGNlYTg4OWRhNTg2Li5iZjBkMzA0ZTBlNTljIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuYy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jLmNcXG5AQCAtMjcsNiArMjcsNyBAQCB2b2xhdGlsZSB1NjQgc3Rhc2g7XFxuIFxcbiBTRUMoXFxcInN5c2NhbGxcXFwiKVxcbiBfX2FyY2hfeDg2XzY0XFxuK19fYXJjaF9hcm02NFxcbiBfX3N1Y2Nlc3MgX19yZXR2YWwoMClcXG4gaW50IGFyZW5hX2FyZ19mb3Jtcyh2b2lkICpjdHgpXFxuIHtcXG5AQCAtNzAsNiArNzEsNyBAQCBpbnQgYXJlbmFfYXJnX2Zvcm1zKHZvaWQgKmN0eClcXG4gICovXFxuIFNFQyhcXFwic3lzY2FsbFxcXCIpXFxuIF9fYXJjaF94ODZfNjRcXG4rX19hcmNoX2FybTY0XFxuIF9fc3VjY2VzcyBfX3JldHZhbCgwKVxcbiBpbnQgYXJlbmFfYXJnX3JlYmFzZSh2b2lkICpjdHgpXFxuIHtcXG5AQCAtMTExLDYgKzExMyw3IEBAIGludCBhcmVuYV9hcmdfcmViYXNlKHZvaWQgKmN0eClcXG4gXFxuIFNFQyhcXFwic3lzY2FsbFxcXCIpXFxuIF9fYXJjaF94ODZfNjRcXG4rX19hcmNoX2FybTY0XFxuIF9fc3VjY2VzcyBfX3JldHZhbCgwKVxcbiBpbnQgYXJlbmFfYXJnczUodm9pZCAqY3R4KVxcbiB7XFxuQEAgLTE0Miw2ICsxNDUsNyBAQCBpbnQgYXJlbmFfYXJnczUodm9pZCAqY3R4KVxcbiBcXG4gU0VDKFxcXCJzeXNjYWxsXFxcIilcXG4gX19hcmNoX3g4Nl82NFxcbitfX2FyY2hfYXJtNjRcXG4gX19zdWNjZXNzIF9fcmV0dmFsKDApXFxuIGludCBhcmVuYV9hcmdfbWl4ZWQodm9pZCAqY3R4KVxcbiB7XFxuQEAgLTE2OSw2ICsxNzMsNyBAQCBpbnQgYXJlbmFfYXJnX21peGVkKHZvaWQgKmN0eClcXG4gLyoga2VybmVsLXNpZGUgZmF1bHRzIG9uIHVucG9wdWxhdGVkIHBhZ2VzIHJlY292ZXIgdmlhIHRoZSBzY3JhdGNoIHBhZ2UgKi9cXG4gU0VDKFxcXCJzeXNjYWxsXFxcIilcXG4gX19hcmNoX3g4Nl82NFxcbitfX2FyY2hfYXJtNjRcXG4gX19zdWNjZXNzIF9fcmV0dmFsKDApXFxuIGludCBhcmVuYV9hcmdfdW5wb3B1bGF0ZWQodm9pZCAqY3R4KVxcbiB7XFxuQEAgLTE4OSw2ICsxOTQsNyBAQCBpbnQgYXJlbmFfYXJnX3VucG9wdWxhdGVkKHZvaWQgKmN0eClcXG4gXFxuIFNFQyhcXFwic3lzY2FsbFxcXCIpXFxuIF9fYXJjaF94ODZfNjRcXG4rX19hcmNoX2FybTY0XFxuIF9fZmFpbHVyZSBfX21zZyhcXFwiYXJlbmEgcG9pbnRlciByZXF1aXJlcyBhIHByb2dyYW0gd2l0aCBhbiBhc3NvY2lhdGVkIGFyZW5hXFxcIilcXG4gaW50IGFyZW5hX2FyZ19ub19hcmVuYSh2b2lkICpjdHgpXFxuIHtcXG5AQCAtMTk4LDYgKzIwNCw3IEBAIGludCBhcmVuYV9hcmdfbm9fYXJlbmEodm9pZCAqY3R4KVxcbiBcXG4gU0VDKFxcXCJzeXNjYWxsXFxcIilcXG4gX19hcmNoX3g4Nl82NFxcbitfX2FyY2hfYXJtNjRcXG4gX19mYWlsdXJlIF9fbXNnKFxcXCJpcyBub3QgYSBwb2ludGVyIHRvIGFyZW5hIG9yIHNjYWxhclxcXCIpXFxuIGludCBhcmVuYV9hcmdfYmFkX3JlZyh2b2lkICpjdHgpXFxuIHtcXG5AQCAtMjEzLDYgKzIyMCw3IEBAIGludCBhcmVuYV9hcmdfYmFkX3JlZyh2b2lkICpjdHgpXFxuIFxcdGRlZmluZWQoX19CUEZfRkVBVFVSRV9TVEFDS19BUkdVTUVOVClcXG4gU0VDKFxcXCJzeXNjYWxsXFxcIilcXG4gX19hcmNoX3g4Nl82NFxcbitfX2FyY2hfYXJtNjRcXG4gX19mYWlsdXJlIF9fbXNnKFxcXCJhcmVuYSBwb2ludGVyIGNhbm5vdCBiZSBhIHN0YWNrIGFyZ3VtZW50XFxcIilcXG4gaW50IGFyZW5hX2FyZ19zdGFjayh2b2lkICpjdHgpXFxuIHtcXG5AQCAtMjIzLDYgKzIzMSw3IEBAIGludCBhcmVuYV9hcmdfc3RhY2sodm9pZCAqY3R4KVxcbiAjZWxzZVxcbiBTRUMoXFxcInN5c2NhbGxcXFwiKVxcbiBfX2FyY2hfeDg2XzY0XFxuK19fYXJjaF9hcm02NFxcbiBfX2Rlc2NyaXB0aW9uKFxcXCJhcmVuYV9hcmdfc3RhY2s6IG5vdCBzdXBwb3J0ZWQsIGR1bW15IHRlc3RcXFwiKVxcbiBfX3N1Y2Nlc3NcXG4gaW50IGFyZW5hX2FyZ19zdGFjayh2b2lkICpjdHgpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuY19qaXQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuY19qaXQuY1xcbmluZGV4IGM5YjkxODY2MjYxNjIuLmI1YTAxY2JjMzNhNzMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jX2ppdC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jX2ppdC5jXFxuQEAgLTMyLDYgKzMyLDEwIEBAIF9faml0ZWQoXFxcIlxcdG1vdmxcXHQlZWRpLCAlZWRpXFxcIilcXG4gX19qaXRlZChcXFwiXFx0YWRkcVxcdCVyMTIsICVyZGlcXFwiKVxcbiBfX2ppdGVkKFxcXCIuLi5cXFwiKVxcbiBfX2ppdGVkKFxcXCJcXHRjYWxscVxcdHt7Lip9fVxcXCIpXFxuK19fYXJjaF9hcm02NFxcbitfX2ppdGVkKFxcXCIuLi5cXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRhZGRcXHR4MCwgeDI4LCB3MCwgdXh0d1xcXCIpXFxuK19faml0ZWQoXFxcIlxcdHt7KGJsfG1vdilcXHQuKn19XFxcIilcXG4gX19zdWNjZXNzXFxuIGludCBhcmVuYV9hcmdfaml0X3JlYmFzZSh2b2lkICpjdHgpXFxuIHtcXG5AQCAtNDgsNiArNTIsMTIgQEAgX19qaXRlZChcXFwiXFx0dGVzdGxcXHQlZWRpLCAlZWRpXFxcIilcXG4gX19qaXRlZChcXFwiXFx0amVcXHRMMFxcXCIpXFxuIF9faml0ZWQoXFxcIlxcdGFkZHFcXHQlcjEyLCAlcmRpXFxcIilcXG4gX19qaXRlZChcXFwiTDA6XFx0Y2FsbHFcXHR7ey4qfX1cXFwiKVxcbitfX2FyY2hfYXJtNjRcXG4rX19qaXRlZChcXFwiLi4uXFxcIilcXG4rX19qaXRlZChcXFwiXFx0bW92XFx0dzAsIHcwXFxcIilcXG4rX19qaXRlZChcXFwiXFx0Y2J6XFx0dzAsIEwwXFxcIilcXG4rX19qaXRlZChcXFwiXFx0YWRkXFx0eDAsIHgyOCwgdzAsIHV4dHdcXFwiKVxcbitfX2ppdGVkKFxcXCJMMDpcXHR7ey4qfX1cXFwiKVxcbiBfX3N1Y2Nlc3NcXG4gaW50IGFyZW5hX2FyZ19qaXRfbnVsbGFibGUodm9pZCAqY3R4KVxcbiB7XFxuQEAgLTcyLDYgKzgyLDE2IEBAIF9faml0ZWQoXFxcIlxcdHRlc3RsXFx0JXI4ZCwgJXI4ZFxcXCIpXFxuIF9faml0ZWQoXFxcIlxcdGplXFx0TDBcXFwiKVxcbiBfX2ppdGVkKFxcXCJcXHRhZGRxXFx0JXIxMiwgJXI4XFxcIilcXG4gX19qaXRlZChcXFwiTDA6XFx0Y2FsbHFcXHR7ey4qfX1cXFwiKVxcbitfX2FyY2hfYXJtNjRcXG4rX19qaXRlZChcXFwiLi4uXFxcIilcXG4rX19qaXRlZChcXFwiXFx0YWRkXFx0eDAsIHgyOCwgdzAsIHV4dHdcXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRhZGRcXHR4MSwgeDI4LCB3MSwgdXh0d1xcXCIpXFxuK19faml0ZWQoXFxcIlxcdGFkZFxcdHgyLCB4MjgsIHcyLCB1eHR3XFxcIilcXG4rX19qaXRlZChcXFwiXFx0YWRkXFx0eDMsIHgyOCwgdzMsIHV4dHdcXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRtb3ZcXHR3NCwgdzRcXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRjYnpcXHR3NCwgTDBcXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRhZGRcXHR4NCwgeDI4LCB3NCwgdXh0d1xcXCIpXFxuK19faml0ZWQoXFxcIkwwOlxcdHt7Lip9fVxcXCIpXFxuIF9fc3VjY2Vzc1xcbiBpbnQgYXJlbmFfYXJnX2ppdF9hcmdzNSh2b2lkICpjdHgpXFxuIHtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfYXJlbmEuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJ1Y3Rfb3BzX2FyZW5hLmNcXG5pbmRleCBiYTA0YzczZDhkOTY3Li44YWE4NjM5ZGY5MWYwIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJ1Y3Rfb3BzX2FyZW5hLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RydWN0X29wc19hcmVuYS5jXFxuQEAgLTU5LDExICs1OSwyOCBAQCBpbnQgdGVzdF9hcmVuYV9zdGFja19jYih1bnNpZ25lZCBsb25nIGxvbmcgKmN0eClcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK1NFQyhcXFwic3RydWN0X29wcy90ZXN0X2FyZW5hX211bHRpc2xvdFxcXCIpXFxuK2ludCB0ZXN0X2FyZW5hX211bHRpc2xvdF9jYih1bnNpZ25lZCBsb25nIGxvbmcgKmN0eClcXG4re1xcbitcXHR1NjQgX19hcmVuYSAqcHRyID0gKHU2NCBfX2FyZW5hICopY3R4WzJdO1xcbitcXG4rXFx0YXJlbmFfdG91Y2grKztcXG4rXFx0LypcXG4rXFx0ICogVGhlIDE2LWJ5dGUgc3RydWN0IG9jY3VwaWVzIGN0eFswXSBhbmQgY3R4WzFdLCBzbyBAcHRyIGlzIGFyZ3VtZW50XFxuK1xcdCAqIG9uZSBidXQgc2xvdCB0d28uIEdldHRpbmcgdGhhdCB3cm9uZyBoYW5kcyB0aGUgY2FsbGJhY2sgYSBzY2FsYXIuXFxuK1xcdCAqL1xcbitcXHRpZiAoY3R4WzBdICE9IDExIHx8IGN0eFsxXSAhPSAyMilcXG4rXFx0XFx0cmV0dXJuIDB4YmFkO1xcbitcXHQqcHRyICs9IDE7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBTRUMoXFxcIi5zdHJ1Y3Rfb3BzLmxpbmtcXFwiKVxcbiBzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzMyB0ZXN0bW9kX2FyZW5hID0ge1xcbiBcXHQudGVzdF9hcmVuYSA9ICh2b2lkICopdGVzdF9hcmVuYV9jYixcXG4gXFx0LnRlc3RfYXJlbmFfbnVsbGFibGUgPSAodm9pZCAqKXRlc3RfYXJlbmFfbnVsbGFibGVfY2IsXFxuIFxcdC50ZXN0X2FyZW5hX3N0YWNrID0gKHZvaWQgKil0ZXN0X2FyZW5hX3N0YWNrX2NiLFxcbitcXHQudGVzdF9hcmVuYV9tdWx0aXNsb3QgPSAodm9pZCAqKXRlc3RfYXJlbmFfbXVsdGlzbG90X2NiLFxcbiB9O1xcbiBcXG4gU0VDKFxcXCJzeXNjYWxsXFxcIilcXG5AQCAtMTA5LDYgKzEyNiwxMyBAQCBpbnQgdHJpZ2dlcih2b2lkICpjdHgpXFxuIFxcdGlmICgqdmFsICE9IDQ0KVxcbiBcXHRcXHRyZXR1cm4gOTtcXG4gXFxuK1xcdC8qIGEgbXVsdGktc2xvdCBhcmcgcHJlY2VkZXMgdGhlIGFyZW5hIHBvaW50ZXIgaGVyZSAqL1xcbitcXHRyZXQgPSBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9tdWx0aXNsb3QoKHU2NCAqKXZhbCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiAxMDtcXG4rXFx0aWYgKCp2YWwgIT0gNDUpXFxuK1xcdFxcdHJldHVybiAxMTtcXG4rXFxuIFxcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFxcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKXZhbCwgMSk7XFxuICNlbmRpZlxcbiBcXHRyZXR1cm4gMDtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmNcXG5pbmRleCBhNjEzM2Y3NTIxZjM0Li45MzY2YTNjNTc4ZjEzIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jXFxuQEAgLTQwMiwxMiArNDAyLDE5IEBAIHN0YXRpYyBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19fdGVzdF9hcmVuYV9zdGFjayh1NjQgYSwgdTY0IGIsIHU2NCBjLCB1NjQgZCxcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19fdGVzdF9hcmVuYV9tdWx0aXNsb3Qoc3RydWN0IGJwZl90ZXN0bW9kX2FyZW5hX3BhaXIgcCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICB1NjQgKnB0cl9fYXJlbmEpXFxuK3tcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIHN0YXRpYyBzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzMyBfX2JwZl90ZXN0bW9kX29wczMgPSB7XFxuIFxcdC50ZXN0XzEgPSBicGZfdGVzdG1vZF90ZXN0XzMsXFxuIFxcdC50ZXN0XzIgPSBicGZfdGVzdG1vZF90ZXN0XzQsXFxuIFxcdC50ZXN0X2FyZW5hID0gYnBmX3Rlc3Rtb2Rfb3BzM19fdGVzdF9hcmVuYSxcXG4gXFx0LnRlc3RfYXJlbmFfbnVsbGFibGUgPSBicGZfdGVzdG1vZF9vcHMzX190ZXN0X2FyZW5hX251bGxhYmxlLFxcbiBcXHQudGVzdF9hcmVuYV9zdGFjayA9IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmFfc3RhY2ssXFxuK1xcdC50ZXN0X2FyZW5hX211bHRpc2xvdCA9IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmFfbXVsdGlzbG90LFxcbiB9O1xcbiBcXG4gc3RhdGljIHZvaWQgYnBmX3Rlc3Rtb2RfdGVzdF9zdHJ1Y3Rfb3BzMyh2b2lkKVxcbkBAIC00NDEsNiArNDQ4LDEzIEBAIF9fYnBmX2tmdW5jIGludCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9zdGFjayh1NjQgKnB0cl9fYXJlbmEpXFxuIFxcdHJldHVybiBzdF9vcHMzLVxcdTAwM2V0ZXN0X2FyZW5hX3N0YWNrKDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIHB0cl9fYXJlbmEpO1xcbiB9XFxuIFxcbitfX2JwZl9rZnVuYyBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfbXVsdGlzbG90KHU2NCAqcHRyX19hcmVuYSlcXG4re1xcbitcXHRzdHJ1Y3QgYnBmX3Rlc3Rtb2RfYXJlbmFfcGFpciBwID0geyAuYSA9IDExLCAuYiA9IDIyIH07XFxuK1xcbitcXHRyZXR1cm4gc3Rfb3BzMy1cXHUwMDNldGVzdF9hcmVuYV9tdWx0aXNsb3QocCwgcHRyX19hcmVuYSk7XFxuK31cXG4rXFxuIHN0cnVjdCBicGZfdGVzdG1vZF9idGZfdHlwZV90YWdfMSB7XFxuIFxcdGludCBhO1xcbiB9O1xcbkBAIC04NTIsNiArODY2LDcgQEAgQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0XzIpXFxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYSlcXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX251bGxhYmxlKVxcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfc3RhY2spXFxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9tdWx0aXNsb3QpXFxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfZ2V0X2RlZmF1bHRfdHJ1c3RlZF9wdHJfdGVzdCk7XFxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfcHV0X2RlZmF1bHRfdHJ1c3RlZF9wdHJfdGVzdCk7XFxuIEJURl9LRlVOQ1NfRU5EKGJwZl90ZXN0bW9kX2NvbW1vbl9rZnVuY19pZHMpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5oXFxuaW5kZXggMzNmMmFmNWI3MDg1Ny4uMjEwYjkxOTI5MGNjMiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuaFxcbkBAIC0xMDMsNiArMTAzLDEyIEBAIHN0cnVjdCBicGZfdGVzdG1vZF9vcHMyIHtcXG4gXFx0aW50ICgqdGVzdF8xKSh2b2lkKTtcXG4gfTtcXG4gXFxuKy8qIDE2IGJ5dGVzLCBzbyBpdCB0YWtlcyB0d28gYXJndW1lbnQgc2xvdHMgd2hlbiBwYXNzZWQgYnkgdmFsdWUgKi9cXG4rc3RydWN0IGJwZl90ZXN0bW9kX2FyZW5hX3BhaXIge1xcbitcXHR1NjQgYTtcXG4rXFx0dTY0IGI7XFxuK307XFxuK1xcbiBzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzMyB7XFxuIFxcdGludCAoKnRlc3RfMSkodm9pZCk7XFxuIFxcdGludCAoKnRlc3RfMikodm9pZCk7XFxuQEAgLTExMiw2ICsxMTgsOCBAQCBzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzMyB7XFxuIFxcdC8qIGVub3VnaCBsZWFkaW5nIGFyZ3MgdG8gZm9yY2UgQHB0ciBvbnRvIHRoZSBzdGFjayBvbiB4ODYgYW5kIGFybTY0ICovXFxuIFxcdGludCAoKnRlc3RfYXJlbmFfc3RhY2spKHU2NCBhLCB1NjQgYiwgdTY0IGMsIHU2NCBkLCB1NjQgZSwgdTY0IGYsXFxuIFxcdFxcdFxcdFxcdHU2NCBnLCB1NjQgaCwgdTY0ICpwdHIpO1xcbitcXHQvKiBhIG11bHRpLXNsb3QgbGVhZGluZyBhcmcsIHNvIEBwdHIgaXMgbm90IGF0IHRoZSBzbG90IGl0cyBhcmcgaW5kZXggc3VnZ2VzdHMgKi9cXG4rXFx0aW50ICgqdGVzdF9hcmVuYV9tdWx0aXNsb3QpKHN0cnVjdCBicGZfdGVzdG1vZF9hcmVuYV9wYWlyIHAsIHU2NCAqcHRyKTtcXG4gfTtcXG4gXFxuIHN0cnVjdCBzdF9vcHNfYXJncyB7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kX2tmdW5jLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oXFxuaW5kZXggYzQzODNhY2I1M2MxMS4uN2Q4MTA3MGVlZmU3ZiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaFxcbkBAIC0xMjMsNiArMTIzLDcgQEAgdm9pZCBicGZfdGVzdG1vZF90ZXN0X21vZF9rZnVuYyhpbnQgaSkgX19rc3ltO1xcbiBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmEoX191NjQgKnB0cl9fYXJlbmEpIF9fa3N5bTtcXG4gaW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX251bGxhYmxlKF9fdTY0ICpwdHJfX2FyZW5hX19udWxsYWJsZSkgX19rc3ltO1xcbiBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfc3RhY2soX191NjQgKnB0cl9fYXJlbmEpIF9fa3N5bTtcXG4raW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX211bHRpc2xvdChfX3U2NCAqcHRyX19hcmVuYSkgX19rc3ltO1xcbiBcXG4gX191NjQgYnBmX2tmdW5jX2NhbGxfdGVzdDEoc3RydWN0IHNvY2sgKnNrLCBfX3UzMiBhLCBfX3U2NCBiLFxcbiBcXHRcXHRcXHRcXHRfX3UzMiBjLCBfX3U2NCBkKSBfX2tzeW07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjUwOjEzLjY4MjY5NTA5N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjg2NTg2ODE1MzY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfSklUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZ1wiLFxuICAgIFwiYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzXCIsXG4gICAgXCJhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbXBsZW1lbnRzIEJQRiBhcmVuYSBhcmd1bWVudHMgc3VwcG9ydCBmb3IgdGhlIGFybTY0IEpJVCBjb21waWxlci4gSXQgYWRkcyBuZXcgaW5zdHJ1Y3Rpb24gZ2VuZXJhdGlvbiBsb2dpYyBmb3IgZXh0ZW5kZWQgcmVnaXN0ZXIgYWRkL3N1YiBpbnN0cnVjdGlvbnMgKGBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnYCkgYW5kIG1vZGlmaWVzIHRoZSBhcm02NCBCUEYgSklUIChgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYCwgYGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJnc2ApIHRvIGhhbmRsZSBhcmVuYSBwb2ludGVycyBpbiBrZnVuYyBjYWxscyBhbmQgc3RydWN0X29wcyBjYWxsYmFja3MuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUga2VybmVsIChCUEYgSklUKSB0aGF0IGFyZSByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDlmZDM4MjI1YzIzZThhOTVlYWYzODhmMjczZGMzMzg3MWIyMjRlYmZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAyMDo1MDoxMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3QgYi9Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0XG5pbmRleCAxMGU3MjVjYmU2NGNkLi44NWY3M2UwYmJkMGZmIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdFxuQEAgLTMwMSw5ICszMDEsOSBAQCBBbiBleGFtcGxlIGlzIGdpdmVuIGJlbG93OjpcbiAgICAgICAgIH1cbiBcbiBDYWxsaW5nIHN1Y2ggYSBrZnVuYyByZXF1aXJlcyB0aGUgcHJvZ3JhbSB0byB1c2UgYW4gYXJlbmEgbWFwIGFuZCBhIEpJVCB3aXRoXG4tYXJlbmEgYXJndW1lbnQgc3VwcG9ydCAoY3VycmVudGx5IHg4Ni02NCk7IHZlcmlmaWNhdGlvbiBmYWlscyBvdGhlcndpc2UuIFRoZVxuLXByb2dyYW0gY2FuIHBhc3MgYW55IHZhbHVlIHdpdGhvdXQgY29tcHJvbWlzaW5nIHRoZSBrZXJuZWwuIEEgdmFsdWUgdGhhdCBkb2VzXG4tbm90IHBvaW50IGludG8gdGhlIGFyZW5hIGlzIGEgcHJvZ3JhbSBidWcuXG4rYXJlbmEgYXJndW1lbnQgc3VwcG9ydCAoY3VycmVudGx5IHg4Ni02NCBhbmQgYXJtNjQpOyB2ZXJpZmljYXRpb24gZmFpbHNcbitvdGhlcndpc2UuIFRoZSBwcm9ncmFtIGNhbiBwYXNzIGFueSB2YWx1ZSB3aXRob3V0IGNvbXByb21pc2luZyB0aGUga2VybmVsLiBBXG4rdmFsdWUgdGhhdCBkb2VzIG5vdCBwb2ludCBpbnRvIHRoZSBhcmVuYSBpcyBhIHByb2dyYW0gYnVnLlxuIFxuIFRoZSBzdWZmaXhlcyBoYXZlIHRoZSBzYW1lIG1lYW5pbmcgb24gdGhlIGFyZ3VtZW50cyBvZiBzdHJ1Y3Rfb3BzIHN0dWJcbiBmdW5jdGlvbnMsIHdpdGggdGhlIGNvbnZlcnNpb24gcnVubmluZyBpbiB0aGUgb3Bwb3NpdGUgZGlyZWN0aW9uLiBUaGVcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2luc24uaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vaW5zbi5oXG5pbmRleCBjYzA3MDJmYTY0YTc5Li4xY2U3NWE0NDI2Mzg3IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9pbnNuLmhcbisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vaW5zbi5oXG5AQCAtMjA1LDYgKzIwNSwxOCBAQCBlbnVtIGFhcmNoNjRfaW5zbl9hZHNiX3R5cGUge1xuIFx0QUFSQ0g2NF9JTlNOX0FEU0JfU1VCX1NFVEZMQUdTXG4gfTtcbiBcbisvKiBvcHRpb24gZmllbGQgb2YgYWRkL3N1YiAoZXh0ZW5kZWQgcmVnaXN0ZXIpICovXG4rZW51bSBhYXJjaDY0X2luc25fZXh0ZW5kX3R5cGUge1xuK1x0QUFSQ0g2NF9JTlNOX0VYVEVORF9VWFRCLFxuK1x0QUFSQ0g2NF9JTlNOX0VYVEVORF9VWFRILFxuK1x0QUFSQ0g2NF9JTlNOX0VYVEVORF9VWFRXLFxuK1x0QUFSQ0g2NF9JTlNOX0VYVEVORF9VWFRYLFxuK1x0QUFSQ0g2NF9JTlNOX0VYVEVORF9TWFRCLFxuK1x0QUFSQ0g2NF9JTlNOX0VYVEVORF9TWFRILFxuK1x0QUFSQ0g2NF9JTlNOX0VYVEVORF9TWFRXLFxuK1x0QUFSQ0g2NF9JTlNOX0VYVEVORF9TWFRYLFxuK307XG4rXG4gZW51bSBhYXJjaDY0X2luc25fbW92ZXdpZGVfdHlwZSB7XG4gXHRBQVJDSDY0X0lOU05fTU9WRVdJREVfWkVSTyxcbiBcdEFBUkNINjRfSU5TTl9NT1ZFV0lERV9LRUVQLFxuQEAgLTM3OCw2ICszOTAsMTAgQEAgX19BQVJDSDY0X0lOU05fRlVOQ1MoYWRkLFx0MHg3RjIwMDAwMCwgMHgwQjAwMDAwMClcbiBfX0FBUkNINjRfSU5TTl9GVU5DUyhhZGRzLFx0MHg3RjIwMDAwMCwgMHgyQjAwMDAwMClcbiBfX0FBUkNINjRfSU5TTl9GVU5DUyhzdWIsXHQweDdGMjAwMDAwLCAweDRCMDAwMDAwKVxuIF9fQUFSQ0g2NF9JTlNOX0ZVTkNTKHN1YnMsXHQweDdGMjAwMDAwLCAweDZCMDAwMDAwKVxuK19fQUFSQ0g2NF9JTlNOX0ZVTkNTKGFkZF9leHQsXHQweDdGRTAwMDAwLCAweDBCMjAwMDAwKVxuK19fQUFSQ0g2NF9JTlNOX0ZVTkNTKGFkZHNfZXh0LFx0MHg3RkUwMDAwMCwgMHgyQjIwMDAwMClcbitfX0FBUkNINjRfSU5TTl9GVU5DUyhzdWJfZXh0LFx0MHg3RkUwMDAwMCwgMHg0QjIwMDAwMClcbitfX0FBUkNINjRfSU5TTl9GVU5DUyhzdWJzX2V4dCxcdDB4N0ZFMDAwMDAsIDB4NkIyMDAwMDApXG4gX19BQVJDSDY0X0lOU05fRlVOQ1MobWFkZCxcdDB4N0ZFMDgwMDAsIDB4MUIwMDAwMDApXG4gX19BQVJDSDY0X0lOU05fRlVOQ1MobXN1YixcdDB4N0ZFMDgwMDAsIDB4MUIwMDgwMDApXG4gX19BQVJDSDY0X0lOU05fRlVOQ1ModWRpdixcdDB4N0ZFMEZDMDAsIDB4MUFDMDA4MDApXG5AQCAtNjM3LDYgKzY1MywxMyBAQCB1MzIgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX3NoaWZ0ZWRfcmVnKGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIGRzdCxcbiBcdFx0XHRcdFx0IGludCBzaGlmdCxcbiBcdFx0XHRcdFx0IGVudW0gYWFyY2g2NF9pbnNuX3ZhcmlhbnQgdmFyaWFudCxcbiBcdFx0XHRcdFx0IGVudW0gYWFyY2g2NF9pbnNuX2Fkc2JfdHlwZSB0eXBlKTtcbit1MzIgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZyhlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBkc3QsXG4rXHRcdFx0XHRcdCAgZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgc3JjLFxuK1x0XHRcdFx0XHQgIGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIHJlZyxcbitcdFx0XHRcdFx0ICBlbnVtIGFhcmNoNjRfaW5zbl9leHRlbmRfdHlwZSBleHRlbmQsXG4rXHRcdFx0XHRcdCAgaW50IHNoaWZ0LFxuK1x0XHRcdFx0XHQgIGVudW0gYWFyY2g2NF9pbnNuX3ZhcmlhbnQgdmFyaWFudCxcbitcdFx0XHRcdFx0ICBlbnVtIGFhcmNoNjRfaW5zbl9hZHNiX3R5cGUgdHlwZSk7XG4gdTMyIGFhcmNoNjRfaW5zbl9nZW5fZGF0YTEoZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgZHN0LFxuIFx0XHRcdCAgIGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIHNyYyxcbiBcdFx0XHQgICBlbnVtIGFhcmNoNjRfaW5zbl92YXJpYW50IHZhcmlhbnQsXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9saWIvaW5zbi5jIGIvYXJjaC9hcm02NC9saWIvaW5zbi5jXG5pbmRleCAzN2NlNzVmN2YxZjA4Li5lNzBhYzAyMzg1MTUzIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9saWIvaW5zbi5jXG4rKysgYi9hcmNoL2FybTY0L2xpYi9pbnNuLmNcbkBAIC05ODYsNiArOTg2LDY2IEBAIHUzMiBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfc2hpZnRlZF9yZWcoZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgZHN0LFxuIFx0cmV0dXJuIGFhcmNoNjRfaW5zbl9lbmNvZGVfaW1tZWRpYXRlKEFBUkNINjRfSU5TTl9JTU1fNiwgaW5zbiwgc2hpZnQpO1xuIH1cbiBcbisvKlxuKyAqIFVubGlrZSB0aGUgc2hpZnRlZC1yZWdpc3RlciBmb3JtLCByZWdpc3RlciAzMSBpcyBub3QgWFpSIGV2ZXJ5d2hlcmUgaGVyZTpcbisgKiBpdCBlbmNvZGVzIFNQIGZvciBAc3JjLCBhbmQgZm9yIEBkc3QgdG9vIHVubGVzcyBAdHlwZSBzZXRzIHRoZSBmbGFncy4gT25seVxuKyAqIEByZWcga2VlcHMgdGhlIFhaUiBtZWFuaW5nLlxuKyAqL1xuK3UzMiBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnKGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIGRzdCxcbitcdFx0XHRcdFx0ICBlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBzcmMsXG4rXHRcdFx0XHRcdCAgZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgcmVnLFxuK1x0XHRcdFx0XHQgIGVudW0gYWFyY2g2NF9pbnNuX2V4dGVuZF90eXBlIGV4dGVuZCxcbitcdFx0XHRcdFx0ICBpbnQgc2hpZnQsXG4rXHRcdFx0XHRcdCAgZW51bSBhYXJjaDY0X2luc25fdmFyaWFudCB2YXJpYW50LFxuK1x0XHRcdFx0XHQgIGVudW0gYWFyY2g2NF9pbnNuX2Fkc2JfdHlwZSB0eXBlKVxuK3tcbitcdHUzMiBpbnNuO1xuK1xuK1x0c3dpdGNoICh0eXBlKSB7XG4rXHRjYXNlIEFBUkNINjRfSU5TTl9BRFNCX0FERDpcbitcdFx0aW5zbiA9IGFhcmNoNjRfaW5zbl9nZXRfYWRkX2V4dF92YWx1ZSgpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgQUFSQ0g2NF9JTlNOX0FEU0JfU1VCOlxuK1x0XHRpbnNuID0gYWFyY2g2NF9pbnNuX2dldF9zdWJfZXh0X3ZhbHVlKCk7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBBQVJDSDY0X0lOU05fQURTQl9BRERfU0VURkxBR1M6XG4rXHRcdGluc24gPSBhYXJjaDY0X2luc25fZ2V0X2FkZHNfZXh0X3ZhbHVlKCk7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBBQVJDSDY0X0lOU05fQURTQl9TVUJfU0VURkxBR1M6XG4rXHRcdGluc24gPSBhYXJjaDY0X2luc25fZ2V0X3N1YnNfZXh0X3ZhbHVlKCk7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0cHJfZXJyKFwiJXM6IHVua25vd24gYWRkL3N1YiBlbmNvZGluZyAlZFxcblwiLCBfX2Z1bmNfXywgdHlwZSk7XG4rXHRcdHJldHVybiBBQVJDSDY0X0JSRUFLX0ZBVUxUO1xuK1x0fVxuK1xuK1x0c3dpdGNoICh2YXJpYW50KSB7XG4rXHRjYXNlIEFBUkNINjRfSU5TTl9WQVJJQU5UXzMyQklUOlxuK1x0XHRicmVhaztcbitcdGNhc2UgQUFSQ0g2NF9JTlNOX1ZBUklBTlRfNjRCSVQ6XG4rXHRcdGluc24gfD0gQUFSQ0g2NF9JTlNOX1NGX0JJVDtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRwcl9lcnIoXCIlczogdW5rbm93biB2YXJpYW50IGVuY29kaW5nICVkXFxuXCIsIF9fZnVuY19fLCB2YXJpYW50KTtcbitcdFx0cmV0dXJuIEFBUkNINjRfQlJFQUtfRkFVTFQ7XG4rXHR9XG4rXG4rXHRpZiAoc2hpZnQgXHUwMDNjIDAgfHwgc2hpZnQgXHUwMDNlIDQpIHtcbitcdFx0cHJfZXJyKFwiJXM6IGludmFsaWQgc2hpZnQgZW5jb2RpbmcgJWRcXG5cIiwgX19mdW5jX18sIHNoaWZ0KTtcbitcdFx0cmV0dXJuIEFBUkNINjRfQlJFQUtfRkFVTFQ7XG4rXHR9XG4rXG4rXHRpbnNuID0gYWFyY2g2NF9pbnNuX2VuY29kZV9yZWdpc3RlcihBQVJDSDY0X0lOU05fUkVHVFlQRV9SRCwgaW5zbiwgZHN0KTtcbitcbitcdGluc24gPSBhYXJjaDY0X2luc25fZW5jb2RlX3JlZ2lzdGVyKEFBUkNINjRfSU5TTl9SRUdUWVBFX1JOLCBpbnNuLCBzcmMpO1xuK1xuK1x0aW5zbiA9IGFhcmNoNjRfaW5zbl9lbmNvZGVfcmVnaXN0ZXIoQUFSQ0g2NF9JTlNOX1JFR1RZUEVfUk0sIGluc24sIHJlZyk7XG4rXG4rXHQvKiBvcHRpb24gaW4gYml0cyBbMTU6MTNdIGFuZCBpbW0zIGluIFsxMjoxMF0gdG9nZXRoZXIgZmlsbCBJTU1fNiAqL1xuK1x0cmV0dXJuIGFhcmNoNjRfaW5zbl9lbmNvZGVfaW1tZWRpYXRlKEFBUkNINjRfSU5TTl9JTU1fNiwgaW5zbixcbitcdFx0XHRcdFx0ICAgICAoZXh0ZW5kIFx1MDAzY1x1MDAzYyAzKSB8IHNoaWZ0KTtcbit9XG4rXG4gdTMyIGFhcmNoNjRfaW5zbl9nZW5fZGF0YTEoZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgZHN0LFxuIFx0XHRcdCAgIGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIHNyYyxcbiBcdFx0XHQgICBlbnVtIGFhcmNoNjRfaW5zbl92YXJpYW50IHZhcmlhbnQsXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9uZXQvYnBmX2ppdC5oIGIvYXJjaC9hcm02NC9uZXQvYnBmX2ppdC5oXG5pbmRleCBkMTNkZTQyMjJjZmI3Li5iMmZlNmU2ZGNmNDQ3IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9uZXQvYnBmX2ppdC5oXG4rKysgYi9hcmNoL2FybTY0L25ldC9icGZfaml0LmhcbkBAIC0yNDMsNiArMjQzLDE3IEBAXG4gLyogUm4gLSBSbTsgc2V0IGNvbmRpdGlvbiBmbGFncyAqL1xuICNkZWZpbmUgQTY0X0NNUChzZiwgUm4sIFJtKSBBNjRfU1VCUyhzZiwgQTY0X1pSLCBSbiwgUm0pXG4gXG4rLyogQWRkL3N1YnRyYWN0IChleHRlbmRlZCByZWdpc3RlcikgKi9cbisjZGVmaW5lIEE2NF9BRERTVUJfRVJFRyhzZiwgUmQsIFJuLCBSbSwgZXh0LCBzaGlmdCwgdHlwZSkgXFxcbitcdGFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9leHRlbmRlZF9yZWcoUmQsIFJuLCBSbSwgXFxcbitcdFx0QUFSQ0g2NF9JTlNOX0VYVEVORF8jI2V4dCwgc2hpZnQsIEE2NF9WQVJJQU5UKHNmKSwgXFxcbitcdFx0QUFSQ0g2NF9JTlNOX0FEU0JfIyN0eXBlKVxuKy8qIFJkID0gUm4gKyAoRVhUKFJtKSBcdTAwM2NcdTAwM2Mgc2hpZnQpICovXG4rI2RlZmluZSBBNjRfQUREX0VYVChzZiwgUmQsIFJuLCBSbSwgZXh0LCBzaGlmdCkgXFxcbitcdEE2NF9BRERTVUJfRVJFRyhzZiwgUmQsIFJuLCBSbSwgZXh0LCBzaGlmdCwgQUREKVxuKy8qIFJkID0gUm4gKyAodTMyKVJtICovXG4rI2RlZmluZSBBNjRfQUREX1VYVFcoUmQsIFJuLCBSbSkgQTY0X0FERF9FWFQoMSwgUmQsIFJuLCBSbSwgVVhUVywgMClcbitcbiAvKiBEYXRhLXByb2Nlc3NpbmcgKDEgc291cmNlKSAqL1xuICNkZWZpbmUgQTY0X0RBVEExKHNmLCBSZCwgUm4sIHR5cGUpIGFhcmNoNjRfaW5zbl9nZW5fZGF0YTEoUmQsIFJuLCBcXFxuIFx0QTY0X1ZBUklBTlQoc2YpLCBBQVJDSDY0X0lOU05fREFUQTFfIyN0eXBlKVxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jIGIvYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmNcbmluZGV4IDc0YjQwODM3OTFkYTMuLmMxOGUwMDVhNDFkYmUgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY1xuKysrIGIvYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmNcbkBAIC0xMjU2LDYgKzEyNTYsNDMgQEAgc3RhdGljIHZvaWQgZW1pdF9zdGFja19hcmdfc3RvcmVfaW1tKHMzMiBpbW0sIHMxNiBicGZfb2ZmLCBjb25zdCB1OCB0bXAsIHN0cnVjdFxuIFx0fVxuIH1cbiBcbisvKlxuKyAqIFJlYmFzZSB0aGUgX19hcmVuYSBhcmdzIG9mIGEga2Z1bmMgY2FsbCB0byBhcmVuYSBrZXJuZWwgYWRkcmVzc2VzLFxuKyAqIHhOID0ga2Vybl92bV9zdGFydCArICh1MzIpeE4sIHdpdGggdGhlIGFyZW5hIGJhc2UgcmVnaXN0ZXIgaG9sZGluZ1xuKyAqIGtlcm5fdm1fc3RhcnQuIEEgbnVsbGFibGUgYXJnIHByZXNlcnZlcyBOVUxMIGJ5IHNraXBwaW5nIHRoZSBhZGQsIHRlc3RlZFxuKyAqIG9uIHRoZSB0cnVuY2F0ZWQgdmFsdWUgYXMgYXJlbmEgTlVMTCBpcyBvZmZzZXQgMC5cbisgKi9cbitzdGF0aWMgaW50IGVtaXRfa2Z1bmNfYXJlbmFfYXJncyhzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4re1xuK1x0Y29uc3QgdTggYXJlbmFfdm1fYmFzZSA9IGJwZjJhNjRbQVJFTkFfVk1fU1RBUlRdO1xuK1x0Y29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICpmbTtcbitcdGludCBpO1xuK1xuK1x0Zm0gPSBicGZfaml0X2ZpbmRfa2Z1bmNfbW9kZWwoY3R4LVx1MDAzZXByb2csIGluc24pO1xuK1x0aWYgKCFmbSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBtaW5fdChpbnQsIGZtLVx1MDAzZW5yX2FyZ3MsIE1BWF9CUEZfRlVOQ19SRUdfQVJHUyk7IGkrKykge1xuK1x0XHRjb25zdCB1OCByZWcgPSBicGYyYTY0W0JQRl9SRUdfMSArIGldO1xuK1x0XHR1OCBmbGFncyA9IGZtLVx1MDAzZWFyZ19mbGFnc1tpXTtcbitcbitcdFx0aWYgKCEoZmxhZ3MgXHUwMDI2IEJURl9GTU9ERUxfQVJFTkFfQVJHKSlcbitcdFx0XHRjb250aW51ZTtcbitcdFx0aWYgKFdBUk5fT05fT05DRSghY3R4LVx1MDAzZWFyZW5hX3ZtX3N0YXJ0KSlcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdFx0aWYgKGZsYWdzIFx1MDAyNiBCVEZfRk1PREVMX05VTExBQkxFX0FSRykge1xuK1x0XHRcdC8qIDMyLWJpdCBtb3YgY2xlYXJzIHRoZSB1cHBlciAzMiBiaXRzICovXG4rXHRcdFx0ZW1pdChBNjRfTU9WKDAsIHJlZywgcmVnKSwgY3R4KTtcbitcdFx0XHQvKiBza2lwIHRoZSBhZGQgc28gdGhhdCBOVUxMIHN0YXlzIE5VTEwgKi9cbitcdFx0XHRlbWl0KEE2NF9DQlooMCwgcmVnLCAyKSwgY3R4KTtcbitcdFx0fVxuK1x0XHRlbWl0KEE2NF9BRERfVVhUVyhyZWcsIGFyZW5hX3ZtX2Jhc2UsIHJlZyksIGN0eCk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gLyogSklUcyBhbiBlQlBGIGluc3RydWN0aW9uLlxuICAqIFJldHVybnM6XG4gICogMCAgLSBzdWNjZXNzZnVsbHkgSklUZWQgYW4gOC1ieXRlIGVCUEYgaW5zdHJ1Y3Rpb24uXG5AQCAtMTY3OCw2ICsxNzE1LDExIEBAIHN0YXRpYyBpbnQgYnVpbGRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX2luc25cbiBcdFx0XHRcdFx0ICAgIFx1MDAyNmZ1bmNfYWRkciwgXHUwMDI2ZnVuY19hZGRyX2ZpeGVkKTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHRpZiAoaW5zbi1cdTAwM2VzcmNfcmVnID09IEJQRl9QU0VVRE9fS0ZVTkNfQ0FMTCkge1xuK1x0XHRcdHJldCA9IGVtaXRfa2Z1bmNfYXJlbmFfYXJncyhjdHgsIGluc24pO1xuK1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHR9XG4gXHRcdGVtaXRfY2FsbChmdW5jX2FkZHIsIGN0eCk7XG4gXHRcdC8qXG4gXHRcdCAqIENhbGwgdG8gYXJjaF9icGZfdGltZWRfbWF5X2dvdG8oKSBpcyBlbWl0dGVkIGJ5IHRoZVxuQEAgLTIzNTEsNiArMjM5MywxMSBAQCBib29sIGJwZl9qaXRfc3VwcG9ydHNfc3RhY2tfYXJncyh2b2lkKVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuK2Jvb2wgYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzKHZvaWQpXG4re1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuIHZvaWQgKmJwZl9hcmNoX3RleHRfY29weSh2b2lkICpkc3QsIHZvaWQgKnNyYywgc2l6ZV90IGxlbilcbiB7XG4gXHRpZiAoIWFhcmNoNjRfaW5zbl9jb3B5KGRzdCwgc3JjLCBsZW4pKVxuQEAgLTI1MjQsMzQgKzI1NzEsNzYgQEAgc3RhdGljIHZvaWQgY2xlYXJfZ2FyYmFnZShzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBpbnQgcmVnLCBpbnQgZWZmZWN0aXZlX2J5dGVzKVxuIFx0fVxuIH1cbiBcbisvKlxuKyAqIENvbnZlcnQgYW4gYXJlbmEga2VybmVsIGFkZHJlc3MgaW50byB0aGUgYXJlbmEgcG9pbnRlciBmb3JtIG9uIGl0cyB3YXkgaW50b1xuKyAqIHRoZSBCUEYgY3R4LCBkc3QgPSAodTMyKShzcmMgLSBrZXJuX3ZtX3N0YXJ0KSwgd2l0aCBAYmFzZV9sbyBob2xkaW5nIHRoZSBsb3dcbisgKiAzMiBiaXRzIG9mIGtlcm5fdm1fc3RhcnQuIEEgbnVsbGFibGUgYXJnIHByZXNlcnZlcyBOVUxMLCB0ZXN0ZWQgb24gdGhlIGZ1bGxcbisgKiA2NC1iaXQga2VybmVsIHBvaW50ZXIuIFRoZSAzMi1iaXQgc3VidHJhY3Rpb24gYm90aCB0cnVuY2F0ZXMgYW5kIGNsZWFycyB0aGVcbisgKiB1cHBlciBoYWxmLCBzbyB0aGUgc3RvcmVkIHZhbHVlIHNhdGlzZmllcyB0aGUgSklUIGludmFyaWFudCBmb3IgYXJlbmFcbisgKiBwb2ludGVyIHJlZ2lzdGVycy5cbisgKi9cbitzdGF0aWMgdm9pZCBlbWl0X2FyZW5hX2FyZ19jb252KHN0cnVjdCBqaXRfY3R4ICpjdHgsIHU4IGRzdCwgdTggc3JjLCBib29sIG51bGxhYmxlLCB1OCBiYXNlX2xvKVxuK3tcbitcdGlmIChudWxsYWJsZSkge1xuK1x0XHRpZiAoZHN0ICE9IHNyYylcbitcdFx0XHRlbWl0KEE2NF9NT1YoMSwgZHN0LCBzcmMpLCBjdHgpO1xuK1x0XHQvKiBza2lwIHRoZSBzdWJ0cmFjdGlvbiBzbyB0aGF0IE5VTEwgc3RheXMgTlVMTCAqL1xuK1x0XHRlbWl0KEE2NF9DQlooMSwgZHN0LCAyKSwgY3R4KTtcbitcdFx0c3JjID0gZHN0O1xuK1x0fVxuK1x0ZW1pdChBNjRfU1VCKDAsIGRzdCwgc3JjLCBiYXNlX2xvKSwgY3R4KTtcbit9XG4rXG4gc3RhdGljIHZvaWQgc2F2ZV9hcmdzKHN0cnVjdCBqaXRfY3R4ICpjdHgsIGludCBiYXJnc19vZmYsIGludCBvYXJnc19vZmYsXG4tXHRcdCAgICAgIGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSxcbi1cdFx0ICAgICAgY29uc3Qgc3RydWN0IGFyZ19hdXggKmEsXG4tXHRcdCAgICAgIGJvb2wgZm9yX2NhbGxfb3JpZ2luKVxuK1x0XHQgICAgICBjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIGNvbnN0IHN0cnVjdCBhcmdfYXV4ICphLFxuK1x0XHQgICAgICBib29sIGZvcl9jYWxsX29yaWdpbiwgYm9vbCBpc19zdHJ1Y3Rfb3BzLCB1NjQgYXJlbmFfYmFzZSlcbiB7XG4tXHRpbnQgaTtcbi1cdGludCByZWc7XG4tXHRpbnQgZG9mZjtcbi1cdGludCBzb2ZmO1xuLVx0aW50IHNsb3RzO1xuIFx0dTggdG1wID0gYnBmMmE2NFtUTVBfUkVHXzFdO1xuK1x0dTggYmFzZV9sbyA9IGJwZjJhNjRbVE1QX1JFR18yXTtcbitcdGludCBpLCByZWcsIGRvZmYsIHNvZmYsIHNsb3RzO1xuK1xuK1x0Lyogb25seSB0aGUgbG93IDMyIGJpdHMgb2YgdGhlIGJhc2UgdGFrZSBwYXJ0IGluIHRoZSBzdWJ0cmFjdGlvbiAqL1xuK1x0aWYgKGFyZW5hX2Jhc2UpXG4rXHRcdGVtaXRfYTY0X21vdl9pKDAsIGJhc2VfbG8sIChzMzIpKHUzMilhcmVuYV9iYXNlLCBjdHgpO1xuIFxuIFx0Lyogc3RvcmUgYXJndW1lbnRzIHRvIHRoZSBzdGFjayBmb3IgdGhlIGJwZiBwcm9ncmFtLCBvciByZXN0b3JlXG4gXHQgKiBhcmd1bWVudHMgZnJvbSBzdGFjayBmb3IgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uXG4gXHQgKi9cbi1cdGZvciAocmVnID0gMDsgcmVnIFx1MDAzYyBhLVx1MDAzZXJlZ3NfZm9yX2FyZ3M7IHJlZysrKSB7XG4tXHRcdGVtaXQoZm9yX2NhbGxfb3JpZ2luID9cbi1cdFx0ICAgICBBNjRfTERSNjRJKHJlZywgQTY0X1NQLCBiYXJnc19vZmYpIDpcbi1cdFx0ICAgICBBNjRfU1RSNjRJKHJlZywgQTY0X1NQLCBiYXJnc19vZmYpLFxuLVx0XHQgICAgIGN0eCk7XG4tXHRcdGJhcmdzX29mZiArPSA4O1xuK1x0Zm9yIChpID0gMCwgcmVnID0gMDsgaSBcdTAwM2MgYS1cdTAwM2VhcmdzX2luX3JlZ3M7IGkrKykge1xuK1x0XHRib29sIGFyZW5hX2FyZyA9IGFyZW5hX2Jhc2UgXHUwMDI2XHUwMDI2IChtLVx1MDAzZWFyZ19mbGFnc1tpXSBcdTAwMjYgQlRGX0ZNT0RFTF9BUkVOQV9BUkcpO1xuK1x0XHRib29sIG51bGxhYmxlID0gbS1cdTAwM2VhcmdfZmxhZ3NbaV0gXHUwMDI2IEJURl9GTU9ERUxfTlVMTEFCTEVfQVJHO1xuK1xuK1x0XHRzbG90cyA9IChtLVx1MDAzZWFyZ19zaXplW2ldICsgNykgLyA4O1xuK1x0XHR3aGlsZSAoc2xvdHMtLSBcdTAwM2UgMCkge1xuK1x0XHRcdGlmIChmb3JfY2FsbF9vcmlnaW4pIHtcbitcdFx0XHRcdGVtaXQoQTY0X0xEUjY0SShyZWcsIEE2NF9TUCwgYmFyZ3Nfb2ZmKSwgY3R4KTtcbitcdFx0XHR9IGVsc2UgaWYgKGFyZW5hX2FyZykge1xuK1x0XHRcdFx0ZW1pdF9hcmVuYV9hcmdfY29udihjdHgsIHRtcCwgcmVnLCBudWxsYWJsZSwgYmFzZV9sbyk7XG4rXHRcdFx0XHRlbWl0KEE2NF9TVFI2NEkodG1wLCBBNjRfU1AsIGJhcmdzX29mZiksIGN0eCk7XG4rXHRcdFx0fSBlbHNlIHtcbitcdFx0XHRcdGVtaXQoQTY0X1NUUjY0SShyZWcsIEE2NF9TUCwgYmFyZ3Nfb2ZmKSwgY3R4KTtcbitcdFx0XHR9XG4rXHRcdFx0cmVnKys7XG4rXHRcdFx0YmFyZ3Nfb2ZmICs9IDg7XG4rXHRcdH1cbiBcdH1cbiBcbi1cdHNvZmYgPSAzMjsgLyogb24gc3RhY2sgYXJndW1lbnRzIHN0YXJ0IGZyb20gRlAgKyAzMiAqL1xuK1x0LypcbitcdCAqIE9uLXN0YWNrIGFyZ3VtZW50cyBzdGFydCBhYm92ZSB0aGUgZnJhbWUocykgcHVzaGVkIGJ5IHRoZSB0cmFtcG9saW5lXG4rXHQgKiBwcm9sb2d1ZS4gRW50ZXJlZCB0aHJvdWdoIHRoZSBmZW50cnkgY2FsbCBmcm9tIGEgdHJhY2VkIGZ1bmN0aW9uLCB0aGVcbitcdCAqIHByb2xvZ3VlIHNhdmVzIGJvdGggdGhlIHBhcmVudCAoRlAveDkpIGFuZCB0aGUgdHJhY2VkIGZ1bmN0aW9uXG4rXHQgKiAoRlAvTFIpIGZyYW1lcywgc28gdGhlIGFyZ3VtZW50cyBzdGFydCBhdCBGUCArIDMyLiBBIHN0cnVjdF9vcHNcbitcdCAqIGNhbGxiYWNrIGlzIGNhbGxlZCBpbmRpcmVjdGx5IGFuZCBvbmx5IHRoZSBGUC9MUiBmcmFtZSBpcyBzYXZlZCwgc29cbitcdCAqIHRoZXkgc3RhcnQgYXQgRlAgKyAxNi5cbitcdCAqL1xuK1x0c29mZiA9IGlzX3N0cnVjdF9vcHMgPyAxNiA6IDMyO1xuIFx0ZG9mZiA9IChmb3JfY2FsbF9vcmlnaW4gPyBvYXJnc19vZmYgOiBiYXJnc19vZmYpO1xuIFxuIFx0Lyogc2F2ZSBvbiBzdGFjayBhcmd1bWVudHMgKi9cbiBcdGZvciAoaSA9IGEtXHUwMDNlYXJnc19pbl9yZWdzOyBpIFx1MDAzYyBtLVx1MDAzZW5yX2FyZ3M7IGkrKykge1xuK1x0XHRib29sIGFyZW5hX2FyZyA9IGFyZW5hX2Jhc2UgXHUwMDI2XHUwMDI2IChtLVx1MDAzZWFyZ19mbGFnc1tpXSBcdTAwMjYgQlRGX0ZNT0RFTF9BUkVOQV9BUkcpO1xuK1x0XHRib29sIG51bGxhYmxlID0gbS1cdTAwM2VhcmdfZmxhZ3NbaV0gXHUwMDI2IEJURl9GTU9ERUxfTlVMTEFCTEVfQVJHO1xuK1xuIFx0XHRzbG90cyA9IChtLVx1MDAzZWFyZ19zaXplW2ldICsgNykgLyA4O1xuIFx0XHQvKiB2ZXJpZmllciBlbnN1cmVzIGFyZ19zaXplIFx1MDAzYz0gMTYsIHNvIHNsb3RzIGVxdWFscyAxIG9yIDIgKi9cbiBcdFx0d2hpbGUgKHNsb3RzLS0gXHUwMDNlIDApIHtcbkBAIC0yNTYxLDYgKzI2NTAsMTUgQEAgc3RhdGljIHZvaWQgc2F2ZV9hcmdzKHN0cnVjdCBqaXRfY3R4ICpjdHgsIGludCBiYXJnc19vZmYsIGludCBvYXJnc19vZmYsXG4gXHRcdFx0ICovXG4gXHRcdFx0aWYgKHNsb3RzID09IDAgXHUwMDI2XHUwMDI2ICFmb3JfY2FsbF9vcmlnaW4pXG4gXHRcdFx0XHRjbGVhcl9nYXJiYWdlKGN0eCwgdG1wLCBtLVx1MDAzZWFyZ19zaXplW2ldICUgOCk7XG4rXHRcdFx0LypcbitcdFx0XHQgKiBObyBndWFyZCBvbiBmb3JfY2FsbF9vcmlnaW4gaGVyZTogb25seSB0aGUgaW5kaXJlY3RcbitcdFx0XHQgKiB0cmFtcG9saW5lIGlzIGdpdmVuIGEgYmFzZSwgYW5kIGl0IG5ldmVyIGNhbGxzIHRoZVxuK1x0XHRcdCAqIG9yaWdpbmFsIGZ1bmN0aW9uLCBzbyBhcmd1bWVudHMgYXJlIG5ldmVyIGNvbnZlcnRlZFxuK1x0XHRcdCAqIG9uIHRoZWlyIHdheSBiYWNrIG91dCB0byBpdC4gU2VlIHRoZSBXQVJOX09OX09OQ0UoKVxuK1x0XHRcdCAqIGluIHByZXBhcmVfdHJhbXBvbGluZSgpLlxuK1x0XHRcdCAqL1xuK1x0XHRcdGlmIChhcmVuYV9hcmcpXG4rXHRcdFx0XHRlbWl0X2FyZW5hX2FyZ19jb252KGN0eCwgdG1wLCB0bXAsIG51bGxhYmxlLCBiYXNlX2xvKTtcbiBcdFx0XHRlbWl0KEE2NF9TVFI2NEkodG1wLCBBNjRfU1AsIGRvZmYpLCBjdHgpO1xuIFx0XHRcdHNvZmYgKz0gODtcbiBcdFx0XHRkb2ZmICs9IDg7XG5AQCAtMjYyMCw4ICsyNzE4LDIxIEBAIHN0YXRpYyBpbnQgcHJlcGFyZV90cmFtcG9saW5lKHN0cnVjdCBqaXRfY3R4ICpjdHgsIHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLFxuIFx0Ym9vbCBpc19zdHJ1Y3Rfb3BzID0gaXNfc3RydWN0X29wc190cmFtcChmZW50cnkpO1xuIFx0aW50IGNvb2tpZV9vZmYsIGNvb2tpZV9jbnQsIGNvb2tpZV9iYXJnc19vZmY7XG4gXHRpbnQgZnNlc3Npb25fY250ID0gYnBmX2ZzZXNzaW9uX2NudCh0bm9kZXMpO1xuK1x0dTY0IGFyZW5hX2Jhc2U7XG4gXHR1NjQgZnVuY19tZXRhO1xuIFxuK1x0LypcbitcdCAqIEZfSU5ESVJFQ1QgaXMgb25seSBjb21wYXRpYmxlIHdpdGggRl9SRVRfRkVOVFJZX1JFVCwgaXQgaXMgZXhwbGljaXRseVxuK1x0ICogaW5jb21wYXRpYmxlIHdpdGggRl9DQUxMX09SSUcgfCBGX1NLSVBfRlJBTUUgfCBGX0lQX0FSRyBiZWNhdXNlXG4rXHQgKiBAZnVuY19hZGRyLiBBcmVuYSBjb252ZXJzaW9uIHJlbGllcyBvbiB0aGlzOiBicGZfdHJhbXBfYXJlbmFfYmFzZSgpXG4rXHQgKiBvbmx5IHJldHVybnMgYSBiYXNlIGZvciB0aGUgaW5kaXJlY3QgdHJhbXBvbGluZSwgd2hpY2ggdGhlcmVmb3JlXG4rXHQgKiBuZXZlciBjYWxscyB0aGUgb3JpZ2luYWwgZnVuY3Rpb24gd2l0aCBjb252ZXJ0ZWQgYXJndW1lbnRzLlxuK1x0ICovXG4rXHRXQVJOX09OX09OQ0UoKGZsYWdzIFx1MDAyNiBCUEZfVFJBTVBfRl9JTkRJUkVDVCkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAgKGZsYWdzIFx1MDAyNiB+KEJQRl9UUkFNUF9GX0lORElSRUNUIHwgQlBGX1RSQU1QX0ZfUkVUX0ZFTlRSWV9SRVQpKSk7XG4rXG4rXHRhcmVuYV9iYXNlID0gYnBmX3RyYW1wX2FyZW5hX2Jhc2UobSwgdG5vZGVzLCBmbGFncyk7XG4rXG4gXHQvKiB0cmFtcG9saW5lIHN0YWNrIGxheW91dDpcbiBcdCAqICAgICAgICAgICAgICAgICAgICBbIHBhcmVudCBpcCAgICAgICAgIF1cbiBcdCAqICAgICAgICAgICAgICAgICAgICBbIEZQICAgICAgICAgICAgICAgIF1cbkBAIC0yNzM3LDcgKzI4NDgsNyBAQCBzdGF0aWMgaW50IHByZXBhcmVfdHJhbXBvbGluZShzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSxcbiBcdHN0b3JlX2Z1bmNfbWV0YShjdHgsIGZ1bmNfbWV0YSwgZnVuY19tZXRhX29mZik7XG4gXG4gXHQvKiBzYXZlIGFyZ3MgZm9yIGJwZiAqL1xuLVx0c2F2ZV9hcmdzKGN0eCwgYmFyZ3Nfb2ZmLCBvYXJnc19vZmYsIG0sIGEsIGZhbHNlKTtcbitcdHNhdmVfYXJncyhjdHgsIGJhcmdzX29mZiwgb2FyZ3Nfb2ZmLCBtLCBhLCBmYWxzZSwgaXNfc3RydWN0X29wcywgYXJlbmFfYmFzZSk7XG4gXG4gXHQvKiBzYXZlIGNhbGxlZSBzYXZlZCByZWdpc3RlcnMgKi9cbiBcdGVtaXQoQTY0X1NUUjY0SShBNjRfUigxOSksIEE2NF9TUCwgcmVnc19vZmYpLCBjdHgpO1xuQEAgLTI3ODUsOCArMjg5Niw4IEBAIHN0YXRpYyBpbnQgcHJlcGFyZV90cmFtcG9saW5lKHN0cnVjdCBqaXRfY3R4ICpjdHgsIHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLFxuIFx0fVxuIFxuIFx0aWYgKGZsYWdzIFx1MDAyNiBCUEZfVFJBTVBfRl9DQUxMX09SSUcpIHtcbi1cdFx0Lyogc2F2ZSBhcmdzIGZvciBvcmlnaW5hbCBmdW5jICovXG4tXHRcdHNhdmVfYXJncyhjdHgsIGJhcmdzX29mZiwgb2FyZ3Nfb2ZmLCBtLCBhLCB0cnVlKTtcbitcdFx0LyogdGhlIG9yaWdpbmFsIGZ1bmMgdGFrZXMga2VybmVsIGFkZHJlc3NlcywgbmV2ZXIgY29udmVydGVkIG9uZXMgKi9cbitcdFx0c2F2ZV9hcmdzKGN0eCwgYmFyZ3Nfb2ZmLCBvYXJnc19vZmYsIG0sIGEsIHRydWUsIGlzX3N0cnVjdF9vcHMsIDApO1xuIFx0XHQvKiBjYWxsIG9yaWdpbmFsIGZ1bmMgKi9cbiBcdFx0ZW1pdChBNjRfTERSNjRJKEE2NF9SKDEwKSwgQTY0X1NQLCByZXRhZGRyX29mZiksIGN0eCk7XG4gXHRcdGVtaXQoQTY0X0FEUihBNjRfTFIsIEFBUkNINjRfSU5TTl9TSVpFICogMiksIGN0eCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9zdHJ1Y3Rfb3BzX2FyZW5hLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3N0cnVjdF9vcHNfYXJlbmEuY1xuaW5kZXggOTQwZWMyY2RhMGQ1Mi4uN2Y5ZjU0YmEzZmJlNSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3Rfc3RydWN0X29wc19hcmVuYS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3N0cnVjdF9vcHNfYXJlbmEuY1xuQEAgLTYsNyArNiw3IEBAXG4gI2luY2x1ZGUgXCJzdHJ1Y3Rfb3BzX2FyZW5hX2F0dGFjaC5za2VsLmhcIlxuICNpbmNsdWRlIFwic3RydWN0X29wc19hcmVuYV9mYWlsLnNrZWwuaFwiXG4gXG4tI2lmIGRlZmluZWQoX194ODZfNjRfXylcbisjaWYgZGVmaW5lZChfX3g4Nl82NF9fKSB8fCBkZWZpbmVkKF9fYWFyY2g2NF9fKVxuIC8qXG4gICogQXR0YWNoIGNhbGxiYWNrcyB3aXRoIF9fYXJlbmEgYW5kIF9fYXJlbmFfX251bGxhYmxlIGFyZ3VtZW50cyBhbmQgZHJpdmVcbiAgKiB0aGVtIHRocm91Z2ggdGhlIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hKigpIGtmdW5jcy5cbkBAIC0xMTEsMTEgKzExMSwxMSBAQCBzdGF0aWMgdm9pZCBhcmVuYV9hcmdfYXR0YWNoKHZvaWQpXG4gdm9pZCBzZXJpYWxfdGVzdF9zdHJ1Y3Rfb3BzX2FyZW5hKHZvaWQpXG4ge1xuIFx0Lypcbi1cdCAqIEFyZW5hIHN0cnVjdF9vcHMgYXJndW1lbnRzIG5lZWQgSklUIHN1cHBvcnQsIGN1cnJlbnRseSB4ODYtNjQgb25seS5cbi1cdCAqIEVsc2V3aGVyZSB2ZXJpZmljYXRpb24gZmFpbHMgd2l0aCBcIkpJVCBkb2VzIG5vdCBzdXBwb3J0IGFyZW5hXG4tXHQgKiBhcmd1bWVudHNcIiwgc28gdGhlIHByb2dyYW1zIGNhbm5vdCBldmVuIGxvYWQuXG4rXHQgKiBBcmVuYSBzdHJ1Y3Rfb3BzIGFyZ3VtZW50cyBuZWVkIEpJVCBzdXBwb3J0LCBjdXJyZW50bHkgeDg2LTY0IGFuZFxuK1x0ICogYXJtNjQgb25seS4gRWxzZXdoZXJlIHZlcmlmaWNhdGlvbiBmYWlscyB3aXRoIFwiSklUIGRvZXMgbm90IHN1cHBvcnRcbitcdCAqIGFyZW5hIGFyZ3VtZW50c1wiLCBzbyB0aGUgcHJvZ3JhbXMgY2Fubm90IGV2ZW4gbG9hZC5cbiBcdCAqL1xuLSNpZiBkZWZpbmVkKF9feDg2XzY0X18pXG4rI2lmIGRlZmluZWQoX194ODZfNjRfXykgfHwgZGVmaW5lZChfX2FhcmNoNjRfXylcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwiYXJlbmFfYXJnXCIpKVxuIFx0XHRhcmVuYV9hcmcoKTtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwiYXJlbmFfYXJnX2ZhaWxcIikpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmMuY1xuaW5kZXggY2RjZWE4ODlkYTU4Ni4uYmYwZDMwNGUwZTU5YyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuYy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmMuY1xuQEAgLTI3LDYgKzI3LDcgQEAgdm9sYXRpbGUgdTY0IHN0YXNoO1xuIFxuIFNFQyhcInN5c2NhbGxcIilcbiBfX2FyY2hfeDg2XzY0XG4rX19hcmNoX2FybTY0XG4gX19zdWNjZXNzIF9fcmV0dmFsKDApXG4gaW50IGFyZW5hX2FyZ19mb3Jtcyh2b2lkICpjdHgpXG4ge1xuQEAgLTcwLDYgKzcxLDcgQEAgaW50IGFyZW5hX2FyZ19mb3Jtcyh2b2lkICpjdHgpXG4gICovXG4gU0VDKFwic3lzY2FsbFwiKVxuIF9fYXJjaF94ODZfNjRcbitfX2FyY2hfYXJtNjRcbiBfX3N1Y2Nlc3MgX19yZXR2YWwoMClcbiBpbnQgYXJlbmFfYXJnX3JlYmFzZSh2b2lkICpjdHgpXG4ge1xuQEAgLTExMSw2ICsxMTMsNyBAQCBpbnQgYXJlbmFfYXJnX3JlYmFzZSh2b2lkICpjdHgpXG4gXG4gU0VDKFwic3lzY2FsbFwiKVxuIF9fYXJjaF94ODZfNjRcbitfX2FyY2hfYXJtNjRcbiBfX3N1Y2Nlc3MgX19yZXR2YWwoMClcbiBpbnQgYXJlbmFfYXJnczUodm9pZCAqY3R4KVxuIHtcbkBAIC0xNDIsNiArMTQ1LDcgQEAgaW50IGFyZW5hX2FyZ3M1KHZvaWQgKmN0eClcbiBcbiBTRUMoXCJzeXNjYWxsXCIpXG4gX19hcmNoX3g4Nl82NFxuK19fYXJjaF9hcm02NFxuIF9fc3VjY2VzcyBfX3JldHZhbCgwKVxuIGludCBhcmVuYV9hcmdfbWl4ZWQodm9pZCAqY3R4KVxuIHtcbkBAIC0xNjksNiArMTczLDcgQEAgaW50IGFyZW5hX2FyZ19taXhlZCh2b2lkICpjdHgpXG4gLyoga2VybmVsLXNpZGUgZmF1bHRzIG9uIHVucG9wdWxhdGVkIHBhZ2VzIHJlY292ZXIgdmlhIHRoZSBzY3JhdGNoIHBhZ2UgKi9cbiBTRUMoXCJzeXNjYWxsXCIpXG4gX19hcmNoX3g4Nl82NFxuK19fYXJjaF9hcm02NFxuIF9fc3VjY2VzcyBfX3JldHZhbCgwKVxuIGludCBhcmVuYV9hcmdfdW5wb3B1bGF0ZWQodm9pZCAqY3R4KVxuIHtcbkBAIC0xODksNiArMTk0LDcgQEAgaW50IGFyZW5hX2FyZ191bnBvcHVsYXRlZCh2b2lkICpjdHgpXG4gXG4gU0VDKFwic3lzY2FsbFwiKVxuIF9fYXJjaF94ODZfNjRcbitfX2FyY2hfYXJtNjRcbiBfX2ZhaWx1cmUgX19tc2coXCJhcmVuYSBwb2ludGVyIHJlcXVpcmVzIGEgcHJvZ3JhbSB3aXRoIGFuIGFzc29jaWF0ZWQgYXJlbmFcIilcbiBpbnQgYXJlbmFfYXJnX25vX2FyZW5hKHZvaWQgKmN0eClcbiB7XG5AQCAtMTk4LDYgKzIwNCw3IEBAIGludCBhcmVuYV9hcmdfbm9fYXJlbmEodm9pZCAqY3R4KVxuIFxuIFNFQyhcInN5c2NhbGxcIilcbiBfX2FyY2hfeDg2XzY0XG4rX19hcmNoX2FybTY0XG4gX19mYWlsdXJlIF9fbXNnKFwiaXMgbm90IGEgcG9pbnRlciB0byBhcmVuYSBvciBzY2FsYXJcIilcbiBpbnQgYXJlbmFfYXJnX2JhZF9yZWcodm9pZCAqY3R4KVxuIHtcbkBAIC0yMTMsNiArMjIwLDcgQEAgaW50IGFyZW5hX2FyZ19iYWRfcmVnKHZvaWQgKmN0eClcbiBcdGRlZmluZWQoX19CUEZfRkVBVFVSRV9TVEFDS19BUkdVTUVOVClcbiBTRUMoXCJzeXNjYWxsXCIpXG4gX19hcmNoX3g4Nl82NFxuK19fYXJjaF9hcm02NFxuIF9fZmFpbHVyZSBfX21zZyhcImFyZW5hIHBvaW50ZXIgY2Fubm90IGJlIGEgc3RhY2sgYXJndW1lbnRcIilcbiBpbnQgYXJlbmFfYXJnX3N0YWNrKHZvaWQgKmN0eClcbiB7XG5AQCAtMjIzLDYgKzIzMSw3IEBAIGludCBhcmVuYV9hcmdfc3RhY2sodm9pZCAqY3R4KVxuICNlbHNlXG4gU0VDKFwic3lzY2FsbFwiKVxuIF9fYXJjaF94ODZfNjRcbitfX2FyY2hfYXJtNjRcbiBfX2Rlc2NyaXB0aW9uKFwiYXJlbmFfYXJnX3N0YWNrOiBub3Qgc3VwcG9ydGVkLCBkdW1teSB0ZXN0XCIpXG4gX19zdWNjZXNzXG4gaW50IGFyZW5hX2FyZ19zdGFjayh2b2lkICpjdHgpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jX2ppdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jX2ppdC5jXG5pbmRleCBjOWI5MTg2NjI2MTYyLi5iNWEwMWNiYzMzYTczIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jX2ppdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmNfaml0LmNcbkBAIC0zMiw2ICszMiwxMCBAQCBfX2ppdGVkKFwiXHRtb3ZsXHQlZWRpLCAlZWRpXCIpXG4gX19qaXRlZChcIlx0YWRkcVx0JXIxMiwgJXJkaVwiKVxuIF9faml0ZWQoXCIuLi5cIilcbiBfX2ppdGVkKFwiXHRjYWxscVx0e3suKn19XCIpXG4rX19hcmNoX2FybTY0XG4rX19qaXRlZChcIi4uLlwiKVxuK19faml0ZWQoXCJcdGFkZFx0eDAsIHgyOCwgdzAsIHV4dHdcIilcbitfX2ppdGVkKFwiXHR7eyhibHxtb3YpXHQuKn19XCIpXG4gX19zdWNjZXNzXG4gaW50IGFyZW5hX2FyZ19qaXRfcmViYXNlKHZvaWQgKmN0eClcbiB7XG5AQCAtNDgsNiArNTIsMTIgQEAgX19qaXRlZChcIlx0dGVzdGxcdCVlZGksICVlZGlcIilcbiBfX2ppdGVkKFwiXHRqZVx0TDBcIilcbiBfX2ppdGVkKFwiXHRhZGRxXHQlcjEyLCAlcmRpXCIpXG4gX19qaXRlZChcIkwwOlx0Y2FsbHFcdHt7Lip9fVwiKVxuK19fYXJjaF9hcm02NFxuK19faml0ZWQoXCIuLi5cIilcbitfX2ppdGVkKFwiXHRtb3ZcdHcwLCB3MFwiKVxuK19faml0ZWQoXCJcdGNielx0dzAsIEwwXCIpXG4rX19qaXRlZChcIlx0YWRkXHR4MCwgeDI4LCB3MCwgdXh0d1wiKVxuK19faml0ZWQoXCJMMDpcdHt7Lip9fVwiKVxuIF9fc3VjY2Vzc1xuIGludCBhcmVuYV9hcmdfaml0X251bGxhYmxlKHZvaWQgKmN0eClcbiB7XG5AQCAtNzIsNiArODIsMTYgQEAgX19qaXRlZChcIlx0dGVzdGxcdCVyOGQsICVyOGRcIilcbiBfX2ppdGVkKFwiXHRqZVx0TDBcIilcbiBfX2ppdGVkKFwiXHRhZGRxXHQlcjEyLCAlcjhcIilcbiBfX2ppdGVkKFwiTDA6XHRjYWxscVx0e3suKn19XCIpXG4rX19hcmNoX2FybTY0XG4rX19qaXRlZChcIi4uLlwiKVxuK19faml0ZWQoXCJcdGFkZFx0eDAsIHgyOCwgdzAsIHV4dHdcIilcbitfX2ppdGVkKFwiXHRhZGRcdHgxLCB4MjgsIHcxLCB1eHR3XCIpXG4rX19qaXRlZChcIlx0YWRkXHR4MiwgeDI4LCB3MiwgdXh0d1wiKVxuK19faml0ZWQoXCJcdGFkZFx0eDMsIHgyOCwgdzMsIHV4dHdcIilcbitfX2ppdGVkKFwiXHRtb3ZcdHc0LCB3NFwiKVxuK19faml0ZWQoXCJcdGNielx0dzQsIEwwXCIpXG4rX19qaXRlZChcIlx0YWRkXHR4NCwgeDI4LCB3NCwgdXh0d1wiKVxuK19faml0ZWQoXCJMMDpcdHt7Lip9fVwiKVxuIF9fc3VjY2Vzc1xuIGludCBhcmVuYV9hcmdfaml0X2FyZ3M1KHZvaWQgKmN0eClcbiB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfYXJlbmEuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJ1Y3Rfb3BzX2FyZW5hLmNcbmluZGV4IGJhMDRjNzNkOGQ5NjcuLjhhYTg2MzlkZjkxZjAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RydWN0X29wc19hcmVuYS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RydWN0X29wc19hcmVuYS5jXG5AQCAtNTksMTEgKzU5LDI4IEBAIGludCB0ZXN0X2FyZW5hX3N0YWNrX2NiKHVuc2lnbmVkIGxvbmcgbG9uZyAqY3R4KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK1NFQyhcInN0cnVjdF9vcHMvdGVzdF9hcmVuYV9tdWx0aXNsb3RcIilcbitpbnQgdGVzdF9hcmVuYV9tdWx0aXNsb3RfY2IodW5zaWduZWQgbG9uZyBsb25nICpjdHgpXG4re1xuK1x0dTY0IF9fYXJlbmEgKnB0ciA9ICh1NjQgX19hcmVuYSAqKWN0eFsyXTtcbitcbitcdGFyZW5hX3RvdWNoKys7XG4rXHQvKlxuK1x0ICogVGhlIDE2LWJ5dGUgc3RydWN0IG9jY3VwaWVzIGN0eFswXSBhbmQgY3R4WzFdLCBzbyBAcHRyIGlzIGFyZ3VtZW50XG4rXHQgKiBvbmUgYnV0IHNsb3QgdHdvLiBHZXR0aW5nIHRoYXQgd3JvbmcgaGFuZHMgdGhlIGNhbGxiYWNrIGEgc2NhbGFyLlxuK1x0ICovXG4rXHRpZiAoY3R4WzBdICE9IDExIHx8IGN0eFsxXSAhPSAyMilcbitcdFx0cmV0dXJuIDB4YmFkO1xuK1x0KnB0ciArPSAxO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIFNFQyhcIi5zdHJ1Y3Rfb3BzLmxpbmtcIilcbiBzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzMyB0ZXN0bW9kX2FyZW5hID0ge1xuIFx0LnRlc3RfYXJlbmEgPSAodm9pZCAqKXRlc3RfYXJlbmFfY2IsXG4gXHQudGVzdF9hcmVuYV9udWxsYWJsZSA9ICh2b2lkICopdGVzdF9hcmVuYV9udWxsYWJsZV9jYixcbiBcdC50ZXN0X2FyZW5hX3N0YWNrID0gKHZvaWQgKil0ZXN0X2FyZW5hX3N0YWNrX2NiLFxuK1x0LnRlc3RfYXJlbmFfbXVsdGlzbG90ID0gKHZvaWQgKil0ZXN0X2FyZW5hX211bHRpc2xvdF9jYixcbiB9O1xuIFxuIFNFQyhcInN5c2NhbGxcIilcbkBAIC0xMDksNiArMTI2LDEzIEBAIGludCB0cmlnZ2VyKHZvaWQgKmN0eClcbiBcdGlmICgqdmFsICE9IDQ0KVxuIFx0XHRyZXR1cm4gOTtcbiBcbitcdC8qIGEgbXVsdGktc2xvdCBhcmcgcHJlY2VkZXMgdGhlIGFyZW5hIHBvaW50ZXIgaGVyZSAqL1xuK1x0cmV0ID0gYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfbXVsdGlzbG90KCh1NjQgKil2YWwpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIDEwO1xuK1x0aWYgKCp2YWwgIT0gNDUpXG4rXHRcdHJldHVybiAxMTtcbitcbiBcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFx1MDAyNmFyZW5hLCAodm9pZCBfX2FyZW5hICopdmFsLCAxKTtcbiAjZW5kaWZcbiBcdHJldHVybiAwO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jXG5pbmRleCBhNjEzM2Y3NTIxZjM0Li45MzY2YTNjNTc4ZjEzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuY1xuQEAgLTQwMiwxMiArNDAyLDE5IEBAIHN0YXRpYyBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19fdGVzdF9hcmVuYV9zdGFjayh1NjQgYSwgdTY0IGIsIHU2NCBjLCB1NjQgZCxcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgaW50IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmFfbXVsdGlzbG90KHN0cnVjdCBicGZfdGVzdG1vZF9hcmVuYV9wYWlyIHAsXG4rXHRcdFx0XHRcdFx0ICB1NjQgKnB0cl9fYXJlbmEpXG4re1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyBzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzMyBfX2JwZl90ZXN0bW9kX29wczMgPSB7XG4gXHQudGVzdF8xID0gYnBmX3Rlc3Rtb2RfdGVzdF8zLFxuIFx0LnRlc3RfMiA9IGJwZl90ZXN0bW9kX3Rlc3RfNCxcbiBcdC50ZXN0X2FyZW5hID0gYnBmX3Rlc3Rtb2Rfb3BzM19fdGVzdF9hcmVuYSxcbiBcdC50ZXN0X2FyZW5hX251bGxhYmxlID0gYnBmX3Rlc3Rtb2Rfb3BzM19fdGVzdF9hcmVuYV9udWxsYWJsZSxcbiBcdC50ZXN0X2FyZW5hX3N0YWNrID0gYnBmX3Rlc3Rtb2Rfb3BzM19fdGVzdF9hcmVuYV9zdGFjayxcbitcdC50ZXN0X2FyZW5hX211bHRpc2xvdCA9IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmFfbXVsdGlzbG90LFxuIH07XG4gXG4gc3RhdGljIHZvaWQgYnBmX3Rlc3Rtb2RfdGVzdF9zdHJ1Y3Rfb3BzMyh2b2lkKVxuQEAgLTQ0MSw2ICs0NDgsMTMgQEAgX19icGZfa2Z1bmMgaW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX3N0YWNrKHU2NCAqcHRyX19hcmVuYSlcbiBcdHJldHVybiBzdF9vcHMzLVx1MDAzZXRlc3RfYXJlbmFfc3RhY2soMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgcHRyX19hcmVuYSk7XG4gfVxuIFxuK19fYnBmX2tmdW5jIGludCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9tdWx0aXNsb3QodTY0ICpwdHJfX2FyZW5hKVxuK3tcbitcdHN0cnVjdCBicGZfdGVzdG1vZF9hcmVuYV9wYWlyIHAgPSB7IC5hID0gMTEsIC5iID0gMjIgfTtcbitcbitcdHJldHVybiBzdF9vcHMzLVx1MDAzZXRlc3RfYXJlbmFfbXVsdGlzbG90KHAsIHB0cl9fYXJlbmEpO1xuK31cbitcbiBzdHJ1Y3QgYnBmX3Rlc3Rtb2RfYnRmX3R5cGVfdGFnXzEge1xuIFx0aW50IGE7XG4gfTtcbkBAIC04NTIsNiArODY2LDcgQEAgQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0XzIpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9udWxsYWJsZSlcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfc3RhY2spXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX211bHRpc2xvdClcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2dldF9kZWZhdWx0X3RydXN0ZWRfcHRyX3Rlc3QpO1xuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfcHV0X2RlZmF1bHRfdHJ1c3RlZF9wdHJfdGVzdCk7XG4gQlRGX0tGVU5DU19FTkQoYnBmX3Rlc3Rtb2RfY29tbW9uX2tmdW5jX2lkcylcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuaFxuaW5kZXggMzNmMmFmNWI3MDg1Ny4uMjEwYjkxOTI5MGNjMiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmhcbkBAIC0xMDMsNiArMTAzLDEyIEBAIHN0cnVjdCBicGZfdGVzdG1vZF9vcHMyIHtcbiBcdGludCAoKnRlc3RfMSkodm9pZCk7XG4gfTtcbiBcbisvKiAxNiBieXRlcywgc28gaXQgdGFrZXMgdHdvIGFyZ3VtZW50IHNsb3RzIHdoZW4gcGFzc2VkIGJ5IHZhbHVlICovXG4rc3RydWN0IGJwZl90ZXN0bW9kX2FyZW5hX3BhaXIge1xuK1x0dTY0IGE7XG4rXHR1NjQgYjtcbit9O1xuK1xuIHN0cnVjdCBicGZfdGVzdG1vZF9vcHMzIHtcbiBcdGludCAoKnRlc3RfMSkodm9pZCk7XG4gXHRpbnQgKCp0ZXN0XzIpKHZvaWQpO1xuQEAgLTExMiw2ICsxMTgsOCBAQCBzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzMyB7XG4gXHQvKiBlbm91Z2ggbGVhZGluZyBhcmdzIHRvIGZvcmNlIEBwdHIgb250byB0aGUgc3RhY2sgb24geDg2IGFuZCBhcm02NCAqL1xuIFx0aW50ICgqdGVzdF9hcmVuYV9zdGFjaykodTY0IGEsIHU2NCBiLCB1NjQgYywgdTY0IGQsIHU2NCBlLCB1NjQgZixcbiBcdFx0XHRcdHU2NCBnLCB1NjQgaCwgdTY0ICpwdHIpO1xuK1x0LyogYSBtdWx0aS1zbG90IGxlYWRpbmcgYXJnLCBzbyBAcHRyIGlzIG5vdCBhdCB0aGUgc2xvdCBpdHMgYXJnIGluZGV4IHN1Z2dlc3RzICovXG4rXHRpbnQgKCp0ZXN0X2FyZW5hX211bHRpc2xvdCkoc3RydWN0IGJwZl90ZXN0bW9kX2FyZW5hX3BhaXIgcCwgdTY0ICpwdHIpO1xuIH07XG4gXG4gc3RydWN0IHN0X29wc19hcmdzIHtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaFxuaW5kZXggYzQzODNhY2I1M2MxMS4uN2Q4MTA3MGVlZmU3ZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kX2tmdW5jLmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kX2tmdW5jLmhcbkBAIC0xMjMsNiArMTIzLDcgQEAgdm9pZCBicGZfdGVzdG1vZF90ZXN0X21vZF9rZnVuYyhpbnQgaSkgX19rc3ltO1xuIGludCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYShfX3U2NCAqcHRyX19hcmVuYSkgX19rc3ltO1xuIGludCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9udWxsYWJsZShfX3U2NCAqcHRyX19hcmVuYV9fbnVsbGFibGUpIF9fa3N5bTtcbiBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfc3RhY2soX191NjQgKnB0cl9fYXJlbmEpIF9fa3N5bTtcbitpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfbXVsdGlzbG90KF9fdTY0ICpwdHJfX2FyZW5hKSBfX2tzeW07XG4gXG4gX191NjQgYnBmX2tmdW5jX2NhbGxfdGVzdDEoc3RydWN0IHNvY2sgKnNrLCBfX3UzMiBhLCBfX3U2NCBiLFxuIFx0XHRcdFx0X191MzIgYywgX191NjQgZCkgX19rc3ltO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6NTA6MTMuNjgyNjk3MDM3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTE4NTIxMTYyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGFybTY0IEJQRiBKSVQgQXJlbmEgQXJndW1lbnQgU3VwcG9ydCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggaW50cm9kdWNpbmcgQlBGIGFyZW5hIGFyZ3VtZW50IHN1cHBvcnQgZm9yIHRoZSBhcm02NCBKSVQgY29tcGlsZXIuIFRoZSBjaGFuZ2VzIGFyZSBmb2N1c2VkIGluIGBhcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY2AgYW5kIGBhcmNoL2FybTY0L2xpYi9pbnNuLmNgLCB3aXRoIHNvbWUgdGVzdCB1cGRhdGVzIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhpcyBpcyBhIGNvcmUgZnVuY3Rpb25hbCBjaGFuZ2UsIGRlZmluaXRlbHkgcmVxdWlyaW5nIHRob3JvdWdoIGZ1enppbmcgYW5kIHRlc3RpbmcuXG5cbkZpcnN0LCBsZXQncyB6ZXJvIGluIG9uIGBhcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY2AuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYGVtaXRfa2Z1bmNfYXJlbmFfYXJnc2AsIGBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NgLCBhbmQgYGVtaXRfYXJlbmFfYXJnX2NvbnZgIGFsb25nIHdpdGggbW9kaWZpY2F0aW9ucyB0byBgc2F2ZV9hcmdzYCBhbmQgYHByZXBhcmVfdHJhbXBvbGluZWAgcG9pbnQgZGlyZWN0bHkgdG8gdGhlIG5ldyBhcmVuYSBhcmd1bWVudCBoYW5kbGluZy4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyBsaXZlcy5cblxuTm93LCBsZXQncyBpZGVudGlmeSB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IHByZWNpc2VseS4gV2UgaGF2ZSBgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZ2AgaW4gYGFyY2gvYXJtNjQvbGliL2luc24uY2AgaW52b2x2ZWQsIHdoaWNoIGlzIHJlbGV2YW50IHNpbmNlIGl0IGhhbmRsZXMgaW5zdHJ1Y3Rpb24gZ2VuZXJhdGlvbiwgYW5kIGluIGBhcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY2AsIHdlIGhhdmUgYGVtaXRfa2Z1bmNfYXJlbmFfYXJnc2AsIGBidWlsZF9pbnNuYCwgYGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJnc2AsIGBlbWl0X2FyZW5hX2FyZ19jb252YCwgYHNhdmVfYXJnc2AsIGFuZCBgcHJlcGFyZV90cmFtcG9saW5lYC5cblxuV2FpdCwgbGV0IG1lIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcuIGBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NgIGlzIGV4cG9ydGVkLCBtZWFuaW5nIGl0J3MgcG90ZW50aWFsbHkgdXNlZCBlbHNld2hlcmUuIFNpbWlsYXJseSwgYGFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9leHRlbmRlZF9yZWdgIGlzIG5vbi1zdGF0aWMgc28gaXQncyBsaWtlbHkgdXNlZCBieSBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsIGFzIHdlbGwuIFdoaWxlIHRoZSBtYWluIGVudHJ5IHBvaW50IGBicGZfaW50X2ppdF9jb21waWxlYCBpc24ndCBkaXJlY3RseSBtb2RpZmllZCwgSSBzZWUgdGhhdCBgYnVpbGRfaW5zbmAsIHdoaWNoIGlzIGNhbGxlZCB3aXRoaW4gYGJwZl9pbnRfaml0X2NvbXBpbGVgLCBpcyBtb2RpZmllZC4gSSBzaG91bGQgcHJvYmFibHkgcGF5IGF0dGVudGlvbiB0byB0aGUgY2FsbCBzdGFjayB0aGVyZS4gQWxzbywgc2luY2UgYHByZXBhcmVfdHJhbXBvbGluZWAgaXMgcGFydCBvZiB0aGUgY2hhbmdlLCBhbmQgSSBzZWUgYGJwZl90cmFtcG9saW5lX3VwZGF0ZWAgb3Igc2ltaWxhciBjYWxscyB0aGlzIHRocm91Z2ggYGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAsIEkgc2hvdWxkIGNoZWNrIGBhcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY2AgZm9yIGBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgLiBUaGF0IGZ1bmN0aW9uIGlzIHByb2JhYmx5IGltcG9ydGFudCwgYXMgdGhlIHRyYW1wb2xpbmUgaXMgaG93IHdlIGFjdHVhbGx5ICp1c2UqIHRoZSBjb21waWxlZCBCUEYuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNDA3LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTg5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6NTA6MjIuODY3OTEyMDQxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NzExMDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYz0yNjc5PXN0YXRpYyB2b2lkIHN0b3JlX2Z1bmNfbWV0YShzdHJ1Y3Qgaml0X2N0eCAqY3R4LCB1NjQgZnVuY19tZXRhLCBpbnQgZnVuY19tZXRhX29mZilcXG4tLVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTI2ODQtXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM6MjY4NTovKiBCYXNlZCBvbiB0aGUgeDg2J3MgaW1wbGVtZW50YXRpb24gb2YgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKCkuXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMjY4Ni0gKlxcbi0tXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM9MzAyMD1pbnQgYXJjaF9wcm90ZWN0X2JwZl90cmFtcG9saW5lKHZvaWQgKmltYWdlLCB1bnNpZ25lZCBpbnQgc2l6ZSlcXG4tLVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTMwMjQtXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM6MzAyNTppbnQgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICpyb19pbWFnZSxcXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0zMDI2LVxcdFxcdFxcdFxcdHZvaWQgKnJvX2ltYWdlX2VuZCwgY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDo1MDoyMi45MTU2MjgxMzlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzM2NTk1ODI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBCUEYgQ29tcGlsYXRpb24gRW50cnkgUG9pbnRzKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgQlBGIHRyYW1wb2xpbmUgYW5kIEpJVCBjb21waWxhdGlvbiBzZXR1cC4gRnJvbSB3aGF0IEknbSBzZWVpbmcsIGBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgIGlzIHRoZSBrZXkgZW50cnkgcG9pbnQgZm9yIGhhbmRsaW5nIHRyYW1wb2xpbmVzLCB3aGljaCBtYWtlcyBzZW5zZS4gVGhlbiwgZm9yIHRoZSBhY3R1YWwgSklUIGNvbXBpbGF0aW9uIHByb2Nlc3MsIGBicGZfaW50X2ppdF9jb21waWxlYCBzZWVtcyB0byBiZSB0aGUgbWFpbiBzdGFydGluZyBwb2ludC4gTm93LCBJIHdhbnQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGFuZCBtYWtlIHN1cmUgdGhhdCBgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZ2AgaXMgYWN0dWFsbHkgZXhwb3J0ZWQgYW5kIGFjY2Vzc2libGUuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBpdCdzIGNvcnJlY3RseSBleHBvc2VkIHdpdGhpbiB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGluc3RydWN0aW9uIGdlbmVyYXRpb24gY29tcG9uZW50cy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBidWlsZGluZyBibG9ja3MgYXJlIGFsbCBhdmFpbGFibGUgdG8gdGhlIG1haW4gcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM5NDIsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDo1MDoyNy4yNTIyMjYzNjRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA1MDk4MTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9leHRlbmRlZF9yZWdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9hcm02NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9pbnNuLmg9NjUwPXUzMiBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfc2hpZnRlZF9yZWcoZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgZHN0LFxcbi0tXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9pbnNuLmgtNjU1LVxcdFxcdFxcdFxcdFxcdCBlbnVtIGFhcmNoNjRfaW5zbl9hZHNiX3R5cGUgdHlwZSk7XFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9pbnNuLmg6NjU2OnUzMiBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnKGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIGRzdCxcXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2luc24uaC02NTctXFx0XFx0XFx0XFx0XFx0ICBlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBzcmMsXFxuLS1cXG5hcmNoL2FybTY0L2xpYi9pbnNuLmM9OTMxPXUzMiBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfc2hpZnRlZF9yZWcoZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgZHN0LFxcbi0tXFxuYXJjaC9hcm02NC9saWIvaW5zbi5jLTk5My0gKi9cXG5hcmNoL2FybTY0L2xpYi9pbnNuLmM6OTk0OnUzMiBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnKGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIGRzdCxcXG5hcmNoL2FybTY0L2xpYi9pbnNuLmMtOTk1LVxcdFxcdFxcdFxcdFxcdCAgZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgc3JjLFxcbi0tXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdC5oLTI0Ny0jZGVmaW5lIEE2NF9BRERTVUJfRVJFRyhzZiwgUmQsIFJuLCBSbSwgZXh0LCBzaGlmdCwgdHlwZSkgXFxcXFxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXQuaDoyNDg6XFx0YWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZyhSZCwgUm4sIFJtLCBcXFxcXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdC5oLTI0OS1cXHRcXHRBQVJDSDY0X0lOU05fRVhURU5EXyMjZXh0LCBzaGlmdCwgQTY0X1ZBUklBTlQoc2YpLCBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjUwOjI3LjM1NzMyOTI4MVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0MTk4NjAwNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzIGZyb20gYSBmaXJzdC1wZXJzb24sIGV4cGVydCBwZXJzcGVjdGl2ZSwgc3RhcnRpbmcgd2l0aCBhICoqYm9sZGVkIGhlYWRlcioqOlxuXG4qKkNoZWNraW5nIFN5bWJvbCBFeHBvcnQgaW4gQUFyY2g2NCBJbnN0cnVjdGlvbiBHZW5lcmF0aW9uKipcblxuQWxyaWdodCwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4gSSdtIHRha2luZyBhIGxvb2sgYXQgdGhpcyBgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZ2AgZnVuY3Rpb24uIE5vdywgSSBuZWVkIHRvIGtub3cgaWYgaXQncyBhY3R1YWxseSB1c2FibGUgYnkgb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSwgb3IgaWYgaXQncyBhbiBpbnRlcm5hbCBoZWxwZXIuIFRoZSBrZXkgcXVlc3Rpb24gaW4gbXkgbWluZCByaWdodCBub3cgaXMgd2hldGhlciBvciBub3QgaXQncyBiZWVuIGV4cGxpY2l0bHkgKipleHBvcnRlZCB1c2luZyBgRVhQT1JUX1NZTUJPTGAqKi4gVGhhdCdzIHRoZSBjcnVjaWFsIGRldGFpbC4gV2l0aG91dCB0aGF0LCBpdOKAmXMgZ29pbmcgdG8gYmUgY29uZmluZWQgdG8gaXRzIGN1cnJlbnQgY29tcGlsYXRpb24gdW5pdCwgd2hpY2ggbWlnaHQgY2F1c2UgbWUgcHJvYmxlbXMgaWYgSSB0cnkgdG8gdXNlIGl0IGVsc2V3aGVyZS4gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHRoaXMgdG8gdW5kZXJzdGFuZCBob3cgd2lkZWx5IGF2YWlsYWJsZSB0aGlzIGZ1bmN0aW9uIGlzIHdpdGhpbiB0aGUgbGFyZ2VyIGFyY2hpdGVjdHVyZS4gVGhlIGFuc3dlciB3aWxsIHNpZ25pZmljYW50bHkgaW1wYWN0IHRoZSBuZXh0IHN0ZXBzIEkgdGFrZSBpbiB3aGF0ZXZlciBJIGFtIHRyeWluZyB0byBhY2hpZXZlLiBJcyBpdCBpbnRlcm5hbCwgb3IgYnJvYWRseSBhY2Nlc3NpYmxlPyBHb3R0YSBrbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDcwMiwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjUwOjMxLjc3NzE5MzIxMloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDA2MTMyOCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL2FybTY0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6NTA6MzEuODcxMjYzMzFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDEwMDkwODIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk5hdmlnYXRpbmcgdGhlIEFyZW5hIEFyZ3VtZW50IExhbmRzY2FwZSoqXG5cbkhtbSwgbm8sIHRoaXMgaXNuJ3QgYXMgc3RyYWlnaHRmb3J3YXJkIGFzIGEgc2ltcGxlIFwieWVzXCIgb3IgXCJub1wiIHN0YXRpYyBmbGFnIHdvdWxkIGltcGx5LiBUaGUgc2l0dWF0aW9uJ3MgbW9yZSBudWFuY2VkIHRoYW4gdGhhdC4gVGhlIGJlaGF2aW9yIHNlZW1zIGR5bmFtaWMsIHdoaWNoIG1lYW5zIEkgbmVlZCB0byBkaWcgZGVlcGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGV0aGVyIHRoaXMgcGxhdGZvcm0gc3VwcG9ydHMgYXJlbmEgYXJndW1lbnRzLCBidXQgaXQncyBub3QgYSBnaXZlbi4gVGhlIGNydWNpYWwgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NgIGZ1bmN0aW9uLiBUaGF0IGZ1bmN0aW9uIHdpbGwgbGlrZWx5IHNoZWQgbGlnaHQgb24gdGhlIHJ1bnRpbWUgY2FwYWJpbGl0aWVzIGFuZCBkZWNpZGUgd2hlcmUgdG8gZ28gZnJvbSBoZXJlLiBJdCdzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBpZiBteSBleHBlY3RhdGlvbnMgYXJlIGdvaW5nIHRvIGJlIG1ldCwgb3IgaWYgSSBuZWVkIHRvIHRha2UgYSBkaWZmZXJlbnQgYXBwcm9hY2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MDA4LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6NTA6MzUuODgxMzU3NzczWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjE2ODI3MDEzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJnc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM9MjM5MT1ib29sIGJwZl9qaXRfc3VwcG9ydHNfc3RhY2tfYXJncyh2b2lkKVxcbi0tXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMjM5NS1cXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYzoyMzk2OmJvb2wgYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzKHZvaWQpXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMjM5Ny17XFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9NDE1OT1ib29sIGJwZl9qaXRfc3VwcG9ydHNfc3RhY2tfYXJncyh2b2lkKVxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTQxNjMtXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjQxNjQ6Ym9vbCBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3Modm9pZClcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtNDE2NS17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oPTEyNDA9Ym9vbCBicGZfaml0X3N1cHBvcnRzX3N0YWNrX2FyZ3Modm9pZCk7XFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDoxMjQxOmJvb2wgYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzKHZvaWQpO1xcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtMTI0Mi1ib29sIGJwZl9qaXRfc3VwcG9ydHNfZmFyX2tmdW5jX2NhbGwodm9pZCk7XFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz0zMjkwPWJvb2wgX193ZWFrIGJwZl9qaXRfc3VwcG9ydHNfc3RhY2tfYXJncyh2b2lkKVxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmMtMzI5NC1cXG5rZXJuZWwvYnBmL2NvcmUuYzozMjk1OmJvb2wgX193ZWFrIGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncyh2b2lkKVxcbmtlcm5lbC9icGYvY29yZS5jLTMyOTYte1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTExMzA2PWdldF9rZnVuY19hcmdfdHlwZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEzODMtXFx0ZWxzZSBpZiAoaXNfa2Z1bmNfYXJnX2FyZW5hKG1ldGEtXFx1MDAzZWJ0ZiwgXFx1MDAyNmFyZ3NbYXJnXSkpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTEzODQ6XFx0XFx0aWYgKCFicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3MoKSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTM4NS1cXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIkpJVCBkb2VzIG5vdCBzdXBwb3J0IGtmdW5jICVzKCkgd2l0aCBhcmVuYSBwb2ludGVyIGFyZ3VtZW50c1xcXFxuXFxcIixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xODcyMT1zdGF0aWMgaW50IGNoZWNrX3N0cnVjdF9vcHNfYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg4MTAtXFx0XFx0aWYgKGJhc2VfdHlwZShpbmZvLVxcdTAwM2VyZWdfdHlwZSkgPT0gUFRSX1RPX0FSRU5BKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE4ODExOlxcdFxcdFxcdGlmICghYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzKCkpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg4MTItXFx0XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJKSVQgZG9lcyBub3Qgc3VwcG9ydCBhcmVuYSBhcmd1bWVudHNcXFxcblxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDo1MDozNy40OTgxOTE0ODZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjI3NTIxMTY3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIEJQRiBKSVQgUGF0Y2ggZm9yIGFybTY0KipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIGZvY3VzZWQgb24gZW5hYmxpbmcgb3IgaW1wcm92aW5nIEJQRiBKSVQgY29tcGlsYXRpb24gb24gYXJtNjQuIE15IGltbWVkaWF0ZSBvYnNlcnZhdGlvbnMgYXJlIHRoYXQgdGhlIHBhdGNoIGFkZHMgYSBmdW5jdGlvbiwgYGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJnc2AsIHRvIHRoZSBhcm02NCBhcmNoaXRlY3R1cmUsIGFuZCBpdCByZXR1cm5zIHRydWUuIFRoYXQncyBnb29kLCBpbmRpY2F0aW5nIHRoaXMgYXJtNjQgaW1wbGVtZW50YXRpb24gaXMgYWN0aXZlbHkgc3VwcG9ydGluZyBhcmVuYS1iYXNlZCBhcmd1bWVudCBwYXNzaW5nLCB3aGljaCBpcyBsaWtlbHkgYSBrZXkgb3B0aW1pemF0aW9uLlxuXG5EaWdnaW5nIGRlZXBlciwgSSBzZWUgYSBjaGFpbiBvZiBtb2RpZmljYXRpb25zLiBUaGUgcGF0Y2ggaW5kaXJlY3RseSB0b3VjaGVzIGBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgIGJ5IGNoYW5naW5nIGBwcmVwYXJlX3RyYW1wb2xpbmVgLCB3aGljaCBpcyBjYWxsZWQgYnkgdGhlIGZvcm1lci4gSXQgYWxzbyBjaGFuZ2VzIGBidWlsZF9pbnNuYCwgd2hpY2ggaXMgY2FsbGVkIGJ5IGBidWlsZF9ib2R5YCB3aGljaCBpcyBjYWxsZWQgYnkgYGJwZl9pbnRfaml0X2NvbXBpbGVgLiAgU28sIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRob3NlIGluZGlyZWN0IGNoYW5nZXMgYW5kIGhvdyB0aGV5IGFyZSBoYW5kbGVkLlxuXG5UaGUga2V5IGZ1bmN0aW9ucyB0byBzY3J1dGluaXplLCB0aGVuLCBhcmU6IGBicGZfaW50X2ppdF9jb21waWxlYCDigJMgdGhlIGNvcmUgSklUIGNvbXBpbGF0aW9uIGZ1bmN0aW9uLCBgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYCDigJMgcHJvYmFibHkgcmVsYXRlZCB0byB0aGUgaW5zdHJ1Y3Rpb24gc2VxdWVuY2UgbmVlZGVkIGZvciBjYWxsaW5nIGludG8gSklUJ2QgY29kZSwgYGFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9leHRlbmRlZF9yZWdgIOKAkyBhIHNwZWNpZmljIGluc3RydWN0aW9uIGdlbmVyYXRvciB0aGF0IG1pZ2h0IGhhdmUgc3BlY2lmaWMgQVJNNjQgZmVhdHVyZXMgYmVpbmcgZXhwbG9pdGVkIGFuZCBmaW5hbGx5IGBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NgIOKAkyB0aGUgZmxhZyBzaWduYWxpbmcgdGhlIGZlYXR1cmUncyBhdmFpbGFiaWxpdHkuXG5cbkJlZm9yZSBkaXZpbmcgaW50byB0aGUgY29kZSBpdHNlbGYsIEknbGwgcXVpY2tseSBjaGVjayBmb3IgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBUaGUgZmlsZSBsb2NhdGlvbiAoYGFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jYCkgdGVsbHMgbWUgd2hlcmUgdG8gbG9vayBhbmQgSSBrbm93IHRoaXMgaGluZ2VzIG9uIGBDT05GSUdfQlBGX0pJVGAuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGlzIGlzIGVuYWJsZWQgYW5kIHRoZW4gZGlnIGluIGZ1cnRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1OTc4LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjUwOjQzLjc3MzQwNjg0NFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1MjU4MTE1MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX0pJVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9LY29uZmlnPTI3PWNvbmZpZyBCUEZfU1lTQ0FMTFxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnLTQxLVxcbmtlcm5lbC9icGYvS2NvbmZpZzo0Mjpjb25maWcgQlBGX0pJVFxcbmtlcm5lbC9icGYvS2NvbmZpZy00My1cXHRib29sIFxcXCJFbmFibGUgQlBGIEp1c3QgSW4gVGltZSBjb21waWxlclxcXCJcXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZy01Ny1cXG5rZXJuZWwvYnBmL0tjb25maWc6NTg6Y29uZmlnIEJQRl9KSVRfQUxXQVlTX09OXFxua2VybmVsL2JwZi9LY29uZmlnLTU5LVxcdGJvb2wgXFxcIlBlcm1hbmVudGx5IGVuYWJsZSBCUEYgSklUIGFuZCByZW1vdmUgQlBGIGludGVycHJldGVyXFxcIlxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnLTY4LVxcbmtlcm5lbC9icGYvS2NvbmZpZzo2OTpjb25maWcgQlBGX0pJVF9ERUZBVUxUX09OXFxua2VybmVsL2JwZi9LY29uZmlnLTcwLVxcdGRlZl9ib29sIEFSQ0hfV0FOVF9ERUZBVUxUX0JQRl9KSVQgfHwgQlBGX0pJVF9BTFdBWVNfT05cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6NTA6NDUuNDI1OTkzNTA2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwOTY2MTU5OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWtpbmcgb24gdGhlIHBlcnNvbmEgeW91IHJlcXVlc3RlZDpcblxuKipBc3Nlc3NpbmcgdGhlIEJQRiBGZWF0dXJlIFJlcXVpcmVtZW50cyoqXG5cbkFscmlnaHQsIHNvIHRoZSBpbml0aWFsIHRob3VnaHQgaXMgY3J5c3RhbCBjbGVhcjogd2UgKm5lZWQqIEJQRl9KSVQgZW5hYmxlZC4gTm8gaWZzLCBhbmRzLCBvciBidXRzIGFib3V0IGl0LiBUaGF0J3MgdGhlIGJhc2VsaW5lLiBOb3csIHRoZSBtZWF0IG9mIHRoaXMgc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgdGhpcyBCUEYgYXJlbmEgY29uY2VwdC4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiBpcyB0aGVyZSBhIGNvcnJlc3BvbmRpbmcga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGNvbnRyb2wgdGhpcz8gU3BlY2lmaWNhbGx5LCBpcyB0aGVyZSBhIGBDT05GSUdfQlBGX0FSRU5BYCBzZXR0aW5nPyBNeSBuZXh0IHN0ZXAgaXMgY2xlYXJseSBnb2luZyB0byBiZSB0byB2ZXJpZnkgdGhhdCBjb25maWd1cmF0aW9uIG9wdGlvbiBleGlzdHMgYW5kLCBpZiBzbywgdW5kZXJzdGFuZCBpdHMgY3VycmVudCBzdGF0ZS4gSSBuZWVkIHRvIGtub3cgaWYgdGhpcyBmZWF0dXJlIGlzIGV2ZW4gKmF2YWlsYWJsZSogaW4gdGhlIGN1cnJlbnQgYnVpbGQgZW52aXJvbm1lbnQgYmVmb3JlIEkgY2FuIG1vdmUgZm9yd2FyZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY4MjgsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDo1MDo0OS41MjI2MTMyMThaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0OTI0Njc2NjcsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfQVJFTkFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDo1MDo1MS4wMTUwODk2MzRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAzOTc3MTQzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBCUEYgQ29uZmlndXJhdGlvbiBDb25jZXJucyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIEJQRiBjb25maWd1cmF0aW9uLCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoZSBhYnNlbmNlIG9mIGBDT05GSUdfQlBGX0FSRU5BYC4gSG1tLCBpbnRlcmVzdGluZy4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRoYXQuIFdhaXQsIHdhaXQuIEkga25vdyB0aGF0IEJQRl9TWVNDQUxMIGlzIGFic29sdXRlbHkgY3J1Y2lhbCwgc28gdGhhdCdzIGEgZ2l2ZW4uIE5leHQgdXAsIGBDT05GSUdfQlBGX0pJVGAuIFllcywgb2YgY291cnNlLiBJIGNhbid0IGltYWdpbmUgdGhpcyB3b3JraW5nIHdpdGhvdXQgdGhlIEpJVCBjb21waWxlciBlbmFibGVkLiBMZXQgbWUganVzdCBjb25maXJtIHRoaW5ncyB3aXRoIHRoZSBgYXJjaC9hcm02NC9uZXQvTWFrZWZpbGVgIHRvIG1ha2Ugc3VyZSBub3RoaW5nIGlzIGJlaW5nIG92ZXJsb29rZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MDY1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6NTA6NTUuMDU0ODY1NzY3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODIzMjU5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfaml0X2NvbXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9hcm02NC9uZXQvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9uZXQvTWFrZWZpbGUtNC0jXFxuYXJjaC9hcm02NC9uZXQvTWFrZWZpbGU6NTpvYmotJChDT05GSUdfQlBGX0pJVCkgKz0gYnBmX2ppdF9jb21wLm8gYnBmX3RpbWVkX21heV9nb3RvLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6NTA6NTUuMTAzMTA1NDg1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU5NzkxMjE1MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEJQRiBKSVQgRnVuY3Rpb25hbGl0eSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBDT05GSUdfQlBGX0pJVGAuIFRoYXQncyB0aGUga2V5IGVuYWJsaW5nIGNvbmZpZywgb2J2aW91c2x5LiBOb3csIEkgd2FudCB0byBnZXQgYSBsYXkgb2YgdGhlIGxhbmQsIHNlZSB3aGF0IG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zIGFyZSBpbiBwbGF5IGhlcmUuIExldCdzIHNlZS4uLiBJJ3ZlIGdvdCBgYnBmX2ludF9qaXRfY29tcGlsZWAsIGBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgLCBgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZ2AsIGFuZCBgYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzYC5cblxuSG1tLCBgYnBmX2ludF9qaXRfY29tcGlsZWAgbG9va3MgbGlrZSBhIHJlYWxseSBjb3JlLCBob3QtcGF0aCBmdW5jdGlvbiBmb3IgdGhlIEJQRiBKSVQsIHZlcnkgZ2VuZXJpYyBpbiBpdHMgcHVycG9zZS4gYGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAgaXMgYWxzbyBzb21ld2hhdCBnZW5lcmljLCBidXQgc2xpZ2h0bHkgbW9yZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMsIHByb2JhYmx5IGZvciBzZXR0aW5nIHVwIHRoZSBleGVjdXRpb24gY29udGV4dC4gYGFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9leHRlbmRlZF9yZWdgLCBob3dldmVyLCB0aGF0J3MgZGVmaW5pdGVseSBhIHNwZWNpZmljIGluc3RydWN0aW9uIGdlbmVyYXRvcjsgaXQncyBnZXR0aW5nIGRvd24gaW50byB0aGUgd2VlZHMgb2YgaG93IGFuIGFkZCBvciBzdWJ0cmFjdCBpcyBoYW5kbGVkIG9uIEFBcmNoNjQuIEFuZCBmaW5hbGx5LCBgYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzYCBzb3VuZHMgdmVyeSBzcGVjaWZpYywgbGlrZWx5IHJlbGF0ZWQgdG8gaG93IHRoZSBKSVQgaGFuZGxlcyBhcmd1bWVudHMgYW5kIG1lbW9yeSBhcmVuYXMuXG5cbkdpdmVuIHRoYXQgYGFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9leHRlbmRlZF9yZWdgIGlzIHNvIGZvY3VzZWQsIEknbSBnb2luZyB0byBkaWcgYSBiaXQgZGVlcGVyIGludG8gaXRzIGNhbGxlcnMgdG8gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaXRzIHJvbGUgaW4gdGhlIGJpZ2dlciBwaWN0dXJlLiBJdCBjb3VsZCBiZSBhbiBpbnRlcmVzdGluZyBwb2ludCB0byBleGFtaW5lIG9wdGltaXphdGlvbiBwb3NzaWJpbGl0aWVzLCBkZXBlbmRpbmcgb24gaG93IHdpZGVseSBpdCdzIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MzU2LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjUxOjAxLjA4MjIzMDA0MloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODkyOTUyMzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL2FybTY0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L2luY2x1ZGUvYXNtL2luc24uaD02NTA9dTMyIGFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9zaGlmdGVkX3JlZyhlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBkc3QsXFxuLS1cXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2luc24uaC02NTUtXFx0XFx0XFx0XFx0XFx0IGVudW0gYWFyY2g2NF9pbnNuX2Fkc2JfdHlwZSB0eXBlKTtcXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2luc24uaDo2NTY6dTMyIGFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9leHRlbmRlZF9yZWcoZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgZHN0LFxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vaW5zbi5oLTY1Ny1cXHRcXHRcXHRcXHRcXHQgIGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIHNyYyxcXG4tLVxcbmFyY2gvYXJtNjQvbGliL2luc24uYz05MzE9dTMyIGFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9zaGlmdGVkX3JlZyhlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBkc3QsXFxuLS1cXG5hcmNoL2FybTY0L2xpYi9pbnNuLmMtOTkzLSAqL1xcbmFyY2gvYXJtNjQvbGliL2luc24uYzo5OTQ6dTMyIGFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9leHRlbmRlZF9yZWcoZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgZHN0LFxcbmFyY2gvYXJtNjQvbGliL2luc24uYy05OTUtXFx0XFx0XFx0XFx0XFx0ICBlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBzcmMsXFxuLS1cXG5hcmNoL2FybTY0L25ldC9icGZfaml0LmgtMjQ3LSNkZWZpbmUgQTY0X0FERFNVQl9FUkVHKHNmLCBSZCwgUm4sIFJtLCBleHQsIHNoaWZ0LCB0eXBlKSBcXFxcXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdC5oOjI0ODpcXHRhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnKFJkLCBSbiwgUm0sIFxcXFxcXG5hcmNoL2FybTY0L25ldC9icGZfaml0LmgtMjQ5LVxcdFxcdEFBUkNINjRfSU5TTl9FWFRFTkRfIyNleHQsIHNoaWZ0LCBBNjRfVkFSSUFOVChzZiksIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6NTE6MDEuMTcxNTMxNloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDg1MjU4OTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlRyYWNpbmcgdGhlIENhbGwgUGF0aCB0byBhIENyaXRpY2FsIEZ1bmN0aW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnYCBmdW5jdGlvbiwgYW5kIGl0IGxvb2tzIGxpa2UgdGhlIGNhbGwgcGF0aCBpcyBmYWlybHkgY29udGFpbmVkLiBUaGUgaW5pdGlhbCBob29rIGlzIHdpdGhpbiB0aGUgYEE2NF9BRERTVUJfRVJFR2AgbWFjcm8sIGFuZCB0aGUgdHJhY2UgZnJvbSB0aGVyZSBpcyBwcmV0dHkgZGlyZWN0OiBgQTY0X0FERFNVQl9FUkVHYCBnZXRzIHVzZWQgaW4gYEE2NF9BRERfRVhUYCwgd2hpY2ggZmVlZHMgaW50byBgQTY0X0FERF9VWFRXYC4gTm93LCBgQTY0X0FERF9VWFRXYCBpcyBjcnVjaWFsLCBhcyBpdCBlbmRzIHVwIGluIGJvdGggYGVtaXRfa2Z1bmNfYXJlbmFfYXJnc2AgYW5kIGBlbWl0X2FyZW5hX2FyZ19jb252YC4gVGhpcyBtYWtlcyBpdCB0aGUgcGl2b3RhbCBzeW1ib2wgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGJyb2FkZXIgdXNhZ2UuIE5vdyBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUgY2hlY2sgdGhlIGBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODQzNSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDo1MTowNi4yNTY4MDY2MzJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3MzU4Mjg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL2FybTY0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYz0yNjc5PXN0YXRpYyB2b2lkIHN0b3JlX2Z1bmNfbWV0YShzdHJ1Y3Qgaml0X2N0eCAqY3R4LCB1NjQgZnVuY19tZXRhLCBpbnQgZnVuY19tZXRhX29mZilcXG4tLVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTI2ODQtXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM6MjY4NTovKiBCYXNlZCBvbiB0aGUgeDg2J3MgaW1wbGVtZW50YXRpb24gb2YgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKCkuXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMjY4Ni0gKlxcbi0tXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM9MzAyMD1pbnQgYXJjaF9wcm90ZWN0X2JwZl90cmFtcG9saW5lKHZvaWQgKmltYWdlLCB1bnNpZ25lZCBpbnQgc2l6ZSlcXG4tLVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTMwMjQtXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM6MzAyNTppbnQgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICpyb19pbWFnZSxcXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0zMDI2LVxcdFxcdFxcdFxcdHZvaWQgKnJvX2ltYWdlX2VuZCwgY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDo1MTowNi4zNDQxNzE2NVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4OTU4NzQ2MTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEN1cnJlbnQgTGluZSBvZiBUaG91Z2h0KipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBuYWlsIGRvd24gc29tZSBnb29kIFwiZm9jdXMgc3ltYm9sc1wiIOKAkyBrZXkgZnVuY3Rpb25zIHRoYXQgcmVwcmVzZW50IHRoZSBhcmVhIEknbSBsb29raW5nIGF0LiBgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYCBpcyBhIHN0cm9uZyBjYW5kaWRhdGUsIGRlZmluaXRlbHkgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBCdXQgd2hhdCBhYm91dCBgYnBmX2ludF9qaXRfY29tcGlsZWA/IEl0ICppcyogdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIHRoZSBKSVQgY29tcGlsZXIsIHdoaWNoIGlzIHZlcnkgcmVsZXZhbnQsIGJ1dCBpdCdzIGFsc28gcHJldHR5IGdlbmVyaWMuIE1heWJlIHRvbyBicm9hZC4gT24gdGhlIG90aGVyIGhhbmQsIGBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NgIGlzIHJlYWxseSBzcGVjaWZpYyBhbmQgcHJvYmFibHkgcmVwcmVzZW50cyBhIGNsZWFyIGFyZWEgdG8gZXhhbWluZS4gVGhhdCdzIGEgc3Ryb25nIGNvbnRlbmRlci5cblxuSSBuZWVkIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHNwZWNpZmljIGZ1bmN0aW9ucyB0aGF0IHdvdWxkIGJlIGhlbHBmdWwgYXMgZm9jdXMgc3ltYm9scy4gSSBmb3VuZCBgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfbXVsdGlzbG90YCBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuY2AuIEhtbSwgYnV0IGlzIGBicGZfdGVzdG1vZGAgYWN0dWFsbHkgY29tcGlsZWQgKmludG8qIHRoZSBrZXJuZWw/IE9oIHJpZ2h0LCBubywgaXQncyBhIHRlc3QgbW9kdWxlISBXZSBzaG91bGRuJ3QgaW5jbHVkZSBpdCBpbiBGb2N1c1N5bWJvbHMgdW5sZXNzIGl0J3MgcGFydCBvZiB0aGUgY29yZSBrZXJuZWwuIE5vcGUsIGl0J3MganVzdCBhIGtlcm5lbCBtb2R1bGUgdXNlZCBmb3IgdGVzdGluZy4gR29vZCB0byByZW1lbWJlci4gU28gc2NyYXRjaCB0aGF0LlxuXG5MZXQncyByZXZpZXcgdGhlIGN1cnJlbnQgbGlzdDpcblxuKiAgIGBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnYFxuKiAgIGBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NgXG4qICAgYGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWBcbiogICBgYnBmX2ludF9qaXRfY29tcGlsZWAgKG1heWJlIEknbGwgb21pdCB0aGlzLCBpdCBmZWVscyBhIGJpdCB0b28gYnJvYWQpXG5cbk5vdywgd2hlcmUgYXJlIHRoZXNlIGZ1bmN0aW9ucyBkZWZpbmVkPyBPa2F5LCBgYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzYCBpcyBpbiBgYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmNgLCBhbmQgYGFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9leHRlbmRlZF9yZWdgIGlzIGluIGBhcmNoL2FybTY0L2xpYi9pbnNuLmNgLiBgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYCBpcyBhbHNvIGluIGBhcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY2AuXG5cbk9rYXksIG5leHQgSSdsbCBjaGVjayBhbmQgZW5zdXJlIHRoYXQgYGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJnc2AgaXMgYWN0dWFsbHkgY2FsbGVkIHRvIHZhbGlkYXRlIHRoYXQgaXQgaXMgc29tZXRoaW5nIHRvIGxvb2sgYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MTM1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjUxOjE1LjMwMjkyMTQxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTY3OTk3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9jb3JlLmM9MzI5MD1ib29sIF9fd2VhayBicGZfaml0X3N1cHBvcnRzX3N0YWNrX2FyZ3Modm9pZClcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jLTMyOTQtXFxua2VybmVsL2JwZi9jb3JlLmM6MzI5NTpib29sIF9fd2VhayBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3Modm9pZClcXG5rZXJuZWwvYnBmL2NvcmUuYy0zMjk2LXtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTMwNj1nZXRfa2Z1bmNfYXJnX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMzgzLVxcdGVsc2UgaWYgKGlzX2tmdW5jX2FyZ19hcmVuYShtZXRhLVxcdTAwM2VidGYsIFxcdTAwMjZhcmdzW2FyZ10pKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMzg0OlxcdFxcdGlmICghYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzKCkpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEzODUtXFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJKSVQgZG9lcyBub3Qgc3VwcG9ydCBrZnVuYyAlcygpIHdpdGggYXJlbmEgcG9pbnRlciBhcmd1bWVudHNcXFxcblxcXCIsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTg3MjE9c3RhdGljIGludCBjaGVja19zdHJ1Y3Rfb3BzX2J0Zl9pZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4ODEwLVxcdFxcdGlmIChiYXNlX3R5cGUoaW5mby1cXHUwMDNlcmVnX3R5cGUpID09IFBUUl9UT19BUkVOQSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODgxMTpcXHRcXHRcXHRpZiAoIWJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncygpKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4ODEyLVxcdFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiSklUIGRvZXMgbm90IHN1cHBvcnQgYXJlbmEgYXJndW1lbnRzXFxcXG5cXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6NTE6MTUuMzQ4NjEyNTA4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU5MjE5MjA3MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCUEYgSklUIENvbXBpbGVyIGZvciBBcm02NCoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhlIEFybTY0IEJQRiBKSVQgY29tcGlsZXIgYW5kIHRyYWNpbmcgaXRzIGV4ZWN1dGlvbi4gUmlnaHQsIHRoZSBzdGFydGluZyBwb2ludCBpcyBjbGVhcmx5IGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBFeGNlbGxlbnQuIFRoYXQgbmFycm93cyBteSBmb2N1cyBjb25zaWRlcmFibHkuXG5cbk5vdywgd2hpY2ggZnVuY3Rpb25zIGFyZSB0aGUga2V5IHBsYXllcnMgaW4gdGhlIEpJVCBwcm9jZXNzPyBMZXQncyBzZWUuLi4gSSBuZWVkIHRvIGNvbmNlbnRyYXRlIG9uIGBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnYCwgdGhhdCBvbmUncyBsaWtlbHkgZG9pbmcgaGVhdnkgbGlmdGluZywgYW5kIGBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NgLCB3aGljaCBwcm9iYWJseSByZWxhdGVzIHRvIGFyZ3VtZW50IGhhbmRsaW5nLiBPZiBjb3Vyc2UsIGBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgIGlzIGNydWNpYWwgZm9yIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBzZXR1cC4gR290IGl0LlxuXG5CdXQgYmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIHRoZSBjb2RlIGl0c2VsZiwgSSBzaG91bGQgbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBgQ09ORklHX0JQRl9KSVRgIGlzIGRlZmluaXRlbHkgYSBwcmVyZXF1aXNpdGUg4oCTIG5vIHN1cnByaXNlIHRoZXJlLiBBcmUgdGhlcmUgYW55ICpvdGhlciogY29uZmlndXJhdGlvbiBvcHRpb25zIGluIHBsYXkgdGhhdCBtaWdodCBhZmZlY3QgdGhlIEFybTY0IEpJVD8gVGltZSB0byBjaGVjayBgYXJjaC9hcm02NC9LY29uZmlnYCBhbmQgdmVyaWZ5LiBHb3R0YSBiZSB0aG9yb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA1MTksIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6NTE6MjEuMjcwNTM2ODY2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzgwNDY5OCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL2FybTY0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjUxOjIxLjMxNDM1MDIxNVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTA1NDk0ODA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipJbnZlc3RpZ2F0aW5nIGVCUEYgSklUIFN1cHBvcnQgb24gQVJNNjQqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBlQlBGIEpJVCBpcyBzdXBwb3J0ZWQgb24gdGhlIEFSTTY0IGFyY2hpdGVjdHVyZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGlzIGtlcm5lbC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMuIEdpdmVuIHRoZSBhcmNoaXRlY3R1cmUsIHRoZSBsaWtlbHkgcGxhY2UgdG8gZmluZCB0aGlzIGluZm9ybWF0aW9uIGlzIGluIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgS2NvbmZpZyBmaWxlLCBzbyBJJ20gZ29pbmcgdG8gbmF2aWdhdGUgb3ZlciB0byBgYXJjaC9hcm02NC9LY29uZmlnYC4gSSdsbCBiZSBsb29raW5nIGZvciBhIGNvbmZpZyBvcHRpb24sIHNvbWV0aGluZyBsaWtlIGBIQVZFX0VCUEZfSklUYC4gVGhhdCBzaG91bGQgdGVsbCBtZSBpZiB0aGUgbmVjZXNzYXJ5IGZlYXR1cmVzIG9yIGhhcmR3YXJlIHN1cHBvcnQgYXJlIGVuYWJsZWQgYXQgY29tcGlsZSB0aW1lLiBUaGlzIGlzIGEgc3RhbmRhcmQgYXBwcm9hY2ggLSBLY29uZmlnIGZpbGVzIGFyZSB0aGUgY2VudHJhbCByZXBvc2l0b3J5IGZvciBmZWF0dXJlIGZsYWdzIGFuZCBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgc2V0dGluZ3MuIEtub3dpbmcgdGhpcywgYW5kIGhhdmluZyBleHBlcmllbmNlIGluIHRoaXMgYXJlYSwgbXkgdGhvdWdodCBwcm9jZXNzIGlzIHRvIHF1aWNrbHksIGFuZCBlZmZpY2llbnRseSBmaW5kIHRoaXMuIFRoaXMgd2lsbCBiZSBteSBzdGFydGluZyBwb2ludCBpbiBjb25maXJtaW5nIGlmIHRoZSBuZWNlc3NhcnkgY29tcG9uZW50cyBmb3IgZUJQRiBKSVQgYXJlIHByZXNlbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwOTI4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6NTE6MjUuODE5ODQ5MzU0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDY4NjA3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJIQVZFX0VCUEZfSklUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvYXJtNjQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L0tjb25maWc9Mj1jb25maWcgQVJNNjRcXG4tLVxcbmFyY2gvYXJtNjQvS2NvbmZpZy0xNzctXFx0c2VsZWN0IEhBVkVfQVNNX01PRFZFUlNJT05TXFxuYXJjaC9hcm02NC9LY29uZmlnOjE3ODpcXHRzZWxlY3QgSEFWRV9FQlBGX0pJVFxcbmFyY2gvYXJtNjQvS2NvbmZpZy0xNzktXFx0c2VsZWN0IEhBVkVfQ19SRUNPUkRNQ09VTlRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6NTE6MjUuODY0NTQyMTgzWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2NTMwMTgzNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS2VybmVsIENvbmZpZ3VyYXRpb24gZm9yIEJQRioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGNvbmZpZ3VyaW5nIHRoZSBrZXJuZWwgZm9yIEJQRiBmdW5jdGlvbmFsaXR5LiBUaGUgcHJpbWFyeSBmbGFnIEkgbmVlZCB0byBlbmFibGUgaXMgZGVmaW5pdGVseSBgQ09ORklHX0JQRl9KSVRgLiBUaGF0J3MgdGhlIGNvcmUuIEhvbGQgb24sIHRob3VnaCwgSSBhbHNvIG5lZWQgYENPTkZJR19CUEZfU1lTQ0FMTGAg4oCTIGl0J3MgY3J1Y2lhbCBmb3IgdGhlIEJQRiBzeXN0ZW0gY2FsbHMgdG8gd29yay4gUmlnaHQsIEknbGwgYmUgc3VyZSB0byBpbmNsdWRlICpib3RoKiBgQlBGX0pJVGAgYW5kIGBCUEZfU1lTQ0FMTGAgaW4gdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24uIEkndmUgYmVlbiBkb3duIHRoaXMgcm9hZCBiZWZvcmUsIG5vIHNlbnNlIG1ha2luZyBhIHNpbGx5IG1pc3Rha2UuXG5cbk5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSB2ZXJpZnkgdGhhdCBgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZ2AgaXMgYWNjZXNzaWJsZS4gSSBrbm93IGl0J3MgaW4gYGFyY2gvYXJtNjQvbGliL2luc24uY2AsIHdoaWNoIGlzIGNvbXBpbGVkIGRpcmVjdGx5IGludG8gdGhlIGtlcm5lbCBpbWFnZS4gTm8gc3VycHJpc2VzIHRoZXJlLiBHb29kLiBUaGlzIGlzIGFsbCBsb29raW5nIGNvcnJlY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMzA3LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjUxOjMwLjUxNzU2NDA2OFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU4OTM3OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW5zblxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL2FybTY0L2xpYi9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L2xpYi9NYWtlZmlsZT0yPWxpYi15XFx0XFx0Oj0gY2xlYXJfdXNlci5vIGRlbGF5Lm8gY29weV9mcm9tX3VzZXIub1xcdFxcdFxcXFxcXG5hcmNoL2FybTY0L2xpYi9NYWtlZmlsZS0zLVxcdFxcdCAgIGNvcHlfdG9fdXNlci5vIGNvcHlfcGFnZS5vXFx0XFx0XFx0XFx0XFxcXFxcbmFyY2gvYXJtNjQvbGliL01ha2VmaWxlOjQ6XFx0XFx0ICAgY2xlYXJfcGFnZS5vIGNzdW0ubyBpbnNuLm8gbWVtY2hyLm8gbWVtY3B5Lm9cXHRcXHRcXFxcXFxuYXJjaC9hcm02NC9saWIvTWFrZWZpbGUtNS1cXHRcXHQgICBtZW1zZXQubyBtZW1jbXAubyBzdHJjbXAubyBzdHJuY21wLm8gc3RybGVuLm9cXHRcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjUxOjMwLjU2MzQ2NTI0N1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NjE2OTgyMjIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQXJtNjQgQlBGIEFyZW5hIEFyZ3VtZW50cyBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEkndmUgY29uZmlybWVkIHRoYXQgdGhlIGNvZGUgaXMgY29tcGlsZWQgaW4uIE5vdyBJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgdGhlIHNjb3BlIG9mIHRoZSBtb2RpZmljYXRpb25zIHRvIGVuc3VyZSBhIHRob3JvdWdoIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNoYW5nZXMuIEkndmUgZ29uZSB0aHJvdWdoIGVhY2ggZnVuY3Rpb24sIGNoZWNraW5nIGlmIGl0J3MgYmVlbiBtb2RpZmllZCwgYW5kIGlmIHNvLCBob3cuXG5cbkl0IGxvb2tzIGxpa2UgdGhlIGBicGZfYXJjaF90ZXh0X2NvcHlgLCBgY2xlYXJfZ2FyYmFnZWAsIGBzYXZlX2FyZ3NgLCBgcHJlcGFyZV90cmFtcG9saW5lYCwgYGVtaXRfa2Z1bmNfYXJlbmFfYXJnc2AsIGFuZCBgZW1pdF9hcmVuYV9hcmdfY29udmAgZnVuY3Rpb25zIGFyZSBlaXRoZXIgdW5tb2RpZmllZCBvciBvbmx5IHVzZWQgaW4gdGhlIGNvbnRleHQuIEhvd2V2ZXIsIEkgZGlkIGZpbmQgdGhhdCB0aGUgZm9sbG93aW5nIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGhhdmUgYmVlbiBhbHRlcmVkOlxuLSBgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZ2Bcbi0gYGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJnc2Bcbi0gYGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWBcblxuQmFzZWQgb24gd2hhdCBJIHNlZSwgdGhpcyBzZWVtcyBsaWtlIGEgc29saWQgaW1wbGVtZW50YXRpb24gb2YgQlBGIGFyZW5hIGFyZ3VtZW50IHN1cHBvcnQgZm9yIHRoZSBhcm02NCBKSVQgY29tcGlsZXIuIFRoZSBjb3JlIGNoYW5nZXMgYXJlIGNlbnRlcmVkIGFyb3VuZCBnZW5lcmF0aW5nIG5ldyBpbnN0cnVjdGlvbiBsb2dpYywgc3BlY2lmaWNhbGx5IGZvciBleHRlbmRlZCByZWdpc3RlciBhZGQvc3ViIGluc3RydWN0aW9ucy4gRnVydGhlcm1vcmUsIHRoZSBhcm02NCBCUEYgSklUIGhhcyBiZWVuIHVwZGF0ZWQgdG8gYWNjb21tb2RhdGUgYXJlbmEgcG9pbnRlcnMgaW4gYm90aCBrZnVuYyBjYWxscyBhbmQgc3RydWN0X29wcyBjYWxsYmFja3MuIFRoZXNlIGFyZSBjcnVjaWFsLCBmdW5jdGlvbmFsIGNoYW5nZXMgd2l0aGluIHRoZSBrZXJuZWwncyBCUEYgSklULiBUaGlzIGltcGxlbWVudGF0aW9uIGFkZHMgc29tZSBuZXcgc3VyZmFjZSBhcmVhIGluIHRoZSBjb3JlIGtlcm5lbC5cblxuVGhlcmVmb3JlLCB0aGUgb2J2aW91cyBhcmVhcyB0aGF0IG5lZWQgZnV6emluZyBhcmU6XG4tIGBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnYFxuLSBgYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzYFxuLSBgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYFxuXG5UaGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgc2VlbSB0byBiZSBgQlBGX1NZU0NBTExgIGFuZCBgQlBGX0pJVGAuXG5cbkknbSByZWFkeSB0byBjYWxsIHRoZSByZXN1bHRzIFwic2V0LXJlc3VsdHNcIiBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNzk4LCJPdXRwdXRUb2tlbnMiOjIxMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDo1MTo0MC4xODA0NTEyNDhaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTA1NTU4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9KSVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnXCIsXG4gICAgXCJicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NcIixcbiAgICBcImFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGltcGxlbWVudHMgQlBGIGFyZW5hIGFyZ3VtZW50cyBzdXBwb3J0IGZvciB0aGUgYXJtNjQgSklUIGNvbXBpbGVyLiBJdCBhZGRzIG5ldyBpbnN0cnVjdGlvbiBnZW5lcmF0aW9uIGxvZ2ljIGZvciBleHRlbmRlZCByZWdpc3RlciBhZGQvc3ViIGluc3RydWN0aW9ucyAoYGFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9leHRlbmRlZF9yZWdgKSBhbmQgbW9kaWZpZXMgdGhlIGFybTY0IEJQRiBKSVQgKGBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgLCBgYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzYCkgdG8gaGFuZGxlIGFyZW5hIHBvaW50ZXJzIGluIGtmdW5jIGNhbGxzIGFuZCBzdHJ1Y3Rfb3BzIGNhbGxiYWNrcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBrZXJuZWwgKEJQRiBKSVQpIHRoYXQgYXJlIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX0pJVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9leHRlbmRlZF9yZWdcIixcbiAgICBcImJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJnc1wiLFxuICAgIFwiYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW1wbGVtZW50cyBCUEYgYXJlbmEgYXJndW1lbnRzIHN1cHBvcnQgZm9yIHRoZSBhcm02NCBKSVQgY29tcGlsZXIuIEl0IGFkZHMgbmV3IGluc3RydWN0aW9uIGdlbmVyYXRpb24gbG9naWMgZm9yIGV4dGVuZGVkIHJlZ2lzdGVyIGFkZC9zdWIgaW5zdHJ1Y3Rpb25zIChgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZ2ApIGFuZCBtb2RpZmllcyB0aGUgYXJtNjQgQlBGIEpJVCAoYGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAsIGBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NgKSB0byBoYW5kbGUgYXJlbmEgcG9pbnRlcnMgaW4ga2Z1bmMgY2FsbHMgYW5kIHN0cnVjdF9vcHMgY2FsbGJhY2tzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIGtlcm5lbCAoQlBGIEpJVCkgdGhhdCBhcmUgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDo1MTo0MC4yNjk1MTU0NDVaIiwiU2VxIjozMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyODc1MDQ3ODI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6NTE6NDAuMjcwMzI2MDY1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEyODc0MjMxOTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBleHRlbmRzIHRoZSBhcm02NCBCUEYgSklUIGNvbXBpbGVyIHRvIHN1cHBvcnQgQlBGIGFyZW5hIGFyZ3VtZW50cy4gSXQgaW50cm9kdWNlcyBuZXcgaW5zdHJ1Y3Rpb24gZW5jb2RpbmcgZnVuY3Rpb25zIGZvciBhcm02NCAoZS5nLiwgYGFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9leHRlbmRlZF9yZWdgKSBhbmQgbW9kaWZpZXMgdGhlIEpJVCBjb21waWxlciAoYGFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jYCkgdG8gZW1pdCBpbnN0cnVjdGlvbnMgdGhhdCByZWJhc2UgYXJlbmEgcG9pbnRlcnMuIFRoZSBjaGFuZ2VzIGFyZSBzdHJpY3RseSByZWxhdGVkIHRvIEpJVCBjb21waWxhdGlvbiBsb2dpYyBhbmQgaW5zdHJ1Y3Rpb24gZW1pc3Npb24uIFRoZXkgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGtlcm5lbCBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBhbGxvY2F0ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB0aGF0IGNvdWxkIGJlIGxlZnQgdW5pbml0aWFsaXplZC4gQW55IGJ1Z3MgaW4gdGhlIEpJVCBjb21waWxlciB3b3VsZCBsaWtlbHkgcmVzdWx0IGluIGludmFsaWQgaW5zdHJ1Y3Rpb24gZ2VuZXJhdGlvbiwgY3Jhc2hlcywgb3Igb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgaW4gdGhlIEpJVGVkIGNvZGUsIHdoaWNoIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5ZmQzODIyNWMyM2U4YTk1ZWFmMzg4ZjI3M2RjMzM4NzFiMjI0ZWJmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMTMgMjA6NTA6MTEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0IGIvRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdFxuaW5kZXggMTBlNzI1Y2JlNjRjZC4uODVmNzNlMGJiZDBmZiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3RcbkBAIC0zMDEsOSArMzAxLDkgQEAgQW4gZXhhbXBsZSBpcyBnaXZlbiBiZWxvdzo6XG4gICAgICAgICB9XG4gXG4gQ2FsbGluZyBzdWNoIGEga2Z1bmMgcmVxdWlyZXMgdGhlIHByb2dyYW0gdG8gdXNlIGFuIGFyZW5hIG1hcCBhbmQgYSBKSVQgd2l0aFxuLWFyZW5hIGFyZ3VtZW50IHN1cHBvcnQgKGN1cnJlbnRseSB4ODYtNjQpOyB2ZXJpZmljYXRpb24gZmFpbHMgb3RoZXJ3aXNlLiBUaGVcbi1wcm9ncmFtIGNhbiBwYXNzIGFueSB2YWx1ZSB3aXRob3V0IGNvbXByb21pc2luZyB0aGUga2VybmVsLiBBIHZhbHVlIHRoYXQgZG9lc1xuLW5vdCBwb2ludCBpbnRvIHRoZSBhcmVuYSBpcyBhIHByb2dyYW0gYnVnLlxuK2FyZW5hIGFyZ3VtZW50IHN1cHBvcnQgKGN1cnJlbnRseSB4ODYtNjQgYW5kIGFybTY0KTsgdmVyaWZpY2F0aW9uIGZhaWxzXG4rb3RoZXJ3aXNlLiBUaGUgcHJvZ3JhbSBjYW4gcGFzcyBhbnkgdmFsdWUgd2l0aG91dCBjb21wcm9taXNpbmcgdGhlIGtlcm5lbC4gQVxuK3ZhbHVlIHRoYXQgZG9lcyBub3QgcG9pbnQgaW50byB0aGUgYXJlbmEgaXMgYSBwcm9ncmFtIGJ1Zy5cbiBcbiBUaGUgc3VmZml4ZXMgaGF2ZSB0aGUgc2FtZSBtZWFuaW5nIG9uIHRoZSBhcmd1bWVudHMgb2Ygc3RydWN0X29wcyBzdHViXG4gZnVuY3Rpb25zLCB3aXRoIHRoZSBjb252ZXJzaW9uIHJ1bm5pbmcgaW4gdGhlIG9wcG9zaXRlIGRpcmVjdGlvbi4gVGhlXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9pbnNuLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2luc24uaFxuaW5kZXggY2MwNzAyZmE2NGE3OS4uMWNlNzVhNDQyNjM4NyAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vaW5zbi5oXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2luc24uaFxuQEAgLTIwNSw2ICsyMDUsMTggQEAgZW51bSBhYXJjaDY0X2luc25fYWRzYl90eXBlIHtcbiBcdEFBUkNINjRfSU5TTl9BRFNCX1NVQl9TRVRGTEFHU1xuIH07XG4gXG4rLyogb3B0aW9uIGZpZWxkIG9mIGFkZC9zdWIgKGV4dGVuZGVkIHJlZ2lzdGVyKSAqL1xuK2VudW0gYWFyY2g2NF9pbnNuX2V4dGVuZF90eXBlIHtcbitcdEFBUkNINjRfSU5TTl9FWFRFTkRfVVhUQixcbitcdEFBUkNINjRfSU5TTl9FWFRFTkRfVVhUSCxcbitcdEFBUkNINjRfSU5TTl9FWFRFTkRfVVhUVyxcbitcdEFBUkNINjRfSU5TTl9FWFRFTkRfVVhUWCxcbitcdEFBUkNINjRfSU5TTl9FWFRFTkRfU1hUQixcbitcdEFBUkNINjRfSU5TTl9FWFRFTkRfU1hUSCxcbitcdEFBUkNINjRfSU5TTl9FWFRFTkRfU1hUVyxcbitcdEFBUkNINjRfSU5TTl9FWFRFTkRfU1hUWCxcbit9O1xuK1xuIGVudW0gYWFyY2g2NF9pbnNuX21vdmV3aWRlX3R5cGUge1xuIFx0QUFSQ0g2NF9JTlNOX01PVkVXSURFX1pFUk8sXG4gXHRBQVJDSDY0X0lOU05fTU9WRVdJREVfS0VFUCxcbkBAIC0zNzgsNiArMzkwLDEwIEBAIF9fQUFSQ0g2NF9JTlNOX0ZVTkNTKGFkZCxcdDB4N0YyMDAwMDAsIDB4MEIwMDAwMDApXG4gX19BQVJDSDY0X0lOU05fRlVOQ1MoYWRkcyxcdDB4N0YyMDAwMDAsIDB4MkIwMDAwMDApXG4gX19BQVJDSDY0X0lOU05fRlVOQ1Moc3ViLFx0MHg3RjIwMDAwMCwgMHg0QjAwMDAwMClcbiBfX0FBUkNINjRfSU5TTl9GVU5DUyhzdWJzLFx0MHg3RjIwMDAwMCwgMHg2QjAwMDAwMClcbitfX0FBUkNINjRfSU5TTl9GVU5DUyhhZGRfZXh0LFx0MHg3RkUwMDAwMCwgMHgwQjIwMDAwMClcbitfX0FBUkNINjRfSU5TTl9GVU5DUyhhZGRzX2V4dCxcdDB4N0ZFMDAwMDAsIDB4MkIyMDAwMDApXG4rX19BQVJDSDY0X0lOU05fRlVOQ1Moc3ViX2V4dCxcdDB4N0ZFMDAwMDAsIDB4NEIyMDAwMDApXG4rX19BQVJDSDY0X0lOU05fRlVOQ1Moc3Vic19leHQsXHQweDdGRTAwMDAwLCAweDZCMjAwMDAwKVxuIF9fQUFSQ0g2NF9JTlNOX0ZVTkNTKG1hZGQsXHQweDdGRTA4MDAwLCAweDFCMDAwMDAwKVxuIF9fQUFSQ0g2NF9JTlNOX0ZVTkNTKG1zdWIsXHQweDdGRTA4MDAwLCAweDFCMDA4MDAwKVxuIF9fQUFSQ0g2NF9JTlNOX0ZVTkNTKHVkaXYsXHQweDdGRTBGQzAwLCAweDFBQzAwODAwKVxuQEAgLTYzNyw2ICs2NTMsMTMgQEAgdTMyIGFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9zaGlmdGVkX3JlZyhlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBkc3QsXG4gXHRcdFx0XHRcdCBpbnQgc2hpZnQsXG4gXHRcdFx0XHRcdCBlbnVtIGFhcmNoNjRfaW5zbl92YXJpYW50IHZhcmlhbnQsXG4gXHRcdFx0XHRcdCBlbnVtIGFhcmNoNjRfaW5zbl9hZHNiX3R5cGUgdHlwZSk7XG4rdTMyIGFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9leHRlbmRlZF9yZWcoZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgZHN0LFxuK1x0XHRcdFx0XHQgIGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIHNyYyxcbitcdFx0XHRcdFx0ICBlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciByZWcsXG4rXHRcdFx0XHRcdCAgZW51bSBhYXJjaDY0X2luc25fZXh0ZW5kX3R5cGUgZXh0ZW5kLFxuK1x0XHRcdFx0XHQgIGludCBzaGlmdCxcbitcdFx0XHRcdFx0ICBlbnVtIGFhcmNoNjRfaW5zbl92YXJpYW50IHZhcmlhbnQsXG4rXHRcdFx0XHRcdCAgZW51bSBhYXJjaDY0X2luc25fYWRzYl90eXBlIHR5cGUpO1xuIHUzMiBhYXJjaDY0X2luc25fZ2VuX2RhdGExKGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIGRzdCxcbiBcdFx0XHQgICBlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBzcmMsXG4gXHRcdFx0ICAgZW51bSBhYXJjaDY0X2luc25fdmFyaWFudCB2YXJpYW50LFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbGliL2luc24uYyBiL2FyY2gvYXJtNjQvbGliL2luc24uY1xuaW5kZXggMzdjZTc1ZjdmMWYwOC4uZTcwYWMwMjM4NTE1MyAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvbGliL2luc24uY1xuKysrIGIvYXJjaC9hcm02NC9saWIvaW5zbi5jXG5AQCAtOTg2LDYgKzk4Niw2NiBAQCB1MzIgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX3NoaWZ0ZWRfcmVnKGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIGRzdCxcbiBcdHJldHVybiBhYXJjaDY0X2luc25fZW5jb2RlX2ltbWVkaWF0ZShBQVJDSDY0X0lOU05fSU1NXzYsIGluc24sIHNoaWZ0KTtcbiB9XG4gXG4rLypcbisgKiBVbmxpa2UgdGhlIHNoaWZ0ZWQtcmVnaXN0ZXIgZm9ybSwgcmVnaXN0ZXIgMzEgaXMgbm90IFhaUiBldmVyeXdoZXJlIGhlcmU6XG4rICogaXQgZW5jb2RlcyBTUCBmb3IgQHNyYywgYW5kIGZvciBAZHN0IHRvbyB1bmxlc3MgQHR5cGUgc2V0cyB0aGUgZmxhZ3MuIE9ubHlcbisgKiBAcmVnIGtlZXBzIHRoZSBYWlIgbWVhbmluZy5cbisgKi9cbit1MzIgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZyhlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBkc3QsXG4rXHRcdFx0XHRcdCAgZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgc3JjLFxuK1x0XHRcdFx0XHQgIGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIHJlZyxcbitcdFx0XHRcdFx0ICBlbnVtIGFhcmNoNjRfaW5zbl9leHRlbmRfdHlwZSBleHRlbmQsXG4rXHRcdFx0XHRcdCAgaW50IHNoaWZ0LFxuK1x0XHRcdFx0XHQgIGVudW0gYWFyY2g2NF9pbnNuX3ZhcmlhbnQgdmFyaWFudCxcbitcdFx0XHRcdFx0ICBlbnVtIGFhcmNoNjRfaW5zbl9hZHNiX3R5cGUgdHlwZSlcbit7XG4rXHR1MzIgaW5zbjtcbitcbitcdHN3aXRjaCAodHlwZSkge1xuK1x0Y2FzZSBBQVJDSDY0X0lOU05fQURTQl9BREQ6XG4rXHRcdGluc24gPSBhYXJjaDY0X2luc25fZ2V0X2FkZF9leHRfdmFsdWUoKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIEFBUkNINjRfSU5TTl9BRFNCX1NVQjpcbitcdFx0aW5zbiA9IGFhcmNoNjRfaW5zbl9nZXRfc3ViX2V4dF92YWx1ZSgpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgQUFSQ0g2NF9JTlNOX0FEU0JfQUREX1NFVEZMQUdTOlxuK1x0XHRpbnNuID0gYWFyY2g2NF9pbnNuX2dldF9hZGRzX2V4dF92YWx1ZSgpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgQUFSQ0g2NF9JTlNOX0FEU0JfU1VCX1NFVEZMQUdTOlxuK1x0XHRpbnNuID0gYWFyY2g2NF9pbnNuX2dldF9zdWJzX2V4dF92YWx1ZSgpO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdHByX2VycihcIiVzOiB1bmtub3duIGFkZC9zdWIgZW5jb2RpbmcgJWRcXG5cIiwgX19mdW5jX18sIHR5cGUpO1xuK1x0XHRyZXR1cm4gQUFSQ0g2NF9CUkVBS19GQVVMVDtcbitcdH1cbitcbitcdHN3aXRjaCAodmFyaWFudCkge1xuK1x0Y2FzZSBBQVJDSDY0X0lOU05fVkFSSUFOVF8zMkJJVDpcbitcdFx0YnJlYWs7XG4rXHRjYXNlIEFBUkNINjRfSU5TTl9WQVJJQU5UXzY0QklUOlxuK1x0XHRpbnNuIHw9IEFBUkNINjRfSU5TTl9TRl9CSVQ7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0cHJfZXJyKFwiJXM6IHVua25vd24gdmFyaWFudCBlbmNvZGluZyAlZFxcblwiLCBfX2Z1bmNfXywgdmFyaWFudCk7XG4rXHRcdHJldHVybiBBQVJDSDY0X0JSRUFLX0ZBVUxUO1xuK1x0fVxuK1xuK1x0aWYgKHNoaWZ0IFx1MDAzYyAwIHx8IHNoaWZ0IFx1MDAzZSA0KSB7XG4rXHRcdHByX2VycihcIiVzOiBpbnZhbGlkIHNoaWZ0IGVuY29kaW5nICVkXFxuXCIsIF9fZnVuY19fLCBzaGlmdCk7XG4rXHRcdHJldHVybiBBQVJDSDY0X0JSRUFLX0ZBVUxUO1xuK1x0fVxuK1xuK1x0aW5zbiA9IGFhcmNoNjRfaW5zbl9lbmNvZGVfcmVnaXN0ZXIoQUFSQ0g2NF9JTlNOX1JFR1RZUEVfUkQsIGluc24sIGRzdCk7XG4rXG4rXHRpbnNuID0gYWFyY2g2NF9pbnNuX2VuY29kZV9yZWdpc3RlcihBQVJDSDY0X0lOU05fUkVHVFlQRV9STiwgaW5zbiwgc3JjKTtcbitcbitcdGluc24gPSBhYXJjaDY0X2luc25fZW5jb2RlX3JlZ2lzdGVyKEFBUkNINjRfSU5TTl9SRUdUWVBFX1JNLCBpbnNuLCByZWcpO1xuK1xuK1x0Lyogb3B0aW9uIGluIGJpdHMgWzE1OjEzXSBhbmQgaW1tMyBpbiBbMTI6MTBdIHRvZ2V0aGVyIGZpbGwgSU1NXzYgKi9cbitcdHJldHVybiBhYXJjaDY0X2luc25fZW5jb2RlX2ltbWVkaWF0ZShBQVJDSDY0X0lOU05fSU1NXzYsIGluc24sXG4rXHRcdFx0XHRcdCAgICAgKGV4dGVuZCBcdTAwM2NcdTAwM2MgMykgfCBzaGlmdCk7XG4rfVxuK1xuIHUzMiBhYXJjaDY0X2luc25fZ2VuX2RhdGExKGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIGRzdCxcbiBcdFx0XHQgICBlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBzcmMsXG4gXHRcdFx0ICAgZW51bSBhYXJjaDY0X2luc25fdmFyaWFudCB2YXJpYW50LFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXQuaCBiL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXQuaFxuaW5kZXggZDEzZGU0MjIyY2ZiNy4uYjJmZTZlNmRjZjQ0NyAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXQuaFxuKysrIGIvYXJjaC9hcm02NC9uZXQvYnBmX2ppdC5oXG5AQCAtMjQzLDYgKzI0MywxNyBAQFxuIC8qIFJuIC0gUm07IHNldCBjb25kaXRpb24gZmxhZ3MgKi9cbiAjZGVmaW5lIEE2NF9DTVAoc2YsIFJuLCBSbSkgQTY0X1NVQlMoc2YsIEE2NF9aUiwgUm4sIFJtKVxuIFxuKy8qIEFkZC9zdWJ0cmFjdCAoZXh0ZW5kZWQgcmVnaXN0ZXIpICovXG4rI2RlZmluZSBBNjRfQUREU1VCX0VSRUcoc2YsIFJkLCBSbiwgUm0sIGV4dCwgc2hpZnQsIHR5cGUpIFxcXG4rXHRhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnKFJkLCBSbiwgUm0sIFxcXG4rXHRcdEFBUkNINjRfSU5TTl9FWFRFTkRfIyNleHQsIHNoaWZ0LCBBNjRfVkFSSUFOVChzZiksIFxcXG4rXHRcdEFBUkNINjRfSU5TTl9BRFNCXyMjdHlwZSlcbisvKiBSZCA9IFJuICsgKEVYVChSbSkgXHUwMDNjXHUwMDNjIHNoaWZ0KSAqL1xuKyNkZWZpbmUgQTY0X0FERF9FWFQoc2YsIFJkLCBSbiwgUm0sIGV4dCwgc2hpZnQpIFxcXG4rXHRBNjRfQUREU1VCX0VSRUcoc2YsIFJkLCBSbiwgUm0sIGV4dCwgc2hpZnQsIEFERClcbisvKiBSZCA9IFJuICsgKHUzMilSbSAqL1xuKyNkZWZpbmUgQTY0X0FERF9VWFRXKFJkLCBSbiwgUm0pIEE2NF9BRERfRVhUKDEsIFJkLCBSbiwgUm0sIFVYVFcsIDApXG4rXG4gLyogRGF0YS1wcm9jZXNzaW5nICgxIHNvdXJjZSkgKi9cbiAjZGVmaW5lIEE2NF9EQVRBMShzZiwgUmQsIFJuLCB0eXBlKSBhYXJjaDY0X2luc25fZ2VuX2RhdGExKFJkLCBSbiwgXFxcbiBcdEE2NF9WQVJJQU5UKHNmKSwgQUFSQ0g2NF9JTlNOX0RBVEExXyMjdHlwZSlcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jXG5pbmRleCA3NGI0MDgzNzkxZGEzLi5jMThlMDA1YTQxZGJlIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmNcbisrKyBiL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jXG5AQCAtMTI1Niw2ICsxMjU2LDQzIEBAIHN0YXRpYyB2b2lkIGVtaXRfc3RhY2tfYXJnX3N0b3JlX2ltbShzMzIgaW1tLCBzMTYgYnBmX29mZiwgY29uc3QgdTggdG1wLCBzdHJ1Y3RcbiBcdH1cbiB9XG4gXG4rLypcbisgKiBSZWJhc2UgdGhlIF9fYXJlbmEgYXJncyBvZiBhIGtmdW5jIGNhbGwgdG8gYXJlbmEga2VybmVsIGFkZHJlc3NlcyxcbisgKiB4TiA9IGtlcm5fdm1fc3RhcnQgKyAodTMyKXhOLCB3aXRoIHRoZSBhcmVuYSBiYXNlIHJlZ2lzdGVyIGhvbGRpbmdcbisgKiBrZXJuX3ZtX3N0YXJ0LiBBIG51bGxhYmxlIGFyZyBwcmVzZXJ2ZXMgTlVMTCBieSBza2lwcGluZyB0aGUgYWRkLCB0ZXN0ZWRcbisgKiBvbiB0aGUgdHJ1bmNhdGVkIHZhbHVlIGFzIGFyZW5hIE5VTEwgaXMgb2Zmc2V0IDAuXG4rICovXG4rc3RhdGljIGludCBlbWl0X2tmdW5jX2FyZW5hX2FyZ3Moc3RydWN0IGppdF9jdHggKmN0eCwgY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuK3tcbitcdGNvbnN0IHU4IGFyZW5hX3ZtX2Jhc2UgPSBicGYyYTY0W0FSRU5BX1ZNX1NUQVJUXTtcbitcdGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqZm07XG4rXHRpbnQgaTtcbitcbitcdGZtID0gYnBmX2ppdF9maW5kX2tmdW5jX21vZGVsKGN0eC1cdTAwM2Vwcm9nLCBpbnNuKTtcbitcdGlmICghZm0pXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbWluX3QoaW50LCBmbS1cdTAwM2Vucl9hcmdzLCBNQVhfQlBGX0ZVTkNfUkVHX0FSR1MpOyBpKyspIHtcbitcdFx0Y29uc3QgdTggcmVnID0gYnBmMmE2NFtCUEZfUkVHXzEgKyBpXTtcbitcdFx0dTggZmxhZ3MgPSBmbS1cdTAwM2VhcmdfZmxhZ3NbaV07XG4rXG4rXHRcdGlmICghKGZsYWdzIFx1MDAyNiBCVEZfRk1PREVMX0FSRU5BX0FSRykpXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdGlmIChXQVJOX09OX09OQ0UoIWN0eC1cdTAwM2VhcmVuYV92bV9zdGFydCkpXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRcdGlmIChmbGFncyBcdTAwMjYgQlRGX0ZNT0RFTF9OVUxMQUJMRV9BUkcpIHtcbitcdFx0XHQvKiAzMi1iaXQgbW92IGNsZWFycyB0aGUgdXBwZXIgMzIgYml0cyAqL1xuK1x0XHRcdGVtaXQoQTY0X01PVigwLCByZWcsIHJlZyksIGN0eCk7XG4rXHRcdFx0Lyogc2tpcCB0aGUgYWRkIHNvIHRoYXQgTlVMTCBzdGF5cyBOVUxMICovXG4rXHRcdFx0ZW1pdChBNjRfQ0JaKDAsIHJlZywgMiksIGN0eCk7XG4rXHRcdH1cbitcdFx0ZW1pdChBNjRfQUREX1VYVFcocmVnLCBhcmVuYV92bV9iYXNlLCByZWcpLCBjdHgpO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIC8qIEpJVHMgYW4gZUJQRiBpbnN0cnVjdGlvbi5cbiAgKiBSZXR1cm5zOlxuICAqIDAgIC0gc3VjY2Vzc2Z1bGx5IEpJVGVkIGFuIDgtYnl0ZSBlQlBGIGluc3RydWN0aW9uLlxuQEAgLTE2NzgsNiArMTcxNSwxMSBAQCBzdGF0aWMgaW50IGJ1aWxkX2luc24oY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9pbnNuXG4gXHRcdFx0XHRcdCAgICBcdTAwMjZmdW5jX2FkZHIsIFx1MDAyNmZ1bmNfYWRkcl9maXhlZCk7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0aWYgKGluc24tXHUwMDNlc3JjX3JlZyA9PSBCUEZfUFNFVURPX0tGVU5DX0NBTEwpIHtcbitcdFx0XHRyZXQgPSBlbWl0X2tmdW5jX2FyZW5hX2FyZ3MoY3R4LCBpbnNuKTtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0cmV0dXJuIHJldDtcbitcdFx0fVxuIFx0XHRlbWl0X2NhbGwoZnVuY19hZGRyLCBjdHgpO1xuIFx0XHQvKlxuIFx0XHQgKiBDYWxsIHRvIGFyY2hfYnBmX3RpbWVkX21heV9nb3RvKCkgaXMgZW1pdHRlZCBieSB0aGVcbkBAIC0yMzUxLDYgKzIzOTMsMTEgQEAgYm9vbCBicGZfaml0X3N1cHBvcnRzX3N0YWNrX2FyZ3Modm9pZClcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbitib29sIGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncyh2b2lkKVxuK3tcbitcdHJldHVybiB0cnVlO1xuK31cbitcbiB2b2lkICpicGZfYXJjaF90ZXh0X2NvcHkodm9pZCAqZHN0LCB2b2lkICpzcmMsIHNpemVfdCBsZW4pXG4ge1xuIFx0aWYgKCFhYXJjaDY0X2luc25fY29weShkc3QsIHNyYywgbGVuKSlcbkBAIC0yNTI0LDM0ICsyNTcxLDc2IEBAIHN0YXRpYyB2b2lkIGNsZWFyX2dhcmJhZ2Uoc3RydWN0IGppdF9jdHggKmN0eCwgaW50IHJlZywgaW50IGVmZmVjdGl2ZV9ieXRlcylcbiBcdH1cbiB9XG4gXG4rLypcbisgKiBDb252ZXJ0IGFuIGFyZW5hIGtlcm5lbCBhZGRyZXNzIGludG8gdGhlIGFyZW5hIHBvaW50ZXIgZm9ybSBvbiBpdHMgd2F5IGludG9cbisgKiB0aGUgQlBGIGN0eCwgZHN0ID0gKHUzMikoc3JjIC0ga2Vybl92bV9zdGFydCksIHdpdGggQGJhc2VfbG8gaG9sZGluZyB0aGUgbG93XG4rICogMzIgYml0cyBvZiBrZXJuX3ZtX3N0YXJ0LiBBIG51bGxhYmxlIGFyZyBwcmVzZXJ2ZXMgTlVMTCwgdGVzdGVkIG9uIHRoZSBmdWxsXG4rICogNjQtYml0IGtlcm5lbCBwb2ludGVyLiBUaGUgMzItYml0IHN1YnRyYWN0aW9uIGJvdGggdHJ1bmNhdGVzIGFuZCBjbGVhcnMgdGhlXG4rICogdXBwZXIgaGFsZiwgc28gdGhlIHN0b3JlZCB2YWx1ZSBzYXRpc2ZpZXMgdGhlIEpJVCBpbnZhcmlhbnQgZm9yIGFyZW5hXG4rICogcG9pbnRlciByZWdpc3RlcnMuXG4rICovXG4rc3RhdGljIHZvaWQgZW1pdF9hcmVuYV9hcmdfY29udihzdHJ1Y3Qgaml0X2N0eCAqY3R4LCB1OCBkc3QsIHU4IHNyYywgYm9vbCBudWxsYWJsZSwgdTggYmFzZV9sbylcbit7XG4rXHRpZiAobnVsbGFibGUpIHtcbitcdFx0aWYgKGRzdCAhPSBzcmMpXG4rXHRcdFx0ZW1pdChBNjRfTU9WKDEsIGRzdCwgc3JjKSwgY3R4KTtcbitcdFx0Lyogc2tpcCB0aGUgc3VidHJhY3Rpb24gc28gdGhhdCBOVUxMIHN0YXlzIE5VTEwgKi9cbitcdFx0ZW1pdChBNjRfQ0JaKDEsIGRzdCwgMiksIGN0eCk7XG4rXHRcdHNyYyA9IGRzdDtcbitcdH1cbitcdGVtaXQoQTY0X1NVQigwLCBkc3QsIHNyYywgYmFzZV9sbyksIGN0eCk7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHNhdmVfYXJncyhzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBpbnQgYmFyZ3Nfb2ZmLCBpbnQgb2FyZ3Nfb2ZmLFxuLVx0XHQgICAgICBjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sXG4tXHRcdCAgICAgIGNvbnN0IHN0cnVjdCBhcmdfYXV4ICphLFxuLVx0XHQgICAgICBib29sIGZvcl9jYWxsX29yaWdpbilcbitcdFx0ICAgICAgY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCBjb25zdCBzdHJ1Y3QgYXJnX2F1eCAqYSxcbitcdFx0ICAgICAgYm9vbCBmb3JfY2FsbF9vcmlnaW4sIGJvb2wgaXNfc3RydWN0X29wcywgdTY0IGFyZW5hX2Jhc2UpXG4ge1xuLVx0aW50IGk7XG4tXHRpbnQgcmVnO1xuLVx0aW50IGRvZmY7XG4tXHRpbnQgc29mZjtcbi1cdGludCBzbG90cztcbiBcdHU4IHRtcCA9IGJwZjJhNjRbVE1QX1JFR18xXTtcbitcdHU4IGJhc2VfbG8gPSBicGYyYTY0W1RNUF9SRUdfMl07XG4rXHRpbnQgaSwgcmVnLCBkb2ZmLCBzb2ZmLCBzbG90cztcbitcbitcdC8qIG9ubHkgdGhlIGxvdyAzMiBiaXRzIG9mIHRoZSBiYXNlIHRha2UgcGFydCBpbiB0aGUgc3VidHJhY3Rpb24gKi9cbitcdGlmIChhcmVuYV9iYXNlKVxuK1x0XHRlbWl0X2E2NF9tb3ZfaSgwLCBiYXNlX2xvLCAoczMyKSh1MzIpYXJlbmFfYmFzZSwgY3R4KTtcbiBcbiBcdC8qIHN0b3JlIGFyZ3VtZW50cyB0byB0aGUgc3RhY2sgZm9yIHRoZSBicGYgcHJvZ3JhbSwgb3IgcmVzdG9yZVxuIFx0ICogYXJndW1lbnRzIGZyb20gc3RhY2sgZm9yIHRoZSBvcmlnaW5hbCBmdW5jdGlvblxuIFx0ICovXG4tXHRmb3IgKHJlZyA9IDA7IHJlZyBcdTAwM2MgYS1cdTAwM2VyZWdzX2Zvcl9hcmdzOyByZWcrKykge1xuLVx0XHRlbWl0KGZvcl9jYWxsX29yaWdpbiA/XG4tXHRcdCAgICAgQTY0X0xEUjY0SShyZWcsIEE2NF9TUCwgYmFyZ3Nfb2ZmKSA6XG4tXHRcdCAgICAgQTY0X1NUUjY0SShyZWcsIEE2NF9TUCwgYmFyZ3Nfb2ZmKSxcbi1cdFx0ICAgICBjdHgpO1xuLVx0XHRiYXJnc19vZmYgKz0gODtcbitcdGZvciAoaSA9IDAsIHJlZyA9IDA7IGkgXHUwMDNjIGEtXHUwMDNlYXJnc19pbl9yZWdzOyBpKyspIHtcbitcdFx0Ym9vbCBhcmVuYV9hcmcgPSBhcmVuYV9iYXNlIFx1MDAyNlx1MDAyNiAobS1cdTAwM2VhcmdfZmxhZ3NbaV0gXHUwMDI2IEJURl9GTU9ERUxfQVJFTkFfQVJHKTtcbitcdFx0Ym9vbCBudWxsYWJsZSA9IG0tXHUwMDNlYXJnX2ZsYWdzW2ldIFx1MDAyNiBCVEZfRk1PREVMX05VTExBQkxFX0FSRztcbitcbitcdFx0c2xvdHMgPSAobS1cdTAwM2Vhcmdfc2l6ZVtpXSArIDcpIC8gODtcbitcdFx0d2hpbGUgKHNsb3RzLS0gXHUwMDNlIDApIHtcbitcdFx0XHRpZiAoZm9yX2NhbGxfb3JpZ2luKSB7XG4rXHRcdFx0XHRlbWl0KEE2NF9MRFI2NEkocmVnLCBBNjRfU1AsIGJhcmdzX29mZiksIGN0eCk7XG4rXHRcdFx0fSBlbHNlIGlmIChhcmVuYV9hcmcpIHtcbitcdFx0XHRcdGVtaXRfYXJlbmFfYXJnX2NvbnYoY3R4LCB0bXAsIHJlZywgbnVsbGFibGUsIGJhc2VfbG8pO1xuK1x0XHRcdFx0ZW1pdChBNjRfU1RSNjRJKHRtcCwgQTY0X1NQLCBiYXJnc19vZmYpLCBjdHgpO1xuK1x0XHRcdH0gZWxzZSB7XG4rXHRcdFx0XHRlbWl0KEE2NF9TVFI2NEkocmVnLCBBNjRfU1AsIGJhcmdzX29mZiksIGN0eCk7XG4rXHRcdFx0fVxuK1x0XHRcdHJlZysrO1xuK1x0XHRcdGJhcmdzX29mZiArPSA4O1xuK1x0XHR9XG4gXHR9XG4gXG4tXHRzb2ZmID0gMzI7IC8qIG9uIHN0YWNrIGFyZ3VtZW50cyBzdGFydCBmcm9tIEZQICsgMzIgKi9cbitcdC8qXG4rXHQgKiBPbi1zdGFjayBhcmd1bWVudHMgc3RhcnQgYWJvdmUgdGhlIGZyYW1lKHMpIHB1c2hlZCBieSB0aGUgdHJhbXBvbGluZVxuK1x0ICogcHJvbG9ndWUuIEVudGVyZWQgdGhyb3VnaCB0aGUgZmVudHJ5IGNhbGwgZnJvbSBhIHRyYWNlZCBmdW5jdGlvbiwgdGhlXG4rXHQgKiBwcm9sb2d1ZSBzYXZlcyBib3RoIHRoZSBwYXJlbnQgKEZQL3g5KSBhbmQgdGhlIHRyYWNlZCBmdW5jdGlvblxuK1x0ICogKEZQL0xSKSBmcmFtZXMsIHNvIHRoZSBhcmd1bWVudHMgc3RhcnQgYXQgRlAgKyAzMi4gQSBzdHJ1Y3Rfb3BzXG4rXHQgKiBjYWxsYmFjayBpcyBjYWxsZWQgaW5kaXJlY3RseSBhbmQgb25seSB0aGUgRlAvTFIgZnJhbWUgaXMgc2F2ZWQsIHNvXG4rXHQgKiB0aGV5IHN0YXJ0IGF0IEZQICsgMTYuXG4rXHQgKi9cbitcdHNvZmYgPSBpc19zdHJ1Y3Rfb3BzID8gMTYgOiAzMjtcbiBcdGRvZmYgPSAoZm9yX2NhbGxfb3JpZ2luID8gb2FyZ3Nfb2ZmIDogYmFyZ3Nfb2ZmKTtcbiBcbiBcdC8qIHNhdmUgb24gc3RhY2sgYXJndW1lbnRzICovXG4gXHRmb3IgKGkgPSBhLVx1MDAzZWFyZ3NfaW5fcmVnczsgaSBcdTAwM2MgbS1cdTAwM2Vucl9hcmdzOyBpKyspIHtcbitcdFx0Ym9vbCBhcmVuYV9hcmcgPSBhcmVuYV9iYXNlIFx1MDAyNlx1MDAyNiAobS1cdTAwM2VhcmdfZmxhZ3NbaV0gXHUwMDI2IEJURl9GTU9ERUxfQVJFTkFfQVJHKTtcbitcdFx0Ym9vbCBudWxsYWJsZSA9IG0tXHUwMDNlYXJnX2ZsYWdzW2ldIFx1MDAyNiBCVEZfRk1PREVMX05VTExBQkxFX0FSRztcbitcbiBcdFx0c2xvdHMgPSAobS1cdTAwM2Vhcmdfc2l6ZVtpXSArIDcpIC8gODtcbiBcdFx0LyogdmVyaWZpZXIgZW5zdXJlcyBhcmdfc2l6ZSBcdTAwM2M9IDE2LCBzbyBzbG90cyBlcXVhbHMgMSBvciAyICovXG4gXHRcdHdoaWxlIChzbG90cy0tIFx1MDAzZSAwKSB7XG5AQCAtMjU2MSw2ICsyNjUwLDE1IEBAIHN0YXRpYyB2b2lkIHNhdmVfYXJncyhzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBpbnQgYmFyZ3Nfb2ZmLCBpbnQgb2FyZ3Nfb2ZmLFxuIFx0XHRcdCAqL1xuIFx0XHRcdGlmIChzbG90cyA9PSAwIFx1MDAyNlx1MDAyNiAhZm9yX2NhbGxfb3JpZ2luKVxuIFx0XHRcdFx0Y2xlYXJfZ2FyYmFnZShjdHgsIHRtcCwgbS1cdTAwM2Vhcmdfc2l6ZVtpXSAlIDgpO1xuK1x0XHRcdC8qXG4rXHRcdFx0ICogTm8gZ3VhcmQgb24gZm9yX2NhbGxfb3JpZ2luIGhlcmU6IG9ubHkgdGhlIGluZGlyZWN0XG4rXHRcdFx0ICogdHJhbXBvbGluZSBpcyBnaXZlbiBhIGJhc2UsIGFuZCBpdCBuZXZlciBjYWxscyB0aGVcbitcdFx0XHQgKiBvcmlnaW5hbCBmdW5jdGlvbiwgc28gYXJndW1lbnRzIGFyZSBuZXZlciBjb252ZXJ0ZWRcbitcdFx0XHQgKiBvbiB0aGVpciB3YXkgYmFjayBvdXQgdG8gaXQuIFNlZSB0aGUgV0FSTl9PTl9PTkNFKClcbitcdFx0XHQgKiBpbiBwcmVwYXJlX3RyYW1wb2xpbmUoKS5cbitcdFx0XHQgKi9cbitcdFx0XHRpZiAoYXJlbmFfYXJnKVxuK1x0XHRcdFx0ZW1pdF9hcmVuYV9hcmdfY29udihjdHgsIHRtcCwgdG1wLCBudWxsYWJsZSwgYmFzZV9sbyk7XG4gXHRcdFx0ZW1pdChBNjRfU1RSNjRJKHRtcCwgQTY0X1NQLCBkb2ZmKSwgY3R4KTtcbiBcdFx0XHRzb2ZmICs9IDg7XG4gXHRcdFx0ZG9mZiArPSA4O1xuQEAgLTI2MjAsOCArMjcxOCwyMSBAQCBzdGF0aWMgaW50IHByZXBhcmVfdHJhbXBvbGluZShzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSxcbiBcdGJvb2wgaXNfc3RydWN0X29wcyA9IGlzX3N0cnVjdF9vcHNfdHJhbXAoZmVudHJ5KTtcbiBcdGludCBjb29raWVfb2ZmLCBjb29raWVfY250LCBjb29raWVfYmFyZ3Nfb2ZmO1xuIFx0aW50IGZzZXNzaW9uX2NudCA9IGJwZl9mc2Vzc2lvbl9jbnQodG5vZGVzKTtcbitcdHU2NCBhcmVuYV9iYXNlO1xuIFx0dTY0IGZ1bmNfbWV0YTtcbiBcbitcdC8qXG4rXHQgKiBGX0lORElSRUNUIGlzIG9ubHkgY29tcGF0aWJsZSB3aXRoIEZfUkVUX0ZFTlRSWV9SRVQsIGl0IGlzIGV4cGxpY2l0bHlcbitcdCAqIGluY29tcGF0aWJsZSB3aXRoIEZfQ0FMTF9PUklHIHwgRl9TS0lQX0ZSQU1FIHwgRl9JUF9BUkcgYmVjYXVzZVxuK1x0ICogQGZ1bmNfYWRkci4gQXJlbmEgY29udmVyc2lvbiByZWxpZXMgb24gdGhpczogYnBmX3RyYW1wX2FyZW5hX2Jhc2UoKVxuK1x0ICogb25seSByZXR1cm5zIGEgYmFzZSBmb3IgdGhlIGluZGlyZWN0IHRyYW1wb2xpbmUsIHdoaWNoIHRoZXJlZm9yZVxuK1x0ICogbmV2ZXIgY2FsbHMgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uIHdpdGggY29udmVydGVkIGFyZ3VtZW50cy5cbitcdCAqL1xuK1x0V0FSTl9PTl9PTkNFKChmbGFncyBcdTAwMjYgQlBGX1RSQU1QX0ZfSU5ESVJFQ1QpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIChmbGFncyBcdTAwMjYgfihCUEZfVFJBTVBfRl9JTkRJUkVDVCB8IEJQRl9UUkFNUF9GX1JFVF9GRU5UUllfUkVUKSkpO1xuK1xuK1x0YXJlbmFfYmFzZSA9IGJwZl90cmFtcF9hcmVuYV9iYXNlKG0sIHRub2RlcywgZmxhZ3MpO1xuK1xuIFx0LyogdHJhbXBvbGluZSBzdGFjayBsYXlvdXQ6XG4gXHQgKiAgICAgICAgICAgICAgICAgICAgWyBwYXJlbnQgaXAgICAgICAgICBdXG4gXHQgKiAgICAgICAgICAgICAgICAgICAgWyBGUCAgICAgICAgICAgICAgICBdXG5AQCAtMjczNyw3ICsyODQ4LDcgQEAgc3RhdGljIGludCBwcmVwYXJlX3RyYW1wb2xpbmUoc3RydWN0IGppdF9jdHggKmN0eCwgc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sXG4gXHRzdG9yZV9mdW5jX21ldGEoY3R4LCBmdW5jX21ldGEsIGZ1bmNfbWV0YV9vZmYpO1xuIFxuIFx0Lyogc2F2ZSBhcmdzIGZvciBicGYgKi9cbi1cdHNhdmVfYXJncyhjdHgsIGJhcmdzX29mZiwgb2FyZ3Nfb2ZmLCBtLCBhLCBmYWxzZSk7XG4rXHRzYXZlX2FyZ3MoY3R4LCBiYXJnc19vZmYsIG9hcmdzX29mZiwgbSwgYSwgZmFsc2UsIGlzX3N0cnVjdF9vcHMsIGFyZW5hX2Jhc2UpO1xuIFxuIFx0Lyogc2F2ZSBjYWxsZWUgc2F2ZWQgcmVnaXN0ZXJzICovXG4gXHRlbWl0KEE2NF9TVFI2NEkoQTY0X1IoMTkpLCBBNjRfU1AsIHJlZ3Nfb2ZmKSwgY3R4KTtcbkBAIC0yNzg1LDggKzI4OTYsOCBAQCBzdGF0aWMgaW50IHByZXBhcmVfdHJhbXBvbGluZShzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSxcbiBcdH1cbiBcbiBcdGlmIChmbGFncyBcdTAwMjYgQlBGX1RSQU1QX0ZfQ0FMTF9PUklHKSB7XG4tXHRcdC8qIHNhdmUgYXJncyBmb3Igb3JpZ2luYWwgZnVuYyAqL1xuLVx0XHRzYXZlX2FyZ3MoY3R4LCBiYXJnc19vZmYsIG9hcmdzX29mZiwgbSwgYSwgdHJ1ZSk7XG4rXHRcdC8qIHRoZSBvcmlnaW5hbCBmdW5jIHRha2VzIGtlcm5lbCBhZGRyZXNzZXMsIG5ldmVyIGNvbnZlcnRlZCBvbmVzICovXG4rXHRcdHNhdmVfYXJncyhjdHgsIGJhcmdzX29mZiwgb2FyZ3Nfb2ZmLCBtLCBhLCB0cnVlLCBpc19zdHJ1Y3Rfb3BzLCAwKTtcbiBcdFx0LyogY2FsbCBvcmlnaW5hbCBmdW5jICovXG4gXHRcdGVtaXQoQTY0X0xEUjY0SShBNjRfUigxMCksIEE2NF9TUCwgcmV0YWRkcl9vZmYpLCBjdHgpO1xuIFx0XHRlbWl0KEE2NF9BRFIoQTY0X0xSLCBBQVJDSDY0X0lOU05fU0laRSAqIDIpLCBjdHgpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3Rfc3RydWN0X29wc19hcmVuYS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9zdHJ1Y3Rfb3BzX2FyZW5hLmNcbmluZGV4IDk0MGVjMmNkYTBkNTIuLjdmOWY1NGJhM2ZiZTUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3N0cnVjdF9vcHNfYXJlbmEuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9zdHJ1Y3Rfb3BzX2FyZW5hLmNcbkBAIC02LDcgKzYsNyBAQFxuICNpbmNsdWRlIFwic3RydWN0X29wc19hcmVuYV9hdHRhY2guc2tlbC5oXCJcbiAjaW5jbHVkZSBcInN0cnVjdF9vcHNfYXJlbmFfZmFpbC5za2VsLmhcIlxuIFxuLSNpZiBkZWZpbmVkKF9feDg2XzY0X18pXG4rI2lmIGRlZmluZWQoX194ODZfNjRfXykgfHwgZGVmaW5lZChfX2FhcmNoNjRfXylcbiAvKlxuICAqIEF0dGFjaCBjYWxsYmFja3Mgd2l0aCBfX2FyZW5hIGFuZCBfX2FyZW5hX19udWxsYWJsZSBhcmd1bWVudHMgYW5kIGRyaXZlXG4gICogdGhlbSB0aHJvdWdoIHRoZSBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYSooKSBrZnVuY3MuXG5AQCAtMTExLDExICsxMTEsMTEgQEAgc3RhdGljIHZvaWQgYXJlbmFfYXJnX2F0dGFjaCh2b2lkKVxuIHZvaWQgc2VyaWFsX3Rlc3Rfc3RydWN0X29wc19hcmVuYSh2b2lkKVxuIHtcbiBcdC8qXG4tXHQgKiBBcmVuYSBzdHJ1Y3Rfb3BzIGFyZ3VtZW50cyBuZWVkIEpJVCBzdXBwb3J0LCBjdXJyZW50bHkgeDg2LTY0IG9ubHkuXG4tXHQgKiBFbHNld2hlcmUgdmVyaWZpY2F0aW9uIGZhaWxzIHdpdGggXCJKSVQgZG9lcyBub3Qgc3VwcG9ydCBhcmVuYVxuLVx0ICogYXJndW1lbnRzXCIsIHNvIHRoZSBwcm9ncmFtcyBjYW5ub3QgZXZlbiBsb2FkLlxuK1x0ICogQXJlbmEgc3RydWN0X29wcyBhcmd1bWVudHMgbmVlZCBKSVQgc3VwcG9ydCwgY3VycmVudGx5IHg4Ni02NCBhbmRcbitcdCAqIGFybTY0IG9ubHkuIEVsc2V3aGVyZSB2ZXJpZmljYXRpb24gZmFpbHMgd2l0aCBcIkpJVCBkb2VzIG5vdCBzdXBwb3J0XG4rXHQgKiBhcmVuYSBhcmd1bWVudHNcIiwgc28gdGhlIHByb2dyYW1zIGNhbm5vdCBldmVuIGxvYWQuXG4gXHQgKi9cbi0jaWYgZGVmaW5lZChfX3g4Nl82NF9fKVxuKyNpZiBkZWZpbmVkKF9feDg2XzY0X18pIHx8IGRlZmluZWQoX19hYXJjaDY0X18pXG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcImFyZW5hX2FyZ1wiKSlcbiBcdFx0YXJlbmFfYXJnKCk7XG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcImFyZW5hX2FyZ19mYWlsXCIpKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuYy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jLmNcbmluZGV4IGNkY2VhODg5ZGE1ODYuLmJmMGQzMDRlMGU1OWMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmMuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jLmNcbkBAIC0yNyw2ICsyNyw3IEBAIHZvbGF0aWxlIHU2NCBzdGFzaDtcbiBcbiBTRUMoXCJzeXNjYWxsXCIpXG4gX19hcmNoX3g4Nl82NFxuK19fYXJjaF9hcm02NFxuIF9fc3VjY2VzcyBfX3JldHZhbCgwKVxuIGludCBhcmVuYV9hcmdfZm9ybXModm9pZCAqY3R4KVxuIHtcbkBAIC03MCw2ICs3MSw3IEBAIGludCBhcmVuYV9hcmdfZm9ybXModm9pZCAqY3R4KVxuICAqL1xuIFNFQyhcInN5c2NhbGxcIilcbiBfX2FyY2hfeDg2XzY0XG4rX19hcmNoX2FybTY0XG4gX19zdWNjZXNzIF9fcmV0dmFsKDApXG4gaW50IGFyZW5hX2FyZ19yZWJhc2Uodm9pZCAqY3R4KVxuIHtcbkBAIC0xMTEsNiArMTEzLDcgQEAgaW50IGFyZW5hX2FyZ19yZWJhc2Uodm9pZCAqY3R4KVxuIFxuIFNFQyhcInN5c2NhbGxcIilcbiBfX2FyY2hfeDg2XzY0XG4rX19hcmNoX2FybTY0XG4gX19zdWNjZXNzIF9fcmV0dmFsKDApXG4gaW50IGFyZW5hX2FyZ3M1KHZvaWQgKmN0eClcbiB7XG5AQCAtMTQyLDYgKzE0NSw3IEBAIGludCBhcmVuYV9hcmdzNSh2b2lkICpjdHgpXG4gXG4gU0VDKFwic3lzY2FsbFwiKVxuIF9fYXJjaF94ODZfNjRcbitfX2FyY2hfYXJtNjRcbiBfX3N1Y2Nlc3MgX19yZXR2YWwoMClcbiBpbnQgYXJlbmFfYXJnX21peGVkKHZvaWQgKmN0eClcbiB7XG5AQCAtMTY5LDYgKzE3Myw3IEBAIGludCBhcmVuYV9hcmdfbWl4ZWQodm9pZCAqY3R4KVxuIC8qIGtlcm5lbC1zaWRlIGZhdWx0cyBvbiB1bnBvcHVsYXRlZCBwYWdlcyByZWNvdmVyIHZpYSB0aGUgc2NyYXRjaCBwYWdlICovXG4gU0VDKFwic3lzY2FsbFwiKVxuIF9fYXJjaF94ODZfNjRcbitfX2FyY2hfYXJtNjRcbiBfX3N1Y2Nlc3MgX19yZXR2YWwoMClcbiBpbnQgYXJlbmFfYXJnX3VucG9wdWxhdGVkKHZvaWQgKmN0eClcbiB7XG5AQCAtMTg5LDYgKzE5NCw3IEBAIGludCBhcmVuYV9hcmdfdW5wb3B1bGF0ZWQodm9pZCAqY3R4KVxuIFxuIFNFQyhcInN5c2NhbGxcIilcbiBfX2FyY2hfeDg2XzY0XG4rX19hcmNoX2FybTY0XG4gX19mYWlsdXJlIF9fbXNnKFwiYXJlbmEgcG9pbnRlciByZXF1aXJlcyBhIHByb2dyYW0gd2l0aCBhbiBhc3NvY2lhdGVkIGFyZW5hXCIpXG4gaW50IGFyZW5hX2FyZ19ub19hcmVuYSh2b2lkICpjdHgpXG4ge1xuQEAgLTE5OCw2ICsyMDQsNyBAQCBpbnQgYXJlbmFfYXJnX25vX2FyZW5hKHZvaWQgKmN0eClcbiBcbiBTRUMoXCJzeXNjYWxsXCIpXG4gX19hcmNoX3g4Nl82NFxuK19fYXJjaF9hcm02NFxuIF9fZmFpbHVyZSBfX21zZyhcImlzIG5vdCBhIHBvaW50ZXIgdG8gYXJlbmEgb3Igc2NhbGFyXCIpXG4gaW50IGFyZW5hX2FyZ19iYWRfcmVnKHZvaWQgKmN0eClcbiB7XG5AQCAtMjEzLDYgKzIyMCw3IEBAIGludCBhcmVuYV9hcmdfYmFkX3JlZyh2b2lkICpjdHgpXG4gXHRkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfU1RBQ0tfQVJHVU1FTlQpXG4gU0VDKFwic3lzY2FsbFwiKVxuIF9fYXJjaF94ODZfNjRcbitfX2FyY2hfYXJtNjRcbiBfX2ZhaWx1cmUgX19tc2coXCJhcmVuYSBwb2ludGVyIGNhbm5vdCBiZSBhIHN0YWNrIGFyZ3VtZW50XCIpXG4gaW50IGFyZW5hX2FyZ19zdGFjayh2b2lkICpjdHgpXG4ge1xuQEAgLTIyMyw2ICsyMzEsNyBAQCBpbnQgYXJlbmFfYXJnX3N0YWNrKHZvaWQgKmN0eClcbiAjZWxzZVxuIFNFQyhcInN5c2NhbGxcIilcbiBfX2FyY2hfeDg2XzY0XG4rX19hcmNoX2FybTY0XG4gX19kZXNjcmlwdGlvbihcImFyZW5hX2FyZ19zdGFjazogbm90IHN1cHBvcnRlZCwgZHVtbXkgdGVzdFwiKVxuIF9fc3VjY2Vzc1xuIGludCBhcmVuYV9hcmdfc3RhY2sodm9pZCAqY3R4KVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuY19qaXQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuY19qaXQuY1xuaW5kZXggYzliOTE4NjYyNjE2Mi4uYjVhMDFjYmMzM2E3MyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuY19qaXQuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jX2ppdC5jXG5AQCAtMzIsNiArMzIsMTAgQEAgX19qaXRlZChcIlx0bW92bFx0JWVkaSwgJWVkaVwiKVxuIF9faml0ZWQoXCJcdGFkZHFcdCVyMTIsICVyZGlcIilcbiBfX2ppdGVkKFwiLi4uXCIpXG4gX19qaXRlZChcIlx0Y2FsbHFcdHt7Lip9fVwiKVxuK19fYXJjaF9hcm02NFxuK19faml0ZWQoXCIuLi5cIilcbitfX2ppdGVkKFwiXHRhZGRcdHgwLCB4MjgsIHcwLCB1eHR3XCIpXG4rX19qaXRlZChcIlx0e3soYmx8bW92KVx0Lip9fVwiKVxuIF9fc3VjY2Vzc1xuIGludCBhcmVuYV9hcmdfaml0X3JlYmFzZSh2b2lkICpjdHgpXG4ge1xuQEAgLTQ4LDYgKzUyLDEyIEBAIF9faml0ZWQoXCJcdHRlc3RsXHQlZWRpLCAlZWRpXCIpXG4gX19qaXRlZChcIlx0amVcdEwwXCIpXG4gX19qaXRlZChcIlx0YWRkcVx0JXIxMiwgJXJkaVwiKVxuIF9faml0ZWQoXCJMMDpcdGNhbGxxXHR7ey4qfX1cIilcbitfX2FyY2hfYXJtNjRcbitfX2ppdGVkKFwiLi4uXCIpXG4rX19qaXRlZChcIlx0bW92XHR3MCwgdzBcIilcbitfX2ppdGVkKFwiXHRjYnpcdHcwLCBMMFwiKVxuK19faml0ZWQoXCJcdGFkZFx0eDAsIHgyOCwgdzAsIHV4dHdcIilcbitfX2ppdGVkKFwiTDA6XHR7ey4qfX1cIilcbiBfX3N1Y2Nlc3NcbiBpbnQgYXJlbmFfYXJnX2ppdF9udWxsYWJsZSh2b2lkICpjdHgpXG4ge1xuQEAgLTcyLDYgKzgyLDE2IEBAIF9faml0ZWQoXCJcdHRlc3RsXHQlcjhkLCAlcjhkXCIpXG4gX19qaXRlZChcIlx0amVcdEwwXCIpXG4gX19qaXRlZChcIlx0YWRkcVx0JXIxMiwgJXI4XCIpXG4gX19qaXRlZChcIkwwOlx0Y2FsbHFcdHt7Lip9fVwiKVxuK19fYXJjaF9hcm02NFxuK19faml0ZWQoXCIuLi5cIilcbitfX2ppdGVkKFwiXHRhZGRcdHgwLCB4MjgsIHcwLCB1eHR3XCIpXG4rX19qaXRlZChcIlx0YWRkXHR4MSwgeDI4LCB3MSwgdXh0d1wiKVxuK19faml0ZWQoXCJcdGFkZFx0eDIsIHgyOCwgdzIsIHV4dHdcIilcbitfX2ppdGVkKFwiXHRhZGRcdHgzLCB4MjgsIHczLCB1eHR3XCIpXG4rX19qaXRlZChcIlx0bW92XHR3NCwgdzRcIilcbitfX2ppdGVkKFwiXHRjYnpcdHc0LCBMMFwiKVxuK19faml0ZWQoXCJcdGFkZFx0eDQsIHgyOCwgdzQsIHV4dHdcIilcbitfX2ppdGVkKFwiTDA6XHR7ey4qfX1cIilcbiBfX3N1Y2Nlc3NcbiBpbnQgYXJlbmFfYXJnX2ppdF9hcmdzNSh2b2lkICpjdHgpXG4ge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJ1Y3Rfb3BzX2FyZW5hLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RydWN0X29wc19hcmVuYS5jXG5pbmRleCBiYTA0YzczZDhkOTY3Li44YWE4NjM5ZGY5MWYwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfYXJlbmEuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfYXJlbmEuY1xuQEAgLTU5LDExICs1OSwyOCBAQCBpbnQgdGVzdF9hcmVuYV9zdGFja19jYih1bnNpZ25lZCBsb25nIGxvbmcgKmN0eClcbiBcdHJldHVybiAwO1xuIH1cbiBcbitTRUMoXCJzdHJ1Y3Rfb3BzL3Rlc3RfYXJlbmFfbXVsdGlzbG90XCIpXG4raW50IHRlc3RfYXJlbmFfbXVsdGlzbG90X2NiKHVuc2lnbmVkIGxvbmcgbG9uZyAqY3R4KVxuK3tcbitcdHU2NCBfX2FyZW5hICpwdHIgPSAodTY0IF9fYXJlbmEgKiljdHhbMl07XG4rXG4rXHRhcmVuYV90b3VjaCsrO1xuK1x0LypcbitcdCAqIFRoZSAxNi1ieXRlIHN0cnVjdCBvY2N1cGllcyBjdHhbMF0gYW5kIGN0eFsxXSwgc28gQHB0ciBpcyBhcmd1bWVudFxuK1x0ICogb25lIGJ1dCBzbG90IHR3by4gR2V0dGluZyB0aGF0IHdyb25nIGhhbmRzIHRoZSBjYWxsYmFjayBhIHNjYWxhci5cbitcdCAqL1xuK1x0aWYgKGN0eFswXSAhPSAxMSB8fCBjdHhbMV0gIT0gMjIpXG4rXHRcdHJldHVybiAweGJhZDtcbitcdCpwdHIgKz0gMTtcbitcdHJldHVybiAwO1xuK31cbitcbiBTRUMoXCIuc3RydWN0X29wcy5saW5rXCIpXG4gc3RydWN0IGJwZl90ZXN0bW9kX29wczMgdGVzdG1vZF9hcmVuYSA9IHtcbiBcdC50ZXN0X2FyZW5hID0gKHZvaWQgKil0ZXN0X2FyZW5hX2NiLFxuIFx0LnRlc3RfYXJlbmFfbnVsbGFibGUgPSAodm9pZCAqKXRlc3RfYXJlbmFfbnVsbGFibGVfY2IsXG4gXHQudGVzdF9hcmVuYV9zdGFjayA9ICh2b2lkICopdGVzdF9hcmVuYV9zdGFja19jYixcbitcdC50ZXN0X2FyZW5hX211bHRpc2xvdCA9ICh2b2lkICopdGVzdF9hcmVuYV9tdWx0aXNsb3RfY2IsXG4gfTtcbiBcbiBTRUMoXCJzeXNjYWxsXCIpXG5AQCAtMTA5LDYgKzEyNiwxMyBAQCBpbnQgdHJpZ2dlcih2b2lkICpjdHgpXG4gXHRpZiAoKnZhbCAhPSA0NClcbiBcdFx0cmV0dXJuIDk7XG4gXG4rXHQvKiBhIG11bHRpLXNsb3QgYXJnIHByZWNlZGVzIHRoZSBhcmVuYSBwb2ludGVyIGhlcmUgKi9cbitcdHJldCA9IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX211bHRpc2xvdCgodTY0ICopdmFsKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiAxMDtcbitcdGlmICgqdmFsICE9IDQ1KVxuK1x0XHRyZXR1cm4gMTE7XG4rXG4gXHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKXZhbCwgMSk7XG4gI2VuZGlmXG4gXHRyZXR1cm4gMDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuY1xuaW5kZXggYTYxMzNmNzUyMWYzNC4uOTM2NmEzYzU3OGYxMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmNcbkBAIC00MDIsMTIgKzQwMiwxOSBAQCBzdGF0aWMgaW50IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmFfc3RhY2sodTY0IGEsIHU2NCBiLCB1NjQgYywgdTY0IGQsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGludCBicGZfdGVzdG1vZF9vcHMzX190ZXN0X2FyZW5hX211bHRpc2xvdChzdHJ1Y3QgYnBmX3Rlc3Rtb2RfYXJlbmFfcGFpciBwLFxuK1x0XHRcdFx0XHRcdCAgdTY0ICpwdHJfX2FyZW5hKVxuK3tcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgc3RydWN0IGJwZl90ZXN0bW9kX29wczMgX19icGZfdGVzdG1vZF9vcHMzID0ge1xuIFx0LnRlc3RfMSA9IGJwZl90ZXN0bW9kX3Rlc3RfMyxcbiBcdC50ZXN0XzIgPSBicGZfdGVzdG1vZF90ZXN0XzQsXG4gXHQudGVzdF9hcmVuYSA9IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmEsXG4gXHQudGVzdF9hcmVuYV9udWxsYWJsZSA9IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmFfbnVsbGFibGUsXG4gXHQudGVzdF9hcmVuYV9zdGFjayA9IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmFfc3RhY2ssXG4rXHQudGVzdF9hcmVuYV9tdWx0aXNsb3QgPSBicGZfdGVzdG1vZF9vcHMzX190ZXN0X2FyZW5hX211bHRpc2xvdCxcbiB9O1xuIFxuIHN0YXRpYyB2b2lkIGJwZl90ZXN0bW9kX3Rlc3Rfc3RydWN0X29wczModm9pZClcbkBAIC00NDEsNiArNDQ4LDEzIEBAIF9fYnBmX2tmdW5jIGludCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9zdGFjayh1NjQgKnB0cl9fYXJlbmEpXG4gXHRyZXR1cm4gc3Rfb3BzMy1cdTAwM2V0ZXN0X2FyZW5hX3N0YWNrKDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIHB0cl9fYXJlbmEpO1xuIH1cbiBcbitfX2JwZl9rZnVuYyBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfbXVsdGlzbG90KHU2NCAqcHRyX19hcmVuYSlcbit7XG4rXHRzdHJ1Y3QgYnBmX3Rlc3Rtb2RfYXJlbmFfcGFpciBwID0geyAuYSA9IDExLCAuYiA9IDIyIH07XG4rXG4rXHRyZXR1cm4gc3Rfb3BzMy1cdTAwM2V0ZXN0X2FyZW5hX211bHRpc2xvdChwLCBwdHJfX2FyZW5hKTtcbit9XG4rXG4gc3RydWN0IGJwZl90ZXN0bW9kX2J0Zl90eXBlX3RhZ18xIHtcbiBcdGludCBhO1xuIH07XG5AQCAtODUyLDYgKzg2Niw3IEBAIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF8yKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYSlcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfbnVsbGFibGUpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX3N0YWNrKVxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9tdWx0aXNsb3QpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19nZXRfZGVmYXVsdF90cnVzdGVkX3B0cl90ZXN0KTtcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX3B1dF9kZWZhdWx0X3RydXN0ZWRfcHRyX3Rlc3QpO1xuIEJURl9LRlVOQ1NfRU5EKGJwZl90ZXN0bW9kX2NvbW1vbl9rZnVuY19pZHMpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmhcbmluZGV4IDMzZjJhZjViNzA4NTcuLjIxMGI5MTkyOTBjYzIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5oXG5AQCAtMTAzLDYgKzEwMywxMiBAQCBzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzMiB7XG4gXHRpbnQgKCp0ZXN0XzEpKHZvaWQpO1xuIH07XG4gXG4rLyogMTYgYnl0ZXMsIHNvIGl0IHRha2VzIHR3byBhcmd1bWVudCBzbG90cyB3aGVuIHBhc3NlZCBieSB2YWx1ZSAqL1xuK3N0cnVjdCBicGZfdGVzdG1vZF9hcmVuYV9wYWlyIHtcbitcdHU2NCBhO1xuK1x0dTY0IGI7XG4rfTtcbitcbiBzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzMyB7XG4gXHRpbnQgKCp0ZXN0XzEpKHZvaWQpO1xuIFx0aW50ICgqdGVzdF8yKSh2b2lkKTtcbkBAIC0xMTIsNiArMTE4LDggQEAgc3RydWN0IGJwZl90ZXN0bW9kX29wczMge1xuIFx0LyogZW5vdWdoIGxlYWRpbmcgYXJncyB0byBmb3JjZSBAcHRyIG9udG8gdGhlIHN0YWNrIG9uIHg4NiBhbmQgYXJtNjQgKi9cbiBcdGludCAoKnRlc3RfYXJlbmFfc3RhY2spKHU2NCBhLCB1NjQgYiwgdTY0IGMsIHU2NCBkLCB1NjQgZSwgdTY0IGYsXG4gXHRcdFx0XHR1NjQgZywgdTY0IGgsIHU2NCAqcHRyKTtcbitcdC8qIGEgbXVsdGktc2xvdCBsZWFkaW5nIGFyZywgc28gQHB0ciBpcyBub3QgYXQgdGhlIHNsb3QgaXRzIGFyZyBpbmRleCBzdWdnZXN0cyAqL1xuK1x0aW50ICgqdGVzdF9hcmVuYV9tdWx0aXNsb3QpKHN0cnVjdCBicGZfdGVzdG1vZF9hcmVuYV9wYWlyIHAsIHU2NCAqcHRyKTtcbiB9O1xuIFxuIHN0cnVjdCBzdF9vcHNfYXJncyB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kX2tmdW5jLmhcbmluZGV4IGM0MzgzYWNiNTNjMTEuLjdkODEwNzBlZWZlN2YgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oXG5AQCAtMTIzLDYgKzEyMyw3IEBAIHZvaWQgYnBmX3Rlc3Rtb2RfdGVzdF9tb2Rfa2Z1bmMoaW50IGkpIF9fa3N5bTtcbiBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmEoX191NjQgKnB0cl9fYXJlbmEpIF9fa3N5bTtcbiBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfbnVsbGFibGUoX191NjQgKnB0cl9fYXJlbmFfX251bGxhYmxlKSBfX2tzeW07XG4gaW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX3N0YWNrKF9fdTY0ICpwdHJfX2FyZW5hKSBfX2tzeW07XG4raW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX211bHRpc2xvdChfX3U2NCAqcHRyX19hcmVuYSkgX19rc3ltO1xuIFxuIF9fdTY0IGJwZl9rZnVuY19jYWxsX3Rlc3QxKHN0cnVjdCBzb2NrICpzaywgX191MzIgYSwgX191NjQgYixcbiBcdFx0XHRcdF9fdTMyIGMsIF9fdTY0IGQpIF9fa3N5bTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjUxOjQwLjI3MDMzNDc4NVoiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjg3NDE4OTM4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50OiBBcm02NCBCUEYgSklUIEFyZW5hIEFyZ3VtZW50IFN1cHBvcnQqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgYWRkaW5nIEJQRiBhcmVuYSBhcmd1bWVudCBzdXBwb3J0IHRvIHRoZSBhcm02NCBKSVQgY29tcGlsZXIuIE15IGluaXRpYWwgdGhvdWdodCBpcywgXCJPa2F5LCB0aGF0J3MgaW5zdHJ1Y3Rpb24gZW1pc3Npb24sIG5vdCBkYXRhIHN0cnVjdHVyZXMsIHNvIEtNU0FOIGlzIHByb2JhYmx5IG5vdCByZWxldmFudCwgYnV0IGxldCdzIGJlIHN1cmUuXCJcblxuVGhlIHBhdGNoIG1vZGlmaWVzIHNldmVyYWwgZmlsZXMsIG1vc3RseSBmb2N1c2luZyBvbiBpbnN0cnVjdGlvbiBlbmNvZGluZyBhbmQgdGhlIEpJVCBjb21waWxlciBpdHNlbGYuIEl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgd29yayBpcyBpbiBlbWl0dGluZyB0aGUgY29ycmVjdCBhcm02NCBpbnN0cnVjdGlvbnMgdG8gaGFuZGxlIEJQRiBhcmVuYSBwb2ludGVycyDigJMgYWRkaW5nIG9yIHN1YnRyYWN0aW5nIHRoZSBhcmVuYSBiYXNlIGFkZHJlc3MgZHVyaW5nIEpJVCBjb21waWxhdGlvbi4gSXQncyBlc3NlbnRpYWxseSBhYm91dCBnZW5lcmF0aW5nIHRoZSAqcmlnaHQqIG1hY2hpbmUgY29kZSwgcmF0aGVyIHRoYW4gaGFuZGxpbmcgcmF3IGRhdGEgZGlyZWN0bHkuXG5cbk15IGNvbmNlcm4gaXMgYWx3YXlzIGFyb3VuZCB1bmluaXRpYWxpemVkIG1lbW9yeSwgYnV0IEknbSBub3Qgc2VlaW5nIGFueSByZWQgZmxhZ3MuIFRoZSBjaGFuZ2VzIGFyZSBpc29sYXRlZCB3aXRoaW4gdGhlIEJQRiBKSVQgY29tcGlsZXIgYW5kIHRoZSBzZWxmdGVzdHMuIE5vIG5ldyBrZXJuZWwgc3RydWN0dXJlcyBhcmUgYmVpbmcgcGFzc2VkIHRvIHVzZXIgc3BhY2UuIFRoZXJlIGFyZW4ndCBhbnkgY29tcGxleCBhbGxvY2F0aW9ucyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBUaGVyZSdzIG5vdGhpbmcgbmV3IGJlaW5nIGRpcmVjdGx5IGV4cG9zZWQgdG8gdXNlcnNwYWNlIHRoYXQgc2NyZWFtcyBcInVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdHkuXCJcblxuTm93LCB0aGUgSklUIGNvbXBpbGVyIGdlbmVyYXRlcyBpbnN0cnVjdGlvbnMsIHNvIHRoZXJlIGlzIHRoZSBwb3RlbnRpYWwgZm9yIGxvZ2ljIGVycm9ycyBpbiB0aGUgaW5zdHJ1Y3Rpb24gZ2VuZXJhdGlvbi4gSWYgdGhlcmUncyBhIGJ1ZywgaXQgY291bGQgbGVhZCB0byBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGFjY2VzcyAqd2l0aGluKiB0aGUgSklUZWQgQlBGIGNvZGUuIEhvd2V2ZXIsIEtBU0FOIHNob3VsZCBjYXRjaCB0aGF0LiBUaGlzIGlzbid0IEtNU0FOJ3MgZG9tYWluLiBJbiBmYWN0LCBLTVNBTiBkb2Vzbid0IGV2ZW4gaW5zdHJ1bWVudCBKSVQnZCBjb2RlLiBcblxuTGV0IG1lIGRvdWJsZS1jaGVjayBgYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmNgLiBTcGVjaWZpY2FsbHksIGZ1bmN0aW9ucyBsaWtlIGBlbWl0X2tmdW5jX2FyZW5hX2FyZ3NgLCBgZW1pdF9hcmVuYV9hcmdfY29udmAsIGBzYXZlX2FyZ3NgLCBhbmQgYHByZXBhcmVfdHJhbXBvbGluZWAg4oCTIHRoZXNlIGFyZSB3aGVyZSB0aGUgbWFjaGluZSBjb2RlIGlzIGJlaW5nIGdlbmVyYXRlZC4gSWYgYSBidWcgd2VyZSB0byBleGlzdCBoZXJlLCB3b3VsZCBpdCBsZWFkIHRvIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnk/IE5vLiBLTVNBTiBpc24ndCB0aGUgc29sdXRpb24uIFRoZSBKSVQgY29tcGlsZXIgaXMganVzdCBnZW5lcmF0aW5nIHRoZSBtYWNoaW5lIGNvZGUuIElmIHRoZSBjb2RlIGlzIGJ1Z2d5LCBpdCBpcyBLQVNBTiB0aGF0IGNhbiBkZXRlY3QgaXQsIG5vdCBLTVNBTi5cblxuTGV0IG1lIGxvb2sgY2xvc2VseSBhdCBgc2F2ZV9hcmdzYC4uLiBzcGVjaWZpY2FsbHkgdGhlIHNuaXBwZXQgYmVsb3c6XG5cbmBgYGNcbnN0YXRpYyB2b2lkIHNhdmVfYXJncyhzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBpbnQgYmFyZ3Nfb2ZmLCBpbnQgb2FyZ3Nfb2ZmLFxuXHRcdCAgICAgIGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgY29uc3Qgc3RydWN0IGFyZ19hdXggKmEsXG5cdFx0ICAgICAgYm9vbCBmb3JfY2FsbF9vcmlnaW4sIGJvb2wgaXNfc3RydWN0X29wcywgdTY0IGFyZW5hX2Jhc2UpXG57XG5cdHU4IHRtcCA9IGJwZjJhNjRbVE1QX1JFR18xXTtcblx0dTggYmFzZV9sbyA9IGJwZjJhNjRbVE1QX1JFR18yXTtcblx0aW50IGksIHJlZywgZG9mZiwgc29mZiwgc2xvdHM7XG5cblx0Lyogb25seSB0aGUgbG93IDMyIGJpdHMgb2YgdGhlIGJhc2UgdGFrZSBwYXJ0IGluIHRoZSBzdWJ0cmFjdGlvbiAqL1xuXHRpZiAoYXJlbmFfYmFzZSlcblx0XHRlbWl0X2E2NF9tb3ZfaSgwLCBiYXNlX2xvLCAoczMyKSh1MzIpYXJlbmFfYmFzZSwgY3R4KTtcbi4uLlxuYGBgXG5cbkFoLCBldmVyeXRoaW5nIGhlcmUgKnNlZW1zKiBwcm9wZXJseSBpbml0aWFsaXplZC4gVGhlIGBhcmVuYV9iYXNlYCB2YXJpYWJsZSBpcyBiZWluZyBhc3NpZ25lZCwgYW5kIHRoZSBnZW5lcmF0ZWQgbWFjaGluZSBjb2RlIChhbmQgcmVnaXN0ZXJzKSBzZWVtIHRvIGJlIGNvcnJlY3RseSBtYW5hZ2VkLlxuXG5HaXZlbiBhbGwgb2YgdGhpcywgSSdtIGNvbmZpZGVudCB0aGF0IEtNU0FOIGlzbid0IG5lZWRlZCBoZXJlLiBUaGUgcmlzayBpcyBsaW1pdGVkIHRvIEpJVCBjb21waWxhdGlvbiBsb2dpYyBlcnJvcnMsIHdoaWNoIEtBU0FOIGFuZCBzdGFuZGFyZCB0ZXN0aW5nIHNob3VsZCBlZmZlY3RpdmVseSBhZGRyZXNzLlxuXG4qKlRoZXJlZm9yZSwgTmVlZHNLTVNBTiA9IGZhbHNlLioqXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNDA0LCJPdXRwdXRUb2tlbnMiOjIxMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg0NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjUxOjUzLjE0NDUyOTcyMloiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZXh0ZW5kcyB0aGUgYXJtNjQgQlBGIEpJVCBjb21waWxlciB0byBzdXBwb3J0IEJQRiBhcmVuYSBhcmd1bWVudHMuIEl0IGludHJvZHVjZXMgbmV3IGluc3RydWN0aW9uIGVuY29kaW5nIGZ1bmN0aW9ucyBmb3IgYXJtNjQgKGUuZy4sIGBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnYCkgYW5kIG1vZGlmaWVzIHRoZSBKSVQgY29tcGlsZXIgKGBhcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY2ApIHRvIGVtaXQgaW5zdHJ1Y3Rpb25zIHRoYXQgcmViYXNlIGFyZW5hIHBvaW50ZXJzLiBUaGUgY2hhbmdlcyBhcmUgc3RyaWN0bHkgcmVsYXRlZCB0byBKSVQgY29tcGlsYXRpb24gbG9naWMgYW5kIGluc3RydWN0aW9uIGVtaXNzaW9uLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBrZXJuZWwgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvIHRoZXkgYWxsb2NhdGUgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgdGhhdCBjb3VsZCBiZSBsZWZ0IHVuaW5pdGlhbGl6ZWQuIEFueSBidWdzIGluIHRoZSBKSVQgY29tcGlsZXIgd291bGQgbGlrZWx5IHJlc3VsdCBpbiBpbnZhbGlkIGluc3RydWN0aW9uIGdlbmVyYXRpb24sIGNyYXNoZXMsIG9yIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIGluIHRoZSBKSVRlZCBjb2RlLCB3aGljaCBhcmUgYWRlcXVhdGVseSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgdGVzdGluZy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZSB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZXh0ZW5kcyB0aGUgYXJtNjQgQlBGIEpJVCBjb21waWxlciB0byBzdXBwb3J0IEJQRiBhcmVuYSBhcmd1bWVudHMuIEl0IGludHJvZHVjZXMgbmV3IGluc3RydWN0aW9uIGVuY29kaW5nIGZ1bmN0aW9ucyBmb3IgYXJtNjQgKGUuZy4sIGBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnYCkgYW5kIG1vZGlmaWVzIHRoZSBKSVQgY29tcGlsZXIgKGBhcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY2ApIHRvIGVtaXQgaW5zdHJ1Y3Rpb25zIHRoYXQgcmViYXNlIGFyZW5hIHBvaW50ZXJzLiBUaGUgY2hhbmdlcyBhcmUgc3RyaWN0bHkgcmVsYXRlZCB0byBKSVQgY29tcGlsYXRpb24gbG9naWMgYW5kIGluc3RydWN0aW9uIGVtaXNzaW9uLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBrZXJuZWwgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvIHRoZXkgYWxsb2NhdGUgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgdGhhdCBjb3VsZCBiZSBsZWZ0IHVuaW5pdGlhbGl6ZWQuIEFueSBidWdzIGluIHRoZSBKSVQgY29tcGlsZXIgd291bGQgbGlrZWx5IHJlc3VsdCBpbiBpbnZhbGlkIGluc3RydWN0aW9uIGdlbmVyYXRpb24sIGNyYXNoZXMsIG9yIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIGluIHRoZSBKSVRlZCBjb2RlLCB3aGljaCBhcmUgYWRlcXVhdGVseSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgdGVzdGluZy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZSB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow2mzb8[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-13 20:30:08 +0000 UTC FinishedAt: 2026-08-13 20:51:54 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "6f033615ef8fb2374daa7e50a8ff68616bc850d2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_JIT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "6f033615ef8fb2374daa7e50a8ff68616bc850d2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_JIT" ], "series_id": "3871e210-1a45-42e7-9439-b7ae2abdd34c" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "aarch64_insn_gen_add_sub_extended_reg", "bpf_jit_supports_arena_args", "arch_prepare_bpf_trampoline" ], "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+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjUwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnJiMzNDssCiAgICAmIzM0O2JwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncyYjMzQ7LAogICAgJiMzNDthcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBleHRlbmRzIHRoZSBhcm02NCBCUEYgSklUIGNvbXBpbGVyIHRvIHN1cHBvcnQgQlBGIGFyZW5hIGFyZ3VtZW50cy4gSXQgaW50cm9kdWNlcyBuZXcgaW5zdHJ1Y3Rpb24gZW5jb2RpbmcgZnVuY3Rpb25zIGZvciBhcm02NCAoZS5nLiwgYGFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9leHRlbmRlZF9yZWdgKSBhbmQgbW9kaWZpZXMgdGhlIEpJVCBjb21waWxlciAoYGFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jYCkgdG8gZW1pdCBpbnN0cnVjdGlvbnMgdGhhdCByZWJhc2UgYXJlbmEgcG9pbnRlcnMuIFRoZSBjaGFuZ2VzIGFyZSBzdHJpY3RseSByZWxhdGVkIHRvIEpJVCBjb21waWxhdGlvbiBsb2dpYyBhbmQgaW5zdHJ1Y3Rpb24gZW1pc3Npb24uIFRoZXkgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGtlcm5lbCBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBhbGxvY2F0ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB0aGF0IGNvdWxkIGJlIGxlZnQgdW5pbml0aWFsaXplZC4gQW55IGJ1Z3MgaW4gdGhlIEpJVCBjb21waWxlciB3b3VsZCBsaWtlbHkgcmVzdWx0IGluIGludmFsaWQgaW5zdHJ1Y3Rpb24gZ2VuZXJhdGlvbiwgY3Jhc2hlcywgb3Igb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgaW4gdGhlIEpJVGVkIGNvZGUsIHdoaWNoIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW1wbGVtZW50cyBCUEYgYXJlbmEgYXJndW1lbnRzIHN1cHBvcnQgZm9yIHRoZSBhcm02NCBKSVQgY29tcGlsZXIuIEl0IGFkZHMgbmV3IGluc3RydWN0aW9uIGdlbmVyYXRpb24gbG9naWMgZm9yIGV4dGVuZGVkIHJlZ2lzdGVyIGFkZC9zdWIgaW5zdHJ1Y3Rpb25zIChgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZ2ApIGFuZCBtb2RpZmllcyB0aGUgYXJtNjQgQlBGIEpJVCAoYGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAsIGBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NgKSB0byBoYW5kbGUgYXJlbmEgcG9pbnRlcnMgaW4ga2Z1bmMgY2FsbHMgYW5kIHN0cnVjdF9vcHMgY2FsbGJhY2tzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIGtlcm5lbCAoQlBGIEpJVCkgdGhhdCBhcmUgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjUwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOWZkMzgyMjVjMjNlOGE5NWVhZjM4OGYyNzNkYzMzODcxYjIyNGViZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDEzIDIwOjUwOjExIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3QgYi9Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0XG5pbmRleCAxMGU3MjVjYmU2NGNkLi44NWY3M2UwYmJkMGZmIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdFxuQEAgLTMwMSw5ICYjNDM7MzAxLDkgQEAgQW4gZXhhbXBsZSBpcyBnaXZlbiBiZWxvdzo6XG4gICAgICAgICB9XG4gXG4gQ2FsbGluZyBzdWNoIGEga2Z1bmMgcmVxdWlyZXMgdGhlIHByb2dyYW0gdG8gdXNlIGFuIGFyZW5hIG1hcCBhbmQgYSBKSVQgd2l0aFxuLWFyZW5hIGFyZ3VtZW50IHN1cHBvcnQgKGN1cnJlbnRseSB4ODYtNjQpOyB2ZXJpZmljYXRpb24gZmFpbHMgb3RoZXJ3aXNlLiBUaGVcbi1wcm9ncmFtIGNhbiBwYXNzIGFueSB2YWx1ZSB3aXRob3V0IGNvbXByb21pc2luZyB0aGUga2VybmVsLiBBIHZhbHVlIHRoYXQgZG9lc1xuLW5vdCBwb2ludCBpbnRvIHRoZSBhcmVuYSBpcyBhIHByb2dyYW0gYnVnLlxuJiM0MzthcmVuYSBhcmd1bWVudCBzdXBwb3J0IChjdXJyZW50bHkgeDg2LTY0IGFuZCBhcm02NCk7IHZlcmlmaWNhdGlvbiBmYWlsc1xuJiM0MztvdGhlcndpc2UuIFRoZSBwcm9ncmFtIGNhbiBwYXNzIGFueSB2YWx1ZSB3aXRob3V0IGNvbXByb21pc2luZyB0aGUga2VybmVsLiBBXG4mIzQzO3ZhbHVlIHRoYXQgZG9lcyBub3QgcG9pbnQgaW50byB0aGUgYXJlbmEgaXMgYSBwcm9ncmFtIGJ1Zy5cbiBcbiBUaGUgc3VmZml4ZXMgaGF2ZSB0aGUgc2FtZSBtZWFuaW5nIG9uIHRoZSBhcmd1bWVudHMgb2Ygc3RydWN0X29wcyBzdHViXG4gZnVuY3Rpb25zLCB3aXRoIHRoZSBjb252ZXJzaW9uIHJ1bm5pbmcgaW4gdGhlIG9wcG9zaXRlIGRpcmVjdGlvbi4gVGhlXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9pbnNuLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2luc24uaFxuaW5kZXggY2MwNzAyZmE2NGE3OS4uMWNlNzVhNDQyNjM4NyAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vaW5zbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2luc24uaFxuQEAgLTIwNSw2ICYjNDM7MjA1LDE4IEBAIGVudW0gYWFyY2g2NF9pbnNuX2Fkc2JfdHlwZSB7XG4gXHRBQVJDSDY0X0lOU05fQURTQl9TVUJfU0VURkxBR1NcbiB9O1xuIFxuJiM0MzsvKiBvcHRpb24gZmllbGQgb2YgYWRkL3N1YiAoZXh0ZW5kZWQgcmVnaXN0ZXIpICovXG4mIzQzO2VudW0gYWFyY2g2NF9pbnNuX2V4dGVuZF90eXBlIHtcbiYjNDM7XHRBQVJDSDY0X0lOU05fRVhURU5EX1VYVEIsXG4mIzQzO1x0QUFSQ0g2NF9JTlNOX0VYVEVORF9VWFRILFxuJiM0MztcdEFBUkNINjRfSU5TTl9FWFRFTkRfVVhUVyxcbiYjNDM7XHRBQVJDSDY0X0lOU05fRVhURU5EX1VYVFgsXG4mIzQzO1x0QUFSQ0g2NF9JTlNOX0VYVEVORF9TWFRCLFxuJiM0MztcdEFBUkNINjRfSU5TTl9FWFRFTkRfU1hUSCxcbiYjNDM7XHRBQVJDSDY0X0lOU05fRVhURU5EX1NYVFcsXG4mIzQzO1x0QUFSQ0g2NF9JTlNOX0VYVEVORF9TWFRYLFxuJiM0Mzt9O1xuJiM0MztcbiBlbnVtIGFhcmNoNjRfaW5zbl9tb3Zld2lkZV90eXBlIHtcbiBcdEFBUkNINjRfSU5TTl9NT1ZFV0lERV9aRVJPLFxuIFx0QUFSQ0g2NF9JTlNOX01PVkVXSURFX0tFRVAsXG5AQCAtMzc4LDYgJiM0MzszOTAsMTAgQEAgX19BQVJDSDY0X0lOU05fRlVOQ1MoYWRkLFx0MHg3RjIwMDAwMCwgMHgwQjAwMDAwMClcbiBfX0FBUkNINjRfSU5TTl9GVU5DUyhhZGRzLFx0MHg3RjIwMDAwMCwgMHgyQjAwMDAwMClcbiBfX0FBUkNINjRfSU5TTl9GVU5DUyhzdWIsXHQweDdGMjAwMDAwLCAweDRCMDAwMDAwKVxuIF9fQUFSQ0g2NF9JTlNOX0ZVTkNTKHN1YnMsXHQweDdGMjAwMDAwLCAweDZCMDAwMDAwKVxuJiM0MztfX0FBUkNINjRfSU5TTl9GVU5DUyhhZGRfZXh0LFx0MHg3RkUwMDAwMCwgMHgwQjIwMDAwMClcbiYjNDM7X19BQVJDSDY0X0lOU05fRlVOQ1MoYWRkc19leHQsXHQweDdGRTAwMDAwLCAweDJCMjAwMDAwKVxuJiM0MztfX0FBUkNINjRfSU5TTl9GVU5DUyhzdWJfZXh0LFx0MHg3RkUwMDAwMCwgMHg0QjIwMDAwMClcbiYjNDM7X19BQVJDSDY0X0lOU05fRlVOQ1Moc3Vic19leHQsXHQweDdGRTAwMDAwLCAweDZCMjAwMDAwKVxuIF9fQUFSQ0g2NF9JTlNOX0ZVTkNTKG1hZGQsXHQweDdGRTA4MDAwLCAweDFCMDAwMDAwKVxuIF9fQUFSQ0g2NF9JTlNOX0ZVTkNTKG1zdWIsXHQweDdGRTA4MDAwLCAweDFCMDA4MDAwKVxuIF9fQUFSQ0g2NF9JTlNOX0ZVTkNTKHVkaXYsXHQweDdGRTBGQzAwLCAweDFBQzAwODAwKVxuQEAgLTYzNyw2ICYjNDM7NjUzLDEzIEBAIHUzMiBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfc2hpZnRlZF9yZWcoZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgZHN0LFxuIFx0XHRcdFx0XHQgaW50IHNoaWZ0LFxuIFx0XHRcdFx0XHQgZW51bSBhYXJjaDY0X2luc25fdmFyaWFudCB2YXJpYW50LFxuIFx0XHRcdFx0XHQgZW51bSBhYXJjaDY0X2luc25fYWRzYl90eXBlIHR5cGUpO1xuJiM0Mzt1MzIgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZyhlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBkc3QsXG4mIzQzO1x0XHRcdFx0XHQgIGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIHNyYyxcbiYjNDM7XHRcdFx0XHRcdCAgZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgcmVnLFxuJiM0MztcdFx0XHRcdFx0ICBlbnVtIGFhcmNoNjRfaW5zbl9leHRlbmRfdHlwZSBleHRlbmQsXG4mIzQzO1x0XHRcdFx0XHQgIGludCBzaGlmdCxcbiYjNDM7XHRcdFx0XHRcdCAgZW51bSBhYXJjaDY0X2luc25fdmFyaWFudCB2YXJpYW50LFxuJiM0MztcdFx0XHRcdFx0ICBlbnVtIGFhcmNoNjRfaW5zbl9hZHNiX3R5cGUgdHlwZSk7XG4gdTMyIGFhcmNoNjRfaW5zbl9nZW5fZGF0YTEoZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgZHN0LFxuIFx0XHRcdCAgIGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIHNyYyxcbiBcdFx0XHQgICBlbnVtIGFhcmNoNjRfaW5zbl92YXJpYW50IHZhcmlhbnQsXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9saWIvaW5zbi5jIGIvYXJjaC9hcm02NC9saWIvaW5zbi5jXG5pbmRleCAzN2NlNzVmN2YxZjA4Li5lNzBhYzAyMzg1MTUzIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9saWIvaW5zbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2xpYi9pbnNuLmNcbkBAIC05ODYsNiAmIzQzOzk4Niw2NiBAQCB1MzIgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX3NoaWZ0ZWRfcmVnKGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIGRzdCxcbiBcdHJldHVybiBhYXJjaDY0X2luc25fZW5jb2RlX2ltbWVkaWF0ZShBQVJDSDY0X0lOU05fSU1NXzYsIGluc24sIHNoaWZ0KTtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIFVubGlrZSB0aGUgc2hpZnRlZC1yZWdpc3RlciBmb3JtLCByZWdpc3RlciAzMSBpcyBub3QgWFpSIGV2ZXJ5d2hlcmUgaGVyZTpcbiYjNDM7ICogaXQgZW5jb2RlcyBTUCBmb3IgQHNyYywgYW5kIGZvciBAZHN0IHRvbyB1bmxlc3MgQHR5cGUgc2V0cyB0aGUgZmxhZ3MuIE9ubHlcbiYjNDM7ICogQHJlZyBrZWVwcyB0aGUgWFpSIG1lYW5pbmcuXG4mIzQzOyAqL1xuJiM0Mzt1MzIgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZyhlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBkc3QsXG4mIzQzO1x0XHRcdFx0XHQgIGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIHNyYyxcbiYjNDM7XHRcdFx0XHRcdCAgZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgcmVnLFxuJiM0MztcdFx0XHRcdFx0ICBlbnVtIGFhcmNoNjRfaW5zbl9leHRlbmRfdHlwZSBleHRlbmQsXG4mIzQzO1x0XHRcdFx0XHQgIGludCBzaGlmdCxcbiYjNDM7XHRcdFx0XHRcdCAgZW51bSBhYXJjaDY0X2luc25fdmFyaWFudCB2YXJpYW50LFxuJiM0MztcdFx0XHRcdFx0ICBlbnVtIGFhcmNoNjRfaW5zbl9hZHNiX3R5cGUgdHlwZSlcbiYjNDM7e1xuJiM0MztcdHUzMiBpbnNuO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKHR5cGUpIHtcbiYjNDM7XHRjYXNlIEFBUkNINjRfSU5TTl9BRFNCX0FERDpcbiYjNDM7XHRcdGluc24gPSBhYXJjaDY0X2luc25fZ2V0X2FkZF9leHRfdmFsdWUoKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgQUFSQ0g2NF9JTlNOX0FEU0JfU1VCOlxuJiM0MztcdFx0aW5zbiA9IGFhcmNoNjRfaW5zbl9nZXRfc3ViX2V4dF92YWx1ZSgpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBBQVJDSDY0X0lOU05fQURTQl9BRERfU0VURkxBR1M6XG4mIzQzO1x0XHRpbnNuID0gYWFyY2g2NF9pbnNuX2dldF9hZGRzX2V4dF92YWx1ZSgpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBBQVJDSDY0X0lOU05fQURTQl9TVUJfU0VURkxBR1M6XG4mIzQzO1x0XHRpbnNuID0gYWFyY2g2NF9pbnNuX2dldF9zdWJzX2V4dF92YWx1ZSgpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHByX2VycihcJiMzNDslczogdW5rbm93biBhZGQvc3ViIGVuY29kaW5nICVkXFxuXCYjMzQ7LCBfX2Z1bmNfXywgdHlwZSk7XG4mIzQzO1x0XHRyZXR1cm4gQUFSQ0g2NF9CUkVBS19GQVVMVDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAodmFyaWFudCkge1xuJiM0MztcdGNhc2UgQUFSQ0g2NF9JTlNOX1ZBUklBTlRfMzJCSVQ6XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEFBUkNINjRfSU5TTl9WQVJJQU5UXzY0QklUOlxuJiM0MztcdFx0aW5zbiB8PSBBQVJDSDY0X0lOU05fU0ZfQklUO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHByX2VycihcJiMzNDslczogdW5rbm93biB2YXJpYW50IGVuY29kaW5nICVkXFxuXCYjMzQ7LCBfX2Z1bmNfXywgdmFyaWFudCk7XG4mIzQzO1x0XHRyZXR1cm4gQUFSQ0g2NF9CUkVBS19GQVVMVDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChzaGlmdCBcdTAwM2MgMCB8fCBzaGlmdCBcdTAwM2UgNCkge1xuJiM0MztcdFx0cHJfZXJyKFwmIzM0OyVzOiBpbnZhbGlkIHNoaWZ0IGVuY29kaW5nICVkXFxuXCYjMzQ7LCBfX2Z1bmNfXywgc2hpZnQpO1xuJiM0MztcdFx0cmV0dXJuIEFBUkNINjRfQlJFQUtfRkFVTFQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpbnNuID0gYWFyY2g2NF9pbnNuX2VuY29kZV9yZWdpc3RlcihBQVJDSDY0X0lOU05fUkVHVFlQRV9SRCwgaW5zbiwgZHN0KTtcbiYjNDM7XG4mIzQzO1x0aW5zbiA9IGFhcmNoNjRfaW5zbl9lbmNvZGVfcmVnaXN0ZXIoQUFSQ0g2NF9JTlNOX1JFR1RZUEVfUk4sIGluc24sIHNyYyk7XG4mIzQzO1xuJiM0MztcdGluc24gPSBhYXJjaDY0X2luc25fZW5jb2RlX3JlZ2lzdGVyKEFBUkNINjRfSU5TTl9SRUdUWVBFX1JNLCBpbnNuLCByZWcpO1xuJiM0MztcbiYjNDM7XHQvKiBvcHRpb24gaW4gYml0cyBbMTU6MTNdIGFuZCBpbW0zIGluIFsxMjoxMF0gdG9nZXRoZXIgZmlsbCBJTU1fNiAqL1xuJiM0MztcdHJldHVybiBhYXJjaDY0X2luc25fZW5jb2RlX2ltbWVkaWF0ZShBQVJDSDY0X0lOU05fSU1NXzYsIGluc24sXG4mIzQzO1x0XHRcdFx0XHQgICAgIChleHRlbmQgXHUwMDNjXHUwMDNjIDMpIHwgc2hpZnQpO1xuJiM0Mzt9XG4mIzQzO1xuIHUzMiBhYXJjaDY0X2luc25fZ2VuX2RhdGExKGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIGRzdCxcbiBcdFx0XHQgICBlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBzcmMsXG4gXHRcdFx0ICAgZW51bSBhYXJjaDY0X2luc25fdmFyaWFudCB2YXJpYW50LFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXQuaCBiL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXQuaFxuaW5kZXggZDEzZGU0MjIyY2ZiNy4uYjJmZTZlNmRjZjQ0NyAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9uZXQvYnBmX2ppdC5oXG5AQCAtMjQzLDYgJiM0MzsyNDMsMTcgQEBcbiAvKiBSbiAtIFJtOyBzZXQgY29uZGl0aW9uIGZsYWdzICovXG4gI2RlZmluZSBBNjRfQ01QKHNmLCBSbiwgUm0pIEE2NF9TVUJTKHNmLCBBNjRfWlIsIFJuLCBSbSlcbiBcbiYjNDM7LyogQWRkL3N1YnRyYWN0IChleHRlbmRlZCByZWdpc3RlcikgKi9cbiYjNDM7I2RlZmluZSBBNjRfQUREU1VCX0VSRUcoc2YsIFJkLCBSbiwgUm0sIGV4dCwgc2hpZnQsIHR5cGUpIFxcXG4mIzQzO1x0YWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZyhSZCwgUm4sIFJtLCBcXFxuJiM0MztcdFx0QUFSQ0g2NF9JTlNOX0VYVEVORF8jI2V4dCwgc2hpZnQsIEE2NF9WQVJJQU5UKHNmKSwgXFxcbiYjNDM7XHRcdEFBUkNINjRfSU5TTl9BRFNCXyMjdHlwZSlcbiYjNDM7LyogUmQgPSBSbiAmIzQzOyAoRVhUKFJtKSBcdTAwM2NcdTAwM2Mgc2hpZnQpICovXG4mIzQzOyNkZWZpbmUgQTY0X0FERF9FWFQoc2YsIFJkLCBSbiwgUm0sIGV4dCwgc2hpZnQpIFxcXG4mIzQzO1x0QTY0X0FERFNVQl9FUkVHKHNmLCBSZCwgUm4sIFJtLCBleHQsIHNoaWZ0LCBBREQpXG4mIzQzOy8qIFJkID0gUm4gJiM0MzsgKHUzMilSbSAqL1xuJiM0MzsjZGVmaW5lIEE2NF9BRERfVVhUVyhSZCwgUm4sIFJtKSBBNjRfQUREX0VYVCgxLCBSZCwgUm4sIFJtLCBVWFRXLCAwKVxuJiM0MztcbiAvKiBEYXRhLXByb2Nlc3NpbmcgKDEgc291cmNlKSAqL1xuICNkZWZpbmUgQTY0X0RBVEExKHNmLCBSZCwgUm4sIHR5cGUpIGFhcmNoNjRfaW5zbl9nZW5fZGF0YTEoUmQsIFJuLCBcXFxuIFx0QTY0X1ZBUklBTlQoc2YpLCBBQVJDSDY0X0lOU05fREFUQTFfIyN0eXBlKVxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jIGIvYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmNcbmluZGV4IDc0YjQwODM3OTFkYTMuLmMxOGUwMDVhNDFkYmUgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmNcbkBAIC0xMjU2LDYgJiM0MzsxMjU2LDQzIEBAIHN0YXRpYyB2b2lkIGVtaXRfc3RhY2tfYXJnX3N0b3JlX2ltbShzMzIgaW1tLCBzMTYgYnBmX29mZiwgY29uc3QgdTggdG1wLCBzdHJ1Y3RcbiBcdH1cbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIFJlYmFzZSB0aGUgX19hcmVuYSBhcmdzIG9mIGEga2Z1bmMgY2FsbCB0byBhcmVuYSBrZXJuZWwgYWRkcmVzc2VzLFxuJiM0MzsgKiB4TiA9IGtlcm5fdm1fc3RhcnQgJiM0MzsgKHUzMil4Tiwgd2l0aCB0aGUgYXJlbmEgYmFzZSByZWdpc3RlciBob2xkaW5nXG4mIzQzOyAqIGtlcm5fdm1fc3RhcnQuIEEgbnVsbGFibGUgYXJnIHByZXNlcnZlcyBOVUxMIGJ5IHNraXBwaW5nIHRoZSBhZGQsIHRlc3RlZFxuJiM0MzsgKiBvbiB0aGUgdHJ1bmNhdGVkIHZhbHVlIGFzIGFyZW5hIE5VTEwgaXMgb2Zmc2V0IDAuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IGVtaXRfa2Z1bmNfYXJlbmFfYXJncyhzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4mIzQzO3tcbiYjNDM7XHRjb25zdCB1OCBhcmVuYV92bV9iYXNlID0gYnBmMmE2NFtBUkVOQV9WTV9TVEFSVF07XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICpmbTtcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0Zm0gPSBicGZfaml0X2ZpbmRfa2Z1bmNfbW9kZWwoY3R4LVx1MDAzZXByb2csIGluc24pO1xuJiM0MztcdGlmICghZm0pXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbWluX3QoaW50LCBmbS1cdTAwM2Vucl9hcmdzLCBNQVhfQlBGX0ZVTkNfUkVHX0FSR1MpOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0Y29uc3QgdTggcmVnID0gYnBmMmE2NFtCUEZfUkVHXzEgJiM0MzsgaV07XG4mIzQzO1x0XHR1OCBmbGFncyA9IGZtLVx1MDAzZWFyZ19mbGFnc1tpXTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIShmbGFncyBcdTAwMjYgQlRGX0ZNT0RFTF9BUkVOQV9BUkcpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdGlmIChXQVJOX09OX09OQ0UoIWN0eC1cdTAwM2VhcmVuYV92bV9zdGFydCkpXG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRcdGlmIChmbGFncyBcdTAwMjYgQlRGX0ZNT0RFTF9OVUxMQUJMRV9BUkcpIHtcbiYjNDM7XHRcdFx0LyogMzItYml0IG1vdiBjbGVhcnMgdGhlIHVwcGVyIDMyIGJpdHMgKi9cbiYjNDM7XHRcdFx0ZW1pdChBNjRfTU9WKDAsIHJlZywgcmVnKSwgY3R4KTtcbiYjNDM7XHRcdFx0Lyogc2tpcCB0aGUgYWRkIHNvIHRoYXQgTlVMTCBzdGF5cyBOVUxMICovXG4mIzQzO1x0XHRcdGVtaXQoQTY0X0NCWigwLCByZWcsIDIpLCBjdHgpO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0ZW1pdChBNjRfQUREX1VYVFcocmVnLCBhcmVuYV92bV9iYXNlLCByZWcpLCBjdHgpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gLyogSklUcyBhbiBlQlBGIGluc3RydWN0aW9uLlxuICAqIFJldHVybnM6XG4gICogMCAgLSBzdWNjZXNzZnVsbHkgSklUZWQgYW4gOC1ieXRlIGVCUEYgaW5zdHJ1Y3Rpb24uXG5AQCAtMTY3OCw2ICYjNDM7MTcxNSwxMSBAQCBzdGF0aWMgaW50IGJ1aWxkX2luc24oY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9pbnNuXG4gXHRcdFx0XHRcdCAgICBcdTAwMjZmdW5jX2FkZHIsIFx1MDAyNmZ1bmNfYWRkcl9maXhlZCk7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdGlmIChpbnNuLVx1MDAzZXNyY19yZWcgPT0gQlBGX1BTRVVET19LRlVOQ19DQUxMKSB7XG4mIzQzO1x0XHRcdHJldCA9IGVtaXRfa2Z1bmNfYXJlbmFfYXJncyhjdHgsIGluc24pO1xuJiM0MztcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHR9XG4gXHRcdGVtaXRfY2FsbChmdW5jX2FkZHIsIGN0eCk7XG4gXHRcdC8qXG4gXHRcdCAqIENhbGwgdG8gYXJjaF9icGZfdGltZWRfbWF5X2dvdG8oKSBpcyBlbWl0dGVkIGJ5IHRoZVxuQEAgLTIzNTEsNiAmIzQzOzIzOTMsMTEgQEAgYm9vbCBicGZfaml0X3N1cHBvcnRzX3N0YWNrX2FyZ3Modm9pZClcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbiYjNDM7Ym9vbCBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3Modm9pZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4mIzQzO1xuIHZvaWQgKmJwZl9hcmNoX3RleHRfY29weSh2b2lkICpkc3QsIHZvaWQgKnNyYywgc2l6ZV90IGxlbilcbiB7XG4gXHRpZiAoIWFhcmNoNjRfaW5zbl9jb3B5KGRzdCwgc3JjLCBsZW4pKVxuQEAgLTI1MjQsMzQgJiM0MzsyNTcxLDc2IEBAIHN0YXRpYyB2b2lkIGNsZWFyX2dhcmJhZ2Uoc3RydWN0IGppdF9jdHggKmN0eCwgaW50IHJlZywgaW50IGVmZmVjdGl2ZV9ieXRlcylcbiBcdH1cbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIENvbnZlcnQgYW4gYXJlbmEga2VybmVsIGFkZHJlc3MgaW50byB0aGUgYXJlbmEgcG9pbnRlciBmb3JtIG9uIGl0cyB3YXkgaW50b1xuJiM0MzsgKiB0aGUgQlBGIGN0eCwgZHN0ID0gKHUzMikoc3JjIC0ga2Vybl92bV9zdGFydCksIHdpdGggQGJhc2VfbG8gaG9sZGluZyB0aGUgbG93XG4mIzQzOyAqIDMyIGJpdHMgb2Yga2Vybl92bV9zdGFydC4gQSBudWxsYWJsZSBhcmcgcHJlc2VydmVzIE5VTEwsIHRlc3RlZCBvbiB0aGUgZnVsbFxuJiM0MzsgKiA2NC1iaXQga2VybmVsIHBvaW50ZXIuIFRoZSAzMi1iaXQgc3VidHJhY3Rpb24gYm90aCB0cnVuY2F0ZXMgYW5kIGNsZWFycyB0aGVcbiYjNDM7ICogdXBwZXIgaGFsZiwgc28gdGhlIHN0b3JlZCB2YWx1ZSBzYXRpc2ZpZXMgdGhlIEpJVCBpbnZhcmlhbnQgZm9yIGFyZW5hXG4mIzQzOyAqIHBvaW50ZXIgcmVnaXN0ZXJzLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgZW1pdF9hcmVuYV9hcmdfY29udihzdHJ1Y3Qgaml0X2N0eCAqY3R4LCB1OCBkc3QsIHU4IHNyYywgYm9vbCBudWxsYWJsZSwgdTggYmFzZV9sbylcbiYjNDM7e1xuJiM0MztcdGlmIChudWxsYWJsZSkge1xuJiM0MztcdFx0aWYgKGRzdCAhPSBzcmMpXG4mIzQzO1x0XHRcdGVtaXQoQTY0X01PVigxLCBkc3QsIHNyYyksIGN0eCk7XG4mIzQzO1x0XHQvKiBza2lwIHRoZSBzdWJ0cmFjdGlvbiBzbyB0aGF0IE5VTEwgc3RheXMgTlVMTCAqL1xuJiM0MztcdFx0ZW1pdChBNjRfQ0JaKDEsIGRzdCwgMiksIGN0eCk7XG4mIzQzO1x0XHRzcmMgPSBkc3Q7XG4mIzQzO1x0fVxuJiM0MztcdGVtaXQoQTY0X1NVQigwLCBkc3QsIHNyYywgYmFzZV9sbyksIGN0eCk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgc2F2ZV9hcmdzKHN0cnVjdCBqaXRfY3R4ICpjdHgsIGludCBiYXJnc19vZmYsIGludCBvYXJnc19vZmYsXG4tXHRcdCAgICAgIGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSxcbi1cdFx0ICAgICAgY29uc3Qgc3RydWN0IGFyZ19hdXggKmEsXG4tXHRcdCAgICAgIGJvb2wgZm9yX2NhbGxfb3JpZ2luKVxuJiM0MztcdFx0ICAgICAgY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCBjb25zdCBzdHJ1Y3QgYXJnX2F1eCAqYSxcbiYjNDM7XHRcdCAgICAgIGJvb2wgZm9yX2NhbGxfb3JpZ2luLCBib29sIGlzX3N0cnVjdF9vcHMsIHU2NCBhcmVuYV9iYXNlKVxuIHtcbi1cdGludCBpO1xuLVx0aW50IHJlZztcbi1cdGludCBkb2ZmO1xuLVx0aW50IHNvZmY7XG4tXHRpbnQgc2xvdHM7XG4gXHR1OCB0bXAgPSBicGYyYTY0W1RNUF9SRUdfMV07XG4mIzQzO1x0dTggYmFzZV9sbyA9IGJwZjJhNjRbVE1QX1JFR18yXTtcbiYjNDM7XHRpbnQgaSwgcmVnLCBkb2ZmLCBzb2ZmLCBzbG90cztcbiYjNDM7XG4mIzQzO1x0Lyogb25seSB0aGUgbG93IDMyIGJpdHMgb2YgdGhlIGJhc2UgdGFrZSBwYXJ0IGluIHRoZSBzdWJ0cmFjdGlvbiAqL1xuJiM0MztcdGlmIChhcmVuYV9iYXNlKVxuJiM0MztcdFx0ZW1pdF9hNjRfbW92X2koMCwgYmFzZV9sbywgKHMzMikodTMyKWFyZW5hX2Jhc2UsIGN0eCk7XG4gXG4gXHQvKiBzdG9yZSBhcmd1bWVudHMgdG8gdGhlIHN0YWNrIGZvciB0aGUgYnBmIHByb2dyYW0sIG9yIHJlc3RvcmVcbiBcdCAqIGFyZ3VtZW50cyBmcm9tIHN0YWNrIGZvciB0aGUgb3JpZ2luYWwgZnVuY3Rpb25cbiBcdCAqL1xuLVx0Zm9yIChyZWcgPSAwOyByZWcgXHUwMDNjIGEtXHUwMDNlcmVnc19mb3JfYXJnczsgcmVnJiM0MzsmIzQzOykge1xuLVx0XHRlbWl0KGZvcl9jYWxsX29yaWdpbiA/XG4tXHRcdCAgICAgQTY0X0xEUjY0SShyZWcsIEE2NF9TUCwgYmFyZ3Nfb2ZmKSA6XG4tXHRcdCAgICAgQTY0X1NUUjY0SShyZWcsIEE2NF9TUCwgYmFyZ3Nfb2ZmKSxcbi1cdFx0ICAgICBjdHgpO1xuLVx0XHRiYXJnc19vZmYgJiM0Mzs9IDg7XG4mIzQzO1x0Zm9yIChpID0gMCwgcmVnID0gMDsgaSBcdTAwM2MgYS1cdTAwM2VhcmdzX2luX3JlZ3M7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRib29sIGFyZW5hX2FyZyA9IGFyZW5hX2Jhc2UgXHUwMDI2XHUwMDI2IChtLVx1MDAzZWFyZ19mbGFnc1tpXSBcdTAwMjYgQlRGX0ZNT0RFTF9BUkVOQV9BUkcpO1xuJiM0MztcdFx0Ym9vbCBudWxsYWJsZSA9IG0tXHUwMDNlYXJnX2ZsYWdzW2ldIFx1MDAyNiBCVEZfRk1PREVMX05VTExBQkxFX0FSRztcbiYjNDM7XG4mIzQzO1x0XHRzbG90cyA9IChtLVx1MDAzZWFyZ19zaXplW2ldICYjNDM7IDcpIC8gODtcbiYjNDM7XHRcdHdoaWxlIChzbG90cy0tIFx1MDAzZSAwKSB7XG4mIzQzO1x0XHRcdGlmIChmb3JfY2FsbF9vcmlnaW4pIHtcbiYjNDM7XHRcdFx0XHRlbWl0KEE2NF9MRFI2NEkocmVnLCBBNjRfU1AsIGJhcmdzX29mZiksIGN0eCk7XG4mIzQzO1x0XHRcdH0gZWxzZSBpZiAoYXJlbmFfYXJnKSB7XG4mIzQzO1x0XHRcdFx0ZW1pdF9hcmVuYV9hcmdfY29udihjdHgsIHRtcCwgcmVnLCBudWxsYWJsZSwgYmFzZV9sbyk7XG4mIzQzO1x0XHRcdFx0ZW1pdChBNjRfU1RSNjRJKHRtcCwgQTY0X1NQLCBiYXJnc19vZmYpLCBjdHgpO1xuJiM0MztcdFx0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRcdGVtaXQoQTY0X1NUUjY0SShyZWcsIEE2NF9TUCwgYmFyZ3Nfb2ZmKSwgY3R4KTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRyZWcmIzQzOyYjNDM7O1xuJiM0MztcdFx0XHRiYXJnc19vZmYgJiM0Mzs9IDg7XG4mIzQzO1x0XHR9XG4gXHR9XG4gXG4tXHRzb2ZmID0gMzI7IC8qIG9uIHN0YWNrIGFyZ3VtZW50cyBzdGFydCBmcm9tIEZQICYjNDM7IDMyICovXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBPbi1zdGFjayBhcmd1bWVudHMgc3RhcnQgYWJvdmUgdGhlIGZyYW1lKHMpIHB1c2hlZCBieSB0aGUgdHJhbXBvbGluZVxuJiM0MztcdCAqIHByb2xvZ3VlLiBFbnRlcmVkIHRocm91Z2ggdGhlIGZlbnRyeSBjYWxsIGZyb20gYSB0cmFjZWQgZnVuY3Rpb24sIHRoZVxuJiM0MztcdCAqIHByb2xvZ3VlIHNhdmVzIGJvdGggdGhlIHBhcmVudCAoRlAveDkpIGFuZCB0aGUgdHJhY2VkIGZ1bmN0aW9uXG4mIzQzO1x0ICogKEZQL0xSKSBmcmFtZXMsIHNvIHRoZSBhcmd1bWVudHMgc3RhcnQgYXQgRlAgJiM0MzsgMzIuIEEgc3RydWN0X29wc1xuJiM0MztcdCAqIGNhbGxiYWNrIGlzIGNhbGxlZCBpbmRpcmVjdGx5IGFuZCBvbmx5IHRoZSBGUC9MUiBmcmFtZSBpcyBzYXZlZCwgc29cbiYjNDM7XHQgKiB0aGV5IHN0YXJ0IGF0IEZQICYjNDM7IDE2LlxuJiM0MztcdCAqL1xuJiM0MztcdHNvZmYgPSBpc19zdHJ1Y3Rfb3BzID8gMTYgOiAzMjtcbiBcdGRvZmYgPSAoZm9yX2NhbGxfb3JpZ2luID8gb2FyZ3Nfb2ZmIDogYmFyZ3Nfb2ZmKTtcbiBcbiBcdC8qIHNhdmUgb24gc3RhY2sgYXJndW1lbnRzICovXG4gXHRmb3IgKGkgPSBhLVx1MDAzZWFyZ3NfaW5fcmVnczsgaSBcdTAwM2MgbS1cdTAwM2Vucl9hcmdzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0Ym9vbCBhcmVuYV9hcmcgPSBhcmVuYV9iYXNlIFx1MDAyNlx1MDAyNiAobS1cdTAwM2VhcmdfZmxhZ3NbaV0gXHUwMDI2IEJURl9GTU9ERUxfQVJFTkFfQVJHKTtcbiYjNDM7XHRcdGJvb2wgbnVsbGFibGUgPSBtLVx1MDAzZWFyZ19mbGFnc1tpXSBcdTAwMjYgQlRGX0ZNT0RFTF9OVUxMQUJMRV9BUkc7XG4mIzQzO1xuIFx0XHRzbG90cyA9IChtLVx1MDAzZWFyZ19zaXplW2ldICYjNDM7IDcpIC8gODtcbiBcdFx0LyogdmVyaWZpZXIgZW5zdXJlcyBhcmdfc2l6ZSBcdTAwM2M9IDE2LCBzbyBzbG90cyBlcXVhbHMgMSBvciAyICovXG4gXHRcdHdoaWxlIChzbG90cy0tIFx1MDAzZSAwKSB7XG5AQCAtMjU2MSw2ICYjNDM7MjY1MCwxNSBAQCBzdGF0aWMgdm9pZCBzYXZlX2FyZ3Moc3RydWN0IGppdF9jdHggKmN0eCwgaW50IGJhcmdzX29mZiwgaW50IG9hcmdzX29mZixcbiBcdFx0XHQgKi9cbiBcdFx0XHRpZiAoc2xvdHMgPT0gMCBcdTAwMjZcdTAwMjYgIWZvcl9jYWxsX29yaWdpbilcbiBcdFx0XHRcdGNsZWFyX2dhcmJhZ2UoY3R4LCB0bXAsIG0tXHUwMDNlYXJnX3NpemVbaV0gJSA4KTtcbiYjNDM7XHRcdFx0LypcbiYjNDM7XHRcdFx0ICogTm8gZ3VhcmQgb24gZm9yX2NhbGxfb3JpZ2luIGhlcmU6IG9ubHkgdGhlIGluZGlyZWN0XG4mIzQzO1x0XHRcdCAqIHRyYW1wb2xpbmUgaXMgZ2l2ZW4gYSBiYXNlLCBhbmQgaXQgbmV2ZXIgY2FsbHMgdGhlXG4mIzQzO1x0XHRcdCAqIG9yaWdpbmFsIGZ1bmN0aW9uLCBzbyBhcmd1bWVudHMgYXJlIG5ldmVyIGNvbnZlcnRlZFxuJiM0MztcdFx0XHQgKiBvbiB0aGVpciB3YXkgYmFjayBvdXQgdG8gaXQuIFNlZSB0aGUgV0FSTl9PTl9PTkNFKClcbiYjNDM7XHRcdFx0ICogaW4gcHJlcGFyZV90cmFtcG9saW5lKCkuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRpZiAoYXJlbmFfYXJnKVxuJiM0MztcdFx0XHRcdGVtaXRfYXJlbmFfYXJnX2NvbnYoY3R4LCB0bXAsIHRtcCwgbnVsbGFibGUsIGJhc2VfbG8pO1xuIFx0XHRcdGVtaXQoQTY0X1NUUjY0SSh0bXAsIEE2NF9TUCwgZG9mZiksIGN0eCk7XG4gXHRcdFx0c29mZiAmIzQzOz0gODtcbiBcdFx0XHRkb2ZmICYjNDM7PSA4O1xuQEAgLTI2MjAsOCAmIzQzOzI3MTgsMjEgQEAgc3RhdGljIGludCBwcmVwYXJlX3RyYW1wb2xpbmUoc3RydWN0IGppdF9jdHggKmN0eCwgc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sXG4gXHRib29sIGlzX3N0cnVjdF9vcHMgPSBpc19zdHJ1Y3Rfb3BzX3RyYW1wKGZlbnRyeSk7XG4gXHRpbnQgY29va2llX29mZiwgY29va2llX2NudCwgY29va2llX2JhcmdzX29mZjtcbiBcdGludCBmc2Vzc2lvbl9jbnQgPSBicGZfZnNlc3Npb25fY250KHRub2Rlcyk7XG4mIzQzO1x0dTY0IGFyZW5hX2Jhc2U7XG4gXHR1NjQgZnVuY19tZXRhO1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogRl9JTkRJUkVDVCBpcyBvbmx5IGNvbXBhdGlibGUgd2l0aCBGX1JFVF9GRU5UUllfUkVULCBpdCBpcyBleHBsaWNpdGx5XG4mIzQzO1x0ICogaW5jb21wYXRpYmxlIHdpdGggRl9DQUxMX09SSUcgfCBGX1NLSVBfRlJBTUUgfCBGX0lQX0FSRyBiZWNhdXNlXG4mIzQzO1x0ICogQGZ1bmNfYWRkci4gQXJlbmEgY29udmVyc2lvbiByZWxpZXMgb24gdGhpczogYnBmX3RyYW1wX2FyZW5hX2Jhc2UoKVxuJiM0MztcdCAqIG9ubHkgcmV0dXJucyBhIGJhc2UgZm9yIHRoZSBpbmRpcmVjdCB0cmFtcG9saW5lLCB3aGljaCB0aGVyZWZvcmVcbiYjNDM7XHQgKiBuZXZlciBjYWxscyB0aGUgb3JpZ2luYWwgZnVuY3Rpb24gd2l0aCBjb252ZXJ0ZWQgYXJndW1lbnRzLlxuJiM0MztcdCAqL1xuJiM0MztcdFdBUk5fT05fT05DRSgoZmxhZ3MgXHUwMDI2IEJQRl9UUkFNUF9GX0lORElSRUNUKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAgKGZsYWdzIFx1MDAyNiB+KEJQRl9UUkFNUF9GX0lORElSRUNUIHwgQlBGX1RSQU1QX0ZfUkVUX0ZFTlRSWV9SRVQpKSk7XG4mIzQzO1xuJiM0MztcdGFyZW5hX2Jhc2UgPSBicGZfdHJhbXBfYXJlbmFfYmFzZShtLCB0bm9kZXMsIGZsYWdzKTtcbiYjNDM7XG4gXHQvKiB0cmFtcG9saW5lIHN0YWNrIGxheW91dDpcbiBcdCAqICAgICAgICAgICAgICAgICAgICBbIHBhcmVudCBpcCAgICAgICAgIF1cbiBcdCAqICAgICAgICAgICAgICAgICAgICBbIEZQICAgICAgICAgICAgICAgIF1cbkBAIC0yNzM3LDcgJiM0MzsyODQ4LDcgQEAgc3RhdGljIGludCBwcmVwYXJlX3RyYW1wb2xpbmUoc3RydWN0IGppdF9jdHggKmN0eCwgc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sXG4gXHRzdG9yZV9mdW5jX21ldGEoY3R4LCBmdW5jX21ldGEsIGZ1bmNfbWV0YV9vZmYpO1xuIFxuIFx0Lyogc2F2ZSBhcmdzIGZvciBicGYgKi9cbi1cdHNhdmVfYXJncyhjdHgsIGJhcmdzX29mZiwgb2FyZ3Nfb2ZmLCBtLCBhLCBmYWxzZSk7XG4mIzQzO1x0c2F2ZV9hcmdzKGN0eCwgYmFyZ3Nfb2ZmLCBvYXJnc19vZmYsIG0sIGEsIGZhbHNlLCBpc19zdHJ1Y3Rfb3BzLCBhcmVuYV9iYXNlKTtcbiBcbiBcdC8qIHNhdmUgY2FsbGVlIHNhdmVkIHJlZ2lzdGVycyAqL1xuIFx0ZW1pdChBNjRfU1RSNjRJKEE2NF9SKDE5KSwgQTY0X1NQLCByZWdzX29mZiksIGN0eCk7XG5AQCAtMjc4NSw4ICYjNDM7Mjg5Niw4IEBAIHN0YXRpYyBpbnQgcHJlcGFyZV90cmFtcG9saW5lKHN0cnVjdCBqaXRfY3R4ICpjdHgsIHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLFxuIFx0fVxuIFxuIFx0aWYgKGZsYWdzIFx1MDAyNiBCUEZfVFJBTVBfRl9DQUxMX09SSUcpIHtcbi1cdFx0Lyogc2F2ZSBhcmdzIGZvciBvcmlnaW5hbCBmdW5jICovXG4tXHRcdHNhdmVfYXJncyhjdHgsIGJhcmdzX29mZiwgb2FyZ3Nfb2ZmLCBtLCBhLCB0cnVlKTtcbiYjNDM7XHRcdC8qIHRoZSBvcmlnaW5hbCBmdW5jIHRha2VzIGtlcm5lbCBhZGRyZXNzZXMsIG5ldmVyIGNvbnZlcnRlZCBvbmVzICovXG4mIzQzO1x0XHRzYXZlX2FyZ3MoY3R4LCBiYXJnc19vZmYsIG9hcmdzX29mZiwgbSwgYSwgdHJ1ZSwgaXNfc3RydWN0X29wcywgMCk7XG4gXHRcdC8qIGNhbGwgb3JpZ2luYWwgZnVuYyAqL1xuIFx0XHRlbWl0KEE2NF9MRFI2NEkoQTY0X1IoMTApLCBBNjRfU1AsIHJldGFkZHJfb2ZmKSwgY3R4KTtcbiBcdFx0ZW1pdChBNjRfQURSKEE2NF9MUiwgQUFSQ0g2NF9JTlNOX1NJWkUgKiAyKSwgY3R4KTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3N0cnVjdF9vcHNfYXJlbmEuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3Rfc3RydWN0X29wc19hcmVuYS5jXG5pbmRleCA5NDBlYzJjZGEwZDUyLi43ZjlmNTRiYTNmYmU1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9zdHJ1Y3Rfb3BzX2FyZW5hLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3Rfc3RydWN0X29wc19hcmVuYS5jXG5AQCAtNiw3ICYjNDM7Niw3IEBAXG4gI2luY2x1ZGUgXCYjMzQ7c3RydWN0X29wc19hcmVuYV9hdHRhY2guc2tlbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7c3RydWN0X29wc19hcmVuYV9mYWlsLnNrZWwuaFwmIzM0O1xuIFxuLSNpZiBkZWZpbmVkKF9feDg2XzY0X18pXG4mIzQzOyNpZiBkZWZpbmVkKF9feDg2XzY0X18pIHx8IGRlZmluZWQoX19hYXJjaDY0X18pXG4gLypcbiAgKiBBdHRhY2ggY2FsbGJhY2tzIHdpdGggX19hcmVuYSBhbmQgX19hcmVuYV9fbnVsbGFibGUgYXJndW1lbnRzIGFuZCBkcml2ZVxuICAqIHRoZW0gdGhyb3VnaCB0aGUgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmEqKCkga2Z1bmNzLlxuQEAgLTExMSwxMSAmIzQzOzExMSwxMSBAQCBzdGF0aWMgdm9pZCBhcmVuYV9hcmdfYXR0YWNoKHZvaWQpXG4gdm9pZCBzZXJpYWxfdGVzdF9zdHJ1Y3Rfb3BzX2FyZW5hKHZvaWQpXG4ge1xuIFx0Lypcbi1cdCAqIEFyZW5hIHN0cnVjdF9vcHMgYXJndW1lbnRzIG5lZWQgSklUIHN1cHBvcnQsIGN1cnJlbnRseSB4ODYtNjQgb25seS5cbi1cdCAqIEVsc2V3aGVyZSB2ZXJpZmljYXRpb24gZmFpbHMgd2l0aCBcJiMzNDtKSVQgZG9lcyBub3Qgc3VwcG9ydCBhcmVuYVxuLVx0ICogYXJndW1lbnRzXCYjMzQ7LCBzbyB0aGUgcHJvZ3JhbXMgY2Fubm90IGV2ZW4gbG9hZC5cbiYjNDM7XHQgKiBBcmVuYSBzdHJ1Y3Rfb3BzIGFyZ3VtZW50cyBuZWVkIEpJVCBzdXBwb3J0LCBjdXJyZW50bHkgeDg2LTY0IGFuZFxuJiM0MztcdCAqIGFybTY0IG9ubHkuIEVsc2V3aGVyZSB2ZXJpZmljYXRpb24gZmFpbHMgd2l0aCBcJiMzNDtKSVQgZG9lcyBub3Qgc3VwcG9ydFxuJiM0MztcdCAqIGFyZW5hIGFyZ3VtZW50c1wmIzM0Oywgc28gdGhlIHByb2dyYW1zIGNhbm5vdCBldmVuIGxvYWQuXG4gXHQgKi9cbi0jaWYgZGVmaW5lZChfX3g4Nl82NF9fKVxuJiM0MzsjaWYgZGVmaW5lZChfX3g4Nl82NF9fKSB8fCBkZWZpbmVkKF9fYWFyY2g2NF9fKVxuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7YXJlbmFfYXJnXCYjMzQ7KSlcbiBcdFx0YXJlbmFfYXJnKCk7XG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDthcmVuYV9hcmdfZmFpbFwmIzM0OykpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmMuY1xuaW5kZXggY2RjZWE4ODlkYTU4Ni4uYmYwZDMwNGUwZTU5YyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmMuY1xuQEAgLTI3LDYgJiM0MzsyNyw3IEBAIHZvbGF0aWxlIHU2NCBzdGFzaDtcbiBcbiBTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OylcbiBfX2FyY2hfeDg2XzY0XG4mIzQzO19fYXJjaF9hcm02NFxuIF9fc3VjY2VzcyBfX3JldHZhbCgwKVxuIGludCBhcmVuYV9hcmdfZm9ybXModm9pZCAqY3R4KVxuIHtcbkBAIC03MCw2ICYjNDM7NzEsNyBAQCBpbnQgYXJlbmFfYXJnX2Zvcm1zKHZvaWQgKmN0eClcbiAgKi9cbiBTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OylcbiBfX2FyY2hfeDg2XzY0XG4mIzQzO19fYXJjaF9hcm02NFxuIF9fc3VjY2VzcyBfX3JldHZhbCgwKVxuIGludCBhcmVuYV9hcmdfcmViYXNlKHZvaWQgKmN0eClcbiB7XG5AQCAtMTExLDYgJiM0MzsxMTMsNyBAQCBpbnQgYXJlbmFfYXJnX3JlYmFzZSh2b2lkICpjdHgpXG4gXG4gU0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspXG4gX19hcmNoX3g4Nl82NFxuJiM0MztfX2FyY2hfYXJtNjRcbiBfX3N1Y2Nlc3MgX19yZXR2YWwoMClcbiBpbnQgYXJlbmFfYXJnczUodm9pZCAqY3R4KVxuIHtcbkBAIC0xNDIsNiAmIzQzOzE0NSw3IEBAIGludCBhcmVuYV9hcmdzNSh2b2lkICpjdHgpXG4gXG4gU0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspXG4gX19hcmNoX3g4Nl82NFxuJiM0MztfX2FyY2hfYXJtNjRcbiBfX3N1Y2Nlc3MgX19yZXR2YWwoMClcbiBpbnQgYXJlbmFfYXJnX21peGVkKHZvaWQgKmN0eClcbiB7XG5AQCAtMTY5LDYgJiM0MzsxNzMsNyBAQCBpbnQgYXJlbmFfYXJnX21peGVkKHZvaWQgKmN0eClcbiAvKiBrZXJuZWwtc2lkZSBmYXVsdHMgb24gdW5wb3B1bGF0ZWQgcGFnZXMgcmVjb3ZlciB2aWEgdGhlIHNjcmF0Y2ggcGFnZSAqL1xuIFNFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KVxuIF9fYXJjaF94ODZfNjRcbiYjNDM7X19hcmNoX2FybTY0XG4gX19zdWNjZXNzIF9fcmV0dmFsKDApXG4gaW50IGFyZW5hX2FyZ191bnBvcHVsYXRlZCh2b2lkICpjdHgpXG4ge1xuQEAgLTE4OSw2ICYjNDM7MTk0LDcgQEAgaW50IGFyZW5hX2FyZ191bnBvcHVsYXRlZCh2b2lkICpjdHgpXG4gXG4gU0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspXG4gX19hcmNoX3g4Nl82NFxuJiM0MztfX2FyY2hfYXJtNjRcbiBfX2ZhaWx1cmUgX19tc2coXCYjMzQ7YXJlbmEgcG9pbnRlciByZXF1aXJlcyBhIHByb2dyYW0gd2l0aCBhbiBhc3NvY2lhdGVkIGFyZW5hXCYjMzQ7KVxuIGludCBhcmVuYV9hcmdfbm9fYXJlbmEodm9pZCAqY3R4KVxuIHtcbkBAIC0xOTgsNiAmIzQzOzIwNCw3IEBAIGludCBhcmVuYV9hcmdfbm9fYXJlbmEodm9pZCAqY3R4KVxuIFxuIFNFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KVxuIF9fYXJjaF94ODZfNjRcbiYjNDM7X19hcmNoX2FybTY0XG4gX19mYWlsdXJlIF9fbXNnKFwmIzM0O2lzIG5vdCBhIHBvaW50ZXIgdG8gYXJlbmEgb3Igc2NhbGFyXCYjMzQ7KVxuIGludCBhcmVuYV9hcmdfYmFkX3JlZyh2b2lkICpjdHgpXG4ge1xuQEAgLTIxMyw2ICYjNDM7MjIwLDcgQEAgaW50IGFyZW5hX2FyZ19iYWRfcmVnKHZvaWQgKmN0eClcbiBcdGRlZmluZWQoX19CUEZfRkVBVFVSRV9TVEFDS19BUkdVTUVOVClcbiBTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OylcbiBfX2FyY2hfeDg2XzY0XG4mIzQzO19fYXJjaF9hcm02NFxuIF9fZmFpbHVyZSBfX21zZyhcJiMzNDthcmVuYSBwb2ludGVyIGNhbm5vdCBiZSBhIHN0YWNrIGFyZ3VtZW50XCYjMzQ7KVxuIGludCBhcmVuYV9hcmdfc3RhY2sodm9pZCAqY3R4KVxuIHtcbkBAIC0yMjMsNiAmIzQzOzIzMSw3IEBAIGludCBhcmVuYV9hcmdfc3RhY2sodm9pZCAqY3R4KVxuICNlbHNlXG4gU0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspXG4gX19hcmNoX3g4Nl82NFxuJiM0MztfX2FyY2hfYXJtNjRcbiBfX2Rlc2NyaXB0aW9uKFwmIzM0O2FyZW5hX2FyZ19zdGFjazogbm90IHN1cHBvcnRlZCwgZHVtbXkgdGVzdFwmIzM0OylcbiBfX3N1Y2Nlc3NcbiBpbnQgYXJlbmFfYXJnX3N0YWNrKHZvaWQgKmN0eClcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmNfaml0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmNfaml0LmNcbmluZGV4IGM5YjkxODY2MjYxNjIuLmI1YTAxY2JjMzNhNzMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmNfaml0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuY19qaXQuY1xuQEAgLTMyLDYgJiM0MzszMiwxMCBAQCBfX2ppdGVkKFwmIzM0O1x0bW92bFx0JWVkaSwgJWVkaVwmIzM0OylcbiBfX2ppdGVkKFwmIzM0O1x0YWRkcVx0JXIxMiwgJXJkaVwmIzM0OylcbiBfX2ppdGVkKFwmIzM0Oy4uLlwmIzM0OylcbiBfX2ppdGVkKFwmIzM0O1x0Y2FsbHFcdHt7Lip9fVwmIzM0OylcbiYjNDM7X19hcmNoX2FybTY0XG4mIzQzO19faml0ZWQoXCYjMzQ7Li4uXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0YWRkXHR4MCwgeDI4LCB3MCwgdXh0d1wmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdHt7KGJsfG1vdilcdC4qfX1cJiMzNDspXG4gX19zdWNjZXNzXG4gaW50IGFyZW5hX2FyZ19qaXRfcmViYXNlKHZvaWQgKmN0eClcbiB7XG5AQCAtNDgsNiAmIzQzOzUyLDEyIEBAIF9faml0ZWQoXCYjMzQ7XHR0ZXN0bFx0JWVkaSwgJWVkaVwmIzM0OylcbiBfX2ppdGVkKFwmIzM0O1x0amVcdEwwXCYjMzQ7KVxuIF9faml0ZWQoXCYjMzQ7XHRhZGRxXHQlcjEyLCAlcmRpXCYjMzQ7KVxuIF9faml0ZWQoXCYjMzQ7TDA6XHRjYWxscVx0e3suKn19XCYjMzQ7KVxuJiM0MztfX2FyY2hfYXJtNjRcbiYjNDM7X19qaXRlZChcJiMzNDsuLi5cJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRtb3ZcdHcwLCB3MFwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdGNielx0dzAsIEwwXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0YWRkXHR4MCwgeDI4LCB3MCwgdXh0d1wmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtMMDpcdHt7Lip9fVwmIzM0OylcbiBfX3N1Y2Nlc3NcbiBpbnQgYXJlbmFfYXJnX2ppdF9udWxsYWJsZSh2b2lkICpjdHgpXG4ge1xuQEAgLTcyLDYgJiM0Mzs4MiwxNiBAQCBfX2ppdGVkKFwmIzM0O1x0dGVzdGxcdCVyOGQsICVyOGRcJiMzNDspXG4gX19qaXRlZChcJiMzNDtcdGplXHRMMFwmIzM0OylcbiBfX2ppdGVkKFwmIzM0O1x0YWRkcVx0JXIxMiwgJXI4XCYjMzQ7KVxuIF9faml0ZWQoXCYjMzQ7TDA6XHRjYWxscVx0e3suKn19XCYjMzQ7KVxuJiM0MztfX2FyY2hfYXJtNjRcbiYjNDM7X19qaXRlZChcJiMzNDsuLi5cJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRhZGRcdHgwLCB4MjgsIHcwLCB1eHR3XCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0YWRkXHR4MSwgeDI4LCB3MSwgdXh0d1wmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdGFkZFx0eDIsIHgyOCwgdzIsIHV4dHdcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRhZGRcdHgzLCB4MjgsIHczLCB1eHR3XCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0bW92XHR3NCwgdzRcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRjYnpcdHc0LCBMMFwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdGFkZFx0eDQsIHgyOCwgdzQsIHV4dHdcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7TDA6XHR7ey4qfX1cJiMzNDspXG4gX19zdWNjZXNzXG4gaW50IGFyZW5hX2FyZ19qaXRfYXJnczUodm9pZCAqY3R4KVxuIHtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RydWN0X29wc19hcmVuYS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfYXJlbmEuY1xuaW5kZXggYmEwNGM3M2Q4ZDk2Ny4uOGFhODYzOWRmOTFmMCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJ1Y3Rfb3BzX2FyZW5hLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJ1Y3Rfb3BzX2FyZW5hLmNcbkBAIC01OSwxMSAmIzQzOzU5LDI4IEBAIGludCB0ZXN0X2FyZW5hX3N0YWNrX2NiKHVuc2lnbmVkIGxvbmcgbG9uZyAqY3R4KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztTRUMoXCYjMzQ7c3RydWN0X29wcy90ZXN0X2FyZW5hX211bHRpc2xvdFwmIzM0OylcbiYjNDM7aW50IHRlc3RfYXJlbmFfbXVsdGlzbG90X2NiKHVuc2lnbmVkIGxvbmcgbG9uZyAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0dTY0IF9fYXJlbmEgKnB0ciA9ICh1NjQgX19hcmVuYSAqKWN0eFsyXTtcbiYjNDM7XG4mIzQzO1x0YXJlbmFfdG91Y2gmIzQzOyYjNDM7O1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVGhlIDE2LWJ5dGUgc3RydWN0IG9jY3VwaWVzIGN0eFswXSBhbmQgY3R4WzFdLCBzbyBAcHRyIGlzIGFyZ3VtZW50XG4mIzQzO1x0ICogb25lIGJ1dCBzbG90IHR3by4gR2V0dGluZyB0aGF0IHdyb25nIGhhbmRzIHRoZSBjYWxsYmFjayBhIHNjYWxhci5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoY3R4WzBdICE9IDExIHx8IGN0eFsxXSAhPSAyMilcbiYjNDM7XHRcdHJldHVybiAweGJhZDtcbiYjNDM7XHQqcHRyICYjNDM7PSAxO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIFNFQyhcJiMzNDsuc3RydWN0X29wcy5saW5rXCYjMzQ7KVxuIHN0cnVjdCBicGZfdGVzdG1vZF9vcHMzIHRlc3Rtb2RfYXJlbmEgPSB7XG4gXHQudGVzdF9hcmVuYSA9ICh2b2lkICopdGVzdF9hcmVuYV9jYixcbiBcdC50ZXN0X2FyZW5hX251bGxhYmxlID0gKHZvaWQgKil0ZXN0X2FyZW5hX251bGxhYmxlX2NiLFxuIFx0LnRlc3RfYXJlbmFfc3RhY2sgPSAodm9pZCAqKXRlc3RfYXJlbmFfc3RhY2tfY2IsXG4mIzQzO1x0LnRlc3RfYXJlbmFfbXVsdGlzbG90ID0gKHZvaWQgKil0ZXN0X2FyZW5hX211bHRpc2xvdF9jYixcbiB9O1xuIFxuIFNFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KVxuQEAgLTEwOSw2ICYjNDM7MTI2LDEzIEBAIGludCB0cmlnZ2VyKHZvaWQgKmN0eClcbiBcdGlmICgqdmFsICE9IDQ0KVxuIFx0XHRyZXR1cm4gOTtcbiBcbiYjNDM7XHQvKiBhIG11bHRpLXNsb3QgYXJnIHByZWNlZGVzIHRoZSBhcmVuYSBwb2ludGVyIGhlcmUgKi9cbiYjNDM7XHRyZXQgPSBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9tdWx0aXNsb3QoKHU2NCAqKXZhbCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiAxMDtcbiYjNDM7XHRpZiAoKnZhbCAhPSA0NSlcbiYjNDM7XHRcdHJldHVybiAxMTtcbiYjNDM7XG4gXHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKXZhbCwgMSk7XG4gI2VuZGlmXG4gXHRyZXR1cm4gMDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuY1xuaW5kZXggYTYxMzNmNzUyMWYzNC4uOTM2NmEzYzU3OGYxMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmNcbkBAIC00MDIsMTIgJiM0Mzs0MDIsMTkgQEAgc3RhdGljIGludCBicGZfdGVzdG1vZF9vcHMzX190ZXN0X2FyZW5hX3N0YWNrKHU2NCBhLCB1NjQgYiwgdTY0IGMsIHU2NCBkLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmFfbXVsdGlzbG90KHN0cnVjdCBicGZfdGVzdG1vZF9hcmVuYV9wYWlyIHAsXG4mIzQzO1x0XHRcdFx0XHRcdCAgdTY0ICpwdHJfX2FyZW5hKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHN0cnVjdCBicGZfdGVzdG1vZF9vcHMzIF9fYnBmX3Rlc3Rtb2Rfb3BzMyA9IHtcbiBcdC50ZXN0XzEgPSBicGZfdGVzdG1vZF90ZXN0XzMsXG4gXHQudGVzdF8yID0gYnBmX3Rlc3Rtb2RfdGVzdF80LFxuIFx0LnRlc3RfYXJlbmEgPSBicGZfdGVzdG1vZF9vcHMzX190ZXN0X2FyZW5hLFxuIFx0LnRlc3RfYXJlbmFfbnVsbGFibGUgPSBicGZfdGVzdG1vZF9vcHMzX190ZXN0X2FyZW5hX251bGxhYmxlLFxuIFx0LnRlc3RfYXJlbmFfc3RhY2sgPSBicGZfdGVzdG1vZF9vcHMzX190ZXN0X2FyZW5hX3N0YWNrLFxuJiM0MztcdC50ZXN0X2FyZW5hX211bHRpc2xvdCA9IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmFfbXVsdGlzbG90LFxuIH07XG4gXG4gc3RhdGljIHZvaWQgYnBmX3Rlc3Rtb2RfdGVzdF9zdHJ1Y3Rfb3BzMyh2b2lkKVxuQEAgLTQ0MSw2ICYjNDM7NDQ4LDEzIEBAIF9fYnBmX2tmdW5jIGludCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9zdGFjayh1NjQgKnB0cl9fYXJlbmEpXG4gXHRyZXR1cm4gc3Rfb3BzMy1cdTAwM2V0ZXN0X2FyZW5hX3N0YWNrKDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIHB0cl9fYXJlbmEpO1xuIH1cbiBcbiYjNDM7X19icGZfa2Z1bmMgaW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX211bHRpc2xvdCh1NjQgKnB0cl9fYXJlbmEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX3Rlc3Rtb2RfYXJlbmFfcGFpciBwID0geyAuYSA9IDExLCAuYiA9IDIyIH07XG4mIzQzO1xuJiM0MztcdHJldHVybiBzdF9vcHMzLVx1MDAzZXRlc3RfYXJlbmFfbXVsdGlzbG90KHAsIHB0cl9fYXJlbmEpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0cnVjdCBicGZfdGVzdG1vZF9idGZfdHlwZV90YWdfMSB7XG4gXHRpbnQgYTtcbiB9O1xuQEAgLTg1Miw2ICYjNDM7ODY2LDcgQEAgQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0XzIpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9udWxsYWJsZSlcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfc3RhY2spXG4mIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9tdWx0aXNsb3QpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19nZXRfZGVmYXVsdF90cnVzdGVkX3B0cl90ZXN0KTtcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX3B1dF9kZWZhdWx0X3RydXN0ZWRfcHRyX3Rlc3QpO1xuIEJURl9LRlVOQ1NfRU5EKGJwZl90ZXN0bW9kX2NvbW1vbl9rZnVuY19pZHMpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmhcbmluZGV4IDMzZjJhZjViNzA4NTcuLjIxMGI5MTkyOTBjYzIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5oXG5AQCAtMTAzLDYgJiM0MzsxMDMsMTIgQEAgc3RydWN0IGJwZl90ZXN0bW9kX29wczIge1xuIFx0aW50ICgqdGVzdF8xKSh2b2lkKTtcbiB9O1xuIFxuJiM0MzsvKiAxNiBieXRlcywgc28gaXQgdGFrZXMgdHdvIGFyZ3VtZW50IHNsb3RzIHdoZW4gcGFzc2VkIGJ5IHZhbHVlICovXG4mIzQzO3N0cnVjdCBicGZfdGVzdG1vZF9hcmVuYV9wYWlyIHtcbiYjNDM7XHR1NjQgYTtcbiYjNDM7XHR1NjQgYjtcbiYjNDM7fTtcbiYjNDM7XG4gc3RydWN0IGJwZl90ZXN0bW9kX29wczMge1xuIFx0aW50ICgqdGVzdF8xKSh2b2lkKTtcbiBcdGludCAoKnRlc3RfMikodm9pZCk7XG5AQCAtMTEyLDYgJiM0MzsxMTgsOCBAQCBzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzMyB7XG4gXHQvKiBlbm91Z2ggbGVhZGluZyBhcmdzIHRvIGZvcmNlIEBwdHIgb250byB0aGUgc3RhY2sgb24geDg2IGFuZCBhcm02NCAqL1xuIFx0aW50ICgqdGVzdF9hcmVuYV9zdGFjaykodTY0IGEsIHU2NCBiLCB1NjQgYywgdTY0IGQsIHU2NCBlLCB1NjQgZixcbiBcdFx0XHRcdHU2NCBnLCB1NjQgaCwgdTY0ICpwdHIpO1xuJiM0MztcdC8qIGEgbXVsdGktc2xvdCBsZWFkaW5nIGFyZywgc28gQHB0ciBpcyBub3QgYXQgdGhlIHNsb3QgaXRzIGFyZyBpbmRleCBzdWdnZXN0cyAqL1xuJiM0MztcdGludCAoKnRlc3RfYXJlbmFfbXVsdGlzbG90KShzdHJ1Y3QgYnBmX3Rlc3Rtb2RfYXJlbmFfcGFpciBwLCB1NjQgKnB0cik7XG4gfTtcbiBcbiBzdHJ1Y3Qgc3Rfb3BzX2FyZ3Mge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kX2tmdW5jLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oXG5pbmRleCBjNDM4M2FjYjUzYzExLi43ZDgxMDcwZWVmZTdmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaFxuQEAgLTEyMyw2ICYjNDM7MTIzLDcgQEAgdm9pZCBicGZfdGVzdG1vZF90ZXN0X21vZF9rZnVuYyhpbnQgaSkgX19rc3ltO1xuIGludCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYShfX3U2NCAqcHRyX19hcmVuYSkgX19rc3ltO1xuIGludCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9udWxsYWJsZShfX3U2NCAqcHRyX19hcmVuYV9fbnVsbGFibGUpIF9fa3N5bTtcbiBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfc3RhY2soX191NjQgKnB0cl9fYXJlbmEpIF9fa3N5bTtcbiYjNDM7aW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX211bHRpc2xvdChfX3U2NCAqcHRyX19hcmVuYSkgX19rc3ltO1xuIFxuIF9fdTY0IGJwZl9rZnVuY19jYWxsX3Rlc3QxKHN0cnVjdCBzb2NrICpzaywgX191MzIgYSwgX191NjQgYixcbiBcdFx0XHRcdF9fdTMyIGMsIF9fdTY0IGQpIF9fa3N5bTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDo1MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7QlBGX0pJVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9leHRlbmRlZF9yZWcmIzM0OywKICAgICYjMzQ7YnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzJiMzNDssCiAgICAmIzM0O2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbXBsZW1lbnRzIEJQRiBhcmVuYSBhcmd1bWVudHMgc3VwcG9ydCBmb3IgdGhlIGFybTY0IEpJVCBjb21waWxlci4gSXQgYWRkcyBuZXcgaW5zdHJ1Y3Rpb24gZ2VuZXJhdGlvbiBsb2dpYyBmb3IgZXh0ZW5kZWQgcmVnaXN0ZXIgYWRkL3N1YiBpbnN0cnVjdGlvbnMgKGBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnYCkgYW5kIG1vZGlmaWVzIHRoZSBhcm02NCBCUEYgSklUIChgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYCwgYGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJnc2ApIHRvIGhhbmRsZSBhcmVuYSBwb2ludGVycyBpbiBrZnVuYyBjYWxscyBhbmQgc3RydWN0X29wcyBjYWxsYmFja3MuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUga2VybmVsIChCUEYgSklUKSB0aGF0IGFyZSByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5ZmQzODIyNWMyM2U4YTk1ZWFmMzg4ZjI3M2RjMzM4NzFiMjI0ZWJmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMTMgMjA6NTA6MTEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0IGIvRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdAppbmRleCAxMGU3MjVjYmU2NGNkLi44NWY3M2UwYmJkMGZmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3QKQEAgLTMwMSw5ICYjNDM7MzAxLDkgQEAgQW4gZXhhbXBsZSBpcyBnaXZlbiBiZWxvdzo6CiAgICAgICAgIH0KIAogQ2FsbGluZyBzdWNoIGEga2Z1bmMgcmVxdWlyZXMgdGhlIHByb2dyYW0gdG8gdXNlIGFuIGFyZW5hIG1hcCBhbmQgYSBKSVQgd2l0aAotYXJlbmEgYXJndW1lbnQgc3VwcG9ydCAoY3VycmVudGx5IHg4Ni02NCk7IHZlcmlmaWNhdGlvbiBmYWlscyBvdGhlcndpc2UuIFRoZQotcHJvZ3JhbSBjYW4gcGFzcyBhbnkgdmFsdWUgd2l0aG91dCBjb21wcm9taXNpbmcgdGhlIGtlcm5lbC4gQSB2YWx1ZSB0aGF0IGRvZXMKLW5vdCBwb2ludCBpbnRvIHRoZSBhcmVuYSBpcyBhIHByb2dyYW0gYnVnLgomIzQzO2FyZW5hIGFyZ3VtZW50IHN1cHBvcnQgKGN1cnJlbnRseSB4ODYtNjQgYW5kIGFybTY0KTsgdmVyaWZpY2F0aW9uIGZhaWxzCiYjNDM7b3RoZXJ3aXNlLiBUaGUgcHJvZ3JhbSBjYW4gcGFzcyBhbnkgdmFsdWUgd2l0aG91dCBjb21wcm9taXNpbmcgdGhlIGtlcm5lbC4gQQomIzQzO3ZhbHVlIHRoYXQgZG9lcyBub3QgcG9pbnQgaW50byB0aGUgYXJlbmEgaXMgYSBwcm9ncmFtIGJ1Zy4KIAogVGhlIHN1ZmZpeGVzIGhhdmUgdGhlIHNhbWUgbWVhbmluZyBvbiB0aGUgYXJndW1lbnRzIG9mIHN0cnVjdF9vcHMgc3R1YgogZnVuY3Rpb25zLCB3aXRoIHRoZSBjb252ZXJzaW9uIHJ1bm5pbmcgaW4gdGhlIG9wcG9zaXRlIGRpcmVjdGlvbi4gVGhlCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2luc24uaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vaW5zbi5oCmluZGV4IGNjMDcwMmZhNjRhNzkuLjFjZTc1YTQ0MjYzODcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vaW5zbi5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vaW5zbi5oCkBAIC0yMDUsNiAmIzQzOzIwNSwxOCBAQCBlbnVtIGFhcmNoNjRfaW5zbl9hZHNiX3R5cGUgewogCUFBUkNINjRfSU5TTl9BRFNCX1NVQl9TRVRGTEFHUwogfTsKIAomIzQzOy8qIG9wdGlvbiBmaWVsZCBvZiBhZGQvc3ViIChleHRlbmRlZCByZWdpc3RlcikgKi8KJiM0MztlbnVtIGFhcmNoNjRfaW5zbl9leHRlbmRfdHlwZSB7CiYjNDM7CUFBUkNINjRfSU5TTl9FWFRFTkRfVVhUQiwKJiM0MzsJQUFSQ0g2NF9JTlNOX0VYVEVORF9VWFRILAomIzQzOwlBQVJDSDY0X0lOU05fRVhURU5EX1VYVFcsCiYjNDM7CUFBUkNINjRfSU5TTl9FWFRFTkRfVVhUWCwKJiM0MzsJQUFSQ0g2NF9JTlNOX0VYVEVORF9TWFRCLAomIzQzOwlBQVJDSDY0X0lOU05fRVhURU5EX1NYVEgsCiYjNDM7CUFBUkNINjRfSU5TTl9FWFRFTkRfU1hUVywKJiM0MzsJQUFSQ0g2NF9JTlNOX0VYVEVORF9TWFRYLAomIzQzO307CiYjNDM7CiBlbnVtIGFhcmNoNjRfaW5zbl9tb3Zld2lkZV90eXBlIHsKIAlBQVJDSDY0X0lOU05fTU9WRVdJREVfWkVSTywKIAlBQVJDSDY0X0lOU05fTU9WRVdJREVfS0VFUCwKQEAgLTM3OCw2ICYjNDM7MzkwLDEwIEBAIF9fQUFSQ0g2NF9JTlNOX0ZVTkNTKGFkZCwJMHg3RjIwMDAwMCwgMHgwQjAwMDAwMCkKIF9fQUFSQ0g2NF9JTlNOX0ZVTkNTKGFkZHMsCTB4N0YyMDAwMDAsIDB4MkIwMDAwMDApCiBfX0FBUkNINjRfSU5TTl9GVU5DUyhzdWIsCTB4N0YyMDAwMDAsIDB4NEIwMDAwMDApCiBfX0FBUkNINjRfSU5TTl9GVU5DUyhzdWJzLAkweDdGMjAwMDAwLCAweDZCMDAwMDAwKQomIzQzO19fQUFSQ0g2NF9JTlNOX0ZVTkNTKGFkZF9leHQsCTB4N0ZFMDAwMDAsIDB4MEIyMDAwMDApCiYjNDM7X19BQVJDSDY0X0lOU05fRlVOQ1MoYWRkc19leHQsCTB4N0ZFMDAwMDAsIDB4MkIyMDAwMDApCiYjNDM7X19BQVJDSDY0X0lOU05fRlVOQ1Moc3ViX2V4dCwJMHg3RkUwMDAwMCwgMHg0QjIwMDAwMCkKJiM0MztfX0FBUkNINjRfSU5TTl9GVU5DUyhzdWJzX2V4dCwJMHg3RkUwMDAwMCwgMHg2QjIwMDAwMCkKIF9fQUFSQ0g2NF9JTlNOX0ZVTkNTKG1hZGQsCTB4N0ZFMDgwMDAsIDB4MUIwMDAwMDApCiBfX0FBUkNINjRfSU5TTl9GVU5DUyhtc3ViLAkweDdGRTA4MDAwLCAweDFCMDA4MDAwKQogX19BQVJDSDY0X0lOU05fRlVOQ1ModWRpdiwJMHg3RkUwRkMwMCwgMHgxQUMwMDgwMCkKQEAgLTYzNyw2ICYjNDM7NjUzLDEzIEBAIHUzMiBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfc2hpZnRlZF9yZWcoZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgZHN0LAogCQkJCQkgaW50IHNoaWZ0LAogCQkJCQkgZW51bSBhYXJjaDY0X2luc25fdmFyaWFudCB2YXJpYW50LAogCQkJCQkgZW51bSBhYXJjaDY0X2luc25fYWRzYl90eXBlIHR5cGUpOwomIzQzO3UzMiBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnKGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIGRzdCwKJiM0MzsJCQkJCSAgZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgc3JjLAomIzQzOwkJCQkJICBlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciByZWcsCiYjNDM7CQkJCQkgIGVudW0gYWFyY2g2NF9pbnNuX2V4dGVuZF90eXBlIGV4dGVuZCwKJiM0MzsJCQkJCSAgaW50IHNoaWZ0LAomIzQzOwkJCQkJICBlbnVtIGFhcmNoNjRfaW5zbl92YXJpYW50IHZhcmlhbnQsCiYjNDM7CQkJCQkgIGVudW0gYWFyY2g2NF9pbnNuX2Fkc2JfdHlwZSB0eXBlKTsKIHUzMiBhYXJjaDY0X2luc25fZ2VuX2RhdGExKGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIGRzdCwKIAkJCSAgIGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIHNyYywKIAkJCSAgIGVudW0gYWFyY2g2NF9pbnNuX3ZhcmlhbnQgdmFyaWFudCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbGliL2luc24uYyBiL2FyY2gvYXJtNjQvbGliL2luc24uYwppbmRleCAzN2NlNzVmN2YxZjA4Li5lNzBhYzAyMzg1MTUzIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2xpYi9pbnNuLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9saWIvaW5zbi5jCkBAIC05ODYsNiAmIzQzOzk4Niw2NiBAQCB1MzIgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX3NoaWZ0ZWRfcmVnKGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIGRzdCwKIAlyZXR1cm4gYWFyY2g2NF9pbnNuX2VuY29kZV9pbW1lZGlhdGUoQUFSQ0g2NF9JTlNOX0lNTV82LCBpbnNuLCBzaGlmdCk7CiB9CiAKJiM0MzsvKgomIzQzOyAqIFVubGlrZSB0aGUgc2hpZnRlZC1yZWdpc3RlciBmb3JtLCByZWdpc3RlciAzMSBpcyBub3QgWFpSIGV2ZXJ5d2hlcmUgaGVyZToKJiM0MzsgKiBpdCBlbmNvZGVzIFNQIGZvciBAc3JjLCBhbmQgZm9yIEBkc3QgdG9vIHVubGVzcyBAdHlwZSBzZXRzIHRoZSBmbGFncy4gT25seQomIzQzOyAqIEByZWcga2VlcHMgdGhlIFhaUiBtZWFuaW5nLgomIzQzOyAqLwomIzQzO3UzMiBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnKGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIGRzdCwKJiM0MzsJCQkJCSAgZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgc3JjLAomIzQzOwkJCQkJICBlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciByZWcsCiYjNDM7CQkJCQkgIGVudW0gYWFyY2g2NF9pbnNuX2V4dGVuZF90eXBlIGV4dGVuZCwKJiM0MzsJCQkJCSAgaW50IHNoaWZ0LAomIzQzOwkJCQkJICBlbnVtIGFhcmNoNjRfaW5zbl92YXJpYW50IHZhcmlhbnQsCiYjNDM7CQkJCQkgIGVudW0gYWFyY2g2NF9pbnNuX2Fkc2JfdHlwZSB0eXBlKQomIzQzO3sKJiM0MzsJdTMyIGluc247CiYjNDM7CiYjNDM7CXN3aXRjaCAodHlwZSkgewomIzQzOwljYXNlIEFBUkNINjRfSU5TTl9BRFNCX0FERDoKJiM0MzsJCWluc24gPSBhYXJjaDY0X2luc25fZ2V0X2FkZF9leHRfdmFsdWUoKTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEFBUkNINjRfSU5TTl9BRFNCX1NVQjoKJiM0MzsJCWluc24gPSBhYXJjaDY0X2luc25fZ2V0X3N1Yl9leHRfdmFsdWUoKTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEFBUkNINjRfSU5TTl9BRFNCX0FERF9TRVRGTEFHUzoKJiM0MzsJCWluc24gPSBhYXJjaDY0X2luc25fZ2V0X2FkZHNfZXh0X3ZhbHVlKCk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBBQVJDSDY0X0lOU05fQURTQl9TVUJfU0VURkxBR1M6CiYjNDM7CQlpbnNuID0gYWFyY2g2NF9pbnNuX2dldF9zdWJzX2V4dF92YWx1ZSgpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlwcl9lcnIoJiMzNDslczogdW5rbm93biBhZGQvc3ViIGVuY29kaW5nICVkXG4mIzM0OywgX19mdW5jX18sIHR5cGUpOwomIzQzOwkJcmV0dXJuIEFBUkNINjRfQlJFQUtfRkFVTFQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc3dpdGNoICh2YXJpYW50KSB7CiYjNDM7CWNhc2UgQUFSQ0g2NF9JTlNOX1ZBUklBTlRfMzJCSVQ6CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBBQVJDSDY0X0lOU05fVkFSSUFOVF82NEJJVDoKJiM0MzsJCWluc24gfD0gQUFSQ0g2NF9JTlNOX1NGX0JJVDsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcHJfZXJyKCYjMzQ7JXM6IHVua25vd24gdmFyaWFudCBlbmNvZGluZyAlZFxuJiMzNDssIF9fZnVuY19fLCB2YXJpYW50KTsKJiM0MzsJCXJldHVybiBBQVJDSDY0X0JSRUFLX0ZBVUxUOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChzaGlmdCAmbHQ7IDAgfHwgc2hpZnQgJmd0OyA0KSB7CiYjNDM7CQlwcl9lcnIoJiMzNDslczogaW52YWxpZCBzaGlmdCBlbmNvZGluZyAlZFxuJiMzNDssIF9fZnVuY19fLCBzaGlmdCk7CiYjNDM7CQlyZXR1cm4gQUFSQ0g2NF9CUkVBS19GQVVMVDsKJiM0MzsJfQomIzQzOwomIzQzOwlpbnNuID0gYWFyY2g2NF9pbnNuX2VuY29kZV9yZWdpc3RlcihBQVJDSDY0X0lOU05fUkVHVFlQRV9SRCwgaW5zbiwgZHN0KTsKJiM0MzsKJiM0MzsJaW5zbiA9IGFhcmNoNjRfaW5zbl9lbmNvZGVfcmVnaXN0ZXIoQUFSQ0g2NF9JTlNOX1JFR1RZUEVfUk4sIGluc24sIHNyYyk7CiYjNDM7CiYjNDM7CWluc24gPSBhYXJjaDY0X2luc25fZW5jb2RlX3JlZ2lzdGVyKEFBUkNINjRfSU5TTl9SRUdUWVBFX1JNLCBpbnNuLCByZWcpOwomIzQzOwomIzQzOwkvKiBvcHRpb24gaW4gYml0cyBbMTU6MTNdIGFuZCBpbW0zIGluIFsxMjoxMF0gdG9nZXRoZXIgZmlsbCBJTU1fNiAqLwomIzQzOwlyZXR1cm4gYWFyY2g2NF9pbnNuX2VuY29kZV9pbW1lZGlhdGUoQUFSQ0g2NF9JTlNOX0lNTV82LCBpbnNuLAomIzQzOwkJCQkJICAgICAoZXh0ZW5kICZsdDsmbHQ7IDMpIHwgc2hpZnQpOwomIzQzO30KJiM0MzsKIHUzMiBhYXJjaDY0X2luc25fZ2VuX2RhdGExKGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIGRzdCwKIAkJCSAgIGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIHNyYywKIAkJCSAgIGVudW0gYWFyY2g2NF9pbnNuX3ZhcmlhbnQgdmFyaWFudCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXQuaCBiL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXQuaAppbmRleCBkMTNkZTQyMjJjZmI3Li5iMmZlNmU2ZGNmNDQ3IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L25ldC9icGZfaml0LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9uZXQvYnBmX2ppdC5oCkBAIC0yNDMsNiAmIzQzOzI0MywxNyBAQAogLyogUm4gLSBSbTsgc2V0IGNvbmRpdGlvbiBmbGFncyAqLwogI2RlZmluZSBBNjRfQ01QKHNmLCBSbiwgUm0pIEE2NF9TVUJTKHNmLCBBNjRfWlIsIFJuLCBSbSkKIAomIzQzOy8qIEFkZC9zdWJ0cmFjdCAoZXh0ZW5kZWQgcmVnaXN0ZXIpICovCiYjNDM7I2RlZmluZSBBNjRfQUREU1VCX0VSRUcoc2YsIFJkLCBSbiwgUm0sIGV4dCwgc2hpZnQsIHR5cGUpIFwKJiM0MzsJYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZyhSZCwgUm4sIFJtLCBcCiYjNDM7CQlBQVJDSDY0X0lOU05fRVhURU5EXyMjZXh0LCBzaGlmdCwgQTY0X1ZBUklBTlQoc2YpLCBcCiYjNDM7CQlBQVJDSDY0X0lOU05fQURTQl8jI3R5cGUpCiYjNDM7LyogUmQgPSBSbiAmIzQzOyAoRVhUKFJtKSAmbHQ7Jmx0OyBzaGlmdCkgKi8KJiM0MzsjZGVmaW5lIEE2NF9BRERfRVhUKHNmLCBSZCwgUm4sIFJtLCBleHQsIHNoaWZ0KSBcCiYjNDM7CUE2NF9BRERTVUJfRVJFRyhzZiwgUmQsIFJuLCBSbSwgZXh0LCBzaGlmdCwgQUREKQomIzQzOy8qIFJkID0gUm4gJiM0MzsgKHUzMilSbSAqLwomIzQzOyNkZWZpbmUgQTY0X0FERF9VWFRXKFJkLCBSbiwgUm0pIEE2NF9BRERfRVhUKDEsIFJkLCBSbiwgUm0sIFVYVFcsIDApCiYjNDM7CiAvKiBEYXRhLXByb2Nlc3NpbmcgKDEgc291cmNlKSAqLwogI2RlZmluZSBBNjRfREFUQTEoc2YsIFJkLCBSbiwgdHlwZSkgYWFyY2g2NF9pbnNuX2dlbl9kYXRhMShSZCwgUm4sIFwKIAlBNjRfVkFSSUFOVChzZiksIEFBUkNINjRfSU5TTl9EQVRBMV8jI3R5cGUpCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jCmluZGV4IDc0YjQwODM3OTFkYTMuLmMxOGUwMDVhNDFkYmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jCkBAIC0xMjU2LDYgJiM0MzsxMjU2LDQzIEBAIHN0YXRpYyB2b2lkIGVtaXRfc3RhY2tfYXJnX3N0b3JlX2ltbShzMzIgaW1tLCBzMTYgYnBmX29mZiwgY29uc3QgdTggdG1wLCBzdHJ1Y3QKIAl9CiB9CiAKJiM0MzsvKgomIzQzOyAqIFJlYmFzZSB0aGUgX19hcmVuYSBhcmdzIG9mIGEga2Z1bmMgY2FsbCB0byBhcmVuYSBrZXJuZWwgYWRkcmVzc2VzLAomIzQzOyAqIHhOID0ga2Vybl92bV9zdGFydCAmIzQzOyAodTMyKXhOLCB3aXRoIHRoZSBhcmVuYSBiYXNlIHJlZ2lzdGVyIGhvbGRpbmcKJiM0MzsgKiBrZXJuX3ZtX3N0YXJ0LiBBIG51bGxhYmxlIGFyZyBwcmVzZXJ2ZXMgTlVMTCBieSBza2lwcGluZyB0aGUgYWRkLCB0ZXN0ZWQKJiM0MzsgKiBvbiB0aGUgdHJ1bmNhdGVkIHZhbHVlIGFzIGFyZW5hIE5VTEwgaXMgb2Zmc2V0IDAuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBlbWl0X2tmdW5jX2FyZW5hX2FyZ3Moc3RydWN0IGppdF9jdHggKmN0eCwgY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKQomIzQzO3sKJiM0MzsJY29uc3QgdTggYXJlbmFfdm1fYmFzZSA9IGJwZjJhNjRbQVJFTkFfVk1fU1RBUlRdOwomIzQzOwljb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKmZtOwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJZm0gPSBicGZfaml0X2ZpbmRfa2Z1bmNfbW9kZWwoY3R4LSZndDtwcm9nLCBpbnNuKTsKJiM0MzsJaWYgKCFmbSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbWluX3QoaW50LCBmbS0mZ3Q7bnJfYXJncywgTUFYX0JQRl9GVU5DX1JFR19BUkdTKTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWNvbnN0IHU4IHJlZyA9IGJwZjJhNjRbQlBGX1JFR18xICYjNDM7IGldOwomIzQzOwkJdTggZmxhZ3MgPSBmbS0mZ3Q7YXJnX2ZsYWdzW2ldOwomIzQzOwomIzQzOwkJaWYgKCEoZmxhZ3MgJmFtcDsgQlRGX0ZNT0RFTF9BUkVOQV9BUkcpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJaWYgKFdBUk5fT05fT05DRSghY3R4LSZndDthcmVuYV92bV9zdGFydCkpCiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CQlpZiAoZmxhZ3MgJmFtcDsgQlRGX0ZNT0RFTF9OVUxMQUJMRV9BUkcpIHsKJiM0MzsJCQkvKiAzMi1iaXQgbW92IGNsZWFycyB0aGUgdXBwZXIgMzIgYml0cyAqLwomIzQzOwkJCWVtaXQoQTY0X01PVigwLCByZWcsIHJlZyksIGN0eCk7CiYjNDM7CQkJLyogc2tpcCB0aGUgYWRkIHNvIHRoYXQgTlVMTCBzdGF5cyBOVUxMICovCiYjNDM7CQkJZW1pdChBNjRfQ0JaKDAsIHJlZywgMiksIGN0eCk7CiYjNDM7CQl9CiYjNDM7CQllbWl0KEE2NF9BRERfVVhUVyhyZWcsIGFyZW5hX3ZtX2Jhc2UsIHJlZyksIGN0eCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogLyogSklUcyBhbiBlQlBGIGluc3RydWN0aW9uLgogICogUmV0dXJuczoKICAqIDAgIC0gc3VjY2Vzc2Z1bGx5IEpJVGVkIGFuIDgtYnl0ZSBlQlBGIGluc3RydWN0aW9uLgpAQCAtMTY3OCw2ICYjNDM7MTcxNSwxMSBAQCBzdGF0aWMgaW50IGJ1aWxkX2luc24oY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9pbnNuCiAJCQkJCSAgICAmYW1wO2Z1bmNfYWRkciwgJmFtcDtmdW5jX2FkZHJfZml4ZWQpOwogCQlpZiAocmV0ICZsdDsgMCkKIAkJCXJldHVybiByZXQ7CiYjNDM7CQlpZiAoaW5zbi0mZ3Q7c3JjX3JlZyA9PSBCUEZfUFNFVURPX0tGVU5DX0NBTEwpIHsKJiM0MzsJCQlyZXQgPSBlbWl0X2tmdW5jX2FyZW5hX2FyZ3MoY3R4LCBpbnNuKTsKJiM0MzsJCQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQkJcmV0dXJuIHJldDsKJiM0MzsJCX0KIAkJZW1pdF9jYWxsKGZ1bmNfYWRkciwgY3R4KTsKIAkJLyoKIAkJICogQ2FsbCB0byBhcmNoX2JwZl90aW1lZF9tYXlfZ290bygpIGlzIGVtaXR0ZWQgYnkgdGhlCkBAIC0yMzUxLDYgJiM0MzsyMzkzLDExIEBAIGJvb2wgYnBmX2ppdF9zdXBwb3J0c19zdGFja19hcmdzKHZvaWQpCiAJcmV0dXJuIHRydWU7CiB9CiAKJiM0Mztib29sIGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncyh2b2lkKQomIzQzO3sKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwogdm9pZCAqYnBmX2FyY2hfdGV4dF9jb3B5KHZvaWQgKmRzdCwgdm9pZCAqc3JjLCBzaXplX3QgbGVuKQogewogCWlmICghYWFyY2g2NF9pbnNuX2NvcHkoZHN0LCBzcmMsIGxlbikpCkBAIC0yNTI0LDM0ICYjNDM7MjU3MSw3NiBAQCBzdGF0aWMgdm9pZCBjbGVhcl9nYXJiYWdlKHN0cnVjdCBqaXRfY3R4ICpjdHgsIGludCByZWcsIGludCBlZmZlY3RpdmVfYnl0ZXMpCiAJfQogfQogCiYjNDM7LyoKJiM0MzsgKiBDb252ZXJ0IGFuIGFyZW5hIGtlcm5lbCBhZGRyZXNzIGludG8gdGhlIGFyZW5hIHBvaW50ZXIgZm9ybSBvbiBpdHMgd2F5IGludG8KJiM0MzsgKiB0aGUgQlBGIGN0eCwgZHN0ID0gKHUzMikoc3JjIC0ga2Vybl92bV9zdGFydCksIHdpdGggQGJhc2VfbG8gaG9sZGluZyB0aGUgbG93CiYjNDM7ICogMzIgYml0cyBvZiBrZXJuX3ZtX3N0YXJ0LiBBIG51bGxhYmxlIGFyZyBwcmVzZXJ2ZXMgTlVMTCwgdGVzdGVkIG9uIHRoZSBmdWxsCiYjNDM7ICogNjQtYml0IGtlcm5lbCBwb2ludGVyLiBUaGUgMzItYml0IHN1YnRyYWN0aW9uIGJvdGggdHJ1bmNhdGVzIGFuZCBjbGVhcnMgdGhlCiYjNDM7ICogdXBwZXIgaGFsZiwgc28gdGhlIHN0b3JlZCB2YWx1ZSBzYXRpc2ZpZXMgdGhlIEpJVCBpbnZhcmlhbnQgZm9yIGFyZW5hCiYjNDM7ICogcG9pbnRlciByZWdpc3RlcnMuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgZW1pdF9hcmVuYV9hcmdfY29udihzdHJ1Y3Qgaml0X2N0eCAqY3R4LCB1OCBkc3QsIHU4IHNyYywgYm9vbCBudWxsYWJsZSwgdTggYmFzZV9sbykKJiM0Mzt7CiYjNDM7CWlmIChudWxsYWJsZSkgewomIzQzOwkJaWYgKGRzdCAhPSBzcmMpCiYjNDM7CQkJZW1pdChBNjRfTU9WKDEsIGRzdCwgc3JjKSwgY3R4KTsKJiM0MzsJCS8qIHNraXAgdGhlIHN1YnRyYWN0aW9uIHNvIHRoYXQgTlVMTCBzdGF5cyBOVUxMICovCiYjNDM7CQllbWl0KEE2NF9DQlooMSwgZHN0LCAyKSwgY3R4KTsKJiM0MzsJCXNyYyA9IGRzdDsKJiM0MzsJfQomIzQzOwllbWl0KEE2NF9TVUIoMCwgZHN0LCBzcmMsIGJhc2VfbG8pLCBjdHgpOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHNhdmVfYXJncyhzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBpbnQgYmFyZ3Nfb2ZmLCBpbnQgb2FyZ3Nfb2ZmLAotCQkgICAgICBjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sCi0JCSAgICAgIGNvbnN0IHN0cnVjdCBhcmdfYXV4ICphLAotCQkgICAgICBib29sIGZvcl9jYWxsX29yaWdpbikKJiM0MzsJCSAgICAgIGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgY29uc3Qgc3RydWN0IGFyZ19hdXggKmEsCiYjNDM7CQkgICAgICBib29sIGZvcl9jYWxsX29yaWdpbiwgYm9vbCBpc19zdHJ1Y3Rfb3BzLCB1NjQgYXJlbmFfYmFzZSkKIHsKLQlpbnQgaTsKLQlpbnQgcmVnOwotCWludCBkb2ZmOwotCWludCBzb2ZmOwotCWludCBzbG90czsKIAl1OCB0bXAgPSBicGYyYTY0W1RNUF9SRUdfMV07CiYjNDM7CXU4IGJhc2VfbG8gPSBicGYyYTY0W1RNUF9SRUdfMl07CiYjNDM7CWludCBpLCByZWcsIGRvZmYsIHNvZmYsIHNsb3RzOwomIzQzOwomIzQzOwkvKiBvbmx5IHRoZSBsb3cgMzIgYml0cyBvZiB0aGUgYmFzZSB0YWtlIHBhcnQgaW4gdGhlIHN1YnRyYWN0aW9uICovCiYjNDM7CWlmIChhcmVuYV9iYXNlKQomIzQzOwkJZW1pdF9hNjRfbW92X2koMCwgYmFzZV9sbywgKHMzMikodTMyKWFyZW5hX2Jhc2UsIGN0eCk7CiAKIAkvKiBzdG9yZSBhcmd1bWVudHMgdG8gdGhlIHN0YWNrIGZvciB0aGUgYnBmIHByb2dyYW0sIG9yIHJlc3RvcmUKIAkgKiBhcmd1bWVudHMgZnJvbSBzdGFjayBmb3IgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uCiAJICovCi0JZm9yIChyZWcgPSAwOyByZWcgJmx0OyBhLSZndDtyZWdzX2Zvcl9hcmdzOyByZWcmIzQzOyYjNDM7KSB7Ci0JCWVtaXQoZm9yX2NhbGxfb3JpZ2luID8KLQkJICAgICBBNjRfTERSNjRJKHJlZywgQTY0X1NQLCBiYXJnc19vZmYpIDoKLQkJICAgICBBNjRfU1RSNjRJKHJlZywgQTY0X1NQLCBiYXJnc19vZmYpLAotCQkgICAgIGN0eCk7Ci0JCWJhcmdzX29mZiAmIzQzOz0gODsKJiM0MzsJZm9yIChpID0gMCwgcmVnID0gMDsgaSAmbHQ7IGEtJmd0O2FyZ3NfaW5fcmVnczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWJvb2wgYXJlbmFfYXJnID0gYXJlbmFfYmFzZSAmYW1wOyZhbXA7IChtLSZndDthcmdfZmxhZ3NbaV0gJmFtcDsgQlRGX0ZNT0RFTF9BUkVOQV9BUkcpOwomIzQzOwkJYm9vbCBudWxsYWJsZSA9IG0tJmd0O2FyZ19mbGFnc1tpXSAmYW1wOyBCVEZfRk1PREVMX05VTExBQkxFX0FSRzsKJiM0MzsKJiM0MzsJCXNsb3RzID0gKG0tJmd0O2FyZ19zaXplW2ldICYjNDM7IDcpIC8gODsKJiM0MzsJCXdoaWxlIChzbG90cy0tICZndDsgMCkgewomIzQzOwkJCWlmIChmb3JfY2FsbF9vcmlnaW4pIHsKJiM0MzsJCQkJZW1pdChBNjRfTERSNjRJKHJlZywgQTY0X1NQLCBiYXJnc19vZmYpLCBjdHgpOwomIzQzOwkJCX0gZWxzZSBpZiAoYXJlbmFfYXJnKSB7CiYjNDM7CQkJCWVtaXRfYXJlbmFfYXJnX2NvbnYoY3R4LCB0bXAsIHJlZywgbnVsbGFibGUsIGJhc2VfbG8pOwomIzQzOwkJCQllbWl0KEE2NF9TVFI2NEkodG1wLCBBNjRfU1AsIGJhcmdzX29mZiksIGN0eCk7CiYjNDM7CQkJfSBlbHNlIHsKJiM0MzsJCQkJZW1pdChBNjRfU1RSNjRJKHJlZywgQTY0X1NQLCBiYXJnc19vZmYpLCBjdHgpOwomIzQzOwkJCX0KJiM0MzsJCQlyZWcmIzQzOyYjNDM7OwomIzQzOwkJCWJhcmdzX29mZiAmIzQzOz0gODsKJiM0MzsJCX0KIAl9CiAKLQlzb2ZmID0gMzI7IC8qIG9uIHN0YWNrIGFyZ3VtZW50cyBzdGFydCBmcm9tIEZQICYjNDM7IDMyICovCiYjNDM7CS8qCiYjNDM7CSAqIE9uLXN0YWNrIGFyZ3VtZW50cyBzdGFydCBhYm92ZSB0aGUgZnJhbWUocykgcHVzaGVkIGJ5IHRoZSB0cmFtcG9saW5lCiYjNDM7CSAqIHByb2xvZ3VlLiBFbnRlcmVkIHRocm91Z2ggdGhlIGZlbnRyeSBjYWxsIGZyb20gYSB0cmFjZWQgZnVuY3Rpb24sIHRoZQomIzQzOwkgKiBwcm9sb2d1ZSBzYXZlcyBib3RoIHRoZSBwYXJlbnQgKEZQL3g5KSBhbmQgdGhlIHRyYWNlZCBmdW5jdGlvbgomIzQzOwkgKiAoRlAvTFIpIGZyYW1lcywgc28gdGhlIGFyZ3VtZW50cyBzdGFydCBhdCBGUCAmIzQzOyAzMi4gQSBzdHJ1Y3Rfb3BzCiYjNDM7CSAqIGNhbGxiYWNrIGlzIGNhbGxlZCBpbmRpcmVjdGx5IGFuZCBvbmx5IHRoZSBGUC9MUiBmcmFtZSBpcyBzYXZlZCwgc28KJiM0MzsJICogdGhleSBzdGFydCBhdCBGUCAmIzQzOyAxNi4KJiM0MzsJICovCiYjNDM7CXNvZmYgPSBpc19zdHJ1Y3Rfb3BzID8gMTYgOiAzMjsKIAlkb2ZmID0gKGZvcl9jYWxsX29yaWdpbiA/IG9hcmdzX29mZiA6IGJhcmdzX29mZik7CiAKIAkvKiBzYXZlIG9uIHN0YWNrIGFyZ3VtZW50cyAqLwogCWZvciAoaSA9IGEtJmd0O2FyZ3NfaW5fcmVnczsgaSAmbHQ7IG0tJmd0O25yX2FyZ3M7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlib29sIGFyZW5hX2FyZyA9IGFyZW5hX2Jhc2UgJmFtcDsmYW1wOyAobS0mZ3Q7YXJnX2ZsYWdzW2ldICZhbXA7IEJURl9GTU9ERUxfQVJFTkFfQVJHKTsKJiM0MzsJCWJvb2wgbnVsbGFibGUgPSBtLSZndDthcmdfZmxhZ3NbaV0gJmFtcDsgQlRGX0ZNT0RFTF9OVUxMQUJMRV9BUkc7CiYjNDM7CiAJCXNsb3RzID0gKG0tJmd0O2FyZ19zaXplW2ldICYjNDM7IDcpIC8gODsKIAkJLyogdmVyaWZpZXIgZW5zdXJlcyBhcmdfc2l6ZSAmbHQ7PSAxNiwgc28gc2xvdHMgZXF1YWxzIDEgb3IgMiAqLwogCQl3aGlsZSAoc2xvdHMtLSAmZ3Q7IDApIHsKQEAgLTI1NjEsNiAmIzQzOzI2NTAsMTUgQEAgc3RhdGljIHZvaWQgc2F2ZV9hcmdzKHN0cnVjdCBqaXRfY3R4ICpjdHgsIGludCBiYXJnc19vZmYsIGludCBvYXJnc19vZmYsCiAJCQkgKi8KIAkJCWlmIChzbG90cyA9PSAwICZhbXA7JmFtcDsgIWZvcl9jYWxsX29yaWdpbikKIAkJCQljbGVhcl9nYXJiYWdlKGN0eCwgdG1wLCBtLSZndDthcmdfc2l6ZVtpXSAlIDgpOwomIzQzOwkJCS8qCiYjNDM7CQkJICogTm8gZ3VhcmQgb24gZm9yX2NhbGxfb3JpZ2luIGhlcmU6IG9ubHkgdGhlIGluZGlyZWN0CiYjNDM7CQkJICogdHJhbXBvbGluZSBpcyBnaXZlbiBhIGJhc2UsIGFuZCBpdCBuZXZlciBjYWxscyB0aGUKJiM0MzsJCQkgKiBvcmlnaW5hbCBmdW5jdGlvbiwgc28gYXJndW1lbnRzIGFyZSBuZXZlciBjb252ZXJ0ZWQKJiM0MzsJCQkgKiBvbiB0aGVpciB3YXkgYmFjayBvdXQgdG8gaXQuIFNlZSB0aGUgV0FSTl9PTl9PTkNFKCkKJiM0MzsJCQkgKiBpbiBwcmVwYXJlX3RyYW1wb2xpbmUoKS4KJiM0MzsJCQkgKi8KJiM0MzsJCQlpZiAoYXJlbmFfYXJnKQomIzQzOwkJCQllbWl0X2FyZW5hX2FyZ19jb252KGN0eCwgdG1wLCB0bXAsIG51bGxhYmxlLCBiYXNlX2xvKTsKIAkJCWVtaXQoQTY0X1NUUjY0SSh0bXAsIEE2NF9TUCwgZG9mZiksIGN0eCk7CiAJCQlzb2ZmICYjNDM7PSA4OwogCQkJZG9mZiAmIzQzOz0gODsKQEAgLTI2MjAsOCAmIzQzOzI3MTgsMjEgQEAgc3RhdGljIGludCBwcmVwYXJlX3RyYW1wb2xpbmUoc3RydWN0IGppdF9jdHggKmN0eCwgc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sCiAJYm9vbCBpc19zdHJ1Y3Rfb3BzID0gaXNfc3RydWN0X29wc190cmFtcChmZW50cnkpOwogCWludCBjb29raWVfb2ZmLCBjb29raWVfY250LCBjb29raWVfYmFyZ3Nfb2ZmOwogCWludCBmc2Vzc2lvbl9jbnQgPSBicGZfZnNlc3Npb25fY250KHRub2Rlcyk7CiYjNDM7CXU2NCBhcmVuYV9iYXNlOwogCXU2NCBmdW5jX21ldGE7CiAKJiM0MzsJLyoKJiM0MzsJICogRl9JTkRJUkVDVCBpcyBvbmx5IGNvbXBhdGlibGUgd2l0aCBGX1JFVF9GRU5UUllfUkVULCBpdCBpcyBleHBsaWNpdGx5CiYjNDM7CSAqIGluY29tcGF0aWJsZSB3aXRoIEZfQ0FMTF9PUklHIHwgRl9TS0lQX0ZSQU1FIHwgRl9JUF9BUkcgYmVjYXVzZQomIzQzOwkgKiBAZnVuY19hZGRyLiBBcmVuYSBjb252ZXJzaW9uIHJlbGllcyBvbiB0aGlzOiBicGZfdHJhbXBfYXJlbmFfYmFzZSgpCiYjNDM7CSAqIG9ubHkgcmV0dXJucyBhIGJhc2UgZm9yIHRoZSBpbmRpcmVjdCB0cmFtcG9saW5lLCB3aGljaCB0aGVyZWZvcmUKJiM0MzsJICogbmV2ZXIgY2FsbHMgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uIHdpdGggY29udmVydGVkIGFyZ3VtZW50cy4KJiM0MzsJICovCiYjNDM7CVdBUk5fT05fT05DRSgoZmxhZ3MgJmFtcDsgQlBGX1RSQU1QX0ZfSU5ESVJFQ1QpICZhbXA7JmFtcDsKJiM0MzsJCSAgICAgKGZsYWdzICZhbXA7IH4oQlBGX1RSQU1QX0ZfSU5ESVJFQ1QgfCBCUEZfVFJBTVBfRl9SRVRfRkVOVFJZX1JFVCkpKTsKJiM0MzsKJiM0MzsJYXJlbmFfYmFzZSA9IGJwZl90cmFtcF9hcmVuYV9iYXNlKG0sIHRub2RlcywgZmxhZ3MpOwomIzQzOwogCS8qIHRyYW1wb2xpbmUgc3RhY2sgbGF5b3V0OgogCSAqICAgICAgICAgICAgICAgICAgICBbIHBhcmVudCBpcCAgICAgICAgIF0KIAkgKiAgICAgICAgICAgICAgICAgICAgWyBGUCAgICAgICAgICAgICAgICBdCkBAIC0yNzM3LDcgJiM0MzsyODQ4LDcgQEAgc3RhdGljIGludCBwcmVwYXJlX3RyYW1wb2xpbmUoc3RydWN0IGppdF9jdHggKmN0eCwgc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sCiAJc3RvcmVfZnVuY19tZXRhKGN0eCwgZnVuY19tZXRhLCBmdW5jX21ldGFfb2ZmKTsKIAogCS8qIHNhdmUgYXJncyBmb3IgYnBmICovCi0Jc2F2ZV9hcmdzKGN0eCwgYmFyZ3Nfb2ZmLCBvYXJnc19vZmYsIG0sIGEsIGZhbHNlKTsKJiM0MzsJc2F2ZV9hcmdzKGN0eCwgYmFyZ3Nfb2ZmLCBvYXJnc19vZmYsIG0sIGEsIGZhbHNlLCBpc19zdHJ1Y3Rfb3BzLCBhcmVuYV9iYXNlKTsKIAogCS8qIHNhdmUgY2FsbGVlIHNhdmVkIHJlZ2lzdGVycyAqLwogCWVtaXQoQTY0X1NUUjY0SShBNjRfUigxOSksIEE2NF9TUCwgcmVnc19vZmYpLCBjdHgpOwpAQCAtMjc4NSw4ICYjNDM7Mjg5Niw4IEBAIHN0YXRpYyBpbnQgcHJlcGFyZV90cmFtcG9saW5lKHN0cnVjdCBqaXRfY3R4ICpjdHgsIHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLAogCX0KIAogCWlmIChmbGFncyAmYW1wOyBCUEZfVFJBTVBfRl9DQUxMX09SSUcpIHsKLQkJLyogc2F2ZSBhcmdzIGZvciBvcmlnaW5hbCBmdW5jICovCi0JCXNhdmVfYXJncyhjdHgsIGJhcmdzX29mZiwgb2FyZ3Nfb2ZmLCBtLCBhLCB0cnVlKTsKJiM0MzsJCS8qIHRoZSBvcmlnaW5hbCBmdW5jIHRha2VzIGtlcm5lbCBhZGRyZXNzZXMsIG5ldmVyIGNvbnZlcnRlZCBvbmVzICovCiYjNDM7CQlzYXZlX2FyZ3MoY3R4LCBiYXJnc19vZmYsIG9hcmdzX29mZiwgbSwgYSwgdHJ1ZSwgaXNfc3RydWN0X29wcywgMCk7CiAJCS8qIGNhbGwgb3JpZ2luYWwgZnVuYyAqLwogCQllbWl0KEE2NF9MRFI2NEkoQTY0X1IoMTApLCBBNjRfU1AsIHJldGFkZHJfb2ZmKSwgY3R4KTsKIAkJZW1pdChBNjRfQURSKEE2NF9MUiwgQUFSQ0g2NF9JTlNOX1NJWkUgKiAyKSwgY3R4KTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3Rfc3RydWN0X29wc19hcmVuYS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9zdHJ1Y3Rfb3BzX2FyZW5hLmMKaW5kZXggOTQwZWMyY2RhMGQ1Mi4uN2Y5ZjU0YmEzZmJlNSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9zdHJ1Y3Rfb3BzX2FyZW5hLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9zdHJ1Y3Rfb3BzX2FyZW5hLmMKQEAgLTYsNyAmIzQzOzYsNyBAQAogI2luY2x1ZGUgJiMzNDtzdHJ1Y3Rfb3BzX2FyZW5hX2F0dGFjaC5za2VsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtzdHJ1Y3Rfb3BzX2FyZW5hX2ZhaWwuc2tlbC5oJiMzNDsKIAotI2lmIGRlZmluZWQoX194ODZfNjRfXykKJiM0MzsjaWYgZGVmaW5lZChfX3g4Nl82NF9fKSB8fCBkZWZpbmVkKF9fYWFyY2g2NF9fKQogLyoKICAqIEF0dGFjaCBjYWxsYmFja3Mgd2l0aCBfX2FyZW5hIGFuZCBfX2FyZW5hX19udWxsYWJsZSBhcmd1bWVudHMgYW5kIGRyaXZlCiAgKiB0aGVtIHRocm91Z2ggdGhlIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hKigpIGtmdW5jcy4KQEAgLTExMSwxMSAmIzQzOzExMSwxMSBAQCBzdGF0aWMgdm9pZCBhcmVuYV9hcmdfYXR0YWNoKHZvaWQpCiB2b2lkIHNlcmlhbF90ZXN0X3N0cnVjdF9vcHNfYXJlbmEodm9pZCkKIHsKIAkvKgotCSAqIEFyZW5hIHN0cnVjdF9vcHMgYXJndW1lbnRzIG5lZWQgSklUIHN1cHBvcnQsIGN1cnJlbnRseSB4ODYtNjQgb25seS4KLQkgKiBFbHNld2hlcmUgdmVyaWZpY2F0aW9uIGZhaWxzIHdpdGggJiMzNDtKSVQgZG9lcyBub3Qgc3VwcG9ydCBhcmVuYQotCSAqIGFyZ3VtZW50cyYjMzQ7LCBzbyB0aGUgcHJvZ3JhbXMgY2Fubm90IGV2ZW4gbG9hZC4KJiM0MzsJICogQXJlbmEgc3RydWN0X29wcyBhcmd1bWVudHMgbmVlZCBKSVQgc3VwcG9ydCwgY3VycmVudGx5IHg4Ni02NCBhbmQKJiM0MzsJICogYXJtNjQgb25seS4gRWxzZXdoZXJlIHZlcmlmaWNhdGlvbiBmYWlscyB3aXRoICYjMzQ7SklUIGRvZXMgbm90IHN1cHBvcnQKJiM0MzsJICogYXJlbmEgYXJndW1lbnRzJiMzNDssIHNvIHRoZSBwcm9ncmFtcyBjYW5ub3QgZXZlbiBsb2FkLgogCSAqLwotI2lmIGRlZmluZWQoX194ODZfNjRfXykKJiM0MzsjaWYgZGVmaW5lZChfX3g4Nl82NF9fKSB8fCBkZWZpbmVkKF9fYWFyY2g2NF9fKQogCWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7YXJlbmFfYXJnJiMzNDspKQogCQlhcmVuYV9hcmcoKTsKIAlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O2FyZW5hX2FyZ19mYWlsJiMzNDspKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmMuYwppbmRleCBjZGNlYTg4OWRhNTg2Li5iZjBkMzA0ZTBlNTljIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmMuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmMuYwpAQCAtMjcsNiAmIzQzOzI3LDcgQEAgdm9sYXRpbGUgdTY0IHN0YXNoOwogCiBTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiBfX2FyY2hfeDg2XzY0CiYjNDM7X19hcmNoX2FybTY0CiBfX3N1Y2Nlc3MgX19yZXR2YWwoMCkKIGludCBhcmVuYV9hcmdfZm9ybXModm9pZCAqY3R4KQogewpAQCAtNzAsNiAmIzQzOzcxLDcgQEAgaW50IGFyZW5hX2FyZ19mb3Jtcyh2b2lkICpjdHgpCiAgKi8KIFNFQygmIzM0O3N5c2NhbGwmIzM0OykKIF9fYXJjaF94ODZfNjQKJiM0MztfX2FyY2hfYXJtNjQKIF9fc3VjY2VzcyBfX3JldHZhbCgwKQogaW50IGFyZW5hX2FyZ19yZWJhc2Uodm9pZCAqY3R4KQogewpAQCAtMTExLDYgJiM0MzsxMTMsNyBAQCBpbnQgYXJlbmFfYXJnX3JlYmFzZSh2b2lkICpjdHgpCiAKIFNFQygmIzM0O3N5c2NhbGwmIzM0OykKIF9fYXJjaF94ODZfNjQKJiM0MztfX2FyY2hfYXJtNjQKIF9fc3VjY2VzcyBfX3JldHZhbCgwKQogaW50IGFyZW5hX2FyZ3M1KHZvaWQgKmN0eCkKIHsKQEAgLTE0Miw2ICYjNDM7MTQ1LDcgQEAgaW50IGFyZW5hX2FyZ3M1KHZvaWQgKmN0eCkKIAogU0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQogX19hcmNoX3g4Nl82NAomIzQzO19fYXJjaF9hcm02NAogX19zdWNjZXNzIF9fcmV0dmFsKDApCiBpbnQgYXJlbmFfYXJnX21peGVkKHZvaWQgKmN0eCkKIHsKQEAgLTE2OSw2ICYjNDM7MTczLDcgQEAgaW50IGFyZW5hX2FyZ19taXhlZCh2b2lkICpjdHgpCiAvKiBrZXJuZWwtc2lkZSBmYXVsdHMgb24gdW5wb3B1bGF0ZWQgcGFnZXMgcmVjb3ZlciB2aWEgdGhlIHNjcmF0Y2ggcGFnZSAqLwogU0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQogX19hcmNoX3g4Nl82NAomIzQzO19fYXJjaF9hcm02NAogX19zdWNjZXNzIF9fcmV0dmFsKDApCiBpbnQgYXJlbmFfYXJnX3VucG9wdWxhdGVkKHZvaWQgKmN0eCkKIHsKQEAgLTE4OSw2ICYjNDM7MTk0LDcgQEAgaW50IGFyZW5hX2FyZ191bnBvcHVsYXRlZCh2b2lkICpjdHgpCiAKIFNFQygmIzM0O3N5c2NhbGwmIzM0OykKIF9fYXJjaF94ODZfNjQKJiM0MztfX2FyY2hfYXJtNjQKIF9fZmFpbHVyZSBfX21zZygmIzM0O2FyZW5hIHBvaW50ZXIgcmVxdWlyZXMgYSBwcm9ncmFtIHdpdGggYW4gYXNzb2NpYXRlZCBhcmVuYSYjMzQ7KQogaW50IGFyZW5hX2FyZ19ub19hcmVuYSh2b2lkICpjdHgpCiB7CkBAIC0xOTgsNiAmIzQzOzIwNCw3IEBAIGludCBhcmVuYV9hcmdfbm9fYXJlbmEodm9pZCAqY3R4KQogCiBTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiBfX2FyY2hfeDg2XzY0CiYjNDM7X19hcmNoX2FybTY0CiBfX2ZhaWx1cmUgX19tc2coJiMzNDtpcyBub3QgYSBwb2ludGVyIHRvIGFyZW5hIG9yIHNjYWxhciYjMzQ7KQogaW50IGFyZW5hX2FyZ19iYWRfcmVnKHZvaWQgKmN0eCkKIHsKQEAgLTIxMyw2ICYjNDM7MjIwLDcgQEAgaW50IGFyZW5hX2FyZ19iYWRfcmVnKHZvaWQgKmN0eCkKIAlkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfU1RBQ0tfQVJHVU1FTlQpCiBTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiBfX2FyY2hfeDg2XzY0CiYjNDM7X19hcmNoX2FybTY0CiBfX2ZhaWx1cmUgX19tc2coJiMzNDthcmVuYSBwb2ludGVyIGNhbm5vdCBiZSBhIHN0YWNrIGFyZ3VtZW50JiMzNDspCiBpbnQgYXJlbmFfYXJnX3N0YWNrKHZvaWQgKmN0eCkKIHsKQEAgLTIyMyw2ICYjNDM7MjMxLDcgQEAgaW50IGFyZW5hX2FyZ19zdGFjayh2b2lkICpjdHgpCiAjZWxzZQogU0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQogX19hcmNoX3g4Nl82NAomIzQzO19fYXJjaF9hcm02NAogX19kZXNjcmlwdGlvbigmIzM0O2FyZW5hX2FyZ19zdGFjazogbm90IHN1cHBvcnRlZCwgZHVtbXkgdGVzdCYjMzQ7KQogX19zdWNjZXNzCiBpbnQgYXJlbmFfYXJnX3N0YWNrKHZvaWQgKmN0eCkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuY19qaXQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuY19qaXQuYwppbmRleCBjOWI5MTg2NjI2MTYyLi5iNWEwMWNiYzMzYTczIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmNfaml0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jX2ppdC5jCkBAIC0zMiw2ICYjNDM7MzIsMTAgQEAgX19qaXRlZCgmIzM0Owltb3ZsCSVlZGksICVlZGkmIzM0OykKIF9faml0ZWQoJiMzNDsJYWRkcQklcjEyLCAlcmRpJiMzNDspCiBfX2ppdGVkKCYjMzQ7Li4uJiMzNDspCiBfX2ppdGVkKCYjMzQ7CWNhbGxxCXt7Lip9fSYjMzQ7KQomIzQzO19fYXJjaF9hcm02NAomIzQzO19faml0ZWQoJiMzNDsuLi4mIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWFkZAl4MCwgeDI4LCB3MCwgdXh0dyYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJe3soYmx8bW92KQkuKn19JiMzNDspCiBfX3N1Y2Nlc3MKIGludCBhcmVuYV9hcmdfaml0X3JlYmFzZSh2b2lkICpjdHgpCiB7CkBAIC00OCw2ICYjNDM7NTIsMTIgQEAgX19qaXRlZCgmIzM0Owl0ZXN0bAklZWRpLCAlZWRpJiMzNDspCiBfX2ppdGVkKCYjMzQ7CWplCUwwJiMzNDspCiBfX2ppdGVkKCYjMzQ7CWFkZHEJJXIxMiwgJXJkaSYjMzQ7KQogX19qaXRlZCgmIzM0O0wwOgljYWxscQl7ey4qfX0mIzM0OykKJiM0MztfX2FyY2hfYXJtNjQKJiM0MztfX2ppdGVkKCYjMzQ7Li4uJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0Owltb3YJdzAsIHcwJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwljYnoJdzAsIEwwJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlhZGQJeDAsIHgyOCwgdzAsIHV4dHcmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7TDA6CXt7Lip9fSYjMzQ7KQogX19zdWNjZXNzCiBpbnQgYXJlbmFfYXJnX2ppdF9udWxsYWJsZSh2b2lkICpjdHgpCiB7CkBAIC03Miw2ICYjNDM7ODIsMTYgQEAgX19qaXRlZCgmIzM0Owl0ZXN0bAklcjhkLCAlcjhkJiMzNDspCiBfX2ppdGVkKCYjMzQ7CWplCUwwJiMzNDspCiBfX2ppdGVkKCYjMzQ7CWFkZHEJJXIxMiwgJXI4JiMzNDspCiBfX2ppdGVkKCYjMzQ7TDA6CWNhbGxxCXt7Lip9fSYjMzQ7KQomIzQzO19fYXJjaF9hcm02NAomIzQzO19faml0ZWQoJiMzNDsuLi4mIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWFkZAl4MCwgeDI4LCB3MCwgdXh0dyYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJYWRkCXgxLCB4MjgsIHcxLCB1eHR3JiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlhZGQJeDIsIHgyOCwgdzIsIHV4dHcmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWFkZAl4MywgeDI4LCB3MywgdXh0dyYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJbW92CXc0LCB3NCYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJY2J6CXc0LCBMMCYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJYWRkCXg0LCB4MjgsIHc0LCB1eHR3JiMzNDspCiYjNDM7X19qaXRlZCgmIzM0O0wwOgl7ey4qfX0mIzM0OykKIF9fc3VjY2VzcwogaW50IGFyZW5hX2FyZ19qaXRfYXJnczUodm9pZCAqY3R4KQogewpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfYXJlbmEuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJ1Y3Rfb3BzX2FyZW5hLmMKaW5kZXggYmEwNGM3M2Q4ZDk2Ny4uOGFhODYzOWRmOTFmMCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfYXJlbmEuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RydWN0X29wc19hcmVuYS5jCkBAIC01OSwxMSAmIzQzOzU5LDI4IEBAIGludCB0ZXN0X2FyZW5hX3N0YWNrX2NiKHVuc2lnbmVkIGxvbmcgbG9uZyAqY3R4KQogCXJldHVybiAwOwogfQogCiYjNDM7U0VDKCYjMzQ7c3RydWN0X29wcy90ZXN0X2FyZW5hX211bHRpc2xvdCYjMzQ7KQomIzQzO2ludCB0ZXN0X2FyZW5hX211bHRpc2xvdF9jYih1bnNpZ25lZCBsb25nIGxvbmcgKmN0eCkKJiM0Mzt7CiYjNDM7CXU2NCBfX2FyZW5hICpwdHIgPSAodTY0IF9fYXJlbmEgKiljdHhbMl07CiYjNDM7CiYjNDM7CWFyZW5hX3RvdWNoJiM0MzsmIzQzOzsKJiM0MzsJLyoKJiM0MzsJICogVGhlIDE2LWJ5dGUgc3RydWN0IG9jY3VwaWVzIGN0eFswXSBhbmQgY3R4WzFdLCBzbyBAcHRyIGlzIGFyZ3VtZW50CiYjNDM7CSAqIG9uZSBidXQgc2xvdCB0d28uIEdldHRpbmcgdGhhdCB3cm9uZyBoYW5kcyB0aGUgY2FsbGJhY2sgYSBzY2FsYXIuCiYjNDM7CSAqLwomIzQzOwlpZiAoY3R4WzBdICE9IDExIHx8IGN0eFsxXSAhPSAyMikKJiM0MzsJCXJldHVybiAweGJhZDsKJiM0MzsJKnB0ciAmIzQzOz0gMTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogU0VDKCYjMzQ7LnN0cnVjdF9vcHMubGluayYjMzQ7KQogc3RydWN0IGJwZl90ZXN0bW9kX29wczMgdGVzdG1vZF9hcmVuYSA9IHsKIAkudGVzdF9hcmVuYSA9ICh2b2lkICopdGVzdF9hcmVuYV9jYiwKIAkudGVzdF9hcmVuYV9udWxsYWJsZSA9ICh2b2lkICopdGVzdF9hcmVuYV9udWxsYWJsZV9jYiwKIAkudGVzdF9hcmVuYV9zdGFjayA9ICh2b2lkICopdGVzdF9hcmVuYV9zdGFja19jYiwKJiM0MzsJLnRlc3RfYXJlbmFfbXVsdGlzbG90ID0gKHZvaWQgKil0ZXN0X2FyZW5hX211bHRpc2xvdF9jYiwKIH07CiAKIFNFQygmIzM0O3N5c2NhbGwmIzM0OykKQEAgLTEwOSw2ICYjNDM7MTI2LDEzIEBAIGludCB0cmlnZ2VyKHZvaWQgKmN0eCkKIAlpZiAoKnZhbCAhPSA0NCkKIAkJcmV0dXJuIDk7CiAKJiM0MzsJLyogYSBtdWx0aS1zbG90IGFyZyBwcmVjZWRlcyB0aGUgYXJlbmEgcG9pbnRlciBoZXJlICovCiYjNDM7CXJldCA9IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX211bHRpc2xvdCgodTY0ICopdmFsKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiAxMDsKJiM0MzsJaWYgKCp2YWwgIT0gNDUpCiYjNDM7CQlyZXR1cm4gMTE7CiYjNDM7CiAJYnBmX2FyZW5hX2ZyZWVfcGFnZXMoJmFtcDthcmVuYSwgKHZvaWQgX19hcmVuYSAqKXZhbCwgMSk7CiAjZW5kaWYKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jCmluZGV4IGE2MTMzZjc1MjFmMzQuLjkzNjZhM2M1NzhmMTMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYwpAQCAtNDAyLDEyICYjNDM7NDAyLDE5IEBAIHN0YXRpYyBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19fdGVzdF9hcmVuYV9zdGFjayh1NjQgYSwgdTY0IGIsIHU2NCBjLCB1NjQgZCwKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19fdGVzdF9hcmVuYV9tdWx0aXNsb3Qoc3RydWN0IGJwZl90ZXN0bW9kX2FyZW5hX3BhaXIgcCwKJiM0MzsJCQkJCQkgIHU2NCAqcHRyX19hcmVuYSkKJiM0Mzt7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzMyBfX2JwZl90ZXN0bW9kX29wczMgPSB7CiAJLnRlc3RfMSA9IGJwZl90ZXN0bW9kX3Rlc3RfMywKIAkudGVzdF8yID0gYnBmX3Rlc3Rtb2RfdGVzdF80LAogCS50ZXN0X2FyZW5hID0gYnBmX3Rlc3Rtb2Rfb3BzM19fdGVzdF9hcmVuYSwKIAkudGVzdF9hcmVuYV9udWxsYWJsZSA9IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmFfbnVsbGFibGUsCiAJLnRlc3RfYXJlbmFfc3RhY2sgPSBicGZfdGVzdG1vZF9vcHMzX190ZXN0X2FyZW5hX3N0YWNrLAomIzQzOwkudGVzdF9hcmVuYV9tdWx0aXNsb3QgPSBicGZfdGVzdG1vZF9vcHMzX190ZXN0X2FyZW5hX211bHRpc2xvdCwKIH07CiAKIHN0YXRpYyB2b2lkIGJwZl90ZXN0bW9kX3Rlc3Rfc3RydWN0X29wczModm9pZCkKQEAgLTQ0MSw2ICYjNDM7NDQ4LDEzIEBAIF9fYnBmX2tmdW5jIGludCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9zdGFjayh1NjQgKnB0cl9fYXJlbmEpCiAJcmV0dXJuIHN0X29wczMtJmd0O3Rlc3RfYXJlbmFfc3RhY2soMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgcHRyX19hcmVuYSk7CiB9CiAKJiM0MztfX2JwZl9rZnVuYyBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfbXVsdGlzbG90KHU2NCAqcHRyX19hcmVuYSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBicGZfdGVzdG1vZF9hcmVuYV9wYWlyIHAgPSB7IC5hID0gMTEsIC5iID0gMjIgfTsKJiM0MzsKJiM0MzsJcmV0dXJuIHN0X29wczMtJmd0O3Rlc3RfYXJlbmFfbXVsdGlzbG90KHAsIHB0cl9fYXJlbmEpOwomIzQzO30KJiM0MzsKIHN0cnVjdCBicGZfdGVzdG1vZF9idGZfdHlwZV90YWdfMSB7CiAJaW50IGE7CiB9OwpAQCAtODUyLDYgJiM0Mzs4NjYsNyBAQCBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfMikKIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYSkKIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9udWxsYWJsZSkKIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9zdGFjaykKJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfbXVsdGlzbG90KQogQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19nZXRfZGVmYXVsdF90cnVzdGVkX3B0cl90ZXN0KTsKIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfcHV0X2RlZmF1bHRfdHJ1c3RlZF9wdHJfdGVzdCk7CiBCVEZfS0ZVTkNTX0VORChicGZfdGVzdG1vZF9jb21tb25fa2Z1bmNfaWRzKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmgKaW5kZXggMzNmMmFmNWI3MDg1Ny4uMjEwYjkxOTI5MGNjMiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5oCkBAIC0xMDMsNiAmIzQzOzEwMywxMiBAQCBzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzMiB7CiAJaW50ICgqdGVzdF8xKSh2b2lkKTsKIH07CiAKJiM0MzsvKiAxNiBieXRlcywgc28gaXQgdGFrZXMgdHdvIGFyZ3VtZW50IHNsb3RzIHdoZW4gcGFzc2VkIGJ5IHZhbHVlICovCiYjNDM7c3RydWN0IGJwZl90ZXN0bW9kX2FyZW5hX3BhaXIgewomIzQzOwl1NjQgYTsKJiM0MzsJdTY0IGI7CiYjNDM7fTsKJiM0MzsKIHN0cnVjdCBicGZfdGVzdG1vZF9vcHMzIHsKIAlpbnQgKCp0ZXN0XzEpKHZvaWQpOwogCWludCAoKnRlc3RfMikodm9pZCk7CkBAIC0xMTIsNiAmIzQzOzExOCw4IEBAIHN0cnVjdCBicGZfdGVzdG1vZF9vcHMzIHsKIAkvKiBlbm91Z2ggbGVhZGluZyBhcmdzIHRvIGZvcmNlIEBwdHIgb250byB0aGUgc3RhY2sgb24geDg2IGFuZCBhcm02NCAqLwogCWludCAoKnRlc3RfYXJlbmFfc3RhY2spKHU2NCBhLCB1NjQgYiwgdTY0IGMsIHU2NCBkLCB1NjQgZSwgdTY0IGYsCiAJCQkJdTY0IGcsIHU2NCBoLCB1NjQgKnB0cik7CiYjNDM7CS8qIGEgbXVsdGktc2xvdCBsZWFkaW5nIGFyZywgc28gQHB0ciBpcyBub3QgYXQgdGhlIHNsb3QgaXRzIGFyZyBpbmRleCBzdWdnZXN0cyAqLwomIzQzOwlpbnQgKCp0ZXN0X2FyZW5hX211bHRpc2xvdCkoc3RydWN0IGJwZl90ZXN0bW9kX2FyZW5hX3BhaXIgcCwgdTY0ICpwdHIpOwogfTsKIAogc3RydWN0IHN0X29wc19hcmdzIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kX2tmdW5jLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oCmluZGV4IGM0MzgzYWNiNTNjMTEuLjdkODEwNzBlZWZlN2YgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kX2tmdW5jLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaApAQCAtMTIzLDYgJiM0MzsxMjMsNyBAQCB2b2lkIGJwZl90ZXN0bW9kX3Rlc3RfbW9kX2tmdW5jKGludCBpKSBfX2tzeW07CiBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmEoX191NjQgKnB0cl9fYXJlbmEpIF9fa3N5bTsKIGludCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9udWxsYWJsZShfX3U2NCAqcHRyX19hcmVuYV9fbnVsbGFibGUpIF9fa3N5bTsKIGludCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9zdGFjayhfX3U2NCAqcHRyX19hcmVuYSkgX19rc3ltOwomIzQzO2ludCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9tdWx0aXNsb3QoX191NjQgKnB0cl9fYXJlbmEpIF9fa3N5bTsKIAogX191NjQgYnBmX2tmdW5jX2NhbGxfdGVzdDEoc3RydWN0IHNvY2sgKnNrLCBfX3UzMiBhLCBfX3U2NCBiLAogCQkJCV9fdTMyIGMsIF9fdTY0IGQpIF9fa3N5bTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjA6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI0MDcKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiA1ODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBhcm02NCBCUEYgSklUIEFyZW5hIEFyZ3VtZW50IFN1cHBvcnQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggaW50cm9kdWNpbmcgQlBGIGFyZW5hIGFyZ3VtZW50IHN1cHBvcnQgZm9yIHRoZSBhcm02NCBKSVQgY29tcGlsZXIuIFRoZSBjaGFuZ2VzIGFyZSBmb2N1c2VkIGluIGBhcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY2AgYW5kIGBhcmNoL2FybTY0L2xpYi9pbnNuLmNgLCB3aXRoIHNvbWUgdGVzdCB1cGRhdGVzIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhpcyBpcyBhIGNvcmUgZnVuY3Rpb25hbCBjaGFuZ2UsIGRlZmluaXRlbHkgcmVxdWlyaW5nIHRob3JvdWdoIGZ1enppbmcgYW5kIHRlc3RpbmcuCgpGaXJzdCwgbGV0JiMzOTtzIHplcm8gaW4gb24gYGFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jYC4gVGhlIGludHJvZHVjdGlvbiBvZiBgZW1pdF9rZnVuY19hcmVuYV9hcmdzYCwgYGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJnc2AsIGFuZCBgZW1pdF9hcmVuYV9hcmdfY29udmAgYWxvbmcgd2l0aCBtb2RpZmljYXRpb25zIHRvIGBzYXZlX2FyZ3NgIGFuZCBgcHJlcGFyZV90cmFtcG9saW5lYCBwb2ludCBkaXJlY3RseSB0byB0aGUgbmV3IGFyZW5hIGFyZ3VtZW50IGhhbmRsaW5nLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIGxpdmVzLgoKTm93LCBsZXQmIzM5O3MgaWRlbnRpZnkgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBwcmVjaXNlbHkuIFdlIGhhdmUgYGFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9leHRlbmRlZF9yZWdgIGluIGBhcmNoL2FybTY0L2xpYi9pbnNuLmNgIGludm9sdmVkLCB3aGljaCBpcyByZWxldmFudCBzaW5jZSBpdCBoYW5kbGVzIGluc3RydWN0aW9uIGdlbmVyYXRpb24sIGFuZCBpbiBgYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmNgLCB3ZSBoYXZlIGBlbWl0X2tmdW5jX2FyZW5hX2FyZ3NgLCBgYnVpbGRfaW5zbmAsIGBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NgLCBgZW1pdF9hcmVuYV9hcmdfY29udmAsIGBzYXZlX2FyZ3NgLCBhbmQgYHByZXBhcmVfdHJhbXBvbGluZWAuCgpXYWl0LCBsZXQgbWUgbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcuIGBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NgIGlzIGV4cG9ydGVkLCBtZWFuaW5nIGl0JiMzOTtzIHBvdGVudGlhbGx5IHVzZWQgZWxzZXdoZXJlLiBTaW1pbGFybHksIGBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnYCBpcyBub24tc3RhdGljIHNvIGl0JiMzOTtzIGxpa2VseSB1c2VkIGJ5IG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwgYXMgd2VsbC4gV2hpbGUgdGhlIG1haW4gZW50cnkgcG9pbnQgYGJwZl9pbnRfaml0X2NvbXBpbGVgIGlzbiYjMzk7dCBkaXJlY3RseSBtb2RpZmllZCwgSSBzZWUgdGhhdCBgYnVpbGRfaW5zbmAsIHdoaWNoIGlzIGNhbGxlZCB3aXRoaW4gYGJwZl9pbnRfaml0X2NvbXBpbGVgLCBpcyBtb2RpZmllZC4gSSBzaG91bGQgcHJvYmFibHkgcGF5IGF0dGVudGlvbiB0byB0aGUgY2FsbCBzdGFjayB0aGVyZS4gQWxzbywgc2luY2UgYHByZXBhcmVfdHJhbXBvbGluZWAgaXMgcGFydCBvZiB0aGUgY2hhbmdlLCBhbmQgSSBzZWUgYGJwZl90cmFtcG9saW5lX3VwZGF0ZWAgb3Igc2ltaWxhciBjYWxscyB0aGlzIHRocm91Z2ggYGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAsIEkgc2hvdWxkIGNoZWNrIGBhcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY2AgZm9yIGBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgLiBUaGF0IGZ1bmN0aW9uIGlzIHByb2JhYmx5IGltcG9ydGFudCwgYXMgdGhlIHRyYW1wb2xpbmUgaXMgaG93IHdlIGFjdHVhbGx5ICp1c2UqIHRoZSBjb21waWxlZCBCUEYuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjA6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM9MjY3OT1zdGF0aWMgdm9pZCBzdG9yZV9mdW5jX21ldGEoc3RydWN0IGppdF9jdHggKmN0eCwgdTY0IGZ1bmNfbWV0YSwgaW50IGZ1bmNfbWV0YV9vZmYpXG4tLVxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMjY4NC1cbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jOjI2ODU6LyogQmFzZWQgb24gdGhlIHg4NiYjMzk7cyBpbXBsZW1lbnRhdGlvbiBvZiBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoKS5cbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTI2ODYtICpcbi0tXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYz0zMDIwPWludCBhcmNoX3Byb3RlY3RfYnBmX3RyYW1wb2xpbmUodm9pZCAqaW1hZ2UsIHVuc2lnbmVkIGludCBzaXplKVxuLS1cbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTMwMjQtXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYzozMDI1OmludCBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sIHZvaWQgKnJvX2ltYWdlLFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMzAyNi1cdFx0XHRcdHZvaWQgKnJvX2ltYWdlX2VuZCwgY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzOTQyCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEJQRiBDb21waWxhdGlvbiBFbnRyeSBQb2ludHMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIEJQRiB0cmFtcG9saW5lIGFuZCBKSVQgY29tcGlsYXRpb24gc2V0dXAuIEZyb20gd2hhdCBJJiMzOTttIHNlZWluZywgYGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAgaXMgdGhlIGtleSBlbnRyeSBwb2ludCBmb3IgaGFuZGxpbmcgdHJhbXBvbGluZXMsIHdoaWNoIG1ha2VzIHNlbnNlLiBUaGVuLCBmb3IgdGhlIGFjdHVhbCBKSVQgY29tcGlsYXRpb24gcHJvY2VzcywgYGJwZl9pbnRfaml0X2NvbXBpbGVgIHNlZW1zIHRvIGJlIHRoZSBtYWluIHN0YXJ0aW5nIHBvaW50LiBOb3csIEkgd2FudCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYW5kIG1ha2Ugc3VyZSB0aGF0IGBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnYCBpcyBhY3R1YWxseSBleHBvcnRlZCBhbmQgYWNjZXNzaWJsZS4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGl0JiMzOTtzIGNvcnJlY3RseSBleHBvc2VkIHdpdGhpbiB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGluc3RydWN0aW9uIGdlbmVyYXRpb24gY29tcG9uZW50cy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBidWlsZGluZyBibG9ja3MgYXJlIGFsbCBhdmFpbGFibGUgdG8gdGhlIG1haW4gcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9pbmNsdWRlL2FzbS9pbnNuLmg9NjUwPXUzMiBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfc2hpZnRlZF9yZWcoZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgZHN0LFxuLS1cbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vaW5zbi5oLTY1NS1cdFx0XHRcdFx0IGVudW0gYWFyY2g2NF9pbnNuX2Fkc2JfdHlwZSB0eXBlKTtcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vaW5zbi5oOjY1Njp1MzIgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZyhlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBkc3QsXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2luc24uaC02NTctXHRcdFx0XHRcdCAgZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgc3JjLFxuLS1cbmFyY2gvYXJtNjQvbGliL2luc24uYz05MzE9dTMyIGFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9zaGlmdGVkX3JlZyhlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBkc3QsXG4tLVxuYXJjaC9hcm02NC9saWIvaW5zbi5jLTk5My0gKi9cbmFyY2gvYXJtNjQvbGliL2luc24uYzo5OTQ6dTMyIGFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9leHRlbmRlZF9yZWcoZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgZHN0LFxuYXJjaC9hcm02NC9saWIvaW5zbi5jLTk5NS1cdFx0XHRcdFx0ICBlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBzcmMsXG4tLVxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdC5oLTI0Ny0jZGVmaW5lIEE2NF9BRERTVUJfRVJFRyhzZiwgUmQsIFJuLCBSbSwgZXh0LCBzaGlmdCwgdHlwZSkgXFxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXQuaDoyNDg6XHRhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnKFJkLCBSbiwgUm0sIFxcXG5hcmNoL2FybTY0L25ldC9icGZfaml0LmgtMjQ5LVx0XHRBQVJDSDY0X0lOU05fRVhURU5EXyMjZXh0LCBzaGlmdCwgQTY0X1ZBUklBTlQoc2YpLCBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NzAyCgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cyBmcm9tIGEgZmlyc3QtcGVyc29uLCBleHBlcnQgcGVyc3BlY3RpdmUsIHN0YXJ0aW5nIHdpdGggYSAqKmJvbGRlZCBoZWFkZXIqKjoKCioqQ2hlY2tpbmcgU3ltYm9sIEV4cG9ydCBpbiBBQXJjaDY0IEluc3RydWN0aW9uIEdlbmVyYXRpb24qKgoKQWxyaWdodCwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4gSSYjMzk7bSB0YWtpbmcgYSBsb29rIGF0IHRoaXMgYGFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9leHRlbmRlZF9yZWdgIGZ1bmN0aW9uLiBOb3csIEkgbmVlZCB0byBrbm93IGlmIGl0JiMzOTtzIGFjdHVhbGx5IHVzYWJsZSBieSBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtLCBvciBpZiBpdCYjMzk7cyBhbiBpbnRlcm5hbCBoZWxwZXIuIFRoZSBrZXkgcXVlc3Rpb24gaW4gbXkgbWluZCByaWdodCBub3cgaXMgd2hldGhlciBvciBub3QgaXQmIzM5O3MgYmVlbiBleHBsaWNpdGx5ICoqZXhwb3J0ZWQgdXNpbmcgYEVYUE9SVF9TWU1CT0xgKiouIFRoYXQmIzM5O3MgdGhlIGNydWNpYWwgZGV0YWlsLiBXaXRob3V0IHRoYXQsIGl04oCZcyBnb2luZyB0byBiZSBjb25maW5lZCB0byBpdHMgY3VycmVudCBjb21waWxhdGlvbiB1bml0LCB3aGljaCBtaWdodCBjYXVzZSBtZSBwcm9ibGVtcyBpZiBJIHRyeSB0byB1c2UgaXQgZWxzZXdoZXJlLiBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gdGhpcyB0byB1bmRlcnN0YW5kIGhvdyB3aWRlbHkgYXZhaWxhYmxlIHRoaXMgZnVuY3Rpb24gaXMgd2l0aGluIHRoZSBsYXJnZXIgYXJjaGl0ZWN0dXJlLiBUaGUgYW5zd2VyIHdpbGwgc2lnbmlmaWNhbnRseSBpbXBhY3QgdGhlIG5leHQgc3RlcHMgSSB0YWtlIGluIHdoYXRldmVyIEkgYW0gdHJ5aW5nIHRvIGFjaGlldmUuIElzIGl0IGludGVybmFsLCBvciBicm9hZGx5IGFjY2Vzc2libGU/IEdvdHRhIGtub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjA6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLiphYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MDA4CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipOYXZpZ2F0aW5nIHRoZSBBcmVuYSBBcmd1bWVudCBMYW5kc2NhcGUqKgoKSG1tLCBubywgdGhpcyBpc24mIzM5O3QgYXMgc3RyYWlnaHRmb3J3YXJkIGFzIGEgc2ltcGxlICYjMzQ7eWVzJiMzNDsgb3IgJiMzNDtubyYjMzQ7IHN0YXRpYyBmbGFnIHdvdWxkIGltcGx5LiBUaGUgc2l0dWF0aW9uJiMzOTtzIG1vcmUgbnVhbmNlZCB0aGFuIHRoYXQuIFRoZSBiZWhhdmlvciBzZWVtcyBkeW5hbWljLCB3aGljaCBtZWFucyBJIG5lZWQgdG8gZGlnIGRlZXBlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hldGhlciB0aGlzIHBsYXRmb3JtIHN1cHBvcnRzIGFyZW5hIGFyZ3VtZW50cywgYnV0IGl0JiMzOTtzIG5vdCBhIGdpdmVuLiBUaGUgY3J1Y2lhbCBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgYGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJnc2AgZnVuY3Rpb24uIFRoYXQgZnVuY3Rpb24gd2lsbCBsaWtlbHkgc2hlZCBsaWdodCBvbiB0aGUgcnVudGltZSBjYXBhYmlsaXRpZXMgYW5kIGRlY2lkZSB3aGVyZSB0byBnbyBmcm9tIGhlcmUuIEl0JiMzOTtzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBpZiBteSBleHBlY3RhdGlvbnMgYXJlIGdvaW5nIHRvIGJlIG1ldCwgb3IgaWYgSSBuZWVkIHRvIHRha2UgYSBkaWZmZXJlbnQgYXBwcm9hY2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYz0yMzkxPWJvb2wgYnBmX2ppdF9zdXBwb3J0c19zdGFja19hcmdzKHZvaWQpXG4tLVxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMjM5NS1cbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jOjIzOTY6Ym9vbCBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3Modm9pZClcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTIzOTcte1xuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz00MTU5PWJvb2wgYnBmX2ppdF9zdXBwb3J0c19zdGFja19hcmdzKHZvaWQpXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTQxNjMtXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6NDE2NDpib29sIGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncyh2b2lkKVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTQxNjUte1xuLS1cbmluY2x1ZGUvbGludXgvZmlsdGVyLmg9MTI0MD1ib29sIGJwZl9qaXRfc3VwcG9ydHNfc3RhY2tfYXJncyh2b2lkKTtcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6MTI0MTpib29sIGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncyh2b2lkKTtcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtMTI0Mi1ib29sIGJwZl9qaXRfc3VwcG9ydHNfZmFyX2tmdW5jX2NhbGwodm9pZCk7XG4tLVxua2VybmVsL2JwZi9jb3JlLmM9MzI5MD1ib29sIF9fd2VhayBicGZfaml0X3N1cHBvcnRzX3N0YWNrX2FyZ3Modm9pZClcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0zMjk0LVxua2VybmVsL2JwZi9jb3JlLmM6MzI5NTpib29sIF9fd2VhayBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3Modm9pZClcbmtlcm5lbC9icGYvY29yZS5jLTMyOTYte1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTMwNj1nZXRfa2Z1bmNfYXJnX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTM4My1cdGVsc2UgaWYgKGlzX2tmdW5jX2FyZ19hcmVuYShtZXRhLVx1MDAzZWJ0ZiwgXHUwMDI2YXJnc1thcmddKSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jOjExMzg0Olx0XHRpZiAoIWJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncygpKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEzODUtXHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O0pJVCBkb2VzIG5vdCBzdXBwb3J0IGtmdW5jICVzKCkgd2l0aCBhcmVuYSBwb2ludGVyIGFyZ3VtZW50c1xcblwmIzM0Oyxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTg3MjE9c3RhdGljIGludCBjaGVja19zdHJ1Y3Rfb3BzX2J0Zl9pZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODgxMC1cdFx0aWYgKGJhc2VfdHlwZShpbmZvLVx1MDAzZXJlZ190eXBlKSA9PSBQVFJfVE9fQVJFTkEpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODgxMTpcdFx0XHRpZiAoIWJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncygpKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg4MTItXHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7SklUIGRvZXMgbm90IHN1cHBvcnQgYXJlbmEgYXJndW1lbnRzXFxuXCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjA6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU5NzgKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAyMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgSklUIFBhdGNoIGZvciBhcm02NCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIGZvY3VzZWQgb24gZW5hYmxpbmcgb3IgaW1wcm92aW5nIEJQRiBKSVQgY29tcGlsYXRpb24gb24gYXJtNjQuIE15IGltbWVkaWF0ZSBvYnNlcnZhdGlvbnMgYXJlIHRoYXQgdGhlIHBhdGNoIGFkZHMgYSBmdW5jdGlvbiwgYGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJnc2AsIHRvIHRoZSBhcm02NCBhcmNoaXRlY3R1cmUsIGFuZCBpdCByZXR1cm5zIHRydWUuIFRoYXQmIzM5O3MgZ29vZCwgaW5kaWNhdGluZyB0aGlzIGFybTY0IGltcGxlbWVudGF0aW9uIGlzIGFjdGl2ZWx5IHN1cHBvcnRpbmcgYXJlbmEtYmFzZWQgYXJndW1lbnQgcGFzc2luZywgd2hpY2ggaXMgbGlrZWx5IGEga2V5IG9wdGltaXphdGlvbi4KCkRpZ2dpbmcgZGVlcGVyLCBJIHNlZSBhIGNoYWluIG9mIG1vZGlmaWNhdGlvbnMuIFRoZSBwYXRjaCBpbmRpcmVjdGx5IHRvdWNoZXMgYGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAgYnkgY2hhbmdpbmcgYHByZXBhcmVfdHJhbXBvbGluZWAsIHdoaWNoIGlzIGNhbGxlZCBieSB0aGUgZm9ybWVyLiBJdCBhbHNvIGNoYW5nZXMgYGJ1aWxkX2luc25gLCB3aGljaCBpcyBjYWxsZWQgYnkgYGJ1aWxkX2JvZHlgIHdoaWNoIGlzIGNhbGxlZCBieSBgYnBmX2ludF9qaXRfY29tcGlsZWAuICBTbywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhvc2UgaW5kaXJlY3QgY2hhbmdlcyBhbmQgaG93IHRoZXkgYXJlIGhhbmRsZWQuCgpUaGUga2V5IGZ1bmN0aW9ucyB0byBzY3J1dGluaXplLCB0aGVuLCBhcmU6IGBicGZfaW50X2ppdF9jb21waWxlYCDigJMgdGhlIGNvcmUgSklUIGNvbXBpbGF0aW9uIGZ1bmN0aW9uLCBgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYCDigJMgcHJvYmFibHkgcmVsYXRlZCB0byB0aGUgaW5zdHJ1Y3Rpb24gc2VxdWVuY2UgbmVlZGVkIGZvciBjYWxsaW5nIGludG8gSklUJiMzOTtkIGNvZGUsIGBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnYCDigJMgYSBzcGVjaWZpYyBpbnN0cnVjdGlvbiBnZW5lcmF0b3IgdGhhdCBtaWdodCBoYXZlIHNwZWNpZmljIEFSTTY0IGZlYXR1cmVzIGJlaW5nIGV4cGxvaXRlZCBhbmQgZmluYWxseSBgYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzYCDigJMgdGhlIGZsYWcgc2lnbmFsaW5nIHRoZSBmZWF0dXJlJiMzOTtzIGF2YWlsYWJpbGl0eS4KCkJlZm9yZSBkaXZpbmcgaW50byB0aGUgY29kZSBpdHNlbGYsIEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgZm9yIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbi4gVGhlIGZpbGUgbG9jYXRpb24gKGBhcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY2ApIHRlbGxzIG1lIHdoZXJlIHRvIGxvb2sgYW5kIEkga25vdyB0aGlzIGhpbmdlcyBvbiBgQ09ORklHX0JQRl9KSVRgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhpcyBpcyBlbmFibGVkIGFuZCB0aGVuIGRpZyBpbiBmdXJ0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX0pJVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWc9Mjc9Y29uZmlnIEJQRl9TWVNDQUxMXG4tLVxua2VybmVsL2JwZi9LY29uZmlnLTQxLVxua2VybmVsL2JwZi9LY29uZmlnOjQyOmNvbmZpZyBCUEZfSklUXG5rZXJuZWwvYnBmL0tjb25maWctNDMtXHRib29sIFwmIzM0O0VuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXCYjMzQ7XG4tLVxua2VybmVsL2JwZi9LY29uZmlnLTU3LVxua2VybmVsL2JwZi9LY29uZmlnOjU4OmNvbmZpZyBCUEZfSklUX0FMV0FZU19PTlxua2VybmVsL2JwZi9LY29uZmlnLTU5LVx0Ym9vbCBcJiMzNDtQZXJtYW5lbnRseSBlbmFibGUgQlBGIEpJVCBhbmQgcmVtb3ZlIEJQRiBpbnRlcnByZXRlclwmIzM0O1xuLS1cbmtlcm5lbC9icGYvS2NvbmZpZy02OC1cbmtlcm5lbC9icGYvS2NvbmZpZzo2OTpjb25maWcgQlBGX0pJVF9ERUZBVUxUX09OXG5rZXJuZWwvYnBmL0tjb25maWctNzAtXHRkZWZfYm9vbCBBUkNIX1dBTlRfREVGQVVMVF9CUEZfSklUIHx8IEJQRl9KSVRfQUxXQVlTX09OXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2ODI4CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgdGFraW5nIG9uIHRoZSBwZXJzb25hIHlvdSByZXF1ZXN0ZWQ6CgoqKkFzc2Vzc2luZyB0aGUgQlBGIEZlYXR1cmUgUmVxdWlyZW1lbnRzKioKCkFscmlnaHQsIHNvIHRoZSBpbml0aWFsIHRob3VnaHQgaXMgY3J5c3RhbCBjbGVhcjogd2UgKm5lZWQqIEJQRl9KSVQgZW5hYmxlZC4gTm8gaWZzLCBhbmRzLCBvciBidXRzIGFib3V0IGl0LiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZS4gTm93LCB0aGUgbWVhdCBvZiB0aGlzIHNlZW1zIHRvIHJldm9sdmUgYXJvdW5kIHRoaXMgQlBGIGFyZW5hIGNvbmNlcHQuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpczogaXMgdGhlcmUgYSBjb3JyZXNwb25kaW5nIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbiB0byBjb250cm9sIHRoaXM/IFNwZWNpZmljYWxseSwgaXMgdGhlcmUgYSBgQ09ORklHX0JQRl9BUkVOQWAgc2V0dGluZz8gTXkgbmV4dCBzdGVwIGlzIGNsZWFybHkgZ29pbmcgdG8gYmUgdG8gdmVyaWZ5IHRoYXQgY29uZmlndXJhdGlvbiBvcHRpb24gZXhpc3RzIGFuZCwgaWYgc28sIHVuZGVyc3RhbmQgaXRzIGN1cnJlbnQgc3RhdGUuIEkgbmVlZCB0byBrbm93IGlmIHRoaXMgZmVhdHVyZSBpcyBldmVuICphdmFpbGFibGUqIGluIHRoZSBjdXJyZW50IGJ1aWxkIGVudmlyb25tZW50IGJlZm9yZSBJIGNhbiBtb3ZlIGZvcndhcmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9BUkVOQSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MDY1CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQlBGIENvbmZpZ3VyYXRpb24gQ29uY2VybnMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIEJQRiBjb25maWd1cmF0aW9uLCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoZSBhYnNlbmNlIG9mIGBDT05GSUdfQlBGX0FSRU5BYC4gSG1tLCBpbnRlcmVzdGluZy4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0aGF0LiBXYWl0LCB3YWl0LiBJIGtub3cgdGhhdCBCUEZfU1lTQ0FMTCBpcyBhYnNvbHV0ZWx5IGNydWNpYWwsIHNvIHRoYXQmIzM5O3MgYSBnaXZlbi4gTmV4dCB1cCwgYENPTkZJR19CUEZfSklUYC4gWWVzLCBvZiBjb3Vyc2UuIEkgY2FuJiMzOTt0IGltYWdpbmUgdGhpcyB3b3JraW5nIHdpdGhvdXQgdGhlIEpJVCBjb21waWxlciBlbmFibGVkLiBMZXQgbWUganVzdCBjb25maXJtIHRoaW5ncyB3aXRoIHRoZSBgYXJjaC9hcm02NC9uZXQvTWFrZWZpbGVgIHRvIG1ha2Ugc3VyZSBub3RoaW5nIGlzIGJlaW5nIG92ZXJsb29rZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9qaXRfY29tcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQvbmV0L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQvbmV0L01ha2VmaWxlLTQtI1xuYXJjaC9hcm02NC9uZXQvTWFrZWZpbGU6NTpvYmotJChDT05GSUdfQlBGX0pJVCkgJiM0Mzs9IGJwZl9qaXRfY29tcC5vIGJwZl90aW1lZF9tYXlfZ290by5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MzU2CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMjA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBCUEYgSklUIEZ1bmN0aW9uYWxpdHkqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBDT05GSUdfQlBGX0pJVGAuIFRoYXQmIzM5O3MgdGhlIGtleSBlbmFibGluZyBjb25maWcsIG9idmlvdXNseS4gTm93LCBJIHdhbnQgdG8gZ2V0IGEgbGF5IG9mIHRoZSBsYW5kLCBzZWUgd2hhdCBvdGhlciByZWxhdGVkIGZ1bmN0aW9ucyBhcmUgaW4gcGxheSBoZXJlLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O3ZlIGdvdCBgYnBmX2ludF9qaXRfY29tcGlsZWAsIGBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgLCBgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZ2AsIGFuZCBgYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzYC4KCkhtbSwgYGJwZl9pbnRfaml0X2NvbXBpbGVgIGxvb2tzIGxpa2UgYSByZWFsbHkgY29yZSwgaG90LXBhdGggZnVuY3Rpb24gZm9yIHRoZSBCUEYgSklULCB2ZXJ5IGdlbmVyaWMgaW4gaXRzIHB1cnBvc2UuIGBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgIGlzIGFsc28gc29tZXdoYXQgZ2VuZXJpYywgYnV0IHNsaWdodGx5IG1vcmUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljLCBwcm9iYWJseSBmb3Igc2V0dGluZyB1cCB0aGUgZXhlY3V0aW9uIGNvbnRleHQuIGBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnYCwgaG93ZXZlciwgdGhhdCYjMzk7cyBkZWZpbml0ZWx5IGEgc3BlY2lmaWMgaW5zdHJ1Y3Rpb24gZ2VuZXJhdG9yOyBpdCYjMzk7cyBnZXR0aW5nIGRvd24gaW50byB0aGUgd2VlZHMgb2YgaG93IGFuIGFkZCBvciBzdWJ0cmFjdCBpcyBoYW5kbGVkIG9uIEFBcmNoNjQuIEFuZCBmaW5hbGx5LCBgYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzYCBzb3VuZHMgdmVyeSBzcGVjaWZpYywgbGlrZWx5IHJlbGF0ZWQgdG8gaG93IHRoZSBKSVQgaGFuZGxlcyBhcmd1bWVudHMgYW5kIG1lbW9yeSBhcmVuYXMuCgpHaXZlbiB0aGF0IGBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnYCBpcyBzbyBmb2N1c2VkLCBJJiMzOTttIGdvaW5nIHRvIGRpZyBhIGJpdCBkZWVwZXIgaW50byBpdHMgY2FsbGVycyB0byBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBpdHMgcm9sZSBpbiB0aGUgYmlnZ2VyIHBpY3R1cmUuIEl0IGNvdWxkIGJlIGFuIGludGVyZXN0aW5nIHBvaW50IHRvIGV4YW1pbmUgb3B0aW1pemF0aW9uIHBvc3NpYmlsaXRpZXMsIGRlcGVuZGluZyBvbiBob3cgd2lkZWx5IGl0JiMzOTtzIHVzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9leHRlbmRlZF9yZWcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL2FybTY0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L2luY2x1ZGUvYXNtL2luc24uaD02NTA9dTMyIGFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9zaGlmdGVkX3JlZyhlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBkc3QsXG4tLVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9pbnNuLmgtNjU1LVx0XHRcdFx0XHQgZW51bSBhYXJjaDY0X2luc25fYWRzYl90eXBlIHR5cGUpO1xuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9pbnNuLmg6NjU2OnUzMiBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnKGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIGRzdCxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vaW5zbi5oLTY1Ny1cdFx0XHRcdFx0ICBlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBzcmMsXG4tLVxuYXJjaC9hcm02NC9saWIvaW5zbi5jPTkzMT11MzIgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX3NoaWZ0ZWRfcmVnKGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIGRzdCxcbi0tXG5hcmNoL2FybTY0L2xpYi9pbnNuLmMtOTkzLSAqL1xuYXJjaC9hcm02NC9saWIvaW5zbi5jOjk5NDp1MzIgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZyhlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBkc3QsXG5hcmNoL2FybTY0L2xpYi9pbnNuLmMtOTk1LVx0XHRcdFx0XHQgIGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIHNyYyxcbi0tXG5hcmNoL2FybTY0L25ldC9icGZfaml0LmgtMjQ3LSNkZWZpbmUgQTY0X0FERFNVQl9FUkVHKHNmLCBSZCwgUm4sIFJtLCBleHQsIHNoaWZ0LCB0eXBlKSBcXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdC5oOjI0ODpcdGFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9leHRlbmRlZF9yZWcoUmQsIFJuLCBSbSwgXFxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXQuaC0yNDktXHRcdEFBUkNINjRfSU5TTl9FWFRFTkRfIyNleHQsIHNoaWZ0LCBBNjRfVkFSSUFOVChzZiksIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NDM1CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlRyYWNpbmcgdGhlIENhbGwgUGF0aCB0byBhIENyaXRpY2FsIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgYGFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9leHRlbmRlZF9yZWdgIGZ1bmN0aW9uLCBhbmQgaXQgbG9va3MgbGlrZSB0aGUgY2FsbCBwYXRoIGlzIGZhaXJseSBjb250YWluZWQuIFRoZSBpbml0aWFsIGhvb2sgaXMgd2l0aGluIHRoZSBgQTY0X0FERFNVQl9FUkVHYCBtYWNybywgYW5kIHRoZSB0cmFjZSBmcm9tIHRoZXJlIGlzIHByZXR0eSBkaXJlY3Q6IGBBNjRfQUREU1VCX0VSRUdgIGdldHMgdXNlZCBpbiBgQTY0X0FERF9FWFRgLCB3aGljaCBmZWVkcyBpbnRvIGBBNjRfQUREX1VYVFdgLiBOb3csIGBBNjRfQUREX1VYVFdgIGlzIGNydWNpYWwsIGFzIGl0IGVuZHMgdXAgaW4gYm90aCBgZW1pdF9rZnVuY19hcmVuYV9hcmdzYCBhbmQgYGVtaXRfYXJlbmFfYXJnX2NvbnZgLiBUaGlzIG1ha2VzIGl0IHRoZSBwaXZvdGFsIHN5bWJvbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgYnJvYWRlciB1c2FnZS4gTm93IEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZSBjaGVjayB0aGUgYGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jPTI2Nzk9c3RhdGljIHZvaWQgc3RvcmVfZnVuY19tZXRhKHN0cnVjdCBqaXRfY3R4ICpjdHgsIHU2NCBmdW5jX21ldGEsIGludCBmdW5jX21ldGFfb2ZmKVxuLS1cbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTI2ODQtXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYzoyNjg1Oi8qIEJhc2VkIG9uIHRoZSB4ODYmIzM5O3MgaW1wbGVtZW50YXRpb24gb2YgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKCkuXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0yNjg2LSAqXG4tLVxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM9MzAyMD1pbnQgYXJjaF9wcm90ZWN0X2JwZl90cmFtcG9saW5lKHZvaWQgKmltYWdlLCB1bnNpZ25lZCBpbnQgc2l6ZSlcbi0tXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0zMDI0LVxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM6MzAyNTppbnQgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICpyb19pbWFnZSxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTMwMjYtXHRcdFx0XHR2b2lkICpyb19pbWFnZV9lbmQsIGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjA6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkxMzUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA0MjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ3VycmVudCBMaW5lIG9mIFRob3VnaHQqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gbmFpbCBkb3duIHNvbWUgZ29vZCAmIzM0O2ZvY3VzIHN5bWJvbHMmIzM0OyDigJMga2V5IGZ1bmN0aW9ucyB0aGF0IHJlcHJlc2VudCB0aGUgYXJlYSBJJiMzOTttIGxvb2tpbmcgYXQuIGBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgIGlzIGEgc3Ryb25nIGNhbmRpZGF0ZSwgZGVmaW5pdGVseSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEJ1dCB3aGF0IGFib3V0IGBicGZfaW50X2ppdF9jb21waWxlYD8gSXQgKmlzKiB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgdGhlIEpJVCBjb21waWxlciwgd2hpY2ggaXMgdmVyeSByZWxldmFudCwgYnV0IGl0JiMzOTtzIGFsc28gcHJldHR5IGdlbmVyaWMuIE1heWJlIHRvbyBicm9hZC4gT24gdGhlIG90aGVyIGhhbmQsIGBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NgIGlzIHJlYWxseSBzcGVjaWZpYyBhbmQgcHJvYmFibHkgcmVwcmVzZW50cyBhIGNsZWFyIGFyZWEgdG8gZXhhbWluZS4gVGhhdCYjMzk7cyBhIHN0cm9uZyBjb250ZW5kZXIuCgpJIG5lZWQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgc3BlY2lmaWMgZnVuY3Rpb25zIHRoYXQgd291bGQgYmUgaGVscGZ1bCBhcyBmb2N1cyBzeW1ib2xzLiBJIGZvdW5kIGBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9tdWx0aXNsb3RgIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jYC4gSG1tLCBidXQgaXMgYGJwZl90ZXN0bW9kYCBhY3R1YWxseSBjb21waWxlZCAqaW50byogdGhlIGtlcm5lbD8gT2ggcmlnaHQsIG5vLCBpdCYjMzk7cyBhIHRlc3QgbW9kdWxlISBXZSBzaG91bGRuJiMzOTt0IGluY2x1ZGUgaXQgaW4gRm9jdXNTeW1ib2xzIHVubGVzcyBpdCYjMzk7cyBwYXJ0IG9mIHRoZSBjb3JlIGtlcm5lbC4gTm9wZSwgaXQmIzM5O3MganVzdCBhIGtlcm5lbCBtb2R1bGUgdXNlZCBmb3IgdGVzdGluZy4gR29vZCB0byByZW1lbWJlci4gU28gc2NyYXRjaCB0aGF0LgoKTGV0JiMzOTtzIHJldmlldyB0aGUgY3VycmVudCBsaXN0OgoKKiAgIGBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnYAoqICAgYGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJnc2AKKiAgIGBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgCiogICBgYnBmX2ludF9qaXRfY29tcGlsZWAgKG1heWJlIEkmIzM5O2xsIG9taXQgdGhpcywgaXQgZmVlbHMgYSBiaXQgdG9vIGJyb2FkKQoKTm93LCB3aGVyZSBhcmUgdGhlc2UgZnVuY3Rpb25zIGRlZmluZWQ/IE9rYXksIGBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NgIGlzIGluIGBhcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY2AsIGFuZCBgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZ2AgaXMgaW4gYGFyY2gvYXJtNjQvbGliL2luc24uY2AuIGBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgIGlzIGFsc28gaW4gYGFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jYC4KCk9rYXksIG5leHQgSSYjMzk7bGwgY2hlY2sgYW5kIGVuc3VyZSB0aGF0IGBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NgIGlzIGFjdHVhbGx5IGNhbGxlZCB0byB2YWxpZGF0ZSB0aGF0IGl0IGlzIHNvbWV0aGluZyB0byBsb29rIGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2NvcmUuYz0zMjkwPWJvb2wgX193ZWFrIGJwZl9qaXRfc3VwcG9ydHNfc3RhY2tfYXJncyh2b2lkKVxuLS1cbmtlcm5lbC9icGYvY29yZS5jLTMyOTQtXG5rZXJuZWwvYnBmL2NvcmUuYzozMjk1OmJvb2wgX193ZWFrIGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncyh2b2lkKVxua2VybmVsL2JwZi9jb3JlLmMtMzI5Ni17XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExMzA2PWdldF9rZnVuY19hcmdfdHlwZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMzgzLVx0ZWxzZSBpZiAoaXNfa2Z1bmNfYXJnX2FyZW5hKG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2FyZ10pKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTEzODQ6XHRcdGlmICghYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzKCkpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTM4NS1cdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7SklUIGRvZXMgbm90IHN1cHBvcnQga2Z1bmMgJXMoKSB3aXRoIGFyZW5hIHBvaW50ZXIgYXJndW1lbnRzXFxuXCYjMzQ7LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xODcyMT1zdGF0aWMgaW50IGNoZWNrX3N0cnVjdF9vcHNfYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4ODEwLVx0XHRpZiAoYmFzZV90eXBlKGluZm8tXHUwMDNlcmVnX3R5cGUpID09IFBUUl9UT19BUkVOQSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE4ODExOlx0XHRcdGlmICghYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzKCkpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODgxMi1cdFx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDtKSVQgZG9lcyBub3Qgc3VwcG9ydCBhcmVuYSBhcmd1bWVudHNcXG5cJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDUxOQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDEyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBKSVQgQ29tcGlsZXIgZm9yIEFybTY0KioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoZSBBcm02NCBCUEYgSklUIGNvbXBpbGVyIGFuZCB0cmFjaW5nIGl0cyBleGVjdXRpb24uIFJpZ2h0LCB0aGUgc3RhcnRpbmcgcG9pbnQgaXMgY2xlYXJseSBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gRXhjZWxsZW50LiBUaGF0IG5hcnJvd3MgbXkgZm9jdXMgY29uc2lkZXJhYmx5LgoKTm93LCB3aGljaCBmdW5jdGlvbnMgYXJlIHRoZSBrZXkgcGxheWVycyBpbiB0aGUgSklUIHByb2Nlc3M/IExldCYjMzk7cyBzZWUuLi4gSSBuZWVkIHRvIGNvbmNlbnRyYXRlIG9uIGBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnYCwgdGhhdCBvbmUmIzM5O3MgbGlrZWx5IGRvaW5nIGhlYXZ5IGxpZnRpbmcsIGFuZCBgYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzYCwgd2hpY2ggcHJvYmFibHkgcmVsYXRlcyB0byBhcmd1bWVudCBoYW5kbGluZy4gT2YgY291cnNlLCBgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYCBpcyBjcnVjaWFsIGZvciB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgc2V0dXAuIEdvdCBpdC4KCkJ1dCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhlIGNvZGUgaXRzZWxmLCBJIHNob3VsZCBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIGBDT05GSUdfQlBGX0pJVGAgaXMgZGVmaW5pdGVseSBhIHByZXJlcXVpc2l0ZSDigJMgbm8gc3VycHJpc2UgdGhlcmUuIEFyZSB0aGVyZSBhbnkgKm90aGVyKiBjb25maWd1cmF0aW9uIG9wdGlvbnMgaW4gcGxheSB0aGF0IG1pZ2h0IGFmZmVjdCB0aGUgQXJtNjQgSklUPyBUaW1lIHRvIGNoZWNrIGBhcmNoL2FybTY0L0tjb25maWdgIGFuZCB2ZXJpZnkuIEdvdHRhIGJlIHRob3JvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUEYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL2FybTY0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDkyOAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6CgoqKkludmVzdGlnYXRpbmcgZUJQRiBKSVQgU3VwcG9ydCBvbiBBUk02NCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBlQlBGIEpJVCBpcyBzdXBwb3J0ZWQgb24gdGhlIEFSTTY0IGFyY2hpdGVjdHVyZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGlzIGtlcm5lbC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMuIEdpdmVuIHRoZSBhcmNoaXRlY3R1cmUsIHRoZSBsaWtlbHkgcGxhY2UgdG8gZmluZCB0aGlzIGluZm9ybWF0aW9uIGlzIGluIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgS2NvbmZpZyBmaWxlLCBzbyBJJiMzOTttIGdvaW5nIHRvIG5hdmlnYXRlIG92ZXIgdG8gYGFyY2gvYXJtNjQvS2NvbmZpZ2AuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGEgY29uZmlnIG9wdGlvbiwgc29tZXRoaW5nIGxpa2UgYEhBVkVfRUJQRl9KSVRgLiBUaGF0IHNob3VsZCB0ZWxsIG1lIGlmIHRoZSBuZWNlc3NhcnkgZmVhdHVyZXMgb3IgaGFyZHdhcmUgc3VwcG9ydCBhcmUgZW5hYmxlZCBhdCBjb21waWxlIHRpbWUuIFRoaXMgaXMgYSBzdGFuZGFyZCBhcHByb2FjaCAtIEtjb25maWcgZmlsZXMgYXJlIHRoZSBjZW50cmFsIHJlcG9zaXRvcnkgZm9yIGZlYXR1cmUgZmxhZ3MgYW5kIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBzZXR0aW5ncy4gS25vd2luZyB0aGlzLCBhbmQgaGF2aW5nIGV4cGVyaWVuY2UgaW4gdGhpcyBhcmVhLCBteSB0aG91Z2h0IHByb2Nlc3MgaXMgdG8gcXVpY2tseSwgYW5kIGVmZmljaWVudGx5IGZpbmQgdGhpcy4gVGhpcyB3aWxsIGJlIG15IHN0YXJ0aW5nIHBvaW50IGluIGNvbmZpcm1pbmcgaWYgdGhlIG5lY2Vzc2FyeSBjb21wb25lbnRzIGZvciBlQlBGIEpJVCBhcmUgcHJlc2VudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMjA6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SEFWRV9FQlBGX0pJVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L0tjb25maWc9Mj1jb25maWcgQVJNNjRcbi0tXG5hcmNoL2FybTY0L0tjb25maWctMTc3LVx0c2VsZWN0IEhBVkVfQVNNX01PRFZFUlNJT05TXG5hcmNoL2FybTY0L0tjb25maWc6MTc4Olx0c2VsZWN0IEhBVkVfRUJQRl9KSVRcbmFyY2gvYXJtNjQvS2NvbmZpZy0xNzktXHRzZWxlY3QgSEFWRV9DX1JFQ09SRE1DT1VOVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTMwNwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDEwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLZXJuZWwgQ29uZmlndXJhdGlvbiBmb3IgQlBGKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBjb25maWd1cmluZyB0aGUga2VybmVsIGZvciBCUEYgZnVuY3Rpb25hbGl0eS4gVGhlIHByaW1hcnkgZmxhZyBJIG5lZWQgdG8gZW5hYmxlIGlzIGRlZmluaXRlbHkgYENPTkZJR19CUEZfSklUYC4gVGhhdCYjMzk7cyB0aGUgY29yZS4gSG9sZCBvbiwgdGhvdWdoLCBJIGFsc28gbmVlZCBgQ09ORklHX0JQRl9TWVNDQUxMYCDigJMgaXQmIzM5O3MgY3J1Y2lhbCBmb3IgdGhlIEJQRiBzeXN0ZW0gY2FsbHMgdG8gd29yay4gUmlnaHQsIEkmIzM5O2xsIGJlIHN1cmUgdG8gaW5jbHVkZSAqYm90aCogYEJQRl9KSVRgIGFuZCBgQlBGX1NZU0NBTExgIGluIHRoZSBidWlsZCBjb25maWd1cmF0aW9uLiBJJiMzOTt2ZSBiZWVuIGRvd24gdGhpcyByb2FkIGJlZm9yZSwgbm8gc2Vuc2UgbWFraW5nIGEgc2lsbHkgbWlzdGFrZS4KCk5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSB2ZXJpZnkgdGhhdCBgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZ2AgaXMgYWNjZXNzaWJsZS4gSSBrbm93IGl0JiMzOTtzIGluIGBhcmNoL2FybTY0L2xpYi9pbnNuLmNgLCB3aGljaCBpcyBjb21waWxlZCBkaXJlY3RseSBpbnRvIHRoZSBrZXJuZWwgaW1hZ2UuIE5vIHN1cnByaXNlcyB0aGVyZS4gR29vZC4gVGhpcyBpcyBhbGwgbG9va2luZyBjb3JyZWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnNuXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQvbGliL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQvbGliL01ha2VmaWxlPTI9bGliLXlcdFx0Oj0gY2xlYXJfdXNlci5vIGRlbGF5Lm8gY29weV9mcm9tX3VzZXIub1x0XHRcXFxuYXJjaC9hcm02NC9saWIvTWFrZWZpbGUtMy1cdFx0ICAgY29weV90b191c2VyLm8gY29weV9wYWdlLm9cdFx0XHRcdFxcXG5hcmNoL2FybTY0L2xpYi9NYWtlZmlsZTo0Olx0XHQgICBjbGVhcl9wYWdlLm8gY3N1bS5vIGluc24ubyBtZW1jaHIubyBtZW1jcHkub1x0XHRcXFxuYXJjaC9hcm02NC9saWIvTWFrZWZpbGUtNS1cdFx0ICAgbWVtc2V0Lm8gbWVtY21wLm8gc3RyY21wLm8gc3RybmNtcC5vIHN0cmxlbi5vXHRcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTc5OAoJCQkJCQkJb3V0cHV0OiAyMTEKCQkJCQkJCXRob3VnaHRzOiAzOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBBcm02NCBCUEYgQXJlbmEgQXJndW1lbnRzIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IHRoZSBjb2RlIGlzIGNvbXBpbGVkIGluLiBOb3cgSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIHRoZSBzY29wZSBvZiB0aGUgbW9kaWZpY2F0aW9ucyB0byBlbnN1cmUgYSB0aG9yb3VnaCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjaGFuZ2VzLiBJJiMzOTt2ZSBnb25lIHRocm91Z2ggZWFjaCBmdW5jdGlvbiwgY2hlY2tpbmcgaWYgaXQmIzM5O3MgYmVlbiBtb2RpZmllZCwgYW5kIGlmIHNvLCBob3cuCgpJdCBsb29rcyBsaWtlIHRoZSBgYnBmX2FyY2hfdGV4dF9jb3B5YCwgYGNsZWFyX2dhcmJhZ2VgLCBgc2F2ZV9hcmdzYCwgYHByZXBhcmVfdHJhbXBvbGluZWAsIGBlbWl0X2tmdW5jX2FyZW5hX2FyZ3NgLCBhbmQgYGVtaXRfYXJlbmFfYXJnX2NvbnZgIGZ1bmN0aW9ucyBhcmUgZWl0aGVyIHVubW9kaWZpZWQgb3Igb25seSB1c2VkIGluIHRoZSBjb250ZXh0LiBIb3dldmVyLCBJIGRpZCBmaW5kIHRoYXQgdGhlIGZvbGxvd2luZyBub24tc3RhdGljIGZ1bmN0aW9ucyBoYXZlIGJlZW4gYWx0ZXJlZDoKLSBgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZ2AKLSBgYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzYAotIGBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgCgpCYXNlZCBvbiB3aGF0IEkgc2VlLCB0aGlzIHNlZW1zIGxpa2UgYSBzb2xpZCBpbXBsZW1lbnRhdGlvbiBvZiBCUEYgYXJlbmEgYXJndW1lbnQgc3VwcG9ydCBmb3IgdGhlIGFybTY0IEpJVCBjb21waWxlci4gVGhlIGNvcmUgY2hhbmdlcyBhcmUgY2VudGVyZWQgYXJvdW5kIGdlbmVyYXRpbmcgbmV3IGluc3RydWN0aW9uIGxvZ2ljLCBzcGVjaWZpY2FsbHkgZm9yIGV4dGVuZGVkIHJlZ2lzdGVyIGFkZC9zdWIgaW5zdHJ1Y3Rpb25zLiBGdXJ0aGVybW9yZSwgdGhlIGFybTY0IEJQRiBKSVQgaGFzIGJlZW4gdXBkYXRlZCB0byBhY2NvbW1vZGF0ZSBhcmVuYSBwb2ludGVycyBpbiBib3RoIGtmdW5jIGNhbGxzIGFuZCBzdHJ1Y3Rfb3BzIGNhbGxiYWNrcy4gVGhlc2UgYXJlIGNydWNpYWwsIGZ1bmN0aW9uYWwgY2hhbmdlcyB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBCUEYgSklULiBUaGlzIGltcGxlbWVudGF0aW9uIGFkZHMgc29tZSBuZXcgc3VyZmFjZSBhcmVhIGluIHRoZSBjb3JlIGtlcm5lbC4KClRoZXJlZm9yZSwgdGhlIG9idmlvdXMgYXJlYXMgdGhhdCBuZWVkIGZ1enppbmcgYXJlOgotIGBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnYAotIGBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NgCi0gYGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAKClRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBzZWVtIHRvIGJlIGBCUEZfU1lTQ0FMTGAgYW5kIGBCUEZfSklUYC4KCkkmIzM5O20gcmVhZHkgdG8gY2FsbCB0aGUgcmVzdWx0cyAmIzM0O3NldC1yZXN1bHRzJiMzNDsgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7QlBGX0pJVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9leHRlbmRlZF9yZWcmIzM0OywKICAgICYjMzQ7YnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzJiMzNDssCiAgICAmIzM0O2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbXBsZW1lbnRzIEJQRiBhcmVuYSBhcmd1bWVudHMgc3VwcG9ydCBmb3IgdGhlIGFybTY0IEpJVCBjb21waWxlci4gSXQgYWRkcyBuZXcgaW5zdHJ1Y3Rpb24gZ2VuZXJhdGlvbiBsb2dpYyBmb3IgZXh0ZW5kZWQgcmVnaXN0ZXIgYWRkL3N1YiBpbnN0cnVjdGlvbnMgKGBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnYCkgYW5kIG1vZGlmaWVzIHRoZSBhcm02NCBCUEYgSklUIChgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYCwgYGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJnc2ApIHRvIGhhbmRsZSBhcmVuYSBwb2ludGVycyBpbiBrZnVuYyBjYWxscyBhbmQgc3RydWN0X29wcyBjYWxsYmFja3MuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUga2VybmVsIChCUEYgSklUKSB0aGF0IGFyZSByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnJiMzNDssCiAgICAmIzM0O2JwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncyYjMzQ7LAogICAgJiMzNDthcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW1wbGVtZW50cyBCUEYgYXJlbmEgYXJndW1lbnRzIHN1cHBvcnQgZm9yIHRoZSBhcm02NCBKSVQgY29tcGlsZXIuIEl0IGFkZHMgbmV3IGluc3RydWN0aW9uIGdlbmVyYXRpb24gbG9naWMgZm9yIGV4dGVuZGVkIHJlZ2lzdGVyIGFkZC9zdWIgaW5zdHJ1Y3Rpb25zIChgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZ2ApIGFuZCBtb2RpZmllcyB0aGUgYXJtNjQgQlBGIEpJVCAoYGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAsIGBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NgKSB0byBoYW5kbGUgYXJlbmEgcG9pbnRlcnMgaW4ga2Z1bmMgY2FsbHMgYW5kIHN0cnVjdF9vcHMgY2FsbGJhY2tzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIGtlcm5lbCAoQlBGIEpJVCkgdGhhdCBhcmUgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDo1MTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjUxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGV4dGVuZHMgdGhlIGFybTY0IEJQRiBKSVQgY29tcGlsZXIgdG8gc3VwcG9ydCBCUEYgYXJlbmEgYXJndW1lbnRzLiBJdCBpbnRyb2R1Y2VzIG5ldyBpbnN0cnVjdGlvbiBlbmNvZGluZyBmdW5jdGlvbnMgZm9yIGFybTY0IChlLmcuLCBgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZ2ApIGFuZCBtb2RpZmllcyB0aGUgSklUIGNvbXBpbGVyIChgYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmNgKSB0byBlbWl0IGluc3RydWN0aW9ucyB0aGF0IHJlYmFzZSBhcmVuYSBwb2ludGVycy4gVGhlIGNoYW5nZXMgYXJlIHN0cmljdGx5IHJlbGF0ZWQgdG8gSklUIGNvbXBpbGF0aW9uIGxvZ2ljIGFuZCBpbnN0cnVjdGlvbiBlbWlzc2lvbi4gVGhleSBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcga2VybmVsIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IGFsbG9jYXRlIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgY291bGQgYmUgbGVmdCB1bmluaXRpYWxpemVkLiBBbnkgYnVncyBpbiB0aGUgSklUIGNvbXBpbGVyIHdvdWxkIGxpa2VseSByZXN1bHQgaW4gaW52YWxpZCBpbnN0cnVjdGlvbiBnZW5lcmF0aW9uLCBjcmFzaGVzLCBvciBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyBpbiB0aGUgSklUZWQgY29kZSwgd2hpY2ggYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIHRlc3RpbmcuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5ZmQzODIyNWMyM2U4YTk1ZWFmMzg4ZjI3M2RjMzM4NzFiMjI0ZWJmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMTMgMjA6NTA6MTEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0IGIvRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdAppbmRleCAxMGU3MjVjYmU2NGNkLi44NWY3M2UwYmJkMGZmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3QKQEAgLTMwMSw5ICYjNDM7MzAxLDkgQEAgQW4gZXhhbXBsZSBpcyBnaXZlbiBiZWxvdzo6CiAgICAgICAgIH0KIAogQ2FsbGluZyBzdWNoIGEga2Z1bmMgcmVxdWlyZXMgdGhlIHByb2dyYW0gdG8gdXNlIGFuIGFyZW5hIG1hcCBhbmQgYSBKSVQgd2l0aAotYXJlbmEgYXJndW1lbnQgc3VwcG9ydCAoY3VycmVudGx5IHg4Ni02NCk7IHZlcmlmaWNhdGlvbiBmYWlscyBvdGhlcndpc2UuIFRoZQotcHJvZ3JhbSBjYW4gcGFzcyBhbnkgdmFsdWUgd2l0aG91dCBjb21wcm9taXNpbmcgdGhlIGtlcm5lbC4gQSB2YWx1ZSB0aGF0IGRvZXMKLW5vdCBwb2ludCBpbnRvIHRoZSBhcmVuYSBpcyBhIHByb2dyYW0gYnVnLgomIzQzO2FyZW5hIGFyZ3VtZW50IHN1cHBvcnQgKGN1cnJlbnRseSB4ODYtNjQgYW5kIGFybTY0KTsgdmVyaWZpY2F0aW9uIGZhaWxzCiYjNDM7b3RoZXJ3aXNlLiBUaGUgcHJvZ3JhbSBjYW4gcGFzcyBhbnkgdmFsdWUgd2l0aG91dCBjb21wcm9taXNpbmcgdGhlIGtlcm5lbC4gQQomIzQzO3ZhbHVlIHRoYXQgZG9lcyBub3QgcG9pbnQgaW50byB0aGUgYXJlbmEgaXMgYSBwcm9ncmFtIGJ1Zy4KIAogVGhlIHN1ZmZpeGVzIGhhdmUgdGhlIHNhbWUgbWVhbmluZyBvbiB0aGUgYXJndW1lbnRzIG9mIHN0cnVjdF9vcHMgc3R1YgogZnVuY3Rpb25zLCB3aXRoIHRoZSBjb252ZXJzaW9uIHJ1bm5pbmcgaW4gdGhlIG9wcG9zaXRlIGRpcmVjdGlvbi4gVGhlCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2luc24uaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vaW5zbi5oCmluZGV4IGNjMDcwMmZhNjRhNzkuLjFjZTc1YTQ0MjYzODcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vaW5zbi5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vaW5zbi5oCkBAIC0yMDUsNiAmIzQzOzIwNSwxOCBAQCBlbnVtIGFhcmNoNjRfaW5zbl9hZHNiX3R5cGUgewogCUFBUkNINjRfSU5TTl9BRFNCX1NVQl9TRVRGTEFHUwogfTsKIAomIzQzOy8qIG9wdGlvbiBmaWVsZCBvZiBhZGQvc3ViIChleHRlbmRlZCByZWdpc3RlcikgKi8KJiM0MztlbnVtIGFhcmNoNjRfaW5zbl9leHRlbmRfdHlwZSB7CiYjNDM7CUFBUkNINjRfSU5TTl9FWFRFTkRfVVhUQiwKJiM0MzsJQUFSQ0g2NF9JTlNOX0VYVEVORF9VWFRILAomIzQzOwlBQVJDSDY0X0lOU05fRVhURU5EX1VYVFcsCiYjNDM7CUFBUkNINjRfSU5TTl9FWFRFTkRfVVhUWCwKJiM0MzsJQUFSQ0g2NF9JTlNOX0VYVEVORF9TWFRCLAomIzQzOwlBQVJDSDY0X0lOU05fRVhURU5EX1NYVEgsCiYjNDM7CUFBUkNINjRfSU5TTl9FWFRFTkRfU1hUVywKJiM0MzsJQUFSQ0g2NF9JTlNOX0VYVEVORF9TWFRYLAomIzQzO307CiYjNDM7CiBlbnVtIGFhcmNoNjRfaW5zbl9tb3Zld2lkZV90eXBlIHsKIAlBQVJDSDY0X0lOU05fTU9WRVdJREVfWkVSTywKIAlBQVJDSDY0X0lOU05fTU9WRVdJREVfS0VFUCwKQEAgLTM3OCw2ICYjNDM7MzkwLDEwIEBAIF9fQUFSQ0g2NF9JTlNOX0ZVTkNTKGFkZCwJMHg3RjIwMDAwMCwgMHgwQjAwMDAwMCkKIF9fQUFSQ0g2NF9JTlNOX0ZVTkNTKGFkZHMsCTB4N0YyMDAwMDAsIDB4MkIwMDAwMDApCiBfX0FBUkNINjRfSU5TTl9GVU5DUyhzdWIsCTB4N0YyMDAwMDAsIDB4NEIwMDAwMDApCiBfX0FBUkNINjRfSU5TTl9GVU5DUyhzdWJzLAkweDdGMjAwMDAwLCAweDZCMDAwMDAwKQomIzQzO19fQUFSQ0g2NF9JTlNOX0ZVTkNTKGFkZF9leHQsCTB4N0ZFMDAwMDAsIDB4MEIyMDAwMDApCiYjNDM7X19BQVJDSDY0X0lOU05fRlVOQ1MoYWRkc19leHQsCTB4N0ZFMDAwMDAsIDB4MkIyMDAwMDApCiYjNDM7X19BQVJDSDY0X0lOU05fRlVOQ1Moc3ViX2V4dCwJMHg3RkUwMDAwMCwgMHg0QjIwMDAwMCkKJiM0MztfX0FBUkNINjRfSU5TTl9GVU5DUyhzdWJzX2V4dCwJMHg3RkUwMDAwMCwgMHg2QjIwMDAwMCkKIF9fQUFSQ0g2NF9JTlNOX0ZVTkNTKG1hZGQsCTB4N0ZFMDgwMDAsIDB4MUIwMDAwMDApCiBfX0FBUkNINjRfSU5TTl9GVU5DUyhtc3ViLAkweDdGRTA4MDAwLCAweDFCMDA4MDAwKQogX19BQVJDSDY0X0lOU05fRlVOQ1ModWRpdiwJMHg3RkUwRkMwMCwgMHgxQUMwMDgwMCkKQEAgLTYzNyw2ICYjNDM7NjUzLDEzIEBAIHUzMiBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfc2hpZnRlZF9yZWcoZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgZHN0LAogCQkJCQkgaW50IHNoaWZ0LAogCQkJCQkgZW51bSBhYXJjaDY0X2luc25fdmFyaWFudCB2YXJpYW50LAogCQkJCQkgZW51bSBhYXJjaDY0X2luc25fYWRzYl90eXBlIHR5cGUpOwomIzQzO3UzMiBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnKGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIGRzdCwKJiM0MzsJCQkJCSAgZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgc3JjLAomIzQzOwkJCQkJICBlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciByZWcsCiYjNDM7CQkJCQkgIGVudW0gYWFyY2g2NF9pbnNuX2V4dGVuZF90eXBlIGV4dGVuZCwKJiM0MzsJCQkJCSAgaW50IHNoaWZ0LAomIzQzOwkJCQkJICBlbnVtIGFhcmNoNjRfaW5zbl92YXJpYW50IHZhcmlhbnQsCiYjNDM7CQkJCQkgIGVudW0gYWFyY2g2NF9pbnNuX2Fkc2JfdHlwZSB0eXBlKTsKIHUzMiBhYXJjaDY0X2luc25fZ2VuX2RhdGExKGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIGRzdCwKIAkJCSAgIGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIHNyYywKIAkJCSAgIGVudW0gYWFyY2g2NF9pbnNuX3ZhcmlhbnQgdmFyaWFudCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbGliL2luc24uYyBiL2FyY2gvYXJtNjQvbGliL2luc24uYwppbmRleCAzN2NlNzVmN2YxZjA4Li5lNzBhYzAyMzg1MTUzIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2xpYi9pbnNuLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9saWIvaW5zbi5jCkBAIC05ODYsNiAmIzQzOzk4Niw2NiBAQCB1MzIgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX3NoaWZ0ZWRfcmVnKGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIGRzdCwKIAlyZXR1cm4gYWFyY2g2NF9pbnNuX2VuY29kZV9pbW1lZGlhdGUoQUFSQ0g2NF9JTlNOX0lNTV82LCBpbnNuLCBzaGlmdCk7CiB9CiAKJiM0MzsvKgomIzQzOyAqIFVubGlrZSB0aGUgc2hpZnRlZC1yZWdpc3RlciBmb3JtLCByZWdpc3RlciAzMSBpcyBub3QgWFpSIGV2ZXJ5d2hlcmUgaGVyZToKJiM0MzsgKiBpdCBlbmNvZGVzIFNQIGZvciBAc3JjLCBhbmQgZm9yIEBkc3QgdG9vIHVubGVzcyBAdHlwZSBzZXRzIHRoZSBmbGFncy4gT25seQomIzQzOyAqIEByZWcga2VlcHMgdGhlIFhaUiBtZWFuaW5nLgomIzQzOyAqLwomIzQzO3UzMiBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnKGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIGRzdCwKJiM0MzsJCQkJCSAgZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgc3JjLAomIzQzOwkJCQkJICBlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciByZWcsCiYjNDM7CQkJCQkgIGVudW0gYWFyY2g2NF9pbnNuX2V4dGVuZF90eXBlIGV4dGVuZCwKJiM0MzsJCQkJCSAgaW50IHNoaWZ0LAomIzQzOwkJCQkJICBlbnVtIGFhcmNoNjRfaW5zbl92YXJpYW50IHZhcmlhbnQsCiYjNDM7CQkJCQkgIGVudW0gYWFyY2g2NF9pbnNuX2Fkc2JfdHlwZSB0eXBlKQomIzQzO3sKJiM0MzsJdTMyIGluc247CiYjNDM7CiYjNDM7CXN3aXRjaCAodHlwZSkgewomIzQzOwljYXNlIEFBUkNINjRfSU5TTl9BRFNCX0FERDoKJiM0MzsJCWluc24gPSBhYXJjaDY0X2luc25fZ2V0X2FkZF9leHRfdmFsdWUoKTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEFBUkNINjRfSU5TTl9BRFNCX1NVQjoKJiM0MzsJCWluc24gPSBhYXJjaDY0X2luc25fZ2V0X3N1Yl9leHRfdmFsdWUoKTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEFBUkNINjRfSU5TTl9BRFNCX0FERF9TRVRGTEFHUzoKJiM0MzsJCWluc24gPSBhYXJjaDY0X2luc25fZ2V0X2FkZHNfZXh0X3ZhbHVlKCk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBBQVJDSDY0X0lOU05fQURTQl9TVUJfU0VURkxBR1M6CiYjNDM7CQlpbnNuID0gYWFyY2g2NF9pbnNuX2dldF9zdWJzX2V4dF92YWx1ZSgpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlwcl9lcnIoJiMzNDslczogdW5rbm93biBhZGQvc3ViIGVuY29kaW5nICVkXG4mIzM0OywgX19mdW5jX18sIHR5cGUpOwomIzQzOwkJcmV0dXJuIEFBUkNINjRfQlJFQUtfRkFVTFQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc3dpdGNoICh2YXJpYW50KSB7CiYjNDM7CWNhc2UgQUFSQ0g2NF9JTlNOX1ZBUklBTlRfMzJCSVQ6CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBBQVJDSDY0X0lOU05fVkFSSUFOVF82NEJJVDoKJiM0MzsJCWluc24gfD0gQUFSQ0g2NF9JTlNOX1NGX0JJVDsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcHJfZXJyKCYjMzQ7JXM6IHVua25vd24gdmFyaWFudCBlbmNvZGluZyAlZFxuJiMzNDssIF9fZnVuY19fLCB2YXJpYW50KTsKJiM0MzsJCXJldHVybiBBQVJDSDY0X0JSRUFLX0ZBVUxUOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChzaGlmdCAmbHQ7IDAgfHwgc2hpZnQgJmd0OyA0KSB7CiYjNDM7CQlwcl9lcnIoJiMzNDslczogaW52YWxpZCBzaGlmdCBlbmNvZGluZyAlZFxuJiMzNDssIF9fZnVuY19fLCBzaGlmdCk7CiYjNDM7CQlyZXR1cm4gQUFSQ0g2NF9CUkVBS19GQVVMVDsKJiM0MzsJfQomIzQzOwomIzQzOwlpbnNuID0gYWFyY2g2NF9pbnNuX2VuY29kZV9yZWdpc3RlcihBQVJDSDY0X0lOU05fUkVHVFlQRV9SRCwgaW5zbiwgZHN0KTsKJiM0MzsKJiM0MzsJaW5zbiA9IGFhcmNoNjRfaW5zbl9lbmNvZGVfcmVnaXN0ZXIoQUFSQ0g2NF9JTlNOX1JFR1RZUEVfUk4sIGluc24sIHNyYyk7CiYjNDM7CiYjNDM7CWluc24gPSBhYXJjaDY0X2luc25fZW5jb2RlX3JlZ2lzdGVyKEFBUkNINjRfSU5TTl9SRUdUWVBFX1JNLCBpbnNuLCByZWcpOwomIzQzOwomIzQzOwkvKiBvcHRpb24gaW4gYml0cyBbMTU6MTNdIGFuZCBpbW0zIGluIFsxMjoxMF0gdG9nZXRoZXIgZmlsbCBJTU1fNiAqLwomIzQzOwlyZXR1cm4gYWFyY2g2NF9pbnNuX2VuY29kZV9pbW1lZGlhdGUoQUFSQ0g2NF9JTlNOX0lNTV82LCBpbnNuLAomIzQzOwkJCQkJICAgICAoZXh0ZW5kICZsdDsmbHQ7IDMpIHwgc2hpZnQpOwomIzQzO30KJiM0MzsKIHUzMiBhYXJjaDY0X2luc25fZ2VuX2RhdGExKGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIGRzdCwKIAkJCSAgIGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIHNyYywKIAkJCSAgIGVudW0gYWFyY2g2NF9pbnNuX3ZhcmlhbnQgdmFyaWFudCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXQuaCBiL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXQuaAppbmRleCBkMTNkZTQyMjJjZmI3Li5iMmZlNmU2ZGNmNDQ3IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L25ldC9icGZfaml0LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9uZXQvYnBmX2ppdC5oCkBAIC0yNDMsNiAmIzQzOzI0MywxNyBAQAogLyogUm4gLSBSbTsgc2V0IGNvbmRpdGlvbiBmbGFncyAqLwogI2RlZmluZSBBNjRfQ01QKHNmLCBSbiwgUm0pIEE2NF9TVUJTKHNmLCBBNjRfWlIsIFJuLCBSbSkKIAomIzQzOy8qIEFkZC9zdWJ0cmFjdCAoZXh0ZW5kZWQgcmVnaXN0ZXIpICovCiYjNDM7I2RlZmluZSBBNjRfQUREU1VCX0VSRUcoc2YsIFJkLCBSbiwgUm0sIGV4dCwgc2hpZnQsIHR5cGUpIFwKJiM0MzsJYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZyhSZCwgUm4sIFJtLCBcCiYjNDM7CQlBQVJDSDY0X0lOU05fRVhURU5EXyMjZXh0LCBzaGlmdCwgQTY0X1ZBUklBTlQoc2YpLCBcCiYjNDM7CQlBQVJDSDY0X0lOU05fQURTQl8jI3R5cGUpCiYjNDM7LyogUmQgPSBSbiAmIzQzOyAoRVhUKFJtKSAmbHQ7Jmx0OyBzaGlmdCkgKi8KJiM0MzsjZGVmaW5lIEE2NF9BRERfRVhUKHNmLCBSZCwgUm4sIFJtLCBleHQsIHNoaWZ0KSBcCiYjNDM7CUE2NF9BRERTVUJfRVJFRyhzZiwgUmQsIFJuLCBSbSwgZXh0LCBzaGlmdCwgQUREKQomIzQzOy8qIFJkID0gUm4gJiM0MzsgKHUzMilSbSAqLwomIzQzOyNkZWZpbmUgQTY0X0FERF9VWFRXKFJkLCBSbiwgUm0pIEE2NF9BRERfRVhUKDEsIFJkLCBSbiwgUm0sIFVYVFcsIDApCiYjNDM7CiAvKiBEYXRhLXByb2Nlc3NpbmcgKDEgc291cmNlKSAqLwogI2RlZmluZSBBNjRfREFUQTEoc2YsIFJkLCBSbiwgdHlwZSkgYWFyY2g2NF9pbnNuX2dlbl9kYXRhMShSZCwgUm4sIFwKIAlBNjRfVkFSSUFOVChzZiksIEFBUkNINjRfSU5TTl9EQVRBMV8jI3R5cGUpCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jCmluZGV4IDc0YjQwODM3OTFkYTMuLmMxOGUwMDVhNDFkYmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jCkBAIC0xMjU2LDYgJiM0MzsxMjU2LDQzIEBAIHN0YXRpYyB2b2lkIGVtaXRfc3RhY2tfYXJnX3N0b3JlX2ltbShzMzIgaW1tLCBzMTYgYnBmX29mZiwgY29uc3QgdTggdG1wLCBzdHJ1Y3QKIAl9CiB9CiAKJiM0MzsvKgomIzQzOyAqIFJlYmFzZSB0aGUgX19hcmVuYSBhcmdzIG9mIGEga2Z1bmMgY2FsbCB0byBhcmVuYSBrZXJuZWwgYWRkcmVzc2VzLAomIzQzOyAqIHhOID0ga2Vybl92bV9zdGFydCAmIzQzOyAodTMyKXhOLCB3aXRoIHRoZSBhcmVuYSBiYXNlIHJlZ2lzdGVyIGhvbGRpbmcKJiM0MzsgKiBrZXJuX3ZtX3N0YXJ0LiBBIG51bGxhYmxlIGFyZyBwcmVzZXJ2ZXMgTlVMTCBieSBza2lwcGluZyB0aGUgYWRkLCB0ZXN0ZWQKJiM0MzsgKiBvbiB0aGUgdHJ1bmNhdGVkIHZhbHVlIGFzIGFyZW5hIE5VTEwgaXMgb2Zmc2V0IDAuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBlbWl0X2tmdW5jX2FyZW5hX2FyZ3Moc3RydWN0IGppdF9jdHggKmN0eCwgY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKQomIzQzO3sKJiM0MzsJY29uc3QgdTggYXJlbmFfdm1fYmFzZSA9IGJwZjJhNjRbQVJFTkFfVk1fU1RBUlRdOwomIzQzOwljb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKmZtOwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJZm0gPSBicGZfaml0X2ZpbmRfa2Z1bmNfbW9kZWwoY3R4LSZndDtwcm9nLCBpbnNuKTsKJiM0MzsJaWYgKCFmbSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbWluX3QoaW50LCBmbS0mZ3Q7bnJfYXJncywgTUFYX0JQRl9GVU5DX1JFR19BUkdTKTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWNvbnN0IHU4IHJlZyA9IGJwZjJhNjRbQlBGX1JFR18xICYjNDM7IGldOwomIzQzOwkJdTggZmxhZ3MgPSBmbS0mZ3Q7YXJnX2ZsYWdzW2ldOwomIzQzOwomIzQzOwkJaWYgKCEoZmxhZ3MgJmFtcDsgQlRGX0ZNT0RFTF9BUkVOQV9BUkcpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJaWYgKFdBUk5fT05fT05DRSghY3R4LSZndDthcmVuYV92bV9zdGFydCkpCiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CQlpZiAoZmxhZ3MgJmFtcDsgQlRGX0ZNT0RFTF9OVUxMQUJMRV9BUkcpIHsKJiM0MzsJCQkvKiAzMi1iaXQgbW92IGNsZWFycyB0aGUgdXBwZXIgMzIgYml0cyAqLwomIzQzOwkJCWVtaXQoQTY0X01PVigwLCByZWcsIHJlZyksIGN0eCk7CiYjNDM7CQkJLyogc2tpcCB0aGUgYWRkIHNvIHRoYXQgTlVMTCBzdGF5cyBOVUxMICovCiYjNDM7CQkJZW1pdChBNjRfQ0JaKDAsIHJlZywgMiksIGN0eCk7CiYjNDM7CQl9CiYjNDM7CQllbWl0KEE2NF9BRERfVVhUVyhyZWcsIGFyZW5hX3ZtX2Jhc2UsIHJlZyksIGN0eCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogLyogSklUcyBhbiBlQlBGIGluc3RydWN0aW9uLgogICogUmV0dXJuczoKICAqIDAgIC0gc3VjY2Vzc2Z1bGx5IEpJVGVkIGFuIDgtYnl0ZSBlQlBGIGluc3RydWN0aW9uLgpAQCAtMTY3OCw2ICYjNDM7MTcxNSwxMSBAQCBzdGF0aWMgaW50IGJ1aWxkX2luc24oY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9pbnNuCiAJCQkJCSAgICAmYW1wO2Z1bmNfYWRkciwgJmFtcDtmdW5jX2FkZHJfZml4ZWQpOwogCQlpZiAocmV0ICZsdDsgMCkKIAkJCXJldHVybiByZXQ7CiYjNDM7CQlpZiAoaW5zbi0mZ3Q7c3JjX3JlZyA9PSBCUEZfUFNFVURPX0tGVU5DX0NBTEwpIHsKJiM0MzsJCQlyZXQgPSBlbWl0X2tmdW5jX2FyZW5hX2FyZ3MoY3R4LCBpbnNuKTsKJiM0MzsJCQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQkJcmV0dXJuIHJldDsKJiM0MzsJCX0KIAkJZW1pdF9jYWxsKGZ1bmNfYWRkciwgY3R4KTsKIAkJLyoKIAkJICogQ2FsbCB0byBhcmNoX2JwZl90aW1lZF9tYXlfZ290bygpIGlzIGVtaXR0ZWQgYnkgdGhlCkBAIC0yMzUxLDYgJiM0MzsyMzkzLDExIEBAIGJvb2wgYnBmX2ppdF9zdXBwb3J0c19zdGFja19hcmdzKHZvaWQpCiAJcmV0dXJuIHRydWU7CiB9CiAKJiM0Mztib29sIGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncyh2b2lkKQomIzQzO3sKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwogdm9pZCAqYnBmX2FyY2hfdGV4dF9jb3B5KHZvaWQgKmRzdCwgdm9pZCAqc3JjLCBzaXplX3QgbGVuKQogewogCWlmICghYWFyY2g2NF9pbnNuX2NvcHkoZHN0LCBzcmMsIGxlbikpCkBAIC0yNTI0LDM0ICYjNDM7MjU3MSw3NiBAQCBzdGF0aWMgdm9pZCBjbGVhcl9nYXJiYWdlKHN0cnVjdCBqaXRfY3R4ICpjdHgsIGludCByZWcsIGludCBlZmZlY3RpdmVfYnl0ZXMpCiAJfQogfQogCiYjNDM7LyoKJiM0MzsgKiBDb252ZXJ0IGFuIGFyZW5hIGtlcm5lbCBhZGRyZXNzIGludG8gdGhlIGFyZW5hIHBvaW50ZXIgZm9ybSBvbiBpdHMgd2F5IGludG8KJiM0MzsgKiB0aGUgQlBGIGN0eCwgZHN0ID0gKHUzMikoc3JjIC0ga2Vybl92bV9zdGFydCksIHdpdGggQGJhc2VfbG8gaG9sZGluZyB0aGUgbG93CiYjNDM7ICogMzIgYml0cyBvZiBrZXJuX3ZtX3N0YXJ0LiBBIG51bGxhYmxlIGFyZyBwcmVzZXJ2ZXMgTlVMTCwgdGVzdGVkIG9uIHRoZSBmdWxsCiYjNDM7ICogNjQtYml0IGtlcm5lbCBwb2ludGVyLiBUaGUgMzItYml0IHN1YnRyYWN0aW9uIGJvdGggdHJ1bmNhdGVzIGFuZCBjbGVhcnMgdGhlCiYjNDM7ICogdXBwZXIgaGFsZiwgc28gdGhlIHN0b3JlZCB2YWx1ZSBzYXRpc2ZpZXMgdGhlIEpJVCBpbnZhcmlhbnQgZm9yIGFyZW5hCiYjNDM7ICogcG9pbnRlciByZWdpc3RlcnMuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgZW1pdF9hcmVuYV9hcmdfY29udihzdHJ1Y3Qgaml0X2N0eCAqY3R4LCB1OCBkc3QsIHU4IHNyYywgYm9vbCBudWxsYWJsZSwgdTggYmFzZV9sbykKJiM0Mzt7CiYjNDM7CWlmIChudWxsYWJsZSkgewomIzQzOwkJaWYgKGRzdCAhPSBzcmMpCiYjNDM7CQkJZW1pdChBNjRfTU9WKDEsIGRzdCwgc3JjKSwgY3R4KTsKJiM0MzsJCS8qIHNraXAgdGhlIHN1YnRyYWN0aW9uIHNvIHRoYXQgTlVMTCBzdGF5cyBOVUxMICovCiYjNDM7CQllbWl0KEE2NF9DQlooMSwgZHN0LCAyKSwgY3R4KTsKJiM0MzsJCXNyYyA9IGRzdDsKJiM0MzsJfQomIzQzOwllbWl0KEE2NF9TVUIoMCwgZHN0LCBzcmMsIGJhc2VfbG8pLCBjdHgpOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHNhdmVfYXJncyhzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBpbnQgYmFyZ3Nfb2ZmLCBpbnQgb2FyZ3Nfb2ZmLAotCQkgICAgICBjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sCi0JCSAgICAgIGNvbnN0IHN0cnVjdCBhcmdfYXV4ICphLAotCQkgICAgICBib29sIGZvcl9jYWxsX29yaWdpbikKJiM0MzsJCSAgICAgIGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgY29uc3Qgc3RydWN0IGFyZ19hdXggKmEsCiYjNDM7CQkgICAgICBib29sIGZvcl9jYWxsX29yaWdpbiwgYm9vbCBpc19zdHJ1Y3Rfb3BzLCB1NjQgYXJlbmFfYmFzZSkKIHsKLQlpbnQgaTsKLQlpbnQgcmVnOwotCWludCBkb2ZmOwotCWludCBzb2ZmOwotCWludCBzbG90czsKIAl1OCB0bXAgPSBicGYyYTY0W1RNUF9SRUdfMV07CiYjNDM7CXU4IGJhc2VfbG8gPSBicGYyYTY0W1RNUF9SRUdfMl07CiYjNDM7CWludCBpLCByZWcsIGRvZmYsIHNvZmYsIHNsb3RzOwomIzQzOwomIzQzOwkvKiBvbmx5IHRoZSBsb3cgMzIgYml0cyBvZiB0aGUgYmFzZSB0YWtlIHBhcnQgaW4gdGhlIHN1YnRyYWN0aW9uICovCiYjNDM7CWlmIChhcmVuYV9iYXNlKQomIzQzOwkJZW1pdF9hNjRfbW92X2koMCwgYmFzZV9sbywgKHMzMikodTMyKWFyZW5hX2Jhc2UsIGN0eCk7CiAKIAkvKiBzdG9yZSBhcmd1bWVudHMgdG8gdGhlIHN0YWNrIGZvciB0aGUgYnBmIHByb2dyYW0sIG9yIHJlc3RvcmUKIAkgKiBhcmd1bWVudHMgZnJvbSBzdGFjayBmb3IgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uCiAJICovCi0JZm9yIChyZWcgPSAwOyByZWcgJmx0OyBhLSZndDtyZWdzX2Zvcl9hcmdzOyByZWcmIzQzOyYjNDM7KSB7Ci0JCWVtaXQoZm9yX2NhbGxfb3JpZ2luID8KLQkJICAgICBBNjRfTERSNjRJKHJlZywgQTY0X1NQLCBiYXJnc19vZmYpIDoKLQkJICAgICBBNjRfU1RSNjRJKHJlZywgQTY0X1NQLCBiYXJnc19vZmYpLAotCQkgICAgIGN0eCk7Ci0JCWJhcmdzX29mZiAmIzQzOz0gODsKJiM0MzsJZm9yIChpID0gMCwgcmVnID0gMDsgaSAmbHQ7IGEtJmd0O2FyZ3NfaW5fcmVnczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWJvb2wgYXJlbmFfYXJnID0gYXJlbmFfYmFzZSAmYW1wOyZhbXA7IChtLSZndDthcmdfZmxhZ3NbaV0gJmFtcDsgQlRGX0ZNT0RFTF9BUkVOQV9BUkcpOwomIzQzOwkJYm9vbCBudWxsYWJsZSA9IG0tJmd0O2FyZ19mbGFnc1tpXSAmYW1wOyBCVEZfRk1PREVMX05VTExBQkxFX0FSRzsKJiM0MzsKJiM0MzsJCXNsb3RzID0gKG0tJmd0O2FyZ19zaXplW2ldICYjNDM7IDcpIC8gODsKJiM0MzsJCXdoaWxlIChzbG90cy0tICZndDsgMCkgewomIzQzOwkJCWlmIChmb3JfY2FsbF9vcmlnaW4pIHsKJiM0MzsJCQkJZW1pdChBNjRfTERSNjRJKHJlZywgQTY0X1NQLCBiYXJnc19vZmYpLCBjdHgpOwomIzQzOwkJCX0gZWxzZSBpZiAoYXJlbmFfYXJnKSB7CiYjNDM7CQkJCWVtaXRfYXJlbmFfYXJnX2NvbnYoY3R4LCB0bXAsIHJlZywgbnVsbGFibGUsIGJhc2VfbG8pOwomIzQzOwkJCQllbWl0KEE2NF9TVFI2NEkodG1wLCBBNjRfU1AsIGJhcmdzX29mZiksIGN0eCk7CiYjNDM7CQkJfSBlbHNlIHsKJiM0MzsJCQkJZW1pdChBNjRfU1RSNjRJKHJlZywgQTY0X1NQLCBiYXJnc19vZmYpLCBjdHgpOwomIzQzOwkJCX0KJiM0MzsJCQlyZWcmIzQzOyYjNDM7OwomIzQzOwkJCWJhcmdzX29mZiAmIzQzOz0gODsKJiM0MzsJCX0KIAl9CiAKLQlzb2ZmID0gMzI7IC8qIG9uIHN0YWNrIGFyZ3VtZW50cyBzdGFydCBmcm9tIEZQICYjNDM7IDMyICovCiYjNDM7CS8qCiYjNDM7CSAqIE9uLXN0YWNrIGFyZ3VtZW50cyBzdGFydCBhYm92ZSB0aGUgZnJhbWUocykgcHVzaGVkIGJ5IHRoZSB0cmFtcG9saW5lCiYjNDM7CSAqIHByb2xvZ3VlLiBFbnRlcmVkIHRocm91Z2ggdGhlIGZlbnRyeSBjYWxsIGZyb20gYSB0cmFjZWQgZnVuY3Rpb24sIHRoZQomIzQzOwkgKiBwcm9sb2d1ZSBzYXZlcyBib3RoIHRoZSBwYXJlbnQgKEZQL3g5KSBhbmQgdGhlIHRyYWNlZCBmdW5jdGlvbgomIzQzOwkgKiAoRlAvTFIpIGZyYW1lcywgc28gdGhlIGFyZ3VtZW50cyBzdGFydCBhdCBGUCAmIzQzOyAzMi4gQSBzdHJ1Y3Rfb3BzCiYjNDM7CSAqIGNhbGxiYWNrIGlzIGNhbGxlZCBpbmRpcmVjdGx5IGFuZCBvbmx5IHRoZSBGUC9MUiBmcmFtZSBpcyBzYXZlZCwgc28KJiM0MzsJICogdGhleSBzdGFydCBhdCBGUCAmIzQzOyAxNi4KJiM0MzsJICovCiYjNDM7CXNvZmYgPSBpc19zdHJ1Y3Rfb3BzID8gMTYgOiAzMjsKIAlkb2ZmID0gKGZvcl9jYWxsX29yaWdpbiA/IG9hcmdzX29mZiA6IGJhcmdzX29mZik7CiAKIAkvKiBzYXZlIG9uIHN0YWNrIGFyZ3VtZW50cyAqLwogCWZvciAoaSA9IGEtJmd0O2FyZ3NfaW5fcmVnczsgaSAmbHQ7IG0tJmd0O25yX2FyZ3M7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlib29sIGFyZW5hX2FyZyA9IGFyZW5hX2Jhc2UgJmFtcDsmYW1wOyAobS0mZ3Q7YXJnX2ZsYWdzW2ldICZhbXA7IEJURl9GTU9ERUxfQVJFTkFfQVJHKTsKJiM0MzsJCWJvb2wgbnVsbGFibGUgPSBtLSZndDthcmdfZmxhZ3NbaV0gJmFtcDsgQlRGX0ZNT0RFTF9OVUxMQUJMRV9BUkc7CiYjNDM7CiAJCXNsb3RzID0gKG0tJmd0O2FyZ19zaXplW2ldICYjNDM7IDcpIC8gODsKIAkJLyogdmVyaWZpZXIgZW5zdXJlcyBhcmdfc2l6ZSAmbHQ7PSAxNiwgc28gc2xvdHMgZXF1YWxzIDEgb3IgMiAqLwogCQl3aGlsZSAoc2xvdHMtLSAmZ3Q7IDApIHsKQEAgLTI1NjEsNiAmIzQzOzI2NTAsMTUgQEAgc3RhdGljIHZvaWQgc2F2ZV9hcmdzKHN0cnVjdCBqaXRfY3R4ICpjdHgsIGludCBiYXJnc19vZmYsIGludCBvYXJnc19vZmYsCiAJCQkgKi8KIAkJCWlmIChzbG90cyA9PSAwICZhbXA7JmFtcDsgIWZvcl9jYWxsX29yaWdpbikKIAkJCQljbGVhcl9nYXJiYWdlKGN0eCwgdG1wLCBtLSZndDthcmdfc2l6ZVtpXSAlIDgpOwomIzQzOwkJCS8qCiYjNDM7CQkJICogTm8gZ3VhcmQgb24gZm9yX2NhbGxfb3JpZ2luIGhlcmU6IG9ubHkgdGhlIGluZGlyZWN0CiYjNDM7CQkJICogdHJhbXBvbGluZSBpcyBnaXZlbiBhIGJhc2UsIGFuZCBpdCBuZXZlciBjYWxscyB0aGUKJiM0MzsJCQkgKiBvcmlnaW5hbCBmdW5jdGlvbiwgc28gYXJndW1lbnRzIGFyZSBuZXZlciBjb252ZXJ0ZWQKJiM0MzsJCQkgKiBvbiB0aGVpciB3YXkgYmFjayBvdXQgdG8gaXQuIFNlZSB0aGUgV0FSTl9PTl9PTkNFKCkKJiM0MzsJCQkgKiBpbiBwcmVwYXJlX3RyYW1wb2xpbmUoKS4KJiM0MzsJCQkgKi8KJiM0MzsJCQlpZiAoYXJlbmFfYXJnKQomIzQzOwkJCQllbWl0X2FyZW5hX2FyZ19jb252KGN0eCwgdG1wLCB0bXAsIG51bGxhYmxlLCBiYXNlX2xvKTsKIAkJCWVtaXQoQTY0X1NUUjY0SSh0bXAsIEE2NF9TUCwgZG9mZiksIGN0eCk7CiAJCQlzb2ZmICYjNDM7PSA4OwogCQkJZG9mZiAmIzQzOz0gODsKQEAgLTI2MjAsOCAmIzQzOzI3MTgsMjEgQEAgc3RhdGljIGludCBwcmVwYXJlX3RyYW1wb2xpbmUoc3RydWN0IGppdF9jdHggKmN0eCwgc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sCiAJYm9vbCBpc19zdHJ1Y3Rfb3BzID0gaXNfc3RydWN0X29wc190cmFtcChmZW50cnkpOwogCWludCBjb29raWVfb2ZmLCBjb29raWVfY250LCBjb29raWVfYmFyZ3Nfb2ZmOwogCWludCBmc2Vzc2lvbl9jbnQgPSBicGZfZnNlc3Npb25fY250KHRub2Rlcyk7CiYjNDM7CXU2NCBhcmVuYV9iYXNlOwogCXU2NCBmdW5jX21ldGE7CiAKJiM0MzsJLyoKJiM0MzsJICogRl9JTkRJUkVDVCBpcyBvbmx5IGNvbXBhdGlibGUgd2l0aCBGX1JFVF9GRU5UUllfUkVULCBpdCBpcyBleHBsaWNpdGx5CiYjNDM7CSAqIGluY29tcGF0aWJsZSB3aXRoIEZfQ0FMTF9PUklHIHwgRl9TS0lQX0ZSQU1FIHwgRl9JUF9BUkcgYmVjYXVzZQomIzQzOwkgKiBAZnVuY19hZGRyLiBBcmVuYSBjb252ZXJzaW9uIHJlbGllcyBvbiB0aGlzOiBicGZfdHJhbXBfYXJlbmFfYmFzZSgpCiYjNDM7CSAqIG9ubHkgcmV0dXJucyBhIGJhc2UgZm9yIHRoZSBpbmRpcmVjdCB0cmFtcG9saW5lLCB3aGljaCB0aGVyZWZvcmUKJiM0MzsJICogbmV2ZXIgY2FsbHMgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uIHdpdGggY29udmVydGVkIGFyZ3VtZW50cy4KJiM0MzsJICovCiYjNDM7CVdBUk5fT05fT05DRSgoZmxhZ3MgJmFtcDsgQlBGX1RSQU1QX0ZfSU5ESVJFQ1QpICZhbXA7JmFtcDsKJiM0MzsJCSAgICAgKGZsYWdzICZhbXA7IH4oQlBGX1RSQU1QX0ZfSU5ESVJFQ1QgfCBCUEZfVFJBTVBfRl9SRVRfRkVOVFJZX1JFVCkpKTsKJiM0MzsKJiM0MzsJYXJlbmFfYmFzZSA9IGJwZl90cmFtcF9hcmVuYV9iYXNlKG0sIHRub2RlcywgZmxhZ3MpOwomIzQzOwogCS8qIHRyYW1wb2xpbmUgc3RhY2sgbGF5b3V0OgogCSAqICAgICAgICAgICAgICAgICAgICBbIHBhcmVudCBpcCAgICAgICAgIF0KIAkgKiAgICAgICAgICAgICAgICAgICAgWyBGUCAgICAgICAgICAgICAgICBdCkBAIC0yNzM3LDcgJiM0MzsyODQ4LDcgQEAgc3RhdGljIGludCBwcmVwYXJlX3RyYW1wb2xpbmUoc3RydWN0IGppdF9jdHggKmN0eCwgc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sCiAJc3RvcmVfZnVuY19tZXRhKGN0eCwgZnVuY19tZXRhLCBmdW5jX21ldGFfb2ZmKTsKIAogCS8qIHNhdmUgYXJncyBmb3IgYnBmICovCi0Jc2F2ZV9hcmdzKGN0eCwgYmFyZ3Nfb2ZmLCBvYXJnc19vZmYsIG0sIGEsIGZhbHNlKTsKJiM0MzsJc2F2ZV9hcmdzKGN0eCwgYmFyZ3Nfb2ZmLCBvYXJnc19vZmYsIG0sIGEsIGZhbHNlLCBpc19zdHJ1Y3Rfb3BzLCBhcmVuYV9iYXNlKTsKIAogCS8qIHNhdmUgY2FsbGVlIHNhdmVkIHJlZ2lzdGVycyAqLwogCWVtaXQoQTY0X1NUUjY0SShBNjRfUigxOSksIEE2NF9TUCwgcmVnc19vZmYpLCBjdHgpOwpAQCAtMjc4NSw4ICYjNDM7Mjg5Niw4IEBAIHN0YXRpYyBpbnQgcHJlcGFyZV90cmFtcG9saW5lKHN0cnVjdCBqaXRfY3R4ICpjdHgsIHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLAogCX0KIAogCWlmIChmbGFncyAmYW1wOyBCUEZfVFJBTVBfRl9DQUxMX09SSUcpIHsKLQkJLyogc2F2ZSBhcmdzIGZvciBvcmlnaW5hbCBmdW5jICovCi0JCXNhdmVfYXJncyhjdHgsIGJhcmdzX29mZiwgb2FyZ3Nfb2ZmLCBtLCBhLCB0cnVlKTsKJiM0MzsJCS8qIHRoZSBvcmlnaW5hbCBmdW5jIHRha2VzIGtlcm5lbCBhZGRyZXNzZXMsIG5ldmVyIGNvbnZlcnRlZCBvbmVzICovCiYjNDM7CQlzYXZlX2FyZ3MoY3R4LCBiYXJnc19vZmYsIG9hcmdzX29mZiwgbSwgYSwgdHJ1ZSwgaXNfc3RydWN0X29wcywgMCk7CiAJCS8qIGNhbGwgb3JpZ2luYWwgZnVuYyAqLwogCQllbWl0KEE2NF9MRFI2NEkoQTY0X1IoMTApLCBBNjRfU1AsIHJldGFkZHJfb2ZmKSwgY3R4KTsKIAkJZW1pdChBNjRfQURSKEE2NF9MUiwgQUFSQ0g2NF9JTlNOX1NJWkUgKiAyKSwgY3R4KTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3Rfc3RydWN0X29wc19hcmVuYS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9zdHJ1Y3Rfb3BzX2FyZW5hLmMKaW5kZXggOTQwZWMyY2RhMGQ1Mi4uN2Y5ZjU0YmEzZmJlNSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9zdHJ1Y3Rfb3BzX2FyZW5hLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9zdHJ1Y3Rfb3BzX2FyZW5hLmMKQEAgLTYsNyAmIzQzOzYsNyBAQAogI2luY2x1ZGUgJiMzNDtzdHJ1Y3Rfb3BzX2FyZW5hX2F0dGFjaC5za2VsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtzdHJ1Y3Rfb3BzX2FyZW5hX2ZhaWwuc2tlbC5oJiMzNDsKIAotI2lmIGRlZmluZWQoX194ODZfNjRfXykKJiM0MzsjaWYgZGVmaW5lZChfX3g4Nl82NF9fKSB8fCBkZWZpbmVkKF9fYWFyY2g2NF9fKQogLyoKICAqIEF0dGFjaCBjYWxsYmFja3Mgd2l0aCBfX2FyZW5hIGFuZCBfX2FyZW5hX19udWxsYWJsZSBhcmd1bWVudHMgYW5kIGRyaXZlCiAgKiB0aGVtIHRocm91Z2ggdGhlIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hKigpIGtmdW5jcy4KQEAgLTExMSwxMSAmIzQzOzExMSwxMSBAQCBzdGF0aWMgdm9pZCBhcmVuYV9hcmdfYXR0YWNoKHZvaWQpCiB2b2lkIHNlcmlhbF90ZXN0X3N0cnVjdF9vcHNfYXJlbmEodm9pZCkKIHsKIAkvKgotCSAqIEFyZW5hIHN0cnVjdF9vcHMgYXJndW1lbnRzIG5lZWQgSklUIHN1cHBvcnQsIGN1cnJlbnRseSB4ODYtNjQgb25seS4KLQkgKiBFbHNld2hlcmUgdmVyaWZpY2F0aW9uIGZhaWxzIHdpdGggJiMzNDtKSVQgZG9lcyBub3Qgc3VwcG9ydCBhcmVuYQotCSAqIGFyZ3VtZW50cyYjMzQ7LCBzbyB0aGUgcHJvZ3JhbXMgY2Fubm90IGV2ZW4gbG9hZC4KJiM0MzsJICogQXJlbmEgc3RydWN0X29wcyBhcmd1bWVudHMgbmVlZCBKSVQgc3VwcG9ydCwgY3VycmVudGx5IHg4Ni02NCBhbmQKJiM0MzsJICogYXJtNjQgb25seS4gRWxzZXdoZXJlIHZlcmlmaWNhdGlvbiBmYWlscyB3aXRoICYjMzQ7SklUIGRvZXMgbm90IHN1cHBvcnQKJiM0MzsJICogYXJlbmEgYXJndW1lbnRzJiMzNDssIHNvIHRoZSBwcm9ncmFtcyBjYW5ub3QgZXZlbiBsb2FkLgogCSAqLwotI2lmIGRlZmluZWQoX194ODZfNjRfXykKJiM0MzsjaWYgZGVmaW5lZChfX3g4Nl82NF9fKSB8fCBkZWZpbmVkKF9fYWFyY2g2NF9fKQogCWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7YXJlbmFfYXJnJiMzNDspKQogCQlhcmVuYV9hcmcoKTsKIAlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O2FyZW5hX2FyZ19mYWlsJiMzNDspKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmMuYwppbmRleCBjZGNlYTg4OWRhNTg2Li5iZjBkMzA0ZTBlNTljIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmMuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmMuYwpAQCAtMjcsNiAmIzQzOzI3LDcgQEAgdm9sYXRpbGUgdTY0IHN0YXNoOwogCiBTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiBfX2FyY2hfeDg2XzY0CiYjNDM7X19hcmNoX2FybTY0CiBfX3N1Y2Nlc3MgX19yZXR2YWwoMCkKIGludCBhcmVuYV9hcmdfZm9ybXModm9pZCAqY3R4KQogewpAQCAtNzAsNiAmIzQzOzcxLDcgQEAgaW50IGFyZW5hX2FyZ19mb3Jtcyh2b2lkICpjdHgpCiAgKi8KIFNFQygmIzM0O3N5c2NhbGwmIzM0OykKIF9fYXJjaF94ODZfNjQKJiM0MztfX2FyY2hfYXJtNjQKIF9fc3VjY2VzcyBfX3JldHZhbCgwKQogaW50IGFyZW5hX2FyZ19yZWJhc2Uodm9pZCAqY3R4KQogewpAQCAtMTExLDYgJiM0MzsxMTMsNyBAQCBpbnQgYXJlbmFfYXJnX3JlYmFzZSh2b2lkICpjdHgpCiAKIFNFQygmIzM0O3N5c2NhbGwmIzM0OykKIF9fYXJjaF94ODZfNjQKJiM0MztfX2FyY2hfYXJtNjQKIF9fc3VjY2VzcyBfX3JldHZhbCgwKQogaW50IGFyZW5hX2FyZ3M1KHZvaWQgKmN0eCkKIHsKQEAgLTE0Miw2ICYjNDM7MTQ1LDcgQEAgaW50IGFyZW5hX2FyZ3M1KHZvaWQgKmN0eCkKIAogU0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQogX19hcmNoX3g4Nl82NAomIzQzO19fYXJjaF9hcm02NAogX19zdWNjZXNzIF9fcmV0dmFsKDApCiBpbnQgYXJlbmFfYXJnX21peGVkKHZvaWQgKmN0eCkKIHsKQEAgLTE2OSw2ICYjNDM7MTczLDcgQEAgaW50IGFyZW5hX2FyZ19taXhlZCh2b2lkICpjdHgpCiAvKiBrZXJuZWwtc2lkZSBmYXVsdHMgb24gdW5wb3B1bGF0ZWQgcGFnZXMgcmVjb3ZlciB2aWEgdGhlIHNjcmF0Y2ggcGFnZSAqLwogU0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQogX19hcmNoX3g4Nl82NAomIzQzO19fYXJjaF9hcm02NAogX19zdWNjZXNzIF9fcmV0dmFsKDApCiBpbnQgYXJlbmFfYXJnX3VucG9wdWxhdGVkKHZvaWQgKmN0eCkKIHsKQEAgLTE4OSw2ICYjNDM7MTk0LDcgQEAgaW50IGFyZW5hX2FyZ191bnBvcHVsYXRlZCh2b2lkICpjdHgpCiAKIFNFQygmIzM0O3N5c2NhbGwmIzM0OykKIF9fYXJjaF94ODZfNjQKJiM0MztfX2FyY2hfYXJtNjQKIF9fZmFpbHVyZSBfX21zZygmIzM0O2FyZW5hIHBvaW50ZXIgcmVxdWlyZXMgYSBwcm9ncmFtIHdpdGggYW4gYXNzb2NpYXRlZCBhcmVuYSYjMzQ7KQogaW50IGFyZW5hX2FyZ19ub19hcmVuYSh2b2lkICpjdHgpCiB7CkBAIC0xOTgsNiAmIzQzOzIwNCw3IEBAIGludCBhcmVuYV9hcmdfbm9fYXJlbmEodm9pZCAqY3R4KQogCiBTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiBfX2FyY2hfeDg2XzY0CiYjNDM7X19hcmNoX2FybTY0CiBfX2ZhaWx1cmUgX19tc2coJiMzNDtpcyBub3QgYSBwb2ludGVyIHRvIGFyZW5hIG9yIHNjYWxhciYjMzQ7KQogaW50IGFyZW5hX2FyZ19iYWRfcmVnKHZvaWQgKmN0eCkKIHsKQEAgLTIxMyw2ICYjNDM7MjIwLDcgQEAgaW50IGFyZW5hX2FyZ19iYWRfcmVnKHZvaWQgKmN0eCkKIAlkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfU1RBQ0tfQVJHVU1FTlQpCiBTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiBfX2FyY2hfeDg2XzY0CiYjNDM7X19hcmNoX2FybTY0CiBfX2ZhaWx1cmUgX19tc2coJiMzNDthcmVuYSBwb2ludGVyIGNhbm5vdCBiZSBhIHN0YWNrIGFyZ3VtZW50JiMzNDspCiBpbnQgYXJlbmFfYXJnX3N0YWNrKHZvaWQgKmN0eCkKIHsKQEAgLTIyMyw2ICYjNDM7MjMxLDcgQEAgaW50IGFyZW5hX2FyZ19zdGFjayh2b2lkICpjdHgpCiAjZWxzZQogU0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQogX19hcmNoX3g4Nl82NAomIzQzO19fYXJjaF9hcm02NAogX19kZXNjcmlwdGlvbigmIzM0O2FyZW5hX2FyZ19zdGFjazogbm90IHN1cHBvcnRlZCwgZHVtbXkgdGVzdCYjMzQ7KQogX19zdWNjZXNzCiBpbnQgYXJlbmFfYXJnX3N0YWNrKHZvaWQgKmN0eCkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuY19qaXQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuY19qaXQuYwppbmRleCBjOWI5MTg2NjI2MTYyLi5iNWEwMWNiYzMzYTczIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmNfaml0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jX2ppdC5jCkBAIC0zMiw2ICYjNDM7MzIsMTAgQEAgX19qaXRlZCgmIzM0Owltb3ZsCSVlZGksICVlZGkmIzM0OykKIF9faml0ZWQoJiMzNDsJYWRkcQklcjEyLCAlcmRpJiMzNDspCiBfX2ppdGVkKCYjMzQ7Li4uJiMzNDspCiBfX2ppdGVkKCYjMzQ7CWNhbGxxCXt7Lip9fSYjMzQ7KQomIzQzO19fYXJjaF9hcm02NAomIzQzO19faml0ZWQoJiMzNDsuLi4mIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWFkZAl4MCwgeDI4LCB3MCwgdXh0dyYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJe3soYmx8bW92KQkuKn19JiMzNDspCiBfX3N1Y2Nlc3MKIGludCBhcmVuYV9hcmdfaml0X3JlYmFzZSh2b2lkICpjdHgpCiB7CkBAIC00OCw2ICYjNDM7NTIsMTIgQEAgX19qaXRlZCgmIzM0Owl0ZXN0bAklZWRpLCAlZWRpJiMzNDspCiBfX2ppdGVkKCYjMzQ7CWplCUwwJiMzNDspCiBfX2ppdGVkKCYjMzQ7CWFkZHEJJXIxMiwgJXJkaSYjMzQ7KQogX19qaXRlZCgmIzM0O0wwOgljYWxscQl7ey4qfX0mIzM0OykKJiM0MztfX2FyY2hfYXJtNjQKJiM0MztfX2ppdGVkKCYjMzQ7Li4uJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0Owltb3YJdzAsIHcwJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwljYnoJdzAsIEwwJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlhZGQJeDAsIHgyOCwgdzAsIHV4dHcmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7TDA6CXt7Lip9fSYjMzQ7KQogX19zdWNjZXNzCiBpbnQgYXJlbmFfYXJnX2ppdF9udWxsYWJsZSh2b2lkICpjdHgpCiB7CkBAIC03Miw2ICYjNDM7ODIsMTYgQEAgX19qaXRlZCgmIzM0Owl0ZXN0bAklcjhkLCAlcjhkJiMzNDspCiBfX2ppdGVkKCYjMzQ7CWplCUwwJiMzNDspCiBfX2ppdGVkKCYjMzQ7CWFkZHEJJXIxMiwgJXI4JiMzNDspCiBfX2ppdGVkKCYjMzQ7TDA6CWNhbGxxCXt7Lip9fSYjMzQ7KQomIzQzO19fYXJjaF9hcm02NAomIzQzO19faml0ZWQoJiMzNDsuLi4mIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWFkZAl4MCwgeDI4LCB3MCwgdXh0dyYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJYWRkCXgxLCB4MjgsIHcxLCB1eHR3JiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlhZGQJeDIsIHgyOCwgdzIsIHV4dHcmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWFkZAl4MywgeDI4LCB3MywgdXh0dyYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJbW92CXc0LCB3NCYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJY2J6CXc0LCBMMCYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJYWRkCXg0LCB4MjgsIHc0LCB1eHR3JiMzNDspCiYjNDM7X19qaXRlZCgmIzM0O0wwOgl7ey4qfX0mIzM0OykKIF9fc3VjY2VzcwogaW50IGFyZW5hX2FyZ19qaXRfYXJnczUodm9pZCAqY3R4KQogewpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfYXJlbmEuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJ1Y3Rfb3BzX2FyZW5hLmMKaW5kZXggYmEwNGM3M2Q4ZDk2Ny4uOGFhODYzOWRmOTFmMCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfYXJlbmEuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RydWN0X29wc19hcmVuYS5jCkBAIC01OSwxMSAmIzQzOzU5LDI4IEBAIGludCB0ZXN0X2FyZW5hX3N0YWNrX2NiKHVuc2lnbmVkIGxvbmcgbG9uZyAqY3R4KQogCXJldHVybiAwOwogfQogCiYjNDM7U0VDKCYjMzQ7c3RydWN0X29wcy90ZXN0X2FyZW5hX211bHRpc2xvdCYjMzQ7KQomIzQzO2ludCB0ZXN0X2FyZW5hX211bHRpc2xvdF9jYih1bnNpZ25lZCBsb25nIGxvbmcgKmN0eCkKJiM0Mzt7CiYjNDM7CXU2NCBfX2FyZW5hICpwdHIgPSAodTY0IF9fYXJlbmEgKiljdHhbMl07CiYjNDM7CiYjNDM7CWFyZW5hX3RvdWNoJiM0MzsmIzQzOzsKJiM0MzsJLyoKJiM0MzsJICogVGhlIDE2LWJ5dGUgc3RydWN0IG9jY3VwaWVzIGN0eFswXSBhbmQgY3R4WzFdLCBzbyBAcHRyIGlzIGFyZ3VtZW50CiYjNDM7CSAqIG9uZSBidXQgc2xvdCB0d28uIEdldHRpbmcgdGhhdCB3cm9uZyBoYW5kcyB0aGUgY2FsbGJhY2sgYSBzY2FsYXIuCiYjNDM7CSAqLwomIzQzOwlpZiAoY3R4WzBdICE9IDExIHx8IGN0eFsxXSAhPSAyMikKJiM0MzsJCXJldHVybiAweGJhZDsKJiM0MzsJKnB0ciAmIzQzOz0gMTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogU0VDKCYjMzQ7LnN0cnVjdF9vcHMubGluayYjMzQ7KQogc3RydWN0IGJwZl90ZXN0bW9kX29wczMgdGVzdG1vZF9hcmVuYSA9IHsKIAkudGVzdF9hcmVuYSA9ICh2b2lkICopdGVzdF9hcmVuYV9jYiwKIAkudGVzdF9hcmVuYV9udWxsYWJsZSA9ICh2b2lkICopdGVzdF9hcmVuYV9udWxsYWJsZV9jYiwKIAkudGVzdF9hcmVuYV9zdGFjayA9ICh2b2lkICopdGVzdF9hcmVuYV9zdGFja19jYiwKJiM0MzsJLnRlc3RfYXJlbmFfbXVsdGlzbG90ID0gKHZvaWQgKil0ZXN0X2FyZW5hX211bHRpc2xvdF9jYiwKIH07CiAKIFNFQygmIzM0O3N5c2NhbGwmIzM0OykKQEAgLTEwOSw2ICYjNDM7MTI2LDEzIEBAIGludCB0cmlnZ2VyKHZvaWQgKmN0eCkKIAlpZiAoKnZhbCAhPSA0NCkKIAkJcmV0dXJuIDk7CiAKJiM0MzsJLyogYSBtdWx0aS1zbG90IGFyZyBwcmVjZWRlcyB0aGUgYXJlbmEgcG9pbnRlciBoZXJlICovCiYjNDM7CXJldCA9IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX211bHRpc2xvdCgodTY0ICopdmFsKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiAxMDsKJiM0MzsJaWYgKCp2YWwgIT0gNDUpCiYjNDM7CQlyZXR1cm4gMTE7CiYjNDM7CiAJYnBmX2FyZW5hX2ZyZWVfcGFnZXMoJmFtcDthcmVuYSwgKHZvaWQgX19hcmVuYSAqKXZhbCwgMSk7CiAjZW5kaWYKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jCmluZGV4IGE2MTMzZjc1MjFmMzQuLjkzNjZhM2M1NzhmMTMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYwpAQCAtNDAyLDEyICYjNDM7NDAyLDE5IEBAIHN0YXRpYyBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19fdGVzdF9hcmVuYV9zdGFjayh1NjQgYSwgdTY0IGIsIHU2NCBjLCB1NjQgZCwKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19fdGVzdF9hcmVuYV9tdWx0aXNsb3Qoc3RydWN0IGJwZl90ZXN0bW9kX2FyZW5hX3BhaXIgcCwKJiM0MzsJCQkJCQkgIHU2NCAqcHRyX19hcmVuYSkKJiM0Mzt7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzMyBfX2JwZl90ZXN0bW9kX29wczMgPSB7CiAJLnRlc3RfMSA9IGJwZl90ZXN0bW9kX3Rlc3RfMywKIAkudGVzdF8yID0gYnBmX3Rlc3Rtb2RfdGVzdF80LAogCS50ZXN0X2FyZW5hID0gYnBmX3Rlc3Rtb2Rfb3BzM19fdGVzdF9hcmVuYSwKIAkudGVzdF9hcmVuYV9udWxsYWJsZSA9IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmFfbnVsbGFibGUsCiAJLnRlc3RfYXJlbmFfc3RhY2sgPSBicGZfdGVzdG1vZF9vcHMzX190ZXN0X2FyZW5hX3N0YWNrLAomIzQzOwkudGVzdF9hcmVuYV9tdWx0aXNsb3QgPSBicGZfdGVzdG1vZF9vcHMzX190ZXN0X2FyZW5hX211bHRpc2xvdCwKIH07CiAKIHN0YXRpYyB2b2lkIGJwZl90ZXN0bW9kX3Rlc3Rfc3RydWN0X29wczModm9pZCkKQEAgLTQ0MSw2ICYjNDM7NDQ4LDEzIEBAIF9fYnBmX2tmdW5jIGludCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9zdGFjayh1NjQgKnB0cl9fYXJlbmEpCiAJcmV0dXJuIHN0X29wczMtJmd0O3Rlc3RfYXJlbmFfc3RhY2soMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgcHRyX19hcmVuYSk7CiB9CiAKJiM0MztfX2JwZl9rZnVuYyBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfbXVsdGlzbG90KHU2NCAqcHRyX19hcmVuYSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBicGZfdGVzdG1vZF9hcmVuYV9wYWlyIHAgPSB7IC5hID0gMTEsIC5iID0gMjIgfTsKJiM0MzsKJiM0MzsJcmV0dXJuIHN0X29wczMtJmd0O3Rlc3RfYXJlbmFfbXVsdGlzbG90KHAsIHB0cl9fYXJlbmEpOwomIzQzO30KJiM0MzsKIHN0cnVjdCBicGZfdGVzdG1vZF9idGZfdHlwZV90YWdfMSB7CiAJaW50IGE7CiB9OwpAQCAtODUyLDYgJiM0Mzs4NjYsNyBAQCBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfMikKIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYSkKIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9udWxsYWJsZSkKIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9zdGFjaykKJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfbXVsdGlzbG90KQogQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19nZXRfZGVmYXVsdF90cnVzdGVkX3B0cl90ZXN0KTsKIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfcHV0X2RlZmF1bHRfdHJ1c3RlZF9wdHJfdGVzdCk7CiBCVEZfS0ZVTkNTX0VORChicGZfdGVzdG1vZF9jb21tb25fa2Z1bmNfaWRzKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmgKaW5kZXggMzNmMmFmNWI3MDg1Ny4uMjEwYjkxOTI5MGNjMiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5oCkBAIC0xMDMsNiAmIzQzOzEwMywxMiBAQCBzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzMiB7CiAJaW50ICgqdGVzdF8xKSh2b2lkKTsKIH07CiAKJiM0MzsvKiAxNiBieXRlcywgc28gaXQgdGFrZXMgdHdvIGFyZ3VtZW50IHNsb3RzIHdoZW4gcGFzc2VkIGJ5IHZhbHVlICovCiYjNDM7c3RydWN0IGJwZl90ZXN0bW9kX2FyZW5hX3BhaXIgewomIzQzOwl1NjQgYTsKJiM0MzsJdTY0IGI7CiYjNDM7fTsKJiM0MzsKIHN0cnVjdCBicGZfdGVzdG1vZF9vcHMzIHsKIAlpbnQgKCp0ZXN0XzEpKHZvaWQpOwogCWludCAoKnRlc3RfMikodm9pZCk7CkBAIC0xMTIsNiAmIzQzOzExOCw4IEBAIHN0cnVjdCBicGZfdGVzdG1vZF9vcHMzIHsKIAkvKiBlbm91Z2ggbGVhZGluZyBhcmdzIHRvIGZvcmNlIEBwdHIgb250byB0aGUgc3RhY2sgb24geDg2IGFuZCBhcm02NCAqLwogCWludCAoKnRlc3RfYXJlbmFfc3RhY2spKHU2NCBhLCB1NjQgYiwgdTY0IGMsIHU2NCBkLCB1NjQgZSwgdTY0IGYsCiAJCQkJdTY0IGcsIHU2NCBoLCB1NjQgKnB0cik7CiYjNDM7CS8qIGEgbXVsdGktc2xvdCBsZWFkaW5nIGFyZywgc28gQHB0ciBpcyBub3QgYXQgdGhlIHNsb3QgaXRzIGFyZyBpbmRleCBzdWdnZXN0cyAqLwomIzQzOwlpbnQgKCp0ZXN0X2FyZW5hX211bHRpc2xvdCkoc3RydWN0IGJwZl90ZXN0bW9kX2FyZW5hX3BhaXIgcCwgdTY0ICpwdHIpOwogfTsKIAogc3RydWN0IHN0X29wc19hcmdzIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kX2tmdW5jLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oCmluZGV4IGM0MzgzYWNiNTNjMTEuLjdkODEwNzBlZWZlN2YgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kX2tmdW5jLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaApAQCAtMTIzLDYgJiM0MzsxMjMsNyBAQCB2b2lkIGJwZl90ZXN0bW9kX3Rlc3RfbW9kX2tmdW5jKGludCBpKSBfX2tzeW07CiBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmEoX191NjQgKnB0cl9fYXJlbmEpIF9fa3N5bTsKIGludCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9udWxsYWJsZShfX3U2NCAqcHRyX19hcmVuYV9fbnVsbGFibGUpIF9fa3N5bTsKIGludCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9zdGFjayhfX3U2NCAqcHRyX19hcmVuYSkgX19rc3ltOwomIzQzO2ludCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9tdWx0aXNsb3QoX191NjQgKnB0cl9fYXJlbmEpIF9fa3N5bTsKIAogX191NjQgYnBmX2tmdW5jX2NhbGxfdGVzdDEoc3RydWN0IHNvY2sgKnNrLCBfX3UzMiBhLCBfX3U2NCBiLAogCQkJCV9fdTMyIGMsIF9fdTY0IGQpIF9fa3N5bTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDIwOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNDA0CgkJCQkJCQlvdXRwdXQ6IDIxMwoJCQkJCQkJdGhvdWdodHM6IDg0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBBcm02NCBCUEYgSklUIEFyZW5hIEFyZ3VtZW50IFN1cHBvcnQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBhZGRpbmcgQlBGIGFyZW5hIGFyZ3VtZW50IHN1cHBvcnQgdG8gdGhlIGFybTY0IEpJVCBjb21waWxlci4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O09rYXksIHRoYXQmIzM5O3MgaW5zdHJ1Y3Rpb24gZW1pc3Npb24sIG5vdCBkYXRhIHN0cnVjdHVyZXMsIHNvIEtNU0FOIGlzIHByb2JhYmx5IG5vdCByZWxldmFudCwgYnV0IGxldCYjMzk7cyBiZSBzdXJlLiYjMzQ7CgpUaGUgcGF0Y2ggbW9kaWZpZXMgc2V2ZXJhbCBmaWxlcywgbW9zdGx5IGZvY3VzaW5nIG9uIGluc3RydWN0aW9uIGVuY29kaW5nIGFuZCB0aGUgSklUIGNvbXBpbGVyIGl0c2VsZi4gSXQgbG9va3MgbGlrZSB0aGUgY29yZSB3b3JrIGlzIGluIGVtaXR0aW5nIHRoZSBjb3JyZWN0IGFybTY0IGluc3RydWN0aW9ucyB0byBoYW5kbGUgQlBGIGFyZW5hIHBvaW50ZXJzIOKAkyBhZGRpbmcgb3Igc3VidHJhY3RpbmcgdGhlIGFyZW5hIGJhc2UgYWRkcmVzcyBkdXJpbmcgSklUIGNvbXBpbGF0aW9uLiBJdCYjMzk7cyBlc3NlbnRpYWxseSBhYm91dCBnZW5lcmF0aW5nIHRoZSAqcmlnaHQqIG1hY2hpbmUgY29kZSwgcmF0aGVyIHRoYW4gaGFuZGxpbmcgcmF3IGRhdGEgZGlyZWN0bHkuCgpNeSBjb25jZXJuIGlzIGFsd2F5cyBhcm91bmQgdW5pbml0aWFsaXplZCBtZW1vcnksIGJ1dCBJJiMzOTttIG5vdCBzZWVpbmcgYW55IHJlZCBmbGFncy4gVGhlIGNoYW5nZXMgYXJlIGlzb2xhdGVkIHdpdGhpbiB0aGUgQlBGIEpJVCBjb21waWxlciBhbmQgdGhlIHNlbGZ0ZXN0cy4gTm8gbmV3IGtlcm5lbCBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBwYXNzZWQgdG8gdXNlciBzcGFjZS4gVGhlcmUgYXJlbiYjMzk7dCBhbnkgY29tcGxleCBhbGxvY2F0aW9ucyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBUaGVyZSYjMzk7cyBub3RoaW5nIG5ldyBiZWluZyBkaXJlY3RseSBleHBvc2VkIHRvIHVzZXJzcGFjZSB0aGF0IHNjcmVhbXMgJiMzNDt1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXR5LiYjMzQ7CgpOb3csIHRoZSBKSVQgY29tcGlsZXIgZ2VuZXJhdGVzIGluc3RydWN0aW9ucywgc28gdGhlcmUgaXMgdGhlIHBvdGVudGlhbCBmb3IgbG9naWMgZXJyb3JzIGluIHRoZSBpbnN0cnVjdGlvbiBnZW5lcmF0aW9uLiBJZiB0aGVyZSYjMzk7cyBhIGJ1ZywgaXQgY291bGQgbGVhZCB0byBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGFjY2VzcyAqd2l0aGluKiB0aGUgSklUZWQgQlBGIGNvZGUuIEhvd2V2ZXIsIEtBU0FOIHNob3VsZCBjYXRjaCB0aGF0LiBUaGlzIGlzbiYjMzk7dCBLTVNBTiYjMzk7cyBkb21haW4uIEluIGZhY3QsIEtNU0FOIGRvZXNuJiMzOTt0IGV2ZW4gaW5zdHJ1bWVudCBKSVQmIzM5O2QgY29kZS4gCgpMZXQgbWUgZG91YmxlLWNoZWNrIGBhcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY2AuIFNwZWNpZmljYWxseSwgZnVuY3Rpb25zIGxpa2UgYGVtaXRfa2Z1bmNfYXJlbmFfYXJnc2AsIGBlbWl0X2FyZW5hX2FyZ19jb252YCwgYHNhdmVfYXJnc2AsIGFuZCBgcHJlcGFyZV90cmFtcG9saW5lYCDigJMgdGhlc2UgYXJlIHdoZXJlIHRoZSBtYWNoaW5lIGNvZGUgaXMgYmVpbmcgZ2VuZXJhdGVkLiBJZiBhIGJ1ZyB3ZXJlIHRvIGV4aXN0IGhlcmUsIHdvdWxkIGl0IGxlYWQgdG8gcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeT8gTm8uIEtNU0FOIGlzbiYjMzk7dCB0aGUgc29sdXRpb24uIFRoZSBKSVQgY29tcGlsZXIgaXMganVzdCBnZW5lcmF0aW5nIHRoZSBtYWNoaW5lIGNvZGUuIElmIHRoZSBjb2RlIGlzIGJ1Z2d5LCBpdCBpcyBLQVNBTiB0aGF0IGNhbiBkZXRlY3QgaXQsIG5vdCBLTVNBTi4KCkxldCBtZSBsb29rIGNsb3NlbHkgYXQgYHNhdmVfYXJnc2AuLi4gc3BlY2lmaWNhbGx5IHRoZSBzbmlwcGV0IGJlbG93OgoKYGBgYwpzdGF0aWMgdm9pZCBzYXZlX2FyZ3Moc3RydWN0IGppdF9jdHggKmN0eCwgaW50IGJhcmdzX29mZiwgaW50IG9hcmdzX29mZiwKCQkgICAgICBjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIGNvbnN0IHN0cnVjdCBhcmdfYXV4ICphLAoJCSAgICAgIGJvb2wgZm9yX2NhbGxfb3JpZ2luLCBib29sIGlzX3N0cnVjdF9vcHMsIHU2NCBhcmVuYV9iYXNlKQp7Cgl1OCB0bXAgPSBicGYyYTY0W1RNUF9SRUdfMV07Cgl1OCBiYXNlX2xvID0gYnBmMmE2NFtUTVBfUkVHXzJdOwoJaW50IGksIHJlZywgZG9mZiwgc29mZiwgc2xvdHM7CgoJLyogb25seSB0aGUgbG93IDMyIGJpdHMgb2YgdGhlIGJhc2UgdGFrZSBwYXJ0IGluIHRoZSBzdWJ0cmFjdGlvbiAqLwoJaWYgKGFyZW5hX2Jhc2UpCgkJZW1pdF9hNjRfbW92X2koMCwgYmFzZV9sbywgKHMzMikodTMyKWFyZW5hX2Jhc2UsIGN0eCk7Ci4uLgpgYGAKCkFoLCBldmVyeXRoaW5nIGhlcmUgKnNlZW1zKiBwcm9wZXJseSBpbml0aWFsaXplZC4gVGhlIGBhcmVuYV9iYXNlYCB2YXJpYWJsZSBpcyBiZWluZyBhc3NpZ25lZCwgYW5kIHRoZSBnZW5lcmF0ZWQgbWFjaGluZSBjb2RlIChhbmQgcmVnaXN0ZXJzKSBzZWVtIHRvIGJlIGNvcnJlY3RseSBtYW5hZ2VkLgoKR2l2ZW4gYWxsIG9mIHRoaXMsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgS01TQU4gaXNuJiMzOTt0IG5lZWRlZCBoZXJlLiBUaGUgcmlzayBpcyBsaW1pdGVkIHRvIEpJVCBjb21waWxhdGlvbiBsb2dpYyBlcnJvcnMsIHdoaWNoIEtBU0FOIGFuZCBzdGFuZGFyZCB0ZXN0aW5nIHNob3VsZCBlZmZlY3RpdmVseSBhZGRyZXNzLgoKKipUaGVyZWZvcmUsIE5lZWRzS01TQU4gPSBmYWxzZS4qKgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAyMDo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBleHRlbmRzIHRoZSBhcm02NCBCUEYgSklUIGNvbXBpbGVyIHRvIHN1cHBvcnQgQlBGIGFyZW5hIGFyZ3VtZW50cy4gSXQgaW50cm9kdWNlcyBuZXcgaW5zdHJ1Y3Rpb24gZW5jb2RpbmcgZnVuY3Rpb25zIGZvciBhcm02NCAoZS5nLiwgYGFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9leHRlbmRlZF9yZWdgKSBhbmQgbW9kaWZpZXMgdGhlIEpJVCBjb21waWxlciAoYGFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jYCkgdG8gZW1pdCBpbnN0cnVjdGlvbnMgdGhhdCByZWJhc2UgYXJlbmEgcG9pbnRlcnMuIFRoZSBjaGFuZ2VzIGFyZSBzdHJpY3RseSByZWxhdGVkIHRvIEpJVCBjb21waWxhdGlvbiBsb2dpYyBhbmQgaW5zdHJ1Y3Rpb24gZW1pc3Npb24uIFRoZXkgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGtlcm5lbCBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBhbGxvY2F0ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB0aGF0IGNvdWxkIGJlIGxlZnQgdW5pbml0aWFsaXplZC4gQW55IGJ1Z3MgaW4gdGhlIEpJVCBjb21waWxlciB3b3VsZCBsaWtlbHkgcmVzdWx0IGluIGludmFsaWQgaW5zdHJ1Y3Rpb24gZ2VuZXJhdGlvbiwgY3Jhc2hlcywgb3Igb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgaW4gdGhlIEpJVGVkIGNvZGUsIHdoaWNoIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGV4dGVuZHMgdGhlIGFybTY0IEJQRiBKSVQgY29tcGlsZXIgdG8gc3VwcG9ydCBCUEYgYXJlbmEgYXJndW1lbnRzLiBJdCBpbnRyb2R1Y2VzIG5ldyBpbnN0cnVjdGlvbiBlbmNvZGluZyBmdW5jdGlvbnMgZm9yIGFybTY0IChlLmcuLCBgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZ2ApIGFuZCBtb2RpZmllcyB0aGUgSklUIGNvbXBpbGVyIChgYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmNgKSB0byBlbWl0IGluc3RydWN0aW9ucyB0aGF0IHJlYmFzZSBhcmVuYSBwb2ludGVycy4gVGhlIGNoYW5nZXMgYXJlIHN0cmljdGx5IHJlbGF0ZWQgdG8gSklUIGNvbXBpbGF0aW9uIGxvZ2ljIGFuZCBpbnN0cnVjdGlvbiBlbWlzc2lvbi4gVGhleSBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcga2VybmVsIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IGFsbG9jYXRlIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgY291bGQgYmUgbGVmdCB1bmluaXRpYWxpemVkLiBBbnkgYnVncyBpbiB0aGUgSklUIGNvbXBpbGVyIHdvdWxkIGxpa2VseSByZXN1bHQgaW4gaW52YWxpZCBpbnN0cnVjdGlvbiBnZW5lcmF0aW9uLCBjcmFzaGVzLCBvciBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyBpbiB0aGUgSklUZWQgY29kZSwgd2hpY2ggYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIHRlc3RpbmcuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDo1MDoxMy4wMzEyNzE1MTZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDAxMTMzMDI5NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9KSVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnXCIsXG4gICAgXCJicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NcIixcbiAgICBcImFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZXh0ZW5kcyB0aGUgYXJtNjQgQlBGIEpJVCBjb21waWxlciB0byBzdXBwb3J0IEJQRiBhcmVuYSBhcmd1bWVudHMuIEl0IGludHJvZHVjZXMgbmV3IGluc3RydWN0aW9uIGVuY29kaW5nIGZ1bmN0aW9ucyBmb3IgYXJtNjQgKGUuZy4sIGBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnYCkgYW5kIG1vZGlmaWVzIHRoZSBKSVQgY29tcGlsZXIgKGBhcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY2ApIHRvIGVtaXQgaW5zdHJ1Y3Rpb25zIHRoYXQgcmViYXNlIGFyZW5hIHBvaW50ZXJzLiBUaGUgY2hhbmdlcyBhcmUgc3RyaWN0bHkgcmVsYXRlZCB0byBKSVQgY29tcGlsYXRpb24gbG9naWMgYW5kIGluc3RydWN0aW9uIGVtaXNzaW9uLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBrZXJuZWwgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvIHRoZXkgYWxsb2NhdGUgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgdGhhdCBjb3VsZCBiZSBsZWZ0IHVuaW5pdGlhbGl6ZWQuIEFueSBidWdzIGluIHRoZSBKSVQgY29tcGlsZXIgd291bGQgbGlrZWx5IHJlc3VsdCBpbiBpbnZhbGlkIGluc3RydWN0aW9uIGdlbmVyYXRpb24sIGNyYXNoZXMsIG9yIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIGluIHRoZSBKSVRlZCBjb2RlLCB3aGljaCBhcmUgYWRlcXVhdGVseSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgdGVzdGluZy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZSB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW1wbGVtZW50cyBCUEYgYXJlbmEgYXJndW1lbnRzIHN1cHBvcnQgZm9yIHRoZSBhcm02NCBKSVQgY29tcGlsZXIuIEl0IGFkZHMgbmV3IGluc3RydWN0aW9uIGdlbmVyYXRpb24gbG9naWMgZm9yIGV4dGVuZGVkIHJlZ2lzdGVyIGFkZC9zdWIgaW5zdHJ1Y3Rpb25zIChgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZ2ApIGFuZCBtb2RpZmllcyB0aGUgYXJtNjQgQlBGIEpJVCAoYGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAsIGBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NgKSB0byBoYW5kbGUgYXJlbmEgcG9pbnRlcnMgaW4ga2Z1bmMgY2FsbHMgYW5kIHN0cnVjdF9vcHMgY2FsbGJhY2tzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIGtlcm5lbCAoQlBGIEpJVCkgdGhhdCBhcmUgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDo1MDoxMy4wMzEyNzg0OTZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1MDU1NTg0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDlmZDM4MjI1YzIzZThhOTVlYWYzODhmMjczZGMzMzg3MWIyMjRlYmZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgMTMgMjA6NTA6MTEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdCBiL0RvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3RcXG5pbmRleCAxMGU3MjVjYmU2NGNkLi44NWY3M2UwYmJkMGZmIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0XFxuQEAgLTMwMSw5ICszMDEsOSBAQCBBbiBleGFtcGxlIGlzIGdpdmVuIGJlbG93OjpcXG4gICAgICAgICB9XFxuIFxcbiBDYWxsaW5nIHN1Y2ggYSBrZnVuYyByZXF1aXJlcyB0aGUgcHJvZ3JhbSB0byB1c2UgYW4gYXJlbmEgbWFwIGFuZCBhIEpJVCB3aXRoXFxuLWFyZW5hIGFyZ3VtZW50IHN1cHBvcnQgKGN1cnJlbnRseSB4ODYtNjQpOyB2ZXJpZmljYXRpb24gZmFpbHMgb3RoZXJ3aXNlLiBUaGVcXG4tcHJvZ3JhbSBjYW4gcGFzcyBhbnkgdmFsdWUgd2l0aG91dCBjb21wcm9taXNpbmcgdGhlIGtlcm5lbC4gQSB2YWx1ZSB0aGF0IGRvZXNcXG4tbm90IHBvaW50IGludG8gdGhlIGFyZW5hIGlzIGEgcHJvZ3JhbSBidWcuXFxuK2FyZW5hIGFyZ3VtZW50IHN1cHBvcnQgKGN1cnJlbnRseSB4ODYtNjQgYW5kIGFybTY0KTsgdmVyaWZpY2F0aW9uIGZhaWxzXFxuK290aGVyd2lzZS4gVGhlIHByb2dyYW0gY2FuIHBhc3MgYW55IHZhbHVlIHdpdGhvdXQgY29tcHJvbWlzaW5nIHRoZSBrZXJuZWwuIEFcXG4rdmFsdWUgdGhhdCBkb2VzIG5vdCBwb2ludCBpbnRvIHRoZSBhcmVuYSBpcyBhIHByb2dyYW0gYnVnLlxcbiBcXG4gVGhlIHN1ZmZpeGVzIGhhdmUgdGhlIHNhbWUgbWVhbmluZyBvbiB0aGUgYXJndW1lbnRzIG9mIHN0cnVjdF9vcHMgc3R1YlxcbiBmdW5jdGlvbnMsIHdpdGggdGhlIGNvbnZlcnNpb24gcnVubmluZyBpbiB0aGUgb3Bwb3NpdGUgZGlyZWN0aW9uLiBUaGVcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9pbnNuLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2luc24uaFxcbmluZGV4IGNjMDcwMmZhNjRhNzkuLjFjZTc1YTQ0MjYzODcgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9pbnNuLmhcXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2luc24uaFxcbkBAIC0yMDUsNiArMjA1LDE4IEBAIGVudW0gYWFyY2g2NF9pbnNuX2Fkc2JfdHlwZSB7XFxuIFxcdEFBUkNINjRfSU5TTl9BRFNCX1NVQl9TRVRGTEFHU1xcbiB9O1xcbiBcXG4rLyogb3B0aW9uIGZpZWxkIG9mIGFkZC9zdWIgKGV4dGVuZGVkIHJlZ2lzdGVyKSAqL1xcbitlbnVtIGFhcmNoNjRfaW5zbl9leHRlbmRfdHlwZSB7XFxuK1xcdEFBUkNINjRfSU5TTl9FWFRFTkRfVVhUQixcXG4rXFx0QUFSQ0g2NF9JTlNOX0VYVEVORF9VWFRILFxcbitcXHRBQVJDSDY0X0lOU05fRVhURU5EX1VYVFcsXFxuK1xcdEFBUkNINjRfSU5TTl9FWFRFTkRfVVhUWCxcXG4rXFx0QUFSQ0g2NF9JTlNOX0VYVEVORF9TWFRCLFxcbitcXHRBQVJDSDY0X0lOU05fRVhURU5EX1NYVEgsXFxuK1xcdEFBUkNINjRfSU5TTl9FWFRFTkRfU1hUVyxcXG4rXFx0QUFSQ0g2NF9JTlNOX0VYVEVORF9TWFRYLFxcbit9O1xcbitcXG4gZW51bSBhYXJjaDY0X2luc25fbW92ZXdpZGVfdHlwZSB7XFxuIFxcdEFBUkNINjRfSU5TTl9NT1ZFV0lERV9aRVJPLFxcbiBcXHRBQVJDSDY0X0lOU05fTU9WRVdJREVfS0VFUCxcXG5AQCAtMzc4LDYgKzM5MCwxMCBAQCBfX0FBUkNINjRfSU5TTl9GVU5DUyhhZGQsXFx0MHg3RjIwMDAwMCwgMHgwQjAwMDAwMClcXG4gX19BQVJDSDY0X0lOU05fRlVOQ1MoYWRkcyxcXHQweDdGMjAwMDAwLCAweDJCMDAwMDAwKVxcbiBfX0FBUkNINjRfSU5TTl9GVU5DUyhzdWIsXFx0MHg3RjIwMDAwMCwgMHg0QjAwMDAwMClcXG4gX19BQVJDSDY0X0lOU05fRlVOQ1Moc3VicyxcXHQweDdGMjAwMDAwLCAweDZCMDAwMDAwKVxcbitfX0FBUkNINjRfSU5TTl9GVU5DUyhhZGRfZXh0LFxcdDB4N0ZFMDAwMDAsIDB4MEIyMDAwMDApXFxuK19fQUFSQ0g2NF9JTlNOX0ZVTkNTKGFkZHNfZXh0LFxcdDB4N0ZFMDAwMDAsIDB4MkIyMDAwMDApXFxuK19fQUFSQ0g2NF9JTlNOX0ZVTkNTKHN1Yl9leHQsXFx0MHg3RkUwMDAwMCwgMHg0QjIwMDAwMClcXG4rX19BQVJDSDY0X0lOU05fRlVOQ1Moc3Vic19leHQsXFx0MHg3RkUwMDAwMCwgMHg2QjIwMDAwMClcXG4gX19BQVJDSDY0X0lOU05fRlVOQ1MobWFkZCxcXHQweDdGRTA4MDAwLCAweDFCMDAwMDAwKVxcbiBfX0FBUkNINjRfSU5TTl9GVU5DUyhtc3ViLFxcdDB4N0ZFMDgwMDAsIDB4MUIwMDgwMDApXFxuIF9fQUFSQ0g2NF9JTlNOX0ZVTkNTKHVkaXYsXFx0MHg3RkUwRkMwMCwgMHgxQUMwMDgwMClcXG5AQCAtNjM3LDYgKzY1MywxMyBAQCB1MzIgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX3NoaWZ0ZWRfcmVnKGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIGRzdCxcXG4gXFx0XFx0XFx0XFx0XFx0IGludCBzaGlmdCxcXG4gXFx0XFx0XFx0XFx0XFx0IGVudW0gYWFyY2g2NF9pbnNuX3ZhcmlhbnQgdmFyaWFudCxcXG4gXFx0XFx0XFx0XFx0XFx0IGVudW0gYWFyY2g2NF9pbnNuX2Fkc2JfdHlwZSB0eXBlKTtcXG4rdTMyIGFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9leHRlbmRlZF9yZWcoZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgZHN0LFxcbitcXHRcXHRcXHRcXHRcXHQgIGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIHNyYyxcXG4rXFx0XFx0XFx0XFx0XFx0ICBlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciByZWcsXFxuK1xcdFxcdFxcdFxcdFxcdCAgZW51bSBhYXJjaDY0X2luc25fZXh0ZW5kX3R5cGUgZXh0ZW5kLFxcbitcXHRcXHRcXHRcXHRcXHQgIGludCBzaGlmdCxcXG4rXFx0XFx0XFx0XFx0XFx0ICBlbnVtIGFhcmNoNjRfaW5zbl92YXJpYW50IHZhcmlhbnQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgZW51bSBhYXJjaDY0X2luc25fYWRzYl90eXBlIHR5cGUpO1xcbiB1MzIgYWFyY2g2NF9pbnNuX2dlbl9kYXRhMShlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBkc3QsXFxuIFxcdFxcdFxcdCAgIGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIHNyYyxcXG4gXFx0XFx0XFx0ICAgZW51bSBhYXJjaDY0X2luc25fdmFyaWFudCB2YXJpYW50LFxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2xpYi9pbnNuLmMgYi9hcmNoL2FybTY0L2xpYi9pbnNuLmNcXG5pbmRleCAzN2NlNzVmN2YxZjA4Li5lNzBhYzAyMzg1MTUzIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQvbGliL2luc24uY1xcbisrKyBiL2FyY2gvYXJtNjQvbGliL2luc24uY1xcbkBAIC05ODYsNiArOTg2LDY2IEBAIHUzMiBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfc2hpZnRlZF9yZWcoZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgZHN0LFxcbiBcXHRyZXR1cm4gYWFyY2g2NF9pbnNuX2VuY29kZV9pbW1lZGlhdGUoQUFSQ0g2NF9JTlNOX0lNTV82LCBpbnNuLCBzaGlmdCk7XFxuIH1cXG4gXFxuKy8qXFxuKyAqIFVubGlrZSB0aGUgc2hpZnRlZC1yZWdpc3RlciBmb3JtLCByZWdpc3RlciAzMSBpcyBub3QgWFpSIGV2ZXJ5d2hlcmUgaGVyZTpcXG4rICogaXQgZW5jb2RlcyBTUCBmb3IgQHNyYywgYW5kIGZvciBAZHN0IHRvbyB1bmxlc3MgQHR5cGUgc2V0cyB0aGUgZmxhZ3MuIE9ubHlcXG4rICogQHJlZyBrZWVwcyB0aGUgWFpSIG1lYW5pbmcuXFxuKyAqL1xcbit1MzIgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZyhlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBkc3QsXFxuK1xcdFxcdFxcdFxcdFxcdCAgZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgc3JjLFxcbitcXHRcXHRcXHRcXHRcXHQgIGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIHJlZyxcXG4rXFx0XFx0XFx0XFx0XFx0ICBlbnVtIGFhcmNoNjRfaW5zbl9leHRlbmRfdHlwZSBleHRlbmQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgaW50IHNoaWZ0LFxcbitcXHRcXHRcXHRcXHRcXHQgIGVudW0gYWFyY2g2NF9pbnNuX3ZhcmlhbnQgdmFyaWFudCxcXG4rXFx0XFx0XFx0XFx0XFx0ICBlbnVtIGFhcmNoNjRfaW5zbl9hZHNiX3R5cGUgdHlwZSlcXG4re1xcbitcXHR1MzIgaW5zbjtcXG4rXFxuK1xcdHN3aXRjaCAodHlwZSkge1xcbitcXHRjYXNlIEFBUkNINjRfSU5TTl9BRFNCX0FERDpcXG4rXFx0XFx0aW5zbiA9IGFhcmNoNjRfaW5zbl9nZXRfYWRkX2V4dF92YWx1ZSgpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBBQVJDSDY0X0lOU05fQURTQl9TVUI6XFxuK1xcdFxcdGluc24gPSBhYXJjaDY0X2luc25fZ2V0X3N1Yl9leHRfdmFsdWUoKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgQUFSQ0g2NF9JTlNOX0FEU0JfQUREX1NFVEZMQUdTOlxcbitcXHRcXHRpbnNuID0gYWFyY2g2NF9pbnNuX2dldF9hZGRzX2V4dF92YWx1ZSgpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBBQVJDSDY0X0lOU05fQURTQl9TVUJfU0VURkxBR1M6XFxuK1xcdFxcdGluc24gPSBhYXJjaDY0X2luc25fZ2V0X3N1YnNfZXh0X3ZhbHVlKCk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRwcl9lcnIoXFxcIiVzOiB1bmtub3duIGFkZC9zdWIgZW5jb2RpbmcgJWRcXFxcblxcXCIsIF9fZnVuY19fLCB0eXBlKTtcXG4rXFx0XFx0cmV0dXJuIEFBUkNINjRfQlJFQUtfRkFVTFQ7XFxuK1xcdH1cXG4rXFxuK1xcdHN3aXRjaCAodmFyaWFudCkge1xcbitcXHRjYXNlIEFBUkNINjRfSU5TTl9WQVJJQU5UXzMyQklUOlxcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBBQVJDSDY0X0lOU05fVkFSSUFOVF82NEJJVDpcXG4rXFx0XFx0aW5zbiB8PSBBQVJDSDY0X0lOU05fU0ZfQklUO1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cHJfZXJyKFxcXCIlczogdW5rbm93biB2YXJpYW50IGVuY29kaW5nICVkXFxcXG5cXFwiLCBfX2Z1bmNfXywgdmFyaWFudCk7XFxuK1xcdFxcdHJldHVybiBBQVJDSDY0X0JSRUFLX0ZBVUxUO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoc2hpZnQgXFx1MDAzYyAwIHx8IHNoaWZ0IFxcdTAwM2UgNCkge1xcbitcXHRcXHRwcl9lcnIoXFxcIiVzOiBpbnZhbGlkIHNoaWZ0IGVuY29kaW5nICVkXFxcXG5cXFwiLCBfX2Z1bmNfXywgc2hpZnQpO1xcbitcXHRcXHRyZXR1cm4gQUFSQ0g2NF9CUkVBS19GQVVMVDtcXG4rXFx0fVxcbitcXG4rXFx0aW5zbiA9IGFhcmNoNjRfaW5zbl9lbmNvZGVfcmVnaXN0ZXIoQUFSQ0g2NF9JTlNOX1JFR1RZUEVfUkQsIGluc24sIGRzdCk7XFxuK1xcbitcXHRpbnNuID0gYWFyY2g2NF9pbnNuX2VuY29kZV9yZWdpc3RlcihBQVJDSDY0X0lOU05fUkVHVFlQRV9STiwgaW5zbiwgc3JjKTtcXG4rXFxuK1xcdGluc24gPSBhYXJjaDY0X2luc25fZW5jb2RlX3JlZ2lzdGVyKEFBUkNINjRfSU5TTl9SRUdUWVBFX1JNLCBpbnNuLCByZWcpO1xcbitcXG4rXFx0Lyogb3B0aW9uIGluIGJpdHMgWzE1OjEzXSBhbmQgaW1tMyBpbiBbMTI6MTBdIHRvZ2V0aGVyIGZpbGwgSU1NXzYgKi9cXG4rXFx0cmV0dXJuIGFhcmNoNjRfaW5zbl9lbmNvZGVfaW1tZWRpYXRlKEFBUkNINjRfSU5TTl9JTU1fNiwgaW5zbixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAoZXh0ZW5kIFxcdTAwM2NcXHUwMDNjIDMpIHwgc2hpZnQpO1xcbit9XFxuK1xcbiB1MzIgYWFyY2g2NF9pbnNuX2dlbl9kYXRhMShlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBkc3QsXFxuIFxcdFxcdFxcdCAgIGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIHNyYyxcXG4gXFx0XFx0XFx0ICAgZW51bSBhYXJjaDY0X2luc25fdmFyaWFudCB2YXJpYW50LFxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L25ldC9icGZfaml0LmggYi9hcmNoL2FybTY0L25ldC9icGZfaml0LmhcXG5pbmRleCBkMTNkZTQyMjJjZmI3Li5iMmZlNmU2ZGNmNDQ3IDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXQuaFxcbisrKyBiL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXQuaFxcbkBAIC0yNDMsNiArMjQzLDE3IEBAXFxuIC8qIFJuIC0gUm07IHNldCBjb25kaXRpb24gZmxhZ3MgKi9cXG4gI2RlZmluZSBBNjRfQ01QKHNmLCBSbiwgUm0pIEE2NF9TVUJTKHNmLCBBNjRfWlIsIFJuLCBSbSlcXG4gXFxuKy8qIEFkZC9zdWJ0cmFjdCAoZXh0ZW5kZWQgcmVnaXN0ZXIpICovXFxuKyNkZWZpbmUgQTY0X0FERFNVQl9FUkVHKHNmLCBSZCwgUm4sIFJtLCBleHQsIHNoaWZ0LCB0eXBlKSBcXFxcXFxuK1xcdGFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9leHRlbmRlZF9yZWcoUmQsIFJuLCBSbSwgXFxcXFxcbitcXHRcXHRBQVJDSDY0X0lOU05fRVhURU5EXyMjZXh0LCBzaGlmdCwgQTY0X1ZBUklBTlQoc2YpLCBcXFxcXFxuK1xcdFxcdEFBUkNINjRfSU5TTl9BRFNCXyMjdHlwZSlcXG4rLyogUmQgPSBSbiArIChFWFQoUm0pIFxcdTAwM2NcXHUwMDNjIHNoaWZ0KSAqL1xcbisjZGVmaW5lIEE2NF9BRERfRVhUKHNmLCBSZCwgUm4sIFJtLCBleHQsIHNoaWZ0KSBcXFxcXFxuK1xcdEE2NF9BRERTVUJfRVJFRyhzZiwgUmQsIFJuLCBSbSwgZXh0LCBzaGlmdCwgQUREKVxcbisvKiBSZCA9IFJuICsgKHUzMilSbSAqL1xcbisjZGVmaW5lIEE2NF9BRERfVVhUVyhSZCwgUm4sIFJtKSBBNjRfQUREX0VYVCgxLCBSZCwgUm4sIFJtLCBVWFRXLCAwKVxcbitcXG4gLyogRGF0YS1wcm9jZXNzaW5nICgxIHNvdXJjZSkgKi9cXG4gI2RlZmluZSBBNjRfREFUQTEoc2YsIFJkLCBSbiwgdHlwZSkgYWFyY2g2NF9pbnNuX2dlbl9kYXRhMShSZCwgUm4sIFxcXFxcXG4gXFx0QTY0X1ZBUklBTlQoc2YpLCBBQVJDSDY0X0lOU05fREFUQTFfIyN0eXBlKVxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jXFxuaW5kZXggNzRiNDA4Mzc5MWRhMy4uYzE4ZTAwNWE0MWRiZSAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY1xcbisrKyBiL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jXFxuQEAgLTEyNTYsNiArMTI1Niw0MyBAQCBzdGF0aWMgdm9pZCBlbWl0X3N0YWNrX2FyZ19zdG9yZV9pbW0oczMyIGltbSwgczE2IGJwZl9vZmYsIGNvbnN0IHU4IHRtcCwgc3RydWN0XFxuIFxcdH1cXG4gfVxcbiBcXG4rLypcXG4rICogUmViYXNlIHRoZSBfX2FyZW5hIGFyZ3Mgb2YgYSBrZnVuYyBjYWxsIHRvIGFyZW5hIGtlcm5lbCBhZGRyZXNzZXMsXFxuKyAqIHhOID0ga2Vybl92bV9zdGFydCArICh1MzIpeE4sIHdpdGggdGhlIGFyZW5hIGJhc2UgcmVnaXN0ZXIgaG9sZGluZ1xcbisgKiBrZXJuX3ZtX3N0YXJ0LiBBIG51bGxhYmxlIGFyZyBwcmVzZXJ2ZXMgTlVMTCBieSBza2lwcGluZyB0aGUgYWRkLCB0ZXN0ZWRcXG4rICogb24gdGhlIHRydW5jYXRlZCB2YWx1ZSBhcyBhcmVuYSBOVUxMIGlzIG9mZnNldCAwLlxcbisgKi9cXG4rc3RhdGljIGludCBlbWl0X2tmdW5jX2FyZW5hX2FyZ3Moc3RydWN0IGppdF9jdHggKmN0eCwgY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbit7XFxuK1xcdGNvbnN0IHU4IGFyZW5hX3ZtX2Jhc2UgPSBicGYyYTY0W0FSRU5BX1ZNX1NUQVJUXTtcXG4rXFx0Y29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICpmbTtcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRmbSA9IGJwZl9qaXRfZmluZF9rZnVuY19tb2RlbChjdHgtXFx1MDAzZXByb2csIGluc24pO1xcbitcXHRpZiAoIWZtKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBtaW5fdChpbnQsIGZtLVxcdTAwM2Vucl9hcmdzLCBNQVhfQlBGX0ZVTkNfUkVHX0FSR1MpOyBpKyspIHtcXG4rXFx0XFx0Y29uc3QgdTggcmVnID0gYnBmMmE2NFtCUEZfUkVHXzEgKyBpXTtcXG4rXFx0XFx0dTggZmxhZ3MgPSBmbS1cXHUwMDNlYXJnX2ZsYWdzW2ldO1xcbitcXG4rXFx0XFx0aWYgKCEoZmxhZ3MgXFx1MDAyNiBCVEZfRk1PREVMX0FSRU5BX0FSRykpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRpZiAoV0FSTl9PTl9PTkNFKCFjdHgtXFx1MDAzZWFyZW5hX3ZtX3N0YXJ0KSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBCVEZfRk1PREVMX05VTExBQkxFX0FSRykge1xcbitcXHRcXHRcXHQvKiAzMi1iaXQgbW92IGNsZWFycyB0aGUgdXBwZXIgMzIgYml0cyAqL1xcbitcXHRcXHRcXHRlbWl0KEE2NF9NT1YoMCwgcmVnLCByZWcpLCBjdHgpO1xcbitcXHRcXHRcXHQvKiBza2lwIHRoZSBhZGQgc28gdGhhdCBOVUxMIHN0YXlzIE5VTEwgKi9cXG4rXFx0XFx0XFx0ZW1pdChBNjRfQ0JaKDAsIHJlZywgMiksIGN0eCk7XFxuK1xcdFxcdH1cXG4rXFx0XFx0ZW1pdChBNjRfQUREX1VYVFcocmVnLCBhcmVuYV92bV9iYXNlLCByZWcpLCBjdHgpO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gLyogSklUcyBhbiBlQlBGIGluc3RydWN0aW9uLlxcbiAgKiBSZXR1cm5zOlxcbiAgKiAwICAtIHN1Y2Nlc3NmdWxseSBKSVRlZCBhbiA4LWJ5dGUgZUJQRiBpbnN0cnVjdGlvbi5cXG5AQCAtMTY3OCw2ICsxNzE1LDExIEBAIHN0YXRpYyBpbnQgYnVpbGRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX2luc25cXG4gXFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZmdW5jX2FkZHIsIFxcdTAwMjZmdW5jX2FkZHJfZml4ZWQpO1xcbiBcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0aWYgKGluc24tXFx1MDAzZXNyY19yZWcgPT0gQlBGX1BTRVVET19LRlVOQ19DQUxMKSB7XFxuK1xcdFxcdFxcdHJldCA9IGVtaXRfa2Z1bmNfYXJlbmFfYXJncyhjdHgsIGluc24pO1xcbitcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0fVxcbiBcXHRcXHRlbWl0X2NhbGwoZnVuY19hZGRyLCBjdHgpO1xcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBDYWxsIHRvIGFyY2hfYnBmX3RpbWVkX21heV9nb3RvKCkgaXMgZW1pdHRlZCBieSB0aGVcXG5AQCAtMjM1MSw2ICsyMzkzLDExIEBAIGJvb2wgYnBmX2ppdF9zdXBwb3J0c19zdGFja19hcmdzKHZvaWQpXFxuIFxcdHJldHVybiB0cnVlO1xcbiB9XFxuIFxcbitib29sIGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncyh2b2lkKVxcbit7XFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuK1xcbiB2b2lkICpicGZfYXJjaF90ZXh0X2NvcHkodm9pZCAqZHN0LCB2b2lkICpzcmMsIHNpemVfdCBsZW4pXFxuIHtcXG4gXFx0aWYgKCFhYXJjaDY0X2luc25fY29weShkc3QsIHNyYywgbGVuKSlcXG5AQCAtMjUyNCwzNCArMjU3MSw3NiBAQCBzdGF0aWMgdm9pZCBjbGVhcl9nYXJiYWdlKHN0cnVjdCBqaXRfY3R4ICpjdHgsIGludCByZWcsIGludCBlZmZlY3RpdmVfYnl0ZXMpXFxuIFxcdH1cXG4gfVxcbiBcXG4rLypcXG4rICogQ29udmVydCBhbiBhcmVuYSBrZXJuZWwgYWRkcmVzcyBpbnRvIHRoZSBhcmVuYSBwb2ludGVyIGZvcm0gb24gaXRzIHdheSBpbnRvXFxuKyAqIHRoZSBCUEYgY3R4LCBkc3QgPSAodTMyKShzcmMgLSBrZXJuX3ZtX3N0YXJ0KSwgd2l0aCBAYmFzZV9sbyBob2xkaW5nIHRoZSBsb3dcXG4rICogMzIgYml0cyBvZiBrZXJuX3ZtX3N0YXJ0LiBBIG51bGxhYmxlIGFyZyBwcmVzZXJ2ZXMgTlVMTCwgdGVzdGVkIG9uIHRoZSBmdWxsXFxuKyAqIDY0LWJpdCBrZXJuZWwgcG9pbnRlci4gVGhlIDMyLWJpdCBzdWJ0cmFjdGlvbiBib3RoIHRydW5jYXRlcyBhbmQgY2xlYXJzIHRoZVxcbisgKiB1cHBlciBoYWxmLCBzbyB0aGUgc3RvcmVkIHZhbHVlIHNhdGlzZmllcyB0aGUgSklUIGludmFyaWFudCBmb3IgYXJlbmFcXG4rICogcG9pbnRlciByZWdpc3RlcnMuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBlbWl0X2FyZW5hX2FyZ19jb252KHN0cnVjdCBqaXRfY3R4ICpjdHgsIHU4IGRzdCwgdTggc3JjLCBib29sIG51bGxhYmxlLCB1OCBiYXNlX2xvKVxcbit7XFxuK1xcdGlmIChudWxsYWJsZSkge1xcbitcXHRcXHRpZiAoZHN0ICE9IHNyYylcXG4rXFx0XFx0XFx0ZW1pdChBNjRfTU9WKDEsIGRzdCwgc3JjKSwgY3R4KTtcXG4rXFx0XFx0Lyogc2tpcCB0aGUgc3VidHJhY3Rpb24gc28gdGhhdCBOVUxMIHN0YXlzIE5VTEwgKi9cXG4rXFx0XFx0ZW1pdChBNjRfQ0JaKDEsIGRzdCwgMiksIGN0eCk7XFxuK1xcdFxcdHNyYyA9IGRzdDtcXG4rXFx0fVxcbitcXHRlbWl0KEE2NF9TVUIoMCwgZHN0LCBzcmMsIGJhc2VfbG8pLCBjdHgpO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBzYXZlX2FyZ3Moc3RydWN0IGppdF9jdHggKmN0eCwgaW50IGJhcmdzX29mZiwgaW50IG9hcmdzX29mZixcXG4tXFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLFxcbi1cXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgYXJnX2F1eCAqYSxcXG4tXFx0XFx0ICAgICAgYm9vbCBmb3JfY2FsbF9vcmlnaW4pXFxuK1xcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgY29uc3Qgc3RydWN0IGFyZ19hdXggKmEsXFxuK1xcdFxcdCAgICAgIGJvb2wgZm9yX2NhbGxfb3JpZ2luLCBib29sIGlzX3N0cnVjdF9vcHMsIHU2NCBhcmVuYV9iYXNlKVxcbiB7XFxuLVxcdGludCBpO1xcbi1cXHRpbnQgcmVnO1xcbi1cXHRpbnQgZG9mZjtcXG4tXFx0aW50IHNvZmY7XFxuLVxcdGludCBzbG90cztcXG4gXFx0dTggdG1wID0gYnBmMmE2NFtUTVBfUkVHXzFdO1xcbitcXHR1OCBiYXNlX2xvID0gYnBmMmE2NFtUTVBfUkVHXzJdO1xcbitcXHRpbnQgaSwgcmVnLCBkb2ZmLCBzb2ZmLCBzbG90cztcXG4rXFxuK1xcdC8qIG9ubHkgdGhlIGxvdyAzMiBiaXRzIG9mIHRoZSBiYXNlIHRha2UgcGFydCBpbiB0aGUgc3VidHJhY3Rpb24gKi9cXG4rXFx0aWYgKGFyZW5hX2Jhc2UpXFxuK1xcdFxcdGVtaXRfYTY0X21vdl9pKDAsIGJhc2VfbG8sIChzMzIpKHUzMilhcmVuYV9iYXNlLCBjdHgpO1xcbiBcXG4gXFx0Lyogc3RvcmUgYXJndW1lbnRzIHRvIHRoZSBzdGFjayBmb3IgdGhlIGJwZiBwcm9ncmFtLCBvciByZXN0b3JlXFxuIFxcdCAqIGFyZ3VtZW50cyBmcm9tIHN0YWNrIGZvciB0aGUgb3JpZ2luYWwgZnVuY3Rpb25cXG4gXFx0ICovXFxuLVxcdGZvciAocmVnID0gMDsgcmVnIFxcdTAwM2MgYS1cXHUwMDNlcmVnc19mb3JfYXJnczsgcmVnKyspIHtcXG4tXFx0XFx0ZW1pdChmb3JfY2FsbF9vcmlnaW4gP1xcbi1cXHRcXHQgICAgIEE2NF9MRFI2NEkocmVnLCBBNjRfU1AsIGJhcmdzX29mZikgOlxcbi1cXHRcXHQgICAgIEE2NF9TVFI2NEkocmVnLCBBNjRfU1AsIGJhcmdzX29mZiksXFxuLVxcdFxcdCAgICAgY3R4KTtcXG4tXFx0XFx0YmFyZ3Nfb2ZmICs9IDg7XFxuK1xcdGZvciAoaSA9IDAsIHJlZyA9IDA7IGkgXFx1MDAzYyBhLVxcdTAwM2VhcmdzX2luX3JlZ3M7IGkrKykge1xcbitcXHRcXHRib29sIGFyZW5hX2FyZyA9IGFyZW5hX2Jhc2UgXFx1MDAyNlxcdTAwMjYgKG0tXFx1MDAzZWFyZ19mbGFnc1tpXSBcXHUwMDI2IEJURl9GTU9ERUxfQVJFTkFfQVJHKTtcXG4rXFx0XFx0Ym9vbCBudWxsYWJsZSA9IG0tXFx1MDAzZWFyZ19mbGFnc1tpXSBcXHUwMDI2IEJURl9GTU9ERUxfTlVMTEFCTEVfQVJHO1xcbitcXG4rXFx0XFx0c2xvdHMgPSAobS1cXHUwMDNlYXJnX3NpemVbaV0gKyA3KSAvIDg7XFxuK1xcdFxcdHdoaWxlIChzbG90cy0tIFxcdTAwM2UgMCkge1xcbitcXHRcXHRcXHRpZiAoZm9yX2NhbGxfb3JpZ2luKSB7XFxuK1xcdFxcdFxcdFxcdGVtaXQoQTY0X0xEUjY0SShyZWcsIEE2NF9TUCwgYmFyZ3Nfb2ZmKSwgY3R4KTtcXG4rXFx0XFx0XFx0fSBlbHNlIGlmIChhcmVuYV9hcmcpIHtcXG4rXFx0XFx0XFx0XFx0ZW1pdF9hcmVuYV9hcmdfY29udihjdHgsIHRtcCwgcmVnLCBudWxsYWJsZSwgYmFzZV9sbyk7XFxuK1xcdFxcdFxcdFxcdGVtaXQoQTY0X1NUUjY0SSh0bXAsIEE2NF9TUCwgYmFyZ3Nfb2ZmKSwgY3R4KTtcXG4rXFx0XFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0XFx0ZW1pdChBNjRfU1RSNjRJKHJlZywgQTY0X1NQLCBiYXJnc19vZmYpLCBjdHgpO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdHJlZysrO1xcbitcXHRcXHRcXHRiYXJnc19vZmYgKz0gODtcXG4rXFx0XFx0fVxcbiBcXHR9XFxuIFxcbi1cXHRzb2ZmID0gMzI7IC8qIG9uIHN0YWNrIGFyZ3VtZW50cyBzdGFydCBmcm9tIEZQICsgMzIgKi9cXG4rXFx0LypcXG4rXFx0ICogT24tc3RhY2sgYXJndW1lbnRzIHN0YXJ0IGFib3ZlIHRoZSBmcmFtZShzKSBwdXNoZWQgYnkgdGhlIHRyYW1wb2xpbmVcXG4rXFx0ICogcHJvbG9ndWUuIEVudGVyZWQgdGhyb3VnaCB0aGUgZmVudHJ5IGNhbGwgZnJvbSBhIHRyYWNlZCBmdW5jdGlvbiwgdGhlXFxuK1xcdCAqIHByb2xvZ3VlIHNhdmVzIGJvdGggdGhlIHBhcmVudCAoRlAveDkpIGFuZCB0aGUgdHJhY2VkIGZ1bmN0aW9uXFxuK1xcdCAqIChGUC9MUikgZnJhbWVzLCBzbyB0aGUgYXJndW1lbnRzIHN0YXJ0IGF0IEZQICsgMzIuIEEgc3RydWN0X29wc1xcbitcXHQgKiBjYWxsYmFjayBpcyBjYWxsZWQgaW5kaXJlY3RseSBhbmQgb25seSB0aGUgRlAvTFIgZnJhbWUgaXMgc2F2ZWQsIHNvXFxuK1xcdCAqIHRoZXkgc3RhcnQgYXQgRlAgKyAxNi5cXG4rXFx0ICovXFxuK1xcdHNvZmYgPSBpc19zdHJ1Y3Rfb3BzID8gMTYgOiAzMjtcXG4gXFx0ZG9mZiA9IChmb3JfY2FsbF9vcmlnaW4gPyBvYXJnc19vZmYgOiBiYXJnc19vZmYpO1xcbiBcXG4gXFx0Lyogc2F2ZSBvbiBzdGFjayBhcmd1bWVudHMgKi9cXG4gXFx0Zm9yIChpID0gYS1cXHUwMDNlYXJnc19pbl9yZWdzOyBpIFxcdTAwM2MgbS1cXHUwMDNlbnJfYXJnczsgaSsrKSB7XFxuK1xcdFxcdGJvb2wgYXJlbmFfYXJnID0gYXJlbmFfYmFzZSBcXHUwMDI2XFx1MDAyNiAobS1cXHUwMDNlYXJnX2ZsYWdzW2ldIFxcdTAwMjYgQlRGX0ZNT0RFTF9BUkVOQV9BUkcpO1xcbitcXHRcXHRib29sIG51bGxhYmxlID0gbS1cXHUwMDNlYXJnX2ZsYWdzW2ldIFxcdTAwMjYgQlRGX0ZNT0RFTF9OVUxMQUJMRV9BUkc7XFxuK1xcbiBcXHRcXHRzbG90cyA9IChtLVxcdTAwM2Vhcmdfc2l6ZVtpXSArIDcpIC8gODtcXG4gXFx0XFx0LyogdmVyaWZpZXIgZW5zdXJlcyBhcmdfc2l6ZSBcXHUwMDNjPSAxNiwgc28gc2xvdHMgZXF1YWxzIDEgb3IgMiAqL1xcbiBcXHRcXHR3aGlsZSAoc2xvdHMtLSBcXHUwMDNlIDApIHtcXG5AQCAtMjU2MSw2ICsyNjUwLDE1IEBAIHN0YXRpYyB2b2lkIHNhdmVfYXJncyhzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBpbnQgYmFyZ3Nfb2ZmLCBpbnQgb2FyZ3Nfb2ZmLFxcbiBcXHRcXHRcXHQgKi9cXG4gXFx0XFx0XFx0aWYgKHNsb3RzID09IDAgXFx1MDAyNlxcdTAwMjYgIWZvcl9jYWxsX29yaWdpbilcXG4gXFx0XFx0XFx0XFx0Y2xlYXJfZ2FyYmFnZShjdHgsIHRtcCwgbS1cXHUwMDNlYXJnX3NpemVbaV0gJSA4KTtcXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogTm8gZ3VhcmQgb24gZm9yX2NhbGxfb3JpZ2luIGhlcmU6IG9ubHkgdGhlIGluZGlyZWN0XFxuK1xcdFxcdFxcdCAqIHRyYW1wb2xpbmUgaXMgZ2l2ZW4gYSBiYXNlLCBhbmQgaXQgbmV2ZXIgY2FsbHMgdGhlXFxuK1xcdFxcdFxcdCAqIG9yaWdpbmFsIGZ1bmN0aW9uLCBzbyBhcmd1bWVudHMgYXJlIG5ldmVyIGNvbnZlcnRlZFxcbitcXHRcXHRcXHQgKiBvbiB0aGVpciB3YXkgYmFjayBvdXQgdG8gaXQuIFNlZSB0aGUgV0FSTl9PTl9PTkNFKClcXG4rXFx0XFx0XFx0ICogaW4gcHJlcGFyZV90cmFtcG9saW5lKCkuXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRpZiAoYXJlbmFfYXJnKVxcbitcXHRcXHRcXHRcXHRlbWl0X2FyZW5hX2FyZ19jb252KGN0eCwgdG1wLCB0bXAsIG51bGxhYmxlLCBiYXNlX2xvKTtcXG4gXFx0XFx0XFx0ZW1pdChBNjRfU1RSNjRJKHRtcCwgQTY0X1NQLCBkb2ZmKSwgY3R4KTtcXG4gXFx0XFx0XFx0c29mZiArPSA4O1xcbiBcXHRcXHRcXHRkb2ZmICs9IDg7XFxuQEAgLTI2MjAsOCArMjcxOCwyMSBAQCBzdGF0aWMgaW50IHByZXBhcmVfdHJhbXBvbGluZShzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSxcXG4gXFx0Ym9vbCBpc19zdHJ1Y3Rfb3BzID0gaXNfc3RydWN0X29wc190cmFtcChmZW50cnkpO1xcbiBcXHRpbnQgY29va2llX29mZiwgY29va2llX2NudCwgY29va2llX2JhcmdzX29mZjtcXG4gXFx0aW50IGZzZXNzaW9uX2NudCA9IGJwZl9mc2Vzc2lvbl9jbnQodG5vZGVzKTtcXG4rXFx0dTY0IGFyZW5hX2Jhc2U7XFxuIFxcdHU2NCBmdW5jX21ldGE7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBGX0lORElSRUNUIGlzIG9ubHkgY29tcGF0aWJsZSB3aXRoIEZfUkVUX0ZFTlRSWV9SRVQsIGl0IGlzIGV4cGxpY2l0bHlcXG4rXFx0ICogaW5jb21wYXRpYmxlIHdpdGggRl9DQUxMX09SSUcgfCBGX1NLSVBfRlJBTUUgfCBGX0lQX0FSRyBiZWNhdXNlXFxuK1xcdCAqIEBmdW5jX2FkZHIuIEFyZW5hIGNvbnZlcnNpb24gcmVsaWVzIG9uIHRoaXM6IGJwZl90cmFtcF9hcmVuYV9iYXNlKClcXG4rXFx0ICogb25seSByZXR1cm5zIGEgYmFzZSBmb3IgdGhlIGluZGlyZWN0IHRyYW1wb2xpbmUsIHdoaWNoIHRoZXJlZm9yZVxcbitcXHQgKiBuZXZlciBjYWxscyB0aGUgb3JpZ2luYWwgZnVuY3Rpb24gd2l0aCBjb252ZXJ0ZWQgYXJndW1lbnRzLlxcbitcXHQgKi9cXG4rXFx0V0FSTl9PTl9PTkNFKChmbGFncyBcXHUwMDI2IEJQRl9UUkFNUF9GX0lORElSRUNUKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgIChmbGFncyBcXHUwMDI2IH4oQlBGX1RSQU1QX0ZfSU5ESVJFQ1QgfCBCUEZfVFJBTVBfRl9SRVRfRkVOVFJZX1JFVCkpKTtcXG4rXFxuK1xcdGFyZW5hX2Jhc2UgPSBicGZfdHJhbXBfYXJlbmFfYmFzZShtLCB0bm9kZXMsIGZsYWdzKTtcXG4rXFxuIFxcdC8qIHRyYW1wb2xpbmUgc3RhY2sgbGF5b3V0OlxcbiBcXHQgKiAgICAgICAgICAgICAgICAgICAgWyBwYXJlbnQgaXAgICAgICAgICBdXFxuIFxcdCAqICAgICAgICAgICAgICAgICAgICBbIEZQICAgICAgICAgICAgICAgIF1cXG5AQCAtMjczNyw3ICsyODQ4LDcgQEAgc3RhdGljIGludCBwcmVwYXJlX3RyYW1wb2xpbmUoc3RydWN0IGppdF9jdHggKmN0eCwgc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sXFxuIFxcdHN0b3JlX2Z1bmNfbWV0YShjdHgsIGZ1bmNfbWV0YSwgZnVuY19tZXRhX29mZik7XFxuIFxcbiBcXHQvKiBzYXZlIGFyZ3MgZm9yIGJwZiAqL1xcbi1cXHRzYXZlX2FyZ3MoY3R4LCBiYXJnc19vZmYsIG9hcmdzX29mZiwgbSwgYSwgZmFsc2UpO1xcbitcXHRzYXZlX2FyZ3MoY3R4LCBiYXJnc19vZmYsIG9hcmdzX29mZiwgbSwgYSwgZmFsc2UsIGlzX3N0cnVjdF9vcHMsIGFyZW5hX2Jhc2UpO1xcbiBcXG4gXFx0Lyogc2F2ZSBjYWxsZWUgc2F2ZWQgcmVnaXN0ZXJzICovXFxuIFxcdGVtaXQoQTY0X1NUUjY0SShBNjRfUigxOSksIEE2NF9TUCwgcmVnc19vZmYpLCBjdHgpO1xcbkBAIC0yNzg1LDggKzI4OTYsOCBAQCBzdGF0aWMgaW50IHByZXBhcmVfdHJhbXBvbGluZShzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSxcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKGZsYWdzIFxcdTAwMjYgQlBGX1RSQU1QX0ZfQ0FMTF9PUklHKSB7XFxuLVxcdFxcdC8qIHNhdmUgYXJncyBmb3Igb3JpZ2luYWwgZnVuYyAqL1xcbi1cXHRcXHRzYXZlX2FyZ3MoY3R4LCBiYXJnc19vZmYsIG9hcmdzX29mZiwgbSwgYSwgdHJ1ZSk7XFxuK1xcdFxcdC8qIHRoZSBvcmlnaW5hbCBmdW5jIHRha2VzIGtlcm5lbCBhZGRyZXNzZXMsIG5ldmVyIGNvbnZlcnRlZCBvbmVzICovXFxuK1xcdFxcdHNhdmVfYXJncyhjdHgsIGJhcmdzX29mZiwgb2FyZ3Nfb2ZmLCBtLCBhLCB0cnVlLCBpc19zdHJ1Y3Rfb3BzLCAwKTtcXG4gXFx0XFx0LyogY2FsbCBvcmlnaW5hbCBmdW5jICovXFxuIFxcdFxcdGVtaXQoQTY0X0xEUjY0SShBNjRfUigxMCksIEE2NF9TUCwgcmV0YWRkcl9vZmYpLCBjdHgpO1xcbiBcXHRcXHRlbWl0KEE2NF9BRFIoQTY0X0xSLCBBQVJDSDY0X0lOU05fU0laRSAqIDIpLCBjdHgpO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3N0cnVjdF9vcHNfYXJlbmEuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3Rfc3RydWN0X29wc19hcmVuYS5jXFxuaW5kZXggOTQwZWMyY2RhMGQ1Mi4uN2Y5ZjU0YmEzZmJlNSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3N0cnVjdF9vcHNfYXJlbmEuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3Rfc3RydWN0X29wc19hcmVuYS5jXFxuQEAgLTYsNyArNiw3IEBAXFxuICNpbmNsdWRlIFxcXCJzdHJ1Y3Rfb3BzX2FyZW5hX2F0dGFjaC5za2VsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJzdHJ1Y3Rfb3BzX2FyZW5hX2ZhaWwuc2tlbC5oXFxcIlxcbiBcXG4tI2lmIGRlZmluZWQoX194ODZfNjRfXylcXG4rI2lmIGRlZmluZWQoX194ODZfNjRfXykgfHwgZGVmaW5lZChfX2FhcmNoNjRfXylcXG4gLypcXG4gICogQXR0YWNoIGNhbGxiYWNrcyB3aXRoIF9fYXJlbmEgYW5kIF9fYXJlbmFfX251bGxhYmxlIGFyZ3VtZW50cyBhbmQgZHJpdmVcXG4gICogdGhlbSB0aHJvdWdoIHRoZSBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYSooKSBrZnVuY3MuXFxuQEAgLTExMSwxMSArMTExLDExIEBAIHN0YXRpYyB2b2lkIGFyZW5hX2FyZ19hdHRhY2godm9pZClcXG4gdm9pZCBzZXJpYWxfdGVzdF9zdHJ1Y3Rfb3BzX2FyZW5hKHZvaWQpXFxuIHtcXG4gXFx0LypcXG4tXFx0ICogQXJlbmEgc3RydWN0X29wcyBhcmd1bWVudHMgbmVlZCBKSVQgc3VwcG9ydCwgY3VycmVudGx5IHg4Ni02NCBvbmx5Llxcbi1cXHQgKiBFbHNld2hlcmUgdmVyaWZpY2F0aW9uIGZhaWxzIHdpdGggXFxcIkpJVCBkb2VzIG5vdCBzdXBwb3J0IGFyZW5hXFxuLVxcdCAqIGFyZ3VtZW50c1xcXCIsIHNvIHRoZSBwcm9ncmFtcyBjYW5ub3QgZXZlbiBsb2FkLlxcbitcXHQgKiBBcmVuYSBzdHJ1Y3Rfb3BzIGFyZ3VtZW50cyBuZWVkIEpJVCBzdXBwb3J0LCBjdXJyZW50bHkgeDg2LTY0IGFuZFxcbitcXHQgKiBhcm02NCBvbmx5LiBFbHNld2hlcmUgdmVyaWZpY2F0aW9uIGZhaWxzIHdpdGggXFxcIkpJVCBkb2VzIG5vdCBzdXBwb3J0XFxuK1xcdCAqIGFyZW5hIGFyZ3VtZW50c1xcXCIsIHNvIHRoZSBwcm9ncmFtcyBjYW5ub3QgZXZlbiBsb2FkLlxcbiBcXHQgKi9cXG4tI2lmIGRlZmluZWQoX194ODZfNjRfXylcXG4rI2lmIGRlZmluZWQoX194ODZfNjRfXykgfHwgZGVmaW5lZChfX2FhcmNoNjRfXylcXG4gXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcImFyZW5hX2FyZ1xcXCIpKVxcbiBcXHRcXHRhcmVuYV9hcmcoKTtcXG4gXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcImFyZW5hX2FyZ19mYWlsXFxcIikpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuYy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jLmNcXG5pbmRleCBjZGNlYTg4OWRhNTg2Li5iZjBkMzA0ZTBlNTljIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuYy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jLmNcXG5AQCAtMjcsNiArMjcsNyBAQCB2b2xhdGlsZSB1NjQgc3Rhc2g7XFxuIFxcbiBTRUMoXFxcInN5c2NhbGxcXFwiKVxcbiBfX2FyY2hfeDg2XzY0XFxuK19fYXJjaF9hcm02NFxcbiBfX3N1Y2Nlc3MgX19yZXR2YWwoMClcXG4gaW50IGFyZW5hX2FyZ19mb3Jtcyh2b2lkICpjdHgpXFxuIHtcXG5AQCAtNzAsNiArNzEsNyBAQCBpbnQgYXJlbmFfYXJnX2Zvcm1zKHZvaWQgKmN0eClcXG4gICovXFxuIFNFQyhcXFwic3lzY2FsbFxcXCIpXFxuIF9fYXJjaF94ODZfNjRcXG4rX19hcmNoX2FybTY0XFxuIF9fc3VjY2VzcyBfX3JldHZhbCgwKVxcbiBpbnQgYXJlbmFfYXJnX3JlYmFzZSh2b2lkICpjdHgpXFxuIHtcXG5AQCAtMTExLDYgKzExMyw3IEBAIGludCBhcmVuYV9hcmdfcmViYXNlKHZvaWQgKmN0eClcXG4gXFxuIFNFQyhcXFwic3lzY2FsbFxcXCIpXFxuIF9fYXJjaF94ODZfNjRcXG4rX19hcmNoX2FybTY0XFxuIF9fc3VjY2VzcyBfX3JldHZhbCgwKVxcbiBpbnQgYXJlbmFfYXJnczUodm9pZCAqY3R4KVxcbiB7XFxuQEAgLTE0Miw2ICsxNDUsNyBAQCBpbnQgYXJlbmFfYXJnczUodm9pZCAqY3R4KVxcbiBcXG4gU0VDKFxcXCJzeXNjYWxsXFxcIilcXG4gX19hcmNoX3g4Nl82NFxcbitfX2FyY2hfYXJtNjRcXG4gX19zdWNjZXNzIF9fcmV0dmFsKDApXFxuIGludCBhcmVuYV9hcmdfbWl4ZWQodm9pZCAqY3R4KVxcbiB7XFxuQEAgLTE2OSw2ICsxNzMsNyBAQCBpbnQgYXJlbmFfYXJnX21peGVkKHZvaWQgKmN0eClcXG4gLyoga2VybmVsLXNpZGUgZmF1bHRzIG9uIHVucG9wdWxhdGVkIHBhZ2VzIHJlY292ZXIgdmlhIHRoZSBzY3JhdGNoIHBhZ2UgKi9cXG4gU0VDKFxcXCJzeXNjYWxsXFxcIilcXG4gX19hcmNoX3g4Nl82NFxcbitfX2FyY2hfYXJtNjRcXG4gX19zdWNjZXNzIF9fcmV0dmFsKDApXFxuIGludCBhcmVuYV9hcmdfdW5wb3B1bGF0ZWQodm9pZCAqY3R4KVxcbiB7XFxuQEAgLTE4OSw2ICsxOTQsNyBAQCBpbnQgYXJlbmFfYXJnX3VucG9wdWxhdGVkKHZvaWQgKmN0eClcXG4gXFxuIFNFQyhcXFwic3lzY2FsbFxcXCIpXFxuIF9fYXJjaF94ODZfNjRcXG4rX19hcmNoX2FybTY0XFxuIF9fZmFpbHVyZSBfX21zZyhcXFwiYXJlbmEgcG9pbnRlciByZXF1aXJlcyBhIHByb2dyYW0gd2l0aCBhbiBhc3NvY2lhdGVkIGFyZW5hXFxcIilcXG4gaW50IGFyZW5hX2FyZ19ub19hcmVuYSh2b2lkICpjdHgpXFxuIHtcXG5AQCAtMTk4LDYgKzIwNCw3IEBAIGludCBhcmVuYV9hcmdfbm9fYXJlbmEodm9pZCAqY3R4KVxcbiBcXG4gU0VDKFxcXCJzeXNjYWxsXFxcIilcXG4gX19hcmNoX3g4Nl82NFxcbitfX2FyY2hfYXJtNjRcXG4gX19mYWlsdXJlIF9fbXNnKFxcXCJpcyBub3QgYSBwb2ludGVyIHRvIGFyZW5hIG9yIHNjYWxhclxcXCIpXFxuIGludCBhcmVuYV9hcmdfYmFkX3JlZyh2b2lkICpjdHgpXFxuIHtcXG5AQCAtMjEzLDYgKzIyMCw3IEBAIGludCBhcmVuYV9hcmdfYmFkX3JlZyh2b2lkICpjdHgpXFxuIFxcdGRlZmluZWQoX19CUEZfRkVBVFVSRV9TVEFDS19BUkdVTUVOVClcXG4gU0VDKFxcXCJzeXNjYWxsXFxcIilcXG4gX19hcmNoX3g4Nl82NFxcbitfX2FyY2hfYXJtNjRcXG4gX19mYWlsdXJlIF9fbXNnKFxcXCJhcmVuYSBwb2ludGVyIGNhbm5vdCBiZSBhIHN0YWNrIGFyZ3VtZW50XFxcIilcXG4gaW50IGFyZW5hX2FyZ19zdGFjayh2b2lkICpjdHgpXFxuIHtcXG5AQCAtMjIzLDYgKzIzMSw3IEBAIGludCBhcmVuYV9hcmdfc3RhY2sodm9pZCAqY3R4KVxcbiAjZWxzZVxcbiBTRUMoXFxcInN5c2NhbGxcXFwiKVxcbiBfX2FyY2hfeDg2XzY0XFxuK19fYXJjaF9hcm02NFxcbiBfX2Rlc2NyaXB0aW9uKFxcXCJhcmVuYV9hcmdfc3RhY2s6IG5vdCBzdXBwb3J0ZWQsIGR1bW15IHRlc3RcXFwiKVxcbiBfX3N1Y2Nlc3NcXG4gaW50IGFyZW5hX2FyZ19zdGFjayh2b2lkICpjdHgpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuY19qaXQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuY19qaXQuY1xcbmluZGV4IGM5YjkxODY2MjYxNjIuLmI1YTAxY2JjMzNhNzMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jX2ppdC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jX2ppdC5jXFxuQEAgLTMyLDYgKzMyLDEwIEBAIF9faml0ZWQoXFxcIlxcdG1vdmxcXHQlZWRpLCAlZWRpXFxcIilcXG4gX19qaXRlZChcXFwiXFx0YWRkcVxcdCVyMTIsICVyZGlcXFwiKVxcbiBfX2ppdGVkKFxcXCIuLi5cXFwiKVxcbiBfX2ppdGVkKFxcXCJcXHRjYWxscVxcdHt7Lip9fVxcXCIpXFxuK19fYXJjaF9hcm02NFxcbitfX2ppdGVkKFxcXCIuLi5cXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRhZGRcXHR4MCwgeDI4LCB3MCwgdXh0d1xcXCIpXFxuK19faml0ZWQoXFxcIlxcdHt7KGJsfG1vdilcXHQuKn19XFxcIilcXG4gX19zdWNjZXNzXFxuIGludCBhcmVuYV9hcmdfaml0X3JlYmFzZSh2b2lkICpjdHgpXFxuIHtcXG5AQCAtNDgsNiArNTIsMTIgQEAgX19qaXRlZChcXFwiXFx0dGVzdGxcXHQlZWRpLCAlZWRpXFxcIilcXG4gX19qaXRlZChcXFwiXFx0amVcXHRMMFxcXCIpXFxuIF9faml0ZWQoXFxcIlxcdGFkZHFcXHQlcjEyLCAlcmRpXFxcIilcXG4gX19qaXRlZChcXFwiTDA6XFx0Y2FsbHFcXHR7ey4qfX1cXFwiKVxcbitfX2FyY2hfYXJtNjRcXG4rX19qaXRlZChcXFwiLi4uXFxcIilcXG4rX19qaXRlZChcXFwiXFx0bW92XFx0dzAsIHcwXFxcIilcXG4rX19qaXRlZChcXFwiXFx0Y2J6XFx0dzAsIEwwXFxcIilcXG4rX19qaXRlZChcXFwiXFx0YWRkXFx0eDAsIHgyOCwgdzAsIHV4dHdcXFwiKVxcbitfX2ppdGVkKFxcXCJMMDpcXHR7ey4qfX1cXFwiKVxcbiBfX3N1Y2Nlc3NcXG4gaW50IGFyZW5hX2FyZ19qaXRfbnVsbGFibGUodm9pZCAqY3R4KVxcbiB7XFxuQEAgLTcyLDYgKzgyLDE2IEBAIF9faml0ZWQoXFxcIlxcdHRlc3RsXFx0JXI4ZCwgJXI4ZFxcXCIpXFxuIF9faml0ZWQoXFxcIlxcdGplXFx0TDBcXFwiKVxcbiBfX2ppdGVkKFxcXCJcXHRhZGRxXFx0JXIxMiwgJXI4XFxcIilcXG4gX19qaXRlZChcXFwiTDA6XFx0Y2FsbHFcXHR7ey4qfX1cXFwiKVxcbitfX2FyY2hfYXJtNjRcXG4rX19qaXRlZChcXFwiLi4uXFxcIilcXG4rX19qaXRlZChcXFwiXFx0YWRkXFx0eDAsIHgyOCwgdzAsIHV4dHdcXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRhZGRcXHR4MSwgeDI4LCB3MSwgdXh0d1xcXCIpXFxuK19faml0ZWQoXFxcIlxcdGFkZFxcdHgyLCB4MjgsIHcyLCB1eHR3XFxcIilcXG4rX19qaXRlZChcXFwiXFx0YWRkXFx0eDMsIHgyOCwgdzMsIHV4dHdcXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRtb3ZcXHR3NCwgdzRcXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRjYnpcXHR3NCwgTDBcXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRhZGRcXHR4NCwgeDI4LCB3NCwgdXh0d1xcXCIpXFxuK19faml0ZWQoXFxcIkwwOlxcdHt7Lip9fVxcXCIpXFxuIF9fc3VjY2Vzc1xcbiBpbnQgYXJlbmFfYXJnX2ppdF9hcmdzNSh2b2lkICpjdHgpXFxuIHtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfYXJlbmEuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJ1Y3Rfb3BzX2FyZW5hLmNcXG5pbmRleCBiYTA0YzczZDhkOTY3Li44YWE4NjM5ZGY5MWYwIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJ1Y3Rfb3BzX2FyZW5hLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RydWN0X29wc19hcmVuYS5jXFxuQEAgLTU5LDExICs1OSwyOCBAQCBpbnQgdGVzdF9hcmVuYV9zdGFja19jYih1bnNpZ25lZCBsb25nIGxvbmcgKmN0eClcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK1NFQyhcXFwic3RydWN0X29wcy90ZXN0X2FyZW5hX211bHRpc2xvdFxcXCIpXFxuK2ludCB0ZXN0X2FyZW5hX211bHRpc2xvdF9jYih1bnNpZ25lZCBsb25nIGxvbmcgKmN0eClcXG4re1xcbitcXHR1NjQgX19hcmVuYSAqcHRyID0gKHU2NCBfX2FyZW5hICopY3R4WzJdO1xcbitcXG4rXFx0YXJlbmFfdG91Y2grKztcXG4rXFx0LypcXG4rXFx0ICogVGhlIDE2LWJ5dGUgc3RydWN0IG9jY3VwaWVzIGN0eFswXSBhbmQgY3R4WzFdLCBzbyBAcHRyIGlzIGFyZ3VtZW50XFxuK1xcdCAqIG9uZSBidXQgc2xvdCB0d28uIEdldHRpbmcgdGhhdCB3cm9uZyBoYW5kcyB0aGUgY2FsbGJhY2sgYSBzY2FsYXIuXFxuK1xcdCAqL1xcbitcXHRpZiAoY3R4WzBdICE9IDExIHx8IGN0eFsxXSAhPSAyMilcXG4rXFx0XFx0cmV0dXJuIDB4YmFkO1xcbitcXHQqcHRyICs9IDE7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBTRUMoXFxcIi5zdHJ1Y3Rfb3BzLmxpbmtcXFwiKVxcbiBzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzMyB0ZXN0bW9kX2FyZW5hID0ge1xcbiBcXHQudGVzdF9hcmVuYSA9ICh2b2lkICopdGVzdF9hcmVuYV9jYixcXG4gXFx0LnRlc3RfYXJlbmFfbnVsbGFibGUgPSAodm9pZCAqKXRlc3RfYXJlbmFfbnVsbGFibGVfY2IsXFxuIFxcdC50ZXN0X2FyZW5hX3N0YWNrID0gKHZvaWQgKil0ZXN0X2FyZW5hX3N0YWNrX2NiLFxcbitcXHQudGVzdF9hcmVuYV9tdWx0aXNsb3QgPSAodm9pZCAqKXRlc3RfYXJlbmFfbXVsdGlzbG90X2NiLFxcbiB9O1xcbiBcXG4gU0VDKFxcXCJzeXNjYWxsXFxcIilcXG5AQCAtMTA5LDYgKzEyNiwxMyBAQCBpbnQgdHJpZ2dlcih2b2lkICpjdHgpXFxuIFxcdGlmICgqdmFsICE9IDQ0KVxcbiBcXHRcXHRyZXR1cm4gOTtcXG4gXFxuK1xcdC8qIGEgbXVsdGktc2xvdCBhcmcgcHJlY2VkZXMgdGhlIGFyZW5hIHBvaW50ZXIgaGVyZSAqL1xcbitcXHRyZXQgPSBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9tdWx0aXNsb3QoKHU2NCAqKXZhbCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiAxMDtcXG4rXFx0aWYgKCp2YWwgIT0gNDUpXFxuK1xcdFxcdHJldHVybiAxMTtcXG4rXFxuIFxcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFxcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKXZhbCwgMSk7XFxuICNlbmRpZlxcbiBcXHRyZXR1cm4gMDtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmNcXG5pbmRleCBhNjEzM2Y3NTIxZjM0Li45MzY2YTNjNTc4ZjEzIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jXFxuQEAgLTQwMiwxMiArNDAyLDE5IEBAIHN0YXRpYyBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19fdGVzdF9hcmVuYV9zdGFjayh1NjQgYSwgdTY0IGIsIHU2NCBjLCB1NjQgZCxcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19fdGVzdF9hcmVuYV9tdWx0aXNsb3Qoc3RydWN0IGJwZl90ZXN0bW9kX2FyZW5hX3BhaXIgcCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICB1NjQgKnB0cl9fYXJlbmEpXFxuK3tcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIHN0YXRpYyBzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzMyBfX2JwZl90ZXN0bW9kX29wczMgPSB7XFxuIFxcdC50ZXN0XzEgPSBicGZfdGVzdG1vZF90ZXN0XzMsXFxuIFxcdC50ZXN0XzIgPSBicGZfdGVzdG1vZF90ZXN0XzQsXFxuIFxcdC50ZXN0X2FyZW5hID0gYnBmX3Rlc3Rtb2Rfb3BzM19fdGVzdF9hcmVuYSxcXG4gXFx0LnRlc3RfYXJlbmFfbnVsbGFibGUgPSBicGZfdGVzdG1vZF9vcHMzX190ZXN0X2FyZW5hX251bGxhYmxlLFxcbiBcXHQudGVzdF9hcmVuYV9zdGFjayA9IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmFfc3RhY2ssXFxuK1xcdC50ZXN0X2FyZW5hX211bHRpc2xvdCA9IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmFfbXVsdGlzbG90LFxcbiB9O1xcbiBcXG4gc3RhdGljIHZvaWQgYnBmX3Rlc3Rtb2RfdGVzdF9zdHJ1Y3Rfb3BzMyh2b2lkKVxcbkBAIC00NDEsNiArNDQ4LDEzIEBAIF9fYnBmX2tmdW5jIGludCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9zdGFjayh1NjQgKnB0cl9fYXJlbmEpXFxuIFxcdHJldHVybiBzdF9vcHMzLVxcdTAwM2V0ZXN0X2FyZW5hX3N0YWNrKDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIHB0cl9fYXJlbmEpO1xcbiB9XFxuIFxcbitfX2JwZl9rZnVuYyBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfbXVsdGlzbG90KHU2NCAqcHRyX19hcmVuYSlcXG4re1xcbitcXHRzdHJ1Y3QgYnBmX3Rlc3Rtb2RfYXJlbmFfcGFpciBwID0geyAuYSA9IDExLCAuYiA9IDIyIH07XFxuK1xcbitcXHRyZXR1cm4gc3Rfb3BzMy1cXHUwMDNldGVzdF9hcmVuYV9tdWx0aXNsb3QocCwgcHRyX19hcmVuYSk7XFxuK31cXG4rXFxuIHN0cnVjdCBicGZfdGVzdG1vZF9idGZfdHlwZV90YWdfMSB7XFxuIFxcdGludCBhO1xcbiB9O1xcbkBAIC04NTIsNiArODY2LDcgQEAgQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0XzIpXFxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYSlcXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX251bGxhYmxlKVxcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfc3RhY2spXFxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9tdWx0aXNsb3QpXFxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfZ2V0X2RlZmF1bHRfdHJ1c3RlZF9wdHJfdGVzdCk7XFxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfcHV0X2RlZmF1bHRfdHJ1c3RlZF9wdHJfdGVzdCk7XFxuIEJURl9LRlVOQ1NfRU5EKGJwZl90ZXN0bW9kX2NvbW1vbl9rZnVuY19pZHMpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5oXFxuaW5kZXggMzNmMmFmNWI3MDg1Ny4uMjEwYjkxOTI5MGNjMiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuaFxcbkBAIC0xMDMsNiArMTAzLDEyIEBAIHN0cnVjdCBicGZfdGVzdG1vZF9vcHMyIHtcXG4gXFx0aW50ICgqdGVzdF8xKSh2b2lkKTtcXG4gfTtcXG4gXFxuKy8qIDE2IGJ5dGVzLCBzbyBpdCB0YWtlcyB0d28gYXJndW1lbnQgc2xvdHMgd2hlbiBwYXNzZWQgYnkgdmFsdWUgKi9cXG4rc3RydWN0IGJwZl90ZXN0bW9kX2FyZW5hX3BhaXIge1xcbitcXHR1NjQgYTtcXG4rXFx0dTY0IGI7XFxuK307XFxuK1xcbiBzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzMyB7XFxuIFxcdGludCAoKnRlc3RfMSkodm9pZCk7XFxuIFxcdGludCAoKnRlc3RfMikodm9pZCk7XFxuQEAgLTExMiw2ICsxMTgsOCBAQCBzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzMyB7XFxuIFxcdC8qIGVub3VnaCBsZWFkaW5nIGFyZ3MgdG8gZm9yY2UgQHB0ciBvbnRvIHRoZSBzdGFjayBvbiB4ODYgYW5kIGFybTY0ICovXFxuIFxcdGludCAoKnRlc3RfYXJlbmFfc3RhY2spKHU2NCBhLCB1NjQgYiwgdTY0IGMsIHU2NCBkLCB1NjQgZSwgdTY0IGYsXFxuIFxcdFxcdFxcdFxcdHU2NCBnLCB1NjQgaCwgdTY0ICpwdHIpO1xcbitcXHQvKiBhIG11bHRpLXNsb3QgbGVhZGluZyBhcmcsIHNvIEBwdHIgaXMgbm90IGF0IHRoZSBzbG90IGl0cyBhcmcgaW5kZXggc3VnZ2VzdHMgKi9cXG4rXFx0aW50ICgqdGVzdF9hcmVuYV9tdWx0aXNsb3QpKHN0cnVjdCBicGZfdGVzdG1vZF9hcmVuYV9wYWlyIHAsIHU2NCAqcHRyKTtcXG4gfTtcXG4gXFxuIHN0cnVjdCBzdF9vcHNfYXJncyB7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kX2tmdW5jLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oXFxuaW5kZXggYzQzODNhY2I1M2MxMS4uN2Q4MTA3MGVlZmU3ZiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaFxcbkBAIC0xMjMsNiArMTIzLDcgQEAgdm9pZCBicGZfdGVzdG1vZF90ZXN0X21vZF9rZnVuYyhpbnQgaSkgX19rc3ltO1xcbiBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmEoX191NjQgKnB0cl9fYXJlbmEpIF9fa3N5bTtcXG4gaW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX251bGxhYmxlKF9fdTY0ICpwdHJfX2FyZW5hX19udWxsYWJsZSkgX19rc3ltO1xcbiBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfc3RhY2soX191NjQgKnB0cl9fYXJlbmEpIF9fa3N5bTtcXG4raW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX211bHRpc2xvdChfX3U2NCAqcHRyX19hcmVuYSkgX19rc3ltO1xcbiBcXG4gX191NjQgYnBmX2tmdW5jX2NhbGxfdGVzdDEoc3RydWN0IHNvY2sgKnNrLCBfX3UzMiBhLCBfX3U2NCBiLFxcbiBcXHRcXHRcXHRcXHRfX3UzMiBjLCBfX3U2NCBkKSBfX2tzeW07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjUwOjEzLjY4MjY5NTA5N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjg2NTg2ODE1MzY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfSklUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZ1wiLFxuICAgIFwiYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzXCIsXG4gICAgXCJhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbXBsZW1lbnRzIEJQRiBhcmVuYSBhcmd1bWVudHMgc3VwcG9ydCBmb3IgdGhlIGFybTY0IEpJVCBjb21waWxlci4gSXQgYWRkcyBuZXcgaW5zdHJ1Y3Rpb24gZ2VuZXJhdGlvbiBsb2dpYyBmb3IgZXh0ZW5kZWQgcmVnaXN0ZXIgYWRkL3N1YiBpbnN0cnVjdGlvbnMgKGBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnYCkgYW5kIG1vZGlmaWVzIHRoZSBhcm02NCBCUEYgSklUIChgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYCwgYGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJnc2ApIHRvIGhhbmRsZSBhcmVuYSBwb2ludGVycyBpbiBrZnVuYyBjYWxscyBhbmQgc3RydWN0X29wcyBjYWxsYmFja3MuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUga2VybmVsIChCUEYgSklUKSB0aGF0IGFyZSByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDlmZDM4MjI1YzIzZThhOTVlYWYzODhmMjczZGMzMzg3MWIyMjRlYmZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAyMDo1MDoxMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3QgYi9Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0XG5pbmRleCAxMGU3MjVjYmU2NGNkLi44NWY3M2UwYmJkMGZmIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdFxuQEAgLTMwMSw5ICszMDEsOSBAQCBBbiBleGFtcGxlIGlzIGdpdmVuIGJlbG93OjpcbiAgICAgICAgIH1cbiBcbiBDYWxsaW5nIHN1Y2ggYSBrZnVuYyByZXF1aXJlcyB0aGUgcHJvZ3JhbSB0byB1c2UgYW4gYXJlbmEgbWFwIGFuZCBhIEpJVCB3aXRoXG4tYXJlbmEgYXJndW1lbnQgc3VwcG9ydCAoY3VycmVudGx5IHg4Ni02NCk7IHZlcmlmaWNhdGlvbiBmYWlscyBvdGhlcndpc2UuIFRoZVxuLXByb2dyYW0gY2FuIHBhc3MgYW55IHZhbHVlIHdpdGhvdXQgY29tcHJvbWlzaW5nIHRoZSBrZXJuZWwuIEEgdmFsdWUgdGhhdCBkb2VzXG4tbm90IHBvaW50IGludG8gdGhlIGFyZW5hIGlzIGEgcHJvZ3JhbSBidWcuXG4rYXJlbmEgYXJndW1lbnQgc3VwcG9ydCAoY3VycmVudGx5IHg4Ni02NCBhbmQgYXJtNjQpOyB2ZXJpZmljYXRpb24gZmFpbHNcbitvdGhlcndpc2UuIFRoZSBwcm9ncmFtIGNhbiBwYXNzIGFueSB2YWx1ZSB3aXRob3V0IGNvbXByb21pc2luZyB0aGUga2VybmVsLiBBXG4rdmFsdWUgdGhhdCBkb2VzIG5vdCBwb2ludCBpbnRvIHRoZSBhcmVuYSBpcyBhIHByb2dyYW0gYnVnLlxuIFxuIFRoZSBzdWZmaXhlcyBoYXZlIHRoZSBzYW1lIG1lYW5pbmcgb24gdGhlIGFyZ3VtZW50cyBvZiBzdHJ1Y3Rfb3BzIHN0dWJcbiBmdW5jdGlvbnMsIHdpdGggdGhlIGNvbnZlcnNpb24gcnVubmluZyBpbiB0aGUgb3Bwb3NpdGUgZGlyZWN0aW9uLiBUaGVcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2luc24uaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vaW5zbi5oXG5pbmRleCBjYzA3MDJmYTY0YTc5Li4xY2U3NWE0NDI2Mzg3IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9pbnNuLmhcbisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vaW5zbi5oXG5AQCAtMjA1LDYgKzIwNSwxOCBAQCBlbnVtIGFhcmNoNjRfaW5zbl9hZHNiX3R5cGUge1xuIFx0QUFSQ0g2NF9JTlNOX0FEU0JfU1VCX1NFVEZMQUdTXG4gfTtcbiBcbisvKiBvcHRpb24gZmllbGQgb2YgYWRkL3N1YiAoZXh0ZW5kZWQgcmVnaXN0ZXIpICovXG4rZW51bSBhYXJjaDY0X2luc25fZXh0ZW5kX3R5cGUge1xuK1x0QUFSQ0g2NF9JTlNOX0VYVEVORF9VWFRCLFxuK1x0QUFSQ0g2NF9JTlNOX0VYVEVORF9VWFRILFxuK1x0QUFSQ0g2NF9JTlNOX0VYVEVORF9VWFRXLFxuK1x0QUFSQ0g2NF9JTlNOX0VYVEVORF9VWFRYLFxuK1x0QUFSQ0g2NF9JTlNOX0VYVEVORF9TWFRCLFxuK1x0QUFSQ0g2NF9JTlNOX0VYVEVORF9TWFRILFxuK1x0QUFSQ0g2NF9JTlNOX0VYVEVORF9TWFRXLFxuK1x0QUFSQ0g2NF9JTlNOX0VYVEVORF9TWFRYLFxuK307XG4rXG4gZW51bSBhYXJjaDY0X2luc25fbW92ZXdpZGVfdHlwZSB7XG4gXHRBQVJDSDY0X0lOU05fTU9WRVdJREVfWkVSTyxcbiBcdEFBUkNINjRfSU5TTl9NT1ZFV0lERV9LRUVQLFxuQEAgLTM3OCw2ICszOTAsMTAgQEAgX19BQVJDSDY0X0lOU05fRlVOQ1MoYWRkLFx0MHg3RjIwMDAwMCwgMHgwQjAwMDAwMClcbiBfX0FBUkNINjRfSU5TTl9GVU5DUyhhZGRzLFx0MHg3RjIwMDAwMCwgMHgyQjAwMDAwMClcbiBfX0FBUkNINjRfSU5TTl9GVU5DUyhzdWIsXHQweDdGMjAwMDAwLCAweDRCMDAwMDAwKVxuIF9fQUFSQ0g2NF9JTlNOX0ZVTkNTKHN1YnMsXHQweDdGMjAwMDAwLCAweDZCMDAwMDAwKVxuK19fQUFSQ0g2NF9JTlNOX0ZVTkNTKGFkZF9leHQsXHQweDdGRTAwMDAwLCAweDBCMjAwMDAwKVxuK19fQUFSQ0g2NF9JTlNOX0ZVTkNTKGFkZHNfZXh0LFx0MHg3RkUwMDAwMCwgMHgyQjIwMDAwMClcbitfX0FBUkNINjRfSU5TTl9GVU5DUyhzdWJfZXh0LFx0MHg3RkUwMDAwMCwgMHg0QjIwMDAwMClcbitfX0FBUkNINjRfSU5TTl9GVU5DUyhzdWJzX2V4dCxcdDB4N0ZFMDAwMDAsIDB4NkIyMDAwMDApXG4gX19BQVJDSDY0X0lOU05fRlVOQ1MobWFkZCxcdDB4N0ZFMDgwMDAsIDB4MUIwMDAwMDApXG4gX19BQVJDSDY0X0lOU05fRlVOQ1MobXN1YixcdDB4N0ZFMDgwMDAsIDB4MUIwMDgwMDApXG4gX19BQVJDSDY0X0lOU05fRlVOQ1ModWRpdixcdDB4N0ZFMEZDMDAsIDB4MUFDMDA4MDApXG5AQCAtNjM3LDYgKzY1MywxMyBAQCB1MzIgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX3NoaWZ0ZWRfcmVnKGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIGRzdCxcbiBcdFx0XHRcdFx0IGludCBzaGlmdCxcbiBcdFx0XHRcdFx0IGVudW0gYWFyY2g2NF9pbnNuX3ZhcmlhbnQgdmFyaWFudCxcbiBcdFx0XHRcdFx0IGVudW0gYWFyY2g2NF9pbnNuX2Fkc2JfdHlwZSB0eXBlKTtcbit1MzIgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZyhlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBkc3QsXG4rXHRcdFx0XHRcdCAgZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgc3JjLFxuK1x0XHRcdFx0XHQgIGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIHJlZyxcbitcdFx0XHRcdFx0ICBlbnVtIGFhcmNoNjRfaW5zbl9leHRlbmRfdHlwZSBleHRlbmQsXG4rXHRcdFx0XHRcdCAgaW50IHNoaWZ0LFxuK1x0XHRcdFx0XHQgIGVudW0gYWFyY2g2NF9pbnNuX3ZhcmlhbnQgdmFyaWFudCxcbitcdFx0XHRcdFx0ICBlbnVtIGFhcmNoNjRfaW5zbl9hZHNiX3R5cGUgdHlwZSk7XG4gdTMyIGFhcmNoNjRfaW5zbl9nZW5fZGF0YTEoZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgZHN0LFxuIFx0XHRcdCAgIGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIHNyYyxcbiBcdFx0XHQgICBlbnVtIGFhcmNoNjRfaW5zbl92YXJpYW50IHZhcmlhbnQsXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9saWIvaW5zbi5jIGIvYXJjaC9hcm02NC9saWIvaW5zbi5jXG5pbmRleCAzN2NlNzVmN2YxZjA4Li5lNzBhYzAyMzg1MTUzIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9saWIvaW5zbi5jXG4rKysgYi9hcmNoL2FybTY0L2xpYi9pbnNuLmNcbkBAIC05ODYsNiArOTg2LDY2IEBAIHUzMiBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfc2hpZnRlZF9yZWcoZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgZHN0LFxuIFx0cmV0dXJuIGFhcmNoNjRfaW5zbl9lbmNvZGVfaW1tZWRpYXRlKEFBUkNINjRfSU5TTl9JTU1fNiwgaW5zbiwgc2hpZnQpO1xuIH1cbiBcbisvKlxuKyAqIFVubGlrZSB0aGUgc2hpZnRlZC1yZWdpc3RlciBmb3JtLCByZWdpc3RlciAzMSBpcyBub3QgWFpSIGV2ZXJ5d2hlcmUgaGVyZTpcbisgKiBpdCBlbmNvZGVzIFNQIGZvciBAc3JjLCBhbmQgZm9yIEBkc3QgdG9vIHVubGVzcyBAdHlwZSBzZXRzIHRoZSBmbGFncy4gT25seVxuKyAqIEByZWcga2VlcHMgdGhlIFhaUiBtZWFuaW5nLlxuKyAqL1xuK3UzMiBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnKGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIGRzdCxcbitcdFx0XHRcdFx0ICBlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBzcmMsXG4rXHRcdFx0XHRcdCAgZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgcmVnLFxuK1x0XHRcdFx0XHQgIGVudW0gYWFyY2g2NF9pbnNuX2V4dGVuZF90eXBlIGV4dGVuZCxcbitcdFx0XHRcdFx0ICBpbnQgc2hpZnQsXG4rXHRcdFx0XHRcdCAgZW51bSBhYXJjaDY0X2luc25fdmFyaWFudCB2YXJpYW50LFxuK1x0XHRcdFx0XHQgIGVudW0gYWFyY2g2NF9pbnNuX2Fkc2JfdHlwZSB0eXBlKVxuK3tcbitcdHUzMiBpbnNuO1xuK1xuK1x0c3dpdGNoICh0eXBlKSB7XG4rXHRjYXNlIEFBUkNINjRfSU5TTl9BRFNCX0FERDpcbitcdFx0aW5zbiA9IGFhcmNoNjRfaW5zbl9nZXRfYWRkX2V4dF92YWx1ZSgpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgQUFSQ0g2NF9JTlNOX0FEU0JfU1VCOlxuK1x0XHRpbnNuID0gYWFyY2g2NF9pbnNuX2dldF9zdWJfZXh0X3ZhbHVlKCk7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBBQVJDSDY0X0lOU05fQURTQl9BRERfU0VURkxBR1M6XG4rXHRcdGluc24gPSBhYXJjaDY0X2luc25fZ2V0X2FkZHNfZXh0X3ZhbHVlKCk7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBBQVJDSDY0X0lOU05fQURTQl9TVUJfU0VURkxBR1M6XG4rXHRcdGluc24gPSBhYXJjaDY0X2luc25fZ2V0X3N1YnNfZXh0X3ZhbHVlKCk7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0cHJfZXJyKFwiJXM6IHVua25vd24gYWRkL3N1YiBlbmNvZGluZyAlZFxcblwiLCBfX2Z1bmNfXywgdHlwZSk7XG4rXHRcdHJldHVybiBBQVJDSDY0X0JSRUFLX0ZBVUxUO1xuK1x0fVxuK1xuK1x0c3dpdGNoICh2YXJpYW50KSB7XG4rXHRjYXNlIEFBUkNINjRfSU5TTl9WQVJJQU5UXzMyQklUOlxuK1x0XHRicmVhaztcbitcdGNhc2UgQUFSQ0g2NF9JTlNOX1ZBUklBTlRfNjRCSVQ6XG4rXHRcdGluc24gfD0gQUFSQ0g2NF9JTlNOX1NGX0JJVDtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRwcl9lcnIoXCIlczogdW5rbm93biB2YXJpYW50IGVuY29kaW5nICVkXFxuXCIsIF9fZnVuY19fLCB2YXJpYW50KTtcbitcdFx0cmV0dXJuIEFBUkNINjRfQlJFQUtfRkFVTFQ7XG4rXHR9XG4rXG4rXHRpZiAoc2hpZnQgXHUwMDNjIDAgfHwgc2hpZnQgXHUwMDNlIDQpIHtcbitcdFx0cHJfZXJyKFwiJXM6IGludmFsaWQgc2hpZnQgZW5jb2RpbmcgJWRcXG5cIiwgX19mdW5jX18sIHNoaWZ0KTtcbitcdFx0cmV0dXJuIEFBUkNINjRfQlJFQUtfRkFVTFQ7XG4rXHR9XG4rXG4rXHRpbnNuID0gYWFyY2g2NF9pbnNuX2VuY29kZV9yZWdpc3RlcihBQVJDSDY0X0lOU05fUkVHVFlQRV9SRCwgaW5zbiwgZHN0KTtcbitcbitcdGluc24gPSBhYXJjaDY0X2luc25fZW5jb2RlX3JlZ2lzdGVyKEFBUkNINjRfSU5TTl9SRUdUWVBFX1JOLCBpbnNuLCBzcmMpO1xuK1xuK1x0aW5zbiA9IGFhcmNoNjRfaW5zbl9lbmNvZGVfcmVnaXN0ZXIoQUFSQ0g2NF9JTlNOX1JFR1RZUEVfUk0sIGluc24sIHJlZyk7XG4rXG4rXHQvKiBvcHRpb24gaW4gYml0cyBbMTU6MTNdIGFuZCBpbW0zIGluIFsxMjoxMF0gdG9nZXRoZXIgZmlsbCBJTU1fNiAqL1xuK1x0cmV0dXJuIGFhcmNoNjRfaW5zbl9lbmNvZGVfaW1tZWRpYXRlKEFBUkNINjRfSU5TTl9JTU1fNiwgaW5zbixcbitcdFx0XHRcdFx0ICAgICAoZXh0ZW5kIFx1MDAzY1x1MDAzYyAzKSB8IHNoaWZ0KTtcbit9XG4rXG4gdTMyIGFhcmNoNjRfaW5zbl9nZW5fZGF0YTEoZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgZHN0LFxuIFx0XHRcdCAgIGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIHNyYyxcbiBcdFx0XHQgICBlbnVtIGFhcmNoNjRfaW5zbl92YXJpYW50IHZhcmlhbnQsXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9uZXQvYnBmX2ppdC5oIGIvYXJjaC9hcm02NC9uZXQvYnBmX2ppdC5oXG5pbmRleCBkMTNkZTQyMjJjZmI3Li5iMmZlNmU2ZGNmNDQ3IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9uZXQvYnBmX2ppdC5oXG4rKysgYi9hcmNoL2FybTY0L25ldC9icGZfaml0LmhcbkBAIC0yNDMsNiArMjQzLDE3IEBAXG4gLyogUm4gLSBSbTsgc2V0IGNvbmRpdGlvbiBmbGFncyAqL1xuICNkZWZpbmUgQTY0X0NNUChzZiwgUm4sIFJtKSBBNjRfU1VCUyhzZiwgQTY0X1pSLCBSbiwgUm0pXG4gXG4rLyogQWRkL3N1YnRyYWN0IChleHRlbmRlZCByZWdpc3RlcikgKi9cbisjZGVmaW5lIEE2NF9BRERTVUJfRVJFRyhzZiwgUmQsIFJuLCBSbSwgZXh0LCBzaGlmdCwgdHlwZSkgXFxcbitcdGFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9leHRlbmRlZF9yZWcoUmQsIFJuLCBSbSwgXFxcbitcdFx0QUFSQ0g2NF9JTlNOX0VYVEVORF8jI2V4dCwgc2hpZnQsIEE2NF9WQVJJQU5UKHNmKSwgXFxcbitcdFx0QUFSQ0g2NF9JTlNOX0FEU0JfIyN0eXBlKVxuKy8qIFJkID0gUm4gKyAoRVhUKFJtKSBcdTAwM2NcdTAwM2Mgc2hpZnQpICovXG4rI2RlZmluZSBBNjRfQUREX0VYVChzZiwgUmQsIFJuLCBSbSwgZXh0LCBzaGlmdCkgXFxcbitcdEE2NF9BRERTVUJfRVJFRyhzZiwgUmQsIFJuLCBSbSwgZXh0LCBzaGlmdCwgQUREKVxuKy8qIFJkID0gUm4gKyAodTMyKVJtICovXG4rI2RlZmluZSBBNjRfQUREX1VYVFcoUmQsIFJuLCBSbSkgQTY0X0FERF9FWFQoMSwgUmQsIFJuLCBSbSwgVVhUVywgMClcbitcbiAvKiBEYXRhLXByb2Nlc3NpbmcgKDEgc291cmNlKSAqL1xuICNkZWZpbmUgQTY0X0RBVEExKHNmLCBSZCwgUm4sIHR5cGUpIGFhcmNoNjRfaW5zbl9nZW5fZGF0YTEoUmQsIFJuLCBcXFxuIFx0QTY0X1ZBUklBTlQoc2YpLCBBQVJDSDY0X0lOU05fREFUQTFfIyN0eXBlKVxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jIGIvYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmNcbmluZGV4IDc0YjQwODM3OTFkYTMuLmMxOGUwMDVhNDFkYmUgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY1xuKysrIGIvYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmNcbkBAIC0xMjU2LDYgKzEyNTYsNDMgQEAgc3RhdGljIHZvaWQgZW1pdF9zdGFja19hcmdfc3RvcmVfaW1tKHMzMiBpbW0sIHMxNiBicGZfb2ZmLCBjb25zdCB1OCB0bXAsIHN0cnVjdFxuIFx0fVxuIH1cbiBcbisvKlxuKyAqIFJlYmFzZSB0aGUgX19hcmVuYSBhcmdzIG9mIGEga2Z1bmMgY2FsbCB0byBhcmVuYSBrZXJuZWwgYWRkcmVzc2VzLFxuKyAqIHhOID0ga2Vybl92bV9zdGFydCArICh1MzIpeE4sIHdpdGggdGhlIGFyZW5hIGJhc2UgcmVnaXN0ZXIgaG9sZGluZ1xuKyAqIGtlcm5fdm1fc3RhcnQuIEEgbnVsbGFibGUgYXJnIHByZXNlcnZlcyBOVUxMIGJ5IHNraXBwaW5nIHRoZSBhZGQsIHRlc3RlZFxuKyAqIG9uIHRoZSB0cnVuY2F0ZWQgdmFsdWUgYXMgYXJlbmEgTlVMTCBpcyBvZmZzZXQgMC5cbisgKi9cbitzdGF0aWMgaW50IGVtaXRfa2Z1bmNfYXJlbmFfYXJncyhzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4re1xuK1x0Y29uc3QgdTggYXJlbmFfdm1fYmFzZSA9IGJwZjJhNjRbQVJFTkFfVk1fU1RBUlRdO1xuK1x0Y29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICpmbTtcbitcdGludCBpO1xuK1xuK1x0Zm0gPSBicGZfaml0X2ZpbmRfa2Z1bmNfbW9kZWwoY3R4LVx1MDAzZXByb2csIGluc24pO1xuK1x0aWYgKCFmbSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBtaW5fdChpbnQsIGZtLVx1MDAzZW5yX2FyZ3MsIE1BWF9CUEZfRlVOQ19SRUdfQVJHUyk7IGkrKykge1xuK1x0XHRjb25zdCB1OCByZWcgPSBicGYyYTY0W0JQRl9SRUdfMSArIGldO1xuK1x0XHR1OCBmbGFncyA9IGZtLVx1MDAzZWFyZ19mbGFnc1tpXTtcbitcbitcdFx0aWYgKCEoZmxhZ3MgXHUwMDI2IEJURl9GTU9ERUxfQVJFTkFfQVJHKSlcbitcdFx0XHRjb250aW51ZTtcbitcdFx0aWYgKFdBUk5fT05fT05DRSghY3R4LVx1MDAzZWFyZW5hX3ZtX3N0YXJ0KSlcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdFx0aWYgKGZsYWdzIFx1MDAyNiBCVEZfRk1PREVMX05VTExBQkxFX0FSRykge1xuK1x0XHRcdC8qIDMyLWJpdCBtb3YgY2xlYXJzIHRoZSB1cHBlciAzMiBiaXRzICovXG4rXHRcdFx0ZW1pdChBNjRfTU9WKDAsIHJlZywgcmVnKSwgY3R4KTtcbitcdFx0XHQvKiBza2lwIHRoZSBhZGQgc28gdGhhdCBOVUxMIHN0YXlzIE5VTEwgKi9cbitcdFx0XHRlbWl0KEE2NF9DQlooMCwgcmVnLCAyKSwgY3R4KTtcbitcdFx0fVxuK1x0XHRlbWl0KEE2NF9BRERfVVhUVyhyZWcsIGFyZW5hX3ZtX2Jhc2UsIHJlZyksIGN0eCk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gLyogSklUcyBhbiBlQlBGIGluc3RydWN0aW9uLlxuICAqIFJldHVybnM6XG4gICogMCAgLSBzdWNjZXNzZnVsbHkgSklUZWQgYW4gOC1ieXRlIGVCUEYgaW5zdHJ1Y3Rpb24uXG5AQCAtMTY3OCw2ICsxNzE1LDExIEBAIHN0YXRpYyBpbnQgYnVpbGRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX2luc25cbiBcdFx0XHRcdFx0ICAgIFx1MDAyNmZ1bmNfYWRkciwgXHUwMDI2ZnVuY19hZGRyX2ZpeGVkKTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHRpZiAoaW5zbi1cdTAwM2VzcmNfcmVnID09IEJQRl9QU0VVRE9fS0ZVTkNfQ0FMTCkge1xuK1x0XHRcdHJldCA9IGVtaXRfa2Z1bmNfYXJlbmFfYXJncyhjdHgsIGluc24pO1xuK1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHR9XG4gXHRcdGVtaXRfY2FsbChmdW5jX2FkZHIsIGN0eCk7XG4gXHRcdC8qXG4gXHRcdCAqIENhbGwgdG8gYXJjaF9icGZfdGltZWRfbWF5X2dvdG8oKSBpcyBlbWl0dGVkIGJ5IHRoZVxuQEAgLTIzNTEsNiArMjM5MywxMSBAQCBib29sIGJwZl9qaXRfc3VwcG9ydHNfc3RhY2tfYXJncyh2b2lkKVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuK2Jvb2wgYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzKHZvaWQpXG4re1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuIHZvaWQgKmJwZl9hcmNoX3RleHRfY29weSh2b2lkICpkc3QsIHZvaWQgKnNyYywgc2l6ZV90IGxlbilcbiB7XG4gXHRpZiAoIWFhcmNoNjRfaW5zbl9jb3B5KGRzdCwgc3JjLCBsZW4pKVxuQEAgLTI1MjQsMzQgKzI1NzEsNzYgQEAgc3RhdGljIHZvaWQgY2xlYXJfZ2FyYmFnZShzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBpbnQgcmVnLCBpbnQgZWZmZWN0aXZlX2J5dGVzKVxuIFx0fVxuIH1cbiBcbisvKlxuKyAqIENvbnZlcnQgYW4gYXJlbmEga2VybmVsIGFkZHJlc3MgaW50byB0aGUgYXJlbmEgcG9pbnRlciBmb3JtIG9uIGl0cyB3YXkgaW50b1xuKyAqIHRoZSBCUEYgY3R4LCBkc3QgPSAodTMyKShzcmMgLSBrZXJuX3ZtX3N0YXJ0KSwgd2l0aCBAYmFzZV9sbyBob2xkaW5nIHRoZSBsb3dcbisgKiAzMiBiaXRzIG9mIGtlcm5fdm1fc3RhcnQuIEEgbnVsbGFibGUgYXJnIHByZXNlcnZlcyBOVUxMLCB0ZXN0ZWQgb24gdGhlIGZ1bGxcbisgKiA2NC1iaXQga2VybmVsIHBvaW50ZXIuIFRoZSAzMi1iaXQgc3VidHJhY3Rpb24gYm90aCB0cnVuY2F0ZXMgYW5kIGNsZWFycyB0aGVcbisgKiB1cHBlciBoYWxmLCBzbyB0aGUgc3RvcmVkIHZhbHVlIHNhdGlzZmllcyB0aGUgSklUIGludmFyaWFudCBmb3IgYXJlbmFcbisgKiBwb2ludGVyIHJlZ2lzdGVycy5cbisgKi9cbitzdGF0aWMgdm9pZCBlbWl0X2FyZW5hX2FyZ19jb252KHN0cnVjdCBqaXRfY3R4ICpjdHgsIHU4IGRzdCwgdTggc3JjLCBib29sIG51bGxhYmxlLCB1OCBiYXNlX2xvKVxuK3tcbitcdGlmIChudWxsYWJsZSkge1xuK1x0XHRpZiAoZHN0ICE9IHNyYylcbitcdFx0XHRlbWl0KEE2NF9NT1YoMSwgZHN0LCBzcmMpLCBjdHgpO1xuK1x0XHQvKiBza2lwIHRoZSBzdWJ0cmFjdGlvbiBzbyB0aGF0IE5VTEwgc3RheXMgTlVMTCAqL1xuK1x0XHRlbWl0KEE2NF9DQlooMSwgZHN0LCAyKSwgY3R4KTtcbitcdFx0c3JjID0gZHN0O1xuK1x0fVxuK1x0ZW1pdChBNjRfU1VCKDAsIGRzdCwgc3JjLCBiYXNlX2xvKSwgY3R4KTtcbit9XG4rXG4gc3RhdGljIHZvaWQgc2F2ZV9hcmdzKHN0cnVjdCBqaXRfY3R4ICpjdHgsIGludCBiYXJnc19vZmYsIGludCBvYXJnc19vZmYsXG4tXHRcdCAgICAgIGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSxcbi1cdFx0ICAgICAgY29uc3Qgc3RydWN0IGFyZ19hdXggKmEsXG4tXHRcdCAgICAgIGJvb2wgZm9yX2NhbGxfb3JpZ2luKVxuK1x0XHQgICAgICBjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIGNvbnN0IHN0cnVjdCBhcmdfYXV4ICphLFxuK1x0XHQgICAgICBib29sIGZvcl9jYWxsX29yaWdpbiwgYm9vbCBpc19zdHJ1Y3Rfb3BzLCB1NjQgYXJlbmFfYmFzZSlcbiB7XG4tXHRpbnQgaTtcbi1cdGludCByZWc7XG4tXHRpbnQgZG9mZjtcbi1cdGludCBzb2ZmO1xuLVx0aW50IHNsb3RzO1xuIFx0dTggdG1wID0gYnBmMmE2NFtUTVBfUkVHXzFdO1xuK1x0dTggYmFzZV9sbyA9IGJwZjJhNjRbVE1QX1JFR18yXTtcbitcdGludCBpLCByZWcsIGRvZmYsIHNvZmYsIHNsb3RzO1xuK1xuK1x0Lyogb25seSB0aGUgbG93IDMyIGJpdHMgb2YgdGhlIGJhc2UgdGFrZSBwYXJ0IGluIHRoZSBzdWJ0cmFjdGlvbiAqL1xuK1x0aWYgKGFyZW5hX2Jhc2UpXG4rXHRcdGVtaXRfYTY0X21vdl9pKDAsIGJhc2VfbG8sIChzMzIpKHUzMilhcmVuYV9iYXNlLCBjdHgpO1xuIFxuIFx0Lyogc3RvcmUgYXJndW1lbnRzIHRvIHRoZSBzdGFjayBmb3IgdGhlIGJwZiBwcm9ncmFtLCBvciByZXN0b3JlXG4gXHQgKiBhcmd1bWVudHMgZnJvbSBzdGFjayBmb3IgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uXG4gXHQgKi9cbi1cdGZvciAocmVnID0gMDsgcmVnIFx1MDAzYyBhLVx1MDAzZXJlZ3NfZm9yX2FyZ3M7IHJlZysrKSB7XG4tXHRcdGVtaXQoZm9yX2NhbGxfb3JpZ2luID9cbi1cdFx0ICAgICBBNjRfTERSNjRJKHJlZywgQTY0X1NQLCBiYXJnc19vZmYpIDpcbi1cdFx0ICAgICBBNjRfU1RSNjRJKHJlZywgQTY0X1NQLCBiYXJnc19vZmYpLFxuLVx0XHQgICAgIGN0eCk7XG4tXHRcdGJhcmdzX29mZiArPSA4O1xuK1x0Zm9yIChpID0gMCwgcmVnID0gMDsgaSBcdTAwM2MgYS1cdTAwM2VhcmdzX2luX3JlZ3M7IGkrKykge1xuK1x0XHRib29sIGFyZW5hX2FyZyA9IGFyZW5hX2Jhc2UgXHUwMDI2XHUwMDI2IChtLVx1MDAzZWFyZ19mbGFnc1tpXSBcdTAwMjYgQlRGX0ZNT0RFTF9BUkVOQV9BUkcpO1xuK1x0XHRib29sIG51bGxhYmxlID0gbS1cdTAwM2VhcmdfZmxhZ3NbaV0gXHUwMDI2IEJURl9GTU9ERUxfTlVMTEFCTEVfQVJHO1xuK1xuK1x0XHRzbG90cyA9IChtLVx1MDAzZWFyZ19zaXplW2ldICsgNykgLyA4O1xuK1x0XHR3aGlsZSAoc2xvdHMtLSBcdTAwM2UgMCkge1xuK1x0XHRcdGlmIChmb3JfY2FsbF9vcmlnaW4pIHtcbitcdFx0XHRcdGVtaXQoQTY0X0xEUjY0SShyZWcsIEE2NF9TUCwgYmFyZ3Nfb2ZmKSwgY3R4KTtcbitcdFx0XHR9IGVsc2UgaWYgKGFyZW5hX2FyZykge1xuK1x0XHRcdFx0ZW1pdF9hcmVuYV9hcmdfY29udihjdHgsIHRtcCwgcmVnLCBudWxsYWJsZSwgYmFzZV9sbyk7XG4rXHRcdFx0XHRlbWl0KEE2NF9TVFI2NEkodG1wLCBBNjRfU1AsIGJhcmdzX29mZiksIGN0eCk7XG4rXHRcdFx0fSBlbHNlIHtcbitcdFx0XHRcdGVtaXQoQTY0X1NUUjY0SShyZWcsIEE2NF9TUCwgYmFyZ3Nfb2ZmKSwgY3R4KTtcbitcdFx0XHR9XG4rXHRcdFx0cmVnKys7XG4rXHRcdFx0YmFyZ3Nfb2ZmICs9IDg7XG4rXHRcdH1cbiBcdH1cbiBcbi1cdHNvZmYgPSAzMjsgLyogb24gc3RhY2sgYXJndW1lbnRzIHN0YXJ0IGZyb20gRlAgKyAzMiAqL1xuK1x0LypcbitcdCAqIE9uLXN0YWNrIGFyZ3VtZW50cyBzdGFydCBhYm92ZSB0aGUgZnJhbWUocykgcHVzaGVkIGJ5IHRoZSB0cmFtcG9saW5lXG4rXHQgKiBwcm9sb2d1ZS4gRW50ZXJlZCB0aHJvdWdoIHRoZSBmZW50cnkgY2FsbCBmcm9tIGEgdHJhY2VkIGZ1bmN0aW9uLCB0aGVcbitcdCAqIHByb2xvZ3VlIHNhdmVzIGJvdGggdGhlIHBhcmVudCAoRlAveDkpIGFuZCB0aGUgdHJhY2VkIGZ1bmN0aW9uXG4rXHQgKiAoRlAvTFIpIGZyYW1lcywgc28gdGhlIGFyZ3VtZW50cyBzdGFydCBhdCBGUCArIDMyLiBBIHN0cnVjdF9vcHNcbitcdCAqIGNhbGxiYWNrIGlzIGNhbGxlZCBpbmRpcmVjdGx5IGFuZCBvbmx5IHRoZSBGUC9MUiBmcmFtZSBpcyBzYXZlZCwgc29cbitcdCAqIHRoZXkgc3RhcnQgYXQgRlAgKyAxNi5cbitcdCAqL1xuK1x0c29mZiA9IGlzX3N0cnVjdF9vcHMgPyAxNiA6IDMyO1xuIFx0ZG9mZiA9IChmb3JfY2FsbF9vcmlnaW4gPyBvYXJnc19vZmYgOiBiYXJnc19vZmYpO1xuIFxuIFx0Lyogc2F2ZSBvbiBzdGFjayBhcmd1bWVudHMgKi9cbiBcdGZvciAoaSA9IGEtXHUwMDNlYXJnc19pbl9yZWdzOyBpIFx1MDAzYyBtLVx1MDAzZW5yX2FyZ3M7IGkrKykge1xuK1x0XHRib29sIGFyZW5hX2FyZyA9IGFyZW5hX2Jhc2UgXHUwMDI2XHUwMDI2IChtLVx1MDAzZWFyZ19mbGFnc1tpXSBcdTAwMjYgQlRGX0ZNT0RFTF9BUkVOQV9BUkcpO1xuK1x0XHRib29sIG51bGxhYmxlID0gbS1cdTAwM2VhcmdfZmxhZ3NbaV0gXHUwMDI2IEJURl9GTU9ERUxfTlVMTEFCTEVfQVJHO1xuK1xuIFx0XHRzbG90cyA9IChtLVx1MDAzZWFyZ19zaXplW2ldICsgNykgLyA4O1xuIFx0XHQvKiB2ZXJpZmllciBlbnN1cmVzIGFyZ19zaXplIFx1MDAzYz0gMTYsIHNvIHNsb3RzIGVxdWFscyAxIG9yIDIgKi9cbiBcdFx0d2hpbGUgKHNsb3RzLS0gXHUwMDNlIDApIHtcbkBAIC0yNTYxLDYgKzI2NTAsMTUgQEAgc3RhdGljIHZvaWQgc2F2ZV9hcmdzKHN0cnVjdCBqaXRfY3R4ICpjdHgsIGludCBiYXJnc19vZmYsIGludCBvYXJnc19vZmYsXG4gXHRcdFx0ICovXG4gXHRcdFx0aWYgKHNsb3RzID09IDAgXHUwMDI2XHUwMDI2ICFmb3JfY2FsbF9vcmlnaW4pXG4gXHRcdFx0XHRjbGVhcl9nYXJiYWdlKGN0eCwgdG1wLCBtLVx1MDAzZWFyZ19zaXplW2ldICUgOCk7XG4rXHRcdFx0LypcbitcdFx0XHQgKiBObyBndWFyZCBvbiBmb3JfY2FsbF9vcmlnaW4gaGVyZTogb25seSB0aGUgaW5kaXJlY3RcbitcdFx0XHQgKiB0cmFtcG9saW5lIGlzIGdpdmVuIGEgYmFzZSwgYW5kIGl0IG5ldmVyIGNhbGxzIHRoZVxuK1x0XHRcdCAqIG9yaWdpbmFsIGZ1bmN0aW9uLCBzbyBhcmd1bWVudHMgYXJlIG5ldmVyIGNvbnZlcnRlZFxuK1x0XHRcdCAqIG9uIHRoZWlyIHdheSBiYWNrIG91dCB0byBpdC4gU2VlIHRoZSBXQVJOX09OX09OQ0UoKVxuK1x0XHRcdCAqIGluIHByZXBhcmVfdHJhbXBvbGluZSgpLlxuK1x0XHRcdCAqL1xuK1x0XHRcdGlmIChhcmVuYV9hcmcpXG4rXHRcdFx0XHRlbWl0X2FyZW5hX2FyZ19jb252KGN0eCwgdG1wLCB0bXAsIG51bGxhYmxlLCBiYXNlX2xvKTtcbiBcdFx0XHRlbWl0KEE2NF9TVFI2NEkodG1wLCBBNjRfU1AsIGRvZmYpLCBjdHgpO1xuIFx0XHRcdHNvZmYgKz0gODtcbiBcdFx0XHRkb2ZmICs9IDg7XG5AQCAtMjYyMCw4ICsyNzE4LDIxIEBAIHN0YXRpYyBpbnQgcHJlcGFyZV90cmFtcG9saW5lKHN0cnVjdCBqaXRfY3R4ICpjdHgsIHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLFxuIFx0Ym9vbCBpc19zdHJ1Y3Rfb3BzID0gaXNfc3RydWN0X29wc190cmFtcChmZW50cnkpO1xuIFx0aW50IGNvb2tpZV9vZmYsIGNvb2tpZV9jbnQsIGNvb2tpZV9iYXJnc19vZmY7XG4gXHRpbnQgZnNlc3Npb25fY250ID0gYnBmX2ZzZXNzaW9uX2NudCh0bm9kZXMpO1xuK1x0dTY0IGFyZW5hX2Jhc2U7XG4gXHR1NjQgZnVuY19tZXRhO1xuIFxuK1x0LypcbitcdCAqIEZfSU5ESVJFQ1QgaXMgb25seSBjb21wYXRpYmxlIHdpdGggRl9SRVRfRkVOVFJZX1JFVCwgaXQgaXMgZXhwbGljaXRseVxuK1x0ICogaW5jb21wYXRpYmxlIHdpdGggRl9DQUxMX09SSUcgfCBGX1NLSVBfRlJBTUUgfCBGX0lQX0FSRyBiZWNhdXNlXG4rXHQgKiBAZnVuY19hZGRyLiBBcmVuYSBjb252ZXJzaW9uIHJlbGllcyBvbiB0aGlzOiBicGZfdHJhbXBfYXJlbmFfYmFzZSgpXG4rXHQgKiBvbmx5IHJldHVybnMgYSBiYXNlIGZvciB0aGUgaW5kaXJlY3QgdHJhbXBvbGluZSwgd2hpY2ggdGhlcmVmb3JlXG4rXHQgKiBuZXZlciBjYWxscyB0aGUgb3JpZ2luYWwgZnVuY3Rpb24gd2l0aCBjb252ZXJ0ZWQgYXJndW1lbnRzLlxuK1x0ICovXG4rXHRXQVJOX09OX09OQ0UoKGZsYWdzIFx1MDAyNiBCUEZfVFJBTVBfRl9JTkRJUkVDVCkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAgKGZsYWdzIFx1MDAyNiB+KEJQRl9UUkFNUF9GX0lORElSRUNUIHwgQlBGX1RSQU1QX0ZfUkVUX0ZFTlRSWV9SRVQpKSk7XG4rXG4rXHRhcmVuYV9iYXNlID0gYnBmX3RyYW1wX2FyZW5hX2Jhc2UobSwgdG5vZGVzLCBmbGFncyk7XG4rXG4gXHQvKiB0cmFtcG9saW5lIHN0YWNrIGxheW91dDpcbiBcdCAqICAgICAgICAgICAgICAgICAgICBbIHBhcmVudCBpcCAgICAgICAgIF1cbiBcdCAqICAgICAgICAgICAgICAgICAgICBbIEZQICAgICAgICAgICAgICAgIF1cbkBAIC0yNzM3LDcgKzI4NDgsNyBAQCBzdGF0aWMgaW50IHByZXBhcmVfdHJhbXBvbGluZShzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSxcbiBcdHN0b3JlX2Z1bmNfbWV0YShjdHgsIGZ1bmNfbWV0YSwgZnVuY19tZXRhX29mZik7XG4gXG4gXHQvKiBzYXZlIGFyZ3MgZm9yIGJwZiAqL1xuLVx0c2F2ZV9hcmdzKGN0eCwgYmFyZ3Nfb2ZmLCBvYXJnc19vZmYsIG0sIGEsIGZhbHNlKTtcbitcdHNhdmVfYXJncyhjdHgsIGJhcmdzX29mZiwgb2FyZ3Nfb2ZmLCBtLCBhLCBmYWxzZSwgaXNfc3RydWN0X29wcywgYXJlbmFfYmFzZSk7XG4gXG4gXHQvKiBzYXZlIGNhbGxlZSBzYXZlZCByZWdpc3RlcnMgKi9cbiBcdGVtaXQoQTY0X1NUUjY0SShBNjRfUigxOSksIEE2NF9TUCwgcmVnc19vZmYpLCBjdHgpO1xuQEAgLTI3ODUsOCArMjg5Niw4IEBAIHN0YXRpYyBpbnQgcHJlcGFyZV90cmFtcG9saW5lKHN0cnVjdCBqaXRfY3R4ICpjdHgsIHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLFxuIFx0fVxuIFxuIFx0aWYgKGZsYWdzIFx1MDAyNiBCUEZfVFJBTVBfRl9DQUxMX09SSUcpIHtcbi1cdFx0Lyogc2F2ZSBhcmdzIGZvciBvcmlnaW5hbCBmdW5jICovXG4tXHRcdHNhdmVfYXJncyhjdHgsIGJhcmdzX29mZiwgb2FyZ3Nfb2ZmLCBtLCBhLCB0cnVlKTtcbitcdFx0LyogdGhlIG9yaWdpbmFsIGZ1bmMgdGFrZXMga2VybmVsIGFkZHJlc3NlcywgbmV2ZXIgY29udmVydGVkIG9uZXMgKi9cbitcdFx0c2F2ZV9hcmdzKGN0eCwgYmFyZ3Nfb2ZmLCBvYXJnc19vZmYsIG0sIGEsIHRydWUsIGlzX3N0cnVjdF9vcHMsIDApO1xuIFx0XHQvKiBjYWxsIG9yaWdpbmFsIGZ1bmMgKi9cbiBcdFx0ZW1pdChBNjRfTERSNjRJKEE2NF9SKDEwKSwgQTY0X1NQLCByZXRhZGRyX29mZiksIGN0eCk7XG4gXHRcdGVtaXQoQTY0X0FEUihBNjRfTFIsIEFBUkNINjRfSU5TTl9TSVpFICogMiksIGN0eCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9zdHJ1Y3Rfb3BzX2FyZW5hLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3N0cnVjdF9vcHNfYXJlbmEuY1xuaW5kZXggOTQwZWMyY2RhMGQ1Mi4uN2Y5ZjU0YmEzZmJlNSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3Rfc3RydWN0X29wc19hcmVuYS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3N0cnVjdF9vcHNfYXJlbmEuY1xuQEAgLTYsNyArNiw3IEBAXG4gI2luY2x1ZGUgXCJzdHJ1Y3Rfb3BzX2FyZW5hX2F0dGFjaC5za2VsLmhcIlxuICNpbmNsdWRlIFwic3RydWN0X29wc19hcmVuYV9mYWlsLnNrZWwuaFwiXG4gXG4tI2lmIGRlZmluZWQoX194ODZfNjRfXylcbisjaWYgZGVmaW5lZChfX3g4Nl82NF9fKSB8fCBkZWZpbmVkKF9fYWFyY2g2NF9fKVxuIC8qXG4gICogQXR0YWNoIGNhbGxiYWNrcyB3aXRoIF9fYXJlbmEgYW5kIF9fYXJlbmFfX251bGxhYmxlIGFyZ3VtZW50cyBhbmQgZHJpdmVcbiAgKiB0aGVtIHRocm91Z2ggdGhlIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hKigpIGtmdW5jcy5cbkBAIC0xMTEsMTEgKzExMSwxMSBAQCBzdGF0aWMgdm9pZCBhcmVuYV9hcmdfYXR0YWNoKHZvaWQpXG4gdm9pZCBzZXJpYWxfdGVzdF9zdHJ1Y3Rfb3BzX2FyZW5hKHZvaWQpXG4ge1xuIFx0Lypcbi1cdCAqIEFyZW5hIHN0cnVjdF9vcHMgYXJndW1lbnRzIG5lZWQgSklUIHN1cHBvcnQsIGN1cnJlbnRseSB4ODYtNjQgb25seS5cbi1cdCAqIEVsc2V3aGVyZSB2ZXJpZmljYXRpb24gZmFpbHMgd2l0aCBcIkpJVCBkb2VzIG5vdCBzdXBwb3J0IGFyZW5hXG4tXHQgKiBhcmd1bWVudHNcIiwgc28gdGhlIHByb2dyYW1zIGNhbm5vdCBldmVuIGxvYWQuXG4rXHQgKiBBcmVuYSBzdHJ1Y3Rfb3BzIGFyZ3VtZW50cyBuZWVkIEpJVCBzdXBwb3J0LCBjdXJyZW50bHkgeDg2LTY0IGFuZFxuK1x0ICogYXJtNjQgb25seS4gRWxzZXdoZXJlIHZlcmlmaWNhdGlvbiBmYWlscyB3aXRoIFwiSklUIGRvZXMgbm90IHN1cHBvcnRcbitcdCAqIGFyZW5hIGFyZ3VtZW50c1wiLCBzbyB0aGUgcHJvZ3JhbXMgY2Fubm90IGV2ZW4gbG9hZC5cbiBcdCAqL1xuLSNpZiBkZWZpbmVkKF9feDg2XzY0X18pXG4rI2lmIGRlZmluZWQoX194ODZfNjRfXykgfHwgZGVmaW5lZChfX2FhcmNoNjRfXylcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwiYXJlbmFfYXJnXCIpKVxuIFx0XHRhcmVuYV9hcmcoKTtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwiYXJlbmFfYXJnX2ZhaWxcIikpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmMuY1xuaW5kZXggY2RjZWE4ODlkYTU4Ni4uYmYwZDMwNGUwZTU5YyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuYy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmMuY1xuQEAgLTI3LDYgKzI3LDcgQEAgdm9sYXRpbGUgdTY0IHN0YXNoO1xuIFxuIFNFQyhcInN5c2NhbGxcIilcbiBfX2FyY2hfeDg2XzY0XG4rX19hcmNoX2FybTY0XG4gX19zdWNjZXNzIF9fcmV0dmFsKDApXG4gaW50IGFyZW5hX2FyZ19mb3Jtcyh2b2lkICpjdHgpXG4ge1xuQEAgLTcwLDYgKzcxLDcgQEAgaW50IGFyZW5hX2FyZ19mb3Jtcyh2b2lkICpjdHgpXG4gICovXG4gU0VDKFwic3lzY2FsbFwiKVxuIF9fYXJjaF94ODZfNjRcbitfX2FyY2hfYXJtNjRcbiBfX3N1Y2Nlc3MgX19yZXR2YWwoMClcbiBpbnQgYXJlbmFfYXJnX3JlYmFzZSh2b2lkICpjdHgpXG4ge1xuQEAgLTExMSw2ICsxMTMsNyBAQCBpbnQgYXJlbmFfYXJnX3JlYmFzZSh2b2lkICpjdHgpXG4gXG4gU0VDKFwic3lzY2FsbFwiKVxuIF9fYXJjaF94ODZfNjRcbitfX2FyY2hfYXJtNjRcbiBfX3N1Y2Nlc3MgX19yZXR2YWwoMClcbiBpbnQgYXJlbmFfYXJnczUodm9pZCAqY3R4KVxuIHtcbkBAIC0xNDIsNiArMTQ1LDcgQEAgaW50IGFyZW5hX2FyZ3M1KHZvaWQgKmN0eClcbiBcbiBTRUMoXCJzeXNjYWxsXCIpXG4gX19hcmNoX3g4Nl82NFxuK19fYXJjaF9hcm02NFxuIF9fc3VjY2VzcyBfX3JldHZhbCgwKVxuIGludCBhcmVuYV9hcmdfbWl4ZWQodm9pZCAqY3R4KVxuIHtcbkBAIC0xNjksNiArMTczLDcgQEAgaW50IGFyZW5hX2FyZ19taXhlZCh2b2lkICpjdHgpXG4gLyoga2VybmVsLXNpZGUgZmF1bHRzIG9uIHVucG9wdWxhdGVkIHBhZ2VzIHJlY292ZXIgdmlhIHRoZSBzY3JhdGNoIHBhZ2UgKi9cbiBTRUMoXCJzeXNjYWxsXCIpXG4gX19hcmNoX3g4Nl82NFxuK19fYXJjaF9hcm02NFxuIF9fc3VjY2VzcyBfX3JldHZhbCgwKVxuIGludCBhcmVuYV9hcmdfdW5wb3B1bGF0ZWQodm9pZCAqY3R4KVxuIHtcbkBAIC0xODksNiArMTk0LDcgQEAgaW50IGFyZW5hX2FyZ191bnBvcHVsYXRlZCh2b2lkICpjdHgpXG4gXG4gU0VDKFwic3lzY2FsbFwiKVxuIF9fYXJjaF94ODZfNjRcbitfX2FyY2hfYXJtNjRcbiBfX2ZhaWx1cmUgX19tc2coXCJhcmVuYSBwb2ludGVyIHJlcXVpcmVzIGEgcHJvZ3JhbSB3aXRoIGFuIGFzc29jaWF0ZWQgYXJlbmFcIilcbiBpbnQgYXJlbmFfYXJnX25vX2FyZW5hKHZvaWQgKmN0eClcbiB7XG5AQCAtMTk4LDYgKzIwNCw3IEBAIGludCBhcmVuYV9hcmdfbm9fYXJlbmEodm9pZCAqY3R4KVxuIFxuIFNFQyhcInN5c2NhbGxcIilcbiBfX2FyY2hfeDg2XzY0XG4rX19hcmNoX2FybTY0XG4gX19mYWlsdXJlIF9fbXNnKFwiaXMgbm90IGEgcG9pbnRlciB0byBhcmVuYSBvciBzY2FsYXJcIilcbiBpbnQgYXJlbmFfYXJnX2JhZF9yZWcodm9pZCAqY3R4KVxuIHtcbkBAIC0yMTMsNiArMjIwLDcgQEAgaW50IGFyZW5hX2FyZ19iYWRfcmVnKHZvaWQgKmN0eClcbiBcdGRlZmluZWQoX19CUEZfRkVBVFVSRV9TVEFDS19BUkdVTUVOVClcbiBTRUMoXCJzeXNjYWxsXCIpXG4gX19hcmNoX3g4Nl82NFxuK19fYXJjaF9hcm02NFxuIF9fZmFpbHVyZSBfX21zZyhcImFyZW5hIHBvaW50ZXIgY2Fubm90IGJlIGEgc3RhY2sgYXJndW1lbnRcIilcbiBpbnQgYXJlbmFfYXJnX3N0YWNrKHZvaWQgKmN0eClcbiB7XG5AQCAtMjIzLDYgKzIzMSw3IEBAIGludCBhcmVuYV9hcmdfc3RhY2sodm9pZCAqY3R4KVxuICNlbHNlXG4gU0VDKFwic3lzY2FsbFwiKVxuIF9fYXJjaF94ODZfNjRcbitfX2FyY2hfYXJtNjRcbiBfX2Rlc2NyaXB0aW9uKFwiYXJlbmFfYXJnX3N0YWNrOiBub3Qgc3VwcG9ydGVkLCBkdW1teSB0ZXN0XCIpXG4gX19zdWNjZXNzXG4gaW50IGFyZW5hX2FyZ19zdGFjayh2b2lkICpjdHgpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jX2ppdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jX2ppdC5jXG5pbmRleCBjOWI5MTg2NjI2MTYyLi5iNWEwMWNiYzMzYTczIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jX2ppdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmNfaml0LmNcbkBAIC0zMiw2ICszMiwxMCBAQCBfX2ppdGVkKFwiXHRtb3ZsXHQlZWRpLCAlZWRpXCIpXG4gX19qaXRlZChcIlx0YWRkcVx0JXIxMiwgJXJkaVwiKVxuIF9faml0ZWQoXCIuLi5cIilcbiBfX2ppdGVkKFwiXHRjYWxscVx0e3suKn19XCIpXG4rX19hcmNoX2FybTY0XG4rX19qaXRlZChcIi4uLlwiKVxuK19faml0ZWQoXCJcdGFkZFx0eDAsIHgyOCwgdzAsIHV4dHdcIilcbitfX2ppdGVkKFwiXHR7eyhibHxtb3YpXHQuKn19XCIpXG4gX19zdWNjZXNzXG4gaW50IGFyZW5hX2FyZ19qaXRfcmViYXNlKHZvaWQgKmN0eClcbiB7XG5AQCAtNDgsNiArNTIsMTIgQEAgX19qaXRlZChcIlx0dGVzdGxcdCVlZGksICVlZGlcIilcbiBfX2ppdGVkKFwiXHRqZVx0TDBcIilcbiBfX2ppdGVkKFwiXHRhZGRxXHQlcjEyLCAlcmRpXCIpXG4gX19qaXRlZChcIkwwOlx0Y2FsbHFcdHt7Lip9fVwiKVxuK19fYXJjaF9hcm02NFxuK19faml0ZWQoXCIuLi5cIilcbitfX2ppdGVkKFwiXHRtb3ZcdHcwLCB3MFwiKVxuK19faml0ZWQoXCJcdGNielx0dzAsIEwwXCIpXG4rX19qaXRlZChcIlx0YWRkXHR4MCwgeDI4LCB3MCwgdXh0d1wiKVxuK19faml0ZWQoXCJMMDpcdHt7Lip9fVwiKVxuIF9fc3VjY2Vzc1xuIGludCBhcmVuYV9hcmdfaml0X251bGxhYmxlKHZvaWQgKmN0eClcbiB7XG5AQCAtNzIsNiArODIsMTYgQEAgX19qaXRlZChcIlx0dGVzdGxcdCVyOGQsICVyOGRcIilcbiBfX2ppdGVkKFwiXHRqZVx0TDBcIilcbiBfX2ppdGVkKFwiXHRhZGRxXHQlcjEyLCAlcjhcIilcbiBfX2ppdGVkKFwiTDA6XHRjYWxscVx0e3suKn19XCIpXG4rX19hcmNoX2FybTY0XG4rX19qaXRlZChcIi4uLlwiKVxuK19faml0ZWQoXCJcdGFkZFx0eDAsIHgyOCwgdzAsIHV4dHdcIilcbitfX2ppdGVkKFwiXHRhZGRcdHgxLCB4MjgsIHcxLCB1eHR3XCIpXG4rX19qaXRlZChcIlx0YWRkXHR4MiwgeDI4LCB3MiwgdXh0d1wiKVxuK19faml0ZWQoXCJcdGFkZFx0eDMsIHgyOCwgdzMsIHV4dHdcIilcbitfX2ppdGVkKFwiXHRtb3ZcdHc0LCB3NFwiKVxuK19faml0ZWQoXCJcdGNielx0dzQsIEwwXCIpXG4rX19qaXRlZChcIlx0YWRkXHR4NCwgeDI4LCB3NCwgdXh0d1wiKVxuK19faml0ZWQoXCJMMDpcdHt7Lip9fVwiKVxuIF9fc3VjY2Vzc1xuIGludCBhcmVuYV9hcmdfaml0X2FyZ3M1KHZvaWQgKmN0eClcbiB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfYXJlbmEuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJ1Y3Rfb3BzX2FyZW5hLmNcbmluZGV4IGJhMDRjNzNkOGQ5NjcuLjhhYTg2MzlkZjkxZjAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RydWN0X29wc19hcmVuYS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RydWN0X29wc19hcmVuYS5jXG5AQCAtNTksMTEgKzU5LDI4IEBAIGludCB0ZXN0X2FyZW5hX3N0YWNrX2NiKHVuc2lnbmVkIGxvbmcgbG9uZyAqY3R4KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK1NFQyhcInN0cnVjdF9vcHMvdGVzdF9hcmVuYV9tdWx0aXNsb3RcIilcbitpbnQgdGVzdF9hcmVuYV9tdWx0aXNsb3RfY2IodW5zaWduZWQgbG9uZyBsb25nICpjdHgpXG4re1xuK1x0dTY0IF9fYXJlbmEgKnB0ciA9ICh1NjQgX19hcmVuYSAqKWN0eFsyXTtcbitcbitcdGFyZW5hX3RvdWNoKys7XG4rXHQvKlxuK1x0ICogVGhlIDE2LWJ5dGUgc3RydWN0IG9jY3VwaWVzIGN0eFswXSBhbmQgY3R4WzFdLCBzbyBAcHRyIGlzIGFyZ3VtZW50XG4rXHQgKiBvbmUgYnV0IHNsb3QgdHdvLiBHZXR0aW5nIHRoYXQgd3JvbmcgaGFuZHMgdGhlIGNhbGxiYWNrIGEgc2NhbGFyLlxuK1x0ICovXG4rXHRpZiAoY3R4WzBdICE9IDExIHx8IGN0eFsxXSAhPSAyMilcbitcdFx0cmV0dXJuIDB4YmFkO1xuK1x0KnB0ciArPSAxO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIFNFQyhcIi5zdHJ1Y3Rfb3BzLmxpbmtcIilcbiBzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzMyB0ZXN0bW9kX2FyZW5hID0ge1xuIFx0LnRlc3RfYXJlbmEgPSAodm9pZCAqKXRlc3RfYXJlbmFfY2IsXG4gXHQudGVzdF9hcmVuYV9udWxsYWJsZSA9ICh2b2lkICopdGVzdF9hcmVuYV9udWxsYWJsZV9jYixcbiBcdC50ZXN0X2FyZW5hX3N0YWNrID0gKHZvaWQgKil0ZXN0X2FyZW5hX3N0YWNrX2NiLFxuK1x0LnRlc3RfYXJlbmFfbXVsdGlzbG90ID0gKHZvaWQgKil0ZXN0X2FyZW5hX211bHRpc2xvdF9jYixcbiB9O1xuIFxuIFNFQyhcInN5c2NhbGxcIilcbkBAIC0xMDksNiArMTI2LDEzIEBAIGludCB0cmlnZ2VyKHZvaWQgKmN0eClcbiBcdGlmICgqdmFsICE9IDQ0KVxuIFx0XHRyZXR1cm4gOTtcbiBcbitcdC8qIGEgbXVsdGktc2xvdCBhcmcgcHJlY2VkZXMgdGhlIGFyZW5hIHBvaW50ZXIgaGVyZSAqL1xuK1x0cmV0ID0gYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfbXVsdGlzbG90KCh1NjQgKil2YWwpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIDEwO1xuK1x0aWYgKCp2YWwgIT0gNDUpXG4rXHRcdHJldHVybiAxMTtcbitcbiBcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFx1MDAyNmFyZW5hLCAodm9pZCBfX2FyZW5hICopdmFsLCAxKTtcbiAjZW5kaWZcbiBcdHJldHVybiAwO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jXG5pbmRleCBhNjEzM2Y3NTIxZjM0Li45MzY2YTNjNTc4ZjEzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuY1xuQEAgLTQwMiwxMiArNDAyLDE5IEBAIHN0YXRpYyBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19fdGVzdF9hcmVuYV9zdGFjayh1NjQgYSwgdTY0IGIsIHU2NCBjLCB1NjQgZCxcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgaW50IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmFfbXVsdGlzbG90KHN0cnVjdCBicGZfdGVzdG1vZF9hcmVuYV9wYWlyIHAsXG4rXHRcdFx0XHRcdFx0ICB1NjQgKnB0cl9fYXJlbmEpXG4re1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyBzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzMyBfX2JwZl90ZXN0bW9kX29wczMgPSB7XG4gXHQudGVzdF8xID0gYnBmX3Rlc3Rtb2RfdGVzdF8zLFxuIFx0LnRlc3RfMiA9IGJwZl90ZXN0bW9kX3Rlc3RfNCxcbiBcdC50ZXN0X2FyZW5hID0gYnBmX3Rlc3Rtb2Rfb3BzM19fdGVzdF9hcmVuYSxcbiBcdC50ZXN0X2FyZW5hX251bGxhYmxlID0gYnBmX3Rlc3Rtb2Rfb3BzM19fdGVzdF9hcmVuYV9udWxsYWJsZSxcbiBcdC50ZXN0X2FyZW5hX3N0YWNrID0gYnBmX3Rlc3Rtb2Rfb3BzM19fdGVzdF9hcmVuYV9zdGFjayxcbitcdC50ZXN0X2FyZW5hX211bHRpc2xvdCA9IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmFfbXVsdGlzbG90LFxuIH07XG4gXG4gc3RhdGljIHZvaWQgYnBmX3Rlc3Rtb2RfdGVzdF9zdHJ1Y3Rfb3BzMyh2b2lkKVxuQEAgLTQ0MSw2ICs0NDgsMTMgQEAgX19icGZfa2Z1bmMgaW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX3N0YWNrKHU2NCAqcHRyX19hcmVuYSlcbiBcdHJldHVybiBzdF9vcHMzLVx1MDAzZXRlc3RfYXJlbmFfc3RhY2soMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgcHRyX19hcmVuYSk7XG4gfVxuIFxuK19fYnBmX2tmdW5jIGludCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9tdWx0aXNsb3QodTY0ICpwdHJfX2FyZW5hKVxuK3tcbitcdHN0cnVjdCBicGZfdGVzdG1vZF9hcmVuYV9wYWlyIHAgPSB7IC5hID0gMTEsIC5iID0gMjIgfTtcbitcbitcdHJldHVybiBzdF9vcHMzLVx1MDAzZXRlc3RfYXJlbmFfbXVsdGlzbG90KHAsIHB0cl9fYXJlbmEpO1xuK31cbitcbiBzdHJ1Y3QgYnBmX3Rlc3Rtb2RfYnRmX3R5cGVfdGFnXzEge1xuIFx0aW50IGE7XG4gfTtcbkBAIC04NTIsNiArODY2LDcgQEAgQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0XzIpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9udWxsYWJsZSlcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfc3RhY2spXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX211bHRpc2xvdClcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2dldF9kZWZhdWx0X3RydXN0ZWRfcHRyX3Rlc3QpO1xuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfcHV0X2RlZmF1bHRfdHJ1c3RlZF9wdHJfdGVzdCk7XG4gQlRGX0tGVU5DU19FTkQoYnBmX3Rlc3Rtb2RfY29tbW9uX2tmdW5jX2lkcylcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuaFxuaW5kZXggMzNmMmFmNWI3MDg1Ny4uMjEwYjkxOTI5MGNjMiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmhcbkBAIC0xMDMsNiArMTAzLDEyIEBAIHN0cnVjdCBicGZfdGVzdG1vZF9vcHMyIHtcbiBcdGludCAoKnRlc3RfMSkodm9pZCk7XG4gfTtcbiBcbisvKiAxNiBieXRlcywgc28gaXQgdGFrZXMgdHdvIGFyZ3VtZW50IHNsb3RzIHdoZW4gcGFzc2VkIGJ5IHZhbHVlICovXG4rc3RydWN0IGJwZl90ZXN0bW9kX2FyZW5hX3BhaXIge1xuK1x0dTY0IGE7XG4rXHR1NjQgYjtcbit9O1xuK1xuIHN0cnVjdCBicGZfdGVzdG1vZF9vcHMzIHtcbiBcdGludCAoKnRlc3RfMSkodm9pZCk7XG4gXHRpbnQgKCp0ZXN0XzIpKHZvaWQpO1xuQEAgLTExMiw2ICsxMTgsOCBAQCBzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzMyB7XG4gXHQvKiBlbm91Z2ggbGVhZGluZyBhcmdzIHRvIGZvcmNlIEBwdHIgb250byB0aGUgc3RhY2sgb24geDg2IGFuZCBhcm02NCAqL1xuIFx0aW50ICgqdGVzdF9hcmVuYV9zdGFjaykodTY0IGEsIHU2NCBiLCB1NjQgYywgdTY0IGQsIHU2NCBlLCB1NjQgZixcbiBcdFx0XHRcdHU2NCBnLCB1NjQgaCwgdTY0ICpwdHIpO1xuK1x0LyogYSBtdWx0aS1zbG90IGxlYWRpbmcgYXJnLCBzbyBAcHRyIGlzIG5vdCBhdCB0aGUgc2xvdCBpdHMgYXJnIGluZGV4IHN1Z2dlc3RzICovXG4rXHRpbnQgKCp0ZXN0X2FyZW5hX211bHRpc2xvdCkoc3RydWN0IGJwZl90ZXN0bW9kX2FyZW5hX3BhaXIgcCwgdTY0ICpwdHIpO1xuIH07XG4gXG4gc3RydWN0IHN0X29wc19hcmdzIHtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaFxuaW5kZXggYzQzODNhY2I1M2MxMS4uN2Q4MTA3MGVlZmU3ZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kX2tmdW5jLmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kX2tmdW5jLmhcbkBAIC0xMjMsNiArMTIzLDcgQEAgdm9pZCBicGZfdGVzdG1vZF90ZXN0X21vZF9rZnVuYyhpbnQgaSkgX19rc3ltO1xuIGludCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYShfX3U2NCAqcHRyX19hcmVuYSkgX19rc3ltO1xuIGludCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9udWxsYWJsZShfX3U2NCAqcHRyX19hcmVuYV9fbnVsbGFibGUpIF9fa3N5bTtcbiBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfc3RhY2soX191NjQgKnB0cl9fYXJlbmEpIF9fa3N5bTtcbitpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfbXVsdGlzbG90KF9fdTY0ICpwdHJfX2FyZW5hKSBfX2tzeW07XG4gXG4gX191NjQgYnBmX2tmdW5jX2NhbGxfdGVzdDEoc3RydWN0IHNvY2sgKnNrLCBfX3UzMiBhLCBfX3U2NCBiLFxuIFx0XHRcdFx0X191MzIgYywgX191NjQgZCkgX19rc3ltO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6NTA6MTMuNjgyNjk3MDM3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTE4NTIxMTYyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGFybTY0IEJQRiBKSVQgQXJlbmEgQXJndW1lbnQgU3VwcG9ydCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggaW50cm9kdWNpbmcgQlBGIGFyZW5hIGFyZ3VtZW50IHN1cHBvcnQgZm9yIHRoZSBhcm02NCBKSVQgY29tcGlsZXIuIFRoZSBjaGFuZ2VzIGFyZSBmb2N1c2VkIGluIGBhcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY2AgYW5kIGBhcmNoL2FybTY0L2xpYi9pbnNuLmNgLCB3aXRoIHNvbWUgdGVzdCB1cGRhdGVzIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhpcyBpcyBhIGNvcmUgZnVuY3Rpb25hbCBjaGFuZ2UsIGRlZmluaXRlbHkgcmVxdWlyaW5nIHRob3JvdWdoIGZ1enppbmcgYW5kIHRlc3RpbmcuXG5cbkZpcnN0LCBsZXQncyB6ZXJvIGluIG9uIGBhcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY2AuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYGVtaXRfa2Z1bmNfYXJlbmFfYXJnc2AsIGBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NgLCBhbmQgYGVtaXRfYXJlbmFfYXJnX2NvbnZgIGFsb25nIHdpdGggbW9kaWZpY2F0aW9ucyB0byBgc2F2ZV9hcmdzYCBhbmQgYHByZXBhcmVfdHJhbXBvbGluZWAgcG9pbnQgZGlyZWN0bHkgdG8gdGhlIG5ldyBhcmVuYSBhcmd1bWVudCBoYW5kbGluZy4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyBsaXZlcy5cblxuTm93LCBsZXQncyBpZGVudGlmeSB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IHByZWNpc2VseS4gV2UgaGF2ZSBgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZ2AgaW4gYGFyY2gvYXJtNjQvbGliL2luc24uY2AgaW52b2x2ZWQsIHdoaWNoIGlzIHJlbGV2YW50IHNpbmNlIGl0IGhhbmRsZXMgaW5zdHJ1Y3Rpb24gZ2VuZXJhdGlvbiwgYW5kIGluIGBhcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY2AsIHdlIGhhdmUgYGVtaXRfa2Z1bmNfYXJlbmFfYXJnc2AsIGBidWlsZF9pbnNuYCwgYGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJnc2AsIGBlbWl0X2FyZW5hX2FyZ19jb252YCwgYHNhdmVfYXJnc2AsIGFuZCBgcHJlcGFyZV90cmFtcG9saW5lYC5cblxuV2FpdCwgbGV0IG1lIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcuIGBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NgIGlzIGV4cG9ydGVkLCBtZWFuaW5nIGl0J3MgcG90ZW50aWFsbHkgdXNlZCBlbHNld2hlcmUuIFNpbWlsYXJseSwgYGFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9leHRlbmRlZF9yZWdgIGlzIG5vbi1zdGF0aWMgc28gaXQncyBsaWtlbHkgdXNlZCBieSBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsIGFzIHdlbGwuIFdoaWxlIHRoZSBtYWluIGVudHJ5IHBvaW50IGBicGZfaW50X2ppdF9jb21waWxlYCBpc24ndCBkaXJlY3RseSBtb2RpZmllZCwgSSBzZWUgdGhhdCBgYnVpbGRfaW5zbmAsIHdoaWNoIGlzIGNhbGxlZCB3aXRoaW4gYGJwZl9pbnRfaml0X2NvbXBpbGVgLCBpcyBtb2RpZmllZC4gSSBzaG91bGQgcHJvYmFibHkgcGF5IGF0dGVudGlvbiB0byB0aGUgY2FsbCBzdGFjayB0aGVyZS4gQWxzbywgc2luY2UgYHByZXBhcmVfdHJhbXBvbGluZWAgaXMgcGFydCBvZiB0aGUgY2hhbmdlLCBhbmQgSSBzZWUgYGJwZl90cmFtcG9saW5lX3VwZGF0ZWAgb3Igc2ltaWxhciBjYWxscyB0aGlzIHRocm91Z2ggYGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAsIEkgc2hvdWxkIGNoZWNrIGBhcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY2AgZm9yIGBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgLiBUaGF0IGZ1bmN0aW9uIGlzIHByb2JhYmx5IGltcG9ydGFudCwgYXMgdGhlIHRyYW1wb2xpbmUgaXMgaG93IHdlIGFjdHVhbGx5ICp1c2UqIHRoZSBjb21waWxlZCBCUEYuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNDA3LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTg5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6NTA6MjIuODY3OTEyMDQxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NzExMDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYz0yNjc5PXN0YXRpYyB2b2lkIHN0b3JlX2Z1bmNfbWV0YShzdHJ1Y3Qgaml0X2N0eCAqY3R4LCB1NjQgZnVuY19tZXRhLCBpbnQgZnVuY19tZXRhX29mZilcXG4tLVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTI2ODQtXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM6MjY4NTovKiBCYXNlZCBvbiB0aGUgeDg2J3MgaW1wbGVtZW50YXRpb24gb2YgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKCkuXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMjY4Ni0gKlxcbi0tXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM9MzAyMD1pbnQgYXJjaF9wcm90ZWN0X2JwZl90cmFtcG9saW5lKHZvaWQgKmltYWdlLCB1bnNpZ25lZCBpbnQgc2l6ZSlcXG4tLVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTMwMjQtXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM6MzAyNTppbnQgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICpyb19pbWFnZSxcXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0zMDI2LVxcdFxcdFxcdFxcdHZvaWQgKnJvX2ltYWdlX2VuZCwgY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDo1MDoyMi45MTU2MjgxMzlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzM2NTk1ODI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBCUEYgQ29tcGlsYXRpb24gRW50cnkgUG9pbnRzKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgQlBGIHRyYW1wb2xpbmUgYW5kIEpJVCBjb21waWxhdGlvbiBzZXR1cC4gRnJvbSB3aGF0IEknbSBzZWVpbmcsIGBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgIGlzIHRoZSBrZXkgZW50cnkgcG9pbnQgZm9yIGhhbmRsaW5nIHRyYW1wb2xpbmVzLCB3aGljaCBtYWtlcyBzZW5zZS4gVGhlbiwgZm9yIHRoZSBhY3R1YWwgSklUIGNvbXBpbGF0aW9uIHByb2Nlc3MsIGBicGZfaW50X2ppdF9jb21waWxlYCBzZWVtcyB0byBiZSB0aGUgbWFpbiBzdGFydGluZyBwb2ludC4gTm93LCBJIHdhbnQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGFuZCBtYWtlIHN1cmUgdGhhdCBgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZ2AgaXMgYWN0dWFsbHkgZXhwb3J0ZWQgYW5kIGFjY2Vzc2libGUuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBpdCdzIGNvcnJlY3RseSBleHBvc2VkIHdpdGhpbiB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGluc3RydWN0aW9uIGdlbmVyYXRpb24gY29tcG9uZW50cy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBidWlsZGluZyBibG9ja3MgYXJlIGFsbCBhdmFpbGFibGUgdG8gdGhlIG1haW4gcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM5NDIsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDo1MDoyNy4yNTIyMjYzNjRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA1MDk4MTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9leHRlbmRlZF9yZWdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9hcm02NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9pbnNuLmg9NjUwPXUzMiBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfc2hpZnRlZF9yZWcoZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgZHN0LFxcbi0tXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9pbnNuLmgtNjU1LVxcdFxcdFxcdFxcdFxcdCBlbnVtIGFhcmNoNjRfaW5zbl9hZHNiX3R5cGUgdHlwZSk7XFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9pbnNuLmg6NjU2OnUzMiBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnKGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIGRzdCxcXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2luc24uaC02NTctXFx0XFx0XFx0XFx0XFx0ICBlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBzcmMsXFxuLS1cXG5hcmNoL2FybTY0L2xpYi9pbnNuLmM9OTMxPXUzMiBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfc2hpZnRlZF9yZWcoZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgZHN0LFxcbi0tXFxuYXJjaC9hcm02NC9saWIvaW5zbi5jLTk5My0gKi9cXG5hcmNoL2FybTY0L2xpYi9pbnNuLmM6OTk0OnUzMiBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnKGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIGRzdCxcXG5hcmNoL2FybTY0L2xpYi9pbnNuLmMtOTk1LVxcdFxcdFxcdFxcdFxcdCAgZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgc3JjLFxcbi0tXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdC5oLTI0Ny0jZGVmaW5lIEE2NF9BRERTVUJfRVJFRyhzZiwgUmQsIFJuLCBSbSwgZXh0LCBzaGlmdCwgdHlwZSkgXFxcXFxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXQuaDoyNDg6XFx0YWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZyhSZCwgUm4sIFJtLCBcXFxcXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdC5oLTI0OS1cXHRcXHRBQVJDSDY0X0lOU05fRVhURU5EXyMjZXh0LCBzaGlmdCwgQTY0X1ZBUklBTlQoc2YpLCBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjUwOjI3LjM1NzMyOTI4MVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0MTk4NjAwNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzIGZyb20gYSBmaXJzdC1wZXJzb24sIGV4cGVydCBwZXJzcGVjdGl2ZSwgc3RhcnRpbmcgd2l0aCBhICoqYm9sZGVkIGhlYWRlcioqOlxuXG4qKkNoZWNraW5nIFN5bWJvbCBFeHBvcnQgaW4gQUFyY2g2NCBJbnN0cnVjdGlvbiBHZW5lcmF0aW9uKipcblxuQWxyaWdodCwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4gSSdtIHRha2luZyBhIGxvb2sgYXQgdGhpcyBgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZ2AgZnVuY3Rpb24uIE5vdywgSSBuZWVkIHRvIGtub3cgaWYgaXQncyBhY3R1YWxseSB1c2FibGUgYnkgb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSwgb3IgaWYgaXQncyBhbiBpbnRlcm5hbCBoZWxwZXIuIFRoZSBrZXkgcXVlc3Rpb24gaW4gbXkgbWluZCByaWdodCBub3cgaXMgd2hldGhlciBvciBub3QgaXQncyBiZWVuIGV4cGxpY2l0bHkgKipleHBvcnRlZCB1c2luZyBgRVhQT1JUX1NZTUJPTGAqKi4gVGhhdCdzIHRoZSBjcnVjaWFsIGRldGFpbC4gV2l0aG91dCB0aGF0LCBpdOKAmXMgZ29pbmcgdG8gYmUgY29uZmluZWQgdG8gaXRzIGN1cnJlbnQgY29tcGlsYXRpb24gdW5pdCwgd2hpY2ggbWlnaHQgY2F1c2UgbWUgcHJvYmxlbXMgaWYgSSB0cnkgdG8gdXNlIGl0IGVsc2V3aGVyZS4gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHRoaXMgdG8gdW5kZXJzdGFuZCBob3cgd2lkZWx5IGF2YWlsYWJsZSB0aGlzIGZ1bmN0aW9uIGlzIHdpdGhpbiB0aGUgbGFyZ2VyIGFyY2hpdGVjdHVyZS4gVGhlIGFuc3dlciB3aWxsIHNpZ25pZmljYW50bHkgaW1wYWN0IHRoZSBuZXh0IHN0ZXBzIEkgdGFrZSBpbiB3aGF0ZXZlciBJIGFtIHRyeWluZyB0byBhY2hpZXZlLiBJcyBpdCBpbnRlcm5hbCwgb3IgYnJvYWRseSBhY2Nlc3NpYmxlPyBHb3R0YSBrbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDcwMiwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjUwOjMxLjc3NzE5MzIxMloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDA2MTMyOCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL2FybTY0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6NTA6MzEuODcxMjYzMzFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDEwMDkwODIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk5hdmlnYXRpbmcgdGhlIEFyZW5hIEFyZ3VtZW50IExhbmRzY2FwZSoqXG5cbkhtbSwgbm8sIHRoaXMgaXNuJ3QgYXMgc3RyYWlnaHRmb3J3YXJkIGFzIGEgc2ltcGxlIFwieWVzXCIgb3IgXCJub1wiIHN0YXRpYyBmbGFnIHdvdWxkIGltcGx5LiBUaGUgc2l0dWF0aW9uJ3MgbW9yZSBudWFuY2VkIHRoYW4gdGhhdC4gVGhlIGJlaGF2aW9yIHNlZW1zIGR5bmFtaWMsIHdoaWNoIG1lYW5zIEkgbmVlZCB0byBkaWcgZGVlcGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGV0aGVyIHRoaXMgcGxhdGZvcm0gc3VwcG9ydHMgYXJlbmEgYXJndW1lbnRzLCBidXQgaXQncyBub3QgYSBnaXZlbi4gVGhlIGNydWNpYWwgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NgIGZ1bmN0aW9uLiBUaGF0IGZ1bmN0aW9uIHdpbGwgbGlrZWx5IHNoZWQgbGlnaHQgb24gdGhlIHJ1bnRpbWUgY2FwYWJpbGl0aWVzIGFuZCBkZWNpZGUgd2hlcmUgdG8gZ28gZnJvbSBoZXJlLiBJdCdzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBpZiBteSBleHBlY3RhdGlvbnMgYXJlIGdvaW5nIHRvIGJlIG1ldCwgb3IgaWYgSSBuZWVkIHRvIHRha2UgYSBkaWZmZXJlbnQgYXBwcm9hY2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MDA4LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6NTA6MzUuODgxMzU3NzczWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjE2ODI3MDEzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJnc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM9MjM5MT1ib29sIGJwZl9qaXRfc3VwcG9ydHNfc3RhY2tfYXJncyh2b2lkKVxcbi0tXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMjM5NS1cXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYzoyMzk2OmJvb2wgYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzKHZvaWQpXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMjM5Ny17XFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9NDE1OT1ib29sIGJwZl9qaXRfc3VwcG9ydHNfc3RhY2tfYXJncyh2b2lkKVxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTQxNjMtXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjQxNjQ6Ym9vbCBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3Modm9pZClcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtNDE2NS17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oPTEyNDA9Ym9vbCBicGZfaml0X3N1cHBvcnRzX3N0YWNrX2FyZ3Modm9pZCk7XFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDoxMjQxOmJvb2wgYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzKHZvaWQpO1xcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtMTI0Mi1ib29sIGJwZl9qaXRfc3VwcG9ydHNfZmFyX2tmdW5jX2NhbGwodm9pZCk7XFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz0zMjkwPWJvb2wgX193ZWFrIGJwZl9qaXRfc3VwcG9ydHNfc3RhY2tfYXJncyh2b2lkKVxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmMtMzI5NC1cXG5rZXJuZWwvYnBmL2NvcmUuYzozMjk1OmJvb2wgX193ZWFrIGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncyh2b2lkKVxcbmtlcm5lbC9icGYvY29yZS5jLTMyOTYte1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTExMzA2PWdldF9rZnVuY19hcmdfdHlwZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEzODMtXFx0ZWxzZSBpZiAoaXNfa2Z1bmNfYXJnX2FyZW5hKG1ldGEtXFx1MDAzZWJ0ZiwgXFx1MDAyNmFyZ3NbYXJnXSkpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTEzODQ6XFx0XFx0aWYgKCFicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3MoKSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTM4NS1cXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIkpJVCBkb2VzIG5vdCBzdXBwb3J0IGtmdW5jICVzKCkgd2l0aCBhcmVuYSBwb2ludGVyIGFyZ3VtZW50c1xcXFxuXFxcIixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xODcyMT1zdGF0aWMgaW50IGNoZWNrX3N0cnVjdF9vcHNfYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg4MTAtXFx0XFx0aWYgKGJhc2VfdHlwZShpbmZvLVxcdTAwM2VyZWdfdHlwZSkgPT0gUFRSX1RPX0FSRU5BKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE4ODExOlxcdFxcdFxcdGlmICghYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzKCkpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg4MTItXFx0XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJKSVQgZG9lcyBub3Qgc3VwcG9ydCBhcmVuYSBhcmd1bWVudHNcXFxcblxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDo1MDozNy40OTgxOTE0ODZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjI3NTIxMTY3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIEJQRiBKSVQgUGF0Y2ggZm9yIGFybTY0KipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIGZvY3VzZWQgb24gZW5hYmxpbmcgb3IgaW1wcm92aW5nIEJQRiBKSVQgY29tcGlsYXRpb24gb24gYXJtNjQuIE15IGltbWVkaWF0ZSBvYnNlcnZhdGlvbnMgYXJlIHRoYXQgdGhlIHBhdGNoIGFkZHMgYSBmdW5jdGlvbiwgYGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJnc2AsIHRvIHRoZSBhcm02NCBhcmNoaXRlY3R1cmUsIGFuZCBpdCByZXR1cm5zIHRydWUuIFRoYXQncyBnb29kLCBpbmRpY2F0aW5nIHRoaXMgYXJtNjQgaW1wbGVtZW50YXRpb24gaXMgYWN0aXZlbHkgc3VwcG9ydGluZyBhcmVuYS1iYXNlZCBhcmd1bWVudCBwYXNzaW5nLCB3aGljaCBpcyBsaWtlbHkgYSBrZXkgb3B0aW1pemF0aW9uLlxuXG5EaWdnaW5nIGRlZXBlciwgSSBzZWUgYSBjaGFpbiBvZiBtb2RpZmljYXRpb25zLiBUaGUgcGF0Y2ggaW5kaXJlY3RseSB0b3VjaGVzIGBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgIGJ5IGNoYW5naW5nIGBwcmVwYXJlX3RyYW1wb2xpbmVgLCB3aGljaCBpcyBjYWxsZWQgYnkgdGhlIGZvcm1lci4gSXQgYWxzbyBjaGFuZ2VzIGBidWlsZF9pbnNuYCwgd2hpY2ggaXMgY2FsbGVkIGJ5IGBidWlsZF9ib2R5YCB3aGljaCBpcyBjYWxsZWQgYnkgYGJwZl9pbnRfaml0X2NvbXBpbGVgLiAgU28sIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRob3NlIGluZGlyZWN0IGNoYW5nZXMgYW5kIGhvdyB0aGV5IGFyZSBoYW5kbGVkLlxuXG5UaGUga2V5IGZ1bmN0aW9ucyB0byBzY3J1dGluaXplLCB0aGVuLCBhcmU6IGBicGZfaW50X2ppdF9jb21waWxlYCDigJMgdGhlIGNvcmUgSklUIGNvbXBpbGF0aW9uIGZ1bmN0aW9uLCBgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYCDigJMgcHJvYmFibHkgcmVsYXRlZCB0byB0aGUgaW5zdHJ1Y3Rpb24gc2VxdWVuY2UgbmVlZGVkIGZvciBjYWxsaW5nIGludG8gSklUJ2QgY29kZSwgYGFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9leHRlbmRlZF9yZWdgIOKAkyBhIHNwZWNpZmljIGluc3RydWN0aW9uIGdlbmVyYXRvciB0aGF0IG1pZ2h0IGhhdmUgc3BlY2lmaWMgQVJNNjQgZmVhdHVyZXMgYmVpbmcgZXhwbG9pdGVkIGFuZCBmaW5hbGx5IGBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NgIOKAkyB0aGUgZmxhZyBzaWduYWxpbmcgdGhlIGZlYXR1cmUncyBhdmFpbGFiaWxpdHkuXG5cbkJlZm9yZSBkaXZpbmcgaW50byB0aGUgY29kZSBpdHNlbGYsIEknbGwgcXVpY2tseSBjaGVjayBmb3IgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBUaGUgZmlsZSBsb2NhdGlvbiAoYGFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jYCkgdGVsbHMgbWUgd2hlcmUgdG8gbG9vayBhbmQgSSBrbm93IHRoaXMgaGluZ2VzIG9uIGBDT05GSUdfQlBGX0pJVGAuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGlzIGlzIGVuYWJsZWQgYW5kIHRoZW4gZGlnIGluIGZ1cnRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1OTc4LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjUwOjQzLjc3MzQwNjg0NFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1MjU4MTE1MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX0pJVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9LY29uZmlnPTI3PWNvbmZpZyBCUEZfU1lTQ0FMTFxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnLTQxLVxcbmtlcm5lbC9icGYvS2NvbmZpZzo0Mjpjb25maWcgQlBGX0pJVFxcbmtlcm5lbC9icGYvS2NvbmZpZy00My1cXHRib29sIFxcXCJFbmFibGUgQlBGIEp1c3QgSW4gVGltZSBjb21waWxlclxcXCJcXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZy01Ny1cXG5rZXJuZWwvYnBmL0tjb25maWc6NTg6Y29uZmlnIEJQRl9KSVRfQUxXQVlTX09OXFxua2VybmVsL2JwZi9LY29uZmlnLTU5LVxcdGJvb2wgXFxcIlBlcm1hbmVudGx5IGVuYWJsZSBCUEYgSklUIGFuZCByZW1vdmUgQlBGIGludGVycHJldGVyXFxcIlxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnLTY4LVxcbmtlcm5lbC9icGYvS2NvbmZpZzo2OTpjb25maWcgQlBGX0pJVF9ERUZBVUxUX09OXFxua2VybmVsL2JwZi9LY29uZmlnLTcwLVxcdGRlZl9ib29sIEFSQ0hfV0FOVF9ERUZBVUxUX0JQRl9KSVQgfHwgQlBGX0pJVF9BTFdBWVNfT05cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6NTA6NDUuNDI1OTkzNTA2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwOTY2MTU5OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWtpbmcgb24gdGhlIHBlcnNvbmEgeW91IHJlcXVlc3RlZDpcblxuKipBc3Nlc3NpbmcgdGhlIEJQRiBGZWF0dXJlIFJlcXVpcmVtZW50cyoqXG5cbkFscmlnaHQsIHNvIHRoZSBpbml0aWFsIHRob3VnaHQgaXMgY3J5c3RhbCBjbGVhcjogd2UgKm5lZWQqIEJQRl9KSVQgZW5hYmxlZC4gTm8gaWZzLCBhbmRzLCBvciBidXRzIGFib3V0IGl0LiBUaGF0J3MgdGhlIGJhc2VsaW5lLiBOb3csIHRoZSBtZWF0IG9mIHRoaXMgc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgdGhpcyBCUEYgYXJlbmEgY29uY2VwdC4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiBpcyB0aGVyZSBhIGNvcnJlc3BvbmRpbmcga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGNvbnRyb2wgdGhpcz8gU3BlY2lmaWNhbGx5LCBpcyB0aGVyZSBhIGBDT05GSUdfQlBGX0FSRU5BYCBzZXR0aW5nPyBNeSBuZXh0IHN0ZXAgaXMgY2xlYXJseSBnb2luZyB0byBiZSB0byB2ZXJpZnkgdGhhdCBjb25maWd1cmF0aW9uIG9wdGlvbiBleGlzdHMgYW5kLCBpZiBzbywgdW5kZXJzdGFuZCBpdHMgY3VycmVudCBzdGF0ZS4gSSBuZWVkIHRvIGtub3cgaWYgdGhpcyBmZWF0dXJlIGlzIGV2ZW4gKmF2YWlsYWJsZSogaW4gdGhlIGN1cnJlbnQgYnVpbGQgZW52aXJvbm1lbnQgYmVmb3JlIEkgY2FuIG1vdmUgZm9yd2FyZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY4MjgsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDo1MDo0OS41MjI2MTMyMThaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0OTI0Njc2NjcsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfQVJFTkFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDo1MDo1MS4wMTUwODk2MzRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAzOTc3MTQzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBCUEYgQ29uZmlndXJhdGlvbiBDb25jZXJucyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIEJQRiBjb25maWd1cmF0aW9uLCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoZSBhYnNlbmNlIG9mIGBDT05GSUdfQlBGX0FSRU5BYC4gSG1tLCBpbnRlcmVzdGluZy4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRoYXQuIFdhaXQsIHdhaXQuIEkga25vdyB0aGF0IEJQRl9TWVNDQUxMIGlzIGFic29sdXRlbHkgY3J1Y2lhbCwgc28gdGhhdCdzIGEgZ2l2ZW4uIE5leHQgdXAsIGBDT05GSUdfQlBGX0pJVGAuIFllcywgb2YgY291cnNlLiBJIGNhbid0IGltYWdpbmUgdGhpcyB3b3JraW5nIHdpdGhvdXQgdGhlIEpJVCBjb21waWxlciBlbmFibGVkLiBMZXQgbWUganVzdCBjb25maXJtIHRoaW5ncyB3aXRoIHRoZSBgYXJjaC9hcm02NC9uZXQvTWFrZWZpbGVgIHRvIG1ha2Ugc3VyZSBub3RoaW5nIGlzIGJlaW5nIG92ZXJsb29rZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MDY1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6NTA6NTUuMDU0ODY1NzY3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODIzMjU5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfaml0X2NvbXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9hcm02NC9uZXQvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9uZXQvTWFrZWZpbGUtNC0jXFxuYXJjaC9hcm02NC9uZXQvTWFrZWZpbGU6NTpvYmotJChDT05GSUdfQlBGX0pJVCkgKz0gYnBmX2ppdF9jb21wLm8gYnBmX3RpbWVkX21heV9nb3RvLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6NTA6NTUuMTAzMTA1NDg1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU5NzkxMjE1MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEJQRiBKSVQgRnVuY3Rpb25hbGl0eSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBDT05GSUdfQlBGX0pJVGAuIFRoYXQncyB0aGUga2V5IGVuYWJsaW5nIGNvbmZpZywgb2J2aW91c2x5LiBOb3csIEkgd2FudCB0byBnZXQgYSBsYXkgb2YgdGhlIGxhbmQsIHNlZSB3aGF0IG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zIGFyZSBpbiBwbGF5IGhlcmUuIExldCdzIHNlZS4uLiBJJ3ZlIGdvdCBgYnBmX2ludF9qaXRfY29tcGlsZWAsIGBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgLCBgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZ2AsIGFuZCBgYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzYC5cblxuSG1tLCBgYnBmX2ludF9qaXRfY29tcGlsZWAgbG9va3MgbGlrZSBhIHJlYWxseSBjb3JlLCBob3QtcGF0aCBmdW5jdGlvbiBmb3IgdGhlIEJQRiBKSVQsIHZlcnkgZ2VuZXJpYyBpbiBpdHMgcHVycG9zZS4gYGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAgaXMgYWxzbyBzb21ld2hhdCBnZW5lcmljLCBidXQgc2xpZ2h0bHkgbW9yZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMsIHByb2JhYmx5IGZvciBzZXR0aW5nIHVwIHRoZSBleGVjdXRpb24gY29udGV4dC4gYGFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9leHRlbmRlZF9yZWdgLCBob3dldmVyLCB0aGF0J3MgZGVmaW5pdGVseSBhIHNwZWNpZmljIGluc3RydWN0aW9uIGdlbmVyYXRvcjsgaXQncyBnZXR0aW5nIGRvd24gaW50byB0aGUgd2VlZHMgb2YgaG93IGFuIGFkZCBvciBzdWJ0cmFjdCBpcyBoYW5kbGVkIG9uIEFBcmNoNjQuIEFuZCBmaW5hbGx5LCBgYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzYCBzb3VuZHMgdmVyeSBzcGVjaWZpYywgbGlrZWx5IHJlbGF0ZWQgdG8gaG93IHRoZSBKSVQgaGFuZGxlcyBhcmd1bWVudHMgYW5kIG1lbW9yeSBhcmVuYXMuXG5cbkdpdmVuIHRoYXQgYGFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9leHRlbmRlZF9yZWdgIGlzIHNvIGZvY3VzZWQsIEknbSBnb2luZyB0byBkaWcgYSBiaXQgZGVlcGVyIGludG8gaXRzIGNhbGxlcnMgdG8gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaXRzIHJvbGUgaW4gdGhlIGJpZ2dlciBwaWN0dXJlLiBJdCBjb3VsZCBiZSBhbiBpbnRlcmVzdGluZyBwb2ludCB0byBleGFtaW5lIG9wdGltaXphdGlvbiBwb3NzaWJpbGl0aWVzLCBkZXBlbmRpbmcgb24gaG93IHdpZGVseSBpdCdzIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MzU2LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjUxOjAxLjA4MjIzMDA0MloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODkyOTUyMzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL2FybTY0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L2luY2x1ZGUvYXNtL2luc24uaD02NTA9dTMyIGFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9zaGlmdGVkX3JlZyhlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBkc3QsXFxuLS1cXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2luc24uaC02NTUtXFx0XFx0XFx0XFx0XFx0IGVudW0gYWFyY2g2NF9pbnNuX2Fkc2JfdHlwZSB0eXBlKTtcXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2luc24uaDo2NTY6dTMyIGFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9leHRlbmRlZF9yZWcoZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgZHN0LFxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vaW5zbi5oLTY1Ny1cXHRcXHRcXHRcXHRcXHQgIGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIHNyYyxcXG4tLVxcbmFyY2gvYXJtNjQvbGliL2luc24uYz05MzE9dTMyIGFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9zaGlmdGVkX3JlZyhlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBkc3QsXFxuLS1cXG5hcmNoL2FybTY0L2xpYi9pbnNuLmMtOTkzLSAqL1xcbmFyY2gvYXJtNjQvbGliL2luc24uYzo5OTQ6dTMyIGFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9leHRlbmRlZF9yZWcoZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgZHN0LFxcbmFyY2gvYXJtNjQvbGliL2luc24uYy05OTUtXFx0XFx0XFx0XFx0XFx0ICBlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBzcmMsXFxuLS1cXG5hcmNoL2FybTY0L25ldC9icGZfaml0LmgtMjQ3LSNkZWZpbmUgQTY0X0FERFNVQl9FUkVHKHNmLCBSZCwgUm4sIFJtLCBleHQsIHNoaWZ0LCB0eXBlKSBcXFxcXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdC5oOjI0ODpcXHRhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnKFJkLCBSbiwgUm0sIFxcXFxcXG5hcmNoL2FybTY0L25ldC9icGZfaml0LmgtMjQ5LVxcdFxcdEFBUkNINjRfSU5TTl9FWFRFTkRfIyNleHQsIHNoaWZ0LCBBNjRfVkFSSUFOVChzZiksIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6NTE6MDEuMTcxNTMxNloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDg1MjU4OTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlRyYWNpbmcgdGhlIENhbGwgUGF0aCB0byBhIENyaXRpY2FsIEZ1bmN0aW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnYCBmdW5jdGlvbiwgYW5kIGl0IGxvb2tzIGxpa2UgdGhlIGNhbGwgcGF0aCBpcyBmYWlybHkgY29udGFpbmVkLiBUaGUgaW5pdGlhbCBob29rIGlzIHdpdGhpbiB0aGUgYEE2NF9BRERTVUJfRVJFR2AgbWFjcm8sIGFuZCB0aGUgdHJhY2UgZnJvbSB0aGVyZSBpcyBwcmV0dHkgZGlyZWN0OiBgQTY0X0FERFNVQl9FUkVHYCBnZXRzIHVzZWQgaW4gYEE2NF9BRERfRVhUYCwgd2hpY2ggZmVlZHMgaW50byBgQTY0X0FERF9VWFRXYC4gTm93LCBgQTY0X0FERF9VWFRXYCBpcyBjcnVjaWFsLCBhcyBpdCBlbmRzIHVwIGluIGJvdGggYGVtaXRfa2Z1bmNfYXJlbmFfYXJnc2AgYW5kIGBlbWl0X2FyZW5hX2FyZ19jb252YC4gVGhpcyBtYWtlcyBpdCB0aGUgcGl2b3RhbCBzeW1ib2wgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGJyb2FkZXIgdXNhZ2UuIE5vdyBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUgY2hlY2sgdGhlIGBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODQzNSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDo1MTowNi4yNTY4MDY2MzJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3MzU4Mjg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL2FybTY0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYz0yNjc5PXN0YXRpYyB2b2lkIHN0b3JlX2Z1bmNfbWV0YShzdHJ1Y3Qgaml0X2N0eCAqY3R4LCB1NjQgZnVuY19tZXRhLCBpbnQgZnVuY19tZXRhX29mZilcXG4tLVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTI2ODQtXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM6MjY4NTovKiBCYXNlZCBvbiB0aGUgeDg2J3MgaW1wbGVtZW50YXRpb24gb2YgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKCkuXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMjY4Ni0gKlxcbi0tXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM9MzAyMD1pbnQgYXJjaF9wcm90ZWN0X2JwZl90cmFtcG9saW5lKHZvaWQgKmltYWdlLCB1bnNpZ25lZCBpbnQgc2l6ZSlcXG4tLVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTMwMjQtXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM6MzAyNTppbnQgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICpyb19pbWFnZSxcXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0zMDI2LVxcdFxcdFxcdFxcdHZvaWQgKnJvX2ltYWdlX2VuZCwgY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDo1MTowNi4zNDQxNzE2NVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4OTU4NzQ2MTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEN1cnJlbnQgTGluZSBvZiBUaG91Z2h0KipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBuYWlsIGRvd24gc29tZSBnb29kIFwiZm9jdXMgc3ltYm9sc1wiIOKAkyBrZXkgZnVuY3Rpb25zIHRoYXQgcmVwcmVzZW50IHRoZSBhcmVhIEknbSBsb29raW5nIGF0LiBgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYCBpcyBhIHN0cm9uZyBjYW5kaWRhdGUsIGRlZmluaXRlbHkgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBCdXQgd2hhdCBhYm91dCBgYnBmX2ludF9qaXRfY29tcGlsZWA/IEl0ICppcyogdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIHRoZSBKSVQgY29tcGlsZXIsIHdoaWNoIGlzIHZlcnkgcmVsZXZhbnQsIGJ1dCBpdCdzIGFsc28gcHJldHR5IGdlbmVyaWMuIE1heWJlIHRvbyBicm9hZC4gT24gdGhlIG90aGVyIGhhbmQsIGBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NgIGlzIHJlYWxseSBzcGVjaWZpYyBhbmQgcHJvYmFibHkgcmVwcmVzZW50cyBhIGNsZWFyIGFyZWEgdG8gZXhhbWluZS4gVGhhdCdzIGEgc3Ryb25nIGNvbnRlbmRlci5cblxuSSBuZWVkIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHNwZWNpZmljIGZ1bmN0aW9ucyB0aGF0IHdvdWxkIGJlIGhlbHBmdWwgYXMgZm9jdXMgc3ltYm9scy4gSSBmb3VuZCBgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfbXVsdGlzbG90YCBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuY2AuIEhtbSwgYnV0IGlzIGBicGZfdGVzdG1vZGAgYWN0dWFsbHkgY29tcGlsZWQgKmludG8qIHRoZSBrZXJuZWw/IE9oIHJpZ2h0LCBubywgaXQncyBhIHRlc3QgbW9kdWxlISBXZSBzaG91bGRuJ3QgaW5jbHVkZSBpdCBpbiBGb2N1c1N5bWJvbHMgdW5sZXNzIGl0J3MgcGFydCBvZiB0aGUgY29yZSBrZXJuZWwuIE5vcGUsIGl0J3MganVzdCBhIGtlcm5lbCBtb2R1bGUgdXNlZCBmb3IgdGVzdGluZy4gR29vZCB0byByZW1lbWJlci4gU28gc2NyYXRjaCB0aGF0LlxuXG5MZXQncyByZXZpZXcgdGhlIGN1cnJlbnQgbGlzdDpcblxuKiAgIGBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnYFxuKiAgIGBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NgXG4qICAgYGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWBcbiogICBgYnBmX2ludF9qaXRfY29tcGlsZWAgKG1heWJlIEknbGwgb21pdCB0aGlzLCBpdCBmZWVscyBhIGJpdCB0b28gYnJvYWQpXG5cbk5vdywgd2hlcmUgYXJlIHRoZXNlIGZ1bmN0aW9ucyBkZWZpbmVkPyBPa2F5LCBgYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzYCBpcyBpbiBgYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmNgLCBhbmQgYGFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9leHRlbmRlZF9yZWdgIGlzIGluIGBhcmNoL2FybTY0L2xpYi9pbnNuLmNgLiBgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYCBpcyBhbHNvIGluIGBhcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY2AuXG5cbk9rYXksIG5leHQgSSdsbCBjaGVjayBhbmQgZW5zdXJlIHRoYXQgYGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJnc2AgaXMgYWN0dWFsbHkgY2FsbGVkIHRvIHZhbGlkYXRlIHRoYXQgaXQgaXMgc29tZXRoaW5nIHRvIGxvb2sgYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MTM1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjUxOjE1LjMwMjkyMTQxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTY3OTk3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9jb3JlLmM9MzI5MD1ib29sIF9fd2VhayBicGZfaml0X3N1cHBvcnRzX3N0YWNrX2FyZ3Modm9pZClcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jLTMyOTQtXFxua2VybmVsL2JwZi9jb3JlLmM6MzI5NTpib29sIF9fd2VhayBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3Modm9pZClcXG5rZXJuZWwvYnBmL2NvcmUuYy0zMjk2LXtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTMwNj1nZXRfa2Z1bmNfYXJnX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMzgzLVxcdGVsc2UgaWYgKGlzX2tmdW5jX2FyZ19hcmVuYShtZXRhLVxcdTAwM2VidGYsIFxcdTAwMjZhcmdzW2FyZ10pKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMzg0OlxcdFxcdGlmICghYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzKCkpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEzODUtXFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJKSVQgZG9lcyBub3Qgc3VwcG9ydCBrZnVuYyAlcygpIHdpdGggYXJlbmEgcG9pbnRlciBhcmd1bWVudHNcXFxcblxcXCIsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTg3MjE9c3RhdGljIGludCBjaGVja19zdHJ1Y3Rfb3BzX2J0Zl9pZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4ODEwLVxcdFxcdGlmIChiYXNlX3R5cGUoaW5mby1cXHUwMDNlcmVnX3R5cGUpID09IFBUUl9UT19BUkVOQSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODgxMTpcXHRcXHRcXHRpZiAoIWJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncygpKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4ODEyLVxcdFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiSklUIGRvZXMgbm90IHN1cHBvcnQgYXJlbmEgYXJndW1lbnRzXFxcXG5cXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6NTE6MTUuMzQ4NjEyNTA4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU5MjE5MjA3MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCUEYgSklUIENvbXBpbGVyIGZvciBBcm02NCoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhlIEFybTY0IEJQRiBKSVQgY29tcGlsZXIgYW5kIHRyYWNpbmcgaXRzIGV4ZWN1dGlvbi4gUmlnaHQsIHRoZSBzdGFydGluZyBwb2ludCBpcyBjbGVhcmx5IGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBFeGNlbGxlbnQuIFRoYXQgbmFycm93cyBteSBmb2N1cyBjb25zaWRlcmFibHkuXG5cbk5vdywgd2hpY2ggZnVuY3Rpb25zIGFyZSB0aGUga2V5IHBsYXllcnMgaW4gdGhlIEpJVCBwcm9jZXNzPyBMZXQncyBzZWUuLi4gSSBuZWVkIHRvIGNvbmNlbnRyYXRlIG9uIGBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnYCwgdGhhdCBvbmUncyBsaWtlbHkgZG9pbmcgaGVhdnkgbGlmdGluZywgYW5kIGBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NgLCB3aGljaCBwcm9iYWJseSByZWxhdGVzIHRvIGFyZ3VtZW50IGhhbmRsaW5nLiBPZiBjb3Vyc2UsIGBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgIGlzIGNydWNpYWwgZm9yIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBzZXR1cC4gR290IGl0LlxuXG5CdXQgYmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIHRoZSBjb2RlIGl0c2VsZiwgSSBzaG91bGQgbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBgQ09ORklHX0JQRl9KSVRgIGlzIGRlZmluaXRlbHkgYSBwcmVyZXF1aXNpdGUg4oCTIG5vIHN1cnByaXNlIHRoZXJlLiBBcmUgdGhlcmUgYW55ICpvdGhlciogY29uZmlndXJhdGlvbiBvcHRpb25zIGluIHBsYXkgdGhhdCBtaWdodCBhZmZlY3QgdGhlIEFybTY0IEpJVD8gVGltZSB0byBjaGVjayBgYXJjaC9hcm02NC9LY29uZmlnYCBhbmQgdmVyaWZ5LiBHb3R0YSBiZSB0aG9yb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA1MTksIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6NTE6MjEuMjcwNTM2ODY2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzgwNDY5OCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL2FybTY0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjUxOjIxLjMxNDM1MDIxNVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTA1NDk0ODA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipJbnZlc3RpZ2F0aW5nIGVCUEYgSklUIFN1cHBvcnQgb24gQVJNNjQqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBlQlBGIEpJVCBpcyBzdXBwb3J0ZWQgb24gdGhlIEFSTTY0IGFyY2hpdGVjdHVyZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGlzIGtlcm5lbC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMuIEdpdmVuIHRoZSBhcmNoaXRlY3R1cmUsIHRoZSBsaWtlbHkgcGxhY2UgdG8gZmluZCB0aGlzIGluZm9ybWF0aW9uIGlzIGluIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgS2NvbmZpZyBmaWxlLCBzbyBJJ20gZ29pbmcgdG8gbmF2aWdhdGUgb3ZlciB0byBgYXJjaC9hcm02NC9LY29uZmlnYC4gSSdsbCBiZSBsb29raW5nIGZvciBhIGNvbmZpZyBvcHRpb24sIHNvbWV0aGluZyBsaWtlIGBIQVZFX0VCUEZfSklUYC4gVGhhdCBzaG91bGQgdGVsbCBtZSBpZiB0aGUgbmVjZXNzYXJ5IGZlYXR1cmVzIG9yIGhhcmR3YXJlIHN1cHBvcnQgYXJlIGVuYWJsZWQgYXQgY29tcGlsZSB0aW1lLiBUaGlzIGlzIGEgc3RhbmRhcmQgYXBwcm9hY2ggLSBLY29uZmlnIGZpbGVzIGFyZSB0aGUgY2VudHJhbCByZXBvc2l0b3J5IGZvciBmZWF0dXJlIGZsYWdzIGFuZCBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgc2V0dGluZ3MuIEtub3dpbmcgdGhpcywgYW5kIGhhdmluZyBleHBlcmllbmNlIGluIHRoaXMgYXJlYSwgbXkgdGhvdWdodCBwcm9jZXNzIGlzIHRvIHF1aWNrbHksIGFuZCBlZmZpY2llbnRseSBmaW5kIHRoaXMuIFRoaXMgd2lsbCBiZSBteSBzdGFydGluZyBwb2ludCBpbiBjb25maXJtaW5nIGlmIHRoZSBuZWNlc3NhcnkgY29tcG9uZW50cyBmb3IgZUJQRiBKSVQgYXJlIHByZXNlbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwOTI4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6NTE6MjUuODE5ODQ5MzU0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDY4NjA3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJIQVZFX0VCUEZfSklUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvYXJtNjQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L0tjb25maWc9Mj1jb25maWcgQVJNNjRcXG4tLVxcbmFyY2gvYXJtNjQvS2NvbmZpZy0xNzctXFx0c2VsZWN0IEhBVkVfQVNNX01PRFZFUlNJT05TXFxuYXJjaC9hcm02NC9LY29uZmlnOjE3ODpcXHRzZWxlY3QgSEFWRV9FQlBGX0pJVFxcbmFyY2gvYXJtNjQvS2NvbmZpZy0xNzktXFx0c2VsZWN0IEhBVkVfQ19SRUNPUkRNQ09VTlRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6NTE6MjUuODY0NTQyMTgzWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2NTMwMTgzNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS2VybmVsIENvbmZpZ3VyYXRpb24gZm9yIEJQRioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGNvbmZpZ3VyaW5nIHRoZSBrZXJuZWwgZm9yIEJQRiBmdW5jdGlvbmFsaXR5LiBUaGUgcHJpbWFyeSBmbGFnIEkgbmVlZCB0byBlbmFibGUgaXMgZGVmaW5pdGVseSBgQ09ORklHX0JQRl9KSVRgLiBUaGF0J3MgdGhlIGNvcmUuIEhvbGQgb24sIHRob3VnaCwgSSBhbHNvIG5lZWQgYENPTkZJR19CUEZfU1lTQ0FMTGAg4oCTIGl0J3MgY3J1Y2lhbCBmb3IgdGhlIEJQRiBzeXN0ZW0gY2FsbHMgdG8gd29yay4gUmlnaHQsIEknbGwgYmUgc3VyZSB0byBpbmNsdWRlICpib3RoKiBgQlBGX0pJVGAgYW5kIGBCUEZfU1lTQ0FMTGAgaW4gdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24uIEkndmUgYmVlbiBkb3duIHRoaXMgcm9hZCBiZWZvcmUsIG5vIHNlbnNlIG1ha2luZyBhIHNpbGx5IG1pc3Rha2UuXG5cbk5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSB2ZXJpZnkgdGhhdCBgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZ2AgaXMgYWNjZXNzaWJsZS4gSSBrbm93IGl0J3MgaW4gYGFyY2gvYXJtNjQvbGliL2luc24uY2AsIHdoaWNoIGlzIGNvbXBpbGVkIGRpcmVjdGx5IGludG8gdGhlIGtlcm5lbCBpbWFnZS4gTm8gc3VycHJpc2VzIHRoZXJlLiBHb29kLiBUaGlzIGlzIGFsbCBsb29raW5nIGNvcnJlY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMzA3LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjUxOjMwLjUxNzU2NDA2OFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU4OTM3OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW5zblxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL2FybTY0L2xpYi9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L2xpYi9NYWtlZmlsZT0yPWxpYi15XFx0XFx0Oj0gY2xlYXJfdXNlci5vIGRlbGF5Lm8gY29weV9mcm9tX3VzZXIub1xcdFxcdFxcXFxcXG5hcmNoL2FybTY0L2xpYi9NYWtlZmlsZS0zLVxcdFxcdCAgIGNvcHlfdG9fdXNlci5vIGNvcHlfcGFnZS5vXFx0XFx0XFx0XFx0XFxcXFxcbmFyY2gvYXJtNjQvbGliL01ha2VmaWxlOjQ6XFx0XFx0ICAgY2xlYXJfcGFnZS5vIGNzdW0ubyBpbnNuLm8gbWVtY2hyLm8gbWVtY3B5Lm9cXHRcXHRcXFxcXFxuYXJjaC9hcm02NC9saWIvTWFrZWZpbGUtNS1cXHRcXHQgICBtZW1zZXQubyBtZW1jbXAubyBzdHJjbXAubyBzdHJuY21wLm8gc3RybGVuLm9cXHRcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjUxOjMwLjU2MzQ2NTI0N1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NjE2OTgyMjIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQXJtNjQgQlBGIEFyZW5hIEFyZ3VtZW50cyBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEkndmUgY29uZmlybWVkIHRoYXQgdGhlIGNvZGUgaXMgY29tcGlsZWQgaW4uIE5vdyBJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgdGhlIHNjb3BlIG9mIHRoZSBtb2RpZmljYXRpb25zIHRvIGVuc3VyZSBhIHRob3JvdWdoIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNoYW5nZXMuIEkndmUgZ29uZSB0aHJvdWdoIGVhY2ggZnVuY3Rpb24sIGNoZWNraW5nIGlmIGl0J3MgYmVlbiBtb2RpZmllZCwgYW5kIGlmIHNvLCBob3cuXG5cbkl0IGxvb2tzIGxpa2UgdGhlIGBicGZfYXJjaF90ZXh0X2NvcHlgLCBgY2xlYXJfZ2FyYmFnZWAsIGBzYXZlX2FyZ3NgLCBgcHJlcGFyZV90cmFtcG9saW5lYCwgYGVtaXRfa2Z1bmNfYXJlbmFfYXJnc2AsIGFuZCBgZW1pdF9hcmVuYV9hcmdfY29udmAgZnVuY3Rpb25zIGFyZSBlaXRoZXIgdW5tb2RpZmllZCBvciBvbmx5IHVzZWQgaW4gdGhlIGNvbnRleHQuIEhvd2V2ZXIsIEkgZGlkIGZpbmQgdGhhdCB0aGUgZm9sbG93aW5nIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGhhdmUgYmVlbiBhbHRlcmVkOlxuLSBgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZ2Bcbi0gYGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJnc2Bcbi0gYGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWBcblxuQmFzZWQgb24gd2hhdCBJIHNlZSwgdGhpcyBzZWVtcyBsaWtlIGEgc29saWQgaW1wbGVtZW50YXRpb24gb2YgQlBGIGFyZW5hIGFyZ3VtZW50IHN1cHBvcnQgZm9yIHRoZSBhcm02NCBKSVQgY29tcGlsZXIuIFRoZSBjb3JlIGNoYW5nZXMgYXJlIGNlbnRlcmVkIGFyb3VuZCBnZW5lcmF0aW5nIG5ldyBpbnN0cnVjdGlvbiBsb2dpYywgc3BlY2lmaWNhbGx5IGZvciBleHRlbmRlZCByZWdpc3RlciBhZGQvc3ViIGluc3RydWN0aW9ucy4gRnVydGhlcm1vcmUsIHRoZSBhcm02NCBCUEYgSklUIGhhcyBiZWVuIHVwZGF0ZWQgdG8gYWNjb21tb2RhdGUgYXJlbmEgcG9pbnRlcnMgaW4gYm90aCBrZnVuYyBjYWxscyBhbmQgc3RydWN0X29wcyBjYWxsYmFja3MuIFRoZXNlIGFyZSBjcnVjaWFsLCBmdW5jdGlvbmFsIGNoYW5nZXMgd2l0aGluIHRoZSBrZXJuZWwncyBCUEYgSklULiBUaGlzIGltcGxlbWVudGF0aW9uIGFkZHMgc29tZSBuZXcgc3VyZmFjZSBhcmVhIGluIHRoZSBjb3JlIGtlcm5lbC5cblxuVGhlcmVmb3JlLCB0aGUgb2J2aW91cyBhcmVhcyB0aGF0IG5lZWQgZnV6emluZyBhcmU6XG4tIGBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnYFxuLSBgYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzYFxuLSBgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYFxuXG5UaGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgc2VlbSB0byBiZSBgQlBGX1NZU0NBTExgIGFuZCBgQlBGX0pJVGAuXG5cbkknbSByZWFkeSB0byBjYWxsIHRoZSByZXN1bHRzIFwic2V0LXJlc3VsdHNcIiBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNzk4LCJPdXRwdXRUb2tlbnMiOjIxMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDo1MTo0MC4xODA0NTEyNDhaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTA1NTU4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9KSVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnXCIsXG4gICAgXCJicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NcIixcbiAgICBcImFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGltcGxlbWVudHMgQlBGIGFyZW5hIGFyZ3VtZW50cyBzdXBwb3J0IGZvciB0aGUgYXJtNjQgSklUIGNvbXBpbGVyLiBJdCBhZGRzIG5ldyBpbnN0cnVjdGlvbiBnZW5lcmF0aW9uIGxvZ2ljIGZvciBleHRlbmRlZCByZWdpc3RlciBhZGQvc3ViIGluc3RydWN0aW9ucyAoYGFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9leHRlbmRlZF9yZWdgKSBhbmQgbW9kaWZpZXMgdGhlIGFybTY0IEJQRiBKSVQgKGBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgLCBgYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzYCkgdG8gaGFuZGxlIGFyZW5hIHBvaW50ZXJzIGluIGtmdW5jIGNhbGxzIGFuZCBzdHJ1Y3Rfb3BzIGNhbGxiYWNrcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBrZXJuZWwgKEJQRiBKSVQpIHRoYXQgYXJlIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX0pJVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9leHRlbmRlZF9yZWdcIixcbiAgICBcImJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJnc1wiLFxuICAgIFwiYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW1wbGVtZW50cyBCUEYgYXJlbmEgYXJndW1lbnRzIHN1cHBvcnQgZm9yIHRoZSBhcm02NCBKSVQgY29tcGlsZXIuIEl0IGFkZHMgbmV3IGluc3RydWN0aW9uIGdlbmVyYXRpb24gbG9naWMgZm9yIGV4dGVuZGVkIHJlZ2lzdGVyIGFkZC9zdWIgaW5zdHJ1Y3Rpb25zIChgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZ2ApIGFuZCBtb2RpZmllcyB0aGUgYXJtNjQgQlBGIEpJVCAoYGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAsIGBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NgKSB0byBoYW5kbGUgYXJlbmEgcG9pbnRlcnMgaW4ga2Z1bmMgY2FsbHMgYW5kIHN0cnVjdF9vcHMgY2FsbGJhY2tzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIGtlcm5lbCAoQlBGIEpJVCkgdGhhdCBhcmUgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QyMDo1MTo0MC4yNjk1MTU0NDVaIiwiU2VxIjozMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyODc1MDQ3ODI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMjA6NTE6NDAuMjcwMzI2MDY1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEyODc0MjMxOTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBleHRlbmRzIHRoZSBhcm02NCBCUEYgSklUIGNvbXBpbGVyIHRvIHN1cHBvcnQgQlBGIGFyZW5hIGFyZ3VtZW50cy4gSXQgaW50cm9kdWNlcyBuZXcgaW5zdHJ1Y3Rpb24gZW5jb2RpbmcgZnVuY3Rpb25zIGZvciBhcm02NCAoZS5nLiwgYGFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9leHRlbmRlZF9yZWdgKSBhbmQgbW9kaWZpZXMgdGhlIEpJVCBjb21waWxlciAoYGFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jYCkgdG8gZW1pdCBpbnN0cnVjdGlvbnMgdGhhdCByZWJhc2UgYXJlbmEgcG9pbnRlcnMuIFRoZSBjaGFuZ2VzIGFyZSBzdHJpY3RseSByZWxhdGVkIHRvIEpJVCBjb21waWxhdGlvbiBsb2dpYyBhbmQgaW5zdHJ1Y3Rpb24gZW1pc3Npb24uIFRoZXkgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGtlcm5lbCBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBhbGxvY2F0ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB0aGF0IGNvdWxkIGJlIGxlZnQgdW5pbml0aWFsaXplZC4gQW55IGJ1Z3MgaW4gdGhlIEpJVCBjb21waWxlciB3b3VsZCBsaWtlbHkgcmVzdWx0IGluIGludmFsaWQgaW5zdHJ1Y3Rpb24gZ2VuZXJhdGlvbiwgY3Jhc2hlcywgb3Igb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgaW4gdGhlIEpJVGVkIGNvZGUsIHdoaWNoIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5ZmQzODIyNWMyM2U4YTk1ZWFmMzg4ZjI3M2RjMzM4NzFiMjI0ZWJmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMTMgMjA6NTA6MTEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0IGIvRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdFxuaW5kZXggMTBlNzI1Y2JlNjRjZC4uODVmNzNlMGJiZDBmZiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3RcbkBAIC0zMDEsOSArMzAxLDkgQEAgQW4gZXhhbXBsZSBpcyBnaXZlbiBiZWxvdzo6XG4gICAgICAgICB9XG4gXG4gQ2FsbGluZyBzdWNoIGEga2Z1bmMgcmVxdWlyZXMgdGhlIHByb2dyYW0gdG8gdXNlIGFuIGFyZW5hIG1hcCBhbmQgYSBKSVQgd2l0aFxuLWFyZW5hIGFyZ3VtZW50IHN1cHBvcnQgKGN1cnJlbnRseSB4ODYtNjQpOyB2ZXJpZmljYXRpb24gZmFpbHMgb3RoZXJ3aXNlLiBUaGVcbi1wcm9ncmFtIGNhbiBwYXNzIGFueSB2YWx1ZSB3aXRob3V0IGNvbXByb21pc2luZyB0aGUga2VybmVsLiBBIHZhbHVlIHRoYXQgZG9lc1xuLW5vdCBwb2ludCBpbnRvIHRoZSBhcmVuYSBpcyBhIHByb2dyYW0gYnVnLlxuK2FyZW5hIGFyZ3VtZW50IHN1cHBvcnQgKGN1cnJlbnRseSB4ODYtNjQgYW5kIGFybTY0KTsgdmVyaWZpY2F0aW9uIGZhaWxzXG4rb3RoZXJ3aXNlLiBUaGUgcHJvZ3JhbSBjYW4gcGFzcyBhbnkgdmFsdWUgd2l0aG91dCBjb21wcm9taXNpbmcgdGhlIGtlcm5lbC4gQVxuK3ZhbHVlIHRoYXQgZG9lcyBub3QgcG9pbnQgaW50byB0aGUgYXJlbmEgaXMgYSBwcm9ncmFtIGJ1Zy5cbiBcbiBUaGUgc3VmZml4ZXMgaGF2ZSB0aGUgc2FtZSBtZWFuaW5nIG9uIHRoZSBhcmd1bWVudHMgb2Ygc3RydWN0X29wcyBzdHViXG4gZnVuY3Rpb25zLCB3aXRoIHRoZSBjb252ZXJzaW9uIHJ1bm5pbmcgaW4gdGhlIG9wcG9zaXRlIGRpcmVjdGlvbi4gVGhlXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9pbnNuLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2luc24uaFxuaW5kZXggY2MwNzAyZmE2NGE3OS4uMWNlNzVhNDQyNjM4NyAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vaW5zbi5oXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2luc24uaFxuQEAgLTIwNSw2ICsyMDUsMTggQEAgZW51bSBhYXJjaDY0X2luc25fYWRzYl90eXBlIHtcbiBcdEFBUkNINjRfSU5TTl9BRFNCX1NVQl9TRVRGTEFHU1xuIH07XG4gXG4rLyogb3B0aW9uIGZpZWxkIG9mIGFkZC9zdWIgKGV4dGVuZGVkIHJlZ2lzdGVyKSAqL1xuK2VudW0gYWFyY2g2NF9pbnNuX2V4dGVuZF90eXBlIHtcbitcdEFBUkNINjRfSU5TTl9FWFRFTkRfVVhUQixcbitcdEFBUkNINjRfSU5TTl9FWFRFTkRfVVhUSCxcbitcdEFBUkNINjRfSU5TTl9FWFRFTkRfVVhUVyxcbitcdEFBUkNINjRfSU5TTl9FWFRFTkRfVVhUWCxcbitcdEFBUkNINjRfSU5TTl9FWFRFTkRfU1hUQixcbitcdEFBUkNINjRfSU5TTl9FWFRFTkRfU1hUSCxcbitcdEFBUkNINjRfSU5TTl9FWFRFTkRfU1hUVyxcbitcdEFBUkNINjRfSU5TTl9FWFRFTkRfU1hUWCxcbit9O1xuK1xuIGVudW0gYWFyY2g2NF9pbnNuX21vdmV3aWRlX3R5cGUge1xuIFx0QUFSQ0g2NF9JTlNOX01PVkVXSURFX1pFUk8sXG4gXHRBQVJDSDY0X0lOU05fTU9WRVdJREVfS0VFUCxcbkBAIC0zNzgsNiArMzkwLDEwIEBAIF9fQUFSQ0g2NF9JTlNOX0ZVTkNTKGFkZCxcdDB4N0YyMDAwMDAsIDB4MEIwMDAwMDApXG4gX19BQVJDSDY0X0lOU05fRlVOQ1MoYWRkcyxcdDB4N0YyMDAwMDAsIDB4MkIwMDAwMDApXG4gX19BQVJDSDY0X0lOU05fRlVOQ1Moc3ViLFx0MHg3RjIwMDAwMCwgMHg0QjAwMDAwMClcbiBfX0FBUkNINjRfSU5TTl9GVU5DUyhzdWJzLFx0MHg3RjIwMDAwMCwgMHg2QjAwMDAwMClcbitfX0FBUkNINjRfSU5TTl9GVU5DUyhhZGRfZXh0LFx0MHg3RkUwMDAwMCwgMHgwQjIwMDAwMClcbitfX0FBUkNINjRfSU5TTl9GVU5DUyhhZGRzX2V4dCxcdDB4N0ZFMDAwMDAsIDB4MkIyMDAwMDApXG4rX19BQVJDSDY0X0lOU05fRlVOQ1Moc3ViX2V4dCxcdDB4N0ZFMDAwMDAsIDB4NEIyMDAwMDApXG4rX19BQVJDSDY0X0lOU05fRlVOQ1Moc3Vic19leHQsXHQweDdGRTAwMDAwLCAweDZCMjAwMDAwKVxuIF9fQUFSQ0g2NF9JTlNOX0ZVTkNTKG1hZGQsXHQweDdGRTA4MDAwLCAweDFCMDAwMDAwKVxuIF9fQUFSQ0g2NF9JTlNOX0ZVTkNTKG1zdWIsXHQweDdGRTA4MDAwLCAweDFCMDA4MDAwKVxuIF9fQUFSQ0g2NF9JTlNOX0ZVTkNTKHVkaXYsXHQweDdGRTBGQzAwLCAweDFBQzAwODAwKVxuQEAgLTYzNyw2ICs2NTMsMTMgQEAgdTMyIGFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9zaGlmdGVkX3JlZyhlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBkc3QsXG4gXHRcdFx0XHRcdCBpbnQgc2hpZnQsXG4gXHRcdFx0XHRcdCBlbnVtIGFhcmNoNjRfaW5zbl92YXJpYW50IHZhcmlhbnQsXG4gXHRcdFx0XHRcdCBlbnVtIGFhcmNoNjRfaW5zbl9hZHNiX3R5cGUgdHlwZSk7XG4rdTMyIGFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9leHRlbmRlZF9yZWcoZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgZHN0LFxuK1x0XHRcdFx0XHQgIGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIHNyYyxcbitcdFx0XHRcdFx0ICBlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciByZWcsXG4rXHRcdFx0XHRcdCAgZW51bSBhYXJjaDY0X2luc25fZXh0ZW5kX3R5cGUgZXh0ZW5kLFxuK1x0XHRcdFx0XHQgIGludCBzaGlmdCxcbitcdFx0XHRcdFx0ICBlbnVtIGFhcmNoNjRfaW5zbl92YXJpYW50IHZhcmlhbnQsXG4rXHRcdFx0XHRcdCAgZW51bSBhYXJjaDY0X2luc25fYWRzYl90eXBlIHR5cGUpO1xuIHUzMiBhYXJjaDY0X2luc25fZ2VuX2RhdGExKGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIGRzdCxcbiBcdFx0XHQgICBlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBzcmMsXG4gXHRcdFx0ICAgZW51bSBhYXJjaDY0X2luc25fdmFyaWFudCB2YXJpYW50LFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbGliL2luc24uYyBiL2FyY2gvYXJtNjQvbGliL2luc24uY1xuaW5kZXggMzdjZTc1ZjdmMWYwOC4uZTcwYWMwMjM4NTE1MyAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvbGliL2luc24uY1xuKysrIGIvYXJjaC9hcm02NC9saWIvaW5zbi5jXG5AQCAtOTg2LDYgKzk4Niw2NiBAQCB1MzIgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX3NoaWZ0ZWRfcmVnKGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIGRzdCxcbiBcdHJldHVybiBhYXJjaDY0X2luc25fZW5jb2RlX2ltbWVkaWF0ZShBQVJDSDY0X0lOU05fSU1NXzYsIGluc24sIHNoaWZ0KTtcbiB9XG4gXG4rLypcbisgKiBVbmxpa2UgdGhlIHNoaWZ0ZWQtcmVnaXN0ZXIgZm9ybSwgcmVnaXN0ZXIgMzEgaXMgbm90IFhaUiBldmVyeXdoZXJlIGhlcmU6XG4rICogaXQgZW5jb2RlcyBTUCBmb3IgQHNyYywgYW5kIGZvciBAZHN0IHRvbyB1bmxlc3MgQHR5cGUgc2V0cyB0aGUgZmxhZ3MuIE9ubHlcbisgKiBAcmVnIGtlZXBzIHRoZSBYWlIgbWVhbmluZy5cbisgKi9cbit1MzIgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZyhlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBkc3QsXG4rXHRcdFx0XHRcdCAgZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgc3JjLFxuK1x0XHRcdFx0XHQgIGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIHJlZyxcbitcdFx0XHRcdFx0ICBlbnVtIGFhcmNoNjRfaW5zbl9leHRlbmRfdHlwZSBleHRlbmQsXG4rXHRcdFx0XHRcdCAgaW50IHNoaWZ0LFxuK1x0XHRcdFx0XHQgIGVudW0gYWFyY2g2NF9pbnNuX3ZhcmlhbnQgdmFyaWFudCxcbitcdFx0XHRcdFx0ICBlbnVtIGFhcmNoNjRfaW5zbl9hZHNiX3R5cGUgdHlwZSlcbit7XG4rXHR1MzIgaW5zbjtcbitcbitcdHN3aXRjaCAodHlwZSkge1xuK1x0Y2FzZSBBQVJDSDY0X0lOU05fQURTQl9BREQ6XG4rXHRcdGluc24gPSBhYXJjaDY0X2luc25fZ2V0X2FkZF9leHRfdmFsdWUoKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIEFBUkNINjRfSU5TTl9BRFNCX1NVQjpcbitcdFx0aW5zbiA9IGFhcmNoNjRfaW5zbl9nZXRfc3ViX2V4dF92YWx1ZSgpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgQUFSQ0g2NF9JTlNOX0FEU0JfQUREX1NFVEZMQUdTOlxuK1x0XHRpbnNuID0gYWFyY2g2NF9pbnNuX2dldF9hZGRzX2V4dF92YWx1ZSgpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgQUFSQ0g2NF9JTlNOX0FEU0JfU1VCX1NFVEZMQUdTOlxuK1x0XHRpbnNuID0gYWFyY2g2NF9pbnNuX2dldF9zdWJzX2V4dF92YWx1ZSgpO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdHByX2VycihcIiVzOiB1bmtub3duIGFkZC9zdWIgZW5jb2RpbmcgJWRcXG5cIiwgX19mdW5jX18sIHR5cGUpO1xuK1x0XHRyZXR1cm4gQUFSQ0g2NF9CUkVBS19GQVVMVDtcbitcdH1cbitcbitcdHN3aXRjaCAodmFyaWFudCkge1xuK1x0Y2FzZSBBQVJDSDY0X0lOU05fVkFSSUFOVF8zMkJJVDpcbitcdFx0YnJlYWs7XG4rXHRjYXNlIEFBUkNINjRfSU5TTl9WQVJJQU5UXzY0QklUOlxuK1x0XHRpbnNuIHw9IEFBUkNINjRfSU5TTl9TRl9CSVQ7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0cHJfZXJyKFwiJXM6IHVua25vd24gdmFyaWFudCBlbmNvZGluZyAlZFxcblwiLCBfX2Z1bmNfXywgdmFyaWFudCk7XG4rXHRcdHJldHVybiBBQVJDSDY0X0JSRUFLX0ZBVUxUO1xuK1x0fVxuK1xuK1x0aWYgKHNoaWZ0IFx1MDAzYyAwIHx8IHNoaWZ0IFx1MDAzZSA0KSB7XG4rXHRcdHByX2VycihcIiVzOiBpbnZhbGlkIHNoaWZ0IGVuY29kaW5nICVkXFxuXCIsIF9fZnVuY19fLCBzaGlmdCk7XG4rXHRcdHJldHVybiBBQVJDSDY0X0JSRUFLX0ZBVUxUO1xuK1x0fVxuK1xuK1x0aW5zbiA9IGFhcmNoNjRfaW5zbl9lbmNvZGVfcmVnaXN0ZXIoQUFSQ0g2NF9JTlNOX1JFR1RZUEVfUkQsIGluc24sIGRzdCk7XG4rXG4rXHRpbnNuID0gYWFyY2g2NF9pbnNuX2VuY29kZV9yZWdpc3RlcihBQVJDSDY0X0lOU05fUkVHVFlQRV9STiwgaW5zbiwgc3JjKTtcbitcbitcdGluc24gPSBhYXJjaDY0X2luc25fZW5jb2RlX3JlZ2lzdGVyKEFBUkNINjRfSU5TTl9SRUdUWVBFX1JNLCBpbnNuLCByZWcpO1xuK1xuK1x0Lyogb3B0aW9uIGluIGJpdHMgWzE1OjEzXSBhbmQgaW1tMyBpbiBbMTI6MTBdIHRvZ2V0aGVyIGZpbGwgSU1NXzYgKi9cbitcdHJldHVybiBhYXJjaDY0X2luc25fZW5jb2RlX2ltbWVkaWF0ZShBQVJDSDY0X0lOU05fSU1NXzYsIGluc24sXG4rXHRcdFx0XHRcdCAgICAgKGV4dGVuZCBcdTAwM2NcdTAwM2MgMykgfCBzaGlmdCk7XG4rfVxuK1xuIHUzMiBhYXJjaDY0X2luc25fZ2VuX2RhdGExKGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIGRzdCxcbiBcdFx0XHQgICBlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBzcmMsXG4gXHRcdFx0ICAgZW51bSBhYXJjaDY0X2luc25fdmFyaWFudCB2YXJpYW50LFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXQuaCBiL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXQuaFxuaW5kZXggZDEzZGU0MjIyY2ZiNy4uYjJmZTZlNmRjZjQ0NyAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXQuaFxuKysrIGIvYXJjaC9hcm02NC9uZXQvYnBmX2ppdC5oXG5AQCAtMjQzLDYgKzI0MywxNyBAQFxuIC8qIFJuIC0gUm07IHNldCBjb25kaXRpb24gZmxhZ3MgKi9cbiAjZGVmaW5lIEE2NF9DTVAoc2YsIFJuLCBSbSkgQTY0X1NVQlMoc2YsIEE2NF9aUiwgUm4sIFJtKVxuIFxuKy8qIEFkZC9zdWJ0cmFjdCAoZXh0ZW5kZWQgcmVnaXN0ZXIpICovXG4rI2RlZmluZSBBNjRfQUREU1VCX0VSRUcoc2YsIFJkLCBSbiwgUm0sIGV4dCwgc2hpZnQsIHR5cGUpIFxcXG4rXHRhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnKFJkLCBSbiwgUm0sIFxcXG4rXHRcdEFBUkNINjRfSU5TTl9FWFRFTkRfIyNleHQsIHNoaWZ0LCBBNjRfVkFSSUFOVChzZiksIFxcXG4rXHRcdEFBUkNINjRfSU5TTl9BRFNCXyMjdHlwZSlcbisvKiBSZCA9IFJuICsgKEVYVChSbSkgXHUwMDNjXHUwMDNjIHNoaWZ0KSAqL1xuKyNkZWZpbmUgQTY0X0FERF9FWFQoc2YsIFJkLCBSbiwgUm0sIGV4dCwgc2hpZnQpIFxcXG4rXHRBNjRfQUREU1VCX0VSRUcoc2YsIFJkLCBSbiwgUm0sIGV4dCwgc2hpZnQsIEFERClcbisvKiBSZCA9IFJuICsgKHUzMilSbSAqL1xuKyNkZWZpbmUgQTY0X0FERF9VWFRXKFJkLCBSbiwgUm0pIEE2NF9BRERfRVhUKDEsIFJkLCBSbiwgUm0sIFVYVFcsIDApXG4rXG4gLyogRGF0YS1wcm9jZXNzaW5nICgxIHNvdXJjZSkgKi9cbiAjZGVmaW5lIEE2NF9EQVRBMShzZiwgUmQsIFJuLCB0eXBlKSBhYXJjaDY0X2luc25fZ2VuX2RhdGExKFJkLCBSbiwgXFxcbiBcdEE2NF9WQVJJQU5UKHNmKSwgQUFSQ0g2NF9JTlNOX0RBVEExXyMjdHlwZSlcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jXG5pbmRleCA3NGI0MDgzNzkxZGEzLi5jMThlMDA1YTQxZGJlIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmNcbisrKyBiL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jXG5AQCAtMTI1Niw2ICsxMjU2LDQzIEBAIHN0YXRpYyB2b2lkIGVtaXRfc3RhY2tfYXJnX3N0b3JlX2ltbShzMzIgaW1tLCBzMTYgYnBmX29mZiwgY29uc3QgdTggdG1wLCBzdHJ1Y3RcbiBcdH1cbiB9XG4gXG4rLypcbisgKiBSZWJhc2UgdGhlIF9fYXJlbmEgYXJncyBvZiBhIGtmdW5jIGNhbGwgdG8gYXJlbmEga2VybmVsIGFkZHJlc3NlcyxcbisgKiB4TiA9IGtlcm5fdm1fc3RhcnQgKyAodTMyKXhOLCB3aXRoIHRoZSBhcmVuYSBiYXNlIHJlZ2lzdGVyIGhvbGRpbmdcbisgKiBrZXJuX3ZtX3N0YXJ0LiBBIG51bGxhYmxlIGFyZyBwcmVzZXJ2ZXMgTlVMTCBieSBza2lwcGluZyB0aGUgYWRkLCB0ZXN0ZWRcbisgKiBvbiB0aGUgdHJ1bmNhdGVkIHZhbHVlIGFzIGFyZW5hIE5VTEwgaXMgb2Zmc2V0IDAuXG4rICovXG4rc3RhdGljIGludCBlbWl0X2tmdW5jX2FyZW5hX2FyZ3Moc3RydWN0IGppdF9jdHggKmN0eCwgY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuK3tcbitcdGNvbnN0IHU4IGFyZW5hX3ZtX2Jhc2UgPSBicGYyYTY0W0FSRU5BX1ZNX1NUQVJUXTtcbitcdGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqZm07XG4rXHRpbnQgaTtcbitcbitcdGZtID0gYnBmX2ppdF9maW5kX2tmdW5jX21vZGVsKGN0eC1cdTAwM2Vwcm9nLCBpbnNuKTtcbitcdGlmICghZm0pXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbWluX3QoaW50LCBmbS1cdTAwM2Vucl9hcmdzLCBNQVhfQlBGX0ZVTkNfUkVHX0FSR1MpOyBpKyspIHtcbitcdFx0Y29uc3QgdTggcmVnID0gYnBmMmE2NFtCUEZfUkVHXzEgKyBpXTtcbitcdFx0dTggZmxhZ3MgPSBmbS1cdTAwM2VhcmdfZmxhZ3NbaV07XG4rXG4rXHRcdGlmICghKGZsYWdzIFx1MDAyNiBCVEZfRk1PREVMX0FSRU5BX0FSRykpXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdGlmIChXQVJOX09OX09OQ0UoIWN0eC1cdTAwM2VhcmVuYV92bV9zdGFydCkpXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRcdGlmIChmbGFncyBcdTAwMjYgQlRGX0ZNT0RFTF9OVUxMQUJMRV9BUkcpIHtcbitcdFx0XHQvKiAzMi1iaXQgbW92IGNsZWFycyB0aGUgdXBwZXIgMzIgYml0cyAqL1xuK1x0XHRcdGVtaXQoQTY0X01PVigwLCByZWcsIHJlZyksIGN0eCk7XG4rXHRcdFx0Lyogc2tpcCB0aGUgYWRkIHNvIHRoYXQgTlVMTCBzdGF5cyBOVUxMICovXG4rXHRcdFx0ZW1pdChBNjRfQ0JaKDAsIHJlZywgMiksIGN0eCk7XG4rXHRcdH1cbitcdFx0ZW1pdChBNjRfQUREX1VYVFcocmVnLCBhcmVuYV92bV9iYXNlLCByZWcpLCBjdHgpO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIC8qIEpJVHMgYW4gZUJQRiBpbnN0cnVjdGlvbi5cbiAgKiBSZXR1cm5zOlxuICAqIDAgIC0gc3VjY2Vzc2Z1bGx5IEpJVGVkIGFuIDgtYnl0ZSBlQlBGIGluc3RydWN0aW9uLlxuQEAgLTE2NzgsNiArMTcxNSwxMSBAQCBzdGF0aWMgaW50IGJ1aWxkX2luc24oY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9pbnNuXG4gXHRcdFx0XHRcdCAgICBcdTAwMjZmdW5jX2FkZHIsIFx1MDAyNmZ1bmNfYWRkcl9maXhlZCk7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0aWYgKGluc24tXHUwMDNlc3JjX3JlZyA9PSBCUEZfUFNFVURPX0tGVU5DX0NBTEwpIHtcbitcdFx0XHRyZXQgPSBlbWl0X2tmdW5jX2FyZW5hX2FyZ3MoY3R4LCBpbnNuKTtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0cmV0dXJuIHJldDtcbitcdFx0fVxuIFx0XHRlbWl0X2NhbGwoZnVuY19hZGRyLCBjdHgpO1xuIFx0XHQvKlxuIFx0XHQgKiBDYWxsIHRvIGFyY2hfYnBmX3RpbWVkX21heV9nb3RvKCkgaXMgZW1pdHRlZCBieSB0aGVcbkBAIC0yMzUxLDYgKzIzOTMsMTEgQEAgYm9vbCBicGZfaml0X3N1cHBvcnRzX3N0YWNrX2FyZ3Modm9pZClcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbitib29sIGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncyh2b2lkKVxuK3tcbitcdHJldHVybiB0cnVlO1xuK31cbitcbiB2b2lkICpicGZfYXJjaF90ZXh0X2NvcHkodm9pZCAqZHN0LCB2b2lkICpzcmMsIHNpemVfdCBsZW4pXG4ge1xuIFx0aWYgKCFhYXJjaDY0X2luc25fY29weShkc3QsIHNyYywgbGVuKSlcbkBAIC0yNTI0LDM0ICsyNTcxLDc2IEBAIHN0YXRpYyB2b2lkIGNsZWFyX2dhcmJhZ2Uoc3RydWN0IGppdF9jdHggKmN0eCwgaW50IHJlZywgaW50IGVmZmVjdGl2ZV9ieXRlcylcbiBcdH1cbiB9XG4gXG4rLypcbisgKiBDb252ZXJ0IGFuIGFyZW5hIGtlcm5lbCBhZGRyZXNzIGludG8gdGhlIGFyZW5hIHBvaW50ZXIgZm9ybSBvbiBpdHMgd2F5IGludG9cbisgKiB0aGUgQlBGIGN0eCwgZHN0ID0gKHUzMikoc3JjIC0ga2Vybl92bV9zdGFydCksIHdpdGggQGJhc2VfbG8gaG9sZGluZyB0aGUgbG93XG4rICogMzIgYml0cyBvZiBrZXJuX3ZtX3N0YXJ0LiBBIG51bGxhYmxlIGFyZyBwcmVzZXJ2ZXMgTlVMTCwgdGVzdGVkIG9uIHRoZSBmdWxsXG4rICogNjQtYml0IGtlcm5lbCBwb2ludGVyLiBUaGUgMzItYml0IHN1YnRyYWN0aW9uIGJvdGggdHJ1bmNhdGVzIGFuZCBjbGVhcnMgdGhlXG4rICogdXBwZXIgaGFsZiwgc28gdGhlIHN0b3JlZCB2YWx1ZSBzYXRpc2ZpZXMgdGhlIEpJVCBpbnZhcmlhbnQgZm9yIGFyZW5hXG4rICogcG9pbnRlciByZWdpc3RlcnMuXG4rICovXG4rc3RhdGljIHZvaWQgZW1pdF9hcmVuYV9hcmdfY29udihzdHJ1Y3Qgaml0X2N0eCAqY3R4LCB1OCBkc3QsIHU4IHNyYywgYm9vbCBudWxsYWJsZSwgdTggYmFzZV9sbylcbit7XG4rXHRpZiAobnVsbGFibGUpIHtcbitcdFx0aWYgKGRzdCAhPSBzcmMpXG4rXHRcdFx0ZW1pdChBNjRfTU9WKDEsIGRzdCwgc3JjKSwgY3R4KTtcbitcdFx0Lyogc2tpcCB0aGUgc3VidHJhY3Rpb24gc28gdGhhdCBOVUxMIHN0YXlzIE5VTEwgKi9cbitcdFx0ZW1pdChBNjRfQ0JaKDEsIGRzdCwgMiksIGN0eCk7XG4rXHRcdHNyYyA9IGRzdDtcbitcdH1cbitcdGVtaXQoQTY0X1NVQigwLCBkc3QsIHNyYywgYmFzZV9sbyksIGN0eCk7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHNhdmVfYXJncyhzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBpbnQgYmFyZ3Nfb2ZmLCBpbnQgb2FyZ3Nfb2ZmLFxuLVx0XHQgICAgICBjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sXG4tXHRcdCAgICAgIGNvbnN0IHN0cnVjdCBhcmdfYXV4ICphLFxuLVx0XHQgICAgICBib29sIGZvcl9jYWxsX29yaWdpbilcbitcdFx0ICAgICAgY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCBjb25zdCBzdHJ1Y3QgYXJnX2F1eCAqYSxcbitcdFx0ICAgICAgYm9vbCBmb3JfY2FsbF9vcmlnaW4sIGJvb2wgaXNfc3RydWN0X29wcywgdTY0IGFyZW5hX2Jhc2UpXG4ge1xuLVx0aW50IGk7XG4tXHRpbnQgcmVnO1xuLVx0aW50IGRvZmY7XG4tXHRpbnQgc29mZjtcbi1cdGludCBzbG90cztcbiBcdHU4IHRtcCA9IGJwZjJhNjRbVE1QX1JFR18xXTtcbitcdHU4IGJhc2VfbG8gPSBicGYyYTY0W1RNUF9SRUdfMl07XG4rXHRpbnQgaSwgcmVnLCBkb2ZmLCBzb2ZmLCBzbG90cztcbitcbitcdC8qIG9ubHkgdGhlIGxvdyAzMiBiaXRzIG9mIHRoZSBiYXNlIHRha2UgcGFydCBpbiB0aGUgc3VidHJhY3Rpb24gKi9cbitcdGlmIChhcmVuYV9iYXNlKVxuK1x0XHRlbWl0X2E2NF9tb3ZfaSgwLCBiYXNlX2xvLCAoczMyKSh1MzIpYXJlbmFfYmFzZSwgY3R4KTtcbiBcbiBcdC8qIHN0b3JlIGFyZ3VtZW50cyB0byB0aGUgc3RhY2sgZm9yIHRoZSBicGYgcHJvZ3JhbSwgb3IgcmVzdG9yZVxuIFx0ICogYXJndW1lbnRzIGZyb20gc3RhY2sgZm9yIHRoZSBvcmlnaW5hbCBmdW5jdGlvblxuIFx0ICovXG4tXHRmb3IgKHJlZyA9IDA7IHJlZyBcdTAwM2MgYS1cdTAwM2VyZWdzX2Zvcl9hcmdzOyByZWcrKykge1xuLVx0XHRlbWl0KGZvcl9jYWxsX29yaWdpbiA/XG4tXHRcdCAgICAgQTY0X0xEUjY0SShyZWcsIEE2NF9TUCwgYmFyZ3Nfb2ZmKSA6XG4tXHRcdCAgICAgQTY0X1NUUjY0SShyZWcsIEE2NF9TUCwgYmFyZ3Nfb2ZmKSxcbi1cdFx0ICAgICBjdHgpO1xuLVx0XHRiYXJnc19vZmYgKz0gODtcbitcdGZvciAoaSA9IDAsIHJlZyA9IDA7IGkgXHUwMDNjIGEtXHUwMDNlYXJnc19pbl9yZWdzOyBpKyspIHtcbitcdFx0Ym9vbCBhcmVuYV9hcmcgPSBhcmVuYV9iYXNlIFx1MDAyNlx1MDAyNiAobS1cdTAwM2VhcmdfZmxhZ3NbaV0gXHUwMDI2IEJURl9GTU9ERUxfQVJFTkFfQVJHKTtcbitcdFx0Ym9vbCBudWxsYWJsZSA9IG0tXHUwMDNlYXJnX2ZsYWdzW2ldIFx1MDAyNiBCVEZfRk1PREVMX05VTExBQkxFX0FSRztcbitcbitcdFx0c2xvdHMgPSAobS1cdTAwM2Vhcmdfc2l6ZVtpXSArIDcpIC8gODtcbitcdFx0d2hpbGUgKHNsb3RzLS0gXHUwMDNlIDApIHtcbitcdFx0XHRpZiAoZm9yX2NhbGxfb3JpZ2luKSB7XG4rXHRcdFx0XHRlbWl0KEE2NF9MRFI2NEkocmVnLCBBNjRfU1AsIGJhcmdzX29mZiksIGN0eCk7XG4rXHRcdFx0fSBlbHNlIGlmIChhcmVuYV9hcmcpIHtcbitcdFx0XHRcdGVtaXRfYXJlbmFfYXJnX2NvbnYoY3R4LCB0bXAsIHJlZywgbnVsbGFibGUsIGJhc2VfbG8pO1xuK1x0XHRcdFx0ZW1pdChBNjRfU1RSNjRJKHRtcCwgQTY0X1NQLCBiYXJnc19vZmYpLCBjdHgpO1xuK1x0XHRcdH0gZWxzZSB7XG4rXHRcdFx0XHRlbWl0KEE2NF9TVFI2NEkocmVnLCBBNjRfU1AsIGJhcmdzX29mZiksIGN0eCk7XG4rXHRcdFx0fVxuK1x0XHRcdHJlZysrO1xuK1x0XHRcdGJhcmdzX29mZiArPSA4O1xuK1x0XHR9XG4gXHR9XG4gXG4tXHRzb2ZmID0gMzI7IC8qIG9uIHN0YWNrIGFyZ3VtZW50cyBzdGFydCBmcm9tIEZQICsgMzIgKi9cbitcdC8qXG4rXHQgKiBPbi1zdGFjayBhcmd1bWVudHMgc3RhcnQgYWJvdmUgdGhlIGZyYW1lKHMpIHB1c2hlZCBieSB0aGUgdHJhbXBvbGluZVxuK1x0ICogcHJvbG9ndWUuIEVudGVyZWQgdGhyb3VnaCB0aGUgZmVudHJ5IGNhbGwgZnJvbSBhIHRyYWNlZCBmdW5jdGlvbiwgdGhlXG4rXHQgKiBwcm9sb2d1ZSBzYXZlcyBib3RoIHRoZSBwYXJlbnQgKEZQL3g5KSBhbmQgdGhlIHRyYWNlZCBmdW5jdGlvblxuK1x0ICogKEZQL0xSKSBmcmFtZXMsIHNvIHRoZSBhcmd1bWVudHMgc3RhcnQgYXQgRlAgKyAzMi4gQSBzdHJ1Y3Rfb3BzXG4rXHQgKiBjYWxsYmFjayBpcyBjYWxsZWQgaW5kaXJlY3RseSBhbmQgb25seSB0aGUgRlAvTFIgZnJhbWUgaXMgc2F2ZWQsIHNvXG4rXHQgKiB0aGV5IHN0YXJ0IGF0IEZQICsgMTYuXG4rXHQgKi9cbitcdHNvZmYgPSBpc19zdHJ1Y3Rfb3BzID8gMTYgOiAzMjtcbiBcdGRvZmYgPSAoZm9yX2NhbGxfb3JpZ2luID8gb2FyZ3Nfb2ZmIDogYmFyZ3Nfb2ZmKTtcbiBcbiBcdC8qIHNhdmUgb24gc3RhY2sgYXJndW1lbnRzICovXG4gXHRmb3IgKGkgPSBhLVx1MDAzZWFyZ3NfaW5fcmVnczsgaSBcdTAwM2MgbS1cdTAwM2Vucl9hcmdzOyBpKyspIHtcbitcdFx0Ym9vbCBhcmVuYV9hcmcgPSBhcmVuYV9iYXNlIFx1MDAyNlx1MDAyNiAobS1cdTAwM2VhcmdfZmxhZ3NbaV0gXHUwMDI2IEJURl9GTU9ERUxfQVJFTkFfQVJHKTtcbitcdFx0Ym9vbCBudWxsYWJsZSA9IG0tXHUwMDNlYXJnX2ZsYWdzW2ldIFx1MDAyNiBCVEZfRk1PREVMX05VTExBQkxFX0FSRztcbitcbiBcdFx0c2xvdHMgPSAobS1cdTAwM2Vhcmdfc2l6ZVtpXSArIDcpIC8gODtcbiBcdFx0LyogdmVyaWZpZXIgZW5zdXJlcyBhcmdfc2l6ZSBcdTAwM2M9IDE2LCBzbyBzbG90cyBlcXVhbHMgMSBvciAyICovXG4gXHRcdHdoaWxlIChzbG90cy0tIFx1MDAzZSAwKSB7XG5AQCAtMjU2MSw2ICsyNjUwLDE1IEBAIHN0YXRpYyB2b2lkIHNhdmVfYXJncyhzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBpbnQgYmFyZ3Nfb2ZmLCBpbnQgb2FyZ3Nfb2ZmLFxuIFx0XHRcdCAqL1xuIFx0XHRcdGlmIChzbG90cyA9PSAwIFx1MDAyNlx1MDAyNiAhZm9yX2NhbGxfb3JpZ2luKVxuIFx0XHRcdFx0Y2xlYXJfZ2FyYmFnZShjdHgsIHRtcCwgbS1cdTAwM2Vhcmdfc2l6ZVtpXSAlIDgpO1xuK1x0XHRcdC8qXG4rXHRcdFx0ICogTm8gZ3VhcmQgb24gZm9yX2NhbGxfb3JpZ2luIGhlcmU6IG9ubHkgdGhlIGluZGlyZWN0XG4rXHRcdFx0ICogdHJhbXBvbGluZSBpcyBnaXZlbiBhIGJhc2UsIGFuZCBpdCBuZXZlciBjYWxscyB0aGVcbitcdFx0XHQgKiBvcmlnaW5hbCBmdW5jdGlvbiwgc28gYXJndW1lbnRzIGFyZSBuZXZlciBjb252ZXJ0ZWRcbitcdFx0XHQgKiBvbiB0aGVpciB3YXkgYmFjayBvdXQgdG8gaXQuIFNlZSB0aGUgV0FSTl9PTl9PTkNFKClcbitcdFx0XHQgKiBpbiBwcmVwYXJlX3RyYW1wb2xpbmUoKS5cbitcdFx0XHQgKi9cbitcdFx0XHRpZiAoYXJlbmFfYXJnKVxuK1x0XHRcdFx0ZW1pdF9hcmVuYV9hcmdfY29udihjdHgsIHRtcCwgdG1wLCBudWxsYWJsZSwgYmFzZV9sbyk7XG4gXHRcdFx0ZW1pdChBNjRfU1RSNjRJKHRtcCwgQTY0X1NQLCBkb2ZmKSwgY3R4KTtcbiBcdFx0XHRzb2ZmICs9IDg7XG4gXHRcdFx0ZG9mZiArPSA4O1xuQEAgLTI2MjAsOCArMjcxOCwyMSBAQCBzdGF0aWMgaW50IHByZXBhcmVfdHJhbXBvbGluZShzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSxcbiBcdGJvb2wgaXNfc3RydWN0X29wcyA9IGlzX3N0cnVjdF9vcHNfdHJhbXAoZmVudHJ5KTtcbiBcdGludCBjb29raWVfb2ZmLCBjb29raWVfY250LCBjb29raWVfYmFyZ3Nfb2ZmO1xuIFx0aW50IGZzZXNzaW9uX2NudCA9IGJwZl9mc2Vzc2lvbl9jbnQodG5vZGVzKTtcbitcdHU2NCBhcmVuYV9iYXNlO1xuIFx0dTY0IGZ1bmNfbWV0YTtcbiBcbitcdC8qXG4rXHQgKiBGX0lORElSRUNUIGlzIG9ubHkgY29tcGF0aWJsZSB3aXRoIEZfUkVUX0ZFTlRSWV9SRVQsIGl0IGlzIGV4cGxpY2l0bHlcbitcdCAqIGluY29tcGF0aWJsZSB3aXRoIEZfQ0FMTF9PUklHIHwgRl9TS0lQX0ZSQU1FIHwgRl9JUF9BUkcgYmVjYXVzZVxuK1x0ICogQGZ1bmNfYWRkci4gQXJlbmEgY29udmVyc2lvbiByZWxpZXMgb24gdGhpczogYnBmX3RyYW1wX2FyZW5hX2Jhc2UoKVxuK1x0ICogb25seSByZXR1cm5zIGEgYmFzZSBmb3IgdGhlIGluZGlyZWN0IHRyYW1wb2xpbmUsIHdoaWNoIHRoZXJlZm9yZVxuK1x0ICogbmV2ZXIgY2FsbHMgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uIHdpdGggY29udmVydGVkIGFyZ3VtZW50cy5cbitcdCAqL1xuK1x0V0FSTl9PTl9PTkNFKChmbGFncyBcdTAwMjYgQlBGX1RSQU1QX0ZfSU5ESVJFQ1QpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIChmbGFncyBcdTAwMjYgfihCUEZfVFJBTVBfRl9JTkRJUkVDVCB8IEJQRl9UUkFNUF9GX1JFVF9GRU5UUllfUkVUKSkpO1xuK1xuK1x0YXJlbmFfYmFzZSA9IGJwZl90cmFtcF9hcmVuYV9iYXNlKG0sIHRub2RlcywgZmxhZ3MpO1xuK1xuIFx0LyogdHJhbXBvbGluZSBzdGFjayBsYXlvdXQ6XG4gXHQgKiAgICAgICAgICAgICAgICAgICAgWyBwYXJlbnQgaXAgICAgICAgICBdXG4gXHQgKiAgICAgICAgICAgICAgICAgICAgWyBGUCAgICAgICAgICAgICAgICBdXG5AQCAtMjczNyw3ICsyODQ4LDcgQEAgc3RhdGljIGludCBwcmVwYXJlX3RyYW1wb2xpbmUoc3RydWN0IGppdF9jdHggKmN0eCwgc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sXG4gXHRzdG9yZV9mdW5jX21ldGEoY3R4LCBmdW5jX21ldGEsIGZ1bmNfbWV0YV9vZmYpO1xuIFxuIFx0Lyogc2F2ZSBhcmdzIGZvciBicGYgKi9cbi1cdHNhdmVfYXJncyhjdHgsIGJhcmdzX29mZiwgb2FyZ3Nfb2ZmLCBtLCBhLCBmYWxzZSk7XG4rXHRzYXZlX2FyZ3MoY3R4LCBiYXJnc19vZmYsIG9hcmdzX29mZiwgbSwgYSwgZmFsc2UsIGlzX3N0cnVjdF9vcHMsIGFyZW5hX2Jhc2UpO1xuIFxuIFx0Lyogc2F2ZSBjYWxsZWUgc2F2ZWQgcmVnaXN0ZXJzICovXG4gXHRlbWl0KEE2NF9TVFI2NEkoQTY0X1IoMTkpLCBBNjRfU1AsIHJlZ3Nfb2ZmKSwgY3R4KTtcbkBAIC0yNzg1LDggKzI4OTYsOCBAQCBzdGF0aWMgaW50IHByZXBhcmVfdHJhbXBvbGluZShzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSxcbiBcdH1cbiBcbiBcdGlmIChmbGFncyBcdTAwMjYgQlBGX1RSQU1QX0ZfQ0FMTF9PUklHKSB7XG4tXHRcdC8qIHNhdmUgYXJncyBmb3Igb3JpZ2luYWwgZnVuYyAqL1xuLVx0XHRzYXZlX2FyZ3MoY3R4LCBiYXJnc19vZmYsIG9hcmdzX29mZiwgbSwgYSwgdHJ1ZSk7XG4rXHRcdC8qIHRoZSBvcmlnaW5hbCBmdW5jIHRha2VzIGtlcm5lbCBhZGRyZXNzZXMsIG5ldmVyIGNvbnZlcnRlZCBvbmVzICovXG4rXHRcdHNhdmVfYXJncyhjdHgsIGJhcmdzX29mZiwgb2FyZ3Nfb2ZmLCBtLCBhLCB0cnVlLCBpc19zdHJ1Y3Rfb3BzLCAwKTtcbiBcdFx0LyogY2FsbCBvcmlnaW5hbCBmdW5jICovXG4gXHRcdGVtaXQoQTY0X0xEUjY0SShBNjRfUigxMCksIEE2NF9TUCwgcmV0YWRkcl9vZmYpLCBjdHgpO1xuIFx0XHRlbWl0KEE2NF9BRFIoQTY0X0xSLCBBQVJDSDY0X0lOU05fU0laRSAqIDIpLCBjdHgpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3Rfc3RydWN0X29wc19hcmVuYS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9zdHJ1Y3Rfb3BzX2FyZW5hLmNcbmluZGV4IDk0MGVjMmNkYTBkNTIuLjdmOWY1NGJhM2ZiZTUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3N0cnVjdF9vcHNfYXJlbmEuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9zdHJ1Y3Rfb3BzX2FyZW5hLmNcbkBAIC02LDcgKzYsNyBAQFxuICNpbmNsdWRlIFwic3RydWN0X29wc19hcmVuYV9hdHRhY2guc2tlbC5oXCJcbiAjaW5jbHVkZSBcInN0cnVjdF9vcHNfYXJlbmFfZmFpbC5za2VsLmhcIlxuIFxuLSNpZiBkZWZpbmVkKF9feDg2XzY0X18pXG4rI2lmIGRlZmluZWQoX194ODZfNjRfXykgfHwgZGVmaW5lZChfX2FhcmNoNjRfXylcbiAvKlxuICAqIEF0dGFjaCBjYWxsYmFja3Mgd2l0aCBfX2FyZW5hIGFuZCBfX2FyZW5hX19udWxsYWJsZSBhcmd1bWVudHMgYW5kIGRyaXZlXG4gICogdGhlbSB0aHJvdWdoIHRoZSBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYSooKSBrZnVuY3MuXG5AQCAtMTExLDExICsxMTEsMTEgQEAgc3RhdGljIHZvaWQgYXJlbmFfYXJnX2F0dGFjaCh2b2lkKVxuIHZvaWQgc2VyaWFsX3Rlc3Rfc3RydWN0X29wc19hcmVuYSh2b2lkKVxuIHtcbiBcdC8qXG4tXHQgKiBBcmVuYSBzdHJ1Y3Rfb3BzIGFyZ3VtZW50cyBuZWVkIEpJVCBzdXBwb3J0LCBjdXJyZW50bHkgeDg2LTY0IG9ubHkuXG4tXHQgKiBFbHNld2hlcmUgdmVyaWZpY2F0aW9uIGZhaWxzIHdpdGggXCJKSVQgZG9lcyBub3Qgc3VwcG9ydCBhcmVuYVxuLVx0ICogYXJndW1lbnRzXCIsIHNvIHRoZSBwcm9ncmFtcyBjYW5ub3QgZXZlbiBsb2FkLlxuK1x0ICogQXJlbmEgc3RydWN0X29wcyBhcmd1bWVudHMgbmVlZCBKSVQgc3VwcG9ydCwgY3VycmVudGx5IHg4Ni02NCBhbmRcbitcdCAqIGFybTY0IG9ubHkuIEVsc2V3aGVyZSB2ZXJpZmljYXRpb24gZmFpbHMgd2l0aCBcIkpJVCBkb2VzIG5vdCBzdXBwb3J0XG4rXHQgKiBhcmVuYSBhcmd1bWVudHNcIiwgc28gdGhlIHByb2dyYW1zIGNhbm5vdCBldmVuIGxvYWQuXG4gXHQgKi9cbi0jaWYgZGVmaW5lZChfX3g4Nl82NF9fKVxuKyNpZiBkZWZpbmVkKF9feDg2XzY0X18pIHx8IGRlZmluZWQoX19hYXJjaDY0X18pXG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcImFyZW5hX2FyZ1wiKSlcbiBcdFx0YXJlbmFfYXJnKCk7XG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcImFyZW5hX2FyZ19mYWlsXCIpKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuYy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jLmNcbmluZGV4IGNkY2VhODg5ZGE1ODYuLmJmMGQzMDRlMGU1OWMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmMuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jLmNcbkBAIC0yNyw2ICsyNyw3IEBAIHZvbGF0aWxlIHU2NCBzdGFzaDtcbiBcbiBTRUMoXCJzeXNjYWxsXCIpXG4gX19hcmNoX3g4Nl82NFxuK19fYXJjaF9hcm02NFxuIF9fc3VjY2VzcyBfX3JldHZhbCgwKVxuIGludCBhcmVuYV9hcmdfZm9ybXModm9pZCAqY3R4KVxuIHtcbkBAIC03MCw2ICs3MSw3IEBAIGludCBhcmVuYV9hcmdfZm9ybXModm9pZCAqY3R4KVxuICAqL1xuIFNFQyhcInN5c2NhbGxcIilcbiBfX2FyY2hfeDg2XzY0XG4rX19hcmNoX2FybTY0XG4gX19zdWNjZXNzIF9fcmV0dmFsKDApXG4gaW50IGFyZW5hX2FyZ19yZWJhc2Uodm9pZCAqY3R4KVxuIHtcbkBAIC0xMTEsNiArMTEzLDcgQEAgaW50IGFyZW5hX2FyZ19yZWJhc2Uodm9pZCAqY3R4KVxuIFxuIFNFQyhcInN5c2NhbGxcIilcbiBfX2FyY2hfeDg2XzY0XG4rX19hcmNoX2FybTY0XG4gX19zdWNjZXNzIF9fcmV0dmFsKDApXG4gaW50IGFyZW5hX2FyZ3M1KHZvaWQgKmN0eClcbiB7XG5AQCAtMTQyLDYgKzE0NSw3IEBAIGludCBhcmVuYV9hcmdzNSh2b2lkICpjdHgpXG4gXG4gU0VDKFwic3lzY2FsbFwiKVxuIF9fYXJjaF94ODZfNjRcbitfX2FyY2hfYXJtNjRcbiBfX3N1Y2Nlc3MgX19yZXR2YWwoMClcbiBpbnQgYXJlbmFfYXJnX21peGVkKHZvaWQgKmN0eClcbiB7XG5AQCAtMTY5LDYgKzE3Myw3IEBAIGludCBhcmVuYV9hcmdfbWl4ZWQodm9pZCAqY3R4KVxuIC8qIGtlcm5lbC1zaWRlIGZhdWx0cyBvbiB1bnBvcHVsYXRlZCBwYWdlcyByZWNvdmVyIHZpYSB0aGUgc2NyYXRjaCBwYWdlICovXG4gU0VDKFwic3lzY2FsbFwiKVxuIF9fYXJjaF94ODZfNjRcbitfX2FyY2hfYXJtNjRcbiBfX3N1Y2Nlc3MgX19yZXR2YWwoMClcbiBpbnQgYXJlbmFfYXJnX3VucG9wdWxhdGVkKHZvaWQgKmN0eClcbiB7XG5AQCAtMTg5LDYgKzE5NCw3IEBAIGludCBhcmVuYV9hcmdfdW5wb3B1bGF0ZWQodm9pZCAqY3R4KVxuIFxuIFNFQyhcInN5c2NhbGxcIilcbiBfX2FyY2hfeDg2XzY0XG4rX19hcmNoX2FybTY0XG4gX19mYWlsdXJlIF9fbXNnKFwiYXJlbmEgcG9pbnRlciByZXF1aXJlcyBhIHByb2dyYW0gd2l0aCBhbiBhc3NvY2lhdGVkIGFyZW5hXCIpXG4gaW50IGFyZW5hX2FyZ19ub19hcmVuYSh2b2lkICpjdHgpXG4ge1xuQEAgLTE5OCw2ICsyMDQsNyBAQCBpbnQgYXJlbmFfYXJnX25vX2FyZW5hKHZvaWQgKmN0eClcbiBcbiBTRUMoXCJzeXNjYWxsXCIpXG4gX19hcmNoX3g4Nl82NFxuK19fYXJjaF9hcm02NFxuIF9fZmFpbHVyZSBfX21zZyhcImlzIG5vdCBhIHBvaW50ZXIgdG8gYXJlbmEgb3Igc2NhbGFyXCIpXG4gaW50IGFyZW5hX2FyZ19iYWRfcmVnKHZvaWQgKmN0eClcbiB7XG5AQCAtMjEzLDYgKzIyMCw3IEBAIGludCBhcmVuYV9hcmdfYmFkX3JlZyh2b2lkICpjdHgpXG4gXHRkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfU1RBQ0tfQVJHVU1FTlQpXG4gU0VDKFwic3lzY2FsbFwiKVxuIF9fYXJjaF94ODZfNjRcbitfX2FyY2hfYXJtNjRcbiBfX2ZhaWx1cmUgX19tc2coXCJhcmVuYSBwb2ludGVyIGNhbm5vdCBiZSBhIHN0YWNrIGFyZ3VtZW50XCIpXG4gaW50IGFyZW5hX2FyZ19zdGFjayh2b2lkICpjdHgpXG4ge1xuQEAgLTIyMyw2ICsyMzEsNyBAQCBpbnQgYXJlbmFfYXJnX3N0YWNrKHZvaWQgKmN0eClcbiAjZWxzZVxuIFNFQyhcInN5c2NhbGxcIilcbiBfX2FyY2hfeDg2XzY0XG4rX19hcmNoX2FybTY0XG4gX19kZXNjcmlwdGlvbihcImFyZW5hX2FyZ19zdGFjazogbm90IHN1cHBvcnRlZCwgZHVtbXkgdGVzdFwiKVxuIF9fc3VjY2Vzc1xuIGludCBhcmVuYV9hcmdfc3RhY2sodm9pZCAqY3R4KVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuY19qaXQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuY19qaXQuY1xuaW5kZXggYzliOTE4NjYyNjE2Mi4uYjVhMDFjYmMzM2E3MyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuY19qaXQuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jX2ppdC5jXG5AQCAtMzIsNiArMzIsMTAgQEAgX19qaXRlZChcIlx0bW92bFx0JWVkaSwgJWVkaVwiKVxuIF9faml0ZWQoXCJcdGFkZHFcdCVyMTIsICVyZGlcIilcbiBfX2ppdGVkKFwiLi4uXCIpXG4gX19qaXRlZChcIlx0Y2FsbHFcdHt7Lip9fVwiKVxuK19fYXJjaF9hcm02NFxuK19faml0ZWQoXCIuLi5cIilcbitfX2ppdGVkKFwiXHRhZGRcdHgwLCB4MjgsIHcwLCB1eHR3XCIpXG4rX19qaXRlZChcIlx0e3soYmx8bW92KVx0Lip9fVwiKVxuIF9fc3VjY2Vzc1xuIGludCBhcmVuYV9hcmdfaml0X3JlYmFzZSh2b2lkICpjdHgpXG4ge1xuQEAgLTQ4LDYgKzUyLDEyIEBAIF9faml0ZWQoXCJcdHRlc3RsXHQlZWRpLCAlZWRpXCIpXG4gX19qaXRlZChcIlx0amVcdEwwXCIpXG4gX19qaXRlZChcIlx0YWRkcVx0JXIxMiwgJXJkaVwiKVxuIF9faml0ZWQoXCJMMDpcdGNhbGxxXHR7ey4qfX1cIilcbitfX2FyY2hfYXJtNjRcbitfX2ppdGVkKFwiLi4uXCIpXG4rX19qaXRlZChcIlx0bW92XHR3MCwgdzBcIilcbitfX2ppdGVkKFwiXHRjYnpcdHcwLCBMMFwiKVxuK19faml0ZWQoXCJcdGFkZFx0eDAsIHgyOCwgdzAsIHV4dHdcIilcbitfX2ppdGVkKFwiTDA6XHR7ey4qfX1cIilcbiBfX3N1Y2Nlc3NcbiBpbnQgYXJlbmFfYXJnX2ppdF9udWxsYWJsZSh2b2lkICpjdHgpXG4ge1xuQEAgLTcyLDYgKzgyLDE2IEBAIF9faml0ZWQoXCJcdHRlc3RsXHQlcjhkLCAlcjhkXCIpXG4gX19qaXRlZChcIlx0amVcdEwwXCIpXG4gX19qaXRlZChcIlx0YWRkcVx0JXIxMiwgJXI4XCIpXG4gX19qaXRlZChcIkwwOlx0Y2FsbHFcdHt7Lip9fVwiKVxuK19fYXJjaF9hcm02NFxuK19faml0ZWQoXCIuLi5cIilcbitfX2ppdGVkKFwiXHRhZGRcdHgwLCB4MjgsIHcwLCB1eHR3XCIpXG4rX19qaXRlZChcIlx0YWRkXHR4MSwgeDI4LCB3MSwgdXh0d1wiKVxuK19faml0ZWQoXCJcdGFkZFx0eDIsIHgyOCwgdzIsIHV4dHdcIilcbitfX2ppdGVkKFwiXHRhZGRcdHgzLCB4MjgsIHczLCB1eHR3XCIpXG4rX19qaXRlZChcIlx0bW92XHR3NCwgdzRcIilcbitfX2ppdGVkKFwiXHRjYnpcdHc0LCBMMFwiKVxuK19faml0ZWQoXCJcdGFkZFx0eDQsIHgyOCwgdzQsIHV4dHdcIilcbitfX2ppdGVkKFwiTDA6XHR7ey4qfX1cIilcbiBfX3N1Y2Nlc3NcbiBpbnQgYXJlbmFfYXJnX2ppdF9hcmdzNSh2b2lkICpjdHgpXG4ge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJ1Y3Rfb3BzX2FyZW5hLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RydWN0X29wc19hcmVuYS5jXG5pbmRleCBiYTA0YzczZDhkOTY3Li44YWE4NjM5ZGY5MWYwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfYXJlbmEuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfYXJlbmEuY1xuQEAgLTU5LDExICs1OSwyOCBAQCBpbnQgdGVzdF9hcmVuYV9zdGFja19jYih1bnNpZ25lZCBsb25nIGxvbmcgKmN0eClcbiBcdHJldHVybiAwO1xuIH1cbiBcbitTRUMoXCJzdHJ1Y3Rfb3BzL3Rlc3RfYXJlbmFfbXVsdGlzbG90XCIpXG4raW50IHRlc3RfYXJlbmFfbXVsdGlzbG90X2NiKHVuc2lnbmVkIGxvbmcgbG9uZyAqY3R4KVxuK3tcbitcdHU2NCBfX2FyZW5hICpwdHIgPSAodTY0IF9fYXJlbmEgKiljdHhbMl07XG4rXG4rXHRhcmVuYV90b3VjaCsrO1xuK1x0LypcbitcdCAqIFRoZSAxNi1ieXRlIHN0cnVjdCBvY2N1cGllcyBjdHhbMF0gYW5kIGN0eFsxXSwgc28gQHB0ciBpcyBhcmd1bWVudFxuK1x0ICogb25lIGJ1dCBzbG90IHR3by4gR2V0dGluZyB0aGF0IHdyb25nIGhhbmRzIHRoZSBjYWxsYmFjayBhIHNjYWxhci5cbitcdCAqL1xuK1x0aWYgKGN0eFswXSAhPSAxMSB8fCBjdHhbMV0gIT0gMjIpXG4rXHRcdHJldHVybiAweGJhZDtcbitcdCpwdHIgKz0gMTtcbitcdHJldHVybiAwO1xuK31cbitcbiBTRUMoXCIuc3RydWN0X29wcy5saW5rXCIpXG4gc3RydWN0IGJwZl90ZXN0bW9kX29wczMgdGVzdG1vZF9hcmVuYSA9IHtcbiBcdC50ZXN0X2FyZW5hID0gKHZvaWQgKil0ZXN0X2FyZW5hX2NiLFxuIFx0LnRlc3RfYXJlbmFfbnVsbGFibGUgPSAodm9pZCAqKXRlc3RfYXJlbmFfbnVsbGFibGVfY2IsXG4gXHQudGVzdF9hcmVuYV9zdGFjayA9ICh2b2lkICopdGVzdF9hcmVuYV9zdGFja19jYixcbitcdC50ZXN0X2FyZW5hX211bHRpc2xvdCA9ICh2b2lkICopdGVzdF9hcmVuYV9tdWx0aXNsb3RfY2IsXG4gfTtcbiBcbiBTRUMoXCJzeXNjYWxsXCIpXG5AQCAtMTA5LDYgKzEyNiwxMyBAQCBpbnQgdHJpZ2dlcih2b2lkICpjdHgpXG4gXHRpZiAoKnZhbCAhPSA0NClcbiBcdFx0cmV0dXJuIDk7XG4gXG4rXHQvKiBhIG11bHRpLXNsb3QgYXJnIHByZWNlZGVzIHRoZSBhcmVuYSBwb2ludGVyIGhlcmUgKi9cbitcdHJldCA9IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX211bHRpc2xvdCgodTY0ICopdmFsKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiAxMDtcbitcdGlmICgqdmFsICE9IDQ1KVxuK1x0XHRyZXR1cm4gMTE7XG4rXG4gXHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKXZhbCwgMSk7XG4gI2VuZGlmXG4gXHRyZXR1cm4gMDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuY1xuaW5kZXggYTYxMzNmNzUyMWYzNC4uOTM2NmEzYzU3OGYxMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmNcbkBAIC00MDIsMTIgKzQwMiwxOSBAQCBzdGF0aWMgaW50IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmFfc3RhY2sodTY0IGEsIHU2NCBiLCB1NjQgYywgdTY0IGQsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGludCBicGZfdGVzdG1vZF9vcHMzX190ZXN0X2FyZW5hX211bHRpc2xvdChzdHJ1Y3QgYnBmX3Rlc3Rtb2RfYXJlbmFfcGFpciBwLFxuK1x0XHRcdFx0XHRcdCAgdTY0ICpwdHJfX2FyZW5hKVxuK3tcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgc3RydWN0IGJwZl90ZXN0bW9kX29wczMgX19icGZfdGVzdG1vZF9vcHMzID0ge1xuIFx0LnRlc3RfMSA9IGJwZl90ZXN0bW9kX3Rlc3RfMyxcbiBcdC50ZXN0XzIgPSBicGZfdGVzdG1vZF90ZXN0XzQsXG4gXHQudGVzdF9hcmVuYSA9IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmEsXG4gXHQudGVzdF9hcmVuYV9udWxsYWJsZSA9IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmFfbnVsbGFibGUsXG4gXHQudGVzdF9hcmVuYV9zdGFjayA9IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmFfc3RhY2ssXG4rXHQudGVzdF9hcmVuYV9tdWx0aXNsb3QgPSBicGZfdGVzdG1vZF9vcHMzX190ZXN0X2FyZW5hX211bHRpc2xvdCxcbiB9O1xuIFxuIHN0YXRpYyB2b2lkIGJwZl90ZXN0bW9kX3Rlc3Rfc3RydWN0X29wczModm9pZClcbkBAIC00NDEsNiArNDQ4LDEzIEBAIF9fYnBmX2tmdW5jIGludCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9zdGFjayh1NjQgKnB0cl9fYXJlbmEpXG4gXHRyZXR1cm4gc3Rfb3BzMy1cdTAwM2V0ZXN0X2FyZW5hX3N0YWNrKDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIHB0cl9fYXJlbmEpO1xuIH1cbiBcbitfX2JwZl9rZnVuYyBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfbXVsdGlzbG90KHU2NCAqcHRyX19hcmVuYSlcbit7XG4rXHRzdHJ1Y3QgYnBmX3Rlc3Rtb2RfYXJlbmFfcGFpciBwID0geyAuYSA9IDExLCAuYiA9IDIyIH07XG4rXG4rXHRyZXR1cm4gc3Rfb3BzMy1cdTAwM2V0ZXN0X2FyZW5hX211bHRpc2xvdChwLCBwdHJfX2FyZW5hKTtcbit9XG4rXG4gc3RydWN0IGJwZl90ZXN0bW9kX2J0Zl90eXBlX3RhZ18xIHtcbiBcdGludCBhO1xuIH07XG5AQCAtODUyLDYgKzg2Niw3IEBAIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF8yKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYSlcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfbnVsbGFibGUpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX3N0YWNrKVxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9tdWx0aXNsb3QpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19nZXRfZGVmYXVsdF90cnVzdGVkX3B0cl90ZXN0KTtcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX3B1dF9kZWZhdWx0X3RydXN0ZWRfcHRyX3Rlc3QpO1xuIEJURl9LRlVOQ1NfRU5EKGJwZl90ZXN0bW9kX2NvbW1vbl9rZnVuY19pZHMpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmhcbmluZGV4IDMzZjJhZjViNzA4NTcuLjIxMGI5MTkyOTBjYzIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5oXG5AQCAtMTAzLDYgKzEwMywxMiBAQCBzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzMiB7XG4gXHRpbnQgKCp0ZXN0XzEpKHZvaWQpO1xuIH07XG4gXG4rLyogMTYgYnl0ZXMsIHNvIGl0IHRha2VzIHR3byBhcmd1bWVudCBzbG90cyB3aGVuIHBhc3NlZCBieSB2YWx1ZSAqL1xuK3N0cnVjdCBicGZfdGVzdG1vZF9hcmVuYV9wYWlyIHtcbitcdHU2NCBhO1xuK1x0dTY0IGI7XG4rfTtcbitcbiBzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzMyB7XG4gXHRpbnQgKCp0ZXN0XzEpKHZvaWQpO1xuIFx0aW50ICgqdGVzdF8yKSh2b2lkKTtcbkBAIC0xMTIsNiArMTE4LDggQEAgc3RydWN0IGJwZl90ZXN0bW9kX29wczMge1xuIFx0LyogZW5vdWdoIGxlYWRpbmcgYXJncyB0byBmb3JjZSBAcHRyIG9udG8gdGhlIHN0YWNrIG9uIHg4NiBhbmQgYXJtNjQgKi9cbiBcdGludCAoKnRlc3RfYXJlbmFfc3RhY2spKHU2NCBhLCB1NjQgYiwgdTY0IGMsIHU2NCBkLCB1NjQgZSwgdTY0IGYsXG4gXHRcdFx0XHR1NjQgZywgdTY0IGgsIHU2NCAqcHRyKTtcbitcdC8qIGEgbXVsdGktc2xvdCBsZWFkaW5nIGFyZywgc28gQHB0ciBpcyBub3QgYXQgdGhlIHNsb3QgaXRzIGFyZyBpbmRleCBzdWdnZXN0cyAqL1xuK1x0aW50ICgqdGVzdF9hcmVuYV9tdWx0aXNsb3QpKHN0cnVjdCBicGZfdGVzdG1vZF9hcmVuYV9wYWlyIHAsIHU2NCAqcHRyKTtcbiB9O1xuIFxuIHN0cnVjdCBzdF9vcHNfYXJncyB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kX2tmdW5jLmhcbmluZGV4IGM0MzgzYWNiNTNjMTEuLjdkODEwNzBlZWZlN2YgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oXG5AQCAtMTIzLDYgKzEyMyw3IEBAIHZvaWQgYnBmX3Rlc3Rtb2RfdGVzdF9tb2Rfa2Z1bmMoaW50IGkpIF9fa3N5bTtcbiBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmEoX191NjQgKnB0cl9fYXJlbmEpIF9fa3N5bTtcbiBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfbnVsbGFibGUoX191NjQgKnB0cl9fYXJlbmFfX251bGxhYmxlKSBfX2tzeW07XG4gaW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX3N0YWNrKF9fdTY0ICpwdHJfX2FyZW5hKSBfX2tzeW07XG4raW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX211bHRpc2xvdChfX3U2NCAqcHRyX19hcmVuYSkgX19rc3ltO1xuIFxuIF9fdTY0IGJwZl9rZnVuY19jYWxsX3Rlc3QxKHN0cnVjdCBzb2NrICpzaywgX191MzIgYSwgX191NjQgYixcbiBcdFx0XHRcdF9fdTMyIGMsIF9fdTY0IGQpIF9fa3N5bTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjUxOjQwLjI3MDMzNDc4NVoiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjg3NDE4OTM4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50OiBBcm02NCBCUEYgSklUIEFyZW5hIEFyZ3VtZW50IFN1cHBvcnQqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgYWRkaW5nIEJQRiBhcmVuYSBhcmd1bWVudCBzdXBwb3J0IHRvIHRoZSBhcm02NCBKSVQgY29tcGlsZXIuIE15IGluaXRpYWwgdGhvdWdodCBpcywgXCJPa2F5LCB0aGF0J3MgaW5zdHJ1Y3Rpb24gZW1pc3Npb24sIG5vdCBkYXRhIHN0cnVjdHVyZXMsIHNvIEtNU0FOIGlzIHByb2JhYmx5IG5vdCByZWxldmFudCwgYnV0IGxldCdzIGJlIHN1cmUuXCJcblxuVGhlIHBhdGNoIG1vZGlmaWVzIHNldmVyYWwgZmlsZXMsIG1vc3RseSBmb2N1c2luZyBvbiBpbnN0cnVjdGlvbiBlbmNvZGluZyBhbmQgdGhlIEpJVCBjb21waWxlciBpdHNlbGYuIEl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgd29yayBpcyBpbiBlbWl0dGluZyB0aGUgY29ycmVjdCBhcm02NCBpbnN0cnVjdGlvbnMgdG8gaGFuZGxlIEJQRiBhcmVuYSBwb2ludGVycyDigJMgYWRkaW5nIG9yIHN1YnRyYWN0aW5nIHRoZSBhcmVuYSBiYXNlIGFkZHJlc3MgZHVyaW5nIEpJVCBjb21waWxhdGlvbi4gSXQncyBlc3NlbnRpYWxseSBhYm91dCBnZW5lcmF0aW5nIHRoZSAqcmlnaHQqIG1hY2hpbmUgY29kZSwgcmF0aGVyIHRoYW4gaGFuZGxpbmcgcmF3IGRhdGEgZGlyZWN0bHkuXG5cbk15IGNvbmNlcm4gaXMgYWx3YXlzIGFyb3VuZCB1bmluaXRpYWxpemVkIG1lbW9yeSwgYnV0IEknbSBub3Qgc2VlaW5nIGFueSByZWQgZmxhZ3MuIFRoZSBjaGFuZ2VzIGFyZSBpc29sYXRlZCB3aXRoaW4gdGhlIEJQRiBKSVQgY29tcGlsZXIgYW5kIHRoZSBzZWxmdGVzdHMuIE5vIG5ldyBrZXJuZWwgc3RydWN0dXJlcyBhcmUgYmVpbmcgcGFzc2VkIHRvIHVzZXIgc3BhY2UuIFRoZXJlIGFyZW4ndCBhbnkgY29tcGxleCBhbGxvY2F0aW9ucyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBUaGVyZSdzIG5vdGhpbmcgbmV3IGJlaW5nIGRpcmVjdGx5IGV4cG9zZWQgdG8gdXNlcnNwYWNlIHRoYXQgc2NyZWFtcyBcInVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdHkuXCJcblxuTm93LCB0aGUgSklUIGNvbXBpbGVyIGdlbmVyYXRlcyBpbnN0cnVjdGlvbnMsIHNvIHRoZXJlIGlzIHRoZSBwb3RlbnRpYWwgZm9yIGxvZ2ljIGVycm9ycyBpbiB0aGUgaW5zdHJ1Y3Rpb24gZ2VuZXJhdGlvbi4gSWYgdGhlcmUncyBhIGJ1ZywgaXQgY291bGQgbGVhZCB0byBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGFjY2VzcyAqd2l0aGluKiB0aGUgSklUZWQgQlBGIGNvZGUuIEhvd2V2ZXIsIEtBU0FOIHNob3VsZCBjYXRjaCB0aGF0LiBUaGlzIGlzbid0IEtNU0FOJ3MgZG9tYWluLiBJbiBmYWN0LCBLTVNBTiBkb2Vzbid0IGV2ZW4gaW5zdHJ1bWVudCBKSVQnZCBjb2RlLiBcblxuTGV0IG1lIGRvdWJsZS1jaGVjayBgYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmNgLiBTcGVjaWZpY2FsbHksIGZ1bmN0aW9ucyBsaWtlIGBlbWl0X2tmdW5jX2FyZW5hX2FyZ3NgLCBgZW1pdF9hcmVuYV9hcmdfY29udmAsIGBzYXZlX2FyZ3NgLCBhbmQgYHByZXBhcmVfdHJhbXBvbGluZWAg4oCTIHRoZXNlIGFyZSB3aGVyZSB0aGUgbWFjaGluZSBjb2RlIGlzIGJlaW5nIGdlbmVyYXRlZC4gSWYgYSBidWcgd2VyZSB0byBleGlzdCBoZXJlLCB3b3VsZCBpdCBsZWFkIHRvIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnk/IE5vLiBLTVNBTiBpc24ndCB0aGUgc29sdXRpb24uIFRoZSBKSVQgY29tcGlsZXIgaXMganVzdCBnZW5lcmF0aW5nIHRoZSBtYWNoaW5lIGNvZGUuIElmIHRoZSBjb2RlIGlzIGJ1Z2d5LCBpdCBpcyBLQVNBTiB0aGF0IGNhbiBkZXRlY3QgaXQsIG5vdCBLTVNBTi5cblxuTGV0IG1lIGxvb2sgY2xvc2VseSBhdCBgc2F2ZV9hcmdzYC4uLiBzcGVjaWZpY2FsbHkgdGhlIHNuaXBwZXQgYmVsb3c6XG5cbmBgYGNcbnN0YXRpYyB2b2lkIHNhdmVfYXJncyhzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBpbnQgYmFyZ3Nfb2ZmLCBpbnQgb2FyZ3Nfb2ZmLFxuXHRcdCAgICAgIGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgY29uc3Qgc3RydWN0IGFyZ19hdXggKmEsXG5cdFx0ICAgICAgYm9vbCBmb3JfY2FsbF9vcmlnaW4sIGJvb2wgaXNfc3RydWN0X29wcywgdTY0IGFyZW5hX2Jhc2UpXG57XG5cdHU4IHRtcCA9IGJwZjJhNjRbVE1QX1JFR18xXTtcblx0dTggYmFzZV9sbyA9IGJwZjJhNjRbVE1QX1JFR18yXTtcblx0aW50IGksIHJlZywgZG9mZiwgc29mZiwgc2xvdHM7XG5cblx0Lyogb25seSB0aGUgbG93IDMyIGJpdHMgb2YgdGhlIGJhc2UgdGFrZSBwYXJ0IGluIHRoZSBzdWJ0cmFjdGlvbiAqL1xuXHRpZiAoYXJlbmFfYmFzZSlcblx0XHRlbWl0X2E2NF9tb3ZfaSgwLCBiYXNlX2xvLCAoczMyKSh1MzIpYXJlbmFfYmFzZSwgY3R4KTtcbi4uLlxuYGBgXG5cbkFoLCBldmVyeXRoaW5nIGhlcmUgKnNlZW1zKiBwcm9wZXJseSBpbml0aWFsaXplZC4gVGhlIGBhcmVuYV9iYXNlYCB2YXJpYWJsZSBpcyBiZWluZyBhc3NpZ25lZCwgYW5kIHRoZSBnZW5lcmF0ZWQgbWFjaGluZSBjb2RlIChhbmQgcmVnaXN0ZXJzKSBzZWVtIHRvIGJlIGNvcnJlY3RseSBtYW5hZ2VkLlxuXG5HaXZlbiBhbGwgb2YgdGhpcywgSSdtIGNvbmZpZGVudCB0aGF0IEtNU0FOIGlzbid0IG5lZWRlZCBoZXJlLiBUaGUgcmlzayBpcyBsaW1pdGVkIHRvIEpJVCBjb21waWxhdGlvbiBsb2dpYyBlcnJvcnMsIHdoaWNoIEtBU0FOIGFuZCBzdGFuZGFyZCB0ZXN0aW5nIHNob3VsZCBlZmZlY3RpdmVseSBhZGRyZXNzLlxuXG4qKlRoZXJlZm9yZSwgTmVlZHNLTVNBTiA9IGZhbHNlLioqXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNDA0LCJPdXRwdXRUb2tlbnMiOjIxMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg0NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDIwOjUxOjUzLjE0NDUyOTcyMloiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZXh0ZW5kcyB0aGUgYXJtNjQgQlBGIEpJVCBjb21waWxlciB0byBzdXBwb3J0IEJQRiBhcmVuYSBhcmd1bWVudHMuIEl0IGludHJvZHVjZXMgbmV3IGluc3RydWN0aW9uIGVuY29kaW5nIGZ1bmN0aW9ucyBmb3IgYXJtNjQgKGUuZy4sIGBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnYCkgYW5kIG1vZGlmaWVzIHRoZSBKSVQgY29tcGlsZXIgKGBhcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY2ApIHRvIGVtaXQgaW5zdHJ1Y3Rpb25zIHRoYXQgcmViYXNlIGFyZW5hIHBvaW50ZXJzLiBUaGUgY2hhbmdlcyBhcmUgc3RyaWN0bHkgcmVsYXRlZCB0byBKSVQgY29tcGlsYXRpb24gbG9naWMgYW5kIGluc3RydWN0aW9uIGVtaXNzaW9uLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBrZXJuZWwgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvIHRoZXkgYWxsb2NhdGUgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgdGhhdCBjb3VsZCBiZSBsZWZ0IHVuaW5pdGlhbGl6ZWQuIEFueSBidWdzIGluIHRoZSBKSVQgY29tcGlsZXIgd291bGQgbGlrZWx5IHJlc3VsdCBpbiBpbnZhbGlkIGluc3RydWN0aW9uIGdlbmVyYXRpb24sIGNyYXNoZXMsIG9yIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIGluIHRoZSBKSVRlZCBjb2RlLCB3aGljaCBhcmUgYWRlcXVhdGVseSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgdGVzdGluZy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZSB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZXh0ZW5kcyB0aGUgYXJtNjQgQlBGIEpJVCBjb21waWxlciB0byBzdXBwb3J0IEJQRiBhcmVuYSBhcmd1bWVudHMuIEl0IGludHJvZHVjZXMgbmV3IGluc3RydWN0aW9uIGVuY29kaW5nIGZ1bmN0aW9ucyBmb3IgYXJtNjQgKGUuZy4sIGBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnYCkgYW5kIG1vZGlmaWVzIHRoZSBKSVQgY29tcGlsZXIgKGBhcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY2ApIHRvIGVtaXQgaW5zdHJ1Y3Rpb25zIHRoYXQgcmViYXNlIGFyZW5hIHBvaW50ZXJzLiBUaGUgY2hhbmdlcyBhcmUgc3RyaWN0bHkgcmVsYXRlZCB0byBKSVQgY29tcGlsYXRpb24gbG9naWMgYW5kIGluc3RydWN0aW9uIGVtaXNzaW9uLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBrZXJuZWwgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvIHRoZXkgYWxsb2NhdGUgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgdGhhdCBjb3VsZCBiZSBsZWZ0IHVuaW5pdGlhbGl6ZWQuIEFueSBidWdzIGluIHRoZSBKSVQgY29tcGlsZXIgd291bGQgbGlrZWx5IHJlc3VsdCBpbiBpbnZhbGlkIGluc3RydWN0aW9uIGdlbmVyYXRpb24sIGNyYXNoZXMsIG9yIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIGluIHRoZSBKSVRlZCBjb2RlLCB3aGljaCBhcmUgYWRlcXVhdGVseSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgdGVzdGluZy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZSB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow2mzb8[1] Phase: Succeeded StartedAt: 2026-08-13 20:52:04 +0000 UTC FinishedAt: 2026-08-13 20:52:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2mzb8[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-13 20:52:04 +0000 UTC FinishedAt: 2026-08-13 20:52:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2mzb8[2] Phase: Succeeded StartedAt: 2026-08-13 20:52:04 +0000 UTC FinishedAt: 2026-08-13 21:37:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2mzb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["aarch64_insn_gen_add_sub_extended_reg","bpf_jit_supports_arena_args","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"3871e210-1a45-42e7-9439-b7ae2abdd34c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-13 20:52:04 +0000 UTC FinishedAt: 2026-08-13 21:37:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["aarch64_insn_gen_add_sub_extended_reg","bpf_jit_supports_arena_args","arch_prepare_bpf_trampoline"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"3871e210-1a45-42e7-9439-b7ae2abdd34c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow2mzb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["aarch64_insn_gen_add_sub_extended_reg","bpf_jit_supports_arena_args","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"3871e210-1a45-42e7-9439-b7ae2abdd34c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-13 20:52:04 +0000 UTC FinishedAt: 2026-08-13 20:52:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2mzb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["aarch64_insn_gen_add_sub_extended_reg","bpf_jit_supports_arena_args","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"3871e210-1a45-42e7-9439-b7ae2abdd34c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-13 20:52:04 +0000 UTC FinishedAt: 2026-08-13 20:52:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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-workflow2mzb8/series-workflow2mzb8-convert-artifact-2937572878/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2mzb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["aarch64_insn_gen_add_sub_extended_reg","bpf_jit_supports_arena_args","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"3871e210-1a45-42e7-9439-b7ae2abdd34c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-13 20:52:14 +0000 UTC FinishedAt: 2026-08-13 21:14:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2mzb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["aarch64_insn_gen_add_sub_extended_reg","bpf_jit_supports_arena_args","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"3871e210-1a45-42e7-9439-b7ae2abdd34c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-13 20:52:14 +0000 UTC FinishedAt: 2026-08-13 21:14:01 +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:*161cc0f5-621f-4b14-85f2-aed5a66e089c,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-workflow2mzb8/series-workflow2mzb8-convert-artifact-2937572878/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": "9ad7eb60-5c95-4fa4-896f-275c188ddf90", "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-workflow2mzb8/series-workflow2mzb8-build-action-1913721460/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2mzb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["aarch64_insn_gen_add_sub_extended_reg","bpf_jit_supports_arena_args","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"3871e210-1a45-42e7-9439-b7ae2abdd34c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-13 20:52:14 +0000 UTC FinishedAt: 2026-08-13 21:13:51 +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:*161cc0f5-621f-4b14-85f2-aed5a66e089c,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-workflow2mzb8/series-workflow2mzb8-convert-artifact-2937572878/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": "9ad7eb60-5c95-4fa4-896f-275c188ddf90", "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-workflow2mzb8/series-workflow2mzb8-build-action-1913721460/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2mzb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["aarch64_insn_gen_add_sub_extended_reg","bpf_jit_supports_arena_args","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"3871e210-1a45-42e7-9439-b7ae2abdd34c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-13 21:14:01 +0000 UTC FinishedAt: 2026-08-13 21:14:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2mzb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["aarch64_insn_gen_add_sub_extended_reg","bpf_jit_supports_arena_args","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"3871e210-1a45-42e7-9439-b7ae2abdd34c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-13 21:14:01 +0000 UTC FinishedAt: 2026-08-13 21:14:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2mzb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["aarch64_insn_gen_add_sub_extended_reg","bpf_jit_supports_arena_args","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"3871e210-1a45-42e7-9439-b7ae2abdd34c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-13 21:14:01 +0000 UTC FinishedAt: 2026-08-13 21:14:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2mzb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["aarch64_insn_gen_add_sub_extended_reg","bpf_jit_supports_arena_args","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"3871e210-1a45-42e7-9439-b7ae2abdd34c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-13 21:14:01 +0000 UTC FinishedAt: 2026-08-13 21:14:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"3871e210-1a45-42e7-9439-b7ae2abdd34c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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-workflow2mzb8/series-workflow2mzb8-convert-artifact-2426506753/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2mzb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["aarch64_insn_gen_add_sub_extended_reg","bpf_jit_supports_arena_args","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"3871e210-1a45-42e7-9439-b7ae2abdd34c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-13 21:14:12 +0000 UTC FinishedAt: 2026-08-13 21:16:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2mzb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["aarch64_insn_gen_add_sub_extended_reg","bpf_jit_supports_arena_args","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"3871e210-1a45-42e7-9439-b7ae2abdd34c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-13 21:14:12 +0000 UTC FinishedAt: 2026-08-13 21:16:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9ad7eb60-5c95-4fa4-896f-275c188ddf90,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-workflow2mzb8/series-workflow2mzb8-build-action-1913721460/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-workflow2mzb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["aarch64_insn_gen_add_sub_extended_reg","bpf_jit_supports_arena_args","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"3871e210-1a45-42e7-9439-b7ae2abdd34c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-13 21:16:23 +0000 UTC FinishedAt: 2026-08-13 21:16:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2mzb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["aarch64_insn_gen_add_sub_extended_reg","bpf_jit_supports_arena_args","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"3871e210-1a45-42e7-9439-b7ae2abdd34c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-13 21:16:23 +0000 UTC FinishedAt: 2026-08-13 21:16:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2mzb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["aarch64_insn_gen_add_sub_extended_reg","bpf_jit_supports_arena_args","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"3871e210-1a45-42e7-9439-b7ae2abdd34c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-13 21:16:23 +0000 UTC FinishedAt: 2026-08-13 21:33:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2mzb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["aarch64_insn_gen_add_sub_extended_reg","bpf_jit_supports_arena_args","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"3871e210-1a45-42e7-9439-b7ae2abdd34c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-13 21:16:23 +0000 UTC FinishedAt: 2026-08-13 21:33:35 +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:*161cc0f5-621f-4b14-85f2-aed5a66e089c,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-workflow2mzb8/series-workflow2mzb8-convert-artifact-2426506753/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": "9275c30b-fd95-4833-8386-fd15a2fefad8", "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-workflow2mzb8/series-workflow2mzb8-build-action-1605525133/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2mzb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["aarch64_insn_gen_add_sub_extended_reg","bpf_jit_supports_arena_args","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"3871e210-1a45-42e7-9439-b7ae2abdd34c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-13 21:16:23 +0000 UTC FinishedAt: 2026-08-13 21:33:25 +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:*161cc0f5-621f-4b14-85f2-aed5a66e089c,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-workflow2mzb8/series-workflow2mzb8-convert-artifact-2426506753/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": "9275c30b-fd95-4833-8386-fd15a2fefad8", "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-workflow2mzb8/series-workflow2mzb8-build-action-1605525133/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2mzb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["aarch64_insn_gen_add_sub_extended_reg","bpf_jit_supports_arena_args","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"3871e210-1a45-42e7-9439-b7ae2abdd34c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-13 21:33:35 +0000 UTC FinishedAt: 2026-08-13 21:33:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2mzb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["aarch64_insn_gen_add_sub_extended_reg","bpf_jit_supports_arena_args","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"3871e210-1a45-42e7-9439-b7ae2abdd34c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-13 21:33:35 +0000 UTC FinishedAt: 2026-08-13 21:33:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2mzb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["aarch64_insn_gen_add_sub_extended_reg","bpf_jit_supports_arena_args","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"3871e210-1a45-42e7-9439-b7ae2abdd34c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-13 21:33:35 +0000 UTC FinishedAt: 2026-08-13 21:35:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2mzb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["aarch64_insn_gen_add_sub_extended_reg","bpf_jit_supports_arena_args","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"3871e210-1a45-42e7-9439-b7ae2abdd34c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-13 21:33:35 +0000 UTC FinishedAt: 2026-08-13 21:35:34 +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:*9275c30b-fd95-4833-8386-fd15a2fefad8,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-workflow2mzb8/series-workflow2mzb8-build-action-1605525133/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-workflow2mzb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["aarch64_insn_gen_add_sub_extended_reg","bpf_jit_supports_arena_args","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"3871e210-1a45-42e7-9439-b7ae2abdd34c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-13 21:35:44 +0000 UTC FinishedAt: 2026-08-13 21:37:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2mzb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["aarch64_insn_gen_add_sub_extended_reg","bpf_jit_supports_arena_args","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"3871e210-1a45-42e7-9439-b7ae2abdd34c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-13 21:35:44 +0000 UTC FinishedAt: 2026-08-13 21:37:43 +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":["aarch64_insn_gen_add_sub_extended_reg","bpf_jit_supports_arena_args","arch_prepare_bpf_trampoline"],"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:*9ad7eb60-5c95-4fa4-896f-275c188ddf90,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*9275c30b-fd95-4833-8386-fd15a2fefad8,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-workflow2mzb8/series-workflow2mzb8-build-action-1913721460/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-workflow2mzb8/series-workflow2mzb8-build-action-1605525133/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow2mzb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["aarch64_insn_gen_add_sub_extended_reg","bpf_jit_supports_arena_args","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"3871e210-1a45-42e7-9439-b7ae2abdd34c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-13 21:35:44 +0000 UTC FinishedAt: 2026-08-13 21:35:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2mzb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["aarch64_insn_gen_add_sub_extended_reg","bpf_jit_supports_arena_args","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"3871e210-1a45-42e7-9439-b7ae2abdd34c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-13 21:35:44 +0000 UTC FinishedAt: 2026-08-13 21:35:49 +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":["aarch64_insn_gen_add_sub_extended_reg","bpf_jit_supports_arena_args","arch_prepare_bpf_trampoline"],"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-workflow2mzb8/series-workflow2mzb8-convert-artifact-63214486/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2mzb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["aarch64_insn_gen_add_sub_extended_reg","bpf_jit_supports_arena_args","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"3871e210-1a45-42e7-9439-b7ae2abdd34c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-13 21:35:44 +0000 UTC FinishedAt: 2026-08-13 21:35:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2mzb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["aarch64_insn_gen_add_sub_extended_reg","bpf_jit_supports_arena_args","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"3871e210-1a45-42e7-9439-b7ae2abdd34c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-13 21:35:44 +0000 UTC FinishedAt: 2026-08-13 21:35:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2mzb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["aarch64_insn_gen_add_sub_extended_reg","bpf_jit_supports_arena_args","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"3871e210-1a45-42e7-9439-b7ae2abdd34c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-13 21:35:44 +0000 UTC FinishedAt: 2026-08-13 21:35:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2mzb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["aarch64_insn_gen_add_sub_extended_reg","bpf_jit_supports_arena_args","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"3871e210-1a45-42e7-9439-b7ae2abdd34c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-13 21:35:54 +0000 UTC FinishedAt: 2026-08-13 21:37:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2mzb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["aarch64_insn_gen_add_sub_extended_reg","bpf_jit_supports_arena_args","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6f033615ef8fb2374daa7e50a8ff68616bc850d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"3871e210-1a45-42e7-9439-b7ae2abdd34c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-13 21:35:54 +0000 UTC FinishedAt: 2026-08-13 21:37:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9ad7eb60-5c95-4fa4-896f-275c188ddf90,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*9275c30b-fd95-4833-8386-fd15a2fefad8,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-workflow2mzb8/series-workflow2mzb8-build-action-1913721460/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-workflow2mzb8/series-workflow2mzb8-build-action-1605525133/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-workflow2mzb8/series-workflow2mzb8-convert-artifact-63214486/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,}